From 4fe8ab225215880f30615012f3f66bbff93c0bfd Mon Sep 17 00:00:00 2001 From: Tissevert Date: Tue, 25 Feb 2020 17:39:18 +0100 Subject: [PATCH] Practice latest changes in Hufflepdf to implement various ways of revealing text and see how practical it is to actually write code with PDF.Box --- src/Main.hs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Main.hs b/src/Main.hs index 72f6601..fe23008 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -3,7 +3,7 @@ module Main where import Codec.Compression.Zlib (compress, decompress) -import Control.Monad.State (execState) +import Control.Monad.State (execState, execStateT) import Data.ByteString.Char8 (ByteString) import qualified Data.ByteString.Char8 as BS ( length, readFile @@ -12,8 +12,8 @@ import qualified Data.ByteString.Lazy.Char8 as Lazy ( fromStrict, intercalate, split, toStrict, writeFile ) import qualified Data.Map as Map (insert, lookup) -import PDF (Document(..), UnifiedLayers(..), parseDocument, render) -import PDF.Box ((.@), modifyAt) +import PDF (AllLayers(..), Document(..), UnifiedLayers(..), parseDocument, render) +import PDF.Box (I(..), (.@), edit, modifyAt) import PDF.Layer (AllObjects(..)) import PDF.Object (DirectObject(..), Object(..), Name(..), Number(..)) import PDF.TextRendering (TextRendering(..), update) @@ -47,6 +47,15 @@ reveal :: Document -> Document reveal = execState $ do modifyAt (UnifiedLayers .@ AllObjects) (return . fmap revealObject) +revealFirst :: Document -> Document +revealFirst document = maybe document id $ execStateT (do + modifyAt (AllLayers .@ I 0 .@ AllObjects) (return . fmap revealObject) + ) document + +deepReveal :: Document -> Document +deepReveal = execState $ do + modifyAt AllLayers (mapM . edit AllObjects $ return . fmap revealObject) + main :: IO () main = do [inputPath, outputPath] <- getArgs