git.iko.soy/typeable/pandoc
on master help sign in
hlint FB2 writer
commitf1fbec938f0df271845ca00eec17d95a896136f8 authorAlexander Krotov <ilabdsf@gmail.com> dateWed 15 May 2019, 13:30 (7 years ago) parentd286363
1 file changed+22−27
src/Text/Pandoc/Writers/FB2.hs+22−27
src/Text/Pandoc/Writers/FB2.hs+22−27
@@ -21,7 +21,7 @@ module Text.Pandoc.Writers.FB2 (writeFB2) where
2121import Prelude
2222import Control.Monad (zipWithM)
2323import Control.Monad.Except (catchError)
24−import Control.Monad.State.Strict (StateT, evalStateT, get, lift, liftM, modify)
24+import Control.Monad.State.Strict (StateT, evalStateT, get, gets, lift, liftM, modify)
2525import Data.ByteString.Base64 (encode)
2626import qualified Data.ByteString.Char8 as B8
2727import Data.Char (isAscii, isControl, isSpace, toLower)
@@ -104,7 +104,7 @@ description meta' = do
104104 let as = authors meta'
105105 dd <- docdate meta'
106106 annotation <- case lookupMeta "abstract" meta' of
107− Just (MetaBlocks bs) -> (list . el "annotation") <$> cMapM blockToXml (map unPlain bs)
107+ Just (MetaBlocks bs) -> list . el "annotation" <$> cMapM blockToXml (map unPlain bs)
108108 _ -> pure mempty
109109 let lang = case lookupMeta "lang" meta' of
110110 Just (MetaInlines [Str s]) -> [el "lang" $ iso639 s]
@@ -182,8 +182,8 @@ renderSection lvl (Shared.Sec _ _num (id',_,_) title elements) = do
182182 else list . el "title" <$> formatTitle title
183183 let sectionContent = if null id'
184184 then el "section" (title' ++ content)
185− else el "section" ([uattr "id" id'], (title' ++ content))
186− return $ [sectionContent]
185+ else el "section" ([uattr "id" id'], title' ++ content)
186+ return [sectionContent]
187187
188188-- | Only <p> and <empty-line> are allowed within <title> in FB2.
189189formatTitle :: PandocMonad m => [Inline] -> FBM m [Content]
@@ -290,6 +290,15 @@ isMimeType s =
290290footnoteID :: Int -> String
291291footnoteID i = "n" ++ show i
292292
293+mkitem :: PandocMonad m => String -> [Block] -> FBM m [Content]
294+mkitem mrk bs = do
295+ pmrk <- gets parentListMarker
296+ let nmrk = pmrk ++ mrk ++ " "
297+ modify (\s -> s { parentListMarker = nmrk})
298+ item <- cMapM blockToXml $ plainToPara $ indentBlocks nmrk bs
299+ modify (\s -> s { parentListMarker = pmrk }) -- old parent marker
300+ return item
301+
293302-- | Convert a block-level Pandoc's element to FictionBook XML representation.
294303blockToXml :: PandocMonad m => Block -> FBM m [Content]
295304blockToXml (Plain ss) = cMapM toXml ss -- FIXME: can lead to malformed FB2
@@ -297,40 +306,26 @@ blockToXml (Para [Math DisplayMath formula]) = insertMath NormalImage formula
297306-- title beginning with fig: indicates that the image is a figure
298307blockToXml (Para [Image atr alt (src,'f':'i':'g':':':tit)]) =
299308 insertImage NormalImage (Image atr alt (src,tit))
300−blockToXml (Para ss) = (list . el "p") <$> cMapM toXml ss
309+blockToXml (Para ss) = list . el "p" <$> cMapM toXml ss
301310blockToXml (CodeBlock _ s) = return . spaceBeforeAfter .
302311 map (el "p" . el "code") . lines $ s
303−blockToXml (RawBlock f str) = do
312+blockToXml (RawBlock f str) =
304313 if f == Format "fb2"
305314 then return $ XI.parseXML str
306315 else return []
307316blockToXml (Div _ bs) = cMapM blockToXml bs
308−blockToXml (BlockQuote bs) = (list . el "cite") <$> cMapM blockToXml bs
317+blockToXml (BlockQuote bs) = list . el "cite" <$> cMapM blockToXml bs
309318blockToXml (LineBlock lns) =
310− (list . el "poem") <$> mapM stanza (split null lns)
319+ list . el "poem" <$> mapM stanza (split null lns)
311320 where
312321 v xs = el "v" <$> cMapM toXml xs
313322 stanza xs = el "stanza" <$> mapM v xs
314−blockToXml (OrderedList a bss) = do
315− state <- get
316− let pmrk = parentListMarker state
317− let markers = (pmrk ++) <$> orderedListMarkers a
318− let mkitem mrk bs = do
319− modify (\s -> s { parentListMarker = mrk ++ " "})
320− item <- cMapM blockToXml $ plainToPara $ indentBlocks (mrk ++ " ") bs
321− modify (\s -> s { parentListMarker = pmrk }) -- old parent marker
322− return item
323+blockToXml (OrderedList a bss) =
323324 concat <$> zipWithM mkitem markers bss
324−blockToXml (BulletList bss) = do
325− state <- get
326− let pmrk = parentListMarker state
327− let mrk = pmrk ++ "•"
328− let mkitem bs = do
329− modify (\s -> s { parentListMarker = mrk ++ " "})
330− item <- cMapM blockToXml $ plainToPara $ indentBlocks (mrk ++ " ") bs
331− modify (\s -> s { parentListMarker = pmrk }) -- old parent marker
332− return item
333− cMapM mkitem bss
325+ where
326+ markers = orderedListMarkers a
327+blockToXml (BulletList bss) =
328+ cMapM (mkitem "•") bss
334329blockToXml (DefinitionList defs) =
335330 cMapM mkdef defs
336331 where