diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..130a48e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+# Sphinx output
+_build/
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..08835bd
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,19 @@
+# Minimal makefile for Sphinx documentation
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = .
+BUILDDIR = _build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..07e085f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,89 @@
+Section Handouts (Code in Place 2020)
+=====================================
+
+[Code in Place](compedu.stanford.edu/codeinplace/v1/#/) is community-service coding education in the time of Covid-19.
+
+Looking for Section Handouts?
+-----------------------------
+
+Click on any of the following links to go directly to the handout for your section.
+
+*ENGLISH*
+
+- Section 1: United Nations Karel
+
+*ESPAÑOL*
+
+- Section 1: United Nations Karel
+
+*FRANÇAIS*
+
+- Section 1: United Nations Karel
+
+*DEUTSCHE*
+
+- Section 1: United Nations Karel
+
+Want to help with translations?
+-------------------------------
+Code in Place is fortunate to have students from several countries who speak several languages.
+
+If you have the time, energy, and capacity, we would appreciate additional translations. To add a translation, modify a `.po` file in the `locale/` directory. Ideally, use a po-editor to help with formatting. Please be careful not to break reST notation.
+
+Eventually, if desired, we'll move the open-source translation to Transifex [3], which is a friendlier interface for crowd-sourced translations.
+
+**If you're a Code in Place student, you can stop reading now.**
+
+What's up with Sphinx?
+----------------------
+Sphinx [1] is "a tool that makes it easy to create intelligent and beautiful
+documentation" commonly used for writing about and documenting Python code.
+It also has nice support for internationalization [2].
+
+Preparing Documentation for Another Language
+--------------------------------------------
+
+First, hop into your virtual environment and install `sphinx` and `sphinx-intl`:
+
+```
+(venv) $ python3 -m pip install sphinx sphinx-intl
+```
+
+Make translation files for your target languages:
+
+```bash
+$ make gettext # Extract translatable messages into pot files.
+$ sphinx-intl update -p _build/gettext -l es -l de -l fr # Generate `po` files from those `pot` files.
+```
+
+Then, somehow, the `.po` files need to be translated.
+
+Once the `.po` files contain translations, we'll build the documentation in your desired language. For example, to build HTML documentation in Spanish, use:
+
+```bash
+$ make -e SPHINXOPTS="-D language='es'" html
+```
+
+To build PDF handouts, use:
+
+```bash
+$ make -e SPHINXOPTS="-D language='es'" latexpdf
+```
+
+That's pretty tough to remember, and each new language overwrites the old build output, so instead, use `makedoc.sh`.
+
+```
+$ ./makedoc.sh
+```
+
+It builds all of the documentation in HTML and PDF format and brings the build output to `handouts-html` and `handouts-pdf`.
+
+Remember, whenever you add a new handout or change the existing documents, you need to update the PO files with the new content:
+
+```bash
+$ sphinx-intl update -p _build/gettext
+```
+
+[1]: https://www.sphinx-doc.org/
+[2]: http://www.sphinx-doc.org/en/master/usage/advanced/intl.html
+[3]: http://www.sphinx-doc.org/en/master/usage/advanced/intl.html#using-transifex-service-for-team-translation
\ No newline at end of file
diff --git a/conf.py b/conf.py
new file mode 100644
index 0000000..cb1028f
--- /dev/null
+++ b/conf.py
@@ -0,0 +1,69 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options.
+# For a full list, see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+import pathlib
+
+# -- Project information -----------------------------------------------------
+
+project = 'Code in Place Section Handouts (2020)'
+copyright = '2020, The Code in Place Teaching Team'
+author = 'The Code in Place Teaching Team'
+
+# The full version, including alpha/beta/rc tags
+release = '0.0.1'
+
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'alabaster'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+
+# -- Options for PDF output --------------------------------------------------
+HERE = pathlib.Path(__file__).parent
+
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-latex_documents
+latex_documents = [
+ (f'section{number}/section{number}', f'Section{number}.tex', f'Section {number}',
+ 'Code in Place', 'howto')
+ for number in range(1, 10)
+ if (HERE / f'section{number}/section{number}.rst').exists()
+]
+
+# https://www.sphinx-doc.org/en/master/latex.html#the-latex-elements-configuration-setting
+latex_elements = {
+ 'maketitle': '', # Disable \maketitle
+ 'tableofcontents': '' # Disable \tableofcontents
+}
+
+
+# -- Options for sphinx-intl -------------------------------------------------
+
+locale_dirs = ['locale/']
+gettext_compact = False
diff --git a/handouts-html/de/html/.buildinfo b/handouts-html/de/html/.buildinfo
new file mode 100644
index 0000000..69c9f6b
--- /dev/null
+++ b/handouts-html/de/html/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: db5fd44929727d1086e4772300c5ab81
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/handouts-html/de/html/_images/final.png b/handouts-html/de/html/_images/final.png
new file mode 100644
index 0000000..4439ac7
Binary files /dev/null and b/handouts-html/de/html/_images/final.png differ
diff --git a/handouts-html/de/html/_images/house.png b/handouts-html/de/html/_images/house.png
new file mode 100644
index 0000000..0fec0f5
Binary files /dev/null and b/handouts-html/de/html/_images/house.png differ
diff --git a/handouts-html/de/html/_images/initial.png b/handouts-html/de/html/_images/initial.png
new file mode 100644
index 0000000..ddb3b9e
Binary files /dev/null and b/handouts-html/de/html/_images/initial.png differ
diff --git a/handouts-html/de/html/_sources/index.rst.txt b/handouts-html/de/html/_sources/index.rst.txt
new file mode 100644
index 0000000..68f0a9d
--- /dev/null
+++ b/handouts-html/de/html/_sources/index.rst.txt
@@ -0,0 +1,16 @@
+.. Code in Place Section Handouts (2020) documentation master file, created by
+ sphinx-quickstart on Sat Apr 11 19:14:41 2020.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+=======================================
+Section Handouts for Code in Place 2020
+=======================================
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Handouts:
+ :titlesonly:
+ :glob:
+
+ section*/section*
diff --git a/handouts-html/de/html/_sources/section1/section1.rst.txt b/handouts-html/de/html/_sources/section1/section1.rst.txt
new file mode 100644
index 0000000..d3576ef
--- /dev/null
+++ b/handouts-html/de/html/_sources/section1/section1.rst.txt
@@ -0,0 +1,42 @@
+.. section1:
+
+=================
+Section Handout 1
+=================
+
+********************
+United Nations Karel
+********************
+
+As part of its plans to help reconstruct infrastructure worldwide, the United Nations - that's right, the UN is using Karel - established a new program with the mission of dispatching house-building robots to repair flood-damaged areas.
+
+Your job is to program those robots.
+
+Each robot begins at the west end of a street that might look like this:
+
+.. image:: img/initial.png
+ :alt: Initial World Layout for United Nations Karel
+ :align: center
+ :width: 100%
+
+Each beeper in the figure represents a pile of debris. Karel's job is to walk along the street and build a new house in the places marked by each beeper. Those houses, moreover, need to be raised on stilts to avoid damage from the next flood. Each house, in fact, should look exactly like the picture below:
+
+.. image:: img/house.png
+ :alt: A House made out of Beepers
+ :align: center
+ :width: 20%
+
+The new house should be centered at the point at which the bit of debris was left, which means that the first house in the diagram above will be constructed with its left edge along 2nd Avenue. At the end of the run, Karel should be at the east end of the street having created a set of houses that look like this for the initial conditions shown:
+
+.. image:: img/final.png
+ :alt: Final world layout for United Nations Karel
+ :align: center
+ :width: 100%
+
+Keep in mind the following information about the world:
+
+* Karel starts facing east at (1, 1) with an infinite number of beepers in its beeper bag.
+* The beepers indicating the positions at which houses should be built will be spaced so that there is room to build the houses without overlapping or hitting walls.
+* Karel must end up facing east at the southeast corner of the world. Moreover, Karel should not run into a wall if it builds a house that extends into that final corner.
+
+Write a program to implement the United Nations Karel project. Remember that your program should work for any world that meets the above conditions.
diff --git a/handouts-html/de/html/_static/_stemmer.js b/handouts-html/de/html/_static/_stemmer.js
new file mode 100644
index 0000000..4f1dc1c
--- /dev/null
+++ b/handouts-html/de/html/_static/_stemmer.js
@@ -0,0 +1,2506 @@
+// generatedy by JSX compiler 0.9.89 (2014-05-20 06:01:03 +0900; 8e8c6105f36f3dfe440ea026a3c93a3444977102)
+var JSX = {};
+(function (JSX) {
+/**
+ * extends the class
+ */
+function $__jsx_extend(derivations, base) {
+ var ctor = function () {};
+ ctor.prototype = base.prototype;
+ var proto = new ctor();
+ for (var i in derivations) {
+ derivations[i].prototype = proto;
+ }
+}
+
+/**
+ * copies the implementations from source interface to target
+ */
+function $__jsx_merge_interface(target, source) {
+ for (var k in source.prototype)
+ if (source.prototype.hasOwnProperty(k))
+ target.prototype[k] = source.prototype[k];
+}
+
+/**
+ * defers the initialization of the property
+ */
+function $__jsx_lazy_init(obj, prop, func) {
+ function reset(obj, prop, value) {
+ delete obj[prop];
+ obj[prop] = value;
+ return value;
+ }
+
+ Object.defineProperty(obj, prop, {
+ get: function () {
+ return reset(obj, prop, func());
+ },
+ set: function (v) {
+ reset(obj, prop, v);
+ },
+ enumerable: true,
+ configurable: true
+ });
+}
+
+var $__jsx_imul = Math.imul;
+if (typeof $__jsx_imul === "undefined") {
+ $__jsx_imul = function (a, b) {
+ var ah = (a >>> 16) & 0xffff;
+ var al = a & 0xffff;
+ var bh = (b >>> 16) & 0xffff;
+ var bl = b & 0xffff;
+ return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
+ };
+}
+
+/**
+ * fused int-ops with side-effects
+ */
+function $__jsx_ipadd(o, p, r) {
+ return o[p] = (o[p] + r) | 0;
+}
+function $__jsx_ipsub(o, p, r) {
+ return o[p] = (o[p] - r) | 0;
+}
+function $__jsx_ipmul(o, p, r) {
+ return o[p] = $__jsx_imul(o[p], r);
+}
+function $__jsx_ipdiv(o, p, r) {
+ return o[p] = (o[p] / r) | 0;
+}
+function $__jsx_ipmod(o, p, r) {
+ return o[p] = (o[p] % r) | 0;
+}
+function $__jsx_ippostinc(o, p) {
+ var v = o[p];
+ o[p] = (v + 1) | 0;
+ return v;
+}
+function $__jsx_ippostdec(o, p) {
+ var v = o[p];
+ o[p] = (v - 1) | 0;
+ return v;
+}
+
+/**
+ * non-inlined version of Array#each
+ */
+function $__jsx_forEach(o, f) {
+ var l = o.length;
+ for (var i = 0; i < l; ++i)
+ f(o[i]);
+}
+
+/*
+ * global functions, renamed to avoid conflict with local variable names
+ */
+var $__jsx_parseInt = parseInt;
+var $__jsx_parseFloat = parseFloat;
+function $__jsx_isNaN(n) { return n !== n; }
+var $__jsx_isFinite = isFinite;
+
+var $__jsx_encodeURIComponent = encodeURIComponent;
+var $__jsx_decodeURIComponent = decodeURIComponent;
+var $__jsx_encodeURI = encodeURI;
+var $__jsx_decodeURI = decodeURI;
+
+var $__jsx_ObjectToString = Object.prototype.toString;
+var $__jsx_ObjectHasOwnProperty = Object.prototype.hasOwnProperty;
+
+/*
+ * profiler object, initialized afterwards
+ */
+function $__jsx_profiler() {
+}
+
+/*
+ * public interface to JSX code
+ */
+JSX.require = function (path) {
+ var m = $__jsx_classMap[path];
+ return m !== undefined ? m : null;
+};
+
+JSX.profilerIsRunning = function () {
+ return $__jsx_profiler.getResults != null;
+};
+
+JSX.getProfileResults = function () {
+ return ($__jsx_profiler.getResults || function () { return {}; })();
+};
+
+JSX.postProfileResults = function (url, cb) {
+ if ($__jsx_profiler.postResults == null)
+ throw new Error("profiler has not been turned on");
+ return $__jsx_profiler.postResults(url, cb);
+};
+
+JSX.resetProfileResults = function () {
+ if ($__jsx_profiler.resetResults == null)
+ throw new Error("profiler has not been turned on");
+ return $__jsx_profiler.resetResults();
+};
+JSX.DEBUG = false;
+var GeneratorFunction$0 =
+(function () {
+ try {
+ return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
+ } catch (e) {
+ return function GeneratorFunction () {};
+ }
+})();
+var __jsx_generator_object$0 =
+(function () {
+ function __jsx_generator_object() {
+ this.__next = 0;
+ this.__loop = null;
+ this.__seed = null;
+ this.__value = undefined;
+ this.__status = 0; // SUSPENDED: 0, ACTIVE: 1, DEAD: 2
+ }
+
+ __jsx_generator_object.prototype.next = function (seed) {
+ switch (this.__status) {
+ case 0:
+ this.__status = 1;
+ this.__seed = seed;
+
+ // go next!
+ this.__loop(this.__next);
+
+ var done = false;
+ if (this.__next != -1) {
+ this.__status = 0;
+ } else {
+ this.__status = 2;
+ done = true;
+ }
+ return { value: this.__value, done: done };
+ case 1:
+ throw new Error("Generator is already running");
+ case 2:
+ throw new Error("Generator is already finished");
+ default:
+ throw new Error("Unexpected generator internal state");
+ }
+ };
+
+ return __jsx_generator_object;
+}());
+function Among(s, substring_i, result) {
+ this.s_size = s.length;
+ this.s = s;
+ this.substring_i = substring_i;
+ this.result = result;
+ this.method = null;
+ this.instance = null;
+};
+
+function Among$0(s, substring_i, result, method, instance) {
+ this.s_size = s.length;
+ this.s = s;
+ this.substring_i = substring_i;
+ this.result = result;
+ this.method = method;
+ this.instance = instance;
+};
+
+$__jsx_extend([Among, Among$0], Object);
+function Stemmer() {
+};
+
+$__jsx_extend([Stemmer], Object);
+function BaseStemmer() {
+ var current$0;
+ var cursor$0;
+ var limit$0;
+ this.cache = ({ });
+ current$0 = this.current = "";
+ cursor$0 = this.cursor = 0;
+ limit$0 = this.limit = current$0.length;
+ this.limit_backward = 0;
+ this.bra = cursor$0;
+ this.ket = limit$0;
+};
+
+$__jsx_extend([BaseStemmer], Stemmer);
+BaseStemmer.prototype.setCurrent$S = function (value) {
+ var current$0;
+ var cursor$0;
+ var limit$0;
+ current$0 = this.current = value;
+ cursor$0 = this.cursor = 0;
+ limit$0 = this.limit = current$0.length;
+ this.limit_backward = 0;
+ this.bra = cursor$0;
+ this.ket = limit$0;
+};
+
+
+function BaseStemmer$setCurrent$LBaseStemmer$S($this, value) {
+ var current$0;
+ var cursor$0;
+ var limit$0;
+ current$0 = $this.current = value;
+ cursor$0 = $this.cursor = 0;
+ limit$0 = $this.limit = current$0.length;
+ $this.limit_backward = 0;
+ $this.bra = cursor$0;
+ $this.ket = limit$0;
+};
+
+BaseStemmer.setCurrent$LBaseStemmer$S = BaseStemmer$setCurrent$LBaseStemmer$S;
+
+BaseStemmer.prototype.getCurrent$ = function () {
+ return this.current;
+};
+
+
+function BaseStemmer$getCurrent$LBaseStemmer$($this) {
+ return $this.current;
+};
+
+BaseStemmer.getCurrent$LBaseStemmer$ = BaseStemmer$getCurrent$LBaseStemmer$;
+
+BaseStemmer.prototype.copy_from$LBaseStemmer$ = function (other) {
+ 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;
+};
+
+
+function BaseStemmer$copy_from$LBaseStemmer$LBaseStemmer$($this, other) {
+ $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;
+};
+
+BaseStemmer.copy_from$LBaseStemmer$LBaseStemmer$ = BaseStemmer$copy_from$LBaseStemmer$LBaseStemmer$;
+
+BaseStemmer.prototype.in_grouping$AIII = function (s, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if (this.cursor >= this.limit) {
+ return false;
+ }
+ 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;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+
+function BaseStemmer$in_grouping$LBaseStemmer$AIII($this, s, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if ($this.cursor >= $this.limit) {
+ return false;
+ }
+ 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;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+BaseStemmer.in_grouping$LBaseStemmer$AIII = BaseStemmer$in_grouping$LBaseStemmer$AIII;
+
+BaseStemmer.prototype.in_grouping_b$AIII = function (s, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if (this.cursor <= this.limit_backward) {
+ return false;
+ }
+ 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;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+
+function BaseStemmer$in_grouping_b$LBaseStemmer$AIII($this, s, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if ($this.cursor <= $this.limit_backward) {
+ return false;
+ }
+ 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;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+BaseStemmer.in_grouping_b$LBaseStemmer$AIII = BaseStemmer$in_grouping_b$LBaseStemmer$AIII;
+
+BaseStemmer.prototype.out_grouping$AIII = function (s, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if (this.cursor >= this.limit) {
+ return false;
+ }
+ ch = this.current.charCodeAt(this.cursor);
+ if (ch > max || ch < min) {
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ return true;
+ }
+ ch -= min;
+ if ((s[ch >>> 3] & 0X1 << (ch & 0x7)) === 0) {
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ return true;
+ }
+ return false;
+};
+
+
+function BaseStemmer$out_grouping$LBaseStemmer$AIII($this, s, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if ($this.cursor >= $this.limit) {
+ return false;
+ }
+ ch = $this.current.charCodeAt($this.cursor);
+ if (ch > max || ch < min) {
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ return true;
+ }
+ ch -= min;
+ if ((s[ch >>> 3] & 0X1 << (ch & 0x7)) === 0) {
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ return true;
+ }
+ return false;
+};
+
+BaseStemmer.out_grouping$LBaseStemmer$AIII = BaseStemmer$out_grouping$LBaseStemmer$AIII;
+
+BaseStemmer.prototype.out_grouping_b$AIII = function (s, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if (this.cursor <= this.limit_backward) {
+ return false;
+ }
+ ch = this.current.charCodeAt(this.cursor - 1);
+ if (ch > max || ch < min) {
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
+ return true;
+ }
+ ch -= min;
+ if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) {
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
+ return true;
+ }
+ return false;
+};
+
+
+function BaseStemmer$out_grouping_b$LBaseStemmer$AIII($this, s, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if ($this.cursor <= $this.limit_backward) {
+ return false;
+ }
+ ch = $this.current.charCodeAt($this.cursor - 1);
+ if (ch > max || ch < min) {
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
+ return true;
+ }
+ ch -= min;
+ if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) {
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
+ return true;
+ }
+ return false;
+};
+
+BaseStemmer.out_grouping_b$LBaseStemmer$AIII = BaseStemmer$out_grouping_b$LBaseStemmer$AIII;
+
+BaseStemmer.prototype.in_range$II = function (min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if (this.cursor >= this.limit) {
+ return false;
+ }
+ ch = this.current.charCodeAt(this.cursor);
+ if (ch > max || ch < min) {
+ return false;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+
+function BaseStemmer$in_range$LBaseStemmer$II($this, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if ($this.cursor >= $this.limit) {
+ return false;
+ }
+ ch = $this.current.charCodeAt($this.cursor);
+ if (ch > max || ch < min) {
+ return false;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+BaseStemmer.in_range$LBaseStemmer$II = BaseStemmer$in_range$LBaseStemmer$II;
+
+BaseStemmer.prototype.in_range_b$II = function (min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if (this.cursor <= this.limit_backward) {
+ return false;
+ }
+ ch = this.current.charCodeAt(this.cursor - 1);
+ if (ch > max || ch < min) {
+ return false;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+
+function BaseStemmer$in_range_b$LBaseStemmer$II($this, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if ($this.cursor <= $this.limit_backward) {
+ return false;
+ }
+ ch = $this.current.charCodeAt($this.cursor - 1);
+ if (ch > max || ch < min) {
+ return false;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+BaseStemmer.in_range_b$LBaseStemmer$II = BaseStemmer$in_range_b$LBaseStemmer$II;
+
+BaseStemmer.prototype.out_range$II = function (min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if (this.cursor >= this.limit) {
+ return false;
+ }
+ ch = this.current.charCodeAt(this.cursor);
+ if (! (ch > max || ch < min)) {
+ return false;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+
+function BaseStemmer$out_range$LBaseStemmer$II($this, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if ($this.cursor >= $this.limit) {
+ return false;
+ }
+ ch = $this.current.charCodeAt($this.cursor);
+ if (! (ch > max || ch < min)) {
+ return false;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+BaseStemmer.out_range$LBaseStemmer$II = BaseStemmer$out_range$LBaseStemmer$II;
+
+BaseStemmer.prototype.out_range_b$II = function (min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if (this.cursor <= this.limit_backward) {
+ return false;
+ }
+ ch = this.current.charCodeAt(this.cursor - 1);
+ if (! (ch > max || ch < min)) {
+ return false;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+
+function BaseStemmer$out_range_b$LBaseStemmer$II($this, min, max) {
+ var ch;
+ var $__jsx_postinc_t;
+ if ($this.cursor <= $this.limit_backward) {
+ return false;
+ }
+ ch = $this.current.charCodeAt($this.cursor - 1);
+ if (! (ch > max || ch < min)) {
+ return false;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
+ return true;
+};
+
+BaseStemmer.out_range_b$LBaseStemmer$II = BaseStemmer$out_range_b$LBaseStemmer$II;
+
+BaseStemmer.prototype.eq_s$IS = function (s_size, s) {
+ var cursor$0;
+ if (((this.limit - this.cursor) | 0) < s_size) {
+ return false;
+ }
+ if (this.current.slice(cursor$0 = this.cursor, ((cursor$0 + s_size) | 0)) !== s) {
+ return false;
+ }
+ this.cursor = (this.cursor + s_size) | 0;
+ return true;
+};
+
+
+function BaseStemmer$eq_s$LBaseStemmer$IS($this, s_size, s) {
+ var cursor$0;
+ if ((($this.limit - $this.cursor) | 0) < s_size) {
+ return false;
+ }
+ if ($this.current.slice(cursor$0 = $this.cursor, ((cursor$0 + s_size) | 0)) !== s) {
+ return false;
+ }
+ $this.cursor = ($this.cursor + s_size) | 0;
+ return true;
+};
+
+BaseStemmer.eq_s$LBaseStemmer$IS = BaseStemmer$eq_s$LBaseStemmer$IS;
+
+BaseStemmer.prototype.eq_s_b$IS = function (s_size, s) {
+ var cursor$0;
+ if (((this.cursor - this.limit_backward) | 0) < s_size) {
+ return false;
+ }
+ if (this.current.slice((((cursor$0 = this.cursor) - s_size) | 0), cursor$0) !== s) {
+ return false;
+ }
+ this.cursor = (this.cursor - s_size) | 0;
+ return true;
+};
+
+
+function BaseStemmer$eq_s_b$LBaseStemmer$IS($this, s_size, s) {
+ var cursor$0;
+ if ((($this.cursor - $this.limit_backward) | 0) < s_size) {
+ return false;
+ }
+ if ($this.current.slice((((cursor$0 = $this.cursor) - s_size) | 0), cursor$0) !== s) {
+ return false;
+ }
+ $this.cursor = ($this.cursor - s_size) | 0;
+ return true;
+};
+
+BaseStemmer.eq_s_b$LBaseStemmer$IS = BaseStemmer$eq_s_b$LBaseStemmer$IS;
+
+BaseStemmer.prototype.eq_v$S = function (s) {
+ return BaseStemmer$eq_s$LBaseStemmer$IS(this, s.length, s);
+};
+
+
+function BaseStemmer$eq_v$LBaseStemmer$S($this, s) {
+ return BaseStemmer$eq_s$LBaseStemmer$IS($this, s.length, s);
+};
+
+BaseStemmer.eq_v$LBaseStemmer$S = BaseStemmer$eq_v$LBaseStemmer$S;
+
+BaseStemmer.prototype.eq_v_b$S = function (s) {
+ return BaseStemmer$eq_s_b$LBaseStemmer$IS(this, s.length, s);
+};
+
+
+function BaseStemmer$eq_v_b$LBaseStemmer$S($this, s) {
+ return BaseStemmer$eq_s_b$LBaseStemmer$IS($this, s.length, s);
+};
+
+BaseStemmer.eq_v_b$LBaseStemmer$S = BaseStemmer$eq_v_b$LBaseStemmer$S;
+
+BaseStemmer.prototype.find_among$ALAmong$I = function (v, v_size) {
+ var i;
+ var j;
+ var c;
+ var l;
+ var common_i;
+ var common_j;
+ var first_key_inspected;
+ var k;
+ var diff;
+ var common;
+ var w;
+ var i2;
+ var res;
+ i = 0;
+ j = v_size;
+ c = this.cursor;
+ l = this.limit;
+ common_i = 0;
+ common_j = 0;
+ first_key_inspected = false;
+ while (true) {
+ k = i + (j - i >>> 1);
+ diff = 0;
+ common = (common_i < common_j ? common_i : common_j);
+ w = v[k];
+ for (i2 = common; i2 < w.s_size; i2++) {
+ if (c + common === l) {
+ diff = -1;
+ break;
+ }
+ diff = this.current.charCodeAt(c + common) - w.s.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;
+ }
+ }
+ while (true) {
+ w = v[i];
+ if (common_i >= w.s_size) {
+ this.cursor = (c + w.s_size | 0);
+ if (w.method == null) {
+ return w.result;
+ }
+ res = w.method(w.instance);
+ this.cursor = (c + w.s_size | 0);
+ if (res) {
+ return w.result;
+ }
+ }
+ i = w.substring_i;
+ if (i < 0) {
+ return 0;
+ }
+ }
+ return -1;
+};
+
+
+function BaseStemmer$find_among$LBaseStemmer$ALAmong$I($this, v, v_size) {
+ var i;
+ var j;
+ var c;
+ var l;
+ var common_i;
+ var common_j;
+ var first_key_inspected;
+ var k;
+ var diff;
+ var common;
+ var w;
+ var i2;
+ var res;
+ i = 0;
+ j = v_size;
+ c = $this.cursor;
+ l = $this.limit;
+ common_i = 0;
+ common_j = 0;
+ first_key_inspected = false;
+ while (true) {
+ k = i + (j - i >>> 1);
+ diff = 0;
+ common = (common_i < common_j ? common_i : common_j);
+ w = v[k];
+ for (i2 = common; i2 < w.s_size; i2++) {
+ if (c + common === l) {
+ diff = -1;
+ break;
+ }
+ diff = $this.current.charCodeAt(c + common) - w.s.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;
+ }
+ }
+ while (true) {
+ w = v[i];
+ if (common_i >= w.s_size) {
+ $this.cursor = (c + w.s_size | 0);
+ if (w.method == null) {
+ return w.result;
+ }
+ res = w.method(w.instance);
+ $this.cursor = (c + w.s_size | 0);
+ if (res) {
+ return w.result;
+ }
+ }
+ i = w.substring_i;
+ if (i < 0) {
+ return 0;
+ }
+ }
+ return -1;
+};
+
+BaseStemmer.find_among$LBaseStemmer$ALAmong$I = BaseStemmer$find_among$LBaseStemmer$ALAmong$I;
+
+BaseStemmer.prototype.find_among_b$ALAmong$I = function (v, v_size) {
+ var i;
+ var j;
+ var c;
+ var lb;
+ var common_i;
+ var common_j;
+ var first_key_inspected;
+ var k;
+ var diff;
+ var common;
+ var w;
+ var i2;
+ var res;
+ i = 0;
+ j = v_size;
+ c = this.cursor;
+ lb = this.limit_backward;
+ common_i = 0;
+ common_j = 0;
+ first_key_inspected = false;
+ while (true) {
+ k = i + (j - i >> 1);
+ diff = 0;
+ common = (common_i < common_j ? common_i : common_j);
+ w = v[k];
+ for (i2 = w.s_size - 1 - common; i2 >= 0; i2--) {
+ if (c - common === lb) {
+ diff = -1;
+ break;
+ }
+ diff = this.current.charCodeAt(c - 1 - common) - w.s.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;
+ }
+ }
+ while (true) {
+ w = v[i];
+ if (common_i >= w.s_size) {
+ this.cursor = (c - w.s_size | 0);
+ if (w.method == null) {
+ return w.result;
+ }
+ res = w.method(this);
+ this.cursor = (c - w.s_size | 0);
+ if (res) {
+ return w.result;
+ }
+ }
+ i = w.substring_i;
+ if (i < 0) {
+ return 0;
+ }
+ }
+ return -1;
+};
+
+
+function BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I($this, v, v_size) {
+ var i;
+ var j;
+ var c;
+ var lb;
+ var common_i;
+ var common_j;
+ var first_key_inspected;
+ var k;
+ var diff;
+ var common;
+ var w;
+ var i2;
+ var res;
+ i = 0;
+ j = v_size;
+ c = $this.cursor;
+ lb = $this.limit_backward;
+ common_i = 0;
+ common_j = 0;
+ first_key_inspected = false;
+ while (true) {
+ k = i + (j - i >> 1);
+ diff = 0;
+ common = (common_i < common_j ? common_i : common_j);
+ w = v[k];
+ for (i2 = w.s_size - 1 - common; i2 >= 0; i2--) {
+ if (c - common === lb) {
+ diff = -1;
+ break;
+ }
+ diff = $this.current.charCodeAt(c - 1 - common) - w.s.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;
+ }
+ }
+ while (true) {
+ w = v[i];
+ if (common_i >= w.s_size) {
+ $this.cursor = (c - w.s_size | 0);
+ if (w.method == null) {
+ return w.result;
+ }
+ res = w.method($this);
+ $this.cursor = (c - w.s_size | 0);
+ if (res) {
+ return w.result;
+ }
+ }
+ i = w.substring_i;
+ if (i < 0) {
+ return 0;
+ }
+ }
+ return -1;
+};
+
+BaseStemmer.find_among_b$LBaseStemmer$ALAmong$I = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I;
+
+BaseStemmer.prototype.replace_s$IIS = function (c_bra, c_ket, s) {
+ var adjustment;
+ adjustment = ((s.length - (((c_ket - c_bra) | 0))) | 0);
+ this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
+ this.limit = (this.limit + adjustment) | 0;
+ if (this.cursor >= c_ket) {
+ this.cursor = (this.cursor + adjustment) | 0;
+ } else if (this.cursor > c_bra) {
+ this.cursor = c_bra;
+ }
+ return (adjustment | 0);
+};
+
+
+function BaseStemmer$replace_s$LBaseStemmer$IIS($this, c_bra, c_ket, s) {
+ var adjustment;
+ adjustment = ((s.length - (((c_ket - c_bra) | 0))) | 0);
+ $this.current = $this.current.slice(0, c_bra) + s + $this.current.slice(c_ket);
+ $this.limit = ($this.limit + adjustment) | 0;
+ if ($this.cursor >= c_ket) {
+ $this.cursor = ($this.cursor + adjustment) | 0;
+ } else if ($this.cursor > c_bra) {
+ $this.cursor = c_bra;
+ }
+ return (adjustment | 0);
+};
+
+BaseStemmer.replace_s$LBaseStemmer$IIS = BaseStemmer$replace_s$LBaseStemmer$IIS;
+
+BaseStemmer.prototype.slice_check$ = function () {
+ var bra$0;
+ var ket$0;
+ var limit$0;
+ return ((bra$0 = this.bra) < 0 || bra$0 > (ket$0 = this.ket) || ket$0 > (limit$0 = this.limit) || limit$0 > this.current.length ? false : true);
+};
+
+
+function BaseStemmer$slice_check$LBaseStemmer$($this) {
+ var bra$0;
+ var ket$0;
+ var limit$0;
+ return ((bra$0 = $this.bra) < 0 || bra$0 > (ket$0 = $this.ket) || ket$0 > (limit$0 = $this.limit) || limit$0 > $this.current.length ? false : true);
+};
+
+BaseStemmer.slice_check$LBaseStemmer$ = BaseStemmer$slice_check$LBaseStemmer$;
+
+BaseStemmer.prototype.slice_from$S = function (s) {
+ var result;
+ var bra$0;
+ var ket$0;
+ var limit$0;
+ result = false;
+ if ((bra$0 = this.bra) < 0 || bra$0 > (ket$0 = this.ket) || ket$0 > (limit$0 = this.limit) || limit$0 > this.current.length ? false : true) {
+ BaseStemmer$replace_s$LBaseStemmer$IIS(this, this.bra, this.ket, s);
+ result = true;
+ }
+ return result;
+};
+
+
+function BaseStemmer$slice_from$LBaseStemmer$S($this, s) {
+ var result;
+ var bra$0;
+ var ket$0;
+ var limit$0;
+ result = false;
+ if ((bra$0 = $this.bra) < 0 || bra$0 > (ket$0 = $this.ket) || ket$0 > (limit$0 = $this.limit) || limit$0 > $this.current.length ? false : true) {
+ BaseStemmer$replace_s$LBaseStemmer$IIS($this, $this.bra, $this.ket, s);
+ result = true;
+ }
+ return result;
+};
+
+BaseStemmer.slice_from$LBaseStemmer$S = BaseStemmer$slice_from$LBaseStemmer$S;
+
+BaseStemmer.prototype.slice_del$ = function () {
+ return BaseStemmer$slice_from$LBaseStemmer$S(this, "");
+};
+
+
+function BaseStemmer$slice_del$LBaseStemmer$($this) {
+ return BaseStemmer$slice_from$LBaseStemmer$S($this, "");
+};
+
+BaseStemmer.slice_del$LBaseStemmer$ = BaseStemmer$slice_del$LBaseStemmer$;
+
+BaseStemmer.prototype.insert$IIS = function (c_bra, c_ket, s) {
+ var adjustment;
+ adjustment = BaseStemmer$replace_s$LBaseStemmer$IIS(this, c_bra, c_ket, s);
+ if (c_bra <= this.bra) {
+ this.bra = (this.bra + adjustment) | 0;
+ }
+ if (c_bra <= this.ket) {
+ this.ket = (this.ket + adjustment) | 0;
+ }
+};
+
+
+function BaseStemmer$insert$LBaseStemmer$IIS($this, c_bra, c_ket, s) {
+ var adjustment;
+ adjustment = BaseStemmer$replace_s$LBaseStemmer$IIS($this, c_bra, c_ket, s);
+ if (c_bra <= $this.bra) {
+ $this.bra = ($this.bra + adjustment) | 0;
+ }
+ if (c_bra <= $this.ket) {
+ $this.ket = ($this.ket + adjustment) | 0;
+ }
+};
+
+BaseStemmer.insert$LBaseStemmer$IIS = BaseStemmer$insert$LBaseStemmer$IIS;
+
+BaseStemmer.prototype.slice_to$S = function (s) {
+ var result;
+ var bra$0;
+ var ket$0;
+ var limit$0;
+ result = '';
+ if ((bra$0 = this.bra) < 0 || bra$0 > (ket$0 = this.ket) || ket$0 > (limit$0 = this.limit) || limit$0 > this.current.length ? false : true) {
+ result = this.current.slice(this.bra, this.ket);
+ }
+ return result;
+};
+
+
+function BaseStemmer$slice_to$LBaseStemmer$S($this, s) {
+ var result;
+ var bra$0;
+ var ket$0;
+ var limit$0;
+ result = '';
+ if ((bra$0 = $this.bra) < 0 || bra$0 > (ket$0 = $this.ket) || ket$0 > (limit$0 = $this.limit) || limit$0 > $this.current.length ? false : true) {
+ result = $this.current.slice($this.bra, $this.ket);
+ }
+ return result;
+};
+
+BaseStemmer.slice_to$LBaseStemmer$S = BaseStemmer$slice_to$LBaseStemmer$S;
+
+BaseStemmer.prototype.assign_to$S = function (s) {
+ return this.current.slice(0, this.limit);
+};
+
+
+function BaseStemmer$assign_to$LBaseStemmer$S($this, s) {
+ return $this.current.slice(0, $this.limit);
+};
+
+BaseStemmer.assign_to$LBaseStemmer$S = BaseStemmer$assign_to$LBaseStemmer$S;
+
+BaseStemmer.prototype.stem$ = function () {
+ return false;
+};
+
+
+BaseStemmer.prototype.stemWord$S = function (word) {
+ var result;
+ var current$0;
+ var cursor$0;
+ var limit$0;
+ result = this.cache['.' + word];
+ if (result == null) {
+ current$0 = this.current = word;
+ cursor$0 = this.cursor = 0;
+ limit$0 = this.limit = current$0.length;
+ this.limit_backward = 0;
+ this.bra = cursor$0;
+ this.ket = limit$0;
+ this.stem$();
+ result = this.current;
+ this.cache['.' + word] = result;
+ }
+ return result;
+};
+
+BaseStemmer.prototype.stemWord = BaseStemmer.prototype.stemWord$S;
+
+BaseStemmer.prototype.stemWords$AS = function (words) {
+ var results;
+ var i;
+ var word;
+ var result;
+ var current$0;
+ var cursor$0;
+ var limit$0;
+ results = [ ];
+ for (i = 0; i < words.length; i++) {
+ word = words[i];
+ result = this.cache['.' + word];
+ if (result == null) {
+ current$0 = this.current = word;
+ cursor$0 = this.cursor = 0;
+ limit$0 = this.limit = current$0.length;
+ this.limit_backward = 0;
+ this.bra = cursor$0;
+ this.ket = limit$0;
+ this.stem$();
+ result = this.current;
+ this.cache['.' + word] = result;
+ }
+ results.push(result);
+ }
+ return results;
+};
+
+BaseStemmer.prototype.stemWords = BaseStemmer.prototype.stemWords$AS;
+
+function GermanStemmer() {
+ BaseStemmer.call(this);
+ this.I_x = 0;
+ this.I_p2 = 0;
+ this.I_p1 = 0;
+};
+
+$__jsx_extend([GermanStemmer], BaseStemmer);
+GermanStemmer.prototype.copy_from$LGermanStemmer$ = function (other) {
+ this.I_x = other.I_x;
+ this.I_p2 = other.I_p2;
+ this.I_p1 = other.I_p1;
+ BaseStemmer$copy_from$LBaseStemmer$LBaseStemmer$(this, other);
+};
+
+GermanStemmer.prototype.copy_from = GermanStemmer.prototype.copy_from$LGermanStemmer$;
+
+GermanStemmer.prototype.r_prelude$ = function () {
+ var v_1;
+ var v_2;
+ var v_3;
+ var v_4;
+ var v_5;
+ var v_6;
+ var lab1;
+ var lab2;
+ var lab3;
+ var lab5;
+ var lab7;
+ var lab8;
+ var lab9;
+ var cursor$0;
+ var cursor$1;
+ var $__jsx_postinc_t;
+ v_1 = this.cursor;
+replab0:
+ while (true) {
+ v_2 = this.cursor;
+ lab1 = true;
+ lab1:
+ while (lab1 === true) {
+ lab1 = false;
+ lab2 = true;
+ lab2:
+ while (lab2 === true) {
+ lab2 = false;
+ v_3 = this.cursor;
+ lab3 = true;
+ lab3:
+ while (lab3 === true) {
+ lab3 = false;
+ this.bra = this.cursor;
+ if (! BaseStemmer$eq_s$LBaseStemmer$IS(this, 1, "\u00DF")) {
+ break lab3;
+ }
+ this.ket = this.cursor;
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "ss")) {
+ return false;
+ }
+ break lab2;
+ }
+ cursor$0 = this.cursor = v_3;
+ if (cursor$0 >= this.limit) {
+ break lab1;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+ continue replab0;
+ }
+ this.cursor = v_2;
+ break replab0;
+ }
+ this.cursor = v_1;
+replab4:
+ while (true) {
+ v_4 = this.cursor;
+ lab5 = true;
+ lab5:
+ while (lab5 === true) {
+ lab5 = false;
+ golab6:
+ while (true) {
+ v_5 = this.cursor;
+ lab7 = true;
+ lab7:
+ while (lab7 === true) {
+ lab7 = false;
+ if (! BaseStemmer$in_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
+ break lab7;
+ }
+ this.bra = this.cursor;
+ lab8 = true;
+ lab8:
+ while (lab8 === true) {
+ lab8 = false;
+ v_6 = this.cursor;
+ lab9 = true;
+ lab9:
+ while (lab9 === true) {
+ lab9 = false;
+ if (! BaseStemmer$eq_s$LBaseStemmer$IS(this, 1, "u")) {
+ break lab9;
+ }
+ this.ket = this.cursor;
+ if (! BaseStemmer$in_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
+ break lab9;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "U")) {
+ return false;
+ }
+ break lab8;
+ }
+ this.cursor = v_6;
+ if (! BaseStemmer$eq_s$LBaseStemmer$IS(this, 1, "y")) {
+ break lab7;
+ }
+ this.ket = this.cursor;
+ if (! BaseStemmer$in_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
+ break lab7;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "Y")) {
+ return false;
+ }
+ }
+ this.cursor = v_5;
+ break golab6;
+ }
+ cursor$1 = this.cursor = v_5;
+ if (cursor$1 >= this.limit) {
+ break lab5;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+ continue replab4;
+ }
+ this.cursor = v_4;
+ break replab4;
+ }
+ return true;
+};
+
+GermanStemmer.prototype.r_prelude = GermanStemmer.prototype.r_prelude$;
+
+function GermanStemmer$r_prelude$LGermanStemmer$($this) {
+ var v_1;
+ var v_2;
+ var v_3;
+ var v_4;
+ var v_5;
+ var v_6;
+ var lab1;
+ var lab2;
+ var lab3;
+ var lab5;
+ var lab7;
+ var lab8;
+ var lab9;
+ var cursor$0;
+ var cursor$1;
+ var $__jsx_postinc_t;
+ v_1 = $this.cursor;
+replab0:
+ while (true) {
+ v_2 = $this.cursor;
+ lab1 = true;
+ lab1:
+ while (lab1 === true) {
+ lab1 = false;
+ lab2 = true;
+ lab2:
+ while (lab2 === true) {
+ lab2 = false;
+ v_3 = $this.cursor;
+ lab3 = true;
+ lab3:
+ while (lab3 === true) {
+ lab3 = false;
+ $this.bra = $this.cursor;
+ if (! BaseStemmer$eq_s$LBaseStemmer$IS($this, 1, "\u00DF")) {
+ break lab3;
+ }
+ $this.ket = $this.cursor;
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "ss")) {
+ return false;
+ }
+ break lab2;
+ }
+ cursor$0 = $this.cursor = v_3;
+ if (cursor$0 >= $this.limit) {
+ break lab1;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+ continue replab0;
+ }
+ $this.cursor = v_2;
+ break replab0;
+ }
+ $this.cursor = v_1;
+replab4:
+ while (true) {
+ v_4 = $this.cursor;
+ lab5 = true;
+ lab5:
+ while (lab5 === true) {
+ lab5 = false;
+ golab6:
+ while (true) {
+ v_5 = $this.cursor;
+ lab7 = true;
+ lab7:
+ while (lab7 === true) {
+ lab7 = false;
+ if (! BaseStemmer$in_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
+ break lab7;
+ }
+ $this.bra = $this.cursor;
+ lab8 = true;
+ lab8:
+ while (lab8 === true) {
+ lab8 = false;
+ v_6 = $this.cursor;
+ lab9 = true;
+ lab9:
+ while (lab9 === true) {
+ lab9 = false;
+ if (! BaseStemmer$eq_s$LBaseStemmer$IS($this, 1, "u")) {
+ break lab9;
+ }
+ $this.ket = $this.cursor;
+ if (! BaseStemmer$in_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
+ break lab9;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "U")) {
+ return false;
+ }
+ break lab8;
+ }
+ $this.cursor = v_6;
+ if (! BaseStemmer$eq_s$LBaseStemmer$IS($this, 1, "y")) {
+ break lab7;
+ }
+ $this.ket = $this.cursor;
+ if (! BaseStemmer$in_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
+ break lab7;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "Y")) {
+ return false;
+ }
+ }
+ $this.cursor = v_5;
+ break golab6;
+ }
+ cursor$1 = $this.cursor = v_5;
+ if (cursor$1 >= $this.limit) {
+ break lab5;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+ continue replab4;
+ }
+ $this.cursor = v_4;
+ break replab4;
+ }
+ return true;
+};
+
+GermanStemmer.r_prelude$LGermanStemmer$ = GermanStemmer$r_prelude$LGermanStemmer$;
+
+GermanStemmer.prototype.r_mark_regions$ = function () {
+ var v_1;
+ var c;
+ var lab1;
+ var lab3;
+ var lab4;
+ var lab6;
+ var lab8;
+ var limit$0;
+ var cursor$0;
+ var cursor$1;
+ var $__jsx_postinc_t;
+ this.I_p1 = limit$0 = this.limit;
+ this.I_p2 = limit$0;
+ v_1 = cursor$0 = this.cursor;
+ c = (cursor$0 + 3 | 0);
+ if (0 > c || c > limit$0) {
+ return false;
+ }
+ cursor$1 = this.cursor = c;
+ this.I_x = cursor$1;
+ this.cursor = v_1;
+golab0:
+ while (true) {
+ lab1 = true;
+ lab1:
+ while (lab1 === true) {
+ lab1 = false;
+ if (! BaseStemmer$in_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
+ break lab1;
+ }
+ break golab0;
+ }
+ if (this.cursor >= this.limit) {
+ return false;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+golab2:
+ while (true) {
+ lab3 = true;
+ lab3:
+ while (lab3 === true) {
+ lab3 = false;
+ if (! BaseStemmer$out_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
+ break lab3;
+ }
+ break golab2;
+ }
+ if (this.cursor >= this.limit) {
+ return false;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+ this.I_p1 = this.cursor;
+ lab4 = true;
+lab4:
+ while (lab4 === true) {
+ lab4 = false;
+ if (! (this.I_p1 < this.I_x)) {
+ break lab4;
+ }
+ this.I_p1 = this.I_x;
+ }
+golab5:
+ while (true) {
+ lab6 = true;
+ lab6:
+ while (lab6 === true) {
+ lab6 = false;
+ if (! BaseStemmer$in_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
+ break lab6;
+ }
+ break golab5;
+ }
+ if (this.cursor >= this.limit) {
+ return false;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+golab7:
+ while (true) {
+ lab8 = true;
+ lab8:
+ while (lab8 === true) {
+ lab8 = false;
+ if (! BaseStemmer$out_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
+ break lab8;
+ }
+ break golab7;
+ }
+ if (this.cursor >= this.limit) {
+ return false;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+ this.I_p2 = this.cursor;
+ return true;
+};
+
+GermanStemmer.prototype.r_mark_regions = GermanStemmer.prototype.r_mark_regions$;
+
+function GermanStemmer$r_mark_regions$LGermanStemmer$($this) {
+ var v_1;
+ var c;
+ var lab1;
+ var lab3;
+ var lab4;
+ var lab6;
+ var lab8;
+ var limit$0;
+ var cursor$0;
+ var cursor$1;
+ var $__jsx_postinc_t;
+ $this.I_p1 = limit$0 = $this.limit;
+ $this.I_p2 = limit$0;
+ v_1 = cursor$0 = $this.cursor;
+ c = (cursor$0 + 3 | 0);
+ if (0 > c || c > limit$0) {
+ return false;
+ }
+ cursor$1 = $this.cursor = c;
+ $this.I_x = cursor$1;
+ $this.cursor = v_1;
+golab0:
+ while (true) {
+ lab1 = true;
+ lab1:
+ while (lab1 === true) {
+ lab1 = false;
+ if (! BaseStemmer$in_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
+ break lab1;
+ }
+ break golab0;
+ }
+ if ($this.cursor >= $this.limit) {
+ return false;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+golab2:
+ while (true) {
+ lab3 = true;
+ lab3:
+ while (lab3 === true) {
+ lab3 = false;
+ if (! BaseStemmer$out_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
+ break lab3;
+ }
+ break golab2;
+ }
+ if ($this.cursor >= $this.limit) {
+ return false;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+ $this.I_p1 = $this.cursor;
+ lab4 = true;
+lab4:
+ while (lab4 === true) {
+ lab4 = false;
+ if (! ($this.I_p1 < $this.I_x)) {
+ break lab4;
+ }
+ $this.I_p1 = $this.I_x;
+ }
+golab5:
+ while (true) {
+ lab6 = true;
+ lab6:
+ while (lab6 === true) {
+ lab6 = false;
+ if (! BaseStemmer$in_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
+ break lab6;
+ }
+ break golab5;
+ }
+ if ($this.cursor >= $this.limit) {
+ return false;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+golab7:
+ while (true) {
+ lab8 = true;
+ lab8:
+ while (lab8 === true) {
+ lab8 = false;
+ if (! BaseStemmer$out_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
+ break lab8;
+ }
+ break golab7;
+ }
+ if ($this.cursor >= $this.limit) {
+ return false;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ }
+ $this.I_p2 = $this.cursor;
+ return true;
+};
+
+GermanStemmer.r_mark_regions$LGermanStemmer$ = GermanStemmer$r_mark_regions$LGermanStemmer$;
+
+GermanStemmer.prototype.r_postlude$ = function () {
+ var among_var;
+ var v_1;
+ var lab1;
+ var $__jsx_postinc_t;
+replab0:
+ while (true) {
+ v_1 = this.cursor;
+ lab1 = true;
+ lab1:
+ while (lab1 === true) {
+ lab1 = false;
+ this.bra = this.cursor;
+ among_var = BaseStemmer$find_among$LBaseStemmer$ALAmong$I(this, GermanStemmer.a_0, 6);
+ if (among_var === 0) {
+ break lab1;
+ }
+ this.ket = this.cursor;
+ switch (among_var) {
+ case 0:
+ break lab1;
+ case 1:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "y")) {
+ return false;
+ }
+ break;
+ case 2:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "u")) {
+ return false;
+ }
+ break;
+ case 3:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "a")) {
+ return false;
+ }
+ break;
+ case 4:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "o")) {
+ return false;
+ }
+ break;
+ case 5:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "u")) {
+ return false;
+ }
+ break;
+ case 6:
+ if (this.cursor >= this.limit) {
+ break lab1;
+ }
+ ($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ break;
+ }
+ continue replab0;
+ }
+ this.cursor = v_1;
+ break replab0;
+ }
+ return true;
+};
+
+GermanStemmer.prototype.r_postlude = GermanStemmer.prototype.r_postlude$;
+
+function GermanStemmer$r_postlude$LGermanStemmer$($this) {
+ var among_var;
+ var v_1;
+ var lab1;
+ var $__jsx_postinc_t;
+replab0:
+ while (true) {
+ v_1 = $this.cursor;
+ lab1 = true;
+ lab1:
+ while (lab1 === true) {
+ lab1 = false;
+ $this.bra = $this.cursor;
+ among_var = BaseStemmer$find_among$LBaseStemmer$ALAmong$I($this, GermanStemmer.a_0, 6);
+ if (among_var === 0) {
+ break lab1;
+ }
+ $this.ket = $this.cursor;
+ switch (among_var) {
+ case 0:
+ break lab1;
+ case 1:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "y")) {
+ return false;
+ }
+ break;
+ case 2:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "u")) {
+ return false;
+ }
+ break;
+ case 3:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "a")) {
+ return false;
+ }
+ break;
+ case 4:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "o")) {
+ return false;
+ }
+ break;
+ case 5:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "u")) {
+ return false;
+ }
+ break;
+ case 6:
+ if ($this.cursor >= $this.limit) {
+ break lab1;
+ }
+ ($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
+ break;
+ }
+ continue replab0;
+ }
+ $this.cursor = v_1;
+ break replab0;
+ }
+ return true;
+};
+
+GermanStemmer.r_postlude$LGermanStemmer$ = GermanStemmer$r_postlude$LGermanStemmer$;
+
+GermanStemmer.prototype.r_R1$ = function () {
+ return (! (this.I_p1 <= this.cursor) ? false : true);
+};
+
+GermanStemmer.prototype.r_R1 = GermanStemmer.prototype.r_R1$;
+
+function GermanStemmer$r_R1$LGermanStemmer$($this) {
+ return (! ($this.I_p1 <= $this.cursor) ? false : true);
+};
+
+GermanStemmer.r_R1$LGermanStemmer$ = GermanStemmer$r_R1$LGermanStemmer$;
+
+GermanStemmer.prototype.r_R2$ = function () {
+ return (! (this.I_p2 <= this.cursor) ? false : true);
+};
+
+GermanStemmer.prototype.r_R2 = GermanStemmer.prototype.r_R2$;
+
+function GermanStemmer$r_R2$LGermanStemmer$($this) {
+ return (! ($this.I_p2 <= $this.cursor) ? false : true);
+};
+
+GermanStemmer.r_R2$LGermanStemmer$ = GermanStemmer$r_R2$LGermanStemmer$;
+
+GermanStemmer.prototype.r_standard_suffix$ = function () {
+ var among_var;
+ var v_1;
+ var v_2;
+ var v_3;
+ var v_4;
+ var v_5;
+ var v_6;
+ var v_7;
+ var v_8;
+ var v_9;
+ var v_10;
+ var lab0;
+ var lab1;
+ var lab2;
+ var c;
+ var lab3;
+ var lab4;
+ var lab5;
+ var lab6;
+ var lab7;
+ var lab8;
+ var lab9;
+ var lab10;
+ var cursor$0;
+ var cursor$1;
+ var limit$0;
+ var cursor$2;
+ var cursor$3;
+ var cursor$4;
+ var cursor$5;
+ var cursor$6;
+ var cursor$7;
+ var limit$1;
+ var cursor$8;
+ v_1 = ((this.limit - this.cursor) | 0);
+ lab0 = true;
+lab0:
+ while (lab0 === true) {
+ lab0 = false;
+ this.ket = this.cursor;
+ among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I(this, GermanStemmer.a_1, 7);
+ if (among_var === 0) {
+ break lab0;
+ }
+ this.bra = cursor$0 = this.cursor;
+ if (! (! (this.I_p1 <= cursor$0) ? false : true)) {
+ break lab0;
+ }
+ switch (among_var) {
+ case 0:
+ break lab0;
+ case 1:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ break;
+ case 2:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ v_2 = ((this.limit - this.cursor) | 0);
+ lab1 = true;
+ lab1:
+ while (lab1 === true) {
+ lab1 = false;
+ this.ket = this.cursor;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 1, "s")) {
+ this.cursor = ((this.limit - v_2) | 0);
+ break lab1;
+ }
+ this.bra = this.cursor;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 3, "nis")) {
+ this.cursor = ((this.limit - v_2) | 0);
+ break lab1;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ }
+ break;
+ case 3:
+ if (! BaseStemmer$in_grouping_b$LBaseStemmer$AIII(this, GermanStemmer.g_s_ending, 98, 116)) {
+ break lab0;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ break;
+ }
+ }
+ cursor$2 = this.cursor = (((limit$0 = this.limit) - v_1) | 0);
+ v_3 = ((limit$0 - cursor$2) | 0);
+ lab2 = true;
+lab2:
+ while (lab2 === true) {
+ lab2 = false;
+ this.ket = this.cursor;
+ among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I(this, GermanStemmer.a_2, 4);
+ if (among_var === 0) {
+ break lab2;
+ }
+ this.bra = cursor$1 = this.cursor;
+ if (! (! (this.I_p1 <= cursor$1) ? false : true)) {
+ break lab2;
+ }
+ switch (among_var) {
+ case 0:
+ break lab2;
+ case 1:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ break;
+ case 2:
+ if (! BaseStemmer$in_grouping_b$LBaseStemmer$AIII(this, GermanStemmer.g_st_ending, 98, 116)) {
+ break lab2;
+ }
+ c = (this.cursor - 3 | 0);
+ if (this.limit_backward > c || c > this.limit) {
+ break lab2;
+ }
+ this.cursor = c;
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ break;
+ }
+ }
+ cursor$8 = this.cursor = (((limit$1 = this.limit) - v_3) | 0);
+ v_4 = ((limit$1 - cursor$8) | 0);
+ lab3 = true;
+lab3:
+ while (lab3 === true) {
+ lab3 = false;
+ this.ket = this.cursor;
+ among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I(this, GermanStemmer.a_4, 8);
+ if (among_var === 0) {
+ break lab3;
+ }
+ this.bra = cursor$3 = this.cursor;
+ if (! (! (this.I_p2 <= cursor$3) ? false : true)) {
+ break lab3;
+ }
+ switch (among_var) {
+ case 0:
+ break lab3;
+ case 1:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ v_5 = ((this.limit - this.cursor) | 0);
+ lab4 = true;
+ lab4:
+ while (lab4 === true) {
+ lab4 = false;
+ this.ket = this.cursor;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 2, "ig")) {
+ this.cursor = ((this.limit - v_5) | 0);
+ break lab4;
+ }
+ this.bra = cursor$4 = this.cursor;
+ v_6 = ((this.limit - cursor$4) | 0);
+ lab5 = true;
+ lab5:
+ while (lab5 === true) {
+ lab5 = false;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 1, "e")) {
+ break lab5;
+ }
+ this.cursor = ((this.limit - v_5) | 0);
+ break lab4;
+ }
+ cursor$5 = this.cursor = ((this.limit - v_6) | 0);
+ if (! (! (this.I_p2 <= cursor$5) ? false : true)) {
+ this.cursor = ((this.limit - v_5) | 0);
+ break lab4;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ }
+ break;
+ case 2:
+ v_7 = ((this.limit - this.cursor) | 0);
+ lab6 = true;
+ lab6:
+ while (lab6 === true) {
+ lab6 = false;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 1, "e")) {
+ break lab6;
+ }
+ break lab3;
+ }
+ this.cursor = ((this.limit - v_7) | 0);
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ break;
+ case 3:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ v_8 = ((this.limit - this.cursor) | 0);
+ lab7 = true;
+ lab7:
+ while (lab7 === true) {
+ lab7 = false;
+ this.ket = this.cursor;
+ lab8 = true;
+ lab8:
+ while (lab8 === true) {
+ lab8 = false;
+ v_9 = ((this.limit - this.cursor) | 0);
+ lab9 = true;
+ lab9:
+ while (lab9 === true) {
+ lab9 = false;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 2, "er")) {
+ break lab9;
+ }
+ break lab8;
+ }
+ this.cursor = ((this.limit - v_9) | 0);
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 2, "en")) {
+ this.cursor = ((this.limit - v_8) | 0);
+ break lab7;
+ }
+ }
+ this.bra = cursor$6 = this.cursor;
+ if (! (! (this.I_p1 <= cursor$6) ? false : true)) {
+ this.cursor = ((this.limit - v_8) | 0);
+ break lab7;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ }
+ break;
+ case 4:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ v_10 = ((this.limit - this.cursor) | 0);
+ lab10 = true;
+ lab10:
+ while (lab10 === true) {
+ lab10 = false;
+ this.ket = this.cursor;
+ among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I(this, GermanStemmer.a_3, 2);
+ if (among_var === 0) {
+ this.cursor = ((this.limit - v_10) | 0);
+ break lab10;
+ }
+ this.bra = cursor$7 = this.cursor;
+ if (! (! (this.I_p2 <= cursor$7) ? false : true)) {
+ this.cursor = ((this.limit - v_10) | 0);
+ break lab10;
+ }
+ switch (among_var) {
+ case 0:
+ this.cursor = ((this.limit - v_10) | 0);
+ break lab10;
+ case 1:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
+ return false;
+ }
+ break;
+ }
+ }
+ break;
+ }
+ }
+ this.cursor = ((this.limit - v_4) | 0);
+ return true;
+};
+
+GermanStemmer.prototype.r_standard_suffix = GermanStemmer.prototype.r_standard_suffix$;
+
+function GermanStemmer$r_standard_suffix$LGermanStemmer$($this) {
+ var among_var;
+ var v_1;
+ var v_2;
+ var v_3;
+ var v_4;
+ var v_5;
+ var v_6;
+ var v_7;
+ var v_8;
+ var v_9;
+ var v_10;
+ var lab0;
+ var lab1;
+ var lab2;
+ var c;
+ var lab3;
+ var lab4;
+ var lab5;
+ var lab6;
+ var lab7;
+ var lab8;
+ var lab9;
+ var lab10;
+ var cursor$0;
+ var cursor$1;
+ var limit$0;
+ var cursor$2;
+ var cursor$3;
+ var cursor$4;
+ var cursor$5;
+ var cursor$6;
+ var cursor$7;
+ var limit$1;
+ var cursor$8;
+ v_1 = (($this.limit - $this.cursor) | 0);
+ lab0 = true;
+lab0:
+ while (lab0 === true) {
+ lab0 = false;
+ $this.ket = $this.cursor;
+ among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I($this, GermanStemmer.a_1, 7);
+ if (among_var === 0) {
+ break lab0;
+ }
+ $this.bra = cursor$0 = $this.cursor;
+ if (! (! ($this.I_p1 <= cursor$0) ? false : true)) {
+ break lab0;
+ }
+ switch (among_var) {
+ case 0:
+ break lab0;
+ case 1:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ break;
+ case 2:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ v_2 = (($this.limit - $this.cursor) | 0);
+ lab1 = true;
+ lab1:
+ while (lab1 === true) {
+ lab1 = false;
+ $this.ket = $this.cursor;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 1, "s")) {
+ $this.cursor = (($this.limit - v_2) | 0);
+ break lab1;
+ }
+ $this.bra = $this.cursor;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 3, "nis")) {
+ $this.cursor = (($this.limit - v_2) | 0);
+ break lab1;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ }
+ break;
+ case 3:
+ if (! BaseStemmer$in_grouping_b$LBaseStemmer$AIII($this, GermanStemmer.g_s_ending, 98, 116)) {
+ break lab0;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ break;
+ }
+ }
+ cursor$2 = $this.cursor = (((limit$0 = $this.limit) - v_1) | 0);
+ v_3 = ((limit$0 - cursor$2) | 0);
+ lab2 = true;
+lab2:
+ while (lab2 === true) {
+ lab2 = false;
+ $this.ket = $this.cursor;
+ among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I($this, GermanStemmer.a_2, 4);
+ if (among_var === 0) {
+ break lab2;
+ }
+ $this.bra = cursor$1 = $this.cursor;
+ if (! (! ($this.I_p1 <= cursor$1) ? false : true)) {
+ break lab2;
+ }
+ switch (among_var) {
+ case 0:
+ break lab2;
+ case 1:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ break;
+ case 2:
+ if (! BaseStemmer$in_grouping_b$LBaseStemmer$AIII($this, GermanStemmer.g_st_ending, 98, 116)) {
+ break lab2;
+ }
+ c = ($this.cursor - 3 | 0);
+ if ($this.limit_backward > c || c > $this.limit) {
+ break lab2;
+ }
+ $this.cursor = c;
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ break;
+ }
+ }
+ cursor$8 = $this.cursor = (((limit$1 = $this.limit) - v_3) | 0);
+ v_4 = ((limit$1 - cursor$8) | 0);
+ lab3 = true;
+lab3:
+ while (lab3 === true) {
+ lab3 = false;
+ $this.ket = $this.cursor;
+ among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I($this, GermanStemmer.a_4, 8);
+ if (among_var === 0) {
+ break lab3;
+ }
+ $this.bra = cursor$3 = $this.cursor;
+ if (! (! ($this.I_p2 <= cursor$3) ? false : true)) {
+ break lab3;
+ }
+ switch (among_var) {
+ case 0:
+ break lab3;
+ case 1:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ v_5 = (($this.limit - $this.cursor) | 0);
+ lab4 = true;
+ lab4:
+ while (lab4 === true) {
+ lab4 = false;
+ $this.ket = $this.cursor;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 2, "ig")) {
+ $this.cursor = (($this.limit - v_5) | 0);
+ break lab4;
+ }
+ $this.bra = cursor$4 = $this.cursor;
+ v_6 = (($this.limit - cursor$4) | 0);
+ lab5 = true;
+ lab5:
+ while (lab5 === true) {
+ lab5 = false;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 1, "e")) {
+ break lab5;
+ }
+ $this.cursor = (($this.limit - v_5) | 0);
+ break lab4;
+ }
+ cursor$5 = $this.cursor = (($this.limit - v_6) | 0);
+ if (! (! ($this.I_p2 <= cursor$5) ? false : true)) {
+ $this.cursor = (($this.limit - v_5) | 0);
+ break lab4;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ }
+ break;
+ case 2:
+ v_7 = (($this.limit - $this.cursor) | 0);
+ lab6 = true;
+ lab6:
+ while (lab6 === true) {
+ lab6 = false;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 1, "e")) {
+ break lab6;
+ }
+ break lab3;
+ }
+ $this.cursor = (($this.limit - v_7) | 0);
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ break;
+ case 3:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ v_8 = (($this.limit - $this.cursor) | 0);
+ lab7 = true;
+ lab7:
+ while (lab7 === true) {
+ lab7 = false;
+ $this.ket = $this.cursor;
+ lab8 = true;
+ lab8:
+ while (lab8 === true) {
+ lab8 = false;
+ v_9 = (($this.limit - $this.cursor) | 0);
+ lab9 = true;
+ lab9:
+ while (lab9 === true) {
+ lab9 = false;
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 2, "er")) {
+ break lab9;
+ }
+ break lab8;
+ }
+ $this.cursor = (($this.limit - v_9) | 0);
+ if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 2, "en")) {
+ $this.cursor = (($this.limit - v_8) | 0);
+ break lab7;
+ }
+ }
+ $this.bra = cursor$6 = $this.cursor;
+ if (! (! ($this.I_p1 <= cursor$6) ? false : true)) {
+ $this.cursor = (($this.limit - v_8) | 0);
+ break lab7;
+ }
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ }
+ break;
+ case 4:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ v_10 = (($this.limit - $this.cursor) | 0);
+ lab10 = true;
+ lab10:
+ while (lab10 === true) {
+ lab10 = false;
+ $this.ket = $this.cursor;
+ among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I($this, GermanStemmer.a_3, 2);
+ if (among_var === 0) {
+ $this.cursor = (($this.limit - v_10) | 0);
+ break lab10;
+ }
+ $this.bra = cursor$7 = $this.cursor;
+ if (! (! ($this.I_p2 <= cursor$7) ? false : true)) {
+ $this.cursor = (($this.limit - v_10) | 0);
+ break lab10;
+ }
+ switch (among_var) {
+ case 0:
+ $this.cursor = (($this.limit - v_10) | 0);
+ break lab10;
+ case 1:
+ if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
+ return false;
+ }
+ break;
+ }
+ }
+ break;
+ }
+ }
+ $this.cursor = (($this.limit - v_4) | 0);
+ return true;
+};
+
+GermanStemmer.r_standard_suffix$LGermanStemmer$ = GermanStemmer$r_standard_suffix$LGermanStemmer$;
+
+GermanStemmer.prototype.stem$ = function () {
+ var v_1;
+ var v_2;
+ var v_4;
+ var lab0;
+ var lab1;
+ var lab2;
+ var lab3;
+ var cursor$0;
+ var cursor$1;
+ var cursor$2;
+ v_1 = this.cursor;
+ lab0 = true;
+lab0:
+ while (lab0 === true) {
+ lab0 = false;
+ if (! GermanStemmer$r_prelude$LGermanStemmer$(this)) {
+ break lab0;
+ }
+ }
+ cursor$0 = this.cursor = v_1;
+ v_2 = cursor$0;
+ lab1 = true;
+lab1:
+ while (lab1 === true) {
+ lab1 = false;
+ if (! GermanStemmer$r_mark_regions$LGermanStemmer$(this)) {
+ break lab1;
+ }
+ }
+ cursor$1 = this.cursor = v_2;
+ this.limit_backward = cursor$1;
+ this.cursor = this.limit;
+ lab2 = true;
+lab2:
+ while (lab2 === true) {
+ lab2 = false;
+ if (! GermanStemmer$r_standard_suffix$LGermanStemmer$(this)) {
+ break lab2;
+ }
+ }
+ cursor$2 = this.cursor = this.limit_backward;
+ v_4 = cursor$2;
+ lab3 = true;
+lab3:
+ while (lab3 === true) {
+ lab3 = false;
+ if (! GermanStemmer$r_postlude$LGermanStemmer$(this)) {
+ break lab3;
+ }
+ }
+ this.cursor = v_4;
+ return true;
+};
+
+GermanStemmer.prototype.stem = GermanStemmer.prototype.stem$;
+
+GermanStemmer.prototype.equals$X = function (o) {
+ return o instanceof GermanStemmer;
+};
+
+GermanStemmer.prototype.equals = GermanStemmer.prototype.equals$X;
+
+function GermanStemmer$equals$LGermanStemmer$X($this, o) {
+ return o instanceof GermanStemmer;
+};
+
+GermanStemmer.equals$LGermanStemmer$X = GermanStemmer$equals$LGermanStemmer$X;
+
+GermanStemmer.prototype.hashCode$ = function () {
+ var classname;
+ var hash;
+ var i;
+ var char;
+ classname = "GermanStemmer";
+ hash = 0;
+ for (i = 0; i < classname.length; i++) {
+ char = classname.charCodeAt(i);
+ hash = (hash << 5) - hash + char;
+ hash = hash & hash;
+ }
+ return (hash | 0);
+};
+
+GermanStemmer.prototype.hashCode = GermanStemmer.prototype.hashCode$;
+
+function GermanStemmer$hashCode$LGermanStemmer$($this) {
+ var classname;
+ var hash;
+ var i;
+ var char;
+ classname = "GermanStemmer";
+ hash = 0;
+ for (i = 0; i < classname.length; i++) {
+ char = classname.charCodeAt(i);
+ hash = (hash << 5) - hash + char;
+ hash = hash & hash;
+ }
+ return (hash | 0);
+};
+
+GermanStemmer.hashCode$LGermanStemmer$ = GermanStemmer$hashCode$LGermanStemmer$;
+
+GermanStemmer.serialVersionUID = 1;
+$__jsx_lazy_init(GermanStemmer, "methodObject", function () {
+ return new GermanStemmer();
+});
+$__jsx_lazy_init(GermanStemmer, "a_0", function () {
+ return [ new Among("", -1, 6), new Among("U", 0, 2), new Among("Y", 0, 1), new Among("\u00E4", 0, 3), new Among("\u00F6", 0, 4), new Among("\u00FC", 0, 5) ];
+});
+$__jsx_lazy_init(GermanStemmer, "a_1", function () {
+ return [ new Among("e", -1, 2), new Among("em", -1, 1), new Among("en", -1, 2), new Among("ern", -1, 1), new Among("er", -1, 1), new Among("s", -1, 3), new Among("es", 5, 2) ];
+});
+$__jsx_lazy_init(GermanStemmer, "a_2", function () {
+ return [ new Among("en", -1, 1), new Among("er", -1, 1), new Among("st", -1, 2), new Among("est", 2, 1) ];
+});
+$__jsx_lazy_init(GermanStemmer, "a_3", function () {
+ return [ new Among("ig", -1, 1), new Among("lich", -1, 1) ];
+});
+$__jsx_lazy_init(GermanStemmer, "a_4", function () {
+ return [ new Among("end", -1, 1), new Among("ig", -1, 2), new Among("ung", -1, 1), new Among("lich", -1, 3), new Among("isch", -1, 2), new Among("ik", -1, 2), new Among("heit", -1, 3), new Among("keit", -1, 4) ];
+});
+GermanStemmer.g_v = [ 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 ];
+GermanStemmer.g_s_ending = [ 117, 30, 5 ];
+GermanStemmer.g_st_ending = [ 117, 30, 4 ];
+
+var $__jsx_classMap = {
+ "src/among.jsx": {
+ Among: Among,
+ Among$SII: Among,
+ Among$SIIF$LBaseStemmer$B$LBaseStemmer$: Among$0
+ },
+ "src/stemmer.jsx": {
+ Stemmer: Stemmer,
+ Stemmer$: Stemmer
+ },
+ "src/base-stemmer.jsx": {
+ BaseStemmer: BaseStemmer,
+ BaseStemmer$: BaseStemmer
+ },
+ "src/german-stemmer.jsx": {
+ GermanStemmer: GermanStemmer,
+ GermanStemmer$: GermanStemmer
+ }
+};
+
+
+})(JSX);
+
+var Among = JSX.require("src/among.jsx").Among;
+var Among$SII = JSX.require("src/among.jsx").Among$SII;
+var Stemmer = JSX.require("src/stemmer.jsx").Stemmer;
+var BaseStemmer = JSX.require("src/base-stemmer.jsx").BaseStemmer;
+var GermanStemmer = JSX.require("src/german-stemmer.jsx").GermanStemmer;
diff --git a/handouts-html/de/html/_static/alabaster.css b/handouts-html/de/html/_static/alabaster.css
new file mode 100644
index 0000000..0eddaeb
--- /dev/null
+++ b/handouts-html/de/html/_static/alabaster.css
@@ -0,0 +1,701 @@
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+ font-family: Georgia, serif;
+ font-size: 17px;
+ background-color: #fff;
+ color: #000;
+ margin: 0;
+ padding: 0;
+}
+
+
+div.document {
+ width: 940px;
+ margin: 30px auto 0 auto;
+}
+
+div.documentwrapper {
+ float: left;
+ width: 100%;
+}
+
+div.bodywrapper {
+ margin: 0 0 0 220px;
+}
+
+div.sphinxsidebar {
+ width: 220px;
+ font-size: 14px;
+ line-height: 1.5;
+}
+
+hr {
+ border: 1px solid #B1B4B6;
+}
+
+div.body {
+ background-color: #fff;
+ color: #3E4349;
+ padding: 0 30px 0 30px;
+}
+
+div.body > .section {
+ text-align: left;
+}
+
+div.footer {
+ width: 940px;
+ margin: 20px auto 30px auto;
+ font-size: 14px;
+ color: #888;
+ text-align: right;
+}
+
+div.footer a {
+ color: #888;
+}
+
+p.caption {
+ font-family: inherit;
+ font-size: inherit;
+}
+
+
+div.relations {
+ display: none;
+}
+
+
+div.sphinxsidebar a {
+ color: #444;
+ text-decoration: none;
+ border-bottom: 1px dotted #999;
+}
+
+div.sphinxsidebar a:hover {
+ border-bottom: 1px solid #999;
+}
+
+div.sphinxsidebarwrapper {
+ padding: 18px 10px;
+}
+
+div.sphinxsidebarwrapper p.logo {
+ padding: 0;
+ margin: -10px 0 0 0px;
+ text-align: center;
+}
+
+div.sphinxsidebarwrapper h1.logo {
+ margin-top: -10px;
+ text-align: center;
+ margin-bottom: 5px;
+ text-align: left;
+}
+
+div.sphinxsidebarwrapper h1.logo-name {
+ margin-top: 0px;
+}
+
+div.sphinxsidebarwrapper p.blurb {
+ margin-top: 0;
+ font-style: normal;
+}
+
+div.sphinxsidebar h3,
+div.sphinxsidebar h4 {
+ font-family: Georgia, serif;
+ color: #444;
+ font-size: 24px;
+ font-weight: normal;
+ margin: 0 0 5px 0;
+ padding: 0;
+}
+
+div.sphinxsidebar h4 {
+ font-size: 20px;
+}
+
+div.sphinxsidebar h3 a {
+ color: #444;
+}
+
+div.sphinxsidebar p.logo a,
+div.sphinxsidebar h3 a,
+div.sphinxsidebar p.logo a:hover,
+div.sphinxsidebar h3 a:hover {
+ border: none;
+}
+
+div.sphinxsidebar p {
+ color: #555;
+ margin: 10px 0;
+}
+
+div.sphinxsidebar ul {
+ margin: 10px 0;
+ padding: 0;
+ color: #000;
+}
+
+div.sphinxsidebar ul li.toctree-l1 > a {
+ font-size: 120%;
+}
+
+div.sphinxsidebar ul li.toctree-l2 > a {
+ font-size: 110%;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #CCC;
+ font-family: Georgia, serif;
+ font-size: 1em;
+}
+
+div.sphinxsidebar hr {
+ border: none;
+ height: 1px;
+ color: #AAA;
+ background: #AAA;
+
+ text-align: left;
+ margin-left: 0;
+ width: 50%;
+}
+
+div.sphinxsidebar .badge {
+ border-bottom: none;
+}
+
+div.sphinxsidebar .badge:hover {
+ border-bottom: none;
+}
+
+/* To address an issue with donation coming after search */
+div.sphinxsidebar h3.donation {
+ margin-top: 10px;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+a {
+ color: #004B6B;
+ text-decoration: underline;
+}
+
+a:hover {
+ color: #6D4100;
+ text-decoration: underline;
+}
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+ font-family: Georgia, serif;
+ font-weight: normal;
+ margin: 30px 0px 10px 0px;
+ padding: 0;
+}
+
+div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
+div.body h2 { font-size: 180%; }
+div.body h3 { font-size: 150%; }
+div.body h4 { font-size: 130%; }
+div.body h5 { font-size: 100%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+ color: #DDD;
+ padding: 0 4px;
+ text-decoration: none;
+}
+
+a.headerlink:hover {
+ color: #444;
+ background: #EAEAEA;
+}
+
+div.body p, div.body dd, div.body li {
+ line-height: 1.4em;
+}
+
+div.admonition {
+ margin: 20px 0px;
+ padding: 10px 30px;
+ background-color: #EEE;
+ border: 1px solid #CCC;
+}
+
+div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
+ background-color: #FBFBFB;
+ border-bottom: 1px solid #fafafa;
+}
+
+div.admonition p.admonition-title {
+ font-family: Georgia, serif;
+ font-weight: normal;
+ font-size: 24px;
+ margin: 0 0 10px 0;
+ padding: 0;
+ line-height: 1;
+}
+
+div.admonition p.last {
+ margin-bottom: 0;
+}
+
+div.highlight {
+ background-color: #fff;
+}
+
+dt:target, .highlight {
+ background: #FAF3E8;
+}
+
+div.warning {
+ background-color: #FCC;
+ border: 1px solid #FAA;
+}
+
+div.danger {
+ background-color: #FCC;
+ border: 1px solid #FAA;
+ -moz-box-shadow: 2px 2px 4px #D52C2C;
+ -webkit-box-shadow: 2px 2px 4px #D52C2C;
+ box-shadow: 2px 2px 4px #D52C2C;
+}
+
+div.error {
+ background-color: #FCC;
+ border: 1px solid #FAA;
+ -moz-box-shadow: 2px 2px 4px #D52C2C;
+ -webkit-box-shadow: 2px 2px 4px #D52C2C;
+ box-shadow: 2px 2px 4px #D52C2C;
+}
+
+div.caution {
+ background-color: #FCC;
+ border: 1px solid #FAA;
+}
+
+div.attention {
+ background-color: #FCC;
+ border: 1px solid #FAA;
+}
+
+div.important {
+ background-color: #EEE;
+ border: 1px solid #CCC;
+}
+
+div.note {
+ background-color: #EEE;
+ border: 1px solid #CCC;
+}
+
+div.tip {
+ background-color: #EEE;
+ border: 1px solid #CCC;
+}
+
+div.hint {
+ background-color: #EEE;
+ border: 1px solid #CCC;
+}
+
+div.seealso {
+ background-color: #EEE;
+ border: 1px solid #CCC;
+}
+
+div.topic {
+ background-color: #EEE;
+}
+
+p.admonition-title {
+ display: inline;
+}
+
+p.admonition-title:after {
+ content: ":";
+}
+
+pre, tt, code {
+ font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+ font-size: 0.9em;
+}
+
+.hll {
+ background-color: #FFC;
+ margin: 0 -12px;
+ padding: 0 12px;
+ display: block;
+}
+
+img.screenshot {
+}
+
+tt.descname, tt.descclassname, code.descname, code.descclassname {
+ font-size: 0.95em;
+}
+
+tt.descname, code.descname {
+ padding-right: 0.08em;
+}
+
+img.screenshot {
+ -moz-box-shadow: 2px 2px 4px #EEE;
+ -webkit-box-shadow: 2px 2px 4px #EEE;
+ box-shadow: 2px 2px 4px #EEE;
+}
+
+table.docutils {
+ border: 1px solid #888;
+ -moz-box-shadow: 2px 2px 4px #EEE;
+ -webkit-box-shadow: 2px 2px 4px #EEE;
+ box-shadow: 2px 2px 4px #EEE;
+}
+
+table.docutils td, table.docutils th {
+ border: 1px solid #888;
+ padding: 0.25em 0.7em;
+}
+
+table.field-list, table.footnote {
+ border: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+table.footnote {
+ margin: 15px 0;
+ width: 100%;
+ border: 1px solid #EEE;
+ background: #FDFDFD;
+ font-size: 0.9em;
+}
+
+table.footnote + table.footnote {
+ margin-top: -15px;
+ border-top: none;
+}
+
+table.field-list th {
+ padding: 0 0.8em 0 0;
+}
+
+table.field-list td {
+ padding: 0;
+}
+
+table.field-list p {
+ margin-bottom: 0.8em;
+}
+
+/* Cloned from
+ * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
+ */
+.field-name {
+ -moz-hyphens: manual;
+ -ms-hyphens: manual;
+ -webkit-hyphens: manual;
+ hyphens: manual;
+}
+
+table.footnote td.label {
+ width: .1px;
+ padding: 0.3em 0 0.3em 0.5em;
+}
+
+table.footnote td {
+ padding: 0.3em 0.5em;
+}
+
+dl {
+ margin: 0;
+ padding: 0;
+}
+
+dl dd {
+ margin-left: 30px;
+}
+
+blockquote {
+ margin: 0 0 0 30px;
+ padding: 0;
+}
+
+ul, ol {
+ /* Matches the 30px from the narrow-screen "li > ul" selector below */
+ margin: 10px 0 10px 30px;
+ padding: 0;
+}
+
+pre {
+ background: #EEE;
+ padding: 7px 30px;
+ margin: 15px 0px;
+ line-height: 1.3em;
+}
+
+div.viewcode-block:target {
+ background: #ffd;
+}
+
+dl pre, blockquote pre, li pre {
+ margin-left: 0;
+ padding-left: 30px;
+}
+
+tt, code {
+ background-color: #ecf0f3;
+ color: #222;
+ /* padding: 1px 2px; */
+}
+
+tt.xref, code.xref, a tt {
+ background-color: #FBFBFB;
+ border-bottom: 1px solid #fff;
+}
+
+a.reference {
+ text-decoration: none;
+ border-bottom: 1px dotted #004B6B;
+}
+
+/* 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;
+ vertical-align: top;
+ border-bottom: 1px dotted #004B6B;
+}
+
+a.footnote-reference:hover {
+ border-bottom: 1px solid #6D4100;
+}
+
+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) {
+
+ body {
+ margin: 0;
+ padding: 20px 30px;
+ }
+
+ div.documentwrapper {
+ float: none;
+ background: #fff;
+ }
+
+ div.sphinxsidebar {
+ display: block;
+ float: none;
+ width: 102.5%;
+ margin: 50px -30px -20px -30px;
+ padding: 10px 20px;
+ background: #333;
+ color: #FFF;
+ }
+
+ div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
+ div.sphinxsidebar h3 a {
+ color: #fff;
+ }
+
+ div.sphinxsidebar a {
+ color: #AAA;
+ }
+
+ div.sphinxsidebar p.logo {
+ display: none;
+ }
+
+ div.document {
+ width: 100%;
+ margin: 0;
+ }
+
+ div.footer {
+ display: none;
+ }
+
+ div.bodywrapper {
+ margin: 0;
+ }
+
+ div.body {
+ min-height: 0;
+ padding: 0;
+ }
+
+ .rtd_doc_footer {
+ display: none;
+ }
+
+ .document {
+ width: auto;
+ }
+
+ .footer {
+ width: auto;
+ }
+
+ .footer {
+ width: auto;
+ }
+
+ .github {
+ display: none;
+ }
+}
+
+
+/* misc. */
+
+.revsys-inline {
+ display: none!important;
+}
+
+/* Make nested-list/multi-paragraph items look better in Releases changelog
+ * pages. Without this, docutils' magical list fuckery causes inconsistent
+ * formatting between different release sub-lists.
+ */
+div#changelog > div.section > ul > li > p:only-child {
+ margin-bottom: 0;
+}
+
+/* Hide fugly table cell borders in ..bibliography:: directive output */
+table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
+ border: none;
+ /* Below needed in some edge cases; if not applied, bottom shadows appear */
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+
+/* relbar */
+
+.related {
+ line-height: 30px;
+ width: 100%;
+ font-size: 0.9rem;
+}
+
+.related.top {
+ border-bottom: 1px solid #EEE;
+ margin-bottom: 20px;
+}
+
+.related.bottom {
+ border-top: 1px solid #EEE;
+}
+
+.related ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+.related li {
+ display: inline;
+}
+
+nav#rellinks {
+ float: right;
+}
+
+nav#rellinks li+li:before {
+ content: "|";
+}
+
+nav#breadcrumbs li+li:before {
+ content: "\00BB";
+}
+
+/* Hide certain items when printing */
+@media print {
+ div.related {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/handouts-html/de/html/_static/basic.css b/handouts-html/de/html/_static/basic.css
new file mode 100644
index 0000000..0119285
--- /dev/null
+++ b/handouts-html/de/html/_static/basic.css
@@ -0,0 +1,768 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+ clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+ width: 100%;
+ font-size: 90%;
+}
+
+div.related h3 {
+ display: none;
+}
+
+div.related ul {
+ margin: 0;
+ padding: 0 0 0 10px;
+ list-style: none;
+}
+
+div.related li {
+ display: inline;
+}
+
+div.related li.right {
+ float: right;
+ margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+ padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+ float: left;
+ width: 230px;
+ margin-left: -100%;
+ font-size: 90%;
+ word-wrap: break-word;
+ overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+ list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+ margin-left: 20px;
+ list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+ margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #98dbcc;
+ font-family: sans-serif;
+ font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+ overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+ float: left;
+ width: 80%;
+ padding: 0.25em;
+ box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+ float: left;
+ width: 20%;
+ border-left: none;
+ padding: 0.25em;
+ box-sizing: border-box;
+}
+
+
+img {
+ border: 0;
+ max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+ margin: 10px 0 0 20px;
+ padding: 0;
+}
+
+ul.search li {
+ padding: 5px 0 5px 20px;
+ background-image: url(file.png);
+ background-repeat: no-repeat;
+ background-position: 0 7px;
+}
+
+ul.search li a {
+ font-weight: bold;
+}
+
+ul.search li div.context {
+ color: #888;
+ margin: 2px 0 0 30px;
+ text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+ font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+ width: 90%;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+table.contentstable p.biglink {
+ line-height: 150%;
+}
+
+a.biglink {
+ font-size: 1.3em;
+}
+
+span.linkdescr {
+ font-style: italic;
+ padding-top: 5px;
+ font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+ width: 100%;
+}
+
+table.indextable td {
+ text-align: left;
+ vertical-align: top;
+}
+
+table.indextable ul {
+ margin-top: 0;
+ margin-bottom: 0;
+ list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+ padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+ height: 10px;
+}
+
+table.indextable tr.cap {
+ margin-top: 10px;
+ background-color: #f2f2f2;
+}
+
+img.toggler {
+ margin-right: 3px;
+ margin-top: 3px;
+ cursor: pointer;
+}
+
+div.modindex-jumpbox {
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
+ margin: 1em 0 1em 0;
+ padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
+ margin: 1em 0 1em 0;
+ padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+ padding: 2px;
+ border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+ min-width: 450px;
+ max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+ -moz-hyphens: auto;
+ -ms-hyphens: auto;
+ -webkit-hyphens: auto;
+ hyphens: auto;
+}
+
+a.headerlink {
+ visibility: hidden;
+}
+
+a.brackets:before,
+span.brackets > a:before{
+ content: "[";
+}
+
+a.brackets:after,
+span.brackets > a:after {
+ content: "]";
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+ visibility: visible;
+}
+
+div.body p.caption {
+ text-align: inherit;
+}
+
+div.body td {
+ text-align: left;
+}
+
+.first {
+ margin-top: 0 !important;
+}
+
+p.rubric {
+ margin-top: 30px;
+ font-weight: bold;
+}
+
+img.align-left, .figure.align-left, object.align-left {
+ clear: left;
+ float: left;
+ margin-right: 1em;
+}
+
+img.align-right, .figure.align-right, object.align-right {
+ clear: right;
+ float: right;
+ margin-left: 1em;
+}
+
+img.align-center, .figure.align-center, object.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+img.align-default, .figure.align-default {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.align-left {
+ text-align: left;
+}
+
+.align-center {
+ text-align: center;
+}
+
+.align-default {
+ text-align: center;
+}
+
+.align-right {
+ text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+ margin: 0 0 0.5em 1em;
+ border: 1px solid #ddb;
+ padding: 7px 7px 0 7px;
+ background-color: #ffe;
+ width: 40%;
+ float: right;
+}
+
+p.sidebar-title {
+ font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+ border: 1px solid #ccc;
+ padding: 7px 7px 0 7px;
+ margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+ font-size: 1.1em;
+ font-weight: bold;
+ margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ padding: 7px;
+}
+
+div.admonition dt {
+ font-weight: bold;
+}
+
+div.admonition dl {
+ margin-bottom: 0;
+}
+
+p.admonition-title {
+ margin: 0px 10px 5px 0px;
+ font-weight: bold;
+}
+
+div.body p.centered {
+ text-align: center;
+ margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+ border: 0;
+ border-collapse: collapse;
+}
+
+table.align-center {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+table.align-default {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+table caption span.caption-number {
+ font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+ padding: 1px 8px 1px 5px;
+ border-top: 0;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 1px solid #aaa;
+}
+
+table.footnote td, table.footnote th {
+ border: 0 !important;
+}
+
+th {
+ text-align: left;
+ padding-right: 5px;
+}
+
+table.citation {
+ border-left: solid 1px gray;
+ margin-left: 1px;
+}
+
+table.citation td {
+ border-bottom: none;
+}
+
+th > p:first-child,
+td > p:first-child {
+ margin-top: 0px;
+}
+
+th > p:last-child,
+td > p:last-child {
+ margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure {
+ margin: 0.5em;
+ padding: 0.5em;
+}
+
+div.figure p.caption {
+ padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number {
+ font-style: italic;
+}
+
+div.figure p.caption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+ border: 0 !important;
+}
+
+.field-list ul {
+ margin: 0;
+ padding-left: 1em;
+}
+
+.field-list p {
+ margin: 0;
+}
+
+.field-name {
+ -moz-hyphens: manual;
+ -ms-hyphens: manual;
+ -webkit-hyphens: manual;
+ hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist td {
+ vertical-align: top;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+ list-style: decimal;
+}
+
+ol.loweralpha {
+ list-style: lower-alpha;
+}
+
+ol.upperalpha {
+ list-style: upper-alpha;
+}
+
+ol.lowerroman {
+ list-style: lower-roman;
+}
+
+ol.upperroman {
+ list-style: upper-roman;
+}
+
+li > p:first-child {
+ margin-top: 0px;
+}
+
+li > p:last-child {
+ margin-bottom: 0px;
+}
+
+dl.footnote > dt,
+dl.citation > dt {
+ float: left;
+}
+
+dl.footnote > dd,
+dl.citation > dd {
+ margin-bottom: 0em;
+}
+
+dl.footnote > dd:after,
+dl.citation > dd:after {
+ content: "";
+ clear: both;
+}
+
+dl.field-list {
+ display: grid;
+ grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+ font-weight: bold;
+ word-break: break-word;
+ padding-left: 0.5em;
+ padding-right: 5px;
+}
+
+dl.field-list > dt:after {
+ content: ":";
+}
+
+dl.field-list > dd {
+ padding-left: 0.5em;
+ margin-top: 0em;
+ margin-left: 0em;
+ margin-bottom: 0em;
+}
+
+dl {
+ margin-bottom: 15px;
+}
+
+dd > p:first-child {
+ margin-top: 0px;
+}
+
+dd ul, dd table {
+ margin-bottom: 10px;
+}
+
+dd {
+ margin-top: 3px;
+ margin-bottom: 10px;
+ margin-left: 30px;
+}
+
+dt:target, span.highlighted {
+ background-color: #fbe54e;
+}
+
+rect.highlighted {
+ fill: #fbe54e;
+}
+
+dl.glossary dt {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+.optional {
+ font-size: 1.3em;
+}
+
+.sig-paren {
+ font-size: larger;
+}
+
+.versionmodified {
+ font-style: italic;
+}
+
+.system-message {
+ background-color: #fda;
+ padding: 5px;
+ border: 3px solid red;
+}
+
+.footnote:target {
+ background-color: #ffa;
+}
+
+.line-block {
+ display: block;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+
+.line-block .line-block {
+ margin-top: 0;
+ margin-bottom: 0;
+ margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+ font-family: sans-serif;
+}
+
+.accelerator {
+ text-decoration: underline;
+}
+
+.classifier {
+ font-style: oblique;
+}
+
+.classifier:before {
+ font-style: normal;
+ margin: 0.5em;
+ content: ":";
+}
+
+abbr, acronym {
+ border-bottom: dotted 1px;
+ cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+ overflow: auto;
+ overflow-y: hidden; /* fixes display issues on Chrome browsers */
+}
+
+span.pre {
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ -webkit-hyphens: none;
+ hyphens: none;
+}
+
+td.linenos pre {
+ padding: 5px 0px;
+ border: 0;
+ background-color: transparent;
+ color: #aaa;
+}
+
+table.highlighttable {
+ margin-left: 0.5em;
+}
+
+table.highlighttable td {
+ padding: 0 0.5em 0 0.5em;
+}
+
+div.code-block-caption {
+ padding: 2px 5px;
+ font-size: small;
+}
+
+div.code-block-caption code {
+ background-color: transparent;
+}
+
+div.code-block-caption + div > div.highlight > pre {
+ margin-top: 0;
+}
+
+div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */
+ user-select: none;
+}
+
+div.code-block-caption span.caption-number {
+ padding: 0.1em 0.3em;
+ font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+ padding: 1em 1em 0;
+}
+
+div.literal-block-wrapper div.highlight {
+ margin: 0;
+}
+
+code.descname {
+ background-color: transparent;
+ font-weight: bold;
+ font-size: 1.2em;
+}
+
+code.descclassname {
+ background-color: transparent;
+}
+
+code.xref, a code {
+ background-color: transparent;
+ font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+ background-color: transparent;
+}
+
+.viewcode-link {
+ float: right;
+}
+
+.viewcode-back {
+ float: right;
+ font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+ margin: -1px -10px;
+ padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+ vertical-align: middle;
+}
+
+div.body div.math p {
+ text-align: center;
+}
+
+span.eqno {
+ float: right;
+}
+
+span.eqno a.headerlink {
+ position: relative;
+ left: 0px;
+ z-index: 1;
+}
+
+div.math:hover a.headerlink {
+ visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+ div.document,
+ div.documentwrapper,
+ div.bodywrapper {
+ margin: 0 !important;
+ width: 100%;
+ }
+
+ div.sphinxsidebar,
+ div.related,
+ div.footer,
+ #top-link {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/handouts-html/de/html/_static/custom.css b/handouts-html/de/html/_static/custom.css
new file mode 100644
index 0000000..2a924f1
--- /dev/null
+++ b/handouts-html/de/html/_static/custom.css
@@ -0,0 +1 @@
+/* This file intentionally left blank. */
diff --git a/handouts-html/de/html/_static/doctools.js b/handouts-html/de/html/_static/doctools.js
new file mode 100644
index 0000000..daccd20
--- /dev/null
+++ b/handouts-html/de/html/_static/doctools.js
@@ -0,0 +1,315 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+if (!window.console || !console.firebug) {
+ var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
+ "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
+ "profile", "profileEnd"];
+ window.console = {};
+ for (var i = 0; i < names.length; ++i)
+ window.console[names[i]] = function() {};
+}
+ */
+
+/**
+ * small helper function to urldecode strings
+ */
+jQuery.urldecode = function(x) {
+ return decodeURIComponent(x).replace(/\+/g, ' ');
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+ if (typeof s === 'undefined')
+ s = document.location.search;
+ var parts = s.substr(s.indexOf('?') + 1).split('&');
+ var result = {};
+ for (var i = 0; i < parts.length; i++) {
+ var tmp = parts[i].split('=', 2);
+ var key = jQuery.urldecode(tmp[0]);
+ var value = jQuery.urldecode(tmp[1]);
+ if (key in result)
+ result[key].push(value);
+ else
+ result[key] = [value];
+ }
+ return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+ function highlight(node, addItems) {
+ if (node.nodeType === 3) {
+ var val = node.nodeValue;
+ var pos = val.toLowerCase().indexOf(text);
+ if (pos >= 0 &&
+ !jQuery(node.parentNode).hasClass(className) &&
+ !jQuery(node.parentNode).hasClass("nohighlight")) {
+ var span;
+ var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
+ if (isInSVG) {
+ span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+ } else {
+ span = document.createElement("span");
+ span.className = className;
+ }
+ span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+ node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+ document.createTextNode(val.substr(pos + text.length)),
+ node.nextSibling));
+ node.nodeValue = val.substr(0, pos);
+ if (isInSVG) {
+ var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+ var bbox = node.parentElement.getBBox();
+ rect.x.baseVal.value = bbox.x;
+ rect.y.baseVal.value = bbox.y;
+ rect.width.baseVal.value = bbox.width;
+ rect.height.baseVal.value = bbox.height;
+ rect.setAttribute('class', className);
+ addItems.push({
+ "parent": node.parentNode,
+ "target": rect});
+ }
+ }
+ }
+ else if (!jQuery(node).is("button, select, textarea")) {
+ jQuery.each(node.childNodes, function() {
+ highlight(this, addItems);
+ });
+ }
+ }
+ var addItems = [];
+ var result = this.each(function() {
+ highlight(this, addItems);
+ });
+ for (var i = 0; i < addItems.length; ++i) {
+ jQuery(addItems[i].parent).before(addItems[i].target);
+ }
+ return result;
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+ jQuery.uaMatch = function(ua) {
+ ua = ua.toLowerCase();
+
+ var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+ /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+ /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+ /(msie) ([\w.]+)/.exec(ua) ||
+ ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+ [];
+
+ return {
+ browser: match[ 1 ] || "",
+ version: match[ 2 ] || "0"
+ };
+ };
+ jQuery.browser = {};
+ jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+ init : function() {
+ this.fixFirefoxAnchorBug();
+ this.highlightSearchWords();
+ this.initIndexTable();
+ if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
+ this.initOnKeyListeners();
+ }
+ },
+
+ /**
+ * i18n support
+ */
+ TRANSLATIONS : {},
+ PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
+ LOCALE : 'unknown',
+
+ // gettext and ngettext don't access this so that the functions
+ // can safely bound to a different name (_ = Documentation.gettext)
+ gettext : function(string) {
+ var translated = Documentation.TRANSLATIONS[string];
+ if (typeof translated === 'undefined')
+ return string;
+ return (typeof translated === 'string') ? translated : translated[0];
+ },
+
+ ngettext : function(singular, plural, n) {
+ var translated = Documentation.TRANSLATIONS[singular];
+ if (typeof translated === 'undefined')
+ return (n == 1) ? singular : plural;
+ return translated[Documentation.PLURALEXPR(n)];
+ },
+
+ addTranslations : function(catalog) {
+ for (var key in catalog.messages)
+ this.TRANSLATIONS[key] = catalog.messages[key];
+ this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+ this.LOCALE = catalog.locale;
+ },
+
+ /**
+ * add context elements like header anchor links
+ */
+ addContextElements : function() {
+ $('div[id] > :header:first').each(function() {
+ $('').
+ attr('href', '#' + this.id).
+ attr('title', _('Permalink to this headline')).
+ appendTo(this);
+ });
+ $('dt[id]').each(function() {
+ $('').
+ attr('href', '#' + this.id).
+ attr('title', _('Permalink to this definition')).
+ appendTo(this);
+ });
+ },
+
+ /**
+ * workaround a firefox stupidity
+ * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
+ */
+ fixFirefoxAnchorBug : function() {
+ if (document.location.hash && $.browser.mozilla)
+ window.setTimeout(function() {
+ document.location.href += '';
+ }, 10);
+ },
+
+ /**
+ * highlight the search words provided in the url in the text
+ */
+ highlightSearchWords : function() {
+ var params = $.getQueryParameters();
+ var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+ if (terms.length) {
+ var body = $('div.body');
+ if (!body.length) {
+ body = $('body');
+ }
+ window.setTimeout(function() {
+ $.each(terms, function() {
+ body.highlightText(this.toLowerCase(), 'highlighted');
+ });
+ }, 10);
+ $('
' + _('Hide Search Matches') + '
')
+ .appendTo($('#searchbox'));
+ }
+ },
+
+ /**
+ * init the domain index toggle buttons
+ */
+ initIndexTable : function() {
+ var togglers = $('img.toggler').click(function() {
+ var src = $(this).attr('src');
+ var idnum = $(this).attr('id').substr(7);
+ $('tr.cg-' + idnum).toggle();
+ if (src.substr(-9) === 'minus.png')
+ $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
+ else
+ $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
+ }).css('display', '');
+ if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
+ togglers.click();
+ }
+ },
+
+ /**
+ * helper function to hide the search marks again
+ */
+ hideSearchWords : function() {
+ $('#searchbox .highlight-link').fadeOut(300);
+ $('span.highlighted').removeClass('highlighted');
+ },
+
+ /**
+ * make the url absolute
+ */
+ makeURL : function(relativeURL) {
+ return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
+ },
+
+ /**
+ * get the current relative url
+ */
+ getCurrentURL : function() {
+ var path = document.location.pathname;
+ var parts = path.split(/\//);
+ $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
+ if (this === '..')
+ parts.pop();
+ });
+ var url = parts.join('/');
+ return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+ },
+
+ initOnKeyListeners: function() {
+ $(document).keydown(function(event) {
+ var activeElementType = document.activeElement.tagName;
+ // don't navigate when in search box or textarea
+ if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
+ && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) {
+ switch (event.keyCode) {
+ case 37: // left
+ var prevHref = $('link[rel="prev"]').prop('href');
+ if (prevHref) {
+ window.location.href = prevHref;
+ return false;
+ }
+ case 39: // right
+ var nextHref = $('link[rel="next"]').prop('href');
+ if (nextHref) {
+ window.location.href = nextHref;
+ return false;
+ }
+ }
+ }
+ });
+ }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+ Documentation.init();
+});
diff --git a/handouts-html/de/html/_static/documentation_options.js b/handouts-html/de/html/_static/documentation_options.js
new file mode 100644
index 0000000..dc4c4f3
--- /dev/null
+++ b/handouts-html/de/html/_static/documentation_options.js
@@ -0,0 +1,12 @@
+var DOCUMENTATION_OPTIONS = {
+ URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
+ VERSION: '0.0.1',
+ LANGUAGE: 'de',
+ COLLAPSE_INDEX: false,
+ BUILDER: 'html',
+ FILE_SUFFIX: '.html',
+ LINK_SUFFIX: '.html',
+ HAS_SOURCE: true,
+ SOURCELINK_SUFFIX: '.txt',
+ NAVIGATION_WITH_KEYS: false
+};
\ No newline at end of file
diff --git a/handouts-html/de/html/_static/file.png b/handouts-html/de/html/_static/file.png
new file mode 100644
index 0000000..a858a41
Binary files /dev/null and b/handouts-html/de/html/_static/file.png differ
diff --git a/handouts-html/de/html/_static/jquery-3.4.1.js b/handouts-html/de/html/_static/jquery-3.4.1.js
new file mode 100644
index 0000000..773ad95
--- /dev/null
+++ b/handouts-html/de/html/_static/jquery-3.4.1.js
@@ -0,0 +1,10598 @@
+/*!
+ * jQuery JavaScript Library v3.4.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2019-05-01T21:04Z
+ */
+( function( global, factory ) {
+
+ "use strict";
+
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get jQuery.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info.
+ module.exports = global.document ?
+ factory( global, true ) :
+ function( w ) {
+ if ( !w.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+ }
+ return factory( w );
+ };
+ } else {
+ factory( global );
+ }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+ // Support: Chrome <=57, Firefox <=52
+ // In some browsers, typeof returns "function" for HTML