@@ -50,6 +50,7 @@ import Text.XML.Light
50import Text.TeXMath
50import Text.TeXMath
51import Control.Monad.State
51import Control.Monad.State
52import Text.Highlighting.Kate
52import Text.Highlighting.Kate
53+import Data.Unique (hashUnique, newUnique)
54data WriterState = WriterState{
55data WriterState = WriterState{
55 stTextProperties :: [Element]
56 stTextProperties :: [Element]
@@ -333,11 +334,12 @@ blockToOpenXML opts (Header lev lst) = do
333 contents <- withParaProp (pStyle $ "Heading" ++ show lev) $
334 contents <- withParaProp (pStyle $ "Heading" ++ show lev) $
334 blockToOpenXML opts (Para lst)
335 blockToOpenXML opts (Para lst)
335 usedIdents <- gets stSectionIds
336 usedIdents <- gets stSectionIds
336− let ident = uniqueIdent lst usedIdents
337+ let bookmarkName = uniqueIdent lst usedIdents
337− modify $ \s -> s{ stSectionIds = ident : stSectionIds s }
338+ modify $ \s -> s{ stSectionIds = bookmarkName : stSectionIds s }
339+ id' <- liftIO $ hashUnique `fmap` newUnique
338− let bookmarkStart = mknode "w:bookmarkStart" [("w:id",ident)
340+ let bookmarkStart = mknode "w:bookmarkStart" [("w:id",show id')
339− ,("w:name",ident)] ()
341+ ,("w:name",bookmarkName)] ()
340− let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id",ident)] ()
342+ let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id",show id')] ()
341 return $ [bookmarkStart] ++ contents ++ [bookmarkEnd]
343 return $ [bookmarkStart] ++ contents ++ [bookmarkEnd]
342blockToOpenXML opts (Plain lst) = blockToOpenXML opts (Para lst)
344blockToOpenXML opts (Plain lst) = blockToOpenXML opts (Para lst)
343blockToOpenXML opts (Para x@[Image alt _]) = do
345blockToOpenXML opts (Para x@[Image alt _]) = do
@@ -574,7 +576,7 @@ inlineToOpenXML _ (Code attrs str) =
574 , mknode "w:t" [("xml:space","preserve")] tok ]
576 , mknode "w:t" [("xml:space","preserve")] tok ]
575inlineToOpenXML opts (Note bs) = do
577inlineToOpenXML opts (Note bs) = do
576 notes <- gets stFootnotes
578 notes <- gets stFootnotes
577− let notenum = length notes + 1
579+ notenum <- liftIO $ hashUnique `fmap` newUnique
578 let notemarker = mknode "w:r" []
580 let notemarker = mknode "w:r" []
579 [ mknode "w:rPr" [] (rStyle "FootnoteReference")
581 [ mknode "w:rPr" [] (rStyle "FootnoteReference")
580 , mknode "w:footnoteRef" [] () ]
582 , mknode "w:footnoteRef" [] () ]