# HG changeset patch # User wenzelm # Date 1724946449 -7200 # Node ID bcecb69f72faaac2dc4dbea8b09eb19f3b90988d # Parent 66a8113ac23e568a7fa06ce1505c3dc6f69b8b83 more scalable pretty printing: avoid exception String.Size at command "value" (line 33 of "$AFP/Iptables_Semantics/Examples/SQRL_Shorewall/Analyze_SQRL_Shorewall.thy") in AFP/c69af9cd3390; diff -r 66a8113ac23e -r bcecb69f72fa src/Pure/General/latex.ML --- a/src/Pure/General/latex.ML Thu Aug 29 11:43:14 2024 +0200 +++ b/src/Pure/General/latex.ML Thu Aug 29 17:47:29 2024 +0200 @@ -251,7 +251,9 @@ else if s = Markup.keyword2N then keyword_markup else Markup.no_output; -val _ = Output.add_mode latexN latex_output (prefix Symbol.latex o cartouche); +fun latex_escape ss = Symbol.latex :: Symbol.open_ :: ss @ [Symbol.close]; + +val _ = Output.add_mode latexN latex_output latex_escape; val _ = Markup.add_mode latexN latex_markup; val _ = Pretty.add_mode latexN diff -r 66a8113ac23e -r bcecb69f72fa src/Pure/General/output.ML --- a/src/Pure/General/output.ML Thu Aug 29 11:43:14 2024 +0200 +++ b/src/Pure/General/output.ML Thu Aug 29 17:47:29 2024 +0200 @@ -17,11 +17,11 @@ include BASIC_OUTPUT type output = string val default_output: string -> output * int - val default_escape: output -> string - val add_mode: string -> (string -> output * int) -> (output -> string) -> unit + val default_escape: output list -> string list + val add_mode: string -> (string -> output * int) -> (output list -> string list) -> unit val output_width: string -> output * int val output: string -> output - val escape: output -> string + val escape: output list -> string list val physical_stdout: output -> unit val physical_stderr: output -> unit val physical_writeln: output -> unit @@ -66,7 +66,7 @@ type output = string; (*raw system output*) fun default_output s = (s, size s); -fun default_escape (s: output) = s; +fun default_escape (ss: output list) = ss; local val default = {output = default_output, escape = default_escape}; diff -r 66a8113ac23e -r bcecb69f72fa src/Pure/General/pretty.ML --- a/src/Pure/General/pretty.ML Thu Aug 29 11:43:14 2024 +0200 +++ b/src/Pure/General/pretty.ML Thu Aug 29 17:47:29 2024 +0200 @@ -65,11 +65,11 @@ val regularN: string val symbolicN: string val output_buffer: int option -> T -> Buffer.T - val output: int option -> T -> Output.output + val output: int option -> T -> Output.output list val string_of_margin: int -> T -> string val string_of: T -> string val writeln: T -> unit - val symbolic_output: T -> Output.output + val symbolic_output: T -> Output.output list val symbolic_string_of: T -> string val unformatted_string_of: T -> string val markup_chunks: Markup.T -> T list -> T @@ -359,15 +359,15 @@ then symbolic prt else formatted (the_default (! margin_default) margin) prt; -val output = Buffer.content oo output_buffer; -fun string_of_margin margin = Output.escape o output (SOME margin); -val string_of = Output.escape o output NONE; -val writeln = Output.writeln o string_of; +val output = Buffer.contents oo output_buffer; +fun string_of_margin margin = implode o Output.escape o output (SOME margin); +val string_of = implode o Output.escape o output NONE; +val writeln = Output.writelns o Output.escape o output NONE; -val symbolic_output = Buffer.content o symbolic; -val symbolic_string_of = Output.escape o symbolic_output; +val symbolic_output = Buffer.contents o symbolic; +val symbolic_string_of = implode o Output.escape o symbolic_output; -val unformatted_string_of = Output.escape o Buffer.content o unformatted; +val unformatted_string_of = implode o Output.escape o Buffer.contents o unformatted; (* chunks *) diff -r 66a8113ac23e -r bcecb69f72fa src/Pure/PIDE/markup.ML --- a/src/Pure/PIDE/markup.ML Thu Aug 29 11:43:14 2024 +0200 +++ b/src/Pure/PIDE/markup.ML Thu Aug 29 17:47:29 2024 +0200 @@ -864,8 +864,8 @@ val enclose = output #-> Library.enclose; fun markup m = - let val (bg, en) = output m - in Library.enclose (Output.escape bg) (Output.escape en) end; + let val (bg, en) = output m |> apply2 (single #> Output.escape #> implode); + in Library.enclose bg en end; val markups = fold_rev markup; diff -r 66a8113ac23e -r bcecb69f72fa src/Pure/Syntax/syntax_phases.ML --- a/src/Pure/Syntax/syntax_phases.ML Thu Aug 29 11:43:14 2024 +0200 +++ b/src/Pure/Syntax/syntax_phases.ML Thu Aug 29 17:47:29 2024 +0200 @@ -766,7 +766,7 @@ if show_markup andalso not show_types then let val ((bg1, bg2), en) = typing_elem; - val bg = bg1 ^ Pretty.symbolic_output (pretty_typ_ast Markup.empty ty) ^ bg2; + val bg = implode (bg1 :: Pretty.symbolic_output (pretty_typ_ast Markup.empty ty) @ [bg2]); val info = {markup = (bg, en), consistent = false, indent = 0}; in SOME (Pretty.make_block info [pretty_ast Markup.empty t]) end else NONE @@ -775,7 +775,7 @@ if show_markup andalso not show_sorts then let val ((bg1, bg2), en) = sorting_elem; - val bg = bg1 ^ Pretty.symbolic_output (pretty_typ_ast Markup.empty s) ^ bg2; + val bg = implode (bg1 :: Pretty.symbolic_output (pretty_typ_ast Markup.empty s) @ [bg2]); val info = {markup = (bg, en), consistent = false, indent = 0}; in SOME (Pretty.make_block info [pretty_typ_ast Markup.empty ty]) end else NONE