{-# LANGUAGE OverloadedStrings, ViewPatterns #-}
module Graphics.Layout.Inline.CSS(
CSSInline(..), Default(..), UnicodeBidi(..), applyFontInline, applyBidi) where
import Data.CSS.Syntax.Tokens (Token(..))
import Stylist (PropertyParser(..))
import qualified Data.Text as Txt
import Data.Text (Text)
import Data.Text.ParagraphLayout.Rich
import Data.Text.Glyphize (Direction(..))
import Graphics.Layout.CSS.Font (Font'(..), hbUnit)
import Data.Char (isSpace)
import Debug.Trace (trace)
data CSSInline = CSSInline Txt.Text TextOptions UnicodeBidi
data UnicodeBidi = BdNormal | BdEmbed | BdOverride | BdIsolate
| BdIsolateOverride | BdPlainText deriving (UnicodeBidi -> UnicodeBidi -> Bool
(UnicodeBidi -> UnicodeBidi -> Bool)
-> (UnicodeBidi -> UnicodeBidi -> Bool) -> Eq UnicodeBidi
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UnicodeBidi -> UnicodeBidi -> Bool
$c/= :: UnicodeBidi -> UnicodeBidi -> Bool
== :: UnicodeBidi -> UnicodeBidi -> Bool
$c== :: UnicodeBidi -> UnicodeBidi -> Bool
Eq, Eq UnicodeBidi
Eq UnicodeBidi =>
(UnicodeBidi -> UnicodeBidi -> Ordering)
-> (UnicodeBidi -> UnicodeBidi -> Bool)
-> (UnicodeBidi -> UnicodeBidi -> Bool)
-> (UnicodeBidi -> UnicodeBidi -> Bool)
-> (UnicodeBidi -> UnicodeBidi -> Bool)
-> (UnicodeBidi -> UnicodeBidi -> UnicodeBidi)
-> (UnicodeBidi -> UnicodeBidi -> UnicodeBidi)
-> Ord UnicodeBidi
UnicodeBidi -> UnicodeBidi -> Bool
UnicodeBidi -> UnicodeBidi -> Ordering
UnicodeBidi -> UnicodeBidi -> UnicodeBidi
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
min :: UnicodeBidi -> UnicodeBidi -> UnicodeBidi
$cmin :: UnicodeBidi -> UnicodeBidi -> UnicodeBidi
max :: UnicodeBidi -> UnicodeBidi -> UnicodeBidi
$cmax :: UnicodeBidi -> UnicodeBidi -> UnicodeBidi
>= :: UnicodeBidi -> UnicodeBidi -> Bool
$c>= :: UnicodeBidi -> UnicodeBidi -> Bool
> :: UnicodeBidi -> UnicodeBidi -> Bool
$c> :: UnicodeBidi -> UnicodeBidi -> Bool
<= :: UnicodeBidi -> UnicodeBidi -> Bool
$c<= :: UnicodeBidi -> UnicodeBidi -> Bool
< :: UnicodeBidi -> UnicodeBidi -> Bool
$c< :: UnicodeBidi -> UnicodeBidi -> Bool
compare :: UnicodeBidi -> UnicodeBidi -> Ordering
$ccompare :: UnicodeBidi -> UnicodeBidi -> Ordering
$cp1Ord :: Eq UnicodeBidi
Ord, Int -> UnicodeBidi
UnicodeBidi -> Int
UnicodeBidi -> [UnicodeBidi]
UnicodeBidi -> UnicodeBidi
UnicodeBidi -> UnicodeBidi -> [UnicodeBidi]
UnicodeBidi -> UnicodeBidi -> UnicodeBidi -> [UnicodeBidi]
(UnicodeBidi -> UnicodeBidi)
-> (UnicodeBidi -> UnicodeBidi)
-> (Int -> UnicodeBidi)
-> (UnicodeBidi -> Int)
-> (UnicodeBidi -> [UnicodeBidi])
-> (UnicodeBidi -> UnicodeBidi -> [UnicodeBidi])
-> (UnicodeBidi -> UnicodeBidi -> [UnicodeBidi])
-> (UnicodeBidi -> UnicodeBidi -> UnicodeBidi -> [UnicodeBidi])
-> Enum UnicodeBidi
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: UnicodeBidi -> UnicodeBidi -> UnicodeBidi -> [UnicodeBidi]
$cenumFromThenTo :: UnicodeBidi -> UnicodeBidi -> UnicodeBidi -> [UnicodeBidi]
enumFromTo :: UnicodeBidi -> UnicodeBidi -> [UnicodeBidi]
$cenumFromTo :: UnicodeBidi -> UnicodeBidi -> [UnicodeBidi]
enumFromThen :: UnicodeBidi -> UnicodeBidi -> [UnicodeBidi]
$cenumFromThen :: UnicodeBidi -> UnicodeBidi -> [UnicodeBidi]
enumFrom :: UnicodeBidi -> [UnicodeBidi]
$cenumFrom :: UnicodeBidi -> [UnicodeBidi]
fromEnum :: UnicodeBidi -> Int
$cfromEnum :: UnicodeBidi -> Int
toEnum :: Int -> UnicodeBidi
$ctoEnum :: Int -> UnicodeBidi
pred :: UnicodeBidi -> UnicodeBidi
$cpred :: UnicodeBidi -> UnicodeBidi
succ :: UnicodeBidi -> UnicodeBidi
$csucc :: UnicodeBidi -> UnicodeBidi
Enum, ReadPrec [UnicodeBidi]
ReadPrec UnicodeBidi
Int -> ReadS UnicodeBidi
ReadS [UnicodeBidi]
(Int -> ReadS UnicodeBidi)
-> ReadS [UnicodeBidi]
-> ReadPrec UnicodeBidi
-> ReadPrec [UnicodeBidi]
-> Read UnicodeBidi
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UnicodeBidi]
$creadListPrec :: ReadPrec [UnicodeBidi]
readPrec :: ReadPrec UnicodeBidi
$creadPrec :: ReadPrec UnicodeBidi
readList :: ReadS [UnicodeBidi]
$creadList :: ReadS [UnicodeBidi]
readsPrec :: Int -> ReadS UnicodeBidi
$creadsPrec :: Int -> ReadS UnicodeBidi
Read, Int -> UnicodeBidi -> ShowS
[UnicodeBidi] -> ShowS
UnicodeBidi -> String
(Int -> UnicodeBidi -> ShowS)
-> (UnicodeBidi -> String)
-> ([UnicodeBidi] -> ShowS)
-> Show UnicodeBidi
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UnicodeBidi] -> ShowS
$cshowList :: [UnicodeBidi] -> ShowS
show :: UnicodeBidi -> String
$cshow :: UnicodeBidi -> String
showsPrec :: Int -> UnicodeBidi -> ShowS
$cshowsPrec :: Int -> UnicodeBidi -> ShowS
Show)
instance PropertyParser CSSInline where
temp :: CSSInline
temp = Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline "" (Direction -> TextOptions
defaultTextOptions Direction
DirLTR) UnicodeBidi
BdNormal
inherit :: CSSInline -> CSSInline
inherit (CSSInline _ opts :: TextOptions
opts _) = Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline "" TextOptions
opts UnicodeBidi
BdNormal
priority :: CSSInline -> [Text]
priority _ = ["direction"]
longhand :: CSSInline -> CSSInline -> Text -> [Token] -> Maybe CSSInline
longhand _ (CSSInline _ opts :: TextOptions
opts bidi :: UnicodeBidi
bidi) "content" [Ident "initial"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline "" TextOptions
opts UnicodeBidi
bidi
longhand _ (CSSInline _ opts :: TextOptions
opts bidi :: UnicodeBidi
bidi) "content" toks :: [Token]
toks
| (Token -> Bool) -> [Token] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all Token -> Bool
isString [Token]
toks =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline ([Text] -> Text
Txt.concat [Text
x | String x :: Text
x <- [Token]
toks]) TextOptions
opts UnicodeBidi
bidi
where
isString :: Token -> Bool
isString (String _) = Bool
True
isString _ = Bool
False
longhand _ (CSSInline t :: Text
t o :: TextOptions
o b :: UnicodeBidi
b) "-argo-lang" [Ident kw :: Text
kw]
| Text
kw Text -> [Text] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` ["initial", "auto"] = CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
t TextOptions
o {textLanguage :: String
textLanguage=""} UnicodeBidi
b
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts bidi :: UnicodeBidi
bidi) "-argo-lang" [String x :: Text
x] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts { textLanguage :: String
textLanguage = Text -> String
Txt.unpack Text
x } UnicodeBidi
bidi
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts bidi :: UnicodeBidi
bidi) "direction" [Ident "ltr"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts { textDirection :: Direction
textDirection = Direction
DirLTR } UnicodeBidi
bidi
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts bidi :: UnicodeBidi
bidi) "direction" [Ident "rtl"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts { textDirection :: Direction
textDirection = Direction
DirRTL } UnicodeBidi
bidi
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts bidi :: UnicodeBidi
bidi) "direction" [Ident "initial"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts { textDirection :: Direction
textDirection = Direction
DirLTR } UnicodeBidi
bidi
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts _) "unicode-bidi" [Ident "initial"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts UnicodeBidi
BdNormal
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts _) "unicode-bidi" [Ident "normal"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts UnicodeBidi
BdNormal
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts _) "unicode-bidi" [Ident "embed"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts UnicodeBidi
BdEmbed
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts _) "unicode-bidi" [Ident "isolate"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts UnicodeBidi
BdIsolate
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts _) "unicode-bidi" [Ident "bidi-override"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts UnicodeBidi
BdOverride
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts _) "unicode-bidi" [Ident "isolate-override"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts UnicodeBidi
BdIsolateOverride
longhand _ (CSSInline txt :: Text
txt opts :: TextOptions
opts _) "unicode-bidi" [Ident "plaintext"] =
CSSInline -> Maybe CSSInline
forall a. a -> Maybe a
Just (CSSInline -> Maybe CSSInline) -> CSSInline -> Maybe CSSInline
forall a b. (a -> b) -> a -> b
$ Text -> TextOptions -> UnicodeBidi -> CSSInline
CSSInline Text
txt TextOptions
opts UnicodeBidi
BdPlainText
longhand _ _ _ _ = Maybe CSSInline
forall a. Maybe a
Nothing
applyFontInline :: TextOptions -> Font' -> TextOptions
applyFontInline :: TextOptions -> Font' -> TextOptions
applyFontInline opts :: TextOptions
opts font :: Font'
font = TextOptions
opts {
textFont :: Font
textFont = Font' -> Font
hbFont Font'
font,
textLineHeight :: LineHeight
textLineHeight = Int32 -> LineHeight
Absolute (Int32 -> LineHeight) -> Int32 -> LineHeight
forall a b. (a -> b) -> a -> b
$ Int -> Int32
forall a. Enum a => Int -> a
toEnum (Int -> Int32) -> Int -> Int32
forall a b. (a -> b) -> a -> b
$ Double -> Int
forall a. Enum a => a -> Int
fromEnum (Double -> Int) -> Double -> Int
forall a b. (a -> b) -> a -> b
$ Font' -> Double
lineheight Font'
font Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
hbUnit
}
applyBidi :: Default d => CSSInline -> [InnerNode Text d] -> [InnerNode Text d]
applyBidi :: CSSInline -> [InnerNode Text d] -> [InnerNode Text d]
applyBidi (CSSInline _ _ BdNormal) txt :: [InnerNode Text d]
txt = [InnerNode Text d]
txt
applyBidi (CSSInline _ (TextOptions -> Direction
textDirection -> Direction
DirLTR) BdEmbed) txt :: [InnerNode Text d]
txt =
InnerNode Text d
forall a. Default a => InnerNode Text a
chLREmbedInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:[InnerNode Text d]
txt[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDir
applyBidi (CSSInline _ (TextOptions -> Direction
textDirection -> Direction
DirRTL) BdEmbed) txt :: [InnerNode Text d]
txt =
InnerNode Text d
forall a. Default a => InnerNode Text a
chRLEmbedInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:[InnerNode Text d]
txt[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDir
applyBidi (CSSInline _ (TextOptions -> Direction
textDirection -> Direction
DirLTR) BdIsolate) txt :: [InnerNode Text d]
txt =
InnerNode Text d
forall a. Default a => InnerNode Text a
chLRIsolateInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:[InnerNode Text d]
txt[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDirIsolate
applyBidi (CSSInline _ (TextOptions -> Direction
textDirection -> Direction
DirRTL) BdIsolate) txt :: [InnerNode Text d]
txt =
InnerNode Text d
forall a. Default a => InnerNode Text a
chRLIsolateInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:[InnerNode Text d]
txt[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDirIsolate
applyBidi (CSSInline _ (TextOptions -> Direction
textDirection -> Direction
DirLTR) BdOverride) txt :: [InnerNode Text d]
txt =
InnerNode Text d
forall a. Default a => InnerNode Text a
chLROverrideInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:[InnerNode Text d]
txt[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDir
applyBidi (CSSInline _ (TextOptions -> Direction
textDirection -> Direction
DirRTL) BdOverride) txt :: [InnerNode Text d]
txt =
InnerNode Text d
forall a. Default a => InnerNode Text a
chRLOverrideInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:[InnerNode Text d]
txt[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDir
applyBidi (CSSInline _ (TextOptions -> Direction
textDirection -> Direction
DirLTR) BdIsolateOverride) txt :: [InnerNode Text d]
txt =
InnerNode Text d
forall a. Default a => InnerNode Text a
ch1stStrongIsolateInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:InnerNode Text d
forall a. Default a => InnerNode Text a
chLROverrideInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:[InnerNode Text d]
txt[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDir[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDirIsolate
applyBidi (CSSInline _ (TextOptions -> Direction
textDirection -> Direction
DirRTL) BdIsolateOverride) txt :: [InnerNode Text d]
txt =
InnerNode Text d
forall a. Default a => InnerNode Text a
ch1stStrongIsolateInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:InnerNode Text d
forall a. Default a => InnerNode Text a
chRLOverrideInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:[InnerNode Text d]
txt[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDir[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDirIsolate
applyBidi (CSSInline _ _ BdPlainText) txt :: [InnerNode Text d]
txt =
InnerNode Text d
forall a. Default a => InnerNode Text a
ch1stStrongIsolateInnerNode Text d -> [InnerNode Text d] -> [InnerNode Text d]
forall a. a -> [a] -> [a]
:[InnerNode Text d]
txt[InnerNode Text d] -> InnerNode Text d -> [InnerNode Text d]
forall a. [a] -> a -> [a]
+:InnerNode Text d
forall a. Default a => InnerNode Text a
chPopDirIsolate
applyBidi (CSSInline _ (TextOptions -> Direction
textDirection -> Direction
dir) _) txt :: [InnerNode Text d]
txt =
String -> [InnerNode Text d] -> [InnerNode Text d]
forall a. String -> a -> a
trace ("Unexpected direction! " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Direction -> String
forall a. Show a => a -> String
show Direction
dir) [InnerNode Text d]
txt
a :: [a]
a +: :: [a] -> a -> [a]
+: b :: a
b = [a]
a [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a
b]
chLREmbed, chRLEmbed, chLROverride, chRLOverride, chPopDir,
chLRIsolate, chRLIsolate, ch1stStrongIsolate, chPopDirIsolate :: Default a =>
InnerNode Text a
chLREmbed :: InnerNode Text a
chLREmbed = Char -> InnerNode Text a
forall d. Default d => Char -> InnerNode Text d
leaf '\x202A'
chRLEmbed :: InnerNode Text a
chRLEmbed = Char -> InnerNode Text a
forall d. Default d => Char -> InnerNode Text d
leaf '\x202B'
chLROverride :: InnerNode Text a
chLROverride = Char -> InnerNode Text a
forall d. Default d => Char -> InnerNode Text d
leaf '\x202D'
chRLOverride :: InnerNode Text a
chRLOverride = Char -> InnerNode Text a
forall d. Default d => Char -> InnerNode Text d
leaf '\x202E'
chPopDir :: InnerNode Text a
chPopDir = Char -> InnerNode Text a
forall d. Default d => Char -> InnerNode Text d
leaf '\x202C'
chLRIsolate :: InnerNode Text a
chLRIsolate = Char -> InnerNode Text a
forall d. Default d => Char -> InnerNode Text d
leaf '\x2066'
chRLIsolate :: InnerNode Text a
chRLIsolate = Char -> InnerNode Text a
forall d. Default d => Char -> InnerNode Text d
leaf '\x2067'
ch1stStrongIsolate :: InnerNode Text a
ch1stStrongIsolate = Char -> InnerNode Text a
forall d. Default d => Char -> InnerNode Text d
leaf '\x2068'
chPopDirIsolate :: InnerNode Text a
chPopDirIsolate = Char -> InnerNode Text a
forall d. Default d => Char -> InnerNode Text d
leaf '\x2069'
leaf :: Char -> InnerNode Text d
leaf ch :: Char
ch = d -> Text -> InnerNode Text d
forall t d. d -> t -> InnerNode t d
TextSequence d
forall a. Default a => a
def (Text -> InnerNode Text d) -> Text -> InnerNode Text d
forall a b. (a -> b) -> a -> b
$ Char -> Text
Txt.singleton Char
ch
class Default a where
def :: a