docgen: produce links for proc names
This commit is contained in:
parent
46d5fb9ed7
commit
13d667ee53
4 changed files with 26 additions and 15 deletions
|
|
@ -300,13 +300,17 @@ proc externalDep(d: PDoc; module: PSym): string =
|
||||||
else:
|
else:
|
||||||
result = extractFilename toFullPath(d.conf, FileIndex module.position)
|
result = extractFilename toFullPath(d.conf, FileIndex module.position)
|
||||||
|
|
||||||
proc nodeToHighlightedHtml(d: PDoc; n: PNode; result: var Rope; renderFlags: TRenderFlags = {}) =
|
proc nodeToHighlightedHtml(d: PDoc; n: PNode; result: var Rope; renderFlags: TRenderFlags = {};
|
||||||
|
procLink: Rope) =
|
||||||
var r: TSrcGen
|
var r: TSrcGen
|
||||||
var literal = ""
|
var literal = ""
|
||||||
initTokRender(r, n, renderFlags)
|
initTokRender(r, n, renderFlags)
|
||||||
var kind = tkEof
|
var kind = tkEof
|
||||||
|
var tokenPos = 0
|
||||||
|
var procTokenPos = 0
|
||||||
while true:
|
while true:
|
||||||
getNextTok(r, kind, literal)
|
getNextTok(r, kind, literal)
|
||||||
|
inc tokenPos
|
||||||
case kind
|
case kind
|
||||||
of tkEof:
|
of tkEof:
|
||||||
break
|
break
|
||||||
|
|
@ -314,6 +318,8 @@ proc nodeToHighlightedHtml(d: PDoc; n: PNode; result: var Rope; renderFlags: TRe
|
||||||
dispA(d.conf, result, "<span class=\"Comment\">$1</span>", "\\spanComment{$1}",
|
dispA(d.conf, result, "<span class=\"Comment\">$1</span>", "\\spanComment{$1}",
|
||||||
[rope(esc(d.target, literal))])
|
[rope(esc(d.target, literal))])
|
||||||
of tokKeywordLow..tokKeywordHigh:
|
of tokKeywordLow..tokKeywordHigh:
|
||||||
|
if kind in {tkProc, tkMethod, tkIterator, tkMacro, tkTemplate, tkFunc, tkConverter}:
|
||||||
|
procTokenPos = tokenPos
|
||||||
dispA(d.conf, result, "<span class=\"Keyword\">$1</span>", "\\spanKeyword{$1}",
|
dispA(d.conf, result, "<span class=\"Keyword\">$1</span>", "\\spanKeyword{$1}",
|
||||||
[rope(literal)])
|
[rope(literal)])
|
||||||
of tkOpr:
|
of tkOpr:
|
||||||
|
|
@ -333,7 +339,11 @@ proc nodeToHighlightedHtml(d: PDoc; n: PNode; result: var Rope; renderFlags: TRe
|
||||||
"\\spanFloatNumber{$1}", [rope(esc(d.target, literal))])
|
"\\spanFloatNumber{$1}", [rope(esc(d.target, literal))])
|
||||||
of tkSymbol:
|
of tkSymbol:
|
||||||
let s = getTokSym(r)
|
let s = getTokSym(r)
|
||||||
if s != nil and s.kind == skType and sfExported in s.flags and
|
# -2 because of the whitespace in between:
|
||||||
|
if procTokenPos == tokenPos-2 and procLink != nil:
|
||||||
|
dispA(d.conf, result, "<a href=\"#$2\"><span class=\"Identifier\">$1</span></a>",
|
||||||
|
"\\spanIdentifier{$1}", [rope(esc(d.target, literal)), procLink])
|
||||||
|
elif s != nil and s.kind == skType and sfExported in s.flags and
|
||||||
s.owner != nil and belongsToPackage(d.conf, s.owner) and
|
s.owner != nil and belongsToPackage(d.conf, s.owner) and
|
||||||
d.target == outHtml:
|
d.target == outHtml:
|
||||||
let external = externalDep(d, s.owner)
|
let external = externalDep(d, s.owner)
|
||||||
|
|
@ -445,7 +455,7 @@ proc getAllRunnableExamplesRec(d: PDoc; n, orig: PNode; dest: var Rope) =
|
||||||
for b in body:
|
for b in body:
|
||||||
if i > 0: dest.add "\n"
|
if i > 0: dest.add "\n"
|
||||||
inc i
|
inc i
|
||||||
nodeToHighlightedHtml(d, b, dest, {})
|
nodeToHighlightedHtml(d, b, dest, {}, nil)
|
||||||
dest.add(d.config.getOrDefault"doc.listing_end" % id)
|
dest.add(d.config.getOrDefault"doc.listing_end" % id)
|
||||||
else: discard
|
else: discard
|
||||||
for i in 0 ..< n.safeLen:
|
for i in 0 ..< n.safeLen:
|
||||||
|
|
@ -615,9 +625,6 @@ proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind) =
|
||||||
break
|
break
|
||||||
plainName.add(literal)
|
plainName.add(literal)
|
||||||
|
|
||||||
nodeToHighlightedHtml(d, n, result, {renderNoBody, renderNoComments,
|
|
||||||
renderDocComments, renderSyms})
|
|
||||||
|
|
||||||
inc(d.id)
|
inc(d.id)
|
||||||
let
|
let
|
||||||
plainNameRope = rope(xmltree.escape(plainName.strip))
|
plainNameRope = rope(xmltree.escape(plainName.strip))
|
||||||
|
|
@ -630,6 +637,9 @@ proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind) =
|
||||||
symbolOrIdRope = symbolOrId.rope
|
symbolOrIdRope = symbolOrId.rope
|
||||||
symbolOrIdEncRope = encodeUrl(symbolOrId).rope
|
symbolOrIdEncRope = encodeUrl(symbolOrId).rope
|
||||||
|
|
||||||
|
nodeToHighlightedHtml(d, n, result, {renderNoBody, renderNoComments,
|
||||||
|
renderDocComments, renderSyms}, symbolOrIdEncRope)
|
||||||
|
|
||||||
var seeSrcRope: Rope = nil
|
var seeSrcRope: Rope = nil
|
||||||
let docItemSeeSrc = getConfigVar(d.conf, "doc.item.seesrc")
|
let docItemSeeSrc = getConfigVar(d.conf, "doc.item.seesrc")
|
||||||
if docItemSeeSrc.len > 0:
|
if docItemSeeSrc.len > 0:
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,8 @@ proc test(dir: string; fixup = false) =
|
||||||
copyFile(produced, expected)
|
copyFile(produced, expected)
|
||||||
else:
|
else:
|
||||||
echo "SUCCESS: files identical: ", produced
|
echo "SUCCESS: files identical: ", produced
|
||||||
removeDir(dir / "htmldocs")
|
if failures == 0:
|
||||||
|
removeDir(dir / "htmldocs")
|
||||||
|
|
||||||
test("nimdoc/testproject", defined(fixup))
|
test("nimdoc/testproject", defined(fixup))
|
||||||
if failures > 0: quit($failures & " failures occurred.")
|
if failures > 0: quit($failures & " failures occurred.")
|
||||||
|
|
|
||||||
|
|
@ -1305,7 +1305,7 @@ function main() {
|
||||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||||
<dl class="item">
|
<dl class="item">
|
||||||
<a id="someType,"></a>
|
<a id="someType,"></a>
|
||||||
<dt><pre><span class="Keyword">proc</span> <span class="Identifier">someType</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="utils.html#SomeType"><span class="Identifier">SomeType</span></a> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
|
<dt><pre><span class="Keyword">proc</span> <a href="#someType%2C"><span class="Identifier">someType</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="utils.html#SomeType"><span class="Identifier">SomeType</span></a> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
|
||||||
<dd>
|
<dd>
|
||||||
constructor.
|
constructor.
|
||||||
|
|
||||||
|
|
@ -1316,13 +1316,13 @@ constructor.
|
||||||
<h1><a class="toc-backref" href="#18">Templates</a></h1>
|
<h1><a class="toc-backref" href="#18">Templates</a></h1>
|
||||||
<dl class="item">
|
<dl class="item">
|
||||||
<a id="aEnum.t,"></a>
|
<a id="aEnum.t,"></a>
|
||||||
<dt><pre><span class="Keyword">template</span> <span class="Identifier">aEnum</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">untyped</span></pre></dt>
|
<dt><pre><span class="Keyword">template</span> <a href="#aEnum.t%2C"><span class="Identifier">aEnum</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">untyped</span></pre></dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
<a id="bEnum.t,"></a>
|
<a id="bEnum.t,"></a>
|
||||||
<dt><pre><span class="Keyword">template</span> <span class="Identifier">bEnum</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">untyped</span></pre></dt>
|
<dt><pre><span class="Keyword">template</span> <a href="#bEnum.t%2C"><span class="Identifier">bEnum</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">untyped</span></pre></dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1350,13 +1350,13 @@ The enum B.
|
||||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||||
<dl class="item">
|
<dl class="item">
|
||||||
<a id="bar,T,T"></a>
|
<a id="bar,T,T"></a>
|
||||||
<dt><pre><span class="Keyword">proc</span> <span class="Identifier">bar</span><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">a</span><span class="Other">,</span> <span class="Identifier">b</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt>
|
<dt><pre><span class="Keyword">proc</span> <a href="#bar%2CT%2CT"><span class="Identifier">bar</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">a</span><span class="Other">,</span> <span class="Identifier">b</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
<a id="isValid,T"></a>
|
<a id="isValid,T"></a>
|
||||||
<dt><pre><span class="Keyword">proc</span> <span class="Identifier">isValid</span><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">bool</span></pre></dt>
|
<dt><pre><span class="Keyword">proc</span> <a href="#isValid%2CT"><span class="Identifier">isValid</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">bool</span></pre></dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1367,7 +1367,7 @@ The enum B.
|
||||||
<h1><a class="toc-backref" href="#13">Funcs</a></h1>
|
<h1><a class="toc-backref" href="#13">Funcs</a></h1>
|
||||||
<dl class="item">
|
<dl class="item">
|
||||||
<a id="someFunc,"></a>
|
<a id="someFunc,"></a>
|
||||||
<dt><pre><span class="Keyword">func</span> <span class="Identifier">someFunc</span><span class="Other">(</span><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
|
<dt><pre><span class="Keyword">func</span> <a href="#someFunc%2C"><span class="Identifier">someFunc</span></a><span class="Other">(</span><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
|
||||||
<dd>
|
<dd>
|
||||||
My someFunc. Stuff in <tt class="docutils literal"><span class="pre">quotes</span></tt> here. <a class="reference external" href="https://nim-lang.org">Some link</a>
|
My someFunc. Stuff in <tt class="docutils literal"><span class="pre">quotes</span></tt> here. <a class="reference external" href="https://nim-lang.org">Some link</a>
|
||||||
|
|
||||||
|
|
@ -1378,7 +1378,7 @@ My someFunc. Stuff in <tt class="docutils literal"><span class="pre">quotes</spa
|
||||||
<h1><a class="toc-backref" href="#17">Macros</a></h1>
|
<h1><a class="toc-backref" href="#17">Macros</a></h1>
|
||||||
<dl class="item">
|
<dl class="item">
|
||||||
<a id="bar.m,"></a>
|
<a id="bar.m,"></a>
|
||||||
<dt><pre><span class="Keyword">macro</span> <span class="Identifier">bar</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">untyped</span></pre></dt>
|
<dt><pre><span class="Keyword">macro</span> <a href="#bar.m%2C"><span class="Identifier">bar</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">untyped</span></pre></dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1389,7 +1389,7 @@ My someFunc. Stuff in <tt class="docutils literal"><span class="pre">quotes</spa
|
||||||
<h1><a class="toc-backref" href="#18">Templates</a></h1>
|
<h1><a class="toc-backref" href="#18">Templates</a></h1>
|
||||||
<dl class="item">
|
<dl class="item">
|
||||||
<a id="foo.t,SomeType,SomeType"></a>
|
<a id="foo.t,SomeType,SomeType"></a>
|
||||||
<dt><pre><span class="Keyword">template</span> <span class="Identifier">foo</span><span class="Other">(</span><span class="Identifier">a</span><span class="Other">,</span> <span class="Identifier">b</span><span class="Other">:</span> <a href="subdir/subdir_b/utils.html#SomeType"><span class="Identifier">SomeType</span></a><span class="Other">)</span></pre></dt>
|
<dt><pre><span class="Keyword">template</span> <a href="#foo.t%2CSomeType%2CSomeType"><span class="Identifier">foo</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">,</span> <span class="Identifier">b</span><span class="Other">:</span> <a href="subdir/subdir_b/utils.html#SomeType"><span class="Identifier">SomeType</span></a><span class="Other">)</span></pre></dt>
|
||||||
<dd>
|
<dd>
|
||||||
This does nothing
|
This does nothing
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue