git.iko.soy/typeable/pandoc
on master help sign in
Docx reader: Use dropcap state.
3e32cd5Jesse Rosenthal
src/Text/Pandoc/Readers/Docx.hs+17−9
@@ -105,11 +105,15 @@ readDocx opts bytes =
105 Left _ -> error $ "couldn't parse docx file"
105 Left _ -> error $ "couldn't parse docx file"
106
106
107data DState = DState { docxAnchorMap :: M.Map String String
107data DState = DState { docxAnchorMap :: M.Map String String
108− , docxMediaBag :: MediaBag }
108+ , docxMediaBag :: MediaBag
109+ , docxDropCap :: [Inline]
110+ }
109
111
110instance Default DState where
112instance Default DState where
111 def = DState { docxAnchorMap = M.empty
113 def = DState { docxAnchorMap = M.empty
112− , docxMediaBag = mempty }
114+ , docxMediaBag = mempty
115+ , docxDropCap = []
116+ }
113
117
114data DEnv = DEnv { docxOptions :: ReaderOptions
118data DEnv = DEnv { docxOptions :: ReaderOptions
115 , docxInHeaderBlock :: Bool }
119 , docxInHeaderBlock :: Bool }
@@ -457,13 +461,17 @@ bodyPartToBlocks (Paragraph pPr parparts)
457 return [hdr]
461 return [hdr]
458bodyPartToBlocks (Paragraph pPr parparts) = do
462bodyPartToBlocks (Paragraph pPr parparts) = do
459 ils <- parPartsToInlines parparts >>= (return . normalizeSpaces)
463 ils <- parPartsToInlines parparts >>= (return . normalizeSpaces)
464+ dropIls <- gets docxDropCap
465+ let ils' = dropIls ++ ils
466+ if dropCap pPr
467+ then do modify $ \s -> s { docxDropCap = ils' }
468+ return []
469+ else do modify $ \s -> s { docxDropCap = [] }
460− case ils of
470+ return $ case ils' of
461− [] -> return []
471+ [] -> []
462− _ -> do
463− return $
464− rebuild
472+ _ -> rebuild
465− (parStyleToContainers pPr)
473+ (parStyleToContainers pPr)
466− [Para ils]
474+ [Para $ ils']
467bodyPartToBlocks (ListItem pPr numId lvl levelInfo parparts) = do
475bodyPartToBlocks (ListItem pPr numId lvl levelInfo parparts) = do
468 let
476 let
469 kvs = case levelInfo of
477 kvs = case levelInfo of