| author | wenzelm | 
| Fri, 09 Aug 2019 20:33:05 +0200 | |
| changeset 70495 | aaafff824632 | 
| parent 69965 | da5e7278286b | 
| child 73751 | fefb5ccb1e5e | 
| 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 | |
| 67381 | 10 |   val document_command: {markdown: bool} -> (xstring * Position.T) option * Input.source ->
 | 
| 11 | Toplevel.transition -> Toplevel.transition | |
| 60095 | 12 | val bootstrap_thy: theory | 
| 13 | end; | |
| 14 | ||
| 15 | structure Pure_Syn: PURE_SYN = | |
| 48879 | 16 | struct | 
| 17 | ||
| 62912 | 18 | val semi = Scan.option (Parse.$$$ ";"); | 
| 19 | ||
| 67569 
5d71b114e7a3
avoid proliferation of language_document reports;
 wenzelm parents: 
67381diff
changeset | 20 | fun output_document state markdown txt = | 
| 
5d71b114e7a3
avoid proliferation of language_document reports;
 wenzelm parents: 
67381diff
changeset | 21 | let | 
| 
5d71b114e7a3
avoid proliferation of language_document reports;
 wenzelm parents: 
67381diff
changeset | 22 | val ctxt = Toplevel.presentation_context state; | 
| 69965 
da5e7278286b
more markup for various text kinds, notably for nested formal comments;
 wenzelm parents: 
67569diff
changeset | 23 | val pos = Input.pos_of txt; | 
| 67569 
5d71b114e7a3
avoid proliferation of language_document reports;
 wenzelm parents: 
67381diff
changeset | 24 | val _ = | 
| 69965 
da5e7278286b
more markup for various text kinds, notably for nested formal comments;
 wenzelm parents: 
67569diff
changeset | 25 | Context_Position.reports ctxt | 
| 
da5e7278286b
more markup for various text kinds, notably for nested formal comments;
 wenzelm parents: 
67569diff
changeset | 26 | [(pos, Markup.language_document (Input.is_delimited txt)), | 
| 
da5e7278286b
more markup for various text kinds, notably for nested formal comments;
 wenzelm parents: 
67569diff
changeset | 27 | (pos, Markup.plain_text)]; | 
| 67569 
5d71b114e7a3
avoid proliferation of language_document reports;
 wenzelm parents: 
67381diff
changeset | 28 | in Thy_Output.output_document ctxt markdown txt end; | 
| 
5d71b114e7a3
avoid proliferation of language_document reports;
 wenzelm parents: 
67381diff
changeset | 29 | |
| 
5d71b114e7a3
avoid proliferation of language_document reports;
 wenzelm parents: 
67381diff
changeset | 30 | fun document_command markdown (loc, txt) = | 
| 67381 | 31 | Toplevel.keep (fn state => | 
| 32 | (case loc of | |
| 67569 
5d71b114e7a3
avoid proliferation of language_document reports;
 wenzelm parents: 
67381diff
changeset | 33 | NONE => ignore (output_document state markdown txt) | 
| 67381 | 34 | | SOME (_, pos) => | 
| 35 |         error ("Illegal target specification -- not a theory context" ^ Position.here pos))) o
 | |
| 36 | Toplevel.present_local_theory loc (fn state => | |
| 67569 
5d71b114e7a3
avoid proliferation of language_document reports;
 wenzelm parents: 
67381diff
changeset | 37 | ignore (output_document state markdown txt)); | 
| 67381 | 38 | |
| 58928 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 wenzelm parents: 
58918diff
changeset | 39 | val _ = | 
| 64556 | 40 |   Outer_Syntax.command ("chapter", \<^here>) "chapter heading"
 | 
| 67381 | 41 |     (Parse.opt_target -- Parse.document_source --| semi >> document_command {markdown = false});
 | 
| 58999 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 wenzelm parents: 
58928diff
changeset | 42 | |
| 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 wenzelm parents: 
58928diff
changeset | 43 | val _ = | 
| 64556 | 44 |   Outer_Syntax.command ("section", \<^here>) "section heading"
 | 
| 67381 | 45 |     (Parse.opt_target -- Parse.document_source --| semi >> document_command {markdown = false});
 | 
| 58918 | 46 | |
| 48879 | 47 | val _ = | 
| 64556 | 48 |   Outer_Syntax.command ("subsection", \<^here>) "subsection heading"
 | 
| 67381 | 49 |     (Parse.opt_target -- Parse.document_source --| semi >> document_command {markdown = false});
 | 
| 58999 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 wenzelm parents: 
58928diff
changeset | 50 | |
| 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 wenzelm parents: 
58928diff
changeset | 51 | val _ = | 
| 64556 | 52 |   Outer_Syntax.command ("subsubsection", \<^here>) "subsubsection heading"
 | 
| 67381 | 53 |     (Parse.opt_target -- Parse.document_source --| semi >> document_command {markdown = false});
 | 
| 58928 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 wenzelm parents: 
58918diff
changeset | 54 | |
| 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 wenzelm parents: 
58918diff
changeset | 55 | val _ = | 
| 64556 | 56 |   Outer_Syntax.command ("paragraph", \<^here>) "paragraph heading"
 | 
| 67381 | 57 |     (Parse.opt_target -- Parse.document_source --| semi >> document_command {markdown = false});
 | 
| 61463 | 58 | |
| 59 | val _ = | |
| 64556 | 60 |   Outer_Syntax.command ("subparagraph", \<^here>) "subparagraph heading"
 | 
| 67381 | 61 |     (Parse.opt_target -- Parse.document_source --| semi >> document_command {markdown = false});
 | 
| 61463 | 62 | |
| 63 | val _ = | |
| 64556 | 64 |   Outer_Syntax.command ("text", \<^here>) "formal comment (primary style)"
 | 
| 67381 | 65 |     (Parse.opt_target -- Parse.document_source >> document_command {markdown = true});
 | 
| 58928 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 wenzelm parents: 
58918diff
changeset | 66 | |
| 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 wenzelm parents: 
58918diff
changeset | 67 | val _ = | 
| 64556 | 68 |   Outer_Syntax.command ("txt", \<^here>) "formal comment (secondary style)"
 | 
| 67381 | 69 |     (Parse.opt_target -- Parse.document_source >> document_command {markdown = true});
 | 
| 58999 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 wenzelm parents: 
58928diff
changeset | 70 | |
| 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 wenzelm parents: 
58928diff
changeset | 71 | val _ = | 
| 64556 | 72 |   Outer_Syntax.command ("text_raw", \<^here>) "LaTeX text (without surrounding environment)"
 | 
| 67381 | 73 |     (Parse.opt_target -- Parse.document_source >> document_command {markdown = true});
 | 
| 58928 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 wenzelm parents: 
58918diff
changeset | 74 | |
| 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 wenzelm parents: 
58918diff
changeset | 75 | val _ = | 
| 64556 | 76 |   Outer_Syntax.command ("theory", \<^here>) "begin theory"
 | 
| 58852 | 77 | (Thy_Header.args >> | 
| 78 | (fn _ => Toplevel.init_theory (fn () => error "Missing theory initialization"))); | |
| 48879 | 79 | |
| 60095 | 80 | |
| 62876 | 81 | val bootstrap_thy = Context.the_global_context (); | 
| 60095 | 82 | |
| 83 | val _ = Theory.setup (Config.put_global Outer_Syntax.bootstrap false); | |
| 84 | ||
| 48879 | 85 | end; |