src/Pure/General/pretty.ML
changeset 56334 6b3739fee456
parent 55918 41e06ec17604
child 61862 e2a9e46ac0fb
equal deleted inserted replaced
56333:38f1422ef473 56334:6b3739fee456
    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