     return inOptionalName()
   }
 
+  func inSetChar() -> FileGlobTokenType {
+    if stream.eatCloseBracket() {
+      status.tokenizer = T.Body
+      return .SymCBSet
+    } else if stream.eatSlash() {
+      status.tokenizer = T.Body
+      return .Separator
+    }
+    stream.eatWhileNeitherTwo(93, c2: 47) // ] /
+    return .SetChar
+  }
+
+  func inSetClose() -> FileGlobTokenType {
+    stream.eatCloseBracket()
+    status.tokenizer = T.Body
+    return .SymCBSet
+  }
+
   func inSetMinusChar() -> FileGlobTokenType {
     stream.next()
     status.tokenizer = T.Set

      status.tokenizer = T.Body
      return .SymCBSet
    } else if stream.eatLowerCase() {
      if stream.matchMinus() {
        status.tokenizer = T.SetLowerCaseMinus
        return .SetLowerChar
      }
      return inText()
    } else if stream.eatUpperCase() {
      if stream.matchMinus() {
        status.tokenizer = T.SetUpperCaseMinus
        return .SetUpperChar
      }
      return inText()
    } else if stream.eatDigit() {
      if stream.matchMinus() {
        status.tokenizer = T.SetDigitMinus
        return .SetDigitChar
      }
      return inText()
    } else if stream.next() != nil {
      return .Name
    }

  }

  func inSetLowerCaseMinus() -> FileGlobTokenType {
    stream.eatMinus()
    if stream.matchLowerCase() >= 0 {
      status.tokenizer = T.SetMinusChar
      return .SymMinusSet
    } else if stream.matchCloseBracket() {
      status.tokenizer = T.SetClose
      return .SetChar
    }
    return inText()
  }

  func inSetUpperCaseMinus() -> FileGlobTokenType {
    stream.eatMinus()
    if stream.matchUpperCase() >= 0 {
      status.tokenizer = T.SetMinusChar
      return .SymMinusSet
    } else if stream.matchCloseBracket() {
      status.tokenizer = T.SetClose
      return .SetChar
    }
    return inText()
  }

  func inSetDigitMinus() -> FileGlobTokenType {
    stream.eatMinus()
    if stream.matchDigit() >= 0 {
      status.tokenizer = T.SetMinusChar
      return .SymMinusSet
    } else if stream.matchCloseBracket() {
      status.tokenizer = T.SetClose
      return .SetChar
    }
    return inText()
  }

  func handleFirstSetChar(t: Tokenizer, type: FileGlobTokenType)
      -> FileGlobTokenType {
    if stream.matchMinus() {
      status.tokenizer = t
      return type
    } else if stream.matchCloseBracket() {
      status.tokenizer = T.SetClose
      return .SetChar
    }
    status.tokenizer = T.SetChar
    return .SetChar
  }

  func inSet() -> FileGlobTokenType {
