add ability to hide a token until it is explicitly started

This commit is contained in:
Mark Harrah 2011-07-24 22:35:27 -04:00
parent 00c41ae59a
commit d4c76b0d0e
1 changed files with 9 additions and 7 deletions

View File

@ -329,11 +329,12 @@ trait ParserMain
success(seen.mkString) success(seen.mkString)
} }
def token[T](t: Parser[T]): Parser[T] = token(t, "", true) def token[T](t: Parser[T]): Parser[T] = token(t, "", true, false)
def token[T](t: Parser[T], description: String): Parser[T] = token(t, description, false) def token[T](t: Parser[T], hide: Boolean): Parser[T] = token(t, "", true, hide)
def token[T](t: Parser[T], seen: String, track: Boolean): Parser[T] = def token[T](t: Parser[T], description: String): Parser[T] = token(t, description, false, false)
def token[T](t: Parser[T], seen: String, track: Boolean, hide: Boolean): Parser[T] =
if(t.valid && !t.isTokenStart) if(t.valid && !t.isTokenStart)
if(t.result.isEmpty) new TokenStart(t, seen, track) else t if(t.result.isEmpty) new TokenStart(t, seen, track, hide) else t
else else
t t
@ -489,11 +490,12 @@ private final class MatchedString(delegate: Parser[_], seenV: Vector[Char], part
override def isTokenStart = delegate.isTokenStart override def isTokenStart = delegate.isTokenStart
override def toString = "matched(" + partial + ", " + seen + ", " + delegate + ")" override def toString = "matched(" + partial + ", " + seen + ", " + delegate + ")"
} }
private final class TokenStart[T](delegate: Parser[T], seen: String, track: Boolean) extends ValidParser[T] private final class TokenStart[T](delegate: Parser[T], seen: String, track: Boolean, hide: Boolean) extends ValidParser[T]
{ {
def derive(c: Char) = token( delegate derive c, if(track) seen + c else seen, track) def derive(c: Char) = token( delegate derive c, if(track) seen + c else seen, track, hide)
lazy val completions = lazy val completions =
if(track) if(hide) Completions.nil
else if(track)
{ {
val dcs = delegate.completions val dcs = delegate.completions
Completions( for(c <- dcs.get) yield Completion.token(seen, c.append) ) Completions( for(c <- dcs.get) yield Completion.token(seen, c.append) )