@@ -210,8 +210,11 @@ writeDocx :: (PandocMonad m)
210210 => WriterOptions -- ^ Writer options
211211 -> Pandoc -- ^ Document to convert
212212 -> m BL.ByteString
213−writeDocx opts doc@(Pandoc meta _) = do
214− let doc' = walk fixDisplayMath doc
213+writeDocx opts doc = do
214+ let Pandoc meta blocks = walk fixDisplayMath doc
215+ let blocks' = makeSections True Nothing blocks
216+ let doc' = Pandoc meta blocks'
217+
215218 username <- P.lookupEnv "USERNAME"
216219 utctime <- P.getCurrentTime
217220 oldUserDataDir <- P.getUserDataDir
@@ -898,11 +901,21 @@ blockToOpenXML' opts (Div (ident,_classes,kvs) bs) = do
898901 header <- dirmod $ stylemod $ blocksToOpenXML opts hs
899902 contents <- dirmod $ bibmod $ stylemod $ blocksToOpenXML opts bs'
900903 wrapBookmark ident $ header <> contents
901−blockToOpenXML' opts (Header lev (ident,_,_) lst) = do
904+blockToOpenXML' opts (Header lev (ident,_,kvs) lst) = do
902905 setFirstPara
903906 paraProps <- withParaPropM (pStyleM (fromString $ "Heading "++show lev)) $
904907 getParaProps False
905− contents <- inlinesToOpenXML opts lst
908+ number <-
909+ if writerNumberSections opts
910+ then
911+ case lookup "number" kvs of
912+ Just n -> do
913+ num <- withTextPropM (rStyleM "SectionNumber")
914+ (inlineToOpenXML opts (Str n))
915+ return $ num ++ [mknode "w:r" [] [mknode "w:tab" [] ()]]
916+ Nothing -> return []
917+ else return []
918+ contents <- (number ++) <$> inlinesToOpenXML opts lst
906919 if T.null ident
907920 then return [mknode "w:p" [] (paraProps ++ contents)]
908921 else do