diff --git a/src/Data/String/CodePoints.purs b/src/Data/String/CodePoints.purs index 7fe51f3..18567c7 100644 --- a/src/Data/String/CodePoints.purs +++ b/src/Data/String/CodePoints.purs @@ -8,6 +8,7 @@ module Data.String.CodePoints , codePointAt , codePointFromInt , codePointToInt + , codePointFromChar , count , drop , dropWhile @@ -28,6 +29,7 @@ module Data.String.CodePoints import Prelude import Data.Array as Array +import Data.Char (toCharCode) import Data.Char as Char import Data.Maybe (Maybe(Just, Nothing)) import Data.String as String @@ -60,6 +62,16 @@ codePointFromInt n = Nothing codePointToInt :: CodePoint -> Int codePointToInt (CodePoint n) = n +-- | Creates a CodePoint from a given Char. +-- | +-- | ```purescript +-- | >>> codePointFromChar 'B' +-- | CodePoint 0x42 -- represents 'B' +-- | ``` +-- | +codePointFromChar :: Char -> CodePoint +codePointFromChar = toCharCode >>> CodePoint + unsurrogate :: Int -> Int -> CodePoint unsurrogate lead trail = CodePoint ((lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000) diff --git a/test/Test/Data/String/CodePoints.purs b/test/Test/Data/String/CodePoints.purs index 7a6aef0..d74ad51 100644 --- a/test/Test/Data/String/CodePoints.purs +++ b/test/Test/Data/String/CodePoints.purs @@ -5,6 +5,7 @@ import Prelude import Control.Monad.Eff (Eff) import Control.Monad.Eff.Console (CONSOLE, log) +import Data.Char (fromCharCode) import Data.Maybe (Maybe(..), isNothing, maybe) import Data.String.CodePoints @@ -26,6 +27,11 @@ testStringCodePoints = do assert $ codePointAt 6 str == (codePointFromInt 0x7A) assert $ codePointAt 7 str == Nothing + log "codePointFromChar" + assert $ Just (codePointFromChar 'A') == (codePointFromInt 65) + assert $ Just (codePointFromChar $ fromCharCode 0) == codePointFromInt 0 + assert $ Just (codePointFromChar $ fromCharCode 0xFFFF) == codePointFromInt 0xFFFF + log "count" assert $ count (\_ -> true) "" == 0 assert $ count (\_ -> false) str == 0