ascii-caseless 0.0.0.0 → 0.0.0.1
raw patch · 4 files changed
+250/−220 lines, 4 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
Files
- ascii-caseless.cabal +11/−15
- changelog.md +3/−1
- library/ASCII/Caseless.hs +68/−42
- test/Main.hs +168/−162
ascii-caseless.cabal view
@@ -1,7 +1,7 @@ cabal-version: 3.0 name: ascii-caseless-version: 0.0.0.0+version: 0.0.0.1 synopsis: ASCII character without an upper/lower case distinction category: Data, Text @@ -16,7 +16,7 @@ maintainer: Chris Martin, Julie Moronuki homepage: https://github.com/typeclasses/ascii-caseless-bug-Reports: https://github.com/typeclasses/ascii-caseless/issues+bug-reports: https://github.com/typeclasses/ascii-caseless/issues extra-source-files: *.md @@ -25,31 +25,27 @@ location: git://github.com/typeclasses/ascii-caseless.git common base- default-language: Haskell2010+ default-language: GHC2021 ghc-options: -Wall default-extensions:+ BlockArguments+ DeriveAnyClass+ DerivingStrategies NoImplicitPrelude build-depends:- ascii-case ^>= 1.0.1+ , ascii-case ^>= 1.0.1 , ascii-char ^>= 1.0- , base ^>= 4.14 || ^>= 4.15 || ^>= 4.16 || ^>= 4.17+ , base ^>= 4.16 || ^>= 4.17 || ^>= 4.18 library import: base ghc-options: -fno-warn-unused-imports hs-source-dirs: library - default-extensions:- DeriveAnyClass- DeriveDataTypeable- DeriveGeneric- DerivingStrategies- StandaloneDeriving- build-depends:- hashable ^>= 1.3.5 || ^>= 1.4+ , hashable ^>= 1.3.5 || ^>= 1.4 exposed-modules: ASCII.Caseless@@ -65,5 +61,5 @@ QuasiQuotes build-depends:- ascii-caseless- , hspec ^>= 2.8.5 || ^>= 2.9 || ^>= 2.10+ , ascii-caseless+ , hspec ^>= 2.8.5 || ^>= 2.9 || ^>= 2.10 || ^>= 2.11
changelog.md view
@@ -1,1 +1,3 @@-0.0.0.0 - Initial release+0.0.0.1 - 2023-06-21 - Support GHC range 9.2 to 9.6++0.0.0.0 - 2022-12-27 - Initial release
library/ASCII/Caseless.hs view
@@ -1,74 +1,99 @@ module ASCII.Caseless- (- {- * The @Char@ type -} CaselessChar (..),- {- * Enumeration -} allCharacters,- {- * Conversion -} disregardCase, toCase, assumeCaseUnsafe,+ ( -- * The @CaselessChar@ type+ CaselessChar (..),++ -- * Enumeration+ allCharacters,++ -- * Conversion+ disregardCase,+ toCase,+ assumeCaseUnsafe, )- where+where import ASCII.Case (Case (..))-+import ASCII.Char qualified as ASCII import Data.Bool (otherwise)+import Data.Bool qualified as Bool+import Data.Char qualified as C import Data.Data (Data) import Data.Eq (Eq, (/=), (==)) import Data.Hashable (Hashable) import Data.Int (Int) import Data.Maybe (Maybe (..))-import Data.Ord (Ord, (<), (>), (<=))+import Data.Ord (Ord, (<), (<=), (>)) import GHC.Generics (Generic)-import Prelude (Bounded, Enum, enumFromTo, fromEnum, maxBound, minBound, toEnum, (-), (+)) import Text.Show (Show)--import qualified Data.Char as C-import qualified Data.Bool as Bool-import qualified Prelude as Enum (Enum (..))-import qualified ASCII.Char as ASCII---- | A character in the ASCII character set, without an upper/lower case distinction for letters+import Prelude (Bounded, Enum, enumFromTo, fromEnum, maxBound, minBound, toEnum, (+), (-))+import Prelude qualified as Enum (Enum (..)) +-- | A character in the ASCII character set, without an+-- upper/lower case distinction for letters data CaselessChar =- Null | StartOfHeading | StartOfText | EndOfText | EndOfTransmission | Enquiry | Acknowledgement | Bell | Backspace | HorizontalTab | LineFeed | VerticalTab | FormFeed | CarriageReturn | ShiftOut | ShiftIn | DataLinkEscape+ Null | StartOfHeading | StartOfText | EndOfText+ | EndOfTransmission | Enquiry | Acknowledgement | Bell+ | Backspace | HorizontalTab | LineFeed | VerticalTab+ | FormFeed | CarriageReturn | ShiftOut | ShiftIn | DataLinkEscape | DeviceControl1 | DeviceControl2 | DeviceControl3 | DeviceControl4 - | NegativeAcknowledgement | SynchronousIdle | EndOfTransmissionBlock | Cancel | EndOfMedium | Substitute | Escape+ | NegativeAcknowledgement | SynchronousIdle | EndOfTransmissionBlock+ | Cancel | EndOfMedium | Substitute | Escape | FileSeparator | GroupSeparator | RecordSeparator | UnitSeparator - | Space | ExclamationMark | QuotationMark | NumberSign | DollarSign | PercentSign | Ampersand | Apostrophe | LeftParenthesis | RightParenthesis | Asterisk | PlusSign | Comma | HyphenMinus | FullStop | Slash+ | Space | ExclamationMark | QuotationMark | NumberSign+ | DollarSign | PercentSign | Ampersand | Apostrophe+ | LeftParenthesis | RightParenthesis | Asterisk+ | PlusSign | Comma | HyphenMinus | FullStop | Slash - | Digit0 | Digit1 | Digit2 | Digit3 | Digit4 | Digit5 | Digit6 | Digit7 | Digit8 | Digit9+ | Digit0 | Digit1 | Digit2 | Digit3 | Digit4+ | Digit5 | Digit6 | Digit7 | Digit8 | Digit9 - | Colon | Semicolon | LessThanSign | EqualsSign | GreaterThanSign | QuestionMark | AtSign+ | Colon | Semicolon | LessThanSign | EqualsSign+ | GreaterThanSign | QuestionMark | AtSign - | LetterA | LetterB | LetterC | LetterD | LetterE | LetterF | LetterG | LetterH | LetterI | LetterJ | LetterK | LetterL | LetterM | LetterN | LetterO | LetterP | LetterQ | LetterR | LetterS | LetterT | LetterU | LetterV | LetterW | LetterX | LetterY | LetterZ+ | LetterA | LetterB | LetterC | LetterD | LetterE | LetterF+ | LetterG | LetterH | LetterI | LetterJ | LetterK | LetterL+ | LetterM | LetterN | LetterO | LetterP | LetterQ | LetterR+ | LetterS | LetterT | LetterU | LetterV | LetterW | LetterX+ | LetterY | LetterZ - | LeftSquareBracket | Backslash | RightSquareBracket | Caret | Underscore | GraveAccent+ | LeftSquareBracket | Backslash | RightSquareBracket+ | Caret | Underscore | GraveAccent - | LeftCurlyBracket | VerticalLine | RightCurlyBracket | Tilde | Delete+ | LeftCurlyBracket | VerticalLine | RightCurlyBracket+ | Tilde | Delete -- | ASCII characters can be compared for equality using '(==)'. deriving stock instance Eq CaselessChar --- | Caseless ASCII characters are ordered; for example, the letter /A/ is "less than" ('<') the letter /B/ because it appears earlier in the list. The ordering of caseless ASCII characters is roughly the same as the ordering of the corresponding Unicode 'C.Char's, with caseless letters appearing in the place of case-sensitive capital letters.+-- | Caseless ASCII characters are ordered; for example, the letter+-- /A/ is "less than" ('<') the letter /B/ because it appears earlier+-- in the list. The ordering of caseless ASCII characters is roughly+-- the same as the ordering of the corresponding Unicode 'C.Char's,+-- with caseless letters appearing in the place of case-sensitive+-- capital letters. deriving stock instance Ord CaselessChar --- | The 'Enum' instance allows us to use range syntax, for example @['LetterA' .. 'LetterZ']@ is a list all letters from /a/ to /z/.+-- | The 'Enum' instance allows us to use range syntax, for example+-- @['LetterA' .. 'LetterZ']@ is a list all letters from /a/ to /z/. deriving stock instance Enum CaselessChar --- | You can write @(['minBound' .. 'maxBound'] :: ['CaselessChar'])@ to get a list of all the caseless ASCII characters.+-- | You can write @(['minBound' .. 'maxBound'] :: ['CaselessChar'])@+-- to get a list of all the caseless ASCII characters. deriving stock instance Bounded CaselessChar --- | 'show' produces the name of a constructor. For example, the character @e@ is shown as “@LetterE@”. See "ASCII.Caseless" for the complete list of constructor names.+-- | 'show' produces the name of a constructor. For example,+-- the character @e@ is shown as “@LetterE@”.+-- See "ASCII.Caseless" for the complete list of constructor names. deriving stock instance Show CaselessChar --- | The 'Data' instance allows caseless ASCII characters to be used with generic programming in the “SYB” style. (See the <https://hackage.haskell.org/package/syb syb> package and the 2003 paper <https://www.microsoft.com/en-us/research/wp-content/uploads/2003/01/hmap.pdf Scrap Your Boilerplate> by Ralf Lämmel and Simon Peyton Jones.) deriving stock instance Data CaselessChar --- | The 'Generic' instance allows caseless ASCII characters to be used with generic programming in the “generic deriving” style. (See the <https://hackage.haskell.org/package/generic-data generic-data> package and the 2010 paper <http://dreixel.net/research/pdf/gdmh.pdf A generic deriving mechanism for Haskell> by José Pedro Magalhães, Atze Dijkstra, Johan Jeuring, and Andres Löh.) deriving stock instance Generic CaselessChar --- | The 'Hashable' instance lets us collect caseless ASCII characters in hash-based sets, and it lets us use caseless ASCII characters as keys in hash-based maps. (See the @unordered-containers@ package.) deriving anyclass instance Hashable CaselessChar -- | There are 102 characters in total.@@ -77,25 +102,26 @@ disregardCase :: ASCII.Char -> CaselessChar disregardCase x- | x <= ASCII.GraveAccent = Enum.toEnum (Enum.fromEnum x)- | x <= ASCII.SmallLetterZ = Enum.toEnum (Enum.fromEnum x - 32)- | Bool.otherwise = Enum.toEnum (Enum.fromEnum x - 26)+ | x <= ASCII.GraveAccent = Enum.toEnum (Enum.fromEnum x)+ | x <= ASCII.SmallLetterZ = Enum.toEnum (Enum.fromEnum x - 32)+ | Bool.otherwise = Enum.toEnum (Enum.fromEnum x - 26) --- | Like 'disregardCase', but defined only where the character is either a letter in the given case or a non-letter+-- | Like 'disregardCase', but defined only where the character+-- is either a letter in the given case or a non-letter -- -- For upper case, this is slightly more efficient than 'disregardCase'. assumeCaseUnsafe :: Case -> ASCII.Char -> CaselessChar assumeCaseUnsafe LowerCase x = disregardCase x assumeCaseUnsafe UpperCase x- | x <= ASCII.GraveAccent = Enum.toEnum (Enum.fromEnum x)- | Bool.otherwise = Enum.toEnum (Enum.fromEnum x - 26)+ | x <= ASCII.GraveAccent = Enum.toEnum (Enum.fromEnum x)+ | Bool.otherwise = Enum.toEnum (Enum.fromEnum x - 26) toCase :: Case -> CaselessChar -> ASCII.Char toCase UpperCase x- | x <= GraveAccent = Enum.toEnum (Enum.fromEnum x)- | Bool.otherwise = Enum.toEnum (Enum.fromEnum x + 26)+ | x <= GraveAccent = Enum.toEnum (Enum.fromEnum x)+ | Bool.otherwise = Enum.toEnum (Enum.fromEnum x + 26) toCase LowerCase x- | x <= AtSign = Enum.toEnum (Enum.fromEnum x)- | x <= LetterZ = Enum.toEnum (Enum.fromEnum x + 32)- | x <= GraveAccent = Enum.toEnum (Enum.fromEnum x)- | Bool.otherwise = Enum.toEnum (Enum.fromEnum x + 26)+ | x <= AtSign = Enum.toEnum (Enum.fromEnum x)+ | x <= LetterZ = Enum.toEnum (Enum.fromEnum x + 32)+ | x <= GraveAccent = Enum.toEnum (Enum.fromEnum x)+ | Bool.otherwise = Enum.toEnum (Enum.fromEnum x + 26)
test/Main.hs view
@@ -1,180 +1,186 @@ module Main (main) where -import ASCII.Caseless import ASCII.Case (Case (..))-+import ASCII.Caseless+ ( CaselessChar,+ allCharacters,+ assumeCaseUnsafe,+ disregardCase,+ toCase,+ )+import ASCII.Caseless qualified as Caseless+import ASCII.Char qualified as CaseSensitive import Data.Eq (Eq ((==))) import Data.Foldable (for_) import Data.Function (($)) import Data.List (length) import Data.String (String) import System.IO (IO)-import Test.Hspec (hspec, describe, it, shouldBe)--import qualified ASCII.Char as CaseSensitive-import qualified ASCII.Caseless as Caseless+import Test.Hspec (describe, hspec, it, shouldBe) main :: IO ()-main = hspec $ do-- describe "caseless characters" $ do- it "how many" $ length allCharacters == 102+main = hspec do+ describe "caseless characters" do+ it "how many" $ length allCharacters == 102 - describe "disregardCase" $ do- for_ [nonLetters, capitalLetters, smallLetters] $ \(name, pairs) ->- it name $ for_ pairs $ \(a, b) -> disregardCase b `shouldBe` a+ describe "disregardCase" do+ for_ [nonLetters, capitalLetters, smallLetters] \(name, pairs) ->+ it name $ for_ pairs $ \(a, b) -> disregardCase b `shouldBe` a - describe "testAssumeCaseUnsafe" $ do- describe "UpperCase" $ do- for_ [nonLetters, capitalLetters] $ \(name, pairs) ->- it name $ for_ pairs $ \(a, b) -> assumeCaseUnsafe UpperCase b `shouldBe` a- describe "LowerCase" $ do- for_ [nonLetters, smallLetters] $ \(name, pairs) ->- it name $ for_ pairs $ \(a, b) -> assumeCaseUnsafe LowerCase b `shouldBe` a+ describe "testAssumeCaseUnsafe" do+ describe "UpperCase" do+ for_ [nonLetters, capitalLetters] \(name, pairs) ->+ it name $ for_ pairs $ \(a, b) -> assumeCaseUnsafe UpperCase b `shouldBe` a+ describe "LowerCase" do+ for_ [nonLetters, smallLetters] \(name, pairs) ->+ it name $ for_ pairs $ \(a, b) -> assumeCaseUnsafe LowerCase b `shouldBe` a - describe "toCase" $ do- describe "UpperCase" $ do- for_ [nonLetters, capitalLetters] $ \(name, pairs) ->- it name $ for_ pairs $ \(a, b) -> toCase UpperCase a `shouldBe` b- describe "LowerCase" $ do- for_ [nonLetters, smallLetters] $ \(name, pairs) ->- it name $ for_ pairs $ \(a, b) -> toCase LowerCase a `shouldBe` b+ describe "toCase" do+ describe "UpperCase" do+ for_ [nonLetters, capitalLetters] \(name, pairs) ->+ it name $ for_ pairs \(a, b) -> toCase UpperCase a `shouldBe` b+ describe "LowerCase" do+ for_ [nonLetters, smallLetters] \(name, pairs) ->+ it name $ for_ pairs \(a, b) -> toCase LowerCase a `shouldBe` b nonLetters, smallLetters, capitalLetters :: (String, [(CaselessChar, CaseSensitive.Char)])--smallLetters = (,) "small letters"- [ (,) Caseless.LetterA CaseSensitive.SmallLetterA- , (,) Caseless.LetterB CaseSensitive.SmallLetterB- , (,) Caseless.LetterC CaseSensitive.SmallLetterC- , (,) Caseless.LetterD CaseSensitive.SmallLetterD- , (,) Caseless.LetterE CaseSensitive.SmallLetterE- , (,) Caseless.LetterF CaseSensitive.SmallLetterF- , (,) Caseless.LetterG CaseSensitive.SmallLetterG- , (,) Caseless.LetterH CaseSensitive.SmallLetterH- , (,) Caseless.LetterI CaseSensitive.SmallLetterI- , (,) Caseless.LetterJ CaseSensitive.SmallLetterJ- , (,) Caseless.LetterK CaseSensitive.SmallLetterK- , (,) Caseless.LetterL CaseSensitive.SmallLetterL- , (,) Caseless.LetterM CaseSensitive.SmallLetterM- , (,) Caseless.LetterN CaseSensitive.SmallLetterN- , (,) Caseless.LetterO CaseSensitive.SmallLetterO- , (,) Caseless.LetterP CaseSensitive.SmallLetterP- , (,) Caseless.LetterQ CaseSensitive.SmallLetterQ- , (,) Caseless.LetterR CaseSensitive.SmallLetterR- , (,) Caseless.LetterS CaseSensitive.SmallLetterS- , (,) Caseless.LetterT CaseSensitive.SmallLetterT- , (,) Caseless.LetterU CaseSensitive.SmallLetterU- , (,) Caseless.LetterV CaseSensitive.SmallLetterV- , (,) Caseless.LetterW CaseSensitive.SmallLetterW- , (,) Caseless.LetterX CaseSensitive.SmallLetterX- , (,) Caseless.LetterY CaseSensitive.SmallLetterY- , (,) Caseless.LetterZ CaseSensitive.SmallLetterZ+smallLetters =+ (,)+ "small letters"+ [ (,) Caseless.LetterA CaseSensitive.SmallLetterA,+ (,) Caseless.LetterB CaseSensitive.SmallLetterB,+ (,) Caseless.LetterC CaseSensitive.SmallLetterC,+ (,) Caseless.LetterD CaseSensitive.SmallLetterD,+ (,) Caseless.LetterE CaseSensitive.SmallLetterE,+ (,) Caseless.LetterF CaseSensitive.SmallLetterF,+ (,) Caseless.LetterG CaseSensitive.SmallLetterG,+ (,) Caseless.LetterH CaseSensitive.SmallLetterH,+ (,) Caseless.LetterI CaseSensitive.SmallLetterI,+ (,) Caseless.LetterJ CaseSensitive.SmallLetterJ,+ (,) Caseless.LetterK CaseSensitive.SmallLetterK,+ (,) Caseless.LetterL CaseSensitive.SmallLetterL,+ (,) Caseless.LetterM CaseSensitive.SmallLetterM,+ (,) Caseless.LetterN CaseSensitive.SmallLetterN,+ (,) Caseless.LetterO CaseSensitive.SmallLetterO,+ (,) Caseless.LetterP CaseSensitive.SmallLetterP,+ (,) Caseless.LetterQ CaseSensitive.SmallLetterQ,+ (,) Caseless.LetterR CaseSensitive.SmallLetterR,+ (,) Caseless.LetterS CaseSensitive.SmallLetterS,+ (,) Caseless.LetterT CaseSensitive.SmallLetterT,+ (,) Caseless.LetterU CaseSensitive.SmallLetterU,+ (,) Caseless.LetterV CaseSensitive.SmallLetterV,+ (,) Caseless.LetterW CaseSensitive.SmallLetterW,+ (,) Caseless.LetterX CaseSensitive.SmallLetterX,+ (,) Caseless.LetterY CaseSensitive.SmallLetterY,+ (,) Caseless.LetterZ CaseSensitive.SmallLetterZ ]--capitalLetters = (,) "capital letters"- [ (,) Caseless.LetterA CaseSensitive.CapitalLetterA- , (,) Caseless.LetterB CaseSensitive.CapitalLetterB- , (,) Caseless.LetterC CaseSensitive.CapitalLetterC- , (,) Caseless.LetterD CaseSensitive.CapitalLetterD- , (,) Caseless.LetterE CaseSensitive.CapitalLetterE- , (,) Caseless.LetterF CaseSensitive.CapitalLetterF- , (,) Caseless.LetterG CaseSensitive.CapitalLetterG- , (,) Caseless.LetterH CaseSensitive.CapitalLetterH- , (,) Caseless.LetterI CaseSensitive.CapitalLetterI- , (,) Caseless.LetterJ CaseSensitive.CapitalLetterJ- , (,) Caseless.LetterK CaseSensitive.CapitalLetterK- , (,) Caseless.LetterL CaseSensitive.CapitalLetterL- , (,) Caseless.LetterM CaseSensitive.CapitalLetterM- , (,) Caseless.LetterN CaseSensitive.CapitalLetterN- , (,) Caseless.LetterO CaseSensitive.CapitalLetterO- , (,) Caseless.LetterP CaseSensitive.CapitalLetterP- , (,) Caseless.LetterQ CaseSensitive.CapitalLetterQ- , (,) Caseless.LetterR CaseSensitive.CapitalLetterR- , (,) Caseless.LetterS CaseSensitive.CapitalLetterS- , (,) Caseless.LetterT CaseSensitive.CapitalLetterT- , (,) Caseless.LetterU CaseSensitive.CapitalLetterU- , (,) Caseless.LetterV CaseSensitive.CapitalLetterV- , (,) Caseless.LetterW CaseSensitive.CapitalLetterW- , (,) Caseless.LetterX CaseSensitive.CapitalLetterX- , (,) Caseless.LetterY CaseSensitive.CapitalLetterY- , (,) Caseless.LetterZ CaseSensitive.CapitalLetterZ+capitalLetters =+ (,)+ "capital letters"+ [ (,) Caseless.LetterA CaseSensitive.CapitalLetterA,+ (,) Caseless.LetterB CaseSensitive.CapitalLetterB,+ (,) Caseless.LetterC CaseSensitive.CapitalLetterC,+ (,) Caseless.LetterD CaseSensitive.CapitalLetterD,+ (,) Caseless.LetterE CaseSensitive.CapitalLetterE,+ (,) Caseless.LetterF CaseSensitive.CapitalLetterF,+ (,) Caseless.LetterG CaseSensitive.CapitalLetterG,+ (,) Caseless.LetterH CaseSensitive.CapitalLetterH,+ (,) Caseless.LetterI CaseSensitive.CapitalLetterI,+ (,) Caseless.LetterJ CaseSensitive.CapitalLetterJ,+ (,) Caseless.LetterK CaseSensitive.CapitalLetterK,+ (,) Caseless.LetterL CaseSensitive.CapitalLetterL,+ (,) Caseless.LetterM CaseSensitive.CapitalLetterM,+ (,) Caseless.LetterN CaseSensitive.CapitalLetterN,+ (,) Caseless.LetterO CaseSensitive.CapitalLetterO,+ (,) Caseless.LetterP CaseSensitive.CapitalLetterP,+ (,) Caseless.LetterQ CaseSensitive.CapitalLetterQ,+ (,) Caseless.LetterR CaseSensitive.CapitalLetterR,+ (,) Caseless.LetterS CaseSensitive.CapitalLetterS,+ (,) Caseless.LetterT CaseSensitive.CapitalLetterT,+ (,) Caseless.LetterU CaseSensitive.CapitalLetterU,+ (,) Caseless.LetterV CaseSensitive.CapitalLetterV,+ (,) Caseless.LetterW CaseSensitive.CapitalLetterW,+ (,) Caseless.LetterX CaseSensitive.CapitalLetterX,+ (,) Caseless.LetterY CaseSensitive.CapitalLetterY,+ (,) Caseless.LetterZ CaseSensitive.CapitalLetterZ ]--nonLetters = (,) "non-letters"- [ (,) Caseless.Null CaseSensitive.Null- , (,) Caseless.StartOfHeading CaseSensitive.StartOfHeading- , (,) Caseless.StartOfText CaseSensitive.StartOfText- , (,) Caseless.EndOfText CaseSensitive.EndOfText- , (,) Caseless.EndOfTransmission CaseSensitive.EndOfTransmission- , (,) Caseless.Enquiry CaseSensitive.Enquiry- , (,) Caseless.Acknowledgement CaseSensitive.Acknowledgement- , (,) Caseless.Bell CaseSensitive.Bell- , (,) Caseless.Backspace CaseSensitive.Backspace- , (,) Caseless.HorizontalTab CaseSensitive.HorizontalTab- , (,) Caseless.LineFeed CaseSensitive.LineFeed- , (,) Caseless.VerticalTab CaseSensitive.VerticalTab- , (,) Caseless.FormFeed CaseSensitive.FormFeed- , (,) Caseless.CarriageReturn CaseSensitive.CarriageReturn- , (,) Caseless.ShiftOut CaseSensitive.ShiftOut- , (,) Caseless.ShiftIn CaseSensitive.ShiftIn- , (,) Caseless.DataLinkEscape CaseSensitive.DataLinkEscape- , (,) Caseless.DeviceControl1 CaseSensitive.DeviceControl1- , (,) Caseless.DeviceControl2 CaseSensitive.DeviceControl2- , (,) Caseless.DeviceControl3 CaseSensitive.DeviceControl3- , (,) Caseless.DeviceControl4 CaseSensitive.DeviceControl4- , (,) Caseless.NegativeAcknowledgement CaseSensitive.NegativeAcknowledgement- , (,) Caseless.SynchronousIdle CaseSensitive.SynchronousIdle- , (,) Caseless.EndOfTransmissionBlock CaseSensitive.EndOfTransmissionBlock- , (,) Caseless.Cancel CaseSensitive.Cancel- , (,) Caseless.EndOfMedium CaseSensitive.EndOfMedium- , (,) Caseless.Substitute CaseSensitive.Substitute- , (,) Caseless.Escape CaseSensitive.Escape- , (,) Caseless.FileSeparator CaseSensitive.FileSeparator- , (,) Caseless.GroupSeparator CaseSensitive.GroupSeparator- , (,) Caseless.RecordSeparator CaseSensitive.RecordSeparator- , (,) Caseless.UnitSeparator CaseSensitive.UnitSeparator- , (,) Caseless.Space CaseSensitive.Space- , (,) Caseless.ExclamationMark CaseSensitive.ExclamationMark- , (,) Caseless.QuotationMark CaseSensitive.QuotationMark- , (,) Caseless.NumberSign CaseSensitive.NumberSign- , (,) Caseless.DollarSign CaseSensitive.DollarSign- , (,) Caseless.PercentSign CaseSensitive.PercentSign- , (,) Caseless.Ampersand CaseSensitive.Ampersand- , (,) Caseless.Apostrophe CaseSensitive.Apostrophe- , (,) Caseless.LeftParenthesis CaseSensitive.LeftParenthesis- , (,) Caseless.RightParenthesis CaseSensitive.RightParenthesis- , (,) Caseless.Asterisk CaseSensitive.Asterisk- , (,) Caseless.PlusSign CaseSensitive.PlusSign- , (,) Caseless.Comma CaseSensitive.Comma- , (,) Caseless.HyphenMinus CaseSensitive.HyphenMinus- , (,) Caseless.FullStop CaseSensitive.FullStop- , (,) Caseless.Slash CaseSensitive.Slash- , (,) Caseless.Digit0 CaseSensitive.Digit0- , (,) Caseless.Digit1 CaseSensitive.Digit1- , (,) Caseless.Digit2 CaseSensitive.Digit2- , (,) Caseless.Digit3 CaseSensitive.Digit3- , (,) Caseless.Digit4 CaseSensitive.Digit4- , (,) Caseless.Digit5 CaseSensitive.Digit5- , (,) Caseless.Digit6 CaseSensitive.Digit6- , (,) Caseless.Digit7 CaseSensitive.Digit7- , (,) Caseless.Digit8 CaseSensitive.Digit8- , (,) Caseless.Digit9 CaseSensitive.Digit9- , (,) Caseless.Colon CaseSensitive.Colon- , (,) Caseless.Semicolon CaseSensitive.Semicolon- , (,) Caseless.LessThanSign CaseSensitive.LessThanSign- , (,) Caseless.EqualsSign CaseSensitive.EqualsSign- , (,) Caseless.GreaterThanSign CaseSensitive.GreaterThanSign- , (,) Caseless.QuestionMark CaseSensitive.QuestionMark- , (,) Caseless.AtSign CaseSensitive.AtSign- , (,) Caseless.LeftSquareBracket CaseSensitive.LeftSquareBracket- , (,) Caseless.Backslash CaseSensitive.Backslash- , (,) Caseless.RightSquareBracket CaseSensitive.RightSquareBracket- , (,) Caseless.Caret CaseSensitive.Caret- , (,) Caseless.Underscore CaseSensitive.Underscore- , (,) Caseless.GraveAccent CaseSensitive.GraveAccent- , (,) Caseless.LeftCurlyBracket CaseSensitive.LeftCurlyBracket- , (,) Caseless.VerticalLine CaseSensitive.VerticalLine- , (,) Caseless.RightCurlyBracket CaseSensitive.RightCurlyBracket- , (,) Caseless.Tilde CaseSensitive.Tilde- , (,) Caseless.Delete CaseSensitive.Delete- ]+nonLetters =+ (,)+ "non-letters"+ [ (,) Caseless.Null CaseSensitive.Null,+ (,) Caseless.StartOfHeading CaseSensitive.StartOfHeading,+ (,) Caseless.StartOfText CaseSensitive.StartOfText,+ (,) Caseless.EndOfText CaseSensitive.EndOfText,+ (,) Caseless.EndOfTransmission CaseSensitive.EndOfTransmission,+ (,) Caseless.Enquiry CaseSensitive.Enquiry,+ (,) Caseless.Acknowledgement CaseSensitive.Acknowledgement,+ (,) Caseless.Bell CaseSensitive.Bell,+ (,) Caseless.Backspace CaseSensitive.Backspace,+ (,) Caseless.HorizontalTab CaseSensitive.HorizontalTab,+ (,) Caseless.LineFeed CaseSensitive.LineFeed,+ (,) Caseless.VerticalTab CaseSensitive.VerticalTab,+ (,) Caseless.FormFeed CaseSensitive.FormFeed,+ (,) Caseless.CarriageReturn CaseSensitive.CarriageReturn,+ (,) Caseless.ShiftOut CaseSensitive.ShiftOut,+ (,) Caseless.ShiftIn CaseSensitive.ShiftIn,+ (,) Caseless.DataLinkEscape CaseSensitive.DataLinkEscape,+ (,) Caseless.DeviceControl1 CaseSensitive.DeviceControl1,+ (,) Caseless.DeviceControl2 CaseSensitive.DeviceControl2,+ (,) Caseless.DeviceControl3 CaseSensitive.DeviceControl3,+ (,) Caseless.DeviceControl4 CaseSensitive.DeviceControl4,+ (,) Caseless.NegativeAcknowledgement CaseSensitive.NegativeAcknowledgement,+ (,) Caseless.SynchronousIdle CaseSensitive.SynchronousIdle,+ (,) Caseless.EndOfTransmissionBlock CaseSensitive.EndOfTransmissionBlock,+ (,) Caseless.Cancel CaseSensitive.Cancel,+ (,) Caseless.EndOfMedium CaseSensitive.EndOfMedium,+ (,) Caseless.Substitute CaseSensitive.Substitute,+ (,) Caseless.Escape CaseSensitive.Escape,+ (,) Caseless.FileSeparator CaseSensitive.FileSeparator,+ (,) Caseless.GroupSeparator CaseSensitive.GroupSeparator,+ (,) Caseless.RecordSeparator CaseSensitive.RecordSeparator,+ (,) Caseless.UnitSeparator CaseSensitive.UnitSeparator,+ (,) Caseless.Space CaseSensitive.Space,+ (,) Caseless.ExclamationMark CaseSensitive.ExclamationMark,+ (,) Caseless.QuotationMark CaseSensitive.QuotationMark,+ (,) Caseless.NumberSign CaseSensitive.NumberSign,+ (,) Caseless.DollarSign CaseSensitive.DollarSign,+ (,) Caseless.PercentSign CaseSensitive.PercentSign,+ (,) Caseless.Ampersand CaseSensitive.Ampersand,+ (,) Caseless.Apostrophe CaseSensitive.Apostrophe,+ (,) Caseless.LeftParenthesis CaseSensitive.LeftParenthesis,+ (,) Caseless.RightParenthesis CaseSensitive.RightParenthesis,+ (,) Caseless.Asterisk CaseSensitive.Asterisk,+ (,) Caseless.PlusSign CaseSensitive.PlusSign,+ (,) Caseless.Comma CaseSensitive.Comma,+ (,) Caseless.HyphenMinus CaseSensitive.HyphenMinus,+ (,) Caseless.FullStop CaseSensitive.FullStop,+ (,) Caseless.Slash CaseSensitive.Slash,+ (,) Caseless.Digit0 CaseSensitive.Digit0,+ (,) Caseless.Digit1 CaseSensitive.Digit1,+ (,) Caseless.Digit2 CaseSensitive.Digit2,+ (,) Caseless.Digit3 CaseSensitive.Digit3,+ (,) Caseless.Digit4 CaseSensitive.Digit4,+ (,) Caseless.Digit5 CaseSensitive.Digit5,+ (,) Caseless.Digit6 CaseSensitive.Digit6,+ (,) Caseless.Digit7 CaseSensitive.Digit7,+ (,) Caseless.Digit8 CaseSensitive.Digit8,+ (,) Caseless.Digit9 CaseSensitive.Digit9,+ (,) Caseless.Colon CaseSensitive.Colon,+ (,) Caseless.Semicolon CaseSensitive.Semicolon,+ (,) Caseless.LessThanSign CaseSensitive.LessThanSign,+ (,) Caseless.EqualsSign CaseSensitive.EqualsSign,+ (,) Caseless.GreaterThanSign CaseSensitive.GreaterThanSign,+ (,) Caseless.QuestionMark CaseSensitive.QuestionMark,+ (,) Caseless.AtSign CaseSensitive.AtSign,+ (,) Caseless.LeftSquareBracket CaseSensitive.LeftSquareBracket,+ (,) Caseless.Backslash CaseSensitive.Backslash,+ (,) Caseless.RightSquareBracket CaseSensitive.RightSquareBracket,+ (,) Caseless.Caret CaseSensitive.Caret,+ (,) Caseless.Underscore CaseSensitive.Underscore,+ (,) Caseless.GraveAccent CaseSensitive.GraveAccent,+ (,) Caseless.LeftCurlyBracket CaseSensitive.LeftCurlyBracket,+ (,) Caseless.VerticalLine CaseSensitive.VerticalLine,+ (,) Caseless.RightCurlyBracket CaseSensitive.RightCurlyBracket,+ (,) Caseless.Tilde CaseSensitive.Tilde,+ (,) Caseless.Delete CaseSensitive.Delete+ ]