Implement encoder for good

This commit is contained in:
Tissevert 2020-03-08 22:14:36 +01:00
parent 0ade9cc2f5
commit 673321bf0a
1 changed files with 12 additions and 3 deletions

View File

@ -18,12 +18,12 @@ import Data.ByteString.Char8 (unpack)
import Data.ByteString.Char8.Util (
B16Int(..), b16ToBytes, b16ToInt, toBytes, utf16BEToutf8
)
import Data.Map (Map, union)
import Data.Map (Map, mapWithKey, union)
import qualified Data.Map as Map (
adjust, empty, fromList, insert, insertWith, lookup, toList
)
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 PDF.Font (Decoder, Encoder, Font(..))
import PDF.Object (
@ -72,7 +72,16 @@ decoder rangesBySize input
outputSequence -> outputSequence
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 code (CRange {fromSequence, toSequence}) =