80 val args_of_src: src -> T list |
80 val args_of_src: src -> T list |
81 val checked_src: src -> bool |
81 val checked_src: src -> bool |
82 val check_src: Proof.context -> (Proof.context -> 'a Name_Space.table) -> src -> src * 'a |
82 val check_src: Proof.context -> (Proof.context -> 'a Name_Space.table) -> src -> src * 'a |
83 val pretty_src: Proof.context -> src -> Pretty.T |
83 val pretty_src: Proof.context -> src -> Pretty.T |
84 val ident_or_symbolic: string -> bool |
84 val ident_or_symbolic: string -> bool |
85 val source': bool -> Keyword.keywords -> (Symbol_Pos.T, 'a) Source.source -> |
|
86 (T, (Symbol_Pos.T, 'a) Source.source) Source.source |
|
87 val source_proper: (T, 'a) Source.source -> (T, (T, 'a) Source.source) Source.source |
85 val source_proper: (T, 'a) Source.source -> (T, (T, 'a) Source.source) Source.source |
88 val source: Keyword.keywords -> |
86 val source: Keyword.keywords -> |
89 Position.T -> (Symbol.symbol, 'a) Source.source -> (T, |
87 Position.T -> (Symbol.symbol, 'a) Source.source -> (T, |
90 (Symbol_Pos.T, Position.T * (Symbol.symbol, 'a) Source.source) Source.source) Source.source |
88 (Symbol_Pos.T, Position.T * (Symbol.symbol, 'a) Source.source) Source.source) Source.source |
91 val source_strict: Keyword.keywords -> |
89 val source_strict: Keyword.keywords -> |
92 Position.T -> (Symbol.symbol, 'a) Source.source -> (T, |
90 Position.T -> (Symbol.symbol, 'a) Source.source -> (T, |
93 (Symbol_Pos.T, Position.T * (Symbol.symbol, 'a) Source.source) Source.source) Source.source |
91 (Symbol_Pos.T, Position.T * (Symbol.symbol, 'a) Source.source) Source.source) Source.source |
94 val read_cartouche: Symbol_Pos.T list -> T |
92 val read_cartouche: Symbol_Pos.T list -> T |
95 val tokenize: Keyword.keywords -> Symbol_Pos.T list -> T list |
93 val tokenize: Keyword.keywords -> {strict: bool} -> Symbol_Pos.T list -> T list |
96 val explode: Keyword.keywords -> Position.T -> string -> T list |
94 val explode: Keyword.keywords -> Position.T -> string -> T list |
97 val explode0: Keyword.keywords -> string -> T list |
95 val explode0: Keyword.keywords -> string -> T list |
98 val print_name: Keyword.keywords -> string -> string |
96 val print_name: Keyword.keywords -> string -> string |
99 val make: (int * int) * string -> Position.T -> T * Position.T |
97 val make: (int * int) * string -> Position.T -> T * Position.T |
100 val make_string: string * Position.T -> T |
98 val make_string: string * Position.T -> T |
650 Scan.one (Symbol.not_eof o Symbol_Pos.symbol) >> single) |
648 Scan.one (Symbol.not_eof o Symbol_Pos.symbol) >> single) |
651 >> (single o token (Error msg)); |
649 >> (single o token (Error msg)); |
652 |
650 |
653 in |
651 in |
654 |
652 |
655 fun source' strict keywords = |
653 fun make_source keywords {strict} = |
656 let |
654 let |
657 val scan_strict = Scan.bulk (scan_token keywords); |
655 val scan_strict = Scan.bulk (scan_token keywords); |
658 val scan = if strict then scan_strict else Scan.recover scan_strict recover; |
656 val scan = if strict then scan_strict else Scan.recover scan_strict recover; |
659 in Source.source Symbol_Pos.stopper scan end; |
657 in Source.source Symbol_Pos.stopper scan end; |
660 |
658 |
661 fun source keywords pos src = Symbol_Pos.source pos src |> source' false keywords; |
659 fun source keywords pos src = |
662 fun source_strict keywords pos src = Symbol_Pos.source pos src |> source' true keywords; |
660 Symbol_Pos.source pos src |> make_source keywords {strict = false}; |
|
661 |
|
662 fun source_strict keywords pos src = |
|
663 Symbol_Pos.source pos src |> make_source keywords {strict = true}; |
663 |
664 |
664 fun read_cartouche syms = |
665 fun read_cartouche syms = |
665 (case Scan.read Symbol_Pos.stopper (scan_cartouche >> token_range Cartouche) syms of |
666 (case Scan.read Symbol_Pos.stopper (scan_cartouche >> token_range Cartouche) syms of |
666 SOME tok => tok |
667 SOME tok => tok |
667 | NONE => error ("Single cartouche expected" ^ Position.here (#1 (Symbol_Pos.range syms)))); |
668 | NONE => error ("Single cartouche expected" ^ Position.here (#1 (Symbol_Pos.range syms)))); |
669 end; |
670 end; |
670 |
671 |
671 |
672 |
672 (* explode *) |
673 (* explode *) |
673 |
674 |
674 fun tokenize keywords syms = |
675 fun tokenize keywords strict syms = |
675 Source.of_list syms |> source' false keywords |> Source.exhaust; |
676 Source.of_list syms |> make_source keywords strict |> Source.exhaust; |
676 |
677 |
677 fun explode keywords pos text = |
678 fun explode keywords pos text = |
678 Symbol_Pos.explode (text, pos) |> tokenize keywords; |
679 Symbol_Pos.explode (text, pos) |> tokenize keywords {strict = false}; |
679 |
680 |
680 fun explode0 keywords = explode keywords Position.none; |
681 fun explode0 keywords = explode keywords Position.none; |
681 |
682 |
682 |
683 |
683 (* print name in parsable form *) |
684 (* print name in parsable form *) |