@@ -72,9 +72,15 @@ stripPandoc p =
7272 Left _ -> [Null ]
7373 Right (Pandoc _ blocks) -> blocks
7474
75- getContent :: String -> IO [Block ]
76- getContent file = do
75+ setEncodingToUTF8 :: IO Handle -> Bool -> IO ()
76+ setEncodingToUTF8 handle useUTF8
77+ | useUTF8 = join $ fmap (`hSetEncoding` utf8) handle
78+ | not useUTF8 = return ()
79+
80+ getContent :: String -> Bool -> IO [Block ]
81+ getContent file useUTF8 = do
7782 let handle = openFile file ReadMode
83+ setEncodingToUTF8 handle useUTF8
7884 ! contents <- fmap hGetContents handle
7985 fmap hClose handle
8086 let p = fmap (readMarkdown def) contents
@@ -85,14 +91,15 @@ getProcessableFileList list = do
8591 let f = lines list
8692 filter (\ x -> not $ " #" `isPrefixOf` x) f
8793
88- processFiles :: [String ] -> IO [Block ]
89- processFiles toProcess =
90- fmap concat (mapM getContent toProcess)
94+ processFiles :: [String ] -> Bool -> IO [Block ]
95+ processFiles toProcess useUTF8 =
96+ fmap concat (mapM ( ` getContent` useUTF8) toProcess)
9197
92- simpleInclude :: String -> IO [Block ]
93- simpleInclude list = do
98+ simpleInclude :: String -> [ String ] -> IO [Block ]
99+ simpleInclude list classes = do
94100 let toProcess = getProcessableFileList list
95- processFiles toProcess
101+ let useUTF8 = " utf8" `elem` classes
102+ processFiles toProcess useUTF8
96103
97104doInclude :: Block -> IO [Block ]
98105doInclude (CodeBlock (_, classes, _) list)
@@ -102,7 +109,7 @@ doInclude (CodeBlock (_, classes, _) list)
102109 let newclasses = filter (\ x -> " include" `isPrefixOf` x || " code" `isPrefixOf` x) classes
103110 let blocks = fmap (B. codeBlockWith (" " , newclasses, [] )) content
104111 fmap B. toList blocks
105- | " include" `elem` classes = simpleInclude list
112+ | " include" `elem` classes = simpleInclude list classes
106113doInclude x = return [x]
107114
108115main :: IO ()
0 commit comments