diff options
Diffstat (limited to 'utils/verbatim')
-rw-r--r-- | utils/verbatim/Makefile | 17 | ||||
-rw-r--r-- | utils/verbatim/verbatim.lex | 63 |
2 files changed, 80 insertions, 0 deletions
diff --git a/utils/verbatim/Makefile b/utils/verbatim/Makefile new file mode 100644 index 0000000000..4a4301dfe0 --- /dev/null +++ b/utils/verbatim/Makefile @@ -0,0 +1,17 @@ +TOP=../.. +include $(TOP)/mk/boilerplate.mk + +C_SRCS = verbatim.c +C_PROG = verbatim +LIBS = $(FLEX_LIB) + +override SRC_FLEX_OPTS=-8 + +# +# For src distributions, include flex output. +# +SRC_DIST_FILES += verbatim.c + +CLEAN_FILES += verbatim.c + +include $(TOP)/mk/target.mk diff --git a/utils/verbatim/verbatim.lex b/utils/verbatim/verbatim.lex new file mode 100644 index 0000000000..bac87cc45f --- /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; +<NORM>@@ { printf ("@"); } +<NORM>@ { printf ("\\mbox{\\tt "); PUSH NORM; BEGIN VERB; } +<VERB>@ { printf ("}"); POP; } +<VERB>\n { printf ("}\\\\{}\n\\mbox{\\tt "); } +<VERB>" " { printf ("\\ "); } +<VERB>@@ { printf ("@"); } +<VERB>\# { printf ("{\\char'43}"); } +<VERB>\$ { printf ("{\\char'44}"); } +<VERB>\% { printf ("{\\char'45}"); } +<VERB>\& { printf ("{\\char'46}"); } +<VERB>\~ { printf ("{\\char'176}"); } +<VERB>\_ { printf ("{\\char'137}"); } +<VERB>\^ { printf ("{\\char'136}"); } +<VERB>\\ { printf ("{\\char'134}"); } +<VERB>\{ { printf ("{\\char'173}"); } +<VERB>\} { printf ("{\\char'175}"); } + +<NORM>^@{sp}\n { printf( "\\begin{verbatim}\n" ); + PUSH NORM; BEGIN VERBATIMSIM; } +<VERBATIMSIM>^@{sp}\n { printf( "\\end{verbatim}\n" ); POP; } + +<NORM>\\"begin{verbatim}" { printf( "\\begin{verbatim}" ); + PUSH NORM; BEGIN VERBATIM; } +<VERBATIM>\\"end{verbatim}" { printf( "\\end{verbatim}" ); POP; } + +<NORM>^\n{miranda} { printf ("\\begin{verbatim}\n>" ); + PUSH NORM; BEGIN MIRANDA; } +<MIRANDA>\n{miranda} { printf( "\n>" ); } +<MIRANDA>^\n { printf ("\\end{verbatim}\n"); POP; } +%% +int +main() +{ + yylex(); + return(0); +} |