plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

delatex.lx (2504B)


      1 /* Make this with:  lex delatex.lex;  cc lex.yy.c -ll -o delatex */
      2 L [A-Za-z]
      3 %Start Display Math Normal Tag VerbPlus Bracket
      4 %%
      5 <Normal>\'	{yyleng--; yymore(); /* ignore apostrophes */}
      6 <Normal>{L}+\\- {yyleng-=2; yymore(); /* ignore hyphens */}
      7 <Normal>[a-zA-Z0-9_]+@[a-zA-Z0-9_.]+	;	/* ignore email addresses */
      8 <Normal>[a-z]/[^A-Za-z] ; /* ignore single letter "words" */
      9 <Normal>[A-Z]+	; /* ignore words all in uppercase */
     10 <Normal>{L}+('{L}*)*{L}	{printf("%s\n",yytext); /* any other letter seq is a word */} 
     11 <Normal>"%".*	; /* ignore comments */
     12 <Normal>\\{L}+	; /* ignore other control sequences */
     13 <Normal>"\\begin{"	BEGIN Tag; /* ignore this and up to next "}" */
     14 <Normal>"\\bibitem{"	BEGIN Tag;
     15 <Normal>"\\bibliography{"	BEGIN Tag;
     16 <Normal>"\\bibstyle{"	BEGIN Tag;
     17 <Normal>"\\cite{"	BEGIN Tag;
     18 <Normal>"\\end{"		BEGIN Tag;
     19 <Normal>"\\include{"	BEGIN Tag;
     20 <Normal>"\\includeonly{"	BEGIN Tag;
     21 <Normal>"\\input{"	BEGIN Tag;
     22 <Normal>"\\label{"	BEGIN Tag;
     23 <Normal>"\\pageref{"	BEGIN Tag;
     24 <Normal>"\\ref{"		BEGIN Tag;
     25 <Normal>"\\verb+"	BEGIN VerbPlus;
     26 <Normal>"\\documentclass["	BEGIN Bracket;
     27 <Normal>"\\documentclass{"	BEGIN Tag;
     28 <Normal>"\\usepackage["	BEGIN Bracket;
     29 <Normal>"\\usepackage{"	BEGIN Tag;
     30 <Bracket>[^\]]	;
     31 <Bracket>"]["	;
     32 <Bracket>"]{"	BEGIN Tag;
     33 <Bracket>"]"	BEGIN Normal;
     34 <Tag>[^}]		; /* ignore things up to next "}" */
     35 <Tag>"}"		BEGIN Normal;
     36 <VerbPlus>[^+]	;	/* ignore thing up to next "+" */
     37 <VerbPlus>"+"	BEGIN Normal;
     38 <Normal>[0-9]+	; /* ignore numbers */
     39 <Normal>"\\("		BEGIN Math; /* begin latex math mode */
     40 <Math>"\\)"		BEGIN Normal; /* end latex math mode */
     41 <Math>.|\\[^)]|\n	; /* ignore anything else in latex math mode */
     42 <Normal>"\\["		BEGIN Display; /* now in Latex display mode */
     43 <Display>[^$]|\\[^\]]	; /* ignore most things in display math mode */
     44 <Display>"\\]"	BEGIN Normal; /* get out of Display math mode */
     45 <Normal>\\.	; /* ignore other single character control sequences */
     46 <Normal>\\\n	; /* more of the same */
     47 <Normal>\n|.	; /* ignore anything else, a character at a time */
     48 %%
     49 #include <stdio.h>
     50 #include <stdlib.h>
     51 
     52 int
     53 main(int argc, char **argv)
     54 {
     55 	int i;
     56 	
     57 	if (argc==1) {
     58 	    yyin = stdin;
     59 	    BEGIN Normal; /* Starts yylex off in the right state */
     60 	    yylex();
     61 	    }
     62 	else for (i=1; i<argc; i++) {
     63 	    yyin = fopen(argv[i],"r");
     64 	    if (yyin==NULL) {
     65 		fprintf(stderr,"can't open %s\n",argv[i]);
     66 		exit(1);
     67 		}
     68 	    BEGIN Normal; /* Starts yylex off in the right state */
     69 	    yylex();
     70 	    }
     71 	exit(0);
     72 }
     73 int
     74 yywrap(void)
     75 {
     76 	return 1;
     77 }