| author | wenzelm | 
| Mon, 05 Dec 2022 22:31:46 +0100 | |
| changeset 76567 | aef247025f07 | 
| parent 74881 | 1e84ae3e886e | 
| permissions | -rw-r--r-- | 
| 48879 | 1 | (* Title: Pure/pure_syn.ML | 
| 2 | Author: Makarius | |
| 3 | ||
| 60096 | 4 | Outer syntax for bootstrapping: commands that are accessible outside a | 
| 5 | regular theory context. | |
| 48879 | 6 | *) | 
| 7 | ||
| 60095 | 8 | signature PURE_SYN = | 
| 9 | sig | |
| 10 | val bootstrap_thy: theory | |
| 11 | end; | |
| 12 | ||
| 13 | structure Pure_Syn: PURE_SYN = | |
| 48879 | 14 | struct | 
| 15 | ||
| 74835 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 16 | fun document_heading (name, pos) = | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 17 | Outer_Syntax.command (name, pos) (name ^ " heading") | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 18 | (Parse.opt_target -- Parse.document_source --| Scan.option (Parse.$$$ ";") >> | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 19 | Document_Output.document_output | 
| 74838 
4c8d9479f916
more uniform treatment of optional_argument for Latex elements;
 wenzelm parents: 
74835diff
changeset | 20 |         {markdown = false, markup = fn body => [XML.Elem (Markup.latex_heading name, body)]});
 | 
| 58918 | 21 | |
| 74835 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 22 | fun document_body ((name, pos), description) = | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 23 | Outer_Syntax.command (name, pos) description | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 24 | (Parse.opt_target -- Parse.document_source >> | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 25 | Document_Output.document_output | 
| 74838 
4c8d9479f916
more uniform treatment of optional_argument for Latex elements;
 wenzelm parents: 
74835diff
changeset | 26 |         {markdown = true, markup = fn body => [XML.Elem (Markup.latex_body name, body)]});
 | 
| 58999 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 wenzelm parents: 
58928diff
changeset | 27 | |
| 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 wenzelm parents: 
58928diff
changeset | 28 | val _ = | 
| 74835 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 29 | List.app document_heading | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 30 |    [("chapter", \<^here>),
 | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 31 |     ("section", \<^here>),
 | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 32 |     ("subsection", \<^here>),
 | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 33 |     ("subsubsection", \<^here>),
 | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 34 |     ("paragraph", \<^here>),
 | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 35 |     ("subparagraph", \<^here>)];
 | 
| 61463 | 36 | |
| 37 | val _ = | |
| 74835 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 38 | List.app document_body | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 39 |    [(("text", \<^here>), "formal comment (primary style)"),
 | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 40 |     (("txt", \<^here>), "formal comment (secondary style)")];
 | 
| 58999 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 wenzelm parents: 
58928diff
changeset | 41 | |
| 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 wenzelm parents: 
58928diff
changeset | 42 | val _ = | 
| 64556 | 43 |   Outer_Syntax.command ("text_raw", \<^here>) "LaTeX text (without surrounding environment)"
 | 
| 74835 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 44 | (Parse.opt_target -- Parse.document_source >> | 
| 
26c3a9c92e11
more general document output: enclosing markup is defined in user-space;
 wenzelm parents: 
74832diff
changeset | 45 | Document_Output.document_output | 
| 74881 | 46 |         {markdown = true, markup = XML.enclose "%\n" "\n"});
 | 
| 58928 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 wenzelm parents: 
58918diff
changeset | 47 | |
| 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 wenzelm parents: 
58918diff
changeset | 48 | val _ = | 
| 64556 | 49 |   Outer_Syntax.command ("theory", \<^here>) "begin theory"
 | 
| 58852 | 50 | (Thy_Header.args >> | 
| 51 | (fn _ => Toplevel.init_theory (fn () => error "Missing theory initialization"))); | |
| 48879 | 52 | |
| 60095 | 53 | |
| 62876 | 54 | val bootstrap_thy = Context.the_global_context (); | 
| 60095 | 55 | |
| 56 | val _ = Theory.setup (Config.put_global Outer_Syntax.bootstrap false); | |
| 57 | ||
| 48879 | 58 | end; |