summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authordef <dennis@felsin9.de>2015-03-13 01:32:23 +0100
committerdef <dennis@felsin9.de>2015-03-13 01:32:23 +0100
commit0255876055b280eae4e185bf9e6580b8656255d5 (patch)
tree8e7a31ef1606e4ee9e3b410356364ef0a94aed78 /lib
parentc707923cc1d6f6aa08afadb02ccf21d15d223f7f (diff)
downloadNim-0255876055b280eae4e185bf9e6580b8656255d5.tar.gz
rstgen: Unique reference names in TOC
- Fixes #2269
- Keeps track of higher level section to create unique reference names
Diffstat (limited to 'lib')
-rw-r--r--lib/packages/docutils/rstgen.nim9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/packages/docutils/rstgen.nim b/lib/packages/docutils/rstgen.nim
index a385336d6..da05be9bf 100644
--- a/lib/packages/docutils/rstgen.nim
+++ b/lib/packages/docutils/rstgen.nim
@@ -681,7 +681,14 @@ proc renderHeadline(d: PDoc, n: PRstNode, result: var string) =
   var tmp = ""
   for i in countup(0, len(n) - 1): renderRstToOut(d, n.sons[i], tmp)
   d.currentSection = tmp
-  var refname = rstnodeToRefname(n)
+  # Find the last higher level section for unique reference name
+  var sectionPrefix = ""
+  for i in countdown(d.tocPart.high, 0):
+    let n2 = d.tocPart[i].n
+    if n2.level < n.level:
+      sectionPrefix = rstnodeToRefname(n2) & "-"
+      break
+  var refname = sectionPrefix & rstnodeToRefname(n)
   if d.hasToc:
     var length = len(d.tocPart)
     setLen(d.tocPart, length + 1)