equal
deleted
inserted
replaced
6 |
6 |
7 package isabelle |
7 package isabelle |
8 |
8 |
9 |
9 |
10 import scala.collection.mutable |
10 import scala.collection.mutable |
11 import scala.util.parsing.input.{Reader, CharSequenceReader} |
|
12 import scala.util.parsing.combinator.RegexParsers |
11 import scala.util.parsing.combinator.RegexParsers |
|
12 import scala.util.parsing.input.Reader |
13 |
13 |
14 |
14 |
15 object Bibtex |
15 object Bibtex |
16 { |
16 { |
17 /** content **/ |
17 /** content **/ |
381 |
381 |
382 |
382 |
383 /* parse */ |
383 /* parse */ |
384 |
384 |
385 def parse(input: CharSequence): List[Chunk] = |
385 def parse(input: CharSequence): List[Chunk] = |
386 { |
386 Parsers.parseAll(Parsers.rep(Parsers.chunk), Scan.char_reader(input)) match { |
387 val in: Reader[Char] = new CharSequenceReader(input) |
|
388 Parsers.parseAll(Parsers.rep(Parsers.chunk), in) match { |
|
389 case Parsers.Success(result, _) => result |
387 case Parsers.Success(result, _) => result |
390 case _ => error("Unexpected failure to parse input:\n" + input.toString) |
388 case _ => error("Unexpected failure to parse input:\n" + input.toString) |
391 } |
389 } |
392 } |
|
393 |
390 |
394 def parse_line(input: CharSequence, context: Line_Context): (List[Chunk], Line_Context) = |
391 def parse_line(input: CharSequence, context: Line_Context): (List[Chunk], Line_Context) = |
395 { |
392 { |
396 var in: Reader[Char] = new CharSequenceReader(input) |
393 var in: Reader[Char] = Scan.char_reader(input) |
397 val chunks = new mutable.ListBuffer[Chunk] |
394 val chunks = new mutable.ListBuffer[Chunk] |
398 var ctxt = context |
395 var ctxt = context |
399 while (!in.atEnd) { |
396 while (!in.atEnd) { |
400 Parsers.parse(Parsers.chunk_line(ctxt), in) match { |
397 Parsers.parse(Parsers.chunk_line(ctxt), in) match { |
401 case Parsers.Success((x, c), rest) => chunks += x; ctxt = c; in = rest |
398 case Parsers.Success((x, c), rest) => chunks += x; ctxt = c; in = rest |