     return r
   }
 
-  mutating func matchWhileDigit(consume: Bool = false) -> Int {
+  public mutating func matchWhileDigit(consume: Bool = false) -> Int {
     var r = -1
     var i = currentIndex
     let savei = i


  // One-off symbols

  mutating func eatOpenParen() -> Bool {
    return matchOpenParen(true)
  }

  // (
  mutating func matchOpenParen(consume: Bool = false) -> Bool {
    return matchOne(40, consume: consume) // (
  }

  mutating func eatCloseParen() -> Bool {
    return matchCloseParen(true)
  }

  // )
  mutating func matchCloseParen(consume: Bool = false) -> Bool {
    return matchOne(41, consume: consume) // )
  }

  mutating func eatLessThan() -> Bool {
    return matchLessThan(true)
  }

  // <
  mutating func matchLessThan(consume: Bool = false) -> Bool {
    return matchOne(60, consume: consume) // <
  }

  mutating func eatGreaterThan() -> Bool {
    return matchGreaterThan(true)
  }

  // >
  mutating func matchGreaterThan(consume: Bool = false) -> Bool {
    return matchOne(62, consume: consume) // >
  }

  mutating func eatOpenBracket() -> Bool {
    return matchOpenBracket(true)
  }

  // [
  mutating func matchOpenBracket(consume: Bool = false) -> Bool {
    return matchOne(91, consume: consume) // [
  }

  mutating func eatCloseBracket() -> Bool {
    return matchCloseBracket(true)
  }

  // ]
  mutating func matchCloseBracket(consume: Bool = false) -> Bool {
    return matchOne(93, consume: consume) // ]
  }

  mutating func eatOpenBrace() -> Bool {
    return matchOpenBrace(true)
  }

  // {
  mutating func matchOpenBrace(consume: Bool = false) -> Bool {
    return matchOne(123, consume: consume) // {
  }

  mutating func eatCloseBrace() -> Bool {
    return matchCloseBrace(true)
  }

  // }
  mutating func matchCloseBrace(consume: Bool = false) -> Bool {
    return matchOne(125, consume: consume) // }
  }

  mutating func eatEqual() -> Bool {
    return matchEqual(true)
  }

  // =
  mutating func matchEqual(consume: Bool = false) -> Bool {
    return matchOne(61, consume: consume) // =
  }

  mutating func eatPlus() -> Bool {
    return matchPlus(true)
  }

  // +
  mutating func matchPlus(consume: Bool = false) -> Bool {
    return matchOne(43, consume: consume) // +
  }

  mutating func eatMinus() -> Bool {
    return matchMinus(true)
  }

  // -
  mutating func matchMinus(consume: Bool = false) -> Bool {
    return matchOne(45, consume: consume) // -
  }

  mutating func eatExclamation() -> Bool {
    return matchExclamation(true)
  }

  // !
  mutating func matchExclamation(consume: Bool = false) -> Bool {
    return matchOne(33, consume: consume) // !
  }

  mutating func eatQuestionMark() -> Bool {
    return matchQuestionMark(true)
  }

  // ?
  mutating func matchQuestionMark(consume: Bool = false) -> Bool {
    return matchOne(63, consume: consume) // ?
  }

  mutating func eatAmpersand() -> Bool {
    return matchAmpersand(true)
  }

  // &
  mutating func matchAmpersand(consume: Bool = false) -> Bool {
    return matchOne(38, consume: consume) // &
  }

  mutating func eatSemicolon() -> Bool {
    return matchSemicolon(true)
  }

  // ;
  mutating func matchSemicolon(consume: Bool = false) -> Bool {
    return matchOne(59, consume: consume) // ;
  }

  mutating func eatColon() -> Bool {
    return matchColon(true)
  }

  // :
  mutating func matchColon(consume: Bool = false) -> Bool {
    return matchOne(58, consume: consume) // :
  }

  mutating func eatPoint() -> Bool {
    return matchPoint(true)
  }

  // .
  mutating func matchPoint(consume: Bool = false) -> Bool {
    return matchOne(46, consume: consume) // .
  }

  mutating func eatComma() -> Bool {
    return matchComma(true)
  }

  // ,
  mutating func matchComma(consume: Bool = false) -> Bool {
    return matchOne(44, consume: consume) // ,
  }

  mutating func eatAsterisk() -> Bool {
    return matchAsterisk(true)
  }

  // *
  mutating func matchAsterisk(consume: Bool = false) -> Bool {
    return matchOne(42, consume: consume) // *
  }

  mutating func eatSlash() -> Bool {
    return matchSlash(true)
  }

  // /
  mutating func matchSlash(consume: Bool = false) -> Bool {
    return matchOne(47, consume: consume) // /
  }

  mutating func eatBackslash() -> Bool {
    return matchBackslash(true)
  }

  // \.
  mutating func matchBackslash(consume: Bool = false) -> Bool {
    return matchOne(92, consume: consume) // \.
  }

  mutating func eatAt() -> Bool {
    return matchAt(true)
  }

  // @
  mutating func matchAt(consume: Bool = false) -> Bool {
    return matchOne(64, consume: consume) // @
  }

  mutating func eatTilde() -> Bool {
    return matchTilde(true)
  }

  // ~
  mutating func matchTilde(consume: Bool = false) -> Bool {
    return matchOne(126, consume: consume) // ~
  }

  mutating func eatUnderline() -> Bool {
    return matchUnderline(true)
  }

  // _
  mutating func matchUnderline(consume: Bool = false) -> Bool {
    return matchOne(95, consume: consume) // _
  }

  mutating func eatPercent() -> Bool {
    return matchPercent(true)
  }

  // %
  mutating func matchPercent(consume: Bool = false) -> Bool {
    return matchOne(37, consume: consume) // %
  }

  mutating func eatDollar() -> Bool {
    return matchDollar(true)
  }

  // $
  mutating func matchDollar(consume: Bool = false) -> Bool {
    return matchOne(36, consume: consume) // $
  }

  mutating func eatSingleQuote() -> Bool {
    return matchSingleQuote(true)
  }

  // '
  mutating func matchSingleQuote(consume: Bool = false) -> Bool {
    return matchOne(39, consume: consume) // '
  }

  mutating func eatDoubleQuote() -> Bool {
    return matchDoubleQuote(true)
  }

  // "
  mutating func matchDoubleQuote(consume: Bool = false) -> Bool {
    return matchOne(34, consume: consume) // "
  }

  mutating func eatHash() -> Bool {
    return matchHash(true)
  }

  // #
  mutating func matchHash(consume: Bool = false) -> Bool {
    return matchOne(35, consume: consume) // #
  }

  mutating func eatPipe() -> Bool {
    return matchPipe(true)
  }

  // |
  mutating func matchPipe(consume: Bool = false) -> Bool {
    return matchOne(124, consume: consume) // |
  }

  mutating func eatCircumflex() -> Bool {
    return matchCircumflex(true)
  }

  // ^
  mutating func matchCircumflex(consume: Bool = false) -> Bool {
    return matchOne(94, consume: consume) // ^
  }

  // Extended matching

  mutating func eatInQuotes(qc: UInt8) -> Bool {
    return matchInQuotes(qc, consume: true) >= 0
  }

  mutating func matchInQuotes(qc: UInt8, consume: Bool = false) -> Int {
    var r = -1
    var i = currentIndex
    if qc == _codeUnits[i] {

    return r
  }

  public mutating func eatUntilEscapedString(string: String) -> Bool {
    return matchUntilEscapedString(string, consume: true) >= 0
  }

  public mutating func matchUntilEscapedString(string: String,
      consume: Bool = false) -> Int {
    var r = -1
    var i = currentIndex
    let lei = lineEndIndex
