module Data.Char.Devanagari.DevanagariTokens (
    DevanagariToken(..)
  , Vowel(..)
  , Consonant(..)
  , Digit(..)
)

where

{-
  This module contains a normalized representation of the Devanagari script.

  A Tokenizer for Devanagari or one of its roman transliterations will parse a UTF8 Text representation and
  produce a Sequence of DevanagariToken instances as output.

  A Generator for Devanagari or one of its roman transliterations will take a sequence of DevanagariToken instances
  as input and will generate a UTF8 Text representation as output.
-}

data DevanagariToken
  = Vow Vowel | Cons Consonant | Dig Digit | Anusvara | Anunasika | Visarga | Avagraha | Virama | OM 
  | PurnaViram | DeerghViram | ZWNJ | ZWJ | Unmapped Char
  deriving (DevanagariToken -> DevanagariToken -> Bool
(DevanagariToken -> DevanagariToken -> Bool)
-> (DevanagariToken -> DevanagariToken -> Bool)
-> Eq DevanagariToken
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DevanagariToken -> DevanagariToken -> Bool
== :: DevanagariToken -> DevanagariToken -> Bool
$c/= :: DevanagariToken -> DevanagariToken -> Bool
/= :: DevanagariToken -> DevanagariToken -> Bool
Eq, Eq DevanagariToken
Eq DevanagariToken =>
(DevanagariToken -> DevanagariToken -> Ordering)
-> (DevanagariToken -> DevanagariToken -> Bool)
-> (DevanagariToken -> DevanagariToken -> Bool)
-> (DevanagariToken -> DevanagariToken -> Bool)
-> (DevanagariToken -> DevanagariToken -> Bool)
-> (DevanagariToken -> DevanagariToken -> DevanagariToken)
-> (DevanagariToken -> DevanagariToken -> DevanagariToken)
-> Ord DevanagariToken
DevanagariToken -> DevanagariToken -> Bool
DevanagariToken -> DevanagariToken -> Ordering
DevanagariToken -> DevanagariToken -> DevanagariToken
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: DevanagariToken -> DevanagariToken -> Ordering
compare :: DevanagariToken -> DevanagariToken -> Ordering
$c< :: DevanagariToken -> DevanagariToken -> Bool
< :: DevanagariToken -> DevanagariToken -> Bool
$c<= :: DevanagariToken -> DevanagariToken -> Bool
<= :: DevanagariToken -> DevanagariToken -> Bool
$c> :: DevanagariToken -> DevanagariToken -> Bool
> :: DevanagariToken -> DevanagariToken -> Bool
$c>= :: DevanagariToken -> DevanagariToken -> Bool
>= :: DevanagariToken -> DevanagariToken -> Bool
$cmax :: DevanagariToken -> DevanagariToken -> DevanagariToken
max :: DevanagariToken -> DevanagariToken -> DevanagariToken
$cmin :: DevanagariToken -> DevanagariToken -> DevanagariToken
min :: DevanagariToken -> DevanagariToken -> DevanagariToken
Ord, Int -> DevanagariToken -> ShowS
[DevanagariToken] -> ShowS
DevanagariToken -> String
(Int -> DevanagariToken -> ShowS)
-> (DevanagariToken -> String)
-> ([DevanagariToken] -> ShowS)
-> Show DevanagariToken
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DevanagariToken -> ShowS
showsPrec :: Int -> DevanagariToken -> ShowS
$cshow :: DevanagariToken -> String
show :: DevanagariToken -> String
$cshowList :: [DevanagariToken] -> ShowS
showList :: [DevanagariToken] -> ShowS
Show)

data Vowel
  = A | AA | I | II | U | UU | RI | RII | LI | LII | E | O | AI | AU
  deriving (Vowel -> Vowel -> Bool
(Vowel -> Vowel -> Bool) -> (Vowel -> Vowel -> Bool) -> Eq Vowel
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Vowel -> Vowel -> Bool
== :: Vowel -> Vowel -> Bool
$c/= :: Vowel -> Vowel -> Bool
/= :: Vowel -> Vowel -> Bool
Eq, Eq Vowel
Eq Vowel =>
(Vowel -> Vowel -> Ordering)
-> (Vowel -> Vowel -> Bool)
-> (Vowel -> Vowel -> Bool)
-> (Vowel -> Vowel -> Bool)
-> (Vowel -> Vowel -> Bool)
-> (Vowel -> Vowel -> Vowel)
-> (Vowel -> Vowel -> Vowel)
-> Ord Vowel
Vowel -> Vowel -> Bool
Vowel -> Vowel -> Ordering
Vowel -> Vowel -> Vowel
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Vowel -> Vowel -> Ordering
compare :: Vowel -> Vowel -> Ordering
$c< :: Vowel -> Vowel -> Bool
< :: Vowel -> Vowel -> Bool
$c<= :: Vowel -> Vowel -> Bool
<= :: Vowel -> Vowel -> Bool
$c> :: Vowel -> Vowel -> Bool
> :: Vowel -> Vowel -> Bool
$c>= :: Vowel -> Vowel -> Bool
>= :: Vowel -> Vowel -> Bool
$cmax :: Vowel -> Vowel -> Vowel
max :: Vowel -> Vowel -> Vowel
$cmin :: Vowel -> Vowel -> Vowel
min :: Vowel -> Vowel -> Vowel
Ord, Vowel
Vowel -> Vowel -> Bounded Vowel
forall a. a -> a -> Bounded a
$cminBound :: Vowel
minBound :: Vowel
$cmaxBound :: Vowel
maxBound :: Vowel
Bounded, Int -> Vowel
Vowel -> Int
Vowel -> [Vowel]
Vowel -> Vowel
Vowel -> Vowel -> [Vowel]
Vowel -> Vowel -> Vowel -> [Vowel]
(Vowel -> Vowel)
-> (Vowel -> Vowel)
-> (Int -> Vowel)
-> (Vowel -> Int)
-> (Vowel -> [Vowel])
-> (Vowel -> Vowel -> [Vowel])
-> (Vowel -> Vowel -> [Vowel])
-> (Vowel -> Vowel -> Vowel -> [Vowel])
-> Enum Vowel
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Vowel -> Vowel
succ :: Vowel -> Vowel
$cpred :: Vowel -> Vowel
pred :: Vowel -> Vowel
$ctoEnum :: Int -> Vowel
toEnum :: Int -> Vowel
$cfromEnum :: Vowel -> Int
fromEnum :: Vowel -> Int
$cenumFrom :: Vowel -> [Vowel]
enumFrom :: Vowel -> [Vowel]
$cenumFromThen :: Vowel -> Vowel -> [Vowel]
enumFromThen :: Vowel -> Vowel -> [Vowel]
$cenumFromTo :: Vowel -> Vowel -> [Vowel]
enumFromTo :: Vowel -> Vowel -> [Vowel]
$cenumFromThenTo :: Vowel -> Vowel -> Vowel -> [Vowel]
enumFromThenTo :: Vowel -> Vowel -> Vowel -> [Vowel]
Enum, Int -> Vowel -> ShowS
[Vowel] -> ShowS
Vowel -> String
(Int -> Vowel -> ShowS)
-> (Vowel -> String) -> ([Vowel] -> ShowS) -> Show Vowel
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Vowel -> ShowS
showsPrec :: Int -> Vowel -> ShowS
$cshow :: Vowel -> String
show :: Vowel -> String
$cshowList :: [Vowel] -> ShowS
showList :: [Vowel] -> ShowS
Show)

data Consonant
  = K | C | Tdot | T | P | G | J | Ddot | D | B | Ntop | Ntild
  | Ndot | N | M | H | Y | R | L | V | Z | F | Stop | Sdot | S
  | KH | CH | TdotH | TH | PH | GH | JH | DdotH | DH | BH| Gtop
  deriving (Consonant -> Consonant -> Bool
(Consonant -> Consonant -> Bool)
-> (Consonant -> Consonant -> Bool) -> Eq Consonant
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Consonant -> Consonant -> Bool
== :: Consonant -> Consonant -> Bool
$c/= :: Consonant -> Consonant -> Bool
/= :: Consonant -> Consonant -> Bool
Eq, Eq Consonant
Eq Consonant =>
(Consonant -> Consonant -> Ordering)
-> (Consonant -> Consonant -> Bool)
-> (Consonant -> Consonant -> Bool)
-> (Consonant -> Consonant -> Bool)
-> (Consonant -> Consonant -> Bool)
-> (Consonant -> Consonant -> Consonant)
-> (Consonant -> Consonant -> Consonant)
-> Ord Consonant
Consonant -> Consonant -> Bool
Consonant -> Consonant -> Ordering
Consonant -> Consonant -> Consonant
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Consonant -> Consonant -> Ordering
compare :: Consonant -> Consonant -> Ordering
$c< :: Consonant -> Consonant -> Bool
< :: Consonant -> Consonant -> Bool
$c<= :: Consonant -> Consonant -> Bool
<= :: Consonant -> Consonant -> Bool
$c> :: Consonant -> Consonant -> Bool
> :: Consonant -> Consonant -> Bool
$c>= :: Consonant -> Consonant -> Bool
>= :: Consonant -> Consonant -> Bool
$cmax :: Consonant -> Consonant -> Consonant
max :: Consonant -> Consonant -> Consonant
$cmin :: Consonant -> Consonant -> Consonant
min :: Consonant -> Consonant -> Consonant
Ord, Consonant
Consonant -> Consonant -> Bounded Consonant
forall a. a -> a -> Bounded a
$cminBound :: Consonant
minBound :: Consonant
$cmaxBound :: Consonant
maxBound :: Consonant
Bounded, Int -> Consonant
Consonant -> Int
Consonant -> [Consonant]
Consonant -> Consonant
Consonant -> Consonant -> [Consonant]
Consonant -> Consonant -> Consonant -> [Consonant]
(Consonant -> Consonant)
-> (Consonant -> Consonant)
-> (Int -> Consonant)
-> (Consonant -> Int)
-> (Consonant -> [Consonant])
-> (Consonant -> Consonant -> [Consonant])
-> (Consonant -> Consonant -> [Consonant])
-> (Consonant -> Consonant -> Consonant -> [Consonant])
-> Enum Consonant
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Consonant -> Consonant
succ :: Consonant -> Consonant
$cpred :: Consonant -> Consonant
pred :: Consonant -> Consonant
$ctoEnum :: Int -> Consonant
toEnum :: Int -> Consonant
$cfromEnum :: Consonant -> Int
fromEnum :: Consonant -> Int
$cenumFrom :: Consonant -> [Consonant]
enumFrom :: Consonant -> [Consonant]
$cenumFromThen :: Consonant -> Consonant -> [Consonant]
enumFromThen :: Consonant -> Consonant -> [Consonant]
$cenumFromTo :: Consonant -> Consonant -> [Consonant]
enumFromTo :: Consonant -> Consonant -> [Consonant]
$cenumFromThenTo :: Consonant -> Consonant -> Consonant -> [Consonant]
enumFromThenTo :: Consonant -> Consonant -> Consonant -> [Consonant]
Enum, Int -> Consonant -> ShowS
[Consonant] -> ShowS
Consonant -> String
(Int -> Consonant -> ShowS)
-> (Consonant -> String)
-> ([Consonant] -> ShowS)
-> Show Consonant
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Consonant -> ShowS
showsPrec :: Int -> Consonant -> ShowS
$cshow :: Consonant -> String
show :: Consonant -> String
$cshowList :: [Consonant] -> ShowS
showList :: [Consonant] -> ShowS
Show)

data Digit = ZERO | ONE | TWO | THREE | FOUR | FIVE | SIX | SEVEN | EIGHT | NINE
  deriving (Digit -> Digit -> Bool
(Digit -> Digit -> Bool) -> (Digit -> Digit -> Bool) -> Eq Digit
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Digit -> Digit -> Bool
== :: Digit -> Digit -> Bool
$c/= :: Digit -> Digit -> Bool
/= :: Digit -> Digit -> Bool
Eq, Eq Digit
Eq Digit =>
(Digit -> Digit -> Ordering)
-> (Digit -> Digit -> Bool)
-> (Digit -> Digit -> Bool)
-> (Digit -> Digit -> Bool)
-> (Digit -> Digit -> Bool)
-> (Digit -> Digit -> Digit)
-> (Digit -> Digit -> Digit)
-> Ord Digit
Digit -> Digit -> Bool
Digit -> Digit -> Ordering
Digit -> Digit -> Digit
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Digit -> Digit -> Ordering
compare :: Digit -> Digit -> Ordering
$c< :: Digit -> Digit -> Bool
< :: Digit -> Digit -> Bool
$c<= :: Digit -> Digit -> Bool
<= :: Digit -> Digit -> Bool
$c> :: Digit -> Digit -> Bool
> :: Digit -> Digit -> Bool
$c>= :: Digit -> Digit -> Bool
>= :: Digit -> Digit -> Bool
$cmax :: Digit -> Digit -> Digit
max :: Digit -> Digit -> Digit
$cmin :: Digit -> Digit -> Digit
min :: Digit -> Digit -> Digit
Ord, Digit
Digit -> Digit -> Bounded Digit
forall a. a -> a -> Bounded a
$cminBound :: Digit
minBound :: Digit
$cmaxBound :: Digit
maxBound :: Digit
Bounded, Int -> Digit
Digit -> Int
Digit -> [Digit]
Digit -> Digit
Digit -> Digit -> [Digit]
Digit -> Digit -> Digit -> [Digit]
(Digit -> Digit)
-> (Digit -> Digit)
-> (Int -> Digit)
-> (Digit -> Int)
-> (Digit -> [Digit])
-> (Digit -> Digit -> [Digit])
-> (Digit -> Digit -> [Digit])
-> (Digit -> Digit -> Digit -> [Digit])
-> Enum Digit
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Digit -> Digit
succ :: Digit -> Digit
$cpred :: Digit -> Digit
pred :: Digit -> Digit
$ctoEnum :: Int -> Digit
toEnum :: Int -> Digit
$cfromEnum :: Digit -> Int
fromEnum :: Digit -> Int
$cenumFrom :: Digit -> [Digit]
enumFrom :: Digit -> [Digit]
$cenumFromThen :: Digit -> Digit -> [Digit]
enumFromThen :: Digit -> Digit -> [Digit]
$cenumFromTo :: Digit -> Digit -> [Digit]
enumFromTo :: Digit -> Digit -> [Digit]
$cenumFromThenTo :: Digit -> Digit -> Digit -> [Digit]
enumFromThenTo :: Digit -> Digit -> Digit -> [Digit]
Enum, Int -> Digit -> ShowS
[Digit] -> ShowS
Digit -> String
(Int -> Digit -> ShowS)
-> (Digit -> String) -> ([Digit] -> ShowS) -> Show Digit
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Digit -> ShowS
showsPrec :: Int -> Digit -> ShowS
$cshow :: Digit -> String
show :: Digit -> String
$cshowList :: [Digit] -> ShowS
showList :: [Digit] -> ShowS
Show)