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 ( 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}) =