@@ -879,14 +879,7 @@ blockToOpenXML' opts (Div (ident,classes,kvs) bs) = do
879879 else id
880880 header <- dirmod $ stylemod $ blocksToOpenXML opts hs
881881 contents <- dirmod $ bibmod $ stylemod $ blocksToOpenXML opts bs'
882− if null ident
883− then return $ header ++ contents
884− else do
885− id' <- getUniqueId
886− let bookmarkStart = mknode "w:bookmarkStart" [("w:id", id')
887− ,("w:name",ident)] ()
888− let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id", id')] ()
889− return $ bookmarkStart : header ++ contents ++ [bookmarkEnd]
882+ wrapBookmark ident $ header ++ contents
890883blockToOpenXML' opts (Header lev (ident,_,_) lst) = do
891884 setFirstPara
892885 paraProps <- withParaPropM (pStyleM ("Heading "++show lev)) $
@@ -898,12 +891,8 @@ blockToOpenXML' opts (Header lev (ident,_,_) lst) = do
898891 let bookmarkName = ident
899892 modify $ \s -> s{ stSectionIds = Set.insert bookmarkName
900893 $ stSectionIds s }
901− id' <- getUniqueId
902− let bookmarkStart = mknode "w:bookmarkStart" [("w:id", id')
903− ,("w:name",bookmarkName)] ()
904− let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id", id')] ()
905− return [mknode "w:p" [] (paraProps ++
906− [bookmarkStart] ++ contents ++ [bookmarkEnd])]
894+ bookmarkedContents <- wrapBookmark bookmarkName contents
895+ return [mknode "w:p" [] (paraProps ++ bookmarkedContents)]
907896blockToOpenXML' opts (Plain lst) = withParaProp (pCustomStyle "Compact")
908897 $ blockToOpenXML opts (Para lst)
909898-- title beginning with fig: indicates that the image is a figure
@@ -1202,14 +1191,7 @@ inlineToOpenXML' opts (Span (ident,classes,kvs) ils) = do
12021191 else return id
12031192 contents <- insmod $ delmod $ dirmod $ stylemod $ pmod
12041193 $ inlinesToOpenXML opts ils
1205− if null ident
1206− then return contents
1207− else do
1208− id' <- getUniqueId
1209− let bookmarkStart = mknode "w:bookmarkStart" [("w:id", id')
1210− ,("w:name",ident)] ()
1211− let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id", id')] ()
1212− return $ bookmarkStart : contents ++ [bookmarkEnd]
1194+ wrapBookmark ident contents
12131195inlineToOpenXML' opts (Strong lst) =
12141196 withTextProp (mknode "w:b" [] ()) $ inlinesToOpenXML opts lst
12151197inlineToOpenXML' opts (Emph lst) =
@@ -1440,3 +1422,12 @@ withDirection x = do
14401422 else flip local x $ \env -> env { envParaProperties = paraProps'
14411423 , envTextProperties = textProps'
14421424 }
1425+
1426+wrapBookmark :: (PandocMonad m) => String -> [Element] -> WS m [Element]
1427+wrapBookmark [] contents = return contents
1428+wrapBookmark ident contents = do
1429+ id' <- getUniqueId
1430+ let bookmarkStart = mknode "w:bookmarkStart" [("w:id", id')
1431+ ,("w:name",ident)] ()
1432+ bookmarkEnd = mknode "w:bookmarkEnd" [("w:id", id')] ()
1433+ return $ bookmarkStart : contents ++ [bookmarkEnd]