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 (
|
||||
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}) =
|
||||
|
|
Loading…
Reference in New Issue