45 val document_heading_spec: spec |
45 val document_heading_spec: spec |
46 val document_body_spec: spec |
46 val document_body_spec: spec |
47 type keywords |
47 type keywords |
48 val minor_keywords: keywords -> Scan.lexicon |
48 val minor_keywords: keywords -> Scan.lexicon |
49 val major_keywords: keywords -> Scan.lexicon |
49 val major_keywords: keywords -> Scan.lexicon |
50 val no_command_keywords: keywords -> keywords |
|
51 val empty_keywords: keywords |
50 val empty_keywords: keywords |
52 val merge_keywords: keywords * keywords -> keywords |
51 val merge_keywords: keywords * keywords -> keywords |
53 val add_keywords: ((string * Position.T) * spec) list -> keywords -> keywords |
52 val add_keywords: ((string * Position.T) * spec) list -> keywords -> keywords |
54 val add_minor_keywords: string list -> keywords -> keywords |
53 val add_minor_keywords: string list -> keywords -> keywords |
55 val add_major_keywords: string list -> keywords -> keywords |
54 val add_major_keywords: string list -> keywords -> keywords |
|
55 val no_major_keywords: keywords -> keywords |
56 val is_keyword: keywords -> string -> bool |
56 val is_keyword: keywords -> string -> bool |
57 val is_command: keywords -> string -> bool |
57 val is_command: keywords -> string -> bool |
58 val is_literal: keywords -> string -> bool |
58 val is_literal: keywords -> string -> bool |
59 val dest_commands: keywords -> string list |
59 val dest_commands: keywords -> string list |
60 val command_markup: keywords -> string -> Markup.T option |
60 val command_markup: keywords -> string -> Markup.T option |
169 Keywords {minor = minor, major = major, commands = commands}; |
169 Keywords {minor = minor, major = major, commands = commands}; |
170 |
170 |
171 fun map_keywords f (Keywords {minor, major, commands}) = |
171 fun map_keywords f (Keywords {minor, major, commands}) = |
172 make_keywords (f (minor, major, commands)); |
172 make_keywords (f (minor, major, commands)); |
173 |
173 |
174 val no_command_keywords = |
|
175 map_keywords (fn (minor, _, _) => (minor, Scan.empty_lexicon, Symtab.empty)); |
|
176 |
|
177 |
174 |
178 (* build keywords *) |
175 (* build keywords *) |
179 |
176 |
180 val empty_keywords = |
177 val empty_keywords = |
181 make_keywords (Scan.empty_lexicon, Scan.empty_lexicon, Symtab.empty); |
178 make_keywords (Scan.empty_lexicon, Scan.empty_lexicon, Symtab.empty); |
205 add_keywords o map (fn name => ((name, Position.none), no_spec)); |
202 add_keywords o map (fn name => ((name, Position.none), no_spec)); |
206 |
203 |
207 val add_major_keywords = |
204 val add_major_keywords = |
208 add_keywords o map (fn name => ((name, Position.none), (diag, []))); |
205 add_keywords o map (fn name => ((name, Position.none), (diag, []))); |
209 |
206 |
|
207 val no_major_keywords = |
|
208 map_keywords (fn (minor, _, _) => (minor, Scan.empty_lexicon, Symtab.empty)); |
|
209 |
210 |
210 |
211 (* keyword status *) |
211 (* keyword status *) |
212 |
212 |
213 fun is_keyword keywords s = Scan.is_literal (minor_keywords keywords) (Symbol.explode s); |
213 fun is_keyword keywords s = Scan.is_literal (minor_keywords keywords) (Symbol.explode s); |
214 fun is_command (Keywords {commands, ...}) = Symtab.defined commands; |
214 fun is_command (Keywords {commands, ...}) = Symtab.defined commands; |