mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-19 05:50:30 +00:00
generated theindex.html is valid html
This commit is contained in:
@@ -456,7 +456,7 @@ proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind) =
|
||||
var seeSrcRope: Rope = nil
|
||||
let docItemSeeSrc = getConfigVar("doc.item.seesrc")
|
||||
if docItemSeeSrc.len > 0:
|
||||
let cwd = getCurrentDir()
|
||||
let cwd = getCurrentDir().canonicalizePath()
|
||||
var path = n.info.toFullPath
|
||||
if path.startsWith(cwd):
|
||||
path = path[cwd.len+1 .. ^1].replace('\\', '/')
|
||||
|
||||
@@ -115,7 +115,7 @@ doc.listing_end = "</pre>"
|
||||
doc.file = """<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nimrod. -->
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
@@ -1280,14 +1280,14 @@ function togglepragma(d) {
|
||||
|
||||
function main() {
|
||||
var elements = document.getElementsByClassName("pragmabegin");
|
||||
for (var i = 0; i < elements.length; ++i) {
|
||||
for (var i = 0; i < elements.length; ++i) {
|
||||
var e = elements[i];
|
||||
e.onclick = function(event) {
|
||||
togglepragma(event.target.nextSibling);
|
||||
};
|
||||
}
|
||||
var elements = document.getElementsByClassName("pragmaend");
|
||||
for (var i = 0; i < elements.length; ++i) {
|
||||
for (var i = 0; i < elements.length; ++i) {
|
||||
var e = elements[i];
|
||||
e.onclick = function(event) {
|
||||
togglepragma(event.target.previousSibling);
|
||||
|
||||
@@ -415,18 +415,28 @@ proc sortIndex(a: var openArray[IndexEntry]) =
|
||||
a[j] <- v
|
||||
if h == 1: break
|
||||
|
||||
proc escapeLink(s: string): string =
|
||||
result = newStringOfCap(s.len + s.len shr 2)
|
||||
for c in items(s):
|
||||
case c
|
||||
of 'a'..'z', '_', 'A'..'Z', '0'..'9':
|
||||
result.add c
|
||||
else:
|
||||
add(result, "X")
|
||||
add(result, toHex(ord(c), 2))
|
||||
|
||||
proc generateSymbolIndex(symbols: seq[IndexEntry]): string =
|
||||
result = ""
|
||||
result = "<dl>"
|
||||
var i = 0
|
||||
while i < symbols.len:
|
||||
let keyword= symbols[i].keyword
|
||||
let cleaned_keyword = keyword[1..keyword.high - 1]
|
||||
result.addf("<dt><a name=\"$2\" href=\"#$2\"><span>$1:</span></a></dt><ul class=\"simple\"><dd>\n",
|
||||
let keyword = symbols[i].keyword
|
||||
let cleaned_keyword = keyword.escapeLink
|
||||
result.addf("<dt><a name=\"$2\" href=\"#$2\"><span>$1:</span></a></dt><dd><ul class=\"simple\">\n",
|
||||
[keyword, cleaned_keyword])
|
||||
var j = i
|
||||
while j < symbols.len and keyword == symbols[j].keyword:
|
||||
let
|
||||
url = symbols[j].link
|
||||
url = symbols[j].link.escapeLink #replace("&", "&")
|
||||
text = if not symbols[j].linkTitle.isNil: symbols[j].linkTitle else: url
|
||||
desc = if not symbols[j].linkDesc.isNil: symbols[j].linkDesc else: ""
|
||||
if desc.len > 0:
|
||||
@@ -439,6 +449,7 @@ proc generateSymbolIndex(symbols: seq[IndexEntry]): string =
|
||||
inc j
|
||||
result.add("</ul></dd>\n")
|
||||
i = j
|
||||
result.add("</dl>")
|
||||
|
||||
proc isDocumentationTitle(hyperlink: string): bool =
|
||||
## Returns true if the hyperlink is actually a documentation title.
|
||||
@@ -463,9 +474,9 @@ proc indentToLevel(level: var int, newLevel: int): string =
|
||||
if level == newLevel:
|
||||
return
|
||||
if newLevel > level:
|
||||
result = repeat("<ul>", newLevel - level)
|
||||
result = repeat("<li><ul>", newLevel - level)
|
||||
else:
|
||||
result = repeat("</ul>", level - newLevel)
|
||||
result = repeat("</ul></li>", level - newLevel)
|
||||
level = newLevel
|
||||
|
||||
proc generateDocumentationTOC(entries: seq[IndexEntry]): string =
|
||||
@@ -503,7 +514,7 @@ proc generateDocumentationTOC(entries: seq[IndexEntry]): string =
|
||||
else:
|
||||
result.add(level.indentToLevel(levels[L].level))
|
||||
result.add("<li><a href=\"" & link & "\">" &
|
||||
levels[L].text & "</a>\n")
|
||||
levels[L].text & "</a></li>\n")
|
||||
inc L
|
||||
result.add(level.indentToLevel(1) & "</ul>\n")
|
||||
assert(not titleRef.isNil,
|
||||
@@ -520,7 +531,7 @@ proc generateDocumentationIndex(docs: IndexedDocs): string =
|
||||
for title in titles:
|
||||
let tocList = generateDocumentationTOC(docs.getOrDefault(title))
|
||||
result.add("<ul><li><a href=\"" &
|
||||
title.link & "\">" & title.keyword & "</a>\n" & tocList & "</ul>\n")
|
||||
title.link & "\">" & title.keyword & "</a>\n" & tocList & "</li></ul>\n")
|
||||
|
||||
proc generateDocumentationJumps(docs: IndexedDocs): string =
|
||||
## Returns a plain list of hyperlinks to documentation TOCs in HTML.
|
||||
@@ -783,7 +794,7 @@ proc renderImage(d: PDoc, n: PRstNode, result: var string) =
|
||||
if s.valid: dispA(d.target, options, " align=\"$1\"", "", [strip(s)])
|
||||
|
||||
if options.len > 0: options = dispF(d.target, "$1", "[$1]", [options])
|
||||
|
||||
|
||||
if arg.valid:
|
||||
let htmlOut = if isObject:
|
||||
"<object data=\"$1\" type=\"image/svg+xml\"$2 >" & content & "</object>"
|
||||
|
||||
Reference in New Issue
Block a user