Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / ide / enscript / sml_verbose.st
1 /**
2 * Name: sml_verbose
3 * Description: Standard ML programming language.
4 * Author: Matthew Fluet <mfluet@acm.org>
5 */
6
7 /*
8 builtin_face ---
9 comment_face --- comments
10 function_name_face ---
11 highlight_face ---
12 keyword_face --- keywords
13 reference_face --- special constants (nums)
14 string_face --- strings
15 type_face ---
16 variable_name_face ---
17 */
18
19 require_state (sml_simple);
20
21 /*
22 formatting = [\ \t\n\011\012\013]+;
23 */
24 sml_formatting_str = "[ \\t\\n\\011\\012\\013]+";
25 sml_formatting_re = regexp(sml_formatting_str);
26 /*
27 letter = [A-Za-z];
28 */
29 sml_letter_str = "[A-Za-z]";
30 sml_letter_re = regexp(sml_letter_str);
31 /*
32 symbol = [-!%&$#+/:<=>?@\\~`|*^];
33 */
34 sml_symbol_str = "[-!%&$#+/:<=>?@\\\\~`|*^]";
35 sml_symbol_re = regexp(sml_symbol_str);
36 /*
37 digit = [0-9];
38 */
39 sml_digit_str = "[0-9]";
40 sml_digit_re = regexp(sml_digit_str);
41 /*
42 hexdigit = [0-9a-fA-F];
43 */
44 sml_hexdigit_str = "[0-9a-fA-F]";
45 sml_hexdigit_re = regexp(sml_hexdigit_str);
46
47 /*
48 posdecint = {digit}+;
49 */
50 sml_posdecint_str = sprintf("(%s)+",sml_digit_str);
51 sml_posdecint_re = regexp(sml_posdecint_str);
52 /*
53 poshexint = "0x"{hexdigit}+;
54 */
55 sml_poshexint_str = sprintf("0x(%s)+",sml_hexdigit_str);
56 sml_poshexint_re = regexp(sml_poshexint_str);
57 /*
58 negdecint = "~"{posdecint};
59 */
60 sml_negdecint_str = sprintf("~(%s)",sml_posdecint_str);
61 sml_negdecint_re = regexp(sml_negdecint_str);
62 /*
63 neghexint = "~"{poshexint};
64 */
65 sml_neghexint_str = sprintf("~(%s)",sml_poshexint_str);
66 sml_neghexint_re = regexp(sml_neghexint_str);
67 /*
68 decint = {posdecint} | {negdecint};
69 */
70 sml_decint_str = sprintf("(%s)|(%s)",sml_posdecint_str,sml_negdecint_str);
71 sml_decint_re = regexp(sml_decint_str);
72 /*
73 hexint = {poshexint} | {neghexint};
74 */
75 sml_hexint_str = sprintf("(%s)|(%s)",sml_poshexint_str,sml_negdecint_str);
76 sml_hexint_re = regexp(sml_hexint_str);
77 /*
78 decword = "0w"{digit}+;
79 */
80 sml_decword_str = sprintf("0w(%s)+",sml_digit_str);
81 sml_decword_re = regexp(sml_decword_str);
82 /*
83 hexword = "0wx"{hexdigit}+;
84 */
85 sml_hexword_str = sprintf("0wx(%s)+",sml_hexdigit_str);
86 sml_hexword_re = regexp(sml_hexword_str);
87
88 /*
89 exp = "E" | "e";
90 */
91 sml_exp_str = "E|e";
92 sml_exp_re = regexp(sml_exp_str);
93 /*
94 real = ({decint}"."{digit}+ ({exp}{decint})?) | ({decint}{exp}{decint});
95 */
96 sml_real_str = sprintf("((%s)\\.(%s)+((%s)(%s))?)|((%s)(%s)(%s))",
97 sml_decint_str,sml_digit_str,sml_exp_str,sml_decint_str,
98 sml_decint_str,sml_exp_str,sml_decint_str);
99 sml_real_re = regexp(sml_real_str);
100
101 /*
102 scon_num = {decint} | {hexint} | {decword} | {hexword} | {real}
103 */
104 sml_scon_num_str = sprintf("\\b((%s)|(%s)|(%s)|(%s)|(%s))\\b",
105 sml_decint_str,sml_hexint_str,
106 sml_decword_str,sml_hexword_str,
107 sml_real_str);
108 sml_scon_num_re = regexp(sml_scon_num_str);
109
110 /*
111 numericlab = [1-9]{digit}*;
112 */
113 sml_numericlab_str = sprintf("[1-9](%s)*",sml_digit_str);
114 sml_numericlab_re = regexp(sml_numericlab_str);
115 /*
116 alphanumid = {letter}({letter} | {digit} | [_'])*;
117 */
118 sml_alphanumid_str = sprintf("(%s)((%s)|(%s)|[_'])*",
119 sml_letter_str,sml_letter_str,sml_digit_str);
120 /*
121 symbolicid = {symbol}+;
122 */
123 sml_symbolicid_str = sprintf("(%s)+",sml_symbol_str);
124 sml_symbolicid_re = regexp(sml_symbolicid_str);
125 /*
126 id = {alphanumid} | {symbolicid};
127 */
128 sml_id_str = sprintf("(%s)|(%s)",sml_alphanumid_str,sml_symbolicid_str);
129 sml_id_re = regexp(sml_id_str);
130 /*
131 tyvar = "'"({letter} | {digit} | [_'])*;
132 */
133 sml_tyvar_str = sprintf("'((%s)|(%s)|[_'])*",sml_letter_str,sml_digit_str);
134 sml_tyvar_re = regexp(sml_tyvar_str);
135 /*
136 longid = ({alphanumid}".")+ {id};
137 */
138 sml_longid_str = sprintf("((%s)\\.)+(%s)",sml_alphanumid_str,sml_id_str);
139 sml_longid_re = regexp(sml_longid_str);
140
141 /*
142 lab = {id} | {numericlab}
143 */
144 sml_lab_str = sprintf("(%s)|(%s)",sml_id_str,sml_numericlab_str);
145 sml_lab_re = regexp(sml_lab_str);
146 /*
147 sel = "#" {formatting} {lab}
148 */
149 sml_sel_str = sprintf("#(%s)(%s)",sml_formatting_str,sml_lab_str);
150 sml_sel_re = regexp(sml_sel_str);
151 /*
152 infix = "infix"("r")? {formatting} ({digit})?
153 */
154 sml_infix_str = sprintf("(infix(r?))(%s)(%s)?",sml_formatting_str,sml_digit_str);
155 sml_infix_re = regexp(sml_infix_str);
156
157 /*
158 val_with_tyvar = "val" {formatting} {tyvar}
159 val_with_tyvarseq = "val" {formatting} "(" {formatting} {tyvar}
160 fun_with_tyvar = "fun" {formatting} {tyvar}
161 fun_with_tyvarseq = "fun" {formatting} "(" {formatting} {tyvar}
162 */
163 sml_val_with_tyvar_str = sprintf("(val)(%s)(%s)",sml_formatting_str,sml_tyvar_str);
164 sml_val_with_tyvar_re = regexp(sml_val_with_tyvar_str);
165 sml_val_with_tyvarseq_str = sprintf("(val)(%s)(\\\()(%s)(%s)",sml_formatting_str,sml_formatting_str,sml_tyvar_str);
166 sml_val_with_tyvarseq_re = regexp(sml_val_with_tyvarseq_str);
167 sml_fun_with_tyvar_str = sprintf("(fun)(%s)(%s)",sml_formatting_str,sml_tyvar_str);
168 sml_fun_with_tyvar_re = regexp(sml_fun_with_tyvar_str);
169 sml_fun_with_tyvarseq_str = sprintf("(fun)(%s)(\\\()(%s)(%s)",sml_formatting_str,sml_formatting_str,sml_tyvar_str);
170 sml_fun_with_tyvarseq_re = regexp(sml_fun_with_tyvarseq_str);
171
172
173 state sml_verbose extends sml_simple
174 {
175 sml_infix_re {
176 keyword_face (true);
177 language_print ($1);
178 keyword_face (false);
179 language_print ($3);
180 language_print ($4);
181 }
182 sml_sel_re {
183 language_print ($0);
184 }
185
186 /*
187 * Special constants (nums)
188 */
189 sml_scon_num_re {
190 reference_face (true);
191 language_print ($0);
192 reference_face (false);
193 }
194 }
195
196 \f
197 /*
198 Local variables:
199 mode: c
200 End:
201 */