module Language.JSON.String.Tokens import Data.String.Extraimport Text.Token %default total public exportdata JSONStringTokenKind = JSTQuote | JSTChar | JSTSimpleEscape | JSTUnicodeEscape public exportJSONStringToken : TypeJSONStringToken = Token JSONStringTokenKind public exportEq JSONStringTokenKind where (==) JSTQuote JSTQuote = True (==) JSTChar JSTChar = True (==) JSTSimpleEscape JSTSimpleEscape = True (==) JSTUnicodeEscape JSTUnicodeEscape = True (==) _ _ = False privatecharValue : String -> CharcharValue x = case index 0 x of Nothing => '\NUL' Just c => c privatesimpleEscapeValue : String -> CharsimpleEscapeValue x = case index 1 x of Nothing => '\NUL' Just c => case c of '"' => '"' '\\' => '\\' '/' => '/' 'b' => '\b' 'f' => '\f' 'n' => '\n' 'r' => '\r' 't' => '\t' _ => '\NUL' privateunicodeEscapeValue : String -> CharunicodeEscapeValue x = chr $ cast ("0x" ++ drop 2 x) public exportTokenKind JSONStringTokenKind where TokType JSTQuote = () TokType JSTChar = Char TokType JSTSimpleEscape = Char TokType JSTUnicodeEscape = Char tokValue JSTQuote = const () tokValue JSTChar = charValue tokValue JSTSimpleEscape = simpleEscapeValue tokValue JSTUnicodeEscape = unicodeEscapeValue
module Language.JSON.String.Tokens
import Data.String.Extra
import Text.Token
%default total
public export
data JSONStringTokenKind
= JSTQuote
| JSTChar
| JSTSimpleEscape
| JSTUnicodeEscape
public export
JSONStringToken : Type
JSONStringToken = Token JSONStringTokenKind
public export
Eq JSONStringTokenKind where
(==) JSTQuote JSTQuote = True
(==) JSTChar JSTChar = True
(==) JSTSimpleEscape JSTSimpleEscape = True
(==) JSTUnicodeEscape JSTUnicodeEscape = True
(==) _ _ = False
private
charValue : String -> Char
charValue x = case index 0 x of
Nothing => '\NUL'
Just c => c
private
simpleEscapeValue : String -> Char
simpleEscapeValue x
= case index 1 x of
Nothing => '\NUL'
Just c => case c of
'"' => '"'
'\\' => '\\'
'/' => '/'
'b' => '\b'
'f' => '\f'
'n' => '\n'
'r' => '\r'
't' => '\t'
_ => '\NUL'
private
unicodeEscapeValue : String -> Char
unicodeEscapeValue x = chr $ cast ("0x" ++ drop 2 x)
public export
TokenKind JSONStringTokenKind where
TokType JSTQuote = ()
TokType JSTChar = Char
TokType JSTSimpleEscape = Char
TokType JSTUnicodeEscape = Char
tokValue JSTQuote = const ()
tokValue JSTChar = charValue
tokValue JSTSimpleEscape = simpleEscapeValue
tokValue JSTUnicodeEscape = unicodeEscapeValue