@@ -50,6 +50,7 @@ import Text.XML.Light
5050import Text.TeXMath
5151import Control.Monad.State
5252import Text.Highlighting.Kate
53+import Data.Unique (hashUnique, newUnique)
5354
5455data WriterState = WriterState{
5556 stTextProperties :: [Element]
@@ -333,11 +334,12 @@ blockToOpenXML opts (Header lev lst) = do
333334 contents <- withParaProp (pStyle $ "Heading" ++ show lev) $
334335 blockToOpenXML opts (Para lst)
335336 usedIdents <- gets stSectionIds
336− let ident = uniqueIdent lst usedIdents
337− modify $ \s -> s{ stSectionIds = ident : stSectionIds s }
338− let bookmarkStart = mknode "w:bookmarkStart" [("w:id",ident)
339− ,("w:name",ident)] ()
340− let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id",ident)] ()
337+ let bookmarkName = uniqueIdent lst usedIdents
338+ modify $ \s -> s{ stSectionIds = bookmarkName : stSectionIds s }
339+ id' <- liftIO $ hashUnique `fmap` newUnique
340+ let bookmarkStart = mknode "w:bookmarkStart" [("w:id",show id')
341+ ,("w:name",bookmarkName)] ()
342+ let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id",show id')] ()
341343 return $ [bookmarkStart] ++ contents ++ [bookmarkEnd]
342344blockToOpenXML opts (Plain lst) = blockToOpenXML opts (Para lst)
343345blockToOpenXML opts (Para x@[Image alt _]) = do
@@ -574,7 +576,7 @@ inlineToOpenXML _ (Code attrs str) =
574576 , mknode "w:t" [("xml:space","preserve")] tok ]
575577inlineToOpenXML opts (Note bs) = do
576578 notes <- gets stFootnotes
577− let notenum = length notes + 1
579+ notenum <- liftIO $ hashUnique `fmap` newUnique
578580 let notemarker = mknode "w:r" []
579581 [ mknode "w:rPr" [] (rStyle "FootnoteReference")
580582 , mknode "w:footnoteRef" [] () ]