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