diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/xetal/l.l |
Initial commit
Diffstat (limited to 'support/xetal/l.l')
-rw-r--r-- | support/xetal/l.l | 1081 |
1 files changed, 1081 insertions, 0 deletions
diff --git a/support/xetal/l.l b/support/xetal/l.l new file mode 100644 index 0000000000..f89eeb2a33 --- /dev/null +++ b/support/xetal/l.l @@ -0,0 +1,1081 @@ +%{ + +/* + definition of the lexical analyser used in xetal, + Copyright (C) 1991 Raphael Cerf (e-mail: cerf@ens.ens.fr) + + This file is part of xetal. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include <search.h> +#include "proto.h" +#include "y.tab.h" +#include "stack.h" + +static long nskip; /* nb of \n in logical line */ +int cmd; /* token of command currently handled */ + +/* + * macros for LEX actions + */ +#define R_C0 yylval.y_chr=yytext[0]; charpos++; +#define R_C1 yylval.y_chr=yytext[1]; charpos+=2; +#define R_C(c) yylval.y_chr=c; charpos++; +#define R_W yylval.y_str=yytext; charpos+=yyleng; +#define RD_W yylval.y_str=strdup(yytext); charpos+=yyleng; +#define CP charpos++; +#define CM charpos--; +#define CY charpos+=yyleng; +#define C(x) charpos+=x; +#define B(x) yyless(yyleng-x) + +#ifdef FLEX_SCANNER + +#undef YY_FATAL_ERROR +/* report a fatal error */ +#define YY_FATAL_ERROR(msg) \ + { \ + if (strcmp(msg, "NULL in input")!=0) {\ + fputs( msg, stderr ); \ + putc( '\n', stderr ); \ + exit( 1 ); \ + } } +#undef YY_INPUT +extern int yy_input1(); +extern int yy_input2(); +char *tmp_buf; +int (*yy_input)(); +#define YY_INPUT(buf,result,max_size) \ + result=(*yy_input)(buf, max_size); + +#undef YY_NEW_FILE +#define YY_NEW_FILE { yy_input=yy_input2; goto new_file; } + +#endif + +#undef yywrap + +%} + +%a 5000 +%e 500 +%k 500 +%o 6500 +%p 4000 + +letter [a-zA-Z] +letterA [a-zA-Z@] +letterS [a-zA-Z\*] +letterAS [a-zA-Z@\*] +digit [0-9] +letter_or_digit [a-zA-Z_0-9] +letter_or_digit_or_punct [a-zA-Z_0-9\.\,\`\'\"\;\:] +fln_car [^ \t\n\}\]\{\[] + +reel [0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+ +nombre [0-9]+ +lettres {letter_or_digit}+ +caracteres {letter_or_digit_or_punct}+ +filename {fln_car}+ + +white_space [ \t\n]+ +bl [ \t] +bls [ \t]+ +obls [ \t]* +nl [\n] +blsnl [ \t]*[\n][ \t]* +blsorblsnl ([ \t]*[\n][ \t]*|[ \t]+) + +accent [\`\^\~\=\'\"\.] +slashed \\[^\`\^\~\=\'\"\.btHudvc\n\t\ ] + +anything .* +any_not_slash [^\\\n]* +argument {letterS}+ +command \\{letterAS}+|\\{accent} +ctlseq0 [^=]* +ctlseq1 [^{=]* +ctlseq2 [^{]* +ctlseq3 [^{=][^{=\\]* +comment \%[^\n]*\n + +%START BE_ARG O_ARG +%START S_ARG S_LET S_NB S_CAR S_REEL +%START S_FLN SQ0 SQ1 SQ2 SQ3 +%START S_VRB0 S_VRBA S_END + +%% + + { nskip=0L; oldlpos=linepos; } + +<S_END>{anything} { char *p; R_W; p=yytext; return ANYTHING; } + +<S_VRB0>\} { R_C0; BEGIN S_VRBA; return yytext[0]; } +<S_VRBA>{any_not_slash} { R_W; return ANY_NOT_SLASH; } +<S_VRBA>\\end\{verbatim { yyless(0); verbatim=-1; start_N(); } + +<BE_ARG>{argument} { R_W; start_N(); cmd=s_lookup(yytext); + switch(cmd) { + case VERBATIM: + if (verbatim==0) { + BEGIN S_VRB0; + verbatim=1; + } else { + verbatim=0; } + break; + } + return(cmd); + } + +{bls} { R_W; return BLS; } +{blsnl} { R_W; nskip++; linepos=charpos; return BLSNL; } + +<S_ARG>{letter_or_digit} { R_C0; return LETTER; } +<SQ0>{ctlseq0} { R_W; return CTLSEQ0; } +<SQ1>{ctlseq1} { R_W; return CTLSEQ1; } +<SQ2>{ctlseq2} { R_W; return CTLSEQ2; } +<SQ3>{ctlseq3} { R_W; return CTLSEQ3; } +<S_NB>{nombre} { R_W; return NOMBRE; } +<S_REEL>{reel} { R_W; return REEL; } +<S_NB,S_CAR,S_FLN,S_LET,O_ARG>{lettres} { R_W; return LETTRES; } +<S_CAR>{caracteres} { R_W; return CARACTERES; } +<S_FLN>{filename} { R_W; return FILENAME; } + +\$ { R_W; return (mode!=-1 ? DOLLAR : LETTRES); } +\$\$ { R_W; return (mode!=-1 ? DDOLLAR : LETTRES); } +\\\( { R_W; return (mode!=-1 ? OPARE : LETTRES); } +\\\) { R_W; return (mode!=-1 ? CPARE : LETTRES); } +\\\[ { R_W; return (mode!=-1 ? OBRAC : LETTRES); } +\\\] { R_W; return (mode!=-1 ? CBRAC : LETTRES); } +<O_ARG>"[" { R_W; return OBRAC; } +<O_ARG>"]" { R_W; return CBRAC; } +"]" { if (is_S_in_stack(O_ARG)) { + R_W; return CBRAC; + } else { + R_C0; return yytext[0]; + } + } + +"\\" { R_C0; return SLASH; } + +-{1,3} { R_C('-'); CY; CM; return '-'; } +\\[ /] { yylval.y_str=strcpy(yytext, " "); + C(2); return BLS; } +\\@ { C(2); } +\\- { C(2); } +~ { yylval.y_str=strcpy(yytext, " "); + C(1); return BLS; } + +\\oe { R_C('o'); CP; B(1); return(LETTER); } +\\OE { R_C('O'); CP; B(1); return(LETTER); } +\\ae { R_C('a'); CP; B(1); return(LETTER); } +\\AE { R_C('A'); CP; B(1); return(LETTER); } +\\aa { R_C('a'); C(2); return(LETTER); } +\\AA { R_C('A'); C(2); return(LETTER); } +\\[lL] { R_C1; return(LETTER); } +\\[oO] { R_C('0'); return(LETTER); } +\\ss { R_C('s'); C(2); return(LETTER); } +\?\` { R_C('?'); CP; return(LETTER); } +\!\` { R_C('!'); CP; return(LETTER); } + +{slashed} { R_C1; return SLASHED; } + +{command} { R_W; + if (mode==-1) cmd=LETTRES; + else if (verbatim==1) cmd=ANY_NOT_SLASH; + else cmd=s_lookup(yytext); + switch (cmd) { + case VERB: + { + char sch;/* flag character for verb */ + char *p;/* current character */ + int l;/* nb of added characters */ + + l=yyleng; p=yytext+l; + + /* verb command : reading text until verb flag */ +#ifdef FLEX_SCANNER + *yy_cp=yy_hold_char; + sch=*(p++);l++; + while((*(p++))!=sch) { + l++; + if ( *p == YY_END_OF_BUFFER_CHAR ) { + /* input needed */ + yy_hold_char = *p; + yy_c_buf_p=p+1; + yy_get_next_buffer(); + p=yytext+l; + } } + yy_cp=p; + yy_hold_char=*yy_cp; + *yy_cp='\0'; + yy_c_buf_p=yy_cp; +#else + *(p++)=sch=input(); + while ((*(p++)=input())!=sch) l++; + *p='\0'; +#endif + yylval.y_str=yytext;charpos+=l; + } break; + } + return cmd; } + +{comment} { R_W; nskip++; return COMMENT; } + +[\40-\176] { R_C0; return yytext[0]; } + +[\14] { R_C0; return FFEED; } + +. { R_C0; return OTHER; } + +%% + +/* + * functions called by parser to change lex state + */ + +start_O() +{ + S_push(0); + BEGIN 0; +} + +start_END() +{ + S_push(S_END); + BEGIN S_END; +} + +start_N() +{ + if (!is_S_stack_empty()) { S_pop(); } + + if (is_S_stack_empty()) { + BEGIN S_LET; + } else { + BEGIN S_read(); + } +} + +start_O_ARG() +{ + S_push(O_ARG); + BEGIN O_ARG; +} + +start_BE_ARG() +{ + S_push(BE_ARG); + BEGIN BE_ARG; +} + +start_ARG() +{ + S_push(S_ARG); + BEGIN S_ARG; +} + +start_NB() +{ + S_push(S_NB); + BEGIN S_NB; +} + +start_REEL() +{ + S_push(S_REEL); + BEGIN S_REEL; +} + +start_CAR() +{ + S_push(S_CAR); + BEGIN S_CAR; +} + +start_FLN() +{ + S_push(S_FLN); + BEGIN S_FLN; +} + +start_SQ0() +{ + S_push(SQ0); + BEGIN SQ0; +} + +start_SQ1() +{ + S_push(SQ1); + BEGIN SQ1; +} + +start_SQ2() +{ + S_push(SQ2); + BEGIN SQ2; +} + +start_SQ3() +{ + S_push(SQ3); + BEGIN SQ3; +} + +start_STATE(s) +int s; +{ + S_push(s); + BEGIN s; +} + +/* + * lex initialization + */ +init_lex() +{ + f_in=&yyin; +#ifdef FLEX_SCANNER + yy_input=yy_input1; + yy_init=1; +#endif +} + +#define NAME symbol[n].name +#define TOKEN symbol[n++].token + +/* + * compare two symbol_names + */ +int symbol_tcmp(s1, s2) +symbol_t *s1, *s2; +{ + return (strcmp(s1->name, s2->name)); +} + +/* + * initialization of symbol list + */ +int init_symbol(envrt, n_envrt) +char *envrt[]; +int n_envrt; +{ + int i, n=0; + symbol_t s_fake, *r; + + start_N(); + + NAME="\\`"; TOKEN=ACCENT; + NAME="\\^"; TOKEN=ACCENT; + NAME="\\~"; TOKEN=ACCENT; + NAME="\\="; TOKEN=ACCENT; + NAME="\\'"; TOKEN=ACCENT; + NAME="\\\""; TOKEN=ACCENT; + NAME="\\."; TOKEN=ACCENT; + + NAME="\\b"; TOKEN=ACCENT; + NAME="\\t"; TOKEN=ACCENT; + NAME="\\H"; TOKEN=ACCENT; + NAME="\\u"; TOKEN=ACCENT; + NAME="\\d"; TOKEN=ACCENT; + NAME="\\v"; TOKEN=ACCENT; + NAME="\\c"; TOKEN=ACCENT; + + NAME="\\def"; TOKEN=DEF; + NAME="\\gdef"; TOKEN=DEF; + NAME="\\edef"; TOKEN=DEF; + NAME="\\xdef"; TOKEN=DEF; + + NAME="\\toksdef"; TOKEN=ASSIGN; + + NAME="\\catcode"; TOKEN=CATCODE; + NAME="\\mathcode"; TOKEN=CATCODE; + NAME="\\delcode"; TOKEN=CATCODE; + NAME="\\sfcode"; TOKEN=CATCODE; + + NAME="\\let"; TOKEN=ASSIGN; + NAME="\\chardef"; TOKEN=ASSIGN; + NAME="\\mathchardef"; TOKEN=ASSIGN; + NAME="\\countdef"; TOKEN=ASSIGN; + NAME="\\dimendef"; TOKEN=ASSIGN; + NAME="\\skipdef"; TOKEN=ASSIGN; + NAME="\\muskipdef"; TOKEN=ASSIGN; + + NAME="\\read"; TOKEN=READ; + NAME="\\setbox"; TOKEN=SETBOX; + NAME="\\font"; TOKEN=FONT; + + NAME="\\count"; TOKEN=REGISTER; + NAME="\\dimen"; TOKEN=REGISTER; + NAME="\\skip"; TOKEN=REGISTER; + NAME="\\muskip"; TOKEN=REGISTER; + NAME="\\toks"; TOKEN=REGISTER; + + NAME="\\advance"; TOKEN=OPERATION; + NAME="\\multiply"; TOKEN=OPERATION; + NAME="\\divide"; TOKEN=OPERATION; + + NAME="\\pretolerance"; TOKEN=INT_PAR; + NAME="\\tolerance"; TOKEN=INT_PAR; + NAME="\\hbadness"; TOKEN=INT_PAR; + NAME="\\vbadness"; TOKEN=INT_PAR; + NAME="\\linepenalty"; TOKEN=INT_PAR; + NAME="\\hyphenpenalty"; TOKEN=INT_PAR; + NAME="\\exhyphenpenalty"; TOKEN=INT_PAR; + NAME="\\binoppenalty"; TOKEN=INT_PAR; + NAME="\\relpenalty"; TOKEN=INT_PAR; + NAME="\\clubpenalty"; TOKEN=INT_PAR; + NAME="\\widowpenalty"; TOKEN=INT_PAR; + NAME="\\displaywidowpenalty"; TOKEN=INT_PAR; + NAME="\\brokenpenalty"; TOKEN=INT_PAR; + NAME="\\predisplaypenalty"; TOKEN=INT_PAR; + NAME="\\postdisplaypenalty"; TOKEN=INT_PAR; + NAME="\\interlinepenalty"; TOKEN=INT_PAR; + NAME="\\floatingpenalty"; TOKEN=INT_PAR; + NAME="\\outputpenalty"; TOKEN=INT_PAR; + NAME="\\doublehyphendemerits"; TOKEN=INT_PAR; + NAME="\\finalhyphendemerits"; TOKEN=INT_PAR; + NAME="\\adjdemerits"; TOKEN=INT_PAR; + NAME="\\looseness"; TOKEN=INT_PAR; + NAME="\\pausing"; TOKEN=INT_PAR; + NAME="\\tracingonline"; TOKEN=INT_PAR; + NAME="\\tracingmacros"; TOKEN=INT_PAR; + NAME="\\tracingstats"; TOKEN=INT_PAR; + NAME="\\tracingparagraphs"; TOKEN=INT_PAR; + NAME="\\tracingpages"; TOKEN=INT_PAR; + NAME="\\tracingoutput"; TOKEN=INT_PAR; + NAME="\\tracinglostchars"; TOKEN=INT_PAR; + NAME="\\tracingcommands"; TOKEN=INT_PAR; + NAME="\\tracingrestores"; TOKEN=INT_PAR; + NAME="\\uchyph"; TOKEN=INT_PAR; + NAME="\\globaldefs"; TOKEN=INT_PAR; + NAME="\\defaulthyphenchar"; TOKEN=INT_PAR; + NAME="\\defaultskewchar"; TOKEN=INT_PAR; + NAME="\\escapechar"; TOKEN=INT_PAR; + NAME="\\endlinechar"; TOKEN=INT_PAR; + NAME="\\newlinechar"; TOKEN=INT_PAR; + NAME="\\maxdeadcycles"; TOKEN=INT_PAR; + NAME="\\hangafter"; TOKEN=INT_PAR; + NAME="\\fam"; TOKEN=INT_PAR; + NAME="\\mag"; TOKEN=INT_PAR; + NAME="\\delimiterfactor"; TOKEN=INT_PAR; + NAME="\\time"; TOKEN=INT_PAR; + NAME="\\day"; TOKEN=INT_PAR; + NAME="\\month"; TOKEN=INT_PAR; + NAME="\\year"; TOKEN=INT_PAR; + NAME="\\showboxbreadth"; TOKEN=INT_PAR; + NAME="\\showboxdepth"; TOKEN=INT_PAR; + + NAME="\\hfuzz"; TOKEN=DIMEN_PAR; + NAME="\\vfuzz"; TOKEN=DIMEN_PAR; + NAME="\\overfullrule"; TOKEN=DIMEN_PAR; + NAME="\\hsize"; TOKEN=DIMEN_PAR; + NAME="\\vsize"; TOKEN=DIMEN_PAR; + NAME="\\maxdepth"; TOKEN=DIMEN_PAR; + NAME="\\splitmaxdepth"; TOKEN=DIMEN_PAR; + NAME="\\boxmaxdepth"; TOKEN=DIMEN_PAR; + NAME="\\lineskiplimit"; TOKEN=DIMEN_PAR; + NAME="\\delimitershortfall"; TOKEN=DIMEN_PAR; + NAME="\\nulldelimiterspace"; TOKEN=DIMEN_PAR; + NAME="\\scriptspace"; TOKEN=DIMEN_PAR; + NAME="\\mathsurround"; TOKEN=DIMEN_PAR; + NAME="\\predisplaysize"; TOKEN=DIMEN_PAR; + NAME="\\displaywidth"; TOKEN=DIMEN_PAR; + NAME="\\displayindent"; TOKEN=DIMEN_PAR; + NAME="\\parindent"; TOKEN=DIMEN_PAR; + NAME="\\hangindent"; TOKEN=DIMEN_PAR; + NAME="\\hoffset"; TOKEN=DIMEN_PAR; + NAME="\\voffset"; TOKEN=DIMEN_PAR; + + NAME="\\baselineskip"; TOKEN=GLUE_PAR; + NAME="\\lineskip"; TOKEN=GLUE_PAR; + NAME="\\parskip"; TOKEN=GLUE_PAR; + NAME="\\abovedisplayskip"; TOKEN=GLUE_PAR; + NAME="\\abovedisplayshortskip"; TOKEN=GLUE_PAR; + NAME="\\belowdisplayskip"; TOKEN=GLUE_PAR; + NAME="\\belowdisplayshortskip"; TOKEN=GLUE_PAR; + NAME="\\leftskip"; TOKEN=GLUE_PAR; + NAME="\\rightskip"; TOKEN=GLUE_PAR; + NAME="\\topskip"; TOKEN=GLUE_PAR; + NAME="\\splittoskip"; TOKEN=GLUE_PAR; + NAME="\\tabskip"; TOKEN=GLUE_PAR; + NAME="\\spaceskip"; TOKEN=GLUE_PAR; + NAME="\\xspaceskip"; TOKEN=GLUE_PAR; + NAME="\\parfillskip"; TOKEN=GLUE_PAR; + + NAME="\\thinmuskip"; TOKEN=MUGLUE_PAR; + NAME="\\medmuskip"; TOKEN=MUGLUE_PAR; + NAME="\\thickmuskip"; TOKEN=MUGLUE_PAR; + + NAME="\\output"; TOKEN=TOKEN_PAR; + NAME="\\everypar"; TOKEN=TOKEN_PAR; + NAME="\\everymath"; TOKEN=TOKEN_PAR; + NAME="\\everydisplay"; TOKEN=TOKEN_PAR; + NAME="\\everyhbox"; TOKEN=TOKEN_PAR; + NAME="\\everyvbox"; TOKEN=TOKEN_PAR; + NAME="\\everyjob"; TOKEN=TOKEN_PAR; + NAME="\\everycr"; TOKEN=TOKEN_PAR; + NAME="\\errhelp"; TOKEN=TOKEN_PAR; + + NAME="\\TeX"; TOKEN=H_COMMAND; + NAME="\\LaTeX"; TOKEN=H_COMMAND; + + NAME="\\dag"; TOKEN=H_COMMAND; + NAME="\\ddag"; TOKEN=H_COMMAND; + NAME="\\S"; TOKEN=H_COMMAND; + NAME="\\P"; TOKEN=H_COMMAND; + NAME="\\copyright"; TOKEN=H_COMMAND; + NAME="\\pounds"; TOKEN=H_COMMAND; + + NAME="\\begin"; TOKEN=BGIN; + NAME="\\end"; TOKEN=END; + + NAME="\\input"; TOKEN=INCLUSION; + NAME="\\include"; TOKEN=INCLUSION; + NAME="\\includeonly"; TOKEN=INCLUDEONLY; + + NAME="math"; TOKEN=MATHENV; + NAME="math*"; TOKEN=MATHENV; + NAME="displaymath"; TOKEN=MATHENV; + NAME="displaymath*"; TOKEN=MATHENV; + NAME="equation"; TOKEN=MATHENV; + NAME="equation*"; TOKEN=MATHENV; + NAME="eqnarray"; TOKEN=MATHENV; + NAME="eqnarray*"; TOKEN=MATHENV; + + NAME="\\\\"; TOKEN=HO_COMMAND; + NAME="\\\\*"; TOKEN=HO_COMMAND; + + NAME="\\today"; TOKEN=H_COMMAND; + + NAME="\\noindent"; TOKEN=H_COMMAND; + NAME="\\indent"; TOKEN=H_COMMAND; + NAME="\\par"; TOKEN=H_COMMAND; + NAME="\\linewidth"; TOKEN=LATEX_PAR; + NAME="\\baselinestretch"; TOKEN=LATEX_PAR; + + NAME="\\footnote"; TOKEN=KO1_COMMAND; + NAME="\\footnotemark"; TOKEN=HO_COMMAND; + NAME="\\footnotetext"; TOKEN=KO1_COMMAND; + NAME="\\footnotesep"; TOKEN=H_COMMAND; + NAME="\\footnoterule"; TOKEN=H_COMMAND; + + NAME="\\part"; TOKEN=KO1_COMMAND; + NAME="\\chapter"; TOKEN=KO1_COMMAND; + NAME="\\section"; TOKEN=KO1_COMMAND; + NAME="\\subsection"; TOKEN=KO1_COMMAND; + NAME="\\subsubsection"; TOKEN=KO1_COMMAND; + NAME="\\paragraph"; TOKEN=KO1_COMMAND; + NAME="\\subparagraph"; TOKEN=KO1_COMMAND; + + NAME="\\part*"; TOKEN=K1_COMMAND; + NAME="\\chapter*"; TOKEN=K1_COMMAND; + NAME="\\section*"; TOKEN=K1_COMMAND; + NAME="\\subsection*"; TOKEN=K1_COMMAND; + NAME="\\subsubsection*"; TOKEN=K1_COMMAND; + NAME="\\paragraph*"; TOKEN=K1_COMMAND; + NAME="\\subparagraph*"; TOKEN=K1_COMMAND; + + NAME="\\appendix"; TOKEN=H_COMMAND; + NAME="\\tableofcontents"; TOKEN=H_COMMAND; + NAME="\\listoffigures"; TOKEN=H_COMMAND; + NAME="\\listoftables"; TOKEN=H_COMMAND; + + NAME="\\addcontentsline"; TOKEN=H3_COMMAND; + NAME="\\addtocontents"; TOKEN=H2_COMMAND; + + NAME="\\documentstyle"; TOKEN=HO1_COMMAND; + NAME="\\bibindent"; TOKEN=LATEX_PAR; + NAME="\\columnsep"; TOKEN=LATEX_PAR; + NAME="\\columnseprule"; TOKEN=LATEX_PAR; + NAME="\\mathindent"; TOKEN=LATEX_PAR; + + NAME="\\pagestyle"; TOKEN=H1_COMMAND; + NAME="\\thispagestyle"; TOKEN=H_COMMAND; + NAME="\\markright"; TOKEN=H1_COMMAND; + NAME="\\markboth"; TOKEN=H2_COMMAND; + NAME="\\pagenumbering"; TOKEN=H1_COMMAND; + NAME="\\twocolumn"; TOKEN=HO_COMMAND; + NAME="\\onecolumn"; TOKEN=H_COMMAND; + NAME="\\oddsidemargin"; TOKEN=LATEX_PAR; + NAME="\\evensidemargin"; TOKEN=LATEX_PAR; + NAME="\\topmargin"; TOKEN=LATEX_PAR; + NAME="\\headheight"; TOKEN=LATEX_PAR; + NAME="\\headsep"; TOKEN=LATEX_PAR; + NAME="\\textheight"; TOKEN=LATEX_PAR; + NAME="\\textwidth"; TOKEN=LATEX_PAR; + NAME="\\footheight"; TOKEN=LATEX_PAR; + NAME="\\footskip"; TOKEN=LATEX_PAR; + + NAME="\\maketitle"; TOKEN=H_COMMAND; + NAME="\\title"; TOKEN=K1_COMMAND; + NAME="\\author"; TOKEN=K1_COMMAND; + NAME="\\date"; TOKEN=K1_COMMAND; + NAME="\\thanks"; TOKEN=K1_COMMAND; + + NAME="document"; TOKEN=TEXTENV; + NAME="abstract"; TOKEN=TEXTENV; + NAME="titlepage"; TOKEN=TEXTENV; + NAME="quote"; TOKEN=TEXTENV; + NAME="quotation"; TOKEN=TEXTENV; + NAME="verse"; TOKEN=TEXTENV; + NAME="itemize"; TOKEN=TEXTENV; + NAME="enumerate"; TOKEN=TEXTENV; + NAME="description"; TOKEN=TEXTENV; + NAME="em"; TOKEN=TEXTENV; + + NAME="\\item"; TOKEN=HO_COMMAND; + + NAME="list"; TOKEN=LISTENV; + NAME="\\topsep"; TOKEN=LATEX_PAR; + NAME="\\partopsep"; TOKEN=LATEX_PAR; + NAME="\\itemsep"; TOKEN=LATEX_PAR; + NAME="\\parsep"; TOKEN=LATEX_PAR; + NAME="\\leftmargin"; TOKEN=LATEX_PAR; + NAME="\\rightmargin"; TOKEN=LATEX_PAR; + NAME="\\listparindent"; TOKEN=LATEX_PAR; + NAME="\\itemindent"; TOKEN=LATEX_PAR; + NAME="\\labelsep"; TOKEN=LATEX_PAR; + NAME="\\labelwidth"; TOKEN=LATEX_PAR; + NAME="\\makelabel"; TOKEN=H1_COMMAND; + NAME="\\usecounter"; TOKEN=H1_COMMAND; + NAME="trivlist"; TOKEN=LISTENV; + + NAME="\\verb"; TOKEN=VERB; + NAME="\\verb*"; TOKEN=VERB; + NAME="verbatim"; TOKEN=VERBATIM; + NAME="verbatim*"; TOKEN=VERBATIM; + + NAME="\\newcommand"; TOKEN=LATEX_DEF; + NAME="\\renewcommand"; TOKEN=LATEX_DEF; + + NAME="\\newenvironment"; TOKEN=LATEX_DEFENV; + NAME="\\renewenvironment"; TOKEN=LATEX_DEFENV; + + NAME="\\newtheorem"; TOKEN=H2O_COMMAND; + NAME="\\renewtheorem"; TOKEN=H1O1_COMMAND; + + NAME="\\newcounter"; TOKEN=H1O_COMMAND; + NAME="\\setcounter"; TOKEN=H2_COMMAND; + NAME="\\addtocounter"; TOKEN=H2_COMMAND; + + NAME="\\value"; TOKEN=H1_COMMAND; + NAME="\\arabic"; TOKEN=H1_COMMAND; + NAME="\\roman"; TOKEN=H1_COMMAND; + NAME="\\Roman"; TOKEN=H1_COMMAND; + NAME="\\alph"; TOKEN=H1_COMMAND; + NAME="\\Alph"; TOKEN=H1_COMMAND; + NAME="\\fnsymbol"; TOKEN=H1_COMMAND; + NAME="\\stepcounter"; TOKEN=H1_COMMAND; + NAME="\\refstepcounter"; TOKEN=H1_COMMAND; + + NAME="figure"; TOKEN=FIGENV; + NAME="figure*"; TOKEN=FIGENV; + NAME="table"; TOKEN=FIGENV; + NAME="table*"; TOKEN=FIGENV; + + NAME="\\caption"; TOKEN=KO1_COMMAND; + + NAME="\\topfraction"; TOKEN=LATEX_PAR; + NAME="\\bottomfraction"; TOKEN=LATEX_PAR; + NAME="\\textfraction"; TOKEN=LATEX_PAR; + NAME="\\floatpagefraction"; TOKEN=LATEX_PAR; + NAME="\\dbltopfraction"; TOKEN=LATEX_PAR; + NAME="\\dblfloatpagefraction"; TOKEN=LATEX_PAR; + NAME="\\floatsep"; TOKEN=LATEX_PAR; + NAME="\\textfloatsep"; TOKEN=LATEX_PAR; + NAME="\\intextsep"; TOKEN=LATEX_PAR; + NAME="\\dblfloatsep"; TOKEN=LATEX_PAR; + NAME="\\dbltextfloatsep"; TOKEN=LATEX_PAR; + + NAME="\\marginpar"; TOKEN=HO1_COMMAND; + NAME="\\reversemarginpar"; TOKEN=H_COMMAND; + NAME="\\normalmarginpar"; TOKEN=H_COMMAND; + NAME="\\marginparwidth"; TOKEN=H_COMMAND; + NAME="\\marginparsep"; TOKEN=H_COMMAND; + NAME="\\marginparpush"; TOKEN=H_COMMAND; + + NAME="tabbing"; TOKEN=TABBENV; + + NAME="array"; TOKEN=TABUENV; + NAME="array*"; TOKEN=TABUENV; + NAME="tabular"; TOKEN=TABUENV; + NAME="tabular*"; TOKEN=TABUENV; + + NAME="\\multicolumn"; TOKEN=H3_COMMAND; + NAME="\\vline"; TOKEN=H_COMMAND; + NAME="\\hline"; TOKEN=H_COMMAND; + NAME="\\cline"; TOKEN=H1_COMMAND; + + NAME="\\arraycolsep"; TOKEN=LATEX_PAR; + NAME="\\tabcolsep"; TOKEN=LATEX_PAR; + NAME="\\arrayrulewidth"; TOKEN=LATEX_PAR; + NAME="\\doublerulesep"; TOKEN=LATEX_PAR; + NAME="\\arraystretch"; TOKEN=LATEX_PAR; + + NAME="\\label"; TOKEN=H1_COMMAND; + NAME="\\ref"; TOKEN=H1_COMMAND; + NAME="\\pageref"; TOKEN=H1_COMMAND; + + NAME="\\bibliography"; TOKEN=H1_COMMAND; + NAME="thebibliography"; TOKEN=BIBLENV; + NAME="\\bibitem"; TOKEN=HO1_COMMAND; + NAME="\\cite"; TOKEN=HO1_COMMAND; + NAME="\\nocite"; TOKEN=H1_COMMAND; + + NAME="theindex"; TOKEN=INDENV; + NAME="\\makeindex"; TOKEN=H_COMMAND; + NAME="\\makeglossary"; TOKEN=H_COMMAND; + NAME="\\index"; TOKEN=K1_COMMAND; + NAME="\\glossary"; TOKEN=K1_COMMAND; + + NAME="\\typeout"; TOKEN=H1_COMMAND; + NAME="\\typein"; TOKEN=HO1_COMMAND; + + NAME="\\linebreak"; TOKEN=HO_COMMAND; + NAME="\\nolinebreak"; TOKEN=HO_COMMAND; + + NAME="\\newline"; TOKEN=H_COMMAND; + NAME="\\hyphenation"; TOKEN=H1_COMMAND; + NAME="\\sloppy"; TOKEN=H_COMMAND; + NAME="\\fussy"; TOKEN=H_COMMAND; + + NAME="sloppypar"; TOKEN=SLOPENV; + + NAME="\\pagebreak"; TOKEN=HO_COMMAND; + NAME="\\nopagebreak"; TOKEN=HO_COMMAND; + NAME="\\samepage"; TOKEN=H_COMMAND; + NAME="\\newpage"; TOKEN=H_COMMAND; + NAME="\\clearpage"; TOKEN=H_COMMAND; + NAME="\\cleardoublepage"; TOKEN=H_COMMAND; + + NAME="\\fill"; TOKEN=H_COMMAND; + NAME="\\stretch"; TOKEN=H1_COMMAND; + NAME="\\newlength"; TOKEN=H1_COMMAND; + NAME="\\setlength"; TOKEN=H2_COMMAND; + NAME="\\addtolength"; TOKEN=H2_COMMAND; + NAME="\\settowidth"; TOKEN=H2_COMMAND; + + NAME="\\hspace"; TOKEN=H1_COMMAND; + NAME="\\hspace*"; TOKEN=H1_COMMAND; + NAME="\\vspace"; TOKEN=H1_COMMAND; + NAME="\\vspace*"; TOKEN=H1_COMMAND; + NAME="\\bigskip"; TOKEN=H_COMMAND; + NAME="\\medskip"; TOKEN=H_COMMAND; + NAME="\\smallskip"; TOKEN=H_COMMAND; + NAME="\\addvspace"; TOKEN=H1_COMMAND; + + NAME="\\mbox"; TOKEN=BOX; + NAME="\\hbox"; TOKEN=BOX; + NAME="\\vbox"; TOKEN=BOX; + NAME="\\htop"; TOKEN=BOX; + NAME="\\fbox"; TOKEN=BOX; + + NAME="\\makebox"; TOKEN=HOO1_COMMAND; + NAME="\\framebox"; TOKEN=HOO1_COMMAND; + NAME="\\newsavebox"; TOKEN=H1_COMMAND; + NAME="\\sbox"; TOKEN=H2_COMMAND; + NAME="\\savebox"; TOKEN=H1OO1_COMMAND; + NAME="\\usebox"; TOKEN=H1_COMMAND; + NAME="\\parbox"; TOKEN=HO2_COMMAND; + + NAME="minipage"; TOKEN=MINIENV; + NAME="\\rule"; TOKEN=HO2_COMMAND; + NAME="\\raisebox"; TOKEN=H1O1O_COMMAND; + + NAME="\\fboxrule"; TOKEN=LATEX_PAR; + NAME="\\fboxsep"; TOKEN=LATEX_PAR; + + NAME="picture"; TOKEN=PICTENV; + + NAME="\\rm"; TOKEN=H_COMMAND; + NAME="\\em"; TOKEN=H_COMMAND; + NAME="\\bf"; TOKEN=H_COMMAND; + NAME="\\it"; TOKEN=H_COMMAND; + NAME="\\sl"; TOKEN=H_COMMAND; + NAME="\\sf"; TOKEN=H_COMMAND; + NAME="\\sc"; TOKEN=H_COMMAND; + NAME="\\tt"; TOKEN=H_COMMAND; + + NAME="\\tiny"; TOKEN=H_COMMAND; + NAME="\\small"; TOKEN=H_COMMAND; + NAME="\\large"; TOKEN=H_COMMAND; + NAME="\\huge"; TOKEN=H_COMMAND; + NAME="\\scriptsize"; TOKEN=H_COMMAND; + NAME="\\normalsize"; TOKEN=H_COMMAND; + NAME="\\Large"; TOKEN=H_COMMAND; + NAME="\\Huge"; TOKEN=H_COMMAND; + NAME="\\footnotesize"; TOKEN=H_COMMAND; + NAME="\\LARGE"; TOKEN=H_COMMAND; + + NAME="\\quad"; TOKEN=H_COMMAND; + NAME="\\qquad"; TOKEN=H_COMMAND; + NAME="\\dots"; TOKEN=H_COMMAND; + NAME="\\ldots"; TOKEN=H_COMMAND; + NAME="\\centering"; TOKEN=H_COMMAND; + NAME="\\raggedright"; TOKEN=H_COMMAND; + NAME="\\raggedleft"; TOKEN=H_COMMAND; + NAME="\\break"; TOKEN=H_COMMAND; + NAME="\\kill"; TOKEN=H_COMMAND; + + NAME="\\newfont"; TOKEN=H2_COMMAND; + NAME="\\symbol"; TOKEN=H1_COMMAND; + NAME="\\load"; TOKEN=H2_COMMAND; + + NAME="\\displaystyle"; TOKEN=H_COMMAND; + NAME="\\textstyle"; TOKEN=H_COMMAND; + NAME="\\scriptstyle"; TOKEN=H_COMMAND; + NAME="\\scriptscriptstyle"; TOKEN=H_COMMAND; + NAME="\\boldmath"; TOKEN=H_COMMAND; + NAME="\\unboldmath"; TOKEN=H_COMMAND; + + NAME="\\dotfill"; TOKEN=H_COMMAND; + + NAME="\\line"; TOKEN=H1_COMMAND; + NAME="\\hfil"; TOKEN=H_COMMAND; + NAME="\\hfill"; TOKEN=H_COMMAND; + NAME="\\vfil"; TOKEN=H_COMMAND; + NAME="\\vfill"; TOKEN=H_COMMAND; + NAME="\\vskip"; TOKEN=H1_COMMAND; + NAME="\\eject"; TOKEN=H_COMMAND; + NAME="\\bye"; TOKEN=H_COMMAND; + NAME="\\centerline"; TOKEN=H1_COMMAND; + NAME="\\nopagenumbers"; TOKEN=H_COMMAND; + + NAME="$"; TOKEN=DOLLAR; + NAME="$$"; TOKEN=DDOLLAR; + NAME="\\("; TOKEN=OPARE; + NAME="\\)"; TOKEN=CPARE; + NAME="\\["; TOKEN=OBRAC; + NAME="\\]"; TOKEN=CBRAC; + + n_symbol=n; + /* sort list */ + qsort((char *)symbol, n_symbol, sizeof(symbol_t), symbol_tcmp); + + /* envrt names given with -e option */ + + /* search for already existing names */ + for (i=0; i<n_envrt; i++) { + s_fake.name=envrt[i]; + s_fake.token=UNKNOWN; + r=(symbol_t *) +bsearch(&s_fake, symbol, n_symbol, sizeof(symbol_t), symbol_tcmp); + if (r!=(symbol_t *)NULL) { + r->token=MATHENV; + envrt[i]=(char *)NULL; + } + } + + /* add new names */ + n_adsymbol=0; + for (i=0; i<n_envrt; i++) { + if (envrt[i]!=(char *)NULL) { + symbol[n].name=strdup(envrt[i]); + symbol[n++].token=MATHENV; + + adsymbol[n_adsymbol].name=symbol[n].name; + adsymbol[n_adsymbol++].token=MATHENV; + } + } + n_symbol=n; + qsort((char *)symbol, n_symbol, sizeof(symbol_t), symbol_tcmp); +} + +/* + * add a new symbol to list + */ +int add_symbol(s) +symbol_t *s; +{ + int i; + + symbol[n_symbol].name=strdup(s->name); + symbol[n_symbol++].token=s->token; + adsymbol[n_adsymbol].name=symbol[n_symbol-1].name; + adsymbol[n_adsymbol++].token=s->token; + + qsort((char *)symbol, n_symbol, sizeof(symbol_t), symbol_tcmp); + return(n_symbol); +} + +/* + * search command s in list + */ +int s_lookup(s) +char *s; +{ + int i, t; + symbol_t s_fake, *r; + + s_fake.name=s; + s_fake.token=UNKNOWN; + + r=(symbol_t *) +bsearch(&s_fake, symbol, n_symbol, sizeof(symbol_t), symbol_tcmp); + + if (r!=(symbol_t *)NULL) { + t=r->token; + } else { + t=UNKNOWN; + if (mode!=1) { + add_symbol(&s_fake); + if (d_unknown) { + if (s[0]=='\\') + fprintf(stderr, "unknown command: %s\n", s); + else + fprintf(stderr, "unknown keyword: %s\n", s); + } + } } + + return (t); +} + +/* + * supplied yywrap function + */ +int yywrap() +{ + char *last_string; + char last_char; + + fclose(*f_in); + total_lines+=lineno; + if (d_report) { + if (strcmp("", f_name)!=0) { + fprintf(stderr, "%s: %d lines\n", f_name, lineno); + } } + if (strcmp("", f_name)!=0) + str_destroy(fich_name(f_read())); +#ifdef FLEX_SCANNER + last_string=(f_read())->last_string; +#else + last_char=(f_read())->last_char; +#endif + lineno=fich_line(f_pop()); + if (d_fname==0) d_fname=-1; + if (is_f_stack_empty()) { + return(1); + } else { + *f_in=fich_fd(f_read()); + f_name=fich_name(f_read()); +#ifdef FLEX_SCANNER + if (last_string!=(char *)NULL) { + tmp_buf=strdup(last_string); + free(last_string); + } +#else + if (last_char!=(char)NULL) unput(last_char); +#endif + /*yy_ch_buf[0]=last_char;*/ + /*lineno=fich_line(f_read());*/ + return(0); + } +} + + + +#ifdef FLEX_SCANNER +char *Input() { + char *r; + + *yy_c_buf_p=yy_hold_char; + r=strdup(yy_c_buf_p); + *yy_c_buf_p='\0'; + return(r); +} + +/* + * input function normally used with flex + * yy_input1 is not a macro, but with flex input is bufferized + */ +int yy_input1(buf, max_size) +char *buf; +int max_size; +{ + int result; + + if ( (result = read( fileno(yyin), buf, max_size )) < 0 ) { + perror((char *)NULL); + YY_FATAL_ERROR( "read() in flex scanner failed" ); + } + return (result); +} + +/* + * input function used when, having finished to read an included + * file, flex come back and retrieve the precedent file + */ +int yy_input2(buf, max_size) +char *buf; +int max_size; +{ + int l; + + l=strlen(tmp_buf); + if (l>0) strcpy(buf, tmp_buf); + free(tmp_buf); + yy_input=yy_input1; + return(l); +} + +/* + * this procedure is a portion of the lex.yy.c program generated by flex + * its aim is to initialize the buffer before starting reading a new file + * (it corresponds to action done by YY_NEW_FILE) + */ +inclusion_file() +{ + /* this is where we enter upon encountering an end-of-file and + * yywrap() indicating that we should continue processing + */ + + /* we put in the '\n' and start reading from [1] so that an + * initial match-at-newline will be true. + */ + + yy_ch_buf[0] = '\n'; + yy_n_chars = 1; + + /* we always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; + yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yy_eof_has_been_seen = 0; + + yytext = yy_c_buf_p = &yy_ch_buf[1]; + yy_hold_char = *yy_c_buf_p; + yy_init = 0; +} + +#else + +/* + * read next input character + */ +char Input() { + return input(); +} + +inclusion_file() +{} + +#endif |