# HG changeset patch # User wenzelm # Date 1515332396 -3600 # Node ID fed0e220be45f6884fa48adcf130c397aebfa0e6 # Parent dfee70a24f0c77f6c8a43341978024060aa1fc2c more uniform output: formal comments within {* ... *}; diff -r dfee70a24f0c -r fed0e220be45 src/Pure/Thy/thy_output.ML --- a/src/Pure/Thy/thy_output.ML Sun Jan 07 14:16:39 2018 +0100 +++ b/src/Pure/Thy/thy_output.ML Sun Jan 07 14:39:56 2018 +0100 @@ -251,19 +251,6 @@ fun output_symbols syms = [Latex.text (Latex.output_symbols (map Symbol_Pos.symbol syms), #1 (Symbol_Pos.range syms))]; -fun output_symbols_comment state (is_comment, syms) = - if is_comment then - Latex.enclose_body ("%\n\\isamarkupcmt{") "}" - (output_text state {markdown = false} - (Input.source true (Symbol_Pos.implode syms) (Symbol_Pos.range syms))) - else output_symbols syms; - -val scan_symbols_comment = - Scan.many1 (fn (s, _) => s <> Symbol.comment andalso Symbol.not_eof s) >> pair false || - (Symbol_Pos.$$ Symbol.comment ::: Scan.many (Symbol.is_blank o Symbol_Pos.symbol)) -- - Scan.option (Symbol_Pos.scan_cartouche_content "Document token error: ") - >> (fn (syms, NONE) => (false, syms) | (_, SOME syms) => (true, syms)); - val output_symbols_antiq = (fn Antiquote.Text syms => output_symbols syms | Antiquote.Control {name = (name, _), body, ...} => @@ -272,12 +259,26 @@ | Antiquote.Antiq {body, ...} => Latex.enclose_body "%\n\\isaantiq\n" "{}%\n\\endisaantiq\n" (output_symbols body)); +fun output_symbols_comment state {antiq} (is_comment, syms) = + if is_comment then + Latex.enclose_body ("%\n\\isamarkupcmt{") "}" + (output_text state {markdown = false} + (Input.source true (Symbol_Pos.implode syms) (Symbol_Pos.range syms))) + else if antiq then maps output_symbols_antiq (Antiquote.parse (#1 (Symbol_Pos.range syms)) syms) + else output_symbols syms; + +val scan_symbols_comment = + Scan.many1 (fn (s, _) => s <> Symbol.comment andalso Symbol.not_eof s) >> pair false || + (Symbol_Pos.$$ Symbol.comment ::: Scan.many (Symbol.is_blank o Symbol_Pos.symbol)) -- + Scan.option (Symbol_Pos.scan_cartouche_content "Document token error: ") + >> (fn (syms, NONE) => (false, syms) | (_, SOME syms) => (true, syms)); + in -fun output_body state bg en syms = +fun output_body state antiq bg en syms = (if exists (fn (s, _) => s = Symbol.comment) syms then (case Scan.read Symbol_Pos.stopper (Scan.repeat scan_symbols_comment) syms of - SOME res => maps (output_symbols_comment state) res + SOME res => maps (output_symbols_comment state {antiq = antiq}) res | NONE => output_symbols syms) else output_symbols syms) |> Latex.enclose_body bg en and output_token state tok = @@ -285,20 +286,19 @@ val syms = Input.source_explode (Token.input_of tok); val output = if Token.is_kind Token.Comment tok then [] - else if Token.is_command tok then output_body state "\\isacommand{" "}" syms + else if Token.is_command tok then output_body state false "\\isacommand{" "}" syms else if Token.is_kind Token.Keyword tok andalso Symbol.is_ascii_identifier (Token.content_of tok) - then output_body state "\\isakeyword{" "}" syms + then output_body state false "\\isakeyword{" "}" syms else if Token.is_kind Token.String tok then - output_body state "{\\isachardoublequoteopen}" "{\\isachardoublequoteclose}" syms + output_body state false "{\\isachardoublequoteopen}" "{\\isachardoublequoteclose}" syms else if Token.is_kind Token.Alt_String tok then - output_body state "{\\isacharbackquoteopen}" "{\\isacharbackquoteclose}" syms + output_body state false "{\\isacharbackquoteopen}" "{\\isacharbackquoteclose}" syms else if Token.is_kind Token.Verbatim tok then - Latex.enclose_body "{\\isacharverbatimopen}" "{\\isacharverbatimclose}" - (maps output_symbols_antiq (Antiquote.read (Token.input_of tok))) + output_body state true "{\\isacharverbatimopen}" "{\\isacharverbatimclose}" syms else if Token.is_kind Token.Cartouche tok then - output_body state "{\\isacartoucheopen}" "{\\isacartoucheclose}" syms - else output_body state "" "" syms; + output_body state false "{\\isacartoucheopen}" "{\\isacartoucheclose}" syms + else output_body state false "" "" syms; in output end handle ERROR msg => error (msg ^ Position.here (Token.pos_of tok));