equal
deleted
inserted
replaced
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] = |