module Text.WideString (
WideBuilder(..),
wbUnpack,
wbToText,
wbFromText
) where
import Data.Text (Text)
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Builder as TB
import Text.DocLayout (realLength)
data WideBuilder = WideBuilder
{ WideBuilder -> Builder
wbBuilder :: !TB.Builder
, WideBuilder -> Int
wbWidth :: !Int
} deriving (Int -> WideBuilder -> ShowS
[WideBuilder] -> ShowS
WideBuilder -> String
(Int -> WideBuilder -> ShowS)
-> (WideBuilder -> String)
-> ([WideBuilder] -> ShowS)
-> Show WideBuilder
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> WideBuilder -> ShowS
showsPrec :: Int -> WideBuilder -> ShowS
$cshow :: WideBuilder -> String
show :: WideBuilder -> String
$cshowList :: [WideBuilder] -> ShowS
showList :: [WideBuilder] -> ShowS
Show)
instance Semigroup WideBuilder where
WideBuilder Builder
x Int
i <> :: WideBuilder -> WideBuilder -> WideBuilder
<> WideBuilder Builder
y Int
j = Builder -> Int -> WideBuilder
WideBuilder (Builder
x Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Builder
y) (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
j)
instance Monoid WideBuilder where
mempty :: WideBuilder
mempty = Builder -> Int -> WideBuilder
WideBuilder Builder
forall a. Monoid a => a
mempty Int
0
wbToText :: WideBuilder -> Text
wbToText :: WideBuilder -> Text
wbToText = LazyText -> Text
TL.toStrict (LazyText -> Text)
-> (WideBuilder -> LazyText) -> WideBuilder -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> LazyText
TB.toLazyText (Builder -> LazyText)
-> (WideBuilder -> Builder) -> WideBuilder -> LazyText
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WideBuilder -> Builder
wbBuilder
wbFromText :: Text -> WideBuilder
wbFromText :: Text -> WideBuilder
wbFromText Text
t = Builder -> Int -> WideBuilder
WideBuilder (Text -> Builder
TB.fromText Text
t) (Text -> Int
forall a. HasChars a => a -> Int
realLength Text
t)
wbUnpack :: WideBuilder -> String
wbUnpack :: WideBuilder -> String
wbUnpack = LazyText -> String
TL.unpack (LazyText -> String)
-> (WideBuilder -> LazyText) -> WideBuilder -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> LazyText
TB.toLazyText (Builder -> LazyText)
-> (WideBuilder -> Builder) -> WideBuilder -> LazyText
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WideBuilder -> Builder
wbBuilder