30 lines
783 B
Haskell
30 lines
783 B
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
module PDF.TextRendering (
|
|
TextRendering(..)
|
|
, update
|
|
) where
|
|
|
|
import Data.ByteString.Lazy.Char8 (ByteString)
|
|
import qualified Data.ByteString.Lazy.Char8 as BS (pack, readInt, unwords, words)
|
|
|
|
data TextRendering =
|
|
Fill
|
|
| Stroke
|
|
| FillStroke
|
|
| Invisible
|
|
| FillAddPath
|
|
| StrokeAddPath
|
|
| FillStrokeAddPath
|
|
| AddPath
|
|
deriving (Enum, Show)
|
|
|
|
update :: (TextRendering -> TextRendering) -> ByteString -> ByteString
|
|
update f = BS.unwords . changeTextRendering . BS.words
|
|
where
|
|
changeTextRendering :: [ByteString] -> [ByteString]
|
|
changeTextRendering l@[value, "Tr"] =
|
|
case BS.readInt value of
|
|
Just (n, _) -> [BS.pack . show . fromEnum . f $ toEnum n, "Tr"]
|
|
_ -> l
|
|
changeTextRendering l = l
|