From bac08446dd94efb121da5f8bd21781fba7523520 Mon Sep 17 00:00:00 2001 From: Tissevert Date: Fri, 29 Nov 2019 17:42:57 +0100 Subject: [PATCH] WIP: starting to fix this criminally inefficient parser for PDF's postfix-operator instructions --- src/PDF/Text.hs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/PDF/Text.hs b/src/PDF/Text.hs index a9ffcab..a880b93 100644 --- a/src/PDF/Text.hs +++ b/src/PDF/Text.hs @@ -43,6 +43,7 @@ stateOperator Ri = (,) Ri <$> count 1 argument <* string "ri" stateOperator I = (,) I <$> count 1 argument <* string "i" stateOperator Gs = (,) Gs <$> count 1 nameArg <* string "gs" +{- textOperator :: MonadParser m => TextOperator -> m (Call TextOperator) textOperator Td = (,) Td <$> count 2 argument <* string "Td" textOperator TD = (,) TD <$> count 2 argument <* string "TD" @@ -59,6 +60,17 @@ textOperator TL = (,) TL <$> count 1 argument <* string "TL" textOperator Tf = (,) Tf <$> sequence [nameArg, argument] <* string "Tf" textOperator Tr = (,) Tr <$> count 1 argument <* string "Tr" textOperator Ts = (,) Ts <$> count 1 argument <* string "Ts" +-} + +textOperator :: MonadParser m => TextOperator -> m TextOperator +textOperator textOp = string (show textOp) *> return textOp + +textChunk :: MonadParser m => m (Either TextOperator Argument) +textChunk = + choice $ Left . textOperator <$> [minBound .. maxBound] + <|> choice $ Right <$> [stringArg, nameArg, arrayArg, argument] + +aTextOperator :: MonadParser m => m (Call TextOperator) a :: (Bounded o, Enum o, MonadParser m) => (o -> m (Call o)) -> m (Call o) a parserGenerator = choice $ parserGenerator <$> [minBound .. maxBound] @@ -95,7 +107,7 @@ text :: ParserWithFont [ByteString] text = string "BT" *> blank *> commands <* blank <* string "ET" "Text operators" where - commands = concat <$> (a textOperator >>= runOperator) `sepBy` blank + commands = concat <$> (aTextOperator >>= runOperator) `sepBy` blank runOperator :: Call TextOperator -> ParserWithFont [ByteString] runOperator (Tf, [Typed (NameObject fontName), _]) =