summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesse Rosenthal <jrosenthal@jhu.edu>2016-08-28 18:09:27 -0400
committerJesse Rosenthal <jrosenthal@jhu.edu>2016-08-28 18:09:27 -0400
commit2893b0055aacb08e0970c6b7993f5385ef707884 (patch)
tree7cd88613133ecd12732e13f781cb60a08028c893 /src
parent62882f976d2fb37c317dac7c35c6ce82b784b95b (diff)
Docx reader: Let headers use exisiting id.
Previously we always generated an id for headers (since they wouldn't bring one from Docx). Now we let it use an existing one if possible. This should allow us to recurs through anchor spans.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Readers/Docx.hs16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/Text/Pandoc/Readers/Docx.hs b/src/Text/Pandoc/Readers/Docx.hs
index f74b2b6d6..83b34ad00 100644
--- a/src/Text/Pandoc/Readers/Docx.hs
+++ b/src/Text/Pandoc/Readers/Docx.hs
@@ -431,21 +431,25 @@ makeHeaderAnchor bs = case viewl $ unMany bs of
makeHeaderAnchor' :: Block -> DocxContext Block
-- If there is an anchor already there (an anchor span in the header,
-- to be exact), we rename and associate the new id with the old one.
-makeHeaderAnchor' (Header n (_, classes, kvs) ils)
+makeHeaderAnchor' (Header n (ident, classes, kvs) ils)
| (c:_) <- filter isAnchorSpan ils
- , (Span (ident, ["anchor"], _) cIls) <- c = do
+ , (Span (anchIdent, ["anchor"], _) cIls) <- c = do
hdrIDMap <- gets docxAnchorMap
- let newIdent = uniqueIdent ils (Set.fromList $ M.elems hdrIDMap)
+ let newIdent = if null ident
+ then uniqueIdent ils (Set.fromList $ M.elems hdrIDMap)
+ else ident
newIls = concatMap f ils where f il | il == c = cIls
| otherwise = [il]
- modify $ \s -> s {docxAnchorMap = M.insert ident newIdent hdrIDMap}
+ modify $ \s -> s {docxAnchorMap = M.insert anchIdent newIdent hdrIDMap}
return $ Header n (newIdent, classes, kvs) newIls
-- Otherwise we just give it a name, and register that name (associate
-- it with itself.)
-makeHeaderAnchor' (Header n (_, classes, kvs) ils) =
+makeHeaderAnchor' (Header n (ident, classes, kvs) ils) =
do
hdrIDMap <- gets docxAnchorMap
- let newIdent = uniqueIdent ils (Set.fromList $ M.elems hdrIDMap)
+ let newIdent = if null ident
+ then uniqueIdent ils (Set.fromList $ M.elems hdrIDMap)
+ else ident
modify $ \s -> s {docxAnchorMap = M.insert newIdent newIdent hdrIDMap}
return $ Header n (newIdent, classes, kvs) ils
makeHeaderAnchor' blk = return blk