212 case bad => error(bad.toString) |
212 case bad => error(bad.toString) |
213 } |
213 } |
214 } |
214 } |
215 |
215 |
216 def read(node_name: Document.Node.Name, reader: Reader[Char], |
216 def read(node_name: Document.Node.Name, reader: Reader[Char], |
217 start: Token.Pos = Token.Pos.none, |
217 command: Boolean = true, |
218 strict: Boolean = true): Thy_Header = |
218 strict: Boolean = true): Thy_Header = |
219 { |
219 { |
220 val (_, tokens0) = read_tokens(reader, true) |
220 val (_, tokens0) = read_tokens(reader, true) |
221 val text = Scan.reader_decode_utf8(reader, Token.implode(tokens0)) |
221 val text = Scan.reader_decode_utf8(reader, Token.implode(tokens0)) |
222 |
222 |
223 val (drop_tokens, tokens) = read_tokens(Scan.char_reader(text), strict) |
223 val (skip_tokens, tokens) = read_tokens(Scan.char_reader(text), strict) |
224 val pos = (start /: drop_tokens)(_.advance(_)) |
224 val pos = |
|
225 if (command) Token.Pos.command |
|
226 else (Token.Pos.file(node_name.node) /: skip_tokens)(_ advance _) |
225 |
227 |
226 Parser.parse_header(tokens, pos).check(node_name) |
228 Parser.parse_header(tokens, pos).check(node_name) |
227 } |
229 } |
228 } |
230 } |
229 |
231 |