mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-20 06:20:38 +00:00
Fix auto links to subheader when TOC is present (#20279)
Fix links to subheader when TOC is present It was observed (in https://github.com/nim-lang/Nim/pull/20112) that links to 2nd- (and subsequent) -level headings fail if TOC is present, e.g.: ```nim .. contents:: Type relations ============== Convertible relation -------------------- Ref. `Convertible relation`_ ``` The problem here is that links are resolved in `rst.nim` but later `rstgen.nim` fixes ("fixes") anchors to make them unique so that TOC always works (if e.g. there was another sub-section like "Convertible relation"). The solution implemented in this PR is to move that fix-up of anchors into `rst.nim`, so that link resolution could know final anchors. The bug seems to be added in https://github.com/nim-lang/Nim/pull/2332 in 2015, that is it is present in Nim 1.0.
This commit is contained in:
@@ -74,7 +74,7 @@ suite "RST parsing":
|
||||
""".toAst ==
|
||||
dedent"""
|
||||
rnInner
|
||||
rnHeadline level=1
|
||||
rnHeadline level=1 anchor='lexical-analysis'
|
||||
rnLeaf 'Lexical'
|
||||
rnLeaf ' '
|
||||
rnLeaf 'Analysis'
|
||||
|
||||
@@ -536,6 +536,63 @@ Some chapter
|
||||
let output1 = input1.toHtml
|
||||
doAssert output1 == "GC_step"
|
||||
|
||||
test "RST anchors/links to headings":
|
||||
# Currently in TOC mode anchors are modified (for making links from
|
||||
# the TOC unique)
|
||||
let inputNoToc = dedent"""
|
||||
Type relations
|
||||
==============
|
||||
|
||||
Convertible relation
|
||||
--------------------
|
||||
|
||||
Ref. `Convertible relation`_
|
||||
"""
|
||||
let outputNoToc = inputNoToc.toHtml
|
||||
check outputNoToc.count("id=\"type-relations\"") == 1
|
||||
check outputNoToc.count("id=\"convertible-relation\"") == 1
|
||||
check outputNoToc.count("href=\"#convertible-relation\"") == 1
|
||||
|
||||
let inputTocCases = @[
|
||||
dedent"""
|
||||
.. contents::
|
||||
|
||||
Type relations
|
||||
==============
|
||||
|
||||
Convertible relation
|
||||
--------------------
|
||||
|
||||
Ref. `Convertible relation`_
|
||||
|
||||
Guards and locks
|
||||
================
|
||||
""",
|
||||
dedent"""
|
||||
Ref. `Convertible relation`_
|
||||
|
||||
.. contents::
|
||||
|
||||
Type relations
|
||||
==============
|
||||
|
||||
Convertible relation
|
||||
--------------------
|
||||
|
||||
Guards and locks
|
||||
================
|
||||
"""
|
||||
]
|
||||
for inputToc in inputTocCases:
|
||||
let outputToc = inputToc.toHtml
|
||||
check outputToc.count("id=\"type-relations\"") == 1
|
||||
check outputToc.count("id=\"type-relations-convertible-relation\"") == 1
|
||||
check outputToc.count("id=\"convertible-relation\">") == 0
|
||||
# Besides "Ref.", heading also contains link to itself:
|
||||
check outputToc.count(
|
||||
"href=\"#type-relations-convertible-relation\">") == 2
|
||||
check outputToc.count("href=\"#convertible-relation\"") == 0
|
||||
|
||||
test "RST links":
|
||||
let input1 = """
|
||||
Want to learn about `my favorite programming language`_?
|
||||
|
||||
Reference in New Issue
Block a user