| author | Fabian Huch <huch@in.tum.de> | 
| Tue, 04 Jun 2024 09:02:36 +0200 | |
| changeset 80246 | 245dd5f82462 | 
| parent 73163 | 624c2b98860a | 
| child 80741 | ec1023a5c54c | 
| permissions | -rw-r--r-- | 
| 18 | 1  | 
(* Title: Pure/Syntax/printer.ML  | 
| 0 | 2  | 
Author: Tobias Nipkow and Markus Wenzel, TU Muenchen  | 
| 18 | 3  | 
|
4  | 
Pretty printing of asts, terms, types and print (ast) translation.  | 
|
| 0 | 5  | 
*)  | 
6  | 
||
| 
42289
 
dafae095d733
discontinued special status of structure Printer;
 
wenzelm 
parents: 
42288 
diff
changeset
 | 
7  | 
signature BASIC_PRINTER =  | 
| 2384 | 8  | 
sig  | 
| 
39137
 
ccb53edd59f0
turned show_brackets into proper configuration option;
 
wenzelm 
parents: 
39134 
diff
changeset
 | 
9  | 
val show_brackets: bool Config.T  | 
| 
 
ccb53edd59f0
turned show_brackets into proper configuration option;
 
wenzelm 
parents: 
39134 
diff
changeset
 | 
10  | 
val show_types: bool Config.T  | 
| 
39134
 
917b4b6ba3d2
turned show_sorts/show_types into proper configuration options;
 
wenzelm 
parents: 
39128 
diff
changeset
 | 
11  | 
val show_sorts: bool Config.T  | 
| 
49657
 
40e4feac2921
turn constraints into Isabelle_Markup.typing, depending on show_markup options;
 
wenzelm 
parents: 
49655 
diff
changeset
 | 
12  | 
val show_markup: bool Config.T  | 
| 
39127
 
e7ecbe86d22e
turned show_structs into proper configuration option;
 
wenzelm 
parents: 
39118 
diff
changeset
 | 
13  | 
val show_structs: bool Config.T  | 
| 
38980
 
af73cf0dc31f
turned show_question_marks into proper configuration option;
 
wenzelm 
parents: 
37852 
diff
changeset
 | 
14  | 
val show_question_marks: bool Config.T  | 
| 40956 | 15  | 
val pretty_priority: int Config.T  | 
| 2384 | 16  | 
end;  | 
| 0 | 17  | 
|
18  | 
signature PRINTER =  | 
|
| 2384 | 19  | 
sig  | 
| 
42289
 
dafae095d733
discontinued special status of structure Printer;
 
wenzelm 
parents: 
42288 
diff
changeset
 | 
20  | 
include BASIC_PRINTER  | 
| 
49657
 
40e4feac2921
turn constraints into Isabelle_Markup.typing, depending on show_markup options;
 
wenzelm 
parents: 
49655 
diff
changeset
 | 
21  | 
val show_markup_default: bool Unsynchronized.ref  | 
| 
52210
 
0226035df99d
more explicit Printer.type_emphasis, depending on show_type_emphasis;
 
wenzelm 
parents: 
52185 
diff
changeset
 | 
22  | 
val show_type_emphasis: bool Config.T  | 
| 
 
0226035df99d
more explicit Printer.type_emphasis, depending on show_type_emphasis;
 
wenzelm 
parents: 
52185 
diff
changeset
 | 
23  | 
val type_emphasis: Proof.context -> typ -> bool  | 
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
24  | 
type prtabs  | 
| 
69071
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
25  | 
datatype assoc = No_Assoc | Left_Assoc | Right_Assoc  | 
| 
69078
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
26  | 
val get_prefix: prtabs -> Symtab.key -> string option  | 
| 
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
27  | 
val get_binder: prtabs -> Symtab.key -> string option  | 
| 
69071
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
28  | 
  val get_infix: prtabs -> string -> {assoc: assoc, delim: string, pri: int} option
 | 
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
29  | 
val empty_prtabs: prtabs  | 
| 
42288
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
30  | 
val update_prtabs: string -> Syntax_Ext.xprod list -> prtabs -> prtabs  | 
| 
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
31  | 
val remove_prtabs: string -> Syntax_Ext.xprod list -> prtabs -> prtabs  | 
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
32  | 
val merge_prtabs: prtabs -> prtabs -> prtabs  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
33  | 
val pretty_term_ast: bool -> Proof.context -> prtabs ->  | 
| 42254 | 34  | 
(string -> Proof.context -> Ast.ast list -> Ast.ast) ->  | 
| 49655 | 35  | 
(string -> Ast.ast list -> Pretty.T option) ->  | 
| 
42382
 
dcd983ee2c29
provide structure Syntax early (before structure Type), back-patch check/uncheck later;
 
wenzelm 
parents: 
42297 
diff
changeset
 | 
36  | 
(string -> Markup.T list * string) ->  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
37  | 
Ast.ast -> Pretty.T list  | 
| 
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
38  | 
val pretty_typ_ast: Proof.context -> prtabs ->  | 
| 42254 | 39  | 
(string -> Proof.context -> Ast.ast list -> Ast.ast) ->  | 
| 49655 | 40  | 
(string -> Ast.ast list -> Pretty.T option) ->  | 
| 
42382
 
dcd983ee2c29
provide structure Syntax early (before structure Type), back-patch check/uncheck later;
 
wenzelm 
parents: 
42297 
diff
changeset
 | 
41  | 
(string -> Markup.T list * string) -> Ast.ast -> Pretty.T list  | 
| 2384 | 42  | 
end;  | 
| 0 | 43  | 
|
| 2365 | 44  | 
structure Printer: PRINTER =  | 
| 0 | 45  | 
struct  | 
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
46  | 
|
| 0 | 47  | 
(** options for printing **)  | 
48  | 
||
| 69575 | 49  | 
val show_brackets = Config.declare_option_bool ("show_brackets", \<^here>);
 | 
50  | 
val show_types = Config.declare_option_bool ("show_types", \<^here>);
 | 
|
51  | 
val show_sorts = Config.declare_option_bool ("show_sorts", \<^here>);
 | 
|
| 
49657
 
40e4feac2921
turn constraints into Isabelle_Markup.typing, depending on show_markup options;
 
wenzelm 
parents: 
49655 
diff
changeset
 | 
52  | 
val show_markup_default = Unsynchronized.ref false;  | 
| 69575 | 53  | 
val show_markup = Config.declare_bool ("show_markup", \<^here>) (fn _ => ! show_markup_default);
 | 
54  | 
val show_structs = Config.declare_bool ("show_structs", \<^here>) (K false);
 | 
|
55  | 
val show_question_marks = Config.declare_option_bool ("show_question_marks", \<^here>);
 | 
|
56  | 
val show_type_emphasis = Config.declare_bool ("show_type_emphasis", \<^here>) (K true);
 | 
|
| 
52210
 
0226035df99d
more explicit Printer.type_emphasis, depending on show_type_emphasis;
 
wenzelm 
parents: 
52185 
diff
changeset
 | 
57  | 
|
| 
 
0226035df99d
more explicit Printer.type_emphasis, depending on show_type_emphasis;
 
wenzelm 
parents: 
52185 
diff
changeset
 | 
58  | 
fun type_emphasis ctxt T =  | 
| 
 
0226035df99d
more explicit Printer.type_emphasis, depending on show_type_emphasis;
 
wenzelm 
parents: 
52185 
diff
changeset
 | 
59  | 
T <> dummyT andalso  | 
| 
 
0226035df99d
more explicit Printer.type_emphasis, depending on show_type_emphasis;
 
wenzelm 
parents: 
52185 
diff
changeset
 | 
60  | 
(Config.get ctxt show_types orelse Config.get ctxt show_markup orelse  | 
| 67704 | 61  | 
Config.get ctxt show_type_emphasis andalso not (is_Type T));  | 
| 
49690
 
a6814de45b69
more explicit show_type_constraint, show_sort_constraint;
 
wenzelm 
parents: 
49657 
diff
changeset
 | 
62  | 
|
| 
14837
 
827c68f8267c
added pp_show_brackets; support unbreakable blocks;
 
wenzelm 
parents: 
14783 
diff
changeset
 | 
63  | 
|
| 0 | 64  | 
|
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
65  | 
(** type prtabs **)  | 
| 0 | 66  | 
|
67  | 
datatype symb =  | 
|
68  | 
Arg of int |  | 
|
69  | 
TypArg of int |  | 
|
| 
49821
 
d15fe10593ff
clarified output token markup (see also bc22daeed49e);
 
wenzelm 
parents: 
49690 
diff
changeset
 | 
70  | 
String of bool * string |  | 
| 0 | 71  | 
Break of int |  | 
| 62789 | 72  | 
Block of Syntax_Ext.block_info * symb list;  | 
| 0 | 73  | 
|
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
74  | 
type prtabs = (string * ((symb list * int * int) list) Symtab.table) list;  | 
| 
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
75  | 
|
| 
69071
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
76  | 
fun mode_tab (prtabs: prtabs) mode = the_default Symtab.empty (AList.lookup (op =) prtabs mode);  | 
| 
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
77  | 
fun mode_tabs (prtabs: prtabs) modes = map_filter (AList.lookup (op =) prtabs) (modes @ [""]);  | 
| 
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
78  | 
|
| 
69078
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
79  | 
fun lookup_default prtabs = Symtab.lookup_list (mode_tab prtabs "");  | 
| 
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
80  | 
|
| 
69071
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
81  | 
|
| 
69077
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
82  | 
(* approximative syntax *)  | 
| 
69071
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
83  | 
|
| 
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
84  | 
datatype assoc = No_Assoc | Left_Assoc | Right_Assoc;  | 
| 
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
85  | 
|
| 
69077
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
86  | 
local  | 
| 
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
87  | 
|
| 
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
88  | 
fun is_arg (Arg _) = true  | 
| 
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
89  | 
| is_arg (TypArg _) = true  | 
| 
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
90  | 
| is_arg _ = false;  | 
| 
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
91  | 
|
| 
69071
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
92  | 
fun is_space str = forall_string (fn s => s = " ") str;  | 
| 
69077
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
93  | 
|
| 
69079
 
fedacfd60fdb
more liberal: detect free-form infixes as well, e.g. Orderings.ord_class.less_eq;
 
wenzelm 
parents: 
69078 
diff
changeset
 | 
94  | 
fun clean symbs = symbs |> maps  | 
| 
 
fedacfd60fdb
more liberal: detect free-form infixes as well, e.g. Orderings.ord_class.less_eq;
 
wenzelm 
parents: 
69078 
diff
changeset
 | 
95  | 
(fn Block (_, body) => clean body  | 
| 
 
fedacfd60fdb
more liberal: detect free-form infixes as well, e.g. Orderings.ord_class.less_eq;
 
wenzelm 
parents: 
69078 
diff
changeset
 | 
96  | 
| symb as String (_, s) => if is_space s then [] else [symb]  | 
| 
 
fedacfd60fdb
more liberal: detect free-form infixes as well, e.g. Orderings.ord_class.less_eq;
 
wenzelm 
parents: 
69078 
diff
changeset
 | 
97  | 
| symb => if is_arg symb then [symb] else []);  | 
| 
69077
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
98  | 
|
| 
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
99  | 
in  | 
| 
69071
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
100  | 
|
| 
69078
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
101  | 
fun get_prefix prtabs c =  | 
| 
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
102  | 
lookup_default prtabs c  | 
| 
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
103  | 
|> get_first (fn (symbs, _, _) =>  | 
| 
69079
 
fedacfd60fdb
more liberal: detect free-form infixes as well, e.g. Orderings.ord_class.less_eq;
 
wenzelm 
parents: 
69078 
diff
changeset
 | 
104  | 
(case clean symbs of  | 
| 
69078
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
105  | 
String (_, d) :: rest => if forall is_arg rest then SOME d else NONE  | 
| 
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
106  | 
| _ => NONE));  | 
| 
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
107  | 
|
| 
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
108  | 
fun get_binder prtabs c =  | 
| 
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
109  | 
lookup_default prtabs (Mixfix.binder_name c)  | 
| 
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
110  | 
|> get_first (fn (symbs, _, _) =>  | 
| 
69079
 
fedacfd60fdb
more liberal: detect free-form infixes as well, e.g. Orderings.ord_class.less_eq;
 
wenzelm 
parents: 
69078 
diff
changeset
 | 
111  | 
(case clean symbs of  | 
| 
 
fedacfd60fdb
more liberal: detect free-form infixes as well, e.g. Orderings.ord_class.less_eq;
 
wenzelm 
parents: 
69078 
diff
changeset
 | 
112  | 
String (_, d) :: _ => SOME d  | 
| 
69078
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
113  | 
| _ => NONE));  | 
| 
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
114  | 
|
| 
69071
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
115  | 
fun get_infix prtabs c =  | 
| 
69078
 
a5e904112ea9
more accurate syntax: e.g. avoid brackets as prefix notation;
 
wenzelm 
parents: 
69077 
diff
changeset
 | 
116  | 
lookup_default prtabs c  | 
| 
69071
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
117  | 
|> map_filter (fn (symbs, _, p) =>  | 
| 
69079
 
fedacfd60fdb
more liberal: detect free-form infixes as well, e.g. Orderings.ord_class.less_eq;
 
wenzelm 
parents: 
69078 
diff
changeset
 | 
118  | 
(case clean symbs of  | 
| 
 
fedacfd60fdb
more liberal: detect free-form infixes as well, e.g. Orderings.ord_class.less_eq;
 
wenzelm 
parents: 
69078 
diff
changeset
 | 
119  | 
[Arg p1, String (_, d), Arg p2] => SOME (p1, p2, d, p)  | 
| 
 
fedacfd60fdb
more liberal: detect free-form infixes as well, e.g. Orderings.ord_class.less_eq;
 
wenzelm 
parents: 
69078 
diff
changeset
 | 
120  | 
| [TypArg p1, String (_, d), TypArg p2] => SOME (p1, p2, d, p)  | 
| 
69071
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
121  | 
| _ => NONE))  | 
| 
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
122  | 
|> get_first (fn (p1, p2, d, p) =>  | 
| 
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
123  | 
      if p1 = p + 1 andalso p2 = p + 1 then SOME {assoc = No_Assoc, delim = d, pri = p}
 | 
| 
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
124  | 
      else if p1 = p andalso p2 = p + 1 then SOME {assoc = Left_Assoc, delim = d, pri = p}
 | 
| 
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
125  | 
      else if p1 = p + 1 andalso p2 = p then SOME {assoc = Right_Assoc, delim = d, pri = p}
 | 
| 
 
3ef82592dc22
clarified get_infix: avoid old ASCII input syntax;
 
wenzelm 
parents: 
67704 
diff
changeset
 | 
126  | 
else NONE);  | 
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
127  | 
|
| 
69077
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
128  | 
end;  | 
| 
 
11529ae45786
more approximative prefix syntax, including binder;
 
wenzelm 
parents: 
69071 
diff
changeset
 | 
129  | 
|
| 18 | 130  | 
|
| 3816 | 131  | 
(* xprod_to_fmt *)  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
132  | 
|
| 
42288
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
133  | 
fun xprod_to_fmt (Syntax_Ext.XProd (_, _, "", _)) = NONE  | 
| 
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
134  | 
| xprod_to_fmt (Syntax_Ext.XProd (_, xsymbs, const, pri)) =  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
135  | 
let  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
136  | 
fun arg (s, p) =  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
137  | 
(if s = "type" then TypArg else Arg)  | 
| 
42297
 
140f283266b7
discontinued Syntax.max_pri, which is not really a symbolic parameter;
 
wenzelm 
parents: 
42289 
diff
changeset
 | 
138  | 
(if Lexicon.is_terminal s then 1000 else p);  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
139  | 
|
| 
42288
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
140  | 
fun xsyms_to_syms (Syntax_Ext.Delim s :: xsyms) =  | 
| 
73163
 
624c2b98860a
suppress markup for literal tokens with block control symbols, for better PIDE/HTML output (see also d15fe10593ff);
 
wenzelm 
parents: 
69575 
diff
changeset
 | 
141  | 
apfst (cons (String (not (Lexicon.suppress_literal_markup s), s)))  | 
| 
49821
 
d15fe10593ff
clarified output token markup (see also bc22daeed49e);
 
wenzelm 
parents: 
49690 
diff
changeset
 | 
142  | 
(xsyms_to_syms xsyms)  | 
| 
42288
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
143  | 
| xsyms_to_syms (Syntax_Ext.Argument s_p :: xsyms) =  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
144  | 
apfst (cons (arg s_p)) (xsyms_to_syms xsyms)  | 
| 
42288
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
145  | 
| xsyms_to_syms (Syntax_Ext.Space s :: xsyms) =  | 
| 
49821
 
d15fe10593ff
clarified output token markup (see also bc22daeed49e);
 
wenzelm 
parents: 
49690 
diff
changeset
 | 
146  | 
apfst (cons (String (false, s))) (xsyms_to_syms xsyms)  | 
| 62783 | 147  | 
| xsyms_to_syms (Syntax_Ext.Bg info :: xsyms) =  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
148  | 
let  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
149  | 
val (bsyms, xsyms') = xsyms_to_syms xsyms;  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
150  | 
val (syms, xsyms'') = xsyms_to_syms xsyms';  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
151  | 
in  | 
| 62783 | 152  | 
(Block (info, bsyms) :: syms, xsyms'')  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
153  | 
end  | 
| 
42288
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
154  | 
| xsyms_to_syms (Syntax_Ext.Brk i :: xsyms) =  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
155  | 
apfst (cons (Break i)) (xsyms_to_syms xsyms)  | 
| 
42288
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
156  | 
| xsyms_to_syms (Syntax_Ext.En :: xsyms) = ([], xsyms)  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
157  | 
| xsyms_to_syms [] = ([], []);  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
158  | 
|
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
159  | 
fun nargs (Arg _ :: syms) = nargs syms + 1  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
160  | 
| nargs (TypArg _ :: syms) = nargs syms + 1  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
161  | 
| nargs (String _ :: syms) = nargs syms  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
162  | 
| nargs (Break _ :: syms) = nargs syms  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
163  | 
| nargs (Block (_, bsyms) :: syms) = nargs syms + nargs bsyms  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
164  | 
| nargs [] = 0;  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
165  | 
in  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
166  | 
(case xsyms_to_syms xsymbs of  | 
| 15531 | 167  | 
(symbs, []) => SOME (const, (symbs, nargs symbs, pri))  | 
| 
37852
 
a902f158b4fc
eliminated old-style sys_error/SYS_ERROR in favour of exception Fail -- after careful checking that there is no overlap with existing handling of that;
 
wenzelm 
parents: 
37216 
diff
changeset
 | 
168  | 
| _ => raise Fail "Unbalanced pretty-printing blocks")  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
169  | 
end;  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
170  | 
|
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
171  | 
|
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
172  | 
(* empty, extend, merge prtabs *)  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
173  | 
|
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
174  | 
val empty_prtabs = [];  | 
| 18 | 175  | 
|
| 
25393
 
0856e0141062
replaced extend_prtabs by update_prtabs (absorb duplicates);
 
wenzelm 
parents: 
25386 
diff
changeset
 | 
176  | 
fun update_prtabs mode xprods prtabs =  | 
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
177  | 
let  | 
| 
19482
 
9f11af8f7ef9
tuned basic list operators (flat, maps, map_filter);
 
wenzelm 
parents: 
19374 
diff
changeset
 | 
178  | 
val fmts = map_filter xprod_to_fmt xprods;  | 
| 
25393
 
0856e0141062
replaced extend_prtabs by update_prtabs (absorb duplicates);
 
wenzelm 
parents: 
25386 
diff
changeset
 | 
179  | 
val tab' = fold (Symtab.update_list (op =)) fmts (mode_tab prtabs mode);  | 
| 25386 | 180  | 
in AList.update (op =) (mode, tab') prtabs end;  | 
| 15753 | 181  | 
|
| 25386 | 182  | 
fun remove_prtabs mode xprods prtabs =  | 
183  | 
let  | 
|
184  | 
val tab = mode_tab prtabs mode;  | 
|
| 
42288
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
185  | 
val fmts = map_filter (fn xprod as Syntax_Ext.XProd (_, _, c, _) =>  | 
| 25386 | 186  | 
if null (Symtab.lookup_list tab c) then NONE  | 
187  | 
else xprod_to_fmt xprod) xprods;  | 
|
| 
25393
 
0856e0141062
replaced extend_prtabs by update_prtabs (absorb duplicates);
 
wenzelm 
parents: 
25386 
diff
changeset
 | 
188  | 
val tab' = fold (Symtab.remove_list (op =)) fmts tab;  | 
| 
 
0856e0141062
replaced extend_prtabs by update_prtabs (absorb duplicates);
 
wenzelm 
parents: 
25386 
diff
changeset
 | 
189  | 
in AList.update (op =) (mode, tab') prtabs end;  | 
| 0 | 190  | 
|
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
191  | 
fun merge_prtabs prtabs1 prtabs2 =  | 
| 
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
192  | 
let  | 
| 
19046
 
bc5c6c9b114e
removed distinct, renamed gen_distinct to distinct;
 
wenzelm 
parents: 
18977 
diff
changeset
 | 
193  | 
val modes = distinct (op =) (map fst (prtabs1 @ prtabs2));  | 
| 18957 | 194  | 
fun merge m = (m, Symtab.merge_list (op =) (mode_tab prtabs1 m, mode_tab prtabs2 m));  | 
| 12292 | 195  | 
in map merge modes end;  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
196  | 
|
| 0 | 197  | 
|
198  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
199  | 
(** pretty term or typ asts **)  | 
| 0 | 200  | 
|
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
201  | 
fun is_chain [Block (_, pr)] = is_chain pr  | 
| 
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
202  | 
| is_chain [Arg _] = true  | 
| 
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
203  | 
| is_chain _ = false;  | 
| 
506
 
e0ca460d6e51
improved show_brackets again - Trueprop does not create () any more.
 
nipkow 
parents: 
505 
diff
changeset
 | 
204  | 
|
| 69575 | 205  | 
val pretty_priority = Config.declare_int ("Syntax.pretty_priority", \<^here>) (K 0);
 | 
| 40956 | 206  | 
|
| 49655 | 207  | 
fun pretty type_mode curried ctxt tabs trf markup_trans markup_extern ast0 =  | 
| 0 | 208  | 
let  | 
| 
39137
 
ccb53edd59f0
turned show_brackets into proper configuration option;
 
wenzelm 
parents: 
39134 
diff
changeset
 | 
209  | 
val show_brackets = Config.get ctxt show_brackets;  | 
| 
35429
 
afa8cf9e63d8
authentic syntax for classes and type constructors;
 
wenzelm 
parents: 
35262 
diff
changeset
 | 
210  | 
|
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
211  | 
(*default applications: prefix / postfix*)  | 
| 
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
212  | 
val appT =  | 
| 42284 | 213  | 
if type_mode then Syntax_Trans.tappl_ast_tr'  | 
214  | 
else if curried then Syntax_Trans.applC_ast_tr'  | 
|
215  | 
else Syntax_Trans.appl_ast_tr';  | 
|
| 18 | 216  | 
|
| 
23630
 
bc22daeed49e
pretty: markup for syntax/name of authentic consts;
 
wenzelm 
parents: 
23615 
diff
changeset
 | 
217  | 
fun synT _ ([], args) = ([], args)  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
218  | 
| synT m (Arg p :: symbs, t :: args) =  | 
| 
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
219  | 
let val (Ts, args') = synT m (symbs, args);  | 
| 0 | 220  | 
in (astT (t, p) @ Ts, args') end  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
221  | 
| synT m (TypArg p :: symbs, t :: args) =  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
222  | 
let  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
223  | 
val (Ts, args') = synT m (symbs, args);  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
224  | 
in  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
225  | 
if type_mode then (astT (t, p) @ Ts, args')  | 
| 40956 | 226  | 
else  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
227  | 
(pretty true curried (Config.put pretty_priority p ctxt)  | 
| 49655 | 228  | 
tabs trf markup_trans markup_extern t @ Ts, args')  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
62 
diff
changeset
 | 
229  | 
end  | 
| 
49821
 
d15fe10593ff
clarified output token markup (see also bc22daeed49e);
 
wenzelm 
parents: 
49690 
diff
changeset
 | 
230  | 
| synT m (String (do_mark, s) :: symbs, args) =  | 
| 
47850
 
c638127b4653
avoid interference of markup for literal tokens, which may contain slightly odd \<^bsub> \<^esub> counted as pseudo-markup (especially relevant for HTML output, e.g. of thm power3_eq_cube);
 
wenzelm 
parents: 
42382 
diff
changeset
 | 
231  | 
let  | 
| 
 
c638127b4653
avoid interference of markup for literal tokens, which may contain slightly odd \<^bsub> \<^esub> counted as pseudo-markup (especially relevant for HTML output, e.g. of thm power3_eq_cube);
 
wenzelm 
parents: 
42382 
diff
changeset
 | 
232  | 
val (Ts, args') = synT m (symbs, args);  | 
| 
 
c638127b4653
avoid interference of markup for literal tokens, which may contain slightly odd \<^bsub> \<^esub> counted as pseudo-markup (especially relevant for HTML output, e.g. of thm power3_eq_cube);
 
wenzelm 
parents: 
42382 
diff
changeset
 | 
233  | 
val T =  | 
| 
49821
 
d15fe10593ff
clarified output token markup (see also bc22daeed49e);
 
wenzelm 
parents: 
49690 
diff
changeset
 | 
234  | 
if do_mark  | 
| 
73163
 
624c2b98860a
suppress markup for literal tokens with block control symbols, for better PIDE/HTML output (see also d15fe10593ff);
 
wenzelm 
parents: 
69575 
diff
changeset
 | 
235  | 
then Pretty.marks_str (m @ Lexicon.literal_markup s, s)  | 
| 
49821
 
d15fe10593ff
clarified output token markup (see also bc22daeed49e);
 
wenzelm 
parents: 
49690 
diff
changeset
 | 
236  | 
else Pretty.str s;  | 
| 
47850
 
c638127b4653
avoid interference of markup for literal tokens, which may contain slightly odd \<^bsub> \<^esub> counted as pseudo-markup (especially relevant for HTML output, e.g. of thm power3_eq_cube);
 
wenzelm 
parents: 
42382 
diff
changeset
 | 
237  | 
in (T :: Ts, args') end  | 
| 62789 | 238  | 
      | synT m (Block ({markup, consistent, unbreakable, indent}, bsymbs) :: symbs, args) =
 | 
| 0 | 239  | 
let  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
240  | 
val (bTs, args') = synT m (bsymbs, args);  | 
| 
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
241  | 
val (Ts, args'') = synT m (symbs, args');  | 
| 62789 | 242  | 
val T =  | 
243  | 
              Pretty.markup_block {markup = markup, consistent = consistent, indent = indent} bTs
 | 
|
244  | 
|> unbreakable ? Pretty.unbreakable;  | 
|
| 
14837
 
827c68f8267c
added pp_show_brackets; support unbreakable blocks;
 
wenzelm 
parents: 
14783 
diff
changeset
 | 
245  | 
in (T :: Ts, args'') end  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
246  | 
| synT m (Break i :: symbs, args) =  | 
| 
14837
 
827c68f8267c
added pp_show_brackets; support unbreakable blocks;
 
wenzelm 
parents: 
14783 
diff
changeset
 | 
247  | 
let  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
248  | 
val (Ts, args') = synT m (symbs, args);  | 
| 
14837
 
827c68f8267c
added pp_show_brackets; support unbreakable blocks;
 
wenzelm 
parents: 
14783 
diff
changeset
 | 
249  | 
val T = if i < 0 then Pretty.fbrk else Pretty.brk i;  | 
| 
 
827c68f8267c
added pp_show_brackets; support unbreakable blocks;
 
wenzelm 
parents: 
14783 
diff
changeset
 | 
250  | 
in (T :: Ts, args') end  | 
| 0 | 251  | 
|
| 
42297
 
140f283266b7
discontinued Syntax.max_pri, which is not really a symbolic parameter;
 
wenzelm 
parents: 
42289 
diff
changeset
 | 
252  | 
and parT m (pr, args, p, p': int) = #1 (synT m  | 
| 62783 | 253  | 
(if p > p' orelse (show_brackets andalso p' <> 1000 andalso not (is_chain pr)) then  | 
254  | 
            [Block (Syntax_Ext.block_indent 1, String (false, "(") :: pr @ [String (false, ")")])]
 | 
|
| 
42288
 
2074b31650e6
discontinued special treatment of structure Syntax_Ext (formerly Syn_Ext);
 
wenzelm 
parents: 
42284 
diff
changeset
 | 
255  | 
else pr, args))  | 
| 0 | 256  | 
|
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
257  | 
and atomT a = Pretty.marks_str (markup_extern a)  | 
| 
19374
 
ae4a225e0c1f
pretty: late externing of consts (support authentic syntax);
 
wenzelm 
parents: 
19046 
diff
changeset
 | 
258  | 
|
| 
 
ae4a225e0c1f
pretty: late externing of consts (support authentic syntax);
 
wenzelm 
parents: 
19046 
diff
changeset
 | 
259  | 
and prefixT (_, a, [], _) = [atomT a]  | 
| 
16611
 
edb368e2878f
proper treatment of advanced trfuns: pass thy argument;
 
wenzelm 
parents: 
15973 
diff
changeset
 | 
260  | 
| prefixT (c, _, args, p) = astT (appT (c, args), p)  | 
| 0 | 261  | 
|
| 18 | 262  | 
and splitT 0 ([x], ys) = (x, ys)  | 
| 5691 | 263  | 
| splitT 0 (rev_xs, ys) = (Ast.Appl (rev rev_xs), ys)  | 
| 18 | 264  | 
| splitT n (rev_xs, y :: ys) = splitT (n - 1) (y :: rev_xs, ys)  | 
265  | 
||
| 0 | 266  | 
and combT (tup as (c, a, args, p)) =  | 
267  | 
let  | 
|
268  | 
val nargs = length args;  | 
|
| 18 | 269  | 
|
| 2701 | 270  | 
(*find matching table entry, or print as prefix / postfix*)  | 
| 6280 | 271  | 
fun prnt ([], []) = prefixT tup  | 
| 18957 | 272  | 
| prnt ([], tb :: tbs) = prnt (Symtab.lookup_list tb a, tbs)  | 
| 6280 | 273  | 
| prnt ((pr, n, p') :: prnps, tbs) =  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
274  | 
if nargs = n then parT (#1 (markup_extern a)) (pr, args, p, p')  | 
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
275  | 
else if nargs > n andalso not type_mode then  | 
| 
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
276  | 
astT (appT (splitT n ([c], args)), p)  | 
| 6280 | 277  | 
else prnt (prnps, tbs);  | 
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
278  | 
in  | 
| 49655 | 279  | 
(case markup_trans a args of  | 
| 
26707
 
ddf6bab64b96
token translations: context dependent, result Pretty.T;
 
wenzelm 
parents: 
25393 
diff
changeset
 | 
280  | 
SOME prt => [prt]  | 
| 42254 | 281  | 
| NONE => astT (trf a ctxt args, p) handle Match => prnt ([], tabs))  | 
| 
2200
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
282  | 
end  | 
| 
 
2538977e94fa
added print_mode: string list ref (order of printer tables);
 
wenzelm 
parents: 
1509 
diff
changeset
 | 
283  | 
|
| 5691 | 284  | 
and astT (c as Ast.Constant a, p) = combT (c, a, [], p)  | 
| 
42267
 
9566078ad905
simplified printer context: uniform externing and static token translations;
 
wenzelm 
parents: 
42262 
diff
changeset
 | 
285  | 
| astT (ast as Ast.Variable _, _) = [Ast.pretty_ast ast]  | 
| 6280 | 286  | 
| astT (Ast.Appl ((c as Ast.Constant a) :: (args as _ :: _)), p) = combT (c, a, args, p)  | 
| 5691 | 287  | 
| astT (Ast.Appl (f :: (args as _ :: _)), p) = astT (appT (f, args), p)  | 
288  | 
      | astT (ast as Ast.Appl _, _) = raise Ast.AST ("pretty: malformed ast", [ast]);
 | 
|
| 40956 | 289  | 
in astT (ast0, Config.get ctxt pretty_priority) end;  | 
| 0 | 290  | 
|
291  | 
||
292  | 
(* pretty_term_ast *)  | 
|
293  | 
||
| 49655 | 294  | 
fun pretty_term_ast curried ctxt prtabs trf markup_trans extern ast =  | 
295  | 
pretty false curried ctxt (mode_tabs prtabs (print_mode_value ())) trf markup_trans extern ast;  | 
|
| 0 | 296  | 
|
297  | 
||
298  | 
(* pretty_typ_ast *)  | 
|
299  | 
||
| 49655 | 300  | 
fun pretty_typ_ast ctxt prtabs trf markup_trans extern ast =  | 
301  | 
pretty true false ctxt (mode_tabs prtabs (print_mode_value ())) trf markup_trans extern ast;  | 
|
| 0 | 302  | 
|
303  | 
end;  | 
|
| 
42289
 
dafae095d733
discontinued special status of structure Printer;
 
wenzelm 
parents: 
42288 
diff
changeset
 | 
304  | 
|
| 
 
dafae095d733
discontinued special status of structure Printer;
 
wenzelm 
parents: 
42288 
diff
changeset
 | 
305  | 
structure Basic_Printer: BASIC_PRINTER = Printer;  | 
| 
 
dafae095d733
discontinued special status of structure Printer;
 
wenzelm 
parents: 
42288 
diff
changeset
 | 
306  | 
open Basic_Printer;  | 
| 
 
dafae095d733
discontinued special status of structure Printer;
 
wenzelm 
parents: 
42288 
diff
changeset
 | 
307  |