summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2017-09-27 20:42:04 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2017-09-27 20:42:04 -0700
commit2314534d4da815fa23f622d43a8d7a2c8902ee8e (patch)
tree7900d6b8d515a20c7edf8ed669cb33ae6f31add6
parent394b1985b13780310fd2b3bec7ca9f635a3221cb (diff)
RST writer: add header anchors when header has non-standard id.
Closes #3937.
-rw-r--r--src/Text/Pandoc/Writers/RST.hs7
-rw-r--r--test/command/3937.md13
2 files changed, 19 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Writers/RST.hs b/src/Text/Pandoc/Writers/RST.hs
index 8c941f568..94c135715 100644
--- a/src/Text/Pandoc/Writers/RST.hs
+++ b/src/Text/Pandoc/Writers/RST.hs
@@ -239,12 +239,17 @@ blockToRST HorizontalRule =
return $ blankline $$ "--------------" $$ blankline
blockToRST (Header level (name,classes,_) inlines) = do
contents <- inlineListToRST inlines
+ -- we calculate the id that would be used by auto_identifiers
+ -- so we know whether to print an explicit identifier
+ let autoId = uniqueIdent inlines mempty
isTopLevel <- gets stTopLevel
if isTopLevel
then do
let headerChar = if level > 5 then ' ' else "=-~^'" !! (level - 1)
let border = text $ replicate (offset contents) headerChar
- return $ nowrap $ contents $$ border $$ blankline
+ let anchor | null name || name == autoId = empty
+ | otherwise = ".. " <> text name <> ":" $$ blankline
+ return $ nowrap $ anchor $$ contents $$ border $$ blankline
else do
let rub = "rubric:: " <> contents
let name' | null name = empty
diff --git a/test/command/3937.md b/test/command/3937.md
new file mode 100644
index 000000000..1d5e4238a
--- /dev/null
+++ b/test/command/3937.md
@@ -0,0 +1,13 @@
+```
+% pandoc -t rst
+# My Great Section {#mysection}
+# Other section
+^D
+.. mysection:
+
+My Great Section
+================
+
+Other section
+=============
+```