(*  Title:      Pure/Thy/thy_syn.ML
    ID:         $Id$
    Author:     Markus Wenzel, TU Muenchen
Syntax for thy files.
*)
signature THY_SYN =
sig
  val add_syntax: string list ->
    (string * (ThyParse.token list -> (string * string) * ThyParse.token list)) list
    -> unit
  val parse: string -> string -> string
end;
structure ThySyn: THY_SYN =
struct
(* current syntax *)
val keywords = ref ThyParse.pure_keywords;
val sections = ref ThyParse.pure_sections;
fun make_syntax () =
  ThyParse.make_syntax (! keywords) (!sections);
val syntax = ref (make_syntax ());
(* augment syntax *)
fun add_syntax keys sects =
 (keywords := (keys union ! keywords);
  sections := sects @ ! sections;
  syntax := make_syntax ());
(* parse *)
fun parse name txt =
  ThyParse.parse_thy (! syntax) name txt;
end;