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(
- '' +
- '' +
- _("Hide Search Matches") +
- "
"
- )
+ ''
+ + ''
+ + _("Hide Search Matches")
+ + "
",
+ ),
);
},
@@ -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 @@
-
- Quick search
-
-
-
-
-
@@ -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.
-
- Quick search
-
-
-
-
-
@@ -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