xref: /minix3/external/bsd/flex/dist/examples/manual/j2t.lex (revision 357f1050293be536ca8309aae20889945ce99fc1)
1*357f1050SThomas Veerman /*
2*357f1050SThomas Veerman  * j2t.lex : An example of the use (possibly abuse!)
3*357f1050SThomas Veerman  *           of start states.
4*357f1050SThomas Veerman  */
5*357f1050SThomas Veerman 
6*357f1050SThomas Veerman %{
7*357f1050SThomas Veerman #define MAX_STATES 1024
8*357f1050SThomas Veerman #define TRUE  1
9*357f1050SThomas Veerman #define FALSE 0
10*357f1050SThomas Veerman 
11*357f1050SThomas Veerman #define CHAPTER   "@chapter"
12*357f1050SThomas Veerman #define SECTION   "@section"
13*357f1050SThomas Veerman #define SSECTION  "@subsection"
14*357f1050SThomas Veerman #define SSSECTION "@subsubsection"
15*357f1050SThomas Veerman 
16*357f1050SThomas Veerman int  states[MAX_STATES];
17*357f1050SThomas Veerman int  statep = 0;
18*357f1050SThomas Veerman 
19*357f1050SThomas Veerman int  need_closing = FALSE;
20*357f1050SThomas Veerman 
21*357f1050SThomas Veerman char buffer[YY_BUF_SIZE];
22*357f1050SThomas Veerman 
23*357f1050SThomas Veerman extern char *yytext;
24*357f1050SThomas Veerman 
25*357f1050SThomas Veerman /*
26*357f1050SThomas Veerman  * set up the head of the *.texinfo file the program
27*357f1050SThomas Veerman  * will produce. This is a standard texinfo header.
28*357f1050SThomas Veerman  */
29*357f1050SThomas Veerman 
print_header(void)30*357f1050SThomas Veerman void print_header(void)
31*357f1050SThomas Veerman {
32*357f1050SThomas Veerman    printf("\\input texinfo @c -*-texinfo-*-\n");
33*357f1050SThomas Veerman    printf("@c           %c**start of header\n",'%');
34*357f1050SThomas Veerman    printf("@setfilename       jargon.info\n");
35*357f1050SThomas Veerman    printf("@settitle          The New Hackers Dictionary\n");
36*357f1050SThomas Veerman    printf("@synindex          fn cp\n");
37*357f1050SThomas Veerman    printf("@synindex          vr cp\n");
38*357f1050SThomas Veerman    printf("@c           %c**end of header\n",'%');
39*357f1050SThomas Veerman    printf("@setchapternewpage odd\n");
40*357f1050SThomas Veerman    printf("@finalout\n");
41*357f1050SThomas Veerman    printf("@c @smallbook\n");
42*357f1050SThomas Veerman    printf("\n");
43*357f1050SThomas Veerman    printf("@c ==========================================================\n\n");
44*357f1050SThomas Veerman    printf("@c  This file was produced by j2t. Any mistakes are *not* the\n");
45*357f1050SThomas Veerman    printf("@c  fault of the jargon file editors.                        \n");
46*357f1050SThomas Veerman    printf("@c ==========================================================\n\n");
47*357f1050SThomas Veerman    printf("@titlepage\n");
48*357f1050SThomas Veerman    printf("@title     The New Hackers Dictionary\n");
49*357f1050SThomas Veerman    printf("@subtitle  Version 2.9.10\n");
50*357f1050SThomas Veerman    printf("@subtitle  Generated by j2t\n");
51*357f1050SThomas Veerman    printf("@author    Eric S. Raymond, Guy L. Steel, Mark Crispin et al.\n");
52*357f1050SThomas Veerman    printf("@end titlepage\n");
53*357f1050SThomas Veerman    printf("@page\n");
54*357f1050SThomas Veerman    printf("\n@c ==========================================================\n");
55*357f1050SThomas Veerman    printf("\n\n");
56*357f1050SThomas Veerman    printf("@unnumbered Preface\n");
57*357f1050SThomas Veerman    printf("@c          *******\n");
58*357f1050SThomas Veerman }
59*357f1050SThomas Veerman 
60*357f1050SThomas Veerman /*
61*357f1050SThomas Veerman  * create the tail of the texinfo file produced.
62*357f1050SThomas Veerman  */
63*357f1050SThomas Veerman 
print_trailer(void)64*357f1050SThomas Veerman void print_trailer(void)
65*357f1050SThomas Veerman {
66*357f1050SThomas Veerman    printf("\n@c ==========================================================\n");
67*357f1050SThomas Veerman    printf("@contents\n");   /* print the table of contents */
68*357f1050SThomas Veerman    printf("@bye\n\n");
69*357f1050SThomas Veerman }
70*357f1050SThomas Veerman 
71*357f1050SThomas Veerman /*
72*357f1050SThomas Veerman  * write an underline under a section
73*357f1050SThomas Veerman  * or chapter so we can find it later.
74*357f1050SThomas Veerman  */
75*357f1050SThomas Veerman 
write_underline(int len,int space,char ch)76*357f1050SThomas Veerman void write_underline(int len, int space, char ch)
77*357f1050SThomas Veerman {
78*357f1050SThomas Veerman   int loop;
79*357f1050SThomas Veerman 
80*357f1050SThomas Veerman   printf("@c ");
81*357f1050SThomas Veerman 
82*357f1050SThomas Veerman   for(loop=3; loop<space; loop++){
83*357f1050SThomas Veerman     printf(" ");
84*357f1050SThomas Veerman   }
85*357f1050SThomas Veerman 
86*357f1050SThomas Veerman   while(len--){
87*357f1050SThomas Veerman     printf("%c",ch);
88*357f1050SThomas Veerman   }
89*357f1050SThomas Veerman   printf("\n\n");
90*357f1050SThomas Veerman }
91*357f1050SThomas Veerman 
92*357f1050SThomas Veerman /*
93*357f1050SThomas Veerman  * check for texinfo special characters
94*357f1050SThomas Veerman  * and escape them
95*357f1050SThomas Veerman  */
96*357f1050SThomas Veerman 
check_and_convert(char * string)97*357f1050SThomas Veerman char *check_and_convert(char *string)
98*357f1050SThomas Veerman {
99*357f1050SThomas Veerman   int  buffpos = 0;
100*357f1050SThomas Veerman   int  len,loop;
101*357f1050SThomas Veerman 
102*357f1050SThomas Veerman   len = strlen(string);
103*357f1050SThomas Veerman   for(loop=0; loop<len; loop++){
104*357f1050SThomas Veerman     if(string[loop] == '@' || string[loop] == '{' || string[loop] == '}'){
105*357f1050SThomas Veerman       buffer[buffpos++] = '@';
106*357f1050SThomas Veerman       buffer[buffpos++] = string[loop];
107*357f1050SThomas Veerman     } else {
108*357f1050SThomas Veerman       buffer[buffpos++] = string[loop];
109*357f1050SThomas Veerman     }
110*357f1050SThomas Veerman   }
111*357f1050SThomas Veerman   buffer[buffpos] = '\0';
112*357f1050SThomas Veerman   return(buffer);
113*357f1050SThomas Veerman }
114*357f1050SThomas Veerman 
115*357f1050SThomas Veerman /*
116*357f1050SThomas Veerman  * write out a chapter,section, or subsection
117*357f1050SThomas Veerman  * header
118*357f1050SThomas Veerman  */
119*357f1050SThomas Veerman 
write_block_header(char * type)120*357f1050SThomas Veerman void write_block_header(char *type)
121*357f1050SThomas Veerman {
122*357f1050SThomas Veerman   int loop;
123*357f1050SThomas Veerman   int len;
124*357f1050SThomas Veerman 
125*357f1050SThomas Veerman   (void)check_and_convert(yytext);
126*357f1050SThomas Veerman   len = strlen(buffer);
127*357f1050SThomas Veerman   for(loop=0; buffer[loop] != '\n';loop++)
128*357f1050SThomas Veerman          ;
129*357f1050SThomas Veerman   buffer[loop] = '\0';
130*357f1050SThomas Veerman   printf("%s %s\n",type,buffer);
131*357f1050SThomas Veerman   write_underline(strlen(buffer),strlen(type)+1,'*');
132*357f1050SThomas Veerman }
133*357f1050SThomas Veerman 
134*357f1050SThomas Veerman %}
135*357f1050SThomas Veerman 
136*357f1050SThomas Veerman /*
137*357f1050SThomas Veerman  * the flex description starts here
138*357f1050SThomas Veerman  */
139*357f1050SThomas Veerman 
140*357f1050SThomas Veerman %x HEADING EXAMPLE ENUM EXAMPLE2
141*357f1050SThomas Veerman %x BITEM BITEM_ITEM
142*357f1050SThomas Veerman %s LITEM LITEM2
143*357f1050SThomas Veerman 
144*357f1050SThomas Veerman %%
145*357f1050SThomas Veerman 
146*357f1050SThomas Veerman ^#[^#]*"#"  /* skip the header & trailer */
147*357f1050SThomas Veerman                      /* chapters have asterisks under them
148*357f1050SThomas Veerman                       * and are terminated by a colon
149*357f1050SThomas Veerman                       */
150*357f1050SThomas Veerman ^[^\n:]+\n[*]+\n      write_block_header(CHAPTER);
151*357f1050SThomas Veerman 
152*357f1050SThomas Veerman ^"= "[A-Z]" ="\n"="*  { /* we create a seciton for each category */
153*357f1050SThomas Veerman                         if(need_closing == TRUE){
154*357f1050SThomas Veerman                           printf("@end table\n\n\n");
155*357f1050SThomas Veerman                         }
156*357f1050SThomas Veerman                         need_closing = TRUE;
157*357f1050SThomas Veerman                         write_block_header(SECTION);
158*357f1050SThomas Veerman                         printf("\n\n@table @b\n");
159*357f1050SThomas Veerman                       }
160*357f1050SThomas Veerman 
161*357f1050SThomas Veerman "Examples:"[^\.]+     ECHO;
162*357f1050SThomas Veerman 
163*357f1050SThomas Veerman "*"[^*\n]+"*"         { /* @emph{}(emphasized) text */
164*357f1050SThomas Veerman                         yytext[yyleng-1] = '\0';
165*357f1050SThomas Veerman                         (void)check_and_convert(&yytext[1]);
166*357f1050SThomas Veerman                         printf("@i{%s}",buffer);
167*357f1050SThomas Veerman                       }
168*357f1050SThomas Veerman 
169*357f1050SThomas Veerman "{{"[^}]+"}}"         { /* special emphasis */
170*357f1050SThomas Veerman                         yytext[yyleng-2] = '\0';
171*357f1050SThomas Veerman                         (void)check_and_convert(&yytext[2]);
172*357f1050SThomas Veerman                         printf("@b{%s}",buffer);
173*357f1050SThomas Veerman                       }
174*357f1050SThomas Veerman 
175*357f1050SThomas Veerman "{"[^}]+"}"           { /* special emphasis */
176*357f1050SThomas Veerman                         yytext[yyleng-1] = '\0';
177*357f1050SThomas Veerman                         (void)check_and_convert(&yytext[1]);
178*357f1050SThomas Veerman                         printf("@b{%s}",buffer);
179*357f1050SThomas Veerman                       }
180*357f1050SThomas Veerman 
181*357f1050SThomas Veerman  /* escape some special texinfo characters */
182*357f1050SThomas Veerman <INITIAL,LITEM,LITEM2,BITEM,ENUM,EXAMPLE,EXAMPLE2>"@"  printf("@@");
183*357f1050SThomas Veerman <INITIAL,LITEM,LITEM2,BITEM,ENUM,EXAMPLE,EXAMPLE2>"{"  printf("@{");
184*357f1050SThomas Veerman <INITIAL,LITEM,LITEM2,BITEM,ENUM,EXAMPLE,EXAMPLE2>"}"  printf("@}");
185*357f1050SThomas Veerman 
186*357f1050SThomas Veerman  /*
187*357f1050SThomas Veerman   * reproduce @example code
188*357f1050SThomas Veerman   */
189*357f1050SThomas Veerman 
190*357f1050SThomas Veerman ":"\n+[^\n0-9*]+\n"     "[^ ]   {
191*357f1050SThomas Veerman                         int loop;
192*357f1050SThomas Veerman                         int len;
193*357f1050SThomas Veerman                         int cnt;
194*357f1050SThomas Veerman 
195*357f1050SThomas Veerman                         printf(":\n\n@example \n");
196*357f1050SThomas Veerman                         strcpy(buffer,yytext);
197*357f1050SThomas Veerman                         len = strlen(buffer);
198*357f1050SThomas Veerman                         cnt = 0;
199*357f1050SThomas Veerman                         for(loop=len; loop > 0;loop--){
200*357f1050SThomas Veerman                           if(buffer[loop] == '\n')
201*357f1050SThomas Veerman                              cnt++;
202*357f1050SThomas Veerman                           if(cnt == 2)
203*357f1050SThomas Veerman                               break;
204*357f1050SThomas Veerman                         }
205*357f1050SThomas Veerman                         yyless(loop+1);
206*357f1050SThomas Veerman                         statep++;
207*357f1050SThomas Veerman                         states[statep] = EXAMPLE2;
208*357f1050SThomas Veerman                         BEGIN(EXAMPLE2);
209*357f1050SThomas Veerman                       }
210*357f1050SThomas Veerman <EXAMPLE,EXAMPLE2>^\n  {
211*357f1050SThomas Veerman                       printf("@end example\n\n");
212*357f1050SThomas Veerman                       statep--;
213*357f1050SThomas Veerman                       BEGIN(states[statep]);
214*357f1050SThomas Veerman                     }
215*357f1050SThomas Veerman 
216*357f1050SThomas Veerman  /*
217*357f1050SThomas Veerman   * repoduce @enumerate lists
218*357f1050SThomas Veerman   */
219*357f1050SThomas Veerman 
220*357f1050SThomas Veerman ":"\n+[ \t]*[0-9]+"."   {
221*357f1050SThomas Veerman                       int loop;
222*357f1050SThomas Veerman                       int len;
223*357f1050SThomas Veerman 
224*357f1050SThomas Veerman                       printf(":\n\n@enumerate \n");
225*357f1050SThomas Veerman                       strcpy(buffer,yytext);
226*357f1050SThomas Veerman                       len = strlen(buffer);
227*357f1050SThomas Veerman                       for(loop=len; loop > 0;loop--){
228*357f1050SThomas Veerman                         if(buffer[loop] == '\n')
229*357f1050SThomas Veerman                            break;
230*357f1050SThomas Veerman                       }
231*357f1050SThomas Veerman                       yyless(loop);
232*357f1050SThomas Veerman                       statep++;
233*357f1050SThomas Veerman                       states[statep] = ENUM;
234*357f1050SThomas Veerman                       BEGIN(ENUM);
235*357f1050SThomas Veerman                     }
236*357f1050SThomas Veerman 
237*357f1050SThomas Veerman <ENUM>"@"           printf("@@");
238*357f1050SThomas Veerman <ENUM>":"\n+"     "[^0-9]    {
239*357f1050SThomas Veerman                     printf(":\n\n@example\n");
240*357f1050SThomas Veerman                     statep++;
241*357f1050SThomas Veerman                     states[statep] = EXAMPLE;
242*357f1050SThomas Veerman                     BEGIN(EXAMPLE);
243*357f1050SThomas Veerman                   }
244*357f1050SThomas Veerman 
245*357f1050SThomas Veerman 
246*357f1050SThomas Veerman <ENUM>\n[ \t]+[0-9]+"." {
247*357f1050SThomas Veerman                     printf("\n\n@item ");
248*357f1050SThomas Veerman                    }
249*357f1050SThomas Veerman <ENUM>^[^ ] |
250*357f1050SThomas Veerman <ENUM>\n\n\n[ \t]+[^0-9] {
251*357f1050SThomas Veerman                     printf("\n\n@end enumerate\n\n");
252*357f1050SThomas Veerman                     statep--;
253*357f1050SThomas Veerman                     BEGIN(states[statep]);
254*357f1050SThomas Veerman                   }
255*357f1050SThomas Veerman 
256*357f1050SThomas Veerman  /*
257*357f1050SThomas Veerman   * reproduce one kind of @itemize list
258*357f1050SThomas Veerman   */
259*357f1050SThomas Veerman 
260*357f1050SThomas Veerman ":"\n+":"         {
261*357f1050SThomas Veerman                     int loop;
262*357f1050SThomas Veerman                     int len;
263*357f1050SThomas Veerman 
264*357f1050SThomas Veerman                     printf(":\n\n@itemize @bullet \n");
265*357f1050SThomas Veerman                     yyless(2);
266*357f1050SThomas Veerman                     statep++;
267*357f1050SThomas Veerman                     states[statep] = LITEM2;
268*357f1050SThomas Veerman                     BEGIN(LITEM2);
269*357f1050SThomas Veerman                   }
270*357f1050SThomas Veerman <LITEM2>^":".+":" {
271*357f1050SThomas Veerman                     (void)check_and_convert(&yytext[1]);
272*357f1050SThomas Veerman                     buffer[strlen(buffer)-1]='\0';
273*357f1050SThomas Veerman                     printf("@item @b{%s:}\n",buffer);
274*357f1050SThomas Veerman                   }
275*357f1050SThomas Veerman 
276*357f1050SThomas Veerman <LITEM2>\n\n\n+[^:\n] {
277*357f1050SThomas Veerman                     printf("\n\n@end itemize\n\n");
278*357f1050SThomas Veerman                     ECHO;
279*357f1050SThomas Veerman                     statep--;
280*357f1050SThomas Veerman                     BEGIN(states[statep]);
281*357f1050SThomas Veerman                   }
282*357f1050SThomas Veerman 
283*357f1050SThomas Veerman  /*
284*357f1050SThomas Veerman   * create a list out of the revision history part.
285*357f1050SThomas Veerman   * We need the "Version" for this because it
286*357f1050SThomas Veerman   * clashes with other rules otherwise.
287*357f1050SThomas Veerman   */
288*357f1050SThomas Veerman 
289*357f1050SThomas Veerman :[\n]+"Version"[^:\n*]+":" {
290*357f1050SThomas Veerman                     int loop;
291*357f1050SThomas Veerman                     int len;
292*357f1050SThomas Veerman 
293*357f1050SThomas Veerman                     printf(":\n\n@itemize @bullet \n");
294*357f1050SThomas Veerman                     strcpy(buffer,yytext);
295*357f1050SThomas Veerman                     len = strlen(buffer);
296*357f1050SThomas Veerman                     for(loop=len; loop > 0;loop--){
297*357f1050SThomas Veerman                       if(buffer[loop] == '\n')
298*357f1050SThomas Veerman                          break;
299*357f1050SThomas Veerman                     }
300*357f1050SThomas Veerman                     yyless(loop);
301*357f1050SThomas Veerman                     statep++;
302*357f1050SThomas Veerman                     states[statep] = LITEM;
303*357f1050SThomas Veerman                     BEGIN(LITEM);
304*357f1050SThomas Veerman                   }
305*357f1050SThomas Veerman <LITEM>^.+":"     {
306*357f1050SThomas Veerman                     (void)check_and_convert(yytext);
307*357f1050SThomas Veerman                     buffer[strlen(buffer)-1]='\0';
308*357f1050SThomas Veerman                     printf("@item @b{%s}\n\n",buffer);
309*357f1050SThomas Veerman                   }
310*357f1050SThomas Veerman 
311*357f1050SThomas Veerman <LITEM>^[^:\n]+\n\n[^:\n]+\n  {
312*357f1050SThomas Veerman                     int loop;
313*357f1050SThomas Veerman 
314*357f1050SThomas Veerman                     strcpy(buffer,yytext);
315*357f1050SThomas Veerman                     for(loop=0; buffer[loop] != '\n'; loop++);
316*357f1050SThomas Veerman                     buffer[loop] = '\0';
317*357f1050SThomas Veerman                     printf("%s\n",buffer);
318*357f1050SThomas Veerman                     printf("@end itemize\n\n");
319*357f1050SThomas Veerman                     printf("%s",&buffer[loop+1]);
320*357f1050SThomas Veerman                     statep--;
321*357f1050SThomas Veerman                     BEGIN(states[statep]);
322*357f1050SThomas Veerman                   }
323*357f1050SThomas Veerman 
324*357f1050SThomas Veerman  /*
325*357f1050SThomas Veerman   * reproduce @itemize @bullet lists
326*357f1050SThomas Veerman   */
327*357f1050SThomas Veerman 
328*357f1050SThomas Veerman ":"\n[ ]*"*"      {
329*357f1050SThomas Veerman                     int loop;
330*357f1050SThomas Veerman                     int len;
331*357f1050SThomas Veerman 
332*357f1050SThomas Veerman                     printf(":\n\n@itemize @bullet \n");
333*357f1050SThomas Veerman                     len = strlen(buffer);
334*357f1050SThomas Veerman                     for(loop=0; loop < len;loop++){
335*357f1050SThomas Veerman                       if(buffer[loop] == '\n')
336*357f1050SThomas Veerman                          break;
337*357f1050SThomas Veerman                     }
338*357f1050SThomas Veerman                     yyless((len-loop)+2);
339*357f1050SThomas Veerman                     statep++;
340*357f1050SThomas Veerman                     states[statep] = BITEM;
341*357f1050SThomas Veerman                     BEGIN(BITEM);
342*357f1050SThomas Veerman                   }
343*357f1050SThomas Veerman 
344*357f1050SThomas Veerman <BITEM>^" "*"*"   {
345*357f1050SThomas Veerman                     printf("@item");
346*357f1050SThomas Veerman                     statep++;
347*357f1050SThomas Veerman                     states[statep] = BITEM_ITEM;
348*357f1050SThomas Veerman                     BEGIN(BITEM_ITEM);
349*357f1050SThomas Veerman                   }
350*357f1050SThomas Veerman <BITEM>"@"          printf("@@");
351*357f1050SThomas Veerman <BITEM>^\n        {
352*357f1050SThomas Veerman                     printf("@end itemize\n\n");
353*357f1050SThomas Veerman                     statep--;
354*357f1050SThomas Veerman                     BEGIN(states[statep]);
355*357f1050SThomas Veerman                   }
356*357f1050SThomas Veerman <BITEM_ITEM>[^\:]* {
357*357f1050SThomas Veerman                      printf(" @b{%s}\n\n",check_and_convert(yytext));
358*357f1050SThomas Veerman                    }
359*357f1050SThomas Veerman <BITEM_ITEM>":"   {
360*357f1050SThomas Veerman                     statep--;
361*357f1050SThomas Veerman                     BEGIN(states[statep]);
362*357f1050SThomas Veerman                   }
363*357f1050SThomas Veerman 
364*357f1050SThomas Veerman  /*
365*357f1050SThomas Veerman   * recreate @chapter, @section etc.
366*357f1050SThomas Veerman   */
367*357f1050SThomas Veerman 
368*357f1050SThomas Veerman ^:[^:]*           {
369*357f1050SThomas Veerman                     (void)check_and_convert(&yytext[1]);
370*357f1050SThomas Veerman                     statep++;
371*357f1050SThomas Veerman                     states[statep] = HEADING;
372*357f1050SThomas Veerman                     BEGIN(HEADING);
373*357f1050SThomas Veerman                   }
374*357f1050SThomas Veerman <HEADING>:[^\n]   {
375*357f1050SThomas Veerman                     printf("@item @b{%s}\n",buffer);
376*357f1050SThomas Veerman                     write_underline(strlen(buffer),6,'~');
377*357f1050SThomas Veerman                     statep--;
378*357f1050SThomas Veerman                     BEGIN(states[statep]);
379*357f1050SThomas Veerman                   }
380*357f1050SThomas Veerman <HEADING>:\n"*"*  {
381*357f1050SThomas Veerman                     if(need_closing == TRUE){
382*357f1050SThomas Veerman                       printf("@end table\n\n\n");
383*357f1050SThomas Veerman                       need_closing = FALSE;
384*357f1050SThomas Veerman                     }
385*357f1050SThomas Veerman                     printf("@chapter %s\n",buffer);
386*357f1050SThomas Veerman                     write_underline(strlen(buffer),9,'*');
387*357f1050SThomas Veerman                     statep--;
388*357f1050SThomas Veerman                     BEGIN(states[statep]);
389*357f1050SThomas Veerman                   }
390*357f1050SThomas Veerman <HEADING>:\n"="*  {
391*357f1050SThomas Veerman                     if(need_closing == TRUE){
392*357f1050SThomas Veerman                      printf("@end table\n\n\n");
393*357f1050SThomas Veerman                       need_closing = FALSE;
394*357f1050SThomas Veerman                     }
395*357f1050SThomas Veerman                     printf("@section %s\n",buffer);
396*357f1050SThomas Veerman                     write_underline(strlen(buffer),9,'=');
397*357f1050SThomas Veerman                     statep--;
398*357f1050SThomas Veerman                     BEGIN(states[statep]);
399*357f1050SThomas Veerman                   }
400*357f1050SThomas Veerman <HEADING>"@"        printf("@@");
401*357f1050SThomas Veerman <HEADING>:\n"-"*  {
402*357f1050SThomas Veerman                     if(need_closing == TRUE){
403*357f1050SThomas Veerman                       printf("@end table\n\n\n");
404*357f1050SThomas Veerman                       need_closing = FALSE;
405*357f1050SThomas Veerman                     }
406*357f1050SThomas Veerman                     printf("@subsection %s\n",buffer);
407*357f1050SThomas Veerman                     write_underline(strlen(buffer),12,'-');
408*357f1050SThomas Veerman                     statep--;
409*357f1050SThomas Veerman                     BEGIN(states[statep]);
410*357f1050SThomas Veerman                   }
411*357f1050SThomas Veerman 
412*357f1050SThomas Veerman  /*
413*357f1050SThomas Veerman   * recreate @example text
414*357f1050SThomas Veerman   */
415*357f1050SThomas Veerman 
416*357f1050SThomas Veerman ^"     "          {
417*357f1050SThomas Veerman                     printf("@example\n");
418*357f1050SThomas Veerman                     statep++;
419*357f1050SThomas Veerman                     states[statep] = EXAMPLE;
420*357f1050SThomas Veerman                     BEGIN(EXAMPLE);
421*357f1050SThomas Veerman                   }
422*357f1050SThomas Veerman <EXAMPLE>^"     "
423*357f1050SThomas Veerman .                 ECHO;
424*357f1050SThomas Veerman 
425*357f1050SThomas Veerman %%
426*357f1050SThomas Veerman 
427*357f1050SThomas Veerman /*
428*357f1050SThomas Veerman  * initialise and go.
429*357f1050SThomas Veerman  */
430*357f1050SThomas Veerman 
431*357f1050SThomas Veerman int main(int argc, char *argv[])
432*357f1050SThomas Veerman {
433*357f1050SThomas Veerman   states[0] = INITIAL;
434*357f1050SThomas Veerman   statep    = 0;
435*357f1050SThomas Veerman   print_header();
436*357f1050SThomas Veerman   yylex();
437*357f1050SThomas Veerman   print_trailer();
438*357f1050SThomas Veerman   return(0);
439*357f1050SThomas Veerman }
440*357f1050SThomas Veerman 
441*357f1050SThomas Veerman 
442*357f1050SThomas Veerman 
443