src/Pure/Syntax/printer.ML
changeset 62789 ce15dd971965
parent 62783 75ee05386b90
child 64556 851ae0e7b09c
equal deleted inserted replaced
62788:374820748c70 62789:ce15dd971965
    84 datatype symb =
    84 datatype symb =
    85   Arg of int |
    85   Arg of int |
    86   TypArg of int |
    86   TypArg of int |
    87   String of bool * string |
    87   String of bool * string |
    88   Break of int |
    88   Break of int |
    89   Block of {markup: Markup.T, consistent: bool, indent: int} * symb list;
    89   Block of Syntax_Ext.block_info * symb list;
    90 
    90 
    91 type prtabs = (string * ((symb list * int * int) list) Symtab.table) list;
    91 type prtabs = (string * ((symb list * int * int) list) Symtab.table) list;
    92 
    92 
    93 fun mode_tab prtabs mode = the_default Symtab.empty (AList.lookup (op =) prtabs mode);
    93 fun mode_tab prtabs mode = the_default Symtab.empty (AList.lookup (op =) prtabs mode);
    94 fun mode_tabs prtabs modes = map_filter (AList.lookup (op =) prtabs) (modes @ [""]);
    94 fun mode_tabs prtabs modes = map_filter (AList.lookup (op =) prtabs) (modes @ [""]);
   200             val T =
   200             val T =
   201               if do_mark
   201               if do_mark
   202               then Pretty.marks_str (m @ [Lexicon.literal_markup s], s)
   202               then Pretty.marks_str (m @ [Lexicon.literal_markup s], s)
   203               else Pretty.str s;
   203               else Pretty.str s;
   204           in (T :: Ts, args') end
   204           in (T :: Ts, args') end
   205       | synT m (Block (info, bsymbs) :: symbs, args) =
   205       | synT m (Block ({markup, consistent, unbreakable, indent}, bsymbs) :: symbs, args) =
   206           let
   206           let
   207             val (bTs, args') = synT m (bsymbs, args);
   207             val (bTs, args') = synT m (bsymbs, args);
   208             val (Ts, args'') = synT m (symbs, args');
   208             val (Ts, args'') = synT m (symbs, args');
   209             val T = Pretty.markup_block info bTs |> #indent info < 0 ? Pretty.unbreakable;
   209             val T =
       
   210               Pretty.markup_block {markup = markup, consistent = consistent, indent = indent} bTs
       
   211               |> unbreakable ? Pretty.unbreakable;
   210           in (T :: Ts, args'') end
   212           in (T :: Ts, args'') end
   211       | synT m (Break i :: symbs, args) =
   213       | synT m (Break i :: symbs, args) =
   212           let
   214           let
   213             val (Ts, args') = synT m (symbs, args);
   215             val (Ts, args') = synT m (symbs, args);
   214             val T = if i < 0 then Pretty.fbrk else Pretty.brk i;
   216             val T = if i < 0 then Pretty.fbrk else Pretty.brk i;