X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=utils%2Fverbatim%2Fverbatim.lex;fp=utils%2Fverbatim%2Fverbatim.lex;h=bac87cc45f759b754597ed2e6d46102b8eeb859a;hb=0065d5ab628975892cea1ec7303f968c3338cbe1;hp=0000000000000000000000000000000000000000;hpb=28a464a75e14cece5db40f2765a29348273ff2d2;p=ghc-hetmet.git diff --git a/utils/verbatim/verbatim.lex b/utils/verbatim/verbatim.lex new file mode 100644 index 0000000..bac87cc --- /dev/null +++ b/utils/verbatim/verbatim.lex @@ -0,0 +1,63 @@ + + /* This Lex script acts as a filter to pre-process Latex files. + + It surrounds groups of lines beginning with a ">" sign, and + preceded and followed by a blank line, with \begin{verbatim} + and \end{verbatim}. The ">" may be preceded by a digit or digit + range (eg 4>, 2-5>, 3->); in this case the digits are removed. + They are meant to be used for filtering out versions. + + It takes words surrounded with @ signs (thus @letrec@) and makes them + come out in typewriter font, regardless of the current mode. + */ + +%START NORM VERB MIRANDA VERBATIM VERBATIMSIM +sp [ \t]* +nl {sp}\n{sp} +miranda ([0-9]+(\-([0-9]+)?)?)?> +%{ +#define PUSH states[top++] = +#define POP BEGIN states[--top] +#define yywrap() 1 +%} +%% + int states[256]; + int top; + BEGIN NORM; + top = 0; +@@ { printf ("@"); } +@ { printf ("\\mbox{\\tt "); PUSH NORM; BEGIN VERB; } +@ { printf ("}"); POP; } +\n { printf ("}\\\\{}\n\\mbox{\\tt "); } +" " { printf ("\\ "); } +@@ { printf ("@"); } +\# { printf ("{\\char'43}"); } +\$ { printf ("{\\char'44}"); } +\% { printf ("{\\char'45}"); } +\& { printf ("{\\char'46}"); } +\~ { printf ("{\\char'176}"); } +\_ { printf ("{\\char'137}"); } +\^ { printf ("{\\char'136}"); } +\\ { printf ("{\\char'134}"); } +\{ { printf ("{\\char'173}"); } +\} { printf ("{\\char'175}"); } + +^@{sp}\n { printf( "\\begin{verbatim}\n" ); + PUSH NORM; BEGIN VERBATIMSIM; } +^@{sp}\n { printf( "\\end{verbatim}\n" ); POP; } + +\\"begin{verbatim}" { printf( "\\begin{verbatim}" ); + PUSH NORM; BEGIN VERBATIM; } +\\"end{verbatim}" { printf( "\\end{verbatim}" ); POP; } + +^\n{miranda} { printf ("\\begin{verbatim}\n>" ); + PUSH NORM; BEGIN MIRANDA; } +\n{miranda} { printf( "\n>" ); } +^\n { printf ("\\end{verbatim}\n"); POP; } +%% +int +main() +{ + yylex(); + return(0); +}