generated theindex.html is valid html
This commit is contained in:
parent
89320e133b
commit
37c3c0033d
3 changed files with 25 additions and 14 deletions
|
|
@ -456,7 +456,7 @@ proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind) =
|
||||||
var seeSrcRope: Rope = nil
|
var seeSrcRope: Rope = nil
|
||||||
let docItemSeeSrc = getConfigVar("doc.item.seesrc")
|
let docItemSeeSrc = getConfigVar("doc.item.seesrc")
|
||||||
if docItemSeeSrc.len > 0:
|
if docItemSeeSrc.len > 0:
|
||||||
let cwd = getCurrentDir()
|
let cwd = getCurrentDir().canonicalizePath()
|
||||||
var path = n.info.toFullPath
|
var path = n.info.toFullPath
|
||||||
if path.startsWith(cwd):
|
if path.startsWith(cwd):
|
||||||
path = path[cwd.len+1 .. ^1].replace('\\', '/')
|
path = path[cwd.len+1 .. ^1].replace('\\', '/')
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ doc.listing_end = "</pre>"
|
||||||
doc.file = """<?xml version="1.0" encoding="utf-8" ?>
|
doc.file = """<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
"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">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
|
@ -1280,14 +1280,14 @@ function togglepragma(d) {
|
||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
var elements = document.getElementsByClassName("pragmabegin");
|
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];
|
var e = elements[i];
|
||||||
e.onclick = function(event) {
|
e.onclick = function(event) {
|
||||||
togglepragma(event.target.nextSibling);
|
togglepragma(event.target.nextSibling);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
var elements = document.getElementsByClassName("pragmaend");
|
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];
|
var e = elements[i];
|
||||||
e.onclick = function(event) {
|
e.onclick = function(event) {
|
||||||
togglepragma(event.target.previousSibling);
|
togglepragma(event.target.previousSibling);
|
||||||
|
|
|
||||||
|
|
@ -415,18 +415,28 @@ proc sortIndex(a: var openArray[IndexEntry]) =
|
||||||
a[j] <- v
|
a[j] <- v
|
||||||
if h == 1: break
|
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 =
|
proc generateSymbolIndex(symbols: seq[IndexEntry]): string =
|
||||||
result = ""
|
result = "<dl>"
|
||||||
var i = 0
|
var i = 0
|
||||||
while i < symbols.len:
|
while i < symbols.len:
|
||||||
let keyword= symbols[i].keyword
|
let keyword = symbols[i].keyword
|
||||||
let cleaned_keyword = keyword[1..keyword.high - 1]
|
let cleaned_keyword = keyword.escapeLink
|
||||||
result.addf("<dt><a name=\"$2\" href=\"#$2\"><span>$1:</span></a></dt><ul class=\"simple\"><dd>\n",
|
result.addf("<dt><a name=\"$2\" href=\"#$2\"><span>$1:</span></a></dt><dd><ul class=\"simple\">\n",
|
||||||
[keyword, cleaned_keyword])
|
[keyword, cleaned_keyword])
|
||||||
var j = i
|
var j = i
|
||||||
while j < symbols.len and keyword == symbols[j].keyword:
|
while j < symbols.len and keyword == symbols[j].keyword:
|
||||||
let
|
let
|
||||||
url = symbols[j].link
|
url = symbols[j].link.escapeLink #replace("&", "&")
|
||||||
text = if not symbols[j].linkTitle.isNil: symbols[j].linkTitle else: url
|
text = if not symbols[j].linkTitle.isNil: symbols[j].linkTitle else: url
|
||||||
desc = if not symbols[j].linkDesc.isNil: symbols[j].linkDesc else: ""
|
desc = if not symbols[j].linkDesc.isNil: symbols[j].linkDesc else: ""
|
||||||
if desc.len > 0:
|
if desc.len > 0:
|
||||||
|
|
@ -439,6 +449,7 @@ proc generateSymbolIndex(symbols: seq[IndexEntry]): string =
|
||||||
inc j
|
inc j
|
||||||
result.add("</ul></dd>\n")
|
result.add("</ul></dd>\n")
|
||||||
i = j
|
i = j
|
||||||
|
result.add("</dl>")
|
||||||
|
|
||||||
proc isDocumentationTitle(hyperlink: string): bool =
|
proc isDocumentationTitle(hyperlink: string): bool =
|
||||||
## Returns true if the hyperlink is actually a documentation title.
|
## 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:
|
if level == newLevel:
|
||||||
return
|
return
|
||||||
if newLevel > level:
|
if newLevel > level:
|
||||||
result = repeat("<ul>", newLevel - level)
|
result = repeat("<li><ul>", newLevel - level)
|
||||||
else:
|
else:
|
||||||
result = repeat("</ul>", level - newLevel)
|
result = repeat("</ul></li>", level - newLevel)
|
||||||
level = newLevel
|
level = newLevel
|
||||||
|
|
||||||
proc generateDocumentationTOC(entries: seq[IndexEntry]): string =
|
proc generateDocumentationTOC(entries: seq[IndexEntry]): string =
|
||||||
|
|
@ -503,7 +514,7 @@ proc generateDocumentationTOC(entries: seq[IndexEntry]): string =
|
||||||
else:
|
else:
|
||||||
result.add(level.indentToLevel(levels[L].level))
|
result.add(level.indentToLevel(levels[L].level))
|
||||||
result.add("<li><a href=\"" & link & "\">" &
|
result.add("<li><a href=\"" & link & "\">" &
|
||||||
levels[L].text & "</a>\n")
|
levels[L].text & "</a></li>\n")
|
||||||
inc L
|
inc L
|
||||||
result.add(level.indentToLevel(1) & "</ul>\n")
|
result.add(level.indentToLevel(1) & "</ul>\n")
|
||||||
assert(not titleRef.isNil,
|
assert(not titleRef.isNil,
|
||||||
|
|
@ -520,7 +531,7 @@ proc generateDocumentationIndex(docs: IndexedDocs): string =
|
||||||
for title in titles:
|
for title in titles:
|
||||||
let tocList = generateDocumentationTOC(docs.getOrDefault(title))
|
let tocList = generateDocumentationTOC(docs.getOrDefault(title))
|
||||||
result.add("<ul><li><a href=\"" &
|
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 =
|
proc generateDocumentationJumps(docs: IndexedDocs): string =
|
||||||
## Returns a plain list of hyperlinks to documentation TOCs in HTML.
|
## Returns a plain list of hyperlinks to documentation TOCs in HTML.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue