src/Pure/Tools/bibtex.scala
changeset 64824 330ec9bc4b75
parent 60215 5fb4990dfc73
child 64828 e837f6bf653c
equal deleted inserted replaced
64823:78df3d65a1cc 64824:330ec9bc4b75
     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