43 val keyword1: string -> T |
43 val keyword1: string -> T |
44 val keyword2: string -> T |
44 val keyword2: string -> T |
45 val text: string -> T list |
45 val text: string -> T list |
46 val paragraph: T list -> T |
46 val paragraph: T list -> T |
47 val para: string -> T |
47 val para: string -> T |
48 val markup_chunks: Markup.T -> T list -> T |
|
49 val chunks: T list -> T |
|
50 val chunks2: T list -> T |
|
51 val block_enclose: T * T -> T list -> T |
|
52 val quote: T -> T |
48 val quote: T -> T |
53 val backquote: T -> T |
49 val backquote: T -> T |
54 val cartouche: T -> T |
50 val cartouche: T -> T |
55 val separate: string -> T list -> T list |
51 val separate: string -> T list -> T list |
56 val commas: T list -> T list |
52 val commas: T list -> T list |
70 val string_of: T -> string |
66 val string_of: T -> string |
71 val writeln: T -> unit |
67 val writeln: T -> unit |
72 val symbolic_output: T -> Output.output |
68 val symbolic_output: T -> Output.output |
73 val symbolic_string_of: T -> string |
69 val symbolic_string_of: T -> string |
74 val str_of: T -> string |
70 val str_of: T -> string |
|
71 val markup_chunks: Markup.T -> T list -> T |
|
72 val chunks: T list -> T |
|
73 val chunks2: T list -> T |
|
74 val block_enclose: T * T -> T list -> T |
|
75 val writeln_chunks: T list -> unit |
|
76 val writeln_chunks2: T list -> unit |
75 val to_ML: T -> ML_Pretty.pretty |
77 val to_ML: T -> ML_Pretty.pretty |
76 val from_ML: ML_Pretty.pretty -> T |
78 val from_ML: ML_Pretty.pretty -> T |
77 end; |
79 end; |
78 |
80 |
79 structure Pretty: PRETTY = |
81 structure Pretty: PRETTY = |
167 fun keyword2 name = mark_str (Markup.keyword2, name); |
169 fun keyword2 name = mark_str (Markup.keyword2, name); |
168 |
170 |
169 val text = breaks o map str o Symbol.explode_words; |
171 val text = breaks o map str o Symbol.explode_words; |
170 val paragraph = markup Markup.paragraph; |
172 val paragraph = markup Markup.paragraph; |
171 val para = paragraph o text; |
173 val para = paragraph o text; |
172 |
|
173 fun markup_chunks m prts = markup m (fbreaks (map (text_fold o single) prts)); |
|
174 val chunks = markup_chunks Markup.empty; |
|
175 |
|
176 fun chunks2 prts = |
|
177 (case try split_last prts of |
|
178 NONE => blk (0, []) |
|
179 | SOME (prefix, last) => |
|
180 blk (0, maps (fn prt => [text_fold [prt, fbrk], fbrk]) prefix @ [text_fold [last]])); |
|
181 |
|
182 fun block_enclose (prt1, prt2) prts = chunks [block (fbreaks (prt1 :: prts)), prt2]; |
|
183 |
174 |
184 fun quote prt = blk (1, [str "\"", prt, str "\""]); |
175 fun quote prt = blk (1, [str "\"", prt, str "\""]); |
185 fun backquote prt = blk (1, [str "`", prt, str "`"]); |
176 fun backquote prt = blk (1, [str "`", prt, str "`"]); |
186 fun cartouche prt = blk (1, [str "\\<open>", prt, str "\\<close>"]); |
177 fun cartouche prt = blk (1, [str "\\<open>", prt, str "\\<close>"]); |
187 |
178 |
353 val symbolic_string_of = Output.escape o symbolic_output; |
344 val symbolic_string_of = Output.escape o symbolic_output; |
354 |
345 |
355 val str_of = Output.escape o Buffer.content o unformatted; |
346 val str_of = Output.escape o Buffer.content o unformatted; |
356 |
347 |
357 |
348 |
|
349 (* chunks *) |
|
350 |
|
351 fun markup_chunks m prts = markup m (fbreaks (map (text_fold o single) prts)); |
|
352 val chunks = markup_chunks Markup.empty; |
|
353 |
|
354 fun chunks2 prts = |
|
355 (case try split_last prts of |
|
356 NONE => blk (0, []) |
|
357 | SOME (prefix, last) => |
|
358 blk (0, maps (fn prt => [text_fold [prt, fbrk], fbrk]) prefix @ [text_fold [last]])); |
|
359 |
|
360 fun block_enclose (prt1, prt2) prts = chunks [block (fbreaks (prt1 :: prts)), prt2]; |
|
361 |
|
362 fun string_of_text_fold prt = string_of prt |> Markup.markup Markup.text_fold; |
|
363 |
|
364 fun writeln_chunks prts = |
|
365 Output.writelns (Library.separate "\n" (map string_of_text_fold prts)); |
|
366 |
|
367 fun writeln_chunks2 prts = |
|
368 (case try split_last prts of |
|
369 NONE => () |
|
370 | SOME (prefix, last) => |
|
371 (map (fn prt => Markup.markup Markup.text_fold (string_of prt ^ "\n") ^ "\n") prefix @ |
|
372 [string_of_text_fold last]) |
|
373 |> Output.writelns); |
|
374 |
|
375 |
358 |
376 |
359 (** ML toplevel pretty printing **) |
377 (** ML toplevel pretty printing **) |
360 |
378 |
361 fun to_ML (Block (m, prts, ind, _)) = ML_Pretty.Block (m, map to_ML prts, ind) |
379 fun to_ML (Block (m, prts, ind, _)) = ML_Pretty.Block (m, map to_ML prts, ind) |
362 | to_ML (String s) = ML_Pretty.String s |
380 | to_ML (String s) = ML_Pretty.String s |