func generateConsumer()

in Sources/_StringProcessing/ConsumerInterface.swift [338:497]


  func generateConsumer(
    _ opts: MatchingOptions
  ) throws -> Program<String>.ConsumeFunction {
    switch self {

    case .asciiHexDigit:
      return consumeScalarProp {
        $0.isHexDigit && $0.isASCIIHexDigit
      }
    case .alphabetic:
      return consumeScalarProp(\.isAlphabetic)
    case .bidiControl:
      break


    case .bidiMirrored: 
      return consumeScalarProp(\.isBidiMirrored)
    case .cased:
      return consumeScalarProp(\.isCased)
    case .compositionExclusion:
      break
    case .caseIgnorable:
      return consumeScalarProp(\.isCaseIgnorable)
    case .changesWhenCasefolded:
      return consumeScalarProp(\.changesWhenCaseFolded)
    case .changesWhenCasemapped:
      return consumeScalarProp(\.changesWhenCaseMapped)
    case .changesWhenNFKCCasefolded:
      return consumeScalarProp(\.changesWhenNFKCCaseFolded)
    case .changesWhenLowercased:
      return consumeScalarProp(\.changesWhenLowercased)
    case .changesWhenTitlecased:
      return consumeScalarProp(\.changesWhenTitlecased)
    case .changesWhenUppercased:
      return consumeScalarProp(\.changesWhenUppercased)
    case .dash:
      return consumeScalarProp(\.isDash)
    case .deprecated:
      return consumeScalarProp(\.isDeprecated)
    case .defaultIgnorableCodePoint:
      return consumeScalarProp(\.isDefaultIgnorableCodePoint)
    case .diacratic: // spelling?
      return consumeScalarProp(\.isDiacritic)
    case .emojiModifierBase:
      if #available(macOS 10.12.2, iOS 10.2, tvOS 10.1, watchOS 3.1.1, *) {
        return consumeScalarProp(\.isEmojiModifierBase)
      } else {
        throw unsupported("isEmojiModifierBase on old OSes")
      }
    case .emojiComponent:
      break
    case .emojiModifier:
      if #available(macOS 10.12.2, iOS 10.2, tvOS 10.1, watchOS 3.1.1, *) {
        return consumeScalarProp(\.isEmojiModifier)
      } else {
        throw unsupported("isEmojiModifier on old OSes")
      }
    case .emoji:
      if #available(macOS 10.12.2, iOS 10.2, tvOS 10.1, watchOS 3.1.1, *) {
        return consumeScalarProp(\.isEmoji)
      } else {
        throw unsupported("isEmoji on old OSes")
      }
    case .emojiPresentation:
      if #available(macOS 10.12.2, iOS 10.2, tvOS 10.1, watchOS 3.1.1, *) {
        return consumeScalarProp(\.isEmojiPresentation)
      } else {
        throw unsupported("isEmojiPresentation on old OSes")
      }
    case .extender:
      return consumeScalarProp(\.isExtender)
    case .extendedPictographic:
      break // NOTE: Stdlib has this data internally
    case .fullCompositionExclusion:
      return consumeScalarProp(\.isFullCompositionExclusion)
    case .graphemeBase:
      return consumeScalarProp(\.isGraphemeBase)
    case .graphemeExtended:
      return consumeScalarProp(\.isGraphemeExtend)
    case .graphemeLink:
      break
    case .hexDigit:
      return consumeScalarProp(\.isHexDigit)
    case .hyphen:
      break
    case .idContinue:
      return consumeScalarProp(\.isIDContinue)
    case .ideographic:
      return consumeScalarProp(\.isIdeographic)
    case .idStart:
      return consumeScalarProp(\.isIDStart)
    case .idsBinaryOperator:
      return consumeScalarProp(\.isIDSBinaryOperator)
    case .idsTrinaryOperator:
      return consumeScalarProp(\.isIDSTrinaryOperator)
    case .joinControl:
      return consumeScalarProp(\.isJoinControl)
    case .logicalOrderException:
      return consumeScalarProp(\.isLogicalOrderException)
    case .lowercase:
      return consumeScalarProp(\.isLowercase)
    case .math:
      return consumeScalarProp(\.isMath)
    case .noncharacterCodePoint:
      return consumeScalarProp(\.isNoncharacterCodePoint)
    case .otherAlphabetic:
      break
    case .otherDefaultIgnorableCodePoint:
      break
    case .otherGraphemeExtended:
      break
    case .otherIDContinue:
      break
    case .otherIDStart:
      break
    case .otherLowercase:
      break
    case .otherMath:
      break
    case .otherUppercase:
      break
    case .patternSyntax:
      return consumeScalarProp(\.isPatternSyntax)
    case .patternWhitespace:
      return consumeScalarProp(\.isPatternWhitespace)
    case .prependedConcatenationMark:
      break
    case .quotationMark:
      return consumeScalarProp(\.isQuotationMark)
    case .radical:
      return consumeScalarProp(\.isRadical)
    case .regionalIndicator:
      return consumeScalar { s in
        (0x1F1E6...0x1F1FF).contains(s.value)
      }
    case .softDotted:
      return consumeScalarProp(\.isSoftDotted)
    case .sentenceTerminal:
      return consumeScalarProp(\.isSentenceTerminal)
    case .terminalPunctuation:
      return consumeScalarProp(\.isTerminalPunctuation)
    case .unifiedIdiograph: // spelling?
      return consumeScalarProp(\.isUnifiedIdeograph)
    case .uppercase:
      return consumeScalarProp(\.isUppercase)
    case .variationSelector:
      return consumeScalarProp(\.isVariationSelector)
    case .whitespace:
      return consumeScalarProp(\.isWhitespace)
    case .xidContinue:
      return consumeScalarProp(\.isXIDContinue)
    case .xidStart:
      return consumeScalarProp(\.isXIDStart)
    case .expandsOnNFC, .expandsOnNFD, .expandsOnNFKD,
        .expandsOnNFKC:
      throw unsupported("Unicode-deprecated: \(self)")
    }

    throw unsupported("TODO: map prop \(self)")
  }