src/Tools/Code/code_printer.ML
changeset 59103 788db6d6b8a5
parent 58854 b979c781c2db
child 61268 abe08fb15a12
--- a/src/Tools/Code/code_printer.ML	Thu Dec 04 16:51:54 2014 +0100
+++ b/src/Tools/Code/code_printer.ML	Thu Dec 04 16:51:54 2014 +0100
@@ -88,6 +88,18 @@
   val gen_print_bind: (thm option -> var_ctxt -> fixity -> iterm -> Pretty.T)
     -> thm option -> fixity
     -> iterm -> var_ctxt -> Pretty.T * var_ctxt
+
+  type identifiers
+  type printings
+  type data
+  val empty_data: data
+  val map_data: (string list * identifiers * printings
+    -> string list * identifiers * printings)
+    -> data -> data
+  val merge_data: data * data -> data
+  val the_reserved: data -> string list;
+  val the_identifiers: data -> identifiers;
+  val the_printings: data -> printings;
 end;
 
 structure Code_Printer : CODE_PRINTER =
@@ -408,4 +420,30 @@
 val parse_const_syntax =
   parse_mixfix >> syntax_of_mixfix plain_const_syntax simple_const_syntax fst;
 
+
+(** custom data structure **)
+
+type identifiers = (string list * string, string list * string, string list * string, string list * string,
+  string list * string, string list * string) Code_Symbol.data;
+type printings = (const_syntax, tyco_syntax, string, unit, unit,
+    (Pretty.T * string list)) Code_Symbol.data;
+
+datatype data = Data of { reserved: string list, identifiers: identifiers,
+  printings: printings };
+
+fun make_data (reserved, identifiers, printings) =
+  Data { reserved = reserved, identifiers = identifiers, printings = printings };
+val empty_data = make_data ([], Code_Symbol.empty_data, Code_Symbol.empty_data);
+fun map_data f (Data { reserved, identifiers, printings }) =
+  make_data (f (reserved, identifiers, printings));
+fun merge_data (Data { reserved = reserved1, identifiers = identifiers1, printings = printings1 },
+    Data { reserved = reserved2, identifiers = identifiers2, printings = printings2 }) =
+  make_data (merge (op =) (reserved1, reserved2),
+    Code_Symbol.merge_data (identifiers1, identifiers2), Code_Symbol.merge_data (printings1, printings2));
+
+fun the_reserved (Data { reserved, ... }) = reserved;
+fun the_identifiers (Data { identifiers , ... }) = identifiers;
+fun the_printings (Data { printings, ... }) = printings;
+
+
 end; (*struct*)