diff options
author | bptato <nincsnevem662@gmail.com> | 2021-08-05 17:16:42 +0200 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2021-08-05 17:16:42 +0200 |
commit | 087f830528b41b00d0bf7a501f7b0472f75ffb18 (patch) | |
tree | ae0096738b46ff1710f1116268ebdebb6924a68b /src/html | |
parent | 69a0f081e6eefdd6a52b0da6586100349b1a6ea8 (diff) | |
download | chawan-087f830528b41b00d0bf7a501f7b0472f75ffb18.tar.gz |
Remove static radix tree and small/full builds
Static radix tree was a hack to begin with and I don't want to deal with it anymore. I might consider small/full builds later on but let's be honest here, it's premature optimization.
Diffstat (limited to 'src/html')
-rw-r--r-- | src/html/entity.nim | 31 | ||||
-rw-r--r-- | src/html/htmlparser.nim | 45 |
2 files changed, 24 insertions, 52 deletions
diff --git a/src/html/entity.nim b/src/html/entity.nim index 79c57ca0..72c5c452 100644 --- a/src/html/entity.nim +++ b/src/html/entity.nim @@ -3,26 +3,15 @@ import json import ../utils/radixtree const entity = staticRead"../../res/entity.json" -when defined(small): - proc genEntityMap(data: seq[tuple[a: string, b: string]]): RadixNode[string] = - result = newRadixTree[string]() - for pair in data: - result[pair.a] = pair.b +proc genEntityMap(data: seq[tuple[a: string, b: string]]): RadixNode[string] = + result = newRadixTree[string]() + for pair in data: + result[pair.a] = pair.b - proc genEntityTable(): seq[tuple[a: string, b: string]] = - let entityJson = parseJson(entity) +proc genEntityTable(): seq[tuple[a: string, b: string]] = + let entityJson = parseJson(entity) - for k, v in entityJson: - result.add((k.substr(1), v{"characters"}.getStr())) - const entityTable = genEntityTable() - let entityMap* = genEntityMap(entityTable) -else: - proc genEntityMap(): StaticRadixTree[string] = - let entityJson = parseJson(entity) - var entityMap = newStaticRadixTree[string]() - - for k, v in entityJson: - entityMap[k.substr(1)] = v{"characters"}.getStr() - - return entityMap - const entityMap* = genEntityMap() + for k, v in entityJson: + result.add((k.substr(1), v{"characters"}.getStr())) +const entityTable = genEntityTable() +let entityMap* = genEntityMap(entityTable) diff --git a/src/html/htmlparser.nim b/src/html/htmlparser.nim index 67aec2e4..94c474f0 100644 --- a/src/html/htmlparser.nim +++ b/src/html/htmlparser.nim @@ -89,38 +89,21 @@ proc getescapecmd(buf: string, at: var int): string = elif not isAlphaAscii(buf[i]): return "" - when defined(full): - var n = 0 - var s = "" - while true: - s &= buf[i] - if not entityMap.hasPrefix(s, n): - break - let pn = n - n = entityMap{s, n} - if n != pn: - s = "" - inc i - - if entityMap.nodes[n].leaf: - at = i - return entityMap.nodes[n].value - else: - var n = entityMap - var s = "" - while true: - s &= buf[i] - if not entityMap.hasPrefix(s, n): - break - let pn = n - n = n{s} - if n != pn: - s = "" - inc i + var n = entityMap + var s = "" + while true: + s &= buf[i] + if not entityMap.hasPrefix(s, n): + break + let pn = n + n = n{s} + if n != pn: + s = "" + inc i - if n.leaf: - at = i - return n.value + if n.leaf: + at = i + return n.value return "" |