diff --git a/glafp-utils/sgmlverb/Makefile b/glafp-utils/sgmlverb/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9d47c267968c3657372a5a31164b13d0a4cb35a4 --- /dev/null +++ b/glafp-utils/sgmlverb/Makefile @@ -0,0 +1,15 @@ +TOP=.. +include $(TOP)/mk/boilerplate.mk + +C_SRCS = sgmlverb.c +C_PROG = sgmlverb +LIBS = $(FLEX_LIB) + +override SRC_FLEX_OPTS=-8 + +# +# For src distributions, include flex output. +# +SRC_DIST_FILES += sgmlverb.c + +include $(TOP)/mk/target.mk diff --git a/glafp-utils/sgmlverb/sgmlverb.lex b/glafp-utils/sgmlverb/sgmlverb.lex new file mode 100644 index 0000000000000000000000000000000000000000..c60520035aa480e356a6a2c9c8990cbe2d7d47e4 --- /dev/null +++ b/glafp-utils/sgmlverb/sgmlverb.lex @@ -0,0 +1,60 @@ + + /* 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 VERBENV +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 ("<tt>"); PUSH NORM; BEGIN VERB; } +<VERB>@ { printf ("</tt>"); POP; } +<VERB>@@ { printf ("@"); } +<VERB>\> { printf (">"); } +<VERB>\< { printf ("<"); } +<VERB>\# { printf ("#"); } +<VERB>\$ { printf ("$"); } +<VERB>\% { printf ("%"); } +<VERB>\& { printf ("&"); } +<VERB>\~ { printf ("˜"); } +<VERB>\^ { printf ("ˆ"); } + +<NORM>\<verb\> { printf ("<verb>"); PUSH NORM; BEGIN VERBENV; } +<VERBENV>\<\/verb\> { printf ("</verb>"); POP; } +<VERBENV>\&\& { printf ("&"); } +<VERBENV>\& { printf ("&ero;"); } +<VERBENV>\<\/ { printf ("&etago;"); } + +%% +int +main() +{ + yylex(); + return(0); +} + +/* +<VERB>\_ { printf ("{\\char'137}"); } +<VERB>\\ { printf ("{\\char'134}"); } +<VERB>\{ { printf ("{\\char'173}"); } +<VERB>\} { printf ("{\\char'175}"); } +*/