From 1bdb1a3657b5a8efc03fe067334029841d9da5e7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 09:45:54 +0000 Subject: [PATCH] Deploy to GitHub pages --- dochack.js | 1609 +++++++++ .../runnableExamples/jssets_examples_1.nim | 27 + .../jssets_group0_examples.js | 1245 +++++++ .../jssets_group0_examples.nim | 4 + .../jsxmlhttprequest_examples_1.nim | 27 + .../jsxmlhttprequest_group0_examples.js | 1352 ++++++++ .../jsxmlhttprequest_group0_examples.nim | 4 + .../jsxmlserializer_examples_1.nim | 13 + .../jsxmlserializer_group0_examples.js | 800 +++++ .../jsxmlserializer_group0_examples.nim | 4 + nimdoc.out.css | 1033 ++++++ src/fusion/astdsl.html | 135 + src/fusion/astdsl.idx | 4 + src/fusion/btreetables.html | 2922 +++++++++++++++++ src/fusion/btreetables.idx | 176 + src/fusion/compat.html | 72 + src/fusion/compat.idx | 1 + src/fusion/docutils.html | 135 + src/fusion/docutils.idx | 3 + src/fusion/filepermissions.html | 170 + src/fusion/filepermissions.idx | 4 + src/fusion/htmlparser.html | 657 ++++ src/fusion/htmlparser.idx | 144 + src/fusion/htmlparser/parsexml.html | 511 +++ src/fusion/htmlparser/parsexml.idx | 57 + src/fusion/htmlparser/xmltree.html | 1144 +++++++ src/fusion/htmlparser/xmltree.idx | 53 + src/fusion/ioutils.html | 155 + src/fusion/ioutils.idx | 3 + src/fusion/js/jssets.html | 269 ++ src/fusion/js/jssets.idx | 12 + src/fusion/js/jsxmlhttprequest.html | 268 ++ src/fusion/js/jsxmlhttprequest.idx | 11 + src/fusion/js/jsxmlserializer.html | 152 + src/fusion/js/jsxmlserializer.idx | 4 + src/fusion/matching.html | 1162 +++++++ src/fusion/matching.idx | 87 + src/fusion/pointers.html | 112 + src/fusion/pointers.idx | 2 + src/fusion/pools.html | 160 + src/fusion/pools.idx | 5 + src/fusion/scripting.html | 106 + src/fusion/scripting.idx | 2 + src/fusion/smartptrs.html | 434 +++ src/fusion/smartptrs.idx | 32 + stdinfile.html | 84 + stdinfile.idx | 1 + theindex.html | 1812 ++++++++++ 48 files changed, 17179 insertions(+) create mode 100644 dochack.js create mode 100644 nimcache/runnableExamples/jssets_examples_1.nim create mode 100644 nimcache/runnableExamples/jssets_group0_examples.js create mode 100644 nimcache/runnableExamples/jssets_group0_examples.nim create mode 100644 nimcache/runnableExamples/jsxmlhttprequest_examples_1.nim create mode 100644 nimcache/runnableExamples/jsxmlhttprequest_group0_examples.js create mode 100644 nimcache/runnableExamples/jsxmlhttprequest_group0_examples.nim create mode 100644 nimcache/runnableExamples/jsxmlserializer_examples_1.nim create mode 100644 nimcache/runnableExamples/jsxmlserializer_group0_examples.js create mode 100644 nimcache/runnableExamples/jsxmlserializer_group0_examples.nim create mode 100644 nimdoc.out.css create mode 100644 src/fusion/astdsl.html create mode 100644 src/fusion/astdsl.idx create mode 100644 src/fusion/btreetables.html create mode 100644 src/fusion/btreetables.idx create mode 100644 src/fusion/compat.html create mode 100644 src/fusion/compat.idx create mode 100644 src/fusion/docutils.html create mode 100644 src/fusion/docutils.idx create mode 100644 src/fusion/filepermissions.html create mode 100644 src/fusion/filepermissions.idx create mode 100644 src/fusion/htmlparser.html create mode 100644 src/fusion/htmlparser.idx create mode 100644 src/fusion/htmlparser/parsexml.html create mode 100644 src/fusion/htmlparser/parsexml.idx create mode 100644 src/fusion/htmlparser/xmltree.html create mode 100644 src/fusion/htmlparser/xmltree.idx create mode 100644 src/fusion/ioutils.html create mode 100644 src/fusion/ioutils.idx create mode 100644 src/fusion/js/jssets.html create mode 100644 src/fusion/js/jssets.idx create mode 100644 src/fusion/js/jsxmlhttprequest.html create mode 100644 src/fusion/js/jsxmlhttprequest.idx create mode 100644 src/fusion/js/jsxmlserializer.html create mode 100644 src/fusion/js/jsxmlserializer.idx create mode 100644 src/fusion/matching.html create mode 100644 src/fusion/matching.idx create mode 100644 src/fusion/pointers.html create mode 100644 src/fusion/pointers.idx create mode 100644 src/fusion/pools.html create mode 100644 src/fusion/pools.idx create mode 100644 src/fusion/scripting.html create mode 100644 src/fusion/scripting.idx create mode 100644 src/fusion/smartptrs.html create mode 100644 src/fusion/smartptrs.idx create mode 100644 stdinfile.html create mode 100644 stdinfile.idx create mode 100644 theindex.html diff --git a/dochack.js b/dochack.js new file mode 100644 index 0000000..4a9c003 --- /dev/null +++ b/dochack.js @@ -0,0 +1,1609 @@ +/* Generated by the Nim Compiler v2.1.1 */ +var framePtr = null; +var excHandler = 0; +var lastJSError = null; +var NTI33554466 = {size: 0,kind: 1,base: null,node: null,finalizer: null}; +var NTI704643086 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI33554435 = {size: 0,kind: 31,base: null,node: null,finalizer: null}; +var NTI939524173 = {size: 0,kind: 31,base: null,node: null,finalizer: null}; +var NTI939524179 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI134217745 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217749 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217751 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555167 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555175 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33554449 = {size: 0,kind: 28,base: null,node: null,finalizer: null}; +var NTI33554450 = {size: 0,kind: 29,base: null,node: null,finalizer: null}; +var NTI33555174 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33555171 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555172 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217741 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217743 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NNI134217743 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217743.node = NNI134217743; +var NNI134217741 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217741.node = NNI134217741; +var NNI33555172 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555172.node = NNI33555172; +NTI33555174.base = NTI33555171; +NTI33555175.base = NTI33555171; +var NNI33555171 = {kind: 2, len: 5, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "parent", len: 0, typ: NTI33555174, name: "parent", sons: null}, +{kind: 1, offset: "name", len: 0, typ: NTI33554450, name: "name", sons: null}, +{kind: 1, offset: "message", len: 0, typ: NTI33554449, name: "msg", sons: null}, +{kind: 1, offset: "trace", len: 0, typ: NTI33554449, name: "trace", sons: null}, +{kind: 1, offset: "up", len: 0, typ: NTI33555175, name: "up", sons: null}]}; +NTI33555171.node = NNI33555171; +var NNI33555167 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555167.node = NNI33555167; +NTI33555171.base = NTI33555167; +NTI33555172.base = NTI33555171; +NTI134217741.base = NTI33555172; +NTI134217743.base = NTI134217741; +var NNI134217751 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217751.node = NNI134217751; +NTI134217751.base = NTI33555172; +var NNI134217749 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217749.node = NNI134217749; +NTI134217749.base = NTI33555172; +var NNI134217745 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217745.node = NNI134217745; +NTI134217745.base = NTI33555172; +var NNI939524179 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "a", len: 0, typ: NTI939524173, name: "a", sons: null}, +{kind: 1, offset: "b", len: 0, typ: NTI33554435, name: "b", sons: null}]}; +NTI939524179.node = NNI939524179; +var NNI704643086 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "Field0", len: 0, typ: NTI33554435, name: "Field0", sons: null}, +{kind: 1, offset: "Field1", len: 0, typ: NTI33554466, name: "Field1", sons: null}]}; +NTI704643086.node = NNI704643086; + +function mnewString(len_33556990) { + var result = new Array(len_33556990); + for (var i = 0; i < len_33556990; i++) {result[i] = 0;} + return result; + + + +} + +function toJSStr(s_33556891) { + var result_33556892 = null; + + var res_33556933 = newSeq_33556909((s_33556891).length); + var i_33556934 = 0; + var j_33556935 = 0; + Label1: { + Label2: while (true) { + if (!(i_33556934 < (s_33556891).length)) break Label2; + var c_33556936 = s_33556891[i_33556934]; + if ((c_33556936 < 128)) { + res_33556933[j_33556935] = String.fromCharCode(c_33556936); + i_33556934 += 1; + } + else { + var helper_33556948 = newSeq_33556909(0); + Label3: { + Label4: while (true) { + if (!true) break Label4; + var code_33556949 = c_33556936.toString(16); + if ((((code_33556949) == null ? 0 : (code_33556949).length) == 1)) { + helper_33556948.push("%0");; + } + else { + helper_33556948.push("%");; + } + + helper_33556948.push(code_33556949);; + i_33556934 += 1; + if ((((s_33556891).length <= i_33556934) || (s_33556891[i_33556934] < 128))) { + break Label3; + } + + c_33556936 = s_33556891[i_33556934]; + } + }; +++excHandler; + try { + res_33556933[j_33556935] = decodeURIComponent(helper_33556948.join("")); +--excHandler; +} catch (EXCEPTION) { + var prevJSError = lastJSError; + lastJSError = EXCEPTION; + --excHandler; + res_33556933[j_33556935] = helper_33556948.join(""); + lastJSError = prevJSError; + } finally { + } + } + + j_33556935 += 1; + } + }; + if (res_33556933.length < j_33556935) { for (var i = res_33556933.length ; i < j_33556935 ; ++i) res_33556933.push(null); } + else { res_33556933.length = j_33556935; }; + result_33556892 = res_33556933.join(""); + + return result_33556892; + +} + +function raiseException(e_33556643, ename_33556644) { + e_33556643.name = ename_33556644; + if ((excHandler == 0)) { + unhandledException(e_33556643); + } + + throw e_33556643; + + +} + +function addInt(a_33557037, b_33557038) { + var result = a_33557037 + b_33557038; + checkOverflowInt(result); + return result; + + + +} + +function chckRange(i_33557311, a_33557312, b_33557313) { + var result_33557314 = 0; + + BeforeRet: { + if (((a_33557312 <= i_33557311) && (i_33557311 <= b_33557313))) { + result_33557314 = i_33557311; + break BeforeRet; + } + else { + raiseRangeError(); + } + + }; + + return result_33557314; + +} + +function setConstr() { + var result = {}; + for (var i = 0; i < arguments.length; ++i) { + var x = arguments[i]; + if (typeof(x) == "object") { + for (var j = x[0]; j <= x[1]; ++j) { + result[j] = true; + } + } else { + result[x] = true; + } + } + return result; + + + +} +var ConstSet1 = setConstr(17, 16, 4, 18, 27, 19, 23, 22, 21); + +function nimCopy(dest_33557255, src_33557256, ti_33557257) { + var result_33557266 = null; + + switch (ti_33557257.kind) { + case 21: + case 22: + case 23: + case 5: + if (!(isFatPointer_33557246(ti_33557257))) { + result_33557266 = src_33557256; + } + else { + result_33557266 = [src_33557256[0], src_33557256[1]]; + } + + break; + case 19: + if (dest_33557255 === null || dest_33557255 === undefined) { + dest_33557255 = {}; + } + else { + for (var key in dest_33557255) { delete dest_33557255[key]; } + } + for (var key in src_33557256) { dest_33557255[key] = src_33557256[key]; } + result_33557266 = dest_33557255; + + break; + case 18: + case 17: + if (!((ti_33557257.base == null))) { + result_33557266 = nimCopy(dest_33557255, src_33557256, ti_33557257.base); + } + else { + if ((ti_33557257.kind == 17)) { + result_33557266 = (dest_33557255 === null || dest_33557255 === undefined) ? {m_type: ti_33557257} : dest_33557255; + } + else { + result_33557266 = (dest_33557255 === null || dest_33557255 === undefined) ? {} : dest_33557255; + } + } + nimCopyAux(result_33557266, src_33557256, ti_33557257.node); + break; + case 4: + case 16: + if(ArrayBuffer.isView(src_33557256)) { + if(dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new src_33557256.constructor(src_33557256); + } else { + dest_33557255.set(src_33557256, 0); + } + result_33557266 = dest_33557255; + } else { + if (src_33557256 === null) { + result_33557266 = null; + } + else { + if (dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new Array(src_33557256.length); + } + result_33557266 = dest_33557255; + for (var i = 0; i < src_33557256.length; ++i) { + result_33557266[i] = nimCopy(result_33557266[i], src_33557256[i], ti_33557257.base); + } + } + } + + break; + case 24: + case 27: + if (src_33557256 === null) { + result_33557266 = null; + } + else { + if (dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new Array(src_33557256.length); + } + result_33557266 = dest_33557255; + for (var i = 0; i < src_33557256.length; ++i) { + result_33557266[i] = nimCopy(result_33557266[i], src_33557256[i], ti_33557257.base); + } + } + + break; + case 28: + if (src_33557256 !== null) { + result_33557266 = src_33557256.slice(0); + } + + break; + default: + result_33557266 = src_33557256; + break; + } + + return result_33557266; + +} + +function chckIndx(i_33557306, a_33557307, b_33557308) { + var result_33557309 = 0; + + BeforeRet: { + if (((a_33557307 <= i_33557306) && (i_33557306 <= b_33557308))) { + result_33557309 = i_33557306; + break BeforeRet; + } + else { + raiseIndexError(i_33557306, a_33557307, b_33557308); + } + + }; + + return result_33557309; + +} + +function makeNimstrLit(c_33556885) { + var result = []; + for (var i = 0; i < c_33556885.length; ++i) { + result[i] = c_33556885.charCodeAt(i); + } + return result; + + + +} + +function subInt(a_33557041, b_33557042) { + var result = a_33557041 - b_33557042; + checkOverflowInt(result); + return result; + + + +} + +function cstrToNimstr(c_33556888) { + var ln = c_33556888.length; + var result = new Array(ln); + var r = 0; + for (var i = 0; i < ln; ++i) { + var ch = c_33556888.charCodeAt(i); + + if (ch < 128) { + result[r] = ch; + } + else { + if (ch < 2048) { + result[r] = (ch >> 6) | 192; + } + else { + if (ch < 55296 || ch >= 57344) { + result[r] = (ch >> 12) | 224; + } + else { + ++i; + ch = 65536 + (((ch & 1023) << 10) | (c_33556888.charCodeAt(i) & 1023)); + result[r] = (ch >> 18) | 240; + ++r; + result[r] = ((ch >> 12) & 63) | 128; + } + ++r; + result[r] = ((ch >> 6) & 63) | 128; + } + ++r; + result[r] = (ch & 63) | 128; + } + ++r; + } + return result; + + + +} +var ConstSet2 = setConstr([65, 90]); +var ConstSet3 = setConstr(95, 32, 46); +var ConstSet4 = setConstr(95, 32, 46); + +function mulInt(a_33557045, b_33557046) { + var result = a_33557045 * b_33557046; + checkOverflowInt(result); + return result; + + + +} +var ConstSet5 = setConstr([97, 122]); +var ConstSet6 = setConstr([65, 90], [97, 122]); +var ConstSet7 = setConstr([97, 122]); +var ConstSet8 = setConstr([65, 90]); +var ConstSet9 = setConstr([65, 90], [97, 122]); + +function nimMax(a_33557095, b_33557096) { + var Temporary1; + + var result_33557097 = 0; + + BeforeRet: { + if ((b_33557096 <= a_33557095)) { + Temporary1 = a_33557095; + } + else { + Temporary1 = b_33557096; + } + + result_33557097 = Temporary1; + break BeforeRet; + }; + + return result_33557097; + +} + +function nimMin(a_33557091, b_33557092) { + var Temporary1; + + var result_33557093 = 0; + + BeforeRet: { + if ((a_33557091 <= b_33557092)) { + Temporary1 = a_33557091; + } + else { + Temporary1 = b_33557092; + } + + result_33557093 = Temporary1; + break BeforeRet; + }; + + return result_33557093; + +} + +function addChar(x_33557402, c_33557403) { + x_33557402.push(c_33557403); + + +} +var objectID_1157628079 = [0]; + +function setTheme(theme_553648134) { + document.documentElement.setAttribute("data-theme", theme_553648134); + window.localStorage.setItem("theme", theme_553648134); + + +} + +function add_33556366(x_33556367, x_33556367_Idx, y_33556368) { + if (x_33556367[x_33556367_Idx] === null) { x_33556367[x_33556367_Idx] = []; } + var off = x_33556367[x_33556367_Idx].length; + x_33556367[x_33556367_Idx].length += y_33556368.length; + for (var i = 0; i < y_33556368.length; ++i) { + x_33556367[x_33556367_Idx][off+i] = y_33556368.charCodeAt(i); + } + + + +} + +function newSeq_33556909(len_33556911) { + var result_33556912 = []; + + result_33556912 = new Array(len_33556911); for (var i = 0 ; i < len_33556911 ; ++i) { result_33556912[i] = null; } + return result_33556912; + +} + +function unhandledException(e_33556639) { + var buf_33556640 = [[]]; + if (!(((e_33556639.message).length == 0))) { + buf_33556640[0].push.apply(buf_33556640[0], [69,114,114,111,114,58,32,117,110,104,97,110,100,108,101,100,32,101,120,99,101,112,116,105,111,110,58,32]);; + buf_33556640[0].push.apply(buf_33556640[0], e_33556639.message);; + } + else { + buf_33556640[0].push.apply(buf_33556640[0], [69,114,114,111,114,58,32,117,110,104,97,110,100,108,101,100,32,101,120,99,101,112,116,105,111,110]);; + } + + buf_33556640[0].push.apply(buf_33556640[0], [32,91]);; + add_33556366(buf_33556640, 0, e_33556639.name); + buf_33556640[0].push.apply(buf_33556640[0], [93,10]);; + var cbuf_33556641 = toJSStr(buf_33556640[0]); + if (typeof(Error) !== "undefined") { + throw new Error(cbuf_33556641); + } + else { + throw cbuf_33556641; + } + + + +} + +function raiseOverflow() { + raiseException({message: [111,118,101,114,45,32,111,114,32,117,110,100,101,114,102,108,111,119], parent: null, m_type: NTI134217743, name: null, trace: [], up: null}, "OverflowDefect"); + + +} + +function checkOverflowInt(a_33557035) { + if (a_33557035 > 2147483647 || a_33557035 < -2147483648) raiseOverflow(); + + + +} + +function raiseRangeError() { + raiseException({message: [118,97,108,117,101,32,111,117,116,32,111,102,32,114,97,110,103,101], parent: null, m_type: NTI134217751, name: null, trace: [], up: null}, "RangeDefect"); + + +} + +function addChars_301990087(result_301990089, result_301990089_Idx, x_301990090, start_301990091, n_301990092) { + var Temporary1; + + var old_301990093 = (result_301990089[result_301990089_Idx]).length; + if (result_301990089[result_301990089_Idx].length < (Temporary1 = chckRange(addInt(old_301990093, n_301990092), 0, 2147483647), Temporary1)) { for (var i = result_301990089[result_301990089_Idx].length; i < Temporary1; ++i) result_301990089[result_301990089_Idx].push(0); } + else {result_301990089[result_301990089_Idx].length = Temporary1; }; + Label2: { + var iHEX60gensym4_301990107 = 0; + var i_553649322 = 0; + Label3: { + Label4: while (true) { + if (!(i_553649322 < n_301990092)) break Label4; + iHEX60gensym4_301990107 = i_553649322; + result_301990089[result_301990089_Idx][chckIndx(addInt(old_301990093, iHEX60gensym4_301990107), 0, (result_301990089[result_301990089_Idx]).length - 1)] = x_301990090.charCodeAt(chckIndx(addInt(start_301990091, iHEX60gensym4_301990107), 0, (x_301990090).length - 1)); + i_553649322 = addInt(i_553649322, 1); + } + }; + }; + + +} + +function addChars_301990083(result_301990085, result_301990085_Idx, x_301990086) { + addChars_301990087(result_301990085, result_301990085_Idx, x_301990086, 0, ((x_301990086) == null ? 0 : (x_301990086).length)); + + +} + +function addInt_301990108(result_301990109, result_301990109_Idx, x_301990110) { + addChars_301990083(result_301990109, result_301990109_Idx, ((x_301990110) + "")); + + +} + +function addInt_301990126(result_301990127, result_301990127_Idx, x_301990128) { + addInt_301990108(result_301990127, result_301990127_Idx, BigInt(x_301990128)); + + +} + +function HEX24_385875976(x_385875977) { + var result_385875978 = [[]]; + + addInt_301990126(result_385875978, 0, x_385875977); + + return result_385875978[0]; + +} + +function isFatPointer_33557246(ti_33557247) { + var result_33557248 = false; + + BeforeRet: { + result_33557248 = !((ConstSet1[ti_33557247.base.kind] != undefined)); + break BeforeRet; + }; + + return result_33557248; + +} + +function nimCopyAux(dest_33557259, src_33557260, n_33557261) { + switch (n_33557261.kind) { + case 0: + break; + case 1: + dest_33557259[n_33557261.offset] = nimCopy(dest_33557259[n_33557261.offset], src_33557260[n_33557261.offset], n_33557261.typ); + + break; + case 2: + for (var i = 0; i < n_33557261.sons.length; i++) { + nimCopyAux(dest_33557259, src_33557260, n_33557261.sons[i]); + } + + break; + case 3: + dest_33557259[n_33557261.offset] = nimCopy(dest_33557259[n_33557261.offset], src_33557260[n_33557261.offset], n_33557261.typ); + for (var i = 0; i < n_33557261.sons.length; ++i) { + nimCopyAux(dest_33557259, src_33557260, n_33557261.sons[i][1]); + } + + break; + } + + +} + +function raiseIndexError(i_33556802, a_33556803, b_33556804) { + var Temporary1; + + if ((b_33556804 < a_33556803)) { + Temporary1 = [105,110,100,101,120,32,111,117,116,32,111,102,32,98,111,117,110,100,115,44,32,116,104,101,32,99,111,110,116,97,105,110,101,114,32,105,115,32,101,109,112,116,121]; + } + else { + Temporary1 = ([105,110,100,101,120,32] || []).concat(HEX24_385875976(i_33556802) || [],[32,110,111,116,32,105,110,32] || [],HEX24_385875976(a_33556803) || [],[32,46,46,32] || [],HEX24_385875976(b_33556804) || []); + } + + raiseException({message: nimCopy(null, Temporary1, NTI33554449), parent: null, m_type: NTI134217749, name: null, trace: [], up: null}, "IndexDefect"); + + +} + +function sysFatal_268435501(message_268435504) { + raiseException({message: nimCopy(null, message_268435504, NTI33554449), m_type: NTI134217745, parent: null, name: null, trace: [], up: null}, "AssertionDefect"); + + +} + +function raiseAssert_268435499(msg_268435500) { + sysFatal_268435501(msg_268435500); + + +} + +function failedAssertImpl_268435541(msg_268435542) { + raiseAssert_268435499(msg_268435542); + + +} + +function onDOMLoaded(e_553648169) { + +function HEX3Aanonymous_553648192(event_553648193) { + event_553648193.target.parentNode.style.display = "none"; + event_553648193.target.parentNode.nextSibling.style.display = "inline"; + + + } + + document.getElementById("theme-select").value = window.localStorage.getItem("theme"); + Label1: { + var pragmaDots_553648191 = null; + var colontmp__553649313 = []; + colontmp__553649313 = document.getElementsByClassName("pragmadots"); + var i_553649315 = 0; + var L_553649316 = (colontmp__553649313).length; + Label2: { + Label3: while (true) { + if (!(i_553649315 < L_553649316)) break Label3; + pragmaDots_553648191 = colontmp__553649313[chckIndx(i_553649315, 0, (colontmp__553649313).length - 1)]; + pragmaDots_553648191.onclick = HEX3Aanonymous_553648192; + i_553649315 += 1; + if (!(((colontmp__553649313).length == L_553649316))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + + +} + +function isWhitespace_553648533(x_553648534) { + var result_553648535 = false; + + result_553648535 = (((x_553648534.nodeName == "#text") && !/\S/.test(x_553648534.textContent)) || (x_553648534.nodeName == "#comment")); + + return result_553648535; + +} + +function toToc_553648536(x_553648537, father_553648538) { + var Temporary5; + var Temporary6; + var Temporary7; + var Temporary8; + var Temporary15; + + if ((x_553648537.nodeName == "UL")) { + var f_553648546 = {heading: null, kids: [], sortId: (father_553648538.kids).length, doSort: false}; + var i_553648547 = 0; + Label1: { + Label2: while (true) { + if (!(i_553648547 < x_553648537.childNodes.length)) break Label2; + var nxt_553648548 = addInt(i_553648547, 1); + Label3: { + Label4: while (true) { + if (!(nxt_553648548 < x_553648537.childNodes.length)) Temporary5 = false; else { Temporary5 = isWhitespace_553648533(x_553648537.childNodes[nxt_553648548]); } if (!Temporary5) break Label4; + nxt_553648548 = addInt(nxt_553648548, 1); + } + }; + if (!(nxt_553648548 < x_553648537.childNodes.length)) Temporary8 = false; else { Temporary8 = (x_553648537.childNodes[i_553648547].nodeName == "LI"); } if (!Temporary8) Temporary7 = false; else { Temporary7 = (x_553648537.childNodes[i_553648547].childNodes.length == 1); } if (!Temporary7) Temporary6 = false; else { Temporary6 = (x_553648537.childNodes[nxt_553648548].nodeName == "UL"); } if (Temporary6) { + var e_553648560 = {heading: x_553648537.childNodes[i_553648547].childNodes[0], kids: [], sortId: (f_553648546.kids).length, doSort: false}; + var it_553648561 = x_553648537.childNodes[nxt_553648548]; + Label9: { + var j_553648566 = 0; + var colontmp__553649329 = 0; + colontmp__553649329 = it_553648561.childNodes.length; + var i_553649330 = 0; + Label10: { + Label11: while (true) { + if (!(i_553649330 < colontmp__553649329)) break Label11; + j_553648566 = i_553649330; + toToc_553648536(it_553648561.childNodes[j_553648566], e_553648560); + i_553649330 = addInt(i_553649330, 1); + } + }; + }; + f_553648546.kids.push(e_553648560);; + i_553648547 = addInt(nxt_553648548, 1); + } + else { + toToc_553648536(x_553648537.childNodes[i_553648547], f_553648546); + i_553648547 = addInt(i_553648547, 1); + } + + } + }; + father_553648538.kids.push(f_553648546);; + } + else { + if (isWhitespace_553648533(x_553648537)) { + } + else { + if ((x_553648537.nodeName == "LI")) { + var idx_553648583 = []; + Label12: { + var i_553648588 = 0; + var colontmp__553649333 = 0; + colontmp__553649333 = x_553648537.childNodes.length; + var i_553649334 = 0; + Label13: { + Label14: while (true) { + if (!(i_553649334 < colontmp__553649333)) break Label14; + i_553648588 = i_553649334; + if (!(isWhitespace_553648533(x_553648537.childNodes[i_553648588]))) { + idx_553648583.push(i_553648588);; + } + + i_553649334 = addInt(i_553649334, 1); + } + }; + }; + if (!((idx_553648583).length == 2)) Temporary15 = false; else { Temporary15 = (x_553648537.childNodes[idx_553648583[chckIndx(1, 0, (idx_553648583).length - 1)]].nodeName == "UL"); } if (Temporary15) { + var e_553648604 = {heading: x_553648537.childNodes[idx_553648583[chckIndx(0, 0, (idx_553648583).length - 1)]], kids: [], sortId: (father_553648538.kids).length, doSort: false}; + var it_553648605 = x_553648537.childNodes[idx_553648583[chckIndx(1, 0, (idx_553648583).length - 1)]]; + Label16: { + var j_553648610 = 0; + var colontmp__553649337 = 0; + colontmp__553649337 = it_553648605.childNodes.length; + var i_553649338 = 0; + Label17: { + Label18: while (true) { + if (!(i_553649338 < colontmp__553649337)) break Label18; + j_553648610 = i_553649338; + toToc_553648536(it_553648605.childNodes[j_553648610], e_553648604); + i_553649338 = addInt(i_553649338, 1); + } + }; + }; + father_553648538.kids.push(e_553648604);; + } + else { + Label19: { + var i_553648619 = 0; + var colontmp__553649341 = 0; + colontmp__553649341 = x_553648537.childNodes.length; + var i_553649342 = 0; + Label20: { + Label21: while (true) { + if (!(i_553649342 < colontmp__553649341)) break Label21; + i_553648619 = i_553649342; + toToc_553648536(x_553648537.childNodes[i_553648619], father_553648538); + i_553649342 = addInt(i_553649342, 1); + } + }; + }; + } + + } + else { + father_553648538.kids.push({heading: x_553648537, kids: [], sortId: (father_553648538.kids).length, doSort: false});; + } + }} + + +} + +function extractItems_553648325(x_553648326, heading_553648327, items_553648328, items_553648328_Idx) { + BeforeRet: { + if ((x_553648326 == null)) { + break BeforeRet; + } + + if ((!((x_553648326.heading == null)) && (x_553648326.heading.textContent == heading_553648327))) { + Label1: { + var i_553648345 = 0; + var colontmp__553649345 = 0; + colontmp__553649345 = (x_553648326.kids).length; + var i_553649346 = 0; + Label2: { + Label3: while (true) { + if (!(i_553649346 < colontmp__553649345)) break Label3; + i_553648345 = i_553649346; + items_553648328[items_553648328_Idx].push(x_553648326.kids[chckIndx(i_553648345, 0, (x_553648326.kids).length - 1)].heading);; + i_553649346 = addInt(i_553649346, 1); + } + }; + }; + } + else { + Label4: { + var k_553648370 = null; + var i_553649350 = 0; + var L_553649351 = (x_553648326.kids).length; + Label5: { + Label6: while (true) { + if (!(i_553649350 < L_553649351)) break Label6; + k_553648370 = x_553648326.kids[chckIndx(i_553649350, 0, (x_553648326.kids).length - 1)]; + extractItems_553648325(k_553648370, heading_553648327, items_553648328, items_553648328_Idx); + i_553649350 += 1; + if (!(((x_553648326.kids).length == L_553649351))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + } + + }; + + +} + +function tree_553648257(tag_553648258, kids_553648259) { + var result_553648260 = null; + + result_553648260 = document.createElement(tag_553648258); + Label1: { + var k_553648273 = null; + var i_553649363 = 0; + Label2: { + Label3: while (true) { + if (!(i_553649363 < (kids_553648259).length)) break Label3; + k_553648273 = kids_553648259[chckIndx(i_553649363, 0, (kids_553648259).length - 1)]; + result_553648260.appendChild(k_553648273); + i_553649363 += 1; + } + }; + }; + + return result_553648260; + +} + +function text_553648281(s_553648282) { + var result_553648283 = null; + + result_553648283 = document.createTextNode(s_553648282); + + return result_553648283; + +} + +function uncovered_553648723(x_553648724) { + var Temporary1; + + var result_553648725 = null; + + BeforeRet: { + if ((((x_553648724.kids).length == 0) && !((x_553648724.heading == null)))) { + if (!(x_553648724.heading.hasOwnProperty('__karaxMarker__'))) { + Temporary1 = x_553648724; + } + else { + Temporary1 = null; + } + + result_553648725 = Temporary1; + break BeforeRet; + } + + result_553648725 = {heading: x_553648724.heading, kids: [], sortId: x_553648724.sortId, doSort: x_553648724.doSort}; + Label2: { + var k_553648740 = null; + var i_553649370 = 0; + var L_553649371 = (x_553648724.kids).length; + Label3: { + Label4: while (true) { + if (!(i_553649370 < L_553649371)) break Label4; + k_553648740 = x_553648724.kids[chckIndx(i_553649370, 0, (x_553648724.kids).length - 1)]; + var y_553648741 = uncovered_553648723(k_553648740); + if (!((y_553648741 == null))) { + result_553648725.kids.push(y_553648741);; + } + + i_553649370 += 1; + if (!(((x_553648724.kids).length == L_553649371))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + if (((result_553648725.kids).length == 0)) { + result_553648725 = null; + } + + }; + + return result_553648725; + +} + +function mergeTocs_553648753(orig_553648754, news_553648755) { + var result_553648756 = null; + + result_553648756 = uncovered_553648723(orig_553648754); + if ((result_553648756 == null)) { + result_553648756 = news_553648755; + } + else { + Label1: { + var i_553648768 = 0; + var colontmp__553649366 = 0; + colontmp__553649366 = (news_553648755.kids).length; + var i_553649367 = 0; + Label2: { + Label3: while (true) { + if (!(i_553649367 < colontmp__553649366)) break Label3; + i_553648768 = i_553649367; + result_553648756.kids.push(news_553648755.kids[chckIndx(i_553648768, 0, (news_553648755.kids).length - 1)]);; + i_553649367 = addInt(i_553649367, 1); + } + }; + }; + } + + + return result_553648756; + +} + +function buildToc_553648773(orig_553648774, types_553648775, procs_553648776) { + var result_553648777 = null; + + var newStuff_553648782 = {heading: null, kids: [], doSort: true, sortId: 0}; + Label1: { + var t_553648786 = null; + var i_553649358 = 0; + var L_553649359 = (types_553648775).length; + Label2: { + Label3: while (true) { + if (!(i_553649358 < L_553649359)) break Label3; + t_553648786 = types_553648775[chckIndx(i_553649358, 0, (types_553648775).length - 1)]; + var c_553648791 = {heading: t_553648786.cloneNode(true), kids: [], doSort: true, sortId: 0}; + t_553648786.__karaxMarker__ = true; + Label4: { + var p_553648795 = null; + var i_553649355 = 0; + var L_553649356 = (procs_553648776).length; + Label5: { + Label6: while (true) { + if (!(i_553649355 < L_553649356)) break Label6; + p_553648795 = procs_553648776[chckIndx(i_553649355, 0, (procs_553648776).length - 1)]; + if (!(p_553648795.hasOwnProperty('__karaxMarker__'))) { + var xx_553648796 = p_553648795.parentNode.getElementsByClassName("attachedType"); + if ((((xx_553648796).length == 1) && (xx_553648796[chckIndx(0, 0, (xx_553648796).length - 1)].textContent == t_553648786.textContent))) { + var q_553648801 = tree_553648257("A", [text_553648281(p_553648795.title)]); + q_553648801.setAttribute("href", p_553648795.getAttribute("href")); + c_553648791.kids.push({heading: q_553648801, kids: [], sortId: 0, doSort: false});; + p_553648795.__karaxMarker__ = true; + } + + } + + i_553649355 += 1; + if (!(((procs_553648776).length == L_553649356))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + newStuff_553648782.kids.push(c_553648791);; + i_553649358 += 1; + if (!(((types_553648775).length == L_553649359))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + result_553648777 = mergeTocs_553648753(orig_553648774, newStuff_553648782); + + return result_553648777; + +} + +function add_553648274(parent_553648275, kid_553648276) { + if (((parent_553648275.nodeName == "TR") && ((kid_553648276.nodeName == "TD") || (kid_553648276.nodeName == "TH")))) { + var k_553648277 = document.createElement("TD"); + k_553648277.appendChild(kid_553648276); + parent_553648275.appendChild(k_553648277); + } + else { + parent_553648275.appendChild(kid_553648276); + } + + + +} + +function setClass_553648278(e_553648279, value_553648280) { + e_553648279.setAttribute("class", value_553648280); + + +} + +function toHtml_553648403(x_553648404, isRoot_553648405) { + +function HEX3Aanonymous_553648423(a_553648424, b_553648425) { + var result_553648426 = 0; + + BeforeRet: { + if ((!((a_553648424.heading == null)) && !((b_553648425.heading == null)))) { + var x_553648435 = a_553648424.heading.textContent; + var y_553648436 = b_553648425.heading.textContent; + if ((x_553648435 < y_553648436)) { + result_553648426 = (-1); + break BeforeRet; + } + + if ((y_553648436 < x_553648435)) { + result_553648426 = 1; + break BeforeRet; + } + + result_553648426 = 0; + break BeforeRet; + } + else { + result_553648426 = subInt(a_553648424.sortId, b_553648425.sortId); + break BeforeRet; + } + + }; + + return result_553648426; + + } + + var result_553648406 = null; + + BeforeRet: { + if ((x_553648404 == null)) { + result_553648406 = null; + break BeforeRet; + } + + if (((x_553648404.kids).length == 0)) { + if ((x_553648404.heading == null)) { + result_553648406 = null; + break BeforeRet; + } + + result_553648406 = x_553648404.heading.cloneNode(true); + break BeforeRet; + } + + result_553648406 = tree_553648257("DIV", []); + if ((!((x_553648404.heading == null)) && !(x_553648404.heading.hasOwnProperty('__karaxMarker__')))) { + add_553648274(result_553648406, x_553648404.heading.cloneNode(true)); + } + + var ul_553648422 = tree_553648257("UL", []); + if (isRoot_553648405) { + setClass_553648278(ul_553648422, "simple simple-toc"); + } + else { + setClass_553648278(ul_553648422, "simple"); + } + + if (x_553648404.doSort) { + x_553648404.kids.sort(HEX3Aanonymous_553648423); + } + + Label1: { + var k_553648448 = null; + var i_553649374 = 0; + var L_553649375 = (x_553648404.kids).length; + Label2: { + Label3: while (true) { + if (!(i_553649374 < L_553649375)) break Label3; + k_553648448 = x_553648404.kids[chckIndx(i_553649374, 0, (x_553648404.kids).length - 1)]; + var y_553648449 = toHtml_553648403(k_553648448, false); + if (!((y_553648449 == null))) { + add_553648274(ul_553648422, tree_553648257("LI", [y_553648449])); + } + + i_553649374 += 1; + if (!(((x_553648404.kids).length == L_553649375))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + if (!((ul_553648422.childNodes.length == 0))) { + add_553648274(result_553648406, ul_553648422); + } + + if ((result_553648406.childNodes.length == 0)) { + result_553648406 = null; + } + + }; + + return result_553648406; + +} + +function replaceById_553648284(id_553648285, newTree_553648286) { + var x_553648287 = document.getElementById(id_553648285); + x_553648287.parentNode.replaceChild(newTree_553648286, x_553648287); + newTree_553648286.id = id_553648285; + + +} + +function togglevis_553648831(d_553648832) { + if ((d_553648832.style.display == "none")) { + d_553648832.style.display = "inline"; + } + else { + d_553648832.style.display = "none"; + } + + + +} + +function groupBy(value_553648834) { + var toc_553648835 = document.getElementById("toc-list"); + if ((alternative_553648830[0] == null)) { + var tt_553648843 = {heading: null, kids: [], sortId: 0, doSort: false}; + toToc_553648536(toc_553648835, tt_553648843); + tt_553648843 = tt_553648843.kids[chckIndx(0, 0, (tt_553648843.kids).length - 1)]; + var types_553648848 = [[]]; + var procs_553648853 = [[]]; + extractItems_553648325(tt_553648843, "Types", types_553648848, 0); + extractItems_553648325(tt_553648843, "Procs", procs_553648853, 0); + extractItems_553648325(tt_553648843, "Converters", procs_553648853, 0); + extractItems_553648325(tt_553648843, "Methods", procs_553648853, 0); + extractItems_553648325(tt_553648843, "Templates", procs_553648853, 0); + extractItems_553648325(tt_553648843, "Macros", procs_553648853, 0); + extractItems_553648325(tt_553648843, "Iterators", procs_553648853, 0); + var ntoc_553648854 = buildToc_553648773(tt_553648843, types_553648848[0], procs_553648853[0]); + var x_553648855 = toHtml_553648403(ntoc_553648854, true); + alternative_553648830[0] = tree_553648257("DIV", [x_553648855]); + } + + if ((value_553648834 == "type")) { + replaceById_553648284("tocRoot", alternative_553648830[0]); + } + else { + replaceById_553648284("tocRoot", tree_553648257("DIV", [])); + } + + togglevis_553648831(document.getElementById("toc-list")); + + +} + +function HEX5BHEX5D_721421547(s_721421550, x_721421551) { + var result_721421552 = []; + + var a_721421554 = x_721421551.a; + var L_721421556 = addInt(subInt(subInt((s_721421550).length, x_721421551.b), a_721421554), 1); + result_721421552 = nimCopy(null, mnewString(chckRange(L_721421556, 0, 2147483647)), NTI33554449); + Label1: { + var i_721421561 = 0; + var i_553649384 = 0; + Label2: { + Label3: while (true) { + if (!(i_553649384 < L_721421556)) break Label3; + i_721421561 = i_553649384; + result_721421552[chckIndx(i_721421561, 0, (result_721421552).length - 1)] = s_721421550[chckIndx(addInt(i_721421561, a_721421554), 0, (s_721421550).length - 1)]; + i_553649384 = addInt(i_553649384, 1); + } + }; + }; + + return result_721421552; + +} + +function HEX2EHEX2E_939524199(a_939524202, b_939524203) { + var result_939524206 = ({a: 0, b: 0}); + + result_939524206 = nimCopy(result_939524206, {a: a_939524202, b: b_939524203}, NTI939524179); + + return result_939524206; + +} +async function loadIndex_553649051() { + var result_553649053 = null; + + BeforeRet: { + var indexURL_553649059 = document.getElementById("indexLink").getAttribute("href"); + var rootURL_553649084 = HEX5BHEX5D_721421547(cstrToNimstr(indexURL_553649059), HEX2EHEX2E_939524199(0, 14)); + var resp_553649096 = (await (await fetch(indexURL_553649059)).text()); + var indexElem_553649097 = document.createElement("div"); + indexElem_553649097.innerHTML = resp_553649096; + Label1: { + var href_553649118 = null; + var colontmp__553649378 = []; + colontmp__553649378 = indexElem_553649097.getElementsByClassName("reference"); + var i_553649380 = 0; + var L_553649381 = (colontmp__553649378).length; + Label2: { + Label3: while (true) { + if (!(i_553649380 < L_553649381)) break Label3; + href_553649118 = colontmp__553649378[chckIndx(i_553649380, 0, (colontmp__553649378).length - 1)]; + href_553649118.setAttribute("href", toJSStr((rootURL_553649084 || []).concat(cstrToNimstr(href_553649118.getAttribute("href")) || []))); + db_553648872[0].push(href_553649118);; + contents_553648873[0].push(href_553649118.getAttribute("data-doc-search-tag"));; + i_553649380 += 1; + if (!(((colontmp__553649378).length == L_553649381))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + result_553649053 = undefined; + break BeforeRet; + }; + + return result_553649053; + +} + +function then_553649227(future_553649230, onSuccess_553649231, onReject_553649232) { + var result_553649233 = null; + + BeforeRet: { + var ret_553649243 = null; + ret_553649243 = future_553649230.then(onSuccess_553649231, onReject_553649232) + result_553649233 = ret_553649243; + break BeforeRet; + }; + + return result_553649233; + +} + +function nsuToLowerAsciiChar(c_721420373) { + var result_721420374 = 0; + + if ((ConstSet2[c_721420373] != undefined)) { + result_721420374 = (c_721420373 ^ 32); + } + else { + result_721420374 = c_721420373; + } + + + return result_721420374; + +} + +function fuzzyMatch_704643088(pattern_704643089, str_704643090) { + var Temporary4; + var Temporary5; + var Temporary6; + var Temporary7; + var Temporary8; + + var result_704643093 = {Field0: 0, Field1: false}; + + var scoreState_704643094 = (-100); + var headerMatched_704643095 = false; + var unmatchedLeadingCharCount_704643096 = 0; + var consecutiveMatchCount_704643097 = 0; + var strIndex_704643098 = 0; + var patIndex_704643099 = 0; + var score_704643100 = 0; + Label1: { + Label2: while (true) { + if (!((strIndex_704643098 < ((str_704643090) == null ? 0 : (str_704643090).length)) && (patIndex_704643099 < ((pattern_704643089) == null ? 0 : (pattern_704643089).length)))) break Label2; + Label3: { + var patternChar_704643103 = nsuToLowerAsciiChar(pattern_704643089.charCodeAt(chckIndx(patIndex_704643099, 0, (pattern_704643089).length - 1))); + var strChar_704643104 = nsuToLowerAsciiChar(str_704643090.charCodeAt(chckIndx(strIndex_704643098, 0, (str_704643090).length - 1))); + if ((ConstSet3[patternChar_704643103] != undefined)) { + patIndex_704643099 = addInt(patIndex_704643099, 1); + break Label3; + } + + if ((ConstSet4[strChar_704643104] != undefined)) { + strIndex_704643098 = addInt(strIndex_704643098, 1); + break Label3; + } + + if ((!(headerMatched_704643095) && (strChar_704643104 == 58))) { + headerMatched_704643095 = true; + scoreState_704643094 = (-100); + score_704643100 = ((Math.floor((0.5 * score_704643100))) | 0); + patIndex_704643099 = 0; + strIndex_704643098 = addInt(strIndex_704643098, 1); + break Label3; + } + + if ((strChar_704643104 == patternChar_704643103)) { + switch (scoreState_704643094) { + case (-100): + case 20: + scoreState_704643094 = 10; + break; + case 0: + scoreState_704643094 = 5; + score_704643100 = addInt(score_704643100, scoreState_704643094); + break; + case 10: + case 5: + consecutiveMatchCount_704643097 = addInt(consecutiveMatchCount_704643097, 1); + scoreState_704643094 = 5; + score_704643100 = addInt(score_704643100, mulInt(5, consecutiveMatchCount_704643097)); + if ((scoreState_704643094 == 10)) { + score_704643100 = addInt(score_704643100, 10); + } + + var onBoundary_704643156 = (patIndex_704643099 == ((pattern_704643089) == null ? -1 : (pattern_704643089).length - 1)); + if ((!(onBoundary_704643156) && (strIndex_704643098 < ((str_704643090) == null ? -1 : (str_704643090).length - 1)))) { + var nextPatternChar_704643157 = nsuToLowerAsciiChar(pattern_704643089.charCodeAt(chckIndx(addInt(patIndex_704643099, 1), 0, (pattern_704643089).length - 1))); + var nextStrChar_704643158 = nsuToLowerAsciiChar(str_704643090.charCodeAt(chckIndx(addInt(strIndex_704643098, 1), 0, (str_704643090).length - 1))); + if (!!((ConstSet5[nextStrChar_704643158] != undefined))) Temporary4 = false; else { Temporary4 = !((nextStrChar_704643158 == nextPatternChar_704643157)); } onBoundary_704643156 = Temporary4; + } + + if (onBoundary_704643156) { + scoreState_704643094 = 20; + score_704643100 = addInt(score_704643100, scoreState_704643094); + } + + break; + case (-1): + case (-3): + if (!((ConstSet6[str_704643090.charCodeAt(chckIndx(subInt(strIndex_704643098, 1), 0, (str_704643090).length - 1))] != undefined))) Temporary5 = true; else { if (!(ConstSet7[str_704643090.charCodeAt(chckIndx(subInt(strIndex_704643098, 1), 0, (str_704643090).length - 1))] != undefined)) Temporary6 = false; else { Temporary6 = (ConstSet8[str_704643090.charCodeAt(chckIndx(strIndex_704643098, 0, (str_704643090).length - 1))] != undefined); } Temporary5 = Temporary6; } var isLeadingChar_704643182 = Temporary5; + if (isLeadingChar_704643182) { + scoreState_704643094 = 10; + } + else { + scoreState_704643094 = 0; + score_704643100 = addInt(score_704643100, scoreState_704643094); + } + + break; + } + patIndex_704643099 = addInt(patIndex_704643099, 1); + } + else { + switch (scoreState_704643094) { + case (-100): + scoreState_704643094 = (-3); + score_704643100 = addInt(score_704643100, scoreState_704643094); + break; + case 5: + scoreState_704643094 = (-1); + score_704643100 = addInt(score_704643100, scoreState_704643094); + consecutiveMatchCount_704643097 = 0; + break; + case (-3): + if ((unmatchedLeadingCharCount_704643096 < 3)) { + scoreState_704643094 = (-3); + score_704643100 = addInt(score_704643100, scoreState_704643094); + } + + unmatchedLeadingCharCount_704643096 = addInt(unmatchedLeadingCharCount_704643096, 1); + break; + default: + scoreState_704643094 = (-1); + score_704643100 = addInt(score_704643100, scoreState_704643094); + break; + } + } + + strIndex_704643098 = addInt(strIndex_704643098, 1); + }; + } + }; + if (!(patIndex_704643099 == ((pattern_704643089) == null ? 0 : (pattern_704643089).length))) Temporary7 = false; else { if ((strIndex_704643098 == ((str_704643090) == null ? 0 : (str_704643090).length))) Temporary8 = true; else { Temporary8 = !((ConstSet9[str_704643090.charCodeAt(chckIndx(strIndex_704643098, 0, (str_704643090).length - 1))] != undefined)); } Temporary7 = Temporary8; } if (Temporary7) { + score_704643100 = addInt(score_704643100, 10); + } + + var colontmp__553649397 = nimMax(0, score_704643100); + var colontmp__553649398 = (0 < score_704643100); + result_704643093 = nimCopy(result_704643093, {Field0: colontmp__553649397, Field1: colontmp__553649398}, NTI704643086); + + return result_704643093; + +} + +function escapeCString_553648874(x_553648875, x_553648875_Idx) { + var s_553648876 = []; + Label1: { + var c_553648877 = 0; + var iHEX60gensym13_553649401 = 0; + var nHEX60gensym13_553649402 = ((x_553648875[x_553648875_Idx]) == null ? 0 : (x_553648875[x_553648875_Idx]).length); + Label2: { + Label3: while (true) { + if (!(iHEX60gensym13_553649401 < nHEX60gensym13_553649402)) break Label3; + c_553648877 = x_553648875[x_553648875_Idx].charCodeAt(chckIndx(iHEX60gensym13_553649401, 0, (x_553648875[x_553648875_Idx]).length - 1)); + switch (c_553648877) { + case 60: + s_553648876.push.apply(s_553648876, [38,108,116,59]);; + break; + case 62: + s_553648876.push.apply(s_553648876, [38,103,116,59]);; + break; + default: + addChar(s_553648876, c_553648877);; + break; + } + iHEX60gensym13_553649401 += 1; + } + }; + }; + x_553648875[x_553648875_Idx] = toJSStr(s_553648876); + + +} + +function dosearch_553648878(value_553648879) { + +function HEX3Aanonymous_553648906(a_553648911, b_553648912) { + var result_553648919 = 0; + + result_553648919 = subInt(b_553648912["Field1"], a_553648911["Field1"]); + + return result_553648919; + + } + + var result_553648880 = null; + + BeforeRet: { + if (((db_553648872[0]).length == 0)) { + break BeforeRet; + } + + var ul_553648884 = tree_553648257("UL", []); + result_553648880 = tree_553648257("DIV", []); + setClass_553648278(result_553648880, "search_results"); + var matches_553648889 = []; + Label1: { + var i_553648897 = 0; + var colontmp__553649388 = 0; + colontmp__553649388 = (db_553648872[0]).length; + var i_553649389 = 0; + Label2: { + Label3: while (true) { + if (!(i_553649389 < colontmp__553649388)) break Label3; + i_553648897 = i_553649389; + Label4: { + var c_553648898 = contents_553648873[0][chckIndx(i_553648897, 0, (contents_553648873[0]).length - 1)]; + if (((c_553648898 == "Examples") || (c_553648898 == "PEG construction"))) { + break Label4; + } + + var tmpTuple_553648899 = fuzzyMatch_704643088(value_553648879, c_553648898); + var score_553648900 = tmpTuple_553648899["Field0"]; + var matched_553648901 = tmpTuple_553648899["Field1"]; + if (matched_553648901) { + matches_553648889.push({Field0: db_553648872[0][chckIndx(i_553648897, 0, (db_553648872[0]).length - 1)], Field1: score_553648900});; + } + + }; + i_553649389 = addInt(i_553649389, 1); + } + }; + }; + matches_553648889.sort(HEX3Aanonymous_553648906); + Label5: { + var i_553648936 = 0; + var colontmp__553649392 = 0; + colontmp__553649392 = nimMin((matches_553648889).length, 29); + var i_553649393 = 0; + Label6: { + Label7: while (true) { + if (!(i_553649393 < colontmp__553649392)) break Label7; + i_553648936 = i_553649393; + matches_553648889[chckIndx(i_553648936, 0, (matches_553648889).length - 1)]["Field0"].innerHTML = matches_553648889[chckIndx(i_553648936, 0, (matches_553648889).length - 1)]["Field0"].getAttribute("data-doc-search-tag"); + escapeCString_553648874(matches_553648889[chckIndx(i_553648936, 0, (matches_553648889).length - 1)]["Field0"], "innerHTML"); + add_553648274(ul_553648884, tree_553648257("LI", [matches_553648889[chckIndx(i_553648936, 0, (matches_553648889).length - 1)]["Field0"]])); + i_553649393 = addInt(i_553649393, 1); + } + }; + }; + if ((ul_553648884.childNodes.length == 0)) { + add_553648274(result_553648880, tree_553648257("B", [text_553648281("no search results")])); + } + else { + add_553648274(result_553648880, tree_553648257("B", [text_553648281("search results")])); + add_553648274(result_553648880, ul_553648884); + } + + }; + + return result_553648880; + +} + +function search() { + +function wrapper_553649212() { + var elem_553649213 = document.getElementById("searchInput"); + var value_553649214 = elem_553649213.value; + if (!((((value_553649214) == null ? 0 : (value_553649214).length) == 0))) { + if ((oldtoc_553649207[0] == null)) { + oldtoc_553649207[0] = document.getElementById("tocRoot"); + } + + var results_553649218 = dosearch_553648878(value_553649214); + replaceById_553648284("tocRoot", results_553649218); + } + else { + if (!((oldtoc_553649207[0] == null))) { + replaceById_553648284("tocRoot", oldtoc_553649207[0]); + } + } + + + } + + if ((loadIndexFut_553649210[0] == null)) { + loadIndexFut_553649210[0] = loadIndex_553649051(); + var _ = then_553649227(loadIndexFut_553649210[0], wrapper_553649212, null); + } + + if (!((timer_553649208[0] == null))) { + clearTimeout(timer_553649208[0]); + } + + timer_553649208[0] = setTimeout(wrapper_553649212, 400); + + +} + +function copyToClipboard() { + + function updatePreTags() { + + const allPreTags = document.querySelectorAll("pre") + + allPreTags.forEach((e) => { + + const div = document.createElement("div") + div.classList.add("copyToClipBoard") + + const preTag = document.createElement("pre") + preTag.innerHTML = e.innerHTML + + const button = document.createElement("button") + button.value = e.textContent.replace('...', '') + button.classList.add("copyToClipBoardBtn") + button.style.cursor = "pointer" + + div.appendChild(preTag) + div.appendChild(button) + + e.outerHTML = div.outerHTML + + }) + } + + + function copyTextToClipboard(e) { + const clipBoardContent = e.target.value + navigator.clipboard.writeText(clipBoardContent).then(function() { + e.target.style.setProperty("--clipboard-image", "var(--clipboard-image-selected)") + }, function(err) { + console.error("Could not copy text: ", err); + }); + } + + window.addEventListener("click", (e) => { + if (e.target.classList.contains("copyToClipBoardBtn")) { + copyTextToClipboard(e) + } + }) + + window.addEventListener("mouseover", (e) => { + if (e.target.nodeName === "PRE") { + e.target.nextElementSibling.style.setProperty("--clipboard-image", "var(--clipboard-image-normal)") + } + }) + + window.addEventListener("DOMContentLoaded", updatePreTags) + + + + +} +var Temporary1; +var t_553648167 = window.localStorage.getItem("theme"); +if ((t_553648167 == null)) { +Temporary1 = "auto"; +} +else { +Temporary1 = t_553648167; +} + +setTheme(Temporary1); +var alternative_553648830 = [null]; +var db_553648872 = [[]]; +var contents_553648873 = [[]]; +var oldtoc_553649207 = [null]; +var timer_553649208 = [null]; +var loadIndexFut_553649210 = [null]; +copyToClipboard(); +window.addEventListener("DOMContentLoaded", onDOMLoaded, false); diff --git a/nimcache/runnableExamples/jssets_examples_1.nim b/nimcache/runnableExamples/jssets_examples_1.nim new file mode 100644 index 0000000..252e85d --- /dev/null +++ b/nimcache/runnableExamples/jssets_examples_1.nim @@ -0,0 +1,27 @@ +#[ +autogenerated by docgen +loc: /home/runner/work/fusion/fusion/fusion/src/fusion/js/jssets.nim(36, 1) +rdoccmd: +]# +import std/assertions +import "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jssets.nim" +{.line: ("/home/runner/work/fusion/fusion/fusion/src/fusion/js/jssets.nim", 36, 1).}: + import std/jsffi + if defined(fusionJsSetTests): + let a: JsSet = newJsSet([1.toJs, 2.toJs, 3.toJs, 4.toJs]) + let b: JsSet = newJsSet([1.0.toJs, 2.0.toJs, 3.0.toJs]) + doAssert a.len == 4 + doAssert b.len == 3 + doAssert a.toString() == @["1".cstring, "2", "3", "4"] + doAssert b.toString() == @["1".cstring, "2", "3"] + a.clear() + b.clear() + let d: JsSet = newJsSet([1.toJs, 2.toJs, 3.toJs]) + doAssert d.len == 3 + d.add(4.toJs) + d.delete(2.toJs) + doAssert 3.toJs in d + doAssert "3".cstring.toJs notin d + doAssert d.contains 1.toJs + doAssert $d == """@["1", "3", "4"]""" + diff --git a/nimcache/runnableExamples/jssets_group0_examples.js b/nimcache/runnableExamples/jssets_group0_examples.js new file mode 100644 index 0000000..a4d562b --- /dev/null +++ b/nimcache/runnableExamples/jssets_group0_examples.js @@ -0,0 +1,1245 @@ +/* Generated by the Nim Compiler v2.1.1 */ +var framePtr = null; +var excHandler = 0; +var lastJSError = null; +var NTI134217749 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217751 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217741 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217743 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33554435 = {size: 0,kind: 31,base: null,node: null,finalizer: null}; +var NTI33555824 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI33555167 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555175 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33554450 = {size: 0,kind: 29,base: null,node: null,finalizer: null}; +var NTI33555174 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33555171 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555172 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217745 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33554449 = {size: 0,kind: 28,base: null,node: null,finalizer: null}; +var NNI134217745 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217745.node = NNI134217745; +var NNI33555172 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555172.node = NNI33555172; +NTI33555174.base = NTI33555171; +NTI33555175.base = NTI33555171; +var NNI33555171 = {kind: 2, len: 5, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "parent", len: 0, typ: NTI33555174, name: "parent", sons: null}, +{kind: 1, offset: "name", len: 0, typ: NTI33554450, name: "name", sons: null}, +{kind: 1, offset: "message", len: 0, typ: NTI33554449, name: "msg", sons: null}, +{kind: 1, offset: "trace", len: 0, typ: NTI33554449, name: "trace", sons: null}, +{kind: 1, offset: "up", len: 0, typ: NTI33555175, name: "up", sons: null}]}; +NTI33555171.node = NNI33555171; +var NNI33555167 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555167.node = NNI33555167; +NTI33555171.base = NTI33555167; +NTI33555172.base = NTI33555171; +NTI134217745.base = NTI33555172; +var NNI33555824 = {kind: 2, len: 3, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "Field0", len: 0, typ: NTI33554450, name: "Field0", sons: null}, +{kind: 1, offset: "Field1", len: 0, typ: NTI33554435, name: "Field1", sons: null}, +{kind: 1, offset: "Field2", len: 0, typ: NTI33554450, name: "Field2", sons: null}]}; +NTI33555824.node = NNI33555824; +var NNI134217743 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217743.node = NNI134217743; +var NNI134217741 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217741.node = NNI134217741; +NTI134217741.base = NTI33555172; +NTI134217743.base = NTI134217741; +var NNI134217751 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217751.node = NNI134217751; +NTI134217751.base = NTI33555172; +var NNI134217749 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217749.node = NNI134217749; +NTI134217749.base = NTI33555172; + +function setConstr() { + var result = {}; + for (var i = 0; i < arguments.length; ++i) { + var x = arguments[i]; + if (typeof(x) == "object") { + for (var j = x[0]; j <= x[1]; ++j) { + result[j] = true; + } + } else { + result[x] = true; + } + } + return result; + + + +} +var ConstSet1 = setConstr(17, 16, 4, 18, 27, 19, 23, 22, 21); + +function nimCopy(dest_33557255, src_33557256, ti_33557257) { + var result_33557266 = null; + + switch (ti_33557257.kind) { + case 21: + case 22: + case 23: + case 5: + if (!(isFatPointer_33557246(ti_33557257))) { + result_33557266 = src_33557256; + } + else { + result_33557266 = [src_33557256[0], src_33557256[1]]; + } + + break; + case 19: + if (dest_33557255 === null || dest_33557255 === undefined) { + dest_33557255 = {}; + } + else { + for (var key in dest_33557255) { delete dest_33557255[key]; } + } + for (var key in src_33557256) { dest_33557255[key] = src_33557256[key]; } + result_33557266 = dest_33557255; + + break; + case 18: + case 17: + if (!((ti_33557257.base == null))) { + result_33557266 = nimCopy(dest_33557255, src_33557256, ti_33557257.base); + } + else { + if ((ti_33557257.kind == 17)) { + result_33557266 = (dest_33557255 === null || dest_33557255 === undefined) ? {m_type: ti_33557257} : dest_33557255; + } + else { + result_33557266 = (dest_33557255 === null || dest_33557255 === undefined) ? {} : dest_33557255; + } + } + nimCopyAux(result_33557266, src_33557256, ti_33557257.node); + break; + case 4: + case 16: + if(ArrayBuffer.isView(src_33557256)) { + if(dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new src_33557256.constructor(src_33557256); + } else { + dest_33557255.set(src_33557256, 0); + } + result_33557266 = dest_33557255; + } else { + if (src_33557256 === null) { + result_33557266 = null; + } + else { + if (dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new Array(src_33557256.length); + } + result_33557266 = dest_33557255; + for (var i = 0; i < src_33557256.length; ++i) { + result_33557266[i] = nimCopy(result_33557266[i], src_33557256[i], ti_33557257.base); + } + } + } + + break; + case 24: + case 27: + if (src_33557256 === null) { + result_33557266 = null; + } + else { + if (dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new Array(src_33557256.length); + } + result_33557266 = dest_33557255; + for (var i = 0; i < src_33557256.length; ++i) { + result_33557266[i] = nimCopy(result_33557266[i], src_33557256[i], ti_33557257.base); + } + } + + break; + case 28: + if (src_33557256 !== null) { + result_33557266 = src_33557256.slice(0); + } + + break; + default: + result_33557266 = src_33557256; + break; + } + + return result_33557266; + +} + +function arrayConstr(len_33557301, value_33557302, typ_33557303) { + var result = new Array(len_33557301); + for (var i = 0; i < len_33557301; ++i) result[i] = nimCopy(null, value_33557302, typ_33557303); + return result; + + + +} + +function mnewString(len_33556990) { + var result = new Array(len_33556990); + for (var i = 0; i < len_33556990; i++) {result[i] = 0;} + return result; + + + +} + +function addInt(a_33557037, b_33557038) { + var result = a_33557037 + b_33557038; + checkOverflowInt(result); + return result; + + + +} + +function chckRange(i_33557311, a_33557312, b_33557313) { + var result_33557314 = 0; + + BeforeRet: { + if (((a_33557312 <= i_33557311) && (i_33557311 <= b_33557313))) { + result_33557314 = i_33557311; + break BeforeRet; + } + else { + raiseRangeError(); + } + + }; + + return result_33557314; + +} + +function chckIndx(i_33557306, a_33557307, b_33557308) { + var result_33557309 = 0; + + BeforeRet: { + if (((a_33557307 <= i_33557306) && (i_33557306 <= b_33557308))) { + result_33557309 = i_33557306; + break BeforeRet; + } + else { + raiseIndexError(i_33557306, a_33557307, b_33557308); + } + + }; + + return result_33557309; + +} + +function cstrToNimstr(c_33556888) { + var ln = c_33556888.length; + var result = new Array(ln); + var r = 0; + for (var i = 0; i < ln; ++i) { + var ch = c_33556888.charCodeAt(i); + + if (ch < 128) { + result[r] = ch; + } + else { + if (ch < 2048) { + result[r] = (ch >> 6) | 192; + } + else { + if (ch < 55296 || ch >= 57344) { + result[r] = (ch >> 12) | 224; + } + else { + ++i; + ch = 65536 + (((ch & 1023) << 10) | (c_33556888.charCodeAt(i) & 1023)); + result[r] = (ch >> 18) | 240; + ++r; + result[r] = ((ch >> 12) & 63) | 128; + } + ++r; + result[r] = ((ch >> 6) & 63) | 128; + } + ++r; + result[r] = (ch & 63) | 128; + } + ++r; + } + return result; + + + +} + +function toJSStr(s_33556891) { + var result_33556892 = null; + + var res_33556933 = newSeq_33556909((s_33556891).length); + var i_33556934 = 0; + var j_33556935 = 0; + Label1: { + Label2: while (true) { + if (!(i_33556934 < (s_33556891).length)) break Label2; + var c_33556936 = s_33556891[i_33556934]; + if ((c_33556936 < 128)) { + res_33556933[j_33556935] = String.fromCharCode(c_33556936); + i_33556934 += 1; + } + else { + var helper_33556948 = newSeq_33556909(0); + Label3: { + Label4: while (true) { + if (!true) break Label4; + var code_33556949 = c_33556936.toString(16); + if ((((code_33556949) == null ? 0 : (code_33556949).length) == 1)) { + helper_33556948.push("%0");; + } + else { + helper_33556948.push("%");; + } + + helper_33556948.push(code_33556949);; + i_33556934 += 1; + if ((((s_33556891).length <= i_33556934) || (s_33556891[i_33556934] < 128))) { + break Label3; + } + + c_33556936 = s_33556891[i_33556934]; + } + }; +++excHandler; + try { + res_33556933[j_33556935] = decodeURIComponent(helper_33556948.join("")); +--excHandler; +} catch (EXCEPTION) { + var prevJSError = lastJSError; + lastJSError = EXCEPTION; + --excHandler; + res_33556933[j_33556935] = helper_33556948.join(""); + lastJSError = prevJSError; + } finally { + } + } + + j_33556935 += 1; + } + }; + if (res_33556933.length < j_33556935) { for (var i = res_33556933.length ; i < j_33556935 ; ++i) res_33556933.push(null); } + else { res_33556933.length = j_33556935; }; + result_33556892 = res_33556933.join(""); + + return result_33556892; + +} + +function raiseException(e_33556643, ename_33556644) { + e_33556643.name = ename_33556644; + if ((excHandler == 0)) { + unhandledException(e_33556643); + } + + e_33556643.trace = nimCopy(null, rawWriteStackTrace_33556594(), NTI33554449); + throw e_33556643; + + +} + +function makeNimstrLit(c_33556885) { + var result = []; + for (var i = 0; i < c_33556885.length; ++i) { + result[i] = c_33556885.charCodeAt(i); + } + return result; + + + +} + +function subInt(a_33557041, b_33557042) { + var result = a_33557041 - b_33557042; + checkOverflowInt(result); + return result; + + + +} + +function eqStrings(a_33557028, b_33557029) { + if (a_33557028 == b_33557029) return true; + if (a_33557028 === null && b_33557029.length == 0) return true; + if (b_33557029 === null && a_33557028.length == 0) return true; + if ((!a_33557028) || (!b_33557029)) return false; + var alen = a_33557028.length; + if (alen != b_33557029.length) return false; + for (var i = 0; i < alen; ++i) + if (a_33557028[i] != b_33557029[i]) return false; + return true; + + + +} + +function addChar(x_33557402, c_33557403) { + x_33557402.push(c_33557403); + + +} +var F = {procname: "module macros", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/core/macros.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module macros", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/core/macros.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsbigints", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/jsbigints.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsbigints", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/jsbigints.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsutils", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/jsutils.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsutils", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/jsutils.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module hashes", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/hashes.nim", line: 0}; +framePtr = F; +F.line = 218; +F.filename = "hashes.nim"; +var objectID_738197679 = [0]; +framePtr = F.prev; +var F = {procname: "module hashes", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/hashes.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module bitops_utils", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/bitops_utils.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module bitops_utils", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/bitops_utils.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module countbits_impl", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system/countbits_impl.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module countbits_impl", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system/countbits_impl.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module bitops", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/bitops.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module bitops", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/bitops.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module fenv", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/fenv.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module fenv", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/fenv.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module math", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/math.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module math", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/math.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module algorithm", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/algorithm.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module algorithm", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/algorithm.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module outparams", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/outparams.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module outparams", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/outparams.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module tables", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/collections/tables.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module tables", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/pure/collections/tables.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsffi", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/js/jsffi.nim", line: 0}; +framePtr = F; +F.line = 45; +F.filename = "jsffi.nim"; +F.line = 46; +framePtr = F.prev; +var F = {procname: "module jsffi", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/js/jsffi.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jssets", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jssets.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jssets", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jssets.nim", line: 0}; +framePtr = F; +framePtr = F.prev; + +function len_671088661(this_671088662) { + var result_671088663 = 0; + + var F = {procname: "jssets.len", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jssets.nim", line: 0}; + framePtr = F; + F.line = 31; + F.filename = "jssets.nim"; + result_671088663 = ((this_671088662.size) | 0); + framePtr = F.prev; + + return result_671088663; + +} + +function isFatPointer_33557246(ti_33557247) { + var result_33557248 = false; + + BeforeRet: { + result_33557248 = !((ConstSet1[ti_33557247.base.kind] != undefined)); + break BeforeRet; + }; + + return result_33557248; + +} + +function nimCopyAux(dest_33557259, src_33557260, n_33557261) { + switch (n_33557261.kind) { + case 0: + break; + case 1: + dest_33557259[n_33557261.offset] = nimCopy(dest_33557259[n_33557261.offset], src_33557260[n_33557261.offset], n_33557261.typ); + + break; + case 2: + for (var i = 0; i < n_33557261.sons.length; i++) { + nimCopyAux(dest_33557259, src_33557260, n_33557261.sons[i]); + } + + break; + case 3: + dest_33557259[n_33557261.offset] = nimCopy(dest_33557259[n_33557261.offset], src_33557260[n_33557261.offset], n_33557261.typ); + for (var i = 0; i < n_33557261.sons.length; ++i) { + nimCopyAux(dest_33557259, src_33557260, n_33557261.sons[i][1]); + } + + break; + } + + +} + +function add_33556366(x_33556367, x_33556367_Idx, y_33556368) { + if (x_33556367[x_33556367_Idx] === null) { x_33556367[x_33556367_Idx] = []; } + var off = x_33556367[x_33556367_Idx].length; + x_33556367[x_33556367_Idx].length += y_33556368.length; + for (var i = 0; i < y_33556368.length; ++i) { + x_33556367[x_33556367_Idx][off+i] = y_33556368.charCodeAt(i); + } + + + +} + +function raiseOverflow() { + raiseException({message: [111,118,101,114,45,32,111,114,32,117,110,100,101,114,102,108,111,119], parent: null, m_type: NTI134217743, name: null, trace: [], up: null}, "OverflowDefect"); + + +} + +function checkOverflowInt(a_33557035) { + if (a_33557035 > 2147483647 || a_33557035 < -2147483648) raiseOverflow(); + + + +} + +function raiseRangeError() { + raiseException({message: [118,97,108,117,101,32,111,117,116,32,111,102,32,114,97,110,103,101], parent: null, m_type: NTI134217751, name: null, trace: [], up: null}, "RangeDefect"); + + +} + +function raiseIndexError(i_33556802, a_33556803, b_33556804) { + var Temporary1; + + if ((b_33556804 < a_33556803)) { + Temporary1 = [105,110,100,101,120,32,111,117,116,32,111,102,32,98,111,117,110,100,115,44,32,116,104,101,32,99,111,110,116,97,105,110,101,114,32,105,115,32,101,109,112,116,121]; + } + else { + Temporary1 = ([105,110,100,101,120,32] || []).concat(HEX24_369098760(i_33556802) || [],[32,110,111,116,32,105,110,32] || [],HEX24_369098760(a_33556803) || [],[32,46,46,32] || [],HEX24_369098760(b_33556804) || []); + } + + raiseException({message: nimCopy(null, Temporary1, NTI33554449), parent: null, m_type: NTI134217749, name: null, trace: [], up: null}, "IndexDefect"); + + +} + +function addChars_301990087(result_301990089, result_301990089_Idx, x_301990090, start_301990091, n_301990092) { + var Temporary1; + + var F = {procname: "addChars.addChars", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/digitsutils.nim", line: 0}; + framePtr = F; + F.line = 44; + F.filename = "digitsutils.nim"; + var old_301990093 = (result_301990089[result_301990089_Idx]).length; + F.line = 45; + if (result_301990089[result_301990089_Idx].length < (Temporary1 = chckRange(addInt(old_301990093, n_301990092), 0, 2147483647), Temporary1)) { for (var i = result_301990089[result_301990089_Idx].length; i < Temporary1; ++i) result_301990089[result_301990089_Idx].push(0); } + else {result_301990089[result_301990089_Idx].length = Temporary1; }; + Label2: { + F.line = 47; + var iHEX60gensym4_301990107 = 0; + F.line = 128; + F.filename = "iterators_1.nim"; + var i_654311668 = 0; + Label3: { + F.line = 129; + Label4: while (true) { + if (!(i_654311668 < n_301990092)) break Label4; + F.line = 50; + F.filename = "digitsutils.nim"; + iHEX60gensym4_301990107 = i_654311668; + F.line = 50; + result_301990089[result_301990089_Idx][chckIndx(addInt(old_301990093, iHEX60gensym4_301990107), 0, (result_301990089[result_301990089_Idx]).length - 1)] = x_301990090.charCodeAt(chckIndx(addInt(start_301990091, iHEX60gensym4_301990107), 0, (x_301990090).length - 1)); + F.line = 131; + F.filename = "iterators_1.nim"; + i_654311668 = addInt(i_654311668, 1); + } + }; + }; + framePtr = F.prev; + + +} + +function addChars_301990083(result_301990085, result_301990085_Idx, x_301990086) { + var F = {procname: "addChars.addChars", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/digitsutils.nim", line: 0}; + framePtr = F; + F.line = 56; + F.filename = "digitsutils.nim"; + addChars_301990087(result_301990085, result_301990085_Idx, x_301990086, 0, ((x_301990086) == null ? 0 : (x_301990086).length)); + framePtr = F.prev; + + +} + +function addInt_301990108(result_301990109, result_301990109_Idx, x_301990110) { + var F = {procname: "digitsutils.addInt", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/digitsutils.nim", line: 0}; + framePtr = F; + F.line = 112; + F.filename = "digitsutils.nim"; + addChars_301990083(result_301990109, result_301990109_Idx, ((x_301990110) + "")); + framePtr = F.prev; + + +} + +function addInt_301990126(result_301990127, result_301990127_Idx, x_301990128) { + var F = {procname: "digitsutils.addInt", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/digitsutils.nim", line: 0}; + framePtr = F; + F.line = 116; + F.filename = "digitsutils.nim"; + addInt_301990108(result_301990127, result_301990127_Idx, BigInt(x_301990128)); + framePtr = F.prev; + + +} + +function HEX24_369098760(x_369098761) { + var result_369098762 = [[]]; + + var F = {procname: "dollars.$", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system/dollars.nim", line: 0}; + framePtr = F; + F.line = 18; + F.filename = "dollars.nim"; + addInt_301990126(result_369098762, 0, x_369098761); + framePtr = F.prev; + + return result_369098762[0]; + +} + +function auxWriteStackTrace_33556501(f_33556502) { + var result_33556503 = [[]]; + + var it_33556511 = f_33556502; + var i_33556512 = 0; + var total_33556513 = 0; + var tempFrames_33556514 = arrayConstr(64, {Field0: null, Field1: 0, Field2: null}, NTI33555824); + Label1: { + Label2: while (true) { + if (!(!((it_33556511 == null)) && (i_33556512 <= 63))) break Label2; + tempFrames_33556514[i_33556512].Field0 = it_33556511.procname; + tempFrames_33556514[i_33556512].Field1 = it_33556511.line; + tempFrames_33556514[i_33556512].Field2 = it_33556511.filename; + i_33556512 += 1; + total_33556513 += 1; + it_33556511 = it_33556511.prev; + } + }; + Label3: { + Label4: while (true) { + if (!!((it_33556511 == null))) break Label4; + total_33556513 += 1; + it_33556511 = it_33556511.prev; + } + }; + result_33556503[0] = nimCopy(null, [], NTI33554449); + if (!((total_33556513 == i_33556512))) { + result_33556503[0].push.apply(result_33556503[0], [40]);; + result_33556503[0].push.apply(result_33556503[0], HEX24_369098760((total_33556513 - i_33556512)));; + result_33556503[0].push.apply(result_33556503[0], [32,99,97,108,108,115,32,111,109,105,116,116,101,100,41,32,46,46,46,10]);; + } + + Label5: { + var j_33556544 = 0; + var colontmp__654311660 = 0; + colontmp__654311660 = (i_33556512 - 1); + var res_654311662 = colontmp__654311660; + Label6: { + Label7: while (true) { + if (!(0 <= res_654311662)) break Label7; + j_33556544 = res_654311662; + result_33556503[0].push.apply(result_33556503[0], cstrToNimstr(tempFrames_33556514[j_33556544].Field2));; + if ((0 < tempFrames_33556514[j_33556544].Field1)) { + result_33556503[0].push.apply(result_33556503[0], [40]);; + addInt_301990126(result_33556503, 0, tempFrames_33556514[j_33556544].Field1); + if (false) { + result_33556503[0].push.apply(result_33556503[0], [44,32]);; + addInt_301990126(result_33556503, 0, 0); + } + + result_33556503[0].push.apply(result_33556503[0], [41]);; + } + + result_33556503[0].push.apply(result_33556503[0], [32,97,116,32]);; + add_33556366(result_33556503, 0, tempFrames_33556514[j_33556544].Field0); + result_33556503[0].push.apply(result_33556503[0], [10]);; + res_654311662 -= 1; + } + }; + }; + + return result_33556503[0]; + +} + +function rawWriteStackTrace_33556594() { + var result_33556595 = []; + + if (!((framePtr == null))) { + result_33556595 = nimCopy(null, ([84,114,97,99,101,98,97,99,107,32,40,109,111,115,116,32,114,101,99,101,110,116,32,99,97,108,108,32,108,97,115,116,41,10] || []).concat(auxWriteStackTrace_33556501(framePtr) || []), NTI33554449); + } + else { + result_33556595 = nimCopy(null, [78,111,32,115,116,97,99,107,32,116,114,97,99,101,98,97,99,107,32,97,118,97,105,108,97,98,108,101,10], NTI33554449); + } + + + return result_33556595; + +} + +function newSeq_33556909(len_33556911) { + var result_33556912 = []; + + var F = {procname: "newSeq.newSeq", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system.nim", line: 0}; + framePtr = F; + F.line = 636; + F.filename = "system.nim"; + result_33556912 = new Array(len_33556911); for (var i = 0 ; i < len_33556911 ; ++i) { result_33556912[i] = null; } framePtr = F.prev; + + return result_33556912; + +} + +function unhandledException(e_33556639) { + var buf_33556640 = [[]]; + if (!(((e_33556639.message).length == 0))) { + buf_33556640[0].push.apply(buf_33556640[0], [69,114,114,111,114,58,32,117,110,104,97,110,100,108,101,100,32,101,120,99,101,112,116,105,111,110,58,32]);; + buf_33556640[0].push.apply(buf_33556640[0], e_33556639.message);; + } + else { + buf_33556640[0].push.apply(buf_33556640[0], [69,114,114,111,114,58,32,117,110,104,97,110,100,108,101,100,32,101,120,99,101,112,116,105,111,110]);; + } + + buf_33556640[0].push.apply(buf_33556640[0], [32,91]);; + add_33556366(buf_33556640, 0, e_33556639.name); + buf_33556640[0].push.apply(buf_33556640[0], [93,10]);; + buf_33556640[0].push.apply(buf_33556640[0], rawWriteStackTrace_33556594());; + var cbuf_33556641 = toJSStr(buf_33556640[0]); + framePtr = null; + if (typeof(Error) !== "undefined") { + throw new Error(cbuf_33556641); + } + else { + throw cbuf_33556641; + } + + + +} + +function sysFatal_268435501(message_268435504) { + var F = {procname: "sysFatal.sysFatal", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system/fatal.nim", line: 0}; + framePtr = F; + F.line = 53; + F.filename = "fatal.nim"; + raiseException({message: nimCopy(null, message_268435504, NTI33554449), m_type: NTI134217745, parent: null, name: null, trace: [], up: null}, "AssertionDefect"); + framePtr = F.prev; + + +} + +function raiseAssert_268435499(msg_268435500) { + var F = {procname: "assertions.raiseAssert", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/assertions.nim", line: 0}; + framePtr = F; + F.line = 36; + F.filename = "assertions.nim"; + sysFatal_268435501(msg_268435500); + framePtr = F.prev; + + +} + +function failedAssertImpl_268435541(msg_268435542) { + var F = {procname: "assertions.failedAssertImpl", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/assertions.nim", line: 0}; + framePtr = F; + F.line = 41; + F.filename = "assertions.nim"; + raiseAssert_268435499(msg_268435542); + framePtr = F.prev; + + +} + +function HEX3DHEX3D_654311465(x_654311467, y_654311468) { + var result_654311469 = false; + + var F = {procname: "==.==", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system/comparisons.nim", line: 0}; + framePtr = F; + BeforeRet: { + F.line = 326; + F.filename = "comparisons.nim"; + var sameObject_654311476 = false; + F.line = 327; + sameObject_654311476 = x_654311467 === y_654311468 + if (sameObject_654311476) { + F.line = 328; + result_654311469 = true; + break BeforeRet; + } + + if (!(((x_654311467).length == (y_654311468).length))) { + F.line = 331; + result_654311469 = false; + break BeforeRet; + } + + Label1: { + F.line = 333; + var i_654311490 = 0; + F.line = 81; + F.filename = "iterators_1.nim"; + var colontmp__654311673 = 0; + F.line = 333; + F.filename = "comparisons.nim"; + colontmp__654311673 = subInt((x_654311467).length, 1); + F.line = 96; + F.filename = "iterators_1.nim"; + var res_654311675 = 0; + Label2: { + F.line = 97; + Label3: while (true) { + if (!(res_654311675 <= colontmp__654311673)) break Label3; + F.line = 333; + F.filename = "comparisons.nim"; + i_654311490 = res_654311675; + if (!((x_654311467[chckIndx(i_654311490, 0, (x_654311467).length - 1)] == y_654311468[chckIndx(i_654311490, 0, (y_654311468).length - 1)]))) { + F.line = 335; + result_654311469 = false; + break BeforeRet; + } + + F.line = 102; + F.filename = "iterators_1.nim"; + res_654311675 = addInt(res_654311675, 1); + } + }; + }; + F.line = 337; + F.filename = "comparisons.nim"; + result_654311469 = true; + break BeforeRet; + }; + framePtr = F.prev; + + return result_654311469; + +} + +function addEscapedChar_33557992(s_33557993, s_33557993_Idx, c_33557994) { + var F = {procname: "system.addEscapedChar", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system.nim", line: 0}; + framePtr = F; + F.line = 2566; + F.filename = "system.nim"; + switch (c_33557994) { + case 7: + F.line = 2567; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,97]);; + break; + case 8: + F.line = 2568; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,98]);; + break; + case 9: + F.line = 2569; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,116]);; + break; + case 10: + F.line = 2570; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,110]);; + break; + case 11: + F.line = 2571; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,118]);; + break; + case 12: + F.line = 2572; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,102]);; + break; + case 13: + F.line = 2573; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,114]);; + break; + case 27: + F.line = 2574; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,101]);; + break; + case 92: + F.line = 2575; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,92]);; + break; + case 39: + F.line = 2576; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,39]);; + break; + case 34: + F.line = 2577; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,34]);; + break; + case 32: + case 33: + case 35: + case 36: + case 37: + case 38: + case 40: + case 41: + case 42: + case 43: + case 44: + case 45: + case 46: + case 47: + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 65: + case 66: + case 67: + case 68: + case 69: + case 70: + case 71: + case 72: + case 73: + case 74: + case 75: + case 76: + case 77: + case 78: + case 79: + case 80: + case 81: + case 82: + case 83: + case 84: + case 85: + case 86: + case 87: + case 88: + case 89: + case 90: + case 91: + case 93: + case 94: + case 95: + case 96: + case 97: + case 98: + case 99: + case 100: + case 101: + case 102: + case 103: + case 104: + case 105: + case 106: + case 107: + case 108: + case 109: + case 110: + case 111: + case 112: + case 113: + case 114: + case 115: + case 116: + case 117: + case 118: + case 119: + case 120: + case 121: + case 122: + case 123: + case 124: + case 125: + case 126: + F.line = 2578; + addChar(s_33557993[s_33557993_Idx], c_33557994);; + break; + default: + F.line = 2580; + s_33557993[s_33557993_Idx].push.apply(s_33557993[s_33557993_Idx], [92,120]);; + F.line = 2582; + var n_33558004 = c_33557994; + F.line = 2583; + addChar(s_33557993[s_33557993_Idx], [48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70][chckIndx(((n_33558004 & 240) >> 4), 0, ([48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]).length - 1)]);; + F.line = 2584; + addChar(s_33557993[s_33557993_Idx], [48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70][chckIndx((n_33558004 & 15), 0, ([48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]).length - 1)]);; + break; + } + framePtr = F.prev; + + +} + +function addQuoted_671088704(s_671088706, s_671088706_Idx, x_671088707) { + var F = {procname: "addQuoted.addQuoted", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system.nim", line: 0}; + framePtr = F; + F.line = 2612; + F.filename = "system.nim"; + s_671088706[s_671088706_Idx].push.apply(s_671088706[s_671088706_Idx], [34]);; + Label1: { + F.line = 2613; + var c_671088708 = 0; + F.line = 83; + F.filename = "iterators.nim"; + var iHEX60gensym13_654311684 = 0; + F.line = 84; + var nHEX60gensym13_654311685 = ((x_671088707) == null ? 0 : (x_671088707).length); + Label2: { + F.line = 88; + Label3: while (true) { + if (!(iHEX60gensym13_654311684 < nHEX60gensym13_654311685)) break Label3; + F.line = 2613; + F.filename = "system.nim"; + c_671088708 = x_671088707.charCodeAt(chckIndx(iHEX60gensym13_654311684, 0, (x_671088707).length - 1)); + if ((c_671088708 <= 127)) { + F.line = 2617; + addEscapedChar_33557992(s_671088706, s_671088706_Idx, c_671088708); + } + else { + F.line = 2619; + addChar(s_671088706[s_671088706_Idx], c_671088708);; + } + + F.line = 13; + F.filename = "iterators.nim"; + iHEX60gensym13_654311684 += 1; + } + }; + }; + F.line = 2620; + F.filename = "system.nim"; + s_671088706[s_671088706_Idx].push.apply(s_671088706[s_671088706_Idx], [34]);; + framePtr = F.prev; + + +} + +function collectionToString_671088671(x_671088673, prefix_671088674, separator_671088675, suffix_671088676) { + var result_671088677 = [[]]; + + var F = {procname: "collectionToString.collectionToString", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system/dollars.nim", line: 0}; + framePtr = F; + F.line = 91; + F.filename = "dollars.nim"; + result_671088677[0] = nimCopy(null, prefix_671088674, NTI33554449); + F.line = 92; + var firstElement_671088678 = true; + Label1: { + F.line = 93; + var value_671088700 = null; + F.line = 249; + F.filename = "iterators.nim"; + var i_654311679 = 0; + F.line = 250; + var L_654311680 = (x_671088673).length; + Label2: { + F.line = 251; + Label3: while (true) { + if (!(i_654311679 < L_654311680)) break Label3; + F.line = 93; + F.filename = "dollars.nim"; + value_671088700 = x_671088673[i_654311679]; + if (firstElement_671088678) { + F.line = 95; + firstElement_671088678 = false; + } + else { + F.line = 97; + result_671088677[0].push.apply(result_671088677[0], separator_671088675);; + } + + if ((value_671088700 == null)) { + F.line = 102; + result_671088677[0].push.apply(result_671088677[0], [110,105,108]);; + } + else { + F.line = 104; + addQuoted_671088704(result_671088677, 0, value_671088700); + } + + F.line = 13; + F.filename = "iterators.nim"; + i_654311679 += 1; + if (!(((x_671088673).length == L_654311680))) { + F.line = 254; + failedAssertImpl_268435541(makeNimstrLit("/home/runner/work/fusion/fusion/nim/lib/system/iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + F.line = 107; + F.filename = "dollars.nim"; + result_671088677[0].push.apply(result_671088677[0], suffix_671088676);; + framePtr = F.prev; + + return result_671088677[0]; + +} + +function HEX24_671088667(x_671088669) { + var result_671088670 = []; + + var F = {procname: "$.$", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system/dollars.nim", line: 0}; + framePtr = F; + F.line = 118; + F.filename = "dollars.nim"; + result_671088670 = nimCopy(null, collectionToString_671088671(x_671088669, [64,91], [44,32], [93]), NTI33554449); + framePtr = F.prev; + + return result_671088670; + +} + +function HEX24_671088664(this_671088665) { + var result_671088666 = []; + + var F = {procname: "jssets.$", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jssets.nim", line: 0}; + framePtr = F; + F.line = 33; + F.filename = "jssets.nim"; + result_671088666 = nimCopy(null, HEX24_671088667( (() => {const result = []; this_671088665.forEach(item => result.push(JSON.stringify(item))); return result})()), NTI33554449); + framePtr = F.prev; + + return result_671088666; + +} +var F = {procname: "module jssets_examples_1", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim", line: 0}; +framePtr = F; +if (false) { +F.line = 36; +F.filename = "jssets.nim"; +var a_654311440 = new Set([(1), (2), (3), (4)]); +F.line = 36; +var b_654311450 = new Set([(1.0), (2.0), (3.0)]); +if (!((len_671088661(a_654311440) == 4))) { +F.line = 36; +failedAssertImpl_268435541(makeNimstrLit("/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim(13, 5) `a.len == 4` ")); +} + +if (!((len_671088661(b_654311450) == 3))) { +F.line = 36; +failedAssertImpl_268435541(makeNimstrLit("/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim(14, 5) `b.len == 3` ")); +} + +if (!(HEX3DHEX3D_654311465( (() => {const result = []; a_654311440.forEach(item => result.push(JSON.stringify(item))); return result})(), ["1", "2", "3", "4"]))) { +F.line = 36; +failedAssertImpl_268435541(makeNimstrLit("/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim(15, 5) `a.toString() == @[\"1\".cstring, \"2\", \"3\", \"4\"]` ")); +} + +if (!(HEX3DHEX3D_654311465( (() => {const result = []; b_654311450.forEach(item => result.push(JSON.stringify(item))); return result})(), ["1", "2", "3"]))) { +F.line = 36; +failedAssertImpl_268435541(makeNimstrLit("/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim(16, 5) `b.toString() == @[\"1\".cstring, \"2\", \"3\"]` ")); +} + +F.line = 36; +a_654311440.clear(); +F.line = 36; +b_654311450.clear(); +F.line = 36; +var d_654311518 = new Set([(1), (2), (3)]); +if (!((len_671088661(d_654311518) == 3))) { +F.line = 36; +failedAssertImpl_268435541(makeNimstrLit("/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim(20, 5) `d.len == 3` ")); +} + +F.line = 36; +d_654311518.add((4)); +F.line = 36; +d_654311518.delete((2)); +if (!(d_654311518.has((3)))) { +F.line = 36; +failedAssertImpl_268435541(makeNimstrLit("/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim(23, 5) `3.toJs in d` ")); +} + +if (!(!(d_654311518.has(("3"))))) { +F.line = 36; +failedAssertImpl_268435541(makeNimstrLit("/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim(24, 5) `\"3\".cstring.toJs notin d` ")); +} + +if (!(d_654311518.has((1)))) { +F.line = 36; +failedAssertImpl_268435541(makeNimstrLit("/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim(25, 5) `d.contains 1.toJs` ")); +} + +if (!(eqStrings(HEX24_671088664(d_654311518), [64,91,34,49,34,44,32,34,51,34,44,32,34,52,34,93]))) { +F.line = 36; +failedAssertImpl_268435541(makeNimstrLit("/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim(26, 5) `$d == \"\"\"@[\"1\", \"3\", \"4\"]\"\"\"` ")); +} + +} + +framePtr = F.prev; +var F = {procname: "module jssets_examples_1", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jssets_group0_examples", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_group0_examples.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jssets_group0_examples", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_group0_examples.nim", line: 0}; +framePtr = F; +framePtr = F.prev; diff --git a/nimcache/runnableExamples/jssets_group0_examples.nim b/nimcache/runnableExamples/jssets_group0_examples.nim new file mode 100644 index 0000000..7a6d2b0 --- /dev/null +++ b/nimcache/runnableExamples/jssets_group0_examples.nim @@ -0,0 +1,4 @@ +# autogenerated by docgen +# source: /home/runner/work/fusion/fusion/fusion/src/fusion/js/jssets.nim +# rdoccmd: +import "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jssets_examples_1.nim" diff --git a/nimcache/runnableExamples/jsxmlhttprequest_examples_1.nim b/nimcache/runnableExamples/jsxmlhttprequest_examples_1.nim new file mode 100644 index 0000000..f835a96 --- /dev/null +++ b/nimcache/runnableExamples/jsxmlhttprequest_examples_1.nim @@ -0,0 +1,27 @@ +#[ +autogenerated by docgen +loc: /home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlhttprequest.nim(39, 1) +rdoccmd: +]# +import std/assertions +import "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlhttprequest.nim" +{.line: ("/home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlhttprequest.nim", 39, 1).}: + from std/dom import Node + if defined(fusionJsXmlhttprequestTests): + let request: XMLHttpRequest = newXMLHttpRequest() + request.open("GET".cstring, "http://localhost:8000/".cstring, false) + request.setRequestHeader("mode".cstring, "no-cors".cstring) + request.setRequestHeader([(key: "mode".cstring, val: "no-cors".cstring)]) + request.overrideMimeType("text/plain".cstring) + request.send() + echo request.getAllResponseHeaders() + echo "responseText\t", request.responseText + echo "responseURL\t", request.responseURL + echo "statusText\t", request.statusText + echo "responseXML\t", request.responseXML is Node + echo "status\t", request.status + echo "timeout\t", request.timeout + echo "withCredentials\t", request.withCredentials + echo "readyState\t", request.readyState + request.abort() + diff --git a/nimcache/runnableExamples/jsxmlhttprequest_group0_examples.js b/nimcache/runnableExamples/jsxmlhttprequest_group0_examples.js new file mode 100644 index 0000000..342321e --- /dev/null +++ b/nimcache/runnableExamples/jsxmlhttprequest_group0_examples.js @@ -0,0 +1,1352 @@ +/* Generated by the Nim Compiler v2.1.1 */ +var framePtr = null; +var excHandler = 0; +var lastJSError = null; +var NTI134217749 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217751 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555824 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI33555175 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33554449 = {size: 0,kind: 28,base: null,node: null,finalizer: null}; +var NTI33555174 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33555171 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555172 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217741 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217743 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI654311433 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI687866045 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687866042 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687866041 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI687865921 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687866044 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI687865922 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865991 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865880 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865980 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865992 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865881 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865979 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865978 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865997 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865885 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865977 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865976 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865993 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865882 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865975 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865949 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865948 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865947 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865946 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865945 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865944 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865943 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865942 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865941 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865940 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865939 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865938 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865937 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865936 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865935 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865934 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865933 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865932 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865931 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865930 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865929 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865928 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865927 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865926 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865925 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865998 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865886 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865873 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865871 = {size: 0, kind: 14, base: null, node: null, finalizer: null}; +var NTI687865973 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865972 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865872 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865971 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865970 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865983 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865994 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865883 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865982 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI33554435 = {size: 0,kind: 31,base: null,node: null,finalizer: null}; +var NTI687865996 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865995 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865884 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33554466 = {size: 0,kind: 1,base: null,node: null,finalizer: null}; +var NTI33555167 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865967 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865870 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33554450 = {size: 0,kind: 29,base: null,node: null,finalizer: null}; +var NTI687865981 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865874 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865974 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NNI687865967 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI687865967.node = NNI687865967; +var NNI33555167 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555167.node = NNI33555167; +NTI687865967.base = NTI33555167; +NTI687865870.base = NTI687865967; +NTI687865996.base = NTI687865874; +var NNI687865995 = {kind: 2, len: 10, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "acceptCharset", len: 0, typ: NTI33554450, name: "acceptCharset", sons: null}, +{kind: 1, offset: "action", len: 0, typ: NTI33554450, name: "action", sons: null}, +{kind: 1, offset: "autocomplete", len: 0, typ: NTI33554450, name: "autocomplete", sons: null}, +{kind: 1, offset: "elements", len: 0, typ: NTI687865996, name: "elements", sons: null}, +{kind: 1, offset: "encoding", len: 0, typ: NTI33554450, name: "encoding", sons: null}, +{kind: 1, offset: "enctype", len: 0, typ: NTI33554450, name: "enctype", sons: null}, +{kind: 1, offset: "length", len: 0, typ: NTI33554435, name: "length", sons: null}, +{kind: 1, offset: "method", len: 0, typ: NTI33554450, name: "method", sons: null}, +{kind: 1, offset: "noValidate", len: 0, typ: NTI33554466, name: "noValidate", sons: null}, +{kind: 1, offset: "target", len: 0, typ: NTI33554450, name: "target", sons: null}]}; +NTI687865995.node = NNI687865995; +NTI687865995.base = NTI687865981; +NTI687865884.base = NTI687865995; +var NNI687865994 = {kind: 2, len: 5, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "defaultSelected", len: 0, typ: NTI33554466, name: "defaultSelected", sons: null}, +{kind: 1, offset: "selected", len: 0, typ: NTI33554466, name: "selected", sons: null}, +{kind: 1, offset: "selectedIndex", len: 0, typ: NTI33554435, name: "selectedIndex", sons: null}, +{kind: 1, offset: "text", len: 0, typ: NTI33554450, name: "text", sons: null}, +{kind: 1, offset: "value", len: 0, typ: NTI33554450, name: "value", sons: null}]}; +NTI687865994.node = NNI687865994; +NTI687865994.base = NTI687865981; +NTI687865883.base = NTI687865994; +NTI687865982.base = NTI687865883; +NTI687865983.base = NTI687865883; +var NNI687865981 = {kind: 2, len: 20, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "className", len: 0, typ: NTI33554450, name: "className", sons: null}, +{kind: 1, offset: "classList", len: 0, typ: NTI687865870, name: "classList", sons: null}, +{kind: 1, offset: "checked", len: 0, typ: NTI33554466, name: "checked", sons: null}, +{kind: 1, offset: "defaultChecked", len: 0, typ: NTI33554466, name: "defaultChecked", sons: null}, +{kind: 1, offset: "defaultValue", len: 0, typ: NTI33554450, name: "defaultValue", sons: null}, +{kind: 1, offset: "disabled", len: 0, typ: NTI33554466, name: "disabled", sons: null}, +{kind: 1, offset: "form", len: 0, typ: NTI687865884, name: "form", sons: null}, +{kind: 1, offset: "name", len: 0, typ: NTI33554450, name: "name", sons: null}, +{kind: 1, offset: "readOnly", len: 0, typ: NTI33554466, name: "readOnly", sons: null}, +{kind: 1, offset: "options", len: 0, typ: NTI687865982, name: "options", sons: null}, +{kind: 1, offset: "selectedOptions", len: 0, typ: NTI687865983, name: "selectedOptions", sons: null}, +{kind: 1, offset: "clientWidth", len: 0, typ: NTI33554435, name: "clientWidth", sons: null}, +{kind: 1, offset: "clientHeight", len: 0, typ: NTI33554435, name: "clientHeight", sons: null}, +{kind: 1, offset: "contentEditable", len: 0, typ: NTI33554450, name: "contentEditable", sons: null}, +{kind: 1, offset: "isContentEditable", len: 0, typ: NTI33554466, name: "isContentEditable", sons: null}, +{kind: 1, offset: "dir", len: 0, typ: NTI33554450, name: "dir", sons: null}, +{kind: 1, offset: "offsetHeight", len: 0, typ: NTI33554435, name: "offsetHeight", sons: null}, +{kind: 1, offset: "offsetWidth", len: 0, typ: NTI33554435, name: "offsetWidth", sons: null}, +{kind: 1, offset: "offsetLeft", len: 0, typ: NTI33554435, name: "offsetLeft", sons: null}, +{kind: 1, offset: "offsetTop", len: 0, typ: NTI33554435, name: "offsetTop", sons: null}]}; +NTI687865981.node = NNI687865981; +NTI687865872.base = NTI687865970; +NTI687865971.base = NTI687865872; +NTI687865972.base = NTI687865872; +NTI687865973.base = NTI687865872; +var NNI687865871 = {kind: 2, offset: 0, typ: null, name: null, len: 12, sons: {"1": {kind: 1, offset: 1, typ: NTI687865871, name: "ElementNode", len: 0, sons: null}, +"2": {kind: 1, offset: 2, typ: NTI687865871, name: "AttributeNode", len: 0, sons: null}, +"3": {kind: 1, offset: 3, typ: NTI687865871, name: "TextNode", len: 0, sons: null}, +"4": {kind: 1, offset: 4, typ: NTI687865871, name: "CDATANode", len: 0, sons: null}, +"5": {kind: 1, offset: 5, typ: NTI687865871, name: "EntityRefNode", len: 0, sons: null}, +"6": {kind: 1, offset: 6, typ: NTI687865871, name: "EntityNode", len: 0, sons: null}, +"7": {kind: 1, offset: 7, typ: NTI687865871, name: "ProcessingInstructionNode", len: 0, sons: null}, +"8": {kind: 1, offset: 8, typ: NTI687865871, name: "CommentNode", len: 0, sons: null}, +"9": {kind: 1, offset: 9, typ: NTI687865871, name: "DocumentNode", len: 0, sons: null}, +"10": {kind: 1, offset: 10, typ: NTI687865871, name: "DocumentTypeNode", len: 0, sons: null}, +"11": {kind: 1, offset: 11, typ: NTI687865871, name: "DocumentFragmentNode", len: 0, sons: null}, +"12": {kind: 1, offset: 12, typ: NTI687865871, name: "NotationNode", len: 0, sons: null}}}; +NTI687865871.node = NNI687865871; +NTI687865873.base = NTI687865974; +var NNI687865998 = {kind: 2, len: 368, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "alignContent", len: 0, typ: NTI33554450, name: "alignContent", sons: null}, +{kind: 1, offset: "alignItems", len: 0, typ: NTI33554450, name: "alignItems", sons: null}, +{kind: 1, offset: "alignSelf", len: 0, typ: NTI33554450, name: "alignSelf", sons: null}, +{kind: 1, offset: "all", len: 0, typ: NTI33554450, name: "all", sons: null}, +{kind: 1, offset: "animation", len: 0, typ: NTI33554450, name: "animation", sons: null}, +{kind: 1, offset: "animationDelay", len: 0, typ: NTI33554450, name: "animationDelay", sons: null}, +{kind: 1, offset: "animationDirection", len: 0, typ: NTI33554450, name: "animationDirection", sons: null}, +{kind: 1, offset: "animationDuration", len: 0, typ: NTI33554450, name: "animationDuration", sons: null}, +{kind: 1, offset: "animationFillMode", len: 0, typ: NTI33554450, name: "animationFillMode", sons: null}, +{kind: 1, offset: "animationIterationCount", len: 0, typ: NTI33554450, name: "animationIterationCount", sons: null}, +{kind: 1, offset: "animationName", len: 0, typ: NTI33554450, name: "animationName", sons: null}, +{kind: 1, offset: "animationPlayState", len: 0, typ: NTI33554450, name: "animationPlayState", sons: null}, +{kind: 1, offset: "animationTimingFunction", len: 0, typ: NTI33554450, name: "animationTimingFunction", sons: null}, +{kind: 1, offset: "backdropFilter", len: 0, typ: NTI33554450, name: "backdropFilter", sons: null}, +{kind: 1, offset: "backfaceVisibility", len: 0, typ: NTI33554450, name: "backfaceVisibility", sons: null}, +{kind: 1, offset: "background", len: 0, typ: NTI33554450, name: "background", sons: null}, +{kind: 1, offset: "backgroundAttachment", len: 0, typ: NTI33554450, name: "backgroundAttachment", sons: null}, +{kind: 1, offset: "backgroundBlendMode", len: 0, typ: NTI33554450, name: "backgroundBlendMode", sons: null}, +{kind: 1, offset: "backgroundClip", len: 0, typ: NTI33554450, name: "backgroundClip", sons: null}, +{kind: 1, offset: "backgroundColor", len: 0, typ: NTI33554450, name: "backgroundColor", sons: null}, +{kind: 1, offset: "backgroundImage", len: 0, typ: NTI33554450, name: "backgroundImage", sons: null}, +{kind: 1, offset: "backgroundOrigin", len: 0, typ: NTI33554450, name: "backgroundOrigin", sons: null}, +{kind: 1, offset: "backgroundPosition", len: 0, typ: NTI33554450, name: "backgroundPosition", sons: null}, +{kind: 1, offset: "backgroundRepeat", len: 0, typ: NTI33554450, name: "backgroundRepeat", sons: null}, +{kind: 1, offset: "backgroundSize", len: 0, typ: NTI33554450, name: "backgroundSize", sons: null}, +{kind: 1, offset: "blockSize", len: 0, typ: NTI33554450, name: "blockSize", sons: null}, +{kind: 1, offset: "border", len: 0, typ: NTI33554450, name: "border", sons: null}, +{kind: 1, offset: "borderBlock", len: 0, typ: NTI33554450, name: "borderBlock", sons: null}, +{kind: 1, offset: "borderBlockColor", len: 0, typ: NTI33554450, name: "borderBlockColor", sons: null}, +{kind: 1, offset: "borderBlockEnd", len: 0, typ: NTI33554450, name: "borderBlockEnd", sons: null}, +{kind: 1, offset: "borderBlockEndColor", len: 0, typ: NTI33554450, name: "borderBlockEndColor", sons: null}, +{kind: 1, offset: "borderBlockEndStyle", len: 0, typ: NTI33554450, name: "borderBlockEndStyle", sons: null}, +{kind: 1, offset: "borderBlockEndWidth", len: 0, typ: NTI33554450, name: "borderBlockEndWidth", sons: null}, +{kind: 1, offset: "borderBlockStart", len: 0, typ: NTI33554450, name: "borderBlockStart", sons: null}, +{kind: 1, offset: "borderBlockStartColor", len: 0, typ: NTI33554450, name: "borderBlockStartColor", sons: null}, +{kind: 1, offset: "borderBlockStartStyle", len: 0, typ: NTI33554450, name: "borderBlockStartStyle", sons: null}, +{kind: 1, offset: "borderBlockStartWidth", len: 0, typ: NTI33554450, name: "borderBlockStartWidth", sons: null}, +{kind: 1, offset: "borderBlockStyle", len: 0, typ: NTI33554450, name: "borderBlockStyle", sons: null}, +{kind: 1, offset: "borderBlockWidth", len: 0, typ: NTI33554450, name: "borderBlockWidth", sons: null}, +{kind: 1, offset: "borderBottom", len: 0, typ: NTI33554450, name: "borderBottom", sons: null}, +{kind: 1, offset: "borderBottomColor", len: 0, typ: NTI33554450, name: "borderBottomColor", sons: null}, +{kind: 1, offset: "borderBottomLeftRadius", len: 0, typ: NTI33554450, name: "borderBottomLeftRadius", sons: null}, +{kind: 1, offset: "borderBottomRightRadius", len: 0, typ: NTI33554450, name: "borderBottomRightRadius", sons: null}, +{kind: 1, offset: "borderBottomStyle", len: 0, typ: NTI33554450, name: "borderBottomStyle", sons: null}, +{kind: 1, offset: "borderBottomWidth", len: 0, typ: NTI33554450, name: "borderBottomWidth", sons: null}, +{kind: 1, offset: "borderCollapse", len: 0, typ: NTI33554450, name: "borderCollapse", sons: null}, +{kind: 1, offset: "borderColor", len: 0, typ: NTI33554450, name: "borderColor", sons: null}, +{kind: 1, offset: "borderEndEndRadius", len: 0, typ: NTI33554450, name: "borderEndEndRadius", sons: null}, +{kind: 1, offset: "borderEndStartRadius", len: 0, typ: NTI33554450, name: "borderEndStartRadius", sons: null}, +{kind: 1, offset: "borderImage", len: 0, typ: NTI33554450, name: "borderImage", sons: null}, +{kind: 1, offset: "borderImageOutset", len: 0, typ: NTI33554450, name: "borderImageOutset", sons: null}, +{kind: 1, offset: "borderImageRepeat", len: 0, typ: NTI33554450, name: "borderImageRepeat", sons: null}, +{kind: 1, offset: "borderImageSlice", len: 0, typ: NTI33554450, name: "borderImageSlice", sons: null}, +{kind: 1, offset: "borderImageSource", len: 0, typ: NTI33554450, name: "borderImageSource", sons: null}, +{kind: 1, offset: "borderImageWidth", len: 0, typ: NTI33554450, name: "borderImageWidth", sons: null}, +{kind: 1, offset: "borderInline", len: 0, typ: NTI33554450, name: "borderInline", sons: null}, +{kind: 1, offset: "borderInlineColor", len: 0, typ: NTI33554450, name: "borderInlineColor", sons: null}, +{kind: 1, offset: "borderInlineEnd", len: 0, typ: NTI33554450, name: "borderInlineEnd", sons: null}, +{kind: 1, offset: "borderInlineEndColor", len: 0, typ: NTI33554450, name: "borderInlineEndColor", sons: null}, +{kind: 1, offset: "borderInlineEndStyle", len: 0, typ: NTI33554450, name: "borderInlineEndStyle", sons: null}, +{kind: 1, offset: "borderInlineEndWidth", len: 0, typ: NTI33554450, name: "borderInlineEndWidth", sons: null}, +{kind: 1, offset: "borderInlineStart", len: 0, typ: NTI33554450, name: "borderInlineStart", sons: null}, +{kind: 1, offset: "borderInlineStartColor", len: 0, typ: NTI33554450, name: "borderInlineStartColor", sons: null}, +{kind: 1, offset: "borderInlineStartStyle", len: 0, typ: NTI33554450, name: "borderInlineStartStyle", sons: null}, +{kind: 1, offset: "borderInlineStartWidth", len: 0, typ: NTI33554450, name: "borderInlineStartWidth", sons: null}, +{kind: 1, offset: "borderInlineStyle", len: 0, typ: NTI33554450, name: "borderInlineStyle", sons: null}, +{kind: 1, offset: "borderInlineWidth", len: 0, typ: NTI33554450, name: "borderInlineWidth", sons: null}, +{kind: 1, offset: "borderLeft", len: 0, typ: NTI33554450, name: "borderLeft", sons: null}, +{kind: 1, offset: "borderLeftColor", len: 0, typ: NTI33554450, name: "borderLeftColor", sons: null}, +{kind: 1, offset: "borderLeftStyle", len: 0, typ: NTI33554450, name: "borderLeftStyle", sons: null}, +{kind: 1, offset: "borderLeftWidth", len: 0, typ: NTI33554450, name: "borderLeftWidth", sons: null}, +{kind: 1, offset: "borderRadius", len: 0, typ: NTI33554450, name: "borderRadius", sons: null}, +{kind: 1, offset: "borderRight", len: 0, typ: NTI33554450, name: "borderRight", sons: null}, +{kind: 1, offset: "borderRightColor", len: 0, typ: NTI33554450, name: "borderRightColor", sons: null}, +{kind: 1, offset: "borderRightStyle", len: 0, typ: NTI33554450, name: "borderRightStyle", sons: null}, +{kind: 1, offset: "borderRightWidth", len: 0, typ: NTI33554450, name: "borderRightWidth", sons: null}, +{kind: 1, offset: "borderSpacing", len: 0, typ: NTI33554450, name: "borderSpacing", sons: null}, +{kind: 1, offset: "borderStartEndRadius", len: 0, typ: NTI33554450, name: "borderStartEndRadius", sons: null}, +{kind: 1, offset: "borderStartStartRadius", len: 0, typ: NTI33554450, name: "borderStartStartRadius", sons: null}, +{kind: 1, offset: "borderStyle", len: 0, typ: NTI33554450, name: "borderStyle", sons: null}, +{kind: 1, offset: "borderTop", len: 0, typ: NTI33554450, name: "borderTop", sons: null}, +{kind: 1, offset: "borderTopColor", len: 0, typ: NTI33554450, name: "borderTopColor", sons: null}, +{kind: 1, offset: "borderTopLeftRadius", len: 0, typ: NTI33554450, name: "borderTopLeftRadius", sons: null}, +{kind: 1, offset: "borderTopRightRadius", len: 0, typ: NTI33554450, name: "borderTopRightRadius", sons: null}, +{kind: 1, offset: "borderTopStyle", len: 0, typ: NTI33554450, name: "borderTopStyle", sons: null}, +{kind: 1, offset: "borderTopWidth", len: 0, typ: NTI33554450, name: "borderTopWidth", sons: null}, +{kind: 1, offset: "borderWidth", len: 0, typ: NTI33554450, name: "borderWidth", sons: null}, +{kind: 1, offset: "bottom", len: 0, typ: NTI33554450, name: "bottom", sons: null}, +{kind: 1, offset: "boxDecorationBreak", len: 0, typ: NTI33554450, name: "boxDecorationBreak", sons: null}, +{kind: 1, offset: "boxShadow", len: 0, typ: NTI33554450, name: "boxShadow", sons: null}, +{kind: 1, offset: "boxSizing", len: 0, typ: NTI33554450, name: "boxSizing", sons: null}, +{kind: 1, offset: "breakAfter", len: 0, typ: NTI33554450, name: "breakAfter", sons: null}, +{kind: 1, offset: "breakBefore", len: 0, typ: NTI33554450, name: "breakBefore", sons: null}, +{kind: 1, offset: "breakInside", len: 0, typ: NTI33554450, name: "breakInside", sons: null}, +{kind: 1, offset: "captionSide", len: 0, typ: NTI33554450, name: "captionSide", sons: null}, +{kind: 1, offset: "caretColor", len: 0, typ: NTI33554450, name: "caretColor", sons: null}, +{kind: 1, offset: "clear", len: 0, typ: NTI33554450, name: "clear", sons: null}, +{kind: 1, offset: "clip", len: 0, typ: NTI33554450, name: "clip", sons: null}, +{kind: 1, offset: "clipPath", len: 0, typ: NTI33554450, name: "clipPath", sons: null}, +{kind: 1, offset: "color", len: 0, typ: NTI33554450, name: "color", sons: null}, +{kind: 1, offset: "colorAdjust", len: 0, typ: NTI33554450, name: "colorAdjust", sons: null}, +{kind: 1, offset: "columnCount", len: 0, typ: NTI33554450, name: "columnCount", sons: null}, +{kind: 1, offset: "columnFill", len: 0, typ: NTI33554450, name: "columnFill", sons: null}, +{kind: 1, offset: "columnGap", len: 0, typ: NTI33554450, name: "columnGap", sons: null}, +{kind: 1, offset: "columnRule", len: 0, typ: NTI33554450, name: "columnRule", sons: null}, +{kind: 1, offset: "columnRuleColor", len: 0, typ: NTI33554450, name: "columnRuleColor", sons: null}, +{kind: 1, offset: "columnRuleStyle", len: 0, typ: NTI33554450, name: "columnRuleStyle", sons: null}, +{kind: 1, offset: "columnRuleWidth", len: 0, typ: NTI33554450, name: "columnRuleWidth", sons: null}, +{kind: 1, offset: "columnSpan", len: 0, typ: NTI33554450, name: "columnSpan", sons: null}, +{kind: 1, offset: "columnWidth", len: 0, typ: NTI33554450, name: "columnWidth", sons: null}, +{kind: 1, offset: "columns", len: 0, typ: NTI33554450, name: "columns", sons: null}, +{kind: 1, offset: "contain", len: 0, typ: NTI33554450, name: "contain", sons: null}, +{kind: 1, offset: "content", len: 0, typ: NTI33554450, name: "content", sons: null}, +{kind: 1, offset: "counterIncrement", len: 0, typ: NTI33554450, name: "counterIncrement", sons: null}, +{kind: 1, offset: "counterReset", len: 0, typ: NTI33554450, name: "counterReset", sons: null}, +{kind: 1, offset: "counterSet", len: 0, typ: NTI33554450, name: "counterSet", sons: null}, +{kind: 1, offset: "cursor", len: 0, typ: NTI33554450, name: "cursor", sons: null}, +{kind: 1, offset: "direction", len: 0, typ: NTI33554450, name: "direction", sons: null}, +{kind: 1, offset: "display", len: 0, typ: NTI33554450, name: "display", sons: null}, +{kind: 1, offset: "emptyCells", len: 0, typ: NTI33554450, name: "emptyCells", sons: null}, +{kind: 1, offset: "filter", len: 0, typ: NTI33554450, name: "filter", sons: null}, +{kind: 1, offset: "flex", len: 0, typ: NTI33554450, name: "flex", sons: null}, +{kind: 1, offset: "flexBasis", len: 0, typ: NTI33554450, name: "flexBasis", sons: null}, +{kind: 1, offset: "flexDirection", len: 0, typ: NTI33554450, name: "flexDirection", sons: null}, +{kind: 1, offset: "flexFlow", len: 0, typ: NTI33554450, name: "flexFlow", sons: null}, +{kind: 1, offset: "flexGrow", len: 0, typ: NTI33554450, name: "flexGrow", sons: null}, +{kind: 1, offset: "flexShrink", len: 0, typ: NTI33554450, name: "flexShrink", sons: null}, +{kind: 1, offset: "flexWrap", len: 0, typ: NTI33554450, name: "flexWrap", sons: null}, +{kind: 1, offset: "cssFloat", len: 0, typ: NTI33554450, name: "cssFloat", sons: null}, +{kind: 1, offset: "font", len: 0, typ: NTI33554450, name: "font", sons: null}, +{kind: 1, offset: "fontFamily", len: 0, typ: NTI33554450, name: "fontFamily", sons: null}, +{kind: 1, offset: "fontFeatureSettings", len: 0, typ: NTI33554450, name: "fontFeatureSettings", sons: null}, +{kind: 1, offset: "fontKerning", len: 0, typ: NTI33554450, name: "fontKerning", sons: null}, +{kind: 1, offset: "fontLanguageOverride", len: 0, typ: NTI33554450, name: "fontLanguageOverride", sons: null}, +{kind: 1, offset: "fontOpticalSizing", len: 0, typ: NTI33554450, name: "fontOpticalSizing", sons: null}, +{kind: 1, offset: "fontSize", len: 0, typ: NTI33554450, name: "fontSize", sons: null}, +{kind: 1, offset: "fontSizeAdjust", len: 0, typ: NTI33554450, name: "fontSizeAdjust", sons: null}, +{kind: 1, offset: "fontStretch", len: 0, typ: NTI33554450, name: "fontStretch", sons: null}, +{kind: 1, offset: "fontStyle", len: 0, typ: NTI33554450, name: "fontStyle", sons: null}, +{kind: 1, offset: "fontSynthesis", len: 0, typ: NTI33554450, name: "fontSynthesis", sons: null}, +{kind: 1, offset: "fontVariant", len: 0, typ: NTI33554450, name: "fontVariant", sons: null}, +{kind: 1, offset: "fontVariantAlternates", len: 0, typ: NTI33554450, name: "fontVariantAlternates", sons: null}, +{kind: 1, offset: "fontVariantCaps", len: 0, typ: NTI33554450, name: "fontVariantCaps", sons: null}, +{kind: 1, offset: "fontVariantEastAsian", len: 0, typ: NTI33554450, name: "fontVariantEastAsian", sons: null}, +{kind: 1, offset: "fontVariantLigatures", len: 0, typ: NTI33554450, name: "fontVariantLigatures", sons: null}, +{kind: 1, offset: "fontVariantNumeric", len: 0, typ: NTI33554450, name: "fontVariantNumeric", sons: null}, +{kind: 1, offset: "fontVariantPosition", len: 0, typ: NTI33554450, name: "fontVariantPosition", sons: null}, +{kind: 1, offset: "fontVariationSettings", len: 0, typ: NTI33554450, name: "fontVariationSettings", sons: null}, +{kind: 1, offset: "fontWeight", len: 0, typ: NTI33554450, name: "fontWeight", sons: null}, +{kind: 1, offset: "gap", len: 0, typ: NTI33554450, name: "gap", sons: null}, +{kind: 1, offset: "grid", len: 0, typ: NTI33554450, name: "grid", sons: null}, +{kind: 1, offset: "gridArea", len: 0, typ: NTI33554450, name: "gridArea", sons: null}, +{kind: 1, offset: "gridAutoColumns", len: 0, typ: NTI33554450, name: "gridAutoColumns", sons: null}, +{kind: 1, offset: "gridAutoFlow", len: 0, typ: NTI33554450, name: "gridAutoFlow", sons: null}, +{kind: 1, offset: "gridAutoRows", len: 0, typ: NTI33554450, name: "gridAutoRows", sons: null}, +{kind: 1, offset: "gridColumn", len: 0, typ: NTI33554450, name: "gridColumn", sons: null}, +{kind: 1, offset: "gridColumnEnd", len: 0, typ: NTI33554450, name: "gridColumnEnd", sons: null}, +{kind: 1, offset: "gridColumnStart", len: 0, typ: NTI33554450, name: "gridColumnStart", sons: null}, +{kind: 1, offset: "gridRow", len: 0, typ: NTI33554450, name: "gridRow", sons: null}, +{kind: 1, offset: "gridRowEnd", len: 0, typ: NTI33554450, name: "gridRowEnd", sons: null}, +{kind: 1, offset: "gridRowStart", len: 0, typ: NTI33554450, name: "gridRowStart", sons: null}, +{kind: 1, offset: "gridTemplate", len: 0, typ: NTI33554450, name: "gridTemplate", sons: null}, +{kind: 1, offset: "gridTemplateAreas", len: 0, typ: NTI33554450, name: "gridTemplateAreas", sons: null}, +{kind: 1, offset: "gridTemplateColumns", len: 0, typ: NTI33554450, name: "gridTemplateColumns", sons: null}, +{kind: 1, offset: "gridTemplateRows", len: 0, typ: NTI33554450, name: "gridTemplateRows", sons: null}, +{kind: 1, offset: "hangingPunctuation", len: 0, typ: NTI33554450, name: "hangingPunctuation", sons: null}, +{kind: 1, offset: "height", len: 0, typ: NTI33554450, name: "height", sons: null}, +{kind: 1, offset: "hyphens", len: 0, typ: NTI33554450, name: "hyphens", sons: null}, +{kind: 1, offset: "imageOrientation", len: 0, typ: NTI33554450, name: "imageOrientation", sons: null}, +{kind: 1, offset: "imageRendering", len: 0, typ: NTI33554450, name: "imageRendering", sons: null}, +{kind: 1, offset: "inlineSize", len: 0, typ: NTI33554450, name: "inlineSize", sons: null}, +{kind: 1, offset: "inset", len: 0, typ: NTI33554450, name: "inset", sons: null}, +{kind: 1, offset: "insetBlock", len: 0, typ: NTI33554450, name: "insetBlock", sons: null}, +{kind: 1, offset: "insetBlockEnd", len: 0, typ: NTI33554450, name: "insetBlockEnd", sons: null}, +{kind: 1, offset: "insetBlockStart", len: 0, typ: NTI33554450, name: "insetBlockStart", sons: null}, +{kind: 1, offset: "insetInline", len: 0, typ: NTI33554450, name: "insetInline", sons: null}, +{kind: 1, offset: "insetInlineEnd", len: 0, typ: NTI33554450, name: "insetInlineEnd", sons: null}, +{kind: 1, offset: "insetInlineStart", len: 0, typ: NTI33554450, name: "insetInlineStart", sons: null}, +{kind: 1, offset: "isolation", len: 0, typ: NTI33554450, name: "isolation", sons: null}, +{kind: 1, offset: "justifyContent", len: 0, typ: NTI33554450, name: "justifyContent", sons: null}, +{kind: 1, offset: "justifyItems", len: 0, typ: NTI33554450, name: "justifyItems", sons: null}, +{kind: 1, offset: "justifySelf", len: 0, typ: NTI33554450, name: "justifySelf", sons: null}, +{kind: 1, offset: "left", len: 0, typ: NTI33554450, name: "left", sons: null}, +{kind: 1, offset: "letterSpacing", len: 0, typ: NTI33554450, name: "letterSpacing", sons: null}, +{kind: 1, offset: "lineBreak", len: 0, typ: NTI33554450, name: "lineBreak", sons: null}, +{kind: 1, offset: "lineHeight", len: 0, typ: NTI33554450, name: "lineHeight", sons: null}, +{kind: 1, offset: "listStyle", len: 0, typ: NTI33554450, name: "listStyle", sons: null}, +{kind: 1, offset: "listStyleImage", len: 0, typ: NTI33554450, name: "listStyleImage", sons: null}, +{kind: 1, offset: "listStylePosition", len: 0, typ: NTI33554450, name: "listStylePosition", sons: null}, +{kind: 1, offset: "listStyleType", len: 0, typ: NTI33554450, name: "listStyleType", sons: null}, +{kind: 1, offset: "margin", len: 0, typ: NTI33554450, name: "margin", sons: null}, +{kind: 1, offset: "marginBlock", len: 0, typ: NTI33554450, name: "marginBlock", sons: null}, +{kind: 1, offset: "marginBlockEnd", len: 0, typ: NTI33554450, name: "marginBlockEnd", sons: null}, +{kind: 1, offset: "marginBlockStart", len: 0, typ: NTI33554450, name: "marginBlockStart", sons: null}, +{kind: 1, offset: "marginBottom", len: 0, typ: NTI33554450, name: "marginBottom", sons: null}, +{kind: 1, offset: "marginInline", len: 0, typ: NTI33554450, name: "marginInline", sons: null}, +{kind: 1, offset: "marginInlineEnd", len: 0, typ: NTI33554450, name: "marginInlineEnd", sons: null}, +{kind: 1, offset: "marginInlineStart", len: 0, typ: NTI33554450, name: "marginInlineStart", sons: null}, +{kind: 1, offset: "marginLeft", len: 0, typ: NTI33554450, name: "marginLeft", sons: null}, +{kind: 1, offset: "marginRight", len: 0, typ: NTI33554450, name: "marginRight", sons: null}, +{kind: 1, offset: "marginTop", len: 0, typ: NTI33554450, name: "marginTop", sons: null}, +{kind: 1, offset: "mask", len: 0, typ: NTI33554450, name: "mask", sons: null}, +{kind: 1, offset: "maskBorder", len: 0, typ: NTI33554450, name: "maskBorder", sons: null}, +{kind: 1, offset: "maskBorderMode", len: 0, typ: NTI33554450, name: "maskBorderMode", sons: null}, +{kind: 1, offset: "maskBorderOutset", len: 0, typ: NTI33554450, name: "maskBorderOutset", sons: null}, +{kind: 1, offset: "maskBorderRepeat", len: 0, typ: NTI33554450, name: "maskBorderRepeat", sons: null}, +{kind: 1, offset: "maskBorderSlice", len: 0, typ: NTI33554450, name: "maskBorderSlice", sons: null}, +{kind: 1, offset: "maskBorderSource", len: 0, typ: NTI33554450, name: "maskBorderSource", sons: null}, +{kind: 1, offset: "maskBorderWidth", len: 0, typ: NTI33554450, name: "maskBorderWidth", sons: null}, +{kind: 1, offset: "maskClip", len: 0, typ: NTI33554450, name: "maskClip", sons: null}, +{kind: 1, offset: "maskComposite", len: 0, typ: NTI33554450, name: "maskComposite", sons: null}, +{kind: 1, offset: "maskImage", len: 0, typ: NTI33554450, name: "maskImage", sons: null}, +{kind: 1, offset: "maskMode", len: 0, typ: NTI33554450, name: "maskMode", sons: null}, +{kind: 1, offset: "maskOrigin", len: 0, typ: NTI33554450, name: "maskOrigin", sons: null}, +{kind: 1, offset: "maskPosition", len: 0, typ: NTI33554450, name: "maskPosition", sons: null}, +{kind: 1, offset: "maskRepeat", len: 0, typ: NTI33554450, name: "maskRepeat", sons: null}, +{kind: 1, offset: "maskSize", len: 0, typ: NTI33554450, name: "maskSize", sons: null}, +{kind: 1, offset: "maskType", len: 0, typ: NTI33554450, name: "maskType", sons: null}, +{kind: 1, offset: "maxBlockSize", len: 0, typ: NTI33554450, name: "maxBlockSize", sons: null}, +{kind: 1, offset: "maxHeight", len: 0, typ: NTI33554450, name: "maxHeight", sons: null}, +{kind: 1, offset: "maxInlineSize", len: 0, typ: NTI33554450, name: "maxInlineSize", sons: null}, +{kind: 1, offset: "maxWidth", len: 0, typ: NTI33554450, name: "maxWidth", sons: null}, +{kind: 1, offset: "minBlockSize", len: 0, typ: NTI33554450, name: "minBlockSize", sons: null}, +{kind: 1, offset: "minHeight", len: 0, typ: NTI33554450, name: "minHeight", sons: null}, +{kind: 1, offset: "minInlineSize", len: 0, typ: NTI33554450, name: "minInlineSize", sons: null}, +{kind: 1, offset: "minWidth", len: 0, typ: NTI33554450, name: "minWidth", sons: null}, +{kind: 1, offset: "mixBlendMode", len: 0, typ: NTI33554450, name: "mixBlendMode", sons: null}, +{kind: 1, offset: "objectFit", len: 0, typ: NTI33554450, name: "objectFit", sons: null}, +{kind: 1, offset: "objectPosition", len: 0, typ: NTI33554450, name: "objectPosition", sons: null}, +{kind: 1, offset: "offset", len: 0, typ: NTI33554450, name: "offset", sons: null}, +{kind: 1, offset: "offsetAnchor", len: 0, typ: NTI33554450, name: "offsetAnchor", sons: null}, +{kind: 1, offset: "offsetDistance", len: 0, typ: NTI33554450, name: "offsetDistance", sons: null}, +{kind: 1, offset: "offsetPath", len: 0, typ: NTI33554450, name: "offsetPath", sons: null}, +{kind: 1, offset: "offsetRotate", len: 0, typ: NTI33554450, name: "offsetRotate", sons: null}, +{kind: 1, offset: "opacity", len: 0, typ: NTI33554450, name: "opacity", sons: null}, +{kind: 1, offset: "order", len: 0, typ: NTI33554450, name: "order", sons: null}, +{kind: 1, offset: "orphans", len: 0, typ: NTI33554450, name: "orphans", sons: null}, +{kind: 1, offset: "outline", len: 0, typ: NTI33554450, name: "outline", sons: null}, +{kind: 1, offset: "outlineColor", len: 0, typ: NTI33554450, name: "outlineColor", sons: null}, +{kind: 1, offset: "outlineOffset", len: 0, typ: NTI33554450, name: "outlineOffset", sons: null}, +{kind: 1, offset: "outlineStyle", len: 0, typ: NTI33554450, name: "outlineStyle", sons: null}, +{kind: 1, offset: "outlineWidth", len: 0, typ: NTI33554450, name: "outlineWidth", sons: null}, +{kind: 1, offset: "overflow", len: 0, typ: NTI33554450, name: "overflow", sons: null}, +{kind: 1, offset: "overflowAnchor", len: 0, typ: NTI33554450, name: "overflowAnchor", sons: null}, +{kind: 1, offset: "overflowBlock", len: 0, typ: NTI33554450, name: "overflowBlock", sons: null}, +{kind: 1, offset: "overflowInline", len: 0, typ: NTI33554450, name: "overflowInline", sons: null}, +{kind: 1, offset: "overflowWrap", len: 0, typ: NTI33554450, name: "overflowWrap", sons: null}, +{kind: 1, offset: "overflowX", len: 0, typ: NTI33554450, name: "overflowX", sons: null}, +{kind: 1, offset: "overflowY", len: 0, typ: NTI33554450, name: "overflowY", sons: null}, +{kind: 1, offset: "overscrollBehavior", len: 0, typ: NTI33554450, name: "overscrollBehavior", sons: null}, +{kind: 1, offset: "overscrollBehaviorBlock", len: 0, typ: NTI33554450, name: "overscrollBehaviorBlock", sons: null}, +{kind: 1, offset: "overscrollBehaviorInline", len: 0, typ: NTI33554450, name: "overscrollBehaviorInline", sons: null}, +{kind: 1, offset: "overscrollBehaviorX", len: 0, typ: NTI33554450, name: "overscrollBehaviorX", sons: null}, +{kind: 1, offset: "overscrollBehaviorY", len: 0, typ: NTI33554450, name: "overscrollBehaviorY", sons: null}, +{kind: 1, offset: "padding", len: 0, typ: NTI33554450, name: "padding", sons: null}, +{kind: 1, offset: "paddingBlock", len: 0, typ: NTI33554450, name: "paddingBlock", sons: null}, +{kind: 1, offset: "paddingBlockEnd", len: 0, typ: NTI33554450, name: "paddingBlockEnd", sons: null}, +{kind: 1, offset: "paddingBlockStart", len: 0, typ: NTI33554450, name: "paddingBlockStart", sons: null}, +{kind: 1, offset: "paddingBottom", len: 0, typ: NTI33554450, name: "paddingBottom", sons: null}, +{kind: 1, offset: "paddingInline", len: 0, typ: NTI33554450, name: "paddingInline", sons: null}, +{kind: 1, offset: "paddingInlineEnd", len: 0, typ: NTI33554450, name: "paddingInlineEnd", sons: null}, +{kind: 1, offset: "paddingInlineStart", len: 0, typ: NTI33554450, name: "paddingInlineStart", sons: null}, +{kind: 1, offset: "paddingLeft", len: 0, typ: NTI33554450, name: "paddingLeft", sons: null}, +{kind: 1, offset: "paddingRight", len: 0, typ: NTI33554450, name: "paddingRight", sons: null}, +{kind: 1, offset: "paddingTop", len: 0, typ: NTI33554450, name: "paddingTop", sons: null}, +{kind: 1, offset: "pageBreakAfter", len: 0, typ: NTI33554450, name: "pageBreakAfter", sons: null}, +{kind: 1, offset: "pageBreakBefore", len: 0, typ: NTI33554450, name: "pageBreakBefore", sons: null}, +{kind: 1, offset: "pageBreakInside", len: 0, typ: NTI33554450, name: "pageBreakInside", sons: null}, +{kind: 1, offset: "paintOrder", len: 0, typ: NTI33554450, name: "paintOrder", sons: null}, +{kind: 1, offset: "perspective", len: 0, typ: NTI33554450, name: "perspective", sons: null}, +{kind: 1, offset: "perspectiveOrigin", len: 0, typ: NTI33554450, name: "perspectiveOrigin", sons: null}, +{kind: 1, offset: "placeContent", len: 0, typ: NTI33554450, name: "placeContent", sons: null}, +{kind: 1, offset: "placeItems", len: 0, typ: NTI33554450, name: "placeItems", sons: null}, +{kind: 1, offset: "placeSelf", len: 0, typ: NTI33554450, name: "placeSelf", sons: null}, +{kind: 1, offset: "pointerEvents", len: 0, typ: NTI33554450, name: "pointerEvents", sons: null}, +{kind: 1, offset: "position", len: 0, typ: NTI33554450, name: "position", sons: null}, +{kind: 1, offset: "quotes", len: 0, typ: NTI33554450, name: "quotes", sons: null}, +{kind: 1, offset: "resize", len: 0, typ: NTI33554450, name: "resize", sons: null}, +{kind: 1, offset: "right", len: 0, typ: NTI33554450, name: "right", sons: null}, +{kind: 1, offset: "rotate", len: 0, typ: NTI33554450, name: "rotate", sons: null}, +{kind: 1, offset: "rowGap", len: 0, typ: NTI33554450, name: "rowGap", sons: null}, +{kind: 1, offset: "scale", len: 0, typ: NTI33554450, name: "scale", sons: null}, +{kind: 1, offset: "scrollBehavior", len: 0, typ: NTI33554450, name: "scrollBehavior", sons: null}, +{kind: 1, offset: "scrollMargin", len: 0, typ: NTI33554450, name: "scrollMargin", sons: null}, +{kind: 1, offset: "scrollMarginBlock", len: 0, typ: NTI33554450, name: "scrollMarginBlock", sons: null}, +{kind: 1, offset: "scrollMarginBlockEnd", len: 0, typ: NTI33554450, name: "scrollMarginBlockEnd", sons: null}, +{kind: 1, offset: "scrollMarginBlockStart", len: 0, typ: NTI33554450, name: "scrollMarginBlockStart", sons: null}, +{kind: 1, offset: "scrollMarginBottom", len: 0, typ: NTI33554450, name: "scrollMarginBottom", sons: null}, +{kind: 1, offset: "scrollMarginInline", len: 0, typ: NTI33554450, name: "scrollMarginInline", sons: null}, +{kind: 1, offset: "scrollMarginInlineEnd", len: 0, typ: NTI33554450, name: "scrollMarginInlineEnd", sons: null}, +{kind: 1, offset: "scrollMarginInlineStart", len: 0, typ: NTI33554450, name: "scrollMarginInlineStart", sons: null}, +{kind: 1, offset: "scrollMarginLeft", len: 0, typ: NTI33554450, name: "scrollMarginLeft", sons: null}, +{kind: 1, offset: "scrollMarginRight", len: 0, typ: NTI33554450, name: "scrollMarginRight", sons: null}, +{kind: 1, offset: "scrollMarginTop", len: 0, typ: NTI33554450, name: "scrollMarginTop", sons: null}, +{kind: 1, offset: "scrollPadding", len: 0, typ: NTI33554450, name: "scrollPadding", sons: null}, +{kind: 1, offset: "scrollPaddingBlock", len: 0, typ: NTI33554450, name: "scrollPaddingBlock", sons: null}, +{kind: 1, offset: "scrollPaddingBlockEnd", len: 0, typ: NTI33554450, name: "scrollPaddingBlockEnd", sons: null}, +{kind: 1, offset: "scrollPaddingBlockStart", len: 0, typ: NTI33554450, name: "scrollPaddingBlockStart", sons: null}, +{kind: 1, offset: "scrollPaddingBottom", len: 0, typ: NTI33554450, name: "scrollPaddingBottom", sons: null}, +{kind: 1, offset: "scrollPaddingInline", len: 0, typ: NTI33554450, name: "scrollPaddingInline", sons: null}, +{kind: 1, offset: "scrollPaddingInlineEnd", len: 0, typ: NTI33554450, name: "scrollPaddingInlineEnd", sons: null}, +{kind: 1, offset: "scrollPaddingInlineStart", len: 0, typ: NTI33554450, name: "scrollPaddingInlineStart", sons: null}, +{kind: 1, offset: "scrollPaddingLeft", len: 0, typ: NTI33554450, name: "scrollPaddingLeft", sons: null}, +{kind: 1, offset: "scrollPaddingRight", len: 0, typ: NTI33554450, name: "scrollPaddingRight", sons: null}, +{kind: 1, offset: "scrollPaddingTop", len: 0, typ: NTI33554450, name: "scrollPaddingTop", sons: null}, +{kind: 1, offset: "scrollSnapAlign", len: 0, typ: NTI33554450, name: "scrollSnapAlign", sons: null}, +{kind: 1, offset: "scrollSnapStop", len: 0, typ: NTI33554450, name: "scrollSnapStop", sons: null}, +{kind: 1, offset: "scrollSnapType", len: 0, typ: NTI33554450, name: "scrollSnapType", sons: null}, +{kind: 1, offset: "scrollbar3dLightColor", len: 0, typ: NTI33554450, name: "scrollbar3dLightColor", sons: null}, +{kind: 1, offset: "scrollbarArrowColor", len: 0, typ: NTI33554450, name: "scrollbarArrowColor", sons: null}, +{kind: 1, offset: "scrollbarBaseColor", len: 0, typ: NTI33554450, name: "scrollbarBaseColor", sons: null}, +{kind: 1, offset: "scrollbarColor", len: 0, typ: NTI33554450, name: "scrollbarColor", sons: null}, +{kind: 1, offset: "scrollbarDarkshadowColor", len: 0, typ: NTI33554450, name: "scrollbarDarkshadowColor", sons: null}, +{kind: 1, offset: "scrollbarFaceColor", len: 0, typ: NTI33554450, name: "scrollbarFaceColor", sons: null}, +{kind: 1, offset: "scrollbarHighlightColor", len: 0, typ: NTI33554450, name: "scrollbarHighlightColor", sons: null}, +{kind: 1, offset: "scrollbarShadowColor", len: 0, typ: NTI33554450, name: "scrollbarShadowColor", sons: null}, +{kind: 1, offset: "scrollbarTrackColor", len: 0, typ: NTI33554450, name: "scrollbarTrackColor", sons: null}, +{kind: 1, offset: "scrollbarWidth", len: 0, typ: NTI33554450, name: "scrollbarWidth", sons: null}, +{kind: 1, offset: "shapeImageThreshold", len: 0, typ: NTI33554450, name: "shapeImageThreshold", sons: null}, +{kind: 1, offset: "shapeMargin", len: 0, typ: NTI33554450, name: "shapeMargin", sons: null}, +{kind: 1, offset: "shapeOutside", len: 0, typ: NTI33554450, name: "shapeOutside", sons: null}, +{kind: 1, offset: "tabSize", len: 0, typ: NTI33554450, name: "tabSize", sons: null}, +{kind: 1, offset: "tableLayout", len: 0, typ: NTI33554450, name: "tableLayout", sons: null}, +{kind: 1, offset: "textAlign", len: 0, typ: NTI33554450, name: "textAlign", sons: null}, +{kind: 1, offset: "textAlignLast", len: 0, typ: NTI33554450, name: "textAlignLast", sons: null}, +{kind: 1, offset: "textCombineUpright", len: 0, typ: NTI33554450, name: "textCombineUpright", sons: null}, +{kind: 1, offset: "textDecoration", len: 0, typ: NTI33554450, name: "textDecoration", sons: null}, +{kind: 1, offset: "textDecorationColor", len: 0, typ: NTI33554450, name: "textDecorationColor", sons: null}, +{kind: 1, offset: "textDecorationLine", len: 0, typ: NTI33554450, name: "textDecorationLine", sons: null}, +{kind: 1, offset: "textDecorationSkipInk", len: 0, typ: NTI33554450, name: "textDecorationSkipInk", sons: null}, +{kind: 1, offset: "textDecorationStyle", len: 0, typ: NTI33554450, name: "textDecorationStyle", sons: null}, +{kind: 1, offset: "textDecorationThickness", len: 0, typ: NTI33554450, name: "textDecorationThickness", sons: null}, +{kind: 1, offset: "textEmphasis", len: 0, typ: NTI33554450, name: "textEmphasis", sons: null}, +{kind: 1, offset: "textEmphasisColor", len: 0, typ: NTI33554450, name: "textEmphasisColor", sons: null}, +{kind: 1, offset: "textEmphasisPosition", len: 0, typ: NTI33554450, name: "textEmphasisPosition", sons: null}, +{kind: 1, offset: "textEmphasisStyle", len: 0, typ: NTI33554450, name: "textEmphasisStyle", sons: null}, +{kind: 1, offset: "textIndent", len: 0, typ: NTI33554450, name: "textIndent", sons: null}, +{kind: 1, offset: "textJustify", len: 0, typ: NTI33554450, name: "textJustify", sons: null}, +{kind: 1, offset: "textOrientation", len: 0, typ: NTI33554450, name: "textOrientation", sons: null}, +{kind: 1, offset: "textOverflow", len: 0, typ: NTI33554450, name: "textOverflow", sons: null}, +{kind: 1, offset: "textRendering", len: 0, typ: NTI33554450, name: "textRendering", sons: null}, +{kind: 1, offset: "textShadow", len: 0, typ: NTI33554450, name: "textShadow", sons: null}, +{kind: 1, offset: "textTransform", len: 0, typ: NTI33554450, name: "textTransform", sons: null}, +{kind: 1, offset: "textUnderlineOffset", len: 0, typ: NTI33554450, name: "textUnderlineOffset", sons: null}, +{kind: 1, offset: "textUnderlinePosition", len: 0, typ: NTI33554450, name: "textUnderlinePosition", sons: null}, +{kind: 1, offset: "top", len: 0, typ: NTI33554450, name: "top", sons: null}, +{kind: 1, offset: "touchAction", len: 0, typ: NTI33554450, name: "touchAction", sons: null}, +{kind: 1, offset: "transform", len: 0, typ: NTI33554450, name: "transform", sons: null}, +{kind: 1, offset: "transformBox", len: 0, typ: NTI33554450, name: "transformBox", sons: null}, +{kind: 1, offset: "transformOrigin", len: 0, typ: NTI33554450, name: "transformOrigin", sons: null}, +{kind: 1, offset: "transformStyle", len: 0, typ: NTI33554450, name: "transformStyle", sons: null}, +{kind: 1, offset: "transition", len: 0, typ: NTI33554450, name: "transition", sons: null}, +{kind: 1, offset: "transitionDelay", len: 0, typ: NTI33554450, name: "transitionDelay", sons: null}, +{kind: 1, offset: "transitionDuration", len: 0, typ: NTI33554450, name: "transitionDuration", sons: null}, +{kind: 1, offset: "transitionProperty", len: 0, typ: NTI33554450, name: "transitionProperty", sons: null}, +{kind: 1, offset: "transitionTimingFunction", len: 0, typ: NTI33554450, name: "transitionTimingFunction", sons: null}, +{kind: 1, offset: "translate", len: 0, typ: NTI33554450, name: "translate", sons: null}, +{kind: 1, offset: "unicodeBidi", len: 0, typ: NTI33554450, name: "unicodeBidi", sons: null}, +{kind: 1, offset: "verticalAlign", len: 0, typ: NTI33554450, name: "verticalAlign", sons: null}, +{kind: 1, offset: "visibility", len: 0, typ: NTI33554450, name: "visibility", sons: null}, +{kind: 1, offset: "whiteSpace", len: 0, typ: NTI33554450, name: "whiteSpace", sons: null}, +{kind: 1, offset: "widows", len: 0, typ: NTI33554450, name: "widows", sons: null}, +{kind: 1, offset: "width", len: 0, typ: NTI33554450, name: "width", sons: null}, +{kind: 1, offset: "willChange", len: 0, typ: NTI33554450, name: "willChange", sons: null}, +{kind: 1, offset: "wordBreak", len: 0, typ: NTI33554450, name: "wordBreak", sons: null}, +{kind: 1, offset: "wordSpacing", len: 0, typ: NTI33554450, name: "wordSpacing", sons: null}, +{kind: 1, offset: "writingMode", len: 0, typ: NTI33554450, name: "writingMode", sons: null}, +{kind: 1, offset: "zIndex", len: 0, typ: NTI33554450, name: "zIndex", sons: null}]}; +NTI687865998.node = NNI687865998; +NTI687865998.base = NTI33555167; +NTI687865886.base = NTI687865998; +var NNI687865970 = {kind: 2, len: 22, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "attributes", len: 0, typ: NTI687865971, name: "attributes", sons: null}, +{kind: 1, offset: "childNodes", len: 0, typ: NTI687865972, name: "childNodes", sons: null}, +{kind: 1, offset: "children", len: 0, typ: NTI687865973, name: "children", sons: null}, +{kind: 1, offset: "data", len: 0, typ: NTI33554450, name: "data", sons: null}, +{kind: 1, offset: "firstChild", len: 0, typ: NTI687865872, name: "firstChild", sons: null}, +{kind: 1, offset: "lastChild", len: 0, typ: NTI687865872, name: "lastChild", sons: null}, +{kind: 1, offset: "nextSibling", len: 0, typ: NTI687865872, name: "nextSibling", sons: null}, +{kind: 1, offset: "nodeName", len: 0, typ: NTI33554450, name: "nodeName", sons: null}, +{kind: 1, offset: "nodeType", len: 0, typ: NTI687865871, name: "nodeType", sons: null}, +{kind: 1, offset: "nodeValue", len: 0, typ: NTI33554450, name: "nodeValue", sons: null}, +{kind: 1, offset: "parentNode", len: 0, typ: NTI687865872, name: "parentNode", sons: null}, +{kind: 1, offset: "content", len: 0, typ: NTI687865872, name: "content", sons: null}, +{kind: 1, offset: "previousSibling", len: 0, typ: NTI687865872, name: "previousSibling", sons: null}, +{kind: 1, offset: "ownerDocument", len: 0, typ: NTI687865873, name: "ownerDocument", sons: null}, +{kind: 1, offset: "innerHTML", len: 0, typ: NTI33554450, name: "innerHTML", sons: null}, +{kind: 1, offset: "outerHTML", len: 0, typ: NTI33554450, name: "outerHTML", sons: null}, +{kind: 1, offset: "innerText", len: 0, typ: NTI33554450, name: "innerText", sons: null}, +{kind: 1, offset: "textContent", len: 0, typ: NTI33554450, name: "textContent", sons: null}, +{kind: 1, offset: "style", len: 0, typ: NTI687865886, name: "style", sons: null}, +{kind: 1, offset: "baseURI", len: 0, typ: NTI33554450, name: "baseURI", sons: null}, +{kind: 1, offset: "parentElement", len: 0, typ: NTI687865874, name: "parentElement", sons: null}, +{kind: 1, offset: "isConnected", len: 0, typ: NTI33554466, name: "isConnected", sons: null}]}; +NTI687865970.node = NNI687865970; +var NNI687865925 = {kind: 2, len: 24, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "onabort", len: 0, typ: NTI687865926, name: "onabort", sons: null}, +{kind: 1, offset: "onblur", len: 0, typ: NTI687865927, name: "onblur", sons: null}, +{kind: 1, offset: "onchange", len: 0, typ: NTI687865928, name: "onchange", sons: null}, +{kind: 1, offset: "onclick", len: 0, typ: NTI687865929, name: "onclick", sons: null}, +{kind: 1, offset: "ondblclick", len: 0, typ: NTI687865930, name: "ondblclick", sons: null}, +{kind: 1, offset: "onerror", len: 0, typ: NTI687865931, name: "onerror", sons: null}, +{kind: 1, offset: "onfocus", len: 0, typ: NTI687865932, name: "onfocus", sons: null}, +{kind: 1, offset: "onkeydown", len: 0, typ: NTI687865933, name: "onkeydown", sons: null}, +{kind: 1, offset: "onkeypress", len: 0, typ: NTI687865934, name: "onkeypress", sons: null}, +{kind: 1, offset: "onkeyup", len: 0, typ: NTI687865935, name: "onkeyup", sons: null}, +{kind: 1, offset: "onload", len: 0, typ: NTI687865936, name: "onload", sons: null}, +{kind: 1, offset: "onmousedown", len: 0, typ: NTI687865937, name: "onmousedown", sons: null}, +{kind: 1, offset: "onmousemove", len: 0, typ: NTI687865938, name: "onmousemove", sons: null}, +{kind: 1, offset: "onmouseout", len: 0, typ: NTI687865939, name: "onmouseout", sons: null}, +{kind: 1, offset: "onmouseover", len: 0, typ: NTI687865940, name: "onmouseover", sons: null}, +{kind: 1, offset: "onmouseup", len: 0, typ: NTI687865941, name: "onmouseup", sons: null}, +{kind: 1, offset: "onreset", len: 0, typ: NTI687865942, name: "onreset", sons: null}, +{kind: 1, offset: "onselect", len: 0, typ: NTI687865943, name: "onselect", sons: null}, +{kind: 1, offset: "onstorage", len: 0, typ: NTI687865944, name: "onstorage", sons: null}, +{kind: 1, offset: "onsubmit", len: 0, typ: NTI687865945, name: "onsubmit", sons: null}, +{kind: 1, offset: "onunload", len: 0, typ: NTI687865946, name: "onunload", sons: null}, +{kind: 1, offset: "onloadstart", len: 0, typ: NTI687865947, name: "onloadstart", sons: null}, +{kind: 1, offset: "onprogress", len: 0, typ: NTI687865948, name: "onprogress", sons: null}, +{kind: 1, offset: "onloadend", len: 0, typ: NTI687865949, name: "onloadend", sons: null}]}; +NTI687865925.node = NNI687865925; +NTI687865925.base = NTI33555167; +NTI687865970.base = NTI687865925; +NTI687865981.base = NTI687865970; +NTI687865874.base = NTI687865981; +var NNI687865993 = {kind: 2, len: 3, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "text", len: 0, typ: NTI33554450, name: "text", sons: null}, +{kind: 1, offset: "x", len: 0, typ: NTI33554435, name: "x", sons: null}, +{kind: 1, offset: "y", len: 0, typ: NTI33554435, name: "y", sons: null}]}; +NTI687865993.node = NNI687865993; +NTI687865993.base = NTI687865981; +NTI687865882.base = NTI687865993; +NTI687865975.base = NTI687865882; +NTI687865976.base = NTI687865884; +var NNI687865997 = {kind: 2, len: 8, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "border", len: 0, typ: NTI33554435, name: "border", sons: null}, +{kind: 1, offset: "complete", len: 0, typ: NTI33554466, name: "complete", sons: null}, +{kind: 1, offset: "height", len: 0, typ: NTI33554435, name: "height", sons: null}, +{kind: 1, offset: "hspace", len: 0, typ: NTI33554435, name: "hspace", sons: null}, +{kind: 1, offset: "lowsrc", len: 0, typ: NTI33554450, name: "lowsrc", sons: null}, +{kind: 1, offset: "src", len: 0, typ: NTI33554450, name: "src", sons: null}, +{kind: 1, offset: "vspace", len: 0, typ: NTI33554435, name: "vspace", sons: null}, +{kind: 1, offset: "width", len: 0, typ: NTI33554435, name: "width", sons: null}]}; +NTI687865997.node = NNI687865997; +NTI687865997.base = NTI687865981; +NTI687865885.base = NTI687865997; +NTI687865977.base = NTI687865885; +NTI687865978.base = NTI687865874; +var NNI687865992 = {kind: 2, len: 6, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "height", len: 0, typ: NTI33554435, name: "height", sons: null}, +{kind: 1, offset: "hspace", len: 0, typ: NTI33554435, name: "hspace", sons: null}, +{kind: 1, offset: "src", len: 0, typ: NTI33554450, name: "src", sons: null}, +{kind: 1, offset: "width", len: 0, typ: NTI33554435, name: "width", sons: null}, +{kind: 1, offset: "type", len: 0, typ: NTI33554450, name: "type", sons: null}, +{kind: 1, offset: "vspace", len: 0, typ: NTI33554435, name: "vspace", sons: null}]}; +NTI687865992.node = NNI687865992; +NTI687865992.base = NTI687865981; +NTI687865881.base = NTI687865992; +NTI687865979.base = NTI687865881; +var NNI687865991 = {kind: 2, len: 4, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "target", len: 0, typ: NTI33554450, name: "target", sons: null}, +{kind: 1, offset: "text", len: 0, typ: NTI33554450, name: "text", sons: null}, +{kind: 1, offset: "x", len: 0, typ: NTI33554435, name: "x", sons: null}, +{kind: 1, offset: "y", len: 0, typ: NTI33554435, name: "y", sons: null}]}; +NTI687865991.node = NNI687865991; +NTI687865991.base = NTI687865981; +NTI687865880.base = NTI687865991; +NTI687865980.base = NTI687865880; +var NNI687866041 = {kind: 1, offset: "then", len: 0, typ: NTI687866042, name: "then", sons: null}; +NTI687866041.node = NNI687866041; +NTI687865921.base = NTI687866041; +var NNI687866044 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "ready", len: 0, typ: NTI687865921, name: "ready", sons: null}, +{kind: 1, offset: "onloadingdone", len: 0, typ: NTI687866045, name: "onloadingdone", sons: null}]}; +NTI687866044.node = NNI687866044; +NTI687865922.base = NTI687866044; +var NNI687865974 = {kind: 2, len: 25, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "activeElement", len: 0, typ: NTI687865874, name: "activeElement", sons: null}, +{kind: 1, offset: "documentElement", len: 0, typ: NTI687865874, name: "documentElement", sons: null}, +{kind: 1, offset: "alinkColor", len: 0, typ: NTI33554450, name: "alinkColor", sons: null}, +{kind: 1, offset: "bgColor", len: 0, typ: NTI33554450, name: "bgColor", sons: null}, +{kind: 1, offset: "body", len: 0, typ: NTI687865874, name: "body", sons: null}, +{kind: 1, offset: "charset", len: 0, typ: NTI33554450, name: "charset", sons: null}, +{kind: 1, offset: "cookie", len: 0, typ: NTI33554450, name: "cookie", sons: null}, +{kind: 1, offset: "defaultCharset", len: 0, typ: NTI33554450, name: "defaultCharset", sons: null}, +{kind: 1, offset: "fgColor", len: 0, typ: NTI33554450, name: "fgColor", sons: null}, +{kind: 1, offset: "head", len: 0, typ: NTI687865874, name: "head", sons: null}, +{kind: 1, offset: "hidden", len: 0, typ: NTI33554466, name: "hidden", sons: null}, +{kind: 1, offset: "lastModified", len: 0, typ: NTI33554450, name: "lastModified", sons: null}, +{kind: 1, offset: "linkColor", len: 0, typ: NTI33554450, name: "linkColor", sons: null}, +{kind: 1, offset: "referrer", len: 0, typ: NTI33554450, name: "referrer", sons: null}, +{kind: 1, offset: "title", len: 0, typ: NTI33554450, name: "title", sons: null}, +{kind: 1, offset: "URL", len: 0, typ: NTI33554450, name: "URL", sons: null}, +{kind: 1, offset: "visibilityState", len: 0, typ: NTI33554450, name: "visibilityState", sons: null}, +{kind: 1, offset: "vlinkColor", len: 0, typ: NTI33554450, name: "vlinkColor", sons: null}, +{kind: 1, offset: "anchors", len: 0, typ: NTI687865975, name: "anchors", sons: null}, +{kind: 1, offset: "forms", len: 0, typ: NTI687865976, name: "forms", sons: null}, +{kind: 1, offset: "images", len: 0, typ: NTI687865977, name: "images", sons: null}, +{kind: 1, offset: "applets", len: 0, typ: NTI687865978, name: "applets", sons: null}, +{kind: 1, offset: "embeds", len: 0, typ: NTI687865979, name: "embeds", sons: null}, +{kind: 1, offset: "links", len: 0, typ: NTI687865980, name: "links", sons: null}, +{kind: 1, offset: "fonts", len: 0, typ: NTI687865922, name: "fonts", sons: null}]}; +NTI687865974.node = NNI687865974; +NTI687865974.base = NTI687865970; +var NNI654311433 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "Field0", len: 0, typ: NTI33554450, name: "Field0", sons: null}, +{kind: 1, offset: "Field1", len: 0, typ: NTI33554450, name: "Field1", sons: null}]}; +NTI654311433.node = NNI654311433; +var NNI134217743 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217743.node = NNI134217743; +var NNI134217741 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217741.node = NNI134217741; +var NNI33555172 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555172.node = NNI33555172; +NTI33555174.base = NTI33555171; +NTI33555175.base = NTI33555171; +var NNI33555171 = {kind: 2, len: 5, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "parent", len: 0, typ: NTI33555174, name: "parent", sons: null}, +{kind: 1, offset: "name", len: 0, typ: NTI33554450, name: "name", sons: null}, +{kind: 1, offset: "message", len: 0, typ: NTI33554449, name: "msg", sons: null}, +{kind: 1, offset: "trace", len: 0, typ: NTI33554449, name: "trace", sons: null}, +{kind: 1, offset: "up", len: 0, typ: NTI33555175, name: "up", sons: null}]}; +NTI33555171.node = NNI33555171; +NTI33555171.base = NTI33555167; +NTI33555172.base = NTI33555171; +NTI134217741.base = NTI33555172; +NTI134217743.base = NTI134217741; +var NNI33555824 = {kind: 2, len: 3, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "Field0", len: 0, typ: NTI33554450, name: "Field0", sons: null}, +{kind: 1, offset: "Field1", len: 0, typ: NTI33554435, name: "Field1", sons: null}, +{kind: 1, offset: "Field2", len: 0, typ: NTI33554450, name: "Field2", sons: null}]}; +NTI33555824.node = NNI33555824; +var NNI134217751 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217751.node = NNI134217751; +NTI134217751.base = NTI33555172; +var NNI134217749 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217749.node = NNI134217749; +NTI134217749.base = NTI33555172; + +function setConstr() { + var result = {}; + for (var i = 0; i < arguments.length; ++i) { + var x = arguments[i]; + if (typeof(x) == "object") { + for (var j = x[0]; j <= x[1]; ++j) { + result[j] = true; + } + } else { + result[x] = true; + } + } + return result; + + + +} +var ConstSet1 = setConstr(17, 16, 4, 18, 27, 19, 23, 22, 21); + +function nimCopy(dest_33557255, src_33557256, ti_33557257) { + var result_33557266 = null; + + switch (ti_33557257.kind) { + case 21: + case 22: + case 23: + case 5: + if (!(isFatPointer_33557246(ti_33557257))) { + result_33557266 = src_33557256; + } + else { + result_33557266 = [src_33557256[0], src_33557256[1]]; + } + + break; + case 19: + if (dest_33557255 === null || dest_33557255 === undefined) { + dest_33557255 = {}; + } + else { + for (var key in dest_33557255) { delete dest_33557255[key]; } + } + for (var key in src_33557256) { dest_33557255[key] = src_33557256[key]; } + result_33557266 = dest_33557255; + + break; + case 18: + case 17: + if (!((ti_33557257.base == null))) { + result_33557266 = nimCopy(dest_33557255, src_33557256, ti_33557257.base); + } + else { + if ((ti_33557257.kind == 17)) { + result_33557266 = (dest_33557255 === null || dest_33557255 === undefined) ? {m_type: ti_33557257} : dest_33557255; + } + else { + result_33557266 = (dest_33557255 === null || dest_33557255 === undefined) ? {} : dest_33557255; + } + } + nimCopyAux(result_33557266, src_33557256, ti_33557257.node); + break; + case 4: + case 16: + if(ArrayBuffer.isView(src_33557256)) { + if(dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new src_33557256.constructor(src_33557256); + } else { + dest_33557255.set(src_33557256, 0); + } + result_33557266 = dest_33557255; + } else { + if (src_33557256 === null) { + result_33557266 = null; + } + else { + if (dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new Array(src_33557256.length); + } + result_33557266 = dest_33557255; + for (var i = 0; i < src_33557256.length; ++i) { + result_33557266[i] = nimCopy(result_33557266[i], src_33557256[i], ti_33557257.base); + } + } + } + + break; + case 24: + case 27: + if (src_33557256 === null) { + result_33557266 = null; + } + else { + if (dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new Array(src_33557256.length); + } + result_33557266 = dest_33557255; + for (var i = 0; i < src_33557256.length; ++i) { + result_33557266[i] = nimCopy(result_33557266[i], src_33557256[i], ti_33557257.base); + } + } + + break; + case 28: + if (src_33557256 !== null) { + result_33557266 = src_33557256.slice(0); + } + + break; + default: + result_33557266 = src_33557256; + break; + } + + return result_33557266; + +} + +function toJSStr(s_33556891) { + var result_33556892 = null; + + var res_33556933 = newSeq_33556909((s_33556891).length); + var i_33556934 = 0; + var j_33556935 = 0; + Label1: { + Label2: while (true) { + if (!(i_33556934 < (s_33556891).length)) break Label2; + var c_33556936 = s_33556891[i_33556934]; + if ((c_33556936 < 128)) { + res_33556933[j_33556935] = String.fromCharCode(c_33556936); + i_33556934 += 1; + } + else { + var helper_33556948 = newSeq_33556909(0); + Label3: { + Label4: while (true) { + if (!true) break Label4; + var code_33556949 = c_33556936.toString(16); + if ((((code_33556949) == null ? 0 : (code_33556949).length) == 1)) { + helper_33556948.push("%0");; + } + else { + helper_33556948.push("%");; + } + + helper_33556948.push(code_33556949);; + i_33556934 += 1; + if ((((s_33556891).length <= i_33556934) || (s_33556891[i_33556934] < 128))) { + break Label3; + } + + c_33556936 = s_33556891[i_33556934]; + } + }; +++excHandler; + try { + res_33556933[j_33556935] = decodeURIComponent(helper_33556948.join("")); +--excHandler; +} catch (EXCEPTION) { + var prevJSError = lastJSError; + lastJSError = EXCEPTION; + --excHandler; + res_33556933[j_33556935] = helper_33556948.join(""); + lastJSError = prevJSError; + } finally { + } + } + + j_33556935 += 1; + } + }; + if (res_33556933.length < j_33556935) { for (var i = res_33556933.length ; i < j_33556935 ; ++i) res_33556933.push(null); } + else { res_33556933.length = j_33556935; }; + result_33556892 = res_33556933.join(""); + + return result_33556892; + +} + +function rawEcho() { + var buf = ""; + for (var i = 0; i < arguments.length; ++i) { + buf += toJSStr(arguments[i]); + } + console.log(buf); + + + +} + +function cstrToNimstr(c_33556888) { + var ln = c_33556888.length; + var result = new Array(ln); + var r = 0; + for (var i = 0; i < ln; ++i) { + var ch = c_33556888.charCodeAt(i); + + if (ch < 128) { + result[r] = ch; + } + else { + if (ch < 2048) { + result[r] = (ch >> 6) | 192; + } + else { + if (ch < 55296 || ch >= 57344) { + result[r] = (ch >> 12) | 224; + } + else { + ++i; + ch = 65536 + (((ch & 1023) << 10) | (c_33556888.charCodeAt(i) & 1023)); + result[r] = (ch >> 18) | 240; + ++r; + result[r] = ((ch >> 12) & 63) | 128; + } + ++r; + result[r] = ((ch >> 6) & 63) | 128; + } + ++r; + result[r] = (ch & 63) | 128; + } + ++r; + } + return result; + + + +} + +function mnewString(len_33556990) { + var result = new Array(len_33556990); + for (var i = 0; i < len_33556990; i++) {result[i] = 0;} + return result; + + + +} + +function arrayConstr(len_33557301, value_33557302, typ_33557303) { + var result = new Array(len_33557301); + for (var i = 0; i < len_33557301; ++i) result[i] = nimCopy(null, value_33557302, typ_33557303); + return result; + + + +} + +function raiseException(e_33556643, ename_33556644) { + e_33556643.name = ename_33556644; + if ((excHandler == 0)) { + unhandledException(e_33556643); + } + + e_33556643.trace = nimCopy(null, rawWriteStackTrace_33556594(), NTI33554449); + throw e_33556643; + + +} + +function addInt(a_33557037, b_33557038) { + var result = a_33557037 + b_33557038; + checkOverflowInt(result); + return result; + + + +} + +function chckRange(i_33557311, a_33557312, b_33557313) { + var result_33557314 = 0; + + BeforeRet: { + if (((a_33557312 <= i_33557311) && (i_33557311 <= b_33557313))) { + result_33557314 = i_33557311; + break BeforeRet; + } + else { + raiseRangeError(); + } + + }; + + return result_33557314; + +} + +function chckIndx(i_33557306, a_33557307, b_33557308) { + var result_33557309 = 0; + + BeforeRet: { + if (((a_33557307 <= i_33557306) && (i_33557306 <= b_33557308))) { + result_33557309 = i_33557306; + break BeforeRet; + } + else { + raiseIndexError(i_33557306, a_33557307, b_33557308); + } + + }; + + return result_33557309; + +} + +function nimBoolToStr(x_33556431) { + var result_33556432 = []; + + if (x_33556431) { + result_33556432 = nimCopy(null, [116,114,117,101], NTI33554449); + } + else { + result_33556432 = nimCopy(null, [102,97,108,115,101], NTI33554449); + } + + + return result_33556432; + +} +var F = {procname: "module dom", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/js/dom.nim", line: 0}; +framePtr = F; +F.line = 1399; +F.filename = "dom.nim"; +var document_687867265 = [{nodeType: 9, m_type: NTI687865974, activeElement: null, documentElement: null, alinkColor: null, bgColor: null, body: null, charset: null, cookie: null, defaultCharset: null, fgColor: null, head: null, hidden: false, lastModified: null, linkColor: null, referrer: null, title: null, URL: null, visibilityState: null, vlinkColor: null, anchors: [], forms: [], images: [], applets: [], embeds: [], links: [], fonts: null, attributes: [], childNodes: [], children: [], data: null, firstChild: null, lastChild: null, nextSibling: null, nodeName: null, nodeValue: null, parentNode: null, content: null, previousSibling: null, ownerDocument: null, innerHTML: null, outerHTML: null, innerText: null, textContent: null, style: null, baseURI: null, parentElement: null, isConnected: false, onabort: null, onblur: null, onchange: null, onclick: null, ondblclick: null, onerror: null, onfocus: null, onkeydown: null, onkeypress: null, onkeyup: null, onload: null, onmousedown: null, onmousemove: null, onmouseout: null, onmouseover: null, onmouseup: null, onreset: null, onselect: null, onstorage: null, onsubmit: null, onunload: null, onloadstart: null, onprogress: null, onloadend: null}]; +F.line = 1400; +document_687867265[0].ownerDocument = document_687867265[0]; +framePtr = F.prev; +var F = {procname: "module dom", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/js/dom.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsxmlhttprequest", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlhttprequest.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsxmlhttprequest", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlhttprequest.nim", line: 0}; +framePtr = F; +framePtr = F.prev; + +function isFatPointer_33557246(ti_33557247) { + var result_33557248 = false; + + BeforeRet: { + result_33557248 = !((ConstSet1[ti_33557247.base.kind] != undefined)); + break BeforeRet; + }; + + return result_33557248; + +} + +function nimCopyAux(dest_33557259, src_33557260, n_33557261) { + switch (n_33557261.kind) { + case 0: + break; + case 1: + dest_33557259[n_33557261.offset] = nimCopy(dest_33557259[n_33557261.offset], src_33557260[n_33557261.offset], n_33557261.typ); + + break; + case 2: + for (var i = 0; i < n_33557261.sons.length; i++) { + nimCopyAux(dest_33557259, src_33557260, n_33557261.sons[i]); + } + + break; + case 3: + dest_33557259[n_33557261.offset] = nimCopy(dest_33557259[n_33557261.offset], src_33557260[n_33557261.offset], n_33557261.typ); + for (var i = 0; i < n_33557261.sons.length; ++i) { + nimCopyAux(dest_33557259, src_33557260, n_33557261.sons[i][1]); + } + + break; + } + + +} + +function newSeq_33556909(len_33556911) { + var result_33556912 = []; + + var F = {procname: "newSeq.newSeq", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system.nim", line: 0}; + framePtr = F; + F.line = 636; + F.filename = "system.nim"; + result_33556912 = new Array(len_33556911); for (var i = 0 ; i < len_33556911 ; ++i) { result_33556912[i] = null; } framePtr = F.prev; + + return result_33556912; + +} + +function add_33556366(x_33556367, x_33556367_Idx, y_33556368) { + if (x_33556367[x_33556367_Idx] === null) { x_33556367[x_33556367_Idx] = []; } + var off = x_33556367[x_33556367_Idx].length; + x_33556367[x_33556367_Idx].length += y_33556368.length; + for (var i = 0; i < y_33556368.length; ++i) { + x_33556367[x_33556367_Idx][off+i] = y_33556368.charCodeAt(i); + } + + + +} + +function auxWriteStackTrace_33556501(f_33556502) { + var result_33556503 = [[]]; + + var it_33556511 = f_33556502; + var i_33556512 = 0; + var total_33556513 = 0; + var tempFrames_33556514 = arrayConstr(64, {Field0: null, Field1: 0, Field2: null}, NTI33555824); + Label1: { + Label2: while (true) { + if (!(!((it_33556511 == null)) && (i_33556512 <= 63))) break Label2; + tempFrames_33556514[i_33556512].Field0 = it_33556511.procname; + tempFrames_33556514[i_33556512].Field1 = it_33556511.line; + tempFrames_33556514[i_33556512].Field2 = it_33556511.filename; + i_33556512 += 1; + total_33556513 += 1; + it_33556511 = it_33556511.prev; + } + }; + Label3: { + Label4: while (true) { + if (!!((it_33556511 == null))) break Label4; + total_33556513 += 1; + it_33556511 = it_33556511.prev; + } + }; + result_33556503[0] = nimCopy(null, [], NTI33554449); + if (!((total_33556513 == i_33556512))) { + result_33556503[0].push.apply(result_33556503[0], [40]);; + result_33556503[0].push.apply(result_33556503[0], HEX24_369098760((total_33556513 - i_33556512)));; + result_33556503[0].push.apply(result_33556503[0], [32,99,97,108,108,115,32,111,109,105,116,116,101,100,41,32,46,46,46,10]);; + } + + Label5: { + var j_33556544 = 0; + var colontmp__654311527 = 0; + colontmp__654311527 = (i_33556512 - 1); + var res_654311529 = colontmp__654311527; + Label6: { + Label7: while (true) { + if (!(0 <= res_654311529)) break Label7; + j_33556544 = res_654311529; + result_33556503[0].push.apply(result_33556503[0], cstrToNimstr(tempFrames_33556514[j_33556544].Field2));; + if ((0 < tempFrames_33556514[j_33556544].Field1)) { + result_33556503[0].push.apply(result_33556503[0], [40]);; + addInt_301990126(result_33556503, 0, tempFrames_33556514[j_33556544].Field1); + if (false) { + result_33556503[0].push.apply(result_33556503[0], [44,32]);; + addInt_301990126(result_33556503, 0, 0); + } + + result_33556503[0].push.apply(result_33556503[0], [41]);; + } + + result_33556503[0].push.apply(result_33556503[0], [32,97,116,32]);; + add_33556366(result_33556503, 0, tempFrames_33556514[j_33556544].Field0); + result_33556503[0].push.apply(result_33556503[0], [10]);; + res_654311529 -= 1; + } + }; + }; + + return result_33556503[0]; + +} + +function rawWriteStackTrace_33556594() { + var result_33556595 = []; + + if (!((framePtr == null))) { + result_33556595 = nimCopy(null, ([84,114,97,99,101,98,97,99,107,32,40,109,111,115,116,32,114,101,99,101,110,116,32,99,97,108,108,32,108,97,115,116,41,10] || []).concat(auxWriteStackTrace_33556501(framePtr) || []), NTI33554449); + } + else { + result_33556595 = nimCopy(null, [78,111,32,115,116,97,99,107,32,116,114,97,99,101,98,97,99,107,32,97,118,97,105,108,97,98,108,101,10], NTI33554449); + } + + + return result_33556595; + +} + +function unhandledException(e_33556639) { + var buf_33556640 = [[]]; + if (!(((e_33556639.message).length == 0))) { + buf_33556640[0].push.apply(buf_33556640[0], [69,114,114,111,114,58,32,117,110,104,97,110,100,108,101,100,32,101,120,99,101,112,116,105,111,110,58,32]);; + buf_33556640[0].push.apply(buf_33556640[0], e_33556639.message);; + } + else { + buf_33556640[0].push.apply(buf_33556640[0], [69,114,114,111,114,58,32,117,110,104,97,110,100,108,101,100,32,101,120,99,101,112,116,105,111,110]);; + } + + buf_33556640[0].push.apply(buf_33556640[0], [32,91]);; + add_33556366(buf_33556640, 0, e_33556639.name); + buf_33556640[0].push.apply(buf_33556640[0], [93,10]);; + buf_33556640[0].push.apply(buf_33556640[0], rawWriteStackTrace_33556594());; + var cbuf_33556641 = toJSStr(buf_33556640[0]); + framePtr = null; + if (typeof(Error) !== "undefined") { + throw new Error(cbuf_33556641); + } + else { + throw cbuf_33556641; + } + + + +} + +function raiseOverflow() { + raiseException({message: [111,118,101,114,45,32,111,114,32,117,110,100,101,114,102,108,111,119], parent: null, m_type: NTI134217743, name: null, trace: [], up: null}, "OverflowDefect"); + + +} + +function checkOverflowInt(a_33557035) { + if (a_33557035 > 2147483647 || a_33557035 < -2147483648) raiseOverflow(); + + + +} + +function raiseRangeError() { + raiseException({message: [118,97,108,117,101,32,111,117,116,32,111,102,32,114,97,110,103,101], parent: null, m_type: NTI134217751, name: null, trace: [], up: null}, "RangeDefect"); + + +} + +function raiseIndexError(i_33556802, a_33556803, b_33556804) { + var Temporary1; + + if ((b_33556804 < a_33556803)) { + Temporary1 = [105,110,100,101,120,32,111,117,116,32,111,102,32,98,111,117,110,100,115,44,32,116,104,101,32,99,111,110,116,97,105,110,101,114,32,105,115,32,101,109,112,116,121]; + } + else { + Temporary1 = ([105,110,100,101,120,32] || []).concat(HEX24_369098760(i_33556802) || [],[32,110,111,116,32,105,110,32] || [],HEX24_369098760(a_33556803) || [],[32,46,46,32] || [],HEX24_369098760(b_33556804) || []); + } + + raiseException({message: nimCopy(null, Temporary1, NTI33554449), parent: null, m_type: NTI134217749, name: null, trace: [], up: null}, "IndexDefect"); + + +} + +function addChars_301990087(result_301990089, result_301990089_Idx, x_301990090, start_301990091, n_301990092) { + var Temporary1; + + var F = {procname: "addChars.addChars", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/digitsutils.nim", line: 0}; + framePtr = F; + F.line = 44; + F.filename = "digitsutils.nim"; + var old_301990093 = (result_301990089[result_301990089_Idx]).length; + F.line = 45; + if (result_301990089[result_301990089_Idx].length < (Temporary1 = chckRange(addInt(old_301990093, n_301990092), 0, 2147483647), Temporary1)) { for (var i = result_301990089[result_301990089_Idx].length; i < Temporary1; ++i) result_301990089[result_301990089_Idx].push(0); } + else {result_301990089[result_301990089_Idx].length = Temporary1; }; + Label2: { + F.line = 47; + var iHEX60gensym4_301990107 = 0; + F.line = 128; + F.filename = "iterators_1.nim"; + var i_654311522 = 0; + Label3: { + F.line = 129; + Label4: while (true) { + if (!(i_654311522 < n_301990092)) break Label4; + F.line = 50; + F.filename = "digitsutils.nim"; + iHEX60gensym4_301990107 = i_654311522; + F.line = 50; + result_301990089[result_301990089_Idx][chckIndx(addInt(old_301990093, iHEX60gensym4_301990107), 0, (result_301990089[result_301990089_Idx]).length - 1)] = x_301990090.charCodeAt(chckIndx(addInt(start_301990091, iHEX60gensym4_301990107), 0, (x_301990090).length - 1)); + F.line = 131; + F.filename = "iterators_1.nim"; + i_654311522 = addInt(i_654311522, 1); + } + }; + }; + framePtr = F.prev; + + +} + +function addChars_301990083(result_301990085, result_301990085_Idx, x_301990086) { + var F = {procname: "addChars.addChars", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/digitsutils.nim", line: 0}; + framePtr = F; + F.line = 56; + F.filename = "digitsutils.nim"; + addChars_301990087(result_301990085, result_301990085_Idx, x_301990086, 0, ((x_301990086) == null ? 0 : (x_301990086).length)); + framePtr = F.prev; + + +} + +function addInt_301990108(result_301990109, result_301990109_Idx, x_301990110) { + var F = {procname: "digitsutils.addInt", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/digitsutils.nim", line: 0}; + framePtr = F; + F.line = 112; + F.filename = "digitsutils.nim"; + addChars_301990083(result_301990109, result_301990109_Idx, ((x_301990110) + "")); + framePtr = F.prev; + + +} + +function addInt_301990126(result_301990127, result_301990127_Idx, x_301990128) { + var F = {procname: "digitsutils.addInt", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/std/private/digitsutils.nim", line: 0}; + framePtr = F; + F.line = 116; + F.filename = "digitsutils.nim"; + addInt_301990108(result_301990127, result_301990127_Idx, BigInt(x_301990128)); + framePtr = F.prev; + + +} + +function HEX24_369098760(x_369098761) { + var result_369098762 = [[]]; + + var F = {procname: "dollars.$", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system/dollars.nim", line: 0}; + framePtr = F; + F.line = 18; + F.filename = "dollars.nim"; + addInt_301990126(result_369098762, 0, x_369098761); + framePtr = F.prev; + + return result_369098762[0]; + +} +var F = {procname: "module jsxmlhttprequest_examples_1", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jsxmlhttprequest_examples_1.nim", line: 0}; +framePtr = F; +if (false) { +F.line = 39; +F.filename = "jsxmlhttprequest.nim"; +var request_654311428 = new XMLHttpRequest(); +F.line = 39; +request_654311428.open("GET", "http://localhost:8000/", false, null, null); +F.line = 39; +request_654311428.setRequestHeader("mode", "no-cors"); +F.line = 39; +(() => { const rqst = request_654311428; [nimCopy(null, {Field0: "mode", Field1: "no-cors"}, NTI654311433)].forEach((item) => rqst.setRequestHeader(item[0], item[1])) })(); +F.line = 39; +request_654311428.overrideMimeType("text/plain"); +F.line = 39; +request_654311428.send(null); +F.line = 39; +rawEcho(cstrToNimstr(request_654311428.getAllResponseHeaders())); +F.line = 39; +rawEcho([114,101,115,112,111,110,115,101,84,101,120,116,9], cstrToNimstr(request_654311428.responseText)); +F.line = 39; +rawEcho([114,101,115,112,111,110,115,101,85,82,76,9], cstrToNimstr(request_654311428.responseURL)); +F.line = 39; +rawEcho([115,116,97,116,117,115,84,101,120,116,9], cstrToNimstr(request_654311428.statusText)); +F.line = 39; +rawEcho([114,101,115,112,111,110,115,101,88,77,76,9], [116,114,117,101]); +F.line = 39; +rawEcho([115,116,97,116,117,115,9], HEX24_369098760(((request_654311428.status) | 0))); +F.line = 39; +rawEcho([116,105,109,101,111,117,116,9], HEX24_369098760(((request_654311428.timeout) | 0))); +F.line = 39; +rawEcho([119,105,116,104,67,114,101,100,101,110,116,105,97,108,115,9], nimBoolToStr(request_654311428.withCredentials)); +F.line = 39; +rawEcho([114,101,97,100,121,83,116,97,116,101,9], HEX24_369098760(((request_654311428.readyState) | 0))); +F.line = 39; +request_654311428.abort(); +} + +framePtr = F.prev; +var F = {procname: "module jsxmlhttprequest_examples_1", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jsxmlhttprequest_examples_1.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsxmlhttprequest_group0_examples", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jsxmlhttprequest_group0_examples.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsxmlhttprequest_group0_examples", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jsxmlhttprequest_group0_examples.nim", line: 0}; +framePtr = F; +framePtr = F.prev; diff --git a/nimcache/runnableExamples/jsxmlhttprequest_group0_examples.nim b/nimcache/runnableExamples/jsxmlhttprequest_group0_examples.nim new file mode 100644 index 0000000..d91d65f --- /dev/null +++ b/nimcache/runnableExamples/jsxmlhttprequest_group0_examples.nim @@ -0,0 +1,4 @@ +# autogenerated by docgen +# source: /home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlhttprequest.nim +# rdoccmd: +import "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jsxmlhttprequest_examples_1.nim" diff --git a/nimcache/runnableExamples/jsxmlserializer_examples_1.nim b/nimcache/runnableExamples/jsxmlserializer_examples_1.nim new file mode 100644 index 0000000..03bc232 --- /dev/null +++ b/nimcache/runnableExamples/jsxmlserializer_examples_1.nim @@ -0,0 +1,13 @@ +#[ +autogenerated by docgen +loc: /home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlserializer.nim(16, 1) +rdoccmd: +]# +import std/assertions +import "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlserializer.nim" +{.line: ("/home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlserializer.nim", 16, 1).}: + from std/dom import document + if defined(fusionJsXMLSerializerTests): + let cerealizer: XMLSerializer = newXMLSerializer() + echo cerealizer.serializeToString(node = document) + diff --git a/nimcache/runnableExamples/jsxmlserializer_group0_examples.js b/nimcache/runnableExamples/jsxmlserializer_group0_examples.js new file mode 100644 index 0000000..ad416b2 --- /dev/null +++ b/nimcache/runnableExamples/jsxmlserializer_group0_examples.js @@ -0,0 +1,800 @@ +/* Generated by the Nim Compiler v2.1.1 */ +var framePtr = null; +var excHandler = 0; +var lastJSError = null; +var NTI687866045 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687866042 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687866041 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI687865921 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687866044 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI687865922 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865991 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865880 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865980 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865992 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865881 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865979 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865978 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865997 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865885 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865977 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865976 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865993 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865882 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865975 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865949 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865948 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865947 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865946 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865945 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865944 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865943 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865942 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865941 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865940 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865939 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865938 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865937 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865936 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865935 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865934 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865933 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865932 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865931 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865930 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865929 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865928 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865927 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865926 = {size: 0,kind: 25,base: null,node: null,finalizer: null}; +var NTI687865925 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865998 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865886 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865873 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865871 = {size: 0, kind: 14, base: null, node: null, finalizer: null}; +var NTI687865973 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865972 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865872 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865971 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865970 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865983 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865994 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865883 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865982 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI33554435 = {size: 0,kind: 31,base: null,node: null,finalizer: null}; +var NTI687865996 = {size: 0, kind: 24, base: null, node: null, finalizer: null}; +var NTI687865995 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865884 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33554466 = {size: 0,kind: 1,base: null,node: null,finalizer: null}; +var NTI33555167 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865967 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865870 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33554450 = {size: 0,kind: 29,base: null,node: null,finalizer: null}; +var NTI687865981 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI687865874 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI687865974 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NNI687865967 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI687865967.node = NNI687865967; +var NNI33555167 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555167.node = NNI33555167; +NTI687865967.base = NTI33555167; +NTI687865870.base = NTI687865967; +NTI687865996.base = NTI687865874; +var NNI687865995 = {kind: 2, len: 10, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "acceptCharset", len: 0, typ: NTI33554450, name: "acceptCharset", sons: null}, +{kind: 1, offset: "action", len: 0, typ: NTI33554450, name: "action", sons: null}, +{kind: 1, offset: "autocomplete", len: 0, typ: NTI33554450, name: "autocomplete", sons: null}, +{kind: 1, offset: "elements", len: 0, typ: NTI687865996, name: "elements", sons: null}, +{kind: 1, offset: "encoding", len: 0, typ: NTI33554450, name: "encoding", sons: null}, +{kind: 1, offset: "enctype", len: 0, typ: NTI33554450, name: "enctype", sons: null}, +{kind: 1, offset: "length", len: 0, typ: NTI33554435, name: "length", sons: null}, +{kind: 1, offset: "method", len: 0, typ: NTI33554450, name: "method", sons: null}, +{kind: 1, offset: "noValidate", len: 0, typ: NTI33554466, name: "noValidate", sons: null}, +{kind: 1, offset: "target", len: 0, typ: NTI33554450, name: "target", sons: null}]}; +NTI687865995.node = NNI687865995; +NTI687865995.base = NTI687865981; +NTI687865884.base = NTI687865995; +var NNI687865994 = {kind: 2, len: 5, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "defaultSelected", len: 0, typ: NTI33554466, name: "defaultSelected", sons: null}, +{kind: 1, offset: "selected", len: 0, typ: NTI33554466, name: "selected", sons: null}, +{kind: 1, offset: "selectedIndex", len: 0, typ: NTI33554435, name: "selectedIndex", sons: null}, +{kind: 1, offset: "text", len: 0, typ: NTI33554450, name: "text", sons: null}, +{kind: 1, offset: "value", len: 0, typ: NTI33554450, name: "value", sons: null}]}; +NTI687865994.node = NNI687865994; +NTI687865994.base = NTI687865981; +NTI687865883.base = NTI687865994; +NTI687865982.base = NTI687865883; +NTI687865983.base = NTI687865883; +var NNI687865981 = {kind: 2, len: 20, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "className", len: 0, typ: NTI33554450, name: "className", sons: null}, +{kind: 1, offset: "classList", len: 0, typ: NTI687865870, name: "classList", sons: null}, +{kind: 1, offset: "checked", len: 0, typ: NTI33554466, name: "checked", sons: null}, +{kind: 1, offset: "defaultChecked", len: 0, typ: NTI33554466, name: "defaultChecked", sons: null}, +{kind: 1, offset: "defaultValue", len: 0, typ: NTI33554450, name: "defaultValue", sons: null}, +{kind: 1, offset: "disabled", len: 0, typ: NTI33554466, name: "disabled", sons: null}, +{kind: 1, offset: "form", len: 0, typ: NTI687865884, name: "form", sons: null}, +{kind: 1, offset: "name", len: 0, typ: NTI33554450, name: "name", sons: null}, +{kind: 1, offset: "readOnly", len: 0, typ: NTI33554466, name: "readOnly", sons: null}, +{kind: 1, offset: "options", len: 0, typ: NTI687865982, name: "options", sons: null}, +{kind: 1, offset: "selectedOptions", len: 0, typ: NTI687865983, name: "selectedOptions", sons: null}, +{kind: 1, offset: "clientWidth", len: 0, typ: NTI33554435, name: "clientWidth", sons: null}, +{kind: 1, offset: "clientHeight", len: 0, typ: NTI33554435, name: "clientHeight", sons: null}, +{kind: 1, offset: "contentEditable", len: 0, typ: NTI33554450, name: "contentEditable", sons: null}, +{kind: 1, offset: "isContentEditable", len: 0, typ: NTI33554466, name: "isContentEditable", sons: null}, +{kind: 1, offset: "dir", len: 0, typ: NTI33554450, name: "dir", sons: null}, +{kind: 1, offset: "offsetHeight", len: 0, typ: NTI33554435, name: "offsetHeight", sons: null}, +{kind: 1, offset: "offsetWidth", len: 0, typ: NTI33554435, name: "offsetWidth", sons: null}, +{kind: 1, offset: "offsetLeft", len: 0, typ: NTI33554435, name: "offsetLeft", sons: null}, +{kind: 1, offset: "offsetTop", len: 0, typ: NTI33554435, name: "offsetTop", sons: null}]}; +NTI687865981.node = NNI687865981; +NTI687865872.base = NTI687865970; +NTI687865971.base = NTI687865872; +NTI687865972.base = NTI687865872; +NTI687865973.base = NTI687865872; +var NNI687865871 = {kind: 2, offset: 0, typ: null, name: null, len: 12, sons: {"1": {kind: 1, offset: 1, typ: NTI687865871, name: "ElementNode", len: 0, sons: null}, +"2": {kind: 1, offset: 2, typ: NTI687865871, name: "AttributeNode", len: 0, sons: null}, +"3": {kind: 1, offset: 3, typ: NTI687865871, name: "TextNode", len: 0, sons: null}, +"4": {kind: 1, offset: 4, typ: NTI687865871, name: "CDATANode", len: 0, sons: null}, +"5": {kind: 1, offset: 5, typ: NTI687865871, name: "EntityRefNode", len: 0, sons: null}, +"6": {kind: 1, offset: 6, typ: NTI687865871, name: "EntityNode", len: 0, sons: null}, +"7": {kind: 1, offset: 7, typ: NTI687865871, name: "ProcessingInstructionNode", len: 0, sons: null}, +"8": {kind: 1, offset: 8, typ: NTI687865871, name: "CommentNode", len: 0, sons: null}, +"9": {kind: 1, offset: 9, typ: NTI687865871, name: "DocumentNode", len: 0, sons: null}, +"10": {kind: 1, offset: 10, typ: NTI687865871, name: "DocumentTypeNode", len: 0, sons: null}, +"11": {kind: 1, offset: 11, typ: NTI687865871, name: "DocumentFragmentNode", len: 0, sons: null}, +"12": {kind: 1, offset: 12, typ: NTI687865871, name: "NotationNode", len: 0, sons: null}}}; +NTI687865871.node = NNI687865871; +NTI687865873.base = NTI687865974; +var NNI687865998 = {kind: 2, len: 368, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "alignContent", len: 0, typ: NTI33554450, name: "alignContent", sons: null}, +{kind: 1, offset: "alignItems", len: 0, typ: NTI33554450, name: "alignItems", sons: null}, +{kind: 1, offset: "alignSelf", len: 0, typ: NTI33554450, name: "alignSelf", sons: null}, +{kind: 1, offset: "all", len: 0, typ: NTI33554450, name: "all", sons: null}, +{kind: 1, offset: "animation", len: 0, typ: NTI33554450, name: "animation", sons: null}, +{kind: 1, offset: "animationDelay", len: 0, typ: NTI33554450, name: "animationDelay", sons: null}, +{kind: 1, offset: "animationDirection", len: 0, typ: NTI33554450, name: "animationDirection", sons: null}, +{kind: 1, offset: "animationDuration", len: 0, typ: NTI33554450, name: "animationDuration", sons: null}, +{kind: 1, offset: "animationFillMode", len: 0, typ: NTI33554450, name: "animationFillMode", sons: null}, +{kind: 1, offset: "animationIterationCount", len: 0, typ: NTI33554450, name: "animationIterationCount", sons: null}, +{kind: 1, offset: "animationName", len: 0, typ: NTI33554450, name: "animationName", sons: null}, +{kind: 1, offset: "animationPlayState", len: 0, typ: NTI33554450, name: "animationPlayState", sons: null}, +{kind: 1, offset: "animationTimingFunction", len: 0, typ: NTI33554450, name: "animationTimingFunction", sons: null}, +{kind: 1, offset: "backdropFilter", len: 0, typ: NTI33554450, name: "backdropFilter", sons: null}, +{kind: 1, offset: "backfaceVisibility", len: 0, typ: NTI33554450, name: "backfaceVisibility", sons: null}, +{kind: 1, offset: "background", len: 0, typ: NTI33554450, name: "background", sons: null}, +{kind: 1, offset: "backgroundAttachment", len: 0, typ: NTI33554450, name: "backgroundAttachment", sons: null}, +{kind: 1, offset: "backgroundBlendMode", len: 0, typ: NTI33554450, name: "backgroundBlendMode", sons: null}, +{kind: 1, offset: "backgroundClip", len: 0, typ: NTI33554450, name: "backgroundClip", sons: null}, +{kind: 1, offset: "backgroundColor", len: 0, typ: NTI33554450, name: "backgroundColor", sons: null}, +{kind: 1, offset: "backgroundImage", len: 0, typ: NTI33554450, name: "backgroundImage", sons: null}, +{kind: 1, offset: "backgroundOrigin", len: 0, typ: NTI33554450, name: "backgroundOrigin", sons: null}, +{kind: 1, offset: "backgroundPosition", len: 0, typ: NTI33554450, name: "backgroundPosition", sons: null}, +{kind: 1, offset: "backgroundRepeat", len: 0, typ: NTI33554450, name: "backgroundRepeat", sons: null}, +{kind: 1, offset: "backgroundSize", len: 0, typ: NTI33554450, name: "backgroundSize", sons: null}, +{kind: 1, offset: "blockSize", len: 0, typ: NTI33554450, name: "blockSize", sons: null}, +{kind: 1, offset: "border", len: 0, typ: NTI33554450, name: "border", sons: null}, +{kind: 1, offset: "borderBlock", len: 0, typ: NTI33554450, name: "borderBlock", sons: null}, +{kind: 1, offset: "borderBlockColor", len: 0, typ: NTI33554450, name: "borderBlockColor", sons: null}, +{kind: 1, offset: "borderBlockEnd", len: 0, typ: NTI33554450, name: "borderBlockEnd", sons: null}, +{kind: 1, offset: "borderBlockEndColor", len: 0, typ: NTI33554450, name: "borderBlockEndColor", sons: null}, +{kind: 1, offset: "borderBlockEndStyle", len: 0, typ: NTI33554450, name: "borderBlockEndStyle", sons: null}, +{kind: 1, offset: "borderBlockEndWidth", len: 0, typ: NTI33554450, name: "borderBlockEndWidth", sons: null}, +{kind: 1, offset: "borderBlockStart", len: 0, typ: NTI33554450, name: "borderBlockStart", sons: null}, +{kind: 1, offset: "borderBlockStartColor", len: 0, typ: NTI33554450, name: "borderBlockStartColor", sons: null}, +{kind: 1, offset: "borderBlockStartStyle", len: 0, typ: NTI33554450, name: "borderBlockStartStyle", sons: null}, +{kind: 1, offset: "borderBlockStartWidth", len: 0, typ: NTI33554450, name: "borderBlockStartWidth", sons: null}, +{kind: 1, offset: "borderBlockStyle", len: 0, typ: NTI33554450, name: "borderBlockStyle", sons: null}, +{kind: 1, offset: "borderBlockWidth", len: 0, typ: NTI33554450, name: "borderBlockWidth", sons: null}, +{kind: 1, offset: "borderBottom", len: 0, typ: NTI33554450, name: "borderBottom", sons: null}, +{kind: 1, offset: "borderBottomColor", len: 0, typ: NTI33554450, name: "borderBottomColor", sons: null}, +{kind: 1, offset: "borderBottomLeftRadius", len: 0, typ: NTI33554450, name: "borderBottomLeftRadius", sons: null}, +{kind: 1, offset: "borderBottomRightRadius", len: 0, typ: NTI33554450, name: "borderBottomRightRadius", sons: null}, +{kind: 1, offset: "borderBottomStyle", len: 0, typ: NTI33554450, name: "borderBottomStyle", sons: null}, +{kind: 1, offset: "borderBottomWidth", len: 0, typ: NTI33554450, name: "borderBottomWidth", sons: null}, +{kind: 1, offset: "borderCollapse", len: 0, typ: NTI33554450, name: "borderCollapse", sons: null}, +{kind: 1, offset: "borderColor", len: 0, typ: NTI33554450, name: "borderColor", sons: null}, +{kind: 1, offset: "borderEndEndRadius", len: 0, typ: NTI33554450, name: "borderEndEndRadius", sons: null}, +{kind: 1, offset: "borderEndStartRadius", len: 0, typ: NTI33554450, name: "borderEndStartRadius", sons: null}, +{kind: 1, offset: "borderImage", len: 0, typ: NTI33554450, name: "borderImage", sons: null}, +{kind: 1, offset: "borderImageOutset", len: 0, typ: NTI33554450, name: "borderImageOutset", sons: null}, +{kind: 1, offset: "borderImageRepeat", len: 0, typ: NTI33554450, name: "borderImageRepeat", sons: null}, +{kind: 1, offset: "borderImageSlice", len: 0, typ: NTI33554450, name: "borderImageSlice", sons: null}, +{kind: 1, offset: "borderImageSource", len: 0, typ: NTI33554450, name: "borderImageSource", sons: null}, +{kind: 1, offset: "borderImageWidth", len: 0, typ: NTI33554450, name: "borderImageWidth", sons: null}, +{kind: 1, offset: "borderInline", len: 0, typ: NTI33554450, name: "borderInline", sons: null}, +{kind: 1, offset: "borderInlineColor", len: 0, typ: NTI33554450, name: "borderInlineColor", sons: null}, +{kind: 1, offset: "borderInlineEnd", len: 0, typ: NTI33554450, name: "borderInlineEnd", sons: null}, +{kind: 1, offset: "borderInlineEndColor", len: 0, typ: NTI33554450, name: "borderInlineEndColor", sons: null}, +{kind: 1, offset: "borderInlineEndStyle", len: 0, typ: NTI33554450, name: "borderInlineEndStyle", sons: null}, +{kind: 1, offset: "borderInlineEndWidth", len: 0, typ: NTI33554450, name: "borderInlineEndWidth", sons: null}, +{kind: 1, offset: "borderInlineStart", len: 0, typ: NTI33554450, name: "borderInlineStart", sons: null}, +{kind: 1, offset: "borderInlineStartColor", len: 0, typ: NTI33554450, name: "borderInlineStartColor", sons: null}, +{kind: 1, offset: "borderInlineStartStyle", len: 0, typ: NTI33554450, name: "borderInlineStartStyle", sons: null}, +{kind: 1, offset: "borderInlineStartWidth", len: 0, typ: NTI33554450, name: "borderInlineStartWidth", sons: null}, +{kind: 1, offset: "borderInlineStyle", len: 0, typ: NTI33554450, name: "borderInlineStyle", sons: null}, +{kind: 1, offset: "borderInlineWidth", len: 0, typ: NTI33554450, name: "borderInlineWidth", sons: null}, +{kind: 1, offset: "borderLeft", len: 0, typ: NTI33554450, name: "borderLeft", sons: null}, +{kind: 1, offset: "borderLeftColor", len: 0, typ: NTI33554450, name: "borderLeftColor", sons: null}, +{kind: 1, offset: "borderLeftStyle", len: 0, typ: NTI33554450, name: "borderLeftStyle", sons: null}, +{kind: 1, offset: "borderLeftWidth", len: 0, typ: NTI33554450, name: "borderLeftWidth", sons: null}, +{kind: 1, offset: "borderRadius", len: 0, typ: NTI33554450, name: "borderRadius", sons: null}, +{kind: 1, offset: "borderRight", len: 0, typ: NTI33554450, name: "borderRight", sons: null}, +{kind: 1, offset: "borderRightColor", len: 0, typ: NTI33554450, name: "borderRightColor", sons: null}, +{kind: 1, offset: "borderRightStyle", len: 0, typ: NTI33554450, name: "borderRightStyle", sons: null}, +{kind: 1, offset: "borderRightWidth", len: 0, typ: NTI33554450, name: "borderRightWidth", sons: null}, +{kind: 1, offset: "borderSpacing", len: 0, typ: NTI33554450, name: "borderSpacing", sons: null}, +{kind: 1, offset: "borderStartEndRadius", len: 0, typ: NTI33554450, name: "borderStartEndRadius", sons: null}, +{kind: 1, offset: "borderStartStartRadius", len: 0, typ: NTI33554450, name: "borderStartStartRadius", sons: null}, +{kind: 1, offset: "borderStyle", len: 0, typ: NTI33554450, name: "borderStyle", sons: null}, +{kind: 1, offset: "borderTop", len: 0, typ: NTI33554450, name: "borderTop", sons: null}, +{kind: 1, offset: "borderTopColor", len: 0, typ: NTI33554450, name: "borderTopColor", sons: null}, +{kind: 1, offset: "borderTopLeftRadius", len: 0, typ: NTI33554450, name: "borderTopLeftRadius", sons: null}, +{kind: 1, offset: "borderTopRightRadius", len: 0, typ: NTI33554450, name: "borderTopRightRadius", sons: null}, +{kind: 1, offset: "borderTopStyle", len: 0, typ: NTI33554450, name: "borderTopStyle", sons: null}, +{kind: 1, offset: "borderTopWidth", len: 0, typ: NTI33554450, name: "borderTopWidth", sons: null}, +{kind: 1, offset: "borderWidth", len: 0, typ: NTI33554450, name: "borderWidth", sons: null}, +{kind: 1, offset: "bottom", len: 0, typ: NTI33554450, name: "bottom", sons: null}, +{kind: 1, offset: "boxDecorationBreak", len: 0, typ: NTI33554450, name: "boxDecorationBreak", sons: null}, +{kind: 1, offset: "boxShadow", len: 0, typ: NTI33554450, name: "boxShadow", sons: null}, +{kind: 1, offset: "boxSizing", len: 0, typ: NTI33554450, name: "boxSizing", sons: null}, +{kind: 1, offset: "breakAfter", len: 0, typ: NTI33554450, name: "breakAfter", sons: null}, +{kind: 1, offset: "breakBefore", len: 0, typ: NTI33554450, name: "breakBefore", sons: null}, +{kind: 1, offset: "breakInside", len: 0, typ: NTI33554450, name: "breakInside", sons: null}, +{kind: 1, offset: "captionSide", len: 0, typ: NTI33554450, name: "captionSide", sons: null}, +{kind: 1, offset: "caretColor", len: 0, typ: NTI33554450, name: "caretColor", sons: null}, +{kind: 1, offset: "clear", len: 0, typ: NTI33554450, name: "clear", sons: null}, +{kind: 1, offset: "clip", len: 0, typ: NTI33554450, name: "clip", sons: null}, +{kind: 1, offset: "clipPath", len: 0, typ: NTI33554450, name: "clipPath", sons: null}, +{kind: 1, offset: "color", len: 0, typ: NTI33554450, name: "color", sons: null}, +{kind: 1, offset: "colorAdjust", len: 0, typ: NTI33554450, name: "colorAdjust", sons: null}, +{kind: 1, offset: "columnCount", len: 0, typ: NTI33554450, name: "columnCount", sons: null}, +{kind: 1, offset: "columnFill", len: 0, typ: NTI33554450, name: "columnFill", sons: null}, +{kind: 1, offset: "columnGap", len: 0, typ: NTI33554450, name: "columnGap", sons: null}, +{kind: 1, offset: "columnRule", len: 0, typ: NTI33554450, name: "columnRule", sons: null}, +{kind: 1, offset: "columnRuleColor", len: 0, typ: NTI33554450, name: "columnRuleColor", sons: null}, +{kind: 1, offset: "columnRuleStyle", len: 0, typ: NTI33554450, name: "columnRuleStyle", sons: null}, +{kind: 1, offset: "columnRuleWidth", len: 0, typ: NTI33554450, name: "columnRuleWidth", sons: null}, +{kind: 1, offset: "columnSpan", len: 0, typ: NTI33554450, name: "columnSpan", sons: null}, +{kind: 1, offset: "columnWidth", len: 0, typ: NTI33554450, name: "columnWidth", sons: null}, +{kind: 1, offset: "columns", len: 0, typ: NTI33554450, name: "columns", sons: null}, +{kind: 1, offset: "contain", len: 0, typ: NTI33554450, name: "contain", sons: null}, +{kind: 1, offset: "content", len: 0, typ: NTI33554450, name: "content", sons: null}, +{kind: 1, offset: "counterIncrement", len: 0, typ: NTI33554450, name: "counterIncrement", sons: null}, +{kind: 1, offset: "counterReset", len: 0, typ: NTI33554450, name: "counterReset", sons: null}, +{kind: 1, offset: "counterSet", len: 0, typ: NTI33554450, name: "counterSet", sons: null}, +{kind: 1, offset: "cursor", len: 0, typ: NTI33554450, name: "cursor", sons: null}, +{kind: 1, offset: "direction", len: 0, typ: NTI33554450, name: "direction", sons: null}, +{kind: 1, offset: "display", len: 0, typ: NTI33554450, name: "display", sons: null}, +{kind: 1, offset: "emptyCells", len: 0, typ: NTI33554450, name: "emptyCells", sons: null}, +{kind: 1, offset: "filter", len: 0, typ: NTI33554450, name: "filter", sons: null}, +{kind: 1, offset: "flex", len: 0, typ: NTI33554450, name: "flex", sons: null}, +{kind: 1, offset: "flexBasis", len: 0, typ: NTI33554450, name: "flexBasis", sons: null}, +{kind: 1, offset: "flexDirection", len: 0, typ: NTI33554450, name: "flexDirection", sons: null}, +{kind: 1, offset: "flexFlow", len: 0, typ: NTI33554450, name: "flexFlow", sons: null}, +{kind: 1, offset: "flexGrow", len: 0, typ: NTI33554450, name: "flexGrow", sons: null}, +{kind: 1, offset: "flexShrink", len: 0, typ: NTI33554450, name: "flexShrink", sons: null}, +{kind: 1, offset: "flexWrap", len: 0, typ: NTI33554450, name: "flexWrap", sons: null}, +{kind: 1, offset: "cssFloat", len: 0, typ: NTI33554450, name: "cssFloat", sons: null}, +{kind: 1, offset: "font", len: 0, typ: NTI33554450, name: "font", sons: null}, +{kind: 1, offset: "fontFamily", len: 0, typ: NTI33554450, name: "fontFamily", sons: null}, +{kind: 1, offset: "fontFeatureSettings", len: 0, typ: NTI33554450, name: "fontFeatureSettings", sons: null}, +{kind: 1, offset: "fontKerning", len: 0, typ: NTI33554450, name: "fontKerning", sons: null}, +{kind: 1, offset: "fontLanguageOverride", len: 0, typ: NTI33554450, name: "fontLanguageOverride", sons: null}, +{kind: 1, offset: "fontOpticalSizing", len: 0, typ: NTI33554450, name: "fontOpticalSizing", sons: null}, +{kind: 1, offset: "fontSize", len: 0, typ: NTI33554450, name: "fontSize", sons: null}, +{kind: 1, offset: "fontSizeAdjust", len: 0, typ: NTI33554450, name: "fontSizeAdjust", sons: null}, +{kind: 1, offset: "fontStretch", len: 0, typ: NTI33554450, name: "fontStretch", sons: null}, +{kind: 1, offset: "fontStyle", len: 0, typ: NTI33554450, name: "fontStyle", sons: null}, +{kind: 1, offset: "fontSynthesis", len: 0, typ: NTI33554450, name: "fontSynthesis", sons: null}, +{kind: 1, offset: "fontVariant", len: 0, typ: NTI33554450, name: "fontVariant", sons: null}, +{kind: 1, offset: "fontVariantAlternates", len: 0, typ: NTI33554450, name: "fontVariantAlternates", sons: null}, +{kind: 1, offset: "fontVariantCaps", len: 0, typ: NTI33554450, name: "fontVariantCaps", sons: null}, +{kind: 1, offset: "fontVariantEastAsian", len: 0, typ: NTI33554450, name: "fontVariantEastAsian", sons: null}, +{kind: 1, offset: "fontVariantLigatures", len: 0, typ: NTI33554450, name: "fontVariantLigatures", sons: null}, +{kind: 1, offset: "fontVariantNumeric", len: 0, typ: NTI33554450, name: "fontVariantNumeric", sons: null}, +{kind: 1, offset: "fontVariantPosition", len: 0, typ: NTI33554450, name: "fontVariantPosition", sons: null}, +{kind: 1, offset: "fontVariationSettings", len: 0, typ: NTI33554450, name: "fontVariationSettings", sons: null}, +{kind: 1, offset: "fontWeight", len: 0, typ: NTI33554450, name: "fontWeight", sons: null}, +{kind: 1, offset: "gap", len: 0, typ: NTI33554450, name: "gap", sons: null}, +{kind: 1, offset: "grid", len: 0, typ: NTI33554450, name: "grid", sons: null}, +{kind: 1, offset: "gridArea", len: 0, typ: NTI33554450, name: "gridArea", sons: null}, +{kind: 1, offset: "gridAutoColumns", len: 0, typ: NTI33554450, name: "gridAutoColumns", sons: null}, +{kind: 1, offset: "gridAutoFlow", len: 0, typ: NTI33554450, name: "gridAutoFlow", sons: null}, +{kind: 1, offset: "gridAutoRows", len: 0, typ: NTI33554450, name: "gridAutoRows", sons: null}, +{kind: 1, offset: "gridColumn", len: 0, typ: NTI33554450, name: "gridColumn", sons: null}, +{kind: 1, offset: "gridColumnEnd", len: 0, typ: NTI33554450, name: "gridColumnEnd", sons: null}, +{kind: 1, offset: "gridColumnStart", len: 0, typ: NTI33554450, name: "gridColumnStart", sons: null}, +{kind: 1, offset: "gridRow", len: 0, typ: NTI33554450, name: "gridRow", sons: null}, +{kind: 1, offset: "gridRowEnd", len: 0, typ: NTI33554450, name: "gridRowEnd", sons: null}, +{kind: 1, offset: "gridRowStart", len: 0, typ: NTI33554450, name: "gridRowStart", sons: null}, +{kind: 1, offset: "gridTemplate", len: 0, typ: NTI33554450, name: "gridTemplate", sons: null}, +{kind: 1, offset: "gridTemplateAreas", len: 0, typ: NTI33554450, name: "gridTemplateAreas", sons: null}, +{kind: 1, offset: "gridTemplateColumns", len: 0, typ: NTI33554450, name: "gridTemplateColumns", sons: null}, +{kind: 1, offset: "gridTemplateRows", len: 0, typ: NTI33554450, name: "gridTemplateRows", sons: null}, +{kind: 1, offset: "hangingPunctuation", len: 0, typ: NTI33554450, name: "hangingPunctuation", sons: null}, +{kind: 1, offset: "height", len: 0, typ: NTI33554450, name: "height", sons: null}, +{kind: 1, offset: "hyphens", len: 0, typ: NTI33554450, name: "hyphens", sons: null}, +{kind: 1, offset: "imageOrientation", len: 0, typ: NTI33554450, name: "imageOrientation", sons: null}, +{kind: 1, offset: "imageRendering", len: 0, typ: NTI33554450, name: "imageRendering", sons: null}, +{kind: 1, offset: "inlineSize", len: 0, typ: NTI33554450, name: "inlineSize", sons: null}, +{kind: 1, offset: "inset", len: 0, typ: NTI33554450, name: "inset", sons: null}, +{kind: 1, offset: "insetBlock", len: 0, typ: NTI33554450, name: "insetBlock", sons: null}, +{kind: 1, offset: "insetBlockEnd", len: 0, typ: NTI33554450, name: "insetBlockEnd", sons: null}, +{kind: 1, offset: "insetBlockStart", len: 0, typ: NTI33554450, name: "insetBlockStart", sons: null}, +{kind: 1, offset: "insetInline", len: 0, typ: NTI33554450, name: "insetInline", sons: null}, +{kind: 1, offset: "insetInlineEnd", len: 0, typ: NTI33554450, name: "insetInlineEnd", sons: null}, +{kind: 1, offset: "insetInlineStart", len: 0, typ: NTI33554450, name: "insetInlineStart", sons: null}, +{kind: 1, offset: "isolation", len: 0, typ: NTI33554450, name: "isolation", sons: null}, +{kind: 1, offset: "justifyContent", len: 0, typ: NTI33554450, name: "justifyContent", sons: null}, +{kind: 1, offset: "justifyItems", len: 0, typ: NTI33554450, name: "justifyItems", sons: null}, +{kind: 1, offset: "justifySelf", len: 0, typ: NTI33554450, name: "justifySelf", sons: null}, +{kind: 1, offset: "left", len: 0, typ: NTI33554450, name: "left", sons: null}, +{kind: 1, offset: "letterSpacing", len: 0, typ: NTI33554450, name: "letterSpacing", sons: null}, +{kind: 1, offset: "lineBreak", len: 0, typ: NTI33554450, name: "lineBreak", sons: null}, +{kind: 1, offset: "lineHeight", len: 0, typ: NTI33554450, name: "lineHeight", sons: null}, +{kind: 1, offset: "listStyle", len: 0, typ: NTI33554450, name: "listStyle", sons: null}, +{kind: 1, offset: "listStyleImage", len: 0, typ: NTI33554450, name: "listStyleImage", sons: null}, +{kind: 1, offset: "listStylePosition", len: 0, typ: NTI33554450, name: "listStylePosition", sons: null}, +{kind: 1, offset: "listStyleType", len: 0, typ: NTI33554450, name: "listStyleType", sons: null}, +{kind: 1, offset: "margin", len: 0, typ: NTI33554450, name: "margin", sons: null}, +{kind: 1, offset: "marginBlock", len: 0, typ: NTI33554450, name: "marginBlock", sons: null}, +{kind: 1, offset: "marginBlockEnd", len: 0, typ: NTI33554450, name: "marginBlockEnd", sons: null}, +{kind: 1, offset: "marginBlockStart", len: 0, typ: NTI33554450, name: "marginBlockStart", sons: null}, +{kind: 1, offset: "marginBottom", len: 0, typ: NTI33554450, name: "marginBottom", sons: null}, +{kind: 1, offset: "marginInline", len: 0, typ: NTI33554450, name: "marginInline", sons: null}, +{kind: 1, offset: "marginInlineEnd", len: 0, typ: NTI33554450, name: "marginInlineEnd", sons: null}, +{kind: 1, offset: "marginInlineStart", len: 0, typ: NTI33554450, name: "marginInlineStart", sons: null}, +{kind: 1, offset: "marginLeft", len: 0, typ: NTI33554450, name: "marginLeft", sons: null}, +{kind: 1, offset: "marginRight", len: 0, typ: NTI33554450, name: "marginRight", sons: null}, +{kind: 1, offset: "marginTop", len: 0, typ: NTI33554450, name: "marginTop", sons: null}, +{kind: 1, offset: "mask", len: 0, typ: NTI33554450, name: "mask", sons: null}, +{kind: 1, offset: "maskBorder", len: 0, typ: NTI33554450, name: "maskBorder", sons: null}, +{kind: 1, offset: "maskBorderMode", len: 0, typ: NTI33554450, name: "maskBorderMode", sons: null}, +{kind: 1, offset: "maskBorderOutset", len: 0, typ: NTI33554450, name: "maskBorderOutset", sons: null}, +{kind: 1, offset: "maskBorderRepeat", len: 0, typ: NTI33554450, name: "maskBorderRepeat", sons: null}, +{kind: 1, offset: "maskBorderSlice", len: 0, typ: NTI33554450, name: "maskBorderSlice", sons: null}, +{kind: 1, offset: "maskBorderSource", len: 0, typ: NTI33554450, name: "maskBorderSource", sons: null}, +{kind: 1, offset: "maskBorderWidth", len: 0, typ: NTI33554450, name: "maskBorderWidth", sons: null}, +{kind: 1, offset: "maskClip", len: 0, typ: NTI33554450, name: "maskClip", sons: null}, +{kind: 1, offset: "maskComposite", len: 0, typ: NTI33554450, name: "maskComposite", sons: null}, +{kind: 1, offset: "maskImage", len: 0, typ: NTI33554450, name: "maskImage", sons: null}, +{kind: 1, offset: "maskMode", len: 0, typ: NTI33554450, name: "maskMode", sons: null}, +{kind: 1, offset: "maskOrigin", len: 0, typ: NTI33554450, name: "maskOrigin", sons: null}, +{kind: 1, offset: "maskPosition", len: 0, typ: NTI33554450, name: "maskPosition", sons: null}, +{kind: 1, offset: "maskRepeat", len: 0, typ: NTI33554450, name: "maskRepeat", sons: null}, +{kind: 1, offset: "maskSize", len: 0, typ: NTI33554450, name: "maskSize", sons: null}, +{kind: 1, offset: "maskType", len: 0, typ: NTI33554450, name: "maskType", sons: null}, +{kind: 1, offset: "maxBlockSize", len: 0, typ: NTI33554450, name: "maxBlockSize", sons: null}, +{kind: 1, offset: "maxHeight", len: 0, typ: NTI33554450, name: "maxHeight", sons: null}, +{kind: 1, offset: "maxInlineSize", len: 0, typ: NTI33554450, name: "maxInlineSize", sons: null}, +{kind: 1, offset: "maxWidth", len: 0, typ: NTI33554450, name: "maxWidth", sons: null}, +{kind: 1, offset: "minBlockSize", len: 0, typ: NTI33554450, name: "minBlockSize", sons: null}, +{kind: 1, offset: "minHeight", len: 0, typ: NTI33554450, name: "minHeight", sons: null}, +{kind: 1, offset: "minInlineSize", len: 0, typ: NTI33554450, name: "minInlineSize", sons: null}, +{kind: 1, offset: "minWidth", len: 0, typ: NTI33554450, name: "minWidth", sons: null}, +{kind: 1, offset: "mixBlendMode", len: 0, typ: NTI33554450, name: "mixBlendMode", sons: null}, +{kind: 1, offset: "objectFit", len: 0, typ: NTI33554450, name: "objectFit", sons: null}, +{kind: 1, offset: "objectPosition", len: 0, typ: NTI33554450, name: "objectPosition", sons: null}, +{kind: 1, offset: "offset", len: 0, typ: NTI33554450, name: "offset", sons: null}, +{kind: 1, offset: "offsetAnchor", len: 0, typ: NTI33554450, name: "offsetAnchor", sons: null}, +{kind: 1, offset: "offsetDistance", len: 0, typ: NTI33554450, name: "offsetDistance", sons: null}, +{kind: 1, offset: "offsetPath", len: 0, typ: NTI33554450, name: "offsetPath", sons: null}, +{kind: 1, offset: "offsetRotate", len: 0, typ: NTI33554450, name: "offsetRotate", sons: null}, +{kind: 1, offset: "opacity", len: 0, typ: NTI33554450, name: "opacity", sons: null}, +{kind: 1, offset: "order", len: 0, typ: NTI33554450, name: "order", sons: null}, +{kind: 1, offset: "orphans", len: 0, typ: NTI33554450, name: "orphans", sons: null}, +{kind: 1, offset: "outline", len: 0, typ: NTI33554450, name: "outline", sons: null}, +{kind: 1, offset: "outlineColor", len: 0, typ: NTI33554450, name: "outlineColor", sons: null}, +{kind: 1, offset: "outlineOffset", len: 0, typ: NTI33554450, name: "outlineOffset", sons: null}, +{kind: 1, offset: "outlineStyle", len: 0, typ: NTI33554450, name: "outlineStyle", sons: null}, +{kind: 1, offset: "outlineWidth", len: 0, typ: NTI33554450, name: "outlineWidth", sons: null}, +{kind: 1, offset: "overflow", len: 0, typ: NTI33554450, name: "overflow", sons: null}, +{kind: 1, offset: "overflowAnchor", len: 0, typ: NTI33554450, name: "overflowAnchor", sons: null}, +{kind: 1, offset: "overflowBlock", len: 0, typ: NTI33554450, name: "overflowBlock", sons: null}, +{kind: 1, offset: "overflowInline", len: 0, typ: NTI33554450, name: "overflowInline", sons: null}, +{kind: 1, offset: "overflowWrap", len: 0, typ: NTI33554450, name: "overflowWrap", sons: null}, +{kind: 1, offset: "overflowX", len: 0, typ: NTI33554450, name: "overflowX", sons: null}, +{kind: 1, offset: "overflowY", len: 0, typ: NTI33554450, name: "overflowY", sons: null}, +{kind: 1, offset: "overscrollBehavior", len: 0, typ: NTI33554450, name: "overscrollBehavior", sons: null}, +{kind: 1, offset: "overscrollBehaviorBlock", len: 0, typ: NTI33554450, name: "overscrollBehaviorBlock", sons: null}, +{kind: 1, offset: "overscrollBehaviorInline", len: 0, typ: NTI33554450, name: "overscrollBehaviorInline", sons: null}, +{kind: 1, offset: "overscrollBehaviorX", len: 0, typ: NTI33554450, name: "overscrollBehaviorX", sons: null}, +{kind: 1, offset: "overscrollBehaviorY", len: 0, typ: NTI33554450, name: "overscrollBehaviorY", sons: null}, +{kind: 1, offset: "padding", len: 0, typ: NTI33554450, name: "padding", sons: null}, +{kind: 1, offset: "paddingBlock", len: 0, typ: NTI33554450, name: "paddingBlock", sons: null}, +{kind: 1, offset: "paddingBlockEnd", len: 0, typ: NTI33554450, name: "paddingBlockEnd", sons: null}, +{kind: 1, offset: "paddingBlockStart", len: 0, typ: NTI33554450, name: "paddingBlockStart", sons: null}, +{kind: 1, offset: "paddingBottom", len: 0, typ: NTI33554450, name: "paddingBottom", sons: null}, +{kind: 1, offset: "paddingInline", len: 0, typ: NTI33554450, name: "paddingInline", sons: null}, +{kind: 1, offset: "paddingInlineEnd", len: 0, typ: NTI33554450, name: "paddingInlineEnd", sons: null}, +{kind: 1, offset: "paddingInlineStart", len: 0, typ: NTI33554450, name: "paddingInlineStart", sons: null}, +{kind: 1, offset: "paddingLeft", len: 0, typ: NTI33554450, name: "paddingLeft", sons: null}, +{kind: 1, offset: "paddingRight", len: 0, typ: NTI33554450, name: "paddingRight", sons: null}, +{kind: 1, offset: "paddingTop", len: 0, typ: NTI33554450, name: "paddingTop", sons: null}, +{kind: 1, offset: "pageBreakAfter", len: 0, typ: NTI33554450, name: "pageBreakAfter", sons: null}, +{kind: 1, offset: "pageBreakBefore", len: 0, typ: NTI33554450, name: "pageBreakBefore", sons: null}, +{kind: 1, offset: "pageBreakInside", len: 0, typ: NTI33554450, name: "pageBreakInside", sons: null}, +{kind: 1, offset: "paintOrder", len: 0, typ: NTI33554450, name: "paintOrder", sons: null}, +{kind: 1, offset: "perspective", len: 0, typ: NTI33554450, name: "perspective", sons: null}, +{kind: 1, offset: "perspectiveOrigin", len: 0, typ: NTI33554450, name: "perspectiveOrigin", sons: null}, +{kind: 1, offset: "placeContent", len: 0, typ: NTI33554450, name: "placeContent", sons: null}, +{kind: 1, offset: "placeItems", len: 0, typ: NTI33554450, name: "placeItems", sons: null}, +{kind: 1, offset: "placeSelf", len: 0, typ: NTI33554450, name: "placeSelf", sons: null}, +{kind: 1, offset: "pointerEvents", len: 0, typ: NTI33554450, name: "pointerEvents", sons: null}, +{kind: 1, offset: "position", len: 0, typ: NTI33554450, name: "position", sons: null}, +{kind: 1, offset: "quotes", len: 0, typ: NTI33554450, name: "quotes", sons: null}, +{kind: 1, offset: "resize", len: 0, typ: NTI33554450, name: "resize", sons: null}, +{kind: 1, offset: "right", len: 0, typ: NTI33554450, name: "right", sons: null}, +{kind: 1, offset: "rotate", len: 0, typ: NTI33554450, name: "rotate", sons: null}, +{kind: 1, offset: "rowGap", len: 0, typ: NTI33554450, name: "rowGap", sons: null}, +{kind: 1, offset: "scale", len: 0, typ: NTI33554450, name: "scale", sons: null}, +{kind: 1, offset: "scrollBehavior", len: 0, typ: NTI33554450, name: "scrollBehavior", sons: null}, +{kind: 1, offset: "scrollMargin", len: 0, typ: NTI33554450, name: "scrollMargin", sons: null}, +{kind: 1, offset: "scrollMarginBlock", len: 0, typ: NTI33554450, name: "scrollMarginBlock", sons: null}, +{kind: 1, offset: "scrollMarginBlockEnd", len: 0, typ: NTI33554450, name: "scrollMarginBlockEnd", sons: null}, +{kind: 1, offset: "scrollMarginBlockStart", len: 0, typ: NTI33554450, name: "scrollMarginBlockStart", sons: null}, +{kind: 1, offset: "scrollMarginBottom", len: 0, typ: NTI33554450, name: "scrollMarginBottom", sons: null}, +{kind: 1, offset: "scrollMarginInline", len: 0, typ: NTI33554450, name: "scrollMarginInline", sons: null}, +{kind: 1, offset: "scrollMarginInlineEnd", len: 0, typ: NTI33554450, name: "scrollMarginInlineEnd", sons: null}, +{kind: 1, offset: "scrollMarginInlineStart", len: 0, typ: NTI33554450, name: "scrollMarginInlineStart", sons: null}, +{kind: 1, offset: "scrollMarginLeft", len: 0, typ: NTI33554450, name: "scrollMarginLeft", sons: null}, +{kind: 1, offset: "scrollMarginRight", len: 0, typ: NTI33554450, name: "scrollMarginRight", sons: null}, +{kind: 1, offset: "scrollMarginTop", len: 0, typ: NTI33554450, name: "scrollMarginTop", sons: null}, +{kind: 1, offset: "scrollPadding", len: 0, typ: NTI33554450, name: "scrollPadding", sons: null}, +{kind: 1, offset: "scrollPaddingBlock", len: 0, typ: NTI33554450, name: "scrollPaddingBlock", sons: null}, +{kind: 1, offset: "scrollPaddingBlockEnd", len: 0, typ: NTI33554450, name: "scrollPaddingBlockEnd", sons: null}, +{kind: 1, offset: "scrollPaddingBlockStart", len: 0, typ: NTI33554450, name: "scrollPaddingBlockStart", sons: null}, +{kind: 1, offset: "scrollPaddingBottom", len: 0, typ: NTI33554450, name: "scrollPaddingBottom", sons: null}, +{kind: 1, offset: "scrollPaddingInline", len: 0, typ: NTI33554450, name: "scrollPaddingInline", sons: null}, +{kind: 1, offset: "scrollPaddingInlineEnd", len: 0, typ: NTI33554450, name: "scrollPaddingInlineEnd", sons: null}, +{kind: 1, offset: "scrollPaddingInlineStart", len: 0, typ: NTI33554450, name: "scrollPaddingInlineStart", sons: null}, +{kind: 1, offset: "scrollPaddingLeft", len: 0, typ: NTI33554450, name: "scrollPaddingLeft", sons: null}, +{kind: 1, offset: "scrollPaddingRight", len: 0, typ: NTI33554450, name: "scrollPaddingRight", sons: null}, +{kind: 1, offset: "scrollPaddingTop", len: 0, typ: NTI33554450, name: "scrollPaddingTop", sons: null}, +{kind: 1, offset: "scrollSnapAlign", len: 0, typ: NTI33554450, name: "scrollSnapAlign", sons: null}, +{kind: 1, offset: "scrollSnapStop", len: 0, typ: NTI33554450, name: "scrollSnapStop", sons: null}, +{kind: 1, offset: "scrollSnapType", len: 0, typ: NTI33554450, name: "scrollSnapType", sons: null}, +{kind: 1, offset: "scrollbar3dLightColor", len: 0, typ: NTI33554450, name: "scrollbar3dLightColor", sons: null}, +{kind: 1, offset: "scrollbarArrowColor", len: 0, typ: NTI33554450, name: "scrollbarArrowColor", sons: null}, +{kind: 1, offset: "scrollbarBaseColor", len: 0, typ: NTI33554450, name: "scrollbarBaseColor", sons: null}, +{kind: 1, offset: "scrollbarColor", len: 0, typ: NTI33554450, name: "scrollbarColor", sons: null}, +{kind: 1, offset: "scrollbarDarkshadowColor", len: 0, typ: NTI33554450, name: "scrollbarDarkshadowColor", sons: null}, +{kind: 1, offset: "scrollbarFaceColor", len: 0, typ: NTI33554450, name: "scrollbarFaceColor", sons: null}, +{kind: 1, offset: "scrollbarHighlightColor", len: 0, typ: NTI33554450, name: "scrollbarHighlightColor", sons: null}, +{kind: 1, offset: "scrollbarShadowColor", len: 0, typ: NTI33554450, name: "scrollbarShadowColor", sons: null}, +{kind: 1, offset: "scrollbarTrackColor", len: 0, typ: NTI33554450, name: "scrollbarTrackColor", sons: null}, +{kind: 1, offset: "scrollbarWidth", len: 0, typ: NTI33554450, name: "scrollbarWidth", sons: null}, +{kind: 1, offset: "shapeImageThreshold", len: 0, typ: NTI33554450, name: "shapeImageThreshold", sons: null}, +{kind: 1, offset: "shapeMargin", len: 0, typ: NTI33554450, name: "shapeMargin", sons: null}, +{kind: 1, offset: "shapeOutside", len: 0, typ: NTI33554450, name: "shapeOutside", sons: null}, +{kind: 1, offset: "tabSize", len: 0, typ: NTI33554450, name: "tabSize", sons: null}, +{kind: 1, offset: "tableLayout", len: 0, typ: NTI33554450, name: "tableLayout", sons: null}, +{kind: 1, offset: "textAlign", len: 0, typ: NTI33554450, name: "textAlign", sons: null}, +{kind: 1, offset: "textAlignLast", len: 0, typ: NTI33554450, name: "textAlignLast", sons: null}, +{kind: 1, offset: "textCombineUpright", len: 0, typ: NTI33554450, name: "textCombineUpright", sons: null}, +{kind: 1, offset: "textDecoration", len: 0, typ: NTI33554450, name: "textDecoration", sons: null}, +{kind: 1, offset: "textDecorationColor", len: 0, typ: NTI33554450, name: "textDecorationColor", sons: null}, +{kind: 1, offset: "textDecorationLine", len: 0, typ: NTI33554450, name: "textDecorationLine", sons: null}, +{kind: 1, offset: "textDecorationSkipInk", len: 0, typ: NTI33554450, name: "textDecorationSkipInk", sons: null}, +{kind: 1, offset: "textDecorationStyle", len: 0, typ: NTI33554450, name: "textDecorationStyle", sons: null}, +{kind: 1, offset: "textDecorationThickness", len: 0, typ: NTI33554450, name: "textDecorationThickness", sons: null}, +{kind: 1, offset: "textEmphasis", len: 0, typ: NTI33554450, name: "textEmphasis", sons: null}, +{kind: 1, offset: "textEmphasisColor", len: 0, typ: NTI33554450, name: "textEmphasisColor", sons: null}, +{kind: 1, offset: "textEmphasisPosition", len: 0, typ: NTI33554450, name: "textEmphasisPosition", sons: null}, +{kind: 1, offset: "textEmphasisStyle", len: 0, typ: NTI33554450, name: "textEmphasisStyle", sons: null}, +{kind: 1, offset: "textIndent", len: 0, typ: NTI33554450, name: "textIndent", sons: null}, +{kind: 1, offset: "textJustify", len: 0, typ: NTI33554450, name: "textJustify", sons: null}, +{kind: 1, offset: "textOrientation", len: 0, typ: NTI33554450, name: "textOrientation", sons: null}, +{kind: 1, offset: "textOverflow", len: 0, typ: NTI33554450, name: "textOverflow", sons: null}, +{kind: 1, offset: "textRendering", len: 0, typ: NTI33554450, name: "textRendering", sons: null}, +{kind: 1, offset: "textShadow", len: 0, typ: NTI33554450, name: "textShadow", sons: null}, +{kind: 1, offset: "textTransform", len: 0, typ: NTI33554450, name: "textTransform", sons: null}, +{kind: 1, offset: "textUnderlineOffset", len: 0, typ: NTI33554450, name: "textUnderlineOffset", sons: null}, +{kind: 1, offset: "textUnderlinePosition", len: 0, typ: NTI33554450, name: "textUnderlinePosition", sons: null}, +{kind: 1, offset: "top", len: 0, typ: NTI33554450, name: "top", sons: null}, +{kind: 1, offset: "touchAction", len: 0, typ: NTI33554450, name: "touchAction", sons: null}, +{kind: 1, offset: "transform", len: 0, typ: NTI33554450, name: "transform", sons: null}, +{kind: 1, offset: "transformBox", len: 0, typ: NTI33554450, name: "transformBox", sons: null}, +{kind: 1, offset: "transformOrigin", len: 0, typ: NTI33554450, name: "transformOrigin", sons: null}, +{kind: 1, offset: "transformStyle", len: 0, typ: NTI33554450, name: "transformStyle", sons: null}, +{kind: 1, offset: "transition", len: 0, typ: NTI33554450, name: "transition", sons: null}, +{kind: 1, offset: "transitionDelay", len: 0, typ: NTI33554450, name: "transitionDelay", sons: null}, +{kind: 1, offset: "transitionDuration", len: 0, typ: NTI33554450, name: "transitionDuration", sons: null}, +{kind: 1, offset: "transitionProperty", len: 0, typ: NTI33554450, name: "transitionProperty", sons: null}, +{kind: 1, offset: "transitionTimingFunction", len: 0, typ: NTI33554450, name: "transitionTimingFunction", sons: null}, +{kind: 1, offset: "translate", len: 0, typ: NTI33554450, name: "translate", sons: null}, +{kind: 1, offset: "unicodeBidi", len: 0, typ: NTI33554450, name: "unicodeBidi", sons: null}, +{kind: 1, offset: "verticalAlign", len: 0, typ: NTI33554450, name: "verticalAlign", sons: null}, +{kind: 1, offset: "visibility", len: 0, typ: NTI33554450, name: "visibility", sons: null}, +{kind: 1, offset: "whiteSpace", len: 0, typ: NTI33554450, name: "whiteSpace", sons: null}, +{kind: 1, offset: "widows", len: 0, typ: NTI33554450, name: "widows", sons: null}, +{kind: 1, offset: "width", len: 0, typ: NTI33554450, name: "width", sons: null}, +{kind: 1, offset: "willChange", len: 0, typ: NTI33554450, name: "willChange", sons: null}, +{kind: 1, offset: "wordBreak", len: 0, typ: NTI33554450, name: "wordBreak", sons: null}, +{kind: 1, offset: "wordSpacing", len: 0, typ: NTI33554450, name: "wordSpacing", sons: null}, +{kind: 1, offset: "writingMode", len: 0, typ: NTI33554450, name: "writingMode", sons: null}, +{kind: 1, offset: "zIndex", len: 0, typ: NTI33554450, name: "zIndex", sons: null}]}; +NTI687865998.node = NNI687865998; +NTI687865998.base = NTI33555167; +NTI687865886.base = NTI687865998; +var NNI687865970 = {kind: 2, len: 22, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "attributes", len: 0, typ: NTI687865971, name: "attributes", sons: null}, +{kind: 1, offset: "childNodes", len: 0, typ: NTI687865972, name: "childNodes", sons: null}, +{kind: 1, offset: "children", len: 0, typ: NTI687865973, name: "children", sons: null}, +{kind: 1, offset: "data", len: 0, typ: NTI33554450, name: "data", sons: null}, +{kind: 1, offset: "firstChild", len: 0, typ: NTI687865872, name: "firstChild", sons: null}, +{kind: 1, offset: "lastChild", len: 0, typ: NTI687865872, name: "lastChild", sons: null}, +{kind: 1, offset: "nextSibling", len: 0, typ: NTI687865872, name: "nextSibling", sons: null}, +{kind: 1, offset: "nodeName", len: 0, typ: NTI33554450, name: "nodeName", sons: null}, +{kind: 1, offset: "nodeType", len: 0, typ: NTI687865871, name: "nodeType", sons: null}, +{kind: 1, offset: "nodeValue", len: 0, typ: NTI33554450, name: "nodeValue", sons: null}, +{kind: 1, offset: "parentNode", len: 0, typ: NTI687865872, name: "parentNode", sons: null}, +{kind: 1, offset: "content", len: 0, typ: NTI687865872, name: "content", sons: null}, +{kind: 1, offset: "previousSibling", len: 0, typ: NTI687865872, name: "previousSibling", sons: null}, +{kind: 1, offset: "ownerDocument", len: 0, typ: NTI687865873, name: "ownerDocument", sons: null}, +{kind: 1, offset: "innerHTML", len: 0, typ: NTI33554450, name: "innerHTML", sons: null}, +{kind: 1, offset: "outerHTML", len: 0, typ: NTI33554450, name: "outerHTML", sons: null}, +{kind: 1, offset: "innerText", len: 0, typ: NTI33554450, name: "innerText", sons: null}, +{kind: 1, offset: "textContent", len: 0, typ: NTI33554450, name: "textContent", sons: null}, +{kind: 1, offset: "style", len: 0, typ: NTI687865886, name: "style", sons: null}, +{kind: 1, offset: "baseURI", len: 0, typ: NTI33554450, name: "baseURI", sons: null}, +{kind: 1, offset: "parentElement", len: 0, typ: NTI687865874, name: "parentElement", sons: null}, +{kind: 1, offset: "isConnected", len: 0, typ: NTI33554466, name: "isConnected", sons: null}]}; +NTI687865970.node = NNI687865970; +var NNI687865925 = {kind: 2, len: 24, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "onabort", len: 0, typ: NTI687865926, name: "onabort", sons: null}, +{kind: 1, offset: "onblur", len: 0, typ: NTI687865927, name: "onblur", sons: null}, +{kind: 1, offset: "onchange", len: 0, typ: NTI687865928, name: "onchange", sons: null}, +{kind: 1, offset: "onclick", len: 0, typ: NTI687865929, name: "onclick", sons: null}, +{kind: 1, offset: "ondblclick", len: 0, typ: NTI687865930, name: "ondblclick", sons: null}, +{kind: 1, offset: "onerror", len: 0, typ: NTI687865931, name: "onerror", sons: null}, +{kind: 1, offset: "onfocus", len: 0, typ: NTI687865932, name: "onfocus", sons: null}, +{kind: 1, offset: "onkeydown", len: 0, typ: NTI687865933, name: "onkeydown", sons: null}, +{kind: 1, offset: "onkeypress", len: 0, typ: NTI687865934, name: "onkeypress", sons: null}, +{kind: 1, offset: "onkeyup", len: 0, typ: NTI687865935, name: "onkeyup", sons: null}, +{kind: 1, offset: "onload", len: 0, typ: NTI687865936, name: "onload", sons: null}, +{kind: 1, offset: "onmousedown", len: 0, typ: NTI687865937, name: "onmousedown", sons: null}, +{kind: 1, offset: "onmousemove", len: 0, typ: NTI687865938, name: "onmousemove", sons: null}, +{kind: 1, offset: "onmouseout", len: 0, typ: NTI687865939, name: "onmouseout", sons: null}, +{kind: 1, offset: "onmouseover", len: 0, typ: NTI687865940, name: "onmouseover", sons: null}, +{kind: 1, offset: "onmouseup", len: 0, typ: NTI687865941, name: "onmouseup", sons: null}, +{kind: 1, offset: "onreset", len: 0, typ: NTI687865942, name: "onreset", sons: null}, +{kind: 1, offset: "onselect", len: 0, typ: NTI687865943, name: "onselect", sons: null}, +{kind: 1, offset: "onstorage", len: 0, typ: NTI687865944, name: "onstorage", sons: null}, +{kind: 1, offset: "onsubmit", len: 0, typ: NTI687865945, name: "onsubmit", sons: null}, +{kind: 1, offset: "onunload", len: 0, typ: NTI687865946, name: "onunload", sons: null}, +{kind: 1, offset: "onloadstart", len: 0, typ: NTI687865947, name: "onloadstart", sons: null}, +{kind: 1, offset: "onprogress", len: 0, typ: NTI687865948, name: "onprogress", sons: null}, +{kind: 1, offset: "onloadend", len: 0, typ: NTI687865949, name: "onloadend", sons: null}]}; +NTI687865925.node = NNI687865925; +NTI687865925.base = NTI33555167; +NTI687865970.base = NTI687865925; +NTI687865981.base = NTI687865970; +NTI687865874.base = NTI687865981; +var NNI687865993 = {kind: 2, len: 3, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "text", len: 0, typ: NTI33554450, name: "text", sons: null}, +{kind: 1, offset: "x", len: 0, typ: NTI33554435, name: "x", sons: null}, +{kind: 1, offset: "y", len: 0, typ: NTI33554435, name: "y", sons: null}]}; +NTI687865993.node = NNI687865993; +NTI687865993.base = NTI687865981; +NTI687865882.base = NTI687865993; +NTI687865975.base = NTI687865882; +NTI687865976.base = NTI687865884; +var NNI687865997 = {kind: 2, len: 8, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "border", len: 0, typ: NTI33554435, name: "border", sons: null}, +{kind: 1, offset: "complete", len: 0, typ: NTI33554466, name: "complete", sons: null}, +{kind: 1, offset: "height", len: 0, typ: NTI33554435, name: "height", sons: null}, +{kind: 1, offset: "hspace", len: 0, typ: NTI33554435, name: "hspace", sons: null}, +{kind: 1, offset: "lowsrc", len: 0, typ: NTI33554450, name: "lowsrc", sons: null}, +{kind: 1, offset: "src", len: 0, typ: NTI33554450, name: "src", sons: null}, +{kind: 1, offset: "vspace", len: 0, typ: NTI33554435, name: "vspace", sons: null}, +{kind: 1, offset: "width", len: 0, typ: NTI33554435, name: "width", sons: null}]}; +NTI687865997.node = NNI687865997; +NTI687865997.base = NTI687865981; +NTI687865885.base = NTI687865997; +NTI687865977.base = NTI687865885; +NTI687865978.base = NTI687865874; +var NNI687865992 = {kind: 2, len: 6, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "height", len: 0, typ: NTI33554435, name: "height", sons: null}, +{kind: 1, offset: "hspace", len: 0, typ: NTI33554435, name: "hspace", sons: null}, +{kind: 1, offset: "src", len: 0, typ: NTI33554450, name: "src", sons: null}, +{kind: 1, offset: "width", len: 0, typ: NTI33554435, name: "width", sons: null}, +{kind: 1, offset: "type", len: 0, typ: NTI33554450, name: "type", sons: null}, +{kind: 1, offset: "vspace", len: 0, typ: NTI33554435, name: "vspace", sons: null}]}; +NTI687865992.node = NNI687865992; +NTI687865992.base = NTI687865981; +NTI687865881.base = NTI687865992; +NTI687865979.base = NTI687865881; +var NNI687865991 = {kind: 2, len: 4, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "target", len: 0, typ: NTI33554450, name: "target", sons: null}, +{kind: 1, offset: "text", len: 0, typ: NTI33554450, name: "text", sons: null}, +{kind: 1, offset: "x", len: 0, typ: NTI33554435, name: "x", sons: null}, +{kind: 1, offset: "y", len: 0, typ: NTI33554435, name: "y", sons: null}]}; +NTI687865991.node = NNI687865991; +NTI687865991.base = NTI687865981; +NTI687865880.base = NTI687865991; +NTI687865980.base = NTI687865880; +var NNI687866041 = {kind: 1, offset: "then", len: 0, typ: NTI687866042, name: "then", sons: null}; +NTI687866041.node = NNI687866041; +NTI687865921.base = NTI687866041; +var NNI687866044 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "ready", len: 0, typ: NTI687865921, name: "ready", sons: null}, +{kind: 1, offset: "onloadingdone", len: 0, typ: NTI687866045, name: "onloadingdone", sons: null}]}; +NTI687866044.node = NNI687866044; +NTI687865922.base = NTI687866044; +var NNI687865974 = {kind: 2, len: 25, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "activeElement", len: 0, typ: NTI687865874, name: "activeElement", sons: null}, +{kind: 1, offset: "documentElement", len: 0, typ: NTI687865874, name: "documentElement", sons: null}, +{kind: 1, offset: "alinkColor", len: 0, typ: NTI33554450, name: "alinkColor", sons: null}, +{kind: 1, offset: "bgColor", len: 0, typ: NTI33554450, name: "bgColor", sons: null}, +{kind: 1, offset: "body", len: 0, typ: NTI687865874, name: "body", sons: null}, +{kind: 1, offset: "charset", len: 0, typ: NTI33554450, name: "charset", sons: null}, +{kind: 1, offset: "cookie", len: 0, typ: NTI33554450, name: "cookie", sons: null}, +{kind: 1, offset: "defaultCharset", len: 0, typ: NTI33554450, name: "defaultCharset", sons: null}, +{kind: 1, offset: "fgColor", len: 0, typ: NTI33554450, name: "fgColor", sons: null}, +{kind: 1, offset: "head", len: 0, typ: NTI687865874, name: "head", sons: null}, +{kind: 1, offset: "hidden", len: 0, typ: NTI33554466, name: "hidden", sons: null}, +{kind: 1, offset: "lastModified", len: 0, typ: NTI33554450, name: "lastModified", sons: null}, +{kind: 1, offset: "linkColor", len: 0, typ: NTI33554450, name: "linkColor", sons: null}, +{kind: 1, offset: "referrer", len: 0, typ: NTI33554450, name: "referrer", sons: null}, +{kind: 1, offset: "title", len: 0, typ: NTI33554450, name: "title", sons: null}, +{kind: 1, offset: "URL", len: 0, typ: NTI33554450, name: "URL", sons: null}, +{kind: 1, offset: "visibilityState", len: 0, typ: NTI33554450, name: "visibilityState", sons: null}, +{kind: 1, offset: "vlinkColor", len: 0, typ: NTI33554450, name: "vlinkColor", sons: null}, +{kind: 1, offset: "anchors", len: 0, typ: NTI687865975, name: "anchors", sons: null}, +{kind: 1, offset: "forms", len: 0, typ: NTI687865976, name: "forms", sons: null}, +{kind: 1, offset: "images", len: 0, typ: NTI687865977, name: "images", sons: null}, +{kind: 1, offset: "applets", len: 0, typ: NTI687865978, name: "applets", sons: null}, +{kind: 1, offset: "embeds", len: 0, typ: NTI687865979, name: "embeds", sons: null}, +{kind: 1, offset: "links", len: 0, typ: NTI687865980, name: "links", sons: null}, +{kind: 1, offset: "fonts", len: 0, typ: NTI687865922, name: "fonts", sons: null}]}; +NTI687865974.node = NNI687865974; +NTI687865974.base = NTI687865970; + +function toJSStr(s_33556891) { + var result_33556892 = null; + + var res_33556933 = newSeq_33556909((s_33556891).length); + var i_33556934 = 0; + var j_33556935 = 0; + Label1: { + Label2: while (true) { + if (!(i_33556934 < (s_33556891).length)) break Label2; + var c_33556936 = s_33556891[i_33556934]; + if ((c_33556936 < 128)) { + res_33556933[j_33556935] = String.fromCharCode(c_33556936); + i_33556934 += 1; + } + else { + var helper_33556948 = newSeq_33556909(0); + Label3: { + Label4: while (true) { + if (!true) break Label4; + var code_33556949 = c_33556936.toString(16); + if ((((code_33556949) == null ? 0 : (code_33556949).length) == 1)) { + helper_33556948.push("%0");; + } + else { + helper_33556948.push("%");; + } + + helper_33556948.push(code_33556949);; + i_33556934 += 1; + if ((((s_33556891).length <= i_33556934) || (s_33556891[i_33556934] < 128))) { + break Label3; + } + + c_33556936 = s_33556891[i_33556934]; + } + }; +++excHandler; + try { + res_33556933[j_33556935] = decodeURIComponent(helper_33556948.join("")); +--excHandler; +} catch (EXCEPTION) { + var prevJSError = lastJSError; + lastJSError = EXCEPTION; + --excHandler; + res_33556933[j_33556935] = helper_33556948.join(""); + lastJSError = prevJSError; + } finally { + } + } + + j_33556935 += 1; + } + }; + if (res_33556933.length < j_33556935) { for (var i = res_33556933.length ; i < j_33556935 ; ++i) res_33556933.push(null); } + else { res_33556933.length = j_33556935; }; + result_33556892 = res_33556933.join(""); + + return result_33556892; + +} + +function rawEcho() { + var buf = ""; + for (var i = 0; i < arguments.length; ++i) { + buf += toJSStr(arguments[i]); + } + console.log(buf); + + + +} + +function cstrToNimstr(c_33556888) { + var ln = c_33556888.length; + var result = new Array(ln); + var r = 0; + for (var i = 0; i < ln; ++i) { + var ch = c_33556888.charCodeAt(i); + + if (ch < 128) { + result[r] = ch; + } + else { + if (ch < 2048) { + result[r] = (ch >> 6) | 192; + } + else { + if (ch < 55296 || ch >= 57344) { + result[r] = (ch >> 12) | 224; + } + else { + ++i; + ch = 65536 + (((ch & 1023) << 10) | (c_33556888.charCodeAt(i) & 1023)); + result[r] = (ch >> 18) | 240; + ++r; + result[r] = ((ch >> 12) & 63) | 128; + } + ++r; + result[r] = ((ch >> 6) & 63) | 128; + } + ++r; + result[r] = (ch & 63) | 128; + } + ++r; + } + return result; + + + +} +var F = {procname: "module dom", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/js/dom.nim", line: 0}; +framePtr = F; +F.line = 1399; +F.filename = "dom.nim"; +var document_687867265 = [{nodeType: 9, m_type: NTI687865974, activeElement: null, documentElement: null, alinkColor: null, bgColor: null, body: null, charset: null, cookie: null, defaultCharset: null, fgColor: null, head: null, hidden: false, lastModified: null, linkColor: null, referrer: null, title: null, URL: null, visibilityState: null, vlinkColor: null, anchors: [], forms: [], images: [], applets: [], embeds: [], links: [], fonts: null, attributes: [], childNodes: [], children: [], data: null, firstChild: null, lastChild: null, nextSibling: null, nodeName: null, nodeValue: null, parentNode: null, content: null, previousSibling: null, ownerDocument: null, innerHTML: null, outerHTML: null, innerText: null, textContent: null, style: null, baseURI: null, parentElement: null, isConnected: false, onabort: null, onblur: null, onchange: null, onclick: null, ondblclick: null, onerror: null, onfocus: null, onkeydown: null, onkeypress: null, onkeyup: null, onload: null, onmousedown: null, onmousemove: null, onmouseout: null, onmouseover: null, onmouseup: null, onreset: null, onselect: null, onstorage: null, onsubmit: null, onunload: null, onloadstart: null, onprogress: null, onloadend: null}]; +F.line = 1400; +document_687867265[0].ownerDocument = document_687867265[0]; +framePtr = F.prev; +var F = {procname: "module dom", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/js/dom.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsxmlserializer", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlserializer.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsxmlserializer", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlserializer.nim", line: 0}; +framePtr = F; +framePtr = F.prev; + +function newSeq_33556909(len_33556911) { + var result_33556912 = []; + + var F = {procname: "newSeq.newSeq", prev: framePtr, filename: "/home/runner/work/fusion/fusion/nim/lib/system.nim", line: 0}; + framePtr = F; + F.line = 636; + F.filename = "system.nim"; + result_33556912 = new Array(len_33556911); for (var i = 0 ; i < len_33556911 ; ++i) { result_33556912[i] = null; } framePtr = F.prev; + + return result_33556912; + +} +var F = {procname: "module jsxmlserializer_examples_1", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jsxmlserializer_examples_1.nim", line: 0}; +framePtr = F; +if (false) { +F.line = 16; +F.filename = "jsxmlserializer.nim"; +var cerealizer_654311428 = new XMLSerializer(); +F.line = 16; +rawEcho(cstrToNimstr(cerealizer_654311428.serializeToString(document_687867265[0]))); +} + +framePtr = F.prev; +var F = {procname: "module jsxmlserializer_examples_1", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jsxmlserializer_examples_1.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsxmlserializer_group0_examples", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jsxmlserializer_group0_examples.nim", line: 0}; +framePtr = F; +framePtr = F.prev; +var F = {procname: "module jsxmlserializer_group0_examples", prev: framePtr, filename: "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jsxmlserializer_group0_examples.nim", line: 0}; +framePtr = F; +framePtr = F.prev; diff --git a/nimcache/runnableExamples/jsxmlserializer_group0_examples.nim b/nimcache/runnableExamples/jsxmlserializer_group0_examples.nim new file mode 100644 index 0000000..4be9e39 --- /dev/null +++ b/nimcache/runnableExamples/jsxmlserializer_group0_examples.nim @@ -0,0 +1,4 @@ +# autogenerated by docgen +# source: /home/runner/work/fusion/fusion/fusion/src/fusion/js/jsxmlserializer.nim +# rdoccmd: +import "/home/runner/work/fusion/fusion/fusion/htmldocs/nimcache/runnableExamples/jsxmlserializer_examples_1.nim" diff --git a/nimdoc.out.css b/nimdoc.out.css new file mode 100644 index 0000000..a9e4ac9 --- /dev/null +++ b/nimdoc.out.css @@ -0,0 +1,1033 @@ +/* +Stylesheet for use with Docutils/rst2html. + +See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to +customize this style sheet. + +Modified from Chad Skeeters' rst2html-style +https://bitbucket.org/cskeeters/rst2html-style/ + +Modified by Boyd Greenfield and narimiran +*/ + +:root { + --primary-background: #fff; + --secondary-background: ghostwhite; + --third-background: #e8e8e8; + --info-background: #50c050; + --warning-background: #c0a000; + --error-background: #e04040; + --border: #dde; + --text: #222; + --anchor: #07b; + --anchor-focus: #607c9f; + --input-focus: #1fa0eb; + --strong: #3c3c3c; + --hint: #9A9A9A; + --nim-sprite-base64: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN4AAAA9CAYAAADCt9ebAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFFmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTAzVDAxOjAzOjQ4KzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wM1QwMjoyODo0MSswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0wM1QwMjoyODo0MSswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMzM0ZjAxYS0yMDExLWE1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"); + + --keyword: #5e8f60; + --identifier: #222; + --comment: #484a86; + --operator: #155da4; + --punctuation: black; + --other: black; + --escapeSequence: #c4891b; + --number: #252dbe; + --literal: #a4255b; + --program: #6060c0; + --option: #508000; + --raw-data: #a4255b; + + --clipboard-image-normal: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: black' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E %3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2' /%3E %3C/svg%3E"); + --clipboard-image-selected: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: black' viewBox='0 0 20 20' fill='currentColor'%3E %3Cpath d='M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z' /%3E %3Cpath d='M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z' /%3E %3C/svg%3E"); + --clipboard-image: var(--clipboard-image-normal) +} + +[data-theme="dark"] { + --primary-background: #171921; + --secondary-background: #1e202a; + --third-background: #2b2e3b; + --info-background: #008000; + --warning-background: #807000; + --error-background: #c03000; + --border: #0e1014; + --text: #fff; + --anchor: #8be9fd; + --anchor-focus: #8be9fd; + --input-focus: #8be9fd; + --strong: #bd93f9; + --hint: #7A7C85; + --nim-sprite-base64: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARMAAABMCAYAAABOBlMuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFFmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTAzVDAxOjE4OjIyKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplZGViMzU3MC1iNmZjLWQyNDQtYTExZi0yMjc5YmY4NDNhYTAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ZWRlYjM1NzAtYjZmYy1kMjQ0LWExMWYtMjI3OWJmODQzYWEwIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZWRlYjM1NzAtYjZmYy1kMjQ0LWExMWYtMjI3OWJmODQzYWEwIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplZGViMzU3MC1iNmZjLWQyNDQtYTExZi0yMjc5YmY4NDNhYTAiIHN0RXZ0OndoZW49IjIwMTktMTItMDNUMDE6MTg6MjIrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMS4wIChXaW5kb3dzKSIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4JZNR8AAAfG0lEQVR4nO2deViTZ7r/7yxkJaxJ2MK+GCBAMCwS1kgUFQSKK4XWWqsz1jpjp3b0tDP1V+eqU391fqfT/mpPPd20drTFDS0KFEVWJSGAEgLIZpAICBJACIRs549Rj1WILAkBfD/XlevySp68z/0S3+/7vPdzLyidTgcLkU2bd+z39/f/q1gshsrKSoJELFCa2iaEuU9K6kb+8uXxv54/fzE8L/eswNT2zCfQpjbAGKS8lPFKSEjIXiaTCSEhIeDj4xNnapsQ5j6rktZGp6UlfxIdzQVzCplmanvmG1hTG2BIAtlc26CgoDfT0tL2e3l5AQCAjY0NkMnk/a9s2k6rrKw8UV8n1JjYTIQ5RlAw14KzmL3xze1vfJyUuMJaq9UCFovFm9qu+YbBxcSPFUYkk8l2Q0NDsvo6ocrQx5+I8Ih4bz6f/0l8fHyKlZXV4/dRKBQwmcwwMpn8A4FAoPgHhH9bV1sxa488wZxoaycnJ/a9e/duCa5fkc3WvAiTI4Ib77p+XdqHG9anbfLy8gAAgLGxMdBpF+bjvzExqJj4scKI0dHRnwQHB++orq7+AgDeMuTxJ2Jl4rqU9PT0EwEBAUQCgTDuGAaDAampqYepVKpHUHDk325Ulw0a266YuFW+Gzdu/MDPz29jfn7+XgA4aOw5ESZP6kvpCXv3vnM8NiaSamVl+fj9BepGNDoGFRN7e/slcXFxO1xcXMDJyWnH7j//H/fi4uJdgutXmgw5z5O8smn7X9euXbvf29sbMBjMhONQKBRYWVlBbGzsbjMzM3JoOG+/sKKwy1h2rd/4elpGRsYuLy+vaDweD2w2Oy1h5ZrCvEunEaeeiVnMiabyl/F2/+X9P+8JDPQHHA5napMWBAYTk6DgSNuEhIS9DAYDAP7tq1i6dOkqOp3OWbNu0wens44emeoxA9lcWwKBYEMkEm2JRKIdHo+3QKFQWJ1Op8ZgMER3d/dVq1evTnFycpr0MSkUCsTExGzH4/Gk1LTME/39/TI0Go1FoVCg1WrVY2NjipGRkcGRkRH5dPwrEZHLXMPCwjJSUlIy3dzcfB+97+rqGhYSEpIOAIiYmBguN3zL77dt3uPh4W5qUxYUBhMTb2/vjeHh4cvR6P/dILK0tITIyEg7BweHr363/Z3Ampqaf1Zcu/zMKiVsyVJvMplsRyKR7IhEor2FhYUbhUJhJCYm2pFIJB6JRAIymQx4PB7QaDRoNBowMzMDJycnwOOn7icjEokQGxu7icFgbLp///7jFY1WqwWlUgkjIyOgUCgO7Ni5Rz48PCwfHh7uGRkZeaBQKOSjo6ODCoVCXlNVKn/6uCsT13FXrVr1emho6BYKhfLMnP7+/omrU9LPX8g+UThloxEMxqJFXjxESAyPQcSEExrLWLNmzW57e/txP/fw8ABHR8cdDAaDt3xF2ru9vb03sVgs0cbGxs/FxWVZUlISj0aj+dna2oKtrS1M5PcwJCgUCry8vODRrs84vPfoH6OjoyCXy6Gvr+/R6+CWrX9s7evrk/b19bWr1Wqli4sLZ8OGDe95eXmxUSjUuAd0cHDwjoqK2sYKXFIhvnldYYTTQpgU4/8+jyASCYDGoCd+ZkYYF8OICYezl8PhuOkbQyAQIDo62s/NzS2np6cHbGxsgEajAYFAAAwGA1gsFia6CE0NgUAABwcHsLe3B61WC2q1eo9WqwWNRgNKpRLUajUQiUSgUCh6zwGHwwGTydzo5+eXBQBnZu8MEJ5keHhYPqyYWMtHR0ZBpVIhYj9FUDONgOUvT12+du3avMDAQJjssdRqNWCxCyrEZdLodDoQi8Ulx44de628NL/V1Pa8iERE8l2dHB2CJvpcq9Nqbt1qKURWj1Njxld0ZGTkAW9v70kLCQC8sEIC8O/HKx8fn2gmk8kHgCk7pRFmzrWyAikASE1tx0Jj2uH0EZHL/N7YtuvT4OBgzmz4OBYSeDweIiMjt2S++vtMP1YYEmmJsCCY8mNOIJtr6+zsHBcZGXmIw+G4mZubG8m0hU9HRwcUFxe/KxQKTyDRsQjznSmJCS9+dVRERMTfQ0NDo2xtbfUGiSFMjtHRUaitrc3Jzc09kHvxVLmp7UFAmC6oZQkvrZLL5RJhReHtiQb5scKIXC7371FRUX90dnYGIpE4JR8Jgn40Gg20t7fXFxYWfnr9+vWjz8sdYi+Osh4vzgUBwZSgtu94V+fs7Hx7YGCgra6u7khLS0u2RCwYeTQgKmYFh8fj/f/g4OAldnZ2prR1wdPd3Q1CofBQSUnJkdLi3N8E93FCY6k+Pj48FxcXjlar1ZSWlh65VvYr4kREmDNg79+/D3FxcW5OTk5uXl5evNbW1tL0jK3ZXV1d1ykUintycvInoaGhdkj+gvGxs7MDPp+/m0AgWMQvS/lyeHhYTqPRPJycnIJSU1NZ3t7eW2g0Gly/fv2oWq1Gij0hzClQ/gHhpLS0tEM8Hm/7I8Ho7++HlpYWsLa2Bg8PDxOb+OKhUCigqakJ7t+/D25ubuDu7g4oFAp0Oh08ePAAvv7666TTWUdzTG0nAsKTYMU3ryuSU18+4+bmFrZo0SIOAICVlRUsXrx4zkakLnRIJBI8CgJ8MtdJp9NBZ2enqL29XWRC8xAQxgUNAHD+3L8KGhoaCp78ABES04JCoX4jJAAAAwMDUFtbe96YpRMQEKbL41DU5ubmko6Ojj2PSgggzD36+/vrb9y4cX425zzw93/8EBjon2is44+NjSkePBjqGRwc7G5v7xBV19w8U5B/3qgrr9+/uWtXUuKKD/TZ9MXh/066/OuFmunO8dGBQ98HBbGSp/t9U6LRaDXK0dHBoeFhuVzeL22/0yFqamopufjLqRJ933ssJi0tLSXV1dWHGAzGbuObOzs8ubqa71vZKpUKOjo6blwpOF8zm/Mu5cVkLlkSaswprAHAaVihgK7O7oSGxltvfXLon3nXK4RHT2cdN4pfKDCAlZyUuMJan02nTmczAaBmunPw4qI3cbnh0/36XICq0+lgcPABp7OrK629vUP5z8++LLh2XXD05L++yxrvC4/F5EZ12WBS8saLS5Ys2U2lUufUY45SqQSlUgkqlQrUavXj19jYGGg0GtBoNKDT6UCn05VotVq1TqfToFAojFar1eh0Og0Wi8XhcDgeGo1+/PhgZmYGOBwOsFgsmJmZ/eY1F+nt7YXa2trs2Z73wdCQBgCMHp1IJpHA09MdPD3dLRIS+OtKisvWvbP7vf2lZdePVFwzbHTwyMiI3hidkZFRUKvUYzOZ48HQkBIA5nWqBAqFAktLC7C0tADmIh88Pz4uMSyUk7hn776DV4tKPn/6d/lNxp1MJqsRCASf8vn8XdMpOjRTVCoVjI2NgUqlAq1WCyMjI9DX1wf379+Hvr6+/Q8ePOgdGRmRKxSKx0WLFAqFXKlUKnQ6nUar1arHq47mxwrD4/F4Eg6HI2GxWDwej7cgkUjWFAqFam5uTjU3N6eRyeQPLSwswNraGqysrIBAIDwWFywW+zja11Qi29LSclIikeSZZPJZBovBAI8XA8HBQR9kZZ3lR8cmvFZSlGe00p8IkwONRkNERBj4+i7a4+XpHv307/IbMakWlciXJbx0nMPh7Jqo0JGh0el0MDo6Cl1dXSCVSkEmk7177969W319fe1DQ0M9KpVKoVarlWq1WjndNhUPG3ApAWDcOxLTLwSDwWAOotFoDBaLxRMIBAsrKysne3t7Xzqd7k2n0/c4OzsDlUoFHA4364IyMDAATU1NxdWikhcq6tXKyhJezljPJZKI2eERS5cZeoWCMD2srCwhPX0tVzk2djiCG//GtfLLUoBxShB0dHTU3Lx580sLC4vtJBLJKMZoNBqQSqUglUqPdnR01PT09DT19/fLHjx40DM0NNQ72933GiSVGgB4JFQK+LfoSAGgnL04yppEIh2xtLS0t7GxcaFSqR7Ozs4fMRgMcHR0nJX8pJs3b54Ui8UXjT7RHIRMIkFK8irfwcEHPwQELUmqvYHUGJkLmJubw8YNa/i9vfffY/px3myQiDTPiEl9nVDDX576jaenZ7SnpyfLUJNrNBqQyWRw+/bt4x0dHTdkMlltV1dXw/XygjkdEv4wB0YOAK0AUM70C8HQ6fSzdDrdm0qlejg6OrLc3Ny2MBiMadWjfR4PHjyAmzdvZs/1v5MxoVAokJK8iicWS95k+nH+s0EiQhqpzQGoVFtYk5a87ba0XQAA34xbpagg/5zoT7s/OGNnZ8eaaYkBuVwOnZ2d5VKpVNTS0lLS2NhYWFVZ3Dujg5qQh6uY+ocvCAiKIPn4+Jz19PSMdnV15VCpVL6Dg4NBViw6nQ5EItHRpqamqzM+2DzHzo4O69amftLQeKsAZrDLgmBY/PyYsCIhfs+SiKUFE5Y8EwqFx11cXDihoaFTjjFAoVAwPDwMHR0dourq6jNCofDHhZqUVnvjmgIAcgAgJyg40mLRokX8kJCQjT4+PussLS1n1JPl7t27UFxcfHguB6mNjY2B7G4naNRTWyygUCjAYDGAx+PB0sICSCSi3vFYLBbCwjjA8vddBQtATKb7d3saBwc7IJPJBpsHjUGDGRYLJBIJLK0sAfucmyIGg4FFi3y8AwNZtycUk5KiS02vvf7WWQaDkejg4DApQwAeh3xDaWnpPoFAcPxFqnP6sEvgGf+A8Bx3d/cvIyIiNi1evHjT8wpNj8fAwACUlZW9P9dD5+/ckcFbf9gd2dcnn9LNAovF4inmZHtXNxdOdBR3+/JlS33pdP29wolEInA4weuiYxOy5vvuTkeHDHb+8c8xvb33Z3R9/N+Df+uIjYk02DwkEsna2trS1d/fNyGeF7uTyw1/7g3R3t4O2OxA/TVghULhcQqFQk1JSfmYSNR/5wD4d6EfgUBwvLS09IhUKhW9qAV5H9YjKQwJi6uvrKw8ERoamhkSEpKp7w7yJEqlEiQSyZmysrJv53qjdaVSCZdyTk+3qFMrAJRHRPLPN95qeifj5fU7mYt8JhyMRqMhMJDFdnF25gDAvBYTpXIMWlpay2fq/8m5mDcIABYGnEcGAGI/VlhBZWX1yZdSkz55OX0dV5+7w9bGGvz8mPrFpK62QskJjf2GTqd7x8bGbpnID4BCoUAmk0lLSkqOiESik2UleS/MakQflYKrXQDQxY1a3tTe3i6KiIjY5OXlxX7e9+rr6wsuXbr0t4ffn9OgMWjghMZQRcLp+8GulRVI/QPC37Wxtnal0ajJtjY2E451ZjiBra31vE9lR2PQQKFQaAAwo98Yi8Xq9fpPd56HO6rlvKWJv/PwcK+JilyCmajWMw6HAzs7+rMFpQOCIn6zHywSFvXm5eUdFAqFZ9Rq9bgHa2trq79w4cK+zz49cAARkmcpL81v/a/Dhz49d+7c3qqqqjyVSjXuOJ1OBxKJpDw3N/fA5V+zax6978cKw/sHhM/raMrnUVdboSy4fPWQSFSjd5yFBQWIRNKEd2IEw1J4JUd88WL+R51d3XrHWVDMnxUTa2tr1zXrNiUGsrmPf7DS4tymCxcu7Kuurs55+kKQSqVN586d23vs+8NHDXUCC5Wzp3/Iy8rKeruysvLM2Nhvo7VVKhXU1tYWnj17du/T7UOdnZ2D7OzsfGGB09raVi4S1RzXl0eFw+EAj8chYjKLVFffyOrq1C8mJBLpWTFRKBRyDofzC4vFWvXk+1ev/CLOzs7eKxAIslQqFeh0Oujp6enKzs7em/XTd7OayTqfKb56sT4rK+sPAoHg5KO/o0KhAKFQmHXy5MkdF3/5+TeZmctXpIXZ29v7zqVcKWNRX1epuXu3U/y8pEw0GmndOZt0dnXVDw0P6/W5oNHoZ30mQ0NDPb29vfvj4+Pf3rR5B/7od188XnEUXr4gDgmL+0NfX5/U19d3d3l5+YGfTnyDtLmcIhXXLsu4UcvfR6PRGGtra9eysrIjYrE45+kt4Fheou/69es/unnz5vm7d+/Wmsre2WRkZGTQ1DYg/JYGiUiTm1ugBAC9IfHPiEmDpFITE7fqJI/H27lmzZpDq5LWtz55t6wUXO3ihMYerK+vz2tpaUFaM0yT8tL81ujYle+TSCTrvEunBU9/voTLd92wYcPHVCqV39XVdXCu7+oYCp1O90Kc50Jk3I5+xVcv1jc3N5d4enpSMzIyvkpK3sh78nORsKg3++yPBS/q1q+hKCm61DSekERGJ3ikp6d/ERsbm1xVVXWwtbX1hRFtFAqFPMLMUyZsDyoQCI7LZDKIiIjwzczM/GpV0vro2TTsRSUqZoX3+vXrP1u9enXi0NAQiESirIdRtggIc5oJ40zq6uryGhoa8ry8vBJCQ0O9USjU94mrN7yWc+EnvaXb5gJMvxCMp6cnl0Kh2Le1tZVXXLs8L1LXefGrWRkZGZ/x+XyeUqkEkUh0vqenZ14HZyG8OEwoJjdrygd37NxTEBkZmWBtbQ3BwcEeKBTq+/UbX3/355Pfzlmn66qk9dGbN29+k8PhbCSRSNDZ2Snb9ae/HCkpKTksEhbN2QTD5NSX+Vu3bj0cHBzsjcFg4O7du1BWVvbNwxB9BIQ5j94I2Fu3bhXW19cDl8sFLBYLHA7Hg0wmf/e77e84ffXlPz6fLSMnQ2paZkJ4eHjmtm3b+B4eHvZkMhlQKBTY29s72dvbfxgUFJT8x7ffP1NRUfHjXErnZ/qFYKKjo7dt3rz5g8DAQPtH/XHa2tpqGhsbC55/BASEuYFeMblz505NTU3NgfDw8PcwGAygUCjw9fW1IJPJn/1130Hv0tLSI4WXL4hny9inYS+Osvbz80tgMpn8jIwMPovFch2vpoiDgwM4ODhwfH19OYsWLeJv3/Hu+cbGxquzXZz5aZYlvMRJT0/fFhkZue3JZmfd3d0gEolOIr4ShPmEXjFpkFRqXlrzSnFnZ+d7Tk5OjzNfXVxcICMjY6ezszNnVdL6vU8HWhmbgKAIkrOzMyc1NTXz0YU4maAuOp0OK1as4EVFRfGEQqHg1dfePHzr1q2rs71S8WOF4f38/BLS09M/iIyM5DxdxLq5uVlcVVU1bgVwBIS5il4xAQCQyWRigUBwJikpKe3JVGQcDgdLly7l2tranti0ecf7IpEoy9hbxX6sMDydTvdevXr1ltjY2F3u7u6AxT73FJ7B3Nwc4uLiwthsdphQKCzZkL7l0/r6+oKbNeVG90+EhMXZL1++fFtycvKHrq6uz4igUqmE5ubmEiTHCWG+8dwrUXD9imz9xtd/jIuLS7N5KpsTjUZDUFCQE4PB+F4oFGYmJW888Mv5k4UTHGpGxC9LYaenp78VEhKyxdHRESgUyoyOh0KhwNraGuLi4qIDAgKi6+rqyjekb/mHMSN6N6RvSdu+ffseNpsdZm09ftuW+vp6EIvFSB9hhHnHpG7rUqm0orW1tdXS0tLj6TIEaDQaaDQaxMfH811dXTl/3Xfw+JUrVz411J01cfWG6IiIiC07d+5McHNzs7ewMGyOFw6HAwcHB6BSqVx3d/fwz7/4rkAgEBwXCoUnHpZonDGrU9J5MTEx27du3Zrm4uKC0beaqq6u/ry+vj7XEPMiIMwmkxKTimuXZe/u+fCkp6fnexPdUfF4PPj7+1szGIydLi4unF1/+kvenTt3RG1tbRXTqfma8lIG39/fP/HVV19NZrFYHpMpzjQTzMzMwNPTE+Pp6Zng6emZ4Ofnl5CesfV8bW1tznQe3/wDwvFeXl7Rvr6+Ca+88kpaUFCQh74GXzqdDrq7u6GpqankRQmdR1hYTNrhUFVVlcXj8d6ysrKy0OfstLS0hPj4eC6Xy+U2NzeDRCI5/sa2XeX37t1rGhwc7BoYGJBN1P+FFbiE5OzszGaxWImvvvrqpoCAAKfp+ERmCpPJBCaTmcnhcDJLS0u/TE59+YxUKhXoi/lg+oVgrKysGJaWlna2trYeaWlpXDabvTMgIGDSfp2KiorzbW1tL0zoPMLCYtJX6uVfs2u++PKowMPDgz+ZIslEIhECAgKAxWJlajSazJ6eHmhra4PW1tZvtmz9o6Czs7O+r6+vfWxsbFir1WosLCzsV6xYkcnj8d7z9vaelmPV0Hh5eYGnp+f2mJiY7UVFRZ/HL0v5tru7+5ZGo1FisVg8Docj4fF4CxsbG1c+nx/m7e39sYeHB7i4uIC5ufmU6r4ODQ1BZWXlifkSrYuA8DRTumIrKytPent78728vCb9HRQKBVgsFhwcHIBOpwObzd4yNja2RaVSwdDQEHR1dcHo6CjQaDRwdXWdsWPV0KBQKPDw8AA7O7udERERO2tra2FgYACoVCo4OTkBjUYDMpkMeDz+8WuqaLVaaGxsbL19+/YzSX8ICPOFqYrJidDQ0AwvLy/e80c/CwaDARKJBI86BdJoNHB3dwe1Wj0nViL6IJPJwGQywdnZGZRKJRAIBDBUx8OBgQEoLS39BtkORpjPTJg1PB61N64pmpqarvb39xvUiLkuJE9CJpPBxsbGYEICANDZ2SlHgtQQ5jtTEhMAgLq6ulyJRFJvDGNeREZGRkAikRSUFuci2cEI85opi0l+7hmBWCzOeV6dToTJcfv27cHr168jxbgR5j1TFhMAgObm5hKZDNl0MAQtLS3Xzpw6hkS8Isx7piUmUqlUIBAIJuyjgzA5Ojs7QSKRINGuCAuCaYmJsKKw68qVK59KJJIu5HFneiiVSigqKjouEolOmtoWBARDMC0xAQC4+MvPJadOnXq3ra1N8yL0dDEkOp0OSktLy/Pz8w8+3d4CAWG+Mm0xAQA4fuy/jl+8ePGju3fvGsqeBY9Wq4XKysrWU6dOvX31yi8mKyyFgGBoZiQmAAD/79D+fadPn96PCMrz0el0UFVV1frtt9+mj9fiAgFhPjNjMQEAyMvLO3Ds2LE/tLS0INmuerh27Vr9999//xoiJAgLEYOEntbVVigB4PNNm3cMpqSkfMRms50McdyFgkqlgqKiovJTp069nZ97BhEShAWJQePYj373xdF1GzbLFQrFx6Ghob766ne8KNy7dw+KiopO5ubmfmTK4tsICMbG4EkxWT99d35l4rre/v7+D0NCQvh0Ot3QU8wL1Go1SKVSTX5+/sH8/PyDSP8bhIWOUTLsLuVklQcFR65pbGzcvnLlyvfc3NwsCASCMaaac+h0OhgaGoLq6uqaCxcu/OV01tGcTw7uM7VZCAhGx2jpug/vxAd58atzoqKitq1cuXKnvb29saabE+h0Oqiurpbm5eUdrK6uPlspuDrvY0hmO4YIhUIBGq1/X2CmNqFQKL3/79HomZ/z82xEowyy9zFr80zGDqPn/hdeviBmL47ad+fOnRsRERGbQkNDo62srIw97azT2dkJxcXFx0tKSo7Mdh8hY4LD4TDPH2U4MFjMc6tLmZmZzaj+Aw6H0/t9PB4PGCxmRudNJBL0ngeZTAI0Gj3jv+1szfM88Hic8cUEAKCmqlQOAN/ELU2qkEgkySwWK3HRokVcBoMxG9MbDZ1OB83NzdDU1FRQW1t7XiAQHJ+ovu18pbr6Rg6L5ZtoM0EhcUPT0tJW8tWRb0vQqIkvgKqqmhnVfrl2TfANXo+gjKlUio4OWc1M5sjOzjnQUH8rbqLPu3t6moaGhmfc+3q25tGHUqmECoEIUKbIrVkcEkONiIh4jcvlvu7s7OxLo9GmVe7QVCgUCujq6oKGhoaCioqKo9XV1WeM3YDMVPDik1gpyas+XrVyeaKXl8czjyANjbcgI/MNmkg49Q4ECPOH3NyC4RUr+M8IcHt7B1y9WlKRl3/5kElKnD1sfXEoJCzueEBAQGJYWFgGk8nk2djYAIFAgLm4pTw6Ogqjo6Mgl8vhxo0b50tLS4/U19fnLvS2FIWXfxEDQNLmLW9ueW1TxtchHDaQyWRTm4VgYkZHR6G+vhF+/NfP+y5e+vVjiVgwZpKVydOwF0dZW1lZOTGZTD6bzU4LCAiIptPp8HTDL1MwOjoKLS0tUFdXd1IsFudIpdKKgYGB7tloJTrX4MUnsVJTEj9etzY10dHRAQAAGm81wcsZW5CVyQInL69gNCGBjwcAGBx8ANnncypOnTr3H9nn/reD55wovvrQpyIHAHFUzIocGo3mQaPRfBwdHVlubm7bXF1dgcFgABqNNvruglwuh7t374JMJoOOjo7P79y5I+ru7m7q7e1tXQi7MzOh8PIv4pCw2DdaWtte37Au7aPIyCWAxWABjUbPif9HCMbjURtKiaQBfvr5zH9evlJ0uLQ4r/nJMXNiZTIRrMAlJAcHB18HBweWo6Mjy8rKajeJRAJLS0uwtLQECwsLoFAogMfjAYvFgpmZ2XNXMyqVCoaHh2FoaAiGh4cfvwYGBqCvrw+6u7vfvnfvXlNvb29rT09Pq0QsUM7S6c4rNqS/lrZ5U+YPRBKR9M7u9xwqBUUvtNAudH766XSLE8PR49ixE78/8tVnX403Zk7fUR46NUUAIPIPCMdTKJTdNjY2QKPRgE6nA51OB1tbWyCRSIDD4YBAIAAejwcCgfDYUajVakGlUoFarQadTvfY79HX1wf9/f0gl8tBLpfDvXv3HvXw+dxQPYYXMj+d+P7Mmzv+5OHr6/OJWq1GBHeB09TcUiKuq/coKS3/eqIx/wPkiIXC3w6YjAAAAABJRU5ErkJggg=="); + + --keyword: #ff79c6; + --identifier: #f8f8f2; + --comment: #6272a4; + --operator: #ff79c6; + --punctuation: #f8f8f2; + --other: #f8f8f2; + --escapeSequence: #bd93f9; + --number: #bd93f9; + --literal: #f1fa8c; + --program: #9090c0; + --option: #90b010; + --raw-data: #8be9fd; + + --clipboard-image-normal: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E %3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2' /%3E %3C/svg%3E"); + --clipboard-image-selected: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' viewBox='0 0 20 20' fill='currentColor'%3E %3Cpath d='M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z' /%3E %3Cpath d='M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z' /%3E %3C/svg%3E"); + --clipboard-image: var(--clipboard-image-normal); +} + +@media (prefers-color-scheme: dark) { + [data-theme="auto"] { + --primary-background: #171921; + --secondary-background: #1e202a; + --third-background: #2b2e3b; + --info-background: #008000; + --warning-background: #807000; + --error-background: #c03000; + --border: #0e1014; + --text: #fff; + --anchor: #8be9fd; + --anchor-focus: #8be9fd; + --input-focus: #8be9fd; + --strong: #bd93f9; + --hint: #7A7C85; + --nim-sprite-base64: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARMAAABMCAYAAABOBlMuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFFmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTAzVDAxOjE4OjIyKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplZGViMzU3MC1iNmZjLWQy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"); + + --keyword: #ff79c6; + --identifier: #f8f8f2; + --comment: #6272a4; + --operator: #ff79c6; + --punctuation: #f8f8f2; + --other: #f8f8f2; + --escapeSequence: #bd93f9; + --number: #bd93f9; + --literal: #f1fa8c; + --program: #9090c0; + --option: #90b010; + --raw-data: #8be9fd; + + --clipboard-image-normal: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E %3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2' /%3E %3C/svg%3E"); + --clipboard-image-selected: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' viewBox='0 0 20 20' fill='currentColor'%3E %3Cpath d='M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z' /%3E %3Cpath d='M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z' /%3E %3C/svg%3E"); + --clipboard-image: var(--clipboard-image-normal); + } +} + +.theme-select-wrapper { + display: flex; + align-items: center; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; } + +body { + font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif; + font-weight: 400; + font-size: 1.125em; + line-height: 1.5; + color: var(--text); + background-color: var(--primary-background); } + +/* Skeleton grid */ +.container { + position: relative; + width: 100%; + max-width: 1050px; + margin: 0 auto; + padding: 0; + box-sizing: border-box; } + +.column, .columns { + width: 100%; + float: left; + box-sizing: border-box; + margin-left: 1%; } + +@media print { + #global-links, .link-seesrc, .theme-switch-wrapper, #searchInputDiv, .search-groupby { + display:none; + } + .columns { + width:100% !important; + } +} + +.column:first-child, .columns:first-child { + margin-left: 0; } + +.container .row { + display: flex; } + +.three.columns { + width: 25.0%; + height: 100vh; + position: sticky; + top: 0px; + overflow-y: auto; + padding: 2px; +} + +.nine.columns { + width: 75.0%; + padding-left: 1.5em; } + +.twelve.columns { + width: 100%; + margin-left: 0; } + +@media screen and (max-width: 860px) { + .three.columns { + display: none; + } + .nine.columns { + width: 98.0%; + } + body { + font-size: 1em; + line-height: 1.35; + } +} + +cite { + font-style: italic !important; } + + +/* Nim search input */ +div#searchInputDiv { + margin-bottom: 1em; +} +input#searchInput { + width: 80%; +} + +/* + * Some custom formatting for input forms. + * This also fixes input form colors on Firefox with a dark system theme on Linux. + */ +input { + -moz-appearance: none; + background-color: var(--secondary-background); + color: var(--text); + border: 1px solid var(--border); + font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif; + font-size: 0.9em; + padding: 6px; +} + +input:focus { + border: 1px solid var(--input-focus); + box-shadow: 0 0 3px var(--input-focus); +} + +select { + -moz-appearance: none; + background-color: var(--secondary-background); + color: var(--text); + border: 1px solid var(--border); + font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif; + font-size: 0.9em; + padding: 6px; +} + +select:focus { + border: 1px solid var(--input-focus); + box-shadow: 0 0 3px var(--input-focus); +} + +/* Docgen styles */ + +:target { + border: 2px solid #B5651D; + border-style: dotted; +} + +/* Links */ +a { + color: var(--anchor); + text-decoration: none; +} + +a span.Identifier { + text-decoration: underline; + text-decoration-color: #aab; +} + +a.reference-toplevel { + font-weight: bold; +} + +a.nimdoc { + word-spacing: 0.3em; +} + +a.toc-backref { + text-decoration: none; + color: var(--text); +} + +a.link-seesrc { + color: #607c9f; + font-size: 0.9em; + font-style: italic; +} + +a:hover, a:focus { + color: var(--anchor-focus); + text-decoration: underline; +} + +a:hover span.Identifier { + color: var(--anchor); +} + + +sub, sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; } + +sup { + top: -0.5em; } + +sub { + bottom: -0.25em; } + +img { + width: auto; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; } + +@media print { + * { + color: black !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; } + + a, a:visited { + text-decoration: underline; } + + a[href]:after { + content: " (" attr(href) ")"; } + + abbr[title]:after { + content: " (" attr(title) ")"; } + + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; } + + pre, blockquote { + border: 1px solid #999; + page-break-inside: avoid; } + + thead { + display: table-header-group; } + + tr, img { + page-break-inside: avoid; } + + img { + max-width: 100% !important; } + + @page { + margin: 0.5cm; } + + h1 { + page-break-before: always; } + + h1.title { + page-break-before: avoid; } + + p, h2, h3 { + orphans: 3; + widows: 3; } + + h2, h3 { + page-break-after: avoid; } +} + + +p { + margin-top: 0.5em; + margin-bottom: 0.5em; } + +small { + font-size: 85%; } + +strong { + font-weight: 600; + font-size: 0.95em; + color: var(--strong); } + +em { + font-style: italic; } + +h1 { + font-size: 1.8em; + font-weight: 400; + padding-bottom: .25em; + border-bottom: 6px solid var(--third-background); + margin-top: 2.5em; + margin-bottom: 1em; + line-height: 1.2em; } + +h1.title { + padding-bottom: 1em; + border-bottom: 0px; + font-size: 2.5em; + text-align: center; + font-weight: 900; + margin-top: 0.75em; + margin-bottom: 0em; } + +h2 { + font-size: 1.3em; + margin-top: 2em; } + +h2.subtitle { + margin-top: 0em; + text-align: center; } + +h3 { + font-size: 1.125em; + font-style: italic; + margin-top: 1.5em; } + +h4 { + font-size: 1.125em; + margin-top: 1em; } + +h5 { + font-size: 1.125em; + margin-top: 0.75em; } + +h6 { + font-size: 1.1em; } + + +ul, ol { + padding: 0; + margin-top: 0.5em; + margin-left: 0.75em; } + +ul ul, ul ol, ol ol, ol ul { + margin-bottom: 0; + margin-left: 1.25em; } + +ul.simple > li { + list-style-type: circle; } + +ul.simple-boot li { + list-style-type: none; + margin-left: 0em; + margin-bottom: 0.5em; } + +ol.simple > li, ul.simple > li { + margin-bottom: 0.2em; + margin-left: 0.4em } + +ul.simple.simple-toc > li { + margin-top: 1em; } + +ul.simple-toc { + list-style: none; + font-size: 0.9em; + margin-left: -0.3em; + margin-top: 1em; } + +ul.simple-toc > li { + list-style-type: none; } + +ul.simple-toc-section { + list-style-type: circle; + margin-left: 0.8em; + color: #6c9aae; } + +ul.nested-toc-section { + list-style-type: circle; + margin-left: -0.75em; + color: var(--text); } + +ul.nested-toc-section > li { + margin-left: 1.25em; } + + +ol.arabic { + list-style: decimal; } + +ol.loweralpha { + list-style: lower-alpha; } + +ol.upperalpha { + list-style: upper-alpha; } + +ol.lowerroman { + list-style: lower-roman; } + +ol.upperroman { + list-style: upper-roman; } + +ul.auto-toc { + list-style-type: none; } + + +dl { + margin-bottom: 1.5em; } + +dt { + margin-bottom: -0.5em; + margin-left: 0.0em; } + +dd { + margin-left: 2.0em; + margin-bottom: 3.0em; + margin-top: 0.5em; } + + +hr { + margin: 2em 0; + border: 0; + border-top: 1px solid #aaa; } + +hr.footnote { + width: 25%; + border-top: 0.15em solid #999; + margin-bottom: 0.15em; + margin-top: 0.15em; +} +div.footnote-group { + margin-left: 1em; +} +div.footnote-label { + display: inline-block; + min-width: 1.7em; +} + +div.option-list { + border: 0.1em solid var(--border); +} +div.option-list-item { + padding-left: 12em; + padding-right: 0; + padding-bottom: 0.3em; + padding-top: 0.3em; +} +div.odd { + background-color: var(--secondary-background); +} +div.option-list-label { + margin-left: -11.5em; + margin-right: 0em; + min-width: 11.5em; + display: inline-block; + vertical-align: top; +} +div.option-list-description { + width: calc(100% - 1em); + padding-left: 1em; + padding-right: 0; + display: inline-block; +} + +blockquote { + font-size: 0.9em; + font-style: italic; + padding-left: 0.5em; + margin-left: 0; + border-left: 5px solid #bbc; +} + +blockquote.markdown-quote { + font-size: 0.9rem; /* use rem to avoid recursion */ + font-style: normal; +} + +.pre, span.tok { + font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace; + font-weight: 500; + font-size: 0.85em; + color: var(--text); + background-color: var(--third-background); + padding-left: 3px; + padding-right: 3px; + border-radius: 4px; +} + +span.tok { + border: 1px solid #808080; + padding-bottom: 0.1em; + margin-right: 0.2em; +} + +.copyToClipBoard { + position: relative; +} + +pre { + font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace; + color: var(--text); + font-weight: 500; + display: inline-block; + box-sizing: border-box; + min-width: 100%; + padding: 0.5em; + margin-top: 0.5em; + margin-bottom: 0.5em; + font-size: 0.85em; + white-space: pre !important; + overflow-y: hidden; + overflow-x: visible; + background-color: var(--secondary-background); + border: 1px solid var(--border); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.copyToClipBoardBtn { + visibility: hidden; + position: absolute; + width: 24px; + border-radius: 4px; + background-image: var(--clipboard-image); + right: 5px; + top: 13px; + background-color: var(--secondary-background); + padding: 11px; + border: 0; +} + +.copyToClipBoard:hover .copyToClipBoardBtn { + visibility: visible; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; } + + +/* Nim line-numbered tables */ +.line-nums-table { + width: 100%; + table-layout: fixed; } + +table.line-nums-table { + border-radius: 4px; + border: 1px solid #cccccc; + background-color: ghostwhite; + border-collapse: separate; + margin-top: 15px; + margin-bottom: 25px; } + +.line-nums-table tbody { + border: none; } + +.line-nums-table td pre { + border: none; + background-color: transparent; } + +.line-nums-table td.blob-line-nums { + width: 28px; } + +.line-nums-table td.blob-line-nums pre { + color: #b0b0b0; + -webkit-filter: opacity(75%); + filter: opacity(75%); + text-align: right; + border-color: transparent; + background-color: transparent; + padding-left: 0px; + margin-left: 0px; + padding-right: 0px; + margin-right: 0px; } + + +table { + max-width: 100%; + background-color: transparent; + margin-top: 0.5em; + margin-bottom: 1.5em; + border-collapse: collapse; + border-color: var(--third-background); + border-spacing: 0; + font-size: 0.9em; +} + +table th, table td { + padding: 0px 0.5em 0px; + border-color: var(--third-background); +} + +table th { + background-color: var(--third-background); + border-color: var(--third-background); + font-weight: bold; } + +table th.docinfo-name { + background-color: transparent; + text-align: right; +} + +table tr:hover { + background-color: var(--third-background); } + + +/* rst2html default used to remove borders from tables and images */ +.borderless, table.borderless td, table.borderless th { + border: 0; } + +table.borderless td, table.borderless th { + /* Override padding for "table.docutils td" with "! important". + The right padding separates the table cells. */ + padding: 0 0.5em 0 0 !important; } + +.admonition { + padding: 0.3em; + background-color: var(--secondary-background); + border-left: 0.4em solid #7f7f84; + margin-bottom: 0.5em; + -webkit-box-shadow: 0 5px 8px -6px rgba(0,0,0,.2); + -moz-box-shadow: 0 5px 8px -6px rgba(0,0,0,.2); + box-shadow: 0 5px 8px -6px rgba(0,0,0,.2); +} +.admonition-info { + border-color: var(--info-background); +} +.admonition-info-text { + color: var(--info-background); +} +.admonition-warning { + border-color: var(--warning-background); +} +.admonition-warning-text { + color: var(--warning-background); +} +.admonition-error { + border-color: var(--error-background); +} +.admonition-error-text { + color: var(--error-background); +} + +.first { + /* Override more specific margin styles with "! important". */ + margin-top: 0 !important; } + +.last, .with-subtitle { + margin-bottom: 0 !important; } + +.hidden { + display: none; } + +blockquote.epigraph { + margin: 2em 5em; } + +dl.docutils dd { + margin-bottom: 0.5em; } + +object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] { + overflow: hidden; } + + +div.figure { + margin-left: 2em; + margin-right: 2em; } + +div.footer, div.header { + clear: both; + text-align: center; + color: #666; + font-size: smaller; } + +div.footer { + padding-top: 5em; } + +div.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; } + +div.line-block div.line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; } + +div.topic { + margin: 2em; } + +div.search_results { + background-color: var(--third-background); + margin: 3vh 5vw; + padding: 1em; + border: 1px solid #4d4d4d; + position: fixed; + top: 10px; + isolation: isolate; + max-width: calc(100vw - 6em); + z-index: 1; + max-height: calc(100vh - 6em); + overflow-y: scroll;} + +div#global-links ul { + margin-left: 0; + list-style-type: none; } + +div#global-links > simple-boot { + margin-left: 3em; } + +hr.docutils { + width: 75%; } + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; } + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; } + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; } + +.align-left { + text-align: left; } + +.align-center { + clear: both; + text-align: center; } + +.align-right { + text-align: right; } + +/* reset inner alignment in figures */ +div.align-right { + text-align: inherit; } + +p.attribution { + text-align: right; + margin-left: 50%; } + +p.caption { + font-style: italic; } + +p.credits { + font-style: italic; + font-size: smaller; } + +p.label { + white-space: nowrap; } + +p.rubric { + font-weight: bold; + font-size: larger; + color: maroon; + text-align: center; } + +p.topic-title { + font-weight: bold; } + +pre.address { + margin-bottom: 0; + margin-top: 0; + font: inherit; } + +pre.literal-block, pre.doctest-block, pre.math, pre.code { + margin-left: 2em; + margin-right: 2em; } + +pre.code .ln { + color: grey; } + +/* line numbers */ +pre.code, code { + background-color: #eeeeee; } + +pre.code .comment, code .comment { + color: #5c6576; } + +pre.code .keyword, code .keyword { + color: #3B0D06; + font-weight: bold; } + +pre.code .literal.string, code .literal.string { + color: #0c5404; } + +pre.code .name.builtin, code .name.builtin { + color: #352b84; } + +pre.code .deleted, code .deleted { + background-color: #DEB0A1; } + +pre.code .inserted, code .inserted { + background-color: #A3D289; } + +span.classifier { + font-style: oblique; } + +span.classifier-delimiter { + font-weight: bold; } + +span.problematic { + color: #b30000; } + +span.section-subtitle { + /* font-size relative to parent (h1..h6 element) */ + font-size: 80%; } + +span.DecNumber { + color: var(--number); } + +span.BinNumber { + color: var(--number); } + +span.HexNumber { + color: var(--number); } + +span.OctNumber { + color: var(--number); } + +span.FloatNumber { + color: var(--number); } + +span.Identifier { + color: var(--identifier); } + +span.Keyword { + font-weight: 600; + color: var(--keyword); } + +span.StringLit { + color: var(--literal); } + +span.LongStringLit { + color: var(--literal); } + +span.CharLit { + color: var(--literal); } + +span.EscapeSequence { + color: var(--escapeSequence); } + +span.Operator { + color: var(--operator); } + +span.Punctuation { + color: var(--punctuation); } + +span.Comment, span.LongComment { + font-style: italic; + font-weight: 400; + color: var(--comment); } + +span.RegularExpression { + color: darkviolet; } + +span.TagStart { + color: darkviolet; } + +span.TagEnd { + color: darkviolet; } + +span.Key { + color: #252dbe; } + +span.Value { + color: #252dbe; } + +span.RawData { + color: var(--raw-data); } + +span.Assembler { + color: #252dbe; } + +span.Preprocessor { + color: #252dbe; } + +span.Directive { + color: #252dbe; } + +span.option { + font-weight: bold; + font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace; + color: var(--option); } + +span.Prompt { + font-weight: bold; + color: red; } + +span.ProgramOutput { + font-weight: bold; + color: #808080; } + +span.program { + font-weight: bold; + color: var(--program); + text-decoration: underline; + text-decoration-color: var(--hint); + text-decoration-thickness: 0.05em; + text-underline-offset: 0.15em; } + +span.Command, span.Rule, span.Hyperlink, +span.Label, span.Reference, span.Other { + color: var(--other); } + +/* Pop type, const, proc, and iterator defs in nim def blocks */ +dt pre > span.Identifier, dt pre > span.Operator { + color: var(--identifier); + font-weight: 700; } + +dt pre > span.Keyword ~ span.Identifier, dt pre > span.Identifier ~ span.Identifier, +dt pre > span.Operator ~ span.Identifier, dt pre > span.Other ~ span.Identifier { + color: var(--identifier); + font-weight: inherit; } + +/* Nim sprite for the footer (taken from main page favicon) */ +.nim-sprite { + display: inline-block; + width: 51px; + height: 14px; + background-position: 0 0; + background-size: 51px 14px; + -webkit-filter: opacity(50%); + filter: opacity(50%); + background-repeat: no-repeat; + background-image: var(--nim-sprite-base64); + margin-bottom: 5px; } + +span.pragmadots { + /* Position: relative frees us up to make the dots + look really nice without fucking up the layout and + causing bulging in the parent container */ + position: relative; + /* 1px down looks slightly nicer */ + top: 1px; + padding: 2px; + background-color: var(--third-background); + border-radius: 4px; + margin: 0 2px; + cursor: pointer; + font-size: 0.8em; } + +span.pragmadots:hover { + background-color: var(--hint); } + +span.pragmawrap { + display: none; } + +span.attachedType { + display: none; + visibility: hidden; } diff --git a/src/fusion/astdsl.html b/src/fusion/astdsl.html new file mode 100644 index 0000000..340b1e1 --- /dev/null +++ b/src/fusion/astdsl.html @@ -0,0 +1,135 @@ + + + + + + + +src/fusion/astdsl + + + + + + + + + + + + +
+
+

src/fusion/astdsl

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

+
+

Macros

+
+
+
+
macro buildAst(children: untyped): NimNode
+
+ + + +
+
+
+
macro buildAst(node, children: untyped): NimNode
+
+ +

A DSL for convenient construction of Nim ASTs (of type NimNode). It composes with all of Nim's control flow constructs.

+

Note: Check The AST in Nim section of macros module on how to construct valid Nim ASTs.

+

Also see dumpTree, dumpAstGen and dumpLisp.

+ +

Example:

+
import macros
+
+macro hello(): untyped =
+  result = buildAst(stmtList):
+    call(bindSym"echo", newLit"Hello world")
+
+macro min(args: varargs[untyped]): untyped =
+  result = buildAst(stmtListExpr):
+    let tmp = genSym(nskVar, "minResult")
+    expectMinLen(args, 1)
+    newVarStmt(tmp, args[0])
+    for i in 1..<args.len:
+      ifStmt:
+        elifBranch(infix(ident"<", args[i], tmp)):
+          asgn(tmp, args[i])
+    tmp
+
+assert min("d", "c", "b", "a") == "a"
+ +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/astdsl.idx b/src/fusion/astdsl.idx new file mode 100644 index 0000000..cb6efb7 --- /dev/null +++ b/src/fusion/astdsl.idx @@ -0,0 +1,4 @@ +nimTitle astdsl src/fusion/astdsl.html module src/fusion/astdsl 0 +nim buildAst src/fusion/astdsl.html#buildAst.m,untyped,untyped macro buildAst(node, children: untyped): NimNode 96 +nim buildAst src/fusion/astdsl.html#buildAst.m,untyped macro buildAst(children: untyped): NimNode 136 +nimgrp buildast src/fusion/astdsl.html#buildAst-macros-all macro 96 diff --git a/src/fusion/btreetables.html b/src/fusion/btreetables.html new file mode 100644 index 0000000..9cbb7a6 --- /dev/null +++ b/src/fusion/btreetables.html @@ -0,0 +1,2922 @@ + + + + + + + +src/fusion/btreetables + + + + + + + + + + + + +
+
+

src/fusion/btreetables

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

+
+

Types

+
+
+
CountTable[A] = object
+
+ +

Table that counts the number of each key.

+

For creating an empty CountTable, use initCountTable proc.

+ + +
+
+
+
CountTableRef[A] = ref CountTable[A]
+
+ +

Ref version of CountTable.

+

For creating a new empty CountTableRef, use newCountTable proc.

+ + +
+
+
+
OrderedTable[A; B] = object
+
+ +

Table that remembers insertion order.

+

For creating an empty OrderedTable, use initOrderedTable proc.

+ + +
+
+
+
OrderedTableRef[A; B] = ref OrderedTable[A, B]
+
+ +

Ref version of OrderedTable.

+

For creating a new empty OrderedTableRef, use newOrderedTable proc.

+ + +
+
+
+
Table[A; B] = object
+
+ +

Generic sorted table, consisting of key-value pairs.

+

root and entries are internal implementation details which cannot be directly accessed.

+

For creating an empty Table, use initTable proc.

+ + +
+
+
+
TableRef[A; B] = ref Table[A, B]
+
+ +

Ref version of Table.

+

For creating a new empty TableRef, use newTable proc.

+ + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`[A, B](t: OrderedTable[A, B]): string
+
+ + The $ operator for ordered tables. Used internally when calling echo on a table. + +
+
+
+
proc `$`[A, B](t: OrderedTableRef[A, B]): string
+
+ + The $ operator for ordered tables. Used internally when calling echo on a table. + +
+
+
+
proc `$`[A, B](t: Table[A, B]): string
+
+ + The $ operator for tables. Used internally when calling echo on a table. + +
+
+
+
proc `$`[A, B](t: TableRef[A, B]): string
+
+ + The $ operator for tables. Used internally when calling echo on a table. + +
+
+
+
proc `$`[A](t: CountTable[A]): string
+
+ + The $ operator for count tables. Used internally when calling echo on a table. + +
+
+
+
proc `$`[A](t: CountTableRef[A]): string
+
+ + The $ operator for count tables. Used internally when calling echo on a table. + +
+
+ +
+
+
+
proc `==`[A, B](a, b: Table[A, B]): bool
+
+ +

The == operator for Tables.

+

Returns true if the content of both tables contains the same key-value pairs. Insert order does not matter.

+ +

Example:

+
let
+  a = {'a': 5, 'b': 9, 'c': 13}.toTable
+  b = {'b': 9, 'c': 13, 'a': 5}.toTable
+doAssert a == b
+ +
+
+
+
proc `==`[A, B](s, t: OrderedTable[A, B]): bool
+
+ + The == operator for ordered tables. Returns true if both the content and the order are equal. +

Example:

+
let
+  a = {'a': 5, 'b': 9, 'c': 13}.toOrderedTable
+  b = {'b': 9, 'c': 13, 'a': 5}.toOrderedTable
+doAssert a != b
+ +
+
+
+
proc `==`[A, B](s, t: OrderedTableRef[A, B]): bool
+
+ + The == operator for ordered tables. Returns true if either both tables are nil, or neither is nil and the content and the order of both are equal. +

Example:

+
let
+  a = {'a': 5, 'b': 9, 'c': 13}.newOrderedTable
+  b = {'b': 9, 'c': 13, 'a': 5}.newOrderedTable
+doAssert a != b
+ +
+
+
+
proc `==`[A, B](s, t: TableRef[A, B]): bool
+
+ + The == operator for tables. Returns true if either both tables are nil, or neither is nil and the content of both tables contains the same key-value pairs. Insert order does not matter. +

Example:

+
let
+  a = {'a': 5, 'b': 9, 'c': 13}.newTable
+  b = {'b': 9, 'c': 13, 'a': 5}.newTable
+doAssert a == b
+ +
+
+
+
proc `==`[A](s, t: CountTable[A]): bool
+
+ + The == operator for count tables. Returns true if both tables contain the same keys with the same count. Insert order does not matter. + +
+
+
+
proc `==`[A](s, t: CountTableRef[A]): bool
+
+ + The == operator for count tables. Returns true if either both tables are nil, or neither is nil and both contain the same keys with the same count. Insert order does not matter. + +
+
+ +
+
+
+
proc `[]`[A, B](t: OrderedTable[A, B]; key: A): B
+
+ +

Retrieves the value at t[key].

+

If key is not in t, the KeyError exception is raised. One can check with hasKey proc whether the key exists.

+

See also:

+
  • getOrDefault proc to return a default value (e.g. zero for int) if the key doesn't exist
  • +
  • getOrDefault proc to return a custom value if the key doesn't exist
  • +
  • []= proc for inserting a new (key, value) pair in the table
  • +
  • hasKey proc for checking if a key is in the table
  • +
+ +

Example:

+
let a = {'a': 5, 'b': 9}.toOrderedTable
+doAssert a['a'] == 5
+doAssertRaises(KeyError):
+  echo a['z']
+ +
+
+
+
proc `[]`[A, B](t: OrderedTableRef[A, B]; key: A): var B
+
+ +

Retrieves the value at t[key].

+

If key is not in t, the KeyError exception is raised. One can check with hasKey proc whether the key exists.

+

See also:

+
  • getOrDefault proc to return a default value (e.g. zero for int) if the key doesn't exist
  • +
  • getOrDefault proc to return a custom value if the key doesn't exist
  • +
  • []= proc for inserting a new (key, value) pair in the table
  • +
  • hasKey proc for checking if a key is in the table
  • +
+ +

Example:

+
let a = {'a': 5, 'b': 9}.newOrderedTable
+doAssert a['a'] == 5
+doAssertRaises(KeyError):
+  echo a['z']
+ +
+
+
+
proc `[]`[A, B](t: Table[A, B]; x: A): B
+
+ +

Retrieves the value at t[key].

+

If key is not in t, the KeyError exception is raised. One can check with hasKey proc whether the key exists.

+

See also:

+
  • getOrDefault proc to return a default value (e.g. zero for int) if the key doesn't exist
  • +
  • getOrDefault proc to return a custom value if the key doesn't exist
  • +
  • []= proc for inserting a new (key, value) pair in the table
  • +
  • hasKey proc for checking if a key is in the table
  • +
+ +

Example:

+
let a = {'a': 5, 'b': 9}.toTable
+doAssert a['a'] == 5
+doAssertRaises(KeyError):
+  echo a['z']
+ +
+
+
+
proc `[]`[A, B](t: TableRef[A, B]; key: A): var B
+
+ +

Retrieves the value at t[key].

+

If key is not in t, the KeyError exception is raised. One can check with hasKey proc whether the key exists.

+

See also:

+
  • getOrDefault proc to return a default value (e.g. zero for int) if the key doesn't exist
  • +
  • getOrDefault proc to return a custom value if the key doesn't exist
  • +
  • []= proc for inserting a new (key, value) pair in the table
  • +
  • hasKey proc for checking if a key is in the table
  • +
+ +

Example:

+
let a = {'a': 5, 'b': 9}.newTable
+doAssert a['a'] == 5
+doAssertRaises(KeyError):
+  echo a['z']
+ +
+
+
+
proc `[]`[A, B](t: var OrderedTable[A, B]; key: A): var B
+
+ +

Retrieves the value at t[key]. The value can be modified.

+

If key is not in t, the KeyError exception is raised.

+

See also:

+
  • getOrDefault proc to return a default value (e.g. zero for int) if the key doesn't exist
  • +
  • getOrDefault proc to return a custom value if the key doesn't exist
  • +
  • []= proc for inserting a new (key, value) pair in the table
  • +
  • hasKey proc for checking if a key is in the table
  • +
+ + +
+
+
+
proc `[]`[A, B](t: var Table[A, B]; x: A): var B
+
+ +

Retrieves the value at t[key]. The value can be modified.

+

If key is not in t, the KeyError exception is raised.

+

See also:

+
  • getOrDefault proc to return a default value (e.g. zero for int) if the key doesn't exist
  • +
  • getOrDefault proc to return a custom value if the key doesn't exist
  • +
  • []= proc for inserting a new (key, value) pair in the table
  • +
  • hasKey proc for checking if a key is in the table
  • +
+ + +
+
+
+
proc `[]`[A](t: CountTable[A]; key: A): int
+
+ +

Retrieves the value at t[key] if key is in t. Otherwise 0 is returned.

+

See also:

+ + + +
+
+
+
proc `[]`[A](t: CountTableRef[A]; key: A): int
+
+ +

Retrieves the value at t[key] if key is in t. Otherwise 0 is returned.

+

See also:

+ + + +
+
+ +
+
+
+
proc `[]=`[A, B](t: OrderedTableRef[A, B]; key: A; val: B)
+
+ +

Inserts a (key, value) pair into t.

+

See also:

+ + +

Example:

+
var a = newOrderedTable[char, int]()
+a['x'] = 7
+a['y'] = 33
+doAssert a == {'x': 7, 'y': 33}.newOrderedTable
+ +
+
+
+
proc `[]=`[A, B](t: TableRef[A, B]; key: A; val: B)
+
+ +

Inserts a (key, value) pair into t.

+

See also:

+ + +

Example:

+
var a = newTable[char, int]()
+a['x'] = 7
+a['y'] = 33
+doAssert a == {'x': 7, 'y': 33}.newTable
+ +
+
+
+
proc `[]=`[A, B](t: var OrderedTable[A, B]; k: A; v: B)
+
+ +

Inserts a (key, value) pair into t.

+

See also:

+ + +

Example:

+
var a = initOrderedTable[char, int]()
+a['x'] = 7
+a['y'] = 33
+doAssert a == {'x': 7, 'y': 33}.toOrderedTable
+ +
+
+
+
proc `[]=`[A, B](t: var Table[A, B]; key: A; val: B)
+
+ + + +
+
+
+
proc `[]=`[A](t: CountTableRef[A]; key: A; val: int)
+
+ +

Inserts a (key, value) pair into t.

+

See also:

+
  • [] proc for retrieving a value of a key
  • +
  • inc proc for incrementing a value of a key
  • +
+ + +
+
+
+
proc `[]=`[A](t: var CountTable[A]; key: A; val: int)
+
+ +

Inserts a (key, value) pair into t.

+

See also:

+
  • [] proc for retrieving a value of a key
  • +
  • inc proc for incrementing a value of a key
  • +
+ + +
+
+ +
+
+
+
proc add[A, B](t: var OrderedTable[A, B]; key: A; val: B)
+
+ + + +
+
+ +
+
+
+
proc clear[A, B](t: OrderedTableRef[A, B])
+
+ +

Resets the table so that it is empty.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9, 'c': 13}.newOrderedTable
+doAssert len(a) == 3
+clear(a)
+doAssert len(a) == 0
+ +
+
+
+
proc clear[A, B](t: TableRef[A, B])
+
+ +

Resets the table so that it is empty.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9, 'c': 13}.newTable
+doAssert len(a) == 3
+clear(a)
+doAssert len(a) == 0
+ +
+
+
+
proc clear[A, B](t: var OrderedTable[A, B])
+
+ +

Resets the table so that it is empty.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9, 'c': 13}.toOrderedTable
+doAssert len(a) == 3
+clear(a)
+doAssert len(a) == 0
+ +
+
+
+
proc clear[A, B](t: var Table[A, B])
+
+ +

Resets the table so that it is empty.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9, 'c': 13}.toTable
+doAssert len(a) == 3
+clear(a)
+doAssert len(a) == 0
+ +
+
+
+
proc clear[A](t: CountTableRef[A])
+
+ +

Resets the table so that it is empty.

+

See also:

+ + + +
+
+
+
proc clear[A](t: var CountTable[A])
+
+ +

Resets the table so that it is empty.

+

See also:

+ + + +
+
+ +
+
+
+
proc contains[A, B](t: OrderedTable[A, B]; key: A): bool
+
+ + Alias of hasKey proc for use with the in operator. +

Example:

+
let a = {'a': 5, 'b': 9}.toOrderedTable
+doAssert 'b' in a == true
+doAssert a.contains('z') == false
+ +
+
+
+
proc contains[A, B](t: OrderedTableRef[A, B]; key: A): bool
+
+ + Alias of hasKey proc for use with the in operator. +

Example:

+
let a = {'a': 5, 'b': 9}.newOrderedTable
+doAssert 'b' in a == true
+doAssert a.contains('z') == false
+ +
+
+
+
proc contains[A, B](t: Table[A, B]; x: A): bool
+
+ + Alias of hasKey proc for use with the in operator. +

Example:

+
let a = {'a': 5, 'b': 9}.toTable
+doAssert 'b' in a == true
+doAssert a.contains('z') == false
+ +
+
+
+
proc contains[A, B](t: TableRef[A, B]; key: A): bool
+
+ + Alias of hasKey proc for use with the in operator. +

Example:

+
let a = {'a': 5, 'b': 9}.newTable
+doAssert 'b' in a == true
+doAssert a.contains('z') == false
+ +
+
+
+
proc contains[A](t: CountTable[A]; key: A): bool
+
+ + Alias of hasKey proc for use with the in operator. + +
+
+
+
proc contains[A](t: CountTableRef[A]; key: A): bool
+
+ + Alias of hasKey proc for use with the in operator. + +
+
+ +
+
+
+
proc del[A, B](t: OrderedTableRef[A, B]; key: A)
+
+ +

Deletes key from table t. Does nothing if the key does not exist.

+

NOTE: This proc is destructive: the original order of the elements is not preserved!

+

If you want to keep the order of elements after removal, use delete proc.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9, 'c': 13}.newOrderedTable
+a.del('a')
+doAssert a == {'c': 13, 'b': 9}.newOrderedTable
+a.del('z')
+doAssert a == {'c': 13, 'b': 9}.newOrderedTable
+ +
+
+
+
proc del[A, B](t: TableRef[A, B]; key: A)
+
+ +

Deletes key from table t. Does nothing if the key does not exist.

+

If duplicate keys were added, this may need to be called multiple times.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9, 'c': 13}.newTable
+a.del('a')
+doAssert a == {'b': 9, 'c': 13}.newTable
+a.del('z')
+doAssert a == {'b': 9, 'c': 13}.newTable
+ +
+
+
+
proc del[A, B](t: var OrderedTable[A, B]; key: A)
+
+ +

Deletes key from table t. Does nothing if the key does not exist.

+

NOTE: This proc is destructive: the original order of the elements is not preserved!

+

If you want to keep the order of elements after removal, use delete proc.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9, 'c': 13}.toOrderedTable
+a.del('a')
+doAssert a == {'c': 13, 'b': 9}.toOrderedTable
+a.del('z')
+doAssert a == {'c': 13, 'b': 9}.toOrderedTable
+ +
+
+
+
proc del[A, B](t: var Table[A, B]; key: A)
+
+ +

Deletes key from table t. Does nothing if the key does not exist.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9, 'c': 13}.toTable
+a.del('a')
+doAssert a == {'b': 9, 'c': 13}.toTable
+a.del('z')
+doAssert a == {'b': 9, 'c': 13}.toTable
+ +
+
+
+
proc del[A](t: CountTableRef[A]; key: A)
+
+ +

Deletes key from table t. Does nothing if the key does not exist.

+

O(n) complexity.

+

See also:

+ + + +
+
+
+
proc del[A](t: var CountTable[A]; key: A)
+
+ +

Deletes key from table t. Does nothing if the key does not exist.

+

O(n) complexity.

+

See also:

+ + +

Example:

+
var a = toCountTable("aabbbccccc")
+a.del('b')
+assert a == toCountTable("aaccccc")
+a.del('b')
+assert a == toCountTable("aaccccc")
+a.del('c')
+assert a == toCountTable("aa")
+ +
+
+ +
+
+
+
proc delete[A, B](t: OrderedTableRef[A, B]; key: A)
+
+ +

Deletes key from table t. Does nothing if the key does not exist.

+

O(n) complexity.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9, 'c': 13}.toOrderedTable
+a.delete('a')
+doAssert a == {'b': 9, 'c': 13}.toOrderedTable
+a.delete('z')
+doAssert a == {'b': 9, 'c': 13}.toOrderedTable
+ +
+
+
+
proc delete[A, B](t: var OrderedTable[A, B]; key: A)
+
+ +

Deletes key from table t. Does nothing if the key does not exist.

+

O(n) complexity.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9, 'c': 13}.toOrderedTable
+a.delete('a')
+doAssert a == {'b': 9, 'c': 13}.toOrderedTable
+a.delete('z')
+doAssert a == {'b': 9, 'c': 13}.toOrderedTable
+ +
+
+ +
+
+
+
proc getOrDefault[A, B](t: OrderedTable[A, B]; key: A): B
+
+ +

Retrieves the value at t[key] if key is in t. Otherwise, the default initialization value for type B is returned (e.g. 0 for any integer type).

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.toOrderedTable
+doAssert a.getOrDefault('a') == 5
+doAssert a.getOrDefault('z') == 0
+ +
+
+
+
proc getOrDefault[A, B](t: OrderedTable[A, B]; key: A; default: B): B
+
+ +

Retrieves the value at t[key] if key is in t. Otherwise, default is returned.

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.toOrderedTable
+doAssert a.getOrDefault('a', 99) == 5
+doAssert a.getOrDefault('z', 99) == 99
+ +
+
+
+
proc getOrDefault[A, B](t: OrderedTableRef[A, B]; key: A): B
+
+ +

Retrieves the value at t[key] if key is in t. Otherwise, the default initialization value for type B is returned (e.g. 0 for any integer type).

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.newOrderedTable
+doAssert a.getOrDefault('a') == 5
+doAssert a.getOrDefault('z') == 0
+ +
+
+
+
proc getOrDefault[A, B](t: OrderedTableRef[A, B]; key: A; default: B): B
+
+ +

Retrieves the value at t[key] if key is in t. Otherwise, default is returned.

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.newOrderedTable
+doAssert a.getOrDefault('a', 99) == 5
+doAssert a.getOrDefault('z', 99) == 99
+ +
+
+
+
proc getOrDefault[A, B](t: Table[A, B]; x: A): B
+
+ +

Retrieves the value at t[key] if key is in t. Otherwise, the default initialization value for type B is returned (e.g. 0 for any integer type).

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.toTable
+doAssert a.getOrDefault('a') == 5
+doAssert a.getOrDefault('z') == 0
+ +
+
+
+
proc getOrDefault[A, B](t: Table[A, B]; x: A; default: B): B
+
+ +

Retrieves the value at t[key] if key is in t. Otherwise, default is returned.

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.toTable
+doAssert a.getOrDefault('a', 99) == 5
+doAssert a.getOrDefault('z', 99) == 99
+ +
+
+
+
proc getOrDefault[A, B](t: TableRef[A, B]; key: A): B
+
+ +

Retrieves the value at t[key] if key is in t. Otherwise, the default initialization value for type B is returned (e.g. 0 for any integer type).

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.newTable
+doAssert a.getOrDefault('a') == 5
+doAssert a.getOrDefault('z') == 0
+ +
+
+
+
proc getOrDefault[A, B](t: TableRef[A, B]; key: A; default: B): B
+
+ +

Retrieves the value at t[key] if key is in t. Otherwise, default is returned.

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.newTable
+doAssert a.getOrDefault('a', 99) == 5
+doAssert a.getOrDefault('z', 99) == 99
+ +
+
+
+
proc getOrDefault[A](t: CountTable[A]; key: A; default: int = 0): int
+
+ +

Retrieves the value at t[key] ifkey is in t. Otherwise, the integer value of default is returned.

+

See also:

+
  • [] proc for retrieving a value of a key
  • +
  • hasKey proc for checking if a key is in the table
  • +
+ + +
+
+
+
proc getOrDefault[A](t: CountTableRef[A]; key: A; default: int): int
+
+ +

Retrieves the value at t[key] ifkey is in t. Otherwise, the integer value of default is returned.

+

See also:

+
  • [] proc for retrieving a value of a key
  • +
  • hasKey proc for checking if a key is in the table
  • +
+ + +
+
+ +
+
+
+
proc hasKey[A, B](t: OrderedTable[A, B]; key: A): bool
+
+ +

Returns true if key is in the table t.

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.toOrderedTable
+doAssert a.hasKey('a') == true
+doAssert a.hasKey('z') == false
+ +
+
+
+
proc hasKey[A, B](t: OrderedTableRef[A, B]; key: A): bool
+
+ +

Returns true if key is in the table t.

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.newOrderedTable
+doAssert a.hasKey('a') == true
+doAssert a.hasKey('z') == false
+ +
+
+
+
proc hasKey[A, B](t: Table[A, B]; x: A): bool
+
+ +

Returns true if key is in the table t.

+

See also:

+ + + +
+
+
+
proc hasKey[A, B](t: TableRef[A, B]; key: A): bool
+
+ +

Returns true if key is in the table t.

+

See also:

+ + +

Example:

+
let a = {'a': 5, 'b': 9}.newTable
+doAssert a.hasKey('a') == true
+doAssert a.hasKey('z') == false
+ +
+
+
+
proc hasKey[A](t: CountTable[A]; key: A): bool
+
+ +

Returns true if key is in the table t.

+

See also:

+ + + +
+
+
+
proc hasKey[A](t: CountTableRef[A]; key: A): bool
+
+ +

Returns true if key is in the table t.

+

See also:

+ + + +
+
+ +
+
+
+
proc hasKeyOrPut[A, B](t: var OrderedTable[A, B]; key: A; val: B): bool
+
+ +

Returns true if key is in the table, otherwise inserts value.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9}.toOrderedTable
+if a.hasKeyOrPut('a', 50):
+  a['a'] = 99
+if a.hasKeyOrPut('z', 50):
+  a['z'] = 99
+doAssert a == {'a': 99, 'b': 9, 'z': 50}.toOrderedTable
+ +
+
+
+
proc hasKeyOrPut[A, B](t: var OrderedTableRef[A, B]; key: A; val: B): bool
+
+ +

Returns true if key is in the table, otherwise inserts value.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9}.newOrderedTable
+if a.hasKeyOrPut('a', 50):
+  a['a'] = 99
+if a.hasKeyOrPut('z', 50):
+  a['z'] = 99
+doAssert a == {'a': 99, 'b': 9, 'z': 50}.newOrderedTable
+ +
+
+
+
proc hasKeyOrPut[A, B](t: var Table[A, B]; key: A; val: B): bool
+
+ +

Returns true if key is in the table, otherwise inserts value.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9}.toTable
+if a.hasKeyOrPut('a', 50):
+  a['a'] = 99
+if a.hasKeyOrPut('z', 50):
+  a['z'] = 99
+doAssert a == {'a': 99, 'b': 9, 'z': 50}.toTable
+ +
+
+
+
proc hasKeyOrPut[A, B](t: var TableRef[A, B]; key: A; val: B): bool
+
+ +

Returns true if key is in the table, otherwise inserts value.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9}.newTable
+if a.hasKeyOrPut('a', 50):
+  a['a'] = 99
+if a.hasKeyOrPut('z', 50):
+  a['z'] = 99
+doAssert a == {'a': 99, 'b': 9, 'z': 50}.newTable
+ +
+
+ +
+
+
+
proc inc[A](t: CountTableRef[A]; key: A; val = 1)
+
+ + + +
+
+
+
proc inc[A](t: var CountTable[A]; key: A; val: Positive = 1)
+
+ + + +
+
+ +
+
+
+
proc initCountTable[A](initialSize = 64): CountTable[A]
+
+ +

Creates a new count table that is empty.

+

Starting from Nim v0.20, tables are initialized by default and it is not necessary to call this function explicitly.

+

See also:

+ + + +
+
+ +
+
+
+
proc initOrderedTable[A, B](initialSize = 64): OrderedTable[A, B]
+
+ +

Creates a new ordered table that is empty.

+

Starting from Nim v0.20, tables are initialized by default and it is not necessary to call this function explicitly.

+

See also:

+ + +

Example:

+
let
+  a = initOrderedTable[int, string]()
+  b = initOrderedTable[char, seq[int]]()
+ +
+
+ +
+
+
+
proc initTable[A, B](initialSize = 0): Table[A, B]
+
+ +

Creates a new empty Table.

+

The initialSize parameter is there to be compatible with the hash table API, it has no effect on BTree tables.

+

See also:

+ + +

Example:

+
let
+  a = initTable[int, string]()
+  b = initTable[char, seq[int]]()
+ +
+
+ +
+
+
+
proc largest[A](t: CountTable[A]): tuple[key: A, val: int]
+
+ +

Returns the (key, value) pair with the largest val. Efficiency: O(n)

+

See also:

+ + + +
+
+
+
proc largest[A](t: CountTableRef[A]): (A, int)
+
+ +

Returns the (key, value) pair with the largest val. Efficiency: O(n)

+

See also:

+ + + +
+
+ +
+
+
+
proc len[A, B](t: OrderedTable[A, B]): int {.inline.}
+
+ + Returns the number of keys in t. +

Example:

+
let a = {'a': 5, 'b': 9}.toOrderedTable
+doAssert len(a) == 2
+ +
+
+
+
proc len[A, B](t: OrderedTableRef[A, B]): int {.inline.}
+
+ + Returns the number of keys in t. +

Example:

+
let a = {'a': 5, 'b': 9}.newOrderedTable
+doAssert len(a) == 2
+ +
+
+
+
proc len[A, B](t: Table[A, B]): int {.inline.}
+
+ + Returns the number of keys in t. +

Example:

+
let a = {'a': 5, 'b': 9}.toTable
+doAssert len(a) == 2
+ +
+
+
+
proc len[A, B](t: TableRef[A, B]): int
+
+ + Returns the number of keys in t. +

Example:

+
let a = {'a': 5, 'b': 9}.newTable
+doAssert len(a) == 2
+ +
+
+
+
proc len[A](t: CountTable[A]): int
+
+ + Returns the number of keys in t. + +
+
+
+
proc len[A](t: CountTableRef[A]): int
+
+ + Returns the number of keys in t. + +
+
+ +
+
+
+
proc merge[A](s, t: CountTableRef[A])
+
+ + Merges the second table into the first one. +

Example:

+
let
+  a = newCountTable("aaabbc")
+  b = newCountTable("bcc")
+a.merge(b)
+doAssert a == newCountTable("aaabbbccc")
+ +
+
+
+
proc merge[A](s: var CountTable[A]; t: CountTable[A])
+
+ + Merges the second table into the first one (must be declared as var). +

Example:

+
var a = toCountTable("aaabbc")
+let b = toCountTable("bcc")
+a.merge(b)
+doAssert a == toCountTable("aaabbbccc")
+ +
+
+ +
+
+
+
proc mgetOrPut[A, B](t: OrderedTableRef[A, B]; key: A; val: B): var B
+
+ +

Retrieves value at t[key] or puts val if not present, either way returning a value which can be modified.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9}.newOrderedTable
+doAssert a.mgetOrPut('a', 99) == 5
+doAssert a.mgetOrPut('z', 99) == 99
+doAssert a == {'a': 5, 'b': 9, 'z': 99}.newOrderedTable
+ +
+
+
+
proc mgetOrPut[A, B](t: TableRef[A, B]; key: A; val: B): var B
+
+ +

Retrieves value at t[key] or puts val if not present, either way returning a value which can be modified.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9}.newTable
+doAssert a.mgetOrPut('a', 99) == 5
+doAssert a.mgetOrPut('z', 99) == 99
+doAssert a == {'a': 5, 'b': 9, 'z': 99}.newTable
+ +
+
+
+
proc mgetOrPut[A, B](t: var OrderedTable[A, B]; key: A; val: B): var B
+
+ +

Retrieves value at t[key] or puts val if not present, either way returning a value which can be modified.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9}.toOrderedTable
+doAssert a.mgetOrPut('a', 99) == 5
+doAssert a.mgetOrPut('z', 99) == 99
+doAssert a == {'a': 5, 'b': 9, 'z': 99}.toOrderedTable
+ +
+
+
+
proc mgetOrPut[A, B](t: var Table[A, B]; key: A; val: B): var B
+
+ +

Retrieves value at t[key] or puts val if not present, either way returning a value which can be modified.

+

See also:

+ + +

Example:

+
var a = {'a': 5, 'b': 9}.toTable
+doAssert a.mgetOrPut('a', 99) == 5
+doAssert a.mgetOrPut('z', 99) == 99
+doAssert a == {'a': 5, 'b': 9, 'z': 99}.toTable
+ +
+
+ +
+
+
+
proc newCountTable[A](initialSize = 64): CountTableRef[A]
+
+ +

Creates a new ref count table that is empty.

+

See also:

+ + + +
+
+
+
proc newCountTable[A](keys: openArray[A]): CountTableRef[A]
+
+ + Creates a new ref count table with every member of a container keys having a count of how many times it occurs in that container. + +
+
+ +
+
+
+
proc newOrderedTable[A, B](initialSize = 64): OrderedTableRef[A, B]
+
+ +

Creates a new ordered ref table that is empty.

+

See also:

+ + +

Example:

+
let
+  a = newOrderedTable[int, string]()
+  b = newOrderedTable[char, seq[int]]()
+ +
+
+
+
proc newOrderedTable[A, B](pairs: openArray[(A, B)]): OrderedTableRef[A, B]
+
+ +

Creates a new ordered ref table that contains the given pairs.

+

pairs is a container consisting of (key, value) tuples.

+

See also:

+ + +

Example:

+
let a = [('a', 5), ('b', 9)]
+let b = newOrderedTable(a)
+assert b == {'a': 5, 'b': 9}.newOrderedTable
+ +
+
+ +
+
+
+
proc newTable[A, B](): TableRef[A, B]
+
+ +

Creates a new ref table that is empty.

+

initialSize must be a power of two (default: 64). If you need to accept runtime values for this you could use the nextPowerOfTwo proc from the math module or the rightSize proc from this module.

+

See also:

+ + +

Example:

+
let
+  a = newTable[int, string]()
+  b = newTable[char, seq[int]]()
+ +
+
+
+
proc newTable[A, B](pairs: openArray[(A, B)]): TableRef[A, B]
+
+ +

Creates a new ref table that contains the given pairs.

+

pairs is a container consisting of (key, value) tuples.

+

See also:

+ + +

Example:

+
let a = [('a', 5), ('b', 9)]
+let b = newTable(a)
+assert b == {'a': 5, 'b': 9}.newTable
+ +
+
+ +
+
+
+
proc newTableFrom[A, B, C](collection: A; index: proc (x: B): C): TableRef[C, B]
+
+ + Index the collection with the proc provided. + +
+
+ +
+
+
+
proc pop[A, B](t: OrderedTableRef[A, B]; key: A; val: var B): bool
+
+ +

Deletes the key from the table. Returns true, if the key existed, and sets val to the mapping of the key. Otherwise, returns false, and the val is unchanged.

+

See also:

+ + +

Example:

+
var
+  a = {'c': 5, 'b': 9, 'a': 13}.newOrderedTable
+  i: int
+doAssert a.pop('b', i) == true
+doAssert a == {'c': 5, 'a': 13}.newOrderedTable
+doAssert i == 9
+i = 0
+doAssert a.pop('z', i) == false
+doAssert a == {'c': 5, 'a': 13}.newOrderedTable
+doAssert i == 0
+ +
+
+
+
proc pop[A, B](t: TableRef[A, B]; key: A; val: var B): bool
+
+ +

Deletes the key from the table. Returns true, if the key existed, and sets val to the mapping of the key. Otherwise, returns false, and the val is unchanged.

+

If duplicate keys were added, this may need to be called multiple times.

+

See also:

+ + +

Example:

+
var
+  a = {'a': 5, 'b': 9, 'c': 13}.newTable
+  i: int
+doAssert a.pop('b', i) == true
+doAssert a == {'a': 5, 'c': 13}.newTable
+doAssert i == 9
+i = 0
+doAssert a.pop('z', i) == false
+doAssert a == {'a': 5, 'c': 13}.newTable
+doAssert i == 0
+ +
+
+
+
proc pop[A, B](t: var OrderedTable[A, B]; key: A; val: var B): bool
+
+ +

Deletes the key from the table. Returns true, if the key existed, and sets val to the mapping of the key. Otherwise, returns false, and the val is unchanged.

+

O(n) complexity.

+

See also:

+ + +

Example:

+
var
+  a = {'c': 5, 'b': 9, 'a': 13}.toOrderedTable
+  i: int
+doAssert a.pop('b', i) == true
+doAssert a == {'c': 5, 'a': 13}.toOrderedTable
+doAssert i == 9
+i = 0
+doAssert a.pop('z', i) == false
+doAssert a == {'c': 5, 'a': 13}.toOrderedTable
+doAssert i == 0
+ +
+
+
+
proc pop[A, B](t: var Table[A, B]; key: A; val: var B): bool
+
+ +

Deletes the key from the table. Returns true, if the key existed, and sets val to the mapping of the key. Otherwise, returns false, and the val is unchanged.

+

See also:

+ + +

Example:

+
var
+  a = {'a': 5, 'b': 9, 'c': 13}.toTable
+  i: int
+doAssert a.pop('b', i) == true
+doAssert a == {'a': 5, 'c': 13}.toTable
+doAssert i == 9
+i = 0
+doAssert a.pop('z', i) == false
+doAssert a == {'a': 5, 'c': 13}.toTable
+doAssert i == 0
+ +
+
+
+
proc pop[A](t: CountTableRef[A]; key: A; val: var int): bool
+
+ +

Deletes the key from the table. Returns true, if the key existed, and sets val to the mapping of the key. Otherwise, returns false, and the val is unchanged.

+

O(n) complexity.

+

See also:

+ + + +
+
+
+
proc pop[A](t: var CountTable[A]; key: A; val: var int): bool
+
+ +

Deletes the key from the table. Returns true, if the key existed, and sets val to the mapping of the key. Otherwise, returns false, and the val is unchanged.

+

O(n) complexity.

+

See also:

+ + +

Example:

+
var a = toCountTable("aabbbccccc")
+var i = 0
+assert a.pop('b', i)
+assert i == 3
+i = 99
+assert not a.pop('b', i)
+assert i == 99
+ +
+
+ +
+
+
+
proc smallest[A](t: CountTable[A]): tuple[key: A, val: int]
+
+ +

Returns the (key, value) pair with the smallest val. Efficiency: O(n)

+

See also:

+ + + +
+
+
+
proc smallest[A](t: CountTableRef[A]): (A, int)
+
+ +

Returns the (key, value) pair with the smallest val. Efficiency: O(n)

+

See also:

+ + + +
+
+ +
+
+
+
proc take[A, B](t: TableRef[A, B]; key: A; val: var B): bool {.inline.}
+
+ + Alias for: + + +
+
+
+
proc take[A, B](t: var Table[A, B]; key: A; val: var B): bool
+
+ + Alias for: + + +
+
+ +
+
+
+
proc toCountTable[A](keys: openArray[A]): CountTable[A]
+
+ + Creates a new count table with every member of a container keys having a count of how many times it occurs in that container. + +
+
+ +
+
+
+
proc toOrderedTable[A, B](pairs: openArray[(A, B)]): OrderedTable[A, B]
+
+ +

Creates a new ordered table that contains the given pairs.

+

pairs is a container consisting of (key, value) tuples.

+

See also:

+ + +

Example:

+
let a = [('a', 5), ('b', 9)]
+let b = toOrderedTable(a)
+assert b == {'a': 5, 'b': 9}.toOrderedTable
+ +
+
+ +
+
+
+
proc toTable[A, B](pairs: openArray[(A, B)]): Table[A, B]
+
+ +

Creates a new Table which contains the given pairs.

+

pairs is a container consisting of (key, value) tuples.

+

See also:

+ + +

Example:

+
let a = [('a', 5), ('b', 9)]
+let b = toTable(a)
+assert b == {'a': 5, 'b': 9}.toTable
+ +
+
+ +
+ +
+
+
+

Iterators

+
+
+
+
iterator keys[A, B](t: OrderedTable[A, B]): A
+
+ +

Iterates over any key in the table t in insertion order.

+

See also:

+ + +

Example:

+
var a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.toOrderedTable
+for k in a.keys:
+  a[k].add(99)
+doAssert a == {'o': @[1, 5, 7, 9, 99],
+               'e': @[2, 4, 6, 8, 99]}.toOrderedTable
+ +
+
+
+
iterator keys[A, B](t: OrderedTableRef[A, B]): A
+
+ +

Iterates over any key in the table t in insertion order.

+

See also:

+ + +

Example:

+
let a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.newOrderedTable
+for k in a.keys:
+  a[k].add(99)
+doAssert a == {'o': @[1, 5, 7, 9, 99], 'e': @[2, 4, 6, 8,
+    99]}.newOrderedTable
+ +
+
+
+
iterator keys[A, B](t: Table[A, B]): A
+
+ +

Iterates over all the keys in the table t.

+

See also:

+ + +

Example:

+
var a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.toTable
+for k in a.keys:
+  a[k].add(99)
+doAssert a == {'e': @[2, 4, 6, 8, 99], 'o': @[1, 5, 7, 9, 99]}.toTable
+ +
+
+
+
iterator keys[A, B](t: TableRef[A, B]): A
+
+ +

Iterates over any key in the table t.

+

See also:

+ + +

Example:

+
let a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.newTable
+for k in a.keys:
+  a[k].add(99)
+doAssert a == {'e': @[2, 4, 6, 8, 99], 'o': @[1, 5, 7, 9, 99]}.newTable
+ +
+
+
+
iterator keys[A](t: CountTable[A]): A
+
+ +

Iterates over any key in the table t.

+

See also:

+ + +

Example:

+
var a = toCountTable("abracadabra")
+for k in keys(a):
+  a[k] = 2
+doAssert a == toCountTable("aabbccddrr")
+ +
+
+
+
iterator keys[A](t: CountTableRef[A]): A
+
+ +

Iterates over any key in the table t.

+

See also:

+ + +

Example:

+
let a = newCountTable("abracadabra")
+for k in keys(a):
+  a[k] = 2
+doAssert a == newCountTable("aabbccddrr")
+ +
+
+ +
+
+
+
iterator keysBetween[A, B](b: Table[A, B]; fromKey: A; toKey: A): A
+
+ + Iterates over keys in the table from fromKey to toKey inclusive. + +
+
+ +
+
+
+
iterator keysFrom[A, B](b: Table[A, B]; fromKey: A): A
+
+ + Iterates over keys in the table from fromKey to the end. + +
+
+ +
+
+
+
iterator mpairs[A, B](t: OrderedTableRef[A, B]): (A, var B)
+
+ +

Iterates over any (key, value) pair in the table t in insertion order. The values can be modified.

+

See also:

+ + +

Example:

+
let a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.newOrderedTable
+for k, v in a.mpairs:
+  v.add(v[0] + 10)
+doAssert a == {'o': @[1, 5, 7, 9, 11],
+               'e': @[2, 4, 6, 8, 12]}.newOrderedTable
+ +
+
+
+
iterator mpairs[A, B](t: TableRef[A, B]): (A, var B)
+
+ +

Iterates over any (key, value) pair in the table t. The values can be modified.

+

See also:

+ + +

Example:

+
let a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.newTable
+for k, v in a.mpairs:
+  v.add(v[0] + 10)
+doAssert a == {'e': @[2, 4, 6, 8, 12], 'o': @[1, 5, 7, 9, 11]}.newTable
+ +
+
+
+
iterator mpairs[A, B](t: var OrderedTable[A, B]): (A, var B)
+
+ +

Iterates over any (key, value) pair in the table t (must be declared as var) in insertion order. The values can be modified.

+

See also:

+ + +

Example:

+
var a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.toOrderedTable
+for k, v in a.mpairs:
+  v.add(v[0] + 10)
+doAssert a == {'o': @[1, 5, 7, 9, 11],
+               'e': @[2, 4, 6, 8, 12]}.toOrderedTable
+ +
+
+
+
iterator mpairs[A, B](t: var Table[A, B]): (A, var B)
+
+ +

Iterates over all (key, value) pairs in the table t. The values can be modified.

+

See also:

+ + +

Example:

+
var a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.toTable
+for k, v in a.mpairs:
+  v.add(v[0] + 10)
+doAssert a == {'e': @[2, 4, 6, 8, 12], 'o': @[1, 5, 7, 9, 11]}.toTable
+ +
+
+
+
iterator mpairs[A](t: CountTableRef[A]): (A, var int)
+
+ +

Iterates over any (key, value) pair in the table t. The values can be modified.

+

See also:

+ + +

Example:

+
let a = newCountTable("abracadabra")
+for k, v in mpairs(a):
+  v = 2
+doAssert a == newCountTable("aabbccddrr")
+ +
+
+
+
iterator mpairs[A](t: var CountTable[A]): (A, var int)
+
+ +

Iterates over any (key, value) pair in the table t (must be declared as var). The values can be modified.

+

See also:

+ + +

Example:

+
var a = toCountTable("abracadabra")
+for k, v in mpairs(a):
+  v = 2
+doAssert a == toCountTable("aabbccddrr")
+ +
+
+ +
+
+
+
iterator mvalues[A, B](t: OrderedTableRef[A, B]): var B
+
+ +

Iterates over any value in the table t in insertion order. The values can be modified.

+

See also:

+ + +

Example:

+
let a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.newOrderedTable
+for v in a.mvalues:
+  v.add(99)
+doAssert a == {'o': @[1, 5, 7, 9, 99],
+               'e': @[2, 4, 6, 8, 99]}.newOrderedTable
+ +
+
+
+
iterator mvalues[A, B](t: TableRef[A, B]): var B
+
+ +

Iterates over any value in the table t. The values can be modified.

+

See also:

+ + +

Example:

+
let a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.newTable
+for v in a.mvalues:
+  v.add(99)
+doAssert a == {'e': @[2, 4, 6, 8, 99], 'o': @[1, 5, 7, 9, 99]}.newTable
+ +
+
+
+
iterator mvalues[A, B](t: var OrderedTable[A, B]): var B
+
+ +

Iterates over any value in the table t (must be declared as var) in insertion order. The values can be modified.

+

See also:

+ + +

Example:

+
var a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.toOrderedTable
+for v in a.mvalues:
+  v.add(99)
+doAssert a == {'o': @[1, 5, 7, 9, 99],
+               'e': @[2, 4, 6, 8, 99]}.toOrderedTable
+ +
+
+
+
iterator mvalues[A, B](t: var Table[A, B]): var B
+
+ +

Iterates over all the values in the table t. The values can be modified.

+

See also:

+ + +

Example:

+
var a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.toTable
+for v in a.mvalues:
+  v.add(99)
+doAssert a == {'e': @[2, 4, 6, 8, 99], 'o': @[1, 5, 7, 9, 99]}.toTable
+ +
+
+
+
iterator mvalues[A](t: CountTableRef[A]): var int
+
+ +

Iterates over any value in the table t. The values can be modified.

+

See also:

+ + +

Example:

+
var a = newCountTable("abracadabra")
+for v in mvalues(a):
+  v = 2
+doAssert a == newCountTable("aabbccddrr")
+ +
+
+
+
iterator mvalues[A](t: var CountTable[A]): var int
+
+ +

Iterates over any value in the table t (must be declared as var). The values can be modified.

+

See also:

+ + +

Example:

+
var a = toCountTable("abracadabra")
+for v in mvalues(a):
+  v = 2
+doAssert a == toCountTable("aabbccddrr")
+ +
+
+ +
+
+
+
iterator pairs[A, B](t: OrderedTable[A, B]): (A, B)
+
+ +

Iterates over any (key, value) pair in the table t in insertion order.

+

See also:

+ +

Examples:

+
let a = {
+  'o': [1, 5, 7, 9],
+  'e': [2, 4, 6, 8]
+  }.toOrderedTable
+
+for k, v in a.pairs:
+  echo "key: ", k
+  echo "value: ", v
+
+# key: o
+# value: [1, 5, 7, 9]
+# key: e
+# value: [2, 4, 6, 8]
+ +
+
+
+
iterator pairs[A, B](t: OrderedTableRef[A, B]): (A, B)
+
+ +

Iterates over any (key, value) pair in the table t in insertion order.

+

See also:

+ +

Examples:

+
let a = {
+  'o': [1, 5, 7, 9],
+  'e': [2, 4, 6, 8]
+  }.newOrderedTable
+
+for k, v in a.pairs:
+  echo "key: ", k
+  echo "value: ", v
+
+# key: o
+# value: [1, 5, 7, 9]
+# key: e
+# value: [2, 4, 6, 8]
+ +
+
+
+
iterator pairs[A, B](t: Table[A, B]): (A, B)
+
+ +

Iterates over all (key, value) pairs in the table t.

+

See also:

+ +

Examples:

+
let a = {
+  'o': [1, 5, 7, 9],
+  'e': [2, 4, 6, 8]
+  }.toTable
+
+for k, v in a.pairs:
+  echo "key: ", k
+  echo "value: ", v
+
+# key: e
+# value: [2, 4, 6, 8]
+# key: o
+# value: [1, 5, 7, 9]
+ +
+
+
+
iterator pairs[A, B](t: TableRef[A, B]): (A, B)
+
+ +

Iterates over any (key, value) pair in the table t.

+

See also:

+ +

Examples:

+
let a = {
+  'o': [1, 5, 7, 9],
+  'e': [2, 4, 6, 8]
+  }.newTable
+
+for k, v in a.pairs:
+  echo "key: ", k
+  echo "value: ", v
+
+# key: e
+# value: [2, 4, 6, 8]
+# key: o
+# value: [1, 5, 7, 9]
+ +
+
+
+
iterator pairs[A](t: CountTable[A]): (A, int)
+
+ +

Iterates over any (key, value) pair in the table t.

+

See also:

+ +

Examples:

+
let a = toCountTable("abracadabra")
+
+for k, v in pairs(a):
+  echo "key: ", k
+  echo "value: ", v
+
+# key: a
+# value: 5
+# key: b
+# value: 2
+# key: c
+# value: 1
+# key: d
+# value: 1
+# key: r
+# value: 2
+ +
+
+
+
iterator pairs[A](t: CountTableRef[A]): (A, int)
+
+ +

Iterates over any (key, value) pair in the table t.

+

See also:

+ +

Examples:

+
let a = newCountTable("abracadabra")
+
+for k, v in pairs(a):
+  echo "key: ", k
+  echo "value: ", v
+
+# key: a
+# value: 5
+# key: b
+# value: 2
+# key: c
+# value: 1
+# key: d
+# value: 1
+# key: r
+# value: 2
+ +
+
+ +
+
+
+
iterator pairsBetween[A, B](b: Table[A, B]; fromKey: A; toKey: A): tuple[key: A,
+    val: B]
+
+ + Iterates over (key, value) pairs in the table from fromKey to toKey inclusive. + +
+
+ +
+
+
+
iterator pairsFrom[A, B](b: Table[A, B]; fromKey: A): tuple[key: A, val: B]
+
+ + Iterates over (key, value) pairs in the table from the given key to the end. + +
+
+ +
+
+
+
iterator values[A, B](t: OrderedTable[A, B]): B
+
+ +

Iterates over any value in the table t in insertion order.

+

See also:

+ + +

Example:

+
let a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.toOrderedTable
+for v in a.values:
+  doAssert v.len == 4
+ +
+
+
+
iterator values[A, B](t: OrderedTableRef[A, B]): B
+
+ +

Iterates over any value in the table t in insertion order.

+

See also:

+ + +

Example:

+
let a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.newOrderedTable
+for v in a.values:
+  doAssert v.len == 4
+ +
+
+
+
iterator values[A, B](t: Table[A, B]): B
+
+ +

Iterates over all the values in the table t.

+

See also:

+ + +

Example:

+
let a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.toTable
+for v in a.values:
+  doAssert v.len == 4
+ +
+
+
+
iterator values[A, B](t: TableRef[A, B]): B
+
+ +

Iterates over any value in the table t.

+

See also:

+ + +

Example:

+
let a = {
+  'o': @[1, 5, 7, 9],
+  'e': @[2, 4, 6, 8]
+  }.newTable
+for v in a.values:
+  doAssert v.len == 4
+ +
+
+
+
iterator values[A](t: CountTable[A]): int
+
+ +

Iterates over any value in the table t.

+

See also:

+ + +

Example:

+
let a = toCountTable("abracadabra")
+for v in values(a):
+  assert v < 10
+ +
+
+
+
iterator values[A](t: CountTableRef[A]): int
+
+ +

Iterates over any value in the table t.

+

See also:

+ + +

Example:

+
let a = newCountTable("abracadabra")
+for v in values(a):
+  assert v < 10
+ +
+
+ +
+
+
+
iterator valuesBetween[A, B](b: Table[A, B]; fromKey: A; toKey: A): B
+
+ + Iterates over the values in the table from fromKey to toKey inclusive. + +
+
+ +
+
+
+
iterator valuesFrom[A, B](b: Table[A, B]; fromKey: A): B
+
+ + Iterates over the values in the table from the given key to the end. + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/btreetables.idx b/src/fusion/btreetables.idx new file mode 100644 index 0000000..47c97c1 --- /dev/null +++ b/src/fusion/btreetables.idx @@ -0,0 +1,176 @@ +nimTitle btreetables src/fusion/btreetables.html module src/fusion/btreetables 0 +nim Table src/fusion/btreetables.html#Table object Table 24 +nim TableRef src/fusion/btreetables.html#TableRef type TableRef 34 +nim initTable src/fusion/btreetables.html#initTable,int proc initTable[A, B](initialSize = 0): Table[A, B] 57 +nim `[]=` src/fusion/btreetables.html#[]=,Table[A,B],A,B proc `[]=`[A, B](t: var Table[A, B]; key: A; val: B) 73 +nim toTable src/fusion/btreetables.html#toTable,openArray[] proc toTable[A, B](pairs: openArray[(A, B)]): Table[A, B] 75 +nim getOrDefault src/fusion/btreetables.html#getOrDefault,Table[A,B],A proc getOrDefault[A, B](t: Table[A, B]; x: A): B 104 +nim getOrDefault src/fusion/btreetables.html#getOrDefault,Table[A,B],A,B proc getOrDefault[A, B](t: Table[A, B]; x: A; default: B): B 127 +nim `[]` src/fusion/btreetables.html#[],Table[A,B],A proc `[]`[A, B](t: Table[A, B]; x: A): B 150 +nim `[]` src/fusion/btreetables.html#[],Table[A,B],A_2 proc `[]`[A, B](t: var Table[A, B]; x: A): var B 188 +nim hasKey src/fusion/btreetables.html#hasKey,Table[A,B],A proc hasKey[A, B](t: Table[A, B]; x: A): bool 218 +nim contains src/fusion/btreetables.html#contains,Table[A,B],A proc contains[A, B](t: Table[A, B]; x: A): bool 234 +nim hasKeyOrPut src/fusion/btreetables.html#hasKeyOrPut,Table[A,B],A,B proc hasKeyOrPut[A, B](t: var Table[A, B]; key: A; val: B): bool 347 +nim mgetOrPut src/fusion/btreetables.html#mgetOrPut,Table[A,B],A,B proc mgetOrPut[A, B](t: var Table[A, B]; key: A; val: B): var B 372 +nim del src/fusion/btreetables.html#del,Table[A,B],A proc del[A, B](t: var Table[A, B]; key: A) 529 +nim pop src/fusion/btreetables.html#pop,Table[A,B],A,B proc pop[A, B](t: var Table[A, B]; key: A; val: var B): bool 545 +nim take src/fusion/btreetables.html#take,Table[A,B],A,B proc take[A, B](t: var Table[A, B]; key: A; val: var B): bool 572 +nim clear src/fusion/btreetables.html#clear,Table[A,B] proc clear[A, B](t: var Table[A, B]) 579 +nim len src/fusion/btreetables.html#len,Table[A,B] proc len[A, B](t: Table[A, B]): int 594 +nim keys src/fusion/btreetables.html#keys.i,Table[A,B] iterator keys[A, B](t: Table[A, B]): A 677 +nim keysFrom src/fusion/btreetables.html#keysFrom.i,Table[A,B],A iterator keysFrom[A, B](b: Table[A, B]; fromKey: A): A 695 +nim keysBetween src/fusion/btreetables.html#keysBetween.i,Table[A,B],A,A iterator keysBetween[A, B](b: Table[A, B]; fromKey: A; toKey: A): A 700 +nim values src/fusion/btreetables.html#values.i,Table[A,B] iterator values[A, B](t: Table[A, B]): B 706 +nim mvalues src/fusion/btreetables.html#mvalues.i,Table[A,B] iterator mvalues[A, B](t: var Table[A, B]): var B 724 +nim valuesFrom src/fusion/btreetables.html#valuesFrom.i,Table[A,B],A iterator valuesFrom[A, B](b: Table[A, B]; fromKey: A): B 743 +nim valuesBetween src/fusion/btreetables.html#valuesBetween.i,Table[A,B],A,A iterator valuesBetween[A, B](b: Table[A, B]; fromKey: A; toKey: A): B 748 +nim pairs src/fusion/btreetables.html#pairs.i,Table[A,B] iterator pairs[A, B](t: Table[A, B]): (A, B) 754 +nim mpairs src/fusion/btreetables.html#mpairs.i,Table[A,B] iterator mpairs[A, B](t: var Table[A, B]): (A, var B) 781 +nim pairsFrom src/fusion/btreetables.html#pairsFrom.i,Table[A,B],A iterator pairsFrom[A, B](b: Table[A, B]; fromKey: A): tuple[key: A, val: B] 801 +nim pairsBetween src/fusion/btreetables.html#pairsBetween.i,Table[A,B],A,A iterator pairsBetween[A, B](b: Table[A, B]; fromKey: A; toKey: A): tuple[key: A, val: B] 806 +nim `$` src/fusion/btreetables.html#$,Table[A,B] proc `$`[A, B](t: Table[A, B]): string 812 +nim `==` src/fusion/btreetables.html#==,Table[A,B],Table[A,B] proc `==`[A, B](a, b: Table[A, B]): bool 826 +nim newTable src/fusion/btreetables.html#newTable proc newTable[A, B](): TableRef[A, B] 854 +nim newTable src/fusion/btreetables.html#newTable,openArray[] proc newTable[A, B](pairs: openArray[(A, B)]): TableRef[A, B] 875 +nim newTableFrom src/fusion/btreetables.html#newTableFrom,A,proc(B) proc newTableFrom[A, B, C](collection: A; index: proc (x: B): C): TableRef[C, B] 891 +nim `[]` src/fusion/btreetables.html#[],TableRef[A,B],A proc `[]`[A, B](t: TableRef[A, B]; key: A): var B 899 +nim `[]=` src/fusion/btreetables.html#[]=,TableRef[A,B],A,B proc `[]=`[A, B](t: TableRef[A, B]; key: A; val: B) 923 +nim hasKey src/fusion/btreetables.html#hasKey,TableRef[A,B],A proc hasKey[A, B](t: TableRef[A, B]; key: A): bool 939 +nim contains src/fusion/btreetables.html#contains,TableRef[A,B],A proc contains[A, B](t: TableRef[A, B]; key: A): bool 958 +nim hasKeyOrPut src/fusion/btreetables.html#hasKeyOrPut,TableRef[A,B],A,B proc hasKeyOrPut[A, B](t: var TableRef[A, B]; key: A; val: B): bool 968 +nim getOrDefault src/fusion/btreetables.html#getOrDefault,TableRef[A,B],A proc getOrDefault[A, B](t: TableRef[A, B]; key: A): B 988 +nim getOrDefault src/fusion/btreetables.html#getOrDefault,TableRef[A,B],A,B proc getOrDefault[A, B](t: TableRef[A, B]; key: A; default: B): B 1007 +nim mgetOrPut src/fusion/btreetables.html#mgetOrPut,TableRef[A,B],A,B proc mgetOrPut[A, B](t: TableRef[A, B]; key: A; val: B): var B 1025 +nim len src/fusion/btreetables.html#len,TableRef[A,B] proc len[A, B](t: TableRef[A, B]): int 1046 +nim del src/fusion/btreetables.html#del,TableRef[A,B],A proc del[A, B](t: TableRef[A, B]; key: A) 1055 +nim pop src/fusion/btreetables.html#pop,TableRef[A,B],A,B proc pop[A, B](t: TableRef[A, B]; key: A; val: var B): bool 1072 +nim take src/fusion/btreetables.html#take,TableRef[A,B],A,B proc take[A, B](t: TableRef[A, B]; key: A; val: var B): bool 1098 +nim clear src/fusion/btreetables.html#clear,TableRef[A,B] proc clear[A, B](t: TableRef[A, B]) 1104 +nim `$` src/fusion/btreetables.html#$,TableRef[A,B] proc `$`[A, B](t: TableRef[A, B]): string 1119 +nim `==` src/fusion/btreetables.html#==,TableRef[A,B],TableRef[A,B] proc `==`[A, B](s, t: TableRef[A, B]): bool 1125 +nim keys src/fusion/btreetables.html#keys.i,TableRef[A,B] iterator keys[A, B](t: TableRef[A, B]): A 1140 +nim values src/fusion/btreetables.html#values.i,TableRef[A,B] iterator values[A, B](t: TableRef[A, B]): B 1158 +nim mvalues src/fusion/btreetables.html#mvalues.i,TableRef[A,B] iterator mvalues[A, B](t: TableRef[A, B]): var B 1176 +nim pairs src/fusion/btreetables.html#pairs.i,TableRef[A,B] iterator pairs[A, B](t: TableRef[A, B]): (A, B) 1194 +nim mpairs src/fusion/btreetables.html#mpairs.i,TableRef[A,B] iterator mpairs[A, B](t: TableRef[A, B]): (A, var B) 1221 +nim OrderedTable src/fusion/btreetables.html#OrderedTable object OrderedTable 1253 +nim OrderedTableRef src/fusion/btreetables.html#OrderedTableRef type OrderedTableRef 1261 +nim initOrderedTable src/fusion/btreetables.html#initOrderedTable,int proc initOrderedTable[A, B](initialSize = 64): OrderedTable[A, B] 1315 +nim `[]=` src/fusion/btreetables.html#[]=,OrderedTable[A,B],A,B proc `[]=`[A, B](t: var OrderedTable[A, B]; k: A; v: B) 1332 +nim toOrderedTable src/fusion/btreetables.html#toOrderedTable,openArray[] proc toOrderedTable[A, B](pairs: openArray[(A, B)]): OrderedTable[A, B] 1349 +nim `[]` src/fusion/btreetables.html#[],OrderedTable[A,B],A proc `[]`[A, B](t: OrderedTable[A, B]; key: A): B 1366 +nim `[]` src/fusion/btreetables.html#[],OrderedTable[A,B],A_2 proc `[]`[A, B](t: var OrderedTable[A, B]; key: A): var B 1390 +nim hasKey src/fusion/btreetables.html#hasKey,OrderedTable[A,B],A proc hasKey[A, B](t: OrderedTable[A, B]; key: A): bool 1406 +nim contains src/fusion/btreetables.html#contains,OrderedTable[A,B],A proc contains[A, B](t: OrderedTable[A, B]; key: A): bool 1429 +nim hasKeyOrPut src/fusion/btreetables.html#hasKeyOrPut,OrderedTable[A,B],A,B proc hasKeyOrPut[A, B](t: var OrderedTable[A, B]; key: A; val: B): bool 1439 +nim getOrDefault src/fusion/btreetables.html#getOrDefault,OrderedTable[A,B],A proc getOrDefault[A, B](t: OrderedTable[A, B]; key: A): B 1461 +nim getOrDefault src/fusion/btreetables.html#getOrDefault,OrderedTable[A,B],A,B proc getOrDefault[A, B](t: OrderedTable[A, B]; key: A; default: B): B 1483 +nim mgetOrPut src/fusion/btreetables.html#mgetOrPut,OrderedTable[A,B],A,B proc mgetOrPut[A, B](t: var OrderedTable[A, B]; key: A; val: B): var B 1504 +nim len src/fusion/btreetables.html#len,OrderedTable[A,B] proc len[A, B](t: OrderedTable[A, B]): int 1527 +nim add src/fusion/btreetables.html#add,OrderedTable[A,B],A,B proc add[A, B](t: var OrderedTable[A, B]; key: A; val: B) 1535 +nim del src/fusion/btreetables.html#del,OrderedTable[A,B],A proc del[A, B](t: var OrderedTable[A, B]; key: A) 1538 +nim delete src/fusion/btreetables.html#delete,OrderedTable[A,B],A proc delete[A, B](t: var OrderedTable[A, B]; key: A) 1575 +nim pop src/fusion/btreetables.html#pop,OrderedTable[A,B],A,B proc pop[A, B](t: var OrderedTable[A, B]; key: A; val: var B): bool 1606 +nim clear src/fusion/btreetables.html#clear,OrderedTable[A,B] proc clear[A, B](t: var OrderedTable[A, B]) 1635 +nim `$` src/fusion/btreetables.html#$,OrderedTable[A,B] proc `$`[A, B](t: OrderedTable[A, B]): string 1664 +nim `==` src/fusion/btreetables.html#==,OrderedTable[A,B],OrderedTable[A,B] proc `==`[A, B](s, t: OrderedTable[A, B]): bool 1669 +nim pairs src/fusion/btreetables.html#pairs.i,OrderedTable[A,B] iterator pairs[A, B](t: OrderedTable[A, B]): (A, B) 1687 +nim mpairs src/fusion/btreetables.html#mpairs.i,OrderedTable[A,B] iterator mpairs[A, B](t: var OrderedTable[A, B]): (A, var B) 1715 +nim keys src/fusion/btreetables.html#keys.i,OrderedTable[A,B] iterator keys[A, B](t: OrderedTable[A, B]): A 1735 +nim values src/fusion/btreetables.html#values.i,OrderedTable[A,B] iterator values[A, B](t: OrderedTable[A, B]): B 1754 +nim mvalues src/fusion/btreetables.html#mvalues.i,OrderedTable[A,B] iterator mvalues[A, B](t: var OrderedTable[A, B]): var B 1772 +nim newOrderedTable src/fusion/btreetables.html#newOrderedTable,int proc newOrderedTable[A, B](initialSize = 64): OrderedTableRef[A, B] 1804 +nim newOrderedTable src/fusion/btreetables.html#newOrderedTable,openArray[] proc newOrderedTable[A, B](pairs: openArray[(A, B)]): OrderedTableRef[A, B] 1819 +nim `[]` src/fusion/btreetables.html#[],OrderedTableRef[A,B],A proc `[]`[A, B](t: OrderedTableRef[A, B]; key: A): var B 1837 +nim `[]=` src/fusion/btreetables.html#[]=,OrderedTableRef[A,B],A,B proc `[]=`[A, B](t: OrderedTableRef[A, B]; key: A; val: B) 1860 +nim hasKey src/fusion/btreetables.html#hasKey,OrderedTableRef[A,B],A proc hasKey[A, B](t: OrderedTableRef[A, B]; key: A): bool 1876 +nim contains src/fusion/btreetables.html#contains,OrderedTableRef[A,B],A proc contains[A, B](t: OrderedTableRef[A, B]; key: A): bool 1894 +nim hasKeyOrPut src/fusion/btreetables.html#hasKeyOrPut,OrderedTableRef[A,B],A,B proc hasKeyOrPut[A, B](t: var OrderedTableRef[A, B]; key: A; val: B): bool 1904 +nim getOrDefault src/fusion/btreetables.html#getOrDefault,OrderedTableRef[A,B],A proc getOrDefault[A, B](t: OrderedTableRef[A, B]; key: A): B 1924 +nim getOrDefault src/fusion/btreetables.html#getOrDefault,OrderedTableRef[A,B],A,B proc getOrDefault[A, B](t: OrderedTableRef[A, B]; key: A; default: B): B 1943 +nim mgetOrPut src/fusion/btreetables.html#mgetOrPut,OrderedTableRef[A,B],A,B proc mgetOrPut[A, B](t: OrderedTableRef[A, B]; key: A; val: B): var B 1961 +nim len src/fusion/btreetables.html#len,OrderedTableRef[A,B] proc len[A, B](t: OrderedTableRef[A, B]): int 1982 +nim del src/fusion/btreetables.html#del,OrderedTableRef[A,B],A proc del[A, B](t: OrderedTableRef[A, B]; key: A) 1991 +nim delete src/fusion/btreetables.html#delete,OrderedTableRef[A,B],A proc delete[A, B](t: OrderedTableRef[A, B]; key: A) 2013 +nim pop src/fusion/btreetables.html#pop,OrderedTableRef[A,B],A,B proc pop[A, B](t: OrderedTableRef[A, B]; key: A; val: var B): bool 2032 +nim clear src/fusion/btreetables.html#clear,OrderedTableRef[A,B] proc clear[A, B](t: OrderedTableRef[A, B]) 2055 +nim `$` src/fusion/btreetables.html#$,OrderedTableRef[A,B] proc `$`[A, B](t: OrderedTableRef[A, B]): string 2068 +nim `==` src/fusion/btreetables.html#==,OrderedTableRef[A,B],OrderedTableRef[A,B] proc `==`[A, B](s, t: OrderedTableRef[A, B]): bool 2073 +nim keys src/fusion/btreetables.html#keys.i,OrderedTableRef[A,B] iterator keys[A, B](t: OrderedTableRef[A, B]): A 2089 +nim values src/fusion/btreetables.html#values.i,OrderedTableRef[A,B] iterator values[A, B](t: OrderedTableRef[A, B]): B 2108 +nim mvalues src/fusion/btreetables.html#mvalues.i,OrderedTableRef[A,B] iterator mvalues[A, B](t: OrderedTableRef[A, B]): var B 2126 +nim pairs src/fusion/btreetables.html#pairs.i,OrderedTableRef[A,B] iterator pairs[A, B](t: OrderedTableRef[A, B]): (A, B) 2146 +nim mpairs src/fusion/btreetables.html#mpairs.i,OrderedTableRef[A,B] iterator mpairs[A, B](t: OrderedTableRef[A, B]): (A, var B) 2175 +nim CountTable src/fusion/btreetables.html#CountTable object CountTable 2204 +nim CountTableRef src/fusion/btreetables.html#CountTableRef type CountTableRef 2211 +nim inc src/fusion/btreetables.html#inc,CountTable[A],A,Positive proc inc[A](t: var CountTable[A]; key: A; val: Positive = 1) 2217 +nim initCountTable src/fusion/btreetables.html#initCountTable,int proc initCountTable[A](initialSize = 64): CountTable[A] 2220 +nim toCountTable src/fusion/btreetables.html#toCountTable,openArray[A] proc toCountTable[A](keys: openArray[A]): CountTable[A] 2232 +nim `[]` src/fusion/btreetables.html#[],CountTable[A],A proc `[]`[A](t: CountTable[A]; key: A): int 2238 +nim `[]=` src/fusion/btreetables.html#[]=,CountTable[A],A,int proc `[]=`[A](t: var CountTable[A]; key: A; val: int) 2252 +nim smallest src/fusion/btreetables.html#smallest,CountTable[A] proc smallest[A](t: CountTable[A]): tuple[key: A, val: int] 2282 +nim largest src/fusion/btreetables.html#largest,CountTable[A] proc largest[A](t: CountTable[A]): tuple[key: A, val: int] 2294 +nim hasKey src/fusion/btreetables.html#hasKey,CountTable[A],A proc hasKey[A](t: CountTable[A]; key: A): bool 2306 +nim contains src/fusion/btreetables.html#contains,CountTable[A],A proc contains[A](t: CountTable[A]; key: A): bool 2317 +nim getOrDefault src/fusion/btreetables.html#getOrDefault,CountTable[A],A,int proc getOrDefault[A](t: CountTable[A]; key: A; default: int = 0): int 2322 +nim len src/fusion/btreetables.html#len,CountTable[A] proc len[A](t: CountTable[A]): int 2332 +nim del src/fusion/btreetables.html#del,CountTable[A],A proc del[A](t: var CountTable[A]; key: A) 2336 +nim pop src/fusion/btreetables.html#pop,CountTable[A],A,int proc pop[A](t: var CountTable[A]; key: A; val: var int): bool 2355 +nim clear src/fusion/btreetables.html#clear,CountTable[A] proc clear[A](t: var CountTable[A]) 2377 +nim merge src/fusion/btreetables.html#merge,CountTable[A],CountTable[A] proc merge[A](s: var CountTable[A]; t: CountTable[A]) 2387 +nim `$` src/fusion/btreetables.html#$,CountTable[A] proc `$`[A](t: CountTable[A]): string 2398 +nim `==` src/fusion/btreetables.html#==,CountTable[A],CountTable[A] proc `==`[A](s, t: CountTable[A]): bool 2403 +nim pairs src/fusion/btreetables.html#pairs.i,CountTable[A] iterator pairs[A](t: CountTable[A]): (A, int) 2413 +nim mpairs src/fusion/btreetables.html#mpairs.i,CountTable[A] iterator mpairs[A](t: var CountTable[A]): (A, var int) 2443 +nim keys src/fusion/btreetables.html#keys.i,CountTable[A] iterator keys[A](t: CountTable[A]): A 2459 +nim values src/fusion/btreetables.html#values.i,CountTable[A] iterator values[A](t: CountTable[A]): int 2474 +nim mvalues src/fusion/btreetables.html#mvalues.i,CountTable[A] iterator mvalues[A](t: var CountTable[A]): var int 2489 +nim inc src/fusion/btreetables.html#inc,CountTableRef[A],A,int proc inc[A](t: CountTableRef[A]; key: A; val = 1) 2514 +nim newCountTable src/fusion/btreetables.html#newCountTable,int proc newCountTable[A](initialSize = 64): CountTableRef[A] 2516 +nim newCountTable src/fusion/btreetables.html#newCountTable,openArray[A] proc newCountTable[A](keys: openArray[A]): CountTableRef[A] 2527 +nim `[]` src/fusion/btreetables.html#[],CountTableRef[A],A proc `[]`[A](t: CountTableRef[A]; key: A): int 2533 +nim `[]=` src/fusion/btreetables.html#[]=,CountTableRef[A],A,int proc `[]=`[A](t: CountTableRef[A]; key: A; val: int) 2548 +nim smallest src/fusion/btreetables.html#smallest,CountTableRef[A] proc smallest[A](t: CountTableRef[A]): (A, int) 2567 +nim largest src/fusion/btreetables.html#largest,CountTableRef[A] proc largest[A](t: CountTableRef[A]): (A, int) 2574 +nim hasKey src/fusion/btreetables.html#hasKey,CountTableRef[A],A proc hasKey[A](t: CountTableRef[A]; key: A): bool 2581 +nim contains src/fusion/btreetables.html#contains,CountTableRef[A],A proc contains[A](t: CountTableRef[A]; key: A): bool 2592 +nim getOrDefault src/fusion/btreetables.html#getOrDefault,CountTableRef[A],A,int proc getOrDefault[A](t: CountTableRef[A]; key: A; default: int): int 2597 +nim len src/fusion/btreetables.html#len,CountTableRef[A] proc len[A](t: CountTableRef[A]): int 2607 +nim del src/fusion/btreetables.html#del,CountTableRef[A],A proc del[A](t: CountTableRef[A]; key: A) 2611 +nim pop src/fusion/btreetables.html#pop,CountTableRef[A],A,int proc pop[A](t: CountTableRef[A]; key: A; val: var int): bool 2621 +nim clear src/fusion/btreetables.html#clear,CountTableRef[A] proc clear[A](t: CountTableRef[A]) 2634 +nim merge src/fusion/btreetables.html#merge,CountTableRef[A],CountTableRef[A] proc merge[A](s, t: CountTableRef[A]) 2642 +nim `$` src/fusion/btreetables.html#$,CountTableRef[A] proc `$`[A](t: CountTableRef[A]): string 2654 +nim `==` src/fusion/btreetables.html#==,CountTableRef[A],CountTableRef[A] proc `==`[A](s, t: CountTableRef[A]): bool 2659 +nim keys src/fusion/btreetables.html#keys.i,CountTableRef[A] iterator keys[A](t: CountTableRef[A]): A 2670 +nim values src/fusion/btreetables.html#values.i,CountTableRef[A] iterator values[A](t: CountTableRef[A]): int 2685 +nim mvalues src/fusion/btreetables.html#mvalues.i,CountTableRef[A] iterator mvalues[A](t: CountTableRef[A]): var int 2700 +nim pairs src/fusion/btreetables.html#pairs.i,CountTableRef[A] iterator pairs[A](t: CountTableRef[A]): (A, int) 2715 +nim mpairs src/fusion/btreetables.html#mpairs.i,CountTableRef[A] iterator mpairs[A](t: CountTableRef[A]): (A, var int) 2745 +nimgrp contains src/fusion/btreetables.html#contains-procs-all proc 234 +nimgrp newcounttable src/fusion/btreetables.html#newCountTable-procs-all proc 2516 +nimgrp $ src/fusion/btreetables.html#$-procs-all proc 812 +nimgrp neworderedtable src/fusion/btreetables.html#newOrderedTable-procs-all proc 1804 +nimgrp del src/fusion/btreetables.html#del-procs-all proc 529 +nimgrp []= src/fusion/btreetables.html#[]=-procs-all proc 73 +nimgrp getordefault src/fusion/btreetables.html#getOrDefault-procs-all proc 104 +nimgrp len src/fusion/btreetables.html#len-procs-all proc 594 +nimgrp newtable src/fusion/btreetables.html#newTable-procs-all proc 854 +nimgrp smallest src/fusion/btreetables.html#smallest-procs-all proc 2282 +nimgrp haskey src/fusion/btreetables.html#hasKey-procs-all proc 218 +nimgrp haskeyorput src/fusion/btreetables.html#hasKeyOrPut-procs-all proc 347 +nimgrp largest src/fusion/btreetables.html#largest-procs-all proc 2294 +nimgrp inc src/fusion/btreetables.html#inc-procs-all proc 2217 +nimgrp delete src/fusion/btreetables.html#delete-procs-all proc 1575 +nimgrp merge src/fusion/btreetables.html#merge-procs-all proc 2387 +nimgrp clear src/fusion/btreetables.html#clear-procs-all proc 579 +nimgrp take src/fusion/btreetables.html#take-procs-all proc 572 +nimgrp mgetorput src/fusion/btreetables.html#mgetOrPut-procs-all proc 372 +nimgrp [] src/fusion/btreetables.html#[]-procs-all proc 150 +nimgrp == src/fusion/btreetables.html#==-procs-all proc 826 +nimgrp pop src/fusion/btreetables.html#pop-procs-all proc 545 +nimgrp values src/fusion/btreetables.html#values-iterators-all iterator 706 +nimgrp mpairs src/fusion/btreetables.html#mpairs-iterators-all iterator 781 +nimgrp pairs src/fusion/btreetables.html#pairs-iterators-all iterator 754 +nimgrp mvalues src/fusion/btreetables.html#mvalues-iterators-all iterator 724 +nimgrp keys src/fusion/btreetables.html#keys-iterators-all iterator 677 diff --git a/src/fusion/compat.html b/src/fusion/compat.html new file mode 100644 index 0000000..08b0c4d --- /dev/null +++ b/src/fusion/compat.html @@ -0,0 +1,72 @@ + + + + + + + +src/fusion/compat + + + + + + + + + + + + +
+
+

src/fusion/compat

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ +
+
+ +
+ +

Compatibility pragmas for keeping up with Nim's evolution. This is an include file, do not import it!

+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/compat.idx b/src/fusion/compat.idx new file mode 100644 index 0000000..b3c16b6 --- /dev/null +++ b/src/fusion/compat.idx @@ -0,0 +1 @@ +nimTitle compat src/fusion/compat.html module src/fusion/compat 0 diff --git a/src/fusion/docutils.html b/src/fusion/docutils.html new file mode 100644 index 0000000..9245e9a --- /dev/null +++ b/src/fusion/docutils.html @@ -0,0 +1,135 @@ + + + + + + + +src/fusion/docutils + + + + + + + + + + + + +
+
+

src/fusion/docutils

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

+
+

Procs

+
+
+
+
proc genCodeImportAll(dir: string): string {....raises: [OSError],
+    tags: [ReadDirEffect], forbids: [].}
+
+ + + +
+
+ +
+ +
+
+
+

Iterators

+
+
+
+
iterator findNimSrcFiles(dir: string): string {....raises: [OSError],
+    tags: [ReadDirEffect], forbids: [].}
+
+ + + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/docutils.idx b/src/fusion/docutils.idx new file mode 100644 index 0000000..1d9089e --- /dev/null +++ b/src/fusion/docutils.idx @@ -0,0 +1,3 @@ +nimTitle docutils src/fusion/docutils.html module src/fusion/docutils 0 +nim findNimSrcFiles src/fusion/docutils.html#findNimSrcFiles.i,string iterator findNimSrcFiles(dir: string): string 14 +nim genCodeImportAll src/fusion/docutils.html#genCodeImportAll,string proc genCodeImportAll(dir: string): string 23 diff --git a/src/fusion/filepermissions.html b/src/fusion/filepermissions.html new file mode 100644 index 0000000..6a20156 --- /dev/null +++ b/src/fusion/filepermissions.html @@ -0,0 +1,170 @@ + + + + + + + +src/fusion/filepermissions + + + + + + + + + + + + +
+
+

src/fusion/filepermissions

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

  • Convenience functions to convert Unix like file permissions to and from set[FilePermission].
  • +
+

+
+

Procs

+
+
+
+
proc chmod(path: string; permissions: Natural) {.inline, ...raises: [OSError],
+    tags: [ReadDirEffect, WriteDirEffect], forbids: [].}
+
+ +

Convenience proc for os.setFilePermissions("file.ext", filepermissions.toFilePermissions(0o666)) to change file permissions using Unix like octal file permission.

+

See also:

+ + + +
+
+ +
+
+
+
func fromFilePermissions(perm: set[FilePermission]): uint {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Convenience func to convert set[FilePermission] to Unix like file permission.

+

See also:

+ + +

Example:

+
import os
+doAssert fromFilePermissions({fpUserExec, fpUserRead, fpUserWrite}) == 0o700
+doAssert fromFilePermissions({fpGroupExec, fpGroupRead, fpGroupWrite}) == 0o070
+doAssert fromFilePermissions({fpOthersExec, fpOthersRead, fpOthersWrite}) == 0o007
+doAssert fromFilePermissions({fpUserWrite, fpUserRead, fpGroupRead, fpOthersRead}) == 0o644
+doAssert fromFilePermissions({fpUserExec, fpUserWrite, fpUserRead, fpGroupExec, fpGroupWrite, fpGroupRead, fpOthersExec, fpOthersWrite, fpOthersRead}) == 0o777
+doAssert fromFilePermissions({}) == 0o000
+static: doAssert 0o777.toFilePermissions.fromFilePermissions == 0o777
+ +
+
+ +
+
+
+
func toFilePermissions(perm: Natural): set[FilePermission] {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Convenience func to convert Unix like file permission to set[FilePermission].

+

See also:

+ + +

Example:

+
import os
+doAssert toFilePermissions(0o700) == {fpUserExec, fpUserRead, fpUserWrite}
+doAssert toFilePermissions(0o070) == {fpGroupExec, fpGroupRead, fpGroupWrite}
+doAssert toFilePermissions(0o007) == {fpOthersExec, fpOthersRead, fpOthersWrite}
+doAssert toFilePermissions(0o644) == {fpUserWrite, fpUserRead, fpGroupRead, fpOthersRead}
+doAssert toFilePermissions(0o777) == {fpUserExec, fpUserWrite, fpUserRead, fpGroupExec, fpGroupWrite, fpGroupRead, fpOthersExec, fpOthersWrite, fpOthersRead}
+doAssert toFilePermissions(0o000) == {}
+ +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/filepermissions.idx b/src/fusion/filepermissions.idx new file mode 100644 index 0000000..8e6d77d --- /dev/null +++ b/src/fusion/filepermissions.idx @@ -0,0 +1,4 @@ +nimTitle filepermissions src/fusion/filepermissions.html module src/fusion/filepermissions 0 +nim toFilePermissions src/fusion/filepermissions.html#toFilePermissions,Natural proc toFilePermissions(perm: Natural): set[FilePermission] 5 +nim fromFilePermissions src/fusion/filepermissions.html#fromFilePermissions,set[FilePermission] proc fromFilePermissions(perm: set[FilePermission]): uint 27 +nim chmod src/fusion/filepermissions.html#chmod,string,Natural proc chmod(path: string; permissions: Natural) 53 diff --git a/src/fusion/htmlparser.html b/src/fusion/htmlparser.html new file mode 100644 index 0000000..2c29125 --- /dev/null +++ b/src/fusion/htmlparser.html @@ -0,0 +1,657 @@ + + + + + + + +src/fusion/htmlparser + + + + + + + + + + + + +
+
+

src/fusion/htmlparser

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

NOTE: The behaviour might change in future versions as it is not clear what "wild HTML the real world uses" really implies.

+

It can be used to parse a wild HTML document and output it as valid XHTML document (well, if you are lucky):

+
echo loadHtml("mydirty.html")

Every tag in the resulting tree is in lower case.

+

Note: The resulting XmlNode already uses the clientData field, so it cannot be used by clients of this library.

+ +

Example: Transforming hyperlinks

This code demonstrates how you can iterate over all the tags in an HTML file and write back the modified version. In this case we look for hyperlinks ending with the extension .rst and convert them to .html.

+
import htmlparser
+import xmltree  # To use '$' for XmlNode
+import strtabs  # To access XmlAttributes
+import os       # To use splitFile
+import strutils # To use cmpIgnoreCase
+
+proc transformHyperlinks() =
+  let html = loadHtml("input.html")
+  
+  for a in html.findAll("a"):
+    if a.attrs.hasKey "href":
+      let (dir, filename, ext) = splitFile(a.attrs["href"])
+      if cmpIgnoreCase(ext, ".rst") == 0:
+        a.attrs["href"] = dir / filename & ".html"
+  
+  writeFile("output.html", $html)

+ +
+

Types

+
+
+
HtmlTag = enum
+  tagUnknown,               ## unknown HTML element
+  tagA,                     ## the HTML ``a`` element
+  tagAbbr,                  ## the deprecated HTML ``abbr`` element
+  tagAcronym,               ## the HTML ``acronym`` element
+  tagAddress,               ## the HTML ``address`` element
+  tagApplet,                ## the deprecated HTML ``applet`` element
+  tagArea,                  ## the HTML ``area`` element
+  tagArticle,               ## the HTML ``article`` element
+  tagAside,                 ## the HTML ``aside`` element
+  tagAudio,                 ## the HTML ``audio`` element
+  tagB,                     ## the HTML ``b`` element
+  tagBase,                  ## the HTML ``base`` element
+  tagBdi,                   ## the HTML ``bdi`` element
+  tagBdo,                   ## the deprecated HTML ``dbo`` element
+  tagBasefont,              ## the deprecated HTML ``basefont`` element
+  tagBig,                   ## the HTML ``big`` element
+  tagBlockquote,            ## the HTML ``blockquote`` element
+  tagBody,                  ## the HTML ``body`` element
+  tagBr,                    ## the HTML ``br`` element
+  tagButton,                ## the HTML ``button`` element
+  tagCanvas,                ## the HTML ``canvas`` element
+  tagCaption,               ## the HTML ``caption`` element
+  tagCenter,                ## the deprecated HTML ``center`` element
+  tagCite,                  ## the HTML ``cite`` element
+  tagCode,                  ## the HTML ``code`` element
+  tagCol,                   ## the HTML ``col`` element
+  tagColgroup,              ## the HTML ``colgroup`` element
+  tagCommand,               ## the HTML ``command`` element
+  tagDatalist,              ## the HTML ``datalist`` element
+  tagDd,                    ## the HTML ``dd`` element
+  tagDel,                   ## the HTML ``del`` element
+  tagDetails,               ## the HTML ``details`` element
+  tagDfn,                   ## the HTML ``dfn`` element
+  tagDialog,                ## the HTML ``dialog`` element
+  tagDiv,                   ## the HTML ``div`` element
+  tagDir,                   ## the deprecated HTLM ``dir`` element
+  tagDl,                    ## the HTML ``dl`` element
+  tagDt,                    ## the HTML ``dt`` element
+  tagEm,                    ## the HTML ``em`` element
+  tagEmbed,                 ## the HTML ``embed`` element
+  tagFieldset,              ## the HTML ``fieldset`` element
+  tagFigcaption,            ## the HTML ``figcaption`` element
+  tagFigure,                ## the HTML ``figure`` element
+  tagFont,                  ## the deprecated HTML ``font`` element
+  tagFooter,                ## the HTML ``footer`` element
+  tagForm,                  ## the HTML ``form`` element
+  tagFrame,                 ## the HTML ``frame`` element
+  tagFrameset,              ## the deprecated HTML ``frameset`` element
+  tagH1,                    ## the HTML ``h1`` element
+  tagH2,                    ## the HTML ``h2`` element
+  tagH3,                    ## the HTML ``h3`` element
+  tagH4,                    ## the HTML ``h4`` element
+  tagH5,                    ## the HTML ``h5`` element
+  tagH6,                    ## the HTML ``h6`` element
+  tagHead,                  ## the HTML ``head`` element
+  tagHeader,                ## the HTML ``header`` element
+  tagHgroup,                ## the HTML ``hgroup`` element
+  tagHtml,                  ## the HTML ``html`` element
+  tagHr,                    ## the HTML ``hr`` element
+  tagI,                     ## the HTML ``i`` element
+  tagIframe,                ## the deprecated HTML ``iframe`` element
+  tagImg,                   ## the HTML ``img`` element
+  tagInput,                 ## the HTML ``input`` element
+  tagIns,                   ## the HTML ``ins`` element
+  tagIsindex,               ## the deprecated HTML ``isindex`` element
+  tagKbd,                   ## the HTML ``kbd`` element
+  tagKeygen,                ## the HTML ``keygen`` element
+  tagLabel,                 ## the HTML ``label`` element
+  tagLegend,                ## the HTML ``legend`` element
+  tagLi,                    ## the HTML ``li`` element
+  tagLink,                  ## the HTML ``link`` element
+  tagMap,                   ## the HTML ``map`` element
+  tagMark,                  ## the HTML ``mark`` element
+  tagMenu,                  ## the deprecated HTML ``menu`` element
+  tagMeta,                  ## the HTML ``meta`` element
+  tagMeter,                 ## the HTML ``meter`` element
+  tagNav,                   ## the HTML ``nav`` element
+  tagNobr,                  ## the deprecated HTML ``nobr`` element
+  tagNoframes,              ## the deprecated HTML ``noframes`` element
+  tagNoscript,              ## the HTML ``noscript`` element
+  tagObject,                ## the HTML ``object`` element
+  tagOl,                    ## the HTML ``ol`` element
+  tagOptgroup,              ## the HTML ``optgroup`` element
+  tagOption,                ## the HTML ``option`` element
+  tagOutput,                ## the HTML ``output`` element
+  tagP,                     ## the HTML ``p`` element
+  tagParam,                 ## the HTML ``param`` element
+  tagPre,                   ## the HTML ``pre`` element
+  tagProgress,              ## the HTML ``progress`` element
+  tagQ,                     ## the HTML ``q`` element
+  tagRp,                    ## the HTML ``rp`` element
+  tagRt,                    ## the HTML ``rt`` element
+  tagRuby,                  ## the HTML ``ruby`` element
+  tagS,                     ## the deprecated HTML ``s`` element
+  tagSamp,                  ## the HTML ``samp`` element
+  tagScript,                ## the HTML ``script`` element
+  tagSection,               ## the HTML ``section`` element
+  tagSelect,                ## the HTML ``select`` element
+  tagSmall,                 ## the HTML ``small`` element
+  tagSource,                ## the HTML ``source`` element
+  tagSpan,                  ## the HTML ``span`` element
+  tagStrike,                ## the deprecated HTML ``strike`` element
+  tagStrong,                ## the HTML ``strong`` element
+  tagStyle,                 ## the HTML ``style`` element
+  tagSub,                   ## the HTML ``sub`` element
+  tagSummary,               ## the HTML ``summary`` element
+  tagSup,                   ## the HTML ``sup`` element
+  tagTable,                 ## the HTML ``table`` element
+  tagTbody,                 ## the HTML ``tbody`` element
+  tagTd,                    ## the HTML ``td`` element
+  tagTextarea,              ## the HTML ``textarea`` element
+  tagTfoot,                 ## the HTML ``tfoot`` element
+  tagTh,                    ## the HTML ``th`` element
+  tagThead,                 ## the HTML ``thead`` element
+  tagTime,                  ## the HTML ``time`` element
+  tagTitle,                 ## the HTML ``title`` element
+  tagTr,                    ## the HTML ``tr`` element
+  tagTrack,                 ## the HTML ``track`` element
+  tagTt,                    ## the HTML ``tt`` element
+  tagU,                     ## the deprecated HTML ``u`` element
+  tagUl,                    ## the HTML ``ul`` element
+  tagVar,                   ## the HTML ``var`` element
+  tagVideo,                 ## the HTML ``video`` element
+  tagWbr                     ## the HTML ``wbr`` element
+
+ + list of all supported HTML tags; order will always be alphabetically + +
+
+ +
+
+
+

Consts

+
+
+
BlockTags = {tagAddress, tagBlockquote, tagCenter, tagDel, tagDir, tagDiv,
+             tagDl, tagFieldset, tagForm, tagH1, tagH2, tagH3, tagH4, tagH5,
+             tagH6, tagHr, tagIns, tagIsindex, tagMenu, tagNoframes,
+             tagNoscript, tagOl, tagP, tagPre, tagTable, tagUl, tagCenter,
+             tagDir, tagIsindex, tagMenu, tagNoframes}
+
+ + + +
+
+
+
InlineTags = {tagA, tagAbbr, tagAcronym, tagApplet, tagB, tagBasefont, tagBdo,
+              tagBig, tagBr, tagButton, tagCite, tagCode, tagDel, tagDfn, tagEm,
+              tagFont, tagI, tagImg, tagIns, tagInput, tagIframe, tagKbd,
+              tagLabel, tagMap, tagObject, tagQ, tagSamp, tagScript, tagSelect,
+              tagSmall, tagSpan, tagStrong, tagSub, tagSup, tagTextarea, tagTt,
+              tagVar, tagApplet, tagBasefont, tagFont, tagIframe, tagU, tagS,
+              tagStrike, tagWbr}
+
+ + + +
+
+
+
SingleTags = {tagArea, tagBase, tagBasefont, tagBr, tagCol, tagEmbed, tagFrame,
+              tagHr, tagImg, tagInput, tagSource, tagTrack, tagIsindex, tagLink,
+              tagMeta, tagParam, tagWbr, tagCommand, tagKeygen}
+
+ + + +
+
+
+
tagToStr = ["a", "abbr", "acronym", "address", "applet", "area", "article",
+            "aside", "audio", "b", "base", "basefont", "bdi", "bdo", "big",
+            "blockquote", "body", "br", "button", "canvas", "caption", "center",
+            "cite", "code", "col", "colgroup", "command", "datalist", "dd",
+            "del", "details", "dfn", "dialog", "div", "dir", "dl", "dt", "em",
+            "embed", "fieldset", "figcaption", "figure", "font", "footer",
+            "form", "frame", "frameset", "h1", "h2", "h3", "h4", "h5", "h6",
+            "head", "header", "hgroup", "html", "hr", "i", "iframe", "img",
+            "input", "ins", "isindex", "kbd", "keygen", "label", "legend", "li",
+            "link", "map", "mark", "menu", "meta", "meter", "nav", "nobr",
+            "noframes", "noscript", "object", "ol", "optgroup", "option",
+            "output", "p", "param", "pre", "progress", "q", "rp", "rt", "ruby",
+            "s", "samp", "script", "section", "select", "small", "source",
+            "span", "strike", "strong", "style", "sub", "summary", "sup",
+            "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time",
+            "title", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]
+
+ + + +
+
+ +
+
+
+

Procs

+
+
+
+
proc entityToRune(entity: string): Rune {....raises: [], tags: [], forbids: [].}
+
+ + Converts an HTML entity name like &Uuml; or values like &#220; or &#x000DC; to its UTF-8 equivalent. Rune(0) is returned if the entity name is unknown. +

Example:

+
import unicode
+doAssert entityToRune("") == Rune(0)
+doAssert entityToRune("a") == Rune(0)
+doAssert entityToRune("gt") == ">".runeAt(0)
+doAssert entityToRune("Uuml") == "Ü".runeAt(0)
+doAssert entityToRune("quest") == "?".runeAt(0)
+doAssert entityToRune("#x0003F") == "?".runeAt(0)
+ +
+
+ +
+
+
+
proc entityToUtf8(entity: string): string {....raises: [], tags: [], forbids: [].}
+
+ + Converts an HTML entity name like &Uuml; or values like &#220; or &#x000DC; to its UTF-8 equivalent. "" is returned if the entity name is unknown. The HTML parser already converts entities to UTF-8. +

Example:

+
const sigma = "Σ"
+doAssert entityToUtf8("") == ""
+doAssert entityToUtf8("a") == ""
+doAssert entityToUtf8("gt") == ">"
+doAssert entityToUtf8("Uuml") == "Ü"
+doAssert entityToUtf8("quest") == "?"
+doAssert entityToUtf8("#63") == "?"
+doAssert entityToUtf8("Sigma") == sigma
+doAssert entityToUtf8("#931") == sigma
+doAssert entityToUtf8("#0931") == sigma
+doAssert entityToUtf8("#x3A3") == sigma
+doAssert entityToUtf8("#x03A3") == sigma
+doAssert entityToUtf8("#x3a3") == sigma
+doAssert entityToUtf8("#X3a3") == sigma
+ +
+
+ +
+
+
+
proc htmlTag(n: XmlNode): HtmlTag {....raises: [], tags: [], forbids: [].}
+
+ + Gets n's tag as a HtmlTag. + +
+
+
+
proc htmlTag(s: string): HtmlTag {....raises: [], tags: [], forbids: [].}
+
+ + Converts s to a HtmlTag. If s is no HTML tag, tagUnknown is returned. + +
+
+ +
+
+
+
proc loadHtml(path: string): XmlNode {....raises: [IOError, OSError, ValueError,
+    Exception], tags: [ReadIOEffect, RootEffect, WriteIOEffect], forbids: [].}
+
+ + Loads and parses HTML from file specified by path, and returns a XmlNode. All parsing errors are ignored. + +
+
+
+
proc loadHtml(path: string; errors: var seq[string]): XmlNode {.
+    ...raises: [IOError, OSError, ValueError, Exception],
+    tags: [ReadIOEffect, RootEffect, WriteIOEffect], forbids: [].}
+
+ + Loads and parses HTML from file specified by path, and returns a XmlNode. Every occurred parsing error is added to the errors sequence. + +
+
+ +
+
+
+
proc parseHtml(html: string): XmlNode {....raises: [IOError, OSError, ValueError,
+    Exception], tags: [ReadIOEffect, RootEffect, WriteIOEffect], forbids: [].}
+
+ + Parses the HTML from string html and returns a XmlNode. All parsing errors are ignored. + +
+
+
+
proc parseHtml(s: Stream): XmlNode {....raises: [IOError, OSError, ValueError,
+    Exception], tags: [ReadIOEffect, RootEffect, WriteIOEffect], forbids: [].}
+
+ + Parses the HTML from stream s and returns a XmlNode. All parsing errors are ignored. + +
+
+
+
proc parseHtml(s: Stream; filename: string; errors: var seq[string]): XmlNode {.
+    ...raises: [IOError, OSError, ValueError, Exception],
+    tags: [ReadIOEffect, RootEffect, WriteIOEffect], forbids: [].}
+
+ + Parses the XML from stream s and returns a XmlNode. Every occurred parsing error is added to the errors sequence. + +
+
+ +
+
+
+
proc runeToEntity(rune: Rune): string {....raises: [], tags: [], forbids: [].}
+
+ + converts a Rune to its numeric HTML entity equivalent. +

Example:

+
import unicode
+doAssert runeToEntity(Rune(0)) == ""
+doAssert runeToEntity(Rune(-1)) == ""
+doAssert runeToEntity("Ü".runeAt(0)) == "#220"
+doAssert runeToEntity("∈".runeAt(0)) == "#8712"
+ +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/htmlparser.idx b/src/fusion/htmlparser.idx new file mode 100644 index 0000000..3a31f80 --- /dev/null +++ b/src/fusion/htmlparser.idx @@ -0,0 +1,144 @@ +nimTitle htmlparser src/fusion/htmlparser.html module src/fusion/htmlparser 0 +nim tagUnknown src/fusion/htmlparser.html#tagUnknown HtmlTag.tagUnknown 54 +nim tagA src/fusion/htmlparser.html#tagA HtmlTag.tagA 54 +nim tagAbbr src/fusion/htmlparser.html#tagAbbr HtmlTag.tagAbbr 54 +nim tagAcronym src/fusion/htmlparser.html#tagAcronym HtmlTag.tagAcronym 54 +nim tagAddress src/fusion/htmlparser.html#tagAddress HtmlTag.tagAddress 54 +nim tagApplet src/fusion/htmlparser.html#tagApplet HtmlTag.tagApplet 54 +nim tagArea src/fusion/htmlparser.html#tagArea HtmlTag.tagArea 54 +nim tagArticle src/fusion/htmlparser.html#tagArticle HtmlTag.tagArticle 54 +nim tagAside src/fusion/htmlparser.html#tagAside HtmlTag.tagAside 54 +nim tagAudio src/fusion/htmlparser.html#tagAudio HtmlTag.tagAudio 54 +nim tagB src/fusion/htmlparser.html#tagB HtmlTag.tagB 54 +nim tagBase src/fusion/htmlparser.html#tagBase HtmlTag.tagBase 54 +nim tagBdi src/fusion/htmlparser.html#tagBdi HtmlTag.tagBdi 54 +nim tagBdo src/fusion/htmlparser.html#tagBdo HtmlTag.tagBdo 54 +nim tagBasefont src/fusion/htmlparser.html#tagBasefont HtmlTag.tagBasefont 54 +nim tagBig src/fusion/htmlparser.html#tagBig HtmlTag.tagBig 54 +nim tagBlockquote src/fusion/htmlparser.html#tagBlockquote HtmlTag.tagBlockquote 54 +nim tagBody src/fusion/htmlparser.html#tagBody HtmlTag.tagBody 54 +nim tagBr src/fusion/htmlparser.html#tagBr HtmlTag.tagBr 54 +nim tagButton src/fusion/htmlparser.html#tagButton HtmlTag.tagButton 54 +nim tagCanvas src/fusion/htmlparser.html#tagCanvas HtmlTag.tagCanvas 54 +nim tagCaption src/fusion/htmlparser.html#tagCaption HtmlTag.tagCaption 54 +nim tagCenter src/fusion/htmlparser.html#tagCenter HtmlTag.tagCenter 54 +nim tagCite src/fusion/htmlparser.html#tagCite HtmlTag.tagCite 54 +nim tagCode src/fusion/htmlparser.html#tagCode HtmlTag.tagCode 54 +nim tagCol src/fusion/htmlparser.html#tagCol HtmlTag.tagCol 54 +nim tagColgroup src/fusion/htmlparser.html#tagColgroup HtmlTag.tagColgroup 54 +nim tagCommand src/fusion/htmlparser.html#tagCommand HtmlTag.tagCommand 54 +nim tagDatalist src/fusion/htmlparser.html#tagDatalist HtmlTag.tagDatalist 54 +nim tagDd src/fusion/htmlparser.html#tagDd HtmlTag.tagDd 54 +nim tagDel src/fusion/htmlparser.html#tagDel HtmlTag.tagDel 54 +nim tagDetails src/fusion/htmlparser.html#tagDetails HtmlTag.tagDetails 54 +nim tagDfn src/fusion/htmlparser.html#tagDfn HtmlTag.tagDfn 54 +nim tagDialog src/fusion/htmlparser.html#tagDialog HtmlTag.tagDialog 54 +nim tagDiv src/fusion/htmlparser.html#tagDiv HtmlTag.tagDiv 54 +nim tagDir src/fusion/htmlparser.html#tagDir HtmlTag.tagDir 54 +nim tagDl src/fusion/htmlparser.html#tagDl HtmlTag.tagDl 54 +nim tagDt src/fusion/htmlparser.html#tagDt HtmlTag.tagDt 54 +nim tagEm src/fusion/htmlparser.html#tagEm HtmlTag.tagEm 54 +nim tagEmbed src/fusion/htmlparser.html#tagEmbed HtmlTag.tagEmbed 54 +nim tagFieldset src/fusion/htmlparser.html#tagFieldset HtmlTag.tagFieldset 54 +nim tagFigcaption src/fusion/htmlparser.html#tagFigcaption HtmlTag.tagFigcaption 54 +nim tagFigure src/fusion/htmlparser.html#tagFigure HtmlTag.tagFigure 54 +nim tagFont src/fusion/htmlparser.html#tagFont HtmlTag.tagFont 54 +nim tagFooter src/fusion/htmlparser.html#tagFooter HtmlTag.tagFooter 54 +nim tagForm src/fusion/htmlparser.html#tagForm HtmlTag.tagForm 54 +nim tagFrame src/fusion/htmlparser.html#tagFrame HtmlTag.tagFrame 54 +nim tagFrameset src/fusion/htmlparser.html#tagFrameset HtmlTag.tagFrameset 54 +nim tagH1 src/fusion/htmlparser.html#tagH1 HtmlTag.tagH1 54 +nim tagH2 src/fusion/htmlparser.html#tagH2 HtmlTag.tagH2 54 +nim tagH3 src/fusion/htmlparser.html#tagH3 HtmlTag.tagH3 54 +nim tagH4 src/fusion/htmlparser.html#tagH4 HtmlTag.tagH4 54 +nim tagH5 src/fusion/htmlparser.html#tagH5 HtmlTag.tagH5 54 +nim tagH6 src/fusion/htmlparser.html#tagH6 HtmlTag.tagH6 54 +nim tagHead src/fusion/htmlparser.html#tagHead HtmlTag.tagHead 54 +nim tagHeader src/fusion/htmlparser.html#tagHeader HtmlTag.tagHeader 54 +nim tagHgroup src/fusion/htmlparser.html#tagHgroup HtmlTag.tagHgroup 54 +nim tagHtml src/fusion/htmlparser.html#tagHtml HtmlTag.tagHtml 54 +nim tagHr src/fusion/htmlparser.html#tagHr HtmlTag.tagHr 54 +nim tagI src/fusion/htmlparser.html#tagI HtmlTag.tagI 54 +nim tagIframe src/fusion/htmlparser.html#tagIframe HtmlTag.tagIframe 54 +nim tagImg src/fusion/htmlparser.html#tagImg HtmlTag.tagImg 54 +nim tagInput src/fusion/htmlparser.html#tagInput HtmlTag.tagInput 54 +nim tagIns src/fusion/htmlparser.html#tagIns HtmlTag.tagIns 54 +nim tagIsindex src/fusion/htmlparser.html#tagIsindex HtmlTag.tagIsindex 54 +nim tagKbd src/fusion/htmlparser.html#tagKbd HtmlTag.tagKbd 54 +nim tagKeygen src/fusion/htmlparser.html#tagKeygen HtmlTag.tagKeygen 54 +nim tagLabel src/fusion/htmlparser.html#tagLabel HtmlTag.tagLabel 54 +nim tagLegend src/fusion/htmlparser.html#tagLegend HtmlTag.tagLegend 54 +nim tagLi src/fusion/htmlparser.html#tagLi HtmlTag.tagLi 54 +nim tagLink src/fusion/htmlparser.html#tagLink HtmlTag.tagLink 54 +nim tagMap src/fusion/htmlparser.html#tagMap HtmlTag.tagMap 54 +nim tagMark src/fusion/htmlparser.html#tagMark HtmlTag.tagMark 54 +nim tagMenu src/fusion/htmlparser.html#tagMenu HtmlTag.tagMenu 54 +nim tagMeta src/fusion/htmlparser.html#tagMeta HtmlTag.tagMeta 54 +nim tagMeter src/fusion/htmlparser.html#tagMeter HtmlTag.tagMeter 54 +nim tagNav src/fusion/htmlparser.html#tagNav HtmlTag.tagNav 54 +nim tagNobr src/fusion/htmlparser.html#tagNobr HtmlTag.tagNobr 54 +nim tagNoframes src/fusion/htmlparser.html#tagNoframes HtmlTag.tagNoframes 54 +nim tagNoscript src/fusion/htmlparser.html#tagNoscript HtmlTag.tagNoscript 54 +nim tagObject src/fusion/htmlparser.html#tagObject HtmlTag.tagObject 54 +nim tagOl src/fusion/htmlparser.html#tagOl HtmlTag.tagOl 54 +nim tagOptgroup src/fusion/htmlparser.html#tagOptgroup HtmlTag.tagOptgroup 54 +nim tagOption src/fusion/htmlparser.html#tagOption HtmlTag.tagOption 54 +nim tagOutput src/fusion/htmlparser.html#tagOutput HtmlTag.tagOutput 54 +nim tagP src/fusion/htmlparser.html#tagP HtmlTag.tagP 54 +nim tagParam src/fusion/htmlparser.html#tagParam HtmlTag.tagParam 54 +nim tagPre src/fusion/htmlparser.html#tagPre HtmlTag.tagPre 54 +nim tagProgress src/fusion/htmlparser.html#tagProgress HtmlTag.tagProgress 54 +nim tagQ src/fusion/htmlparser.html#tagQ HtmlTag.tagQ 54 +nim tagRp src/fusion/htmlparser.html#tagRp HtmlTag.tagRp 54 +nim tagRt src/fusion/htmlparser.html#tagRt HtmlTag.tagRt 54 +nim tagRuby src/fusion/htmlparser.html#tagRuby HtmlTag.tagRuby 54 +nim tagS src/fusion/htmlparser.html#tagS HtmlTag.tagS 54 +nim tagSamp src/fusion/htmlparser.html#tagSamp HtmlTag.tagSamp 54 +nim tagScript src/fusion/htmlparser.html#tagScript HtmlTag.tagScript 54 +nim tagSection src/fusion/htmlparser.html#tagSection HtmlTag.tagSection 54 +nim tagSelect src/fusion/htmlparser.html#tagSelect HtmlTag.tagSelect 54 +nim tagSmall src/fusion/htmlparser.html#tagSmall HtmlTag.tagSmall 54 +nim tagSource src/fusion/htmlparser.html#tagSource HtmlTag.tagSource 54 +nim tagSpan src/fusion/htmlparser.html#tagSpan HtmlTag.tagSpan 54 +nim tagStrike src/fusion/htmlparser.html#tagStrike HtmlTag.tagStrike 54 +nim tagStrong src/fusion/htmlparser.html#tagStrong HtmlTag.tagStrong 54 +nim tagStyle src/fusion/htmlparser.html#tagStyle HtmlTag.tagStyle 54 +nim tagSub src/fusion/htmlparser.html#tagSub HtmlTag.tagSub 54 +nim tagSummary src/fusion/htmlparser.html#tagSummary HtmlTag.tagSummary 54 +nim tagSup src/fusion/htmlparser.html#tagSup HtmlTag.tagSup 54 +nim tagTable src/fusion/htmlparser.html#tagTable HtmlTag.tagTable 54 +nim tagTbody src/fusion/htmlparser.html#tagTbody HtmlTag.tagTbody 54 +nim tagTd src/fusion/htmlparser.html#tagTd HtmlTag.tagTd 54 +nim tagTextarea src/fusion/htmlparser.html#tagTextarea HtmlTag.tagTextarea 54 +nim tagTfoot src/fusion/htmlparser.html#tagTfoot HtmlTag.tagTfoot 54 +nim tagTh src/fusion/htmlparser.html#tagTh HtmlTag.tagTh 54 +nim tagThead src/fusion/htmlparser.html#tagThead HtmlTag.tagThead 54 +nim tagTime src/fusion/htmlparser.html#tagTime HtmlTag.tagTime 54 +nim tagTitle src/fusion/htmlparser.html#tagTitle HtmlTag.tagTitle 54 +nim tagTr src/fusion/htmlparser.html#tagTr HtmlTag.tagTr 54 +nim tagTrack src/fusion/htmlparser.html#tagTrack HtmlTag.tagTrack 54 +nim tagTt src/fusion/htmlparser.html#tagTt HtmlTag.tagTt 54 +nim tagU src/fusion/htmlparser.html#tagU HtmlTag.tagU 54 +nim tagUl src/fusion/htmlparser.html#tagUl HtmlTag.tagUl 54 +nim tagVar src/fusion/htmlparser.html#tagVar HtmlTag.tagVar 54 +nim tagVideo src/fusion/htmlparser.html#tagVideo HtmlTag.tagVideo 54 +nim tagWbr src/fusion/htmlparser.html#tagWbr HtmlTag.tagWbr 54 +nim HtmlTag src/fusion/htmlparser.html#HtmlTag enum HtmlTag 54 +nim tagToStr src/fusion/htmlparser.html#tagToStr const tagToStr 182 +nim InlineTags src/fusion/htmlparser.html#InlineTags const InlineTags 203 +nim BlockTags src/fusion/htmlparser.html#BlockTags const BlockTags 210 +nim SingleTags src/fusion/htmlparser.html#SingleTags const SingleTags 215 +nim htmlTag src/fusion/htmlparser.html#htmlTag,XmlNode proc htmlTag(n: XmlNode): HtmlTag 356 +nim htmlTag src/fusion/htmlparser.html#htmlTag,string proc htmlTag(s: string): HtmlTag 362 +nim runeToEntity src/fusion/htmlparser.html#runeToEntity,Rune proc runeToEntity(rune: Rune): string 368 +nim entityToRune src/fusion/htmlparser.html#entityToRune,string proc entityToRune(entity: string): Rune 379 +nim entityToUtf8 src/fusion/htmlparser.html#entityToUtf8,string proc entityToUtf8(entity: string): string 1872 +nim parseHtml src/fusion/htmlparser.html#parseHtml,Stream,string,seq[string] proc parseHtml(s: Stream; filename: string; errors: var seq[string]): XmlNode 1981 +nim parseHtml src/fusion/htmlparser.html#parseHtml,Stream proc parseHtml(s: Stream): XmlNode 2006 +nim parseHtml src/fusion/htmlparser.html#parseHtml,string proc parseHtml(html: string): XmlNode 2012 +nim loadHtml src/fusion/htmlparser.html#loadHtml,string,seq[string] proc loadHtml(path: string; errors: var seq[string]): XmlNode 2017 +nim loadHtml src/fusion/htmlparser.html#loadHtml,string proc loadHtml(path: string): XmlNode 2025 +nimgrp loadhtml src/fusion/htmlparser.html#loadHtml-procs-all proc 2017 +nimgrp parsehtml src/fusion/htmlparser.html#parseHtml-procs-all proc 1981 +nimgrp htmltag src/fusion/htmlparser.html#htmlTag-procs-all proc 356 +heading Example: Transforming hyperlinks src/fusion/htmlparser.html#examplecolon-transforming-hyperlinks Example: Transforming hyperlinks 0 diff --git a/src/fusion/htmlparser/parsexml.html b/src/fusion/htmlparser/parsexml.html new file mode 100644 index 0000000..700f5bf --- /dev/null +++ b/src/fusion/htmlparser/parsexml.html @@ -0,0 +1,511 @@ + + + + + + + +src/fusion/htmlparser/parsexml + + + + + + + + + + + + +
+
+

src/fusion/htmlparser/parsexml

+
+ +
+ +
+ +

This module implements a simple high performance XML / HTML parser. The only encoding that is supported is UTF-8. The parser has been designed to be somewhat error correcting, so that even most "wild HTML" found on the web can be parsed with it. Note: This parser does not check that each <tag> has a corresponding </tag>! These checks have do be implemented by the client code for various reasons:

  • Old HTML contains tags that have no end tag: <br> for example.
  • +
  • HTML tags are case insensitive, XML tags are case sensitive. Since this library can parse both, only the client knows which comparison is to be used.
  • +
  • Thus the checks would have been very difficult to implement properly with little benefit, especially since they are simple to implement in the client. The client should use the errorMsgExpected proc to generate a nice error message that fits the other error messages this library creates.
  • +
+ +

Example 1: Retrieve HTML title

The file examples/htmltitle.nim demonstrates how to use the XML parser to accomplish a simple task: To determine the title of an HTML document. .. code-block:: nim # Example program to show the parsexml module # This program reads an HTML file and writes its title to stdout. # Errors and whitespace are ignored. import os, streams, parsexml, strutils if paramCount() < 1: quit("Usage: htmltitle filename.html") var filename = addFileExt(paramStr(1), "html") var s = newFileStream(filename, fmRead) if s == nil: quit("cannot open the file " & filename) var x: XmlParser open(x, s, filename) while true: x.next() case x.kind of xmlElementStart: if cmpIgnoreCase(x.elementName, "title") == 0: var title = "" x.next() # skip "<title>" while x.kind == xmlCharData: title.add(x.charData) x.next() if x.kind == xmlElementEnd and cmpIgnoreCase(x.elementName, "title") == 0: echo("Title: " & title) quit(0) # Success! else: echo(x.errorMsgExpected("/title")) of xmlEof: break # end of file reached else: discard # ignore other events x.close() quit("Could not determine title!")

+ +

Example 2: Retrieve all HTML links

The file examples/htmlrefs.nim demonstrates how to use the XML parser to accomplish another simple task: To determine all the links an HTML document contains. .. code-block:: nim # Example program to show the new parsexml module # This program reads an HTML file and writes all its used links to stdout. # Errors and whitespace are ignored. import os, streams, parsexml, strutils proc =?= (a, b: string): bool = # little trick: define our own comparator that ignores case return cmpIgnoreCase(a, b) == 0 if paramCount() < 1: quit("Usage: htmlrefs filename.html") var links = 0 # count the number of links var filename = addFileExt(paramStr(1), "html") var s = newFileStream(filename, fmRead) if s == nil: quit("cannot open the file " & filename) var x: XmlParser open(x, s, filename) next(x) # get first event block mainLoop: while true: case x.kind of xmlElementOpen: # the <a href = "xyz"> tag we are interested in always has an attribute, # thus we search for xmlElementOpen and not for xmlElementStart if x.elementName =?= "a": x.next() if x.kind == xmlAttribute: if x.attrKey =?= "href": var link = x.attrValue inc(links) # skip until we have an xmlElementClose event while true: x.next() case x.kind of xmlEof: break mainLoop of xmlElementClose: break else: discard x.next() # skip xmlElementClose # now we have the description for the a element var desc = "" while x.kind == xmlCharData: desc.add(x.charData) x.next() echo(desc & ": " & link) else: x.next() of xmlEof: break # end of file reached of xmlError: echo(errorMsg(x)) x.next() else: x.next() # skip other events echo($links & " link(s) found!") x.close()

+

+
+

Types

+
+
+
XmlErrorKind = enum
+  errNone,                  ## no error
+  errEndOfCDataExpected,    ## ``]]>`` expected
+  errNameExpected,          ## name expected
+  errSemicolonExpected,     ## ``;`` expected
+  errQmGtExpected,          ## ``?>`` expected
+  errGtExpected,            ## ``>`` expected
+  errEqExpected,            ## ``=`` expected
+  errQuoteExpected,         ## ``"`` or ``'`` expected
+  errEndOfCommentExpected,  ## ``-->`` expected
+  errAttributeValueExpected  ## non-empty attribute value expected
+
+ + enumeration that lists all errors that can occur + +
+
+
+
XmlEventKind = enum
+  xmlError,                 ## an error occurred during parsing
+  xmlEof,                   ## end of file reached
+  xmlCharData,              ## character data
+  xmlWhitespace,            ## whitespace has been parsed
+  xmlComment,               ## a comment has been parsed
+  xmlPI,                    ## processing instruction (``<?name something ?>``)
+  xmlElementStart,          ## ``<elem>``
+  xmlElementEnd,            ## ``</elem>``
+  xmlElementOpen,           ## ``<elem
+  xmlAttribute,             ## ``key = "value"`` pair
+  xmlElementClose,          ## ``>``
+  xmlCData,                 ## ``<![CDATA[`` ... data ... ``]]>``
+  xmlEntity,                ## &entity;
+  xmlSpecial                 ## ``<! ... data ... >``
+
+ + enumeration of all events that may occur when parsing + +
+
+
+
XmlParseOption = enum
+  reportWhitespace,         ## report whitespace
+  reportComments,           ## report comments
+  allowUnquotedAttribs,     ## allow unquoted attribute values (for HTML)
+  allowEmptyAttribs          ## allow empty attributes (without explicit value)
+
+ + options for the XML parser + +
+
+
+
XmlParser = object of BaseLexer
+
+ + the parser object. + +
+
+ +
+
+
+

Procs

+
+
+
+
proc close(my: var XmlParser) {.inline, ...raises: [IOError, OSError],
+                                tags: [WriteIOEffect], forbids: [].}
+
+ + closes the parser my and its associated input stream. + +
+
+ +
+
+
+
proc errorMsg(my: XmlParser): string {....raises: [ValueError], tags: [],
+                                       forbids: [].}
+
+ + returns a helpful error message for the event xmlError + +
+
+
+
proc errorMsg(my: XmlParser; msg: string): string {....raises: [ValueError],
+    tags: [], forbids: [].}
+
+ + returns an error message with text msg in the same format as the other error messages + +
+
+ +
+
+
+
proc errorMsgExpected(my: XmlParser; tag: string): string {.
+    ...raises: [ValueError], tags: [], forbids: [].}
+
+ + returns an error message "<tag> expected" in the same format as the other error messages + +
+
+ +
+
+
+
proc getColumn(my: XmlParser): int {.inline, ...raises: [], tags: [], forbids: [].}
+
+ + get the current column the parser has arrived at. + +
+
+ +
+
+
+
proc getFilename(my: XmlParser): string {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ + get the filename of the file that the parser processes. + +
+
+ +
+
+
+
proc getLine(my: XmlParser): int {.inline, ...raises: [], tags: [], forbids: [].}
+
+ + get the current line the parser has arrived at. + +
+
+ +
+
+
+
proc kind(my: XmlParser): XmlEventKind {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ + returns the current event type for the XML parser + +
+
+ +
+
+
+
proc next(my: var XmlParser) {....raises: [IOError, OSError], tags: [ReadIOEffect],
+                               forbids: [].}
+
+ + retrieves the first/next event. This controls the parser. + +
+
+ +
+
+
+
proc open(my: var XmlParser; input: Stream; filename: string;
+          options: set[XmlParseOption] = {}) {....raises: [IOError, OSError],
+    tags: [ReadIOEffect], forbids: [].}
+
+ + initializes the parser with an input stream. Filename is only used for nice error messages. The parser's behaviour can be controlled by the options parameter: If options contains reportWhitespace a whitespace token is reported as an xmlWhitespace event. If options contains reportComments a comment token is reported as an xmlComment event. + +
+
+ +
+
+
+
proc rawData(my: var XmlParser): string {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ + returns the underlying 'data' string by reference. This is only used for speed hacks. + +
+
+ +
+
+
+
proc rawData2(my: var XmlParser): string {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ + returns the underlying second 'data' string by reference. This is only used for speed hacks. + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template attrKey(my: XmlParser): string
+
+ + returns the attribute key for the event xmlAttribute Raises an assertion in debug mode if my.kind is not xmlAttribute. In release mode, this will not trigger an error but the value returned will not be valid. + +
+
+ +
+
+
+
template attrValue(my: XmlParser): string
+
+ + returns the attribute value for the event xmlAttribute Raises an assertion in debug mode if my.kind is not xmlAttribute. In release mode, this will not trigger an error but the value returned will not be valid. + +
+
+ +
+
+
+
template charData(my: XmlParser): string
+
+ + returns the character data for the events: xmlCharData, xmlWhitespace, xmlComment, xmlCData, xmlSpecial Raises an assertion in debug mode if my.kind is not one of those events. In release mode, this will not trigger an error but the value returned will not be valid. + +
+
+ +
+
+
+
template elementName(my: XmlParser): string
+
+ + returns the element name for the events: xmlElementStart, xmlElementEnd, xmlElementOpen Raises an assertion in debug mode if my.kind is not one of those events. In release mode, this will not trigger an error but the value returned will not be valid. + +
+
+ +
+
+
+
template entityName(my: XmlParser): string
+
+ + returns the entity name for the event: xmlEntity Raises an assertion in debug mode if my.kind is not xmlEntity. In release mode, this will not trigger an error but the value returned will not be valid. + +
+
+ +
+
+
+
template piName(my: XmlParser): string
+
+ + returns the processing instruction name for the event xmlPI Raises an assertion in debug mode if my.kind is not xmlPI. In release mode, this will not trigger an error but the value returned will not be valid. + +
+
+ +
+
+
+
template piRest(my: XmlParser): string
+
+ + returns the rest of the processing instruction for the event xmlPI Raises an assertion in debug mode if my.kind is not xmlPI. In release mode, this will not trigger an error but the value returned will not be valid. + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/htmlparser/parsexml.idx b/src/fusion/htmlparser/parsexml.idx new file mode 100644 index 0000000..a38d61a --- /dev/null +++ b/src/fusion/htmlparser/parsexml.idx @@ -0,0 +1,57 @@ +nimTitle parsexml src/fusion/htmlparser/parsexml.html module src/fusion/htmlparser/parsexml 0 +nim xmlError src/fusion/htmlparser/parsexml.html#xmlError XmlEventKind.xmlError 137 +nim xmlEof src/fusion/htmlparser/parsexml.html#xmlEof XmlEventKind.xmlEof 137 +nim xmlCharData src/fusion/htmlparser/parsexml.html#xmlCharData XmlEventKind.xmlCharData 137 +nim xmlWhitespace src/fusion/htmlparser/parsexml.html#xmlWhitespace XmlEventKind.xmlWhitespace 137 +nim xmlComment src/fusion/htmlparser/parsexml.html#xmlComment XmlEventKind.xmlComment 137 +nim xmlPI src/fusion/htmlparser/parsexml.html#xmlPI XmlEventKind.xmlPI 137 +nim xmlElementStart src/fusion/htmlparser/parsexml.html#xmlElementStart XmlEventKind.xmlElementStart 137 +nim xmlElementEnd src/fusion/htmlparser/parsexml.html#xmlElementEnd XmlEventKind.xmlElementEnd 137 +nim xmlElementOpen src/fusion/htmlparser/parsexml.html#xmlElementOpen XmlEventKind.xmlElementOpen 137 +nim xmlAttribute src/fusion/htmlparser/parsexml.html#xmlAttribute XmlEventKind.xmlAttribute 137 +nim xmlElementClose src/fusion/htmlparser/parsexml.html#xmlElementClose XmlEventKind.xmlElementClose 137 +nim xmlCData src/fusion/htmlparser/parsexml.html#xmlCData XmlEventKind.xmlCData 137 +nim xmlEntity src/fusion/htmlparser/parsexml.html#xmlEntity XmlEventKind.xmlEntity 137 +nim xmlSpecial src/fusion/htmlparser/parsexml.html#xmlSpecial XmlEventKind.xmlSpecial 137 +nim XmlEventKind src/fusion/htmlparser/parsexml.html#XmlEventKind enum XmlEventKind 137 +nim errNone src/fusion/htmlparser/parsexml.html#errNone XmlErrorKind.errNone 153 +nim errEndOfCDataExpected src/fusion/htmlparser/parsexml.html#errEndOfCDataExpected XmlErrorKind.errEndOfCDataExpected 153 +nim errNameExpected src/fusion/htmlparser/parsexml.html#errNameExpected XmlErrorKind.errNameExpected 153 +nim errSemicolonExpected src/fusion/htmlparser/parsexml.html#errSemicolonExpected XmlErrorKind.errSemicolonExpected 153 +nim errQmGtExpected src/fusion/htmlparser/parsexml.html#errQmGtExpected XmlErrorKind.errQmGtExpected 153 +nim errGtExpected src/fusion/htmlparser/parsexml.html#errGtExpected XmlErrorKind.errGtExpected 153 +nim errEqExpected src/fusion/htmlparser/parsexml.html#errEqExpected XmlErrorKind.errEqExpected 153 +nim errQuoteExpected src/fusion/htmlparser/parsexml.html#errQuoteExpected XmlErrorKind.errQuoteExpected 153 +nim errEndOfCommentExpected src/fusion/htmlparser/parsexml.html#errEndOfCommentExpected XmlErrorKind.errEndOfCommentExpected 153 +nim errAttributeValueExpected src/fusion/htmlparser/parsexml.html#errAttributeValueExpected XmlErrorKind.errAttributeValueExpected 153 +nim XmlErrorKind src/fusion/htmlparser/parsexml.html#XmlErrorKind enum XmlErrorKind 153 +nim reportWhitespace src/fusion/htmlparser/parsexml.html#reportWhitespace XmlParseOption.reportWhitespace 168 +nim reportComments src/fusion/htmlparser/parsexml.html#reportComments XmlParseOption.reportComments 168 +nim allowUnquotedAttribs src/fusion/htmlparser/parsexml.html#allowUnquotedAttribs XmlParseOption.allowUnquotedAttribs 168 +nim allowEmptyAttribs src/fusion/htmlparser/parsexml.html#allowEmptyAttribs XmlParseOption.allowEmptyAttribs 168 +nim XmlParseOption src/fusion/htmlparser/parsexml.html#XmlParseOption enum XmlParseOption 168 +nim XmlParser src/fusion/htmlparser/parsexml.html#XmlParser object XmlParser 174 +nim open src/fusion/htmlparser/parsexml.html#open,XmlParser,Stream,string,set[XmlParseOption] proc open(my: var XmlParser; input: Stream; filename: string;\n options: set[XmlParseOption] = {}) 197 +nim close src/fusion/htmlparser/parsexml.html#close,XmlParser proc close(my: var XmlParser) 215 +nim kind src/fusion/htmlparser/parsexml.html#kind,XmlParser proc kind(my: XmlParser): XmlEventKind 219 +nim charData src/fusion/htmlparser/parsexml.html#charData.t,XmlParser template charData(my: XmlParser): string 223 +nim elementName src/fusion/htmlparser/parsexml.html#elementName.t,XmlParser template elementName(my: XmlParser): string 233 +nim entityName src/fusion/htmlparser/parsexml.html#entityName.t,XmlParser template entityName(my: XmlParser): string 242 +nim attrKey src/fusion/htmlparser/parsexml.html#attrKey.t,XmlParser template attrKey(my: XmlParser): string 250 +nim attrValue src/fusion/htmlparser/parsexml.html#attrValue.t,XmlParser template attrValue(my: XmlParser): string 258 +nim piName src/fusion/htmlparser/parsexml.html#piName.t,XmlParser template piName(my: XmlParser): string 266 +nim piRest src/fusion/htmlparser/parsexml.html#piRest.t,XmlParser template piRest(my: XmlParser): string 274 +nim rawData src/fusion/htmlparser/parsexml.html#rawData,XmlParser proc rawData(my: var XmlParser): string 282 +nim rawData2 src/fusion/htmlparser/parsexml.html#rawData2,XmlParser proc rawData2(my: var XmlParser): string 290 +nim getColumn src/fusion/htmlparser/parsexml.html#getColumn,XmlParser proc getColumn(my: XmlParser): int 298 +nim getLine src/fusion/htmlparser/parsexml.html#getLine,XmlParser proc getLine(my: XmlParser): int 302 +nim getFilename src/fusion/htmlparser/parsexml.html#getFilename,XmlParser proc getFilename(my: XmlParser): string 306 +nim errorMsg src/fusion/htmlparser/parsexml.html#errorMsg,XmlParser proc errorMsg(my: XmlParser): string 310 +nim errorMsgExpected src/fusion/htmlparser/parsexml.html#errorMsgExpected,XmlParser,string proc errorMsgExpected(my: XmlParser; tag: string): string 316 +nim errorMsg src/fusion/htmlparser/parsexml.html#errorMsg,XmlParser,string proc errorMsg(my: XmlParser; msg: string): string 322 +nim next src/fusion/htmlparser/parsexml.html#next,XmlParser proc next(my: var XmlParser) 737 +nimgrp errormsg src/fusion/htmlparser/parsexml.html#errorMsg-procs-all proc 310 +idx XML src/fusion/htmlparser/parsexml.html#xml_1 Module parsexml 0 +idx HTML src/fusion/htmlparser/parsexml.html#html_1 Module parsexml 0 +heading Example 1: Retrieve HTML title src/fusion/htmlparser/parsexml.html#example-1colon-retrieve-html-title Example 1: Retrieve HTML title 0 +heading Example 2: Retrieve all HTML links src/fusion/htmlparser/parsexml.html#example-2colon-retrieve-all-html-links Example 2: Retrieve all HTML links 0 diff --git a/src/fusion/htmlparser/xmltree.html b/src/fusion/htmlparser/xmltree.html new file mode 100644 index 0000000..918ebdb --- /dev/null +++ b/src/fusion/htmlparser/xmltree.html @@ -0,0 +1,1144 @@ + + + + + + + +src/fusion/htmlparser/xmltree + + + + + + + + + + + + +
+
+

src/fusion/htmlparser/xmltree

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

A simple XML tree generator.

import xmltree
+
+var g = newElement("myTag")
+g.add newText("some text")
+g.add newComment("this is comment")
+
+var h = newElement("secondTag")
+h.add newEntity("some entity")
+
+let att = {"key1": "first value", "key2": "second value"}.toXmlAttributes
+let k = newXmlTree("treeTag", [g, h], att)
+
+echo k
+# <treeTag key2="second value" key1="first value">
+#   <myTag>some text<!-- this is comment --></myTag>
+#   <secondTag>&some entity;</secondTag>
+# </treeTag>

See also:

+ +

+
+

Types

+
+
+
XmlAttributes = StringTableRef
+
+ +

An alias for a string to string mapping.

+

Use toXmlAttributes proc to create XmlAttributes.

+ + +
+
+
+
XmlNode = ref XmlNodeObj
+
+ +

An XML tree consisting of XML nodes.

+

Use newXmlTree proc for creating a new tree.

+ + +
+
+
+
XmlNodeKind = enum
+  xnText,                   ## a text element
+  xnVerbatimText, xnElement, ## an element with 0 or more children
+  xnCData,                  ## a CDATA node
+  xnEntity,                 ## an entity (like ``&thing;``)
+  xnComment                  ## an XML comment
+
+ + Different kinds of XML nodes. + +
+
+ +
+
+
+

Consts

+
+
+
xmlHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
+
+ + Header to use for complete XML output. + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(n: XmlNode): string {....raises: [], tags: [], forbids: [].}
+
+ +

Converts n into its string representation.

+

No <$xml ...$> declaration is produced, so that the produced XML fragments are composable.

+ + +
+
+ +
+
+
+
proc `[]`(n: var XmlNode; i: int): var XmlNode {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ + Returns the i'th child of n so that it can be modified. + +
+
+
+
proc `[]`(n: XmlNode; i: int): XmlNode {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ + Returns the i'th child of n. +

Example:

+
var f = newElement("myTag")
+f.add newElement("first")
+f.insert(newElement("second"), 0)
+assert $f[1] == "<first>\n</first>"
+assert $f[0] == "<second>\n</second>"
+ +
+
+ +
+
+
+
proc add(father, son: XmlNode) {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +

Adds the child son to father.

+

See also:

+ + +

Example:

+
var f = newElement("myTag")
+f.add newText("my text")
+f.add newElement("sonTag")
+f.add newEntity("my entity")
+assert $f == "<myTag>my text<sonTag></sonTag>&my entity;</myTag>"
+ +
+
+
+
proc add(result: var string; n: XmlNode; indent = 0; indWidth = 2;
+         addNewLines = true) {....raises: [], tags: [], forbids: [].}
+
+ + Adds the textual representation of n to string result. +

Example:

+
var
+  a = newElement("firstTag")
+  b = newText("my text")
+  c = newComment("my comment")
+  s = ""
+s.add(c)
+a.add(b)
+s.add(a)
+assert s == "<!-- my comment --><firstTag>my text</firstTag>"
+ +
+
+ +
+
+
+
proc addEscaped(result: var string; s: string) {....raises: [], tags: [],
+    forbids: [].}
+
+ + The same as result.add(escape(s)), but more efficient. + +
+
+ +
+
+
+
proc attr(n: XmlNode; name: string): string {....raises: [], tags: [], forbids: [].}
+
+ +

Finds the first attribute of n with a name of name. Returns "" on failure.

+

See also:

+ + +

Example:

+
var j = newElement("myTag")
+let att = {"key1": "first value", "key2": "second value"}.toXmlAttributes
+j.attrs = att
+assert j.attr("key1") == "first value"
+assert j.attr("key2") == "second value"
+ +
+
+ +
+
+
+
proc attrs(n: XmlNode): XmlAttributes {.inline, ...raises: [], tags: [],
+                                        forbids: [].}
+
+ +

Gets the attributes belonging to n.

+

Returns nil if attributes have not been initialised for this node.

+

See also:

+ + +

Example:

+
var j = newElement("myTag")
+assert j.attrs == nil
+let att = {"key1": "first value", "key2": "second value"}.toXmlAttributes
+j.attrs = att
+assert j.attrs == att
+ +
+
+ +
+
+
+
proc attrs=(n: XmlNode; attr: XmlAttributes) {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +

Sets the attributes belonging to n.

+

See also:

+ + +

Example:

+
var j = newElement("myTag")
+assert j.attrs == nil
+let att = {"key1": "first value", "key2": "second value"}.toXmlAttributes
+j.attrs = att
+assert j.attrs == att
+ +
+
+ +
+
+
+
proc attrsLen(n: XmlNode): int {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +

Returns the number of n's attributes.

+

See also:

+ + +

Example:

+
var j = newElement("myTag")
+assert j.attrsLen == 0
+let att = {"key1": "first value", "key2": "second value"}.toXmlAttributes
+j.attrs = att
+assert j.attrsLen == 2
+ +
+
+ +
+
+
+
proc child(n: XmlNode; name: string): XmlNode {....raises: [], tags: [],
+    forbids: [].}
+
+ + Finds the first child element of n with a name of name. Returns nil on failure. +

Example:

+
var f = newElement("myTag")
+f.add newElement("firstSon")
+f.add newElement("secondSon")
+f.add newElement("thirdSon")
+assert $(f.child("secondSon")) == "<secondSon>\n</secondSon>"
+ +
+
+ +
+
+
+
proc clear(n: var XmlNode) {....raises: [], tags: [], forbids: [].}
+
+ + Recursively clear all children of an XmlNode.
var g = newElement("myTag")
+g.add newText("some text")
+g.add newComment("this is comment")
+
+var h = newElement("secondTag")
+h.add newEntity("some entity")
+
+let att = {"key1": "first value", "key2": "second value"}.toXmlAttributes
+var k = newXmlTree("treeTag", [g, h], att)
+
+echo k
+## <treeTag key2="second value" key1="first value">
+##   <myTag>some text<!-- this is comment --></myTag>
+##   <secondTag>&some entity;</secondTag>
+## </treeTag>
+
+clear(k)
+echo k
+## <treeTag key2="second value" key1="first value" />
+ +
+
+ +
+
+
+
proc clientData(n: XmlNode): int {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +

Gets the client data of n.

+

The client data field is used by the HTML parser and generator.

+ + +
+
+ +
+
+
+
proc clientData=(n: XmlNode; data: int) {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +

Sets the client data of n.

+

The client data field is used by the HTML parser and generator.

+ + +
+
+ +
+
+
+
proc delete(n: XmlNode; i: Natural) {.noSideEffect, ...raises: [], tags: [],
+                                      forbids: [].}
+
+ +

Delete the i'th child of n.

+

See also:

+ + +

Example:

+
var f = newElement("myTag")
+f.add newElement("first")
+f.insert(newElement("second"), 0)
+f.delete(0)
+assert $f == """<myTag>
+  <first>
+  </first>
+</myTag>"""
+ +
+
+ +
+
+
+
proc escape(s: string): string {....raises: [], tags: [], forbids: [].}
+
+ +

Escapes s for inclusion into an XML document.

+

Escapes these characters:

+ + + + + + +
charis converted to
<&lt;
>&gt;
&&amp;
"&quot;
'&apos;

You can also use addEscaped proc.

+ + +
+
+ +
+
+
+
proc findAll(n: XmlNode; tag: string; caseInsensitive = false): seq[XmlNode] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ + A shortcut version to assign in let blocks. +

Example:

+
var
+  b = newElement("good")
+  c = newElement("bad")
+  d = newElement("BAD")
+  e = newElement("GOOD")
+b.add newText("b text")
+c.add newText("c text")
+d.add newText("d text")
+e.add newText("e text")
+let a = newXmlTree("father", [b, c, d, e])
+assert $(a.findAll("good")) == "@[<good>b text</good>]"
+assert $(a.findAll("BAD")) == "@[<BAD>d text</BAD>]"
+assert $(a.findAll("good", caseInsensitive = true)) == "@[<good>b text</good>, <GOOD>e text</GOOD>]"
+assert $(a.findAll("BAD", caseInsensitive = true)) == "@[<bad>c text</bad>, <BAD>d text</BAD>]"
+ +
+
+
+
proc findAll(n: XmlNode; tag: string; result: var seq[XmlNode];
+             caseInsensitive = false) {....raises: [], tags: [], forbids: [].}
+
+ +

Iterates over all the children of n returning those matching tag.

+

Found nodes satisfying the condition will be appended to the result sequence.

+ +

Example:

+
var
+  b = newElement("good")
+  c = newElement("bad")
+  d = newElement("BAD")
+  e = newElement("GOOD")
+b.add newText("b text")
+c.add newText("c text")
+d.add newText("d text")
+e.add newText("e text")
+let a = newXmlTree("father", [b, c, d, e])
+var s = newSeq[XmlNode]()
+a.findAll("good", s)
+assert $s == "@[<good>b text</good>]"
+s.setLen(0)
+a.findAll("good", s, caseInsensitive = true)
+assert $s == "@[<good>b text</good>, <GOOD>e text</GOOD>]"
+s.setLen(0)
+a.findAll("BAD", s)
+assert $s == "@[<BAD>d text</BAD>]"
+s.setLen(0)
+a.findAll("BAD", s, caseInsensitive = true)
+assert $s == "@[<bad>c text</bad>, <BAD>d text</BAD>]"
+ +
+
+ +
+
+
+
proc innerText(n: XmlNode): string {....raises: [], tags: [], forbids: [].}
+
+ + Gets the inner text of n:
  • If n is xnText or xnEntity, returns its content.
  • +
  • If n is xnElement, runs recursively on each child node and concatenates the results.
  • +
  • Otherwise returns an empty string.
  • +
+

See also:

+ + +

Example:

+
var f = newElement("myTag")
+f.add newText("my text")
+f.add newComment("my comment")
+f.add newEntity("my entity")
+assert $f == "<myTag>my text<!-- my comment -->&my entity;</myTag>"
+assert innerText(f) == "my textmy entity"
+ +
+
+ +
+
+
+
proc insert(father, son: XmlNode; index: int) {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +

Insert the child son to a given position in father.

+

father and son must be of xnElement kind.

+

See also:

+ + +

Example:

+
var f = newElement("myTag")
+f.add newElement("first")
+f.insert(newElement("second"), 0)
+assert $f == """<myTag>
+  <second>
+  </second>
+  <first>
+  </first>
+</myTag>"""
+ +
+
+ +
+
+
+
proc kind(n: XmlNode): XmlNodeKind {.inline, ...raises: [], tags: [], forbids: [].}
+
+ + Returns n's kind. +

Example:

+
var a = newElement("firstTag")
+assert a.kind == xnElement
+var b = newText("my text")
+assert b.kind == xnText
+ +
+
+ +
+
+
+
proc len(n: XmlNode): int {.inline, ...raises: [], tags: [], forbids: [].}
+
+ + Returns the number of n's children. +

Example:

+
var f = newElement("myTag")
+f.add newElement("first")
+f.insert(newElement("second"), 0)
+assert len(f) == 2
+ +
+
+ +
+
+
+
proc newCData(cdata: string): XmlNode {....raises: [], tags: [], forbids: [].}
+
+ + Creates a new XmlNode of kind xnCData with the text cdata. +

Example:

+
var d = newCData("my cdata")
+assert d.kind == xnCData
+assert $d == "<![CDATA[my cdata]]>"
+ +
+
+ +
+
+
+
proc newComment(comment: string): XmlNode {....raises: [], tags: [], forbids: [].}
+
+ + Creates a new XmlNode of kind xnComment with the text comment. +

Example:

+
var c = newComment("my comment")
+assert c.kind == xnComment
+assert $c == "<!-- my comment -->"
+ +
+
+ +
+
+
+
proc newElement(tag: string): XmlNode {....raises: [], tags: [], forbids: [].}
+
+ +

Creates a new XmlNode of kind xnElement with the given tag.

+

See also:

+ + +

Example:

+
var a = newElement("firstTag")
+a.add newElement("childTag")
+assert a.kind == xnElement
+assert $a == """<firstTag>
+  <childTag>
+  </childTag>
+</firstTag>"""
+ +
+
+ +
+
+
+
proc newEntity(entity: string): XmlNode {....raises: [], tags: [], forbids: [].}
+
+ + Creates a new XmlNode of kind xnEntity with the text entity. +

Example:

+
var e = newEntity("my entity")
+assert e.kind == xnEntity
+assert $e == "&my entity;"
+ +
+
+ +
+
+
+
proc newText(text: string): XmlNode {....raises: [], tags: [], forbids: [].}
+
+ + Creates a new XmlNode of kind xnText with the text text. +

Example:

+
var b = newText("my text")
+assert b.kind == xnText
+assert $b == "my text"
+ +
+
+ +
+
+
+
proc newVerbatimText(text: string): XmlNode {....raises: [], tags: [], forbids: [].}
+
+ + Creates a new XmlNode of kind xnVerbatimText with the text text. Since: Version 1.3. + +
+
+ +
+
+
+
proc newXmlTree(tag: string; children: openArray[XmlNode];
+                attributes: XmlAttributes = nil): XmlNode {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Creates a new XML tree with tag, children and attributes.

+

See also:

+ +
var g = newElement("myTag")
+g.add newText("some text")
+g.add newComment("this is comment")
+var h = newElement("secondTag")
+h.add newEntity("some entity")
+let att = {"key1": "first value", "key2": "second value"}.toXmlAttributes
+let k = newXmlTree("treeTag", [g, h], att)
+
+echo k
+## <treeTag key2="second value" key1="first value">
+##   <myTag>some text<!-- this is comment --></myTag>
+##   <secondTag>&some entity;</secondTag>
+## </treeTag>
+ +
+
+ +
+
+
+
proc rawTag(n: XmlNode): string {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +

Returns the underlying 'tag' string by reference.

+

This is only used for speed hacks.

+ + +
+
+ +
+
+
+
proc rawText(n: XmlNode): string {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +

Returns the underlying 'text' string by reference.

+

This is only used for speed hacks.

+ + +
+
+ +
+
+
+
proc tag(n: XmlNode): string {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +

Gets the tag name of n.

+

n has to be an xnElement node.

+

See also:

+ + +

Example:

+
var a = newElement("firstTag")
+a.add newElement("childTag")
+assert $a == """<firstTag>
+  <childTag>
+  </childTag>
+</firstTag>"""
+assert a.tag == "firstTag"
+ +
+
+ +
+
+
+
proc tag=(n: XmlNode; tag: string) {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +

Sets the tag name of n.

+

n has to be an xnElement node.

+

See also:

+ + +

Example:

+
var a = newElement("firstTag")
+a.add newElement("childTag")
+assert $a == """<firstTag>
+  <childTag>
+  </childTag>
+</firstTag>"""
+a.tag = "newTag"
+assert $a == """<newTag>
+  <childTag>
+  </childTag>
+</newTag>"""
+ +
+
+ +
+
+
+
proc text(n: XmlNode): string {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +

Gets the associated text with the node n.

+

n can be a CDATA, Text, comment, or entity node.

+

See also:

+ + +

Example:

+
var c = newComment("my comment")
+assert $c == "<!-- my comment -->"
+assert c.text == "my comment"
+ +
+
+ +
+
+
+
proc text=(n: XmlNode; text: string) {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +

Sets the associated text with the node n.

+

n can be a CDATA, Text, comment, or entity node.

+

See also:

+ + +

Example:

+
var e = newEntity("my entity")
+assert $e == "&my entity;"
+e.text = "a new entity text"
+assert $e == "&a new entity text;"
+ +
+
+ +
+
+
+
proc toXmlAttributes(keyValuePairs: varargs[tuple[key, val: string]]): XmlAttributes {.
+    ...raises: [], tags: [], forbids: [].}
+
+ + Converts {key: value} pairs into XmlAttributes.
let att = {"key1": "first value", "key2": "second value"}.toXmlAttributes
+var j = newElement("myTag")
+j.attrs = att
+
+echo j
+## <myTag key2="second value" key1="first value" />
+ +
+
+ +
+ +
+
+
+

Iterators

+
+
+
+
iterator items(n: XmlNode): XmlNode {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +

Iterates over all direct children of n.

+

Examples:

+
var g = newElement("myTag")
+g.add newText("some text")
+g.add newComment("this is comment")
+
+var h = newElement("secondTag")
+h.add newEntity("some entity")
+g.add h
+
+assert $g == "<myTag>some text<!-- this is comment --><secondTag>&some entity;</secondTag></myTag>"
+for x in g: # the same as `for x in items(g):`
+  echo x
+
+# some text
+# <!-- this is comment -->
+# <secondTag>&some entity;<![CDATA[some cdata]]></secondTag>
+ +
+
+ +
+
+
+
iterator mitems(n: var XmlNode): var XmlNode {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ + Iterates over all direct children of n so that they can be modified. + +
+
+ +
+ +
+
+
+

Macros

+
+
+
+
macro `<>`(x: untyped): untyped
+
+ + Constructor macro for XML. Example usage:
<>a(href="http://nim-lang.org", newText("Nim rules."))

Produces an XML tree for::

+

<a href="http://nim-lang.org">Nim rules.</a>

+ + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/htmlparser/xmltree.idx b/src/fusion/htmlparser/xmltree.idx new file mode 100644 index 0000000..e71d012 --- /dev/null +++ b/src/fusion/htmlparser/xmltree.idx @@ -0,0 +1,53 @@ +nimTitle xmltree src/fusion/htmlparser/xmltree.html module src/fusion/htmlparser/xmltree 0 +nim XmlNode src/fusion/htmlparser/xmltree.html#XmlNode type XmlNode 41 +nim xnText src/fusion/htmlparser/xmltree.html#xnText XmlNodeKind.xnText 46 +nim xnVerbatimText src/fusion/htmlparser/xmltree.html#xnVerbatimText XmlNodeKind.xnVerbatimText 46 +nim xnElement src/fusion/htmlparser/xmltree.html#xnElement XmlNodeKind.xnElement 46 +nim xnCData src/fusion/htmlparser/xmltree.html#xnCData XmlNodeKind.xnCData 46 +nim xnEntity src/fusion/htmlparser/xmltree.html#xnEntity XmlNodeKind.xnEntity 46 +nim xnComment src/fusion/htmlparser/xmltree.html#xnComment XmlNodeKind.xnComment 46 +nim XmlNodeKind src/fusion/htmlparser/xmltree.html#XmlNodeKind enum XmlNodeKind 46 +nim XmlAttributes src/fusion/htmlparser/xmltree.html#XmlAttributes type XmlAttributes 54 +nim xmlHeader src/fusion/htmlparser/xmltree.html#xmlHeader const xmlHeader 70 +nim newElement src/fusion/htmlparser/xmltree.html#newElement,string proc newElement(tag: string): XmlNode 85 +nim newText src/fusion/htmlparser/xmltree.html#newText,string proc newText(text: string): XmlNode 105 +nim newVerbatimText src/fusion/htmlparser/xmltree.html#newVerbatimText,string proc newVerbatimText(text: string): XmlNode 115 +nim newComment src/fusion/htmlparser/xmltree.html#newComment,string proc newComment(comment: string): XmlNode 121 +nim newCData src/fusion/htmlparser/xmltree.html#newCData,string proc newCData(cdata: string): XmlNode 131 +nim newEntity src/fusion/htmlparser/xmltree.html#newEntity,string proc newEntity(entity: string): XmlNode 141 +nim newXmlTree src/fusion/htmlparser/xmltree.html#newXmlTree,string,openArray[XmlNode],XmlAttributes proc newXmlTree(tag: string; children: openArray[XmlNode];\n attributes: XmlAttributes = nil): XmlNode 151 +nim text src/fusion/htmlparser/xmltree.html#text,XmlNode proc text(n: XmlNode): string 180 +nim text= src/fusion/htmlparser/xmltree.html#text=,XmlNode,string proc text=(n: XmlNode; text: string) 198 +nim tag src/fusion/htmlparser/xmltree.html#tag,XmlNode proc tag(n: XmlNode): string 216 +nim tag= src/fusion/htmlparser/xmltree.html#tag=,XmlNode,string proc tag=(n: XmlNode; tag: string) 238 +nim rawText src/fusion/htmlparser/xmltree.html#rawText,XmlNode proc rawText(n: XmlNode): string 263 +nim rawTag src/fusion/htmlparser/xmltree.html#rawTag,XmlNode proc rawTag(n: XmlNode): string 272 +nim innerText src/fusion/htmlparser/xmltree.html#innerText,XmlNode proc innerText(n: XmlNode): string 281 +nim add src/fusion/htmlparser/xmltree.html#add,XmlNode,XmlNode proc add(father, son: XmlNode) 312 +nim insert src/fusion/htmlparser/xmltree.html#insert,XmlNode,XmlNode,int proc insert(father, son: XmlNode; index: int) 326 +nim delete src/fusion/htmlparser/xmltree.html#delete,XmlNode,Natural proc delete(n: XmlNode; i: Natural) 351 +nim len src/fusion/htmlparser/xmltree.html#len,XmlNode proc len(n: XmlNode): int 370 +nim kind src/fusion/htmlparser/xmltree.html#kind,XmlNode proc kind(n: XmlNode): XmlNodeKind 379 +nim `[]` src/fusion/htmlparser/xmltree.html#[],XmlNode,int proc `[]`(n: XmlNode; i: int): XmlNode 388 +nim `[]` src/fusion/htmlparser/xmltree.html#[],XmlNode,int_2 proc `[]`(n: var XmlNode; i: int): var XmlNode 400 +nim clear src/fusion/htmlparser/xmltree.html#clear,XmlNode proc clear(n: var XmlNode) 405 +nim items src/fusion/htmlparser/xmltree.html#items.i,XmlNode iterator items(n: XmlNode): XmlNode 435 +nim mitems src/fusion/htmlparser/xmltree.html#mitems.i,XmlNode iterator mitems(n: var XmlNode): var XmlNode 460 +nim toXmlAttributes src/fusion/htmlparser/xmltree.html#toXmlAttributes,varargs[tuple[string,string]] proc toXmlAttributes(keyValuePairs: varargs[tuple[key, val: string]]): XmlAttributes 465 +nim attrs src/fusion/htmlparser/xmltree.html#attrs,XmlNode proc attrs(n: XmlNode): XmlAttributes 479 +nim attrs= src/fusion/htmlparser/xmltree.html#attrs=,XmlNode,XmlAttributes proc attrs=(n: XmlNode; attr: XmlAttributes) 498 +nim attrsLen src/fusion/htmlparser/xmltree.html#attrsLen,XmlNode proc attrsLen(n: XmlNode): int 515 +nim attr src/fusion/htmlparser/xmltree.html#attr,XmlNode,string proc attr(n: XmlNode; name: string): string 532 +nim clientData src/fusion/htmlparser/xmltree.html#clientData,XmlNode proc clientData(n: XmlNode): int 551 +nim clientData= src/fusion/htmlparser/xmltree.html#clientData=,XmlNode,int proc clientData=(n: XmlNode; data: int) 557 +nim addEscaped src/fusion/htmlparser/xmltree.html#addEscaped,string,string proc addEscaped(result: var string; s: string) 563 +nim escape src/fusion/htmlparser/xmltree.html#escape,string proc escape(s: string): string 574 +nim add src/fusion/htmlparser/xmltree.html#add,string,XmlNode,int,int proc add(result: var string; n: XmlNode; indent = 0; indWidth = 2; addNewLines = true) 599 +nim `$` src/fusion/htmlparser/xmltree.html#$,XmlNode proc `$`(n: XmlNode): string 687 +nim child src/fusion/htmlparser/xmltree.html#child,XmlNode,string proc child(n: XmlNode; name: string): XmlNode 695 +nim findAll src/fusion/htmlparser/xmltree.html#findAll,XmlNode,string,seq[XmlNode] proc findAll(n: XmlNode; tag: string; result: var seq[XmlNode];\n caseInsensitive = false) 711 +nim findAll src/fusion/htmlparser/xmltree.html#findAll,XmlNode,string proc findAll(n: XmlNode; tag: string; caseInsensitive = false): seq[XmlNode] 750 +nim `<>` src/fusion/htmlparser/xmltree.html#<>.m,untyped macro `<>`(x: untyped): untyped 795 +nimgrp add src/fusion/htmlparser/xmltree.html#add-procs-all proc 312 +nimgrp findall src/fusion/htmlparser/xmltree.html#findAll-procs-all proc 711 +nimgrp [] src/fusion/htmlparser/xmltree.html#[]-procs-all proc 388 diff --git a/src/fusion/ioutils.html b/src/fusion/ioutils.html new file mode 100644 index 0000000..71096cd --- /dev/null +++ b/src/fusion/ioutils.html @@ -0,0 +1,155 @@ + + + + + + + +src/fusion/ioutils + + + + + + + + + + + + +
+
+

src/fusion/ioutils

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

Also defined in std/posix and system/io

+
+

Procs

+
+
+
+
proc duplicate(oldfd: FileHandle): FileHandle {....raises: [IOError], tags: [],
+    forbids: [].}
+
+ + Return a copy of the file handle oldfd. After a successful return, both FileHandle may be used interchangeably. They refer to the same open file description and share file offset and status flags. Calls POSIX function dup on Posix platform and _dup on Windows +

Example:

+
# stdoutDuplicate is a copy of stdout FileHandle that points to STDOUT
+let stdoutDuplicate = duplicate(stdout.getFileHandle())
+# Writing to stdoutDuplicate will write to stdout
+doAssert(stdoutDuplicate != stdout.getFileHandle())
+# On windows, opening a file from a FileHandle does not work
+when not defined(windows):
+  var f : File
+  let res = open(f, stdoutDuplicate, mode=fmWrite)
+  let msg = "This is a test message that will be displayed ! \n"
+  f.write(msg)
+  # Output "Test"
+  f.close()
+ +
+
+ +
+
+
+
proc duplicateTo(oldfd: FileHandle; newfd: FileHandle) {....raises: [IOError],
+    tags: [], forbids: [].}
+
+ + Perform the same task a duplicate but instead of using the lowest unused file descriptor it uses the FileHandle` specified by newfd. Calls POSIX function dup2 on Posix platform and _dup2 on Windows. +

Example:

+
import os
+# Redirect stdout to a file temporarily
+let tmpFileName = getTempDir() / "hidden_output.txt"
+let stdoutFileno = stdout.getFileHandle()
+let stdoutDupFd = duplicate(stdoutFileno)
+
+# Create a new file
+let tmpFile: File = open(tmpFileName, fmAppend)
+let tmpFileFd: FileHandle = tmpFile.getFileHandle()
+
+# stdoutFileno now writes to tmpFile
+duplicateTo(tmpFileFd, stdoutFileno)
+echo "This is not displayed, but written to tmpFile instead !"
+
+# Close file & restore stdout
+tmpFile.close()
+duplicateTo(stdoutDupFd, stdoutFileno)
+
+# stdout is now restored !
+echo "This is displayed"
+ +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/ioutils.idx b/src/fusion/ioutils.idx new file mode 100644 index 0000000..0a315e0 --- /dev/null +++ b/src/fusion/ioutils.idx @@ -0,0 +1,3 @@ +nimTitle ioutils src/fusion/ioutils.html module src/fusion/ioutils 0 +nim duplicate src/fusion/ioutils.html#duplicate,FileHandle proc duplicate(oldfd: FileHandle): FileHandle 32 +nim duplicateTo src/fusion/ioutils.html#duplicateTo,FileHandle,FileHandle proc duplicateTo(oldfd: FileHandle; newfd: FileHandle) 56 diff --git a/src/fusion/js/jssets.html b/src/fusion/js/jssets.html new file mode 100644 index 0000000..739034a --- /dev/null +++ b/src/fusion/js/jssets.html @@ -0,0 +1,269 @@ + + + + + + + +src/fusion/js/jssets + + + + + + + + + + + + +
+
+

src/fusion/js/jssets

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

Set for the JavaScript target.

+ +

Example:

+
import src/fusion/js/jssets
+import std/jsffi
+if defined(fusionJsSetTests):
+  let a: JsSet = newJsSet([1.toJs, 2.toJs, 3.toJs, 4.toJs])
+  let b: JsSet = newJsSet([1.0.toJs, 2.0.toJs, 3.0.toJs])
+  doAssert a.len == 4
+  doAssert b.len == 3
+  doAssert a.toString() == @["1".cstring, "2", "3", "4"]
+  doAssert b.toString() == @["1".cstring, "2", "3"]
+  a.clear()
+  b.clear()
+  let d: JsSet = newJsSet([1.toJs, 2.toJs, 3.toJs])
+  doAssert d.len == 3
+  d.add(4.toJs)
+  d.delete(2.toJs)
+  doAssert 3.toJs in d
+  doAssert "3".cstring.toJs notin d
+  doAssert d.contains 1.toJs
+  doAssert $d == """@["1", "3", "4"]"""

+
+

Types

+
+
+
JsSet {.importjs: "Set".} = ref object of JsRoot
+
+ + Set API. + +
+
+ +
+
+
+

Procs

+
+
+
+
func `$`(this: JsSet): string {....raises: [], tags: [], forbids: [].}
+
+ + + +
+
+ +
+
+
+
func add(this: JsSet; value: JsObject) {.importjs: "#.$1(#)", ...raises: [],
+    tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/add + +
+
+ +
+
+
+
func clear(this: JsSet) {.importjs: "#.$1()", ...raises: [], tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/clear + +
+
+ +
+
+
+
func contains(this: JsSet; value: JsObject): bool {.importjs: "#.has(#)",
+    ...raises: [], tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/has + +
+
+ +
+
+
+
func delete(this: JsSet; value: JsObject) {.importjs: "#.$1(#)", ...raises: [],
+    tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/delete + +
+
+ +
+
+
+
func len(this: JsSet): int {....raises: [], tags: [], forbids: [].}
+
+ + + +
+
+ +
+
+
+
func newJsSet(): JsSet {.importjs: "new Set()", ...raises: [], tags: [],
+                         forbids: [].}
+
+ + Constructor for JsSet. + +
+
+
+
func newJsSet(items: openArray[JsObject]): JsSet {.importjs: "new Set(#)",
+    ...raises: [], tags: [], forbids: [].}
+
+ + Constructor for JsSet. + +
+
+ +
+
+
+
func toString(this: JsSet): seq[cstring] {.importjs: """  (() => {const result = []; #.forEach(item => result.push(JSON.stringify(item))); return result})()""",
+    ...raises: [], tags: [], forbids: [].}
+
+ + Convert JsSet to seq[cstring], all items will be converted to cstring. + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/js/jssets.idx b/src/fusion/js/jssets.idx new file mode 100644 index 0000000..b64aa33 --- /dev/null +++ b/src/fusion/js/jssets.idx @@ -0,0 +1,12 @@ +nimTitle jssets src/fusion/js/jssets.html module src/fusion/js/jssets 0 +nim JsSet src/fusion/js/jssets.html#JsSet type JsSet 8 +nim newJsSet src/fusion/js/jssets.html#newJsSet proc newJsSet(): JsSet 11 +nim newJsSet src/fusion/js/jssets.html#newJsSet,openArray[JsObject] proc newJsSet(items: openArray[JsObject]): JsSet 13 +nim add src/fusion/js/jssets.html#add,JsSet,JsObject proc add(this: JsSet; value: JsObject) 15 +nim delete src/fusion/js/jssets.html#delete,JsSet,JsObject proc delete(this: JsSet; value: JsObject) 18 +nim clear src/fusion/js/jssets.html#clear,JsSet proc clear(this: JsSet) 21 +nim contains src/fusion/js/jssets.html#contains,JsSet,JsObject proc contains(this: JsSet; value: JsObject): bool 24 +nim toString src/fusion/js/jssets.html#toString,JsSet proc toString(this: JsSet): seq[cstring] 27 +nim len src/fusion/js/jssets.html#len,JsSet proc len(this: JsSet): int 31 +nim `$` src/fusion/js/jssets.html#$,JsSet proc `$`(this: JsSet): string 33 +nimgrp newjsset src/fusion/js/jssets.html#newJsSet-procs-all proc 11 diff --git a/src/fusion/js/jsxmlhttprequest.html b/src/fusion/js/jsxmlhttprequest.html new file mode 100644 index 0000000..99e37f9 --- /dev/null +++ b/src/fusion/js/jsxmlhttprequest.html @@ -0,0 +1,268 @@ + + + + + + + +src/fusion/js/jsxmlhttprequest + + + + + + + + + + + + +
+
+

src/fusion/js/jsxmlhttprequest

+
+ +
+ +
+ +

XMLHttpRequest for the JavaScript target: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest +

Example:

+
import src/fusion/js/jsxmlhttprequest
+from std/dom import Node
+if defined(fusionJsXmlhttprequestTests):
+  let request: XMLHttpRequest = newXMLHttpRequest()
+  request.open("GET".cstring, "http://localhost:8000/".cstring, false)
+  request.setRequestHeader("mode".cstring, "no-cors".cstring)
+  request.setRequestHeader([(key: "mode".cstring, val: "no-cors".cstring)])
+  request.overrideMimeType("text/plain".cstring)
+  request.send()
+  echo request.getAllResponseHeaders()
+  echo "responseText\t", request.responseText
+  echo "responseURL\t", request.responseURL
+  echo "statusText\t", request.statusText
+  echo "responseXML\t", request.responseXML is Node
+  echo "status\t", request.status
+  echo "timeout\t", request.timeout
+  echo "withCredentials\t", request.withCredentials
+  echo "readyState\t", request.readyState
+  request.abort()

+
+

Types

+
+
+
XMLHttpRequest = ref object of JsRoot
+  responseXML*: Node
+  withCredentials*: bool
+  status*, timeout*, readyState*: cint
+  responseText*, responseURL*, statusText*: cstring
+
+ + https://xhr.spec.whatwg.org + +
+
+ +
+
+
+

Procs

+
+
+
+
func abort(this: XMLHttpRequest) {.importjs: "#.$1()", ...raises: [], tags: [],
+                                   forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/abort + +
+
+ +
+
+
+
func getAllResponseHeaders(this: XMLHttpRequest): cstring {.importjs: "#.$1()",
+    ...raises: [], tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders + +
+
+ +
+
+
+
func newXMLHttpRequest(): XMLHttpRequest {.importjs: "new XMLHttpRequest()",
+    ...raises: [], tags: [], forbids: [].}
+
+ + Constructor for XMLHttpRequest. + +
+
+ +
+
+
+
func open(this: XMLHttpRequest; metod, url: cstring; async = true;
+          user = cstring.default; password = cstring.default) {.
+    importjs: "#.$1(#, #, #, #, #)", ...raises: [], tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open + +
+
+ +
+
+
+
func overrideMimeType(this: XMLHttpRequest; mimeType: cstring) {.
+    importjs: "#.$1(#)", ...raises: [], tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/overrideMimeType + +
+
+ +
+
+
+
func send(this: XMLHttpRequest; body: cstring | Node = cstring.default) {.
+    importjs: "#.$1(#)", ...raises: [], tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send + +
+
+ +
+
+
+
func setRequestHeader(this: XMLHttpRequest;
+                      keyValuePairs: openArray[tuple[key, val: cstring]]) {.importjs: "(() => { const rqst = #; #.forEach((item) => rqst.$1(item[0], item[1])) })()",
+    ...raises: [], tags: [], forbids: [].}
+
+ + Same as setRequestHeader but takes openArray[tuple[key, val: cstring]]. + +
+
+
+
func setRequestHeader(this: XMLHttpRequest; key, value: cstring) {.
+    importjs: "#.$1(#, #)", ...raises: [], tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/js/jsxmlhttprequest.idx b/src/fusion/js/jsxmlhttprequest.idx new file mode 100644 index 0000000..7e0c9b1 --- /dev/null +++ b/src/fusion/js/jsxmlhttprequest.idx @@ -0,0 +1,11 @@ +nimTitle jsxmlhttprequest src/fusion/js/jsxmlhttprequest.html module src/fusion/js/jsxmlhttprequest 0 +nim XMLHttpRequest src/fusion/js/jsxmlhttprequest.html#XMLHttpRequest type XMLHttpRequest 7 +nim newXMLHttpRequest src/fusion/js/jsxmlhttprequest.html#newXMLHttpRequest proc newXMLHttpRequest(): XMLHttpRequest 13 +nim open src/fusion/js/jsxmlhttprequest.html#open,XMLHttpRequest,cstring,cstring proc open(this: XMLHttpRequest; metod, url: cstring; async = true;\n user = cstring.default; password = cstring.default) 16 +nim send src/fusion/js/jsxmlhttprequest.html#send,XMLHttpRequest proc send(this: XMLHttpRequest; body: cstring | Node = cstring.default) 19 +nim abort src/fusion/js/jsxmlhttprequest.html#abort,XMLHttpRequest proc abort(this: XMLHttpRequest) 22 +nim getAllResponseHeaders src/fusion/js/jsxmlhttprequest.html#getAllResponseHeaders,XMLHttpRequest proc getAllResponseHeaders(this: XMLHttpRequest): cstring 25 +nim overrideMimeType src/fusion/js/jsxmlhttprequest.html#overrideMimeType,XMLHttpRequest,cstring proc overrideMimeType(this: XMLHttpRequest; mimeType: cstring) 28 +nim setRequestHeader src/fusion/js/jsxmlhttprequest.html#setRequestHeader,XMLHttpRequest,cstring,cstring proc setRequestHeader(this: XMLHttpRequest; key, value: cstring) 31 +nim setRequestHeader src/fusion/js/jsxmlhttprequest.html#setRequestHeader,XMLHttpRequest,openArray[tuple[cstring,cstring]] proc setRequestHeader(this: XMLHttpRequest;\n keyValuePairs: openArray[tuple[key, val: cstring]]) 34 +nimgrp setrequestheader src/fusion/js/jsxmlhttprequest.html#setRequestHeader-procs-all proc 31 diff --git a/src/fusion/js/jsxmlserializer.html b/src/fusion/js/jsxmlserializer.html new file mode 100644 index 0000000..4ba647f --- /dev/null +++ b/src/fusion/js/jsxmlserializer.html @@ -0,0 +1,152 @@ + + + + + + + +src/fusion/js/jsxmlserializer + + + + + + + + + + + + +
+
+

src/fusion/js/jsxmlserializer

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

+ +

Example:

+
import src/fusion/js/jsxmlserializer
+from std/dom import document
+if defined(fusionJsXMLSerializerTests):
+  let cerealizer: XMLSerializer = newXMLSerializer()
+  echo cerealizer.serializeToString(node = document)

+
+

Types

+
+
+
XMLSerializer = ref object of JsRoot
+
+ + XMLSerializer API. + +
+
+ +
+
+
+

Procs

+
+
+
+
func newXMLSerializer(): XMLSerializer {.importjs: "new XMLSerializer()",
+    ...raises: [], tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer + +
+
+ +
+
+
+
func serializeToString(this: XMLSerializer; node: Node): cstring {.
+    importjs: "#.$1(#)", ...raises: [], tags: [], forbids: [].}
+
+ + https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer/serializeToString + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/js/jsxmlserializer.idx b/src/fusion/js/jsxmlserializer.idx new file mode 100644 index 0000000..e2aa1ac --- /dev/null +++ b/src/fusion/js/jsxmlserializer.idx @@ -0,0 +1,4 @@ +nimTitle jsxmlserializer src/fusion/js/jsxmlserializer.html module src/fusion/js/jsxmlserializer 0 +nim XMLSerializer src/fusion/js/jsxmlserializer.html#XMLSerializer type XMLSerializer 7 +nim newXMLSerializer src/fusion/js/jsxmlserializer.html#newXMLSerializer proc newXMLSerializer(): XMLSerializer 9 +nim serializeToString src/fusion/js/jsxmlserializer.html#serializeToString,XMLSerializer,Node proc serializeToString(this: XMLSerializer; node: Node): cstring 12 diff --git a/src/fusion/matching.html b/src/fusion/matching.html new file mode 100644 index 0000000..e457e33 --- /dev/null +++ b/src/fusion/matching.html @@ -0,0 +1,1162 @@ + + + + + + + +src/fusion/matching + + + + + + + + + + + + +
+
+

src/fusion/matching

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

+

Example:

+
import src/fusion/matching
+{.experimental: "caseStmtMacros".}
+
+case [(1, 3), (3, 4)]:
+  of [(1, @a), _]:
+    echo a
+
+  else:
+    echo "Match failed"

+"you can probably make a macro for that" -- Rika, 22-09-2020 10:41:51 +

+
Author:haxscramper

This module implements pattern matching for objects, tuples, sequences, key-value pairs, case and derived objects. DSL can also be used to create object trees (AST).

+ +

Quick reference

+ + + + + + + + + + + + + +
ExampleExplanation
(fld: @val)Field fld into variable @val
Kind()Object with .kind == Kind() 1
of Derived()Match object of derived type
(@val, _)First element in tuple in @val
(@val, @val)Tuple with two equal elements
{"key" : @val}Table with "key", capture into @val 2
[_, _]Sequence with len == 2 3
[_, .._]At least one element
[_, all @val]All elements starting from index 1
[until @val == "2", .._]Capture all elements until first "2" 4
[until @val == 1, @val]All including first match
[all @val == 12]All elements are == 12, capture into @val
[some @val == 12]At least one is == 12, capture all matching into @val
  • 1 Kind fields can use shorted enum names - both nnkStrLit and StrLit will work (prefix nnk can be omitted)
  • +
  • 2 Or any object with contains and [] defined (for necessary types)
  • +
  • 3 Or any object with len proc or field
  • +
  • 4 Note that sequence must match fully and it is necessary to have .._ at the end in order to accept sequences of arbitrary length.
  • +
+ +

Supported match elements

  • seqs - matched using [Patt1(), Patt2(), ..]. Must have len(): int and iterator items(): T defined.
  • +
  • tuples - matched using (Patt1(), Patt2(), ..).
  • +
  • pairable - matched using {Key: Patt()}. Must have [Key]: T defined. Key is not a pattern - search for whole collection won't be performed.
  • +
  • set - matched using {Val1, Val2, .._}. Must have contains defined. If variable is captured then Val1 must be comparable and collection should also implement items and incl.
  • +
  • object - matched using (field: Val). Case objects are matched using Kind(field: Val). If you want to check agains multiple values for kind field (kind: in SomeSetOfKinds)
  • +
+ +

Element access

To determine whether particular object matches pattern access path is generated - sequence of fields and [] operators that you would normally write by hand, like fld.subfield["value"].len. Due to support for method call syntax there is no difference between field access and proc call, so things like (len: < 12) also work as expected.

+

(fld: "3") Match field fld against "3". Generated access is expr.fld == "3".

+

["2"] Match first element of expression agains patt. Generate acess expr[pos] == "2", where pos is an integer index for current position in sequence.

+

("2") For each field generate access using [1]

+

{"key": "val"} First check "key" in expr and then expr["key"] == "val". No exception on missing keys, just fail match.

+

It is possible to have mixed assess for objects. Mixed object access via (gg: _, [], {}) creates the same code for checking. E.g ([_]) is the same as [_], ({"key": "val"}) and is identical to just {"key": "val"}. You can also call functions and check their values (like (len: _(it < 10)) or (len: in {0 .. 10})) to check for sequence length.

+ +

Checks

  • Any operators with exception of is (subpattern) and of (derived object subpattern) is considered final comparison and just pasted as-is into generated pattern match code. E.g. fld: in {2,3,4} will generate expr.fld in {2,3,4}
  • +
  • (fld: Patt()) - check if expr.fld matches pattern Patt()
  • +
  • (fld: _.matchesPredicate()) - if call to matchesPredicate(expr.fld) evaluates to true.
  • +
+

Notation: <expr> refers to any possible combination of checks. For example

+
  • fld: in {1,2,3} - <expr> is in {1,2,3}
  • +
  • [_] - <expr> is _
  • +
  • fld: Patt() - <expr> is Patt()
  • +
+ +

Examples

  • (fld: 12) If rhs for key-value pair is integer, string or identifier then == comparison will be generated.
  • +
  • (fld: == ident("33")) if rhs is a prefix of == then == will be generated. Any for of prefix operator will be converted to expr.fld <op> <rhs>.
  • +
  • (fld: in {1, 3, 3}) or (fld: in Anything) creates fld.expr in Anything. Either in or notin can be used.
  • +
+ +

Variable binding

Match can be bound to new variable. All variable declarations happen via @varname syntax.

+
  • To bind element to variable without any additional checks do: (fld: @varname)
  • +
  • To bind element with some additional operator checks do:
    • (fld: @varname <operator> Value) first perform check using <operator> and then add Value to @varname
      • (fld: @hello is ("2" | "3"))
      • +
      +
    • +
    +
  • +
  • Predicate checks: fld: @a.matchPredicate()
  • +
  • Arbitrary expression: fld: @a(it mod 2 == 0). If expression has no type it is considered true.
  • +
+ +

Bind order

Bind order: if check evaluates to true variable is bound immediately, making it possible to use in other checks. [@head, any @tail != head] is a valid pattern. First match head and then any number of @tail elements. Can use any _(if it != head: tail.add it) and declare tail externally.

+

Variable is never rebound. After it is bound, then it will have the value of first binding.

+ +

Bind variable type

  • Any variadics are mapped to sequence
  • +
  • Only once in alternative is option
  • +
  • Explicitly optional is option
  • +
  • Optional with default value is regular value
  • +
  • Variable can be used only once if in alternative
  • +
+ + + + + + + +
PatternInjected variables
[@a]var a: typeof(expr[0])
{"key": @val}var val: typeof(expr["key"])
[all @a]var a: seq[typeof(expr[0])]
[opt @val]var a: Option[typeof(expr[0])]
[opt @val or default]var a: typeof(expr[0])
(fld: @val)var val: typeof(expr.fld)
+

Matching different things

+

Sequence matching

Input sequence: [1,2,3,4,5,6,5,6]

+ + + + + + + + + + + + + +
PatternResultComment
[_]FailInput sequence size mismatch
[.._]Ok
[@a]FailInput sequence size mismatch
[@a, .._]Ok, a = 1
[any @a, .._]Error
[any @a(it < 10)]Ok, a = [1..6]Capture all elements that match
[until @a == 6, .._]OkAll until first ocurrence of 6
[all @a == 6, .._]Ok a = []All leading 6
[any @a(it > 100)]FailNo elements > 100
[none @a(it in {6 .. 10})]FailThere is an element == 6
[0 .. 2 is < 10, .._]OkFirst three elements < 10
[0 .. 2 is < 10]FailMissing trailing .._

until non-greedy. Match everything until <expr>

+
- ``until <expr>``: match all until the first element that matches Expr
+

all greedy. Match everything that matches <expr>

+
- ``all <expr>``: all elements should match Expr
+
+- ``all @val is <expr>``: capture all elements in ``@val`` if ``<expr>``
+  is true for every one of them.
+

opt

+
Optional single element match - if sequence contains fewer elements than
+necessary element is considered missing. In that case either `default`
+fallback (if present) is used as value, or capture is set to `None(T)`.
+
+- ``opt @a``: match optional element and bind it to a
+
+- ``opt @a or "default"``: either match element to a or set a to
+  "default"
+

any greedy. Consume all sequence elements until the end and succeed only if at least one element has matched.

+
- ``any @val is "d"``: capture all element that match ``is "d"``
+

none greedy. Consume all sequence elements until the end and succed only if any element has matched. EE

+

[m .. n @capture] Capture slice of elements from index m to n

+

Greedy patterns match until the end of a sequence and cannot be followed by anything else.

+

For sequence to match is must either be completely matched by all subpatterns or have trailing .._ in pattern.

+ + +
SequencePatternMatch result
[1,2,3][1,2] [1, .._] [1,2,_]Fail Ok Ok
+

Use examples

  • capture all elements in sequence: [all @elems]
  • +
  • get all elements until (not including "d"): [until @a is "d"]
  • +
  • All leading "d": [all @leading is "d"]
  • +
  • Match first two elements and ignore the rest [_, _, .._]
  • +
  • Match optional third element [_, _, opt @trail]
  • +
  • Match third element and if not matched use default value [_, _, opt @trail or "default"]
  • +
  • Capture all elements until first separator: [until @leading is "sep", @middle is "sep", all @trailing]
  • +
  • Extract all conditions from IfStmt: IfStmt([all ElseIf([@cond, _]), .._])
  • +
+

In addition to working with nested subpatterns it is possible to use pattern matching as simple text scanner, similar to strscans. Main difference is that it allows working on arbitrary sequences, meaning it is possible, for example, to operate on tokens, or as in this example on strings (for the sake of simplicity).

+
func allIs(str: string, chars: set[char]): bool = str.allIt(it in chars)
+
+"2019-10-11 school start".split({'-', ' '}).assertMatch([
+  pref @dateParts(it.allIs({'0' .. '9'})),
+  pref _(it.allIs({' '})),
+  all @text
+])
+
+doAssert dateParts == @["2019", "10", "11"]
+doAssert text == @["school", "start"]
+

Tuple matching

Input tuple: (1, 2, "fa")

+ + + + + +
PatternResultComment
(_, _, _)OkMatch all
(@a, @a, _)Fail
(@a is (1 | 2), @a, _)Fail1
(1, 1 | 2, _)Ok
  • 1 Pattern backtracking is not performed, @a is first bound to 1, and in subsequent match attempts pattern fails.
  • +
+

Tuple element matches support any regular match expression like @capture, and not different from field matches. You can also use opt @capture or "default" in order to assign fallback value on tuple unpacking.

+
(@a, (@b, _), _) := ("hello", ("world", 11), 0.2)
+

Object matching

For matching object fields you can use (fld: value) -

+
type
+  Obj = object
+    fld1: int8
+
+func len(o: Obj): int = 0
+
+case Obj():
+  of (fld1: < -10):
+    discard
+  
+  of (len: > 10):
+    # can use results of function evaluation as fields - same idea as
+    # method call syntax in regular code.
+    discard
+  
+  of (fld1: in {1 .. 10}):
+    discard
+  
+  of (fld1: @capture):
+    doAssert capture == 0

For objects with Option[T] fields it is possible to use field: opt @capture or "default" to either get capture value, or set it to fallback expression.

+ +

Variant object matching

Matching on .kind field is a very common operation and has special syntax sugar - ForStmt() is functionally equivalent to (kind: nnkForStmt), but much more concise.

+

nnk pefix can be omitted - in general if your enum field name folows nep1 naming conventions (each enum name starts with underscore prefix (common for all enum elements), followed PascalCase enum name.

+

Input AST

+
ForStmt
+  Ident "i"
+  Infix
+    Ident ".."
+    IntLit 1
+    IntLit 10
+  StmtList
+    Command
+      Ident "echo"
+      IntLit 12
  • ForStmt([== ident("i"), .._]) Only for loops with i as variable
  • +
  • ForStmt([@a is Ident(), .._]) Capture for loop variable
  • +
  • ForStmt([@a.isTuple(), .._]) for loops in which first subnode satisfies predicate isTuple(). Bind match to a
  • +
  • ForStmt([_, _, (len: in {1 .. 10})]) between one to ten statements in the for loop body
  • +
  • Using object name for pattern matching ObjectName() does not produce a hard error, but if .kind field does not need to be checked (fld: <pattern>) will be sufficient.
  • +
  • To check .kind against multiple operators prefix in can be used - (kind: in {nnkForStmt, nnkWhileStmt})
  • +
+ +

Custom unpackers

It is possible to unpack regular object using tuple matcher syntax - in this case overload for [] operator must be provided that accepts static[FieldIndex] argument and returns a field.

+
type
+  Point = object
+    x: int
+    y: int
+
+proc `[]`(p: Point, idx: static[FieldIndex]): auto =
+  when idx == 0:
+    p.x
+  elif idx == 1:
+    p.y
+  else:
+    static:
+      error("Cannot unpack `Point` into three-tuple")
+
+let point = Point(x: 12, y: 13)
+
+(@x, @y) := point
+
+assertEq x, 12
+assertEq y, 13

Note auto return type for [] proc - it is necessary if different types of fields might be returned on tuple unpacking, but not mandatory.

+

If different fields have varying types when must and static be used to allow for compile-time code selection.

+ +

Predicates and infix operators

+

Infix operators

By default object fields are either matched using recursive pattern, or compared for equality (when field: "some value" is used). It is also possible to explicitly specify operator, for example using =~ from std/pegs module:

+
case (parent: (field: "string")):
+  of (parent.field: =~ peg"str{\w+}"):
+    doAssert matches[0] == "ing"

It should be noted that implicitly injected matches variable is also visible in the case branch.

+ +

Custom predicates

Matching expressions using custom predicates is also possible. If it is not necessary to capture matched element placeholder _. should be used as a first argument:

+
proc lenEq(s: openarray[int], value: int): bool = s.len == value
+
+case [1, 2]:
+  of _.lenEq(3):
+    # fails
+  
+  of _.lenEq(2):
+    # matches

To capture value using predicate placeholder can be replaced with @capture pattern:

+
let arr = @[@[1, 2], @[2, 3], @[4]]
+discard arr.matches([any @capture.lenEq(2)])
+doAssert capture == @[@[1, 2], @[2, 3]]
+

Ref object matching

It is also possible to match derived ref objects with patterns using of operator. It allows for runtime selection of different derived types.

+

Note that of operator is necessary for distinguishing between multiple derived objects, or getting fields that are present only in derived types. In addition to it performs isNil() check in the object, so it might be used in cases when you are not dealing with derived types.

+

Due to isNil() check this pattern only makes sense when working with ref objects.

+
type
+  Base1 = ref object of RootObj
+    fld: int
+  
+  First1 = ref object of Base1
+    first: float
+  
+  Second1 = ref object of Base1
+    second: string
+
+let elems: seq[Base1] = @[
+  Base1(fld: 123),
+  First1(fld: 456, first: 0.123),
+  Second1(fld: 678, second: "test"),
+  nil
+]
+
+for elem in elems:
+  case elem:
+    of of First1(fld: @capture1, first: @first):
+      # Only capture `Frist1` elements
+      doAssert capture1 == 456
+      doAssert first == 0.123
+    
+    of of Second1(fld: @capture2, second: @second):
+      # Capture `second` field in derived object
+      doAssert capture2 == 678
+      doAssert second == "test"
+    
+    of of Base1(fld: @default):
+      # Match all *non-nil* base elements
+      doAssert default == 123
+    
+    else:
+      doAssert isNil(elem)
+

KV-pairs matching

Input json string

+
{"menu": {
+  "id": "file",
+  "value": "File",
+  "popup": {
+    "menuitem": [
+      {"value": "New", "onclick": "CreateNewDoc()"},
+      {"value": "Open", "onclick": "OpenDoc()"},
+      {"value": "Close", "onclick": "CloseDoc()"}
+    ]
+  }
+}}
  • Get input ["menu"]["file"] from node and
  • +
+
case inj:
+  of {"menu" : {"file": @file is JString()}}:
+    # ...
+  else:
+    raiseAssert("Expected [menu][file] as string, but found " & $inj)
+

Option matching

Some(@x) and None() is a special case that will be rewritten into (isSome: true, get: @x) and (isNone: true) respectively. This is made to allow better integration with optional types. 9_ .

+

Note: implementation does not explicitly require to use std/options.Option type, but instead works with anything that provides following functions:

+
  • isSome(): bool (for Some() pattern check),
  • +
  • isNone(): bool (for None() pattern), and
  • +
  • get(): T (for getting value if type is some).
  • +
+ +

Tree matching

For deeply nested AST structures it might be really inconvenient to write one-line expression with lots of ProcDef[@name is Ident() | Postfix[_, @name is Ident()]] and so on. But it is possible to use block syntax for patterns if necessary -

+
ProcDef:
+  @name is Ident() | Postfix[_, @name is Ident()]
+  # Other pattern parts

In case of ProcDef: pattern braces can be omitted because it is clear that we are trying to match a case object here.

+

Tree matching syntax has a nice property of being extremely close (copy-pastable) from treeRepr for NimNode. For a following proc declaration:

+
proc testProc1(arg1: int) {.unpackProc.} =
+  discard

We have an ast

+
ProcDef
+  Ident "testProc1"
+  Empty
+  Empty
+  FormalParams
+    Empty
+    IdentDefs
+      Ident "arg1"
+      Ident "int"
+      Empty
+  Empty
+  Empty
+  StmtList
+    DiscardStmt
+      Empty

That can be matched using following pattern:

+
procDecl.assertMatch:
+  ProcDef:
+    Ident(strVal: @name) | Postfix[_, Ident(strVal: @name)]
+    _ # Term rewriting template
+    _ # Generic params
+    FormalParams:
+      @returnType
+      all IdentDefs[@trailArgsName, _, _]
+    
+    @pragmas
+    _ # Reserved
+    @implementation
+

Tree construction

makeTree provides 'reversed' implementation of pattern matching, which allows to construct tree from pattern, using variables. Example of use

+
type
+  HtmlNodeKind = enum
+    htmlBase = "base"
+    htmlHead = "head"
+    htmlLink = "link"
+  
+  HtmlNode = object
+    kind*: HtmlNodeKind
+    text*: string
+    subn*: seq[HtmlNode]
+
+func add(n: var HtmlNode, s: HtmlNode) = n.subn.add s
+
+discard makeTree(HtmlNode):
+  base:
+    link(text: "hello")

In order to construct tree, kind= and add have to be defined. Internally DSL just creats resulting object, sets kind= and then repeatedly add elements to it. In order to properties for objects either the field has to be exported, or fld= has to be defined (where fld is the name of property you want to set).

+

+
+

Types

+
+
+
FieldIndex = distinct int
+
+ + + +
+
+
+
ItemMatchKind = enum
+  imkInfixEq,               ## Match item using infix operator
+  imkSubPattern,            ## Match item by checking it agains subpattern
+  imkPredicate               ## Execute custom predicate to determine if element
+                             ## matches pattern.
+
+ + Type of item pattern match + +
+
+
+
KVPair = object
+
+ + + +
+
+
+
Match = ref object
+  bindVar*: Option[NimNode]  ## Bound variable (if any)
+  declNode*: NimNode         ## Original declaration of match
+  isOptional*: bool
+  fallback*: Option[NimNode] ## Default value in case match fails
+  case kind*: MatchKind
+  of kItem:
+    case
+    of imkInfixEq:
+      infix*: string         ## Infix operator used for comparison
+      rhsNode*: NimNode      ## Rhs expression to compare against
+      isPlaceholder*: bool   ## Always true? `_` pattern is an
+                             ## infix expression with `isPlaceholder` equal to true
+    of imkSubPattern:
+      rhsPattern*: Match     ## SubPattern to compare value against
+    of imkPredicate:
+      isCall*: bool          ## Predicate is a call expression
+                             ## (`@val.matches()`) or a free-standing expression
+                             ## (`@val(it.len < 100)`)
+      predBody*: NimNode     ## Body of the expression
+  of kAlt:
+    altElements*: seq[Match] ## Alternatives for matching
+  of kSeq:
+    seqElements*: seq[SeqStructure] ## Sequence subpatterns
+  of kTuple:
+    tupleElements*: seq[Match] ## Tuple elements
+  of kPairs:
+    pairElements*: seq[KVPair]
+    nocheck*: bool
+  of kSet:
+    setElements*: seq[Match]
+  of kObject:
+    kindCall*: Option[NimNode] ## Optional node with kind
+                               ## expression pattern (see `hasKind`)
+    isRefKind*: bool
+    fieldElements*: seq[tuple[name: string, pattern: Match]]
+    kvMatches*: Option[Match] ## Optional key-value matches for
+                              ## expressions like `JObject({"key": @val})`
+    seqMatches*: Option[Match] ## Optional indexed matches for
+                               ## subelement access using `Infix([@op, @lhs, @rhs])` pattern.
+
+ + Object describing single match for element + +
+
+
+
MatchError = ref object of CatchableError
+
+ + Exception indicating match failure + +
+
+
+
MatchKind = enum
+  kItem,                    ## Match single element
+  kSeq,                     ## Match sequence of elements
+  kTuple,                   ## Mach tuple (anonymous or named)
+  kPairs,                   ## Match key-value pairs
+  kObject,                  ## Match object, named tuple or object-like value
+  kSet,                     ## Match set of elements
+  kAlt                       ## Ordered choice - mactch any of patterns.
+
+ + Different kinds of matching patterns + +
+
+
+
SeqKeyword = enum
+  lkAny = "any",            ## Any element from seq
+  lkAll = "all",            ## All elements from seq
+  lkNone = "none",          ## None of the elements from seq
+  lkOpt = "opt",            ## Optionaly match element in seq
+  lkUntil = "until",        ## All elements until
+  lkPref = "pref",          ## All elements while
+  lkPos,                    ## Exact position
+  lkSlice,                  ## Subrange slice
+  lkTrail                    ## Variadic placeholder `.._`
+
+ + Possible special words for seq pattern matching + +
+
+
+
SeqStructure = object
+  ## Original declaration of the node
+  bindVar*: Option[NimNode]  ## Optional bound variable
+  pattern*: Match            ## Patterh for element matching
+  case kind*: SeqKeyword
+  of lkSlice:
+    slice*: NimNode
+  else:
+    nil
+
+ + + +
+
+
+
VarKind = enum
+  vkRegular,                ## Regular variable, assigned once
+  vkSequence, vkOption, vkSet, vkAlt
+
+ + Kind of matched variables + +
+
+
+
VarSpec = object
+  decl*: NimNode             ## First time variable has been declared
+  case varKind*: VarKind     ## Type of the variable
+  of vkAlt:
+    prefixMap*: Table[Path, AltSpec]
+  else:
+    nil
+  typePath*: Path            ## Whole path for expression that can be used to
+                             ## determine type of the variable.
+  foundCount*: int           ## Number of variable occurencies in expression
+
+ + + +
+
+ +
+
+
+

Consts

+
+
+
nnkFloatKinds = {nnkFloatLit..nnkFloat128Lit}
+
+ + Set of all nim node kinds for float literal nodes + +
+
+
+
nnkIdentKinds = {nnkIdent, nnkSym, nnkOpenSymChoice}
+
+ + Set of all nim node kinds for identifier-like nodes + +
+
+
+
nnkIntKinds = {nnkCharLit..nnkUInt64Lit}
+
+ + Set of all nim node kinds for integer literal nodes + +
+
+
+
nnkStrKinds = {nnkStrLit..nnkTripleStrLit}
+
+ + Set of all nim node kinds for string nodes + +
+
+
+
nnkTokenKinds = {nnkEmpty..nnkSym, nnkCharLit..nnkTripleStrLit, nnkOpenSymChoice}
+
+ + Set of all token-like nodes (primitive type literals or identifiers) + +
+
+ +
+
+
+

Procs

+
+
+
+
func `$`(kvp: KVPair): string {....raises: [Exception], tags: [RootEffect],
+                                forbids: [].}
+
+ + + +
+
+
+
func `$`(match: Match): string {....raises: [Exception], tags: [RootEffect],
+                                 forbids: [].}
+
+ + + +
+
+
+
func `$`(path: Path): string {....raises: [], tags: [], forbids: [].}
+
+ + + +
+
+
+
func `$`(ss: SeqStructure): string {....raises: [Exception], tags: [RootEffect],
+                                     forbids: [].}
+
+ + + +
+
+ +
+
+
+
func `==`(idx: FieldIndex; i: SomeInteger): bool
+
+ + + +
+
+ +
+
+
+
proc getKindNames(head: NimNode): (string, seq[string]) {....raises: [KeyError],
+    tags: [], forbids: [].}
+
+ + + +
+
+ +
+
+
+
func kind=(node: var NimNode; kind: NimNodeKind) {....raises: [], tags: [],
+    forbids: [].}
+
+ + + +
+
+ +
+
+
+
func makeMatchExpr(m: Match; mainExpr: NimNode; doRaise: bool;
+                   originalMainExpr: NimNode): tuple[expr: NimNode,
+    vtable: VarTable, mixident: seq[string]] {....raises: [KeyError, Exception],
+    tags: [RootEffect], forbids: [].}
+
+ + Create NimNode for checking whether or not item referred to by mainExpr matches pattern described by Match + +
+
+ +
+
+
+
func parseMatchExpr(n: NimNode): Match {....raises: [Exception],
+    tags: [RootEffect], forbids: [].}
+
+ + + +
+
+ +
+
+
+
func str(node: NimNode): string {....raises: [], tags: [], forbids: [].}
+
+ + + +
+
+ +
+
+
+
func str=(node: var NimNode; val: string) {....raises: [], tags: [], forbids: [].}
+
+ + + +
+
+ +
+
+
+
func toAccs(path: Path; name: NimNode; pathForType: bool): NimNode {....raises: [],
+    tags: [], forbids: [].}
+
+ + Convert path in object to expression for getting element at path. + +
+
+ +
+ +
+
+
+

Macros

+
+
+
+
macro assertMatch(input, pattern: untyped): untyped
+
+ + Try to match input using pattern and raise MatchError on failure. For DSL syntax details see start of the document. + +
+
+ +
+
+
+
macro `case`(n: untyped): untyped
+
+ + + +
+
+ +
+
+
+
macro expand(body: typed): untyped
+
+ + + +
+
+ +
+
+
+
macro hasKindImpl(head: typed; kind: untyped): untyped
+
+ + + +
+
+ +
+
+
+
macro matches(input, pattern: untyped): untyped
+
+ + Try to match input using pattern and return false on failure. For DSL syntax details see start of the document. + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template `:=`(lhs, rhs: untyped): untyped
+
+ + Shorthand for assertMatch + +
+
+ +
+
+
+
template `?=`(lhs, rhs: untyped): untyped
+
+ + Shorthand for matches + +
+
+ +
+
+
+
template `[]`(t: tuple; idx: static[FieldIndex]): untyped
+
+ + + +
+
+ +
+
+
+
template hasKind(head, kindExpr: untyped): untyped
+
+ + Determine if head has kind value. Either function/procedure kind or field with the same name is expected to be declared. Type of kind must be an enum. Kind expression is a pattern describing expected values. Possible examples of pattern (assuming value of type NimNode is used as head)
  • nnkIntLit - match integer literal
  • +
  • IntLit - alternative (preferred) syntax for matching enum values nnk prefix can be omitted.
  • +
+ + +
+
+ +
+
+
+
template makeTree(T: typed; pattern: untyped): untyped
+
+ + Construct tree from pattern matching expression. For example of use see documentation at the start of the module + +
+
+ +
+
+
+
template varOfIteration(arg: untyped): untyped
+
+ + + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/matching.idx b/src/fusion/matching.idx new file mode 100644 index 0000000..903b331 --- /dev/null +++ b/src/fusion/matching.idx @@ -0,0 +1,87 @@ +nimTitle matching src/fusion/matching.html module src/fusion/matching 0 +nim nnkStrKinds src/fusion/matching.html#nnkStrKinds const nnkStrKinds 22 +nim nnkIntKinds src/fusion/matching.html#nnkIntKinds const nnkIntKinds 26 +nim nnkFloatKinds src/fusion/matching.html#nnkFloatKinds const nnkFloatKinds 30 +nim nnkIdentKinds src/fusion/matching.html#nnkIdentKinds const nnkIdentKinds 34 +nim nnkTokenKinds src/fusion/matching.html#nnkTokenKinds const nnkTokenKinds 38 +nim varOfIteration src/fusion/matching.html#varOfIteration.t,untyped template varOfIteration(arg: untyped): untyped 61 +nim getKindNames src/fusion/matching.html#getKindNames,NimNode proc getKindNames(head: NimNode): (string, seq[string]) 271 +nim hasKindImpl src/fusion/matching.html#hasKindImpl.m,typed,untyped macro hasKindImpl(head: typed; kind: untyped): untyped 296 +nim hasKind src/fusion/matching.html#hasKind.t,untyped,untyped template hasKind(head, kindExpr: untyped): untyped 310 +nim FieldIndex src/fusion/matching.html#FieldIndex type FieldIndex 330 +nim `==` src/fusion/matching.html#==,FieldIndex,SomeInteger proc `==`(idx: FieldIndex; i: SomeInteger): bool 331 +nim `[]` src/fusion/matching.html#[].t,,static[FieldIndex] template `[]`(t: tuple; idx: static[FieldIndex]): untyped 332 +nim kItem src/fusion/matching.html#kItem MatchKind.kItem 340 +nim kSeq src/fusion/matching.html#kSeq MatchKind.kSeq 340 +nim kTuple src/fusion/matching.html#kTuple MatchKind.kTuple 340 +nim kPairs src/fusion/matching.html#kPairs MatchKind.kPairs 340 +nim kObject src/fusion/matching.html#kObject MatchKind.kObject 340 +nim kSet src/fusion/matching.html#kSet MatchKind.kSet 340 +nim kAlt src/fusion/matching.html#kAlt MatchKind.kAlt 340 +nim MatchKind src/fusion/matching.html#MatchKind enum MatchKind 340 +nim lkAny src/fusion/matching.html#lkAny SeqKeyword.lkAny 350 +nim lkAll src/fusion/matching.html#lkAll SeqKeyword.lkAll 350 +nim lkNone src/fusion/matching.html#lkNone SeqKeyword.lkNone 350 +nim lkOpt src/fusion/matching.html#lkOpt SeqKeyword.lkOpt 350 +nim lkUntil src/fusion/matching.html#lkUntil SeqKeyword.lkUntil 350 +nim lkPref src/fusion/matching.html#lkPref SeqKeyword.lkPref 350 +nim lkPos src/fusion/matching.html#lkPos SeqKeyword.lkPos 350 +nim lkSlice src/fusion/matching.html#lkSlice SeqKeyword.lkSlice 350 +nim lkTrail src/fusion/matching.html#lkTrail SeqKeyword.lkTrail 350 +nim SeqKeyword src/fusion/matching.html#SeqKeyword enum SeqKeyword 350 +nim SeqStructure src/fusion/matching.html#SeqStructure object SeqStructure 362 +nim imkInfixEq src/fusion/matching.html#imkInfixEq ItemMatchKind.imkInfixEq 372 +nim imkSubPattern src/fusion/matching.html#imkSubPattern ItemMatchKind.imkSubPattern 372 +nim imkPredicate src/fusion/matching.html#imkPredicate ItemMatchKind.imkPredicate 372 +nim ItemMatchKind src/fusion/matching.html#ItemMatchKind enum ItemMatchKind 372 +nim KVPair src/fusion/matching.html#KVPair object KVPair 379 +nim MatchError src/fusion/matching.html#MatchError type MatchError 383 +nim Match src/fusion/matching.html#Match type Match 386 +nim vkRegular src/fusion/matching.html#vkRegular VarKind.vkRegular 463 +nim vkSequence src/fusion/matching.html#vkSequence VarKind.vkSequence 463 +nim vkOption src/fusion/matching.html#vkOption VarKind.vkOption 463 +nim vkSet src/fusion/matching.html#vkSet VarKind.vkSet 463 +nim vkAlt src/fusion/matching.html#vkAlt VarKind.vkAlt 463 +nim VarKind src/fusion/matching.html#VarKind enum VarKind 463 +nim VarSpec src/fusion/matching.html#VarSpec object VarSpec 476 +nim `$` src/fusion/matching.html#$,Path proc `$`(path: Path): string 527 +nim `$` src/fusion/matching.html#$,Match proc `$`(match: Match): string 552 +nim `$` src/fusion/matching.html#$,KVPair proc `$`(kvp: KVPair): string 554 +nim `$` src/fusion/matching.html#$,SeqStructure proc `$`(ss: SeqStructure): string 558 +nim toAccs src/fusion/matching.html#toAccs,Path,NimNode,bool proc toAccs(path: Path; name: NimNode; pathForType: bool): NimNode 711 +nim parseMatchExpr src/fusion/matching.html#parseMatchExpr,NimNode proc parseMatchExpr(n: NimNode): Match 750 +nim makeMatchExpr src/fusion/matching.html#makeMatchExpr,Match,NimNode,bool,NimNode proc makeMatchExpr(m: Match; mainExpr: NimNode; doRaise: bool;\n originalMainExpr: NimNode): tuple[expr: NimNode, vtable: VarTable,\n mixident: seq[string]] 2380 +nim expand src/fusion/matching.html#expand.m,typed macro expand(body: typed): untyped 2447 +nim `case` src/fusion/matching.html#case.m,untyped macro `case`(n: untyped): untyped 2498 +nim assertMatch src/fusion/matching.html#assertMatch.m,untyped,untyped macro assertMatch(input, pattern: untyped): untyped 2502 +nim matches src/fusion/matching.html#matches.m,untyped,untyped macro matches(input, pattern: untyped): untyped 2526 +nim kind= src/fusion/matching.html#kind=,NimNode,NimNodeKind proc kind=(node: var NimNode; kind: NimNodeKind) 2667 +nim str src/fusion/matching.html#str,NimNode proc str(node: NimNode): string 2670 +nim str= src/fusion/matching.html#str=,NimNode,string proc str=(node: var NimNode; val: string) 2671 +nim makeTree src/fusion/matching.html#makeTree.t,typed,untyped template makeTree(T: typed; pattern: untyped): untyped 2705 +nim `:=` src/fusion/matching.html#:=.t,untyped,untyped template `:=`(lhs, rhs: untyped): untyped 2721 +nim `?=` src/fusion/matching.html#?=.t,untyped,untyped template `?=`(lhs, rhs: untyped): untyped 2725 +nimgrp $ src/fusion/matching.html#$-procs-all proc 527 +heading Quick reference src/fusion/matching.html#quick-reference Quick reference 0 +heading Supported match elements src/fusion/matching.html#supported-match-elements Supported match elements 0 +heading Element access src/fusion/matching.html#element-access Element access 0 +heading Checks src/fusion/matching.html#checks Checks 0 +heading Examples src/fusion/matching.html#checks-examples Examples 0 +heading Variable binding src/fusion/matching.html#variable-binding Variable binding 0 +heading Bind order src/fusion/matching.html#variable-binding-bind-order Bind order 0 +heading Bind variable type src/fusion/matching.html#variable-binding-bind-variable-type Bind variable type 0 +heading Matching different things src/fusion/matching.html#matching-different-things Matching different things 0 +heading Sequence matching src/fusion/matching.html#matching-different-things-sequence-matching Sequence matching 0 +heading Use examples src/fusion/matching.html#sequence-matching-use-examples Use examples 0 +heading Tuple matching src/fusion/matching.html#matching-different-things-tuple-matching Tuple matching 0 +heading Object matching src/fusion/matching.html#matching-different-things-object-matching Object matching 0 +heading Variant object matching src/fusion/matching.html#matching-different-things-variant-object-matching Variant object matching 0 +heading Custom unpackers src/fusion/matching.html#matching-different-things-custom-unpackers Custom unpackers 0 +heading Predicates and infix operators src/fusion/matching.html#matching-different-things-predicates-and-infix-operators Predicates and infix operators 0 +heading Infix operators src/fusion/matching.html#predicates-and-infix-operators-infix-operators Infix operators 0 +heading Custom predicates src/fusion/matching.html#predicates-and-infix-operators-custom-predicates Custom predicates 0 +heading Ref object matching src/fusion/matching.html#matching-different-things-ref-object-matching Ref object matching 0 +heading KV-pairs matching src/fusion/matching.html#matching-different-things-kvminuspairs-matching KV-pairs matching 0 +heading Option matching src/fusion/matching.html#matching-different-things-option-matching Option matching 0 +heading Tree matching src/fusion/matching.html#tree-matching Tree matching 0 +heading Tree construction src/fusion/matching.html#tree-construction Tree construction 0 diff --git a/src/fusion/pointers.html b/src/fusion/pointers.html new file mode 100644 index 0000000..9077a09 --- /dev/null +++ b/src/fusion/pointers.html @@ -0,0 +1,112 @@ + + + + + + + +src/fusion/pointers + + + + + + + + + + + + +
+
+

src/fusion/pointers

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

Convenience procs to deal with pointer-like variables.

+
+

Procs

+
+
+
+
proc toUncheckedArray[T](a: ptr T): ptr UncheckedArray[T] {.inline.}
+
+ + Shortcut for cast[ptr UncheckedArray[T]](a), where T is inferred. This allows array indexing operations on a. This is unsafe as it returns UncheckedArray. +

Example:

+
var a = @[10, 11, 12]
+let pa = a[1].addr.toUncheckedArray
+doAssert pa[-1] == 10
+pa[0] = 100
+doAssert a == @[10, 100, 12]
+pa[0] += 5
+doAssert a[1] == 105
+ +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/pointers.idx b/src/fusion/pointers.idx new file mode 100644 index 0000000..5709c38 --- /dev/null +++ b/src/fusion/pointers.idx @@ -0,0 +1,2 @@ +nimTitle pointers src/fusion/pointers.html module src/fusion/pointers 0 +nim toUncheckedArray src/fusion/pointers.html#toUncheckedArray,ptr.T proc toUncheckedArray[T](a: ptr T): ptr UncheckedArray[T] 5 diff --git a/src/fusion/pools.html b/src/fusion/pools.html new file mode 100644 index 0000000..91c16c3 --- /dev/null +++ b/src/fusion/pools.html @@ -0,0 +1,160 @@ + + + + + + + +src/fusion/pools + + + + + + + + + + + + +
+
+

src/fusion/pools

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

Pooled allocation for Nim. Usage:

var p: Pool[MyObjectType]
+var n0 = newNode(p)
+var n1 = newNode(p)

The destructor of Pool is resonsible for bulk-freeing every object constructed by the Pool. Pools cannot be copied.

+

+
+

Types

+
+
+
Pool[T] = object
+
+ + A pool of 'T' nodes. + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `=copy`[T](dest: var Pool[T]; src: Pool[T]) {.error.}
+
+ + + +
+
+ +
+
+
+
proc `=destroy`[T](p: var Pool[T]) {....raises: [].}
+
+ + + +
+
+ +
+
+
+
proc newNode[T](p: var Pool[T]): ptr T
+
+ + + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/pools.idx b/src/fusion/pools.idx new file mode 100644 index 0000000..b800606 --- /dev/null +++ b/src/fusion/pools.idx @@ -0,0 +1,5 @@ +nimTitle pools src/fusion/pools.html module src/fusion/pools 0 +nim Pool src/fusion/pools.html#Pool object Pool 29 +nim `=destroy` src/fusion/pools.html#=destroy,Pool[T] proc `=destroy`[T](p: var Pool[T]) 34 +nim `=copy` src/fusion/pools.html#=copy,Pool[T],Pool[T] proc `=copy`[T](dest: var Pool[T]; src: Pool[T]) 44 +nim newNode src/fusion/pools.html#newNode,Pool[T] proc newNode[T](p: var Pool[T]): ptr T 46 diff --git a/src/fusion/scripting.html b/src/fusion/scripting.html new file mode 100644 index 0000000..58da6ff --- /dev/null +++ b/src/fusion/scripting.html @@ -0,0 +1,106 @@ + + + + + + + +src/fusion/scripting + + + + + + + + + + + + +
+
+

src/fusion/scripting

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ +
+ +

+
+

Templates

+
+
+
+
template withDir(dir: string; body: untyped): untyped
+
+ + Changes the current directory to dir temporarily. Usage example:
withDir "foo":
+  # inside foo directory
+# back to last directory
+ +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/scripting.idx b/src/fusion/scripting.idx new file mode 100644 index 0000000..5df3750 --- /dev/null +++ b/src/fusion/scripting.idx @@ -0,0 +1,2 @@ +nimTitle scripting src/fusion/scripting.html module src/fusion/scripting 0 +nim withDir src/fusion/scripting.html#withDir.t,string,untyped template withDir(dir: string; body: untyped): untyped 4 diff --git a/src/fusion/smartptrs.html b/src/fusion/smartptrs.html new file mode 100644 index 0000000..b4a98ed --- /dev/null +++ b/src/fusion/smartptrs.html @@ -0,0 +1,434 @@ + + + + + + + +src/fusion/smartptrs + + + + + + + + + + + + +
+
+

src/fusion/smartptrs

+
+ +
+ +
+ +

C++11 like Smart pointers. It always uses the shared allocator.

+
+

Types

+
+
+
ConstPtr[T] = distinct SharedPtr[T]
+
+ + Distinct version of referencing counting smart pointer SharedPtrT, which doesn't allow mutating underlying object. + +
+
+
+
SharedPtr[T] = object
+
+ + Shared ownership reference counting pointer + +
+
+
+
UniquePtr[T] = object
+
+ + Non copyable pointer to object T, exclusive ownership of the object is assumed. + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`[T](p: ConstPtr[T]): string {.inline.}
+
+ + + +
+
+
+
proc `$`[T](p: SharedPtr[T]): string {.inline.}
+
+ + + +
+
+
+
proc `$`[T](p: UniquePtr[T]): string {.inline.}
+
+ + + +
+
+ +
+
+
+
proc `=`[T](dest: var SharedPtr[T]; src: SharedPtr[T])
+
+ + + +
+
+
+
proc `=`[T](dest: var UniquePtr[T]; src: UniquePtr[T]) {.error.}
+
+ + + +
+
+ +
+
+
+
proc `=destroy`[T](p: var SharedPtr[T]) {....raises: [].}
+
+ + + +
+
+
+
proc `=destroy`[T](p: var UniquePtr[T]) {....raises: [].}
+
+ + + +
+
+ +
+
+
+
proc `[]`[T](p: ConstPtr[T]): lent T {.inline.}
+
+ + + +
+
+
+
proc `[]`[T](p: SharedPtr[T]): var T {.inline.}
+
+ + + +
+
+
+
proc `[]`[T](p: UniquePtr[T]): var T {.inline.}
+
+ + + +
+
+ +
+
+
+
proc `[]=`[T](p: SharedPtr[T]; v: T) {.inline.}
+
+ + + +
+
+
+
proc `[]=`[T](p: UniquePtr[T]; v: T) {.inline.}
+
+ + + +
+
+ +
+
+
+
proc isNil[T](p: ConstPtr[T]): bool {.inline.}
+
+ + + +
+
+
+
proc isNil[T](p: SharedPtr[T]): bool {.inline.}
+
+ + + +
+
+
+
proc isNil[T](p: UniquePtr[T]): bool {.inline.}
+
+ + + +
+
+ +
+
+
+
proc newConstPtr[T](val: sink T): ConstPtr[T]
+
+ + + +
+
+ +
+
+
+
proc newSharedPtr[T](val: sink T): SharedPtr[T] {.nodestroy.}
+
+ + + +
+
+ +
+
+
+
proc newUniquePtr[T](val: sink T): UniquePtr[T] {.nodestroy.}
+
+ + + +
+
+ +
+ +
+
+
+

Converters

+
+
+
+
converter convertConstPtrToObj[T](p: ConstPtr[T]): lent T {.inline.}
+
+ + + +
+
+ +
+
+
+
converter convertSharedPtrToObj[T](p: SharedPtr[T]): var T {.inline.}
+
+ + + +
+
+ +
+
+
+
converter convertUniquePtrToObj[T](p: UniquePtr[T]): var T {.inline.}
+
+ + + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template `[]=`[T](p: ConstPtr[T]; v: T)
+
+ + + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/src/fusion/smartptrs.idx b/src/fusion/smartptrs.idx new file mode 100644 index 0000000..8025000 --- /dev/null +++ b/src/fusion/smartptrs.idx @@ -0,0 +1,32 @@ +nimTitle smartptrs src/fusion/smartptrs.html module src/fusion/smartptrs 0 +nim UniquePtr src/fusion/smartptrs.html#UniquePtr object UniquePtr 15 +nim `=destroy` src/fusion/smartptrs.html#=destroy,UniquePtr[T] proc `=destroy`[T](p: var UniquePtr[T]) 19 +nim `=` src/fusion/smartptrs.html#=,UniquePtr[T],UniquePtr[T] proc `=`[T](dest: var UniquePtr[T]; src: UniquePtr[T]) 28 +nim newUniquePtr src/fusion/smartptrs.html#newUniquePtr,sinkT proc newUniquePtr[T](val: sink T): UniquePtr[T] 30 +nim convertUniquePtrToObj src/fusion/smartptrs.html#convertUniquePtrToObj.c,UniquePtr[T] converter convertUniquePtrToObj[T](p: UniquePtr[T]): var T 41 +nim isNil src/fusion/smartptrs.html#isNil,UniquePtr[T] proc isNil[T](p: UniquePtr[T]): bool 46 +nim `[]` src/fusion/smartptrs.html#[],UniquePtr[T] proc `[]`[T](p: UniquePtr[T]): var T 49 +nim `[]=` src/fusion/smartptrs.html#[]=,UniquePtr[T],T proc `[]=`[T](p: UniquePtr[T]; v: T) 54 +nim `$` src/fusion/smartptrs.html#$,UniquePtr[T] proc `$`[T](p: UniquePtr[T]): string 56 +nim SharedPtr src/fusion/smartptrs.html#SharedPtr object SharedPtr 63 +nim `=destroy` src/fusion/smartptrs.html#=destroy,SharedPtr[T] proc `=destroy`[T](p: var SharedPtr[T]) 67 +nim `=` src/fusion/smartptrs.html#=,SharedPtr[T],SharedPtr[T] proc `=`[T](dest: var SharedPtr[T]; src: SharedPtr[T]) 84 +nim newSharedPtr src/fusion/smartptrs.html#newSharedPtr,sinkT proc newSharedPtr[T](val: sink T): SharedPtr[T] 94 +nim convertSharedPtrToObj src/fusion/smartptrs.html#convertSharedPtrToObj.c,SharedPtr[T] converter convertSharedPtrToObj[T](p: SharedPtr[T]): var T 102 +nim isNil src/fusion/smartptrs.html#isNil,SharedPtr[T] proc isNil[T](p: SharedPtr[T]): bool 107 +nim `[]` src/fusion/smartptrs.html#[],SharedPtr[T] proc `[]`[T](p: SharedPtr[T]): var T 110 +nim `[]=` src/fusion/smartptrs.html#[]=,SharedPtr[T],T proc `[]=`[T](p: SharedPtr[T]; v: T) 115 +nim `$` src/fusion/smartptrs.html#$,SharedPtr[T] proc `$`[T](p: SharedPtr[T]): string 117 +nim ConstPtr src/fusion/smartptrs.html#ConstPtr type ConstPtr 124 +nim newConstPtr src/fusion/smartptrs.html#newConstPtr,sinkT proc newConstPtr[T](val: sink T): ConstPtr[T] 128 +nim convertConstPtrToObj src/fusion/smartptrs.html#convertConstPtrToObj.c,ConstPtr[T] converter convertConstPtrToObj[T](p: ConstPtr[T]): lent T 131 +nim isNil src/fusion/smartptrs.html#isNil,ConstPtr[T] proc isNil[T](p: ConstPtr[T]): bool 134 +nim `[]` src/fusion/smartptrs.html#[],ConstPtr[T] proc `[]`[T](p: ConstPtr[T]): lent T 137 +nim `[]=` src/fusion/smartptrs.html#[]=.t,ConstPtr[T],T template `[]=`[T](p: ConstPtr[T]; v: T) 142 +nim `$` src/fusion/smartptrs.html#$,ConstPtr[T] proc `$`[T](p: ConstPtr[T]): string 144 +nimgrp $ src/fusion/smartptrs.html#$-procs-all proc 56 +nimgrp isnil src/fusion/smartptrs.html#isNil-procs-all proc 46 +nimgrp []= src/fusion/smartptrs.html#[]=-procs-all proc 54 +nimgrp = src/fusion/smartptrs.html#=-procs-all proc 28 +nimgrp =destroy src/fusion/smartptrs.html#=destroy-procs-all proc 19 +nimgrp [] src/fusion/smartptrs.html#[]-procs-all proc 49 diff --git a/stdinfile.html b/stdinfile.html new file mode 100644 index 0000000..9a373a8 --- /dev/null +++ b/stdinfile.html @@ -0,0 +1,84 @@ + + + + + + + +stdinfile + + + + + + + + + + + + +
+
+

stdinfile

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+ +
+ + +
+
+ + + + + + diff --git a/stdinfile.idx b/stdinfile.idx new file mode 100644 index 0000000..554887e --- /dev/null +++ b/stdinfile.idx @@ -0,0 +1 @@ +nimTitle stdinfile stdinfile.html module stdinfile 0 diff --git a/theindex.html b/theindex.html new file mode 100644 index 0000000..e4c66e0 --- /dev/null +++ b/theindex.html @@ -0,0 +1,1812 @@ + + + + + + + +Index + + + + + + + + + + + + +
+
+

Index

+ Modules: src/fusion/astdsl, src/fusion/btreetables, src/fusion/compat, src/fusion/docutils, src/fusion/filepermissions, src/fusion/htmlparser, src/fusion/htmlparser/parsexml, src/fusion/htmlparser/xmltree, src/fusion/ioutils, src/fusion/js/jssets, src/fusion/js/jsxmlhttprequest, src/fusion/js/jsxmlserializer, src/fusion/matching, src/fusion/pointers, src/fusion/pools, src/fusion/scripting, src/fusion/smartptrs, stdinfile.

API symbols

+
`$`:
+
`:=`:
+
`<>`:
+
`==`:
+
`=`:
+
`=copy`:
+
`=destroy`:
+
`?=`:
+
`[]=`:
+
`[]`:
+
`case`:
+
abort:
+
add:
+
addEscaped:
+
allowEmptyAttribs:
+
allowUnquotedAttribs:
+
assertMatch:
+
attr:
+
attrKey:
+
attrs:
+
attrs=:
+
attrsLen:
+
attrValue:
+
BlockTags:
+
buildAst:
+
charData:
+
child:
+
chmod:
+
clear:
+
clientData:
+
clientData=:
+
close:
+
ConstPtr:
+
contains:
+
convertConstPtrToObj:
+
convertSharedPtrToObj:
+
convertUniquePtrToObj:
+
CountTable:
+
CountTableRef:
+
del:
+
delete:
+
duplicate:
+
duplicateTo:
+
elementName:
+
entityName:
+
entityToRune:
+
entityToUtf8:
+
errAttributeValueExpected:
+
errEndOfCDataExpected:
+
errEndOfCommentExpected:
+
errEqExpected:
+
errGtExpected:
+
errNameExpected:
+
errNone:
+
errorMsg:
+
errorMsgExpected:
+
errQmGtExpected:
+
errQuoteExpected:
+
errSemicolonExpected:
+
escape:
+
expand:
+
FieldIndex:
+
findAll:
+
findNimSrcFiles:
+
fromFilePermissions:
+
genCodeImportAll:
+
getAllResponseHeaders:
+
getColumn:
+
getFilename:
+
getKindNames:
+
getLine:
+
getOrDefault:
+
hasKey:
+
hasKeyOrPut:
+
hasKind:
+
hasKindImpl:
+
HTML:
+
HtmlTag:
+
htmlTag:
+
imkInfixEq:
+
imkPredicate:
+
imkSubPattern:
+
inc:
+
initCountTable:
+
initOrderedTable:
+
initTable:
+
InlineTags:
+
innerText:
+
insert:
+
isNil:
+
ItemMatchKind:
+
items:
+
JsSet:
+
kAlt:
+
keys:
+
keysBetween:
+
keysFrom:
+
kind:
+
kind=:
+
kItem:
+
kObject:
+
kPairs:
+
kSeq:
+
kSet:
+
kTuple:
+
KVPair:
+
largest:
+
len:
+
lkAll:
+
lkAny:
+
lkNone:
+
lkOpt:
+
lkPos:
+
lkPref:
+
lkSlice:
+
lkTrail:
+
lkUntil:
+
loadHtml:
+
makeMatchExpr:
+
makeTree:
+
Match:
+
MatchError:
+
matches:
+
MatchKind:
+
merge:
+
mgetOrPut:
+
mitems:
+
mpairs:
+
mvalues:
+
newCData:
+
newComment:
+
newConstPtr:
+
newCountTable:
+
newElement:
+
newEntity:
+
newJsSet:
+
newNode:
+
newOrderedTable:
+
newSharedPtr:
+
newTable:
+
newTableFrom:
+
newText:
+
newUniquePtr:
+
newVerbatimText:
+
newXMLHttpRequest:
+
newXMLSerializer:
+
newXmlTree:
+
next:
+
nnkFloatKinds:
+
nnkIdentKinds:
+
nnkIntKinds:
+
nnkStrKinds:
+
nnkTokenKinds:
+
open:
+
OrderedTable:
+
OrderedTableRef:
+
overrideMimeType:
+
pairs:
+
pairsBetween:
+
pairsFrom:
+
parseHtml:
+
parseMatchExpr:
+
piName:
+
piRest:
+
Pool:
+
pop:
+
rawData:
+
rawData2:
+
rawTag:
+
rawText:
+
reportComments:
+
reportWhitespace:
+
runeToEntity:
+
send:
+
SeqKeyword:
+
SeqStructure:
+
serializeToString:
+
setRequestHeader:
+
SharedPtr:
+
SingleTags:
+
smallest:
+
str:
+
str=:
+
Table:
+
TableRef:
+
tag:
+
tag=:
+
tagA:
+
tagAbbr:
+
tagAcronym:
+
tagAddress:
+
tagApplet:
+
tagArea:
+
tagArticle:
+
tagAside:
+
tagAudio:
+
tagB:
+
tagBase:
+
tagBasefont:
+
tagBdi:
+
tagBdo:
+
tagBig:
+
tagBlockquote:
+
tagBody:
+
tagBr:
+
tagButton:
+
tagCanvas:
+
tagCaption:
+
tagCenter:
+
tagCite:
+
tagCode:
+
tagCol:
+
tagColgroup:
+
tagCommand:
+
tagDatalist:
+
tagDd:
+
tagDel:
+
tagDetails:
+
tagDfn:
+
tagDialog:
+
tagDir:
+
tagDiv:
+
tagDl:
+
tagDt:
+
tagEm:
+
tagEmbed:
+
tagFieldset:
+
tagFigcaption:
+
tagFigure:
+
tagFont:
+
tagFooter:
+
tagForm:
+
tagFrame:
+
tagFrameset:
+
tagH1:
+
tagH2:
+
tagH3:
+
tagH4:
+
tagH5:
+
tagH6:
+
tagHead:
+
tagHeader:
+
tagHgroup:
+
tagHr:
+
tagHtml:
+
tagI:
+
tagIframe:
+
tagImg:
+
tagInput:
+
tagIns:
+
tagIsindex:
+
tagKbd:
+
tagKeygen:
+
tagLabel:
+
tagLegend:
+
tagLi:
+
tagLink:
+
tagMap:
+
tagMark:
+
tagMenu:
+
tagMeta:
+
tagMeter:
+
tagNav:
+
tagNobr:
+
tagNoframes:
+
tagNoscript:
+
tagObject:
+
tagOl:
+
tagOptgroup:
+
tagOption:
+
tagOutput:
+
tagP:
+
tagParam:
+
tagPre:
+
tagProgress:
+
tagQ:
+
tagRp:
+
tagRt:
+
tagRuby:
+
tagS:
+
tagSamp:
+
tagScript:
+
tagSection:
+
tagSelect:
+
tagSmall:
+
tagSource:
+
tagSpan:
+
tagStrike:
+
tagStrong:
+
tagStyle:
+
tagSub:
+
tagSummary:
+
tagSup:
+
tagTable:
+
tagTbody:
+
tagTd:
+
tagTextarea:
+
tagTfoot:
+
tagTh:
+
tagThead:
+
tagTime:
+
tagTitle:
+
tagToStr:
+
tagTr:
+
tagTrack:
+
tagTt:
+
tagU:
+
tagUl:
+
tagUnknown:
+
tagVar:
+
tagVideo:
+
tagWbr:
+
take:
+
text:
+
text=:
+
toAccs:
+
toCountTable:
+
toFilePermissions:
+
toOrderedTable:
+
toString:
+
toTable:
+
toUncheckedArray:
+
toXmlAttributes:
+
UniquePtr:
+
values:
+
valuesBetween:
+
valuesFrom:
+
VarKind:
+
varOfIteration:
+
VarSpec:
+
vkAlt:
+
vkOption:
+
vkRegular:
+
vkSequence:
+
vkSet:
+
withDir:
+
XML:
+
xmlAttribute:
+
XmlAttributes:
+
xmlCData:
+
xmlCharData:
+
xmlComment:
+
xmlElementClose:
+
xmlElementEnd:
+
xmlElementOpen:
+
xmlElementStart:
+
xmlEntity:
+
xmlEof:
+
xmlError:
+
XmlErrorKind:
+
XmlEventKind:
+
xmlHeader:
+
XMLHttpRequest:
+
XmlNode:
+
XmlNodeKind:
+
XmlParseOption:
+
XmlParser:
+
xmlPI:
+
XMLSerializer:
+
xmlSpecial:
+
xmlWhitespace:
+
xnCData:
+
xnComment:
+
xnElement:
+
xnEntity:
+
xnText:
+
xnVerbatimText:
+
+ +
+
+ + + + + +