/[CvsGraph]/cvsgraph/rcsl.l
ViewVC logotype

Annotate of /cvsgraph/rcsl.l

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations)
Sun Mar 4 01:38:23 2001 UTC (16 years, 8 months ago) by bertho
Branch: MAIN
CVS Tags: REL_1_1_2, REL_1_1_1, REL_1_1_0
Major update of the code.
- Complete new method of getting the revision structure by directly
  reading the rcs/cvs file. This should also speed things a bit
  because no external program needs to be called anymore.
  This also means that "remote-graphs" are no longer a possible
  extension of the program. But, who cares.
- Implemented branch-kerning to save place. The images are now
  much smaller in width, dependent on the settings of the exterior
  margins.
- Fixed disjoint braches by reading the structure direct from the
  rcs/cvs file. The revision/branch structure is no longer determined
  from the revision numbers, but solely from the rcs/cvs file structure.
- Fixed display of branches with no revisions attached to them. These
  only have a tag describing the new branch.
1 /*
2 * CvsGraph graphical representation generator of brances and revisions
3 * of a file in cvs/rcs.
4 *
5 * Copyright (C) 2001 B. Stultiens
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22 %x xSTR
23 %x xID
24 %x xSYM
25 %x xSKIP
26 %x xSKIPSTR
27
28 %{
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <ctype.h>
33
34 #include "utils.h"
35 #include "readconf.h"
36 #include "rcs.h"
37 #include "rcs.tab.h"
38
39 #define SKIP_DELTATEXT 1
40
41 static void reset_str(void);
42 static void add_str(const char *s, int l);
43 static char *get_str(void);
44
45 static int skip_string = 0;
46
47 #define YY_NO_UNPUT 1
48
49 %}
50
51 ws [\b\t\v\f\r ]
52 num [0-9.]+
53 digit [0-9]
54 idchar [!-#%-+\-/<-?A-~\240-\377]
55 special [$,.:;@]
56
57 %%
58 /* RCS keywords */
59 head return tHEAD;
60 branch return tBRANCH;
61 access return tACCESS;
62 symbols return tSYMBOLS;
63 locks return tLOCKS;
64 strict return tSTRICT;
65 comment return tCOMMENT;
66 expand return tEXPAND;
67 date return tDATE;
68 author return tAUTHOR;
69 state return tSTATE;
70 branches return tBRANCHES;
71 next return tNEXT;
72 desc return tDESC;
73 log return tLOG;
74 text return tTEXT;
75 /* CVS extensions */
76 owner return tOWNER;
77 group return tGROUP;
78 permissions return tPERMISSIONS;
79 special return tSPECIAL;
80 symlnk return tSYMLINK;
81 hardlinks return tHARDLINKS;
82 /* Other known extensions */
83 namespace return tNAMESPACE;
84 dead return tDEAD;
85
86 /* Here come any other 'newphrase' constructs */
87 {num}?{idchar}({idchar}|{num})* {
88 rcslval.str = xstrdup(rcstext);
89 return tNEWPHRASE;
90 }
91
92 /* Special rules for skipping everything after a 'newphrase' part */
93 <xSKIP>[^;@\n]+ ;
94 <xSKIP>\n line_number++;
95 <xSKIP>@ BEGIN(xSKIPSTR);
96 <xSKIP>; BEGIN(INITIAL); return *rcstext;
97
98 <xSKIPSTR>[^\n@]+ ;
99 <xSKIPSTR>\n line_number++;
100 <xSKIPSTR>@@ ;
101 <xSKIPSTR>@ BEGIN(xSKIP);
102
103 {num} rcslval.str = xstrdup(rcstext); return tREV;
104 [:;$] return *rcstext;
105
106 <xID>{ws}+ ;
107 <xID>\n line_number++;
108 <xID>{special} BEGIN(INITIAL); return *rcstext;
109 <xID>{num}?{idchar}({idchar}|{num})* {
110 rcslval.str = xstrdup(rcstext);
111 BEGIN(INITIAL);
112 return tID;
113 }
114
115 <xSYM>{ws}+ ;
116 <xSYM>\n line_number++;
117 <xSYM>{special} BEGIN(INITIAL); return *rcstext;
118 <xSYM>{digit}*{idchar}({idchar}|{digit})* {
119 rcslval.str = xstrdup(rcstext);
120 BEGIN(INITIAL);
121 return tSYM;
122 }
123
124 @ reset_str(); BEGIN(xSTR);
125 <xSTR>[^@\n]+ add_str(rcstext, rcsleng);
126 <xSTR>\n line_number++; add_str(rcstext, rcsleng);
127 <xSTR>@@ add_str(rcstext, 1);
128 <xSTR>@ rcslval.str = get_str(); BEGIN(INITIAL); skip_string = 0; return tSTRING;
129
130
131 {ws}+ ; /* Ignore whitespace */
132 \n line_number++;
133
134 . rcserror("Unknown char/unmatched text '%c' (0x%02x)", isprint(*rcstext) ? *rcstext : ' ', *rcstext);
135
136 %%
137
138 int rcswrap(void)
139 {
140 return 1;
141 }
142
143 void set_id(void)
144 {
145 BEGIN(xID);
146 }
147
148 void set_sym(void)
149 {
150 BEGIN(xSYM);
151 }
152
153 void set_skip(void)
154 {
155 BEGIN(xSKIP);
156 }
157
158 void set_skipstr(void)
159 {
160 skip_string = 1;
161 }
162
163 #define STRALLOCSIZE 256
164 static char *str;
165 static int nstr;
166 static int nastr;
167
168 static void reset_str(void)
169 {
170 nstr = 0;
171 }
172
173 static void add_str(const char *s, int l)
174 {
175 #ifdef SKIP_DELTATEXT
176 if(skip_string)
177 return;
178 #endif
179 if(nstr + l + 1 > nastr)
180 {
181 str = xrealloc(str, nastr+STRALLOCSIZE);
182 nastr += STRALLOCSIZE;
183 }
184 memcpy(str+nstr, s, l);
185 nstr += l;
186 }
187
188 static char *get_str(void)
189 {
190 #ifdef SKIP_DELTATEXT
191 if(skip_string)
192 return xstrdup("");
193 #endif
194 str[nstr] = '\0';
195 return xstrdup(str);
196 }
197

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0