func generateConsumer()

in Sources/_StringProcessing/ConsumerInterface.swift [548:657]


  func generateConsumer(
    _ opts: MatchingOptions
  ) throws -> Program<String>.ConsumeFunction {
    switch self {
    case .letter:
      return consumeScalarGCs([
        .uppercaseLetter, .lowercaseLetter,
        .titlecaseLetter, .modifierLetter,
        .otherLetter
      ])

    case .mark:
      return consumeScalarGCs([
        .nonspacingMark, .spacingMark, .enclosingMark
      ])

    case .number:
      return consumeScalarGCs([
        .decimalNumber, .letterNumber, .otherNumber
      ])

    case .symbol:
      return consumeScalarGCs([
        .mathSymbol, .currencySymbol, .modifierSymbol,
        .otherSymbol
      ])

    case .punctuation:
      return consumeScalarGCs([
        .connectorPunctuation, .dashPunctuation,
        .openPunctuation, .closePunctuation,
        .initialPunctuation, .finalPunctuation,
        .otherPunctuation
      ])

    case .separator:
      return consumeScalarGCs([
        .spaceSeparator, .lineSeparator, .paragraphSeparator
      ])

    case .other:
      return consumeScalarGCs([
        .control, .format, .surrogate, .privateUse, .unassigned
      ])

    case .casedLetter:
      throw unsupported("TODO: cased letter? not the property?")

    case .control:
      return consumeScalarGC(.control)
    case .format:
      return consumeScalarGC(.format)
    case .unassigned:
      return consumeScalarGC(.unassigned)
    case .privateUse:
      return consumeScalarGC(.privateUse)
    case .surrogate:
      return consumeScalarGC(.surrogate)
    case .lowercaseLetter:
      return consumeScalarGC(.lowercaseLetter)
    case .modifierLetter:
      return consumeScalarGC(.modifierLetter)
    case .otherLetter:
      return consumeScalarGC(.otherLetter)
    case .titlecaseLetter:
      return consumeScalarGC(.titlecaseLetter)
    case .uppercaseLetter:
      return consumeScalarGC(.uppercaseLetter)
    case .spacingMark:
      return consumeScalarGC(.spacingMark)
    case .enclosingMark:
      return consumeScalarGC(.enclosingMark)
    case .nonspacingMark:
      return consumeScalarGC(.nonspacingMark)
    case .decimalNumber:
      return consumeScalarGC(.decimalNumber)
    case .letterNumber:
      return consumeScalarGC(.letterNumber)
    case .otherNumber:
      return consumeScalarGC(.otherNumber)
    case .connectorPunctuation:
      return consumeScalarGC(.connectorPunctuation)
    case .dashPunctuation:
      return consumeScalarGC(.dashPunctuation)
    case .closePunctuation:
      return consumeScalarGC(.closePunctuation)
    case .finalPunctuation:
      return consumeScalarGC(.finalPunctuation)
    case .initialPunctuation:
      return consumeScalarGC(.initialPunctuation)
    case .otherPunctuation:
      return consumeScalarGC(.otherPunctuation)
    case .openPunctuation:
      return consumeScalarGC(.openPunctuation)
    case .currencySymbol:
      return consumeScalarGC(.currencySymbol)
    case .modifierSymbol:
      return consumeScalarGC(.modifierSymbol)
    case .mathSymbol:
      return consumeScalarGC(.mathSymbol)
    case .otherSymbol:
      return consumeScalarGC(.otherSymbol)
    case .lineSeparator:
      return consumeScalarGC(.lineSeparator)
    case .paragraphSeparator:
      return consumeScalarGC(.paragraphSeparator)
    case .spaceSeparator:
      return consumeScalarGC(.spaceSeparator)
    }
  }