Make charset lookups more efficient

This commit is contained in:
Arian van Putten 2015-10-04 23:32:31 +02:00
parent 984a76f0f8
commit 1e0fa95620

View File

@ -96,20 +96,24 @@ toValidFunctionName t =
Nothing -> "_" Nothing -> "_"
where where
setFirstChar c = if firstChar c then c else '_' setFirstChar c = if firstChar c then c else '_'
firstChar c = prefixOK c || any (Set.member c) firstLetterOK firstChar c = prefixOK c || Set.member c firstLetterOK
remainder c = prefixOK c || any (Set.member c) remainderOK remainder c = prefixOK c || Set.member c remainderOK
prefixOK c = c `elem` ['$','_'] prefixOK c = c `elem` ['$','_']
firstLetterOK = [ Set.lowercaseLetter firstLetterOK = mconcat
, Set.uppercaseLetter [ Set.lowercaseLetter
, Set.titlecaseLetter , Set.uppercaseLetter
, Set.modifierLetter , Set.titlecaseLetter
, Set.otherLetter , Set.modifierLetter
, Set.letterNumber ] , Set.otherLetter
, Set.letterNumber
]
remainderOK = firstLetterOK remainderOK = firstLetterOK
<> [ Set.nonSpacingMark <> mconcat
, Set.spacingCombiningMark [ Set.nonSpacingMark
, Set.decimalNumber , Set.spacingCombiningMark
, Set.connectorPunctuation ] , Set.decimalNumber
, Set.connectorPunctuation
]
toJSHeader :: HeaderArg -> Text toJSHeader :: HeaderArg -> Text
toJSHeader (HeaderArg n) = toValidFunctionName ("header" <> n) toJSHeader (HeaderArg n) = toValidFunctionName ("header" <> n)