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 |