-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathverbatim.lex
More file actions
79 lines (78 loc) · 2.62 KB
/
verbatim.lex
File metadata and controls
79 lines (78 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
%START NORM VERB MATH SYNTAX
sp [ \t]*
verb \n{sp}@{sp}\n
math \n{sp}\"{sp}\n
synt \n{sp}@@@{sp}\n
nl {sp}\n{sp}
%{
#define PUSH states[top++] =
#define POP BEGIN states[--top]
%}
%%
int states[256];
int top;
BEGIN NORM;
top = 0;
<NORM>@@ { printf ("@"); }
<NORM>@ { printf ("\\mbox{\\tt ");
PUSH NORM; BEGIN VERB; }
<VERB>@ { printf ("}"); POP; }
<NORM>{verb} { printf ("\n\\mbox{\\tt ");
PUSH NORM; BEGIN VERB; }
<VERB>{verb} { printf ("}\n"); POP; }
<VERB>^{sp}\n { printf ("}\\\\[-8pt]\n\\mbox{\\tt "); }
<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>\"\" { printf ("\""); }
<NORM>\"{sp} { printf ("\\mbox{$\\it ");
PUSH NORM; BEGIN MATH; }
<MATH>{sp}\" { printf ("$}"); POP; }
<NORM>{math}{sp} { printf ("\n\\[\n\\it ");
PUSH NORM; BEGIN MATH; }
<MATH>{sp}{math} { printf ("\n\\]\n"); POP; }
<MATH>{nl} { printf ("\\\\\n\\it "); }
<MATH>{sp}&{sp} { printf ("&\\it "); }
<MATH>\\{nl} { }
<MATH>{sp} { printf ("\\ "); }
<MATH>"..." { printf ("\\ldots "); }
<MATH>">=" { printf ("\\geq "); }
<MATH>"<=" { printf ("\\leq "); }
<MATH>"->" { printf ("\\rightarrow "); }
<MATH>"<-" { printf ("\\leftarrow "); }
<MATH>@@ { printf ("@"); }
<MATH>@ { printf ("\\makebox{\\tt ");
PUSH MATH; BEGIN VERB; }
<NORM>{synt}{sp} { printf ("\n\\begin{flushleft}");
printf ("\\it\\begin{tabbing}\n");
printf ("\\hspace{0.6in}\\=");
printf ("\\hspace{3.1in}\\=\\kill\n$\\it ");
BEGIN SYNTAX; }
<SYNTAX>{sp}{synt} { printf ("$\n\\end{tabbing}\\end{flushleft}\n");
BEGIN NORM; }
<SYNTAX>{nl} { printf ("$\\\\ \n$\\it "); }
<SYNTAX>{sp}"->"{sp} { printf ("$\\>\\makebox[3.5em]{$\\rightarrow$}");
printf ("$\\it "); }
<SYNTAX>{nl}"|"{sp} { printf ("$\\\\ \n$\\it ");
printf ("$\\>\\makebox[3.5em]{$|$}$\\it "); }
<SYNTAX>{sp}&{sp} { printf ("$\\>\\makebox[3em]{}$\\it "); }
<SYNTAX>\\{nl} { }
<SYNTAX>{sp} { printf ("\\ "); }
<SYNTAX>"..." { printf ("\\ldots "); }
<SYNTAX>">=" { printf ("\\geq "); }
<SYNTAX>"<=" { printf ("\\leq "); }
<SYNTAX>"->" { printf ("\\rightarrow "); }
<SYNTAX>"<-" { printf ("\\leftarrow "); }
<SYNTAX>@@ { printf ("@"); }
<SYNTAX>@ { printf ("\\makebox{\\tt ");
PUSH SYNTAX; BEGIN VERB; }