git.iko.soy/typeable/pandoc
on master help sign in
HLint suggestions.
0bc900eMatej Kollar
src/Text/Pandoc/Writers/MediaWiki.hs+34−35
@@ -37,14 +37,14 @@ import Text.Pandoc.Writers.Shared
37import Text.Pandoc.Pretty (render)
37import Text.Pandoc.Pretty (render)
38import Text.Pandoc.Templates (renderTemplate')
38import Text.Pandoc.Templates (renderTemplate')
39import Text.Pandoc.XML ( escapeStringForXML )
39import Text.Pandoc.XML ( escapeStringForXML )
40−import Data.List ( intersect, intercalate, intersperse )
40+import Data.List ( intersect, intercalate )
41import Network.URI ( isURI )
41import Network.URI ( isURI )
42import Control.Monad.Reader
42import Control.Monad.Reader
43import Control.Monad.State
43import Control.Monad.State
44
44
45data WriterState = WriterState {
45data WriterState = WriterState {
46 stNotes :: Bool -- True if there are notes
46 stNotes :: Bool -- True if there are notes
47− , stListLevel :: [Char] -- String at beginning of list items, e.g. "**"
47+ , stListLevel :: String -- String at beginning of list items, e.g. "**"
48 , stUseTags :: Bool -- True if we should use HTML tags because we're in a complex list
48 , stUseTags :: Bool -- True if we should use HTML tags because we're in a complex list
49 }
49 }
50
50
@@ -65,17 +65,16 @@ pandocToMediaWiki (Pandoc meta blocks) = do
65 inlineListToMediaWiki
65 inlineListToMediaWiki
66 meta
66 meta
67 body <- blockListToMediaWiki blocks
67 body <- blockListToMediaWiki blocks
68− notesExist <- get >>= return . stNotes
68+ notesExist <- gets stNotes
69 let notes = if notesExist
69 let notes = if notesExist
70 then "\n<references />"
70 then "\n<references />"
71 else ""
71 else ""
72 let main = body ++ notes
72 let main = body ++ notes
73 let context = defField "body" main
73 let context = defField "body" main
74− $ defField "toc" (writerTableOfContents opts)
74+ $ defField "toc" (writerTableOfContents opts) metadata
75− $ metadata
76− if writerStandalone opts
75+ return $ if writerStandalone opts
77− then return $ renderTemplate' (writerTemplate opts) context
76+ then renderTemplate' (writerTemplate opts) context
78− else return main
77+ else main
79
78
80-- | Escape special characters for MediaWiki.
79-- | Escape special characters for MediaWiki.
81escapeString :: String -> String
80escapeString :: String -> String
@@ -106,8 +105,8 @@ blockToMediaWiki (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
106 return $ "[[Image:" ++ src ++ "|frame|none" ++ opt ++ "]]\n"
105 return $ "[[Image:" ++ src ++ "|frame|none" ++ opt ++ "]]\n"
107
106
108blockToMediaWiki (Para inlines) = do
107blockToMediaWiki (Para inlines) = do
109− useTags <- get >>= return . stUseTags
108+ useTags <- gets stUseTags
110− listLevel <- get >>= return . stListLevel
109+ listLevel <- gets stListLevel
111 contents <- inlineListToMediaWiki inlines
110 contents <- inlineListToMediaWiki inlines
112 return $ if useTags
111 return $ if useTags
113 then "<p>" ++ contents ++ "</p>"
112 then "<p>" ++ contents ++ "</p>"
@@ -152,14 +151,14 @@ blockToMediaWiki (Table capt aligns widths headers rows') = do
152 return $ "|+ " ++ trimr c ++ "\n"
151 return $ "|+ " ++ trimr c ++ "\n"
153 let headless = all null headers
152 let headless = all null headers
154 let allrows = if headless then rows' else headers:rows'
153 let allrows = if headless then rows' else headers:rows'
155− tableBody <- (concat . intersperse "|-\n") `fmap`
154+ tableBody <- intercalate "|-\n" `fmap`
156 mapM (tableRowToMediaWiki headless aligns widths)
155 mapM (tableRowToMediaWiki headless aligns widths)
157 (zip [1..] allrows)
156 (zip [1..] allrows)
158 return $ "{|\n" ++ caption ++ tableBody ++ "|}\n"
157 return $ "{|\n" ++ caption ++ tableBody ++ "|}\n"
159
158
160blockToMediaWiki x@(BulletList items) = do
159blockToMediaWiki x@(BulletList items) = do
161− oldUseTags <- get >>= return . stUseTags
160+ oldUseTags <- gets stUseTags
162− listLevel <- get >>= return . stListLevel
161+ listLevel <- gets stListLevel
163 let useTags = oldUseTags || not (isSimpleList x)
162 let useTags = oldUseTags || not (isSimpleList x)
164 if useTags
163 if useTags
165 then do
164 then do
@@ -174,8 +173,8 @@ blockToMediaWiki x@(BulletList items) = do
174 return $ vcat contents ++ if null listLevel then "\n" else ""
173 return $ vcat contents ++ if null listLevel then "\n" else ""
175
174
176blockToMediaWiki x@(OrderedList attribs items) = do
175blockToMediaWiki x@(OrderedList attribs items) = do
177− oldUseTags <- get >>= return . stUseTags
176+ oldUseTags <- gets stUseTags
178− listLevel <- get >>= return . stListLevel
177+ listLevel <- gets stListLevel
179 let useTags = oldUseTags || not (isSimpleList x)
178 let useTags = oldUseTags || not (isSimpleList x)
180 if useTags
179 if useTags
181 then do
180 then do
@@ -190,8 +189,8 @@ blockToMediaWiki x@(OrderedList attribs items) = do
190 return $ vcat contents ++ if null listLevel then "\n" else ""
189 return $ vcat contents ++ if null listLevel then "\n" else ""
191
190
192blockToMediaWiki x@(DefinitionList items) = do
191blockToMediaWiki x@(DefinitionList items) = do
193− oldUseTags <- get >>= return . stUseTags
192+ oldUseTags <- gets stUseTags
194− listLevel <- get >>= return . stListLevel
193+ listLevel <- gets stListLevel
195 let useTags = oldUseTags || not (isSimpleList x)
194 let useTags = oldUseTags || not (isSimpleList x)
196 if useTags
195 if useTags
197 then do
196 then do
@@ -222,11 +221,11 @@ listAttribsToString (startnum, numstyle, _) =
222listItemToMediaWiki :: [Block] -> MediaWikiWriter String
221listItemToMediaWiki :: [Block] -> MediaWikiWriter String
223listItemToMediaWiki items = do
222listItemToMediaWiki items = do
224 contents <- blockListToMediaWiki items
223 contents <- blockListToMediaWiki items
225− useTags <- get >>= return . stUseTags
224+ useTags <- gets stUseTags
226 if useTags
225 if useTags
227 then return $ "<li>" ++ contents ++ "</li>"
226 then return $ "<li>" ++ contents ++ "</li>"
228 else do
227 else do
229− marker <- get >>= return . stListLevel
228+ marker <- gets stListLevel
230 return $ marker ++ " " ++ contents
229 return $ marker ++ " " ++ contents
231
230
232-- | Convert definition list item (label, list of blocks) to MediaWiki.
231-- | Convert definition list item (label, list of blocks) to MediaWiki.
@@ -235,14 +234,14 @@ definitionListItemToMediaWiki :: ([Inline],[[Block]])
235definitionListItemToMediaWiki (label, items) = do
234definitionListItemToMediaWiki (label, items) = do
236 labelText <- inlineListToMediaWiki label
235 labelText <- inlineListToMediaWiki label
237 contents <- mapM blockListToMediaWiki items
236 contents <- mapM blockListToMediaWiki items
238− useTags <- get >>= return . stUseTags
237+ useTags <- gets stUseTags
239 if useTags
238 if useTags
240 then return $ "<dt>" ++ labelText ++ "</dt>\n" ++
239 then return $ "<dt>" ++ labelText ++ "</dt>\n" ++
241− (intercalate "\n" $ map (\d -> "<dd>" ++ d ++ "</dd>") contents)
240+ intercalate "\n" (map (\d -> "<dd>" ++ d ++ "</dd>") contents)
242 else do
241 else do
243− marker <- get >>= return . stListLevel
242+ marker <- gets stListLevel
244 return $ marker ++ " " ++ labelText ++ "\n" ++
243 return $ marker ++ " " ++ labelText ++ "\n" ++
245− (intercalate "\n" $ map (\d -> init marker ++ ": " ++ d) contents)
244+ intercalate "\n" (map (\d -> init marker ++ ": " ++ d) contents)
246
245
247-- | True if the list can be handled by simple wiki markup, False if HTML tags will be needed.
246-- | True if the list can be handled by simple wiki markup, False if HTML tags will be needed.
248isSimpleList :: Block -> Bool
247isSimpleList :: Block -> Bool
@@ -291,8 +290,7 @@ tableRowToMediaWiki :: Bool
291 -> (Int, [[Block]])
290 -> (Int, [[Block]])
292 -> MediaWikiWriter String
291 -> MediaWikiWriter String
293tableRowToMediaWiki headless alignments widths (rownum, cells) = do
292tableRowToMediaWiki headless alignments widths (rownum, cells) = do
294− cells' <- mapM (\cellData ->
295− tableCellToMediaWiki headless rownum cellData)
293+ cells' <- mapM (tableCellToMediaWiki headless rownum)
296 $ zip3 alignments widths cells
294 $ zip3 alignments widths cells
297 return $ unlines cells'
295 return $ unlines cells'
298
296
@@ -313,7 +311,7 @@ tableCellToMediaWiki headless rownum (alignment, width, bs) = do
313 else unwords attrs ++ "|"
311 else unwords attrs ++ "|"
314 return $ marker ++ attr ++ trimr contents
312 return $ marker ++ attr ++ trimr contents
315
313
316−alignmentToString :: Alignment -> [Char]
314+alignmentToString :: Alignment -> String
317alignmentToString alignment = case alignment of
315alignmentToString alignment = case alignment of
318 AlignLeft -> "left"
316 AlignLeft -> "left"
319 AlignRight -> "right"
317 AlignRight -> "right"
@@ -324,12 +322,12 @@ alignmentToString alignment = case alignment of
324blockListToMediaWiki :: [Block] -- ^ List of block elements
322blockListToMediaWiki :: [Block] -- ^ List of block elements
325 -> MediaWikiWriter String
323 -> MediaWikiWriter String
326blockListToMediaWiki blocks =
324blockListToMediaWiki blocks =
327− mapM blockToMediaWiki blocks >>= return . vcat
325+ fmap vcat $ mapM blockToMediaWiki blocks
328
326
329-- | Convert list of Pandoc inline elements to MediaWiki.
327-- | Convert list of Pandoc inline elements to MediaWiki.
330inlineListToMediaWiki :: [Inline] -> MediaWikiWriter String
328inlineListToMediaWiki :: [Inline] -> MediaWikiWriter String
331inlineListToMediaWiki lst =
329inlineListToMediaWiki lst =
332− mapM inlineToMediaWiki lst >>= return . concat
330+ fmap concat $ mapM inlineToMediaWiki lst
333
331
334-- | Convert Pandoc inline element to MediaWiki.
332-- | Convert Pandoc inline element to MediaWiki.
335inlineToMediaWiki :: Inline -> MediaWikiWriter String
333inlineToMediaWiki :: Inline -> MediaWikiWriter String
@@ -371,7 +369,7 @@ inlineToMediaWiki (Quoted DoubleQuote lst) = do
371inlineToMediaWiki (Cite _ lst) = inlineListToMediaWiki lst
369inlineToMediaWiki (Cite _ lst) = inlineListToMediaWiki lst
372
370
373inlineToMediaWiki (Code _ str) =
371inlineToMediaWiki (Code _ str) =
374− return $ "<code>" ++ (escapeString str) ++ "</code>"
372+ return $ "<code>" ++ escapeString str ++ "</code>"
375
373
376inlineToMediaWiki (Str str) = return $ escapeString str
374inlineToMediaWiki (Str str) = return $ escapeString str
377
375
@@ -391,19 +389,20 @@ inlineToMediaWiki (Link txt (src, _)) = do
391 label <- inlineListToMediaWiki txt
389 label <- inlineListToMediaWiki txt
392 case txt of
390 case txt of
393 [Str s] | escapeURI s == src -> return src
391 [Str s] | escapeURI s == src -> return src
394− _ -> if isURI src
392+ _ -> return $ if isURI src
395− then return $ "[" ++ src ++ " " ++ label ++ "]"
393+ then "[" ++ src ++ " " ++ label ++ "]"
396− else return $ "[[" ++ src' ++ "|" ++ label ++ "]]"
394+ else "[[" ++ src' ++ "|" ++ label ++ "]]"
397 where src' = case src of
395 where src' = case src of
398 '/':xs -> xs -- with leading / it's a
396 '/':xs -> xs -- with leading / it's a
399 _ -> src -- link to a help page
397 _ -> src -- link to a help page
398+
400inlineToMediaWiki (Image alt (source, tit)) = do
399inlineToMediaWiki (Image alt (source, tit)) = do
401 alt' <- inlineListToMediaWiki alt
400 alt' <- inlineListToMediaWiki alt
402− let txt = if (null tit)
401+ let txt = if null tit
403 then if null alt
402 then if null alt
404 then ""
403 then ""
405− else "|" ++ alt'
404+ else '|' : alt'
406− else "|" ++ tit
405+ else '|' : tit
407 return $ "[[Image:" ++ source ++ txt ++ "]]"
406 return $ "[[Image:" ++ source ++ txt ++ "]]"
408
407
409inlineToMediaWiki (Note contents) = do
408inlineToMediaWiki (Note contents) = do