src/Pure/Isar/keyword.ML
changeset 74567 40910c47d7a1
parent 74566 8e0f0317e266
child 74671 df12779c3ce8
equal deleted inserted replaced
74566:8e0f0317e266 74567:40910c47d7a1
    45   val document_heading_spec: spec
    45   val document_heading_spec: spec
    46   val document_body_spec: spec
    46   val document_body_spec: spec
    47   type keywords
    47   type keywords
    48   val minor_keywords: keywords -> Scan.lexicon
    48   val minor_keywords: keywords -> Scan.lexicon
    49   val major_keywords: keywords -> Scan.lexicon
    49   val major_keywords: keywords -> Scan.lexicon
    50   val no_command_keywords: keywords -> keywords
       
    51   val empty_keywords: keywords
    50   val empty_keywords: keywords
    52   val merge_keywords: keywords * keywords -> keywords
    51   val merge_keywords: keywords * keywords -> keywords
    53   val add_keywords: ((string * Position.T) * spec) list -> keywords -> keywords
    52   val add_keywords: ((string * Position.T) * spec) list -> keywords -> keywords
    54   val add_minor_keywords: string list -> keywords -> keywords
    53   val add_minor_keywords: string list -> keywords -> keywords
    55   val add_major_keywords: string list -> keywords -> keywords
    54   val add_major_keywords: string list -> keywords -> keywords
       
    55   val no_major_keywords: keywords -> keywords
    56   val is_keyword: keywords -> string -> bool
    56   val is_keyword: keywords -> string -> bool
    57   val is_command: keywords -> string -> bool
    57   val is_command: keywords -> string -> bool
    58   val is_literal: keywords -> string -> bool
    58   val is_literal: keywords -> string -> bool
    59   val dest_commands: keywords -> string list
    59   val dest_commands: keywords -> string list
    60   val command_markup: keywords -> string -> Markup.T option
    60   val command_markup: keywords -> string -> Markup.T option
   169   Keywords {minor = minor, major = major, commands = commands};
   169   Keywords {minor = minor, major = major, commands = commands};
   170 
   170 
   171 fun map_keywords f (Keywords {minor, major, commands}) =
   171 fun map_keywords f (Keywords {minor, major, commands}) =
   172   make_keywords (f (minor, major, commands));
   172   make_keywords (f (minor, major, commands));
   173 
   173 
   174 val no_command_keywords =
       
   175   map_keywords (fn (minor, _, _) => (minor, Scan.empty_lexicon, Symtab.empty));
       
   176 
       
   177 
   174 
   178 (* build keywords *)
   175 (* build keywords *)
   179 
   176 
   180 val empty_keywords =
   177 val empty_keywords =
   181   make_keywords (Scan.empty_lexicon, Scan.empty_lexicon, Symtab.empty);
   178   make_keywords (Scan.empty_lexicon, Scan.empty_lexicon, Symtab.empty);
   205   add_keywords o map (fn name => ((name, Position.none), no_spec));
   202   add_keywords o map (fn name => ((name, Position.none), no_spec));
   206 
   203 
   207 val add_major_keywords =
   204 val add_major_keywords =
   208   add_keywords o map (fn name => ((name, Position.none), (diag, [])));
   205   add_keywords o map (fn name => ((name, Position.none), (diag, [])));
   209 
   206 
       
   207 val no_major_keywords =
       
   208   map_keywords (fn (minor, _, _) => (minor, Scan.empty_lexicon, Symtab.empty));
       
   209 
   210 
   210 
   211 (* keyword status *)
   211 (* keyword status *)
   212 
   212 
   213 fun is_keyword keywords s = Scan.is_literal (minor_keywords keywords) (Symbol.explode s);
   213 fun is_keyword keywords s = Scan.is_literal (minor_keywords keywords) (Symbol.explode s);
   214 fun is_command (Keywords {commands, ...}) = Symtab.defined commands;
   214 fun is_command (Keywords {commands, ...}) = Symtab.defined commands;