Skip to content

Commit 99d0b02

Browse files
committed
Use UTF-8 if requested (issue #2)
1 parent 53b0d17 commit 99d0b02

File tree

3 files changed

+28
-9
lines changed

3 files changed

+28
-9
lines changed

IncludeFilter.hs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

97104
doInclude :: Block -> IO [Block]
98105
doInclude (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
106113
doInclude x = return [x]
107114

108115
main :: IO ()

test/encoding/include.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
* четыре
2+
* пять
3+
* шесть

test/encoding/test.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Тест
2+
3+
* один
4+
* два
5+
* три
6+
7+
```include utf8
8+
include.md
9+
```

0 commit comments

Comments
 (0)