src/Pure/Syntax/printer.ML
changeset 69071 3ef82592dc22
parent 67704 23d46836a5ac
child 69077 11529ae45786
equal deleted inserted replaced
69070:a74b09822d79 69071:3ef82592dc22
    26   val show_structs_raw: Config.raw
    26   val show_structs_raw: Config.raw
    27   val show_question_marks_raw: Config.raw
    27   val show_question_marks_raw: Config.raw
    28   val show_type_emphasis: bool Config.T
    28   val show_type_emphasis: bool Config.T
    29   val type_emphasis: Proof.context -> typ -> bool
    29   val type_emphasis: Proof.context -> typ -> bool
    30   type prtabs
    30   type prtabs
       
    31   datatype assoc = No_Assoc | Left_Assoc | Right_Assoc
       
    32   val get_infix: prtabs -> string -> {assoc: assoc, delim: string, pri: int} option
    31   val empty_prtabs: prtabs
    33   val empty_prtabs: prtabs
    32   val update_prtabs: string -> Syntax_Ext.xprod list -> prtabs -> prtabs
    34   val update_prtabs: string -> Syntax_Ext.xprod list -> prtabs -> prtabs
    33   val remove_prtabs: string -> Syntax_Ext.xprod list -> prtabs -> prtabs
    35   val remove_prtabs: string -> Syntax_Ext.xprod list -> prtabs -> prtabs
    34   val merge_prtabs: prtabs -> prtabs -> prtabs
    36   val merge_prtabs: prtabs -> prtabs -> prtabs
    35   val pretty_term_ast: bool -> Proof.context -> prtabs ->
    37   val pretty_term_ast: bool -> Proof.context -> prtabs ->
    88   Break of int |
    90   Break of int |
    89   Block of Syntax_Ext.block_info * symb list;
    91   Block of Syntax_Ext.block_info * symb list;
    90 
    92 
    91 type prtabs = (string * ((symb list * int * int) list) Symtab.table) list;
    93 type prtabs = (string * ((symb list * int * int) list) Symtab.table) list;
    92 
    94 
    93 fun mode_tab prtabs mode = the_default Symtab.empty (AList.lookup (op =) prtabs mode);
    95 fun mode_tab (prtabs: prtabs) mode = the_default Symtab.empty (AList.lookup (op =) prtabs mode);
    94 fun mode_tabs prtabs modes = map_filter (AList.lookup (op =) prtabs) (modes @ [""]);
    96 fun mode_tabs (prtabs: prtabs) modes = map_filter (AList.lookup (op =) prtabs) (modes @ [""]);
       
    97 
       
    98 
       
    99 (* plain infix syntax *)
       
   100 
       
   101 datatype assoc = No_Assoc | Left_Assoc | Right_Assoc;
       
   102 
       
   103 fun is_space str = forall_string (fn s => s = " ") str;
       
   104 
       
   105 fun get_infix prtabs c =
       
   106   Symtab.lookup_list (mode_tab prtabs "") c
       
   107   |> map_filter (fn (symbs, _, p) =>
       
   108       (case symbs of
       
   109         [Block (_, [Arg p1, String (_, s), String (_, d), Break _, Arg p2])] =>
       
   110           if is_space s andalso not (is_space d) then SOME (p1, p2, d, p) else NONE
       
   111       | [Block (_, [TypArg p1, String (_, s), String (_, d), Break _, TypArg p2])] =>
       
   112           if is_space s andalso not (is_space d) then SOME (p1, p2, d, p) else NONE
       
   113       | _ => NONE))
       
   114   |> get_first (fn (p1, p2, d, p) =>
       
   115       if p1 = p + 1 andalso p2 = p + 1 then SOME {assoc = No_Assoc, delim = d, pri = p}
       
   116       else if p1 = p andalso p2 = p + 1 then SOME {assoc = Left_Assoc, delim = d, pri = p}
       
   117       else if p1 = p + 1 andalso p2 = p then SOME {assoc = Right_Assoc, delim = d, pri = p}
       
   118       else NONE);
    95 
   119 
    96 
   120 
    97 (* xprod_to_fmt *)
   121 (* xprod_to_fmt *)
    98 
   122 
    99 fun xprod_to_fmt (Syntax_Ext.XProd (_, _, "", _)) = NONE
   123 fun xprod_to_fmt (Syntax_Ext.XProd (_, _, "", _)) = NONE