src/Pure/General/scan.scala
changeset 55980 36fd4981c119
parent 55510 1585a65aad64
child 56663 2d09b437c168
equal deleted inserted replaced
55979:06cb126f30ba 55980:36fd4981c119
     5 */
     5 */
     6 
     6 
     7 package isabelle
     7 package isabelle
     8 
     8 
     9 
     9 
       
    10 import scala.annotation.tailrec
    10 import scala.collection.{IndexedSeq, TraversableOnce}
    11 import scala.collection.{IndexedSeq, TraversableOnce}
    11 import scala.collection.immutable.PagedSeq
    12 import scala.collection.immutable.PagedSeq
    12 import scala.util.parsing.input.{OffsetPosition, Position => InputPosition, Reader}
    13 import scala.util.parsing.input.{OffsetPosition, Position => InputPosition, Reader}
    13 import scala.util.parsing.combinator.RegexParsers
    14 import scala.util.parsing.combinator.RegexParsers
    14 
    15 
   321           if (s.isEmpty) content(tr, res) else content(tr, s :: res) })
   322           if (s.isEmpty) content(tr, res) else content(tr, s :: res) })
   322 
   323 
   323     private def lookup(str: CharSequence): Option[(Boolean, Lexicon.Tree)] =
   324     private def lookup(str: CharSequence): Option[(Boolean, Lexicon.Tree)] =
   324     {
   325     {
   325       val len = str.length
   326       val len = str.length
   326       def look(tree: Lexicon.Tree, tip: Boolean, i: Int): Option[(Boolean, Lexicon.Tree)] =
   327       @tailrec def look(tree: Lexicon.Tree, tip: Boolean, i: Int): Option[(Boolean, Lexicon.Tree)] =
   327       {
   328       {
   328         if (i < len) {
   329         if (i < len) {
   329           tree.branches.get(str.charAt(i)) match {
   330           tree.branches.get(str.charAt(i)) match {
   330             case Some((s, tr)) => look(tr, !s.isEmpty, i + 1)
   331             case Some((s, tr)) => look(tr, !s.isEmpty, i + 1)
   331             case None => None
   332             case None => None
   332           }
   333           }
   333         } else Some(tip, tree)
   334         }
       
   335         else Some(tip, tree)
   334       }
   336       }
   335       look(rep, false, 0)
   337       look(rep, false, 0)
   336     }
   338     }
   337 
   339 
   338     def completions(str: CharSequence): List[String] =
   340     def completions(str: CharSequence): List[String] =