src/Pure/General/markup.ML
changeset 23704 18d6ee425689
parent 23695 6c4662bb4862
child 23719 ccd9cb15c062
equal deleted inserted replaced
23703:1b6a2c119151 23704:18d6ee425689
     7 
     7 
     8 signature MARKUP =
     8 signature MARKUP =
     9 sig
     9 sig
    10   type property = string * string
    10   type property = string * string
    11   type T = string * property list
    11   type T = string * property list
       
    12   val none: T
       
    13   val properties: (string * string) list -> T -> T
    12   val nameN: string
    14   val nameN: string
    13   val kindN: string
    15   val kindN: string
    14   val none: T
       
    15   val properties: (string * string) list -> T -> T
       
    16   val lineN: string
    16   val lineN: string
    17   val fileN: string
    17   val fileN: string
    18   val positionN: string val position: T
    18   val positionN: string val position: T
    19   val indentN: string
    19   val indentN: string
       
    20   val blockN: string val block: int -> T
    20   val widthN: string
    21   val widthN: string
    21   val blockN: string val block: int -> T
       
    22   val breakN: string val break: int -> T
    22   val breakN: string val break: int -> T
    23   val fbreakN: string val fbreak: T
    23   val fbreakN: string val fbreak: T
    24   val classN: string val class: string -> T
    24   val classN: string val class: string -> T
    25   val tyconN: string val tycon: string -> T
    25   val tyconN: string val tycon: string -> T
    26   val constN: string val const: string -> T
    26   val constN: string val const: string -> T
    30   val termN: string val term: T
    30   val termN: string val term: T
    31   val keywordN: string val keyword: string -> T
    31   val keywordN: string val keyword: string -> T
    32   val commandN: string val command: string -> T
    32   val commandN: string val command: string -> T
    33   val promptN: string val prompt: T
    33   val promptN: string val prompt: T
    34   val stateN: string val state: T
    34   val stateN: string val state: T
    35   val no_stateN: string val no_state: T
       
    36   val subgoalN: string val subgoal: T
    35   val subgoalN: string val subgoal: T
       
    36   val default_output: T -> output * output
       
    37   val output: T -> output * output
       
    38   val add_mode: string -> (T -> output * output) -> unit
    37 end;
    39 end;
    38 
    40 
    39 structure Markup: MARKUP =
    41 structure Markup: MARKUP =
    40 struct
    42 struct
    41 
    43 
    99 
   101 
   100 (* toplevel *)
   102 (* toplevel *)
   101 
   103 
   102 val (promptN, prompt) = markup "prompt";
   104 val (promptN, prompt) = markup "prompt";
   103 val (stateN, state) = markup "state";
   105 val (stateN, state) = markup "state";
   104 val (no_stateN, no_state) = markup "no_state";
       
   105 val (subgoalN, subgoal) = markup "subgoal";
   106 val (subgoalN, subgoal) = markup "subgoal";
   106 
   107 
       
   108 
       
   109 (* print mode operations *)
       
   110 
       
   111 fun default_output (_: T) = ("", "");
       
   112 
       
   113 local
       
   114   val default = {output = default_output};
       
   115   val modes = ref (Symtab.make [("", default)]);
       
   116 in
       
   117   fun add_mode name output =
       
   118     change modes (Symtab.update_new (name, {output = output}));
       
   119   fun get_mode () =
       
   120     the_default default (Library.get_first (Symtab.lookup (! modes)) (! print_mode));
   107 end;
   121 end;
       
   122 
       
   123 fun output m =
       
   124   if m = none then ("", "")
       
   125   else #output (get_mode ()) m;
       
   126 
       
   127 end;