summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2012-09-13 12:35:54 +0200
committerSebastian Geerken <devnull@localhost>2012-09-13 12:35:54 +0200
commit94e451ffa5ece79a3b071ee553650bf8bd869a46 (patch)
treef07d031111d6dd4e3a960f882606bfab1c56fdbd
parent1fbc6981b2372216304c22430a3898100962f01f (diff)
parentcb4003e1cac5abfbc7b02cb57d4663d976ef8550 (diff)
Merge of http://flpsed.org/hgweb/dillo_hyphen/
-rw-r--r--doc/dw-line-breaking.doc425
-rw-r--r--doc/index.doc20
-rw-r--r--doc/lout.doc66
-rw-r--r--doc/not-so-simple-container.pngbin0 -> 149875 bytes
-rw-r--r--doc/rounding-errors.doc4
-rw-r--r--dw/Makefile.am7
-rw-r--r--dw/fltkviewbase.cc6
-rw-r--r--dw/hyphenator.cc335
-rw-r--r--dw/hyphenator.hh48
-rw-r--r--dw/layout.hh5
-rw-r--r--dw/style.cc6
-rw-r--r--dw/style.hh4
-rw-r--r--dw/tablecell.cc4
-rw-r--r--dw/tablecell.hh2
-rw-r--r--dw/textblock.cc1076
-rw-r--r--dw/textblock.hh231
-rw-r--r--dw/textblock_linebreaking.cc954
-rw-r--r--dw/types.hh6
-rw-r--r--dw/widget.cc1
-rw-r--r--lout/Makefile.am2
-rw-r--r--lout/container.hh4
-rw-r--r--lout/identity.hh5
-rw-r--r--lout/misc.hh297
-rw-r--r--lout/object.hh4
-rw-r--r--lout/signal.hh4
-rw-r--r--lout/unicode.cc75
-rw-r--r--lout/unicode.hh20
-rw-r--r--src/css.hh1
-rw-r--r--src/html.cc8
-rw-r--r--src/styleengine.cc7
-rw-r--r--test/Anna_Karenina_1.html25
-rw-r--r--test/KHM1-shy.html56
-rw-r--r--test/KHM1.html39
-rw-r--r--test/KHM1b.html14
-rw-r--r--test/KHM1c.html10
-rw-r--r--test/Makefile.am17
-rw-r--r--test/anchors.html650
-rw-r--r--test/hyph-de-1996.pat14211
-rw-r--r--test/hyph-en-us.pat4938
-rw-r--r--test/lang.html12
-rw-r--r--test/liang.cc53
-rw-r--r--test/notsosimplevector.cc63
-rw-r--r--test/table-1.html21
-rw-r--r--test/white-space.html24
44 files changed, 23018 insertions, 742 deletions
diff --git a/doc/dw-line-breaking.doc b/doc/dw-line-breaking.doc
new file mode 100644
index 00000000..8e520c62
--- /dev/null
+++ b/doc/dw-line-breaking.doc
@@ -0,0 +1,425 @@
+/** \page dw-line-breaking Changes in Line-Breaking and Hyphenation
+
+<div style="border: 2px solid #ffff00; margin-bottom: 0.5em;
+padding: 0.5em 1em; background-color: #ffffe0"><b>Info:</b>
+Should be incorporated into dw::Textblock.</div>
+
+<h2>Introduction</h2>
+
+For the implementation of hyphenation in dillo, not only an
+hyphenation algorithm was implemented, but also, the line breaking was
+changed to a simple optimization per line. Aside from the improvement
+by this change per se, an important aspect is the introduction of
+"penalties". Before this change, dillo put all words into a line which
+fitted into it; now, a "badness" is calculated for a possible
+breakpoint, and the best breakpoint, i.&nbsp;e. the breakoint with the
+smallest value for "badness", is choosen. This can be simply refined
+to define "good" and "bad" breakpoints by assigning a "penalty"; the
+best breakpoint is then the one with the smallest value of "badness +
+penalty". Details can be found below.
+
+Example: Normal spaces have a penalty of 0, while hyphenation points
+get a penalty of, say, 1, since hyphenation is generally considered as
+a bit "ugly" and should rather be avoided. Consider a situation where
+the word "dillo" could be hyphenated, with the following badnesses:
+
+<ul>
+<li>before "dillo": 0.6;
+<li>between "dil-" and "lo": 0.2;
+<li>after "dillo": 0.5.
+</ul>
+
+Since the penalty is added, the last value is the best one, so "dillo"
+is put at the end of the line, without hyphenation.
+
+Under other circumstances (e.&nbsp;g. narrower lines), the values
+might be different:
+
+<ul>
+<li>before "dillo": infinite;
+<li>between "dil-" and "lo": 0.3;
+<li>after "dillo": 1.5.
+</ul>
+
+In this case, even the addition of the penalty makes hyphenation the
+best choice.
+
+
+<h2>Literature</h2>
+
+<h3>Breaking Paragraphs Into Lines</h3>
+
+Although dillo does not (yet?) implement the algorithm T<sub>E</sub>X
+uses for line breaking, this document shares much of the notation used
+by the article <i>Breaking Paragraphs Into Lines</i> by Donald
+E. Knuth and Michael F. Plass; originally published in: Software --
+Practice and Experience <b>11</b> (1981), 1119-1184; reprinted in:
+<i>Digital Typography</i> by Donalt E. Knuth, CSLI Publications 1999.
+Anyway an interesting reading.
+
+<h3>Hyphenation</h3>
+
+Dillo uses the algorithm by Frank Liang, which is described his
+doctoral dissertation found at http://www.tug.org/docs/liang/. There
+is also a description in chapter H ("Hyphenation") of <i>The
+T<sub>E</sub>Xbook</i> by Donald E. Knuth, Addison-Wesley 1984.
+
+Pattern files can be found at
+http://www.ctan.org/tex-archive/language/hyphenation.
+
+
+<h2>Overview over Changes</h2>
+
+Starting with this change, dw/textblock.cc has been split up; anything
+related to line breaking has been moved into
+dw/textblock_linebreaking.cc. This will also be done for other aspects
+like floats. (Better, however, would be a clean logical split.)
+
+An important change relates to the way how lines are added: before,
+dillo would add a line as soon as a new word for this line was
+added. Now, a line is added not before the <i>last</i> word of this
+line is known. This has two important implications:
+
+<ul>
+<li>Some values in dw::Textblock::Line, which represented values
+accumulated within the line, could be removed, since now, these values
+can be calculated simply in a loop.
+<li>On the other hand, this means that some words may not belong to
+any line. For this reason, in some cases (e.&nbsp;g. in
+dw::Textblock::sizeRequestImpl) dw::Textblock::showMissingLines is
+called, which creates temporary lines, which must, under other
+circumstances, removed again by dw::Textblock::removeTemporaryLines,
+since they have been created based on limited informations, and so
+possibly in a wrong way. (See below for details.)
+</ul>
+
+When a word can be hyphenated, an instance of dw::Textblock::Word is
+used for each part. Notice that soft hyphens are evaluated
+immediately, but automatic hyphenation is done in a lazy way (details
+below), so the number of instances may change. There are some new
+attributes: only when dw::Textblock::Word::canBeHyphenated is set to
+<i>true</i>, automatic hyphenation is allowed; it is set to false when
+soft hyphens are used for a word, and (of course) by the automatic
+hyphenation itself. Furthermore, dw::Textblock::Word::hyphenWidth (more
+details in the comment there) has to be included when calculating line
+widths.
+
+Some values should be configurable: dw::Textblock::HYPHEN_BREAK, the
+penalty for hyphens. Also dw::Textblock::Word::stretchability,
+dw::Textblock::Word::shrinkability, which are both set in
+dw::Textblock::addSpace.
+
+
+<h2>Criteria for Line-Breaking</h2>
+
+Before these changes to line breaking, a word (represented by
+dw::Textblock::Word) had the following attributes related to
+line-breaking:
+
+<ul>
+<li>the width of the word itself, represented by dw::Textblock::Word::size;
+<li>the width of the space following the word, represented by
+dw::Textblock::Word::origSpace.
+</ul>
+
+In a more mathematical notation, the \f$i\f$th word has got a width
+\f$w_i\f$ and a space \f$s_i\f$.
+
+A break was possible, when there was a space between the two words,
+and the first possible break was choosen.
+
+With hyphenation, the criteria are refined. Hyphenation should only be
+used when otherwise line breaking results in very large spaces. We
+define:
+
+<ul>
+<li>the badness \f$\beta\f$ of a line, which is the greater the more the
+spaces between the words differ from the ideal space;
+<li>a penalty \f$p\f$ for any possible break point.
+</ul>
+
+The goal is to find those break points, where \f$\beta + p\f$ is
+minimal.
+
+Examples for the penalty \f$p\f$:
+
+<ul>
+<li>0 for normal line breaks (between words);
+<li>\f$\infty\f$ to prevent a line break at all costs;
+<li>\f$-\infty\f$ to force a line
+<li>a positive, but finite, value for hyphenation points.
+</ul>
+
+So we need the following values:
+
+<ul>
+<li> \f$w_i\f$ (the width of the word \f$i\f$ itself);
+<li> \f$s_i\f$ (the width of the space following the word \f$i\f$);
+<li> the strechability \f$y_i\f$, a value denoting how much the space
+after word\f$i\f$ can be streched (typically \f${1\over 2} s_i\f$);
+<li> the shrinkability \f$y_i\f$, a value denoting how much the space
+after word\f$i\f$ can be shrunken (typically \f${1\over 3} s_i\f$);
+<li> the penalty \f$p_i\f$, if the line is broken after word \f$i\f$;
+<li> a width \f$h_i\f$, which is added, when the line is broken after
+word \f$i\f$.
+</ul>
+
+\f$h_i\f$ is the width of the hyphen, if the word \f$i\f$ is a part of
+the hyphenated word (except the last part); otherwise 0.
+
+Let \f$l\f$ be the (ideal) width (length) of the line, which is
+e.&nbsp;at the top given by the browser window width. Furthermore, all words
+from \f$a\f$ to \f$b\f$ are added to the line. \f$a\f$ is fixed: we do
+not modify the previous lines anymore; but our task is to find a
+suitable \f$b\f$.
+
+We define:
+
+\f[W_a^b = \sum_{i=a}^{b} w_i + \sum_{i=a}^{b-1} s_i + h_b\f]
+
+\f[Y_a^b = \sum_{i=a}^{b-1} y_i\f]
+
+\f[Z_a^b = \sum_{i=a}^{b-1} z_i\f]
+
+
+\f$W_a^b\f$ is the total width, \f$Y_a^b\f$ the total strechability, and
+\f$Z_a^b\f$ the total shrinkability.
+
+Furthermore the <i>adjustment ratio</i> \f$r_a^b\f$:
+
+<ul>
+<li>in the ideal case that \f$W_a^b = l\f$: \f$r_a^b = 0\f$;
+<li>if \f$W_a^b < l\f$: \f$r_a^b = (l - W_a^b) / Y_a^b\f$ (\f$r_a^b < 0\f$ in
+this case);
+<li>if \f$W_a^b > l\f$: \f$r_a^b = (l - W_a^b) / Z_a^b\f$ (\f$r_a^b < 0\f$ in
+this case).
+</ul>
+
+The badness \f$\beta_a^b\f$ is defined as follows:
+
+<ul>
+<li>if \f$r_a^b\f$ is undefined or \f$r_a^b < -1\f$: \f$\beta_a^b = \infty\f$;
+<li>otherwise: \f$\beta_a^b = |r_a^b|^3\f$
+</ul>
+
+The goal is to find the value of \f$b\f$ where \f$\beta_a^b + p_b\f$
+is minimal. (\f$a\f$ is given, since we do not modify the previous
+lines.)
+
+After a couple of words, it is not predictable weather this minimum
+has already been reached. There are two cases where this is possible
+for a given \f$b'\f$:
+
+<ul>
+<li>\f$\beta_{b'}^a = \infty\f$ (line gets too tight): \f$a \le b <
+b'\f$, the minimun has to be searched between these two values;
+<li>\f$p_{b'} = -\infty\f$ (forced line break): \f$a \le b \le b'\f$
+(there may be another minimum of \f$\beta_a^b\f$ before; note the
+\f$\le\f$ instead of \f$<\f$).
+</ul>
+
+This leads to a problem that the last words of a text block are not
+displayed this way, since they do not fulfill these rules for being
+added to a line. For this reason, there are "temporary" lines already
+described above.
+
+(Note that the actual calculation differs from this description, since
+integer arithmetics are used for performace, which make the actual
+code more complicated. See dw::Textblock::BadnessAndPenalty for
+details.)
+
+
+<h2>Hyphens</h2>
+
+Words (instances of dw::Textblock::Word), which are actually part of a
+hyphenated word, are always drawn as a whole, not seperately. This
+way, the underlying platform is able to apply kerning, ligatures, etc.
+
+Calculating the width of such words causes some problems, since it is
+not required that the width of text "AB" is identical to the width of
+"A" plus the width of "B", just for the reasons mentioned above. It
+gets even a bit more complicated, since it is required that a word
+part (instance of dw::Textblock::Word) has always the same length,
+independant of whether hyphenation is applied or not. Furthermore, the
+hyphen length is fixed for a word; for practical reasons, it is always
+the width of a hyphen, in the given font.
+
+For calculating the widths, consider a word of for syllables:
+A-B-C-D. There are 3 hyphenation points, and so 2<sup>3</sup> = 8
+possible ways of hyphenation: ABCD, ABC-D, AB-CD, AB-C-D, A-BCD,
+A-BC-D, A-B-CD, A-B-C-D. (Some of them, like the last one, are only
+probable for very narrow lines.)
+
+Let w(A), w(B), w(C), w(D) be the word widths (part of
+dw::Textblock::Word::size), which have to be calculated, and l be a
+shorthand for of dw::core::Platform::textWidth. Without considering
+this problem, the calculatin would be simple: w(A) = l(A)
+etc. However, it gets a bit more complicated. Since all
+non-hyphenations are drawn as a whole, the following conditions can be
+concluded:
+
+<ul>
+<li>from drawing "ABCD" (not hyphenated at all): w(A) + w(B) + w(C) +
+w(D) = l(ABCD);
+<li>from drawing "BCD", when hyphenated as "A-BCD" ("A-" is not
+considered here): w(B) + w(C) + w(D) = l(BCD);
+<li>likewise, from drawing "CD" (cases "AB-CD" and "A-B-CD"): w(C) +
+w(D) = l(CD);
+<li>finally, for the cases "ABC-D", "AB-C-D", "A-BC-D", and "A-B-C-D":
+w(D) = l(D).
+</ul>
+
+So, the calculation is simple:
+
+<ul>
+<li>w(D) = l(D)
+<li>w(C) = l(CD) - w(D)
+<li>w(B) = l(BCD) - (w(C) + w(D))
+<li>w(A) = l(ABCD) - (w(B) + w(C) + w(D))
+</ul>
+
+For calculation the hyphen widths, the exact conditions would be
+over-determined, even when the possibility for individual hyphen
+widths (instead of simply the text width of a hyphen character) would
+be used. However, a simple approach of fixed hyphen widths will have
+near-perfect results, so this is kept simple.
+
+
+<h2>Automatic Hyphenation</h2>
+
+When soft hyphens are used, words are immediately divided into
+different parts, and so different instances of
+dw::Textblock::Word. Atomatic hyphenation (using Liang's algorithm)
+is, however, not applied always, but only when possibly needed, after
+calculating a line without hyphenation:
+
+<ul>
+<li>When the line is tight, the last word of the line is hyphenated;
+possibly this will result in a line with less parts of this word, and
+so a less tight line.
+<li>When the line is loose, and there is another word (for the
+next line) availible, this word is hyphenated; possibly, some parts of
+this word are taken into this line, making it less loose.
+</ul>
+
+After this, the line is re-calculated.
+
+A problem arrises when the textblock is rewrapped, e.&nbsp;g. when the
+user changes the window width. In this case, some new instances of
+dw::Textblock::Word must be inserted into the word list,
+dw::Textblock::words. This word list is implemented as an array, which
+is dynamically increased; a simple approach would involve moving all
+of the <i>n</i> elements after position <i>i</i>, so
+<i>n</i>&nbsp;-&nbsp;<i>i</i> steps are necessary. This would not be a
+problem, since O(n) steps are neccessary; however, this will be
+neccessary again for the next hyphenated word (at the end of a
+following line), and so on, so that
+(<i>n</i>&nbsp;-&nbsp;<i>i</i><sub>1</sub>) +
+(<i>n</i>&nbsp;-&nbsp;<i>i</i><sub>2</sub>) + ..., with
+<i>i</i><sub>1</sub>&nbsp;&lt;&nbsp;<i>i</i><sub>2</sub>&nbsp;&lt;&nbsp;...,
+which results in O(n<sup>2</sup>) steps. For this reason, the word
+list is managed by the class lout::misc::NotSoSimpleVector, which uses
+a trick (a second array) to deal with exactly this problem. See there
+for more details.
+
+
+<h2>Tests</h2>
+
+There are test HTML files in the <i>test</i> directory. Also, there is
+a program testing automatic hyphenation, <i>test/liang</i>, which can
+be easily extended.
+
+
+<h2>Bugs and Things Needing Improvement</h2>
+
+<h3>High Priority</h3>
+
+<b>Bugs in hyphenation:</b> There seem to be problems when breaking
+words containing hyphens already. Example: "Abtei-Stadt", which is
+divided into "Abtei-" and "Stadt", resulting possibly in
+&quot;Abtei-<span></span>-[new line]Stadt&quot;. See also below under
+"Low Priority", on how to deal with hyphens and dashes.
+
+<h3>Medium Priority</h3>
+
+<b>Break hyphens and dashes:</b> The following rules seem to be relevant:
+
+<ol>
+<li>In English, an em-dash is used with no spaces around. Breaking
+before and after the dash should be possible, perhaps with a penalty >
+0. (In German, an en-dash (Halbgeviert) with spaces around is used
+instead.)</li>
+<li>After a hyphen, which is part of a compound word, a break should
+be possible. As described above ("Abtei-Stadt"), this collides with
+hyphenation.</li>
+</ol>
+
+Where to implement? In the same dynamic, lazy way like hyphenation? As
+part of hyphenation?
+
+<b>Incorrect calculation of extremes:</b> The minimal width of a text
+block (as part of the width extremes, which are mainly used for
+tables) is defined by everything between two possible breaks. A
+possible break may also be a hyphenation point; however, hyphenation
+points are calculated in a lazy way, when the lines are broken, and
+not when extremes are calculated. So, it is a matter of chance whether
+the calculation of the minimal width will take the two parts "dil-"
+and "lo" into account (when "dillo" has already been hyphenated), or
+only one part, "dillo" (when "dillo" has not yet been hyphenated),
+resulting possibly in a different value for the minimal width.
+
+Possible strategies to deal with this problem:
+
+<ol>
+<li>Ignore. The implications should be minimal.
+<li>Any solution will make it neccessary to hyphenate at least some
+words when calculating extremes. Since the minimal widths of all words
+are used to calculate the minimal width of the text block, the
+simplest approach will hyphenate all words. This would, of course,
+eliminate the performace gains of the current lazy approach.
+<li>The latter approach could be optimized in some ways. Examples: (i)
+If a word is already narrower than the current accumulated value for
+the minimal width, it makes no sense to hyphenate it. (ii) In other
+cases, heuristics may be used to estimate the number of syllables, the
+width of the widest of them etc.
+</ol>
+
+<h3>Low Priority</h3>
+
+<b>Mark the end of a paragraph:</b> Should dw::core::Content::BREAK
+still be used? Currently, this is redundant to
+dw::Textblock::BadnessAndPenalty.
+
+<b>Other than justified text:</b> The calculation of badness is
+designed for justified text. For other alignments, it may be
+modified. The point is the definition of strechibility and for the
+line.
+
+Consider left-aligned text. Most importantly, not the spaces between
+the words, but the space on the right border is adjusted. If the
+actual line width (sum of words and normal spaces, \f$W_a^b\f$ above)
+equals the the ideal width (e.&nbsp;g. given by the browser window
+width, \f$l\f$ above), this space is zero, so it is not possible to
+shrink it further. For this reason, the shrinkability is now already
+set to 0.
+
+On the other hand, there should be a strechability for the space on
+the right border. However, only the spaces between the words have a
+strechability; later, the differences are summed up and used to fill
+the space on the right. This works, but is a bit unprecise, since the
+strechability of the space on the right depends on the number of words
+in the line.
+
+(Likewise, if you modify the code to assign a positive value for the
+shrinkability for left-aligned text, the difference is summed up and
+used for the right border; since this difference is negative, the
+lines will, when spaces are shrunken, get too long!)
+
+Analogue considerations must be made vor right-aligned and centered
+text. (For centered texts, there are two adjustable spaces.)
+
+<b>Hyphens in adjacent lines:</b> It should be simple to assign a
+larger penalty for hyphens, when the line before is already
+hyphenated. This way, hyphens in adjacent are penalized further.
+
+*/
diff --git a/doc/index.doc b/doc/index.doc
index 9892f177..59de8cd8 100644
--- a/doc/index.doc
+++ b/doc/index.doc
@@ -23,23 +23,23 @@ GLib. For an overview on all this, take a look at \ref lout.
GtkObject is replaced by the following:
<ul>
-<li> object::Object is a common base class for many classes used dillo. In
- the namespace ::object, there are also some more common classes and
- interfaces.
+<li> lout::object::Object is a common base class for many classes used
+ dillo. In the namespace lout::object, there are also some more common
+ classes and interfaces.
-<li> A sub class of object::Object is identity::IdentifiableObject, which
- allows to determine the class at run-time (equivalent to GTK_CHECK_CAST
- in GtkObject).
+<li> A sub class of lout::object::Object is
+ lout::identity::IdentifiableObject, which allows to determine the
+ class at run-time (equivalent to GTK_CHECK_CAST in GtkObject).
-<li> For signals, there is the namespace ::signal.
+<li> For signals, there is the namespace lout::signal.
</ul>
-Hash tables, linked lists etc. can be found in the ::container namespace,
+Hash tables, linked lists etc. can be found in the lout::container namespace,
several useful macros from GLib have been implemented as inline functions
-in the ::misc namespace.
+in the lout::misc namespace.
As an alternative to the macros defined in list.h, there is also a template
-class, misc::SimpleVector, which does the same.
+class, lout::misc::SimpleVector, which does the same.
<h3>Changes in Dw</h3>
diff --git a/doc/lout.doc b/doc/lout.doc
index 0d5be679..7f00d7b8 100644
--- a/doc/lout.doc
+++ b/doc/lout.doc
@@ -6,7 +6,7 @@ overview.
<h2>Common Base Class</h2>
-Many classes are derived from object::Object, which defines some
+Many classes are derived from lout::object::Object, which defines some
general methods. See there for more information.
For the case, that you need primitive C++ types, there are some
@@ -14,47 +14,47 @@ wrappers:
<table>
<tr><th>C++ Type <th>Wrapper Class
-<tr><td>void* <td>object::Pointer
-<tr><td>specific pointer <td>object::TypedPointer (template class)
-<tr><td>int <td>object::Integer
-<tr><td>const char* <td>object::ConstString
-<tr><td>char* <td>object::String
+<tr><td>void* <td>lout::object::Pointer
+<tr><td>specific pointer <td>lout::object::TypedPointer (template class)
+<tr><td>int <td>lout::object::Integer
+<tr><td>const char* <td>lout::object::ConstString
+<tr><td>char* <td>lout::object::String
</table>
<h2>Containers</h2>
-In the namespace ::container, several container classes are defined,
-which all deal with instances of object::Object.
+In the namespace lout::container, several container classes are defined,
+which all deal with instances of lout::object::Object.
<h3>Untyped Containers</h3>
-In container::untyped, there are the following containers:
+In lout::container::untyped, there are the following containers:
<ul>
-<li>container::untyped::Vector, a dynamically increases array,
-<li>container::untyped::List, a linked list,
-<li>container::untyped::HashTable, a hash table, and
-<li>container::untyped::Stack, a stack.
+<li>lout::container::untyped::Vector, a dynamically increases array,
+<li>lout::container::untyped::List, a linked list,
+<li>lout::container::untyped::HashTable, a hash table, and
+<li>lout::container::untyped::Stack, a stack.
</ul>
All provide specific methods, but since they have a common base class,
-container::untyped::Collection, they all provide iterators, by the
-method container::untyped::Collection::iterator.
+lout::container::untyped::Collection, they all provide iterators, by the
+method lout::container::untyped::Collection::iterator.
<h3>Typed Containers</h3>
-container::typed provides wrappers for the container classes defined
-in container::untyped, which are more type safe, by using C++
+lout::container::typed provides wrappers for the container classes defined
+in lout::container::untyped, which are more type safe, by using C++
templates.
<h2>Signals</h2>
For how to connect objects at run-time (to reduce dependencies), take a
-look at the ::signal namespace.
+look at the lout::signal namespace.
-There is also a base class signal::ObservedObject, which implements
+There is also a base class lout::signal::ObservedObject, which implements
signals for deletion.
@@ -67,28 +67,28 @@ see the file for mor informations.
<h2>Identifying Classes at Runtime</h2>
If the class of an object must be identified at runtime,
-identity::IdentifiableObject should be used as the base class, see
-there for more details.
+lout::identity::IdentifiableObject should be used as the base class,
+see there for more details.
<h2>Miscellaneous</h2>
-The ::misc namespace provides several miscellaneous stuff:
+The lout::misc namespace provides several miscellaneous stuff:
<ul>
<li> In some contexts, it is necessary to compare objects
- (less/greater), for this, also misc::Comparable must be
- implemented. For example., container::untyped::Vector::sort and
- container::typed::Vector::sort cast the elements to
- misc::Comparable. This can be mixed with object::Object.
-<li> misc::SimpleVector, a simple, template based vector class (not
- depending on object::Object),
-<li> misc::StringBuffer, class for fast concatenation of a large number
+ (less/greater), for this, also lout::misc::Comparable must be
+ implemented. For example., lout::container::untyped::Vector::sort and
+ lout::container::typed::Vector::sort cast the elements to
+ lout::misc::Comparable. This can be mixed with lout::object::Object.
+<li> lout::misc::SimpleVector, a simple, template based vector class (not
+ depending on lout::object::Object),
+<li> lout::misc::StringBuffer, class for fast concatenation of a large number
of strings,
-<li> misc::BitSet implements a bitset.
-<li> useful (template) functions (misc::min, misc::max), and
-<li> some functions useful for runtime checks (misc::assert,
- misc::assertNotReached).
+<li> lout::misc::BitSet implements a bitset.
+<li> useful (template) functions (lout::misc::min, lout::misc::max), and
+<li> some functions useful for runtime checks (lout::misc::assert,
+ lout::misc::assertNotReached).
</ul>
*/
diff --git a/doc/not-so-simple-container.png b/doc/not-so-simple-container.png
new file mode 100644
index 00000000..1c8303d5
--- /dev/null
+++ b/doc/not-so-simple-container.png
Binary files differ
diff --git a/doc/rounding-errors.doc b/doc/rounding-errors.doc
index 433d6ed9..133a1fe5 100644
--- a/doc/rounding-errors.doc
+++ b/doc/rounding-errors.doc
@@ -15,10 +15,10 @@ implementation would result in something, for which
because of rounding errors, due to the integer division. This can be
avoided by transforming the formula into
-\f[y_i = {(\sum_{j=0}^{j=i} x_j) a \over b} - \sum_{j=0}^{j=i} y_j\f]
+\f[y_i = {(\sum_{j=0}^{j=i} x_j) a \over b} - \sum_{j=0}^{j=i-1} y_j\f]
Of corse, when all \f$y_i\f$ are calculated in a sequence,
-\f$\sum_{j=0}^{j=i} x_j\f$ and \f$\sum_{j=0}^{j=i} y_j\f$ can be
+\f$\sum_{j=0}^{j=i} x_j\f$ and \f$\sum_{j=0}^{j=i-1} y_j\f$ can be
accumulated in the same loop.
*/ \ No newline at end of file
diff --git a/dw/Makefile.am b/dw/Makefile.am
index 3014b35d..07948b5f 100644
--- a/dw/Makefile.am
+++ b/dw/Makefile.am
@@ -1,5 +1,7 @@
AM_CPPFLAGS = \
- -I$(top_srcdir)
+ -I$(top_srcdir) \
+ -DDILLO_LIBDIR='"$(pkglibdir)/"'
+
noinst_LIBRARIES = \
libDw-core.a \
@@ -57,6 +59,8 @@ libDw_widgets_a_SOURCES = \
alignedtextblock.hh \
bullet.cc \
bullet.hh \
+ hyphenator.cc \
+ hyphenator.hh \
image.cc \
image.hh \
listitem.cc \
@@ -68,6 +72,7 @@ libDw_widgets_a_SOURCES = \
tablecell.cc \
tablecell.hh \
textblock.cc \
+ textblock_linebreaking.cc \
textblock.hh
EXTRA_DIST = preview.xbm
diff --git a/dw/fltkviewbase.cc b/dw/fltkviewbase.cc
index 1d385cf9..240937e2 100644
--- a/dw/fltkviewbase.cc
+++ b/dw/fltkviewbase.cc
@@ -531,9 +531,9 @@ FltkWidgetView::~FltkWidgetView ()
}
void FltkWidgetView::drawText (core::style::Font *font,
- core::style::Color *color,
- core::style::Color::Shading shading,
- int X, int Y, const char *text, int len)
+ core::style::Color *color,
+ core::style::Color::Shading shading,
+ int X, int Y, const char *text, int len)
{
FltkFont *ff = (FltkFont*)font;
fl_font(ff->font, ff->size);
diff --git a/dw/hyphenator.cc b/dw/hyphenator.cc
new file mode 100644
index 00000000..0fbdb699
--- /dev/null
+++ b/dw/hyphenator.cc
@@ -0,0 +1,335 @@
+#include "hyphenator.hh"
+
+#include "../lout/misc.hh"
+#include "../lout/unicode.hh"
+#include <stdio.h>
+#include <string.h>
+#include <limits.h>
+
+#define LEN 1000
+
+/*
+ * This is a direct translation of the Python implementation by Ned
+ * Batchelder.
+ */
+
+using namespace lout::object;
+using namespace lout::container::typed;
+using namespace lout::misc;
+
+namespace dw {
+
+HashTable <TypedPair <TypedPointer <core::Platform>, ConstString>,
+ Hyphenator> *Hyphenator::hyphenators =
+ new HashTable <TypedPair <TypedPointer <core::Platform>, ConstString>,
+ Hyphenator> (true, true);
+
+Hyphenator::Hyphenator (core::Platform *platform,
+ const char *patFile, const char *excFile)
+{
+ this->platform = platform;
+ tree = NULL; // As long we are not sure whether a pattern file can be read.
+
+ FILE *patF = fopen (patFile, "r");
+ if (patF) {
+ tree = new HashTable <Integer, Collection <Integer> > (true, true);
+ while (!feof (patF)) {
+ char buf[LEN + 1];
+ char *s = fgets (buf, LEN, patF);
+ if (s) {
+ // TODO Better exit with an error, when the line is too long.
+ int l = strlen (s);
+ if (s[l - 1] == '\n')
+ s[l - 1] = 0;
+ insertPattern (s);
+ }
+ }
+ fclose (patF);
+ }
+
+ exceptions = NULL; // Again, only instanciated when needed.
+
+ FILE *excF = fopen (excFile, "r");
+ if (excF) {
+ exceptions = new HashTable <ConstString, Vector <Integer> > (true, true);
+ while (!feof (excF)) {
+ char buf[LEN + 1];
+ char *s = fgets (buf, LEN, excF);
+ if (s) {
+ // TODO Better exit with an error, when the line is too long.
+ int l = strlen (s);
+ if (s[l - 1] == '\n')
+ s[l - 1] = 0;
+ insertException (s);
+ }
+ }
+ fclose (excF);
+ }
+}
+
+Hyphenator::~Hyphenator ()
+{
+ if (tree)
+ delete tree;
+ if (exceptions)
+ delete exceptions;
+}
+
+Hyphenator *Hyphenator::getHyphenator (core::Platform *platform,
+ const char *lang)
+{
+ // TODO Not very efficient. Other key than TypedPair?
+ // (Keeping the parts of the pair on the stack does not help, since
+ // ~TypedPair deletes them, so they have to be kept on the heap.)
+ TypedPair <TypedPointer <core::Platform>, ConstString> *pair =
+ new TypedPair <TypedPointer <core::Platform>,
+ ConstString> (new TypedPointer <core::Platform> (platform),
+ new String (lang));
+
+ Hyphenator *hyphenator = hyphenators->get (pair);
+ if (hyphenator)
+ delete pair;
+ else {
+ char patFile [PATH_MAX];
+ snprintf (patFile, sizeof (patFile), "%s/hyphenation/%s.pat",
+ DILLO_LIBDIR, lang);
+ char excFile [PATH_MAX];
+ snprintf (excFile, sizeof(excFile), "%s/hyphenation/%s.exc",
+ DILLO_LIBDIR, lang);
+
+ //printf ("Loading hyphenation patterns for language '%s' from '%s' and "
+ // "exceptions from '%s' ...\n", lang, patFile, excFile);
+
+ hyphenator = new Hyphenator (platform, patFile, excFile);
+ hyphenators->put (pair, hyphenator);
+ }
+
+ //lout::misc::StringBuffer sb;
+ //hyphenators->intoStringBuffer (&sb);
+ //printf ("%s\n", sb.getChars ());
+
+ return hyphenator;
+}
+
+void Hyphenator::insertPattern (char *s)
+{
+ // Convert the a pattern like 'a1bc3d4' into a string of chars 'abcd'
+ // and a list of points [ 0, 1, 0, 3, 4 ].
+ int l = strlen (s);
+ char chars [l + 1];
+ Vector <Integer> *points = new Vector <Integer> (1, true);
+
+ // TODO numbers consisting of multiple digits?
+ // TODO Encoding: This implementation works exactly like the Python
+ // implementation, based on UTF-8. Does this always work?
+ int numChars = 0;
+ for (int i = 0; s[i]; i++)
+ if (s[i] >= '0' && s[i] <= '9')
+ points->put (new Integer (s[i] - '0'), numChars);
+ else
+ chars[numChars++] = s[i];
+ chars[numChars] = 0;
+
+ for (int i = 0; i < numChars + 1; i++) {
+ Integer *val = points->get (i);
+ if (val == NULL)
+ points->put (new Integer (0), i);
+ }
+
+ // Insert the pattern into the tree. Each character finds a dict
+ // another level down in the tree, and leaf nodes have the list of
+ // points.
+
+ HashTable <Integer, Collection <Integer> > *t = tree;
+ for (int i = 0; chars[i]; i++) {
+ Integer c (chars[i]);
+ if (!t->contains(&c))
+ t->put (new Integer (chars[i]),
+ new HashTable <Integer, Collection <Integer> > (true, true));
+ t = (HashTable <Integer, Collection <Integer> >*) t->get (&c);
+ }
+
+ t->put (new Integer (0), points);
+}
+
+void Hyphenator::insertException (char *s)
+{
+ Vector<Integer> *breaks = new Vector<Integer> (1, true);
+
+ int len = strlen (s);
+ for (int i = 0; i < len - 1; i++)
+ if((unsigned char)s[i] == 0xc2 && (unsigned char)s[i + 1] == 0xad)
+ breaks->put (new Integer (i - 2 * breaks->size()));
+
+ char noHyphens[len - 2 * breaks->size() + 1];
+ int j = 0;
+ for (int i = 0; i < len; ) {
+ if(i < len - 1 &&
+ (unsigned char)s[i] == 0xc2 && (unsigned char)s[i + 1] == 0xad)
+ i += 2;
+ else
+ noHyphens[j++] = s[i++];
+ }
+ noHyphens[j] = 0;
+
+ exceptions->put (new String (noHyphens), breaks);
+}
+
+/**
+ * Simple test to avoid much costs. Passing it does not mean that the word
+ * can be hyphenated.
+ */
+bool Hyphenator::isHyphenationCandidate (const char *word)
+{
+ // Short words aren't hyphenated.
+ return (strlen (word) > 4); // TODO UTF-8?
+}
+
+/**
+ * Test whether the character on which "s" points (UTF-8) is an actual
+ * part of the word. Other characters at the beginning and end are
+ * ignored.
+ *
+ * TODO Currently only suitable for English and German.
+ * TODO Only lowercase. (Uppercase not needed.)
+ */
+bool Hyphenator::isCharPartOfActualWord (char *s)
+{
+#if 0
+ // Return true when "s" points to a letter.
+ return (s[0] >= 'a' && s[0] <= 'z') ||
+ // UTF-8: starts with 0xc3
+ ((unsigned char)s[0] == 0xc3 &&
+ ((unsigned char)s[1] == 0xa4 /* ä */ ||
+ (unsigned char)s[1] == 0xb6 /* ö */ ||
+ (unsigned char)s[1] == 0xbc /* ü */ ||
+ (unsigned char)s[1] == 0x9f /* ß */ ));
+#endif
+
+ return lout::unicode::isAlpha (lout::unicode::decodeUtf8 (s));
+}
+
+/**
+ * Given a word, returns a list of the possible hyphenation points.
+ */
+int *Hyphenator::hyphenateWord(const char *word, int *numBreaks)
+{
+ if ((tree == NULL && exceptions ==NULL) || !isHyphenationCandidate (word)) {
+ *numBreaks = 0;
+ return NULL;
+ }
+
+ char *wordLc = platform->textToLower (word, strlen (word));
+
+ // Determine "actual" word. See isCharPartOfActualWord for exact definition.
+
+ // Only this actual word is used, and "startActualWord" is added to the
+ // break positions, so that these refer to the total word.
+ int startActualWord = 0;
+ while (wordLc[startActualWord] &&
+ !isCharPartOfActualWord (wordLc + startActualWord))
+ startActualWord = platform->nextGlyph (wordLc, startActualWord);
+
+ if (wordLc[startActualWord] == 0) {
+ // No letters etc in word: do not hyphenate at all.
+ delete wordLc;
+ *numBreaks = 0;
+ return NULL;
+ }
+
+ int endActualWord = startActualWord, i = endActualWord;
+ while (wordLc[i]) {
+ if (isCharPartOfActualWord (wordLc + i))
+ endActualWord = i;
+ i = platform->nextGlyph (wordLc, i);
+ }
+
+ endActualWord = platform->nextGlyph (wordLc, endActualWord);
+ wordLc[endActualWord] = 0;
+
+ // If the word is an exception, get the stored points.
+ Vector <Integer> *exceptionalBreaks;
+ ConstString key (wordLc + startActualWord);
+ if (exceptions != NULL && (exceptionalBreaks = exceptions->get (&key))) {
+ int *result = new int[exceptionalBreaks->size()];
+ for (int i = 0; i < exceptionalBreaks->size(); i++)
+ result[i] = exceptionalBreaks->get(i)->getValue() + startActualWord;
+ delete wordLc;
+ *numBreaks = exceptionalBreaks->size();
+ return result;
+ }
+
+ // tree == NULL means that there is no pattern file.
+ if (tree == NULL) {
+ delete wordLc;
+ *numBreaks = 0;
+ return NULL;
+ }
+
+ char work[strlen (word) + 3];
+ strcpy (work, ".");
+ strcat (work, wordLc + startActualWord);
+ strcat (work, ".");
+
+ int l = strlen (work);
+ SimpleVector <int> points (l + 1);
+ points.setSize (l + 1, 0);
+
+ Integer null (0);
+
+ for (int i = 0; i < l; i++) {
+ HashTable <Integer, Collection <Integer> > *t = tree;
+ for (int j = i; j < l; j++) {
+ Integer c (work[j]);
+ if (t->contains (&c)) {
+ t = (HashTable <Integer, Collection <Integer> >*) t->get (&c);
+ if (t->contains (&null)) {
+ Vector <Integer> *p = (Vector <Integer>*) t->get (&null);
+
+ for (int k = 0; k < p->size (); k++)
+ points.set(i + k, lout::misc::max (points.get (i + k),
+ p->get(k)->getValue()));
+ }
+ } else
+ break;
+ }
+ }
+
+ // No hyphens in the first two chars or the last two.
+ // Characters are not bytes, so UTF-8 characters must be counted.
+ int numBytes1 = platform->nextGlyph (wordLc + startActualWord, 0);
+ int numBytes2 = platform->nextGlyph (wordLc + startActualWord, numBytes1);
+ for (int i = 0; i < numBytes2; i++)
+ points.set (i + 1, 0);
+
+ // TODO: Characters, not bytes (as above).
+ points.set (points.size() - 2, 0);
+ points.set (points.size() - 3, 0);
+
+ // Examine the points to build the pieces list.
+ SimpleVector <int> breakPos (1);
+
+ int n = lout::misc::min ((int)strlen (word), points.size () - 2);
+ for (int i = 0; i < n; i++) {
+ if (points.get(i + 2) % 2) {
+ breakPos.increase ();
+ breakPos.set (breakPos.size() - 1, i + 1 + startActualWord);
+ }
+ }
+
+ delete wordLc;
+
+ *numBreaks = breakPos.size ();
+ if (*numBreaks == 0)
+ return NULL;
+ else {
+ // Could save some cycles by directly returning the array in the
+ // SimpleVector.
+ int *breakPosArray = new int[*numBreaks];
+ for (int i = 0; i < *numBreaks; i++)
+ breakPosArray[i] = breakPos.get(i);
+ return breakPosArray;
+ }
+}
+
+} // namespace dw
diff --git a/dw/hyphenator.hh b/dw/hyphenator.hh
new file mode 100644
index 00000000..bf123e5a
--- /dev/null
+++ b/dw/hyphenator.hh
@@ -0,0 +1,48 @@
+#ifndef __DW_HYPHENATOR_HH__
+#define __DW_HYPHENATOR_HH__
+
+#include "../lout/object.hh"
+#include "../lout/container.hh"
+#include "../dw/core.hh"
+
+namespace dw {
+
+class Hyphenator: public lout::object::Object
+{
+private:
+ static lout::container::typed::HashTable
+ <lout::object::TypedPair <lout::object::TypedPointer <core::Platform>,
+ lout::object::ConstString>,
+ Hyphenator> *hyphenators;
+
+ /*
+ * Actually, only one method in Platform is needed:
+ * textToLower(). And, IMO, this method is actually not platform
+ * independant, but based on UTF-8. Clarify? Change?
+ */
+ core::Platform *platform;
+ lout::container::typed::HashTable <lout::object::Integer,
+ lout::container::typed::Collection
+ <lout::object::Integer> > *tree;
+ lout::container::typed::HashTable <lout::object::ConstString,
+ lout::container::typed::Vector
+ <lout::object::Integer> > *exceptions;
+ void insertPattern (char *s);
+ void insertException (char *s);
+
+ bool isCharPartOfActualWord (char *s);
+
+public:
+ Hyphenator (core::Platform *platform,
+ const char *patFile, const char *excFile);
+ ~Hyphenator();
+
+ static Hyphenator *getHyphenator (core::Platform *platform,
+ const char *language);
+ static bool isHyphenationCandidate (const char *word);
+ int *hyphenateWord(const char *word, int *numBreaks);
+};
+
+} // namespace dw
+
+#endif // __DW_HYPHENATOR_HH__
diff --git a/dw/layout.hh b/dw/layout.hh
index 45187490..4b80456b 100644
--- a/dw/layout.hh
+++ b/dw/layout.hh
@@ -290,6 +290,11 @@ public:
void scrollPosChanged (View *view, int x, int y);
void viewportSizeChanged (View *view, int width, int height);
+ inline Platform *getPlatform ()
+ {
+ return platform;
+ }
+
/* delegated */
inline int textWidth (style::Font *font, const char *text, int len)
diff --git a/dw/style.cc b/dw/style.cc
index a2240a9e..2a1d4088 100644
--- a/dw/style.cc
+++ b/dw/style.cc
@@ -37,6 +37,7 @@ namespace style {
void StyleAttrs::initValues ()
{
x_link = -1;
+ x_lang[0] = x_lang[1] = 0;
x_img = -1;
x_tooltip = NULL;
textDecoration = TEXT_DECORATION_NONE;
@@ -144,6 +145,8 @@ bool StyleAttrs::equals (object::Object *other) {
listStyleType == otherAttrs->listStyleType &&
cursor == otherAttrs->cursor &&
x_link == otherAttrs->x_link &&
+ x_lang[0] == otherAttrs->x_lang[0] &&
+ x_lang[1] == otherAttrs->x_lang[1] &&
x_img == otherAttrs->x_img &&
x_tooltip == otherAttrs->x_tooltip);
}
@@ -182,6 +185,7 @@ int StyleAttrs::hashValue () {
listStyleType +
cursor +
x_link +
+ x_lang[0] + x_lang[1] +
x_img +
(intptr_t) x_tooltip;
}
@@ -267,6 +271,8 @@ void Style::copyAttrs (StyleAttrs *attrs)
listStyleType = attrs->listStyleType;
cursor = attrs->cursor;
x_link = attrs->x_link;
+ x_lang[0] = attrs->x_lang[0];
+ x_lang[1] = attrs->x_lang[1];
x_img = attrs->x_img;
x_tooltip = attrs->x_tooltip;
}
diff --git a/dw/style.hh b/dw/style.hh
index f69e5015..2422bfa9 100644
--- a/dw/style.hh
+++ b/dw/style.hh
@@ -468,6 +468,10 @@ public:
int x_link;
int x_img;
Tooltip *x_tooltip;
+ char x_lang[2]; /* Either x_lang[0] == x_lang[1] == 0 (no language
+ set), or x_lang contains the RFC 1766 country
+ code in lower case letters. (Only two letters
+ allowed, currently.) */
void initValues ();
void resetValues ();
diff --git a/dw/tablecell.cc b/dw/tablecell.cc
index 5b93fe86..90dc310d 100644
--- a/dw/tablecell.cc
+++ b/dw/tablecell.cc
@@ -42,12 +42,12 @@ TableCell::~TableCell()
{
}
-void TableCell::wordWrap(int wordIndex)
+void TableCell::wordWrap(int wordIndex, bool wrapAll)
{
Textblock::Word *word;
const char *p;
- Textblock::wordWrap (wordIndex);
+ Textblock::wordWrap (wordIndex, wrapAll);
if (charWordIndex == -1) {
word = words->getRef (wordIndex);
diff --git a/dw/tablecell.hh b/dw/tablecell.hh
index 318d1f4e..4bb8633c 100644
--- a/dw/tablecell.hh
+++ b/dw/tablecell.hh
@@ -12,7 +12,7 @@ private:
int charWordIndex, charWordPos;
protected:
- void wordWrap(int wordIndex);
+ void wordWrap (int wordIndex, bool wrapAll);
int getValue ();
void setMaxValue (int maxValue, int value);
diff --git a/dw/textblock.cc b/dw/textblock.cc
index 3778687c..c66fac23 100644
--- a/dw/textblock.cc
+++ b/dw/textblock.cc
@@ -18,13 +18,12 @@
*/
-
#include "textblock.hh"
#include "../lout/msg.h"
#include "../lout/misc.hh"
#include <stdio.h>
-#include <limits.h>
+#include <math.h>
/*
* Local variables
@@ -51,7 +50,6 @@ Textblock::Textblock (bool limitTextWidth)
hasListitemValue = false;
innerPadding = 0;
line1Offset = 0;
- line1OffsetEff = 0;
ignoreLine1OffsetSometimes = false;
mustQueueResize = false;
redrawY = 0;
@@ -67,13 +65,12 @@ Textblock::Textblock (bool limitTextWidth)
* TODO: Some tests would be useful.
*/
lines = new misc::SimpleVector <Line> (1);
- words = new misc::SimpleVector <Word> (1);
+ nonTemporaryLines = 0;
+ words = new misc::NotSoSimpleVector <Word> (1);
anchors = new misc::SimpleVector <Anchor> (1);
//DBG_OBJ_SET_NUM(this, "num_lines", num_lines);
- lastLineWidth = 0;
- lastLineParMax = 0;
wrapRef = -1;
//DBG_OBJ_SET_NUM(this, "last_line_width", last_line_width);
@@ -138,12 +135,27 @@ Textblock::~Textblock ()
*/
void Textblock::sizeRequestImpl (core::Requisition *requisition)
{
+ PRINTF ("[%p] SIZE_REQUEST: ...\n", this);
+
rewrap ();
+ showMissingLines ();
if (lines->size () > 0) {
Line *lastLine = lines->getRef (lines->size () - 1);
- requisition->width =
- misc::max (lastLine->maxLineWidth, lastLineWidth);
+ requisition->width = lastLine->maxLineWidth;
+
+ PRINTF ("[%p] SIZE_REQUEST: lastLine->maxLineWidth = %d\n",
+ this, lastLine->maxLineWidth);
+
+ PRINTF ("[%p] SIZE_REQUEST: lines[0]->boxAscent = %d\n",
+ this, lines->getRef(0)->boxAscent);
+ PRINTF ("[%p] SIZE_REQUEST: lines[%d]->top = %d\n",
+ this, lines->size () - 1, lastLine->top);
+ PRINTF ("[%p] SIZE_REQUEST: lines[%d]->boxAscent = %d\n",
+ this, lines->size () - 1, lastLine->boxAscent);
+ PRINTF ("[%p] SIZE_REQUEST: lines[%d]->boxDescent = %d\n",
+ this, lines->size () - 1, lastLine->boxDescent);
+
/* Note: the breakSpace of the last line is ignored, so breaks
at the end of a textblock are not visible. */
requisition->ascent = lines->getRef(0)->boxAscent;
@@ -151,17 +163,23 @@ void Textblock::sizeRequestImpl (core::Requisition *requisition)
+ lastLine->boxAscent + lastLine->boxDescent -
lines->getRef(0)->boxAscent;
} else {
- requisition->width = lastLineWidth;
+ requisition->width = 0; // before: lastLineWidth;
requisition->ascent = 0;
requisition->descent = 0;
}
+ PRINTF ("[%p] SIZE_REQUEST: inner padding = %d, boxDiffWidth = %d\n",
+ this, innerPadding, getStyle()->boxDiffWidth ());
+
requisition->width += innerPadding + getStyle()->boxDiffWidth ();
requisition->ascent += getStyle()->boxOffsetY ();
requisition->descent += getStyle()->boxRestHeight ();
if (requisition->width < availWidth)
requisition->width = availWidth;
+
+ PRINTF ("[%p] SIZE_REQUEST: %d x %d + %d\n", this, requisition->width,
+ requisition->ascent, requisition->descent);
}
/**
@@ -199,130 +217,125 @@ void Textblock::getWordExtremes (Word *word, core::Extremes *extremes)
void Textblock::getExtremesImpl (core::Extremes *extremes)
{
- core::Extremes wordExtremes;
- Line *line;
- Word *word, *prevWord = NULL;
- int wordIndex, lineIndex;
- int parMax;
+ PRINTF ("[%p] GET_EXTREMES: ...\n", this);
- //DBG_MSG (widget, "extremes", 0, "getExtremesImpl");
- //DBG_MSG_START (widget);
+ showMissingLines ();
if (lines->size () == 0) {
/* empty page */
extremes->minWidth = 0;
extremes->maxWidth = 0;
+
+ PRINTF ("GET_EXTREMES: empty (but %d words)\n", words->size());
} else if (wrapRef == -1) {
/* no rewrap necessary -> values in lines are up to date */
- line = lines->getRef (lines->size () - 1);
- extremes->minWidth = line->maxParMin;
- extremes->maxWidth = misc::max (line->maxParMax, lastLineParMax);
- //DBG_MSG (widget, "extremes", 0, "simple case");
+ Line *lastLine = lines->getRef (lines->size () - 1);
+ extremes->minWidth = lastLine->maxParMin;
+ Word *lastWord = words->getRef (lastLine->lastWord);
+ extremes->maxWidth =
+ misc::max (lastLine->maxParMax,
+ // parMax includes the last space, which we ignore here
+ lastLine->parMax - lastWord->origSpace
+ + lastWord->hyphenWidth);
+
+ PRINTF ("GET_EXTREMES: no rewrap => %d, %d\n",
+ lastLine->maxParMin, lastLine->maxParMax);
} else {
+ int parMax;
/* Calculate the extremes, based on the values in the line from
where a rewrap is necessary. */
- //DBG_MSG (widget, "extremes", 0, "complex case");
+
+ PRINTF ("GET_EXTREMES: complex case ...\n");
if (wrapRef == 0) {
extremes->minWidth = 0;
extremes->maxWidth = 0;
parMax = 0;
} else {
- line = lines->getRef (wrapRef);
+ // Line [wrapRef - 1], not [wrapRef], because maxParMin and
+ // maxParMax include the respective values *in* any line
+ // (accumulated up to the *end*), but we start at line
+ // [wrapRef], so these are not needed.
+
+ Line *line = lines->getRef (wrapRef - 1);
+ Word *lastWord = words->getRef (line->lastWord);
extremes->minWidth = line->maxParMin;
- extremes->maxWidth = line->maxParMax;
+ // consider also accumulated next value of maxParMax: parMax
+ extremes->maxWidth =
+ misc::max (line->maxParMax,
+ // parMax includes the last space, which we ignore here
+ line->parMax - lastWord->origSpace
+ + lastWord->hyphenWidth);
parMax = line->parMax;
-
- //DBG_MSGF (widget, "extremes", 0, "parMin = %d", parMin);
}
- //_MSG ("*** parMin = %d\n", parMin);
-
- int prevWordSpace = 0;
- for (lineIndex = wrapRef; lineIndex < lines->size (); lineIndex++) {
- //DBG_MSGF (widget, "extremes", 0, "line %d", lineIndex);
- //DBG_MSG_START (widget);
+ if (wrapRef < lines->size()) {
int parMin = 0;
-
- line = lines->getRef (lineIndex);
-
- for (wordIndex = line->firstWord; wordIndex <= line->lastWord;
- wordIndex++) {
- word = words->getRef (wordIndex);
+
+ for (int wordIndex = lines->getRef(wrapRef)->firstWord;
+ wordIndex < words->size(); wordIndex++) {
+ Word *word = words->getRef (wordIndex);
+ bool atLastWord = wordIndex == words->size() - 1;
+
+ //printf (" word: ");
+ //printWord (word);
+ //printf ("\n");
+
+ core::Extremes wordExtremes;
getWordExtremes (word, &wordExtremes);
-
if (wordIndex == 0) {
- wordExtremes.minWidth += line1OffsetEff;
- wordExtremes.maxWidth += line1OffsetEff;
- //DEBUG_MSG (DEBUG_SIZE_LEVEL + 1,
- // " (next plus %d)\n", line1OffsetEff);
- }
-
-
- if (extremes->minWidth < wordExtremes.minWidth)
- extremes->minWidth = wordExtremes.minWidth;
-
- _MSG("parMax = %d, wordMaxWidth=%d, prevWordSpace=%d\n",
- parMax, wordExtremes.maxWidth, prevWordSpace);
- if (word->content.type != core::Content::BREAK)
- parMax += prevWordSpace;
- parMax += wordExtremes.maxWidth;
-
- if (prevWord && !canBreakAfter(prevWord)) {
- parMin += prevWordSpace + wordExtremes.minWidth;
- } else {
- parMin = wordExtremes.minWidth;
+ wordExtremes.minWidth += line1Offset;
+ wordExtremes.maxWidth += line1Offset;
}
-
- if (extremes->minWidth < parMin) {
- extremes->minWidth = parMin;
- }
-
- prevWordSpace = word->origSpace;
- prevWord = word;
-
- //DEBUG_MSG (DEBUG_SIZE_LEVEL + 1,
- // " word %s: maxWidth = %d\n",
- // word->content.text,
- // word_extremes.maxWidth);
+
+ // Minimum: between two *possible* breaks (or at the end).
+ if (word->badnessAndPenalty.lineCanBeBroken () || atLastWord) {
+ parMin += wordExtremes.minWidth + word->hyphenWidth;
+ extremes->minWidth = misc::max (extremes->minWidth, parMin);
+ parMin = 0;
+ } else
+ // Shrinkability could be considered, but really does not play a
+ // role.
+ parMin += wordExtremes.minWidth + word->origSpace;
+
+ // Maximum: between two *neccessary* breaks (or at the end).
+ if (word->badnessAndPenalty.lineMustBeBroken () || atLastWord) {
+ parMax += wordExtremes.maxWidth + word->hyphenWidth;
+ extremes->maxWidth = misc::max (extremes->maxWidth, parMax);
+ parMax = 0;
+ } else
+ parMax += wordExtremes.maxWidth + word->origSpace;
+
+ PRINTF (" => ... extremes = %d / %d, parMin = %d, parMax = %d\n",
+ extremes->minWidth, extremes->maxWidth, parMin, parMax);
}
-
- if ((words->getRef(line->lastWord)->content.type
- == core::Content::BREAK ) ||
- lineIndex == lines->size () - 1 ) {
-
- //DEBUG_MSG (DEBUG_SIZE_LEVEL + 2,
- // " parMax = %d, after word %d (%s)\n",
- // parMax, line->last_word - 1,
- // word->content.text);
-
- if (extremes->maxWidth < parMax)
- extremes->maxWidth = parMax;
-
- prevWordSpace = 0;
- parMax = 0;
- }
-
- //DBG_MSG_END (widget);
}
-
- //DEBUG_MSG (DEBUG_SIZE_LEVEL + 3, " Result: %d, %d\n",
- // extremes->minWidth, extremes->maxWidth);
}
- //DBG_MSGF (widget, "extremes", 0, "width difference: %d + %d",
- // innerPadding, getStyle()->boxDiffWidth ());
-
int diff = innerPadding + getStyle()->boxDiffWidth ();
extremes->minWidth += diff;
extremes->maxWidth += diff;
- //DBG_MSG_END (widget);
+ //printf ("[%p] GET_EXTREMES, on textblock that ", this);
+ //if (words->size() == 0)
+ // printf ("is empty\n");
+ //else {
+ // printf ("starts with:\n ");
+ // printWord (words->getRef(0));
+ // printf ("\n");
+ //}
+ //printf ("=> %d / %d\n", extremes->minWidth, extremes->maxWidth);
}
void Textblock::sizeAllocateImpl (core::Allocation *allocation)
{
+ PRINTF ("[%p] SIZE_ALLOCATE: %d, %d, %d x %d + %d\n",
+ this, allocation->x, allocation->y, allocation->width,
+ allocation->ascent, allocation->descent);
+
+ showMissingLines ();
+
int lineIndex, wordIndex;
Line *line;
Word *word;
@@ -461,16 +474,21 @@ void Textblock::markExtremesChange (int ref)
*/
void Textblock::markChange (int ref)
{
- if (ref != -1) {
- //DBG_MSGF (page, "wrap", 0, "markChange (ref = %d)", ref);
+ PRINTF ("[%p] MARK_CHANGE (%d): %d => ...\n", this, ref, wrapRef);
+ /* By the way: ref == -1 may have two different causes: (i) flush()
+ calls "queueResize (-1, true)", when no rewrapping is necessary;
+ and (ii) a word may have parentRef == -1 , when it is not yet
+ added to a line. In the latter case, nothing has to be done
+ now, but addLine(...) will do everything neccessary. */
+ if (ref != -1) {
if (wrapRef == -1)
wrapRef = ref;
else
wrapRef = misc::min (wrapRef, ref);
-
- //DBG_OBJ_SET_NUM (this, "wrap_ref", wrapRef);
}
+
+ PRINTF (" ... => %d\n", wrapRef);
}
void Textblock::setWidth (int width)
@@ -731,361 +749,6 @@ core::Iterator *Textblock::iterator (core::Content::Type mask, bool atEnd)
return new TextblockIterator (this, mask, atEnd);
}
-/*
- * ...
- *
- * availWidth is passed from wordWrap, to avoid calculating it twice.
- */
-void Textblock::justifyLine (Line *line, int availWidth)
-{
- /* To avoid rounding errors, the calculation is based on accumulated
- * values (*_cum). */
- int i;
- int origSpaceSum, origSpaceCum;
- int effSpaceDiffCum, lastEffSpaceDiffCum;
- int diff;
-
- diff = availWidth - lastLineWidth;
- if (diff > 0) {
- origSpaceSum = 0;
- for (i = line->firstWord; i < line->lastWord; i++)
- origSpaceSum += words->getRef(i)->origSpace;
-
- origSpaceCum = 0;
- lastEffSpaceDiffCum = 0;
- for (i = line->firstWord; i < line->lastWord; i++) {
- origSpaceCum += words->getRef(i)->origSpace;
-
- if (origSpaceCum == 0)
- effSpaceDiffCum = lastEffSpaceDiffCum;
- else
- effSpaceDiffCum = diff * origSpaceCum / origSpaceSum;
-
- words->getRef(i)->effSpace = words->getRef(i)->origSpace +
- (effSpaceDiffCum - lastEffSpaceDiffCum);
- //DBG_OBJ_ARRSET_NUM (this, "words.%d.effSpace", i,
- // words->getRef(i)->effSpace);
-
- lastEffSpaceDiffCum = effSpaceDiffCum;
- }
- }
-}
-
-
-Textblock::Line *Textblock::addLine (int wordIndex, bool newPar)
-{
- Line *lastLine;
-
- //DBG_MSG (page, "wrap", 0, "addLine");
- //DBG_MSG_START (page);
-
- lines->increase ();
- //DBG_OBJ_SET_NUM(this, "num_lines", lines->size ());
-
- //DEBUG_MSG (DEBUG_REWRAP_LEVEL, "--- new line %d in %p, with word %d of %d"
- // "\n", lines->size () - 1, page, word_ind, words->size());
-
- lastLine = lines->getRef (lines->size () - 1);
-
- if (lines->size () == 1) {
- lastLine->top = 0;
- lastLine->maxLineWidth = line1OffsetEff;
- lastLine->maxParMin = 0;
- lastLine->maxParMax = 0;
- } else {
- Line *prevLine = lines->getRef (lines->size () - 2);
-
- lastLine->top = prevLine->top + prevLine->boxAscent +
- prevLine->boxDescent + prevLine->breakSpace;
- lastLine->maxLineWidth = prevLine->maxLineWidth;
- lastLine->maxParMin = prevLine->maxParMin;
- lastLine->maxParMax = prevLine->maxParMax;
- }
-
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.top", lines->size () - 1,
- // lastLine->top);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.maxLineWidth", lines->size () - 1,
- // lastLine->maxLineWidth);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.maxParMin", lines->size () - 1,
- // lastLine->maxParMin);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.maxParMax", lines->size () - 1,
- // lastLine->maxParMax);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.parMin", lines->size () - 1,
- // lastLine->parMin);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.parMax", lines->size () - 1,
- // lastLine->parMax);
-
- lastLine->firstWord = wordIndex;
- lastLine->boxAscent = lastLine->contentAscent = 0;
- lastLine->boxDescent = lastLine->contentDescent = 0;
- lastLine->marginDescent = 0;
- lastLine->breakSpace = 0;
- lastLine->leftOffset = 0;
-
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.ascent", lines->size () - 1,
- // lastLine->boxAscent);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.descent", lines->size () - 1,
- // lastLine->boxDescent);
-
- /* update values in line */
- lastLine->maxLineWidth = misc::max (lastLine->maxLineWidth, lastLineWidth);
-
- if (lines->size () > 1)
- lastLineWidth = 0;
- else
- lastLineWidth = line1OffsetEff;
-
- if (newPar) {
- lastLine->maxParMax = misc::max (lastLine->maxParMax, lastLineParMax);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.maxParMax", lines->size () - 1,
- // lastLine->maxParMax);
-
- if (lines->size () > 1) {
- lastLineParMax = 0;
- } else {
- lastLineParMax = line1OffsetEff;
- }
-
- //DBG_OBJ_SET_NUM(this, "lastLineParMax", lastLineParMax);
- }
-
- lastLine->parMax = lastLineParMax;
-
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.parMin", lines->size () - 1,
- // lastLine->parMin);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.parMax", lines->size () - 1,
- // lastLine->parMax);
-
- //DBG_MSG_END (page);
- return lastLine;
-}
-
-/*
- * This method is called in two cases: (i) when a word is added
- * (ii) when a page has to be (partially) rewrapped. It does word wrap,
- * and adds new lines if necessary.
- */
-void Textblock::wordWrap(int wordIndex)
-{
- Line *lastLine;
- Word *word;
- int availWidth, lastSpace, leftOffset, len;
- bool newLine = false, newPar = false, canBreakBefore = true;
- core::Extremes wordExtremes;
-
- //DBG_MSGF (page, "wrap", 0, "wordWrap (%d): %s, width = %d",
- // wordIndex, words->getRef(wordIndex)->content.text),
- // words->getRef(wordIndex)->size.width);
- //DBG_MSG_START (page);
-
- availWidth = this->availWidth - getStyle()->boxDiffWidth() - innerPadding;
- if (limitTextWidth &&
- layout->getUsesViewport () &&
- availWidth > layout->getWidthViewport () - 10)
- availWidth = layout->getWidthViewport () - 10;
-
- word = words->getRef (wordIndex);
- word->effSpace = word->origSpace;
-
- /* Test whether line1Offset can be used. */
- if (wordIndex == 0) {
- if (ignoreLine1OffsetSometimes &&
- line1Offset + word->size.width > availWidth) {
- line1OffsetEff = 0;
- } else {
- int indent = 0;
-
- if (word->content.type == core::Content::WIDGET &&
- word->content.widget->blockLevel() == true) {
- /* don't use text-indent when nesting blocks */
- } else {
- if (core::style::isPerLength(getStyle()->textIndent)) {
- indent = misc::roundInt(this->availWidth *
- core::style::perLengthVal (getStyle()->textIndent));
- } else {
- indent = core::style::absLengthVal (getStyle()->textIndent);
- }
- }
- line1OffsetEff = line1Offset + indent;
- }
- }
-
- if (lines->size () == 0) {
- //DBG_MSG (page, "wrap", 0, "first line");
- newLine = true;
- newPar = true;
- lastLine = NULL;
- } else {
- Word *prevWord = words->getRef (wordIndex - 1);
-
- lastLine = lines->getRef (lines->size () - 1);
-
- if (prevWord->content.type == core::Content::BREAK) {
- //DBG_MSG (page, "wrap", 0, "after a break");
- /* previous word is a break */
- newLine = true;
- newPar = true;
- } else if (!canBreakAfter (prevWord)) {
- canBreakBefore = false;
- // no break within nowrap
- newLine = false;
- newPar = false;
- if (lastLineWidth + prevWord->origSpace + word->size.width >
- availWidth)
- markChange (lines->size () - 1);
- } else if (lastLine->firstWord != wordIndex) {
- // check if we need to break because nowrap sequence is following
- newLine = false;
- int lineWidthNeeded = lastLineWidth + prevWord->origSpace;
- for (int i = wordIndex; i < words->size (); i++) {
- Word *w = words->getRef (i);
-
- if (w->content.type == core::Content::BREAK ||
- (word->content.type == core::Content::WIDGET &&
- word->content.widget->blockLevel()))
- break;
-
- lineWidthNeeded += w->size.width;
-
- if (lineWidthNeeded > availWidth) {
- newLine = true;
- break;
- } else if (canBreakAfter (w)) {
- break;
- }
-
- lineWidthNeeded += w->origSpace;
- }
- }
- }
-
- if (newLine) {
- if (word->style->textAlign == core::style::TEXT_ALIGN_JUSTIFY &&
- lastLine != NULL && !newPar) {
- justifyLine (lastLine, availWidth);
- }
- lastLine = addLine (wordIndex, newPar);
- }
-
- lastLine->lastWord = wordIndex;
- lastLine->boxAscent = misc::max (lastLine->boxAscent, word->size.ascent);
- lastLine->boxDescent = misc::max (lastLine->boxDescent, word->size.descent);
-
- len = word->style->font->ascent;
- if (word->style->valign == core::style::VALIGN_SUPER)
- len += len / 2;
- lastLine->contentAscent = misc::max (lastLine->contentAscent, len);
-
- len = word->style->font->descent;
- if (word->style->valign == core::style::VALIGN_SUB)
- len += word->style->font->ascent / 3;
- lastLine->contentDescent = misc::max (lastLine->contentDescent, len);
-
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.ascent", lines->size () - 1,
- // lastLine->boxAscent);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.descent", lines->size () - 1,
- // lastLine->boxDescent);
-
- if (word->content.type == core::Content::WIDGET) {
- int collapseMarginTop = 0;
-
- lastLine->marginDescent =
- misc::max (lastLine->marginDescent,
- word->size.descent +
- word->content.widget->getStyle()->margin.bottom);
-
- if (lines->size () == 1 &&
- word->content.widget->blockLevel () &&
- getStyle ()->borderWidth.top == 0 &&
- getStyle ()->padding.top == 0) {
- // collapse top margins of parent element and its first child
- // see: http://www.w3.org/TR/CSS21/box.html#collapsing-margins
- collapseMarginTop = getStyle ()->margin.top;
- }
-
- lastLine->boxAscent =
- misc::max (lastLine->boxAscent,
- word->size.ascent,
- word->size.ascent
- + word->content.widget->getStyle()->margin.top
- - collapseMarginTop);
-
- } else {
- lastLine->marginDescent =
- misc::max (lastLine->marginDescent, lastLine->boxDescent);
-
- if (word->content.type == core::Content::BREAK)
- lastLine->breakSpace =
- misc::max (word->content.breakSpace,
- lastLine->marginDescent - lastLine->boxDescent,
- lastLine->breakSpace);
- }
-
- lastSpace = (wordIndex > 0) ? words->getRef(wordIndex - 1)->origSpace : 0;
-
- if (!newLine)
- lastLineWidth += lastSpace;
- if (!newPar) {
- lastLineParMax += lastSpace;
- }
-
- lastLineWidth += word->size.width;
-
- getWordExtremes (word, &wordExtremes);
- lastLineParMax += wordExtremes.maxWidth;
-
- if (!canBreakBefore) {
- lastLineParMin += wordExtremes.minWidth + lastSpace;
- /* This may also increase the accumulated minimum word width. */
- lastLine->maxParMin = misc::max (lastLine->maxParMin, lastLineParMin);
- } else {
- lastLineParMin = wordExtremes.minWidth;
- lastLine->maxParMin =
- misc::max (lastLine->maxParMin, wordExtremes.minWidth);
- }
-
- //DBG_OBJ_SET_NUM(this, "lastLine_par_min", lastLineParMin);
- //DBG_OBJ_SET_NUM(this, "lastLine_par_max", lastLineParMax);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.par_min", lines->size () - 1,
- // lastLine->par_min);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.par_max", lines->size () - 1,
- // lastLine->par_max);
- //DBG_OBJ_ARRSET_NUM (this, "lines.%d.max_word_min", lines->size () - 1,
- // lastLine->max_word_min);
-
- /* Align the line.
- * \todo Use block's style instead once paragraphs become proper blocks.
- */
- if (word->content.type != core::Content::BREAK) {
- switch (word->style->textAlign) {
- case core::style::TEXT_ALIGN_LEFT:
- case core::style::TEXT_ALIGN_JUSTIFY: /* see some lines above */
- case core::style::TEXT_ALIGN_STRING: /* handled elsewhere (in the
- * future) */
- leftOffset = 0;
- break;
- case core::style::TEXT_ALIGN_RIGHT:
- leftOffset = availWidth - lastLineWidth;
- break;
- case core::style::TEXT_ALIGN_CENTER:
- leftOffset = (availWidth - lastLineWidth) / 2;
- break;
- default:
- /* compiler happiness */
- leftOffset = 0;
- }
-
- /* For large lines (images etc), which do not fit into the viewport: */
- if (leftOffset < 0)
- leftOffset = 0;
-
- lastLine->leftOffset = leftOffset;
- }
- mustQueueResize = true;
-
- //DBG_MSG_END (page);
-}
-
/**
* Calculate the size of a widget within the page.
@@ -1144,93 +807,6 @@ void Textblock::calcWidgetSize (core::Widget *widget, core::Requisition *size)
size->descent -= wstyle->margin.bottom;
}
-/**
- * Rewrap the page from the line from which this is necessary.
- * There are basically two times we'll want to do this:
- * either when the viewport is resized, or when the size changes on one
- * of the child widgets.
- */
-void Textblock::rewrap ()
-{
- int i, wordIndex;
- Word *word;
- Line *lastLine;
-
- if (wrapRef == -1)
- /* page does not have to be rewrapped */
- return;
-
- //DBG_MSGF (page, "wrap", 0,
- // "rewrap: wrapRef = %d, in page with %d word(s)",
- // wrapRef, words->size());
- //DBG_MSG_START (page);
-
- /* All lines up from wrapRef will be rebuild from the word list,
- * the line list up from this position is rebuild. */
- lines->setSize (wrapRef);
- lastLineWidth = 0;
- lastLineParMin = 0;
- //DBG_OBJ_SET_NUM(this, "num_lines", lines->size ());
- //DBG_OBJ_SET_NUM(this, "lastLine_width", lastLineWidth);
-
- /* In the word list, start at the last word plus one in the line before. */
- if (wrapRef > 0) {
- /* Note: In this case, wordWrap() will immediately find the need
- * to rewrap the line, since we start with the last one (plus one).
- * This is also the reason, why lastLineWidth is set
- * to the length of the line. */
- lastLine = lines->getRef (lines->size () - 1);
-
- lastLineParMax = lastLine->parMax;
-
- // take line1OffsetEff into account, if lastLine is the first line
- if (lines->size () - 1 == 0)
- lastLineWidth = line1OffsetEff;
-
- wordIndex = lastLine->lastWord + 1;
- for (i = lastLine->firstWord; i < lastLine->lastWord; i++)
- lastLineWidth += (words->getRef(i)->size.width +
- words->getRef(i)->origSpace);
- lastLineWidth += words->getRef(lastLine->lastWord)->size.width;
- } else {
- lastLineParMax = 0;
-
- wordIndex = 0;
- }
-
- for (; wordIndex < words->size (); wordIndex++) {
- word = words->getRef (wordIndex);
-
- if (word->content.type == core::Content::WIDGET)
- calcWidgetSize (word->content.widget, &word->size);
- wordWrap (wordIndex);
-
- if (word->content.type == core::Content::WIDGET) {
- word->content.widget->parentRef = lines->size () - 1;
- //DBG_OBJ_SET_NUM (word->content.widget, "parent_ref",
- // word->content.widget->parent_ref);
- }
-
- //DEBUG_MSG(DEBUG_REWRAP_LEVEL,
- // "Assigning parent_ref = %d to rewrapped word %d, "
- // "in page with %d word(s)\n",
- // lines->size () - 1, wordIndex, words->size());
-
- /* todo_refactoring:
- if (word->content.type == DW_CONTENT_ANCHOR)
- p_Dw_gtk_viewport_change_anchor
- (widget, word->content.anchor,
- Dw_page_line_total_y_offset (page,
- &page->lines[lines->size () - 1]));
- */
- }
-
- /* Next time, the page will not have to be rewrapped. */
- wrapRef = -1;
-
- //DBG_MSG_END (page);
-}
-
/*
* Draw the decorations on a word.
*/
@@ -1314,14 +890,58 @@ void Textblock::drawText(core::View *view, core::style::Style *style,
}
/*
- * Draw a word of text.
+ * Draw a word of text. TODO New description;
*/
-void Textblock::drawWord(int wordIndex, core::View *view,core::Rectangle *area,
- int xWidget, int yWidgetBase)
+void Textblock::drawWord (Line *line, int wordIndex1, int wordIndex2,
+ core::View *view, core::Rectangle *area,
+ int xWidget, int yWidgetBase)
+{
+ core::style::Style *style = words->getRef(wordIndex1)->style;
+ bool drawHyphen = wordIndex2 == line->lastWord
+ && words->getRef(wordIndex2)->hyphenWidth > 0;
+
+ if (wordIndex1 == wordIndex2 && !drawHyphen) {
+ // Simple case, where copying in one buffer is not needed.
+ Word *word = words->getRef (wordIndex1);
+ drawWord0 (wordIndex1, wordIndex2, word->content.text, word->size.width,
+ style, view, area, xWidget, yWidgetBase);
+ } else {
+ // Concaternate all words in a new buffer.
+ int l = 0, totalWidth = 0;
+ for (int i = wordIndex1; i <= wordIndex2; i++) {
+ Word *w = words->getRef (i);
+ l += strlen (w->content.text);
+ totalWidth += w->size.width;
+ }
+
+ char text[l + (drawHyphen ? 2 : 0) + 1];
+ int p = 0;
+ for (int i = wordIndex1; i <= wordIndex2; i++) {
+ const char * t = words->getRef(i)->content.text;
+ strcpy (text + p, t);
+ p += strlen (t);
+ }
+
+ if(drawHyphen) {
+ text[p++] = 0xc2;
+ text[p++] = 0xad;
+ text[p++] = 0;
+ }
+
+ drawWord0 (wordIndex1, wordIndex2, text, totalWidth,
+ style, view, area, xWidget, yWidgetBase);
+ }
+}
+
+/**
+ * TODO Comment
+ */
+void Textblock::drawWord0 (int wordIndex1, int wordIndex2,
+ const char *text, int totalWidth,
+ core::style::Style *style, core::View *view,
+ core::Rectangle *area, int xWidget, int yWidgetBase)
{
- Word *word = words->getRef(wordIndex);
int xWorld = allocation.x + xWidget;
- core::style::Style *style = word->style;
int yWorldBase;
/* Adjust the text baseline if the word is <SUP>-ed or <SUB>-ed. */
@@ -1333,33 +953,53 @@ void Textblock::drawWord(int wordIndex, core::View *view,core::Rectangle *area,
yWorldBase = yWidgetBase + allocation.y;
drawText (view, style, core::style::Color::SHADING_NORMAL, xWorld,
- yWorldBase, word->content.text, 0, strlen (word->content.text));
+ yWorldBase, text, 0, strlen (text));
if (style->textDecoration)
decorateText(view, style, core::style::Color::SHADING_NORMAL, xWorld,
- yWorldBase, word->size.width);
+ yWorldBase, totalWidth);
for (int layer = 0; layer < core::HIGHLIGHT_NUM_LAYERS; layer++) {
- if (hlStart[layer].index <= wordIndex &&
- hlEnd[layer].index >= wordIndex) {
- const int wordLen = strlen (word->content.text);
+ if (wordIndex1 <= hlEnd[layer].index &&
+ wordIndex2 >= hlStart[layer].index) {
+ const int wordLen = strlen (text);
int xStart, width;
- int firstCharIdx = 0;
- int lastCharIdx = wordLen;
-
- if (wordIndex == hlStart[layer].index)
- firstCharIdx = misc::min (hlStart[layer].nChar, wordLen);
+ int firstCharIdx;
+ int lastCharIdx;
+
+ if (hlStart[layer].index < wordIndex1)
+ firstCharIdx = 0;
+ else {
+ firstCharIdx =
+ misc::min (hlStart[layer].nChar,
+ (int)strlen (words->getRef(hlStart[layer].index)
+ ->content.text));
+ for (int i = wordIndex1; i < hlStart[layer].index; i++)
+ // It can be assumed that all words from wordIndex1 to
+ // wordIndex2 have content type TEXT.
+ firstCharIdx += strlen (words->getRef(i)->content.text);
+ }
- if (wordIndex == hlEnd[layer].index)
- lastCharIdx = misc::min (hlEnd[layer].nChar, wordLen);
+ if (hlEnd[layer].index > wordIndex2)
+ lastCharIdx = wordLen;
+ else {
+ lastCharIdx =
+ misc::min (hlEnd[layer].nChar,
+ (int)strlen (words->getRef(hlEnd[layer].index)
+ ->content.text));
+ for (int i = wordIndex1; i < hlEnd[layer].index; i++)
+ // It can be assumed that all words from wordIndex1 to
+ // wordIndex2 have content type TEXT.
+ lastCharIdx += strlen (words->getRef(i)->content.text);
+ }
xStart = xWorld;
if (firstCharIdx)
- xStart += textWidth (word->content.text, 0, firstCharIdx, style);
+ xStart += textWidth (text, 0, firstCharIdx, style);
if (firstCharIdx == 0 && lastCharIdx == wordLen)
- width = word->size.width;
+ width = totalWidth;
else
- width = textWidth (word->content.text, firstCharIdx,
+ width = textWidth (text, firstCharIdx,
lastCharIdx - firstCharIdx, style);
if (width > 0) {
/* Highlight text */
@@ -1376,7 +1016,7 @@ void Textblock::drawWord(int wordIndex, core::View *view,core::Rectangle *area,
/* Highlight the text. */
drawText (view, style, core::style::Color::SHADING_INVERSE, xStart,
- yWorldBase, word->content.text, firstCharIdx,
+ yWorldBase, text, firstCharIdx,
lastCharIdx - firstCharIdx);
if (style->textDecoration)
@@ -1445,18 +1085,11 @@ void Textblock::drawLine (Line *line, core::View *view, core::Rectangle *area)
int xWidget = lineXOffsetWidget(line);
int yWidgetBase = lineYOffsetWidget (line) + line->boxAscent;
- /* Here's an idea on how to optimize this routine to minimize the number
- * of drawing calls:
- *
- * Copy the text from the words into a buffer, adding a new word
- * only if: the attributes match, and the spacing is either zero or
- * equal to the width of ' '. In the latter case, copy a " " into
- * the buffer. Then draw the buffer. */
-
for (int wordIndex = line->firstWord;
wordIndex <= line->lastWord && xWidget < area->x + area->width;
wordIndex++) {
Word *word = words->getRef(wordIndex);
+ int wordSize = word->size.width;
if (xWidget + word->size.width + word->effSpace >= area->x) {
if (word->content.type == core::Content::TEXT ||
@@ -1470,12 +1103,26 @@ void Textblock::drawLine (Line *line, core::View *view, core::Rectangle *area)
if (child->intersects (area, &childArea))
child->draw (view, &childArea);
} else {
+ /* TODO: include in drawWord:
if (word->style->hasBackground ()) {
drawBox (view, word->style, area, xWidget,
yWidgetBase - line->boxAscent, word->size.width,
line->boxAscent + line->boxDescent, false);
- }
- drawWord(wordIndex, view, area, xWidget, yWidgetBase);
+ }*/
+ int wordIndex2 = wordIndex;
+ while (wordIndex2 < line->lastWord &&
+ words->getRef(wordIndex2)->hyphenWidth > 0 &&
+ word->style == words->getRef(wordIndex2 + 1)->style)
+ wordIndex2++;
+
+ drawWord(line, wordIndex, wordIndex2, view, area,
+ xWidget, yWidgetBase);
+ wordSize = 0;
+ for (int i = wordIndex; i <= wordIndex2; i++)
+ wordSize += words->getRef(i)->size.width;
+
+ wordIndex = wordIndex2;
+ word = words->getRef(wordIndex);
}
}
if (word->effSpace > 0 && wordIndex < line->lastWord &&
@@ -1483,16 +1130,16 @@ void Textblock::drawLine (Line *line, core::View *view, core::Rectangle *area)
core::Content::BREAK) {
if (word->spaceStyle->hasBackground ())
drawBox (view, word->spaceStyle, area,
- xWidget + word->size.width,
+ xWidget + wordSize,
yWidgetBase - line->boxAscent, word->effSpace,
line->boxAscent + line->boxDescent, false);
- drawSpace(wordIndex, view, area, xWidget + word->size.width,
+ drawSpace(wordIndex, view, area, xWidget + wordSize,
yWidgetBase);
}
}
}
- xWidget += word->size.width + word->effSpace;
+ xWidget += wordSize + word->effSpace;
}
}
@@ -1536,6 +1183,7 @@ int Textblock::findLineOfWord (int wordIndex)
{
int high = lines->size () - 1, index, low = 0;
+ // TODO regard also not-yet-existing lines?
if (wordIndex < 0 || wordIndex >= words->size ())
return -1;
@@ -1599,6 +1247,9 @@ Textblock::Word *Textblock::findWord (int x, int y, bool *inSpace)
void Textblock::draw (core::View *view, core::Rectangle *area)
{
+ PRINTF ("DRAW: %d, %d, %d x %d\n",
+ area->x, area->y, area->width, area->height);
+
int lineIndex;
Line *line;
@@ -1619,40 +1270,32 @@ void Textblock::draw (core::View *view, core::Rectangle *area)
* Add a new word (text, widget etc.) to a page.
*/
Textblock::Word *Textblock::addWord (int width, int ascent, int descent,
+ bool canBeHyphenated,
core::style::Style *style)
{
- Word *word;
-
words->increase ();
+ Word *word = words->getLastRef ();
+ fillWord (word, width, ascent, descent, canBeHyphenated, style);
+ return word;
+}
- word = words->getRef (words->size() - 1);
+void Textblock::fillWord (Word *word, int width, int ascent, int descent,
+ bool canBeHyphenated, core::style::Style *style)
+{
word->size.width = width;
word->size.ascent = ascent;
word->size.descent = descent;
- word->origSpace = 0;
- word->effSpace = 0;
+ word->origSpace = word->effSpace = word->stretchability =
+ word->shrinkability = 0;
+ word->hyphenWidth = 0;
+ word->badnessAndPenalty.setPenaltyProhibitBreak ();
word->content.space = false;
- word->content.breakType = core::Content::BREAK_NO;
-
- //DBG_OBJ_ARRSET_NUM (this, "words.%d.size.width", words->size() - 1,
- // word->size.width);
- //DBG_OBJ_ARRSET_NUM (this, "words.%d.size.descent", words->size() - 1,
- // word->size.descent);
- //DBG_OBJ_ARRSET_NUM (this, "words.%d.size.ascent", words->size() - 1,
- // word->size.ascent);
- //DBG_OBJ_ARRSET_NUM (this, "words.%d.orig_space", words->size() - 1,
- // word->orig_space);
- //DBG_OBJ_ARRSET_NUM (this, "words.%d.effSpace", words->size() - 1,
- // word->eff_space);
- //DBG_OBJ_ARRSET_NUM (this, "words.%d.content.space", words->size() - 1,
- // word->content.space);
+ word->canBeHyphenated = canBeHyphenated;
word->style = style;
word->spaceStyle = style;
style->ref ();
style->ref ();
-
- return word;
}
/*
@@ -1763,25 +1406,129 @@ void Textblock::calcTextSize (const char *text, size_t len,
size->ascent += (style->font->ascent / 2);
}
-
/**
- * Add a word to the page structure.
+ * Add a word to the page structure. If it contains soft hyphens, it is
+ * divided.
*/
void Textblock::addText (const char *text, size_t len,
core::style::Style *style)
{
- Word *word;
- core::Requisition size;
+ PRINTF ("[%p] ADD_TEXT (%d characters)\n", this, (int)len);
+
+ // Count hyphens.
+ int numHyphens = 0;
+ for (int i = 0; i < (int)len - 1; i++)
+ // (0xc2, 0xad) is the UTF-8 representation of a soft hyphen (Unicode
+ // 0xc2).
+ if((unsigned char)text[i] == 0xc2 && (unsigned char)text[i + 1] == 0xad)
+ numHyphens++;
+
+ if (numHyphens == 0) {
+ // Simple (and often) case: no soft hyphens. May still be hyphenated
+ // automatically.
+ core::Requisition size;
+ calcTextSize (text, len, style, &size);
+ addText0 (text, len, true, style, &size);
+ } else {
+ PRINTF("HYPHENATION: '");
+ for (size_t i = 0; i < len; i++)
+ PUTCHAR(text[i]);
+ PRINTF("', with %d hyphen(s)\n", numHyphens);
+
+ // Store hyphen positions.
+ int n = 0, hyphenPos[numHyphens], breakPos[numHyphens];
+ for (size_t i = 0; i < len - 1; i++)
+ if((unsigned char)text[i] == 0xc2 &&
+ (unsigned char)text[i + 1] == 0xad) {
+ hyphenPos[n] = i;
+ breakPos[n] = i - 2 * n;
+ n++;
+ }
+
+ // Get text without hyphens. (There are numHyphens + 1 parts in the word,
+ // and 2 * numHyphens bytes less, 2 for each hyphen, are needed.)
+ char textWithoutHyphens[len - 2 * numHyphens];
+ int start = 0; // related to "text"
+ for (int i = 0; i < numHyphens + 1; i++) {
+ int end = (i == numHyphens) ? len : hyphenPos[i];
+ memmove (textWithoutHyphens + start - 2 * i, text + start,
+ end - start);
+ start = end + 2;
+ }
+
+ PRINTF("H... without hyphens: '");
+ for (size_t i = 0; i < len - 2 * numHyphens; i++)
+ PUTCHAR(textWithoutHyphens[i]);
+ PRINTF("'\n");
+
+ core::Requisition wordSize[numHyphens + 1];
+ calcTextSizes (textWithoutHyphens, len - 2 * numHyphens, style,
+ numHyphens, breakPos, wordSize);
+
+ // Finished!
+ for (int i = 0; i < numHyphens + 1; i++) {
+ int start = (i == 0) ? 0 : hyphenPos[i - 1] + 2;
+ int end = (i == numHyphens) ? len : hyphenPos[i];
+ // Do not anymore hyphen automatically.
+ addText0 (text + start, end - start, false, style, &wordSize[i]);
+
+ PRINTF("H... [%d] '", i);
+ for (int j = start; j < end; j++)
+ PUTCHAR(text[j]);
+ PRINTF("' added\n");
+
+ if(i < numHyphens) {
+ addHyphen ();
+ PRINTF("H... yphen added\n");
+ }
+ }
+ }
+}
+
+void Textblock::calcTextSizes (const char *text, size_t textLen,
+ core::style::Style *style,
+ int numBreaks, int *breakPos,
+ core::Requisition *wordSize)
+{
+ // The size of the last part is calculated in a simple way.
+ int lastStart = breakPos[numBreaks - 1];
+ calcTextSize (text + lastStart, textLen - lastStart, style,
+ &wordSize[numBreaks]);
+
+ PRINTF("H... [%d] '", numBreaks);
+ for (size_t i = 0; i < textLen - lastStart; i++)
+ PUTCHAR(text[i + lastStart]);
+ PRINTF("' -> %d\n", wordSize[numBreaks].width);
+
+ // The rest is more complicated. TODO Documentation.
+ for (int i = numBreaks - 1; i >= 0; i--) {
+ int start = (i == 0) ? 0 : breakPos[i - 1];
+ calcTextSize (text + start, textLen - start, style, &wordSize[i]);
+
+ PRINTF("H... [%d] '", i);
+ for (size_t j = 0; j < textLen - start; j++)
+ PUTCHAR(text[j + start]);
+ PRINTF("' -> %d\n", wordSize[i].width);
+
+ for (int j = i + 1; j < numBreaks + 1; j++) {
+ wordSize[i].width -= wordSize[j].width;
+ PRINTF("H... - %d = %d\n", wordSize[j].width, wordSize[i].width);
+ }
+ }
+}
- calcTextSize (text, len, style, &size);
- word = addWord (size.width, size.ascent, size.descent, style);
+/**
+ * Add a word (without hyphens) to the page structure.
+ */
+void Textblock::addText0 (const char *text, size_t len, bool canBeHyphenated,
+ core::style::Style *style, core::Requisition *size)
+{
+ Word *word = addWord (size->width, size->ascent, size->descent,
+ canBeHyphenated, style);
word->content.type = core::Content::TEXT;
word->content.text = layout->textZone->strndup(text, len);
- //DBG_OBJ_ARRSET_STR (page, "words.%d.content.text", words->size() - 1,
- // word->content.text);
-
- wordWrap (words->size () - 1);
+ wordWrap (words->size () - 1, false);
}
/**
@@ -1798,11 +1545,13 @@ void Textblock::addWidget (core::Widget *widget, core::style::Style *style)
* end of this function, the correct value is assigned. */
widget->parentRef = -1;
+ PRINTF ("%p becomes child of %p\n", widget, this);
+
widget->setParent (this);
widget->setStyle (style);
calcWidgetSize (widget, &size);
- word = addWord (size.width, size.ascent, size.descent, style);
+ word = addWord (size.width, size.ascent, size.descent, false, style);
word->content.type = core::Content::WIDGET;
word->content.widget = widget;
@@ -1810,8 +1559,7 @@ void Textblock::addWidget (core::Widget *widget, core::style::Style *style)
//DBG_OBJ_ARRSET_PTR (page, "words.%d.content.widget", words->size() - 1,
// word->content.widget);
- wordWrap (words->size () - 1);
- word->content.widget->parentRef = lines->size () - 1;
+ wordWrap (words->size () - 1, false);
//DBG_OBJ_SET_NUM (word->content.widget, "parent_ref",
// word->content.widget->parent_ref);
@@ -1868,33 +1616,81 @@ bool Textblock::addAnchor (const char *name, core::style::Style *style)
void Textblock::addSpace (core::style::Style *style)
{
int wordIndex = words->size () - 1;
+ if (wordIndex >= 0) {
+ fillSpace (words->getRef(wordIndex), style);
+ accumulateWordData (wordIndex);
+ }
+}
+
+void Textblock::fillSpace (Word *word, core::style::Style *style)
+{
+ // Old comment:
+ //
+ // According to
+ // http://www.w3.org/TR/CSS2/text.html#white-space-model: "line
+ // breaking opportunities are determined based on the text
+ // prior to the white space collapsing steps".
+ //
+ // So we call addBreakOption () for each Textblock::addSpace ()
+ // call. This is important e.g. to be able to break between
+ // foo and bar in: <span style="white-space:nowrap">foo </span>
+ // bar
+ //
+ // TODO: Re-evaluate again.
+
+ // TODO: This line does not work: addBreakOption (word, style);
+
+ if (!word->content.space) {
+ // Do not override a previously set break penalty.
+ if (!word->badnessAndPenalty.lineMustBeBroken()) {
+ switch (style->whiteSpace) {
+ case core::style::WHITE_SPACE_NORMAL:
+ case core::style::WHITE_SPACE_PRE_LINE:
+ word->badnessAndPenalty.setPenalty (0);
+ break;
+
+ case core::style::WHITE_SPACE_PRE:
+ case core::style::WHITE_SPACE_NOWRAP:
+ case core::style::WHITE_SPACE_PRE_WRAP:
+ word->badnessAndPenalty.setPenaltyProhibitBreak ();
+ break;
+ }
+ }
+
+ word->content.space = true;
+ word->effSpace = word->origSpace = style->font->spaceWidth +
+ style->wordSpacing;
+ word->stretchability = word->origSpace / 2;
+ if(style->textAlign == core::style::TEXT_ALIGN_JUSTIFY)
+ word->shrinkability = word->origSpace / 3;
+ else
+ word->shrinkability = 0;
+
+ //DBG_OBJ_ARRSET_NUM (this, "words.%d.origSpace", wordIndex,
+ // word->origSpace);
+ //DBG_OBJ_ARRSET_NUM (this, "words.%d.effSpace", wordIndex,
+ // word->effSpace);
+ //DBG_OBJ_ARRSET_NUM (this, "words.%d.content.space", wordIndex,
+ // word->content.space);
+
+ word->spaceStyle->unref ();
+ word->spaceStyle = style;
+ style->ref ();
+ }
+}
+
+void Textblock::addHyphen ()
+{
+ int wordIndex = words->size () - 1;
if (wordIndex >= 0) {
Word *word = words->getRef(wordIndex);
-
- // According to http://www.w3.org/TR/CSS2/text.html#white-space-model:
- // "line breaking opportunities are determined based on the text prior
- // to the white space collapsing steps".
- // So we call addBreakOption () for each Textblock::addSpace () call.
- // This is important e.g. to be able to break between foo and bar in:
- // <span style="white-space:nowrap">foo </span> bar
- addBreakOption (style);
- if (!word->content.space) {
- word->content.space = true;
- word->effSpace = word->origSpace = style->font->spaceWidth +
- style->wordSpacing;
-
- //DBG_OBJ_ARRSET_NUM (this, "words.%d.origSpace", wordIndex,
- // word->origSpace);
- //DBG_OBJ_ARRSET_NUM (this, "words.%d.effSpace", wordIndex,
- // word->effSpace);
- //DBG_OBJ_ARRSET_NUM (this, "words.%d.content.space", wordIndex,
- // word->content.space);
- word->spaceStyle->unref ();
- word->spaceStyle = style;
- style->ref ();
- }
+ word->badnessAndPenalty.setPenalty (HYPHEN_BREAK);
+ // TODO Optimize? Like spaces?
+ word->hyphenWidth = layout->textWidth (word->style->font, "\xc2\xad", 2);
+
+ accumulateWordData (wordIndex);
}
}
@@ -1967,10 +1763,11 @@ void Textblock::addParbreak (int space, core::style::Style *style)
return;
}
- word = addWord (0, 0, 0, style);
+ word = addWord (0, 0, 0, false, style);
word->content.type = core::Content::BREAK;
+ word->badnessAndPenalty.setPenaltyForceBreak ();
word->content.breakSpace = space;
- wordWrap (words->size () - 1);
+ wordWrap (words->size () - 1, false);
}
/*
@@ -1984,14 +1781,16 @@ void Textblock::addLinebreak (core::style::Style *style)
words->getRef(words->size () - 1)->content.type == core::Content::BREAK)
// An <BR> in an empty line gets the height of the current font
// (why would someone else place it here?), ...
- word = addWord (0, style->font->ascent, style->font->descent, style);
+ word =
+ addWord (0, style->font->ascent, style->font->descent, false, style);
else
// ... otherwise, it has no size (and does not enlarge the line).
- word = addWord (0, 0, 0, style);
+ word = addWord (0, 0, 0, false, style);
word->content.type = core::Content::BREAK;
+ word->badnessAndPenalty.setPenaltyForceBreak ();
word->content.breakSpace = 0;
- wordWrap (words->size () - 1);
+ wordWrap (words->size () - 1, false);
}
@@ -2064,6 +1863,9 @@ void Textblock::handOverBreak (core::style::Style *style)
*/
void Textblock::flush ()
{
+ PRINTF ("[%p] FLUSH => %s (parentRef = %d)\n",
+ this, mustQueueResize ? "true" : "false", parentRef);
+
if (mustQueueResize) {
queueResize (-1, true);
mustQueueResize = false;
diff --git a/dw/textblock.hh b/dw/textblock.hh
index 3f98f878..0c3c6870 100644
--- a/dw/textblock.hh
+++ b/dw/textblock.hh
@@ -1,15 +1,28 @@
#ifndef __DW_TEXTBLOCK_HH__
#define __DW_TEXTBLOCK_HH__
+#include <limits.h>
+
#include "core.hh"
#include "../lout/misc.hh"
+// These were used when improved line breaking and hyphenation were
+// implemented. Should be cleaned up; perhaps reactivate RTFL again.
+#define PRINTF(fmt, ...)
+#define PUTCHAR(ch)
+
namespace dw {
/**
* \brief A Widget for rendering text blocks, i.e. paragraphs or sequences
* of paragraphs.
*
+ * <div style="border: 2px solid #ffff00; margin-top: 0.5em;
+ * margin-bottom: 0.5em; padding: 0.5em 1em;
+ * background-color: #ffffe0"><b>Info:</b> The recent changes (line
+ * breaking and hyphenation) have not yet been incorporated into this
+ * documentation. See \ref dw-line-breaking.</div>
+ *
* <h3>Signals</h3>
*
* dw::Textblock uses the signals defined in
@@ -130,7 +143,80 @@ namespace dw {
*/
class Textblock: public core::Widget
{
+private:
+ /**
+ * This class encapsulates the badness/penalty calculation, and so
+ * (i) makes changes (hopefully) simpler, and (ii) hides the
+ * integer arithmetics (floating point arithmetics avoided for
+ * performance reasons). Unfortunately, the value range of the
+ * badness is not well defined, so fiddling with the penalties is a
+ * bit difficult.
+ */
+ class BadnessAndPenalty
+ {
+ private:
+ enum { NOT_STRETCHABLE, QUITE_LOOSE, BADNESS_VALUE, TOO_TIGHT }
+ badnessState;
+ enum { FORCE_BREAK, PROHIBIT_BREAK, PENALTY_VALUE } penaltyState;
+ int ratio; // ratio is only defined when badness is defined
+ int badness, penalty;
+
+ // for debugging:
+ int totalWidth, idealWidth, totalStretchability, totalShrinkability;
+
+ // "Infinity levels" are used to represent very large numbers,
+ // including "quasi-infinite" numbers. A couple of infinity
+ // level and number can be mathematically represented as
+ //
+ // number * N ^ (infinity level)
+ //
+ // where N is a number which is large enough. Practically,
+ // infinity levels are used to circumvent limited ranges for
+ // integer numbers.
+
+ // Here, all infinity levels have got special meanings.
+ enum {
+ INF_VALUE = 0, /* simple values */
+ INF_LARGE, /* large values, like QUITE_LOOSE */
+ INF_NOT_STRETCHABLE, /* reserved for NOT_STRECTHABLE */
+ INF_PENALTIES, /* used for penalties */
+ INF_TOO_TIGHT, /* used for lines, which are too tight;
+ that this is the last value means
+ that lines, which are too tight, are
+ regarded as the worst case */
+ INF_MAX = INF_TOO_TIGHT
+ };
+
+ int badnessValue (int infLevel);
+ int penaltyValue (int infLevel);
+
+ public:
+ void calcBadness (int totalWidth, int idealWidth,
+ int totalStretchability, int totalShrinkability);
+ void setPenalty (int penalty);
+ void setPenaltyProhibitBreak ();
+ void setPenaltyForceBreak ();
+
+ bool lineLoose ();
+ bool lineTight ();
+ bool lineTooTight ();
+ bool lineMustBeBroken ();
+ bool lineCanBeBroken ();
+ int compareTo (BadnessAndPenalty *other);
+
+ void print ();
+ };
+
protected:
+ enum {
+ /**
+ * The penalty for hyphens, multiplied with 100. So, 100 means
+ * 1.0. See dw::Textblock::BadnessAndPenalty::setPenalty for
+ * more details.
+ */
+ HYPHEN_BREAK = 100
+ };
+
struct Line
{
int firstWord; /* first word's index in word vector */
@@ -145,14 +231,35 @@ protected:
* widgets within this line. */
int marginDescent;
- /* The following members contain accumulated values, from the top
- * down to the line before. */
- int maxLineWidth; /* maximum of all line widths */
- int maxParMin; /* maximum of all paragraph minima */
- int maxParMax; /* maximum of all paragraph maxima */
- int parMax; /* the maximal total width down from the last
- * paragraph start, to the *beginning* of the
- * line */
+ /* The following members contain accumulated values, from the
+ * top down to this line. Please notice a change: until
+ * recently, the values were accumulated up to the last line,
+ * not this line.
+ *
+ * Also, keep in mind that at the end of a line, the space of
+ * the last word is ignored, but instead, the hyphen width must
+ * be considered.*/
+
+ int maxLineWidth; /* Maximum of all line widths, including this
+ * line. Does not include the last space, but
+ * the last hyphen width. */
+ int maxParMin; /* Maximum of all paragraph minima, including
+ * this line. */
+ int maxParMax; /* Maximum of all paragraph maxima. This line
+ * is only included, if it is the last line of
+ * the paragraph (last word is a forced
+ * break); otherwise, it is the value of the
+ * last paragraph. For this reason, consider
+ * also parMax. */
+ int parMax; /* The maximal total width down from the last
+ * paragraph start, to the *end* of this line.
+ * The space at the end of this line is
+ * included, but not the hyphen width (as
+ * opposed to the other values). So, in some
+ * cases, the space has to be subtracted and
+ * the hyphen width to be added, to compare it
+ * to maxParMax. (Search the code for
+ * occurances.) */
};
struct Word
@@ -161,15 +268,39 @@ protected:
core::Requisition size;
/* Space after the word, only if it's not a break: */
short origSpace; /* from font, set by addSpace */
+ short stretchability, shrinkability;
short effSpace; /* effective space, set by wordWrap,
* used for drawing etc. */
+ short hyphenWidth; /* Additional width, when a word is part
+ * (except the last part) of a hyphenationed
+ * word. Has to be added to the width, when
+ * this is the last word of the line, and
+ * "hyphenWidth > 0" is also used to decide
+ * weather to draw a hyphen. */
core::Content content;
+ bool canBeHyphenated;
+
+ // accumulated values, relative to the beginning of the line
+ int totalWidth; /* The sum of all word widths; plus all
+ spaces, excluding the one of this
+ word; plus the hypthen width of this
+ word (but of course, no hyphen
+ widths of previous words. In other
+ words: the value compared to the
+ ideal width of the line, if the line
+ would be broken after this word. */
+ int totalStretchability; // includes all *before* current word
+ int totalShrinkability; // includes all *before* current word
+ BadnessAndPenalty badnessAndPenalty; /* when line is broken after this
+ * word */
core::style::Style *style;
core::style::Style *spaceStyle; /* initially the same as of the word,
later set by a_Dw_page_add_space */
};
+ void printWord (Word *word);
+
struct Anchor
{
char *name;
@@ -236,14 +367,11 @@ protected:
/* These values are set by set_... */
int availWidth, availAscent, availDescent;
- int lastLineWidth;
- int lastLineParMin; /* width of the current non-breakable word sequence
- * used by wordWrap () */
- int lastLineParMax;
int wrapRef; /* [0 based] */
lout::misc::SimpleVector <Line> *lines;
- lout::misc::SimpleVector <Word> *words;
+ int nonTemporaryLines;
+ lout::misc::NotSoSimpleVector <Word> *words;
lout::misc::SimpleVector <Anchor> *anchors;
struct {int index, nChar;}
@@ -254,32 +382,38 @@ protected:
void queueDrawRange (int index1, int index2);
void getWordExtremes (Word *word, core::Extremes *extremes);
- inline bool canBreakAfter (Word *word)
- {
- return word->content.breakType == core::Content::BREAK_OK;
- }
void markChange (int ref);
- void justifyLine (Line *line, int availWidth);
- Line *addLine (int wordInd, bool newPar);
+ void justifyLine (Line *line, int diff);
+ Line *addLine (int firstWord, int lastWord, bool temporary);
void calcWidgetSize (core::Widget *widget, core::Requisition *size);
void rewrap ();
- void decorateText(core::View *view, core::style::Style *style,
- core::style::Color::Shading shading,
- int x, int yBase, int width);
- void drawText(core::View *view, core::style::Style *style,
- core::style::Color::Shading shading, int x, int y,
- const char *text, int start, int len);
- void drawWord(int wordIndex, core::View *view, core::Rectangle *area,
- int xWidget, int yWidgetBase);
- void drawSpace(int wordIndex, core::View *view, core::Rectangle *area,
- int xWidget, int yWidgetBase);
+ void showMissingLines ();
+ void removeTemporaryLines ();
+
+ void decorateText (core::View *view, core::style::Style *style,
+ core::style::Color::Shading shading,
+ int x, int yBase, int width);
+ void drawText (core::View *view, core::style::Style *style,
+ core::style::Color::Shading shading, int x, int y,
+ const char *text, int start, int len);
+ void drawWord (Line *line, int wordIndex1, int wordIndex2, core::View *view,
+ core::Rectangle *area, int xWidget, int yWidgetBase);
+ void drawWord0 (int wordIndex1, int wordIndex2,
+ const char *text, int totalWidth,
+ core::style::Style *style, core::View *view,
+ core::Rectangle *area, int xWidget, int yWidgetBase);
+ void drawSpace (int wordIndex, core::View *view, core::Rectangle *area,
+ int xWidget, int yWidgetBase);
void drawLine (Line *line, core::View *view, core::Rectangle *area);
int findLineIndex (int y);
int findLineOfWord (int wordIndex);
Word *findWord (int x, int y, bool *inSpace);
- Word *addWord (int width, int ascent, int descent,
+ Word *addWord (int width, int ascent, int descent, bool canBeHyphenated,
core::style::Style *style);
+ void fillWord (Word *word, int width, int ascent, int descent,
+ bool canBeHyphenated, core::style::Style *style);
+ void fillSpace (Word *word, core::style::Style *style);
int textWidth (const char *text, int start, int len,
core::style::Style *style);
void calcTextSize (const char *text, size_t len, core::style::Style *style,
@@ -295,7 +429,7 @@ protected:
inline int lineXOffsetContents (Line *line)
{
return innerPadding + line->leftOffset +
- (line == lines->getRef (0) ? line1OffsetEff : 0);
+ (line == lines->getFirstRef() ? line1OffsetEff : 0);
}
/**
@@ -348,7 +482,15 @@ protected:
bool sendSelectionEvent (core::SelectionState::EventType eventType,
core::MousePositionEvent *event);
- virtual void wordWrap(int wordIndex);
+ void accumulateWordExtremes (int firstWord, int lastWord,
+ int *maxOfMinWidth, int *sumOfMaxWidth);
+ virtual void wordWrap (int wordIndex, bool wrapAll);
+ int hyphenateWord (int wordIndex);
+ void accumulateWordForLine (int lineIndex, int wordIndex);
+ void accumulateWordData(int wordIndex);
+ int calcAvailWidth (int lineIndex);
+ void initLine1Offset (int wordIndex);
+ void alignLine (int lineIndex);
void sizeRequestImpl (core::Requisition *requisition);
void getExtremesImpl (core::Extremes *extremes);
@@ -370,6 +512,13 @@ protected:
void removeChild (Widget *child);
+ void addText0 (const char *text, size_t len, bool canBeHyphenated,
+ core::style::Style *style, core::Requisition *size);
+ void calcTextSizes (const char *text, size_t textLen,
+ core::style::Style *style,
+ int numBreaks, int *breakPos,
+ core::Requisition *wordSize);
+
public:
static int CLASS_ID;
@@ -387,15 +536,25 @@ public:
}
void addWidget (core::Widget *widget, core::style::Style *style);
bool addAnchor (const char *name, core::style::Style *style);
- void addSpace(core::style::Style *style);
+ void addSpace (core::style::Style *style);
+
inline void addBreakOption (core::style::Style *style)
{
int wordIndex = words->size () - 1;
- if (wordIndex >= 0 &&
- style->whiteSpace != core::style::WHITE_SPACE_NOWRAP &&
+ if (wordIndex >= 0)
+ addBreakOption (words->getRef(wordIndex), style);
+ }
+
+ // TODO Re-evaluate again. When needed, which penalty values, etc.
+ inline void addBreakOption (Word *word, core::style::Style *style)
+ {
+ if (style->whiteSpace != core::style::WHITE_SPACE_NOWRAP &&
style->whiteSpace != core::style::WHITE_SPACE_PRE)
- words->getRef(wordIndex)->content.breakType = core::Content::BREAK_OK;
+ if (word->badnessAndPenalty.lineMustBeBroken())
+ word->badnessAndPenalty.setPenalty (0);
}
+
+ void addHyphen();
void addParbreak (int space, core::style::Style *style);
void addLinebreak (core::style::Style *style);
diff --git a/dw/textblock_linebreaking.cc b/dw/textblock_linebreaking.cc
new file mode 100644
index 00000000..8fb577d1
--- /dev/null
+++ b/dw/textblock_linebreaking.cc
@@ -0,0 +1,954 @@
+#include "textblock.hh"
+#include "hyphenator.hh"
+#include "../lout/msg.h"
+#include "../lout/misc.hh"
+
+#include <stdio.h>
+#include <math.h>
+
+using namespace lout;
+
+namespace dw {
+
+int Textblock::BadnessAndPenalty::badnessValue (int infLevel)
+{
+ switch (badnessState) {
+ case NOT_STRETCHABLE:
+ return infLevel == INF_NOT_STRETCHABLE ? 1 : 0;
+
+ case QUITE_LOOSE:
+ return infLevel == INF_LARGE ? 1 : 0;
+
+ case BADNESS_VALUE:
+ return infLevel == INF_VALUE ? badness : 0;
+
+ case TOO_TIGHT:
+ return infLevel == INF_TOO_TIGHT ? 1 : 0;
+ }
+
+ // compiler happiness
+ lout::misc::assertNotReached ();
+ return 0;
+}
+
+int Textblock::BadnessAndPenalty::penaltyValue (int infLevel)
+{
+ switch (penaltyState) {
+ case FORCE_BREAK:
+ return infLevel == INF_PENALTIES ? -1 : 0;
+
+ case PROHIBIT_BREAK:
+ return infLevel == INF_PENALTIES ? 1 : 0;
+
+ case PENALTY_VALUE:
+ return infLevel == INF_VALUE ? penalty : 0;
+ }
+
+ // compiler happiness
+ lout::misc::assertNotReached ();
+ return 0;
+}
+
+void Textblock::BadnessAndPenalty::calcBadness (int totalWidth, int idealWidth,
+ int totalStretchability,
+ int totalShrinkability)
+{
+ this->totalWidth = totalWidth;
+ this->idealWidth = idealWidth;
+ this->totalStretchability = totalStretchability;
+ this->totalShrinkability = totalShrinkability;
+
+ ratio = 0; // because this is used in print()
+
+ if (totalWidth == idealWidth) {
+ badnessState = BADNESS_VALUE;
+ badness = 0;
+ } else if (totalWidth < idealWidth) {
+ if (totalStretchability == 0)
+ badnessState = NOT_STRETCHABLE;
+ else {
+ ratio = 100 * (idealWidth - totalWidth) / totalStretchability;
+ if (ratio > 1024)
+ badnessState = QUITE_LOOSE;
+ else {
+ badnessState = BADNESS_VALUE;
+ badness = ratio * ratio * ratio;
+ }
+ }
+ } else { // if (word->totalWidth > availWidth)
+ if (totalShrinkability == 0)
+ badnessState = TOO_TIGHT;
+ else {
+ // ratio is negative here
+ ratio = 100 * (idealWidth - totalWidth) / totalShrinkability;
+ if (ratio <= - 100)
+ badnessState = TOO_TIGHT;
+ else {
+ badnessState = BADNESS_VALUE;
+ badness = - ratio * ratio * ratio;
+ }
+ }
+ }
+}
+
+/**
+ * Sets the penalty, multiplied with 100. Multiplication is necessary
+ * to deal with fractional numbers, without having to use floating
+ * point numbers. So, to set a penalty to 0.5, pass 50.
+ *
+ * The definition of penalties depends on the definition of badness,
+ * which adheres to the description in \ref dw-line-breaking, section
+ * "Criteria for Line-Breaking". The exact calculation may vary, but
+ * this definition of should be rather stable: (i)&nbsp;A perfectly
+ * fitting line has a badness of 0. (ii)&nbsp;A line, where all spaces
+ * are extended by exactly the stretchabilty, as well as a line, where
+ * all spaces are reduced by the shrinkability, have a badness of 1.
+ */
+void Textblock::BadnessAndPenalty::setPenalty (int penalty)
+{
+ // This factor consists of: (i) 100^3, since in calcBadness(), the
+ // ratio is multiplied with 100 (again, to use integer numbers for
+ // fractional numbers), and the badness (which has to be compared
+ // to the penalty!) is the third power or it; (ii) the denominator
+ // 100, of course, since 100 times the penalty is passed to this
+ // method.
+ this->penalty = penalty * (100 * 100 * 100 / 100);
+ penaltyState = PENALTY_VALUE;
+}
+
+void Textblock::BadnessAndPenalty::setPenaltyProhibitBreak ()
+{
+ penaltyState = PROHIBIT_BREAK;
+}
+
+void Textblock::BadnessAndPenalty::setPenaltyForceBreak ()
+{
+ penaltyState = FORCE_BREAK;
+}
+
+bool Textblock::BadnessAndPenalty::lineLoose ()
+{
+ return
+ badnessState == NOT_STRETCHABLE || badnessState == QUITE_LOOSE ||
+ (badnessState == BADNESS_VALUE && ratio > 0);
+}
+
+bool Textblock::BadnessAndPenalty::lineTight ()
+{
+ return
+ badnessState == TOO_TIGHT || (badnessState == BADNESS_VALUE && ratio < 0);
+}
+
+bool Textblock::BadnessAndPenalty::lineTooTight ()
+{
+ return badnessState == TOO_TIGHT;
+}
+
+
+bool Textblock::BadnessAndPenalty::lineMustBeBroken ()
+{
+ return penaltyState == FORCE_BREAK;
+}
+
+bool Textblock::BadnessAndPenalty::lineCanBeBroken ()
+{
+ return penaltyState != PROHIBIT_BREAK;
+}
+
+int Textblock::BadnessAndPenalty::compareTo (BadnessAndPenalty *other)
+{
+ for (int l = INF_MAX; l >= 0; l--) {
+ int thisValue = badnessValue (l) + penaltyValue (l);
+ int otherValue = other->badnessValue (l) + other->penaltyValue (l);
+
+ if (thisValue != otherValue)
+ return thisValue - otherValue;
+ }
+
+ return 0;
+}
+
+void Textblock::BadnessAndPenalty::print ()
+{
+ switch (badnessState) {
+ case NOT_STRETCHABLE:
+ printf ("not stretchable");
+ break;
+
+ case TOO_TIGHT:
+ printf ("too tight");
+ break;
+
+ case QUITE_LOOSE:
+ printf ("quite loose (ratio = %d)", ratio);
+ break;
+
+ case BADNESS_VALUE:
+ printf ("%d", badness);
+ break;
+ }
+
+ printf (" [%d + %d - %d vs. %d] + ",
+ totalWidth, totalStretchability, totalShrinkability, idealWidth);
+
+ switch (penaltyState) {
+ case FORCE_BREAK:
+ printf ("-inf");
+ break;
+
+ case PROHIBIT_BREAK:
+ printf ("inf");
+ break;
+
+ case PENALTY_VALUE:
+ printf ("%d", penalty);
+ break;
+ }
+}
+
+void Textblock::printWord (Word *word)
+{
+ switch(word->content.type) {
+ case core::Content::TEXT:
+ printf ("\"%s\"", word->content.text);
+ break;
+ case core::Content::WIDGET:
+ printf ("<widget: %p>\n", word->content.widget);
+ break;
+ case core::Content::BREAK:
+ printf ("<break>\n");
+ break;
+ default:
+ printf ("<?>\n");
+ break;
+ }
+
+ printf (" [%d / %d + %d - %d => %d + %d - %d] => ",
+ word->size.width, word->origSpace, word->stretchability,
+ word->shrinkability, word->totalWidth, word->totalStretchability,
+ word->totalShrinkability);
+ word->badnessAndPenalty.print ();
+}
+
+/*
+ * ...
+ *
+ * diff ...
+ */
+void Textblock::justifyLine (Line *line, int diff)
+{
+ /* To avoid rounding errors, the calculation is based on accumulated
+ * values. */
+
+ if (diff > 0) {
+ int stretchabilitySum = 0;
+ for (int i = line->firstWord; i < line->lastWord; i++)
+ stretchabilitySum += words->getRef(i)->stretchability;
+
+ if (stretchabilitySum > 0) {
+ int stretchabilityCum = 0;
+ int spaceDiffCum = 0;
+ for (int i = line->firstWord; i < line->lastWord; i++) {
+ Word *word = words->getRef (i);
+ stretchabilityCum += word->stretchability;
+ int spaceDiff =
+ stretchabilityCum * diff / stretchabilitySum - spaceDiffCum;
+ spaceDiffCum += spaceDiff;
+
+ PRINTF (" %d (of %d): diff = %d\n", i, words->size (),
+ spaceDiff);
+
+ word->effSpace = word->origSpace + spaceDiff;
+ }
+ }
+ } else if (diff < 0) {
+ int shrinkabilitySum = 0;
+ for (int i = line->firstWord; i < line->lastWord; i++)
+ shrinkabilitySum += words->getRef(i)->shrinkability;
+
+ if (shrinkabilitySum > 0) {
+ int shrinkabilityCum = 0;
+ int spaceDiffCum = 0;
+ for (int i = line->firstWord; i < line->lastWord; i++) {
+ Word *word = words->getRef (i);
+ shrinkabilityCum += word->shrinkability;
+ int spaceDiff =
+ shrinkabilityCum * diff / shrinkabilitySum - spaceDiffCum;
+ spaceDiffCum += spaceDiff;
+
+ word->effSpace = word->origSpace + spaceDiff;
+ }
+ }
+ }
+}
+
+
+Textblock::Line *Textblock::addLine (int firstWord, int lastWord,
+ bool temporary)
+{
+ PRINTF ("[%p] ADD_LINE (%d, %d) => %d\n",
+ this, firstWord, lastWord, lines->size ());
+
+ Word *lastWordOfLine = words->getRef(lastWord);
+ // Word::totalWidth includes the hyphen (which is what we want here).
+ int lineWidth = lastWordOfLine->totalWidth;
+ int maxOfMinWidth, sumOfMaxWidth;
+ accumulateWordExtremes (firstWord, lastWord, &maxOfMinWidth,
+ &sumOfMaxWidth);
+
+ PRINTF (" words[%d]->totalWidth = %d\n", lastWord,
+ lastWordOfLine->totalWidth);
+
+ PRINTF ("[%p] ##### LINE ADDED: %d, from %d to %d #####\n",
+ this, lines->size (), firstWord, lastWord);
+
+ lines->increase ();
+ if(!temporary) {
+ // If the last line was temporary, this will be temporary, too, even
+ // if not requested.
+ if (lines->size () == 1 || nonTemporaryLines == lines->size () -1)
+ nonTemporaryLines = lines->size ();
+ }
+
+ PRINTF ("nonTemporaryLines = %d\n", nonTemporaryLines);
+
+ int lineIndex = lines->size () - 1;
+ Line *line = lines->getRef (lineIndex);
+
+ line->firstWord = firstWord;
+ line->lastWord = lastWord;
+ line->boxAscent = line->contentAscent = 0;
+ line->boxDescent = line->contentDescent = 0;
+ line->marginDescent = 0;
+ line->breakSpace = 0;
+ line->leftOffset = 0;
+
+ alignLine (lineIndex);
+ for (int i = line->firstWord; i < line->lastWord; i++) {
+ Word *word = words->getRef (i);
+ lineWidth += (word->effSpace - word->origSpace);
+ }
+
+ int lastMaxParMax; // maxParMax of the last line
+
+ if (lines->size () == 1) {
+ // first line
+ line->top = 0;
+
+ line->maxLineWidth = lineWidth;
+ line->maxParMin = maxOfMinWidth;
+ line->parMax = sumOfMaxWidth;
+
+ lastMaxParMax = 0;
+ } else {
+ Line *prevLine = lines->getRef (lines->size () - 2);
+
+ line->top = prevLine->top + prevLine->boxAscent +
+ prevLine->boxDescent + prevLine->breakSpace;
+
+ line->maxLineWidth = misc::max (lineWidth, prevLine->maxLineWidth);
+ line->maxParMin = misc::max (maxOfMinWidth, prevLine->maxParMin);
+
+ Word *lastWordOfPrevLine = words->getRef (prevLine->lastWord);
+ if (lastWordOfPrevLine->badnessAndPenalty.lineMustBeBroken ())
+ // This line starts a new paragraph.
+ line->parMax = sumOfMaxWidth;
+ else
+ // This line continues the paragraph from prevLine.
+ line->parMax = prevLine->parMax + sumOfMaxWidth;
+
+ lastMaxParMax = prevLine->maxParMax;
+ }
+
+ // "maxParMax" is only set, when this line is the last line of the
+ // paragraph.
+ Word *lastWordOfThisLine = words->getRef (line->lastWord);
+ if (lastWordOfThisLine->badnessAndPenalty.lineMustBeBroken ())
+ // Paragraph ends here.
+ line->maxParMax =
+ misc::max (lastMaxParMax,
+ // parMax includes the last space, which we ignore here
+ line->parMax - lastWordOfThisLine->origSpace
+ + lastWordOfThisLine->hyphenWidth);
+ else
+ // Paragraph continues: simply copy the last value of "maxParMax".
+ line->maxParMax = lastMaxParMax;
+
+ for(int i = line->firstWord; i <= line->lastWord; i++)
+ accumulateWordForLine (lineIndex, i);
+
+ PRINTF (" line[%d].top = %d\n", lines->size () - 1, line->top);
+ PRINTF (" line[%d].boxAscent = %d\n", lines->size () - 1, line->boxAscent);
+ PRINTF (" line[%d].boxDescent = %d\n",
+ lines->size () - 1, line->boxDescent);
+ PRINTF (" line[%d].contentAscent = %d\n", lines->size () - 1,
+ line->contentAscent);
+ PRINTF (" line[%d].contentDescent = %d\n",
+ lines->size () - 1, line->contentDescent);
+
+ PRINTF (" line[%d].maxLineWidth = %d\n",
+ lines->size () - 1, line->maxLineWidth);
+ PRINTF (" line[%d].maxParMin = %d\n",
+ lines->size () - 1, line->maxParMin);
+ PRINTF (" line[%d].maxParMax = %d\n",
+ lines->size () - 1, line->maxParMax);
+ PRINTF (" line[%d].parMax = %d\n", lines->size () - 1, line->parMax);
+
+ mustQueueResize = true;
+
+ return line;
+}
+
+void Textblock::accumulateWordExtremes (int firstWord, int lastWord,
+ int *maxOfMinWidth, int *sumOfMaxWidth)
+{
+ int parMin = 0;
+ *maxOfMinWidth = *sumOfMaxWidth = 0;
+
+ for (int i = firstWord; i <= lastWord; i++) {
+ Word *word = words->getRef (i);
+ bool atLastWord = i == lastWord;
+
+ core::Extremes extremes;
+ getWordExtremes (word, &extremes);
+
+ // Minimum: between two *possible* breaks (or at the end).
+ // TODO This is redundant to getExtremesImpl().
+ if (word->badnessAndPenalty.lineCanBeBroken () || atLastWord) {
+ parMin += extremes.minWidth + word->hyphenWidth;
+ *maxOfMinWidth = misc::max (*maxOfMinWidth, parMin);
+ parMin = 0;
+ } else
+ // Shrinkability could be considered, but really does not play a
+ // role.
+ parMin += extremes.minWidth + word->origSpace;
+
+ //printf ("[%p] after word: ", this);
+ //printWord (word);
+ //printf ("\n");
+
+ //printf ("[%p] (%d / %d) => parMin = %d, maxOfMinWidth = %d\n",
+ // this, extremes.minWidth, extremes.maxWidth, parMin,
+ // *maxOfMinWidth);
+
+ *sumOfMaxWidth += (extremes.maxWidth + word->origSpace);
+ // Notice that the last space is added. See also: Line::parMax.
+ }
+}
+
+/*
+ * This method is called in two cases: (i) when a word is added
+ * (ii) when a page has to be (partially) rewrapped. It does word wrap,
+ * and adds new lines if necessary.
+ */
+void Textblock::wordWrap (int wordIndex, bool wrapAll)
+{
+ PRINTF ("[%p] WORD_WRAP (%d, %s)\n",
+ this, wordIndex, wrapAll ? "true" : "false");
+
+ Word *word;
+ //core::Extremes wordExtremes;
+
+ if (!wrapAll)
+ removeTemporaryLines ();
+
+ initLine1Offset (wordIndex);
+
+ word = words->getRef (wordIndex);
+ word->effSpace = word->origSpace;
+
+ accumulateWordData (wordIndex);
+
+ bool newLine;
+ do {
+ bool tempNewLine = false;
+ int firstIndex =
+ lines->size() == 0 ? 0 : lines->getLastRef()->lastWord + 1;
+ int searchUntil;
+
+ if (wrapAll && wordIndex >= firstIndex && wordIndex == words->size() -1) {
+ newLine = true;
+ searchUntil = wordIndex;
+ tempNewLine = true;
+ PRINTF (" NEW LINE: last word\n");
+ } else if (wordIndex >= firstIndex &&
+ word->badnessAndPenalty.lineMustBeBroken ()) {
+ newLine = true;
+ searchUntil = wordIndex;
+ PRINTF (" NEW LINE: forced break\n");
+ } else if (wordIndex > firstIndex &&
+ word->badnessAndPenalty.lineTooTight () &&
+ words->getRef(wordIndex- 1)
+ ->badnessAndPenalty.lineCanBeBroken ()) {
+ // TODO Comment the last condition (also below where the minimun is
+ // searched for)
+ newLine = true;
+ searchUntil = wordIndex - 1;
+ PRINTF (" NEW LINE: line too tight\n");
+ } else
+ newLine = false;
+
+ if(!newLine && !wrapAll)
+ // No new line is added. "mustQueueResize" must,
+ // nevertheless, be set, so that flush() will call
+ // queueResize(), and later sizeRequestImpl() is called,
+ // which then calls showMissingLines(), which eventually
+ // calls this method again, with wrapAll == true, so that
+ // newLine is calculated as "true".
+ mustQueueResize = true;
+
+ if(newLine) {
+ accumulateWordData (wordIndex);
+ int wordIndexEnd = wordIndex;
+
+ bool lineAdded;
+ do {
+ PRINTF (" searching from %d to %d\n", firstIndex, searchUntil);
+
+ int breakPos = -1;
+ for (int i = firstIndex; i <= searchUntil; i++) {
+ Word *w = words->getRef(i);
+
+ //printf (" %d (of %d): ", i, words->size ());
+ //printWord (w);
+ //printf ("\n");
+
+ // TODO: is this condition needed:
+ // if(w->badnessAndPenalty.lineCanBeBroken ()) ?
+
+ if (breakPos == -1 ||
+ w->badnessAndPenalty.compareTo
+ (&words->getRef(breakPos)->badnessAndPenalty) <= 0)
+ // "<=" instead of "<" in the next lines tends to result in
+ // more words per line -- theoretically. Practically, the
+ // case "==" will never occur.
+ breakPos = i;
+ }
+
+ PRINTF (" breakPos = %d\n", breakPos);
+
+ if (wrapAll && searchUntil == words->size () - 1) {
+ // Since no break and no space is added, the last word
+ // will have a penalty of inf. Actually, it should be -inf,
+ // since it is the last word. However, since more words may
+ // follow, the penalty is not changesd, but here, the search
+ // is corrected (maybe only temporary).
+ Word *lastWord = words->getRef (searchUntil);
+ BadnessAndPenalty correctedBap = lastWord->badnessAndPenalty;
+ correctedBap.setPenaltyForceBreak ();
+ if (correctedBap.compareTo
+ (&words->getRef(breakPos)->badnessAndPenalty) <= 0) {
+ breakPos = searchUntil;
+ PRINTF (" corrected: breakPos = %d\n", breakPos);
+ }
+ }
+
+ int hyphenatedWord = -1;
+ Word *word1 = words->getRef(breakPos);
+ PRINTF ("[%p] line (broken at word %d): ", this, breakPos);
+ //word1->badnessAndPenalty.print ();
+ PRINTF ("\n");
+
+ if (word1->badnessAndPenalty.lineTight () &&
+ word1->canBeHyphenated &&
+ word1->style->x_lang[0] &&
+ word1->content.type == core::Content::TEXT &&
+ Hyphenator::isHyphenationCandidate (word1->content.text))
+ hyphenatedWord = breakPos;
+
+ if (word1->badnessAndPenalty.lineLoose () &&
+ breakPos + 1 < words->size ()) {
+ Word *word2 = words->getRef(breakPos + 1);
+ if (word2->canBeHyphenated &&
+ word2->style->x_lang[0] &&
+ word2->content.type == core::Content::TEXT &&
+ Hyphenator::isHyphenationCandidate (word2->content.text))
+ hyphenatedWord = breakPos + 1;
+ }
+
+ PRINTF ("[%p] breakPos = %d, hyphenatedWord = %d\n",
+ this, breakPos, hyphenatedWord);
+
+ if(hyphenatedWord == -1) {
+ addLine (firstIndex, breakPos, tempNewLine);
+ PRINTF ("[%p] new line %d (%s), from %d to %d\n",
+ this, lines->size() - 1,
+ tempNewLine ? "temporally" : "permanently",
+ firstIndex, breakPos);
+ lineAdded = true;
+ } else {
+ // TODO hyphenateWord() should return weather something has
+ // changed at all. So that a second run, with
+ // !word->canBeHyphenated, is unneccessary.
+ // TODO Update: for this, searchUntil == 0 should be checked.
+ PRINTF ("[%p] old searchUntil = %d ...\n", this, searchUntil);
+ int n = hyphenateWord (hyphenatedWord);
+ searchUntil += n;
+ if (hyphenatedWord >= wordIndex)
+ wordIndexEnd += n;
+ PRINTF ("[%p] -> new searchUntil = %d ...\n", this, searchUntil);
+ lineAdded = false;
+
+ // update word pointer as hyphenateWord() can trigger a
+ // reorganization of the words structure
+ word = words->getRef (wordIndex);
+ }
+
+ PRINTF ("[%p] accumulating again from %d to %d\n",
+ this, breakPos + 1, wordIndexEnd);
+ for(int i = breakPos + 1; i <= wordIndexEnd; i++)
+ accumulateWordData (i);
+
+ } while(!lineAdded);
+ }
+ } while (newLine);
+}
+
+int Textblock::hyphenateWord (int wordIndex)
+{
+ Word *hyphenatedWord = words->getRef(wordIndex);
+ char lang[3] = { hyphenatedWord->style->x_lang[0],
+ hyphenatedWord->style->x_lang[1], 0 };
+ Hyphenator *hyphenator =
+ Hyphenator::getHyphenator (layout->getPlatform (), lang);
+ PRINTF ("[%p] considering to hyphenate word %d, '%s', in language '%s'\n",
+ this, wordIndex, words->getRef(wordIndex)->content.text, lang);
+ int numBreaks;
+ int *breakPos =
+ hyphenator->hyphenateWord (hyphenatedWord->content.text, &numBreaks);
+
+ if (numBreaks > 0) {
+ Word origWord = *hyphenatedWord;
+
+ core::Requisition wordSize[numBreaks + 1];
+ calcTextSizes (origWord.content.text, strlen (origWord.content.text),
+ origWord.style, numBreaks, breakPos, wordSize);
+
+ PRINTF ("[%p] %d words ...\n", this, words->size ());
+ words->insert (wordIndex, numBreaks);
+ PRINTF ("[%p] ... => %d words\n", this, words->size ());
+
+ // Adjust anchor indexes.
+ for (int i = 0; i < anchors->size (); i++) {
+ Anchor *anchor = anchors->getRef (i);
+ if (anchor->wordIndex > wordIndex)
+ anchor->wordIndex += numBreaks;
+ }
+
+ for (int i = 0; i < numBreaks + 1; i++) {
+ Word *w = words->getRef (wordIndex + i);
+
+ fillWord (w, wordSize[i].width, wordSize[i].ascent,
+ wordSize[i].descent, false, origWord.style);
+
+ // TODO There should be a method fillText0.
+ w->content.type = core::Content::TEXT;
+
+ int start = (i == 0 ? 0 : breakPos[i - 1]);
+ int end = (i == numBreaks ?
+ strlen (origWord.content.text) : breakPos[i]);
+ w->content.text =
+ layout->textZone->strndup (origWord.content.text + start,
+ end - start);
+ PRINTF (" [%d] -> '%s'\n", wordIndex + i, w->content.text);
+
+ // Note: there are numBreaks + 1 word parts.
+ if (i < numBreaks) {
+ // TODO There should be a method fillHyphen.
+ w->badnessAndPenalty.setPenalty (HYPHEN_BREAK);
+ w->hyphenWidth =
+ layout->textWidth (origWord.style->font, "\xc2\xad", 2);
+ PRINTF (" [%d] + hyphen\n", wordIndex + i);
+ } else {
+ if (origWord.content.space) {
+ fillSpace (w, origWord.spaceStyle);
+ PRINTF (" [%d] + space\n", wordIndex + i);
+ } else {
+ PRINTF (" [%d] + nothing\n", wordIndex + i);
+ }
+ }
+
+ accumulateWordData (wordIndex + i);
+ }
+
+ PRINTF (" finished\n");
+
+ //delete origword->content.text; TODO: Via textZone?
+ origWord.style->unref ();
+ origWord.spaceStyle->unref ();
+
+ delete breakPos;
+ } else {
+ words->getRef(wordIndex)->canBeHyphenated = false;
+ }
+
+ return numBreaks;
+}
+
+void Textblock::accumulateWordForLine (int lineIndex, int wordIndex)
+{
+ Line *line = lines->getRef (lineIndex);
+ Word *word = words->getRef (wordIndex);
+
+ PRINTF (" %d + %d / %d + %d\n", line->boxAscent, line->boxDescent,
+ word->size.ascent, word->size.descent);
+
+ line->boxAscent = misc::max (line->boxAscent, word->size.ascent);
+ line->boxDescent = misc::max (line->boxDescent, word->size.descent);
+
+ int len = word->style->font->ascent;
+ if (word->style->valign == core::style::VALIGN_SUPER)
+ len += len / 2;
+ line->contentAscent = misc::max (line->contentAscent, len);
+
+ len = word->style->font->descent;
+ if (word->style->valign == core::style::VALIGN_SUB)
+ len += word->style->font->ascent / 3;
+ line->contentDescent = misc::max (line->contentDescent, len);
+
+ if (word->content.type == core::Content::WIDGET) {
+ int collapseMarginTop = 0;
+
+ line->marginDescent =
+ misc::max (line->marginDescent,
+ word->size.descent +
+ word->content.widget->getStyle()->margin.bottom);
+
+ if (lines->size () == 1 &&
+ word->content.widget->blockLevel () &&
+ getStyle ()->borderWidth.top == 0 &&
+ getStyle ()->padding.top == 0) {
+ // collapse top margins of parent element and its first child
+ // see: http://www.w3.org/TR/CSS21/box.html#collapsing-margins
+ collapseMarginTop = getStyle ()->margin.top;
+ }
+
+ line->boxAscent =
+ misc::max (line->boxAscent,
+ word->size.ascent,
+ word->size.ascent
+ + word->content.widget->getStyle()->margin.top
+ - collapseMarginTop);
+
+ word->content.widget->parentRef = lineIndex;
+ } else {
+ line->marginDescent =
+ misc::max (line->marginDescent, line->boxDescent);
+
+ if (word->content.type == core::Content::BREAK)
+ line->breakSpace =
+ misc::max (word->content.breakSpace,
+ line->marginDescent - line->boxDescent,
+ line->breakSpace);
+ }
+}
+
+void Textblock::accumulateWordData (int wordIndex)
+{
+ // Typically, the word in question is in the last line; in any case
+ // quite at the end of the text, so that linear search is actually
+ // the fastest option.
+ int lineIndex = lines->size ();
+ while (lineIndex > 0 && wordIndex <= lines->getRef(lineIndex - 1)->lastWord)
+ lineIndex--;
+
+ int firstWordOfLine;
+ if (lineIndex == 0)
+ firstWordOfLine = 0;
+ else
+ firstWordOfLine = lines->getRef(lineIndex - 1)->lastWord + 1;
+
+ Word *word = words->getRef (wordIndex);
+ PRINTF ("[%p] ACCUMULATE_WORD_DATA (%d); lineIndex = %d: ...\n",
+ this, wordIndex, lineIndex);
+
+ int availWidth = calcAvailWidth (lineIndex);
+
+ PRINTF (" (%s existing line %d starts with word %d)\n",
+ lineIndex < lines->size () ? "already" : "not yet",
+ lineIndex, firstWordOfLine);
+
+ if (wordIndex == firstWordOfLine) {
+ // first word of the (not neccessarily yet existing) line
+ word->totalWidth = word->size.width + word->hyphenWidth;
+ word->totalStretchability = 0;
+ word->totalShrinkability = 0;
+ } else {
+ Word *prevWord = words->getRef (wordIndex - 1);
+
+ word->totalWidth = prevWord->totalWidth
+ + prevWord->origSpace - prevWord->hyphenWidth
+ + word->size.width + word->hyphenWidth;
+ word->totalStretchability =
+ prevWord->totalStretchability + prevWord->stretchability;
+ word->totalShrinkability =
+ prevWord->totalShrinkability + prevWord->shrinkability;
+ }
+
+ word->badnessAndPenalty.calcBadness (word->totalWidth, availWidth,
+ word->totalStretchability,
+ word->totalShrinkability);
+
+ //printf (" => ");
+ //printWord (word);
+ //printf ("\n");
+}
+
+int Textblock::calcAvailWidth (int lineIndex)
+{
+ int availWidth =
+ this->availWidth - getStyle()->boxDiffWidth() - innerPadding;
+ if (limitTextWidth &&
+ layout->getUsesViewport () &&
+ availWidth > layout->getWidthViewport () - 10)
+ availWidth = layout->getWidthViewport () - 10;
+ if (lineIndex == 0)
+ availWidth -= line1OffsetEff;
+
+ //PRINTF("[%p] CALC_AVAIL_WIDTH => %d - %d - %d = %d\n",
+ // this, this->availWidth, getStyle()->boxDiffWidth(), innerPadding,
+ // availWidth);
+
+ return availWidth;
+}
+
+void Textblock::initLine1Offset (int wordIndex)
+{
+ Word *word = words->getRef (wordIndex);
+
+ /* Test whether line1Offset can be used. */
+ if (wordIndex == 0) {
+ if (ignoreLine1OffsetSometimes &&
+ line1Offset + word->size.width > availWidth) {
+ line1OffsetEff = 0;
+ } else {
+ int indent = 0;
+
+ if (word->content.type == core::Content::WIDGET &&
+ word->content.widget->blockLevel() == true) {
+ /* don't use text-indent when nesting blocks */
+ } else {
+ if (core::style::isPerLength(getStyle()->textIndent)) {
+ indent = misc::roundInt(this->availWidth *
+ core::style::perLengthVal (getStyle()->textIndent));
+ } else {
+ indent = core::style::absLengthVal (getStyle()->textIndent);
+ }
+ }
+ line1OffsetEff = line1Offset + indent;
+ }
+ }
+}
+
+/**
+ * Align the line.
+ *
+ * \todo Use block's style instead once paragraphs become proper blocks.
+ */
+void Textblock::alignLine (int lineIndex)
+{
+ Line *line = lines->getRef (lineIndex);
+ int availWidth = calcAvailWidth (lineIndex);
+ Word *firstWord = words->getRef (line->firstWord);
+ Word *lastWord = words->getRef (line->lastWord);
+
+ for (int i = line->firstWord; i < line->lastWord; i++)
+ words->getRef(i)->origSpace = words->getRef(i)->effSpace;
+
+ if (firstWord->content.type != core::Content::BREAK) {
+ switch (firstWord->style->textAlign) {
+ case core::style::TEXT_ALIGN_LEFT:
+ case core::style::TEXT_ALIGN_STRING: /* handled elsewhere (in the
+ * future)? */
+ line->leftOffset = 0;
+ break;
+ case core::style::TEXT_ALIGN_JUSTIFY: /* see some lines above */
+ line->leftOffset = 0;
+ if(lastWord->content.type != core::Content::BREAK &&
+ line->lastWord != words->size () - 1) {
+ PRINTF (" justifyLine => %d vs. %d\n",
+ lastWord->totalWidth, availWidth);
+ justifyLine (line, availWidth - lastWord->totalWidth);
+ }
+ break;
+ case core::style::TEXT_ALIGN_RIGHT:
+ line->leftOffset = availWidth - lastWord->totalWidth;
+ break;
+ case core::style::TEXT_ALIGN_CENTER:
+ line->leftOffset = (availWidth - lastWord->totalWidth) / 2;
+ break;
+ default:
+ /* compiler happiness */
+ line->leftOffset = 0;
+ }
+
+ /* For large lines (images etc), which do not fit into the viewport: */
+ if (line->leftOffset < 0)
+ line->leftOffset = 0;
+ }
+}
+
+/**
+ * Rewrap the page from the line from which this is necessary.
+ * There are basically two times we'll want to do this:
+ * either when the viewport is resized, or when the size changes on one
+ * of the child widgets.
+ */
+void Textblock::rewrap ()
+{
+ PRINTF ("[%p] REWRAP: wrapRef = %d\n", this, wrapRef);
+
+ if (wrapRef == -1)
+ /* page does not have to be rewrapped */
+ return;
+
+ /* All lines up from wrapRef will be rebuild from the word list,
+ * the line list up from this position is rebuild. */
+ lines->setSize (wrapRef);
+ nonTemporaryLines = misc::min (nonTemporaryLines, wrapRef);
+
+ int firstWord;
+ if (lines->size () > 0)
+ firstWord = lines->getLastRef()->lastWord + 1;
+ else
+ firstWord = 0;
+
+ for (int i = firstWord; i < words->size (); i++) {
+ Word *word = words->getRef (i);
+
+ if (word->content.type == core::Content::WIDGET)
+ calcWidgetSize (word->content.widget, &word->size);
+
+ wordWrap (i, false);
+
+ // wordWrap() may insert some new words; since NotSoSimpleVector
+ // is used for the words list, the internal structure may have
+ // changed, so getRef() must be called again.
+ word = words->getRef (i);
+
+ if (word->content.type == core::Content::WIDGET) {
+ word->content.widget->parentRef = lines->size () - 1;
+ }
+ }
+
+ /* Next time, the page will not have to be rewrapped. */
+ wrapRef = -1;
+}
+
+void Textblock::showMissingLines ()
+{
+ int firstWordToWrap = lines->size () > 0 ?
+ lines->getRef(lines->size () - 1)->lastWord + 1 : 0;
+ PRINTF ("[%p] SHOW_MISSING_LINES: wrap from %d to %d\n",
+ this, firstWordToWrap, words->size () - 1);
+ for (int i = firstWordToWrap; i < words->size (); i++)
+ wordWrap (i, true);
+}
+
+
+void Textblock::removeTemporaryLines ()
+{
+ lines->setSize (nonTemporaryLines);
+}
+
+} // namespace dw
diff --git a/dw/types.hh b/dw/types.hh
index eac834ff..65983fad 100644
--- a/dw/types.hh
+++ b/dw/types.hh
@@ -194,16 +194,12 @@ struct Content
REAL_CONTENT = 0xff ^ (START | END),
SELECTION_CONTENT = TEXT | WIDGET | BREAK
};
- enum BreakType {
- BREAK_NO,
- BREAK_OK
- };
+
/* Content is embedded in struct Word therefore we
* try to be space efficient.
*/
short type;
bool space;
- unsigned char breakType;
union {
const char *text;
Widget *widget;
diff --git a/dw/widget.cc b/dw/widget.cc
index 2a6fbfc3..8ca0681a 100644
--- a/dw/widget.cc
+++ b/dw/widget.cc
@@ -109,6 +109,7 @@ void Widget::setParent (Widget *parent)
buttonSensitive = parent->buttonSensitive;
//DBG_OBJ_ASSOC (widget, parent);
+ //printf ("%p becomes a child of %p\n", this, parent);
}
void Widget::queueDrawArea (int x, int y, int width, int height)
diff --git a/lout/Makefile.am b/lout/Makefile.am
index a3f947db..bef9696e 100644
--- a/lout/Makefile.am
+++ b/lout/Makefile.am
@@ -15,4 +15,6 @@ liblout_a_SOURCES = \
object.hh \
signal.cc \
signal.hh \
+ unicode.cc \
+ unicode.hh \
msg.h
diff --git a/lout/container.hh b/lout/container.hh
index 8a9e3e0f..d2484b13 100644
--- a/lout/container.hh
+++ b/lout/container.hh
@@ -3,6 +3,8 @@
#include "object.hh"
+namespace lout {
+
/**
* \brief This namespace contains a framework for container classes, which
* members are instances of object::Object.
@@ -15,8 +17,6 @@
*
* \sa container::untyped, container::typed
*/
-namespace lout {
-
namespace container {
/**
diff --git a/lout/identity.hh b/lout/identity.hh
index 6102933d..1f0b4bdf 100644
--- a/lout/identity.hh
+++ b/lout/identity.hh
@@ -5,12 +5,11 @@
#include "container.hh"
#include "signal.hh"
+namespace lout {
+
/**
* \brief Some stuff to identify classes of objects at run-time.
*/
-
-namespace lout {
-
namespace identity {
/**
diff --git a/lout/misc.hh b/lout/misc.hh
index 2a8584eb..f877c879 100644
--- a/lout/misc.hh
+++ b/lout/misc.hh
@@ -7,13 +7,13 @@
#include <string.h>
#include <assert.h>
+namespace lout {
+
/**
* \brief Miscellaneous stuff, which does not fit anywhere else.
*
* Actually, the other parts, beginning with ::object, depend on this.
*/
-namespace lout {
-
namespace misc {
template <class T> inline T min (T a, T b) { return a < b ? a : b; }
@@ -201,6 +201,38 @@ public:
}
/**
+ * \brief Return the reference of the first element (convenience method).
+ */
+ inline T* getFirstRef () {
+ assert (this->num > 0);
+ return this->array;
+ }
+
+ /**
+ * \brief Return the first element, explicitly.
+ */
+ inline T getFirst () {
+ assert (this->num > 0);
+ return this->array[0];
+ }
+
+ /**
+ * \brief Return the reference of the last element (convenience method).
+ */
+ inline T* getLastRef () {
+ assert (this->num > 0);
+ return this->array + this->num - 1;
+ }
+
+ /**
+ * \brief Return the last element, explicitly.
+ */
+ inline T getLast () {
+ assert (this->num > 0);
+ return this->array[this->num - 1];
+ }
+
+ /**
* \brief Store an object in the vector.
*
* Unlike in container::untyped::Vector and container::typed::Vector,
@@ -214,6 +246,267 @@ public:
}
};
+/**
+ * \brief Container similar to lout::misc::SimpleVector, but some cases
+ * of insertion optimized (used for hyphenation).
+ *
+ * For hyphenation, words are often split, so that some space must be
+ * inserted by the method NotSoSimpleVector::insert. Typically, some
+ * elements are inserted quite at the beginning (when the word at the
+ * end of the first or at the beginning of the second line is
+ * hyphenated), then, a bit further (end of second line/beginning of
+ * third line) and so on. In the first time, nearly all words must be
+ * moved; in the second time, a bit less, etc. After all, using a
+ * simple vector would result in O(n<sup>2</sup>) number of elements
+ * moved total. With this class, however, the number can be kept at
+ * O(n).
+ *
+ * The basic idea is to keep an extra array (actually two, of which
+ * the second one is used temporally), which is inserted in a logical
+ * way. Since there is only one extra array at max, reading is rather
+ * simple and fast (see NotSoSimpleVector::getRef): check whether the
+ * position is before, within, or after the extra array. The first
+ * insertion is also rather simple, when the extra array has to be
+ * created. The following sketch illustrates the most complex case,
+ * when an extra array exists, and something is inserted after it (the
+ * case for which this class has been optimized):
+ *
+ * \image html not-so-simple-container.png
+ *
+ * Dotted lines are used to keep the boxes aligned.
+ *
+ * As you see, only a relatively small fraction of elements has to be
+ * moved.
+ *
+ * There are some other cases, which have to be documented.
+ */
+template <class T> class NotSoSimpleVector
+{
+private:
+ T *arrayMain, *arrayExtra1, *arrayExtra2;
+ int numMain, numExtra, numAllocMain, numAllocExtra, startExtra;
+
+ inline void resizeMain ()
+ {
+ /* This algorithm was tuned for memory&speed with this huge page:
+ * http://downloads.mysql.com/docs/refman-6.0-en.html.tar.gz
+ */
+ if (arrayMain == NULL) {
+ this->numAllocMain = 1;
+ this->arrayMain = (T*) malloc (sizeof (T));
+ }
+ if (this->numAllocMain < this->numMain) {
+ this->numAllocMain = (this->numMain < 100) ?
+ this->numMain : this->numMain + this->numMain/10;
+ this->arrayMain =
+ (T*) realloc(this->arrayMain, (this->numAllocMain * sizeof (T)));
+ }
+ }
+
+ inline void resizeExtra ()
+ {
+ /* This algorithm was tuned for memory&speed with this huge page:
+ * http://downloads.mysql.com/docs/refman-6.0-en.html.tar.gz
+ */
+ if (arrayExtra1 == NULL) {
+ this->numAllocExtra = 1;
+ this->arrayExtra1 = (T*) malloc (sizeof (T));
+ this->arrayExtra2 = (T*) malloc (sizeof (T));
+ }
+ if (this->numAllocExtra < this->numExtra) {
+ this->numAllocExtra = (this->numExtra < 100) ?
+ this->numExtra : this->numExtra + this->numExtra/10;
+ this->arrayExtra1 =
+ (T*) realloc(this->arrayExtra1, (this->numAllocExtra * sizeof (T)));
+ this->arrayExtra2 =
+ (T*) realloc(this->arrayExtra2, (this->numAllocExtra * sizeof (T)));
+ }
+ }
+
+ void consolidate ()
+ {
+ if (startExtra != -1) {
+ numMain += numExtra;
+ resizeMain ();
+ memmove (arrayMain + startExtra + numExtra, arrayMain + startExtra,
+ (numMain - (startExtra + numExtra)) * sizeof (T));
+ memmove (arrayMain + startExtra, arrayExtra1, numExtra * sizeof (T));
+ startExtra = -1;
+ numExtra = 0;
+ }
+ }
+
+public:
+ inline NotSoSimpleVector (int initAlloc)
+ {
+ this->numMain = this->numExtra = 0;
+ this->numAllocMain = initAlloc;
+ this->numAllocExtra = initAlloc;
+ this->arrayMain = this->arrayExtra1 = this->arrayExtra2 = NULL;
+ this->startExtra = -1;
+ }
+
+ inline NotSoSimpleVector (const NotSoSimpleVector &o)
+ {
+ this->arrayMain = NULL;
+ this->numMain = o.numMain;
+ this->numAllocMain = o.numAllocMain;
+ resizeMain ();
+ memcpy (this->arrayMain, o.arrayMain, sizeof (T) * numMain);
+
+ this->arrayExtra = NULL;
+ this->numExtra = o.numExtra;
+ this->numAllocExtra = o.numAllocExtra;
+ resizeExtra ();
+ memcpy (this->arrayExtra, o.arrayExtra, sizeof (T) * numExtra);
+
+ this->startExtra = o.startExtra;
+ }
+
+ inline ~NotSoSimpleVector ()
+ {
+ if (this->arrayMain)
+ free (this->arrayMain);
+ if (this->arrayExtra1)
+ free (this->arrayExtra1);
+ if (this->arrayExtra2)
+ free (this->arrayExtra2);
+ }
+
+ inline int size() { return this->numMain + this->numExtra; }
+
+ inline void increase() { setSize(size() + 1); }
+
+ inline void setSize(int newSize)
+ {
+ assert (newSize >= 0);
+ this->numMain = newSize - numExtra;
+ this->resizeMain ();
+ }
+
+ void insert (int index, int numInsert)
+ {
+ assert (numInsert >= 0);
+
+ // The following lines are a simple (but inefficient) replacement.
+ //setSize (numMain + numInsert);
+ //memmove (arrayMain + index + numInsert, arrayMain + index,
+ // (numMain - index - numInsert) * sizeof (T));
+ //return;
+
+ if (this->startExtra == -1) {
+ // simple case
+ this->numExtra = numInsert;
+ this->startExtra = index;
+ resizeExtra ();
+ } else {
+ if (index < startExtra) {
+ consolidate ();
+ insert (index, numInsert);
+ } else if (index < startExtra + numExtra) {
+ int oldNumExtra = numExtra;
+ numExtra += numInsert;
+ resizeExtra ();
+
+ int toMove = startExtra + oldNumExtra - index;
+ memmove (arrayExtra1 + numExtra - toMove,
+ arrayExtra1 + index - startExtra,
+ toMove * sizeof (T));
+ } else {
+ int oldNumExtra = numExtra;
+ numExtra += numInsert;
+ resizeExtra ();
+
+ // Note: index refers to the *logical* adress, not to the
+ // *physical* one.
+ int diff = index - this->startExtra - oldNumExtra;
+ T *arrayMainI = arrayMain + this->startExtra;
+ for (int i = diff + oldNumExtra - 1; i >= 0; i--) {
+ T *src = i < oldNumExtra ?
+ this->arrayExtra1 + i : arrayMainI + (i - oldNumExtra);
+ T *dest = i < diff ?
+ arrayMainI + i : arrayExtra2 + (i - diff);
+ *dest = *src;
+ }
+
+ memcpy (arrayExtra1, arrayExtra2, sizeof (T) * oldNumExtra);
+ startExtra = index - oldNumExtra;
+ }
+ }
+ }
+
+ /**
+ * \brief Return the reference of one element.
+ *
+ * \sa misc::SimpleVector::get
+ */
+ inline T* getRef (int i)
+ {
+ if (this->startExtra == -1)
+ return this->arrayMain + i;
+ else {
+ if (i < this->startExtra)
+ return this->arrayMain + i;
+ else if (i >= this->startExtra + this->numExtra)
+ return this->arrayMain + i - this->numExtra;
+ else
+ return this->arrayExtra1 + i - this->startExtra;
+ }
+ }
+
+ /**
+ * \brief Return the one element, explicitly.
+ *
+ * The element is copied, so for complex elements, you should rather used
+ * misc::SimpleVector::getRef.
+ */
+ inline T get (int i)
+ {
+ return *(this->getRef(i));
+ }
+
+ /**
+ * \brief Return the reference of the first element (convenience method).
+ */
+ inline T* getFirstRef () {
+ assert (size () > 0);
+ return this->getRef(0);
+ }
+
+ /**
+ * \brief Return the first element, explicitly.
+ */
+ inline T getFirst () {
+ return *(this->getFirstRef());
+ }
+
+ /**
+ * \brief Return the reference of the last element (convenience method).
+ */
+ inline T* getLastRef () {
+ assert (size () > 0);
+ return this->getRef(size () - 1);
+ }
+
+ /**
+ * \brief Return the last element, explicitly.
+ */
+ inline T getLast () {
+ return *(this->getLastRef());
+ }
+
+ /**
+ * \brief Store an object in the vector.
+ *
+ * Unlike in container::untyped::Vector and container::typed::Vector,
+ * you have to care about the size, so a call to
+ * misc::SimpleVector::increase or misc::SimpleVector::setSize may
+ * be necessary before.
+ */
+ inline void set (int i, T t) {
+ *(this->getRef(i)) = t;
+ }
+};
/**
* \brief A class for fast concatenation of a large number of strings.
diff --git a/lout/object.hh b/lout/object.hh
index 789542fe..9df69987 100644
--- a/lout/object.hh
+++ b/lout/object.hh
@@ -6,12 +6,12 @@
#include "misc.hh"
+namespace lout {
+
/**
* \brief Here, some common classes (or interfaces) are defined, to standardize
* the access to other classes.
*/
-namespace lout {
-
namespace object {
/**
diff --git a/lout/signal.hh b/lout/signal.hh
index 6b332203..117779d6 100644
--- a/lout/signal.hh
+++ b/lout/signal.hh
@@ -4,6 +4,8 @@
#include "object.hh"
#include "container.hh"
+namespace lout {
+
/**
* \brief This namespace provides base classes to define signals.
*
@@ -174,8 +176,6 @@
* After this, &\em barReceiver can be connected to all instances of
* BarEmitter, also multiple times.
*/
-namespace lout {
-
namespace signal {
class Receiver;
diff --git a/lout/unicode.cc b/lout/unicode.cc
new file mode 100644
index 00000000..38d71494
--- /dev/null
+++ b/lout/unicode.cc
@@ -0,0 +1,75 @@
+#include "unicode.hh"
+
+namespace lout {
+
+namespace unicode {
+
+static unsigned char alpha[0x500] = {
+ // 0000-007F: C0 Controls and Basic Latin
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfe, 0xff, 0xff, 0x07, 0xfe, 0xff, 0xff, 0x07,
+ // 0080-00FF: C1 Controls and Latin-1 Supplement
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff,
+ // 0100-017F: Latin Extended-A
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ // 0180-024F: Latin Extended-B
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff,
+ // 0250–02AF: IPA Extensions
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff,
+ // 02B0–02FF: Spacing Modifier Letters
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ // 0300–036F: Combining Diacritical Marks
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ // 0370–03FF: Greek and Coptic
+ 0xcf, 0x00, 0x40, 0x7d, 0xff, 0xff, 0xfb, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff,
+ // 0400–04FF: Cyrillic
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x03, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+
+/**
+ * Returns whether a given unicode character is an alphabetic character.
+ */
+bool isAlpha (int ch)
+{
+ return ch < 0x500 && (alpha[ch / 8] & (1 << (ch & 7)));
+}
+
+int decodeUtf8 (char *s)
+{
+ if((s[0] & 0x80) == 0)
+ return s[0];
+ else {
+ int mask = 0xe0, bits = 0xc0, done = 0, ch = 0, i = 0;
+ for(int j = 1; !done && j < 7;
+ j++, mask = 0x80 | (mask >> 1), bits = 0x80 | (bits >> 1)) {
+ if(((unsigned char)s[i] & mask) == bits) {
+ done = 1;
+ ch = (unsigned char)s[i] & ~mask & 0xff;
+ i++;
+ for(int k = 0; k < j; k++) {
+ ch = (ch << 6) | ((unsigned char)s[i] & 0x3f);
+ i++;
+ }
+ }
+ }
+
+ return ch;
+ }
+}
+
+} // namespace lout
+
+} // namespace unicode
diff --git a/lout/unicode.hh b/lout/unicode.hh
new file mode 100644
index 00000000..123e7aa3
--- /dev/null
+++ b/lout/unicode.hh
@@ -0,0 +1,20 @@
+#ifndef __UNICODE_HH__
+#define __UNICODE_HH__
+
+namespace lout {
+
+/**
+ * \brief Stuff dealing with Unicode characters: UTF-8, character classes etc.
+ *
+ */
+namespace unicode {
+
+bool isAlpha (int ch);
+
+int decodeUtf8 (char *s);
+
+} // namespace lout
+
+} // namespace unicode
+
+#endif // __UNICODE_HH__
diff --git a/src/css.hh b/src/css.hh
index 532acc01..e81fde62 100644
--- a/src/css.hh
+++ b/src/css.hh
@@ -223,6 +223,7 @@ typedef enum {
CSS_PROPERTY_X_COLSPAN,
CSS_PROPERTY_X_ROWSPAN,
PROPERTY_X_LINK,
+ PROPERTY_X_LANG,
PROPERTY_X_IMG,
PROPERTY_X_TOOLTIP,
CSS_PROPERTY_LAST
diff --git a/src/html.cc b/src/html.cc
index 0cee0a8f..22952609 100644
--- a/src/html.cc
+++ b/src/html.cc
@@ -3440,6 +3440,14 @@ static void Html_parse_common_attrs(DilloHtml *html, char *tag, int tagsize)
html->styleEngine->setStyle (attrbuf);
}
+ if (tagsize >= 10) { /* TODO prefs.hyphenate? */
+ /* length of "<t lang=i>" */
+ attrbuf = Html_get_attr2(html, tag, tagsize, "lang",
+ HTML_LeftTrim | HTML_RightTrim);
+ if (attrbuf)
+ html->styleEngine->setNonCssHint(PROPERTY_X_LANG, CSS_TYPE_STRING,
+ attrbuf);
+ }
}
static void Html_display_block(DilloHtml *html)
diff --git a/src/styleengine.cc b/src/styleengine.cc
index 8453f3eb..19b9f371 100644
--- a/src/styleengine.cc
+++ b/src/styleengine.cc
@@ -601,6 +601,13 @@ void StyleEngine::apply (int i, StyleAttrs *attrs, CssPropertyList *props) {
case PROPERTY_X_LINK:
attrs->x_link = p->value.intVal;
break;
+ case PROPERTY_X_LANG:
+ attrs->x_lang[0] = tolower (p->value.strVal[0]);
+ if (attrs->x_lang[0])
+ attrs->x_lang[1] = tolower (p->value.strVal[1]);
+ else
+ attrs->x_lang[1] = 0;
+ break;
case PROPERTY_X_IMG:
attrs->x_img = p->value.intVal;
break;
diff --git a/test/Anna_Karenina_1.html b/test/Anna_Karenina_1.html
new file mode 100644
index 00000000..6deb470d
--- /dev/null
+++ b/test/Anna_Karenina_1.html
@@ -0,0 +1,25 @@
+<div lang="ru" style="text-indent: 0.7cm; text-align: justify">
+<p>Все счастливые семьи похожи друг на друга, каждая несчастливая семья несчастлива по-своему.</p>
+<p>Все смешалось в доме Облонских. Жена узнала, что муж был в связи с бывшею в их доме француженкою-гувернанткой, и объявила мужу, что не может жить с ним в одном доме. Положение это продолжалось уже третий день и мучительно чувствовалось и самими супругами, и всеми членами семьи, и домочадцами. Все члены семьи и домочадцы чувствовали, что нет смысла в их сожительстве и что на каждом постоялом дворе случайно сошедшиеся люди более связаны между собой, чем они, члены семьи и домочадцы Облонских. Жена не выходила из своих комнат, мужа третий день не было дома. Дети бегали по всему дому, как потерянные; англичанка поссорилась с экономкой и написала записку приятельнице, прося приискать ей новое место; повар ушел вчера со двора, во время самого обеда; черная кухарка и кучер просили расчета.</p>
+<p>На третий день после ссоры князь Степан Аркадьич Облонский&#160;— Стива, как его звали в свете,&#160;— в обычный час, то есть в восемь часов утра, проснулся не в спальне жены, а в своем кабинете, на сафьянном диване. Он повернул свое полное, выхоленное тело на пружинах дивана, как бы желая опять заснуть надолго, с другой стороны крепко обнял подушку и прижался к ней щекой; но вдруг вскочил, сел на диван и открыл глаза.</p>
+<p>«Да, да, как это было?&#160;— думал он, вспоминая сон.&#160;— Да,
+как это было? Да! Алабин давал обед в Дармштадте; нет, не в
+Дармштадте, а что-то американское. Да, но там Дармштадт был в
+Америке. Да, Алабин давал обед на стеклянных столах, да,&#160;— и
+столы пели: <span lang="it">Il mio tesoro</span>, и
+не <span lang="it">Il mio tesoro</span>, а что-то лучше, и какие-то
+маленькие графинчики, и они же женщины»,&#160;— вспоминал он.</p>
+
+<p>Глаза Степана Аркадьича весело заблестели, и он задумался, улыбаясь. «Да, хорошо было, очень хорошо. Много еще что-то там было отличного, да не скажешь словами и мыслями даже наяву не выразишь». И, заметив полосу света, пробившуюся сбоку одной из суконных стор, он весело скинул ноги с дивана, отыскал ими шитые женой (подарок ко дню рождения в прошлом году), обделанные в золотистый сафьян туфли и по старой, девятилетней привычке, не вставая, потянулся рукой к тому месту, где в спальне у него висел халат. И тут он вспомнил вдруг, как и почему он спит не в спальне жены, а в кабинете; улыбка исчезла с его лица, он сморщил лоб.</p>
+<p>«Ах, ах, ах! Ааа!..»&#160;— замычал он, вспоминая все, что было. И его воображению представились опять все подробности ссоры с женою, вся безвыходность его положения и мучительнее всего собственная вина его.</p>
+<p>«Да! она не простит и не может простить. И всего ужаснее то, что виной всему я, виной я, а не виноват. В этом-то вся драма,&#160;— думал он.&#160;— Ах, ах, ах!»&#160;— приговаривал он с отчаянием, вспоминая самые тяжелые для себя впечатления из этой ссоры.</p>
+<p>Неприятнее всего была та первая минута, когда он, вернувшись из театра, веселым и довольным, с огромною грушей для жены в руке, не нашел жены в гостиной; к удивлению, не нашел ее и в кабинете и, наконец, увидал ее в спальне с несчастною, открывшею все, запиской в руке.</p>
+<p>Она, эта вечно озабоченная, и хлопотливая, и недалекая, какою он считал ее, Долли, неподвижно сидела с запиской в руке и с выражением ужаса, отчаяния и гнева смотрела на него.</p>
+<p>— Что это? это?&#160;— спрашивала она, указывая на записку.</p>
+
+<p>И при этом воспоминании, как это часто бывает, мучало Степана Аркадьича не столько самое событие, сколько то, как он ответил на эти слова жены.</p>
+<p>С ним случилось в эту минуту то, что случается с людьми, когда они неожиданно уличены в чем-нибудь слишком постыдном. Он не сумел приготовить свое лицо к тому положению, в которое он становился пред женой после открытия его вины. Вместо того чтоб оскорбиться, отрекаться, оправдываться, просить прощения, оставаться даже равнодушным&#160;— все было бы лучше того, что он сделал!&#160;— его лицо совершенно невольно («рефлексы головного мозга»,&#160;— подумал Степан Аркадьич, который любил физиологию), совершенно невольно вдруг улыбнулось привычною, доброю и потому глупою улыбкой.</p>
+<p>Эту глупую улыбку он не мог простить себе. Увидав эту улыбку, Долли вздрогнула, как от физической боли, разразилась, со свойственною ей горячностью, потоком жестоких слов и выбежала из комнаты. С тех пор она не хотела видеть мужа.</p>
+<p>«Всему виной эта глупая улыбка»,&#160;— думал Степан Аркадьич.</p>
+<p>«Но что ж делать? что ж делать?»&#160;— с отчаянием говорил он себе и не находил ответа.</p>
+</div>
diff --git a/test/KHM1-shy.html b/test/KHM1-shy.html
new file mode 100644
index 00000000..b3924409
--- /dev/null
+++ b/test/KHM1-shy.html
@@ -0,0 +1,56 @@
+<div style="text-align: justify">
+<p>In den al&shy;ten Zei&shy;ten, wo das Wün&shy;schen noch
+ge&shy;hol&shy;fen hat, leb&shy;te ein Kö&shy;nig, des&shy;sen
+Töch&shy;ter wa&shy;ren al&shy;le schön, aber die jüng&shy;ste war so
+schön, daß die Son&shy;ne sel&shy;ber, die doch so vie&shy;les
+ge&shy;se&shy;hen hat, sich ver&shy;wun&shy;der&shy;te so oft sie ihr
+ins Ge&shy;sicht schien. Na&shy;he bei dem Schlos&shy;se des
+Kö&shy;nigs lag ein gro&shy;ßer dunk&shy;ler Wald, und in dem
+Wal&shy;de un&shy;ter ei&shy;ner al&shy;ten Lin&shy;de war ein
+Brun&shy;nen: wenn nun der Tag recht heiß war, so ging das
+Kö&shy;nigs&shy;kind hin&shy;aus in den Wald und setz&shy;te sich an
+den Rand des küh&shy;len Brun&shy;nens: und wenn sie
+Lan&shy;ge&shy;wei&shy;le hat&shy;te, so nahm sie eine
+gol&shy;de&shy;ne Ku&shy;gel, warf sie in die Hö&shy;he und fieng sie
+wie&shy;der; und das war ihr liebs&shy;tes Spiel&shy;werk.</p>
+<p>Nun trug es sich ein&shy;mal zu, daß die gol&shy;de&shy;ne
+Ku&shy;gel der Kön&shy;igs&shy;toch&shy;ter nicht in ihr Händ&shy;chen
+fiel, das sie in die Hö&shy;he ge&shy;hal&shy;ten hat&shy;te,
+son&shy;dern vor&shy;bei auf die Er&shy;de schlug und
+ge&shy;ra&shy;de&shy;zu ins Was&shy;ser hin&shy;ein roll&shy;te. Die
+Kö&shy;nigs&shy;toch&shy;ter folg&shy;te ihr mit den Aug&shy;en nach,
+aber die Ku&shy;gel ver&shy;schwand, und der Brun&shy;nen war tief, so
+tief daß man kei&shy;nen Grund sah. Da fieng sie an zu wei&shy;nen und
+wein&shy;te im&shy;mer lau&shy;ter und konn&shy;te sich gar nicht
+trös&shy;ten. Und wie sie so klag&shy;te, rief ihr je&shy;mand zu „was
+hast du vor, Kö&shy;nigs&shy;toch&shy;ter, du schreist ja daß sich ein
+Stein er&shy;bar&shy;men möchte.“ Sie sah sich um, wo&shy;her die
+Stim&shy;me kä&shy;me, da er&shy;blick&shy;te sie einen Frosch, der
+sei&shy;nen di&shy;cken häß&shy;li&shy;chen Kopf aus dem Was&shy;ser
+streck&shy;te. „Ach, du bists, al&shy;ter
+Was&shy;ser&shy;pat&shy;scher,“ sag&shy;te sie, „ich wei&shy;ne über
+mei&shy;ne gol&shy;de&shy;ne Ku&shy;gel, die mir in den Brun&shy;nen
+hin&shy;ab ge&shy;fal&shy;len ist.“ „Sei still und wei&shy;ne nicht,“
+ant&shy;wor&shy;te&shy;te der Frosch, „ich kann wohl Rath
+schaf&shy;fen, aber was gibst du mir, wenn ich dein Spiel&shy;werk
+wie&shy;der her&shy;auf&shy;ho&shy;le?“ „Was du ha&shy;ben willst,
+lie&shy;ber Frosch,“ sag&shy;te sie, „mei&shy;ne Klei&shy;der,
+mei&shy;ne Per&shy;len und Edel&shy;stei&shy;ne, auch noch die
+gol&shy;de&shy;ne Kro&shy;ne, die ich tra&shy;ge.“ Der Frosch
+ant&shy;wor&shy;te&shy;te „dei&shy;ne Klei&shy;der, dei&shy;ne
+Per&shy;len und Edel&shy;stei&shy;ne, und dei&shy;ne gol&shy;de&shy;ne
+Kro&shy;ne, die mag ich nicht: aber wenn du mich lieb ha&shy;ben
+willst, und ich soll dein Ge&shy;sel&shy;le und
+Spiel&shy;ka&shy;me&shy;rad sein, an dei&shy;nem Tisch&shy;lein
+ne&shy;ben dir si&shy;tzen, von dei&shy;nem gol&shy;de&shy;nen
+Tel&shy;ler&shy;lein es&shy;sen, aus dei&shy;nem Be&shy;cher&shy;lein
+trin&shy;ken, in dei&shy;nem Bett&shy;lein schla&shy;fen: wenn du mir
+das ver&shy;sprichst, so will ich hin&shy;un&shy;ter stei&shy;gen und
+dir die gol&shy;de&shy;ne Ku&shy;gel wie&shy;der her&shy;auf
+ho&shy;len.“ „Ach ja,“ sag&shy;te sie, „ich ver&shy;spre&shy;che dir
+alles, was du willst, wenn du mir nur die Ku&shy;gel wie&shy;der
+bringst.“ Sie dach&shy;te aber „was der ein&shy;fäl&shy;ti&shy;ge
+Frosch schwätzt, der sitzt im Was&shy;ser bei sei&shy;nes
+Glei&shy;chen und quackt, und kann kei&shy;nes Men&shy;schen
+Ge&shy;sel&shy;le sein.“</p>
+</div>
diff --git a/test/KHM1.html b/test/KHM1.html
new file mode 100644
index 00000000..c1665f00
--- /dev/null
+++ b/test/KHM1.html
@@ -0,0 +1,39 @@
+<div style="text-align: justify">
+<p>In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein
+König, dessen Töchter waren alle schön, aber die jüngste war so schön,
+daß die Sonne selber, die doch so vieles gesehen hat, sich verwunderte
+so oft sie ihr ins Gesicht schien. Nahe bei dem Schlosse des Königs
+lag ein großer dunkler Wald, und in dem Walde unter einer alten Linde
+war ein Brunnen: wenn nun der Tag recht heiß war, so ging das
+Königskind hinaus in den Wald und setzte sich an den Rand des kühlen
+Brunnens: und wenn sie Langeweile hatte, so nahm sie eine goldene
+Kugel, warf sie in die Höhe und fieng sie wieder; und das war ihr
+liebstes Spielwerk.</p>
+<p>Nun trug es sich einmal zu, daß die goldene Kugel der Königstochter
+nicht in ihr Händchen fiel, das sie in die Höhe gehalten hatte,
+sondern vorbei auf die Erde schlug und geradezu ins Wasser hinein
+rollte. Die Königstochter folgte ihr mit den Augen nach, aber die
+Kugel verschwand, und der Brunnen war tief, so tief daß man keinen
+Grund sah. Da fieng sie an zu weinen und weinte immer lauter und
+konnte sich gar nicht trösten. Und wie sie so klagte, rief ihr jemand
+zu „was hast du vor, Königstochter, du schreist ja daß sich ein Stein
+erbarmen möchte.“ Sie sah sich um, woher die Stimme käme, da erblickte
+sie einen Frosch, der seinen dicken häßlichen Kopf aus dem Wasser
+streckte. „Ach, du bists, alter Wasserpatscher,“ sagte sie, „ich weine
+über meine goldene Kugel, die mir in den Brunnen hinab gefallen ist.“
+„Sei still und weine nicht,“ antwortete der Frosch, „ich kann wohl
+Rath schaffen, aber was gibst du mir, wenn ich dein Spielwerk wieder
+heraufhole?“ „Was du haben willst, lieber Frosch,“ sagte sie, „meine
+Kleider, meine Perlen und Edelsteine, auch noch die goldene Krone, die
+ich trage.“ Der Frosch antwortete „deine Kleider, deine Perlen und
+Edelsteine, und deine goldene Krone, die mag ich nicht: aber wenn du
+mich lieb haben willst, und ich soll dein Geselle und Spielkamerad
+sein, an deinem Tischlein neben dir sitzen, von deinem goldenen
+Tellerlein essen, aus deinem Becherlein trinken, in deinem Bettlein
+schlafen: wenn du mir das versprichst, so will ich hinunter steigen
+und dir die goldene Kugel wieder herauf holen.“ „Ach ja,“ sagte sie,
+„ich verspreche dir alles, was du willst, wenn du mir nur die Kugel
+wieder bringst.“ Sie dachte aber „was der einfältige Frosch schwätzt,
+der sitzt im Wasser bei seines Gleichen und quackt, und kann keines
+Menschen Geselle sein.“</p>
+</div>
diff --git a/test/KHM1b.html b/test/KHM1b.html
new file mode 100644
index 00000000..adefc1ef
--- /dev/null
+++ b/test/KHM1b.html
@@ -0,0 +1,14 @@
+<p style="text-align: justify">In den al&shy;ten Zei&shy;ten, wo das
+Wün&shy;schen noch ge&shy;hol&shy;fen hat, leb&shy;te ein Kö&shy;nig,
+des&shy;sen Töch&shy;ter wa&shy;ren al&shy;le schön, aber die
+jüng&shy;ste war so schön, daß die Son&shy;ne sel&shy;ber, die doch so
+vie&shy;les ge&shy;se&shy;hen hat, sich ver&shy;wun&shy;der&shy;te so
+oft sie ihr ins Ge&shy;sicht schien. Na&shy;he bei dem Schlos&shy;se
+des Kö&shy;nigs lag ein gro&shy;ßer dunk&shy;ler Wald, und in dem
+Wal&shy;de un&shy;ter ei&shy;ner al&shy;ten Lin&shy;de war ein
+Brun&shy;nen: wenn nun der Tag recht heiß war, so ging das
+Kö&shy;nigs&shy;kind hin&shy;aus in den Wald und setz&shy;te sich an
+den Rand des küh&shy;len Brun&shy;nens: und wenn sie
+Lan&shy;ge&shy;wei&shy;le hat&shy;te, so nahm sie eine
+gol&shy;de&shy;ne Ku&shy;gel, warf sie in die Hö&shy;he und fieng sie
+wie&shy;der; und das war ihr liebs&shy;tes Spiel&shy;werk.</p>
diff --git a/test/KHM1c.html b/test/KHM1c.html
new file mode 100644
index 00000000..3f3271fc
--- /dev/null
+++ b/test/KHM1c.html
@@ -0,0 +1,10 @@
+<p style="text-align: justify">In den alten Zeiten, wo das Wünschen
+noch geholfen hat, lebte ein König, dessen Töchter waren alle schön,
+aber die jüngste war so schön, daß die Sonne selber, die doch so
+vieles gesehen hat, sich verwunderte so oft sie ihr ins Gesicht
+schien. Nahe bei dem Schlosse des Königs lag ein großer dunkler Wald,
+und in dem Walde unter einer alten Linde war ein Brunnen: wenn nun der
+Tag recht heiß war, so ging das Königskind hinaus in den Wald und
+setzte sich an den Rand des kühlen Brunnens: und wenn sie Langeweile
+hatte, so nahm sie eine goldene Kugel, warf sie in die Höhe und fieng
+sie wieder; und das war ihr liebstes Spielwerk.</p>
diff --git a/test/Makefile.am b/test/Makefile.am
index a0a23c6a..15ab227b 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -21,7 +21,9 @@ noinst_PROGRAMS = \
dw-ui-test \
fltk-browser \
shapes \
- cookies
+ cookies \
+ liang \
+ notsosimplevector
dw_anchors_test_SOURCES = dw_anchors_test.cc
dw_anchors_test_LDADD = \
@@ -159,3 +161,16 @@ cookies_SOURCES = cookies.c
cookies_LDADD = \
$(top_builddir)/dpip/libDpip.a \
$(top_builddir)/dlib/libDlib.a
+
+liang_SOURCES = liang.cc
+
+liang_LDADD = \
+ $(top_builddir)/dw/libDw-widgets.a \
+ $(top_builddir)/dw/libDw-fltk.a \
+ $(top_builddir)/dw/libDw-core.a \
+ $(top_builddir)/lout/liblout.a \
+ @LIBFLTK_LIBS@
+
+notsosimplevector_SOURCES = notsosimplevector.cc
+
+notsosimplevector_LDADD = $(top_builddir)/lout/liblout.a
diff --git a/test/anchors.html b/test/anchors.html
new file mode 100644
index 00000000..c04fdddc
--- /dev/null
+++ b/test/anchors.html
@@ -0,0 +1,650 @@
+<p lang="de"><a href="#unten">Nach
+unten</a>. Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung.
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung.
+<span id="unten"><b>Hier ist unten.</b> (Nicht ganz.)</span> Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung.
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung.
+</p>
diff --git a/test/hyph-de-1996.pat b/test/hyph-de-1996.pat
new file mode 100644
index 00000000..e922353e
--- /dev/null
+++ b/test/hyph-de-1996.pat
@@ -0,0 +1,14211 @@
+.ab1a
+.abi4
+.ab3l
+.abo2
+.ab3ol
+.ab1or
+.ack2
+.ag4n
+.ag4r
+.ag2u
+.ai2s
+.akt2a
+.al3br
+.al2e
+.al5l4en
+.al4tei
+.alt3s
+.ampe4
+.amt4s3
+.an3d2
+.anden6k
+.and4ri
+.ang2
+.an3gli
+.angs4
+.angst3
+.an3s
+.an4si.
+.ans2p
+.ans2t
+.an4tag
+.an3th
+.apo1
+.aps2
+.ari1e
+.ark2a
+.ar4m3ac
+.ar2sc
+.ar4t3ei
+.as3t
+.as4ta
+.at4h
+.au3d
+.au2f3
+.au4s3
+.ausch3
+.ax4
+.äm3
+.ät2s
+.be3erb
+.bei6ge.
+.be3ra
+.be3r2e
+.berg3a
+.ber6gab
+.ber4g3r
+.boge2
+.bo4s3k
+.bu4ser
+.by4t
+.ch2
+.dab4
+.da2r1
+.da4rin
+.darm1
+.da4te.
+.da4tes
+.de2al
+.de1i
+.de4in.
+.de1o2
+.de3r4en
+.de1s
+.des2e
+.de3sk
+.des2t
+.dien4e
+.do2mo
+.do1pe
+.dorf1
+.dü1b
+.dys1
+.ebe2r1
+.ehe1i
+.ei3e2
+.ei4na
+.einen6g
+.ei2sp
+.ei4st
+.ei4tr
+.eke2
+.el2bi
+.elb3s
+.em3m2
+.en1
+.en4d3er
+.en5der.
+.en2d3r
+.end3s
+.enn2
+.enns3
+.en2t3
+.en4tei
+.en4tr
+.er8brecht
+.er2da
+.er4dan
+.er4dar
+.er4dei
+.er4der
+.er1e
+.ere3c
+.erf4
+.er1i
+.er8stein
+.er8stritt.
+.er8stritten.
+.er4zen4
+.es1p
+.es3ta
+.es5t4e
+.est2h
+.es3to
+.es5tr
+.et2s
+.eu1
+.eu3g4
+.eu3t
+.eve4r
+.ext4
+.fe2i
+.fer4no
+.fi3est
+.fi4le.
+.fi4len
+.fi2s
+.flug1
+.for2t
+.fs4
+.fu2sc
+.ga4t
+.gd2
+.ge5nar
+.ge3ne
+.ge3r2a
+.ge3r2e
+.ge3u
+.gs4
+.guss1
+.hau2t1
+.he2
+.he3fe
+.her3an
+.he3ri
+.he6r5inn
+.ho4met
+.ia4
+.im2a
+.ima4ge
+.im5m
+.in1
+.in3e
+.ink4
+.inn2e
+.int6
+.inu1
+.ire3
+.is2a
+.jor3
+.ka2b5l
+.ka2i
+.kamp2
+.ka4t3io
+.ki4e
+.kle2i
+.kopf1
+.ks2
+.kus2
+.le4ar
+.li2f
+.li4tu
+.lo4g3in
+.lo3ver
+.lus4tr
+.ma3d
+.ma2i
+.ma3la
+.ma2st
+.md2
+.me2e
+.mel2a
+.men8schl
+.men8schw
+.men3t4
+.mi4t1
+.mm2
+.näs1c
+.ne4s
+.ni4e
+.nob4
+.no4th
+.nus2
+.oa3
+.ob1a
+.obe2
+.oper4
+.or2a
+.ort2
+.orts3e
+.oste2
+.ost5end
+.os8ten8de
+.oste6re
+.ost3r
+.ozo4
+.öd2
+.pa4r1e
+.par3t4h
+.pf4
+.ph4
+.poka2
+.pro1
+.ps2
+.ram3s
+.reb3s2
+.re3cha
+.rein4t
+.reli1
+.reli3e
+.res6tr
+.ri2as
+.richt6e
+.ro4a
+.ro3m2a
+.rö2s1
+.rü1b
+.rü6cker6
+.sali3e
+.sch4
+.se3ck
+.sen3s
+.ser2u
+.se2t1
+.sha2
+.sim3p4
+.si4te
+.ski1e
+.spiege8lei
+.st4
+.sto4re
+.sucher6
+.tage4s
+.tal2e
+.tan4k3l
+.ta2to
+.te2e
+.te2f
+.te3no
+.te2s
+.te4st
+.th4
+.ti2a
+.tid1
+.ti2s
+.ti5ta
+.tite4
+.to4nin
+.to4pl
+.to2w
+.tri3es
+.tro2s
+.ts2
+.tu3ri
+.uf2e2
+.ufer1
+.ul4mei
+.um3
+.umo2
+.un3a2
+.un3d
+.un3e
+.un3g
+.uni4t
+.un3s
+.uns4t
+.ur1
+.ur2i
+.urin4s
+.ur3o2m
+.uro2p
+.ur3s2
+.ut2a
+.ut3r
+.übe4
+.ve5n2e
+.vo4r
+.wah4l
+.wa2s
+.wei4ta
+.wi4e
+.wor2
+.wort5en6
+.wor8tend
+.wor4tu
+.xe3
+.ya4l
+.za2s
+.zi2e
+.zin4st
+.zwe2
+2aa
+a1ab
+aa2be
+aa1c
+aa2gr
+4a1a2n
+4a2ar
+aa2r1a
+aar3f4
+aart4
+aas5t
+aat4s3
+a3au
+a1ä
+a1b
+2aba
+ab1auf
+ab1ä
+ab2äu
+1abd
+ab1eb
+abe1e
+abei1
+ab1eil
+2abel
+abe2la
+a3ber
+ab1erk
+ab1err
+ab1erz
+ab3esse
+2abet
+2abew
+1abf
+3abfi
+1abg
+1abh
+2abi
+ab1ins
+ab1ir
+ab1it
+1abk
+ab1l
+1a2bla
+ab5lag
+1a2blä
+2able
+ab4le.
+ab3li
+ab4lo
+3a2blö
+a2blu
+1abn
+a2bo.
+ab2of
+a2bon
+2abor
+ab3r
+a3bra
+a4brä
+2abrü
+1abs
+2abs.
+abs2a
+2absar
+ab3s2i
+ab3sp
+abst4
+2abst.
+ab3ste
+ab3sz
+1abtei
+2abu
+ab1ur
+2abü
+1abw
+2aby
+aby4t
+1abz
+2ac.
+2aca
+2ac1c
+a1cem
+2ach.
+ach1a
+a1chal
+ach3au
+2achb
+a1che
+a2ch1e2c
+ach1ei
+a4cherf
+a4cherk
+a4cherö
+a4ch3erw
+4achf
+a1chi
+ach3l
+ach3m
+ach3n
+a1cho
+a3cho.
+ach1o2b
+ach1or
+ach3ö
+ach3r
+ach3su
+a4cht
+acht5erg
+ach2t1o
+ach8traum
+ach8träume.
+ach8träumen.
+ach6trit
+a1chu
+ach1u2f
+ach3ü
+2achv
+4ach1w
+a1ci
+ac1in
+a1ckar
+ack2en
+a2ckin
+ack2se
+ack3sl
+ack3sta4
+a1cl
+acon4n
+2acu
+a1ç
+a1d
+2ada.
+a3d2ab
+ad2ag
+ad3ama
+a2d1an
+3a4dap
+a3d2ar3
+4adav
+1a2dä
+ad1c
+1add
+2ade.
+ade2al
+adefi4
+a2dein
+2aden
+ade1r2a
+a2deri
+4ade1s
+ade3s2p
+ades4s
+ade5str
+2adf
+2adh
+4a3di
+adi3en
+5adj
+2ado
+ad2ob
+2adp
+2adq
+2ad3rec
+ad4res
+ad3ru
+2ads2
+ad3st
+ad3sz
+2ad2t1
+ad4te
+ad4tr
+2adu
+2a1e
+ae2b
+ae2c
+ae2d
+a2ek
+a2ela
+a2ele
+ae2o3
+ae2p
+3a2er2o1
+aes5t
+a2et
+a2ew
+ae2x
+af1a
+a2fak
+a2fan
+a3far
+af4at
+a2fau
+2afe
+a2f1ec
+a2fent
+af1erl
+a2fex
+af2fl
+af4flu
+2afi
+2af3l
+afo1s
+a2fö
+af3ra
+af3rä
+af3re
+af3rö
+af3s2a
+af2sp
+af2t1a
+af2tei
+af4t3erl
+af2t3r
+af4t5re
+af2tur
+a2f3ur
+a1g
+2aga
+ag1ab
+ag1a2d
+ag1ar
+ag1au
+ag2di
+ag2dr
+ag2du
+age1i
+age4na
+age4neb
+a2gent
+a4gentu
+age4ral
+2ages
+age2sa
+age4sel
+age4si
+age2s3p
+ag3esse
+age4s3ti
+ag3gl
+1aggr
+3a2git
+2a2gl
+ag4la
+a4glö
+ag2n
+ag4ne.
+ag4nu
+a2g3re
+a2g3ri
+ag4ro
+agsa2
+ag4sam
+ag4set
+ags3p
+ag4spo
+ag3sta
+ag3ste
+ags4toc
+2agt
+ag2th
+a2gund
+2ah.
+2a1ha
+ah4at
+2a1he
+a2h1erh
+ahe1s
+a1h2i
+ahin3
+ahl3a2
+ah4l1ei
+ah4l3erh
+ah2lö
+ahl3sz
+ah4n1a
+ahner4e
+ahnt2
+1ahor
+ah1os
+a2h3ö
+ahr1a
+ah3r2e
+ahre4s3
+ah3ri
+ahrta4
+ahr6tri
+2ahs
+aht3s
+a1hu
+ah1w
+a1hy
+2ai
+aian3
+aid2s
+ai1e2
+aien3
+aif2
+ai3g4
+a3ik.
+ai3ke
+ai3ku
+a2il
+ai2lo
+a1ind
+ain4e
+a1ing
+ain3sp
+ai2sa
+a3isch.
+ai3s2e
+aiso2
+a3iv.
+aive3
+a3ivl
+a3ivs
+a1j
+aje2
+2ak.
+1a2k4ad
+2akal
+2a3kam
+2akar
+ak4at
+1a2kaz
+2akb
+2akc
+2akd
+4a1ke
+a2kef
+aken2n
+a2keu
+2a1ki
+2ak3l
+ak4li
+4ako
+2a1kr
+4akra
+ak3rau
+3akro
+2aks
+ak3sh
+2akta
+ak5tan
+2aktb
+2aktik
+ak2t3r
+ak5t4ri
+2aktst
+2a1ku
+a2kun
+4a3kü
+1akz
+a1la
+2ala.
+al1ab
+ala5ch2
+al1af
+ala2g
+al1age
+a3lal
+al1am
+al3ame
+alami5
+al3amp
+al1ana
+a2l1ang
+al1ans
+al1anz
+a2lar
+a3lar.
+a3lare
+al2arm
+al3arr
+ala4s
+al1asi
+al1ass
+2alat
+al1au
+al3aug
+a1lä
+al1äm
+alb3ein
+alb3eis
+al4berh
+al4b3erw
+al2b1l
+alb3li
+al2boh
+al2br
+alb3ru
+alb3s
+al2dä
+al2dr
+alds2t
+al3du
+2ale
+3a2l1e2b
+3a2l1ef
+a4l1eh
+a2l1ei
+a4l3ein
+a2l1el
+alen1
+al3ends
+a2leng
+ale2p
+al1epo
+a2l1erf
+a2l1erh
+al1erl
+3alerm
+a2l1ert
+3a2lerz
+a2l1esk
+ale4t
+al1eta
+al1eth
+a2l1eu
+a4leur
+3a2lex
+alf4r
+3algi
+al2gli
+2ali
+ali4ene
+ali4nal
+al1ins
+a2linv
+alk1ar
+1alkoh
+alk3s2
+alks4t
+al2lab
+al2l3a4r
+al2lau
+al3lend
+all5erfa
+al3les
+alli5er.
+alli7ers.
+al2lob
+3almb
+2alo
+a2l1o2b
+alo2ga
+al1ope
+al1orc
+a2l1ö
+al2ös
+3alpe.
+1alph
+al3skl
+al4spal
+al5s6terb
+al3sun
+al2tak
+al3tam
+alt3eig
+al4t3erf
+al2tre
+al2tri
+alt3ric
+al2tro
+alt2se
+alt4stü
+a1lu
+al2uf
+a2lum
+al1umb
+al1ur
+4aly
+alzer4z
+al2zw
+2am.
+2am2a
+amab4
+amad2
+ama3g
+2amä
+2ambiq
+2am4e
+4ame.
+a2meb
+ame2n1
+amer2a
+a2meri
+ame3ru
+a4mesh
+a3met
+a2mew
+2amf
+a3mi.
+a3mie
+2a3mir
+a3mis
+ami3ta
+ami3ti
+2amk
+2aml
+2ammal
+am2mei
+am2min
+2amml
+ammu2
+a2mö
+amp2fa2
+am3pr
+2am2s
+am3sa
+am4schl
+am3str
+1amt.
+am2t1a
+am2t1ä
+am4tel
+2amtem
+am4t3ern
+am4tö
+am2t3r
+am4tre
+am2tu
+2amu
+2ana.
+2anab
+ana3c
+anadi3
+a3nak
+an1alg
+ana4lin
+2anam
+2anan
+2ana1s4
+an1äs
+1anb
+2anbu
+an3ch
+2and.
+an3dac
+and4art
+andel4s
+ande2s
+an2dex
+an2d3rü
+and4sas
+and6spas
+and3ste
+and2su
+2andu
+and1ur
+2ane
+an3e2c
+a3nee
+an2ei.
+an3eif
+an1e4k
+3a4n1erb
+an1eth
+1anf
+2anfi
+anft5s
+an3f2u
+4ang.
+3angeb
+an2g1ei
+an4g3erf
+an4g3erl
+an4g3erz
+2angf
+2angh
+2angie
+ang1l
+an2gla
+2ango
+ang1r
+an2g3ra
+4angs.
+ang4s3po
+1anh
+2a3ni
+an2id
+ani5ers.
+3a4nim
+a4nins
+2anj
+2ank.
+an2k1an
+an2kei
+an3kl
+an4klö
+an2k3no
+ank1r
+an2k3ra
+an2k3rä
+ankt4
+an2ky
+1anl
+2anmu
+2ann
+3an3na
+ann2ab
+3annä
+an3n2e
+an1od
+a3nol
+a2n1or
+a3nos
+a1nö
+2anpr
+1anr
+1ansä
+1ansc
+ans2en
+an2seu
+2ansk
+an3skr
+ans1pa
+1anspr
+an3s2z
+2ant.
+an2t3a4r
+1antá
+1antei
+3antenn
+an3t4he
+1anthr
+2anto
+1antr
+ant3rin
+an2tro
+1antw
+2a1nu
+anu3s
+a1nü
+1anw
+2anwet
+2anzb
+1anzei
+2anzg
+an2z1i4n
+2anzs
+1anzü
+2anzw
+an2zwi
+2ao
+ao1i
+a1op
+a1or
+a1os3
+ao3t2
+a3ot.
+a1ö
+a1p
+2ap.
+2apa
+2ape
+a2pef
+a3pel
+a2pé
+a2pf
+ap2fa
+a3pfl
+a3phä
+a2pht
+2ap3l
+ap2n
+a2pot
+3appl
+ap3pu
+2apr
+2a3pu
+2aq
+2ar.
+a1ra
+a3ra.
+ar2ab
+ar3abt
+ara3d2
+a2r3al
+a3ra3li
+a2r1ang
+a2r1ans
+a2r1anz
+a2r3app
+2a2rar
+a2r1au
+a1rä
+1arb
+2arb.
+4arba
+ar2bau
+ar2bec
+2arben
+2arbi
+ar2bl
+2arbr
+ar2bre
+2arbs2
+2arbt
+2arbu
+ar2b3un
+1ar1c
+ar2dro
+2are
+a2rea
+ar1eff
+a4reg
+a2reh
+ar1ehr
+a2rein
+a4rek
+a3ren
+aren4se
+are3r2a
+ar2erf
+a2r1erh
+a2reri
+a2rerl
+are3u
+ar2ew
+2arf
+arf1r
+ar2f3ra
+ar2gl
+ar2gn
+2arh
+2ari
+ar2ia
+ari3e4n
+ari3erd
+ari3erg
+ar1im
+arin3it
+ar1int
+a3riu
+ar2kal
+ark3amt
+ar2k1ar
+ark3aue
+ark3lag
+ar2kor
+ar4kri
+ark1s4
+ark3sa
+ark3sh
+ark4tre
+ar2les
+arm2ä
+ar4merk
+ar3m2or
+ar2nan
+arn2e
+2a1ro
+ar1ob
+a2r1o2d
+a2r1op
+a2ror
+2arr
+ar2r3ad
+arre4n3
+ar2rh
+arr3he
+2arsa
+ar4schl
+arse3
+ar3s2h
+2arsi
+ar2st
+ar3sta
+ar3t2e
+ar2the
+ar3t2i
+artin2
+2arto
+art3r
+ar4tram
+ar6tri
+2arts
+2aru
+ar1uh
+ar1um
+a2rü
+2arv
+arwa2
+2ary
+ar2zä
+2arze
+1arzt
+ar2z1w
+as1ala
+as3au
+a2s1ä
+a2sca
+a3sche
+a4schec
+a3schi
+asch3la
+a2schm
+a3schu
+4as2e
+a2seb
+a2s3e2m
+a3ses
+4ash
+a3s2hi
+asin2g
+2asis
+aska3s
+a3skop
+a2s1o2f
+as1or
+a2sö
+a2s1p
+as3pan
+as2ph
+as2pi
+as2po
+a3spu
+as3s2a
+as3s2e
+as4s3ei
+as3s2i
+as2s1p
+as2st
+ass3ti
+as3str
+as3stu
+2as3ta
+a1s4tas
+as4tau
+as3te
+as2th
+as3ti
+as3to
+as4tof
+2astr
+ast3rä
+as6t3re
+a2sü
+aswa2s
+3a2syl
+a1ß
+aße2
+aßen3
+2a1t
+ata1
+at1ab
+at2af
+at4ag
+a2t1akt
+ata3l
+a3tam
+at1apf
+at1au
+a2taus
+a2t1ä
+at2c
+at2e
+4ate.
+a2teb
+at3eig
+a2teli
+4aten
+a2tep
+ater3s2
+ate2ru
+4ates
+at2h
+at3ha
+4athe1
+3athl
+4a3ti
+atil4s
+ati2st
+3atm
+4atmus
+ato4man
+4ator
+a2t1ort
+at1ö
+4atr
+atra4t
+at3rä
+at3re
+at3rom
+at2sa
+at4schn
+at2se
+at4set
+at2si
+at2so
+at2s1p
+at3ta
+at4tak
+att3ang
+at4tau
+at2tei
+at3t4hä
+at2t3rä
+att3s
+a3tub
+atu2n
+a3tü
+atz1er
+at4zerk
+at4zerw
+at2z1in
+at2zo
+atz3t2
+at2z1w
+a2u
+2au.
+2au1a2
+2aub
+au2bli
+au2blo
+4auc
+auch3ta
+au2dr
+2aue
+aue2b
+au5erein
+aue2s
+au2fa
+auf1an
+2aufe.
+2aufeh
+auf1er
+au4ferk
+auff4
+3aufn
+2aufs.
+2aug
+4augeh
+4au1i
+au2is
+2auj
+aule2s
+au3lü
+4aum
+au2mal
+au2m1o
+aum3p2
+aum3s6
+4aun
+au3n4a
+aun2e
+au2nio
+au1nu
+a4unz
+au1o
+2aup2
+aup4ter
+2au3r2
+au2s1ah
+ausan8ne.
+au2sau
+2ausc
+au4schm
+au4scho
+1ausd
+aus3erp
+au4s3erw
+3ausf
+1ausg
+1ausl
+au2so
+au2spr
+1ausr
+aus3s2
+3aussag
+aus4se.
+auster6m
+aus5tri
+1ausü
+1ausz
+2aut.
+au2t1äu
+2aute
+au4ten4g
+au4t3erh
+1auto
+2auts4
+2auu
+2auw
+2aux
+2auz
+auz2w
+2a1ü
+2a1v
+a3v4a
+ava3t4
+4avi
+a2vr
+2a1w
+awi3e
+a1x
+ax4am
+ax2e
+2a1ya
+a1yeu
+ays4
+aysi1
+ay3t
+2a1z
+az2a
+az2o
+az2u
+ä1a
+ä1b
+ä2b3l
+äb2s
+ä1che
+äche1e
+ä1chi
+äch3l
+ä2chr
+äch2sp
+äch4st
+ä1chu
+ä1ck
+äck2e
+ä1d
+ä2da
+ä2d1ia
+ä2dr
+äd2s
+2ä1e
+äf2fl
+äf3l
+äf3r
+äf2s
+äft4s3
+ä1g
+äge1i
+äge3s
+ä2g3l
+äg2n
+ä2g3r
+äg4ra
+äg3str
+1ä2gy
+äh1a
+2ä3he
+ä3hi
+ähl1a
+ähl2e
+äh4l3e4be
+2ähm
+äh3ne
+äh3ri
+2ähs
+2äh3t4
+ä1hu
+äh1w
+ä1im
+ä1is.
+ä3isch.
+ä1isk
+ä1j
+ä1k
+ä2k3l
+ä2k3r
+ä1la
+älbe2
+äl2bl
+2äle
+äl2l1a
+äl2p3
+äl4schl
+ä1lu
+ämi3en
+2äml
+äm2s
+ämt2e
+2än.
+än5de
+än2dr
+2äne
+äne2n1
+äne1s
+än2f5
+2änge
+än2gl
+än2gr
+äng3se
+2ä3ni
+änk2e
+än2k3l
+än2kr
+änk2s
+än3n4e2
+2äns
+än2s1c
+änse3h
+ä1on
+ä1pa
+äp2pl
+äp2pr
+äp2s1c
+äp4st
+1äq
+ä2r3a2
+är4af
+är1ä
+är1c
+4äre
+ä2r1ei
+äre2n
+ä2r1ene
+är2gr
+är1int
+är2k3l
+ärk2s
+är4ment
+ärm2s
+är1o2
+ä1rö
+ärse2
+är4si
+är2st
+ärt4e
+är2th
+ärt2s3
+ä2rü
+1ärz
+är2zw
+ä5s4e
+äse3g2
+äser4ei
+äse4ren
+äser2i
+äse3t
+äskop2
+äskopf3
+ä3s2kr
+ä2s1p
+äs6s1c
+äss2e
+äs4s3erk
+äs2st
+ä4s3t2
+äs4tr
+ä3su
+ä1ß
+äß1erk
+ä4t1a2
+ä3te
+ät2e1i
+ätein2
+äte2n
+ät2h
+ät1ob
+ä2t3r
+ät2sa
+ät2sä
+ät4schl
+ät4schr
+ät2s1i
+äts3l
+ät2s1p
+ät2s3t
+ät4tr
+ät2zw
+äu2br
+äu1c
+äude3
+äu3el
+ä2uf
+äuf2e
+1äug
+äug3l
+4äul
+2äum
+äu2ma
+äum4s5
+ä2un
+äun2e
+äu1nu
+2äur
+2ä3us.
+äu4schm
+äu3se
+ä3usg
+ä3usk
+ä3usn
+äu2sp
+äus2s1c
+1äuß
+äu2tr
+4ä1v
+1äx
+ä1z
+â1t
+á1n
+ba2bl
+2babs
+bach7t4e
+backs4
+b1a2dr
+2b1af
+3bah
+bah2nu
+bais2
+ba2ka
+ba2k1er
+ba2k1i
+bak1l
+bak1r
+ba2kra
+3bal
+bal2a
+bal4l3eh
+bal6lerg
+bal3th
+2b1am
+ban2a
+3b2and
+ban2dr
+ba3n2e
+b1ang
+ban2k1a
+ban4kl
+ban2kr
+2banl
+2b1ans
+ban3t
+b1anz
+bar3b
+bar3de
+ba2rei
+bar2en
+bar3n
+bar3zw
+3bas
+ba3s2a
+ba2sc
+ba2st
+bau3g
+bau1s
+bau3s2k
+bau3sp
+ba1yo
+3b2ä1c
+b2är
+b2äs
+4b1b
+b3be
+bben3
+bbens2
+bbe4p
+bb3ler
+bb2lö
+bbru2c
+bb2s
+bbu1
+2b1c
+2b3d4
+bde1s
+3be.
+3bea
+be3an
+be3ar
+be3as
+3beb
+b2ebe
+1be1c
+be2del
+bedi4
+be1eh
+be2erk
+be1erl
+be1eta
+3bef4
+be3g2
+2b1eier
+bei1f4
+beik4
+beil2
+bei3la
+2b1eime
+b2ein
+be1ind
+be1in2h
+bei3sc
+beis2e
+bei1st
+beit2s
+3bek
+3bel
+be3las
+be3lec
+be3lei
+be2l1en
+be2let
+be3li
+bel3la
+bel3sz
+bel3t4
+1bem
+1ben.
+ben3ar
+ben3dor
+be3nei
+3ben3g
+be3n2i
+ben3n
+ben2se
+ben4spa
+ben4spr
+benst4
+ben2su
+2bentb
+b2enti
+ben5t4r
+b1ents
+2bentw
+ben3un
+ben3z2
+be1o
+be1ra
+ber3am
+be2ran
+ber4ei.
+be4r3eiw
+be4rerk
+bere4s
+ber6gan.
+ber4in.
+ber3iss
+ber3na
+b1ernt
+be2rob
+be3rop
+ber3st4a
+be3rum
+3be1s
+bes2a
+be2s1er
+be3slo
+bes2po
+bess4e
+b3esst.
+bes3sz
+be6stein
+be4s3tol
+be3s4ze
+3bet
+be2tap
+be3tha
+be1ur
+3b2ew
+2b1ex
+1bez
+2b5f4
+bfal2
+2b1g2
+bge3
+bges4
+2b5h2
+bhut2
+1bi
+bi3ak
+bib2
+bibe2
+bien3s
+bie2s
+bik2a
+bi2ke.
+bi2kes
+3bil
+bil2a
+bi2lau
+4b1illu
+bi2lu
+2b1inb
+bin2e
+2b1inf
+bin3gl
+2b1int
+bi2o1
+bio3d
+bi3on
+biri1
+bi3se
+b1iso
+bi2sol
+bi2sp
+bis2s1c
+bi2s5t
+b2it.
+b2it2a
+b2ite
+bi2tu
+b2i3tus
+biz2
+4b1j
+bjek4to
+2b1k4
+bl2
+2bl.
+bla3b4
+b3lad
+b2lanc
+3blat
+b2latt
+2b3law
+b2le
+3ble2a
+b3leb
+2b3leg
+2b3leid
+b3lein
+3blem
+3blen
+b3lese
+ble3sz
+b4let
+b3leu
+2blich
+3blick
+b2lie
+2blig
+bling4
+b3lis
+b2lit
+3blitz
+b2lo
+b4loc
+b3los
+2blun
+3blut
+3blü
+2b1m
+4b3n2
+bni2
+bnis1
+bo4a
+bo5as
+b1ob3
+bo2bl
+bo2br
+bo2c
+bo3ch2
+bo3d2
+boe1
+bo2e3i
+2b1of
+bo3fe
+bo1is
+bo2l1an
+3bon.
+bond1
+bon2de
+bo2ne
+3bons
+b1op
+bo1r2a
+bo4rä
+bor2d1i
+bor2d3r
+bo2rei
+bo4rig
+bor2s
+b1ort
+bor2t3r
+bo2sc
+bo4s3p
+bote3n4e
+bo3th
+bot2st
+bo2xi
+bö2b3
+2böf
+2b1p2
+bpa2g
+2b1q
+b2r4
+2br.
+b4ra.
+2b3rad
+b4rah
+b4ra3k
+bra1st4
+3brä
+brä4u
+2bre.
+3brea
+6b5rechte
+2b3ref
+2breg
+b3reif
+3brem
+2b3rep
+b4rer
+2b3riem
+bri2er
+2brig
+b4rio
+b3roh
+2b3rol
+b4ron
+b4ruc
+bru4s
+brust3
+bru2th
+3brü
+4b1s
+b2s1ad
+b3sand
+bs3ar
+bsat2
+b3sä
+b4sär
+bs2äu
+b5sc
+bs2ca
+b6schan
+b6schef
+bs4cu
+b3se.
+bse2b
+b3sel.
+bse2n1
+b4s1erf
+bs3e4r3in
+b4s1ers
+b3s2es
+bsi4t
+bs2ku
+b4sl
+b2s1of
+bso2r
+b2sö
+bs2pl
+b3s2pu
+bss2
+bs2t
+bst1a2b
+bst3ac
+bst1ak
+bs3tät
+bst3er
+b2stip
+b3sto
+b4stod
+b3stö
+b2s3trä
+bs3treu
+bs4tri
+b3stü
+b4stüb
+b2s1un
+4b3t
+btal3
+btast3r
+b5te
+b4th
+btil4
+bt4r
+b4ts2
+btü1
+bu2chi
+bu2e3
+bu2f
+bu3li
+bul2la
+2b3umk
+bung4
+b2urg
+bu3r4i
+bu2sa
+bu4s3cha
+bu4schl
+bu4schm
+bu4schw
+bus1er
+bu2sin
+bu2s1p
+bu2s1u
+bü1c
+bügel3e
+2b1v
+2b1w
+3by1
+by3p
+bys2
+2b3z2
+bzeit1
+1ca
+2c1ab
+ca1ch
+ca2e3
+ca3g4
+ca1h
+cal3t
+3cam
+c4an
+ca2pe
+3car
+car3n
+carri1
+ca3s2a3
+cas3t
+ca3t4h
+ca1y2
+cä3
+cäs2
+2cc
+c1ce
+c1ch2
+c2d2
+c3do
+2cec
+ce2dr
+2cef
+ce1i
+2cek
+1cen
+cen3g
+1cer
+cere3
+ce3sh
+1cet
+2ceta
+ce1u
+1cé
+2c1f
+c4h
+4ch.
+2chab
+ch3a2bi
+cha2ck
+2chaf
+2ch1ak
+ch2anb
+3chanc
+ch1ang
+ch3anst
+4chanz
+1chao
+4char.
+1chara
+3charta
+cha2sc
+3chato
+4chatu
+ch1ärm
+ch1äs
+1châ
+2chb
+2chc
+2chd
+ch3e4ben
+1chef
+3chef.
+che4fer
+3chefi
+3chefs
+4chei
+ch1eim
+4chelem
+che4ler
+4chents
+4chentw
+cher3a
+che3rei
+6chergeb
+cher6zie
+ch1ess
+2cheta
+2ch1e4x
+1ché
+2chf
+2chg
+2chh
+1ch1ia
+2chic
+chi3na
+4chind
+3chines
+2chinf
+2chinh
+ch1ins
+ch1int
+2ch1inv
+1chiru
+2chj
+2chk
+2chl2
+ch2le
+ch3lein
+ch2lu
+4ch2m
+2chn4
+chner8ei.
+2chob
+cho2f
+ch1off
+ch1oh
+ch1orc
+2chp
+ch2r4
+4chre
+chre3s
+ch3rh
+1chron
+4chs
+2cht
+2chuf
+2chuh
+2chum
+2ch1unf
+2chunt
+4chü
+2chv
+4chw
+2chz
+ci1c
+ci2s
+c1j
+c4k
+4ck.
+ck1a
+1cka.
+2ckac
+1ckag
+2ckal
+2ck3an
+cka4r1
+2ckau
+ck1ä
+2ckb
+2ckc
+2ckd
+1cke
+4ckeff
+2ckeh
+ck1ehe
+4ck1ei
+4ckense
+ck1ent
+4ckentw
+cke2ra
+ck2ere
+6ckergeb
+ck1erh
+4ckerhö
+4ckerke
+ck2ern
+2ckero
+2ck1err
+4ckerze
+2ck1ese
+2ckex
+2ckf
+2ckg
+2ckh
+1cki
+2ck1id
+ck1im
+ck1in
+3ckis
+2ckk
+2ck3l
+2ckm
+2ck3n
+ck1o2
+2ckp
+2ck3r
+4cks
+ck4stro
+2ckt
+ckt2e
+1cku
+2ck1um3
+2ckunt
+2ck1up
+2ckv
+2ckw
+1cky
+2ckz
+c4l2
+clet4
+clo1
+1clu
+c2m2
+3co
+co2c
+co3ch
+co2d2
+co4der.
+co3di
+coff4
+coi2
+co1it
+co2ke
+co2le
+col2o
+com4te.
+comtes4
+con2ne
+co2pe
+co1ra
+cor3d
+co3re
+cos4
+co4te
+cô4
+2cp
+2c1q
+1c4r2
+cre2
+cre4mes
+cry2
+2cs
+cs2a
+c2si
+c1s4tr
+4c1t
+cte3e
+cti2
+cti4o
+ctur6
+3cu
+cu2p3
+cussi4
+1cy
+2c1z
+3da.
+da1a
+2d1ab
+3d2abä
+da2ben
+3d2abl
+da2bre
+dab4rü
+2d1ac
+dach3a
+da2cho
+dach1s
+4d3achse
+d1af
+d1ag
+dagi2
+dah3l
+da1ho
+3d4ai
+da1in
+da1is
+dal2a
+2d1alar
+dal3b2
+da3lö
+d1alt
+d1amma
+2d1ammä
+damo3
+d4amp
+dampf8erf
+2d1amt
+d2an.
+2d1ana
+dan4ce.
+2d1an3d2
+d1ang
+2dange
+dan4kl
+dan5kla
+dan2k1o
+dan2kr
+2d1ans
+2dantw
+2danw
+d2anz.
+4danzi
+2d1ap
+d2aph
+4dapp
+da2r3a
+2darb2
+3d2arl
+dar2ma
+dar2m1i
+da2ro
+d3arr
+d2ar3s
+d1art
+da2ru
+d2arw
+da1s
+da3s2h
+das4t
+dat2a
+dat4e2
+da3tei
+date4n
+4d3atl
+4datm
+dau3e
+2d1au2f
+2dauk
+2d1aus3
+4daush
+2d1äh
+2d1ämt
+2d1änd
+2d1äng
+2d1äp
+2därz
+dä2u
+dä3us
+2d1b4
+dbu2c
+2dc
+d1ch
+dco4r
+2d1d2
+ddar2
+d3dh
+d5do
+1de
+de2ad
+de3as
+de3a2t
+de3b4
+2d1e4ben
+3de1c
+de4ca.
+de2cka
+deco3
+de1e4
+2d1eff
+deg2
+de3gl
+dehe2
+de3ho
+2d1ehr
+d1ei
+d2eic
+3d2e1im
+dein2d
+dein2s
+de2l1a4g
+de4l3aug
+del1än
+del1ec
+delei4g
+de3lein
+2delek
+2delem
+2delfm
+delle2
+del4leb
+del4lei
+de2l1ob
+de2lop
+de3lor
+de2lö
+del4san
+del5sc
+del2s5e
+del2so
+del2s1p
+del5ster
+del3t4
+dem2ar
+2d1emp
+d2en.
+dend2
+de4n3end
+4denerg
+den3g
+d2enh
+de2ni
+den4k3li
+4den4sem
+den4sen
+den6s5tau
+den3th
+2dentw
+de1nu
+de1on
+depi2
+d4er.
+dera2b
+de1rad
+de2rap
+der2bl
+2derdb
+de2re2b
+de4reck
+der3edi
+derer3
+de3r4erb
+de3r4erf
+de4r3ero
+derer4t
+4d3erhöh
+3derie
+derin4f
+4derklä
+der3m2
+4derneu
+4d3ersat
+der3tau
+der6t5en6d
+de3ru
+de4ruh
+de4rum
+des1
+de2sa
+de3sac
+desa4g
+de4sam
+des2äc
+de2seb
+de4seh
+de2sei
+des3elt
+de2sen1
+de4set
+de2sin
+de2sor
+de2sp
+des3s2
+dest5alt
+de2sto
+dest5rat
+de4stre
+des4tum
+de2su
+det2
+deten4t
+2d1etw
+de1un
+de1url
+de3us
+de2xis
+2dexp
+2d1f4
+2d1g2
+dga2
+d2ge.
+dge4t1e
+d3gl
+2d1h2
+dha1s4
+d2his
+1di
+di4ab
+di2ad
+di4am
+3dic
+di1ce
+di2e
+di3e2d
+die4neb
+di3eni
+di3ens.
+die2s3c
+diet3
+die2th
+dige4s
+dik2a
+dil2s5
+2d1imb
+din2a
+2d1ind
+2d1inf
+2d1inh
+2d1in1it
+4d3inner
+2d1ins
+2d1int
+di2ob
+dion3s
+di1p
+di4re.
+di2ren
+di2ris
+2d1irl
+di2sp
+2d1isr
+dist2
+di2s5te
+di2ta
+di4teng
+di4t3erl
+di4t3erm
+di4t3ers
+di2th
+di4t3r
+dit3s
+di2tu
+di5v
+di3z2
+2d1j
+2d1k4
+4d1l2
+d3la
+d3le
+dle2ra
+dli2f
+dl3m
+dl3s
+2d3m2
+4d5n2
+dni2
+dnis1
+d1ob
+d2oba
+2dobe
+dob4l
+d2obr
+2d1o2f
+dole4
+doll2
+do2mar
+do5n4a
+doni1e
+do2o
+2dope
+2d1opf
+d2opp
+d2o3r4a
+2dorc
+2dord
+dor2f1a
+dor2fä
+dor2fl
+dor2fr
+2d1org
+do2rie
+d2orp
+2dort
+dor2ta
+d2os.
+dos3s
+dost1r
+dot6h
+do3un
+d1ö
+dö2l1
+3d2ör
+dö2s1c
+2d3p2
+2d1q
+d2r4
+3d4ra.
+2d3rad
+drag4
+2drahm
+d3rai
+3d4ram
+d3rand
+2d3rast
+2d3rauc
+2dräd
+d4räh
+2d3rät
+2d3räu
+4dre.
+d4rea.
+d4reas
+3d4reck
+2dreg
+3d4reh
+2d3reic
+d4reiv
+4drem
+4d3ren
+2d3rep
+4d3rer
+4dres.
+d4resc
+2d3rh
+d3ri
+d4ri.
+3d4ria
+2d5ric
+d4rid
+d4rie
+d5rieg
+d4rif
+d4rik
+d4ril
+d4rin.
+3d4risc
+3d4rit
+4dritu
+d3rob
+d3roc
+2d3rod
+d4roi
+2d3rot
+d3rou
+2d3rov
+d3rö
+drö2s1
+d5rub
+3d4ruc
+2d3ruh
+drunge3
+2d5rut
+drü1b
+drü5cke
+2d1s
+d4s1amt
+d2san
+ds3assi
+d2sau2
+ds1än
+4dsb
+d4schin
+d2s1e2b
+d2s1ef
+d3sei
+ds2eig
+d4seins
+d2s1eng
+d2s1ent
+d2s1erf
+d2serh
+d2s1erk
+ds1err
+d2s1erz
+dse4t
+d4s1eta
+d3s2ha
+d3sho
+d2s1im
+ds2inf
+d3s2kan
+d3skul
+4dsl
+d2s1op
+dso2r
+ds1ori
+d2sö
+d2s1par
+ds1pas
+d2spä
+ds2po
+d2spro
+ds2pu
+dss4
+dst4
+ds3tab
+d4stag
+d4s3täti
+d2ste
+d4stea
+d3stei
+d3stell
+d4stem
+d3s4tern
+ds2ti
+ds4til
+ds4tip
+ds2tu
+ds1ums
+d2sun
+ds2zen
+2d1t
+dta2d
+d5tea
+d2th
+d4thei
+dt3ho
+dto2
+d3tö
+dt3r
+dtran2
+dt5s2
+d3tü
+1du
+du1alv
+du1ar
+dub3l
+du2bli
+du2f
+2d1ufe
+2d1uh
+du1i
+2d1umb
+2dumd
+2d1u2m1e
+2dumf
+2dumg
+2d3umk
+2duml
+d2ump
+2dumr
+d1ums
+d2ums.
+2d1umv
+2d1un3d
+dund2a
+2d1unf
+dung4
+dun3ke
+dun2kl
+2dunr
+dun2s
+2dunt
+du1o
+dur2
+2d1url
+2dursa
+du4schn
+du4schr
+du4schw
+dus3t
+2düb
+3düf
+3dün
+2d1v2
+2d1w
+dwa2
+dwest3
+dy2s
+2d1z
+2e1a
+e3a2b
+eab3l
+ea2c
+ea3der
+eadli4
+ea2dr
+ea2g4
+ea3ga
+ea4ge
+ea3gl
+eak1
+eakt2
+ea2la
+e3alei
+e4aler.
+eam3
+eam1o
+ea2na
+e2ano
+e3ar.
+ea2ra
+e3a4rene
+e3arr
+e3arv
+e2as
+eas3s
+eat4e2
+eater1
+e3ath
+ea5tr
+eat3s2
+e3at5t4
+e3au2f
+e3aug
+eau1st
+e1ä2
+e1b
+2eba
+e3b2ak
+2ebed
+ebe2i
+2ebel
+eb2en
+ebens3e
+2ebet
+2ebl
+eb3ler
+eb4leu
+e3blie
+eb3lo
+eb2lö
+2eb2o
+ebot2
+ebö2s
+2ebr
+eb3rei
+eb4ru
+eb2s1
+eb6sche
+ebse2
+ebs3pa
+eb3sta
+eb4stät
+ebs3tem
+ebs3t2h
+eb3str
+e3bu
+ebu2t1
+2e3ca
+e1ce
+ech1ä
+2e3che
+ech1ei
+e6ch5erzi
+e1chi
+ech3l
+ech3m
+ech3n
+e2cho.
+ech1o2b
+e2ch3r
+ech3ta
+ech3t4ei
+e1chu
+ech1uh
+ech1w
+e1ci
+eci6a
+eck3se
+2eckt
+2e1cl
+2eco
+e3cr
+ec1s4
+2ect
+e1d
+e3d2a
+ed2dr
+ed2e
+ede2al
+e3dei
+ede3n2e
+edens1
+eden4se
+eden4sp
+ede2r
+eder3t2
+edi4al
+e3d2o
+ed2ö
+eds2ä
+ed2s1es
+ed2s1o
+ed2s1p
+ed2s3tr
+ed2su
+edu2s
+e3dy3
+4ee
+ee3a2
+eeb2l
+ee2ce
+ee1ch
+ee2cho
+ee2ck
+eede3
+eed3s2
+ee1e
+e1eff
+eef4l
+eef3s
+eeg2
+e1ei
+ee1im
+eein4se
+eel2e
+ee2lek
+ee3len
+e1emp
+e1en
+eena2
+ee4nag
+e2enä
+e2enc
+ee3ni
+e2eno
+een3s
+e1e2pi
+ee1ra
+e1erbt
+e1erd
+ee3r2e
+ee4r3en4g
+eere2s
+ee4ret
+e1erk
+ee1rö
+eer2ös
+eert2
+e1ertr
+ee3r2u
+e1erz
+ee3s2
+ees3k
+ee3ta
+ee4tat
+ee2th
+ee1u2
+eewa4r
+e1e2x
+e1f
+2ef.
+2efa
+e2f1ad
+ef1ana
+ef1ar
+e2fat
+e2fäu
+2efe
+e3fe.
+e2f1e2b
+ef1em
+e2fent
+ef2er
+2eff.
+1effi
+ef2fl
+2efi
+e2f1i2d
+e2f1ins
+efi2s
+1efku
+2efl
+e3f4lu
+2e3f2o
+e3fra
+ef3rea
+ef3rol
+ef3rom
+ef4rü
+efs2
+ef3so
+ef3sp
+ef2tan
+2efu
+e2fum
+2efü
+e1g
+egas3
+egd4
+e3ge
+ege4n3a4
+ege2ra
+ege4str
+ege1u
+e2glo
+e2gn
+eg3ni
+eg4sal
+eg4se4r1
+eg4sto
+eg2th
+2egu
+egung4
+egus3
+2e1ha
+eh1ach
+e3h2al
+eh2aus
+2e1hä
+e1he
+eh2ec
+eh1eff
+eh2el
+ehen6t3
+1e2hep
+e3her
+ehe1ra
+ehe3str
+e1hi
+eh1int
+eh1lam
+eh1lä
+ehle2
+ehl3ein
+eh4lent
+eh5l2er
+eh2lin
+eh3lo
+ehl2se
+2ehm
+eh3mu
+e1ho
+e3hol
+ehr1a2
+ehr1ä
+ehr1e2c
+eh2rei
+ehr3erl
+ehr6erle
+ehre3s
+eh3ri
+eh1ro2
+ehr1ob
+ehr1of
+ehs2
+eh3sh
+eh1ste
+2eht
+e1hu
+e2hunt
+e1hü
+eh3üb
+eh1w
+e1hy
+2ei3a2
+4eib
+ei2bar
+ei2bl
+eibu4t
+ei4b3ute
+ei2cho
+e2id
+ei2d1a
+ei3dan
+ei3de
+ei4d3err
+2eidn
+ei3dra
+ei1e
+4eien3
+eienge4
+1eifr
+ei3g2a
+4eigeno
+eig2er
+2eigew
+ei3gl
+1ei2g3n
+2eigru
+2eigt
+2eigu
+eik2ar
+ei3kau
+eik4la
+e4il
+2eil.
+ei2lar
+ei2lau
+2eilb
+eil3d
+ei4lein
+eilen1
+eil3f4
+eil3ins
+2eiln
+1eilzu
+ei2m1a4g
+eim3all
+ei2mor
+e1imp
+eim2pl
+ei2n1a
+ei4nas
+ei4nä
+ein3dr
+2eindu
+ei4neng
+ei2neu
+2einfo
+ein4fo.
+ein4fos
+ein3g2
+ein4hab
+e1init
+ein3k
+ein6karn
+3einkom
+ei2n1o2
+3einsat
+ein6stal
+ein4sz
+e4inver
+ei3o2
+ei1p
+eip2f
+2eir
+ei3re
+e1irr
+e2is.
+ei2sa4
+ei6schwu
+ei4s3erw
+eis2pe
+eis4th
+ei1sto
+ei2sum
+e2it
+ei2tab
+ei2tan
+ei2tar
+2eitä
+ei3te
+ei2th
+ei2tro
+eitt4
+eit3um
+2eiu
+2e1j
+e1k
+ek2a
+1ekd
+e3ke.
+e3ken
+e3kes
+e3key
+e3k2l
+ek4n
+ek2o
+ek4r
+ek1s4t
+2ekt
+ekt4ant
+ekt3erf
+ekt3erg
+ek4t3erz
+ekt2o
+ek5tri
+ek2u
+e3k2w
+e1la
+ela4ben
+el2abt
+ela2c
+el1af
+ela2h
+e2l1ak
+e2l3a2m
+el4ami
+el4amp
+el1ans
+el1anz
+2elao
+e2l1ap
+e2l1a2r
+el3ari
+ela4s
+el1asi
+el1asp
+el2ast
+2e1lä
+3elbis
+el2da
+eld5erst
+el4d3erw
+eld3s2
+2ele.
+elea2
+ele2c
+2eleh
+2elei
+e6l5eier.
+e2l1ein
+e3leine
+e4leing
+1elek
+e2l1el
+1e2lem
+e3lem.
+el1emp
+2e3len.
+e4lense
+e2l1ent
+e3lep
+el1erd
+el1erf
+e4ler4fa
+e2l1erg
+el1erk
+el1erl
+e4ler4la
+e4l3ernä
+e2l1err
+2eles2
+el1ess
+e4l1e4ta
+e3leu
+2elev
+ele2x
+1elf.
+el3fe
+elf4l
+1elfm
+1elft
+elgi5er.
+elgi5ers
+2eli
+e2l1id
+e3lie
+eli2ne
+el1ita
+el3kl
+el3lan
+el3le
+el5le.
+ell3ebe
+el4l3ein
+ell3eis
+el3lin
+ell3sp
+elm2a
+2eln
+el5na
+2elo
+e2lof
+e2lol
+elon2
+el1ope
+e2l1or
+elo2ri
+el2öf
+elö2s
+el2sum
+elte2k
+elt3eng
+3eltern
+elto2
+el2t3r
+elt3s2k
+elt3s2p
+2e1lu
+e2l1um
+el1ur
+el3use
+e1lü
+e2lya
+2elz
+elz2e
+el2zwa
+e1m
+2ema
+e2m1ad
+ema2k
+e2m3anf
+e2m1ans
+3emanz
+em2d3a2
+e3m2en
+emen4t3h
+e6mentsp
+e2m1erw
+eme2s
+1e2meti
+e2m1im
+em1int
+emi3ti
+2emm
+emma3u
+em2mei
+e2mop
+3empf
+em3pfl
+em2p3le
+em2sa
+em2spr
+em2st
+em3t2
+1emul
+2emü
+e2n1a
+4ena.
+2enac
+e3nad
+e4naf
+4enah
+e4nak
+ena3l2i
+4enam
+en4ame
+e4nand
+en3ang
+en3are
+en2asc
+4enat
+en3att
+e3naue
+e2n1är
+en1äu
+en4ce.
+en3d2ac
+en2dal
+en4d3ess
+end4ort
+end3rom
+end3si
+end3s2p
+end3sz
+end2um
+2ene.
+ene4ben
+en1e2c
+e2neff
+e4nein
+e2n1el
+ene4le
+2enem
+2enen
+e4n1ent
+en4entr
+4e3ner.
+e2n1erd
+e2nerf
+1e2nerg
+e4nerh
+e4nerk
+e2n1erl
+e4n3ermo
+4enern
+e2n1err
+e2n1ers
+e2n1ert
+e2n3eru
+e2n1erw
+e4nerz
+2enes
+e4n3ess
+en3f
+enf2a
+enf2u
+1engad
+3engag
+en3ge
+en3g2i
+en2gl
+en3glo
+1engp
+eng3se
+e3ni.
+e3nic
+e4nid
+e3nie
+eni3er.
+eni5ers.
+e2n1i4m
+e2n1in
+e3nio
+2enis
+eni3se
+e3nit
+2eniv
+en3k2ü
+e2n1o2b
+enob4le
+e2nof
+en1oh
+e3nol
+eno2ma
+en1on
+e2n1op
+e2n1o2r
+enost3
+e3not
+eno2w
+2e1nö
+en1ö2d
+e4nr
+en3sac
+en2sau
+en5sch4e
+en2seb
+ens2el
+1ensem
+ensen1
+en3ska
+en3s2po
+enst5alt
+en4s3tät
+2ensto
+e4nt
+ent4ag
+1entd
+en2teb
+en4terb
+1entfa
+3entga
+en2thi
+3entla
+1entn
+en4t3rol
+3entspr
+2entü
+1entw
+4entwet
+1entz
+en1u
+2enut
+e1nü
+enü1st
+4enwü
+e1ny
+en4z3erf
+en4z3erg
+en4z3erk
+enz3ert
+e1ñ
+2eo
+e1o2b1
+e1of
+eo2fe
+e1oh
+e4ol
+e1on.
+e1ond
+e1onf
+e1onl
+e1onr
+e1ons
+e1ope
+e1opf
+eop4t
+e1or
+e3or.
+e3orb
+e3ors
+e3orw
+eo1s2
+e3os.
+eo3ul
+e1ov
+e1ö2
+e1p
+e3pa
+epa2g
+e3p2f4
+1episo
+ep3le
+1e2poc
+ep2pa
+ep4pl
+ep2pr
+ept2a
+ep2tal
+e3pu
+epu2s
+e1q
+er1a
+e3ra.
+e3rad.
+er3adm
+eraf4a
+era1fr
+era2g
+e1rai
+er3aic
+e2rak
+e1ral
+er3all
+eran3d
+e3rane
+er3anf
+e2ranh
+er3anm
+e1rap
+er3apf
+e2rar
+e3rari
+e1ras
+e2r3a4si
+era2ß
+e2rath
+e3rati
+e2ratm
+e1raub
+er3aue
+erau2f
+er3aug
+e1raw
+e1raz
+e1rä
+er1äh
+er1äm
+erb2e
+er3br
+erb4sp
+er1c
+er3chl
+er3da
+1erdb
+er3de
+2erdec
+erd3erw
+4ere.
+er1eb
+e3rech
+er3echs
+er1e2ck
+ere4dit
+er1eff
+e2r1e2h
+4e3rei.
+er1eig
+e2rein
+e4r3eis.
+ere2l
+er1ele
+2e3rem
+2eren
+4e3ren.
+e3rena
+e4rense
+e4r3entf
+e4rentn
+e3renz
+eren8z7end
+2erer
+4erer.
+e2r3erf
+e2r1erh
+e4rerl
+4erern
+e3rero
+er1err
+er1ers
+e2rert
+er1erw
+2eres
+er1ess
+er3e4ti
+er1eul
+ere4vid
+erf2e
+erf4r
+4erfür
+3ergebn
+4ergehä
+erg3el4s3
+1ergol
+erg3s
+ergs4t
+er3h
+1erhab
+2erhü
+2eri
+e2riat
+e3rib
+4e3ric
+4e3rie
+eri3e4n3
+e3ri3k4
+4e3rin.
+er1inb
+e2r1ini
+er1ink
+er1int
+e3rio
+er1ita
+2erk.
+1erklä
+2erkre
+erk3t
+3erlebn
+ermen4s
+erm3ers
+ern1os
+e1ro
+e3ro.
+er3oa
+er1o2b
+er1of
+er1oh
+e3ron
+e2r1o2p
+e4ro2r
+e3ros
+e3row
+er1ö
+erö2d
+2erök
+er3p4
+er3rä
+2errü
+ers2a
+er3se
+ers2i
+er3sk
+er3smo
+er3sn
+er3sp
+er3sz
+ert2ak
+er6terei
+er4ters
+er2tho
+4erti
+ert3ins
+ert4ra
+erts2e
+2eru
+eruf4s
+er1u4m
+er1und
+erung4
+er1uns
+er3uz
+erü4b
+3erweck
+6erweis
+es3ab
+es2ach
+es3ak
+es3anz
+e3s2as
+e4s3ato
+2esb
+es2c
+es3cap
+e3sce
+esch2
+e3scha
+e2s3ein
+es2el
+ese4ler
+es3eva
+2esf
+4esh
+es2har
+es2hu
+es2id
+e2sil
+es3int
+es2ir
+es2kat
+e4ske
+es3kl
+es3ku
+e4sky
+es3l
+es4log
+2esm
+es2ort
+e3sot
+es2ö
+2esp
+e3s2pek
+e3spi
+e3s2por
+e3s4pra
+2esr
+es2sau
+es3sc
+es3se
+4essem
+ess4e3re
+ess3erg
+2esso
+es2sof
+es2s1pa
+es2spu
+es3str
+es3stu
+estab4b
+est1ak
+e1star
+e4starb
+1e2stas
+e1stat
+e1s2tec
+e3stel
+es4t3eng
+es4t3erh
+es4t3ess
+e1stil
+e2stip
+estmo6de
+est3ori
+e1str
+es4tri
+es3trop
+e1stu
+es4tü
+e2s1um
+es3ums
+es3w
+e3sy
+es3z
+e1ß
+eße3r2e
+e1t
+etab4
+et1am
+3etap
+et4at
+et1äh
+e3te
+e4tein
+et2en
+eten3d2
+ete2o
+eter4hö
+eter4tr
+et2h
+et3hal
+et3hü
+e3ti
+eti2m
+eti2ta
+2e3to
+eto2b
+e4t1of
+etons4
+e3tö
+2etr
+e4traum
+e6t3rec
+e2tres
+et4rig
+etsch3w
+ets2p
+et3su
+ett1a
+et2tab
+et2t3au
+et2tei
+ette4n1
+et2th
+et2t3r
+et4tro
+ett3sz
+et4t1um
+e3tü
+etwa4r
+2etz
+et2zä
+et4z3ent
+etze4s
+et2zw
+eu1a2
+eu3erei
+eue6reif
+eu2esc
+eu2ga
+eu4gent
+eu3g2er
+eu4gla
+eugs4
+euil4
+eu1in
+1euk
+eu2kä
+e1um
+e3um.
+e3umb
+e3uml
+e3um2s
+eum4sc
+eums1p
+eum3st
+2eun
+eun2e
+eu4nei
+e3un2g
+eu2nio
+eun3ka
+eu1o2
+eu1p
+eur2e
+3eu3ro
+eu3sp
+eust4
+eu1sta
+eu1sto
+eu1str
+2eut
+eut2h
+eut6schn
+2eux
+eu2zw
+e3ü
+2e1v
+e2vela
+e2vent
+4ever
+eve5r2i
+e3vo
+e1w
+2ewa
+e3wä
+ewä2s
+2ewe
+e2we.
+ewinde3
+e3wir
+ewi2s
+e3wit
+ew2s
+2ex.
+ex3at
+1e2xem
+ex1er
+e1xi
+e2x1in
+1exis
+ex3l
+3exp
+2ext.
+ex2tin
+ex2tu
+2exu
+2e3xy
+ey1
+ey4n
+eys4
+e1z
+e3z2a
+e2z1enn
+e3zi
+ezi2s
+ez2w
+é1b
+é1c
+é1g
+égi2
+é1h
+é1l
+élu2
+é1o
+é1p
+é1r
+é1s
+é1t2
+é1u2
+é1v
+é1z2
+è1c
+è1m
+è1n
+è1r
+ê1p
+ê4t
+1fa
+fab4
+f1abe
+fa2ben
+fab5s
+3fac
+fa4cheb
+facher5f
+fa2ch1i
+fa2cho
+f1ader
+fa2dr
+f4ah
+faib4
+fa2ke
+f2al
+fa3l2a
+fal2kl
+fal6l5erk
+fal6scha
+fal6schm
+fal3te
+falt2s
+2fanb
+2fanf
+fan2gr
+2f1ank
+2fanl
+f1anp
+2fanr
+fan3s
+2fanw
+f1an3z
+2f1ap
+f2ar
+far2br
+2f3arc
+3fari
+farr3s
+3f4art
+2f3arz
+fa3s4a
+fa3sh
+f3at
+fa2to3
+2f1auf
+f3aug
+f1ausb
+3f4av
+fa2xa
+1fä
+fä1c
+fäh2r1u
+2f1ärm
+fä2ßer
+f1äu
+2f1b2
+2f1c
+2f3d4
+fdie2
+1fe
+featu4
+fe2c
+f2ech
+2f1eck
+fe2dr
+fe2ei
+fe1em
+fef4l
+feh4lei
+f4eie
+2f1eing
+4f1einh
+fe1ini
+2f1einw
+f1eis
+fek2ta
+fe2l1a
+fel2dr
+2fe2lek
+fe2l1er
+fe2les
+fe2l1o
+fel4soh
+fel3t
+f2em.
+fem4m
+2femp
+fe2nä
+fen3g
+fe2no
+fen3sa
+f1ent
+f2er.
+fe1ra
+fer2an
+fe4rang
+fe4r3anz
+fe2rau
+ferde3
+f2ere
+fer2er
+fer3erz
+f1erfa
+f2erl.
+4ferneu
+f4erpa
+f2ers.
+f2ert
+f1erw
+fe2st
+fest1a
+fest3ei
+2f1e4ta
+3fete
+fet2t3a
+feuer3e
+feu4ru
+3few
+f1ex
+2fexp
+3fez
+1fé
+2f1f
+ff3ar
+ff1au
+ff2e
+ffe2e
+f2f3ef
+ff3ei
+ffe1in
+ffe2m
+f2f3emi
+ff4en
+f2fex
+fff4
+ff3l
+ff4la
+ff4lä
+ff4lo
+f3flu
+f3flü
+f3f4rä
+ff3ro
+ff3rö
+ff2s
+ff3sho
+ffs3t
+ffs4tr
+4f3g2
+fge3s
+2f1h2
+1fi
+3fi.
+fi3at
+fid2
+fi4ds
+fid3sc
+fien3
+fi1er2f
+fi2kin
+fi3kl
+fik1o2
+fi2kob
+fi2kr
+fi2l1an
+fil4auf
+fil3d
+fi2les
+filg4
+fi3li
+fi4lin
+fil2ip
+f2ina
+fi3ni
+fin2s
+fin3sp
+2f1int
+fi2o
+fi3ol
+fi2r
+fi3ra
+3fis
+fis2a
+fisch3o
+fis2p
+fi2s5t
+fit1o2
+fi2tor
+fi3tu
+3fiz
+2f1j
+4f1k4
+f2l2
+2fl.
+f3lad
+f3lap
+1flä
+3f4läc
+2f5läd
+f3län
+2f3läu
+2f3leb
+f4lee
+2f3lein
+f3ler
+f4lé
+f3li.
+3f6lim
+fli4ne
+2f5lon
+1f4lop
+1f4lot
+flo2w
+f3lö
+f4luc
+1f4lug
+flu4ger
+f4lü
+2f3m2
+2f3n2
+fni2s
+1fo
+fob2l
+2f1of
+foli3
+fo2na
+fo2nu
+2f1op
+fo1ra
+4f3org
+fo3rin
+3form
+for4m3a4g
+forni7er.
+for4st
+for4tei
+for2th
+for2t3r
+for3tu
+2f1o2x
+1fö
+2föf
+2f1ök
+2f1öl
+för2s
+4f1p2
+2f1q
+f2r2
+f4rac
+frach6tr
+f5rad
+fra4m
+f3rand
+f5rap
+1f4rän
+2fre.
+f3rec
+f3red
+2freg
+freik2
+frein4
+f3rep
+f4reu
+2f3ric
+fri3d
+fri2e
+2frig
+1fris
+f4risc
+f3roc
+1f4ron
+fro2na
+fro2s
+f3rot
+f3ru
+f3rü
+4f1s
+fs1all
+fs4amm
+f2san
+fs3ar
+f2s1as
+f2sauf
+f2saus
+f2saut
+f3sc
+f4sce
+f4schan
+f4schef
+fs4co
+fs1e2b
+f4s1ehr
+f2s1em
+f2s1ent
+f2s1er
+fse4t
+f4s1eta
+f3si
+f2si2d
+f3s2kie
+f2s1o2
+f3span
+f2s1pas
+fs1pen
+f2sph
+f3s2pl
+f3s2por
+fs1pr
+f2spre
+fs2pri
+f2spro
+fs2pru
+fs3s4
+fs2t
+f2stas
+f4s3täti
+f4stech
+f3stei
+f3s4tel
+f3stern
+fs3th
+f2stip
+f3st4r
+f4s3tres
+f4s3tüte
+f2s1un
+f2sü
+f3sy
+4f1t
+f4ta.
+f2tab
+ft1a2be
+ft1af
+f2t1al
+ft1an
+ft1ar
+f3tat
+ft1e2h
+ft1eig
+ft1eis
+f4t1ent
+f4t1e4ti
+f2th
+f4thei
+ft3ho
+ft1op
+f3tö
+f2t3ro
+f2t3rö
+f3t4ru
+ft2s1
+ftsa4
+ft4sam
+ft3s2c
+ft4sche
+ftse4
+ft4seh
+fts3el
+ft3st
+ft4s3tan
+ft4s3tä
+fts2ti
+ft4stri
+f2tum
+ft1url
+f3tü
+ftwa4
+ft3z2
+1fu
+3fug
+3f2uh
+f1um
+2f1unf
+fung4
+2f1u2ni
+fun2kl
+fun2ko
+fun2k3r
+2f1unm
+2funt
+f2ur
+fu4re.
+fus2sa
+fus2s1p
+fus2st
+fu2ß1er
+3fut
+1fü
+2füb
+fü2r
+2f1v
+2f1w
+1fy
+2f1z
+fz2a
+fzeiten6
+fzei8tend
+fz2ö
+fzu3
+fzu4ga
+3ga.
+2gabf
+ga2b5l
+gab4r
+2gabz
+ga1c
+2gadl
+2ga2dr
+ga1fl
+ga3ge
+5gai
+ga1k
+ga2ka
+gal2a
+g4amo
+2g1amt
+2ganb
+gan3d
+gan2g1a
+4gangeb
+gan2gr
+2ganh
+2g3anku
+2ganl
+g3anla
+3g2ano
+2ganw
+ga1ny
+2garb
+2garc
+3gard
+2g1arm
+ga3r2o
+g1arti
+ga3ru
+2g1arz
+ga2sa
+gas3ei
+ga2si
+ga2sor
+ga3sp
+ga4spe
+ga4spr
+gas3s
+gas4ta
+gas5tan
+ga4ste
+gas4t3el
+gat2a
+2gatm
+gat4r
+gau1c
+2g1auf
+g2auk
+g1aus
+2g1aut
+2g1äp
+2gärz
+gäs5
+gä4u
+2g1b2
+gber2
+gbi2
+gby4t
+2g1c
+2gd
+g1da
+g2d1au
+g2d1er
+gd1in
+g1do
+g1dö
+g1d3r
+gd3s2
+gdt4
+gd1u
+1ge
+ge3a2
+geb2a
+gebe4am
+geb4r
+ge1c
+ged4
+ge1e2
+ge3ec
+ge2es
+gef4
+ge3g2l
+ge1im
+ge2in.
+gein2s
+ge2int
+gein2v
+ge1ir
+ge2is
+2g1eise2
+gei3sh
+g2el
+ge4lanz
+gelb1r
+gel4b3ra
+gel6ders
+ge3le
+ge5leh
+ge4l3ers
+ge4less
+gell2a
+ge3lor
+gels2t
+gel3ste
+gel3sz
+gel3t2a
+ge3lum
+ge3lü
+gelz2
+ge3mi
+gem2u
+3gen
+ge3na
+ge4nam
+ge4nar
+gen4aug
+gen2d1r
+gen1eb
+ge3nec
+gen3eid
+gen3ern
+gen3g
+gen3n
+gen4sam
+gen3sz
+2g1entf
+gen3th
+4gentw
+geo2r
+ge1ou
+ge3p4
+ge1ra
+ge2rab
+4g3ereig
+ge4reng
+ge4ren4s
+ge4r3ent
+ger2er
+gerin4f
+ger4inn
+gerin4t
+germ4
+ger3no
+ge1r2ö
+ger4sto
+ge3r2u
+g2e1s2
+ges3auf
+ge3sc
+ges3elt
+ge2s3er
+ge3si
+ges4pi
+ges3s2t
+gest2
+ge3ste
+ge4s3ter
+ges3th
+ge3t2a
+2getap
+ge5tr
+ge3t4u
+ge1ul
+ge1ur
+2g1ex
+2g1f4
+4g1g
+gga4t
+g3ge
+gge2ne
+g2g3l
+gg4lo
+g2g3n
+gg4r
+2g1h
+4gh.
+gh2e
+3g2het
+3g2hie
+gh1l
+3gh2r
+g2hu
+gh1w
+gi3alo
+gie3g
+gi2e1i
+gi2el
+gien2e1
+gie1st
+gi2gu
+gi2me.
+gi4mes
+gi2met
+2g1ind
+gi3ne
+gin2ga
+2g1ins
+2g3isel
+gi3t2a
+gi3tu
+gi4us
+2g1j
+4g3k2
+4gl.
+g1lab
+g1lac
+3glad
+g2lade
+2g1lag
+3glanz
+3g2laub
+2g1lauf
+3glät
+2gläuf
+g2l4e
+2gle.
+3glea
+2g3leb
+g3lec
+g3leg
+2gleh
+4g3lein
+glei4t5r
+g3len
+4g5ler
+2gles
+g3lese
+g4lia
+2glib
+3g2lid
+3g2lie
+2glif
+g2lik
+4glin
+g2lio
+2glis
+4g3lisc
+3g2lit
+g2liz
+3g2loa
+3g2lob
+g3loch
+glo3g
+3g4lok
+g2lom
+3g2lop
+3g2lot
+2gls
+2g1lu
+glu2t
+3glü
+g2ly
+2g1m2
+g1n
+2gn.
+g2n2a
+g4na.
+2gnac
+g4nat
+3g2nä
+gn2e
+g3neh
+gne2tr
+2gneu
+2gng
+g2nie
+g2nif
+g4nin
+2gni2s1
+3g2no
+gno1r
+4g3not
+2gnp
+2gns
+2gnt
+2gnu
+3g2num.
+g2nü
+g2ny
+2gnz
+go4a
+goa3li
+2g1of
+2gog
+2g1oh
+go1i
+gol2a
+2gonis
+2g1ope
+2g1opf
+g2o1ra
+2gord
+2gorg
+go2s1
+go3st
+go3th
+got6t5erg
+go1y
+2g1p2
+2g1q
+g2r4
+gra2bi
+gra2bl
+2gradl
+2g3rah
+2g3rak
+grammen6
+gram8m7end
+2g3räu
+2g5re.
+g4reb
+2g3rec
+2g3rede
+g4re2e
+2g3reic
+2g3rein
+g3reit
+g4rem
+2g3renn
+gren6z5ei
+g4rer
+g3ret
+g3rev
+2g3ric
+gri2e
+g3riese
+3grif
+2grig
+2g3ring
+2groc
+2groh
+gron4
+g4ros
+gros6sel
+gro4u
+2g3röh
+g4ruf
+2g3rui
+2g3rum
+3g4runs
+3g4rup
+2grut
+2g3rüc
+3g4rün
+4g2s1
+gsa4g
+g3s2ah
+g4s3a2k
+g3sal
+g4salt
+gs3ama
+gs3an
+gs3ar
+gs3aug
+g3s2c
+g4sca
+g4s3ce
+gsch4
+g4schef
+gs4chi
+g4sco
+g4s3cr
+gse2
+gs2eh
+g3s2eil
+g3sel.
+gs3eli
+g3seln
+gsen1
+gs3er
+gs5erk
+gse4t
+g4seta
+gsi2d
+g3sil
+g4sl
+gso2
+gsp4
+g3s2pek
+g3spi
+gs4pie
+g4spin
+gs2pit
+gs3pl
+g3s2por
+gsrat4
+gsrü2
+gs5s4
+gs3ta
+g3stan
+g3star
+g3s4tati
+g4s3tä
+g5stäm
+g3stel
+gst3ent
+gst3err
+g1steu
+gst2he
+g3stir
+g3sto
+gs3toc
+g4stol
+gs3top
+g4s3tor
+g3stö
+gs3tr
+gst4ra
+gs4trat
+gst4ri
+gs4t3ros
+g3stu
+g4stur
+gs3tü
+gs4tüc
+g4sw
+g3sy
+2g1t
+g3te
+gti2m
+gt4r
+gt2s
+g3tü
+1gu
+gu3am
+gu1an.
+gu1ant
+gu1c
+gu2e
+2gued
+guet4
+2g1u2f
+2g1uh
+gu1ins
+gu1is
+3gumm
+2g1unf
+g2ung.
+gunge2
+4gungew
+2g1ungl
+g2un4s
+2gunt2
+2g1url
+gurt3s
+gu2s3a
+guschi5
+gus4ser
+gus2sp
+gus2st
+gu4st
+gu2t
+gut1a
+gu4t3erh
+gut3h
+2güb
+gür1
+güs3
+2g1v
+2g1w
+2g3z2
+3haa
+hab2a
+hab2e
+h2abs
+ha2cho
+ha2del
+ha4din
+h1adle
+haf3f4l
+haft4s3p
+h1ah
+ha1kl
+2h2al.
+halan4c
+ha2lau
+hal2ba
+hal4bei
+halb3r
+2hale
+hal2la
+hal6lerf
+h1alp
+hal2st
+hal4t3r
+h1amt
+h2an.
+h2and
+hand3s
+h4ann
+2hanr
+2hant
+h1ap
+ha2pl
+ha2pr
+h4a3ra
+2harb
+h2ard
+h1arm.
+har4me.
+har4mes
+har2th
+h1arti
+h2as
+2ha3sa
+hasi1
+hat5t2
+hau3f4li
+2h1aufm
+h1aukt
+hau2sa
+hau2sc
+hau4spa
+hau5stei
+hau6terk
+2hauto
+hau2tr
+h1äff
+hä6s5chen
+häu2s1c
+hä3usp
+2h3b2
+hba2r3a
+2h1c
+2h3d4
+hdan2
+2hea
+he2ad
+he3be
+he4b1ei
+he2bl
+he3br
+he5ch2e
+he1cho
+h1echt
+he3cke
+hed2g
+he3di
+he2e3l
+hee4s
+he2fan
+he2fä
+he2f1ei
+hef3erm
+2heff
+he4f3ing
+he2f3l
+he2fr
+he3fri
+he2fu
+he3gu
+h1eie
+h1eif
+h1eig
+he2im
+heim3p
+hei4mu
+heine2
+hei4neh
+h1eink
+4heio
+he1ism
+he1ist
+heit4s3
+h1eiw
+he2l3au
+hel1ec
+h3e2lek
+he3len
+hel3ers
+he3li
+hel4l3au
+hel4mei
+he3lo
+he4lof
+he2lö
+3hemd
+he3mi
+3hemm
+4h1emp
+h2en.
+he4n3a4
+he2nä
+hend2s
+he2n1e2b
+hen3end
+hen3erg
+he2net
+heng2
+2heni
+he2no
+henst2
+hen5tr
+h1ents
+2h3entw
+hen3z
+4he2o
+he3on
+he3op
+he3ph
+her3a2b
+he2ral
+2herap
+he3ras
+herb4s
+he4reck
+4hereig
+he4r3eis
+he2rel
+he4rerw
+h1er2fo
+h1erfü
+herg2
+herin4f
+he6rin6nu
+herin4s
+herin8ter
+h1erke
+h3erlau
+2herm
+he3ro
+he4r3o4b
+h1erö
+hert2
+her3th
+her2zw
+he1sta
+he2s5tr
+he2tap
+heter2
+he3th
+het2i
+he3t4s
+h2e2u
+heu3g
+he3x
+he1x4a
+he1y2
+1hè
+2h3f4
+hfell1
+hfel6ler
+hfi2s
+2h3g2
+hget4
+2h1h2
+2hi.
+2hia
+hi2ac
+hi2ang
+hi1ce
+hich6ter
+2hi3d
+h2ide
+h1i4di
+hi2e
+hi3ens
+hier1i
+hie4rin
+hiers2
+hif3f4r
+hi2kr
+hi2l3a4
+hil2fr
+hi2n
+h1indu
+hi3nel
+hin2en
+h1inf
+h1inh
+hi3n2i
+hin3n2
+hi3no
+hin3s2
+hin4t1a
+2hio
+hi4on
+hi3or
+2hip1
+hi2ph
+hi2pi
+h2i2r
+hi3ra
+2hi3re
+hi3ri
+hirn1
+hir4ner
+hi3ro
+hir2s
+his2a
+hi2se
+his2p
+hi2st
+hi1th
+hi3ti
+2hiu
+h1j
+2h1k4
+2hl
+h4lac
+hla2n
+hl1anz
+h1las
+h1lat
+h1laut
+h3läd
+h1läs
+h1läu
+hlb4
+hld4
+h3leb
+hle3e
+h5len.
+hlen3g
+hl2enn
+h3ler
+hle2ra
+hl1erg
+h6l3ernä
+hle3run
+hl1erw
+h4lerz
+h3les
+h4lesi
+h3lex
+hlg4
+h2lie
+h2lif
+hl1ind
+h2lip
+h2lis
+h3list
+h2lit
+hll2
+hlm2
+h2lo
+h3loc
+hl1of
+hl1op
+h4lor
+hlo2re
+h3losi
+hl2ö
+h3löc
+h2lös
+hl2san
+hl2ser
+hl3sku
+hl3slo
+hl3t2
+h3luf
+h3luk
+h1lüf
+2h1m
+h2mab
+h3mag
+h3man
+h3mar
+h4mäc
+h4mäh
+h4mäl
+h4mäu
+h3me.
+hme1e
+hme1in
+h3men
+hmen2s
+hme2ra
+h2mo
+h4mon
+h3mö
+hm3p4
+hm2s
+hm3sa
+hms1p
+h2mu
+2hn
+h2na
+hn1ad
+h3nam
+hn1an
+h2nä
+hn3d4
+hn2e
+hn3eig
+hn3ein
+h2nel
+hne4n1
+hne4pf
+hner3ei
+h3nerl
+h3nerz
+hn3ex
+h2nic
+h2nid
+h2nie
+hn1im
+hn1in
+h2nip
+hn3k4
+h2nor
+hn3s2k
+hnts2
+h1nu
+h2nuc
+h2nul
+hn1unf
+h3nunge
+ho2bl
+ho2ch3
+ho2cka
+ho6ckerl
+hock3t
+2hod
+hoe4
+ho2ef
+ho4fa
+ho2f3r
+2hoi
+hol1au
+4holdy
+3hole
+ho2l1ei
+hol3g4
+4holo
+ho4lor
+3hol3s
+h1o2ly
+3holz
+hol6zene
+hom2e
+ho2mec
+ho2med
+h2on
+hono3
+2hoo
+2hop
+ho1ra
+hor3d
+h1org
+ho4sei
+ho3sl
+ho2sp
+ho4st
+2hot.
+ho3th
+hotli4
+2hot3s2
+3hov
+2ho2w1
+h1o2x
+ho1y2
+1h2ö
+hö2c
+hö3ck
+h4ör
+hö2s1
+h3öst
+2h3p2
+h1q
+2hr
+hr1ac
+hr3ad
+h1rai
+h1rane
+h3räu
+hr1c
+hr3d
+h2rec
+h3rech
+h3red
+h3ref
+h4rei.
+hrei4ba
+h3reic
+h4r3eig
+h3rel
+h3r2en
+h3rep
+hr2erg
+hr2erk
+h6rerleb
+hr2erm
+hr2erz
+h3re2s1
+hre2t
+h2r1eta
+h3rev
+hrf2
+hrg2
+h2ri
+h3ric
+h4rick
+hri4e
+h3riesl
+h3rin
+h4rine
+h4rinh
+h4rist
+h2rob
+h3roh
+h3rol
+h4rome
+h4romi
+h4ron
+h2ror
+h3rou
+hrr4
+hr2s1ac
+hr2s3an
+hr2sau
+hr3schl
+hr2s1en
+hr2ser
+hr4set
+hr4s1in
+hrs3k
+hr4s1of
+hr2su
+hr4sw
+hr2tab
+hr2tan
+hr2th
+hr2tor
+hrt3ri
+hr2tro
+hrt2sa
+hrt2se
+h3ruh
+hr1ums
+h3rü
+h4rüb
+h2ry
+hrz2
+4hs
+h2s1ach
+h2san
+h2sau
+h4schan
+h2s1ec
+hse4ler
+h2s1erl
+h3s2ex
+h2s1ing
+h2s1of
+h2s1par
+h2sph
+hs2por
+h2sprä
+h2spro
+hss2
+h1sta
+hst3alt
+hst2an
+h2s3tau
+h1stec
+h3stein
+h5stell
+h3s4terb
+hst2he
+h1s2ti
+h1sto
+h2stor
+h1s4tr
+hst3ran
+hst3ri
+h1stun
+h2s1u
+hs2ung
+4h1t
+h2t1a
+h3t4akt.
+h3takts
+h3t2al
+h4t3alt
+h4t3a2m
+hta4n
+ht3ane
+h3tank
+ht2as
+h4t3ass
+h4tasy
+ht3a2t
+h2tär
+ht1e2c
+h2t1ef
+ht1eh
+hte2he
+h2teif
+h4teilz
+h2t1eim
+h2t1eis
+h4t3elit
+h2temp
+h4tentf
+h4t3ents
+ht3erfo
+ht3erfü
+h2t1erh
+ht5erken
+h4terkl
+h6terneu
+h4t3erre
+ht3ersc
+h6t5erspa
+ht3erst
+h6tersta
+ht6erste
+h2t1erz
+hte2s
+h4t1ese
+h4t1ess
+hte3sta
+h2t1eu
+h2t1ex
+h2th
+h4thei
+hthe3u
+h4tho
+h2t1in
+hto2
+h2toly
+h2torg
+h3töp
+h4t3rak
+ht3rand
+h2t3rat
+ht6raume
+h4tref
+ht4ri
+h4t5rin
+h2t3rol
+h2t3ros
+ht3rö
+h4t1rös
+h2t3ru
+h2t3rü
+h4ts
+ht2so
+ht2sp
+ht3spri
+ht4stab
+hts2ti
+hts4tie
+ht4s3tur
+ht4s3tür
+htt4
+htti2
+h2t1urs
+h3tü
+ht3z2
+hu2b1a
+hu2b3ei
+hu2b1en
+hu2b3l
+hu4b3r
+hu2bu
+hu1c
+hu2h1a
+hu2h1i
+huko3
+huk3t4
+hu2l3a
+hu2lä
+hu2l3ei
+hu4l3eng
+hu4lent
+hu2ler
+hu2let
+hu2l1in
+hu2lo
+hu3m2a
+h1ums
+hu2n
+h1una
+hung4s
+hu3ni1
+h1up.
+h1ups
+2hur
+hurg2
+hu3sa
+hu2so
+hus4sa
+hus2sp
+hu2tab
+hu3t2h
+hu2ti
+hut2t
+hut4zen
+hut4z3er
+hutz1i
+h2ü
+h4übs
+h3übu
+hühne4
+hüs3
+2h1v
+hvi2
+hvil4
+2hw
+h2wall
+hwe1c
+h1weib
+3hyg
+3hyp
+hy2pe.
+2hy2t
+h1z
+hz2o
+hzug4
+i1a
+2ia.
+i4aa
+i2ab
+iab4l
+2iac
+i2af
+iaf4l
+i4a3g2
+i2ah
+i2aj
+i2ak
+i3ak.
+i3akt
+2ial
+i5al.
+ia2l1a4
+ia2lä
+ial3b
+ial3d
+i3alei
+i3alent
+i3alerf
+i3alerh
+ia4l3erm
+i3a2let
+i3a4lia
+ialk2
+i3all
+ial3la
+ia2lor
+ial3t4
+ia2lu
+ial3z2
+i2am
+i4amo
+2ian
+ia2nal
+i3and2
+ian2e
+i3ann
+i2ano
+i3ant
+i3anz
+i2ap
+ia3p2f
+ia1q
+i3ar.
+ia2ra
+2ias
+i2asc
+ia3sh
+i2asi
+i2a3sp
+ias3s
+iast4
+i3at.
+i3a4ta
+i4ate
+i3at4h
+1iatr
+i3ats
+i3au
+ia3un
+2iav
+2iä
+i1äm
+iär2
+i1är.
+i1ärs
+i1ät.
+i1äta
+i1ät3s4
+2i1b
+i2b1auf
+ib2bli
+ib1ei
+i2beig
+i2beis
+ibela2
+ibe4n
+iben3a
+ibi2k
+i3bla
+i3ble
+i2blis
+ib2o
+i2b1ö
+i4brä
+ib3ren
+ib4ste
+i2bunk
+i2bunt
+ibu2s1
+2ic
+ic1c
+ice1
+ich1a
+ich1ä
+i1che
+ich1ei
+i1chi
+i2chin
+ich3l
+i3chlo
+ich3m
+i1cho
+i2ch3r
+ich2t3r
+i1chu
+ich1w
+i1ci
+i3ck2e
+i1cl
+i1d
+id2ab4
+i3dam
+id2an
+i2d1au
+1i2dee
+i2dei
+idel2ä
+ide3so
+ide3sp
+1i2dio
+idni3
+i2dol
+1idol.
+2i2dr
+i3d2sc
+id2s1p
+idt4
+i2dy
+ie3a4
+ie2bä
+ie2bl
+ie2bre
+ieb4sto
+ieb4str
+ie1c
+ie2cho
+ie2ck
+ie2dr
+ie1e2
+ie2f1ak
+ie2f1an
+ie2fau
+ief3f4
+ie2f3l
+ie2fro
+ie4g5l
+ie3g4n
+ie2g3r
+ie3g4ra
+iegs3c
+i1ei
+i2e2l1a
+ie3las
+iel3au
+iel3d
+iel1ec
+ieler8geb
+i1ell
+ielo4b
+iel3sz
+iel3ta
+2i1en
+i3en.
+i3ena
+iena2b
+ie4n3a4g
+i3e2nä
+i3end
+i2ene
+ien1eb
+ie3ner
+ien4erf
+ie4n3erg
+i3enf
+i3en3g
+ienge4f
+i3enh
+i3enj
+i3enk
+i3enm
+i3enn
+i3e2no
+i3enö
+i3enp
+i3enr
+ien2s
+ien3sc
+ien3s2e
+ien3si
+iens2k
+ien3sp
+ienst5rä
+ien3sz
+ie1nu
+i3env
+i3enw
+i3enz
+ie1o2
+ier3a2
+ie2rap
+i2ere
+ie3r2er
+ie4rerf
+ie4r3erz
+ie3res
+i3ereu
+i4eri
+ierin3
+ier3k2
+i1ern
+i3ern.
+i2er5ni
+ie2rö
+ier4seh
+iers2t
+ier3sta
+ier3ste
+ier3te
+iesen3s4
+ies2sp
+ies2s3t
+ie1sta
+ie3su
+ie2t1a
+ie4t3erh
+ie4t3ert
+ie2t3ho
+ie4t1o
+ie4t1ö4
+ie2tri
+iet2se
+i1ett
+ieu2e
+ie1un
+i1ex
+2if
+if1ar
+i2f3arm
+if4at
+if1au
+i2fec
+ife2i
+if2en
+ifens2
+if1erg
+if1erh
+if2fl
+if3l
+i1f4la
+if4lä
+i1flü
+if3r
+if4ra
+i1frau
+i1fre
+if4rei
+if4rü
+if2s
+if3se
+if3sp
+if2ta
+ift3erk
+if2top
+if4t3ri
+ift3s2p
+ift3sz
+2i1g
+iga3i
+i2g1ang
+ig1art
+iga1s4
+i4gefar
+ige4na
+ig1erz
+i2g1im
+i2gl
+ig1lä
+ig4na
+i4gnä
+i3g4neu
+ig4no
+i3go
+ig4ra
+ig3rei
+ig4sal
+ig3sä
+ig4se
+ig3so
+ig3spr
+ig3stei
+ig4sto
+ig4stö
+ig3str
+ig4stre
+ig3stü
+igung4
+2i1h
+i2h1am
+i2har
+i3he
+ihe1e
+ihe4n
+ih3m
+ih3n
+ih3r
+ihs2
+i2h1um
+ih1w
+ii2
+ii3a4
+i1ie
+i3i4g
+i1im
+i1in
+i1i4s
+i2is.
+ii3t
+i1j
+2i1k
+i2k1a4k
+ik1amt
+i2k1ano
+ik1anz
+i4kanze
+ik1art
+ik3att
+i2k1au
+i2kär
+4ike
+i2k1ei
+ike2l1
+i2k1e2r2e
+ik1erf
+iker6fah
+i2ker2l
+i2k1eta
+i3ki.
+ik1in
+i2kind
+i2k3l
+i3kla
+i3k4lä
+i2kn
+ik3no
+ik2o3p4
+iko3s
+i2köl
+i2k3ra
+ik3rä
+ik3re
+ik1s2
+ik3so
+ik3sz
+ikt2e
+ikt3erk
+ikt3r
+ik2tre
+i2kun
+i3kus
+i1la
+i2l3ab
+il1a2d
+i2l1ak
+i2l3a2m
+il1ans
+il1asp
+il1au
+il4aufb
+il3aus
+i2laut
+i1lä1
+6ilb
+il2c
+il2da
+il4d3en4t
+ild2er
+ild1o
+il2dor
+il2dr
+il1e2c
+ile2h
+il1ehe
+il1ein
+il1el
+i4lents
+i2l1erf
+i2l1erg
+i2l1err
+ilf2
+il2f3l
+il2f3re
+ilf4s3
+ilie4n
+ilig1a2
+ili4gab
+i2l1ind
+i2l1ip
+i3lip.
+i3lips
+2ill.
+il3l2a
+il3l2er
+il3l2i
+2ills
+il2mak
+il4mang
+il2m3at
+il2mau
+il2min
+2ilo
+i2l1or
+il3t2h
+i1lu2
+i2lum
+ilung4
+i3lus
+ilv4
+il2z1ar
+ilz3erk
+2im.
+i2manw
+i2m1arm
+im4at
+ima2tr
+imat5sc
+ima4tur
+i2meg
+i2mej
+i2mek
+i2mele
+i2melf
+i2m1erf
+i2m1erz
+i4mesh
+i2meti
+i2mew
+i2m1inf
+i2m1ins
+im2mei
+im4m3ent
+1immo
+2imo
+im1org
+1impo
+imp4s
+im3pse
+1impu
+im2st
+im3sta
+2imt
+imt3s2
+2imu
+in3a2c
+i4nack
+i2n1ad
+in2af
+in3am
+i3nap
+in2ara
+in2ars
+ina4s
+i2n3au
+in1äs
+in2dal
+in2dan
+1index
+in3do
+2indr
+ind4ri
+in3drü
+1indus
+2ine
+i2n1e2be
+in1ehe
+in3ei
+i2n1eng
+in3erbe
+i4nerbi
+in2erh
+iner4lö
+i4ner4tr
+i4nesk
+in1eu
+ine3un
+ine2x
+in3f
+1info.
+1infos
+2inga
+ing1af
+in2g1a4g
+in2gl
+ing4sam
+1inhab
+2inhar
+2inhau
+4inhe
+in2i3d
+i3nie
+2inig
+ini3kr
+in2ir
+2inis
+ini3se
+i3nitz
+3inkarn
+inma4le
+2inn.
+in4n3erm
+2innl
+in2nor
+inn4sta
+1innta
+2ino
+in1od
+in3ols
+in1or
+ino1s2
+ino3t
+i1nö
+in1ö2d
+2inp
+2inr
+ins2am
+insch2
+in2seb
+2insen
+ins3ert
+in3skan
+in3skr
+1insta
+in4s3tät
+in3stel
+in3su
+1insuf
+in4s3um
+in3s2z
+1integ
+int2h
+in3t4r
+in5tri
+in1u
+i3n2um
+in3unz
+invil4
+i1ny
+in3zw
+i1ñ
+2i1o
+io1c
+io2d
+i2oda
+io3e4
+iof4l
+i2o3h
+io2i3d
+io3k4
+i3ol.
+i3om.
+i3oms
+ion2
+i3on.
+ional3a
+io2nau
+ion3d
+i3ons3
+ion4spi
+ion4st
+i2ony
+i2o1p
+io4pf
+i3ops
+i3opt
+i2or
+i3or.
+i3orc
+iore4n
+i3orp
+i3ors
+i3ort
+io3s2
+i2ost
+i3ot.
+i3ots
+i2ou
+i2ov
+io2x
+i3oz.
+i1ö2k
+i3ön
+i1ös.
+2ip.
+i1pa
+i1pe
+ipen3
+i3per
+ip3fa
+iph2
+2i1pi
+ipi3el
+ipi3en
+ipi2s
+ip4l
+ip2pl
+ip3pu
+i1pr
+2ips
+2ipu
+2i1q
+i1r2a
+i3rad
+1i2rak
+irat2
+i1rä
+ir2bl
+ir1c
+ir2e
+i3ree
+2irek
+2i3ré
+ir2gl
+irg4s
+ir2he
+ir2i
+2irig
+2irk
+ir2k3l
+irli4n
+ir2mak
+ir2mau
+ir4mä
+ir2m1ei
+ir2mum
+ir4m3unt
+ir2nar
+ir2no
+i1ro
+1iron
+iro2s
+i1rö
+irpla4
+irr2h
+ir4sch3w
+ir3se
+ir3sh
+ir2st
+irt2st
+iru2s1
+i3sac
+i4s1amt
+is2ap
+is3are
+i2sau
+i2s1än
+2isb
+i2sca
+isch3ar
+i3s2che
+i4schef
+i4sch3e4h
+i4sch3ei
+i4schin
+i5sching
+i2sch1l
+isch3le
+i2schm
+isch3ob
+isch3re
+isch3ru
+i4schwa
+i6schwir
+i4schwo
+isch3wu
+is1chy
+i2s3cr
+2ise
+ise3e
+ise3ha
+ise3hi
+ise3inf
+i4seint
+ise2n1
+is2end
+isen3s
+i2serh
+i2s1erm
+iser2u
+i2s1ess
+i4s3etat
+is2has
+isi2a
+i2s1id
+i2s1of
+iso6nend
+is1op
+3i2sot
+is1pa
+i2spar
+is1pe
+is1pic
+is2pit
+i2spro
+is3sa
+is4s1ac
+is4sau
+is4s3che
+is2st
+is3sta
+is3sto
+iss3tr
+is3stu
+is2sum
+is3t
+is4tab
+is4tam
+ist2an
+i1s4tat
+is4tel
+iste4n
+istes3
+i1s4teu
+i1s4til
+is4toc
+is4tö
+is5tör
+ist4ra
+ist3re
+is4tü
+isum3p
+i2sü
+i1ß
+iß1ers
+it1ab.
+ital1a
+it1alt
+it1am
+it1an
+it2an.
+it3a4re
+it1art
+i3tat
+it1au
+i3tauc
+i4t1ax
+4itä
+it2är
+i2t1äs
+ität2
+i2t1ei
+i4teig
+it2eil
+i4tein
+2itel
+ite2la
+ite4n
+iten3s2
+i4tepo
+i2tex
+i5thr
+i2t1id
+1itii
+iti4kan
+i2t1in1
+it2inn
+itmen2
+i5toc
+i2t1of
+i3tö
+it3raf
+i2t3ran
+it3ras
+it3rau
+it3räu
+it3re
+it3ric
+it3rom
+it4ron
+i3tru
+it3run
+it2sa
+its1a4g
+it2s1e4
+its3er1
+it2so
+it2s1pe
+it4staf
+it2sto
+it2teb
+it4tri
+itt2sp
+it1uh
+i2t1um
+i2tuns
+it1urg
+itut4
+i3tü
+2itz
+it2zä
+it4z3erg
+it2z1w
+2i3u2
+ium1
+i1ü
+2i1v
+i2v1ak
+iv1ang
+i2veb
+i2v1ei
+iv1elt
+ive4n
+i2v1ene
+i2v1ent
+i2v1ur
+2i1w
+iwur2
+2i1x
+i2xa
+ix2em
+i3xi
+2i1z
+iz1ap
+iz1au
+izei3c
+ize2n
+i2z1ene
+iz4er
+i2z1ir
+izo2b
+i2zö
+i2z1w
+í1l
+ja1c
+jah4r3ei
+jahr4s
+ja3l2a
+ja3ne
+jani1
+ja1st
+2jat
+je2a
+jean2s
+je1c
+je2g
+jek4ter
+jekto2
+jektor4
+jek2tr
+je3na
+je2p
+je4s3t
+je2t1a
+je2t3h
+je2t3r
+jet3s2
+jet3t
+je2t1u2
+je3w
+ji2a
+jit3
+ji2v
+joa3
+jo2b1
+job3r
+jo2i
+joni1
+jo1ra
+jord2
+jo2sc
+jou4l
+j2u
+ju2bl
+jugen2
+jugend3
+ju2k
+jung3s4
+ju3ni
+jur2o
+jus3
+jut2e1
+2j1v
+1ka
+3ka.
+k3a2a
+ka3ar
+kab2bl
+ka2ben
+2kabh
+2kabla
+2kablä
+2k1a2bo
+ka3b4r
+2kabs
+2k1abt
+ka1c
+k2ad
+2k3ada
+2k3a2dr
+ka1f4l
+ka1fr
+kaf3t2
+k2ag
+ka1in
+ka3ka
+kaken4
+2kala.
+ka2lan
+ka3lei
+ka3len.
+ka4lens
+kal3eri
+kal2ka
+kal2kr
+k1all
+kalo5
+kal4tr
+k3ama
+kamp8ferf
+kan2al
+ka4n1a4s
+ka2nau
+kand4
+2kanda
+kan2e
+2k1ang
+kan3k4
+2kanl
+2k1anna
+k1ans
+k2ans.
+6kantenn
+ka3nu
+2kanw
+k2anz.
+ka2o
+2k1apf
+3kara
+2karb
+k2ard
+k2arg
+ka3r2i
+kari3es
+k2ark
+2k1arm
+k2arp3
+kar2pf
+k2ars
+kar3t
+k2arta
+2k1arti
+karu2
+k2arw
+3kas
+ka3se
+kasi1
+kas3s
+ka2s3t
+ka3tan
+ka3t4h
+ka4t3r
+2katt
+kau2f1o
+4kaufr
+kauf4sp
+k1aus
+kau3t2
+2kauto
+1kä
+k1äh
+k1ä2mi
+k1än
+kär2
+kä2s1c
+käse3
+2k3b4
+kbo4n
+kbu2s
+kby4
+2k3c
+2k3d2
+kdamp2
+2k1e1c
+k1eff
+kefi4
+kege2
+ke2gl
+ke2he.
+kehr2s
+kehr4s3o
+2k1eic
+2k1eig
+k1ein
+ke1in2d
+2keinh
+kei1s
+2k1eise
+keit2
+ke2la
+kel1ac
+ke3lag
+kel1au
+ke2lä
+kel3b4
+2ke2lek
+ke2len
+2ke3let
+kell4e
+kel3s2k
+k4elt
+2k1emp
+k2en.
+ken3au
+4ken4gag
+2kenlä
+ke2no
+kens2k
+ken5stei
+ken3sz
+k2ente
+k3enten
+ken3th
+k2entr
+2k1ents
+k2entu
+2kentw
+2keo2
+ke2pl
+k2er.
+ke1rad
+k2erc
+4kerfah
+k4erfam
+k3ergeb
+ker6gebn
+k3er4hö
+ke6rin6nu
+kerin6st
+kerin4t
+ker4ken
+k2erko
+k2erl
+k3er4lau
+k3er4leb
+k6erlebe
+ker4neu
+k1e2ro
+k2ers.
+kerz2
+ker4zeu
+2k1er2zi
+k6es.
+ke2sel
+ke4t1a
+ke2t3h
+ket3s
+ke1up
+keu6schl
+2k1e2x
+2k3f4
+2k1g2
+2k1h4
+kho3m
+ki3a4
+ki1c
+2k1i2de
+ki3dr
+ki2el
+kie2l3o
+ki1f4l
+ki1f4r
+ki3k4
+2kil2a
+ki3li
+ki3lo
+k2imi
+k2in.
+k2ing
+2kinh
+k2ini
+k2inn
+ki3n4o3
+kin3s
+2k1inse
+2k1int
+ki3or
+kio4s
+3kir
+kis2p
+kist2
+kis4to
+2kiz
+ki3zi
+2k3j
+2k1k4
+kl2
+4kl.
+4kla.
+k4lar
+4k1last
+k2le
+4kle.
+kle3ari
+4kleh
+k4leid
+4k3leit
+k3lem.
+2k3ler
+kle2ra
+2k3leu
+kle3us
+2klic
+2klig
+k2lin
+k3lip
+k2lir
+k2lisc
+2klist
+klit2s
+4kliz
+2k3loc
+klo2i3
+k4lop
+klost4
+klö2s
+k2löt
+k1lu
+kluf2
+klung4
+2k1lüc
+2kly
+2k1m
+k2n2
+3knab
+k3ne
+k4nei
+2k5ner
+kno4bl
+2k5nor
+k3nu
+3knü
+1ko
+ko2al
+2kobj
+2k1o2fe
+koff4
+koh3lu
+ko1i2
+kol4a
+ko3le
+kol2k5
+3kom
+ko4mu
+k2on
+ko3n2e
+kon3s4
+ko3nu
+2kop.
+ko1pe
+kop4fen
+2kops
+2kopz
+ko1r2a
+2k1orc
+kor6derg
+ko3ri
+k2os
+ko2sp
+ko2st
+ko3ta
+kot3s2
+kot4tak
+2k1ou
+3kow
+ko2we
+k1o2x
+1kö
+kö2f
+k1öl
+2k1p2
+k1q
+k2r4
+2k3rad
+k3rats
+2kraum
+k4raz
+2k3rät
+2k3räum
+2kre.
+2k3rec
+2k3rede
+2k3ref
+2kreg
+k3reic
+kre1i2e4
+kreier4
+k3reih
+2k3rh
+2krib
+2k3ric
+k3ries
+2krip
+3kris
+3k4ron
+2kruf
+krü1b
+2ks
+k4s1amt
+k2san
+ks3ar
+k2sau
+ks2än
+ksch4
+ks1e2b
+k2s1em
+k2sent
+ks1erl
+k2s1ers
+k2s1erw
+ks3ha
+k2s1id
+k2s1in
+k2s1o2
+k3sof
+ks1pa
+k3spe
+ks2por
+ks2pu
+ks3s2
+kst4
+k1sta
+k4s3tanz
+k3stat4
+k1ste
+k1s2ti
+k1sto
+k2stor
+k1str
+k2strä
+k1stu
+k2stum
+k2s1u
+ks2zen
+4k1t
+k2t1ad
+kt1akt
+k3tal
+kt1am
+kt1an
+k2t3a2r
+kta4re
+k2t1au
+ktä3s
+kte3e
+kt1ei
+k2temp
+k2tent
+k4t3erfo
+k2t1erh
+kte3ru
+k2tex
+k2th
+kt3ho
+k2t1id
+kt1im
+k2t1ing
+kt1ins
+kti4ter
+k2t1of
+k3top
+kt1ope
+k4torga
+kt3orie
+kt4ran
+kt3ras
+k4tref
+kt4ro
+ktro1s
+kt3run
+kt3s4
+ktt2
+k2tuns
+k3tü
+kt3z
+ku1c
+kuh1
+2k1uhr
+kul2a
+ku3l2e
+ku3l2i
+4kulp
+2k3uml
+kum2s1
+k2u3n2a
+kung4
+kun4s4
+kunst3
+2kunt
+2k1up.
+kur2bl
+ku2rei
+kuri2e
+kuri4er
+ku2ro
+kur2sp
+kur2st
+ku4schl
+ku2sp
+kus3t
+ku2su
+1kü
+2küb
+kü1c
+kür4s
+2k1v
+2k1w
+2k3z2
+kze3l
+3la.
+la3ba
+2labb
+4l3aben
+2labf
+2labg
+2labh
+4l1a2bl
+lab2o
+l2abr
+lab4ra
+lab4ri
+2l3abs
+l1abt
+3labu
+2labw
+la1ce
+la2ce.
+1lad
+lad2i
+l1adl
+2ladm
+2l1a2dr
+3ladu
+l1adv
+2laf
+la2fa
+laf3s
+laf3t
+la2ga
+la2gio
+la2gn
+lago2
+la2g1ob
+2la1ho
+1lai
+la2k1i
+l2akk
+la1k4l
+2l1al
+4lall
+4lalp
+l2ami
+la3min
+1lammf
+l2amp
+2l1amt
+lamt4s
+la4mun
+l1anal
+la2nau
+2lanb
+3l2and
+lan2d3a2
+lan6d5erw
+lan6d5erz
+lan2d3r
+2lanf
+lan2gl
+lang3s4
+2lanhä
+l2anhe
+2lanl
+4lanli
+2l3ann
+l1anp
+2lans
+4lansä
+2lantr
+lan2zw
+3lao
+l1a2po2
+lap4pl
+la2r1an
+la2r1ei
+la4rene
+3l4ar3g
+lar3ini
+lar3s
+2l1ar3t
+l3arti
+la2ru
+la2sau
+4lasd
+la3se
+2lash
+2lasi
+la2so
+2lasp
+3lasser
+la2st
+last1o
+lat2a
+la3te
+la4tel
+2l3ath
+la2t3ra
+lat2s
+2lat2t1a
+lat4tan
+lat4t3in
+lat2t3r
+laub4se
+l2auf.
+lau2fo
+l2aufz
+1laug
+2lausl
+2lausr
+2l1auss
+2lauto
+1law
+lawa4
+lay1
+lä1c
+1läd
+2läf
+2l1ähn
+1länd
+lär2m1a
+lä2s1c
+4lät
+2läub
+2läuc
+2läue
+1läuf
+1là
+2l1b
+l3bac
+l2b1ede
+l4beta
+l2b1id
+l2b1ins
+lb2lat
+l3blä
+lb3le
+l2bli
+l3blo
+l4bre.
+lb3rit
+lb2s
+lb3sa
+lb3se
+lb4sk
+lb3sp
+lbs6t
+lbst3e
+lb4sto
+lb2u
+l2b3uf
+lbzei2
+2l1c
+l3che
+l3chi
+lch3l
+lch3r
+lch3ü
+lch1w
+l3cl
+4l1d
+ld3a2b1
+l3d2ac
+ld3a2ck
+l2d1a2d
+lda4g
+l2d1ak
+ld1al
+l3dam
+ld1amm
+l2d3a2n
+l2d1a2r
+ld3ari
+l3das
+l3dat
+ld1au
+ld1är
+l2dei
+l2dele
+l3der.
+ld1erp
+l2d1e2se
+l2dex
+l2d1id
+l2d1im
+ldo2r
+ld2os
+ld2ö2
+ld3r
+l2dran
+l2dre
+l3d4ru
+ld4rü
+ld3sa
+ld3st
+ldt4
+ld3th
+l2d1um
+1le
+3le.
+le2ad
+leben4s3
+le2bl
+2lec
+le2chi
+lecht4e
+3led
+4ledd
+le3de
+le2e
+le3ei
+lef2a
+le2g1as
+le2gau
+le2gä
+le2gl
+leg4r
+3leh
+leh3r2e
+4lehs
+4leht
+3lei.
+lei2br
+l2eic
+l2eid
+4l1eig
+l2ein.
+l2eind
+lein4du
+l2eine
+lei6nerb
+2leink
+l2eint
+leis6s5er
+l4eist
+lei4ßer
+l2eit
+lei2ta
+lei8t7er8sc
+leit3s2
+lekt2a
+2lektr
+3l2ela
+2le2lek
+lel3s
+3lemes
+le2m1o2
+4lemp
+lem3s
+l2en.
+le4nad
+le2nä
+4lendet
+2lendu
+le4n3end
+4lenerg
+l2enf
+le3ni
+l2enk
+2l1enni
+l2e2no
+len4sem
+len3sz
+l1ents
+2l3entw
+lent4wä
+5lentwet
+4lentz
+len2zi
+le1os
+2lep
+3lepa
+3lepf
+lepositi8
+3lepr
+l2er.
+l2e1ra
+le2ra4g
+le2rau
+lerb4
+4l3ereig
+le4r3eim
+le4rers
+l1erfo
+l2erfr
+l2erfü
+3lergeh
+l3ergen
+3l4ergew
+2l1ergi
+lerin4s
+lerk2
+l2erka
+l2erko
+l2erle
+2l1er2ö
+3l2erra
+l4ers.
+lers2k
+lers2t
+ler3t
+6lerwerb
+l1erz
+l2erza
+les2am
+les2e
+2l1esel
+le3ser
+le3sh
+lesi1
+le3sk
+les2t
+leste3
+le1sto
+4lesw
+2lesy
+le2tat
+2le3th
+2leto
+let4tu
+le2u
+4leud
+2leuro
+3leut
+3lev
+2lexe
+le2xis
+2lexz
+2l1f
+l3fah
+lfang3
+l2f1ec
+lfe1e
+l4feis
+l3f4lä
+lf3lo
+l3f4lu
+lf3ram
+lf2tr
+lf4u
+lfur1
+l3fü
+2l1g
+lga3t
+lgd4
+lgen2a
+lge3ra
+lgeräu3
+l2geti
+l3go
+lg3re
+l3gro
+2l1h2
+3lhi.
+1li
+3lia
+li3ac
+li3ak
+li3ar
+lia1s
+libi3
+li1c
+3lichem
+3licher
+li3chi
+4lick
+li2cka
+li3d2a
+li2deo
+2l1ido
+li4ds
+lid3sc
+l2ie
+3lie.
+liebe4s
+li3ene
+lien3s
+lie2s3c
+lie2st
+3lig
+lig4n
+li2gre
+li3ke
+li2kr
+lik2sp
+lik4ter
+li3l
+lil2a
+2lim
+li3m2a
+3limo
+li3n2a
+lin3al
+2l1indu
+li2nef
+li2neh
+li2nep
+li2nes
+2l1inf
+lings5
+2l1inh
+2l1in1it
+2l1inj
+lin2k1a
+link2s
+li2nol
+l2ins.
+l2insa
+l2insc
+2linsp
+2linst
+2l1int
+l1inv
+2linz
+li2o
+li4om
+li3os.
+li2p3a
+3lis.
+li3s2a
+li4schu
+4lish
+2l1isl
+2l1i4so
+li2sp
+liss2
+lit2a
+li2tal
+li3te
+lit2h
+lit1s2
+lit3sz
+li3tu
+3liu
+2lixi
+li2za
+lizei3
+4l1j
+2l1k
+lk1alp
+l3k2an
+l3kar.
+lken3t
+lk2l
+lk3lo
+l3k4lu
+lk4ne
+lkor2b1
+lk4ra
+l2k3ro
+l2k3ru
+lk2s1
+lk3sä
+lks3t
+lk4stä
+l3k2ü
+4l1l
+ll1abb
+ll1a2be
+l2labt
+ll1aff
+ll1akt
+l3l2al
+l2l1a2m
+ll3ama
+lla2n
+ll2anw
+ll1anz
+l3lap
+ll1arm
+ll1au
+ll3aug
+l2laus
+l2l1äm
+llb4
+llch4
+ll3d4
+ll1ech
+lle3en
+l2l1ef
+ll1eim
+ll2em
+l3len.
+lle4n3a
+ll3endu
+llen3g
+l4lents
+l3ler.
+lle2ra
+l4lerfo
+l6lergen
+l4lergo
+ll3ernt
+ll3ertr
+l2lerz
+ll2es
+l2lex
+llg4
+ll1imb
+ll1imp
+l2l1ind
+ll1ins
+llk4
+ll3l2
+ll5m
+lln2
+ll1ob
+l2lobe
+l2l1of
+ll1opf
+l2l1o2r
+l3lor.
+l3lore
+l2l1ou
+l3low
+l2löf
+ll1ö4se
+ll3sh
+ll3s2k
+ll2spr
+ll5t4
+llti2m
+llt5s2
+llu2f
+ll1ur
+llus5t6
+ll3z2
+2l1m
+l2m3a2b
+l2marc
+lm1aus
+lm1c
+lme2e
+lm3eins
+l2m1e2p
+l2m1erz
+lm1ind
+lm1ins
+l2möl
+lm3p
+lmpf4
+lms2t
+lm3ste
+lm3s2z
+lm3t
+4ln
+lna4r
+ln3are
+lnd2
+l3n4e
+l3ni
+l1nu
+l1nü
+1lo
+3l2ob.
+lo2ber
+2lobj
+2l1o2bl
+l2obr
+lob4ri
+l1o2fe
+lo1fl
+lof4r
+lo2gau
+lo3h2e
+2l1ohr
+loi4r
+3lok
+lo2k3r
+lol2a
+l1o2ly
+lo2min
+lo2n1o
+lo2o
+2lopf
+2lopt
+lo1ra
+lo4rä
+2lorc
+l1ord
+lo3ren
+2l1or3g2
+lo3ro
+3lorq
+3los.
+lo4sa
+3lose
+lo4ske
+lo2spe
+loss2e
+lo4ste
+los3t4r
+lo2ta
+lo3tha
+loti4o
+2l1ov
+lo2ve
+2lox
+1lö
+lö2b3
+2löd
+lö2f
+2l3öfe
+4lög
+l1öhr
+2l1ö4l3
+4löß
+2l1p
+l3pa
+lpe2n3
+lp2f
+l2p1ho
+lp3t4
+l3pu
+2l1q
+2l3r2
+lrat4s
+lre1s
+lrut4
+lrü1b
+4l1s
+l3sac
+l2s1a2d
+l3s2al
+l4s1amb
+l2sann
+l3sare
+l2sau
+l4schin
+l4schmü
+l2s1e2b
+l2s1ec
+l2s1em
+ls1ere
+ls1erg
+l2serh
+ls1erl
+l2s1ers
+l2s1erw
+l3sex
+l4sha
+lsho2
+l2s1imp
+ls2log
+ls3ohne
+l4s3ort.
+l3s2pi
+ls2po
+l2spro
+l3s2pu
+ls3s2
+lst2a
+lstab6
+ls4taf
+l4s3täti
+l2ste
+l3stec
+l3stei
+l3stel
+l4stem
+ls6terne
+ls6terns
+ls2tie
+l2stit
+ls4tr
+ls2tu
+ls1um
+l2sun
+lsu3s
+ls2zen
+4l1t
+l2tab
+ltag4
+lt1ak
+lt1a2m
+l4t3ame
+lt3and
+lt1ang
+l3tarb
+lt1art
+l2t3ato
+l2t1au
+lt1eh
+l2t1eis
+l4te4lem
+lt3eli
+lt2en
+l5ten.
+lter3a
+lt2erg
+lt4erö
+l4t1e4sk
+lte2th
+l2t1eu
+l2th
+l4thei
+lt3ho
+l3thu
+ltimo4
+l2tob
+l2t1of
+lt1op
+l2t1o2ri
+lto2w
+lt1öl
+l3tör
+lt1ös
+l4t3öt
+ltra3l
+l3trä
+lt3räu
+lt3re
+lt4rie
+lt3roc
+lt3ros
+l2t3rö
+l6ts
+lt3sc
+lt2so
+lt4stab
+lt4stoc
+ltt2
+lt1uh
+l2t1um
+ltu4ran
+ltu2ri
+l3tü
+lu1an
+4lu4b3
+luba2
+lubs2
+lu2dr
+lu2es
+1luf
+2l1ufe
+2luff
+luf2t1a
+luf2t1e
+luf2t5r
+lu2g1a
+lu2g1e2b
+lu4g3l
+lu2go
+lu2g3r
+lug3sa
+lug3sp
+lu2gu
+2l1uh
+lu1id.
+lu1is.
+lume2
+2lumf
+2luml
+l2ump
+l1ums
+l1umw
+1lu2n
+2l1una
+2l1unf
+lung4sc
+2l1uni
+2lunt
+2lunw
+4luo
+2lur
+l1urn
+l1urt
+2luse
+lu2sp
+lus4s3a
+lus2s1c
+luss3er
+lus6serf
+lus6serk
+lus6sers
+lus2s1o
+lus2s3p
+lus2s3t
+lus4stä
+lu4st
+lus4t1a
+lust3re
+lu2s1u
+lu2t1a
+lu2tä
+lu4teg
+lu4t3erg
+lut1o2f
+lu2top
+lu4t3r
+3lux
+2lüb
+5lüd
+lüh1l
+2l1v
+2l3w
+2lx
+1ly
+ly1ar
+ly3c
+2lymp
+3lyn
+ly3no
+ly1o
+ly3u
+2l1z
+l2z3ac
+l3z2an
+lz2erk
+lz1ind
+lzo2f
+l2zö
+lz3t2
+l2z1u4fe
+lz1w
+lz2wec
+1ma
+m1ab
+m2abe
+2mabk
+m2ab4r
+2mabs
+2mabt
+mach4tr
+ma2ci
+ma3da
+ma2d4r
+ma4d2s
+mae2
+ma1f
+ma2ge.
+ma2geb
+ma2gef
+ma2geg
+ma2gek
+ma2gep
+ma4ges.
+ma2get
+ma2gev
+ma2gew
+2m1agg
+magi5er.
+magi5ers
+ma3g4n
+2m1ago
+mai4se
+2m1akt
+mal1ak
+ma4lakt
+ma2lan
+ma4l3at
+ma2lau
+mal3d
+ma3ler
+mali1e
+mal3lo
+2mallt
+malu4
+ma2l3ut
+mam3m
+2m1anal
+ma2nau
+2manb
+man4ce.
+man3d2
+man3ers
+ma2net
+m2anf
+2m1angr
+m2anh
+2manl
+m4ann
+2mansa
+2mansä
+2mansc
+2mantw
+2manz
+ma2or
+m2app
+2marb
+mar3g2
+4ma3r2o
+maro3d
+4marr
+mar6schm
+mar6schr
+ma3r2u
+m1arz
+3mas
+ma3s2pa
+4m1aspe
+massen3
+mas4tel
+ma1s4tr
+3maß
+ma2ta2b
+ma2tan
+mat4c
+ma2tel
+ma4t3erd
+ma5tri
+mat3se
+mat3sp
+2m1au2f
+ma3un
+2mausg
+m4ay
+ma1yo
+3mä
+m1ähn
+mä1i2
+4m1änd
+m1ärg
+mä3t4r
+mäu2s1c
+2m1b2
+mbe2e
+mb4l
+m3b4r
+mby4
+2mc
+m3ch
+2m1d
+md1a
+m2d1ä
+m2dei
+mds2e
+m2d1um
+1me
+meb4
+m2e1c
+medi3
+medie4
+medien3
+2medy
+me1ef
+mee2n1
+mega1
+3meh
+2m1eif
+2m1eig
+m2eil
+mein4da
+me1i4so
+3meist
+me3lam
+3meld
+me2lek
+me2ler
+melet4
+2melf.
+mell2
+mel2se
+mel5t4
+6mel6tern
+2m1e2mi
+m2en.
+mena2b
+me3nal
+men3ar
+men3au
+men3gl
+me3nor
+m2ens
+men4sk
+men2so
+men3ta
+men6tanz
+2mentn
+4m3entwi
+me1o
+2meou
+2meö
+3mer.
+me1ra
+me2r3ap
+me4rens
+mer2er
+4m3ergän
+3merin
+merin4d
+merin4t
+me2ro
+3mers
+merz4en
+3mes
+mes1a
+me2sal
+me4sä
+4meser
+2me3sh
+4m1essa
+mes6serg
+mes2s1o
+mes2s1p
+mes2st
+meste2
+me1sto
+4mesu
+me3t2a
+me3th
+meu1
+2m1ex
+1mé
+2m1f4
+mfi4l
+4m1g2
+2m1h4
+1mi
+mi2ad
+mi3ak
+mibi1
+mi1c
+mi3da
+mie3dr
+mi2e1i
+mie3l
+mien3s
+mi2er
+mierer4
+mie2ro
+mi4et
+mie4ti
+3mig
+mi2kar
+mi2ki
+mi2ku
+3mil
+mi3l2a
+milch1
+mil4che
+mild4s
+4milz
+2m1imp
+minde4s
+min2en
+min2eu
+min2ga
+ming3s4
+mi3ni
+3min2o
+mi1nu
+3mir.
+mi3ra
+3miri
+3mirs
+3mirw
+mi2sa
+mi4scha
+mi4schn
+mi4schw
+mise1
+mis2s1c
+mi2s5te
+3mit
+mi2ta
+mi2th
+mi2t1r
+mit3s2
+mit5sa
+mi5tsu
+mi2t1u
+4mitz
+2m1j
+4m1k4
+m3ka
+mk5re.
+4m1l2
+ml3c
+ml3l
+ml3s
+2m1m
+m2mab
+m2m1ak
+m2m1al
+mm1ang
+m2m1ans
+mm1anz
+m2m1au
+mmd2
+mm1ei
+mme4lin
+mme4na
+m4mentw
+mme2ra2
+mme4rec
+mme2sa
+mm1inb
+mm1inf
+mm1inh
+mm1ins
+mm1int
+mmi3sc
+mmi1s4t
+mmm2
+mm3p
+mm2s
+mm3si
+mm3sp
+mm3sta
+mm3str
+m2mum
+mm2un
+mmül2
+mmüll1
+2m3n2
+m4nesi
+1mo
+moa3
+2mobj
+3m2od
+mode3s
+mo2dr
+4mog.
+mo2gal
+3moh
+mo2i3
+mo2k1l
+2mol.
+3mom
+mom2e
+3m2on
+mo3ne
+mo4n1er
+mon2s3
+mon3su
+3mo2o
+2m1ope
+2mopt
+mo1ra
+mo2rar
+2m1orc
+mor2d3a
+mor2dr
+mo2rer
+morgen5s6
+mork4
+3mos
+mos4ta
+moster4
+3mot
+m1o2x
+mo1y
+1mö
+mö2c
+4mök
+m1öl
+2m1p
+m2pf
+mp4f3erg
+mpf3erp
+mpf3err
+mp4f3erz
+mp2fl
+mpf3li
+mpf1or
+m3pon
+mp3ta
+m3pu
+2m1q
+2m3r2
+2m1s
+m2san
+ms3and
+m4sap
+ms1as
+m2sau
+m3sä
+m3sc
+msch2
+m4sco
+m3se
+m4s1ef
+ms1erw
+m4sex
+ms1ini
+mso2r
+ms1ori
+m2spä
+m2sped
+ms2po
+m2spot
+m2spro
+ms2pu
+ms3s2
+m4stag
+m3stel
+m3s2ti
+m3sto
+ms4tr
+ms5trä
+ms5tren
+m3s2tu
+ms4tü
+ms1um
+m2sü
+m3sy
+4m1t
+mt1ab
+mt1ak
+m3tam
+mt1ar
+mt3are
+mt1elt
+m2t1erf
+m4t1erg
+m2t1erl
+m2t1ers
+m2t1ert
+m4t1eta
+m2t1eu
+m2th
+mt3ho
+m2t1im
+m2t1ins
+mti2s
+mtmen2
+m3tö
+mt1ös
+m4ts1
+mt2sa
+mt2se
+mt3s2ka
+mt2spr
+mtt2
+mt1um
+mt1urt
+m3tü
+mt3z
+1mu
+mu1a
+mu3cke
+2m3uh
+mu3la
+2muls
+3mun
+mun2d1a
+4m3unf
+4m3ungeb
+mu3ni
+m4unk
+munt2
+4munz
+mu3ra
+mu4r1u2f
+m4us
+mu4s1a
+3musi
+mu2s1o
+mu2sp
+mus3t
+mu2su
+mut1au
+muts3
+mut2st
+1mü
+2müb
+mül4len
+3mün
+3müt
+mütter3
+2m1v
+mvoll1
+2m1w2
+mwa2
+mwa4r
+mwel4
+1my
+my4s
+2m1z
+1na
+3na.
+2n1ab
+na2bä
+4nabg
+4nabh
+na2bl
+n2abo
+na2br
+4n3abs
+4nabt
+3n2ac
+na2ch1
+na3chen
+nach3s
+nacht6ra
+4nadd
+n2ade
+4na2dr
+n1af
+na1f4r
+3n2ag
+na2gem
+3n2ah
+na2h1a
+n3ahn
+3nai
+nai2e
+n3aig
+n3air
+2n1ak
+na2ka
+3nako
+n2al.
+na2l1a2
+na2lä
+3n2ald
+n4ale
+na4lent
+na2let
+nal3la
+nalmo2
+na2lop
+nal2ph
+n2als.
+nal3t4
+na2lu
+2naly
+n4am.
+3name
+n4amen
+4n3a2mer
+na3m4n
+3namo
+2n1amt
+namt4s
+n1an.
+4n1a2na
+4nanb
+n1and2
+4n1ang
+2nanh
+2nani
+4nank
+2nanl
+3nann
+na3no
+n1anp
+2nanr
+2n1ans
+2nantr
+2nanw
+nap2si
+n1ar
+5nar.
+na2r1a
+2narc
+n2ard
+4narg
+3nari
+n2ark
+n2arle
+2narm
+n2arp
+4n3art
+na3r2u
+3nas
+n2as.
+na4schw
+4nasp
+4n1a2sy
+nasyl2
+3nat
+n4ata
+na3t4h
+4natm
+nats1
+nat4sa
+nat4sc
+4natt
+n1au
+4nauf
+nauf4fr
+n3aug
+5naui
+3n2aul
+4nausb
+4nausg
+n2auso
+4nauss
+n4auste
+4nausw
+navi5er.
+navi5ers
+1nä
+3n2äc
+3näe
+n1ähn
+2n1ä2m
+2n1än
+när4s5
+3näs
+nä2sc
+n2äss
+2näu
+3nä1um
+2n3b4
+nbe2in
+nbe3n
+nbe3r2e
+nbes4
+nbu2s
+nby4
+2n1c
+n3ce2n3
+nch3m
+n2ck
+2n1d
+nd2ag
+n2d1ak
+n2danl
+nd1ann
+n2d1anz
+ndat2
+nd1au
+nd1c
+nde4al.
+n2dei
+nde4län
+n4d3ents
+nde4rob
+nder5ste
+nde2se
+ndi2a3
+n2dob
+ndo2be
+ndo1c
+nd1op
+nd1or
+n2dö
+n2d3rat
+n2d3re
+n2drob
+nd3rol
+nd3ros
+n2drö
+n2drui
+n4d3run
+nd2sor
+nd2spr
+nd4stab
+nds3tau
+nd3th
+ndt4r
+n2dü4
+ndy3
+1ne
+3ne.
+ne2ap
+ne3as
+ne3at
+ne2bl
+2n1ebn
+2nec
+3neca
+ne1ck
+3ned
+ne2de
+2nee3
+ne2e2i4
+ne3ein
+n1ef
+neg4
+2ne2he.
+3nehm
+4n1ehr
+2n1ei
+n2eid
+4neif
+3neigt
+4n3eing
+4n3eink
+ne2ke
+nek3t4
+ne2l
+3nela
+nel3b
+2n1ele
+4nelek
+4nelem
+ne3len
+ne3li
+nel4la
+3ne3l2o
+3ne3lu
+n2em.
+2n1emb
+n1e2mi
+2n3emp
+2n1ems
+3nen
+n4en.
+nen3a2
+n2enb
+n2enc
+4n1endb
+4n1endd
+4n1endf
+n1endg
+4n1endh
+4n1endk
+4n1endp
+4n1endt
+4n1endw
+ne2n1e2b
+nen3ei
+nenen1
+ne4nene
+4nengb
+nen4ge.
+nen4gen
+4nengs
+4nengt
+n2enh
+ne2ni
+n2enj
+nen3k
+ne2no
+n2ens
+nens4e
+nen3sk
+5n2en3t2a
+n1entb
+4n1entl
+4nentn
+5nentr
+n1ents
+4n3entw
+4nentz
+ne2n3u
+n2env
+n2enw
+ne2ob
+ne1os
+2nepf
+2n1epo
+ne2pos
+n2er.
+ne1ra
+ne2ra2b
+ne3r4al
+ne2r3am
+ne2ran
+ne2rap
+ne2rau
+4nerbe.
+4nerben
+n1erbi
+nere2
+ne2reb
+n1erf
+4n5erfo
+nerfor4
+2nerfü
+3nergr
+n1erh
+2n3erhö
+3neri
+n1erk
+n2erli
+2n1erlö
+n1ermä
+ner4mit
+n2ern.
+4n1ernt
+ne2ro
+ne1rös
+n2erp
+3n2ers.
+2n3ersa
+ner8schle
+n2ert.
+n1ertr
+ne2rup
+n2erv
+2n1erz
+3n2es
+n4es.
+ne3san
+nes4c
+nesi1e
+ne3ska
+nes1o
+ne2s1p
+4n3essi
+ne1sta
+nes3ti
+ne2tad
+ne2t1ak
+ne2t1an
+ne2tap
+n1etat
+ne2tau
+ne2th
+net3ha
+nett4sc
+n1e2tu
+net2zi
+ne2u
+neu1c
+neu3g
+2n1eup
+n2ew
+2n1ex
+3nez
+1né
+2n1f
+nf1ak
+nfalt4
+nf2ä
+nff4
+n3fi
+nfi4le.
+nf4l
+nf5lin
+nf2o
+nfo1s
+nf4r
+nf3s
+nft2o
+nft4s3
+n2f1u
+4n1g
+ng2abs
+n2g1ac
+ng1ad
+n2g1ak
+n2g3a2m
+n2g1and
+ng2anf
+ng1anz
+n2g1äl
+ng3d4
+n3gef
+n2g1ein
+ng2en
+ngen2a
+n3ger
+nge4ram
+n4g3erse
+nge4zän
+ng3g4
+ng3hu
+n2g1i2d
+n3gläs
+n2glic
+n2glo
+n3g2loc
+n2glö
+ng3m
+n2gn
+ng3ne
+ng1or
+ng3rat
+ng3roc
+ngs3c
+ng4s3e4h
+ngs3pa
+ngs5tri
+ng3ts
+n2gum
+2n1h4
+n3han
+n3har
+n3hau
+n3hä
+n3he
+nhe2r
+n3hu
+1ni
+3nia
+nib4l
+nich1s
+nich8ters
+n1id
+ni2de
+ni3de.
+ni3dr
+n4ie
+nie3b
+ni1el
+nie3l2a
+nie4n3
+ni3ene
+ni1ero
+nifes3
+nig2a
+2n3i2gel
+nig3r
+ni2gre
+nig4sp
+3nik
+ni2kal
+ni2kar
+ni3ker
+ni4k3ing
+ni3kl
+ni2kr
+3n2il
+nim2o
+4n1imp
+nin1
+3n2in.
+n2in4a
+4n3ind
+2ninf
+3n2ing4
+4n1inh
+ni2nor
+2n1ins
+n2ins.
+4ninse
+4n1int
+2n1inv
+ni2ob
+ni3ok
+ni3ol
+n2ip
+ni3ra
+3n2is
+ni4schw
+ni2s1e
+ni2s1p
+ni3spi
+nis3s4
+ni2s1u
+2nit
+ni2ti
+ni3t4r
+nit4s
+ni3tsc
+nitts1
+nitt4sa
+ni3tu
+ni3v
+3nix
+n1j
+2n1k
+n2k3ad
+n2k1ak
+n3k2al
+n4k3alg
+nk2am
+n2kans
+n2kaus
+n2käh
+n2k1är
+nke2c
+n4k3erfa
+nk4erg
+nk1inh
+n2k1ins
+nk3len
+nk3les
+n2klie
+nk2lo
+nk2lu
+nk3lun
+nk4na
+n2kne
+n2k1ort
+nk2öf
+n2köl
+n2k3ro
+nk2s1al
+nks2ei
+nk3s2z
+nk2tak
+nk2tan
+nkt1it
+nk4top
+nk2tru
+2n3l2
+2n1m4
+nmen2s
+4n1n
+nna2be
+n2nada
+n4n1all
+n2n1an
+n2nau
+nnen3g
+n4nents
+nn2erh
+nn2erk
+nne2rö
+n4n3er4wa
+nner2z
+nne2s
+nnes1e
+nne4st
+nn2ex
+nn3f
+nng4
+n3ni
+n2nof
+nn1o2r
+nn3sc
+nn3se
+nn3s2p
+nn2th
+n2n1uf
+n2n1unf
+nn1ur
+1no
+3no.
+3nobl
+no2bla
+n2o3ble
+2n1ob2s
+no1c
+2no2d
+no3dr
+n1of
+2n3o2fe
+n3ole
+no2leu
+n2on.
+3n2opa
+3nor.
+nor2a
+no2rad
+no1rak
+no3ral
+2norc
+nor2d5r
+3norh
+3norm
+3nors
+n1ort
+3n2os.
+no3sh
+no2sp
+n2oste
+nost1r
+2nostv
+no3tab
+no2tä
+no4t3ei
+no2tel
+no3t3h
+no4tha
+no2t3in
+no2t1op
+no2tr
+3nov
+3now
+2n1o2x
+3noz
+2nöd
+2nö2f
+4n1ö4l
+2n3p4
+npa2g
+npro1
+npsy3
+2n1q
+2n3r2
+nräu3s
+nre3sz
+nrö2s1
+6n1s
+n2s1a2d
+n2s1all
+n2sang
+n2sant
+n2saus
+n3sav
+n2s1än
+n2s1äus
+ns2ca
+n6schef
+n4schro
+nsch7werd
+ns1eb
+ns1e2d
+nseh5ere
+nsen4sp
+ns1ent
+n2s1ep
+ns1erf
+ns1erg
+n2serh
+n2s1erk
+n2s1erö
+ns1ers
+n2s1erw
+n2s1erz
+nse2t
+n4s1eta
+n3sex
+nsfi4l
+nsho2f
+n3sil
+n2simp
+n2s1ini
+nsi4te
+nsi2tr
+ns2kal
+n2s1op
+n4s3ort.
+nsp4
+n2spat
+n2sph
+n3s2pi
+ns4pie
+n2spo
+ns3pon
+n2sprä
+n4s3prie
+n4spro
+nsrü2
+ns3s2
+nst1ak
+n3star
+n3stat
+n4stat.
+n4s3tate
+nst3eif
+n3stemm
+ns4tent
+ns6terbe
+n5s6terne
+n5s6terns
+nst4erö
+ns2ti
+nst5opfe
+ns4tor
+n4strac
+n4strie
+ns2tu
+nst2ü
+nstü1b
+n2sty
+ns2um
+n2s1un
+ns2ung
+ns4unr
+ns4uns
+n3sy
+n4s3zi
+2n1t
+nt3abs
+n3t2a3c
+n3t2al
+nta3m
+nt1ang
+n4tanza
+nt2arb
+nt1ark
+nt2arm
+nt4at
+nt1äm
+n2t1äu
+nte3au
+nte2b
+nt1ebe
+nte1e
+nte3g6
+nt1eh
+n2teig
+nt2en
+nt4ene
+nten6te.
+n3ter
+nt4ern
+nt4ers
+nt4ert
+n4t1ess
+nteu3
+nte3v
+nt2her
+n2t3ho
+n3thr
+n3t4hu
+nti3c
+nti3k4l
+n2tinf
+n2t1inh
+ntini1
+nt2ins
+n3ti1t
+ntmen2
+ntmo2
+n3to
+nto3me
+nton2s1
+n3tö
+nt3rec
+nt3reif
+n5trep
+nt4rig
+n5trop
+n2t3rü
+n4ts
+nt3sa
+nt4sau
+nts2o
+nts2p
+nt4s3par
+nts2t
+nt2sto
+n3tu
+3n4tu.
+ntum4
+ntu2ra
+ntu4re.
+ntu4res
+n3tü
+nt3z2
+1nu.
+1nu1a
+nu3ar
+nubi1
+1nu1c
+1nud
+3nue
+nu2es
+nuf2
+nu2fe
+1nug
+2n1uh
+1nui
+nu3k4
+n2um.
+2n3umb
+2numf
+2numg
+3numm
+2numr
+2n1ums
+2n3umz
+nu2n
+2nuna
+1n2ung4
+3nung.
+n3ungl
+2n1uni
+2nunt
+1nuo
+2nup
+2nur
+3nu2s
+nu3sc
+nu3se
+nu3sl
+1nut
+nu2ta
+nu4t3r
+1nuu
+1nux
+1nuz
+3nü.
+2nü4b
+nür1c
+3nüs
+1nüt
+2n1v2
+n3ver
+4n1w
+1ny.
+1nyh
+2nymu
+n1yo
+1nyr
+1nys
+1nyw
+2n1z
+n2zad
+n2z1a4g
+n2zan
+n2z1au
+n2z1än
+n2zär
+nzdi1s
+nz1ec
+n4zense
+n4zentw
+n4zentz
+nz3erwe
+nzi2ga
+nzig4s
+nz1ini
+n2zor
+nz2öl
+nz3s
+n2zurk
+n2z1wa
+n2z1wä
+n2zwö
+n2z1wu
+ño1
+2o3a2
+o4abi
+o4ac
+oa3che
+oa3chi
+o4ad
+oa3de
+oa4g
+o4ah
+o4a3i
+oa3ke
+oa4k1l
+o4a3la
+o4a3mi
+oanne4
+o2ar
+o2as
+3oa3se
+o4at
+o5au
+o1b
+ob2al
+2oban
+o3bar
+2o3b2ä
+2obb
+ob2e
+2obe.
+2obea
+ob3ein
+2o3b4en
+oben3d4
+oben3se
+ober3in4
+obe4ris
+2obew
+2o3b2i
+obi4t
+ob3ite
+1obj
+ob1l
+o2b3li
+2o3blo
+2o3bo
+o2b3re
+o3bri
+ob3s2h
+ob3sk
+obs2p
+ob2sta
+2o3bu
+obu2s
+2o3bü
+2oby4
+2oc
+o3ca
+oc1c
+o1ce
+och1a
+ocha2b
+o1che
+oche4b
+o2ch1ec
+och1ei
+ocher4k
+och3l
+och3m
+och1o
+och3ö2
+och3r
+och1s
+ocht2
+och3te
+o1chu
+ochu2f
+och1w
+o1ci
+o1ck
+o2ckar
+o3cke
+ock2er
+o3cki
+o2cko
+ock3sz
+o1cl
+o1ç
+o1d
+o3d2a
+od2dr
+o3deb
+o3d2e1i
+odein3
+ode2n1
+odene4
+ode3sp
+o3dex
+2o3dia
+o3dir
+o3div
+o2don
+odo4s
+2odr
+o2dre
+odt4
+2o3du
+2o1e2
+o2ec
+oen1
+o4e3s
+o2e3t
+o3et.
+o3ets
+o1ë
+2ofa
+of1a2c
+of1am
+of1au
+o2f1ei
+of2en
+o3fer
+of2f1a
+of2f1in
+1offiz
+of2f5l
+of2f3r
+offs2
+of2fu
+2ofi
+of3l
+of1la
+of4lä
+of4lö
+2ofo
+2o1f1r
+of3ra
+of3rä
+of4rü
+ofs1a
+of4sam
+of2spe
+of2spr
+of2s1u
+2oft
+of2tei
+of3th
+2o1g
+o2g1ab
+oga3d
+og1ala
+og1ang
+o2g1ei
+oge2l1i
+o3gh
+ogi2er
+og2lo
+o3g4n
+ogs2
+og3sp
+og1ste
+o1ha
+o1hä
+o1he
+o2h1eis
+ohen3s
+o2h1ert
+o2h1erz
+o1hi
+ohl1a
+ohl3au
+oh3lec
+ohl1ei
+oh3lem
+oh3len
+oh3lep
+oh4lerg
+oh4l3erh
+oh4lerw
+oh3lo
+ohls2e
+oh2lu
+3ohng
+oh2ni
+1ohnm
+oh2n1o
+o1ho
+oho2la
+oh1o2p
+o2h3ö
+ohr1a
+oh4rin
+oh1ro
+oh1s
+oh3t
+o1hu
+oh1w
+2o1hy
+2oi
+o1i2d
+o3ie
+o1im
+oimmu4
+o1in
+oi2r
+o2isc
+o3isch.
+o1ism
+oiss2
+oi1th
+2o1j
+2o1k
+oka2la
+okale4
+3o2kel
+oki2o
+ok1lä
+ok4n
+4okr
+ok2s1p
+okt4
+2ol
+o1la
+o2lab
+o2l1ak
+ol2ar
+olars2
+ol1auf
+o1lä
+ol4dam
+ol4dr
+ole3e
+ol1eie
+ol1eis
+oler2
+ole3s
+ol1ex
+o1lé
+ol2fa
+ol2fl
+olf1r
+ol2fra
+ol2gl
+ol2gr
+ol2i
+oli3k4
+ol2kl
+olk3r
+ol2kre
+ol2lak
+ol2l3au
+oll1e2c
+ol2l1ei
+ol2lel
+oll5ends
+ol4lerk
+oll5erwe
+o3lo
+ol2of
+olo3p2
+ol1ort
+ol2str
+o1lu
+3oly
+1olym
+ol2z1a
+ol4z3ern
+ol2zin
+ol2zw
+2om
+o2mab
+oma4ner
+om2anw
+om1art
+o2m1au
+o2meb
+ome3c
+o2m1ei
+o3m2eis
+o2mel
+o3men.
+o2mep
+o2meru
+om1erz
+om2es
+omiet1
+o2m1ind
+om1ing
+o2m1int
+om3ma
+om1org
+om3pf
+oms2
+omtu3
+o4munt
+omy1
+2ona
+ona2b
+o2nae
+o3nal
+on1ap
+o2narb
+on2au
+on3aus
+2onä
+onbe3
+2onc
+onderer5
+2one
+one2i
+one2n3
+onens2
+o2n1erb
+o2n1erd
+on1erg
+on1erö
+o3nett
+on3f2
+on3g2l
+ong4r
+ong3s
+4o3ni
+on2i3d
+o4nikr
+o4n1im
+on3ing
+on3k2
+onli4
+onlo2c
+on3n2an
+on3n2e
+ono1
+o3nod
+o2noke
+on1orc
+ono3s
+ons1a
+onsa4g
+on4sam
+on2seb
+onse2l
+onsi2
+ons3l
+ons1p
+onst2h
+on3t2a
+ont3ant
+on4t3end
+ont3erw
+ont2h
+on4t3ri
+ont3s
+o1nu
+2onuk
+on3v
+1ony
+on3z
+o1ñ
+oof2
+oo2k3l
+o1op
+o1or
+oor3f
+oo4sk
+oo2tr
+2o1ö2
+o1pa
+opab4
+o2p3ad
+op3akt
+opa5s
+o1pec
+o1pei
+o1pe4n
+2opf.
+op2f3a
+op3fah
+o2pfe
+op4ferd
+opf5erde
+opf1l
+opf3la
+op1flü
+4oph2
+o3phe
+o1pi
+opi5a4
+opi3er.
+opi5ers.
+opin2
+op5lag
+o2p3le
+op3li
+2o3po
+op4pl
+op2pr
+2o1pr
+1opsi
+op3sz
+1op3t4
+o1q
+2or.
+or1a
+or3a2b
+o1rad
+2orak
+2oral
+o2r3alm
+or4alt
+3oram
+or2and
+o2ranh
+or3arb
+o1ras
+or3att
+o3rä
+or1änd
+or1ät
+or2bar
+orb2l
+or1c
+2orca
+or2ce
+4orda
+or2d3am
+or2dau
+or4d3eng
+or2deu
+or2d1ir
+or2dit
+1ordn
+or2do
+2ordr
+2ords
+ord3s2t
+or2dum
+2ordw
+4ore
+ore4as
+o2r1e2ck
+o2r1ef
+ore2h
+or1eig
+o2rein
+or1er
+o2rerf
+or1eth
+2orf
+or2fle
+orf3s4
+or3ga
+2orget
+or3g2h
+2orgia
+orgi1e
+or2gl
+or3gle
+or2gn
+2orh
+2o3ric
+o4rient
+o3rier
+4oril
+4orin1
+2orit
+ork2a
+or2k3ar
+ork2s
+2orm
+or4mans
+or4ment
+or5ne.
+or3n2o1
+2o1ro
+oro3n2a
+2o1rö
+2orq
+2orr
+orr4a
+or3rh
+2ors2
+or3s4a
+orsch5li
+or3sh
+or3sz
+or2t1ak
+or4t1an
+or2t1au
+or2tär
+or2tef
+ort3eig
+or4t3ent
+or4t3ere
+ort3erf
+or2t3ev
+or2the
+ort3ins
+or4t3off
+or2tor
+or4tö
+or4trau
+or4t3räu
+ort3re
+ort3ric
+or2t1um
+o3ru
+or2uf
+o4r3un
+o2r3ü
+o2rya
+2o3s2a
+os3ad
+os4an
+osa1s
+o3sche
+os4co
+2o3se
+ose3e
+o2s1ei
+ose2n
+o4sents
+2osh
+o3s2hi
+o3sho
+2osi
+o3sk
+o4ska
+os3ke
+o4ski
+2os2kl
+2os2ko
+os2lo
+2oso
+2os1p
+o2s3per
+o3s2po
+os2sa
+oss3and
+os4sä
+os2sei
+os4s3en4k
+os4s3enz
+os2s3o
+os4son
+os2s3p
+os2s3t
+ost1a
+osta2b
+os4t3am
+os3tarr
+ost4art
+os4ta4s
+os4tei
+oster3e
+os6t5er6we
+os2t3h
+os3til
+os3to
+os4t1ob
+ost3ran
+ost3rä
+ost3re
+ost3rot
+ost3uf
+2osu4
+2o3sy
+o3s2ze
+o2ß1el
+o2ß1en2k
+o2ß1enz
+o2ß1ere
+o2ß1erf
+2o1t
+ota2go
+o5tark
+o2t1au
+ot3aug
+o2teb
+o3t2e1i
+otei4n
+ote2l1a
+ote4lei
+ot4em3
+otemp2
+o2t1erw
+ote2s
+4ot2h
+ot4he
+ot5hel
+o4t3hi
+ot3hos
+o2thr
+o2t1i2m
+ot2in
+otli2
+ot4ol
+ot1opf
+ot2or
+oto2ra
+oto1s
+o3tra
+o2t3re
+ot3rin
+ot2sa
+ot3sc
+ots1p
+ot4spa
+ots2pe
+ot2spr
+ot4terk
+ot2th
+ot2t3r
+ot4tri
+o3tü
+o2u
+oub4
+ou2ce
+ou1f4l
+oug2
+ou2ge
+ou3gl
+o3uh
+ou4le.
+o3um
+o3unds
+oun4ge.
+2our
+ouri4
+our4ne.
+ou3s2i
+outu4
+2ouv
+2o1ü
+o1v
+ove3s
+2ovi
+oviso3
+2ovo
+2o1w
+o3wec
+owe2r1
+o3wi
+o1x
+ox2a
+ox2e
+1o2xid
+ox3l
+o2xu
+1oxy
+o1y2en
+o1yo
+oy1s4
+2o1z
+oz2e
+ozen4ta
+o3zi
+ozon1
+órd2
+ö1b
+öbe2la
+öbe4li
+öb2l
+ö2ble
+ö2b3r
+öb2s3
+2ö1c
+öch1l
+ö2chr
+öch2s
+öchs4tu
+öcht4
+ö1d
+ödi3
+öd2st
+ö1e
+1öf
+öf2fl
+öf3l
+ögen2s1
+ög3l
+ög3r
+ö1he
+öh3l2e
+öh3ri
+ö1hu
+ö3ig.
+ö1ke
+ö2ko3
+ök3r
+3öl.
+öl1a2
+öl1ei
+öl1em
+öl4en
+öl2f1ei
+öl1im
+öl1in
+öl2k3l
+öl3la
+öl2nar
+öl1o2
+öls2
+öl3sa
+öl3sz
+ö2l1u
+öl2ung
+ölz2w
+öm2s
+2ön
+ön2e
+ö3ni
+önn2e
+ön2s
+ön3sc
+ön3sp
+ö1nu
+öo1
+ö1pe
+öpf3l
+öp4s3t
+ör3a2
+ör1c
+ör2dr
+ö2r3ec
+ö2r1ei
+ö2r1e2l
+ör2erg
+ö2rerl
+ö3r2erz
+ör2f3l
+ör2gl
+ö2r1im
+ör2kl
+örner2
+ör1o2
+örs2e
+ör3s2k
+ört2e
+ör2tr
+öru4
+ö2r1une
+ö2sa
+ö2scha
+ö4sch3ei
+ö2schl
+ö2sch3m
+ö2schw
+ö2s1ei
+ö2sp
+ös2s1c
+ös2st
+ö2st
+ös3te
+ös2th
+ös3tr
+ö3su
+ö1ß
+2ö1t
+ö2t3a
+öte4n3
+öt2h
+öts2
+öt2sc
+öt2tr
+ö1v
+ö1w
+ö1z
+öze3
+özes4
+p2a
+1pa.
+1paa
+1pac
+pa3da
+pa2dr
+pa2el
+pa1f4r
+pag4
+pa3gh
+pa1ho
+1pak
+pa1k4l
+pak2to
+1pala
+pala3t
+1palä
+pa3li
+2palt
+pa2nar
+pa3nei
+pa2neu
+pan3k4
+2panl
+3pa2no
+pan3sl
+pant2
+3panz4
+1pap
+papi2
+papieren8
+papie8r7end
+3para
+pa2r3af
+par3akt
+1parc
+pa5reg
+pa5rek
+2par2er
+2parg
+pargel6d
+1park.
+par4kam
+par4kau
+par2kl
+par2kr
+1paro
+2parp
+1partn
+1party
+par3z2
+pa3s2p
+pa4st
+2paß
+1pat
+pat4c
+pat4e2
+pa5t4r
+1pau
+p3auf
+pa3uni
+1pä
+3pä2c
+pä3cke
+3päd
+3pär
+3päs
+pä4t1e2h
+pä4t3ent
+pä2t3h
+pä2to
+pät3s4
+2p1b
+2p3c
+2p1d2
+pda4
+p2e
+1pe.
+pe2a
+pea4r
+pech1
+1ped
+pe2en
+pef4
+pei1
+2peic
+pe1im
+pekt4s
+2peku
+1pel
+pe2l3a4
+pel3d
+pe2let
+pe2lex
+pe3li4n
+pe4l3ink
+pell2a
+pell4e
+1pem
+pena4
+pe3n2al
+pen3da
+pe4nen
+1penn
+pe2n1o
+3pensi
+1pensu
+pen3z2
+1pep
+pe1ra
+per2an
+pere2
+1perl
+per4na
+3pero
+pe2rob
+per2r1a
+5pers
+perwa4
+pe3sa
+pes3s2
+pe2st
+3pet
+1pé
+4pf.
+p2fab
+p2fad
+p2faf
+pf3ai
+p2f1ak
+pf1ans
+p2fa4r
+pf3are
+p2f1au
+4p3fe.
+p2fei
+pf1eim
+pf1ein
+p3fen.
+p2fent
+p3fer.
+pf2erw
+p3f2es
+pff4
+p2f1in3s
+p2f3lä
+pf3lei
+pf3lie
+pf3lo
+pf3lu
+p2for
+pf3r
+pf1ra
+2pfs2
+pf3sl
+pf3sz
+2pf3t
+2p1g
+pgra2
+1ph
+4ph.
+ph2a
+2phä
+2phb
+4phd
+2p1hei
+phen3d
+phen3s
+2ph1ers
+2phf
+4phg
+phi2ka
+4phk
+ph2l
+2phm
+2phn
+p3hop
+2phö
+ph4r
+2phs
+ph3t2
+2phthe
+phu4s
+2p1hü
+2phz
+pi2a3
+pias4
+pi3as.
+pi3chl
+p4id2
+piegelei8en
+pi2el
+piela2
+3pier
+3pik
+1pil
+pi3le
+pil4zer
+pin2e
+pingen4
+ping3s
+3pinse
+pi2o
+pi3oi
+pi3onu
+3pip
+pi2pe
+pi3ri
+3pirin
+3pis
+4piso
+pi3t2a
+pi1th
+pit2s
+pi2z1in
+p1j
+2p1k2
+pku2
+pkur1
+1p2l4
+2pl.
+3p4la
+p5la.
+p5lad
+plan3g
+3plä
+2ple.
+ple1c
+p4leg
+p4lem
+3ple5n4
+2plig
+p4lik
+p4liz
+p4lo
+2p3lu
+2p1m2
+2p1n
+1p2o
+po3b4
+po1c
+3pod
+2p3oh
+po2i
+po3id
+3poin
+3pok
+3p4ol
+po2lau
+po3li
+po4lor
+2pond
+po1o2b
+po2p3ak
+po2p3ar
+po1pe
+po2pl
+po3pt
+po1ral
+po1rau
+2porn
+por3s
+por4tin
+por4tre
+por6tri
+pos2e
+po4sta
+pos4t3ag
+po4stä
+po2s3te
+post3ei
+po2sto
+pos6tr
+post3ra
+po3ta
+3pote
+po2t1u
+po2w
+po3x
+pö2bl
+pö2c
+2p1p
+p2p3a2b
+pp3anl
+ppe4ler
+ppe2n1
+p2p1f4
+p2p1h
+p3p2ho
+pp3l
+pp5lan
+pp1lä
+p2ple
+p2p3ra
+p2p3re
+p2pri
+pp3sa
+ppt2
+p2r2
+1prak
+1prax
+p4rä
+1präd
+1präg
+3präm
+3präs
+2pre.
+2prec
+1pred
+pre2e1
+1prei
+3preis
+2p3rer
+3p4res
+pri4e
+2prig
+1prinz
+1p4ro
+3prob
+2proc
+3prod
+3prog
+3proj
+2pross
+pro1st
+3prot
+1prüf
+2prün
+2p1s
+4ps.
+ps4an
+p3se
+p3s2h
+ps1id
+p2sö
+ps2po
+p2st
+p3sta
+p3stea
+p3stel
+p3s2ti
+pst3r
+ps2tu
+p3stü
+3p2sy
+ps2ze
+2p1t
+pt1a
+pt2ab
+pt3alb
+pt3at
+p3te
+p4t3ec
+p4t1ei
+pte4l
+p4tele
+p4t1ent
+pt3erei
+p4t1erw
+p4t1erz
+p2th
+pt1in1
+pto3me
+p4tos
+pto2w
+p2t3r
+pt3s2
+ptt2
+pt1um
+pt1urs
+ptü4
+3p2ty
+pt3z
+1pu
+pu1a
+pub4
+2puc
+pu2dr
+2p1uh
+pul2sp
+2pund
+pun2s
+2punt
+2pur
+pu2s3t
+3put
+put2s
+1püf
+2pül
+pün2
+2p1v
+2p1w
+pwa4r
+3py1
+pys4
+py3t
+2p1z
+qu4
+1queu
+1ra.
+ra2ab
+2r3aac
+r3aal
+ra3ar
+r1ab
+ra2bar
+rab2bl
+2rabd
+r2aber
+2rabf
+2rabg
+1r4abi
+ra2br
+2rabs
+2rabt
+2r3abw
+1raby
+ra1ce
+2r1acet
+ra4cheb
+ra4chin
+racht3r
+rach6trä
+ra2chu
+r2ack
+r2ad
+r4ad.
+rada2
+ra2dam
+2radap
+3radf
+3radl
+r3a2d3r
+rad5t
+1rae
+r2af
+raf3ar
+ra2fer
+ra3ge
+ra3gle
+ra2gn
+3r2ahm
+4raht
+2raic
+rail4l
+2r3air
+1rake
+3ra1k4l
+ra2kre
+ra2kro
+2rakti
+3rakü
+r2al
+r4al.
+ra2la2
+ral3ab
+rala4g
+r3alar
+ral3b
+3r4ald
+ra3le
+2ralg
+r4ali
+rali5er.
+rali5ers
+ralk2
+ral3la
+rall2e
+2rallg
+2r3alm.
+r3alp.
+2ralpe
+r4als
+r3al3t
+r4alt2h
+ra2lu
+3raly
+rama3s
+ra2mer
+1r2ami
+r2amm
+ram4man
+ram6m5ers
+ram4m3u
+ram2p3l
+2r1amt
+ramt4s
+r2an.
+4ranc
+r4anda
+r4ande
+ran4dep
+ran4d3er
+rand3s
+4r3anei
+r4aner
+2ranf
+1rangi
+rani1e
+ran2kr
+2ranl
+2r1anm
+2r1anp
+2ranr
+r2ans.
+r2ansp
+ran4spa
+2rantr
+2r3anw
+r2ap
+2rapf
+r1ar
+r2ara
+2rarb
+3rarei
+rar3f4
+ra2r1in
+r2ark
+r2arp
+2r3arz
+r2as
+r4as.
+ras2a
+ra4schl
+2r3asph
+2raß
+1rat
+r4at.
+ra2t1a
+r3atl
+rat4r
+rat2st
+2r3atta
+4rau.
+3raub.
+4raud
+rau3e2n
+2rauf
+2raug
+3raum
+rau4m3ag
+rau4man
+rau2mi
+3rausc
+2rausg
+rau2sp
+2raus5s
+raut5s
+1raü
+r2ax
+3r2äd
+4räf
+4räg
+2räh
+2räm
+3rän.
+3räni
+3räns
+2r1är
+r2är.
+rä3ra
+rä2s1c
+3rätse
+rä2u
+räu2s
+räu5sche
+4räut
+2r1b
+r2b1ab
+r2b1a2de
+r2bak
+rbal3a
+rba3re
+rb1art
+rb1auf
+rbb2
+rb1ech
+r4belä
+rb1ent
+rbe3r2e
+r3b2la
+rbla2d
+r8blasser
+r4b3last
+r3blä
+r2ble.
+rb3ler
+rb2lin
+rb2lö
+rb2o
+rb4ri
+rb2s
+rb3se
+rb4sei
+rb3ska
+rbs1o
+rb3sp
+rb4stä
+rb3str
+rb2u
+rby4t
+2rc
+r1ce
+r1che.
+r1chen
+r1chi
+rch3l
+rch3m
+rch3r
+rch1s2
+rch3sp
+rchst4r
+rch3ta
+rch6terw
+rch1w
+r1ci
+r2ck1
+r1cl
+r1ç
+2r1d
+r3d2ac
+r2daf
+r2d1ak
+r2d1al
+rd2am
+rdani1
+rd1ant
+rd1anz
+r4dap
+r2dei
+rd2ei.
+r2d1elb
+r3den
+rden3d
+rden4gl
+rde3re
+rder4er
+rderin6s
+r4d3ernt
+rde3sp
+rdi3a2
+rdia4l
+r2d1inn
+rd1it
+rdo2be
+r3don
+rd1os
+r2dö
+rd3rat
+rd4ri
+rdt4
+rd3ta
+rd3th
+rdwa4
+1re
+3re.
+re3aler
+re2alt
+re2am
+re3as
+re3at.
+re3ats
+2reä
+re2b1a
+re2b1l
+reb1r
+reb3ra
+re2bü
+r2ech
+rech3ar
+4rechs
+2reck.
+2recki
+4redd
+2redit
+re1el
+re1er
+3refe
+4reff
+3refl
+3refo
+3reg
+5reg.
+rege4l3ä
+re2hac
+re4h3ent
+re2h1i
+rehl4
+re2h1o
+r2ei.
+rei4bl
+r2eie
+2reig
+3reigew
+rei3l2a
+rei3l2i
+reim2p
+r1ein
+rei3nec
+4reing
+r3eink
+4reinr
+rein8s7tre
+re1in2v
+reister6
+3rek
+4re2ke
+re3la
+2r1elb
+rel2e
+re3lei
+2re2lek
+2r1elf
+re3lo
+2r1elt
+relu2
+r4em.
+r2emi
+4rempf
+4remu
+r4en.
+r2ena
+rena2b
+re3nal
+re2nä
+3rendi
+ren3dr
+re4n3end
+ren4gl
+2rengp
+re2ni
+r1ense
+2r1entl
+2r1ents
+2rentw
+4r3entz
+r2enz
+re3or
+3repe
+3repo
+4repp
+3r4er.
+2r1erb
+r2erbr
+2r1erd
+r1erf
+r1erg
+r4ergen
+r1erk
+4r3erken
+r2erki
+r1erl
+4r3erlau
+2rerlö
+2r1erm
+rer2n
+2r1ernä
+4r3erns
+4r3ernt
+r2ero
+re2rob
+r1erö
+3r2ers.
+2r1ersa
+r2erse
+2rersp
+r1ert
+r2erte
+2rertr
+2r1erz
+rer5ze
+r2erzy
+3r4es.
+re2sa
+3rese
+3reso
+2ress
+ress2e
+res6s5erw
+3rest
+re1sta
+re2s2tu
+3resu
+re2thy
+re2u
+reu3g2
+2reul
+re3uni
+2r1eur
+2reü
+2r3evid
+r1ew
+rewa4r
+re2wi
+2r3e2x1
+3rez
+4rezi
+1ré
+2r1f
+rf1ält
+rf2äu
+r2fent
+rf2es
+rfi4le.
+rf3lic
+rf3lin
+rf4lö
+r3flü
+rfolg4s
+r3for
+rf4ru
+rf4rü
+rf2sa
+rf2s1ä
+rf4s1id
+rf2s3pr
+rf2s3t
+rf2ta
+rf3t4r
+rf2u
+4r1g
+rg2ab
+r2g1a2d
+r2g1ah
+r2g1ak
+rg2an
+rge4an
+rge2bl
+rge4l3er
+rgen4z3w
+rge4ral
+rge4tap
+r2geto
+rgi4sel
+r2glan
+r2gleu
+r2glig
+r2gno
+r2g1ob
+r2g3ral
+r2greg
+r2gres
+r2gret
+rg3rin
+rg3s2p
+rgs4tr
+rg5s2tu
+r1h4
+2rh.
+2rha
+r2ha.
+2rhä
+3r4he.
+3r4hen
+r3her
+r2hoe
+rho2i3
+2rhol
+2rhö
+2rhs
+rhu2s
+1ri
+ri3am
+ria1s
+ri3at
+rib2bl
+ri1ce
+ri1cha
+rid2
+ri2d3an
+2ridol
+r2ie
+rie2fr
+ri1el
+riene4
+rien3s
+rie2nu
+ri1er.
+ri4ere
+ri3ers.
+ri3esti
+ri1eu
+ri2f1a
+ri2f1ei
+ri2fer
+ri2f1o
+ri2fr
+rif3s
+rif4ter
+3rig
+5rig.
+5rige
+ri4gene
+5rigj
+rig1l
+4rigr
+rik1l
+ri4kla
+r2imb
+2rimp
+rim2s
+rim4sc
+r2i3na
+2r1ind
+rin4dex
+rin4diz
+ri3n4e
+rine1i
+2r1inf
+rin2fo
+ring3l
+rin2gr
+2r1inh
+2rinit
+2rink
+3rinn
+6r5innenm
+4r3inner
+4rinnta
+r1innu
+2r1ins
+3r4ins.
+rin4so
+rin2sp
+r4inspi
+2rint
+rin4teg
+rin4t5r
+r1inv
+r2inva
+2rinve
+4r1ir
+r2is
+ris2a
+ri4scho
+ri4schw
+3risik
+ri3so
+ri4s1p
+3riss
+ri2st
+ris6t5ers
+r2it
+r3i2tal
+ri3t2i
+rit4r
+rit2tr
+5ritu
+rix1
+1rí
+2r1j
+2r1k
+rk2am
+r2käh
+r3klau
+r2klis
+rk4lo
+rk2lu
+rk4n
+r2k5nu
+rk3räu
+r2k3rea
+r3kri
+rk3rin
+rk2s1e
+rk3shi
+rk2sp
+rk1st
+rkstati6
+rk4stec
+rk2ta
+rk4t3eng
+rk4t3erf
+rkt3ers
+rk6tersc
+rk4t3erw
+rk2tin
+rk2t1o2
+rk2t3r
+rk3tra
+rk4tri
+rk1uh
+rk2um
+rku2n
+rk1uni
+4r1l
+r3l2a
+rl2e
+rle2a
+r3lec
+rle2i
+r3let
+r3l2i
+rli2s
+r3l2o
+rl2ö
+rlös3s
+rl2s1p
+rl3ste
+rl2s3to
+rl3t
+4r1m
+r3m2ag
+rma2la
+r2m1ald
+rm1ans
+rm1anz
+rm1a2p
+r2maph
+rm2är
+rm3d2
+r3me.
+r2m1ef
+r2meo
+rm2es
+r2mide
+r2m1im
+r2m1o2ri
+rmo1s
+rm3sa
+rm3sta
+rmt2a
+rm2u
+rm3ums
+4rn
+rna2b
+rna4n
+rn2and
+rn3ani
+r2n1anz
+rn2a2r
+rn3are
+rn3ari
+r2nau
+rnd4
+rn3dr
+r3ne
+rn3e4ben
+r4nef
+rn2ei
+rn3eif
+r4n3eis
+rne2n
+r4n1ene
+rn3ense
+r4nerf
+r4n1erg
+rn4erhi
+r4nerk
+r4n1ert
+r5nes
+rn2et
+r4nex
+rn3f
+rng2
+r3ni
+r4n1in
+r3nod
+r2n1op
+r2n1or
+rn1ö
+r1nöt
+rn3s2ä
+rn3s2p
+rn3s2z
+rn3t2e
+r1nu
+rn1ur
+r1nü
+r1ny
+ro2bei
+2robj
+3robo
+2robs
+ro1c
+3rock.
+r2o3de
+ro3e4
+2rof
+roh1l
+roh3na
+3r2ohr
+3roi
+ro1ir
+ro3le
+rol4lan
+rol3l4en
+rol3s
+2roly
+4rom.
+ro2mad
+ro2mer
+4romm
+4romt
+r2on
+3ronn
+rons2
+ron4tan
+ro1ny
+ro1pe
+ro3ph
+r1or
+r2ora
+ror3al
+ro2rat
+ro2rei
+ro2r1o
+ror3th
+ro3sh
+ro3s2i
+ro3smo
+ros2p
+ros2s1c
+ro3st2a
+rost1r
+4roß
+ro2ßu
+ro4tag
+rote3i
+ro2tho
+ro4tri
+rots2o
+rot2ta
+ro3t2u
+ro3unt
+3rout
+2rox
+rö2b3l
+rö2du
+2röf
+4rög
+1r2öh
+r1ök
+1r2öl
+3römi
+4röp
+r1ör
+r2ös.
+r2öse
+2r1p2
+rp4a
+rp4e
+rpe2re
+rpe4r3in
+rpf4
+r2pli
+r3po
+rpro1
+rps3t
+rp3t
+r3pu
+r1q
+2r1r
+rr2ab
+rr2ar
+rr1äm
+rrb2
+rr1c
+r3r2e
+rre4ale
+rrer4s
+rre2st
+r4rew
+rr2he
+rrik2
+rr2n3a
+rr2o
+r2r3ob
+rro3m
+rr2st
+rr3stu
+rr2th
+r3ru
+r3r2ü
+rrü1b
+4r1s
+rs3ab
+r2s1a2d
+r4samp
+r4s1amt
+rs2an
+r2s3ang
+rs3anp
+rs3ant
+rs3ar
+r3sch2e
+r6scherl
+rsch2l
+r3schu
+r3schw
+r2sein
+rse2n1
+rs2end
+rse4ne
+rs1ere
+rs1erö
+rs1ers
+rs1erz
+rs1eta
+r3sho
+r3si
+rs2kal
+rs2kan
+rs2kie
+rs2kis
+rs2kl
+r4sko
+r4skr
+r4sku
+rs3l
+rs4no
+r3so
+r4sob
+r4s1op
+r4sord
+r4s3ort.
+rs2p4
+r2s3ph
+rs3s2
+r4stant
+rs2tec
+r6st5eing
+rs4temp
+rs4terb
+rs4t3er4w
+rs2th
+rs2ti
+r3stie
+r2stin
+rst3ing
+r2stip
+r3sto
+rs4tob
+r4stot
+r3stö
+r3s4tr
+rst3ran
+r6strang
+rs2tu
+r3s4tü
+r3swi
+r3sy
+4r1t
+rtal2
+r2t1alm
+rtals1
+rt1am
+rt1ang
+rt1ann
+rt1ant
+rt1anz
+r2t1ar
+rt3a4re
+r2t3att
+rt1är
+rte1e2
+rt4eif
+rtei3la
+rtei1s4
+r2telf
+r2temo
+rte2n1
+rten3s2
+rt3erei
+r4terfo
+r4t3erh
+r2t1erk
+r4t3er4la
+r4t3erle
+r4t3ernä
+rter4re
+rt1ers
+rte3s2k
+r2thi
+rt3hol
+rt2hum
+r2t1id
+r2t1ima
+r2tinf
+rto1p
+rt1or
+rto2ri
+r3tö
+r4trak
+rt3rec
+r4treis
+r5tri
+rt1ros
+rtrü2c
+r4ts
+rt4s1eh
+rt2so
+rt2spa
+rt2spr
+rtt4
+r2t1urt
+r3tü
+rt3z
+1ru
+ru1a
+ru3a2r3
+rube2
+ruch3st
+ru6ckerl
+ru2cku
+rude2a
+ru2dr
+3ruf
+ru2fa
+ruf2s3
+4rug
+2r1uhr
+3ruin
+ru1ins
+ru1is
+2rum
+4rumf
+ru2mi
+4ruml
+r2ums.
+4rumz
+2r1una
+2rund
+run2d1a
+r2unde
+rund3er
+run6derl
+run6ders
+run6derw
+2r1unf
+2rungl
+2r1u2ni
+4r3unio
+run2kr
+2r1unl
+2r1unm
+4runn
+4r3unt
+2runw
+ru3pr
+4r3ur
+ru2ra
+ru2r1e
+5ruro
+ru2si
+rus2s1p
+rus4st
+ru2st
+ru3sta
+3rut
+rut3h
+ru2t1o2
+ru2t3r
+4ruz
+ru2zw
+1rü
+2rüb
+rü1ben
+rü1ch
+4rümm
+2r1v
+rve4n1e
+2r1w
+rwun3s
+4r1x
+1ry
+ry2c
+2r1z
+rz1a2c
+rz2an
+r2zar
+r2zas
+r5zene
+rz1eng
+r4z3ents
+r2z1erf
+r2z1erg
+r2z1erk
+r2z1erw
+rz1id
+r3z2of
+rz1op
+rz2ö
+rz3te
+rz2th
+rz2t3ro
+rzug2u
+r3zwä
+r3z2wec
+1sa
+3sa.
+3saa
+2s1ab
+sa2be
+3sabet
+sa2bl
+sa3ble
+sa2br
+4sabs
+sa2cho2
+sach3t
+2s1ada
+s1adm
+2s1a2dr
+3safa
+sa2fe
+2s3aff
+3safi
+sa1f4r
+3saga
+sa4gent
+sag4n
+sa2gr
+3sai
+sa3i2k1
+sail4
+2s1ak
+sa2ka
+3saki
+3sakr
+4sakt
+3s2al.
+sa4l3erb
+sa2l1id
+3salo
+sal2se
+2s1alt
+3s2alz
+3sam
+s3ameri
+5samm
+6s1amma
+4s1amn
+s1amp
+sam2to
+s1an
+s2an.
+2s3a2na
+s3anb
+s2an2c
+s2and
+s4and.
+san4dri
+3sang.
+2s3anh
+3sani
+2s3anl
+2s3ans
+san4sk
+4s3antr
+2s3anw
+2s1ap
+sa2po
+3sapr
+2s1ar
+3s4ar.
+3s2ara
+4s3arb
+3s2ard
+3sari
+s3arr
+3s2ars
+4sarti
+s1asp
+4s3a2sy
+3sat
+sat2a
+4s3ath
+4s3atl
+4satm
+sa2tr
+sa3ts
+sat4z3en
+s1a4u
+3sau.
+3sauc
+3saue
+2s3aufb
+sau2gr
+3saum
+3saur
+sauri1
+2s3ausb
+3s2ause
+s3ausw
+2s3av
+sa2vo
+1sä
+s3ähn
+3säl
+s1ält
+2s1äm
+2s1änd
+3sänge
+2s1är
+3s2ät
+3säul
+2säuß
+4s3b4
+sba4n
+sbe3r2e
+1sc
+2sc.
+2scam
+s2can
+s2cap
+2scar
+2s1ce
+6sch.
+2schak
+s4ch2al
+4schanc
+4schang
+2schao
+s4chä
+4schb
+4schc
+2schd
+3sche.
+2schef
+sch3ei.
+4schemp
+sch2en
+3sches
+4schess
+4schex
+2schf
+2schg
+2schh
+schi4e
+s4chim
+4schiru
+3schis
+2schk
+s4chl
+4schle.
+6schlein
+sch6lit
+2schmö
+2schn.
+2schox
+s4chö
+2schp
+2schq
+4schre.
+4schrin
+sch3rom
+4schrou
+6schs
+schs2e
+sch3s2k
+4sch3t
+scht2a
+scht4r
+s4chu
+4schunt
+sch2up
+3schü
+2schv
+4schwet
+sch4wil
+2schz
+2scj
+4s3cl
+2sco
+3s4cop
+3sco4r
+s2cr
+2scs
+2scu
+4s3d2
+sda3me
+sde1s
+sdien4e
+sd4r
+1se
+se3at.
+2s1e2ben
+seb4r
+2s1echo
+s1echt
+2s1e2ck
+3see
+se1ec
+se2e1i4
+see3ig
+seein2
+se1er.
+se1erö
+2s1eff
+se2gal
+se2gl
+seg4r
+3seh
+se2h1a4
+se3he
+se4h1ei
+se4hel
+se4herk
+se2hin
+seh1l
+seh3re
+seh1s
+seh3t
+se2hüb
+2s1ei.
+2s1eig
+s1ein
+5s4ein.
+2seinb
+sein4du
+sei3n2e
+sein4fo
+4seing
+2seinh
+4seink
+2seinl
+2seinn
+4seinr
+s4eins.
+4seinsp
+4seinst
+2seinw
+4s1eis
+3s2eit
+3s2ek
+s2el.
+se2l1a
+se3lad
+sela4g
+se3lam
+sel1ec
+4selem
+se4l3erl
+sel3ers
+2self.
+s3elix
+se2l3ö
+s2els
+sel3sz
+sel3tr
+s4e3ma
+2s1emp
+3s2en.
+se4nag
+se2nä
+2s1endl
+sen3gl
+3s2eni
+3senk
+se2no
+se4nob
+3s2ens
+s2ent.
+4s1entf
+2s3entg
+s2enti
+2s1ents
+2sentw
+2sentz
+se2n3u
+seo2r
+4s1e2pos
+3seq
+s4er.
+3sera
+ser3a2d
+se2r3al
+se5ref
+s3ereig
+6sereign
+se4r3eim
+se4r3enk
+ser2er
+2s1erfo
+s2erfr
+s3erfü
+4serfül
+ser3g
+s2ergr
+s1erh
+2serhö
+3seri
+4serken
+2s3ernt
+se2rob
+4s3eröf
+s2ers.
+2sersa
+4serseh
+s4ert.
+s2erta
+seru2
+se4r1uf
+se3rum
+se3rund
+3s4erv
+5ses.
+se2sel
+se1sta
+se3su
+3set
+4se4tap
+se2tat
+4s1e2th
+se1u2n
+2s1ex
+se2xe
+4sexp
+sex3t
+1sé
+4s3f4
+sfal6l5er
+sflo4
+4s3g2
+2s1h
+sh2a
+3s2ha.
+sha2k
+4s3han
+1shas
+s3hä
+s3h2e
+3shi.
+3shid
+shi4r
+sh3n
+s3hoc
+4shof
+3shop
+sho4re
+3show
+s3hö
+sh4r
+1si
+si2ach
+si3ach.
+si2ad
+si3am.
+2siat
+sib4
+5si1c
+2s1i2deo
+s2ido
+3s4ie
+siege4s
+sien3
+si3ene
+si1err
+sie2s
+si1f4
+3s4ig
+si2g1a2
+sig4n
+si3gnu
+si2g3r
+sig4st
+si2k1ab
+si2k1ä
+sik3erl
+si2ki
+si4k1l
+si2kr
+sik3s
+sik3t4
+si2ku
+3silo
+2s1imm
+si3n4a
+2s1ind
+2s1inf
+sing1a
+sin3gh
+sin3g4l
+sin2gr
+sing3sa
+4s1inh
+sin1i
+sini1e
+2s1inq
+2s1ins
+2s1int
+4s1inv
+3sio
+sion4
+3s2is
+si2sa
+si4schu
+si2s1e
+si2s1o
+si2s1p
+sis3s
+3s2it
+si2tau
+sit3r
+si2tra
+si3tu
+siv1a
+sive3
+si2vr
+1sí
+2s1j
+2s1k2
+4sk.
+3skala
+4skam
+4skanz
+s3kar
+4skas
+ska4te.
+4skateg
+ska4tes
+4skb
+s4kep
+3s2ki.
+s2kif
+s2kig
+3s2kik
+4skir
+ski1s
+3skiz
+sk4l
+4s3klas
+sk4n
+4skom
+4skor
+4skow
+4skö
+4sks
+4sk3t
+3skulp
+2s1l2
+3slal
+4slan
+s2law
+s3lä
+sl3b
+s3le
+sler3s
+s3li
+3s4lip
+sli4tu
+s3lo.
+slo3be
+s3loe
+2s3m2
+2s3n4
+4sna
+snab4
+sni3er.
+sni3ers
+4s5not
+4snö
+1so
+3so.
+so4a
+2s1o2b
+so1c
+so3et
+3soft
+3sog
+s1o2he
+4sohng
+2s1ohr
+3sol
+so3la
+so4l1ei
+sol4ler
+4so2ly
+3som
+3s2on
+son3au
+sone2
+son5ende
+son3sä
+so2ny
+so3o
+2sopf
+3sor.
+so1ral
+s1orc
+2s3ord
+so2rei
+2s1orga
+5s2orge
+2s1o2rie
+so2r1o2
+3sors
+so4ru
+3sos
+s4os.
+4s1ost
+so3unt
+3sov
+4s1o2ve
+3sow
+2s1ox
+3soz
+1sö
+sö2c
+sö2f
+2s1ök
+2s1ö2l
+s1ös
+1sp2
+2sp.
+2spaa
+2spak
+s2pan
+spani7er.
+2spap
+2spara
+2sparo
+3sparu
+3spaß
+2spau
+s2paz
+s2pä
+3späh
+2spär
+s2pee
+2spel
+4spensi
+spe3p4
+2s1peri
+2sperl
+s2perr
+2spers
+2spet
+3s2pez
+4s3pf
+2spha
+s3phe
+2sphi
+3s2pi4e
+4spier4
+spi2k
+4spil
+3spio
+4spip
+4spis
+2spl
+4spla
+4splä
+3s2pli
+s3p4lu
+s3pn
+2spod
+2spog
+s2poi
+2spok
+4spol
+4s3pos
+s2pott
+4spr.
+s2prac
+s2pran
+2sprax
+2spräm
+4spräs
+3s4prec
+2spred
+2spres
+2sprob
+3spross
+3spru
+2sprüf
+2s3ps
+2spt
+2spun
+2spup
+3spur
+4sput
+4spy
+2s1q
+4s3r4
+srat2s
+srat4sc
+sret3
+srö2s1
+srücker6
+srü2d
+6s1s
+ssa3bo
+ss1a2ck
+s5saf
+s3sag
+ss1aj
+s3sal
+s4s1ala
+s4s1alb
+s4s3amt
+s4s3ang
+s2sano
+s4sans
+ss2ant
+s4s3anz
+s3sa1s2
+ss3att
+s3s2ä
+s4sce
+s4sco
+ss1ec
+s2s1ega
+sse3ha
+sse3inf
+sse3in4t
+sse6r5att
+ss1erö
+ss3erse
+s3s2es
+sse3ta
+ss3l
+ss1off
+ssoi4
+s2s1op
+ss1ori
+ss2po
+s2spro
+ssquet4
+ss3s4
+sst2a
+s3stel
+ss2th
+ss2ti
+ss4tip
+ss2tur
+s3stü
+ss1ums
+s1t
+6st.
+s2ta
+4sta.
+3staa
+2stabb
+st2ac
+3s4tad
+3staff
+2stag
+3stah
+2stak
+2stale
+s3ta3li
+2stalk
+st1alp
+st1ami
+4stan.
+sta4na
+3stand
+2stani
+4s3tann
+2stans
+2stanw
+s4tar.
+4stari
+s4t2ars
+s3tat.
+s4tau.
+2stauf
+2staum
+3staur
+2staus
+3staus.
+2stax
+3s2tä
+4stäg
+4stält
+s4tänd
+5stätt
+s3täus
+2stb
+2st3c
+2std
+st2e
+4s5te.
+2stea
+4stechn
+s2ted
+4stee
+3s2teg
+ste2gr
+3s4teh
+s2te2i
+3steig
+4steil
+3steilh
+stei4na
+1s2tel
+2stel.
+stel4l3ä
+2steln
+2stels
+2stem
+4stem.
+ste4mar
+4sten
+s5ten.
+s4t3ends
+s4t3engl
+st4ens
+s4t3entf
+s2tep
+2ster
+6s5ter.
+ste6rers
+4sterm
+3sternc
+4stes
+s4t3ese
+stes6se.
+ste4st
+2stet
+s4teti
+3s4tett
+3s2teu
+1steue
+4steuf
+st3ev
+4stex
+2stf
+2stg
+4sth
+s4thä
+s4thi
+s2t3ho
+s2thu
+2stia
+2stib
+s2tic
+sti2e
+2stie.
+s2tieg
+s2tiel
+2stien
+3s2tif
+2stig
+2stik
+s2til
+3s4tim
+s4tinf
+s3tinn
+st1ins
+2stio
+1s2ti2r
+2stis
+st1i4so
+1stitu
+2stiv
+2stj
+2stk
+4stl
+4stm
+2stn
+s2to
+2sto.
+s3tob
+2sto3d
+4stod.
+1stof
+s4toff
+s4t3om
+4ston
+4stoo
+2stopo
+2stor.
+2store
+2storg
+2stori
+s3tort
+2stose
+sto3s2t
+1stoß
+4stote
+4stou
+2stow
+2stoz
+1stö
+2stöch
+2stöt
+2stp
+2stq
+s2tr
+2strad
+2strag
+1s4trah
+4strai
+4strak
+2stral
+4strans
+3s4tras
+5straß
+4straum
+4s5träg
+4sträne
+4s5tref
+4streib
+5st4reif
+st3renn
+2s4trig
+1s4tri2k
+2s5tris
+st3roll
+stro4ma
+1stru
+2strua
+2strug
+3struk
+4st3run
+2strup
+2s4t3s4
+2st3t4
+st2u
+1stub
+4stuc
+3s4tud
+2stue
+3stuf
+3stuh
+2stum2s
+stum4sc
+2stumt
+stu2n
+2stun.
+3s4tund
+s2t3uni
+4stunn
+2s3tuns
+2stunt
+stu3re
+st3url
+2sturn
+2st3urt
+2s3tus
+1stü
+2stüch
+2stür.
+2stüre
+2stürg
+2stürs
+3stüt
+2stv
+2stw
+3s2tyl
+4st3z
+1su
+su1an
+3su2b3
+su4ba2
+4subi
+3su1c
+su2cha
+such4st
+2s1u2f
+2s1uh
+su1is
+su1it.
+sul2a
+sul2i
+sult2
+su2mar
+su2mau
+3s2ume
+su2mel
+su6m5ents
+s3umfe
+3summ
+sum1o2
+su2mor
+s3umsa
+s3umst
+su2n
+3sun.
+sun6derh
+su4ne
+s1unf
+2s1uni
+4sunt
+3s2up
+sup3p
+su2ra
+2s1url
+s1urt
+s4u2s1
+su3sa
+su3sh
+su3si
+sus3s
+3suv
+1sü
+2sü4b
+3süc
+sü2d1
+süden2
+3sün
+4s3v
+2s1w
+s3wa
+s3we
+sweh2
+4swie
+4swil
+1s4y
+syl1
+sy4n3
+2s1z
+4s3za
+4s3zei
+s2zena
+3s4zene
+4szent
+s2zes
+4s3zet
+s2zis
+sz2o
+4s3zu
+s3zü
+4s3zw
+2ß1a2
+2ß1b2
+2ß1c
+2ß1d
+1ße
+2ß1ec
+2ß1e2g
+2ß1ei
+ße2l1a
+ßen3g
+ße2ni
+ße2no
+ße2ro
+ß2ers.
+2ßerse
+ßer3t
+2ß1f
+2ß3g2
+ßge2bl
+2ß1h
+1ßi
+ßi2g1a2
+ßig4s
+2ß1in
+ß1j
+2ß1k4
+2ß1l
+ßler3
+2ß1m
+2ß1n2
+ß1o2
+ßos2
+2ß1p2
+2ß3r2
+2ß1s2
+ßst2
+2ß1t
+1ßu
+2ß1um
+2ß1ü
+2ß1v
+2ß1w
+2ß1z
+1ta
+3ta.
+4taa
+5taan
+4tab.
+ta2b1an
+2t1abb
+3tabel
+2taben
+ta4bend
+2tabf
+2tabg
+2tabh
+2tabk
+3table
+2t3abn
+ta2br
+4tabs
+2t3abt
+ta2bü
+2tabw
+2tabz
+2t1ac
+3tacu
+t1ada
+tadi3
+2t1a2dr
+ta3d2s
+3taf.
+3taf2e
+4taff
+t1afg
+t1af4r
+3t2ag
+ta2ga2
+ta2g1ei
+4t3a4gent
+4ta3gl
+t3ago
+tag4st
+tah2
+tah3le
+tahl3sk
+ta3i2k
+tai2l
+ta1ins
+tai4r
+ta1ir.
+t1a2ka
+ta2kro
+tak6ta
+3taktb
+3t2aktu
+2takz
+3t2al.
+ta2la
+ta3lag
+ta3lak
+tal3d
+3t4ale
+ta4lens
+tal2lö
+3talo
+ta2l1op
+2talt
+2tam
+3tame
+ta2mer
+ta2mi
+t1ampl
+t1amt
+3tan.
+t1a2na
+2tanb
+4t2and
+ta3ne
+4tanf
+2tang
+3tani
+t2ank
+t3ankl
+4tanl
+2t1anme
+4t1anna
+t2ano
+t1ans
+3t2ans.
+4t3ansi
+4t3ansp
+ta2nu
+2tanwa
+2tanwä
+t2anz.
+t1anza
+tan6zerh
+t1anzu
+ta3or
+ta2pe.
+ta2pes
+2tapf
+ta2pl
+2tarb
+ta4rens
+ta4r3ere
+3t4a3ri
+4tark
+2t1arm
+2tart
+t1arti
+tar2to
+ta2ru
+2t1arz
+3tas
+ta3sa
+4t1asp
+ta2ta2b
+ta2tan
+ta2tau
+tat3ei
+ta2tem
+ta2t3er
+ta2th
+tat3he
+t3atl
+t4atm
+ta2tom
+4tatue
+ta2t1um
+2t1auf
+4taufg
+tau3f4li
+4taufn
+t1auk
+3taum
+t1ausb
+3tausc
+tau6schr
+tau6schw
+t2ause
+4t3ausg
+t1ausk
+4tausl
+4t3auss
+4t1ausw
+3tav
+3tax
+taxi1s
+1tä
+4täb
+tä1c
+4täd
+3täe
+3täg
+4tägy
+2täh
+2t1ält
+4täm
+t1ämt
+t1ängs
+3tänz
+t1äp
+t2är.
+tä2ru
+tä2s
+t2ät
+4tätt
+2täuß
+2täx
+1tà
+4t3b2
+tbe3r2e
+tblock5e
+tblocken8
+4t1c
+t3cha
+t3che
+tch2i
+tch3l
+t2chu
+tch1w
+t4ck
+t3cl
+t3cr
+4t3d4
+tdun2
+1te
+3te.
+te2a2
+2teak
+te3al
+te3an
+3teba
+3t4ebb
+4t1e2ben
+t2ech
+te3cha
+3techn
+2teck
+teck2e
+te2cki
+te1em
+te2en3
+te1erw
+te2es
+2teff
+teg3re
+2teh
+3teha
+3tehä
+3t2ei.
+t2eie
+t3eifr
+teik4
+3teil
+4teilhe
+2t1ein
+tein3e4c
+t3einge
+t3einla
+4teinn
+t3eis.
+t3eisb
+5tel.
+3tela
+te2l3ab
+te2l1ac
+te2l1au
+telb4
+3te3le
+tel1eb
+tele4be
+te4l1ec
+te4l1eh
+te4lein
+2telem
+tel1en
+te4lerd
+te4leu
+4t3elf.
+3telg
+te2l1in
+te2lit
+3telk
+tell2e
+5teln
+te4lost
+te2l1ö
+3telp
+5tels
+tel3s2k
+3telt4
+tel3ta
+tel3th
+3tem.
+te2m1ei
+te2min
+2temme
+te2m1o2r
+3temper
+2tempf
+tem3s
+te4m1u
+3ten
+t6en.
+ten3a
+tena2b
+te4na2d
+te4na4g
+te4nas
+te4nau
+te2nä
+t4enb
+ten3da
+4t3endf
+t6endi
+4t1endl
+t6endo
+4t3endp
+ten3d4r
+te2n1e2b
+te2nef
+te3n4ei.
+ten3eid
+ten3ens
+4tenerg
+te2net
+ten3g
+4t1eng.
+ten4gla
+t4enh
+te2ni
+te4n3in
+t4enj
+t4enm
+ten3n
+tens2e
+4tensem
+t4enta
+t3entb
+4tentd
+t4ente
+4tentn
+tent3ri
+4t3entw
+4t3entz
+ten6zerh
+ten3zw
+t3e2pi
+3t4er.
+tera2b
+te1raf
+ter3am
+te3ran.
+4terbs
+4terbt
+3terc
+4t3erde.
+te2re2b
+te4r3eif
+te2rel
+ter3end
+te4reng
+te4rerk
+terer4z
+4terfol
+t4erfr
+4terfül
+3ter3g2
+6tergrei
+t6ergru
+t4eri
+te3ria
+4terklä
+2t1erlö
+ter4mer
+3termi
+ter4n3ar
+2ternc
+t3erneu
+t4ero
+t3erö
+ter4re.
+t4ers.
+t6erscha
+ter4ser
+terst4
+t4erst.
+t4ersti
+t4erstu
+tert2
+teru2
+te4r1uf
+ter4wäh
+6terwerb
+ter3za
+2t3erzb
+3tes
+tesa2c
+te2san
+tesä2c
+te2sel
+te2spr
+tes3s2
+t2est
+tes3tan
+test3ei
+tes6ter6g
+tes6terk
+testes4
+te2su
+3tet2
+t2et.
+te2tat
+4teth
+4tetl
+teu3ere
+teu3eri
+3teuf
+3teum
+te1un
+3teur.
+teu2r3a
+te2vi
+te1xa
+2t3e2xe
+2t1e2xi
+4texp
+3text
+2t1exz
+4t1f4
+tfi2l
+4t1g2
+tger2
+t1h
+4th.
+2th4a
+3t4ha.
+t2hag
+t3hai
+t2hak
+3thal.
+4t3hau
+2t3hä
+th2e
+1t2he.
+3thea
+2theb
+t2hec
+2t3hei
+t4hein
+t2hek
+t2hem
+1then
+t4hene
+t4heni
+3theo
+2therr
+t2hes
+3these
+t2heu
+1thi
+t2hik
+2t3hil
+2t3him
+2thk
+4th3l
+4th3m
+2th3n
+1t2ho
+2t3hoc
+t3hof
+2t3hoh
+t4hol.
+t3hor
+2t3hot
+thou2
+4t3hö
+2thp
+1th2r2
+4thrin.
+4thrins
+2ths
+2thub
+4thun
+2thü
+2thv
+t2hy
+1ti
+ti2ad
+ti3a2m
+3tib4
+ti1ce
+tiden2
+ti4dend
+ti2deo
+3tief.
+tieg4
+2tieh
+ti1el
+ti3e4n3
+3ti2er
+tie4rec
+ti1et
+ti1eu
+3tif.
+ti1fr
+4tift
+3tig
+ti4gerz
+3tik
+ti2kam
+ti2kar
+ti3k2er
+ti2kin
+ti2krä
+ti2lar
+ti2lau
+ti2lei
+ti2lel
+3tilg
+ti2lö
+til3s
+tilt4
+ti2lu
+ti2ma2g
+t2imi
+tim2m1a
+4t1imp
+3t2in.
+ti3na
+t1inb
+4t1ind
+ti3n2e
+t1inf
+tin2g1a
+ting3l
+ting3s
+t1in1it
+2t1inj
+tin2k1l
+3t2ins.
+4t1inse
+2t1int
+ti1nu
+4t1inv
+3tio
+ti3or
+3tip
+ti3pl
+ti4que.
+ti1rh
+3tis
+ti4scha
+tisch3w
+ti2sei
+ti2sp
+ti1sta
+3ti3t2e
+2ti3tu
+tium2
+3tiv
+ti2van
+tive3
+ti2vel
+ti4v3erl
+ti2v1o
+ti2v3r
+ti2za
+2t1j
+4t3k4
+4t3l
+tl4e
+tle2r3a
+6t5li
+tlung4
+4t3m2
+tmal2
+tmen6t3
+tmo4des
+4t5n4
+tnes2
+tnes4s
+1to
+3to.
+to4as
+to5at
+4tobj
+tob2l
+to1c
+3tocht
+to6ckent
+3tod
+tode2
+4to2d1er
+to4d1u
+toi4r
+3tok
+to3la
+3tole
+4tolz
+tom1e2
+to2men
+2tomg
+3ton
+to2nau
+3too
+to2pak
+to2pat
+3topo
+2topt
+3tor.
+to1ra
+to2rau
+to4rän
+4torc
+t1ord
+3tore
+to2rel
+to3ren
+t1org
+t3orga
+3torin
+tor3int
+to2rö
+3tors
+t1ort.
+to2ru
+t2orw
+to3sc
+3tose
+to4sk
+tos2p
+4toss
+3tost4
+to1sta
+4toß
+3to3te
+to2tho
+3totr
+tots2
+3t4ou
+touil4
+to3un
+3tow
+2tö
+3töch
+4töf
+4t1ök
+tö4l
+3tön
+t1öst
+4töß
+3töt
+4t3p2
+tpf4
+2t1q
+1t2r4
+2tr.
+5tra.
+3trac
+tra3cha
+4tract
+t3rad.
+tra4dem
+tra4far
+3trag
+6trahm
+5t4rai
+3trak
+3tral
+3t4ran.
+2trand
+3trank
+t3rann
+3trans
+t3rase
+t3rasi
+4traß
+5träc
+3träg
+3träne
+4träs
+4träß
+4t5re.
+tre4ale
+4treb
+tre2br
+4trec
+t3rech
+t4reck
+6t3red
+5t4ree
+3tref
+4trefe
+4trefo
+4treg
+t4rei.
+3t4reib
+4treic
+2treif
+t3reig
+2t3reih
+t3rein
+t3reis
+6treit
+t3reiz
+2trek
+6t3rel
+t4rem
+t4ren.
+3trend
+4trendi
+t3rent
+2trepe
+2trepo
+t4repr
+t4rer
+t4res.
+t4ret
+tre2t3r
+t4reu
+3treuh
+t3rev
+2trez
+5t4ré
+2t3rh
+3tri
+4tric
+2trid
+5trieb
+tri4er
+5trigg
+t3rind
+4tring
+tri3ni
+4trinn
+t4rip
+4tript
+tri2x
+trizi1
+3tro.
+3troe
+3t4roi
+tro2ke
+4trom.
+tro2mi
+4troml
+3tron
+2t3roo
+t4rop
+3tropf
+3troy
+t3röc
+2tröh
+3trös
+2t3röt
+3trua
+4truk
+trum2
+trums1
+2trund
+3t4runk
+5t4rup
+tru2th
+t4rüb
+trü1be
+trü1bu
+2t3rüc
+trücker6
+t4rüg
+try1
+2ts
+4ts.
+t4sa4b
+t3s2ac
+ts1ad
+t2s1ah
+ts1al
+t4s1amt4
+t2san
+t4s3ar
+ts1as
+t2sau
+t2s1än
+t3s2cha
+t4schar
+t3sch2e
+t4schef
+ts4chem
+tsch4li
+t4schro
+ts4cor
+t2s1e2b
+t3seil
+t4seind
+ts1em
+tse2n1
+t2s1eng
+t2s1ent
+t2s1er
+t4s3esse
+t2s1i2d
+ts1ini
+t2s1ir
+ts3kr
+t1slal
+ts1o
+tso2r
+t3sou
+t2sö
+t3spal
+ts1par
+ts4pare
+t2spä
+ts2ped
+t3spek
+t2sph
+t3s2pi
+t2spo
+t3s2pon
+t3s2por
+t4sprei
+ts3s4
+t1st4
+t4stag
+ts3tak
+ts4tal
+ts3täti
+t2s3tep
+t3s4tero
+t2stip
+t4stit
+ts3toc
+ts3tor
+ts3trad
+t4stran
+ts3trau
+t2s3trä
+t4streu
+t2stri
+t4strop
+t2s3trü
+ts2tu
+t2s1u
+1tsub
+t3sy
+4t1t
+tt1ab
+tta2be
+tt2ac
+t2t1ad
+tta6gess
+tt1ak
+tt2al
+tt2ant
+tt1art
+tta1s
+tt1ebe
+tt1eif
+tt1eis
+t3tel
+tte2la
+tte4leb
+tte4len
+ttel1o
+ttes1
+tte2sa
+tte2sä
+t4teti
+tt2häu
+t2t3ho
+t3ti
+t3to
+tto1s
+t3tö
+t3tro
+tt3ru
+tt3rü
+tt2sen
+tt2sor
+tts1p
+tt2spe
+tt2spr
+tt2sti
+ttt4
+t3tu
+tt2un
+t3tü
+1tu
+tu1alm
+tu3an
+2tub
+3tuc
+tu2chi
+2tud
+3tue
+4tuf
+tuf2e
+tu3fen
+t3u2fer
+tuff3
+2tuh
+2tuk
+t3u2kr
+tul2a
+t2um.
+3t2ume
+2t3umf
+2t3umg
+2t3umk
+2t3umr
+tum2si
+tum2so
+tums5tr
+2t3umt
+2t3umz
+3tun.
+2t1una
+2t1und
+3tune
+2t3unf
+3tung
+t3unga
+tung4s5
+2tunif
+2t1u2nio
+2t3unt
+t1up.
+tu2r1a4g
+tu2rä
+tur1c
+tu2re.
+tu2rei
+tu2r1er
+tu2res
+tu2r1e4t
+turin1
+3turn
+tu2ro
+tu4ru
+tu2sa
+tu4schl
+tu2so
+tu3ta
+2tü
+4tüb
+3tüch
+tück2s
+3tüf
+3tüm
+3tür.
+tür1c
+3türe
+3türg
+3tür3s
+3tüten
+4tütz
+4t3v
+4t3w
+twa2
+twi4e
+1ty1
+3typ
+ty2pa
+tys4
+4t1z
+t2za4
+tz1ag
+tz1al
+tz1ar
+tz1au
+tz1ä
+t3ze.
+t2z1e2c
+t2z1eie
+t2z1eis
+tze4n1
+tz2ene
+tz3ents
+tz1erl
+tz2ers
+t3ze2s
+tzgel2
+tz1ind
+tz1int
+t2zor
+tz2ö
+tz2th
+tz2tin
+tz1wä
+tz1wi
+tz1wu
+2ua
+u1a2b
+u1a2c
+uad4r
+u1al.
+ua2lau
+u1alb
+u3alet
+u1alf
+u3a2lo
+u1alr
+u1als
+u1alt
+ua2lu
+u1am
+u1ans
+u3ar.
+uara2b
+u1ars
+ua3sa
+ua2th
+uat2i
+u3au
+u1ay
+u1äm
+u1äu
+2u1b
+u2be2c
+u3b4i
+ubi3os.
+ub2l
+ub3lic
+u2b3lu
+u2bop
+ub1r
+ub3rä
+u2b3rit
+ub2san
+ub2s1o
+ub2spa
+u2büb
+2uc
+uc1c
+u1ce
+uch1a
+u1cha.
+uch1ä
+u1che
+u2ch1e4c
+uch1ei
+u3ches
+u1chi
+uch1il
+uch1in
+uch3l
+uch3m
+uch3n
+u2ch3r
+uch2so
+uch4spr
+uchst4
+uch4tor
+uch2t3r
+u1chu
+uch3ü
+uch1w
+u1ci
+u2ckem
+u4ckent
+u3ck2er
+u2cki
+u1cl
+2u1d
+u3d2a
+uden3s2
+uder2e
+udi3en
+uditi4
+u2don
+ud3ra
+u3dru
+2u1e
+ue2ck
+u2ed
+ue2en
+u2eg
+u2ela
+ue2le
+ueli4
+ue2mi
+uen1
+ue2nä
+ue2ner
+uenge4
+ue2ni
+ue2no
+uen2zu
+u2ep
+ue2r3a
+ue2r1ä
+u2ere
+u3ereh
+ue3reig
+u3erer
+ue4rerg
+ue4rerk
+u3erex
+uer3g2
+u4erinn
+u3erin4t
+uer2ne
+uer4ner
+uern3s4t
+ue2r3o
+u3err
+uer3sc
+uer3t2
+u3erum
+u3erunf
+u3erunt
+ue2ta
+ue4tek
+u3fah
+uf1ak
+uf3ar
+u3fas
+uf1au
+u2f1äs
+u2f1ä2ß
+u2f1ei
+u2f1em
+u3fen.
+u2fent
+u2f1erh
+u4ferle
+uf2ern
+2uff
+uff4l
+uf2fro
+uffs4
+uf3l
+u2fob
+ufo2r
+uf1ori
+uf3r
+uf3sä
+uf4sin
+uf4so
+uf2spo
+ufs3tem
+uf2t1eb
+uft3s2
+u2fum
+2u1g
+u4gabte
+ug1af
+ug1ak
+u2g1ap
+uga4s
+ug1au
+ug3d2
+u2g1ei
+u2g1erf
+u2g1erl
+ugge4st
+ug3hu
+u2g1l
+ug3lad
+ug3lo
+u3g2lö
+u4glu
+u2g3n
+ugo3
+ug1or
+u2gö
+u4g3reis
+ug3ro
+ug3rüs
+ug3se
+ug4ser
+ug3si
+ug3spa
+ug4spr
+ug4spu
+ug5stä
+ug3str
+ug3stü
+u2gü
+u1h
+2uh.
+uhe3s6
+uh1la
+uh1lä
+uh2li
+uhme4
+uhr1a
+uh2rer
+uh3ri
+uh4rin
+uhrt4
+uh2ru
+uh4rü
+uh1w
+2ui
+ui2ch
+u1ie
+ui1em
+u3ig
+u4ige
+u1in.
+u3isch.
+u3ischs
+uisi4n
+ui4s5t
+u1j
+uk2a
+u3käu
+u1ke
+u1ki
+u1k2l
+ukle1i
+uk4n
+uk2ö
+u1k4r
+uk2ta
+uk2t1in
+uk2t3r
+u1ku
+uku2s
+u1l
+ul1ab
+ul1am
+ula2s
+ul1äm
+ulb4
+ul2dr
+uld2se
+u2l1el
+ule4n
+ul1erf
+ul1erh
+ul1erw
+ule2sa
+ule2t
+ul1eta
+u2lex
+ul3f4
+ulg4
+uli2k
+ul1ins
+ul3ka
+ul2kn
+ull2a
+ul2les
+ull3s
+ulm3ein
+ulo2i
+ul1or
+ul2p1h
+ul2sa
+ul4sam
+uls2th
+uls3z
+2ulta
+ul3th
+ul4tri
+ult3s
+u2lü
+ul2vr
+ulz2w
+u2m3a2k
+um1all
+um1anz
+u2m1art
+u2m1aus
+u2maut
+1um3d2
+um2en
+ument4s
+umer2a
+u2m1erg
+u2m1erl
+u2m1erw
+1umf
+1umg
+um1ins
+um1ir
+1umk
+1um3l
+4umm
+umm2a
+umpf4li
+um2p3le
+1umr
+3umsat
+um4ser
+um2sim
+um2s1pe
+um2su
+um3t2
+um2un
+u2m1ur
+1umz
+un1
+4un.
+2una.
+1unab
+un3ac
+un4al
+u3n2am
+u2n3an
+2un2as
+un3at
+1unda
+un4dab
+1undd
+un4dei
+un4d3erf
+und5erha
+1undf
+2undg
+un2did
+1undn
+un2dor
+un2d3r
+4unds.
+und3sp
+und3st
+un2d1um
+1undv
+1undz
+u3ne
+une2b
+une2h
+un2ei.
+un3ein
+unen2t
+un4es4
+1unget
+1ungew
+ung5h
+1unglü
+un2g1r
+ung3ra
+ung3ri
+ung4sa
+un2id
+un3ide
+1u2nif
+unik4
+un2im
+uni2r
+2unis
+un3isl
+u3n2it
+3u2niv
+2unk
+un2k1a2
+un2kei
+unks2
+unk4tit
+unk2t3r
+3unku
+unna2
+un2n3ad
+un3n2e
+uno4r
+un2os
+1unr
+uns2
+2uns.
+un3se
+1unsi
+un3sk
+un3sp
+uns4t1r
+1unt
+un3ta
+unte4ri
+un3tr
+unt3s
+2untu
+unvol2
+unvoll3
+1unw
+2unz
+2uo
+u1o2b
+u3of
+u3or.
+u1or3c
+u3ors
+uos2
+u1os.
+uote2
+u1pa
+u1pe2
+uper1
+up2fa
+u2pf2e
+u2pf1i
+u3pi
+up2pl
+up2pr
+u1pr
+up4t3a2
+upt3erg
+upt1o
+up4tr
+u1q
+2ur.
+u1ra
+u2rab
+u3raba
+ura2be
+u2r3a2m
+u2r1ana
+ur2anb
+u2r1ang
+ur2anh
+u2r1an5s
+u2rar
+ur3a4ren
+u2r3att
+u2r1au
+2u1rä
+ur1än
+ur3b2a
+urch1
+urd2
+ur3di
+2ure
+ur1eff
+u2rele
+ure4n
+u4r1ep
+ur1erh
+ur1erw
+2urf
+urf3t
+ur2gri
+urgros4
+urg3s4
+uri2c
+ur1im
+ur1ini
+ur3ins
+ur1int
+u2rinv
+urk2s
+1urlau
+4u1ro
+u3rol
+uro1s
+u1rö
+ur3p
+ur3sac
+ur2san
+ur2sau
+ur2ser
+ur4sin
+urst4r
+ur4sw
+ur3s2ze
+urt2
+u3ru
+urü2
+ur2za
+ur2zä
+ur2zi
+ur2zo
+ur2z1w
+2us
+u4saf
+us4ann
+u6schent
+usch5wer
+u2s1ec
+u2s1ei
+u3seid
+u3sep
+use1ra
+u2serp
+u2s1ese
+usi3er.
+usi5ers.
+us3kl
+u4sko
+us3oc
+u3soh
+u2s1op
+us1ou
+us3part
+u2s1pas
+u2spat
+us1pe
+u3s2pek
+us1pic
+u5s4piz
+u2spo
+us2por
+u2spu
+us4sez
+us2sof
+ust3abe
+u1stal
+us3tau
+us2th
+ust2in
+us3tr
+u5stras
+us6tris
+u1stu
+u2stun
+u2stur
+us2ur
+u2sü
+2u1ß
+2u1t
+ut1alt
+ut3a2m
+u2t1ap
+u2t1ar
+u2tär
+u3te
+ut1eg
+ute4ge
+ute2n1
+u2tent
+uter4er
+u4t3ersa
+ut2es
+ut2et
+u4tev
+u4t1ex
+utfi4
+ut2he
+u2thi
+u2t3ho
+u2thu
+uto1
+uto4ber
+uto3c
+ut1opf
+u2tops
+ut4or
+utos4
+u3tö
+ut3rea
+ut3rü
+ut3s2a
+ut2s1ä
+ut4schl
+ut4schm
+ut4schö
+ut2spa
+ut3te
+ut5t4l
+utts2
+utu4re
+utu5ru
+u3tü
+utz3eng
+ut2zin
+ut2zo
+ut2z1w
+2u1u2
+uufe2
+u1ü2
+2u1v4
+u2ve.
+uve3rä
+u1w
+2u1x
+ux2e
+ux2o
+ux3t
+u1ya
+2u1z
+uz1we
+uz3z4
+1üb
+2übc
+2übd
+übe2
+übe3c
+über3
+üb3l
+üb3r
+üb2s3t
+2üc
+ü1che
+üch3l
+üch2s1c
+ücht4e
+ü3cken
+ück1er
+ück3eri
+ü4ckers
+ück4spe
+2üd
+üd3a4
+ü3den.
+üden4g
+ü3d2ens
+üd1o4
+üd3r
+üd3s2
+üdsa1
+üd3t4
+üdwes2
+ü2f1a
+ü2f1ei
+üfer2
+ü2f1erg
+üf2fl
+ü2f1i
+üf3l
+üf2to
+ü1g
+üge6leis
+ü2g3l
+ü2gn
+üg3s
+üg4st
+üh1a
+ü1he
+ü2h1ei
+ü2h1eng
+ü2h1erk
+ü2h1erz
+üh1i
+ühla2
+ühl1ac
+ühl2e
+üh3mo
+üh3ne
+ühn2s
+üh3r2e
+ühr3ei.
+üh1ro
+ühr3ta
+üh1s
+ühs2p
+üh3t
+üh4th
+ü1hu
+üh1w
+ü1k
+ül1a
+ül2c
+ül4e
+ül2la
+ül2l1ei
+ül2lo
+ül2lö
+ü1lu
+ü2ment
+2ün
+ü2n1a
+ün2da
+ün2dr
+ünd3s
+ünen3
+ün2fa
+ün2f1ei
+ün2fli
+ün2fr
+ün2g3l
+ünn2s
+ün2s
+ün3sc
+ün3se
+ün3sp
+ün3str
+ünt2
+ü1nu
+ün2za
+ü1pe
+ü1pi
+üp2pl
+ür1a
+ü2r1ei
+ür2fl
+ür2fr
+ür4g3en4g
+ü3r2o1
+ürr2
+ür2s
+ür3sc
+ür3se
+ür3sp
+ürt2h
+üs2a
+ü2schl
+üse3h
+üse3l
+üse1s
+üs2s1c
+üss2e
+üs2st
+ü2st
+üste3ne
+ü1ß
+2üt
+ü2t1al
+ü2t3r
+üt2s1
+üt2tr
+ü1v
+ü1z
+2v1ab
+va1c
+val2s
+2vang
+2varb
+va1s
+v4at
+va2t3a4
+va2tei
+va2t3h
+vatik2
+va4t1in
+vati8ons.
+va2t3r
+vat3s4
+va2t1u
+2v1au
+2v1b
+2v1d
+1ve2
+ve3ar
+ve3b
+ve3c
+ve3d
+ve3g
+ve3h
+ve4i
+veit4
+veits3
+ve3la
+ve4l1au
+ve3le
+ve3li
+ve3lo
+ve3ma
+ve3mu
+ve3nal
+ven2c
+ve3ne
+venen4d
+ve3ni
+ve3nö
+ve3o
+ver1
+ver3a
+ve3rad
+ve3rand
+ve3ras
+ver3b2
+verd2
+vere2
+ve4rek
+verf4
+verg4
+ve3ri
+ve4rin
+ver3k
+ver3st
+vert2
+ver5te
+ver3u
+ves1
+2ve3sc
+2ve3s2e
+ves3ti
+ve3ta
+vete1
+ve3tr
+2veü
+ve3v
+ve3x2
+2v1f4
+2v1g
+2v1h
+vi3ar
+vi4a3t
+vi2c
+vid3s2t
+vie2h3a
+vi2el
+vi2er
+vie4rec
+vie2w1
+vig2
+2vii
+vi2l1a
+vi4leh
+vi2l1in
+2v1i2m
+vima2
+vi4na
+vin2s
+2v1int
+vi3sa
+vise4
+vi3s2o
+vi2sp
+vis2u
+2v1k
+2v1l2
+2v1m
+2v1n
+2v1ob
+vo3ga
+vo2gu
+3vol
+voll1a
+vollen4
+vol6l5end
+vol2li
+2v1op
+vo2r1
+vor3a
+vor3d
+vor3e
+vor3g
+vo3ri
+vormen4
+3voy
+vö2c
+2v1p
+v2r
+2v3ra
+v3re
+v4ree
+2v3ro
+2vs
+vs2e
+v1sta
+v1steu
+v3s2z
+2v3t
+vu2et
+2vumf
+2v1v
+2v1w
+2v1z
+w2a
+1waa
+wab2bl
+wa3che
+wach6stu
+wach4t4r
+waffe2
+waffel3
+1wag
+wa5ge
+wa2g3n
+wa3go
+1wah
+wahl5ent
+wah4ler
+wah2li
+wai2b
+1wal
+2walb
+wal4da
+2walm
+wal2ta
+wal2to
+walt4st
+wa3na
+wandels6
+wang4s
+wa2p
+1war2e
+ware1i
+war3ste
+wart4e
+1was
+wa3sa
+wa4scha
+wa3se
+wa3sh
+wass4e
+w2ä
+1wäh
+1wäl
+2wäng
+1wäs
+wäs2c
+wä3sche
+2w1b2
+wbu2
+2w1c
+2w1d
+we2a
+we2ba
+4webeb
+we2bl
+web3s
+we3cke.
+we5cken.
+we3ckes
+we2e4
+weed3
+we2fl
+1weg
+we2g1a
+we2g3l
+we2g3r
+weg3s4
+1weh
+we2i
+wei4bl
+2weie
+weik4
+weis4s3p
+wei3str
+wei4tr
+wel6schl
+wel6schr
+wel2t1
+wel4t3a4
+wel6t5en6d
+wel4tr
+wen3a4
+we3ni
+wen4k3ri
+we2r3a
+wer2bl
+1werbu
+werd2
+5werdens
+1werdu
+werer2
+wer2fl
+wer4gel
+we4r3io
+1werk.
+wer2ka
+1werke
+wer2kl
+wer2ku
+we2rö
+wer2s
+wer2ta
+wer6t5erm
+wer2to
+1werts
+1wese
+we2s1p
+we4st
+west1a
+west3ei
+wes2th
+west1o2
+west3r
+wes4tu
+1wet
+wet2s
+wett3s
+2w1ey
+2w1g
+2w3h
+wi3cka
+1wid
+wi2e
+wie3l
+wien2e
+wie2st
+wik2
+1wil
+wim2ma
+wim4m3u
+win4d3e4c
+win2dr
+win2e
+2wing
+win8n7ersc
+1wi4r
+wi3s2e
+wi2sp
+1wiss
+wi3th
+1witzl
+2w1k
+2w1l
+2w1m
+2wn
+wn3s
+1wo1c
+wo2cha
+woche4
+1woh
+woh2le
+1wolf
+wolf4s3
+wol4ler
+wor3a
+wo2r3i
+wor2t3r
+wo4r3u
+wot2
+1wöc
+wört2h
+2w1p
+w2r
+w3ro
+2w1s
+w3s2k
+ws2t
+2w1t
+wti2
+w2u
+1wuc
+wul2
+wul3se
+wun2s
+4wur.
+wur2fa
+wur2s
+1wurst
+wus2
+wus3te
+1wu4t1
+1wüh
+wül2
+wün3
+2w1w
+x1a
+1xa.
+2xa2b
+1x2ad
+1xae
+xa1fl
+1x2ag
+x3a2m
+x2anz
+1x2as
+2x1b
+2xc
+x1ce
+x1ch
+x1cl
+4x1d
+1xe
+x1e4g
+2xek
+xe2l
+xe3lei
+x1em
+3x2em.
+x2en
+xen3s2
+x2er.
+x2ere
+xers2
+3xes
+2x3eu
+2x1f
+2x1g
+2x1h
+xib4
+xi1c
+xich2
+xide2
+xi2d1em
+x1i2do
+xie3l
+xi3g
+xil1
+xil2a
+xi2lo
+xi2lu
+xin3s2
+x2is1
+xis2c
+xi2se
+xi2so2
+xis3s
+xis4tä
+xi2su
+x1i2tu
+x1j
+2x1k2
+2x2l2
+x3lä
+x3le
+2x1m
+2x1n
+x1or
+4x1p
+xpor6ter
+x1q
+2x1r
+2x3s2
+4x1t
+x2t1a
+xt2as
+xt1ä
+x2tän
+xtblo4
+x2t1e2d
+x2t1ei
+x4tent
+x2t1er2f
+x2t3ev
+xtfi4
+x2t1il2l
+xtra3b4
+x2t3ran
+xt3s2
+xt1u
+x3tur
+1xu
+xu1a
+x1u2n
+xu2s
+2xv
+2x1w
+2xy
+3xy.
+3xys
+x1z
+2y1ab
+1yac
+y1al.
+y1a2m
+yan2g
+y1ank
+y1ät
+y1b
+y1c2
+y2chi
+y3chis
+ych3n
+y1d4
+y1e
+y2ef
+yen4n
+y2ere
+y2es.
+yes2p
+ye2th
+y1f2
+y1g
+ygi2
+ygie5
+yg2l
+y1h
+yhr2
+y1i4
+y1j
+y1k2
+yke3n
+yk3s2
+y1l
+y2l3a2m
+yl4ante
+yl3c
+y4le.
+yli4n
+yloni1
+yl3s2
+y2l1u
+yma4t
+ym3p4
+ympi1
+y2n1o
+yno4d
+ynt2
+y1nu
+y1of
+yom2
+yon4i
+y1ont
+y1ou
+y1p
+ypa2
+yp3an
+ype2
+y2pf
+y3ph
+y2p1in
+ypo3
+y4p3s
+y1r
+y3r2e
+y3ri
+yri2a
+yri1e
+y3r4o
+yrr2
+ys2an
+y3s2c
+yse1
+y3s2h
+y4s3l
+ysme3
+ys2po
+ys1pr
+ys3t4
+y1s4ty
+y2s1u2
+y3s2z
+y1t2
+y2te.
+y2tes
+y3to1
+yu2r
+yure3
+y1v
+y1w
+y1y
+y1z2
+2z3a2b
+zab3l
+za1c
+z1a2d
+za3de
+2z1af
+za3gr
+3zah
+2z3a2k
+zale3
+2z1all
+2z1am
+3zambiq
+z1an
+za2na
+2z3anf
+3zani
+2z3anl
+2zarb
+2zarc
+z1arm
+z1arti
+zar2tr
+2z1arz
+z1as
+za1st4
+2z3at3
+3zaub
+z1au2f
+z3aug
+3zaun
+zä2
+2z1äc
+3z2äh
+2z1äm
+z1ärg
+z1ärm
+4z3b4
+zbü1b
+zbübe3
+2z3c
+2z3d2
+zdan2
+zdä1
+2z1e2ben
+2zecho
+2z1eck
+ze1e
+2z1eff
+zeik4
+zei3la
+zeile4
+2z1ein
+zei3s4
+zeist4
+zei2t1a
+zeit5end
+zei4t3er
+zei2tr
+ze2l1a2
+ze2len
+ze2l1er
+ze2l1in
+zell2a
+zel3sz
+zel3t2h
+zelu2
+2z1emp
+5zen.
+ze4n3ac
+zen3n
+ze2no
+zens2e
+zen4sem
+3zent
+zent3s
+zen4zer
+z2er.
+ze2r3a
+ze2re2b
+2z1ergä
+4z3ergeb
+z3erhal
+2zerhö
+zerin4t
+zerk2
+z2erl.
+2zerlö
+z2ern
+zer4neb
+zer4n3ei
+ze2ro
+2z1erq
+zers2
+2z1ersa
+4z3erste
+zert1a4
+zer4t3ag
+zert4an
+zer6tere
+zer4tin
+zer6t5rau
+4zerwei
+2z1erz
+3z2erza
+ze2sä
+ze3sc
+zes1e
+zes1i
+ze3sku
+ze2sp
+zessen4
+zes6s5end
+zes2sp
+zes2st
+ze2s3t
+ze3sta
+ze2tr
+2zetts
+2z1ex
+2z1f4
+2z1g2
+zger2a
+2z1h
+z2hen
+zhir3
+zi3alo
+zi3ar
+zid3r
+zi1erh
+ziers1
+zi1es.
+zil2e
+2z1imp
+zin2e
+zin4er
+2z1inf
+2z1inh
+zin1it
+zin2sa
+zin4ser
+4zinsuf
+2z1inv
+zi2o3
+zi3op
+zirk2
+zirk6s
+zi3s2z
+zi1t2h
+2z1j
+2z3k4
+2z1l2
+2z1m2
+zme2e
+2z3n4
+2z1ob
+2z1of
+zo2gl
+2z1oh
+3zol
+zon4ter
+zo2o
+2zope
+z1or
+zo2ri
+zor4ne
+2z1osz
+2z3ot
+2zö2f
+z1öl
+2z3p4
+2z1q
+2z3r2
+4z1s2
+z3sa
+z3sh
+z3sk
+z3sz
+2z1t
+z2t1au
+z4tehe
+z3t2her
+zt3ho
+zt1ins
+z3tö
+zt3rec
+zt3s2
+z3tü
+zu1
+zu3a
+zub4
+zu4ch
+zu3cke
+zud4
+zudi4
+zu2el
+zu3f4
+zu2g1ar
+zu4gent
+zu3gl
+zug1un
+2z1uhr
+zu3k
+2z1um.
+zumen2
+2zumf
+2zumg
+2zuml
+2z1ums
+zun2e
+zung4
+2zunt
+zup2fi
+zu3r2a
+z1urk
+2z1url
+2z1urs
+2z1urt
+zu3s4
+zu5t2
+zuz2
+2züb
+zür1c
+2z1v
+zw2
+z1wac
+4zwah
+zwan2d1
+z2wang
+z1war
+2zwas
+4zwäl
+2zweg
+z2weig
+z1weis
+2z1wel
+2z1wen
+2z1wer
+z2werg
+2z1wes
+2zwet
+4zwir
+z2wit
+2z1wo
+z1wör
+z1wur
+2z1wü
+4z1z
+z3z4a
+zzi1s4
+z3z2o
+zz2ö
diff --git a/test/hyph-en-us.pat b/test/hyph-en-us.pat
new file mode 100644
index 00000000..f69e835d
--- /dev/null
+++ b/test/hyph-en-us.pat
@@ -0,0 +1,4938 @@
+.ach4
+.ad4der
+.af1t
+.al3t
+.am5at
+.an5c
+.ang4
+.ani5m
+.ant4
+.an3te
+.anti5s
+.ar5s
+.ar4tie
+.ar4ty
+.as3c
+.as1p
+.as1s
+.aster5
+.atom5
+.au1d
+.av4i
+.awn4
+.ba4g
+.ba5na
+.bas4e
+.ber4
+.be5ra
+.be3sm
+.be5sto
+.bri2
+.but4ti
+.cam4pe
+.can5c
+.capa5b
+.car5ol
+.ca4t
+.ce4la
+.ch4
+.chill5i
+.ci2
+.cit5r
+.co3e
+.co4r
+.cor5ner
+.de4moi
+.de3o
+.de3ra
+.de3ri
+.des4c
+.dictio5
+.do4t
+.du4c
+.dumb5
+.earth5
+.eas3i
+.eb4
+.eer4
+.eg2
+.el5d
+.el3em
+.enam3
+.en3g
+.en3s
+.eq5ui5t
+.er4ri
+.es3
+.eu3
+.eye5
+.fes3
+.for5mer
+.ga2
+.ge2
+.gen3t4
+.ge5og
+.gi5a
+.gi4b
+.go4r
+.hand5i
+.han5k
+.he2
+.hero5i
+.hes3
+.het3
+.hi3b
+.hi3er
+.hon5ey
+.hon3o
+.hov5
+.id4l
+.idol3
+.im3m
+.im5pin
+.in1
+.in3ci
+.ine2
+.in2k
+.in3s
+.ir5r
+.is4i
+.ju3r
+.la4cy
+.la4m
+.lat5er
+.lath5
+.le2
+.leg5e
+.len4
+.lep5
+.lev1
+.li4g
+.lig5a
+.li2n
+.li3o
+.li4t
+.mag5a5
+.mal5o
+.man5a
+.mar5ti
+.me2
+.mer3c
+.me5ter
+.mis1
+.mist5i
+.mon3e
+.mo3ro
+.mu5ta
+.muta5b
+.ni4c
+.od2
+.odd5
+.of5te
+.or5ato
+.or3c
+.or1d
+.or3t
+.os3
+.os4tl
+.oth3
+.out3
+.ped5al
+.pe5te
+.pe5tit
+.pi4e
+.pio5n
+.pi2t
+.pre3m
+.ra4c
+.ran4t
+.ratio5na
+.ree2
+.re5mit
+.res2
+.re5stat
+.ri4g
+.rit5u
+.ro4q
+.ros5t
+.row5d
+.ru4d
+.sci3e
+.self5
+.sell5
+.se2n
+.se5rie
+.sh2
+.si2
+.sing4
+.st4
+.sta5bl
+.sy2
+.ta4
+.te4
+.ten5an
+.th2
+.ti2
+.til4
+.tim5o5
+.ting4
+.tin5k
+.ton4a
+.to4p
+.top5i
+.tou5s
+.trib5ut
+.un1a
+.un3ce
+.under5
+.un1e
+.un5k
+.un5o
+.un3u
+.up3
+.ure3
+.us5a
+.ven4de
+.ve5ra
+.wil5i
+.ye4
+4ab.
+a5bal
+a5ban
+abe2
+ab5erd
+abi5a
+ab5it5ab
+ab5lat
+ab5o5liz
+4abr
+ab5rog
+ab3ul
+a4car
+ac5ard
+ac5aro
+a5ceou
+ac1er
+a5chet
+4a2ci
+a3cie
+ac1in
+a3cio
+ac5rob
+act5if
+ac3ul
+ac4um
+a2d
+ad4din
+ad5er.
+2adi
+a3dia
+ad3ica
+adi4er
+a3dio
+a3dit
+a5diu
+ad4le
+ad3ow
+ad5ran
+ad4su
+4adu
+a3duc
+ad5um
+ae4r
+aeri4e
+a2f
+aff4
+a4gab
+aga4n
+ag5ell
+age4o
+4ageu
+ag1i
+4ag4l
+ag1n
+a2go
+3agog
+ag3oni
+a5guer
+ag5ul
+a4gy
+a3ha
+a3he
+ah4l
+a3ho
+ai2
+a5ia
+a3ic.
+ai5ly
+a4i4n
+ain5in
+ain5o
+ait5en
+a1j
+ak1en
+al5ab
+al3ad
+a4lar
+4aldi
+2ale
+al3end
+a4lenti
+a5le5o
+al1i
+al4ia.
+ali4e
+al5lev
+4allic
+4alm
+a5log.
+a4ly.
+4alys
+5a5lyst
+5alyt
+3alyz
+4ama
+am5ab
+am3ag
+ama5ra
+am5asc
+a4matis
+a4m5ato
+am5era
+am3ic
+am5if
+am5ily
+am1in
+ami4no
+a2mo
+a5mon
+amor5i
+amp5en
+a2n
+an3age
+3analy
+a3nar
+an3arc
+anar4i
+a3nati
+4and
+ande4s
+an3dis
+an1dl
+an4dow
+a5nee
+a3nen
+an5est.
+a3neu
+2ang
+ang5ie
+an1gl
+a4n1ic
+a3nies
+an3i3f
+an4ime
+a5nimi
+a5nine
+an3io
+a3nip
+an3ish
+an3it
+a3niu
+an4kli
+5anniz
+ano4
+an5ot
+anoth5
+an2sa
+an4sco
+an4sn
+an2sp
+ans3po
+an4st
+an4sur
+antal4
+an4tie
+4anto
+an2tr
+an4tw
+an3ua
+an3ul
+a5nur
+4ao
+apar4
+ap5at
+ap5ero
+a3pher
+4aphi
+a4pilla
+ap5illar
+ap3in
+ap3ita
+a3pitu
+a2pl
+apoc5
+ap5ola
+apor5i
+apos3t
+aps5es
+a3pu
+aque5
+2a2r
+ar3act
+a5rade
+ar5adis
+ar3al
+a5ramete
+aran4g
+ara3p
+ar4at
+a5ratio
+ar5ativ
+a5rau
+ar5av4
+araw4
+arbal4
+ar4chan
+ar5dine
+ar4dr
+ar5eas
+a3ree
+ar3ent
+a5ress
+ar4fi
+ar4fl
+ar1i
+ar5ial
+ar3ian
+a3riet
+ar4im
+ar5inat
+ar3io
+ar2iz
+ar2mi
+ar5o5d
+a5roni
+a3roo
+ar2p
+ar3q
+arre4
+ar4sa
+ar2sh
+4as.
+as4ab
+as3ant
+ashi4
+a5sia.
+a3sib
+a3sic
+5a5si4t
+ask3i
+as4l
+a4soc
+as5ph
+as4sh
+as3ten
+as1tr
+asur5a
+a2ta
+at3abl
+at5ac
+at3alo
+at5ap
+ate5c
+at5ech
+at3ego
+at3en.
+at3era
+ater5n
+a5terna
+at3est
+at5ev
+4ath
+ath5em
+a5then
+at4ho
+ath5om
+4ati.
+a5tia
+at5i5b
+at1ic
+at3if
+ation5ar
+at3itu
+a4tog
+a2tom
+at5omiz
+a4top
+a4tos
+a1tr
+at5rop
+at4sk
+at4tag
+at5te
+at4th
+a2tu
+at5ua
+at5ue
+at3ul
+at3ura
+a2ty
+au4b
+augh3
+au3gu
+au4l2
+aun5d
+au3r
+au5sib
+aut5en
+au1th
+a2va
+av3ag
+a5van
+ave4no
+av3era
+av5ern
+av5ery
+av1i
+avi4er
+av3ig
+av5oc
+a1vor
+3away
+aw3i
+aw4ly
+aws4
+ax4ic
+ax4id
+ay5al
+aye4
+ays4
+azi4er
+azz5i
+5ba.
+bad5ger
+ba4ge
+bal1a
+ban5dag
+ban4e
+ban3i
+barbi5
+bari4a
+bas4si
+1bat
+ba4z
+2b1b
+b2be
+b3ber
+bbi4na
+4b1d
+4be.
+beak4
+beat3
+4be2d
+be3da
+be3de
+be3di
+be3gi
+be5gu
+1bel
+be1li
+be3lo
+4be5m
+be5nig
+be5nu
+4bes4
+be3sp
+be5str
+3bet
+bet5iz
+be5tr
+be3tw
+be3w
+be5yo
+2bf
+4b3h
+bi2b
+bi4d
+3bie
+bi5en
+bi4er
+2b3if
+1bil
+bi3liz
+bina5r4
+bin4d
+bi5net
+bi3ogr
+bi5ou
+bi2t
+3bi3tio
+bi3tr
+3bit5ua
+b5itz
+b1j
+bk4
+b2l2
+blath5
+b4le.
+blen4
+5blesp
+b3lis
+b4lo
+blun4t
+4b1m
+4b3n
+bne5g
+3bod
+bod3i
+bo4e
+bol3ic
+bom4bi
+bon4a
+bon5at
+3boo
+5bor.
+4b1ora
+bor5d
+5bore
+5bori
+5bos4
+b5ota
+both5
+bo4to
+bound3
+4bp
+4brit
+broth3
+2b5s2
+bsor4
+2bt
+bt4l
+b4to
+b3tr
+buf4fer
+bu4ga
+bu3li
+bumi4
+bu4n
+bunt4i
+bu3re
+bus5ie
+buss4e
+5bust
+4buta
+3butio
+b5uto
+b1v
+4b5w
+5by.
+bys4
+1ca
+cab3in
+ca1bl
+cach4
+ca5den
+4cag4
+2c5ah
+ca3lat
+cal4la
+call5in
+4calo
+can5d
+can4e
+can4ic
+can5is
+can3iz
+can4ty
+cany4
+ca5per
+car5om
+cast5er
+cas5tig
+4casy
+ca4th
+4cativ
+cav5al
+c3c
+ccha5
+cci4a
+ccompa5
+ccon4
+ccou3t
+2ce.
+4ced.
+4ceden
+3cei
+5cel.
+3cell
+1cen
+3cenc
+2cen4e
+4ceni
+3cent
+3cep
+ce5ram
+4cesa
+3cessi
+ces5si5b
+ces5t
+cet4
+c5e4ta
+cew4
+2ch
+4ch.
+4ch3ab
+5chanic
+ch5a5nis
+che2
+cheap3
+4ched
+che5lo
+3chemi
+ch5ene
+ch3er.
+ch3ers
+4ch1in
+5chine.
+ch5iness
+5chini
+5chio
+3chit
+chi2z
+3cho2
+ch4ti
+1ci
+3cia
+ci2a5b
+cia5r
+ci5c
+4cier
+5cific.
+4cii
+ci4la
+3cili
+2cim
+2cin
+c4ina
+3cinat
+cin3em
+c1ing
+c5ing.
+5cino
+cion4
+4cipe
+ci3ph
+4cipic
+4cista
+4cisti
+2c1it
+cit3iz
+5ciz
+ck1
+ck3i
+1c4l4
+4clar
+c5laratio
+5clare
+cle4m
+4clic
+clim4
+cly4
+c5n
+1co
+co5ag
+coe2
+2cog
+co4gr
+coi4
+co3inc
+col5i
+5colo
+col3or
+com5er
+con4a
+c4one
+con3g
+con5t
+co3pa
+cop3ic
+co4pl
+4corb
+coro3n
+cos4e
+cov1
+cove4
+cow5a
+coz5e
+co5zi
+c1q
+cras5t
+5crat.
+5cratic
+cre3at
+5cred
+4c3reta
+cre4v
+cri2
+cri5f
+c4rin
+cris4
+5criti
+cro4pl
+crop5o
+cros4e
+cru4d
+4c3s2
+2c1t
+cta4b
+ct5ang
+c5tant
+c2te
+c3ter
+c4ticu
+ctim3i
+ctu4r
+c4tw
+cud5
+c4uf
+c4ui
+cu5ity
+5culi
+cul4tis
+3cultu
+cu2ma
+c3ume
+cu4mi
+3cun
+cu3pi
+cu5py
+cur5a4b
+cu5ria
+1cus
+cuss4i
+3c4ut
+cu4tie
+4c5utiv
+4cutr
+1cy
+cze4
+1d2a
+5da.
+2d3a4b
+dach4
+4daf
+2dag
+da2m2
+dan3g
+dard5
+dark5
+4dary
+3dat
+4dativ
+4dato
+5dav4
+dav5e
+5day
+d1b
+d5c
+d1d4
+2de.
+deaf5
+deb5it
+de4bon
+decan4
+de4cil
+de5com
+2d1ed
+4dee.
+de5if
+deli4e
+del5i5q
+de5lo
+d4em
+5dem.
+3demic
+dem5ic.
+de5mil
+de4mons
+demor5
+1den
+de4nar
+de3no
+denti5f
+de3nu
+de1p
+de3pa
+depi4
+de2pu
+d3eq
+d4erh
+5derm
+dern5iz
+der5s
+des2
+d2es.
+de1sc
+de2s5o
+des3ti
+de3str
+de4su
+de1t
+de2to
+de1v
+dev3il
+4dey
+4d1f
+d4ga
+d3ge4t
+dg1i
+d2gy
+d1h2
+5di.
+1d4i3a
+dia5b
+di4cam
+d4ice
+3dict
+3did
+5di3en
+d1if
+di3ge
+di4lato
+d1in
+1dina
+3dine.
+5dini
+di5niz
+1dio
+dio5g
+di4pl
+dir2
+di1re
+dirt5i
+dis1
+5disi
+d4is3t
+d2iti
+1di1v
+d1j
+d5k2
+4d5la
+3dle.
+3dled
+3dles.
+4dless
+2d3lo
+4d5lu
+2dly
+d1m
+4d1n4
+1do
+3do.
+do5de
+5doe
+2d5of
+d4og
+do4la
+doli4
+do5lor
+dom5iz
+do3nat
+doni4
+doo3d
+dop4p
+d4or
+3dos
+4d5out
+do4v
+3dox
+d1p
+1dr
+drag5on
+4drai
+dre4
+drea5r
+5dren
+dri4b
+dril4
+dro4p
+4drow
+5drupli
+4dry
+2d1s2
+ds4p
+d4sw
+d4sy
+d2th
+1du
+d1u1a
+du2c
+d1uca
+duc5er
+4duct.
+4ducts
+du5el
+du4g
+d3ule
+dum4be
+du4n
+4dup
+du4pe
+d1v
+d1w
+d2y
+5dyn
+dy4se
+dys5p
+e1a4b
+e3act
+ead1
+ead5ie
+ea4ge
+ea5ger
+ea4l
+eal5er
+eal3ou
+eam3er
+e5and
+ear3a
+ear4c
+ear5es
+ear4ic
+ear4il
+ear5k
+ear2t
+eart3e
+ea5sp
+e3ass
+east3
+ea2t
+eat5en
+eath3i
+e5atif
+e4a3tu
+ea2v
+eav3en
+eav5i
+eav5o
+2e1b
+e4bel.
+e4bels
+e4ben
+e4bit
+e3br
+e4cad
+ecan5c
+ecca5
+e1ce
+ec5essa
+ec2i
+e4cib
+ec5ificat
+ec5ifie
+ec5ify
+ec3im
+eci4t
+e5cite
+e4clam
+e4clus
+e2col
+e4comm
+e4compe
+e4conc
+e2cor
+ec3ora
+eco5ro
+e1cr
+e4crem
+ec4tan
+ec4te
+e1cu
+e4cul
+ec3ula
+2e2da
+4ed3d
+e4d1er
+ede4s
+4edi
+e3dia
+ed3ib
+ed3ica
+ed3im
+ed1it
+edi5z
+4edo
+e4dol
+edon2
+e4dri
+e4dul
+ed5ulo
+ee2c
+eed3i
+ee2f
+eel3i
+ee4ly
+ee2m
+ee4na
+ee4p1
+ee2s4
+eest4
+ee4ty
+e5ex
+e1f
+e4f3ere
+1eff
+e4fic
+5efici
+efil4
+e3fine
+ef5i5nite
+3efit
+efor5es
+e4fuse.
+4egal
+eger4
+eg5ib
+eg4ic
+eg5ing
+e5git5
+eg5n
+e4go.
+e4gos
+eg1ul
+e5gur
+5egy
+e1h4
+eher4
+ei2
+e5ic
+ei5d
+eig2
+ei5gl
+e3imb
+e3inf
+e1ing
+e5inst
+eir4d
+eit3e
+ei3th
+e5ity
+e1j
+e4jud
+ej5udi
+eki4n
+ek4la
+e1la
+e4la.
+e4lac
+elan4d
+el5ativ
+e4law
+elaxa4
+e3lea
+el5ebra
+5elec
+e4led
+el3ega
+e5len
+e4l1er
+e1les
+el2f
+el2i
+e3libe
+e4l5ic.
+el3ica
+e3lier
+el5igib
+e5lim
+e4l3ing
+e3lio
+e2lis
+el5ish
+e3liv3
+4ella
+el4lab
+ello4
+e5loc
+el5og
+el3op.
+el2sh
+el4ta
+e5lud
+el5ug
+e4mac
+e4mag
+e5man
+em5ana
+em5b
+e1me
+e2mel
+e4met
+em3ica
+emi4e
+em5igra
+em1in2
+em5ine
+em3i3ni
+e4mis
+em5ish
+e5miss
+em3iz
+5emniz
+emo4g
+emoni5o
+em3pi
+e4mul
+em5ula
+emu3n
+e3my
+en5amo
+e4nant
+ench4er
+en3dic
+e5nea
+e5nee
+en3em
+en5ero
+en5esi
+en5est
+en3etr
+e3new
+en5ics
+e5nie
+e5nil
+e3nio
+en3ish
+en3it
+e5niu
+5eniz
+4enn
+4eno
+eno4g
+e4nos
+en3ov
+en4sw
+ent5age
+4enthes
+en3ua
+en5uf
+e3ny.
+4en3z
+e5of
+eo2g
+e4oi4
+e3ol
+eop3ar
+e1or
+eo3re
+eo5rol
+eos4
+e4ot
+eo4to
+e5out
+e5ow
+e2pa
+e3pai
+ep5anc
+e5pel
+e3pent
+ep5etitio
+ephe4
+e4pli
+e1po
+e4prec
+ep5reca
+e4pred
+ep3reh
+e3pro
+e4prob
+ep4sh
+ep5ti5b
+e4put
+ep5uta
+e1q
+equi3l
+e4q3ui3s
+er1a
+era4b
+4erand
+er3ar
+4erati.
+2erb
+er4bl
+er3ch
+er4che
+2ere.
+e3real
+ere5co
+ere3in
+er5el.
+er3emo
+er5ena
+er5ence
+4erene
+er3ent
+ere4q
+er5ess
+er3est
+eret4
+er1h
+er1i
+e1ria4
+5erick
+e3rien
+eri4er
+er3ine
+e1rio
+4erit
+er4iu
+eri4v
+e4riva
+er3m4
+er4nis
+4ernit
+5erniz
+er3no
+2ero
+er5ob
+e5roc
+ero4r
+er1ou
+er1s
+er3set
+ert3er
+4ertl
+er3tw
+4eru
+eru4t
+5erwau
+e1s4a
+e4sage.
+e4sages
+es2c
+e2sca
+es5can
+e3scr
+es5cu
+e1s2e
+e2sec
+es5ecr
+es5enc
+e4sert.
+e4serts
+e4serva
+4esh
+e3sha
+esh5en
+e1si
+e2sic
+e2sid
+es5iden
+es5igna
+e2s5im
+es4i4n
+esis4te
+esi4u
+e5skin
+es4mi
+e2sol
+es3olu
+e2son
+es5ona
+e1sp
+es3per
+es5pira
+es4pre
+2ess
+es4si4b
+estan4
+es3tig
+es5tim
+4es2to
+e3ston
+2estr
+e5stro
+estruc5
+e2sur
+es5urr
+es4w
+eta4b
+eten4d
+e3teo
+ethod3
+et1ic
+e5tide
+etin4
+eti4no
+e5tir
+e5titio
+et5itiv
+4etn
+et5ona
+e3tra
+e3tre
+et3ric
+et5rif
+et3rog
+et5ros
+et3ua
+et5ym
+et5z
+4eu
+e5un
+e3up
+eu3ro
+eus4
+eute4
+euti5l
+eu5tr
+eva2p5
+e2vas
+ev5ast
+e5vea
+ev3ell
+evel3o
+e5veng
+even4i
+ev1er
+e5verb
+e1vi
+ev3id
+evi4l
+e4vin
+evi4v
+e5voc
+e5vu
+e1wa
+e4wag
+e5wee
+e3wh
+ewil5
+ew3ing
+e3wit
+1exp
+5eyc
+5eye.
+eys4
+1fa
+fa3bl
+fab3r
+fa4ce
+4fag
+fain4
+fall5e
+4fa4ma
+fam5is
+5far
+far5th
+fa3ta
+fa3the
+4fato
+fault5
+4f5b
+4fd
+4fe.
+feas4
+feath3
+fe4b
+4feca
+5fect
+2fed
+fe3li
+fe4mo
+fen2d
+fend5e
+fer1
+5ferr
+fev4
+4f1f
+f4fes
+f4fie
+f5fin.
+f2f5is
+f4fly
+f2fy
+4fh
+1fi
+fi3a
+2f3ic.
+4f3ical
+f3ican
+4ficate
+f3icen
+fi3cer
+fic4i
+5ficia
+5ficie
+4fics
+fi3cu
+fi5del
+fight5
+fil5i
+fill5in
+4fily
+2fin
+5fina
+fin2d5
+fi2ne
+f1in3g
+fin4n
+fis4ti
+f4l2
+f5less
+flin4
+flo3re
+f2ly5
+4fm
+4fn
+1fo
+5fon
+fon4de
+fon4t
+fo2r
+fo5rat
+for5ay
+fore5t
+for4i
+fort5a
+fos5
+4f5p
+fra4t
+f5rea
+fres5c
+fri2
+fril4
+frol5
+2f3s
+2ft
+f4to
+f2ty
+3fu
+fu5el
+4fug
+fu4min
+fu5ne
+fu3ri
+fusi4
+fus4s
+4futa
+1fy
+1ga
+gaf4
+5gal.
+3gali
+ga3lo
+2gam
+ga5met
+g5amo
+gan5is
+ga3niz
+gani5za
+4gano
+gar5n4
+gass4
+gath3
+4gativ
+4gaz
+g3b
+gd4
+2ge.
+2ged
+geez4
+gel4in
+ge5lis
+ge5liz
+4gely
+1gen
+ge4nat
+ge5niz
+4geno
+4geny
+1geo
+ge3om
+g4ery
+5gesi
+geth5
+4geto
+ge4ty
+ge4v
+4g1g2
+g2ge
+g3ger
+gglu5
+ggo4
+gh3in
+gh5out
+gh4to
+5gi.
+1gi4a
+gia5r
+g1ic
+5gicia
+g4ico
+gien5
+5gies.
+gil4
+g3imen
+3g4in.
+gin5ge
+5g4ins
+5gio
+3gir
+gir4l
+g3isl
+gi4u
+5giv
+3giz
+gl2
+gla4
+glad5i
+5glas
+1gle
+gli4b
+g3lig
+3glo
+glo3r
+g1m
+g4my
+gn4a
+g4na.
+gnet4t
+g1ni
+g2nin
+g4nio
+g1no
+g4non
+1go
+3go.
+gob5
+5goe
+3g4o4g
+go3is
+gon2
+4g3o3na
+gondo5
+go3ni
+5goo
+go5riz
+gor5ou
+5gos.
+gov1
+g3p
+1gr
+4grada
+g4rai
+gran2
+5graph.
+g5rapher
+5graphic
+4graphy
+4gray
+gre4n
+4gress.
+4grit
+g4ro
+gruf4
+gs2
+g5ste
+gth3
+gu4a
+3guard
+2gue
+5gui5t
+3gun
+3gus
+4gu4t
+g3w
+1gy
+2g5y3n
+gy5ra
+h3ab4l
+hach4
+hae4m
+hae4t
+h5agu
+ha3la
+hala3m
+ha4m
+han4ci
+han4cy
+5hand.
+han4g
+hang5er
+hang5o
+h5a5niz
+han4k
+han4te
+hap3l
+hap5t
+ha3ran
+ha5ras
+har2d
+hard3e
+har4le
+harp5en
+har5ter
+has5s
+haun4
+5haz
+haz3a
+h1b
+1head
+3hear
+he4can
+h5ecat
+h4ed
+he5do5
+he3l4i
+hel4lis
+hel4ly
+h5elo
+hem4p
+he2n
+hena4
+hen5at
+heo5r
+hep5
+h4era
+hera3p
+her4ba
+here5a
+h3ern
+h5erou
+h3ery
+h1es
+he2s5p
+he4t
+het4ed
+heu4
+h1f
+h1h
+hi5an
+hi4co
+high5
+h4il2
+himer4
+h4ina
+hion4e
+hi4p
+hir4l
+hi3ro
+hir4p
+hir4r
+his3el
+his4s
+hith5er
+hi2v
+4hk
+4h1l4
+hlan4
+h2lo
+hlo3ri
+4h1m
+hmet4
+2h1n
+h5odiz
+h5ods
+ho4g
+hoge4
+hol5ar
+3hol4e
+ho4ma
+home3
+hon4a
+ho5ny
+3hood
+hoon4
+hor5at
+ho5ris
+hort3e
+ho5ru
+hos4e
+ho5sen
+hos1p
+1hous
+house3
+hov5el
+4h5p
+4hr4
+hree5
+hro5niz
+hro3po
+4h1s2
+h4sh
+h4tar
+ht1en
+ht5es
+h4ty
+hu4g
+hu4min
+hun5ke
+hun4t
+hus3t4
+hu4t
+h1w
+h4wart
+hy3pe
+hy3ph
+hy2s
+2i1a
+i2al
+iam4
+iam5ete
+i2an
+4ianc
+ian3i
+4ian4t
+ia5pe
+iass4
+i4ativ
+ia4tric
+i4atu
+ibe4
+ib3era
+ib5ert
+ib5ia
+ib3in
+ib5it.
+ib5ite
+i1bl
+ib3li
+i5bo
+i1br
+i2b5ri
+i5bun
+4icam
+5icap
+4icar
+i4car.
+i4cara
+icas5
+i4cay
+iccu4
+4iceo
+4ich
+2ici
+i5cid
+ic5ina
+i2cip
+ic3ipa
+i4cly
+i2c5oc
+4i1cr
+5icra
+i4cry
+ic4te
+ictu2
+ic4t3ua
+ic3ula
+ic4um
+ic5uo
+i3cur
+2id
+i4dai
+id5anc
+id5d
+ide3al
+ide4s
+i2di
+id5ian
+idi4ar
+i5die
+id3io
+idi5ou
+id1it
+id5iu
+i3dle
+i4dom
+id3ow
+i4dr
+i2du
+id5uo
+2ie4
+ied4e
+5ie5ga
+ield3
+ien5a4
+ien4e
+i5enn
+i3enti
+i1er.
+i3esc
+i1est
+i3et
+4if.
+if5ero
+iff5en
+if4fr
+4ific.
+i3fie
+i3fl
+4ift
+2ig
+iga5b
+ig3era
+ight3i
+4igi
+i3gib
+ig3il
+ig3in
+ig3it
+i4g4l
+i2go
+ig3or
+ig5ot
+i5gre
+igu5i
+ig1ur
+i3h
+4i5i4
+i3j
+4ik
+i1la
+il3a4b
+i4lade
+i2l5am
+ila5ra
+i3leg
+il1er
+ilev4
+il5f
+il1i
+il3ia
+il2ib
+il3io
+il4ist
+2ilit
+il2iz
+ill5ab
+4iln
+il3oq
+il4ty
+il5ur
+il3v
+i4mag
+im3age
+ima5ry
+imenta5r
+4imet
+im1i
+im5ida
+imi5le
+i5mini
+4imit
+im4ni
+i3mon
+i2mu
+im3ula
+2in.
+i4n3au
+4inav
+incel4
+in3cer
+4ind
+in5dling
+2ine
+i3nee
+iner4ar
+i5ness
+4inga
+4inge
+in5gen
+4ingi
+in5gling
+4ingo
+4ingu
+2ini
+i5ni.
+i4nia
+in3io
+in1is
+i5nite.
+5initio
+in3ity
+4ink
+4inl
+2inn
+2i1no
+i4no4c
+ino4s
+i4not
+2ins
+in3se
+insur5a
+2int.
+2in4th
+in1u
+i5nus
+4iny
+2io
+4io.
+ioge4
+io2gr
+i1ol
+io4m
+ion3at
+ion4ery
+ion3i
+io5ph
+ior3i
+i4os
+io5th
+i5oti
+io4to
+i4our
+2ip
+ipe4
+iphras4
+ip3i
+ip4ic
+ip4re4
+ip3ul
+i3qua
+iq5uef
+iq3uid
+iq3ui3t
+4ir
+i1ra
+ira4b
+i4rac
+ird5e
+ire4de
+i4ref
+i4rel4
+i4res
+ir5gi
+ir1i
+iri5de
+ir4is
+iri3tu
+5i5r2iz
+ir4min
+iro4g
+5iron.
+ir5ul
+2is.
+is5ag
+is3ar
+isas5
+2is1c
+is3ch
+4ise
+is3er
+3isf
+is5han
+is3hon
+ish5op
+is3ib
+isi4d
+i5sis
+is5itiv
+4is4k
+islan4
+4isms
+i2so
+iso5mer
+is1p
+is2pi
+is4py
+4is1s
+is4sal
+issen4
+is4ses
+is4ta.
+is1te
+is1ti
+ist4ly
+4istral
+i2su
+is5us
+4ita.
+ita4bi
+i4tag
+4ita5m
+i3tan
+i3tat
+2ite
+it3era
+i5teri
+it4es
+2ith
+i1ti
+4itia
+4i2tic
+it3ica
+5i5tick
+it3ig
+it5ill
+i2tim
+2itio
+4itis
+i4tism
+i2t5o5m
+4iton
+i4tram
+it5ry
+4itt
+it3uat
+i5tud
+it3ul
+4itz.
+i1u
+2iv
+iv3ell
+iv3en.
+i4v3er.
+i4vers.
+iv5il.
+iv5io
+iv1it
+i5vore
+iv3o3ro
+i4v3ot
+4i5w
+ix4o
+4iy
+4izar
+izi4
+5izont
+5ja
+jac4q
+ja4p
+1je
+jer5s
+4jestie
+4jesty
+jew3
+jo4p
+5judg
+3ka.
+k3ab
+k5ag
+kais4
+kal4
+k1b
+k2ed
+1kee
+ke4g
+ke5li
+k3en4d
+k1er
+kes4
+k3est.
+ke4ty
+k3f
+kh4
+k1i
+5ki.
+5k2ic
+k4ill
+kilo5
+k4im
+k4in.
+kin4de
+k5iness
+kin4g
+ki4p
+kis4
+k5ish
+kk4
+k1l
+4kley
+4kly
+k1m
+k5nes
+1k2no
+ko5r
+kosh4
+k3ou
+kro5n
+4k1s2
+k4sc
+ks4l
+k4sy
+k5t
+k1w
+lab3ic
+l4abo
+laci4
+l4ade
+la3dy
+lag4n
+lam3o
+3land
+lan4dl
+lan5et
+lan4te
+lar4g
+lar3i
+las4e
+la5tan
+4lateli
+4lativ
+4lav
+la4v4a
+2l1b
+lbin4
+4l1c2
+lce4
+l3ci
+2ld
+l2de
+ld4ere
+ld4eri
+ldi4
+ld5is
+l3dr
+l4dri
+le2a
+le4bi
+left5
+5leg.
+5legg
+le4mat
+lem5atic
+4len.
+3lenc
+5lene.
+1lent
+le3ph
+le4pr
+lera5b
+ler4e
+3lerg
+3l4eri
+l4ero
+les2
+le5sco
+5lesq
+3less
+5less.
+l3eva
+lev4er.
+lev4era
+lev4ers
+3ley
+4leye
+2lf
+l5fr
+4l1g4
+l5ga
+lgar3
+l4ges
+lgo3
+2l3h
+li4ag
+li2am
+liar5iz
+li4as
+li4ato
+li5bi
+5licio
+li4cor
+4lics
+4lict.
+l4icu
+l3icy
+l3ida
+lid5er
+3lidi
+lif3er
+l4iff
+li4fl
+5ligate
+3ligh
+li4gra
+3lik
+4l4i4l
+lim4bl
+lim3i
+li4mo
+l4im4p
+l4ina
+1l4ine
+lin3ea
+lin3i
+link5er
+li5og
+4l4iq
+lis4p
+l1it
+l2it.
+5litica
+l5i5tics
+liv3er
+l1iz
+4lj
+lka3
+l3kal
+lka4t
+l1l
+l4law
+l2le
+l5lea
+l3lec
+l3leg
+l3lel
+l3le4n
+l3le4t
+ll2i
+l2lin4
+l5lina
+ll4o
+lloqui5
+ll5out
+l5low
+2lm
+l5met
+lm3ing
+l4mod
+lmon4
+2l1n2
+3lo.
+lob5al
+lo4ci
+4lof
+3logic
+l5ogo
+3logu
+lom3er
+5long
+lon4i
+l3o3niz
+lood5
+5lope.
+lop3i
+l3opm
+lora4
+lo4rato
+lo5rie
+lor5ou
+5los.
+los5et
+5losophiz
+5losophy
+los4t
+lo4ta
+loun5d
+2lout
+4lov
+2lp
+lpa5b
+l3pha
+l5phi
+lp5ing
+l3pit
+l4pl
+l5pr
+4l1r
+2l1s2
+l4sc
+l2se
+l4sie
+4lt
+lt5ag
+ltane5
+l1te
+lten4
+ltera4
+lth3i
+l5ties.
+ltis4
+l1tr
+ltu2
+ltur3a
+lu5a
+lu3br
+luch4
+lu3ci
+lu3en
+luf4
+lu5id
+lu4ma
+5lumi
+l5umn.
+5lumnia
+lu3o
+luo3r
+4lup
+luss4
+lus3te
+1lut
+l5ven
+l5vet4
+2l1w
+1ly
+4lya
+4lyb
+ly5me
+ly3no
+2lys4
+l5yse
+1ma
+2mab
+ma2ca
+ma5chine
+ma4cl
+mag5in
+5magn
+2mah
+maid5
+4mald
+ma3lig
+ma5lin
+mal4li
+mal4ty
+5mania
+man5is
+man3iz
+4map
+ma5rine.
+ma5riz
+mar4ly
+mar3v
+ma5sce
+mas4e
+mas1t
+5mate
+math3
+ma3tis
+4matiza
+4m1b
+mba4t5
+m5bil
+m4b3ing
+mbi4v
+4m5c
+4me.
+2med
+4med.
+5media
+me3die
+m5e5dy
+me2g
+mel5on
+mel4t
+me2m
+mem1o3
+1men
+men4a
+men5ac
+men4de
+4mene
+men4i
+mens4
+mensu5
+3ment
+men4te
+me5on
+m5ersa
+2mes
+3mesti
+me4ta
+met3al
+me1te
+me5thi
+m4etr
+5metric
+me5trie
+me3try
+me4v
+4m1f
+2mh
+5mi.
+mi3a
+mid4a
+mid4g
+mig4
+3milia
+m5i5lie
+m4ill
+min4a
+3mind
+m5inee
+m4ingl
+min5gli
+m5ingly
+min4t
+m4inu
+miot4
+m2is
+mis4er.
+mis5l
+mis4ti
+m5istry
+4mith
+m2iz
+4mk
+4m1l
+m1m
+mma5ry
+4m1n
+mn4a
+m4nin
+mn4o
+1mo
+4mocr
+5mocratiz
+mo2d1
+mo4go
+mois2
+moi5se
+4mok
+mo5lest
+mo3me
+mon5et
+mon5ge
+moni3a
+mon4ism
+mon4ist
+mo3niz
+monol4
+mo3ny.
+mo2r
+4mora.
+mos2
+mo5sey
+mo3sp
+moth3
+m5ouf
+3mous
+mo2v
+4m1p
+mpara5
+mpa5rab
+mpar5i
+m3pet
+mphas4
+m2pi
+mpi4a
+mp5ies
+m4p1in
+m5pir
+mp5is
+mpo3ri
+mpos5ite
+m4pous
+mpov5
+mp4tr
+m2py
+4m3r
+4m1s2
+m4sh
+m5si
+4mt
+1mu
+mula5r4
+5mult
+multi3
+3mum
+mun2
+4mup
+mu4u
+4mw
+1na
+2n1a2b
+n4abu
+4nac.
+na4ca
+n5act
+nag5er.
+nak4
+na4li
+na5lia
+4nalt
+na5mit
+n2an
+nanci4
+nan4it
+nank4
+nar3c
+4nare
+nar3i
+nar4l
+n5arm
+n4as
+nas4c
+nas5ti
+n2at
+na3tal
+nato5miz
+n2au
+nau3se
+3naut
+nav4e
+4n1b4
+ncar5
+n4ces.
+n3cha
+n5cheo
+n5chil
+n3chis
+nc1in
+nc4it
+ncour5a
+n1cr
+n1cu
+n4dai
+n5dan
+n1de
+nd5est.
+ndi4b
+n5d2if
+n1dit
+n3diz
+n5duc
+ndu4r
+nd2we
+2ne.
+n3ear
+ne2b
+neb3u
+ne2c
+5neck
+2ned
+ne4gat
+neg5ativ
+5nege
+ne4la
+nel5iz
+ne5mi
+ne4mo
+1nen
+4nene
+3neo
+ne4po
+ne2q
+n1er
+nera5b
+n4erar
+n2ere
+n4er5i
+ner4r
+1nes
+2nes.
+4nesp
+2nest
+4nesw
+3netic
+ne4v
+n5eve
+ne4w
+n3f
+n4gab
+n3gel
+nge4n4e
+n5gere
+n3geri
+ng5ha
+n3gib
+ng1in
+n5git
+n4gla
+ngov4
+ng5sh
+n1gu
+n4gum
+n2gy
+4n1h4
+nha4
+nhab3
+nhe4
+3n4ia
+ni3an
+ni4ap
+ni3ba
+ni4bl
+ni4d
+ni5di
+ni4er
+ni2fi
+ni5ficat
+n5igr
+nik4
+n1im
+ni3miz
+n1in
+5nine.
+nin4g
+ni4o
+5nis.
+nis4ta
+n2it
+n4ith
+3nitio
+n3itor
+ni3tr
+n1j
+4nk2
+n5kero
+n3ket
+nk3in
+n1kl
+4n1l
+n5m
+nme4
+nmet4
+4n1n2
+nne4
+nni3al
+nni4v
+nob4l
+no3ble
+n5ocl
+4n3o2d
+3noe
+4nog
+noge4
+nois5i
+no5l4i
+5nologis
+3nomic
+n5o5miz
+no4mo
+no3my
+no4n
+non4ag
+non5i
+n5oniz
+4nop
+5nop5o5li
+nor5ab
+no4rary
+4nosc
+nos4e
+nos5t
+no5ta
+1nou
+3noun
+nov3el3
+nowl3
+n1p4
+npi4
+npre4c
+n1q
+n1r
+nru4
+2n1s2
+ns5ab
+nsati4
+ns4c
+n2se
+n4s3es
+nsid1
+nsig4
+n2sl
+ns3m
+n4soc
+ns4pe
+n5spi
+nsta5bl
+n1t
+nta4b
+nter3s
+nt2i
+n5tib
+nti4er
+nti2f
+n3tine
+n4t3ing
+nti4p
+ntrol5li
+nt4s
+ntu3me
+nu1a
+nu4d
+nu5en
+nuf4fe
+n3uin
+3nu3it
+n4um
+nu1me
+n5umi
+3nu4n
+n3uo
+nu3tr
+n1v2
+n1w4
+nym4
+nyp4
+4nz
+n3za
+4oa
+oad3
+o5a5les
+oard3
+oas4e
+oast5e
+oat5i
+ob3a3b
+o5bar
+obe4l
+o1bi
+o2bin
+ob5ing
+o3br
+ob3ul
+o1ce
+och4
+o3chet
+ocif3
+o4cil
+o4clam
+o4cod
+oc3rac
+oc5ratiz
+ocre3
+5ocrit
+octor5a
+oc3ula
+o5cure
+od5ded
+od3ic
+odi3o
+o2do4
+odor3
+od5uct.
+od5ucts
+o4el
+o5eng
+o3er
+oe4ta
+o3ev
+o2fi
+of5ite
+ofit4t
+o2g5a5r
+og5ativ
+o4gato
+o1ge
+o5gene
+o5geo
+o4ger
+o3gie
+1o1gis
+og3it
+o4gl
+o5g2ly
+3ogniz
+o4gro
+ogu5i
+1ogy
+2ogyn
+o1h2
+ohab5
+oi2
+oic3es
+oi3der
+oiff4
+oig4
+oi5let
+o3ing
+oint5er
+o5ism
+oi5son
+oist5en
+oi3ter
+o5j
+2ok
+o3ken
+ok5ie
+o1la
+o4lan
+olass4
+ol2d
+old1e
+ol3er
+o3lesc
+o3let
+ol4fi
+ol2i
+o3lia
+o3lice
+ol5id.
+o3li4f
+o5lil
+ol3ing
+o5lio
+o5lis.
+ol3ish
+o5lite
+o5litio
+o5liv
+olli4e
+ol5ogiz
+olo4r
+ol5pl
+ol2t
+ol3ub
+ol3ume
+ol3un
+o5lus
+ol2v
+o2ly
+om5ah
+oma5l
+om5atiz
+om2be
+om4bl
+o2me
+om3ena
+om5erse
+o4met
+om5etry
+o3mia
+om3ic.
+om3ica
+o5mid
+om1in
+o5mini
+5ommend
+omo4ge
+o4mon
+om3pi
+ompro5
+o2n
+on1a
+on4ac
+o3nan
+on1c
+3oncil
+2ond
+on5do
+o3nen
+on5est
+on4gu
+on1ic
+o3nio
+on1is
+o5niu
+on3key
+on4odi
+on3omy
+on3s
+onspi4
+onspir5a
+onsu4
+onten4
+on3t4i
+ontif5
+on5um
+onva5
+oo2
+ood5e
+ood5i
+oo4k
+oop3i
+o3ord
+oost5
+o2pa
+ope5d
+op1er
+3opera
+4operag
+2oph
+o5phan
+o5pher
+op3ing
+o3pit
+o5pon
+o4posi
+o1pr
+op1u
+opy5
+o1q
+o1ra
+o5ra.
+o4r3ag
+or5aliz
+or5ange
+ore5a
+o5real
+or3ei
+ore5sh
+or5est.
+orew4
+or4gu
+4o5ria
+or3ica
+o5ril
+or1in
+o1rio
+or3ity
+o3riu
+or2mi
+orn2e
+o5rof
+or3oug
+or5pe
+3orrh
+or4se
+ors5en
+orst4
+or3thi
+or3thy
+or4ty
+o5rum
+o1ry
+os3al
+os2c
+os4ce
+o3scop
+4oscopi
+o5scr
+os4i4e
+os5itiv
+os3ito
+os3ity
+osi4u
+os4l
+o2so
+os4pa
+os4po
+os2ta
+o5stati
+os5til
+os5tit
+o4tan
+otele4g
+ot3er.
+ot5ers
+o4tes
+4oth
+oth5esi
+oth3i4
+ot3ic.
+ot5ica
+o3tice
+o3tif
+o3tis
+oto5s
+ou2
+ou3bl
+ouch5i
+ou5et
+ou4l
+ounc5er
+oun2d
+ou5v
+ov4en
+over4ne
+over3s
+ov4ert
+o3vis
+oviti4
+o5v4ol
+ow3der
+ow3el
+ow5est
+ow1i
+own5i
+o4wo
+oy1a
+1pa
+pa4ca
+pa4ce
+pac4t
+p4ad
+5pagan
+p3agat
+p4ai
+pain4
+p4al
+pan4a
+pan3el
+pan4ty
+pa3ny
+pa1p
+pa4pu
+para5bl
+par5age
+par5di
+3pare
+par5el
+p4a4ri
+par4is
+pa2te
+pa5ter
+5pathic
+pa5thy
+pa4tric
+pav4
+3pay
+4p1b
+pd4
+4pe.
+3pe4a
+pear4l
+pe2c
+2p2ed
+3pede
+3pedi
+pedia4
+ped4ic
+p4ee
+pee4d
+pek4
+pe4la
+peli4e
+pe4nan
+p4enc
+pen4th
+pe5on
+p4era.
+pera5bl
+p4erag
+p4eri
+peri5st
+per4mal
+perme5
+p4ern
+per3o
+per3ti
+pe5ru
+per1v
+pe2t
+pe5ten
+pe5tiz
+4pf
+4pg
+4ph.
+phar5i
+phe3no
+ph4er
+ph4es.
+ph1ic
+5phie
+ph5ing
+5phisti
+3phiz
+ph2l
+3phob
+3phone
+5phoni
+pho4r
+4phs
+ph3t
+5phu
+1phy
+pi3a
+pian4
+pi4cie
+pi4cy
+p4id
+p5ida
+pi3de
+5pidi
+3piec
+pi3en
+pi4grap
+pi3lo
+pi2n
+p4in.
+pind4
+p4ino
+3pi1o
+pion4
+p3ith
+pi5tha
+pi2tu
+2p3k2
+1p2l2
+3plan
+plas5t
+pli3a
+pli5er
+4plig
+pli4n
+ploi4
+plu4m
+plum4b
+4p1m
+2p3n
+po4c
+5pod.
+po5em
+po3et5
+5po4g
+poin2
+5point
+poly5t
+po4ni
+po4p
+1p4or
+po4ry
+1pos
+pos1s
+p4ot
+po4ta
+5poun
+4p1p
+ppa5ra
+p2pe
+p4ped
+p5pel
+p3pen
+p3per
+p3pet
+ppo5site
+pr2
+pray4e
+5preci
+pre5co
+pre3em
+pref5ac
+pre4la
+pre3r
+p3rese
+3press
+pre5ten
+pre3v
+5pri4e
+prin4t3
+pri4s
+pris3o
+p3roca
+prof5it
+pro3l
+pros3e
+pro1t
+2p1s2
+p2se
+ps4h
+p4sib
+2p1t
+pt5a4b
+p2te
+p2th
+pti3m
+ptu4r
+p4tw
+pub3
+pue4
+puf4
+pul3c
+pu4m
+pu2n
+pur4r
+5pus
+pu2t
+5pute
+put3er
+pu3tr
+put4ted
+put4tin
+p3w
+qu2
+qua5v
+2que.
+3quer
+3quet
+2rab
+ra3bi
+rach4e
+r5acl
+raf5fi
+raf4t
+r2ai
+ra4lo
+ram3et
+r2ami
+rane5o
+ran4ge
+r4ani
+ra5no
+rap3er
+3raphy
+rar5c
+rare4
+rar5ef
+4raril
+r2as
+ration4
+rau4t
+ra5vai
+rav3el
+ra5zie
+r1b
+r4bab
+r4bag
+rbi2
+rbi4f
+r2bin
+r5bine
+rb5ing.
+rb4o
+r1c
+r2ce
+rcen4
+r3cha
+rch4er
+r4ci4b
+rc4it
+rcum3
+r4dal
+rd2i
+rdi4a
+rdi4er
+rdin4
+rd3ing
+2re.
+re1al
+re3an
+re5arr
+5reav
+re4aw
+r5ebrat
+rec5oll
+rec5ompe
+re4cre
+2r2ed
+re1de
+re3dis
+red5it
+re4fac
+re2fe
+re5fer.
+re3fi
+re4fy
+reg3is
+re5it
+re1li
+re5lu
+r4en4ta
+ren4te
+re1o
+re5pin
+re4posi
+re1pu
+r1er4
+r4eri
+rero4
+re5ru
+r4es.
+re4spi
+ress5ib
+res2t
+re5stal
+re3str
+re4ter
+re4ti4z
+re3tri
+reu2
+re5uti
+rev2
+re4val
+rev3el
+r5ev5er.
+re5vers
+re5vert
+re5vil
+rev5olu
+re4wh
+r1f
+rfu4
+r4fy
+rg2
+rg3er
+r3get
+r3gic
+rgi4n
+rg3ing
+r5gis
+r5git
+r1gl
+rgo4n
+r3gu
+rh4
+4rh.
+4rhal
+ri3a
+ria4b
+ri4ag
+r4ib
+rib3a
+ric5as
+r4ice
+4rici
+5ricid
+ri4cie
+r4ico
+rid5er
+ri3enc
+ri3ent
+ri1er
+ri5et
+rig5an
+5rigi
+ril3iz
+5riman
+rim5i
+3rimo
+rim4pe
+r2ina
+5rina.
+rin4d
+rin4e
+rin4g
+ri1o
+5riph
+riph5e
+ri2pl
+rip5lic
+r4iq
+r2is
+r4is.
+ris4c
+r3ish
+ris4p
+ri3ta3b
+r5ited.
+rit5er.
+rit5ers
+rit3ic
+ri2tu
+rit5ur
+riv5el
+riv3et
+riv3i
+r3j
+r3ket
+rk4le
+rk4lin
+r1l
+rle4
+r2led
+r4lig
+r4lis
+rl5ish
+r3lo4
+r1m
+rma5c
+r2me
+r3men
+rm5ers
+rm3ing
+r4ming.
+r4mio
+r3mit
+r4my
+r4nar
+r3nel
+r4ner
+r5net
+r3ney
+r5nic
+r1nis4
+r3nit
+r3niv
+rno4
+r4nou
+r3nu
+rob3l
+r2oc
+ro3cr
+ro4e
+ro1fe
+ro5fil
+rok2
+ro5ker
+5role.
+rom5ete
+rom4i
+rom4p
+ron4al
+ron4e
+ro5n4is
+ron4ta
+1room
+5root
+ro3pel
+rop3ic
+ror3i
+ro5ro
+ros5per
+ros4s
+ro4the
+ro4ty
+ro4va
+rov5el
+rox5
+r1p
+r4pea
+r5pent
+rp5er.
+r3pet
+rp4h4
+rp3ing
+r3po
+r1r4
+rre4c
+rre4f
+r4reo
+rre4st
+rri4o
+rri4v
+rron4
+rros4
+rrys4
+4rs2
+r1sa
+rsa5ti
+rs4c
+r2se
+r3sec
+rse4cr
+rs5er.
+rs3es
+rse5v2
+r1sh
+r5sha
+r1si
+r4si4b
+rson3
+r1sp
+r5sw
+rtach4
+r4tag
+r3teb
+rten4d
+rte5o
+r1ti
+rt5ib
+rti4d
+r4tier
+r3tig
+rtil3i
+rtil4l
+r4tily
+r4tist
+r4tiv
+r3tri
+rtroph4
+rt4sh
+ru3a
+ru3e4l
+ru3en
+ru4gl
+ru3in
+rum3pl
+ru2n
+runk5
+run4ty
+r5usc
+ruti5n
+rv4e
+rvel4i
+r3ven
+rv5er.
+r5vest
+r3vey
+r3vic
+rvi4v
+r3vo
+r1w
+ry4c
+5rynge
+ry3t
+sa2
+2s1ab
+5sack
+sac3ri
+s3act
+5sai
+salar4
+sal4m
+sa5lo
+sal4t
+3sanc
+san4de
+s1ap
+sa5ta
+5sa3tio
+sat3u
+sau4
+sa5vor
+5saw
+4s5b
+scan4t5
+sca4p
+scav5
+s4ced
+4scei
+s4ces
+sch2
+s4cho
+3s4cie
+5scin4d
+scle5
+s4cli
+scof4
+4scopy
+scour5a
+s1cu
+4s5d
+4se.
+se4a
+seas4
+sea5w
+se2c3o
+3sect
+4s4ed
+se4d4e
+s5edl
+se2g
+seg3r
+5sei
+se1le
+5self
+5selv
+4seme
+se4mol
+sen5at
+4senc
+sen4d
+s5ened
+sen5g
+s5enin
+4sentd
+4sentl
+sep3a3
+4s1er.
+s4erl
+ser4o
+4servo
+s1e4s
+se5sh
+ses5t
+5se5um
+5sev
+sev3en
+sew4i
+5sex
+4s3f
+2s3g
+s2h
+2sh.
+sh1er
+5shev
+sh1in
+sh3io
+3ship
+shiv5
+sho4
+sh5old
+shon3
+shor4
+short5
+4shw
+si1b
+s5icc
+3side.
+5sides
+5sidi
+si5diz
+4signa
+sil4e
+4sily
+2s1in
+s2ina
+5sine.
+s3ing
+1sio
+5sion
+sion5a
+si2r
+sir5a
+1sis
+3sitio
+5siu
+1siv
+5siz
+sk2
+4ske
+s3ket
+sk5ine
+sk5ing
+s1l2
+s3lat
+s2le
+slith5
+2s1m
+s3ma
+small3
+sman3
+smel4
+s5men
+5smith
+smol5d4
+s1n4
+1so
+so4ce
+soft3
+so4lab
+sol3d2
+so3lic
+5solv
+3som
+3s4on.
+sona4
+son4g
+s4op
+5sophic
+s5ophiz
+s5ophy
+sor5c
+sor5d
+4sov
+so5vi
+2spa
+5spai
+spa4n
+spen4d
+2s5peo
+2sper
+s2phe
+3spher
+spho5
+spil4
+sp5ing
+4spio
+s4ply
+s4pon
+spor4
+4spot
+squal4l
+s1r
+2ss
+s1sa
+ssas3
+s2s5c
+s3sel
+s5seng
+s4ses.
+s5set
+s1si
+s4sie
+ssi4er
+ss5ily
+s4sl
+ss4li
+s4sn
+sspend4
+ss2t
+ssur5a
+ss5w
+2st.
+s2tag
+s2tal
+stam4i
+5stand
+s4ta4p
+5stat.
+s4ted
+stern5i
+s5tero
+ste2w
+stew5a
+s3the
+st2i
+s4ti.
+s5tia
+s1tic
+5stick
+s4tie
+s3tif
+st3ing
+5stir
+s1tle
+5stock
+stom3a
+5stone
+s4top
+3store
+st4r
+s4trad
+5stratu
+s4tray
+s4trid
+4stry
+4st3w
+s2ty
+1su
+su1al
+su4b3
+su2g3
+su5is
+suit3
+s4ul
+su2m
+sum3i
+su2n
+su2r
+4sv
+sw2
+4swo
+s4y
+4syc
+3syl
+syn5o
+sy5rin
+1ta
+3ta.
+2tab
+ta5bles
+5taboliz
+4taci
+ta5do
+4taf4
+tai5lo
+ta2l
+ta5la
+tal5en
+tal3i
+4talk
+tal4lis
+ta5log
+ta5mo
+tan4de
+tanta3
+ta5per
+ta5pl
+tar4a
+4tarc
+4tare
+ta3riz
+tas4e
+ta5sy
+4tatic
+ta4tur
+taun4
+tav4
+2taw
+tax4is
+2t1b
+4tc
+t4ch
+tch5et
+4t1d
+4te.
+tead4i
+4teat
+tece4
+5tect
+2t1ed
+te5di
+1tee
+teg4
+te5ger
+te5gi
+3tel.
+teli4
+5tels
+te2ma2
+tem3at
+3tenan
+3tenc
+3tend
+4tenes
+1tent
+ten4tag
+1teo
+te4p
+te5pe
+ter3c
+5ter3d
+1teri
+ter5ies
+ter3is
+teri5za
+5ternit
+ter5v
+4tes.
+4tess
+t3ess.
+teth5e
+3teu
+3tex
+4tey
+2t1f
+4t1g
+2th.
+than4
+th2e
+4thea
+th3eas
+the5at
+the3is
+3thet
+th5ic.
+th5ica
+4thil
+5think
+4thl
+th5ode
+5thodic
+4thoo
+thor5it
+tho5riz
+2ths
+1tia
+ti4ab
+ti4ato
+2ti2b
+4tick
+t4ico
+t4ic1u
+5tidi
+3tien
+tif2
+ti5fy
+2tig
+5tigu
+till5in
+1tim
+4timp
+tim5ul
+2t1in
+t2ina
+3tine.
+3tini
+1tio
+ti5oc
+tion5ee
+5tiq
+ti3sa
+3tise
+tis4m
+ti5so
+tis4p
+5tistica
+ti3tl
+ti4u
+1tiv
+tiv4a
+1tiz
+ti3za
+ti3zen
+2tl
+t5la
+tlan4
+3tle.
+3tled
+3tles.
+t5let.
+t5lo
+4t1m
+tme4
+2t1n2
+1to
+to3b
+to5crat
+4todo
+2tof
+to2gr
+to5ic
+to2ma
+tom4b
+to3my
+ton4ali
+to3nat
+4tono
+4tony
+to2ra
+to3rie
+tor5iz
+tos2
+5tour
+4tout
+to3war
+4t1p
+1tra
+tra3b
+tra5ch
+traci4
+trac4it
+trac4te
+tras4
+tra5ven
+trav5es5
+tre5f
+tre4m
+trem5i
+5tria
+tri5ces
+5tricia
+4trics
+2trim
+tri4v
+tro5mi
+tron5i
+4trony
+tro5phe
+tro3sp
+tro3v
+tru5i
+trus4
+4t1s2
+t4sc
+tsh4
+t4sw
+4t3t2
+t4tes
+t5to
+ttu4
+1tu
+tu1a
+tu3ar
+tu4bi
+tud2
+4tue
+4tuf4
+5tu3i
+3tum
+tu4nis
+2t3up.
+3ture
+5turi
+tur3is
+tur5o
+tu5ry
+3tus
+4tv
+tw4
+4t1wa
+twis4
+4two
+1ty
+4tya
+2tyl
+type3
+ty5ph
+4tz
+tz4e
+4uab
+uac4
+ua5na
+uan4i
+uar5ant
+uar2d
+uar3i
+uar3t
+u1at
+uav4
+ub4e
+u4bel
+u3ber
+u4bero
+u1b4i
+u4b5ing
+u3ble.
+u3ca
+uci4b
+uc4it
+ucle3
+u3cr
+u3cu
+u4cy
+ud5d
+ud3er
+ud5est
+udev4
+u1dic
+ud3ied
+ud3ies
+ud5is
+u5dit
+u4don
+ud4si
+u4du
+u4ene
+uens4
+uen4te
+uer4il
+3ufa
+u3fl
+ugh3en
+ug5in
+2ui2
+uil5iz
+ui4n
+u1ing
+uir4m
+uita4
+uiv3
+uiv4er.
+u5j
+4uk
+u1la
+ula5b
+u5lati
+ulch4
+5ulche
+ul3der
+ul4e
+u1len
+ul4gi
+ul2i
+u5lia
+ul3ing
+ul5ish
+ul4lar
+ul4li4b
+ul4lis
+4ul3m
+u1l4o
+4uls
+uls5es
+ul1ti
+ultra3
+4ultu
+u3lu
+ul5ul
+ul5v
+um5ab
+um4bi
+um4bly
+u1mi
+u4m3ing
+umor5o
+um2p
+unat4
+u2ne
+un4er
+u1ni
+un4im
+u2nin
+un5ish
+uni3v
+un3s4
+un4sw
+unt3ab
+un4ter.
+un4tes
+unu4
+un5y
+un5z
+u4ors
+u5os
+u1ou
+u1pe
+uper5s
+u5pia
+up3ing
+u3pl
+up3p
+upport5
+upt5ib
+uptu4
+u1ra
+4ura.
+u4rag
+u4ras
+ur4be
+urc4
+ur1d
+ure5at
+ur4fer
+ur4fr
+u3rif
+uri4fic
+ur1in
+u3rio
+u1rit
+ur3iz
+ur2l
+url5ing.
+ur4no
+uros4
+ur4pe
+ur4pi
+urs5er
+ur5tes
+ur3the
+urti4
+ur4tie
+u3ru
+2us
+u5sad
+u5san
+us4ap
+usc2
+us3ci
+use5a
+u5sia
+u3sic
+us4lin
+us1p
+us5sl
+us5tere
+us1tr
+u2su
+usur4
+uta4b
+u3tat
+4ute.
+4utel
+4uten
+uten4i
+4u1t2i
+uti5liz
+u3tine
+ut3ing
+ution5a
+u4tis
+5u5tiz
+u4t1l
+ut5of
+uto5g
+uto5matic
+u5ton
+u4tou
+uts4
+u3u
+uu4m
+u1v2
+uxu3
+uz4e
+1va
+5va.
+2v1a4b
+vac5il
+vac3u
+vag4
+va4ge
+va5lie
+val5o
+val1u
+va5mo
+va5niz
+va5pi
+var5ied
+3vat
+4ve.
+4ved
+veg3
+v3el.
+vel3li
+ve4lo
+v4ely
+ven3om
+v5enue
+v4erd
+5vere.
+v4erel
+v3eren
+ver5enc
+v4eres
+ver3ie
+vermi4n
+3verse
+ver3th
+v4e2s
+4ves.
+ves4te
+ve4te
+vet3er
+ve4ty
+vi5ali
+5vian
+5vide.
+5vided
+4v3iden
+5vides
+5vidi
+v3if
+vi5gn
+vik4
+2vil
+5vilit
+v3i3liz
+v1in
+4vi4na
+v2inc
+vin5d
+4ving
+vio3l
+v3io4r
+vi1ou
+vi4p
+vi5ro
+vis3it
+vi3so
+vi3su
+4viti
+vit3r
+4vity
+3viv
+5vo.
+voi4
+3vok
+vo4la
+v5ole
+5volt
+3volv
+vom5i
+vor5ab
+vori4
+vo4ry
+vo4ta
+4votee
+4vv4
+v4y
+w5abl
+2wac
+wa5ger
+wag5o
+wait5
+w5al.
+wam4
+war4t
+was4t
+wa1te
+wa5ver
+w1b
+wea5rie
+weath3
+wed4n
+weet3
+wee5v
+wel4l
+w1er
+west3
+w3ev
+whi4
+wi2
+wil2
+will5in
+win4de
+win4g
+wir4
+3wise
+with3
+wiz5
+w4k
+wl4es
+wl3in
+w4no
+1wo2
+wom1
+wo5ven
+w5p
+wra4
+wri4
+writa4
+w3sh
+ws4l
+ws4pe
+w5s4t
+4wt
+wy4
+x1a
+xac5e
+x4ago
+xam3
+x4ap
+xas5
+x3c2
+x1e
+xe4cuto
+x2ed
+xer4i
+xe5ro
+x1h
+xhi2
+xhil5
+xhu4
+x3i
+xi5a
+xi5c
+xi5di
+x4ime
+xi5miz
+x3o
+x4ob
+x3p
+xpan4d
+xpecto5
+xpe3d
+x1t2
+x3ti
+x1u
+xu3a
+xx4
+y5ac
+3yar4
+y5at
+y1b
+y1c
+y2ce
+yc5er
+y3ch
+ych4e
+ycom4
+ycot4
+y1d
+y5ee
+y1er
+y4erf
+yes4
+ye4t
+y5gi
+4y3h
+y1i
+y3la
+ylla5bl
+y3lo
+y5lu
+ymbol5
+yme4
+ympa3
+yn3chr
+yn5d
+yn5g
+yn5ic
+5ynx
+y1o4
+yo5d
+y4o5g
+yom4
+yo5net
+y4ons
+y4os
+y4ped
+yper5
+yp3i
+y3po
+y4poc
+yp2ta
+y5pu
+yra5m
+yr5ia
+y3ro
+yr4r
+ys4c
+y3s2e
+ys3ica
+ys3io
+3ysis
+y4so
+yss4
+ys1t
+ys3ta
+ysur4
+y3thin
+yt3ic
+y1w
+za1
+z5a2b
+zar2
+4zb
+2ze
+ze4n
+ze4p
+z1er
+ze3ro
+zet4
+2z1i
+z4il
+z4is
+5zl
+4zm
+1zo
+zo4m
+zo5ol
+zte4
+4z1z2
+z4zy
+.con5gr
+.de5riva
+.dri5v4
+.eth1y6l1
+.eu4ler
+.ev2
+.ever5si5b
+.ga4s1om1
+.ge4ome
+.ge5ot1
+.he3mo1
+.he3p6a
+.he3roe
+.in5u2t
+.kil2n3i
+.ko6r1te1
+.le6ices
+.me4ga1l
+.met4ala
+.mim5i2c1
+.mi1s4ers
+.ne6o3f
+.noe1th
+.non1e2m
+.poly1s
+.post1am
+.pre1am
+.rav5en1o
+.semi5
+.sem4ic
+.semid6
+.semip4
+.semir4
+.sem6is4
+.semiv4
+.sph6in1
+.spin1o
+.ta5pes1tr
+.te3legr
+.to6pog
+.to2q
+.un3at5t
+.un5err5
+.vi2c3ar
+.we2b1l
+.re1e4c
+a5bolic
+a2cabl
+af6fish
+am1en3ta5b
+anal6ys
+ano5a2c
+ans5gr
+ans3v
+anti1d
+an3ti1n2
+anti1re
+a4pe5able
+ar3che5t
+ar2range
+as5ymptot
+ath3er1o1s
+at6tes.
+augh4tl
+au5li5f
+av3iou
+back2er.
+ba6r1onie
+ba1thy
+bbi4t
+be2vie
+bi5d2if
+bil2lab
+bio5m
+bi1orb
+bio1rh
+b1i3tive
+blan2d1
+blin2d1
+blon2d2
+bor1no5
+bo2t1u1l
+brus4q
+bus6i2er
+bus6i2es
+buss4ing
+but2ed.
+but4ted
+cad5e1m
+cat1a1s2
+4chs.
+chs3hu
+chie5vo
+cig3a3r
+cin2q
+cle4ar
+co6ph1o3n
+cous2ti
+cri3tie
+croc1o1d
+cro5e2co
+c2tro3me6c
+1cu2r1ance
+2d3alone
+data1b
+dd5a5b
+d2d5ib
+de4als.
+de5clar1
+de2c5lina
+de3fin3iti
+de2mos
+des3ic
+de2tic
+dic1aid
+dif5fra
+3di1methy
+di2ren
+di2rer
+2d1lead
+2d1li2e
+3do5word
+dren1a5l
+drif2t1a
+d1ri3pleg5
+drom3e5d
+d3tab
+du2al.
+du1op1o1l
+ea4n3ies
+e3chas
+edg1l
+ed1uling
+eli2t1is
+e1loa
+en1dix
+eo3grap
+1e6p3i3neph1
+e2r3i4an.
+e3spac6i
+eth1y6l1ene
+5eu2clid1
+feb1rua
+fermi1o
+3fich
+fit5ted.
+fla1g6el
+flow2er.
+3fluor
+gen2cy.
+ge3o1d
+ght1we
+g1lead
+get2ic.
+4g1lish
+5glo5bin
+1g2nac
+gnet1ism
+gno5mo
+g2n1or.
+g2noresp
+2g1o4n3i1za
+graph5er.
+griev1
+g1utan
+hair1s
+ha2p3ar5r
+hatch1
+hex2a3
+hite3sid
+h3i5pel1a4
+hnau3z
+ho6r1ic.
+h2t1eou
+hypo1tha
+id4ios
+ifac1et
+ign4it
+ignit1er
+i4jk
+im3ped3a
+infra1s2
+i5nitely.
+irre6v3oc
+i1tesima
+ith5i2l
+itin5er5ar
+janu3a
+japan1e2s
+je1re1m
+1ke6ling
+1ki5netic
+1kovian
+k3sha
+la4c3i5e
+lai6n3ess
+lar5ce1n
+l3chai
+l3chil6d1
+lead6er.
+lea4s1a
+1lec3ta6b
+le3g6en2dre
+1le1noid
+lith1o5g
+ll1fl
+l2l3ish
+l5mo3nell
+lo1bot1o1
+lo2ges.
+load4ed.
+load6er.
+l3tea
+lth5i2ly
+lue1p
+1lunk3er
+1lum5bia.
+3lyg1a1mi
+ly5styr
+ma1la1p
+m2an.
+man3u1sc
+mar1gin1
+medi2c
+med3i3cin
+medio6c1
+me3gran3
+m2en.
+3mi3da5b
+3milita
+mil2l1ag
+mil5li5li
+mi6n3is.
+mi1n2ut1er
+mi1n2ut1est
+m3ma1b
+5maph1ro1
+5moc1ra1t
+mo5e2las
+mol1e5c
+mon4ey1l
+mono3ch
+mo4no1en
+moro6n5is
+mono1s6
+moth4et2
+m1ou3sin
+m5shack2
+mu2dro
+mul2ti5u
+n3ar4chs.
+n3ch2es1t
+ne3back
+2ne1ski
+n1dieck
+nd3thr
+nfi6n3ites
+4n5i4an.
+nge5nes
+ng1ho
+ng1spr
+nk3rup
+n5less
+5noc3er1os
+nom1a6l
+nom5e1no
+n1o1mist
+non1eq
+non1i4so
+5nop1oly.
+no1vemb
+ns5ceiv
+ns4moo
+ntre1p
+obli2g1
+o3chas
+odel3li
+odit1ic
+oerst2
+oke1st
+o3les3ter
+oli3gop1o1
+o1lo3n4om
+o3mecha6
+onom1ic
+o3norma
+o3no2t1o3n
+o3nou
+op1ism.
+or4tho3ni4t
+orth1ri
+or5tively
+o4s3pher
+o5test1er
+o5tes3tor
+oth3e1o1s
+ou3ba3do
+o6v3i4an.
+oxi6d1ic
+pal6mat
+parag6ra4
+par4a1le
+param4
+para3me
+pee2v1
+phi2l3ant
+phi5lat1e3l
+pi2c1a3d
+pli2c1ab
+pli5nar
+poin3ca
+1pole.
+poly1e
+po3lyph1ono
+1prema3c
+pre1neu
+pres2pli
+pro2cess
+proc3i3ty.
+pro2g1e
+3pseu2d
+pseu3d6o3d2
+pseu3d6o3f2
+pto3mat4
+p5trol3
+pu5bes5c
+quain2t1e
+qu6a3si3
+quasir6
+quasis6
+quin5tes5s
+qui3v4ar
+r1abolic
+3rab1o1loi
+ra3chu
+r3a3dig
+radi1o6g
+r2amen
+3ra4m5e1triz
+ra3mou
+ra5n2has
+ra1or
+r3bin1ge
+re2c3i1pr
+rec5t6ang
+re4t1ribu
+r3ial.
+riv1o1l
+6rk.
+rk1ho
+r1krau
+6rks.
+r5le5qu
+ro1bot1
+ro5e2las
+ro5epide1
+ro3mesh
+ro1tron
+r3pau5li
+rse1rad1i
+r1thou
+r1treu
+r1veil
+rz1sc
+sales3c
+sales5w
+5sa3par5il
+sca6p1er
+sca2t1ol
+s4chitz
+schro1ding1
+1sci2utt
+scrap4er.
+scy4th1
+sem1a1ph
+se3mes1t
+se1mi6t5ic
+sep3temb
+shoe1st
+sid2ed.
+side5st
+side5sw
+si5resid
+sky1sc
+3slova1kia
+3s2og1a1my
+so2lute
+3s2pace
+1s2pacin
+spe3cio
+spher1o
+spi2c1il
+spokes5w
+sports3c
+sports3w
+s3qui3to
+s2s1a3chu1
+ss3hat
+s2s3i4an.
+s5sign5a3b
+1s2tamp
+s2t1ant5shi
+star3tli
+sta1ti
+st5b
+1stor1ab
+strat1a1g
+strib5ut
+st5scr
+stu1pi4d1
+styl1is
+su2per1e6
+1sync
+1syth3i2
+swimm6
+5tab1o1lism
+ta3gon.
+talk1a5
+t1a1min
+t6ap6ath
+5tar2rh
+tch1c
+tch3i1er
+t1cr
+teach4er.
+tele2g
+tele1r6o
+3ter1gei
+ter2ic.
+t3ess2es
+tha4l1am
+tho3don
+th1o5gen1i
+tho1k2er
+thy4l1an
+thy3sc
+2t3i4an.
+ti2n3o1m
+t1li2er
+tolo2gy
+tot3ic
+trai3tor1
+tra1vers
+travers3a3b
+treach1e
+tr4ial.
+3tro1le1um
+trof4ic.
+tro3fit
+tro1p2is
+3trop1o5les
+3trop1o5lis
+t1ro1pol3it
+tsch3ie
+ttrib1ut1
+turn3ar
+t1wh
+ty2p5al
+ua3drati
+uad1ratu
+u5do3ny
+uea1m
+u2r1al.
+uri4al.
+us2er.
+v1ativ
+v1oir5du1
+va6guer
+vaude3v
+1verely.
+v1er1eig
+ves1tite
+vi1vip3a3r
+voice1p
+waste3w6a2
+wave1g4
+w3c
+week1n
+wide5sp
+wo4k1en
+wrap3aro
+writ6er.
+x1q
+xquis3
+y5che3d
+ym5e5try
+y1stro
+yes5ter1y
+z3ian.
+z3o1phr
+z2z3w
diff --git a/test/lang.html b/test/lang.html
new file mode 100644
index 00000000..f323faa8
--- /dev/null
+++ b/test/lang.html
@@ -0,0 +1,12 @@
+<p>Bla bla bla bla bla bla bla bla bla Bla bla bla bla bla
+bla bla bla bla bla:
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung</p>
+<p lang="de">Bla bla bla bla bla bla bla bla bla Bla bla bla bla bla
+bla bla bla bla bla:
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung</p>
+<p lang="en">Bla bla bla bla bla bla bla bla bla Bla bla bla bla bla
+bla bla bla bla bla:
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung</p>
+<p lang="es">Bla bla bla bla bla bla bla bla bla Bla bla bla bla bla
+bla bla bla bla bla:
+Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung</p>
diff --git a/test/liang.cc b/test/liang.cc
new file mode 100644
index 00000000..6b5a424a
--- /dev/null
+++ b/test/liang.cc
@@ -0,0 +1,53 @@
+
+#include "../dw/fltkcore.hh"
+#include "../dw/hyphenator.hh"
+
+void hyphenateWord (dw::core::Platform *p, const char *word)
+{
+ dw::Hyphenator *h = dw::Hyphenator::getHyphenator (p, "de");
+
+ int numBreaks;
+ int *breakPos = h->hyphenateWord (word, &numBreaks);
+ for (int i = 0; i < numBreaks + 1; i++) {
+ if (i != 0)
+ printf (" \xc2\xad ");
+ int start = (i == 0 ? 0 : breakPos[i - 1]);
+ int end = (i == numBreaks ? strlen (word) : breakPos[i]);
+ for (int j = start; j < end; j++)
+ putchar (word[j]);
+ }
+ putchar ('\n');
+ if (breakPos)
+ delete breakPos;
+}
+
+int main (int argc, char *argv[])
+{
+ dw::fltk::FltkPlatform p;
+
+ hyphenateWord (&p, "...");
+ hyphenateWord (&p, "Jahrhundertroman");
+ hyphenateWord (&p, "JAHRHUNDERTROMAN");
+ hyphenateWord (&p, "„Jahrhundertroman“");
+ hyphenateWord (&p, "währenddessen");
+ hyphenateWord (&p, "„währenddessen“");
+ hyphenateWord (&p, "Ückendorf");
+ hyphenateWord (&p, "über");
+ hyphenateWord (&p, "aber");
+ hyphenateWord (&p, "Ackermann");
+ hyphenateWord (&p, "„Ackermann“");
+ hyphenateWord (&p, "entscheidet.");
+ hyphenateWord (&p, "Grundstücksverkehrsgenehmigungszuständigkeits"
+ "übertragungsverordnung");
+ hyphenateWord (&p, "„Grundstücksverkehrsgenehmigungszuständigkeits"
+ "übertragungsverordnung“");
+ hyphenateWord (&p, "Grundstücksverkehrsgenehmigungszuständigkeit");
+ hyphenateWord (&p, "„Grundstücksverkehrsgenehmigungszuständigkeit“");
+ hyphenateWord (&p, "(6R,7R)-7-[2-(2-Amino-4-thiazolyl)-glyoxylamido]-3-"
+ "(2,5-dihydro-6-hydroxy-2-methyl-5-oxo-1,2,4-triazin-3-yl-"
+ "thiomethyl)-8-oxo-5-thia-1-azabicyclo[4.2.0]oct-2-en-2-"
+ "carbonsäure-7²-(Z)-(O-methyloxim)");
+ hyphenateWord (&p, "Abtei-Stadt");
+
+ return 0;
+}
diff --git a/test/notsosimplevector.cc b/test/notsosimplevector.cc
new file mode 100644
index 00000000..228734ee
--- /dev/null
+++ b/test/notsosimplevector.cc
@@ -0,0 +1,63 @@
+#include "../lout/misc.hh"
+
+static void print (lout::misc::NotSoSimpleVector<int> *v)
+{
+ for (int i = 0; i < v->size(); i++) {
+ // Uncomment für debugging, after making the respective members public.
+ //if (v->startExtra != -1 && i == v->startExtra + v->numExtra)
+ // printf (" ]");
+ if (i > 0)
+ printf (", ");
+ //if (i == v->startExtra)
+ // printf ("[ ");
+
+ printf ("%d", v->get(i));
+ }
+
+ printf (" (%d elements)\n", v->size ());
+}
+
+int main (int argc, char *argv[])
+{
+ lout::misc::NotSoSimpleVector<int> v(1);
+
+ for (int i = 1; i <= 10; i++) {
+ v.increase ();
+ v.set(v.size () - 1, i);
+ }
+
+ print (&v);
+
+ v.insert (2, 4);
+ for (int i = 0; i < 5; i++)
+ v.set (2 + i, 31 + i);
+
+ print (&v);
+
+ v.insert (8, 4);
+ for (int i = 0; i < 5; i++)
+ v.set (8 + i, 51 + i);
+
+ print (&v);
+
+ v.insert (10, 4);
+ for (int i = 0; i < 5; i++)
+ v.set (10 + i, 531 + i);
+
+ print (&v);
+
+ v.insert (1, 4);
+ for (int i = 0; i < 5; i++)
+ v.set (1 + i, 21 + i);
+
+ print (&v);
+
+ int n = v.size ();
+ v.insert (n, 5);
+ for (int i = 0; i < 5; i++)
+ v.set (n + i, 101 + i);
+
+ print (&v);
+
+ return 0;
+}
diff --git a/test/table-1.html b/test/table-1.html
new file mode 100644
index 00000000..58635d2c
--- /dev/null
+++ b/test/table-1.html
@@ -0,0 +1,21 @@
+<table>
+<tr>
+<td>Short, <span style="white-space: nowrap">then some more text,
+which must not be broken.</span>
+<td>This is a rather long text to increase the maximal paragraph
+width. Sed ut perspiciatis, unde omnis iste natus error sit voluptatem
+accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae
+ab illo inventore veritatis et quasi architecto beatae vitae dicta
+sunt, explicabo. nemo enim ipsam voluptatem, quia voluptas sit,
+aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
+eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est,
+qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci velit,
+sed quia non numquam eius modi tempora incidunt, ut labore et dolore
+magnam aliquam quaerat voluptatem. ut enim ad minima veniam, quis
+nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut
+aliquid ex ea commodi consequatur? quis autem vel eum iure
+reprehenderit, qui in ea voluptate velit esse, quam nihil molestiae
+consequatur, vel illum, qui dolorem eum fugiat, quo voluptas nulla
+pariatur?
+</tr>
+</table>
diff --git a/test/white-space.html b/test/white-space.html
new file mode 100644
index 00000000..abd61c41
--- /dev/null
+++ b/test/white-space.html
@@ -0,0 +1,24 @@
+<h1>nowrap</h1>
+<div style="white-space: nowrap">
+hallo dillo hallo dillo hallo dillo hallo dillo
+hallo dillo hallo dillo hallo dillo hallo dillo
+</div>
+
+<h1>pre</h1>
+
+<div style="white-space: pre">
+hallo dillo hallo dillo hallo dillo hallo dillo
+hallo dillo hallo dillo hallo dillo hallo dillo
+</div>
+
+<h1>pre-wrap</h1>
+<div style="white-space: pre-wrap">
+hallo dillo hallo dillo hallo dillo hallo dillo
+hallo dillo hallo dillo hallo dillo hallo dillo
+</div>
+
+<h1>pre-line</h1>
+<div style="white-space: pre-line">
+hallo dillo hallo dillo hallo dillo hallo dillo
+hallo dillo hallo dillo hallo dillo hallo dillo
+</div>