From 8b70252c86fe76657edded84d16c681d80872f4c Mon Sep 17 00:00:00 2001 From: Alexander Bobkov Date: Wed, 14 Jan 2026 18:23:53 -0500 Subject: [PATCH] sphinx --- build/doctrees/environment.pickle | Bin 14432 -> 13733 bytes build/doctrees/index.doctree | Bin 4458 -> 4580 bytes build/html/.buildinfo | 2 +- build/html/.buildinfo.bak | 4 + build/html/_sources/index.rst.txt | 2 + build/html/_static/alabaster.css | 115 +-- build/html/_static/base-stemmer.js | 476 +++++++++++ build/html/_static/doctools.js | 11 +- build/html/_static/english-stemmer.js | 1066 ++++++++++++++++++++++++ build/html/_static/github-banner.svg | 5 + build/html/_static/language_data.js | 193 +---- build/html/_static/pygments.css | 124 +-- build/html/_static/searchtools.js | 172 ++-- build/html/_static/sphinx_highlight.js | 67 +- build/html/genindex.html | 34 +- build/html/index.html | 36 +- build/html/search.html | 13 +- build/html/searchindex.js | 2 +- build/simplepdf/.buildinfo | 2 +- build/simplepdf/PCB Design.pdf | Bin 51422 -> 51606 bytes build/simplepdf/index.html | 2 + source/index.rst | 4 +- 22 files changed, 1864 insertions(+), 466 deletions(-) create mode 100644 build/html/.buildinfo.bak create mode 100644 build/html/_static/base-stemmer.js create mode 100644 build/html/_static/english-stemmer.js create mode 100644 build/html/_static/github-banner.svg diff --git a/build/doctrees/environment.pickle b/build/doctrees/environment.pickle index ca59a22609bab103b4bf1b700889400feaa38e23..eee357741f65b3ae8674f8c080c52a2984f3228c 100644 GIT binary patch delta 3851 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 Uy8Tt9qaVa{pYQA_bT0S(5Bqs%&Hw-a diff --git a/build/doctrees/index.doctree b/build/doctrees/index.doctree index 2aaab94cc2a53ca418723f9bef43f82613af1bd8..abbfc5a2795fef82859b8480fac1676ff8fbb0d7 100644 GIT binary patch delta 147 zcmaE*^hBAZfpzN5jV#|e95ZY*8>iGx(a2!!5lBfb&P>na%1KNr)&~-XQ!?0Nr(_6V zk!YO)(IlF&a`Hn~rOAElJe)!qq8XYQ${Ea?e{!5=;&|G_ms(VmUo?3lxA5ls+`KHz dyEAr7e$Ow;ySp=^tg|#j0%Yrs&4L1vi~#ufHs=5U delta 68 zcmaE&{7Q+Xfpu#9Mwag!n@c%QGBMuRY|o?4qPi|)bw*i6acK`{USe))No7H5@s!#r W8X4<4Gs-$kGbBLl)tkEoA{ha%ARB%F diff --git a/build/html/.buildinfo b/build/html/.buildinfo index 1834b09..c7d3cdd 100644 --- a/build/html/.buildinfo +++ b/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: ddf980f34b0c643f22008995477c4d83 +config: e5706fa8c1467e4ff503216bcf83ac93 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/build/html/.buildinfo.bak b/build/html/.buildinfo.bak new file mode 100644 index 0000000..1834b09 --- /dev/null +++ b/build/html/.buildinfo.bak @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: ddf980f34b0c643f22008995477c4d83 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/build/html/_sources/index.rst.txt b/build/html/_sources/index.rst.txt index 62a8622..5ca568a 100644 --- a/build/html/_sources/index.rst.txt +++ b/build/html/_sources/index.rst.txt @@ -15,3 +15,5 @@ documentation for details. :maxdepth: 2 :caption: Contents: +design +labs/lab1 diff --git a/build/html/_static/alabaster.css b/build/html/_static/alabaster.css index e3174bf..7e75bf8 100644 --- a/build/html/_static/alabaster.css +++ b/build/html/_static/alabaster.css @@ -1,5 +1,3 @@ -@import url("basic.css"); - /* -- page layout ----------------------------------------------------------- */ body { @@ -160,8 +158,8 @@ div.sphinxsidebar input { font-size: 1em; } -div.sphinxsidebar #searchbox input[type="text"] { - width: 160px; +div.sphinxsidebar #searchbox { + margin: 1em 0; } div.sphinxsidebar .search > div { @@ -263,10 +261,6 @@ div.admonition p.last { margin-bottom: 0; } -div.highlight { - background-color: #fff; -} - dt:target, .highlight { background: #FAF3E8; } @@ -454,7 +448,7 @@ ul, ol { } pre { - background: #EEE; + background: unset; padding: 7px 30px; margin: 15px 0px; line-height: 1.3em; @@ -485,15 +479,15 @@ a.reference { border-bottom: 1px dotted #004B6B; } +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + /* Don't put an underline on images */ a.image-reference, a.image-reference:hover { border-bottom: none; } -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - a.footnote-reference { text-decoration: none; font-size: 0.7em; @@ -509,68 +503,7 @@ a:hover tt, a:hover code { background: #EEE; } - -@media screen and (max-width: 870px) { - - div.sphinxsidebar { - display: none; - } - - div.document { - width: 100%; - - } - - div.documentwrapper { - margin-left: 0; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - } - - div.bodywrapper { - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - margin-left: 0; - } - - ul { - margin-left: 0; - } - - li > ul { - /* Matches the 30px from the "ul, ol" selector above */ - margin-left: 30px; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .bodywrapper { - margin: 0; - } - - .footer { - width: auto; - } - - .github { - display: none; - } - - - -} - - - -@media screen and (max-width: 875px) { +@media screen and (max-width: 940px) { body { margin: 0; @@ -580,12 +513,16 @@ a:hover tt, a:hover code { div.documentwrapper { float: none; background: #fff; + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; } div.sphinxsidebar { display: block; float: none; - width: 102.5%; + width: unset; margin: 50px -30px -20px -30px; padding: 10px 20px; background: #333; @@ -620,8 +557,14 @@ a:hover tt, a:hover code { div.body { min-height: 0; + min-width: auto; /* fixes width on small screens, breaks .hll */ padding: 0; } + + .hll { + /* "fixes" the breakage */ + width: max-content; + } .rtd_doc_footer { display: none; @@ -635,13 +578,18 @@ a:hover tt, a:hover code { width: auto; } - .footer { - width: auto; - } - .github { display: none; } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } } @@ -705,4 +653,11 @@ nav#breadcrumbs li+li:before { div.related { display: none; } +} + +img.github { + position: absolute; + top: 0; + border: 0; + right: 0; } \ No newline at end of file diff --git a/build/html/_static/base-stemmer.js b/build/html/_static/base-stemmer.js new file mode 100644 index 0000000..e6fa0c4 --- /dev/null +++ b/build/html/_static/base-stemmer.js @@ -0,0 +1,476 @@ +// @ts-check + +/**@constructor*/ +BaseStemmer = function() { + /** @protected */ + this.current = ''; + this.cursor = 0; + this.limit = 0; + this.limit_backward = 0; + this.bra = 0; + this.ket = 0; + + /** + * @param {string} value + */ + this.setCurrent = function(value) { + this.current = value; + this.cursor = 0; + this.limit = this.current.length; + this.limit_backward = 0; + this.bra = this.cursor; + this.ket = this.limit; + }; + + /** + * @return {string} + */ + this.getCurrent = function() { + return this.current; + }; + + /** + * @param {BaseStemmer} other + */ + this.copy_from = function(other) { + /** @protected */ + this.current = other.current; + this.cursor = other.cursor; + this.limit = other.limit; + this.limit_backward = other.limit_backward; + this.bra = other.bra; + this.ket = other.ket; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.in_grouping = function(s, min, max) { + /** @protected */ + if (this.cursor >= this.limit) return false; + var ch = this.current.charCodeAt(this.cursor); + if (ch > max || ch < min) return false; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false; + this.cursor++; + return true; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_in_grouping = function(s, min, max) { + /** @protected */ + while (this.cursor < this.limit) { + var ch = this.current.charCodeAt(this.cursor); + if (ch > max || ch < min) + return true; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) + return true; + this.cursor++; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.in_grouping_b = function(s, min, max) { + /** @protected */ + if (this.cursor <= this.limit_backward) return false; + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch > max || ch < min) return false; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false; + this.cursor--; + return true; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_in_grouping_b = function(s, min, max) { + /** @protected */ + while (this.cursor > this.limit_backward) { + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch > max || ch < min) return true; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return true; + this.cursor--; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.out_grouping = function(s, min, max) { + /** @protected */ + if (this.cursor >= this.limit) return false; + var ch = this.current.charCodeAt(this.cursor); + if (ch > max || ch < min) { + this.cursor++; + return true; + } + ch -= min; + if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) { + this.cursor++; + return true; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_out_grouping = function(s, min, max) { + /** @protected */ + while (this.cursor < this.limit) { + var ch = this.current.charCodeAt(this.cursor); + if (ch <= max && ch >= min) { + ch -= min; + if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) != 0) { + return true; + } + } + this.cursor++; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.out_grouping_b = function(s, min, max) { + /** @protected */ + if (this.cursor <= this.limit_backward) return false; + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch > max || ch < min) { + this.cursor--; + return true; + } + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) { + this.cursor--; + return true; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_out_grouping_b = function(s, min, max) { + /** @protected */ + while (this.cursor > this.limit_backward) { + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch <= max && ch >= min) { + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) != 0) { + return true; + } + } + this.cursor--; + } + return false; + }; + + /** + * @param {string} s + * @return {boolean} + */ + this.eq_s = function(s) + { + /** @protected */ + if (this.limit - this.cursor < s.length) return false; + if (this.current.slice(this.cursor, this.cursor + s.length) != s) + { + return false; + } + this.cursor += s.length; + return true; + }; + + /** + * @param {string} s + * @return {boolean} + */ + this.eq_s_b = function(s) + { + /** @protected */ + if (this.cursor - this.limit_backward < s.length) return false; + if (this.current.slice(this.cursor - s.length, this.cursor) != s) + { + return false; + } + this.cursor -= s.length; + return true; + }; + + /** + * @param {Among[]} v + * @return {number} + */ + this.find_among = function(v) + { + /** @protected */ + var i = 0; + var j = v.length; + + var c = this.cursor; + var l = this.limit; + + var common_i = 0; + var common_j = 0; + + var first_key_inspected = false; + + while (true) + { + var k = i + ((j - i) >>> 1); + var diff = 0; + var common = common_i < common_j ? common_i : common_j; // smaller + // w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional) + var w = v[k]; + var i2; + for (i2 = common; i2 < w[0].length; i2++) + { + if (c + common == l) + { + diff = -1; + break; + } + diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2); + if (diff != 0) break; + common++; + } + if (diff < 0) + { + j = k; + common_j = common; + } + else + { + i = k; + common_i = common; + } + if (j - i <= 1) + { + if (i > 0) break; // v->s has been inspected + if (j == i) break; // only one item in v + + // - but now we need to go round once more to get + // v->s inspected. This looks messy, but is actually + // the optimal approach. + + if (first_key_inspected) break; + first_key_inspected = true; + } + } + do { + var w = v[i]; + if (common_i >= w[0].length) + { + this.cursor = c + w[0].length; + if (w.length < 4) return w[2]; + var res = w[3](this); + this.cursor = c + w[0].length; + if (res) return w[2]; + } + i = w[1]; + } while (i >= 0); + return 0; + }; + + // find_among_b is for backwards processing. Same comments apply + /** + * @param {Among[]} v + * @return {number} + */ + this.find_among_b = function(v) + { + /** @protected */ + var i = 0; + var j = v.length + + var c = this.cursor; + var lb = this.limit_backward; + + var common_i = 0; + var common_j = 0; + + var first_key_inspected = false; + + while (true) + { + var k = i + ((j - i) >> 1); + var diff = 0; + var common = common_i < common_j ? common_i : common_j; + var w = v[k]; + var i2; + for (i2 = w[0].length - 1 - common; i2 >= 0; i2--) + { + if (c - common == lb) + { + diff = -1; + break; + } + diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2); + if (diff != 0) break; + common++; + } + if (diff < 0) + { + j = k; + common_j = common; + } + else + { + i = k; + common_i = common; + } + if (j - i <= 1) + { + if (i > 0) break; + if (j == i) break; + if (first_key_inspected) break; + first_key_inspected = true; + } + } + do { + var w = v[i]; + if (common_i >= w[0].length) + { + this.cursor = c - w[0].length; + if (w.length < 4) return w[2]; + var res = w[3](this); + this.cursor = c - w[0].length; + if (res) return w[2]; + } + i = w[1]; + } while (i >= 0); + return 0; + }; + + /* to replace chars between c_bra and c_ket in this.current by the + * chars in s. + */ + /** + * @param {number} c_bra + * @param {number} c_ket + * @param {string} s + * @return {number} + */ + this.replace_s = function(c_bra, c_ket, s) + { + /** @protected */ + var adjustment = s.length - (c_ket - c_bra); + this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket); + this.limit += adjustment; + if (this.cursor >= c_ket) this.cursor += adjustment; + else if (this.cursor > c_bra) this.cursor = c_bra; + return adjustment; + }; + + /** + * @return {boolean} + */ + this.slice_check = function() + { + /** @protected */ + if (this.bra < 0 || + this.bra > this.ket || + this.ket > this.limit || + this.limit > this.current.length) + { + return false; + } + return true; + }; + + /** + * @param {number} c_bra + * @return {boolean} + */ + this.slice_from = function(s) + { + /** @protected */ + var result = false; + if (this.slice_check()) + { + this.replace_s(this.bra, this.ket, s); + result = true; + } + return result; + }; + + /** + * @return {boolean} + */ + this.slice_del = function() + { + /** @protected */ + return this.slice_from(""); + }; + + /** + * @param {number} c_bra + * @param {number} c_ket + * @param {string} s + */ + this.insert = function(c_bra, c_ket, s) + { + /** @protected */ + var adjustment = this.replace_s(c_bra, c_ket, s); + if (c_bra <= this.bra) this.bra += adjustment; + if (c_bra <= this.ket) this.ket += adjustment; + }; + + /** + * @return {string} + */ + this.slice_to = function() + { + /** @protected */ + var result = ''; + if (this.slice_check()) + { + result = this.current.slice(this.bra, this.ket); + } + return result; + }; + + /** + * @return {string} + */ + this.assign_to = function() + { + /** @protected */ + return this.current.slice(0, this.limit); + }; +}; diff --git a/build/html/_static/doctools.js b/build/html/_static/doctools.js index 0398ebb..807cdb1 100644 --- a/build/html/_static/doctools.js +++ b/build/html/_static/doctools.js @@ -59,7 +59,7 @@ const Documentation = { Object.assign(Documentation.TRANSLATIONS, catalog.messages); Documentation.PLURAL_EXPR = new Function( "n", - `return (${catalog.plural_expr})` + `return (${catalog.plural_expr})`, ); Documentation.LOCALE = catalog.locale; }, @@ -89,7 +89,7 @@ const Documentation = { const togglerElements = document.querySelectorAll("img.toggler"); togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) + el.addEventListener("click", (event) => toggler(event.currentTarget)), ); togglerElements.forEach((el) => (el.style.display = "")); if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); @@ -98,14 +98,15 @@ const Documentation = { initOnKeyListeners: () => { // only install a listener if it is really needed if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS + && !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS ) return; document.addEventListener("keydown", (event) => { // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) + return; // bail with special keys if (event.altKey || event.ctrlKey || event.metaKey) return; diff --git a/build/html/_static/english-stemmer.js b/build/html/_static/english-stemmer.js new file mode 100644 index 0000000..056760e --- /dev/null +++ b/build/html/_static/english-stemmer.js @@ -0,0 +1,1066 @@ +// Generated from english.sbl by Snowball 3.0.1 - https://snowballstem.org/ + +/**@constructor*/ +var EnglishStemmer = function() { + var base = new BaseStemmer(); + + /** @const */ var a_0 = [ + ["arsen", -1, -1], + ["commun", -1, -1], + ["emerg", -1, -1], + ["gener", -1, -1], + ["later", -1, -1], + ["organ", -1, -1], + ["past", -1, -1], + ["univers", -1, -1] + ]; + + /** @const */ var a_1 = [ + ["'", -1, 1], + ["'s'", 0, 1], + ["'s", -1, 1] + ]; + + /** @const */ var a_2 = [ + ["ied", -1, 2], + ["s", -1, 3], + ["ies", 1, 2], + ["sses", 1, 1], + ["ss", 1, -1], + ["us", 1, -1] + ]; + + /** @const */ var a_3 = [ + ["succ", -1, 1], + ["proc", -1, 1], + ["exc", -1, 1] + ]; + + /** @const */ var a_4 = [ + ["even", -1, 2], + ["cann", -1, 2], + ["inn", -1, 2], + ["earr", -1, 2], + ["herr", -1, 2], + ["out", -1, 2], + ["y", -1, 1] + ]; + + /** @const */ var a_5 = [ + ["", -1, -1], + ["ed", 0, 2], + ["eed", 1, 1], + ["ing", 0, 3], + ["edly", 0, 2], + ["eedly", 4, 1], + ["ingly", 0, 2] + ]; + + /** @const */ var a_6 = [ + ["", -1, 3], + ["bb", 0, 2], + ["dd", 0, 2], + ["ff", 0, 2], + ["gg", 0, 2], + ["bl", 0, 1], + ["mm", 0, 2], + ["nn", 0, 2], + ["pp", 0, 2], + ["rr", 0, 2], + ["at", 0, 1], + ["tt", 0, 2], + ["iz", 0, 1] + ]; + + /** @const */ var a_7 = [ + ["anci", -1, 3], + ["enci", -1, 2], + ["ogi", -1, 14], + ["li", -1, 16], + ["bli", 3, 12], + ["abli", 4, 4], + ["alli", 3, 8], + ["fulli", 3, 9], + ["lessli", 3, 15], + ["ousli", 3, 10], + ["entli", 3, 5], + ["aliti", -1, 8], + ["biliti", -1, 12], + ["iviti", -1, 11], + ["tional", -1, 1], + ["ational", 14, 7], + ["alism", -1, 8], + ["ation", -1, 7], + ["ization", 17, 6], + ["izer", -1, 6], + ["ator", -1, 7], + ["iveness", -1, 11], + ["fulness", -1, 9], + ["ousness", -1, 10], + ["ogist", -1, 13] + ]; + + /** @const */ var a_8 = [ + ["icate", -1, 4], + ["ative", -1, 6], + ["alize", -1, 3], + ["iciti", -1, 4], + ["ical", -1, 4], + ["tional", -1, 1], + ["ational", 5, 2], + ["ful", -1, 5], + ["ness", -1, 5] + ]; + + /** @const */ var a_9 = [ + ["ic", -1, 1], + ["ance", -1, 1], + ["ence", -1, 1], + ["able", -1, 1], + ["ible", -1, 1], + ["ate", -1, 1], + ["ive", -1, 1], + ["ize", -1, 1], + ["iti", -1, 1], + ["al", -1, 1], + ["ism", -1, 1], + ["ion", -1, 2], + ["er", -1, 1], + ["ous", -1, 1], + ["ant", -1, 1], + ["ent", -1, 1], + ["ment", 15, 1], + ["ement", 16, 1] + ]; + + /** @const */ var a_10 = [ + ["e", -1, 1], + ["l", -1, 2] + ]; + + /** @const */ var a_11 = [ + ["andes", -1, -1], + ["atlas", -1, -1], + ["bias", -1, -1], + ["cosmos", -1, -1], + ["early", -1, 5], + ["gently", -1, 3], + ["howe", -1, -1], + ["idly", -1, 2], + ["news", -1, -1], + ["only", -1, 6], + ["singly", -1, 7], + ["skies", -1, 1], + ["sky", -1, -1], + ["ugly", -1, 4] + ]; + + /** @const */ var /** Array */ g_aeo = [17, 64]; + + /** @const */ var /** Array */ g_v = [17, 65, 16, 1]; + + /** @const */ var /** Array */ g_v_WXY = [1, 17, 65, 208, 1]; + + /** @const */ var /** Array */ g_valid_LI = [55, 141, 2]; + + var /** boolean */ B_Y_found = false; + var /** number */ I_p2 = 0; + var /** number */ I_p1 = 0; + + + /** @return {boolean} */ + function r_prelude() { + B_Y_found = false; + /** @const */ var /** number */ v_1 = base.cursor; + lab0: { + base.bra = base.cursor; + if (!(base.eq_s("'"))) + { + break lab0; + } + base.ket = base.cursor; + if (!base.slice_del()) + { + return false; + } + } + base.cursor = v_1; + /** @const */ var /** number */ v_2 = base.cursor; + lab1: { + base.bra = base.cursor; + if (!(base.eq_s("y"))) + { + break lab1; + } + base.ket = base.cursor; + if (!base.slice_from("Y")) + { + return false; + } + B_Y_found = true; + } + base.cursor = v_2; + /** @const */ var /** number */ v_3 = base.cursor; + lab2: { + while(true) + { + /** @const */ var /** number */ v_4 = base.cursor; + lab3: { + golab4: while(true) + { + /** @const */ var /** number */ v_5 = base.cursor; + lab5: { + if (!(base.in_grouping(g_v, 97, 121))) + { + break lab5; + } + base.bra = base.cursor; + if (!(base.eq_s("y"))) + { + break lab5; + } + base.ket = base.cursor; + base.cursor = v_5; + break golab4; + } + base.cursor = v_5; + if (base.cursor >= base.limit) + { + break lab3; + } + base.cursor++; + } + if (!base.slice_from("Y")) + { + return false; + } + B_Y_found = true; + continue; + } + base.cursor = v_4; + break; + } + } + base.cursor = v_3; + return true; + }; + + /** @return {boolean} */ + function r_mark_regions() { + I_p1 = base.limit; + I_p2 = base.limit; + /** @const */ var /** number */ v_1 = base.cursor; + lab0: { + lab1: { + /** @const */ var /** number */ v_2 = base.cursor; + lab2: { + if (base.find_among(a_0) == 0) + { + break lab2; + } + break lab1; + } + base.cursor = v_2; + if (!base.go_out_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + if (!base.go_in_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + } + I_p1 = base.cursor; + if (!base.go_out_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + if (!base.go_in_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + I_p2 = base.cursor; + } + base.cursor = v_1; + return true; + }; + + /** @return {boolean} */ + function r_shortv() { + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + if (!(base.out_grouping_b(g_v_WXY, 89, 121))) + { + break lab1; + } + if (!(base.in_grouping_b(g_v, 97, 121))) + { + break lab1; + } + if (!(base.out_grouping_b(g_v, 97, 121))) + { + break lab1; + } + break lab0; + } + base.cursor = base.limit - v_1; + lab2: { + if (!(base.out_grouping_b(g_v, 97, 121))) + { + break lab2; + } + if (!(base.in_grouping_b(g_v, 97, 121))) + { + break lab2; + } + if (base.cursor > base.limit_backward) + { + break lab2; + } + break lab0; + } + base.cursor = base.limit - v_1; + if (!(base.eq_s_b("past"))) + { + return false; + } + } + return true; + }; + + /** @return {boolean} */ + function r_R1() { + return I_p1 <= base.cursor; + }; + + /** @return {boolean} */ + function r_R2() { + return I_p2 <= base.cursor; + }; + + /** @return {boolean} */ + function r_Step_1a() { + var /** number */ among_var; + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab0: { + base.ket = base.cursor; + if (base.find_among_b(a_1) == 0) + { + base.cursor = base.limit - v_1; + break lab0; + } + base.bra = base.cursor; + if (!base.slice_del()) + { + return false; + } + } + base.ket = base.cursor; + among_var = base.find_among_b(a_2); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + switch (among_var) { + case 1: + if (!base.slice_from("ss")) + { + return false; + } + break; + case 2: + lab1: { + /** @const */ var /** number */ v_2 = base.limit - base.cursor; + lab2: { + { + /** @const */ var /** number */ c1 = base.cursor - 2; + if (c1 < base.limit_backward) + { + break lab2; + } + base.cursor = c1; + } + if (!base.slice_from("i")) + { + return false; + } + break lab1; + } + base.cursor = base.limit - v_2; + if (!base.slice_from("ie")) + { + return false; + } + } + break; + case 3: + if (base.cursor <= base.limit_backward) + { + return false; + } + base.cursor--; + if (!base.go_out_grouping_b(g_v, 97, 121)) + { + return false; + } + base.cursor--; + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_1b() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_5); + base.bra = base.cursor; + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + switch (among_var) { + case 1: + /** @const */ var /** number */ v_2 = base.limit - base.cursor; + lab2: { + lab3: { + /** @const */ var /** number */ v_3 = base.limit - base.cursor; + lab4: { + if (base.find_among_b(a_3) == 0) + { + break lab4; + } + if (base.cursor > base.limit_backward) + { + break lab4; + } + break lab3; + } + base.cursor = base.limit - v_3; + if (!r_R1()) + { + break lab2; + } + if (!base.slice_from("ee")) + { + return false; + } + } + } + base.cursor = base.limit - v_2; + break; + case 2: + break lab1; + case 3: + among_var = base.find_among_b(a_4); + if (among_var == 0) + { + break lab1; + } + switch (among_var) { + case 1: + /** @const */ var /** number */ v_4 = base.limit - base.cursor; + if (!(base.out_grouping_b(g_v, 97, 121))) + { + break lab1; + } + if (base.cursor > base.limit_backward) + { + break lab1; + } + base.cursor = base.limit - v_4; + base.bra = base.cursor; + if (!base.slice_from("ie")) + { + return false; + } + break; + case 2: + if (base.cursor > base.limit_backward) + { + break lab1; + } + break; + } + break; + } + break lab0; + } + base.cursor = base.limit - v_1; + /** @const */ var /** number */ v_5 = base.limit - base.cursor; + if (!base.go_out_grouping_b(g_v, 97, 121)) + { + return false; + } + base.cursor--; + base.cursor = base.limit - v_5; + if (!base.slice_del()) + { + return false; + } + base.ket = base.cursor; + base.bra = base.cursor; + /** @const */ var /** number */ v_6 = base.limit - base.cursor; + among_var = base.find_among_b(a_6); + switch (among_var) { + case 1: + if (!base.slice_from("e")) + { + return false; + } + return false; + case 2: + { + /** @const */ var /** number */ v_7 = base.limit - base.cursor; + lab5: { + if (!(base.in_grouping_b(g_aeo, 97, 111))) + { + break lab5; + } + if (base.cursor > base.limit_backward) + { + break lab5; + } + return false; + } + base.cursor = base.limit - v_7; + } + break; + case 3: + if (base.cursor != I_p1) + { + return false; + } + /** @const */ var /** number */ v_8 = base.limit - base.cursor; + if (!r_shortv()) + { + return false; + } + base.cursor = base.limit - v_8; + if (!base.slice_from("e")) + { + return false; + } + return false; + } + base.cursor = base.limit - v_6; + base.ket = base.cursor; + if (base.cursor <= base.limit_backward) + { + return false; + } + base.cursor--; + base.bra = base.cursor; + if (!base.slice_del()) + { + return false; + } + } + return true; + }; + + /** @return {boolean} */ + function r_Step_1c() { + base.ket = base.cursor; + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + if (!(base.eq_s_b("y"))) + { + break lab1; + } + break lab0; + } + base.cursor = base.limit - v_1; + if (!(base.eq_s_b("Y"))) + { + return false; + } + } + base.bra = base.cursor; + if (!(base.out_grouping_b(g_v, 97, 121))) + { + return false; + } + lab2: { + if (base.cursor > base.limit_backward) + { + break lab2; + } + return false; + } + if (!base.slice_from("i")) + { + return false; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_2() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_7); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + if (!r_R1()) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_from("tion")) + { + return false; + } + break; + case 2: + if (!base.slice_from("ence")) + { + return false; + } + break; + case 3: + if (!base.slice_from("ance")) + { + return false; + } + break; + case 4: + if (!base.slice_from("able")) + { + return false; + } + break; + case 5: + if (!base.slice_from("ent")) + { + return false; + } + break; + case 6: + if (!base.slice_from("ize")) + { + return false; + } + break; + case 7: + if (!base.slice_from("ate")) + { + return false; + } + break; + case 8: + if (!base.slice_from("al")) + { + return false; + } + break; + case 9: + if (!base.slice_from("ful")) + { + return false; + } + break; + case 10: + if (!base.slice_from("ous")) + { + return false; + } + break; + case 11: + if (!base.slice_from("ive")) + { + return false; + } + break; + case 12: + if (!base.slice_from("ble")) + { + return false; + } + break; + case 13: + if (!base.slice_from("og")) + { + return false; + } + break; + case 14: + if (!(base.eq_s_b("l"))) + { + return false; + } + if (!base.slice_from("og")) + { + return false; + } + break; + case 15: + if (!base.slice_from("less")) + { + return false; + } + break; + case 16: + if (!(base.in_grouping_b(g_valid_LI, 99, 116))) + { + return false; + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_3() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_8); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + if (!r_R1()) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_from("tion")) + { + return false; + } + break; + case 2: + if (!base.slice_from("ate")) + { + return false; + } + break; + case 3: + if (!base.slice_from("al")) + { + return false; + } + break; + case 4: + if (!base.slice_from("ic")) + { + return false; + } + break; + case 5: + if (!base.slice_del()) + { + return false; + } + break; + case 6: + if (!r_R2()) + { + return false; + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_4() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_9); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + if (!r_R2()) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_del()) + { + return false; + } + break; + case 2: + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + if (!(base.eq_s_b("s"))) + { + break lab1; + } + break lab0; + } + base.cursor = base.limit - v_1; + if (!(base.eq_s_b("t"))) + { + return false; + } + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_5() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_10); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + switch (among_var) { + case 1: + lab0: { + lab1: { + if (!r_R2()) + { + break lab1; + } + break lab0; + } + if (!r_R1()) + { + return false; + } + { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab2: { + if (!r_shortv()) + { + break lab2; + } + return false; + } + base.cursor = base.limit - v_1; + } + } + if (!base.slice_del()) + { + return false; + } + break; + case 2: + if (!r_R2()) + { + return false; + } + if (!(base.eq_s_b("l"))) + { + return false; + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_exception1() { + var /** number */ among_var; + base.bra = base.cursor; + among_var = base.find_among(a_11); + if (among_var == 0) + { + return false; + } + base.ket = base.cursor; + if (base.cursor < base.limit) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_from("sky")) + { + return false; + } + break; + case 2: + if (!base.slice_from("idl")) + { + return false; + } + break; + case 3: + if (!base.slice_from("gentl")) + { + return false; + } + break; + case 4: + if (!base.slice_from("ugli")) + { + return false; + } + break; + case 5: + if (!base.slice_from("earli")) + { + return false; + } + break; + case 6: + if (!base.slice_from("onli")) + { + return false; + } + break; + case 7: + if (!base.slice_from("singl")) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_postlude() { + if (!B_Y_found) + { + return false; + } + while(true) + { + /** @const */ var /** number */ v_1 = base.cursor; + lab0: { + golab1: while(true) + { + /** @const */ var /** number */ v_2 = base.cursor; + lab2: { + base.bra = base.cursor; + if (!(base.eq_s("Y"))) + { + break lab2; + } + base.ket = base.cursor; + base.cursor = v_2; + break golab1; + } + base.cursor = v_2; + if (base.cursor >= base.limit) + { + break lab0; + } + base.cursor++; + } + if (!base.slice_from("y")) + { + return false; + } + continue; + } + base.cursor = v_1; + break; + } + return true; + }; + + this.stem = /** @return {boolean} */ function() { + lab0: { + /** @const */ var /** number */ v_1 = base.cursor; + lab1: { + if (!r_exception1()) + { + break lab1; + } + break lab0; + } + base.cursor = v_1; + lab2: { + { + /** @const */ var /** number */ v_2 = base.cursor; + lab3: { + { + /** @const */ var /** number */ c1 = base.cursor + 3; + if (c1 > base.limit) + { + break lab3; + } + base.cursor = c1; + } + break lab2; + } + base.cursor = v_2; + } + break lab0; + } + base.cursor = v_1; + r_prelude(); + r_mark_regions(); + base.limit_backward = base.cursor; base.cursor = base.limit; + /** @const */ var /** number */ v_3 = base.limit - base.cursor; + r_Step_1a(); + base.cursor = base.limit - v_3; + /** @const */ var /** number */ v_4 = base.limit - base.cursor; + r_Step_1b(); + base.cursor = base.limit - v_4; + /** @const */ var /** number */ v_5 = base.limit - base.cursor; + r_Step_1c(); + base.cursor = base.limit - v_5; + /** @const */ var /** number */ v_6 = base.limit - base.cursor; + r_Step_2(); + base.cursor = base.limit - v_6; + /** @const */ var /** number */ v_7 = base.limit - base.cursor; + r_Step_3(); + base.cursor = base.limit - v_7; + /** @const */ var /** number */ v_8 = base.limit - base.cursor; + r_Step_4(); + base.cursor = base.limit - v_8; + /** @const */ var /** number */ v_9 = base.limit - base.cursor; + r_Step_5(); + base.cursor = base.limit - v_9; + base.cursor = base.limit_backward; + /** @const */ var /** number */ v_10 = base.cursor; + r_postlude(); + base.cursor = v_10; + } + return true; + }; + + /**@return{string}*/ + this['stemWord'] = function(/**string*/word) { + base.setCurrent(word); + this.stem(); + return base.getCurrent(); + }; +}; diff --git a/build/html/_static/github-banner.svg b/build/html/_static/github-banner.svg new file mode 100644 index 0000000..c47d9dc --- /dev/null +++ b/build/html/_static/github-banner.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/html/_static/language_data.js b/build/html/_static/language_data.js index c7fe6c6..5776786 100644 --- a/build/html/_static/language_data.js +++ b/build/html/_static/language_data.js @@ -1,192 +1,13 @@ /* * This script contains the language-specific data used by searchtools.js, - * namely the list of stopwords, stemmer, scorer and splitter. + * namely the set of stopwords, stemmer, scorer and splitter. */ -var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; +const stopwords = new Set(["a", "about", "above", "after", "again", "against", "all", "am", "an", "and", "any", "are", "aren't", "as", "at", "be", "because", "been", "before", "being", "below", "between", "both", "but", "by", "can't", "cannot", "could", "couldn't", "did", "didn't", "do", "does", "doesn't", "doing", "don't", "down", "during", "each", "few", "for", "from", "further", "had", "hadn't", "has", "hasn't", "have", "haven't", "having", "he", "he'd", "he'll", "he's", "her", "here", "here's", "hers", "herself", "him", "himself", "his", "how", "how's", "i", "i'd", "i'll", "i'm", "i've", "if", "in", "into", "is", "isn't", "it", "it's", "its", "itself", "let's", "me", "more", "most", "mustn't", "my", "myself", "no", "nor", "not", "of", "off", "on", "once", "only", "or", "other", "ought", "our", "ours", "ourselves", "out", "over", "own", "same", "shan't", "she", "she'd", "she'll", "she's", "should", "shouldn't", "so", "some", "such", "than", "that", "that's", "the", "their", "theirs", "them", "themselves", "then", "there", "there's", "these", "they", "they'd", "they'll", "they're", "they've", "this", "those", "through", "to", "too", "under", "until", "up", "very", "was", "wasn't", "we", "we'd", "we'll", "we're", "we've", "were", "weren't", "what", "what's", "when", "when's", "where", "where's", "which", "while", "who", "who's", "whom", "why", "why's", "with", "won't", "would", "wouldn't", "you", "you'd", "you'll", "you're", "you've", "your", "yours", "yourself", "yourselves"]); +window.stopwords = stopwords; // Export to global scope -/* Non-minified version is copied as a separate JS file, if available */ - -/** - * Porter Stemmer - */ -var Stemmer = function() { - - var step2list = { - ational: 'ate', - tional: 'tion', - enci: 'ence', - anci: 'ance', - izer: 'ize', - bli: 'ble', - alli: 'al', - entli: 'ent', - eli: 'e', - ousli: 'ous', - ization: 'ize', - ation: 'ate', - ator: 'ate', - alism: 'al', - iveness: 'ive', - fulness: 'ful', - ousness: 'ous', - aliti: 'al', - iviti: 'ive', - biliti: 'ble', - logi: 'log' - }; - - var step3list = { - icate: 'ic', - ative: '', - alize: 'al', - iciti: 'ic', - ical: 'ic', - ful: '', - ness: '' - }; - - var c = "[^aeiou]"; // consonant - var v = "[aeiouy]"; // vowel - var C = c + "[^aeiouy]*"; // consonant sequence - var V = v + "[aeiou]*"; // vowel sequence - - var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - +/* Non-minified versions are copied as separate JavaScript files, if available */ +BaseStemmer=function(){this.current="",this.cursor=0,this.limit=0,this.limit_backward=0,this.bra=0,this.ket=0,this.setCurrent=function(t){this.current=t,this.cursor=0,this.limit=this.current.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},this.getCurrent=function(){return this.current},this.copy_from=function(t){this.current=t.current,this.cursor=t.cursor,this.limit=t.limit,this.limit_backward=t.limit_backward,this.bra=t.bra,this.ket=t.ket},this.in_grouping=function(t,r,i){return!(this.cursor>=this.limit||i<(i=this.current.charCodeAt(this.cursor))||i>>3]&1<<(7&i))||(this.cursor++,0))},this.go_in_grouping=function(t,r,i){for(;this.cursor>>3]&1<<(7&s)))return!0;this.cursor++}return!1},this.in_grouping_b=function(t,r,i){return!(this.cursor<=this.limit_backward||i<(i=this.current.charCodeAt(this.cursor-1))||i>>3]&1<<(7&i))||(this.cursor--,0))},this.go_in_grouping_b=function(t,r,i){for(;this.cursor>this.limit_backward;){var s=this.current.charCodeAt(this.cursor-1);if(i>>3]&1<<(7&s)))return!0;this.cursor--}return!1},this.out_grouping=function(t,r,i){return!(this.cursor>=this.limit)&&(i<(i=this.current.charCodeAt(this.cursor))||i>>3]&1<<(7&i)))&&(this.cursor++,!0)},this.go_out_grouping=function(t,r,i){for(;this.cursor>>3]&1<<(7&s)))return!0;this.cursor++}return!1},this.out_grouping_b=function(t,r,i){return!(this.cursor<=this.limit_backward)&&(i<(i=this.current.charCodeAt(this.cursor-1))||i>>3]&1<<(7&i)))&&(this.cursor--,!0)},this.go_out_grouping_b=function(t,r,i){for(;this.cursor>this.limit_backward;){var s=this.current.charCodeAt(this.cursor-1);if(s<=i&&r<=s&&0!=(t[(s-=r)>>>3]&1<<(7&s)))return!0;this.cursor--}return!1},this.eq_s=function(t){return!(this.limit-this.cursor>>1),o=0,a=e=(l=t[r])[0].length){if(this.cursor=s+l[0].length,l.length<4)return l[2];var g=l[3](this);if(this.cursor=s+l[0].length,g)return l[2]}}while(0<=(r=l[1]));return 0},this.find_among_b=function(t){for(var r=0,i=t.length,s=this.cursor,h=this.limit_backward,e=0,n=0,c=!1;;){for(var u,o=r+(i-r>>1),a=0,l=e=(u=t[r])[0].length){if(this.cursor=s-u[0].length,u.length<4)return u[2];var g=u[3](this);if(this.cursor=s-u[0].length,g)return u[2]}}while(0<=(r=u[1]));return 0},this.replace_s=function(t,r,i){var s=i.length-(r-t);return this.current=this.current.slice(0,t)+i+this.current.slice(r),this.limit+=s,this.cursor>=r?this.cursor+=s:this.cursor>t&&(this.cursor=t),s},this.slice_check=function(){return!(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>this.current.length)},this.slice_from=function(t){var r=!1;return this.slice_check()&&(this.replace_s(this.bra,this.ket,t),r=!0),r},this.slice_del=function(){return this.slice_from("")},this.insert=function(t,r,i){r=this.replace_s(t,r,i);t<=this.bra&&(this.bra+=r),t<=this.ket&&(this.ket+=r)},this.slice_to=function(){var t="";return t=this.slice_check()?this.current.slice(this.bra,this.ket):t},this.assign_to=function(){return this.current.slice(0,this.limit)}}; +var EnglishStemmer=function(){var a=new BaseStemmer,c=[["arsen",-1,-1],["commun",-1,-1],["emerg",-1,-1],["gener",-1,-1],["later",-1,-1],["organ",-1,-1],["past",-1,-1],["univers",-1,-1]],o=[["'",-1,1],["'s'",0,1],["'s",-1,1]],u=[["ied",-1,2],["s",-1,3],["ies",1,2],["sses",1,1],["ss",1,-1],["us",1,-1]],t=[["succ",-1,1],["proc",-1,1],["exc",-1,1]],l=[["even",-1,2],["cann",-1,2],["inn",-1,2],["earr",-1,2],["herr",-1,2],["out",-1,2],["y",-1,1]],n=[["",-1,-1],["ed",0,2],["eed",1,1],["ing",0,3],["edly",0,2],["eedly",4,1],["ingly",0,2]],f=[["",-1,3],["bb",0,2],["dd",0,2],["ff",0,2],["gg",0,2],["bl",0,1],["mm",0,2],["nn",0,2],["pp",0,2],["rr",0,2],["at",0,1],["tt",0,2],["iz",0,1]],_=[["anci",-1,3],["enci",-1,2],["ogi",-1,14],["li",-1,16],["bli",3,12],["abli",4,4],["alli",3,8],["fulli",3,9],["lessli",3,15],["ousli",3,10],["entli",3,5],["aliti",-1,8],["biliti",-1,12],["iviti",-1,11],["tional",-1,1],["ational",14,7],["alism",-1,8],["ation",-1,7],["ization",17,6],["izer",-1,6],["ator",-1,7],["iveness",-1,11],["fulness",-1,9],["ousness",-1,10],["ogist",-1,13]],m=[["icate",-1,4],["ative",-1,6],["alize",-1,3],["iciti",-1,4],["ical",-1,4],["tional",-1,1],["ational",5,2],["ful",-1,5],["ness",-1,5]],b=[["ic",-1,1],["ance",-1,1],["ence",-1,1],["able",-1,1],["ible",-1,1],["ate",-1,1],["ive",-1,1],["ize",-1,1],["iti",-1,1],["al",-1,1],["ism",-1,1],["ion",-1,2],["er",-1,1],["ous",-1,1],["ant",-1,1],["ent",-1,1],["ment",15,1],["ement",16,1]],k=[["e",-1,1],["l",-1,2]],g=[["andes",-1,-1],["atlas",-1,-1],["bias",-1,-1],["cosmos",-1,-1],["early",-1,5],["gently",-1,3],["howe",-1,-1],["idly",-1,2],["news",-1,-1],["only",-1,6],["singly",-1,7],["skies",-1,1],["sky",-1,-1],["ugly",-1,4]],d=[17,64],v=[17,65,16,1],i=[1,17,65,208,1],w=[55,141,2],p=!1,y=0,h=0;function q(){var r=a.limit-a.cursor;return!!(a.out_grouping_b(i,89,121)&&a.in_grouping_b(v,97,121)&&a.out_grouping_b(v,97,121)||(a.cursor=a.limit-r,a.out_grouping_b(v,97,121)&&a.in_grouping_b(v,97,121)&&!(a.cursor>a.limit_backward))||(a.cursor=a.limit-r,a.eq_s_b("past")))}function z(){return h<=a.cursor}function Y(){return y<=a.cursor}this.stem=function(){var r=a.cursor;if(!(()=>{var r;if(a.bra=a.cursor,0!=(r=a.find_among(g))&&(a.ket=a.cursor,!(a.cursora.limit)a.cursor=i;else{a.cursor=e,a.cursor=r,(()=>{p=!1;var r=a.cursor;if(a.bra=a.cursor,!a.eq_s("'")||(a.ket=a.cursor,a.slice_del())){a.cursor=r;r=a.cursor;if(a.bra=a.cursor,a.eq_s("y")){if(a.ket=a.cursor,!a.slice_from("Y"))return;p=!0}a.cursor=r;for(r=a.cursor;;){var i=a.cursor;r:{for(;;){var e=a.cursor;if(a.in_grouping(v,97,121)&&(a.bra=a.cursor,a.eq_s("y"))){a.ket=a.cursor,a.cursor=e;break}if(a.cursor=e,a.cursor>=a.limit)break r;a.cursor++}if(!a.slice_from("Y"))return;p=!0;continue}a.cursor=i;break}a.cursor=r}})(),h=a.limit,y=a.limit;i=a.cursor;r:{var s=a.cursor;if(0==a.find_among(c)){if(a.cursor=s,!a.go_out_grouping(v,97,121))break r;if(a.cursor++,!a.go_in_grouping(v,97,121))break r;a.cursor++}h=a.cursor,a.go_out_grouping(v,97,121)&&(a.cursor++,a.go_in_grouping(v,97,121))&&(a.cursor++,y=a.cursor)}a.cursor=i,a.limit_backward=a.cursor,a.cursor=a.limit;var e=a.limit-a.cursor,r=((()=>{var r=a.limit-a.cursor;if(a.ket=a.cursor,0==a.find_among_b(o))a.cursor=a.limit-r;else if(a.bra=a.cursor,!a.slice_del())return;if(a.ket=a.cursor,0!=(r=a.find_among_b(u)))switch(a.bra=a.cursor,r){case 1:if(a.slice_from("ss"))break;return;case 2:r:{var i=a.limit-a.cursor,e=a.cursor-2;if(!(e{a.ket=a.cursor,o=a.find_among_b(n),a.bra=a.cursor;r:{var r=a.limit-a.cursor;i:{switch(o){case 1:var i=a.limit-a.cursor;e:{var e=a.limit-a.cursor;if(0==a.find_among_b(t)||a.cursor>a.limit_backward){if(a.cursor=a.limit-e,!z())break e;if(!a.slice_from("ee"))return}}a.cursor=a.limit-i;break;case 2:break i;case 3:if(0==(o=a.find_among_b(l)))break i;switch(o){case 1:var s=a.limit-a.cursor;if(!a.out_grouping_b(v,97,121))break i;if(a.cursor>a.limit_backward)break i;if(a.cursor=a.limit-s,a.bra=a.cursor,a.slice_from("ie"))break;return;case 2:if(a.cursor>a.limit_backward)break i}}break r}a.cursor=a.limit-r;var c=a.limit-a.cursor;if(!a.go_out_grouping_b(v,97,121))return;if(a.cursor--,a.cursor=a.limit-c,!a.slice_del())return;a.ket=a.cursor,a.bra=a.cursor;var o,c=a.limit-a.cursor;switch(o=a.find_among_b(f)){case 1:return a.slice_from("e");case 2:var u=a.limit-a.cursor;if(a.in_grouping_b(d,97,111)&&!(a.cursor>a.limit_backward))return;a.cursor=a.limit-u;break;case 3:return a.cursor!=h||(u=a.limit-a.cursor,q()&&(a.cursor=a.limit-u,a.slice_from("e")))}if(a.cursor=a.limit-c,a.ket=a.cursor,a.cursor<=a.limit_backward)return;if(a.cursor--,a.bra=a.cursor,!a.slice_del())return}})(),a.cursor=a.limit-r,a.limit-a.cursor),r=(a.ket=a.cursor,e=a.limit-a.cursor,(a.eq_s_b("y")||(a.cursor=a.limit-e,a.eq_s_b("Y")))&&(a.bra=a.cursor,a.out_grouping_b(v,97,121))&&a.cursor>a.limit_backward&&a.slice_from("i"),a.cursor=a.limit-i,a.limit-a.cursor),e=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(_))&&(a.bra=a.cursor,z()))switch(r){case 1:if(a.slice_from("tion"))break;return;case 2:if(a.slice_from("ence"))break;return;case 3:if(a.slice_from("ance"))break;return;case 4:if(a.slice_from("able"))break;return;case 5:if(a.slice_from("ent"))break;return;case 6:if(a.slice_from("ize"))break;return;case 7:if(a.slice_from("ate"))break;return;case 8:if(a.slice_from("al"))break;return;case 9:if(a.slice_from("ful"))break;return;case 10:if(a.slice_from("ous"))break;return;case 11:if(a.slice_from("ive"))break;return;case 12:if(a.slice_from("ble"))break;return;case 13:if(a.slice_from("og"))break;return;case 14:if(!a.eq_s_b("l"))return;if(a.slice_from("og"))break;return;case 15:if(a.slice_from("less"))break;return;case 16:if(!a.in_grouping_b(w,99,116))return;if(a.slice_del())break}})(),a.cursor=a.limit-r,a.limit-a.cursor),i=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(m))&&(a.bra=a.cursor,z()))switch(r){case 1:if(a.slice_from("tion"))break;return;case 2:if(a.slice_from("ate"))break;return;case 3:if(a.slice_from("al"))break;return;case 4:if(a.slice_from("ic"))break;return;case 5:if(a.slice_del())break;return;case 6:if(!Y())return;if(a.slice_del())break}})(),a.cursor=a.limit-e,a.limit-a.cursor),r=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(b))&&(a.bra=a.cursor,Y()))switch(r){case 1:if(a.slice_del())break;return;case 2:var i=a.limit-a.cursor;if(!a.eq_s_b("s")&&(a.cursor=a.limit-i,!a.eq_s_b("t")))return;if(a.slice_del())break}})(),a.cursor=a.limit-i,a.limit-a.cursor),e=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(k)))switch(a.bra=a.cursor,r){case 1:if(!Y()){if(!z())return;var i=a.limit-a.cursor;if(q())return;a.cursor=a.limit-i}if(a.slice_del())break;return;case 2:if(!Y())return;if(!a.eq_s_b("l"))return;if(a.slice_del())break}})(),a.cursor=a.limit-r,a.cursor=a.limit_backward,a.cursor);(()=>{if(p)for(;;){var r=a.cursor;r:{for(;;){var i=a.cursor;if(a.bra=a.cursor,a.eq_s("Y")){a.ket=a.cursor,a.cursor=i;break}if(a.cursor=i,a.cursor>=a.limit)break r;a.cursor++}if(a.slice_from("y"))continue;return}a.cursor=r;break}})(),a.cursor=e}}return!0},this.stemWord=function(r){return a.setCurrent(r),this.stem(),a.getCurrent()}}; +window.Stemmer = EnglishStemmer; diff --git a/build/html/_static/pygments.css b/build/html/_static/pygments.css index 04a4174..9392ddc 100644 --- a/build/html/_static/pygments.css +++ b/build/html/_static/pygments.css @@ -5,80 +5,80 @@ td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5 span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight { background: #f8f8f8; } -.highlight .c { color: #8f5902; font-style: italic } /* Comment */ -.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ -.highlight .g { color: #000000 } /* Generic */ +.highlight .c { color: #8F5902; font-style: italic } /* Comment */ +.highlight .err { color: #A40000; border: 1px solid #EF2929 } /* Error */ +.highlight .g { color: #000 } /* Generic */ .highlight .k { color: #004461; font-weight: bold } /* Keyword */ -.highlight .l { color: #000000 } /* Literal */ -.highlight .n { color: #000000 } /* Name */ +.highlight .l { color: #000 } /* Literal */ +.highlight .n { color: #000 } /* Name */ .highlight .o { color: #582800 } /* Operator */ -.highlight .x { color: #000000 } /* Other */ -.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ -.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #8f5902 } /* Comment.Preproc */ -.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #a40000 } /* Generic.Deleted */ -.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ -.highlight .ges { color: #000000 } /* Generic.EmphStrong */ -.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .x { color: #000 } /* Other */ +.highlight .p { color: #000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8F5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8F5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8F5902 } /* Comment.Preproc */ +.highlight .cpf { color: #8F5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8F5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8F5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A40000 } /* Generic.Deleted */ +.highlight .ge { color: #000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000 } /* Generic.EmphStrong */ +.highlight .gr { color: #EF2929 } /* Generic.Error */ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .go { color: #888 } /* Generic.Output */ .highlight .gp { color: #745334 } /* Generic.Prompt */ -.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gs { color: #000; font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .gt { color: #A40000; font-weight: bold } /* Generic.Traceback */ .highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */ .highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */ -.highlight .ld { color: #000000 } /* Literal.Date */ -.highlight .m { color: #990000 } /* Literal.Number */ -.highlight .s { color: #4e9a06 } /* Literal.String */ -.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .ld { color: #000 } /* Literal.Date */ +.highlight .m { color: #900 } /* Literal.Number */ +.highlight .s { color: #4E9A06 } /* Literal.String */ +.highlight .na { color: #C4A000 } /* Name.Attribute */ .highlight .nb { color: #004461 } /* Name.Builtin */ -.highlight .nc { color: #000000 } /* Name.Class */ -.highlight .no { color: #000000 } /* Name.Constant */ -.highlight .nd { color: #888888 } /* Name.Decorator */ -.highlight .ni { color: #ce5c00 } /* Name.Entity */ -.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #000000 } /* Name.Function */ -.highlight .nl { color: #f57900 } /* Name.Label */ -.highlight .nn { color: #000000 } /* Name.Namespace */ -.highlight .nx { color: #000000 } /* Name.Other */ -.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nc { color: #000 } /* Name.Class */ +.highlight .no { color: #000 } /* Name.Constant */ +.highlight .nd { color: #888 } /* Name.Decorator */ +.highlight .ni { color: #CE5C00 } /* Name.Entity */ +.highlight .ne { color: #C00; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000 } /* Name.Function */ +.highlight .nl { color: #F57900 } /* Name.Label */ +.highlight .nn { color: #000 } /* Name.Namespace */ +.highlight .nx { color: #000 } /* Name.Other */ +.highlight .py { color: #000 } /* Name.Property */ .highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .nv { color: #000 } /* Name.Variable */ .highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */ -.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ -.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ -.highlight .mb { color: #990000 } /* Literal.Number.Bin */ -.highlight .mf { color: #990000 } /* Literal.Number.Float */ -.highlight .mh { color: #990000 } /* Literal.Number.Hex */ -.highlight .mi { color: #990000 } /* Literal.Number.Integer */ -.highlight .mo { color: #990000 } /* Literal.Number.Oct */ -.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ -.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ -.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ -.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ -.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ -.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ -.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ -.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ -.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ -.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ -.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ -.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ -.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #000000 } /* Name.Function.Magic */ -.highlight .vc { color: #000000 } /* Name.Variable.Class */ -.highlight .vg { color: #000000 } /* Name.Variable.Global */ -.highlight .vi { color: #000000 } /* Name.Variable.Instance */ -.highlight .vm { color: #000000 } /* Name.Variable.Magic */ -.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */ \ No newline at end of file +.highlight .pm { color: #000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #F8F8F8 } /* Text.Whitespace */ +.highlight .mb { color: #900 } /* Literal.Number.Bin */ +.highlight .mf { color: #900 } /* Literal.Number.Float */ +.highlight .mh { color: #900 } /* Literal.Number.Hex */ +.highlight .mi { color: #900 } /* Literal.Number.Integer */ +.highlight .mo { color: #900 } /* Literal.Number.Oct */ +.highlight .sa { color: #4E9A06 } /* Literal.String.Affix */ +.highlight .sb { color: #4E9A06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4E9A06 } /* Literal.String.Char */ +.highlight .dl { color: #4E9A06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8F5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4E9A06 } /* Literal.String.Double */ +.highlight .se { color: #4E9A06 } /* Literal.String.Escape */ +.highlight .sh { color: #4E9A06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4E9A06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4E9A06 } /* Literal.String.Other */ +.highlight .sr { color: #4E9A06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4E9A06 } /* Literal.String.Single */ +.highlight .ss { color: #4E9A06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465A4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000 } /* Name.Function.Magic */ +.highlight .vc { color: #000 } /* Name.Variable.Class */ +.highlight .vg { color: #000 } /* Name.Variable.Global */ +.highlight .vi { color: #000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000 } /* Name.Variable.Magic */ +.highlight .il { color: #900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/build/html/_static/searchtools.js b/build/html/_static/searchtools.js index 91f4be5..e29b1c7 100644 --- a/build/html/_static/searchtools.js +++ b/build/html/_static/searchtools.js @@ -41,11 +41,12 @@ if (typeof Scorer === "undefined") { } // Global search result kind enum, used by themes to style search results. +// prettier-ignore class SearchResultKind { - static get index() { return "index"; } - static get object() { return "object"; } - static get text() { return "text"; } - static get title() { return "title"; } + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } } const _removeChildren = (element) => { @@ -58,6 +59,15 @@ const _removeChildren = (element) => { const _escapeRegExp = (string) => string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string +const _escapeHTML = (text) => { + return text + .replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll('"', """) + .replaceAll("'", "'"); +}; + const _displayItem = (item, searchTerms, highlightTerms) => { const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; @@ -90,25 +100,30 @@ const _displayItem = (item, searchTerms, highlightTerms) => { let linkEl = listItem.appendChild(document.createElement("a")); linkEl.href = linkUrl + anchor; linkEl.dataset.score = score; - linkEl.innerHTML = title; + linkEl.innerHTML = _escapeHTML(title); if (descr) { listItem.appendChild(document.createElement("span")).innerHTML = - " (" + descr + ")"; + ` (${_escapeHTML(descr)})`; // highlight search terms in the description - if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js - highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); - } - else if (showSearchSummary) + if (SPHINX_HIGHLIGHT_ENABLED) + // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js + highlightTerms.forEach((term) => + _highlightText(listItem, term, "highlighted"), + ); + } else if (showSearchSummary) fetch(requestUrl) .then((responseData) => responseData.text()) .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms, anchor) + Search.makeSearchSummary(data, searchTerms, anchor), ); // highlight search terms in the summary - if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js - highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + if (SPHINX_HIGHLIGHT_ENABLED) + // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js + highlightTerms.forEach((term) => + _highlightText(listItem, term, "highlighted"), + ); }); Search.output.appendChild(listItem); }; @@ -117,14 +132,14 @@ const _finishSearch = (resultCount) => { Search.title.innerText = _("Search Results"); if (!resultCount) Search.status.innerText = Documentation.gettext( - "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.", ); else Search.status.innerText = Documentation.ngettext( "Search finished, found one page matching the search query.", "Search finished, found ${resultCount} pages matching the search query.", resultCount, - ).replace('${resultCount}', resultCount); + ).replace("${resultCount}", resultCount); }; const _displayNextItem = ( results, @@ -138,7 +153,7 @@ const _displayNextItem = ( _displayItem(results.pop(), searchTerms, highlightTerms); setTimeout( () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), - 5 + 5, ); } // search finished, update title and status message @@ -170,9 +185,10 @@ const _orderResultsByScoreThenName = (a, b) => { * This is the same as ``\W+`` in Python, preserving the surrogate pair area. */ if (typeof splitQuery === "undefined") { - var splitQuery = (query) => query + var splitQuery = (query) => + query .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) - .filter(term => term) // remove remaining empty strings + .filter((term) => term); // remove remaining empty strings } /** @@ -184,16 +200,23 @@ const Search = { _pulse_status: -1, htmlToText: (htmlString, anchor) => { - const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + const htmlElement = new DOMParser().parseFromString( + htmlString, + "text/html", + ); for (const removalQuery of [".headerlink", "script", "style"]) { - htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + htmlElement.querySelectorAll(removalQuery).forEach((el) => { + el.remove(); + }); } if (anchor) { - const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + const anchorContent = htmlElement.querySelector( + `[role="main"] ${anchor}`, + ); if (anchorContent) return anchorContent.textContent; console.warn( - `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`, ); } @@ -202,7 +225,7 @@ const Search = { if (docContent) return docContent.textContent; console.warn( - "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template.", ); return ""; }, @@ -287,12 +310,8 @@ const Search = { const queryTermLower = queryTerm.toLowerCase(); // maybe skip this "word" - // stopwords array is from language_data.js - if ( - stopwords.indexOf(queryTermLower) !== -1 || - queryTerm.match(/^\d+$/) - ) - return; + // stopwords set is from language_data.js + if (stopwords.has(queryTermLower) || queryTerm.match(/^\d+$/)) return; // stem the word let word = stemmer.stemWord(queryTermLower); @@ -304,8 +323,12 @@ const Search = { } }); - if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js - localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + if (SPHINX_HIGHLIGHT_ENABLED) { + // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js + localStorage.setItem( + "sphinx_highlight_terms", + [...highlightTerms].join(" "), + ); } // console.debug("SEARCH: searching for:"); @@ -318,7 +341,13 @@ const Search = { /** * execute search (requires search index to be loaded) */ - _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + _performSearch: ( + query, + searchTerms, + excludedTerms, + highlightTerms, + objectTerms, + ) => { const filenames = Search._index.filenames; const docNames = Search._index.docnames; const titles = Search._index.titles; @@ -334,10 +363,15 @@ const Search = { const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + if ( + title.toLowerCase().trim().includes(queryLower) + && queryLower.length >= title.length / 2 + ) { for (const [file, id] of foundTitles) { - const score = Math.round(Scorer.title * queryLower.length / title.length); - const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + const score = Math.round( + (Scorer.title * queryLower.length) / title.length, + ); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, @@ -353,9 +387,9 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { - if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + if (entry.includes(queryLower) && queryLower.length >= entry.length / 2) { for (const [file, id, isMain] of foundEntries) { - const score = Math.round(100 * queryLower.length / entry.length); + const score = Math.round((100 * queryLower.length) / entry.length); const result = [ docNames[file], titles[file], @@ -376,11 +410,13 @@ const Search = { // lookup as object objectTerms.forEach((term) => - normalResults.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)), ); // lookup as search terms in fulltext - normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push( + ...Search.performTermsSearch(searchTerms, excludedTerms), + ); // let the scorer override scores with a custom scoring function if (Scorer.score) { @@ -401,7 +437,11 @@ const Search = { // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept let seen = new Set(); results = results.reverse().reduce((acc, result) => { - let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + let resultStr = result + .slice(0, 4) + .concat([result[5]]) + .map((v) => String(v)) + .join(","); if (!seen.has(resultStr)) { acc.push(result); seen.add(resultStr); @@ -413,8 +453,20 @@ const Search = { }, query: (query) => { - const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); - const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + const [ + searchQuery, + searchTerms, + excludedTerms, + highlightTerms, + objectTerms, + ] = Search._parseQuery(query); + const results = Search._performSearch( + searchQuery, + searchTerms, + excludedTerms, + highlightTerms, + objectTerms, + ); // for debugging //Search.lastresults = results.slice(); // a copy @@ -437,7 +489,7 @@ const Search = { const results = []; const objectSearchCallback = (prefix, match) => { - const name = match[4] + const name = match[4]; const fullname = (prefix ? prefix + "." : "") + name; const fullnameLower = fullname.toLowerCase(); if (fullnameLower.indexOf(object) < 0) return; @@ -489,9 +541,7 @@ const Search = { ]); }; Object.keys(objects).forEach((prefix) => - objects[prefix].forEach((array) => - objectSearchCallback(prefix, array) - ) + objects[prefix].forEach((array) => objectSearchCallback(prefix, array)), ); return results; }, @@ -516,8 +566,14 @@ const Search = { // find documents, if any, containing the query word in their text/title term indices // use Object.hasOwnProperty to avoid mismatching against prototype properties const arr = [ - { files: terms.hasOwnProperty(word) ? terms[word] : undefined, score: Scorer.term }, - { files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, score: Scorer.title }, + { + files: terms.hasOwnProperty(word) ? terms[word] : undefined, + score: Scorer.term, + }, + { + files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, + score: Scorer.title, + }, ]; // add support for partial matches if (word.length > 2) { @@ -558,7 +614,8 @@ const Search = { // create the mapping files.forEach((file) => { if (!fileMap.has(file)) fileMap.set(file, [word]); - else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + else if (fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); }); }); @@ -569,11 +626,11 @@ const Search = { // as search terms with length < 3 are discarded const filteredTermCount = [...searchTerms].filter( - (term) => term.length > 2 + (term) => term.length > 2, ).length; if ( - wordList.length !== searchTerms.size && - wordList.length !== filteredTermCount + wordList.length !== searchTerms.size + && wordList.length !== filteredTermCount ) continue; @@ -581,10 +638,10 @@ const Search = { if ( [...excludedTerms].some( (term) => - terms[term] === file || - titleTerms[term] === file || - (terms[term] || []).includes(file) || - (titleTerms[term] || []).includes(file) + terms[term] === file + || titleTerms[term] === file + || (terms[term] || []).includes(file) + || (titleTerms[term] || []).includes(file), ) ) break; @@ -626,7 +683,8 @@ const Search = { let summary = document.createElement("p"); summary.classList.add("context"); - summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + summary.textContent = + top + text.substr(startWithContext, 240).trim() + tail; return summary; }, diff --git a/build/html/_static/sphinx_highlight.js b/build/html/_static/sphinx_highlight.js index 8a96c69..a74e103 100644 --- a/build/html/_static/sphinx_highlight.js +++ b/build/html/_static/sphinx_highlight.js @@ -1,7 +1,7 @@ /* Highlighting utilities for Sphinx HTML documentation. */ "use strict"; -const SPHINX_HIGHLIGHT_ENABLED = true +const SPHINX_HIGHLIGHT_ENABLED = true; /** * highlight a given string on a node by wrapping it in @@ -13,9 +13,9 @@ const _highlight = (node, addItems, text, className) => { const parent = node.parentNode; const pos = val.toLowerCase().indexOf(text); if ( - pos >= 0 && - !parent.classList.contains(className) && - !parent.classList.contains("nohighlight") + pos >= 0 + && !parent.classList.contains(className) + && !parent.classList.contains("nohighlight") ) { let span; @@ -30,13 +30,7 @@ const _highlight = (node, addItems, text, className) => { span.appendChild(document.createTextNode(val.substr(pos, text.length))); const rest = document.createTextNode(val.substr(pos + text.length)); - parent.insertBefore( - span, - parent.insertBefore( - rest, - node.nextSibling - ) - ); + parent.insertBefore(span, parent.insertBefore(rest, node.nextSibling)); node.nodeValue = val.substr(0, pos); /* There may be more occurrences of search term in this node. So call this * function recursively on the remaining fragment. @@ -46,7 +40,7 @@ const _highlight = (node, addItems, text, className) => { if (isInSVG) { const rect = document.createElementNS( "http://www.w3.org/2000/svg", - "rect" + "rect", ); const bbox = parent.getBBox(); rect.x.baseVal.value = bbox.x; @@ -65,7 +59,7 @@ const _highlightText = (thisNode, text, className) => { let addItems = []; _highlight(thisNode, addItems, text, className); addItems.forEach((obj) => - obj.parent.insertAdjacentElement("beforebegin", obj.target) + obj.parent.insertAdjacentElement("beforebegin", obj.target), ); }; @@ -73,25 +67,31 @@ const _highlightText = (thisNode, text, className) => { * Small JavaScript module for the documentation. */ const SphinxHighlight = { - /** * highlight the search words provided in localstorage in the text */ highlightSearchWords: () => { - if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight // get and clear terms from localstorage const url = new URL(window.location); const highlight = - localStorage.getItem("sphinx_highlight_terms") - || url.searchParams.get("highlight") - || ""; - localStorage.removeItem("sphinx_highlight_terms") - url.searchParams.delete("highlight"); - window.history.replaceState({}, "", url); + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms"); + // Update history only if '?highlight' is present; otherwise it + // clears text fragments (not set in window.location by the browser) + if (url.searchParams.has("highlight")) { + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + } // get individual terms from highlight string - const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + const terms = highlight + .toLowerCase() + .split(/\s+/) + .filter((x) => x); if (terms.length === 0) return; // nothing to do // There should never be more than one element matching "div.body" @@ -107,11 +107,11 @@ const SphinxHighlight = { document .createRange() .createContextualFragment( - '" - ) + '", + ), ); }, @@ -125,7 +125,7 @@ const SphinxHighlight = { document .querySelectorAll("span.highlighted") .forEach((el) => el.classList.remove("highlighted")); - localStorage.removeItem("sphinx_highlight_terms") + localStorage.removeItem("sphinx_highlight_terms"); }, initEscapeListener: () => { @@ -134,10 +134,15 @@ const SphinxHighlight = { document.addEventListener("keydown", (event) => { // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) + return; // bail with special keys - if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; - if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) + return; + if ( + DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + && event.key === "Escape" + ) { SphinxHighlight.hideSearchWords(); event.preventDefault(); } diff --git a/build/html/genindex.html b/build/html/genindex.html index fe2e219..bf22b74 100644 --- a/build/html/genindex.html +++ b/build/html/genindex.html @@ -5,11 +5,12 @@ Index — PCB Design 2026.01 documentation - - + + + - - + + @@ -52,7 +53,16 @@ -

Navigation

+ + +

Navigation

Related Topics

@@ -61,16 +71,6 @@
- - @@ -87,8 +87,8 @@ ©2026, Alexander B.. | - Powered by Sphinx 8.2.3 - & Alabaster 0.7.16 + Powered by Sphinx 9.1.0 + & Alabaster 1.0.0 diff --git a/build/html/index.html b/build/html/index.html index 6e5666f..5754846 100644 --- a/build/html/index.html +++ b/build/html/index.html @@ -6,11 +6,12 @@ PCB Design documentation — PCB Design 2026.01 documentation - - + + + - - + + @@ -37,6 +38,8 @@ documentation for details.

+

design +labs/lab1

@@ -55,7 +58,16 @@ documentation for details.

-

Navigation

+ + +

Navigation

Related Topics

@@ -64,16 +76,6 @@ documentation for details.

- - @@ -90,8 +92,8 @@ documentation for details.

©2026, Alexander B.. | - Powered by Sphinx 8.2.3 - & Alabaster 0.7.16 + Powered by Sphinx 9.1.0 + & Alabaster 1.0.0 | Search — PCB Design 2026.01 documentation - - + + + - - + + @@ -104,8 +105,8 @@ ©2026, Alexander B.. | - Powered by Sphinx 8.2.3 - & Alabaster 0.7.16 + Powered by Sphinx 9.1.0 + & Alabaster 1.0.0 diff --git a/build/html/searchindex.js b/build/html/searchindex.js index 0b2b04e..ac04195 100644 --- a/build/html/searchindex.js +++ b/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles":{"PCB Design documentation":[[0,null]]},"docnames":["index"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["index.rst"],"indexentries":{},"objects":{},"objnames":{},"objtypes":{},"terms":{"add":0,"content":0,"detail":0,"restructuredtext":0,"see":0,"syntax":0,"us":0,"your":0},"titles":["PCB Design documentation"],"titleterms":{"design":0,"document":0,"pcb":0}}) \ No newline at end of file +Search.setIndex({"alltitles":{"PCB Design documentation":[[0,null]]},"docnames":["index"],"envversion":{"sphinx":66,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["index.rst"],"indexentries":{},"objects":{},"objnames":{},"objtypes":{},"terms":{"add":0,"content":0,"detail":0,"lab":0,"lab1":0,"restructuredtext":0,"see":0,"syntax":0,"use":0},"titles":["PCB Design documentation"],"titleterms":{"design":0,"document":0,"pcb":0}}) \ No newline at end of file diff --git a/build/simplepdf/.buildinfo b/build/simplepdf/.buildinfo index 8ec5682..964e47e 100644 --- a/build/simplepdf/.buildinfo +++ b/build/simplepdf/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 38443b3ce076988f69d1abff0ffc7735 +config: 6d616d6a91b5fc800110b4ab621e9403 tags: 62a1e7829a13fc7881b6498c52484ec0 diff --git a/build/simplepdf/PCB Design.pdf b/build/simplepdf/PCB Design.pdf index 08d85ada4d03fd566382f53d55b72be1356a334d..daee4866e63bdca39825cf212bab5ee106588d19 100644 GIT binary patch delta 22462 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 a{p8QI0KY71{UpV$p{KzuFK^*!$^Ac2ELpw) delta 22294 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 ZC-Mj2+Z*$fZpj`BF)%p_B_%~qMhX_M9FG71 diff --git a/build/simplepdf/index.html b/build/simplepdf/index.html index b4f0b13..89e6e39 100644 --- a/build/simplepdf/index.html +++ b/build/simplepdf/index.html @@ -54,6 +54,8 @@ documentation for details.

+

design +labs/lab1

diff --git a/source/index.rst b/source/index.rst index 5ca568a..ca4fb79 100644 --- a/source/index.rst +++ b/source/index.rst @@ -15,5 +15,5 @@ documentation for details. :maxdepth: 2 :caption: Contents: -design -labs/lab1 + design + lab1