@@ -37,14 +37,14 @@ import Text.Pandoc.Writers.Shared
3737import Text.Pandoc.Pretty (render)
3838import Text.Pandoc.Templates (renderTemplate')
3939import Text.Pandoc.XML ( escapeStringForXML )
40−import Data.List ( intersect, intercalate, intersperse )
40+import Data.List ( intersect, intercalate )
4141import Network.URI ( isURI )
4242import Control.Monad.Reader
4343import Control.Monad.State
4444
4545data WriterState = WriterState {
4646 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. "**"
4848 , stUseTags :: Bool -- True if we should use HTML tags because we're in a complex list
4949 }
5050
@@ -65,17 +65,16 @@ pandocToMediaWiki (Pandoc meta blocks) = do
6565 inlineListToMediaWiki
6666 meta
6767 body <- blockListToMediaWiki blocks
68− notesExist <- get >>= return . stNotes
68+ notesExist <- gets stNotes
6969 let notes = if notesExist
7070 then "\n<references />"
7171 else ""
7272 let main = body ++ notes
7373 let context = defField "body" main
74− $ defField "toc" (writerTableOfContents opts)
75− $ metadata
76− if writerStandalone opts
77− then return $ renderTemplate' (writerTemplate opts) context
78− else return main
74+ $ defField "toc" (writerTableOfContents opts) metadata
75+ return $ if writerStandalone opts
76+ then renderTemplate' (writerTemplate opts) context
77+ else main
7978
8079-- | Escape special characters for MediaWiki.
8180escapeString :: String -> String
@@ -106,8 +105,8 @@ blockToMediaWiki (Para [Image txt (src,'f':'i':'g':':':tit)]) = do
106105 return $ "[[Image:" ++ src ++ "|frame|none" ++ opt ++ "]]\n"
107106
108107blockToMediaWiki (Para inlines) = do
109− useTags <- get >>= return . stUseTags
110− listLevel <- get >>= return . stListLevel
108+ useTags <- gets stUseTags
109+ listLevel <- gets stListLevel
111110 contents <- inlineListToMediaWiki inlines
112111 return $ if useTags
113112 then "<p>" ++ contents ++ "</p>"
@@ -152,14 +151,14 @@ blockToMediaWiki (Table capt aligns widths headers rows') = do
152151 return $ "|+ " ++ trimr c ++ "\n"
153152 let headless = all null headers
154153 let allrows = if headless then rows' else headers:rows'
155− tableBody <- (concat . intersperse "|-\n") `fmap`
154+ tableBody <- intercalate "|-\n" `fmap`
156155 mapM (tableRowToMediaWiki headless aligns widths)
157156 (zip [1..] allrows)
158157 return $ "{|\n" ++ caption ++ tableBody ++ "|}\n"
159158
160159blockToMediaWiki x@(BulletList items) = do
161− oldUseTags <- get >>= return . stUseTags
162− listLevel <- get >>= return . stListLevel
160+ oldUseTags <- gets stUseTags
161+ listLevel <- gets stListLevel
163162 let useTags = oldUseTags || not (isSimpleList x)
164163 if useTags
165164 then do
@@ -174,8 +173,8 @@ blockToMediaWiki x@(BulletList items) = do
174173 return $ vcat contents ++ if null listLevel then "\n" else ""
175174
176175blockToMediaWiki x@(OrderedList attribs items) = do
177− oldUseTags <- get >>= return . stUseTags
178− listLevel <- get >>= return . stListLevel
176+ oldUseTags <- gets stUseTags
177+ listLevel <- gets stListLevel
179178 let useTags = oldUseTags || not (isSimpleList x)
180179 if useTags
181180 then do
@@ -190,8 +189,8 @@ blockToMediaWiki x@(OrderedList attribs items) = do
190189 return $ vcat contents ++ if null listLevel then "\n" else ""
191190
192191blockToMediaWiki x@(DefinitionList items) = do
193− oldUseTags <- get >>= return . stUseTags
194− listLevel <- get >>= return . stListLevel
192+ oldUseTags <- gets stUseTags
193+ listLevel <- gets stListLevel
195194 let useTags = oldUseTags || not (isSimpleList x)
196195 if useTags
197196 then do
@@ -222,11 +221,11 @@ listAttribsToString (startnum, numstyle, _) =
222221listItemToMediaWiki :: [Block] -> MediaWikiWriter String
223222listItemToMediaWiki items = do
224223 contents <- blockListToMediaWiki items
225− useTags <- get >>= return . stUseTags
224+ useTags <- gets stUseTags
226225 if useTags
227226 then return $ "<li>" ++ contents ++ "</li>"
228227 else do
229− marker <- get >>= return . stListLevel
228+ marker <- gets stListLevel
230229 return $ marker ++ " " ++ contents
231230
232231-- | Convert definition list item (label, list of blocks) to MediaWiki.
@@ -235,14 +234,14 @@ definitionListItemToMediaWiki :: ([Inline],[[Block]])
235234definitionListItemToMediaWiki (label, items) = do
236235 labelText <- inlineListToMediaWiki label
237236 contents <- mapM blockListToMediaWiki items
238− useTags <- get >>= return . stUseTags
237+ useTags <- gets stUseTags
239238 if useTags
240239 then return $ "<dt>" ++ labelText ++ "</dt>\n" ++
241− (intercalate "\n" $ map (\d -> "<dd>" ++ d ++ "</dd>") contents)
240+ intercalate "\n" (map (\d -> "<dd>" ++ d ++ "</dd>") contents)
242241 else do
243− marker <- get >>= return . stListLevel
242+ marker <- gets stListLevel
244243 return $ marker ++ " " ++ labelText ++ "\n" ++
245− (intercalate "\n" $ map (\d -> init marker ++ ": " ++ d) contents)
244+ intercalate "\n" (map (\d -> init marker ++ ": " ++ d) contents)
246245
247246-- | True if the list can be handled by simple wiki markup, False if HTML tags will be needed.
248247isSimpleList :: Block -> Bool
@@ -291,8 +290,7 @@ tableRowToMediaWiki :: Bool
291290 -> (Int, [[Block]])
292291 -> MediaWikiWriter String
293292tableRowToMediaWiki headless alignments widths (rownum, cells) = do
294− cells' <- mapM (\cellData ->
295− tableCellToMediaWiki headless rownum cellData)
293+ cells' <- mapM (tableCellToMediaWiki headless rownum)
296294 $ zip3 alignments widths cells
297295 return $ unlines cells'
298296
@@ -313,7 +311,7 @@ tableCellToMediaWiki headless rownum (alignment, width, bs) = do
313311 else unwords attrs ++ "|"
314312 return $ marker ++ attr ++ trimr contents
315313
316−alignmentToString :: Alignment -> [Char]
314+alignmentToString :: Alignment -> String
317315alignmentToString alignment = case alignment of
318316 AlignLeft -> "left"
319317 AlignRight -> "right"
@@ -324,12 +322,12 @@ alignmentToString alignment = case alignment of
324322blockListToMediaWiki :: [Block] -- ^ List of block elements
325323 -> MediaWikiWriter String
326324blockListToMediaWiki blocks =
327− mapM blockToMediaWiki blocks >>= return . vcat
325+ fmap vcat $ mapM blockToMediaWiki blocks
328326
329327-- | Convert list of Pandoc inline elements to MediaWiki.
330328inlineListToMediaWiki :: [Inline] -> MediaWikiWriter String
331329inlineListToMediaWiki lst =
332− mapM inlineToMediaWiki lst >>= return . concat
330+ fmap concat $ mapM inlineToMediaWiki lst
333331
334332-- | Convert Pandoc inline element to MediaWiki.
335333inlineToMediaWiki :: Inline -> MediaWikiWriter String
@@ -371,7 +369,7 @@ inlineToMediaWiki (Quoted DoubleQuote lst) = do
371369inlineToMediaWiki (Cite _ lst) = inlineListToMediaWiki lst
372370
373371inlineToMediaWiki (Code _ str) =
374− return $ "<code>" ++ (escapeString str) ++ "</code>"
372+ return $ "<code>" ++ escapeString str ++ "</code>"
375373
376374inlineToMediaWiki (Str str) = return $ escapeString str
377375
@@ -391,19 +389,20 @@ inlineToMediaWiki (Link txt (src, _)) = do
391389 label <- inlineListToMediaWiki txt
392390 case txt of
393391 [Str s] | escapeURI s == src -> return src
394− _ -> if isURI src
395− then return $ "[" ++ src ++ " " ++ label ++ "]"
396− else return $ "[[" ++ src' ++ "|" ++ label ++ "]]"
392+ _ -> return $ if isURI src
393+ then "[" ++ src ++ " " ++ label ++ "]"
394+ else "[[" ++ src' ++ "|" ++ label ++ "]]"
397395 where src' = case src of
398396 '/':xs -> xs -- with leading / it's a
399397 _ -> src -- link to a help page
398+
400399inlineToMediaWiki (Image alt (source, tit)) = do
401400 alt' <- inlineListToMediaWiki alt
402− let txt = if (null tit)
401+ let txt = if null tit
403402 then if null alt
404403 then ""
405− else "|" ++ alt'
406− else "|" ++ tit
404+ else '|' : alt'
405+ else '|' : tit
407406 return $ "[[Image:" ++ source ++ txt ++ "]]"
408407
409408inlineToMediaWiki (Note contents) = do