docgen: working search feature
This commit is contained in:
parent
3a3aeb94ec
commit
3dfc866710
4 changed files with 26 additions and 19 deletions
|
|
@ -19,20 +19,14 @@ proc renderPlainSymbolName*(n: PNode): string =
|
||||||
## for the HTML hyperlinks.
|
## for the HTML hyperlinks.
|
||||||
result = ""
|
result = ""
|
||||||
case n.kind
|
case n.kind
|
||||||
of nkPostfix:
|
of nkPostfix, nkAccQuoted:
|
||||||
for i in 0 .. <n.len:
|
result = renderPlainSymbolName(n[<n.len])
|
||||||
result = renderPlainSymbolName(n[<n.len])
|
|
||||||
if result.len > 0:
|
|
||||||
return
|
|
||||||
of nkIdent:
|
of nkIdent:
|
||||||
if n.ident.s != "*":
|
result = n.ident.s
|
||||||
result = n.ident.s
|
|
||||||
of nkSym:
|
of nkSym:
|
||||||
result = n.sym.renderDefinitionName(noQuotes = true)
|
result = n.sym.renderDefinitionName(noQuotes = true)
|
||||||
of nkPragmaExpr:
|
of nkPragmaExpr:
|
||||||
result = renderPlainSymbolName(n[0])
|
result = renderPlainSymbolName(n[0])
|
||||||
of nkAccQuoted:
|
|
||||||
result = renderPlainSymbolName(n[<n.len])
|
|
||||||
else:
|
else:
|
||||||
internalError(n.info, "renderPlainSymbolName() with " & $n.kind)
|
internalError(n.info, "renderPlainSymbolName() with " & $n.kind)
|
||||||
assert(not result.isNil)
|
assert(not result.isNil)
|
||||||
|
|
|
||||||
|
|
@ -1275,6 +1275,13 @@ dt pre > span.Operator ~ span.Identifier, dt pre > span.Operator ~ span.Operator
|
||||||
span.pragmaend {
|
span.pragmaend {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.search_results {
|
||||||
|
background-color: antiquewhite;
|
||||||
|
margin: 3em;
|
||||||
|
border-style: inset;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script type="text/javascript" src="../dochack.js"></script>
|
<script type="text/javascript" src="../dochack.js"></script>
|
||||||
|
|
|
||||||
|
|
@ -419,10 +419,10 @@ proc escapeLink(s: string): string =
|
||||||
result = newStringOfCap(s.len + s.len shr 2)
|
result = newStringOfCap(s.len + s.len shr 2)
|
||||||
for c in items(s):
|
for c in items(s):
|
||||||
case c
|
case c
|
||||||
of 'a'..'z', '_', 'A'..'Z', '0'..'9':
|
of 'a'..'z', '_', 'A'..'Z', '0'..'9', '.', '#', ',', '/':
|
||||||
result.add c
|
result.add c
|
||||||
else:
|
else:
|
||||||
add(result, "X")
|
add(result, "%")
|
||||||
add(result, toHex(ord(c), 2))
|
add(result, toHex(ord(c), 2))
|
||||||
|
|
||||||
proc generateSymbolIndex(symbols: seq[IndexEntry]): string =
|
proc generateSymbolIndex(symbols: seq[IndexEntry]): string =
|
||||||
|
|
@ -436,7 +436,7 @@ proc generateSymbolIndex(symbols: seq[IndexEntry]): string =
|
||||||
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.escapeLink #replace("&", "&")
|
url = symbols[j].link.escapeLink
|
||||||
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:
|
||||||
|
|
|
||||||
|
|
@ -241,7 +241,7 @@ proc dosearch(value: cstring): Element =
|
||||||
var stuff: Element
|
var stuff: Element
|
||||||
{.emit: """
|
{.emit: """
|
||||||
var request = new XMLHttpRequest();
|
var request = new XMLHttpRequest();
|
||||||
request.open("GET", "theindex.html", false);
|
request.open("GET", "http://nim-lang.org/0.15.0/theindex.html", false);
|
||||||
request.send(null);
|
request.send(null);
|
||||||
|
|
||||||
var doc = document.implementation.createHTMLDocument("theindex");
|
var doc = document.implementation.createHTMLDocument("theindex");
|
||||||
|
|
@ -259,16 +259,22 @@ proc dosearch(value: cstring): Element =
|
||||||
let ul = tree("UL")
|
let ul = tree("UL")
|
||||||
result = tree("DIV")
|
result = tree("DIV")
|
||||||
result.setClass"search_results"
|
result.setClass"search_results"
|
||||||
var matches = 0
|
var matches: seq[(Element, int)] = @[]
|
||||||
let key = value.normalize
|
let key = value.normalize
|
||||||
for i in 0..<db.len:
|
for i in 0..<db.len:
|
||||||
if containsWord(key, contents[i]):
|
let c = contents[i]
|
||||||
ul.add(tree("LI", db[i]))
|
if c.containsWord(key):
|
||||||
inc matches
|
matches.add((db[i], -(30_000 - c.len)))
|
||||||
if matches > 10: break
|
elif c.contains(key):
|
||||||
|
matches.add((db[i], c.len))
|
||||||
|
matches.sort do (a, b: auto) -> int:
|
||||||
|
a[1] - b[1]
|
||||||
|
for i in 0..min(<matches.len, 19):
|
||||||
|
ul.add(tree("LI", matches[i][0]))
|
||||||
if ul.len == 0:
|
if ul.len == 0:
|
||||||
result.add text"no search results"
|
result.add tree("B", text"no search results")
|
||||||
else:
|
else:
|
||||||
|
result.add tree("B", text"search results")
|
||||||
result.add ul
|
result.add ul
|
||||||
|
|
||||||
var oldtoc: Element
|
var oldtoc: Element
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue