@@ -16,6 +16,7 @@ import qualified Data.Text.IO as TIO
1616import CMark
1717import System.Console.ANSI
1818import Data.Monoid ((<>) )
19+ import GHC.IO.Handle (Handle )
1920
2021data 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
6768changeConsoleSetting :: NodeType -> IO ()
6869changeConsoleSetting (HEADING _) = setSGR $ toSGR headingSetting
@@ -81,11 +82,11 @@ changeConsoleSetting (CODE _) =
8182 }
8283changeConsoleSetting _ = 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
9192parsePage :: 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