Skip to content

Commit d2369cf

Browse files
committed
Refactor code to use Handle
1 parent d0a88ac commit d2369cf

1 file changed

Lines changed: 17 additions & 16 deletions

File tree

src/Tldr.hs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import qualified Data.Text.IO as TIO
1616
import CMark
1717
import System.Console.ANSI
1818
import Data.Monoid ((<>))
19+
import GHC.IO.Handle (Handle)
1920

2021
data ConsoleSetting = ConsoleSetting
2122
{ italic :: Bool
@@ -54,15 +55,15 @@ toSGR cons =
5455
, SetColor Foreground (fgIntensity cons) (fgColor cons)
5556
]
5657

57-
renderNode :: NodeType -> IO ()
58-
renderNode (TEXT txt) = TIO.putStrLn txt
59-
renderNode (HTML_BLOCK txt) = TIO.putStrLn txt
60-
renderNode (CODE_BLOCK _ txt) = TIO.putStrLn txt
61-
renderNode (HTML_INLINE txt) = TIO.putStrLn txt
62-
renderNode (CODE txt) = TIO.putStrLn (" " <> txt)
63-
renderNode LINEBREAK = TIO.putStrLn ""
64-
renderNode (LIST _) = TIO.putStrLn "" >> TIO.putStr " - "
65-
renderNode _ = return ()
58+
renderNode :: NodeType -> Handle -> IO ()
59+
renderNode (TEXT txt) handle = TIO.hPutStrLn handle txt
60+
renderNode (HTML_BLOCK txt) handle = TIO.hPutStrLn handle txt
61+
renderNode (CODE_BLOCK _ txt) handle = TIO.hPutStrLn handle txt
62+
renderNode (HTML_INLINE txt) handle = TIO.hPutStrLn handle txt
63+
renderNode (CODE txt) handle = TIO.hPutStrLn handle (" " <> txt)
64+
renderNode LINEBREAK handle = TIO.hPutStrLn handle ""
65+
renderNode (LIST _) handle = TIO.hPutStrLn handle "" >> TIO.hPutStr handle " - "
66+
renderNode _ _ = return ()
6667

6768
changeConsoleSetting :: NodeType -> IO ()
6869
changeConsoleSetting (HEADING _) = setSGR $ toSGR headingSetting
@@ -81,11 +82,11 @@ changeConsoleSetting (CODE _) =
8182
}
8283
changeConsoleSetting _ = return ()
8384

84-
handleNode :: Node -> IO ()
85-
handleNode (Node _ ntype xs) = do
85+
handleNode :: Node -> Handle -> IO ()
86+
handleNode (Node _ ntype xs) handle = do
8687
changeConsoleSetting ntype
87-
renderNode ntype
88-
mapM_ (\(Node _ ntype' ns) -> renderNode ntype' >> mapM_ handleNode ns) xs
88+
renderNode ntype handle
89+
mapM_ (\(Node _ ntype' ns) -> renderNode ntype' handle >> mapM_ (flip handleNode $ handle) ns) xs
8990
setSGR [Reset]
9091

9192
parsePage :: FilePath -> IO Node
@@ -94,7 +95,7 @@ parsePage fname = do
9495
let node = commonmarkToNode [] page
9596
return node
9697

97-
renderPage :: FilePath -> IO ()
98-
renderPage fname = do
98+
renderPage :: FilePath -> Handle -> IO ()
99+
renderPage fname handle = do
99100
node <- parsePage fname
100-
handleNode node
101+
handleNode node handle

0 commit comments

Comments
 (0)