Implement encoder for good
This commit is contained in:
parent
0ade9cc2f5
commit
673321bf0a
|
@ -18,12 +18,12 @@ import Data.ByteString.Char8 (unpack)
|
||||||
import Data.ByteString.Char8.Util (
|
import Data.ByteString.Char8.Util (
|
||||||
B16Int(..), b16ToBytes, b16ToInt, toBytes, utf16BEToutf8
|
B16Int(..), b16ToBytes, b16ToInt, toBytes, utf16BEToutf8
|
||||||
)
|
)
|
||||||
import Data.Map (Map, union)
|
import Data.Map (Map, mapWithKey, union)
|
||||||
import qualified Data.Map as Map (
|
import qualified Data.Map as Map (
|
||||||
adjust, empty, fromList, insert, insertWith, lookup, toList
|
adjust, empty, fromList, insert, insertWith, lookup, toList
|
||||||
)
|
)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as Text (length)
|
import qualified Data.Text as Text (length, null, splitAt)
|
||||||
import qualified PDF.EOL as EOL (charset, parser)
|
import qualified PDF.EOL as EOL (charset, parser)
|
||||||
import PDF.Font (Decoder, Encoder, Font(..))
|
import PDF.Font (Decoder, Encoder, Font(..))
|
||||||
import PDF.Object (
|
import PDF.Object (
|
||||||
|
@ -72,7 +72,16 @@ decoder rangesBySize input
|
||||||
outputSequence -> outputSequence
|
outputSequence -> outputSequence
|
||||||
|
|
||||||
encoder :: Map Size FromUnicode -> Encoder
|
encoder :: Map Size FromUnicode -> Encoder
|
||||||
encoder = undefined
|
encoder fromUnicodes input
|
||||||
|
| Text.null input = Right ""
|
||||||
|
| otherwise =
|
||||||
|
foldl (<>) (Left "No encoding found") $ mapWithKey tryOn fromUnicodes
|
||||||
|
where
|
||||||
|
tryOn size fromUnicode =
|
||||||
|
let (prefix, end) = Text.splitAt size input in
|
||||||
|
case Map.lookup prefix fromUnicode of
|
||||||
|
Nothing -> Left ""
|
||||||
|
Just code -> (code <>) <$> encoder fromUnicodes end
|
||||||
|
|
||||||
matches :: ByteString -> CRange -> Bool
|
matches :: ByteString -> CRange -> Bool
|
||||||
matches code (CRange {fromSequence, toSequence}) =
|
matches code (CRange {fromSequence, toSequence}) =
|
||||||
|
|
Loading…
Reference in New Issue
Block a user