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)")
}