summaryrefslogtreecommitdiffstats
path: root/lib/kotext
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kotext')
-rw-r--r--lib/kotext/AutoFormat52
-rw-r--r--lib/kotext/DESIGN104
-rw-r--r--lib/kotext/DateFormatWidget.cpp178
-rw-r--r--lib/kotext/DateFormatWidget.h22
-rw-r--r--lib/kotext/IsoDuration.h109
-rw-r--r--lib/kotext/KFontDialog_local.cpp821
-rw-r--r--lib/kotext/KFontDialog_local.h515
-rw-r--r--lib/kotext/KoAutoFormat.cpp2533
-rw-r--r--lib/kotext/KoAutoFormat.h420
-rw-r--r--lib/kotext/KoAutoFormatDia.cpp1142
-rw-r--r--lib/kotext/KoAutoFormatDia.h174
-rw-r--r--lib/kotext/KoBgSpellCheck.cpp321
-rw-r--r--lib/kotext/KoBgSpellCheck.h79
-rw-r--r--lib/kotext/KoBorder.cpp318
-rw-r--r--lib/kotext/KoBorder.h97
-rw-r--r--lib/kotext/KoChangeCaseDia.cpp70
-rw-r--r--lib/kotext/KoChangeCaseDia.h46
-rw-r--r--lib/kotext/KoCommentDia.cpp73
-rw-r--r--lib/kotext/KoCommentDia.h45
-rw-r--r--lib/kotext/KoCompletionBase.ui370
-rw-r--r--lib/kotext/KoCompletionDia.cpp201
-rw-r--r--lib/kotext/KoCompletionDia.h68
-rw-r--r--lib/kotext/KoComplexText.cpp1476
-rw-r--r--lib/kotext/KoComplexText.h131
-rw-r--r--lib/kotext/KoCreateStyleDia.cpp63
-rw-r--r--lib/kotext/KoCreateStyleDia.h44
-rw-r--r--lib/kotext/KoCustomVariablesDia.cpp336
-rw-r--r--lib/kotext/KoCustomVariablesDia.h167
-rw-r--r--lib/kotext/KoDecorationTab.cpp150
-rw-r--r--lib/kotext/KoDecorationTab.h70
-rw-r--r--lib/kotext/KoFontDia.cpp305
-rw-r--r--lib/kotext/KoFontDia.h101
-rw-r--r--lib/kotext/KoFontDiaPreview.cpp442
-rw-r--r--lib/kotext/KoFontDiaPreview.h84
-rw-r--r--lib/kotext/KoFontTab.cpp56
-rw-r--r--lib/kotext/KoFontTab.h52
-rw-r--r--lib/kotext/KoHighlightingTab.cpp151
-rw-r--r--lib/kotext/KoHighlightingTab.h67
-rw-r--r--lib/kotext/KoImportStyleDia.cpp126
-rw-r--r--lib/kotext/KoImportStyleDia.h70
-rw-r--r--lib/kotext/KoLanguageTab.cpp65
-rw-r--r--lib/kotext/KoLanguageTab.h42
-rw-r--r--lib/kotext/KoLayoutTab.cpp147
-rw-r--r--lib/kotext/KoLayoutTab.h53
-rw-r--r--lib/kotext/KoListStyleStack.cpp46
-rw-r--r--lib/kotext/KoListStyleStack.h91
-rw-r--r--lib/kotext/KoOasisContext.cpp135
-rw-r--r--lib/kotext/KoOasisContext.h186
-rw-r--r--lib/kotext/KoParagCounter.cpp987
-rw-r--r--lib/kotext/KoParagCounter.h243
-rw-r--r--lib/kotext/KoParagDecorationTab.ui402
-rw-r--r--lib/kotext/KoParagDia.cpp2289
-rw-r--r--lib/kotext/KoParagDia.h597
-rw-r--r--lib/kotext/KoParagDia_p.h147
-rw-r--r--lib/kotext/KoParagLayout.cpp948
-rw-r--r--lib/kotext/KoParagLayout.h180
-rw-r--r--lib/kotext/KoParagStyle.cpp284
-rw-r--r--lib/kotext/KoParagStyle.h109
-rw-r--r--lib/kotext/KoRichText.cpp1769
-rw-r--r--lib/kotext/KoRichText.h851
-rw-r--r--lib/kotext/KoSearchDia.cpp930
-rw-r--r--lib/kotext/KoSearchDia.h338
-rw-r--r--lib/kotext/KoSpell.cpp246
-rw-r--r--lib/kotext/KoSpell.h105
-rw-r--r--lib/kotext/KoStyleCollection.cpp254
-rw-r--r--lib/kotext/KoStyleCollection.h122
-rw-r--r--lib/kotext/KoStyleManager.cpp794
-rw-r--r--lib/kotext/KoStyleManager.h185
-rw-r--r--lib/kotext/KoTextBookmark.cpp50
-rw-r--r--lib/kotext/KoTextBookmark.h106
-rw-r--r--lib/kotext/KoTextCommand.cpp401
-rw-r--r--lib/kotext/KoTextCommand.h173
-rw-r--r--lib/kotext/KoTextCustomItem.cpp153
-rw-r--r--lib/kotext/KoTextCustomItem.h146
-rw-r--r--lib/kotext/KoTextDocument.cpp1592
-rw-r--r--lib/kotext/KoTextDocument.h619
-rw-r--r--lib/kotext/KoTextFormat.cpp1889
-rw-r--r--lib/kotext/KoTextFormat.h499
-rw-r--r--lib/kotext/KoTextFormatter.cpp1069
-rw-r--r--lib/kotext/KoTextFormatter.h114
-rw-r--r--lib/kotext/KoTextIterator.cpp389
-rw-r--r--lib/kotext/KoTextIterator.h154
-rw-r--r--lib/kotext/KoTextObject.cpp2809
-rw-r--r--lib/kotext/KoTextObject.h641
-rw-r--r--lib/kotext/KoTextParag.cpp3305
-rw-r--r--lib/kotext/KoTextParag.h583
-rw-r--r--lib/kotext/KoTextView.cpp1549
-rw-r--r--lib/kotext/KoTextView.h306
-rw-r--r--lib/kotext/KoTextViewIface.cc667
-rw-r--r--lib/kotext/KoTextViewIface.h178
-rw-r--r--lib/kotext/KoTextZoomHandler.cpp89
-rw-r--r--lib/kotext/KoTextZoomHandler.h136
-rw-r--r--lib/kotext/KoUserStyle.cpp36
-rw-r--r--lib/kotext/KoUserStyle.h55
-rw-r--r--lib/kotext/KoUserStyleCollection.cpp147
-rw-r--r--lib/kotext/KoUserStyleCollection.h154
-rw-r--r--lib/kotext/KoVariable.cpp2877
-rw-r--r--lib/kotext/KoVariable.h807
-rw-r--r--lib/kotext/Makefile.am32
-rw-r--r--lib/kotext/TODO13
-rw-r--r--lib/kotext/TimeFormatWidget.cpp139
-rw-r--r--lib/kotext/TimeFormatWidget.h22
-rw-r--r--lib/kotext/configure.in.bot6
-rw-r--r--lib/kotext/configure.in.in16
-rw-r--r--lib/kotext/kodecorationtabbase.ui360
-rw-r--r--lib/kotext/kofonttabbase.ui28
-rw-r--r--lib/kotext/kohighlightingtabbase.ui140
-rw-r--r--lib/kotext/kohyphen/Makefile.am21
-rw-r--r--lib/kotext/kohyphen/hnjalloc.c72
-rw-r--r--lib/kotext/kohyphen/hnjalloc.h46
-rw-r--r--lib/kotext/kohyphen/hyphdicts/Makefile.am4
-rw-r--r--lib/kotext/kohyphen/hyphdicts/dicts.xml21
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_cs.dic3637
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_da.dic1146
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_de.dic5799
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_en.dic11388
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_en_CA.dic11388
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_es.dic468
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_et.dic3690
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_fr.dic1067
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_hu.dic83320
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_it.dic410
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_nl.dic12725
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_pt.dic308
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_pt_BR.dic308
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_pt_PT.dic308
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_ru.dic3875
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_sk.dic2468
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_sl.dic1070
-rwxr-xr-xlib/kotext/kohyphen/hyphdicts/hyph_sv.dic4697
-rw-r--r--lib/kotext/kohyphen/hyphdicts/hyph_uk.dic1654
-rw-r--r--lib/kotext/kohyphen/hyphen.c500
-rw-r--r--lib/kotext/kohyphen/hyphen.h77
-rw-r--r--lib/kotext/kohyphen/kohyphen.cpp231
-rw-r--r--lib/kotext/kohyphen/kohyphen.h129
-rw-r--r--lib/kotext/kohyphen/kohyphentest.cpp73
-rw-r--r--lib/kotext/kolanguagetabbase.ui76
-rw-r--r--lib/kotext/kolayouttabbase.ui295
-rw-r--r--lib/kotext/tests/KoUserStyleTester.cpp162
-rw-r--r--lib/kotext/tests/KoUserStyleTester.h34
-rw-r--r--lib/kotext/tests/Makefile.am24
-rw-r--r--lib/kotext/tests/kobordertest.cpp113
-rw-r--r--lib/kotext/tests/kotextformattertest.cpp220
-rw-r--r--lib/kotext/tests/kovariabletest.cpp67
-rw-r--r--lib/kotext/timedateformatwidget.ui218
145 files changed, 198752 insertions, 0 deletions
diff --git a/lib/kotext/AutoFormat b/lib/kotext/AutoFormat
new file mode 100644
index 00000000..2354c254
--- /dev/null
+++ b/lib/kotext/AutoFormat
@@ -0,0 +1,52 @@
+Autoformat feature:
+kword and kpresenter have autoformat feature:
+-> Simple autocorrection :
+ -> Convert first letter of a sentence automatically to uppercase
+ -> Convert two uppercasecharacters to one uppercase and one lowercase
+ -> Auto format Url => when we write http://www.kde.org it replaces
+ by a link variable, we detect a url all word we start by http:// ftp://
+ mailto: news:/
+ -> Suppress double space
+ -> Suppress space at the beginning and the end of paragraph
+ -> Automatically do bold and underline formatting => when we write
+ *kde* => it replace by <bold>kde</bold> and when we write _kde_
+ it replaces by <underline>kde</underline>
+ -> Replace 1/2 to 1/2 => replace to fraction charactere it works for
+ 1/2, 1/4 3/4
+ -> Use auto-numbering for numbered paragraphs, when we start a paragraph
+ with a <number>+<space>+<text> and we press enter this paragraph and
+ next paragraph is replace by number style.
+ -> use list-formatting for bulletted paragraph, when we write "* kde" and
+ press enter style of paragraph is replaced by bullet style. We can
+ configurate bullet.
+-> Custom Quotes :
+ -> we can replace double quotes and simple quotes by specific
+ characters.
+-> Advanced autocorrection:
+ -> we can define word which will replace by a other word
+ => for example koffices by koffice, or microsoft by linux
+->Exception:
+ -> we can define list of exception word:
+ =>Do not treat as the end of a sequence
+ ==>don't upper case after specific word.
+
+ =>there is a autoInclude. Autoformat analyse line and detect
+ when we force lower case after a '.'
+
+ =>Accept to uppercase letters :
+ => there is a autoinclude. Autoformat analyse line and detect
+ when we force 2 uppercase letters.
+->Auto Completion:
+ ->When have a manual completion by default it's CTRL+E (we can configurate
+ it into kword or kpresenter.
+ ->we can save list of completion word
+ ->define min word length : min equals 5
+ ->define max number of completion word ( max = 500 )
+ ->Append space after completion.
+
+-2002-03-27- koffice 1.1post.
+Laurent Montel <lmontel@mandrakesoft.com>
+Be carefull my english is not good, so you can change all you want in this file.
+
+
+
diff --git a/lib/kotext/DESIGN b/lib/kotext/DESIGN
new file mode 100644
index 00000000..12bc2940
--- /dev/null
+++ b/lib/kotext/DESIGN
@@ -0,0 +1,104 @@
+Coordinate systems
+==================
+
+This is fun; brace yourself
+
+Document:
+ All objects have a position on the page which is described in the typographic units
+ named points.
+ There are 72 points to the inch, and these absolute coordinates simply place your
+ objects on the page.
+ An example; a frame is positioned on paper some 35mm from the left border of the paper and
+ some 35mm from the top of the first page. the absolute position of that frame is 100, 100
+ since 100pt equals 35mm.
+ Note that positioning is done from page 1, so when a frame is moved from page 1 to page 2 it
+ simply gets a higher Y coordinate.
+
+Zoomed: (aka Normal)
+ Every object on screen has a size, and at different zoom levels we use a different amount
+ of pixels to display the same object.
+ Our object above has a top-left position of document:(100,100). To determine where
+ this is on screen we call KoZoomHander::zoomItX(xPos) and KoZoomHander::zoomItY(yPos) to
+ retrieve the pixel positioning on screen at the current zoom level. The zoom level
+ is stored only in the zoomhandler, which is in KWord the document (an instance of KWDocument).
+ Since we are using pixel values all these values are stored in integers, they should not
+ be used to move something around, the absolute coordinate system has to be used for that.
+
+Internal:
+ The former two were mostly for objects like frames etc, not for text. Text (the individual
+ words and characters) are positioned with the layout coordinates. Layout is similar to the
+ Zoomed system, but always uses the same resolution. This resolution is sufficiently high to
+ do the layout in integers, and not really lose info.
+
+ This is the high-resolution unit in which the text layout is done,
+ currently set to 1440 DPI. Everything known the QRT classes will be in
+ this coordinate system (including the QTextFormats). When painting, we apply
+ the current zoom and resolution to find the right font size to use, and we
+ have to catch up with rounding differences. However the position of the words
+ (i.e. layout) is the one determined previously in layout units. KoZoomHandler
+ offers methods for converting between layout units and zoom-dependent points
+ and pixels.
+
+ Note that the Internal coordinate system starts at the topleft corner of
+ the first text frame, (whereas the other coordinate systems start at the
+ topleft corner of the first page).
+ Also, Internal coordinates only exists within the text frames.
+ Internal coordinates can be converted to Document coordinates with
+ KWTextFrameSet::internalToDocument(), and the other way round with documentToInternal().
+
+View:
+ The same as the zoomed coordinate system, but this one can use multiple pages next to each
+ other. So 3 pages horizontal in preview mode is no problem. A frame on page 3
+ then has a higher X coordinate then the same frame on page 1 (and e.g. the same Y).
+ When converting to Zoomed the X coordinates are equals, but the Y of the frame on page
+ 3 is higher than the Y of the frame on page 1.
+
+
+Document (pt values, in double, KoPoint, KoRect.)
+ | |
+ | |--KoZoomHander::zoomIt[XY] and unzoomIt[XY]
+ | |
+ | V
+ | Zoomed coordinates (pixel values, in int, QPoint, QRect)
+ | This is also called the "Normal" coordinate system.
+ | |
+ | |--KWViewMode::normalToView
+ | V
+ | View Mode (pixels values, but e.g. pages are re-arranged)
+ | That's also the KWCanvas (scrollview)'s contents coordinates.
+ |
+ |
+ |
+ | And for text framesets, there's also :
+ |
+ |--KWTextFrameSet::documentToInternal
+ V
+Internal coordinates (the coordinates given to QRT - in "layout units")
+Note that there are pixels and pts in the layout unit system too !
+There are conversions between LU points and document points,
+but also direct conversions between LU pixels and view pixels.
+
+Font sizes
+==========
+A 12pt font will lead to a layout font of ptToLayoutUnit(12)=20*12=240pt -
+that's the value stored in the QTextFormat.
+
+However font metrics are calculated from the 100%-zoom-level font (e.g. 12pt for a 12pt font)
+and _then_ multiplied by 20, instead of loading a 240pt font for that as we did before.
+This is implemented by KoTextFormat::charWidth().
+
+On screen, at 100%, a layoutUnitToFontSize(240,false)=(240/20)*1.0=20.0pt font size will be used.
+This does NOT depend on the DPI settings. Qt takes care of pt->pixel conversion for fonts.
+
+When printing... TODO, double-check whether Qt does pt->pixel conversion correctly
+(apparently it didn't, in Qt 2).
+
+QFont multiplies by 10 and stores into a 'short'... So for QFont the maximum font size
+is 3276, and in KOffice the maximum font size in points is around 163.
+
+See also
+========
+koffice/kword/DESIGN for more kword-specific things,
+and for explanation about KoTextView (text-edit objects)
+
+David Faure <faure@kde.org>
diff --git a/lib/kotext/DateFormatWidget.cpp b/lib/kotext/DateFormatWidget.cpp
new file mode 100644
index 00000000..444dc583
--- /dev/null
+++ b/lib/kotext/DateFormatWidget.cpp
@@ -0,0 +1,178 @@
+#include "timedateformatwidget.h"
+#include "DateFormatWidget.h"
+#include "DateFormatWidget.moc"
+#include <qdatetime.h>
+#include <qcombobox.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <qlineedit.h>
+#include <kdebug.h>
+#include <knuminput.h>
+#include <KoVariable.h>
+
+/*
+ * Constructs a DateFormatWidget which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'fl'
+ */
+DateFormatWidget::DateFormatWidget( QWidget* parent, const char* name, WFlags fl )
+ : TimeDateFormatWidgetPrototype( parent, name, fl )
+{
+ setCaption( i18n( "DateFormat", "Format of Date Variable" ) );
+ QStringList listDateFormat = KoVariableDateFormat::staticTranslatedFormatPropsList();
+ combo1->insertStringList(listDateFormat);
+
+ combo2->insertItem( i18n( "Day"));
+ combo2->insertItem( i18n( "Day (2 digits)"));
+ combo2->insertItem( i18n( "Day (abbreviated name)"));
+ combo2->insertItem( i18n( "Day (long name)"));
+ combo2->insertItem( i18n( "Month" ) );
+ combo2->insertItem( i18n( "Month (2 digits)" ) );
+ combo2->insertItem( i18n( "Month (abbreviated name)" ) );
+ combo2->insertItem( i18n( "Month (long name)" ) );
+ combo2->insertItem( i18n( "Month (possessive abbreviated name)" ) );
+ combo2->insertItem( i18n( "Month (possessive long name)" ) );
+ combo2->insertItem( i18n( "Year (2 digits)" ) );
+ combo2->insertItem( i18n( "Year (4 digits)" ) );
+
+ combo2->insertItem( i18n( "Hour" ) );
+ combo2->insertItem( i18n( "Hour (2 digits)" ) );
+ combo2->insertItem( i18n( "Minute" ) );
+ combo2->insertItem( i18n( "Minute (2 digits)" ) );
+ combo2->insertItem( i18n( "Second" ) );
+ combo2->insertItem( i18n( "Second (2 digits)" ) );
+ combo2->insertItem( i18n( "Millisecond (3 digits)" ) );
+ combo2->insertItem( i18n( "am/pm" ) );
+ combo2->insertItem( i18n( "AM/PM" ) );
+
+ combo2->setCurrentItem( 0 );
+
+ label_correction->setText(i18n("Correct in Days"));
+
+ connect( CheckBox1, SIGNAL(toggled ( bool )),this,SLOT(slotPersonalizeChanged(bool)));
+ connect( combo1, SIGNAL(activated ( const QString & )), this, SLOT(slotDefaultValueChanged(const QString &)));
+ connect( combo1, SIGNAL(textChanged ( const QString & )), this, SLOT(slotDefaultValueChanged(const QString &)));
+ connect( KIntNumInput1, SIGNAL(valueChanged(int)), this, SLOT( slotOffsetChanged(int)));
+ slotPersonalizeChanged(false);
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+DateFormatWidget::~DateFormatWidget()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * public slot
+ */
+void DateFormatWidget::slotDefaultValueChanged(const QString & )
+{
+ updateLabel();
+}
+
+void DateFormatWidget::slotOffsetChanged(int)
+{
+ updateLabel();
+}
+
+void DateFormatWidget::slotPersonalizeChanged(bool b)
+{
+ combo2->setEnabled(b);
+ TextLabel1->setEnabled(b);
+ combo1->setEditable(b);
+ updateLabel();
+
+}
+
+void DateFormatWidget::comboActivated()
+{
+ QString string=combo2->currentText();
+ if(string==i18n( "Day"))
+ combo1->lineEdit()->insert("d");
+ else if(string==i18n( "Day (2 digits)"))
+ combo1->lineEdit()->insert("dd");
+ else if(string==i18n( "Day (abbreviated name)"))
+ combo1->lineEdit()->insert("ddd");
+ else if(string==i18n( "Day (long name)"))
+ combo1->lineEdit()->insert("dddd");
+ else if(string==i18n( "Month" ) )
+ combo1->lineEdit()->insert("M");
+ else if(string==i18n( "Month (2 digits)" ) )
+ combo1->lineEdit()->insert("MM");
+ else if(string==i18n( "Month (abbreviated name)" ) )
+ combo1->lineEdit()->insert("MMM");
+ else if(string==i18n( "Month (long name)" ) )
+ combo1->lineEdit()->insert("MMMM");
+ else if(string==i18n( "Month (possessive abbreviated name)" ) )
+ combo1->lineEdit()->insert("PPP");
+ else if(string==i18n( "Month (possessive long name)" ) )
+ combo1->lineEdit()->insert("PPPP");
+ else if(string==i18n( "Year (2 digits)" ) )
+ combo1->lineEdit()->insert("yy");
+ else if(string==i18n( "Year (4 digits)" ) )
+ combo1->lineEdit()->insert("yyyy");
+
+ else if(string==i18n("Hour"))
+ combo1->lineEdit()->insert("h");
+ else if(string==i18n("Hour (2 digits)"))
+ combo1->lineEdit()->insert("hh");
+ else if(string==i18n("Minute"))
+ combo1->lineEdit()->insert("m");
+ else if(string==i18n("Minute (2 digits)"))
+ combo1->lineEdit()->insert("mm");
+ else if(string==i18n("Second"))
+ combo1->lineEdit()->insert("s");
+ else if(string==i18n("Second (2 digits)"))
+ combo1->lineEdit()->insert("ss");
+ else if(string==i18n("Millisecond (3 digits)"))
+ combo1->lineEdit()->insert("zzz");
+ else if(string==i18n("AM/PM"))
+ combo1->lineEdit()->insert("AP");
+ else if(string==i18n("am/pm"))
+ combo1->lineEdit()->insert("ap");
+
+ updateLabel();
+ combo1->setFocus();
+}
+
+/*
+ * public slot
+ */
+void DateFormatWidget::updateLabel()
+{
+ KoVariableDateFormat format;
+ format.setFormatProperties( resultString() );
+ QDateTime ct = QDateTime::currentDateTime().addDays( correctValue() );
+ label->setText( format.convert( ct ) );
+}
+
+QString DateFormatWidget::resultString()
+{
+ const QString lookup(combo1->currentText());
+ const QStringList listTranslated( KoVariableDateFormat::staticTranslatedFormatPropsList() );
+ const int index = listTranslated.findIndex(lookup);
+ if (index==-1)
+ return (lookup); // Either costum or non-locale
+
+ // We have now a locale format, so we must "translate" it back;
+
+ // Lookup untranslated format
+ const QStringList listRaw( KoVariableDateFormat::staticFormatPropsList() );
+
+ QStringList::ConstIterator it( listRaw.at(index) );
+ Q_ASSERT( it != listRaw.end() );
+ if ( it != listRaw.end() )
+ return *it;
+ kdError(32500) << "Internal error: could not find correcponding date format: " << lookup << endl;
+ return QString::null; // Something is wrong, give back a default
+}
+
+int DateFormatWidget::correctValue()
+{
+ return KIntNumInput1->value();
+}
diff --git a/lib/kotext/DateFormatWidget.h b/lib/kotext/DateFormatWidget.h
new file mode 100644
index 00000000..ac30f449
--- /dev/null
+++ b/lib/kotext/DateFormatWidget.h
@@ -0,0 +1,22 @@
+#ifndef DATEFORMATWIDGET_H
+#define DATEFORMATWIDGET_H
+#include "timedateformatwidget.h"
+
+class DateFormatWidget : public TimeDateFormatWidgetPrototype
+{
+ Q_OBJECT
+
+public:
+ DateFormatWidget( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~DateFormatWidget();
+ QString resultString();
+ int correctValue();
+public slots:
+ void updateLabel();
+ void comboActivated();
+ void slotPersonalizeChanged(bool b);
+ void slotDefaultValueChanged(const QString & );
+ void slotOffsetChanged(int);
+};
+
+#endif // DATEFORMATWIDGET_H
diff --git a/lib/kotext/IsoDuration.h b/lib/kotext/IsoDuration.h
new file mode 100644
index 00000000..dbeef450
--- /dev/null
+++ b/lib/kotext/IsoDuration.h
@@ -0,0 +1,109 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include <qstring.h>
+
+/**
+ * Routines for converting to and from the ISO-8601 duration format
+ * http://www.w3.org/TR/xmlschema-2/datatypes.html#duration
+ *
+ * This is not the ISO time format supported by Qt (HH:MM:SS),
+ * it's PT1H15M12S for 1:15:12.
+ *
+ */
+
+static QString minutesToISODuration( int mn )
+{
+ bool neg = mn < 0;
+ // PT == period of time - see ISO8601
+ QString str = QString::fromLatin1( "PT00H%1M00S" ).arg( QABS( mn ) );
+ if ( neg )
+ str.prepend( '-' );
+ return str;
+}
+
+static QString daysToISODuration( int days )
+{
+ bool neg = days < 0;
+ // P == period, time is ommitted - see ISO8601
+ QString str = QString::fromLatin1( "P%1D" ).arg( QABS( days ) );
+ if ( neg )
+ str.prepend( '-' );
+ return str;
+}
+
+static int ISODurationToMinutes( const QString& str )
+{
+ int idx = 0;
+ const int len = str.length();
+ bool neg = str[idx] == '-';
+ if ( neg )
+ ++idx;
+ if ( idx < len && str[idx] == 'P' ) // should always be true
+ ++idx;
+ if ( idx < len && str[idx] == 'T' )
+ ++idx;
+ int minutes = 0;
+ int currentNum = 0;
+ while ( idx < len ) {
+ if ( str[idx].isDigit() )
+ currentNum = currentNum * 10 + str[idx].latin1() - '0';
+ else {
+ if ( str[idx] == 'D' )
+ minutes += 24 * 60 * currentNum;
+ else if ( str[idx] == 'H' )
+ minutes += 60 * currentNum;
+ else if ( str[idx] == 'M' )
+ minutes += currentNum;
+ currentNum = 0;
+ }
+ ++idx;
+ }
+ return neg ? -minutes : minutes;
+}
+
+static int ISODurationToDays( const QString& str )
+{
+ int idx = 0;
+ const int len = str.length();
+ bool neg = str[idx] == '-';
+ if ( neg )
+ ++idx;
+ if ( idx < len && str[idx] == 'P' ) // should always be true
+ ++idx;
+ if ( idx < len && str[idx] == 'T' )
+ ++idx;
+ int days = 0;
+ int currentNum = 0;
+ while ( idx < len ) {
+ if ( str[idx].isDigit() )
+ currentNum = currentNum * 10 + str[idx].latin1() - '0';
+ else {
+ if ( str[idx] == 'Y' )
+ days += 365 * currentNum;
+ else if ( str[idx] == 'M' )
+ days += 30 * currentNum; // approx
+ else if ( str[idx] == 'D' )
+ days += currentNum;
+ currentNum = 0;
+ }
+ ++idx;
+ }
+ return neg ? -days : days;
+}
+
diff --git a/lib/kotext/KFontDialog_local.cpp b/lib/kotext/KFontDialog_local.cpp
new file mode 100644
index 00000000..aa1df371
--- /dev/null
+++ b/lib/kotext/KFontDialog_local.cpp
@@ -0,0 +1,821 @@
+/*
+
+ Requires the Qt widget libraries, available at no cost at
+ http://www.troll.no
+
+ Copyright (C) 1996 Bernd Johannes Wuebben <wuebben@kde.org>
+ Copyright (c) 1999 Preston Brown <pbrown@kde.org>
+ Copyright (c) 1999 Mario Weilguni <mweilguni@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <qcombobox.h>
+#include <qcheckbox.h>
+#include <qfile.h>
+#include <qfont.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qscrollbar.h>
+#include <qstringlist.h>
+#include <qfontdatabase.h>
+#include <qwhatsthis.h>
+#include <qtooltip.h>
+
+#include <kapplication.h>
+#include <kcharsets.h>
+#include <kconfig.h>
+#include <kdialog.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <qlineedit.h>
+#include <klistbox.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kdebug.h>
+#include <knuminput.h>
+
+#include <koffice_export.h>
+
+#include "KFontDialog_local.h"
+#include "KFontDialog_local.moc"
+
+static int minimumListWidth( const QListBox *list )
+{
+ int w=0;
+ for( uint i=0; i<list->count(); i++ )
+ {
+ int itemWidth = list->item(i)->width(list);
+ w = QMAX(w,itemWidth);
+ }
+ if( w == 0 ) { w = 40; }
+ w += list->frameWidth() * 2;
+ w += list->verticalScrollBar()->sizeHint().width();
+ return w;
+}
+
+static int minimumListHeight( const QListBox *list, int numVisibleEntry )
+{
+ int w = list->count() > 0 ? list->item(0)->height(list) :
+ list->fontMetrics().lineSpacing();
+
+ if( w < 0 ) { w = 10; }
+ if( numVisibleEntry <= 0 ) { numVisibleEntry = 4; }
+ return ( w * numVisibleEntry + 2 * list->frameWidth() );
+}
+
+class KFontChooser_local::KFontChooser_localPrivate
+{
+public:
+ KFontChooser_localPrivate()
+ { m_palette.setColor(QPalette::Active, QColorGroup::Text, Qt::black);
+ m_palette.setColor(QPalette::Active, QColorGroup::Base, Qt::white); }
+ QPalette m_palette;
+};
+
+KFontChooser_local::KFontChooser_local(QWidget *parent, const char *name,
+ bool onlyFixed, const QStringList &fontList,
+ bool makeFrame, int visibleListSize, bool diff,
+ QButton::ToggleState *sizeIsRelativeState )
+ : QWidget(parent, name), usingFixed(onlyFixed)
+{
+ charsetsCombo = 0;
+
+ QString mainWhatsThisText =
+ i18n( "Here you can choose the font to be used." );
+ QWhatsThis::add( this, mainWhatsThisText );
+
+ d = new KFontChooser_localPrivate;
+ QVBoxLayout *topLayout = new QVBoxLayout( this, 0, KDialog::spacingHint() );
+ int checkBoxGap = KDialog::spacingHint() / 2;
+
+ QWidget *page;
+ QGridLayout *gridLayout;
+ int row = 0;
+ if( makeFrame )
+ {
+ page = new QGroupBox( i18n("Requested Font"), this );
+ topLayout->addWidget(page);
+ gridLayout = new QGridLayout( page, 5, 3, KDialog::marginHint(), KDialog::spacingHint() );
+ gridLayout->addRowSpacing( 0, fontMetrics().lineSpacing() );
+ row = 1;
+ }
+ else
+ {
+ page = new QWidget( this );
+ topLayout->addWidget(page);
+ gridLayout = new QGridLayout( page, 4, 3, 0, KDialog::spacingHint() );
+ }
+
+ //
+ // first, create the labels across the top
+ //
+ QHBoxLayout *familyLayout = new QHBoxLayout();
+ familyLayout->addSpacing( checkBoxGap );
+ if (diff) {
+ familyCheckbox = new QCheckBox(i18n("Font"), page);
+ connect(familyCheckbox, SIGNAL(toggled(bool)), SLOT(toggled_checkbox()));
+ familyLayout->addWidget(familyCheckbox, 0, Qt::AlignLeft);
+ QString familyCBToolTipText =
+ i18n("Change font family?");
+ QString familyCBWhatsThisText =
+ i18n("Enable this checkbox to change the font family settings.");
+ QWhatsThis::add( familyCheckbox, familyCBWhatsThisText );
+ QToolTip::add( familyCheckbox, familyCBToolTipText );
+ familyLabel = 0;
+ } else {
+ familyCheckbox = 0;
+ familyLabel = new QLabel( i18n("Font:"), page, "familyLabel" );
+ familyLayout->addWidget(familyLabel, 1, Qt::AlignLeft);
+ }
+ gridLayout->addLayout(familyLayout, row, 0 );
+
+ QHBoxLayout *styleLayout = new QHBoxLayout();
+ if (diff) {
+ styleCheckbox = new QCheckBox(i18n("Font style"), page);
+ connect(styleCheckbox, SIGNAL(toggled(bool)), SLOT(toggled_checkbox()));
+ styleLayout->addWidget(styleCheckbox, 0, Qt::AlignLeft);
+ QString styleCBToolTipText =
+ i18n("Change font style?");
+ QString styleCBWhatsThisText =
+ i18n("Enable this checkbox to change the font style settings.");
+ QWhatsThis::add( styleCheckbox, styleCBWhatsThisText );
+ QToolTip::add( styleCheckbox, styleCBToolTipText );
+ styleLabel = 0;
+ } else {
+ styleCheckbox = 0;
+ styleLabel = new QLabel( i18n("Font style:"), page, "styleLabel");
+ styleLayout->addWidget(styleLabel, 1, Qt::AlignLeft);
+ }
+ styleLayout->addSpacing( checkBoxGap );
+ gridLayout->addLayout(styleLayout, row, 1 );
+
+ QHBoxLayout *sizeLayout = new QHBoxLayout();
+ if (diff) {
+ sizeCheckbox = new QCheckBox(i18n("Size"),page);
+ connect(sizeCheckbox, SIGNAL(toggled(bool)), SLOT(toggled_checkbox()));
+ sizeLayout->addWidget(sizeCheckbox, 0, Qt::AlignLeft);
+ QString sizeCBToolTipText =
+ i18n("Change font size?");
+ QString sizeCBWhatsThisText =
+ i18n("Enable this checkbox to change the font size settings.");
+ QWhatsThis::add( sizeCheckbox, sizeCBWhatsThisText );
+ QToolTip::add( sizeCheckbox, sizeCBToolTipText );
+ sizeLabel = 0;
+ } else {
+ sizeCheckbox = 0;
+ sizeLabel = new QLabel( i18n("Size:"), page, "sizeLabel");
+ sizeLayout->addWidget(sizeLabel, 1, Qt::AlignLeft);
+ }
+ sizeLayout->addSpacing( checkBoxGap );
+ sizeLayout->addSpacing( checkBoxGap ); // prevent label from eating border
+ gridLayout->addLayout(sizeLayout, row, 2 );
+
+ row ++;
+
+ //
+ // now create the actual boxes that hold the info
+ //
+ familyListBox = new KListBox( page, "familyListBox");
+ familyListBox->setEnabled( !diff );
+ gridLayout->addWidget( familyListBox, row, 0 );
+ QString fontFamilyWhatsThisText =
+ i18n("Here you can choose the font family to be used." );
+ QWhatsThis::add( familyListBox, fontFamilyWhatsThisText );
+ QWhatsThis::add(diff?(QWidget *) familyCheckbox:(QWidget *) familyLabel, fontFamilyWhatsThisText );
+ connect(familyListBox, SIGNAL(highlighted(const QString &)),
+ SLOT(family_chosen_slot(const QString &)));
+ if(!fontList.isEmpty())
+ {
+ familyListBox->insertStringList(fontList);
+ }
+ else
+ {
+ fillFamilyListBox(onlyFixed);
+ }
+
+ familyListBox->setMinimumWidth( minimumListWidth( familyListBox ) );
+ familyListBox->setMinimumHeight(
+ minimumListHeight( familyListBox, visibleListSize ) );
+
+ styleListBox = new KListBox( page, "styleListBox");
+ styleListBox->setEnabled( !diff );
+ gridLayout->addWidget(styleListBox, row, 1);
+ QString fontStyleWhatsThisText =
+ i18n("Here you can choose the font style to be used." );
+ QWhatsThis::add( styleListBox, fontStyleWhatsThisText );
+ QWhatsThis::add(diff?(QWidget *)styleCheckbox:(QWidget *)styleLabel, fontFamilyWhatsThisText );
+ styleListBox->insertItem(i18n("Regular"));
+ styleListBox->insertItem(i18n("Italic"));
+ styleListBox->insertItem(i18n("Bold"));
+ styleListBox->insertItem(i18n("Bold Italic"));
+ styleListBox->setMinimumWidth( minimumListWidth( styleListBox ) );
+ styleListBox->setMinimumHeight(
+ minimumListHeight( styleListBox, visibleListSize ) );
+
+ connect(styleListBox, SIGNAL(highlighted(const QString &)),
+ SLOT(style_chosen_slot(const QString &)));
+
+
+ sizeListBox = new KListBox( page, "sizeListBox");
+ sizeOfFont = new KIntNumInput( page, "sizeOfFont");
+ sizeOfFont->setMinValue(4);
+
+ sizeListBox->setEnabled( !diff );
+ sizeOfFont->setEnabled( !diff );
+ if( sizeIsRelativeState ) {
+ QString sizeIsRelativeCBText =
+ i18n("Relative");
+ QString sizeIsRelativeCBToolTipText =
+ i18n("Font size<br><i>fixed</i> or <i>relative</i><br>to environment");
+ QString sizeIsRelativeCBWhatsThisText =
+ i18n("Here you can switch between fixed font size and font size "
+ "to be calculated dynamically and adjusted to changing "
+ "environment (e.g. widget dimensions, paper size)." );
+ sizeIsRelativeCheckBox = new QCheckBox( sizeIsRelativeCBText,
+ page,
+ "sizeIsRelativeCheckBox" );
+ sizeIsRelativeCheckBox->setTristate( diff );
+ QGridLayout *sizeLayout2 = new QGridLayout( 3,2, KDialog::spacingHint()/2, "sizeLayout2" );
+ gridLayout->addLayout(sizeLayout2, row, 2);
+ sizeLayout2->setColStretch( 1, 1 ); // to prevent text from eating the right border
+ sizeLayout2->addMultiCellWidget( sizeOfFont, 0, 0, 0, 1);
+ sizeLayout2->addMultiCellWidget(sizeListBox, 1,1, 0,1);
+ sizeLayout2->addWidget(sizeIsRelativeCheckBox, 2, 0, Qt::AlignLeft);
+ QWhatsThis::add( sizeIsRelativeCheckBox, sizeIsRelativeCBWhatsThisText );
+ QToolTip::add( sizeIsRelativeCheckBox, sizeIsRelativeCBToolTipText );
+ }
+ else {
+ sizeIsRelativeCheckBox = 0L;
+ QGridLayout *sizeLayout2 = new QGridLayout( 2,1, KDialog::spacingHint()/2, "sizeLayout2" );
+ gridLayout->addLayout(sizeLayout2, row, 2);
+ sizeLayout2->addWidget( sizeOfFont, 0, 0);
+ sizeLayout2->addMultiCellWidget(sizeListBox, 1,1, 0,0);
+ }
+ QString fontSizeWhatsThisText =
+ i18n("Here you can choose the font size to be used." );
+ QWhatsThis::add( sizeListBox, fontSizeWhatsThisText );
+ QWhatsThis::add( diff?(QWidget *)sizeCheckbox:(QWidget *)sizeLabel, fontSizeWhatsThisText );
+
+ fillSizeList();
+ sizeListBox->setMinimumWidth( minimumListWidth(sizeListBox) +
+ sizeListBox->fontMetrics().maxWidth() );
+ sizeListBox->setMinimumHeight(
+ minimumListHeight( sizeListBox, visibleListSize ) );
+
+ connect( sizeOfFont, SIGNAL( valueChanged(int) ),
+ SLOT(size_value_slot(int)));
+
+ connect( sizeListBox, SIGNAL(highlighted(const QString&)),
+ SLOT(size_chosen_slot(const QString&)) );
+ sizeListBox->setSelected(sizeListBox->findItem(QString::number(10)), true); // default to 10pt.
+
+ row ++;
+
+ row ++;
+ sampleEdit = new QLineEdit( page, "sampleEdit");
+ QFont tmpFont( KGlobalSettings::generalFont().family(), 64, QFont::Black );
+ sampleEdit->setFont(tmpFont);
+ sampleEdit->setText(i18n("The Quick Brown Fox Jumps Over The Lazy Dog"));
+ sampleEdit->setMinimumHeight( sampleEdit->fontMetrics().lineSpacing() );
+ sampleEdit->setAlignment(Qt::AlignCenter);
+ gridLayout->addMultiCellWidget(sampleEdit, 4, 4, 0, 2);
+ QString sampleEditWhatsThisText =
+ i18n("This sample text illustrates the current settings. "
+ "You may edit it to test special characters." );
+ QWhatsThis::add( sampleEdit, sampleEditWhatsThisText );
+ connect(this, SIGNAL(fontSelected(const QFont &)),
+ SLOT(displaySample(const QFont &)));
+
+ QVBoxLayout *vbox;
+ if( makeFrame )
+ {
+ page = new QGroupBox( i18n("Actual Font"), this );
+ topLayout->addWidget(page);
+ vbox = new QVBoxLayout( page, KDialog::spacingHint() );
+ vbox->addSpacing( fontMetrics().lineSpacing() );
+ }
+ else
+ {
+ page = new QWidget( this );
+ topLayout->addWidget(page);
+ vbox = new QVBoxLayout( page, 0, KDialog::spacingHint() );
+ QLabel *label = new QLabel( i18n("Actual Font"), page );
+ vbox->addWidget( label );
+ }
+
+ xlfdEdit = new QLineEdit( page, "xlfdEdit" );
+ vbox->addWidget( xlfdEdit );
+
+ // lets initialize the display if possible
+ setFont( KGlobalSettings::generalFont(), usingFixed );
+ // check or uncheck or gray out the "relative" checkbox
+ if( sizeIsRelativeState && sizeIsRelativeCheckBox )
+ setSizeIsRelative( *sizeIsRelativeState );
+
+ KConfig *config = KGlobal::config();
+ KConfigGroupSaver saver(config, QString::fromLatin1("General"));
+ showXLFDArea(config->readBoolEntry(QString::fromLatin1("fontSelectorShowXLFD"), false));
+}
+
+KFontChooser_local::~KFontChooser_local()
+{
+ delete d;
+}
+
+void KFontChooser_local::fillSizeList() {
+ if(! sizeListBox) return; //assertion.
+
+ static const int c[] =
+ {
+ 4, 5, 6, 7,
+ 8, 9, 10, 11,
+ 12, 13, 14, 15,
+ 16, 17, 18, 19,
+ 20, 22, 24, 26,
+ 28, 32, 48, 64,
+ 0
+ };
+ for(int i = 0; c[i]; ++i)
+ {
+ sizeListBox->insertItem(QString::number(c[i]));
+ }
+}
+
+void KFontChooser_local::setColor( const QColor & col )
+{
+ d->m_palette.setColor( QPalette::Active, QColorGroup::Text, col );
+ QPalette pal = sampleEdit->palette();
+ pal.setColor( QPalette::Active, QColorGroup::Text, col );
+ sampleEdit->setPalette( pal );
+}
+
+QColor KFontChooser_local::color() const
+{
+ return d->m_palette.color( QPalette::Active, QColorGroup::Text );
+}
+
+void KFontChooser_local::setBackgroundColor( const QColor & col )
+{
+ d->m_palette.setColor( QPalette::Active, QColorGroup::Base, col );
+ QPalette pal = sampleEdit->palette();
+ pal.setColor( QPalette::Active, QColorGroup::Base, col );
+ sampleEdit->setPalette( pal );
+}
+
+QColor KFontChooser_local::backgroundColor() const
+{
+ return d->m_palette.color( QPalette::Active, QColorGroup::Base );
+}
+
+void KFontChooser_local::setSizeIsRelative( QButton::ToggleState relative )
+{
+ // check or uncheck or gray out the "relative" checkbox
+ if( sizeIsRelativeCheckBox ) {
+ if( QButton::NoChange == relative )
+ sizeIsRelativeCheckBox->setNoChange();
+ else
+ sizeIsRelativeCheckBox->setChecked( QButton::On == relative );
+ }
+}
+
+QButton::ToggleState KFontChooser_local::sizeIsRelative() const
+{
+ return sizeIsRelativeCheckBox
+ ? sizeIsRelativeCheckBox->state()
+ : QButton::NoChange;
+}
+
+QSize KFontChooser_local::sizeHint( void ) const
+{
+ return minimumSizeHint();
+}
+
+
+void KFontChooser_local::enableColumn( int column, bool state )
+{
+ if( column & FamilyList )
+ {
+ familyListBox->setEnabled(state);
+ }
+ if( column & StyleList )
+ {
+ styleListBox->setEnabled(state);
+ }
+ if( column & SizeList )
+ {
+ sizeListBox->setEnabled(state);
+ }
+}
+
+
+void KFontChooser_local::setFont( const QFont& aFont, bool onlyFixed )
+{
+ selFont = aFont;
+ selectedSize=aFont.pointSize();
+ if (selectedSize == -1)
+ selectedSize = QFontInfo(aFont).pointSize();
+
+ if( onlyFixed != usingFixed)
+ {
+ usingFixed = onlyFixed;
+ fillFamilyListBox(usingFixed);
+ }
+ setupDisplay();
+ displaySample(selFont);
+}
+
+
+int KFontChooser_local::fontDiffFlags() {
+ int diffFlags = 0;
+ if (familyCheckbox && styleCheckbox && sizeCheckbox) {
+ diffFlags = (int)(familyCheckbox->isChecked() ? FontDiffFamily : 0)
+ | (int)( styleCheckbox->isChecked() ? FontDiffStyle : 0)
+ | (int)( sizeCheckbox->isChecked() ? FontDiffSize : 0);
+ }
+ return diffFlags;
+}
+
+void KFontChooser_local::toggled_checkbox()
+{
+ familyListBox->setEnabled( familyCheckbox->isChecked() );
+ styleListBox->setEnabled( styleCheckbox->isChecked() );
+ sizeListBox->setEnabled( sizeCheckbox->isChecked() );
+ sizeOfFont->setEnabled( sizeCheckbox->isChecked() );
+}
+
+void KFontChooser_local::family_chosen_slot(const QString& family)
+{
+ QString currentFamily;
+ if (family.isEmpty())
+ currentFamily = familyListBox->currentText();
+ else
+ currentFamily = family;
+
+
+ QFontDatabase dbase;
+ QStringList styles = QStringList(dbase.styles(currentFamily));
+ styleListBox->clear();
+ currentStyles.clear();
+ for ( QStringList::Iterator it = styles.begin(); it != styles.end(); ++it ) {
+ QString style = *it;
+ int pos = style.find("Plain");
+ if(pos >=0) style = style.replace(pos,5,i18n("Regular"));
+ pos = style.find("Normal");
+ if(pos >=0) style = style.replace(pos,6,i18n("Regular"));
+ pos = style.find("Oblique");
+ if(pos >=0) style = style.replace(pos,7,i18n("Italic"));
+ if(!styleListBox->findItem(style)) {
+ styleListBox->insertItem(i18n(style.utf8()));
+ currentStyles.insert(i18n(style.utf8()), *it);
+ }
+ }
+ if(styleListBox->count()==0) {
+ styleListBox->insertItem(i18n("Regular"));
+ currentStyles.insert(i18n("Regular"), "Normal");
+ }
+
+ styleListBox->blockSignals(true);
+ QListBoxItem *item = styleListBox->findItem(selectedStyle);
+ if (item)
+ styleListBox->setSelected(styleListBox->findItem(selectedStyle), true);
+ else
+ styleListBox->setSelected(0, true);
+ styleListBox->blockSignals(false);
+
+ style_chosen_slot(QString::null);
+
+ if (!family.isEmpty() )
+ selectedFamily = family;
+
+}
+
+void KFontChooser_local::size_chosen_slot(const QString& size){
+
+ selectedSize=size.toInt();
+ sizeOfFont->setValue(selectedSize);
+ selFont.setPointSize(selectedSize);
+ emit fontSelected(selFont);
+}
+
+void KFontChooser_local::size_value_slot(int val) {
+ selFont.setPointSize(val);
+ emit fontSelected(selFont);
+}
+
+void KFontChooser_local::style_chosen_slot(const QString& style)
+{
+ QString currentStyle;
+ if (style.isEmpty())
+ currentStyle = styleListBox->currentText();
+ else
+ currentStyle = style;
+
+ int diff=0; // the difference between the font size requested and what we can show.
+
+ sizeListBox->clear();
+ QFontDatabase dbase;
+ if(dbase.isSmoothlyScalable(familyListBox->currentText(), currentStyles[currentStyle])) { // is vector font
+ //sampleEdit->setPaletteBackgroundPixmap( VectorPixmap ); // TODO
+ fillSizeList();
+ } else { // is bitmap font.
+ //sampleEdit->setPaletteBackgroundPixmap( BitmapPixmap ); // TODO
+ QValueList<int> sizes = dbase.smoothSizes(familyListBox->currentText(), currentStyles[currentStyle]);
+ if(sizes.count() > 0) {
+ QValueList<int>::iterator it;
+ diff=1000;
+ for ( it = sizes.begin(); it != sizes.end(); ++it ) {
+ if(*it <= selectedSize || diff > *it - selectedSize) diff = selectedSize - *it;
+ sizeListBox->insertItem(QString::number(*it));
+ }
+ } else // there are times QT does not provide the list..
+ fillSizeList();
+ }
+ sizeListBox->blockSignals(true);
+ sizeListBox->setSelected(sizeListBox->findItem(QString::number(selectedSize)), true);
+ sizeListBox->blockSignals(false);
+ sizeListBox->ensureCurrentVisible();
+
+ //kdDebug() << "Showing: " << familyListBox->currentText() << ", " << currentStyles[currentStyle] << ", " << selectedSize-diff << endl;
+ selFont = dbase.font(familyListBox->currentText(), currentStyles[currentStyle], selectedSize-diff);
+ emit fontSelected(selFont);
+ if (!style.isEmpty())
+ selectedStyle = style;
+}
+
+void KFontChooser_local::displaySample(const QFont& font)
+{
+ sampleEdit->setFont(font);
+ sampleEdit->setCursorPosition(0);
+ xlfdEdit->setText(font.rawName());
+ xlfdEdit->setCursorPosition(0);
+
+ //QFontInfo a = QFontInfo(font);
+ //kdDebug() << "font: " << a.family () << ", " << a.pointSize () << endl;
+ //kdDebug() << " (" << font.toString() << ")\n";
+}
+
+void KFontChooser_local::setupDisplay()
+{
+ // Calling familyListBox->setCurrentItem() causes the value of selFont
+ // to change, so we save the family, style and size beforehand.
+ QString family = selFont.family().lower();
+ int style = (selFont.bold() ? 2 : 0) + (selFont.italic() ? 1 : 0);
+ int size = selFont.pointSize();
+ if (size == -1)
+ size = QFontInfo(selFont).pointSize();
+ QString sizeStr = QString::number(size);
+
+ int numEntries, i;
+
+ numEntries = familyListBox->count();
+ for (i = 0; i < numEntries; i++) {
+ if (family == familyListBox->text(i).lower()) {
+ familyListBox->setCurrentItem(i);
+ break;
+ }
+ }
+
+ // 1st Fallback
+ if ( (i == numEntries) )
+ {
+ if (family.contains('['))
+ {
+ family = family.left(family.find('[')).stripWhiteSpace();
+ for (i = 0; i < numEntries; i++) {
+ if (family == familyListBox->text(i).lower()) {
+ familyListBox->setCurrentItem(i);
+ break;
+ }
+ }
+ }
+ }
+
+ // 2nd Fallback
+ if ( (i == numEntries) )
+ {
+ QString fallback = family+" [";
+ for (i = 0; i < numEntries; i++) {
+ if (familyListBox->text(i).lower().startsWith(fallback)) {
+ familyListBox->setCurrentItem(i);
+ break;
+ }
+ }
+ }
+
+ // 3rd Fallback
+ if ( (i == numEntries) )
+ {
+ for (i = 0; i < numEntries; i++) {
+ if (familyListBox->text(i).lower().startsWith(family)) {
+ familyListBox->setCurrentItem(i);
+ break;
+ }
+ }
+ }
+
+ // Fall back in case nothing matched. Otherwise, diff doesn't work
+ if ( i == numEntries )
+ familyListBox->setCurrentItem( 0 );
+
+ styleListBox->setCurrentItem(style);
+
+ numEntries = sizeListBox->count();
+ for (i = 0; i < numEntries; i++){
+ if (sizeStr == sizeListBox->text(i)) {
+ sizeListBox->setCurrentItem(i);
+ break;
+ }
+ }
+
+ sizeOfFont->setValue(size);
+}
+
+
+void KFontChooser_local::getFontList( QStringList &list, uint fontListCriteria)
+{
+ QFontDatabase dbase;
+ QStringList lstSys(dbase.families());
+
+ // if we have criteria; then check fonts before adding
+ if (fontListCriteria)
+ {
+ QStringList lstFonts;
+ for (QStringList::Iterator it = lstSys.begin(); it != lstSys.end(); ++it)
+ {
+ if ((fontListCriteria & FixedWidthFonts) > 0 && !dbase.isFixedPitch(*it)) continue;
+ if (((fontListCriteria & (SmoothScalableFonts | ScalableFonts)) == ScalableFonts) &&
+ !dbase.isBitmapScalable(*it)) continue;
+ if ((fontListCriteria & SmoothScalableFonts) > 0 && !dbase.isSmoothlyScalable(*it)) continue;
+ lstFonts.append(*it);
+ }
+
+ if((fontListCriteria & FixedWidthFonts) > 0) {
+ // Fallback.. if there are no fixed fonts found, it's probably a
+ // bug in the font server or Qt. In this case, just use 'fixed'
+ if (lstFonts.count() == 0)
+ lstFonts.append("fixed");
+ }
+
+ lstSys = lstFonts;
+ }
+
+ lstSys.sort();
+
+ list = lstSys;
+}
+
+void KFontChooser_local::addFont( QStringList &list, const char *xfont )
+{
+ const char *ptr = strchr( xfont, '-' );
+ if ( !ptr )
+ return;
+
+ ptr = strchr( ptr + 1, '-' );
+ if ( !ptr )
+ return;
+
+ QString font = QString::fromLatin1(ptr + 1);
+
+ int pos;
+ if ( ( pos = font.find( '-' ) ) > 0 ) {
+ font.truncate( pos );
+
+ if ( font.find( QString::fromLatin1("open look"), 0, false ) >= 0 )
+ return;
+
+ QStringList::Iterator it = list.begin();
+
+ for ( ; it != list.end(); ++it )
+ if ( *it == font )
+ return;
+ list.append( font );
+ }
+}
+
+void KFontChooser_local::fillFamilyListBox(bool onlyFixedFonts)
+{
+ QStringList fontList;
+ getFontList(fontList, onlyFixedFonts?FixedWidthFonts:0);
+ familyListBox->clear();
+ familyListBox->insertStringList(fontList);
+}
+
+void KFontChooser_local::setFamilyList( QStringList list )
+{
+ familyListBox->blockSignals( true );
+ familyListBox->clear();
+ familyListBox->insertStringList( list );
+ setFont( KGlobalSettings::generalFont(), usingFixed );
+ familyListBox->blockSignals( false );
+}
+
+void KFontChooser_local::showXLFDArea(bool show)
+{
+ if( show )
+ {
+ xlfdEdit->parentWidget()->show();
+ }
+ else
+ {
+ xlfdEdit->parentWidget()->hide();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+KFontDialog_local::KFontDialog_local( QWidget *parent, const char* name,
+ bool onlyFixed, bool modal,
+ const QStringList &fontList, bool makeFrame, bool diff,
+ QButton::ToggleState *sizeIsRelativeState )
+ : KDialogBase( parent, name, modal, i18n("Select Font"), Ok|Cancel, Ok )
+{
+ chooser = new KFontChooser_local( this, "fontChooser",
+ onlyFixed, fontList, makeFrame, 8,
+ diff, sizeIsRelativeState );
+ setMainWidget(chooser);
+}
+
+
+int KFontDialog_local::getFontDiff( QFont &theFont, int &diffFlags, bool onlyFixed,
+ QWidget *parent, bool makeFrame,
+ QButton::ToggleState *sizeIsRelativeState )
+{
+ KFontDialog_local dlg( parent, "Font Selector", onlyFixed, true, QStringList(),
+ makeFrame, true, sizeIsRelativeState );
+ dlg.setFont( theFont, onlyFixed );
+
+ int result = dlg.exec();
+ if( result == Accepted )
+ {
+ theFont = dlg.chooser->font();
+ diffFlags = dlg.chooser->fontDiffFlags();
+ if( sizeIsRelativeState )
+ *sizeIsRelativeState = dlg.chooser->sizeIsRelative();
+ }
+ return result;
+}
+
+int KFontDialog_local::getFont( QFont &theFont, bool onlyFixed,
+ QWidget *parent, bool makeFrame,
+ QButton::ToggleState *sizeIsRelativeState )
+{
+ KFontDialog_local dlg( parent, "Font Selector", onlyFixed, true, QStringList(),
+ makeFrame, false, sizeIsRelativeState );
+ dlg.setFont( theFont, onlyFixed );
+
+ int result = dlg.exec();
+ if( result == Accepted )
+ {
+ theFont = dlg.chooser->font();
+ if( sizeIsRelativeState )
+ *sizeIsRelativeState = dlg.chooser->sizeIsRelative();
+ }
+ return result;
+}
+
+
+int KFontDialog_local::getFontAndText( QFont &theFont, QString &theString,
+ bool onlyFixed, QWidget *parent,
+ bool makeFrame,
+ QButton::ToggleState *sizeIsRelativeState )
+{
+ KFontDialog_local dlg( parent, "Font and Text Selector", onlyFixed, true,
+ QStringList(), makeFrame, false, sizeIsRelativeState );
+ dlg.setFont( theFont, onlyFixed );
+
+ int result = dlg.exec();
+ if( result == Accepted )
+ {
+ theFont = dlg.chooser->font();
+ theString = dlg.chooser->sampleText();
+ if( sizeIsRelativeState )
+ *sizeIsRelativeState = dlg.chooser->sizeIsRelative();
+ }
+ return result;
+}
+
+void KFontChooser_local::virtual_hook( int, void* )
+{ /*BASE::virtual_hook( id, data );*/ }
+
+void KFontDialog_local::virtual_hook( int id, void* data )
+{ KDialogBase::virtual_hook( id, data ); }
diff --git a/lib/kotext/KFontDialog_local.h b/lib/kotext/KFontDialog_local.h
new file mode 100644
index 00000000..5dc853dc
--- /dev/null
+++ b/lib/kotext/KFontDialog_local.h
@@ -0,0 +1,515 @@
+/*
+ $Id: kfontdialog.h,v 1.71 2004/10/10 10:27:49 bhards Exp $
+
+ Requires the Qt widget libraries, available at no cost at
+ http://www.troll.no
+
+ Copyright (C) 1997 Bernd Johannes Wuebben <wuebben@kde.org>
+ Copyright (c) 1999 Preston Brown <pbrown@kde.org>
+ Copyright (c) 1999 Mario Weilguni <mweilguni@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+/*This local copy has been added to be able to hide the preview pane of the font chooser. A patch has been made in kdelibs since 3.5. This local copy can be disposed of when we require kdelibs 3.5 and higher*/
+
+#ifndef _K_FONT_DIALOG_LOCAL_H_
+#define _K_FONT_DIALOG_LOCAL_H_
+
+#include <qlineedit.h>
+#include <qbutton.h>
+#include <kdialogbase.h>
+
+#include <koffice_export.h>
+
+class QComboBox;
+class QCheckBox;
+class QFont;
+class QGroupBox;
+class QLabel;
+class QStringList;
+class KListBox;
+class KIntNumInput;
+/**
+ * @short A font selection widget.
+ *
+ * While KFontChooser_local as an ordinary widget can be embedded in
+ * custom dialogs and therefore is very flexible, in most cases
+ * it is preferable to use the convenience functions in
+ * KFontDialog_local.
+ *
+ * @author Preston Brown <pbrown@kde.org>, Bernd Wuebben <wuebben@kde.org>
+ * @version $Id: kfontdialog.h,v 1.71 2004/10/10 10:27:49 bhards Exp $
+ */
+class KOTEXT_EXPORT KFontChooser_local : public QWidget
+{
+ Q_OBJECT
+ Q_PROPERTY( QFont font READ font WRITE setFont )
+
+public:
+ /**
+ * @li @p FamilyList - Identifies the family (leftmost) list.
+ * @li @p StyleList - Identifies the style (center) list.
+ * @li @p SizeList - Identifies the size (rightmost) list.
+ */
+ enum FontColumn { FamilyList=0x01, StyleList=0x02, SizeList=0x04};
+
+ /**
+ * @li @p FontDiffFamily - Identifies a requested change in the font family.
+ * @li @p FontDiffStyle - Identifies a requested change in the font style.
+ * @li @p FontDiffSize - Identifies a requested change in the font size.
+ */
+ enum FontDiff { FontDiffFamily=0x01, FontDiffStyle=0x02, FontDiffSize=0x04 };
+
+ /**
+ * Constructs a font picker widget.
+ * It normally comes up with all font families present on the system; the
+ * getFont method below does allow some more fine-tuning of the selection of fonts
+ * that will be displayed in the dialog.
+ * <p>Consider the following code snippet;
+ * \code
+ * QStringList list;
+ * KFontChooser_local::getFontList(list,SmoothScalableFonts);
+ * KFontChooser_local chooseFont = new KFontChooser_local(0, "FontList", false, list);
+ * \endcode
+ * <p>
+ * The above creates a font chooser dialog with only SmoothScaleble fonts.
+ *
+ * @param parent The parent widget.
+ * @param name The widget name.
+ * @param onlyFixed Only display fonts which have fixed-width
+ * character sizes.
+ * @param fontList A list of fonts to display, in XLFD format. If
+ * no list is formatted, the internal KDE font list is used.
+ * If that has not been created, X is queried, and all fonts
+ * available on the system are displayed.
+ * @param diff Display the difference version dialog.
+ * See KFontDialog_local::getFontDiff().
+ * @param makeFrame Draws a frame with titles around the contents.
+ * @param visibleListSize The minimum number of visible entries in the
+ * fontlists.
+ * @param sizeIsRelativeState If not zero the widget will show a
+ * checkbox where the user may choose whether the font size
+ * is to be interpreted as relative size.
+ * Initial state of this checkbox will be set according to
+ * *sizeIsRelativeState, user choice may be retrieved by
+ * calling sizeIsRelative().
+ */
+ KFontChooser_local(QWidget *parent = 0L, const char *name = 0L,
+ bool onlyFixed = false,
+ const QStringList &fontList = QStringList(),
+ bool makeFrame = true, int visibleListSize=8,
+ bool diff = false, QButton::ToggleState *sizeIsRelativeState = 0L );
+
+ /**
+ * Destructs the font chooser.
+ */
+ virtual ~KFontChooser_local();
+
+ /**
+ * Enables or disable a font column in the chooser.
+ *
+ * Use this
+ * function if your application does not need or supports all font
+ * properties.
+ *
+ * @param column Specify the columns. An or'ed combination of
+ * @p FamilyList, @p StyleList and @p SizeList is possible.
+ * @param state If @p false the columns are disabled.
+ */
+ void enableColumn( int column, bool state );
+
+ /**
+ * Sets the currently selected font in the chooser.
+ *
+ * @param font The font to select.
+ * @param onlyFixed Readjust the font list to display only fixed
+ * width fonts if @p true, or vice-versa.
+ */
+ void setFont( const QFont &font, bool onlyFixed = false );
+
+ /**
+ * @return The bitmask corresponding to the attributes the user
+ * wishes to change.
+ */
+ int fontDiffFlags();
+
+ /**
+ * @return The currently selected font in the chooser.
+ */
+ QFont font() const { return selFont; }
+
+ /**
+ * Sets the color to use in the preview.
+ */
+ void setColor( const QColor & col );
+
+ /**
+ * @return The color currently used in the preview (default: the text
+ * color of the active color group)
+ */
+ QColor color() const;
+
+ /**
+ * Sets the background color to use in the preview.
+ */
+ void setBackgroundColor( const QColor & col );
+
+ /**
+ * @return The background color currently used in the preview (default:
+ * the base color of the active colorgroup)
+ */
+ QColor backgroundColor() const;
+
+ /**
+ * Sets the state of the checkbox indicating whether the font size
+ * is to be interpreted as relative size.
+ * NOTE: If parameter sizeIsRelative was not set in the constructor
+ * of the widget this setting will be ignored.
+ */
+ void setSizeIsRelative( QButton::ToggleState relative );
+
+ /**
+ * @return Whether the font size is to be interpreted as relative size
+ * (default: QButton:Off)
+ */
+ QButton::ToggleState sizeIsRelative() const;
+
+
+ /**
+ * @return The current text in the sample text input area.
+ */
+ QString sampleText() const { return sampleEdit->text(); }
+
+ /**
+ * Sets the sample text.
+ *
+ * Normally you should not change this
+ * text, but it can be better to do this if the default text is
+ * too large for the edit area when using the default font of your
+ * application.
+ *
+ * @param text The new sample text. The current will be removed.
+ */
+ void setSampleText( const QString &text )
+ {
+ sampleEdit->setText( text );
+ }
+
+ /**
+ * Shows or hides the sample text box.
+ *
+ * @param visible Set it to true to show the box, to false to hide it.
+ */
+ void setSampleBoxVisible( bool visible )
+ {
+ ( visible ) ? sampleEdit->show() : sampleEdit->hide();
+ }
+
+ /**
+ * Converts a QFont into the corresponding X Logical Font
+ * Description (XLFD).
+ *
+ * @param theFont The font to convert.
+ * @return A string representing the given font in XLFD format.
+ */
+ static QString getXLFD( const QFont &theFont )
+ { return theFont.rawName(); }
+
+ /**
+ * The selection criteria for the font families shown in the dialog.
+ * @li @p FixedWidthFont when included only fixed-width fonts are returned.
+ * The fonts where the width of every character is equal.
+ * @li @p ScalableFont when included only scalable fonts are returned;
+ * certain configurations allow bitmap fonts to remain unscaled and
+ * thus these fonts have limited number of sizes.
+ * @li @p SmoothScalableFont when included only return smooth scalable fonts.
+ * this will return only non-bitmap fonts which are scalable to any size requested.
+ * Setting this option to true will mean the "scalable" flag is irrelavant.
+ */
+ enum FontListCriteria { FixedWidthFonts=0x01, ScalableFonts=0x02, SmoothScalableFonts=0x04 };
+
+ /**
+ * Creates a list of font strings.
+ *
+ * @param list The list is returned here.
+ * @param fontListCriteria should contain all the restrictions for font selection as OR-ed values
+ * @see KFontChooser_local::FontListCriteria for the individual values
+ */
+ static void getFontList( QStringList &list, uint fontListCriteria);
+
+ /**
+ *
+ * Fill the font family list of the KFontChooser
+ *
+ * @param list The font list.
+ */
+ void setFamilyList( QStringList list );
+
+ /**
+ * Reimplemented for internal reasons.
+ */
+ virtual QSize sizeHint( void ) const;
+
+signals:
+ /**
+ * Emitted whenever the selected font changes.
+ */
+ void fontSelected( const QFont &font );
+
+private slots:
+ void toggled_checkbox();
+ void family_chosen_slot(const QString&);
+ void size_chosen_slot(const QString&);
+ void style_chosen_slot(const QString&);
+ void displaySample(const QFont &font);
+ void showXLFDArea(bool);
+ void size_value_slot(int);
+private:
+ void fillFamilyListBox(bool onlyFixedFonts = false);
+ void fillSizeList();
+ // This one must be static since getFontList( QStringList, char*) is so
+ static void addFont( QStringList &list, const char *xfont );
+
+ void setupDisplay();
+
+ // pointer to an optinally supplied list of fonts to
+ // inserted into the fontdialog font-family combo-box
+ QStringList fontList;
+
+ KIntNumInput *sizeOfFont;
+
+ QLineEdit *sampleEdit;
+ QLineEdit *xlfdEdit;
+
+ QLabel *familyLabel;
+ QLabel *styleLabel;
+ QCheckBox *familyCheckbox;
+ QCheckBox *styleCheckbox;
+ QCheckBox *sizeCheckbox;
+ QLabel *sizeLabel;
+ KListBox *familyListBox;
+ KListBox *styleListBox;
+ KListBox *sizeListBox;
+ QComboBox *charsetsCombo; // BIC: remove in KDE4
+ QCheckBox *sizeIsRelativeCheckBox;
+
+ QFont selFont;
+
+ QString selectedFamily;
+ QString selectedStyle;
+ int selectedSize;
+ QMap<QString, QString> currentStyles;
+
+ bool usingFixed;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KFontChooser_localPrivate;
+ KFontChooser_localPrivate *d;
+};
+
+/**
+ * @short A font selection dialog.
+ *
+ * The KFontDialog_local provides a dialog for interactive font selection.
+ * It is basically a thin wrapper around the KFontChooser_local widget,
+ * which can also be used standalone. In most cases, the simplest
+ * use of this class is the static method KFontDialog_local::getFont(),
+ * which pops up the dialog, allows the user to select a font, and
+ * returns when the dialog is closed.
+ *
+ * Example:
+ *
+ * \code
+ * QFont myFont;
+ * int result = KFontDialog_local::getFont( myFont );
+ * if ( result == KFontDialog_local::Accepted )
+ * ...
+ * \endcode
+ *
+ * \image html kfontdialog.png "KDE Font Dialog"
+ *
+ * @author Preston Brown <pbrown@kde.org>, Bernd Wuebben <wuebben@kde.org>
+ * @version $Id: kfontdialog.h,v 1.71 2004/10/10 10:27:49 bhards Exp $
+ */
+class KOTEXT_EXPORT KFontDialog_local : public KDialogBase {
+ Q_OBJECT
+
+public:
+ /**
+ * Constructs a font selection dialog.
+ *
+ * @param parent The parent widget of the dialog, if any.
+ * @param name The name of the dialog.
+ * @param modal Specifies whether the dialog is modal or not.
+ * @param onlyFixed only display fonts which have fixed-width
+ * character sizes.
+ * @param fontlist a list of fonts to display, in XLFD format. If
+ * no list is formatted, the internal KDE font list is used.
+ * If that has not been created, X is queried, and all fonts
+ * available on the system are displayed.
+ * @param makeFrame Draws a frame with titles around the contents.
+ * @param diff Display the difference version dialog. See getFontDiff().
+ * @param sizeIsRelativeState If not zero the widget will show a
+ * checkbox where the user may choose whether the font size
+ * is to be interpreted as relative size.
+ * Initial state of this checkbox will be set according to
+ * *sizeIsRelativeState, user choice may be retrieved by
+ * calling sizeIsRelative().
+ *
+ */
+ KFontDialog_local( QWidget *parent = 0L, const char *name = 0,
+ bool onlyFixed = false, bool modal = false,
+ const QStringList &fontlist = QStringList(),
+ bool makeFrame = true, bool diff = false,
+ QButton::ToggleState *sizeIsRelativeState = 0L );
+
+ /**
+ * Sets the currently selected font in the dialog.
+ *
+ * @param font The font to select.
+ * @param onlyFixed readjust the font list to display only fixed
+ * width fonts if true, or vice-versa
+ */
+ void setFont( const QFont &font, bool onlyFixed = false )
+ { chooser->setFont(font, onlyFixed); }
+
+ /**
+ * @return The currently selected font in the dialog.
+ */
+ QFont font() const { return chooser->font(); }
+
+ /**
+ * Sets the state of the checkbox indicating whether the font size
+ * is to be interpreted as relative size.
+ * NOTE: If parameter sizeIsRelative was not set in the constructor
+ * of the dialog this setting will be ignored.
+ */
+ void setSizeIsRelative( QButton::ToggleState relative )
+ { chooser->setSizeIsRelative( relative ); }
+
+ /**
+ * @return Whether the font size is to be interpreted as relative size
+ * (default: false)
+ */
+ QButton::ToggleState sizeIsRelative() const
+ { return chooser->sizeIsRelative(); }
+
+ /**
+ * Creates a modal font dialog, lets the user choose a font,
+ * and returns when the dialog is closed.
+ *
+ * @param theFont a reference to the font to write the chosen font
+ * into.
+ * @param onlyFixed if true, only select from fixed-width fonts.
+ * @param parent Parent widget of the dialog. Specifying a widget different
+ * from 0 (Null) improves centering (looks better).
+ * @param makeFrame Draws a frame with titles around the contents.
+ * @param sizeIsRelativeState If not zero the widget will show a
+ * checkbox where the user may choose whether the font size
+ * is to be interpreted as relative size.
+ * Initial state of this checkbox will be set according to
+ * *sizeIsRelativeState and user choice will be returned
+ * therein.
+ *
+ * @return QDialog::result().
+ */
+ static int getFont( QFont &theFont, bool onlyFixed = false,
+ QWidget *parent = 0L, bool makeFrame = true,
+ QButton::ToggleState *sizeIsRelativeState = 0L );
+
+ /**
+ * Creates a modal font difference dialog, lets the user choose a selection
+ * of changes that should be made to a set of fonts, and returns when the
+ * dialog is closed. Useful for choosing slight adjustments to the font set
+ * when the user would otherwise have to manually edit a number of fonts.
+ *
+ * @param theFont a reference to the font to write the chosen font
+ * into.
+ * @param diffFlags a reference to the int into which the chosen
+ * difference selection bitmask should be written.
+ * Check the returned bitmask like:
+ * \code
+ * if ( diffFlags & KFontChooser_local::FontDiffFamily )
+ * [...]
+ * if ( diffFlags & KFontChooser_local::FontDiffStyle )
+ * [...]
+ * if ( diffFlags & KFontChooser_local::FontDiffSize )
+ * [...]
+ * \endcode
+ * @param onlyFixed if true, only select from fixed-width fonts.
+ * @param parent Parent widget of the dialog. Specifying a widget different
+ * from 0 (Null) improves centering (looks better).
+ * @param makeFrame Draws a frame with titles around the contents.
+ * @param sizeIsRelativeState If not zero the widget will show a
+ * checkbox where the user may choose whether the font size
+ * is to be interpreted as relative size.
+ * Initial state of this checkbox will be set according to
+ * *sizeIsRelativeState and user choice will be returned
+ * therein.
+ *
+ * @returns QDialog::result().
+ */
+ static int getFontDiff( QFont &theFont, int &diffFlags, bool onlyFixed = false,
+ QWidget *parent = 0L, bool makeFrame = true,
+ QButton::ToggleState *sizeIsRelativeState = 0L );
+
+ /**
+ * When you are not only interested in the font selected, but also
+ * in the example string typed in, you can call this method.
+ *
+ * @param theFont a reference to the font to write the chosen font
+ * into.
+ * @param theString a reference to the example text that was typed.
+ * @param onlyFixed if true, only select from fixed-width fonts.
+ * @param parent Parent widget of the dialog. Specifying a widget different
+ * from 0 (Null) improves centering (looks better).
+ * @param makeFrame Draws a frame with titles around the contents.
+ * @param sizeIsRelativeState If not zero the widget will show a
+ * checkbox where the user may choose whether the font size
+ * is to be interpreted as relative size.
+ * Initial state of this checkbox will be set according to
+ * *sizeIsRelativeState and user choice will be returned
+ * therein.
+ * @return The result of the dialog.
+ */
+ static int getFontAndText( QFont &theFont, QString &theString,
+ bool onlyFixed = false, QWidget *parent = 0L,
+ bool makeFrame = true,
+ QButton::ToggleState *sizeIsRelativeState = 0L );
+
+signals:
+ /**
+ * Emitted whenever the currently selected font changes.
+ * Connect to this to monitor the font as it is selected if you are
+ * not running modal.
+ */
+ void fontSelected( const QFont &font );
+
+protected:
+ KFontChooser_local *chooser;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KFontDialog_localPrivate;
+ KFontDialog_localPrivate *d;
+
+};
+
+#endif
diff --git a/lib/kotext/KoAutoFormat.cpp b/lib/kotext/KoAutoFormat.cpp
new file mode 100644
index 00000000..4e0ad7bb
--- /dev/null
+++ b/lib/kotext/KoAutoFormat.cpp
@@ -0,0 +1,2533 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+ 2001 Sven Leiber <s.leiber@web.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoAutoFormat.h"
+
+#include "KoTextObject.h"
+#include "KoTextParag.h"
+#include "KoVariable.h"
+#include "KoParagCounter.h"
+#include <KoDocument.h>
+#include <KoSearchDia.h>
+#include <KoGlobal.h>
+
+#include <kdeversion.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kinstance.h>
+#include <kconfig.h>
+#include <kstandarddirs.h>
+#include <kglobal.h>
+#include <kcommand.h>
+//#include <KoTextFormat.h>
+#include <kcompletion.h>
+#include <kcalendarsystem.h>
+
+#include <qfile.h>
+#include <qlabel.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qdom.h>
+#include <qregexp.h>
+
+
+KoCompletionBox::KoCompletionBox( QWidget * parent, const char * name, WFlags f)
+ : QLabel(parent,name,f)
+{
+ setBackgroundColor(QColor("#FFFFE6"));
+ setFocusPolicy(QWidget::NoFocus);
+ setFrameShape(QFrame::Box);
+}
+
+KoCompletionBox::~KoCompletionBox()
+{
+}
+
+void KoCompletionBox::mousePressEvent( QMouseEvent *)
+{
+ hide();
+}
+
+QString& KoCompletionBox::lastWord()
+{
+ return m_lastWord;
+}
+
+void KoCompletionBox::setLastWord( QString const &lastword)
+{
+ m_lastWord = lastword;
+}
+
+KoAutoFormatEntry::KoAutoFormatEntry(const QString& replace)
+ : m_replace( replace )
+{
+ m_formatOptions= 0L;
+}
+
+KoAutoFormatEntry::~KoAutoFormatEntry()
+{
+ delete m_formatOptions;
+ m_formatOptions=0L;
+}
+
+KoSearchContext *KoAutoFormatEntry::formatEntryContext() const
+{
+ return m_formatOptions;
+}
+
+void KoAutoFormatEntry::createNewEntryContext()
+{
+ if ( !m_formatOptions )
+ {
+ m_formatOptions = new KoSearchContext();
+ }
+}
+
+void KoAutoFormatEntry::setFormatEntryContext( KoSearchContext *_cont )
+{
+ delete m_formatOptions;
+ m_formatOptions=_cont;
+}
+
+void KoAutoFormatEntry::clearFormatEntryContext( )
+{
+ delete m_formatOptions;
+ m_formatOptions = 0L;
+}
+
+
+/******************************************************************/
+/* Class: KoAutoFormat */
+/******************************************************************/
+KoAutoFormat::KoAutoFormat( KoDocument *_doc, KoVariableCollection *_varCollection, KoVariableFormatCollection *_varFormatCollection )
+ : m_doc( _doc ),
+ m_varCollection(_varCollection),
+ m_varFormatCollection(_varFormatCollection),
+ m_autoFormatLanguage( QString::null),
+ m_configRead( false ),
+ m_convertUpperCase( false ), m_convertUpperUpper( false ),
+ m_advancedAutoCorrect( true ),
+ m_autoDetectUrl( false ),
+ m_ignoreDoubleSpace( false ),
+ m_removeSpaceBeginEndLine( false ),
+ m_useBulletStyle(false),
+ m_autoChangeFormat(false),
+ m_autoReplaceNumber(false),
+ m_useAutoNumberStyle(false),
+ m_completion(false),
+ m_toolTipCompletion(false),
+ m_completionAppendSpace(false),
+ m_addCompletionWord(true),
+ m_includeTwoUpperLetterException(false),
+ m_includeAbbreviation(false),
+ m_ignoreUpperCase(false),
+ m_bAutoFormatActive(true),
+ m_bAutoSuperScript( false ),
+ m_bAutoCorrectionWithFormat( false ),
+ m_bCapitalizeNameOfDays( false ),
+ m_wordInserted( false ),
+ m_bulletStyle(),
+ m_typographicSimpleQuotes(),
+ m_typographicDoubleQuotes(),
+ m_typographicDefaultDoubleQuotes(),
+ m_typographicDefaultSimpleQuotes(),
+ m_listCompletion( new KCompletion ),
+ m_entries(17,false),
+ m_allLanguages(17,false),
+ m_superScriptEntries(),
+ m_upperCaseExceptions(),
+ m_twoUpperLetterException(),
+ m_maxFindLength( 0 ),
+ m_minCompletionWordLength( 5 ),
+ m_nbMaxCompletionWord( 500 ),
+ m_countMaxWords(0),
+ m_completionBox(0),
+ m_keyCompletionAction( Enter )
+
+{
+ //load once this list not each time that we "readConfig"
+ loadListOfWordCompletion();
+ m_listCompletion->setIgnoreCase( true );
+ updateMaxWords();
+ KLocale klocale(m_doc->instance()->instanceName());
+ for (int i = 1; i <=7; i++)
+ {
+ m_cacheNameOfDays.append(klocale.calendar()->weekDayName( i ).lower());
+ }
+}
+
+KoAutoFormat::KoAutoFormat( const KoAutoFormat& format )
+ : m_doc( format.m_doc ),
+ m_varCollection( format.m_varCollection ),
+ m_varFormatCollection( format.m_varFormatCollection ),
+ m_autoFormatLanguage( format.m_autoFormatLanguage),
+ m_configRead( format.m_configRead ),
+ m_convertUpperCase( format.m_convertUpperCase ),
+ m_convertUpperUpper( format.m_convertUpperUpper ),
+ m_advancedAutoCorrect( format.m_advancedAutoCorrect ),
+ m_autoDetectUrl( format.m_autoDetectUrl ),
+ m_ignoreDoubleSpace( format.m_ignoreDoubleSpace ),
+ m_removeSpaceBeginEndLine( format.m_removeSpaceBeginEndLine ),
+ m_useBulletStyle( format.m_useBulletStyle ),
+ m_autoChangeFormat( format.m_autoChangeFormat ),
+ m_autoReplaceNumber( format.m_autoReplaceNumber ),
+ m_useAutoNumberStyle( format.m_useAutoNumberStyle ),
+ m_completion( format.m_completion ),
+ m_toolTipCompletion( format.m_toolTipCompletion),
+ m_completionAppendSpace( format.m_completionAppendSpace ),
+ m_addCompletionWord( format.m_addCompletionWord ),
+ m_includeTwoUpperLetterException( format.m_includeTwoUpperLetterException ),
+ m_includeAbbreviation( format.m_includeAbbreviation ),
+ m_ignoreUpperCase( format.m_ignoreUpperCase ),
+ m_bAutoFormatActive( format.m_bAutoFormatActive ),
+ m_bAutoSuperScript( format.m_bAutoSuperScript ),
+ m_bAutoCorrectionWithFormat( format.m_bAutoCorrectionWithFormat),
+ m_bCapitalizeNameOfDays( format.m_bCapitalizeNameOfDays),
+ m_bulletStyle( format.m_bulletStyle ),
+ m_typographicSimpleQuotes( format.m_typographicSimpleQuotes ),
+ m_typographicDoubleQuotes( format.m_typographicDoubleQuotes ),
+ m_typographicDefaultDoubleQuotes( format.m_typographicDefaultDoubleQuotes),
+ m_typographicDefaultSimpleQuotes( format.m_typographicDefaultSimpleQuotes),
+ m_listCompletion( 0L ), // don't copy it!
+ m_entries(17,false ),//don't copy it.
+ m_allLanguages(17,false), //don't copy it
+ m_superScriptEntries ( format.m_superScriptEntries ),
+ m_upperCaseExceptions( format.m_upperCaseExceptions ),
+ m_twoUpperLetterException( format.m_twoUpperLetterException ),
+ m_maxFindLength( format.m_maxFindLength ),
+ m_minCompletionWordLength( format.m_minCompletionWordLength ),
+ m_nbMaxCompletionWord( format.m_nbMaxCompletionWord ),
+ m_cacheNameOfDays( format.m_cacheNameOfDays),
+ m_completionBox(0),
+ m_keyCompletionAction( format.m_keyCompletionAction )
+{
+ //m_listCompletion=new KCompletion();
+ //m_listCompletion->setItems( autoFormat.listCompletion() );
+ //copyAutoFormatEntries( autoFormat );
+}
+
+KoAutoFormat::~KoAutoFormat()
+{
+ delete m_listCompletion;
+ m_entries.setAutoDelete( true );
+ m_entries.clear();
+ m_allLanguages.setAutoDelete( true );
+ m_allLanguages.clear();
+}
+
+void KoAutoFormat::updateMaxWords()
+{
+ QStringList list = m_listCompletion->items();
+ for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it )
+ {
+ QString tmp = *it;
+ uint maxword = 1;
+
+ for (uint i=0; i < (uint)tmp.length(); i++)
+ if ( tmp.at(i).isSpace() || tmp.at(i).isPunct() )
+ maxword++;
+ if (maxword > m_countMaxWords )
+ m_countMaxWords = maxword;
+ }
+ kdDebug() << "m_countMaxWords: " << m_countMaxWords << endl;
+}
+
+void KoAutoFormat::loadListOfWordCompletion()
+{
+ KConfig* config = KoGlobal::kofficeConfig();
+ KConfigGroupSaver cgs( config, "Completion Word" );
+ m_listCompletion->insertItems(config->readListEntry( "list" ));
+}
+
+void KoAutoFormat::readConfig(bool force)
+{
+ // Read the autoformat configuration
+ // This is done on demand (when typing the first char, or when opening the config dialog)
+ // so that loading is faster and to avoid doing it for readonly documents.
+ if ( m_configRead && !force )
+ return;
+ KConfig* config = KoGlobal::kofficeConfig();
+ KConfigGroupSaver cgs( config, "AutoFormat" );
+ //when we force don't load format language.
+ if ( !force)
+ m_autoFormatLanguage = config->readEntry("formatLanguage", QString::null);
+
+ m_convertUpperCase = config->readBoolEntry( "ConvertUpperCase", false );
+ m_convertUpperUpper = config->readBoolEntry( "ConvertUpperUpper", false );
+ m_includeTwoUpperLetterException = config->readBoolEntry( "includeTwoLetterException", false );
+ m_includeAbbreviation = config->readBoolEntry( "includeAbbreviation", false );
+
+ m_advancedAutoCorrect = config->readBoolEntry( "AdvancedAutocorrect", true );
+ m_bAutoCorrectionWithFormat = config->readBoolEntry( "AutoCorrectionWithFormat",false );
+ m_bCapitalizeNameOfDays = config->readBoolEntry( "CapitalizeNameOfDays",false );
+
+ m_autoDetectUrl = config->readBoolEntry("AutoDetectUrl",false);
+ m_ignoreDoubleSpace = config->readBoolEntry("IgnoreDoubleSpace", true);
+ m_removeSpaceBeginEndLine = config->readBoolEntry("RemoveSpaceBeginEndLine", true);
+
+ m_useBulletStyle = config->readBoolEntry("UseBulletStyle",false);
+ QString tmp = config->readEntry( "BulletStyle", "" );
+ m_bulletStyle = tmp.isEmpty() ? QChar() : tmp[0];
+
+ m_autoChangeFormat = config->readBoolEntry( "AutoChangeFormat", false );
+
+ m_autoReplaceNumber = config->readBoolEntry( "AutoReplaceNumber", true );
+
+ m_useAutoNumberStyle = config->readBoolEntry( "AutoNumberStyle", false );
+
+
+ QString beginDoubleQuote = config->readEntry( "TypographicQuotesBegin" );
+ QString endDoubleQuote = config->readEntry( "TypographicQuotesEnd" );
+
+ m_typographicDoubleQuotes.replace = config->readBoolEntry( "TypographicQuotesEnabled", false );
+
+ QString begin = config->readEntry( "TypographicSimpleQuotesBegin" );
+ QString end = config->readEntry( "TypographicSimpleQuotesEnd" );
+ m_typographicSimpleQuotes.replace = config->readBoolEntry( "TypographicSimpleQuotesEnabled", false );
+
+ m_bAutoSuperScript = config->readBoolEntry( "AutoSuperScript", true );
+
+ config->setGroup( "completion" );
+ m_completion = config->readBoolEntry( "completion", false );
+
+ m_completionAppendSpace = config->readBoolEntry( "CompletionAppendSpace", false );
+ m_minCompletionWordLength = config->readUnsignedNumEntry( "CompletionMinWordLength", 5 );
+ m_nbMaxCompletionWord = config->readUnsignedNumEntry( "NbMaxCompletionWord", 100 );
+ m_addCompletionWord = config->readBoolEntry( "AddCompletionWord", true );
+ m_toolTipCompletion = config->readBoolEntry( "ToolTipCompletion", true );
+ m_keyCompletionAction = ( KoAutoFormat::KeyCompletionAction )config->readUnsignedNumEntry( "CompletionKeyAction", 0 );
+
+ if ( force )
+ {
+ m_entries.setAutoDelete(true);
+ m_entries.clear();
+ m_entries.setAutoDelete(false);
+ m_allLanguages.setAutoDelete(true);
+ m_allLanguages.clear();
+ m_allLanguages.setAutoDelete(false);
+ m_upperCaseExceptions.clear();
+ m_superScriptEntries.clear();
+ m_twoUpperLetterException.clear();
+
+ }
+
+ //config->setGroup( "AutoFormatEntries" );
+
+ readAutoCorrectConfig();
+
+ if( beginDoubleQuote.isEmpty())
+ {
+ if( m_typographicDefaultDoubleQuotes.begin.isNull())
+ m_typographicDoubleQuotes.begin = QChar('');
+ else
+ m_typographicDoubleQuotes.begin = m_typographicDefaultDoubleQuotes.begin;
+ }
+ else
+ m_typographicDoubleQuotes.begin = beginDoubleQuote[0];
+
+ if( endDoubleQuote.isEmpty() )
+ {
+ if( m_typographicDefaultDoubleQuotes.end.isNull())
+ m_typographicDoubleQuotes.end = QChar('');
+ else
+ m_typographicDoubleQuotes.end = m_typographicDefaultDoubleQuotes.end;
+ }
+ else
+ m_typographicDoubleQuotes.end = endDoubleQuote[0];
+
+ m_typographicDoubleQuotes.replace = m_typographicDoubleQuotes.replace
+ && !m_typographicDoubleQuotes.begin.isNull()
+ && !m_typographicDoubleQuotes.end.isNull();
+
+
+ if( begin.isEmpty())
+ {
+ if( m_typographicDefaultSimpleQuotes.begin.isNull())
+ m_typographicSimpleQuotes.begin = QChar('\'');
+ else
+ m_typographicSimpleQuotes.begin = m_typographicDefaultSimpleQuotes.begin;
+ }
+ else
+ m_typographicSimpleQuotes.begin = begin[0];
+
+ if( end.isEmpty() )
+ {
+ if( m_typographicDefaultSimpleQuotes.end.isNull())
+ m_typographicSimpleQuotes.end = QChar('\'');
+ else
+ m_typographicSimpleQuotes.end = m_typographicDefaultSimpleQuotes.end;
+ }
+ else
+ m_typographicSimpleQuotes.end = end[0];
+
+ m_typographicSimpleQuotes.replace = m_typographicSimpleQuotes.replace
+ && !m_typographicSimpleQuotes.end.isNull()
+ && !m_typographicSimpleQuotes.begin.isNull();
+
+
+ loadAllLanguagesAutoCorrection();
+ buildMaxLen();
+ autoFormatIsActive();
+ m_configRead = true;
+}
+
+void KoAutoFormat::readAutoCorrectConfig()
+{
+ Q_ASSERT( m_entries.isEmpty() ); // readConfig is only called once...
+ KLocale klocale(m_doc->instance()->instanceName());
+ QString kdelang = klocale.languageList().front();
+ kdelang.remove( QRegExp( "@.*" ) );
+ kdDebug(32500) << "KoAutoFormat: m_autoFormatLanguage=" << m_autoFormatLanguage << " kdelang=" << kdelang << endl;
+ QString fname;
+ if ( !m_autoFormatLanguage.isEmpty() )
+ {
+ fname = locate( "data", "koffice/autocorrect/" + m_autoFormatLanguage + ".xml", m_doc->instance() );
+ }
+ if ( m_autoFormatLanguage != "all_languages" )
+ {
+ if ( fname.isEmpty() && !kdelang.isEmpty() )
+ fname = locate( "data", "koffice/autocorrect/" + kdelang + ".xml", m_doc->instance() );
+ if ( fname.isEmpty() && kdelang.contains("_") )
+ {
+ kdelang.remove( QRegExp( "_.*" ) );
+ fname = locate( "data", "koffice/autocorrect/" + kdelang + ".xml", m_doc->instance() );
+ }
+ if ( fname.isEmpty() )
+ fname = locate( "data", "koffice/autocorrect/autocorrect.xml", m_doc->instance() );
+ }
+ if ( fname.isEmpty() )
+ return;
+ QFile xmlFile(fname);
+ if(!xmlFile.open(IO_ReadOnly))
+ return;
+
+ QDomDocument doc;
+ if(!doc.setContent(&xmlFile))
+ return;
+
+ if(doc.doctype().name() != "autocorrection") {
+ //return;
+ }
+ QDomElement de=doc.documentElement();
+
+ loadAutoCorrection( de );
+
+ QDomElement upper = de.namedItem( "UpperCaseExceptions" ).toElement();
+ if(!upper.isNull())
+ {
+ QDomNodeList nl = upper.childNodes();
+ for(uint i = 0; i < nl.count(); i++)
+ {
+ m_upperCaseExceptions+= nl.item(i).toElement().attribute("exception");
+ }
+ }
+
+ QDomElement twoUpper = de.namedItem( "TwoUpperLetterExceptions" ).toElement();
+ if(!twoUpper.isNull())
+ {
+ QDomNodeList nl = twoUpper.childNodes();
+ for(uint i = 0; i < nl.count(); i++)
+ {
+ m_twoUpperLetterException+= nl.item(i).toElement().attribute("exception");
+ }
+ }
+
+ QDomElement superScript = de.namedItem( "SuperScript" ).toElement();
+ if(!superScript.isNull())
+ {
+ QDomNodeList nl = superScript.childNodes();
+ for(uint i = 0; i < nl.count() ; i++) {
+ //bug in qmap we overwrite = false doesn't work
+ //so we can't add multiple "othernb"
+ m_superScriptEntries.insert( nl.item(i).toElement().attribute("find"), KoAutoFormatEntry(nl.item(i).toElement().attribute("super")),FALSE );
+ }
+ }
+
+ QDomElement doubleQuote = de.namedItem( "DoubleQuote" ).toElement();
+ if(!doubleQuote.isNull())
+ {
+ QDomElement childItem = doubleQuote.namedItem("doublequote").toElement();
+ if ( !childItem.isNull() )
+ {
+ QString attr = childItem.attribute( "begin" );
+ if ( !attr.isEmpty() && attr[0] != 0 )
+ m_typographicDefaultDoubleQuotes.begin = attr[0];
+ attr = childItem.attribute( "end" );
+ if ( !attr.isEmpty() && attr[0] != 0 )
+ m_typographicDefaultDoubleQuotes.end = attr[0];
+ }
+ }
+ QDomElement simpleQuote = de.namedItem( "SimpleQuote" ).toElement();
+ if(!simpleQuote.isNull())
+ {
+ QDomElement childItem = simpleQuote.namedItem("simplequote").toElement();
+ if ( !childItem.isNull() )
+ {
+ QString attr = childItem.attribute( "begin" );
+ if ( !attr.isEmpty() && attr[0] != 0 )
+ m_typographicDefaultSimpleQuotes.begin = attr[0];
+ attr = childItem.attribute( "end" );
+ if ( !attr.isEmpty() && attr[0] != 0 )
+ m_typographicDefaultSimpleQuotes.end = attr[0];
+ }
+ }
+}
+
+void KoAutoFormat::loadAllLanguagesAutoCorrection()
+{
+ QString fname = locate( "data", "koffice/autocorrect/all_languages.xml", m_doc->instance() );
+ if ( fname.isEmpty() )
+ return;
+ QFile xmlFile( fname );
+ if(xmlFile.open(IO_ReadOnly))
+ {
+ QDomDocument doc;
+ if(!doc.setContent(&xmlFile)) {
+ return;
+ }
+ if(doc.doctype().name() != "autocorrection") {
+ //return;
+ }
+ QDomElement de=doc.documentElement();
+
+ loadAutoCorrection( de, true );
+ xmlFile.close();
+ }
+}
+
+void KoAutoFormat::loadAutoCorrection( const QDomElement & _de, bool _allLanguages )
+{
+ QDomElement item = _de.namedItem( "items" ).toElement();
+ if(!item.isNull())
+ {
+ QDomNodeList nl = item.childNodes();
+ m_maxFindLength=nl.count();
+ for(uint i = 0; i < m_maxFindLength; i++) {
+ loadEntry( nl.item(i).toElement(), _allLanguages);
+ }
+ }
+}
+
+void KoAutoFormat::loadEntry( const QDomElement &nl, bool _allLanguages)
+{
+ KoAutoFormatEntry *tmp =new KoAutoFormatEntry(nl.attribute("replace"));
+ if ( nl.hasAttribute("FONT"))
+ {
+ tmp->createNewEntryContext();
+ tmp->formatEntryContext()->m_family=nl.attribute("FONT");
+ tmp->formatEntryContext()->m_optionsMask |= KoSearchContext::Family;
+ }
+ if ( nl.hasAttribute("SIZE" ))
+ {
+ tmp->createNewEntryContext();
+ tmp->formatEntryContext()->m_size = nl.attribute("SIZE" ).toInt();
+ tmp->formatEntryContext()->m_optionsMask |= KoSearchContext::Size;
+ }
+ if (nl.hasAttribute("BOLD" ))
+ {
+ tmp->createNewEntryContext();
+ tmp->formatEntryContext()->m_optionsMask |= KoSearchContext::Bold;
+ QString value = nl.attribute("BOLD");
+ if ( value.toInt() == 1 )
+ tmp->formatEntryContext()->m_options |= KoSearchContext::Bold;
+ }
+ if (nl.hasAttribute("ITALIC" ))
+ {
+ tmp->createNewEntryContext();
+ tmp->formatEntryContext()->m_optionsMask |= KoSearchContext::Italic;
+ QString value = nl.attribute("ITALIC");
+ if ( value.toInt() == 1 )
+ tmp->formatEntryContext()->m_options |= KoSearchContext::Italic;
+ }
+ if (nl.hasAttribute("UNDERLINE" ))
+ {
+ tmp->createNewEntryContext();
+ tmp->formatEntryContext()->m_optionsMask |= KoSearchContext::Underline;
+ QString value = nl.attribute("UNDERLINE");
+ if ( value =="single" )
+ tmp->formatEntryContext()->m_underline = KoTextFormat::U_SIMPLE;
+ else if ( value =="double" )
+ tmp->formatEntryContext()->m_underline = KoTextFormat::U_DOUBLE;
+ else if ( value =="single-bold" )
+ tmp->formatEntryContext()->m_underline = KoTextFormat::U_SIMPLE_BOLD;
+ else
+ tmp->formatEntryContext()->m_underline = KoTextFormat::U_NONE;
+ }
+ if (nl.hasAttribute("STRIKEOUT" ))
+ {
+ tmp->createNewEntryContext();
+ tmp->formatEntryContext()->m_optionsMask |= KoSearchContext::StrikeOut;
+ QString value = nl.attribute("STRIKEOUT");
+ if ( value =="single" )
+ tmp->formatEntryContext()->m_strikeOut = KoTextFormat::S_SIMPLE;
+ else if ( value =="double" )
+ tmp->formatEntryContext()->m_strikeOut = KoTextFormat::S_DOUBLE;
+ else if ( value =="single-bold" )
+ tmp->formatEntryContext()->m_strikeOut = KoTextFormat::S_SIMPLE_BOLD;
+ else
+ tmp->formatEntryContext()->m_strikeOut = KoTextFormat::S_NONE;
+ }
+ if (nl.hasAttribute("VERTALIGN" ))
+ {
+ tmp->createNewEntryContext();
+ tmp->formatEntryContext()->m_optionsMask |= KoSearchContext::VertAlign;
+ QString value = nl.attribute("VERTALIGN");
+ tmp->formatEntryContext()->m_vertAlign=static_cast<KoTextFormat::VerticalAlignment>( value.toInt() );
+
+ }
+ if ( nl.hasAttribute("TEXTCOLOR" ))
+ {
+ tmp->createNewEntryContext();
+ tmp->formatEntryContext()->m_optionsMask |= KoSearchContext::Color;
+ QColor col( nl.attribute("TEXTCOLOR" ));
+ tmp->formatEntryContext()->m_color = col;
+ }
+ if ( nl.hasAttribute("TEXTBGCOLOR" ))
+ {
+ tmp->createNewEntryContext();
+ tmp->formatEntryContext()->m_optionsMask |= KoSearchContext::BgColor;
+ QColor col( nl.attribute("TEXTBGCOLOR" ));
+ tmp->formatEntryContext()->m_backGroundColor = col;
+ }
+ if ( !_allLanguages )
+ m_entries.insert( nl.attribute("find"), tmp );
+ else
+ m_allLanguages.insert( nl.attribute("find"), tmp );
+
+}
+
+void KoAutoFormat::saveConfig()
+{
+ KConfig* config = KoGlobal::kofficeConfig();
+ KLocale klocale(m_doc->instance()->instanceName());
+
+ KConfigGroupSaver cgs( config, "AutoFormat" );
+ config->writeEntry( "ConvertUpperCase", m_convertUpperCase );
+ config->writeEntry( "formatLanguage", m_autoFormatLanguage=="all_languages" ? klocale.languageList().front() : m_autoFormatLanguage);
+
+ config->writeEntry( "ConvertUpperUpper", m_convertUpperUpper );
+ config->writeEntry( "includeTwoLetterException", m_includeTwoUpperLetterException );
+ config->writeEntry( "includeAbbreviation", m_includeAbbreviation );
+
+ config->writeEntry( "TypographicQuotesBegin", QString( m_typographicDoubleQuotes.begin ) );
+ config->writeEntry( "TypographicQuotesEnd", QString( m_typographicDoubleQuotes.end ) );
+ config->writeEntry( "TypographicQuotesEnabled", m_typographicDoubleQuotes.replace );
+ config->writeEntry( "TypographicSimpleQuotesBegin", QString( m_typographicSimpleQuotes.begin ) );
+ config->writeEntry( "TypographicSimpleQuotesEnd", QString( m_typographicSimpleQuotes.end ) );
+ config->writeEntry( "TypographicSimpleQuotesEnabled", m_typographicSimpleQuotes.replace );
+
+ config->writeEntry( "AdvancedAutocorrect", m_advancedAutoCorrect );
+ config->writeEntry( "AutoCorrectionWithFormat", m_bAutoCorrectionWithFormat );
+ config->writeEntry( "CapitalizeNameOfDays", m_bCapitalizeNameOfDays );
+
+ config->writeEntry( "AutoDetectUrl",m_autoDetectUrl);
+
+ config->writeEntry( "IgnoreDoubleSpace",m_ignoreDoubleSpace );
+ config->writeEntry( "RemoveSpaceBeginEndLine",m_removeSpaceBeginEndLine );
+
+ config->writeEntry( "UseBulletStyle", m_useBulletStyle);
+ config->writeEntry( "BulletStyle", QString(m_bulletStyle));
+
+ config->writeEntry( "AutoChangeFormat", m_autoChangeFormat);
+
+ config->writeEntry( "AutoReplaceNumber", m_autoReplaceNumber);
+
+ config->writeEntry( "AutoNumberStyle", m_useAutoNumberStyle );
+
+ config->writeEntry( "AutoSuperScript", m_bAutoSuperScript );
+
+ config->setGroup( "completion" );
+ config->writeEntry( "completion", m_completion );
+ config->writeEntry( "CompletionAppendSpace", m_completionAppendSpace );
+ config->writeEntry( "CompletionMinWordLength", m_minCompletionWordLength);
+ config->writeEntry( "NbMaxCompletionWord", m_nbMaxCompletionWord);
+ config->writeEntry( "AddCompletionWord", m_addCompletionWord );
+ config->writeEntry( "ToolTipCompletion", m_toolTipCompletion );
+ config->writeEntry( "CompletionKeyAction", ( int )m_keyCompletionAction );
+
+ config->setGroup( "AutoFormatEntries" );
+ QDictIterator<KoAutoFormatEntry> it( m_entries );
+
+ //refresh m_maxFindLength
+ m_maxFindLength=0;
+ QDomDocument doc("autocorrection");
+
+ QDomElement begin = doc.createElement( "Word" );
+ doc.appendChild( begin );
+ QDomElement items;
+ items = doc.createElement("items");
+ QDomElement data;
+ for ( ; it.current() ; ++it )
+ {
+ items.appendChild(saveEntry( it, doc));
+ //m_maxFindLength=QMAX(m_maxFindLength,it.currentKey().length());
+ }
+ buildMaxLen();
+ begin.appendChild(items);
+
+ QDomElement upper;
+ upper = doc.createElement("UpperCaseExceptions");
+ for ( QStringList::Iterator it = m_upperCaseExceptions.begin(); it != m_upperCaseExceptions.end();++it )
+ {
+ data = doc.createElement("word");
+ data.setAttribute("exception",(*it) );
+ upper.appendChild(data);
+ }
+ begin.appendChild(upper);
+
+ QDomElement twoUpper;
+ twoUpper = doc.createElement("TwoUpperLetterExceptions");
+
+ for ( QStringList::Iterator it = m_twoUpperLetterException.begin(); it != m_twoUpperLetterException.end();++it )
+ {
+ data = doc.createElement("word");
+ data.setAttribute("exception",(*it) );
+ twoUpper.appendChild(data);
+ }
+ begin.appendChild(twoUpper);
+
+ QDomElement super;
+ super = doc.createElement("SuperScript");
+ KoAutoFormatEntryMap::Iterator it2 = m_superScriptEntries.begin();
+ for ( ; it2 != m_superScriptEntries.end() ; ++it2 )
+ {
+ data = doc.createElement("superscript");
+ data.setAttribute("find", it2.key());
+ data.setAttribute("super", it2.data().replace());
+ super.appendChild(data);
+ }
+ begin.appendChild(super);
+
+ QDomElement doubleQuote;
+ doubleQuote = doc.createElement("DoubleQuote");
+ data = doc.createElement("doublequote");
+ data.setAttribute("begin", QString(m_typographicDefaultDoubleQuotes.begin));
+ data.setAttribute("end", QString(m_typographicDefaultDoubleQuotes.end));
+ doubleQuote.appendChild(data);
+ begin.appendChild(doubleQuote);
+
+
+ QDomElement simpleQuote;
+ simpleQuote = doc.createElement("SimpleQuote");
+ data = doc.createElement("simplequote");
+ data.setAttribute("begin", QString(m_typographicDefaultSimpleQuotes.begin));
+ data.setAttribute("end", QString(m_typographicDefaultSimpleQuotes.end));
+ simpleQuote.appendChild(data);
+ begin.appendChild(simpleQuote);
+ QFile f;
+ if ( m_autoFormatLanguage.isEmpty())
+ f.setName(locateLocal("data", "koffice/autocorrect/"+klocale.languageList().front() + ".xml",m_doc->instance()));
+ else
+ f.setName(locateLocal("data", "koffice/autocorrect/"+m_autoFormatLanguage + ".xml",m_doc->instance()));
+ if(!f.open(IO_WriteOnly)) {
+ kdWarning()<<"Error during saving autoformat to " << f.name() << endl;
+ return;
+ }
+ QTextStream ts(&f);
+ doc.save(ts, 2);
+ f.close();
+ autoFormatIsActive();
+ config->sync();
+}
+
+QDomElement KoAutoFormat::saveEntry( QDictIterator<KoAutoFormatEntry> _entry, QDomDocument doc)
+{
+ QDomElement data;
+ data = doc.createElement("item");
+ data.setAttribute("find", _entry.currentKey());
+ data.setAttribute("replace", _entry.current()->replace());
+ if ( _entry.current()->formatEntryContext() )
+ {
+ KoSearchContext *tmp = _entry.current()->formatEntryContext();
+ if ( tmp->m_optionsMask & KoSearchContext::Family )
+ {
+ data.setAttribute("FONT", tmp->m_family);
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::Size )
+ {
+ data.setAttribute("SIZE", tmp->m_size);
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::Italic )
+ {
+ data.setAttribute("ITALIC", static_cast<bool>(tmp->m_options & KoSearchContext::Italic));
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::Bold )
+ {
+ data.setAttribute("BOLD", static_cast<bool>(tmp->m_options & KoSearchContext::Bold));
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::Shadow )
+ {
+ data.setAttribute("SHADOWTEXT", static_cast<bool>(tmp->m_options & KoSearchContext::Shadow));
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::WordByWord )
+ {
+ data.setAttribute("WORDBYWORD", static_cast<bool>(tmp->m_options & KoSearchContext::WordByWord));
+ }
+
+ if ( tmp->m_optionsMask & KoSearchContext::Underline )
+ {
+ switch( tmp->m_underline )
+ {
+ case KoTextFormat::U_SIMPLE:
+ data.setAttribute("UNDERLINE", "single");
+ break;
+ case KoTextFormat::U_DOUBLE:
+ data.setAttribute("UNDERLINE", "double");
+ break;
+ case KoTextFormat::U_SIMPLE_BOLD:
+ data.setAttribute("UNDERLINE", "single-bold");
+ break;
+ case KoTextFormat::U_WAVE:
+ data.setAttribute("UNDERLINE", "wave");
+ break;
+ case KoTextFormat::U_NONE:
+ data.setAttribute("UNDERLINE", "none");
+ break;
+ }
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::StrikeOut )
+ {
+ switch( tmp->m_strikeOut )
+ {
+ case KoTextFormat::S_SIMPLE:
+ data.setAttribute("STRIKEOUT", "single");
+ break;
+ case KoTextFormat::S_DOUBLE:
+ data.setAttribute("STRIKEOUT", "double");
+ break;
+ case KoTextFormat::S_NONE:
+ data.setAttribute("STRIKEOUT", "none");
+ break;
+ case KoTextFormat::S_SIMPLE_BOLD:
+ data.setAttribute("STRIKEOUT", "single-bold");
+ break;
+ }
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::Attribute )
+ {
+ data.setAttribute("FONTATTRIBUTE", KoTextFormat::attributeFontToString( tmp->m_attribute ) );
+ }
+
+ if ( tmp->m_optionsMask & KoSearchContext::VertAlign)
+ {
+ data.setAttribute( "VERTALIGN", static_cast<int>(tmp->m_vertAlign) );
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::BgColor )
+ {
+ data.setAttribute( "TEXTCOLOR", tmp->m_color.name());
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::Color )
+ {
+ data.setAttribute( "TEXTCOLOR", tmp->m_color.name());
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::BgColor )
+ {
+ data.setAttribute( "TEXTBGCOLOR", tmp->m_backGroundColor.name());
+ }
+ if ( tmp->m_optionsMask & KoSearchContext::Language )
+ data.setAttribute( "LANGUAGE", tmp->m_language );
+ }
+ return data;
+}
+
+void KoAutoFormat::addAutoFormatEntry( const QString &key, const QString &replace )
+{
+ KoAutoFormatEntry *findEntry = m_entries.find( key);
+ if ( findEntry )
+ {
+ if ( findEntry->replace().lower() == replace.lower() )
+ return;
+ }
+
+ KoAutoFormatEntry *tmp = new KoAutoFormatEntry( replace );
+ m_entries.insert( key, tmp );
+ saveConfig();
+ buildMaxLen();
+}
+
+QString KoAutoFormat::getLastWord(KoTextParag *parag, int const index)
+{
+ QString lastWord;
+ KoTextString *s = parag->string();
+ for ( int i = index - 1; i >= 0; --i )
+ {
+ QChar ch = s->at( i ).c;
+ if ( ch.isSpace() || ch.isPunct() )
+ break;
+ lastWord.prepend( ch );
+ }
+ return lastWord;
+}
+
+QString KoAutoFormat::getLastWord(const int max_words, KoTextParag *parag, int const index)
+{
+ QString lastWord;
+ KoTextString const *s = parag->string();
+ int words = 0;
+ for ( int i = index - 1; i >= 0; --i )
+ {
+ QChar ch = s->at( i ).c;
+ if ( ch.isSpace() || ch.isPunct() )
+ {
+ ++words;
+ if (words >= max_words)
+ break;
+ }
+ lastWord.prepend( ch );
+ }
+ return lastWord;
+}
+
+QString KoAutoFormat::getWordAfterSpace(KoTextParag *parag, int const index)
+{
+ QString word;
+ KoTextString *s = parag->string();
+ for ( int i = index - 1; i >= 0; --i )
+ {
+ QChar ch = s->at( i ).c;
+ if ( ch.isSpace() )
+ break;
+ word.prepend( ch );
+ }
+ return word;
+
+}
+
+bool KoAutoFormat::doCompletion( KoTextCursor* textEditCursor, KoTextParag *parag, int const index, KoTextObject *txtObj )
+{
+ if( m_completion )
+ {
+ bool part=false;
+ QString lastWord, word;
+ if (m_completionBox && m_completionBox->isShown() ) //word completion with the tool-tip box
+ {
+ word = m_completionBox->text();
+ lastWord = m_completionBox->lastWord();
+ }
+ else
+ {
+ QStringList wordlist, new_wordlist;
+ for (uint i=1; i <= m_countMaxWords; i++ )
+ {
+ lastWord = getLastWord(i, parag, index+1);
+ wordlist += m_listCompletion->substringCompletion( lastWord ); //find all completion words that contains lastWord
+ }
+ uint maxlength = 0;
+ for ( QStringList::ConstIterator it = wordlist.begin(); it != wordlist.end(); ++it ) // several completion words were found
+ {
+ if ( (*it).startsWith( lastWord, false ) && new_wordlist.find(*it) == new_wordlist.end() ) //the completion words that begin with lastWord
+ {
+ if ( (*it).length() > maxlength )
+ maxlength = (*it).length();
+ new_wordlist.append(*it);
+ //kdDebug() << "adding word completion:" << *it << endl;
+ }
+ }
+ if ( new_wordlist.isEmpty() )
+ return false;
+ if ( new_wordlist.count() == 1 ) // only one completion word was found
+ word = new_wordlist.first();
+ else
+ {
+ //we must extract the common part of the completions
+ for (uint i = lastWord.length(); i<maxlength && !part; i++) //iterate through all completion words
+ {
+ QChar ch = new_wordlist.first().at(i);
+ for (QStringList::ConstIterator it = new_wordlist.begin(); it != new_wordlist.end(); ++it )
+ {
+ if ( (*it).at(i).lower() != ch.lower() )
+ {
+ word = (*it).left(i); //the completion word is truncated here
+ //kdDebug() << "set the word completion to:" << word << endl;
+ part=true; // completion of a part of a word; a space-character after the completion should not be inserted
+ break;
+ }
+ }
+ }
+ }
+ if (word == lastWord)
+ return false;
+
+ word=lastWord+word.right(word.length()-lastWord.length() );
+ }
+ if( !word.isEmpty() )
+ {
+ int const lastword_length = lastWord.length();
+ int const start = index+1 - lastword_length;
+ int const length = word.length();
+
+ KMacroCommand *macro = new KMacroCommand( i18n("Completion Word"));
+ KoTextCursor cursor( parag->document() );
+ cursor.setParag( parag );
+ cursor.setIndex( start );
+ KoTextDocument * textdoc = parag->textDocument();
+ if( m_completionAppendSpace && !part)
+ word+=" ";
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + lastword_length );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+
+ macro->addCommand( txtObj->replaceSelectionCommand( textEditCursor, word,
+ i18n("Completion Word"),
+ KoTextDocument::HighlightSelection ));
+
+ if ( m_completionAppendSpace && !m_ignoreUpperCase && (m_convertUpperUpper || m_convertUpperCase) && !part)
+ {
+ //find the first word
+ for (uint i=1; i < word.length(); i++)
+ if ( word.at(i).isSpace() || word.at(i).isPunct() )
+ {
+ word.truncate(i);
+ break;
+ }
+ int const newPos = start + word.length();// + index - 3;
+ KCommand *cmd = doUpperCase( textEditCursor, parag, newPos, word, txtObj );
+ if( cmd )
+ macro->addCommand( cmd );
+ txtObj->emitHideCursor();
+ textEditCursor->setIndex(start+ length+1);
+ }
+ else
+ {
+ txtObj->emitHideCursor();
+ textEditCursor->setIndex(start+ length);
+ }
+ txtObj->emitNewCommand( macro );
+
+ // The space/tab/CR that we inserted is still there but delete/insert moved the cursor
+ // -> go right
+
+ txtObj->emitShowCursor();
+ removeToolTipCompletion();
+ return true;
+ }
+ }
+ return false;
+}
+
+bool KoAutoFormat::doToolTipCompletion( KoTextCursor* textEditCursor, KoTextParag *parag, int index, KoTextObject *txtObj, int keyPressed )
+{
+ if( m_completion && m_toolTipCompletion && m_completionBox && m_completionBox->isShown() )
+ {
+ if ( ( keyPressed == Qt::Key_Return && m_keyCompletionAction==Enter )
+ || ( keyPressed == Qt::Key_Enter && m_keyCompletionAction==Enter )
+ || ( keyPressed == Qt::Key_Tab && m_keyCompletionAction==Tab )
+ || ( keyPressed == Qt::Key_Space && m_keyCompletionAction==Space )
+ || ( keyPressed == Qt::Key_End && m_keyCompletionAction==End )
+ || ( keyPressed == Qt::Key_Right && m_keyCompletionAction==Right ))
+ {
+ return doCompletion(textEditCursor, parag, index, txtObj);
+ }
+ }
+ return false;
+}
+void KoAutoFormat::showToolTipBox(KoTextParag *parag, int index, QWidget *widget, const QPoint &pos )
+{
+
+ if( m_completion && m_toolTipCompletion)
+ {
+ QString lastWord, word;
+ for (uint i=1; i <= m_countMaxWords; i++ )
+ {
+ lastWord = getLastWord(i, parag, index+1);
+ word=m_listCompletion->makeCompletion( lastWord );
+ if ( !word.isEmpty())
+ break;
+ }
+ if( !word.isEmpty() && word!=lastWord )
+ {
+ uint const length = lastWord.length();
+ if (length<=3)
+ return;
+ word=lastWord+word.right(word.length()-length);
+ if (!m_completionBox)
+ m_completionBox = new KoCompletionBox(0,0,Qt::WType_Popup);
+ QPoint const show_pos = widget->mapToGlobal(pos);
+ m_completionBox->setText(word);
+ m_completionBox->setLastWord(lastWord);
+ m_completionBox->adjustSize();
+ int const height = m_completionBox->sizeHint().height();
+ m_completionBox->move( show_pos.x(), show_pos.y() - height );
+
+ if (!m_completionBox->isShown() )
+ {
+ m_completionBox->show();
+ widget->setFocus();
+ }
+ }
+ else
+ removeToolTipCompletion();
+ }
+}
+void KoAutoFormat::removeToolTipCompletion()
+{
+ if (m_completion && m_toolTipCompletion && m_completionBox && m_completionBox->isShown())
+ m_completionBox->hide();
+}
+
+void KoAutoFormat::autoFormatIsActive()
+{
+ m_bAutoFormatActive = m_useBulletStyle ||
+ m_removeSpaceBeginEndLine ||
+ m_autoDetectUrl ||
+ m_convertUpperUpper ||
+ m_convertUpperCase ||
+ m_autoReplaceNumber ||
+ m_autoChangeFormat ||
+ m_completion ||
+ m_typographicDoubleQuotes.replace ||
+ m_typographicSimpleQuotes.replace ||
+ m_entries.count()!=0 ||
+ m_allLanguages.count()!=0;
+}
+
+void KoAutoFormat::doAutoFormat( KoTextCursor* textEditCursor, KoTextParag *parag, int index, QChar ch,KoTextObject *txtObj )
+{
+ m_ignoreUpperCase = false;
+
+ if ( !m_configRead )
+ readConfig();
+
+ if ( !m_bAutoFormatActive )
+ return;
+
+ if( ch.isSpace())
+ {
+ //a link doesn't have a space
+ //=>m_ignoreUpperCase = false
+ //m_ignoreUpperCase=false;
+
+ QString word=getWordAfterSpace(parag,index);
+
+ if ( m_autoChangeFormat && index > 3)
+ {
+ KCommand *cmd =doAutoChangeFormat( textEditCursor, parag, index, word, txtObj );
+ if ( cmd )
+ txtObj->emitNewCommand( cmd );
+
+ }
+ if ( m_autoReplaceNumber )
+ {
+ KCommand *cmd = doAutoReplaceNumber( textEditCursor, parag, index, word, txtObj );
+ if ( cmd )
+ txtObj->emitNewCommand( cmd );
+ }
+ }
+
+ if( ch =='\n' )
+ {
+
+ if( m_removeSpaceBeginEndLine && index > 1)
+ {
+ KCommand *cmd = doRemoveSpaceBeginEndLine( textEditCursor, parag, txtObj, index );
+ if ( cmd )
+ txtObj->emitNewCommand( cmd );
+ }
+ if( m_useBulletStyle && index > 3)
+ {
+ KCommand *cmd =doUseBulletStyle( textEditCursor, parag, txtObj, index );
+ if ( cmd )
+ txtObj->emitNewCommand( cmd );
+ }
+ if( m_useAutoNumberStyle && index > 3 )
+ {
+ KCommand *cmd =doUseNumberStyle( textEditCursor, parag, txtObj, index );
+ if ( cmd )
+ txtObj->emitNewCommand( cmd );
+ }
+ if( m_convertUpperUpper && m_includeTwoUpperLetterException )
+ doAutoIncludeUpperUpper(textEditCursor, parag, txtObj );
+ if( m_convertUpperCase && m_includeAbbreviation )
+ doAutoIncludeAbbreviation(textEditCursor, parag, txtObj );
+ }
+
+ //kdDebug(32500) << "KoAutoFormat::doAutoFormat ch=" << QString(ch) << endl;
+ //if ( !m_enabled )
+ // return;
+ // Auto-correction happens when pressing space, tab, CR, punct etc.
+ if ( (ch.isSpace() || ch==':' || ch=='?' || ch=='!' || ch==',' || (m_advancedAutoCorrect && ch=='.') ) && index > 0 )
+ {
+ KCommand *cmd = 0L;
+ KMacroCommand *macro = 0L;
+ QString lastWord = getWordAfterSpace(parag, index);
+ //kdDebug(32500) << "KoAutoFormat::doAutoFormat lastWord=" << lastWord << endl;
+
+ if ( ch == '.')
+ detectStartOfLink( parag, index, true );
+ else
+ detectStartOfLink( parag, index, false );
+
+ if ( !m_wordInserted && m_advancedAutoCorrect && !m_ignoreUpperCase)
+ {
+ int const completionBeginPos = index -lastWord.length();
+ int newPos = index;
+ cmd = doAutoCorrect( textEditCursor, parag, newPos, txtObj );
+
+ if( cmd )
+ {
+ if (!macro)
+ macro = new KMacroCommand(i18n("Autocorrection"));
+ macro->addCommand( cmd );
+ }
+
+ int const endPos=textEditCursor->index();
+ bool was_a_replacement;
+ if (index == newPos)
+ was_a_replacement = false;
+ else
+ was_a_replacement = true;
+
+ if( was_a_replacement) // a replacement took place
+ {
+ txtObj->emitHideCursor();
+ if(endPos==0) //new line, the user pressed enter
+ {
+ textEditCursor->gotoUp();
+ textEditCursor->gotoLineEnd();
+ newPos=textEditCursor->index();
+ }
+ else
+ newPos= endPos-1;
+
+ m_wordInserted = true; //don't allow other replacements in this replacement
+ for(int i=completionBeginPos; i<newPos;i++)
+ {
+ textEditCursor->setIndex(i);
+ doAutoFormat( textEditCursor, parag, i, parag->toString().at(i),txtObj );
+
+ }
+ textEditCursor->setIndex(newPos);
+ doAutoFormat( textEditCursor, parag, newPos, ch,txtObj );
+ m_wordInserted = false;
+ if (endPos==0)
+ {
+ textEditCursor->gotoLineStart();
+ textEditCursor->gotoDown();
+ }
+ else
+ textEditCursor->setIndex(newPos+1);
+ txtObj->emitShowCursor();
+ return;
+ }
+
+ }
+
+ if (!m_ignoreUpperCase && m_bCapitalizeNameOfDays)
+ {
+ KCommand *cmd = doCapitalizeNameOfDays( textEditCursor, parag, index, lastWord, txtObj );
+
+ if( cmd )
+ {
+ if (!macro)
+ macro = new KMacroCommand(i18n("Autocorrection"));
+ macro->addCommand( cmd );
+ m_ignoreUpperCase = true;
+ }
+ }
+
+ if (ch=='.')
+ return;
+
+ //kdDebug(32500)<<" m_listCompletion->items() :"<<m_listCompletion->items()<<endl;
+ if( !m_ignoreUpperCase && m_completion && m_addCompletionWord && m_listCompletion->items().count() < m_nbMaxCompletionWord )
+ {
+ QString completionWord("");
+ QChar ch;
+ for (uint i=0;i<lastWord.length();i++)
+ {
+ ch = lastWord.at(i);
+ if (ch.isPunct() && ch!='-' && ch!='=' )
+ {
+ if (completionWord.at(0) == '-')
+ completionWord.remove(0,1);
+
+ if (completionWord.length()>= m_minCompletionWordLength && !completionWord.isEmpty() && m_listCompletion->makeCompletion(completionWord).isEmpty())
+ {
+ kdDebug() << "Adding:" << completionWord << endl;
+ m_listCompletion->addItem( completionWord );
+ if ( completionWord.length() > m_countMaxWords )
+ m_countMaxWords = completionWord.length();
+
+ }
+ completionWord = "";
+ }
+ else
+ {
+ completionWord.append(ch);
+ if (i==lastWord.length()-1)
+ {
+ if (completionWord.at(0) == '-')
+ completionWord.remove(0,1);
+ if (completionWord.at(completionWord.length()-1) == '-')
+ completionWord.truncate(completionWord.length()-1);
+ completionWord.remove('=');
+ if (completionWord.length()>= m_minCompletionWordLength && !completionWord.isEmpty() && m_listCompletion->makeCompletion(completionWord).isEmpty())
+ {
+ kdDebug() << "Adding:" << completionWord << endl;
+ m_listCompletion->addItem( completionWord );
+ if ( completionWord.length() > m_countMaxWords )
+ m_countMaxWords = completionWord.length();
+ }
+ }
+ }
+ }
+ }
+
+ if( m_autoDetectUrl && m_ignoreUpperCase && (ch!='?' || lastWord.at(lastWord.length()-1)=='?') )
+ {
+ doAutoDetectUrl( textEditCursor, parag, index, lastWord, txtObj );
+ //textEditCursor->gotoRight();
+ }
+
+ if (!m_ignoreUpperCase && (m_convertUpperUpper || m_convertUpperCase) )
+ {
+ cmd = doUpperCase( textEditCursor, parag, index, lastWord, txtObj );
+
+ if( cmd )
+ {
+ if (!macro)
+ macro = new KMacroCommand(i18n("Autocorrection"));
+ macro->addCommand( cmd );
+ }
+ }
+
+ if ( macro )
+ txtObj->emitNewCommand( macro );
+
+ if(!m_ignoreUpperCase && m_bAutoSuperScript && m_superScriptEntries.count()>0)
+ {
+ if( lastWord.at(0).isPunct() )
+ lastWord.remove(0,1);
+ KCommand * cmd = doAutoSuperScript( textEditCursor, parag, index, lastWord, txtObj );
+ if ( cmd )
+ txtObj->emitNewCommand( cmd );
+ }
+
+ }
+ else
+ {
+ if ( ch == '"' && m_typographicDoubleQuotes.replace )
+ {
+ KCommand *cmd = doTypographicQuotes( textEditCursor, parag, index, txtObj, true /*double quote*/ );
+ if ( cmd )
+ txtObj->emitNewCommand( cmd );
+ }
+ else if ( ch == '\'' && m_typographicDoubleQuotes.replace )
+ {
+ KCommand *cmd = doTypographicQuotes( textEditCursor, parag, index, txtObj, false /* simple quote*/ );
+ if ( cmd )
+ txtObj->emitNewCommand( cmd );
+ }
+ }
+}
+
+KCommand *KoAutoFormat::doAutoCorrect( KoTextCursor* textEditCursor, KoTextParag *parag, int &index, KoTextObject *txtObj )
+{
+ //if(!m_advancedAutoCorrect)
+ // return 0L;
+ // Prepare an array with words of different lengths, all terminating at "index".
+ // Obviously only full words are put into the array
+ // But this allows 'find strings' with spaces and punctuation in them.
+ QString * wordArray = new QString[m_maxFindLength+1];
+ {
+ QString word;
+ KoTextString *s = parag->string();
+ for ( int i = index - 1; i >= 0; --i )
+ {
+ QChar ch = s->at( i ).c;
+ // It's necessary to stop at spaces - #99063
+ if ( ch.isSpace() /*|| ch.isPunct()*/ || i==0)
+ {
+ if(i==0 && word.length()<m_maxFindLength)
+ word.prepend( ch );
+ wordArray[word.length()]=word;
+ }
+ word.prepend( ch );
+ if (((index - 1)-i) == (int)m_maxFindLength)
+ break;
+ }
+
+ }
+ KCommand *cmd = autoFormatWord( textEditCursor, parag, index, txtObj, wordArray, false );
+ if ( !cmd )
+ cmd = autoFormatWord( textEditCursor, parag, index, txtObj, wordArray, true );
+ delete [] wordArray;
+ return cmd;
+}
+
+
+KCommand *KoAutoFormat::autoFormatWord( KoTextCursor* textEditCursor, KoTextParag *parag, int &index, KoTextObject *txtObj, QString * _wordArray, bool _allLanguages )
+{
+ KoTextDocument * textdoc = parag->textDocument();
+
+ // Now for each entry in the autocorrect list, look if
+ // the word of the same size in wordArray matches.
+ // This allows an o(n) behaviour instead of an o(n^2).
+ for(int i=m_maxFindLength;i>0;--i)
+ {
+ if ( !_wordArray[i].isEmpty())
+ {
+ KoAutoFormatEntry* it = 0L;
+ if ( _allLanguages )
+ it = m_allLanguages[ _wordArray[i] ];
+ else
+ it = m_entries[ _wordArray[i] ];
+ if ( _wordArray[i]!=0 && it )
+ {
+ unsigned int length = _wordArray[i].length();
+ int const start = index - length;
+ KoTextCursor cursor( parag->document() );
+ cursor.setParag( parag );
+ cursor.setIndex( start );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + length );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ KCommand *cmd = 0L;
+ kdDebug()<<"it->replace() :"<<it->replace()<<endl;
+ if (!it->formatEntryContext() || !m_bAutoCorrectionWithFormat)
+ {
+ cmd = txtObj->replaceSelectionCommand( textEditCursor, it->replace(),
+ i18n("Autocorrect Word"),
+ KoTextDocument::HighlightSelection );
+ }
+ else
+ {
+ int flags = 0;
+ KoTextFormat * lastFormat = parag->at( start )->format();
+ KoTextFormat * newFormat = new KoTextFormat(*lastFormat);
+ changeTextFormat(it->formatEntryContext(), newFormat, flags );
+ KMacroCommand *macro = new KMacroCommand( i18n("Autocorrect Word with Format"));
+ KCommand *cmd2=txtObj->replaceSelectionCommand( textEditCursor, it->replace(),
+ i18n("Autocorrect Word"),
+ KoTextDocument::HighlightSelection );
+ if ( cmd2 )
+ macro->addCommand(cmd2);
+ KoTextCursor cursor( parag->document() );
+ cursor.setParag( parag );
+ cursor.setIndex( start );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + it->replace().length()/*+ length + 1*/ );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+
+ cmd2 =txtObj->setFormatCommand( textEditCursor, &lastFormat, newFormat, flags, false, KoTextDocument::HighlightSelection );
+ macro->addCommand( cmd2);
+
+ index = index - length + it->replace().length();
+ textEditCursor->setIndex(index+1);
+ cmd2 =txtObj->setFormatCommand( textEditCursor, &newFormat, lastFormat, 0 );
+ macro->addCommand( cmd2);
+ parag->at( index+1 )->setFormat(lastFormat);
+
+ cmd = macro;
+ txtObj->emitHideCursor();
+ textEditCursor->gotoRight();
+ txtObj->emitShowCursor();
+
+ return cmd;
+ }
+ // The space/tab/CR that we inserted is still there but delete/insert moved the cursor
+ // -> go right
+
+ txtObj->emitHideCursor();
+ textEditCursor->gotoRight();
+ txtObj->emitShowCursor();
+ index = index - length + it->replace().length();
+ return cmd;
+ }
+ }
+ }
+ return 0L;
+}
+
+KCommand *KoAutoFormat::doTypographicQuotes( KoTextCursor* textEditCursor, KoTextParag *parag, int index, KoTextObject *txtObj, bool doubleQuotes )
+{
+ //kdDebug(32500) << "KoAutoFormat::doTypographicQuotes" << endl;
+ KoTextDocument * textdoc = parag->textDocument();
+ KoTextCursor cursor( parag->document() );
+ cursor.setParag( parag );
+ cursor.setIndex( index );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( index + 1 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+
+ // Need to determine if we want a starting or ending quote.
+ // we use a starting quote in three cases:
+ // 1. if the previous character is a space
+ // 2. if the previous character is some kind of opening punctuation (e.g., "(", "[", or "{")
+ // a. and the character before that is not an opening quote (so that we get quotations of single characters
+ // right)
+ // 3. if the previous character is an opening quote (so that we get nested quotations right)
+ // a. and the character before that is not an opening quote (so that we get quotations of single characters
+ // right)
+ // b. and the previous quote of a different kind (so that we get empty quotations right)
+ QString replacement;
+ bool ending = true;
+
+ if( index > 0 )
+ {
+ QChar::Category c1 = parag->at( index - 1 )->c.category();
+
+ // case 1 and 2
+ if ( c1 == QChar::Separator_Space || c1 == QChar::Separator_Line || c1 == QChar::Separator_Paragraph ||
+ c1 == QChar::Punctuation_Open || c1 == QChar::Other_Control )
+ ending = false;
+
+ // case 3
+ if ( c1 == QChar::Punctuation_InitialQuote )
+ {
+ QChar openingQuote;
+
+ if( doubleQuotes )
+ openingQuote = m_typographicDoubleQuotes.begin;
+ else
+ openingQuote = m_typographicSimpleQuotes.begin;
+
+ // case 3b
+ if( parag->at( index - 1 )->c != openingQuote )
+ ending = false;
+ }
+ }
+
+ // cases 2a and 3a
+ if( index > 1 && !ending )
+ {
+ QChar::Category c2 = parag->at( index - 2 )->c.category();
+ ending = (c2 == QChar::Punctuation_InitialQuote);
+ }
+
+ if( ending )
+ {
+ if( doubleQuotes )
+ replacement = m_typographicDoubleQuotes.end;
+ else
+ replacement = m_typographicSimpleQuotes.end;
+ }
+ else
+ {
+ if( doubleQuotes )
+ replacement = m_typographicDoubleQuotes.begin;
+ else
+ replacement = m_typographicSimpleQuotes.begin;
+ }
+ return txtObj->replaceSelectionCommand( textEditCursor, replacement,
+ i18n("Typographic Quote"),
+ KoTextDocument::HighlightSelection );
+}
+
+KCommand * KoAutoFormat::doUpperCase( KoTextCursor *textEditCursor, KoTextParag *parag,
+ int index, const QString & word, KoTextObject *txtObj )
+{
+ KoTextDocument * textdoc = parag->textDocument();
+ unsigned int length = word.length();
+ if (word.at(length-1) == '.' )
+ {
+ --index;
+ --length;
+ }
+ int const start = index - length;
+ KoTextCursor backCursor( parag->document() );
+ backCursor.setParag( parag );
+ backCursor.setIndex( start );
+
+ // backCursor now points at the first char of the word
+ QChar const firstChar = backCursor.parag()->at( backCursor.index() )->c;
+
+ bool bNeedMove = false;
+ KCommand *cmd = 0L;
+ if ( m_convertUpperCase && isLower( firstChar ) )
+ {
+ bool beginningOfSentence = true; // true if beginning of text
+ // Go back over any space/tab/CR
+ while ( backCursor.index() > 0 || backCursor.parag()->prev() )
+ {
+ beginningOfSentence = false; // we could go back -> false unless we'll find '.'
+ backCursor.gotoLeft();
+ if ( !backCursor.parag()->at( backCursor.index() )->c.isSpace() )
+ break;
+ }
+ // We are now at the first non-space char before the word
+ if ( !beginningOfSentence )
+ beginningOfSentence = isMark( backCursor.parag()->at( backCursor.index() )->c);
+ //beginningOfSentence = isMark( backCursor.parag()->at( backCursor.index() )->c ) && (backCursor.parag()->at( backCursor.index()+1 )->c.isSpace());
+ if ( !beginningOfSentence && start==0 )
+ if ( parag->counter() || backCursor.parag()->at( backCursor.index() )->c.isPunct() )
+ beginningOfSentence = true;
+
+ // Now look for exceptions
+ if ( beginningOfSentence )
+ {
+ QChar const punct = backCursor.parag()->at( backCursor.index() )->c;
+ QString const text = getLastWord( backCursor.parag(), backCursor.index() )
+ + punct;
+ kdDebug() << "text: " << text << endl;
+ // text has the word at the end of the 'sentence', including the termination. Example: "Mr."
+ beginningOfSentence = (m_upperCaseExceptions.findIndex(text)==-1); // Ok if we can't find it
+ }
+
+ if ( beginningOfSentence )
+ {
+ KoTextCursor cursor( parag->document() );
+ cursor.setParag( parag );
+ cursor.setIndex( start );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + 1 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ cmd = txtObj->replaceSelectionCommand( textEditCursor, QString( firstChar.upper() ),
+ i18n("Autocorrect (capitalize first letter)"),
+ KoTextDocument::HighlightSelection );
+ bNeedMove = true;
+ }
+ }
+ else if ( m_convertUpperUpper && isUpper( firstChar ) && length > 2 )
+ {
+ backCursor.setIndex( backCursor.index() + 1 );
+ QChar secondChar = backCursor.parag()->at( backCursor.index() )->c;
+ //kdDebug(32500)<<" secondChar :"<<secondChar<<endl;
+ if ( isUpper( secondChar ) )
+ {
+ // Check next letter - we still want to be able to write fully uppercase words...
+ backCursor.setIndex( backCursor.index() + 1 );
+ QChar thirdChar = backCursor.parag()->at( backCursor.index() )->c;
+ if ( isLower( thirdChar ) && (m_twoUpperLetterException.findIndex(word)==-1))
+ {
+ // Ok, convert
+ KoTextCursor cursor( parag->document() );
+ cursor.setParag( parag );
+ cursor.setIndex( start + 1 ); // After all the first letter's fine, so only change the second letter
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + 2 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+
+ QString replacement = word[1].lower();
+ cmd = txtObj->replaceSelectionCommand( textEditCursor, replacement,
+ i18n("Autocorrect"),
+ KoTextDocument::HighlightSelection );
+
+ bNeedMove = true;
+ }
+ }
+ }
+ if ( bNeedMove )
+ {
+ if (word.at(word.length()-1) == '.' )
+ ++index;
+ txtObj->emitHideCursor();
+ textEditCursor->setParag( parag );
+ textEditCursor->setIndex( index );
+ textEditCursor->gotoRight(); // not the same thing as index+1, in case of CR
+ txtObj->emitShowCursor();
+ }
+ return cmd;
+}
+
+KCommand * KoAutoFormat::doAutoReplaceNumber( KoTextCursor* textEditCursor, KoTextParag *parag, int& index, const QString & word , KoTextObject *txtObj )
+{
+ unsigned int length = word.length();
+ if ( length != 3 )
+ return 0L;
+ KoTextDocument * textdoc = parag->textDocument();
+ int start = index - length;
+ if( word == QString("1/2") || word == QString("1/4") || word == QString("3/4") )
+ {
+ KoTextCursor cursor( parag->document() );
+ cursor.setParag( parag );
+ cursor.setIndex( start );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + length );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ QString replacement;
+ if( word == QString("1/2") )
+ replacement=QString("");
+ else if (word == QString("1/4") )
+ replacement=QString("");
+ else if (word == QString("3/4") )
+ replacement=QString("");
+ QString cmdName = i18n("Autocorrect for Fraction");
+ KCommand *cmd =txtObj->replaceSelectionCommand( textEditCursor, replacement,
+ cmdName,
+ KoTextDocument::HighlightSelection );
+ txtObj->emitHideCursor();
+ textEditCursor->gotoRight();
+ txtObj->emitShowCursor();
+ index = index - length + replacement.length();
+ return cmd;
+ }
+ return 0L;
+}
+
+void KoAutoFormat::detectStartOfLink(KoTextParag * parag, int const index, bool const insertedDot)
+{
+ QString word;
+ KoTextString *s = parag->string();
+ for ( int i = 0; i < index; ++i )
+ {
+ word.append( s->at( i ).c );
+ }
+
+ if (word.find("http")!=-1 || word.find("https")!=-1 || word.find("mailto")!=-1 || word.find("ftp")!=-1 || word.find("file")!=-1
+ || word.find("news")!=-1 || word.find('@')!=-1)
+ m_ignoreUpperCase=true;
+ else
+ {
+ int const tmp_pos=word.find("www.");
+ if (tmp_pos!=-1 && (word.find('.',tmp_pos+4)!=-1 || insertedDot) )
+ m_ignoreUpperCase=true;
+ }
+}
+
+void KoAutoFormat::doAutoDetectUrl( KoTextCursor *textEditCursor, KoTextParag *parag, int &index, QString & word, KoTextObject *txtObj )
+{
+ kdDebug() << "link:" << word << endl;
+ char link_type = 0;
+ int pos = word.find("http://");
+ int tmp_pos = word.find("https://");
+ if(tmp_pos<pos && tmp_pos!=-1)
+ pos = tmp_pos;
+ tmp_pos = word.find("mailto:/");
+ if((tmp_pos<pos || pos==-1 ) && tmp_pos!=-1)
+ pos = tmp_pos;
+ tmp_pos = word.find("ftp://");
+ if((tmp_pos<pos || pos==-1 ) && tmp_pos!=-1)
+ pos = tmp_pos;
+ tmp_pos = word.find("ftp.");
+ if((tmp_pos<pos || pos==-1 ) && tmp_pos!=-1)
+ {
+ pos = tmp_pos;
+ link_type = 3;
+ }
+ tmp_pos = word.find("file:/");
+ if((tmp_pos<pos || pos==-1 ) && tmp_pos!=-1)
+ pos = tmp_pos;
+ tmp_pos = word.find("news:");
+ if((tmp_pos<pos || pos==-1 ) && tmp_pos!=-1)
+ pos = tmp_pos;
+ tmp_pos = word.find("www.");
+ if((tmp_pos<pos || pos==-1 ) && tmp_pos!=-1 && word.find('.',tmp_pos+4)!=-1 )
+ {
+ pos = tmp_pos;
+ link_type = 2;
+ }
+ tmp_pos = word.find('@');
+ if ( pos == -1 && tmp_pos != -1 )
+ {
+ pos = tmp_pos-1;
+ QChar c;
+ while( pos>=0 )
+ {
+ c = word.at(pos);
+ if ( c.isPunct() && c!='.'&& c!='_') break;
+ else --pos;
+ }
+ if ( pos == tmp_pos-1 ) //it not a valid address
+ {
+ m_ignoreUpperCase = false;
+ pos = -1;
+ }
+ else
+ ++pos;
+ link_type = 1;
+ }
+ if(pos!=-1)
+ {
+ // A URL inside e.g. quotes (like "http://www.koffice.org" with the quotes) shouldn't include the quote in the URL.
+ while ( !word.at(word.length()-1).isLetter() && !word.at(word.length()-1).isDigit() && word.at(word.length()-1)!='/')
+ {
+ word.truncate(word.length()-1);
+ --index;
+ }
+ word.remove(0,pos);
+ unsigned int const length = word.length();
+ int const start = index - length;
+ KoTextCursor cursor( parag->document() );
+ KoTextDocument * textdoc = parag->textDocument();
+ cursor.setParag( parag );
+ cursor.setIndex( start );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + length );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ QString newWord = word;
+ if(link_type==1)
+ newWord = QString("mailto:") + word;
+ else if(link_type==2)
+ newWord = QString("http://") + word;
+ else if(link_type==3)
+ newWord = QString("ftp://") + word;
+
+ KoVariable* var = new KoLinkVariable( textdoc, word, newWord, m_varFormatCollection->format( "STRING" ), m_varCollection );
+ CustomItemsMap customItemsMap;
+ customItemsMap.insert( 0, var );
+ KoTextFormat * lastFormat = parag->at( start )->format();
+ int origCursorIndex = textEditCursor->index();
+ txtObj->insert( textEditCursor, lastFormat, KoTextObject::customItemChar(), i18n("Insert Variable"),
+ KoTextDocument::HighlightSelection, KoTextObject::DefaultInsertFlags, customItemsMap );
+ var->recalc();
+ parag->invalidate(0);
+ parag->setChanged( true );
+
+ // adjust index
+ index -= length-1; // we removed length chars and inserted one instead
+
+ txtObj->emitHideCursor();
+ textEditCursor->setIndex( origCursorIndex - (length-1) );
+ txtObj->emitShowCursor();
+
+ // ###### TODO: Move to a common method, this code is duplicated...
+ if ( m_completion && m_addCompletionWord && m_listCompletion->items().count() < m_nbMaxCompletionWord )
+ {
+ if (word.length()>= m_minCompletionWordLength && !word.isEmpty() && m_listCompletion->makeCompletion(word).isEmpty())
+ {
+ kdDebug() << "Adding:" << word << endl;
+ m_listCompletion->addItem( word );
+ if ( word.length() > m_countMaxWords )
+ m_countMaxWords = word.length();
+ }
+ }
+ }
+}
+
+void KoAutoFormat::doAutoIncludeUpperUpper(KoTextCursor* /*textEditCursor*/, KoTextParag *parag, KoTextObject* /*txtObj*/ )
+{
+ KoTextString *s = parag->string();
+
+ if( s->length() < 2 )
+ return;
+
+ for (int i=0; i<=(s->length() - 1);i++)
+ {
+ QString word;
+ for ( int j = i ; j < s->length() - 1; j++ )
+ {
+ QChar ch = s->at( j ).c;
+ if ( ch.isSpace() )
+ break;
+ word.append( ch );
+ }
+ if( word.length() > 2 && word.left(2)==word.left(2).upper() && word.at(3)!=word.at(3).upper() )
+ {
+ if ( m_twoUpperLetterException.findIndex(word )==-1)
+ m_twoUpperLetterException.append( word);
+ }
+ i+=word.length();
+ }
+
+}
+
+
+void KoAutoFormat::doAutoIncludeAbbreviation(KoTextCursor* /*textEditCursor*/, KoTextParag *parag, KoTextObject* /*txtObj*/ )
+{
+ KoTextString *s = parag->string();
+ if( s->length() < 2 )
+ return;
+ for (int i=0; i<=(s->length() - 1);i++)
+ {
+ QString wordAfter;
+ QString word;
+
+ for ( int j = i ; j < s->length() - 1; j++ )
+ {
+ QChar ch = s->at( j ).c;
+ if ( ch.isSpace() )
+ break;
+ word.append( ch );
+ }
+ if ( isMark( word.at(word.length()-1)) )
+ {
+ for ( int j = i+word.length()+1 ; j < s->length() - 1; j++ )
+ {
+ QChar ch = s->at( j ).c;
+ if ( ch.isSpace() )
+ break;
+ wordAfter.append( ch );
+ }
+ if( word.length()>1 && !wordAfter.isEmpty() && wordAfter.at(0)==wordAfter.at(0).lower())
+ {
+ if ( m_upperCaseExceptions.findIndex(word )==-1)
+ m_upperCaseExceptions.append( word );
+ }
+ }
+ i+=word.length();
+ if( !wordAfter.isEmpty())
+ {
+ i+=wordAfter.length()+1;
+ }
+ }
+
+}
+
+
+KCommand * KoAutoFormat::doAutoChangeFormat( KoTextCursor *textEditCursor, KoTextParag *parag,int index, const QString & word, KoTextObject *txtObj )
+{
+ bool underline = (word.at(0)=='_' && word.at(word.length()-1)=='_');
+ bool bold = (word.at(0)=='*' && word.at(word.length()-1)=='*');
+ if( bold || underline)
+ {
+ QString replacement=word.mid(1,word.length()-2);
+ int start = index - word.length();
+ KoTextDocument * textdoc = parag->textDocument();
+ KMacroCommand *macro=new KMacroCommand(i18n("Autocorrection: Change Format"));
+ KoTextCursor cursor( parag->document() );
+
+ cursor.setParag( parag );
+ cursor.setIndex( start );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + word.length() );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ macro->addCommand(txtObj->replaceSelectionCommand( textEditCursor, replacement,
+ i18n("Autocorrect Word"),
+ KoTextDocument::HighlightSelection));
+
+ KoTextFormat * lastFormat = parag->at( start )->format();
+ KoTextFormat * newFormat = new KoTextFormat(*lastFormat);
+ cursor.setIndex( start );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + word.length()-2 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+
+ if( bold)
+ {
+ newFormat->setBold(true);
+ macro->addCommand(txtObj->setFormatCommand( textEditCursor, 0L, newFormat, KoTextFormat::Bold , false,KoTextDocument::HighlightSelection ));
+ }
+ else if( underline )
+ {
+ newFormat->setUnderline(true);
+ macro->addCommand(txtObj->setFormatCommand( textEditCursor, 0L, newFormat, KoTextFormat::Underline , false,KoTextDocument::HighlightSelection ));
+ }
+ txtObj->emitHideCursor();
+ textEditCursor->gotoRight();
+ txtObj->emitShowCursor();
+ return macro;
+ }
+ return 0L;
+}
+
+KCommand *KoAutoFormat::doUseBulletStyle(KoTextCursor * /*textEditCursor*/, KoTextParag *parag, KoTextObject *txtObj, int& index )
+{
+ KoTextDocument * textdoc = parag->textDocument();
+ KoTextCursor cursor( parag->document() );
+ KoTextString *s = parag->string();
+ QChar ch = s->at( 0 ).c;
+
+ if( m_useBulletStyle && (ch =='*' || ch == '-' || ch =='+') && (s->at(1).c).isSpace())
+ {
+ if ( parag->counter() && parag->counter()->numbering() == KoParagCounter::NUM_FOOTNOTE )
+ return 0L;
+ KMacroCommand *macroCmd = new KMacroCommand( i18n("Autocorrect (use bullet style)"));
+ cursor.setParag( parag );
+ cursor.setIndex( 0 );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setParag( parag );
+ cursor.setIndex( 2 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ KCommand *cmd=txtObj->removeSelectedTextCommand( &cursor, KoTextDocument::HighlightSelection );
+ // Adjust index
+ index -= 2;
+ if(cmd)
+ macroCmd->addCommand(cmd);
+
+ cursor.setParag( parag );
+ cursor.setIndex( 0 );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+
+ cursor.setIndex( 2 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+
+
+ KoParagCounter c;
+ if( m_bulletStyle.isNull() && (ch == '*' || ch == '+' || ch == '-'))
+ {
+ if ( ch =='*')
+ {
+ c.setNumbering( KoParagCounter::NUM_LIST );
+ c.setStyle( KoParagCounter::STYLE_DISCBULLET );
+ }
+ else if ( ch =='+' || ch=='-')
+ {
+ c.setNumbering( KoParagCounter::NUM_LIST );
+ c.setStyle( KoParagCounter::STYLE_CUSTOMBULLET );
+ if ( ch =='-' )
+ c.setCustomBulletCharacter( '-' );
+ else if ( ch=='+')
+ c.setCustomBulletCharacter( '+' );
+ }
+ }
+ else
+ {
+ c.setNumbering( KoParagCounter::NUM_LIST );
+ c.setStyle( KoParagCounter::STYLE_CUSTOMBULLET );
+ c.setCustomBulletCharacter( m_bulletStyle );
+ }
+ c.setSuffix(QString::null);
+ cmd=txtObj->setCounterCommand( &cursor, c ,KoTextDocument::HighlightSelection );
+ if( cmd)
+ macroCmd->addCommand(cmd);
+ if (parag->next() )
+ cursor.setParag( parag->next() );
+ else
+ return 0L;
+
+ cursor.setIndex( 0 );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( 0 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ cmd=txtObj->setCounterCommand( &cursor, c ,KoTextDocument::HighlightSelection );
+ if(cmd)
+ macroCmd->addCommand(cmd);
+ return macroCmd;
+ }
+ return 0L;
+
+}
+
+KCommand *KoAutoFormat::doUseNumberStyle(KoTextCursor * /*textEditCursor*/, KoTextParag *parag, KoTextObject *txtObj, int& index )
+{
+ if ( parag->counter() && parag->counter()->numbering() == KoParagCounter::NUM_FOOTNOTE )
+ return 0L;
+ KoTextDocument * textdoc = parag->textDocument();
+ KoTextCursor cursor( parag->document() );
+ KoTextString *s = parag->string();
+ QString word;
+ for ( int i = 0 ; i < s->length() - 1; i++ )
+ {
+ QChar ch = s->at( i ).c;
+ if ( ch.isSpace() )
+ break;
+ word.append( ch );
+ }
+ QChar punct=word[word.length()-1];
+ if( punct.isPunct() )
+ {
+ QString number=word.mid(0,word.length()-1);
+ bool ok;
+ uint val=number.toUInt(&ok);
+ if( ok )
+ {
+ KMacroCommand *macroCmd = new KMacroCommand( i18n("Autocorrect (use number style)"));
+ cursor.setParag( parag );
+ cursor.setIndex( 0 );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setParag( parag );
+ cursor.setIndex( word.length()+1 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ KCommand *cmd=txtObj->removeSelectedTextCommand( &cursor, KoTextDocument::HighlightSelection );
+ // Adjust index
+ index -= word.length()+1;
+ if(cmd)
+ macroCmd->addCommand(cmd);
+
+ // Apply counter to this paragraph
+ cursor.setParag( parag );
+ cursor.setIndex( 0 );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+
+ cursor.setIndex( 2 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+
+ KoParagCounter c;
+ c.setNumbering( KoParagCounter::NUM_LIST );
+ c.setStyle( KoParagCounter::STYLE_NUM );
+ c.setSuffix(QString( punct ));
+ c.setStartNumber( (int)val);
+
+ // Look at which number this parag will have without a restart counter flag,
+ // to see if we need it. Thanks to Shaheed for number() taking a parag as param,
+ // so that it works even if the parag doesn't have this counter yet!
+ if ( c.number( parag ) != (int)val )
+ c.setRestartCounter( true );
+
+ cmd=txtObj->setCounterCommand( &cursor, c, KoTextDocument::HighlightSelection );
+ if( cmd)
+ macroCmd->addCommand(cmd);
+ // Apply counter to next paragraph too
+ // but without restart
+ c.setRestartCounter( false );
+ cursor.setParag( parag->next() );
+ cursor.setIndex( 0 );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( 0 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ cmd=txtObj->setCounterCommand( &cursor, c, KoTextDocument::HighlightSelection );
+ if(cmd)
+ macroCmd->addCommand(cmd);
+ return macroCmd;
+ }
+ }
+ return 0L;
+}
+
+
+KCommand * KoAutoFormat::doRemoveSpaceBeginEndLine( KoTextCursor *textEditCursor, KoTextParag *parag, KoTextObject *txtObj, int &index )
+{
+ KoTextString *s = parag->string();
+ KoTextDocument * textdoc = parag->textDocument();
+ KoTextCursor cursor( parag->document() );
+
+ KMacroCommand *macroCmd = 0L;
+ // Cut away spaces at end of paragraph
+ for ( int i = parag->lastCharPos(); i >= 0; --i )
+ {
+ QChar ch = s->at( i ).c;
+ if ( ch != ' ' ) // was: !ch.isSpace(), but this includes tabs, and this option is only about spaces
+ {
+ if( i == parag->lastCharPos() )
+ break;
+ cursor.setParag( parag );
+ cursor.setIndex( i+1 );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setParag( parag );
+ cursor.setIndex( parag->lastCharPos()+1 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ KCommand *cmd=txtObj->replaceSelectionCommand( &cursor, "", QString::null, KoTextDocument::HighlightSelection );
+
+ if(cmd)
+ {
+ if ( index > i )
+ index = i;
+ if ( !macroCmd )
+ macroCmd = new KMacroCommand( i18n("Autocorrect (remove start and end line space)"));
+ macroCmd->addCommand(cmd);
+ }
+ break;
+ }
+ }
+
+ // Cut away spaces at start of parag.
+
+ for ( int i = 0 ; i <= parag->lastCharPos() ; i++ )
+ {
+ QChar ch = s->at( i ).c;
+ if ( ch != ' ' ) // was: !ch.isSpace(), but this includes tabs, and this option is only about spaces
+ {
+ if( i == 0 )
+ break;
+
+ cursor.setParag( parag );
+ cursor.setIndex( 0 );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setParag( parag );
+ cursor.setIndex( i );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ KCommand *cmd=txtObj->replaceSelectionCommand( &cursor, "", QString::null, KoTextDocument::HighlightSelection );
+
+ if(cmd)
+ {
+ index -= i; // adjust index
+ if ( !macroCmd )
+ macroCmd = new KMacroCommand( i18n("Autocorrect (remove start and end line space)"));
+ macroCmd->addCommand(cmd);
+ }
+ break;
+ }
+ }
+
+ if( macroCmd )
+ {
+ txtObj->emitHideCursor();
+ textEditCursor->setParag( parag->next() );
+ //textEditCursor->cursorgotoRight();
+ txtObj->emitShowCursor();
+ }
+ return macroCmd;
+}
+
+KCommand *KoAutoFormat::doCapitalizeNameOfDays( KoTextCursor* textEditCursor, KoTextParag *parag, int index, const QString & word , KoTextObject *txtObj )
+{
+ //m_cacheNameOfDays
+ //todo
+ int pos = m_cacheNameOfDays.findIndex( word.lower() );
+ if ( pos == -1 )
+ return 0L;
+ KoTextDocument * textdoc = parag->textDocument();
+ QString replaceStr= m_cacheNameOfDays[pos];
+ int start = index - replaceStr.length();
+ int length = replaceStr.length();
+ if( word.at(0).isLetter() && word.at(0)==word.at(0).lower() )
+ {
+ KoTextCursor cursor( parag->document() );
+ cursor.setParag( parag );
+ cursor.setIndex( start );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + length );
+ QString replacement = replaceStr.at(0).upper() + replaceStr.right( length-1 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ QString cmdName=i18n("Capitalize Name of Days");
+ KCommand *cmd =txtObj->replaceSelectionCommand( textEditCursor, replacement,
+ cmdName,
+ KoTextDocument::HighlightSelection );
+ txtObj->emitHideCursor();
+ textEditCursor->gotoRight();
+ txtObj->emitShowCursor();
+ return cmd;
+ }
+ return 0L;
+}
+
+KCommand *KoAutoFormat::doAutoSuperScript( KoTextCursor* textEditCursor, KoTextParag *parag, int index, const QString & word , KoTextObject *txtObj )
+{
+ KoAutoFormatEntryMap::Iterator it = m_superScriptEntries.begin();
+ bool found = false;
+ QString replace;
+ for ( ; it != m_superScriptEntries.end() ; ++it )
+ {
+ if( it.key()==word)
+ {
+ replace = it.data().replace();
+ found = true;
+ break;
+ }
+ else if ( it.key()=="othernb")
+ {
+ QString tmp = it.data().replace();
+ int pos = word.find( tmp );
+ if( pos != -1)
+ {
+ if( pos + tmp.length() == word.length())
+ {
+ bool ok;
+ word.left( pos ).toInt( &ok);
+ if( ok )
+ {
+ replace = tmp;
+ found = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (found )
+ {
+ KoTextDocument * textdoc = parag->textDocument();
+
+ int start = index - replace.length();
+ KoTextFormat * lastFormat = parag->at( start )->format();
+ KoTextFormat * newFormat = new KoTextFormat(*lastFormat);
+ KoTextCursor cursor( parag->document() );
+
+ cursor.setParag( parag );
+ cursor.setIndex( start );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( start + word.length() -1 );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ newFormat->setVAlign(KoTextFormat::AlignSuperScript);
+ KCommand *cmd =txtObj->setFormatCommand( textEditCursor, 0L, newFormat, KoTextFormat::VAlign , false,KoTextDocument::HighlightSelection );
+ textdoc->removeSelection( KoTextDocument::HighlightSelection );
+
+ return cmd;
+ }
+ return 0L;
+}
+
+bool KoAutoFormat::doIgnoreDoubleSpace( KoTextParag *parag, int index, QChar ch )
+{
+ if( m_ignoreDoubleSpace && ch==' ' && index >= 0 && !parag->hasAnySelection() )
+ {
+ KoTextString *s = parag->string();
+ QChar ch = s->at( index ).c;
+ if ( ch==' ' )
+ return true;
+ }
+ return false;
+}
+
+void KoAutoFormat::configTypographicSimpleQuotes( TypographicQuotes _tq )
+{
+ m_typographicSimpleQuotes = _tq;
+}
+
+void KoAutoFormat::configTypographicDoubleQuotes( TypographicQuotes _tq )
+{
+ m_typographicDoubleQuotes = _tq;
+}
+
+void KoAutoFormat::configUpperCase( bool _uc )
+{
+ m_convertUpperCase = _uc;
+}
+
+void KoAutoFormat::configUpperUpper( bool _uu )
+{
+ m_convertUpperUpper = _uu;
+}
+
+void KoAutoFormat::configAdvancedAutocorrect( bool _aa )
+{
+ m_advancedAutoCorrect = _aa;
+}
+
+void KoAutoFormat::configAutoDetectUrl(bool _au)
+{
+ m_autoDetectUrl=_au;
+}
+
+void KoAutoFormat::configIgnoreDoubleSpace( bool _ids)
+{
+ m_ignoreDoubleSpace=_ids;
+}
+
+void KoAutoFormat::configRemoveSpaceBeginEndLine( bool _space)
+{
+ m_removeSpaceBeginEndLine=_space;
+}
+
+void KoAutoFormat::configUseBulletStyle( bool _ubs)
+{
+ m_useBulletStyle=_ubs;
+}
+
+void KoAutoFormat::configBulletStyle( QChar b )
+{
+ m_bulletStyle = b;
+}
+
+void KoAutoFormat::configAutoChangeFormat( bool b)
+{
+ m_autoChangeFormat = b;
+}
+
+
+void KoAutoFormat::configAutoReplaceNumber( bool b )
+{
+ m_autoReplaceNumber = b;
+}
+
+void KoAutoFormat::configAutoNumberStyle( bool b )
+{
+ m_useAutoNumberStyle = b;
+}
+
+void KoAutoFormat::configCompletion( bool b )
+{
+ m_completion = b;
+}
+
+void KoAutoFormat::configToolTipCompletion( bool b )
+{
+ m_toolTipCompletion = b;
+ if (!b && m_completionBox)
+ {
+ delete m_completionBox;
+ m_completionBox = 0;
+ }
+}
+
+void KoAutoFormat::configKeyCompletionAction( KeyCompletionAction action )
+{
+ m_keyCompletionAction = action;
+}
+
+void KoAutoFormat::configAppendSpace( bool b)
+{
+ m_completionAppendSpace= b;
+}
+
+void KoAutoFormat::configMinWordLength( uint val )
+{
+ m_minCompletionWordLength = val;
+}
+
+void KoAutoFormat::configNbMaxCompletionWord( uint val )
+{
+ m_nbMaxCompletionWord = val;
+}
+
+
+void KoAutoFormat::configAddCompletionWord( bool b )
+{
+ m_addCompletionWord= b;
+}
+
+bool KoAutoFormat::isUpper( const QChar &c )
+{
+ return c.lower() != c;
+}
+
+bool KoAutoFormat::isLower( const QChar &c )
+{
+ // Note that this is not the same as !isUpper !
+ // For instance '1' is not lower nor upper,
+ return c.upper() != c;
+}
+
+bool KoAutoFormat::isMark( const QChar &c )
+{
+ return ( c == QChar( '.' ) ||
+ c == QChar( '?' ) ||
+ c == QChar( '!' ) );
+}
+
+bool KoAutoFormat::isSeparator( const QChar &c )
+{
+ return ( !c.isLetter() && !c.isNumber() && !c.isDigit() );
+}
+
+void KoAutoFormat::buildMaxLen()
+{
+ m_maxFindLength = 0;
+ QDictIterator<KoAutoFormatEntry> it( m_entries );
+ for( ; it.current(); ++it )
+ {
+ m_maxFindLength = QMAX( m_maxFindLength, it.currentKey().length() );
+ }
+ QDictIterator<KoAutoFormatEntry> it2( m_allLanguages );
+ for( ; it2.current(); ++it2 )
+ {
+ m_maxFindLength = QMAX( m_maxFindLength, it2.currentKey().length() );
+ }
+}
+
+QStringList KoAutoFormat::listCompletion() const
+{
+ return m_listCompletion->items();
+}
+
+
+void KoAutoFormat::configIncludeTwoUpperUpperLetterException( bool b)
+{
+ m_includeTwoUpperLetterException = b;
+}
+
+void KoAutoFormat::configIncludeAbbreviation( bool b )
+{
+ m_includeAbbreviation = b;
+}
+
+void KoAutoFormat::configAutoSuperScript( bool b )
+{
+ m_bAutoSuperScript = b;
+}
+
+void KoAutoFormat::configCorrectionWithFormat( bool b)
+{
+ m_bAutoCorrectionWithFormat = b;
+}
+
+void KoAutoFormat::configCapitalizeNameOfDays( bool b)
+{
+ m_bCapitalizeNameOfDays = b;
+}
+
+void KoAutoFormat::configAutoFormatLanguage( const QString &_lang)
+{
+ m_autoFormatLanguage=_lang;
+}
+
+KCommand *KoAutoFormat::applyAutoFormat( KoTextObject * obj )
+{
+ KoTextParag * parag = obj->textDocument()->firstParag();
+ KoTextCursor *cursor = new KoTextCursor( obj->textDocument() );
+ KMacroCommand *macro = 0L;
+ while ( parag )
+ {
+ cursor->setIndex(0);
+ for (int i=0;i<parag->length();i++)
+ {
+ cursor->gotoRight();
+ //kdDebug() << "ch:" << parag->string()->at(i).c << endl;
+ if (i == parag->length()-1)
+ doAutoFormat(cursor,parag,i,'\n',obj);
+ else
+ doAutoFormat(cursor,parag,i, parag->string()->at(i).c,obj);
+ }
+ parag = parag->next();
+
+ }
+ delete cursor;
+ return macro;
+}
+
+void KoAutoFormat::changeTextFormat(KoSearchContext *formatOptions, KoTextFormat * format, int & flags )
+{
+ if (formatOptions )
+ {
+ if (formatOptions->m_optionsMask & KoSearchContext::Bold)
+ {
+ format->setBold( formatOptions->m_options & KoSearchContext::Bold);
+ flags |=KoTextFormat::Bold;
+ }
+ if ( formatOptions->m_optionsMask & KoSearchContext::Size)
+ {
+ format->setPointSize( formatOptions->m_size );
+ flags |=KoTextFormat::Size;
+ }
+ if ( formatOptions->m_optionsMask & KoSearchContext::Family)
+ {
+ format->setFamily( formatOptions->m_family );
+ flags |=KoTextFormat::Family;
+ }
+ if ( formatOptions->m_optionsMask & KoSearchContext::Color)
+ {
+ format->setColor(formatOptions->m_color);
+ flags |=KoTextFormat::Color;
+ }
+ if ( formatOptions->m_optionsMask & KoSearchContext::BgColor)
+ {
+ format->setTextBackgroundColor(formatOptions->m_backGroundColor);
+ flags |=KoTextFormat::TextBackgroundColor;
+ }
+
+ if ( formatOptions->m_optionsMask & KoSearchContext::Italic)
+ {
+ format->setItalic( formatOptions->m_options & KoSearchContext::Italic);
+ flags |=KoTextFormat::Italic;
+ }
+ if ( formatOptions->m_optionsMask & KoSearchContext::WordByWord)
+ {
+ format->setWordByWord( formatOptions->m_options & KoSearchContext::WordByWord );
+ flags |=KoTextFormat::WordByWord;
+ }
+ if ( formatOptions->m_optionsMask & KoSearchContext::Shadow)
+ {
+ if ( formatOptions->m_options & KoSearchContext::Shadow )
+ format->setShadow( 1, 1, Qt::gray );
+ else
+ format->setShadow( 0, 0, QColor() );
+ flags |=KoTextFormat::ShadowText;
+ }
+
+ if ( formatOptions->m_optionsMask & KoSearchContext::Underline)
+ {
+ format->setUnderlineType(formatOptions->m_underline);
+ flags |=KoTextFormat::ExtendUnderLine;
+ }
+ if ( formatOptions->m_optionsMask & KoSearchContext::StrikeOut)
+ {
+ format->setStrikeOutType(formatOptions->m_strikeOut);
+ flags |= KoTextFormat::StrikeOut;
+ }
+ if ( formatOptions->m_optionsMask & KoSearchContext::VertAlign)
+ {
+ format->setVAlign(formatOptions->m_vertAlign);
+ flags |=KoTextFormat::VAlign;
+ }
+ if ( formatOptions->m_optionsMask & KoSearchContext::Attribute)
+ {
+ format->setAttributeFont(formatOptions->m_attribute);
+ flags |= KoTextFormat::Attribute;
+ }
+ if (formatOptions->m_optionsMask & KoSearchContext::Language)
+ {
+ flags |= KoTextFormat::Language;
+ format->setLanguage( formatOptions->m_language );
+ }
+ }
+}
+
+#include "KoAutoFormat.moc"
diff --git a/lib/kotext/KoAutoFormat.h b/lib/kotext/KoAutoFormat.h
new file mode 100644
index 00000000..3e2283dd
--- /dev/null
+++ b/lib/kotext/KoAutoFormat.h
@@ -0,0 +1,420 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+ 2001 Sven Leiber <s.leiber@web.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef koautoformat_h
+#define koautoformat_h
+
+#include <qstring.h>
+#include <qmap.h>
+#include <qvaluelist.h>
+#include <qstringlist.h>
+#include <qptrvector.h>
+#include <qdom.h>
+#include <qdict.h>
+#include <qlabel.h>
+#include <qwidget.h>
+#include <koffice_export.h>
+
+class KoDocument;
+class KoTextParag;
+class KoTextObject;
+class KoVariableCollection;
+class KoVariableFormatCollection;
+class KCompletion;
+class KoTextCursor;
+class KCommand;
+class KoSearchContext;
+class KoTextFormat;
+
+
+
+
+class KoCompletionBox : public QLabel
+{
+ Q_OBJECT
+ public:
+ KoCompletionBox( QWidget * parent = 0, const char * name = 0, WFlags f = 0 );
+ ~KoCompletionBox();
+ QString& lastWord();
+ void setLastWord(QString const &);
+
+ protected:
+ void mousePressEvent( QMouseEvent * );
+
+ private:
+ QString m_lastWord;
+};
+
+
+
+/******************************************************************/
+/* Class: KWAutoFormatEntry */
+/******************************************************************/
+class KoAutoFormatEntry
+{
+public:
+ // The text to find is actually the key in KWAutoFormat's map.
+ // What we replace it with is replace().
+ KoAutoFormatEntry(const QString& replace = QString::null);
+ ~KoAutoFormatEntry();
+ QString replace() const { return m_replace; }
+ void changeReplace(const QString & rep){ m_replace = rep; }
+
+ KoSearchContext *formatEntryContext()const;
+ void createNewEntryContext();
+ void setFormatEntryContext( KoSearchContext * );
+ void clearFormatEntryContext( );
+
+protected:
+ QString m_replace;
+ // For formatting in the replacement - not implemented yet
+ KoSearchContext *m_formatOptions;
+};
+
+typedef QMap< QString, KoAutoFormatEntry > KoAutoFormatEntryMap;
+
+/******************************************************************/
+/* Class: KoAutoFormat */
+/******************************************************************/
+class KOTEXT_EXPORT KoAutoFormat
+{
+public:
+ /**
+ * There is a single instance of KoAutoFormat per document
+ * (and a temporary one in the auto-format dialog).
+ */
+ KoAutoFormat( KoDocument *_doc, KoVariableCollection *_varCollection, KoVariableFormatCollection *_varFormatCollection );
+
+ /** Copy constructor, used by KoAutoFormatDia */
+ KoAutoFormat( const KoAutoFormat& format );
+
+ ~KoAutoFormat();
+
+ enum KeyCompletionAction { Enter = 0, Tab = 1, Space = 2, End = 3, Right = 4};
+
+ KCommand *applyAutoFormat( KoTextObject * obj );
+ /**
+ * Called by edit widget when a character (@p ch) has been inserted
+ * into @p parag, at the given @p index.
+ */
+ void doAutoFormat( KoTextCursor* cursor, KoTextParag *parag, int index, QChar ch,KoTextObject *txtObj );
+
+ /**
+ * Called by edit widget when a call a competion
+ */
+ bool doCompletion( KoTextCursor* textEditCursor, KoTextParag *parag, int const index,KoTextObject *txtObj );
+
+ bool doToolTipCompletion( KoTextCursor* textEditCursor, KoTextParag *parag, int index,KoTextObject *txtObj,int keyPress );
+ void showToolTipBox(KoTextParag *parag, int index, QWidget *widget, const QPoint &pos);
+ void removeToolTipCompletion();
+
+ bool doIgnoreDoubleSpace( KoTextParag *parag, int index,QChar ch );
+
+ /**
+ * Helper method, returns the last word before parag,index
+ */
+ static QString getLastWord( KoTextParag *parag, int const index );
+ QString getLastWord( const int max_words, KoTextParag *parag, int const index );
+
+ /**
+ * Helper method, returns the last word before parag,index
+ * different from getLastWord, because we test just space character
+ * and not punctualtion character
+ */
+ static QString getWordAfterSpace( KoTextParag * parag, int const index);
+
+ // Config for the typographic quotes. Used by the dialog.
+ struct TypographicQuotes
+ {
+ QChar begin, end;
+ bool replace; // aka enabled
+ };
+
+ // Configuration (on/off/settings). Called by the dialog.
+ void configTypographicDoubleQuotes( TypographicQuotes _tq );
+ void configTypographicSimpleQuotes( TypographicQuotes _tq );
+
+ void configUpperCase( bool _uc );
+ void configUpperUpper( bool _uu );
+ void configAdvancedAutocorrect( bool _aa );
+ void configAutoDetectUrl(bool _au);
+ void configIgnoreDoubleSpace( bool _ids);
+ void configRemoveSpaceBeginEndLine( bool _space);
+ void configUseBulletStyle( bool _ubs);
+
+ void configBulletStyle( QChar b );
+
+ void configAutoChangeFormat( bool b);
+
+ void configAutoReplaceNumber( bool b );
+
+ void configAutoNumberStyle( bool b );
+
+ void configCompletion( bool b );
+
+ void configToolTipCompletion( bool b );
+
+ void configAppendSpace( bool b);
+
+ void configMinWordLength( uint val );
+
+ void configNbMaxCompletionWord( uint val );
+
+ void configAddCompletionWord( bool b );
+
+ void configIncludeTwoUpperUpperLetterException( bool b);
+
+ void configIncludeAbbreviation( bool b );
+
+ void configAutoSuperScript( bool b );
+
+ void configCorrectionWithFormat( bool b);
+
+ void configCapitalizeNameOfDays( bool b);
+
+ void configAutoFormatLanguage( const QString &_lang);
+
+ void configKeyCompletionAction( KeyCompletionAction action );
+
+ TypographicQuotes getConfigTypographicSimpleQuotes() const
+ { return m_typographicSimpleQuotes; }
+
+ TypographicQuotes getConfigTypographicDoubleQuotes() const
+ { return m_typographicDoubleQuotes; }
+
+ TypographicQuotes getDefaultTypographicDoubleQuotes() const
+ { return m_typographicDefaultDoubleQuotes; }
+
+ TypographicQuotes getDefaultTypographicSimpleQuotes() const
+ { return m_typographicDefaultSimpleQuotes; }
+
+ bool getConfigUpperCase() const
+ { return m_convertUpperCase; }
+ bool getConfigUpperUpper() const
+ { return m_convertUpperUpper; }
+ bool getConfigAdvancedAutoCorrect() const
+ { return m_advancedAutoCorrect;}
+ bool getConfigAutoDetectUrl() const
+ { return m_autoDetectUrl;}
+
+ bool getConfigIgnoreDoubleSpace() const
+ { return m_ignoreDoubleSpace;}
+
+ bool getConfigRemoveSpaceBeginEndLine() const
+ { return m_removeSpaceBeginEndLine;}
+
+ bool getConfigUseBulletSyle() const
+ { return m_useBulletStyle;}
+
+ QChar getConfigBulletStyle() const
+ { return m_bulletStyle; }
+
+ bool getConfigAutoChangeFormat() const
+ { return m_autoChangeFormat;}
+
+ bool getConfigAutoReplaceNumber() const
+ { return m_autoReplaceNumber; }
+
+ bool getConfigAutoNumberStyle() const
+ { return m_useAutoNumberStyle; }
+
+ bool getConfigCompletion() const
+ { return m_completion; }
+
+ bool getConfigToolTipCompletion() const
+ { return m_toolTipCompletion; }
+
+ bool getConfigAppendSpace() const
+ { return m_completionAppendSpace; }
+
+ uint getConfigMinWordLength() const
+ { return m_minCompletionWordLength; }
+
+ uint getConfigNbMaxCompletionWord() const
+ { return m_nbMaxCompletionWord; }
+
+ bool getConfigAddCompletionWord() const
+ { return m_addCompletionWord; }
+
+ bool getConfigIncludeTwoUpperUpperLetterException() const
+ { return m_includeTwoUpperLetterException; }
+
+ bool getConfigIncludeAbbreviation() const
+ { return m_includeAbbreviation; }
+
+ bool getConfigAutoSuperScript( ) const
+ { return m_bAutoSuperScript; }
+
+ bool getConfigCorrectionWithFormat() const
+ { return m_bAutoCorrectionWithFormat; }
+
+ bool getConfigCapitalizeNameOfDays() const
+ { return m_bCapitalizeNameOfDays; }
+
+ QString getConfigAutoFormatLanguage( )const
+ { return m_autoFormatLanguage;}
+
+ KeyCompletionAction getConfigKeyAction() const
+ { return m_keyCompletionAction;}
+
+ const QDict<KoAutoFormatEntry> & getAutoFormatEntries() const{
+ return m_entries;
+ }
+
+ KoAutoFormatEntry * findFormatEntry(const QString & text) {
+ return m_entries[text];
+ }
+
+ // Add/remove entries, called by the dialog
+ void addAutoFormatEntry( const QString &key, KoAutoFormatEntry *entry ) {
+ m_entries.insert( key, entry );
+ buildMaxLen();
+ }
+
+ void addAutoFormatEntry( const QString &key, const QString &replace );
+
+
+ void removeAutoFormatEntry( const QString &key ) {
+ m_entries.setAutoDelete(true);
+ m_entries.remove( key );
+ m_entries.setAutoDelete(false);
+ buildMaxLen();
+ }
+
+ // Copy all autoformat entries from another KWAutoFormat. Called by the dialog
+ void copyAutoFormatEntries( const KoAutoFormat & other )
+ { m_entries = other.m_entries; }
+
+ void copyListException( const QStringList & _list)
+ { m_upperCaseExceptions=_list;}
+
+ void copyListTwoUpperCaseException( const QStringList &_list)
+ { m_twoUpperLetterException=_list; }
+
+ QStringList listException() const {return m_upperCaseExceptions;}
+
+ QStringList listTwoUpperLetterException() const {return m_twoUpperLetterException;}
+
+ QStringList listCompletion() const;
+
+ KCompletion *getCompletion() const { return m_listCompletion; }
+
+ int nbSuperScriptEntry() const
+ { return m_superScriptEntries.count(); }
+
+ // Read/save config ( into kwordrc )
+ void readConfig(bool force = false);
+ void saveConfig();
+
+ static bool isUpper( const QChar &c );
+ static bool isLower( const QChar &c );
+ static bool isMark( const QChar &c ); // End of sentence
+ static bool isSeparator( const QChar &c );
+
+ void updateMaxWords();
+protected:
+ //return a ref to index otherwise when we uperCase, index is bad !
+ KCommand *doAutoCorrect( KoTextCursor* textEditCursor, KoTextParag *parag, int & index, KoTextObject *txtObj );
+ KCommand *doUpperCase( KoTextCursor* textEditCursor, KoTextParag *parag, int index, const QString & word , KoTextObject *txtObj );
+ KCommand * doTypographicQuotes( KoTextCursor* textEditCursor, KoTextParag *parag, int index, KoTextObject *txtObj, bool doubleQuotes );
+ void buildMaxLen();
+
+ void doAutoDetectUrl( KoTextCursor *textEditCursor, KoTextParag *parag, int & index, QString & word, KoTextObject *txtObj );
+ KCommand *doRemoveSpaceBeginEndLine( KoTextCursor *textEditCursor, KoTextParag *parag, KoTextObject *txtObj, int& index );
+ KCommand *doAutoChangeFormat( KoTextCursor *textEditCursor, KoTextParag *parag, int index, const QString & word, KoTextObject *txtObj );
+ KCommand *doUseBulletStyle(KoTextCursor *textEditCursor, KoTextParag *parag, KoTextObject *txtObj, int& index );
+
+ KCommand *doAutoReplaceNumber( KoTextCursor* textEditCursor, KoTextParag *parag, int & index, const QString & word , KoTextObject *txtObj );
+
+ KCommand *doUseNumberStyle(KoTextCursor * /*textEditCursor*/, KoTextParag *parag, KoTextObject *txtObj, int& index );
+
+ void doAutoIncludeUpperUpper(KoTextCursor *textEditCursor, KoTextParag *parag, KoTextObject *txtObj );
+ void doAutoIncludeAbbreviation(KoTextCursor *textEditCursor, KoTextParag *parag, KoTextObject *txtObj );
+
+ KCommand *doAutoSuperScript( KoTextCursor* textEditCursor, KoTextParag *parag, int index, const QString & word , KoTextObject *txtObj );
+
+ KCommand *doCapitalizeNameOfDays( KoTextCursor* textEditCursor, KoTextParag *parag, int index, const QString & word , KoTextObject *txtObj );
+
+ static void changeTextFormat(KoSearchContext *formatOptions, KoTextFormat * format, int & flags );
+ void loadEntry( const QDomElement &nl, bool _allLanguages = false);
+ QDomElement saveEntry( QDictIterator<KoAutoFormatEntry> _entry, QDomDocument doc);
+private:
+ void detectStartOfLink(KoTextParag * parag, int const index, bool const insertedDot);
+ void autoFormatIsActive();
+ void loadListOfWordCompletion();
+ void loadAutoCorrection( const QDomElement & _de, bool _allLanguages = false );
+ void loadAllLanguagesAutoCorrection();
+ KCommand *autoFormatWord( KoTextCursor* textEditCursor, KoTextParag *parag, int &index, KoTextObject *txtObj, QString * _wordArray, bool _allLanguages );
+ void readAutoCorrectConfig();
+
+ KoDocument *m_doc;
+ KoVariableCollection *m_varCollection;
+ KoVariableFormatCollection *m_varFormatCollection;
+
+ QString m_autoFormatLanguage;
+ bool m_configRead;
+ bool m_convertUpperCase, m_convertUpperUpper,m_advancedAutoCorrect;
+ bool m_autoDetectUrl, m_ignoreDoubleSpace, m_removeSpaceBeginEndLine;
+ bool m_useBulletStyle, m_autoChangeFormat, m_autoReplaceNumber;
+ bool m_useAutoNumberStyle;
+ bool m_completion;
+ bool m_toolTipCompletion;
+ bool m_completionAppendSpace;
+ bool m_addCompletionWord;
+ bool m_includeTwoUpperLetterException;
+ bool m_includeAbbreviation;
+ bool m_ignoreUpperCase;
+ bool m_bAutoFormatActive;
+
+ bool m_bAutoSuperScript;
+ bool m_bAutoCorrectionWithFormat;
+ bool m_bCapitalizeNameOfDays;
+ /// Indicates if doAutoFormat has called itself
+ bool m_wordInserted;
+ QChar m_bulletStyle;
+
+ TypographicQuotes m_typographicSimpleQuotes;
+
+ TypographicQuotes m_typographicDoubleQuotes;
+
+ TypographicQuotes m_typographicDefaultDoubleQuotes;
+
+ TypographicQuotes m_typographicDefaultSimpleQuotes;
+
+ KCompletion *m_listCompletion;
+
+ QDict<KoAutoFormatEntry> m_entries;
+ QDict<KoAutoFormatEntry> m_allLanguages;
+
+ KoAutoFormatEntryMap m_superScriptEntries;
+
+ QStringList m_upperCaseExceptions;
+ QStringList m_twoUpperLetterException;
+
+ uint m_maxFindLength;
+ uint m_minCompletionWordLength;
+ uint m_nbMaxCompletionWord;
+ uint m_countMaxWords;
+ QStringList m_cacheNameOfDays;
+ KoCompletionBox *m_completionBox;
+ KeyCompletionAction m_keyCompletionAction;
+};
+
+#endif
diff --git a/lib/kotext/KoAutoFormatDia.cpp b/lib/kotext/KoAutoFormatDia.cpp
new file mode 100644
index 00000000..20502404
--- /dev/null
+++ b/lib/kotext/KoAutoFormatDia.cpp
@@ -0,0 +1,1142 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+ 2001, 2002 Sven Leiber <s.leiber@web.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoAutoFormatDia.h"
+#include "KoAutoFormat.h"
+#include "KoCharSelectDia.h"
+#include <KoSearchDia.h>
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <klistview.h>
+#include <kstandarddirs.h>
+
+#include <qlayout.h>
+#include <qwhatsthis.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+#include <qtooltip.h>
+#include <qcombobox.h>
+#include <qdir.h>
+#include <qapplication.h>
+
+KoAutoFormatLineEdit::KoAutoFormatLineEdit ( QWidget * parent, const char * name )
+ : QLineEdit(parent,name)
+{
+}
+
+void KoAutoFormatLineEdit::keyPressEvent ( QKeyEvent *ke )
+{
+ if( ke->key() == QKeyEvent::Key_Return ||
+ ke->key() == QKeyEvent::Key_Enter )
+ {
+ emit keyReturnPressed();
+ return;
+ }
+ QLineEdit::keyPressEvent (ke);
+}
+
+
+/******************************************************************/
+/* Class: KoAutoFormatExceptionWidget */
+/******************************************************************/
+
+KoAutoFormatExceptionWidget::KoAutoFormatExceptionWidget(QWidget *parent, const QString &name,const QStringList &_list, bool _autoInclude, bool _abreviation)
+ :QWidget( parent )
+{
+ m_bAbbreviation=_abreviation;
+ m_listException=_list;
+ QGridLayout *grid = new QGridLayout(this, 4, 2, 0, KDialog::spacingHint());
+
+ QLabel *lab=new QLabel(name,this);
+ grid->addMultiCellWidget(lab,0,0,0,1);
+
+ exceptionLine = new KoAutoFormatLineEdit( this );
+ grid->addWidget(exceptionLine,1,0);
+
+ connect(exceptionLine,SIGNAL(keyReturnPressed()),SLOT(slotAddException()));
+ connect(exceptionLine ,SIGNAL(textChanged ( const QString & )),
+ SLOT(textChanged ( const QString & )));
+
+ pbAddException=new QPushButton(i18n("Add"),this);
+ connect(pbAddException, SIGNAL(clicked()),SLOT(slotAddException()));
+ grid->addWidget(pbAddException,1,1);
+
+ pbAddException->setEnabled(false);
+
+ pbRemoveException=new QPushButton(i18n("Remove"),this);
+ connect(pbRemoveException, SIGNAL(clicked()),SLOT(slotRemoveException()));
+ grid->addWidget(pbRemoveException,2,1,Qt::AlignTop);
+
+ exceptionList=new QListBox(this);
+ exceptionList->insertStringList(m_listException);
+ exceptionList->sort();
+ grid->addWidget(exceptionList,2,0);
+
+ grid->setRowStretch( 2, 1 );
+
+ connect( exceptionList , SIGNAL(selectionChanged () ),
+ this,SLOT(slotExceptionListSelected()) );
+
+ pbRemoveException->setEnabled( exceptionList->currentItem()!=-1);
+
+ cbAutoInclude = new QCheckBox( i18n("Autoinclude"), this );
+ grid->addWidget(cbAutoInclude,3,0);
+ cbAutoInclude->setChecked( _autoInclude );
+}
+
+void KoAutoFormatExceptionWidget::textChanged ( const QString &_text )
+{
+ pbAddException->setEnabled(!_text.isEmpty());
+}
+
+void KoAutoFormatExceptionWidget::slotAddException()
+{
+ QString text=exceptionLine->text().stripWhiteSpace();
+ if(!text.isEmpty())
+ {
+ if(text.at(text.length()-1)!='.' && m_bAbbreviation)
+ text=text+".";
+ if( m_listException.findIndex( text )==-1)
+ {
+ m_listException<<text;
+
+ exceptionList->clear();
+ exceptionList->insertStringList(m_listException);
+ exceptionList->sort();
+ pbRemoveException->setEnabled( exceptionList->currentItem()!=-1);
+ pbAddException->setEnabled(false);
+ }
+ exceptionLine->clear();
+ }
+}
+
+void KoAutoFormatExceptionWidget::slotRemoveException()
+{
+ if(!exceptionList->currentText().isEmpty())
+ {
+ m_listException.remove(exceptionList->currentText());
+ exceptionList->clear();
+ pbAddException->setEnabled(false);
+ pbRemoveException->setEnabled( exceptionList->currentItem()!=-1);
+ exceptionList->insertStringList(m_listException);
+ exceptionLine->clear();
+ }
+}
+
+bool KoAutoFormatExceptionWidget::autoInclude()
+{
+ return cbAutoInclude->isChecked();
+}
+
+void KoAutoFormatExceptionWidget::setListException( const QStringList &list)
+{
+ exceptionList->clear();
+ exceptionList->insertStringList(list);
+}
+
+void KoAutoFormatExceptionWidget::setAutoInclude(bool b)
+{
+ cbAutoInclude->setChecked( b );
+}
+
+void KoAutoFormatExceptionWidget::slotExceptionListSelected()
+{
+ pbRemoveException->setEnabled( exceptionList->currentItem()!=-1 );
+}
+
+/******************************************************************/
+/* Class: KoAutoFormatDia */
+/******************************************************************/
+
+KoAutoFormatDia::KoAutoFormatDia( QWidget *parent, const char *name,
+ KoAutoFormat * autoFormat )
+ : KDialogBase( Tabbed, i18n("Autocorrection"), Ok | Cancel | User1, Ok,
+ parent, name, true, true, KGuiItem( i18n( "&Reset" ), "undo" )),
+ oSimpleBegin( autoFormat->getConfigTypographicSimpleQuotes().begin ),
+ oSimpleEnd( autoFormat->getConfigTypographicSimpleQuotes().end ),
+ oDoubleBegin( autoFormat->getConfigTypographicDoubleQuotes().begin ),
+ oDoubleEnd( autoFormat->getConfigTypographicDoubleQuotes().end ),
+ bulletStyle( autoFormat->getConfigBulletStyle()),
+ m_autoFormat( *autoFormat ),
+ m_docAutoFormat( autoFormat )
+{
+ noSignal=true;
+ newEntry = 0L;
+ autocorrectionEntryChanged= false;
+ changeLanguage = false;
+
+ setupTab1();
+ setupTab2();
+ setupTab3();
+ setupTab4();
+ setInitialSize( QSize(500, 300) );
+ connect( this, SIGNAL( user1Clicked() ), this, SLOT(slotResetConf()));
+ noSignal=false;
+}
+
+KoAutoFormatDia::~KoAutoFormatDia()
+{
+ delete newEntry;
+}
+
+void KoAutoFormatDia::slotResetConf()
+{
+ switch( activePageIndex() ) {
+ case 0:
+ initTab1();
+ break;
+ case 1:
+ initTab2();
+ break;
+ case 2:
+ initTab3();
+ break;
+ case 3:
+ initTab4();
+ break;
+ default:
+ break;
+ }
+}
+
+void KoAutoFormatDia::setupTab1()
+{
+ tab1 = addPage( i18n( "Simple Autocorrection" ) );
+ QVBoxLayout *vbox = new QVBoxLayout(tab1, 0, KDialog::spacingHint());
+
+ cbUpperCase = new QCheckBox( tab1 );
+ cbUpperCase->setText( i18n(
+ "Convert &first letter of a sentence automatically to uppercase\n"
+ "(e.g. \"my house. in this town\" to \"my house. In this town\")"
+ ) );
+ QWhatsThis::add( cbUpperCase, i18n(
+ "Detect when a new sentence is started and always ensure that"
+ " the first character is an uppercase character."));
+
+ vbox->addWidget(cbUpperCase);
+
+
+ cbUpperUpper = new QCheckBox( tab1 );
+ cbUpperUpper->setText( i18n(
+ "Convert &two uppercase characters to one uppercase and one"
+ " lowercase character\n (e.g. PErfect to Perfect)" ) );
+ QWhatsThis::add( cbUpperUpper, i18n(
+ "All words are checked for the common mistake of holding the "
+ "shift key down a bit too long. If some words must have two "
+ "uppercase characters, then those exceptions should be added in "
+ "the 'Exceptions' tab."));
+
+ vbox->addWidget(cbUpperUpper);
+
+ cbDetectUrl=new QCheckBox( tab1 );
+ cbDetectUrl->setText( i18n( "Autoformat &URLs" ) );
+ QWhatsThis::add( cbDetectUrl, i18n(
+ "Detect when a URL (Uniform Resource Locator) is typed and "
+ "provide formatting that matches the way an Internet browser "
+ "would show a URL."));
+
+ vbox->addWidget(cbDetectUrl);
+
+ cbIgnoreDoubleSpace=new QCheckBox( tab1 );
+ cbIgnoreDoubleSpace->setText( i18n( "&Suppress double spaces" ) );
+ QWhatsThis::add( cbIgnoreDoubleSpace, i18n(
+ "Make sure that more than one space cannot be typed, as this is a "
+ "common mistake which is quite hard to find in formatted text."));
+
+ vbox->addWidget(cbIgnoreDoubleSpace);
+
+ cbRemoveSpaceBeginEndLine=new QCheckBox( tab1 );
+ cbRemoveSpaceBeginEndLine->setText( i18n(
+ "R&emove spaces at the beginning and end of paragraphs" ) );
+ QWhatsThis::add( cbRemoveSpaceBeginEndLine, i18n(
+ "Keep correct formatting and indenting of sentences by "
+ "automatically removing spaces typed at the beginning and end of "
+ "a paragraph."));
+
+ vbox->addWidget(cbRemoveSpaceBeginEndLine);
+
+ cbAutoChangeFormat=new QCheckBox( tab1 );
+ cbAutoChangeFormat->setText( i18n(
+ "Automatically do &bold and underline formatting") );
+ QWhatsThis::add( cbAutoChangeFormat, i18n(
+ "When you use _underline_ or *bold*, the text between the "
+ "underscores or asterisks will be converted to underlined or "
+ "bold text.") );
+
+ vbox->addWidget(cbAutoChangeFormat);
+
+ cbAutoReplaceNumber=new QCheckBox( tab1 );
+ cbAutoReplaceNumber->setText( i18n(
+ "We add the 1/2 char at the %1", "Re&place 1/2... with %1..." )
+ .arg( QString( "" ) ) );
+ QWhatsThis::add( cbAutoReplaceNumber, i18n(
+ "Most standard fraction notations will be converted when available"
+ ) );
+
+ vbox->addWidget(cbAutoReplaceNumber);
+
+ cbUseNumberStyle=new QCheckBox( tab1 );
+ cbUseNumberStyle->setText( i18n(
+ "Use &autonumbering for numbered paragraphs" ) );
+ QWhatsThis::add( cbUseNumberStyle, i18n(
+ "When typing '1)' or similar in front of a paragraph, "
+ "automatically convert the paragraph to use that numbering style. "
+ "This has the advantage that further paragraphs will also be "
+ "numbered and the spacing is done correctly.") );
+
+ vbox->addWidget(cbUseNumberStyle);
+
+ cbAutoSuperScript = new QCheckBox( tab1 );
+ cbAutoSuperScript->setText( i18n("Rep&lace 1st... with 1^st..."));
+ cbAutoSuperScript->setEnabled( m_docAutoFormat->nbSuperScriptEntry()>0 );
+
+ vbox->addWidget(cbAutoSuperScript);
+ cbCapitalizeDaysName = new QCheckBox( tab1 );
+ cbCapitalizeDaysName->setText( i18n("Capitalize name of days"));
+ vbox->addWidget(cbCapitalizeDaysName);
+
+ cbUseBulletStyle=new QCheckBox( tab1 );
+ cbUseBulletStyle->setText( i18n(
+ "Use l&ist-formatting for bulleted paragraphs" ) );
+ QWhatsThis::add( cbUseBulletStyle, i18n(
+ "When typing '*' or '-' in front of a paragraph, automatically "
+ "convert the paragraph to use that list-style. Using a list-style "
+ "formatting means that a correct bullet is used to draw the list."
+ ) );
+
+ connect( cbUseBulletStyle, SIGNAL( toggled( bool ) ),
+ SLOT( slotBulletStyleToggled( bool ) ) );
+
+ vbox->addWidget(cbUseBulletStyle);
+ QHBoxLayout *hbox = new QHBoxLayout();
+
+ hbox->addSpacing( 20 );
+ hbox->setSpacing(KDialog::spacingHint());
+ pbBulletStyle = new QPushButton( tab1 );
+ pbBulletStyle->setFixedSize( pbBulletStyle->sizeHint() );
+ hbox->addWidget( pbBulletStyle );
+ pbDefaultBulletStyle = new QPushButton( tab1 );
+ pbDefaultBulletStyle->setText(i18n("Default"));
+ pbDefaultBulletStyle->setFixedSize( pbDefaultBulletStyle->sizeHint() );
+ hbox->addWidget( pbDefaultBulletStyle );
+
+ hbox->addStretch( 1 );
+
+ vbox->addItem(hbox);
+ vbox->addStretch( 1 );
+
+ initTab1();
+
+ connect( pbBulletStyle, SIGNAL( clicked() ), SLOT( chooseBulletStyle() ) );
+ connect( pbDefaultBulletStyle, SIGNAL( clicked()),
+ SLOT( defaultBulletStyle() ) );
+}
+
+void KoAutoFormatDia::initTab1()
+{
+ cbUpperCase->setChecked( m_autoFormat.getConfigUpperCase() );
+ cbUpperUpper->setChecked( m_autoFormat.getConfigUpperUpper() );
+ cbDetectUrl->setChecked( m_autoFormat.getConfigAutoDetectUrl());
+ cbIgnoreDoubleSpace->setChecked( m_autoFormat.getConfigIgnoreDoubleSpace());
+ cbRemoveSpaceBeginEndLine->setChecked( m_autoFormat.getConfigRemoveSpaceBeginEndLine());
+ cbAutoChangeFormat->setChecked( m_autoFormat.getConfigAutoChangeFormat());
+ cbAutoReplaceNumber->setChecked( m_autoFormat.getConfigAutoReplaceNumber());
+ cbUseNumberStyle->setChecked( m_autoFormat.getConfigAutoNumberStyle());
+ cbUseBulletStyle->setChecked( m_autoFormat.getConfigUseBulletSyle());
+ cbAutoSuperScript->setChecked( m_docAutoFormat->getConfigAutoSuperScript());
+ pbBulletStyle->setText( bulletStyle );
+ cbCapitalizeDaysName->setChecked( m_autoFormat.getConfigCapitalizeNameOfDays());
+
+ slotBulletStyleToggled( cbUseBulletStyle->isChecked() );
+}
+
+void KoAutoFormatDia::slotBulletStyleToggled( bool b )
+{
+ pbBulletStyle->setEnabled( b );
+ pbDefaultBulletStyle->setEnabled( b );
+}
+
+void KoAutoFormatDia::setupTab2()
+{
+ tab2 = addPage( i18n( "Custom Quotes" ) );
+
+ QVBoxLayout *vbox = new QVBoxLayout(tab2, 0, KDialog::spacingHint());
+
+ cbTypographicDoubleQuotes = new QCheckBox( tab2 );
+ cbTypographicDoubleQuotes->setText( i18n(
+ "Replace &double quotes with typographical quotes" ) );
+
+ connect( cbTypographicDoubleQuotes,SIGNAL(toggled ( bool)),
+ SLOT(slotChangeStateDouble(bool)));
+
+ vbox->addWidget( cbTypographicDoubleQuotes );
+
+ QHBoxLayout *hbox = new QHBoxLayout( );
+ hbox->addSpacing( 20 );
+
+ pbDoubleQuote1 = new QPushButton( tab2 );
+ pbDoubleQuote1->setFixedSize( pbDoubleQuote1->sizeHint() );
+
+ pbDoubleQuote2 = new QPushButton( tab2 );
+ pbDoubleQuote2->setFixedSize( pbDoubleQuote2->sizeHint() );
+
+ if (QApplication::reverseLayout()) {
+ hbox->addWidget( pbDoubleQuote2 );
+ hbox->addWidget( pbDoubleQuote1 );
+ } else {
+ hbox->addWidget( pbDoubleQuote1 );
+ hbox->addWidget( pbDoubleQuote2 );
+ }
+
+ hbox->addSpacing( KDialog::spacingHint() );
+
+ pbDoubleDefault = new QPushButton( tab2 );
+ pbDoubleDefault->setText(i18n("Default"));
+ pbDoubleDefault->setFixedSize( pbDoubleDefault->sizeHint() );
+ hbox->addWidget( pbDoubleDefault );
+
+ hbox->addStretch( 1 );
+
+ connect(pbDoubleQuote1, SIGNAL( clicked() ), SLOT( chooseDoubleQuote1() ));
+ connect(pbDoubleQuote2, SIGNAL( clicked() ), SLOT( chooseDoubleQuote2() ));
+ connect(pbDoubleDefault, SIGNAL( clicked()), SLOT( defaultDoubleQuote() ));
+
+ vbox->addItem( hbox );
+
+ cbTypographicSimpleQuotes = new QCheckBox( tab2 );
+ cbTypographicSimpleQuotes->setText( i18n(
+ "Replace &single quotes with typographical quotes" ) );
+
+ connect( cbTypographicSimpleQuotes,SIGNAL(toggled ( bool)),
+ SLOT(slotChangeStateSimple(bool)));
+
+ vbox->addWidget( cbTypographicSimpleQuotes );
+
+ hbox = new QHBoxLayout( );
+ hbox->addSpacing( 20 );
+
+ pbSimpleQuote1 = new QPushButton( tab2 );
+ pbSimpleQuote1->setFixedSize( pbSimpleQuote1->sizeHint() );
+
+ pbSimpleQuote2 = new QPushButton( tab2 );
+ pbSimpleQuote2->setFixedSize( pbSimpleQuote2->sizeHint() );
+
+ if (QApplication::reverseLayout()) {
+ hbox->addWidget( pbSimpleQuote2 );
+ hbox->addWidget( pbSimpleQuote1 );
+ } else {
+ hbox->addWidget( pbSimpleQuote1 );
+ hbox->addWidget( pbSimpleQuote2 );
+ }
+
+ hbox->addSpacing( KDialog::spacingHint() );
+
+ pbSimpleDefault = new QPushButton( tab2 );
+ pbSimpleDefault->setText(i18n("Default"));
+ pbSimpleDefault->setFixedSize( pbSimpleDefault->sizeHint() );
+ hbox->addWidget( pbSimpleDefault );
+
+ hbox->addStretch( 1 );
+
+ connect(pbSimpleQuote1, SIGNAL( clicked() ), SLOT( chooseSimpleQuote1() ));
+ connect(pbSimpleQuote2, SIGNAL( clicked() ), SLOT( chooseSimpleQuote2() ));
+ connect(pbSimpleDefault, SIGNAL( clicked()), SLOT( defaultSimpleQuote() ));
+
+ vbox->addItem( hbox );
+ vbox->addStretch( 1 );
+
+ initTab2();
+}
+
+void KoAutoFormatDia::initTab2()
+{
+ bool state=m_autoFormat.getConfigTypographicDoubleQuotes().replace;
+ cbTypographicDoubleQuotes->setChecked( state );
+ pbDoubleQuote1->setText( oDoubleBegin );
+ pbDoubleQuote2->setText(oDoubleEnd );
+ slotChangeStateDouble(state);
+
+ state=m_autoFormat.getConfigTypographicSimpleQuotes().replace;
+ cbTypographicSimpleQuotes->setChecked( state );
+ pbSimpleQuote1->setText( oSimpleBegin );
+ pbSimpleQuote2->setText(oSimpleEnd );
+ slotChangeStateSimple(state);
+
+}
+
+void KoAutoFormatDia::setupTab3()
+{
+ tab3 = addPage( i18n( "Advanced Autocorrection" ) );
+
+ QLabel *lblFind, *lblReplace;
+
+ QGridLayout *grid = new QGridLayout( tab3, 11, 7, 0, KDialog::spacingHint() );
+
+ autoFormatLanguage = new QComboBox(tab3);
+
+ QStringList lst;
+ lst<<i18n("Default");
+ lst<<i18n("All Languages");
+ exceptionLanguageName.insert( i18n("Default"), "");
+ exceptionLanguageName.insert( i18n("All Languages"), "all_languages");
+
+ KStandardDirs *standard = new KStandardDirs();
+ QStringList tmp = standard->findDirs("data", "koffice/autocorrect/");
+ QString path = *(tmp.end());
+ for ( QStringList::Iterator it = tmp.begin(); it != tmp.end(); ++it )
+ {
+ path =*it;
+ }
+ delete standard;
+ QDir dir( path);
+ tmp =dir.entryList (QDir::Files);
+ for ( QStringList::Iterator it = tmp.begin(); it != tmp.end(); ++it )
+ {
+ if ( !(*it).contains("autocorrect"))
+ {
+ QString readableName = KGlobal::locale()->twoAlphaToCountryName((*it).left((*it).length()-4));
+ QString tmp;
+ if ( readableName.isEmpty() )
+ tmp =(*it).left((*it).length()-4);
+ else
+ tmp =readableName;
+ exceptionLanguageName.insert( tmp, (*it).left((*it).length()-4));
+ lst<<tmp;
+ }
+ }
+ autoFormatLanguage->insertStringList(lst);
+
+ connect(autoFormatLanguage->listBox(), SIGNAL(selected ( const QString & )), this, SLOT(changeAutoformatLanguage(const QString & )));
+
+ grid->addMultiCellWidget( autoFormatLanguage, 0, 0, 4, 6 );
+ QLabel *lblAutoFormatLanguage = new QLabel( i18n("Replacements and exceptions for language:"), tab3);
+ grid->addMultiCellWidget( lblAutoFormatLanguage, 0, 0, 0, 3 );
+
+ cbAdvancedAutoCorrection = new QCheckBox( tab3 );
+ cbAdvancedAutoCorrection->setText( i18n("Enable word replacement") );
+ connect( cbAdvancedAutoCorrection, SIGNAL(clicked ()), this, SLOT( slotChangeAdvancedAutoCorrection()));
+ grid->addMultiCellWidget( cbAdvancedAutoCorrection, 1, 1, 0, 6 );
+
+ cbAutoCorrectionWithFormat = new QCheckBox( tab3 );
+ cbAutoCorrectionWithFormat->setText( i18n("Replace text with format") );
+ grid->addMultiCellWidget( cbAutoCorrectionWithFormat, 2, 2, 0, 6 );
+
+ lblFind = new QLabel( i18n( "&Find:" ), tab3 );
+ grid->addWidget( lblFind, 3, 0 );
+
+ m_find = new KoAutoFormatLineEdit( tab3 );
+ grid->addWidget( m_find, 3, 1 );
+
+ lblFind->setBuddy( m_find );
+
+ connect( m_find, SIGNAL( textChanged( const QString & ) ),
+ SLOT( slotfind( const QString & ) ) );
+ connect( m_find, SIGNAL( keyReturnPressed() ),
+ SLOT( slotAddEntry()));
+
+ pbSpecialChar1 = new QPushButton( "...", tab3 );
+ QToolTip::add( pbSpecialChar1, i18n( "Insert a special character..." ) );
+ pbSpecialChar1->setFixedWidth( 40 );
+ grid->addWidget( pbSpecialChar1, 3, 2 );
+
+ connect(pbSpecialChar1,SIGNAL(clicked()), SLOT(chooseSpecialChar1()));
+
+ lblReplace = new QLabel( i18n( "&Replace:" ), tab3 );
+ grid->addWidget( lblReplace, 3, 3 );
+
+ m_replace = new KoAutoFormatLineEdit( tab3 );
+ grid->addWidget( m_replace, 3, 4 );
+
+ lblReplace->setBuddy( m_replace );
+
+ connect( m_replace, SIGNAL( textChanged( const QString & ) ),
+ SLOT( slotfind2( const QString & ) ) );
+ connect( m_replace, SIGNAL( keyReturnPressed() ),
+ SLOT( slotAddEntry()));
+
+ pbSpecialChar2 = new QPushButton( "...", tab3 );
+ QToolTip::add( pbSpecialChar2, i18n( "Insert a special character..." ) );
+ pbSpecialChar2->setFixedWidth( 40 );
+ grid->addWidget( pbSpecialChar2, 3, 5 );
+
+ connect(pbSpecialChar2,SIGNAL(clicked()), SLOT(chooseSpecialChar2()));
+
+ pbAdd = new QPushButton( i18n( "&Add"), tab3 );
+ grid->addWidget( pbAdd, 3, 6 );
+
+ connect(pbAdd,SIGNAL(clicked()),this, SLOT(slotAddEntry()));
+
+ m_pListView = new KListView( tab3 );
+ m_pListView->addColumn( i18n( "Find" ) );
+ m_pListView->addColumn( i18n( "Replace" ) );
+ m_pListView->setAllColumnsShowFocus( true );
+ grid->addMultiCellWidget( m_pListView, 4, 10, 0, 5 );
+
+ connect(m_pListView, SIGNAL(doubleClicked ( QListViewItem * )),
+ SLOT(slotChangeTextFormatEntry()) );
+ connect(m_pListView, SIGNAL(clicked ( QListViewItem * ) ),
+ SLOT(slotEditEntry()) );
+
+ pbRemove = new QPushButton( i18n( "Remove" ), tab3 );
+ grid->addWidget( pbRemove, 4, 6, Qt::AlignTop );
+
+ connect(pbRemove,SIGNAL(clicked()), SLOT(slotRemoveEntry()));
+
+ pbChangeFormat= new QPushButton( i18n( "Change Format..." ), tab3 );
+ grid->addWidget( pbChangeFormat, 5, 6, Qt::AlignTop );
+
+ connect( pbChangeFormat, SIGNAL(clicked()), SLOT(slotChangeTextFormatEntry()));
+
+ pbClearFormat= new QPushButton( i18n( "Clear Format" ), tab3 );
+ grid->addWidget( pbClearFormat, 6, 6, Qt::AlignTop );
+
+ connect( pbClearFormat, SIGNAL(clicked()), SLOT(slotClearTextFormatEntry()));
+ grid->setRowStretch( 10, 1 );
+
+ initTab3();
+ slotChangeAdvancedAutoCorrection();
+ pbRemove->setEnabled(false);
+ pbChangeFormat->setEnabled( false );
+ pbAdd->setEnabled(false);
+ pbClearFormat->setEnabled( false);
+
+}
+
+void KoAutoFormatDia::initTab3()
+{
+ if ( !changeLanguage || noSignal)
+ {
+ initialLanguage=m_autoFormat.getConfigAutoFormatLanguage( );
+ if ( initialLanguage.isEmpty() )
+ autoFormatLanguage->setCurrentItem(0);
+ else
+ {
+ KoExceptionLanguageName::Iterator it = exceptionLanguageName.begin();
+ for ( ; it != exceptionLanguageName.end() ; ++it )
+ {
+ if ( it.data() == initialLanguage)
+ {
+ autoFormatLanguage->setCurrentText(it.key());
+ break;
+ }
+
+ }
+ }
+ }
+ //force to re-readconfig when we reset config and we change a entry
+ if ( autocorrectionEntryChanged )
+ {
+ if ( !changeLanguage )
+ m_docAutoFormat->configAutoFormatLanguage( initialLanguage);
+ m_docAutoFormat->readConfig( true );
+ }
+ cbAdvancedAutoCorrection->setChecked(m_autoFormat.getConfigAdvancedAutoCorrect());
+ cbAutoCorrectionWithFormat->setChecked( m_autoFormat.getConfigCorrectionWithFormat());
+ m_pListView->clear();
+
+ QDictIterator<KoAutoFormatEntry> it( m_docAutoFormat->getAutoFormatEntries());
+ for( ; it.current(); ++it )
+ {
+ ( void )new QListViewItem( m_pListView, it.currentKey(), it.current()->replace() );
+ }
+}
+
+void KoAutoFormatDia::slotChangeAdvancedAutoCorrection()
+{
+ bool state = cbAdvancedAutoCorrection->isChecked();
+ cbAutoCorrectionWithFormat->setEnabled( state );
+ pbSpecialChar2->setEnabled( state );
+ pbSpecialChar1->setEnabled( state );
+ m_replace->setEnabled( state);
+ m_find->setEnabled( state);
+ m_pListView->setEnabled( state);
+
+ state = state && !m_replace->text().isEmpty() && !m_find->text().isEmpty();
+ KoAutoFormatEntry * entry=m_docAutoFormat->findFormatEntry(m_find->text());
+ pbRemove->setEnabled(state && entry);
+ pbChangeFormat->setEnabled(state && entry);
+ pbClearFormat->setEnabled(state && entry);
+ pbAdd->setEnabled(state);
+}
+
+
+void KoAutoFormatDia::changeAutoformatLanguage(const QString & text)
+{
+ if ( text==i18n("Default"))
+ m_docAutoFormat->configAutoFormatLanguage( QString::null);
+ else
+ {
+ m_docAutoFormat->configAutoFormatLanguage( exceptionLanguageName.find(text).data());
+ }
+ if ( !noSignal )
+ {
+ changeLanguage=true;
+ m_docAutoFormat->readConfig( true );
+ initTab3();
+ initTab4();
+ autocorrectionEntryChanged=true;
+ cbAutoSuperScript->setEnabled( m_docAutoFormat->nbSuperScriptEntry()>0 );
+ oSimpleBegin= m_docAutoFormat->getConfigTypographicSimpleQuotes().begin ;
+ oSimpleEnd= m_docAutoFormat->getConfigTypographicSimpleQuotes().end;
+ oDoubleBegin= m_docAutoFormat->getConfigTypographicDoubleQuotes().begin;
+ oDoubleEnd= m_docAutoFormat->getConfigTypographicDoubleQuotes().end;
+ bulletStyle= m_docAutoFormat->getConfigBulletStyle();
+ delete newEntry;
+ newEntry=0L;
+ changeLanguage=false;
+ }
+}
+
+void KoAutoFormatDia::setupTab4()
+{
+ tab4 = addPage( i18n( "Exceptions" ) );
+ QVBoxLayout *vbox = new QVBoxLayout(tab4, 0, KDialog::spacingHint());
+
+ abbreviation=new KoAutoFormatExceptionWidget(tab4,
+ i18n("Do not treat as the end of a sentence:"),
+ m_autoFormat.listException(),
+ m_autoFormat.getConfigIncludeAbbreviation() , true);
+
+ vbox->addWidget( abbreviation );
+
+ twoUpperLetter=new KoAutoFormatExceptionWidget(tab4,
+ i18n("Accept two uppercase letters in:"),
+ m_autoFormat.listTwoUpperLetterException(),
+ m_autoFormat.getConfigIncludeTwoUpperUpperLetterException());
+
+ vbox->addWidget( twoUpperLetter );
+
+ initTab4();
+}
+
+void KoAutoFormatDia::initTab4()
+{
+ abbreviation->setListException( !changeLanguage ? m_autoFormat.listException(): m_docAutoFormat->listException() );
+ if ( !changeLanguage )
+ {
+ abbreviation->setAutoInclude( m_docAutoFormat->getConfigIncludeAbbreviation() );
+ twoUpperLetter->setAutoInclude( m_docAutoFormat->getConfigIncludeTwoUpperUpperLetterException() );
+ }
+ twoUpperLetter->setListException( !changeLanguage ? m_autoFormat.listTwoUpperLetterException():m_docAutoFormat->listTwoUpperLetterException() );
+}
+
+void KoAutoFormatDia::slotClearTextFormatEntry()
+{
+ bool addNewEntry = (pbAdd->text() == i18n( "&Add" ));
+ if ( m_pListView->currentItem() || addNewEntry)
+ {
+ if ( addNewEntry )
+ {
+ if (newEntry)
+ newEntry->clearFormatEntryContext();
+ }
+ else
+ {
+ KoAutoFormatEntry *entry = m_docAutoFormat->findFormatEntry(m_pListView->currentItem()->text(0));
+ entry->clearFormatEntryContext();
+ }
+ autocorrectionEntryChanged= true;
+ }
+}
+
+void KoAutoFormatDia::slotChangeTextFormatEntry()
+{
+ bool addNewEntry = (pbAdd->text() == i18n( "&Add" ));
+ if ( m_pListView->currentItem() || addNewEntry)
+ {
+ KoAutoFormatEntry *entry = 0L;
+ if ( addNewEntry )
+ {
+ if ( m_replace->text().isEmpty() )
+ return;
+ if ( !newEntry )
+ newEntry = new KoAutoFormatEntry( m_replace->text());
+ entry =newEntry;
+ }
+ else
+ entry = m_docAutoFormat->findFormatEntry(m_pListView->currentItem()->text(0));
+ KoSearchContext *tmpFormat = entry->formatEntryContext();
+ bool createNewFormat = false;
+
+ if ( !tmpFormat )
+ {
+ tmpFormat = new KoSearchContext();
+ createNewFormat = true;
+ }
+
+ KoFormatDia *dia = new KoFormatDia( this, i18n("Change Text Format"), tmpFormat , 0L);
+ if ( dia->exec())
+ {
+ dia->ctxOptions( );
+ if ( createNewFormat )
+ entry->setFormatEntryContext( tmpFormat );
+ autocorrectionEntryChanged= true;
+
+ }
+ else
+ {
+ if ( createNewFormat )
+ delete tmpFormat;
+ }
+ delete dia;
+ }
+}
+
+void KoAutoFormatDia::slotRemoveEntry()
+{
+ //find entry in listbox
+ if(m_pListView->currentItem())
+ {
+ m_docAutoFormat->removeAutoFormatEntry(m_pListView->currentItem()->text(0));
+ pbAdd->setText(i18n("&Add"));
+ refreshEntryList();
+ autocorrectionEntryChanged= true;
+ }
+}
+
+
+void KoAutoFormatDia::slotfind( const QString & )
+{
+ KoAutoFormatEntry *entry = m_docAutoFormat->findFormatEntry(m_find->text());
+ if ( entry )
+ {
+ m_replace->setText(entry->replace().latin1());
+ pbAdd->setText(i18n("&Modify"));
+ m_pListView->setCurrentItem(m_pListView->findItem(m_find->text(),0));
+
+ } else {
+ m_replace->clear();
+ pbAdd->setText(i18n("&Add"));
+ m_pListView->setCurrentItem(0L);
+ }
+ slotfind2("");
+}
+
+
+void KoAutoFormatDia::slotfind2( const QString & )
+{
+ bool state = !m_replace->text().isEmpty() && !m_find->text().isEmpty();
+ KoAutoFormatEntry * entry=m_docAutoFormat->findFormatEntry(m_find->text());
+ pbRemove->setEnabled(state && entry);
+ if ( state && entry )
+ {
+ delete newEntry;
+ newEntry = 0L;
+ }
+ pbChangeFormat->setEnabled(state);
+ pbClearFormat->setEnabled(state);
+ pbAdd->setEnabled(state);
+}
+
+
+void KoAutoFormatDia::refreshEntryList()
+{
+ m_pListView->clear();
+ QDictIterator<KoAutoFormatEntry> it( m_docAutoFormat->getAutoFormatEntries());
+ for( ; it.current(); ++it )
+ {
+ ( void )new QListViewItem( m_pListView, it.currentKey(), it.current()->replace() );
+ }
+ m_pListView->setCurrentItem(m_pListView->firstChild ());
+ bool state = !(m_replace->text().isEmpty()) && !(m_find->text().isEmpty());
+ //we can delete item, as we search now in listbox and not in m_find lineedit
+ pbRemove->setEnabled(m_pListView->currentItem() && m_pListView->selectedItem()!=0 );
+ pbChangeFormat->setEnabled(state && m_pListView->currentItem() && m_pListView->selectedItem()!=0 );
+ pbClearFormat->setEnabled(state && m_pListView->currentItem() && m_pListView->selectedItem()!=0 );
+
+ pbAdd->setEnabled(state);
+}
+
+
+void KoAutoFormatDia::addEntryList(const QString &key, KoAutoFormatEntry *_autoEntry)
+{
+ m_docAutoFormat->addAutoFormatEntry( key, _autoEntry );
+}
+
+
+
+void KoAutoFormatDia::editEntryList(const QString &key,const QString &newFindString, KoAutoFormatEntry *_autoEntry)
+{
+ if ( m_docAutoFormat->findFormatEntry(key) && m_docAutoFormat->findFormatEntry(key)->formatEntryContext())
+ _autoEntry->setFormatEntryContext( new KoSearchContext(*(m_docAutoFormat->findFormatEntry(key)->formatEntryContext()) ));
+ m_docAutoFormat->removeAutoFormatEntry( key );
+ m_docAutoFormat->addAutoFormatEntry( newFindString, _autoEntry );
+}
+
+
+void KoAutoFormatDia::slotAddEntry()
+{
+ if(!pbAdd->isEnabled())
+ return;
+ QString repl = m_replace->text();
+ QString find = m_find->text();
+ if(repl.isEmpty() || find.isEmpty())
+ {
+ KMessageBox::sorry( 0L, i18n( "An area is empty" ) );
+ return;
+ }
+ if(repl==find)
+ {
+ KMessageBox::sorry( 0L, i18n( "Find string is the same as replace string!" ) );
+ return;
+ }
+ KoAutoFormatEntry *tmp = new KoAutoFormatEntry( repl );
+
+ if(pbAdd->text() == i18n( "&Add" ))
+ {
+ if ( newEntry )
+ {
+ newEntry->changeReplace( m_replace->text());
+ addEntryList(find, newEntry);
+ delete tmp;
+ newEntry = 0L;
+ }
+ else
+ addEntryList(find, tmp);
+ }
+ else
+ editEntryList(find, find, tmp);
+ m_replace->clear();
+ m_find->clear();
+
+ refreshEntryList();
+ autocorrectionEntryChanged= true;
+}
+
+
+void KoAutoFormatDia::chooseSpecialChar1()
+{
+ QString f = font().family();
+ QChar c = ' ';
+ bool const focus = m_find->hasFocus();
+ if ( KoCharSelectDia::selectChar( f, c, false ) )
+ {
+ int const cursorpos = m_find->cursorPosition();
+ if (focus)
+ m_find->setText( m_find->text().insert( cursorpos, c ) );
+ else
+ m_find->setText( m_find->text().append(c) );
+ m_find->setCursorPosition( cursorpos+1 );
+ }
+}
+
+
+void KoAutoFormatDia::chooseSpecialChar2()
+{
+ QString f = font().family();
+ QChar c = ' ';
+ bool const focus = m_replace->hasFocus();
+ if ( KoCharSelectDia::selectChar( f, c, false ) )
+ {
+ int const cursorpos = m_replace->cursorPosition();
+ if (focus)
+ m_replace->setText( m_replace->text().insert(m_replace->cursorPosition(), c ) );
+ else
+ m_replace->setText( m_replace->text().append(c) );
+ m_replace->setCursorPosition( cursorpos+1 );
+ }
+}
+
+
+void KoAutoFormatDia::slotItemRenamed(QListViewItem *, const QString & , int )
+{
+ // Wow. This need a redesign (we don't have the old key anymore at this point !)
+ // -> inherit QListViewItem and store the KoAutoFormatEntry pointer in it.
+}
+
+
+void KoAutoFormatDia::slotEditEntry()
+{
+ if(m_pListView->currentItem()==0)
+ return;
+ delete newEntry;
+ newEntry=0L;
+ m_find->setText(m_pListView->currentItem()->text(0));
+ m_replace->setText(m_pListView->currentItem()->text(1));
+ bool state = !m_replace->text().isEmpty() && !m_find->text().isEmpty();
+ pbRemove->setEnabled(state);
+ pbChangeFormat->setEnabled( state );
+ pbClearFormat->setEnabled(state);
+ pbAdd->setEnabled(state);
+}
+
+
+bool KoAutoFormatDia::applyConfig()
+{
+ // First tab
+ KoAutoFormat::TypographicQuotes tq = m_autoFormat.getConfigTypographicSimpleQuotes();
+ tq.replace = cbTypographicSimpleQuotes->isChecked();
+ tq.begin = pbSimpleQuote1->text()[ 0 ];
+ tq.end = pbSimpleQuote2->text()[ 0 ];
+ m_docAutoFormat->configTypographicSimpleQuotes( tq );
+
+ tq = m_autoFormat.getConfigTypographicDoubleQuotes();
+ tq.replace = cbTypographicDoubleQuotes->isChecked();
+ tq.begin = pbDoubleQuote1->text()[ 0 ];
+ tq.end = pbDoubleQuote2->text()[ 0 ];
+ m_docAutoFormat->configTypographicDoubleQuotes( tq );
+
+
+ m_docAutoFormat->configUpperCase( cbUpperCase->isChecked() );
+ m_docAutoFormat->configUpperUpper( cbUpperUpper->isChecked() );
+ m_docAutoFormat->configAutoDetectUrl( cbDetectUrl->isChecked() );
+
+ m_docAutoFormat->configIgnoreDoubleSpace( cbIgnoreDoubleSpace->isChecked());
+ m_docAutoFormat->configRemoveSpaceBeginEndLine( cbRemoveSpaceBeginEndLine->isChecked());
+ m_docAutoFormat->configUseBulletStyle(cbUseBulletStyle->isChecked());
+
+ m_docAutoFormat->configBulletStyle(pbBulletStyle->text()[ 0 ]);
+
+ m_docAutoFormat->configAutoChangeFormat( cbAutoChangeFormat->isChecked());
+
+ m_docAutoFormat->configAutoReplaceNumber( cbAutoReplaceNumber->isChecked());
+ m_docAutoFormat->configAutoNumberStyle(cbUseNumberStyle->isChecked());
+
+ m_docAutoFormat->configAutoSuperScript ( cbAutoSuperScript->isChecked() );
+ m_docAutoFormat->configCapitalizeNameOfDays( cbCapitalizeDaysName->isChecked());
+
+
+ // Second tab
+ //m_docAutoFormat->copyAutoFormatEntries( m_autoFormat );
+ m_docAutoFormat->copyListException(abbreviation->getListException());
+ m_docAutoFormat->copyListTwoUpperCaseException(twoUpperLetter->getListException());
+ m_docAutoFormat->configAdvancedAutocorrect( cbAdvancedAutoCorrection->isChecked() );
+ m_docAutoFormat->configCorrectionWithFormat( cbAutoCorrectionWithFormat->isChecked());
+
+ m_docAutoFormat->configIncludeTwoUpperUpperLetterException( twoUpperLetter->autoInclude());
+ m_docAutoFormat->configIncludeAbbreviation( abbreviation->autoInclude());
+
+ QString lang = exceptionLanguageName.find(autoFormatLanguage->currentText()).data();
+ if ( lang == i18n("Default") )
+ m_docAutoFormat->configAutoFormatLanguage(QString::null);
+ else
+ m_docAutoFormat->configAutoFormatLanguage(lang);
+
+ // Save to config file
+ m_docAutoFormat->saveConfig();
+ return true;
+}
+
+void KoAutoFormatDia::slotOk()
+{
+ if (applyConfig())
+ {
+ KDialogBase::slotOk();
+ }
+}
+
+void KoAutoFormatDia::slotCancel()
+{
+ //force to reload
+ if ( autocorrectionEntryChanged )
+ {
+ m_docAutoFormat->configAutoFormatLanguage( initialLanguage);
+ m_docAutoFormat->readConfig( true );
+ }
+ KDialogBase::slotCancel();
+}
+
+void KoAutoFormatDia::chooseDoubleQuote1()
+{
+ QString f = font().family();
+ QChar c = oDoubleBegin;
+ if ( KoCharSelectDia::selectChar( f, c, false ) )
+ {
+ pbDoubleQuote1->setText( c );
+ }
+
+}
+
+void KoAutoFormatDia::chooseDoubleQuote2()
+{
+ QString f = font().family();
+ QChar c = oDoubleEnd;
+ if ( KoCharSelectDia::selectChar( f, c, false ) )
+ {
+ pbDoubleQuote2->setText( c );
+ }
+}
+
+
+void KoAutoFormatDia::defaultDoubleQuote()
+{
+ pbDoubleQuote1->setText(m_docAutoFormat->getDefaultTypographicDoubleQuotes().begin);
+ pbDoubleQuote2->setText(m_docAutoFormat->getDefaultTypographicDoubleQuotes().end);
+}
+
+void KoAutoFormatDia::chooseSimpleQuote1()
+{
+ QString f = font().family();
+ QChar c = oSimpleBegin;
+ if ( KoCharSelectDia::selectChar( f, c, false ) )
+ {
+ pbSimpleQuote1->setText( c );
+ }
+}
+
+void KoAutoFormatDia::chooseSimpleQuote2()
+{
+ QString f = font().family();
+ QChar c = oSimpleEnd;
+ if ( KoCharSelectDia::selectChar( f, c, false ) )
+ {
+ pbSimpleQuote2->setText( c );
+ }
+}
+
+void KoAutoFormatDia::defaultSimpleQuote()
+{
+
+ pbSimpleQuote1->setText(m_docAutoFormat->getDefaultTypographicSimpleQuotes().begin);
+ pbSimpleQuote2->setText(m_docAutoFormat->getDefaultTypographicSimpleQuotes().end);
+}
+
+
+void KoAutoFormatDia::chooseBulletStyle()
+{
+ QString f = font().family();
+ QChar c = bulletStyle;
+ if ( KoCharSelectDia::selectChar( f, c, false ) )
+ {
+ pbBulletStyle->setText( c );
+ }
+}
+
+void KoAutoFormatDia::defaultBulletStyle()
+{
+ pbBulletStyle->setText( "" );
+}
+
+void KoAutoFormatDia::slotChangeStateSimple(bool b)
+{
+ pbSimpleQuote1->setEnabled(b);
+ pbSimpleQuote2->setEnabled(b);
+ pbSimpleDefault->setEnabled(b);
+}
+
+void KoAutoFormatDia::slotChangeStateDouble(bool b)
+{
+ pbDoubleQuote1->setEnabled(b);
+ pbDoubleQuote2->setEnabled(b);
+ pbDoubleDefault->setEnabled(b);
+}
+
+#include "KoAutoFormatDia.moc"
diff --git a/lib/kotext/KoAutoFormatDia.h b/lib/kotext/KoAutoFormatDia.h
new file mode 100644
index 00000000..9b1f92c5
--- /dev/null
+++ b/lib/kotext/KoAutoFormatDia.h
@@ -0,0 +1,174 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+ 2001 Sven Leiber <s.leiber@web.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef koautoformatdia_h
+#define koautoformatdia_h
+
+#include <kdialogbase.h>
+#include <qlineedit.h>
+#include <KoAutoFormat.h>
+class QCheckBox;
+class KCharSelect;
+class QComboBox;
+
+
+/**
+ *
+ */
+class KoAutoFormatLineEdit : public QLineEdit
+{
+ Q_OBJECT
+public:
+ KoAutoFormatLineEdit ( QWidget * parent, const char * name=0 );
+
+protected:
+ virtual void keyPressEvent ( QKeyEvent * );
+ signals:
+ void keyReturnPressed();
+};
+
+/******************************************************************/
+/* Class: KoAutoFormatExceptionWidget */
+/******************************************************************/
+
+class KoAutoFormatExceptionWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ KoAutoFormatExceptionWidget(QWidget *_parent, const QString &name,const QStringList &_list, bool _autoInclude, bool _abbreviation=false);
+
+ void setListException( const QStringList &list);
+ QStringList getListException(){return m_listException;}
+ bool autoInclude();
+ void setAutoInclude( bool b );
+protected slots:
+ void slotAddException();
+ void slotRemoveException();
+ void textChanged ( const QString & );
+ void slotExceptionListSelected();
+ private:
+ QListBox *exceptionList;
+ KoAutoFormatLineEdit *exceptionLine;
+ QPushButton *pbAddException,*pbRemoveException;
+ QCheckBox *cbAutoInclude;
+ QStringList m_listException;
+ bool m_bAbbreviation;
+};
+
+/******************************************************************/
+/* Class: KoAutoFormatDia */
+/******************************************************************/
+
+class KOTEXT_EXPORT KoAutoFormatDia : public KDialogBase
+{
+ Q_OBJECT
+
+public:
+ KoAutoFormatDia( QWidget *parent, const char *name, KoAutoFormat * autoFormat );
+ ~KoAutoFormatDia();
+ void addEntryList(const QString &key, KoAutoFormatEntry *_autoEntry);
+ void editEntryList(const QString &key,const QString &newFindString, KoAutoFormatEntry *_autoEntry);
+protected:
+ bool applyConfig();
+ void setupTab1();
+ void setupTab2();
+ void setupTab3();
+ void setupTab4();
+
+ void refreshEntryList();
+
+ void initTab1();
+ void initTab2();
+ void initTab3();
+ void initTab4();
+
+ typedef QMap<QString, QString> KoExceptionLanguageName;
+ KoExceptionLanguageName exceptionLanguageName;
+
+ QWidget *tab1;
+ QWidget *tab2;
+ QWidget *tab3;
+ QWidget *tab4;
+
+ QComboBox *autoFormatLanguage;
+
+ QCheckBox *cbTypographicSimpleQuotes, *cbTypographicDoubleQuotes,*cbUpperCase, *cbUpperUpper, *cbDetectUrl,
+ *cbBackgroundSpellCheck, *cbAdvancedAutoCorrection,*cbIgnoreDoubleSpace , *cbRemoveSpaceBeginEndLine, *cbUseBulletStyle, *cbAutoChangeFormat, *cbAutoReplaceNumber, *cbUseNumberStyle, *cbAutoSuperScript, *cbAutoCorrectionWithFormat, *cbCapitalizeDaysName;
+ QPushButton *pbDoubleQuote1, *pbDoubleQuote2, /**pbEdit,*/ *pbRemove, *pbAdd, *pbDoubleDefault,
+ *pbSpecialChar1, *pbSpecialChar2, *pbBulletStyle, *pbDefaultBulletStyle;
+
+ QPushButton *pbSimpleQuote1, *pbSimpleQuote2, *pbSimpleDefault;
+ QPushButton *pbChangeFormat, *pbClearFormat;
+ KCharSelect *charselect;
+ KoAutoFormatLineEdit *m_find, *m_replace;
+ KListView *m_pListView;
+
+ QChar oSimpleBegin, oSimpleEnd;
+ QChar oDoubleBegin, oDoubleEnd;
+
+ QChar bulletStyle;
+ KoAutoFormat m_autoFormat; // The copy we're working on
+ KoAutoFormat * m_docAutoFormat; // Pointer to the real one (in KWDocument)
+
+ KoAutoFormatExceptionWidget *abbreviation;
+ KoAutoFormatExceptionWidget *twoUpperLetter;
+
+ KoAutoFormatEntry *newEntry;
+
+ QString initialLanguage;
+ bool noSignal;
+ bool changeLanguage;
+
+ bool autocorrectionEntryChanged;
+protected slots:
+ virtual void slotOk();
+ virtual void slotCancel();
+
+ void slotBulletStyleToggled( bool );
+ void slotItemRenamed(QListViewItem * item, const QString & newText, int column);
+ void slotRemoveEntry();
+ void slotEditEntry();
+ void slotfind( const QString & );
+ void slotfind2( const QString & );
+ void chooseSpecialChar1();
+ void chooseSpecialChar2();
+ void chooseDoubleQuote1();
+ void chooseDoubleQuote2();
+ void defaultDoubleQuote();
+
+ void chooseSimpleQuote1();
+ void chooseSimpleQuote2();
+ void defaultSimpleQuote();
+
+ void slotChangeStateSimple(bool);
+ void slotChangeStateDouble(bool);
+
+ void slotAddEntry();
+ void chooseBulletStyle();
+ void defaultBulletStyle();
+ void slotChangeTextFormatEntry();
+ void slotResetConf();
+ void changeAutoformatLanguage(const QString & );
+ void slotClearTextFormatEntry();
+ void slotChangeAdvancedAutoCorrection();
+};
+
+#endif
diff --git a/lib/kotext/KoBgSpellCheck.cpp b/lib/kotext/KoBgSpellCheck.cpp
new file mode 100644
index 00000000..9dd0b9b9
--- /dev/null
+++ b/lib/kotext/KoBgSpellCheck.cpp
@@ -0,0 +1,321 @@
+/* This file is part of the KDE project
+ Copyright (C) 2004 Zack Rusin <zack@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "KoBgSpellCheck.h"
+#include "KoBgSpellCheck.moc"
+#include "KoTextParag.h"
+
+#include "KoSpell.h"
+
+#include "KoTextObject.h"
+#include "KoTextDocument.h"
+
+
+#include <kspell2/backgroundchecker.h>
+#include <kspell2/broker.h>
+#include <kspell2/dictionary.h>
+#include <kspell2/settings.h>
+#include <kspell2/filter.h>
+using namespace KSpell2;
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kdeversion.h>
+#include <qtimer.h>
+#include <qptrdict.h>
+
+// #define DEBUG_BGSPELLCHECKING
+
+class KoBgSpellCheck::Private
+{
+public:
+ int marked;
+ KoSpell *backSpeller;
+ QPtrDict<KoTextParag> paragCache;
+ bool startupChecking;
+ KoTextParag* intraWordParag;
+ int intraWordPosition;
+};
+
+static const int delayAfterMarked = 10;
+
+KoBgSpellCheck::KoBgSpellCheck( const Broker::Ptr& broker, QObject *parent,
+ const char *name )
+ : QObject( parent, name )
+{
+#ifdef DEBUG_BGSPELLCHECKING
+ kdDebug(32500) << "KoBgSpellCheck::KoBgSpellCheck " << this << endl;
+#endif
+ d = new Private;
+ d->startupChecking = false;
+ d->marked = 0;
+ d->intraWordParag = 0;
+ d->intraWordPosition = 0;
+ d->backSpeller = new KoSpell( broker, this, "KoSpell" );
+
+ connect( d->backSpeller, SIGNAL(misspelling(const QString&, int)),
+ SLOT(spellCheckerMisspelling(const QString &, int )) );
+ connect( d->backSpeller, SIGNAL(done()),
+ SLOT(spellCheckerDone()) );
+ connect( d->backSpeller, SIGNAL(aboutToFeedText()),
+ SLOT(slotClearPara()) );
+}
+
+KoBgSpellCheck::~KoBgSpellCheck()
+{
+ delete d; d = 0;
+}
+
+void KoBgSpellCheck::registerNewTextObject( KoTextObject *obj )
+{
+ Q_ASSERT( obj );
+
+ connect( obj, SIGNAL(paragraphCreated(KoTextParag*)),
+ SLOT(slotParagraphCreated(KoTextParag*)) );
+ connect( obj, SIGNAL(paragraphModified(KoTextParag*, int, int, int)),
+ SLOT(slotParagraphModified(KoTextParag*, int, int, int)) );
+ connect( obj, SIGNAL(paragraphDeleted(KoTextParag*)),
+ SLOT(slotParagraphDeleted(KoTextParag*)) );
+}
+
+void KoBgSpellCheck::setEnabled( bool b )
+{
+ d->backSpeller->settings()->setBackgroundCheckerEnabled( b );
+ if ( b )
+ start();
+ else
+ stop();
+}
+
+bool KoBgSpellCheck::enabled() const
+{
+ return d->backSpeller->settings()->backgroundCheckerEnabled();
+}
+
+void KoBgSpellCheck::start()
+{
+ if ( !enabled() )
+ return;
+
+ d->startupChecking = true;
+ d->marked = 0;
+ KoTextIterator *itr = createWholeDocIterator();
+ d->backSpeller->check( itr );
+ d->backSpeller->start();
+}
+
+void KoBgSpellCheck::spellCheckerMisspelling( const QString &old, int pos )
+{
+ KoTextParag* parag = d->backSpeller->currentParag();
+#ifdef DEBUG_BGSPELLCHECKING
+ kdDebug(32500) << "KoBgSpellCheck::spellCheckerMisspelling parag=" << parag
+ << " (id=" << parag->paragId() << ", length="
+ << parag->length() << ") pos=" << pos << " length="
+ << old.length() << endl;
+#endif
+ markWord( parag, pos, old.length(), true );
+ // Repaint immediately, since the checking is timer-based (slow), it looks
+ // slow (chunky) if we only repaint once a paragraph is completely done.
+ parag->document()->emitRepaintChanged();
+
+ if ( d->startupChecking && d->marked > delayAfterMarked ) {
+ d->marked = 0;
+ QTimer::singleShot( 1000, this, SLOT(checkerContinue()) );
+ } else {
+ if ( d->startupChecking )
+ ++d->marked;
+ checkerContinue();
+ }
+}
+
+void KoBgSpellCheck::markWord( KoTextParag* parag, int pos, int length, bool misspelled )
+{
+ if ( pos >= parag->length() ) {
+ kdDebug(32500) << "markWord: " << pos << " is out of parag (length=" << parag->length() << ")" << endl;
+ return;
+ }
+ if ( misspelled && parag == d->intraWordParag &&
+ d->intraWordPosition >= pos &&
+ d->intraWordPosition < pos+length ) {
+#ifdef DEBUG_BGSPELLCHECKING
+ kdDebug(32500) << "markWord: " << parag << " " << pos << " to " << pos+length << " - word being edited" << endl;
+#endif
+ return; // not yet
+ }
+
+ KoTextStringChar *ch = parag->at( pos );
+ KoTextFormat format( *ch->format() );
+ format.setMisspelled( misspelled );
+#ifdef DEBUG_BGSPELLCHECKING
+ kdDebug(32500) << "markWord: changing mark from " << pos << " length=" << length << " misspelled=" << misspelled << endl;
+#endif
+ parag->setFormat( pos, length, &format, true, KoTextFormat::Misspelled );
+ parag->setChanged( true );
+ // don't repaint here, in the slotParagraphModified case we want to repaint only once at the end
+}
+
+void KoBgSpellCheck::checkerContinue()
+{
+ if(enabled())
+ d->backSpeller->continueChecking();
+}
+
+void KoBgSpellCheck::spellCheckerDone()
+{
+ d->startupChecking = false;
+
+ if ( d->paragCache.isEmpty() )
+ return;
+
+ QPtrDictIterator<KoTextParag> itr( d->paragCache );
+ KoTextParag *parag = d->paragCache.take( itr.currentKey() );
+#ifdef DEBUG_BGSPELLCHECKING
+ kdDebug(32500) << "spellCheckerDone : " << parag << ", cache = "<< d->paragCache.count() <<endl;
+#endif
+ d->backSpeller->check( parag );
+}
+
+void KoBgSpellCheck::stop()
+{
+#ifdef DEBUG_BGSPELLCHECKING
+ kdDebug(32500) << "KoBgSpellCheck::stopSpellChecking" << endl;
+#endif
+ d->backSpeller->stop();
+}
+
+void KoBgSpellCheck::slotParagraphCreated( KoTextParag* parag )
+{
+ parag->string()->setNeedsSpellCheck( true );
+ if ( !enabled() )
+ return;
+ if ( !d->backSpeller->check( parag ) ) {
+ d->paragCache.insert( parag, parag );
+ }
+}
+
+void KoBgSpellCheck::slotParagraphModified( KoTextParag* parag, int /*ParagModifyType*/,
+ int pos, int length )
+{
+ parag->string()->setNeedsSpellCheck( true );
+ if ( !enabled() )
+ return;
+
+ if ( d->backSpeller->checking() ) {
+ d->paragCache.insert( parag, parag );
+ return;
+ }
+#ifdef DEBUG_BGSPELLCHECKING
+ kdDebug(32500) << "Para modified " << parag << " pos = "<<pos<<", length = "<< length <<endl;
+#endif
+
+#if KDE_VERSION > KDE_MAKE_VERSION(3,3,0)
+ if ( length < 10 ) {
+ QString str = parag->string()->stringToSpellCheck();
+ /// ##### do we really need to create a Filter every time?
+ Filter filter;
+ filter.setBuffer( str );
+ // pos - 1 wasn't enough for the case a splitting a word into two misspelled halves
+ filter.setCurrentPosition( QMAX( 0, pos - 2 ) );
+ int curPos = filter.currentPosition(); // Filter adjusted it by going back to the last word
+ //kdDebug() << "str='" << str << "' set position " << QMAX(0, pos-2) << " got back curPos=" << curPos << endl;
+ filter.setSettings( d->backSpeller->settings() );
+
+ // Tricky: KSpell2::Filter::nextWord's behavior makes the for() loop skip ignored words,
+ // so it doesn't mark them as OK... So we need to clear the marks everywhere first.
+ // To avoid flickering the repainting is only done once, after checking the parag.
+ markWord( parag, curPos, parag->length() - curPos, false );
+
+ for ( Word w = filter.nextWord(); !w.end; w = filter.nextWord() ) {
+ bool misspelling = !d->backSpeller->checkWord( w.word );
+ //kdDebug()<<"Word = \""<< w.word<< "\" , misspelled = "<<misspelling<<endl;
+ markWord( parag, w.start, w.word.length(), misspelling );
+ }
+ if ( parag->hasChanged() ) // always true currently
+ parag->document()->emitRepaintChanged();
+#else
+ if ( length < 3 ) {
+ QString word;
+ int start;
+ bool misspelled = !d->backSpeller->checkWordInParagraph( parag, pos,
+ word, start );
+ markWord( parag, start, word.length(), misspelled );
+ parag->document()->emitRepaintChanged();
+#endif
+ } else
+ {
+ d->backSpeller->check( parag );
+ }
+}
+
+void KoBgSpellCheck::slotParagraphDeleted( KoTextParag* parag )
+{
+ d->paragCache.take( parag );
+ if ( parag == d->intraWordParag )
+ d->intraWordParag = 0;
+
+ // don't do it here, let KoTextIterator do that after adjusting itself better...
+ //if ( parag == d->backSpeller->currentParag() )
+ // d->backSpeller->slotCurrentParagraphDeleted();
+}
+
+void KoBgSpellCheck::slotClearPara()
+{
+ KoTextParag *parag = d->backSpeller->currentParag();
+
+ // We remove any misspelled format from the paragraph
+ // - otherwise we'd never notice words being ok again :)
+ // (e.g. due to adding a word to the ignore list, not due to editing)
+ //
+ // TODO: do this all only if there was a format with 'misspelled' in the paragraph,
+ // to minimize repaints
+ KoTextStringChar *ch = parag->at( 0 );
+ KoTextFormat format( *ch->format() );
+ format.setMisspelled( false );
+#ifdef DEBUG_BGSPELLCHECKING
+ kdDebug(32500) << "clearPara: resetting mark on paragraph " << parag->paragId() << endl;
+#endif
+ parag->setFormat( 0, parag->length()-1, &format, true,
+ KoTextFormat::Misspelled );
+ parag->setChanged( true );
+ parag->document()->emitRepaintChanged();
+}
+
+KSpell2::Settings * KoBgSpellCheck::settings() const
+{
+ return d->backSpeller->settings();
+}
+
+void KoBgSpellCheck::setIntraWordEditing( KoTextParag* parag, int index )
+{
+ KoTextParag* oldIntraWordParag = d->intraWordParag;
+ int oldIntraWordPosition = d->intraWordPosition;
+
+ d->intraWordParag = parag;
+ d->intraWordPosition = index;
+
+ if ( oldIntraWordParag && !parag ) {
+ // When typing a letter into an existing word and then going somewhere else,
+ // we need to re-check that word - after moving d->intra* out of the way of course.
+ slotParagraphModified( oldIntraWordParag, 0 /*unused*/, oldIntraWordPosition, 1 );
+ }
+}
diff --git a/lib/kotext/KoBgSpellCheck.h b/lib/kotext/KoBgSpellCheck.h
new file mode 100644
index 00000000..dadb8b5d
--- /dev/null
+++ b/lib/kotext/KoBgSpellCheck.h
@@ -0,0 +1,79 @@
+/* This file is part of the KDE project
+ Copyright (C) 2004 Zack Rusin <zack@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOBGSPELLCHECK_H
+#define KOBGSPELLCHECK_H
+
+#include <kspell2/broker.h>
+#include <qobject.h>
+#include <qstringlist.h>
+#include <koffice_export.h>
+class KoTextObject;
+class KoDocument;
+class KoTextParag;
+class KoTextIterator;
+
+class KOTEXT_EXPORT KoBgSpellCheck : public QObject
+{
+ Q_OBJECT
+public:
+ KoBgSpellCheck( const KSpell2::Broker::Ptr& broker, QObject *parent =0,
+ const char *name =0 );
+ virtual ~KoBgSpellCheck();
+
+ void registerNewTextObject( KoTextObject *object );
+
+ virtual KoTextIterator *createWholeDocIterator() const=0;
+
+ bool enabled() const;
+
+ /**
+ * Returns the Settings object used by the broker.
+ */
+ KSpell2::Settings *settings() const;
+
+ /**
+ * Tell KoBgSpellCheck to avoid spell-checking the word around this position yet,
+ * while the user is editing it
+ */
+ void setIntraWordEditing( KoTextParag* parag, int index );
+
+public slots:
+ void start();
+ void stop();
+ void setEnabled( bool b );
+
+protected slots:
+ void spellCheckerMisspelling(const QString &, int );
+ void spellCheckerDone();
+ void checkerContinue();
+
+ void slotParagraphCreated( KoTextParag* parag );
+ void slotParagraphModified( KoTextParag* parag, int /*ParagModifyType*/, int pos, int length );
+ void slotParagraphDeleted( KoTextParag* parag );
+
+ void slotClearPara();
+
+protected:
+ void markWord( KoTextParag* parag, int pos, int length, bool misspelled );
+private:
+ class Private;
+ Private *d;
+};
+#endif
diff --git a/lib/kotext/KoBorder.cpp b/lib/kotext/KoBorder.cpp
new file mode 100644
index 00000000..01cfbea0
--- /dev/null
+++ b/lib/kotext/KoBorder.cpp
@@ -0,0 +1,318 @@
+/* This file is part of the KDE project
+ Copyright (C) 2000, 2001 Thomas Zander <zander@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoBorder.h"
+#include <qdom.h>
+#include <kdebug.h>
+#include "KoZoomHandler.h"
+#include "KoTextFormat.h"
+#include "KoRichText.h" // for KoTextFormat
+#include "KoTextParag.h"
+#include <float.h>
+
+static const struct BorderStyle {
+ QPen::PenStyle penStyle;
+ QCString oasisName;
+ QCString uiStringStyle;
+} s_borderStyles[] = {
+ { QPen::SolidLine, "solid", "_________" }, // SOLID
+ { QPen::DashLine, "dashed", "___ ___ __" }, // DASH
+ { QPen::DotLine, "dotted", "_ _ _ _ _ _" }, // DOT
+ { QPen::DashDotLine, "dot-dash", "___ _ ___ _" }, // DASH_DOT
+ { QPen::DashDotDotLine, "dot-dot-dash", "___ _ _ ___" }, // DASH_DOT_DOT
+ { QPen::SolidLine, "double", "===========" } // DOUBLE_LINE
+};
+
+KoBorder::KoBorder()
+ : color(), m_style( SOLID )
+{
+ setPenWidth( 1 );
+}
+
+KoBorder::KoBorder( const QColor & c, BorderStyle s, double width )
+ : color( c ), m_style( s )
+{
+ setPenWidth( width );
+}
+
+bool KoBorder::operator==( const KoBorder _brd ) const {
+ return ( m_style == _brd.m_style && color == _brd.color && ptPenWidth == _brd.ptPenWidth );
+}
+
+bool KoBorder::operator!=( const KoBorder _brd ) const {
+ return ( m_style != _brd.m_style || color != _brd.color || ptPenWidth != _brd.ptPenWidth );
+}
+
+void KoBorder::setStyle(BorderStyle _style)
+{
+ m_style = _style;
+ setPenWidth( ptPenWidth );
+}
+
+void KoBorder::setPenWidth(double _w)
+{
+ ptPenWidth = _w;
+ if ( m_style == KoBorder::DOUBLE_LINE && _w > 0 )
+ ptWidth = 2 * ptPenWidth + 1;
+ else
+ ptWidth = _w;
+}
+
+QPen KoBorder::borderPen( const KoBorder & _brd, int width, QColor defaultColor )
+{
+ QPen pen( _brd.color, width );
+ if ( !_brd.color.isValid() )
+ pen.setColor( defaultColor );
+
+ pen.setStyle( s_borderStyles[ _brd.m_style ].penStyle );
+
+ return pen;
+}
+
+// KOffice-1.3 file format (deprecated)
+KoBorder KoBorder::loadBorder( const QDomElement & elem )
+{
+ KoBorder bd;
+ if ( elem.hasAttribute("red") )
+ {
+ int r = elem.attribute("red").toInt();
+ int g = elem.attribute("green").toInt();
+ int b = elem.attribute("blue").toInt();
+ bd.color.setRgb( r, g, b );
+ }
+ bd.m_style = static_cast<BorderStyle>( elem.attribute("style").toInt() );
+ bd.setPenWidth( elem.attribute("width").toDouble() );
+ return bd;
+}
+
+void KoBorder::loadFoBorder( const QString& border )
+{
+ //string like "0.088cm solid #800000"
+
+ if (border.isEmpty() || border=="none" || border=="hidden") { // in fact no border
+ setPenWidth( 0 );
+ return;
+ }
+
+ // ## isn't it faster to use QStringList::split than parse it 3 times?
+ QString _width = border.section(' ', 0, 0);
+ QCString _style = border.section(' ', 1, 1).latin1();
+ QString _color = border.section(' ', 2, 2);
+
+ //TODO: let the user choose a more precise border width (in the current unit)
+ double const penWidth = KoUnit::parseValue( _width, 1.0 );
+ //kdDebug() << "penWidth:" << penWidth << endl;
+ if ( penWidth < 1.5 )
+ setPenWidth( 1.0 );
+ else if ( penWidth < 2.5 )
+ setPenWidth( 2.0 );
+ else if ( penWidth < 3.5 )
+ setPenWidth( 3.0 );
+ else if ( penWidth < 4.5 )
+ setPenWidth( 4.0 );
+ else if ( penWidth < 5.5 )
+ setPenWidth( 5.0 );
+ else if ( penWidth < 6.5 )
+ setPenWidth( 6.0 );
+ else if ( penWidth < 7.5 )
+ setPenWidth( 7.0 );
+ else if ( penWidth < 8.5 )
+ setPenWidth( 8.0 );
+ else if ( penWidth < 9.5 )
+ setPenWidth( 9.0 );
+ else
+ setPenWidth( 10.0 );
+
+ m_style = SOLID;
+ for ( uint i = 0; i < sizeof( s_borderStyles ) / sizeof *s_borderStyles; ++i ) {
+ if ( _style == s_borderStyles[i].oasisName )
+ m_style = static_cast<BorderStyle>( i );
+ }
+
+ if ( _color.isEmpty() )
+ color = QColor();
+ else
+ color.setNamedColor( _color );
+}
+
+QString KoBorder::saveFoBorder() const
+{
+ if ( QABS( ptPenWidth ) < 1E-10 ) // i.e. ptPenWidth == 0
+ return "none";
+ //string like "2pt solid #800000"
+ QString str = QString::number( ptPenWidth, 'g', DBL_DIG );
+ str += "pt ";
+ str += s_borderStyles[ m_style ].oasisName;
+ if ( color.isValid() ) {
+ str += ' ';
+ str += color.name();
+ }
+ return str;
+}
+
+// KOffice-1.3 file format (deprecated)
+void KoBorder::save( QDomElement & elem ) const
+{
+ if (color.isValid()) {
+ elem.setAttribute("red", color.red());
+ elem.setAttribute("green", color.green());
+ elem.setAttribute("blue", color.blue());
+ }
+ elem.setAttribute("style", static_cast<int>( m_style ));
+ elem.setAttribute("width", ptPenWidth);
+}
+
+KoBorder::BorderStyle KoBorder::getStyle( const QString &style )
+{
+ for ( uint i = 0; i < sizeof( s_borderStyles ) / sizeof *s_borderStyles; ++i ) {
+ if ( style == s_borderStyles[i].uiStringStyle.data() )
+ return static_cast<BorderStyle>( i );
+ }
+ // default
+ return KoBorder::SOLID;
+}
+
+QString KoBorder::getStyle( const BorderStyle &style )
+{
+ return s_borderStyles[style].uiStringStyle;
+}
+
+int KoBorder::zoomWidthX( double ptWidth, KoZoomHandler * zoomHandler, int minborder )
+{
+ // If a border was set, then zoom it and apply a minimum of 1, so that it's always visible.
+ // If no border was set, apply minborder ( 0 for paragraphs, 1 for frames )
+ return ptWidth > 0 ? QMAX( 1, zoomHandler->zoomItX( ptWidth ) /*applies qRound*/ ) : minborder;
+}
+
+int KoBorder::zoomWidthY( double ptWidth, KoZoomHandler * zoomHandler, int minborder )
+{
+ // If a border was set, then zoom it and apply a minimum of 1, so that it's always visible.
+ // If no border was set, apply minborder ( 0 for paragraphs, 1 for frames )
+ return ptWidth > 0 ? QMAX( 1, zoomHandler->zoomItY( ptWidth ) /*applies qRound*/ ) : minborder;
+}
+
+void KoBorder::drawBorders( QPainter& painter, KoZoomHandler * zoomHandler, const QRect& rect, const KoBorder& leftBorder, const KoBorder& rightBorder, const KoBorder& topBorder, const KoBorder& bottomBorder, int minborder, const QPen& defaultPen, bool drawTopBorder /* = true */, bool drawBottomBorder /* = true */)
+{
+ int topBorderWidth = zoomWidthY( topBorder.width(), zoomHandler, minborder );
+ int bottomBorderWidth = zoomWidthY( bottomBorder.width(), zoomHandler, minborder );
+ int leftBorderWidth = zoomWidthX( leftBorder.width(), zoomHandler, minborder );
+ int rightBorderWidth = zoomWidthX( rightBorder.width(), zoomHandler, minborder );
+
+ int topBorderPenWidth = zoomWidthY( topBorder.penWidth(), zoomHandler, minborder );
+ int bottomBorderPenWidth = zoomWidthY( bottomBorder.penWidth(), zoomHandler, minborder );
+ int leftBorderPenWidth = zoomWidthX( leftBorder.penWidth(), zoomHandler, minborder );
+ int rightBorderPenWidth = zoomWidthX( rightBorder.penWidth(), zoomHandler, minborder );
+
+ // Wide pen don't draw the last pixel, so add one to the bottom and right coords
+ int lastPixelAdj = 1;
+
+ //kdDebug(32500) << "KoBorder::drawBorders widths: top=" << topBorderWidth << " bottom=" << bottomBorderWidth
+ // << " left=" << leftBorderWidth << " right=" << rightBorderWidth << endl;
+
+ //kdDebug(32500) << " penWidths: top=" << topBorderPenWidth << " bottom=" << bottomBorderPenWidth
+ // << " left=" << leftBorderPenWidth << " right=" << rightBorderPenWidth << endl;
+
+ QColor defaultColor = KoTextFormat::defaultTextColor( &painter );
+
+ if ( topBorderWidth > 0 && drawTopBorder )
+ {
+ if ( topBorder.penWidth() > 0 )
+ painter.setPen( KoBorder::borderPen( topBorder, topBorderPenWidth, defaultColor ) );
+ else
+ painter.setPen( defaultPen );
+ int y = rect.top() - topBorderWidth + topBorderPenWidth/2;
+ if ( topBorder.m_style==KoBorder::DOUBLE_LINE)
+ {
+ painter.drawLine( rect.left()-leftBorderWidth, y, rect.right()+2*(rightBorderPenWidth+lastPixelAdj), y );
+ y += topBorderPenWidth + 1;
+ painter.drawLine( rect.left()-leftBorderPenWidth, y, rect.right()+rightBorderPenWidth+lastPixelAdj, y );
+ }
+ else
+ {
+ painter.drawLine( rect.left()-leftBorderWidth, y, rect.right()+rightBorderWidth+lastPixelAdj, y );
+ }
+ }
+ if ( bottomBorderWidth > 0 && drawBottomBorder )
+ {
+ if ( bottomBorder.penWidth() > 0 )
+ painter.setPen( KoBorder::borderPen( bottomBorder, bottomBorderPenWidth, defaultColor ) );
+ else
+ painter.setPen( defaultPen );
+ //kdDebug(32500) << "bottomBorderWidth=" << bottomBorderWidth << " bottomBorderWidth/2=" << (int)bottomBorderWidth/2 << endl;
+ int y = rect.bottom() + bottomBorderPenWidth/2 + 1;
+ //kdDebug(32500) << " -> bottom=" << rect.bottom() << " y=" << y << endl;
+ if ( bottomBorder.m_style==KoBorder::DOUBLE_LINE)
+ {
+ painter.drawLine( rect.left()-leftBorderPenWidth, y, rect.right()+rightBorderPenWidth+lastPixelAdj, y );
+ y += bottomBorderPenWidth + 1;
+ painter.drawLine( rect.left()-leftBorderWidth, y, rect.right()+2*(rightBorderPenWidth+lastPixelAdj), y );
+ }
+ else
+ {
+ painter.drawLine( rect.left()-leftBorderWidth, y, rect.right()+rightBorderWidth+lastPixelAdj, y );
+ }
+ }
+ if ( leftBorderWidth > 0 )
+ {
+ if ( leftBorder.penWidth() > 0 )
+ painter.setPen( KoBorder::borderPen( leftBorder, leftBorderPenWidth, defaultColor ) );
+ else
+ painter.setPen( defaultPen );
+ int x = rect.left() - leftBorderWidth + leftBorderPenWidth/2;
+ if ( leftBorder.m_style==KoBorder::DOUBLE_LINE)
+ {
+ painter.drawLine( x, rect.top()-topBorderWidth, x, rect.bottom()+2*(bottomBorderPenWidth+lastPixelAdj) );
+ x += leftBorderPenWidth + 1;
+ painter.drawLine( x, rect.top()-topBorderPenWidth, x, rect.bottom()+bottomBorderPenWidth+lastPixelAdj );
+ }
+ else
+ {
+ int yTop = rect.top() - topBorderWidth;
+ int yBottom = rect.bottom() + bottomBorderWidth;
+ /*kdDebug(32500) << " pen=" << painter.pen() << " rect=" << rect << " topBorderWidth=" << topBorderWidth
+ << " painting from " << x << "," << yTop
+ << " to " << x << "," << yBottom << endl;*/
+ painter.drawLine( x, yTop, x, yBottom+lastPixelAdj );
+ }
+ }
+ if ( rightBorderWidth > 0 )
+ {
+ if ( rightBorder.penWidth() > 0 )
+ painter.setPen( KoBorder::borderPen( rightBorder, rightBorderPenWidth, defaultColor ) );
+ else
+ painter.setPen( defaultPen );
+ int x = rect.right() + rightBorderPenWidth/2 + 1;
+ if ( rightBorder.m_style==KoBorder::DOUBLE_LINE)
+ {
+ painter.drawLine( x, rect.top()-topBorderPenWidth, x, rect.bottom()+bottomBorderPenWidth+lastPixelAdj );
+ x += rightBorderPenWidth + 1;
+ painter.drawLine( x, rect.top()-topBorderWidth, x, rect.bottom()+2*(bottomBorderPenWidth+lastPixelAdj) );
+
+ }
+ else
+ {
+ int yTop = rect.top()-topBorderWidth;
+ int yBottom = rect.bottom()+bottomBorderWidth+lastPixelAdj;
+ /*kdDebug(32500) << " pen=" << painter.pen() << " rect=" << rect << " topBorderWidth=" << topBorderWidth
+ << " painting from " << x << "," << yTop
+ << " to " << x << "," << yBottom << endl;*/
+ painter.drawLine( x, yTop, x, yBottom );
+ }
+ }
+}
diff --git a/lib/kotext/KoBorder.h b/lib/kotext/KoBorder.h
new file mode 100644
index 00000000..4e577ac9
--- /dev/null
+++ b/lib/kotext/KoBorder.h
@@ -0,0 +1,97 @@
+/* This file is part of the KDE project
+ Copyright (C) 2000, 2001 Thomas Zander <zander@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KoBorder_h
+#define KoBorder_h
+
+#include <qcolor.h>
+#include <qpen.h>
+#include <koffice_export.h>
+class QDomElement;
+class KoZoomHandler;
+class QPainter;
+
+/**
+ * This class represents a border - for anything, like paragraph, or frame
+ */
+class KOTEXT_EXPORT KoBorder : public Qt
+{
+ friend class KoTextCursor;
+public:
+ // Update the DTDs if you add something here!
+ enum BorderStyle {SOLID = 0, DASH = 1, DOT = 2, DASH_DOT = 3, DASH_DOT_DOT = 4, DOUBLE_LINE = 5};
+ enum BorderType { LeftBorder = 0, RightBorder, TopBorder, BottomBorder };
+
+ KoBorder();
+ KoBorder( const QColor & c, BorderStyle s, double width );
+ QColor color;
+ void setPenWidth(double _w);
+ void setStyle(BorderStyle _style);
+ // deprecated
+ BorderStyle getStyle() const {return m_style;}
+ BorderStyle style() const {return m_style;}
+ double penWidth() const{ return ptPenWidth;}
+ double width() const { return ptWidth; }
+
+ bool operator==( const KoBorder _brd ) const;
+ bool operator!=( const KoBorder _brd ) const;
+
+ // Load from XML
+ static KoBorder loadBorder( const QDomElement & elem );
+ void loadFoBorder( const QString& border );
+ // Save to XML
+ void save( QDomElement & elem ) const;
+ QString saveFoBorder() const;
+
+ // String to style enum, and vice versa, for UI.
+ static BorderStyle getStyle( const QString &style );
+ static QString getStyle( const BorderStyle &style );
+
+ // Zoom the border width. If ptWidth is 0, minborder is returned.
+ static int zoomWidthX( double ptWidth, KoZoomHandler * zoomHandler, int minborder ); // For left/right borders
+ static int zoomWidthY( double ptWidth, KoZoomHandler * zoomHandler, int minborder ); // For top/bottom borders
+
+ // Get a ready-to-use QPen for this border.
+ // defaultColor is the color to use for QColor() - either defaultTextColor() or defaultBgColor().
+ static QPen borderPen( const KoBorder & brd, int width, QColor defaultColor );
+
+ // The do-it-all method :)
+ // Draws in @p painter the 4 borders on the _outside_ of @p rect.
+ // If a border is of size 0, minborder will be applied (no border if 0, defaultPen otherwise)
+ static void drawBorders( QPainter& painter, KoZoomHandler * zoomHandler, const QRect& rect,
+ const KoBorder& left, const KoBorder& right,
+ const KoBorder& top, const KoBorder& bottom,
+ int minborder, const QPen& defaultPen, bool drawTopBorder = true , bool drawBottomBorder = true );
+private:
+ double ptWidth;
+ double ptPenWidth;
+ BorderStyle m_style;
+};
+
+/******************************
+ kdDebug support
+*******************************/
+#include <kdebug.h>
+
+inline kdbgstream operator<<( kdbgstream str, const KoBorder & b ) {
+ str << "[ color:" << b.color << " width:" << b.width() << " penWidth:" << b.penWidth() << " style:" << KoBorder::getStyle( b.getStyle() ) << "]"; return str;
+}
+inline kndbgstream operator<<( kndbgstream str, const KoBorder & ) { return str; }
+
+#endif
diff --git a/lib/kotext/KoChangeCaseDia.cpp b/lib/kotext/KoChangeCaseDia.cpp
new file mode 100644
index 00000000..3b4dcdc9
--- /dev/null
+++ b/lib/kotext/KoChangeCaseDia.cpp
@@ -0,0 +1,70 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include <klocale.h>
+
+#include <qvbox.h>
+#include <qwhatsthis.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+
+#include "KoChangeCaseDia.h"
+
+
+KoChangeCaseDia::KoChangeCaseDia( QWidget *parent, const char *name )
+ : KDialogBase( parent, name , true, "", Ok|Cancel, Ok, true )
+{
+
+ setCaption( i18n("Change Case") );
+ QVBox *page = makeVBoxMainWidget();
+
+ QButtonGroup *grp = new QButtonGroup( 1, QGroupBox::Horizontal, i18n( "Case" ),page );
+ grp->setRadioButtonExclusive( TRUE );
+ grp->layout();
+ m_upperCase=new QRadioButton( i18n("&Uppercase"), grp );
+ m_lowerCase=new QRadioButton( i18n("&Lowercase"), grp );
+
+ m_titleCase=new QRadioButton( i18n("T&itle case"), grp );
+
+ m_toggleCase=new QRadioButton( i18n("&Toggle case"), grp );
+ m_sentenceCase=new QRadioButton( i18n("Sentence case"), grp );
+ QWhatsThis::add( m_sentenceCase, i18n("Convert first letter of a sentence to uppercase."));
+
+ m_upperCase->setChecked(true);
+ grp->setRadioButtonExclusive( TRUE );
+
+}
+
+KoChangeCaseDia::TypeOfCase KoChangeCaseDia::getTypeOfCase()
+{
+ TypeOfCase type=UpperCase;
+ if( m_upperCase->isChecked())
+ type=UpperCase;
+ else if(m_lowerCase->isChecked())
+ type=LowerCase;
+ else if(m_titleCase->isChecked())
+ type=TitleCase;
+ else if( m_toggleCase->isChecked())
+ type=ToggleCase;
+ else if( m_sentenceCase->isChecked())
+ type=SentenceCase;
+ return type;
+}
+
+#include "KoChangeCaseDia.moc"
diff --git a/lib/kotext/KoChangeCaseDia.h b/lib/kotext/KoChangeCaseDia.h
new file mode 100644
index 00000000..4d14be67
--- /dev/null
+++ b/lib/kotext/KoChangeCaseDia.h
@@ -0,0 +1,46 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KoChangeCaseDia__
+#define __KoChangeCaseDia__
+
+#include <kdialogbase.h>
+#include <koffice_export.h>
+
+class QRadioButton;
+class QPushButton;
+
+class KOTEXT_EXPORT KoChangeCaseDia : public KDialogBase
+{
+ Q_OBJECT
+public:
+ KoChangeCaseDia( QWidget *parent, const char *name );
+ enum TypeOfCase { UpperCase =0, LowerCase=1, TitleCase=2, ToggleCase=3, SentenceCase=4};
+ TypeOfCase getTypeOfCase();
+
+protected:
+ QRadioButton *m_upperCase;
+ QRadioButton *m_titleCase;
+ QRadioButton *m_lowerCase;
+ QRadioButton *m_toggleCase;
+ QRadioButton *m_sentenceCase;
+
+};
+
+#endif
diff --git a/lib/kotext/KoCommentDia.cpp b/lib/kotext/KoCommentDia.cpp
new file mode 100644
index 00000000..7e0570c0
--- /dev/null
+++ b/lib/kotext/KoCommentDia.cpp
@@ -0,0 +1,73 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include <klocale.h>
+#include <qvbox.h>
+#include <qmultilineedit.h>
+#include "KoCommentDia.h"
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <kglobal.h>
+#include <qdatetime.h>
+#include <qlabel.h>
+#include <kdebug.h>
+
+KoCommentDia::KoCommentDia( QWidget *parent, const QString &_note, const QString & _authorName, const QString &_createNote, const char *name )
+ : KDialogBase( parent, name , true, "", Ok|Cancel, Ok, true )
+{
+ setCaption( i18n("Edit Comment") );
+ authorName = _authorName;
+ QVBox *page = makeVBoxMainWidget();
+ kdDebug()<<"_createNote :"<<_createNote<<endl;
+ if ( !_createNote.isEmpty() )
+ new QLabel( _createNote, page );
+
+ m_multiLine = new QMultiLineEdit( page );
+ m_multiLine->setText( _note );
+ m_multiLine->setFocus();
+ pbAddAuthorName = new QPushButton(i18n("Add Author Name"),page);
+ if ( authorName.isEmpty() )
+ pbAddAuthorName->setEnabled( false );
+ else
+ connect (pbAddAuthorName, SIGNAL(clicked ()), this , SLOT(slotAddAuthorName()));
+ connect ( m_multiLine , SIGNAL( textChanged()), this, SLOT( slotTextChanged( )));
+ slotTextChanged( );
+
+ resize( 300,100 );
+}
+
+void KoCommentDia::slotTextChanged( )
+{
+ enableButtonOK( !m_multiLine->text().isEmpty() );
+}
+
+QString KoCommentDia::commentText()
+{
+ return m_multiLine->text();
+}
+
+void KoCommentDia::slotAddAuthorName()
+{
+ QString date = KGlobal::locale()->formatDate( QDate::currentDate() );
+ QString time = KGlobal::locale()->formatTime( QTime::currentTime() );
+ QString result = QString("--------%1 ,%2, %3------\n").arg(authorName).arg(date).arg(time);
+ m_multiLine->insertLine( result, m_multiLine->numLines() );
+}
+
+#include "KoCommentDia.moc"
diff --git a/lib/kotext/KoCommentDia.h b/lib/kotext/KoCommentDia.h
new file mode 100644
index 00000000..f16c7c0a
--- /dev/null
+++ b/lib/kotext/KoCommentDia.h
@@ -0,0 +1,45 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KoCommentDia__
+#define __KoCommentDia__
+
+#include <kdialogbase.h>
+#include <koffice_export.h>
+class QPushButton;
+class QMultiLineEdit;
+
+class KOTEXT_EXPORT KoCommentDia : public KDialogBase
+{
+ Q_OBJECT
+public:
+ KoCommentDia( QWidget *parent, const QString &_note=QString::null, const QString & _authorName=QString::null, const QString &_createNote=QString::null, const char *name=0L );
+ QString commentText();
+
+private slots:
+ void slotAddAuthorName();
+ void slotTextChanged( );
+
+protected:
+ QMultiLineEdit *m_multiLine;
+ QString authorName;
+ QPushButton *pbAddAuthorName;
+};
+
+#endif
diff --git a/lib/kotext/KoCompletionBase.ui b/lib/kotext/KoCompletionBase.ui
new file mode 100644
index 00000000..7fece619
--- /dev/null
+++ b/lib/kotext/KoCompletionBase.ui
@@ -0,0 +1,370 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KoCompletionBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KoCompletionBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>462</width>
+ <height>346</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbAllowCompletion</cstring>
+ </property>
+ <property name="text">
+ <string>Enable word completion</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Toggle autocompletion on and off: if this is checked then autocompletion will be enabled.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListBox">
+ <property name="name">
+ <cstring>m_lbListCompletion</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Suggestion list for autocompletion: contains all the words that will be autocompleted.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbAddCompletionEntry</cstring>
+ </property>
+ <property name="text">
+ <string>Add...</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>By clicking this button you can add manually an individual word to the completion list.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbRemoveCompletionEntry</cstring>
+ </property>
+ <property name="text">
+ <string>Remove</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>To remove words from the completion list, select the word with the left mouse button from the list, then click this button.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>31</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbAddCompletionWord</cstring>
+ </property>
+ <property name="text">
+ <string>Automatically add new words to suggestion list</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If this option is enabled, any word equal to or longer than the "Characters needed" typed in this document will automatically be added to the list of words used by the completion.</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>completionBox</cstring>
+ </property>
+ <property name="title">
+ <string>Completion Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbShowToolTip</cstring>
+ </property>
+ <property name="text">
+ <string>Show words in tooltip</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If this option is enabled, a tool tip box will appear when you type the beginning of a word that exists in the completion list. To complete the word, press the key you set to accept suggestions in the "Key to accept suggestion" drop-down list.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QSlider" row="1" column="1">
+ <property name="name">
+ <cstring>slider2</cstring>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ <property name="pageStep">
+ <number>20</number>
+ </property>
+ <property name="value">
+ <number>100</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>Below</enum>
+ </property>
+ <property name="tickInterval">
+ <number>50</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This sets the maximum number of words in the completion list. All additional words will not be included in the list. You can select any value from 1 to 500. This option keeps the list from becoming too cumbersome.
+This option is most important when Automatically add words to completion list is enabled.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Characters needed:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>slider1</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Suggest words:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>slider2</cstring>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="2">
+ <property name="name">
+ <cstring>m_maxNbWordCompletion</cstring>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="value">
+ <number>100</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This sets the maximum number of words in the completion list. All additional words will not be included in the list. You can select any value from 1 to 500. This option keeps the list from becoming too cumbersome.
+This option is most important when Automatically add words to completion list is enabled.</string>
+ </property>
+ </widget>
+ <widget class="QSlider" row="0" column="1">
+ <property name="name">
+ <cstring>slider1</cstring>
+ </property>
+ <property name="minValue">
+ <number>5</number>
+ </property>
+ <property name="maxValue">
+ <number>100</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>Below</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Use this spinbox/slider combination to prevent automatically adding short words to the completion list. You can select any value from 5-100 and the words will need to be at least the number of characters set here to be added to the list.</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="2">
+ <property name="name">
+ <cstring>m_minWordLength</cstring>
+ </property>
+ <property name="maxValue">
+ <number>100</number>
+ </property>
+ <property name="minValue">
+ <number>5</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Use this spinbox/slider combination to prevent automatically adding short words to the completion list. You can select any value from 5-100 and the words will need to be at least the number of characters set here to be added to the list.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbAppendSpace</cstring>
+ </property>
+ <property name="text">
+ <string>Append space</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If checked, it adds a single space to the end of a word after autocompletion, this means it is not necessary to add the space manually for the next word.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Key to accept suggestion:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>m_completionKeyAction</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>m_completionKeyAction</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Set the key you want to use when an autocompleted word is suggested to you and you want to accept it. You can choose Enter, Tab, Space, End or Right.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>101</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbSaveCompletionEntry</cstring>
+ </property>
+ <property name="text">
+ <string>Make Default</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Completion is configured per document. Making this list the default will allow you to use it for new documents automatically. A dialog will appear to inform you that the list will be used for all documents from now on.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>101</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>slider1</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>m_minWordLength</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>m_minWordLength</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>slider1</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>slider2</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>m_maxNbWordCompletion</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>m_maxNbWordCompletion</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>slider2</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/lib/kotext/KoCompletionDia.cpp b/lib/kotext/KoCompletionDia.cpp
new file mode 100644
index 00000000..0f4b4dd5
--- /dev/null
+++ b/lib/kotext/KoCompletionDia.cpp
@@ -0,0 +1,201 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 Thomas Zander <zander@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoCompletionDia.h"
+#include "KoAutoFormat.h"
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kinputdialog.h>
+#include <kcompletion.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <qlayout.h>
+#include <qvbox.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+#include <qspinbox.h>
+#include <qcombobox.h>
+#include <qgroupbox.h>
+#include <qwhatsthis.h>
+
+KoCompletionDia::KoCompletionDia( QWidget *parent, const char *name, KoAutoFormat * autoFormat )
+ : KDialogBase( parent, name , true, i18n( "Completion" ), Ok|Cancel|User1,
+ Ok, true, KGuiItem( i18n( "&Reset" ), "undo" ) )
+{
+ QVBox *page = makeVBoxMainWidget();
+ m_widget = new KoCompletion(page, autoFormat);
+ m_widget->layout()->setMargin(0);
+ connect( this, SIGNAL( user1Clicked() ), m_widget, SLOT(slotResetConf()));
+ setButtonWhatsThis(Ok,i18n("This will save your options."));
+ setButtonWhatsThis(Cancel,i18n("This will abort all changes."));
+ setButtonWhatsThis(User1,i18n("This will reset to the state after you clicked on the Make Default button."));
+}
+
+void KoCompletionDia::slotOk()
+{
+ m_widget->saveSettings();
+ KDialogBase::slotOk();
+}
+
+KoCompletion::KoCompletion(QWidget *parent, KoAutoFormat *autoFormat) : KoCompletionBase(parent),
+ m_autoFormat( *autoFormat ),
+ m_docAutoFormat( autoFormat )
+{
+ connect(cbAllowCompletion, SIGNAL(toggled ( bool )), this, SLOT( changeButtonStatus()));
+ QStringList lst;
+ lst << i18n( "Enter" );
+ lst << i18n( "Tab" );
+ lst << i18n( "Space" );
+ lst << i18n( "End" );
+ lst << i18n( "Right" );
+ m_completionKeyAction->insertStringList( lst );
+
+ connect( m_lbListCompletion, SIGNAL( selected ( const QString & ) ), this, SLOT( slotCompletionWordSelected( const QString & )));
+ connect( m_lbListCompletion, SIGNAL( highlighted ( const QString & ) ), this, SLOT( slotCompletionWordSelected( const QString & )));
+
+ connect( pbAddCompletionEntry, SIGNAL( clicked() ), this, SLOT( slotAddCompletionEntry()));
+ connect( pbRemoveCompletionEntry, SIGNAL( clicked() ), this, SLOT( slotRemoveCompletionEntry()));
+ connect( pbSaveCompletionEntry, SIGNAL( clicked() ), this, SLOT( slotSaveCompletionEntry()));
+
+ slotResetConf(); // aka load config
+ changeButtonStatus();
+}
+
+void KoCompletion::changeButtonStatus() {
+ bool state = cbAllowCompletion->isChecked();
+
+ completionBox->setEnabled( state);
+ cbAddCompletionWord->setEnabled( state );
+ pbAddCompletionEntry->setEnabled( state );
+ m_lbListCompletion->setEnabled( state );
+ state = state && (m_lbListCompletion->count()!=0 && !m_lbListCompletion->currentText().isEmpty());
+ pbRemoveCompletionEntry->setEnabled( state );
+}
+
+void KoCompletion::slotResetConf() {
+ cbAllowCompletion->setChecked( m_autoFormat.getConfigCompletion());
+ cbShowToolTip->setChecked( m_autoFormat.getConfigToolTipCompletion());
+ cbAddCompletionWord->setChecked( m_autoFormat.getConfigAddCompletionWord());
+ m_lbListCompletion->clear();
+ m_listCompletion = m_docAutoFormat->listCompletion();
+ m_lbListCompletion->insertStringList( m_listCompletion );
+ m_lbListCompletion->sort();
+ if( m_listCompletion.isEmpty() || m_lbListCompletion->currentText().isEmpty())
+ pbRemoveCompletionEntry->setEnabled( false );
+ m_minWordLength->setValue ( m_docAutoFormat->getConfigMinWordLength() );
+ m_maxNbWordCompletion->setValue ( m_docAutoFormat->getConfigNbMaxCompletionWord() );
+ cbAppendSpace->setChecked( m_autoFormat.getConfigAppendSpace() );
+
+ switch( m_docAutoFormat->getConfigKeyAction() )
+ {
+ case KoAutoFormat::Enter:
+ m_completionKeyAction->setCurrentItem( 0 );
+ break;
+ case KoAutoFormat::Tab:
+ m_completionKeyAction->setCurrentItem( 1 );
+ break;
+ case KoAutoFormat::Space:
+ m_completionKeyAction->setCurrentItem( 2 );
+ break;
+ case KoAutoFormat::End:
+ m_completionKeyAction->setCurrentItem( 3 );
+ break;
+ case KoAutoFormat::Right:
+ m_completionKeyAction->setCurrentItem( 4 );
+ break;
+ default:
+ m_completionKeyAction->setCurrentItem( 0 );
+ }
+ changeButtonStatus();
+}
+
+void KoCompletion::slotAddCompletionEntry() {
+ bool ok;
+ QString const newWord = KInputDialog::getText( i18n("Add Completion Entry"), i18n("Enter entry:"), QString::null, &ok, this ).lower();
+ if ( ok )
+ {
+ if ( !m_listCompletion.contains( newWord ))
+ {
+ m_listCompletion.append( newWord );
+ m_lbListCompletion->insertItem( newWord );
+ pbRemoveCompletionEntry->setEnabled( !m_lbListCompletion->currentText().isEmpty() );
+ m_lbListCompletion->sort();
+ }
+
+ }
+}
+
+void KoCompletion::slotRemoveCompletionEntry() {
+ QString text = m_lbListCompletion->currentText();
+ if( !text.isEmpty() )
+ {
+ m_listCompletion.remove( text );
+ m_lbListCompletion->removeItem( m_lbListCompletion->currentItem () );
+ if( m_lbListCompletion->count()==0 )
+ pbRemoveCompletionEntry->setEnabled( false );
+ }
+}
+
+void KoCompletion::slotCompletionWordSelected( const QString & word) {
+ pbRemoveCompletionEntry->setEnabled( !word.isEmpty() );
+}
+
+void KoCompletion::saveSettings() {
+ m_docAutoFormat->configCompletion( cbAllowCompletion->isChecked());
+ m_docAutoFormat->configToolTipCompletion( cbShowToolTip->isChecked());
+ m_docAutoFormat->configAppendSpace( cbAppendSpace->isChecked() );
+ m_docAutoFormat->configMinWordLength( m_minWordLength->value() );
+ m_docAutoFormat->configNbMaxCompletionWord( m_maxNbWordCompletion->value () );
+ m_docAutoFormat->configAddCompletionWord( cbAddCompletionWord->isChecked());
+
+ m_docAutoFormat->getCompletion()->setItems( m_listCompletion );
+ m_docAutoFormat->updateMaxWords();
+ switch( m_completionKeyAction->currentItem() ) {
+ case 1:
+ m_docAutoFormat->configKeyCompletionAction( KoAutoFormat::Tab );
+ break;
+ case 2:
+ m_docAutoFormat->configKeyCompletionAction( KoAutoFormat::Space );
+ break;
+ case 3:
+ m_docAutoFormat->configKeyCompletionAction( KoAutoFormat::End );
+ break;
+ case 4:
+ m_docAutoFormat->configKeyCompletionAction( KoAutoFormat::Right );
+ break;
+ case 0:
+ default:
+ m_docAutoFormat->configKeyCompletionAction( KoAutoFormat::Enter );
+ }
+
+ // Save to config file
+ m_docAutoFormat->saveConfig();
+}
+
+void KoCompletion::slotSaveCompletionEntry() {
+ KConfig config("kofficerc");
+ KConfigGroupSaver cgs( &config, "Completion Word" );
+ config.writeEntry( "list", m_listCompletion );
+ config.sync();
+ KMessageBox::information( this, i18n(
+ "Completion list saved.\nIt will be used for all documents "
+ "from now on."), i18n("Completion List Saved") );
+}
+
+#include "KoCompletionDia.moc"
diff --git a/lib/kotext/KoCompletionDia.h b/lib/kotext/KoCompletionDia.h
new file mode 100644
index 00000000..7ce49b13
--- /dev/null
+++ b/lib/kotext/KoCompletionDia.h
@@ -0,0 +1,68 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 Thomas Zander <zander@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kocompletiondia_h
+#define kocompletiondia_h
+
+#include "KoCompletionBase.h"
+#include <kdialogbase.h>
+#include <KoAutoFormat.h>
+
+/**
+ * Completion configuration widget.
+ */
+class KoCompletion : public KoCompletionBase {
+ Q_OBJECT
+
+public:
+ KoCompletion(QWidget *parent, KoAutoFormat *autoFormat );
+ void saveSettings();
+
+protected slots:
+ void changeButtonStatus();
+ void slotResetConf();
+ void slotAddCompletionEntry();
+ void slotRemoveCompletionEntry();
+ void slotCompletionWordSelected( const QString & );
+ void slotSaveCompletionEntry();
+
+protected:
+ KoAutoFormat m_autoFormat; // The copy we're working on
+ KoAutoFormat * m_docAutoFormat; // Pointer to the real one (in KWDocument)
+ QStringList m_listCompletion; // The copy of the completion items - don't use m_autoFormat.getCompletion()!
+};
+
+/**
+ * Completion configuration dialog.
+ */
+class KOTEXT_EXPORT KoCompletionDia : public KDialogBase {
+ Q_OBJECT
+
+public:
+ KoCompletionDia( QWidget *parent, const char *name, KoAutoFormat * autoFormat );
+
+protected slots:
+ virtual void slotOk();
+
+protected:
+ void setup();
+
+private:
+ KoCompletion *m_widget;
+};
+#endif
diff --git a/lib/kotext/KoComplexText.cpp b/lib/kotext/KoComplexText.cpp
new file mode 100644
index 00000000..b955b332
--- /dev/null
+++ b/lib/kotext/KoComplexText.cpp
@@ -0,0 +1,1476 @@
+/****************************************************************************
+** $Id: KoComplexText.cpp 504496 2006-02-01 11:16:49Z dfaure $
+**
+** Implementation of some internal classes
+**
+** Created :
+**
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+** information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#ifndef QT_NO_COMPLEXTEXT
+#include "KoRichText.h"
+//#include "qfontdata_p.h"
+#include "qfontmetrics.h"
+#include "qrect.h"
+
+#include <stdlib.h>
+
+// -----------------------------------------------------
+
+/* a small helper class used internally to resolve Bidi embedding levels.
+ Each line of text caches the embedding level at the start of the line for faster
+ relayouting
+*/
+KoBidiContext::KoBidiContext( uchar l, QChar::Direction e, KoBidiContext *p, bool o )
+ : level(l) , override(o), dir(e)
+{
+ if ( p )
+ p->ref();
+ parent = p;
+ count = 0;
+}
+
+KoBidiContext::~KoBidiContext()
+{
+ if( parent && parent->deref() )
+ delete parent;
+}
+
+static QChar *shapeBuffer = 0;
+static int shapeBufSize = 0;
+
+/*
+ Arabic shaping obeys a number of rules according to the joining classes (see Unicode book, section on
+ arabic).
+
+ Each unicode char has a joining class (right, dual (left&right), center (joincausing) or transparent).
+ transparent joining is not encoded in QChar::joining(), but applies to all combining marks and format marks.
+
+ Right join-causing: dual + center
+ Left join-causing: dual + right + center
+
+ Rules are as follows (for a string already in visual order, as we have it here):
+
+ R1 Transparent characters do not affect joining behaviour.
+ R2 A right joining character, that has a right join-causing char on the right will get form XRight
+ (R3 A left joining character, that has a left join-causing char on the left will get form XLeft)
+ Note: the above rule is meaningless, as there are no pure left joining characters defined in Unicode
+ R4 A dual joining character, that has a left join-causing char on the left and a right join-causing char on
+ the right will get form XMedial
+ R5 A dual joining character, that has a right join causing char on the right, and no left join causing char on the left
+ will get form XRight
+ R6 A dual joining character, that has a left join causing char on the left, and no right join causing char on the right
+ will get form XLeft
+ R7 Otherwise the character will get form XIsolated
+
+ Additionally we have to do the minimal ligature support for lam-alef ligatures:
+
+ L1 Transparent characters do not affect ligature behaviour.
+ L2 Any sequence of Alef(XRight) + Lam(XMedial) will form the ligature Alef.Lam(XLeft)
+ L3 Any sequence of Alef(XRight) + Lam(XLeft) will form the ligature Alef.Lam(XIsolated)
+
+ The two functions defined in this class do shaping in visual and logical order. For logical order just replace right with
+ previous and left with next in the above rules ;-)
+*/
+
+/*
+ Two small helper functions for arabic shaping. They get the next shape causing character on either
+ side of the char in question. Implements rule R1.
+
+ leftChar() returns true if the char to the left is a left join-causing char
+ rightChar() returns true if the char to the right is a right join-causing char
+*/
+static inline const QChar *prevChar( const QString &str, int pos )
+{
+ //kdDebug() << "leftChar: pos=" << pos << endl;
+ pos--;
+ const QChar *ch = str.unicode() + pos;
+ while( pos > -1 ) {
+ if( !ch->isMark() )
+ return ch;
+ pos--;
+ ch--;
+ }
+ return &QChar::replacement;
+}
+
+static inline const QChar *nextChar( const QString &str, int pos)
+{
+ pos++;
+ int len = str.length();
+ const QChar *ch = str.unicode() + pos;
+ while( pos < len ) {
+ //kdDebug() << "rightChar: " << pos << " isLetter=" << ch.isLetter() << ", joining=" << ch.joining() << endl;
+ if( !ch->isMark() )
+ return ch;
+ // assume it's a transparent char, this might not be 100% correct
+ pos++;
+ ch++;
+ }
+ return &QChar::replacement;
+}
+
+static inline bool prevVisualCharJoins( const QString &str, int pos)
+{
+ return ( prevChar( str, pos )->joining() != QChar::OtherJoining );
+}
+
+static inline bool nextVisualCharJoins( const QString &str, int pos)
+{
+ QChar::Joining join = nextChar( str, pos )->joining();
+ return ( join == QChar::Dual || join == QChar::Center );
+}
+
+
+KoComplexText::Shape KoComplexText::glyphVariant( const QString &str, int pos)
+{
+ // ignores L1 - L3, done in the codec
+ QChar::Joining joining = str[pos].joining();
+ //kdDebug() << "checking " << str[pos].unicode() << ", joining=" << joining << endl;
+ switch ( joining ) {
+ case QChar::OtherJoining:
+ case QChar::Center:
+ // these don't change shape
+ return XIsolated;
+ case QChar::Right:
+ // only rule R2 applies
+ if( nextVisualCharJoins( str, pos ) )
+ return XFinal;
+ return XIsolated;
+ case QChar::Dual:
+ bool right = nextVisualCharJoins( str, pos );
+ bool left = prevVisualCharJoins( str, pos );
+ //kdDebug() << "dual: right=" << right << ", left=" << left << endl;
+ if( right && left )
+ return XMedial;
+ else if ( right )
+ return XFinal;
+ else if ( left )
+ return XInitial;
+ else
+ return XIsolated;
+ }
+ return XIsolated;
+}
+
+/* and the same thing for logical ordering :)
+ */
+static inline bool prevLogicalCharJoins( const QString &str, int pos)
+{
+ return ( nextChar( str, pos )->joining() != QChar::OtherJoining );
+}
+
+static inline bool nextLogicalCharJoins( const QString &str, int pos)
+{
+ QChar::Joining join = prevChar( str, pos )->joining();
+ return ( join == QChar::Dual || join == QChar::Center );
+}
+
+
+KoComplexText::Shape KoComplexText::glyphVariantLogical( const QString &str, int pos)
+{
+ // ignores L1 - L3, ligatures are job of the codec
+ QChar::Joining joining = str[pos].joining();
+ //kdDebug() << "checking " << str[pos].unicode() << ", joining=" << joining << endl;
+ switch ( joining ) {
+ case QChar::OtherJoining:
+ case QChar::Center:
+ // these don't change shape
+ return XIsolated;
+ case QChar::Right:
+ // only rule R2 applies
+ if( nextLogicalCharJoins( str, pos ) )
+ return XFinal;
+ return XIsolated;
+ case QChar::Dual:
+ bool right = nextLogicalCharJoins( str, pos );
+ bool left = prevLogicalCharJoins( str, pos );
+ //kdDebug() << "dual: right=" << right << ", left=" << left << endl;
+ if( right && left )
+ return XMedial;
+ else if ( right )
+ return XFinal;
+ else if ( left )
+ return XInitial;
+ else
+ return XIsolated;
+ }
+ return XIsolated;
+}
+
+// -------------------------------------------------------------
+
+// The unicode to unicode shaping codec.
+// does only presentation forms B at the moment, but that should be enough for
+// simple display
+static const ushort arabicUnicodeMapping[256][2] = {
+ // base of shaped forms, and number-1 of them ( 0 for non shaping,
+ // 1 for right binding and 3 for dual binding
+ { 0x0600, 0 }, // 0x600
+ { 0x0601, 0 }, // 0x601
+ { 0x0602, 0 }, // 0x602
+ { 0x0603, 0 }, // 0x603
+ { 0x0604, 0 }, // 0x604
+ { 0x0605, 0 }, // 0x605
+ { 0x0606, 0 }, // 0x606
+ { 0x0607, 0 }, // 0x607
+ { 0x0608, 0 }, // 0x608
+ { 0x0609, 0 }, // 0x609
+ { 0x060a, 0 }, // 0x60a
+ { 0x060b, 0 }, // 0x60b
+ { 0x060c, 0 }, // 0x60c Arabic comma
+ { 0x060d, 0 }, // 0x60d
+ { 0x060e, 0 }, // 0x60e
+ { 0x060f, 0 }, // 0x60f
+
+ { 0x0610, 0 }, // 0x610
+ { 0x0611, 0 }, // 0x611
+ { 0x0612, 0 }, // 0x612
+ { 0x0613, 0 }, // 0x613
+ { 0x0614, 0 }, // 0x614
+ { 0x0615, 0 }, // 0x615
+ { 0x0616, 0 }, // 0x616
+ { 0x0617, 0 }, // 0x617
+ { 0x0618, 0 }, // 0x618
+ { 0x0619, 0 }, // 0x619
+ { 0x061a, 0 }, // 0x61a
+ { 0x061b, 0 }, // 0x61b Arabic semicolon
+ { 0x061c, 0 }, // 0x61c
+ { 0x061d, 0 }, // 0x61d
+ { 0x061e, 0 }, // 0x61e
+ { 0x061f, 0 }, // 0x61f Arabic question mark
+
+ { 0x0620, 0 }, // 0x620
+ { 0xfe80, 0 }, // 0x621 Hamza
+ { 0xfe81, 1 }, // 0x622 R Alef with Madda above
+ { 0xfe83, 1 }, // 0x623 R Alef with Hamza above
+ { 0xfe85, 1 }, // 0x624 R Waw with Hamza above
+ { 0xfe87, 1 }, // 0x625 R Alef with Hamza below
+ { 0xfe89, 3 }, // 0x626 D Yeh with Hamza above
+ { 0xfe8d, 1 }, // 0x627 R Alef
+ { 0xfe8f, 3 }, // 0x628 D Beh
+ { 0xfe93, 1 }, // 0x629 R Teh Marbuta
+ { 0xfe95, 3 }, // 0x62a D Teh
+ { 0xfe99, 3 }, // 0x62b D Theh
+ { 0xfe9d, 3 }, // 0x62c D Jeem
+ { 0xfea1, 3 }, // 0x62d D Hah
+ { 0xfea5, 3 }, // 0x62e D Khah
+ { 0xfea9, 1 }, // 0x62f R Dal
+
+ { 0xfeab, 1 }, // 0x630 R Thal
+ { 0xfead, 1 }, // 0x631 R Reh
+ { 0xfeaf, 1 }, // 0x632 R Zain
+ { 0xfeb1, 1 }, // 0x633 D Seen
+ { 0xfeb5, 3 }, // 0x634 D Sheen
+ { 0xfeb9, 3 }, // 0x635 D Sad
+ { 0xfebd, 3 }, // 0x636 D Dad
+ { 0xfec1, 3 }, // 0x637 D Tah
+ { 0xfec5, 3 }, // 0x638 D Zah
+ { 0xfec9, 3 }, // 0x639 D Ain
+ { 0xfecd, 3 }, // 0x63a D Ghain
+ { 0x063b, 0 }, // 0x63b
+ { 0x063c, 0 }, // 0x63c
+ { 0x063d, 0 }, // 0x63d
+ { 0x063e, 0 }, // 0x63e
+ { 0x063f, 0 }, // 0x63f
+
+ { 0x0640, 0 }, // 0x640 C Tatweel
+ { 0xfed1, 3 }, // 0x641 D Feh
+ { 0xfed5, 3 }, // 0x642 D Qaf
+ { 0xfed9, 3 }, // 0x643 D Kaf
+ { 0xfedd, 3 }, // 0x644 D Lam
+ { 0xfee1, 3 }, // 0x645 D Meem
+ { 0xfee5, 3 }, // 0x646 D Noon
+ { 0xfee9, 3 }, // 0x647 D Heh
+ { 0xfeed, 1 }, // 0x648 R Waw
+ { 0xfeef, 1 }, // 0x649 R Alef Maksura // ### Dual according to newest arabicshaping.txt
+ { 0xfef1, 3 }, // 0x64a D Yeh
+ { 0x064b, 0 }, // 0x64b Mark Fathatan
+ { 0x064c, 0 }, // 0x64c Mark Dammatan
+ { 0x064d, 0 }, // 0x64d Mark Kasratan
+ { 0x064e, 0 }, // 0x64e Mark Fatha
+ { 0x064f, 0 }, // 0x64f Mark Damma
+
+ { 0x0650, 0 }, // 0x650 Mark Kasra
+ { 0x0651, 0 }, // 0x651 Mark Shadda
+ { 0x0652, 0 }, // 0x652 Mark Sukan
+ // these do not exist in latin6 anymore:
+ { 0x0653, 0 }, // 0x653 Mark Maddah above
+ { 0x0654, 0 }, // 0x654 Mark Hamza above
+ { 0x0655, 0 }, // 0x655 Mark Hamza below
+ { 0x0656, 0 }, // 0x656
+ { 0x0657, 0 }, // 0x657
+ { 0x0658, 0 }, // 0x658
+ { 0x0659, 0 }, // 0x659
+ { 0x065a, 0 }, // 0x65a
+ { 0x065b, 0 }, // 0x65b
+ { 0x065c, 0 }, // 0x65c
+ { 0x065d, 0 }, // 0x65d
+ { 0x065e, 0 }, // 0x65e
+ { 0x065f, 0 }, // 0x65f
+
+ { 0x0660, 0 }, // 0x660 Arabic 0
+ { 0x0661, 0 }, // 0x661 Arabic 1
+ { 0x0662, 0 }, // 0x662 Arabic 2
+ { 0x0663, 0 }, // 0x663 Arabic 3
+ { 0x0664, 0 }, // 0x664 Arabic 4
+ { 0x0665, 0 }, // 0x665 Arabic 5
+ { 0x0666, 0 }, // 0x666 Arabic 6
+ { 0x0667, 0 }, // 0x667 Arabic 7
+ { 0x0668, 0 }, // 0x668 Arabic 8
+ { 0x0669, 0 }, // 0x669 Arabic 9
+ { 0x066a, 0 }, // 0x66a Arabic % sign
+ { 0x066b, 0 }, // 0x66b Arabic decimal separator
+ { 0x066c, 0 }, // 0x66c Arabic thousands separator
+ { 0x066d, 0 }, // 0x66d Arabic five pointed star
+ { 0x066e, 0 }, // 0x66e
+ { 0x066f, 0 }, // 0x66f
+
+ // ### some glyphs do not have shaped mappings in the presentation forms A.
+ // these have the shaping set to 0 for the moment. Will have to find out better mappings for them.
+ { 0x0670, 0 }, // 0x670
+ { 0xfb50, 1 }, // 0x671 R Alef Wasla
+ { 0x0672, 0 }, // 0x672 R Alef with wavy Hamza above
+ { 0x0673, 0 }, // 0x673 R Alef with wavy Hamza below
+ { 0x0674, 0 }, // 0x674 U High Hamza
+ { 0x0675, 0 }, // 0x675 R High Hamza Alef
+ { 0x0676, 0 }, // 0x676 R High Hamza Wav
+ { 0xfbdd, 0 }, // 0x677 R U with hamza above // ### only isolated form found...
+ { 0x0678, 0 }, // 0x678 D High hamza yeh
+ { 0xfb66, 3 }, // 0x679 D ttheh
+ { 0xfb5e, 3 }, // 0x67a D theheh
+ { 0xfb52, 3 }, // 0x67b D beeh
+ { 0x067c, 0 }, // 0x67cD teh with ring
+ { 0x067d, 0 }, // 0x67d D teh with three dots above downwards
+ { 0xfb56, 3 }, // 0x67e D peh
+ { 0xfb62, 3 }, // 0x67f D teheh
+
+ { 0xfb5a, 3 }, // 0x680 D beheh
+ { 0x0681, 0 }, // 0x681 D hah with hamza above
+ { 0x0682, 0 }, // 0x682 D hah with two dots vertical above
+ { 0xfb76, 3 }, // 0x683 D nyeh
+ { 0xfb72, 3 }, // 0x684 D dyeh
+ { 0x0685, 0 }, // 0x685 D hah with three dots above
+ { 0xfb7a, 3 }, // 0x686 D tcheh
+ { 0xfb7e, 3 }, // 0x687 D tcheheh
+ { 0xfb88, 1 }, // 0x688 R ddal
+ { 0x0689, 0 }, // 0x689 R dal with ring
+ { 0x068a, 0 }, // 0x68a R dal with dot
+ { 0x068b, 0 }, // 0x68b R dal with dot below and small tah
+ { 0xfb84, 1 }, // 0x68cR dahal
+ { 0xfb82, 1 }, // 0x68d R ddahal
+ { 0xfb86, 1 }, // 0x68e R dul
+ { 0x068f, 0 }, // 0x68f R dal with three dots above downwards
+
+ { 0x0690, 0 }, // 0x690 R dal with four dots above
+ { 0xfb8c, 1 }, // 0x691 R rreh
+ { 0x0692, 0 }, // 0x692 R reh with small v
+ { 0x0693, 0 }, // 0x693 R reh with ring
+ { 0x0694, 0 }, // 0x694 R reh with dot below
+ { 0x0695, 0 }, // 0x695 R reh with small v below
+ { 0x0696, 0 }, // 0x696 R reh with dot below and dot above
+ { 0x0697, 0 }, // 0x697 R reh with two dots above
+ { 0xfb8a, 1 }, // 0x698 R jeh
+ { 0x0699, 0 }, // 0x699 R reh with four dots above
+ { 0x069a, 0 }, // 0x69a D seen with dot below and dot above
+ { 0x069b, 0 }, // 0x69b D seen with three dots below
+ { 0x069c, 0 }, // 0x69cD seen with three dots below and three dots above
+ { 0x069d, 0 }, // 0x69d D sad with two dots below
+ { 0x069e, 0 }, // 0x69e D sad with three dots above
+ { 0x069f, 0 }, // 0x69f D tah with three dots above
+
+ { 0x06a0, 0 }, // 0x6a0 D ain with three dots above
+ { 0x06a1, 0 }, // 0x6a1 D dotless feh
+ { 0x06a2, 0 }, // 0x6a2 D feh with dot moved below
+ { 0x06a3, 0 }, // 0x6a3 D feh with dot below
+ { 0xfb6a, 3 }, // 0x6a4 D veh
+ { 0x06a5, 0 }, // 0x6a5 D feh with three dots below
+ { 0xfb6e, 3 }, // 0x6a6 D peheh
+ { 0x06a7, 0 }, // 0x6a7 D qaf with dot above
+ { 0x06a8, 0 }, // 0x6a8 D qaf woith three dots above
+ { 0xfb8e, 3 }, // 0x6a9 D keheh
+ { 0x06aa, 0 }, // 0x6aa D swash kaf
+ { 0x06ab, 0 }, // 0x6ab D kaf with ring
+ { 0x06ac, 0 }, // 0x6acD kaf with dot above
+ { 0xfbd3, 3 }, // 0x6ad D ng
+ { 0x06ae, 0 }, // 0x6ae D kaf with three dots below
+ { 0xfb92, 3 }, // 0x6af D gaf
+
+ { 0x06b0, 0 }, // 0x6b0 D gaf with ring
+ { 0xfb9a, 3 }, // 0x6b1 D ngoeh
+ { 0x06b2, 0 }, // 0x6b2 D gaf with two dots below
+ { 0xfb96, 3 }, // 0x6b3 D gueh
+ { 0x06b4, 0 }, // 0x6b4 D gaf with three dots above
+ { 0x06b5, 0 }, // 0x6b5 D lam with small v
+ { 0x06b6, 0 }, // 0x6b6 D lam with dot above
+ { 0x06b7, 0 }, // 0x6b7 D lam with three dots above
+ { 0x06b8, 0 }, // 0x6b8 D lam with three dots below
+ { 0x06b9, 0 }, // 0x6b9 D noon with dot below
+ { 0xfb9e, 1 }, // 0x6ba R noon ghunna
+ { 0xfba0, 3 }, // 0x6bb D rnoon
+ { 0x06bc, 0 }, // 0x6bcD noon with ring
+ { 0x06bd, 0 }, // 0x6bd D noon with three dots above
+ { 0xfbaa, 3 }, // 0x6be D heh doachashmee
+ { 0x06bf, 0 }, // 0x6bf D tcheh with dot above
+
+ { 0xfba4, 1 }, // 0x6c0 R heh with yeh above = ligature hamza on hah (06d5 + 0654)
+ { 0xfba6, 3 }, // 0x6c1 D heh goal
+ { 0x06c2, 0 }, // 0x6c2 R heh goal with hamza above (06c1 + 0654)
+ { 0x06c3, 0 }, // 0x6c3 R teh marbuta goal
+ { 0x06c4, 0 }, // 0x6c4 R waw with ring
+ { 0xfbe0, 1 }, // 0x6c5 R kirghiz oe
+ { 0xfbd9, 1 }, // 0x6c6 R oe
+ { 0xfbd7, 1 }, // 0x6c7 R u
+ { 0xfbdb, 1 }, // 0x6c8 R yu
+ { 0xfbe2, 1 }, // 0x6c9 R kirghiz yu
+ { 0x06ca, 0 }, // 0x6ca R waw with teo dots above
+ { 0xfbde, 1 }, // 0x6cb R ve
+ { 0x06cc, 0 }, // 0x6cc D farsi yeh
+ { 0x06cd, 0 }, // 0x6cd R yeh with tail
+ { 0x06ce, 0 }, // 0x6ce D yeh with small v
+ { 0x06cf, 0 }, // 0x6cf R waw with dot above
+
+ { 0xfbe4, 3 }, // 0x6d0 D e
+ { 0x06d1, 0 }, // 0x6d1 D yeh with three dots below
+ { 0xfbae, 1 }, // 0x6d2 R yeh barree
+ { 0xfbb0, 1 }, // 0x6d3 R yeh barree with hamza above
+ { 0x06d4, 0 }, // 0x6d4 U full stop
+ { 0x06d5, 0 }, // 0x6d5 D ae
+ { 0x06d6, 0 }, // 0x6d6 koreanic annotaion signs
+ { 0x06d7, 0 }, // 0x6d7 ...
+ { 0x06d8, 0 }, // 0x6d8
+ { 0x06d9, 0 }, // 0x6d9
+ { 0x06da, 0 }, // 0x6da
+ { 0x06db, 0 }, // 0x6db
+ { 0x06dc, 0 }, // 0x6dc
+ { 0x06dd, 0 }, // 0x6dd
+ { 0x06de, 0 }, // 0x6de
+ { 0x06df, 0 }, // 0x6df
+
+ { 0x06e0, 0 }, // 0x6e0
+ { 0x06e1, 0 }, // 0x6e1
+ { 0x06e2, 0 }, // 0x6e2
+ { 0x06e3, 0 }, // 0x6e3
+ { 0x06e4, 0 }, // 0x6e4
+ { 0x06e5, 0 }, // 0x6e5
+ { 0x06e6, 0 }, // 0x6e6
+ { 0x06e7, 0 }, // 0x6e7
+ { 0x06e8, 0 }, // 0x6e8
+ { 0x06e9, 0 }, // 0x6e9
+ { 0x06ea, 0 }, // 0x6ea
+ { 0x06eb, 0 }, // 0x6eb
+ { 0x06ec, 0 }, // 0x6ec
+ { 0x06ed, 0 }, // 0x6ed
+ { 0x06ee, 0 }, // 0x6ee
+ { 0x06ef, 0 }, // 0x6ef
+
+ { 0x06f0, 0 }, // 0x6f0 Arabic indic digit 0
+ { 0x06f1, 0 }, // 0x6f1
+ { 0x06f2, 0 }, // 0x6f2
+ { 0x06f3, 0 }, // 0x6f3
+ { 0x06f4, 0 }, // 0x6f4
+ { 0x06f5, 0 }, // 0x6f5
+ { 0x06f6, 0 }, // 0x6f6
+ { 0x06f7, 0 }, // 0x6f7
+ { 0x06f8, 0 }, // 0x6f8
+ { 0x06f9, 0 }, // 0x6f9 Arabic indic digit 9
+ { 0x06fa, 0 }, // 0x6fa D Sheen with dot below
+ { 0x06fb, 0 }, // 0x6fb D dad with dot below
+ { 0x06fc, 0 }, // 0x6fc D ghain with dot below
+ { 0x06fd, 0 }, // 0x6fd Sindhi ampersand
+ { 0x06fe, 0 }, // 0x6fe sindhi postposition
+ { 0x06ff, 0 }, // 0x6ff
+
+};
+
+// this is a bit tricky. Alef always binds to the right, so the second parameter descibing the shape
+// of the lam can be either initial of medial. So initial maps to the isolated form of the ligature,
+// medial to the final form
+static const ushort arabicUnicodeLamAlefMapping[6][4] = {
+ { 0xfffd, 0xfffd, 0xfef5, 0xfef6 }, // 0x622 R Alef with Madda above
+ { 0xfffd, 0xfffd, 0xfef7, 0xfef8 }, // 0x623 R Alef with Hamza above
+ { 0xfffd, 0xfffd, 0xfffd, 0xfffd }, // 0x624 R Waw with Hamza above
+ { 0xfffd, 0xfffd, 0xfef9, 0xfefa }, // 0x625 R Alef with Hamza below
+ { 0xfffd, 0xfffd, 0xfffd, 0xfffd }, // 0x626 D Yeh with Hamza above
+ { 0xfffd, 0xfffd, 0xfefb, 0xfefc } // 0x627 R Alef
+};
+
+static inline int getShape( const QChar * /* base */, uchar cell, int shape,
+ const QFontMetrics * /* fm */ )
+{
+ uint ch = arabicUnicodeMapping[cell][0] + shape;
+ /*
+ // we revert to the unshaped glyph in case the shaped version doesn't exist
+ if ( fm && !fm->inFont( ch ) ) {
+ switch( shape ) {
+ case KoComplexText::XIsolated:
+ break; // try base form
+ case KoComplexText::XFinal:
+ ch -= 1; // try isolated form
+ break;
+ case KoComplexText::XInitial:
+ ch += 1; // try medial form
+ break;
+ case KoComplexText::XMedial:
+ ch -= 1; // try initial form
+ break;
+ }
+ if ( !fm->inFont( ch ) )
+ ch = *base;
+ }
+ */
+ return ch;
+}
+
+QString KoComplexText::shapedString(const QString& uc, int from, int len, QPainter::TextDirection dir, const QFontMetrics *fm )
+{
+ if( len < 0 )
+ len = uc.length() - from;
+ if( len == 0 ) {
+ return QString::null;
+ }
+
+ // we have to ignore NSMs at the beginning and add at the end.
+ int num = uc.length() - from - len;
+ const QChar *ch = uc.unicode() + from + len;
+ while ( num > 0 && ch->combiningClass() != 0 ) {
+ ch++;
+ num--;
+ len++;
+ }
+ ch = uc.unicode() + from;
+ while ( len > 0 && ch->combiningClass() != 0 ) {
+ ch++;
+ len--;
+ from++;
+ }
+ if ( len == 0 ) return QString::null;
+
+ if( !shapeBuffer || len > shapeBufSize ) {
+ if( shapeBuffer ) free( (void *) shapeBuffer );
+ shapeBuffer = (QChar *) malloc( len*sizeof( QChar ) );
+// delete [] shapeBuffer;
+// shapeBuffer = new QChar[ len + 1];
+ shapeBufSize = len;
+ }
+
+ int lenOut = 0;
+ QChar *data = shapeBuffer;
+ if ( dir == QPainter::RTL )
+ ch += len - 1;
+ for ( int i = 0; i < len; i++ ) {
+ uchar r = ch->row();
+ uchar c = ch->cell();
+ if ( r != 0x06 ) {
+ if ( dir == QPainter::RTL && ch->mirrored() )
+ *data = ch->mirroredChar();
+ else
+ *data = *ch;
+ data++;
+ lenOut++;
+ } else {
+ int pos = i + from;
+ if ( dir == QPainter::RTL )
+ pos = from + len - 1 - i;
+ int shape = glyphVariantLogical( uc, pos );
+ //kdDebug() << "mapping U+" << ch->unicode() << " to shape " << shape << " glyph=0x" << arabicUnicodeMapping[ch->cell()][shape] << endl;
+ // take care of lam-alef ligatures (lam right of alef)
+ ushort map;
+ switch ( c ) {
+ case 0x44: { // lam
+ const QChar *pch = nextChar( uc, pos );
+ if ( pch->row() == 0x06 ) {
+ switch ( pch->cell() ) {
+ case 0x22:
+ case 0x23:
+ case 0x25:
+ case 0x27:
+ //kdDebug() << " lam of lam-alef ligature" << endl;
+ map = arabicUnicodeLamAlefMapping[pch->cell() - 0x22][shape];
+ goto next;
+ default:
+ break;
+ }
+ }
+ break;
+ }
+ case 0x22: // alef with madda
+ case 0x23: // alef with hamza above
+ case 0x25: // alef with hamza below
+ case 0x27: // alef
+ if ( prevChar( uc, pos )->unicode() == 0x0644 ) {
+ // have a lam alef ligature
+ //kdDebug() << " alef of lam-alef ligature" << endl;
+ goto skip;
+ }
+ default:
+ break;
+ }
+ map = getShape( ch, c, shape, fm );
+ next:
+ *data = map;
+ data++;
+ lenOut++;
+ }
+ skip:
+ if ( dir == QPainter::RTL )
+ ch--;
+ else
+ ch++;
+ }
+
+ if ( dir == QPainter::Auto && !uc.simpleText() ) {
+ return bidiReorderString( QConstString( shapeBuffer, lenOut ).string() );
+ }
+ if ( dir == QPainter::RTL ) {
+ // reverses the non spacing marks to be again after the base char
+ QChar *s = shapeBuffer;
+ int i = 0;
+ while ( i < lenOut ) {
+ if ( s->combiningClass() != 0 ) {
+ // non spacing marks
+ int clen = 1;
+ QChar *ch = s;
+ do {
+ ch++;
+ clen++;
+ } while ( ch->combiningClass() != 0 );
+
+ int j = 0;
+ QChar *cp = s;
+ while ( j < clen/2 ) {
+ QChar tmp = *cp;
+ *cp = *ch;
+ *ch = tmp;
+ cp++;
+ ch--;
+ j++;
+ }
+ s += clen;
+ i += clen;
+ } else {
+ s++;
+ i++;
+ }
+ }
+ }
+
+ return QConstString( shapeBuffer, lenOut ).string();
+}
+
+QChar KoComplexText::shapedCharacter( const QString &str, int pos, const QFontMetrics *fm )
+{
+ const QChar *ch = str.unicode() + pos;
+ if ( ch->row() != 0x06 )
+ return *ch;
+ else {
+ int shape = glyphVariantLogical( str, pos );
+ //kdDebug() << "mapping U+" << ch->unicode() << " to shape " << shape << " glyph=0x" << arabicUnicodeMapping[ch->cell()][shape] << endl;
+ // lam aleph ligatures
+ switch ( ch->cell() ) {
+ case 0x44: { // lam
+ const QChar *nch = nextChar( str, pos );
+ if ( nch->row() == 0x06 ) {
+ switch ( nch->cell() ) {
+ case 0x22:
+ case 0x23:
+ case 0x25:
+ case 0x27:
+ return QChar(arabicUnicodeLamAlefMapping[nch->cell() - 0x22][shape]);
+ default:
+ break;
+ }
+ }
+ break;
+ }
+ case 0x22: // alef with madda
+ case 0x23: // alef with hamza above
+ case 0x25: // alef with hamza below
+ case 0x27: // alef
+ if ( prevChar( str, pos )->unicode() == 0x0644 )
+ // have a lam alef ligature
+ return QChar(0);
+ default:
+ break;
+ }
+ return QChar( getShape( ch, ch->cell(), shape, fm ) );
+ }
+}
+
+// Avoid using QFontPrivate, to which we don't have access. We don't use positionMarks() anyway
+#if 0
+QPointArray KoComplexText::positionMarks( QFontPrivate *f, const QString &str,
+ int pos, QRect *boundingRect )
+{
+ int len = str.length();
+ int nmarks = 0;
+ while ( pos + nmarks < len && str[pos+nmarks +1].combiningClass() > 0 )
+ nmarks++;
+
+ if ( !nmarks )
+ return QPointArray();
+
+ QChar baseChar = KoComplexText::shapedCharacter( str, pos );
+ QRect baseRect = f->boundingRect( baseChar );
+ int baseOffset = f->textWidth( str, pos, 1 );
+
+ //kdDebug() << "base char: bounding rect at " << baseRect.x() << "/" << baseRect.y() << " (" << baseRect.width() << "/" << baseRect.height() << ")" << endl;
+ int offset = f->actual.pixelSize / 10 + 1;
+ //kdDebug() << "offset = " << offset << endl;
+ QPointArray pa( nmarks );
+ int i;
+ unsigned char lastCmb = 0;
+ QRect attachmentRect;
+ if ( boundingRect )
+ *boundingRect = baseRect;
+ for( i = 0; i < nmarks; i++ ) {
+ QChar mark = str[pos+i+1];
+ unsigned char cmb = mark.combiningClass();
+ if ( cmb < 200 ) {
+ // fixed position classes. We approximate by mapping to one of the others.
+ // currently I added only the ones for arabic, hebrew and thai.
+
+ // ### add a bit more offset to arabic, a bit hacky
+ if ( cmb >= 27 && cmb <= 36 )
+ offset +=1;
+ // below
+ if ( (cmb >= 10 && cmb <= 18) ||
+ cmb == 20 || cmb == 22 ||
+ cmb == 29 || cmb == 32 )
+ cmb = QChar::Combining_Below;
+ // above
+ else if ( cmb == 23 || cmb == 27 || cmb == 28 ||
+ cmb == 30 || cmb == 31 || (cmb >= 33 && cmb <= 36 ) )
+ cmb = QChar::Combining_Above;
+ //below-right
+ else if ( cmb == 103 )
+ cmb = QChar::Combining_BelowRight;
+ // above-right
+ else if ( cmb == 24 || cmb == 107 )
+ cmb = QChar::Combining_AboveRight;
+ else if ( cmb == 25 )
+ cmb = QChar::Combining_AboveLeft;
+ // fixed:
+ // 19 21
+
+ }
+
+ // combining marks of different class don't interact. Reset the rectangle.
+ if ( cmb != lastCmb ) {
+ //kdDebug() << "resetting rect" << endl;
+ attachmentRect = baseRect;
+ }
+
+ QPoint p;
+ QRect markRect = f->boundingRect( mark );
+ switch( cmb ) {
+ case QChar::Combining_DoubleBelow:
+ // ### wrong in rtl context!
+ case QChar::Combining_BelowLeft:
+ p += QPoint( 0, offset );
+ case QChar::Combining_BelowLeftAttached:
+ p += attachmentRect.bottomLeft() - markRect.topLeft();
+ break;
+ case QChar::Combining_Below:
+ p += QPoint( 0, offset );
+ case QChar::Combining_BelowAttached:
+ p += attachmentRect.bottomLeft() - markRect.topLeft();
+ p += QPoint( (attachmentRect.width() - markRect.width())/2 , 0 );
+ break;
+ case QChar::Combining_BelowRight:
+ p += QPoint( 0, offset );
+ case QChar::Combining_BelowRightAttached:
+ p += attachmentRect.bottomRight() - markRect.topRight();
+ break;
+ case QChar::Combining_Left:
+ p += QPoint( -offset, 0 );
+ case QChar::Combining_LeftAttached:
+ break;
+ case QChar::Combining_Right:
+ p += QPoint( offset, 0 );
+ case QChar::Combining_RightAttached:
+ break;
+ case QChar::Combining_DoubleAbove:
+ // ### wrong in RTL context!
+ case QChar::Combining_AboveLeft:
+ p += QPoint( 0, -offset );
+ case QChar::Combining_AboveLeftAttached:
+ p += attachmentRect.topLeft() - markRect.bottomLeft();
+ break;
+ case QChar::Combining_Above:
+ p += QPoint( 0, -offset );
+ case QChar::Combining_AboveAttached:
+ p += attachmentRect.topLeft() - markRect.bottomLeft();
+ p += QPoint( (attachmentRect.width() - markRect.width())/2 , 0 );
+ break;
+ case QChar::Combining_AboveRight:
+ p += QPoint( 0, -offset );
+ case QChar::Combining_AboveRightAttached:
+ p += attachmentRect.topRight() - markRect.bottomRight();
+ break;
+
+ case QChar::Combining_IotaSubscript:
+ default:
+ break;
+ }
+ //kdDebug() << "char=" << mark.unicode() << " combiningClass = " << cmb << " offset=" << p.x() << "/" << p.y() << endl;
+ markRect.moveBy( p.x(), p.y() );
+ p += QPoint( -baseOffset, 0 );
+ attachmentRect |= markRect;
+ if ( boundingRect )
+ *boundingRect |= markRect;
+ lastCmb = cmb;
+ pa.setPoint( i, p );
+ }
+ return pa;
+}
+#endif
+
+//#define BIDI_DEBUG
+#ifdef BIDI_DEBUG
+#include <iostream>
+#endif
+
+static QChar::Direction basicDirection(const QString &str, int start = 0)
+{
+ int len = str.length();
+ int pos = start > len ? len -1 : start;
+ const QChar *uc = str.unicode() + pos;
+ while( pos < len ) {
+ switch( uc->direction() )
+ {
+ case QChar::DirL:
+ case QChar::DirLRO:
+ case QChar::DirLRE:
+ return QChar::DirL;
+ case QChar::DirR:
+ case QChar::DirAL:
+ case QChar::DirRLO:
+ case QChar::DirRLE:
+ return QChar::DirR;
+ default:
+ break;
+ }
+ ++pos;
+ ++uc;
+ }
+ if ( start != 0 )
+ return basicDirection( str );
+ return QChar::DirL;
+}
+
+// transforms one line of the paragraph to visual order
+// the caller is responisble to delete the returned list of KoTextRuns.
+QPtrList<KoTextRun> *KoComplexText::bidiReorderLine( KoBidiControl *control, const QString &text, int start, int len,
+ QChar::Direction basicDir )
+{
+ int last = start + len - 1;
+ //printf("doing BiDi reordering from %d to %d!\n", start, last);
+
+ QPtrList<KoTextRun> *runs = new QPtrList<KoTextRun>;
+ runs->setAutoDelete(TRUE);
+
+ KoBidiContext *context = control->context;
+ if ( !context ) {
+ // first line
+ //if( start != 0 )
+ // kdDebug() << "bidiReorderLine::internal error" << endl;
+ if( basicDir == QChar::DirR || (basicDir == QChar::DirON && text.isRightToLeft() ) ) {
+ context = new KoBidiContext( 1, QChar::DirR );
+ control->status.last = QChar::DirR;
+ } else {
+ context = new KoBidiContext( 0, QChar::DirL );
+ control->status.last = QChar::DirL;
+ }
+ }
+
+ KoBidiStatus status = control->status;
+ QChar::Direction dir = QChar::DirON;
+
+ int sor = start;
+ int eor = start;
+
+ int current = start;
+ while(current <= last) {
+ QChar::Direction dirCurrent;
+ if(current == (int)text.length()) {
+ KoBidiContext *c = context;
+ while ( c->parent )
+ c = c->parent;
+ dirCurrent = c->dir;
+ } else if ( current == last ) {
+ dirCurrent = ( basicDir != QChar::DirON ? basicDir : basicDirection( text, current ) );
+ } else
+ dirCurrent = text.at(current).direction();
+
+
+#ifdef BIDI_DEBUG
+ cout << "directions: dir=" << dir << " current=" << dirCurrent << " last=" << status.last << " eor=" << status.eor << " lastStrong=" << status.lastStrong << " embedding=" << context->dir << " level =" << (int)context->level << endl;
+#endif
+
+ switch(dirCurrent) {
+
+ // embedding and overrides (X1-X9 in the BiDi specs)
+ case QChar::DirRLE:
+ {
+ uchar level = context->level;
+ if(level%2) // we have an odd level
+ level += 2;
+ else
+ level++;
+ if(level < 61) {
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ context = new KoBidiContext(level, QChar::DirR, context);
+ status.last = QChar::DirR;
+ status.lastStrong = QChar::DirR;
+ }
+ break;
+ }
+ case QChar::DirLRE:
+ {
+ uchar level = context->level;
+ if(level%2) // we have an odd level
+ level++;
+ else
+ level += 2;
+ if(level < 61) {
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ context = new KoBidiContext(level, QChar::DirL, context);
+ status.last = QChar::DirL;
+ status.lastStrong = QChar::DirL;
+ }
+ break;
+ }
+ case QChar::DirRLO:
+ {
+ uchar level = context->level;
+ if(level%2) // we have an odd level
+ level += 2;
+ else
+ level++;
+ if(level < 61) {
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ context = new KoBidiContext(level, QChar::DirR, context, TRUE);
+ dir = QChar::DirR;
+ status.last = QChar::DirR;
+ status.lastStrong = QChar::DirR;
+ }
+ break;
+ }
+ case QChar::DirLRO:
+ {
+ uchar level = context->level;
+ if(level%2) // we have an odd level
+ level++;
+ else
+ level += 2;
+ if(level < 61) {
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ context = new KoBidiContext(level, QChar::DirL, context, TRUE);
+ dir = QChar::DirL;
+ status.last = QChar::DirL;
+ status.lastStrong = QChar::DirL;
+ }
+ break;
+ }
+ case QChar::DirPDF:
+ {
+ KoBidiContext *c = context->parent;
+ if(c) {
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ status.last = context->dir;
+ if( context->deref() ) delete context;
+ context = c;
+ if(context->override)
+ dir = context->dir;
+ else
+ dir = QChar::DirON;
+ status.lastStrong = context->dir;
+ }
+ break;
+ }
+
+ // strong types
+ case QChar::DirL:
+ if(dir == QChar::DirON)
+ dir = QChar::DirL;
+ switch(status.last)
+ {
+ case QChar::DirL:
+ eor = current; status.eor = QChar::DirL; break;
+ case QChar::DirR:
+ case QChar::DirAL:
+ case QChar::DirEN:
+ case QChar::DirAN:
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ break;
+ case QChar::DirES:
+ case QChar::DirET:
+ case QChar::DirCS:
+ case QChar::DirBN:
+ case QChar::DirB:
+ case QChar::DirS:
+ case QChar::DirWS:
+ case QChar::DirON:
+ if(dir != QChar::DirL) {
+ //last stuff takes embedding dir
+ if( context->dir == QChar::DirR ) {
+ if(status.eor != QChar::DirR) {
+ // AN or EN
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ dir = QChar::DirR;
+ }
+ else
+ eor = current - 1;
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ } else {
+ if(status.eor != QChar::DirL) {
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ dir = QChar::DirL;
+ } else {
+ eor = current; status.eor = QChar::DirL; break;
+ }
+ }
+ } else {
+ eor = current; status.eor = QChar::DirL;
+ }
+ default:
+ break;
+ }
+ status.lastStrong = QChar::DirL;
+ break;
+ case QChar::DirAL:
+ case QChar::DirR:
+ if(dir == QChar::DirON) dir = QChar::DirR;
+ switch(status.last)
+ {
+ case QChar::DirR:
+ case QChar::DirAL:
+ eor = current; status.eor = QChar::DirR; break;
+ case QChar::DirL:
+ case QChar::DirEN:
+ case QChar::DirAN:
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ break;
+ case QChar::DirES:
+ case QChar::DirET:
+ case QChar::DirCS:
+ case QChar::DirBN:
+ case QChar::DirB:
+ case QChar::DirS:
+ case QChar::DirWS:
+ case QChar::DirON:
+ if( status.eor != QChar::DirR && status.eor != QChar::DirAL ) {
+ //last stuff takes embedding dir
+ if(context->dir == QChar::DirR || status.lastStrong == QChar::DirR) {
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ dir = QChar::DirR;
+ eor = current;
+ } else {
+ eor = current - 1;
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ dir = QChar::DirR;
+ }
+ } else {
+ eor = current; status.eor = QChar::DirR;
+ }
+ default:
+ break;
+ }
+ status.lastStrong = dirCurrent;
+ break;
+
+ // weak types:
+
+ case QChar::DirNSM:
+ // ### if @sor, set dir to dirSor
+ break;
+ case QChar::DirEN:
+ if(status.lastStrong != QChar::DirAL) {
+ // if last strong was AL change EN to AL
+ if(dir == QChar::DirON) {
+ if(status.lastStrong == QChar::DirL)
+ dir = QChar::DirL;
+ else
+ dir = QChar::DirAN;
+ }
+ switch(status.last)
+ {
+ case QChar::DirET:
+ if ( status.lastStrong == QChar::DirR || status.lastStrong == QChar::DirAL ) {
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; status.eor = QChar::DirON;
+ dir = QChar::DirAN;
+ }
+ // fall through
+ case QChar::DirEN:
+ case QChar::DirL:
+ eor = current;
+ status.eor = dirCurrent;
+ break;
+ case QChar::DirR:
+ case QChar::DirAL:
+ case QChar::DirAN:
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; status.eor = QChar::DirEN;
+ dir = QChar::DirAN; break;
+ case QChar::DirES:
+ case QChar::DirCS:
+ if(status.eor == QChar::DirEN || dir == QChar::DirAN) {
+ eor = current; break;
+ }
+ case QChar::DirBN:
+ case QChar::DirB:
+ case QChar::DirS:
+ case QChar::DirWS:
+ case QChar::DirON:
+ if(status.eor == QChar::DirR) {
+ // neutrals go to R
+ eor = current - 1;
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirEN;
+ dir = QChar::DirAN;
+ }
+ else if( status.eor == QChar::DirL ||
+ (status.eor == QChar::DirEN && status.lastStrong == QChar::DirL)) {
+ eor = current; status.eor = dirCurrent;
+ } else {
+ // numbers on both sides, neutrals get right to left direction
+ if(dir != QChar::DirL) {
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ eor = current - 1;
+ dir = QChar::DirR;
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ dir = QChar::DirAN;
+ } else {
+ eor = current; status.eor = dirCurrent;
+ }
+ }
+ default:
+ break;
+ }
+ break;
+ }
+ case QChar::DirAN:
+ dirCurrent = QChar::DirAN;
+ if(dir == QChar::DirON) dir = QChar::DirAN;
+ switch(status.last)
+ {
+ case QChar::DirL:
+ case QChar::DirAN:
+ eor = current; status.eor = QChar::DirAN; break;
+ case QChar::DirR:
+ case QChar::DirAL:
+ case QChar::DirEN:
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ break;
+ case QChar::DirCS:
+ if(status.eor == QChar::DirAN) {
+ eor = current; status.eor = QChar::DirR; break;
+ }
+ case QChar::DirES:
+ case QChar::DirET:
+ case QChar::DirBN:
+ case QChar::DirB:
+ case QChar::DirS:
+ case QChar::DirWS:
+ case QChar::DirON:
+ if(status.eor == QChar::DirR) {
+ // neutrals go to R
+ eor = current - 1;
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ dir = QChar::DirAN;
+ } else if( status.eor == QChar::DirL ||
+ (status.eor == QChar::DirEN && status.lastStrong == QChar::DirL)) {
+ eor = current; status.eor = dirCurrent;
+ } else {
+ // numbers on both sides, neutrals get right to left direction
+ if(dir != QChar::DirL) {
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ eor = current - 1;
+ dir = QChar::DirR;
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+ ++eor; sor = eor; dir = QChar::DirON; status.eor = QChar::DirON;
+ dir = QChar::DirAN;
+ } else {
+ eor = current; status.eor = dirCurrent;
+ }
+ }
+ default:
+ break;
+ }
+ break;
+ case QChar::DirES:
+ case QChar::DirCS:
+ break;
+ case QChar::DirET:
+ if(status.last == QChar::DirEN) {
+ dirCurrent = QChar::DirEN;
+ eor = current; status.eor = dirCurrent;
+ break;
+ }
+ break;
+
+ // boundary neutrals should be ignored
+ case QChar::DirBN:
+ break;
+ // neutrals
+ case QChar::DirB:
+ // ### what do we do with newline and paragraph separators that come to here?
+ break;
+ case QChar::DirS:
+ // ### implement rule L1
+ break;
+ case QChar::DirWS:
+ case QChar::DirON:
+ break;
+ default:
+ break;
+ }
+
+ //cout << " after: dir=" << // dir << " current=" << dirCurrent << " last=" << status.last << " eor=" << status.eor << " lastStrong=" << status.lastStrong << " embedding=" << context->dir << endl;
+
+ if(current >= (int)text.length()) break;
+
+ // set status.last as needed.
+ switch(dirCurrent)
+ {
+ case QChar::DirET:
+ case QChar::DirES:
+ case QChar::DirCS:
+ case QChar::DirS:
+ case QChar::DirWS:
+ case QChar::DirON:
+ switch(status.last)
+ {
+ case QChar::DirL:
+ case QChar::DirR:
+ case QChar::DirAL:
+ case QChar::DirEN:
+ case QChar::DirAN:
+ status.last = dirCurrent;
+ break;
+ default:
+ status.last = QChar::DirON;
+ }
+ break;
+ case QChar::DirNSM:
+ case QChar::DirBN:
+ // ignore these
+ break;
+ default:
+ status.last = dirCurrent;
+ }
+
+ ++current;
+ }
+
+#ifdef BIDI_DEBUG
+ cout << "reached end of line current=" << current << ", eor=" << eor << endl;
+#endif
+ eor = current - 1; // remove dummy char
+
+ if ( sor <= eor )
+ runs->append( new KoTextRun(sor, eor, context, dir) );
+
+ // reorder line according to run structure...
+
+ // first find highest and lowest levels
+ uchar levelLow = 128;
+ uchar levelHigh = 0;
+ KoTextRun *r = runs->first();
+ while ( r ) {
+ //printf("level = %d\n", r->level);
+ if ( r->level > levelHigh )
+ levelHigh = r->level;
+ if ( r->level < levelLow )
+ levelLow = r->level;
+ r = runs->next();
+ }
+
+ // implements reordering of the line (L2 according to BiDi spec):
+ // L2. From the highest level found in the text to the lowest odd level on each line,
+ // reverse any contiguous sequence of characters that are at that level or higher.
+
+ // reversing is only done up to the lowest odd level
+ if(!(levelLow%2)) levelLow++;
+
+#ifdef BIDI_DEBUG
+ cout << "reorderLine: lineLow = " << (uint)levelLow << ", lineHigh = " << (uint)levelHigh << endl;
+ cout << "logical order is:" << endl;
+ QPtrListIterator<KoTextRun> it2(*runs);
+ KoTextRun *r2;
+ for ( ; (r2 = it2.current()); ++it2 )
+ cout << " " << r2 << " start=" << r2->start << " stop=" << r2->stop << " level=" << (uint)r2->level << endl;
+#endif
+
+ int count = runs->count() - 1;
+
+ while(levelHigh >= levelLow)
+ {
+ int i = 0;
+ while ( i < count )
+ {
+ while(i < count && runs->at(i)->level < levelHigh) i++;
+ int start = i;
+ while(i <= count && runs->at(i)->level >= levelHigh) i++;
+ int end = i-1;
+
+ if(start != end)
+ {
+ //cout << "reversing from " << start << " to " << end << endl;
+ for(int j = 0; j < (end-start+1)/2; j++)
+ {
+ KoTextRun *first = runs->take(start+j);
+ KoTextRun *last = runs->take(end-j-1);
+ runs->insert(start+j, last);
+ runs->insert(end-j, first);
+ }
+ }
+ i++;
+ if(i >= count) break;
+ }
+ levelHigh--;
+ }
+
+#ifdef BIDI_DEBUG
+ cout << "visual order is:" << endl;
+ QPtrListIterator<KoTextRun> it3(*runs);
+ KoTextRun *r3;
+ for ( ; (r3 = it3.current()); ++it3 )
+ {
+ cout << " " << r3 << endl;
+ }
+#endif
+
+ control->setContext( context );
+ control->status = status;
+
+ return runs;
+}
+
+
+QString KoComplexText::bidiReorderString( const QString &str, QChar::Direction /*basicDir*/ )
+{
+
+// ### fix basic direction
+ KoBidiControl control;
+ int lineStart = 0;
+ int lineEnd = 0;
+ int len = str.length();
+ QString visual;
+ visual.setUnicode( 0, len );
+ QChar *vch = (QChar *)visual.unicode();
+ const QChar *ch = str.unicode();
+ while( lineStart < len ) {
+ lineEnd = lineStart;
+ while( *ch != '\n' && lineEnd < len ) {
+ ch++;
+ lineEnd++;
+ }
+ lineEnd++;
+ QPtrList<KoTextRun> *runs = bidiReorderLine( &control, str, lineStart, lineEnd - lineStart );
+
+ // reorder the content of the line, and output to visual
+ KoTextRun *r = runs->first();
+ while ( r ) {
+ if(r->level %2) {
+ // odd level, need to reverse the string
+ int pos = r->stop;
+ while(pos >= r->start) {
+ *vch = str[pos];
+ if ( vch->mirrored() )
+ *vch = vch->mirroredChar();
+ vch++;
+ pos--;
+ }
+ } else {
+ int pos = r->start;
+ while(pos <= r->stop) {
+ *vch = str[pos];
+ vch++;
+ pos++;
+ }
+ }
+ r = runs->next();
+ }
+ if ( *ch == '\n' ) {
+ *vch = *ch;
+ vch++;
+ ch++;
+ lineEnd++;
+ }
+ lineStart = lineEnd;
+ }
+ return visual;
+}
+
+KoTextRun::KoTextRun(int _start, int _stop, KoBidiContext *context, QChar::Direction dir) {
+ start = _start;
+ stop = _stop;
+ if(dir == QChar::DirON) dir = context->dir;
+
+ level = context->level;
+
+ // add level of run (cases I1 & I2)
+ if( level % 2 ) {
+ if(dir == QChar::DirL || dir == QChar::DirAN)
+ level++;
+ } else {
+ if( dir == QChar::DirR )
+ level++;
+ else if( dir == QChar::DirAN )
+ level += 2;
+ }
+#ifdef BIDI_DEBUG
+ printf("new run: dir=%d from %d, to %d level = %d\n", dir, _start, _stop, level);
+#endif
+}
+
+#endif //QT_NO_COMPLEXTEXT
diff --git a/lib/kotext/KoComplexText.h b/lib/kotext/KoComplexText.h
new file mode 100644
index 00000000..8349c66d
--- /dev/null
+++ b/lib/kotext/KoComplexText.h
@@ -0,0 +1,131 @@
+/****************************************************************************
+** $Id: KoComplexText.h 484817 2005-12-02 00:53:59Z dfaure $
+**
+** Internal header file.
+**
+** Created :
+**
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+** information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QCOMPLEXTEXT_H
+#define QCOMPLEXTEXT_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of Qt Remote Control. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+//
+
+#ifndef QT_H
+#include <qstring.h>
+#include <qpointarray.h>
+#include <qfont.h>
+#include <qpainter.h>
+#include <qptrlist.h>
+#include <qshared.h>
+#endif // QT_H
+
+#ifndef QT_NO_COMPLEXTEXT
+
+// bidi helper classes. Internal to Qt
+struct Q_EXPORT KoBidiStatus {
+ KoBidiStatus() {
+ eor = QChar::DirON;
+ lastStrong = QChar::DirON;
+ last = QChar:: DirON;
+ }
+ QChar::Direction eor;
+ QChar::Direction lastStrong;
+ QChar::Direction last;
+};
+
+struct Q_EXPORT KoBidiContext : public QShared {
+ // ### ref and deref parent?
+ KoBidiContext( uchar level, QChar::Direction embedding, KoBidiContext *parent = 0, bool override = FALSE );
+ ~KoBidiContext();
+
+ unsigned char level;
+ bool override : 1;
+ QChar::Direction dir : 5;
+
+ KoBidiContext *parent;
+};
+
+struct Q_EXPORT KoBidiControl {
+ KoBidiControl() { context = 0; }
+ KoBidiControl( KoBidiContext *c, KoBidiStatus s)
+ { context = c; if( context ) context->ref(); status = s; }
+ ~KoBidiControl() { if ( context && context->deref() ) delete context; }
+ void setContext( KoBidiContext *c ) { if ( context == c ) return; if ( context && context->deref() ) delete context; context = c; context->ref(); }
+ KoBidiContext *context;
+ KoBidiStatus status;
+};
+
+struct Q_EXPORT KoTextRun {
+ KoTextRun(int _start, int _stop, KoBidiContext *context, QChar::Direction dir);
+
+ int start;
+ int stop;
+ // explicit + implicit levels here
+ uchar level;
+};
+
+class Q_EXPORT KoComplexText {
+public:
+ enum Shape {
+ XIsolated,
+ XFinal,
+ XInitial,
+ XMedial
+ };
+ static Shape glyphVariant( const QString &str, int pos);
+ static Shape glyphVariantLogical( const QString &str, int pos);
+
+ static QString shapedString( const QString &str, int from = 0, int len = -1, QPainter::TextDirection dir = QPainter::Auto, const QFontMetrics *fm = 0);
+ static QChar shapedCharacter(const QString &str, int pos, const QFontMetrics *fm = 0);
+
+ // positions non spacing marks relative to the base character at position pos.
+ //static QPointArray positionMarks( QFontPrivate *f, const QString &str, int pos, QRect *boundingRect = 0 );
+
+ static QPtrList<KoTextRun> *bidiReorderLine( KoBidiControl *control, const QString &str, int start, int len,
+ QChar::Direction basicDir = QChar::DirON );
+ static QString bidiReorderString( const QString &str, QChar::Direction basicDir = QChar::DirON );
+};
+
+#endif //QT_NO_COMPLEXTEXT
+
+#endif
diff --git a/lib/kotext/KoCreateStyleDia.cpp b/lib/kotext/KoCreateStyleDia.cpp
new file mode 100644
index 00000000..e38be5f4
--- /dev/null
+++ b/lib/kotext/KoCreateStyleDia.cpp
@@ -0,0 +1,63 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include <klocale.h>
+
+#include <qvbox.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include "KoCreateStyleDia.h"
+#include <kmessagebox.h>
+
+KoCreateStyleDia::KoCreateStyleDia( const QStringList & _list, QWidget *parent, const char *name )
+ : KDialogBase( parent, name , true, "", Ok|Cancel, Ok, true )
+{
+ styleList=_list;
+ setCaption( i18n("Create New Style") );
+ QVBox *page = makeVBoxMainWidget();
+ new QLabel(i18n("Please specify a new style name:"), page);
+ m_styleName = new QLineEdit( page );
+ m_styleName->setMinimumWidth( m_styleName->sizeHint().width() * 3 );
+
+ connect( m_styleName, SIGNAL(textChanged ( const QString & )), this, SLOT(nameChanged( const QString &)));
+ m_styleName->setFocus();
+ enableButtonOK( false );
+}
+
+void KoCreateStyleDia::slotOk()
+{
+ if ( styleList.findIndex(m_styleName->text() ) != -1 )
+ {
+ KMessageBox::error(this, i18n("Name already exists! Please choose another name"));
+ m_styleName->clear();
+ }
+ else
+ KDialogBase::slotOk();
+}
+
+QString KoCreateStyleDia::nameOfNewStyle()const
+{
+ return m_styleName->text();
+}
+
+void KoCreateStyleDia::nameChanged( const QString &text)
+{
+ enableButtonOK( !text.isEmpty() );
+}
+#include "KoCreateStyleDia.moc"
diff --git a/lib/kotext/KoCreateStyleDia.h b/lib/kotext/KoCreateStyleDia.h
new file mode 100644
index 00000000..b7fb44af
--- /dev/null
+++ b/lib/kotext/KoCreateStyleDia.h
@@ -0,0 +1,44 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KoCreateStyleDia__
+#define __KoCreateStyleDia__
+
+#include <kdialogbase.h>
+#include <qstringlist.h>
+#include <koffice_export.h>
+
+class QLineEdit;
+class KOTEXT_EXPORT KoCreateStyleDia : public KDialogBase
+{
+ Q_OBJECT
+public:
+ KoCreateStyleDia( const QStringList & _list, QWidget *parent, const char *name );
+ QString nameOfNewStyle()const;
+
+protected slots:
+ virtual void slotOk();
+ void nameChanged( const QString &text);
+
+protected:
+ QStringList styleList;
+ QLineEdit *m_styleName;
+};
+
+#endif
diff --git a/lib/kotext/KoCustomVariablesDia.cpp b/lib/kotext/KoCustomVariablesDia.cpp
new file mode 100644
index 00000000..32a99743
--- /dev/null
+++ b/lib/kotext/KoCustomVariablesDia.cpp
@@ -0,0 +1,336 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoCustomVariablesDia.h"
+#include "KoCustomVariablesDia.moc"
+
+#include <klocale.h>
+#include <kbuttonbox.h>
+
+#include <qcombobox.h>
+#include <qvbox.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qheader.h>
+#include <klineedit.h>
+#include <kdebug.h>
+
+/******************************************************************
+ *
+ * Class: KoVariableNameDia
+ *
+ ******************************************************************/
+
+KoVariableNameDia::KoVariableNameDia( QWidget *parent )
+ : KDialogBase( parent, "", TRUE,i18n( "Entry Name" ),Ok|Cancel )
+{
+ init();
+}
+
+
+KoVariableNameDia::KoVariableNameDia( QWidget *parent, const QPtrList<KoVariable>& vars )
+ : KDialogBase( parent, "", TRUE, i18n( "Variable Name" ), Ok|Cancel )
+{
+
+ init();
+ enableButtonOK(false);
+ QPtrListIterator<KoVariable> it( vars );
+ for ( ; it.current() ; ++it ) {
+ KoVariable *var = it.current();
+ if ( var->type() == VT_CUSTOM )
+ names->insertItem( ( (KoCustomVariable*) var )->name(), -1 );
+ }
+
+}
+
+void KoVariableNameDia::init()
+{
+ back = makeVBoxMainWidget();
+
+ QHBox *row1 = new QHBox( back );
+ row1->setSpacing( KDialog::spacingHint() );
+
+ QLabel *l = new QLabel( i18n( "Name:" ), row1 );
+ l->setFixedSize( l->sizeHint() );
+ names = new QComboBox( TRUE, row1 );
+ names->setFocus();
+
+ connect( names, SIGNAL( textChanged ( const QString & )),
+ this, SLOT( textChanged ( const QString & )));
+ connect( this, SIGNAL( okClicked() ),
+ this, SLOT( accept() ) );
+ connect( this, SIGNAL( cancelClicked() ),
+ this, SLOT( reject() ) );
+ enableButtonOK( !names->currentText().isEmpty() );
+ resize( 350, 100 );
+}
+
+QString KoVariableNameDia::getName() const
+{
+ return names->currentText();
+}
+
+void KoVariableNameDia::textChanged ( const QString &_text )
+{
+ enableButtonOK(!_text.isEmpty());
+}
+
+/******************************************************************
+ *
+ * Class: KoCustomVariablesListItem
+ *
+ ******************************************************************/
+
+KoCustomVariablesListItem::KoCustomVariablesListItem( QListView *parent )
+ : QListViewItem( parent )
+{
+ editWidget = new KLineEdit( listView()->viewport() );
+ listView()->addChild( editWidget );
+}
+
+void KoCustomVariablesListItem::setup()
+{
+ QListViewItem::setup();
+ setHeight( QMAX( listView()->fontMetrics().height(),
+ editWidget->sizeHint().height() ) );
+ //if ( listView()->columnWidth( 1 ) < editWidget->sizeHint().width() )
+ // listView()->setColumnWidth( 1, editWidget->sizeHint().width() );
+}
+
+void KoCustomVariablesListItem::update()
+{
+ editWidget->resize( listView()->header()->cellSize( 1 ), height() );
+ listView()->moveChild( editWidget, listView()->header()->cellPos( 1 ),
+ listView()->itemPos( this ) + listView()->contentsY() );
+ editWidget->show();
+}
+
+void KoCustomVariablesListItem::setVariable( KoCustomVariable *v )
+{
+ var = v;
+ editWidget->setText( var->value() );
+ setText( 0, v->name() );
+}
+
+KoCustomVariable *KoCustomVariablesListItem::getVariable() const
+{
+ return var;
+}
+
+void KoCustomVariablesListItem::applyValue()
+{
+ QString newVal=editWidget->text();
+ if(var->value()!=newVal)
+ var->setValue( newVal );
+}
+
+int KoCustomVariablesListItem::width( const QFontMetrics & fm, const QListView *lv, int c ) const
+{
+ // The text of the 2nd column isn't known to QListViewItem, only we know it
+ // (it's in our lineedit)
+ if ( c == 1 ) {
+ QString val = editWidget->text();
+ int w = fm.width( val );
+ return w;
+ } else
+ return QListViewItem::width( fm, lv, c );
+}
+
+/******************************************************************
+ *
+ * Class: KoCustomVariablesList
+ *
+ ******************************************************************/
+
+KoCustomVariablesList::KoCustomVariablesList( QWidget *parent )
+ : KListView( parent )
+{
+ header()->setMovingEnabled( FALSE );
+ addColumn( i18n( "Variable" ) );
+ addColumn( i18n( "Value" ) );
+ connect( header(), SIGNAL( sizeChange( int, int, int ) ),
+ this, SLOT( columnSizeChange( int, int, int ) ) );
+ connect( header(), SIGNAL( sectionClicked( int ) ),
+ this, SLOT( sectionClicked( int ) ) );
+
+ setResizeMode(QListView::LastColumn);
+ setSorting( -1 );
+}
+
+void KoCustomVariablesList::setValues()
+{
+ QListViewItemIterator it( this );
+ for ( ; it.current(); ++it )
+ ( (KoCustomVariablesListItem *)it.current() )->applyValue();
+}
+
+void KoCustomVariablesList::columnSizeChange( int c, int, int )
+{
+ if ( c == 0 || c == 1 )
+ updateItems();
+}
+
+void KoCustomVariablesList::sectionClicked( int )
+{
+ updateItems();
+}
+
+void KoCustomVariablesList::updateItems()
+{
+ QListViewItemIterator it( this );
+ for ( ; it.current(); ++it )
+ ( (KoCustomVariablesListItem*)it.current() )->update();
+}
+
+/******************************************************************
+ *
+ * Class: KoCustomVariablesDia
+ *
+ ******************************************************************/
+
+KoCustomVariablesDia::KoCustomVariablesDia( QWidget *parent, const QPtrList<KoVariable> &variables )
+ : KDialogBase( parent, "", TRUE,i18n( "Variable Value Editor" ), Ok|Cancel )
+{
+
+ back = makeVBoxMainWidget();
+
+ list = new KoCustomVariablesList( back );
+
+ QStringList lst;
+ QPtrListIterator<KoVariable> it( variables );
+ for ( ; it.current() ; ++it ) {
+ KoVariable *var = it.current();
+ if ( var->type() == VT_CUSTOM ) {
+ KoCustomVariable *v = (KoCustomVariable*)var;
+ if ( !lst.contains( v->name() ) ) {
+ lst.append( v->name() );
+ KoCustomVariablesListItem *item = new KoCustomVariablesListItem( list );
+ item->setVariable( v );
+ }
+ }
+ }
+
+
+ connect( this, SIGNAL( okClicked() ),
+ this, SLOT( slotOk() ) );
+ connect( this, SIGNAL( cancelClicked() ),
+ this, SLOT( reject() ) );
+ showButtonOK(lst.count()>0);
+
+ resize( 600, 400 );
+}
+
+void KoCustomVariablesDia::slotOk()
+{
+ list->setValues();
+ accept();
+}
+
+/******************************************************************
+ *
+ * Class: KoCustomVarDialog
+ *
+ ******************************************************************/
+
+KoCustomVarDialog::KoCustomVarDialog( QWidget *parent )
+ : KDialogBase( parent, "", TRUE,i18n( "Add Variable" ), Ok|Cancel )
+{
+ init();
+ m_name->setFocus();
+
+
+ connect( this, SIGNAL( okClicked() ),
+ this, SLOT( slotAddOk() ) );
+ connect( this, SIGNAL( cancelClicked() ),
+ this, SLOT( reject() ) );
+
+ connect( m_name, SIGNAL( textChanged(const QString&) ),
+ this, SLOT( slotTextChanged(const QString&) ) );
+
+ enableButtonOK( false );
+ resize( 350, 100 );
+
+}
+// edit existing variable
+KoCustomVarDialog::KoCustomVarDialog( QWidget *parent, KoCustomVariable *var )
+ : KDialogBase( parent, "", TRUE,i18n( "Edit Variable" ), Ok|Cancel )
+{
+ m_var = var;
+ init();
+ m_name->setText( m_var->name() );
+ m_value->setText( m_var->value() );
+ m_name->setReadOnly(true);
+ m_value->setFocus();
+
+
+ connect( this, SIGNAL( okClicked() ),
+ this, SLOT( slotEditOk() ) );
+ connect( this, SIGNAL( cancelClicked() ),
+ this, SLOT( reject() ) );
+
+ connect( m_value, SIGNAL( textChanged(const QString&) ),
+ this, SLOT( slotTextChanged(const QString&) ) );
+
+ enableButtonOK( true );
+ resize( 350, 100 );
+}
+
+void KoCustomVarDialog::init()
+{
+ back = makeVBoxMainWidget();
+ QHBox *row1 = new QHBox( back );
+ row1->setSpacing( KDialog::spacingHint() );
+ QLabel *ln = new QLabel( i18n( "Name:" ), row1 );
+ ln->setFixedSize( ln->sizeHint() );
+ m_name = new KLineEdit( row1 );
+
+ QHBox *row2 = new QHBox( back );
+ row2->setSpacing( KDialog::spacingHint() );
+ QLabel *lv = new QLabel( i18n( "Value:" ), row2 );
+ lv->setFixedSize( lv->sizeHint() );
+ m_value = new KLineEdit( row2 );
+}
+
+void KoCustomVarDialog::slotAddOk()
+{
+ accept();
+}
+void KoCustomVarDialog::slotEditOk()
+{
+ m_var->setValue( m_value->text() );
+ accept();
+}
+
+void KoCustomVarDialog::slotTextChanged(const QString&text)
+{
+ enableButtonOK( !text.isEmpty() );
+}
+QString KoCustomVarDialog::name()
+{
+ if ( m_name->text().isEmpty() )
+ return QString( "No name" );
+ return m_name->text();
+}
+
+QString KoCustomVarDialog::value()
+{
+ if ( m_value->text().isEmpty() )
+ return QString( "No value" );
+ return m_value->text();
+}
diff --git a/lib/kotext/KoCustomVariablesDia.h b/lib/kotext/KoCustomVariablesDia.h
new file mode 100644
index 00000000..14d5dbf0
--- /dev/null
+++ b/lib/kotext/KoCustomVariablesDia.h
@@ -0,0 +1,167 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOVARIABLEDLGS_H
+#define KOVARIABLEDLGS_H
+
+#include "KoVariable.h"
+
+#include <kdialogbase.h>
+#include <qptrlist.h>
+#include <qstring.h>
+#include <klistview.h>
+#include <koffice_export.h>
+class QComboBox;
+class QVBox;
+class QResizeEvent;
+class KLineEdit;
+class QCloseEvent;
+
+/******************************************************************
+ *
+ * Class: KoVariableNameDia
+ *
+ ******************************************************************/
+
+class KoVariableNameDia : public KDialogBase
+{
+ Q_OBJECT
+
+public:
+ // For KWMailMergeVariableInsertDia
+ KoVariableNameDia( QWidget *parent );
+ // For kwview
+ KoVariableNameDia( QWidget *parent, const QPtrList<KoVariable> &vars );
+ QString getName() const;
+
+protected slots:
+ void textChanged ( const QString &_text );
+protected:
+ void init();
+
+ QComboBox *names;
+ QVBox *back;
+};
+
+/**
+ * Class: KoCustomVariablesListItem
+ * Used by KoCustomVariablesDia
+ * Represents an item in the listview, holding a lineedit to edit the value of the variable.
+ */
+class KoCustomVariablesListItem : public QListViewItem
+{
+public:
+ KoCustomVariablesListItem( QListView *parent );
+
+ void setVariable( KoCustomVariable *v );
+ KoCustomVariable *getVariable() const;
+
+ virtual void setup();
+ virtual int width ( const QFontMetrics & fm, const QListView * lv, int c ) const;
+ void update();
+
+ // Gets the value from the lineedit and sets it into the variable
+ void applyValue();
+
+protected:
+ KoCustomVariable *var;
+ KLineEdit *editWidget;
+};
+
+/**
+ * Class: KoCustomVariablesList
+ * The listview.
+ * Used by KoCustomVariablesDia
+ */
+class KoCustomVariablesList : public KListView
+{
+ Q_OBJECT
+
+public:
+ KoCustomVariablesList( QWidget *parent );
+
+ void setValues();
+ void updateItems();
+
+protected slots:
+ void columnSizeChange( int c, int os, int ns );
+ void sectionClicked( int c );
+
+private:
+ class Private;
+ Private* d; // currently unused
+};
+
+/**
+ * Class: KoCustomVariablesDia
+ * This dialog allows to set the value of the custom variables.
+ */
+class KOTEXT_EXPORT KoCustomVariablesDia : public KDialogBase
+{
+ Q_OBJECT
+
+public:
+ KoCustomVariablesDia( QWidget *parent, const QPtrList<KoVariable> &variables );
+protected slots:
+ void slotOk();
+
+protected:
+ QVBox *back;
+ KoCustomVariablesList *list;
+
+};
+
+/**
+ * Class: KoCustomVarDialog
+ * This dialog allows to add a new custom variable or
+ * to edit an existing one.
+ */
+class KOTEXT_EXPORT KoCustomVarDialog : public KDialogBase
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Add new variable
+ */
+ KoCustomVarDialog( QWidget *parent );
+ /**
+ * Edit existing variable @p var
+ */
+ KoCustomVarDialog( QWidget *parent, KoCustomVariable *var );
+
+ virtual QString name();
+ virtual QString value();
+
+protected slots:
+ void slotAddOk();
+ void slotEditOk();
+ void slotTextChanged(const QString&);
+
+protected:
+ QVBox *back;
+ KLineEdit *m_name;
+ KLineEdit *m_value;
+
+private:
+ void init();
+ KoCustomVariable *m_var;
+};
+
+#endif
diff --git a/lib/kotext/KoDecorationTab.cpp b/lib/kotext/KoDecorationTab.cpp
new file mode 100644
index 00000000..57837dbc
--- /dev/null
+++ b/lib/kotext/KoDecorationTab.cpp
@@ -0,0 +1,150 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001, 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoDecorationTab.h"
+#include <KoGlobal.h>
+
+#include <kcolorbutton.h>
+#include <kpushbutton.h>
+#include <knuminput.h>
+#include <klocale.h>
+
+#include <qbuttongroup.h>
+
+#include "KoDecorationTab.moc"
+
+KoDecorationTab::KoDecorationTab( QWidget* parent, const char* name, WFlags fl )
+ : KoDecorationTabBase( parent, name, fl )
+{
+ shadowDistanceKDoubleNumInput->setRange(0, 9, 0.5, false);
+
+ connect( textKColorButton, SIGNAL( changed( const QColor& ) ), this, SIGNAL( fontColorChanged( const QColor& ) ) );
+ connect( backgroundKColorButton, SIGNAL( changed( const QColor& ) ), this, SIGNAL( backgroundColorChanged( const QColor& ) ) );
+ connect( shadowKColorButton, SIGNAL( changed( const QColor& ) ), this, SIGNAL( shadowColorChanged( const QColor& ) ) );
+ connect( shadowDistanceKDoubleNumInput, SIGNAL( valueChanged( double ) ), this, SIGNAL( shadowDistanceChanged( double ) ) );
+ connect( shadowDirectionButtonGroup, SIGNAL( clicked( int ) ), this, SIGNAL( shadowDirectionChanged( int ) ) );
+}
+
+KoDecorationTab::~KoDecorationTab()
+{
+}
+
+QColor KoDecorationTab::getTextColor() const
+{
+ return textKColorButton->color();
+}
+
+QColor KoDecorationTab::getBackgroundColor() const
+{
+ return backgroundKColorButton->color();
+}
+
+double KoDecorationTab::getShadowDistanceX() const
+{
+ short int sd = shadowDirectionButtonGroup->selectedId();
+ double dist = shadowDistanceKDoubleNumInput->value();
+ return shadowDistanceX( sd, dist );
+}
+
+double KoDecorationTab::getShadowDistanceY() const
+{
+ short int sd = shadowDirectionButtonGroup->selectedId();
+ double dist = shadowDistanceKDoubleNumInput->value();
+ return shadowDistanceY( sd, dist );
+}
+
+QColor KoDecorationTab::getShadowColor() const
+{
+ return shadowKColorButton->color();
+}
+
+void KoDecorationTab::setTextColor( const QColor &color )
+{
+ textKColorButton->setColor( color );
+}
+
+void KoDecorationTab::setBackgroundColor( const QColor &color )
+{
+ backgroundKColorButton->setColor( color );
+}
+
+void KoDecorationTab::setShadow( double shadowDistanceX, double shadowDistanceY, const QColor& shadowColor )
+{
+ short int sd = SD_RIGHT_UP;
+ double dist = 0.0;
+
+ if ( shadowDistanceX > 0 ) // right
+ if ( shadowDistanceY == 0 )
+ sd = SD_RIGHT;
+ else
+ sd = shadowDistanceY > 0 ? SD_RIGHT_BOTTOM : SD_RIGHT_UP;
+ else if ( shadowDistanceX == 0 ) // top/bottom
+ sd = shadowDistanceY > 0 ? SD_BOTTOM : SD_UP;
+ else // left
+ if ( shadowDistanceY == 0 )
+ sd = SD_LEFT;
+ else
+ sd = shadowDistanceY > 0 ? SD_LEFT_BOTTOM : SD_LEFT_UP;
+
+ shadowDirectionButtonGroup->setButton( sd );
+
+ dist = QMAX( QABS(shadowDistanceX), QABS(shadowDistanceY) );
+ shadowDistanceKDoubleNumInput->setValue( dist );
+
+ shadowKColorButton->setColor( shadowColor.isValid() ? shadowColor: gray );
+
+}
+
+double KoDecorationTab::shadowDistanceX( short int sd, double dist ) const
+{
+ switch ( sd )
+ {
+ case SD_LEFT_BOTTOM:
+ case SD_LEFT:
+ case SD_LEFT_UP:
+ return - dist;
+ case SD_UP:
+ case SD_BOTTOM:
+ return 0;
+ case SD_RIGHT_UP:
+ case SD_RIGHT:
+ case SD_RIGHT_BOTTOM:
+ return dist;
+ }
+ return 0;
+}
+
+double KoDecorationTab::shadowDistanceY( short int sd, double dist ) const
+{
+ switch ( sd )
+ {
+ case SD_LEFT_UP:
+ case SD_UP:
+ case SD_RIGHT_UP:
+ return - dist;
+ case SD_LEFT:
+ case SD_RIGHT:
+ return 0;
+ case SD_LEFT_BOTTOM:
+ case SD_BOTTOM:
+ case SD_RIGHT_BOTTOM:
+ return dist;
+ }
+ return 0;
+}
diff --git a/lib/kotext/KoDecorationTab.h b/lib/kotext/KoDecorationTab.h
new file mode 100644
index 00000000..e50a06c9
--- /dev/null
+++ b/lib/kotext/KoDecorationTab.h
@@ -0,0 +1,70 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001,2002,2003 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __kohigdecorationtab_h__
+#define __kohigdecorationtab_h__
+
+#include <kodecorationtabbase.h>
+
+#include <qcolor.h>
+
+class KoDecorationTab : public KoDecorationTabBase
+{
+ Q_OBJECT
+
+public:
+ KoDecorationTab( QWidget* parent=0, const char* name=0, WFlags fl=0 );
+ ~KoDecorationTab();
+
+ QColor getTextColor() const;
+ QColor getBackgroundColor() const;
+ double getShadowDistanceX() const;
+ double getShadowDistanceY() const;
+ QColor getShadowColor() const;
+
+ void setTextColor( const QColor &color );
+ void setBackgroundColor( const QColor &color );
+ void setShadow( double shadowDistanceX, double shadowDistanceY, const QColor& shadowColor );
+
+signals:
+ void fontColorChanged( const QColor& );
+ void backgroundColorChanged( const QColor& );
+ void shadowColorChanged( const QColor& );
+ void shadowDistanceChanged( double );
+ void shadowDirectionChanged( int );
+ void shadowChanged();
+
+protected:
+ enum {
+ SD_LEFT_UP = 1,
+ SD_UP = 2,
+ SD_RIGHT_UP = 3,
+ SD_RIGHT = 4,
+ SD_RIGHT_BOTTOM = 5,
+ SD_BOTTOM = 6,
+ SD_LEFT_BOTTOM = 7,
+ SD_LEFT = 8
+ } ShadowDirection;
+
+ double shadowDistanceX( short int sd, double dist ) const;
+ double shadowDistanceY( short int sd, double dist ) const;
+
+};
+
+#endif
diff --git a/lib/kotext/KoFontDia.cpp b/lib/kotext/KoFontDia.cpp
new file mode 100644
index 00000000..39d6017f
--- /dev/null
+++ b/lib/kotext/KoFontDia.cpp
@@ -0,0 +1,305 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001, 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoFontDia.h"
+
+#include <qvbox.h>
+#include <qhbox.h>
+
+#include "KoRichText.h"
+
+#include <kcolordialog.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include <qgroupbox.h>
+#include <qpushbutton.h>
+#include <qtabwidget.h>
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+#include <knuminput.h>
+#include <KoGlobal.h>
+#include <qvgroupbox.h>
+#include <qvbox.h>
+#include <qhgroupbox.h>
+#include <qhbuttongroup.h>
+#include <kcolorbutton.h>
+#include <kiconloader.h>
+
+KoFontDia::KoFontDia( const KoTextFormat& initialFormat,
+ KSpell2::Broker::Ptr broker, QWidget* parent, const char* name )
+ : KDialogBase( parent, name, true,
+ i18n("Select Font"), Ok|Cancel|User1|Apply, Ok ),
+ m_initialFormat(initialFormat),
+ m_changedFlags(KoTextFormat::NoFlags)
+{
+ setButtonText( KDialogBase::User1, i18n("&Reset") );
+
+ QVBox *mainWidget = new QVBox( this );
+ QHBox *mainHBox = new QHBox( mainWidget );
+
+ QTabWidget *fontTabWidget = new QTabWidget( mainHBox );
+
+ // Font tab
+ fontTab = new KoFontTab( KFontChooser::SmoothScalableFonts, this );
+ fontTabWidget->addTab( fontTab, i18n( "Font" ) );
+
+ connect( fontTab, SIGNAL( familyChanged() ), this, SLOT( slotFontFamilyChanged() ) );
+ connect( fontTab, SIGNAL( boldChanged() ), this, SLOT( slotFontBoldChanged() ) );
+ connect( fontTab, SIGNAL( italicChanged() ), this, SLOT( slotFontItalicChanged() ) );
+ connect( fontTab, SIGNAL( sizeChanged() ), this, SLOT( slotFontSizeChanged() ) );
+
+ //Highlighting tab
+ highlightingTab = new KoHighlightingTab( this );
+ fontTabWidget->addTab( highlightingTab, i18n( "Highlighting" ) );
+
+ connect( highlightingTab, SIGNAL( underlineChanged( int ) ), this, SLOT( slotUnderlineChanged( int ) ) );
+ connect( highlightingTab, SIGNAL( underlineStyleChanged( int ) ), this, SLOT( slotUnderlineStyleChanged( int ) ) );
+ connect( highlightingTab, SIGNAL( underlineColorChanged( const QColor & ) ), this, SLOT( slotUnderlineColorChanged( const QColor & ) ) );
+ connect( highlightingTab, SIGNAL( strikethroughChanged( int ) ), this, SLOT( slotStrikethroughChanged( int ) ) );
+ connect( highlightingTab, SIGNAL( strikethroughStyleChanged( int ) ), this, SLOT( slotStrikethroughStyleChanged( int ) ) );
+ connect( highlightingTab, SIGNAL( wordByWordChanged( bool ) ), this, SLOT( slotWordByWordChanged( bool ) ) );
+ connect( highlightingTab, SIGNAL( capitalisationChanged( int ) ), this, SLOT( slotCapitalisationChanged( int ) ) );
+
+ //Decoratio tab
+ decorationTab = new KoDecorationTab( this );
+ fontTabWidget->addTab( decorationTab, i18n( "Decoration" ) );
+
+ connect( decorationTab, SIGNAL( fontColorChanged( const QColor& ) ), this, SLOT( slotFontColorChanged( const QColor& ) ) );
+ connect( decorationTab, SIGNAL( backgroundColorChanged( const QColor& ) ), this, SLOT( slotBackgroundColorChanged( const QColor& ) ) );
+ connect( decorationTab, SIGNAL( shadowColorChanged( const QColor& ) ), this, SLOT( slotShadowColorChanged( const QColor& ) ) );
+ connect( decorationTab, SIGNAL( shadowDistanceChanged( double ) ), this, SLOT( slotShadowDistanceChanged( double ) ) );
+ connect( decorationTab, SIGNAL( shadowDirectionChanged( int ) ), this, SLOT( slotShadowDirectionChanged( int ) ) );
+
+ //Layout tab
+ layoutTab = new KoLayoutTab( true, this );
+ fontTabWidget->addTab( layoutTab, i18n( "Layout" ) );
+ connect( layoutTab, SIGNAL( subSuperScriptChanged() ), this, SLOT( slotSubSuperChanged() ) );;
+ connect( layoutTab, SIGNAL( offsetChanged( int ) ), this, SLOT( slotOffsetChanged( int ) ) );
+ connect( layoutTab, SIGNAL( relativeSizeChanged( double ) ), this, SLOT( slotRelativeSizeChanged( double ) ) );
+ connect( layoutTab, SIGNAL( hyphenationChanged( bool ) ), this, SLOT( slotHyphenationChanged( bool ) ) );
+
+ //Language tab
+ languageTab = new KoLanguageTab( broker, this );
+ fontTabWidget->addTab( languageTab, i18n( "Language" ) );
+ connect( languageTab, SIGNAL( languageChanged() ), this, SLOT( slotLanguageChanged() ) );
+
+ //Related properties List View
+ //relatedPropertiesListView = new KListView( mainHBox );
+
+ //Preview
+ fontDiaPreview = new KoFontDiaPreview( mainWidget );
+
+ setMainWidget( mainWidget );
+
+ init();
+}
+
+void KoFontDia::init()
+{
+ connect( this, SIGNAL( user1Clicked() ), this, SLOT(slotReset()) );
+
+ slotReset();
+}
+
+KoTextFormat KoFontDia::newFormat() const
+{
+ return KoTextFormat( fontTab->getSelection(),
+ layoutTab->getSubSuperScript(),
+ decorationTab->getTextColor(),
+ decorationTab->getBackgroundColor(),
+ highlightingTab->getUnderlineColor(),
+ highlightingTab->getUnderline(),
+ highlightingTab->getUnderlineStyle(),
+ highlightingTab->getStrikethrough(),
+ highlightingTab->getStrikethroughStyle(),
+ highlightingTab->getCapitalisation(),
+ languageTab->getLanguage(),
+ layoutTab->getRelativeTextSize(),
+ layoutTab->getOffsetFromBaseline(),
+ highlightingTab->getWordByWord(),
+ layoutTab->getAutoHyphenation(),
+ decorationTab->getShadowDistanceX(),
+ decorationTab->getShadowDistanceY(),
+ decorationTab->getShadowColor()
+ );
+}
+
+void KoFontDia::slotApply()
+{
+ emit applyFont();
+}
+
+void KoFontDia::slotOk()
+{
+ slotApply();
+ KDialogBase::slotOk();
+}
+
+void KoFontDia::slotReset()
+{
+ fontTab->setSelection( m_initialFormat.font() );
+ highlightingTab->setUnderline( m_initialFormat.underlineType() );
+ highlightingTab->setUnderlineStyle( m_initialFormat.underlineStyle() );
+ highlightingTab->setUnderlineColor( m_initialFormat.textUnderlineColor() );
+ highlightingTab->setStrikethrough( m_initialFormat.strikeOutType() );
+ highlightingTab->setStrikethroughStyle( m_initialFormat.strikeOutStyle() );
+ highlightingTab->setWordByWord( m_initialFormat.wordByWord() );
+ highlightingTab->setCapitalisation( m_initialFormat.attributeFont() );
+ decorationTab->setTextColor( m_initialFormat.color() );
+ decorationTab->setBackgroundColor( m_initialFormat.textBackgroundColor() );
+ decorationTab->setShadow( m_initialFormat.shadowDistanceX(), m_initialFormat.shadowDistanceY(), m_initialFormat.shadowColor() );
+ layoutTab->setSubSuperScript( m_initialFormat.vAlign(), m_initialFormat.offsetFromBaseLine(), m_initialFormat.relativeTextSize() );
+ layoutTab->setAutoHyphenation( m_initialFormat.hyphenation() );
+ languageTab->setLanguage( m_initialFormat.language() );
+}
+
+void KoFontDia::slotFontFamilyChanged()
+{
+ m_changedFlags |= KoTextFormat::Family;
+ fontDiaPreview->setFont( fontTab->getSelection() );
+}
+
+void KoFontDia::slotFontBoldChanged()
+{
+ m_changedFlags |= KoTextFormat::Bold;
+ fontDiaPreview->setFont( fontTab->getSelection() );
+}
+
+void KoFontDia::slotFontItalicChanged()
+{
+ m_changedFlags |= KoTextFormat::Italic;
+ fontDiaPreview->setFont( fontTab->getSelection() );
+}
+
+void KoFontDia::slotFontSizeChanged()
+{
+ m_changedFlags |= KoTextFormat::Size;
+ fontDiaPreview->setFont( fontTab->getSelection() );
+}
+
+void KoFontDia::slotFontColorChanged( const QColor& color )
+{
+ m_changedFlags |= KoTextFormat::Color;
+ fontDiaPreview->setFontColor( color );
+}
+
+void KoFontDia::slotBackgroundColorChanged( const QColor& color )
+{
+ m_changedFlags |= KoTextFormat::TextBackgroundColor;
+ fontDiaPreview->setBackgroundColor( color );
+}
+
+void KoFontDia::slotCapitalisationChanged( int item )
+{
+ m_changedFlags |= KoTextFormat::Attribute;
+ fontDiaPreview->setCapitalisation( item );
+}
+
+void KoFontDia::slotUnderlineChanged( int item )
+{
+ m_changedFlags |= KoTextFormat::ExtendUnderLine;
+ if ( !item ) fontDiaPreview->setUnderlining( item, 0, Qt::black, false );
+ else fontDiaPreview->setUnderlining( item, highlightingTab->getUnderlineStyle(), highlightingTab->getUnderlineColor(), highlightingTab->getWordByWord() );
+}
+
+void KoFontDia::slotUnderlineStyleChanged( int item )
+{
+ m_changedFlags |= KoTextFormat::ExtendUnderLine;
+ if ( !highlightingTab->getUnderline() ) fontDiaPreview->setUnderlining( 0, 0, Qt::black, false );
+ else fontDiaPreview->setUnderlining( highlightingTab->getUnderline(), item, highlightingTab->getUnderlineColor(), highlightingTab->getWordByWord() );
+}
+
+void KoFontDia::slotUnderlineColorChanged( const QColor &color )
+{
+ m_changedFlags |= KoTextFormat::ExtendUnderLine;
+ if ( !highlightingTab->getUnderline() ) fontDiaPreview->setUnderlining( 0, 0, Qt::black, false );
+ else fontDiaPreview->setUnderlining( highlightingTab->getUnderline(), highlightingTab->getUnderlineStyle(), color, highlightingTab->getWordByWord() );
+}
+
+void KoFontDia::slotWordByWordChanged( bool state )
+{
+ m_changedFlags |= KoTextFormat::WordByWord;
+ fontDiaPreview->setWordByWord( state );
+}
+
+void KoFontDia::slotStrikethroughChanged( int item )
+{
+ m_changedFlags |= KoTextFormat::StrikeOut;
+ if ( !item ) fontDiaPreview->setStrikethrough( item, 0, false );
+ else fontDiaPreview->setStrikethrough( item, highlightingTab->getStrikethroughStyle(), highlightingTab->getWordByWord() );
+}
+
+void KoFontDia::slotStrikethroughStyleChanged( int item )
+{
+ m_changedFlags |= KoTextFormat::StrikeOut;
+ if ( !highlightingTab->getStrikethrough() ) fontDiaPreview->setStrikethrough( 0, 0, false );
+ else fontDiaPreview->setStrikethrough( highlightingTab->getStrikethrough(), item, highlightingTab->getWordByWord() );
+}
+
+void KoFontDia::slotShadowDistanceChanged( double )
+{
+ m_changedFlags |= KoTextFormat::ShadowText;
+ fontDiaPreview->setShadow( decorationTab->getShadowDistanceX(), decorationTab->getShadowDistanceY(), decorationTab->getShadowColor() );
+}
+
+void KoFontDia::slotShadowDirectionChanged( int )
+{
+ m_changedFlags |= KoTextFormat::ShadowText;
+ fontDiaPreview->setShadow( decorationTab->getShadowDistanceX(), decorationTab->getShadowDistanceY(), decorationTab->getShadowColor() );
+}
+
+void KoFontDia::slotShadowColorChanged( const QColor & )
+{
+ m_changedFlags |= KoTextFormat::ShadowText;
+ fontDiaPreview->setShadow( decorationTab->getShadowDistanceX(), decorationTab->getShadowDistanceY(), decorationTab->getShadowColor() );
+}
+
+void KoFontDia::slotSubSuperChanged()
+{
+ m_changedFlags |= KoTextFormat::VAlign;
+ fontDiaPreview->setSubSuperscript( layoutTab->getSubSuperScript(), layoutTab->getOffsetFromBaseline(), layoutTab->getRelativeTextSize() );
+}
+
+void KoFontDia::slotOffsetChanged( int offset )
+{
+ m_changedFlags |= KoTextFormat::OffsetFromBaseLine;
+ fontDiaPreview->setSubSuperscript( layoutTab->getSubSuperScript(), offset, layoutTab->getRelativeTextSize() );
+}
+
+void KoFontDia::slotRelativeSizeChanged( double relativeSize )
+{
+ m_changedFlags |= KoTextFormat::VAlign;
+ fontDiaPreview->setSubSuperscript( layoutTab->getSubSuperScript(), layoutTab->getOffsetFromBaseline(), relativeSize );
+}
+
+void KoFontDia::slotHyphenationChanged( bool )
+{
+ m_changedFlags |= KoTextFormat::Hyphenation;
+}
+
+void KoFontDia::slotLanguageChanged()
+{
+ m_changedFlags |= KoTextFormat::Language;
+}
+
+#include "KoFontDia.moc"
+
diff --git a/lib/kotext/KoFontDia.h b/lib/kotext/KoFontDia.h
new file mode 100644
index 00000000..fa43dc5e
--- /dev/null
+++ b/lib/kotext/KoFontDia.h
@@ -0,0 +1,101 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001,2002,2003 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __kofontdia_h__
+#define __kofontdia_h__
+
+#include <kfontdialog.h>
+#include <qtabwidget.h>
+#include <KoTextFormat.h>
+#include <qcheckbox.h>
+#include <koffice_export.h>
+
+#include "KoFontTab.h"
+#include "KoHighlightingTab.h"
+#include "KoDecorationTab.h"
+#include "KoLayoutTab.h"
+#include "KoLanguageTab.h"
+
+#include "KoFontDiaPreview.h"
+
+#include <kspell2/broker.h>
+
+class QComboBox;
+
+
+class KOTEXT_EXPORT KoFontDia : public KDialogBase
+{
+ Q_OBJECT
+public:
+
+ /// If your application supports spell-checking, pass here the KSpell2 Broker
+ /// so that the font dialog can show which languages are supported for spellchecking.
+ KoFontDia( const KoTextFormat& initialFormat,
+ KSpell2::Broker::Ptr broker = 0,
+ QWidget* parent = 0, const char* name = 0 );
+
+ int changedFlags() const { return m_changedFlags; }
+
+ KoTextFormat newFormat() const;
+
+protected slots:
+ void slotReset();
+ virtual void slotApply();
+ virtual void slotOk();
+ void slotFontFamilyChanged();
+ void slotFontBoldChanged();
+ void slotFontItalicChanged();
+ void slotFontSizeChanged();
+ void slotFontColorChanged( const QColor& color );
+ void slotBackgroundColorChanged( const QColor& color );
+ void slotCapitalisationChanged( int item );
+ void slotUnderlineChanged( int item );
+ void slotUnderlineStyleChanged( int item );
+ void slotUnderlineColorChanged( const QColor &color );
+ void slotStrikethroughChanged( int item );
+ void slotStrikethroughStyleChanged( int item );
+ void slotWordByWordChanged( bool state );
+ void slotShadowDistanceChanged( double distance );
+ void slotShadowDirectionChanged( int direction );
+ void slotShadowColorChanged( const QColor &color );
+ void slotSubSuperChanged();
+ void slotOffsetChanged( int offset );
+ void slotRelativeSizeChanged( double relativeSize );
+ void slotHyphenationChanged( bool state );
+ void slotLanguageChanged();
+
+signals:
+ void applyFont();
+
+private:
+ void init();
+
+ KoTextFormat m_initialFormat;
+ KoFontTab *fontTab;
+ KoHighlightingTab *highlightingTab;
+ KoDecorationTab *decorationTab;
+ KoLayoutTab *layoutTab;
+ KoLanguageTab *languageTab;
+ KoFontDiaPreview *fontDiaPreview;
+
+ int m_changedFlags;
+
+};
+
+#endif
diff --git a/lib/kotext/KoFontDiaPreview.cpp b/lib/kotext/KoFontDiaPreview.cpp
new file mode 100644
index 00000000..32473e43
--- /dev/null
+++ b/lib/kotext/KoFontDiaPreview.cpp
@@ -0,0 +1,442 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001, 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoFontDiaPreview.h"
+#include "KoGlobal.h"
+#include "KoTextFormat.h"
+
+#include <klocale.h>
+
+#include <qfontmetrics.h>
+#include <qrect.h>
+#include <qpainter.h>
+#include <qfont.h>
+#include <qstringlist.h>
+#include <qstring.h>
+#include <qregexp.h>
+
+#include <math.h>
+
+#include "KoFontDiaPreview.moc"
+
+KoFontDiaPreview::KoFontDiaPreview( QWidget* parent, const char* name , WFlags fl )
+ : QFrame( parent, name, fl )
+ ,m_text( i18n( "The quick brown dog jumps over the lazy cat." ) )
+ ,displayText( i18n( "The quick brown dog jumps over the lazy cat." ) )
+ ,m_font( KoGlobal::defaultFont() )
+ ,m_textColor( Qt::black )
+ ,m_backgroundColor( Qt::white )
+ ,m_shadowDistanceX( 0 )
+ ,m_shadowDistanceY( 0 )
+ ,m_shadowColor( Qt::black )
+ ,m_underlining( 0 )
+ ,m_underliningStyle( 0 )
+ ,m_underliningColor( Qt::black )
+ ,m_wordByWord( false )
+ ,m_strikethrough( 0 )
+ ,m_strikethroughStyle( 0 )
+ ,m_capitalisation( 0 )
+ ,m_subSuper( 0 )
+ ,m_offset( 0 )
+ ,m_relativeSize( 1 )
+
+{
+ setFrameStyle( QFrame::WinPanel | QFrame::Plain );
+ setBackgroundMode( PaletteBase );
+ setBackgroundColor( Qt::white );
+ setMinimumSize( 400, 100 );
+}
+
+KoFontDiaPreview::~KoFontDiaPreview()
+{
+}
+
+void KoFontDiaPreview::setText( const QString &text )
+{
+ m_text = text;
+ update();
+}
+
+void KoFontDiaPreview::setFont( const QFont &font )
+{
+ m_font = font;
+ m_fontSize = m_font.pointSize();
+ update();
+}
+
+void KoFontDiaPreview::setFontColor( const QColor &textColor )
+{
+ m_textColor = textColor;
+ update();
+}
+
+void KoFontDiaPreview::setBackgroundColor( const QColor &backgroundColor )
+{
+ m_backgroundColor = backgroundColor;
+ update();
+}
+
+void KoFontDiaPreview::setShadow( double sdx, double sdy, QColor shadowColor )
+{
+ m_shadowDistanceX = sdx;
+ m_shadowDistanceY = sdy;
+ m_shadowColor = shadowColor;
+ update();
+}
+
+void KoFontDiaPreview::setUnderlining( int underlining, int underliningStyle, const QColor underliningColor, bool wordByWord )
+{
+ m_underlining = underlining;
+ m_underliningStyle = underliningStyle;
+ m_underliningColor = underliningColor;
+ m_wordByWord = wordByWord;
+ update();
+}
+
+void KoFontDiaPreview::setWordByWord( bool wordByWord )
+{
+ m_wordByWord = wordByWord;
+ update();
+}
+
+void KoFontDiaPreview::setStrikethrough( int strikethrough, int strikethroughStyle, bool wordByWord )
+{
+ m_strikethrough = strikethrough;
+ m_strikethroughStyle = strikethroughStyle;
+ m_wordByWord = wordByWord;
+ update();
+}
+
+void KoFontDiaPreview::setCapitalisation( int capitalisation )
+{
+ m_capitalisation = capitalisation;
+ update();
+}
+
+void KoFontDiaPreview::setSubSuperscript( int subSuper, int offset, double relativeSize )
+{
+ m_subSuper = subSuper;
+ m_offset = offset;
+ m_relativeSize = relativeSize;
+ update();
+}
+
+QString KoFontDiaPreview::formatCapitalisation( const QString &string )
+{
+ switch ( m_capitalisation )
+ {
+ case KoTextFormat::ATT_NONE :
+ return string;
+ case KoTextFormat::ATT_UPPER :
+ return string.upper();
+ case KoTextFormat::ATT_LOWER :
+ return string.lower();
+ case KoTextFormat::ATT_SMALL_CAPS :
+ return string.upper();
+ default:
+ return string;
+ }
+}
+
+void KoFontDiaPreview::drawContents( QPainter* p )
+{
+ p->save();
+
+ // sort out the font to use
+
+ //Capitalisation
+ double capitalisationCoeff;
+ QFontMetrics fmCapitalisation( m_font );
+
+ switch ( m_capitalisation )
+ {
+ case KoTextFormat::ATT_NONE :
+ capitalisationCoeff = 1.0;
+ break;
+ case KoTextFormat::ATT_UPPER :
+ capitalisationCoeff = 1.0;
+ break;
+ case KoTextFormat::ATT_LOWER :
+ capitalisationCoeff = 1.0;
+ break;
+ case KoTextFormat::ATT_SMALL_CAPS :
+ capitalisationCoeff = ((double)fmCapitalisation.boundingRect("x").height()/(double)fmCapitalisation.boundingRect("X").height());
+ break;
+ default:
+ capitalisationCoeff = 1.0;
+ break;
+ }
+ //Set the display font. m_font is untouched by the modifications of capitalisation
+ displayFont = m_font;
+ displayFont.setPointSizeFloat( m_font.pointSize() * capitalisationCoeff );
+
+// format the string in case Small Caps
+ displayText = formatCapitalisation( m_text );
+
+// draw the stuff
+ QFontMetrics fm( displayFont );
+ QRect br = fm.boundingRect( contentsRect().x(), contentsRect().y(), contentsRect().width(), contentsRect().height(), Qt::AlignCenter | Qt::WordBreak, displayText );
+
+ if ( br.width() > contentsRect().width() || br.height() > contentsRect().height() ) {
+ displayText = formatCapitalisation( i18n( "Font too large for the preview pane" ) );
+ displayFont.setPointSizeFloat( 14 * capitalisationCoeff );
+ }
+
+ QFontMetrics fm1( displayFont );
+ br = fm1.boundingRect( contentsRect().x(), contentsRect().y(), contentsRect().width(), contentsRect().height(), Qt::AlignCenter | Qt::WordBreak, displayText );
+
+ int xorg = qRound( ( contentsRect().width() - br.width() ) / 2 ) + contentsRect().x() - fm1.leftBearing( displayText.at( 0 ) );
+
+ // sub / superscript modifications
+ int subSuperOffset = 0;
+ switch ( m_subSuper ) {
+ case 0: //normal
+ displayFont.setPointSizeFloat( displayFont.pointSize() * m_relativeSize );
+ subSuperOffset = -( m_offset );
+ break;
+ case 1: //subscript
+ displayFont.setPointSizeFloat( displayFont.pointSize() * m_relativeSize );
+ subSuperOffset = fm1.height() / 6;
+ break;
+ case 2: //superscript
+ displayFont.setPointSizeFloat( displayFont.pointSize() * m_relativeSize );
+ subSuperOffset = 0 - ( fm1.height() / 2 );
+ break;
+ default:
+ displayFont.setPointSizeFloat( displayFont.pointSize() * m_relativeSize );
+ subSuperOffset = 0 - m_offset;
+ break;
+ }
+
+ QFontMetrics fm2( displayFont );
+ br = fm2.boundingRect( contentsRect().x(), contentsRect().y(), contentsRect().width(), contentsRect().height(), Qt::AlignCenter | Qt::WordBreak, displayText );
+ int yorg = qRound( ( contentsRect().height() - br.height() ) / 2 ) + fm1.ascent() + subSuperOffset;
+ int sxorg = xorg + int( m_shadowDistanceX );
+ int syorg = yorg + int( m_shadowDistanceY );
+ QStringList textWords = QStringList::split( " ", displayText );
+ int x = xorg;
+ int y = yorg;
+ int sx = sxorg;
+ int sy = syorg;
+ int bx= QMIN( x, sx );
+ int xend = bx;
+ int yUnderline;
+ int widthUnderline;
+ int thicknessUnderline;
+ int yStrikethrough;
+ int widthStrikethrough;
+ int thicknessStrikethrough;
+
+ p->setFont(displayFont );
+ p->setPen( m_textColor );
+ int count = 1;
+
+ for ( QStringList::iterator it = textWords.begin(); it != textWords.end(); ++it ) {
+ int boffset = 0;
+ if ( x + fm2.width( (*it) ) > contentsRect().width() ) {
+ y += fm1.lineSpacing();
+ sy += fm1.lineSpacing();
+ xend = x;
+ x = xorg;
+ sx = sxorg;
+ bx= QMIN( x, sx );
+ count = 1;
+ }
+ QString textDraw;
+ if ( (*it) == textWords.last() ) {
+ textDraw = (*it);
+ }
+ else {
+ textDraw = (*it) + " ";
+ }
+/*background*/
+ if ( count == 1 ) boffset = QABS( int( m_shadowDistanceX ) );
+ else boffset = 0;
+
+ if ( bx < xend && (bx + fm2.width( textDraw ) + boffset ) < xend && ( QMIN( y, sy ) - fm2.ascent() ) < ( QMIN( yorg, syorg ) - fm2.ascent() + fm2.height() + QABS( m_shadowDistanceY ) ) ) {
+ p->fillRect( bx, QMIN( yorg, syorg ) - fm2.ascent() + fm2.height() + QABS( int( m_shadowDistanceY ) ), fm2.width( textDraw ) + boffset , fm2.height() + QABS( int( m_shadowDistanceY ) ) - ( QMIN( yorg, syorg ) - QMIN( y, sy ) + fm2.height() + QABS( int( m_shadowDistanceY ) ) ), m_backgroundColor );
+ }
+ else if ( bx < xend && (bx + fm2.width( textDraw ) + boffset ) >= xend && ( QMIN( y, sy ) - fm2.ascent() ) < ( QMIN( yorg, syorg ) - fm2.ascent() + fm2.height() + QABS( m_shadowDistanceY ) ) ) {
+ p->fillRect( bx, QMIN( yorg, syorg ) - fm2.ascent() + fm2.height() + QABS( int( m_shadowDistanceY ) ), xend - bx , fm2.height() + QABS( int( m_shadowDistanceY ) ) - ( QMIN( yorg, syorg ) - QMIN( y, sy ) + fm2.height() + QABS( int( m_shadowDistanceY ) ) ), m_backgroundColor );
+ p->fillRect( xend, QMIN( y, sy ) - fm2.ascent(), fm2.width( textDraw ) + boffset - xend + bx, fm2.height() + QABS( int( m_shadowDistanceY ) ), m_backgroundColor );
+ }
+ else {
+ p->fillRect( bx, QMIN( y, sy ) - fm2.ascent(), fm2.width( textDraw ) + boffset , fm2.height() + QABS( int( m_shadowDistanceY ) ), m_backgroundColor );
+ }
+
+ if ( count == 1 ) boffset = QABS( int( m_shadowDistanceX ) );
+ else boffset = 0;
+ bx += fm2.width( textDraw ) + boffset;//( count == 1 )?0:0;//QABS( m_shadowDistanceX ):0;
+/*shadow*/
+ if ( m_shadowDistanceX || m_shadowDistanceY )
+ {
+ p->save();
+ p->setPen( m_shadowColor );
+ p->drawText( sx, sy, textDraw );
+ p->restore();
+ }
+/*text*/
+ p->drawText( x, y, textDraw );
+/*underline*/
+ switch ( m_underlining ) {
+ case KoTextFormat::U_NONE:
+ break;
+ case KoTextFormat::U_SIMPLE:
+ yUnderline = y + fm2.descent();
+ ( m_wordByWord )? widthUnderline = fm2.width( (*it) ): widthUnderline = fm2.width( textDraw );
+ thicknessUnderline = 1;
+ drawUnderline( x, yUnderline, widthUnderline, thicknessUnderline, m_underliningColor, p );
+ break;
+ case KoTextFormat::U_DOUBLE:
+ yUnderline = y + fm2.descent();
+ ( m_wordByWord )? widthUnderline = fm2.width( (*it) ): widthUnderline = fm2.width( textDraw );
+ thicknessUnderline = 1;
+ drawUnderline( x, yUnderline, widthUnderline, thicknessUnderline, m_underliningColor, p );
+ yUnderline = y + qRound( fm2.descent() / 2 );
+ drawUnderline( x, yUnderline, widthUnderline, thicknessUnderline, m_underliningColor, p );
+ break;
+ case KoTextFormat::U_SIMPLE_BOLD:
+ yUnderline = y + fm2.descent();
+ ( m_wordByWord )? widthUnderline = fm2.width( (*it) ): widthUnderline = fm2.width( textDraw );
+ thicknessUnderline = qRound( displayFont.pointSize() / 10 ) + 1;
+ drawUnderline( x, yUnderline, widthUnderline, thicknessUnderline, m_underliningColor, p );
+ break;
+ case KoTextFormat::U_WAVE:
+ yUnderline = y + fm2.descent();
+ ( m_wordByWord )? widthUnderline = fm2.width( (*it) ): widthUnderline = fm2.width( textDraw );
+ thicknessUnderline = 1;
+ drawUnderlineWave( x, yUnderline, widthUnderline, thicknessUnderline, m_underliningColor, p );
+ break;
+ default:
+ break;
+ }
+/*Strikethrough*/
+ switch ( m_strikethrough ) {
+ case KoTextFormat::S_NONE:
+ break;
+ case KoTextFormat::S_SIMPLE:
+ yStrikethrough = y - qRound( fm2.ascent() / 3 );
+ ( m_wordByWord )? widthStrikethrough = fm2.width( (*it) ): widthStrikethrough = fm2.width( textDraw );
+ thicknessStrikethrough = 1;
+ drawStrikethrough( x, yStrikethrough, widthStrikethrough, thicknessStrikethrough, p );
+ break;
+ case KoTextFormat::S_DOUBLE:
+ yStrikethrough = y - qRound( fm2.ascent() / 4 );
+ ( m_wordByWord )? widthStrikethrough = fm2.width( (*it) ): widthStrikethrough = fm2.width( textDraw );
+ thicknessStrikethrough = 1;
+ drawStrikethrough( x, yStrikethrough, widthStrikethrough, thicknessStrikethrough, p );
+ yStrikethrough = y - 2 * qRound( fm2.ascent() / 4 );
+ drawStrikethrough( x, yStrikethrough, widthStrikethrough, thicknessStrikethrough, p );
+ break;
+ case KoTextFormat::S_SIMPLE_BOLD:
+ yStrikethrough = y - qRound( fm2.ascent() / 3 );
+ ( m_wordByWord )? widthStrikethrough = fm2.width( (*it) ): widthStrikethrough = fm2.width( textDraw );
+ thicknessStrikethrough = qRound( displayFont.pointSize() / 10 ) + 1;
+ drawStrikethrough( x, yStrikethrough, widthStrikethrough, thicknessStrikethrough, p );
+ break;
+ default:
+ break;
+ }
+ x += fm2.width( textDraw );
+ sx += fm2.width( textDraw );
+ count++;
+ }
+
+ p->restore();
+}
+
+void KoFontDiaPreview::drawUnderline( int x, int y, int width, int thickness, QColor & color, QPainter *p )
+{
+ p->save();
+ switch ( m_underliningStyle ) {
+ case KoTextFormat::U_SOLID:
+ p->setPen( QPen( color, thickness, Qt::SolidLine ) );
+ break;
+ case KoTextFormat::U_DASH:
+ p->setPen( QPen( color, thickness, Qt::DashLine ) );
+ break;
+ case KoTextFormat::U_DOT:
+ p->setPen( QPen( color, thickness, Qt::DotLine ) );
+ break;
+ case KoTextFormat::U_DASH_DOT:
+ p->setPen( QPen( color, thickness, Qt::DashDotLine ) );
+ break;
+ case KoTextFormat::U_DASH_DOT_DOT:
+ p->setPen( QPen( color, thickness, Qt::DashDotDotLine ) );
+ break;
+ default:
+ p->setPen( QPen( color, thickness, Qt::SolidLine ) );
+ }
+ p->drawLine( x, y, x+ width, y );
+ p->restore();
+}
+
+void KoFontDiaPreview::drawUnderlineWave( int x, int y, int width, int thickness, QColor & color, QPainter *p )
+{
+ p->save();
+ int offset = 2 * thickness;
+ QPen pen(color, thickness, Qt::SolidLine);
+ pen.setCapStyle(Qt::RoundCap);
+ p->setPen(pen);
+ double anc=acos(1.0-2*(static_cast<double>(offset-(x)%offset)/static_cast<double>(offset)))/3.1415*180;
+ int pos=1;
+ //set starting position
+ if(2*((x/offset)/2)==x/offset)
+ pos*=-1;
+ //draw first part of wave
+ p->drawArc( (x/offset)*offset, y, offset, offset, 0, -qRound(pos*anc*16) );
+ //now the main part
+ int zigzag_x = (x/offset+1)*offset;
+ for ( ; zigzag_x + offset <= width+x; zigzag_x += offset)
+ {
+ p->drawArc( zigzag_x, y, offset, offset, 0, pos*180*16 );
+ pos*=-1;
+ }
+ //and here we finish
+ anc=acos(1.0-2*(static_cast<double>((x+width)%offset)/static_cast<double>(offset)))/3.1415*180;
+ p->drawArc( zigzag_x, y, offset, offset, 180*16, -qRound(pos*anc*16) );
+ p->restore();
+}
+
+void KoFontDiaPreview::drawStrikethrough( int x, int y, int width, int thickness, QPainter *p )
+{
+ p->save();
+ switch ( m_strikethroughStyle ) {
+ case KoTextFormat::S_SOLID:
+ p->setPen( QPen( Qt::black, thickness, Qt::SolidLine ) );
+ break;
+ case KoTextFormat::S_DASH:
+ p->setPen( QPen( Qt::black, thickness, Qt::DashLine ) );
+ break;
+ case KoTextFormat::S_DOT:
+ p->setPen( QPen( Qt::black, thickness, Qt::DotLine ) );
+ break;
+ case KoTextFormat::S_DASH_DOT:
+ p->setPen( QPen( Qt::black, thickness, Qt::DashDotLine ) );
+ break;
+ case KoTextFormat::S_DASH_DOT_DOT:
+ p->setPen( QPen( Qt::black, thickness, Qt::DashDotDotLine ) );
+ break;
+ default:
+ p->setPen( QPen( Qt::black, thickness, Qt::SolidLine ) );
+ }
+ p->drawLine( x, y, x+ width, y );
+ p->restore();
+}
+
diff --git a/lib/kotext/KoFontDiaPreview.h b/lib/kotext/KoFontDiaPreview.h
new file mode 100644
index 00000000..2b0411a7
--- /dev/null
+++ b/lib/kotext/KoFontDiaPreview.h
@@ -0,0 +1,84 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001,2002,2003 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __kofontdiapreview_h__
+#define __kofontdiapreview_h__
+
+#include <qframe.h>
+#include <qstring.h>
+#include <qcolor.h>
+#include <qfont.h>
+#include <qpainter.h>
+
+/**
+ * The font dialog Preview
+ */
+class KoFontDiaPreview : public QFrame
+{
+ Q_OBJECT
+public:
+ /**
+ * Constructor
+ */
+ KoFontDiaPreview( QWidget* parent =0, const char* name = 0, WFlags fl = 0 );
+ ~KoFontDiaPreview();
+
+ void setText( const QString &text );
+ void setFont( const QFont &font );
+ void setFontColor( const QColor &textColor );
+ void setBackgroundColor( const QColor &backgroundColor );
+ void setShadow( double sdx, double sdy, QColor shadowColor );
+ void setUnderlining( int underlining, int underliningStyle, const QColor underliningColor, bool wordByWord );
+ void setWordByWord( bool wordByWord );
+ void setStrikethrough( int strikethrough, int strikethroughStylestrikethrough, bool wordByWord );
+ void setCapitalisation( int capitalisation );
+ void setSubSuperscript( int subSuper, int offset, double relativeSize );
+
+
+private:
+ void drawContents( QPainter* );
+
+ QString m_text;
+ QString displayText;
+ QFont m_font;
+ QFont displayFont;
+ int m_fontSize;
+ QColor m_textColor;
+ QColor m_backgroundColor;
+ double m_shadowDistanceX;
+ double m_shadowDistanceY;
+ QColor m_shadowColor;
+ int m_underlining;
+ int m_underliningStyle;
+ QColor m_underliningColor;
+ bool m_wordByWord;
+ int m_strikethrough;
+ int m_strikethroughStyle;
+ int m_capitalisation;
+ int m_subSuper;
+ int m_offset;
+ double m_relativeSize;
+
+ QString formatCapitalisation( const QString &string );
+ void drawUnderline( int x, int y, int width, int thickness, QColor & color, QPainter *p );
+ void drawUnderlineWave( int x, int y, int width, int thickness, QColor & color, QPainter *p );
+ void drawStrikethrough( int x, int y, int width, int thickness, QPainter *p );
+};
+
+#endif
diff --git a/lib/kotext/KoFontTab.cpp b/lib/kotext/KoFontTab.cpp
new file mode 100644
index 00000000..754e9174
--- /dev/null
+++ b/lib/kotext/KoFontTab.cpp
@@ -0,0 +1,56 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001, 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoFontTab.h"
+
+KoFontTab::KoFontTab( uint fontListCriteria, QWidget* parent, const char* name, WFlags fl )
+ : KoFontTabBase( parent, name, fl )
+{
+ QStringList list;
+ KFontChooser_local::getFontList(list, fontListCriteria);
+
+ characterFont->setFamilyList( list );
+ comparisonFont = characterFont->font();
+ connect( characterFont, SIGNAL( fontSelected( const QFont & ) ), this, SLOT( slotFontChanged( const QFont & ) ) );
+}
+
+KoFontTab::~KoFontTab()
+{
+}
+
+QFont KoFontTab::getSelection()
+{
+ return characterFont->font();
+}
+
+void KoFontTab::setSelection( const QFont &font )
+{
+ characterFont->setFont( font );
+}
+
+void KoFontTab::slotFontChanged( const QFont &font )
+{
+ if ( comparisonFont.family() != font.family() ) emit familyChanged();
+ if ( comparisonFont.bold() != font.bold() ) emit boldChanged();
+ if ( comparisonFont.italic() != font.italic() ) emit italicChanged();
+ if ( comparisonFont.pointSize() != font.pointSize() ) emit sizeChanged();
+ comparisonFont = font;
+}
+
+#include "KoFontTab.moc"
diff --git a/lib/kotext/KoFontTab.h b/lib/kotext/KoFontTab.h
new file mode 100644
index 00000000..4d6ff9c3
--- /dev/null
+++ b/lib/kotext/KoFontTab.h
@@ -0,0 +1,52 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001,2002,2003 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __kofonttab_h__
+#define __kofonttab_h__
+
+#include <kofonttabbase.h>
+#include <qfont.h>
+
+class KoFontTab : public KoFontTabBase
+{
+ Q_OBJECT
+
+public:
+ KoFontTab( uint fontListCriteria=0, QWidget* parent=0, const char* name=0, WFlags fl=0 );
+ ~KoFontTab();
+
+ QFont getSelection();
+
+public slots:
+ void setSelection( const QFont &font );
+
+signals:
+ void familyChanged();
+ void boldChanged();
+ void italicChanged();
+ void sizeChanged();
+
+private:
+ QFont comparisonFont;
+
+private slots:
+ void slotFontChanged( const QFont &font );
+};
+
+#endif
diff --git a/lib/kotext/KoHighlightingTab.cpp b/lib/kotext/KoHighlightingTab.cpp
new file mode 100644
index 00000000..8b90c5b5
--- /dev/null
+++ b/lib/kotext/KoHighlightingTab.cpp
@@ -0,0 +1,151 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001, 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoHighlightingTab.h"
+#include "KoTextFormat.h"
+
+#include <qstringlist.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+
+#include <kcombobox.h>
+#include <kcolorbutton.h>
+
+#include "KoHighlightingTab.moc"
+
+
+KoHighlightingTab::KoHighlightingTab( QWidget* parent, const char* name, WFlags fl )
+ : KoHighlightingTabBase( parent, name, fl )
+{
+ underlineStyleKComboBox->insertStringList( KoTextFormat::underlineTypeList() );
+ underlineLineStyleKComboBox->insertStringList( KoTextFormat::underlineStyleList() );
+ strikethroughStyleKComboBox->insertStringList( KoTextFormat::strikeOutTypeList() );
+ strikethroughLineStyleKComboBox->insertStringList( KoTextFormat::strikeOutStyleList() );
+
+ capitalisationButtonGroup->setColumnLayout( 3, Qt::Horizontal );
+ QStringList attributes = KoTextFormat::fontAttributeList();
+ for ( QStringList::Iterator it = attributes.begin(); it != attributes.end(); ++it ) {
+ capitalisationButtonGroup->insert( new QRadioButton( *it, capitalisationButtonGroup ) );
+ }
+ capitalisationButtonGroup->setButton( 0 );
+
+ connect( underlineStyleKComboBox, SIGNAL( activated( int ) ), this, SLOT( slotUnderlineChanged( int ) ) );
+ connect( underlineLineStyleKComboBox, SIGNAL( activated( int ) ), this, SIGNAL( underlineStyleChanged( int ) ) );
+ connect( underlineKColorButton, SIGNAL( changed( const QColor & ) ), this, SIGNAL( underlineColorChanged( const QColor & ) ) );
+ connect( strikethroughStyleKComboBox, SIGNAL( activated( int ) ), this, SLOT( slotStrikethroughChanged( int ) ) );
+ connect( strikethroughLineStyleKComboBox, SIGNAL( activated( int ) ), this, SIGNAL( strikethroughStyleChanged( int ) ) );
+ connect( underlineWordByWordCheckBox, SIGNAL( toggled( bool ) ), this, SIGNAL( wordByWordChanged( bool ) ) );
+ connect( capitalisationButtonGroup, SIGNAL( clicked( int ) ), this, SIGNAL( capitalisationChanged( int ) ) );
+}
+
+KoHighlightingTab::~KoHighlightingTab()
+{
+}
+
+KoTextFormat::UnderlineType KoHighlightingTab::getUnderline() const
+{
+ return static_cast<KoTextFormat::UnderlineType>( underlineStyleKComboBox->currentItem() );
+}
+
+KoTextFormat::UnderlineStyle KoHighlightingTab::getUnderlineStyle() const
+{
+ return static_cast<KoTextFormat::UnderlineStyle>( underlineLineStyleKComboBox->currentItem() );
+}
+
+QColor KoHighlightingTab::getUnderlineColor() const
+{
+ return underlineKColorButton->color();
+}
+
+KoTextFormat::StrikeOutType KoHighlightingTab::getStrikethrough() const
+{
+ return static_cast<KoTextFormat::StrikeOutType>( strikethroughStyleKComboBox->currentItem() );
+}
+
+KoTextFormat::StrikeOutStyle KoHighlightingTab::getStrikethroughStyle() const
+{
+ return static_cast<KoTextFormat::StrikeOutStyle>( strikethroughLineStyleKComboBox->currentItem() );
+}
+
+bool KoHighlightingTab::getWordByWord() const
+{
+ return underlineWordByWordCheckBox->isOn();
+}
+
+KoTextFormat::AttributeStyle KoHighlightingTab::getCapitalisation() const
+{
+ return static_cast<KoTextFormat::AttributeStyle>( capitalisationButtonGroup->selectedId() );
+}
+
+void KoHighlightingTab::setUnderline( KoTextFormat::UnderlineType item )
+{
+ underlineStyleKComboBox->setCurrentItem( static_cast<int>( item ) );
+ slotUnderlineChanged( static_cast<int>( item ) );
+}
+
+void KoHighlightingTab::setUnderlineStyle( KoTextFormat::UnderlineStyle item )
+{
+ underlineLineStyleKComboBox->setCurrentItem( static_cast<int>( item ) );
+ emit underlineStyleChanged( static_cast<int>( item ) );
+}
+
+void KoHighlightingTab::setUnderlineColor( const QColor &color )
+{
+ underlineKColorButton->setColor( color );
+}
+
+void KoHighlightingTab::setStrikethrough( int item )
+{
+ strikethroughStyleKComboBox->setCurrentItem( static_cast<int>( item ) );
+ slotStrikethroughChanged( static_cast<int>( item ) );
+}
+
+void KoHighlightingTab::setStrikethroughStyle( int item )
+{
+ strikethroughLineStyleKComboBox->setCurrentItem( static_cast<int>( item ) );
+ emit strikethroughStyleChanged( static_cast<int>( item ) );
+}
+
+void KoHighlightingTab::setWordByWord( bool state )
+{
+ underlineWordByWordCheckBox->setChecked( state );
+}
+
+void KoHighlightingTab::setCapitalisation( int item )
+{
+ capitalisationButtonGroup->setButton( static_cast<int>( item ) );
+ emit capitalisationChanged( static_cast<int>( item ) );
+}
+
+void KoHighlightingTab::slotUnderlineChanged( int item )
+{
+ underlineLineStyleKComboBox->setEnabled( item > 0 );
+ underlineKColorButton->setEnabled( item > 0 );
+ underlineWordByWordCheckBox->setEnabled( ( item > 0 ) || ( strikethroughStyleKComboBox->currentItem() > 0 ) );
+ emit underlineChanged( item );
+}
+
+void KoHighlightingTab::slotStrikethroughChanged( int item )
+{
+ strikethroughLineStyleKComboBox->setEnabled( item > 0 );
+ underlineWordByWordCheckBox->setEnabled( ( item > 0 ) || ( underlineStyleKComboBox->currentItem() > 0 ) );
+ emit strikethroughChanged( item );
+}
+
diff --git a/lib/kotext/KoHighlightingTab.h b/lib/kotext/KoHighlightingTab.h
new file mode 100644
index 00000000..3e0c261c
--- /dev/null
+++ b/lib/kotext/KoHighlightingTab.h
@@ -0,0 +1,67 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001,2002,2003 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __kohighlightingtab_h__
+#define __kohighlightingtab_h__
+
+#include <kohighlightingtabbase.h>
+#include <KoTextFormat.h>
+
+#include <qcolor.h>
+
+class KoHighlightingTab : public KoHighlightingTabBase
+{
+ Q_OBJECT
+
+public:
+ KoHighlightingTab( QWidget* parent=0, const char* name=0, WFlags fl=0 );
+ ~KoHighlightingTab();
+
+ KoTextFormat::UnderlineType getUnderline() const;
+ KoTextFormat::UnderlineStyle getUnderlineStyle() const;
+ QColor getUnderlineColor() const;
+ KoTextFormat::StrikeOutType getStrikethrough() const;
+ KoTextFormat::StrikeOutStyle getStrikethroughStyle() const;
+ bool getWordByWord() const;
+ KoTextFormat::AttributeStyle getCapitalisation() const;
+
+ void setUnderline( KoTextFormat::UnderlineType item );
+ void setUnderlineStyle( KoTextFormat::UnderlineStyle item );
+ void setUnderlineColor( const QColor &color );
+ void setStrikethrough( int item );
+ void setStrikethroughStyle( int item );
+ void setWordByWord( bool state );
+ void setCapitalisation( int item );
+
+signals:
+ void underlineChanged( int item );
+ void underlineStyleChanged( int item );
+ void underlineColorChanged( const QColor & );
+ void strikethroughChanged( int item );
+ void strikethroughStyleChanged( int item );
+ void wordByWordChanged( bool state );
+ void capitalisationChanged( int item );
+
+protected slots:
+ void slotUnderlineChanged( int item );
+ void slotStrikethroughChanged( int item );
+};
+
+#endif
+
diff --git a/lib/kotext/KoImportStyleDia.cpp b/lib/kotext/KoImportStyleDia.cpp
new file mode 100644
index 00000000..80be24ca
--- /dev/null
+++ b/lib/kotext/KoImportStyleDia.cpp
@@ -0,0 +1,126 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <klocale.h>
+#include <qvbox.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qlistbox.h>
+#include "KoImportStyleDia.h"
+
+#include <kdebug.h>
+#include <qlabel.h>
+
+KoImportStyleDia::KoImportStyleDia( KoStyleCollection* currentCollection, QWidget *parent, const char *name )
+ : KDialogBase( parent, name , true, "", Ok|Cancel|User1, Ok, true )
+{
+ setCaption( i18n("Import Styles") );
+ m_currentCollection = currentCollection;
+ QVBox *page = makeVBoxMainWidget();
+ new QLabel(i18n("Select styles to import:"), page);
+ m_listStyleName = new QListBox( page );
+ m_listStyleName->setSelectionMode( QListBox::Multi );
+ enableButtonOK( m_listStyleName->count() != 0 );
+ setButtonText( KDialogBase::User1, i18n("Load...") );
+ connect( this, SIGNAL( user1Clicked() ), this, SLOT(slotLoadFile()));
+ setInitialSize( QSize( 300, 400 ) );
+ setFocus();
+}
+
+KoImportStyleDia::~KoImportStyleDia()
+{
+}
+
+void KoImportStyleDia::generateStyleList()
+{
+ for (uint i = 0; i< m_listStyleName->count();i++)
+ {
+ if ( !m_listStyleName->isSelected( i ) )
+ {
+ //remove this style from list
+ KoParagStyle* style = m_styleList.styleAt( i );
+ updateFollowingStyle( style );
+ m_styleList.removeStyle( style );
+ break;
+ }
+ }
+}
+
+void KoImportStyleDia::updateFollowingStyle( KoParagStyle* removedStyle )
+{
+ QValueList<KoUserStyle *> lst = m_styleList.styleList();
+ for( QValueList<KoUserStyle *>::Iterator it = lst.begin(); it != lst.end(); ++it ) {
+ KoParagStyle* style = static_cast<KoParagStyle *>( *it );
+ if ( style->followingStyle() == removedStyle )
+ {
+ style->setFollowingStyle( style );
+ }
+ }
+}
+
+void KoImportStyleDia::slotLoadFile()
+{
+ loadFile();
+ enableButtonOK( m_listStyleName->count() != 0 );
+}
+
+void KoImportStyleDia::initList()
+{
+ m_listStyleName->insertStringList( m_styleList.displayNameList() );
+}
+
+void KoImportStyleDia::slotOk()
+{
+ generateStyleList();
+ KDialogBase::slotOk();
+}
+
+QString KoImportStyleDia::generateStyleName( const QString & templateName ) const
+{
+ QString name;
+ int num = 1;
+ bool exists;
+ do {
+ name = templateName.arg( num );
+ exists = m_currentCollection->findStyle( name ) != 0;
+ ++num;
+ } while ( exists );
+ return name;
+}
+
+QString KoImportStyleDia::generateStyleDisplayName( const QString & templateName ) const
+{
+ QString name;
+ int num = 1;
+ bool exists;
+ do {
+ name = templateName.arg( num );
+ exists = m_currentCollection->findStyleByDisplayName( name ) != 0;
+ ++num;
+ } while ( exists );
+ return name;
+}
+
+void KoImportStyleDia::clear()
+{
+ m_styleList.clear();
+}
+
+#include "KoImportStyleDia.moc"
diff --git a/lib/kotext/KoImportStyleDia.h b/lib/kotext/KoImportStyleDia.h
new file mode 100644
index 00000000..70a458de
--- /dev/null
+++ b/lib/kotext/KoImportStyleDia.h
@@ -0,0 +1,70 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KoImportStyleDia__
+#define __KoImportStyleDia__
+
+#include <kdialogbase.h>
+#include <qstringlist.h>
+#include <KoStyleCollection.h>
+class QLineEdit;
+class QListBox;
+class QPushButton;
+
+class KOTEXT_EXPORT KoImportStyleDia : public KDialogBase
+{
+ Q_OBJECT
+public:
+ /// @param currentCollection collection of styles already present in the document
+ /// (this is used to avoid conflicts in the style names and displayNames)
+ KoImportStyleDia( KoStyleCollection* currentCollection, QWidget *parent, const char *name );
+ ~KoImportStyleDia();
+
+ const KoStyleCollection& importedStyles() const { return m_styleList; }
+
+protected slots:
+ virtual void slotOk();
+ void slotLoadFile();
+
+protected:
+ /** Open file dialog and load the list of styles from the selected doc.
+ */
+ virtual void loadFile()=0;
+
+ void clear();
+ QString generateStyleName( const QString & templateName ) const;
+ QString generateStyleDisplayName( const QString & templateName ) const;
+
+ // @return collection of styles already present in the document
+ const KoStyleCollection* currentCollection() const { return m_currentCollection; }
+
+ void initList();
+
+ // used by subclasses, hmm...
+ QListBox *m_listStyleName;
+ KoStyleCollection m_styleList;
+
+private:
+ void generateStyleList();
+ void updateFollowingStyle( KoParagStyle* removedStyle );
+
+ KoStyleCollection* m_currentCollection; // Styles already present in the document
+};
+
+#endif
diff --git a/lib/kotext/KoLanguageTab.cpp b/lib/kotext/KoLanguageTab.cpp
new file mode 100644
index 00000000..1dff08d4
--- /dev/null
+++ b/lib/kotext/KoLanguageTab.cpp
@@ -0,0 +1,65 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001, 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoLanguageTab.h"
+#include "KoGlobal.h"
+
+#include <kcombobox.h>
+#include <kiconloader.h>
+
+#include <qstringlist.h>
+
+#include "KoLanguageTab.moc"
+
+
+KoLanguageTab::KoLanguageTab( KSpell2::Broker::Ptr broker, QWidget* parent, const char* name, WFlags fl )
+ : KoLanguageTabBase( parent, name, fl )
+{
+ const QStringList langNames = KoGlobal::listOfLanguages();
+ const QStringList langTags = KoGlobal::listTagOfLanguages();
+ QStringList spellCheckLanguages;
+
+ if ( broker )
+ spellCheckLanguages = broker->languages();
+
+ QStringList::ConstIterator itName = langNames.begin();
+ QStringList::ConstIterator itTag = langTags.begin();
+ for ( ; itName != langNames.end() && itTag != langTags.end(); ++itName, ++itTag )
+ {
+ if ( spellCheckLanguages.find( *itTag ) != spellCheckLanguages.end() )
+ languageKComboBox->insertItem( SmallIcon( "spellcheck" ), *itName );
+ else
+ languageKComboBox->insertItem( *itName );
+ }
+ connect( languageKComboBox, SIGNAL( activated( int ) ), this, SIGNAL( languageChanged() ) );
+}
+
+KoLanguageTab::~KoLanguageTab()
+{
+}
+
+QString KoLanguageTab::getLanguage() const
+{
+ return KoGlobal::tagOfLanguage( languageKComboBox->currentText() );
+}
+
+void KoLanguageTab::setLanguage( const QString &item )
+{
+ languageKComboBox->setCurrentText( KoGlobal::languageFromTag( item ) );
+}
diff --git a/lib/kotext/KoLanguageTab.h b/lib/kotext/KoLanguageTab.h
new file mode 100644
index 00000000..cc80c4b8
--- /dev/null
+++ b/lib/kotext/KoLanguageTab.h
@@ -0,0 +1,42 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001,2002,2003 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __kolanguagetab_h__
+#define __kolanguagetab_h__
+
+#include <kolanguagetabbase.h>
+
+#include <kspell2/broker.h>
+
+class KoLanguageTab : public KoLanguageTabBase
+{
+ Q_OBJECT
+
+public:
+ KoLanguageTab( KSpell2::Broker::Ptr broker = 0, QWidget* parent=0, const char* name=0, WFlags fl=0 );
+ ~KoLanguageTab();
+
+ QString getLanguage() const;
+ void setLanguage( const QString &item );
+
+signals:
+ void languageChanged();
+};
+
+#endif
diff --git a/lib/kotext/KoLayoutTab.cpp b/lib/kotext/KoLayoutTab.cpp
new file mode 100644
index 00000000..f1a87a8d
--- /dev/null
+++ b/lib/kotext/KoLayoutTab.cpp
@@ -0,0 +1,147 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001, 2002 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoLayoutTab.h"
+#include "KoTextFormat.h"
+
+#include <knuminput.h>
+
+#include <qbuttongroup.h>
+#include <qcheckbox.h>
+#include <qspinbox.h>
+
+#include "KoLayoutTab.moc"
+
+KoLayoutTab::KoLayoutTab( bool withSubSuperScript, QWidget* parent, const char* name, WFlags fl )
+ : KoLayoutTabBase( parent, name, fl )
+{
+ if ( !withSubSuperScript ) positionButtonGroup->hide();
+
+ connect( positionButtonGroup, SIGNAL( clicked( int ) ), this, SLOT( slotSubSuperScriptChanged( int ) ) );
+ connect( offsetSpinBox, SIGNAL( valueChanged( int ) ), this, SIGNAL( offsetChanged( int ) ) );
+ connect( relativeSizeKDoubleSpinBox, SIGNAL( valueChanged( double ) ), this, SLOT( slotRelativeSizeChanged( double ) ) );
+ connect( hyphenateCheckBox, SIGNAL( toggled( bool ) ), this, SIGNAL( hyphenationChanged( bool ) ) );
+}
+
+KoLayoutTab::~KoLayoutTab()
+{
+}
+
+KoTextFormat::VerticalAlignment KoLayoutTab::getSubSuperScript() const
+{
+ switch ( positionButtonGroup->selectedId() )
+ {
+ case 0:
+ return KoTextFormat::AlignNormal;
+ case 1:
+ return KoTextFormat::AlignSubScript;
+ case 2:
+ return KoTextFormat::AlignSuperScript;
+ case 3:
+ return KoTextFormat::AlignCustom;
+ default:
+ return KoTextFormat::AlignNormal;
+ }
+}
+
+int KoLayoutTab::getOffsetFromBaseline() const
+{
+ switch ( positionButtonGroup->selectedId() )
+ {
+ case 0:
+ return 0;
+ case 1:
+ return 0; // subscript has a default
+ case 2:
+ return 0; // superscript has got a default
+ case 3:
+ return offsetSpinBox->value();
+ default:
+ return 0;
+ }
+}
+
+double KoLayoutTab::getRelativeTextSize() const
+{
+ switch ( positionButtonGroup->selectedId() )
+ {
+ case 0:
+ return 1.0;
+ case 1:
+ return relativeSizeKDoubleSpinBox->value() / 100;
+ case 2:
+ return relativeSizeKDoubleSpinBox->value() / 100;
+ case 3:
+ return relativeSizeKDoubleSpinBox->value() / 100;
+ default:
+ return 1.0;
+ }
+}
+
+bool KoLayoutTab::getAutoHyphenation() const
+{
+ return hyphenateCheckBox->isOn();
+}
+
+void KoLayoutTab::setSubSuperScript( KoTextFormat::VerticalAlignment subSuperScript, int offset, double relativeSize )
+{
+ switch ( static_cast< int >( subSuperScript ) )
+ {
+ case 0:
+ positionButtonGroup->setButton( 0 );
+ break;
+ case 1:
+ positionButtonGroup->setButton( 1 );
+ relativeSizeKDoubleSpinBox->setValue( relativeSize * 100 );
+ break;
+ case 2:
+ positionButtonGroup->setButton( 2 );
+ relativeSizeKDoubleSpinBox->setValue( relativeSize * 100 );
+ break;
+ case 3:
+ positionButtonGroup->setButton( 3 );
+ offsetSpinBox->setValue( offset );
+ relativeSizeKDoubleSpinBox->setValue( relativeSize * 100 );
+ break;
+ default:
+ positionButtonGroup->setButton( 0 );
+ break;
+ }
+ slotSubSuperScriptChanged( static_cast< int >( subSuperScript ) );
+}
+
+void KoLayoutTab::setAutoHyphenation( bool state )
+{
+ hyphenateCheckBox->setChecked( state );
+}
+
+void KoLayoutTab::slotSubSuperScriptChanged( int item )
+{
+ if ( item == 1 || item == 2 ) offsetSpinBox->setValue( 0 );
+ emit subSuperScriptChanged();
+ if ( item ) {
+ emit relativeSizeChanged( relativeSizeKDoubleSpinBox->value() / 100 );
+ emit offsetChanged( offsetSpinBox->value() );
+ }
+}
+
+void KoLayoutTab::slotRelativeSizeChanged( double relativeSize )
+{
+ emit relativeSizeChanged( relativeSize / 100 );
+}
diff --git a/lib/kotext/KoLayoutTab.h b/lib/kotext/KoLayoutTab.h
new file mode 100644
index 00000000..cc40d02c
--- /dev/null
+++ b/lib/kotext/KoLayoutTab.h
@@ -0,0 +1,53 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001,2002,2003 Montel Laurent <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __kolayouttab_h__
+#define __kolayouttab_h__
+
+#include <kolayouttabbase.h>
+#include <KoTextFormat.h>
+
+class KoLayoutTab : public KoLayoutTabBase
+{
+ Q_OBJECT
+
+public:
+ KoLayoutTab( bool withSubSuperScript, QWidget* parent=0, const char* name=0, WFlags fl=0 );
+ ~KoLayoutTab();
+
+ KoTextFormat::VerticalAlignment getSubSuperScript() const;
+ int getOffsetFromBaseline() const;
+ double getRelativeTextSize() const;
+ bool getAutoHyphenation() const;
+
+ void setSubSuperScript( KoTextFormat::VerticalAlignment subSuperScript, int offset, double relativeSize );
+ void setAutoHyphenation( bool state );
+
+signals:
+ void subSuperScriptChanged();
+ void offsetChanged( int offset );
+ void relativeSizeChanged( double relativeSize );
+ void hyphenationChanged( bool state );
+
+protected slots:
+ void slotSubSuperScriptChanged( int item );
+ void slotRelativeSizeChanged( double relativeSize );
+};
+
+#endif
diff --git a/lib/kotext/KoListStyleStack.cpp b/lib/kotext/KoListStyleStack.cpp
new file mode 100644
index 00000000..45631b07
--- /dev/null
+++ b/lib/kotext/KoListStyleStack.cpp
@@ -0,0 +1,46 @@
+#include "KoListStyleStack.h"
+#include <KoDom.h>
+#include <KoXmlNS.h>
+
+KoListStyleStack::KoListStyleStack()
+ : m_initialLevel( 0 )
+{
+}
+
+KoListStyleStack::~KoListStyleStack()
+{
+}
+
+void KoListStyleStack::pop()
+{
+ m_stack.pop();
+}
+
+void KoListStyleStack::push( const QDomElement& style )
+{
+ m_stack.push( style );
+}
+
+void KoListStyleStack::setInitialLevel( int initialLevel )
+{
+ Q_ASSERT( m_stack.isEmpty() );
+ m_initialLevel = initialLevel;
+}
+
+QDomElement KoListStyleStack::currentListStyle() const
+{
+ Q_ASSERT( !m_stack.isEmpty() );
+ return m_stack.top();
+}
+
+QDomElement KoListStyleStack::currentListStyleProperties() const
+{
+ QDomElement style = currentListStyle();
+ return KoDom::namedItemNS( style, KoXmlNS::style, "list-level-properties" );
+}
+
+QDomElement KoListStyleStack::currentListStyleTextProperties() const
+{
+ QDomElement style = currentListStyle();
+ return KoDom::namedItemNS( style, KoXmlNS::style, "text-properties" );
+}
diff --git a/lib/kotext/KoListStyleStack.h b/lib/kotext/KoListStyleStack.h
new file mode 100644
index 00000000..5dc95b4b
--- /dev/null
+++ b/lib/kotext/KoListStyleStack.h
@@ -0,0 +1,91 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOLISTSTYLESTACK_H
+#define KOLISTSTYLESTACK_H
+
+#include <qdom.h>
+#include <qvaluestack.h>
+
+/**
+ * This class implements the list styles currently active at a given point.
+ * Unlike KoStyleStack, this is NOT an inheritance stack.
+ * The list-style stack contains one item per list level at any given point.
+ * For instance inside \<ul\>\<li\>\<ul\>\<li\> (in html terms), it will have 2 items.
+ *
+ * @author David Faure <faure@kde.org>
+ */
+class KoListStyleStack
+{
+public:
+ KoListStyleStack();
+ ~KoListStyleStack();
+
+ /**
+ * Removes the style on top of the stack.
+ */
+ void pop();
+
+ /**
+ * Pushes the new list-style onto the stack.
+ */
+ void push( const QDomElement& style );
+
+ /// @return true if we're inside a list (i.e. the stack isn't empty)
+ bool hasListStyle() const { return !m_stack.isEmpty(); }
+
+ /// @return currenty applicable list style, i.e. the one on top of the stack
+ /// Most list-level properties are the attributes of that element.
+ QDomElement currentListStyle() const;
+
+ /**
+ * @return the style:list-level-properties for the currenty applicable list style.
+ * The list-level properties that are only "style" information,
+ * like text:min-label-width, text:space-before, and style:font-name
+ * are the attributes of that element.
+ */
+ QDomElement currentListStyleProperties() const;
+
+ /**
+ * @return the style:text-properties for the currenty applicable list style.
+ */
+ QDomElement currentListStyleTextProperties() const;
+
+ /**
+ * Set the initial level of the list, i.e. of item at the bottom of the stack.
+ * This is used when a level is explicitely specified in the
+ * [un]ordered-list tag (OASIS extension)
+ */
+ void setInitialLevel( int initialLevel );
+
+ /// @return initial level
+ int initialLevel() const { return m_initialLevel; }
+
+ /// @return current list level
+ int level() const { return m_initialLevel + m_stack.count(); }
+
+
+private:
+ QValueStack<QDomElement> m_stack;
+ int m_initialLevel;
+
+};
+
+#endif /* KOLISTSTYLESTACK_H */
+
diff --git a/lib/kotext/KoOasisContext.cpp b/lib/kotext/KoOasisContext.cpp
new file mode 100644
index 00000000..87f4be66
--- /dev/null
+++ b/lib/kotext/KoOasisContext.cpp
@@ -0,0 +1,135 @@
+/* This file is part of the KDE project
+ Copyright (C) 2004-2006 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoOasisContext.h"
+#include <KoOasisStyles.h>
+#include <KoOasisStore.h>
+#include <KoXmlNS.h>
+#include <KoXmlWriter.h>
+#include <kdebug.h>
+#include <KoDom.h>
+
+KoOasisContext::KoOasisContext( KoDocument* doc, KoVariableCollection& varColl,
+ KoOasisStyles& styles, KoStore* store )
+ : KoOasisLoadingContext( doc, styles, store ),
+ m_varColl( varColl ),
+ m_cursorTextParagraph( 0 )
+{
+}
+
+static QDomElement findListLevelStyle( const QDomElement& fullListStyle, int level )
+{
+ for ( QDomNode n = fullListStyle.firstChild(); !n.isNull(); n = n.nextSibling() )
+ {
+ const QDomElement listLevelItem = n.toElement();
+ if ( listLevelItem.attributeNS( KoXmlNS::text, "level", QString::null ).toInt() == level )
+ return listLevelItem;
+ }
+ return QDomElement();
+}
+
+bool KoOasisContext::pushListLevelStyle( const QString& listStyleName, int level )
+{
+ QDomElement* fullListStyle = oasisStyles().listStyles()[listStyleName];
+ if ( !fullListStyle ) {
+ kdWarning(32500) << "List style " << listStyleName << " not found!" << endl;
+ return false;
+ }
+ else
+ return pushListLevelStyle( listStyleName, *fullListStyle, level );
+}
+
+bool KoOasisContext::pushOutlineListLevelStyle( int level )
+{
+ QDomElement outlineStyle = KoDom::namedItemNS( oasisStyles().officeStyle(), KoXmlNS::text, "outline-style" );
+ return pushListLevelStyle( "<outline-style>", outlineStyle, level );
+}
+
+bool KoOasisContext::pushListLevelStyle( const QString& listStyleName, // for debug only
+ const QDomElement& fullListStyle, int level )
+{
+ // Find applicable list-level-style for level
+ int i = level;
+ QDomElement listLevelStyle;
+ while ( i > 0 && listLevelStyle.isNull() ) {
+ listLevelStyle = findListLevelStyle( fullListStyle, i );
+ --i;
+ }
+ if ( listLevelStyle.isNull() ) {
+ kdWarning(32500) << "List level style for level " << level << " in list style " << listStyleName << " not found!" << endl;
+ return false;
+ }
+ //kdDebug(32500) << "Pushing list-level-style from list-style " << listStyleName << " level " << level << endl;
+ m_listStyleStack.push( listLevelStyle );
+ return true;
+}
+
+void KoOasisContext::setCursorPosition( KoTextParag* cursorTextParagraph,
+ int cursorTextIndex )
+{
+ m_cursorTextParagraph = cursorTextParagraph;
+ m_cursorTextIndex = cursorTextIndex;
+}
+
+KoOasisContext::~KoOasisContext()
+{
+}
+
+////
+
+KoSavingContext::KoSavingContext( KoGenStyles& mainStyles, KoVariableSettings* settings, bool hasColumns, SavingMode savingMode )
+ : m_mainStyles( mainStyles ),
+ m_savingMode( savingMode ),
+ m_cursorTextParagraph( 0 ),
+ m_variableSettings( settings ),
+ m_hasColumns( hasColumns )
+{
+}
+
+
+KoSavingContext::~KoSavingContext()
+{
+}
+
+void KoSavingContext::setCursorPosition( KoTextParag* cursorTextParagraph,
+ int cursorTextIndex )
+{
+ m_cursorTextParagraph = cursorTextParagraph;
+ m_cursorTextIndex = cursorTextIndex;
+}
+
+void KoSavingContext::addFontFace( const QString& fontName )
+{
+ m_fontFaces[fontName] = true;
+}
+
+void KoSavingContext::writeFontFaces( KoXmlWriter& writer )
+{
+ writer.startElement( "office:font-face-decls" );
+ const QStringList fontFaces = m_fontFaces.keys();
+ for ( QStringList::const_iterator ffit = fontFaces.begin(), ffend = fontFaces.end() ; ffit != ffend ; ++ffit ) {
+ writer.startElement( "style:font-face" );
+ writer.addAttribute( "style:name", *ffit );
+ writer.addAttribute( "svg:font-family", *ffit );
+ // TODO style:font-family-generic
+ // TODO style:font-pitch
+ writer.endElement(); // style:font-face
+ }
+ writer.endElement(); // office:font-face-decls
+}
diff --git a/lib/kotext/KoOasisContext.h b/lib/kotext/KoOasisContext.h
new file mode 100644
index 00000000..9be3e2ab
--- /dev/null
+++ b/lib/kotext/KoOasisContext.h
@@ -0,0 +1,186 @@
+/* This file is part of the KDE project
+ Copyright (C) 2004-2006 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOOASISCONTEXT_H
+#define KOOASISCONTEXT_H
+
+#include <KoOasisLoadingContext.h>
+
+class KoVariableSettings;
+class KoTextParag;
+class KoParagStyle;
+class KoGenStyles;
+class KoVariableCollection;
+
+#include "KoListStyleStack.h"
+#include "KoTextBookmark.h"
+
+// ####### TODO rename to KoTextOasisLoadingContext (wow that's long).
+// ####### maybe KoTextLoadingContext?
+
+/**
+ * Used during loading of Oasis format (and discarded at the end of the loading).
+ * In addition to what KoOasisLoadingContext stores, this class has 'state' information:
+ * a stack with the currently used styles (with its ancestors in the stack),
+ * another one with the list styles currently applicable (one item in the stack per list level).
+ *
+ * @author David Faure <faure@kde.org>
+ */
+class KOTEXT_EXPORT KoOasisContext : public KoOasisLoadingContext
+{
+public:
+ /**
+ * Stores reference to the KoOasisStyles parsed by KoDocument.
+ * Make sure that the KoOasisStyles instance outlives this KoOasisContext instance.
+ * (This is the case during loaiding, when using the KoOasisStyles given by KoDocument)
+ * @param doc KoDocument, needed by some field variables
+ * @param varColl reference to the collection that creates and stores variables (fields)
+ * @param styles reference to the KoOasisStyles parsed by KoDocument
+ * @param store pointer to store, if available, for e.g. loading images.
+ */
+ KoOasisContext( KoDocument* doc, KoVariableCollection& varColl,
+ KoOasisStyles& styles, KoStore* store );
+ ~KoOasisContext();
+
+ KoVariableCollection& variableCollection() { return m_varColl; }
+
+ ///// List handling
+
+ KoListStyleStack& listStyleStack() { return m_listStyleStack; }
+ QString currentListStyleName() const { return m_currentListStyleName; }
+ void setCurrentListStyleName( const QString& s ) { m_currentListStyleName = s; }
+
+ /// Used for lists (numbered paragraphs)
+ /// @return true on success (a list style was found and pushed)
+ bool pushListLevelStyle( const QString& listStyleName, int level );
+ /// Used for outline levels
+ bool pushOutlineListLevelStyle( int level );
+
+ /// Set cursor position (set by KoTextParag upon finding the processing instruction)
+ void setCursorPosition( KoTextParag* cursorTextParagraph,
+ int cursorTextIndex );
+
+ KoTextParag* cursorTextParagraph() const { return m_cursorTextParagraph; }
+ int cursorTextIndex() const { return m_cursorTextIndex; }
+
+private:
+ /// @return true on success (a list style was found and pushed)
+ bool pushListLevelStyle( const QString& listStyleName, const QDomElement& fullListStyle, int level );
+
+private:
+ KoListStyleStack m_listStyleStack;
+ QString m_currentListStyleName;
+ KoVariableCollection& m_varColl;
+
+ KoTextParag* m_cursorTextParagraph;
+ int m_cursorTextIndex;
+
+ class Private;
+ Private *d;
+};
+
+// TODO extract non-text base class for kofficecore, see KoOasisLoadingContext
+
+// ####### TODO rename to KoTextOasisSavingContext (wow that's long).
+// ####### maybe KoTextSavingContext?
+
+/**
+ * Used during saving to Oasis format (and discarded at the end of the saving).
+ *
+ * Among other things, this class acts as a repository of fonts used by a
+ * document during saving, in order to create the office:font-face-decls element.
+ *
+ * @author David Faure <faure@kde.org>
+ */
+class KOTEXT_EXPORT KoSavingContext
+{
+public:
+ enum SavingMode { Store, Flat };
+
+ /// Constructor
+ /// @param mainStyles
+ /// @param settings optional, used for saving the page-number in the first paragraph
+ /// @param hasColumns optional, used by KoParagLayout for the type of page breaks
+ /// @param savingMode either Store (a KoStore will be used) or Flat (all data must be inline in the XML)
+ KoSavingContext( KoGenStyles& mainStyles, KoVariableSettings* settings = 0, bool hasColumns = false, SavingMode savingMode = Store );
+
+ ~KoSavingContext();
+
+
+ KoGenStyles& mainStyles() { return m_mainStyles; }
+
+ /// @return the saving mode: Store (a KoStore will be used) or Flat (all data must be inline in the XML)
+ SavingMode savingMode() const { return m_savingMode; }
+
+ /// Set cursor position (so that KoTextParag can insert a processing instruction)
+ void setCursorPosition( KoTextParag* cursorTextParagraph,
+ int cursorTextIndex );
+
+ KoTextParag* cursorTextParagraph() const { return m_cursorTextParagraph; }
+ int cursorTextIndex() const { return m_cursorTextIndex; }
+
+ /// Store bookmarks [for the current text paragraph beind saved]
+ /// so that KoTextParag can save them at the right place inside the text
+ struct BookmarkPosition {
+ BookmarkPosition() : name(), pos( -1 ), startEqualsEnd( false ) {} // for QValueList
+ BookmarkPosition( const QString& nm, int p, bool simple )
+ : name( nm ), pos( p ), startEqualsEnd( simple ) {}
+ QString name;
+ int pos;
+ bool startEqualsEnd;
+ bool operator<( BookmarkPosition& rhs ) const {
+ return pos < rhs.pos;
+ }
+ };
+ typedef QValueList<BookmarkPosition> BookmarkPositions;
+ void setBookmarkPositions( const BookmarkPositions& bkStarts,
+ const BookmarkPositions& bkEnds ) {
+ m_bookmarkStarts = bkStarts;
+ m_bookmarkEnds = bkEnds;
+ }
+ const BookmarkPositions& bookmarkStarts() const { return m_bookmarkStarts; }
+ const BookmarkPositions& bookmarkEnds() const { return m_bookmarkEnds; }
+
+ void addFontFace( const QString& fontName );
+ typedef QMap<QString, bool> FontFaces;
+ void writeFontFaces( KoXmlWriter& writer );
+
+ // See KoParagLayout::saveOasis
+ bool hasColumns() const { return m_hasColumns; }
+
+ // See KoTextParag::saveOasis
+ KoVariableSettings* variableSettings() const { return m_variableSettings; }
+
+private:
+ KoGenStyles& m_mainStyles;
+ SavingMode m_savingMode;
+
+ BookmarkPositions m_bookmarkStarts, m_bookmarkEnds;
+
+ KoTextParag* m_cursorTextParagraph;
+ int m_cursorTextIndex;
+ FontFaces m_fontFaces;
+ KoVariableSettings* m_variableSettings;
+ bool m_hasColumns;
+
+ class Private;
+ Private *d;
+};
+
+#endif /* KOOASISCONTEXT_H */
diff --git a/lib/kotext/KoParagCounter.cpp b/lib/kotext/KoParagCounter.cpp
new file mode 100644
index 00000000..e163f757
--- /dev/null
+++ b/lib/kotext/KoParagCounter.cpp
@@ -0,0 +1,987 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 Shaheed Haque <srhaque@iee.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoParagCounter.h"
+#include "KoTextParag.h"
+#include "KoTextZoomHandler.h"
+#include "KoTextFormat.h"
+#include "KoTextDocument.h"
+#include "KoOasisContext.h"
+#include <KoXmlWriter.h>
+#include <KoGenStyles.h>
+#include <KoXmlNS.h>
+#include <kdebug.h>
+#include <qdom.h>
+#include <qbuffer.h>
+
+static KoTextParag * const INVALID_PARAG = (KoTextParag *)-1;
+
+KoParagCounter::KoParagCounter()
+{
+ m_numbering = NUM_NONE;
+ m_style = STYLE_NONE;
+ m_depth = 0;
+ m_startNumber = 1;
+ m_displayLevels = 1;
+ m_restartCounter = false;
+ m_customBulletChar = QChar( '-' );
+ m_customBulletFont = QString::null;
+ m_align = Qt::AlignAuto;
+ invalidate();
+}
+
+bool KoParagCounter::operator==( const KoParagCounter & c2 ) const
+{
+ // ## This is kinda wrong. Unused fields (depending on the counter style) shouldn't be compared.
+ return (m_numbering==c2.m_numbering &&
+ m_style==c2.m_style &&
+ m_depth==c2.m_depth &&
+ m_startNumber==c2.m_startNumber &&
+ m_displayLevels==c2.m_displayLevels &&
+ m_restartCounter==c2.m_restartCounter &&
+ m_prefix==c2.m_prefix &&
+ m_suffix==c2.m_suffix &&
+ m_customBulletChar==c2.m_customBulletChar &&
+ m_customBulletFont==c2.m_customBulletFont &&
+ m_align==c2.m_align &&
+ m_custom==c2.m_custom);
+}
+
+QString KoParagCounter::custom() const
+{
+ return m_custom;
+}
+
+QChar KoParagCounter::customBulletCharacter() const
+{
+ return m_customBulletChar;
+}
+
+QString KoParagCounter::customBulletFont() const
+{
+ return m_customBulletFont;
+}
+
+unsigned int KoParagCounter::depth() const
+{
+ return m_depth;
+}
+
+void KoParagCounter::invalidate()
+{
+ m_cache.number = -1;
+ m_cache.text = QString::null;
+ m_cache.width = -1;
+ m_cache.parent = INVALID_PARAG;
+ m_cache.counterFormat = 0;
+}
+
+bool KoParagCounter::isBullet( Style style ) // static
+{
+ switch ( style )
+ {
+ case STYLE_DISCBULLET:
+ case STYLE_SQUAREBULLET:
+ case STYLE_BOXBULLET:
+ case STYLE_CIRCLEBULLET:
+ case STYLE_CUSTOMBULLET:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool KoParagCounter::isBullet() const
+{
+ return isBullet( m_style );
+}
+
+void KoParagCounter::load( QDomElement & element )
+{
+ m_numbering = static_cast<Numbering>( element.attribute("numberingtype", "2").toInt() );
+ m_style = static_cast<Style>( element.attribute("type").toInt() );
+ // Old docs have this:
+ if ( m_numbering == NUM_LIST && m_style == STYLE_NONE )
+ m_numbering = NUM_NONE;
+ m_depth = element.attribute("depth").toInt();
+ m_customBulletChar = QChar( element.attribute("bullet").toInt() );
+ m_prefix = element.attribute("lefttext");
+ if ( m_prefix.lower() == "(null)" ) // very old kword thing
+ m_prefix = QString::null;
+ m_suffix = element.attribute("righttext");
+ if ( m_suffix.lower() == "(null)" )
+ m_suffix = QString::null;
+ QString s = element.attribute("start");
+ if ( s.isEmpty() )
+ m_startNumber = 1;
+ else if ( s[0].isDigit() )
+ m_startNumber = s.toInt();
+ else // support for very-old files
+ m_startNumber = s.lower()[0].latin1() - 'a' + 1;
+ s = element.attribute("display-levels");
+ if ( !s.isEmpty() )
+ m_displayLevels = QMIN( s.toInt(), m_depth+1 ); // can't be > depth+1
+ else // Not specified -> compat with koffice-1.2: make equal to depth+1
+ m_displayLevels = m_depth+1;
+ m_customBulletFont = element.attribute("bulletfont");
+ m_custom = element.attribute("customdef");
+ m_align = element.attribute("align", "0").toInt(); //AlignAuto as defeult
+ QString restart = element.attribute("restart");
+ m_restartCounter = (restart == "true") || (restart == "1");
+ invalidate();
+}
+
+static int importCounterType( QChar numFormat )
+{
+ if ( numFormat == '1' )
+ return KoParagCounter::STYLE_NUM;
+ if ( numFormat == 'a' )
+ return KoParagCounter::STYLE_ALPHAB_L;
+ if ( numFormat == 'A' )
+ return KoParagCounter::STYLE_ALPHAB_U;
+ if ( numFormat == 'i' )
+ return KoParagCounter::STYLE_ROM_NUM_L;
+ if ( numFormat == 'I' )
+ return KoParagCounter::STYLE_ROM_NUM_U;
+ return KoParagCounter::STYLE_NONE;
+}
+
+// should only be called with style != none and != a bullet.
+static QChar exportCounterType( KoParagCounter::Style style )
+{
+ static const int s_oasisCounterTypes[] =
+ { '\0', '1', 'a', 'A', 'i', 'I',
+ '\0', '\0', // custombullet, custom
+ 0x2022, // circle -> small disc
+ 0xE00A, // square
+ 0x25CF, // disc -> large disc
+ 0x27A2 // box -> right-pointing triangle
+ };
+ return QChar( s_oasisCounterTypes[ style ] );
+}
+
+void KoParagCounter::loadOasis( KoOasisContext& context, int restartNumbering,
+ bool orderedList, bool heading, int level, bool loadingStyle )
+{
+ const QDomElement listStyle = context.listStyleStack().currentListStyle();
+ const QDomElement listStyleProperties = context.listStyleStack().currentListStyleProperties();
+ const QDomElement listStyleTextProperties = context.listStyleStack().currentListStyleTextProperties();
+ loadOasisListStyle( listStyle, listStyleProperties, listStyleTextProperties,
+ restartNumbering, orderedList, heading, level, loadingStyle );
+}
+
+void KoParagCounter::loadOasisListStyle( const QDomElement& listStyle,
+ const QDomElement& listStyleProperties,
+ const QDomElement& listStyleTextProperties,
+ int restartNumbering,
+ bool orderedList, bool heading, int level,
+ bool loadingStyle )
+{
+ m_numbering = heading ? NUM_CHAPTER : NUM_LIST;
+ m_depth = level - 1; // depth start at 0
+ // restartNumbering can either be provided by caller, or taken from the style
+ if ( restartNumbering == -1 && listStyle.hasAttributeNS( KoXmlNS::text, "start-value" ) )
+ restartNumbering = listStyle.attributeNS( KoXmlNS::text, "start-value", QString::null ).toInt();
+
+ // styles have a start-value, but that doesn't mean restartNumbering, as it does for paragraphs
+ m_restartCounter = loadingStyle ? false : ( restartNumbering != -1 );
+ m_startNumber = ( restartNumbering != -1 ) ? restartNumbering : 1;
+ //kdDebug() << k_funcinfo << "IN: restartNumbering=" << restartNumbering << " OUT: m_restartCounter=" << m_restartCounter << " m_startNumber=" << m_startNumber << endl;
+
+ m_prefix = listStyle.attributeNS( KoXmlNS::style, "num-prefix", QString::null );
+ m_suffix = listStyle.attributeNS( KoXmlNS::style, "num-suffix", QString::null );
+
+ if ( orderedList || heading ) {
+ m_style = static_cast<Style>( importCounterType( listStyle.attributeNS( KoXmlNS::style, "num-format", QString::null)[0] ) );
+ QString dl = listStyle.attributeNS( KoXmlNS::text, "display-levels", QString::null );
+ m_displayLevels = dl.isEmpty() ? 1 : dl.toInt();
+ } else { // bullets, see 3.3.6 p138
+ m_style = STYLE_CUSTOMBULLET;
+ QString bulletChar = listStyle.attributeNS( KoXmlNS::text, "bullet-char", QString::null );
+ if ( !bulletChar.isEmpty() ) {
+ // Reverse engineering, I found those codes:
+ switch( bulletChar[0].unicode() ) {
+ case 0x2022: // small disc -> circle
+ m_style = STYLE_CIRCLEBULLET;
+ break;
+ case 0x25CF: // large disc -> disc
+ case 0xF0B7: // #113361
+ m_style = STYLE_DISCBULLET;
+ break;
+ case 0xE00C: // losange - TODO in kotext. Not in OASIS either (reserved Unicode area!)
+ m_style = STYLE_BOXBULLET;
+ break;
+ case 0xE00A: // square. Not in OASIS (reserved Unicode area!), but used in both OOo and kotext.
+ m_style = STYLE_SQUAREBULLET;
+ break;
+ case 0x27A2: // two-colors right-pointing triangle
+ // mapping (both ways) to box for now.
+ m_style = STYLE_BOXBULLET;
+ break;
+ default:
+ kdDebug() << "Unhandled bullet code 0x" << QString::number( (uint)m_customBulletChar.unicode(), 16 ) << endl;
+ // fallback
+ case 0x2794: // arrow
+ case 0x2717: // cross
+ case 0x2714: // checkmark
+ m_customBulletChar = bulletChar[0];
+ // often StarSymbol when it comes from OO; doesn't matter, Qt finds it in another font if needed.
+ if ( listStyleProperties.hasAttributeNS( KoXmlNS::style, "font-name" ) )
+ {
+ m_customBulletFont = listStyleProperties.attributeNS( KoXmlNS::style, "font-name", QString::null );
+ kdDebug() << "m_customBulletFont style:font-name = " << listStyleProperties.attributeNS( KoXmlNS::style, "font-name", QString::null ) << endl;
+ }
+ else if ( listStyleTextProperties.hasAttributeNS( KoXmlNS::fo, "font-family" ) )
+ {
+ m_customBulletFont = listStyleTextProperties.attributeNS( KoXmlNS::fo, "font-family", QString::null );
+ kdDebug() << "m_customBulletFont fo:font-family = " << listStyleTextProperties.attributeNS( KoXmlNS::fo, "font-family", QString::null ) << endl;
+ }
+ // ## TODO in fact we're supposed to read it from the style pointed to by text:style-name
+ break;
+ }
+ } else { // can never happen
+ m_style = STYLE_DISCBULLET;
+ }
+ }
+ invalidate();
+}
+
+void KoParagCounter::saveOasis( KoGenStyle& listStyle, bool savingStyle ) const
+{
+ Q_ASSERT( (Style)m_style != STYLE_NONE );
+
+ // Prepare a sub-xmlwriter for the list-level-style-* element
+ QBuffer buffer;
+ buffer.open( IO_WriteOnly );
+ KoXmlWriter listLevelWriter( &buffer, 3 /*indentation*/ );
+ const char* tagName = isBullet() ? "text:list-level-style-bullet" : "text:list-level-style-number";
+ listLevelWriter.startElement( tagName );
+
+ saveOasisListLevel( listLevelWriter, true, savingStyle );
+
+ listLevelWriter.endElement();
+ const QString listLevelContents = QString::fromUtf8( buffer.buffer(), buffer.buffer().size() );
+ listStyle.addChildElement( tagName, listLevelContents );
+}
+
+void KoParagCounter::saveOasisListLevel( KoXmlWriter& listLevelWriter, bool includeLevelAndProperties, bool savingStyle ) const
+{
+ if ( includeLevelAndProperties ) // false when called for footnotes-configuration
+ listLevelWriter.addAttribute( "text:level", (int)m_depth + 1 );
+ // OASIS allows to specify a text:style, the character style to use for the numbering...
+ // We currently always format as per the first character of the paragraph, but that's not perfect.
+
+ if ( isBullet() )
+ {
+ QChar bulletChar;
+ if ( (Style)m_style == STYLE_CUSTOMBULLET )
+ {
+ bulletChar = m_customBulletChar;
+ // TODO font (text style)
+ }
+ else
+ {
+ bulletChar = exportCounterType( (Style)m_style );
+ }
+ listLevelWriter.addAttribute( "text:bullet-char", QString( bulletChar ) );
+ }
+ else
+ {
+ if ( includeLevelAndProperties ) // not for KWVariableSettings
+ listLevelWriter.addAttribute( "text:display-levels", m_displayLevels );
+ if ( (Style)m_style == STYLE_CUSTOM )
+ ; // not implemented
+ else
+ listLevelWriter.addAttribute( "style:num-format", QString( exportCounterType( (Style)m_style ) ) );
+
+ // m_startNumber/m_restartCounter is saved by kotextparag itself, except for styles.
+ if ( savingStyle && m_restartCounter ) {
+ listLevelWriter.addAttribute( "text:start-value", m_startNumber );
+ }
+
+ }
+ // m_numbering isn't saved, it's set depending on context (NUM_CHAPTER for headings).
+
+ listLevelWriter.addAttribute( "style:num-prefix", m_prefix );
+ listLevelWriter.addAttribute( "style:num-suffix", m_suffix );
+
+ if ( includeLevelAndProperties ) // false when called for footnotes-configuration
+ {
+ listLevelWriter.startElement( "style:list-level-properties" );
+ listLevelWriter.addAttribute( "fo:text-align", KoParagLayout::saveOasisAlignment( (Qt::AlignmentFlags)m_align ) );
+ // OASIS has other style properties: text:space-before (indent), text:min-label-width (TODO),
+ // text:min-label-distance, style:font-name (for bullets), image size and vertical alignment.
+ listLevelWriter.endElement(); // style:list-level-properties
+ }
+}
+
+int KoParagCounter::number( const KoTextParag *paragraph )
+{
+ // Return cached value if possible.
+ if ( m_cache.number != -1 )
+ return m_cache.number;
+
+ // Should we start a new list?
+ if ( m_restartCounter ) {
+ Q_ASSERT( m_startNumber != -1 );
+ m_cache.number = m_startNumber;
+ return m_startNumber;
+ }
+
+ // Go looking for another paragraph at the same level or higher level.
+ // (This code shares logic with parent())
+ KoTextParag *otherParagraph = paragraph->prev();
+ KoParagCounter *otherCounter;
+
+ switch ( m_numbering )
+ {
+ case NUM_NONE:
+ // This should not occur!
+ case NUM_FOOTNOTE:
+ m_cache.number = 0;
+ break;
+ case NUM_CHAPTER:
+ m_cache.number = m_startNumber;
+ // Go upwards...
+ while ( otherParagraph )
+ {
+ otherCounter = otherParagraph->counter();
+ if ( otherCounter && // ...look at numbered paragraphs only
+ ( otherCounter->m_numbering == NUM_CHAPTER ) && // ...same number type.
+ ( otherCounter->m_depth <= m_depth ) ) // ...same or higher level.
+ {
+ if ( ( otherCounter->m_depth == m_depth ) &&
+ ( otherCounter->m_style == m_style ) )
+ {
+ // Found a preceding paragraph of exactly our type!
+ m_cache.number = otherCounter->number( otherParagraph ) + 1;
+ }
+ else
+ {
+ // Found a preceding paragraph of higher level!
+ m_cache.number = m_startNumber;
+ }
+ break;
+ }
+ otherParagraph = otherParagraph->prev();
+ }
+ break;
+ case NUM_LIST:
+ m_cache.number = m_startNumber;
+ // Go upwards...
+ while ( otherParagraph )
+ {
+ otherCounter = otherParagraph->counter();
+ if ( otherCounter ) // look at numbered paragraphs only
+ {
+ if ( ( otherCounter->m_numbering == NUM_LIST ) && // ...same number type.
+ !isBullet( otherCounter->m_style ) && // ...not a bullet
+ ( otherCounter->m_depth <= m_depth ) ) // ...same or higher level.
+ {
+ if ( ( otherCounter->m_depth == m_depth ) &&
+ ( otherCounter->m_style == m_style ) )
+ {
+ // Found a preceding paragraph of exactly our type!
+ m_cache.number = otherCounter->number( otherParagraph ) + 1;
+ }
+ else
+ {
+ // Found a preceding paragraph of higher level!
+ m_cache.number = m_startNumber;
+ }
+ break;
+ }
+ else
+ if ( otherCounter->m_numbering == NUM_CHAPTER ) // ...heading number type.
+ {
+ m_cache.number = m_startNumber;
+ break;
+ }
+ }
+/* else
+ {
+ // There is no counter at all.
+ m_cache.number = m_startNumber;
+ break;
+ }*/
+ otherParagraph = otherParagraph->prev();
+ }
+ break;
+ }
+ Q_ASSERT( m_cache.number != -1 );
+ return m_cache.number;
+}
+
+KoParagCounter::Numbering KoParagCounter::numbering() const
+{
+ return m_numbering;
+}
+
+// Go looking for another paragraph at a higher level.
+KoTextParag *KoParagCounter::parent( const KoTextParag *paragraph )
+{
+ // Return cached value if possible.
+ if ( m_cache.parent != INVALID_PARAG )
+ return m_cache.parent;
+
+ KoTextParag *otherParagraph = paragraph->prev();
+ KoParagCounter *otherCounter;
+
+ // (This code shares logic with number())
+ switch ( m_numbering )
+ {
+ case NUM_NONE:
+ // This should not occur!
+ case NUM_FOOTNOTE:
+ otherParagraph = 0L;
+ break;
+ case NUM_CHAPTER:
+ // Go upwards while...
+ while ( otherParagraph )
+ {
+ otherCounter = otherParagraph->counter();
+ if ( otherCounter && // ...numbered paragraphs.
+ ( otherCounter->m_numbering == NUM_CHAPTER ) && // ...same number type.
+ ( otherCounter->m_depth < m_depth ) ) // ...higher level.
+ {
+ break;
+ }
+ otherParagraph = otherParagraph->prev();
+ }
+ break;
+ case NUM_LIST:
+ // Go upwards while...
+ while ( otherParagraph )
+ {
+ otherCounter = otherParagraph->counter();
+ if ( otherCounter ) // ...numbered paragraphs.
+ {
+ if ( ( otherCounter->m_numbering == NUM_LIST ) && // ...same number type.
+ !isBullet( otherCounter->m_style ) && // ...not a bullet
+ ( otherCounter->m_depth < m_depth ) ) // ...higher level.
+ {
+ break;
+ }
+ else
+ if ( otherCounter->m_numbering == NUM_CHAPTER ) // ...heading number type.
+ {
+ otherParagraph = 0L;
+ break;
+ }
+ }
+ otherParagraph = otherParagraph->prev();
+ }
+ break;
+ }
+ m_cache.parent = otherParagraph;
+ return m_cache.parent;
+}
+
+QString KoParagCounter::prefix() const
+{
+ return m_prefix;
+}
+
+void KoParagCounter::save( QDomElement & element )
+{
+ element.setAttribute( "type", static_cast<int>( m_style ) );
+ element.setAttribute( "depth", m_depth );
+ if ( (Style)m_style == STYLE_CUSTOMBULLET )
+ {
+ element.setAttribute( "bullet", m_customBulletChar.unicode() );
+ if ( !m_customBulletFont.isEmpty() )
+ element.setAttribute( "bulletfont", m_customBulletFont );
+ }
+ if ( !m_prefix.isEmpty() )
+ element.setAttribute( "lefttext", m_prefix );
+ if ( !m_suffix.isEmpty() )
+ element.setAttribute( "righttext", m_suffix );
+ if ( m_startNumber != 1 )
+ element.setAttribute( "start", m_startNumber );
+ //if ( m_displayLevels != m_depth ) // see load()
+ element.setAttribute( "display-levels", m_displayLevels );
+ // Don't need to save NUM_FOOTNOTE, it's updated right after loading
+ if ( m_numbering != NUM_NONE && m_numbering != NUM_FOOTNOTE )
+ element.setAttribute( "numberingtype", static_cast<int>( m_numbering ) );
+ if ( !m_custom.isEmpty() )
+ element.setAttribute( "customdef", m_custom );
+ if ( m_restartCounter )
+ element.setAttribute( "restart", "true" );
+ if ( !m_cache.text.isEmpty() )
+ element.setAttribute( "text", m_cache.text );
+ element.setAttribute( "align", m_align );
+}
+
+void KoParagCounter::setCustom( QString c )
+{
+ m_custom = c;
+ invalidate();
+}
+
+void KoParagCounter::setCustomBulletCharacter( QChar c )
+{
+ m_customBulletChar = c;
+ invalidate();
+}
+
+void KoParagCounter::setCustomBulletFont( QString f )
+{
+ m_customBulletFont = f;
+ invalidate();
+}
+
+void KoParagCounter::setDepth( unsigned int d )
+{
+ m_depth = d;
+ invalidate();
+}
+
+void KoParagCounter::setNumbering( Numbering n )
+{
+ m_numbering = n;
+ invalidate();
+}
+
+void KoParagCounter::setPrefix( QString p )
+{
+ m_prefix = p;
+ invalidate();
+}
+void KoParagCounter::setStartNumber( int s )
+{
+ m_startNumber = s;
+ invalidate();
+}
+
+void KoParagCounter::setDisplayLevels( int l )
+{
+ m_displayLevels = l;
+ invalidate();
+}
+
+void KoParagCounter::setAlignment( int a )
+{
+ m_align = a;
+ invalidate();
+}
+
+void KoParagCounter::setStyle( Style s )
+{
+ m_style = s;
+ invalidate();
+}
+
+void KoParagCounter::setSuffix( QString s )
+{
+ m_suffix = s;
+ invalidate();
+}
+
+int KoParagCounter::startNumber() const
+{
+ return m_startNumber;
+}
+
+int KoParagCounter::displayLevels() const
+{
+ return m_displayLevels;
+}
+
+int KoParagCounter::alignment() const
+{
+ return m_align;
+}
+
+KoParagCounter::Style KoParagCounter::style() const
+{
+ return m_style;
+}
+
+QString KoParagCounter::suffix() const
+{
+ return m_suffix;
+}
+
+bool KoParagCounter::restartCounter() const
+{
+ return m_restartCounter;
+}
+
+void KoParagCounter::setRestartCounter( bool restart )
+{
+ m_restartCounter = restart;
+ invalidate();
+}
+
+// Return the text for that level only
+QString KoParagCounter::levelText( const KoTextParag *paragraph )
+{
+ if ( m_numbering == NUM_NONE )
+ return "";
+
+ bool bullet = isBullet( m_style );
+
+ if ( bullet && m_numbering == NUM_CHAPTER ) {
+ // Shome mishtake surely! (not sure how it can happen though)
+ m_style = STYLE_NUM;
+ bullet = false;
+ }
+
+ QString text;
+ if ( !bullet )
+ {
+ // Ensure paragraph number is valid.
+ number( paragraph );
+
+ switch ( m_style )
+ {
+ case STYLE_NONE:
+ if ( m_numbering == NUM_LIST )
+ text = ' ';
+ break;
+ case STYLE_NUM:
+ text.setNum( m_cache.number );
+ break;
+ case STYLE_ALPHAB_L:
+ text = makeAlphaLowerNumber( m_cache.number );
+ break;
+ case STYLE_ALPHAB_U:
+ text = makeAlphaUpperNumber( m_cache.number );
+ break;
+ case STYLE_ROM_NUM_L:
+ text = makeRomanNumber( m_cache.number ).lower();
+ break;
+ case STYLE_ROM_NUM_U:
+ text = makeRomanNumber( m_cache.number ).upper();
+ break;
+ case STYLE_CUSTOM:
+ ////// TODO
+ default: // shut up compiler
+ text.setNum( m_cache.number );
+ break;
+ }
+ }
+ else
+ {
+ switch ( m_style )
+ {
+ // --- these are used in export filters but are ignored by KoTextParag::drawLabel (for bulleted lists - which they are :)) ---
+ case KoParagCounter::STYLE_DISCBULLET:
+ text = '*';
+ break;
+ case KoParagCounter::STYLE_SQUAREBULLET:
+ text = '#';
+ break;
+ case KoParagCounter::STYLE_BOXBULLET:
+ text = '='; // think up a better character
+ break;
+ case KoParagCounter::STYLE_CIRCLEBULLET:
+ text = 'o';
+ break;
+ case KoParagCounter::STYLE_CUSTOMBULLET:
+ text = m_customBulletChar;
+ break;
+ default: // shut up compiler
+ break;
+ }
+ }
+ return text;
+}
+
+// Return the full text to be displayed
+QString KoParagCounter::text( const KoTextParag *paragraph )
+{
+ // Return cached value if possible.
+ if ( !m_cache.text.isNull() )
+ return m_cache.text;
+
+ // If necessary, grab the text of the preceding levels.
+ if ( m_displayLevels > 1 && m_numbering != NUM_NONE )
+ {
+ KoTextParag* p = parent( paragraph );
+ int displayLevels = QMIN( m_displayLevels, m_depth+1 ); // can't be >depth+1
+ for ( int level = 1 ; level < displayLevels ; ++level ) {
+ //kdDebug() << "additional level=" << level << "/" << displayLevels-1 << endl;
+ if ( p )
+ {
+ KoParagCounter* counter = p->counter();
+ QString str = counter->levelText( p );
+ // If the preceding level is a bullet, replace it with blanks.
+ if ( counter->isBullet() )
+ for ( unsigned i = 0; i < str.length(); i++ )
+ str[i] = ' ';
+
+ str.append('.'); // hardcoded on purpose (like OO) until anyone complains
+
+ // Find the number of missing parents, and add dummy text for them.
+ int missingParents = m_depth - level - p->counter()->m_depth;
+ //kdDebug() << "levelText = " << str << " missingParents=" << missingParents << endl;
+ level += missingParents;
+ for ( ; missingParents > 0 ; --missingParents )
+ // Each missing level adds a "0"
+ str.append( "0." );
+
+ m_cache.text.prepend( str );
+ // Prepare next iteration
+ if ( level < displayLevels ) // no need to calc it if we won't use it
+ p = counter->parent( p );
+ }
+ else // toplevel parents are missing
+ {
+ // Special case for one-paragraph-documents like preview widgets
+ KoTextDocument* textdoc = paragraph->textDocument();
+ if ( paragraph == textdoc->firstParag() && paragraph == textdoc->lastParag() )
+ m_cache.text.prepend( "1." );
+ else
+ m_cache.text.prepend( "0." );
+ }
+ }
+
+ }
+
+ //kdDebug() << "result: " << m_cache.text << " + " << levelText( paragraph ) << endl;
+ // Now add text for this level.
+ m_cache.text.append( levelText( paragraph ) );
+
+ // Now apply prefix and suffix
+ // We want the '.' to be before the number in a RTL parag,
+ // but we can't paint the whole string using QPainter::RTL direction, otherwise
+ // '10' becomes '01'.
+ m_cache.text.prepend( paragraph->string()->isRightToLeft() ? suffix() : prefix() );
+ m_cache.text.append( paragraph->string()->isRightToLeft() ? prefix() : suffix() );
+ return m_cache.text;
+}
+
+int KoParagCounter::width( const KoTextParag *paragraph )
+{
+ // Return cached value if possible.
+ if ( m_cache.width != -1 && counterFormat( paragraph ) == m_cache.counterFormat )
+ return m_cache.width;
+
+ // Ensure paragraph text is valid.
+ if ( m_cache.text.isNull() )
+ text( paragraph );
+
+ // Now calculate width.
+ if ( m_cache.counterFormat )
+ m_cache.counterFormat->removeRef();
+ m_cache.counterFormat = counterFormat( paragraph );
+ m_cache.counterFormat->addRef();
+ m_cache.width = 0;
+ if ( m_style != STYLE_NONE || m_numbering == NUM_FOOTNOTE)
+ {
+ QString text = m_cache.text;
+ if ( m_style == STYLE_CUSTOMBULLET && !text.isEmpty() )
+ {
+ text.append( " " ); // append two trailing spaces, see KoTextParag::drawLabel
+ }
+ else if ( !text.isEmpty() )
+ text.append( ' ' ); // append a trailing space, see KoTextParag::drawLabel
+ QFontMetrics fm = m_cache.counterFormat->refFontMetrics();
+ for ( unsigned int i = 0; i < text.length(); i++ )
+ //m_cache.width += m_cache.counterFormat->width( text, i );
+ m_cache.width += fm.width( text[i] );
+ }
+ // Now go from 100%-zoom to LU
+ m_cache.width = KoTextZoomHandler::ptToLayoutUnitPt( m_cache.width );
+
+ //kdDebug(32500) << "KoParagCounter::width recalculated parag=" << paragraph << " text='" << text << "' width=" << m_cache.width << endl;
+ return m_cache.width;
+}
+
+int KoParagCounter::bulletX()
+{
+ // width() must have been called first
+ Q_ASSERT( m_cache.width != -1 );
+ Q_ASSERT( m_cache.counterFormat );
+ int x = 0;
+ QFontMetrics fm = m_cache.counterFormat->refFontMetrics();
+ QString text = prefix();
+ for ( unsigned int i = 0; i < text.length(); i++ )
+ x += fm.width( text[i] );
+ // Now go from 100%-zoom to LU
+ return KoTextZoomHandler::ptToLayoutUnitPt( x );
+}
+
+// Only exists to centralize code. Does no caching.
+KoTextFormat* KoParagCounter::counterFormat( const KoTextParag *paragraph )
+{
+ KoTextFormat* refFormat = paragraph->at( 0 )->format();
+ KoTextFormat format( *refFormat );
+ format.setVAlign( KoTextFormat::AlignNormal );
+ return paragraph->textDocument()->formatCollection()->format( &format );
+ /*paragraph->paragFormat()*/
+}
+
+///
+
+const QCString RNUnits[] = {"", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix"};
+const QCString RNTens[] = {"", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc"};
+const QCString RNHundreds[] = {"", "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm"};
+const QCString RNThousands[] = {"", "m", "mm", "mmm"};
+
+QString KoParagCounter::makeRomanNumber( int n )
+{
+ if ( n >= 0 )
+ return QString::fromLatin1( RNThousands[ ( n / 1000 ) ] +
+ RNHundreds[ ( n / 100 ) % 10 ] +
+ RNTens[ ( n / 10 ) % 10 ] +
+ RNUnits[ ( n ) % 10 ] );
+ else { // should never happen, but better not crash if it does
+ kdWarning(32500) << "makeRomanNumber: n=" << n << endl;
+ return QString::number( n );
+ }
+}
+
+QString KoParagCounter::makeAlphaUpperNumber( int n )
+{
+ QString tmp;
+ char bottomDigit;
+ while ( n > 26 )
+ {
+ bottomDigit = (n-1) % 26;
+ n = (n-1) / 26;
+ tmp.prepend( QChar( 'A' + bottomDigit ) );
+ }
+ tmp.prepend( QChar( 'A' + n -1 ) );
+ return tmp;
+}
+
+QString KoParagCounter::makeAlphaLowerNumber( int n )
+{
+ QString tmp;
+ char bottomDigit;
+ while ( n > 26 )
+ {
+ bottomDigit = (n-1) % 26;
+ n = (n-1) / 26;
+ tmp.prepend( QChar( 'a' + bottomDigit ) );
+ }
+ tmp.prepend( QChar( 'a' + n - 1 ) );
+ return tmp;
+}
+
+int KoParagCounter::fromRomanNumber( const QString &string )
+{
+ int ret = 0;
+ int stringStart = 0;
+ const int stringLen = string.length();
+
+ for (int base = 1000; base >= 1 && stringStart < stringLen; base /= 10)
+ {
+ const QCString *rn;
+ int rnNum;
+ switch (base)
+ {
+ case 1000:
+ rn = RNThousands;
+ rnNum = sizeof (RNThousands) / sizeof (const QCString);
+ break;
+ case 100:
+ rn = RNHundreds;
+ rnNum = sizeof (RNHundreds) / sizeof (const QCString);
+ break;
+ case 10:
+ rn = RNTens;
+ rnNum = sizeof (RNTens) / sizeof (const QCString);
+ break;
+ case 1:
+ default:
+ rn = RNUnits;
+ rnNum = sizeof (RNUnits) / sizeof (const QCString);
+ break;
+ }
+
+ // I _think_ this will work :) - Clarence
+ for (int i = rnNum - 1; i >= 1; i--)
+ {
+ const int rnLength = rn[i].length();
+ if (string.mid(stringStart,rnLength) == (const char*)rn[i])
+ {
+ ret += i * base;
+ stringStart += rnLength;
+ break;
+ }
+ }
+ }
+
+ return (ret == 0 || stringStart != stringLen) ? -1 /*invalid value*/ : ret;
+}
+
+int KoParagCounter::fromAlphaUpperNumber( const QString &string )
+{
+ int ret = 0;
+
+ const int len = string.length();
+ for (int i = 0; i < len; i++)
+ {
+ const int add = char(string[i]) - 'A' + 1;
+
+ if (add >= 1 && add <= 26) // _not_ < 26
+ ret = ret * 26 + add;
+ else
+ {
+ ret = -1; // invalid character
+ break;
+ }
+ }
+
+ return (ret == 0) ? -1 /*invalid value*/ : ret;
+}
+
+int KoParagCounter::fromAlphaLowerNumber( const QString &string )
+{
+ int ret = 0;
+
+ const int len = string.length();
+ for (int i = 0; i < len; i++)
+ {
+ const int add = char(string[i]) - 'a' + 1;
+
+ if (add >= 1 && add <= 26) // _not_ < 26
+ ret = ret * 26 + add;
+ else
+ {
+ ret = -1; // invalid character
+ break;
+ }
+ }
+
+ return (ret == 0) ? -1 /*invalid value*/ : ret;
+}
+
+#ifndef NDEBUG
+void KoParagCounter::printRTDebug( KoTextParag* parag )
+{
+ QString additionalInfo;
+ if ( restartCounter() )
+ additionalInfo = "[restartCounter]";
+ if ( m_style == STYLE_CUSTOMBULLET )
+ additionalInfo += " [customBullet: " + QString::number( m_customBulletChar.unicode() )
+ + " in font '" + m_customBulletFont + "']";
+ static const char * const s_numbering[] = { "List", "Chapter", "None", "Footnote" };
+ kdDebug(32500) << " Counter style=" << style()
+ << " numbering=" << s_numbering[ numbering() ]
+ << " depth=" << depth()
+ << " number=" << number( parag )
+ << " text='" << text( parag ) << "'"
+ << " width=" << width( parag )
+ << additionalInfo << endl;
+}
+#endif
diff --git a/lib/kotext/KoParagCounter.h b/lib/kotext/KoParagCounter.h
new file mode 100644
index 00000000..f58a1b93
--- /dev/null
+++ b/lib/kotext/KoParagCounter.h
@@ -0,0 +1,243 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 Shaheed Haque <srhaque@iee.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include <qstring.h>
+#include <koffice_export.h>
+class QDomElement;
+class KoXmlWriter;
+class KoGenStyle;
+class KoTextParag;
+class KoTextFormat;
+class KoOasisContext;
+
+#ifndef koparagcounter_h
+#define koparagcounter_h
+
+/**
+ * This is the structure associated with a paragraph (KoTextParag),
+ * to define the bullet or numbering of the paragraph.
+ */
+class KOTEXT_EXPORT KoParagCounter
+{
+public:
+ KoParagCounter();
+
+ /** Invalidate the internal cache. Use it whenever the number associated with this
+ * counter may have changed. */
+ void invalidate();
+
+ /** Return the current value of the counter as a number.
+ */
+ int number( const KoTextParag *paragraph );
+ /** Return the current value of the counter as a text.
+ * This returns only the current level, e.g. "1."
+ */
+ QString levelText( const KoTextParag *paragraph );
+ /** Return the current value of the counter as a text.
+ * This returns the full text, all levels included (if displayLevels>1),
+ * e.g. "1.2.1." if displayLevels==3.
+ */
+ QString text( const KoTextParag *paragraph );
+
+ /**
+ * Work out the width of the text required for this counter.
+ * Unit : LU pixels
+ */
+ int width( const KoTextParag *paragraph );
+
+ /**
+ * X position of the bullet ( i.e. width of prefix )
+ * Unit : LU pixels
+ */
+ int bulletX();
+
+ /// KOffice-1.3 loading code
+ void load( QDomElement & element );
+ /// KOffice-1.3 saving code
+ void save( QDomElement & element );
+ /** Load from OASIS XML
+ * @param heading true if heading, false if normal list
+ * @param level 1-based
+ * @param loadingStyle true if loading a style, false if loading a paragraph
+ * @param context the context
+ * @param restartNumbering if -1 then don't restart numbering, use the style value
+ * @param orderedList if true, make sure the parag will will be initialised as an ordered list
+ * otherwise it may be initialised as a unordered list.
+ */
+ void loadOasis( KoOasisContext& context, int restartNumbering, bool orderedList, bool heading, int level, bool loadingStyle = false );
+ /// Part of loadOasis that is shared with KWVariableSettings::loadOasis for footnotes/endnotes
+ void loadOasisListStyle( const QDomElement& listStyle,
+ const QDomElement& listStyleProperties,
+ const QDomElement& listStyleTextProperties,
+ int restartNumbering,
+ bool orderedList, bool heading, int level, bool loadingStyle );
+ /// Save as OASIS XML
+ void saveOasis( KoGenStyle& listStyle, bool savingStyle = false ) const;
+ /// Part of saveOasis that is shared with KoStyleCollection::saveOasisOutlineStyles
+ /// and KWVariableSettings::saveOasis for footnotes/endnotes
+ void saveOasisListLevel( KoXmlWriter& listLevelWriter, bool includeLevelAndProperties, bool savingStyle = false ) const;
+
+ bool operator==( const KoParagCounter & c2 ) const;
+ bool operator!=( const KoParagCounter & c2 ) const { return !(*this == c2); }
+
+ enum Numbering
+ {
+ NUM_NONE = 2, // Unnumbered. Equivalent to there being
+ // no counter structure associated with a
+ // paragraph.
+ NUM_LIST = 0, // Numbered as a list item.
+ NUM_CHAPTER = 1, // Numbered as a heading.
+ NUM_FOOTNOTE = 3 // Fixed text counter, set by the code. This is used by e.g. footnotes.
+ };
+ enum Style // always add to the end, the numeric values are part of the DTD
+ {
+ STYLE_NONE = 0,
+ STYLE_NUM = 1, STYLE_ALPHAB_L = 2, STYLE_ALPHAB_U = 3,
+ STYLE_ROM_NUM_L = 4, STYLE_ROM_NUM_U = 5, STYLE_CUSTOMBULLET = 6,
+ STYLE_CUSTOM = 7, STYLE_CIRCLEBULLET = 8, STYLE_SQUAREBULLET = 9,
+ STYLE_DISCBULLET = 10, STYLE_BOXBULLET = 11
+ };
+
+ /** Numbering type and style.
+ */
+ Numbering numbering() const;
+ void setNumbering( Numbering n );
+
+ Style style() const;
+ void setStyle( Style s );
+
+ /**
+ * Should this counter start at "startNumber" (instead of
+ * being the 'last counter of the same type + 1')
+ */
+ bool restartCounter() const;
+ void setRestartCounter( bool restart );
+
+ /** Does this counter have a bullet style?
+ */
+ bool isBullet() const;
+ /**
+ * Helper function for finding out if a style is a bullet
+ */
+ static bool isBullet( Style style );
+
+ /** The level of the numbering.
+ * Depth of 0 means the major numbering. (1, 2, 3...)
+ * Depth of 1 is 1.1, 1.2, 1.3 etc. */
+ unsigned int depth() const;
+ void setDepth( unsigned int d );
+
+ /** Number of levels whose numbers are displayed at the current level.
+ */
+ int displayLevels() const;
+ void setDisplayLevels( int l );
+
+ /** Starting number.
+ */
+ int startNumber() const;
+ void setStartNumber( int s );
+
+ /** Prefix and suffix strings.
+ */
+ QString prefix() const;
+ void setPrefix( QString p );
+ QString suffix() const;
+ void setSuffix( QString s );
+
+ /** The character and font for STYLE_CUSTOMBULLET.
+ */
+ QChar customBulletCharacter() const;
+ void setCustomBulletCharacter( QChar c );
+ QString customBulletFont() const;
+ void setCustomBulletFont( QString f );
+
+ /** The string STYLE_CUSTOM.
+ */
+ QString custom() const;
+ void setCustom( QString c );
+
+ /** Counter alignment
+ */
+ int alignment() const;
+ void setAlignment( int a );
+
+ /**
+ * Return the format to use for the counter.
+ * This does no caching, it's merely to centralize code.
+ */
+ static KoTextFormat* counterFormat( const KoTextParag *paragraph );
+
+ static QString makeRomanNumber( int n );
+ static QString makeAlphaUpperNumber( int n );
+ static QString makeAlphaLowerNumber( int n );
+
+ static int fromRomanNumber( const QString & );
+ static int fromAlphaUpperNumber( const QString & );
+ static int fromAlphaLowerNumber( const QString & );
+
+#ifndef NDEBUG
+ void printRTDebug( KoTextParag* parag );
+#endif
+
+private:
+
+ /** Return our parent paragraph, if there is such a thing. For a paragraph "1.1.",
+ * the parent is the paragraph numbered "1.".
+ */
+ KoTextParag *parent( const KoTextParag *paragraph );
+
+ Numbering m_numbering:3; // Numbering (maximum value: 8)
+ bool m_restartCounter:1;
+ bool unused:4;
+ Style m_style:8; // Style
+ char m_displayLevels; // Number of levels to display (e.g. 3 => 1.2.1)
+ char m_depth;
+
+ short int m_startNumber;
+ QChar m_customBulletChar;
+
+ QString m_customBulletFont;
+ QString m_custom;
+ QString m_prefix;
+ QString m_suffix;
+ int m_align;
+
+ class Private;
+ Private *d; // define operator= and copy ctor when using this!
+
+ /** The cached, calculated values for this counter:
+ *
+ * VALUE VALUE WHEN INVALID
+ * number of this counter -1
+ * text of this counter QString::null
+ * width of the label -1
+ * parent (KoTextParag *)-1
+ * the format that was used to calculate the width 0
+ */
+ struct
+ {
+ int number;
+ QString text;
+ int width;
+ KoTextParag *parent;
+ KoTextFormat * counterFormat;
+ } m_cache;
+};
+
+#endif
diff --git a/lib/kotext/KoParagDecorationTab.ui b/lib/kotext/KoParagDecorationTab.ui
new file mode 100644
index 00000000..4610f11b
--- /dev/null
+++ b/lib/kotext/KoParagDecorationTab.ui
@@ -0,0 +1,402 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KoParagDecorationTab</class>
+<author>Martin Ellis &lt;martin.ellis@kdemail.net&gt;</author>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KoBorderWidgetBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>626</width>
+ <height>345</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>backgroundColorGroupBox</cstring>
+ </property>
+ <property name="title">
+ <string>Paragraph Background Color</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;p&gt;Paragraph Background Color&lt;/p&gt;
+
+&lt;p&gt;The paragraph background color appears
+between the left and right margins of a
+paragraph.&lt;/p&gt;
+
+&lt;p&gt;If the text has a background color set, then
+the text background will appear 'on top' of the
+paragraph background. In this case, the paragraph
+background will still show on parts of the paragraph
+that have no text (usually on the last line, between
+the end of the text and the margin).&lt;/p&gt;</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>lblBackgroundColor</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Background color:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>bBackgroundColor</cstring>
+ </property>
+ </widget>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>bBackgroundColor</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>bordersGroupBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Borders</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;p&gt;Paragraph Borders&lt;/p&gt;
+
+&lt;p&gt;The preview shows what the currently
+selected paragraph borders will look like.&lt;/p&gt;
+
+&lt;p&gt;To &lt;i&gt;add&lt;/i&gt; a new border: Select the desired style,
+width and color. Click the toggle button that corresponds
+to that border.&lt;/p&gt;
+
+&lt;p&gt;To &lt;i&gt;remove&lt;/i&gt; an existing border: Either click on the
+border to be removed in the preview, or click the
+toggle button corresponding to that border.&lt;/p&gt;
+
+&lt;p&gt;To &lt;i&gt;modify&lt;/i&gt; a border: Select the desired style,
+width and color, then click on the border to be
+modified in the preview.&lt;/p&gt;</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>previewLayout</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>borderPreviewLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Preview:</string>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>borderPreview</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>200</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QFrame" row="0" column="0">
+ <property name="name">
+ <cstring>borderControlFrame</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>lblBorderWidth</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Width:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>cbBorderWidth</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="1" column="1">
+ <property name="name">
+ <cstring>cbBorderWidth</cstring>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="2" column="1">
+ <property name="name">
+ <cstring>bBorderColor</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>cbBorderStyle</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Color:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>bBorderColor</cstring>
+ </property>
+ </widget>
+ <widget class="QButtonGroup" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>bordersButtonGroup</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>bBorderLeft</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add/remove left paragraph border</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Toggles the left paragraph border on or off.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>bBorderRight</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add/remove right paragraph border</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Toggles the right paragraph border on or off.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>bBorderTop</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add/remove top paragraph border</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Toggles the top paragraph border on or off.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>bBorderBottom</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image3</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add/remove bottom paragraph border</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Toggles the bottom paragraph border on or off.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lblBorderStyle</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Style:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>cbBorderStyle</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>cbJoinBorder</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Merge with next paragraph</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Merges the border style of the current paragraph with the next paragraph</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;p&gt;Merge with next paragraph&lt;/p&gt;
+
+&lt;p&gt;When this option is checked, no top or bottom borders
+will appear between consecutive paragraphs with the
+same style. Top and Bottom borders will only appear between
+paragraphs with different styles.&lt;/p&gt;
+
+&lt;p&gt;When this option is unchecked, top and bottom borders
+always appear at the top and bottom of paragraphs with this style,
+regardless of the style of the preceeding and subsequent paragraphs.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>250</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="106">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000003149444154388d63601805d406ffa198810c9aa0816401264a34233982aa063252dbc05117520e465d48d8668af2f20800009c621507e8d6c1420000000049454e44ae426082</data>
+ </image>
+ <image name="image1">
+ <data format="PNG" length="109">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000003449444154388d63601805b400ff49a0ff23f1a966398a814c3814910db019c8486d03475d48b981a32ea4dc4052f2f228606000002cd115072e5ef6af0000000049454e44ae426082</data>
+ </image>
+ <image name="image2">
+ <data format="PNG" length="103">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000002e49444154388d6360187180118bd87f4acc6122df2d030848f53239414419187521e560d4859483ff64d223150000d38311f3dc8b4ad20000000049454e44ae426082</data>
+ </image>
+ <image name="image3">
+ <data format="PNG" length="101">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000002c49444154388d63601805b400ffc9a4e90748b571d48594db38ea42ca6d4451cf422543e180895c8da3000e00765a11f509a137610000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/lib/kotext/KoParagDia.cpp b/lib/kotext/KoParagDia.cpp
new file mode 100644
index 00000000..589cfb80
--- /dev/null
+++ b/lib/kotext/KoParagDia.cpp
@@ -0,0 +1,2289 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+ Copyright (C) 2005 Martin Ellis <martin.ellis@kdemail.net>
+ Copyright (C) 2006 Thomas Zander <zander@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoParagDia.h"
+#include "KoParagDia_p.h"
+#include "KoDocument.h"
+#include "KoTextFormat.h"
+#include "KoTextParag.h"
+#include "KoTextDocument.h"
+#include "KoTextZoomHandler.h"
+#include "KoParagDecorationTab.h"
+
+#include <KoCharSelectDia.h>
+#include <KoUnitWidgets.h>
+#include <kcolorbutton.h>
+#include <kdebug.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <knumvalidator.h>
+#include <KoGlobal.h>
+#include <qgroupbox.h>
+#include <knuminput.h>
+#include <kdeversion.h>
+#include <kpushbutton.h>
+#include <kcombobox.h>
+
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qhbuttongroup.h>
+#include <qlabel.h>
+#include <qradiobutton.h>
+#include <qvbox.h>
+#include <qhbox.h>
+#include <qtooltip.h>
+#include <qlayout.h>
+#include <qapplication.h>
+#include <qwidgetstack.h>
+
+KoCounterStyleWidget::KoCounterStyleWidget( bool displayDepth, bool onlyStyleTypeLetter, bool disableAll, QWidget * parent, const char* name )
+ :QWidget( parent, name ),
+ stylesList()
+{
+ noSignals = true;
+ styleBuffer = 999;
+ QVBoxLayout *vbox = new QVBoxLayout( this,0, 0/*KDialog::marginHint(), KDialog::spacingHint()*/ );
+ gStyle = new QGroupBox( i18n( "St&yle" ), this, "styleLayout" );
+ vbox->addWidget( gStyle);
+ QGridLayout * grid = new QGridLayout(gStyle, 12, 5, KDialog::marginHint(), KDialog::spacingHint());
+ grid->addRowSpacing(0, fontMetrics().height()/2);
+
+ makeCounterRepresenterList( stylesList, onlyStyleTypeLetter );
+
+ lstStyle = new QListBox( gStyle, "styleListBox" );
+ grid->addMultiCellWidget( lstStyle, 1, 11, 0, 0);
+ fillStyleCombo();
+ connect( lstStyle, SIGNAL( selectionChanged() ), this, SLOT( numStyleChanged() ) );
+
+
+ QLabel *lPrefix = new QLabel( gStyle, "lPrefix" );
+ lPrefix->setText( i18n( "Pre&fix text:" ) );
+ grid->addWidget( lPrefix, 1, 1);
+
+ sPrefix = new QLineEdit( gStyle, "sPrefix" );
+ lPrefix->setBuddy( sPrefix );
+ grid->addWidget( sPrefix, 1, 2);
+
+ QLabel *lSuffix = new QLabel( gStyle, "lSuffix" );
+ lSuffix->setText( i18n( "Suffi&x text:" ) );
+ grid->addWidget( lSuffix, 1, 3);
+
+ sSuffix = new QLineEdit( gStyle, "sSuffix" );
+ lSuffix->setBuddy( sSuffix );
+ grid->addWidget( sSuffix, 1, 4 );
+
+ lStart = new QLabel( gStyle, "lStart" );
+ lStart->setText( i18n( "&Start at:" ) );
+ grid->addWidget( lStart, 2, 1 );
+
+
+ spnDepth = new QSpinBox( 0, 15, 1, gStyle );
+ if ( displayDepth )
+ grid->addWidget( spnDepth, 3, 2 );
+ else
+ spnDepth->hide();
+
+ spnDisplayLevels = new QSpinBox( 0, 15, 1, gStyle );
+ spnDisplayLevels->setMinValue( 1 );
+ if ( displayDepth )
+ grid->addWidget( spnDisplayLevels, 3, 4 );
+ else
+ spnDisplayLevels->hide();
+
+
+ QHBoxLayout *customCharBox = new QHBoxLayout(0, 0, 6);
+ lCustom = new QLabel( i18n( "Custo&m character:" ), gStyle, "custom char label" );
+ customCharBox->addWidget( lCustom );
+
+ bCustom = new QPushButton( "", gStyle, "bCustom" );
+ lCustom->setBuddy( bCustom );
+ customCharBox->addWidget( bCustom );
+ connect( bCustom, SIGNAL( clicked() ), this, SLOT( selectCustomBullet() ) );
+
+ QSpacerItem* spacer_2 = new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ customCharBox->addItem( spacer_2 );
+
+ grid->addMultiCellLayout(customCharBox, 4, 4, 1, 4, Qt::AlignLeft);
+
+ spnStart = new KoSpinBox( gStyle );
+ spnStart->setMinValue ( 1);
+ lStart->setBuddy( spnStart );
+ grid->addWidget( spnStart, 2, 2);
+
+ lAlignment = new QLabel( gStyle, "lAlignment" );
+ lAlignment->setText( i18n( "Counter alignment:" ) );
+ grid->addWidget( lAlignment, 2, 3 );
+
+ cbAlignment = new KComboBox( gStyle, "cbAlignment" );
+ cbAlignment->insertItem(i18n("Align Auto"));
+ cbAlignment->insertItem(i18n("Align Left"));
+ cbAlignment->insertItem(i18n("Align Right"));
+ cbAlignment->setCurrentItem(0);
+ grid->addWidget( cbAlignment, 2, 4 );
+
+ QLabel *lDepth = new QLabel( gStyle, "lDepth" );
+ lDepth->setText( i18n( "&Depth:" ) );
+ lDepth->setBuddy( spnDepth );
+ if ( displayDepth )
+ grid->addWidget( lDepth, 3, 1 );
+ else
+ lDepth->hide();
+
+ QLabel *lDisplayLevels = new QLabel( gStyle );
+ lDisplayLevels->setText( i18n( "Display le&vels:" ) );
+ lDisplayLevels->setBuddy( spnDisplayLevels );
+ if ( displayDepth )
+ grid->addWidget( lDisplayLevels, 3, 3 );
+ else
+ lDisplayLevels->hide();
+
+ cbRestart = new QCheckBox( i18n( "&Restart numbering at this paragraph" ), gStyle );
+ grid->addMultiCellWidget( cbRestart, 5, 5, 1, 3 );
+
+ if ( onlyStyleTypeLetter )
+ {
+ lCustom->hide();
+ bCustom->hide();
+ cbRestart->hide();
+ }
+
+
+ connect( cbRestart, SIGNAL( toggled(bool) ), this, SLOT( restartChanged(bool) ) );
+
+ connect( sSuffix, SIGNAL( textChanged (const QString &) ), this, SLOT( suffixChanged(const QString &) ) );
+ connect( sPrefix, SIGNAL( textChanged (const QString &) ), this, SLOT( prefixChanged(const QString &) ) );
+ connect( spnStart, SIGNAL( valueChanged (int) ), this, SLOT( startChanged(int) ) );
+ connect( spnDepth, SIGNAL( valueChanged (int) ), this, SLOT( depthChanged(int) ) );
+ connect( spnDisplayLevels, SIGNAL( valueChanged (int) ), this, SLOT( displayLevelsChanged(int) ) );
+ connect( cbAlignment, SIGNAL( activated (const QString&) ), this, SLOT( alignmentChanged(const QString&) ) );
+ noSignals = false;
+ if ( disableAll )
+ {
+ gStyle->setEnabled( false );
+ lstStyle->setEnabled( false );
+ sSuffix->setEnabled( false );
+ sPrefix->setEnabled( false );
+ bCustom->setEnabled( false );
+ spnStart->setEnabled( false );
+ spnDepth->setEnabled( false );
+ spnDisplayLevels->setEnabled( false );
+ lStart->setEnabled( false );
+ lCustom->setEnabled( false );
+ cbRestart->setEnabled( false );
+ cbAlignment->setEnabled( false );
+ }
+}
+
+void KoCounterStyleWidget::alignmentChanged(const QString& s)
+{
+ int a;
+ if(s==i18n("Align Left"))
+ a=Qt::AlignLeft;
+ else if(s==i18n("Align Right"))
+ a=Qt::AlignRight;
+ else if(s==i18n("Align Auto"))
+ a=Qt::AlignAuto;
+ else {
+ kdError()<<"Not Implemented"<<endl;
+ return;
+ }
+ m_counter.setAlignment(a);
+ emit sig_alignmentChanged(a);
+}
+
+void KoCounterStyleWidget::setCounter( const KoParagCounter& counter )
+{
+ noSignals = true;
+ KoParagCounter::Style st = counter.style();
+ m_counter = counter;
+ // Huh? doesn't the line above do this already?
+ //m_counter.setStyle( st );
+ changeKWSpinboxType( st);
+ displayStyle( st );
+ noSignals = false;
+}
+
+void KoCounterStyleWidget::changeKWSpinboxType(KoParagCounter::Style st) {
+ switch(st)
+ {
+ case KoParagCounter::STYLE_NONE:
+ spnStart->setCounterType(KoSpinBox::NONE);
+ break;
+ case KoParagCounter::STYLE_NUM:
+ spnStart->setCounterType(KoSpinBox::NUM);
+ break;
+ case KoParagCounter::STYLE_ALPHAB_L:
+ spnStart->setCounterType(KoSpinBox::ALPHAB_L);
+ break;
+ case KoParagCounter::STYLE_ALPHAB_U:
+ spnStart->setCounterType(KoSpinBox::ALPHAB_U);
+ break;
+ case KoParagCounter::STYLE_ROM_NUM_L:
+ spnStart->setCounterType(KoSpinBox::ROM_NUM_L);
+ break;
+ case KoParagCounter::STYLE_ROM_NUM_U:
+ spnStart->setCounterType(KoSpinBox::ROM_NUM_U);
+ break;
+ default:
+ spnStart->setCounterType(KoSpinBox::NONE);
+ }
+}
+
+
+void KoCounterStyleWidget::fillStyleCombo(KoParagCounter::Numbering type) {
+ if(lstStyle==NULL) return;
+ noSignals=true;
+ unsigned int cur = lstStyle->currentItem();
+ lstStyle->clear();
+ QPtrListIterator<StyleRepresenter> style( stylesList );
+ while ( style.current() ) {
+ if(style.current()->style() == KoParagCounter::STYLE_NONE) {
+ if(type == KoParagCounter::NUM_NONE)
+ lstStyle->insertItem( style.current()->name() );
+ }
+ else if(type == KoParagCounter::NUM_LIST || !style.current()->isBullet())
+ if(type != KoParagCounter::NUM_NONE)
+ lstStyle->insertItem( style.current()->name() );
+ ++style;
+ }
+
+ if(styleBuffer <= lstStyle->count())
+ lstStyle->setCurrentItem(styleBuffer);
+ else
+ if(cur <= lstStyle->count())
+ lstStyle->setCurrentItem(cur);
+
+ if(cur > lstStyle->count()) {
+ styleBuffer = cur;
+ }
+ noSignals=false;
+}
+
+void KoCounterStyleWidget::displayStyle( KoParagCounter::Style style )
+{
+ unsigned int i = 0;
+ while ( stylesList.count() > i && stylesList.at(i)->style() != style )
+ ++i;
+ lstStyle->setCurrentItem(i);
+
+ bCustom->setText( m_counter.customBulletCharacter() );
+ if ( !m_counter.customBulletFont().isEmpty() )
+ bCustom->setFont( QFont( m_counter.customBulletFont() ) );
+
+ sPrefix->setText( m_counter.prefix() );
+ sSuffix->setText( m_counter.suffix() );
+
+ spnDepth->setValue( m_counter.depth() );
+ spnDisplayLevels->setValue( m_counter.displayLevels() );
+ spnStart->setValue( m_counter.startNumber() );
+
+ cbRestart->setChecked( m_counter.restartCounter() );
+ if(m_counter.alignment()==Qt::AlignLeft)
+ cbAlignment->setCurrentText(i18n("Align Left"));
+ else if(m_counter.alignment()==Qt::AlignRight)
+ cbAlignment->setCurrentText(i18n("Align Right"));
+ else if(m_counter.alignment()==Qt::AlignAuto)
+ cbAlignment->setCurrentText(i18n("Align Auto"));
+ else
+ kdError()<<"Not Implemented"<<endl;
+}
+
+void KoCounterStyleWidget::display( const KoParagLayout & lay ) {
+ KoParagCounter::Style style = KoParagCounter::STYLE_NONE;
+ if ( lay.counter )
+ {
+ style=lay.counter->style();
+ m_counter = *lay.counter;
+ }
+ else
+ {
+ m_counter = KoParagCounter();
+ }
+ styleBuffer = 999;
+
+ numTypeChanged( m_counter.numbering() );
+ emit sig_numTypeChanged( m_counter.numbering() );
+
+ displayStyle( style );
+}
+
+
+void KoCounterStyleWidget::numTypeChanged( int nType ) {
+ m_counter.setNumbering( static_cast<KoParagCounter::Numbering>( nType ) );
+ gStyle->setEnabled( m_counter.numbering() != KoParagCounter::NUM_NONE );
+ fillStyleCombo(m_counter.numbering());
+ bool state=m_counter.numbering()==KoParagCounter::NUM_LIST;
+ bCustom->setEnabled(state);
+ lCustom->setEnabled(state);
+}
+
+
+void KoCounterStyleWidget::makeCounterRepresenterList( QPtrList<StyleRepresenter>& stylesList, bool onlyStyleTypeLetter )
+{
+ stylesList.setAutoDelete( true );
+ stylesList.append( new StyleRepresenter(i18n( "Arabic Numbers" )
+ , KoParagCounter::STYLE_NUM));
+ stylesList.append( new StyleRepresenter(i18n( "Lower Alphabetical" )
+ , KoParagCounter::STYLE_ALPHAB_L ));
+ stylesList.append( new StyleRepresenter(i18n( "Upper Alphabetical" )
+ , KoParagCounter::STYLE_ALPHAB_U ));
+ stylesList.append( new StyleRepresenter(i18n( "Lower Roman Numbers" )
+ , KoParagCounter::STYLE_ROM_NUM_L ));
+ stylesList.append( new StyleRepresenter(i18n( "Upper Roman Numbers" )
+ , KoParagCounter::STYLE_ROM_NUM_U ));
+ if ( !onlyStyleTypeLetter )
+ {
+ stylesList.append( new StyleRepresenter(i18n( "Disc Bullet" )
+ , KoParagCounter::STYLE_DISCBULLET , true));
+ stylesList.append( new StyleRepresenter(i18n( "Square Bullet" )
+ , KoParagCounter::STYLE_SQUAREBULLET , true));
+ stylesList.append( new StyleRepresenter(i18n( "Box Bullet" )
+ , KoParagCounter::STYLE_BOXBULLET , true));
+ stylesList.append( new StyleRepresenter(i18n( "Circle Bullet" )
+ , KoParagCounter::STYLE_CIRCLEBULLET , true));
+ stylesList.append( new StyleRepresenter(i18n( "Custom Bullet" )
+ , KoParagCounter::STYLE_CUSTOMBULLET , true));
+ }
+ stylesList.append( new StyleRepresenter(i18n( "None" ), KoParagCounter::STYLE_NONE));
+}
+
+
+void KoCounterStyleWidget::selectCustomBullet() {
+ unsigned int i = 0;
+ while ( stylesList.count() > i && stylesList.at(i)->style() != KoParagCounter::STYLE_CUSTOMBULLET )
+ ++i;
+ lstStyle->setCurrentItem(i);
+
+ QString f = m_counter.customBulletFont();
+ if ( f.isEmpty() )
+ f = "symbol";
+ QChar c = m_counter.customBulletCharacter();
+
+ if ( KoCharSelectDia::selectChar( f, c ) ) {
+ emit changeCustomBullet( f, c );
+ m_counter.setCustomBulletFont( f );
+ m_counter.setCustomBulletCharacter( c );
+ if ( !f.isEmpty() )
+ bCustom->setFont( QFont( f ) );
+ bCustom->setText( c );
+ }
+}
+
+void KoCounterStyleWidget::numStyleChanged() {
+ if ( noSignals )
+ return;
+ // We selected another style from the list box.
+ styleBuffer = 999;
+ StyleRepresenter *sr = stylesList.at(lstStyle->currentItem());
+ emit changeStyle( sr->style() );
+ m_counter.setStyle( sr->style() );
+ bool isNumbered = !sr->isBullet() && !sr->style() == KoParagCounter::STYLE_NONE;
+ lStart->setEnabled( isNumbered );
+ spnStart->setEnabled( isNumbered );
+ cbRestart->setEnabled( isNumbered );
+ spnDisplayLevels->setEnabled( isNumbered );
+ changeKWSpinboxType(sr->style() );
+}
+
+
+
+KoSpinBox::KoSpinBox( QWidget * parent, const char * name )
+ : QSpinBox(parent,name)
+{
+ m_Etype=NONE;
+ //max value supported by roman number
+ setMaxValue ( 3999 );
+}
+KoSpinBox::~KoSpinBox( )
+{
+}
+
+KoSpinBox::KoSpinBox( int minValue, int maxValue, int step ,
+ QWidget * parent , const char * name )
+ : QSpinBox(minValue, maxValue,step ,
+ parent , name)
+{
+ m_Etype=NONE;
+}
+
+void KoSpinBox::setCounterType(counterType _type)
+{
+ m_Etype=_type;
+ editor()->setText(mapValueToText(value()));
+}
+
+
+QString KoSpinBox::mapValueToText( int value )
+{
+ if(value==0 && m_Etype==NUM)
+ return QString("0");
+ else if(value==0 && m_Etype!=NUM)
+ return QString::null;
+ switch(m_Etype)
+ {
+ case NUM:
+ return QString::number(value);
+ case ALPHAB_L:
+ return KoParagCounter::makeAlphaLowerNumber( value );
+ case ALPHAB_U:
+ return KoParagCounter::makeAlphaUpperNumber( value );
+ case ROM_NUM_L:
+ return KoParagCounter::makeRomanNumber( value );
+ case ROM_NUM_U:
+ return KoParagCounter::makeRomanNumber( value ).upper();
+ case NONE:
+ default:
+ return QString::null;
+ }
+ //never here
+ return QString::null;
+}
+
+int KoSpinBox::mapTextToValue( bool * ok )
+{
+ int ret;
+ QString txt = text();
+
+ *ok = TRUE;
+ switch(m_Etype)
+ {
+ case NUM:
+ ret = txt.toInt ( ok );
+ break;
+ case ALPHAB_L:
+ ret = KoParagCounter::fromAlphaLowerNumber( txt.lower() );
+ break;
+ case ALPHAB_U:
+ ret = KoParagCounter::fromAlphaUpperNumber( txt.upper() );
+ break;
+ case ROM_NUM_L:
+ ret = KoParagCounter::fromRomanNumber( txt.lower() );
+ break;
+ case ROM_NUM_U:
+ ret = KoParagCounter::fromRomanNumber( txt.lower() ); // _not_ upper()
+ break;
+ case NONE:
+ default:
+ ret = -1;
+ break;
+ }
+
+ if (ret == -1)
+ *ok = FALSE;
+
+ return ret;
+}
+
+
+/******************************************************************/
+/* class KPagePreview */
+/******************************************************************/
+
+KPagePreview::KPagePreview( QWidget* parent, const char* name )
+ : QGroupBox( i18n( "Preview" ), parent, name )
+{
+ left = 0;
+ right = 0;
+ first = 0;
+ spacing = 0;
+ before = 0;
+ after = 0;
+}
+
+void KPagePreview::drawContents( QPainter* p )
+{
+ int wid = 148;
+ int hei = 210;
+ int _x = ( width() - wid ) / 5;
+ int _y = ( height() - hei ) / 5;
+
+ int dl = convert(left);
+ int dr = convert(right);
+
+ //first+left because firstlineIndent is relative to leftIndent
+ int df = convert(first + left);
+
+ int spc = convert(spacing);
+
+ // draw page
+ p->setPen( QPen( black ) );
+ p->setBrush( QBrush( black ) );
+
+ p->drawRect( _x + 1, _y + 1, wid, hei );
+
+ p->setBrush( QBrush( white ) );
+ p->drawRect( _x, _y, wid, hei );
+
+ // draw parags
+ p->setPen( NoPen );
+ p->setBrush( QBrush( lightGray ) );
+
+ for ( int i = 1; i <= 4; i++ )
+ p->drawRect( _x + 6, _y + 6 + ( i - 1 ) * 12 + 2, wid - 12 - ( ( i / 4 ) * 4 == i ? 50 : 0 ), 6 );
+
+ p->setBrush( QBrush( darkGray ) );
+
+ for ( int i = 5; i <= 8; i++ )
+ {
+ QRect rect( ( i == 5 ? df : dl ) + _x + 6, _y + 6 + ( i - 1 ) * 12 + 2 + ( i - 5 ) * spc + static_cast<int>( before / 2 ),
+ wid - 12 - ( ( i / 4 ) * 4 == i ? 50 : 0 ) - ( ( i == 12 ? 0 : dr ) + ( i == 5 ? df : dl ) ), 6);
+
+ if(rect.width ()>=0)
+ p->drawRect( rect );
+ }
+ p->setBrush( QBrush( lightGray ) );
+
+ for ( int i = 9; i <= 12; i++ )
+ p->drawRect( _x + 6, _y + 6 + ( i - 1 ) * 12 + 2 + 3 * spc +
+ static_cast<int>( before / 2 ) + static_cast<int>( after / 2 ),
+ wid - 12 - ( ( i / 4 ) * 4 == i ? 50 : 0 ), 6 );
+
+}
+
+int KPagePreview::convert(double input) {
+ if(input < 1) return 0;
+ if(input <= 5) return 3;
+ if(input <= 10) return 4 + static_cast<int>( (input-5) / 2.5 );
+ if(input <= 20) return 6 + static_cast<int>( (input-10) / 4 );
+ if(input <= 100) return 10 + static_cast<int>( (input-20) / 8 );
+ return static_cast<int>( input / 5);
+}
+
+/******************************************************************/
+/* class KPagePreview2 */
+/******************************************************************/
+
+KPagePreview2::KPagePreview2( QWidget* parent, const char* name )
+ : QGroupBox( i18n( "Preview" ), parent, name )
+{
+ align = Qt::AlignLeft;
+}
+
+void KPagePreview2::drawContents( QPainter* p )
+{
+ int wid = 148;
+ int hei = 210;
+ int _x = ( width() - wid ) / 2;
+ int _y = ( height() - hei ) / 2;
+
+ // draw page
+ p->setPen( QPen( black ) );
+ p->setBrush( QBrush( black ) );
+
+ p->drawRect( _x + 1, _y + 1, wid, hei );
+
+ p->setBrush( QBrush( white ) );
+ p->drawRect( _x, _y, wid, hei );
+
+ // draw parags
+ p->setPen( NoPen );
+ p->setBrush( QBrush( lightGray ) );
+
+ for ( int i = 1; i <= 4; i++ )
+ p->drawRect( _x + 6, _y + 6 + ( i - 1 ) * 12 + 2, wid - 12 - ( ( i / 4 ) * 4 == i ? 50 : 0 ), 6 );
+
+ p->setBrush( QBrush( darkGray ) );
+
+ int __x = 0, __w = 0;
+ for ( int i = 5; i <= 8; i++ ) {
+ switch ( i ) {
+ case 5: __w = wid - 12;
+ break;
+ case 6: __w = wid - 52;
+ break;
+ case 7: __w = wid - 33;
+ break;
+ case 8: __w = wid - 62;
+ default: break;
+ }
+
+ switch ( align ) {
+ case Qt::AlignAuto:
+ case Qt::AlignLeft:
+ __x = _x + 6;
+ break;
+ case Qt::AlignHCenter:
+ __x = _x + ( wid - __w ) / 2;
+ break;
+ case Qt::AlignRight:
+ __x = _x + ( wid - __w ) - 6;
+ break;
+ case Qt::AlignJustify:
+ {
+ if ( i < 8 ) __w = wid - 12;
+ __x = _x + 6;
+ } break;
+ }
+
+ p->drawRect( __x, _y + 6 + ( i - 1 ) * 12 + 2 + ( i - 5 ), __w, 6 );
+ }
+
+ p->setBrush( QBrush( lightGray ) );
+
+ for ( int i = 9; i <= 12; i++ )
+ p->drawRect( _x + 6, _y + 6 + ( i - 1 ) * 12 + 2 + 3, wid - 12 - ( ( i / 4 ) * 4 == i ? 50 : 0 ), 6 );
+
+}
+
+/******************************************************************/
+/* class KoBorderPreview */
+/******************************************************************/
+
+
+KoBorderPreview::KoBorderPreview( QWidget* parent, const char* name )
+ :QFrame(parent,name)
+{
+}
+
+void KoBorderPreview::mousePressEvent( QMouseEvent *_ev )
+{
+ emit choosearea(_ev);
+}
+
+void KoBorderPreview::setBorder( KoBorder::BorderType which, const KoBorder& border)
+{
+ switch( which ) {
+ case KoBorder::TopBorder:
+ setTopBorder( border );
+ break;
+ case KoBorder::BottomBorder:
+ setBottomBorder( border );
+ break;
+ case KoBorder::LeftBorder:
+ setLeftBorder( border );
+ break;
+ case KoBorder::RightBorder:
+ setRightBorder( border );
+ break;
+ default:
+ kdError() << "KoBorderPreview: unknown border type" << endl;
+ }
+}
+
+void KoBorderPreview::drawContents( QPainter* painter )
+{
+ QRect r = contentsRect();
+ QFontMetrics fm( font() );
+
+ painter->fillRect( r.x() + fm.width( 'W' ), r.y() + fm.height(), r.width() - 2 * fm.width( 'W' ),
+ r.height() - 2 * fm.height(), white );
+ painter->setClipRect( r.x() + fm.width( 'W' ), r.y() + fm.height(), r.width() - 2 * fm.width( 'W' ),
+ r.height() - 2 * fm.height() );
+
+ bool leftdouble = m_leftBorder.width() > 0 && m_leftBorder.getStyle() == KoBorder::DOUBLE_LINE;
+ bool rightdouble = m_rightBorder.width() > 0 && m_rightBorder.getStyle() == KoBorder::DOUBLE_LINE;
+ bool topdouble = m_topBorder.width() > 0 && m_topBorder.getStyle() == KoBorder::DOUBLE_LINE;
+ bool bottomdouble = m_bottomBorder.width() > 0 && m_bottomBorder.getStyle() == KoBorder::DOUBLE_LINE;
+
+ if ( m_topBorder.width() > 0 ) {
+ painter->setPen( setBorderPen( m_topBorder ) );
+ painter->drawLine( r.x() + 20, r.y() + 30, r.right() - 19, r.y() + 30 );
+ if ( m_topBorder.getStyle()==KoBorder::DOUBLE_LINE)
+ painter->drawLine( int(r.x() + 20 + ( leftdouble ? m_leftBorder.width() + 1 : 0) ),
+ int(r.y() + 30 + m_topBorder.width()+1),
+ int(r.right() - 19 - ( rightdouble ? m_rightBorder.width() + 1 : 0) ),
+ int(r.y() + 30 + m_topBorder.width()+1)
+ );
+ }
+
+ if ( m_bottomBorder.width() > 0 ) {
+ painter->setPen( setBorderPen( m_bottomBorder ) );
+ painter->drawLine( r.x() + 20, r.bottom() - 30, r.right() - 19, r.bottom() - 30 );
+ if ( m_bottomBorder.getStyle()==KoBorder::DOUBLE_LINE)
+ painter->drawLine( int(r.x() + 20 + ( leftdouble ? m_leftBorder.width() + 1 : 0) ),
+ int(r.bottom() - 30 - m_bottomBorder.width()-1),
+ int(r.right() - 19 - ( rightdouble ? m_rightBorder.width() + 1 : 0) ),
+ int(r.bottom() - 30 - m_bottomBorder.width() - 1)
+ );
+ }
+
+ if ( m_leftBorder.width() > 0 ) {
+ painter->setPen( setBorderPen( m_leftBorder ) );
+ painter->drawLine( r.x() + 20, r.y() + 30, r.x() + 20, r.bottom() - 29 );
+ if ( m_leftBorder.getStyle()==KoBorder::DOUBLE_LINE)
+ painter->drawLine( int(r.x() + 20 + m_leftBorder.width() +1),
+ int(r.y() + 30 + ( topdouble ? m_topBorder.width() + 1 : 0) ),
+ int(r.x() + 20 + m_leftBorder.width() +1),
+ int(r.bottom() - 29 - ( bottomdouble ? m_bottomBorder.width() + 1 : 0) )
+ );
+ }
+
+ if ( m_rightBorder.width() > 0 ) {
+ painter->setPen( setBorderPen( m_rightBorder ) );
+ painter->drawLine( r.right() - 20, r.y() + 30, r.right() - 20, r.bottom() - 29 );
+ if ( m_rightBorder.getStyle()==KoBorder::DOUBLE_LINE)
+ painter->drawLine( int(r.right() - 20 - m_rightBorder.width() - 1 ),
+ int(r.y() + 30 + ( topdouble ? m_topBorder.width() + 1 : 0) ),
+ int(r.right() - 20 - m_rightBorder.width() - 1),
+ int(r.bottom() - 29 - ( bottomdouble ? m_bottomBorder.width() + 1 : 0) )
+ );
+ }
+}
+
+QPen KoBorderPreview::setBorderPen( KoBorder _brd )
+{
+ QPen pen( black, 1, SolidLine );
+
+ pen.setWidth( static_cast<int>( _brd.penWidth() ) );
+ pen.setColor( _brd.color );
+
+ switch ( _brd.getStyle() ) {
+ case KoBorder::SOLID:
+ pen.setStyle( SolidLine );
+ break;
+ case KoBorder::DASH:
+ pen.setStyle( DashLine );
+ break;
+ case KoBorder::DOT:
+ pen.setStyle( DotLine );
+ break;
+ case KoBorder::DASH_DOT:
+ pen.setStyle( DashDotLine );
+ break;
+ case KoBorder::DASH_DOT_DOT:
+ pen.setStyle( DashDotDotLine );
+ break;
+ case KoBorder::DOUBLE_LINE:
+ pen.setStyle( SolidLine );
+ break;
+ }
+
+ return QPen( pen );
+}
+
+/******************************************************************/
+/* Class: KoStylePreview. Previewing text with style ;) */
+/******************************************************************/
+class MyFlow : public KoTextFlow {
+ public:
+ MyFlow(QWidget *parent, KoTextZoomHandler *zoom) {
+ m_parent = parent;
+ m_zoomHandler = zoom;
+ }
+ int availableHeight() const {
+ return m_zoomHandler->pixelToLayoutUnitY(m_parent->height());
+ }
+ private:
+ QWidget *m_parent;
+ KoTextZoomHandler *m_zoomHandler;
+};
+
+KoStylePreview::KoStylePreview( const QString& title, const QString& text, QWidget* parent, const char* name )
+ : QGroupBox( title, parent, name )
+{
+ setMinimumHeight(80);
+ m_zoomHandler = new KoTextZoomHandler;
+ QFont font = KoGlobal::defaultFont();
+ m_textdoc = new KoTextDocument( m_zoomHandler, new KoTextFormatCollection( font, QColor(), KGlobal::locale()->language(), false ) );
+
+ m_textdoc->setFlow( new MyFlow(this, m_zoomHandler) );
+ //m_textdoc->setWidth( KoTextZoomHandler::ptToLayoutUnitPt( 1000 ) );
+ KoTextParag * parag = m_textdoc->firstParag();
+ parag->insert( 0, text );
+}
+
+KoStylePreview::~KoStylePreview()
+{
+ delete m_textdoc;
+ delete m_zoomHandler;
+}
+
+void KoStylePreview::setCounter( const KoParagCounter & counter )
+{
+ KoTextParag * parag = m_textdoc->firstParag();
+ parag->setCounter( counter );
+ repaint( true );
+}
+
+void KoStylePreview::setStyle( KoParagStyle * style )
+{
+ KoTextParag * parag = m_textdoc->firstParag();
+ parag->applyStyle( style );
+ repaint(true);
+}
+
+void KoStylePreview::drawContents( QPainter *painter )
+{
+ painter->save();
+ QRect r = contentsRect();
+ //kdDebug(32500) << "KoStylePreview::drawContents contentsRect=" << DEBUGRECT(r) << endl;
+
+ QRect whiteRect( r.x() + 10, r.y() + 10,
+ r.width() - 20, r.height() - 20 );
+ QColorGroup cg = QApplication::palette().active();
+ painter->fillRect( whiteRect, cg.brush( QColorGroup::Base ) );
+
+ KoTextParag * parag = m_textdoc->firstParag();
+ int widthLU = m_zoomHandler->pixelToLayoutUnitX( whiteRect.width() - 2 ); // keep one pixel border horizontally
+ if ( m_textdoc->width() != widthLU )
+ {
+ // For centering to work, and to even get word wrapping when the thing is too big :)
+ m_textdoc->setWidth( widthLU );
+ parag->invalidate(0);
+ }
+
+ parag->format();
+ QRect textRect = parag->pixelRect( m_zoomHandler );
+
+ // Center vertically, but not horizontally, to keep the parag alignment working,
+ textRect.moveTopLeft( QPoint( whiteRect.x(),
+ whiteRect.y() + ( whiteRect.height() - textRect.height() ) / 2 ) );
+ // Move it from the left border a little
+ textRect.rLeft() += 4;
+ textRect.rRight() += 4;
+ //kdDebug(32500) << "KoStylePreview::drawContents textRect=" << DEBUGRECT(textRect)
+ // << " textSize=" << textSize.width() << "," << textSize.height() << endl;
+ painter->setClipRect( textRect.intersect( whiteRect ) );
+ painter->translate( textRect.x(), textRect.y() );
+
+ m_textdoc->drawWYSIWYG( painter, 0, 0, textRect.width(), textRect.height(), cg, m_zoomHandler );
+ painter->restore();
+}
+
+KoIndentSpacingWidget::KoIndentSpacingWidget( KoUnit::Unit unit, double _frameWidth,QWidget * parent, const char * name )
+ : KoParagLayoutWidget( KoParagDia::PD_SPACING, parent, name ), m_unit( unit )
+{
+ QString unitName = KoUnit::unitName( m_unit );
+ QGridLayout *mainGrid = new QGridLayout( this, 3, 2, KDialog::marginHint(), KDialog::spacingHint() );
+
+ // mainGrid gives equal space to each groupbox, apparently
+ // I tried setRowStretch but the result is awful (much space between them and not equal!)
+ // Any other way (in order to make the 2nd, the one with a single checkbox, a bit
+ // smaller than the other 3) ? (DF)
+
+
+ // --------------- indent ---------------
+ double frameWidth=_frameWidth;
+ QString length;
+ if(frameWidth==-1) {
+ frameWidth=9999;
+ } else {
+ length=i18n("Frame width: %1 %2")
+ .arg(KoUnit::toUserStringValue(frameWidth,m_unit))
+ .arg(KoUnit::unitName(m_unit));
+ frameWidth=KoUnit::toUserValue(frameWidth,m_unit);
+ }
+
+ QGroupBox * indentFrame = new QGroupBox( i18n( "Indent" ), this );
+ QGridLayout * indentGrid = new QGridLayout( indentFrame, 5, 2, KDialog::marginHint(), KDialog::spacingHint() );
+
+ QLabel * lLimit = new QLabel(length , indentFrame );
+ if(frameWidth!=-1)
+ {
+ lLimit->setAlignment( AlignRight );
+ indentGrid->addWidget( lLimit, 1,0 );
+ }
+
+ QLabel * lLeft = new QLabel( i18n("&Left:"), indentFrame );
+ lLeft->setAlignment( Qt::AlignVCenter | Qt::AlignRight );
+ indentGrid->addWidget( lLeft, 1, 0 );
+
+ eLeft = new KoUnitDoubleSpinBox( indentFrame, 0, 9999, 1, 0.0, m_unit );
+ lLeft->setBuddy( eLeft );
+ indentGrid->addWidget( eLeft, 1, 1 );
+ connect( eLeft, SIGNAL( valueChangedPt(double ) ), this, SLOT( leftChanged( double ) ) );
+
+ QLabel * lRight = new QLabel( i18n("&Right:"), indentFrame );
+ lRight->setAlignment( Qt::AlignVCenter | Qt::AlignRight );
+ indentGrid->addWidget( lRight, 2, 0 );
+
+ eRight = new KoUnitDoubleSpinBox( indentFrame, 0, 9999, 1, 0.0, m_unit );
+ lRight->setBuddy( eRight );
+ indentGrid->addWidget( eRight, 2, 1 );
+ connect( eRight, SIGNAL( valueChangedPt( double ) ), this, SLOT( rightChanged( double ) ) );
+
+ QLabel * lFirstLine = new QLabel( i18n("&First line:"), indentFrame );
+ lFirstLine->setAlignment( Qt::AlignVCenter | Qt::AlignRight );
+ indentGrid->addWidget( lFirstLine, 3, 0 );
+
+ eFirstLine = new KoUnitDoubleSpinBox( indentFrame, -9999, 9999, 1, 0.0, m_unit );
+ lFirstLine->setBuddy( eFirstLine );
+ connect( eFirstLine, SIGNAL( valueChangedPt( double ) ), this, SLOT( firstChanged( double ) ) );
+ indentGrid->addWidget( eFirstLine, 3, 1 );
+
+ // grid row spacing
+ indentGrid->addRowSpacing( 0, fontMetrics().height() / 2 ); // groupbox title
+ for ( int i = 1 ; i < indentGrid->numRows() ; ++i )
+ indentGrid->setRowStretch( i, 1 );
+ mainGrid->addWidget( indentFrame, 0, 0 );
+
+ // --------------- line spacing ---------------
+ QGroupBox * spacingFrame = new QGroupBox( i18n( "Line &Spacing" ), this, "spacingFrame" );
+ QGridLayout * spacingGrid = new QGridLayout( spacingFrame, 2, 1,
+ KDialog::marginHint(), KDialog::spacingHint() );
+
+ cSpacing = new QComboBox( false, spacingFrame, "" );
+ // Keep order in sync with lineSpacingType() and display()
+ cSpacing->insertItem( i18n( "Line spacing value", "Single" ) );
+ cSpacing->insertItem( i18n( "Line spacing value", "1.5 Lines" ) );
+ cSpacing->insertItem( i18n( "Line spacing value", "Double" ) );
+ cSpacing->insertItem( i18n( "Proportional") ); // LS_MULTIPLE, called Proportional like in OO
+ cSpacing->insertItem( i18n( "Line Distance (%1)" ).arg(unitName) ); // LS_CUSTOM
+ cSpacing->insertItem( i18n( "At Least (%1)" ).arg(unitName) );
+ cSpacing->insertItem( i18n( "Fixed (%1)").arg(unitName) ); // LS_FIXED
+
+ connect( cSpacing, SIGNAL( activated( int ) ), this, SLOT( spacingActivated( int ) ) );
+ spacingGrid->addWidget( cSpacing, 1, 0 );
+
+ sSpacingStack = new QWidgetStack( spacingFrame );
+
+ eSpacing = new KoUnitDoubleSpinBox( spacingFrame, 0, 9999, CM_TO_POINT(1),
+ 0.0, m_unit );
+ eSpacing->setRange( 0, 9999, 1, false);
+ connect( eSpacing, SIGNAL( valueChanged( double ) ), this, SLOT( spacingChanged( double ) ) );
+ eSpacingPercent = new KIntNumInput( 100, spacingFrame );
+ eSpacingPercent->setRange( 0, 1000, 10, false );
+ eSpacingPercent->setSuffix( " %" );
+ connect( eSpacingPercent, SIGNAL( valueChanged( int ) ), this, SLOT( spacingChanged( int ) ) );
+
+ sSpacingStack->addWidget( eSpacing );
+ sSpacingStack->addWidget( eSpacingPercent );
+ spacingGrid->addWidget( sSpacingStack, 1, 1 );
+
+ // grid row spacing
+ spacingGrid->addRowSpacing( 0, fontMetrics().height() / 2 ); // groupbox title
+ for ( int i = 1 ; i < spacingGrid->numRows() ; ++i )
+ spacingGrid->setRowStretch( i, 1 );
+ mainGrid->addWidget( spacingFrame, 1, 0 );
+
+ eSpacing->setEnabled( true );
+
+ // --------------- paragraph spacing ---------------
+ QGroupBox * pSpaceFrame = new QGroupBox( i18n( "Para&graph Space" ), this, "pSpaceFrame" );
+ QGridLayout * pSpaceGrid = new QGridLayout( pSpaceFrame, 3, 2,
+ KDialog::marginHint(), KDialog::spacingHint() );
+
+ QLabel * lBefore = new QLabel( i18n("Before:"), pSpaceFrame );
+ lBefore->setAlignment( AlignRight );
+ pSpaceGrid->addWidget( lBefore, 1, 0 );
+
+ eBefore = new KoUnitDoubleSpinBox( pSpaceFrame, 0, 9999, CM_TO_POINT(1), 0.0, m_unit );
+ eBefore->setRange( 0 , 9999, 1, false);
+ connect( eBefore, SIGNAL( valueChanged( double ) ), this, SLOT( beforeChanged( double ) ) );
+ pSpaceGrid->addWidget( eBefore, 1, 1 );
+
+ QLabel * lAfter = new QLabel( i18n("After:"), pSpaceFrame );
+ lAfter->setAlignment( AlignRight );
+ pSpaceGrid->addWidget( lAfter, 2, 0 );
+
+ eAfter = new KoUnitDoubleSpinBox( pSpaceFrame, 0, 9999, 1, 0.0, m_unit );
+ eAfter->setRange( 0, 9999, 1, false);
+ connect( eAfter, SIGNAL( valueChanged( double ) ), this, SLOT( afterChanged( double ) ) );
+ pSpaceGrid->addWidget( eAfter, 2, 1 );
+
+ // grid row spacing
+ pSpaceGrid->addRowSpacing( 0, fontMetrics().height() / 2 ); // groupbox title
+ for ( int i = 1 ; i < pSpaceGrid->numRows() ; ++i )
+ pSpaceGrid->setRowStretch( i, 1 );
+ mainGrid->addWidget( pSpaceFrame, 2, 0 );
+
+ // --------------- preview --------------------
+ prev1 = new KPagePreview( this, "KPagePreview" );
+ mainGrid->addMultiCellWidget( prev1, 0, mainGrid->numRows()-1, 1, 1 );
+
+ mainGrid->setColStretch( 1, 1 );
+ //mainGrid->setRowStretch( 4, 1 );
+}
+
+double KoIndentSpacingWidget::leftIndent() const
+{
+ return QMAX(0, eLeft->value() );
+}
+
+double KoIndentSpacingWidget::rightIndent() const
+{
+ return QMAX(0,eRight->value() );
+}
+
+double KoIndentSpacingWidget::firstLineIndent() const
+{
+ return eFirstLine->value();
+}
+
+double KoIndentSpacingWidget::spaceBeforeParag() const
+{
+ return QMAX(0, eBefore->value() );
+}
+
+double KoIndentSpacingWidget::spaceAfterParag() const
+{
+ return QMAX(0, eAfter->value() );
+}
+
+KoParagLayout::SpacingType KoIndentSpacingWidget::lineSpacingType() const
+{
+ int index = cSpacing->currentItem();
+ switch ( index ) {
+ case 0:
+ return KoParagLayout::LS_SINGLE;
+ case 1:
+ return KoParagLayout::LS_ONEANDHALF;
+ case 2:
+ return KoParagLayout::LS_DOUBLE;
+ case 3:
+ return KoParagLayout::LS_MULTIPLE;
+ case 4:
+ return KoParagLayout::LS_CUSTOM;
+ case 5:
+ return KoParagLayout::LS_AT_LEAST;
+ case 6:
+ return KoParagLayout::LS_FIXED;
+ default:
+ kdError(32500) << "Error in KoIndentSpacingWidget::lineSpacingType" << endl;
+ return KoParagLayout::LS_SINGLE;
+ }
+}
+
+double KoIndentSpacingWidget::lineSpacing() const
+{
+ return (lineSpacingType() == KoParagLayout::LS_MULTIPLE)
+ ? QMAX( 1, eSpacingPercent->value() ) / 100.0
+ : QMAX( 0, eSpacing->value() );
+}
+
+
+void KoIndentSpacingWidget::display( const KoParagLayout & lay )
+{
+ double _left = lay.margins[QStyleSheetItem::MarginLeft];
+ eLeft->changeValue( _left );
+ //prev1->setLeft( _left ); done by leftChanged() below
+ leftChanged( _left ); // sets min value for eFirstLine
+
+ double _right = lay.margins[QStyleSheetItem::MarginRight];
+ eRight->changeValue( _right );
+ prev1->setRight( _right );
+
+ double _first = lay.margins[QStyleSheetItem::MarginFirstLine];
+ eFirstLine->changeValue( _first );
+ prev1->setFirst( _first );
+
+ double _before = lay.margins[QStyleSheetItem::MarginTop];
+ eBefore->changeValue( _before );
+ prev1->setBefore( _before );
+
+ double _after = lay.margins[QStyleSheetItem::MarginBottom];
+ eAfter->changeValue( _after );
+ prev1->setAfter( _after );
+
+ double _spacing = lay.lineSpacingValue();
+ KoParagLayout::SpacingType _type = lay.lineSpacingType;
+ switch ( _type ) {
+ case KoParagLayout::LS_SINGLE: // single
+ cSpacing->setCurrentItem( 0 );
+ break;
+ case KoParagLayout::LS_ONEANDHALF:
+ cSpacing->setCurrentItem( 1 );
+ break;
+ case KoParagLayout::LS_DOUBLE:
+ cSpacing->setCurrentItem( 2 );
+ break;
+ case KoParagLayout::LS_MULTIPLE:
+ cSpacing->setCurrentItem( 3 );
+ break;
+ case KoParagLayout::LS_CUSTOM:
+ cSpacing->setCurrentItem( 4 );
+ break;
+ case KoParagLayout::LS_AT_LEAST:
+ cSpacing->setCurrentItem( 5 );
+ break;
+ case KoParagLayout::LS_FIXED:
+ cSpacing->setCurrentItem( 6 );
+ break;
+ default:
+ cSpacing->setCurrentItem( 0 );
+ break;
+ }
+
+ updateLineSpacing( _type );
+ eSpacing->setValue( (_type == KoParagLayout::LS_MULTIPLE) ? QMAX( 1, _spacing )
+ : KoUnit::toUserValue( _spacing, m_unit ) );
+ eSpacingPercent->setValue( ( _type == KoParagLayout::LS_MULTIPLE ) ? qRound( _spacing * 100 ) : 100 );
+}
+
+void KoIndentSpacingWidget::save( KoParagLayout & lay )
+{
+ lay.setLineSpacingValue(lineSpacing());
+ lay.lineSpacingType = lineSpacingType();
+ lay.margins[QStyleSheetItem::MarginLeft] = leftIndent();
+ lay.margins[QStyleSheetItem::MarginRight] = rightIndent();
+ lay.margins[QStyleSheetItem::MarginFirstLine] = firstLineIndent();
+ lay.margins[QStyleSheetItem::MarginTop] = spaceBeforeParag();
+ lay.margins[QStyleSheetItem::MarginBottom] = spaceAfterParag();
+}
+
+QString KoIndentSpacingWidget::tabName()
+{
+ return i18n( "Indent && S&pacing" );
+}
+
+void KoIndentSpacingWidget::leftChanged( double val )
+{
+ prev1->setLeft( val );
+ // The minimum first-line margin is -leftMargin() (where leftMargin>=0)
+ eFirstLine->setMinValue( -QMAX( 0, val ) );
+}
+
+void KoIndentSpacingWidget::rightChanged( double val )
+{
+ prev1->setRight( val );
+}
+
+void KoIndentSpacingWidget::firstChanged( double val )
+{
+ prev1->setFirst( val );
+}
+
+void KoIndentSpacingWidget::updateLineSpacing( KoParagLayout::SpacingType _type )
+{
+ bool needsValue = (_type != KoParagLayout::LS_SINGLE &&
+ _type != KoParagLayout::LS_ONEANDHALF &&
+ _type != KoParagLayout::LS_DOUBLE);
+
+ if ( _type == KoParagLayout::LS_MULTIPLE )
+ {
+ sSpacingStack->raiseWidget( eSpacingPercent );
+ }
+ else
+ {
+ sSpacingStack->raiseWidget( eSpacing );
+ }
+ eSpacing->setEnabled( needsValue );
+ if ( needsValue )
+ prev1->setSpacing( eSpacing->value() );
+ else
+ {
+ prev1->setSpacing( _type == KoParagLayout::LS_ONEANDHALF ? 8 :
+ _type == KoParagLayout::LS_DOUBLE ? 16 :0 );
+ }
+}
+
+void KoIndentSpacingWidget::spacingActivated( int /*_index*/ )
+{
+ updateLineSpacing( lineSpacingType() );
+ if ( eSpacing->isEnabled() ) // i.e. needsValue = true
+ eSpacing->setFocus();
+}
+
+void KoIndentSpacingWidget::spacingChanged( double _val )
+{
+ prev1->setSpacing( _val );
+}
+
+void KoIndentSpacingWidget::spacingChanged( int _val )
+{
+ prev1->setSpacing( _val / 100.0 );
+}
+
+void KoIndentSpacingWidget::beforeChanged( double _val )
+{
+ prev1->setBefore( KoUnit::fromUserValue( _val, m_unit ) );
+}
+
+void KoIndentSpacingWidget::afterChanged( double _val )
+{
+ prev1->setAfter( KoUnit::fromUserValue( _val, m_unit ) );
+}
+
+
+KoParagAlignWidget::KoParagAlignWidget( bool breakLine, QWidget * parent, const char * name )
+ : KoParagLayoutWidget( KoParagDia::PD_ALIGN, parent, name )
+{
+ QGridLayout *grid = new QGridLayout( this, 3, 2, KDialog::marginHint(), KDialog::spacingHint() );
+
+ QVGroupBox * AlignGroup = new QVGroupBox( i18n( "Alignment" ), this );
+
+ rLeft = new QRadioButton( i18n( "&Left" ), AlignGroup );
+ connect( rLeft, SIGNAL( clicked() ), this, SLOT( alignLeft() ) );
+
+ rCenter = new QRadioButton( i18n( "C&enter" ), AlignGroup );
+ connect( rCenter, SIGNAL( clicked() ), this, SLOT( alignCenter() ) );
+
+ rRight = new QRadioButton( i18n( "&Right" ), AlignGroup );
+ connect( rRight, SIGNAL( clicked() ), this, SLOT( alignRight() ) );
+
+ rJustify = new QRadioButton( i18n( "&Justify" ), AlignGroup );
+ connect( rJustify, SIGNAL( clicked() ), this, SLOT( alignJustify() ) );
+
+ clearAligns();
+ rLeft->setChecked( true );
+
+ grid->addWidget(AlignGroup, 0, 0);
+
+ // --------------- End of page /frame ---------------
+ QGroupBox * endFramePage = new QGroupBox( i18n( "Behavior at &End of Frame/Page" ), this );
+ QGridLayout * endFramePageGrid = new QGridLayout( endFramePage, 4, 1,
+ KDialog::marginHint(), KDialog::spacingHint() );
+
+ cKeepLinesTogether = new QCheckBox( i18n("&Keep lines together"),endFramePage);
+ endFramePageGrid->addWidget( cKeepLinesTogether, 1, 0 );
+ cHardBreakBefore = new QCheckBox( i18n("Insert break before paragraph"),endFramePage);
+ endFramePageGrid->addWidget( cHardBreakBefore, 2, 0 );
+ cHardBreakAfter = new QCheckBox( i18n("Insert break after paragraph"),endFramePage);
+ endFramePageGrid->addWidget( cHardBreakAfter, 3, 0 );
+
+ endFramePageGrid->addRowSpacing( 0, fontMetrics().height() / 2 ); // groupbox title
+ for ( int i = 0 ; i < endFramePageGrid->numRows()-1 ; ++i )
+ endFramePageGrid->setRowStretch( 0, 0 );
+ endFramePageGrid->setRowStretch( endFramePageGrid->numRows()-1, 1 );
+ grid->addWidget( endFramePage, 2, 0 );
+
+ endFramePage->setEnabled(breakLine);
+
+ // --------------- preview --------------------
+ prev2 = new KPagePreview2( this, "KPagePreview2" );
+ grid->addMultiCellWidget( prev2, 0, 2, 1, 1 );
+
+ // --------------- main grid ------------------
+ grid->setColStretch( 1, 1 );
+ grid->setRowStretch( 1, 1 );
+}
+
+int KoParagAlignWidget::pageBreaking() const
+{
+ int pb = 0;
+ if ( cKeepLinesTogether->isChecked() )
+ pb |= KoParagLayout::KeepLinesTogether;
+ if ( cHardBreakBefore->isChecked() )
+ pb |= KoParagLayout::HardFrameBreakBefore;
+ if ( cHardBreakAfter->isChecked() )
+ pb |= KoParagLayout::HardFrameBreakAfter;
+ return pb;
+}
+
+
+void KoParagAlignWidget::display( const KoParagLayout & lay )
+{
+ int align = lay.alignment;
+ prev2->setAlign( align );
+
+ clearAligns();
+ switch ( align ) {
+ case Qt::AlignAuto: // see KoView::setAlign
+ case Qt::AlignLeft:
+ rLeft->setChecked( true );
+ break;
+ case Qt::AlignHCenter:
+ rCenter->setChecked( true );
+ break;
+ case Qt::AlignRight:
+ rRight->setChecked( true );
+ break;
+ case Qt::AlignJustify:
+ rJustify->setChecked( true );
+ }
+
+ cKeepLinesTogether->setChecked( lay.pageBreaking & KoParagLayout::KeepLinesTogether );
+ cHardBreakBefore->setChecked( lay.pageBreaking & KoParagLayout::HardFrameBreakBefore );
+ cHardBreakAfter->setChecked( lay.pageBreaking & KoParagLayout::HardFrameBreakAfter );
+ // ## preview support for end-of-frame ?
+}
+
+void KoParagAlignWidget::save( KoParagLayout & lay )
+{
+ lay.alignment = align();
+ lay.pageBreaking = pageBreaking();
+}
+
+int KoParagAlignWidget::align() const
+{
+ if ( rLeft->isChecked() ) return Qt::AlignLeft;
+ else if ( rCenter->isChecked() ) return Qt::AlignHCenter;
+ else if ( rRight->isChecked() ) return Qt::AlignRight;
+ else if ( rJustify->isChecked() ) return Qt::AlignJustify;
+
+ return Qt::AlignLeft;
+}
+
+QString KoParagAlignWidget::tabName()
+{
+ return i18n( "General &Layout" );
+}
+
+void KoParagAlignWidget::alignLeft()
+{
+ prev2->setAlign( Qt::AlignLeft );
+ clearAligns();
+ rLeft->setChecked( true );
+}
+
+void KoParagAlignWidget::alignCenter()
+{
+ prev2->setAlign( Qt::AlignHCenter );
+ clearAligns();
+ rCenter->setChecked( true );
+}
+
+void KoParagAlignWidget::alignRight()
+{
+ prev2->setAlign( Qt::AlignRight );
+ clearAligns();
+ rRight->setChecked( true );
+}
+
+void KoParagAlignWidget::alignJustify()
+{
+ prev2->setAlign( Qt::AlignJustify );
+ clearAligns();
+ rJustify->setChecked( true );
+}
+
+void KoParagAlignWidget::clearAligns()
+{
+ rLeft->setChecked( false );
+ rCenter->setChecked( false );
+ rRight->setChecked( false );
+ rJustify->setChecked( false );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+KoParagDecorationWidget::KoParagDecorationWidget( QWidget * parent,
+ const char * name )
+ : KoParagLayoutWidget( KoParagDia::PD_DECORATION, parent, name )
+{
+ QVBoxLayout *tabLayout = new QVBoxLayout( this );
+ wDeco = new KoParagDecorationTab( this );
+ tabLayout->add( wDeco );
+
+ // Set up Border Style combo box
+ wDeco->cbBorderStyle->insertItem( KoBorder::getStyle( KoBorder::SOLID ) );
+ wDeco->cbBorderStyle->insertItem( KoBorder::getStyle( KoBorder::DASH ) );
+ wDeco->cbBorderStyle->insertItem( KoBorder::getStyle( KoBorder::DOT ) );
+ wDeco->cbBorderStyle->insertItem( KoBorder::getStyle( KoBorder::DASH_DOT ) );
+ wDeco->cbBorderStyle->insertItem( KoBorder::getStyle( KoBorder::DASH_DOT_DOT ) );
+ wDeco->cbBorderStyle->insertItem( KoBorder::getStyle( KoBorder::DOUBLE_LINE ) );
+
+ // Set up Border Width combo box
+ for( unsigned int i = 1; i <= 10; i++ )
+ wDeco->cbBorderWidth->insertItem(QString::number(i));
+
+ // Setup the border toggle buttons, and merge checkbox
+ connect( wDeco->bBorderLeft, SIGNAL( toggled( bool ) ),
+ this, SLOT( brdLeftToggled( bool ) ) );
+ connect( wDeco->bBorderRight, SIGNAL( toggled( bool ) ),
+ this, SLOT( brdRightToggled( bool ) ) );
+ connect( wDeco->bBorderTop, SIGNAL( toggled( bool ) ),
+ this, SLOT( brdTopToggled( bool ) ) );
+ connect( wDeco->bBorderBottom, SIGNAL( toggled( bool ) ),
+ this, SLOT( brdBottomToggled( bool ) ) );
+ connect( wDeco->cbJoinBorder, SIGNAL( toggled( bool ) ),
+ this, SLOT( brdJoinToggled( bool ) ) );
+
+ // Set up Border preview widget
+ wPreview = new KoBorderPreview( wDeco->borderPreview );
+ QVBoxLayout *previewLayout = new QVBoxLayout( wDeco->borderPreview );
+ previewLayout->addWidget( wPreview );
+ connect( wPreview, SIGNAL( choosearea(QMouseEvent * ) ),
+ this, SLOT( slotPressEvent(QMouseEvent *) ) );
+}
+
+///////
+// Current GUI selections
+KoBorder::BorderStyle KoParagDecorationWidget::curBorderStyle() const
+{
+ QString selection = wDeco->cbBorderStyle->currentText();
+ return KoBorder::getStyle( selection );
+}
+
+unsigned int KoParagDecorationWidget::curBorderWidth() const {
+ return wDeco->cbBorderWidth->currentText().toUInt();
+}
+
+QColor KoParagDecorationWidget::curBorderColor() const {
+ return wDeco->bBorderColor->color();
+}
+///////
+
+// Check whether a border is the same as that selected in the GUI
+bool KoParagDecorationWidget::borderChanged( const KoBorder& border ) {
+ return (unsigned int)border.penWidth() != curBorderWidth() ||
+ border.color != curBorderColor() ||
+ border.getStyle() != curBorderStyle();
+}
+
+// Set a given border according to the values selected in the GUI
+void KoParagDecorationWidget::updateBorder( KoBorder& border )
+{
+ border.setPenWidth( curBorderWidth() );
+ border.color = curBorderColor();
+ border.setStyle( curBorderStyle () );
+}
+
+void KoParagDecorationWidget::clickedBorderPreview( KoBorder& border,
+ KoBorder::BorderType position,
+ KPushButton *corresponding )
+{
+ if ( borderChanged( border ) && corresponding->isOn() ) {
+ updateBorder( border );
+ wPreview->setBorder( position, border );
+ }
+ else
+ corresponding->setOn( !corresponding->isOn() );
+}
+
+// Establish which border position was clicked in the border preview,
+// and update the appropriate border
+void KoParagDecorationWidget::slotPressEvent(QMouseEvent *_ev)
+{
+ const int OFFSETX = 15;
+ const int OFFSETY = 7;
+ const int Ko_SPACE = 30;
+
+ QRect r = wPreview->contentsRect();
+ QRect rect(r.x() + OFFSETX, r.y() + OFFSETY,
+ r.width() - OFFSETX, r.y() + OFFSETY + Ko_SPACE);
+ if(rect.contains(QPoint(_ev->x(),_ev->y())))
+ {
+ clickedBorderPreview( m_topBorder, KoBorder::TopBorder,
+ wDeco->bBorderTop );
+ }
+
+ rect.setCoords(r.x() + OFFSETX, r.height() - OFFSETY - Ko_SPACE,
+ r.width() - OFFSETX, r.height() - OFFSETY);
+ if(rect.contains(QPoint(_ev->x(),_ev->y())))
+ {
+ clickedBorderPreview( m_bottomBorder, KoBorder::BottomBorder,
+ wDeco->bBorderBottom );
+ }
+
+ rect.setCoords(r.x() + OFFSETX, r.y() + OFFSETY,
+ r.x() + Ko_SPACE + OFFSETX, r.height() - OFFSETY);
+ if(rect.contains(QPoint(_ev->x(),_ev->y())))
+ {
+ clickedBorderPreview( m_leftBorder, KoBorder::LeftBorder,
+ wDeco->bBorderLeft );
+ }
+
+ rect.setCoords(r.width() - OFFSETX - Ko_SPACE, r.y() + OFFSETY,
+ r.width() - OFFSETX, r.height() - OFFSETY);
+ if(rect.contains(QPoint(_ev->x(),_ev->y())))
+ {
+ clickedBorderPreview( m_rightBorder, KoBorder::RightBorder,
+ wDeco->bBorderRight );
+ }
+}
+
+void KoParagDecorationWidget::display( const KoParagLayout & lay )
+{
+ wDeco->bBackgroundColor->setColor( lay.backgroundColor );
+
+ m_leftBorder = lay.leftBorder;
+ m_rightBorder = lay.rightBorder;
+ m_topBorder = lay.topBorder;
+ m_bottomBorder = lay.bottomBorder;
+ m_joinBorder = lay.joinBorder;
+
+ wDeco->bBorderLeft->blockSignals( true );
+ wDeco->bBorderRight->blockSignals( true );
+ wDeco->bBorderTop->blockSignals( true );
+ wDeco->bBorderBottom->blockSignals( true );
+ updateBorders();
+ wDeco->bBorderLeft->blockSignals( false );
+ wDeco->bBorderRight->blockSignals( false );
+ wDeco->bBorderTop->blockSignals( false );
+ wDeco->bBorderBottom->blockSignals( false );
+}
+
+void KoParagDecorationWidget::updateBorders()
+{
+ wDeco->bBorderLeft->setOn( m_leftBorder.penWidth() > 0 );
+ wDeco->bBorderRight->setOn( m_rightBorder.penWidth() > 0 );
+ wDeco->bBorderTop->setOn( m_topBorder.penWidth() > 0 );
+ wDeco->bBorderBottom->setOn( m_bottomBorder.penWidth() > 0 );
+ wDeco->cbJoinBorder->setChecked( m_joinBorder );
+ wPreview->setLeftBorder( m_leftBorder );
+ wPreview->setRightBorder( m_rightBorder );
+ wPreview->setTopBorder( m_topBorder );
+ wPreview->setBottomBorder( m_bottomBorder );
+}
+
+
+void KoParagDecorationWidget::save( KoParagLayout & lay )
+{
+ lay.backgroundColor = wDeco->bBackgroundColor->color();
+ lay.topBorder = m_topBorder;
+ lay.bottomBorder = m_bottomBorder;
+ lay.leftBorder = m_leftBorder;
+ lay.rightBorder = m_rightBorder;
+ lay.joinBorder = m_joinBorder;
+}
+
+QColor KoParagDecorationWidget::backgroundColor() const {
+ return wDeco->bBackgroundColor->color();
+}
+
+QString KoParagDecorationWidget::tabName() {
+ // Why D&e..? Because &De.. conflicts with &Delete in
+ // the style manager.
+ return i18n( "D&ecorations" );
+}
+
+void KoParagDecorationWidget::brdLeftToggled( bool _on )
+{
+ if ( !_on )
+ m_leftBorder.setPenWidth(0);
+ else {
+ m_leftBorder.setPenWidth( curBorderWidth() );
+ m_leftBorder.color = curBorderColor();
+ m_leftBorder.setStyle( curBorderStyle() );
+ }
+ wPreview->setLeftBorder( m_leftBorder );
+}
+
+void KoParagDecorationWidget::brdRightToggled( bool _on )
+{
+ if ( !_on )
+ m_rightBorder.setPenWidth(0);
+ else {
+ m_rightBorder.setPenWidth( curBorderWidth() );
+ m_rightBorder.color = curBorderColor();
+ m_rightBorder.setStyle( curBorderStyle() );
+ }
+ wPreview->setRightBorder( m_rightBorder );
+}
+
+void KoParagDecorationWidget::brdTopToggled( bool _on )
+{
+ if ( !_on )
+ m_topBorder.setPenWidth(0);
+ else {
+ m_topBorder.setPenWidth( curBorderWidth() );
+ m_topBorder.color = curBorderColor();
+ m_topBorder.setStyle( curBorderStyle() );
+ }
+ wPreview->setTopBorder( m_topBorder );
+}
+
+void KoParagDecorationWidget::brdBottomToggled( bool _on )
+{
+ if ( !_on )
+ m_bottomBorder.setPenWidth ( 0 );
+ else {
+ m_bottomBorder.setPenWidth( curBorderWidth() );
+ m_bottomBorder.color = curBorderColor();
+ m_bottomBorder.setStyle( curBorderStyle() );
+ }
+ wPreview->setBottomBorder( m_bottomBorder );
+}
+
+void KoParagDecorationWidget::brdJoinToggled( bool _on ) {
+ m_joinBorder = _on;
+}
+////////////////////////////////////////////////////////////////////////////////
+
+
+KoParagCounterWidget::KoParagCounterWidget( bool disableAll, QWidget * parent, const char * name )
+ : KoParagLayoutWidget( KoParagDia::PD_NUMBERING, parent, name )
+{
+
+ QVBoxLayout *Form1Layout = new QVBoxLayout( this );
+ Form1Layout->setSpacing( KDialog::spacingHint() );
+ Form1Layout->setMargin( KDialog::marginHint() );
+
+ gNumbering = new QButtonGroup( this, "numberingGroup" );
+ gNumbering->setTitle( i18n( "Numbering" ) );
+ gNumbering->setColumnLayout(0, Qt::Vertical );
+ gNumbering->layout()->setSpacing( 0 );
+ gNumbering->layout()->setMargin( 0 );
+ QHBoxLayout *numberingGroupLayout = new QHBoxLayout( gNumbering->layout() );
+ numberingGroupLayout->setAlignment( Qt::AlignTop );
+ numberingGroupLayout->setSpacing( KDialog::spacingHint() );
+ numberingGroupLayout->setMargin( KDialog::marginHint() );
+
+ // What type of numbering is required?
+ QRadioButton *rNone = new QRadioButton( gNumbering, "rNone" );
+ rNone->setText( i18n( "&None" ) );
+ numberingGroupLayout->addWidget( rNone );
+
+ gNumbering->insert( rNone , KoParagCounter::NUM_NONE);
+
+ QRadioButton *rList = new QRadioButton( gNumbering, "rList" );
+ rList->setText( i18n( "&List" ) );
+ gNumbering->insert( rList , KoParagCounter::NUM_LIST);
+ numberingGroupLayout->addWidget( rList );
+
+ QRadioButton *rChapter = new QRadioButton( gNumbering, "rChapter" );
+ rChapter->setText( i18n( "Chapt&er" ) );
+ gNumbering->insert( rChapter , KoParagCounter::NUM_CHAPTER);
+ numberingGroupLayout->addWidget( rChapter );
+ Form1Layout->addWidget( gNumbering );
+ connect( gNumbering, SIGNAL( clicked( int ) ), this, SLOT( numTypeChanged( int ) ) );
+
+ m_styleWidget = new KoCounterStyleWidget( true, false, disableAll, this );
+
+ connect( m_styleWidget, SIGNAL( sig_suffixChanged (const QString &) ), this, SLOT( suffixChanged(const QString &) ) );
+ connect( m_styleWidget, SIGNAL( sig_prefixChanged (const QString &) ), this, SLOT( prefixChanged(const QString &) ) );
+ connect( m_styleWidget, SIGNAL( sig_startChanged(int) ), this, SLOT( startChanged(int) ) );
+ connect( m_styleWidget, SIGNAL( sig_restartChanged(bool) ), this, SLOT( restartChanged(bool) ) );
+ connect( m_styleWidget, SIGNAL( sig_depthChanged (int) ), this, SLOT( depthChanged(int) ) );
+ connect( m_styleWidget, SIGNAL( sig_displayLevelsChanged (int) ), this, SLOT( displayLevelsChanged(int) ) );
+ connect( m_styleWidget, SIGNAL( sig_alignmentChanged (int) ), this, SLOT( alignmentChanged(int) ) );
+ connect( m_styleWidget, SIGNAL( changeCustomBullet( const QString & , QChar ) ), this, SLOT( slotChangeCustomBullet( const QString & , QChar ) ) );
+
+ connect( m_styleWidget, SIGNAL( sig_numTypeChanged( int ) ), this, SLOT( numTypeChanged(int ) ) );
+ connect( m_styleWidget, SIGNAL( changeStyle( KoParagCounter::Style ) ), this, SLOT( styleChanged (KoParagCounter::Style ) ) );
+
+ Form1Layout->addWidget( m_styleWidget );
+
+
+ preview = new KoStylePreview( i18n( "Preview" ), i18n("Normal paragraph text"), this, "counter preview" );
+ Form1Layout->addWidget( preview );
+ if ( disableAll)
+ {
+ gNumbering->setEnabled( false);
+ preview->setEnabled( false );
+ }
+
+ QSpacerItem* spacer = new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ Form1Layout->addItem( spacer );
+}
+
+void KoParagCounterWidget::styleChanged( KoParagCounter::Style st )
+{
+ m_counter.setStyle( st );
+ updatePreview();
+}
+
+void KoParagCounterWidget::slotChangeCustomBullet( const QString & f, QChar c)
+{
+ m_counter.setCustomBulletFont( f );
+ m_counter.setCustomBulletCharacter( c );
+ preview->setCounter( m_counter );
+}
+
+QString KoParagCounterWidget::tabName() {
+ return i18n( "B&ullets/Numbers" );
+}
+
+void KoParagCounterWidget::numTypeChanged( int nType ) {
+ // radio buttons pressed to change numbering type
+ m_counter.setNumbering( static_cast<KoParagCounter::Numbering>( nType ) );
+ preview->setEnabled( m_counter.numbering() != KoParagCounter::NUM_NONE );
+ m_styleWidget->numTypeChanged( nType );
+
+ updatePreview();
+}
+
+void KoParagCounterWidget::display( const KoParagLayout & lay ) {
+ KoParagCounter::Style style = KoParagCounter::STYLE_NONE;
+ if ( lay.counter )
+ {
+ style=lay.counter->style();
+ m_counter = *lay.counter;
+ }
+ else
+ {
+ m_counter = KoParagCounter();
+ }
+ gNumbering->setButton( m_counter.numbering() );
+ preview->setStyle( lay.style );
+ preview->setCounter( m_counter );
+ m_styleWidget->display( lay );
+}
+
+void KoParagCounterWidget::updatePreview() {
+ preview->setCounter(m_counter);
+ preview->repaint(true);
+}
+
+void KoParagCounterWidget::save( KoParagLayout & lay ) {
+/* m_counter.setDepth(spnDepth->value());
+ m_counter.setStartNumber(spnStart->value());
+ m_counter.setPrefix(sPrefix->text());
+ m_counter.setSuffix(sSuffix->text()); */
+
+ if ( lay.counter )
+ *lay.counter = m_counter;
+ else
+ lay.counter = new KoParagCounter( m_counter );
+}
+
+KoTabulatorsLineEdit::KoTabulatorsLineEdit( QWidget *parent, double lower, double upper, double step, double value /*= 0.0*/, KoUnit::Unit unit /*= KoUnit::U_PT*/, unsigned int precision /*= 2*/, const char *name /*= 0*/ )
+ : KoUnitDoubleSpinBox ( parent, lower, upper, step, value, unit, precision, name )
+{
+ setRange( 0, 9999, 1, false);
+}
+
+void KoTabulatorsLineEdit::keyPressEvent ( QKeyEvent *ke )
+{
+ if( ke->key() == QKeyEvent::Key_Return ||
+ ke->key() == QKeyEvent::Key_Enter )
+ {
+ emit keyReturnPressed();
+ return;
+ }
+ KoUnitDoubleSpinBox::keyPressEvent (ke);
+}
+
+KoParagTabulatorsWidget::KoParagTabulatorsWidget( KoUnit::Unit unit, double frameWidth,QWidget * parent, const char * name )
+ : KoParagLayoutWidget( KoParagDia::PD_TABS, parent, name ), m_unit(unit) {
+ QString length;
+ if(frameWidth==-1) {
+ frameWidth=9999;
+ m_toplimit=9999;
+ } else {
+ m_toplimit=frameWidth;
+ length=i18n("Frame width: %1 %2")
+ .arg(KoUnit::toUserStringValue(frameWidth,m_unit))
+ .arg(KoUnit::unitName(m_unit));
+ frameWidth=KoUnit::toUserValue(frameWidth,m_unit);
+ }
+ QVBoxLayout* Form1Layout = new QVBoxLayout( this );
+ Form1Layout->setSpacing( KDialog::spacingHint() );
+ Form1Layout->setMargin( KDialog::marginHint() );
+
+ QHBoxLayout* Layout13 = new QHBoxLayout;
+ Layout13->setSpacing( KDialog::spacingHint() );
+ Layout13->setMargin( 0 ); //?
+
+ lstTabs = new QListBox( this);
+ lstTabs->insertItem( "mytabvalue" );
+ lstTabs->setMaximumSize( QSize( 300, 32767 ) );
+ Layout13->addWidget( lstTabs );
+
+ editLayout = new QVBoxLayout;
+ editLayout->setSpacing( KDialog::spacingHint() );
+ editLayout->setMargin( 0 ); //?
+
+ gPosition = new QGroupBox( this, "gPosition" );
+ gPosition->setTitle( i18n( "Po&sition" ) );
+ gPosition->setColumnLayout(0, Qt::Vertical );
+ gPosition->layout()->setSpacing( 0 );
+ gPosition->layout()->setMargin( 0 );
+ QVBoxLayout* GroupBox2Layout = new QVBoxLayout( gPosition->layout() );
+ GroupBox2Layout->setAlignment( Qt::AlignTop );
+ GroupBox2Layout->setSpacing( KDialog::spacingHint() );
+ GroupBox2Layout->setMargin( KDialog::marginHint() );
+
+ QHBoxLayout* Layout5 = new QHBoxLayout;
+ Layout5->setSpacing( KDialog::spacingHint() );
+ Layout5->setMargin( 0 ); //?
+
+ sTabPos = new KoTabulatorsLineEdit( gPosition, 0, 9999, 1, 0.0, m_unit );
+ sTabPos->setRange( 0, 9999, 1 );
+ sTabPos->setMaximumSize( QSize( 100, 32767 ) );
+ Layout5->addWidget( sTabPos );
+ QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ Layout5->addItem( spacer );
+ GroupBox2Layout->addLayout( Layout5 );
+ editLayout->addWidget( gPosition );
+
+ QLabel* TextLabel1 = new QLabel( gPosition );
+ QString unitDescription = KoUnit::unitDescription( m_unit );
+ TextLabel1->setText( length );
+ GroupBox2Layout->addWidget( TextLabel1 );
+
+ bgAlign = new QButtonGroup( this );
+ bgAlign->setTitle( i18n( "Alignment" ) );
+ bgAlign->setColumnLayout(0, Qt::Vertical );
+ bgAlign->layout()->setSpacing( 0 );
+ bgAlign->layout()->setMargin( 0 );
+ QVBoxLayout* ButtonGroup1Layout = new QVBoxLayout( bgAlign->layout() );
+ ButtonGroup1Layout->setAlignment( Qt::AlignTop );
+ ButtonGroup1Layout->setSpacing( KDialog::spacingHint() );
+ ButtonGroup1Layout->setMargin( KDialog::marginHint() );
+
+ rAlignLeft = new QRadioButton( bgAlign );
+ rAlignLeft->setText( i18n( "&Left" ) );
+ ButtonGroup1Layout->addWidget( rAlignLeft );
+
+ rAlignCentre = new QRadioButton( bgAlign );
+ rAlignCentre->setText( i18n( "C&enter" ) );
+ ButtonGroup1Layout->addWidget( rAlignCentre );
+
+ rAlignRight = new QRadioButton( bgAlign );
+ rAlignRight->setText( i18n( "&Right" ) );
+ ButtonGroup1Layout->addWidget( rAlignRight );
+
+ QHBoxLayout* Layout8 = new QHBoxLayout;
+ Layout8->setSpacing( KDialog::spacingHint() );
+ Layout8->setMargin( 0 );
+
+ rAlignVar = new QRadioButton( bgAlign );
+ rAlignVar->setText( i18n( "On followin&g character: " ) );
+ Layout8->addWidget( rAlignVar );
+
+ sAlignChar = new QLineEdit( bgAlign);
+ sAlignChar->setMaximumSize( QSize( 60, 32767 ) );
+ sAlignChar->setText(QString(KGlobal::locale()->decimalSymbol()[0]));
+ Layout8->addWidget( sAlignChar );
+ QSpacerItem* spacer_2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ Layout8->addItem( spacer_2 );
+ ButtonGroup1Layout->addLayout( Layout8 );
+ editLayout->addWidget( bgAlign );
+
+ gTabLeader = new QGroupBox( this, "gTabLeader" );
+ gTabLeader->setTitle( i18n( "Tab Leader" ) );
+ QVBoxLayout* GroupBox5Layout = new QVBoxLayout( gTabLeader );
+ GroupBox5Layout->setAlignment( Qt::AlignTop );
+ GroupBox5Layout->setSpacing( KDialog::spacingHint() );
+ GroupBox5Layout->setMargin( KDialog::marginHint() );
+ GroupBox5Layout->addSpacing( fontMetrics().height() / 2 ); // groupbox title
+
+ QLabel* TextLabel1_2 = new QLabel( gTabLeader );
+ TextLabel1_2->setText( i18n( "The space a tab uses can be filled with a pattern." ) );
+ GroupBox5Layout->addWidget( TextLabel1_2 );
+
+ QGridLayout *fillingGrid = new QGridLayout( 0L, 2, 2, 0, KDialog::spacingHint() );
+
+ QLabel* TextLabel2 = new QLabel( gTabLeader);
+ TextLabel2->setText( i18n( "&Filling:" ) );
+ TextLabel2->setAlignment( AlignRight );
+ fillingGrid->addWidget( TextLabel2, 0, 0 );
+
+ cFilling = new QComboBox( FALSE, gTabLeader);
+ cFilling->insertItem( i18n( "Blank" ) );
+ cFilling->insertItem( "_ _ _ _ _ _"); // DOT
+ cFilling->insertItem( "_________"); // SOLID
+ cFilling->insertItem( "___ ___ __"); // DASH
+ cFilling->insertItem( "___ _ ___ _"); // DASH_DOT
+ cFilling->insertItem( "___ _ _ ___"); // DASH_DOT_DOT
+ TextLabel2->setBuddy( cFilling );
+ fillingGrid->addWidget( cFilling, 0, 1 );
+
+ QLabel * TextLabel3 = new QLabel( i18n("&Width:"), gTabLeader );
+ TextLabel3->setAlignment( AlignRight );
+ fillingGrid->addWidget( TextLabel3, 1, 0 );
+
+ eWidth = new KoUnitDoubleSpinBox( gTabLeader );
+ eWidth->setMinValue(0.01);
+ eWidth->setUnit( m_unit );
+ TextLabel3->setBuddy( eWidth );
+ fillingGrid->addWidget( eWidth, 1, 1 );
+
+ GroupBox5Layout->addLayout( fillingGrid );
+ editLayout->addWidget( gTabLeader );
+ QSpacerItem* spacer_4 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ editLayout->addItem( spacer_4 );
+ Layout13->addLayout( editLayout );
+ Form1Layout->addLayout( Layout13 );
+
+ QHBoxLayout* Layout4 = new QHBoxLayout;
+ Layout4->setSpacing( KDialog::spacingHint() );
+ Layout4->setMargin( 0 );
+
+ bNew = new QPushButton( this);
+ bNew->setText( i18n( "&New" ) );
+ Layout4->addWidget( bNew );
+
+ bDelete = new QPushButton( this);
+ bDelete->setText( i18n( "&Delete" ) );
+ Layout4->addWidget( bDelete );
+
+ bDeleteAll = new QPushButton( this);
+ bDeleteAll->setText( i18n( "Delete All" ) );
+ Layout4->addWidget( bDeleteAll );
+
+ QSpacerItem* spacer_5 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ Layout4->addItem( spacer_5 );
+ Form1Layout->addLayout( Layout4 );
+
+ //signal valueChanged passes value which the user see (unlike the value() function)
+ //so fromUserValue has to be used in slotTabValueChanged
+ connect(sTabPos,SIGNAL(valueChanged(double)), this, SLOT(slotTabValueChanged(double )));
+ connect(sTabPos,SIGNAL( keyReturnPressed()),this,SLOT(newClicked()));
+ connect(sAlignChar,SIGNAL(textChanged( const QString & )), this, SLOT(slotAlignCharChanged( const QString & )));
+ connect(bNew,SIGNAL(clicked ()),this,SLOT(newClicked()));
+ connect(bDelete,SIGNAL(clicked ()),this,SLOT(deleteClicked()));
+ connect(bDeleteAll,SIGNAL(clicked ()),this,SLOT(deleteAllClicked()));
+ connect(bgAlign,SIGNAL(clicked (int)),this,SLOT(updateAlign(int)));
+ connect(cFilling,SIGNAL(activated (int)),this,SLOT(updateFilling(int)));
+ connect(eWidth,SIGNAL(valueChangedPt( double ) ),this,SLOT(updateWidth()));
+ connect(lstTabs,SIGNAL(highlighted (int)),this,SLOT(setActiveItem(int)));
+ noSignals=false;
+}
+
+void KoParagTabulatorsWidget::slotTabValueChanged( double val ) {
+ if(noSignals) return;
+ noSignals=true;
+ //see comment where this slot is connected
+ m_tabList[lstTabs->currentItem()].ptPos = KoUnit::fromUserValue( val, m_unit );
+
+ lstTabs->changeItem(tabToString(m_tabList[lstTabs->currentItem()]), lstTabs->currentItem());
+
+ sortLists();
+ noSignals=false;
+}
+
+void KoParagTabulatorsWidget::slotAlignCharChanged( const QString &/*_text*/ ) {
+ // select align 3 and update data structures.
+ bgAlign->setButton(3);
+ m_tabList[lstTabs->currentItem()].alignChar=sAlignChar->text()[0];
+ m_tabList[lstTabs->currentItem()].type=T_DEC_PNT;
+}
+
+void KoParagTabulatorsWidget::newClicked() {
+ int selected=lstTabs->currentItem();
+ KoTabulator newTab;
+ if(selected < 0) {
+ newTab.ptPos=0;
+ newTab.type=T_LEFT;
+ newTab.filling=TF_BLANK;
+ newTab.ptWidth=0.5;
+ m_tabList.append(newTab);
+ lstTabs->insertItem(tabToString(newTab));
+ lstTabs->setCurrentItem(0);
+ } else {
+ double pos = m_tabList[selected].ptPos;
+ double add=1.0;
+ if(m_unit==KoUnit::U_INCH) // inches are 25 times as big as mm, take it easy with adding..
+ add=0.1;
+
+ pos=pos + KoUnit::fromUserValue( add, m_unit );
+ if(pos<m_toplimit)
+ {
+ newTab.ptPos=pos + KoUnit::fromUserValue( add, m_unit );
+ newTab.type=m_tabList[selected].type;
+ newTab.filling=m_tabList[selected].filling;
+ newTab.ptWidth=m_tabList[selected].ptWidth;
+ m_tabList.insert(m_tabList.at(selected), newTab);
+ lstTabs->insertItem( tabToString(newTab), selected);
+ lstTabs->setCurrentItem(lstTabs->findItem(tabToString(newTab)));
+ sortLists();
+ }
+ }
+}
+
+void KoParagTabulatorsWidget::deleteClicked() {
+ int selected = lstTabs->currentItem();
+ if (selected < 0) return;
+ noSignals=true;
+ sTabPos->changeValue(0.0);
+ noSignals=false;
+ lstTabs->removeItem(selected);
+ m_tabList.remove(m_tabList[selected]);
+ if(lstTabs->count() >0) {
+ lstTabs->setCurrentItem(QMIN(static_cast<unsigned int>(selected), lstTabs->count()-1 ));
+ } else {
+ bDeleteAll->setEnabled(false);
+ bDelete->setEnabled(false);
+ gPosition->setEnabled(false);
+ bgAlign->setEnabled(false);
+ gTabLeader->setEnabled(false);
+ }
+}
+
+void KoParagTabulatorsWidget::deleteAllClicked()
+{
+ noSignals=true;
+ sTabPos->changeValue(0.0);
+ noSignals=false;
+ lstTabs->clear();
+ m_tabList.clear();
+ bDeleteAll->setEnabled(false);
+ bDelete->setEnabled(false);
+ gPosition->setEnabled(false);
+ bgAlign->setEnabled(false);
+ gTabLeader->setEnabled(false);
+}
+
+void KoParagTabulatorsWidget::setActiveItem(int selected) {
+ if(noSignals) return;
+ if(selected < 0) return;
+ noSignals=true;
+ KoTabulator *selectedTab = &m_tabList[selected];
+ switch( selectedTab->type) {
+ case T_CENTER:
+ bgAlign->setButton(1); break;
+ case T_RIGHT:
+ bgAlign->setButton(2); break;
+ case T_DEC_PNT:
+ bgAlign->setButton(3);
+ sAlignChar->setText(QString(selectedTab->alignChar));
+ break;
+ case T_LEFT:
+ default:
+ bgAlign->setButton(0);
+ }
+ switch( selectedTab->filling) {
+ case TF_DOTS:
+ cFilling->setCurrentItem(1); break;
+ case TF_LINE:
+ cFilling->setCurrentItem(2); break;
+ case TF_DASH:
+ cFilling->setCurrentItem(3); break;
+ case TF_DASH_DOT:
+ cFilling->setCurrentItem(4); break;
+ case TF_DASH_DOT_DOT:
+ cFilling->setCurrentItem(5); break;
+ case TF_BLANK:
+ default:
+ cFilling->setCurrentItem(0);
+ }
+ eWidth->changeValue( selectedTab->ptWidth );
+ sTabPos->setValue( KoUnit::toUserValue(selectedTab->ptPos, m_unit));
+ bDelete->setEnabled(true);
+ bDeleteAll->setEnabled(true);
+ gPosition->setEnabled(true);
+ bgAlign->setEnabled(true);
+ gTabLeader->setEnabled(true);
+ noSignals=false;
+}
+
+void KoParagTabulatorsWidget::setCurrentTab( double tabPos ) {
+ KoTabulatorList::ConstIterator it = m_tabList.begin();
+ for ( int i = 0; it != m_tabList.end(); ++it, ++i )
+ if ( (*it).ptPos == tabPos ) {
+ lstTabs->setCurrentItem(i);
+ setActiveItem( i );
+ return;
+ }
+ kdWarning() << "KoParagTabulatorsWidget::setCurrentTab: no tab found at pos=" << tabPos << endl;
+}
+
+QString KoParagTabulatorsWidget::tabToString(const KoTabulator &tab) {
+ return KoUnit::toUserStringValue( tab.ptPos, m_unit);
+}
+
+void KoParagTabulatorsWidget::updateAlign(int selected) {
+ KoTabulator *selectedTab = &m_tabList[lstTabs->currentItem()];
+
+ switch( selected) {
+ case 1:
+ selectedTab->type=T_CENTER; break;
+ case 2:
+ selectedTab->type=T_RIGHT; break;
+ case 3:
+ selectedTab->type=T_DEC_PNT;
+ selectedTab->alignChar=sAlignChar->text()[0];
+ break;
+ case 0:
+ default:
+ selectedTab->type=T_LEFT;
+ }
+}
+
+void KoParagTabulatorsWidget::updateFilling(int selected) {
+ KoTabulator *selectedTab = &m_tabList[lstTabs->currentItem()];
+
+ switch( selected) {
+ case 1:
+ selectedTab->filling=TF_DOTS; break;
+ case 2:
+ selectedTab->filling=TF_LINE; break;
+ case 3:
+ selectedTab->filling=TF_DASH; break;
+ case 4:
+ selectedTab->filling=TF_DASH_DOT; break;
+ case 5:
+ selectedTab->filling=TF_DASH_DOT_DOT; break;
+ case 0:
+ default:
+ selectedTab->filling=TF_BLANK;
+ }
+}
+
+void KoParagTabulatorsWidget::updateWidth() {
+ KoTabulator *selectedTab = &m_tabList[lstTabs->currentItem()];
+ selectedTab->ptWidth = QMAX( 0, eWidth->value() );
+}
+
+void KoParagTabulatorsWidget::sortLists() {
+
+ noSignals=true;
+ qHeapSort( m_tabList );
+
+ // we could just sort the listView, but to make sure we never have any problems with
+ // inconsistent lists, just re-add..
+ QString curValue=lstTabs->currentText();
+ lstTabs->clear();
+ KoTabulatorList::ConstIterator it = m_tabList.begin();
+ for ( ; it != m_tabList.end(); ++it )
+ lstTabs->insertItem( KoUnit::toUserStringValue( (*it).ptPos, m_unit ) );
+
+ lstTabs->setCurrentItem(lstTabs->findItem(curValue));
+ noSignals=false;
+}
+
+void KoParagTabulatorsWidget::display( const KoParagLayout &lay ) {
+ m_tabList.clear();
+ lstTabs->clear();
+ m_tabList = lay.tabList();
+ KoTabulatorList::ConstIterator it = m_tabList.begin();
+ for ( ; it != m_tabList.end(); ++it )
+ lstTabs->insertItem( KoUnit::toUserStringValue( (*it).ptPos, m_unit ) );
+
+ if(lstTabs->count() > 0)
+ lstTabs->setCurrentItem(0);
+ else {
+ bDelete->setEnabled(false);
+ bDeleteAll->setEnabled(false);
+ gPosition->setEnabled(false);
+ bgAlign->setEnabled(false);
+ gTabLeader->setEnabled(false);
+ }
+}
+
+void KoParagTabulatorsWidget::save( KoParagLayout & lay ) {
+ lay.setTabList( m_tabList );
+}
+
+QString KoParagTabulatorsWidget::tabName() {
+ return i18n( "&Tabulators" );
+}
+
+/******************************************************************/
+/* Class: KoParagDia */
+/******************************************************************/
+KoParagDia::KoParagDia( QWidget* parent, const char* name,
+ int flags, KoUnit::Unit unit, double _frameWidth, bool breakLine, bool disableAll )
+ : KDialogBase(Tabbed, QString::null, Ok | Cancel | User1 | Apply, Ok, parent, name, true )
+{
+ m_decorationsWidget = 0;
+ m_flags = flags;
+ setButtonText( KDialogBase::User1, i18n("Reset") );
+
+ if ( m_flags & PD_SPACING )
+ {
+ QVBox * page = addVBoxPage( i18n( "Indent && S&pacing" ) );
+ m_indentSpacingWidget = new KoIndentSpacingWidget( unit,_frameWidth,page, "indent-spacing" );
+ m_indentSpacingWidget->layout()->setMargin(0);
+ }
+ if ( m_flags & PD_ALIGN )
+ {
+ QVBox * page = addVBoxPage( i18n( "General &Layout" ) );
+ m_alignWidget = new KoParagAlignWidget( breakLine, page, "align" );
+ m_alignWidget->layout()->setMargin(0);
+ }
+ if ( m_flags & PD_DECORATION )
+ {
+ QVBox * page = addVBoxPage( i18n( "D&ecorations" ) );
+ m_decorationsWidget = new KoParagDecorationWidget( page, "decorations");
+ m_decorationsWidget->layout()->setMargin(0);
+ }
+ if ( m_flags & PD_NUMBERING )
+ {
+ QVBox * page = addVBoxPage( i18n( "B&ullets/Numbers" ) );
+ m_counterWidget = new KoParagCounterWidget( disableAll , page, "numbers" );
+ m_counterWidget->layout()->setMargin(0);
+ }
+ if ( m_flags & PD_TABS )
+ {
+ QVBox * page = addVBoxPage( i18n( "&Tabulators" ) );
+ m_tabulatorsWidget = new KoParagTabulatorsWidget( unit,_frameWidth, page, "tabs");
+ m_tabulatorsWidget->layout()->setMargin(0);
+ }
+
+ connect( this, SIGNAL( user1Clicked() ), this, SLOT(slotReset()));
+ setInitialSize( QSize(630, 500) );
+}
+
+KoParagDia::~KoParagDia()
+{
+}
+
+void KoParagDia::slotApply()
+{
+ emit applyParagStyle();
+}
+
+void KoParagDia::slotOk()
+{
+ slotApply();
+ KDialogBase::slotOk();
+}
+
+void KoParagDia::setCurrentPage( int page )
+{
+ switch( page )
+ {
+ case PD_SPACING:
+ showPage( pageIndex( m_indentSpacingWidget->parentWidget() ) );
+ break;
+ case PD_ALIGN:
+ showPage( pageIndex( m_alignWidget->parentWidget() ) );
+ break;
+ case PD_DECORATION:
+ showPage( pageIndex( m_decorationsWidget->parentWidget() ) );
+ break;
+ case PD_NUMBERING:
+ showPage( pageIndex( m_counterWidget->parentWidget() ) );
+ break;
+ case PD_TABS:
+ showPage( pageIndex( m_tabulatorsWidget->parentWidget() ) );
+ break;
+ default:
+ break;
+ }
+}
+
+void KoParagDia::setParagLayout( const KoParagLayout & lay )
+{
+ m_indentSpacingWidget->display( lay );
+ m_alignWidget->display( lay );
+ m_decorationsWidget->display( lay );
+ m_counterWidget->display( lay );
+ m_tabulatorsWidget->display( lay );
+ oldLayout = lay;
+}
+
+void KoParagDia::slotReset()
+{
+ if( m_indentSpacingWidget )
+ m_indentSpacingWidget->display( oldLayout );
+ if( m_alignWidget )
+ m_alignWidget->display( oldLayout );
+ if ( m_decorationsWidget )
+ m_decorationsWidget->display( oldLayout );
+ if( m_counterWidget )
+ m_counterWidget->display( oldLayout );
+ if( m_tabulatorsWidget )
+ m_tabulatorsWidget->display( oldLayout );
+}
+
+bool KoParagDia::isCounterChanged() const
+{
+ if ( oldLayout.counter ) // We had a counter
+ return ! ( *oldLayout.counter == counter() );
+ else // We had no counter -> changed if we have one now
+ return counter().numbering() != KoParagCounter::NUM_NONE;
+}
+
+int KoParagDia::changedFlags() const
+{
+ return paragLayout().compare( oldLayout );
+}
+
+KoParagLayout KoParagDia::paragLayout() const
+{
+ KoParagLayout newLayout;
+ newLayout.setLineSpacingValue( lineSpacing() );
+ newLayout.lineSpacingType = lineSpacingType();
+ newLayout.setTabList( tabListTabulator() );
+ newLayout.alignment = align();
+ newLayout.margins[QStyleSheetItem::MarginFirstLine] = firstLineIndent();
+ newLayout.margins[QStyleSheetItem::MarginLeft] = leftIndent();
+ newLayout.margins[QStyleSheetItem::MarginRight] = rightIndent();
+ newLayout.margins[QStyleSheetItem::MarginTop] = spaceBeforeParag();
+ newLayout.margins[QStyleSheetItem::MarginBottom] = spaceAfterParag();
+ newLayout.pageBreaking = pageBreaking();
+ newLayout.leftBorder = leftBorder();
+ newLayout.rightBorder = rightBorder();
+ newLayout.topBorder = topBorder();
+ newLayout.bottomBorder = bottomBorder();
+ newLayout.joinBorder = joinBorder();
+ newLayout.backgroundColor = backgroundColor();
+ newLayout.counter = new KoParagCounter( counter() );
+ return newLayout;
+}
+
+#include "KoParagDia.moc"
+#include "KoParagDia_p.moc"
diff --git a/lib/kotext/KoParagDia.h b/lib/kotext/KoParagDia.h
new file mode 100644
index 00000000..32e75c26
--- /dev/null
+++ b/lib/kotext/KoParagDia.h
@@ -0,0 +1,597 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+ Copyright (C) 2005 Martin Ellis <martin.ellis@kdemail.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef paragdia_h
+#define paragdia_h
+
+#include <kdialogbase.h>
+#include <qstringlist.h>
+#include <qptrlist.h>
+#include <qstylesheet.h>
+#include <KoRuler.h>
+#include <KoUnit.h>
+#include <KoUnitWidgets.h>
+#include <qdict.h>
+#include <qlineedit.h>
+#include "KoParagLayout.h"
+#include "KoParagCounter.h"
+#include <knuminput.h>
+#include <qgroupbox.h>
+#include <qvgroupbox.h>
+#include <koffice_export.h>
+class KoTextZoomHandler;
+class KButtonBox;
+class KPushButton;
+class KColorButton;
+class KoTextDocument;
+class KoBorderPreview;
+class KoStylePreview;
+class KPagePreview2;
+class KPagePreview;
+class KoSpinBox;
+class QButtonGroup;
+class QCheckBox;
+class QComboBox;
+class QGridLayout;
+class QGroupBox;
+class QLabel;
+class QListBox;
+class QPushButton;
+class QRadioButton;
+class QWidget;
+class QWidgetStack;
+class KIntNumInput;
+class KDoubleNumInput;
+class KComboBox;
+class QVBoxLayout;
+class KoUnitDoubleSpinBox;
+class KoParagDecorationTab; // From KoParagDecorationTab.ui
+
+/**
+ * This is the base class for any widget [usually used in a tab]
+ * that handles modifying a part of a KoParagLayout.
+ * Used by the paragraph dialog (this file) and by the style editor.
+ */
+class KOTEXT_EXPORT KoParagLayoutWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ // Constructor: parent widget, flag (PD_SOMETHING) and name
+ KoParagLayoutWidget( int flag, QWidget * parent, const char * name = 0 )
+ : QWidget( parent, name ), m_flag( flag )
+ {
+ }
+ virtual ~KoParagLayoutWidget() {}
+
+ // Display settings, from the paragLayout
+ virtual void display( const KoParagLayout & lay ) = 0;
+
+ // Save the settings, into the paragLayout
+ // This is only used by the stylist, not by paragdia (which needs undo/redo, applying partially etc.)
+ virtual void save( KoParagLayout & lay ) = 0;
+
+ // Return true if the settings where modified
+ // ## maybe too global, but how to do it differently? We'll see if we need this.
+ //virtual bool isModified() = 0;
+
+ /** return the (i18n-ed) name of the tab */
+ virtual QString tabName() = 0;
+
+ // Return the part of the paraglayout that this widget cares about
+ int flag() const { return m_flag; }
+
+private:
+ int m_flag;
+};
+
+/**
+ * The widget for editing idents and spacings (tab 1)
+ */
+class KOTEXT_EXPORT KoIndentSpacingWidget : public KoParagLayoutWidget
+{
+ Q_OBJECT
+public:
+ KoIndentSpacingWidget( KoUnit::Unit unit, double _frameWidth, QWidget * parent,const char * name = 0 );
+ virtual ~KoIndentSpacingWidget() {}
+
+ virtual void display( const KoParagLayout & lay );
+ virtual void save( KoParagLayout & lay );
+ //virtual bool isModified();
+ virtual QString tabName();
+
+ double leftIndent() const;
+ double rightIndent() const;
+ double firstLineIndent() const;
+ double spaceBeforeParag() const;
+ double spaceAfterParag() const;
+ double lineSpacing() const;
+ KoParagLayout::SpacingType lineSpacingType() const;
+private slots:
+ void leftChanged( double );
+ void rightChanged( double );
+ void firstChanged( double );
+ void spacingActivated( int );
+ void spacingChanged( double );
+ void spacingChanged( int );
+ void beforeChanged( double );
+ void afterChanged( double );
+private:
+ void updateLineSpacing( KoParagLayout::SpacingType _type );
+
+ QWidgetStack *sSpacingStack;
+ KIntNumInput *eSpacingPercent;
+ KoUnitDoubleSpinBox *eBefore, *eAfter, *eSpacing;
+ KoUnitDoubleSpinBox *eLeft, *eRight, *eFirstLine;
+ QComboBox *cSpacing;
+ KPagePreview *prev1;
+ KoUnit::Unit m_unit;
+};
+
+/**
+ * The widget for editing paragraph alignment (tab 2)
+ */
+class KOTEXT_EXPORT KoParagAlignWidget : public KoParagLayoutWidget
+{
+ Q_OBJECT
+public:
+ KoParagAlignWidget(bool breakLine, QWidget * parent, const char * name = 0 );
+ virtual ~KoParagAlignWidget() {}
+
+ virtual void display( const KoParagLayout & lay );
+ virtual void save( KoParagLayout & lay );
+ //virtual bool isModified();
+ virtual QString tabName();
+
+ int pageBreaking() const;
+ int align() const;
+
+protected slots:
+ void alignLeft();
+ void alignCenter();
+ void alignRight();
+ void alignJustify();
+
+protected:
+ void clearAligns();
+
+private:
+ QRadioButton *rLeft, *rCenter, *rRight, *rJustify;
+ QCheckBox *cKeepLinesTogether, *cHardBreakBefore, *cHardBreakAfter;
+ KPagePreview2 *prev2;
+};
+
+/**
+ * The widget for editing paragraph borders (tab 3)
+ */
+class KOTEXT_EXPORT KoParagDecorationWidget : public KoParagLayoutWidget
+{
+ Q_OBJECT
+public:
+ KoParagDecorationWidget( QWidget * parent, const char * name = 0 );
+ virtual ~KoParagDecorationWidget() {}
+
+ virtual void display( const KoParagLayout & lay );
+ virtual void save( KoParagLayout & lay );
+ //virtual bool isModified();
+ virtual QString tabName();
+
+ // Borders
+ KoBorder leftBorder() const { return m_leftBorder; }
+ KoBorder rightBorder() const { return m_rightBorder; }
+ KoBorder topBorder() const { return m_topBorder; }
+ KoBorder bottomBorder() const { return m_bottomBorder; }
+ bool joinBorder() const { return m_joinBorder; }
+
+ // Background color
+ QColor backgroundColor() const;
+
+protected slots:
+ void brdLeftToggled( bool );
+ void brdRightToggled( bool );
+ void brdTopToggled( bool );
+ void brdBottomToggled( bool );
+ void brdJoinToggled( bool );
+ void slotPressEvent(QMouseEvent *_ev);
+
+protected:
+ void updateBorders();
+
+private:
+ // GUI
+ KoBorderPreview *wPreview;
+ //! Widget defined in .ui file
+ KoParagDecorationTab *wDeco;
+ //! Get the currently selected border style
+ KoBorder::BorderStyle curBorderStyle() const;
+ //! Get the currently selected border width
+ unsigned int curBorderWidth() const;
+ //! Get the currently selected border color
+ QColor curBorderColor() const;
+
+ // Borders
+ KoBorder m_leftBorder, m_rightBorder, m_topBorder, m_bottomBorder;
+ bool m_joinBorder;
+
+ /**
+ * Update a border that has been clicked in the border preview.
+ *
+ * If there is no border already at the clicked @p position, then
+ * create a border at that position using the selected width,color and
+ * style.
+ *
+ * If the clicked border is already on, and it is different to the
+ * selected width, color or style, then update it to match the
+ * current selection. If it's the same, then remove the border.
+ *
+ * Used by slotPressEvent.
+ * @param border the border to be updated
+ * @param position the position of the border to be updated
+ * @param corresponding the toggle button corresponding to the border
+ */
+ void clickedBorderPreview( KoBorder& border, KoBorder::BorderType position,
+ KPushButton *corresponding );
+
+ //! Set a given border according to the values selected in the GUI
+ void updateBorder( KoBorder& border );
+ //! Check whether a border is the same as that selected in the GUI
+ bool borderChanged( const KoBorder& border );
+
+};
+
+
+class KOTEXT_EXPORT KoCounterStyleWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ KoCounterStyleWidget( bool displayDepth= true, bool onlyStyleTypeLetter = false, bool disableAll=false, QWidget* parent = 0, const char* name = 0 );
+
+ class StyleRepresenter {
+ public:
+ StyleRepresenter (const QString name, KoParagCounter::Style style, bool bullet=false) {
+ m_name=name;
+ m_style=style;
+ m_bullet=bullet;
+ }
+ QString name() const { return m_name; }
+ KoParagCounter::Style style() const { return m_style; }
+ bool isBullet() const { return m_bullet; }
+
+ private:
+ QString m_name;
+ KoParagCounter::Style m_style;
+ bool m_bullet;
+ };
+
+ static void makeCounterRepresenterList( QPtrList<StyleRepresenter>& stylesList , bool onlyStyleTypeLetter = false );
+ void fillStyleCombo(KoParagCounter::Numbering type = KoParagCounter::NUM_LIST);
+ void display( const KoParagLayout & lay );
+ void changeKWSpinboxType(KoParagCounter::Style st);
+ const KoParagCounter & counter() const { return m_counter; }
+ void setCounter( const KoParagCounter& counter );
+
+public slots:
+ void numTypeChanged( int nType );
+
+signals:
+ void sig_startChanged( int );
+ void sig_restartChanged(bool);
+ void sig_depthChanged(int);
+ void sig_displayLevelsChanged(int);
+ void sig_suffixChanged(const QString &);
+ void sig_prefixChanged(const QString &);
+ void sig_numTypeChanged( int );
+ void sig_alignmentChanged( int );
+ void changeCustomBullet( const QString & , QChar );
+ void changeStyle( KoParagCounter::Style );
+protected slots:
+ void startChanged(int i) {m_counter.setStartNumber(i);emit sig_startChanged(i);}
+ void restartChanged(bool b) {m_counter.setRestartCounter(b);emit sig_restartChanged(b);}
+ void depthChanged(int i) {m_counter.setDepth(i);emit sig_depthChanged(i);}
+ void displayLevelsChanged(int i) {m_counter.setDisplayLevels(i);emit sig_displayLevelsChanged(i);}
+ void alignmentChanged(const QString& s);
+ void suffixChanged(const QString & txt) {m_counter.setSuffix(txt);emit sig_suffixChanged(txt); }
+ void prefixChanged(const QString & txt) {m_counter.setPrefix(txt);emit sig_prefixChanged(txt); }
+
+ void numStyleChanged();
+ void selectCustomBullet();
+
+protected:
+ void displayStyle( KoParagCounter::Style style );
+
+private:
+ QGroupBox *gStyle;
+ QPtrList <StyleRepresenter> stylesList;
+ QListBox *lstStyle;
+ KoParagCounter m_counter;
+ QLineEdit *sSuffix, *sPrefix;
+ QPushButton *bCustom;
+ KoSpinBox *spnStart;
+ QSpinBox *spnDepth;
+ QSpinBox *spnDisplayLevels;
+ QLabel *lStart;
+ QLabel *lCustom;
+ QCheckBox *cbRestart;
+ KComboBox *cbAlignment;
+ QLabel *lAlignment;
+ unsigned int styleBuffer;
+ bool noSignals;
+};
+
+/**
+ * The widget for editing counters (bullets & numbering) (tab 4)
+ */
+class KOTEXT_EXPORT KoParagCounterWidget : public KoParagLayoutWidget
+{
+ Q_OBJECT
+public:
+
+ KoParagCounterWidget( bool disableAll=false ,QWidget * parent=0L, const char * name = 0 );
+ virtual ~KoParagCounterWidget() {}
+
+ virtual void display( const KoParagLayout & lay );
+ virtual void save( KoParagLayout & lay );
+ //virtual bool isModified();
+ virtual QString tabName();
+
+ const KoParagCounter & counter() const { return m_counter; }
+
+protected slots:
+ //void selectCustomBullet();
+ //void numStyleChanged(); // selected another style from the combobox
+ void numTypeChanged( int ); // selected another type radiobutton.
+
+ void suffixChanged(const QString & txt) {m_counter.setSuffix(txt); updatePreview(); }
+ void prefixChanged(const QString & txt) {m_counter.setPrefix(txt); updatePreview();}
+ void startChanged(int i) {m_counter.setStartNumber(i); updatePreview();}
+ void restartChanged(bool b) {m_counter.setRestartCounter(b); }
+ void depthChanged(int i) {m_counter.setDepth(i); updatePreview();}
+ void displayLevelsChanged(int i) {m_counter.setDisplayLevels(i); updatePreview();}
+ void alignmentChanged(int i) {m_counter.setAlignment(i); updatePreview();}
+ void slotChangeCustomBullet( const QString & f, QChar c);
+ void styleChanged (KoParagCounter::Style st );
+
+private:
+ void updatePreview();
+
+ QButtonGroup *gNumbering;
+ KoParagCounter m_counter;
+ KoStylePreview *preview;
+ KoCounterStyleWidget *m_styleWidget;
+ unsigned int styleBuffer;
+ bool noSignals;
+};
+
+/**
+ *
+ */
+class KoTabulatorsLineEdit : public KoUnitDoubleSpinBox
+{
+ Q_OBJECT
+public:
+ KoTabulatorsLineEdit( QWidget *parent, double lower, double upper, double step, double value = 0.0,
+ KoUnit::Unit unit = KoUnit::U_PT, unsigned int precision = 2, const char *name = 0 );
+
+protected:
+ virtual void keyPressEvent ( QKeyEvent * );
+ signals:
+ void keyReturnPressed();
+};
+
+/**
+ * The widget for editing tabulators (tab 5)
+ */
+class KOTEXT_EXPORT KoParagTabulatorsWidget : public KoParagLayoutWidget
+{
+ Q_OBJECT
+public:
+ KoParagTabulatorsWidget( KoUnit::Unit unit, double _frameWidth, QWidget * parent, const char * name = 0 );
+ virtual ~KoParagTabulatorsWidget() {}
+
+ virtual void display( const KoParagLayout & lay );
+ virtual void save( KoParagLayout & lay );
+ virtual QString tabName();
+
+ KoTabulatorList tabList() const { return m_tabList; }
+
+ void setCurrentTab( double tabPos );
+
+protected slots:
+ void slotTabValueChanged( double );
+ void slotAlignCharChanged( const QString &_text );
+ void newClicked();
+ void deleteClicked();
+ void deleteAllClicked();
+ void setActiveItem(int selected);
+ void updateAlign(int selected);
+ void updateFilling(int selected);
+ void updateWidth();
+
+private:
+
+ void sortLists();
+ QString tabToString(const KoTabulator &tab);
+
+ QVBoxLayout* editLayout;
+
+ QListBox* lstTabs;
+ QGroupBox* gPosition;
+ KoTabulatorsLineEdit* sTabPos;
+ QButtonGroup* bgAlign;
+ QRadioButton* rAlignLeft;
+ QRadioButton* rAlignCentre;
+ QRadioButton* rAlignRight;
+ QRadioButton* rAlignVar;
+ QLineEdit* sAlignChar;
+ QGroupBox* gTabLeader;
+ QComboBox* cFilling;
+ KoUnitDoubleSpinBox* eWidth;
+ QPushButton* bNew;
+ QPushButton* bDelete;
+ QPushButton* bDeleteAll;
+
+ KoTabulatorList m_tabList;
+ KoUnit::Unit m_unit;
+ double m_toplimit;
+ bool noSignals;
+};
+
+/**
+ * KoStylePreview. Previewing text with style :)
+ * Used in the parag bullet/number tab of the parag dia,
+ * and in the main tab of the stylist.
+ */
+class KoStylePreview : public QGroupBox
+{
+ Q_OBJECT
+
+public:
+ KoStylePreview( const QString &title, const QString &text, QWidget *parent, const char* name = 0 );
+ virtual ~KoStylePreview();
+
+ /** Apply the given @p style to the preview.
+ * Note that this overwrites anything done by setCounter. */
+ void setStyle( KoParagStyle *style );
+
+ /** Set the given @p counter to the preview. */
+ void setCounter( const KoParagCounter & counter );
+
+protected:
+ void drawContents( QPainter *painter );
+
+ KoTextDocument *m_textdoc;
+ KoTextZoomHandler *m_zoomHandler;
+};
+
+
+/**
+ * The complete(*) dialog for changing attributes of a paragraph
+ *
+ * (*) the flags (to only show parts of it) have been kept just in case
+ * but are not currently used.
+ */
+class KOTEXT_EXPORT KoParagDia : public KDialogBase
+{
+ Q_OBJECT
+
+public:
+ enum { PD_SPACING = 1, PD_ALIGN = 2, PD_DECORATION = 4, PD_NUMBERING = 8,
+ PD_TABS = 16 };
+
+ /**
+ * breakLine : kpresenter didn't used this attibute, kword use it.
+ */
+ KoParagDia( QWidget*, const char*, int flags, KoUnit::Unit unit, double _frameWidth=-1,bool breakLine=true, bool disableAll = false);
+ ~KoParagDia();
+
+ /** Flags passed to constructor */
+ int getFlags()const { return m_flags; }
+
+ /** Make a given page the current one - @p page is a flag (PD_something) value */
+ void setCurrentPage( int page );
+
+ /** Set the values to be displayed */
+ void setParagLayout( const KoParagLayout & lay );
+
+ // Get values (in pt) - tab 1
+ double leftIndent() const { return m_indentSpacingWidget->leftIndent(); }
+ double rightIndent() const { return m_indentSpacingWidget->rightIndent(); }
+ double firstLineIndent() const { return m_indentSpacingWidget->firstLineIndent(); }
+ double spaceBeforeParag() const { return m_indentSpacingWidget->spaceBeforeParag(); }
+ double spaceAfterParag() const { return m_indentSpacingWidget->spaceAfterParag(); }
+ double lineSpacing() const { return m_indentSpacingWidget->lineSpacing(); }
+ KoParagLayout::SpacingType lineSpacingType() const{ return m_indentSpacingWidget->lineSpacingType(); }
+
+ // tab 2
+ int align() const { return m_alignWidget->align(); }
+ int pageBreaking() const { return m_alignWidget->pageBreaking(); }
+
+ // tab 3
+ KoBorder leftBorder() const { return m_decorationsWidget->leftBorder(); }
+ KoBorder rightBorder() const { return m_decorationsWidget->rightBorder(); }
+ KoBorder topBorder() const { return m_decorationsWidget->topBorder(); }
+ KoBorder bottomBorder() const { return m_decorationsWidget->bottomBorder(); }
+ bool joinBorder() const { return m_decorationsWidget->joinBorder(); }
+
+ // tab 4
+ const KoParagCounter & counter() const { return m_counterWidget->counter(); }
+
+ // tab 5
+ KoTabulatorList tabListTabulator() const { return m_tabulatorsWidget->tabList(); }
+ KoParagTabulatorsWidget * tabulatorsWidget() const { return m_tabulatorsWidget; }
+
+ QColor backgroundColor() const { return m_decorationsWidget->backgroundColor(); }
+
+ // Support for "what has changed?"
+ bool isAlignChanged() const {return oldLayout.alignment!=align();}
+ bool isLineSpacingChanged() const {
+ return (oldLayout.lineSpacingValue() !=lineSpacing() ||
+ oldLayout.lineSpacingType != lineSpacingType());
+ }
+ bool isLeftMarginChanged() const {
+ return oldLayout.margins[QStyleSheetItem::MarginLeft]!=leftIndent();
+ }
+ bool isRightMarginChanged() const {
+ return oldLayout.margins[QStyleSheetItem::MarginRight]!=rightIndent();
+ }
+ bool isFirstLineChanged() const {
+ return oldLayout.margins[ QStyleSheetItem::MarginFirstLine]!=firstLineIndent();
+ }
+ bool isSpaceBeforeChanged() const {
+ return oldLayout.margins[QStyleSheetItem::MarginTop]!=spaceBeforeParag();
+ }
+ bool isSpaceAfterChanged() const {
+ return oldLayout.margins[QStyleSheetItem::MarginBottom]!=spaceAfterParag();
+ }
+ bool isPageBreakingChanged() const {
+ return oldLayout.pageBreaking!=pageBreaking();
+ }
+ bool isCounterChanged() const;
+ bool isBorderChanged() const {
+ return (oldLayout.leftBorder!=leftBorder() ||
+ oldLayout.rightBorder!=rightBorder() ||
+ oldLayout.topBorder!=topBorder() ||
+ oldLayout.bottomBorder!=bottomBorder() );
+ }
+ bool isJoinBorderChanged() const { return oldLayout.joinBorder!=joinBorder(); }
+ bool listTabulatorChanged() const {return oldLayout.tabList()!=tabListTabulator();}
+ bool isBackgroundColorChanged() const { return oldLayout.backgroundColor != backgroundColor(); }
+
+ KoParagLayout paragLayout() const;
+ /// @return the set of flags which were changed
+ int changedFlags() const;
+
+protected slots:
+ void slotReset();
+ virtual void slotOk();
+ virtual void slotApply();
+signals:
+ void applyParagStyle();
+
+private:
+ KoIndentSpacingWidget * m_indentSpacingWidget;
+ KoParagAlignWidget * m_alignWidget;
+ KoParagDecorationWidget * m_decorationsWidget;
+ KoParagCounterWidget * m_counterWidget;
+ KoParagTabulatorsWidget * m_tabulatorsWidget;
+ int m_flags;
+ KoParagLayout oldLayout;
+};
+
+#endif
diff --git a/lib/kotext/KoParagDia_p.h b/lib/kotext/KoParagDia_p.h
new file mode 100644
index 00000000..8d1839eb
--- /dev/null
+++ b/lib/kotext/KoParagDia_p.h
@@ -0,0 +1,147 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef koparagdia_p_h
+#define koparagdia_p_h
+
+// This file hides those definitions from "users" of koParagDia.h
+// to reduce compile-time dependencies.
+
+#include <qgroupbox.h>
+#include <KoParagCounter.h>
+#include <qspinbox.h>
+class QWidget;
+class QPainter;
+
+
+/******************************************************************/
+/* Class: KoSpinBox */
+/******************************************************************/
+class KoSpinBox : public QSpinBox
+{
+ Q_OBJECT
+
+public:
+ enum counterType{ NONE,NUM,ALPHAB_L,ALPHAB_U,ROM_NUM_L,ROM_NUM_U};
+
+ KoSpinBox( int minValue, int maxValue, int step = 1,
+ QWidget * parent = 0, const char * name = 0 );
+ KoSpinBox( QWidget * parent = 0, const char * name = 0 );
+ virtual ~KoSpinBox();
+ virtual QString mapValueToText( int value );
+ virtual int mapTextToValue( bool * ok );
+ void setCounterType(counterType _type);
+ private:
+ counterType m_Etype;
+
+};
+
+/******************************************************************/
+/* class KPagePreview */
+/******************************************************************/
+class KPagePreview : public QGroupBox
+{
+ Q_OBJECT
+
+public:
+ KPagePreview( QWidget*, const char* = 0L );
+ ~KPagePreview() {}
+
+ void setLeft( double _left )
+ { left = _left; repaint( false ); }
+ void setRight( double _right )
+ { right = _right; repaint( false ); }
+ void setFirst( double _first )
+ { first = _first; repaint( false ); }
+ void setSpacing( double _spacing )
+ { spacing = _spacing; repaint( false ); }
+ void setBefore( double _before )
+ { before = _before; repaint( false ); }
+ void setAfter( double _after )
+ { after = _after; repaint( false ); }
+
+protected:
+ void drawContents( QPainter* );
+ int convert(double input);
+
+ double left, right, first, spacing, before, after;
+
+};
+
+/******************************************************************/
+/* class KPagePreview2 */
+/******************************************************************/
+
+class KPagePreview2 : public QGroupBox
+{
+ Q_OBJECT
+
+public:
+ KPagePreview2( QWidget*, const char* = 0L );
+ ~KPagePreview2() {}
+
+ void setAlign( int _align )
+ { align = _align; repaint( false ); }
+
+protected:
+ void drawContents( QPainter* );
+
+ int align;
+
+};
+
+/******************************************************************/
+/* class KoBorderPreview */
+/******************************************************************/
+
+class KoBorderPreview : public QFrame/*QGroupBox*/
+{
+ Q_OBJECT
+
+public:
+ KoBorderPreview( QWidget*, const char* = 0L );
+ ~KoBorderPreview() {}
+
+ KoBorder leftBorder()const { return m_leftBorder; }
+ void setLeftBorder( const KoBorder& _leftBorder )
+ { m_leftBorder = _leftBorder; repaint( true ); }
+ KoBorder rightBorder() const { return m_rightBorder; }
+ void setRightBorder( const KoBorder& _rightBorder )
+ { m_rightBorder = _rightBorder; repaint( true ); }
+ KoBorder topBorder()const { return m_topBorder; }
+ void setTopBorder( const KoBorder& _topBorder )
+ { m_topBorder = _topBorder; repaint( true ); }
+ KoBorder bottomBorder()const { return m_bottomBorder; }
+ void setBottomBorder( const KoBorder& _bottomBorder )
+ { m_bottomBorder = _bottomBorder; repaint( true ); }
+
+ void setBorder( KoBorder::BorderType which, const KoBorder& border);
+
+protected:
+ virtual void mousePressEvent( QMouseEvent* _ev );
+ void drawContents( QPainter* );
+ QPen setBorderPen( KoBorder _brd );
+
+ KoBorder m_leftBorder, m_rightBorder, m_topBorder, m_bottomBorder;
+signals:
+ void choosearea(QMouseEvent * _ev);
+
+};
+
+#endif
diff --git a/lib/kotext/KoParagLayout.cpp b/lib/kotext/KoParagLayout.cpp
new file mode 100644
index 00000000..b3c3cf2c
--- /dev/null
+++ b/lib/kotext/KoParagLayout.cpp
@@ -0,0 +1,948 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoParagLayout.h"
+#include "KoRichText.h"
+#include "KoParagCounter.h"
+#include "KoStyleCollection.h"
+#include "KoOasisContext.h"
+#include <KoXmlWriter.h>
+#include <KoXmlNS.h>
+#include <KoDom.h>
+#include <KoGenStyles.h>
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <qdom.h>
+#include <qbuffer.h>
+#include <qcolor.h>
+
+#include <float.h>
+
+QString* KoParagLayout::shadowCssCompat = 0L;
+
+// Create a default KoParagLayout.
+KoParagLayout::KoParagLayout()
+{
+ initialise();
+}
+
+void KoParagLayout::operator=( const KoParagLayout &layout )
+{
+ alignment = layout.alignment;
+ for ( int i = 0 ; i < 5 ; ++i )
+ margins[i] = layout.margins[i];
+ pageBreaking = layout.pageBreaking;
+ leftBorder = layout.leftBorder;
+ rightBorder = layout.rightBorder;
+ topBorder = layout.topBorder;
+ bottomBorder = layout.bottomBorder;
+ joinBorder = layout.joinBorder;
+ backgroundColor = layout.backgroundColor;
+ if ( layout.counter )
+ counter = new KoParagCounter( *layout.counter );
+ else
+ counter = 0L;
+ lineSpacing = layout.lineSpacing;
+ lineSpacingType = layout.lineSpacingType;
+ style = layout.style;
+ direction = layout.direction;
+ setTabList( layout.tabList() );
+}
+
+int KoParagLayout::compare( const KoParagLayout & layout ) const
+{
+ int flags = 0;
+ if ( alignment != layout.alignment )
+ flags |= Alignment;
+ for ( int i = 0 ; i < 5 ; ++i )
+ if ( margins[i] != layout.margins[i] )
+ {
+ flags |= Margins;
+ break;
+ }
+ if ( pageBreaking != layout.pageBreaking )
+ flags |= PageBreaking;
+ if ( leftBorder != layout.leftBorder
+ || rightBorder != layout.rightBorder
+ || topBorder != layout.topBorder
+ || bottomBorder != layout.bottomBorder
+ || joinBorder != layout.joinBorder )
+ flags |= Borders;
+
+ if ( layout.counter )
+ {
+ if ( counter )
+ {
+ if ( ! ( *layout.counter == *counter ) )
+ flags |= BulletNumber;
+ } else
+ if ( layout.counter->numbering() != KoParagCounter::NUM_NONE )
+ flags |= BulletNumber;
+ }
+ else
+ if ( counter && counter->numbering() != KoParagCounter::NUM_NONE )
+ flags |= BulletNumber;
+
+ if ( lineSpacing != layout.lineSpacing
+ || lineSpacingType != layout.lineSpacingType )
+ flags |= LineSpacing;
+ //if ( style != layout.style )
+ // flags |= Style;
+ if ( m_tabList != layout.m_tabList )
+ flags |= Tabulator;
+
+ if ( backgroundColor != layout.backgroundColor)
+ flags |= BackgroundColor;
+
+ // This method is used for the GUI stuff only, so we don't have a flag
+ // for the Direction value.
+ return flags;
+}
+
+void KoParagLayout::initialise()
+{
+ alignment = Qt::AlignAuto;
+ for ( int i = 0 ; i < 5 ; ++i ) // use memset ?
+ margins[i] = 0;
+ lineSpacingType = LS_SINGLE;
+ lineSpacing = 0;
+ counter = 0L;
+ leftBorder.setPenWidth( 0);
+ rightBorder.setPenWidth( 0);
+ topBorder.setPenWidth( 0);
+ bottomBorder.setPenWidth( 0);
+ joinBorder = true;
+ pageBreaking = 0;
+ style = 0L;
+ direction = QChar::DirON;
+ m_tabList.clear();
+}
+
+KoParagLayout::~KoParagLayout()
+{
+ delete counter;
+}
+
+void KoParagLayout::loadParagLayout( KoParagLayout& layout, const QDomElement& parentElem, int docVersion )
+{
+ // layout is an input and output parameter
+ // It can have been initialized already, e.g. by copying from a style
+ // (we don't do that anymore though).
+
+ // Load the paragraph tabs - we load into a clean list, not mixing with those already in "layout"
+ // We can't apply the 'default comes from the style' in this case, because
+ // there is no way to differentiate between "I want no tabs in the parag"
+ // and "use default from style".
+ KoTabulatorList tabList;
+ QDomElement element = parentElem.firstChild().toElement();
+ for ( ; !element.isNull() ; element = element.nextSibling().toElement() )
+ {
+ if ( element.tagName() == "TABULATOR" )
+ {
+ KoTabulator tab;
+ tab.type = static_cast<KoTabulators>( getAttribute( element, "type", T_LEFT ) );
+ tab.ptPos = getAttribute( element, "ptpos", 0.0 );
+ tab.filling = static_cast<KoTabulatorFilling>( getAttribute( element, "filling", TF_BLANK ) );
+ tab.ptWidth = getAttribute( element, "width", 0.5 );
+ QString alignCharStr = element.attribute("alignchar");
+ if ( alignCharStr.isEmpty() )
+ tab.alignChar = KGlobal::locale()->decimalSymbol()[0];
+ else
+ tab.alignChar = alignCharStr[0];
+ tabList.append( tab );
+ }
+ }
+ qHeapSort( tabList );
+ layout.setTabList( tabList );
+ layout.alignment = Qt::AlignAuto;
+ element = parentElem.namedItem( "FLOW" ).toElement(); // Flow is what is now called alignment internally
+ if ( !element.isNull() )
+ {
+ QString flow = element.attribute( "align" ); // KWord-1.0 DTD
+ if ( !flow.isEmpty() )
+ {
+ layout.alignment = flow=="right" ? Qt::AlignRight :
+ flow=="center" ? Qt::AlignHCenter :
+ flow=="justify" ? Qt::AlignJustify :
+ flow=="left" ? Qt::AlignLeft : Qt::AlignAuto;
+
+ QString dir = element.attribute( "dir" ); // KWord-1.2
+ if ( !dir.isEmpty() ) {
+ if ( dir == "L" )
+ layout.direction = QChar::DirL;
+ else if ( dir == "R" )
+ layout.direction = QChar::DirR;
+ else
+ kdWarning() << "Unexpected value for paragraph direction: " << dir << endl;
+ }
+ } else {
+ flow = element.attribute( "value" ); // KWord-0.8
+ static const int flow2align[] = { Qt::AlignAuto, Qt::AlignRight, Qt::AlignHCenter, Qt::AlignJustify };
+ if ( !flow.isEmpty() && flow.toInt() < 4 )
+ layout.alignment = flow2align[flow.toInt()];
+ }
+ }
+
+ if ( docVersion < 2 )
+ {
+ element = parentElem.namedItem( "OHEAD" ).toElement(); // used by KWord-0.8
+ if ( !element.isNull() )
+ layout.margins[QStyleSheetItem::MarginTop] = getAttribute( element, "pt", 0.0 );
+
+ element = parentElem.namedItem( "OFOOT" ).toElement(); // used by KWord-0.8
+ if ( !element.isNull() )
+ layout.margins[QStyleSheetItem::MarginBottom] = getAttribute( element, "pt", 0.0 );
+
+ element = parentElem.namedItem( "IFIRST" ).toElement(); // used by KWord-0.8
+ if ( !element.isNull() )
+ layout.margins[QStyleSheetItem::MarginFirstLine] = getAttribute( element, "pt", 0.0 );
+
+ element = parentElem.namedItem( "ILEFT" ).toElement(); // used by KWord-0.8
+ if ( !element.isNull() )
+ layout.margins[QStyleSheetItem::MarginLeft] = getAttribute( element, "pt", 0.0 );
+ }
+
+ // KWord-1.0 DTD
+ element = parentElem.namedItem( "INDENTS" ).toElement();
+ if ( !element.isNull() )
+ {
+ layout.margins[QStyleSheetItem::MarginFirstLine] = getAttribute( element, "first", 0.0 );
+ layout.margins[QStyleSheetItem::MarginLeft] = getAttribute( element, "left", 0.0 );
+ layout.margins[QStyleSheetItem::MarginRight] = getAttribute( element, "right", 0.0 );
+ }
+ element = parentElem.namedItem( "OFFSETS" ).toElement();
+ if ( !element.isNull() )
+ {
+ layout.margins[QStyleSheetItem::MarginTop] = getAttribute( element, "before", 0.0 );
+ layout.margins[QStyleSheetItem::MarginBottom] = getAttribute( element, "after", 0.0 );
+ }
+
+ if ( docVersion < 2 )
+ {
+ element = parentElem.namedItem( "LINESPACE" ).toElement(); // used by KWord-0.8
+ if ( !element.isNull() )
+ {
+ layout.lineSpacingType = KoParagLayout::LS_CUSTOM;
+ layout.lineSpacing = getAttribute( element, "pt", 0.0 );
+ }
+ }
+
+ element = parentElem.namedItem( "LINESPACING" ).toElement(); // KWord-1.0 DTD
+ if ( !element.isNull() )
+ {
+ //compatibility with koffice 1.1
+ if ( element.hasAttribute( "value" ))
+ {
+ QString value = element.attribute( "value" );
+ if ( value == "oneandhalf" )
+ {
+ layout.lineSpacingType = KoParagLayout::LS_ONEANDHALF;
+ layout.lineSpacing = 0;
+ }
+ else if ( value == "double" )
+ {
+ layout.lineSpacingType = KoParagLayout::LS_DOUBLE;
+ layout.lineSpacing = 0;
+ }
+ else
+ {
+ layout.lineSpacingType = KoParagLayout::LS_CUSTOM;
+ layout.lineSpacing = value.toDouble();
+ }
+ }
+ else
+ {
+ QString type = element.attribute( "type" );
+ if ( type == "oneandhalf" )
+ {
+ layout.lineSpacingType = KoParagLayout::LS_ONEANDHALF;
+ layout.lineSpacing = 0;
+ }
+ else if ( type == "double" )
+ {
+ layout.lineSpacingType = KoParagLayout::LS_DOUBLE;
+ layout.lineSpacing = 0;
+ }
+ else if ( type == "custom" )
+ {
+ layout.lineSpacingType = KoParagLayout::LS_CUSTOM;
+ layout.lineSpacing = element.attribute( "spacingvalue" ).toDouble();
+ }
+ else if ( type == "atleast" )
+ {
+ layout.lineSpacingType = KoParagLayout::LS_AT_LEAST;
+ layout.lineSpacing = element.attribute( "spacingvalue" ).toDouble();
+ }
+ else if ( type == "multiple" )
+ {
+ layout.lineSpacingType = KoParagLayout::LS_MULTIPLE;
+ layout.lineSpacing = element.attribute( "spacingvalue" ).toDouble();
+ }
+ else if ( type == "fixed" )
+ {
+ layout.lineSpacingType = KoParagLayout::LS_FIXED;
+ layout.lineSpacing = element.attribute( "spacingvalue" ).toDouble();
+ }
+ else if ( type == "single" ) // not used; just in case future versions use it.
+ layout.lineSpacingType = KoParagLayout::LS_SINGLE;
+ }
+ }
+
+ int pageBreaking = 0;
+ element = parentElem.namedItem( "PAGEBREAKING" ).toElement();
+ if ( !element.isNull() )
+ {
+ if ( element.attribute( "linesTogether" ) == "true" )
+ pageBreaking |= KoParagLayout::KeepLinesTogether;
+ if ( element.attribute( "hardFrameBreak" ) == "true" )
+ pageBreaking |= KoParagLayout::HardFrameBreakBefore;
+ if ( element.attribute( "hardFrameBreakAfter" ) == "true" )
+ pageBreaking |= KoParagLayout::HardFrameBreakAfter;
+ }
+ if ( docVersion < 2 )
+ {
+ element = parentElem.namedItem( "HARDBRK" ).toElement(); // KWord-0.8
+ if ( !element.isNull() )
+ pageBreaking |= KoParagLayout::HardFrameBreakBefore;
+ }
+ layout.pageBreaking = pageBreaking;
+
+ element = parentElem.namedItem( "LEFTBORDER" ).toElement();
+ if ( !element.isNull() )
+ layout.leftBorder = KoBorder::loadBorder( element );
+ else
+ layout.leftBorder.setPenWidth(0);
+
+ element = parentElem.namedItem( "RIGHTBORDER" ).toElement();
+ if ( !element.isNull() )
+ layout.rightBorder = KoBorder::loadBorder( element );
+ else
+ layout.rightBorder.setPenWidth(0);
+
+ element = parentElem.namedItem( "TOPBORDER" ).toElement();
+ if ( !element.isNull() )
+ layout.topBorder = KoBorder::loadBorder( element );
+ else
+ layout.topBorder.setPenWidth(0);
+
+ element = parentElem.namedItem( "BOTTOMBORDER" ).toElement();
+ if ( !element.isNull() )
+ layout.bottomBorder = KoBorder::loadBorder( element );
+ else
+ layout.bottomBorder.setPenWidth(0);
+
+ element = parentElem.namedItem( "COUNTER" ).toElement();
+ if ( !element.isNull() )
+ {
+ layout.counter = new KoParagCounter;
+ layout.counter->load( element );
+ }
+
+ // Compatibility with KOffice-1.2
+ element = parentElem.namedItem( "SHADOW" ).toElement();
+ if ( !element.isNull() && element.hasAttribute("direction") )
+ {
+ int shadowDistance = element.attribute("distance").toInt();
+ int shadowDirection = element.attribute("direction").toInt();
+ QColor shadowColor;
+ if ( element.hasAttribute("red") )
+ {
+ int r = element.attribute("red").toInt();
+ int g = element.attribute("green").toInt();
+ int b = element.attribute("blue").toInt();
+ shadowColor.setRgb( r, g, b );
+ }
+ int distanceX = 0;
+ int distanceY = 0;
+ switch ( shadowDirection )
+ {
+ case 1: // KoParagLayout::SD_LEFT_UP:
+ case 2: // KoParagLayout::SD_UP:
+ case 3: // KoParagLayout::SD_RIGHT_UP:
+ distanceX = - shadowDistance;
+ break;
+ case 7: // KoParagLayout::SD_LEFT_BOTTOM:
+ case 6: // KoParagLayout::SD_BOTTOM:
+ case 5: // KoParagLayout::SD_RIGHT_BOTTOM:
+ distanceX = shadowDistance;
+ break;
+ }
+ switch ( shadowDirection )
+ {
+ case 7: // KoParagLayout::SD_LEFT_BOTTOM:
+ case 8: // KoParagLayout::SD_LEFT:
+ case 1: //KoParagLayout::SD_LEFT_UP:
+ distanceY = - shadowDistance;
+ break;
+ case 3: // KoParagLayout::SD_RIGHT_UP:
+ case 4: // KoParagLayout::SD_RIGHT:
+ case 5: // KoParagLayout::SD_RIGHT_BOTTOM:
+ distanceY = shadowDistance;
+ break;
+ }
+ if ( !shadowCssCompat )
+ shadowCssCompat = new QString;
+ *shadowCssCompat = KoTextFormat::shadowAsCss( distanceX, distanceY, shadowColor );
+ kdDebug(32500) << "setting shadow compat to " << ( *shadowCssCompat ) << endl;
+ }
+ else
+ {
+ delete shadowCssCompat;
+ shadowCssCompat = 0L;
+ }
+}
+
+//static
+Qt::AlignmentFlags KoParagLayout::loadOasisAlignment( const QCString& str )
+{
+ return
+ str == "left" ? Qt::AlignLeft :
+ str == "right" ? Qt::AlignRight :
+ str == "start" ? Qt::AlignLeft :
+ str == "end" ? Qt::AlignRight :
+ str == "center" ? Qt::AlignHCenter :
+ str == "justify" ? Qt::AlignJustify :
+ str == "start" ? Qt::AlignAuto // i.e. direction-dependent
+ : Qt::AlignAuto; // default (can't happen unless spec is extended)
+}
+
+//static
+QCString KoParagLayout::saveOasisAlignment( Qt::AlignmentFlags alignment )
+{
+ return alignment == Qt::AlignLeft ? "left" :
+ alignment == Qt::AlignRight ? "right" :
+ alignment == Qt::AlignHCenter ? "center" :
+ alignment == Qt::AlignJustify ? "justify" :
+ "start"; // i.e. direction-dependent
+}
+
+void KoParagLayout::loadOasisParagLayout( KoParagLayout& layout, KoOasisContext& context )
+{
+ context.styleStack().setTypeProperties( "paragraph" );
+ // layout is an input and output parameter
+ // It can have been initialized already, e.g. by copying from a style
+
+ // code from OoWriterImport::writeLayout
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "text-align" ) ) {
+ QCString align = context.styleStack().attributeNS( KoXmlNS::fo, "text-align" ).latin1();
+ layout.alignment = loadOasisAlignment( align );
+ }
+
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::style, "writing-mode" ) ) { // http://web4.w3.org/TR/xsl/slice7.html#writing-mode
+ // LTR is lr-tb. RTL is rl-tb
+ QString writingMode = context.styleStack().attributeNS( KoXmlNS::style, "writing-mode" );
+ layout.direction = ( writingMode=="rl-tb" || writingMode=="rl" ) ? QChar::DirR : QChar::DirL;
+ }
+
+ // Indentation (margins)
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "margin-left" ) || // 3.11.19
+ context.styleStack().hasAttributeNS( KoXmlNS::fo, "margin-right" ) ) {
+ layout.margins[QStyleSheetItem::MarginLeft] = KoUnit::parseValue( context.styleStack().attributeNS( KoXmlNS::fo, "margin-left" ) );
+ layout.margins[QStyleSheetItem::MarginRight] = KoUnit::parseValue( context.styleStack().attributeNS( KoXmlNS::fo, "margin-right" ) );
+ // *text-indent must always be bound to either margin-left or margin-right
+ double first = 0;
+ if ( context.styleStack().attributeNS( KoXmlNS::style, "auto-text-indent") == "true" ) // style:auto-text-indent takes precedence
+ // ### "indented by a value that is based on the current font size"
+ // ### and "requires margin-left and margin-right
+ // ### but how much is the indent?
+ first = 10;
+ else if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "text-indent") )
+ first = KoUnit::parseValue( context.styleStack().attributeNS( KoXmlNS::fo, "text-indent") );
+
+ layout.margins[QStyleSheetItem::MarginFirstLine] = first;
+ }
+
+ // Offset before and after paragraph
+ if( context.styleStack().hasAttributeNS( KoXmlNS::fo, "margin-top") || // 3.11.22
+ context.styleStack().hasAttributeNS( KoXmlNS::fo, "margin-bottom")) {
+ layout.margins[QStyleSheetItem::MarginTop] = KoUnit::parseValue( context.styleStack().attributeNS( KoXmlNS::fo, "margin-top" ) );
+ layout.margins[QStyleSheetItem::MarginBottom] = KoUnit::parseValue( context.styleStack().attributeNS( KoXmlNS::fo, "margin-bottom" ) );
+ }
+
+ // Line spacing
+ if( context.styleStack().hasAttributeNS( KoXmlNS::fo, "line-height") ) { // 3.11.1
+ // Fixed line height
+ QString value = context.styleStack().attributeNS( KoXmlNS::fo, "line-height" );
+ if ( value != "normal" ) {
+ if ( value == "100%" )
+ layout.lineSpacingType = KoParagLayout::LS_SINGLE;
+ else if( value=="150%")
+ layout.lineSpacingType = KoParagLayout::LS_ONEANDHALF;
+ else if( value=="200%")
+ layout.lineSpacingType = KoParagLayout::LS_DOUBLE;
+ else if ( value.find('%') > -1 )
+ {
+ value = value.remove( '%' );
+ double percent = value.toDouble();
+ layout.lineSpacingType = KoParagLayout::LS_MULTIPLE;
+ layout.lineSpacing = percent / 100.0;
+ kdDebug(33001) << "line-height =" << percent << ", " << layout.lineSpacing << ", " << percent/100 << endl;
+ }
+ else // fixed value
+ {
+ layout.lineSpacingType = KoParagLayout::LS_FIXED;
+ layout.lineSpacing = KoUnit::parseValue( value );
+ }
+ }
+ }
+ // Line-height-at-least is mutually exclusive with line-height
+ else if ( context.styleStack().hasAttributeNS( KoXmlNS::style, "line-height-at-least") ) // 3.11.2
+ {
+ QString value = context.styleStack().attributeNS( KoXmlNS::style, "line-height-at-least" );
+ // kotext has "at least" but that's for the linespacing, not for the entire line height!
+ // Strange. kotext also has "at least" for the whole line height....
+ // Did we make the wrong choice in kotext?
+ //kdWarning() << "Unimplemented support for style:line-height-at-least: " << value << endl;
+ // Well let's see if this makes a big difference.
+ layout.lineSpacingType = KoParagLayout::LS_AT_LEAST;
+ layout.lineSpacing = KoUnit::parseValue( value );
+ }
+ // Line-spacing is mutually exclusive with line-height and line-height-at-least
+ else if ( context.styleStack().hasAttributeNS( KoXmlNS::style, "line-spacing") ) // 3.11.3
+ {
+ double value = KoUnit::parseValue( context.styleStack().attributeNS( KoXmlNS::style, "line-spacing" ) );
+ if ( value != 0.0 )
+ {
+ layout.lineSpacingType = KoParagLayout::LS_CUSTOM;
+ layout.lineSpacing = value;
+ }
+ }
+
+ // Tabulators
+ KoTabulatorList tabList;
+ if ( context.styleStack().hasChildNodeNS( KoXmlNS::style, "tab-stops" ) ) { // 3.11.10
+ QDomElement tabStops = context.styleStack().childNodeNS( KoXmlNS::style, "tab-stops" );
+ //kdDebug(30519) << k_funcinfo << tabStops.childNodes().count() << " tab stops in layout." << endl;
+ QDomElement tabStop;
+ forEachElement( tabStop, tabStops )
+ {
+ Q_ASSERT( tabStop.localName() == "tab-stop" );
+ const QString type = tabStop.attributeNS( KoXmlNS::style, "type", QString::null ); // left, right, center or char
+
+ KoTabulator tab;
+ tab.ptPos = KoUnit::parseValue( tabStop.attributeNS( KoXmlNS::style, "position", QString::null ) );
+ // Tab stop positions in the XML are relative to the left-margin
+ tab.ptPos += layout.margins[QStyleSheetItem::MarginLeft];
+ if ( type == "center" )
+ tab.type = T_CENTER;
+ else if ( type == "right" )
+ tab.type = T_RIGHT;
+ else if ( type == "char" ) {
+ QString delimiterChar = tabStop.attributeNS( KoXmlNS::style, "char", QString::null ); // single character
+ if ( !delimiterChar.isEmpty() )
+ tab.alignChar = delimiterChar[0];
+ tab.type = T_DEC_PNT; // "alignment on decimal point"
+ }
+ else //if ( type == "left" )
+ tab.type = T_LEFT;
+
+ tab.ptWidth = KoUnit::parseValue( tabStop.attributeNS( KoXmlNS::style, "leader-width", QString::null ), 0.5 );
+
+ tab.filling = TF_BLANK;
+ if ( tabStop.attributeNS( KoXmlNS::style, "leader-type", QString::null ) == "single" )
+ {
+ QString leaderStyle = tabStop.attributeNS( KoXmlNS::style, "leader-style", QString::null );
+ if ( leaderStyle == "solid" )
+ tab.filling = TF_LINE;
+ else if ( leaderStyle == "dotted" )
+ tab.filling = TF_DOTS;
+ else if ( leaderStyle == "dash" )
+ tab.filling = TF_DASH;
+ else if ( leaderStyle == "dot-dash" )
+ tab.filling = TF_DASH_DOT;
+ else if ( leaderStyle == "dot-dot-dash" )
+ tab.filling = TF_DASH_DOT_DOT;
+ }
+ else
+ {
+ // Fallback: convert leaderChar's unicode value
+ QString leaderChar = tabStop.attributeNS( KoXmlNS::style, "leader-text", QString::null );
+ if ( !leaderChar.isEmpty() )
+ {
+ QChar ch = leaderChar[0];
+ switch (ch.latin1()) {
+ case '.':
+ tab.filling = TF_DOTS; break;
+ case '-':
+ case '_': // TODO in KWord: differentiate --- and ___
+ tab.filling = TF_LINE; break;
+ default:
+ // KWord doesn't have support for "any char" as filling.
+ break;
+ }
+ }
+ }
+ tabList.append( tab );
+ } //for
+ }
+ qHeapSort( tabList );
+ layout.setTabList( tabList );
+
+ layout.joinBorder = !( context.styleStack().attributeNS( KoXmlNS::style, "join-border") == "false" );
+
+ // Borders
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "border","left") )
+ layout.leftBorder.loadFoBorder( context.styleStack().attributeNS( KoXmlNS::fo, "border","left") );
+ else
+ layout.leftBorder.setPenWidth(0);
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "border","right") )
+ layout.rightBorder.loadFoBorder( context.styleStack().attributeNS( KoXmlNS::fo, "border","right") );
+ else
+ layout.rightBorder.setPenWidth(0);
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "border","top") )
+ layout.topBorder.loadFoBorder( context.styleStack().attributeNS( KoXmlNS::fo, "border","top") );
+ else
+ layout.topBorder.setPenWidth(0);
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "border","bottom") )
+ layout.bottomBorder.loadFoBorder( context.styleStack().attributeNS( KoXmlNS::fo, "border","bottom") );
+ else
+ layout.bottomBorder.setPenWidth(0);
+
+
+ // Page breaking
+ int pageBreaking = 0;
+ if( context.styleStack().hasAttributeNS( KoXmlNS::fo, "break-before") ||
+ context.styleStack().hasAttributeNS( KoXmlNS::fo, "break-after") ||
+ context.styleStack().hasAttributeNS( KoXmlNS::fo, "keep-together") ||
+ context.styleStack().hasAttributeNS( KoXmlNS::style, "keep-with-next") ||
+ context.styleStack().hasAttributeNS( KoXmlNS::fo, "keep-with-next") )
+ {
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "break-before") ) { // 3.11.24
+ // TODO in KWord: implement difference between "column" and "page"
+ if ( context.styleStack().attributeNS( KoXmlNS::fo, "break-before" ) != "auto" )
+ pageBreaking |= KoParagLayout::HardFrameBreakBefore;
+ }
+ else if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "break-after") ) { // 3.11.24
+ // TODO in KWord: implement difference between "column" and "page"
+ if ( context.styleStack().attributeNS( KoXmlNS::fo, "break-after" ) != "auto" )
+ pageBreaking |= KoParagLayout::HardFrameBreakAfter;
+ }
+
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "keep-together" ) ) { // was style:break-inside in OOo-1.1, renamed in OASIS
+ if ( context.styleStack().attributeNS( KoXmlNS::fo, "keep-together" ) != "auto" )
+ pageBreaking |= KoParagLayout::KeepLinesTogether;
+ }
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "keep-with-next" ) ) {
+ // OASIS spec says it's "auto"/"always", not a boolean.
+ QString val = context.styleStack().attributeNS( KoXmlNS::fo, "keep-with-next" );
+ if ( val == "true" || val == "always" )
+ pageBreaking |= KoParagLayout::KeepWithNext;
+ }
+ }
+ layout.pageBreaking = pageBreaking;
+
+ // Paragraph background color - fo:background-color
+ // The background color for parts of a paragraph that have no text underneath
+ if ( context.styleStack().hasAttributeNS( KoXmlNS::fo, "background-color" ) ) {
+ QString bgColor = context.styleStack().attributeNS( KoXmlNS::fo, "background-color");
+ if (bgColor != "transparent")
+ layout.backgroundColor.setNamedColor( bgColor );
+ }
+}
+
+void KoParagLayout::saveParagLayout( QDomElement & parentElem, int alignment ) const
+{
+ const KoParagLayout& layout = *this; // code moved from somewhere else;)
+ QDomDocument doc = parentElem.ownerDocument();
+ QDomElement element = doc.createElement( "NAME" );
+ parentElem.appendChild( element );
+ if ( layout.style )
+ element.setAttribute( "value", layout.style->displayName() );
+ //else
+ // kdWarning() << "KoParagLayout::saveParagLayout: style==0!" << endl;
+
+ element = doc.createElement( "FLOW" );
+ parentElem.appendChild( element );
+
+ element.setAttribute( "align", alignment==Qt::AlignRight ? "right" :
+ alignment==Qt::AlignHCenter ? "center" :
+ alignment==Qt::AlignJustify ? "justify" :
+ alignment==Qt::AlignAuto ? "auto" : "left" ); // Note: styles can have AlignAuto. Not paragraphs.
+
+ if ( static_cast<QChar::Direction>(layout.direction) == QChar::DirR )
+ element.setAttribute( "dir", "R" );
+ else
+ if ( static_cast<QChar::Direction>(layout.direction) == QChar::DirL )
+ element.setAttribute( "dir", "L" );
+
+ if ( layout.margins[QStyleSheetItem::MarginFirstLine] != 0 ||
+ layout.margins[QStyleSheetItem::MarginLeft] != 0 ||
+ layout.margins[QStyleSheetItem::MarginRight] != 0 )
+ {
+ element = doc.createElement( "INDENTS" );
+ parentElem.appendChild( element );
+ if ( layout.margins[QStyleSheetItem::MarginFirstLine] != 0 )
+ element.setAttribute( "first", layout.margins[QStyleSheetItem::MarginFirstLine] );
+ if ( layout.margins[QStyleSheetItem::MarginLeft] != 0 )
+ element.setAttribute( "left", layout.margins[QStyleSheetItem::MarginLeft] );
+ if ( layout.margins[QStyleSheetItem::MarginRight] != 0 )
+ element.setAttribute( "right", layout.margins[QStyleSheetItem::MarginRight] );
+ }
+
+ if ( layout.margins[QStyleSheetItem::MarginTop] != 0 ||
+ layout.margins[QStyleSheetItem::MarginBottom] != 0 )
+ {
+ element = doc.createElement( "OFFSETS" );
+ parentElem.appendChild( element );
+ if ( layout.margins[QStyleSheetItem::MarginTop] != 0 )
+ element.setAttribute( "before", layout.margins[QStyleSheetItem::MarginTop] );
+ if ( layout.margins[QStyleSheetItem::MarginBottom] != 0 )
+ element.setAttribute( "after", layout.margins[QStyleSheetItem::MarginBottom] );
+ }
+ if ( layout.lineSpacingType != LS_SINGLE )
+ {
+ element = doc.createElement( "LINESPACING" );
+ parentElem.appendChild( element );
+ if ( layout.lineSpacingType == KoParagLayout::LS_ONEANDHALF ) {
+ element.setAttribute( "type", "oneandhalf" );
+ element.setAttribute( "value", "oneandhalf" ); //compatibility with koffice 1.2
+ }
+ else if ( layout.lineSpacingType == KoParagLayout::LS_DOUBLE ) {
+ element.setAttribute( "type", "double" );
+ element.setAttribute( "value", "double" ); //compatibility with koffice 1.2
+ }
+ else if ( layout.lineSpacingType == KoParagLayout::LS_CUSTOM )
+ {
+ element.setAttribute( "type", "custom" );
+ element.setAttribute( "spacingvalue", layout.lineSpacing);
+ element.setAttribute( "value", layout.lineSpacing ); //compatibility with koffice 1.2
+ }
+ else if ( layout.lineSpacingType == KoParagLayout::LS_AT_LEAST )
+ {
+ element.setAttribute( "type", "atleast" );
+ element.setAttribute( "spacingvalue", layout.lineSpacing);
+ }
+ else if ( layout.lineSpacingType == KoParagLayout::LS_MULTIPLE )
+ {
+ element.setAttribute( "type", "multiple" );
+ element.setAttribute( "spacingvalue", layout.lineSpacing);
+ }
+ else if ( layout.lineSpacingType == KoParagLayout::LS_FIXED )
+ {
+ element.setAttribute( "type", "fixed" );
+ element.setAttribute( "spacingvalue", layout.lineSpacing);
+ }
+ else
+ kdDebug()<<" error in lineSpacing Type\n";
+ }
+
+ if ( layout.pageBreaking != 0 )
+ {
+ element = doc.createElement( "PAGEBREAKING" );
+ parentElem.appendChild( element );
+ if ( layout.pageBreaking & KoParagLayout::KeepLinesTogether )
+ element.setAttribute( "linesTogether", "true" );
+ if ( layout.pageBreaking & KoParagLayout::HardFrameBreakBefore )
+ element.setAttribute( "hardFrameBreak", "true" );
+ if ( layout.pageBreaking & KoParagLayout::HardFrameBreakAfter )
+ element.setAttribute( "hardFrameBreakAfter", "true" );
+ }
+
+ if ( layout.leftBorder.penWidth() > 0 )
+ {
+ element = doc.createElement( "LEFTBORDER" );
+ parentElem.appendChild( element );
+ layout.leftBorder.save( element );
+ }
+ if ( layout.rightBorder.penWidth() > 0 )
+ {
+ element = doc.createElement( "RIGHTBORDER" );
+ parentElem.appendChild( element );
+ layout.rightBorder.save( element );
+ }
+ if ( layout.topBorder.penWidth() > 0 )
+ {
+ element = doc.createElement( "TOPBORDER" );
+ parentElem.appendChild( element );
+ layout.topBorder.save( element );
+ }
+ if ( layout.bottomBorder.penWidth() > 0 )
+ {
+ element = doc.createElement( "BOTTOMBORDER" );
+ parentElem.appendChild( element );
+ layout.bottomBorder.save( element );
+ }
+ if ( layout.counter && layout.counter->numbering() != KoParagCounter::NUM_NONE )
+ {
+ element = doc.createElement( "COUNTER" );
+ parentElem.appendChild( element );
+ if ( layout.counter )
+ layout.counter->save( element );
+ }
+
+ KoTabulatorList tabList = layout.tabList();
+ KoTabulatorList::ConstIterator it = tabList.begin();
+ for ( ; it != tabList.end() ; it++ )
+ {
+ element = doc.createElement( "TABULATOR" );
+ parentElem.appendChild( element );
+ element.setAttribute( "type", (*it).type );
+ element.setAttribute( "ptpos", (*it).ptPos );
+ element.setAttribute( "filling", (*it).filling );
+ if ( (*it).filling != TF_BLANK )
+ element.setAttribute( "width", QString::number( (*it).ptWidth, 'g', DBL_DIG ) );
+ if ( (*it).type == T_DEC_PNT && !(*it).alignChar.isNull() )
+ element.setAttribute( "alignchar", QString((*it).alignChar) );
+ }
+}
+
+void KoParagLayout::saveOasis( KoGenStyle& gs, KoSavingContext& context, bool savingStyle ) const
+{
+ gs.addProperty( "fo:text-align", saveOasisAlignment( (Qt::AlignmentFlags)alignment ).data() );
+ // Don't save the direction for a style, if "auto", so that the
+ // auto-determination of direction based on first char, works.
+ if ( !savingStyle || (QChar::Direction) direction != QChar::DirON )
+ gs.addProperty( "style:writing-mode", (QChar::Direction)direction == QChar::DirR ? "rl-tb" : "lr-tb" );
+ gs.addPropertyPt( "fo:margin-left", margins[QStyleSheetItem::MarginLeft] );
+ gs.addPropertyPt( "fo:margin-right", margins[QStyleSheetItem::MarginRight] );
+ gs.addPropertyPt( "fo:text-indent", margins[QStyleSheetItem::MarginFirstLine] );
+ gs.addPropertyPt( "fo:margin-top", margins[QStyleSheetItem::MarginTop] );
+ gs.addPropertyPt( "fo:margin-bottom", margins[QStyleSheetItem::MarginBottom] );
+
+ switch ( lineSpacingType ) {
+ case KoParagLayout::LS_SINGLE:
+ gs.addProperty( "fo:line-height", "100%" );
+ break;
+ case KoParagLayout::LS_ONEANDHALF:
+ gs.addProperty( "fo:line-height", "150%" );
+ break;
+ case KoParagLayout::LS_DOUBLE:
+ gs.addProperty( "fo:line-height", "200%" );
+ break;
+ case KoParagLayout::LS_MULTIPLE:
+ gs.addProperty( "fo:line-height", QString::number( lineSpacing * 100.0 ) + '%' );
+ break;
+ case KoParagLayout::LS_FIXED:
+ gs.addPropertyPt( "fo:line-height", lineSpacing );
+ break;
+ case KoParagLayout::LS_CUSTOM:
+ gs.addPropertyPt( "style:line-spacing", lineSpacing );
+ break;
+ case KoParagLayout::LS_AT_LEAST:
+ gs.addPropertyPt( "style:line-height-at-least", lineSpacing );
+ break;
+ }
+
+ QBuffer buffer;
+ buffer.open( IO_WriteOnly );
+ KoXmlWriter tabsWriter( &buffer, 4 ); // indent==4: root,autostyle,style,parag-props
+ tabsWriter.startElement( "style:tab-stops" );
+ KoTabulatorList::ConstIterator it = m_tabList.begin();
+ for ( ; it != m_tabList.end() ; it++ )
+ {
+ tabsWriter.startElement( "style:tab-stop" );
+ // Tab stop positions in the XML are relative to the left-margin
+ double pos = (*it).ptPos - margins[QStyleSheetItem::MarginLeft];
+ tabsWriter.addAttributePt( "style:position", pos );
+
+ switch ( (*it).type ) {
+ case T_LEFT:
+ tabsWriter.addAttribute( "style:type", "left" );
+ break;
+ case T_CENTER:
+ tabsWriter.addAttribute( "style:type", "center" );
+ break;
+ case T_RIGHT:
+ tabsWriter.addAttribute( "style:type", "right" );
+ break;
+ case T_DEC_PNT: // "alignment on decimal point"
+ tabsWriter.addAttribute( "style:type", "char" );
+ if ( !(*it).alignChar.isNull() )
+ tabsWriter.addAttribute( "style:char", QString( (*it).alignChar ) );
+ break;
+ case T_INVALID: // keep compiler happy, this can't happen
+ break;
+ }
+ switch( (*it).filling ) {
+ case TF_BLANK:
+ tabsWriter.addAttribute( "style:leader-type", "none" );
+ break;
+ case TF_LINE:
+ tabsWriter.addAttribute( "style:leader-type", "single" );
+ tabsWriter.addAttribute( "style:leader-style", "solid" );
+ // Give OOo a chance to show something, since it doesn't support lines here.
+ tabsWriter.addAttribute( "style:leader-text", "_" );
+ break;
+ case TF_DOTS:
+ tabsWriter.addAttribute( "style:leader-type", "single" );
+ tabsWriter.addAttribute( "style:leader-style", "dotted" );
+ // Give OOo a chance to show something, since it doesn't support lines here.
+ tabsWriter.addAttribute( "style:leader-text", "." );
+ break;
+ case TF_DASH:
+ tabsWriter.addAttribute( "style:leader-type", "single" );
+ tabsWriter.addAttribute( "style:leader-style", "dash" );
+ // Give OOo a chance to show something, since it doesn't support lines here.
+ tabsWriter.addAttribute( "style:leader-text", "_" );
+ break;
+ case TF_DASH_DOT:
+ tabsWriter.addAttribute( "style:leader-type", "single" );
+ tabsWriter.addAttribute( "style:leader-style", "dot-dash" );
+ // Give OOo a chance to show something, since it doesn't support lines here.
+ tabsWriter.addAttribute( "style:leader-text", "." );
+ break;
+ case TF_DASH_DOT_DOT:
+ tabsWriter.addAttribute( "style:leader-type", "single" );
+ tabsWriter.addAttribute( "style:leader-style", "dot-dot-dash" );
+ // Give OOo a chance to show something, since it doesn't support lines here.
+ tabsWriter.addAttribute( "style:leader-text", "." );
+ break;
+ }
+ if ( (*it).filling != TF_BLANK )
+ tabsWriter.addAttributePt( "style:leader-width", (*it).ptWidth );
+ // If we want to support it, oasis also defines style:leader-color
+ tabsWriter.endElement();
+ }
+ tabsWriter.endElement();
+ buffer.close();
+ QString elementContents = QString::fromUtf8( buffer.buffer(), buffer.buffer().size() );
+ gs.addChildElement( "style:tab-stops", elementContents );
+
+ if ( !joinBorder )
+ gs.addProperty( "style:join-border", "false" );
+ bool fourBordersEqual = leftBorder.penWidth() > 0 &&
+ leftBorder == rightBorder && rightBorder == topBorder && topBorder == bottomBorder;
+ if ( fourBordersEqual ) {
+ gs.addProperty( "fo:border", leftBorder.saveFoBorder() );
+ } else {
+ if ( leftBorder.penWidth() > 0 )
+ gs.addProperty( "fo:border-left", leftBorder.saveFoBorder() );
+ if ( rightBorder.penWidth() > 0 )
+ gs.addProperty( "fo:border-right", rightBorder.saveFoBorder() );
+ if ( topBorder.penWidth() > 0 )
+ gs.addProperty( "fo:border-top", topBorder.saveFoBorder() );
+ if ( bottomBorder.penWidth() > 0 )
+ gs.addProperty( "fo:border-bottom", bottomBorder.saveFoBorder() );
+ }
+
+ if ( pageBreaking & KoParagLayout::HardFrameBreakBefore )
+ gs.addProperty( "fo:break-before", context.hasColumns() ? "column" : "page" );
+ else if ( pageBreaking & KoParagLayout::HardFrameBreakAfter )
+ gs.addProperty( "fo:break-after", context.hasColumns() ? "column" : "page" );
+ if ( pageBreaking & KoParagLayout::KeepLinesTogether )
+ gs.addProperty( "fo:keep-together", "always" );
+ if ( pageBreaking & KoParagLayout::KeepWithNext )
+ gs.addProperty( "fo:keep-with-next", "always" );
+
+ gs.addProperty( "fo:background-color",
+ backgroundColor.isValid() ?
+ backgroundColor.name() : "transparent");
+}
diff --git a/lib/kotext/KoParagLayout.h b/lib/kotext/KoParagLayout.h
new file mode 100644
index 00000000..e3098f59
--- /dev/null
+++ b/lib/kotext/KoParagLayout.h
@@ -0,0 +1,180 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef koparaglayout_h
+#define koparaglayout_h
+
+#include <KoRuler.h> // for KoTabulatorList
+#include <qdom.h>
+#include "KoBorder.h"
+#include <koffice_export.h>
+class KoSavingContext;
+class KoGenStyle;
+class KoParagCounter;
+class KoParagStyle;
+class KoOasisContext;
+class QColor;
+
+/**
+ * This class holds the paragraph-specific formatting information
+ * It's separated from KoTextParag so that it can be copied in
+ * the undo/redo history, and in KoParagStyle.
+ */
+class KOTEXT_EXPORT KoParagLayout
+{
+public:
+ KoParagLayout();
+ KoParagLayout( const KoParagLayout &layout ) { operator=( layout ); }
+
+ ~KoParagLayout();
+
+ /** This enum is used to mark parts of a KoParagLayout as changed
+ * (i.e. when changing them in the dialog/stylist) */
+ enum { Alignment = 1,
+ BulletNumber = 2, // TODO: we can use Counter now :)
+ Margins = 4,
+ LineSpacing = 8,
+ Borders = 16,
+ Tabulator = 32,
+ PageBreaking = 64,
+ BackgroundColor = 128,
+ /* Style is maybe missing */
+ All = Alignment | BulletNumber | Margins | LineSpacing |
+ Borders | Tabulator | PageBreaking | BackgroundColor
+ } Flags;
+
+ /** Page breaking flags */
+ enum {
+ BreakBetweenLines = 0, // default
+ KeepLinesTogether = 1,
+ HardFrameBreakBefore = 2, // incompatible with KeepWithPrevious
+ HardFrameBreakAfter = 4, // incompatible with KeepWithNext
+ KeepWithPrevious = 8, // incompatible with HardFrameBreakBefore
+ KeepWithNext = 16 // incompatible with HardFrameBreakAfter
+ };
+
+ // This class is used as a struct, which explains the public vars :)
+ /** left, right, top, bottom, firstLineSpacing - in pt */
+ double margins[5];
+ /**
+ * Line spacing values
+ * Assuming h is the height of the biggest char in the line,
+ * and v is the linespacing value, the total line height is:
+ *
+ * Single: h
+ * 1.5/2/multiple: v*h
+ * Custom (aka "line distance"): h + v
+ * At least: >= v
+ * Fixed: v
+ */
+ enum SpacingType { LS_SINGLE = 0, LS_ONEANDHALF = -1, LS_DOUBLE = -2,
+ LS_CUSTOM = -3, LS_AT_LEAST = -4, LS_MULTIPLE = -5, LS_FIXED = -6 };
+ SpacingType lineSpacingType;
+ double lineSpacingValue() const { return lineSpacing;}
+ void setLineSpacingValue(double _value) { lineSpacing = _value;}
+
+ static QString* shadowCssCompat; // used for compat with koffice-1.2 when loading
+
+ bool joinBorder:1;
+ bool unused:7; // for future use
+ char pageBreaking; // Page breaking flags
+ char direction; // QChar::Direction
+ /// Alignment flag (AlignAuto/AlignLeft/AlignRight/AlignJustify)
+ char alignment; // Qt::AlignmentFlags
+ KoBorder leftBorder, rightBorder, topBorder, bottomBorder;
+
+ /// The background color of the paragraph
+ /**
+ * The background color is used for text that has no background color set,
+ * and for parts of the paragraph that are not covered by text.
+ * In theory anyway: the background colour isn't used in rendering text
+ * yet, but it's nice to preserve the value.
+ */
+ QColor backgroundColor;
+
+ /** can be 0 if no counter set */
+ KoParagCounter* counter;
+
+ KoParagStyle* style;
+
+ bool hasBorder() const { return topBorder.penWidth() > 0
+ || bottomBorder.penWidth() > 0
+ || leftBorder.penWidth() > 0
+ || rightBorder.penWidth() > 0; }
+
+ void setTabList( const KoTabulatorList & tabList ) { m_tabList = tabList; }
+ const KoTabulatorList& tabList() const { return m_tabList; }
+
+ //! Assignment operator for KoParagLayout
+ /** Copy a paragraph layout.
+ *
+ * If you're modifying this, you might also need to modify
+ * KoTextParag::setParagLayout
+ */
+ void operator=( const KoParagLayout & );
+
+ /** Return a set of flags showing the differences between this and 'layout' */
+ int compare( const KoParagLayout & layout ) const;
+
+ /** Save this parag layout to XML.
+ * This format is used by KWord for paragraphs, and by KPresenter+KWord for styles.
+ */
+ void saveParagLayout( QDomElement & parentElem, int alignment ) const;
+
+ /** Load this parag layout from XML.
+ * This format is used by KWord for paragraphs, and by KPresenter+KWord for styles.
+ */
+ static void loadParagLayout( KoParagLayout& layout, const QDomElement& parentElem, int docVersion = 2 );
+
+ /// Load this parag layout from Oasis XML
+ static void loadOasisParagLayout( KoParagLayout& layout, KoOasisContext& context );
+ /// Save this parag layout to Oasis XML
+ /// @param savingStyle true if this is saved as part of a user style,
+ /// false when saving a paragraph
+ /// @param gs the style where all the properties will be saved to
+ /// @param context the current context
+ void saveOasis( KoGenStyle& gs, KoSavingContext& context, bool savingStyle ) const;
+
+ /// Convert an alignment string into an alignment flag (load)
+ static Qt::AlignmentFlags loadOasisAlignment( const QCString& str );
+ /// Convert an alignment flag into an alignment string (save)
+ static QCString saveOasisAlignment( Qt::AlignmentFlags alignment );
+
+private:
+ static int getAttribute(const QDomElement &element, const char *attributeName, int defaultValue) {
+ QString value = element.attribute( attributeName );
+ return value.isNull() ? defaultValue : value.toInt();
+ }
+
+ static double getAttribute(const QDomElement &element, const char *attributeName, double defaultValue) {
+ QString value = element.attribute( attributeName );
+ return value.isNull() ? defaultValue : value.toDouble();
+ }
+
+private:
+ KoTabulatorList m_tabList;
+ double lineSpacing;
+ class Private;
+ Private *d;
+
+ /** Common setup. */
+ void initialise();
+};
+
+#endif
diff --git a/lib/kotext/KoParagStyle.cpp b/lib/kotext/KoParagStyle.cpp
new file mode 100644
index 00000000..18ffc7f9
--- /dev/null
+++ b/lib/kotext/KoParagStyle.cpp
@@ -0,0 +1,284 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "KoParagStyle.h"
+#include "KoOasisContext.h"
+#include "KoParagCounter.h"
+
+#include <KoGenStyles.h>
+#include <KoXmlWriter.h>
+#include <KoXmlNS.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+
+#include <qdom.h>
+
+KoCharStyle::KoCharStyle( const QString & name )
+ : KoUserStyle( name )
+{
+}
+
+const KoTextFormat & KoCharStyle::format() const
+{
+ return m_format;
+}
+
+KoTextFormat & KoCharStyle::format()
+{
+ return m_format;
+}
+
+///////////////////////////
+
+KoParagStyle::KoParagStyle( const QString & name )
+ : KoCharStyle( name )
+{
+ m_followingStyle = this;
+
+ // This way, KoTextParag::setParagLayout also sets the style pointer, to this style
+ m_paragLayout.style = this;
+ m_parentStyle = 0L;
+ m_inheritedParagLayoutFlag = 0;
+ m_inheritedFormatFlag = 0;
+ m_bOutline = false;
+}
+
+KoParagStyle::KoParagStyle( const KoParagStyle & rhs )
+ : KoCharStyle( rhs)
+{
+ *this = rhs;
+}
+
+KoParagStyle::~KoParagStyle()
+{
+}
+
+void KoParagStyle::operator=( const KoParagStyle &rhs )
+{
+ KoCharStyle::operator=( rhs );
+ m_paragLayout = rhs.m_paragLayout;
+ m_followingStyle = rhs.m_followingStyle;
+ m_paragLayout.style = this; // must always be "this"
+ m_parentStyle = rhs.m_parentStyle;
+ m_inheritedParagLayoutFlag = rhs.m_inheritedParagLayoutFlag;
+ m_inheritedFormatFlag = rhs.m_inheritedFormatFlag;
+ m_bOutline = rhs.m_bOutline;
+}
+
+void KoParagStyle::setFollowingStyle( KoParagStyle *fst )
+{
+ m_followingStyle = fst;
+}
+
+void KoParagStyle::saveStyle( QDomElement & parentElem )
+{
+ m_paragLayout.saveParagLayout( parentElem, m_paragLayout.alignment );
+
+ if ( followingStyle() )
+ {
+ QDomElement element = parentElem.ownerDocument().createElement( "FOLLOWING" );
+ parentElem.appendChild( element );
+ element.setAttribute( "name", followingStyle()->displayName() );
+ }
+ // TODO save parent style, and inherited flags.
+
+ parentElem.setAttribute( "outline", m_bOutline ? "true" : "false" );
+}
+
+void KoParagStyle::loadStyle( QDomElement & parentElem, int docVersion )
+{
+ KoParagLayout layout;
+ KoParagLayout::loadParagLayout( layout, parentElem, docVersion );
+
+ // This way, KoTextParag::setParagLayout also sets the style pointer, to this style
+ layout.style = this;
+ m_paragLayout = layout;
+
+ // Load name
+ QDomElement nameElem = parentElem.namedItem("NAME").toElement();
+ if ( !nameElem.isNull() ) {
+ m_name = nameElem.attribute("value");
+ m_displayName = i18n( "Style name", m_name.utf8() );
+ } else
+ kdWarning() << "No NAME tag in LAYOUT -> no name for this style!" << endl;
+
+ // The followingStyle stuff has to be done after loading all styles.
+
+ m_bOutline = parentElem.attribute( "outline" ) == "true";
+}
+
+void KoParagStyle::loadStyle( QDomElement & styleElem, KoOasisContext& context )
+{
+ // Load name
+ m_name = styleElem.attributeNS( KoXmlNS::style, "name", QString::null );
+ m_displayName = styleElem.attributeNS( KoXmlNS::style, "display-name", QString::null );
+ if ( m_displayName.isEmpty() )
+ m_displayName = m_name;
+
+ // OOo hack
+ //m_bOutline = m_name.startsWith( "Heading" );
+ // real OASIS solution:
+ m_bOutline = styleElem.hasAttributeNS( KoXmlNS::style, "default-outline-level" );
+
+ context.styleStack().save();
+ context.addStyles( &styleElem, "paragraph" ); // Load all parents - only because we don't support inheritance.
+ KoParagLayout layout;
+ KoParagLayout::loadOasisParagLayout( layout, context );
+
+ // loadOasisParagLayout doesn't load the counter. It's modelled differently for parags and for styles.
+ int level = 0;
+ bool listOK = false;
+ const QString listStyleName = styleElem.attributeNS( KoXmlNS::style, "list-style-name", QString::null );
+ if ( m_bOutline ) {
+ level = styleElem.attributeNS( KoXmlNS::style, "default-outline-level", QString::null ).toInt(); // 1-based
+ listOK = context.pushOutlineListLevelStyle( level );
+ // allow overriding the outline numbering, see http://lists.oasis-open.org/archives/office/200310/msg00033.html
+ if ( !listStyleName.isEmpty() )
+ context.pushListLevelStyle( listStyleName, level );
+ }
+ else {
+ // ######## BIG difference here. In the OOo/OASIS format, one list style has infos for 10 list levels...
+ // ###### so we can't know a level at this point...
+
+ // The only solution I can think of, to preserve document content when importing OO but
+ // not necessarily the styles used when editing, is:
+ // 1) when importing from OOo, convert each non-heading style with numbering
+ // into 10 kotext styles (at least those used by the document) [TODO]
+ // 2) for KWord's own loading/saving, to add a hack into the file format, say
+ // style:default-level.
+ // Note that default-level defaults to "1", i.e. works for non-nested OOo lists too.
+ level = styleElem.attributeNS( KoXmlNS::style, "default-level", "1" ).toInt(); // 1-based
+ listOK = !listStyleName.isEmpty();
+ if ( listOK )
+ listOK = context.pushListLevelStyle( listStyleName, level );
+ }
+ if ( listOK ) {
+ const QDomElement listStyle = context.listStyleStack().currentListStyle();
+ // The tag is either text:list-level-style-number or text:list-level-style-bullet
+ const bool ordered = listStyle.localName() == "list-level-style-number";
+ Q_ASSERT( !layout.counter );
+ layout.counter = new KoParagCounter;
+ layout.counter->loadOasis( context, -1, ordered, m_bOutline, level, true );
+ context.listStyleStack().pop();
+ }
+
+ // This way, KoTextParag::setParagLayout also sets the style pointer, to this style
+ layout.style = this;
+ m_paragLayout = layout;
+
+ m_format.load( context );
+
+ context.styleStack().restore();
+}
+
+QString KoParagStyle::saveStyle( KoGenStyles& genStyles, int styleType, const QString& parentStyleName, KoSavingContext& context ) const
+{
+ KoGenStyle gs( styleType, "paragraph", parentStyleName );
+
+ gs.addAttribute( "style:display-name", m_displayName );
+ if ( m_paragLayout.counter ) {
+ if ( m_bOutline )
+ gs.addAttribute( "style:default-outline-level", (int)m_paragLayout.counter->depth() + 1 );
+ else if ( m_paragLayout.counter->depth() )
+ // ### kword-specific attribute, see loadOasis
+ gs.addAttribute( "style:default-level", (int)m_paragLayout.counter->depth() + 1 );
+
+ if ( m_paragLayout.counter->numbering() != KoParagCounter::NUM_NONE &&
+ m_paragLayout.counter->style() != KoParagCounter::STYLE_NONE )
+ {
+ KoGenStyle listStyle( KoGenStyle::STYLE_LIST /*, no family*/ );
+ m_paragLayout.counter->saveOasis( listStyle, true );
+ // This display-name will probably look nicer in OO, but this also means
+ // no re-use possible between list styles...
+ listStyle.addAttribute( "style:display-name",
+ i18n( "Numbering Style for %1" ).arg( m_displayName ) );
+
+ QString autoListStyleName = genStyles.lookup( listStyle, "L", KoGenStyles::ForceNumbering );
+ gs.addAttribute( "style:list-style-name", autoListStyleName );
+ }
+ }
+
+ m_paragLayout.saveOasis( gs, context, true );
+
+ m_format.save( gs, context );
+
+ // try to preserve existing internal name, if it looks adequate (no spaces)
+ // ## TODO: check XML-Schemacs NCName conformity
+ bool nameIsConform = !m_name.isEmpty() && m_name.find( ' ' ) == -1;
+ QString newName;
+ if ( nameIsConform )
+ newName = genStyles.lookup( gs, m_name, KoGenStyles::DontForceNumbering );
+ else
+ newName = genStyles.lookup( gs, "U", KoGenStyles::ForceNumbering );
+ const_cast<KoParagStyle*>( this )->m_name = newName;
+ return m_name;
+}
+
+const KoParagLayout & KoParagStyle::paragLayout() const
+{
+ return m_paragLayout;
+}
+
+KoParagLayout & KoParagStyle::paragLayout()
+{
+ return m_paragLayout;
+}
+
+void KoParagStyle::propagateChanges( int paragLayoutFlag, int /*formatFlag*/ )
+{
+ if ( !m_parentStyle )
+ return;
+ if ( !(paragLayoutFlag & KoParagLayout::Alignment) )
+ m_paragLayout.alignment = m_parentStyle->paragLayout().alignment;
+ if ( !(paragLayoutFlag & KoParagLayout::Margins) )
+ for ( int i = 0 ; i < 5 ; ++i )
+ m_paragLayout.margins[i] = m_parentStyle->paragLayout().margins[i];
+ if ( !(paragLayoutFlag & KoParagLayout::LineSpacing) )
+ {
+ m_paragLayout.setLineSpacingValue(m_parentStyle->paragLayout().lineSpacingValue());
+ m_paragLayout.lineSpacingType = m_parentStyle->paragLayout().lineSpacingType;
+ }
+ if ( !(paragLayoutFlag & KoParagLayout::Borders) )
+ {
+ m_paragLayout.leftBorder = m_parentStyle->paragLayout().leftBorder;
+ m_paragLayout.rightBorder = m_parentStyle->paragLayout().rightBorder;
+ m_paragLayout.topBorder = m_parentStyle->paragLayout().topBorder;
+ m_paragLayout.bottomBorder = m_parentStyle->paragLayout().bottomBorder;
+ m_paragLayout.joinBorder = m_parentStyle->paragLayout().joinBorder;
+ }
+ if ( !(paragLayoutFlag & KoParagLayout::BulletNumber) )
+ m_paragLayout.counter = m_parentStyle->paragLayout().counter;
+ if ( !(paragLayoutFlag & KoParagLayout::Tabulator) )
+ m_paragLayout.setTabList(m_parentStyle->paragLayout().tabList());
+#if 0
+ if ( paragLayoutFlag == KoParagLayout::All )
+ {
+ setDirection( static_cast<QChar::Direction>(layout.direction) );
+ // Don't call applyStyle from here, it would overwrite any paragraph-specific settings
+ setStyle( layout.style );
+ }
+#endif
+ // TODO a flag for the "is outline" bool? Otherwise we have no way to inherit
+ // that property (and possibly reset it).
+}
+
+void KoParagStyle::setOutline( bool b )
+{
+ m_bOutline = b;
+}
diff --git a/lib/kotext/KoParagStyle.h b/lib/kotext/KoParagStyle.h
new file mode 100644
index 00000000..5b070825
--- /dev/null
+++ b/lib/kotext/KoParagStyle.h
@@ -0,0 +1,109 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOPARAGSTYLE_H
+#define KOPARAGSTYLE_H
+
+#include "KoTextFormat.h"
+#include "KoParagLayout.h"
+#include "KoUserStyle.h"
+class KoGenStyles;
+class QDomElement;
+
+/**
+ * A KoCharStyle is a set of formatting attributes (font, color, etc.)
+ * to be applied to a run of text.
+ */
+class KOTEXT_EXPORT KoCharStyle : public KoUserStyle
+{
+public:
+ /** Create a blank style (with default attributes) */
+ KoCharStyle( const QString & name );
+
+ /** Copy another style */
+ KoCharStyle( const KoCharStyle & rhs ) : KoUserStyle( QString::null ) { *this = rhs; }
+
+ /** Return a format. Don't forget to use the format collection
+ * of your KoTextDocument from the result of that method. */
+ const KoTextFormat & format() const;
+ KoTextFormat & format();
+
+protected:
+ KoTextFormat m_format;
+};
+
+/**
+ * A paragraph style is a combination of a character style
+ * and paragraph-layout attributes, all grouped under a name.
+ */
+class KOTEXT_EXPORT KoParagStyle : public KoCharStyle
+{
+public:
+ /** Create a blank style (with default attributes) */
+ KoParagStyle( const QString & name );
+
+ /** Copy another style */
+ KoParagStyle( const KoParagStyle & rhs );
+
+ ~KoParagStyle();
+
+ void operator=( const KoParagStyle & );
+
+
+ const KoParagLayout & paragLayout() const;
+ KoParagLayout & paragLayout();
+
+ KoParagStyle *followingStyle() const { return m_followingStyle; }
+ void setFollowingStyle( KoParagStyle *fst );
+
+ /// Saves the name, layout, the following style and the outline bool. Not the format.
+ /// @deprecated (1.3 format)
+ void saveStyle( QDomElement & parentElem );
+ /// Loads the name, layout and the outline bool. Not the "following style" nor the format.
+ /// (1.3 format)
+ void loadStyle( QDomElement & parentElem, int docVersion = 2 );
+
+ /// Load the style from OASIS
+ void loadStyle( QDomElement & styleElem, KoOasisContext& context );
+ /// Save the style to OASIS
+ /// Don't use, use the method in KoStyleCollection instead
+ QString saveStyle( KoGenStyles& genStyles, int styleType, const QString& parentStyleName, KoSavingContext& context ) const;
+
+ KoParagStyle * parentStyle() const {return m_parentStyle;}
+ void setParentStyle( KoParagStyle *_style){ m_parentStyle = _style;}
+
+ int inheritedParagLayoutFlag() const { return m_inheritedParagLayoutFlag; }
+ int inheritedFormatFlag() const { return m_inheritedFormatFlag; }
+
+ void propagateChanges( int paragLayoutFlag, int formatFlag );
+
+ // If true, paragraphs with this style will be included in the table of contents
+ bool isOutline() const { return m_bOutline; }
+ void setOutline( bool b );
+
+private:
+ KoParagLayout m_paragLayout;
+ KoParagStyle *m_followingStyle;
+ KoParagStyle *m_parentStyle;
+ int m_inheritedParagLayoutFlag;
+ int m_inheritedFormatFlag;
+ bool m_bOutline;
+};
+
+#endif /* KOPARAGSTYLE_H */
+
diff --git a/lib/kotext/KoRichText.cpp b/lib/kotext/KoRichText.cpp
new file mode 100644
index 00000000..f8500ec9
--- /dev/null
+++ b/lib/kotext/KoRichText.cpp
@@ -0,0 +1,1769 @@
+/****************************************************************************
+** Implementation of the internal Qt classes dealing with rich text
+**
+** Created : 990101
+**
+** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+** information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "KoRichText.h"
+#include "KoTextFormat.h"
+#include "KoTextParag.h"
+
+#include <qpaintdevicemetrics.h>
+#include "qdrawutil.h" // for KoTextHorizontalLine
+
+#include <stdlib.h>
+#include "KoParagCounter.h"
+#include "KoTextDocument.h"
+#include <kdebug.h>
+#include <kdeversion.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <private/qtextengine_p.h>
+
+//#define DEBUG_COLLECTION
+//#define DEBUG_TABLE_RENDERING
+
+//static KoTextFormatCollection *qFormatCollection = 0;
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+void KoTextDocCommandHistory::addCommand( KoTextDocCommand *cmd )
+{
+ if ( current < (int)history.count() - 1 ) {
+ QPtrList<KoTextDocCommand> commands;
+ commands.setAutoDelete( FALSE );
+
+ for( int i = 0; i <= current; ++i ) {
+ commands.insert( i, history.at( 0 ) );
+ history.take( 0 );
+ }
+
+ commands.append( cmd );
+ history.clear();
+ history = commands;
+ history.setAutoDelete( TRUE );
+ } else {
+ history.append( cmd );
+ }
+
+ if ( (int)history.count() > steps )
+ history.removeFirst();
+ else
+ ++current;
+}
+
+KoTextCursor *KoTextDocCommandHistory::undo( KoTextCursor *c )
+{
+ if ( current > -1 ) {
+ KoTextCursor *c2 = history.at( current )->unexecute( c );
+ --current;
+ return c2;
+ }
+ return 0;
+}
+
+KoTextCursor *KoTextDocCommandHistory::redo( KoTextCursor *c )
+{
+ if ( current > -1 ) {
+ if ( current < (int)history.count() - 1 ) {
+ ++current;
+ return history.at( current )->execute( c );
+ }
+ } else {
+ if ( history.count() > 0 ) {
+ ++current;
+ return history.at( current )->execute( c );
+ }
+ }
+ return 0;
+}
+
+bool KoTextDocCommandHistory::isUndoAvailable()
+{
+ return current > -1;
+}
+
+bool KoTextDocCommandHistory::isRedoAvailable()
+{
+ return current > -1 && current < (int)history.count() - 1 || current == -1 && history.count() > 0;
+}
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+KoTextDocDeleteCommand::KoTextDocDeleteCommand( KoTextDocument *d, int i, int idx, const QMemArray<KoTextStringChar> &str )
+ : KoTextDocCommand( d ), id( i ), index( idx ), parag( 0 ), text( str )
+{
+ for ( int j = 0; j < (int)text.size(); ++j ) {
+ if ( text[ j ].format() )
+ text[ j ].format()->addRef();
+ }
+}
+
+/*KoTextDocDeleteCommand::KoTextDocDeleteCommand( KoTextParag *p, int idx, const QMemArray<KoTextStringChar> &str )
+ : KoTextDocCommand( 0 ), id( -1 ), index( idx ), parag( p ), text( str )
+{
+ for ( int i = 0; i < (int)text.size(); ++i ) {
+ if ( text[ i ].format() )
+ text[ i ].format()->addRef();
+ }
+}*/
+
+KoTextDocDeleteCommand::~KoTextDocDeleteCommand()
+{
+ for ( int i = 0; i < (int)text.size(); ++i ) {
+ if ( text[ i ].format() )
+ text[ i ].format()->removeRef();
+ }
+ text.resize( 0 );
+}
+
+KoTextCursor *KoTextDocDeleteCommand::execute( KoTextCursor *c )
+{
+ KoTextParag *s = doc ? doc->paragAt( id ) : parag;
+ if ( !s ) {
+ if(doc)
+ kdWarning(32500) << "can't locate parag at " << id << ", last parag: " << doc->lastParag()->paragId() << endl;
+ return 0;
+ }
+
+ cursor.setParag( s );
+ cursor.setIndex( index );
+ int len = text.size();
+ if ( c )
+ *c = cursor;
+ if ( doc ) {
+ doc->setSelectionStart( KoTextDocument::Temp, &cursor );
+ for ( int i = 0; i < len; ++i )
+ cursor.gotoNextLetter();
+ doc->setSelectionEnd( KoTextDocument::Temp, &cursor );
+ doc->removeSelectedText( KoTextDocument::Temp, &cursor );
+ if ( c )
+ *c = cursor;
+ } else {
+ s->remove( index, len );
+ }
+
+ return c;
+}
+
+KoTextCursor *KoTextDocDeleteCommand::unexecute( KoTextCursor *c )
+{
+ KoTextParag *s = doc ? doc->paragAt( id ) : parag;
+ if ( !s ) {
+ if(doc)
+ kdWarning(32500) << "can't locate parag at " << id << ", last parag: " << doc->lastParag()->paragId() << endl;
+ return 0;
+ }
+
+ cursor.setParag( s );
+ cursor.setIndex( index );
+ QString str = KoTextString::toString( text );
+ cursor.insert( str, TRUE, &text );
+ cursor.setParag( s );
+ cursor.setIndex( index );
+ if ( c ) {
+ c->setParag( s );
+ c->setIndex( index );
+ for ( int i = 0; i < (int)text.size(); ++i )
+ c->gotoNextLetter();
+ }
+
+ s = cursor.parag();
+ while ( s ) {
+ s->format();
+ s->setChanged( TRUE );
+ if ( c && s == c->parag() )
+ break;
+ s = s->next();
+ }
+
+ return &cursor;
+}
+
+KoTextDocFormatCommand::KoTextDocFormatCommand( KoTextDocument *d, int sid, int sidx, int eid, int eidx,
+ const QMemArray<KoTextStringChar> &old, const KoTextFormat *f, int fl )
+ : KoTextDocCommand( d ), startId( sid ), startIndex( sidx ), endId( eid ), endIndex( eidx ), oldFormats( old ), flags( fl )
+{
+ format = d->formatCollection()->format( f );
+ for ( int j = 0; j < (int)oldFormats.size(); ++j ) {
+ if ( oldFormats[ j ].format() )
+ oldFormats[ j ].format()->addRef();
+ }
+}
+
+KoTextDocFormatCommand::~KoTextDocFormatCommand()
+{
+ format->removeRef();
+ for ( int j = 0; j < (int)oldFormats.size(); ++j ) {
+ if ( oldFormats[ j ].format() )
+ oldFormats[ j ].format()->removeRef();
+ }
+}
+
+KoTextCursor *KoTextDocFormatCommand::execute( KoTextCursor *c )
+{
+ KoTextParag *sp = doc->paragAt( startId );
+ KoTextParag *ep = doc->paragAt( endId );
+ if ( !sp || !ep )
+ return c;
+
+ KoTextCursor start( doc );
+ start.setParag( sp );
+ start.setIndex( startIndex );
+ KoTextCursor end( doc );
+ end.setParag( ep );
+ end.setIndex( endIndex );
+
+ doc->setSelectionStart( KoTextDocument::Temp, &start );
+ doc->setSelectionEnd( KoTextDocument::Temp, &end );
+ doc->setFormat( KoTextDocument::Temp, format, flags );
+ doc->removeSelection( KoTextDocument::Temp );
+ if ( endIndex == ep->length() ) // ### Not in QRT - report sent. Description at http://bugs.kde.org/db/34/34556.html
+ end.gotoLeft();
+ *c = end;
+ return c;
+}
+
+KoTextCursor *KoTextDocFormatCommand::unexecute( KoTextCursor *c )
+{
+ KoTextParag *sp = doc->paragAt( startId );
+ KoTextParag *ep = doc->paragAt( endId );
+ if ( !sp || !ep )
+ return 0;
+
+ int idx = startIndex;
+ int fIndex = 0;
+ if( !oldFormats.isEmpty()) // ## not in QRT. Not sure how it can happen.
+ {
+ for ( ;; ) {
+ if ( oldFormats.at( fIndex ).c == '\n' ) {
+ if ( idx > 0 ) {
+ if ( idx < sp->length() && fIndex > 0 )
+ sp->setFormat( idx, 1, oldFormats.at( fIndex - 1 ).format() );
+ if ( sp == ep )
+ break;
+ sp = sp->next();
+ idx = 0;
+ }
+ fIndex++;
+ }
+ if ( oldFormats.at( fIndex ).format() )
+ sp->setFormat( idx, 1, oldFormats.at( fIndex ).format() );
+ idx++;
+ fIndex++;
+ if ( fIndex >= (int)oldFormats.size() )
+ break;
+ if ( idx >= sp->length() ) {
+ if ( sp == ep )
+ break;
+ sp = sp->next();
+ idx = 0;
+ }
+ }
+ }
+ KoTextCursor end( doc );
+ end.setParag( ep );
+ end.setIndex( endIndex );
+ if ( endIndex == ep->length() )
+ end.gotoLeft();
+ *c = end;
+ return c;
+}
+
+KoTextAlignmentCommand::KoTextAlignmentCommand( KoTextDocument *d, int fParag, int lParag, int na, const QMemArray<int> &oa )
+ : KoTextDocCommand( d ), firstParag( fParag ), lastParag( lParag ), newAlign( na ), oldAligns( oa )
+{
+}
+
+KoTextCursor *KoTextAlignmentCommand::execute( KoTextCursor *c )
+{
+ KoTextParag *p = doc->paragAt( firstParag );
+ if ( !p )
+ return c;
+ while ( p ) {
+ p->setAlignment( newAlign );
+ if ( p->paragId() == lastParag )
+ break;
+ p = p->next();
+ }
+ return c;
+}
+
+KoTextCursor *KoTextAlignmentCommand::unexecute( KoTextCursor *c )
+{
+ KoTextParag *p = doc->paragAt( firstParag );
+ if ( !p )
+ return c;
+ int i = 0;
+ while ( p ) {
+ if ( i < (int)oldAligns.size() )
+ p->setAlignment( oldAligns.at( i ) );
+ if ( p->paragId() == lastParag )
+ break;
+ p = p->next();
+ ++i;
+ }
+ return c;
+}
+
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+KoTextCursor::KoTextCursor( KoTextDocument *d )
+ : doc( d )
+{
+ idx = 0;
+ string = doc ? doc->firstParag() : 0;
+ tmpIndex = -1;
+}
+
+KoTextCursor::KoTextCursor()
+{
+}
+
+KoTextCursor::KoTextCursor( const KoTextCursor &c )
+{
+ doc = c.doc;
+ idx = c.idx;
+ string = c.string;
+ tmpIndex = c.tmpIndex;
+}
+
+KoTextCursor &KoTextCursor::operator=( const KoTextCursor &c )
+{
+ doc = c.doc;
+ idx = c.idx;
+ string = c.string;
+ tmpIndex = c.tmpIndex;
+
+ return *this;
+}
+
+bool KoTextCursor::operator==( const KoTextCursor &c ) const
+{
+ return doc == c.doc && string == c.string && idx == c.idx;
+}
+
+void KoTextCursor::insert( const QString &str, bool checkNewLine, QMemArray<KoTextStringChar> *formatting )
+{
+ string->invalidate( idx );
+ tmpIndex = -1;
+ bool justInsert = TRUE;
+ QString s( str );
+#if defined(Q_WS_WIN)
+ if ( checkNewLine )
+ s = s.replace( QRegExp( "\\r" ), "" );
+#endif
+ if ( checkNewLine )
+ justInsert = s.find( '\n' ) == -1;
+ if ( justInsert ) {
+ string->insert( idx, s );
+ if ( formatting ) {
+ for ( int i = 0; i < (int)s.length(); ++i ) {
+ if ( formatting->at( i ).format() ) {
+ formatting->at( i ).format()->addRef();
+ string->string()->setFormat( idx + i, formatting->at( i ).format(), TRUE );
+ }
+ }
+ }
+ idx += s.length();
+ } else {
+ QStringList lst = QStringList::split( '\n', s, TRUE );
+ QStringList::Iterator it = lst.begin();
+ //int y = string->rect().y() + string->rect().height();
+ int lastIndex = 0;
+ KoTextFormat *lastFormat = 0;
+ for ( ; it != lst.end(); ) {
+ if ( it != lst.begin() ) {
+ splitAndInsertEmptyParag( FALSE, TRUE );
+ //string->setEndState( -1 );
+#if 0 // no!
+ string->prev()->format( -1, FALSE );
+#endif
+ if ( lastFormat && formatting && string->prev() ) {
+ lastFormat->addRef();
+ string->prev()->string()->setFormat( string->prev()->length() - 1, lastFormat, TRUE );
+ }
+ }
+ lastFormat = 0;
+ QString s = *it;
+ ++it;
+ if ( !s.isEmpty() )
+ string->insert( idx, s );
+ else
+ string->invalidate( 0 );
+
+ if ( formatting ) {
+ int len = s.length();
+ for ( int i = 0; i < len; ++i ) {
+ if ( formatting->at( i + lastIndex ).format() ) {
+ formatting->at( i + lastIndex ).format()->addRef();
+ string->string()->setFormat( i + idx, formatting->at( i + lastIndex ).format(), TRUE );
+ }
+ }
+ if ( it != lst.end() )
+ lastFormat = formatting->at( len + lastIndex ).format();
+ ++len;
+ lastIndex += len;
+ }
+
+ idx += s.length();
+ }
+#if 0 //// useless and wrong. We'll format things and move them down correctly in KoTextObject::insert().
+ string->format( -1, FALSE );
+ int dy = string->rect().y() + string->rect().height() - y;
+#endif
+ KoTextParag *p = string;
+ p->setParagId( p->prev()->paragId() + 1 );
+ p = p->next();
+ while ( p ) {
+ p->setParagId( p->prev()->paragId() + 1 );
+ //p->move( dy );
+ p->invalidate( 0 );
+ p = p->next();
+ }
+ }
+
+#if 0 //// useless and slow
+ int h = string->rect().height();
+ string->format( -1, TRUE );
+#endif
+ fixCursorPosition();
+}
+
+void KoTextCursor::gotoLeft()
+{
+ if ( string->string()->isRightToLeft() )
+ gotoNextLetter();
+ else
+ gotoPreviousLetter();
+}
+
+void KoTextCursor::gotoPreviousLetter()
+{
+ tmpIndex = -1;
+
+ if ( idx > 0 ) {
+ idx = string->string()->previousCursorPosition( idx );
+ } else if ( string->prev() ) {
+ string = string->prev();
+ while ( !string->isVisible() )
+ string = string->prev();
+ idx = string->length() - 1;
+ }
+}
+
+bool KoTextCursor::place( const QPoint &p, KoTextParag *s, bool link, int *customItemIndex )
+{
+ if ( customItemIndex )
+ *customItemIndex = -1;
+ QPoint pos( p );
+ QRect r;
+ if ( pos.y() < s->rect().y() )
+ pos.setY( s->rect().y() );
+ while ( s ) {
+ r = s->rect();
+ r.setWidth( doc ? doc->width() : QWIDGETSIZE_MAX );
+ if ( !s->next() || ( pos.y() >= r.y() && pos.y() < s->next()->rect().y() ) )
+ break;
+ s = s->next();
+ }
+
+ if ( !s )
+ return FALSE;
+
+ setParag( s, FALSE );
+ int y = s->rect().y();
+ int lines = s->lines();
+ KoTextStringChar *chr = 0;
+ int index = 0;
+ int i = 0;
+ int cy = 0;
+ //int ch = 0;
+ for ( ; i < lines; ++i ) {
+ chr = s->lineStartOfLine( i, &index );
+ cy = s->lineY( i );
+ //ch = s->lineHeight( i );
+ if ( !chr )
+ return FALSE;
+ if ( i < lines - 1 && pos.y() >= y + cy && pos.y() <= y + s->lineY( i+1 ) )
+ break;
+ }
+ int nextLine;
+ if ( i < lines - 1 )
+ s->lineStartOfLine( i+1, &nextLine );
+ else
+ nextLine = s->length();
+ i = index;
+ int x = s->rect().x();
+ if ( pos.x() < x )
+ pos.setX( x + 1 );
+ int cw;
+ int curpos = s->length()-1;
+ int dist = 10000000;
+ while ( i < nextLine ) {
+ chr = s->at(i);
+ int cpos = x + chr->x;
+ cw = chr->width; //s->string()->width( i );
+ if ( chr->isCustom() ) {
+ if ( pos.x() >= cpos && pos.x() <= cpos + cw &&
+ pos.y() >= y + cy && pos.y() <= y + cy + chr->height() ) {
+ if ( customItemIndex )
+ *customItemIndex = i;
+ }
+ }
+ if( chr->rightToLeft )
+ cpos += cw;
+ int d = cpos - pos.x();
+ bool dm = d < 0 ? !chr->rightToLeft : chr->rightToLeft;
+ if ( (QABS( d ) < dist || (dist == d && dm == TRUE )) && string->string()->validCursorPosition( i ) ) {
+ dist = QABS( d );
+ if ( !link || pos.x() >= x + chr->x ) {
+ curpos = i;
+ }
+ }
+ i++;
+ }
+ setIndex( curpos, FALSE );
+
+ return TRUE;
+}
+
+void KoTextCursor::gotoRight()
+{
+ if ( string->string()->isRightToLeft() )
+ gotoPreviousLetter();
+ else
+ gotoNextLetter();
+}
+
+void KoTextCursor::gotoNextLetter()
+{
+ tmpIndex = -1;
+
+ int len = string->length() - 1;
+ if ( idx < len ) {
+ idx = string->string()->nextCursorPosition( idx );
+ } else if ( string->next() ) {
+ string = string->next();
+ while ( !string->isVisible() )
+ string = string->next();
+ idx = 0;
+ }
+}
+
+void KoTextCursor::gotoUp()
+{
+ int indexOfLineStart;
+ int line;
+ KoTextStringChar *c = string->lineStartOfChar( idx, &indexOfLineStart, &line );
+ if ( !c )
+ return;
+
+ tmpIndex = QMAX( tmpIndex, idx - indexOfLineStart );
+ if ( indexOfLineStart == 0 ) {
+ if ( !string->prev() ) {
+ return;
+ }
+ string = string->prev();
+ while ( !string->isVisible() )
+ string = string->prev();
+ int lastLine = string->lines() - 1;
+ if ( !string->lineStartOfLine( lastLine, &indexOfLineStart ) )
+ return;
+ if ( indexOfLineStart + tmpIndex < string->length() )
+ idx = indexOfLineStart + tmpIndex;
+ else
+ idx = string->length() - 1;
+ } else {
+ --line;
+ int oldIndexOfLineStart = indexOfLineStart;
+ if ( !string->lineStartOfLine( line, &indexOfLineStart ) )
+ return;
+ if ( indexOfLineStart + tmpIndex < oldIndexOfLineStart )
+ idx = indexOfLineStart + tmpIndex;
+ else
+ idx = oldIndexOfLineStart - 1;
+ }
+ fixCursorPosition();
+}
+
+void KoTextCursor::gotoDown()
+{
+ int indexOfLineStart;
+ int line;
+ KoTextStringChar *c = string->lineStartOfChar( idx, &indexOfLineStart, &line );
+ if ( !c )
+ return;
+
+ tmpIndex = QMAX( tmpIndex, idx - indexOfLineStart );
+ if ( line == string->lines() - 1 ) {
+ if ( !string->next() ) {
+ return;
+ }
+ string = string->next();
+ while ( !string->isVisible() )
+ string = string->next();
+ if ( !string->lineStartOfLine( 0, &indexOfLineStart ) )
+ return;
+ int end;
+ if ( string->lines() == 1 )
+ end = string->length();
+ else
+ string->lineStartOfLine( 1, &end );
+ if ( indexOfLineStart + tmpIndex < end )
+ idx = indexOfLineStart + tmpIndex;
+ else
+ idx = end - 1;
+ } else {
+ ++line;
+ int end;
+ if ( line == string->lines() - 1 )
+ end = string->length();
+ else
+ string->lineStartOfLine( line + 1, &end );
+ if ( !string->lineStartOfLine( line, &indexOfLineStart ) )
+ return;
+ if ( indexOfLineStart + tmpIndex < end )
+ idx = indexOfLineStart + tmpIndex;
+ else
+ idx = end - 1;
+ }
+ fixCursorPosition();
+}
+
+void KoTextCursor::gotoLineEnd()
+{
+ tmpIndex = -1;
+ int indexOfLineStart;
+ int line;
+ KoTextStringChar *c = string->lineStartOfChar( idx, &indexOfLineStart, &line );
+ if ( !c )
+ return;
+
+ if ( line == string->lines() - 1 ) {
+ idx = string->length() - 1;
+ } else {
+ c = string->lineStartOfLine( ++line, &indexOfLineStart );
+ indexOfLineStart--;
+ idx = indexOfLineStart;
+ }
+}
+
+void KoTextCursor::gotoLineStart()
+{
+ tmpIndex = -1;
+ int indexOfLineStart;
+ int line;
+ KoTextStringChar *c = string->lineStartOfChar( idx, &indexOfLineStart, &line );
+ if ( !c )
+ return;
+
+ idx = indexOfLineStart;
+}
+
+void KoTextCursor::gotoHome()
+{
+ tmpIndex = -1;
+ if ( doc )
+ string = doc->firstParag();
+ idx = 0;
+}
+
+void KoTextCursor::gotoEnd()
+{
+ // This can happen in a no-auto-resize frame with overflowing contents.
+ // Don't prevent going to the end of the text, even if it's not visible.
+ //if ( doc && !doc->lastParag()->isValid() )
+ //{
+// kdDebug(32500) << "Last parag, " << doc->lastParag()->paragId() << ", is invalid - aborting gotoEnd() !" << endl;
+// return;
+// }
+
+ tmpIndex = -1;
+ if ( doc )
+ string = doc->lastParag();
+ idx = string->length() - 1;
+}
+
+void KoTextCursor::gotoPageUp( int visibleHeight )
+{
+ tmpIndex = -1;
+ KoTextParag *s = string;
+ int h = visibleHeight;
+ int y = s->rect().y();
+ while ( s ) {
+ if ( y - s->rect().y() >= h )
+ break;
+ s = s->prev();
+ }
+
+ if ( !s && doc )
+ s = doc->firstParag();
+
+ string = s;
+ idx = 0;
+}
+
+void KoTextCursor::gotoPageDown( int visibleHeight )
+{
+ tmpIndex = -1;
+ KoTextParag *s = string;
+ int h = visibleHeight;
+ int y = s->rect().y();
+ while ( s ) {
+ if ( s->rect().y() - y >= h )
+ break;
+ s = s->next();
+ }
+
+ if ( !s && doc ) {
+ s = doc->lastParag();
+ string = s;
+ idx = string->length() - 1;
+ return;
+ }
+
+ if ( !s->isValid() )
+ return;
+
+ string = s;
+ idx = 0;
+}
+
+void KoTextCursor::gotoWordRight()
+{
+ if ( string->string()->isRightToLeft() )
+ gotoPreviousWord();
+ else
+ gotoNextWord();
+}
+
+void KoTextCursor::gotoWordLeft()
+{
+ if ( string->string()->isRightToLeft() )
+ gotoNextWord();
+ else
+ gotoPreviousWord();
+}
+
+void KoTextCursor::gotoPreviousWord()
+{
+ gotoPreviousLetter();
+ tmpIndex = -1;
+ KoTextString *s = string->string();
+ bool allowSame = FALSE;
+ if ( idx == ( (int)s->length()-1 ) )
+ return;
+ for ( int i = idx; i >= 0; --i ) {
+ if ( s->at( i ).c.isSpace() || s->at( i ).c == '\t' || s->at( i ).c == '.' ||
+ s->at( i ).c == ',' || s->at( i ).c == ':' || s->at( i ).c == ';' ) {
+ if ( !allowSame )
+ continue;
+ idx = i + 1;
+ return;
+ }
+ if ( !allowSame && !( s->at( i ).c.isSpace() || s->at( i ).c == '\t' || s->at( i ).c == '.' ||
+ s->at( i ).c == ',' || s->at( i ).c == ':' || s->at( i ).c == ';' ) )
+ allowSame = TRUE;
+ }
+ idx = 0;
+}
+
+void KoTextCursor::gotoNextWord()
+{
+ tmpIndex = -1;
+ KoTextString *s = string->string();
+ bool allowSame = FALSE;
+ for ( int i = idx; i < (int)s->length(); ++i ) {
+ if ( ! ( s->at( i ).c.isSpace() || s->at( i ).c == '\t' || s->at( i ).c == '.' ||
+ s->at( i ).c == ',' || s->at( i ).c == ':' || s->at( i ).c == ';' ) ) {
+ if ( !allowSame )
+ continue;
+ idx = i;
+ return;
+ }
+ if ( !allowSame && ( s->at( i ).c.isSpace() || s->at( i ).c == '\t' || s->at( i ).c == '.' ||
+ s->at( i ).c == ',' || s->at( i ).c == ':' || s->at( i ).c == ';' ) )
+ allowSame = TRUE;
+ }
+
+ if ( idx < ((int)s->length()-1) ) {
+ gotoLineEnd();
+ } else if ( string->next() ) {
+ string = string->next();
+ while ( !string->isVisible() )
+ string = string->next();
+ idx = 0;
+ } else {
+ gotoLineEnd();
+ }
+}
+
+bool KoTextCursor::atParagStart() const
+{
+ return idx == 0;
+}
+
+bool KoTextCursor::atParagEnd() const
+{
+ return idx == string->length() - 1;
+}
+
+void KoTextCursor::splitAndInsertEmptyParag( bool ind, bool updateIds )
+{
+ if ( !doc )
+ return;
+ tmpIndex = -1;
+ KoTextFormat *f = 0;
+ if ( doc->useFormatCollection() ) {
+ f = string->at( idx )->format();
+ if ( idx == string->length() - 1 && idx > 0 )
+ f = string->at( idx - 1 )->format();
+ if ( f->isMisspelled() ) {
+ KoTextFormat fNoMisspelled( *f );
+ fNoMisspelled.setMisspelled( false );
+ f = doc->formatCollection()->format( &fNoMisspelled );
+ }
+ }
+
+ if ( atParagEnd() ) {
+ KoTextParag *n = string->next();
+ KoTextParag *s = doc->createParag( doc, string, n, updateIds );
+ if ( f )
+ s->setFormat( 0, 1, f, TRUE );
+ s->copyParagData( string );
+#if 0
+ if ( ind ) {
+ int oi, ni;
+ s->indent( &oi, &ni );
+ string = s;
+ idx = ni;
+ } else
+#endif
+ {
+ string = s;
+ idx = 0;
+ }
+ } else if ( atParagStart() ) {
+ KoTextParag *p = string->prev();
+ KoTextParag *s = doc->createParag( doc, p, string, updateIds );
+ if ( f )
+ s->setFormat( 0, 1, f, TRUE );
+ s->copyParagData( string );
+ if ( ind ) {
+ //s->indent();
+ s->format();
+ //indent();
+ string->format();
+ }
+ } else {
+ QString str = string->string()->toString().mid( idx, 0xFFFFFF );
+ KoTextParag *n = string->next();
+ KoTextParag *s = doc->createParag( doc, string, n, updateIds );
+ s->copyParagData( string );
+ s->remove( 0, 1 );
+ s->append( str, TRUE );
+ for ( uint i = 0; i < str.length(); ++i ) {
+ KoTextStringChar* tsc = string->at( idx + i );
+ s->setFormat( i, 1, tsc->format(), TRUE );
+ if ( tsc->isCustom() ) {
+ KoTextCustomItem * item = tsc->customItem();
+ s->at( i )->setCustomItem( item );
+ tsc->loseCustomItem();
+#if 0
+ s->addCustomItem();
+ string->removeCustomItem();
+#endif
+ doc->unregisterCustomItem( item, string );
+ doc->registerCustomItem( item, s );
+ }
+ }
+ string->truncate( idx );
+#if 0
+ if ( ind ) {
+ int oi, ni;
+ s->indent( &oi, &ni );
+ string = s;
+ idx = ni;
+ } else
+#endif
+ {
+ string = s;
+ idx = 0;
+ }
+ }
+}
+
+bool KoTextCursor::removePreviousChar()
+{
+ tmpIndex = -1;
+ if ( !atParagStart() ) {
+ string->remove( idx-1, 1 );
+ idx--;
+ // shouldn't be needed, just to make sure.
+ fixCursorPosition();
+ string->format( -1, TRUE );
+ //else if ( string->document() && string->document()->parent() )
+ // string->document()->nextDoubleBuffered = TRUE;
+ return FALSE;
+ } else if ( string->prev() ) {
+ string = string->prev();
+ string->join( string->next() );
+ string->invalidateCounters();
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool KoTextCursor::remove()
+{
+ tmpIndex = -1;
+ if ( !atParagEnd() ) {
+ int next = string->string()->nextCursorPosition( idx );
+ string->remove( idx, next-idx );
+ string->format( -1, TRUE );
+ //else if ( doc && doc->parent() )
+ // doc->nextDoubleBuffered = TRUE;
+ return FALSE;
+ } else if ( string->next() ) {
+ if ( string->length() == 1 ) {
+ string->next()->setPrev( string->prev() );
+ if ( string->prev() )
+ string->prev()->setNext( string->next() );
+ KoTextParag *p = string->next();
+ delete string;
+ string = p;
+ string->invalidate( 0 );
+ //// kotext
+ string->invalidateCounters();
+ ////
+ KoTextParag *s = string;
+ while ( s ) {
+ s->id = s->p ? s->p->id + 1 : 0;
+ //s->state = -1;
+ //s->needPreProcess = TRUE;
+ s->changed = TRUE;
+ s = s->n;
+ }
+ string->format();
+ } else {
+ string->join( string->next() );
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void KoTextCursor::killLine()
+{
+ if ( atParagEnd() )
+ return;
+ string->remove( idx, string->length() - idx - 1 );
+ string->format( -1, TRUE );
+ //else if ( doc && doc->parent() )
+ //doc->nextDoubleBuffered = TRUE;
+}
+
+#if 0
+void KoTextCursor::indent()
+{
+ int oi = 0, ni = 0;
+ string->indent( &oi, &ni );
+ if ( oi == ni )
+ return;
+
+ if ( idx >= oi )
+ idx += ni - oi;
+ else
+ idx = ni;
+}
+#endif
+
+void KoTextCursor::setDocument( KoTextDocument *d )
+{
+ doc = d;
+ string = d->firstParag();
+ idx = 0;
+ tmpIndex = -1;
+}
+
+
+int KoTextCursor::x() const
+{
+ KoTextStringChar *c = string->at( idx );
+ int curx = c->x;
+ if ( c->rightToLeft )
+ curx += c->width; //string->string()->width( idx );
+ return curx;
+}
+
+int KoTextCursor::y() const
+{
+ int dummy, line;
+ string->lineStartOfChar( idx, &dummy, &line );
+ return string->lineY( line );
+}
+
+
+void KoTextCursor::fixCursorPosition()
+{
+ // searches for the closest valid cursor position
+ if ( string->string()->validCursorPosition( idx ) )
+ return;
+
+ int lineIdx;
+ KoTextStringChar *start = string->lineStartOfChar( idx, &lineIdx, 0 );
+ int x = string->string()->at( idx ).x;
+ int diff = QABS(start->x - x);
+ int best = lineIdx;
+
+ KoTextStringChar *c = start;
+ ++c;
+
+ KoTextStringChar *end = &string->string()->at( string->length()-1 );
+ while ( c <= end && !c->lineStart ) {
+ int xp = c->x;
+ if ( c->rightToLeft )
+ xp += c->pixelwidth; //string->string()->width( lineIdx + (c-start) );
+ int ndiff = QABS(xp - x);
+ if ( ndiff < diff && string->string()->validCursorPosition(lineIdx + (c-start)) ) {
+ diff = ndiff;
+ best = lineIdx + (c-start);
+ }
+ ++c;
+ }
+ idx = best;
+}
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+KoTextString::KoTextString()
+{
+ bidiDirty = TRUE;
+ bNeedsSpellCheck = true;
+ bidi = FALSE;
+ rightToLeft = FALSE;
+ dir = QChar::DirON;
+}
+
+KoTextString::KoTextString( const KoTextString &s )
+{
+ bidiDirty = s.bidiDirty;
+ bNeedsSpellCheck = s.bNeedsSpellCheck;
+ bidi = s.bidi;
+ rightToLeft = s.rightToLeft;
+ dir = s.dir;
+ data = s.data;
+ data.detach();
+ for ( int i = 0; i < (int)data.size(); ++i ) {
+ KoTextFormat *f = data[i].format();
+ if ( f )
+ f->addRef();
+ }
+}
+
+void KoTextString::insert( int index, const QString &s, KoTextFormat *f )
+{
+ int os = data.size();
+ data.resize( data.size() + s.length() );
+ if ( index < os ) {
+ memmove( data.data() + index + s.length(), data.data() + index,
+ sizeof( KoTextStringChar ) * ( os - index ) );
+ }
+ for ( int i = 0; i < (int)s.length(); ++i ) {
+ KoTextStringChar &ch = data[ (int)index + i ];
+ ch.x = 0;
+ ch.pixelxadj = 0;
+ ch.pixelwidth = 0;
+ ch.width = 0;
+ ch.lineStart = 0;
+ ch.d.format = 0;
+ ch.type = KoTextStringChar::Regular;
+ ch.rightToLeft = 0;
+ ch.startOfRun = 0;
+ ch.c = s[ i ];
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << "KoTextString::insert setting format " << f << " to character " << (int)index+i << endl;
+#endif
+ ch.setFormat( f );
+ }
+ bidiDirty = TRUE;
+ bNeedsSpellCheck = true;
+}
+
+KoTextString::~KoTextString()
+{
+ clear();
+}
+
+void KoTextString::insert( int index, KoTextStringChar *c )
+{
+ int os = data.size();
+ data.resize( data.size() + 1 );
+ if ( index < os ) {
+ memmove( data.data() + index + 1, data.data() + index,
+ sizeof( KoTextStringChar ) * ( os - index ) );
+ }
+ KoTextStringChar &ch = data[ (int)index ];
+ ch.c = c->c;
+ ch.x = 0;
+ ch.pixelxadj = 0;
+ ch.pixelwidth = 0;
+ ch.width = 0;
+ ch.lineStart = 0;
+ ch.rightToLeft = 0;
+ ch.d.format = 0;
+ ch.type = KoTextStringChar::Regular;
+ ch.setFormat( c->format() );
+ bidiDirty = TRUE;
+ bNeedsSpellCheck = true;
+}
+
+void KoTextString::truncate( int index )
+{
+ index = QMAX( index, 0 );
+ index = QMIN( index, (int)data.size() - 1 );
+ if ( index < (int)data.size() ) {
+ for ( int i = index + 1; i < (int)data.size(); ++i ) {
+ KoTextStringChar &ch = data[ i ];
+ if ( ch.isCustom() ) {
+ delete ch.customItem();
+ if ( ch.d.custom->format )
+ ch.d.custom->format->removeRef();
+ delete ch.d.custom;
+ ch.d.custom = 0;
+ } else if ( ch.format() ) {
+ ch.format()->removeRef();
+ }
+ }
+ }
+ data.truncate( index );
+ bidiDirty = TRUE;
+ bNeedsSpellCheck = true;
+}
+
+void KoTextString::remove( int index, int len )
+{
+ for ( int i = index; i < (int)data.size() && i - index < len; ++i ) {
+ KoTextStringChar &ch = data[ i ];
+ if ( ch.isCustom() ) {
+ delete ch.customItem();
+ if ( ch.d.custom->format )
+ ch.d.custom->format->removeRef();
+ delete ch.d.custom;
+ ch.d.custom = 0;
+ } else if ( ch.format() ) {
+ ch.format()->removeRef();
+ }
+ }
+ memmove( data.data() + index, data.data() + index + len,
+ sizeof( KoTextStringChar ) * ( data.size() - index - len ) );
+ data.resize( data.size() - len, QGArray::SpeedOptim );
+ bidiDirty = TRUE;
+ bNeedsSpellCheck = true;
+}
+
+void KoTextString::clear()
+{
+ for ( int i = 0; i < (int)data.count(); ++i ) {
+ KoTextStringChar &ch = data[ i ];
+ if ( ch.isCustom() ) {
+ // Can't do that here, no access to the doc. See ~KoTextParag instead.
+ // However clear() is also called by operator=, many times in kotextobject.cc...
+ // Hopefully not with customitems in there...
+ //if ( doc )
+ // doc->unregisterCustomItem( ch->customItem(), this );
+
+ delete ch.customItem();
+ if ( ch.d.custom->format )
+ ch.d.custom->format->removeRef();
+ delete ch.d.custom;
+ ch.d.custom = 0;
+
+ } else if ( ch.format() ) {
+ ch.format()->removeRef();
+ }
+ }
+ data.resize( 0 );
+}
+
+void KoTextString::setFormat( int index, KoTextFormat *f, bool useCollection, bool setFormatAgain )
+{
+ KoTextStringChar &ch = data[ index ];
+// kdDebug(32500) << "KoTextString::setFormat index=" << index << " f=" << f << endl;
+ if ( useCollection && ch.format() )
+ {
+ //kdDebug(32500) << "KoTextString::setFormat removing ref on old format " << ch.format() << endl;
+ ch.format()->removeRef();
+ }
+ ch.setFormat( f, setFormatAgain );
+}
+
+void KoTextString::checkBidi() const
+{
+ KoTextString *that = (KoTextString *)this;
+ that->bidiDirty = FALSE;
+ int length = data.size();
+ if ( !length ) {
+ that->bidi = FALSE;
+ that->rightToLeft = dir == QChar::DirR;
+ return;
+ }
+ const KoTextStringChar *start = data.data();
+ const KoTextStringChar *end = start + length;
+
+ // determines the properties we need for layouting
+ QTextEngine textEngine( toString(), 0 );
+ textEngine.direction = (QChar::Direction) dir;
+ textEngine.itemize(QTextEngine::SingleLine);
+ const QCharAttributes *ca = textEngine.attributes() + length-1;
+ KoTextStringChar *ch = (KoTextStringChar *)end - 1;
+ QScriptItem *item = &textEngine.items[textEngine.items.size()-1];
+ unsigned char bidiLevel = item->analysis.bidiLevel;
+ if ( bidiLevel )
+ that->bidi = TRUE;
+ int pos = length-1;
+ while ( ch >= start ) {
+ if ( item->position > pos ) {
+ --item;
+ Q_ASSERT( item >= &textEngine.items[0] );
+ Q_ASSERT( item < &textEngine.items[textEngine.items.size()] );
+ bidiLevel = item->analysis.bidiLevel;
+ if ( bidiLevel )
+ that->bidi = TRUE;
+ }
+ ch->softBreak = ca->softBreak;
+ ch->whiteSpace = ca->whiteSpace;
+ ch->charStop = ca->charStop;
+ ch->wordStop = ca->wordStop;
+ //ch->bidiLevel = bidiLevel;
+ ch->rightToLeft = (bidiLevel%2);
+ --ch;
+ --ca;
+ --pos;
+ }
+
+ if ( dir == QChar::DirR ) {
+ that->bidi = TRUE;
+ that->rightToLeft = TRUE;
+ } else if ( dir == QChar::DirL ) {
+ that->rightToLeft = FALSE;
+ } else {
+ that->rightToLeft = (textEngine.direction == QChar::DirR);
+ }
+}
+
+QMemArray<KoTextStringChar> KoTextString::subString( int start, int len ) const
+{
+ if ( len == 0xFFFFFF )
+ len = data.size();
+ QMemArray<KoTextStringChar> a;
+ a.resize( len );
+ for ( int i = 0; i < len; ++i ) {
+ KoTextStringChar *c = &data[ i + start ];
+ a[ i ].c = c->c;
+ a[ i ].x = 0;
+ a[ i ].pixelxadj = 0;
+ a[ i ].pixelwidth = 0;
+ a[ i ].width = 0;
+ a[ i ].lineStart = 0;
+ a[ i ].rightToLeft = 0;
+ a[ i ].d.format = 0;
+ a[ i ].type = KoTextStringChar::Regular;
+ a[ i ].setFormat( c->format() );
+ if ( c->format() )
+ c->format()->addRef();
+ }
+ return a;
+}
+
+QString KoTextString::mid( int start, int len ) const
+{
+ if ( len == 0xFFFFFF )
+ len = data.size();
+ QString res;
+ res.setLength( len );
+ for ( int i = 0; i < len; ++i ) {
+ KoTextStringChar *c = &data[ i + start ];
+ res[ i ] = c->c;
+ }
+ return res;
+}
+
+QString KoTextString::toString( const QMemArray<KoTextStringChar> &data )
+{
+ QString s;
+ int l = data.size();
+ s.setUnicode( 0, l );
+ KoTextStringChar *c = data.data();
+ QChar *uc = (QChar *)s.unicode();
+ while ( l-- ) {
+ *uc = c->c;
+ uc++;
+ c++;
+ }
+
+ return s;
+}
+
+QString KoTextString::toReverseString() const
+{
+ QString s;
+ int l = length();
+ s.setUnicode(0, l);
+ KoTextStringChar *c = data.data() + (l-1);
+ QChar *uc = (QChar *)s.unicode();
+ while ( l-- ) {
+ *uc = c->c;
+ uc++;
+ c--;
+ }
+
+ return s;
+}
+
+QString KoTextString::stringToSpellCheck()
+{
+ if ( !bNeedsSpellCheck )
+ return QString::null;
+
+ bNeedsSpellCheck = false;
+ if ( length() <= 1 )
+ return QString::null;
+
+ QString str = toString();
+ str.truncate( str.length() - 1 ); // remove trailing space
+ return str;
+}
+
+int KoTextString::nextCursorPosition( int next )
+{
+ if ( bidiDirty )
+ checkBidi();
+
+ const KoTextStringChar *c = data.data();
+ int len = length();
+
+ if ( next < len - 1 ) {
+ next++;
+ while ( next < len - 1 && !c[next].charStop )
+ next++;
+ }
+ return next;
+}
+
+int KoTextString::previousCursorPosition( int prev )
+{
+ if ( bidiDirty )
+ checkBidi();
+
+ const KoTextStringChar *c = data.data();
+
+ if ( prev ) {
+ prev--;
+ while ( prev && !c[prev].charStop )
+ prev--;
+ }
+ return prev;
+}
+
+bool KoTextString::validCursorPosition( int idx )
+{
+ if ( bidiDirty )
+ checkBidi();
+
+ return (at( idx ).charStop);
+}
+
+////
+
+void KoTextStringChar::setFormat( KoTextFormat *f, bool setFormatAgain )
+{
+ if ( type == Regular ) {
+ d.format = f;
+ } else {
+ if ( !d.custom ) {
+ d.custom = new CustomData;
+ d.custom->custom = 0;
+ }
+ d.custom->format = f;
+ if ( d.custom->custom && setFormatAgain )
+ d.custom->custom->setFormat( f );
+ }
+}
+
+void KoTextStringChar::setCustomItem( KoTextCustomItem *i )
+{
+ if ( type == Regular ) {
+ KoTextFormat *f = format();
+ d.custom = new CustomData;
+ d.custom->format = f;
+ type = Custom;
+ } else {
+ delete d.custom->custom;
+ }
+ d.custom->custom = i;
+}
+
+void KoTextStringChar::loseCustomItem() // setRegular() might be a better name
+{
+ if ( isCustom() ) {
+ KoTextFormat *f = d.custom->format;
+ d.custom->custom = 0;
+ delete d.custom;
+ type = Regular;
+ d.format = f;
+ }
+}
+
+KoTextStringChar::~KoTextStringChar()
+{
+ if ( format() )
+ format()->removeRef();
+ switch ( type ) {
+ case Custom:
+ delete d.custom; break;
+ default:
+ break;
+ }
+}
+
+int KoTextStringChar::height() const
+{
+ return !isCustom() ? format()->height() : ( customItem()->placement() == KoTextCustomItem::PlaceInline ? customItem()->height : 0 );
+}
+
+int KoTextStringChar::ascent() const
+{
+ return !isCustom() ? format()->ascent() : ( customItem()->placement() == KoTextCustomItem::PlaceInline ? customItem()->ascent() : 0 );
+}
+
+int KoTextStringChar::descent() const
+{
+ return !isCustom() ? format()->descent() : 0;
+}
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+KoTextFormatterBase::KoTextFormatterBase()
+ : wrapColumn( -1 ), //wrapEnabled( TRUE ),
+ m_bViewFormattingChars( false ),
+ biw( true /*default in kotext*/ )
+{
+}
+
+#ifdef BIDI_DEBUG
+#include <iostream>
+#endif
+
+// collects one line of the paragraph and transforms it to visual order
+KoTextParagLineStart *KoTextFormatterBase::bidiReorderLine( KoTextParag * /*parag*/, KoTextString *text, KoTextParagLineStart *line,
+ KoTextStringChar *startChar, KoTextStringChar *lastChar, int align, int space )
+{
+ int start = (startChar - &text->at(0));
+ int last = (lastChar - &text->at(0) );
+ //kdDebug(32500) << "doing BiDi reordering from " << start << " to " << last << "!" << endl;
+
+ KoBidiControl *control = new KoBidiControl( line->context(), line->status );
+ QString str;
+ str.setUnicode( 0, last - start + 1 );
+ // fill string with logically ordered chars.
+ KoTextStringChar *ch = startChar;
+ QChar *qch = (QChar *)str.unicode();
+ while ( ch <= lastChar ) {
+ *qch = ch->c;
+ qch++;
+ ch++;
+ }
+ int x = startChar->x;
+
+ QPtrList<KoTextRun> *runs;
+ runs = KoComplexText::bidiReorderLine(control, str, 0, last - start + 1,
+ (text->isRightToLeft() ? QChar::DirR : QChar::DirL) );
+
+ // now construct the reordered string out of the runs...
+
+ int numSpaces = 0;
+ // set the correct alignment. This is a bit messy....
+ if( align == Qt::AlignAuto ) {
+ // align according to directionality of the paragraph...
+ if ( text->isRightToLeft() )
+ align = Qt::AlignRight;
+ }
+
+ if ( align & Qt::AlignHCenter )
+ x += space/2;
+ else if ( align & Qt::AlignRight )
+ x += space;
+ else if ( align & Qt::AlignJustify ) {
+ for ( int j = start; j < last; ++j ) {
+ if( isBreakable( text, j ) ) {
+ numSpaces++;
+ }
+ }
+ }
+ int toAdd = 0;
+ bool first = TRUE;
+ KoTextRun *r = runs->first();
+ int xmax = -0xffffff;
+ while ( r ) {
+ if(r->level %2) {
+ // odd level, need to reverse the string
+ int pos = r->stop + start;
+ while(pos >= r->start + start) {
+ KoTextStringChar *c = &text->at(pos);
+ if( numSpaces && !first && isBreakable( text, pos ) ) {
+ int s = space / numSpaces;
+ toAdd += s;
+ space -= s;
+ numSpaces--;
+ } else if ( first ) {
+ first = FALSE;
+ if ( c->c == ' ' )
+ x -= c->format()->width( ' ' );
+ }
+ c->x = x + toAdd;
+ c->rightToLeft = TRUE;
+ c->startOfRun = FALSE;
+ int ww = 0;
+ if ( c->c.unicode() >= 32 || c->c == '\t' || c->c == '\n' || c->isCustom() ) {
+ ww = c->width;
+ } else {
+ ww = c->format()->width( ' ' );
+ }
+ if ( xmax < x + toAdd + ww ) xmax = x + toAdd + ww;
+ x += ww;
+ pos--;
+ }
+ } else {
+ int pos = r->start + start;
+ while(pos <= r->stop + start) {
+ KoTextStringChar* c = &text->at(pos);
+ if( numSpaces && !first && isBreakable( text, pos ) ) {
+ int s = space / numSpaces;
+ toAdd += s;
+ space -= s;
+ numSpaces--;
+ } else if ( first ) {
+ first = FALSE;
+ if ( c->c == ' ' )
+ x -= c->format()->width( ' ' );
+ }
+ c->x = x + toAdd;
+ c->rightToLeft = FALSE;
+ c->startOfRun = FALSE;
+ int ww = 0;
+ if ( c->c.unicode() >= 32 || c->c == '\t' || c->isCustom() ) {
+ ww = c->width;
+ } else {
+ ww = c->format()->width( ' ' );
+ }
+ //kdDebug(32500) << "setting char " << pos << " at pos " << x << endl;
+ if ( xmax < x + toAdd + ww ) xmax = x + toAdd + ww;
+ x += ww;
+ pos++;
+ }
+ }
+ text->at( r->start + start ).startOfRun = TRUE;
+ r = runs->next();
+ }
+
+ line->w = xmax + 10;
+ KoTextParagLineStart *ls = new KoTextParagLineStart( control->context, control->status );
+ delete control;
+ delete runs;
+ return ls;
+}
+
+bool KoTextFormatterBase::isStretchable( KoTextString *string, int pos ) const
+{
+ if ( string->at( pos ).c == QChar(160) ) //non-breaking space
+ return true;
+ KoTextStringChar& chr = string->at( pos );
+ return chr.whiteSpace;
+ //return isBreakable( string, pos );
+}
+
+bool KoTextFormatterBase::isBreakable( KoTextString *string, int pos ) const
+{
+ //if (string->at(pos).nobreak)
+ // return FALSE;
+ return (pos < string->length()-1 && string->at(pos+1).softBreak);
+}
+
+void KoTextParag::insertLineStart( int index, KoTextParagLineStart *ls )
+{
+ // This tests if we break at the same character in more than one line,
+ // i.e. there no space even for _one_ char in a given line.
+ // However this shouldn't happen, KoTextFormatter prevents it, otherwise
+ // we could loop forever (e.g. if one char is wider than the page...)
+#ifndef NDEBUG
+ QMap<int, KoTextParagLineStart*>::Iterator it;
+ if ( ( it = lineStarts.find( index ) ) == lineStarts.end() ) {
+ lineStarts.insert( index, ls );
+ } else {
+ kdWarning(32500) << "insertLineStart: there's already a line for char index=" << index << endl;
+ delete *it;
+ lineStarts.remove( it );
+ lineStarts.insert( index, ls );
+ }
+#else // non-debug code, take the fast route
+ lineStarts.insert( index, ls );
+#endif
+}
+
+
+/* Standard pagebreak algorithm using KoTextFlow::adjustFlow. Returns
+ the shift of the paragraphs bottom line.
+ */
+int KoTextFormatterBase::formatVertically( KoTextDocument* doc, KoTextParag* parag )
+{
+ int oldHeight = parag->rect().height();
+ QMap<int, KoTextParagLineStart*>& lineStarts = parag->lineStartList();
+ QMap<int, KoTextParagLineStart*>::Iterator it = lineStarts.begin();
+ int h = doc->addMargins() ? parag->topMargin() : 0;
+ for ( ; it != lineStarts.end() ; ++it ) {
+ KoTextParagLineStart * ls = it.data();
+ ls->y = h;
+ KoTextStringChar *c = &parag->string()->at(it.key());
+ if ( c && c->customItem() && c->customItem()->ownLine() ) {
+ int h = c->customItem()->height;
+ c->customItem()->pageBreak( parag->rect().y() + ls->y + ls->baseLine - h, doc->flow() );
+ int delta = c->customItem()->height - h;
+ ls->h += delta;
+ if ( delta )
+ parag->setMovedDown( TRUE );
+ } else {
+ int shift = doc->flow()->adjustFlow( parag->rect().y() + ls->y, ls->w, ls->h );
+ ls->y += shift;
+ if ( shift )
+ parag->setMovedDown( TRUE );
+ }
+ h = ls->y + ls->h;
+ }
+ int m = parag->bottomMargin();
+ if ( parag->next() && doc && !doc->addMargins() )
+ m = QMAX( m, parag->next()->topMargin() );
+ //if ( parag->next() && parag->next()->isLineBreak() )
+ // m = 0;
+ h += m;
+ parag->setHeight( h );
+ return h - oldHeight;
+}
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+KoTextCustomItem::KoTextCustomItem( KoTextDocument *p )
+ : width(-1), height(0), parent(p), xpos(0), ypos(-1), parag(0)
+{
+ m_deleted = false; // added for kotext
+}
+
+KoTextCustomItem::~KoTextCustomItem()
+{
+}
+
+KoTextFlow::KoTextFlow()
+{
+ w = 0;
+ leftItems.setAutoDelete( FALSE );
+ rightItems.setAutoDelete( FALSE );
+}
+
+KoTextFlow::~KoTextFlow()
+{
+}
+
+void KoTextFlow::clear()
+{
+ leftItems.clear();
+ rightItems.clear();
+}
+
+// Called by KoTextDocument::setWidth
+void KoTextFlow::setWidth( int width )
+{
+ w = width;
+}
+
+void KoTextFlow::adjustMargins( int, int, int, int&, int&, int& pageWidth, KoTextParag* )
+{
+ pageWidth = w;
+}
+
+
+int KoTextFlow::adjustFlow( int /*y*/, int, int /*h*/ )
+{
+ return 0;
+}
+
+void KoTextFlow::unregisterFloatingItem( KoTextCustomItem* item )
+{
+ leftItems.removeRef( item );
+ rightItems.removeRef( item );
+}
+
+void KoTextFlow::registerFloatingItem( KoTextCustomItem* item )
+{
+ if ( item->placement() == KoTextCustomItem::PlaceRight ) {
+ if ( !rightItems.contains( item ) )
+ rightItems.append( item );
+ } else if ( item->placement() == KoTextCustomItem::PlaceLeft &&
+ !leftItems.contains( item ) ) {
+ leftItems.append( item );
+ }
+}
+
+int KoTextFlow::availableHeight() const
+{
+ return -1; // no limit
+}
+
+void KoTextFlow::drawFloatingItems( QPainter* p, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected )
+{
+ KoTextCustomItem *item;
+ for ( item = leftItems.first(); item; item = leftItems.next() ) {
+ if ( item->x() == -1 || item->y() == -1 )
+ continue;
+ item->draw( p, item->x(), item->y(), cx, cy, cw, ch, cg, selected );
+ }
+
+ for ( item = rightItems.first(); item; item = rightItems.next() ) {
+ if ( item->x() == -1 || item->y() == -1 )
+ continue;
+ item->draw( p, item->x(), item->y(), cx, cy, cw, ch, cg, selected );
+ }
+}
+
+//void KoTextFlow::setPageSize( int ps ) { pagesize = ps; }
+bool KoTextFlow::isEmpty() { return leftItems.isEmpty() && rightItems.isEmpty(); }
diff --git a/lib/kotext/KoRichText.h b/lib/kotext/KoRichText.h
new file mode 100644
index 00000000..94954b93
--- /dev/null
+++ b/lib/kotext/KoRichText.h
@@ -0,0 +1,851 @@
+/****************************************************************************
+**
+** Definition of internal rich text classes
+**
+** Created : 990124
+**
+** Copyright (C) 1999-2000 Trolltech AS. All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as publish by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+** information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef KORICHTEXT_H
+#define KORICHTEXT_H
+
+#include <qptrlist.h>
+#include <qrect.h>
+#include <qmap.h>
+#include <qstringlist.h>
+#include <qcolor.h>
+#include <qsize.h>
+#include <qvaluelist.h>
+#include <qobject.h>
+#include <qstylesheet.h>
+#include <qpainter.h>
+#include "KoComplexText.h"
+
+#include <koffice_export.h>
+class KoXmlWriter;
+class KoGenStyles;
+class KoTextParag;
+class KoTextString;
+class KoTextCursor;
+class KoTextCustomItem;
+class KoTextFlow;
+class KoTextDocument;
+//class KoTextPreProcessor;
+class KoTextFormatterBase;
+class KoTextFormat;
+class KoTextFormatCollection;
+struct KoBidiContext;
+
+//// kotext additions (needed by the #included headers)
+class KCommand;
+class QDomElement;
+class KoTextZoomHandler;
+class KoTextFormatter;
+class KoParagVisitor;
+class KoTextDocCommand;
+class KoXmlWriter;
+class KoSavingContext;
+
+#include <qmemarray.h>
+#include "KoParagLayout.h"
+////
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+class KOTEXT_EXPORT KoTextStringChar
+{
+ friend class KoTextString;
+
+public:
+ // this is never called, initialize variables in KoTextString::insert()!!!
+ KoTextStringChar() : lineStart( 0 ), type( Regular ), startOfRun( 0 ) {d.format=0; }
+ ~KoTextStringChar();
+
+ QChar c;
+
+ // this is the same struct as in qtextengine_p.h. Don't change!
+ uchar softBreak :1; // Potential linebreak point
+ uchar whiteSpace :1; // A unicode whitespace character, except NBSP, ZWNBSP
+ uchar charStop :1; // Valid cursor position (for left/right arrow)
+ uchar wordStop :1; // Valid cursor position (for ctrl + left/right arrow) (TODO: use)
+ //uchar nobreak :1;
+
+ enum Type { Regular, Custom };
+ uint lineStart : 1;
+ Type type : 1;
+ uint startOfRun : 1;
+ uint rightToLeft : 1;
+
+ // --- added for WYSIWYG ---
+ Q_INT8 pixelxadj; // adjustment to apply to lu2pixel(x)
+ short int pixelwidth; // width in pixels
+ short int width; // width in LU
+
+ int x;
+ int height() const;
+ int ascent() const;
+ int descent() const;
+ bool isCustom() const { return type == Custom; }
+ KoTextFormat *format() const;
+ KoTextCustomItem *customItem() const;
+ void setFormat( KoTextFormat *f,bool setFormatAgain=TRUE );
+ void setCustomItem( KoTextCustomItem *i );
+ void loseCustomItem();
+ struct CustomData
+ {
+ KoTextFormat *format;
+ KoTextCustomItem *custom;
+ };
+
+ union {
+ KoTextFormat* format;
+ CustomData* custom;
+ } d;
+
+private:
+ KoTextStringChar &operator=( const KoTextStringChar & ) {
+ //abort();
+ return *this;
+ }
+ KoTextStringChar( const KoTextStringChar & ); // copy-constructor, forbidden
+ friend class KoComplexText;
+ friend class KoTextParag;
+};
+
+#if defined(Q_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class QMemArray<KoTextStringChar>;
+// MOC_SKIP_END
+#endif
+
+class KOTEXT_EXPORT KoTextString
+{
+public:
+
+ KoTextString();
+ KoTextString( const KoTextString &s );
+ virtual ~KoTextString();
+
+ QString toString() const;
+ static QString toString( const QMemArray<KoTextStringChar> &data );
+ QString toReverseString() const;
+
+ QString stringToSpellCheck();
+
+ KoTextStringChar &at( int i ) const;
+ int length() const;
+
+ //int width( int idx ) const; // moved to KoTextFormat
+
+ void insert( int index, const QString &s, KoTextFormat *f );
+ void insert( int index, KoTextStringChar *c );
+ void truncate( int index );
+ void remove( int index, int len );
+ void clear();
+
+ void setFormat( int index, KoTextFormat *f, bool useCollection, bool setFormatAgain = FALSE );
+
+ void setBidi( bool b ) { bidi = b; }
+ bool isBidi() const;
+ bool isRightToLeft() const;
+ QChar::Direction direction() const;
+ void setDirection( QChar::Direction d ) { dir = d; bidiDirty = TRUE; }
+
+ /** Set dirty flag for background spell-checking */
+ void setNeedsSpellCheck( bool b ) { bNeedsSpellCheck = b; }
+ bool needsSpellCheck() const { return bNeedsSpellCheck; }
+
+ QMemArray<KoTextStringChar> subString( int start = 0, int len = 0xFFFFFF ) const;
+ QString mid( int start = 0, int len = 0xFFFFFF ) const; // kotext addition
+ QMemArray<KoTextStringChar> rawData() const { return data.copy(); }
+
+ void operator=( const QString &s ) { clear(); insert( 0, s, 0 ); }
+ void operator+=( const QString &s );
+ void prepend( const QString &s ) { insert( 0, s, 0 ); }
+
+ // return next and previous valid cursor positions.
+ bool validCursorPosition( int idx );
+ int nextCursorPosition( int idx );
+ int previousCursorPosition( int idx );
+
+private:
+ void checkBidi() const;
+
+ QMemArray<KoTextStringChar> data;
+ uint bidiDirty : 1;
+ uint bidi : 1; // true when the paragraph has right to left characters
+ uint rightToLeft : 1;
+ uint dir : 5;
+ uint bNeedsSpellCheck : 1;
+};
+
+inline bool KoTextString::isBidi() const
+{
+ if ( bidiDirty )
+ checkBidi();
+ return bidi;
+}
+
+inline bool KoTextString::isRightToLeft() const
+{
+ if ( bidiDirty )
+ checkBidi();
+ return rightToLeft;
+}
+
+inline QChar::Direction KoTextString::direction() const
+{
+ return (QChar::Direction) dir;
+}
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+class KOTEXT_EXPORT KoTextCursor
+{
+public:
+ KoTextCursor( KoTextDocument *d );
+ KoTextCursor();
+ KoTextCursor( const KoTextCursor &c );
+ KoTextCursor &operator=( const KoTextCursor &c );
+ virtual ~KoTextCursor() {}
+
+ bool operator==( const KoTextCursor &c ) const;
+ bool operator!=( const KoTextCursor &c ) const { return !(*this == c); }
+
+ KoTextDocument *document() const { return doc; }
+ void setDocument( KoTextDocument *d );
+
+ KoTextParag *parag() const;
+ int index() const;
+ void setParag( KoTextParag *s, bool restore = TRUE );
+
+ void gotoLeft();
+ void gotoRight();
+ void gotoNextLetter();
+ void gotoPreviousLetter();
+ void gotoUp();
+ void gotoDown();
+ void gotoLineEnd();
+ void gotoLineStart();
+ void gotoHome();
+ void gotoEnd();
+ void gotoPageUp( int visibleHeight );
+ void gotoPageDown( int visibleHeight );
+ void gotoNextWord();
+ void gotoPreviousWord();
+ void gotoWordLeft();
+ void gotoWordRight();
+
+ void insert( const QString &s, bool checkNewLine, QMemArray<KoTextStringChar> *formatting = 0 );
+ void splitAndInsertEmptyParag( bool ind = TRUE, bool updateIds = TRUE );
+ bool remove();
+ bool removePreviousChar();
+ void killLine();
+ //void indent();
+
+ bool atParagStart() const;
+ bool atParagEnd() const;
+
+ void setIndex( int i, bool restore = TRUE );
+
+ //void checkIndex();
+
+ //int offsetX() const { return ox; }
+ //int offsetY() const { return oy; }
+
+ bool place( const QPoint &pos, KoTextParag *s, bool link = false, int *customItemIndex = 0 );
+
+ int x() const;
+ int y() const;
+ void fixCursorPosition();
+
+private:
+ KoTextParag *string;
+ KoTextDocument *doc;
+ int idx, tmpIndex;
+ //int ox, oy;
+};
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+class KoTextDocCommand
+{
+public:
+ enum Commands { Invalid, Insert, Delete, Format, Alignment, ParagType };
+
+ KoTextDocCommand( KoTextDocument *d ) : doc( d ), cursor( d ) {}
+ virtual ~KoTextDocCommand() {}
+ virtual Commands type() const { return Invalid; };
+
+ virtual KoTextCursor *execute( KoTextCursor *c ) = 0;
+ virtual KoTextCursor *unexecute( KoTextCursor *c ) = 0;
+
+protected:
+ KoTextDocument *doc;
+ KoTextCursor cursor;
+
+};
+
+#if defined(Q_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class QPtrList<KoTextDocCommand>;
+// MOC_SKIP_END
+#endif
+
+class KoTextDocCommandHistory
+{
+public:
+ KoTextDocCommandHistory( int s ) : current( -1 ), steps( s ) { history.setAutoDelete( TRUE ); }
+ virtual ~KoTextDocCommandHistory() { clear(); }
+
+ void clear() { history.clear(); current = -1; }
+
+ void addCommand( KoTextDocCommand *cmd );
+ KoTextCursor *undo( KoTextCursor *c );
+ KoTextCursor *redo( KoTextCursor *c );
+
+ bool isUndoAvailable();
+ bool isRedoAvailable();
+
+ void setUndoDepth( int d ) { steps = d; }
+ int undoDepth() const { return steps; }
+
+ int historySize() const { return history.count(); }
+ int currentPosition() const { return current; }
+
+private:
+ QPtrList<KoTextDocCommand> history;
+ int current, steps;
+
+};
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include "KoTextCustomItem.h"
+
+#if defined(Q_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class QMap<QString, QString>;
+// MOC_SKIP_END
+#endif
+
+#if 0
+class KoTextImage : public KoTextCustomItem
+{
+public:
+ KoTextImage( KoTextDocument *p, const QMap<QString, QString> &attr, const QString& context,
+ QMimeSourceFactory &factory );
+ virtual ~KoTextImage();
+
+ Placement placement() const { return place; }
+ //void setPainter( QPainter*, bool );
+ int widthHint() const { return width; }
+ int minimumWidth() const { return width; }
+
+ QString richText() const;
+
+ void draw( QPainter* p, int x, int y, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected );
+
+private:
+ QRegion* reg;
+ QPixmap pm;
+ Placement place;
+ int tmpwidth, tmpheight;
+ QMap<QString, QString> attributes;
+ QString imgId;
+
+};
+#endif
+
+class KoTextHorizontalLine : public KoTextCustomItem
+{
+public:
+ KoTextHorizontalLine( KoTextDocument *p, const QMap<QString, QString> &attr, const QString& context,
+ QMimeSourceFactory &factory );
+ virtual ~KoTextHorizontalLine();
+
+ //void setPainter( QPainter*, bool );
+ void draw(QPainter* p, int x, int y, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected );
+ QString richText() const;
+
+ bool ownLine() const { return TRUE; }
+
+private:
+ int tmpheight;
+ QColor color;
+
+};
+
+#if defined(Q_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class QPtrList<KoTextCustomItem>;
+// MOC_SKIP_END
+#endif
+
+class KOTEXT_EXPORT KoTextFlow
+{
+ friend class KoTextDocument;
+ friend class KoTextTableCell;
+
+public:
+ KoTextFlow();
+ virtual ~KoTextFlow();
+
+ // Called by KoTextDocument::setWidth()
+ virtual void setWidth( int width );
+
+ // This is the value returned by KoTextDocument::width()
+ int width() const { return w; }
+
+ //virtual void setPageSize( int ps );
+ //int pageSize() const { return pagesize; }
+
+ /**
+ * Called by the formatter to find out the left and right margin for a paragraph at ( yp, yp+h )
+ * @param leftMargin returns the left margin
+ * @param rightMargin returns the right margin (from the page width)
+ * @param pageWidth returns the page width at that point
+ * This method merges QRichText's adjustLMargin and adjustRMargin for efficiency reasons
+ */
+ virtual void adjustMargins( int yp, int h, int reqMinWidth, int& leftMargin, int& rightMargin, int& pageWidth, KoTextParag* parag );
+
+ virtual void registerFloatingItem( KoTextCustomItem* item );
+ virtual void unregisterFloatingItem( KoTextCustomItem* item );
+ //virtual QRect boundingRect() const;
+
+ /// kotext addition. Allows the textformatter to stop when it goes too far.
+ virtual int availableHeight() const;
+ virtual void drawFloatingItems(QPainter* p, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected );
+
+ virtual int adjustFlow( int y, int w, int h ); // adjusts y according to the defined pagesize. Returns the shift.
+
+ virtual bool isEmpty();
+
+ void clear();
+
+private:
+ int w;
+ //int pagesize;
+
+ QPtrList<KoTextCustomItem> leftItems;
+ QPtrList<KoTextCustomItem> rightItems;
+
+};
+
+#ifdef QTEXTTABLE_AVAILABLE
+class KoTextTable;
+
+class KoTextTableCell : public QLayoutItem
+{
+ friend class KoTextTable;
+
+public:
+ KoTextTableCell( KoTextTable* table,
+ int row, int column,
+ const QMap<QString, QString> &attr,
+ const QStyleSheetItem* style,
+ const KoTextFormat& fmt, const QString& context,
+ QMimeSourceFactory &factory, QStyleSheet *sheet, const QString& doc );
+ KoTextTableCell( KoTextTable* table, int row, int column );
+ virtual ~KoTextTableCell();
+
+ QSize sizeHint() const ;
+ QSize minimumSize() const ;
+ QSize maximumSize() const ;
+ QSizePolicy::ExpandData expanding() const;
+ bool isEmpty() const;
+ void setGeometry( const QRect& ) ;
+ QRect geometry() const;
+
+ bool hasHeightForWidth() const;
+ int heightForWidth( int ) const;
+
+ void setPainter( QPainter*, bool );
+
+ int row() const { return row_; }
+ int column() const { return col_; }
+ int rowspan() const { return rowspan_; }
+ int colspan() const { return colspan_; }
+ int stretch() const { return stretch_; }
+
+ KoTextDocument* richText() const { return richtext; }
+ KoTextTable* table() const { return parent; }
+
+ void draw( int x, int y, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected );
+
+ QBrush *backGround() const { return background; }
+ virtual void invalidate();
+
+ int verticalAlignmentOffset() const;
+ int horizontalAlignmentOffset() const;
+
+private:
+ QPainter* painter() const;
+ QRect geom;
+ KoTextTable* parent;
+ KoTextDocument* richtext;
+ int row_;
+ int col_;
+ int rowspan_;
+ int colspan_;
+ int stretch_;
+ int maxw;
+ int minw;
+ bool hasFixedWidth;
+ QBrush *background;
+ int cached_width;
+ int cached_sizehint;
+ QMap<QString, QString> attributes;
+ int align;
+};
+
+#if defined(Q_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class QPtrList<KoTextTableCell>;
+template class QMap<KoTextCursor*, int>;
+// MOC_SKIP_END
+#endif
+
+class KoTextTable: public KoTextCustomItem
+{
+ friend class KoTextTableCell;
+
+public:
+ KoTextTable( KoTextDocument *p, const QMap<QString, QString> &attr );
+ virtual ~KoTextTable();
+
+ void setPainter( QPainter *p, bool adjust );
+ void pageBreak( int y, KoTextFlow* flow );
+ void draw( QPainter* p, int x, int y, int cx, int cy, int cw, int ch,
+ const QColorGroup& cg, bool selected );
+
+ bool noErase() const { return TRUE; }
+ bool ownLine() const { return TRUE; }
+ Placement placement() const { return place; }
+ bool isNested() const { return TRUE; }
+ void resize( int nwidth );
+ virtual void invalidate();
+ /// ## QString anchorAt( QPainter* p, int x, int y );
+
+ virtual bool enter( KoTextCursor *c, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy, bool atEnd = FALSE );
+ virtual bool enterAt( KoTextCursor *c, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy, const QPoint &pos );
+ virtual bool next( KoTextCursor *c, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy );
+ virtual bool prev( KoTextCursor *c, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy );
+ virtual bool down( KoTextCursor *c, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy );
+ virtual bool up( KoTextCursor *c, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy );
+
+ QString richText() const;
+
+ int minimumWidth() const { return layout ? layout->minimumSize().width() : 0; }
+ int widthHint() const { return ( layout ? layout->sizeHint().width() : 0 ) + 2 * outerborder; }
+
+ QPtrList<KoTextTableCell> tableCells() const { return cells; }
+
+ QRect geometry() const { return layout ? layout->geometry() : QRect(); }
+ bool isStretching() const { return stretch; }
+
+private:
+ void format( int &w );
+ void addCell( KoTextTableCell* cell );
+
+private:
+ QGridLayout* layout;
+ QPtrList<KoTextTableCell> cells;
+ QPainter* painter;
+ int cachewidth;
+ int fixwidth;
+ int cellpadding;
+ int cellspacing;
+ int border;
+ int outerborder;
+ int stretch;
+ int innerborder;
+ int us_cp, us_ib, us_b, us_ob, us_cs;
+ QMap<QString, QString> attributes;
+ QMap<KoTextCursor*, int> currCell;
+ Placement place;
+ void adjustCells( int y , int shift );
+ int pageBreakFor;
+};
+#endif // QTEXTTABLE_AVAILABLE
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+class KoTextTableCell;
+
+struct KoTextDocumentSelection
+{
+ KoTextCursor startCursor, endCursor;
+ bool swapped;
+};
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+class KOTEXT_EXPORT KoTextDocDeleteCommand : public KoTextDocCommand
+{
+public:
+ KoTextDocDeleteCommand( KoTextDocument *d, int i, int idx, const QMemArray<KoTextStringChar> &str );
+ //KoTextDocDeleteCommand( KoTextParag *p, int idx, const QMemArray<KoTextStringChar> &str );
+ virtual ~KoTextDocDeleteCommand();
+
+ Commands type() const { return Delete; }
+ KoTextCursor *execute( KoTextCursor *c );
+ KoTextCursor *unexecute( KoTextCursor *c );
+
+protected:
+ int id, index;
+ KoTextParag *parag;
+ QMemArray<KoTextStringChar> text;
+
+};
+
+#if 0
+class KoTextDocInsertCommand : public KoTextDocDeleteCommand
+{
+public:
+ KoTextDocInsertCommand( KoTextDocument *d, int i, int idx, const QMemArray<KoTextStringChar> &str )
+ : KoTextDocDeleteCommand( d, i, idx, str ) {}
+ KoTextDocInsertCommand( KoTextParag *p, int idx, const QMemArray<KoTextStringChar> &str )
+ : KoTextDocDeleteCommand( p, idx, str ) {}
+ virtual ~KoTextDocInsertCommand() {}
+
+ Commands type() const { return Insert; }
+ KoTextCursor *execute( KoTextCursor *c ) { return KoTextDocDeleteCommand::unexecute( c ); }
+ KoTextCursor *unexecute( KoTextCursor *c ) { return KoTextDocDeleteCommand::execute( c ); }
+
+};
+#endif
+
+class KoTextDocFormatCommand : public KoTextDocCommand
+{
+public:
+ KoTextDocFormatCommand( KoTextDocument *d, int sid, int sidx, int eid, int eidx, const QMemArray<KoTextStringChar> &old, const KoTextFormat *f, int fl );
+ virtual ~KoTextDocFormatCommand();
+
+ Commands type() const { return Format; }
+ KoTextCursor *execute( KoTextCursor *c );
+ KoTextCursor *unexecute( KoTextCursor *c );
+
+protected:
+ int startId, startIndex, endId, endIndex;
+ KoTextFormat *format;
+ QMemArray<KoTextStringChar> oldFormats;
+ int flags;
+
+};
+
+class KoTextAlignmentCommand : public KoTextDocCommand
+{
+public:
+ KoTextAlignmentCommand( KoTextDocument *d, int fParag, int lParag, int na, const QMemArray<int> &oa );
+ virtual ~KoTextAlignmentCommand() {}
+
+ Commands type() const { return Alignment; }
+ KoTextCursor *execute( KoTextCursor *c );
+ KoTextCursor *unexecute( KoTextCursor *c );
+
+private:
+ int firstParag, lastParag;
+ int newAlign;
+ QMemArray<int> oldAligns;
+
+};
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+struct KoTextParagLineStart
+{
+ KoTextParagLineStart() : y( 0 ), baseLine( 0 ), h( 0 ), lineSpacing( 0 ), hyphenated( false )
+#ifndef QT_NO_COMPLEXTEXT
+ , bidicontext( 0 )
+#endif
+ { }
+ KoTextParagLineStart( ushort y_, ushort bl, ushort h_ ) : y( y_ ), baseLine( bl ), h( h_ ),
+ lineSpacing( 0 ), hyphenated( false ),
+ w( 0 )
+#ifndef QT_NO_COMPLEXTEXT
+ , bidicontext( 0 )
+#endif
+ { }
+#ifndef QT_NO_COMPLEXTEXT
+ KoTextParagLineStart( KoBidiContext *c, KoBidiStatus s ) : y(0), baseLine(0), h(0),
+ lineSpacing( 0 ), hyphenated( false ),
+ status( s ), bidicontext( c ) { if ( bidicontext ) bidicontext->ref(); }
+#endif
+
+ virtual ~KoTextParagLineStart()
+ {
+#ifndef QT_NO_COMPLEXTEXT
+ if ( bidicontext && bidicontext->deref() )
+ delete bidicontext;
+#endif
+ }
+
+#ifndef QT_NO_COMPLEXTEXT
+ void setContext( KoBidiContext *c ) {
+ if ( c == bidicontext )
+ return;
+ if ( bidicontext && bidicontext->deref() )
+ delete bidicontext;
+ bidicontext = c;
+ if ( bidicontext )
+ bidicontext->ref();
+ }
+ KoBidiContext *context() const { return bidicontext; }
+#endif
+
+public:
+ ushort y, baseLine, h;
+ short lineSpacing;
+ bool hyphenated;
+#ifndef QT_NO_COMPLEXTEXT
+ KoBidiStatus status;
+#endif
+ int w;
+
+private:
+#ifndef QT_NO_COMPLEXTEXT
+ KoBidiContext *bidicontext;
+#endif
+};
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+class KOTEXT_EXPORT KoTextFormatterBase
+{
+public:
+ KoTextFormatterBase();
+ virtual ~KoTextFormatterBase() {}
+ virtual bool format( KoTextDocument *doc, KoTextParag *parag, int start, const QMap<int, KoTextParagLineStart*> &oldLineStarts, int& y, int& widthUsed ) = 0;
+ virtual int formatVertically( KoTextDocument* doc, KoTextParag* parag );
+
+ // Called after formatting a paragraph
+ virtual void postFormat( KoTextParag* parag ) = 0;
+
+ int wrapAtColumn() const { return wrapColumn;}
+ //virtual void setWrapEnabled( bool b ) { wrapEnabled = b; }
+ virtual void setWrapAtColumn( int c ) { wrapColumn = c; }
+ virtual void setAllowBreakInWords( bool b ) { biw = b; }
+ bool allowBreakInWords() const { return biw; }
+
+ // This setting is passed to KoTextParag::fixParagWidth by postFormat()
+ void setViewFormattingChars( bool b ) { m_bViewFormattingChars = b; }
+ bool viewFormattingChars() const { return m_bViewFormattingChars; }
+
+ /*virtual*/ bool isBreakable( KoTextString *string, int pos ) const;
+ /*virtual*/ bool isStretchable( KoTextString *string, int pos ) const;
+
+protected:
+ //virtual KoTextParagLineStart *formatLine( KoTextParag *parag, KoTextString *string, KoTextParagLineStart *line, KoTextStringChar *start,
+ // KoTextStringChar *last, int align = AlignAuto, int space = 0 );
+ //KoTextStringChar
+
+#ifndef QT_NO_COMPLEXTEXT
+ virtual KoTextParagLineStart *bidiReorderLine( KoTextParag *parag, KoTextString *string, KoTextParagLineStart *line, KoTextStringChar *start,
+ KoTextStringChar *last, int align, int space );
+#endif
+
+private:
+ int wrapColumn;
+ //bool wrapEnabled;
+ bool m_bViewFormattingChars;
+ bool biw;
+ bool unused; // for future extensions
+
+#ifdef HAVE_THAI_BREAKS
+ static QCString *thaiCache;
+ static KoTextString *cachedString;
+ static ThBreakIterator *thaiIt;
+#endif
+};
+
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+inline int KoTextString::length() const
+{
+ return data.size();
+}
+
+inline void KoTextString::operator+=( const QString &s )
+{
+ insert( length(), s, 0 );
+}
+
+inline KoTextParag *KoTextCursor::parag() const
+{
+ return string;
+}
+
+inline int KoTextCursor::index() const
+{
+ return idx;
+}
+
+inline void KoTextCursor::setParag( KoTextParag *s, bool /*restore*/ )
+{
+ idx = 0;
+ string = s;
+ tmpIndex = -1;
+}
+
+//inline void KoTextCursor::checkIndex()
+//{
+// if ( idx >= string->length() )
+// idx = string->length() - 1;
+//}
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+inline KoTextStringChar &KoTextString::at( int i ) const
+{
+ return data[ i ];
+}
+
+inline QString KoTextString::toString() const
+{
+ return toString( data );
+}
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+inline KoTextFormat *KoTextStringChar::format() const
+{
+ return (type == Regular) ? d.format : d.custom->format;
+}
+
+inline KoTextCustomItem *KoTextStringChar::customItem() const
+{
+ return isCustom() ? d.custom->custom : 0;
+}
+
+#endif
diff --git a/lib/kotext/KoSearchDia.cpp b/lib/kotext/KoSearchDia.cpp
new file mode 100644
index 00000000..701f4ad2
--- /dev/null
+++ b/lib/kotext/KoSearchDia.cpp
@@ -0,0 +1,930 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+ Copyright (C) 2001, S.R.Haque <srhaque@iee.org>
+ Copyright (C) 2001, David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoSearchDia.h"
+#include "KoTextParag.h"
+
+#include <KoGlobal.h>
+#include <KoTextObject.h>
+#include <KoTextView.h>
+
+#include <kcolorbutton.h>
+#include <kcommand.h>
+#include <kdebug.h>
+#include <kfontcombo.h>
+#include <klocale.h>
+#include <kseparator.h>
+
+#include <qbuttongroup.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qradiobutton.h>
+#include <qregexp.h>
+#include <qspinbox.h>
+#include <qlayout.h>
+
+KoSearchContext::KoSearchContext()
+{
+ m_family = "times";
+ m_color = Qt::black;
+ m_backGroundColor = Qt::black;
+
+ m_size = 12;
+ m_vertAlign = KoTextFormat::AlignNormal;
+ m_optionsMask = 0;
+ m_options = KFindDialog::FromCursor | KReplaceDialog::PromptOnReplace;
+ m_underline = KoTextFormat::U_NONE;
+ m_strikeOut = KoTextFormat::S_NONE;
+ m_attribute = KoTextFormat::ATT_NONE;
+ m_language = QString::null;
+}
+
+KoSearchContext::~KoSearchContext()
+{
+}
+
+
+KoSearchContextUI::KoSearchContextUI( KoSearchContext *ctx, QWidget *parent )
+ : QObject(parent), m_ctx(ctx), m_parent(parent)
+{
+ m_bOptionsShown = false;
+ m_btnShowOptions = new QPushButton( i18n("Show Formatting Options"), parent );
+ connect( m_btnShowOptions, SIGNAL( clicked() ), SLOT( slotShowOptions() ) );
+
+ m_grid = new QGridLayout( m_parent, 1, 1, 0, 6 );
+ m_grid->addWidget( m_btnShowOptions, 0, 0 );
+ m_btnShowOptions->setEnabled( true );
+}
+
+void KoSearchContextUI::slotShowOptions()
+{
+ KoFormatDia * dlg = new KoFormatDia( m_parent, i18n("Formatting Options"), m_ctx );
+ if ( dlg->exec())
+ {
+ dlg->ctxOptions( );
+ m_bOptionsShown = true;
+ }
+
+ delete dlg;
+}
+
+void KoSearchContextUI::setCtxOptions( long options )
+{
+ if ( m_bOptionsShown )
+ {
+ options |= m_ctx->m_options;
+ }
+ m_ctx->m_options = options;
+}
+
+void KoSearchContextUI::setCtxHistory( const QStringList & history )
+{
+ m_ctx->m_strings = history;
+}
+
+KoSearchDia::KoSearchDia( QWidget * parent,const char *name, KoSearchContext *find, bool hasSelection, bool hasCursor )
+ : KFindDialog( parent, name, find->m_options, find->m_strings )
+{
+ // The dialog extension.
+ m_findUI = new KoSearchContextUI( find, findExtension() );
+ setHasSelection(hasSelection);
+ setHasCursor(hasCursor);
+}
+
+void KoSearchDia::slotOk()
+{
+ KFindDialog::slotOk();
+
+ // Save the current state back into the context required.
+ if ( optionSelected() )
+ m_findUI->setCtxOptions( options() );
+ m_findUI->setCtxHistory( findHistory() );
+}
+
+KoReplaceDia::KoReplaceDia( QWidget *parent, const char *name, KoSearchContext *find, KoSearchContext *replace, bool hasSelection, bool hasCursor )
+ : KReplaceDialog( parent, name, find->m_options, find->m_strings, replace->m_strings )
+{
+ // The dialog extension.
+ m_findUI = new KoSearchContextUI( find, findExtension() );
+ m_replaceUI = new KoSearchContextUI( replace, replaceExtension() );
+ // Look whether we have a selection, and/or a cursor
+ setHasSelection(hasSelection);
+ setHasCursor(hasCursor);
+}
+
+void KoReplaceDia::slotOk()
+{
+ KReplaceDialog::slotOk();
+
+ // Save the current state back into the context required.
+ m_findUI->setCtxHistory( findHistory() );
+ if ( optionFindSelected() )
+ m_findUI->setCtxOptions( KReplaceDialog::options() );
+
+ m_replaceUI->setCtxHistory( replacementHistory() );
+ if ( optionReplaceSelected() )
+ m_replaceUI->setCtxOptions( KReplaceDialog::options() );
+}
+
+
+
+KoFindReplace::KoFindReplace( QWidget * parent, KoSearchDia * dialog, const QValueList<KoTextObject *> & lstObject, KoTextView* textView )
+ : m_find( new KoTextFind( dialog->pattern(), dialog->options(), this, parent ) ),
+ m_replace( 0L ),
+ m_searchContext( *dialog->searchContext() ),
+ m_replaceContext(),
+ m_searchContextEnabled( dialog->optionSelected() ),
+ m_doCounting( true ),
+ m_macroCmd( 0L ),
+ m_offset( 0 ),
+ m_textIterator( lstObject, textView, dialog->options() ),
+ m_lastTextObjectHighlighted( 0 )
+{
+ connectFind( m_find );
+}
+
+KoFindReplace::KoFindReplace( QWidget * parent, KoReplaceDia * dialog, const QValueList<KoTextObject *> & lstObject, KoTextView* textView )
+ : m_find( 0L ),
+ m_replace( new KoTextReplace( dialog->pattern(), dialog->replacement(), dialog->options(), this, parent ) ),
+ m_searchContext( *dialog->searchContext() ),
+ m_replaceContext( *dialog->replaceContext() ),
+ m_searchContextEnabled( dialog->optionFindSelected() ),
+ m_doCounting( true ),
+ m_macroCmd( 0L ),
+ m_offset( 0 ),
+ m_textIterator( lstObject, textView, dialog->options() ),
+ m_lastTextObjectHighlighted( 0 )
+{
+ connectFind( m_replace );
+ connect( m_replace, SIGNAL( replace( const QString &, int , int, int ) ),
+ this, SLOT( replace( const QString &, int , int,int ) ) );
+}
+
+void KoFindReplace::connectFind( KFind* find )
+{
+ connect( find, SIGNAL( optionsChanged() ),
+ this, SLOT( optionsChanged() ) );
+ connect( find, SIGNAL( dialogClosed() ),
+ this, SLOT( dialogClosed() ) );
+ // Connect highlight signal to code which handles highlighting
+ // of found text.
+ connect( find, SIGNAL( highlight( const QString &, int, int ) ),
+ this, SLOT( highlight( const QString &, int, int ) ) );
+ // Connect findNext signal - called when pressing the button in the dialog
+ connect( find, SIGNAL( findNext() ),
+ this, SLOT( slotFindNext() ) );
+ m_bInit = true;
+ m_currentParagraphModified = false;
+ m_matchingIndex = -1;
+
+ // Also connect to the textiterator
+ connect( &m_textIterator, SIGNAL( currentParagraphModified( int, int, int ) ),
+ this, SLOT( slotCurrentParagraphModified( int, int, int ) ) );
+}
+
+KoFindReplace::~KoFindReplace()
+{
+ removeHighlight();
+ //kdDebug(32500) << "KoFindReplace::~KoFindReplace" << endl;
+ delete m_find;
+ delete m_replace;
+}
+
+void KoFindReplace::optionsChanged()
+{
+ m_textIterator.setOptions( options() );
+}
+
+void KoFindReplace::dialogClosed()
+{
+ removeHighlight();
+ emitUndoRedo();
+ // we have to stop the match counting when closing the dialog,
+ // because Shift-F3 (find previous) would keep increasing that count, wrongly.
+ m_doCounting = false;
+}
+
+void KoFindReplace::removeHighlight()
+{
+ if ( m_lastTextObjectHighlighted )
+ m_lastTextObjectHighlighted->removeHighlight(true);
+ m_lastTextObjectHighlighted = 0L;
+}
+
+void KoFindReplace::emitUndoRedo()
+{
+ // Emit the command containing the replace operations
+ // #### We allow editing text during a replace operation, so we need
+ // to call this more often... so that 'undo' undoes the last
+ // replace operations. TODO!
+ if(m_macroCmd)
+ emitNewCommand(m_macroCmd);
+ m_macroCmd = 0L;
+}
+
+/**
+*
+* This whole code should be rewritten at some point:
+* if we want to allow matches across paragraph borders,
+* then we need to send the whole text of a textobject at once,
+* instead of paragraph-after-paragraph.
+*
+*/
+
+bool KoFindReplace::findNext()
+{
+ KFind::Result res = KFind::NoMatch;
+ while ( res == KFind::NoMatch && !m_textIterator.atEnd() ) {
+ //kdDebug(32500) << "findNext loop. m_bInit=" << m_bInit << " needData=" << needData() << " m_currentParagraphModified=" << m_currentParagraphModified << endl;
+ if ( needData() || m_currentParagraphModified ) {
+ if ( !m_bInit && !m_currentParagraphModified ) {
+ ++m_textIterator;
+ if ( m_textIterator.atEnd() )
+ break;
+ }
+ m_bInit = false;
+ QPair<int, QString> c = m_textIterator.currentTextAndIndex();
+ m_offset = c.first;
+ if ( !m_currentParagraphModified )
+ setData( c.second );
+ else
+ setData( c.second, m_matchingIndex );
+ m_currentParagraphModified = false;
+ }
+
+ if ( m_find )
+ // Let KFind inspect the text fragment, and display a dialog if a match is found
+ res = m_find->find();
+ else
+ res = m_replace->replace();
+ }
+
+ //kdDebug(32500) << k_funcinfo << "we're done. res=" << res << endl;
+ if ( res == KFind::NoMatch ) // i.e. at end
+ {
+ emitUndoRedo();
+ removeHighlight();
+ if ( shouldRestart() ) {
+ m_textIterator.setOptions( m_textIterator.options() & ~KFindDialog::FromCursor );
+ m_textIterator.restart();
+ m_bInit = true;
+ if ( m_find )
+ m_find->resetCounts();
+ else
+ m_replace->resetCounts();
+ return findNext();
+ }
+ else { // done, close the 'find next' dialog
+ if ( m_find )
+ m_find->closeFindNextDialog();
+ else
+ m_replace->closeReplaceNextDialog();
+ }
+ return false;
+ }
+ return true;
+}
+
+void KoFindReplace::slotFindNext() // called by the button in the small "find next?" dialog
+{
+ bool ret = findNext();
+ Q_UNUSED(ret);
+}
+
+bool KoFindReplace::findPrevious()
+{
+ int opt = options();
+ bool forw = ! ( options() & KFindDialog::FindBackwards );
+ if ( forw )
+ setOptions( opt | KFindDialog::FindBackwards );
+ else
+ setOptions( opt & ~KFindDialog::FindBackwards );
+
+ bool ret = findNext();
+
+ setOptions( opt ); // restore initial options
+
+ return ret;
+}
+
+long KoFindReplace::options() const
+{
+ return m_find ? m_find->options() : m_replace->options();
+}
+
+void KoFindReplace::setOptions(long opt)
+{
+ if ( m_find )
+ m_find->setOptions(opt);
+ else
+ m_replace->setOptions(opt);
+ m_textIterator.setOptions( opt );
+}
+
+void KoFindReplace::slotCurrentParagraphModified( int, int pos, int )
+{
+ if ( pos >= m_offset )
+ m_currentParagraphModified = true;
+ // (this bool forces the next findNext() to call setData again)
+}
+
+// slot connected to the 'highlight' signal
+void KoFindReplace::highlight( const QString &, int matchingIndex, int matchingLength )
+{
+ m_matchingIndex = matchingIndex;
+ if ( m_lastTextObjectHighlighted )
+ m_lastTextObjectHighlighted->removeHighlight(true);
+ m_lastTextObjectHighlighted = m_textIterator.currentTextObject();
+ //kdDebug(32500) << "KoFindReplace::highlight " << matchingIndex << "," << matchingLength << endl;
+ KDialogBase* dialog = m_find ? m_find->findNextDialog() : m_replace->replaceNextDialog();
+ highlightPortion(m_textIterator.currentParag(), m_offset + matchingIndex, matchingLength, m_lastTextObjectHighlighted->textDocument(), dialog );
+}
+
+// slot connected to the 'replace' signal
+void KoFindReplace::replace( const QString &text, int matchingIndex,
+ int replacementLength, int matchedLength )
+{
+ //kdDebug(32500) << "KoFindReplace::replace m_offset=" << m_offset << " matchingIndex=" << matchingIndex << " matchedLength=" << matchedLength << " options=" << options() << endl;
+ m_matchingIndex = matchingIndex;
+ int index = m_offset + matchingIndex;
+
+ // highlight might not have happened (if 'prompt on replace' is off)
+ if ( (options() & KReplaceDialog::PromptOnReplace) == 0 )
+ highlight( text, matchingIndex, matchedLength );
+
+ KoTextObject* currentTextObj = m_textIterator.currentTextObject();
+ KoTextDocument * textdoc = currentTextObj->textDocument();
+ KoTextCursor cursor( textdoc );
+ cursor.setParag( m_textIterator.currentParag() );
+ cursor.setIndex( index );
+
+ //reactive spellchecking
+ currentTextObj->setNeedSpellCheck(true);
+ if ( m_replaceContext.m_optionsMask )
+ {
+ replaceWithAttribut( &cursor, index );
+ }
+ // Don't repaint if we're doing batch changes
+ bool repaint = options() & KReplaceDialog::PromptOnReplace;
+
+ // Grab replacement string
+ QString rep = text.mid( matchingIndex, replacementLength );
+
+ // Don't let the replacement set the paragraph to "modified by user"
+ disconnect( &m_textIterator, SIGNAL( currentParagraphModified( int, int, int ) ),
+ this, SLOT( slotCurrentParagraphModified( int, int, int ) ) );
+
+ KCommand *cmd = currentTextObj->replaceSelectionCommand(
+ &cursor, rep, QString::null,
+ KoTextDocument::HighlightSelection,
+ repaint ? KoTextObject::DefaultInsertFlags : KoTextObject::DoNotRepaint );
+
+ connect( &m_textIterator, SIGNAL( currentParagraphModified( int, int, int ) ),
+ this, SLOT( slotCurrentParagraphModified( int, int, int ) ) );
+
+ if( cmd )
+ macroCommand()->addCommand(cmd);
+}
+
+void KoFindReplace::replaceWithAttribut( KoTextCursor * cursor, int index )
+{
+ KoTextFormat * lastFormat = m_textIterator.currentParag()->at( index )->format();
+ KoTextFormat * newFormat = new KoTextFormat(*lastFormat);
+ int flags = 0;
+ if (m_replaceContext.m_optionsMask & KoSearchContext::Bold)
+ {
+ flags |= KoTextFormat::Bold;
+ newFormat->setBold( (bool)(m_replaceContext.m_options & KoSearchContext::Bold) );
+ }
+ if (m_replaceContext.m_optionsMask & KoSearchContext::Size)
+ {
+ flags |= KoTextFormat::Size;
+ newFormat->setPointSize( m_replaceContext.m_size );
+
+ }
+ if ( m_replaceContext.m_optionsMask & KoSearchContext::Family)
+ {
+ flags |= KoTextFormat::Family;
+ newFormat->setFamily( m_replaceContext.m_family );
+ }
+ if ( m_replaceContext.m_optionsMask & KoSearchContext::Color)
+ {
+ flags |= KoTextFormat::Color;
+ newFormat->setColor( m_replaceContext.m_color );
+ }
+ if ( m_replaceContext.m_optionsMask & KoSearchContext::Italic)
+ {
+ flags |= KoTextFormat::Italic;
+ newFormat->setItalic( (bool)(m_replaceContext.m_options & KoSearchContext::Italic) );
+ }
+ if ( m_replaceContext.m_optionsMask & KoSearchContext::Underline)
+ {
+ flags |= KoTextFormat::ExtendUnderLine;
+ newFormat->setUnderlineType( m_replaceContext.m_underline );
+
+ }
+ if ( m_replaceContext.m_optionsMask & KoSearchContext::VertAlign)
+ {
+ flags |= KoTextFormat::VAlign;
+ newFormat->setVAlign( m_replaceContext.m_vertAlign);
+ }
+ if ( m_replaceContext.m_optionsMask & KoSearchContext::StrikeOut)
+ {
+ flags |= KoTextFormat::StrikeOut;
+ newFormat->setStrikeOutType( m_replaceContext.m_strikeOut);
+ }
+ if ( m_replaceContext.m_optionsMask & KoSearchContext::BgColor)
+ {
+ newFormat->setTextBackgroundColor(m_replaceContext.m_backGroundColor);
+ flags |= KoTextFormat::TextBackgroundColor;
+ }
+ if (m_replaceContext.m_optionsMask & KoSearchContext::Shadow)
+ {
+ flags |= KoTextFormat::ShadowText;
+ // If shadow has been selected, we set a shadow (any shadow) in the new format
+ if ( m_replaceContext.m_options & KoSearchContext::Shadow )
+ newFormat->setShadow( 1, 1, Qt::gray );
+ else
+ newFormat->setShadow( 0, 0, QColor() );
+ }
+ if (m_replaceContext.m_optionsMask & KoSearchContext::WordByWord)
+ {
+ flags |= KoTextFormat::WordByWord;
+ newFormat->setWordByWord( (bool)(m_replaceContext.m_options & KoSearchContext::WordByWord) );
+ }
+ if (m_replaceContext.m_optionsMask & KoSearchContext::Language)
+ {
+ flags |= KoTextFormat::Language;
+ newFormat->setLanguage( m_replaceContext.m_language );
+ }
+
+
+ KCommand *cmd = m_textIterator.currentTextObject()->setFormatCommand( cursor, &lastFormat ,newFormat,flags , false, KoTextDocument::HighlightSelection );
+
+ if( cmd )
+ macroCommand()->addCommand(cmd);
+}
+
+KMacroCommand* KoFindReplace::macroCommand()
+{
+ // Create on demand, to avoid making an empty command
+ if(!m_macroCmd)
+ m_macroCmd = new KMacroCommand(i18n("Replace Text"));
+ return m_macroCmd;
+}
+
+void KoFindReplace::setActiveWindow()
+{
+ KDialogBase* dialog = m_find ? m_find->findNextDialog() : m_replace->replaceNextDialog();
+ if ( dialog )
+ dialog->setActiveWindow();
+}
+
+/*int KoFindReplace::numMatches() const
+{
+ return m_find->numMatches();
+}
+
+int KoFindReplace::numReplacements() const
+{
+ return m_replace->numReplacements();
+}*/
+
+////
+
+KoTextFind::KoTextFind( const QString &pattern, long options, KoFindReplace *_findReplace, QWidget *parent )
+ : KFind( pattern, options, parent),
+ m_findReplace( _findReplace)
+{
+}
+
+KoTextFind::~KoTextFind()
+{
+}
+
+bool KoTextFind::validateMatch( const QString &text, int index, int matchedlength )
+{
+ return m_findReplace->validateMatch( text, index, matchedlength );
+}
+
+KoTextReplace::KoTextReplace(const QString &pattern, const QString &replacement, long options, KoFindReplace *_findReplace, QWidget *parent )
+ : KReplace( pattern, replacement, options, parent),
+ m_findReplace( _findReplace)
+{
+}
+
+KoTextReplace::~KoTextReplace()
+{
+}
+
+bool KoTextReplace::validateMatch( const QString &text, int index, int matchedlength )
+{
+ return m_findReplace->validateMatch( text, index, matchedlength );
+}
+
+KoFormatDia::KoFormatDia( QWidget* parent, const QString & _caption, KoSearchContext *_ctx , const char* name)
+ : KDialogBase( parent, name, true, _caption, Ok|Cancel|User1 |User2 ),
+ m_ctx(_ctx)
+{
+ QWidget *page = new QWidget( this );
+ setMainWidget(page);
+ setButtonText( KDialogBase::User1, i18n("Reset") );
+ setButtonText( KDialogBase::User2, i18n("Clear") );
+
+ connect( this, SIGNAL( user1Clicked() ), this, SLOT(slotReset()));
+ connect( this, SIGNAL( user2Clicked() ), this, SLOT(slotClear()));
+
+ QGridLayout *m_grid = new QGridLayout( page, 15, 2, 0, 6 );
+ m_checkFamily = new QCheckBox( i18n( "Family:" ),page );
+ m_checkSize = new QCheckBox( i18n( "Size:" ), page );
+ m_checkColor = new QCheckBox( i18n( "Color:" ), page );
+ m_checkBgColor = new QCheckBox( i18n( "Background color:" ), page );
+ m_checkBold = new QCheckBox( i18n( "Bold:" ), page );
+ m_checkItalic = new QCheckBox( i18n( "Italic:" ),page );
+ m_checkShadow = new QCheckBox( i18n( "Shadow:" ), page );
+ m_checkWordByWord = new QCheckBox( i18n( "Word by word:" ), page );
+
+ m_checkUnderline = new QCheckBox( i18n( "Underline:" ), page);
+ m_underlineItem = new QComboBox( page );
+ // This has to be the type list, not the style list (we need the "no underline" case).
+ // Of course we could even have both...
+ m_underlineItem->insertStringList( KoTextFormat::underlineTypeList() );
+ m_underlineItem->setCurrentItem( (int)m_ctx->m_underline );
+
+ m_checkStrikeOut= new QCheckBox( i18n( "Strikeout:" ), page);
+
+ m_strikeOutItem = new QComboBox( page );
+ m_strikeOutItem->insertStringList( KoTextFormat::strikeOutTypeList() );
+ m_strikeOutItem->setCurrentItem( (int)m_ctx->m_strikeOut );
+
+
+ m_checkFontAttribute = new QCheckBox( i18n( "Capitalization:" ), page);
+ m_fontAttributeItem = new QComboBox( page );
+ m_fontAttributeItem->insertStringList( KoTextFormat::fontAttributeList() );
+ m_fontAttributeItem->setCurrentItem( (int)m_ctx->m_attribute );
+
+ m_checkLanguage = new QCheckBox( i18n( "Language:" ), page);
+ m_languageItem = new QComboBox( page );
+ m_languageItem->insertStringList( KoGlobal::listOfLanguages() );
+ m_languageItem->setCurrentText( KoGlobal::languageFromTag( m_ctx->m_language ) );
+
+
+ m_checkVertAlign = new QCheckBox( i18n( "Vertical alignment:" ), page );
+
+ m_familyItem = new KFontCombo(page);
+ m_familyItem->setCurrentFont(m_ctx->m_family);
+
+ m_sizeItem = new QSpinBox( 4, 100, 1, page );
+ m_sizeItem->setValue( m_ctx->m_size );
+
+ m_colorItem = new KColorButton( page );
+ m_colorItem->setColor( m_ctx->m_color );
+
+ m_bgColorItem = new KColorButton( page );
+ m_bgColorItem->setColor( m_ctx->m_backGroundColor);
+
+
+
+ QButtonGroup *grpBold = new QButtonGroup( 1, QGroupBox::Vertical, page );
+ grpBold->setRadioButtonExclusive( TRUE );
+ grpBold->layout();
+ m_boldYes=new QRadioButton( i18n("Yes"), grpBold );
+ m_boldNo=new QRadioButton( i18n("No"), grpBold );
+
+ QButtonGroup *grpItalic = new QButtonGroup( 1, QGroupBox::Vertical, page );
+ grpItalic->setRadioButtonExclusive( TRUE );
+ grpItalic->layout();
+ m_italicYes=new QRadioButton( i18n("Yes"), grpItalic );
+ m_italicNo=new QRadioButton( i18n("No"), grpItalic );
+
+ QButtonGroup *grpShadow = new QButtonGroup( 1, QGroupBox::Vertical, page );
+ grpShadow->setRadioButtonExclusive( TRUE );
+ grpShadow->layout();
+ m_shadowYes=new QRadioButton( i18n("Yes"), grpShadow );
+ m_shadowNo=new QRadioButton( i18n("No"), grpShadow );
+
+ QButtonGroup *grpWordByWord = new QButtonGroup( 1, QGroupBox::Vertical, page );
+ grpWordByWord->setRadioButtonExclusive( TRUE );
+ grpWordByWord->layout();
+ m_wordByWordYes=new QRadioButton( i18n("Yes"), grpWordByWord );
+ m_wordByWordNo=new QRadioButton( i18n("No"), grpWordByWord );
+
+
+ m_vertAlignItem = new QComboBox( false, page );
+ m_vertAlignItem->insertItem( i18n( "Normal" ), -1 );
+ m_vertAlignItem->insertItem( i18n( "Subscript" ), -1 );
+ m_vertAlignItem->insertItem( i18n( "Superscript" ), -1 );
+ m_vertAlignItem->setCurrentItem( (int)m_ctx->m_vertAlign );
+
+ m_grid->addWidget( m_checkFamily, 1, 0 );
+ m_grid->addWidget( m_checkSize, 2, 0 );
+ m_grid->addWidget( m_checkColor, 3, 0 );
+ m_grid->addWidget( m_checkBgColor, 4, 0);
+ m_grid->addWidget( m_checkBold, 5, 0 );
+ m_grid->addWidget( m_checkItalic, 6, 0 );
+ m_grid->addWidget( m_checkStrikeOut, 7, 0 );
+ m_grid->addWidget( m_checkUnderline, 8, 0 );
+ m_grid->addWidget( m_checkVertAlign, 9, 0 );
+ m_grid->addWidget( m_checkShadow, 10, 0 );
+ m_grid->addWidget( m_checkWordByWord, 11, 0 );
+ m_grid->addWidget( m_checkFontAttribute, 12, 0 );
+
+ m_grid->addWidget( m_familyItem, 1, 1 );
+ m_grid->addWidget( m_sizeItem, 2, 1 );
+ m_grid->addWidget( m_colorItem, 3, 1 );
+ m_grid->addWidget( m_bgColorItem, 4, 1);
+ m_grid->addWidget( grpBold, 5, 1 );
+ m_grid->addWidget( grpItalic, 6, 1 );
+
+ m_grid->addWidget( m_strikeOutItem, 7, 1 );
+ m_grid->addWidget( m_underlineItem, 8, 1 );
+
+ m_grid->addWidget( m_vertAlignItem, 9, 1 );
+ m_grid->addWidget( grpShadow, 10, 1 );
+ m_grid->addWidget( grpWordByWord, 11, 1 );
+
+ m_grid->addWidget( m_fontAttributeItem, 12, 1);
+
+ m_grid->addWidget( m_checkLanguage, 13, 0);
+ m_grid->addWidget( m_languageItem, 13, 1);
+
+ KSeparator *tmpSep = new KSeparator( page );
+ m_grid->addMultiCellWidget( tmpSep, 14, 14, 0, 1 );
+
+ // signals and slots connections
+ QObject::connect( m_checkFamily, SIGNAL( toggled( bool ) ), m_familyItem, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkSize, SIGNAL( toggled( bool ) ), m_sizeItem, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkColor, SIGNAL( toggled( bool ) ), m_colorItem, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkBgColor, SIGNAL( toggled( bool ) ), m_bgColorItem, SLOT( setEnabled( bool ) ) );
+
+ QObject::connect( m_checkBold, SIGNAL( toggled( bool ) ), m_boldYes, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkItalic, SIGNAL( toggled( bool ) ), m_italicYes, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkStrikeOut, SIGNAL( toggled( bool ) ), m_strikeOutItem, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkShadow, SIGNAL( toggled( bool ) ), m_shadowYes, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkWordByWord, SIGNAL( toggled( bool ) ), m_wordByWordYes, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkFontAttribute, SIGNAL( toggled( bool ) ), m_fontAttributeItem, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkLanguage, SIGNAL( toggled( bool ) ), m_languageItem, SLOT( setEnabled( bool ) ) );
+
+
+ QObject::connect( m_checkBold, SIGNAL( toggled( bool ) ), m_boldNo, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkItalic, SIGNAL( toggled( bool ) ), m_italicNo, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkShadow, SIGNAL( toggled( bool ) ), m_shadowNo, SLOT( setEnabled( bool ) ) );
+ QObject::connect( m_checkWordByWord, SIGNAL( toggled( bool ) ), m_wordByWordNo, SLOT( setEnabled( bool ) ) );
+
+
+ QObject::connect( m_checkVertAlign, SIGNAL( toggled( bool ) ), m_vertAlignItem, SLOT( setEnabled( bool ) ) );
+
+ QObject::connect( m_checkUnderline, SIGNAL( toggled( bool ) ), m_underlineItem, SLOT( setEnabled( bool ) ) );
+
+ slotReset();
+}
+
+void KoFormatDia::slotClear()
+{
+ m_ctx->m_optionsMask = 0;
+ m_ctx->m_options = 0;
+ slotReset();
+}
+
+void KoFormatDia::slotReset()
+{
+ m_checkFamily->setChecked( m_ctx->m_optionsMask & KoSearchContext::Family );
+ m_familyItem->setEnabled(m_checkFamily->isChecked());
+
+ m_checkSize->setChecked( m_ctx->m_optionsMask & KoSearchContext::Size );
+ m_sizeItem->setEnabled(m_checkSize->isChecked());
+
+ m_checkColor->setChecked( m_ctx->m_optionsMask & KoSearchContext::Color );
+ m_colorItem->setEnabled(m_checkColor->isChecked());
+
+ m_checkBgColor->setChecked( m_ctx->m_optionsMask & KoSearchContext::BgColor );
+ m_bgColorItem->setEnabled(m_checkBgColor->isChecked());
+
+
+ m_checkBold->setChecked( m_ctx->m_optionsMask & KoSearchContext::Bold );
+ m_boldYes->setEnabled(m_checkBold->isChecked());
+ m_boldNo->setEnabled(m_checkBold->isChecked());
+
+ m_checkShadow->setChecked( m_ctx->m_optionsMask & KoSearchContext::Shadow );
+ m_shadowYes->setEnabled(m_checkShadow->isChecked());
+ m_shadowNo->setEnabled(m_checkShadow->isChecked());
+
+ m_checkWordByWord->setChecked( m_ctx->m_optionsMask & KoSearchContext::WordByWord );
+ m_wordByWordYes->setEnabled(m_checkWordByWord->isChecked());
+ m_wordByWordNo->setEnabled(m_checkWordByWord->isChecked());
+
+
+ m_checkStrikeOut->setChecked( m_ctx->m_optionsMask & KoSearchContext::StrikeOut );
+ m_strikeOutItem->setEnabled( m_checkStrikeOut->isChecked());
+
+
+ m_checkItalic->setChecked( m_ctx->m_optionsMask & KoSearchContext::Italic );
+ m_italicNo->setEnabled(m_checkItalic->isChecked());
+ m_italicYes->setEnabled(m_checkItalic->isChecked());
+
+ m_checkUnderline->setChecked( m_ctx->m_optionsMask & KoSearchContext::Underline );
+ m_underlineItem->setEnabled(m_checkUnderline->isChecked());
+
+ m_checkVertAlign->setChecked( m_ctx->m_optionsMask & KoSearchContext::VertAlign );
+ m_vertAlignItem->setEnabled(m_checkVertAlign->isChecked());
+
+ m_checkFontAttribute->setChecked( m_ctx->m_optionsMask & KoSearchContext::Attribute );
+ m_fontAttributeItem->setEnabled(m_checkFontAttribute->isChecked());
+
+
+ m_checkLanguage->setChecked( m_ctx->m_optionsMask & KoSearchContext::Language );
+ m_languageItem->setEnabled(m_checkLanguage->isChecked());
+
+
+ if (m_ctx->m_options & KoSearchContext::Bold)
+ m_boldYes->setChecked( true );
+ else
+ m_boldNo->setChecked( true );
+
+ if (m_ctx->m_options & KoSearchContext::Italic)
+ m_italicYes->setChecked( true );
+ else
+ m_italicNo->setChecked( true );
+
+ if (m_ctx->m_options & KoSearchContext::Shadow)
+ m_shadowYes->setChecked( true );
+ else
+ m_shadowNo->setChecked( true );
+
+ if (m_ctx->m_options & KoSearchContext::WordByWord)
+ m_wordByWordYes->setChecked( true );
+ else
+ m_wordByWordNo->setChecked( true );
+
+}
+
+void KoFormatDia::ctxOptions( )
+{
+ long optionsMask = 0;
+ long options = 0;
+ if ( m_checkFamily->isChecked() )
+ optionsMask |= KoSearchContext::Family;
+ if ( m_checkSize->isChecked() )
+ optionsMask |= KoSearchContext::Size;
+ if ( m_checkColor->isChecked() )
+ optionsMask |= KoSearchContext::Color;
+ if ( m_checkBgColor->isChecked() )
+ optionsMask |= KoSearchContext::BgColor;
+ if ( m_checkBold->isChecked() )
+ optionsMask |= KoSearchContext::Bold;
+ if ( m_checkItalic->isChecked() )
+ optionsMask |= KoSearchContext::Italic;
+ if ( m_checkUnderline->isChecked() )
+ optionsMask |= KoSearchContext::Underline;
+ if ( m_checkVertAlign->isChecked() )
+ optionsMask |= KoSearchContext::VertAlign;
+ if ( m_checkStrikeOut->isChecked() )
+ optionsMask |= KoSearchContext::StrikeOut;
+ if ( m_checkShadow->isChecked() )
+ optionsMask |= KoSearchContext::Shadow;
+ if ( m_checkWordByWord->isChecked() )
+ optionsMask |= KoSearchContext::WordByWord;
+ if ( m_checkLanguage->isChecked() )
+ optionsMask |= KoSearchContext::Language;
+
+
+ if ( m_boldYes->isChecked() )
+ options |= KoSearchContext::Bold;
+ if ( m_italicYes->isChecked() )
+ options |= KoSearchContext::Italic;
+ if ( m_shadowYes->isChecked() )
+ options |= KoSearchContext::Shadow;
+ if ( m_wordByWordYes->isChecked() )
+ options |= KoSearchContext::WordByWord;
+
+
+ m_ctx->m_optionsMask = optionsMask;
+ m_ctx->m_family = m_familyItem->currentText();
+ m_ctx->m_size = m_sizeItem->cleanText().toInt();
+ m_ctx->m_color = m_colorItem->color();
+ m_ctx->m_backGroundColor = m_bgColorItem->color();
+ m_ctx->m_vertAlign = (KoTextFormat::VerticalAlignment)m_vertAlignItem->currentItem();
+ m_ctx->m_underline = (KoTextFormat::UnderlineType)m_underlineItem->currentItem();
+ m_ctx->m_strikeOut = (KoTextFormat::StrikeOutType)m_strikeOutItem->currentItem();
+ m_ctx->m_attribute = (KoTextFormat::AttributeStyle)m_fontAttributeItem->currentItem();
+ m_ctx->m_language = KoGlobal::listTagOfLanguages()[m_languageItem->currentItem()];
+
+ m_ctx->m_options = options;
+}
+
+
+bool KoFindReplace::validateMatch( const QString & /*text*/, int index, int matchedlength )
+{
+ if ( !m_searchContextEnabled || !m_searchContext.m_optionsMask )
+ return true;
+ KoTextString * s = currentParag()->string();
+ for ( int i = index ; i < index+matchedlength ; ++i )
+ {
+ KoTextStringChar & ch = s->at(i);
+ KoTextFormat *format = ch.format();
+ if (m_searchContext.m_optionsMask & KoSearchContext::Bold)
+ {
+ if ( (!format->font().bold() && (m_searchContext.m_options & KoSearchContext::Bold)) || (format->font().bold() && ((m_searchContext.m_options & KoSearchContext::Bold)==0)))
+ return false;
+ }
+ if (m_searchContext.m_optionsMask & KoSearchContext::Shadow)
+ {
+ bool hasShadow = format->shadowDistanceX() != 0 || format->shadowDistanceY() != 0;
+ if ( (!hasShadow && (m_searchContext.m_options & KoSearchContext::Shadow))
+ || (hasShadow && ((m_searchContext.m_options & KoSearchContext::Shadow)==0)) )
+ return false;
+ }
+
+ if (m_searchContext.m_optionsMask & KoSearchContext::WordByWord)
+ {
+ if ( (!format->wordByWord() && (m_searchContext.m_options & KoSearchContext::WordByWord)) || (format->wordByWord() && ((m_searchContext.m_options & KoSearchContext::WordByWord)==0)))
+ return false;
+ }
+
+
+ if (m_searchContext.m_optionsMask & KoSearchContext::Size)
+ {
+ if ( format->font().pointSize() != m_searchContext.m_size )
+ return false;
+ }
+ if ( m_searchContext.m_optionsMask & KoSearchContext::Family)
+ {
+ if (format->font().family() != m_searchContext.m_family)
+ return false;
+ }
+ if ( m_searchContext.m_optionsMask & KoSearchContext::Color)
+ {
+ if (format->color() != m_searchContext.m_color)
+ return false;
+ }
+ if ( m_searchContext.m_optionsMask & KoSearchContext::BgColor)
+ {
+ if (format->textBackgroundColor() != m_searchContext.m_backGroundColor)
+ return false;
+ }
+
+ if ( m_searchContext.m_optionsMask & KoSearchContext::Italic)
+ {
+ if ( (!format->font().italic() && (m_searchContext.m_options & KoSearchContext::Italic)) || (format->font().italic() && ((m_searchContext.m_options & KoSearchContext::Italic)==0)))
+ return false;
+
+ }
+ if ( m_searchContext.m_optionsMask & KoSearchContext::Underline)
+ {
+ if ( format->underlineType() != m_searchContext.m_underline )
+ return false;
+ }
+ if ( m_searchContext.m_optionsMask & KoSearchContext::StrikeOut)
+ {
+ if ( format->strikeOutType() != m_searchContext.m_strikeOut )
+ return false;
+ }
+
+ if ( m_searchContext.m_optionsMask & KoSearchContext::VertAlign)
+ {
+ if ( format->vAlign() != m_searchContext.m_vertAlign )
+ return false;
+ }
+ if ( m_searchContext.m_optionsMask & KoSearchContext::Language)
+ {
+ if ( format->language() != m_searchContext.m_language )
+ return false;
+ }
+
+ if ( m_searchContext.m_optionsMask & KoSearchContext::Attribute)
+ {
+ if ( format->attributeFont() != m_searchContext.m_attribute )
+ return false;
+ }
+
+ }
+ return true;
+}
+
+bool KoFindReplace::shouldRestart()
+{
+ if ( m_find )
+ return m_find->shouldRestart( true /*since text is editable*/, m_doCounting );
+ else
+ return m_replace->shouldRestart( true /*since text is editable*/, m_doCounting );
+}
+
+#include "KoSearchDia.moc"
diff --git a/lib/kotext/KoSearchDia.h b/lib/kotext/KoSearchDia.h
new file mode 100644
index 00000000..c83d235d
--- /dev/null
+++ b/lib/kotext/KoSearchDia.h
@@ -0,0 +1,338 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+ Copyright (C) 2001, S.R.Haque <srhaque@iee.org>
+ Copyright (C) 2001, David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kosearchdia_h
+#define kosearchdia_h
+
+#include <kfind.h>
+#include <kfinddialog.h>
+#include <kreplace.h>
+#include <kreplacedialog.h>
+#include "KoTextIterator.h"
+#include "KoTextFormat.h"
+
+#include <qcolor.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <koffice_export.h>
+
+class QPushButton;
+class QRadioButton;
+class QGridLayout;
+class QCheckBox;
+class QComboBox;
+class QSpinBox;
+class KColorButton;
+class KMacroCommand;
+class KoTextView;
+class KoTextObject;
+class KCommand;
+class KoTextDocument;
+class KoFindReplace;
+class KFontCombo;
+class KoTextCursor;
+//
+// This class represents the KWord-specific search extension items, and also the
+// corresponding replace items.
+//
+class KOTEXT_EXPORT KoSearchContext
+{
+public:
+
+ // Options.
+
+ typedef enum
+ {
+ Family = 1 * KFindDialog::MinimumUserOption,
+ Color = 2 * KFindDialog::MinimumUserOption,
+ Size = 4 * KFindDialog::MinimumUserOption,
+ Bold = 8 * KFindDialog::MinimumUserOption,
+ Italic = 16 * KFindDialog::MinimumUserOption,
+ Underline = 32 * KFindDialog::MinimumUserOption,
+ VertAlign = 64 * KFindDialog::MinimumUserOption,
+ StrikeOut = 128 * KFindDialog::MinimumUserOption,
+ BgColor = 256 * KFindDialog::MinimumUserOption,
+ Shadow = 512 * KFindDialog::MinimumUserOption,
+ WordByWord = 1024 * KFindDialog::MinimumUserOption,
+ Attribute = 2048 * KFindDialog::MinimumUserOption,
+ Language = 4096 * KFindDialog::MinimumUserOption
+ } Options;
+
+ KoSearchContext();
+ ~KoSearchContext();
+
+ QString m_family;
+ QColor m_color;
+ QColor m_backGroundColor;
+ int m_size;
+ KoTextFormat::VerticalAlignment m_vertAlign;
+ KoTextFormat::UnderlineType m_underline;
+ KoTextFormat::StrikeOutType m_strikeOut;
+ KoTextFormat::AttributeStyle m_attribute;
+
+ QStringList m_strings; // history
+ long m_optionsMask;
+ long m_options;
+ QString m_language;
+};
+
+//
+// This class represents the GUI elements that correspond to KWSearchContext.
+//
+class KoSearchContextUI : public QObject
+{
+ Q_OBJECT
+public:
+ KoSearchContextUI( KoSearchContext *ctx, QWidget *parent );
+ void setCtxOptions( long options );
+ void setCtxHistory( const QStringList & history );
+ KoSearchContext *context() const { return m_ctx;}
+ bool optionSelected() const { return m_bOptionsShown;}
+private slots:
+ void slotShowOptions();
+
+private:
+ KoSearchContext *m_ctx;
+ QGridLayout *m_grid;
+ bool m_bOptionsShown;
+ QPushButton *m_btnShowOptions;
+ QWidget *m_parent;
+};
+
+//
+// This class is the KWord search dialog.
+//
+class KOTEXT_EXPORT KoSearchDia:
+ public KFindDialog
+{
+ Q_OBJECT
+
+public:
+ KoSearchDia( QWidget *parent, const char *name, KoSearchContext *find, bool hasSelection, bool hasCursor );
+ KoSearchContext * searchContext() {
+ return m_findUI->context();
+ }
+ bool optionSelected() const { return m_findUI->optionSelected();}
+
+protected slots:
+ void slotOk();
+
+private:
+ KoSearchContextUI *m_findUI;
+};
+
+//
+// This class is the kotext replace dialog.
+//
+class KOTEXT_EXPORT KoReplaceDia:
+ public KReplaceDialog
+{
+ Q_OBJECT
+
+public:
+
+ KoReplaceDia( QWidget *parent, const char *name, KoSearchContext *find, KoSearchContext *replace, bool hasSelection, bool hasCursor );
+ KoSearchContext * searchContext() {
+ return m_findUI->context();
+ }
+ KoSearchContext * replaceContext() {
+ return m_replaceUI->context();
+ }
+ bool optionFindSelected() const { return m_findUI->optionSelected();}
+ bool optionReplaceSelected() const { return m_replaceUI->optionSelected();}
+protected slots:
+ void slotOk();
+
+private:
+
+ KoSearchContextUI *m_findUI;
+ KoSearchContextUI *m_replaceUI;
+};
+
+/**
+ * Reimplement KFind to provide our own validateMatch - for the formatting options
+ */
+class KoTextFind : public KFind
+{
+ Q_OBJECT
+public:
+ KoTextFind(const QString &pattern, long options, KoFindReplace *_findReplace, QWidget *parent = 0);
+ ~KoTextFind();
+ virtual bool validateMatch( const QString &text, int index, int matchedlength );
+private:
+ KoFindReplace * m_findReplace;
+};
+
+/**
+ * Reimplement KoReplace to provide our own validateMatch - for the formatting options
+ */
+class KoTextReplace : public KReplace
+{
+ Q_OBJECT
+public:
+ KoTextReplace(const QString &pattern, const QString &replacement, long options, KoFindReplace *_findReplace, QWidget *parent = 0);
+ ~KoTextReplace();
+ virtual bool validateMatch( const QString &text, int index, int matchedlength );
+private:
+ KoFindReplace * m_findReplace;
+};
+
+/**
+ * This class implements the 'find' functionality ( the "search next, prompt" loop )
+ * and the 'replace' functionality. Same class, to allow centralizing the findNext() code.
+ */
+class KOTEXT_EXPORT KoFindReplace : public QObject
+{
+ Q_OBJECT
+public:
+ KoFindReplace( QWidget * parent, KoSearchDia * dialog, const QValueList<KoTextObject *> & lstObject, KoTextView* textView );
+ KoFindReplace( QWidget * parent, KoReplaceDia * dialog, const QValueList<KoTextObject *> & lstObject, KoTextView* textView );
+ ~KoFindReplace();
+
+ KoTextParag *currentParag() {
+ return m_textIterator.currentParag();
+ }
+
+ bool isReplace() const { return m_replace != 0L; }
+
+ bool shouldRestart();
+
+ //int numMatches() const;
+ //int numReplacements() const;
+
+ /** Look for the next match. Returns false if we're finished. */
+ bool findNext();
+
+ /** Look for the previous match. Returns false if we're finished. */
+ bool findPrevious();
+
+ /** Bring to front (e.g. when menuitem called twice) */
+ void setActiveWindow();
+
+ /** Emit undo/redo command for the last replacements made. */
+ void emitUndoRedo();
+
+ virtual void emitNewCommand(KCommand *) = 0;
+
+ /**
+ * Highlight a match.
+ */
+ virtual void highlightPortion(KoTextParag * parag, int index, int length, KoTextDocument *textdoc, KDialogBase* dialog) = 0;
+
+ /** For KoTextFind and KoTextReplace */
+ bool validateMatch( const QString &text, int index, int matchedlength );
+
+protected:
+ void replaceWithAttribut( KoTextCursor * cursor, int index );
+ KMacroCommand* macroCommand();
+ long options() const;
+ void setOptions(long opt);
+ void removeHighlight();
+ bool needData() const { return m_find ? m_find->needData() : m_replace->needData(); }
+ void setData( const QString& data, int startPos = -1 ) {
+ if ( m_find ) m_find->setData( data, startPos );
+ else m_replace->setData( data, startPos );
+ }
+
+protected slots:
+ void slotFindNext();
+ void optionsChanged();
+ void dialogClosed();
+ void highlight( const QString &text, int matchingIndex, int matchingLength );
+ void replace( const QString &text, int replacementIndex, int replacedLength, int searchLength );
+ void slotCurrentParagraphModified( int, int, int );
+
+private:
+ void connectFind( KFind* find );
+
+ // Only one of those two will be set
+ KoTextFind * m_find;
+ KoTextReplace * m_replace;
+
+ KoSearchContext m_searchContext;
+ KoSearchContext m_replaceContext;
+ bool m_searchContextEnabled;
+ bool m_doCounting;
+ bool m_bInit;
+ bool m_currentParagraphModified;
+
+ KMacroCommand *m_macroCmd;
+ int m_offset;
+ int m_matchingIndex; // can be removed once we use kde-3.2 (for kfind::index())
+
+ KoTextIterator m_textIterator;
+
+ // For removing the last highlight
+ KoTextObject* m_lastTextObjectHighlighted;
+};
+
+/**
+ * The separate dialog that pops up to ask for which formatting options
+ * should be used to match text, or when replacing text.
+ */
+class KoFormatDia: public KDialogBase
+{
+ Q_OBJECT
+public:
+ KoFormatDia( QWidget* parent, const QString & _caption, KoSearchContext *_ctx, const char* name=0L);
+ //apply to parameter to context !
+ void ctxOptions( );
+
+protected slots:
+ void slotReset();
+ void slotClear();
+private:
+ QCheckBox *m_checkFamily;
+ QCheckBox *m_checkSize;
+ QCheckBox *m_checkColor;
+ QCheckBox *m_checkBgColor;
+ QCheckBox *m_checkBold;
+ QCheckBox *m_checkItalic;
+ QCheckBox *m_checkShadow;
+ QCheckBox *m_checkWordByWord;
+ QCheckBox *m_checkUnderline;
+ QCheckBox *m_checkVertAlign;
+ QCheckBox *m_checkStrikeOut;
+ QCheckBox *m_checkFontAttribute;
+ QCheckBox *m_checkLanguage;
+
+ KFontCombo *m_familyItem;
+ QSpinBox *m_sizeItem;
+ KColorButton *m_colorItem;
+ KColorButton *m_bgColorItem;
+ QRadioButton *m_boldYes;
+ QRadioButton *m_boldNo;
+ QRadioButton *m_italicYes;
+ QRadioButton *m_italicNo;
+ QRadioButton *m_shadowYes;
+ QRadioButton *m_shadowNo;
+ QRadioButton *m_wordByWordYes;
+ QRadioButton *m_wordByWordNo;
+
+ QComboBox *m_vertAlignItem;
+ QComboBox *m_underlineItem;
+ QComboBox *m_strikeOutItem;
+ QComboBox *m_fontAttributeItem;
+ QComboBox *m_languageItem;
+ KoSearchContext *m_ctx;
+};
+
+#endif
diff --git a/lib/kotext/KoSpell.cpp b/lib/kotext/KoSpell.cpp
new file mode 100644
index 00000000..63f5a37b
--- /dev/null
+++ b/lib/kotext/KoSpell.cpp
@@ -0,0 +1,246 @@
+/* This file is part of KOffice
+ Copyright (C) 2004 Zack Rusin <zack@kde.org>
+
+ Original version written by David Sweet <dsweet@kde.org> and
+ Wolfram Diestel <wolfram@steloj.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "config.h"
+#include "KoSpell.h"
+
+#include "KoTextObject.h"
+#include "KoTextParag.h"
+#include "KoTextIterator.h"
+
+#include <kspell2/broker.h>
+#include <kspell2/filter.h>
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include <qtimer.h>
+
+//#define DEBUG_SPELL
+
+using namespace KSpell2;
+
+class KoSpell::Private
+{
+public:
+ KoTextIterator *itr;
+ KoTextParag *parag;
+ bool dialog;
+ bool needsIncrement;
+ KoTextDocument *lastTxtDocument;
+};
+
+KoSpell::KoSpell( const Broker::Ptr& broker, QObject *parent,
+ const char *name )
+ : BackgroundChecker( broker, parent, name )
+{
+ d = new Private;
+ d->parag = 0;
+ d->itr = 0;
+ d->dialog = false;
+ d->needsIncrement = false;
+ d->lastTxtDocument = 0;
+}
+
+KoSpell::~KoSpell()
+{
+ delete d;
+}
+
+bool KoSpell::check( KoTextIterator *itr, bool dialog )
+{
+ bool ret = false;
+
+ if ( !itr )
+ return ret;
+
+ d->itr = itr;
+ connect( d->itr, SIGNAL( currentParagraphDeleted() ), SLOT( slotCurrentParagraphDeleted() ) );
+ d->lastTxtDocument = d->itr->currentTextObject()->textDocument();
+ d->needsIncrement = false;
+ ret = !d->itr->atEnd();
+ d->dialog = dialog;
+
+ return ret;
+}
+
+bool KoSpell::check( KoTextParag *parag )
+{
+ if ( checking() || !parag )
+ return false;
+
+ d->parag = parag;
+ d->lastTxtDocument = d->parag->textDocument();
+
+ start();
+
+ return true;
+}
+
+bool KoSpell::checkWordInParagraph( KoTextParag *parag, int pos,
+ QString& foundWord, int& start )
+{
+ if ( !parag ) {
+ start = -1;
+ return false;
+ }
+
+ d->parag = parag;
+ d->lastTxtDocument = d->parag->textDocument();
+ QString str = parag->string()->stringToSpellCheck();
+ /// ##### do we really need to create a Filter every time?
+ Filter filter;
+ filter.setBuffer( str );
+ filter.setSettings( broker()->settings() );
+ Word w = filter.wordAtPosition( pos );
+ foundWord = w.word;
+ start = w.start;
+#ifdef DEBUG_SPELL
+ kdDebug()<<"KoSpell: WORD IS " << w.word << ", pos = "<< pos
+ << ", start = "<< w.start <<endl;
+#endif
+ return checkWord( w.word );
+}
+
+QString KoSpell::getMoreText()
+{
+#ifdef DEBUG_SPELL
+ kdDebug()<<"getMoreText: dialog = " << d->dialog << ", itr = "
+ << d->itr << ", atEnd = "
+ << ( ( d->itr ) ? d->itr->atEnd() : true )
+ << " d->parag=" << d->parag
+ << endl;
+#endif
+
+ if ( d->needsIncrement && d->itr && !d->itr->atEnd() ) {
+ ++( *d->itr );
+ if ( !d->itr->atEnd() )
+ d->lastTxtDocument = d->itr->currentTextObject()->textDocument();
+ }
+
+ if ( d->itr && d->itr->atEnd() )
+ return QString::null;
+
+ if ( !d->dialog && !d->itr ) {
+ QString str = d->parag ? d->parag->string()->stringToSpellCheck() : QString::null;
+ if ( !str.isEmpty() )
+ emit aboutToFeedText();
+ return str;
+ }
+
+ d->needsIncrement = true;
+
+ QString text = d->itr->currentText();
+ d->parag = d->itr->currentParag();
+
+ emit aboutToFeedText();
+ //kdDebug()<<"here 2"<<endl;
+ while ( !d->dialog && d->parag ) {
+ if ( d->parag->string()->needsSpellCheck() &&
+ d->parag->length() > 1 )
+ break;
+ ++(*d->itr);
+ if ( d->itr->atEnd() ) {
+ d->needsIncrement = false;
+ return QString::null;
+ }
+ d->parag = d->itr->currentParag();
+ d->lastTxtDocument = d->parag->textDocument();
+ text = d->itr->currentText();
+ }
+
+ d->parag->string()->setNeedsSpellCheck( false );
+
+ return text;
+}
+
+void KoSpell::finishedCurrentFeed()
+{
+ emit paragraphChecked( d->parag );
+}
+
+KoTextParag *KoSpell::currentParag() const
+{
+ return d->parag;
+}
+
+KoTextObject *KoSpell::currentTextObject() const
+{
+ if ( d->itr && !d->itr->atEnd() )
+ return d->itr->currentTextObject();
+ return 0;
+}
+
+int KoSpell::currentStartIndex() const
+{
+ if ( d->itr && !d->itr->atEnd() )
+ return d->itr->currentStartIndex();
+ return 0;
+}
+
+void KoSpell::slotCurrentParagraphDeleted()
+{
+#ifdef DEBUG_SPELL
+ kdDebug() << "KoSpell::slotCurrentParagraphDeleted itr=" << d->itr << endl;
+#endif
+ stop();
+ if ( d->itr ) {
+ d->needsIncrement = false;
+ d->parag = d->itr->currentParag();
+#ifdef DEBUG_SPELL
+ kdDebug() << "KoSpell::slotCurrentParagraphDeleted d->parag=" << d->parag << endl;
+#endif
+ start();
+ } else {
+ d->parag = 0;
+ }
+}
+
+bool KoSpell::checking() const
+{
+#ifdef DEBUG_SPELL
+ kdDebug()<< "KoSpell::checking: itr=" << d->itr
+ << ", atEnd=" << ( ( d->itr ) ? d->itr->atEnd() : false )
+ << ", filter()->atEnd()=" << filter()->atEnd()
+ << endl;
+#endif
+ if ( d->itr ) {
+ if ( d->itr->atEnd() &&
+ filter()->atEnd() )
+ return false;
+ else
+ return true;
+ } else
+ return !filter()->atEnd();
+}
+
+KoTextDocument * KoSpell::textDocument() const
+{
+ return d->lastTxtDocument;
+}
+
+KSpell2::Settings * KoSpell::settings() const
+{
+ return broker()->settings();
+}
+
+#include "KoSpell.moc"
diff --git a/lib/kotext/KoSpell.h b/lib/kotext/KoSpell.h
new file mode 100644
index 00000000..b359b1aa
--- /dev/null
+++ b/lib/kotext/KoSpell.h
@@ -0,0 +1,105 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 1997 David Sweet <dsweet@kde.org>
+ Copyright (C) 2004 Zack Rusin <zack@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+#ifndef KOSPELL_H
+#define KOSPELL_H
+
+#include <qobject.h>
+#include <qstringlist.h>
+#include <qstring.h>
+
+#include <kspell2/backgroundchecker.h>
+#include <koffice_export.h>
+class KoTextIterator;
+class KoTextParag;
+class KoTextObject;
+class KoTextDocument;
+namespace KSpell2
+{
+ class Settings;
+}
+
+/**
+ * KOffice spell checking object
+ * Used for both spell-checking-with-a-dialog (directly)
+ * and background spell-checking (via KoBgSpellCheck).
+ *
+ * @author Zack Rusin <zack@kde.org>, David Sweet <dsweet@kde.org>
+ * @see KSpell2::Broker
+ */
+class KOTEXT_EXPORT KoSpell : public KSpell2::BackgroundChecker
+{
+ Q_OBJECT
+
+public:
+ KoSpell( const KSpell2::Broker::Ptr& broker, QObject *parent =0,
+ const char *name =0 );
+ /**
+ * The destructor instructs ISpell/ASpell to write out the personal
+ * dictionary and then terminates ISpell/ASpell.
+ */
+ virtual ~KoSpell();
+
+ /**
+ * Returns whether the speller is already checking something.
+ */
+ bool checking() const;
+
+ /**
+ * Spellchecks a buffer of many words in plain text
+ * format.
+ *
+ * The buffer is not modified. The signal done() will be
+ * sent when @ref check() is finished.
+ */
+ virtual bool check( KoTextIterator *itr, bool dialog = false );
+ virtual bool check( KoTextParag *parag );
+ virtual bool checkWordInParagraph( KoTextParag *parag, int pos,
+ QString& word, int& start );
+
+ KoTextParag *currentParag() const;
+ KoTextObject *currentTextObject() const;
+ int currentStartIndex() const;
+
+ KoTextDocument *textDocument() const;
+
+ /**
+ * Returns the Settings object used by the broker.
+ */
+ KSpell2::Settings *settings() const;
+
+public slots:
+ void slotCurrentParagraphDeleted();
+
+signals:
+ /**
+ * Emitted after a paragraph has been checked.
+ */
+ void paragraphChecked( KoTextParag* );
+
+ void aboutToFeedText();
+
+protected:
+ virtual QString getMoreText();
+ virtual void finishedCurrentFeed();
+
+private:
+ class Private;
+ Private *d;
+};
+#endif
diff --git a/lib/kotext/KoStyleCollection.cpp b/lib/kotext/KoStyleCollection.cpp
new file mode 100644
index 00000000..39ce4b99
--- /dev/null
+++ b/lib/kotext/KoStyleCollection.cpp
@@ -0,0 +1,254 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoStyleCollection.h"
+#include "KoOasisContext.h"
+#include "KoParagCounter.h"
+
+#include <KoOasisStyles.h>
+#include <KoGenStyles.h>
+#include <KoXmlWriter.h>
+#include <KoXmlNS.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+
+#include <qdom.h>
+
+KoStyleCollection::KoStyleCollection()
+ : KoUserStyleCollection( "paragsty" )
+{
+}
+
+KoStyleCollection::~KoStyleCollection()
+{
+}
+
+int KoStyleCollection::loadOasisStyles( KoOasisContext& context )
+{
+ QStringList followingStyles;
+ QValueVector<QDomElement> userStyles = context.oasisStyles().userStyles();
+ bool defaultStyleDeleted = false;
+ int stylesLoaded = 0;
+ const unsigned int nStyles = userStyles.count();
+ for (unsigned int item = 0; item < nStyles; item++) {
+ QDomElement styleElem = userStyles[item];
+ Q_ASSERT( !styleElem.isNull() );
+
+ if ( styleElem.attributeNS( KoXmlNS::style, "family", QString::null ) != "paragraph" )
+ continue;
+
+ if( !defaultStyleDeleted ) { // we are going to import at least one style.
+ KoParagStyle *s = defaultStyle();
+ //kdDebug() << "loadOasisStyles looking for Standard, to delete it. Found " << s << endl;
+ if(s) // delete the standard style.
+ removeStyle(s);
+ defaultStyleDeleted = true;
+ }
+
+ KoParagStyle *sty = new KoParagStyle( QString::null );
+ // Load the style
+ sty->loadStyle( styleElem, context );
+ // Style created, now let's try to add it
+ const int oldStyleCount = count();
+ sty = addStyle( sty );
+ // the real value of followingStyle is set below after loading all styles
+ sty->setFollowingStyle( sty );
+
+ kdDebug() << " Loaded style " << sty->name() << endl;
+
+ if ( count() > oldStyleCount )
+ {
+ const QString following = styleElem.attributeNS( KoXmlNS::style, "next-style-name", QString::null );
+ followingStyles.append( following );
+ ++stylesLoaded;
+ }
+ else
+ kdWarning() << "Found duplicate style declaration, overwriting former " << sty->name() << endl;
+ }
+
+ if( followingStyles.count() != styleList().count() ) {
+ kdDebug() << "Ouch, " << followingStyles.count() << " following-styles, but "
+ << styleList().count() << " styles in styleList" << endl;
+ }
+
+ unsigned int i=0;
+ for( QValueList<QString>::ConstIterator it = followingStyles.begin(); it != followingStyles.end(); ++it, ++i ) {
+ const QString followingStyleName = *it;
+ if ( !followingStyleName.isEmpty() ) {
+ KoParagStyle * style = findStyle( followingStyleName );
+ if ( style )
+ styleAt(i)->setFollowingStyle( style );
+ }
+ }
+
+ // TODO the same thing for style inheritance (style:parent-style-name) and setParentStyle()
+
+ Q_ASSERT( defaultStyle() );
+ return stylesLoaded;
+}
+
+void KoStyleCollection::saveOasis( KoGenStyles& styles, int styleType, KoSavingContext& context ) const
+{
+ // In order to reduce the bloat, we define that the first style (usually Standard)
+ // is the "parent" (reference) for the others.
+ // ## This is mostly a hack due to lack of proper style inheritance.
+ // Once that's implemented, default to 'styles derive from Standard', but save normally.
+ QString refStyleName;
+
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_styleList.begin(), styleEnd = m_styleList.end() ; styleIt != styleEnd ; ++styleIt ) {
+ KoParagStyle* style = static_cast<KoParagStyle *>( *styleIt );
+ style->saveStyle( styles, styleType, refStyleName, context );
+ kdDebug() << k_funcinfo << "Saved style " << style->displayName() << " to OASIS format as " << style->name() << endl;
+ if ( refStyleName.isEmpty() ) // i.e. first style
+ refStyleName = style->name();
+ }
+ // Now edit the kogenstyle and set the next-style-name. This works here
+ // because the style's m_name is already unique so there's no risk of
+ // "two styles being only different due to their following-style"; the
+ // display-name will also be different, and will ensure they get two kogenstyles.
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_styleList.begin(), styleEnd = m_styleList.end() ; styleIt != styleEnd ; ++styleIt ) {
+ KoParagStyle* style = static_cast<KoParagStyle *>( *styleIt );
+ if ( style->followingStyle() && style->followingStyle() != style ) {
+ const QString fsname = style->followingStyle()->name();
+ KoGenStyle* gs = styles.styleForModification( style->name() );
+ Q_ASSERT( gs );
+ if ( gs )
+ gs->addAttribute( "style:next-style-name", fsname );
+ }
+ }
+}
+
+void KoStyleCollection::importStyles( const KoStyleCollection& styleCollection )
+{
+ const QValueList<KoUserStyle *> styles = styleCollection.styleList();
+ QMap<QString, QString> followStyle;
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = styles.begin(), styleEnd = styles.end() ; styleIt != styleEnd ; ++styleIt ) {
+ KoParagStyle* p = static_cast<KoParagStyle *>( *styleIt );
+ KoParagStyle* style = new KoParagStyle( *p );
+ if ( style->followingStyle() ) {
+ followStyle.insert( style->name(), style->followingStyle()->name() );
+ }
+ style = addStyle( style );
+ }
+
+ QMapIterator<QString, QString> itFollow = followStyle.begin();
+ for ( ; itFollow != followStyle.end(); ++itFollow )
+ {
+ KoParagStyle * style = findStyle(itFollow.key());
+ const QString followingStyleName = followStyle[ itFollow.key() ];
+ KoParagStyle * styleFollow = findStyle(followingStyleName);
+ //kdDebug() << " " << style << " " << itFollow.key() << ": followed by " << styleFollow << " (" << followingStyleName << ")" << endl;
+ Q_ASSERT(styleFollow);
+ if ( styleFollow )
+ style->setFollowingStyle( styleFollow );
+ else
+ style->setFollowingStyle( style );
+ }
+}
+
+void KoStyleCollection::saveOasisOutlineStyles( KoXmlWriter& writer ) const
+{
+ bool first = true;
+ QValueVector<KoParagStyle *> styles = outlineStyles();
+ for ( int i = 0 ; i < 10 ; ++i ) {
+ if ( styles[i] ) {
+ if ( first ) {
+ writer.startElement( "text:outline-style" );
+ first = false;
+ }
+ writer.startElement( "text:outline-level-style" );
+ styles[i]->paragLayout().counter->saveOasisListLevel( writer, true, true );
+ writer.endElement();
+ }
+ }
+ if ( !first )
+ writer.endElement(); // text:outline-style
+}
+
+QValueVector<KoParagStyle *> KoStyleCollection::outlineStyles() const
+{
+ QValueVector<KoParagStyle *> lst( 10, 0 );
+ for ( int i = 0 ; i < 10 ; ++i ) {
+ KoParagStyle* style = outlineStyleForLevel( i );
+ if ( style )
+ lst[i] = style;
+ }
+ return lst;
+}
+
+
+KoParagStyle* KoStyleCollection::outlineStyleForLevel( int level ) const
+{
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_styleList.begin(), styleEnd = m_styleList.end() ; styleIt != styleEnd ; ++styleIt ) {
+ KoParagStyle* style = static_cast<KoParagStyle *>( *styleIt );
+ if ( style->isOutline() && style->paragLayout().counter )
+ {
+ int styleLevel = style->paragLayout().counter->depth();
+ if ( styleLevel == level )
+ return style;
+ }
+ }
+ return 0;
+}
+
+KoParagStyle* KoStyleCollection::numberedStyleForLevel( int level ) const
+{
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_styleList.begin(), styleEnd = m_styleList.end() ; styleIt != styleEnd ; ++styleIt ) {
+ KoParagStyle* style = static_cast<KoParagStyle *>( *styleIt );
+ KoParagCounter* counter = style->paragLayout().counter;
+ if ( !style->isOutline() && counter
+ && counter->numbering() != KoParagCounter::NUM_NONE
+ && !counter->isBullet() )
+ {
+ int styleLevel = counter->depth();
+ if ( styleLevel == level )
+ return style;
+ }
+ }
+ return 0;
+}
+
+KoParagStyle* KoStyleCollection::defaultStyle() const
+{
+ return findStyle( "Standard" ); // includes the fallback to first style
+}
+
+#ifndef NDEBUG
+void KoStyleCollection::printDebug() const
+{
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_styleList.begin(), styleEnd = m_styleList.end() ; styleIt != styleEnd ; ++styleIt ) {
+ KoParagStyle* style = static_cast<KoParagStyle *>( *styleIt );
+
+ // short version:
+ // kdDebug() << style << " " << style->name() << " " << style->displayName() << " followingStyle=" << style->followingStyle() << endl;
+
+ kdDebug() << "Style " << style << " " << style->name() << " isOutline=" << style->isOutline() << endl;
+ kdDebug() << " format: " << style->format().key() <<endl;
+ static const char * const s_align[] = { "Auto", "Left", "Right", "ERROR", "HCenter", "ERR", "ERR", "ERR", "Justify", };
+ kdDebug() << " align: " << s_align[(Qt::AlignmentFlags)style->paragLayout().alignment] << endl;
+ if ( style->paragLayout().counter )
+ kdDebug() << " counter level=" << style->paragLayout().counter->depth() << endl;
+
+ kdDebug() << " following style: " << style->followingStyle() << " "
+ << ( style->followingStyle() ? style->followingStyle()->name() : QString::null ) << endl;
+
+ }
+}
+#endif
diff --git a/lib/kotext/KoStyleCollection.h b/lib/kotext/KoStyleCollection.h
new file mode 100644
index 00000000..c3cc7770
--- /dev/null
+++ b/lib/kotext/KoStyleCollection.h
@@ -0,0 +1,122 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kostyle_h
+#define kostyle_h
+
+#include <qdom.h>
+#include <qvaluevector.h>
+#include "KoParagStyle.h"
+#include "KoUserStyleCollection.h"
+
+class KoGenStyles;
+class KoParagStyle;
+class KoOasisContext;
+class KoSavingContext;
+
+struct KoStyleChangeDef {
+ KoStyleChangeDef() {
+ paragLayoutChanged = -1;
+ formatChanged = -1;
+ }
+ KoStyleChangeDef( int parag, int format) {
+ paragLayoutChanged = parag;
+ formatChanged = format;
+ };
+ int paragLayoutChanged;
+ int formatChanged;
+};
+typedef QMap<KoParagStyle *, KoStyleChangeDef> KoStyleChangeDefMap;
+
+/// TODO rename to KoParagStyleCollection - or should char styles be part of it too?
+class KOTEXT_EXPORT KoStyleCollection : public KoUserStyleCollection
+{
+public:
+ KoStyleCollection();
+ ~KoStyleCollection();
+
+ //const QPtrList<KoParagStyle> & styleList() const { return m_styleList; }
+
+ // compat method, TODO: remove
+ QStringList translatedStyleNames() const { return displayNameList(); }
+
+ /**
+ * See KoUserStyleCollection::addStyle.
+ * Overloaded for convenience.
+ */
+ KoParagStyle* addStyle( KoParagStyle* sty ) {
+ return static_cast<KoParagStyle*>( KoUserStyleCollection::addStyle( sty ) );
+ }
+
+ /**
+ * Find style based on the internal name @p name.
+ * Overloaded for convenience.
+ */
+ KoParagStyle* findStyle( const QString & name ) const {
+ return static_cast<KoParagStyle*>( KoUserStyleCollection::findStyle( name, QString::fromLatin1( "Standard" ) ) );
+ }
+
+ /**
+ * Find style based on the display name @p displayName.
+ * Overloaded for convenience.
+ */
+ KoParagStyle* findStyleByDisplayName( const QString & name ) const {
+ return static_cast<KoParagStyle*>( KoUserStyleCollection::findStyleByDisplayName( name ) );
+ }
+
+ /**
+ * Return style number @p i.
+ */
+ KoParagStyle* styleAt( int i ) { return static_cast<KoParagStyle*>( m_styleList[i] ); }
+
+
+ /// Import a number of styles (e.g. loaded from another document)
+ void importStyles( const KoStyleCollection& styleList );
+
+ /// Loads the entire style collection, in the OASIS OpenDocument format
+ /// @return the number of new styles loaded
+ int loadOasisStyles( KoOasisContext& context );
+
+ /// Save the entire style collection in the OASIS OpenDocument format
+ /// @p styleType is the STYLE_* value for this style.
+ void saveOasis( KoGenStyles& styles, int styleType, KoSavingContext& context ) const;
+
+ /// Save the text:outline-style element, mostly for OOo.
+ void saveOasisOutlineStyles( KoXmlWriter& writer ) const;
+
+ /// @return the list of outline styles
+ QValueVector<KoParagStyle *> outlineStyles() const;
+
+ /// @return the [first] outline style for a given level. Can be 0 if not found.
+ KoParagStyle* outlineStyleForLevel( int level ) const;
+
+ /// @return the [first] non-outline numbered style for a given level. Can be 0 if not found.
+ KoParagStyle* numberedStyleForLevel( int level ) const;
+
+ /// @return the "default" format. There isn't really such a notion at the moment
+ /// (how would the user define it? etc.), and it's usually not needed, except
+ /// in very specific cases (e.g. in increaseOutlineLevel() for "not a heading")
+ /// The current implementation is to return Standard or the first one in the collection.
+ KoParagStyle* defaultStyle() const;
+
+#ifndef NDEBUG
+ void printDebug() const;
+#endif
+};
+
+#endif
diff --git a/lib/kotext/KoStyleManager.cpp b/lib/kotext/KoStyleManager.cpp
new file mode 100644
index 00000000..77162a4e
--- /dev/null
+++ b/lib/kotext/KoStyleManager.cpp
@@ -0,0 +1,794 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+
+#include "KoStyleCollection.h"
+#include "KoStyleManager.h"
+#include "KoStyleManager.moc"
+#include <KoFontDia.h>
+#include <KoGlobal.h>
+
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kdebug.h>
+
+#include <qtabwidget.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qcheckbox.h>
+#include <qlayout.h>
+
+/******************************************************************/
+/* Class: KoStyleManager */
+/******************************************************************/
+
+/* keep 2 qlists with the styles.
+ 1 of the origs, another with the changed ones (in order of the stylesList)
+ When an orig entry is empty and the other is not, a new one has to be made,
+ when the orig is present and the other is not, the orig has to be deleted.
+ Otherwise all changes are copied from the changed ones to the origs on OK.
+ OK updates the doc if styles are deleted.
+ The dtor frees all the changed ones.
+*/
+/* Months later the above seems SOO stupid.. Just should have created a small class
+ containing the orig and the copy and an enum plus some simple methods..
+ Well; just keep that for those loonly uninspiring days :) (Thomas Z)
+*/
+class KoStyleManagerPrivate
+{
+public:
+ KoStylePreview* preview;
+ QCheckBox* cbIncludeInTOC;
+};
+
+KoStyleManager::KoStyleManager( QWidget *_parent, KoUnit::Unit unit,
+ const KoStyleCollection& styles, const QString & activeStyleName,
+ int flags )
+ : KDialogBase( _parent, "Stylist", true,
+ i18n("Style Manager"),
+ KDialogBase::Ok | KDialogBase::Cancel | KDialogBase::Apply )
+{
+ d = new KoStyleManagerPrivate;
+ //setWFlags(getWFlags() || WDestructiveClose);
+ m_currentStyle =0L;
+ noSignals=true;
+ m_origStyles.setAutoDelete(false);
+ m_changedStyles.setAutoDelete(false);
+ setupWidget(styles); // build the widget with the buttons and the list selector.
+ addGeneralTab( flags );
+ KoStyleFontTab * fontTab = new KoStyleFontTab( m_tabs );
+ addTab( fontTab );
+
+ KoStyleParagTab *newTab = new KoStyleParagTab( m_tabs );
+ newTab->setWidget( new KoIndentSpacingWidget( unit, -1/*no limit*/,newTab ) );
+ addTab( newTab );
+
+ newTab = new KoStyleParagTab( m_tabs );
+ newTab->setWidget( new KoParagAlignWidget( true, newTab ) );
+ addTab( newTab );
+
+ newTab = new KoStyleParagTab( m_tabs );
+ KoParagLayoutWidget *decorations = new KoParagDecorationWidget( newTab );
+ decorations->layout()->setMargin(KDialog::marginHint());
+ newTab->setWidget( decorations );
+ addTab( newTab );
+
+ newTab = new KoStyleParagTab( m_tabs );
+ newTab->setWidget( new KoParagCounterWidget( false , newTab ) );
+ addTab( newTab );
+
+ newTab = new KoStyleParagTab( m_tabs );
+ newTab->setWidget( new KoParagTabulatorsWidget( unit, -1, newTab ) );
+ addTab( newTab );
+
+ QListBoxItem * item = m_stylesList->findItem( activeStyleName );
+ m_stylesList->setCurrentItem( item ? m_stylesList->index(item) : 0 );
+
+ noSignals=false;
+ switchStyle();
+ setInitialSize( QSize( 600, 570 ) );
+}
+
+KoStyleManager::~KoStyleManager()
+{
+ for (unsigned int i =0 ; m_origStyles.count() > i ; i++) {
+ KoParagStyle *orig = m_origStyles.at(i);
+ KoParagStyle *changed = m_changedStyles.at(i);
+ if( orig && changed && orig != changed ) // modified style, we can delete the changed one now that changes have been applied
+ delete changed;
+ }
+
+ delete d;
+}
+
+void KoStyleManager::addTab( KoStyleManagerTab * tab )
+{
+ m_tabsList.append( tab );
+ m_tabs->insertTab( tab, tab->tabName() );
+ tab->layout()->activate();
+}
+
+void KoStyleManager::setupWidget(const KoStyleCollection& styleCollection)
+{
+ QFrame * frame1 = makeMainWidget();
+ QGridLayout *frame1Layout = new QGridLayout( frame1, 0, 0, // auto
+ 0, KDialog::spacingHint() );
+ numStyles = styleCollection.count();
+ m_stylesList = new QListBox( frame1, "stylesList" );
+ m_stylesList->insertStringList( styleCollection.displayNameList() );
+
+ const QValueList<KoUserStyle*> styleList = styleCollection.styleList();
+ for ( QValueList<KoUserStyle *>::const_iterator it = styleList.begin(), end = styleList.end();
+ it != end ; ++it )
+ {
+ KoParagStyle* style = static_cast<KoParagStyle *>( *it );
+ m_origStyles.append( style );
+ m_changedStyles.append( style );
+ m_styleOrder<< style->name();
+ }
+
+ frame1Layout->addMultiCellWidget( m_stylesList, 0, 0, 0, 1 );
+
+
+ m_moveUpButton = new QPushButton( frame1, "moveUpButton" );
+ m_moveUpButton->setIconSet( SmallIconSet( "up" ) );
+ connect( m_moveUpButton, SIGNAL( clicked() ), this, SLOT( moveUpStyle() ) );
+ frame1Layout->addWidget( m_moveUpButton, 1, 1 );
+
+ m_moveDownButton = new QPushButton( frame1, "moveDownButton" );
+ m_moveDownButton->setIconSet( SmallIconSet( "down" ) );
+ connect( m_moveDownButton, SIGNAL( clicked() ), this, SLOT( moveDownStyle() ) );
+ frame1Layout->addWidget( m_moveDownButton, 1, 0 );
+
+
+ m_deleteButton = new QPushButton( frame1, "deleteButton" );
+ m_deleteButton->setText( i18n( "&Delete" ) );
+ connect( m_deleteButton, SIGNAL( clicked() ), this, SLOT( deleteStyle() ) );
+
+ frame1Layout->addWidget( m_deleteButton, 2, 1 );
+
+ m_newButton = new QPushButton( frame1, "newButton" );
+ m_newButton->setText( i18n( "New" ) );
+ connect( m_newButton, SIGNAL( clicked() ), this, SLOT( addStyle() ) );
+
+ frame1Layout->addWidget( m_newButton, 2, 0 );
+
+ m_tabs = new QTabWidget( frame1 );
+ frame1Layout->addMultiCellWidget( m_tabs, 0, 2, 2, 2 );
+
+ connect( m_stylesList, SIGNAL( selectionChanged() ), this, SLOT( switchStyle() ) );
+ connect( m_tabs, SIGNAL( currentChanged ( QWidget * ) ), this, SLOT( switchTabs() ) );
+}
+
+void KoStyleManager::addGeneralTab( int flags ) {
+ QWidget *tab = new QWidget( m_tabs );
+
+ QGridLayout *tabLayout = new QGridLayout( tab );
+ tabLayout->setSpacing( KDialog::spacingHint() );
+ tabLayout->setMargin( KDialog::marginHint() );
+
+ m_nameString = new QLineEdit( tab );
+ m_nameString->resize(m_nameString->sizeHint() );
+ connect( m_nameString, SIGNAL( textChanged( const QString &) ), this, SLOT( renameStyle(const QString &) ) );
+
+ tabLayout->addWidget( m_nameString, 0, 1 );
+
+ QLabel *nameLabel = new QLabel( tab );
+ nameLabel->setText( i18n( "Name:" ) );
+ nameLabel->resize(nameLabel->sizeHint());
+ nameLabel->setAlignment( AlignRight | AlignVCenter );
+
+ tabLayout->addWidget( nameLabel, 0, 0 );
+
+ m_styleCombo = new QComboBox( FALSE, tab, "styleCombo" );
+
+ tabLayout->addWidget( m_styleCombo, 1, 1 );
+
+ QLabel *nextStyleLabel = new QLabel( tab );
+ nextStyleLabel->setText( i18n( "Next style:" ) );
+ nextStyleLabel->setAlignment( AlignRight | AlignVCenter );
+
+ tabLayout->addWidget( nextStyleLabel, 1, 0 );
+
+ m_inheritCombo = new QComboBox( FALSE, tab, "inheritCombo" );
+ tabLayout->addWidget( m_inheritCombo, 2, 1 );
+
+ QLabel *inheritStyleLabel = new QLabel( tab );
+ inheritStyleLabel->setText( i18n( "Inherit style:" ) );
+ inheritStyleLabel->setAlignment( AlignRight | AlignVCenter );
+
+ tabLayout->addWidget( inheritStyleLabel, 2, 0 );
+
+ int row = 3;
+
+ if ( flags & ShowIncludeInToc ) {
+ d->cbIncludeInTOC = new QCheckBox( i18n("Include in table of contents"), tab );
+ tabLayout->addMultiCellWidget( d->cbIncludeInTOC, row, row, 0, 1 );
+ ++row;
+ } else {
+ d->cbIncludeInTOC = 0;
+ }
+
+ d->preview = new KoStylePreview( i18n( "Preview" ), i18n( "The quick brown fox jumps over the lazy dog. And, what about the cat, one may ask? Well, the cat is playing cards with the mouse, the bird and the fish. It is, to say the least a hell of a party!" ), tab, "stylepreview" );
+
+ tabLayout->addMultiCellWidget( d->preview, row, row, 0, 1 );
+
+ m_tabs->insertTab( tab, i18n( "General" ) );
+
+ m_inheritCombo->insertItem( i18n("<None>"));
+
+ for ( unsigned int i = 0; i < m_stylesList->count(); i++ ) {
+ m_styleCombo->insertItem( m_stylesList->text(i));
+ m_inheritCombo->insertItem( m_stylesList->text(i));
+ }
+
+}
+
+void KoStyleManager::switchStyle() {
+ kdDebug(32500) << "KoStyleManager::switchStyle noSignals=" << noSignals << endl;
+ if(noSignals) return;
+ noSignals=true;
+
+ if(m_currentStyle !=0L)
+ save();
+
+ m_currentStyle = 0L;
+ int num = styleIndex( m_stylesList->currentItem() );
+ kdDebug(32500) << "KoStyleManager::switchStyle switching to " << num << endl;
+ if(m_origStyles.at(num) == m_changedStyles.at(num)) {
+ m_currentStyle = new KoParagStyle( *m_origStyles.at(num) );
+ m_changedStyles.take(num);
+ m_changedStyles.insert(num, m_currentStyle);
+ } else {
+ m_currentStyle = m_changedStyles.at(num);
+ }
+ updateGUI();
+
+ noSignals=false;
+}
+
+void KoStyleManager::switchTabs()
+{
+ // Called when the user switches tabs
+ // We call save() to update our style, for the preview on the 1st tab
+ save();
+ updatePreview();
+}
+
+// Return the index of the a style from its position in the GUI
+// (e.g. in m_stylesList or m_styleCombo). This index is used in
+// the m_origStyles and m_changedStyles lists.
+// The reason for the difference is that a deleted style is removed
+// from the GUI but not from the internal lists.
+int KoStyleManager::styleIndex( int pos ) {
+ int p = 0;
+ for(unsigned int i=0; i < m_changedStyles.count(); i++) {
+ // Skip deleted styles, they're no in m_stylesList anymore
+ KoParagStyle * style = m_changedStyles.at(i);
+ if ( !style ) continue;
+ if ( p == pos )
+ return i;
+ ++p;
+ }
+ kdWarning() << "KoStyleManager::styleIndex no style found at pos " << pos << endl;
+
+#ifdef __GNUC_
+#warning implement undo/redo
+#endif
+
+ return 0;
+}
+
+// Update the GUI so that it shows m_currentStyle
+void KoStyleManager::updateGUI() {
+ kdDebug(32500) << "KoStyleManager::updateGUI m_currentStyle=" << m_currentStyle << " " << m_currentStyle->name() << endl;
+ QPtrListIterator<KoStyleManagerTab> it( m_tabsList );
+ for ( ; it.current() ; ++it )
+ {
+ it.current()->setStyle( m_currentStyle );
+ it.current()->update();
+ }
+
+ m_nameString->setText(m_currentStyle->displayName());
+
+ QString followingName = m_currentStyle->followingStyle() ? m_currentStyle->followingStyle()->displayName() : QString::null;
+ kdDebug(32500) << "KoStyleManager::updateGUI updating combo to " << followingName << endl;
+ for ( int i = 0; i < m_styleCombo->count(); i++ ) {
+ if ( m_styleCombo->text( i ) == followingName ) {
+ m_styleCombo->setCurrentItem( i );
+ kdDebug(32500) << "found at " << i << endl;
+ break;
+ }
+ }
+
+ QString inheritName = m_currentStyle->parentStyle() ? m_currentStyle->parentStyle()->displayName() : QString::null;
+ kdDebug(32500) << "KoStyleManager::updateGUI updating combo to " << inheritName << endl;
+ for ( int i = 0; i < m_inheritCombo->count(); i++ ) {
+ if ( m_inheritCombo->text( i ) == inheritName ) {
+ m_inheritCombo->setCurrentItem( i );
+ kdDebug(32500) << "found at " << i << endl;
+ break;
+ }
+ else
+ m_inheritCombo->setCurrentItem( 0 );//none !!!
+ }
+
+ if ( d->cbIncludeInTOC )
+ d->cbIncludeInTOC->setChecked( m_currentStyle->isOutline() );
+
+ // update delete button (can't delete first style);
+ m_deleteButton->setEnabled(m_stylesList->currentItem() != 0);
+
+ m_moveUpButton->setEnabled(m_stylesList->currentItem() != 0);
+ m_moveDownButton->setEnabled(m_stylesList->currentItem()!=(int)m_stylesList->count()-1);
+
+ updatePreview();
+}
+
+void KoStyleManager::updatePreview()
+{
+ d->preview->setStyle(m_currentStyle);
+ d->preview->repaint(true);
+}
+
+void KoStyleManager::save() {
+ if(m_currentStyle) {
+ // save changes from UI to object.
+ QPtrListIterator<KoStyleManagerTab> it( m_tabsList );
+ for ( ; it.current() ; ++it )
+ it.current()->save();
+
+ // Rename the style - only if it's actually been renamed.
+ if ( m_currentStyle->name() != m_nameString->text() &&
+ m_currentStyle->displayName() != m_nameString->text() )
+ {
+ m_currentStyle->setDisplayName( m_nameString->text() );
+ }
+
+ int indexNextStyle = styleIndex( m_styleCombo->currentItem() );
+ m_currentStyle->setFollowingStyle( m_origStyles.at( indexNextStyle ) ); // point to orig, not changed! (#47377)
+
+ if ( m_inheritCombo->currentItem() == 0 ) //<None> selected
+ m_currentStyle->setParentStyle(0);
+ else
+ {
+ int indexParentStyle=styleIndex( m_inheritCombo->currentItem()-1 );
+ KoParagStyle *parent=m_origStyles.at(indexParentStyle);
+ if( parent==0L ) //If not found in the orig list (means its a new Style) look in the changeStyles list
+ parent=m_changedStyles.at(indexParentStyle);
+
+ m_currentStyle->setParentStyle( parent );
+ }
+
+ if ( d->cbIncludeInTOC )
+ m_currentStyle->setOutline( d->cbIncludeInTOC->isChecked() );
+ }
+}
+
+KoParagStyle * KoStyleManager::style( const QString & _name )
+{
+ for(unsigned int i=0; i < m_changedStyles.count(); i++) {
+ // Skip deleted styles, they're no in m_stylesList anymore
+ KoParagStyle * style = m_changedStyles.at(i);
+ if ( !style ) continue;
+ if ( style->name() == _name)
+ return style;
+ }
+ return 0;
+}
+
+QString KoStyleManager::generateUniqueName()
+{
+ int count = 1;
+ QString name;
+ do {
+ name = "new" + QString::number( count++ );
+ } while ( style( name ) );
+ return name;
+}
+
+
+void KoStyleManager::addStyle() {
+ save();
+
+ QString str = i18n( "New Style Template (%1)" ).arg(numStyles++);
+ if ( m_currentStyle )
+ {
+ m_currentStyle = new KoParagStyle( *m_currentStyle ); // Create a new style, initializing from the current one
+ m_currentStyle->setDisplayName( str );
+ m_currentStyle->setName( generateUniqueName() );
+ }
+ else
+ m_currentStyle = new KoParagStyle( str );
+ m_currentStyle->setFollowingStyle( m_currentStyle ); // #45868
+
+ noSignals=true;
+ m_origStyles.append(0L);
+ m_changedStyles.append(m_currentStyle);
+ m_stylesList->insertItem( str );
+ m_styleCombo->insertItem( str );
+ m_inheritCombo->insertItem( str );
+ m_stylesList->setCurrentItem( m_stylesList->count() - 1 );
+ noSignals=false;
+ m_styleOrder << m_currentStyle->name();
+
+ updateGUI();
+}
+
+void KoStyleManager::updateFollowingStyle( KoParagStyle *s )
+{
+ for ( KoParagStyle* p = m_changedStyles.first(); p != 0L; p = m_changedStyles.next() )
+ {
+ if ( p->followingStyle() == s)
+ p->setFollowingStyle(p);
+ }
+
+}
+
+void KoStyleManager::updateInheritStyle( KoParagStyle *s )
+{
+ for ( KoParagStyle* p = m_changedStyles.first(); p != 0L; p = m_changedStyles.next() )
+ {
+ //when we remove style, we must replace inherite style to 0L
+ //when parent style was removed.
+ //##########Laurent change inherited style attribute
+ if ( p->parentStyle() == s)
+ p->setParentStyle(0L);
+ }
+
+}
+
+void KoStyleManager::deleteStyle() {
+
+ unsigned int cur = styleIndex( m_stylesList->currentItem() );
+ unsigned int curItem = m_stylesList->currentItem();
+ QString name = m_stylesList->currentText();
+ KoParagStyle *s = m_changedStyles.at(cur);
+ m_styleOrder.remove( s->name());
+ updateFollowingStyle( s );
+ updateInheritStyle( s );
+ Q_ASSERT( s == m_currentStyle );
+ delete s;
+ m_currentStyle = 0L;
+ m_changedStyles.remove(cur);
+ m_changedStyles.insert(cur,0L);
+
+ // Done with noSignals still false, so that when m_stylesList changes the current item
+ // we display it automatically
+ m_stylesList->removeItem(curItem);
+ m_styleCombo->removeItem(curItem);
+
+ m_inheritCombo->listBox()->removeItem( m_inheritCombo->listBox()->index(m_inheritCombo->listBox()->findItem(name )));
+
+ numStyles--;
+ m_stylesList->setSelected( m_stylesList->currentItem(), true );
+}
+
+void KoStyleManager::moveUpStyle()
+{
+ Q_ASSERT( m_currentStyle );
+ if ( m_currentStyle )
+ save();
+ const QString currentStyleName = m_currentStyle->name();
+ const QString currentStyleDisplayName = m_stylesList->currentText();
+ int pos2 = m_styleOrder.findIndex( currentStyleName );
+ if ( pos2 != -1 )
+ {
+ m_styleOrder.remove( m_styleOrder.at(pos2));
+ m_styleOrder.insert( m_styleOrder.at(pos2-1), currentStyleName);
+ }
+
+ int pos = m_stylesList->currentItem();
+ noSignals=true;
+ m_stylesList->changeItem( m_stylesList->text( pos-1 ), pos );
+ m_styleCombo->changeItem( m_stylesList->text( pos-1 ), pos );
+
+ m_stylesList->changeItem( currentStyleDisplayName, pos-1 );
+ m_styleCombo->changeItem( currentStyleDisplayName, pos-1 );
+
+ m_stylesList->setCurrentItem( m_stylesList->currentItem() );
+ noSignals=false;
+
+ updateGUI();
+}
+
+void KoStyleManager::moveDownStyle()
+{
+ Q_ASSERT( m_currentStyle );
+ if ( m_currentStyle )
+ save();
+ const QString currentStyleName = m_currentStyle->name();
+ const QString currentStyleDisplayName = m_stylesList->currentText();
+ int pos2 = m_styleOrder.findIndex( currentStyleName );
+ if ( pos2 != -1 )
+ {
+ m_styleOrder.remove( m_styleOrder.at(pos2));
+ m_styleOrder.insert( m_styleOrder.at(pos2+1), currentStyleName);
+ }
+
+ int pos = m_stylesList->currentItem();
+ noSignals=true;
+ m_stylesList->changeItem( m_stylesList->text( pos+1 ), pos );
+ m_styleCombo->changeItem( m_stylesList->text( pos+1 ), pos );
+ m_stylesList->changeItem( currentStyleDisplayName, pos+1 );
+ m_styleCombo->changeItem( currentStyleDisplayName, pos+1 );
+ m_stylesList->setCurrentItem( m_stylesList->currentItem() );
+ noSignals=false;
+
+ updateGUI();
+}
+
+void KoStyleManager::slotOk() {
+ save();
+ apply();
+ KDialogBase::slotOk();
+}
+
+void KoStyleManager::slotApply() {
+ save();
+ apply();
+ KDialogBase::slotApply();
+}
+
+void KoStyleManager::apply() {
+ noSignals=true;
+ KoStyleChangeDefMap styleChanged;
+ QPtrList<KoParagStyle> removeStyle;
+ for (unsigned int i =0 ; m_origStyles.count() > i ; i++) {
+ if(m_origStyles.at(i) == 0L && m_changedStyles.at(i)!=0L) { // newly added style
+ kdDebug(32500) << "adding new " << m_changedStyles.at(i)->name() << " (" << i << ")" << endl;
+ KoParagStyle *tmp = addStyleTemplate(m_changedStyles.take(i));
+ m_changedStyles.insert(i, tmp);
+ } else if(m_changedStyles.at(i) == 0L && m_origStyles.at(i) != 0L) { // deleted style
+ kdDebug(32500) << "deleting orig " << m_origStyles.at(i)->name() << " (" << i << ")" << endl;
+
+ KoParagStyle *orig = m_origStyles.at(i);
+ //applyStyleChange( orig, -1, -1 );
+ KoStyleChangeDef tmp( -1,-1);
+ styleChanged.insert( orig, tmp);
+
+ removeStyle.append( orig );
+ // Note that the style is never deleted (we'll need it for undo/redo purposes)
+
+ } else if(m_changedStyles.at(i) != 0L && m_origStyles.at(i)!=0L) { // simply updated style
+ kdDebug(32500) << "update style " << m_changedStyles.at(i)->name() << " (" << i << ")" << endl;
+ KoParagStyle *orig = m_origStyles.at(i);
+ KoParagStyle *changed = m_changedStyles.at(i);
+ if ( orig != changed )
+ {
+ int paragLayoutChanged = orig->paragLayout().compare( changed->paragLayout() );
+ int formatChanged = orig->format().compare( changed->format() );
+ //kdDebug(32500) << "old format " << orig->format().key() << " pointsize " << orig->format().pointSizeFloat() << endl;
+ //kdDebug(32500) << "new format " << changed->format().key() << " pointsize " << changed->format().pointSizeFloat() << endl;
+
+ // Copy everything from changed to orig
+ *orig = *changed;
+
+ // Apply the change selectively - i.e. only what changed
+ //applyStyleChange( orig, paragLayoutChanged, formatChanged );
+ if ( formatChanged != 0 || paragLayoutChanged != 0 ) {
+ KoStyleChangeDef tmp(paragLayoutChanged, formatChanged);
+ styleChanged.insert( orig, tmp );
+ }
+
+ }
+
+ }// else
+ // kdDebug(32500) << "has not changed " << m_changedStyles.at(i)->name() << " (" << i << ")" << endl;
+ }
+
+ applyStyleChange( styleChanged );
+
+ KoParagStyle *tmp = 0L;
+ for ( tmp = removeStyle.first(); tmp ;tmp = removeStyle.next() )
+ removeStyleTemplate( tmp );
+
+ updateStyleListOrder( m_styleOrder );
+ updateAllStyleLists();
+ noSignals=false;
+}
+
+void KoStyleManager::renameStyle(const QString &theText) {
+ if(noSignals) return;
+ noSignals=true;
+
+ int index = m_stylesList->currentItem();
+ kdDebug(32500) << "KoStyleManager::renameStyle " << index << " to " << theText << endl;
+
+ // rename only in the GUI, not even in the underlying objects (save() does it).
+ kdDebug(32500) << "KoStyleManager::renameStyle before " << m_styleCombo->currentText() << endl;
+ m_styleCombo->changeItem( theText, index );
+ m_inheritCombo->changeItem( theText, index+1 );
+ //m_styleOrder[index]=theText; // not needed anymore, we use internal names
+ kdDebug(32500) << "KoStyleManager::renameStyle after " << m_styleCombo->currentText() << endl;
+ m_stylesList->changeItem( theText, index );
+
+ // Check how many styles with that name we have now
+ int synonyms = 0;
+ for ( int i = 0; i < m_styleCombo->count(); i++ ) {
+ if ( m_styleCombo->text( i ) == m_stylesList->currentText() )
+ ++synonyms;
+ }
+ Q_ASSERT( synonyms > 0 ); // should have found 'index' at least !
+ noSignals=false;
+ // Can't close the dialog if two styles have the same name
+ bool state=!theText.isEmpty() && (synonyms == 1);
+ enableButtonOK(state );
+ enableButtonApply(state);
+ m_deleteButton->setEnabled(state&&(m_stylesList->currentItem() != 0));
+ m_newButton->setEnabled(state);
+ m_stylesList->setEnabled( state );
+ if ( state )
+ {
+ m_moveUpButton->setEnabled(m_stylesList->currentItem() != 0);
+ m_moveDownButton->setEnabled(m_stylesList->currentItem()!=(int)m_stylesList->count()-1);
+ }
+ else
+ {
+ m_moveUpButton->setEnabled(false);
+ m_moveDownButton->setEnabled(false);
+ }
+}
+
+/////////////
+
+KoStyleParagTab::KoStyleParagTab( QWidget * parent )
+ : KoStyleManagerTab( parent )
+{
+ ( new QVBoxLayout( this ) )->setAutoAdd( true );
+ m_widget = 0L;
+}
+
+void KoStyleParagTab::update()
+{
+ m_widget->display( m_style->paragLayout() );
+}
+
+void KoStyleParagTab::save()
+{
+ m_widget->save( m_style->paragLayout() );
+}
+
+void KoStyleParagTab::setWidget( KoParagLayoutWidget * widget )
+{
+ m_widget = widget;
+}
+
+void KoStyleParagTab::resizeEvent( QResizeEvent *e )
+{
+ QWidget::resizeEvent( e );
+ if ( m_widget ) m_widget->resize( size() );
+}
+
+KoStyleFontTab::KoStyleFontTab( QWidget * parent )
+ : KoStyleManagerTab( parent )
+{
+ ( new QVBoxLayout( this ) )->setAutoAdd( true );
+ QTabWidget *fontTabContainer = new QTabWidget( this );
+
+ m_fontTab = new KoFontTab( KFontChooser::SmoothScalableFonts, this );
+ m_decorationTab = new KoDecorationTab( this );
+ m_highlightingTab = new KoHighlightingTab( this );
+ m_layoutTab = new KoLayoutTab( true, this );
+ m_languageTab = new KoLanguageTab( 0, this );
+
+ fontTabContainer->addTab( m_fontTab, i18n( "Font" ) );
+ fontTabContainer->addTab( m_decorationTab, i18n( "Decoration" ) );
+ fontTabContainer->addTab( m_highlightingTab, i18n( "Highlighting" ) );
+ fontTabContainer->addTab( m_layoutTab, i18n( "Layout" ) );
+ fontTabContainer->addTab( m_languageTab, i18n( "Language" ) );
+}
+
+KoStyleFontTab::~KoStyleFontTab()
+{
+}
+
+void KoStyleFontTab::update()
+{
+ m_fontTab->setSelection( m_style->format().font() );
+ m_highlightingTab->setUnderline( m_style->format().underlineType() );
+ m_highlightingTab->setUnderlineStyle( m_style->format().underlineStyle() );
+ m_highlightingTab->setUnderlineColor( m_style->format().textUnderlineColor() );
+ m_highlightingTab->setStrikethrough( m_style->format().strikeOutType() );
+ m_highlightingTab->setStrikethroughStyle( m_style->format().strikeOutStyle() );
+ m_highlightingTab->setWordByWord( m_style->format().wordByWord() );
+ m_highlightingTab->setCapitalisation( m_style->format().attributeFont() );
+ m_decorationTab->setTextColor( m_style->format().color() );
+ m_decorationTab->setBackgroundColor( m_style->format().textBackgroundColor() );
+ m_decorationTab->setShadow( m_style->format().shadowDistanceX(), m_style->format().shadowDistanceY(), m_style->format().shadowColor() );
+ m_layoutTab->setSubSuperScript( m_style->format().vAlign(), m_style->format().offsetFromBaseLine(), m_style->format().relativeTextSize() );
+ m_layoutTab->setAutoHyphenation( m_style->format().hyphenation() );
+ m_languageTab->setLanguage( m_style->format().language() );
+/*
+#if 0
+ bool subScript = m_style->format().vAlign() == KoTextFormat::AlignSubScript;
+ bool superScript = m_style->format().vAlign() == KoTextFormat::AlignSuperScript;
+ QFont fn = m_style->format().font();
+ kdDebug()<<" fn.bold() :"<<fn.bold()<<" fn.italic():"<<fn.italic()<<endl;
+ kdDebug()<<" fn.family() :"<<fn.family()<<endl;
+ m_chooser->setFont( fn, subScript, superScript );
+ m_chooser->setColor( m_style->format().color() );
+ QColor col=m_style->format().textBackgroundColor();
+ col=col.isValid() ? col : QApplication::palette().color( QPalette::Active, QColorGroup::Base );
+ m_chooser->setBackGroundColor(col);
+
+ m_chooser->setUnderlineColor( m_style->format().textUnderlineColor());
+
+ m_chooser->setUnderlineType(m_style->format().underlineType());
+ m_chooser->setUnderlineStyle(m_style->format().underlineStyle());
+ m_chooser->setStrikeOutStyle(m_style->format().strikeOutStyle());
+ m_chooser->setStrikeOutlineType(m_style->format().strikeOutType());
+ m_chooser->setShadowText( m_style->format().shadowText());
+ m_chooser->setFontAttribute( m_style->format().attributeFont());
+ m_chooser->setWordByWord( m_style->format().wordByWord());
+ m_chooser->setRelativeTextSize( m_style->format().relativeTextSize());
+ m_chooser->setOffsetFromBaseLine( m_style->format().offsetFromBaseLine());
+ m_chooser->setLanguage( m_style->format().language());
+ m_chooser->setHyphenation( m_style->format().hyphenation());
+#endif
+*/}
+
+void KoStyleFontTab::save()
+{
+ m_style->format() = KoTextFormat( m_fontTab->getSelection(),
+ m_layoutTab->getSubSuperScript(),
+ m_decorationTab->getTextColor(),
+ m_decorationTab->getBackgroundColor(),
+ m_highlightingTab->getUnderlineColor(),
+ m_highlightingTab->getUnderline(),
+ m_highlightingTab->getUnderlineStyle(),
+ m_highlightingTab->getStrikethrough(),
+ m_highlightingTab->getStrikethroughStyle(),
+ m_highlightingTab->getCapitalisation(),
+ m_languageTab->getLanguage(),
+ m_layoutTab->getRelativeTextSize(),
+ m_layoutTab->getOffsetFromBaseline(),
+ m_highlightingTab->getWordByWord(),
+ m_layoutTab->getAutoHyphenation(),
+ m_decorationTab->getShadowDistanceX(),
+ m_decorationTab->getShadowDistanceY(),
+ m_decorationTab->getShadowColor()
+ );
+/*
+ m_style->format().setFont( m_fontTab->getSelection() );
+ m_style->format().setColor( m_decorationTab->getTextColor() );
+ if( m_decorationTab->getBackGroundColor()!=QApplication::palette().color( QPalette::Active, QColorGroup::Base ))
+ m_style->format().setTextBackgroundColor( m_decorationTab->getBackGroundColor() );
+
+ m_style->format().setTextUnderlineColor(m_chooser->underlineColor());
+ m_style->format().setUnderlineType (m_chooser->getUnderlineType());
+ m_style->format().setUnderlineStyle (m_chooser->getUnderlineStyle());
+ m_style->format().setStrikeOutStyle( m_chooser->getStrikeOutStyle() );
+ m_style->format().setStrikeOutType (m_chooser->getStrikeOutType());
+ m_style->format().setShadowText(m_chooser->getShadowText());
+ m_style->format().setWordByWord( m_chooser->getWordByWord());
+ m_style->format().setRelativeTextSize( m_chooser->getRelativeTextSize());
+ m_style->format().setAttributeFont( m_chooser->getFontAttribute());
+ m_style->format().setOffsetFromBaseLine( m_chooser->getOffsetFromBaseLine());
+ m_style->format().setVAlign( m_layoutTab->getSubSuperScript() );
+
+ m_style->format().setLanguage( m_chooser->getLanguage());
+ m_style->format().setHyphenation( m_chooser->getHyphenation());
+*/}
+
+QString KoStyleFontTab::tabName()
+{
+ return i18n("Font");
+}
diff --git a/lib/kotext/KoStyleManager.h b/lib/kotext/KoStyleManager.h
new file mode 100644
index 00000000..e6f0f57e
--- /dev/null
+++ b/lib/kotext/KoStyleManager.h
@@ -0,0 +1,185 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kostylist_h
+#define kostylist_h
+
+#include <kdialogbase.h>
+#include <qstringlist.h>
+
+#include <KoParagDia.h>
+#include <KoFontTab.h>
+#include <KoDecorationTab.h>
+#include <KoHighlightingTab.h>
+#include <KoLayoutTab.h>
+#include <KoLanguageTab.h>
+#include <KoUnit.h>
+#include <qptrlist.h>
+#include <KoStyleCollection.h>
+
+//class KoFontChooser;
+class KoParagStyle;
+class KoStyleEditor;
+class KoStyleManagerTab;
+class QCheckBox;
+class QComboBox;
+class QGridLayout;
+class QLineEdit;
+class QListBox;
+class QPushButton;
+class QTabWidget;
+class QWidget;
+class KoTextDocument;
+class KoStyleManagerPrivate;
+
+/**
+ * This class provides a dialog for editing named text styles.
+ */
+class KOTEXT_EXPORT KoStyleManager : public KDialogBase
+{
+ Q_OBJECT
+
+public:
+ enum { ShowIncludeInToc = 1 }; // bitfield for flags
+ KoStyleManager( QWidget *_parent, KoUnit::Unit unit,
+ const KoStyleCollection& styleCollection,
+ const QString & activeStyleName,
+ int flags = 0 );
+ virtual ~KoStyleManager();
+
+ virtual KoParagStyle* addStyleTemplate(KoParagStyle *style)=0;
+ //virtual void applyStyleChange( KoParagStyle * changedStyle, int paragLayoutChanged, int formatChanged )=0;
+ virtual void applyStyleChange( KoStyleChangeDefMap changed )=0;
+
+ virtual void removeStyleTemplate( KoParagStyle *style )=0;
+ virtual void updateAllStyleLists()=0;
+ virtual void updateStyleListOrder( const QStringList & list)=0;
+
+protected:
+ void updateFollowingStyle( KoParagStyle *s );
+ void updateInheritStyle( KoParagStyle *s );
+ void setupWidget(const KoStyleCollection & styleCollection);
+ void addGeneralTab( int flags );
+ void apply();
+ void updateGUI();
+ void updatePreview();
+ void save();
+ int styleIndex( int pos );
+
+private:
+ QTabWidget *m_tabs;
+ QListBox *m_stylesList;
+ QLineEdit *m_nameString;
+ QComboBox *m_styleCombo;
+ QPushButton *m_deleteButton;
+ QPushButton *m_newButton;
+ QPushButton *m_moveUpButton;
+ QPushButton *m_moveDownButton;
+ QComboBox *m_inheritCombo;
+ KoStyleManagerPrivate *d;
+
+ KoParagStyle *m_currentStyle;
+ QPtrList<KoParagStyle> m_origStyles; // internal list of orig styles we have modified
+ QPtrList<KoParagStyle> m_changedStyles; // internal list of changed styles.
+ QPtrList<KoStyleManagerTab> m_tabsList;
+ QStringList m_styleOrder;
+ int numStyles;
+ bool noSignals;
+
+protected slots:
+ virtual void slotOk();
+ virtual void slotApply();
+ void switchStyle();
+ void switchTabs();
+ void addStyle();
+ void deleteStyle();
+ void moveUpStyle();
+ void moveDownStyle();
+ void renameStyle(const QString &);
+protected:
+ KoParagStyle * style( const QString & _name );
+ void addTab( KoStyleManagerTab * tab );
+ QString generateUniqueName();
+};
+
+class KOTEXT_EXPORT KoStyleManagerTab : public QWidget {
+ Q_OBJECT
+public:
+ KoStyleManagerTab(QWidget *parent) : QWidget(parent) {};
+
+ /** the new style which is to be displayed */
+ void setStyle(KoParagStyle *style) { m_style = style; }
+ /** update the GUI from the current Style*/
+ virtual void update() = 0;
+ /** return the (i18n-ed) name of the tab */
+ virtual QString tabName() = 0;
+ /** save the GUI to the style */
+ virtual void save() = 0;
+protected:
+ KoParagStyle *m_style;
+};
+
+// A tab to edit parts of the parag-layout of the style
+// Acts as a wrapper around KoParagLayoutWidget [which doesn't know about styles].
+class KOTEXT_EXPORT KoStyleParagTab : public KoStyleManagerTab
+{
+ Q_OBJECT
+public:
+ KoStyleParagTab( QWidget * parent );
+
+ // not a constructor parameter since 'this' is the parent of the widget
+ void setWidget( KoParagLayoutWidget * widget );
+
+ virtual void update();
+ virtual void save();
+ virtual QString tabName() { return m_widget->tabName(); }
+protected:
+ virtual void resizeEvent( QResizeEvent *e );
+private:
+ KoParagLayoutWidget * m_widget;
+};
+
+// The "font" tab. Maybe we should put the text color at the bottom ?
+class KOTEXT_EXPORT KoStyleFontTab : public KoStyleManagerTab
+{
+ Q_OBJECT
+public:
+ KoStyleFontTab( QWidget * parent );
+ ~KoStyleFontTab();
+ virtual void update();
+ virtual QString tabName();
+ virtual void save();
+private:
+ KoFontTab *m_fontTab;
+ KoDecorationTab *m_decorationTab;
+ KoHighlightingTab *m_highlightingTab;
+ KoLayoutTab *m_layoutTab;
+ KoLanguageTab *m_languageTab;
+};
+
+/*
+Font simple font dia
+Color simple color dia
+Spacing and Indents paragraph spacing dia (KWParagDia)
+alignments KoParagDia alignment tab
+borders KoParagDia borders tab
+numbering KoParagDia tab numbering
+tabulators KoParagDia tab tabs */
+
+#endif
diff --git a/lib/kotext/KoTextBookmark.cpp b/lib/kotext/KoTextBookmark.cpp
new file mode 100644
index 00000000..92a5c09b
--- /dev/null
+++ b/lib/kotext/KoTextBookmark.cpp
@@ -0,0 +1,50 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002-2003 Laurent Montel <montel@kde.org>
+ Copyright (C) 2006 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextBookmark.h"
+#include "KoTextParag.h"
+
+KoTextBookmark::KoTextBookmark( const QString& name )
+ : m_name( name ),
+ m_startParag( 0 ),
+ m_endParag( 0 ),
+ m_startIndex( 0 ),
+ m_endIndex( 0)
+{
+}
+
+KoTextBookmark::KoTextBookmark( const QString &name,
+ KoTextParag *startParag, KoTextParag *endParag,
+ int start, int end )
+ : m_name( name ),
+ m_startParag( startParag ),
+ m_endParag( endParag ),
+ m_startIndex( start ),
+ m_endIndex( end )
+{
+ if ( startParag && endParag )
+ Q_ASSERT( startParag->document() == endParag->document() );
+}
+
+KoTextDocument* KoTextBookmark::textDocument() const
+{
+ Q_ASSERT( m_startParag->document() == m_endParag->document() );
+ return m_startParag->document();
+}
diff --git a/lib/kotext/KoTextBookmark.h b/lib/kotext/KoTextBookmark.h
new file mode 100644
index 00000000..0be20518
--- /dev/null
+++ b/lib/kotext/KoTextBookmark.h
@@ -0,0 +1,106 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002-2003 Laurent Montel <montel@kde.org>
+ Copyright (C) 2006 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOTEXTBOOKMARK_H
+#define KOTEXTBOOKMARK_H
+
+#include <koffice_export.h>
+#include <qstring.h>
+#include <qvaluelist.h>
+#include <qmap.h>
+class KoTextParag;
+class KoTextDocument;
+
+/*
+ * A bookmark is a name associated with a single position or a run of text (start and end) in a text document.
+ */
+class KOTEXT_EXPORT KoTextBookmark {
+public:
+ KoTextBookmark( const QString& name = QString::null /*for QValueList; remove default value when going Qt4*/ );
+ KoTextBookmark( const QString& name,
+ KoTextParag* startParag, KoTextParag* endParag,
+ int start, int end );
+
+ QString bookmarkName() const { return m_name; }
+ void setBookmarkName( const QString &name ) { m_name = name; }
+
+ // Note: the text document always m_startParag->document(), which is also m_endParag->document().
+ KoTextDocument* textDocument() const;
+
+ KoTextParag* startParag() const { return m_startParag; }
+ void setStartParag( KoTextParag* parag ) { m_startParag = parag; }
+
+ KoTextParag* endParag() const { return m_endParag; }
+ void setEndParag( KoTextParag* parag ) { m_endParag = parag; }
+
+ void setBookmarkStartIndex( int pos ) { m_startIndex = pos; }
+ int bookmarkStartIndex() const { return m_startIndex; }
+
+ void setBookmarkEndIndex( int end ) { m_endIndex = end; }
+ int bookmarkEndIndex() const { return m_endIndex; }
+
+ bool isSimple() const { return m_startParag == m_endParag && m_startIndex == m_endIndex; }
+
+private:
+ QString m_name;
+ KoTextParag* m_startParag;
+ KoTextParag* m_endParag;
+ int m_startIndex;
+ int m_endIndex;
+};
+
+class KOTEXT_EXPORT KoTextBookmarkList : public QValueList<KoTextBookmark>
+{
+public:
+ const_iterator findByName( const QString& name ) const {
+ for ( const_iterator it = begin(), itend = end(); it != itend; ++it )
+ if ( (*it).bookmarkName() == name )
+ return it;
+ return end();
+ }
+ iterator findByName( const QString& name ) {
+ for ( iterator it = begin(), itend = end(); it != itend; ++it )
+ if ( (*it).bookmarkName() == name )
+ return it;
+ return end();
+ }
+ bool removeByName( const QString& name ) {
+ for ( iterator it = begin(), itend = end(); it != itend; ++it )
+ if ( (*it).bookmarkName() == name ) {
+ remove( it );
+ return true;
+ }
+ return false;
+ }
+ /// return a map of bookmarks per paragraph. Note that multi-paragraph bookmarks
+ /// will be present twice in the map.
+ QMap<const KoTextParag*, KoTextBookmarkList> bookmarksPerParagraph() const {
+ QMap<const KoTextParag*, KoTextBookmarkList> ret;
+ for ( const_iterator it = begin(), itend = end(); it != itend; ++it ) {
+ ret[ (*it).startParag() ].append( *it );
+ if ( (*it).startParag() != (*it).endParag() )
+ ret[ (*it).endParag() ].append( *it );
+ }
+ return ret;
+ }
+};
+
+#endif /* KOTEXTBOOKMARK_H */
+
diff --git a/lib/kotext/KoTextCommand.cpp b/lib/kotext/KoTextCommand.cpp
new file mode 100644
index 00000000..3a6f5ef3
--- /dev/null
+++ b/lib/kotext/KoTextCommand.cpp
@@ -0,0 +1,401 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextCommand.h"
+#include "KoTextObject.h"
+#include "KoTextParag.h"
+#include "KoVariable.h"
+#include <kdebug.h>
+#include <klocale.h>
+
+// This is automatically called by KCommandHistory's redo action when redo is activated
+void KoTextCommand::execute()
+{
+ m_textobj->redo();
+}
+
+// This is automatically called by KCommandHistory's undo action when undo is activated
+void KoTextCommand::unexecute()
+{
+ m_textobj->undo();
+}
+
+KoTextDeleteCommand::KoTextDeleteCommand(
+ KoTextDocument *d, int i, int idx, const QMemArray<KoTextStringChar> &str,
+ const CustomItemsMap & customItemsMap,
+ const QValueList<KoParagLayout> &oldParagLayouts )
+ : KoTextDocDeleteCommand( d, i, idx, str ),
+ m_oldParagLayouts( oldParagLayouts ),
+ m_customItemsMap( customItemsMap )
+{
+ Q_ASSERT( id >= 0 );
+}
+
+KoTextCursor * KoTextDeleteCommand::execute( KoTextCursor *c )
+{
+ KoTextParag *s = doc ? doc->paragAt( id ) : parag;
+ if ( !s ) {
+ kdWarning() << "can't locate parag at " << id << ", last parag: " << doc->lastParag()->paragId() << endl;
+ return 0;
+ }
+ cursor.setParag( s );
+ cursor.setIndex( index );
+ int len = text.size();
+ // Detach from custom items. They are already in the map, and we don't
+ // want them to be deleted
+ for ( int i = 0; i < len; ++i )
+ {
+ KoTextStringChar * ch = cursor.parag()->at( cursor.index() );
+ if ( ch->isCustom() )
+ {
+ ch->customItem()->setDeleted( true );
+ cursor.parag()->removeCustomItem(cursor.index());
+ }
+ cursor.gotoRight();
+ }
+
+ return KoTextDocDeleteCommand::execute(c);
+}
+
+KoTextCursor * KoTextDeleteCommand::unexecute( KoTextCursor *c )
+{
+ // Let QRichText re-create the text and formatting
+ KoTextCursor * cr = KoTextDocDeleteCommand::unexecute(c);
+
+ KoTextParag *s = doc ? doc->paragAt( id ) : parag;
+ if ( !s ) {
+ kdWarning() << "can't locate parag at " << id << ", last parag: " << (doc ? doc->lastParag()->paragId() : -1) << endl;
+ return 0;
+ }
+ cursor.setParag( s );
+ cursor.setIndex( index );
+ // Set any custom item that we had
+ m_customItemsMap.insertItems( cursor, text.size() );
+
+ // Now restore the parag layouts (i.e. libkotext specific stuff)
+ QValueList<KoParagLayout>::Iterator lit = m_oldParagLayouts.begin();
+ kdDebug(32500) << "KoTextDeleteCommand::unexecute " << m_oldParagLayouts.count() << " parag layouts. First parag=" << s->paragId() << endl;
+ Q_ASSERT( id == s->paragId() );
+ KoTextParag *p = s;
+ while ( p ) {
+ if ( lit != m_oldParagLayouts.end() )
+ {
+ kdDebug(32500) << "KoTextDeleteCommand::unexecute applying paraglayout to parag " << p->paragId() << endl;
+ p->setParagLayout( *lit );
+ }
+ else
+ break;
+ //if ( s == cr->parag() )
+ // break;
+ p = p->next();
+ ++lit;
+ }
+ return cr;
+}
+
+KoTextParagCommand::KoTextParagCommand( KoTextDocument *d, int fParag, int lParag,
+ const QValueList<KoParagLayout> &oldParagLayouts,
+ KoParagLayout newParagLayout,
+ int flags,
+ QStyleSheetItem::Margin margin )
+ : KoTextDocCommand( d ), firstParag( fParag ), lastParag( lParag ), m_oldParagLayouts( oldParagLayouts ),
+ m_newParagLayout( newParagLayout ), m_flags( flags ), m_margin( margin )
+{
+ Q_ASSERT( fParag >= 0 );
+ Q_ASSERT( lParag >= 0 );
+}
+
+KoTextCursor * KoTextParagCommand::execute( KoTextCursor *c )
+{
+ //kdDebug(32500) << "KoTextParagCommand::execute" << endl;
+ KoTextParag *p = doc->paragAt( firstParag );
+ if ( !p )
+ {
+ kdWarning() << "KoTextParagCommand::execute paragraph " << firstParag << "not found" << endl;
+ return c;
+ }
+ while ( p ) {
+ if ( ( m_flags & KoParagLayout::Margins ) && m_margin != (QStyleSheetItem::Margin)-1 ) // all
+ p->setMargin( static_cast<QStyleSheetItem::Margin>(m_margin), m_newParagLayout.margins[m_margin] );
+ else
+ {
+ p->setParagLayout( m_newParagLayout, m_flags );
+ }
+ if ( p->paragId() == lastParag )
+ break;
+ p = p->next();
+ }
+ //kdDebug(32500) << "KoTextParagCommand::execute done" << endl;
+ // Set cursor to end of selection. Like in KoTextFormatCommand::[un]execute...
+ c->setParag( p );
+ c->setIndex( p->length()-1 );
+ return c;
+}
+
+KoTextCursor * KoTextParagCommand::unexecute( KoTextCursor *c )
+{
+ kdDebug(32500) << "KoTextParagCommand::unexecute" << endl;
+ KoTextParag *p = doc->paragAt( firstParag );
+ if ( !p )
+ {
+ kdDebug(32500) << "KoTextParagCommand::unexecute paragraph " << firstParag << "not found" << endl;
+ return c;
+ }
+ QValueList<KoParagLayout>::Iterator lit = m_oldParagLayouts.begin();
+ while ( p ) {
+ if ( lit == m_oldParagLayouts.end() )
+ {
+ kdDebug(32500) << "KoTextParagCommand::unexecute m_oldParagLayouts not big enough!" << endl;
+ break;
+ }
+ if ( m_flags & KoParagLayout::Margins && m_margin != (QStyleSheetItem::Margin)-1 ) // just one
+ p->setMargin( static_cast<QStyleSheetItem::Margin>(m_margin), (*lit).margins[m_margin] );
+ else
+ {
+ p->setParagLayout( *lit, m_flags );
+ }
+ if ( p->paragId() == lastParag )
+ break;
+ p = p->next();
+ ++lit;
+ }
+ // Set cursor to end of selection. Like in KoTextFormatCommand::[un]execute...
+ c->setParag( p );
+ c->setIndex( p->length()-1 );
+ return c;
+}
+
+//////////
+
+KoParagFormatCommand::KoParagFormatCommand( KoTextDocument *d, int fParag, int lParag,
+ const QValueList<KoTextFormat *> &oldFormats,
+ KoTextFormat * newFormat )
+ : KoTextDocCommand( d ), firstParag( fParag ), lastParag( lParag ), m_oldFormats( oldFormats ),
+ m_newFormat( newFormat )
+{
+ QValueList<KoTextFormat *>::Iterator lit = m_oldFormats.begin();
+ for ( ; lit != m_oldFormats.end() ; ++lit )
+ (*lit)->addRef();
+}
+
+KoParagFormatCommand::~KoParagFormatCommand()
+{
+ QValueList<KoTextFormat *>::Iterator lit = m_oldFormats.begin();
+ for ( ; lit != m_oldFormats.end() ; ++lit )
+ (*lit)->removeRef();
+}
+
+KoTextCursor * KoParagFormatCommand::execute( KoTextCursor *c )
+{
+ KoTextParag *p = doc->paragAt( firstParag );
+ if ( !p )
+ {
+ kdDebug(32500) << "KoTextParagCommand::execute paragraph " << firstParag << "not found" << endl;
+ return c;
+ }
+ while ( p ) {
+ p->setFormat( m_newFormat );
+ p->invalidate(0);
+ if ( p->paragId() == lastParag )
+ break;
+ p = p->next();
+ }
+ return c;
+}
+
+KoTextCursor * KoParagFormatCommand::unexecute( KoTextCursor *c )
+{
+ kdDebug(32500) << "KoParagFormatCommand::unexecute" << endl;
+ KoTextParag *p = doc->paragAt( firstParag );
+ if ( !p )
+ {
+ kdDebug(32500) << "KoParagFormatCommand::unexecute paragraph " << firstParag << "not found" << endl;
+ return c;
+ }
+ QValueList<KoTextFormat *>::Iterator lit = m_oldFormats.begin();
+ while ( p ) {
+ if ( lit == m_oldFormats.end() )
+ {
+ kdDebug(32500) << "KoParagFormatCommand::unexecute m_oldFormats not big enough!" << endl;
+ break;
+ }
+ p->setFormat( (*lit) );
+ if ( p->paragId() == lastParag )
+ break;
+ p = p->next();
+ ++lit;
+ }
+ return c;
+}
+
+KoTextFormatCommand::KoTextFormatCommand(KoTextDocument *d, int sid, int sidx, int eid, int eidx, const QMemArray<KoTextStringChar> &old, const KoTextFormat *f, int fl )
+ : KoTextDocFormatCommand(d, sid, sidx, eid, eidx, old, f, fl)
+{
+}
+
+
+KoTextFormatCommand::~KoTextFormatCommand()
+{
+}
+
+void KoTextFormatCommand::resizeCustomItems()
+{
+ KoTextParag *sp = doc->paragAt( startId );
+ KoTextParag *ep = doc->paragAt( endId );
+ if ( !sp || !ep )
+ return;
+
+ KoTextCursor start( doc );
+ start.setParag( sp );
+ start.setIndex( startIndex );
+ KoTextCursor end( doc );
+ end.setParag( ep );
+ end.setIndex( endIndex );
+
+ doc->setSelectionStart( KoTextDocument::Temp, &start );
+ doc->setSelectionEnd( KoTextDocument::Temp, &end );
+
+ // TODO use the visitor pattern (some 'ResizeCustomItemVisitor')
+
+ if ( start.parag() == end.parag() )
+ {
+ QString text = start.parag()->string()->toString().mid( start.index(), end.index() - start.index() );
+ for ( int i = start.index(); i < end.index(); ++i )
+ {
+ if( start.parag()->at(i)->isCustom())
+ {
+ start.parag()->at(i)->customItem()->resize();
+ }
+ }
+ }
+ else
+ {
+ int i;
+ QString text = start.parag()->string()->toString().mid( start.index(), start.parag()->length() - 1 - start.index() );
+ for ( i = start.index(); i < start.parag()->length(); ++i )
+ if( start.parag()->at(i)->isCustom())
+ {
+ start.parag()->at(i)->customItem()->resize();
+ }
+
+ KoTextParag *p = start.parag()->next();
+ while ( p && p != end.parag() )
+ {
+ text = p->string()->toString().left( p->length() - 1 );
+ for ( i = 0; i < p->length(); ++i )
+ {
+ if( p->at(i)->isCustom())
+ {
+ p->at(i)->customItem()->resize();
+ }
+ }
+ p = p->next();
+ }
+ text = end.parag()->string()->toString().left( end.index() );
+ for ( i = 0; i < end.index(); ++i )
+ {
+ if( end.parag()->at(i)->isCustom())
+ {
+ end.parag()->at(i)->customItem()->resize();
+ }
+ }
+ }
+}
+
+KoTextCursor *KoTextFormatCommand::execute( KoTextCursor *c )
+{
+ c = KoTextDocFormatCommand::execute( c );
+ resizeCustomItems();
+ return c;
+}
+
+KoTextCursor *KoTextFormatCommand::unexecute( KoTextCursor *c )
+{
+ kdDebug(32500) << "KoTextFormatCommand::unexecute c:" << c << " index:" << c->index() << endl;
+ c = KoTextDocFormatCommand::unexecute( c );
+ kdDebug(32500) << "KoTextFormatCommand::unexecute after KoTextFormatCommand c:" << c << " index:" << c->index() << endl;
+ resizeCustomItems();
+ return c;
+}
+
+////
+
+KoChangeVariableSubType::KoChangeVariableSubType(
+ short int _oldValue, short int _newValue,
+ KoVariable *var):
+ KCommand(),
+ m_newValue(_newValue),
+ m_oldValue(_oldValue),
+ m_var(var)
+{
+}
+
+void KoChangeVariableSubType::execute()
+{
+ Q_ASSERT(m_var);
+ m_var->setVariableSubType(m_newValue);
+ m_var->recalcAndRepaint();
+}
+
+void KoChangeVariableSubType::unexecute()
+{
+ Q_ASSERT(m_var);
+ m_var->setVariableSubType(m_oldValue);
+ m_var->recalcAndRepaint();
+}
+
+QString KoChangeVariableSubType::name() const
+{
+ return i18n( "Change Variable Subtype" );
+}
+
+////
+
+KoChangeVariableFormatProperties::KoChangeVariableFormatProperties(
+ const QString &_oldValue, const QString &_newValue,
+ KoVariable *var)
+ : KCommand(),
+ m_newValue(_newValue),
+ m_oldValue(_oldValue),
+ m_var(var)
+{
+}
+
+void KoChangeVariableFormatProperties::execute()
+{
+ Q_ASSERT(m_var);
+ // Wrong! m_var->variableFormat()->setFormatProperties( m_newValue );
+ KoVariableFormatCollection* coll = m_var->variableColl()->formatCollection();
+ m_var->setVariableFormat( coll->format( m_var->variableFormat()->getKey( m_newValue ) ) );
+ m_var->recalcAndRepaint();
+}
+
+void KoChangeVariableFormatProperties::unexecute()
+{
+ Q_ASSERT(m_var);
+ // Wrong! m_var->variableFormat()->setFormatProperties( m_oldValue );
+ KoVariableFormatCollection* coll = m_var->variableColl()->formatCollection();
+ m_var->setVariableFormat( coll->format( m_var->variableFormat()->getKey( m_oldValue ) ) );
+ m_var->recalcAndRepaint();
+}
+
+QString KoChangeVariableFormatProperties::name() const
+{
+ return i18n( "Change Variable Format" );
+}
diff --git a/lib/kotext/KoTextCommand.h b/lib/kotext/KoTextCommand.h
new file mode 100644
index 00000000..352fc2fb
--- /dev/null
+++ b/lib/kotext/KoTextCommand.h
@@ -0,0 +1,173 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kocommand_h
+#define kocommand_h
+
+#include <kcommand.h>
+#include <KoRichText.h>
+class KoTextObject;
+class KoTextDocument;
+class KoVariable;
+#include <KoParagLayout.h>
+#include <KoTextDocument.h>
+#include <koffice_export.h>
+/**
+ * Wraps a KoTextDocCommand into a KCommand, for the UI
+ * In fact the KoTextDocCommand isn't even known from here.
+ * When the UI orders execute or unexecute, we simply call undo/redo
+ * on the KoTextObject. Since one KCommand is created for each
+ * command there, the two simply map.
+ */
+class KOTEXT_EXPORT KoTextCommand : public KNamedCommand
+{
+public:
+ KoTextCommand( KoTextObject * textobj, const QString & name ) :
+ KNamedCommand( name ), m_textobj(textobj) {}
+ ~KoTextCommand() {}
+
+ virtual void execute();
+ virtual void unexecute();
+
+protected:
+ KoTextObject * m_textobj;
+};
+
+/**
+ * Command created when deleting some text
+ */
+class KOTEXT_EXPORT KoTextDeleteCommand : public KoTextDocDeleteCommand
+{
+public:
+ KoTextDeleteCommand( KoTextDocument *d, int i, int idx, const QMemArray<KoTextStringChar> &str,
+ const CustomItemsMap & customItemsMap,
+ const QValueList<KoParagLayout> & oldParagLayouts );
+ KoTextCursor *execute( KoTextCursor *c );
+ KoTextCursor *unexecute( KoTextCursor *c );
+protected:
+ QValueList<KoParagLayout> m_oldParagLayouts;
+ CustomItemsMap m_customItemsMap;
+};
+
+/**
+ * Command created when inserting some text
+ */
+class KoTextInsertCommand : public KoTextDeleteCommand
+{
+public:
+ KoTextInsertCommand( KoTextDocument *d, int i, int idx, const QMemArray<KoTextStringChar> &str,
+ const CustomItemsMap & customItemsMap,
+ const QValueList<KoParagLayout> &oldParagLayouts )
+ : KoTextDeleteCommand( d, i, idx, str, customItemsMap, oldParagLayouts ) {}
+ Commands type() const { return Insert; };
+ KoTextCursor *execute( KoTextCursor *c ) { return KoTextDeleteCommand::unexecute( c ); }
+ KoTextCursor *unexecute( KoTextCursor *c ) { return KoTextDeleteCommand::execute( c ); }
+};
+
+/**
+ * Command created when changing paragraph attributes
+ */
+class KOTEXT_EXPORT KoTextParagCommand : public KoTextDocCommand
+{
+public:
+ KoTextParagCommand( KoTextDocument *d, int fParag, int lParag,
+ const QValueList<KoParagLayout> &oldParagLayouts,
+ KoParagLayout newParagLayout,
+ int /*KoParagLayout::Flags*/ flags,
+ QStyleSheetItem::Margin margin = (QStyleSheetItem::Margin)-1 );
+ // margin is only meaningful if flags==Margins only. -1 means all.
+ KoTextCursor *execute( KoTextCursor *c );
+ KoTextCursor *unexecute( KoTextCursor *c );
+protected:
+ int firstParag, lastParag;
+ QValueList<KoParagLayout> m_oldParagLayouts;
+ KoParagLayout m_newParagLayout;
+ int m_flags;
+ int m_margin;
+};
+
+/**
+ * Command created when changing the default format of paragraphs.
+ * This is ONLY used for counters and bullet's formatting.
+ * See KoTextFormatCommand for the command used when changing the formatting of any set of characters.
+ */
+class KoParagFormatCommand : public KoTextDocCommand
+{
+public:
+ KoParagFormatCommand( KoTextDocument *d, int fParag, int lParag,
+ const QValueList<KoTextFormat *> &oldFormats,
+ KoTextFormat * newFormat );
+ ~KoParagFormatCommand();
+ KoTextCursor *execute( KoTextCursor *c );
+ KoTextCursor *unexecute( KoTextCursor *c );
+protected:
+ int firstParag, lastParag;
+ QValueList<KoTextFormat *> m_oldFormats;
+ KoTextFormat * m_newFormat;
+};
+
+/**
+ * Command created when changing formatted text
+ */
+class KoTextFormatCommand : public KoTextDocFormatCommand
+{
+public:
+ KoTextFormatCommand( KoTextDocument *d, int sid, int sidx, int eid, int eidx, const QMemArray<KoTextStringChar> &old, const KoTextFormat *f, int fl );
+ virtual ~KoTextFormatCommand();
+
+ KoTextCursor *execute( KoTextCursor *c );
+ KoTextCursor *unexecute( KoTextCursor *c );
+ void resizeCustomItems();
+};
+
+/**
+ * Command created when changing the subtype of a variable
+ * (turning "fixed date" into "variable date").
+ */
+class KoChangeVariableSubType : public KCommand
+{
+public:
+ KoChangeVariableSubType( short int _oldValue, short int _newValue, KoVariable *var );
+ void execute();
+ void unexecute();
+ virtual QString name() const;
+private:
+ short int m_newValue;
+ short int m_oldValue;
+ KoVariable *m_var;
+};
+
+/**
+ * Command created when changing the properties of a variable's format
+ * (e.g. DD/MM/YYYY)
+ */
+class KoChangeVariableFormatProperties : public KCommand
+{
+ public:
+ KoChangeVariableFormatProperties( const QString &_oldValue, const QString &_newValue, KoVariable *var);
+ virtual QString name() const;
+ void execute();
+ void unexecute();
+private:
+ QString m_newValue;
+ QString m_oldValue;
+ KoVariable *m_var;
+};
+
+#endif
diff --git a/lib/kotext/KoTextCustomItem.cpp b/lib/kotext/KoTextCustomItem.cpp
new file mode 100644
index 00000000..115e8881
--- /dev/null
+++ b/lib/kotext/KoTextCustomItem.cpp
@@ -0,0 +1,153 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoRichText.h"
+#include "KoTextFormat.h"
+#include "KoTextParag.h"
+#include "KoTextZoomHandler.h"
+#include "KoTextDocument.h"
+#include <kdebug.h>
+#include <kcommand.h>
+
+
+//void KoTextCustomItem::setPainter( QPainter*, bool adjust ){ if ( adjust ) width = 0; }
+//void KoTextCustomItem::setPainter( QPainter*, bool ){ resize(); } // changed for kotext
+
+bool KoTextCustomItem::enter( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy, bool atEnd )
+{
+ doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; Q_UNUSED( atEnd ) return TRUE;
+
+}
+bool KoTextCustomItem::enterAt( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy, const QPoint & )
+{
+ doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE;
+}
+bool KoTextCustomItem::next( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy )
+{
+ doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE;
+}
+bool KoTextCustomItem::prev( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy )
+{
+ doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE;
+}
+bool KoTextCustomItem::down( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy )
+{
+ doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE;
+}
+bool KoTextCustomItem::up( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy )
+{
+ doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE;
+}
+
+int KoTextCustomItem::index() const
+{
+ Q_ASSERT( paragraph() );
+ KoTextParag * parag = paragraph();
+ return parag->findCustomItem( this );
+}
+
+KoTextFormat * KoTextCustomItem::format() const
+{
+ KoTextParag * parag = paragraph();
+ //kdDebug(32500) << "KoTextCustomItem::format index=" << index() << " format=" << parag->at( index() )->format() << endl;
+ return parag->at( index() )->format();
+}
+
+
+void KoTextCustomItem::draw(QPainter* p, int _x, int _y, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected )
+{
+ KoTextZoomHandler *zh=textDocument()->paintingZoomHandler();
+ //kdDebug(32500)<<" x :"<<_x<<" y :"<<_y<<" cx :"<<cx<<" cy :"<<cy<<" ch :"<<ch<<" cw :"<<cw<<endl;
+
+ // Calculate index only once
+ // Hmm, should pass it to drawCustomItem...
+ int charIndex = index();
+ KoTextStringChar* stringChar = paragraph()->at( charIndex );
+
+ // Convert x, y, cx, cy, cw and ch from Layout Units to pixels.
+ int x = zh->layoutUnitToPixelX(_x) /*+ stringChar->pixelxadj*/;
+ int y = zh->layoutUnitToPixelY(_y);
+ cx = zh->layoutUnitToPixelX(cx);
+ cy = zh->layoutUnitToPixelY(cy);
+ cw = zh->layoutUnitToPixelX(_x,cw);
+ ch = zh->layoutUnitToPixelY(_y,ch);
+ int wpix = zh->layoutUnitToPixelX(_x,width);
+ int hpix = zh->layoutUnitToPixelX(_y,height);
+ //kdDebug(32500)<<"After x :"<<x<<" y :"<<y<<" cx :"<<cx<<" cy :"<<cy<<" ch :"<<ch<<" cw :"<<cw<<endl;
+ int ascentpix = zh->layoutUnitToPixelY( _y, ascent() );
+
+ KoTextFormat * fmt = stringChar->format();
+
+ //bool forPrint = ( p->device()->devType() == QInternal::Printer );
+ p->setFont( fmt->screenFont( zh ) );
+
+ int offset=0;
+ if ( fmt->vAlign() == KoTextFormat::AlignSuperScript )
+ offset = -( hpix - p->fontMetrics().height() );
+
+ if ( fmt->shadowDistanceX() != 0 || fmt->shadowDistanceY() != 0 ) {
+ int sx = fmt->shadowX( zh );
+ int sy = fmt->shadowY( zh );
+ if ( sx != 0 || sy != 0 )
+ {
+ p->save();
+ p->translate( sx, sy );
+ drawCustomItem(p, x, y, wpix, hpix, ascentpix, cx, cy, cw, ch, cg, selected, offset, true);
+ p->restore();
+ }
+ }
+ drawCustomItem(p, x, y, wpix, hpix, ascentpix, cx, cy, cw, ch, cg, selected, offset, false);
+}
+
+////////////////
+
+void CustomItemsMap::insertItems( const KoTextCursor & startCursor, int size )
+{
+ if ( isEmpty() )
+ return;
+
+ KoTextCursor cursor( startCursor );
+ for ( int i = 0; i < size; ++i )
+ {
+ CustomItemsMap::Iterator it = find( i );
+ if ( it != end() )
+ {
+ kdDebug(32500) << "CustomItemsMap::insertItems setting custom item " << it.data() << endl;
+ cursor.parag()->setCustomItem( cursor.index(), it.data(), 0 );
+ it.data()->setDeleted( false );
+ }
+ cursor.gotoRight();
+ }
+}
+
+void CustomItemsMap::deleteAll( KMacroCommand *macroCmd )
+{
+ Iterator it = begin();
+ for ( ; it != end(); ++it )
+ {
+ KoTextCustomItem * item = it.data();
+ KCommand * itemCmd = item->deleteCommand();
+ if ( itemCmd && macroCmd )
+ {
+ macroCmd->addCommand( itemCmd );
+ itemCmd->execute(); // the item-specific delete stuff hasn't been done
+ }
+ item->setDeleted( true );
+ }
+}
diff --git a/lib/kotext/KoTextCustomItem.h b/lib/kotext/KoTextCustomItem.h
new file mode 100644
index 00000000..4d081f2d
--- /dev/null
+++ b/lib/kotext/KoTextCustomItem.h
@@ -0,0 +1,146 @@
+// -*- c++ -*-
+/* This file is part of the KDE project
+
+ Original QTextCustomItem is
+ Copyright (C) 1999-2000 Trolltech AS. All rights reserved.
+ KoText modifications
+ Copyright (C) 2001-2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+// This file isn't standalone at this point; it's included by KoRichText.h
+
+/**
+ * KoTextCustomItem is the base class for custom items (i.e. special chars)
+ * Custom items include:
+ * - variables ( KoVariable, kovariable.h )
+ * - in kword: inline images ( KWTextImage, kwtextimage.h ) (to be removed)
+ * - in kword: anchors, i.e. floating frames ( KWAnchor, kwanchor.h )
+ */
+class KOTEXT_EXPORT KoTextCustomItem
+{
+public:
+ KoTextCustomItem( KoTextDocument *p );
+ virtual ~KoTextCustomItem();
+ virtual void draw(QPainter* p, int x, int y, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected ) /* = 0*/;
+
+ // Called after the item's paragraph has been formatted
+ virtual void finalize() {}
+
+ void move( int x, int y ) { xpos = x; ypos = y; }
+ int x() const { return xpos; }
+ int y() const { return ypos; }
+
+ // Called when the format of the character is being changed, see KoTextStringChar::setFormat
+ virtual void setFormat( KoTextFormat * ) { }
+
+ //virtual void setPainter( QPainter*, bool adjust );
+
+ enum Placement { PlaceInline = 0, PlaceLeft, PlaceRight };
+ virtual Placement placement() const { return PlaceInline; }
+ bool placeInline() { return placement() == PlaceInline; }
+
+ virtual bool ownLine() const { return FALSE; }
+ // Called for "ownline" items
+ virtual void resize( int nwidth ) { width = nwidth; }
+ virtual void invalidate() {};
+
+ virtual bool isNested() const { return FALSE; }
+ virtual int minimumWidth() const { return 0; }
+ virtual int widthHint() const { return 0; }
+ virtual int ascent() const { return height; }
+
+ virtual QString richText() const { return QString::null; }
+
+ int width;
+ int height;
+
+ QRect geometry() const { return QRect( xpos, ypos, width, height ); }
+
+ virtual bool enter( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy, bool atEnd = FALSE );
+ virtual bool enterAt( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy, const QPoint & );
+ virtual bool next( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy );
+ virtual bool prev( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy );
+ virtual bool down( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy );
+ virtual bool up( KoTextCursor *, KoTextDocument *&doc, KoTextParag *&parag, int &idx, int &ox, int &oy );
+
+ void setParagraph( KoTextParag * p ) { parag = p; }
+ KoTextParag *paragraph() const { return parag; }
+
+ virtual void pageBreak( int /*y*/, KoTextFlow* /*flow*/ ) {}
+
+ KoTextDocument *parent;
+
+
+
+ /** The text document in which this customitem is */
+ KoTextDocument * textDocument() const { return parent; }
+
+ /** When the user deletes a custom item, it isn't destroyed but
+ * moved into the undo/redo history - setDeleted( true )
+ * and it can be then copied back from there into the real world - setDeleted( false ). */
+ virtual void setDeleted( bool b ) { m_deleted = b; }
+
+ bool isDeleted() const { return m_deleted; }
+
+ /** Called when the item is created or 'deleted' by the user
+ * Most custom items don't need to reimplement those, since
+ * the custom item is simply moved into the undo/redo history
+ * when deleting (or undoing a creation).
+ * It is not deleted and re-created later. */
+ virtual KCommand * createCommand() { return 0L; }
+ virtual KCommand * deleteCommand() { return 0L; }
+
+ /** Save to XML */
+ virtual void save( QDomElement& formatElem ) = 0;
+ /** Save to Oasis XML */
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const = 0;
+ /** Return type of custom item. See DTD for VARIABLE.id docu. */
+ virtual int typeId() const = 0;
+
+ /** Reimplement this to calculate the item width
+ * It is important to start with "if ( m_deleted ) return;" */
+ virtual void resize() {}
+
+ /** Reimplemented by KoVariable to recalculate the value.
+ * It exists at the KoTextCustomItem level so that KoTextParag::setCustomItem
+ * can call it to set the initial value.
+ * This should call always resize(). */
+ virtual void recalc() { resize(); }
+
+ /** The index in paragraph(), where this anchor is
+ * Slightly slow (does a linear search in the paragraph) */
+ int index() const;
+
+ /** The formatting given to this 'special' character
+ * Slightly slow (does a linear search in the paragraph) */
+ KoTextFormat * format() const;
+
+ /**
+ * All coordinates are in pixels.
+ */
+ virtual void drawCustomItem(QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected, int offset, bool drawingShadow) = 0;
+
+protected:
+ bool m_deleted;
+
+protected:
+ int xpos;
+ int ypos;
+private:
+ KoTextParag *parag;
+};
diff --git a/lib/kotext/KoTextDocument.cpp b/lib/kotext/KoTextDocument.cpp
new file mode 100644
index 00000000..4e0f7dc9
--- /dev/null
+++ b/lib/kotext/KoTextDocument.cpp
@@ -0,0 +1,1592 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextDocument.h"
+#include "KoTextParag.h"
+#include "KoTextZoomHandler.h"
+#include "KoTextFormatter.h"
+#include "KoTextFormat.h"
+#include "KoParagCounter.h"
+#include "KoTextCommand.h"
+#include "KoOasisContext.h"
+#include "KoVariable.h"
+#include <KoXmlWriter.h>
+#include <KoXmlNS.h>
+#include <KoDom.h>
+#include <kdebug.h>
+#include <kdeversion.h>
+#include <qapplication.h>
+#include <assert.h>
+
+//#define DEBUG_PAINTING
+
+//// Note that many methods are implemented in korichtext.cpp
+//// Those are the ones that come from Qt, and that mostly work :)
+
+KoTextDocument::KoTextDocument( KoTextZoomHandler *zoomHandler, KoTextFormatCollection *fc,
+ KoTextFormatter *formatter, bool createInitialParag )
+ : m_zoomHandler( zoomHandler ),
+ m_bDestroying( false ),
+#ifdef QTEXTTABLE_AVAILABLE
+ par( 0L /*we don't use parent documents */ ),
+ tc( 0 ),
+#endif
+ tArray( 0 ), tStopWidth( 0 )
+{
+ fCollection = fc;
+ init(); // see korichtext.cpp
+
+ m_drawingFlags = 0;
+ if ( !formatter )
+ formatter = new KoTextFormatter;
+ setFormatter( formatter );
+
+ setY( 0 );
+ setLeftMargin( 0 );
+ setRightMargin( 0 );
+
+ // Delete the KoTextParag created by KoTextDocument::init() if createInitialParag is false.
+ if ( !createInitialParag )
+ clear( false );
+}
+
+void KoTextDocument::init()
+{
+ //pProcessor = 0;
+ useFC = TRUE;
+ pFormatter = 0;
+ fParag = 0;
+ m_pageBreakEnabled = false;
+ //minw = 0;
+ align = Qt::AlignAuto;
+ nSelections = 2;
+
+ underlLinks = TRUE;
+ backBrush = 0;
+ buf_pixmap = 0;
+ //nextDoubleBuffered = FALSE;
+
+ //if ( par )
+// withoutDoubleBuffer = par->withoutDoubleBuffer;
+// else
+ withoutDoubleBuffer = FALSE;
+
+ lParag = fParag = createParag( this, 0, 0 );
+
+ //cx = 0;
+ //cy = 2;
+ //if ( par )
+ cx = cy = 0;
+ //cw = 600; // huh?
+ //vw = 0;
+ flow_ = new KoTextFlow;
+ //flow_->setWidth( cw );
+
+ leftmargin = 0; // 4 in QRT
+ rightmargin = 0; // 4 in QRT
+
+ selectionColors[ Standard ] = QApplication::palette().color( QPalette::Active, QColorGroup::Highlight );
+ selectionText[ Standard ] = TRUE;
+ assert( Standard < nSelections );
+ selectionText[ InputMethodPreedit ] = FALSE;
+ assert( InputMethodPreedit < nSelections );
+ commandHistory = new KoTextDocCommandHistory( 100 );
+ tStopWidth = formatCollection()->defaultFormat()->width( 'x' ) * 8;
+}
+
+KoTextDocument::~KoTextDocument()
+{
+ //if ( par )
+// par->removeChild( this );
+ //// kotext
+ m_bDestroying = true;
+ clear( false );
+ ////
+ delete commandHistory;
+ delete flow_;
+ //if ( !par )
+ delete pFormatter;
+ delete fCollection;
+ //delete pProcessor;
+ delete buf_pixmap;
+ delete backBrush;
+ if ( tArray )
+ delete [] tArray;
+}
+
+void KoTextDocument::clear( bool createEmptyParag )
+{
+ if ( flow_ )
+ flow_->clear();
+ while ( fParag ) {
+ KoTextParag *p = fParag->next();
+ fParag->string()->clear(); // avoid the "unregister custom items" code, not needed
+ delete fParag;
+ fParag = p;
+ }
+ fParag = lParag = 0;
+ if ( createEmptyParag )
+ fParag = lParag = createParag( this );
+ selections.clear();
+ customItems.clear();
+}
+
+/*
+ // Looks slow!
+int KoTextDocument::widthUsed() const
+{
+ KoTextParag *p = fParag;
+ int w = 0;
+ while ( p ) {
+ int a = p->alignment();
+ p->setAlignment( Qt::AlignLeft );
+ p->invalidate( 0 );
+ p->format();
+ w = QMAX( w, p->rect().width() );
+ p->setAlignment( a );
+ p->invalidate( 0 );
+ p = p->next();
+ }
+ return w;
+}
+*/
+
+int KoTextDocument::height() const
+{
+ int h = 0;
+ if ( lParag )
+ h = lParag->rect().top() + lParag->rect().height() + 1;
+ //int fh = flow_->boundingRect().height();
+ //return QMAX( h, fh );
+ return h;
+}
+
+
+KoTextParag *KoTextDocument::createParag( KoTextDocument *d, KoTextParag *pr, KoTextParag *nx, bool updateIds )
+{
+ return new KoTextParag( d, pr, nx, updateIds );
+}
+
+void KoTextDocument::setPlainText( const QString &text )
+{
+ clear();
+ //preferRichText = FALSE;
+ //oTextValid = TRUE;
+ //oText = text;
+
+ int lastNl = 0;
+ int nl = text.find( '\n' );
+ if ( nl == -1 ) {
+ lParag = createParag( this, lParag, 0 );
+ if ( !fParag )
+ fParag = lParag;
+ QString s = text;
+ if ( !s.isEmpty() ) {
+ if ( s[ (int)s.length() - 1 ] == '\r' )
+ s.remove( s.length() - 1, 1 );
+ lParag->append( s );
+ }
+ } else {
+ for (;;) {
+ lParag = createParag( this, lParag, 0 );
+ if ( !fParag )
+ fParag = lParag;
+ QString s = text.mid( lastNl, nl - lastNl );
+ if ( !s.isEmpty() ) {
+ if ( s[ (int)s.length() - 1 ] == '\r' )
+ s.remove( s.length() - 1, 1 );
+ lParag->append( s );
+ }
+ if ( nl == 0xffffff )
+ break;
+ lastNl = nl + 1;
+ nl = text.find( '\n', nl + 1 );
+ if ( nl == -1 )
+ nl = 0xffffff;
+ }
+ }
+ if ( !lParag )
+ lParag = fParag = createParag( this, 0, 0 );
+}
+
+void KoTextDocument::setText( const QString &text, const QString & /*context*/ )
+{
+ selections.clear();
+ setPlainText( text );
+}
+
+QString KoTextDocument::plainText() const
+{
+ QString buffer;
+ QString s;
+ KoTextParag *p = fParag;
+ while ( p ) {
+ s = p->string()->toString();
+ s.remove( s.length() - 1, 1 );
+ if ( p->next() )
+ s += "\n";
+ buffer += s;
+ p = p->next();
+ }
+ return buffer;
+}
+
+void KoTextDocument::invalidate()
+{
+ KoTextParag *s = fParag;
+ while ( s ) {
+ s->invalidate( 0 );
+ s = s->next();
+ }
+}
+
+void KoTextDocument::informParagraphDeleted( KoTextParag* parag )
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.begin();
+ for ( ; it != selections.end(); ++it )
+ {
+ if ( (*it).startCursor.parag() == parag ) {
+ if ( parag->prev() ) {
+ KoTextParag* prevP = parag->prev();
+ (*it).startCursor.setParag( prevP );
+ (*it).startCursor.setIndex( prevP->length()-1 );
+ } else
+ (*it).startCursor.setParag( parag->next() ); // sets index to 0
+ }
+ if ( (*it).endCursor.parag() == parag ) {
+ if ( parag->prev() ) {
+ KoTextParag* prevP = parag->prev();
+ (*it).endCursor.setParag( prevP );
+ (*it).endCursor.setIndex( prevP->length()-1 );
+ } else
+ (*it).endCursor.setParag( parag->next() ); // sets index to 0
+ }
+ }
+ emit paragraphDeleted( parag );
+}
+
+void KoTextDocument::selectionStart( int id, int &paragId, int &index )
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.find( id );
+ if ( it == selections.end() )
+ return;
+ KoTextDocumentSelection &sel = *it;
+ paragId = !sel.swapped ? sel.startCursor.parag()->paragId() : sel.endCursor.parag()->paragId();
+ index = !sel.swapped ? sel.startCursor.index() : sel.endCursor.index();
+}
+
+KoTextCursor KoTextDocument::selectionStartCursor( int id)
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.find( id );
+ if ( it == selections.end() )
+ return KoTextCursor( this );
+ KoTextDocumentSelection &sel = *it;
+ if ( sel.swapped )
+ return sel.endCursor;
+ return sel.startCursor;
+}
+
+KoTextCursor KoTextDocument::selectionEndCursor( int id)
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.find( id );
+ if ( it == selections.end() )
+ return KoTextCursor( this );
+ KoTextDocumentSelection &sel = *it;
+ if ( !sel.swapped )
+ return sel.endCursor;
+ return sel.startCursor;
+}
+
+void KoTextDocument::selectionEnd( int id, int &paragId, int &index )
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.find( id );
+ if ( it == selections.end() )
+ return;
+ KoTextDocumentSelection &sel = *it;
+ paragId = sel.swapped ? sel.startCursor.parag()->paragId() : sel.endCursor.parag()->paragId();
+ index = sel.swapped ? sel.startCursor.index() : sel.endCursor.index();
+}
+
+bool KoTextDocument::isSelectionSwapped( int id )
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.find( id );
+ if ( it == selections.end() )
+ return false;
+ KoTextDocumentSelection &sel = *it;
+ return sel.swapped;
+}
+
+KoTextParag *KoTextDocument::selectionStart( int id )
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.find( id );
+ if ( it == selections.end() )
+ return 0;
+ KoTextDocumentSelection &sel = *it;
+ if ( sel.startCursor.parag()->paragId() < sel.endCursor.parag()->paragId() )
+ return sel.startCursor.parag();
+ return sel.endCursor.parag();
+}
+
+KoTextParag *KoTextDocument::selectionEnd( int id )
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.find( id );
+ if ( it == selections.end() )
+ return 0;
+ KoTextDocumentSelection &sel = *it;
+ if ( sel.startCursor.parag()->paragId() > sel.endCursor.parag()->paragId() )
+ return sel.startCursor.parag();
+ return sel.endCursor.parag();
+}
+
+void KoTextDocument::addSelection( int id )
+{
+ nSelections = QMAX( nSelections, id + 1 );
+}
+
+static void setSelectionEndHelper( int id, KoTextDocumentSelection &sel, KoTextCursor &start, KoTextCursor &end )
+{
+ KoTextCursor c1 = start;
+ KoTextCursor c2 = end;
+ if ( sel.swapped ) {
+ c1 = end;
+ c2 = start;
+ }
+
+ c1.parag()->removeSelection( id );
+ c2.parag()->removeSelection( id );
+ if ( c1.parag() != c2.parag() ) {
+ c1.parag()->setSelection( id, c1.index(), c1.parag()->length() - 1 );
+ c2.parag()->setSelection( id, 0, c2.index() );
+ } else {
+ c1.parag()->setSelection( id, QMIN( c1.index(), c2.index() ), QMAX( c1.index(), c2.index() ) );
+ }
+
+ sel.startCursor = start;
+ sel.endCursor = end;
+ if ( sel.startCursor.parag() == sel.endCursor.parag() )
+ sel.swapped = sel.startCursor.index() > sel.endCursor.index();
+}
+
+bool KoTextDocument::setSelectionEnd( int id, KoTextCursor *cursor )
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.find( id );
+ if ( it == selections.end() )
+ return FALSE;
+ KoTextDocumentSelection &sel = *it;
+
+ KoTextCursor start = sel.startCursor;
+ KoTextCursor end = *cursor;
+
+ if ( start == end ) {
+ removeSelection( id );
+ setSelectionStart( id, cursor );
+ return TRUE;
+ }
+
+ if ( sel.endCursor.parag() == end.parag() ) {
+ setSelectionEndHelper( id, sel, start, end );
+ return TRUE;
+ }
+
+ bool inSelection = FALSE;
+ KoTextCursor c( this );
+ KoTextCursor tmp = sel.startCursor;
+ if ( sel.swapped )
+ tmp = sel.endCursor;
+ KoTextCursor tmp2 = *cursor;
+ c.setParag( tmp.parag()->paragId() < tmp2.parag()->paragId() ? tmp.parag() : tmp2.parag() );
+ KoTextCursor old;
+ bool hadStart = FALSE;
+ bool hadEnd = FALSE;
+ bool hadStartParag = FALSE;
+ bool hadEndParag = FALSE;
+ bool hadOldStart = FALSE;
+ bool hadOldEnd = FALSE;
+ bool leftSelection = FALSE;
+ sel.swapped = FALSE;
+ for ( ;; ) {
+ if ( c == start )
+ hadStart = TRUE;
+ if ( c == end )
+ hadEnd = TRUE;
+ if ( c.parag() == start.parag() )
+ hadStartParag = TRUE;
+ if ( c.parag() == end.parag() )
+ hadEndParag = TRUE;
+ if ( c == sel.startCursor )
+ hadOldStart = TRUE;
+ if ( c == sel.endCursor )
+ hadOldEnd = TRUE;
+
+ if ( !sel.swapped &&
+ ( hadEnd && !hadStart ||
+ hadEnd && hadStart && start.parag() == end.parag() && start.index() > end.index() ) )
+ sel.swapped = TRUE;
+
+ if ( c == end && hadStartParag ||
+ c == start && hadEndParag ) {
+ KoTextCursor tmp = c;
+ if ( tmp.parag() != c.parag() ) {
+ int sstart = tmp.parag()->selectionStart( id );
+ tmp.parag()->removeSelection( id );
+ tmp.parag()->setSelection( id, sstart, tmp.index() );
+ }
+ }
+
+ if ( inSelection &&
+ ( c == end && hadStart || c == start && hadEnd ) )
+ leftSelection = TRUE;
+ else if ( !leftSelection && !inSelection && ( hadStart || hadEnd ) )
+ inSelection = TRUE;
+
+ bool noSelectionAnymore = hadOldStart && hadOldEnd && leftSelection && !inSelection && !c.parag()->hasSelection( id ) && c.atParagEnd();
+ c.parag()->removeSelection( id );
+ if ( inSelection ) {
+ if ( c.parag() == start.parag() && start.parag() == end.parag() ) {
+ c.parag()->setSelection( id, QMIN( start.index(), end.index() ), QMAX( start.index(), end.index() ) );
+ } else if ( c.parag() == start.parag() && !hadEndParag ) {
+ c.parag()->setSelection( id, start.index(), c.parag()->length() - 1 );
+ } else if ( c.parag() == end.parag() && !hadStartParag ) {
+ c.parag()->setSelection( id, end.index(), c.parag()->length() - 1 );
+ } else if ( c.parag() == end.parag() && hadEndParag ) {
+ c.parag()->setSelection( id, 0, end.index() );
+ } else if ( c.parag() == start.parag() && hadStartParag ) {
+ c.parag()->setSelection( id, 0, start.index() );
+ } else {
+ c.parag()->setSelection( id, 0, c.parag()->length() - 1 );
+ }
+ }
+
+ if ( leftSelection )
+ inSelection = FALSE;
+
+ old = c;
+ c.gotoNextLetter();
+ if ( old == c || noSelectionAnymore )
+ break;
+ }
+
+ if ( !sel.swapped )
+ sel.startCursor.parag()->setSelection( id, sel.startCursor.index(), sel.startCursor.parag()->length() - 1 );
+
+ sel.startCursor = start;
+ sel.endCursor = end;
+ if ( sel.startCursor.parag() == sel.endCursor.parag() )
+ sel.swapped = sel.startCursor.index() > sel.endCursor.index();
+
+ setSelectionEndHelper( id, sel, start, end );
+
+ return TRUE;
+}
+
+void KoTextDocument::selectAll( int id )
+{
+ removeSelection( id );
+
+ KoTextDocumentSelection sel;
+ sel.swapped = FALSE;
+ KoTextCursor c( this );
+
+ c.setParag( fParag );
+ c.setIndex( 0 );
+ sel.startCursor = c;
+
+ c.setParag( lParag );
+ c.setIndex( lParag->length() - 1 );
+ sel.endCursor = c;
+
+ KoTextParag *p = fParag;
+ while ( p ) {
+ p->setSelection( id, 0, p->length() - 1 );
+#ifdef QTEXTTABLE_AVAILABLE
+ for ( int i = 0; i < (int)p->length(); ++i ) {
+ if ( p->at( i )->isCustom() && p->at( i )->customItem()->isNested() ) {
+ KoTextTable *t = (KoTextTable*)p->at( i )->customItem();
+ QPtrList<KoTextTableCell> tableCells = t->tableCells();
+ for ( KoTextTableCell *c = tableCells.first(); c; c = tableCells.next() )
+ c->richText()->selectAll( id );
+ }
+ }
+#endif
+ p = p->next();
+ }
+
+ selections.insert( id, sel );
+}
+
+bool KoTextDocument::removeSelection( int id )
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.find( id );
+ if ( it == selections.end() )
+ return FALSE;
+
+ KoTextDocumentSelection &sel = *it;
+
+ KoTextCursor c( this );
+ KoTextCursor tmp = sel.startCursor;
+ if ( sel.swapped )
+ tmp = sel.endCursor;
+ c.setParag( tmp.parag() );
+ KoTextCursor old;
+ bool hadStart = FALSE;
+ bool hadEnd = FALSE;
+ KoTextParag *lastParag = 0;
+ bool leftSelection = FALSE;
+ bool inSelection = FALSE;
+ sel.swapped = FALSE;
+ for ( ;; ) {
+ if ( !hadStart && c.parag() == sel.startCursor.parag() )
+ hadStart = TRUE;
+ if ( !hadEnd && c.parag() == sel.endCursor.parag() )
+ hadEnd = TRUE;
+
+ if ( !leftSelection && !inSelection && ( c.parag() == sel.startCursor.parag() || c.parag() == sel.endCursor.parag() ) )
+ inSelection = TRUE;
+
+ if ( inSelection &&
+ ( c == sel.endCursor && hadStart || c == sel.startCursor && hadEnd ) ) {
+ leftSelection = TRUE;
+ inSelection = FALSE;
+ }
+
+ bool noSelectionAnymore = leftSelection && !inSelection && !c.parag()->hasSelection( id ) && c.atParagEnd();
+
+ if ( lastParag != c.parag() )
+ c.parag()->removeSelection( id );
+
+ old = c;
+ lastParag = c.parag();
+ c.gotoNextLetter();
+ if ( old == c || noSelectionAnymore )
+ break;
+ }
+
+ selections.remove( id );
+ return TRUE;
+}
+
+QString KoTextDocument::selectedText( int id, bool withCustom ) const
+{
+ // ######## TODO: look at textFormat() and return rich text or plain text (like the text() method!)
+ QMap<int, KoTextDocumentSelection>::ConstIterator it = selections.find( id );
+ if ( it == selections.end() )
+ return QString::null;
+
+ KoTextDocumentSelection sel = *it;
+
+
+ KoTextCursor c1 = sel.startCursor;
+ KoTextCursor c2 = sel.endCursor;
+ if ( sel.swapped ) {
+ c2 = sel.startCursor;
+ c1 = sel.endCursor;
+ }
+
+ if ( c1.parag() == c2.parag() ) {
+ QString s;
+ KoTextParag *p = c1.parag();
+ int end = c2.index();
+ if ( p->at( QMAX( 0, end - 1 ) )->isCustom() )
+ ++end;
+ if ( !withCustom || !p->customItems() ) {
+ s += p->string()->toString().mid( c1.index(), end - c1.index() );
+ } else {
+ for ( int i = c1.index(); i < end; ++i ) {
+ if ( p->at( i )->isCustom() ) {
+#ifdef QTEXTTABLE_AVAILABLE
+ if ( p->at( i )->customItem()->isNested() ) {
+ s += "\n";
+ KoTextTable *t = (KoTextTable*)p->at( i )->customItem();
+ QPtrList<KoTextTableCell> cells = t->tableCells();
+ for ( KoTextTableCell *c = cells.first(); c; c = cells.next() )
+ s += c->richText()->plainText() + "\n";
+ s += "\n";
+ }
+#endif
+ } else {
+ s += p->at( i )->c;
+ }
+ s += "\n";
+ }
+ }
+ return s;
+ }
+
+ QString s;
+ KoTextParag *p = c1.parag();
+ int start = c1.index();
+ while ( p ) {
+ int end = p == c2.parag() ? c2.index() : p->length() - 1;
+ if ( p == c2.parag() && p->at( QMAX( 0, end - 1 ) )->isCustom() )
+ ++end;
+ if ( !withCustom || !p->customItems() ) {
+ s += p->string()->toString().mid( start, end - start );
+ if ( p != c2.parag() )
+ s += "\n";
+ } else {
+ for ( int i = start; i < end; ++i ) {
+ if ( p->at( i )->isCustom() ) {
+#ifdef QTEXTTABLE_AVAILABLE
+ if ( p->at( i )->customItem()->isNested() ) {
+ s += "\n";
+ KoTextTable *t = (KoTextTable*)p->at( i )->customItem();
+ QPtrList<KoTextTableCell> cells = t->tableCells();
+ for ( KoTextTableCell *c = cells.first(); c; c = cells.next() )
+ s += c->richText()->plainText() + "\n";
+ s += "\n";
+ }
+#endif
+ } else {
+ s += p->at( i )->c;
+ }
+ s += "\n";
+ }
+ }
+ start = 0;
+ if ( p == c2.parag() )
+ break;
+ p = p->next();
+ }
+ return s;
+}
+
+QString KoTextDocument::copySelection( KoXmlWriter& writer, KoSavingContext& context, int selectionId )
+{
+ KoTextCursor c1 = selectionStartCursor( selectionId );
+ KoTextCursor c2 = selectionEndCursor( selectionId );
+ QString text;
+ if ( c1.parag() == c2.parag() )
+ {
+ text = c1.parag()->toString( c1.index(), c2.index() - c1.index() );
+
+ c1.parag()->saveOasis( writer, context, c1.index(), c2.index()-1, true );
+ }
+ else
+ {
+ text += c1.parag()->toString( c1.index() ) + "\n";
+
+ c1.parag()->saveOasis( writer, context, c1.index(), c1.parag()->length()-2, true );
+ KoTextParag *p = c1.parag()->next();
+ while ( p && p != c2.parag() ) {
+ text += p->toString() + "\n";
+ p->saveOasis( writer, context, 0, p->length()-2, true );
+ p = p->next();
+ }
+ text += c2.parag()->toString( 0, c2.index() );
+ c2.parag()->saveOasis( writer, context, 0, c2.index() - 1, true );
+ }
+ return text;
+}
+
+void KoTextDocument::setFormat( int id, const KoTextFormat *f, int flags )
+{
+ QMap<int, KoTextDocumentSelection>::ConstIterator it = selections.find( id );
+ if ( it == selections.end() )
+ return;
+
+ KoTextDocumentSelection sel = *it;
+
+ KoTextCursor c1 = sel.startCursor;
+ KoTextCursor c2 = sel.endCursor;
+ if ( sel.swapped ) {
+ c2 = sel.startCursor;
+ c1 = sel.endCursor;
+ }
+
+ if ( c1.parag() == c2.parag() ) {
+ c1.parag()->setFormat( c1.index(), c2.index() - c1.index(), f, TRUE, flags );
+ return;
+ }
+
+ c1.parag()->setFormat( c1.index(), c1.parag()->length() - c1.index(), f, TRUE, flags );
+ KoTextParag *p = c1.parag()->next();
+ while ( p && p != c2.parag() ) {
+ p->setFormat( 0, p->length(), f, TRUE, flags );
+ p = p->next();
+ }
+ c2.parag()->setFormat( 0, c2.index(), f, TRUE, flags );
+}
+
+/*void KoTextDocument::copySelectedText( int id )
+{
+#ifndef QT_NO_CLIPBOARD
+ if ( !hasSelection( id ) )
+ return;
+
+ QApplication::clipboard()->setText( selectedText( id ) );
+#endif
+}*/
+
+void KoTextDocument::removeSelectedText( int id, KoTextCursor *cursor )
+{
+ QMap<int, KoTextDocumentSelection>::Iterator it = selections.find( id );
+ if ( it == selections.end() )
+ return;
+
+ KoTextDocumentSelection sel = *it;
+
+ KoTextCursor c1 = sel.startCursor;
+ KoTextCursor c2 = sel.endCursor;
+ if ( sel.swapped ) {
+ c2 = sel.startCursor;
+ c1 = sel.endCursor;
+ }
+
+ *cursor = c1;
+ removeSelection( id );
+
+ if ( c1.parag() == c2.parag() ) {
+ c1.parag()->remove( c1.index(), c2.index() - c1.index() );
+ return;
+ }
+
+ // ## Qt has a strange setValid/isValid on QTextCursor, only used in the few lines below !?!?
+ bool valid = true;
+ if ( c1.parag() == fParag && c1.index() == 0 &&
+ c2.parag() == lParag && c2.index() == lParag->length() - 1 )
+ valid = FALSE;
+
+ bool didGoLeft = FALSE;
+ if ( c1.index() == 0 && c1.parag() != fParag ) {
+ cursor->gotoPreviousLetter();
+ if ( valid )
+ didGoLeft = TRUE;
+ }
+
+ c1.parag()->remove( c1.index(), c1.parag()->length() - 1 - c1.index() );
+ KoTextParag *p = c1.parag()->next();
+ int dy = 0;
+ KoTextParag *tmp;
+ while ( p && p != c2.parag() ) {
+ tmp = p->next();
+ dy -= p->rect().height();
+ //emit paragraphDeleted( p ); // done by KoTextParag dtor already
+ delete p;
+ p = tmp;
+ }
+ c2.parag()->remove( 0, c2.index() );
+ while ( p ) {
+ p->move( dy );
+ //// kotext
+ if ( p->paragLayout().counter )
+ p->paragLayout().counter->invalidate();
+ ////
+ p->invalidate( 0 );
+ //p->setEndState( -1 );
+ p = p->next();
+ }
+
+ c1.parag()->join( c2.parag() );
+
+ if ( didGoLeft )
+ cursor->gotoNextLetter();
+}
+
+void KoTextDocument::addCommand( KoTextDocCommand *cmd )
+{
+ commandHistory->addCommand( cmd );
+}
+
+KoTextCursor *KoTextDocument::undo( KoTextCursor *c )
+{
+ return commandHistory->undo( c );
+}
+
+KoTextCursor *KoTextDocument::redo( KoTextCursor *c )
+{
+ return commandHistory->redo( c );
+}
+
+bool KoTextDocument::find( const QString &expr, bool cs, bool wo, bool forward,
+ int *parag, int *index, KoTextCursor *cursor )
+{
+ KoTextParag *p = forward ? fParag : lParag;
+ if ( parag )
+ p = paragAt( *parag );
+ else if ( cursor )
+ p = cursor->parag();
+ bool first = TRUE;
+
+ while ( p ) {
+ QString s = p->string()->toString();
+ s.remove( s.length() - 1, 1 ); // get rid of trailing space
+ int start = forward ? 0 : s.length() - 1;
+ if ( first && index )
+ start = *index;
+ else if ( first )
+ start = cursor->index();
+ if ( !forward && first ) {
+ start -= expr.length() + 1;
+ if ( start < 0 ) {
+ first = FALSE;
+ p = p->prev();
+ continue;
+ }
+ }
+ first = FALSE;
+
+ for ( ;; ) {
+ int res = forward ? s.find( expr, start, cs ) : s.findRev( expr, start, cs );
+ if ( res == -1 )
+ break;
+
+ bool ok = TRUE;
+ if ( wo ) {
+ int end = res + expr.length();
+ if ( ( res == 0 || s[ res - 1 ].isSpace() || s[ res - 1 ].isPunct() ) &&
+ ( end == (int)s.length() || s[ end ].isSpace() || s[ end ].isPunct() ) )
+ ok = TRUE;
+ else
+ ok = FALSE;
+ }
+ if ( ok ) {
+ cursor->setParag( p );
+ cursor->setIndex( res );
+ setSelectionStart( Standard, cursor );
+ cursor->setIndex( res + expr.length() );
+ setSelectionEnd( Standard, cursor );
+ if ( parag )
+ *parag = p->paragId();
+ if ( index )
+ *index = res;
+ return TRUE;
+ }
+ if ( forward ) {
+ start = res + 1;
+ } else {
+ if ( res == 0 )
+ break;
+ start = res - 1;
+ }
+ }
+ p = forward ? p->next() : p->prev();
+ }
+
+ return FALSE;
+}
+
+bool KoTextDocument::inSelection( int selId, const QPoint &pos ) const
+{
+ QMap<int, KoTextDocumentSelection>::ConstIterator it = selections.find( selId );
+ if ( it == selections.end() )
+ return FALSE;
+
+ KoTextDocumentSelection sel = *it;
+ KoTextParag *startParag = sel.startCursor.parag();
+ KoTextParag *endParag = sel.endCursor.parag();
+ if ( sel.startCursor.parag() == sel.endCursor.parag() &&
+ sel.startCursor.parag()->selectionStart( selId ) == sel.endCursor.parag()->selectionEnd( selId ) )
+ return FALSE;
+ if ( sel.endCursor.parag()->paragId() < sel.startCursor.parag()->paragId() ) {
+ endParag = sel.startCursor.parag();
+ startParag = sel.endCursor.parag();
+ }
+
+ KoTextParag *p = startParag;
+ while ( p ) {
+ if ( p->rect().contains( pos ) ) {
+ bool inSel = FALSE;
+ int selStart = p->selectionStart( selId );
+ int selEnd = p->selectionEnd( selId );
+ int y = 0;
+ int h = 0;
+ for ( int i = 0; i < p->length(); ++i ) {
+ if ( i == selStart )
+ inSel = TRUE;
+ if ( i == selEnd )
+ break;
+ if ( p->at( i )->lineStart ) {
+ y = (*p->lineStarts.find( i ))->y;
+ h = (*p->lineStarts.find( i ))->h;
+ }
+ if ( pos.y() - p->rect().y() >= y && pos.y() - p->rect().y() <= y + h ) {
+ if ( inSel && pos.x() >= p->at( i )->x &&
+ pos.x() <= p->at( i )->x + p->at( i )->width /*p->at( i )->format()->width( p->at( i )->c )*/ )
+ return TRUE;
+ }
+ }
+ }
+ if ( pos.y() < p->rect().y() )
+ break;
+ if ( p == endParag )
+ break;
+ p = p->next();
+ }
+
+ return FALSE;
+}
+
+QPixmap *KoTextDocument::bufferPixmap( const QSize &s )
+{
+ if ( !buf_pixmap ) {
+ int w = QABS( s.width() );
+ int h = QABS( s.height() );
+ buf_pixmap = new QPixmap( w, h );
+ } else {
+ if ( buf_pixmap->width() < s.width() ||
+ buf_pixmap->height() < s.height() ) {
+ buf_pixmap->resize( QMAX( s.width(), buf_pixmap->width() ),
+ QMAX( s.height(), buf_pixmap->height() ) );
+ }
+ }
+
+ return buf_pixmap;
+}
+
+void KoTextDocument::registerCustomItem( KoTextCustomItem *i, KoTextParag *p )
+{
+ if ( i && i->placement() != KoTextCustomItem::PlaceInline )
+ flow_->registerFloatingItem( i );
+ p->registerFloatingItem( i );
+ i->setParagraph( p );
+ //kdDebug(32500) << "KoTextDocument::registerCustomItem " << (void*)i << endl;
+ customItems.append( i );
+}
+
+void KoTextDocument::unregisterCustomItem( KoTextCustomItem *i, KoTextParag *p )
+{
+ flow_->unregisterFloatingItem( i );
+ p->unregisterFloatingItem( i );
+ i->setParagraph( 0 );
+ customItems.removeRef( i );
+}
+
+int KoTextDocument::length() const
+{
+ int l = 0;
+ KoTextParag *p = fParag;
+ while ( p ) {
+ l += p->length() - 1; // don't count trailing space
+ p = p->next();
+ }
+ return l;
+}
+
+bool KoTextDocument::visitSelection( int selectionId, KoParagVisitor* visitor, bool forward )
+{
+ KoTextCursor c1 = selectionStartCursor( selectionId );
+ KoTextCursor c2 = selectionEndCursor( selectionId );
+ if ( c1 == c2 )
+ return true;
+ return visitFromTo( c1.parag(), c1.index(), c2.parag(), c2.index(), visitor, forward );
+}
+
+bool KoTextDocument::hasSelection( int id, bool visible ) const
+{
+ return ( selections.find( id ) != selections.end() &&
+ ( !visible ||
+ ( (KoTextDocument*)this )->selectionStartCursor( id ) !=
+ ( (KoTextDocument*)this )->selectionEndCursor( id ) ) );
+}
+
+void KoTextDocument::setSelectionStart( int id, KoTextCursor *cursor )
+{
+ KoTextDocumentSelection sel;
+ sel.startCursor = *cursor;
+ sel.endCursor = *cursor;
+ sel.swapped = FALSE;
+ selections[ id ] = sel;
+}
+
+KoTextParag *KoTextDocument::paragAt( int i ) const
+{
+ KoTextParag *s = fParag;
+ while ( s ) {
+ if ( s->paragId() == i )
+ return s;
+ s = s->next();
+ }
+ return 0;
+}
+
+bool KoTextDocument::visitDocument( KoParagVisitor *visitor, bool forward )
+{
+ return visitFromTo( firstParag(), 0, lastParag(), lastParag()->length()-1, visitor, forward );
+}
+
+bool KoTextDocument::visitFromTo( KoTextParag *firstParag, int firstIndex, KoTextParag* lastParag, int lastIndex, KoParagVisitor* visitor, bool forw )
+{
+ if ( firstParag == lastParag )
+ {
+ return visitor->visit( firstParag, firstIndex, lastIndex );
+ }
+ else
+ {
+ bool ret = true;
+ if ( forw )
+ {
+ // the -1 is for the trailing space
+ ret = visitor->visit( firstParag, firstIndex, firstParag->length() - 1 );
+ if (!ret) return false;
+ }
+ else
+ {
+ ret = visitor->visit( lastParag, 0, lastIndex );
+ if (!ret) return false;
+ }
+
+ KoTextParag* currentParag = forw ? firstParag->next() : lastParag->prev();
+ KoTextParag * endParag = forw ? lastParag : firstParag;
+ while ( currentParag && currentParag != endParag )
+ {
+ ret = visitor->visit( currentParag, 0, currentParag->length() - 1 );
+ if (!ret) return false;
+ currentParag = forw ? currentParag->next() : currentParag->prev();
+ }
+ Q_ASSERT( currentParag );
+ Q_ASSERT( endParag == currentParag );
+ if ( forw )
+ ret = visitor->visit( lastParag, 0, lastIndex );
+ else
+ ret = visitor->visit( currentParag, firstIndex, currentParag->length() - 1 );
+ return ret;
+ }
+}
+
+static bool is_printer( QPainter *p )
+{
+ return p && p->device() && p->device()->devType() == QInternal::Printer;
+}
+
+KoTextParag *KoTextDocument::drawWYSIWYG( QPainter *p, int cx, int cy, int cw, int ch, const QColorGroup &cg,
+ KoTextZoomHandler* zoomHandler, bool onlyChanged,
+ bool drawCursor, KoTextCursor *cursor,
+ bool resetChanged, uint drawingFlags )
+{
+ m_drawingFlags = drawingFlags;
+ // We need to draw without double-buffering if
+ // 1) printing (to send text and not bitmaps to the printer)
+ // 2) drawing a transparent embedded document
+ //
+ if ( is_printer( p ) || ( drawingFlags & TransparentBackground ) ) {
+ // This stuff relies on doLayout()... simpler to just test for Printer.
+ // If someone understand doLayout() please tell me (David)
+ /*if ( isWithoutDoubleBuffer() || par && par->withoutDoubleBuffer ) { */
+ //setWithoutDoubleBuffer( TRUE );
+ QRect crect( cx, cy, cw, ch );
+ drawWithoutDoubleBuffer( p, crect, cg, zoomHandler );
+ return 0;
+ }
+ //setWithoutDoubleBuffer( FALSE );
+
+ if ( !firstParag() )
+ return 0;
+
+ KoTextParag *lastFormatted = 0;
+ KoTextParag *parag = firstParag();
+
+ QPixmap *doubleBuffer = 0;
+ QPainter painter;
+ // All the coordinates in this method are in view pixels
+ QRect crect( cx, cy, cw, ch );
+ Q_ASSERT( ch > 0 );
+#ifdef DEBUG_PAINTING
+ kdDebug(32500) << "\nKoTextDocument::drawWYSIWYG crect=" << crect << endl;
+#endif
+
+ // Space above first parag
+ QRect pixelRect = parag->pixelRect( zoomHandler );
+ if ( isPageBreakEnabled() && parag && cy <= pixelRect.y() && pixelRect.y() > 0 ) {
+ QRect r( 0, 0,
+ zoomHandler->layoutUnitToPixelX( parag->document()->x() + parag->document()->width() ),
+ pixelRect.y() );
+ r &= crect;
+ if ( !r.isEmpty() ) {
+#ifdef DEBUG_PAINTING
+ kdDebug(32500) << " drawWYSIWYG: space above first parag: " << r << " (pixels)" << endl;
+#endif
+ p->fillRect( r, cg.brush( QColorGroup::Base ) );
+ }
+ }
+
+ while ( parag ) {
+ lastFormatted = parag;
+ if ( !parag->isValid() )
+ parag->format();
+
+ QRect ir = parag->pixelRect( zoomHandler );
+#ifdef DEBUG_PAINTING
+ kdDebug(32500) << " drawWYSIWYG: ir=" << ir << endl;
+#endif
+ if ( isPageBreakEnabled() && parag->next() && ( drawingFlags & TransparentBackground ) == 0 )
+ {
+ int nexty = parag->next()->pixelRect(zoomHandler).y();
+ // Test ir.y+ir.height, which is the first pixel _under_ the parag
+ // (as opposed ir.bottom() which is the last pixel of the parag)
+ if ( ir.y() + ir.height() < nexty ) {
+ QRect r( 0, ir.y() + ir.height(),
+ zoomHandler->layoutUnitToPixelX( parag->document()->x() + parag->document()->width() ),
+ nexty - ( ir.y() + ir.height() ) );
+ r &= crect;
+ if ( !r.isEmpty() )
+ {
+#ifdef DEBUG_PAINTING
+ kdDebug(32500) << " drawWYSIWYG: space between parag " << parag->paragId() << " and " << parag->next()->paragId() << " : " << r << " (pixels)" << endl;
+#endif
+ p->fillRect( r, cg.brush( QColorGroup::Base ) );
+ }
+ }
+ }
+
+ if ( !ir.intersects( crect ) ) {
+ // Paragraph is not in the crect - but let's check if the area on its right is.
+ ir.setWidth( zoomHandler->layoutUnitToPixelX( parag->document()->width() ) );
+ if ( ir.intersects( crect ) && ( drawingFlags & TransparentBackground ) == 0 )
+ p->fillRect( ir.intersect( crect ), cg.brush( QColorGroup::Base ) );
+ if ( ir.y() > cy + ch ) {
+ goto floating;
+ }
+ }
+ else if ( parag->hasChanged() || !onlyChanged ) {
+ // lineChanged() only makes sense if we're drawing with onlyChanged=true
+ // otherwise, call setChanged() to make sure we'll paint it all (lineChanged=-1).
+ // (this avoids having to send onlyChanged to drawParagWYSIWYG)
+ if ( !onlyChanged && parag->lineChanged() > 0 )
+ parag->setChanged( false );
+ drawParagWYSIWYG( p, parag, cx, cy, cw, ch, doubleBuffer, cg,
+ zoomHandler, drawCursor, cursor, resetChanged, drawingFlags );
+ }
+ parag = parag->next();
+ }
+
+ parag = lastParag();
+
+floating:
+ pixelRect = parag->pixelRect(zoomHandler);
+ int docheight = zoomHandler->layoutUnitToPixelY( parag->document()->height() );
+ if ( pixelRect.y() + pixelRect.height() < docheight ) {
+ int docwidth = zoomHandler->layoutUnitToPixelX( parag->document()->width() );
+ if ( ( drawingFlags & TransparentBackground ) == 0 ) {
+ p->fillRect( 0, pixelRect.y() + pixelRect.height(),
+ docwidth, docheight - ( pixelRect.y() + pixelRect.height() ),
+ cg.brush( QColorGroup::Base ) );
+ }
+ if ( !flow()->isEmpty() ) {
+ QRect cr( cx, cy, cw, ch );
+ cr = cr.intersect( QRect( 0, pixelRect.y() + pixelRect.height(), docwidth,
+ docheight - ( pixelRect.y() + pixelRect.height() ) ) );
+ flow()->drawFloatingItems( p, cr.x(), cr.y(), cr.width(), cr.height(), cg, FALSE );
+ }
+ }
+
+ if ( buf_pixmap && buf_pixmap->height() > 300 ) {
+ delete buf_pixmap;
+ buf_pixmap = 0;
+ }
+
+ return lastFormatted;
+}
+
+
+// Used for printing
+void KoTextDocument::drawWithoutDoubleBuffer( QPainter *p, const QRect &cr, const QColorGroup &cg,
+ KoTextZoomHandler* zoomHandler, const QBrush *paper )
+{
+ if ( !firstParag() )
+ return;
+
+ Q_ASSERT( (m_drawingFlags & DrawSelections) == 0 );
+ if (m_drawingFlags & DrawSelections)
+ kdDebug() << kdBacktrace();
+ if ( paper && ( m_drawingFlags & TransparentBackground ) == 0 ) {
+ p->setBrushOrigin( -(int)p->translationX(), -(int)p->translationY() );
+ p->fillRect( cr, *paper );
+ }
+
+ KoTextParag *parag = firstParag();
+ while ( parag ) {
+ if ( !parag->isValid() )
+ parag->format();
+
+ QRect pr( parag->pixelRect( zoomHandler ) );
+ pr.setLeft( 0 );
+ pr.setWidth( QWIDGETSIZE_MAX );
+ // The cliprect is checked in layout units, in KoTextParag::paint
+ QRect crect_lu( parag->rect() );
+
+ if ( !cr.isNull() && !cr.intersects( pr ) ) {
+ parag = parag->next();
+ continue;
+ }
+
+ p->translate( 0, pr.y() );
+
+ // No need to brush plain white on a printer. Brush all
+ // other cases (except "full transparent" case).
+ QBrush brush = cg.brush( QColorGroup::Base );;
+ bool needBrush = brush.style() != Qt::NoBrush &&
+ !(brush.style() == Qt::SolidPattern &&
+ brush.color() == Qt::white &&
+ is_printer(p));
+ if ( needBrush && ( m_drawingFlags & TransparentBackground ) == 0 )
+ p->fillRect( QRect( 0, 0, pr.width(), pr.height() ), brush );
+
+ //p->setBrushOrigin( p->brushOrigin() + QPoint( 0, pr.y() ) );
+ parag->paint( *p, cg, 0, FALSE,
+ crect_lu.x(), crect_lu.y(),
+ crect_lu.width(), crect_lu.height() );
+ p->translate( 0, -pr.y() );
+ //p->setBrushOrigin( p->brushOrigin() - QPoint( 0, pr.y() ) );
+ parag = parag->next();
+ }
+}
+
+// Used for screen display (and also printing?)
+// Called by drawWYSIWYG and the app's drawCursor
+void KoTextDocument::drawParagWYSIWYG( QPainter *p, KoTextParag *parag, int cx, int cy, int cw, int ch,
+ QPixmap *&doubleBuffer, const QColorGroup &cg,
+ KoTextZoomHandler* zoomHandler, bool drawCursor,
+ KoTextCursor *cursor, bool resetChanged, uint drawingFlags )
+{
+ if ( cw <= 0 || ch <= 0 ) { Q_ASSERT( cw > 0 ); Q_ASSERT( ch > 0 ); return; }
+#ifdef DEBUG_PAINTING
+ kdDebug(32500) << "KoTextDocument::drawParagWYSIWYG " << (void*)parag << " id:" << parag->paragId() << endl;
+#endif
+ m_drawingFlags = drawingFlags;
+ QPainter *painter = 0;
+ // Those three rects are in pixels, in the document coordinates (0,0 == topleft of first parag)
+ QRect rect = parag->pixelRect( zoomHandler ); // the parag rect
+
+ int offsetY = 0;
+ // Start painting from a given line number.
+ if ( parag->lineChanged() > -1 )
+ {
+ offsetY = zoomHandler->layoutUnitToPixelY( parag->lineY( parag->lineChanged() ) - parag->topMargin() );
+#ifdef DEBUG_PAINTING
+ kdDebug(32500) << " Repainting from lineChanged=" << parag->lineChanged() << " -> adding " << offsetY << " to rect" << endl;
+#endif
+ // Skip the lines that are not repainted by moving Top. The bottom doesn't change.
+ rect.rTop() += offsetY;
+ }
+
+ QRect crect( cx, cy, cw, ch ); // the overall crect
+ QRect ir( rect ); // will be the rect to be repainted
+
+ QBrush brush = cg.brush( QColorGroup::Base );
+
+ // No need to brush plain white on a printer. Brush all
+ // other cases (except "full transparent" case).
+ bool needBrush = brush.style() != Qt::NoBrush &&
+ ( drawingFlags & TransparentBackground ) == 0 &&
+ !(brush.style() == Qt::SolidPattern &&
+ brush.color() == Qt::white &&
+ is_printer(p));
+
+ bool useDoubleBuffer = !parag->document()->parent();
+ if ( is_printer(p) )
+ useDoubleBuffer = FALSE;
+ // Can't handle transparency using double-buffering, in case of rotation/scaling (due to bitBlt)
+ // The test on mat is almost like isIdentity(), but allows for translation.
+ //// ##### The way to fix this: initialize the pixmap to be fully transparent instead
+ // of being white.
+ QWMatrix mat = p->worldMatrix();
+ if ( ( mat.m11() != 1.0 || mat.m22() != 1.0 || mat.m12() != 0.0 || mat.m21() != 0.0 )
+ && brush.style() != Qt::SolidPattern )
+ useDoubleBuffer = FALSE;
+
+#ifdef DEBUG_PAINTING
+ kdDebug(32500) << "KoTextDocument::drawParagWYSIWYG parag->rect=" << parag->rect()
+ << " pixelRect(ir)=" << ir
+ << " crect (pixels)=" << crect
+ << " useDoubleBuffer=" << useDoubleBuffer << endl;
+#endif
+
+ if ( useDoubleBuffer ) {
+ painter = new QPainter;
+ if ( cx >= 0 && cy >= 0 )
+ ir = ir.intersect( crect );
+ if ( !doubleBuffer ||
+ ir.width() > doubleBuffer->width() ||
+ ir.height() > doubleBuffer->height() )
+ {
+ doubleBuffer = bufferPixmap( ir.size() );
+ }
+ painter->begin( doubleBuffer );
+
+ } else {
+ p->save();
+ painter = p;
+ painter->translate( ir.x(), ir.y() );
+ }
+ // Until the next translate(), (0,0) in the painter will be at ir.topLeft() in reality
+ //kdDebug() << "KoTextDocument::drawParagWYSIWYG ir=" << ir << endl;
+
+
+ // Cumulate ir.x(), ir.y() with the current brush origin
+ //painter->setBrushOrigin( painter->brushOrigin() + ir.topLeft() );
+
+ if ( useDoubleBuffer || is_printer( painter ) ) {
+ // Transparent -> grab background from p's device
+ if ( brush.style() != Qt::SolidPattern ) {
+ bitBlt( doubleBuffer, 0, 0, p->device(),
+ ir.x() + (int)p->translationX(), ir.y() + (int)p->translationY(),
+ ir.width(), ir.height() );
+ }
+ }
+
+ if ( needBrush )
+ painter->fillRect( QRect( 0, 0, ir.width(), ir.height() ), brush );
+
+ // Now revert the previous painter translation, and instead make (0,0) the topleft of the PARAGRAPH
+ painter->translate( rect.x() - ir.x(), rect.y() - ir.y() );
+#ifdef DEBUG_PAINTING
+ kdDebug(32500) << "KoTextDocument::drawParagWYSIWYG translate " << rect.x() - ir.x() << "," << rect.y() - ir.y() << endl;
+#endif
+ //painter->setBrushOrigin( painter->brushOrigin() + rect.topLeft() - ir.topLeft() );
+
+ // The cliprect is checked in layout units, in KoTextParag::paint
+ QRect crect_lu( zoomHandler->pixelToLayoutUnit( crect ) );
+#ifdef DEBUG_PAINTING
+ kdDebug(32500) << "KoTextDocument::drawParagWYSIWYG crect_lu=" << crect_lu << endl;
+#endif
+
+ // paintDefault will paint line 'lineChanged' at its normal Y position.
+ // But the buffer-pixmap below starts at Y. We need to translate by -Y
+ // so that the painting happens at the right place.
+ painter->translate( 0, -offsetY );
+
+ parag->paint( *painter, cg, drawCursor ? cursor : 0, (m_drawingFlags & DrawSelections),
+ crect_lu.x(), crect_lu.y(), crect_lu.width(), crect_lu.height() );
+
+
+ if ( useDoubleBuffer ) {
+ delete painter;
+ painter = 0;
+ p->drawPixmap( ir.topLeft(), *doubleBuffer, QRect( QPoint( 0, 0 ), ir.size() ) );
+#if 0 // for debug!
+ p->save();
+ p->setPen( Qt::blue );
+ p->drawRect( ir.x(), ir.y(), ir.width(), ir.height() );
+ p->restore();
+#endif
+ } else {
+ // undo previous translations, painter is 'p', i.e. will be used later on
+ p->restore();
+ //painter->translate( -ir.x(), -ir.y() );
+ //painter->translate( 0, +offsetY );
+ //painter->setBrushOrigin( painter->brushOrigin() - ir.topLeft() );
+ }
+
+ if ( needBrush ) {
+ int docright = zoomHandler->layoutUnitToPixelX( parag->document()->x() + parag->document()->width() );
+#ifdef DEBUG_PAINTING
+// kdDebug(32500) << "KoTextDocument::drawParagWYSIWYG my rect is: " << rect << endl;
+#endif
+ if ( rect.x() + rect.width() < docright ) {
+#ifdef DEBUG_PAINTING
+ kdDebug(32500) << "KoTextDocument::drawParagWYSIWYG rect doesn't go up to docright=" << docright << endl;
+#endif
+ p->fillRect( rect.x() + rect.width(), rect.y(),
+ docright - ( rect.x() + rect.width() ),
+ rect.height(), cg.brush( QColorGroup::Base ) );
+ }
+ }
+
+ if ( resetChanged )
+ parag->setChanged( FALSE );
+}
+
+
+KoTextDocCommand *KoTextDocument::deleteTextCommand( KoTextDocument *textdoc, int id, int index, const QMemArray<KoTextStringChar> & str, const CustomItemsMap & customItemsMap, const QValueList<KoParagLayout> & oldParagLayouts )
+{
+ return new KoTextDeleteCommand( textdoc, id, index, str, customItemsMap, oldParagLayouts );
+}
+
+KoTextParag* KoTextDocument::loadOasisText( const QDomElement& bodyElem, KoOasisContext& context, KoTextParag* lastParagraph, KoStyleCollection* styleColl, KoTextParag* nextParagraph )
+{
+ // was OoWriterImport::parseBodyOrSimilar
+ QDomElement tag;
+ forEachElement( tag, bodyElem )
+ {
+ context.styleStack().save();
+ const QString localName = tag.localName();
+ const bool isTextNS = tag.namespaceURI() == KoXmlNS::text;
+ uint pos = 0;
+ if ( isTextNS && localName == "p" ) { // text paragraph
+ context.fillStyleStack( tag, KoXmlNS::text, "style-name", "paragraph" );
+
+ KoTextParag *parag = createParag( this, lastParagraph, nextParagraph );
+ parag->loadOasis( tag, context, styleColl, pos );
+ if ( !lastParagraph ) // First parag
+ setFirstParag( parag );
+ lastParagraph = parag;
+ }
+ else if ( isTextNS && localName == "h" ) // heading
+ {
+ //kdDebug(32500) << " heading " << endl;
+ context.fillStyleStack( tag, KoXmlNS::text, "style-name", "paragraph" );
+ int level = tag.attributeNS( KoXmlNS::text, "outline-level", QString::null ).toInt();
+ bool listOK = false;
+ // When a heading is inside a list, it seems that the list prevails.
+ // Example:
+ // <text:list text:style-name="Numbering 1">
+ // <text:list-item text:start-value="5">
+ // <text:h text:style-name="P2" text:level="4">The header</text:h>
+ // where P2 has list-style-name="something else"
+ // Result: the numbering of the header follows "Numbering 1".
+ // So we use the style for the outline level only if we're not inside a list:
+ //if ( !context.atStartOfListItem() )
+ // === The new method for this is that we simply override it after loading.
+ listOK = context.pushOutlineListLevelStyle( level );
+ int restartNumbering = -1;
+ if ( tag.hasAttributeNS( KoXmlNS::text, "start-value" ) )
+ // OASIS extension http://lists.oasis-open.org/archives/office/200310/msg00033.html
+ restartNumbering = tag.attributeNS( KoXmlNS::text, "start-value", QString::null ).toInt();
+
+ KoTextParag *parag = createParag( this, lastParagraph, nextParagraph );
+ parag->loadOasis( tag, context, styleColl, pos );
+ if ( !lastParagraph ) // First parag
+ setFirstParag( parag );
+ lastParagraph = parag;
+ if ( listOK ) {
+ parag->applyListStyle( context, restartNumbering, true /*ordered*/, true /*heading*/, level );
+ context.listStyleStack().pop();
+ }
+ }
+ else if ( isTextNS &&
+ ( localName == "unordered-list" || localName == "ordered-list" // OOo-1.1
+ || localName == "list" || localName == "numbered-paragraph" ) ) // OASIS
+ {
+ lastParagraph = loadList( tag, context, lastParagraph, styleColl, nextParagraph );
+ }
+ else if ( isTextNS && localName == "section" ) // Temporary support (###TODO)
+ {
+ kdDebug(32500) << "Section found!" << endl;
+ context.fillStyleStack( tag, KoXmlNS::text, "style-name", "section" );
+ lastParagraph = loadOasisText( tag, context, lastParagraph, styleColl, nextParagraph );
+ }
+ else if ( isTextNS && localName == "variable-decls" )
+ {
+ // We don't parse variable-decls since we ignore var types right now
+ // (and just storing a list of available var names wouldn't be much use)
+ }
+ else if ( isTextNS && localName == "user-field-decls" )
+ {
+ QDomElement fd;
+ forEachElement( fd, tag )
+ {
+ if ( fd.namespaceURI() == KoXmlNS::text && fd.localName() == "user-field-decl" )
+ {
+ const QString name = fd.attributeNS( KoXmlNS::text, "name", QString::null );
+ const QString value = fd.attributeNS( KoXmlNS::office, "value", QString::null );
+ if ( !name.isEmpty() )
+ context.variableCollection().setVariableValue( name, value );
+ }
+ }
+ }
+ else if ( isTextNS && localName == "number" ) // text:number
+ {
+ // This is the number in front of a numbered paragraph,
+ // written out to help export filters. We can ignore it.
+ }
+ else if ( !loadOasisBodyTag( tag, context, lastParagraph, styleColl, nextParagraph ) )
+ {
+ kdWarning(32500) << "Unsupported body element '" << localName << "'" << endl;
+ }
+
+ context.styleStack().restore(); // remove the styles added by the paragraph or list
+ //use signal slot ?
+ //m_doc->progressItemLoaded(); // ## check
+ }
+ return lastParagraph;
+}
+
+KoTextParag* KoTextDocument::loadList( const QDomElement& list, KoOasisContext& context, KoTextParag* lastParagraph, KoStyleCollection * styleColl, KoTextParag* nextParagraph )
+{
+ //kdDebug(32500) << "loadList: " << list.attributeNS( KoXmlNS::text, "style-name", QString::null ) << endl;
+
+ const QString oldListStyleName = context.currentListStyleName();
+ if ( list.hasAttributeNS( KoXmlNS::text, "style-name" ) )
+ context.setCurrentListStyleName( list.attributeNS( KoXmlNS::text, "style-name", QString::null ) );
+ bool listOK = !context.currentListStyleName().isEmpty();
+ int level;
+ if ( list.localName() == "numbered-paragraph" )
+ level = list.attributeNS( KoXmlNS::text, "level", "1" ).toInt();
+ else
+ level = context.listStyleStack().level() + 1;
+ if ( listOK )
+ listOK = context.pushListLevelStyle( context.currentListStyleName(), level );
+
+ const QDomElement listStyle = context.listStyleStack().currentListStyle();
+ // The tag is either list-level-style-number or list-level-style-bullet
+ const bool orderedList = listStyle.localName() == "list-level-style-number";
+
+ if ( list.localName() == "numbered-paragraph" )
+ {
+ // A numbered-paragraph contains paragraphs directly (it's both a list and a list-item)
+ int restartNumbering = -1;
+ if ( list.hasAttributeNS( KoXmlNS::text, "start-value" ) )
+ restartNumbering = list.attributeNS( KoXmlNS::text, "start-value", QString::null ).toInt();
+ KoTextParag* oldLast = lastParagraph;
+ lastParagraph = loadOasisText( list, context, lastParagraph, styleColl, nextParagraph );
+ KoTextParag* firstListItem = oldLast ? oldLast->next() : firstParag();
+ // Apply list style to first paragraph inside numbered-parag - there's only one anyway
+ // Keep the "is outline" property though
+ bool isOutline = firstListItem->counter() && firstListItem->counter()->numbering() == KoParagCounter::NUM_CHAPTER;
+ firstListItem->applyListStyle( context, restartNumbering, orderedList,
+ isOutline, level );
+ }
+ else
+ {
+ // Iterate over list items
+ for ( QDomNode n = list.firstChild(); !n.isNull(); n = n.nextSibling() )
+ {
+ QDomElement listItem = n.toElement();
+ int restartNumbering = -1;
+ if ( listItem.hasAttributeNS( KoXmlNS::text, "start-value" ) )
+ restartNumbering = listItem.attributeNS( KoXmlNS::text, "start-value", QString::null ).toInt();
+ bool isListHeader = listItem.localName() == "list-header" || listItem.attributeNS( KoXmlNS::text, "is-list-header", QString::null ) == "is-list-header";
+ KoTextParag* oldLast = lastParagraph;
+ lastParagraph = loadOasisText( listItem, context, lastParagraph, styleColl, nextParagraph );
+ KoTextParag* firstListItem = oldLast ? oldLast->next() : firstParag();
+ KoTextParag* p = firstListItem;
+ // It's either list-header (normal text on top of list) or list-item
+ if ( !isListHeader && firstListItem ) {
+ // Apply list style to first paragraph inside list-item
+ bool isOutline = firstListItem->counter() && firstListItem->counter()->numbering() == KoParagCounter::NUM_CHAPTER;
+ firstListItem->applyListStyle( context, restartNumbering, orderedList, isOutline, level );
+ p = p->next();
+ }
+ // Make text:h inside list-item (as non first child) unnumbered.
+ while ( p && p != lastParagraph->next() ) {
+ if ( p->counter() )
+ p->counter()->setNumbering( KoParagCounter::NUM_NONE );
+ p = p->next();
+ }
+ }
+ }
+ if ( listOK )
+ context.listStyleStack().pop();
+ context.setCurrentListStyleName( oldListStyleName );
+ return lastParagraph;
+}
+
+void KoTextDocument::saveOasisContent( KoXmlWriter& writer, KoSavingContext& context ) const
+{
+ // Basically just call saveOasis on every paragraph.
+ // KWord doesn't use this method because it does table-of-contents-handling in addition.
+ KoTextParag* parag = firstParag();
+ while ( parag ) {
+ // Save the whole parag, without the trailing space.
+ parag->saveOasis( writer, context, 0, parag->lastCharPos() );
+ parag = parag->next();
+ }
+}
+
+#include "KoTextDocument.moc"
diff --git a/lib/kotext/KoTextDocument.h b/lib/kotext/KoTextDocument.h
new file mode 100644
index 00000000..39143d08
--- /dev/null
+++ b/lib/kotext/KoTextDocument.h
@@ -0,0 +1,619 @@
+// -*- c++ -*-
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOTEXTDOCUMENT_H
+#define KOTEXTDOCUMENT_H
+
+#include "KoRichText.h"
+#include <koffice_export.h>
+#if defined(Q_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class Q_EXPORT QMap<int, QColor>;
+template class Q_EXPORT QMap<int, bool>;
+template class Q_EXPORT QMap<int, KoTextDocumentSelection>;
+template class Q_EXPORT QPtrList<KoTextDocument>;
+// MOC_SKIP_END
+#endif
+
+class KoStyleCollection;
+class KoXmlWriter;
+class KoGenStyles;
+class KoTextZoomHandler;
+class KoTextFormatCollection;
+class KoParagVisitor;
+class KoTextFormatter;
+class KoTextParag;
+class CustomItemsMap;
+
+class KOTEXT_EXPORT KoTextDocument : public QObject
+{
+ Q_OBJECT
+
+ friend class KoTextCursor;
+ friend class KoTextParag;
+
+public:
+ /** Identifiers for possible selections. */
+ enum SelectionId {
+ Standard = 0,
+ InputMethodPreedit = 1,
+ HighlightSelection = 2, // used to highlight during search/replace
+ Temp = 32000 // This selection must not be drawn, it's used e.g. by undo/redo to
+ // remove multiple lines with removeSelectedText()
+ };
+
+ //KoTextDocument( KoTextDocument *p );
+ //KoTextDocument( KoTextDocument *d, KoTextFormatCollection *f );
+ // see below for constructor
+ virtual ~KoTextDocument();
+
+ //KoTextDocument *parent() const { return par; }
+
+ void setText( const QString &text, const QString &context );
+
+ //QString text() const;
+ //QString text( int parag ) const;
+ //QString originalText() const;
+
+ int x() const;
+ int y() const;
+ int width() const;
+ //int widthUsed() const;
+ //int visibleWidth() const;
+ int height() const;
+ void setWidth( int w );
+ //int minimumWidth() const;
+ //virtual bool setMinimumWidth( int w, KoTextParag *parag );
+
+ void setY( int y );
+ int leftMargin() const;
+ void setLeftMargin( int lm );
+ int rightMargin() const;
+ void setRightMargin( int rm );
+
+ KoTextParag *firstParag() const;
+ KoTextParag *lastParag() const;
+ void setFirstParag( KoTextParag *p );
+ void setLastParag( KoTextParag *p );
+
+ void invalidate();
+
+ //void setPreProcessor( KoTextPreProcessor *sh );
+ //KoTextPreProcessor *preProcessor() const;
+
+ void setFormatter( KoTextFormatterBase *f );
+ KoTextFormatterBase *formatter() const;
+
+ QColor selectionColor( int id ) const;
+ bool invertSelectionText( int id ) const;
+ void setSelectionColor( int id, const QColor &c );
+ void setInvertSelectionText( int id, bool b );
+ bool hasSelection( int id, bool visible = false ) const;
+ bool isSelectionSwapped( int id ); //// kotext
+ void setSelectionStart( int id, KoTextCursor *cursor );
+ bool setSelectionEnd( int id, KoTextCursor *cursor );
+ void selectAll( int id );
+ bool removeSelection( int id );
+ void selectionStart( int id, int &paragId, int &index );
+ KoTextCursor selectionStartCursor( int id );
+ KoTextCursor selectionEndCursor( int id );
+ void selectionEnd( int id, int &paragId, int &index );
+ void setFormat( int id, const KoTextFormat *f, int flags );
+ KoTextParag *selectionStart( int id );
+ KoTextParag *selectionEnd( int id );
+ int numSelections() const { return nSelections; }
+ void addSelection( int id );
+
+ QString selectedText( int id, bool withCustom = TRUE ) const;
+ //void copySelectedText( int id );
+ void removeSelectedText( int id, KoTextCursor *cursor );
+
+ KoTextParag *paragAt( int i ) const;
+
+ void addCommand( KoTextDocCommand *cmd );
+ KoTextCursor *undo( KoTextCursor *c = 0 );
+ KoTextCursor *redo( KoTextCursor *c = 0 );
+ KoTextDocCommandHistory *commands() const { return commandHistory; }
+
+ KoTextFormatCollection *formatCollection() const;
+
+ bool find( const QString &expr, bool cs, bool wo, bool forward, int *parag, int *index, KoTextCursor *cursor );
+
+ //void setTextFormat( Qt::TextFormat f );
+ //Qt::TextFormat textFormat() const;
+
+ bool inSelection( int selId, const QPoint &pos ) const;
+
+ void setUnderlineLinks( bool b ) { underlLinks = b; }
+ bool underlineLinks() const { return underlLinks; }
+
+ void setPaper( QBrush *brush ) { if ( backBrush ) delete backBrush; backBrush = brush; }
+ QBrush *paper() const { return backBrush; }
+
+ //void doLayout( QPainter *p, int w );
+#if 0 // see KoTextDocument
+ void draw( QPainter *p, const QRect& rect, const QColorGroup &cg, const QBrush *paper = 0 );
+ void drawParag( QPainter *p, KoTextParag *parag, int cx, int cy, int cw, int ch,
+ QPixmap *&doubleBuffer, const QColorGroup &cg,
+ bool drawCursor, KoTextCursor *cursor, bool resetChanged = TRUE );
+ KoTextParag *draw( QPainter *p, int cx, int cy, int cw, int ch, const QColorGroup &cg,
+ bool onlyChanged = FALSE, bool drawCursor = FALSE, KoTextCursor *cursor = 0,
+ bool resetChanged = TRUE );
+#endif
+
+ //void setDefaultFont( const QFont &f );
+
+ void registerCustomItem( KoTextCustomItem *i, KoTextParag *p );
+ void unregisterCustomItem( KoTextCustomItem *i, KoTextParag *p );
+ const QPtrList<KoTextCustomItem> & allCustomItems() const { return customItems; }
+
+ void setFlow( KoTextFlow *f );
+ void takeFlow();
+ KoTextFlow *flow() const { return flow_; }
+ bool isPageBreakEnabled() const { return m_pageBreakEnabled; }
+ void setPageBreakEnabled( bool b ) { m_pageBreakEnabled = b; }
+
+ void setWithoutDoubleBuffer( bool b ) { withoutDoubleBuffer = b; }
+ bool isWithoutDoubleBuffer() const { return withoutDoubleBuffer; } // added for KWTextDocument
+
+ void setUseFormatCollection( bool b ) { useFC = b; }
+ bool useFormatCollection() const { return useFC; }
+
+#ifdef QTEXTTABLE_AVAILABLE
+ KoTextTableCell *tableCell() const { return tc; }
+ void setTableCell( KoTextTableCell *c ) { tc = c; }
+#endif
+
+ void setPlainText( const QString &text );
+ //void setRichText( const QString &text, const QString &context );
+ //QString richText( KoTextParag *p = 0 ) const;
+ QString plainText() const;
+
+ //bool focusNextPrevChild( bool next );
+
+ int alignment() const;
+ void setAlignment( int a );
+
+ int *tabArray() const;
+ int tabStopWidth() const;
+ void setTabArray( int *a );
+ void setTabStops( int tw );
+
+ void setUndoDepth( int d ) { commandHistory->setUndoDepth( d ); }
+ int undoDepth() const { return commandHistory->undoDepth(); }
+
+ int length() const;
+ void clear( bool createEmptyParag = FALSE );
+
+ KoTextParag* loadList( const QDomElement& list, KoOasisContext& context, KoTextParag* lastParagraph, KoStyleCollection * styleColl, KoTextParag* nextParagraph );
+
+ // For normal loading nextParagraph and pos are 0.
+ KoTextParag* loadOasisText( const QDomElement &bodyElem, KoOasisContext& context, KoTextParag* lastParagraph, KoStyleCollection * styleColl, KoTextParag* nextParagraph );
+
+ QString copySelection( KoXmlWriter& writer, KoSavingContext& context, int selectionId );
+
+ void saveOasisContent( KoXmlWriter& writer, KoSavingContext& context ) const;
+
+ virtual KoTextParag *createParag( KoTextDocument *d, KoTextParag *pr = 0, KoTextParag *nx = 0, bool updateIds = TRUE );
+
+ // Whether margins are added or max'ed.
+ int addMargins() const { return true; }
+
+ void informParagraphDeleted( KoTextParag* parag );
+
+signals:
+ //void minimumWidthChanged( int );
+
+ /** Emitted when a paragraph is deleted (kotext addition) */
+ void paragraphDeleted( KoTextParag* parag );
+
+private:
+ void init();
+ QPixmap *bufferPixmap( const QSize &s );
+
+ //// Beginning of kotext additions
+
+public:
+ /**
+ * Construct a text document, i.e. a set of paragraphs
+ *
+ * @param zoomHandler The KoTextZoomHandler instance, to handle the zooming, as the name says :)
+ * We need one here because KoTextFormatter needs one for formatting, currently.
+ *
+ * @param fc a format collection for this document. Ownership is transferred to the document. ###
+ * @param formatter a text formatter for this document. If 0L, a KoTextFormatter is created.
+ * If not, ownership of the given one is transferred to the document.
+ * @param createInitialParag if true, an initial KoTextParag is created. Set to false if you reimplement createParag,
+ * since the constructor can't call the reimplementation. In that case, make sure to call
+ * clear(true) in your constructor; QRT doesn't support documents without paragraphs.
+ */
+ KoTextDocument( KoTextZoomHandler *zoomHandler,
+ KoTextFormatCollection *fc, KoTextFormatter *formatter = 0L,
+ bool createInitialParag = true );
+
+ /** Return the zoom handler associated with this document,
+ * used when formatting. Don't use for any other purpose, it might disappear. */
+ KoTextZoomHandler * formattingZoomHandler() const { return m_zoomHandler; }
+
+ /**
+ * Return the zoom handler currently used for drawing.
+ * (This means, at a particular zoom level).
+ * Don't call this in a method that isn't called by drawWYSIWYG, it will be 0L !
+ * (a different one than zoomHandler(), in case it disappears one day,
+ * to have different zoom levels in different views)
+ */
+ KoTextZoomHandler * paintingZoomHandler() const { return m_zoomHandler; }
+
+
+ /** Visit all the parts of a selection.
+ * Returns true, unless canceled. See KoParagVisitor. */
+ bool visitSelection( int selectionId, KoParagVisitor *visitor, bool forward = true );
+
+ /** Visit all paragraphs of the document.
+ * Returns true, unless canceled. See KoParagVisitor. */
+ bool visitDocument( KoParagVisitor *visitor, bool forward = true );
+
+ /** Visit the document between those two point.
+ * Returns true, unless canceled. See KoParagVisitor. */
+ bool visitFromTo( KoTextParag *firstParag, int firstIndex, KoTextParag* lastParag, int lastIndex, KoParagVisitor* visitor, bool forw = true );
+
+ /**
+ * Used by ~KoTextParag to know if it should die quickly
+ */
+ bool isDestroying() const { return m_bDestroying; }
+
+ /**
+ * Flags for drawWYSIWYG and drawParagWYSIWYG
+ */
+ enum DrawingFlags {
+ DrawMisspelledLine = 1,
+ DrawFormattingChars = 2,
+ DrawSelections = 4,
+ DontDrawNoteVariable = 8,
+ TransparentBackground = 16
+ };
+ /** The main drawing method. Equivalent to KoTextDocument::draw, but reimplemented
+ * for wysiwyg */
+ KoTextParag *drawWYSIWYG( QPainter *p, int cx, int cy, int cw, int ch, const QColorGroup &cg,
+ KoTextZoomHandler* zoomHandler, bool onlyChanged = FALSE,
+ bool drawCursor = FALSE, KoTextCursor *cursor = 0,
+ bool resetChanged = TRUE, uint drawingFlags = KoTextDocument::DrawSelections );
+
+ /** Draw a single paragraph (used by drawWYSIWYG and by KWTextFrameSet::drawCursor).
+ * Equivalent to KoTextDocument::draw, but modified for wysiwyg */
+ void drawParagWYSIWYG( QPainter *p, KoTextParag *parag, int cx, int cy, int cw, int ch,
+ QPixmap *&doubleBuffer, const QColorGroup &cg,
+ KoTextZoomHandler* zoomHandler,
+ bool drawCursor, KoTextCursor *cursor,
+ bool resetChanged = TRUE,
+ uint drawingFlags = KoTextDocument::DrawSelections );
+
+ /** Set by drawParagWYSIWYG, used by KoTextParag::drawParagString */
+ bool drawFormattingChars() const { return (m_drawingFlags & DrawFormattingChars); }
+ /** Set by drawParagWYSIWYG, used by KoTextParag::drawParagStringInternal */
+ bool drawingMissingSpellLine() const { return (m_drawingFlags & DrawMisspelledLine); }
+
+ /** Set by drawParagWYSIWYG, used by KoTextParag::drawParagStringInternal */
+ bool dontDrawingNoteVariable() const { return (m_drawingFlags & DontDrawNoteVariable); }
+
+ virtual KoTextDocCommand *deleteTextCommand( KoTextDocument *textdoc, int id, int index, const QMemArray<KoTextStringChar> & str, const CustomItemsMap & customItemsMap, const QValueList<KoParagLayout> & oldParagLayouts );
+
+ void emitNewCommand(KCommand *cmd) {
+ emit newCommand( cmd );
+ }
+ void emitRepaintChanged() {
+ emit repaintChanged();
+ }
+signals:
+ /**
+ * Emitted when a new command has been created and should be added to
+ * the main list of commands (usually in the KoDocument).
+ * KoTextObject connects (and forwards) that one.
+ */
+ void newCommand( KCommand *cmd );
+ /**
+ * Tell the world that we'd like some repainting to happen.
+ * KoTextObject connects (and forwards) that one.
+ */
+ void repaintChanged();
+
+protected:
+ void drawWithoutDoubleBuffer( QPainter *p, const QRect &rect, const QColorGroup &cg,
+ KoTextZoomHandler* zoomHandler, const QBrush *paper = 0 );
+
+ /**
+ * Called by loadOasisText. This allows to extend the loading mechanism
+ * for special tags no handled by kotext (images, textboxes, tables, etc.)
+ * @return true if @p tag was handled.
+ */
+ virtual bool loadOasisBodyTag( const QDomElement& /*tag*/, KoOasisContext& /*context*/,
+ KoTextParag* & /*lastParagraph*/, KoStyleCollection* /*styleColl*/,
+ KoTextParag* /*nextParagraph*/ ) {
+ return false;
+ }
+
+ /**
+ * Called by KoTextParag::loadOasisSpan. This allows to extend the loading mechanism
+ * for special tags no handled by kotext (bookmarks, image, textbox, link, footnotes etc.)
+ * This method is here instead of in KoTextParag because it's easier to derive from
+ * KoTextDocument.
+ * @return true (and optionally @p textData and @p customItem) if @p tag was handled.
+ */
+ virtual bool loadSpanTag( const QDomElement& /*tag*/, KoOasisContext& /*context*/,
+ KoTextParag* /*parag*/, uint /*pos*/,
+ QString& /*textData*/, KoTextCustomItem* & /*customItem*/ ) {
+ return false;
+ }
+
+private:
+ // The zoom handler used when formatting
+ // (due to the pixelx/pixelww stuff in KoTextFormatter)
+ KoTextZoomHandler * m_zoomHandler;
+ bool m_bDestroying;
+ uint m_drawingFlags;
+
+ //// End of kotext additions
+
+private:
+ /*struct Q_EXPORT Focus {
+ KoTextParag *parag;
+ int start, len;
+ QString href;
+ };*/
+
+ int cx, cy; //, cw, vw;
+ KoTextParag *fParag, *lParag;
+ //KoTextPreProcessor *pProcessor;
+ QMap<int, QColor> selectionColors;
+ QMap<int, KoTextDocumentSelection> selections;
+ QMap<int, bool> selectionText;
+ KoTextDocCommandHistory *commandHistory;
+ KoTextFormatterBase *pFormatter;
+ KoTextFormatCollection *fCollection;
+ //Qt::TextFormat txtFormat;
+ //bool preferRichText : 1;
+ bool m_pageBreakEnabled : 1;
+ bool useFC : 1;
+ bool withoutDoubleBuffer : 1;
+ bool underlLinks : 1;
+ //bool nextDoubleBuffered : 1;
+ bool addMargs : 1;
+ int nSelections;
+ KoTextFlow *flow_;
+ QPtrList<KoTextCustomItem> customItems;
+ QBrush *backBrush;
+ QPixmap *buf_pixmap;
+ //Focus focusIndicator;
+ //int minw;
+ int leftmargin;
+ int rightmargin;
+ //KoTextParag *minwParag;
+ int align;
+ int *tArray;
+ int tStopWidth;
+};
+
+inline int KoTextDocument::x() const
+{
+ return cx;
+}
+
+inline int KoTextDocument::y() const
+{
+ return cy;
+}
+
+inline int KoTextDocument::width() const
+{
+ return flow_->width();
+ //return QMAX( cw, flow_->width() );
+}
+
+//inline int KoTextDocument::visibleWidth() const
+//{
+// return vw;
+//}
+
+inline KoTextParag *KoTextDocument::firstParag() const
+{
+ return fParag;
+}
+
+inline KoTextParag *KoTextDocument::lastParag() const
+{
+ return lParag;
+}
+
+inline void KoTextDocument::setFirstParag( KoTextParag *p )
+{
+ fParag = p;
+}
+
+inline void KoTextDocument::setLastParag( KoTextParag *p )
+{
+ lParag = p;
+}
+
+inline void KoTextDocument::setWidth( int w )
+{
+ //cw = QMAX( w, minw );
+ flow_->setWidth( w );
+ //vw = w;
+}
+
+//inline int KoTextDocument::minimumWidth() const
+//{
+// return minw;
+//}
+
+inline void KoTextDocument::setY( int y )
+{
+ cy = y;
+}
+
+inline int KoTextDocument::leftMargin() const
+{
+ return leftmargin;
+}
+
+inline void KoTextDocument::setLeftMargin( int lm )
+{
+ leftmargin = lm;
+}
+
+inline int KoTextDocument::rightMargin() const
+{
+ return rightmargin;
+}
+
+inline void KoTextDocument::setRightMargin( int rm )
+{
+ rightmargin = rm;
+}
+
+/*inline KoTextPreProcessor *KoTextDocument::preProcessor() const
+{
+ return pProcessor;
+}
+
+inline void KoTextDocument::setPreProcessor( KoTextPreProcessor * sh )
+{
+ pProcessor = sh;
+}*/
+
+inline void KoTextDocument::setFormatter( KoTextFormatterBase *f )
+{
+ delete pFormatter;
+ pFormatter = f;
+}
+
+inline KoTextFormatterBase *KoTextDocument::formatter() const
+{
+ return pFormatter;
+}
+
+inline QColor KoTextDocument::selectionColor( int id ) const
+{
+ return selectionColors[ id ];
+}
+
+inline bool KoTextDocument::invertSelectionText( int id ) const
+{
+ return selectionText[ id ];
+}
+
+inline void KoTextDocument::setSelectionColor( int id, const QColor &c )
+{
+ selectionColors[ id ] = c;
+}
+
+inline void KoTextDocument::setInvertSelectionText( int id, bool b )
+{
+ selectionText[ id ] = b;
+}
+
+inline KoTextFormatCollection *KoTextDocument::formatCollection() const
+{
+ return fCollection;
+}
+
+inline int KoTextDocument::alignment() const
+{
+ return align;
+}
+
+inline void KoTextDocument::setAlignment( int a )
+{
+ align = a;
+}
+
+inline int *KoTextDocument::tabArray() const
+{
+ return tArray;
+}
+
+inline int KoTextDocument::tabStopWidth() const
+{
+ return tStopWidth;
+}
+
+inline void KoTextDocument::setTabArray( int *a )
+{
+ tArray = a;
+}
+
+inline void KoTextDocument::setTabStops( int tw )
+{
+ tStopWidth = tw;
+}
+
+/*inline QString KoTextDocument::originalText() const
+{
+ if ( oTextValid )
+ return oText;
+ return text();
+}*/
+
+inline void KoTextDocument::setFlow( KoTextFlow *f )
+{
+ if ( flow_ )
+ delete flow_;
+ flow_ = f;
+}
+
+inline void KoTextDocument::takeFlow()
+{
+ flow_ = 0L;
+}
+
+/**
+ * Base class for "visitors". Visitors are a well-designed way to
+ * apply a given operation to all the paragraphs in a selection, or
+ * in a document. The visitor needs to inherit KoParagVisitor, and implement visit().
+ */
+class KoParagVisitor
+{
+protected:
+ /** protected since this is an abstract base class */
+ KoParagVisitor() {}
+ virtual ~KoParagVisitor() {}
+public:
+ /** Visit the paragraph @p parag, from index @p start to index @p end */
+ virtual bool visit( KoTextParag *parag, int start, int end ) = 0;
+};
+
+class KCommand;
+class QDomElement;
+class KMacroCommand;
+
+/** A CustomItemsMap associates a custom item to an index
+ * Used in the undo/redo info for insert/delete text. */
+class CustomItemsMap : public QMap<int, KoTextCustomItem *>
+{
+public:
+
+ /** Insert all the items from the map, into the existing text */
+ void insertItems( const KoTextCursor & startCursor, int size );
+
+ /** Delete all the items from the map, adding their commands into macroCmd */
+ void deleteAll( KMacroCommand *macroCmd );
+};
+
+#endif
diff --git a/lib/kotext/KoTextFormat.cpp b/lib/kotext/KoTextFormat.cpp
new file mode 100644
index 00000000..ff4de62c
--- /dev/null
+++ b/lib/kotext/KoTextFormat.cpp
@@ -0,0 +1,1889 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2006 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextFormat.h"
+#include "KoTextParag.h"
+#include "KoTextZoomHandler.h"
+#include "KoStyleCollection.h"
+#include "KoOasisContext.h"
+#include <KoGenStyles.h>
+#include <KoXmlNS.h>
+
+#include <kglobal.h>
+#include <kdebug.h>
+#include <klocale.h>
+
+#include <qapplication.h>
+#include <qregexp.h>
+#include <assert.h>
+
+void KoTextFormat::KoTextFormatPrivate::clearCache()
+{
+ delete m_screenFontMetrics; m_screenFontMetrics = 0L;
+ delete m_screenFont; m_screenFont = 0L;
+ delete m_refFontMetrics; m_refFontMetrics = 0L;
+ delete m_refFont; m_refFont = 0L;
+ m_refAscent = -1;
+ m_refDescent = -1;
+ m_refHeight = -1;
+ memset( m_screenWidths, 0, 256 * sizeof( ushort ) );
+}
+
+void KoTextFormat::zoomChanged()
+{
+ delete d->m_screenFontMetrics; d->m_screenFontMetrics = 0;
+ delete d->m_screenFont; d->m_screenFont = 0;
+ memset( d->m_screenWidths, 0, 256 * sizeof( ushort ) );
+}
+
+KoTextFormat::KoTextFormat()
+{
+ //linkColor = TRUE;
+ ref = 0;
+ missp = FALSE;
+ va = AlignNormal;
+ collection = 0;
+ //// kotext: WYSIWYG works much much better with scalable fonts -> force it to be scalable
+ fn.setStyleStrategy( QFont::ForceOutline );
+ d = new KoTextFormatPrivate;
+ m_textUnderlineColor=QColor();
+ m_underlineType = U_NONE;
+ m_strikeOutType = S_NONE;
+ m_underlineStyle = U_SOLID;
+ m_strikeOutStyle = S_SOLID;
+ m_language = KGlobal::locale()->language();
+ d->m_bHyphenation = false;
+ d->m_underLineWidth = 1.0;
+ d->m_shadowDistanceX = 0;
+ d->m_shadowDistanceY = 0;
+ d->m_relativeTextSize = 0.66;
+ d->m_offsetFromBaseLine= 0;
+ d->m_bWordByWord = false;
+ m_attributeFont = ATT_NONE;
+ ////
+//#ifdef DEBUG_COLLECTION
+// kdDebug(32500) << "KoTextFormat simple ctor, no addRef, no generateKey ! " << this << endl;
+//#endif
+}
+
+KoTextFormat::KoTextFormat( const QFont &f, const QColor &c, const QString &_language, bool hyphenation, KoTextFormatCollection *parent )
+ : fn( f ), col( c ) /*fm( QFontMetrics( f ) ),*/ //linkColor( TRUE )
+{
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << "KoTextFormat with font & color & parent (" << parent << "), addRef. " << this << endl;
+#endif
+ int pointSize;
+ if ( f.pointSize() == -1 ) // font was set with a pixelsize, we need a pointsize!
+ pointSize = (int)( ( (double)fn.pixelSize() * 72.0 ) / (double)KoGlobal::dpiY() );
+ else
+ pointSize = f.pointSize();
+ fn.setPointSize( pointSize );
+ // WYSIWYG works much much better with scalable fonts -> force it to be scalable
+ fn.setStyleStrategy( QFont::ForceOutline );
+ ref = 0;
+ collection = parent;
+ //leftBearing = fm.minLeftBearing();
+ //rightBearing = fm.minRightBearing();
+ //hei = fm.height();
+ //asc = fm.ascent();
+ //dsc = fm.descent();
+ missp = FALSE;
+ va = AlignNormal;
+ //// kotext
+ d = new KoTextFormatPrivate;
+ m_textUnderlineColor = QColor();
+ m_underlineType = U_NONE;
+ m_strikeOutType = S_NONE;
+ m_underlineStyle = U_SOLID;
+ m_strikeOutStyle = S_SOLID;
+ m_language = _language;
+ d->m_shadowDistanceX = 0;
+ d->m_shadowDistanceY = 0;
+ d->m_relativeTextSize= 0.66;
+ d->m_offsetFromBaseLine = 0;
+ d->m_bWordByWord = false;
+ d->m_charStyle = 0L;
+ d->m_bHyphenation = hyphenation;
+ d->m_underLineWidth = 1.0;
+ m_attributeFont = ATT_NONE;
+ ////
+ generateKey();
+ addRef();
+}
+
+KoTextFormat::KoTextFormat( const QFont &_font,
+ VerticalAlignment _valign,
+ const QColor & _color,
+ const QColor & _backGroundColor,
+ const QColor & _underlineColor,
+ KoTextFormat::UnderlineType _underlineType,
+ KoTextFormat::UnderlineStyle _underlineStyle,
+ KoTextFormat::StrikeOutType _strikeOutType,
+ KoTextFormat::StrikeOutStyle _strikeOutStyle,
+ KoTextFormat::AttributeStyle _fontAttribute,
+ const QString &_language,
+ double _relativeTextSize,
+ int _offsetFromBaseLine,
+ bool _wordByWord,
+ bool _hyphenation,
+ double _shadowDistanceX,
+ double _shadowDistanceY,
+ const QColor& _shadowColor )
+{
+ ref = 0;
+ collection = 0;
+ fn = _font;
+ fn.setStyleStrategy( QFont::ForceOutline );
+ col = _color;
+ missp = false;
+ va = _valign;
+ d = new KoTextFormatPrivate;
+ m_textBackColor = _backGroundColor;
+ m_textUnderlineColor = _underlineColor;
+ m_underlineType = _underlineType;
+ m_strikeOutType = _strikeOutType;
+ m_underlineStyle = _underlineStyle;
+ m_strikeOutStyle = _strikeOutStyle;
+ m_language = _language;
+ d->m_bHyphenation = _hyphenation;
+ d->m_underLineWidth = 1.0;
+ d->m_shadowDistanceX = _shadowDistanceX;
+ d->m_shadowDistanceY = _shadowDistanceY;
+ d->m_shadowColor = _shadowColor;
+ d->m_relativeTextSize = _relativeTextSize;
+ d->m_offsetFromBaseLine = _offsetFromBaseLine;
+ d->m_bWordByWord = _wordByWord;
+ m_attributeFont = _fontAttribute;
+ d->m_charStyle = 0L;
+ ////
+ generateKey();
+ addRef();
+}
+
+KoTextFormat::KoTextFormat( const KoTextFormat &f )
+{
+ d = 0L;
+ operator=( f );
+}
+
+KoTextFormat::~KoTextFormat()
+{
+ //// kotext addition
+ // Removing a format that is in the collection is forbidden, in fact.
+ // It should have been removed from the collection before being deleted.
+#ifndef NDEBUG
+ if ( parent() && parent()->defaultFormat() ) // not when destroying the collection
+ assert( ! ( parent()->dict().find( key() ) == this ) );
+ // (has to be the same pointer, not only the same key)
+#endif
+ delete d;
+ ////
+}
+
+KoTextFormat& KoTextFormat::operator=( const KoTextFormat &f )
+{
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << "KoTextFormat::operator= " << this << " (copying " << &f << "). Will addRef" << endl;
+#endif
+ ref = 0;
+ collection = 0; // f might be in the collection, but we are not
+ fn = f.fn;
+ col = f.col;
+ //fm = f.fm;
+ //leftBearing = f.leftBearing;
+ //rightBearing = f.rightBearing;
+ //hei = f.hei;
+ //asc = f.asc;
+ //dsc = f.dsc;
+ missp = f.missp;
+ va = f.va;
+ m_key = f.m_key;
+ //linkColor = f.linkColor;
+ //// kotext addition
+ delete d;
+ d = new KoTextFormatPrivate;
+ m_textBackColor=f.m_textBackColor;
+ m_textUnderlineColor=f.m_textUnderlineColor;
+ m_underlineType = f.m_underlineType;
+ m_strikeOutType = f.m_strikeOutType;
+ m_underlineStyle = f.m_underlineStyle;
+ m_strikeOutStyle = f.m_strikeOutStyle;
+ m_language = f.m_language;
+ d->m_bHyphenation=f.d->m_bHyphenation;
+ d->m_underLineWidth=f.d->m_underLineWidth;
+ d->m_shadowDistanceX = f.d->m_shadowDistanceX;
+ d->m_shadowDistanceY = f.d->m_shadowDistanceY;
+ d->m_shadowColor = f.d->m_shadowColor;
+ d->m_relativeTextSize = f.d->m_relativeTextSize;
+ d->m_offsetFromBaseLine = f.d->m_offsetFromBaseLine;
+ d->m_bWordByWord = f.d->m_bWordByWord;
+ m_attributeFont = f.m_attributeFont;
+ d->m_charStyle = 0L;
+ ////
+ addRef();
+ return *this;
+}
+
+// Helper for load
+static void importTextPosition( const QString& text_position, double fontSize, KoTextFormat::VerticalAlignment& value, double& relativetextsize, int& offset, KoOasisContext& context )
+{
+ //OO: <vertical position (% or sub or super)> [<size as %>]
+ //Examples: "super" or "super 58%" or "82% 58%" (where 82% is the vertical position)
+ QStringList lst = QStringList::split( ' ', text_position );
+ if ( !lst.isEmpty() )
+ {
+ QString textPos = lst.front().stripWhiteSpace();
+ QString textSize;
+ lst.pop_front();
+ if ( !lst.isEmpty() )
+ textSize = lst.front().stripWhiteSpace();
+ // Workaround bug in KOffice-1.4: it saved '0% 66%' for normal text
+ if ( context.generator().startsWith( "KOffice/1.4" )
+ && text_position.startsWith( "0%" ) ) {
+ //kdDebug(32500) << "Detected koffice-1.4 bug in text-position, assuming Normal text" << endl;
+ value = KoTextFormat::AlignNormal;
+ return;
+ }
+
+ if ( textPos.endsWith("%") && textPos != "0% 100%" && textPos != "0%" )
+ {
+ textPos.truncate( textPos.length() - 1 );
+ double val = textPos.toDouble();
+ offset = qRound( fontSize * val / 100.0 );
+ value = KoTextFormat::AlignCustom;
+ }
+ else if ( textPos == "super" )
+ value = KoTextFormat::AlignSuperScript;
+ else if ( textPos == "sub" )
+ value = KoTextFormat::AlignSubScript;
+ else
+ value = KoTextFormat::AlignNormal;
+ if ( !textSize.isEmpty() && textSize.endsWith("%") )
+ {
+ textSize.truncate( textSize.length() - 1 );
+ relativetextsize = textSize.toDouble() / 100; // e.g. 0.58
+ }
+ }
+ else
+ value = KoTextFormat::AlignNormal;
+}
+
+// OASIS 14.2.29
+static void importOasisUnderline( const QString& type, const QString& style,
+ KoTextFormat::UnderlineType& underline,
+ KoTextFormat::UnderlineStyle& styleline )
+{
+ if ( type == "single" )
+ underline = KoTextFormat::U_SIMPLE;
+ else if ( type == "double" )
+ underline = KoTextFormat::U_DOUBLE;
+ else if ( type == "none" )
+ underline = KoTextFormat::U_NONE;
+ else if ( style.isEmpty() || style == "none" )
+ underline = KoTextFormat::U_NONE;
+ else
+ underline = KoTextFormat::U_SIMPLE; // OO exports empty type, and style=solid, for normal underline
+
+ styleline = KoTextFormat::U_SOLID; // assume "solid" if unknown
+ if ( style == "dotted" )
+ styleline = KoTextFormat::U_DOT;
+ else if ( style == "dash"
+ || style == "long-dash" ) // not in kotext
+ styleline = KoTextFormat::U_DASH;
+ else if ( style == "dot-dash" )
+ styleline = KoTextFormat::U_DASH_DOT;
+ else if ( style == "dot-dot-dash" )
+ styleline = KoTextFormat::U_DASH_DOT_DOT;
+ else if ( style == "wave" )
+ underline = KoTextFormat::U_WAVE;
+
+ // TODO bold. But this is another attribute in OASIS (text-underline-width), which makes sense.
+ // We should separate them in kotext...
+}
+
+QString exportOasisUnderline( KoTextFormat::UnderlineStyle styleline )
+{
+ switch( styleline ) {
+ case KoTextFormat::U_DOT:
+ return "dotted";
+ case KoTextFormat::U_DASH:
+ return "dash";
+ case KoTextFormat::U_DASH_DOT:
+ return "dot-dash";
+ case KoTextFormat::U_DASH_DOT_DOT:
+ return "dot-dot-dash";
+ default:
+ return "solid";
+ }
+}
+
+// Helper for load. Legacy OO format.
+static void importUnderline( const QString& in,
+ KoTextFormat::UnderlineType& underline,
+ KoTextFormat::UnderlineStyle& styleline )
+{
+ underline = KoTextFormat::U_SIMPLE;
+ styleline = KoTextFormat::U_SOLID;
+ if ( in == "none" )
+ underline = KoTextFormat::U_NONE;
+ else if ( in == "single" )
+ styleline = KoTextFormat::U_SOLID;
+ else if ( in == "double" ) {
+ underline = KoTextFormat::U_DOUBLE;
+ }
+ else if ( in == "dotted" || in == "bold-dotted" ) // bold-dotted not in libkotext
+ styleline = KoTextFormat::U_DOT;
+ else if ( in == "dash"
+ // those are not in libkotext:
+ || in == "long-dash"
+ || in == "bold-dash"
+ || in == "bold-long-dash" )
+ styleline = KoTextFormat::U_DASH;
+ else if ( in == "dot-dash"
+ || in == "bold-dot-dash") // not in libkotext
+ styleline = KoTextFormat::U_DASH_DOT; // tricky ;)
+ else if ( in == "dot-dot-dash"
+ || in == "bold-dot-dot-dash") // not in libkotext
+ styleline = KoTextFormat::U_DASH_DOT_DOT; // this is getting fun...
+ else if ( in == "wave"
+ || in == "bold-wave" // not in libkotext
+ || in == "double-wave" // not in libkotext
+ || in == "small-wave" ) { // not in libkotext
+ underline = KoTextFormat::U_WAVE;
+ } else if( in == "bold" ) {
+ underline = KoTextFormat::U_SIMPLE_BOLD;
+ } else
+ kdWarning() << k_funcinfo << " unsupported text-underline value: " << in << endl;
+}
+
+void KoTextFormat::load( KoOasisContext& context )
+{
+ KoStyleStack& styleStack = context.styleStack();
+ styleStack.setTypeProperties( "text" ); // load all style attributes from "style:text-properties"
+
+ if ( styleStack.hasAttributeNS( KoXmlNS::fo, "color" ) ) { // 3.10.3
+ col.setNamedColor( styleStack.attributeNS( KoXmlNS::fo, "color" ) ); // #rrggbb format
+ }
+ if ( styleStack.hasAttributeNS( KoXmlNS::fo, "font-family" ) // 3.10.9
+ || styleStack.hasAttributeNS( KoXmlNS::style, "font-name") ) { // 3.10.8
+ // Hmm, the remove "'" could break it's in the middle of the fontname...
+ QString fontName = styleStack.attributeNS( KoXmlNS::fo, "font-family" ).remove( "'" );
+ if (fontName.isEmpty()) {
+ // ##### TODO. This is wrong. style:font-name refers to a font-decl entry.
+ // We have to look it up there, and retrieve _all_ font attributes from it, not just the name.
+ fontName = styleStack.attributeNS( KoXmlNS::style, "font-name" ).remove( "'" );
+ }
+ // 'Thorndale' is not known outside OpenOffice so we substitute it
+ // with 'Times New Roman' that looks nearly the same.
+ if ( fontName == "Thorndale" )
+ fontName = "Times New Roman";
+
+ fontName.remove(QRegExp("\\sCE$")); // Arial CE -> Arial
+ fn.setFamily( fontName );
+ }
+ if ( styleStack.hasAttributeNS( KoXmlNS::fo, "font-size" ) ) { // 3.10.14
+ double pointSize = styleStack.fontSize();
+ fn.setPointSizeFloat( pointSize );
+ }
+ if ( styleStack.hasAttributeNS( KoXmlNS::fo, "font-weight" ) ) { // 3.10.24
+ QString fontWeight = styleStack.attributeNS( KoXmlNS::fo, "font-weight" );
+ int boldness;
+ if ( fontWeight == "normal" )
+ boldness = 50;
+ else if ( fontWeight == "bold" )
+ boldness = 75;
+ else
+ // XSL/CSS has 100,200,300...900. Not the same scale as Qt!
+ // See http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-weight
+ boldness = fontWeight.toInt() / 10;
+ fn.setWeight( boldness );
+ }
+ if ( styleStack.hasAttributeNS( KoXmlNS::fo, "font-style" ) ) // 3.10.19
+ if ( styleStack.attributeNS( KoXmlNS::fo, "font-style" ) == "italic" ||
+ styleStack.attributeNS( KoXmlNS::fo, "font-style" ) == "oblique" ) { // no difference in kotext
+ fn.setItalic( true );
+ }
+
+ d->m_bWordByWord = styleStack.attributeNS( KoXmlNS::style, "text-underline-mode" ) == "skip-white-space";
+ // TODO style:text-line-through-mode
+
+#if 0 // OO compat code, to move to OO import filter
+ d->m_bWordByWord = (styleStack.hasAttributeNS( KoXmlNS::fo, "score-spaces")) // 3.10.25
+ && (styleStack.attributeNS( KoXmlNS::fo, "score-spaces") == "false");
+ if( styleStack.hasAttributeNS( KoXmlNS::style, "text-crossing-out" )) { // 3.10.6
+ QString strikeOutType = styleStack.attributeNS( KoXmlNS::style, "text-crossing-out" );
+ if( strikeOutType =="double-line")
+ m_strikeOutType = S_DOUBLE;
+ else if( strikeOutType =="single-line")
+ m_strikeOutType = S_SIMPLE;
+ else if( strikeOutType =="thick-line")
+ m_strikeOutType = S_SIMPLE_BOLD;
+ // not supported by KWord: "slash" and "X"
+ // not supported by OO: stylelines (solid, dash, dot, dashdot, dashdotdot)
+ }
+#endif
+ if ( styleStack.hasAttributeNS( KoXmlNS::style, "text-underline-type" )
+ || styleStack.hasAttributeNS( KoXmlNS::style, "text-underline-style" ) ) { // OASIS 14.4.28
+ importOasisUnderline( styleStack.attributeNS( KoXmlNS::style, "text-underline-type" ),
+ styleStack.attributeNS( KoXmlNS::style, "text-underline-style" ),
+ m_underlineType, m_underlineStyle );
+ }
+ else if ( styleStack.hasAttributeNS( KoXmlNS::style, "text-underline" ) ) { // OO compat (3.10.22), to be moved out
+ importUnderline( styleStack.attributeNS( KoXmlNS::style, "text-underline" ),
+ m_underlineType, m_underlineStyle );
+ }
+ QString underLineColor = styleStack.attributeNS( KoXmlNS::style, "text-underline-color" ); // OO 3.10.23, OASIS 14.4.31
+ if ( !underLineColor.isEmpty() && underLineColor != "font-color" )
+ m_textUnderlineColor.setNamedColor( underLineColor );
+
+ if ( styleStack.hasAttributeNS( KoXmlNS::style, "text-line-through-type" ) ) { // OASIS 14.4.7
+ // Reuse code for loading underlines, and convert to strikeout enum (if not wave)
+ UnderlineType uType; UnderlineStyle uStyle;
+ importOasisUnderline( styleStack.attributeNS( KoXmlNS::style, "text-line-through-type" ),
+ styleStack.attributeNS( KoXmlNS::style, "text-line-through-style" ),
+ uType, uStyle );
+ m_strikeOutType = S_NONE;
+ if ( uType != U_WAVE )
+ m_strikeOutType = (StrikeOutType)uType;
+ m_strikeOutStyle = (StrikeOutStyle)uStyle;
+ }
+
+ // Text position
+ va = AlignNormal;
+ d->m_relativeTextSize = 0.58;
+ d->m_offsetFromBaseLine = 0;
+ if( styleStack.hasAttributeNS( KoXmlNS::style, "text-position")) { // OO 3.10.7
+ importTextPosition( styleStack.attributeNS( KoXmlNS::style, "text-position"), fn.pointSizeFloat(),
+ va, d->m_relativeTextSize, d->m_offsetFromBaseLine, context );
+ }
+ // Small caps, lowercase, uppercase
+ m_attributeFont = ATT_NONE;
+ if ( styleStack.hasAttributeNS( KoXmlNS::fo, "font-variant" ) // 3.10.1
+ || styleStack.hasAttributeNS( KoXmlNS::fo, "text-transform" ) ) { // 3.10.2
+ bool smallCaps = styleStack.attributeNS( KoXmlNS::fo, "font-variant" ) == "small-caps";
+ if ( smallCaps ) {
+ m_attributeFont = ATT_SMALL_CAPS;
+ } else {
+ QString textTransform = styleStack.attributeNS( KoXmlNS::fo, "text-transform" );
+ if ( textTransform == "uppercase" )
+ m_attributeFont = ATT_UPPER;
+ else if ( textTransform == "lowercase" )
+ m_attributeFont = ATT_LOWER;
+ // TODO in KWord: "capitalize".
+ }
+ }
+ if ( styleStack.hasAttributeNS( KoXmlNS::fo, "language") ) { // 3.10.17
+ m_language = styleStack.attributeNS( KoXmlNS::fo, "language");
+ const QString country = styleStack.attributeNS( KoXmlNS::fo, "country" );
+ if ( !country.isEmpty() ) {
+ m_language += '_';
+ m_language += country;
+ }
+ }
+ if ( styleStack.hasAttributeNS( KoXmlNS::fo, "background-color") ) {
+ QString tmp = styleStack.attributeNS( KoXmlNS::fo, "background-color");
+ if (tmp != "transparent")
+ m_textBackColor.setNamedColor( tmp );
+ }
+ if ( styleStack.hasAttributeNS( KoXmlNS::fo, "text-shadow") ) { // 3.10.21
+ parseShadowFromCss( styleStack.attributeNS( KoXmlNS::fo, "text-shadow") );
+ }
+
+ d->m_bHyphenation = true;
+ if ( styleStack.hasAttributeNS( KoXmlNS::fo, "hyphenate" ) ) // it's a character property in OASIS (but not in OO-1.1)
+ d->m_bHyphenation = styleStack.attributeNS( KoXmlNS::fo, "hyphenate" ) == "true";
+
+ /*
+ Missing properties:
+ style:use-window-font-color, 3.10.4 - this is what KWord uses by default (fg color from the color style)
+ OO also switches to another color when necessary to avoid dark-on-dark and light-on-light cases.
+ (that is TODO in KWord)
+ style:text-outline, 3.10.5 - not implemented in kotext
+ style:font-family-generic, 3.10.10 - roman, swiss, modern -> map to a font?
+ style:font-style-name, 3.10.11 - can be ignored, says DV, the other ways to specify a font are more precise
+ style:font-pitch, 3.10.12 - fixed or variable -> map to a font?
+ style:font-charset, 3.10.14 - not necessary with Qt
+ style:font-size-rel, 3.10.15 - TODO in StyleStack::fontSize()
+ fo:letter-spacing, 3.10.16 - not implemented in kotext
+ style:text-relief, 3.10.20 - not implemented in kotext
+ style:letter-kerning, 3.10.20 - not implemented in kotext
+ style:text-blinking, 3.10.27 - not implemented in kotext IIRC
+ style:text-combine, 3.10.29/30 - not implemented, see http://www.w3.org/TR/WD-i18n-format/
+ style:text-emphasis, 3.10.31 - not implemented in kotext
+ style:text-scale, 3.10.33 - not implemented in kotext
+ style:text-rotation-angle, 3.10.34 - not implemented in kotext (kpr rotates whole objects)
+ style:text-rotation-scale, 3.10.35 - not implemented in kotext (kpr rotates whole objects)
+ style:punctuation-wrap, 3.10.36 - not implemented in kotext
+ */
+
+ d->m_underLineWidth = 1.0;
+
+ generateKey();
+ addRef();
+}
+
+void KoTextFormat::save( KoGenStyle& gs, KoSavingContext& context, KoTextFormat * refFormat ) const
+{
+ KoGenStyle::PropertyType tt = KoGenStyle::TextType;
+ if ( !refFormat || this->color() != refFormat->color() )
+ {
+ gs.addProperty( "fo:color", col.isValid() ? col.name() : "#000000", tt );
+ }
+ if ( !refFormat || this->font().family() != refFormat->font().family() )
+ {
+ gs.addProperty( "style:font-name", fn.family(), tt );
+ context.addFontFace( fn.family() );
+ }
+ if ( !refFormat || this->pointSize() != refFormat->pointSize() )
+ {
+ gs.addPropertyPt( "fo:font-size", fn.pointSize(), tt );
+ }
+ int w = fn.weight();
+ if ( !refFormat || w != refFormat->font().weight() )
+ {
+ gs.addProperty( "fo:font-weight", w == 50 ? "normal" : w == 75 ? "bold" : QString::number( qRound( w / 10 ) * 100 ), tt );
+ }
+ if ( !refFormat || this->font().italic() != refFormat->font().italic() )
+ {
+ gs.addProperty( "fo:font-style", fn.italic() ? "italic" : "normal", tt );
+ }
+ if ( !refFormat || this->wordByWord() != refFormat->wordByWord() )
+ {
+ gs.addProperty( "style:text-underline-mode", d->m_bWordByWord ? "skip-white-space" : "continuous", tt );
+ }
+ if ( !refFormat || this->underlineType() != refFormat->underlineType()
+ || this->underlineStyle() !=refFormat->underlineStyle() )
+ {
+ gs.addProperty( "style:text-underline-type", m_underlineType == U_NONE ? "none" :
+ m_underlineType == U_DOUBLE ? "double" : "single", tt );
+ QString styleline;
+ if ( m_underlineType == U_WAVE )
+ styleline = "wave";
+ else
+ styleline = exportOasisUnderline( m_underlineStyle );
+ gs.addProperty( "style:text-underline-style", m_underlineType == U_NONE ? "none" : styleline, tt );
+ }
+ if ( !refFormat || this->textUnderlineColor() !=refFormat->textUnderlineColor() )
+ {
+ gs.addProperty( "style:text-underline-color", m_textUnderlineColor.isValid() ? m_textUnderlineColor.name() : "font-color", tt );
+ }
+
+ if ( !refFormat
+ || this->strikeOutType() != refFormat->strikeOutType()
+ || this->strikeOutStyle()!= refFormat->strikeOutStyle() )
+ {
+ if ( m_strikeOutType != S_NONE )
+ {
+ // TODO U_SIMPLE_BOLD
+ // TODO style:text-line-through-mode
+ gs.addProperty( "style:text-line-through-type", m_strikeOutType == S_DOUBLE ? "double" : "single", tt );
+ const QString styleline = exportOasisUnderline( (UnderlineStyle) m_strikeOutStyle );
+ gs.addProperty( "style:text-line-through-style", styleline, tt );
+ //gs.addProperty( "style:text-line-through-color", ...) TODO in kotext
+ }
+ else
+ {
+ gs.addProperty( "style:text-line-through-type", "none", tt );
+ gs.addProperty( "style:text-line-through-style", "none", tt );
+ }
+ }
+ if ( !refFormat || (this->vAlign() != refFormat->vAlign())
+ || (this->relativeTextSize() != refFormat->relativeTextSize()) )
+ {
+ QString textPos;
+ if ( d->m_offsetFromBaseLine != 0 )
+ textPos = QString::number( 100 * d->m_offsetFromBaseLine / fn.pointSizeFloat() ) + '%';
+ else if ( va == AlignSuperScript ) textPos = "super";
+ else if ( va == AlignSubScript ) textPos = "sub";
+ else textPos = "0%"; // AlignNormal
+ if ( va != AlignNormal )
+ {
+ textPos += ' ';
+ textPos += QString::number( d->m_relativeTextSize * 100 );
+ textPos += '%';
+ }
+ gs.addProperty( "style:text-position", textPos, tt );
+ }
+
+ if( !refFormat || this->attributeFont() != refFormat->attributeFont())
+ {
+ if ( m_attributeFont == ATT_SMALL_CAPS ) {
+ gs.addProperty( "fo:font-variant", "small-caps", tt );
+ gs.addProperty( "fo:text-transform", "none", tt );
+ }
+ else if ( m_attributeFont == ATT_UPPER ) {
+ gs.addProperty( "fo:font-variant", "normal", tt );
+ gs.addProperty( "fo:text-transform", "uppercase", tt );
+ }
+ else if ( m_attributeFont == ATT_LOWER ) {
+ gs.addProperty( "fo:font-variant", "normal", tt );
+ gs.addProperty( "fo:text-transform", "lowercase", tt );
+ }
+ else {
+ gs.addProperty( "fo:font-variant", "normal", tt );
+ gs.addProperty( "fo:text-transform", "none", tt );
+ }
+ }
+
+ if( !refFormat || this->language() != refFormat->language())
+ {
+ QString lang = m_language;
+ QString country;
+ const int pos = lang.find( '_' );
+ if ( pos != -1 ) {
+ country = lang.mid( pos + 1 );
+ lang = lang.left( pos );
+ }
+
+ gs.addProperty( "fo:language", lang, tt );
+ gs.addProperty( "fo:country", country, tt );
+ }
+ if( !refFormat || this->textBackgroundColor() != refFormat->textBackgroundColor() )
+ {
+ gs.addProperty( "fo:background-color",
+ m_textBackColor.isValid() ? m_textBackColor.name() : "transparent", tt );
+ }
+ if( !refFormat ||
+ ( this->shadowDistanceX() != refFormat->shadowDistanceX()
+ || ( this->shadowDistanceY() != refFormat->shadowDistanceY() )
+ || ( this->shadowColor() != refFormat->shadowColor() ) ) )
+ {
+ gs.addProperty( "fo:text-shadow", shadowAsCss(), tt );
+ }
+ if ( !refFormat || this->hyphenation() != refFormat->hyphenation() )
+ {
+ gs.addProperty( "fo:hyphenate", d->m_bHyphenation, tt );
+ }
+}
+
+void KoTextFormat::update()
+{
+ //kdDebug(32500) << this << " KoTextFormat::update " << fn.family() << " " << pointSize() << endl;
+ m_key = QString::null; // invalidate key, recalc at the next key() call
+ assert( d );
+ d->clearCache(); // i.e. recalc at the next screenFont[Metrics]() call
+}
+
+void KoTextFormat::copyFormat( const KoTextFormat & nf, int flags )
+{
+ if ( flags & KoTextFormat::Bold )
+ fn.setBold( nf.fn.bold() );
+ if ( flags & KoTextFormat::Italic )
+ fn.setItalic( nf.fn.italic() );
+ if ( flags & KoTextFormat::Underline )
+ fn.setUnderline( nf.fn.underline() );
+ if ( flags & KoTextFormat::Family )
+ fn.setFamily( nf.fn.family() );
+ if ( flags & KoTextFormat::Size )
+ fn.setPointSize( nf.fn.pointSize() );
+ if ( flags & KoTextFormat::Color )
+ col = nf.col;
+ if ( flags & KoTextFormat::Misspelled )
+ missp = nf.missp;
+ if ( flags & KoTextFormat::VAlign )
+ {
+ va = nf.va;
+ setRelativeTextSize( nf.relativeTextSize());
+ }
+ ////// kotext addition
+ if ( flags & KoTextFormat::StrikeOut )
+ {
+ setStrikeOutStyle( nf.strikeOutStyle() );
+ setStrikeOutType (nf.strikeOutType());
+ }
+ if( flags & KoTextFormat::TextBackgroundColor)
+ setTextBackgroundColor(nf.textBackgroundColor());
+ if( flags & KoTextFormat::ExtendUnderLine)
+ {
+ setTextUnderlineColor(nf.textUnderlineColor());
+ setUnderlineType (nf.underlineType());
+ setUnderlineStyle (nf.underlineStyle());
+ }
+ if( flags & KoTextFormat::Language)
+ setLanguage(nf.language());
+ if( flags & KoTextFormat::ShadowText)
+ setShadow(nf.shadowDistanceX(), nf.shadowDistanceY(), nf.shadowColor());
+ if( flags & KoTextFormat::OffsetFromBaseLine)
+ setOffsetFromBaseLine(nf.offsetFromBaseLine());
+ if( flags & KoTextFormat::WordByWord)
+ setWordByWord(nf.wordByWord());
+ if( flags & KoTextFormat::Attribute)
+ setAttributeFont(nf.attributeFont());
+ if( flags & KoTextFormat::Hyphenation )
+ setHyphenation( nf.hyphenation());
+ if( flags & KoTextFormat::UnderLineWidth )
+ setUnderLineWidth( nf.underLineWidth());
+ //////
+ update();
+ //kdDebug(32500) << "KoTextFormat " << (void*)this << " copyFormat nf=" << (void*)&nf << " " << nf.key() << " flags=" << flags
+ // << " ==> result " << this << " " << key() << endl;
+}
+
+void KoTextFormat::setBold( bool b )
+{
+ if ( b == fn.bold() )
+ return;
+ fn.setBold( b );
+ update();
+}
+
+void KoTextFormat::setMisspelled( bool b )
+{
+ if ( b == (bool)missp )
+ return;
+ missp = b;
+ update();
+}
+
+void KoTextFormat::setVAlign( VerticalAlignment a )
+{
+ if ( a == va )
+ return;
+ va = a;
+ update();
+}
+
+void KoTextFormat::setItalic( bool b )
+{
+ if ( b == fn.italic() )
+ return;
+ fn.setItalic( b );
+ update();
+}
+
+void KoTextFormat::setUnderline( bool b )
+{
+ if ( b == fn.underline() )
+ return;
+ fn.setUnderline( b );
+ update();
+}
+
+void KoTextFormat::setFamily( const QString &f )
+{
+ if ( f == fn.family() )
+ return;
+ fn.setFamily( f );
+ update();
+}
+
+void KoTextFormat::setPointSize( int s )
+{
+ if ( s == fn.pointSize() )
+ return;
+ fn.setPointSize( s );
+ update();
+}
+
+void KoTextFormat::setFont( const QFont &f )
+{
+ if ( f == fn )
+ return;
+ fn = f;
+ fn.setStyleStrategy( QFont::ForceOutline );
+ update();
+}
+
+void KoTextFormat::setColor( const QColor &c )
+{
+ if ( c == col )
+ return;
+ col = c;
+ update();
+}
+
+#if 0
+int KoTextFormat::minLeftBearing() const
+{
+ if ( !painter || !painter->isActive() )
+ return leftBearing;
+ painter->setFont( fn );
+ return painter->fontMetrics().minLeftBearing();
+}
+
+int KoTextFormat::minRightBearing() const
+{
+ if ( !painter || !painter->isActive() )
+ return rightBearing;
+ painter->setFont( fn );
+ return painter->fontMetrics().minRightBearing();
+}
+#endif
+
+// ## Maybe we need a binary form for speed when NDEBUG, and to keep the
+// ## readable form when !NDEBUG, like QFont does?
+void KoTextFormat::generateKey()
+{
+ QString k = fn.key();
+ k += '/';
+ if ( col.isValid() ) // just to shorten the key in the common case
+ k += QString::number( (uint)col.rgb() );
+ k += '/';
+ k += QString::number( (int)isMisspelled() ); // 1 digit, no need for '/'
+ k += QString::number( (int)vAlign() );
+ //// kotext addition
+ k += '/';
+ if (m_textBackColor.isValid())
+ k += QString::number( (uint)m_textBackColor.rgb() );
+ k += '/';
+ if ( m_textUnderlineColor.isValid())
+ k += QString::number( (uint)m_textUnderlineColor.rgb() );
+ k += '/';
+ k += QString::number( (int)m_underlineType ); // a digit each, no need for '/'
+ k += QString::number( (int)m_strikeOutType );
+ k += QString::number( (int)m_underlineStyle );
+ k += QString::number( (int)m_strikeOutStyle );
+ k += '/';
+ k += m_language;
+ k += '/';
+ if ( d->m_shadowDistanceX != 0 || d->m_shadowDistanceY != 0 )
+ {
+ k += QString::number( d->m_shadowDistanceX );
+ k += '/';
+ k += QString::number( d->m_shadowDistanceY );
+ k += '/';
+ k += QString::number( (uint)d->m_shadowColor.rgb() );
+ }
+ k += '/';
+ k += QString::number( d->m_relativeTextSize);
+ k += '/';
+ k += QString::number( d->m_offsetFromBaseLine);
+ k += '/';
+ k += QString::number( (int)d->m_bWordByWord); // boolean -> 1 digit -> no '/'
+ k += QString::number( (int)m_attributeFont);
+ k += '/';
+ k += QString::number( (int)d->m_bHyphenation); // boolean -> 1 digit -> no '/'
+ k += QString::number( (double)d->m_underLineWidth);
+ ////
+ // Keep in sync with method below
+ m_key = k;
+}
+
+// This is used to create "simple formats", with font and color etc., but without
+// advanced features. Doesn't matter, don't extend the args.
+QString KoTextFormat::getKey( const QFont &fn, const QColor &col, bool misspelled, VerticalAlignment a )
+{
+ QString k = fn.key();
+ k += '/';
+ if ( col.isValid() ) // just to shorten the key in the common case
+ k += QString::number( (uint)col.rgb() );
+ k += '/';
+ k += QString::number( (int)misspelled );
+ k += QString::number( (int)a );
+ //// kotext addition
+ k += '/';
+ // no background color
+ k += '/';
+ // no underline color
+ k += '/';
+ k += QString::number( (int)U_NONE );
+ k += QString::number( (int)S_NONE ); // no double-underline in a "simple format"
+ k += QString::number( (int)U_SOLID );
+ k += QString::number( (int)S_SOLID ); // no double-underline in a "simple format"
+ k += '/';
+ //k += QString::null; // spellcheck language
+ k += '/';
+ //no shadow
+ k += '/';
+ k += "0.66"; //relative text size
+ k += '/';
+ k += "0"; // no offset from base line
+ k += '/';
+ k += "0"; //no wordbyword attribute
+ k += "0"; //no font attribute
+ k += '/';
+ k += "0"; //no hyphen
+ k += "0"; //no ulw
+
+ ////
+ return k;
+}
+
+
+QString KoTextFormat::key() const
+{
+ if ( m_key.isEmpty() )
+ const_cast<KoTextFormat*>( this )->generateKey();
+ return m_key;
+}
+
+void KoTextFormat::addRef()
+{
+ ref++;
+#ifdef DEBUG_COLLECTION
+ if ( collection )
+ kdDebug(32500) << " add ref of '" << k << "' to " << ref << " (" << this << ") (coll " << collection << ")" << endl;
+#endif
+}
+
+void KoTextFormat::removeRef()
+{
+ ref--;
+ if ( !collection )
+ return;
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " remove ref of '" << k << "' to " << ref << " (" << this << ") (coll " << collection << ")" << endl;
+#endif
+ if ( ref == 0 )
+ collection->remove( this );
+}
+
+void KoTextFormat::setStrikeOutType (StrikeOutType _type)
+{
+ if ( m_strikeOutType == _type )
+ return;
+ m_strikeOutType = _type;
+ update();
+}
+
+void KoTextFormat::setUnderlineType (UnderlineType _type)
+{
+ if ( m_underlineType == _type )
+ return;
+ m_underlineType = _type;
+ update();
+}
+
+void KoTextFormat::setUnderlineStyle (UnderlineStyle _type)
+{
+ if ( m_underlineStyle == _type )
+ return;
+ m_underlineStyle = _type;
+ update();
+}
+
+void KoTextFormat::setStrikeOutStyle( StrikeOutStyle _type )
+{
+ if ( m_strikeOutStyle == _type )
+ return;
+ m_strikeOutStyle = _type;
+ update();
+}
+
+void KoTextFormat::setTextBackgroundColor(const QColor &_col)
+{
+ if(m_textBackColor==_col)
+ return;
+ m_textBackColor=_col;
+ update();
+}
+void KoTextFormat::setTextUnderlineColor(const QColor &_col)
+{
+ if ( m_textUnderlineColor == _col )
+ return;
+ m_textUnderlineColor=_col;
+ update();
+}
+
+void KoTextFormat::setShadow( double shadowDistanceX, double shadowDistanceY, const QColor& shadowColor )
+{
+ if ( d->m_shadowDistanceX == shadowDistanceX &&
+ d->m_shadowDistanceY == shadowDistanceY &&
+ d->m_shadowColor == shadowColor )
+ return;
+ d->m_shadowDistanceX = shadowDistanceX;
+ d->m_shadowDistanceY = shadowDistanceY;
+ d->m_shadowColor = shadowColor;
+ update();
+}
+
+void KoTextFormat::setRelativeTextSize( double _size )
+{
+ if ( d->m_relativeTextSize == _size)
+ return;
+ d->m_relativeTextSize = _size;
+ update();
+}
+
+void KoTextFormat::setOffsetFromBaseLine( int _offset )
+{
+ if ( d->m_offsetFromBaseLine == _offset)
+ return;
+ d->m_offsetFromBaseLine = _offset;
+ update();
+}
+
+void KoTextFormat::setWordByWord( bool _b )
+{
+ if ( d->m_bWordByWord == _b)
+ return;
+ d->m_bWordByWord = _b;
+ update();
+}
+
+
+void KoTextFormat::setAttributeFont(KoTextFormat::AttributeStyle _att )
+{
+ if ( m_attributeFont == _att)
+ return;
+ m_attributeFont = _att;
+ update();
+
+}
+
+int KoTextFormat::compare( const KoTextFormat & format ) const
+{
+ int flags = 0;
+ if ( fn.weight() != format.fn.weight() )
+ flags |= KoTextFormat::Bold;
+ if ( fn.italic() != format.fn.italic() )
+ flags |= KoTextFormat::Italic;
+ if ( textUnderlineColor()!=format.textUnderlineColor() ||
+ underlineType()!= format.underlineType() ||
+ underlineStyle() != format.underlineStyle())
+ flags |= KoTextFormat::ExtendUnderLine;
+ if ( fn.family() != format.fn.family() )
+ flags |= KoTextFormat::Family;
+ if ( pointSize() != format.pointSize() )
+ flags |= KoTextFormat::Size;
+ if ( color() != format.color() )
+ flags |= KoTextFormat::Color;
+ if ( vAlign() != format.vAlign() ||
+ relativeTextSize() != format.relativeTextSize())
+ flags |= KoTextFormat::VAlign;
+ if ( strikeOutType() != format.strikeOutType()
+ || underlineStyle() != format.underlineStyle())
+ flags |= KoTextFormat::StrikeOut;
+ if ( textBackgroundColor() != format.textBackgroundColor() )
+ flags |= KoTextFormat::TextBackgroundColor;
+ if ( language() != format.language() )
+ flags |= KoTextFormat::Language;
+ if ( d->m_shadowDistanceX != format.shadowDistanceX()
+ || d->m_shadowDistanceY != format.shadowDistanceY()
+ || d->m_shadowColor != format.shadowColor() )
+ flags |= KoTextFormat::ShadowText;
+ if ( offsetFromBaseLine() != format.offsetFromBaseLine() )
+ flags |= KoTextFormat::OffsetFromBaseLine;
+ if ( wordByWord() != format.wordByWord() )
+ flags |= KoTextFormat::WordByWord;
+ if ( attributeFont() != format.attributeFont() )
+ flags |= KoTextFormat::Attribute;
+ if( hyphenation() != format.hyphenation() )
+ flags |= KoTextFormat::Hyphenation;
+ if( underLineWidth() != format.underLineWidth() )
+ flags |= KoTextFormat::UnderLineWidth;
+ return flags;
+}
+
+QColor KoTextFormat::defaultTextColor( QPainter * painter )
+{
+ if ( painter->device()->devType() == QInternal::Printer )
+ return Qt::black;
+ return QApplication::palette().color( QPalette::Active, QColorGroup::Text );
+}
+
+float KoTextFormat::screenPointSize( const KoTextZoomHandler* zh ) const
+{
+ // ## simplify (needs a change in KoTextZoomHandler)
+ int pointSizeLU = KoTextZoomHandler::ptToLayoutUnitPt( pointSize() );
+ if ( vAlign() != KoTextFormat::AlignNormal )
+ pointSizeLU = (int)( pointSizeLU *relativeTextSize() );
+ return zh->layoutUnitToFontSize( pointSizeLU, false /* forPrint */ );
+}
+
+float KoTextFormat::refPointSize() const
+{
+ if ( vAlign() != KoTextFormat::AlignNormal )
+ return (float)pointSize() * relativeTextSize();
+ else
+ return pointSize();
+}
+
+QFont KoTextFormat::refFont() const
+{
+ float pointSize = refPointSize();
+ if ( !d->m_refFont || pointSize != d->m_refFont->pointSizeFloat() )
+ {
+ delete d->m_refFont;
+ d->m_refFont = new QFont( font() );
+ d->m_refFont->setPointSizeFloat( pointSize );
+ delete d->m_refFontMetrics;
+ d->m_refFontMetrics = 0;
+ //kdDebug(32500) << "KoTextFormat::refFont created new font with size " << pointSize << endl;
+ }
+ return *d->m_refFont;
+}
+
+QFont KoTextFormat::screenFont( const KoTextZoomHandler* zh ) const
+{
+ float pointSize = screenPointSize( zh );
+ //kdDebug(32500) << "KoTextFormat::screenFont pointSize=" << pointSize << endl;
+ // Compare if this is the size for which we cached the font metrics.
+ // We have to do this very dynamically, because 2 views could be painting the same
+ // stuff, with different zoom levels. So no absolute caching possible.
+ /*if ( d->m_screenFont )
+ kdDebug(32500) << " d->m_screenFont->pointSizeFloat()=" << d->m_screenFont->pointSizeFloat() << endl;*/
+ if ( !d->m_screenFont || kAbs( pointSize - d->m_screenFont->pointSizeFloat() ) > 1E-4 )
+ {
+ delete d->m_screenFont;
+ d->m_screenFont = new QFont( font() );
+ d->m_screenFont->setPointSizeFloat( pointSize );
+ delete d->m_screenFontMetrics;
+ d->m_screenFontMetrics = 0;
+ //kdDebug(32500) << "KoTextFormat::screenFont created new font with size " << pointSize << endl;
+ }
+ return *d->m_screenFont;
+}
+
+const QFontMetrics& KoTextFormat::screenFontMetrics( const KoTextZoomHandler* zh ) const
+{
+ QFont f = screenFont(zh); // don't move inside the if!
+
+ if ( !d->m_screenFontMetrics ) // not calculated, or invalidated by screenFont above
+ {
+ //kdDebug(32500) << this << " KoTextFormat::screenFontMetrics pointSize=" << pointSize << " d->m_screenFont->pointSizeFloat()=" << d->m_screenFont->pointSizeFloat() << endl;
+ d->m_screenFontMetrics = new QFontMetrics( f );
+ //kdDebug(32500) << "KoTextFormat::screenFontMetrics created new metrics with size " << pointSize << " height:" << d->m_screenFontMetrics->height() << endl;
+ }
+ return *d->m_screenFontMetrics;
+}
+
+const QFontMetrics& KoTextFormat::refFontMetrics() const
+{
+ QFont f = refFont();
+
+ if ( !d->m_refFontMetrics )
+ {
+ //kdDebug(32500) << this << " KoTextFormat::refFontMetrics pointSize=" << pointSize << " d->m_refFont->pointSizeFloat()=" << d->m_refFont->pointSizeFloat() << endl;
+ d->m_refFontMetrics = new QFontMetrics( f );
+ //kdDebug(32500) << "KoTextFormat::refFontMetrics created new metrics with size " << pointSize << " height:" << d->m_refFontMetrics->height() << endl;
+ }
+ return *d->m_refFontMetrics;
+}
+
+QFont KoTextFormat::smallCapsFont( const KoTextZoomHandler* zh, bool applyZoom ) const
+{
+ QFont font = applyZoom ? screenFont( zh ) : refFont();
+ QFontMetrics fm = refFontMetrics(); // only used for proportions, so applyZoom doesn't matter
+ double pointSize = font.pointSize() * ((double)fm.boundingRect("x").height()/(double)fm.boundingRect("X").height());
+ font.setPointSizeFloat( pointSize );
+ return font;
+}
+
+int KoTextFormat::charWidth( const KoTextZoomHandler* zh, bool applyZoom, const KoTextStringChar* c,
+ const KoTextParag* parag, int i ) const
+{
+ ushort unicode = c->c.unicode();
+ if ( !c->charStop || unicode == 0xad || unicode == 0x2028 )
+ return 0;
+ Q_ASSERT( !c->isCustom() ); // actually it's a bit stupid to call this for custom items
+ if( c->isCustom() ) {
+ if( c->customItem()->placement() == KoTextCustomItem::PlaceInline ) {
+ // customitem width is in LU pixels. Convert to 100%-zoom-pixels (pt2pt==pix2pix)
+ double w = KoTextZoomHandler::layoutUnitPtToPt( c->customItem()->width );
+ return qRound( applyZoom ? ( w * zh->zoomFactorX() ) : w );
+ }
+ else
+ return 0;
+ }
+ int pixelww;
+ int r = c->c.row();
+ if( /*r < 0x06 || r > 0x1f*/ r < 0x06 || (r > 0x1f && !(r > 0xd7 && r < 0xe0)) )
+ {
+ // Small caps -> we can't use the cached font metrics from KoTextFormat
+ if ( attributeFont() == KoTextFormat::ATT_SMALL_CAPS && c->c.upper() != c->c )
+ {
+ pixelww = QFontMetrics( smallCapsFont( zh, applyZoom ) ).width( displayedChar( c->c ) );
+ }
+ else
+ // Use the cached font metrics from KoTextFormat
+ if ( applyZoom )
+ {
+ if ( r ) {
+ pixelww = this->screenFontMetrics( zh ).width( displayedChar( c->c ) );
+ } else {
+ // Use the m_screenWidths[] array when possible, even faster
+ Q_ASSERT( unicode < 256 );
+ pixelww = d->m_screenWidths[ unicode ];
+ // Not in cache yet -> calculate
+ if ( pixelww == 0 ) {
+ pixelww = this->screenFontMetrics( zh ).width( displayedChar( c->c ) );
+ Q_ASSERT( pixelww < 65535 );
+ d->m_screenWidths[ unicode ] = pixelww;
+ }
+ }
+ }
+ else {
+ pixelww = this->refFontMetrics().width( displayedChar( c->c ) );
+ }
+ }
+ else {
+ // Complex text. We need some hacks to get the right metric here
+ bool smallCaps = ( attributeFont() == KoTextFormat::ATT_SMALL_CAPS && c->c.upper() != c->c );
+ const QFontMetrics& fontMetrics = smallCaps ? smallCapsFont( zh, applyZoom ) : applyZoom ? screenFontMetrics( zh ) : refFontMetrics();
+ QString str;
+ int pos = 0;
+ if( i > 8 )
+ pos = i - 8;
+ int off = i - pos;
+ int end = QMIN( parag->length(), i + 8 );
+ while ( pos < end ) {
+ str += displayedChar( parag->at(pos)->c );
+ pos++;
+ }
+ pixelww = fontMetrics.charWidth( str, off );
+ }
+
+#if 0
+ kdDebug(32500) << "KoTextFormat::charWidth: char=" << QString(c->c) << " format=" << key()
+ << ", applyZoom=" << applyZoom << " pixel-width=" << pixelww << endl;
+#endif
+ return pixelww;
+}
+
+int KoTextFormat::height() const
+{
+ if ( d->m_refHeight < 0 )
+ {
+ // Calculate height using 100%-zoom font
+ int h = refFontMetrics().height()+QABS(offsetFromBaseLine());
+ if ( vAlign() == KoTextFormat::AlignSuperScript )
+ h += refFontMetrics().height()/2;
+ else if ( vAlign() == KoTextFormat::AlignSubScript )
+ h += refFontMetrics().height()/6;
+
+ // Add room for the shadow
+ if ( d->m_shadowDistanceY != 0 ) {
+ // pt -> pixel (at 100% zoom)
+ h += (int)(POINT_TO_INCH( static_cast<double>( KoGlobal::dpiY() ) ) * QABS( d->m_shadowDistanceY ) );
+ }
+
+ //kdDebug(32500) << "KoTextFormat::height 100%-zoom font says h=" << h << " in LU:" << KoTextZoomHandler::ptToLayoutUnitPt(h) << endl;
+ // Then scale to LU
+ d->m_refHeight = qRound( KoTextZoomHandler::ptToLayoutUnitPt( h ) );
+ }
+ return d->m_refHeight;
+}
+
+int KoTextFormat::offsetX() const // in LU pixels
+{
+ int off = 0;
+#if 0
+ // Shadow on left -> character is moved to the right
+ // Wrong if next char has no shadow (they'll run into each other)
+ // Somehow we should only do this if x == 0 (in the formatter)
+ if ( d->m_shadowDistanceX < 0 )
+ {
+ double lupt = KoTextZoomHandler::ptToLayoutUnitPt( QABS( d->m_shadowDistanceX ) );
+ off += (int)(POINT_TO_INCH( static_cast<double>( KoGlobal::dpiX() ) ) * lupt );
+ }
+#endif
+ return off;
+}
+
+int KoTextFormat::offsetY() const // in LU pixels
+{
+ int off = 0;
+#if 0
+ // Shadow on top -> character is moved down
+ if ( d->m_shadowDistanceY < 0 )
+ {
+ double lupt = KoTextZoomHandler::ptToLayoutUnitPt( QABS( d->m_shadowDistanceY ) );
+ off += (int)(POINT_TO_INCH( static_cast<double>( KoGlobal::dpiY() ) ) * lupt );
+ }
+#endif
+ return off;
+}
+
+QString KoTextFormat::displayedString( const QString& str )const
+{
+ switch ( m_attributeFont ) {
+ case ATT_NONE:
+ return str;
+ case ATT_UPPER:
+ case ATT_SMALL_CAPS:
+ return str.upper();
+ case ATT_LOWER:
+ return str.lower();
+ default:
+ kdDebug(32500)<<" Error in AttributeStyle \n";
+ return str;
+ }
+}
+
+QChar KoTextFormat::displayedChar( QChar c )const
+{
+ if ( c.unicode() == 0xa0 ) // nbsp
+ return ' ';
+ switch ( m_attributeFont ) {
+ case ATT_NONE:
+ return c;
+ case ATT_SMALL_CAPS:
+ case ATT_UPPER:
+ return c.upper();
+ case ATT_LOWER:
+ return c.lower();
+ default:
+ kdDebug(32500)<<" Error in AttributeStyle \n";
+ return c;
+ }
+}
+
+int KoTextFormat::ascent() const
+{
+ if ( d->m_refAscent < 0 )
+ {
+ // Calculate ascent using 100%-zoom font
+ int h = refFontMetrics().ascent();
+ if ( offsetFromBaseLine()>0 )
+ h += offsetFromBaseLine();
+ if ( vAlign() == KoTextFormat::AlignSuperScript )
+ h += refFontMetrics().height()/2;
+ // Then scale to LU
+ d->m_refAscent = qRound( KoTextZoomHandler::ptToLayoutUnitPt( h ) );
+ //d->m_refAscent += offsetY();
+ }
+ return d->m_refAscent;
+}
+
+int KoTextFormat::descent() const
+{
+ if ( d->m_refDescent < 0 )
+ {
+ // Calculate descent using 100%-zoom font
+ int h = refFontMetrics().descent();
+ if ( offsetFromBaseLine()<0 )
+ h -= offsetFromBaseLine();
+ // Then scale to LU
+ d->m_refDescent = qRound( KoTextZoomHandler::ptToLayoutUnitPt( h ) );
+ //d->m_refDescent += offsetY();
+ }
+ return d->m_refDescent;
+}
+
+int KoTextFormat::charWidthLU( const KoTextStringChar* c, const KoTextParag* parag, int i ) const
+{
+ // Hmm, we add precision to the least precise one!
+ // TODO: We should instead implement it here in LU, and let charWidth call it...
+ return KoTextZoomHandler::ptToLayoutUnitPt( charWidth( 0L, false, c, parag, i ) );
+}
+
+int KoTextFormat::width( const QChar& ch ) const
+{
+ // Warning this doesn't take into account the shadow
+ return KoTextZoomHandler::ptToLayoutUnitPt( refFontMetrics().width( ch ) );
+}
+
+void KoTextFormat::applyCharStyle( KoCharStyle *_style )
+{
+ d->m_charStyle = _style;
+}
+
+KoCharStyle *KoTextFormat::style() const
+{
+ return d->m_charStyle;
+}
+
+QString KoTextFormat::shadowAsCss( double shadowDistanceX, double shadowDistanceY, const QColor& shadowColor )
+{
+ // http://www.w3.org/TR/REC-CSS2/text.html#text-shadow-props
+ // none | [<color> || <length (h)> <length (v)> <length (blur radius, not used here)>] ...
+ // => none or color length length
+ if ( shadowDistanceX != 0 || shadowDistanceY != 0 )
+ {
+ QString css = shadowColor.name() + " ";
+ css += QString::number(shadowDistanceX) + "pt ";
+ css += QString::number(shadowDistanceY) + "pt";
+ return css;
+ }
+ return "none";
+}
+
+QString KoTextFormat::shadowAsCss() const
+{
+ return shadowAsCss( d->m_shadowDistanceX, d->m_shadowDistanceY, d->m_shadowColor );
+}
+
+void KoTextFormat::parseShadowFromCss( const QString& _css )
+{
+ QString css = _css.simplifyWhiteSpace();
+ if ( css.isEmpty() || css == "none" )
+ {
+ d->m_shadowDistanceX = 0;
+ d->m_shadowDistanceY = 0;
+ d->m_shadowColor = QColor();
+ } else
+ {
+ QStringList tokens = QStringList::split(' ', css);
+ if ( tokens.isEmpty() ) {
+ kdWarning(32500) << "Parse error in text-shadow: " << css << endl;
+ return;
+ }
+ // Check which token looks like a color
+ QColor col( tokens.first() );
+ if ( col.isValid() )
+ tokens.pop_front();
+ else if ( tokens.count() > 1 )
+ {
+ col.setNamedColor( tokens.last() );
+ if ( col.isValid() )
+ tokens.pop_back();
+ }
+ d->m_shadowColor = col; // whether valid or not
+ // Parse x distance
+ if ( !tokens.isEmpty() ) {
+ d->m_shadowDistanceX = KoUnit::parseValue( tokens.first() );
+ tokens.pop_front();
+ }
+ // Parse y distance
+ if ( !tokens.isEmpty() ) {
+ d->m_shadowDistanceY = KoUnit::parseValue( tokens.first() );
+ tokens.pop_front();
+ }
+ // We ignore whatever else is in the string (e.g. blur radius, other shadows)
+
+ }
+ update();
+}
+
+QColor KoTextFormat::shadowColor() const
+{
+ if ( d->m_shadowColor.isValid() )
+ return d->m_shadowColor;
+ else // CSS says "[If] no color has been specified, the shadow will have the same color as the [text] itself"
+ return col;
+}
+
+int KoTextFormat::shadowX( KoTextZoomHandler *zh ) const
+{
+ return zh->zoomItX( d->m_shadowDistanceX );
+}
+
+int KoTextFormat::shadowY( KoTextZoomHandler *zh ) const
+{
+ return zh->zoomItY( d->m_shadowDistanceY );
+}
+
+//static
+QString KoTextFormat::underlineStyleToString( KoTextFormat::UnderlineStyle _lineType )
+{
+ QString strLineType;
+ switch ( _lineType )
+ {
+ case KoTextFormat::U_SOLID:
+ strLineType ="solid";
+ break;
+ case KoTextFormat::U_DASH:
+ strLineType ="dash";
+ break;
+ case KoTextFormat::U_DOT:
+ strLineType ="dot";
+ break;
+ case KoTextFormat::U_DASH_DOT:
+ strLineType="dashdot";
+ break;
+ case KoTextFormat::U_DASH_DOT_DOT:
+ strLineType="dashdotdot";
+ break;
+ }
+ return strLineType;
+}
+
+QString KoTextFormat::strikeOutStyleToString( KoTextFormat::StrikeOutStyle _lineType )
+{
+ QString strLineType;
+ switch ( _lineType )
+ {
+ case KoTextFormat::S_SOLID:
+ strLineType ="solid";
+ break;
+ case KoTextFormat::S_DASH:
+ strLineType ="dash";
+ break;
+ case KoTextFormat::S_DOT:
+ strLineType ="dot";
+ break;
+ case KoTextFormat::S_DASH_DOT:
+ strLineType="dashdot";
+ break;
+ case KoTextFormat::S_DASH_DOT_DOT:
+ strLineType="dashdotdot";
+ break;
+ }
+ return strLineType;
+}
+
+KoTextFormat::UnderlineStyle KoTextFormat::stringToUnderlineStyle( const QString & _str )
+{
+ if ( _str =="solid")
+ return KoTextFormat::U_SOLID;
+ else if ( _str =="dash" )
+ return KoTextFormat::U_DASH;
+ else if ( _str =="dot" )
+ return KoTextFormat::U_DOT;
+ else if ( _str =="dashdot")
+ return KoTextFormat::U_DASH_DOT;
+ else if ( _str=="dashdotdot")
+ return KoTextFormat::U_DASH_DOT_DOT;
+ else
+ return KoTextFormat::U_SOLID;
+}
+
+KoTextFormat::StrikeOutStyle KoTextFormat::stringToStrikeOutStyle( const QString & _str )
+{
+ if ( _str =="solid")
+ return KoTextFormat::S_SOLID;
+ else if ( _str =="dash" )
+ return KoTextFormat::S_DASH;
+ else if ( _str =="dot" )
+ return KoTextFormat::S_DOT;
+ else if ( _str =="dashdot")
+ return KoTextFormat::S_DASH_DOT;
+ else if ( _str=="dashdotdot")
+ return KoTextFormat::S_DASH_DOT_DOT;
+ else
+ return KoTextFormat::S_SOLID;
+}
+
+QString KoTextFormat::attributeFontToString( KoTextFormat::AttributeStyle _attr )
+{
+ if (_attr == KoTextFormat::ATT_NONE )
+ return QString("none");
+ else if ( _attr == KoTextFormat::ATT_UPPER )
+ return QString("uppercase");
+ else if ( _attr == KoTextFormat::ATT_LOWER )
+ return QString("lowercase");
+ else if ( _attr == KoTextFormat::ATT_SMALL_CAPS )
+ return QString("smallcaps");
+ else
+ return QString("none");
+}
+
+KoTextFormat::AttributeStyle KoTextFormat::stringToAttributeFont( const QString & _str )
+{
+ if ( _str == "none" )
+ return KoTextFormat::ATT_NONE;
+ else if ( _str == "uppercase")
+ return KoTextFormat::ATT_UPPER;
+ else if ( _str == "lowercase")
+ return KoTextFormat::ATT_LOWER;
+ else if ( _str == "smallcaps" )
+ return KoTextFormat::ATT_SMALL_CAPS;
+ else
+ return KoTextFormat::ATT_NONE;
+}
+
+
+void KoTextFormat::setHyphenation( bool b )
+{
+ if ( d->m_bHyphenation == b )
+ return;
+ d->m_bHyphenation = b;
+ update();
+
+}
+
+void KoTextFormat::setUnderLineWidth( double ulw )
+{
+ if ( d->m_underLineWidth == ulw )
+ return;
+ d->m_underLineWidth = ulw;
+ update();
+
+}
+
+void KoTextFormat::setLanguage( const QString & _lang)
+{
+ if ( m_language == _lang )
+ return;
+ m_language = _lang;
+ update();
+}
+
+QStringList KoTextFormat::underlineTypeList()
+{
+ QStringList lst;
+ lst <<i18n("Underline Style", "None");
+ lst <<i18n("Single");
+ lst <<i18n("Double");
+ lst <<i18n("Simple Bold");
+ lst <<i18n("Wave");
+ return lst;
+}
+
+QStringList KoTextFormat::strikeOutTypeList()
+{
+ QStringList lst;
+ lst <<i18n("Strikeout Style", "None");
+ lst <<i18n("Single");
+ lst <<i18n("Double");
+ lst <<i18n("Simple Bold");
+ return lst;
+}
+
+QStringList KoTextFormat::fontAttributeList()
+{
+ QStringList lst;
+ lst <<i18n("Normal");
+ lst <<i18n("Uppercase");
+ lst <<i18n("Lowercase");
+ lst <<i18n("Small Caps");
+ return lst;
+}
+
+QStringList KoTextFormat::underlineStyleList()
+{
+ QStringList lst;
+ lst <<"_________"; // SOLID
+ lst <<"___ ___ __"; // DASH
+ lst <<"_ _ _ _ _ _"; // DOT
+ lst <<"___ _ ___ _"; // DASH_DOT
+ lst <<"___ _ _ ___"; // DASH_DOT_DOT
+ return lst;
+}
+
+QStringList KoTextFormat::strikeOutStyleList()
+{
+ QStringList lst;
+ lst <<"_________"; // SOLID
+ lst <<"___ ___ __"; // DASH
+ lst <<"_ _ _ _ _ _"; // DOT
+ lst <<"___ _ ___ _"; // DASH_DOT
+ lst <<"___ _ _ ___"; // DASH_DOT_DOT
+ return lst;
+}
+
+#ifndef NDEBUG
+void KoTextFormat::printDebug()
+{
+ QString col = color().isValid() ? color().name() : QString("(default)");
+ kdDebug(32500) << "format '" << key() << "' (" << (void*)this << "):"
+ << " refcount: " << ref
+ << " realfont: " << QFontInfo( font() ).family()
+ << " color: " << col << " shadow=" << shadowAsCss() << endl;
+}
+#endif
+
+////////////////
+
+KoTextFormatCollection::KoTextFormatCollection()
+ : cKey( 307 )//, sheet( 0 )
+{
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << "KoTextFormatCollection::KoTextFormatCollection " << this << endl;
+#endif
+ defFormat = new KoTextFormat( QApplication::font(), QColor(), KGlobal::locale()->language(), false );
+ lastFormat = cres = 0;
+ cflags = -1;
+ cKey.setAutoDelete( TRUE );
+ cachedFormat = 0;
+}
+
+KoTextFormatCollection::KoTextFormatCollection( const QFont& defaultFont, const QColor& defaultColor, const QString & defaultLanguage, bool defaultHyphenation )
+ : cKey( 307 )
+{
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << "KoTextFormatCollection::KoTextFormatCollection " << this << endl;
+#endif
+ defFormat = new KoTextFormat( defaultFont, defaultColor, defaultLanguage, defaultHyphenation );
+ lastFormat = cres = 0;
+ cflags = -1;
+ cKey.setAutoDelete( TRUE );
+ cachedFormat = 0;
+}
+
+KoTextFormatCollection::~KoTextFormatCollection()
+{
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << "KoTextFormatCollection::~KoTextFormatCollection " << this << endl;
+#endif
+ delete defFormat;
+ defFormat = 0;
+}
+
+KoTextFormat *KoTextFormatCollection::format( const KoTextFormat *f )
+{
+ if ( f->parent() == this || f == defFormat ) {
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format(f) need '" << f->key() << "', best case!" << endl;
+#endif
+ lastFormat = const_cast<KoTextFormat*>(f);
+ lastFormat->addRef();
+ return lastFormat;
+ }
+
+ if ( f == lastFormat || ( lastFormat && f->key() == lastFormat->key() ) ) {
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format(f) need '" << f->key() << "', good case!" << endl;
+#endif
+ lastFormat->addRef();
+ return lastFormat;
+ }
+
+#if 0 // #### disabled, because if this format is not in the
+ // formatcollection, it doesn't get the painter through
+ // KoTextFormatCollection::setPainter() which breaks printing on
+ // windows
+ if ( f->isAnchor() ) {
+ lastFormat = createFormat( *f );
+ lastFormat->collection = 0;
+ return lastFormat;
+ }
+#endif
+
+ KoTextFormat *fm = cKey.find( f->key() );
+ if ( fm ) {
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format(f) need '" << f->key() << "', normal case!" << endl;
+#endif
+ lastFormat = fm;
+ lastFormat->addRef();
+ return lastFormat;
+ }
+
+ if ( f->key() == defFormat->key() )
+ return defFormat;
+
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format(f) need '" << f->key() << "', worst case!" << endl;
+#endif
+ lastFormat = createFormat( *f );
+ lastFormat->collection = this;
+ cKey.insert( lastFormat->key(), lastFormat );
+ Q_ASSERT( f->key() == lastFormat->key() );
+ return lastFormat;
+}
+
+KoTextFormat *KoTextFormatCollection::format( const KoTextFormat *of, const KoTextFormat *nf, int flags )
+{
+ if ( cres && kof == of->key() && knf == nf->key() && cflags == flags ) {
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format(of,nf,flags) mix of '" << of->key() << "' and '" << nf->key() << "', best case!" << endl;
+#endif
+ cres->addRef();
+ return cres;
+ }
+
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format(of,nf," << flags << ") calling createFormat(of=" << of << " " << of->key() << ")" << endl;
+#endif
+ cres = createFormat( *of );
+ kof = of->key();
+ knf = nf->key();
+ cflags = flags;
+
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format(of,nf," << flags << ") calling copyFormat(nf=" << nf << " " << nf->key() << ")" << endl;
+#endif
+ cres->copyFormat( *nf, flags );
+
+ KoTextFormat *fm = cKey.find( cres->key() );
+ if ( !fm ) {
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format(of,nf,flags) mix of '" << of->key() << "' and '" << nf->key() << ", worst case!" << endl;
+#endif
+ cres->collection = this;
+ cKey.insert( cres->key(), cres );
+ } else {
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format(of,nf,flags) mix of '" << of->key() << "' and '" << nf->key() << ", good case!" << endl;
+#endif
+ delete cres;
+ cres = fm;
+ cres->addRef();
+ }
+
+ return cres;
+}
+
+#if 0
+KoTextFormat *KoTextFormatCollection::format( const QFont &f, const QColor &c, const QString & language, bool hyphen )
+{
+ if ( cachedFormat && cfont == f && ccol == c ) {
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format of font and col '" << cachedFormat->key() << "' - best case" << endl;
+#endif
+ cachedFormat->addRef();
+ return cachedFormat;
+ }
+
+ QString key = KoTextFormat::getKey( f, c, FALSE, KoTextFormat::AlignNormal );
+ cachedFormat = cKey.find( key );
+ cfont = f;
+ ccol = c;
+
+ if ( cachedFormat ) {
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format of font and col '" << cachedFormat->key() << "' - good case" << endl;
+#endif
+ cachedFormat->addRef();
+ return cachedFormat;
+ }
+
+ if ( key == defFormat->key() )
+ return defFormat;
+
+ cachedFormat = createFormat( f, c, language, hyphen );
+ cachedFormat->collection = this;
+ cKey.insert( cachedFormat->key(), cachedFormat );
+ if ( cachedFormat->key() != key )
+ kdWarning() << "ASSERT: keys for format not identical: '" << cachedFormat->key() << " '" << key << "'" << endl;
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " format of font and col '" << cachedFormat->key() << "' - worst case" << endl;
+#endif
+ return cachedFormat;
+}
+#endif
+
+void KoTextFormatCollection::remove( KoTextFormat *f )
+{
+ if ( lastFormat == f )
+ lastFormat = 0;
+ if ( cres == f )
+ cres = 0;
+ if ( cachedFormat == f )
+ cachedFormat = 0;
+ cKey.remove( f->key() );
+}
+
+void KoTextFormatCollection::zoomChanged()
+{
+ QDictIterator<KoTextFormat> it( cKey );
+ for ( ; it.current(); ++it ) {
+ it.current()->zoomChanged();
+ }
+}
+
+#if 0
+void KoTextFormatCollection::setPainter( QPainter *p )
+{
+ QDictIterator<KoTextFormat> it( cKey );
+ KoTextFormat *f;
+ while ( ( f = it.current() ) ) {
+ ++it;
+ f->setPainter( p );
+ }
+}
+#endif
+
+#ifndef NDEBUG
+void KoTextFormatCollection::debug()
+{
+ kdDebug(32500) << "------------ KoTextFormatCollection: debug --------------- BEGIN" << endl;
+ kdDebug(32500) << "Default Format: '" << defFormat->key() << "' (" << (void*)defFormat << "): realfont: " << QFontInfo( defFormat->font() ).family() << endl;
+ QDictIterator<KoTextFormat> it( cKey );
+ for ( ; it.current(); ++it ) {
+ Q_ASSERT(it.currentKey() == it.current()->key());
+ if(it.currentKey() != it.current()->key())
+ kdDebug(32500) << "**** MISMATCH key=" << it.currentKey() << " (see line below for format)" << endl;
+ it.current()->printDebug();
+ }
+ kdDebug(32500) << "------------ KoTextFormatCollection: debug --------------- END" << endl;
+}
+#endif
diff --git a/lib/kotext/KoTextFormat.h b/lib/kotext/KoTextFormat.h
new file mode 100644
index 00000000..850dcd2f
--- /dev/null
+++ b/lib/kotext/KoTextFormat.h
@@ -0,0 +1,499 @@
+#ifndef _KOTEXTFORMAT_H
+#define _KOTEXTFORMAT_H
+
+// File included by korichtext.h
+
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#undef S_NONE // Solaris defines it in sys/signal.h
+
+#include <qcolor.h>
+#include <qfont.h>
+#include <qstring.h>
+#include <qdict.h>
+#include <koffice_export.h>
+
+class KoGenStyle;
+class QFontMetrics;
+class KoCharStyle;
+class KoTextFormatCollection;
+class KoTextZoomHandler;
+class KoTextStringChar;
+class KoTextParag;
+class KoOasisContext;
+class KoSavingContext;
+
+/**
+ * Each character (KoTextStringChar) points to a KoTextFormat that defines the
+ * formatting of that character (font, bold, italic, underline, misspelled etc.).
+ *
+ * Formats are stored in KoTextFormatCollection and are shared for all
+ * characters with the same format. The API rule is that a const KoTextFormat*
+ * is a temporary format (out of collection) and a KoTextFormat* is a format
+ * from the collection.
+ */
+class KOTEXT_EXPORT KoTextFormat
+{
+ friend class KoTextFormatCollection; // it sets 'collection'
+ //friend class KoTextDocument;
+
+ // Having it here allows inline methods returning d->blah, for speed
+private:
+class KoTextFormatPrivate
+{
+public:
+ KoTextFormatPrivate() : m_screenFont( 0L ), m_screenFontMetrics( 0L ),
+ m_refFont( 0L ), m_refFontMetrics( 0L ),
+ m_refAscent( -1 ), m_refDescent( -1 ), m_refHeight( -1 )
+
+ {
+ memset( m_screenWidths, 0, 256 * sizeof( ushort ) );
+ m_charStyle = 0L;
+ }
+ ~KoTextFormatPrivate()
+ {
+ clearCache();
+ }
+ void clearCache();
+ // caching for speedup when formatting
+ QFont* m_screenFont; // font to be used when painting (zoom-dependent)
+ QFontMetrics* m_screenFontMetrics; // font metrics on screen (zoom-dependent)
+ QFont* m_refFont; // font to be used when formatting text for layout units
+ QFontMetrics* m_refFontMetrics; // font metrics for m_refFontMetrics
+ int m_refAscent;
+ int m_refDescent;
+ int m_refHeight;
+ int m_offsetFromBaseLine;
+ ushort m_screenWidths[ 256 ];
+ // m_refWidths[ 256 ] would speed things up too, but ushort might not be enough for it
+ double m_relativeTextSize;
+ double m_underLineWidth;
+ KoCharStyle *m_charStyle;
+
+ double m_shadowDistanceX; // 0 in both x and y means no shadow
+ double m_shadowDistanceY;
+ QColor m_shadowColor;
+ bool m_bWordByWord;
+ bool m_bHyphenation;
+};
+
+public:
+ enum Flags {
+ NoFlags,
+ Bold = 1,
+ Italic = 2,
+ Underline = 4,
+ Family = 8,
+ Size = 16,
+ Color = 32,
+ Misspelled = 64,
+ VAlign = 128,
+ // 256 is free for use
+ StrikeOut = 512, // style and type strikeout
+ TextBackgroundColor = 1024,
+ ExtendUnderLine = 2048, // color, style and type of underline
+ Language = 4096,
+ ShadowText = 8192,
+ OffsetFromBaseLine = 16384,
+ WordByWord = 32768,
+ Attribute = 65536, // lower/upper/smallcaps
+ Hyphenation = 131072,
+ UnderLineWidth = 262144,
+
+ Font = Bold | Italic | Underline | Family | Size,
+ // Format means "everything"
+ Format = Font | Color | Misspelled | VAlign | StrikeOut | TextBackgroundColor |
+ ExtendUnderLine | Language | ShadowText | OffsetFromBaseLine |
+ WordByWord | Attribute | Hyphenation | UnderLineWidth
+ };
+
+ enum VerticalAlignment { AlignNormal, AlignSubScript, AlignSuperScript, AlignCustom }; // QRT now has it in another order, but it's too late, we use this order in KWord's file format now !
+ enum UnderlineType { U_NONE = 0, U_SIMPLE = 1, U_DOUBLE = 2, U_SIMPLE_BOLD = 3, U_WAVE = 4};
+ enum StrikeOutType { S_NONE = 0, S_SIMPLE = 1, S_DOUBLE = 2, S_SIMPLE_BOLD = 3};
+ enum UnderlineStyle { U_SOLID = 0 , U_DASH = 1, U_DOT = 2, U_DASH_DOT = 3, U_DASH_DOT_DOT = 4};
+ enum StrikeOutStyle { S_SOLID = 0 , S_DASH = 1, S_DOT = 2, S_DASH_DOT = 3, S_DASH_DOT_DOT = 4};
+
+ enum AttributeStyle { ATT_NONE = 0, ATT_UPPER = 1, ATT_LOWER = 2 , ATT_SMALL_CAPS};
+
+
+ KoTextFormat();
+ ~KoTextFormat();
+
+ /// A simple text format with some default settings
+ /// Only used for the default format
+ KoTextFormat( const QFont &f, const QColor &c, const QString &_language,
+ bool hyphenation, KoTextFormatCollection *parent = 0 );
+
+ /// A complete text format (used by KoFontDia)
+ KoTextFormat( const QFont &_font,
+ VerticalAlignment _valign,
+ const QColor & _color,
+ const QColor & _backGroundColor,
+ const QColor & _underlineColor,
+ KoTextFormat::UnderlineType _underlineType,
+ KoTextFormat::UnderlineStyle _underlineStyle,
+ KoTextFormat::StrikeOutType _strikeOutType,
+ KoTextFormat::StrikeOutStyle _strikeOutStyle,
+ KoTextFormat::AttributeStyle _fontAttribute,
+ const QString &_language,
+ double _relativeTextSize,
+ int _offsetFromBaseLine,
+ bool _wordByWord,
+ bool _hyphenation,
+ double _shadowDistanceX,
+ double _shadowDistanceY,
+ const QColor& shadowColor );
+
+ KoTextFormat( const KoTextFormat &fm );
+ //KoTextFormat makeTextFormat( const QStyleSheetItem *style, const QMap<QString,QString>& attr ) const;
+ KoTextFormat& operator=( const KoTextFormat &fm );
+ void copyFormat( const KoTextFormat &fm, int flags );
+ QColor color() const;
+ QFont font() const;
+ int pointSize() const { return font().pointSize(); }
+ bool isMisspelled() const;
+ VerticalAlignment vAlign() const;
+ //int minLeftBearing() const;
+ //int minRightBearing() const;
+ /**
+ * Return the width of one char (from a string, not necessarily from a paragraph) in LU pixels.
+ * Do not call this for custom items, or for complex glyphs.
+ * But this can still be used for ' ' (for parag counters), 'x' (for tabs) etc.
+ */
+ int width( const QChar &c ) const;
+ int width( const QString &str, int pos ) const;
+ int height() const; // in LU pixels
+ int ascent() const; // in LU pixels
+ int descent() const; // in LU pixels
+ //bool useLinkColor() const;
+ int offsetX() const; // in LU pixels
+ int offsetY() const; // in LU pixels
+
+ void setBold( bool b );
+ void setItalic( bool b );
+ void setUnderline( bool b );
+ void setFamily( const QString &f );
+ void setPointSize( int s );
+ void setFont( const QFont &f );
+ void setColor( const QColor &c );
+ void setMisspelled( bool b );
+ void setVAlign( VerticalAlignment a );
+
+ bool operator==( const KoTextFormat &f ) const;
+ KoTextFormatCollection *parent() const;
+ void setCollection( KoTextFormatCollection *parent ) { collection = parent; }
+ QString key() const;
+
+ static QString getKey( const QFont &f, const QColor &c, bool misspelled, VerticalAlignment vAlign );
+
+ void addRef();
+ void removeRef();
+
+ /** Return a set of flags showing the differences between this and 'format' */
+ int compare( const KoTextFormat & format ) const;
+
+ /** Call this when a text color is set to 'invalid', meaning 'whatever the
+ * default for the color scheme is' */
+ static QColor defaultTextColor( QPainter * painter );
+
+ void setStrikeOutType (StrikeOutType _type);
+ StrikeOutType strikeOutType()const {return m_strikeOutType;}
+
+ void setStrikeOutStyle( StrikeOutStyle _type );
+ StrikeOutStyle strikeOutStyle()const {return m_strikeOutStyle;}
+
+
+ void setTextBackgroundColor(const QColor &);
+ QColor textBackgroundColor()const {return m_textBackColor;}
+
+ void setTextUnderlineColor(const QColor &);
+ QColor textUnderlineColor()const {return m_textUnderlineColor;}
+
+ void setUnderlineType (UnderlineType _type);
+ UnderlineType underlineType()const {return m_underlineType;}
+
+ void setUnderlineStyle (UnderlineStyle _type);
+ UnderlineStyle underlineStyle()const {return m_underlineStyle;}
+
+ void setLanguage( const QString & _lang);
+ QString language() const { return m_language;}
+
+ void setHyphenation( bool b );
+ bool hyphenation() const { return d->m_bHyphenation; }
+
+ // This settings is a bit different - it's cached into the KoTextFormat,
+ // but it's not directly settable by the user, nor loaded/saved.
+ void setUnderLineWidth( double ulw );
+ double underLineWidth() const { return d->m_underLineWidth; }
+
+
+ void setAttributeFont( KoTextFormat::AttributeStyle _att );
+ KoTextFormat::AttributeStyle attributeFont() const { return m_attributeFont;}
+
+
+ double shadowDistanceX() const { return d->m_shadowDistanceX; }
+ double shadowDistanceY() const { return d->m_shadowDistanceY; }
+ QColor shadowColor() const;
+ /// Return the amount of pixels for the horizontal shadow distance at a given zoom level
+ int shadowX( KoTextZoomHandler *zh ) const;
+ /// Return the amount of pixels for the vertical shadow distance at a given zoom level
+ int shadowY( KoTextZoomHandler *zh ) const;
+ void setShadow( double shadowDistanceX, double shadowDistanceY, const QColor& shadowColor );
+ /// Return css string for the shadow, used when saving
+ QString shadowAsCss() const;
+ static QString shadowAsCss( double shadowDistanceX, double shadowDistanceY, const QColor& shadowColor );
+ /// Load shadow attributes from a css string, used when loading
+ void parseShadowFromCss( const QString& css );
+
+ double relativeTextSize() const { return d->m_relativeTextSize;}
+ void setRelativeTextSize( double _size );
+
+ //we store this offset into as point => int
+ int offsetFromBaseLine() const { return d->m_offsetFromBaseLine;}
+ void setOffsetFromBaseLine( int _offset );
+
+ bool wordByWord() const { return d->m_bWordByWord;}
+ void setWordByWord( bool _b );
+
+ bool doubleUnderline() const { return (m_underlineType==U_DOUBLE ); }
+ bool waveUnderline() const { return (m_underlineType==U_WAVE ); }
+ bool underline() const { return (m_underlineType==U_SIMPLE ); }
+ bool strikeOut() const { return (m_strikeOutType==S_SIMPLE ); }
+ bool doubleStrikeOut() const { return (m_strikeOutType==S_DOUBLE ); }
+ bool isStrikedOrUnderlined() const { return ((m_underlineType != U_NONE) ||(m_strikeOutType!=S_NONE));}
+
+ /**
+ * @return the reference point size, i.e. the size specified by the user.
+ * This is the one used during formatting, independently from the zoom level.
+ * This method takes care of superscript and subscript (smaller font).
+ */
+ float refPointSize() const;
+
+ /**
+ * @return the point size to use on screen, given @p zh
+ * This method takes care of superscript and subscript (smaller font).
+ */
+ float screenPointSize( const KoTextZoomHandler* zh ) const;
+
+ /**
+ * @return the metrics for the reference font, i.e. with the size specified by the user.
+ * This is the one used during formatting, independently from the zoom level.
+ * This method takes care of superscript and subscript (smaller font).
+ */
+ const QFontMetrics& refFontMetrics() const;
+
+ /**
+ * Returns the font metrics for the font used at the zoom & resolution
+ * given by 'zh'. Despite the name, this is probably valid for printing too.
+ * This method takes care of superscript and subscript (smaller font).
+ */
+ const QFontMetrics& screenFontMetrics( const KoTextZoomHandler* zh ) const;
+
+ /**
+ * @return the reference font, i.e. with the size specified by the user.
+ * This is used at text layout time (e.g. kotextformatter)
+ */
+ QFont refFont() const;
+
+ /**
+ * Returns the font to be used at the zoom & resolution given by 'zh'.
+ * Despite the name, this is probably valid for printing too.
+ * This method takes care of superscript and subscript (smaller font).
+ */
+ QFont screenFont( const KoTextZoomHandler* zh ) const;
+
+ QFont smallCapsFont( const KoTextZoomHandler* zh, bool applyZoom ) const;
+
+ /**
+ * Return the width of one char in one paragraph.
+ * Used by KoTextFormatter twice: once for the 100% zoom pointsize (via charWidthLU),
+ * and once for the current zoom pointsize.
+ */
+ int charWidth( const KoTextZoomHandler* zh, bool applyZoom, const KoTextStringChar* c,
+ const KoTextParag* parag, int i ) const;
+
+ /**
+ * Return the width of one char in LU pixels.
+ * Equivalent to ptToLayoutUnitPt( charWidth( 0L, false, c, parag, i ) )
+ */
+ int charWidthLU( const KoTextStringChar* c,
+ const KoTextParag* parag, int i ) const;
+
+ void applyCharStyle( KoCharStyle *_style );
+ KoCharStyle *style() const;
+ static QString underlineStyleToString( UnderlineStyle _lineType );
+ static QString strikeOutStyleToString( StrikeOutStyle _lineType );
+ static UnderlineStyle stringToUnderlineStyle( const QString & _str );
+ static StrikeOutStyle stringToStrikeOutStyle( const QString & _str );
+
+ static QString attributeFontToString( KoTextFormat::AttributeStyle _attr );
+ static AttributeStyle stringToAttributeFont( const QString & _str );
+
+ QString displayedString( const QString& c )const;
+ static QStringList underlineTypeList();
+ static QStringList strikeOutTypeList();
+ static QStringList fontAttributeList();
+ static QStringList underlineStyleList();
+ static QStringList strikeOutStyleList();
+
+ /// Load a text format from OASIS XML
+ void load( KoOasisContext& context );
+ /// Save a text format to OASIS XML
+ /// Only saves what differs from @refFormat, if set.
+ void save( KoGenStyle& gs, KoSavingContext& context, KoTextFormat * refFormat = 0 ) const;
+
+#ifndef NDEBUG
+ void printDebug();
+#endif
+
+ /// Called when the zoom or resolution changes
+ void zoomChanged();
+
+protected:
+ QChar displayedChar( QChar c )const;
+ void generateKey();
+
+private:
+ void update();
+
+ QColor m_textBackColor;
+ QColor m_textUnderlineColor;
+ UnderlineType m_underlineType;
+ StrikeOutType m_strikeOutType;
+ UnderlineStyle m_underlineStyle;
+ StrikeOutStyle m_strikeOutStyle;
+ QString m_language;
+ AttributeStyle m_attributeFont;
+ class KoTextFormatPrivate;
+ KoTextFormatPrivate *d;
+
+ QFont fn;
+ QColor col;
+ uint missp : 1;
+ //uint linkColor : 1;
+ VerticalAlignment va;
+ KoTextFormatCollection *collection;
+ int ref;
+ QString m_key;
+};
+
+#if defined(Q_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class Q_EXPORT QDict<KoTextFormat>;
+// MOC_SKIP_END
+#endif
+
+class KOTEXT_EXPORT KoTextFormatCollection
+{
+ friend class KoTextDocument;
+ friend class KoTextFormat;
+
+public:
+ KoTextFormatCollection();
+ /** Constructor.
+ * @param defaultFont the font to use for the default format
+ * @param defaultLanguage the language to use for the default format
+ * @param defaultHyphenation the hyphenation setting for the default format
+ */
+ KoTextFormatCollection( const QFont& defaultFont, const QColor& defaultColor,
+ const QString & defaultLanguage, bool defaultHyphenation );
+ /*virtual*/ ~KoTextFormatCollection();
+
+ void setDefaultFormat( KoTextFormat *f );
+ KoTextFormat *defaultFormat() const;
+ /*virtual*/ KoTextFormat *format( const KoTextFormat *f );
+ /*virtual*/ KoTextFormat *format( const KoTextFormat *of, const KoTextFormat *nf, int flags );
+ // Only used for the default format
+// /*virtual*/ KoTextFormat *format( const QFont &f, const QColor &c , const QString &_language, bool hyphen );
+ /*virtual*/ void remove( KoTextFormat *f );
+ /*virtual*/ KoTextFormat *createFormat( const KoTextFormat &f ) { return new KoTextFormat( f ); }
+ // Only used for the default format
+// /*virtual*/ KoTextFormat *createFormat( const QFont &f, const QColor &c, const QString & _language, bool hyphen ) { return new KoTextFormat( f, c, _language, hyphen, this ); }
+ void debug();
+
+ // Called when the zoom or resolution changes
+ void zoomChanged();
+
+ //void setPainter( QPainter *p );
+ //QStyleSheet *styleSheet() const { return sheet; }
+ //void setStyleSheet( QStyleSheet *s ) { sheet = s; }
+ //void updateStyles();
+ //void updateFontSizes( int base );
+ //void updateFontAttributes( const QFont &f, const QFont &old );
+
+ QDict<KoTextFormat> & dict() { return cKey; }
+
+private:
+ KoTextFormat *defFormat, *lastFormat, *cachedFormat;
+ QDict<KoTextFormat> cKey;
+ KoTextFormat *cres;
+ QFont cfont;
+ QColor ccol;
+ QString kof, knf;
+ int cflags;
+ //QStyleSheet *sheet;
+};
+
+inline QColor KoTextFormat::color() const
+{
+ return col;
+}
+
+inline QFont KoTextFormat::font() const
+{
+ return fn;
+}
+
+inline bool KoTextFormat::isMisspelled() const
+{
+ return missp;
+}
+
+inline KoTextFormat::VerticalAlignment KoTextFormat::vAlign() const
+{
+ return va;
+}
+
+inline bool KoTextFormat::operator==( const KoTextFormat &f ) const
+{
+ return key() == f.key();
+}
+
+inline KoTextFormatCollection *KoTextFormat::parent() const
+{
+ return collection;
+}
+
+//inline bool KoTextFormat::useLinkColor() const
+//{
+// return linkColor;
+//}
+
+inline void KoTextFormatCollection::setDefaultFormat( KoTextFormat *f )
+{
+ defFormat = f;
+}
+
+inline KoTextFormat *KoTextFormatCollection::defaultFormat() const
+{
+ return defFormat;
+}
+
+#endif
diff --git a/lib/kotext/KoTextFormatter.cpp b/lib/kotext/KoTextFormatter.cpp
new file mode 100644
index 00000000..7670dff6
--- /dev/null
+++ b/lib/kotext/KoTextFormatter.cpp
@@ -0,0 +1,1069 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextFormatter.h"
+#include "KoTextParag.h"
+#include "KoTextFormat.h"
+#include "KoTextDocument.h"
+#include "KoTextZoomHandler.h"
+#include "kohyphen/kohyphen.h"
+#include "KoParagCounter.h"
+
+#include <kdebug.h>
+#include <assert.h>
+
+//#define DEBUG_FORMATTER
+
+// Vertical info (height, baseline etc.)
+//#define DEBUG_FORMATTER_VERT
+
+// Line and paragraph width
+//#define DEBUG_FORMATTER_WIDTH
+
+// Hyphenation
+//#define DEBUG_HYPHENATION
+
+/////// keep in sync with kotextformat.cc !
+//#define REF_IS_LU
+
+KoTextFormatter::KoTextFormatter()
+{
+ try {
+ m_hyphenator = KoHyphenator::self();
+ } catch ( KoHyphenatorException& e )
+ {
+ m_hyphenator = 0L;
+ }
+}
+
+KoTextFormatter::~KoTextFormatter()
+{
+}
+
+// Hyphenation can break anywhere in the word, so
+// remember the temp data for every char.
+struct TemporaryWordData
+{
+ int baseLine;
+ int height;
+ int lineWidth; // value of wused
+};
+
+bool KoTextFormatter::format( KoTextDocument *doc, KoTextParag *parag,
+ int start, const QMap<int, KoTextParagLineStart*> &,
+ int& y, int& widthUsed )
+{
+ KoTextFormatterCore formatter( this, doc, parag, start );
+ bool worked = formatter.format();
+ y = formatter.resultY();
+ widthUsed = formatter.widthUsed();
+ return worked;
+}
+
+KoTextFormatterCore::KoTextFormatterCore( KoTextFormatter* _settings,
+ KoTextDocument *_doc, KoTextParag *_parag,
+ int _start )
+ : settings(_settings), doc(_doc), parag(_parag), start(_start)
+{
+}
+
+QPair<int, int> KoTextFormatterCore::determineCharWidth()
+{
+ int ww, pixelww;
+ KoTextZoomHandler *zh = doc->formattingZoomHandler();
+ if ( c->c != '\t' || c->isCustom() ) {
+ KoTextFormat *charFormat = c->format();
+ if ( c->isCustom() ) {
+ ww = c->customItem()->width;
+ Q_ASSERT( ww >= 0 );
+ ww = QMAX(0, ww);
+#ifndef REF_IS_LU
+ pixelww = zh->layoutUnitToPixelX( ww );
+#endif
+ } else {
+ ww = charFormat->charWidthLU( c, parag, i );
+#ifndef REF_IS_LU
+ // Pixel size - we want the metrics of the font that's going to be used.
+ pixelww = charFormat->charWidth( zh, true, c, parag, i );
+#endif
+ }
+ } else { // tab
+ int nx = parag->nextTab( i, x, availableWidth );
+ if ( nx < x )
+ ww = availableWidth - x;
+ else
+ ww = nx - x;
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "nextTab for x=" << x << " returned nx=" << nx << " (=> ww=" << ww << ")" << endl;
+#endif
+#ifndef REF_IS_LU
+ pixelww = zh->layoutUnitToPixelX( ww );
+#endif
+ }
+ Q_ASSERT( ww >= 0 );
+ c->width = ww;
+ return qMakePair(ww, pixelww);
+}
+
+
+int KoTextFormatterCore::leftMargin( bool firstLine, bool includeFirstLineMargin /* = true */ ) const
+{
+ int left = /*doc ?*/ parag->leftMargin() + doc->leftMargin() /*: 0*/;
+ if ( firstLine && !parag->string()->isRightToLeft() )
+ {
+ if ( includeFirstLineMargin )
+ left += parag->firstLineMargin();
+ // Add the width of the paragraph counter - first line of parag only.
+ if( parag->counter() &&
+ ( parag->counter()->alignment() == Qt::AlignLeft ||
+ parag->counter()->alignment() == Qt::AlignAuto ) )
+ left += parag->counterWidth(); // in LU pixels
+ }
+ return left;
+}
+
+int KoTextFormatterCore::rightMargin( bool firstLine ) const
+{
+ int right = parag->rightMargin(); // 'rm' in QRT
+ if ( /*doc &&*/ firstLine && parag->string()->isRightToLeft() )
+ right += parag->firstLineMargin();
+ return right;
+}
+
+bool KoTextFormatterCore::format()
+{
+ start = 0; // we don't do partial formatting yet
+ KoTextString *string = parag->string();
+ if ( start == 0 )
+ c = &string->at( start );
+ else
+ c = 0;
+
+ KoTextStringChar *firstChar = 0;
+ int left = doc ? leftMargin( true, false ) : 0;
+ int initialLMargin = leftMargin( true );
+
+ y = parag->breakableTopMargin();
+ // #57555, top margin doesn't apply if parag at top of page
+ // (but a portion of the margin can be needed, to complete the prev page)
+ // So we apply formatVertically() on the top margin, to find where to break it.
+ if ( !parag->prev() )
+ y = 0; // no top margin on very first parag
+ else if ( y )
+ {
+ int shift = doc->flow()->adjustFlow( parag->rect().y(),
+ 0 /*w, unused*/,
+ y );
+ if ( shift > 0 )
+ {
+ // The shift is in fact the amount of top-margin that should remain
+ // The remaining portion should be eaten away.
+ y = shift;
+ }
+
+ }
+ // Now add the rest of the top margin (e.g. the one for the border)
+ y += parag->topMargin() - parag->breakableTopMargin();
+ int len = parag->length();
+
+ int initialHeight = c->height(); // remember what adjustMargins was called with
+
+ int currentRightMargin = rightMargin( true );
+ int initialRMargin = currentRightMargin;
+ // Those three things must be done before calling determineCharWidth
+ i = start;
+ parag->tabCache().clear();
+ x = 0;
+
+ // We need the width of the first char for adjustMargins
+ // The result might not be 100% accurate when using a tab (it'll use x=0
+ // but with counters/margins this might be different). This is why
+ // we call determineCharWidth() again from within the loop.
+ QPair<int, int> widths = determineCharWidth();
+ int ww = widths.first; // width in layout units
+#ifndef REF_IS_LU
+ int pixelww = widths.second; // width in pixels
+#endif
+
+ // dw is the document width, i.e. the maximum available width, all included.
+ // We are in a variable-width design, so it is returned by each call to adjustMargins.
+ int dw = 0;
+ //if (doc) // always true in kotext
+ doc->flow()->adjustMargins( y + parag->rect().y(), initialHeight, // input params
+ ww, initialLMargin, initialRMargin, dw, // output params
+ parag );
+ //else dw = parag->documentVisibleWidth();
+
+ x = initialLMargin; // as modified by adjustMargins
+
+ int maxY = doc ? doc->flow()->availableHeight() : -1;
+
+ availableWidth = dw - initialRMargin; // 'w' in QRT
+#if defined(DEBUG_FORMATTER) || defined(DEBUG_FORMATTER_WIDTH)
+ kdDebug(32500) << "KoTextFormatter::format formatting parag " << parag->paragId()
+ << " text:" << parag->string()->toString() << "\n"
+ << " left=" << left << " initialHeight=" << initialHeight << " initialLMargin=" << initialLMargin << " initialRMargin=" << initialRMargin << " availableWidth=" << availableWidth << " maxY=" << maxY << endl;
+#else
+ if ( availableWidth == 0 )
+ kdDebug(32500) << "KoTextFormatter::format " << parag->paragId() << " warning, availableWidth=0" << endl;
+ if ( maxY == 0 )
+ kdDebug(32500) << "KoTextFormatter::format " << parag->paragId() << " warning, maxY=0" << endl;
+#endif
+ bool fullWidth = TRUE;
+ //int marg = left + initialRMargin;
+
+ // minw is the really minimum width needed for this paragraph, i.e.
+ // the width of the longest set of non-breakable characters together.
+ // Currently unused.
+ //int minw = 0;
+
+ wused = 0;
+
+ QValueList<TemporaryWordData> tempWordData;
+
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "Initial KoTextParagLineStart at y=" << y << endl;
+#endif
+ KoTextParagLineStart *lineStart = new KoTextParagLineStart( y, 0, 0 );
+ parag->insertLineStart( 0, lineStart );
+ int lastBreak = -1;
+ // tmph, tmpBaseLine and tminw are used after the last breakable char
+ // we don't know yet if we'll break there, or later.
+ int tmpBaseLine = 0, tmph = 0;
+ //int tminw = marg;
+ int tmpWused = 0;
+ bool lastWasNonInlineCustom = FALSE;
+ bool abort = false;
+
+ int align = parag->alignment();
+ if ( align == Qt::AlignAuto && doc && doc->alignment() != Qt::AlignAuto )
+ align = doc->alignment();
+
+ int col = 0;
+
+ maxAvailableWidth = qMakePair( 0, 0 );
+
+ KoTextZoomHandler *zh = doc->formattingZoomHandler();
+ int pixelx = zh->layoutUnitToPixelX( x );
+ int lastPixelx = 0;
+
+ KoTextStringChar* lastChr = 0;
+ for ( ; i < len; ++i, ++col ) {
+ if ( c )
+ lastChr = c;
+ c = &string->at( i );
+ if ( i > 0 && (x > initialLMargin || ww == 0) || lastWasNonInlineCustom ) {
+ c->lineStart = 0;
+ } else {
+ c->lineStart = 1;
+ firstChar = c;
+ tmph = c->height();
+ tmpBaseLine = c->ascent();
+#ifdef DEBUG_FORMATTER_VERT
+ kdDebug(32500) << "New line, initializing tmpBaseLine=" << tmpBaseLine << " tmph=" << tmph << endl;
+#endif
+ }
+
+ if ( c->isCustom() && c->customItem()->placement() != KoTextCustomItem::PlaceInline )
+ lastWasNonInlineCustom = TRUE;
+ else
+ lastWasNonInlineCustom = FALSE;
+
+ QPair<int, int> widths = determineCharWidth();
+ ww = widths.first;
+ pixelww = widths.second;
+
+ // We're "aborting" the formatting. This still means we need to set the
+ // lineStart bools to false (trouble ahead, otherwise!), and while we're at
+ // it we also calculate the widths etc.
+ if ( abort ) {
+ x += ww;
+ c->x = x;
+ continue; // yeah, this seems a bit confusing :)
+ }
+
+ //code from qt-3.1beta2
+ if ( c->isCustom() && c->customItem()->ownLine() ) {
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "i=" << i << "/" << len << " custom item with ownline" << endl;
+#endif
+ int rightMargin = currentRightMargin;
+ x = left;
+ if ( doc )
+ doc->flow()->adjustMargins( y + parag->rect().y(), parag->rect().height(), 15,
+ x, rightMargin, dw, parag );
+ int w = dw - rightMargin;
+ c->customItem()->resize( w - x );
+ y += lineStart->h;
+ lineStart = new KoTextParagLineStart( y, c->ascent(), c->height() );
+ // Added for kotext (to be tested)
+ lineStart->lineSpacing = doc ? parag->calculateLineSpacing( (int)parag->lineStartList().count()-1, i, i ) : 0;
+ lineStart->h += lineStart->lineSpacing;
+ lineStart->w = dw;
+ parag->insertLineStart( i, lineStart );
+ tempWordData.clear();
+ c->lineStart = 1;
+ firstChar = c;
+ x = 0xffffff;
+ // Hmm, --i or setting lineStart on next char too?
+ continue;
+ }
+
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "c='" << QString(c->c) << "' i=" << i << "/" << len << " x=" << x << " ww=" << ww << " availableWidth=" << availableWidth << " (test is x+ww>aW) lastBreak=" << lastBreak << " isBreakable=" << settings->isBreakable(string, i) << endl;
+#endif
+ // Wrapping at end of line - one big if :)
+ if (
+ // Check if should break (i.e. we are after the max X for the end of the line)
+ ( ( /*wrapAtColumn() == -1 &&*/ x + ww > availableWidth &&
+ ( lastBreak != -1 || settings->allowBreakInWords() ) )
+
+ // Allow two breakable chars next to each other (e.g. ' ') but not more
+ && ( !settings->isBreakable( string, i ) ||
+ ( i > 1 && lastBreak == i-1 && settings->isBreakable( string, i-2 ) ) ||
+ lastBreak == -2 ) // ... used to be a special case...
+
+ // No point in breaking just for the trailing space (testcase: page numbers in TOC)
+ && ( i < len-1 )
+
+ // Ensure that there is at least one char per line, otherwise, on
+ // a very narrow document and huge chars, we could loop forever.
+ // checkVerticalBreak takes care of moving down the lines where no
+ // char should be, anyway.
+ // Hmm, it doesn't really do so. To be continued...
+ /////////// && ( firstChar != c )
+
+ )
+ // Or maybe we simply encountered a '\n'
+ || ( lastChr && lastChr->c == '\n' && parag->isNewLinesAllowed() && lastBreak > -1 ) )
+ {
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "BREAKING" << endl;
+#endif
+ //if ( wrapAtColumn() != -1 )
+ // minw = QMAX( minw, x + ww );
+
+ bool hyphenated = false;
+ // Hyphenation: check if we can break somewhere between lastBreak and i
+ if ( settings->hyphenator() && !c->isCustom() )
+ {
+ int wordStart = QMAX(0, lastBreak+1);
+ // Breaking after i isn't possible, i is too far already
+ int maxlen = i - wordStart; // we can't accept to break after maxlen
+ QString word = string->mid( wordStart, maxlen );
+ int wordEnd = i;
+ // but we need to compose the entire word, to hyphenate it
+ while ( wordEnd < len && !settings->isBreakable( string, wordEnd ) ) {
+ word += string->at(wordEnd).c;
+ wordEnd++;
+ }
+ if ( word.length() > 1 ) // don't call the hyphenator for empty or one-letter words
+ {
+ QString lang = string->at(wordStart).format()->language();
+ char * hyphens = settings->hyphenator()->hyphens( word, lang );
+#if defined(DEBUG_HYPHENATION)
+ kdDebug(32500) << "Hyphenation: word=" << word << " lang=" << lang << " hyphens=" << hyphens << " maxlen=" << maxlen << endl;
+ kdDebug(32500) << "Parag indexes: wordStart=" << wordStart << " lastBreak=" << lastBreak << " i=" << i << endl;
+#endif
+ int hylen = strlen(hyphens);
+ Q_ASSERT( maxlen <= hylen );
+ // If this word was already hyphenated (at the previous line),
+ // don't break it there again. We can only break after firstChar.
+ int minPos = QMAX( 0, (firstChar - &string->at(0)) - wordStart );
+
+ // Check hyphenation positions from the end
+ for ( int hypos = maxlen-1 ; hypos >= minPos ; --hypos )
+ if ( ( hyphens[hypos] % 2 ) // odd number -> can break there...
+ && string->at(hypos + wordStart).format()->hyphenation() ) // ...if the user is ok with that
+ {
+ lineStart->hyphenated = true;
+ lastBreak = hypos + wordStart;
+ hyphenated = true;
+#if defined(DEBUG_FORMATTER) || defined(DEBUG_FORMATTER_WIDTH) || defined(DEBUG_HYPHENATION)
+ kdDebug(32500) << "Hyphenation: will break at " << lastBreak << " using tempworddata at position " << hypos << "/" << tempWordData.size() << endl;
+#endif
+ if ( hypos < (int)tempWordData.size() )
+ {
+ const TemporaryWordData& twd = tempWordData[ hypos ];
+ lineStart->baseLine = twd.baseLine;
+ lineStart->h = twd.height;
+ tmpWused = twd.lineWidth;
+ }
+ break;
+ }
+ delete[] hyphens;
+ }
+ }
+
+ // No breakable char found -> break at current char (i.e. before 'i')
+ if ( lastBreak < 0 ) {
+ // Remember if this is the start of a line; testing c->lineStart after breaking
+ // is always true...
+
+ // "Empty line" can happen when there is a very wide character (e.g. inline table),
+ // or a very narrow passage between frames.
+ // But in fact the second case is already handled by KWTextFrameSet's "no-space case",
+ // so we don't come here in that case.
+ const bool emptyLine = c->lineStart;
+ if ( !emptyLine && i > 0 )
+ {
+ // (combine lineStart->baseLine/lineStart->h and tmpBaseLine/tmph)
+ int belowBaseLine = QMAX( lineStart->h - lineStart->baseLine, tmph - tmpBaseLine );
+ lineStart->baseLine = QMAX( lineStart->baseLine, tmpBaseLine );
+ lineStart->h = lineStart->baseLine + belowBaseLine;
+ lineStart->w = dw;
+
+ KoTextParagLineStart *lineStart2 = koFormatLine( zh, parag, string, lineStart, firstChar, c-1, align, availableWidth - x );
+ y += lineStart->h;
+ lineStart = lineStart2;
+#ifdef DEBUG_FORMATTER
+ int linenr = parag->lineStartList().count()-1;
+ kdDebug(32500) << "line " << linenr << " done (breaking at current char). y now " << y << endl;
+#endif
+ tmph = c->height();
+
+ initialRMargin = currentRightMargin;
+ x = left;
+ if ( doc )
+ doc->flow()->adjustMargins( y + parag->rect().y(), tmph,
+ ww, // ## correct?
+ x, initialRMargin, dw, parag );
+
+ pixelx = zh->layoutUnitToPixelX( x );
+ initialHeight = tmph;
+ initialLMargin = x;
+ availableWidth = dw - initialRMargin;
+ if ( parag->isNewLinesAllowed() && c->c == '\t' ) {
+ int nx = parag->nextTab( i, x, availableWidth );
+ if ( nx < x )
+ ww = availableWidth - x;
+ else
+ ww = nx - x;
+ }
+ if ( x != left || availableWidth != dw )
+ fullWidth = FALSE;
+ lineStart->y = y;
+ parag->insertLineStart( i, lineStart );
+ tempWordData.clear();
+ lineStart->baseLine = c->ascent();
+ lineStart->h = c->height();
+ c->lineStart = 1;
+ firstChar = c;
+ tmpBaseLine = lineStart->baseLine;
+ lastBreak = -1;
+ col = 0;
+ //tminw = marg; // not in QRT?
+ tmpWused = 0;
+ }
+ // recalc everything for 'i', it might still not be ok where it is...
+ // (e.g. if there's no room at all on this line)
+ // But we don't want to do this forever, so we check against maxY (if known)
+ // [except if we come here after "final choice for empty line"!]
+ if ( !emptyLine && maxY > -1 )
+ {
+ if ( parag->rect().y() + y < maxY )
+ {
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "Re-checking formatting for character " << i << endl;
+#endif
+ --i; // so that the ++i in for() is a noop
+ continue;
+ }
+ else // we're after maxY, time to stop.
+ {
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "We're after maxY, time to stop." << endl;
+#endif
+ // No solution for now. Hopefully KWord will create more pages...
+ abort = true;
+ }
+ }
+ // maxY not known (or "final choice for empty line") -> keep going ('i' remains where it is)
+ // (in case of maxY not known, this is the initial QRT behaviour)
+ } else {
+ // If breaking means we're after maxY, then we won't do it.
+ // Hopefully KWord will create more pages.
+ if ( maxY > -1 && parag->rect().y() + y + lineStart->h >= maxY ) {
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "We're after maxY, time to stop." << endl;
+#endif
+ abort = true;
+ }
+ else
+ {
+ // Break the line at the last breakable character
+ i = lastBreak;
+ c = &string->at( i ); // The last char in the last line
+ int spaceAfterLine = availableWidth - c->x;
+ // ?? AFAICS we should always deduce the char's width from the available space....
+ //if ( string->isRightToLeft() && lastChr->c == '\n' )
+ spaceAfterLine -= c->width;
+
+ //else
+ if ( c->c.unicode() == 0xad || hyphenated ) // soft hyphen or hyphenation
+ {
+ // Recalculate its width, the hyphen will appear finally (important for the parag rect)
+ int width = KoTextZoomHandler::ptToLayoutUnitPt( c->format()->refFontMetrics().width( QChar(0xad) ) );
+ if ( c->c.unicode() == 0xad )
+ c->width = width;
+ spaceAfterLine -= width;
+ }
+ KoTextParagLineStart *lineStart2 = koFormatLine( zh, parag, string, lineStart, firstChar, c, align, spaceAfterLine );
+ lineStart->w = dw;
+ y += lineStart->h;
+ lineStart = lineStart2;
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "Breaking at a breakable char (" << i << "). linenr=" << parag->lineStartList().count()-1 << " y=" << y << endl;
+#endif
+
+ c = &string->at( i + 1 ); // The first char in the new line
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "Next line will start at i+1=" << i+1 << ", char=" << QString(c->c) << endl;
+#endif
+ tmph = c->height();
+
+ initialRMargin = currentRightMargin;
+ x = left;
+ if ( doc )
+ doc->flow()->adjustMargins( y + parag->rect().y(), tmph,
+ c->width,
+ x, initialRMargin, dw, parag );
+
+ pixelx = zh->layoutUnitToPixelX( x );
+ initialHeight = tmph;
+ initialLMargin = x;
+ availableWidth = dw - initialRMargin;
+ if ( x != left || availableWidth != dw )
+ fullWidth = FALSE;
+ lineStart->y = y;
+ parag->insertLineStart( i + 1, lineStart );
+ tempWordData.clear();
+ lineStart->baseLine = c->ascent();
+ lineStart->h = c->height();
+ firstChar = c;
+ tmpBaseLine = lineStart->baseLine;
+ lastBreak = -1;
+ col = 0;
+ //tminw = marg;
+ tmpWused = 0;
+ c->lineStart = 1; // only do this if we will actually create a line for it
+ continue;
+ }
+ }
+ } else if ( lineStart && ( settings->isBreakable( string, i ) || parag->isNewLinesAllowed() && c->c == '\n' ) ) {
+ // Breakable character
+ if ( len <= 2 || i < len - 1 ) {
+#ifdef DEBUG_FORMATTER_VERT
+ kdDebug(32500) << " Breakable character (i=" << i << " len=" << len << "):"
+ << " combining " << tmpBaseLine << "/" << tmph
+ << " with " << c->ascent() << "/" << c->height() << endl;
+#endif
+ // (combine tmpBaseLine/tmph and this character)
+ int belowBaseLine = QMAX( tmph - tmpBaseLine, c->height() - c->ascent() );
+ tmpBaseLine = QMAX( tmpBaseLine, c->ascent() );
+ tmph = tmpBaseLine + belowBaseLine;
+#ifdef DEBUG_FORMATTER_VERT
+ kdDebug(32500) << " -> tmpBaseLine/tmph : " << tmpBaseLine << "/" << tmph << endl;
+#endif
+ }
+ tempWordData.clear();
+ //minw = QMAX( minw, tminw );
+ //tminw = marg + ww;
+ wused = QMAX( wused, tmpWused );
+#ifdef DEBUG_FORMATTER_WIDTH
+ kdDebug(32500) << " Breakable character (i=" << i << " len=" << len << "): wused=" << wused << endl;
+#endif
+ tmpWused = 0;
+ // (combine lineStart and tmpBaseLine/tmph)
+#ifdef DEBUG_FORMATTER_VERT
+ kdDebug(32500) << "Breakable character: combining " << lineStart->baseLine << "/" << lineStart->h << " with " << tmpBaseLine << "/" << tmph << endl;
+#endif
+ int belowBaseLine = QMAX( lineStart->h - lineStart->baseLine, tmph - tmpBaseLine );
+ lineStart->baseLine = QMAX( lineStart->baseLine, tmpBaseLine );
+ lineStart->h = lineStart->baseLine + belowBaseLine;
+ lineStart->w = dw;
+#ifdef DEBUG_FORMATTER_VERT
+ kdDebug(32500) << " -> line baseLine/height : " << lineStart->baseLine << "/" << lineStart->h << endl;
+#endif
+ // if h > initialHeight, call adjustMargins, and if the result is != initial[LR]Margin,
+ // format this line again
+ if ( doc && lineStart->h > initialHeight )
+ {
+ bool firstLine = ( firstChar == &string->at( 0 ) );
+ int newLMargin = leftMargin( firstLine );
+ int newRMargin = rightMargin( firstLine );
+ int newPageWidth = dw;
+ initialHeight = lineStart->h;
+ doc->flow()->adjustMargins( y + parag->rect().y(), initialHeight,
+ firstChar->width,
+ newLMargin, newRMargin, newPageWidth, parag );
+
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "new height: " << initialHeight << " => left=" << left << " first-char=" << (firstChar==&string->at(0)) << " newLMargin=" << newLMargin << " newRMargin=" << newRMargin << endl;
+#endif
+ if ( newLMargin != initialLMargin || newRMargin != initialRMargin || newPageWidth != dw )
+ {
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "formatting again" << endl;
+#endif
+ i = (firstChar - &string->at(0));
+ x = newLMargin;
+ pixelx = zh->layoutUnitToPixelX( x );
+ availableWidth = dw - newRMargin;
+ initialLMargin = newLMargin;
+ initialRMargin = newRMargin;
+ dw = newPageWidth;
+ c = &string->at( i );
+ tmph = c->height();
+ tmpBaseLine = c->ascent();
+ lineStart->h = tmph;
+ lineStart->baseLine = tmpBaseLine;
+ lastBreak = -1;
+ col = 0;
+ //minw = x;
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "Restarting with i=" << i << " x=" << x << " y=" << y << " tmph=" << tmph << " initialHeight=" << initialHeight << " initialLMargin=" << initialLMargin << " initialRMargin=" << initialRMargin << " y=" << y << endl;
+#endif
+ // ww and pixelww already calculated and stored, no need to duplicate
+ // code like QRT does.
+ ww = c->width;
+#ifndef REF_IS_LU
+ pixelww = c->pixelwidth;
+#endif
+ //tminw = x + ww;
+ tmpWused = 0;
+ }
+ }
+
+ //kdDebug(32500) << " -> lineStart->baseLine/lineStart->h : " << lineStart->baseLine << "/" << lineStart->h << endl;
+ if ( i < len - 2 || c->c != ' ' )
+ lastBreak = i;
+
+ } else if ( i < len - 1 ) { // ignore height of trailing space
+ // Non-breakable character
+ //tminw += ww;
+#ifdef DEBUG_FORMATTER_VERT
+ kdDebug(32500) << " Non-breakable character: combining " << tmpBaseLine << "/" << tmph << " with " << c->ascent() << "/" << c->height() << endl;
+#endif
+ // (combine tmpBaseLine/tmph and this character)
+ int belowBaseLine = QMAX( tmph - tmpBaseLine, c->height() - c->ascent() );
+ tmpBaseLine = QMAX( tmpBaseLine, c->ascent() );
+ tmph = tmpBaseLine + belowBaseLine;
+#ifdef DEBUG_FORMATTER_VERT
+ kdDebug(32500) << " -> tmpBaseLine/tmph : " << tmpBaseLine << "/" << tmph << endl;
+#endif
+
+ TemporaryWordData twd;
+ twd.baseLine = tmpBaseLine;
+ twd.height = tmph;
+ twd.lineWidth = tmpWused;
+ tempWordData.append( twd );
+ }
+
+ c->x = x;
+ // pixelxadj is the adjustement to add to lu2pixel(x), to find pixelx
+ // (pixelx would be too expensive to store directly since it would require an int)
+ c->pixelxadj = pixelx - zh->layoutUnitToPixelX( x );
+ //c->pixelwidth = pixelww; // done as pixelx - lastPixelx below
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "LU: x=" << x << " [equiv. to pix=" << zh->layoutUnitToPixelX( x ) << "] ; PIX: x=" << pixelx << " --> adj=" << c->pixelxadj << endl;
+#endif
+
+ x += ww;
+
+ if ( i > 0 )
+ lastChr->pixelwidth = pixelx - lastPixelx;
+ if ( i < len - 1 )
+ tmpWused = QMAX( tmpWused, x );
+ else // trailing space
+ c->pixelwidth = zh->layoutUnitToPixelX( ww ); // was: pixelww;
+
+ lastPixelx = pixelx;
+#ifdef REF_IS_LU
+ pixelx = zh->layoutUnitToPixelX( x ); // no accumulating rounding errors anymore
+#else
+ pixelx += pixelww;
+#endif
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "LU: added " << ww << " -> now x=" << x << " ; PIX: added " << pixelww << " -> now pixelx=" << pixelx << endl;
+#endif
+ }
+
+ // ### hack. The last char in the paragraph is always invisible, and somehow sometimes has a wrong format. It changes between
+ // layouting and printing. This corrects some layouting errors in BiDi mode due to this.
+ if ( len > 1 /*&& !c->isAnchor()*/ ) {
+ c->format()->removeRef();
+ c->setFormat( string->at( len - 2 ).format() );
+ c->format()->addRef();
+ }
+
+ // Finish formatting the last line
+ if ( lineStart ) {
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "Last Line.... linenr=" << (int)parag->lineStartList().count()-1 << endl;
+#endif
+#ifdef DEBUG_FORMATTER_VERT
+ kdDebug(32500) << "Last Line... Combining " << lineStart->baseLine << "/" << lineStart->h << " with " << tmpBaseLine << "/" << tmph << endl;
+#endif
+ // (combine lineStart and tmpBaseLine/tmph)
+ int belowBaseLine = QMAX( lineStart->h - lineStart->baseLine, tmph - tmpBaseLine );
+ lineStart->baseLine = QMAX( lineStart->baseLine, tmpBaseLine );
+ lineStart->h = lineStart->baseLine + belowBaseLine;
+ lineStart->w = dw;
+#ifdef DEBUG_FORMATTER_WIDTH
+ kdDebug(32500) << "Last line: w = dw = " << dw << endl;
+#endif
+#ifdef DEBUG_FORMATTER_VERT
+ kdDebug(32500) << " -> lineStart->baseLine/lineStart->h : " << lineStart->baseLine << "/" << lineStart->h << endl;
+#endif
+ // last line in a paragraph is not justified
+ if ( align == Qt::AlignJustify )
+ align = Qt::AlignAuto;
+ int space = availableWidth - x + c->width; // don't count the trailing space (it breaks e.g. centering)
+ KoTextParagLineStart *lineStart2 = koFormatLine( zh, parag, string, lineStart, firstChar, c, align, space );
+ delete lineStart2;
+ }
+
+ //minw = QMAX( minw, tminw );
+ wused = QMAX( wused, tmpWused );
+#ifdef DEBUG_FORMATTER_WIDTH
+ kdDebug(32500) << "Done, wused=" << wused << endl;
+#endif
+
+ int m = parag->bottomMargin();
+ // ##### Does OOo add margins or does it max them?
+ //if ( parag->next() && doc && !doc->addMargins() )
+ // m = QMAX( m, parag->next()->topMargin() );
+ parag->setFullWidth( fullWidth );
+ //if ( parag->next() && parag->next()->isLineBreak() )
+ // m = 0;
+#ifdef DEBUG_FORMATTER_VERT
+ kdDebug(32500) << "Adding height of last line(" << lineStart->h << ") and bottomMargin(" << m << ") to y(" << y << ") => " << y+lineStart->h+m << endl;
+#endif
+ y += lineStart->h + m;
+
+ tmpWused += currentRightMargin; // ### this can break with a variable right-margin
+ //if ( wrapAtColumn() != -1 )
+ // minw = QMAX(minw, wused);
+ //thisminw = minw;
+
+#ifdef DEBUG_FORMATTER
+ // Sanity checking
+ int numberOfLines = 0;
+ QString charPosList;
+ for ( int i = 0 ; i < len; ++i ) {
+ KoTextStringChar *chr = &string->at( i );
+ if ( i == 0 )
+ assert( chr->lineStart );
+ if ( chr->lineStart ) {
+ ++numberOfLines;
+ charPosList += QString::number(i) + " ";
+ }
+ }
+ kdDebug(32500) << parag->lineStartList().count() << " lines. " << numberOfLines << " chars with lineStart set: " << charPosList << endl;
+ assert( numberOfLines == (int)parag->lineStartList().count() );
+#endif
+ return !abort;
+}
+
+// Helper for koFormatLine and koBidiReorderLine
+void KoTextFormatterCore::moveChar( KoTextStringChar& chr, KoTextZoomHandler *zh,
+ int deltaX, int deltaPixelX )
+{
+#ifndef REF_IS_LU
+ int pixelx = chr.pixelxadj + zh->layoutUnitToPixelX( chr.x );
+#endif
+ chr.x += deltaX;
+#ifndef REF_IS_LU
+ chr.pixelxadj = pixelx + deltaPixelX - zh->layoutUnitToPixelX( chr.x );
+#endif
+}
+
+KoTextParagLineStart *KoTextFormatterCore::koFormatLine(
+ KoTextZoomHandler *zh,
+ KoTextParag *parag, KoTextString *string, KoTextParagLineStart *line,
+ KoTextStringChar *startChar, KoTextStringChar *lastChar, int align, int space )
+{
+ KoTextParagLineStart* ret = 0;
+ if( string->isBidi() ) {
+ ret = koBidiReorderLine( zh, parag, string, line, startChar, lastChar, align, space );
+ } else {
+ int start = (startChar - &string->at(0));
+ int last = (lastChar - &string->at(0) );
+
+ if (space < 0)
+ space = 0;
+
+ // do alignment Auto == Left in this case
+ if ( align & Qt::AlignHCenter || align & Qt::AlignRight ) {
+ if ( align & Qt::AlignHCenter )
+ space /= 2;
+ int toAddPix = zh->layoutUnitToPixelX( space );
+ for ( int j = last; j >= start; --j ) {
+ KoTextStringChar &chr = string->at( j );
+ moveChar( chr, zh, space, toAddPix );
+ }
+ } else if ( align & Qt::AlignJustify ) {
+ int numSpaces = 0;
+ // End at "last-1", the last space ends up with a width of 0
+ for ( int j = last-1; j >= start; --j ) {
+ //// Start at last tab, if any. BR #40472 specifies that justifying should start after the last tab.
+ if ( string->at( j ).c == '\t' ) {
+ start = j+1;
+ break;
+ }
+ if( settings->isStretchable( string, j ) ) {
+ numSpaces++;
+ }
+ }
+ int toAdd = 0;
+ int toAddPix = 0;
+ for ( int k = start + 1; k <= last; ++k ) {
+ KoTextStringChar &chr = string->at( k );
+ if ( toAdd != 0 )
+ moveChar( chr, zh, toAdd, toAddPix );
+ if( settings->isStretchable( string, k ) && numSpaces ) {
+ int s = space / numSpaces;
+ toAdd += s;
+ toAddPix = zh->layoutUnitToPixelX( toAdd );
+ space -= s;
+ numSpaces--;
+ chr.width += s;
+#ifndef REF_IS_LU
+ chr.pixelwidth += zh->layoutUnitToPixelX( s ); // ### rounding problem, recalculate
+#endif
+ }
+ }
+ }
+ int current=0;
+ int nc=0; // Not double, as we check it against 0 and to avoid gcc warnings
+ KoTextFormat refFormat( *string->at(0).format() ); // we need a ref format, doesn't matter where it comes from
+ for(int i=start;i<=last;++i)
+ {
+ KoTextFormat* format=string->at(i).format();
+ // End of underline
+ if ( (((!format->underline())&&
+ (!format->doubleUnderline())&&
+ (!format->waveUnderline())&&
+ (format->underlineType()!=KoTextFormat::U_SIMPLE_BOLD))
+ || i == last)
+ && nc )
+ {
+ double avg=static_cast<double>(current)/nc;
+ avg/=18.0;
+ // Apply underline width "avg" from i-nc to i
+ refFormat.setUnderLineWidth( avg );
+ parag->setFormat( i-nc, i, &refFormat, true, KoTextFormat::UnderLineWidth );
+ nc=0;
+ current=0;
+ }
+ // Inside underline
+ else if(format->underline()||
+ format->waveUnderline()||
+ format->doubleUnderline()||
+ (format->underlineType() == KoTextFormat::U_SIMPLE_BOLD))
+ {
+ ++nc;
+ current += format->pointSize(); //pointSize() is independent of {Sub,Super}Script in contrast to height()
+ }
+ }
+#if 0
+ if ( last >= 0 && last < string->length() ) {
+ KoTextStringChar &chr = string->at( last );
+ line->w = chr.x + chr.width; //string->width( last );
+ // Add width of hyphen (so that it appears)
+ if ( line->hyphenated )
+ line->w += KoTextZoomHandler::ptToLayoutUnitPt( chr.format()->refFontMetrics().width( QChar(0xad) ) );
+ } else
+ line->w = 0;
+#endif
+
+ ret = new KoTextParagLineStart();
+ }
+
+ // Now calculate and add linespacing
+ const int start = (startChar - &string->at(0));
+ const int last = (lastChar - &string->at(0) );
+ line->lineSpacing = parag->calculateLineSpacing( (int)parag->lineStartList().count()-1, start, last );
+ line->h += line->lineSpacing;
+
+ return ret;
+}
+
+// collects one line of the paragraph and transforms it to visual order
+KoTextParagLineStart *KoTextFormatterCore::koBidiReorderLine(
+ KoTextZoomHandler *zh,
+ KoTextParag * /*parag*/, KoTextString *text, KoTextParagLineStart *line,
+ KoTextStringChar *startChar, KoTextStringChar *lastChar, int align, int space )
+{
+ // This comes from Qt (3.3.x) but seems wrong: the last space is where we draw
+ // the "end of paragraph" sign, so it needs to be correctly positioned too.
+#if 0
+ // ignore white space at the end of the line.
+ int endSpaces = 0;
+ while ( lastChar > startChar && lastChar->whiteSpace ) {
+ space += lastChar->format()->width( ' ' );
+ --lastChar;
+ ++endSpaces;
+ }
+#endif
+
+ int start = (startChar - &text->at(0));
+ int last = (lastChar - &text->at(0) );
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "*KoTextFormatter::koBidiReorderLine from " << start << " to " << last << " space=" << space << " startChar->x=" << startChar->x << endl;
+#endif
+ KoBidiControl *control = new KoBidiControl( line->context(), line->status );
+ QString str;
+ str.setUnicode( 0, last - start + 1 );
+ // fill string with logically ordered chars.
+ KoTextStringChar *ch = startChar;
+ QChar *qch = (QChar *)str.unicode();
+ while ( ch <= lastChar ) {
+ *qch = ch->c;
+ qch++;
+ ch++;
+ }
+ int x = startChar->x;
+
+ QPtrList<KoTextRun> *runs;
+ runs = KoComplexText::bidiReorderLine(control, str, 0, last - start + 1,
+ (text->isRightToLeft() ? QChar::DirR : QChar::DirL) );
+
+ // now construct the reordered string out of the runs...
+
+ int numSpaces = 0;
+ // set the correct alignment. This is a bit messy....
+ if( align == Qt::AlignAuto ) {
+ // align according to directionality of the paragraph...
+ if ( text->isRightToLeft() )
+ align = Qt::AlignRight;
+ }
+
+ if ( align & Qt::AlignHCenter ) {
+ x += space/2;
+ } else if ( align & Qt::AlignRight ) {
+ x += space;
+ } else if ( align & Qt::AlignJustify ) {
+ for ( int j = last - 1; j >= start; --j ) {
+ //// Start at last tab, if any. BR #40472 specifies that justifying should start after the last tab.
+ if ( text->at( j ).c == '\t' ) {
+ start = j+1;
+ break;
+ }
+ if( settings->isStretchable( text, j ) ) {
+ numSpaces++;
+ }
+ }
+ }
+// TODO #ifndef REF_IS_LU or remove
+ int pixelx = zh->layoutUnitToPixelX( x );
+ int toAdd = 0;
+ int toAddPix = 0;
+ bool first = TRUE;
+ KoTextRun *r = runs->first();
+ int xmax = -0xffffff;
+ while ( r ) {
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "koBidiReorderLine level: " << r->level << endl;
+#endif
+ if(r->level %2) {
+ // odd level, need to reverse the string
+ int pos = r->stop + start;
+ while(pos >= r->start + start) {
+ KoTextStringChar &chr = text->at(pos);
+ if( numSpaces && !first && settings->isBreakable( text, pos ) ) {
+ int s = space / numSpaces;
+ toAdd += s;
+ toAddPix = zh->layoutUnitToPixelX( toAdd );
+ space -= s;
+ numSpaces--;
+ chr.width += s;
+ chr.pixelwidth += zh->layoutUnitToPixelX( s ); // ### rounding problem, recalculate
+ } else if ( first ) {
+ first = FALSE;
+ if ( chr.c == ' ' ) // trailing space
+ {
+ //x -= chr.format()->width( ' ' );
+ x -= chr.width;
+ pixelx -= chr.pixelwidth;
+ }
+ }
+ chr.x = x + toAdd;
+ chr.pixelxadj = pixelx + toAddPix - zh->layoutUnitToPixelX( chr.x );
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << "koBidiReorderLine: pos=" << pos << " x(LU)=" << x << " toAdd(LU)=" << toAdd << " -> chr.x=" << chr.x << " pixelx=" << pixelx << "+" << zh->layoutUnitToPixelX( toAdd ) << ", pixelxadj=" << pixelx+zh->layoutUnitToPixelX( toAdd )-zh->layoutUnitToPixelX( chr.x ) << endl;
+#endif
+ chr.rightToLeft = TRUE;
+ chr.startOfRun = FALSE;
+ int ww = chr.width;
+ if ( xmax < x + toAdd + ww ) xmax = x + toAdd + ww;
+ x += ww;
+ pixelx += chr.pixelwidth;
+#ifdef DEBUG_FORMATTER
+ kdDebug(32500) << " ww=" << ww << " adding to x, now " << x << ". pixelwidth=" << chr.pixelwidth << " adding to pixelx, now " << pixelx << " xmax=" << xmax << endl;
+#endif
+ pos--;
+ }
+ } else {
+ int pos = r->start + start;
+ while(pos <= r->stop + start) {
+ KoTextStringChar& chr = text->at(pos);
+ if( numSpaces && !first && settings->isBreakable( text, pos ) ) {
+ int s = space / numSpaces;
+ toAdd += s;
+ toAddPix = zh->layoutUnitToPixelX( toAdd );
+ space -= s;
+ numSpaces--;
+ } else if ( first ) {
+ first = FALSE;
+ if ( chr.c == ' ' ) // trailing space
+ {
+ //x -= chr.format()->width( ' ' );
+ x -= chr.width;
+ pixelx -= chr.pixelwidth;
+ }
+ }
+ chr.x = x + toAdd;
+ chr.pixelxadj = pixelx + toAddPix - zh->layoutUnitToPixelX( chr.x );
+ chr.rightToLeft = FALSE;
+ chr.startOfRun = FALSE;
+ int ww = chr.width;
+ //kdDebug(32500) << "setting char " << pos << " at pos " << chr.x << endl;
+ if ( xmax < x + toAdd + ww ) xmax = x + toAdd + ww;
+ x += ww;
+ pixelx += chr.pixelwidth;
+ pos++;
+ }
+ }
+ text->at( r->start + start ).startOfRun = TRUE;
+ r = runs->next();
+ }
+
+ //line->w = xmax /*+ 10*/; // Why +10 ?
+ KoTextParagLineStart *ls = new KoTextParagLineStart( control->context, control->status );
+ delete control;
+ delete runs;
+ return ls;
+}
+
+void KoTextFormatter::postFormat( KoTextParag* parag )
+{
+ parag->fixParagWidth( viewFormattingChars() );
+}
diff --git a/lib/kotext/KoTextFormatter.h b/lib/kotext/KoTextFormatter.h
new file mode 100644
index 00000000..ad120437
--- /dev/null
+++ b/lib/kotext/KoTextFormatter.h
@@ -0,0 +1,114 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kotextformatter_h
+#define kotextformatter_h
+
+#include "KoRichText.h"
+class KoTextZoomHandler;
+class KoHyphenator;
+
+/**
+ * We implement our own text formatter to implement WYSIWYG:
+ * It is heavily based on KoTextFormatterBaseBreakWords, but stores the x position
+ * of characters (and their width) in pixels, whereas all the rest is in L.U.
+ * It also implements hyphenation.
+ * @author David Faure <faure@kde.org>
+ */
+class KOTEXT_EXPORT KoTextFormatter : public KoTextFormatterBase
+{
+public:
+ KoTextFormatter();
+ virtual ~KoTextFormatter();
+
+ virtual bool format( KoTextDocument *doc, KoTextParag *parag, int start, const QMap<int, KoTextParagLineStart*> &oldLineStarts, int& y, int& widthUsed );
+
+ // Called after formatting a paragraph
+ virtual void postFormat( KoTextParag* parag );
+
+ KoHyphenator* hyphenator() {
+ return m_hyphenator;
+ }
+private:
+ KoHyphenator* m_hyphenator;
+};
+
+// Internal class for KoTextFormatter, holds all the temporary data
+// KoTextFormatter is basically the settings and the algorithm being used
+// KoTextFormatterCore is where the formatting really happens
+class KoTextFormatterCore
+{
+public:
+ KoTextFormatterCore( KoTextFormatter* settings, KoTextDocument *doc, KoTextParag *parag, int start );
+
+ bool format();
+
+ // widthUsed is the width of the wider line (with the current
+ // word-breaking, margins included, but e.g. centering not included).
+ // Unused in KWord currently, this is however used by KPresenter's
+ // "resize object to fit contents" feature.
+ int widthUsed() const { return wused; }
+ int resultY() const { return y; }
+
+protected:
+ // Return ww (in LU) and pixelww (in pixels)
+ // Should be called only once per char
+ QPair<int, int> determineCharWidth();
+
+ KoTextParagLineStart *koFormatLine(
+ KoTextZoomHandler *zh,
+ KoTextParag * /*parag*/, KoTextString *string, KoTextParagLineStart *line,
+ KoTextStringChar *startChar, KoTextStringChar *lastChar, int align, int space );
+
+ KoTextParagLineStart *koBidiReorderLine(
+ KoTextZoomHandler *zh,
+ KoTextParag * /*parag*/, KoTextString *text, KoTextParagLineStart *line,
+ KoTextStringChar *startChar, KoTextStringChar *lastChar, int align, int space );
+
+ void moveChar( KoTextStringChar& chr, KoTextZoomHandler *zh,
+ int deltaX, int deltaPixelX );
+
+ // Total left margin for a given line
+ // Takes into account parag's leftmargin, firstlinemargin and counter,
+ // but not adjustMargins (application hook)
+ int leftMargin( bool firstLine, bool includeFirstLineMargin = true ) const;
+ int rightMargin( bool firstLine ) const;
+
+
+private:
+ KoTextFormatter* settings;
+ KoTextDocument* doc;
+ KoTextParag* parag;
+ int start; // always 0 currently
+ int wused; // see widthUsed
+ int y;
+ int availableWidth;
+ int maxY;
+
+ // When moving a big item down, we might want to rollback
+ // to the 'best position for it' if we can't make it fit anywhere else.
+ QPair<int,int> maxAvailableWidth; // first=y second=available width
+
+ // Information on current char
+ KoTextStringChar *c;
+ int i; // index number (in the paragraph)
+ int x; // X position (in LU)
+};
+
+#endif
diff --git a/lib/kotext/KoTextIterator.cpp b/lib/kotext/KoTextIterator.cpp
new file mode 100644
index 00000000..87a90fb3
--- /dev/null
+++ b/lib/kotext/KoTextIterator.cpp
@@ -0,0 +1,389 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002-2006 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextIterator.h"
+#include "KoTextParag.h"
+#include "KoTextView.h"
+#include <kfinddialog.h>
+#include <kdebug.h>
+#include <assert.h>
+
+//#define DEBUG_ITERATOR
+
+/**
+ * The search direction (forward or backward) is handled in a bit of a tricky way.
+ * m_firstParag/m_firstIndex is where the search starts, whichever the direction
+ * m_lastParag/m_lastIndex is where the search ends, whichever the direction
+ * But the list of textobjects is as given (we assume document order).
+ * So we go from the first to the last textobject, or from the last to the first textobject.
+ */
+
+void KoTextIterator::init( const QValueList<KoTextObject *> & lstObjects, KoTextView* textView, int options )
+{
+ Q_ASSERT( !lstObjects.isEmpty() );
+
+ m_lstObjects.clear();
+ m_firstParag = 0;
+ m_firstIndex = 0;
+ m_options = options;
+
+ // 'From Cursor' option
+ if ( options & KFindDialog::FromCursor )
+ {
+ if ( textView ) {
+ m_firstParag = textView->cursor()->parag();
+ m_firstIndex = textView->cursor()->index();
+ } else {
+ // !? FromCursor option can't work
+ m_options &= ~KFindDialog::FromCursor;
+ kdWarning(32500) << "FromCursor specified, but no textview?" << endl;
+ }
+ } // no else here !
+
+ bool forw = ! ( options & KFindDialog::FindBackwards );
+
+ // 'Selected Text' option
+ if ( textView && ( options & KFindDialog::SelectedText ) )
+ {
+ KoTextObject* textObj = textView->textObject();
+ KoTextCursor c1 = textObj->textDocument()->selectionStartCursor( KoTextDocument::Standard );
+ KoTextCursor c2 = textObj->textDocument()->selectionEndCursor( KoTextDocument::Standard );
+ if ( !m_firstParag ) // not from cursor
+ {
+ m_firstParag = forw ? c1.parag() : c2.parag();
+ m_firstIndex = forw ? c1.index() : c2.index();
+ }
+ m_lastParag = forw ? c2.parag() : c1.parag();
+ m_lastIndex = forw ? c2.index() : c1.index();
+ // Find in the selection only -> only one textobject
+ m_lstObjects.append( textObj );
+ m_currentTextObj = m_lstObjects.begin();
+ }
+ else
+ {
+ // Not "selected text" -> loop through all textobjects
+ m_lstObjects = lstObjects;
+ if ( textView && (options & KFindDialog::FromCursor) )
+ {
+ KoTextObject* initialFirst = m_lstObjects.first();
+ // textView->textObject() should be first in m_lstObjects (last when going backwards) !
+ // Let's ensure this is the case, but without changing the order of the objects.
+ if ( forw ) {
+ while( m_lstObjects.first() != textView->textObject() ) {
+ KoTextObject* textobj = m_lstObjects.front();
+ m_lstObjects.pop_front();
+ m_lstObjects.push_back( textobj );
+ if ( m_lstObjects.first() == initialFirst ) { // safety
+ kdWarning(32500) << "Didn't manage to find " << textView->textObject() << " in the list of textobjects!!!" << endl;
+ break;
+ }
+ }
+ } else {
+ while( m_lstObjects.last() != textView->textObject() ) {
+ KoTextObject* textobj = m_lstObjects.back();
+ m_lstObjects.pop_back();
+ m_lstObjects.push_front( textobj );
+ if ( m_lstObjects.first() == initialFirst ) { // safety
+ kdWarning(32500) << "Didn't manage to find " << textView->textObject() << " in the list of textobjects!!!" << endl;
+ break;
+ }
+ }
+ }
+ }
+
+ KoTextParag* firstParag = m_lstObjects.first()->textDocument()->firstParag();
+ int firstIndex = 0;
+ KoTextParag* lastParag = m_lstObjects.last()->textDocument()->lastParag();
+ int lastIndex = lastParag->length()-1;
+ if ( !m_firstParag ) // only set this when not 'from cursor'.
+ {
+ m_firstParag = forw ? firstParag : lastParag;
+ m_firstIndex = forw ? firstIndex : lastIndex;
+ }
+ // always set the ending point
+ m_lastParag = forw ? lastParag : firstParag;
+ m_lastIndex = forw ? lastIndex : firstIndex;
+ m_currentTextObj = forw ? m_lstObjects.begin() : m_lstObjects.fromLast();
+ }
+
+ assert( *m_currentTextObj ); // all branches set it
+ assert( m_firstParag );
+ assert( m_lastParag );
+ Q_ASSERT( (*m_currentTextObj)->isVisible() );
+ m_currentParag = m_firstParag;
+#ifdef DEBUG_ITERATOR
+ kdDebug(32500) << "KoTextIterator::init from(" << *m_currentTextObj << "," << m_firstParag->paragId() << ") - to(" << (forw?m_lstObjects.last():m_lstObjects.first()) << "," << m_lastParag->paragId() << "), " << m_lstObjects.count() << " textObjects." << endl;
+ QValueList<KoTextObject *>::Iterator it = m_lstObjects.begin();
+ for( ; it != m_lstObjects.end(); ++it )
+ kdDebug(32500) << (*it) << " " << (*it)->name() << endl;
+#endif
+ Q_ASSERT( (*m_currentTextObj)->textDocument() == m_currentParag->textDocument() );
+ Q_ASSERT( (forw?m_lstObjects.last():m_lstObjects.first())->textDocument() == m_lastParag->textDocument() );
+
+ connectTextObjects();
+}
+
+void KoTextIterator::restart()
+{
+ if( m_lstObjects.isEmpty() )
+ return;
+ m_currentParag = m_firstParag;
+ bool forw = ! ( m_options & KFindDialog::FindBackwards );
+ Q_ASSERT( ! (m_options & KFindDialog::FromCursor) ); // doesn't make much sense to keep it, right?
+ if ( (m_options & KFindDialog::FromCursor) || forw )
+ m_currentTextObj = m_lstObjects.begin();
+ else
+ m_currentTextObj = m_lstObjects.fromLast();
+ if ( !(*m_currentTextObj)->isVisible() )
+ nextTextObject();
+#ifdef DEBUG_ITERATOR
+ if ( m_currentParag )
+ kdDebug(32500) << "KoTextIterator::restart from(" << *m_currentTextObj << "," << m_currentParag->paragId() << ") - to(" << (forw?m_lstObjects.last():m_lstObjects.first()) << "," << m_lastParag->paragId() << "), " << m_lstObjects.count() << " textObjects." << endl;
+ else
+ kdDebug(32500) << "KoTextIterator::restart - nowhere to go!" << endl;
+#endif
+}
+
+void KoTextIterator::connectTextObjects()
+{
+ QValueList<KoTextObject *>::Iterator it = m_lstObjects.begin();
+ for( ; it != m_lstObjects.end(); ++it ) {
+ connect( (*it), SIGNAL( paragraphDeleted( KoTextParag* ) ),
+ this, SLOT( slotParagraphDeleted( KoTextParag* ) ) );
+ connect( (*it), SIGNAL( paragraphModified( KoTextParag*, int, int, int ) ),
+ this, SLOT( slotParagraphModified( KoTextParag*, int, int, int ) ) );
+ // We don't connect to destroyed(), because for undo/redo purposes,
+ // we never really delete textdocuments nor textobjects.
+ // So this is never called.
+ // Instead the textobject is simply set to invisible, and this is handled by nextTextObject
+ }
+}
+
+void KoTextIterator::slotParagraphModified( KoTextParag* parag, int modifyType, int pos, int length )
+{
+ if ( parag == m_currentParag )
+ emit currentParagraphModified( modifyType, pos, length );
+}
+
+void KoTextIterator::slotParagraphDeleted( KoTextParag* parag )
+{
+#ifdef DEBUG_ITERATOR
+ kdDebug(32500) << "KoTextIterator::slotParagraphDeleted " << parag << " (" << parag->paragId() << ")" << endl;
+#endif
+ // Note that the direction doesn't matter here. A begin/end
+ // at end of parag N or at beginning of parag N+1 is the same,
+ // and m_firstIndex/m_lastIndex becomes irrelevant, anyway.
+ if ( parag == m_lastParag )
+ {
+ if ( m_lastParag->prev() ) {
+ m_lastParag = m_lastParag->prev();
+ m_lastIndex = m_lastParag->length()-1;
+ } else {
+ m_lastParag = m_lastParag->next();
+ m_lastIndex = 0;
+ }
+ }
+ if ( parag == m_firstParag )
+ {
+ if ( m_firstParag->prev() ) {
+ m_firstParag = m_firstParag->prev();
+ m_firstIndex = m_firstParag->length()-1;
+ } else {
+ m_firstParag = m_firstParag->next();
+ m_firstIndex = 0;
+ }
+ }
+ if ( parag == m_currentParag )
+ {
+ operator++();
+ emit currentParagraphDeleted();
+ }
+#ifdef DEBUG_ITERATOR
+ if ( m_currentParag )
+ kdDebug(32500) << "KoTextIterator: firstParag:" << m_firstParag << " (" << m_firstParag->paragId() << ") - lastParag:" << m_lastParag << " (" << m_lastParag->paragId() << ") m_currentParag:" << m_currentParag << " (" << m_currentParag->paragId() << ")" << endl;
+#endif
+}
+
+// Go to next paragraph that we must iterate over
+void KoTextIterator::operator++()
+{
+ if ( !m_currentParag ) {
+ kdDebug(32500) << k_funcinfo << " called past the end" << endl;
+ return;
+ }
+ if ( m_currentParag == m_lastParag ) {
+ m_currentParag = 0L;
+#ifdef DEBUG_ITERATOR
+ kdDebug(32500) << "KoTextIterator++: done, after last parag " << m_lastParag << endl;
+#endif
+ return;
+ }
+ bool forw = ! ( m_options & KFindDialog::FindBackwards );
+ KoTextParag* parag = forw ? m_currentParag->next() : m_currentParag->prev();
+ if ( parag )
+ {
+ m_currentParag = parag;
+ }
+ else
+ {
+ nextTextObject();
+ }
+#ifdef DEBUG_ITERATOR
+ if ( m_currentParag )
+ kdDebug(32500) << "KoTextIterator++ (" << *m_currentTextObj << "," <<
+ m_currentParag->paragId() << ")" << endl;
+ else
+ kdDebug(32500) << "KoTextIterator++ (at end)" << endl;
+#endif
+}
+
+void KoTextIterator::nextTextObject()
+{
+ bool forw = ! ( m_options & KFindDialog::FindBackwards );
+ do {
+ if ( forw ) {
+ ++m_currentTextObj;
+ if ( m_currentTextObj == m_lstObjects.end() )
+ m_currentParag = 0L; // done
+ else
+ m_currentParag = (*m_currentTextObj)->textDocument()->firstParag();
+ } else {
+ if ( m_currentTextObj == m_lstObjects.begin() )
+ m_currentParag = 0L; // done
+ else
+ {
+ --m_currentTextObj;
+ m_currentParag = (*m_currentTextObj)->textDocument()->lastParag();
+ }
+ }
+ }
+ // loop in case this new textobject is not visible
+ while ( m_currentParag && !(*m_currentTextObj)->isVisible() );
+#ifdef DEBUG_ITERATOR
+ if ( m_currentParag )
+ kdDebug(32500) << k_funcinfo << " m_currentTextObj=" << (*m_currentTextObj) << endl;
+#endif
+}
+
+bool KoTextIterator::atEnd() const
+{
+ // operator++ sets m_currentParag to 0 when it's done
+ return m_currentParag == 0L;
+}
+
+int KoTextIterator::currentStartIndex() const
+{
+ return currentTextAndIndex().first;
+}
+
+QString KoTextIterator::currentText() const
+{
+ return currentTextAndIndex().second;
+}
+
+QPair<int, QString> KoTextIterator::currentTextAndIndex() const
+{
+ Q_ASSERT( m_currentParag );
+ Q_ASSERT( m_currentParag->string() );
+ QString str = m_currentParag->string()->toString();
+ str.truncate( str.length() - 1 ); // remove trailing space
+ bool forw = ! ( m_options & KFindDialog::FindBackwards );
+ if ( m_currentParag == m_firstParag )
+ {
+ if ( m_firstParag == m_lastParag ) // special case, needs truncating at both ends
+ return forw ? qMakePair( m_firstIndex, str.mid( m_firstIndex, m_lastIndex - m_firstIndex ) )
+ : qMakePair( m_lastIndex, str.mid( m_lastIndex, m_firstIndex - m_lastIndex ) );
+ else
+ return forw ? qMakePair( m_firstIndex, str.mid( m_firstIndex ) )
+ : qMakePair( 0, str.left( m_firstIndex ) );
+ }
+ if ( m_currentParag == m_lastParag )
+ {
+ return forw ? qMakePair( 0, str.left( m_lastIndex ) )
+ : qMakePair( m_lastIndex, str.mid( m_lastIndex ) );
+ }
+ // Not the first parag, nor the last, so we return it all
+ return qMakePair( 0, str );
+}
+
+bool KoTextIterator::hasText() const
+{
+ // Same logic as currentTextAndIndex, but w/o calling it, to avoid all the string copying
+ bool forw = ! ( m_options & KFindDialog::FindBackwards );
+ int strLength = m_currentParag->string()->length() - 1;
+ if ( m_currentParag == m_firstParag )
+ {
+ if ( m_firstParag == m_lastParag )
+ return m_firstIndex < m_lastIndex;
+ else
+ return forw ? m_firstIndex < strLength
+ : m_firstIndex > 0;
+ }
+ if ( m_currentParag == m_lastParag )
+ return forw ? m_lastIndex > 0
+ : m_lastIndex < strLength;
+ return strLength > 0;
+}
+
+void KoTextIterator::setOptions( int options )
+{
+ if ( m_options != options )
+ {
+ bool wasBack = (m_options & KFindDialog::FindBackwards);
+ bool isBack = (options & KFindDialog::FindBackwards);
+ if ( wasBack != isBack )
+ {
+ qSwap( m_firstParag, m_lastParag );
+ qSwap( m_firstIndex, m_lastIndex );
+ if ( m_currentParag == 0 ) // done? -> reinit
+ {
+#ifdef DEBUG_ITERATOR
+ kdDebug(32500) << k_funcinfo << "was done -> reinit" << endl;
+#endif
+ restart();
+ }
+ }
+ bool wasFromCursor = (m_options & KFindDialog::FromCursor);
+ bool isFromCursor = (options & KFindDialog::FromCursor);
+ // We can only handle the case where fromcursor got removed.
+ // If it got added, then we need a textview to take the cursor position from...
+ if ( wasFromCursor && !isFromCursor )
+ {
+ // We also can't handle the "selected text" option here
+ // It's very hard to have a cursor that's not at the beginning
+ // or end of the selection, anyway.
+ if ( ! (options & KFindDialog::SelectedText ) )
+ {
+ // Set m_firstParag/m_firstIndex to the beginning of the first object
+ // (end of last object when going backwards)
+ KoTextParag* firstParag = m_lstObjects.first()->textDocument()->firstParag();
+ int firstIndex = 0;
+ KoTextParag* lastParag = m_lstObjects.last()->textDocument()->lastParag();
+ int lastIndex = lastParag->length()-1;
+ m_firstParag = (!isBack) ? firstParag : lastParag;
+ m_firstIndex = (!isBack) ? firstIndex : lastIndex;
+#ifdef DEBUG_ITERATOR
+ kdDebug(32500) << "setOptions: FromCursor removed. New m_firstParag=" << m_firstParag << " (" << m_firstParag->paragId() << ") isBack=" << isBack << endl;
+#endif
+ }
+ }
+ m_options = options;
+ }
+}
+
+#include "KoTextIterator.moc"
diff --git a/lib/kotext/KoTextIterator.h b/lib/kotext/KoTextIterator.h
new file mode 100644
index 00000000..40934a18
--- /dev/null
+++ b/lib/kotext/KoTextIterator.h
@@ -0,0 +1,154 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOTEXTITERATOR_H
+#define KOTEXTITERATOR_H
+
+#include <qvaluelist.h>
+#include <qstring.h>
+#include <qpair.h>
+#include <qobject.h>
+#include <koffice_export.h>
+class KoTextParag;
+class KoTextObject;
+class KoTextView;
+
+/**
+ * A convenient way to iterate over paragraphs, possibly in multiple textobjects,
+ * with many options (from cursor, backwards, in selection).
+ * @short General purpose paragraph iterator
+ */
+class KOTEXT_EXPORT KoTextIterator : public QObject
+{
+ Q_OBJECT
+public:
+ /**
+ * @param lstObjects list of text objects to iterate over
+ * @param textView view in which the objects live
+ * @param options see KFindDialog
+ */
+ KoTextIterator( const QValueList<KoTextObject *> & lstObjects, KoTextView* textView, int options ) {
+ init( lstObjects, textView, options );
+ }
+ void init( const QValueList<KoTextObject *> & lstObjects, KoTextView* textView, int options );
+
+ /**
+ * Restart from the beginning - assumes same parameters given to init
+ */
+ void restart();
+
+ /**
+ * Change options during iteration. ## Not sure how if all cases will be handled :}
+ * At least this is useful for the "Replace All" button during replacing,
+ * and for switching to "FindBackwards" temporarily for "find previous".
+ */
+ void setOptions( int options );
+
+ /**
+ * Return the options currently used by the iterator.
+ */
+ int options() const { return m_options; }
+
+ /**
+ * Go to next paragraph that we must iterate over
+ */
+ void operator++();
+
+ /**
+ * @return true if we have iterated over all paragraphs
+ */
+ bool atEnd() const;
+
+ /**
+ * @return true if currentText() isn't empty. The implementation is
+ * faster than calling currentText().isEmpty() though.
+ */
+ bool hasText() const;
+
+ /**
+ * @return the string at the current position of the iterator
+ */
+ QString currentText() const;
+
+ /**
+ * @return the string at the current position of the iterator
+ */
+ KoTextParag* currentParag() const { return m_currentParag; }
+
+ /**
+ * @return the text object in which @ref currentParag() is.
+ */
+ KoTextObject* currentTextObject() const { return *m_currentTextObj; }
+
+ /**
+ * Where in @ref currentParag() does @ref currentText() start?
+ */
+ int currentStartIndex() const;
+
+ /**
+ * @return the string at the current position of the iterator,
+ * as well as the index in the current paragraph.
+ * Use this instead of separate calls to currentText and currentStartIndex,
+ * for performance reasons.
+ */
+ QPair<int, QString> currentTextAndIndex() const;
+
+signals:
+ /**
+ * Emitted when the current paragraph has been modified by the user.
+ * Apps will often want to call setData again
+ */
+ void currentParagraphModified( int modifyType, int pos, int length );
+
+ /**
+ * Emitted when the current paragraph has been deleted by the user.
+ * When this happens, the iterator automatically moves to the next paragraph (if any).
+ */
+ void currentParagraphDeleted();
+
+protected:
+ void connectTextObjects();
+ void nextTextObject();
+
+protected slots:
+ void slotParagraphDeleted( KoTextParag* parag );
+ void slotParagraphModified( KoTextParag* parag, int /*ParagModifyType*/, int pos, int length );
+
+private:
+ // The reason we use a QValueList of pointers instead of QPtrList
+ // is that having a QPtrListIterator member var can't work, one can't
+ // initialize it afterwards.
+ QValueList<KoTextObject *> m_lstObjects;
+ int m_options;
+
+ // This is relative to the first textobject in m_lstObjects
+ // We always start from this paragraph (even when going backwards)
+ KoTextParag* m_firstParag;
+ int m_firstIndex;
+
+ // This is relative to the last textobject in m_lstObjects
+ // We're done when we hit this paragraph
+ KoTextParag* m_lastParag;
+ int m_lastIndex;
+
+ // Our current position
+ QValueList<KoTextObject *>::Iterator m_currentTextObj;
+ KoTextParag* m_currentParag;
+};
+
+#endif
diff --git a/lib/kotext/KoTextObject.cpp b/lib/kotext/KoTextObject.cpp
new file mode 100644
index 00000000..3ff03216
--- /dev/null
+++ b/lib/kotext/KoTextObject.cpp
@@ -0,0 +1,2809 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2006 David Faure <faure@kde.org>
+ Copyright (C) 2005 Martin Ellis <martin.ellis@kdemail.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextObject.h"
+#include "KoTextParag.h"
+#include "KoParagCounter.h"
+#include "KoTextZoomHandler.h"
+#include "KoTextCommand.h"
+#include "KoStyleCollection.h"
+#include "KoFontDia.h"
+#include "KoOasisContext.h"
+#include "KoVariable.h"
+#include "KoAutoFormat.h"
+#include <KoXmlNS.h>
+#include <KoDom.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kapplication.h>
+
+#include <qtimer.h>
+#include <qregexp.h>
+#include <qprogressdialog.h>
+
+#include <assert.h>
+
+//#define DEBUG_FORMATS
+//#define DEBUG_FORMAT_MORE
+
+const char KoTextObject::s_customItemChar = '#'; // Has to be transparent to kspell but still be saved (not space)
+
+struct KoTextObject::KoTextObjectPrivate
+{
+public:
+ KoTextObjectPrivate() {
+ afterFormattingEmitted = false;
+ abortFormatting = false;
+ }
+ bool afterFormattingEmitted;
+ bool abortFormatting;
+};
+
+KoTextObject::KoTextObject( KoTextZoomHandler *zh, const QFont& defaultFont,
+ const QString &defaultLanguage, bool hyphenation,
+ KoParagStyle* defaultStyle, int tabStopWidth,
+ QObject* parent, const char *name )
+ : QObject( parent, name ), m_defaultStyle( defaultStyle ), undoRedoInfo( this )
+{
+ textdoc = new KoTextDocument( zh, new KoTextFormatCollection( defaultFont, QColor(),defaultLanguage, hyphenation ) );
+ if ( tabStopWidth != -1 )
+ textdoc->setTabStops( tabStopWidth );
+ init();
+}
+
+KoTextObject::KoTextObject( KoTextDocument* _textdoc, KoParagStyle* defaultStyle,
+ QObject* parent, const char *name )
+ : QObject( parent, name ), m_defaultStyle( defaultStyle ), undoRedoInfo( this )
+{
+ textdoc = _textdoc;
+ init();
+}
+
+void KoTextObject::init()
+{
+ d = new KoTextObjectPrivate;
+ m_needsSpellCheck = true;
+ m_protectContent = false;
+ m_visible=true;
+ m_availableHeight = -1;
+ m_lastFormatted = textdoc->firstParag();
+ m_highlightSelectionAdded = false;
+ interval = 0;
+ changeIntervalTimer = new QTimer( this );
+ connect( changeIntervalTimer, SIGNAL( timeout() ),
+ this, SLOT( doChangeInterval() ) );
+
+ formatTimer = new QTimer( this );
+ connect( formatTimer, SIGNAL( timeout() ),
+ this, SLOT( formatMore() ) );
+
+ // Apply default style to initial paragraph
+ if ( m_lastFormatted && m_defaultStyle )
+ m_lastFormatted->applyStyle( m_defaultStyle );
+
+ connect( textdoc, SIGNAL( paragraphDeleted( KoTextParag* ) ),
+ this, SIGNAL( paragraphDeleted( KoTextParag* ) ) );
+ connect( textdoc, SIGNAL( paragraphDeleted( KoTextParag* ) ),
+ this, SLOT( slotParagraphDeleted( KoTextParag* ) ) );
+ connect( textdoc, SIGNAL( newCommand( KCommand* ) ),
+ this, SIGNAL( newCommand( KCommand* ) ) );
+ connect( textdoc, SIGNAL( repaintChanged() ),
+ this, SLOT( emitRepaintChanged() ) );
+
+ connect( this, SIGNAL(paragraphModified( KoTextParag*, int, int , int ) ),
+ this, SLOT(slotParagraphModified(KoTextParag *, int, int , int)));
+ connect( this, SIGNAL(paragraphCreated( KoTextParag* )),
+ this, SLOT(slotParagraphCreated(KoTextParag *)));
+}
+
+KoTextObject::~KoTextObject()
+{
+ // Avoid crash in KoTextString::clear -> accessing deleted format collection,
+ // if ~UndoRedoInfo still has a string to clear.
+ undoRedoInfo.clear();
+ delete textdoc; textdoc = 0;
+ delete d;
+}
+
+int KoTextObject::availableHeight() const
+{
+ if ( m_availableHeight == -1 )
+ emit const_cast<KoTextObject *>(this)->availableHeightNeeded();
+ Q_ASSERT( m_availableHeight != -1 );
+ return m_availableHeight;
+}
+
+void KoTextObject::slotParagraphModified(KoTextParag * /*parag*/, int /*ParagModifyType*/ _type, int , int)
+{
+ if ( _type == ChangeFormat)
+ return;
+ m_needsSpellCheck = true;
+}
+
+void KoTextObject::slotParagraphCreated(KoTextParag * /*parag*/)
+{
+ m_needsSpellCheck = true;
+}
+
+void KoTextObject::slotParagraphDeleted(KoTextParag * parag)
+{
+ if ( m_lastFormatted == parag )
+ m_lastFormatted = parag->next();
+
+ // ### TODO: remove from kwbgspellcheck
+ // not needed, since KoTextIterator takes care of that.
+}
+
+int KoTextObject::docFontSize( KoTextFormat * format ) const
+{
+ Q_ASSERT( format );
+ return format->pointSize();
+}
+
+int KoTextObject::zoomedFontSize( int docFontSize ) const
+{
+ kdDebug(32500) << "KoTextObject::zoomedFontSize: docFontSize=" << docFontSize
+ << " - in LU: " << KoTextZoomHandler::ptToLayoutUnitPt( docFontSize ) << endl;
+ return KoTextZoomHandler::ptToLayoutUnitPt( docFontSize );
+}
+
+// A visitor that looks for custom items in e.g. a selection
+class KoHasCustomItemVisitor : public KoParagVisitor
+{
+public:
+ KoHasCustomItemVisitor() : KoParagVisitor() { }
+ // returns false when cancelled, i.e. an item was _found_, and true if it proceeded to the end(!)
+ virtual bool visit( KoTextParag *parag, int start, int end )
+ {
+ for ( int i = start ; i < end ; ++i )
+ {
+ KoTextStringChar * ch = parag->at( i );
+ if ( ch->isCustom() )
+ return false; // found one -> stop here
+ }
+ return true;
+ }
+};
+
+bool KoTextObject::selectionHasCustomItems( KoTextDocument::SelectionId selectionId ) const
+{
+ KoHasCustomItemVisitor visitor;
+ bool noneFound = textdoc->visitSelection( selectionId, &visitor );
+ return !noneFound;
+}
+
+void KoTextObject::slotAfterUndoRedo()
+{
+ formatMore( 2 );
+ emit repaintChanged( this );
+ emit updateUI( true );
+ emit showCursor();
+ emit ensureCursorVisible();
+}
+
+void KoTextObject::clearUndoRedoInfo()
+{
+ undoRedoInfo.clear();
+}
+
+
+void KoTextObject::checkUndoRedoInfo( KoTextCursor * cursor, UndoRedoInfo::Type t )
+{
+ if ( undoRedoInfo.valid() && ( t != undoRedoInfo.type || cursor != undoRedoInfo.cursor ) ) {
+ undoRedoInfo.clear();
+ }
+ undoRedoInfo.type = t;
+ undoRedoInfo.cursor = cursor;
+}
+
+void KoTextObject::undo()
+{
+ undoRedoInfo.clear();
+ emit hideCursor();
+ KoTextCursor *cursor = new KoTextCursor( textdoc ); // Kindof a dummy cursor
+ KoTextCursor *c = textdoc->undo( cursor );
+ if ( !c ) {
+ delete cursor;
+ emit showCursor();
+ return;
+ }
+ // We have to set this new cursor position in all views :(
+ // It sucks a bit for useability, but otherwise one view might still have
+ // a cursor inside a deleted paragraph -> crash.
+ emit setCursor( c );
+ setLastFormattedParag( textdoc->firstParag() );
+ delete cursor;
+ QTimer::singleShot( 0, this, SLOT( slotAfterUndoRedo() ) );
+}
+
+void KoTextObject::redo()
+{
+ undoRedoInfo.clear();
+ emit hideCursor();
+ KoTextCursor *cursor = new KoTextCursor( textdoc ); // Kindof a dummy cursor
+ KoTextCursor *c = textdoc->redo( cursor );
+ if ( !c ) {
+ delete cursor;
+ emit showCursor();
+ return;
+ }
+ emit setCursor( c ); // see undo
+ setLastFormattedParag( textdoc->firstParag() );
+ delete cursor;
+ QTimer::singleShot( 0, this, SLOT( slotAfterUndoRedo() ) );
+}
+
+KoTextObject::UndoRedoInfo::UndoRedoInfo( KoTextObject *to )
+ : type( Invalid ), textobj(to), cursor( 0 )
+{
+ text = QString::null;
+ id = -1;
+ index = -1;
+ placeHolderCmd = 0L;
+}
+
+bool KoTextObject::UndoRedoInfo::valid() const
+{
+ return text.length() > 0 && id >= 0 && index >= 0 && type != Invalid;
+}
+
+void KoTextObject::UndoRedoInfo::clear()
+{
+ if ( valid() ) {
+ KoTextDocument* textdoc = textobj->textDocument();
+ switch (type) {
+ case Insert:
+ case Return:
+ {
+ KoTextDocCommand * cmd = new KoTextInsertCommand( textdoc, id, index, text.rawData(), customItemsMap, oldParagLayouts );
+ textdoc->addCommand( cmd );
+ Q_ASSERT( placeHolderCmd );
+ if ( placeHolderCmd ) // crash prevention
+ {
+ // Inserting any custom items -> macro command, to let custom items add their command
+ if ( !customItemsMap.isEmpty() )
+ {
+ CustomItemsMap::Iterator it = customItemsMap.begin();
+ for ( ; it != customItemsMap.end(); ++it )
+ {
+ KoTextCustomItem * item = it.data();
+ KCommand * itemCmd = item->createCommand();
+ if ( itemCmd )
+ placeHolderCmd->addCommand( itemCmd );
+ }
+ placeHolderCmd->addCommand( new KoTextCommand( textobj, /*cmd, */QString::null ) );
+ }
+ else
+ {
+ placeHolderCmd->addCommand( new KoTextCommand( textobj, /*cmd, */QString::null ) );
+ }
+ }
+ } break;
+ case Delete:
+ case RemoveSelected:
+ {
+ KoTextDocCommand * cmd = textobj->deleteTextCommand( textdoc, id, index, text.rawData(), customItemsMap, oldParagLayouts );
+ textdoc->addCommand( cmd );
+ Q_ASSERT( placeHolderCmd );
+ placeHolderCmd->addCommand( new KoTextCommand( textobj, /*cmd, */QString::null ) );
+ // Deleting any custom items -> let them add their command
+ if ( !customItemsMap.isEmpty() )
+ {
+ customItemsMap.deleteAll( placeHolderCmd );
+ }
+ } break;
+ case Invalid:
+ break;
+ }
+ }
+ type = Invalid;
+ // Before Qt-3.2.0, this called KoTextString::clear(), which called resize(0) on the array, which _detached_. Tricky.
+ // Since Qt-3.2.0, resize(0) doesn't detach anymore -> KoTextDocDeleteCommand calls copy() itself.
+ text = QString::null;
+ id = -1;
+ index = -1;
+ oldParagLayouts.clear();
+ customItemsMap.clear();
+ placeHolderCmd = 0;
+}
+
+void KoTextObject::copyCharFormatting( KoTextParag *parag, int position, int index /*in text*/, bool moveCustomItems )
+{
+ KoTextStringChar * ch = parag->at( position );
+ if ( ch->format() ) {
+ ch->format()->addRef();
+ undoRedoInfo.text.at( index ).setFormat( ch->format() );
+ }
+ if ( ch->isCustom() )
+ {
+ kdDebug(32500) << "KoTextObject::copyCharFormatting moving custom item " << ch->customItem() << " to text's " << index << " char" << endl;
+ undoRedoInfo.customItemsMap.insert( index, ch->customItem() );
+ // We copy the custom item to customItemsMap in all cases (see setFormat)
+ // We only remove from 'ch' if moveCustomItems was specified
+ if ( moveCustomItems )
+ parag->removeCustomItem(position);
+ //ch->loseCustomItem();
+ }
+}
+
+// Based on QTextView::readFormats - with all code duplication moved to copyCharFormatting
+void KoTextObject::readFormats( KoTextCursor &c1, KoTextCursor &c2, bool copyParagLayouts, bool moveCustomItems )
+{
+ //kdDebug(32500) << "KoTextObject::readFormats moveCustomItems=" << moveCustomItems << endl;
+ int oldLen = undoRedoInfo.text.length();
+ if ( c1.parag() == c2.parag() ) {
+ undoRedoInfo.text += c1.parag()->string()->toString().mid( c1.index(), c2.index() - c1.index() );
+ for ( int i = c1.index(); i < c2.index(); ++i )
+ copyCharFormatting( c1.parag(), i, oldLen + i - c1.index(), moveCustomItems );
+ } else {
+ int lastIndex = oldLen;
+ int i;
+ //kdDebug(32500) << "KoTextObject::readFormats copying from " << c1.index() << " to " << c1.parag()->length()-1 << " into lastIndex=" << lastIndex << endl;
+ // Replace the trailing spaces with '\n'. That char carries the formatting for the trailing space.
+ undoRedoInfo.text += c1.parag()->string()->toString().mid( c1.index(), c1.parag()->length() - 1 - c1.index() ) + '\n';
+ for ( i = c1.index(); i < c1.parag()->length(); ++i, ++lastIndex )
+ copyCharFormatting( c1.parag(), i, lastIndex, moveCustomItems );
+ //++lastIndex; // skip the '\n'.
+ KoTextParag *p = c1.parag()->next();
+ while ( p && p != c2.parag() ) {
+ undoRedoInfo.text += p->string()->toString().left( p->length() - 1 ) + '\n';
+ //kdDebug(32500) << "KoTextObject::readFormats (mid) copying from 0 to " << p->length()-1 << " into i+" << lastIndex << endl;
+ for ( i = 0; i < p->length(); ++i )
+ copyCharFormatting( p, i, i + lastIndex, moveCustomItems );
+ lastIndex += p->length(); // + 1; // skip the '\n'
+ //kdDebug(32500) << "KoTextObject::readFormats lastIndex now " << lastIndex << " - text is now " << undoRedoInfo.text.toString() << endl;
+ p = p->next();
+ }
+ //kdDebug(32500) << "KoTextObject::readFormats copying [last] from 0 to " << c2.index() << " into i+" << lastIndex << endl;
+ undoRedoInfo.text += c2.parag()->string()->toString().left( c2.index() );
+ for ( i = 0; i < c2.index(); ++i )
+ copyCharFormatting( c2.parag(), i, i + lastIndex, moveCustomItems );
+ }
+
+ if ( copyParagLayouts ) {
+ KoTextParag *p = c1.parag();
+ while ( p ) {
+ undoRedoInfo.oldParagLayouts << p->paragLayout();
+ if ( p == c2.parag() )
+ break;
+ p = p->next();
+ }
+ }
+}
+
+void KoTextObject::newPlaceHolderCommand( const QString & name )
+{
+ Q_ASSERT( !undoRedoInfo.placeHolderCmd );
+ if ( undoRedoInfo.placeHolderCmd ) kdDebug(32500) << kdBacktrace();
+ undoRedoInfo.placeHolderCmd = new KMacroCommand( name );
+ emit newCommand( undoRedoInfo.placeHolderCmd );
+}
+
+void KoTextObject::storeParagUndoRedoInfo( KoTextCursor * cursor, KoTextDocument::SelectionId selectionId )
+{
+ undoRedoInfo.clear();
+ undoRedoInfo.oldParagLayouts.clear();
+ undoRedoInfo.text = " ";
+ undoRedoInfo.index = 1;
+ if ( cursor && !textdoc->hasSelection( selectionId, true ) ) {
+ KoTextParag * p = cursor->parag();
+ undoRedoInfo.id = p->paragId();
+ undoRedoInfo.eid = p->paragId();
+ undoRedoInfo.oldParagLayouts << p->paragLayout();
+ }
+ else{
+ Q_ASSERT( textdoc->hasSelection( selectionId, true ) );
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+ undoRedoInfo.id = start->paragId();
+ undoRedoInfo.eid = end->paragId();
+ for ( ; start && start != end->next() ; start = start->next() )
+ {
+ undoRedoInfo.oldParagLayouts << start->paragLayout();
+ //kdDebug(32500) << "KoTextObject:storeParagUndoRedoInfo storing counter " << start->paragLayout().counter.counterType << endl;
+ }
+ }
+}
+
+void KoTextObject::doKeyboardAction( KoTextCursor * cursor, KoTextFormat * & /*currentFormat*/, KeyboardAction action )
+{
+ KoTextParag * parag = cursor->parag();
+ setLastFormattedParag( parag );
+ emit hideCursor();
+ bool doUpdateCurrentFormat = true;
+ switch ( action ) {
+ case ActionDelete: {
+ checkUndoRedoInfo( cursor, UndoRedoInfo::Delete );
+ if ( !undoRedoInfo.valid() ) {
+ newPlaceHolderCommand( i18n("Delete Text") );
+ undoRedoInfo.id = parag->paragId();
+ undoRedoInfo.index = cursor->index();
+ undoRedoInfo.text = QString::null;
+ undoRedoInfo.oldParagLayouts << parag->paragLayout();
+ }
+ if ( !cursor->atParagEnd() )
+ {
+ KoTextStringChar * ch = parag->at( cursor->index() );
+ undoRedoInfo.text += ch->c;
+ copyCharFormatting( parag, cursor->index(), undoRedoInfo.text.length()-1, true );
+ }
+ KoParagLayout paragLayout;
+ if ( parag->next() )
+ paragLayout = parag->next()->paragLayout();
+
+ KoTextParag *old = cursor->parag();
+ if ( cursor->remove() ) {
+ if ( old != cursor->parag() && m_lastFormatted == old ) // 'old' has been deleted
+ m_lastFormatted = cursor->parag() ? cursor->parag()->prev() : 0;
+ undoRedoInfo.text += "\n";
+ undoRedoInfo.oldParagLayouts << paragLayout;
+ } else
+ emit paragraphModified( old, RemoveChar, cursor->index(), 1 );
+ } break;
+ case ActionBackspace: {
+ // Remove counter
+ if ( parag->counter() && parag->counter()->style() != KoParagCounter::STYLE_NONE && cursor->index() == 0 ) {
+ // parag->decDepth(); // We don't have support for nested lists at the moment
+ // (only in titles, but you don't want Backspace to move it up)
+ KoParagCounter c;
+ c.setDepth( parag->counter()->depth() );
+ KCommand *cmd=setCounterCommand( cursor, c );
+ if(cmd)
+ emit newCommand(cmd);
+ }
+ else if ( !cursor->atParagStart() )
+ {
+ checkUndoRedoInfo( cursor, UndoRedoInfo::Delete );
+ if ( !undoRedoInfo.valid() ) {
+ newPlaceHolderCommand( i18n("Delete Text") );
+ undoRedoInfo.id = parag->paragId();
+ undoRedoInfo.index = cursor->index();
+ undoRedoInfo.text = QString::null;
+ undoRedoInfo.oldParagLayouts << parag->paragLayout();
+ }
+ undoRedoInfo.text.insert( 0, cursor->parag()->at( cursor->index()-1 ) );
+ copyCharFormatting( cursor->parag(), cursor->index()-1, 0, true );
+ undoRedoInfo.index = cursor->index()-1;
+ //KoParagLayout paragLayout = cursor->parag()->paragLayout();
+ cursor->removePreviousChar();
+ emit paragraphModified( cursor->parag(), RemoveChar, cursor->index(),1 );
+ m_lastFormatted = cursor->parag();
+ } else if ( parag->prev() ) { // joining paragraphs
+ emit paragraphDeleted( cursor->parag() );
+ clearUndoRedoInfo();
+ textdoc->setSelectionStart( KoTextDocument::Temp, cursor );
+ cursor->gotoPreviousLetter();
+ textdoc->setSelectionEnd( KoTextDocument::Temp, cursor );
+ removeSelectedText( cursor, KoTextDocument::Temp, i18n( "Delete Text" ) );
+ emit paragraphModified( cursor->parag(), AddChar, cursor->index(), cursor->parag()->length() - cursor->index() );
+ }
+ } break;
+ case ActionReturn: {
+ checkUndoRedoInfo( cursor, UndoRedoInfo::Return );
+ if ( !undoRedoInfo.valid() ) {
+ newPlaceHolderCommand( i18n("Insert Text") );
+ undoRedoInfo.id = cursor->parag()->paragId();
+ undoRedoInfo.index = cursor->index();
+ undoRedoInfo.text = QString::null;
+ }
+ undoRedoInfo.text += "\n";
+ if ( cursor->parag() )
+ {
+ QString last_line = cursor->parag()->toString();
+ last_line.remove(0,last_line.find(' ')+1);
+
+ if( last_line.isEmpty() && cursor->parag()->counter() && cursor->parag()->counter()->numbering() == KoParagCounter::NUM_LIST ) //if the previous line the in paragraph is empty
+ {
+ KoParagCounter c;
+ KCommand *cmd=setCounterCommand( cursor, c );
+ if(cmd)
+ emit newCommand(cmd);
+ setLastFormattedParag( cursor->parag() );
+ cursor->parag()->setNoCounter();
+
+ formatMore( 2 );
+ emit repaintChanged( this );
+ emit ensureCursorVisible();
+ emit showCursor();
+ emit updateUI( doUpdateCurrentFormat );
+ return;
+ }
+ else
+ cursor->splitAndInsertEmptyParag();
+ }
+
+ Q_ASSERT( cursor->parag()->prev() );
+ setLastFormattedParag( cursor->parag() );
+
+ doUpdateCurrentFormat = false;
+ KoParagStyle * style = cursor->parag()->prev()->style();
+ if ( style )
+ {
+ KoParagStyle * newStyle = style->followingStyle();
+ if ( newStyle && style != newStyle ) // different "following style" applied
+ {
+ doUpdateCurrentFormat = true;
+ //currentFormat = textdoc->formatCollection()->format( cursor->parag()->paragFormat() );
+ //kdDebug(32500) << "KoTextFrameSet::doKeyboardAction currentFormat=" << currentFormat << " " << currentFormat->key() << endl;
+ }
+ }
+ if ( cursor->parag()->joinBorder() && cursor->parag()->bottomBorder().width() > 0 )
+ cursor->parag()->prev()->setChanged( true );
+ if ( cursor->parag()->joinBorder() && cursor->parag()->next() && cursor->parag()->next()->joinBorder() && cursor->parag()->bottomBorder() == cursor->parag()->next()->bottomBorder())
+ cursor->parag()->next()->setChanged( true );
+ emit paragraphCreated( cursor->parag() );
+
+ } break;
+ case ActionKill:
+ // Nothing to kill if at end of very last paragraph
+ if ( !cursor->atParagEnd() || cursor->parag()->next() ) {
+ checkUndoRedoInfo( cursor, UndoRedoInfo::Delete );
+ if ( !undoRedoInfo.valid() ) {
+ newPlaceHolderCommand( i18n("Delete Text") );
+ undoRedoInfo.id = cursor->parag()->paragId();
+ undoRedoInfo.index = cursor->index();
+ undoRedoInfo.text = QString::null;
+ undoRedoInfo.oldParagLayouts << parag->paragLayout();
+ }
+ if ( cursor->atParagEnd() ) {
+ // Get paraglayout from next parag (next can't be 0 here)
+ KoParagLayout paragLayout = parag->next()->paragLayout();
+ if ( cursor->remove() )
+ {
+ m_lastFormatted = cursor->parag();
+ undoRedoInfo.text += "\n";
+ undoRedoInfo.oldParagLayouts << paragLayout;
+ }
+ } else {
+ int oldLen = undoRedoInfo.text.length();
+ undoRedoInfo.text += cursor->parag()->string()->toString().mid( cursor->index() );
+ for ( int i = cursor->index(); i < cursor->parag()->length(); ++i )
+ copyCharFormatting( cursor->parag(), i, oldLen + i - cursor->index(), true );
+ cursor->killLine();
+ emit paragraphModified( cursor->parag(), RemoveChar, cursor->index(), cursor->parag()->length()-cursor->index() );
+ }
+ }
+ break;
+ }
+
+ if ( !undoRedoInfo.customItemsMap.isEmpty() )
+ clearUndoRedoInfo();
+
+ formatMore( 2 );
+ emit repaintChanged( this );
+ emit ensureCursorVisible();
+ emit showCursor();
+ emit updateUI( doUpdateCurrentFormat );
+}
+
+void KoTextObject::insert( KoTextCursor * cursor, KoTextFormat * currentFormat,
+ const QString &txt, const QString & commandName, KoTextDocument::SelectionId selectionId,
+ int insertFlags, CustomItemsMap customItemsMap )
+{
+ if ( protectContent() )
+ return;
+ const bool checkNewLine = insertFlags & CheckNewLine;
+ const bool removeSelected = ( insertFlags & DoNotRemoveSelected ) == 0;
+ const bool repaint = ( insertFlags & DoNotRepaint ) == 0;
+ //kdDebug(32500) << "KoTextObject::insert txt=" << txt << endl;
+ bool tinyRepaint = !checkNewLine;
+ if ( repaint )
+ emit hideCursor();
+ if ( textdoc->hasSelection( selectionId, true ) && removeSelected ) {
+ kdDebug() << k_funcinfo << "removing selection " << selectionId << endl;
+ // call replaceSelectionCommand, which will call insert() back, but this time without a selection.
+ emitNewCommand(replaceSelectionCommand( cursor, txt, commandName, selectionId, insertFlags, customItemsMap ));
+ return;
+ }
+ // Now implement overwrite mode, similarly.
+ if ( insertFlags & OverwriteMode ) {
+ textdoc->setSelectionStart( KoTextDocument::Temp, cursor );
+ KoTextCursor oc = *cursor;
+ kdDebug(32500) << "overwrite: going to insert " << txt.length() << " chars; idx=" << oc.index() << endl;
+ oc.setIndex( QMIN( oc.index() + (int)txt.length(), oc.parag()->lastCharPos() + 1 ) );
+ kdDebug(32500) << "overwrite: removing from " << cursor->index() << " to " << oc.index() << endl;
+ if ( oc.index() > cursor->index() )
+ {
+ textdoc->setSelectionEnd( KoTextDocument::Temp, &oc );
+ int newInsertFlags = insertFlags & ~OverwriteMode;
+ newInsertFlags &= ~DoNotRemoveSelected;
+ emitNewCommand(replaceSelectionCommand( cursor, txt, commandName, KoTextDocument::Temp, newInsertFlags, customItemsMap ));
+ return;
+ }
+ }
+ KoTextCursor c2 = *cursor;
+ // Make everything ready for undo/redo (new command, or add to current one)
+ if ( !customItemsMap.isEmpty() )
+ clearUndoRedoInfo();
+ checkUndoRedoInfo( cursor, UndoRedoInfo::Insert );
+ if ( !undoRedoInfo.valid() ) {
+ if ( !commandName.isNull() ) // see replace-selection
+ newPlaceHolderCommand( commandName );
+ undoRedoInfo.id = cursor->parag()->paragId();
+ undoRedoInfo.index = cursor->index();
+ undoRedoInfo.text = QString::null;
+ }
+ int oldLen = undoRedoInfo.text.length();
+ KoTextCursor oldCursor = *cursor;
+ bool wasChanged = cursor->parag()->hasChanged();
+ int origLine; // the line the cursor was on before the insert
+ oldCursor.parag()->lineStartOfChar( oldCursor.index(), 0, &origLine );
+
+ // insert the text - finally!
+ cursor->insert( txt, checkNewLine );
+
+ setLastFormattedParag( checkNewLine ? oldCursor.parag() : cursor->parag() );
+
+ if ( !customItemsMap.isEmpty() ) {
+ customItemsMap.insertItems( oldCursor, txt.length() );
+ undoRedoInfo.customItemsMap = customItemsMap;
+ tinyRepaint = false;
+ }
+
+ textdoc->setSelectionStart( KoTextDocument::Temp, &oldCursor );
+ textdoc->setSelectionEnd( KoTextDocument::Temp, cursor );
+ //kdDebug(32500) << "KoTextObject::insert setting format " << currentFormat << endl;
+ textdoc->setFormat( KoTextDocument::Temp, currentFormat, KoTextFormat::Format );
+ textdoc->setFormat( KoTextDocument::InputMethodPreedit, currentFormat, KoTextFormat::Format );
+ textdoc->removeSelection( KoTextDocument::Temp );
+
+ if ( !customItemsMap.isEmpty() ) {
+ // Some custom items (e.g. variables) depend on the format
+ CustomItemsMap::Iterator it = customItemsMap.begin();
+ for ( ; it != customItemsMap.end(); ++it )
+ it.data()->resize();
+ }
+
+ // Speed optimization: if we only type a char, and it doesn't
+ // invalidate the next parag, only format the current one
+ // ### This idea is wrong. E.g. when the last parag grows and must create a new page.
+#if 0
+ KoTextParag *parag = cursor->parag();
+ if ( !checkNewLine && m_lastFormatted == parag && ( !parag->next() || parag->next()->isValid() ) )
+ {
+ parag->format();
+ m_lastFormatted = m_lastFormatted->next();
+ }
+#endif
+ // Call formatMore until necessary. This will create new pages if needed.
+ // Doing this here means callers don't have to do it, and cursor can be positionned correctly.
+ ensureFormatted( cursor->parag() );
+
+ // Speed optimization: if we only type a char, only repaint from current line
+ // (In fact the one before. When typing a space, a word could move up to the
+ // line before, we need to repaint it too...)
+ if ( !checkNewLine && tinyRepaint && !wasChanged )
+ {
+ // insert() called format() which called setChanged().
+ // We're reverting that, and calling setLineChanged() only.
+ Q_ASSERT( cursor->parag() == oldCursor.parag() ); // no newline!
+ KoTextParag* parag = cursor->parag();
+ // If the new char led to a new line,
+ // the wordwrap could have changed on the line above
+ // This is why we use origLine and not calling lineStartOfChar here.
+ parag->setChanged( false );
+ parag->setLineChanged( origLine - 1 ); // if origLine=0, it'll pass -1, which is 'all'
+ }
+
+ if ( repaint ) {
+ emit repaintChanged( this );
+ emit ensureCursorVisible();
+ emit showCursor();
+ // we typed the first char of a paragraph in AlignAuto mode -> show correct alignment in UI
+ if ( oldCursor.index() == 0 && oldCursor.parag()->alignment() == Qt::AlignAuto )
+ emit updateUI( true );
+
+ }
+ undoRedoInfo.text += txt;
+ for ( int i = 0; i < (int)txt.length(); ++i ) {
+ if ( txt[ oldLen + i ] != '\n' )
+ copyCharFormatting( c2.parag(), c2.index(), oldLen + i, false );
+ c2.gotoNextLetter();
+ }
+
+ if ( !removeSelected ) {
+ // ## not sure why we do this. I'd prefer leaving the selection unchanged...
+ // but then it'd need adjustements in the offsets etc.
+ if ( textdoc->removeSelection( selectionId ) && repaint )
+ selectionChangedNotify(); // does the repaint
+ }
+ if ( !customItemsMap.isEmpty()
+ && !commandName.isNull() /* see replace-selection; #139890 */ ) {
+ clearUndoRedoInfo();
+ }
+
+ // Notifications
+ emit paragraphModified( oldCursor.parag(), AddChar, cursor->index(), txt.length() );
+ if (checkNewLine) {
+ KoTextParag* p = oldCursor.parag()->next();
+ while ( p && p != cursor->parag() ) {
+ emit paragraphCreated( p );
+ p = p->next();
+ }
+ }
+}
+
+void KoTextObject::pasteText( KoTextCursor * cursor, const QString & text, KoTextFormat * currentFormat, bool removeSelected )
+{
+ if ( protectContent() )
+ return;
+ kdDebug(32500) << "KoTextObject::pasteText cursor parag=" << cursor->parag()->paragId() << endl;
+ QString t = text;
+ // Need to convert CRLF to NL
+ QRegExp crlf( QString::fromLatin1("\r\n") );
+ t.replace( crlf, QChar('\n') );
+ // Convert non-printable chars
+ for ( int i=0; (uint) i<t.length(); i++ ) {
+ if ( t[ i ] < ' ' && t[ i ] != '\n' && t[ i ] != '\t' )
+ t[ i ] = ' ';
+ }
+ if ( !t.isEmpty() )
+ {
+ int insertFlags = CheckNewLine;
+ if ( !removeSelected )
+ insertFlags |= DoNotRemoveSelected;
+ insert( cursor, currentFormat, t, i18n("Paste Text"),
+ KoTextDocument::Standard, insertFlags );
+ formatMore( 2 );
+ emit repaintChanged( this );
+ }
+}
+
+KCommand* KoTextObject::setParagLayoutCommand( KoTextCursor * cursor, const KoParagLayout& paragLayout,
+ KoTextDocument::SelectionId selectionId, int paragLayoutFlags,
+ int marginIndex, bool createUndoRedo )
+{
+ if ( protectContent() )
+ return 0;
+ storeParagUndoRedoInfo( cursor, selectionId );
+ undoRedoInfo.type = UndoRedoInfo::Invalid; // tricky, we don't want clear() to create a command
+ if ( paragLayoutFlags != 0 )
+ {
+ emit hideCursor();
+ if ( !textdoc->hasSelection( selectionId, true ) ) {
+ cursor->parag()->setParagLayout( paragLayout, paragLayoutFlags, marginIndex );
+ setLastFormattedParag( cursor->parag() );
+ } else {
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+ for ( ; start && start != end->next() ; start = start->next() ) {
+ if ( paragLayoutFlags == KoParagLayout::BulletNumber && start->length() <= 1 )
+ continue; // don't apply to empty paragraphs (#25742, #34062)
+ start->setParagLayout( paragLayout, paragLayoutFlags, marginIndex );
+ }
+ setLastFormattedParag( start );
+ }
+
+ formatMore( 2 );
+ emit repaintChanged( this );
+ emit showCursor();
+ emit updateUI( true );
+
+ if ( createUndoRedo )
+ {
+ //kdDebug(32500) << "KoTextObject::applyStyle KoTextParagCommand" << endl;
+ KoTextDocCommand * cmd = new KoTextParagCommand( textdoc, undoRedoInfo.id, undoRedoInfo.eid,
+ undoRedoInfo.oldParagLayouts,
+ paragLayout, paragLayoutFlags,
+ (QStyleSheetItem::Margin)marginIndex );
+ textdoc->addCommand( cmd );
+ return new KoTextCommand( this, /*cmd, */"related to KoTextParagCommand" );
+ }
+ }
+ return 0;
+}
+
+
+void KoTextObject::applyStyle( KoTextCursor * cursor, const KoParagStyle * newStyle,
+ KoTextDocument::SelectionId selectionId,
+ int paragLayoutFlags, int formatFlags,
+ bool createUndoRedo, bool interactive )
+{
+ KCommand *cmd = applyStyleCommand( cursor, newStyle, selectionId,
+ paragLayoutFlags, formatFlags,
+ createUndoRedo, interactive );
+ if ( createUndoRedo && cmd )
+ emit newCommand( cmd );
+ else
+ Q_ASSERT( !cmd ); // mem leak, if applyStyleCommand created a command despite createUndoRedo==false!
+}
+
+KCommand *KoTextObject::applyStyleCommand( KoTextCursor * cursor, const KoParagStyle * newStyle,
+ KoTextDocument::SelectionId selectionId,
+ int paragLayoutFlags, int formatFlags,
+ bool createUndoRedo, bool interactive )
+{
+ if ( protectContent())
+ return 0L;
+ if ( interactive )
+ emit hideCursor();
+ if ( !textdoc->hasSelection( selectionId, true ) && !cursor)
+ return 0L;
+ /// Applying a style is three distinct operations :
+ /// 1 - Changing the paragraph settings (setParagLayout)
+ /// 2 - Changing the character formatting for each char in the paragraph (setFormat(indices))
+ /// 3 - Changing the character formatting for the whole paragraph (setFormat()) [just in case]
+ /// -> We need a macro command to hold the 3 commands
+ KMacroCommand * macroCmd = createUndoRedo ? new KMacroCommand( i18n("Apply Style %1").
+ arg(newStyle->displayName() ) ) : 0;
+
+ // 1
+ //kdDebug(32500) << "KoTextObject::applyStyle setParagLayout" << endl;
+ KCommand* cmd = setParagLayoutCommand( cursor, newStyle->paragLayout(), selectionId, paragLayoutFlags, -1, createUndoRedo );
+ if ( cmd )
+ macroCmd->addCommand( cmd );
+
+ // 2
+ //kdDebug(32500) << "KoTextObject::applyStyle gathering text and formatting" << endl;
+ KoTextParag * firstParag;
+ KoTextParag * lastParag;
+ if ( !textdoc->hasSelection( selectionId, true ) ) {
+ // No selection -> apply style formatting to the whole paragraph
+ firstParag = cursor->parag();
+ lastParag = cursor->parag();
+ }
+ else
+ {
+ firstParag = textdoc->selectionStart( selectionId );
+ lastParag = textdoc->selectionEnd( selectionId );
+ }
+
+ if ( formatFlags != 0 )
+ {
+ KoTextFormat * newFormat = textdoc->formatCollection()->format( &newStyle->format() );
+
+ if ( createUndoRedo )
+ {
+ QValueList<KoTextFormat *> lstFormats;
+ //QString str;
+ for ( KoTextParag * parag = firstParag ; parag && parag != lastParag->next() ; parag = parag->next() )
+ {
+ //str += parag->string()->toString() + '\n';
+ lstFormats.append( parag->paragFormat() );
+ }
+ KoTextCursor c1( textdoc );
+ c1.setParag( firstParag );
+ c1.setIndex( 0 );
+ KoTextCursor c2( textdoc );
+ c2.setParag( lastParag );
+ c2.setIndex( lastParag->string()->length() );
+ undoRedoInfo.clear();
+ undoRedoInfo.type = UndoRedoInfo::Invalid; // same trick
+ readFormats( c1, c2 ); // gather char-format info but not paraglayouts nor customitems
+
+ KoTextDocCommand * cmd = new KoTextFormatCommand( textdoc, firstParag->paragId(), 0,
+ lastParag->paragId(), c2.index(),
+ undoRedoInfo.text.rawData(), newFormat,
+ formatFlags );
+ textdoc->addCommand( cmd );
+ macroCmd->addCommand( new KoTextCommand( this, /*cmd, */"related to KoTextFormatCommand" ) );
+
+ // sub-command for '3' (paragFormat)
+ cmd = new KoParagFormatCommand( textdoc, firstParag->paragId(), lastParag->paragId(),
+ lstFormats, newFormat );
+ textdoc->addCommand( cmd );
+ macroCmd->addCommand( new KoTextCommand( this, /*cmd, */"related to KoParagFormatCommand" ) );
+ }
+
+ // apply '2' and '3' (format)
+ for ( KoTextParag * parag = firstParag ; parag && parag != lastParag->next() ; parag = parag->next() )
+ {
+ //kdDebug(32500) << "KoTextObject::applyStyle parag:" << parag->paragId()
+ // << ", from 0 to " << parag->string()->length() << ", format=" << newFormat << endl;
+ parag->setFormat( 0, parag->string()->length(), newFormat, true, formatFlags );
+ parag->setFormat( newFormat );
+ }
+ //currentFormat = textdoc->formatCollection()->format( newFormat );
+ //kdDebug(32500) << "KoTextObject::applyStyle currentFormat=" << currentFormat << " " << currentFormat->key() << endl;
+ }
+
+ //resize all variables after applying the style
+ QPtrListIterator<KoTextCustomItem> cit( textdoc->allCustomItems() );
+ for ( ; cit.current() ; ++cit )
+ cit.current()->resize();
+
+
+ if ( interactive )
+ {
+ setLastFormattedParag( firstParag );
+ formatMore( 2 );
+ emit repaintChanged( this );
+ emit updateUI( true );
+ emit showCursor();
+ }
+
+ undoRedoInfo.clear();
+
+ return macroCmd;
+}
+
+void KoTextObject::applyStyleChange( KoStyleChangeDefMap changed )
+{
+#if 0 //#ifndef NDEBUG
+ kdDebug(32500) << "KoTextObject::applyStyleChange " << changed.count() << " styles." << endl;
+ for( KoStyleChangeDefMap::const_iterator it = changed.begin(); it != changed.end(); ++it ) {
+ kdDebug(32500) << " " << it.key()->name()
+ << " paragLayoutChanged=" << (*it).paragLayoutChanged
+ << " formatChanged=" << (*it).formatChanged
+ << endl;
+ }
+#endif
+
+ KoTextParag *p = textdoc->firstParag();
+ while ( p ) {
+ KoStyleChangeDefMap::Iterator it = changed.find( p->style() );
+ if ( it != changed.end() )
+ {
+ if ( (*it).paragLayoutChanged == -1 || (*it).formatChanged == -1 ) // Style has been deleted
+ {
+ p->setStyle( m_defaultStyle ); // keeps current formatting
+ // TODO, make this undoable somehow
+ }
+ else
+ {
+ // Apply this style again, to get the changes
+ KoTextCursor cursor( textdoc );
+ cursor.setParag( p );
+ cursor.setIndex( 0 );
+ //kdDebug(32500) << "KoTextObject::applyStyleChange applying to paragraph " << p << " " << p->paragId() << endl;
+ applyStyle( &cursor, it.key(),
+ KoTextDocument::Temp, // A selection we can't have at this point
+ (*it).paragLayoutChanged, (*it).formatChanged,
+ false, false ); // don't create undo/redo, not interactive
+ }
+ } else {
+ //kdDebug(32500) << "KoTextObject::applyStyleChange leaving paragraph unchanged: " << p << " " << p->paragId() << endl;
+ }
+
+ p = p->next();
+ }
+ setLastFormattedParag( textdoc->firstParag() );
+ formatMore( 2 );
+ emit repaintChanged( this );
+ emit updateUI( true );
+}
+
+/** Implementation of setFormatCommand from KoTextFormatInterface - apply change to the whole document */
+KCommand *KoTextObject::setFormatCommand( const KoTextFormat *format, int flags, bool zoomFont )
+{
+ textdoc->selectAll( KoTextDocument::Temp );
+ KCommand *cmd = setFormatCommand( 0L, 0L, format, flags, zoomFont, KoTextDocument::Temp );
+ textdoc->removeSelection( KoTextDocument::Temp );
+ return cmd;
+}
+
+KCommand * KoTextObject::setFormatCommand( KoTextCursor * cursor, KoTextFormat ** pCurrentFormat, const KoTextFormat *format, int flags, bool /*zoomFont*/, KoTextDocument::SelectionId selectionId )
+{
+ KCommand *ret = 0;
+ if ( protectContent() )
+ return ret;
+
+ KoTextFormat* newFormat = 0;
+ // Get new format from collection if
+ // - caller has notion of a "current format" and new format is different
+ // - caller has no notion of "current format", e.g. whole textobjects
+ bool isNewFormat = ( pCurrentFormat && *pCurrentFormat && (*pCurrentFormat)->key() != format->key() );
+ if ( isNewFormat || !pCurrentFormat )
+ {
+#if 0
+ int origFontSize = 0;
+ if ( zoomFont ) // The format has a user-specified font (e.g. setting a style, or a new font size)
+ {
+ origFontSize = format->pointSize();
+ format->setPointSize( zoomedFontSize( origFontSize ) );
+ //kdDebug(32500) << "KoTextObject::setFormatCommand format " << format->key() << " zoomed from " << origFontSize << " to " << format->font().pointSizeFloat() << endl;
+ }
+#endif
+ // Remove ref to current format, if caller wanted that
+ if ( pCurrentFormat )
+ (*pCurrentFormat)->removeRef();
+ // Find format in collection
+ newFormat = textdoc->formatCollection()->format( format );
+ if ( newFormat->isMisspelled() ) {
+ KoTextFormat fNoMisspelled( *newFormat );
+ newFormat->removeRef();
+ fNoMisspelled.setMisspelled( false );
+ newFormat = textdoc->formatCollection()->format( &fNoMisspelled );
+ }
+ if ( pCurrentFormat )
+ (*pCurrentFormat) = newFormat;
+ }
+
+ if ( textdoc->hasSelection( selectionId, true ) ) {
+ emit hideCursor();
+ KoTextCursor c1 = textdoc->selectionStartCursor( selectionId );
+ KoTextCursor c2 = textdoc->selectionEndCursor( selectionId );
+ undoRedoInfo.clear();
+ int id = c1.parag()->paragId();
+ int index = c1.index();
+ int eid = c2.parag()->paragId();
+ int eindex = c2.index();
+ readFormats( c1, c2 ); // read previous formatting info
+ //kdDebug(32500) << "KoTextObject::setFormatCommand undoredo info done" << endl;
+ textdoc->setFormat( selectionId, format, flags );
+ if ( !undoRedoInfo.customItemsMap.isEmpty() )
+ {
+ // Some custom items (e.g. variables) depend on the format
+ CustomItemsMap::Iterator it = undoRedoInfo.customItemsMap.begin();
+ for ( ; it != undoRedoInfo.customItemsMap.end(); ++it )
+ it.data()->resize();
+ }
+ KoTextFormatCommand *cmd = new KoTextFormatCommand(
+ textdoc, id, index, eid, eindex, undoRedoInfo.text.rawData(),
+ format, flags );
+ textdoc->addCommand( cmd );
+ ret = new KoTextCommand( this, /*cmd, */i18n("Format Text") );
+ undoRedoInfo.clear();
+ setLastFormattedParag( c1.parag() );
+ formatMore( 2 );
+ emit repaintChanged( this );
+ emit showCursor();
+ }
+ if ( isNewFormat ) {
+ emit showCurrentFormat();
+ //kdDebug(32500) << "KoTextObject::setFormatCommand index=" << cursor->index() << " length-1=" << cursor->parag()->length() - 1 << endl;
+ if ( cursor && cursor->index() == cursor->parag()->length() - 1 ) {
+ newFormat->addRef();
+ cursor->parag()->string()->setFormat( cursor->index(), newFormat, TRUE );
+ if ( cursor->parag()->length() == 1 ) {
+ newFormat->addRef();
+ cursor->parag()->setFormat( newFormat );
+ cursor->parag()->invalidate(0);
+ cursor->parag()->format();
+ emit repaintChanged( this );
+ }
+ }
+ }
+ return ret;
+}
+
+void KoTextObject::setFormat( KoTextCursor * cursor, KoTextFormat ** currentFormat, KoTextFormat *format, int flags, bool zoomFont )
+{
+ if ( protectContent() )
+ return;
+ KCommand *cmd = setFormatCommand( cursor, currentFormat, format, flags, zoomFont );
+ if (cmd)
+ emit newCommand( cmd );
+}
+
+void KoTextObject::emitNewCommand(KCommand *cmd)
+{
+ if(cmd)
+ emit newCommand( cmd );
+}
+
+KCommand *KoTextObject::setCounterCommand( KoTextCursor * cursor, const KoParagCounter & counter, KoTextDocument::SelectionId selectionId )
+{
+ if ( protectContent() )
+ return 0L;
+ const KoParagCounter * curCounter = 0L;
+ if(cursor)
+ curCounter=cursor->parag()->counter();
+ if ( !textdoc->hasSelection( selectionId, true ) &&
+ curCounter && counter == *curCounter ) {
+ return 0L;
+ }
+ emit hideCursor();
+ storeParagUndoRedoInfo( cursor, selectionId );
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor) {
+ cursor->parag()->setCounter( counter );
+ setLastFormattedParag( cursor->parag() );
+ } else {
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+#if 0
+ // Special hack for BR25742, don't apply bullet to last empty parag of the selection
+ if ( start != end && end->length() <= 1 )
+ {
+ end = end->prev();
+ undoRedoInfo.eid = end->paragId();
+ }
+#endif
+ setLastFormattedParag( start );
+ for ( ; start && start != end->next() ; start = start->next() )
+ {
+ if ( start->length() > 1 ) // don't apply to empty paragraphs (#25742, #34062)
+ start->setCounter( counter );
+ }
+ }
+ formatMore( 2 );
+ emit repaintChanged( this );
+ if ( !undoRedoInfo.newParagLayout.counter )
+ undoRedoInfo.newParagLayout.counter = new KoParagCounter;
+ *undoRedoInfo.newParagLayout.counter = counter;
+ KoTextParagCommand *cmd = new KoTextParagCommand(
+ textdoc, undoRedoInfo.id, undoRedoInfo.eid,
+ undoRedoInfo.oldParagLayouts, undoRedoInfo.newParagLayout,
+ KoParagLayout::BulletNumber );
+ textdoc->addCommand( cmd );
+
+ undoRedoInfo.clear(); // type is still Invalid -> no command created
+ emit showCursor();
+ emit updateUI( true );
+ return new KoTextCommand( this, /*cmd, */i18n("Change List Type") );
+}
+
+KCommand * KoTextObject::setAlignCommand( KoTextCursor * cursor, int align, KoTextDocument::SelectionId selectionId )
+{
+ if ( protectContent() )
+ return 0L;
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor &&
+ (int)cursor->parag()->alignment() == align )
+ return 0L; // No change needed.
+
+ emit hideCursor();
+ storeParagUndoRedoInfo( cursor ,selectionId );
+ if ( !textdoc->hasSelection( selectionId, true ) &&cursor ) {
+ cursor->parag()->setAlign(align);
+ setLastFormattedParag( cursor->parag() );
+ }
+ else
+ {
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+ setLastFormattedParag( start );
+ for ( ; start && start != end->next() ; start = start->next() )
+ start->setAlign(align);
+ }
+ formatMore( 2 );
+ emit repaintChanged( this );
+ undoRedoInfo.newParagLayout.alignment = align;
+ KoTextParagCommand *cmd = new KoTextParagCommand(
+ textdoc, undoRedoInfo.id, undoRedoInfo.eid,
+ undoRedoInfo.oldParagLayouts, undoRedoInfo.newParagLayout,
+ KoParagLayout::Alignment );
+ textdoc->addCommand( cmd );
+ undoRedoInfo.clear(); // type is still Invalid -> no command created
+ emit showCursor();
+ emit updateUI( true );
+ return new KoTextCommand( this, /*cmd, */i18n("Change Alignment") );
+}
+
+KCommand * KoTextObject::setMarginCommand( KoTextCursor * cursor, QStyleSheetItem::Margin m, double margin , KoTextDocument::SelectionId selectionId ) {
+ if ( protectContent() )
+ return 0L;
+
+ //kdDebug(32500) << "KoTextObject::setMargin " << m << " to value " << margin << endl;
+ //kdDebug(32500) << "Current margin is " << cursor->parag()->margin(m) << endl;
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor &&
+ cursor->parag()->margin(m) == margin )
+ return 0L; // No change needed.
+
+ emit hideCursor();
+ storeParagUndoRedoInfo( cursor, selectionId );
+ if ( !textdoc->hasSelection( selectionId, true )&&cursor ) {
+ cursor->parag()->setMargin(m, margin);
+ setLastFormattedParag( cursor->parag() );
+ }
+ else
+ {
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+ setLastFormattedParag( start );
+ for ( ; start && start != end->next() ; start = start->next() )
+ start->setMargin(m, margin);
+ }
+ formatMore( 2 );
+ emit repaintChanged( this );
+ undoRedoInfo.newParagLayout.margins[m] = margin;
+ KoTextParagCommand *cmd = new KoTextParagCommand(
+ textdoc, undoRedoInfo.id, undoRedoInfo.eid,
+ undoRedoInfo.oldParagLayouts, undoRedoInfo.newParagLayout,
+ KoParagLayout::Margins, m );
+ textdoc->addCommand( cmd );
+ QString name;
+ if ( m == QStyleSheetItem::MarginFirstLine )
+ name = i18n("Change First Line Indent");
+ else if ( m == QStyleSheetItem::MarginLeft || m == QStyleSheetItem::MarginRight )
+ name = i18n("Change Indent");
+ else
+ name = i18n("Change Paragraph Spacing");
+ undoRedoInfo.clear();
+ emit showCursor();
+ emit updateUI( true );
+ return new KoTextCommand( this, /*cmd, */name );
+}
+
+KCommand * KoTextObject::setBackgroundColorCommand( KoTextCursor * cursor,
+ const QColor & color,
+ KoTextDocument::SelectionId selectionId ) {
+ if ( protectContent() )
+ return 0L;
+
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor &&
+ cursor->parag()->backgroundColor() == color )
+ return 0L; // No change needed.
+
+ emit hideCursor();
+ storeParagUndoRedoInfo( cursor, selectionId );
+ if ( !textdoc->hasSelection( selectionId, true )&&cursor )
+ {
+ // Update a single paragraph
+ cursor->parag()->setBackgroundColor(color);
+ setLastFormattedParag( cursor->parag() );
+ }
+ else
+ {
+ // Update multiple paragraphs
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+ setLastFormattedParag( start );
+ for ( ; start && start != end->next() ; start = start->next() )
+ start->setBackgroundColor(color);
+ }
+ formatMore( 2 );
+ emit repaintChanged( this );
+
+ // Update undo/redo info
+ undoRedoInfo.newParagLayout.backgroundColor = color;
+ KoTextParagCommand *cmd = new KoTextParagCommand(
+ textdoc, undoRedoInfo.id, undoRedoInfo.eid,
+ undoRedoInfo.oldParagLayouts, undoRedoInfo.newParagLayout,
+ KoParagLayout::BackgroundColor );
+ textdoc->addCommand( cmd );
+ undoRedoInfo.clear();
+
+ emit showCursor();
+ emit updateUI( true );
+ return new KoTextCommand( this, /*cmd, */ i18n("Change Paragraph Background Color" ) );
+}
+
+KCommand * KoTextObject::setLineSpacingCommand( KoTextCursor * cursor, double spacing, KoParagLayout::SpacingType _type, KoTextDocument::SelectionId selectionId )
+{
+ if ( protectContent() )
+ return 0L;
+ //kdDebug(32500) << "KoTextObject::setLineSpacing to value " << spacing << endl;
+ //kdDebug(32500) << "Current spacing is " << cursor->parag()->kwLineSpacing() << endl;
+ //kdDebug(32500) << "Comparison says " << ( cursor->parag()->kwLineSpacing() == spacing ) << endl;
+ //kdDebug(32500) << "hasSelection " << textdoc->hasSelection( selectionId ) << endl;
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor &&
+ cursor->parag()->kwLineSpacing() == spacing
+ && cursor->parag()->kwLineSpacingType() == _type)
+ return 0L; // No change needed.
+
+ emit hideCursor();
+ storeParagUndoRedoInfo( cursor, selectionId );
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor ) {
+ cursor->parag()->setLineSpacing(spacing);
+ cursor->parag()->setLineSpacingType( _type);
+ setLastFormattedParag( cursor->parag() );
+ }
+ else
+ {
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+ setLastFormattedParag( start );
+ for ( ; start && start != end->next() ; start = start->next() )
+ {
+ start->setLineSpacing(spacing);
+ start->setLineSpacingType( _type);
+ }
+ }
+ formatMore( 2 );
+ emit repaintChanged( this );
+ undoRedoInfo.newParagLayout.setLineSpacingValue( spacing );
+ undoRedoInfo.newParagLayout.lineSpacingType = _type;
+ KoTextParagCommand *cmd = new KoTextParagCommand(
+ textdoc, undoRedoInfo.id, undoRedoInfo.eid,
+ undoRedoInfo.oldParagLayouts, undoRedoInfo.newParagLayout,
+ KoParagLayout::LineSpacing );
+ textdoc->addCommand( cmd );
+
+ undoRedoInfo.clear();
+ emit showCursor();
+ return new KoTextCommand( this, /*cmd, */i18n("Change Line Spacing") );
+}
+
+
+KCommand * KoTextObject::setBordersCommand( KoTextCursor * cursor, const KoBorder& leftBorder, const KoBorder& rightBorder, const KoBorder& topBorder, const KoBorder& bottomBorder , KoTextDocument::SelectionId selectionId )
+{
+ if ( protectContent() )
+ return 0L;
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor &&
+ cursor->parag()->leftBorder() ==leftBorder &&
+ cursor->parag()->rightBorder() ==rightBorder &&
+ cursor->parag()->topBorder() ==topBorder &&
+ cursor->parag()->bottomBorder() ==bottomBorder )
+ return 0L; // No change needed.
+
+ emit hideCursor();
+ storeParagUndoRedoInfo( cursor, selectionId );
+ if ( !textdoc->hasSelection( selectionId, true ) ) {
+ cursor->parag()->setLeftBorder(leftBorder);
+ cursor->parag()->setRightBorder(rightBorder);
+ cursor->parag()->setBottomBorder(bottomBorder);
+ cursor->parag()->setTopBorder(topBorder);
+ setLastFormattedParag( cursor->parag() );
+
+ if ( cursor->parag()->next() )
+ cursor->parag()->next()->setChanged( true );
+ if ( cursor->parag()->prev() )
+ cursor->parag()->prev()->setChanged( true );
+ }
+ else
+ {
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+ setLastFormattedParag( start );
+ for ( ; start && start != end->next() ; start = start->next() )
+ {
+ start->setLeftBorder(leftBorder);
+ start->setRightBorder(rightBorder);
+ start->setTopBorder(topBorder);
+ start->setBottomBorder(bottomBorder);
+ }
+ textdoc->selectionStart( selectionId )->setTopBorder(topBorder);
+
+ if ( start && start->prev() )
+ start->prev()->setChanged( true );
+ if ( end && end->next() )
+ end->next()->setChanged( true );
+ }
+ formatMore( 2 );
+ emit repaintChanged( this );
+ undoRedoInfo.newParagLayout.leftBorder=leftBorder;
+ undoRedoInfo.newParagLayout.rightBorder=rightBorder;
+ undoRedoInfo.newParagLayout.topBorder=topBorder;
+ undoRedoInfo.newParagLayout.bottomBorder=bottomBorder;
+
+ KoTextParagCommand *cmd = new KoTextParagCommand(
+ textdoc, undoRedoInfo.id, undoRedoInfo.eid,
+ undoRedoInfo.oldParagLayouts, undoRedoInfo.newParagLayout,
+ KoParagLayout::Borders, (QStyleSheetItem::Margin)-1 );
+ textdoc->addCommand( cmd );
+
+ undoRedoInfo.clear();
+ emit showCursor();
+ emit updateUI( true );
+ return new KoTextCommand( this, /*cmd, */i18n("Change Borders") );
+}
+
+KCommand * KoTextObject::setJoinBordersCommand( KoTextCursor * cursor, bool join, KoTextDocument::SelectionId selectionId )
+{
+ if ( protectContent() )
+ return 0L;
+ if ( !textdoc->hasSelection( selectionId, true ) &&
+ cursor && cursor->parag()->joinBorder() == join )
+ return 0L; // No change needed.
+
+ emit hideCursor();
+ storeParagUndoRedoInfo( cursor, KoTextDocument::Standard );
+ if ( !textdoc->hasSelection( selectionId, true ) )
+ {
+ cursor->parag()->setJoinBorder( join );
+ setLastFormattedParag( cursor->parag() );
+
+ if ( cursor->parag()->next() )
+ cursor->parag()->next()->setChanged( true );
+ if ( cursor->parag()->prev() )
+ cursor->parag()->prev()->setChanged( true );
+ }
+ else
+ {
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+ setLastFormattedParag( start );
+ for ( ; start && start != end->next() ; start = start->next() )
+ {
+ start->setJoinBorder( true );
+ }
+ end->setJoinBorder ( true );
+
+ if ( start && start->prev() )
+ start->prev()->setChanged( true );
+ if ( end && end->next() )
+ end->next()->setChanged( true );
+ }
+ formatMore( 2 );
+
+ emit repaintChanged( this );
+ undoRedoInfo.newParagLayout.joinBorder=join;
+
+ KoTextParagCommand *cmd = new KoTextParagCommand(
+ textdoc, undoRedoInfo.id, undoRedoInfo.eid,
+ undoRedoInfo.oldParagLayouts, undoRedoInfo.newParagLayout,
+ KoParagLayout::Borders, (QStyleSheetItem::Margin)-1 );
+ textdoc->addCommand( cmd );
+
+ undoRedoInfo.clear();
+ emit ensureCursorVisible();
+ emit showCursor();
+ emit updateUI( true );
+ return new KoTextCommand( this, /*cmd, */i18n("Change Join Borders") );
+}
+
+
+KCommand * KoTextObject::setTabListCommand( KoTextCursor * cursor, const KoTabulatorList &tabList, KoTextDocument::SelectionId selectionId )
+{
+ if ( protectContent() )
+ return 0L;
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor &&
+ cursor->parag()->tabList() == tabList )
+ return 0L; // No change needed.
+
+ emit hideCursor();
+ storeParagUndoRedoInfo( cursor, selectionId );
+
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor ) {
+ cursor->parag()->setTabList( tabList );
+ setLastFormattedParag( cursor->parag() );
+ }
+ else
+ {
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+ setLastFormattedParag( start );
+ for ( ; start && start != end->next() ; start = start->next() )
+ start->setTabList( tabList );
+ }
+
+ formatMore( 2 );
+ emit repaintChanged( this );
+ undoRedoInfo.newParagLayout.setTabList( tabList );
+ KoTextParagCommand *cmd = new KoTextParagCommand(
+ textdoc, undoRedoInfo.id, undoRedoInfo.eid,
+ undoRedoInfo.oldParagLayouts, undoRedoInfo.newParagLayout,
+ KoParagLayout::Tabulator);
+ textdoc->addCommand( cmd );
+ undoRedoInfo.clear();
+ emit showCursor();
+ emit updateUI( true );
+ return new KoTextCommand( this, /*cmd, */i18n("Change Tabulator") );
+}
+
+KCommand * KoTextObject::setParagDirectionCommand( KoTextCursor * cursor, QChar::Direction d, KoTextDocument::SelectionId selectionId )
+{
+ if ( protectContent() )
+ return 0L;
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor &&
+ cursor->parag()->direction() == d )
+ return 0L; // No change needed.
+
+ emit hideCursor();
+ storeParagUndoRedoInfo( cursor, selectionId );
+
+ if ( !textdoc->hasSelection( selectionId, true ) && cursor ) {
+ cursor->parag()->setDirection( d );
+ setLastFormattedParag( cursor->parag() );
+ }
+ else
+ {
+ KoTextParag *start = textdoc->selectionStart( selectionId );
+ KoTextParag *end = textdoc->selectionEnd( selectionId );
+ setLastFormattedParag( start );
+ for ( ; start && start != end->next() ; start = start->next() )
+ start->setDirection( d );
+ }
+
+ formatMore( 2 );
+ emit repaintChanged( this );
+ ////// ### TODO
+#if 0
+ undoRedoInfo.newParagLayout.direction = d;
+ KoTextParagCommand *cmd = new KoTextParagCommand(
+ textdoc, undoRedoInfo.id, undoRedoInfo.eid,
+ undoRedoInfo.oldParagLayouts, undoRedoInfo.newParagLayout,
+ KoParagLayout::Shadow);
+ textdoc->addCommand( cmd );
+#endif
+ undoRedoInfo.clear();
+ emit showCursor();
+ emit updateUI( true );
+#if 0
+ return new KoTextCommand( this, /*cmd, */i18n("Change Shadow") );
+#else
+ return 0L;
+#endif
+}
+
+void KoTextObject::removeSelectedText( KoTextCursor * cursor, KoTextDocument::SelectionId selectionId, const QString & cmdName, bool createUndoRedo )
+{
+ if ( protectContent() )
+ return ;
+ emit hideCursor();
+ if( createUndoRedo)
+ {
+ checkUndoRedoInfo( cursor, UndoRedoInfo::RemoveSelected );
+ if ( !undoRedoInfo.valid() ) {
+ textdoc->selectionStart( selectionId, undoRedoInfo.id, undoRedoInfo.index );
+ undoRedoInfo.text = QString::null;
+ newPlaceHolderCommand( cmdName.isNull() ? i18n("Remove Selected Text") : cmdName );
+ }
+ }
+ KoTextCursor c1 = textdoc->selectionStartCursor( selectionId );
+ KoTextCursor c2 = textdoc->selectionEndCursor( selectionId );
+ readFormats( c1, c2, true, true );
+ //kdDebug(32500) << "KoTextObject::removeSelectedText text=" << undoRedoInfo.text.toString() << endl;
+
+ textdoc->removeSelectedText( selectionId, cursor );
+
+ setLastFormattedParag( cursor->parag() );
+ formatMore( 2 );
+ emit repaintChanged( this );
+ emit ensureCursorVisible();
+ emit updateUI( true );
+ emit showCursor();
+ if(selectionId==KoTextDocument::Standard || selectionId==KoTextDocument::InputMethodPreedit)
+ selectionChangedNotify();
+ if ( createUndoRedo)
+ undoRedoInfo.clear();
+}
+
+KCommand * KoTextObject::removeSelectedTextCommand( KoTextCursor * cursor, KoTextDocument::SelectionId selectionId, bool repaint )
+{
+ if ( protectContent() )
+ return 0L;
+ if ( !textdoc->hasSelection( selectionId, true ) )
+ return 0L;
+
+ undoRedoInfo.clear();
+ textdoc->selectionStart( selectionId, undoRedoInfo.id, undoRedoInfo.index );
+ Q_ASSERT( undoRedoInfo.id >= 0 );
+
+ KoTextCursor c1 = textdoc->selectionStartCursor( selectionId );
+ KoTextCursor c2 = textdoc->selectionEndCursor( selectionId );
+ readFormats( c1, c2, true, true );
+
+ textdoc->removeSelectedText( selectionId, cursor );
+
+ KMacroCommand *macroCmd = new KMacroCommand( i18n("Remove Selected Text") );
+
+ KoTextDocCommand *cmd = deleteTextCommand( textdoc, undoRedoInfo.id, undoRedoInfo.index,
+ undoRedoInfo.text.rawData(),
+ undoRedoInfo.customItemsMap,
+ undoRedoInfo.oldParagLayouts );
+ textdoc->addCommand(cmd);
+ macroCmd->addCommand(new KoTextCommand( this, /*cmd, */QString::null ));
+
+ if(!undoRedoInfo.customItemsMap.isEmpty())
+ undoRedoInfo.customItemsMap.deleteAll( macroCmd );
+
+ undoRedoInfo.type = UndoRedoInfo::Invalid; // we don't want clear() to create a command
+ undoRedoInfo.clear();
+ if ( repaint )
+ selectionChangedNotify();
+ return macroCmd;
+}
+
+KCommand* KoTextObject::replaceSelectionCommand( KoTextCursor * cursor, const QString & replacement,
+ const QString & cmdName,
+ KoTextDocument::SelectionId selectionId,
+ int insertFlags,
+ CustomItemsMap customItemsMap )
+{
+ if ( protectContent() )
+ return 0L;
+ Q_ASSERT( ( insertFlags & DoNotRemoveSelected ) == 0 ); // nonsensical
+ const bool repaint = ( insertFlags & DoNotRepaint ) == 0; // DoNotRepaint is set during search/replace
+ if ( repaint )
+ emit hideCursor();
+ // This could be improved to use a macro command only when there's a selection to remove.
+ KMacroCommand * macroCmd = new KMacroCommand( cmdName );
+
+ // Remember formatting
+ KoTextCursor c1 = textdoc->selectionStartCursor( selectionId );
+ KoTextFormat * format = c1.parag()->at( c1.index() )->format();
+ format->addRef();
+
+ // Remove selected text, if any
+ KCommand* removeSelCmd = removeSelectedTextCommand( cursor, selectionId, repaint );
+ if ( removeSelCmd )
+ macroCmd->addCommand( removeSelCmd );
+
+ // Insert replacement
+ insert( cursor, format,
+ replacement, QString::null /* no place holder command */,
+ selectionId, insertFlags | DoNotRemoveSelected, customItemsMap );
+
+ KoTextDocCommand * cmd = new KoTextInsertCommand( textdoc, undoRedoInfo.id, undoRedoInfo.index,
+ undoRedoInfo.text.rawData(),
+ CustomItemsMap(), undoRedoInfo.oldParagLayouts );
+ textdoc->addCommand( cmd );
+ macroCmd->addCommand( new KoTextCommand( this, /*cmd, */QString::null ) );
+
+ undoRedoInfo.type = UndoRedoInfo::Invalid; // we don't want clear() to create a command
+ undoRedoInfo.clear();
+
+ format->removeRef();
+
+ setLastFormattedParag( c1.parag() );
+ if ( repaint )
+ {
+ formatMore( 2 );
+ emit repaintChanged( this );
+ emit ensureCursorVisible();
+ emit updateUI( true );
+ emit showCursor();
+ if(selectionId==KoTextDocument::Standard)
+ selectionChangedNotify();
+ }
+ return macroCmd;
+}
+
+KCommand * KoTextObject::insertParagraphCommand( KoTextCursor *cursor )
+{
+ if ( protectContent() )
+ return 0L;
+ return replaceSelectionCommand( cursor, "\n", QString::null, KoTextDocument::Standard, CheckNewLine );
+}
+
+void KoTextObject::highlightPortion( KoTextParag * parag, int index, int length, bool repaint )
+{
+ if ( !m_highlightSelectionAdded )
+ {
+ textdoc->addSelection( KoTextDocument::HighlightSelection );
+ textdoc->setSelectionColor( KoTextDocument::HighlightSelection,
+ QApplication::palette().color( QPalette::Active, QColorGroup::Dark ) );
+ textdoc->setInvertSelectionText( KoTextDocument::HighlightSelection, true );
+ m_highlightSelectionAdded = true;
+ }
+
+ removeHighlight(repaint); // remove previous highlighted selection
+ KoTextCursor cursor( textdoc );
+ cursor.setParag( parag );
+ cursor.setIndex( index );
+ textdoc->setSelectionStart( KoTextDocument::HighlightSelection, &cursor );
+ cursor.setIndex( index + length );
+ textdoc->setSelectionEnd( KoTextDocument::HighlightSelection, &cursor );
+ if ( repaint ) {
+ parag->setChanged( true );
+ emit repaintChanged( this );
+ }
+}
+
+void KoTextObject::removeHighlight(bool repaint)
+{
+ if ( textdoc->hasSelection( KoTextDocument::HighlightSelection, true ) )
+ {
+ KoTextParag * oldParag = textdoc->selectionStart( KoTextDocument::HighlightSelection );
+ oldParag->setChanged( true );
+ textdoc->removeSelection( KoTextDocument::HighlightSelection );
+ }
+ if ( repaint )
+ emit repaintChanged( this );
+}
+
+void KoTextObject::selectAll( bool select )
+{
+ if ( !select )
+ textdoc->removeSelection( KoTextDocument::Standard );
+ else
+ textdoc->selectAll( KoTextDocument::Standard );
+ selectionChangedNotify();
+}
+
+void KoTextObject::selectionChangedNotify( bool enableActions /* = true */)
+{
+ emit repaintChanged( this );
+ if ( enableActions )
+ emit selectionChanged( hasSelection() );
+}
+
+void KoTextObject::setViewArea( QWidget* w, int maxY )
+{
+ m_mapViewAreas.replace( w, maxY );
+}
+
+void KoTextObject::setLastFormattedParag( KoTextParag *parag )
+{
+ //kdDebug() << k_funcinfo << parag << " (" << ( parag ? QString::number(parag->paragId()) : QString("(null)") ) << ")" << endl;
+ if ( !m_lastFormatted || !parag || m_lastFormatted->paragId() >= parag->paragId() ) {
+ m_lastFormatted = parag;
+ }
+}
+
+void KoTextObject::ensureFormatted( KoTextParag * parag, bool emitAfterFormatting /* = true */ )
+{
+ if ( !textdoc->lastParag() )
+ return; // safety test
+ //kdDebug(32500) << name() << " ensureFormatted " << parag->paragId() << endl;
+ if ( !parag->isValid() && m_lastFormatted == 0 )
+ m_lastFormatted = parag; // bootstrap
+
+ while ( !parag->isValid() )
+ {
+ if ( !m_lastFormatted ) {
+ kdWarning() << "ensureFormatted for parag " << parag << " " << parag->paragId() << " still not formatted, but m_lastFormatted==0" << endl;
+ return;
+ }
+ // The paragid diff is "a good guess". The >=1 is a safety measure ;)
+ bool ret = formatMore( QMAX( 1, parag->paragId() - m_lastFormatted->paragId() ), emitAfterFormatting );
+ if ( !ret ) { // aborted
+ //kdDebug(32500) << "ensureFormatted aborted!" << endl;
+ break;
+ }
+ }
+ //kdDebug(32500) << name() << " ensureFormatted " << parag->paragId() << " done" << endl;
+}
+
+bool KoTextObject::formatMore( int count /* = 10 */, bool emitAfterFormatting /* = true */ )
+{
+ if ( ( !m_lastFormatted && d->afterFormattingEmitted )
+ || !m_visible || m_availableHeight == -1 )
+ return false;
+
+ if ( !textdoc->lastParag() )
+ return false; // safety test
+
+ if ( d->abortFormatting ) {
+ d->abortFormatting = false;
+ return false;
+ }
+
+ if ( count == 0 )
+ {
+ formatTimer->start( interval, TRUE );
+ return true;
+ }
+
+ int bottom = 0;
+ if ( m_lastFormatted )
+ {
+ d->afterFormattingEmitted = false;
+
+ int viewsBottom = 0;
+ QMapIterator<QWidget *, int> mapIt = m_mapViewAreas.begin();
+ for ( ; mapIt != m_mapViewAreas.end() ; ++mapIt )
+ viewsBottom = QMAX( viewsBottom, mapIt.data() );
+
+#ifdef DEBUG_FORMAT_MORE
+ kdDebug(32500) << "formatMore " << name()
+ << " lastFormatted id=" << m_lastFormatted->paragId()
+ << " lastFormatted's top=" << m_lastFormatted->rect().top()
+ << " lastFormatted's height=" << m_lastFormatted->rect().height()
+ << " count=" << count << " viewsBottom=" << viewsBottom
+ << " availableHeight=" << m_availableHeight << endl;
+#endif
+ if ( m_lastFormatted->prev() == 0 )
+ {
+ emit formattingFirstParag();
+#ifdef TIMING_FORMAT
+ kdDebug(32500) << "formatMore " << name() << ". First parag -> starting timer" << endl;
+ m_time.start();
+#endif
+ }
+
+ // Stop if we have formatted everything or if we need more space
+ // Otherwise, stop formatting after "to" paragraphs,
+ // but make sure we format everything the views need
+ int i;
+ for ( i = 0;
+ m_lastFormatted && bottom + m_lastFormatted->rect().height() <= m_availableHeight &&
+ ( i < count || bottom <= viewsBottom ) ; ++i )
+ {
+ KoTextParag* parag = m_lastFormatted;
+#ifdef DEBUG_FORMAT_MORE
+ kdDebug(32500) << "formatMore formatting " << parag << " id=" << parag->paragId() << endl;
+#endif
+ assert( parag->string() ); // i.e. not deleted
+ parag->format();
+ bottom = parag->rect().top() + parag->rect().height();
+#if 0 //def DEBUG_FORMAT_MORE
+ kdDebug(32500) << "formatMore(inside) top=" << parag->rect().top()
+ << " height=" << parag->rect().height()
+ << " bottom=" << bottom << " m_lastFormatted(next parag) = " << m_lastFormatted->next() << endl;
+#endif
+
+ // Check for Head 1 (i.e. section) titles, and emit them - for the Section variable
+ if ( parag->counter() && parag->counter()->numbering() == KoParagCounter::NUM_CHAPTER
+ && parag->counter()->depth() == 0 )
+ emit chapterParagraphFormatted( parag );
+
+ if ( d->abortFormatting ) {
+#ifdef DEBUG_FORMAT_MORE
+ kdDebug(32500) << "formatMore formatting aborted. " << endl;
+#endif
+ d->abortFormatting = false;
+ return false;
+ }
+
+ if ( parag != m_lastFormatted )
+ kdWarning() << "Some code changed m_lastFormatted during formatting! Was " << parag->paragId() << ", is now " << m_lastFormatted->paragId() << endl;
+#if 0 // This happens now that formatting can 'abort' (e.g. due to page not yet created)
+ else if (!parag->isValid())
+ kdWarning() << "PARAGRAPH " << parag->paragId() << " STILL INVALID AFTER FORMATTING" << endl;
+#endif
+ m_lastFormatted = parag->next();
+ }
+ }
+ else // formatting was done previously, but not emit afterFormatting
+ {
+ QRect rect = textdoc->lastParag()->rect();
+ bottom = rect.top() + rect.height();
+ }
+#ifdef DEBUG_FORMAT_MORE
+ QString id;
+ if ( m_lastFormatted ) id = QString(" (%1)").arg(m_lastFormatted->paragId());
+ kdDebug(32500) << "formatMore finished formatting. "
+ << " bottom=" << bottom
+ << " m_lastFormatted=" << m_lastFormatted << id
+ << endl;
+#endif
+
+ if ( emitAfterFormatting )
+ {
+ d->afterFormattingEmitted = true;
+ bool needMoreSpace = false;
+ // Check if we need more space
+ if ( ( bottom > m_availableHeight ) || // this parag is already off page
+ ( m_lastFormatted && bottom + m_lastFormatted->rect().height() > m_availableHeight ) ) // or next parag will be off page
+ needMoreSpace = true;
+ // default value of 'abort' depends on need more space
+ bool abort = needMoreSpace;
+ emit afterFormatting( bottom, m_lastFormatted, &abort );
+ if ( abort )
+ return false;
+ else if ( needMoreSpace && m_lastFormatted ) // we got more space, keep formatting then
+ return formatMore( 2 );
+ }
+
+ // Now let's see when we'll need to get back here.
+ if ( m_lastFormatted )
+ {
+ formatTimer->start( interval, TRUE );
+#ifdef DEBUG_FORMAT_MORE
+ kdDebug(32500) << name() << " formatMore: will have to format more. formatTimer->start with interval=" << interval << endl;
+#endif
+ }
+ else
+ {
+ interval = QMAX( 0, interval );
+#ifdef DEBUG_FORMAT_MORE
+ kdDebug(32500) << name() << " formatMore: all formatted interval=" << interval << endl;
+#endif
+#ifdef TIMING_FORMAT
+ //if ( frameSetInfo() == FI_BODY )
+ kdDebug(32500) << "formatMore: " << name() << " all formatted. Took "
+ << (double)(m_time.elapsed()) / 1000 << " seconds." << endl;
+#endif
+ }
+ return true;
+}
+
+void KoTextObject::abortFormatting()
+{
+ d->abortFormatting = true;
+}
+
+void KoTextObject::doChangeInterval()
+{
+ //kdDebug(32500) << "KoTextObject::doChangeInterval back to interval=0" << endl;
+ interval = 0;
+}
+
+void KoTextObject::typingStarted()
+{
+ //kdDebug(32500) << "KoTextObject::typingStarted" << endl;
+ changeIntervalTimer->stop();
+ interval = 10;
+}
+
+void KoTextObject::typingDone()
+{
+ changeIntervalTimer->start( 100, TRUE );
+}
+
+
+// helper for changeCaseOfText
+KCommand *KoTextObject::changeCaseOfTextParag( int cursorPosStart, int cursorPosEnd,
+ KoChangeCaseDia::TypeOfCase _type,
+ KoTextCursor *cursor, KoTextParag *parag )
+{
+ if ( protectContent() )
+ return 0L;
+
+ KMacroCommand * macroCmd = new KMacroCommand( i18n("Change Case") );
+ KoTextFormat *curFormat = parag->paragraphFormat();
+ const QString text = parag->string()->toString().mid( cursorPosStart, cursorPosEnd - cursorPosStart );
+ int posStart = cursorPosStart;
+ int posEnd = cursorPosStart;
+ KoTextCursor c1( textdoc );
+ KoTextCursor c2( textdoc );
+ //kdDebug() << k_funcinfo << "from " << cursorPosStart << " to " << cursorPosEnd << " (excluded). Parag=" << parag << " length=" << parag->length() << endl;
+ for ( int i = cursorPosStart; i < cursorPosEnd; ++i )
+ {
+ KoTextStringChar & ch = *(parag->at(i));
+ KoTextFormat * newFormat = ch.format();
+ if( ch.isCustom() )
+ {
+ posEnd = i;
+ c1.setParag( parag );
+ c1.setIndex( posStart );
+ c2.setParag( parag );
+ c2.setIndex( posEnd );
+ //kdDebug() << k_funcinfo << "found custom at " << i << " : doing from " << posStart << " to " << posEnd << endl;
+
+ const QString repl = text.mid( posStart, posEnd - posStart );
+ textdoc->setSelectionStart( KoTextDocument::Temp, &c1 );
+ textdoc->setSelectionEnd( KoTextDocument::Temp, &c2 );
+ macroCmd->addCommand(replaceSelectionCommand(
+ cursor, textChangedCase(repl,_type),
+ QString::null, KoTextDocument::Temp));
+ do
+ {
+ ++i;
+ }
+ while( parag->at(i)->isCustom() && i != cursorPosEnd);
+ posStart=i;
+ posEnd=i;
+ }
+ else
+ {
+ if ( newFormat != curFormat )
+ {
+ posEnd=i;
+ c1.setParag( parag );
+ c1.setIndex( posStart );
+ c2.setParag( parag );
+ c2.setIndex( posEnd );
+ //kdDebug() << k_funcinfo << "found new format at " << i << " : doing from " << posStart << " to " << posEnd << endl;
+
+ const QString repl = text.mid( posStart, posEnd - posStart );
+ textdoc->setSelectionStart( KoTextDocument::Temp, &c1 );
+ textdoc->setSelectionEnd( KoTextDocument::Temp, &c2 );
+ macroCmd->addCommand(replaceSelectionCommand(
+ cursor, textChangedCase(repl,_type),
+ QString::null, KoTextDocument::Temp));
+ posStart=i;
+ posEnd=i;
+ curFormat = newFormat;
+ }
+ }
+ }
+ if ( posStart != cursorPosEnd )
+ {
+ //kdDebug() << k_funcinfo << "finishing: doing from " << posStart << " to " << cursorPosEnd << endl;
+ c1.setParag( parag );
+ c1.setIndex( posStart );
+ c2.setParag( parag );
+ c2.setIndex( cursorPosEnd );
+
+ textdoc->setSelectionStart( KoTextDocument::Temp, &c1 );
+ textdoc->setSelectionEnd( KoTextDocument::Temp, &c2 );
+ const QString repl = text.mid( posStart, cursorPosEnd - posStart );
+ macroCmd->addCommand(replaceSelectionCommand(
+ cursor, textChangedCase(repl,_type),
+ QString::null, KoTextDocument::Temp));
+ }
+ return macroCmd;
+
+}
+
+KCommand *KoTextObject::changeCaseOfText(KoTextCursor *cursor,KoChangeCaseDia::TypeOfCase _type)
+{
+ if ( protectContent() )
+ return 0L;
+ KMacroCommand * macroCmd = new KMacroCommand( i18n("Change Case") );
+
+ KoTextCursor start = textdoc->selectionStartCursor( KoTextDocument::Standard );
+ KoTextCursor end = textdoc->selectionEndCursor( KoTextDocument::Standard );
+ emit hideCursor();
+
+ if ( start.parag() == end.parag() )
+ {
+ int endIndex = QMIN( start.parag()->length() - 1, end.index() );
+ macroCmd->addCommand( changeCaseOfTextParag( start.index(), endIndex, _type,
+ cursor, start.parag() ) );
+ }
+ else
+ {
+ macroCmd->addCommand( changeCaseOfTextParag( start.index(), start.parag()->length() - 1, _type,
+ cursor, start.parag() ) );
+ KoTextParag *p = start.parag()->next();
+ while ( p && p != end.parag() )
+ {
+ macroCmd->addCommand( changeCaseOfTextParag(0, p->length() - 1, _type, cursor, p ) );
+ p = p->next();
+ }
+ if ( p )
+ {
+ int endIndex = QMIN( p->length() - 1, end.index() );
+ macroCmd->addCommand( changeCaseOfTextParag(0, endIndex, _type, cursor, end.parag() ));
+ }
+ }
+ formatMore( 2 );
+ emit repaintChanged( this );
+ emit ensureCursorVisible();
+ emit updateUI( true );
+ emit showCursor();
+ return macroCmd;
+}
+
+QString KoTextObject::textChangedCase(const QString& _text,KoChangeCaseDia::TypeOfCase _type)
+{
+ QString text(_text);
+ switch(_type)
+ {
+ case KoChangeCaseDia::UpperCase:
+ text=text.upper();
+ break;
+ case KoChangeCaseDia::LowerCase:
+ text=text.lower();
+ break;
+ case KoChangeCaseDia::TitleCase:
+ for(uint i=0;i<text.length();i++)
+ {
+ if(text.at(i)!=' ')
+ {
+ QChar prev = text.at(QMAX(i-1,0));
+ if(i==0 || prev == ' ' || prev == '\n' || prev == '\t')
+ text=text.replace(i, 1, text.at(i).upper() );
+ else
+ text=text.replace(i, 1, text.at(i).lower() );
+ }
+ }
+ break;
+ case KoChangeCaseDia::ToggleCase:
+ for(uint i=0;i<text.length();i++)
+ {
+ QString repl=QString(text.at(i));
+ if(text.at(i)!=text.at(i).upper())
+ repl=repl.upper();
+ else if(text.at(i).lower()!=text.at(i))
+ repl=repl.lower();
+ text=text.replace(i, 1, repl );
+ }
+ break;
+ case KoChangeCaseDia::SentenceCase:
+ for(uint i=0;i<text.length();i++)
+ {
+ if(text.at(i)!=' ')
+ {
+ QChar prev = text.at(QMAX(i-1,0));
+ if(i==0 || prev == '\n' ||prev.isPunct())
+ text=text.replace(i, 1, text.at(i).upper() );
+ }
+ }
+ break;
+ default:
+ kdDebug(32500)<<"Error in changeCaseOfText !\n";
+ break;
+
+ }
+ return text;
+}
+
+// Warning, this doesn't ref the format!
+KoTextFormat * KoTextObject::currentFormat() const
+{
+ // We use the formatting of the very first character
+ // Should we use a style instead, maybe ?
+ KoTextStringChar *ch = textdoc->firstParag()->at( 0 );
+ return ch->format();
+}
+
+const KoParagLayout * KoTextObject::currentParagLayoutFormat() const
+{
+ KoTextParag * parag = textdoc->firstParag();
+ return &(parag->paragLayout());
+}
+
+bool KoTextObject::rtl() const
+{
+ return textdoc->firstParag()->string()->isRightToLeft();
+}
+
+void KoTextObject::loadOasisContent( const QDomElement &bodyElem, KoOasisContext& context, KoStyleCollection * styleColl )
+{
+ textDocument()->clear(false); // Get rid of dummy paragraph (and more if any)
+ setLastFormattedParag( 0L ); // no more parags, avoid UMR in next setLastFormattedParag call
+
+ KoTextParag *lastParagraph = textDocument()->loadOasisText( bodyElem, context, 0, styleColl, 0 );
+
+ if ( !lastParagraph ) // We created no paragraph
+ {
+ // Create an empty one, then. See KoTextDocument ctor.
+ textDocument()->clear( true );
+ textDocument()->firstParag()->setStyle( styleColl->findStyle( "Standard" ) );
+ }
+ else
+ textDocument()->setLastParag( lastParagraph );
+
+ setLastFormattedParag( textDocument()->firstParag() );
+}
+
+KoTextCursor KoTextObject::pasteOasisText( const QDomElement &bodyElem, KoOasisContext& context,
+ KoTextCursor& cursor, KoStyleCollection * styleColl )
+{
+ KoTextCursor resultCursor( cursor );
+ KoTextParag* lastParagraph = cursor.parag();
+ bool removeNewline = false;
+ uint pos = cursor.index();
+ if ( pos == 0 && lastParagraph->length() <= 1 ) {
+ // Pasting on an empty paragraph -> respect <text:h> in selected text etc.
+ lastParagraph = lastParagraph->prev();
+ lastParagraph = textDocument()->loadOasisText( bodyElem, context, lastParagraph, styleColl, cursor.parag() );
+ if ( lastParagraph ) {
+ resultCursor.setParag( lastParagraph );
+ resultCursor.setIndex( lastParagraph->length() - 1 );
+ }
+ removeNewline = true;
+ } else {
+ // Pasting inside a non-empty paragraph -> insert/append text to it.
+ // This loop looks for the *FIRST* paragraph only.
+ for ( QDomNode text (bodyElem.firstChild()); !text.isNull(); text = text.nextSibling() )
+ {
+ QDomElement tag = text.toElement();
+ if ( tag.isNull() ) continue;
+ // The first tag could be a text:p, text:h, text:numbered-paragraph, but also
+ // a frame (anchored to page), a TOC, etc. For those, don't try to concat-with-existing-paragraph.
+ // For text:numbered-paragraph, find the text:p or text:h inside it.
+ QDomElement tagToLoad = tag;
+ if ( tag.localName() == "numbered-paragraph" ) {
+ QDomElement npchild;
+ forEachElement( npchild, tag )
+ {
+ if ( npchild.localName() == "p" || npchild.localName() == "h" ) {
+ tagToLoad = npchild;
+ break;
+ }
+ }
+ }
+
+ if ( tagToLoad.localName() == "p" || tagToLoad.localName() == "h" ) {
+ context.styleStack().save();
+ context.fillStyleStack( tagToLoad, KoXmlNS::text, "style-name", "paragraph" );
+
+ // OO.o compatibility: ignore leading whitespace in <p> and <h> elements
+ lastParagraph->loadOasisSpan( tagToLoad, context, pos, true );
+ context.styleStack().restore();
+
+ lastParagraph->setChanged( true );
+ lastParagraph->invalidate( 0 );
+
+ // Now split this parag, to make room for the next paragraphs
+ resultCursor.setParag( lastParagraph );
+ resultCursor.setIndex( pos );
+ resultCursor.splitAndInsertEmptyParag( FALSE, TRUE );
+ removeNewline = true;
+
+ // Done with first parag, remove it and exit loop
+ const_cast<QDomElement &>( bodyElem ).removeChild( tag ); // somewhat hackish
+ }
+ break;
+ }
+ resultCursor.setParag( lastParagraph );
+ resultCursor.setIndex( pos );
+ // Load the rest the usual way.
+ lastParagraph = textDocument()->loadOasisText( bodyElem, context, lastParagraph, styleColl, lastParagraph->next() );
+ if ( lastParagraph != resultCursor.parag() ) // we loaded more paragraphs
+ {
+ removeNewline = true;
+ resultCursor.setParag( lastParagraph );
+ resultCursor.setIndex( lastParagraph->length() - 1 );
+ }
+ }
+ KoTextParag* p = resultCursor.parag();
+ if ( p ) p = p->next();
+ // Remove the additional newline that loadOasisText inserted
+ if ( removeNewline && resultCursor.remove() ) {
+ if ( m_lastFormatted == p ) { // has been deleted
+ m_lastFormatted = resultCursor.parag();
+ }
+ }
+ return resultCursor;
+}
+
+void KoTextObject::saveOasisContent( KoXmlWriter& writer, KoSavingContext& context ) const
+{
+ textDocument()->saveOasisContent( writer, context );
+}
+
+KCommand *KoTextObject::setParagLayoutFormatCommand( KoParagLayout *newLayout,int flags,int marginIndex)
+{
+ if ( protectContent() )
+ return 0L;
+ textdoc->selectAll( KoTextDocument::Temp );
+ KoTextCursor *cursor = new KoTextCursor( textdoc );
+ KCommand* cmd = setParagLayoutCommand( cursor, *newLayout, KoTextDocument::Temp,
+ flags, marginIndex, true /*createUndoRedo*/ );
+ textdoc->removeSelection( KoTextDocument::Temp );
+ delete cursor;
+ return cmd;
+}
+
+void KoTextObject::setFormat( KoTextFormat * newFormat, int flags, bool zoomFont )
+{
+ if ( protectContent() )
+ return ;
+ // This version of setFormat works on the whole textobject - we use the Temp selection for that
+ textdoc->selectAll( KoTextDocument::Temp );
+ KCommand *cmd = setFormatCommand( 0L, 0L, newFormat,
+ flags, zoomFont, KoTextDocument::Temp );
+ textdoc->removeSelection( KoTextDocument::Temp );
+ if (cmd)
+ emit newCommand( cmd );
+
+ KoTextFormat format = *currentFormat();
+ //format.setPointSize( docFontSize( currentFormat() ) ); // "unzoom" the font size
+ emit showFormatObject(format);
+}
+
+KCommand *KoTextObject::setChangeCaseOfTextCommand(KoChangeCaseDia::TypeOfCase _type)
+{
+ if ( protectContent() )
+ return 0L;
+ textdoc->selectAll( KoTextDocument::Standard );
+ KoTextCursor *cursor = new KoTextCursor( textdoc );
+ KCommand* cmd = changeCaseOfText(cursor, _type);
+ textdoc->removeSelection( KoTextDocument::Standard );
+ delete cursor;
+ return cmd;
+}
+
+void KoTextObject::setNeedSpellCheck(bool b)
+{
+ m_needsSpellCheck = b;
+ for (KoTextParag * parag = textdoc->firstParag(); parag ; parag = parag->next())
+ parag->string()->setNeedsSpellCheck( b );
+}
+
+bool KoTextObject::statistics( QProgressDialog *progress, ulong & charsWithSpace, ulong & charsWithoutSpace, ulong & words, ulong & sentences, ulong & syllables, ulong & lines, bool selected )
+{
+ // parts of words for better counting of syllables:
+ // (only use reg exp if necessary -> speed up)
+
+ QStringList subs_syl;
+ subs_syl << "cial" << "tia" << "cius" << "cious" << "giu" << "ion" << "iou";
+ QStringList subs_syl_regexp;
+ subs_syl_regexp << "sia$" << "ely$";
+
+ QStringList add_syl;
+ add_syl << "ia" << "riet" << "dien" << "iu" << "io" << "ii";
+ QStringList add_syl_regexp;
+ add_syl_regexp << "[aeiouym]bl$" << "[aeiou]{3}" << "^mc" << "ism$"
+ << "[^l]lien" << "^coa[dglx]." << "[^gq]ua[^auieo]" << "dnt$";
+
+ QString s;
+ KoTextParag * parag = textdoc->firstParag();
+ for ( ; parag ; parag = parag->next() )
+ {
+ if ( progress )
+ {
+ progress->setProgress(progress->progress()+1);
+ // MA: resizing if KWStatisticsDialog does not work correct with this enabled, don't know why
+ kapp->processEvents();
+ if ( progress->wasCancelled() )
+ return false;
+ }
+ // start of a table
+/* if ( parag->at(0)->isCustom())
+ {
+ KoLinkVariable *var=dynamic_cast<KoLinkVariable *>(parag->at(0)->customItem());
+ if(!var)
+ continue;
+ }*/
+ bool hasTrailingSpace = true;
+ if ( !selected ) {
+ s = parag->string()->toString();
+ lines += parag->lines();
+ } else {
+ if ( parag->hasSelection( KoTextDocument::Standard ) ) {
+ hasTrailingSpace = false;
+ s = parag->string()->toString();
+ if ( !( parag->fullSelected( KoTextDocument::Standard ) ) ) {
+ s = s.mid( parag->selectionStart( KoTextDocument::Standard ), parag->selectionEnd( KoTextDocument::Standard ) - parag->selectionStart( KoTextDocument::Standard ) );
+ lines+=numberOfparagraphLineSelected(parag);
+ }
+ else
+ lines += parag->lines();
+ } else {
+ continue;
+ }
+ }
+
+ // Character count
+ for ( uint i = 0 ; i < s.length() - ( hasTrailingSpace ? 1 : 0 ) ; ++i )
+ {
+ QChar ch = s[i];
+ ++charsWithSpace;
+ if ( !ch.isSpace() )
+ ++charsWithoutSpace;
+ }
+
+ // Syllable and Word count
+ // Algorithm mostly taken from Greg Fast's Lingua::EN::Syllable module for Perl.
+ // This guesses correct for 70-90% of English words, but the overall value
+ // is quite good, as some words get a number that's too high and others get
+ // one that's too low.
+ // IMPORTANT: please test any changes against demos/statistics.kwd
+ QRegExp re("\\s+");
+ QStringList wordlist = QStringList::split(re, s);
+ words += wordlist.count();
+ re.setCaseSensitive(false);
+ for ( QStringList::Iterator it = wordlist.begin(); it != wordlist.end(); ++it ) {
+ QString word = *it;
+ re.setPattern("[!?.,:_\"-]"); // clean word from punctuation
+ word.remove(re);
+ if ( word.length() <= 3 ) { // extension to the original algorithm
+ syllables++;
+ continue;
+ }
+ re.setPattern("e$");
+ word.remove(re);
+ re.setPattern("[^aeiouy]+");
+ QStringList syls = QStringList::split(re, word);
+ int word_syllables = 0;
+ for ( QStringList::Iterator it = subs_syl.begin(); it != subs_syl.end(); ++it ) {
+ if( word.find(*it, 0, false) != -1 )
+ word_syllables--;
+ }
+ for ( QStringList::Iterator it = subs_syl_regexp.begin(); it != subs_syl_regexp.end(); ++it ) {
+ re.setPattern(*it);
+ if( word.find(re) != -1 )
+ word_syllables--;
+ }
+ for ( QStringList::Iterator it = add_syl.begin(); it != add_syl.end(); ++it ) {
+ if( word.find(*it, 0, false) != -1 )
+ word_syllables++;
+ }
+ for ( QStringList::Iterator it = add_syl_regexp.begin(); it != add_syl_regexp.end(); ++it ) {
+ re.setPattern(*it);
+ if( word.find(re) != -1 )
+ word_syllables++;
+ }
+ word_syllables += syls.count();
+ if ( word_syllables == 0 )
+ word_syllables = 1;
+ syllables += word_syllables;
+ }
+ re.setCaseSensitive(true);
+
+ // Sentence count
+ // Clean up for better result, destroys the original text but we only want to count
+ s = s.stripWhiteSpace();
+ QChar lastchar = s.at(s.length());
+ if( ! s.isEmpty() && ! KoAutoFormat::isMark( lastchar ) ) { // e.g. for headlines
+ s = s + ".";
+ }
+ re.setPattern("[.?!]+"); // count "..." as only one "."
+ s.replace(re, ".");
+ re.setPattern("\\d\\.\\d"); // don't count floating point numbers as sentences
+ s.replace(re, "0,0");
+ re.setPattern("[A-Z]\\.+"); // don't count "U.S.A." as three sentences
+ s.replace(re, "*");
+ for ( uint i = 0 ; i < s.length() ; ++i )
+ {
+ QChar ch = s[i];
+ if ( KoAutoFormat::isMark( ch ) )
+ ++sentences;
+ }
+ }
+ return true;
+}
+
+int KoTextObject::numberOfparagraphLineSelected( KoTextParag *parag)
+{
+ int indexOfLineStart;
+ int lineStart;
+ int lineEnd;
+ KoTextCursor c1 = textdoc->selectionStartCursor( KoTextDocument::Standard );
+ KoTextCursor c2 = textdoc->selectionEndCursor( KoTextDocument::Standard );
+ parag->lineStartOfChar( c1.index(), &indexOfLineStart, &lineStart );
+
+ parag->lineStartOfChar( c2.index(), &indexOfLineStart, &lineEnd );
+ return (lineEnd - lineStart+1);
+}
+
+KoVariable* KoTextObject::variableAtPoint( const QPoint& iPoint ) const
+{
+ KoTextCursor cursor( textDocument() );
+ int variablePosition = -1;
+ cursor.place( iPoint, textDocument()->firstParag(), false, &variablePosition );
+ if ( variablePosition == -1 )
+ return 0;
+ return variableAtPosition( cursor.parag(), variablePosition );
+}
+
+KoVariable* KoTextObject::variableAtPosition( KoTextParag* parag, int index ) const
+{
+ KoTextStringChar * ch = parag->at( index );
+ if ( ch->isCustom() )
+ return dynamic_cast<KoVariable *>( ch->customItem() );
+ return 0;
+}
+
+const char * KoTextObject::acceptSelectionMimeType()
+{
+ return "application/vnd.oasis.opendocument.";
+}
+
+QCString KoTextObject::providesOasis( QMimeSource* mime )
+{
+ const char* fmt;
+ const char* acceptMimeType = acceptSelectionMimeType();
+ for ( int i = 0; (fmt = mime->format(i)); ++i )
+ {
+ if ( QString( fmt ).startsWith( acceptMimeType ) )
+ {
+ return fmt;
+ }
+ }
+ return "";
+}
+
+#ifndef NDEBUG
+void KoTextObject::printRTDebug(int info)
+{
+ KoTextParag* lastParag = 0;
+ for (KoTextParag * parag = textdoc->firstParag(); parag ; parag = parag->next())
+ {
+ assert( parag->prev() == lastParag );
+ parag->printRTDebug( info );
+ lastParag = parag;
+ }
+ if ( info == 1 )
+ textdoc->formatCollection()->debug();
+}
+#endif
+
+////// Implementation of the KoTextFormatInterface "interface"
+
+KCommand *KoTextFormatInterface::setBoldCommand(bool on)
+{
+ KoTextFormat format( *currentFormat() );
+ format.setBold( on );
+ return setFormatCommand( &format, KoTextFormat::Bold );
+}
+
+KCommand *KoTextFormatInterface::setItalicCommand( bool on)
+{
+ KoTextFormat format( *currentFormat() );
+ format.setItalic( on );
+ return setFormatCommand( &format, KoTextFormat::Italic );
+}
+
+KCommand *KoTextFormatInterface::setUnderlineCommand( bool on )
+{
+ KoTextFormat format( *currentFormat() );
+ format.setUnderlineType( on ? KoTextFormat::U_SIMPLE : KoTextFormat::U_NONE);
+ return setFormatCommand( &format, KoTextFormat::ExtendUnderLine );
+}
+
+KCommand *KoTextFormatInterface::setUnderlineColorCommand( const QColor &color )
+{
+ KoTextFormat format( *currentFormat() );
+ format.setTextUnderlineColor( color);
+ return setFormatCommand( &format, KoTextFormat::ExtendUnderLine );
+}
+
+KCommand *KoTextFormatInterface::setDoubleUnderlineCommand( bool on )
+{
+ KoTextFormat format( *currentFormat() );
+ format.setUnderlineType( on ? KoTextFormat::U_DOUBLE : KoTextFormat::U_NONE);
+ return setFormatCommand( &format, KoTextFormat::ExtendUnderLine );
+}
+
+KCommand *KoTextFormatInterface::setStrikeOutCommand( bool on )
+{
+ KoTextFormat format( *currentFormat() );
+ format.setStrikeOutType( on ? KoTextFormat::S_SIMPLE : KoTextFormat::S_NONE);
+ return setFormatCommand( &format, KoTextFormat::StrikeOut );
+}
+
+KCommand *KoTextFormatInterface::setTextBackgroundColorCommand(const QColor & col)
+{
+ KoTextFormat format( *currentFormat() );
+ format.setTextBackgroundColor( col );
+ return setFormatCommand( &format, KoTextFormat::TextBackgroundColor );
+}
+
+KCommand *KoTextFormatInterface::setPointSizeCommand( int s )
+{
+ KoTextFormat format( *currentFormat() );
+ format.setPointSize( s );
+ return setFormatCommand( &format, KoTextFormat::Size, true /* zoom the font size */ );
+}
+
+KCommand *KoTextFormatInterface::setFamilyCommand(const QString &font)
+{
+ KoTextFormat format( *currentFormat() );
+ format.setFamily( font );
+ return setFormatCommand( &format, KoTextFormat::Family );
+}
+
+QColor KoTextFormatInterface::textBackgroundColor() const
+{
+ return currentFormat()->textBackgroundColor();
+}
+
+QColor KoTextFormatInterface::textUnderlineColor()const
+{
+ return currentFormat()->textUnderlineColor();
+}
+
+QColor KoTextFormatInterface::textColor() const
+{
+ return currentFormat()->color();
+}
+
+bool KoTextFormatInterface::textUnderline()const
+{
+ return currentFormat()->underline();
+}
+
+bool KoTextFormatInterface::textDoubleUnderline()const
+{
+ return currentFormat()->doubleUnderline();
+}
+
+bool KoTextFormatInterface::textBold()const
+{
+ return currentFormat()->font().bold();
+}
+
+bool KoTextFormatInterface::textStrikeOut()const
+{
+ return currentFormat()->font().strikeOut();
+}
+
+bool KoTextFormatInterface::textItalic() const
+{
+ return currentFormat()->font().italic();
+}
+
+bool KoTextFormatInterface::textSubScript() const
+{
+ return (currentFormat()->vAlign()==KoTextFormat::AlignSubScript);
+}
+
+bool KoTextFormatInterface::textSuperScript() const
+{
+ return (currentFormat()->vAlign()==KoTextFormat::AlignSuperScript);
+}
+
+double KoTextFormatInterface::shadowDistanceX() const
+{
+ return currentFormat()->shadowDistanceX();
+}
+
+double KoTextFormatInterface::shadowDistanceY() const
+{
+ return currentFormat()->shadowDistanceY();
+}
+
+QColor KoTextFormatInterface::shadowColor() const
+{
+ return currentFormat()->shadowColor();
+}
+
+KoTextFormat::AttributeStyle KoTextFormatInterface::fontAttribute() const
+{
+ return currentFormat()->attributeFont();
+}
+
+double KoTextFormatInterface::relativeTextSize() const
+{
+ return currentFormat()->relativeTextSize();
+}
+
+int KoTextFormatInterface::offsetFromBaseLine()const
+{
+ return currentFormat()->offsetFromBaseLine();
+}
+
+bool KoTextFormatInterface::wordByWord()const
+{
+ return currentFormat()->wordByWord();
+}
+
+bool KoTextFormatInterface::hyphenation()const
+{
+ return currentFormat()->hyphenation();
+}
+
+KoTextFormat::UnderlineType KoTextFormatInterface::underlineType()const
+{
+ return currentFormat()->underlineType();
+}
+
+KoTextFormat::StrikeOutType KoTextFormatInterface::strikeOutType()const
+{
+ return currentFormat()->strikeOutType();
+}
+
+KoTextFormat::UnderlineStyle KoTextFormatInterface::underlineStyle()const
+{
+ return currentFormat()->underlineStyle();
+}
+
+KoTextFormat::StrikeOutStyle KoTextFormatInterface::strikeOutStyle()const
+{
+ return currentFormat()->strikeOutStyle();
+}
+
+QFont KoTextFormatInterface::textFont() const
+{
+ QFont fn( currentFormat()->font() );
+ // "unzoom" the font size
+ //fn.setPointSize( static_cast<int>( KoTextZoomHandler::layoutUnitPtToPt( fn.pointSize() ) ) );
+ return fn;
+}
+
+QString KoTextFormatInterface::textFontFamily()const
+{
+ return currentFormat()->font().family();
+}
+
+QString KoTextFormatInterface::language() const
+{
+ return currentFormat()->language();
+}
+
+KCommand *KoTextFormatInterface::setTextColorCommand(const QColor &color)
+{
+ KoTextFormat format( *currentFormat() );
+ format.setColor( color );
+ return setFormatCommand( &format, KoTextFormat::Color );
+}
+
+KCommand *KoTextFormatInterface::setTextSubScriptCommand(bool on)
+{
+ KoTextFormat format( *currentFormat() );
+ if(!on)
+ format.setVAlign(KoTextFormat::AlignNormal);
+ else
+ format.setVAlign(KoTextFormat::AlignSubScript);
+ return setFormatCommand( &format, KoTextFormat::VAlign );
+}
+
+KCommand *KoTextFormatInterface::setTextSuperScriptCommand(bool on)
+{
+ KoTextFormat format( *currentFormat() );
+ if(!on)
+ format.setVAlign(KoTextFormat::AlignNormal);
+ else
+ format.setVAlign(KoTextFormat::AlignSuperScript);
+ return setFormatCommand( &format, KoTextFormat::VAlign );
+}
+
+KCommand *KoTextFormatInterface::setDefaultFormatCommand()
+{
+ KoTextFormatCollection * coll = currentFormat()->parent();
+ Q_ASSERT(coll);
+ if(coll)
+ {
+ KoTextFormat * format = coll->defaultFormat();
+ return setFormatCommand( format, KoTextFormat::Format );
+ } else {
+ kdDebug() << "useless call to setDefaultFormatCommand at: " << kdBacktrace() << endl;
+ }
+ return 0;
+}
+
+KCommand *KoTextFormatInterface::setAlignCommand(int align)
+{
+ KoParagLayout format( *currentParagLayoutFormat() );
+ format.alignment=align;
+ return setParagLayoutFormatCommand(&format,KoParagLayout::Alignment);
+}
+
+KCommand *KoTextFormatInterface::setHyphenationCommand( bool _b )
+{
+ KoTextFormat format( *currentFormat() );
+ format.setHyphenation( _b );
+ return setFormatCommand( &format, KoTextFormat::Hyphenation);
+}
+
+
+KCommand *KoTextFormatInterface::setShadowTextCommand( double shadowDistanceX, double shadowDistanceY, const QColor& shadowColor )
+{
+ KoTextFormat format( *currentFormat() );
+ format.setShadow( shadowDistanceX, shadowDistanceY, shadowColor );
+ return setFormatCommand( &format, KoTextFormat::ShadowText );
+}
+
+KCommand *KoTextFormatInterface::setFontAttributeCommand( KoTextFormat::AttributeStyle _att)
+{
+ KoTextFormat format( *currentFormat() );
+ format.setAttributeFont( _att );
+ return setFormatCommand( &format, KoTextFormat::Attribute );
+}
+
+KCommand *KoTextFormatInterface::setRelativeTextSizeCommand( double _size )
+{
+ KoTextFormat format( *currentFormat() );
+ format.setRelativeTextSize( _size );
+ return setFormatCommand( &format, KoTextFormat::VAlign );
+}
+
+KCommand *KoTextFormatInterface::setOffsetFromBaseLineCommand( int _offset )
+{
+ KoTextFormat format( *currentFormat() );
+ format.setOffsetFromBaseLine( _offset );
+ return setFormatCommand( &format, KoTextFormat::OffsetFromBaseLine );
+}
+
+KCommand *KoTextFormatInterface::setWordByWordCommand( bool _b )
+{
+ KoTextFormat format( *currentFormat() );
+ format.setWordByWord( _b );
+ return setFormatCommand( &format, KoTextFormat::WordByWord );
+}
+
+#if 0
+void KoTextFormatInterface::setAlign(int align)
+{
+ KCommand *cmd = setAlignCommand( align );
+ emitNewCommand( cmd );
+}
+
+void KoTextFormatInterface::setMargin(QStyleSheetItem::Margin m, double margin)
+{
+ KCommand *cmd = setMarginCommand( m, margin );
+ emitNewCommand( cmd );
+}
+
+void KoTextFormatInterface::setTabList(const KoTabulatorList & tabList )
+{
+ KCommand *cmd = setTabListCommand( tabList );
+ emitNewCommand( cmd );
+}
+
+void KoTextFormatInterface::setCounter(const KoParagCounter & counter )
+{
+ KCommand *cmd = setCounterCommand( counter );
+ emitNewCommand( cmd );
+}
+
+void KoTextFormatInterface::setParagLayoutFormat( KoParagLayout *newLayout, int flags, int marginIndex)
+{
+ KCommand *cmd = setParagLayoutFormatCommand(newLayout, flags, marginIndex);
+ emitNewCommand( cmd );
+}
+#endif
+
+KCommand *KoTextFormatInterface::setMarginCommand(QStyleSheetItem::Margin m, double margin)
+{
+ KoParagLayout format( *currentParagLayoutFormat() );
+ format.margins[m]=margin;
+ return setParagLayoutFormatCommand(&format,KoParagLayout::Margins,(int)m);
+}
+
+KCommand *KoTextFormatInterface::setTabListCommand(const KoTabulatorList & tabList )
+ {
+ KoParagLayout format( *currentParagLayoutFormat() );
+ format.setTabList(tabList);
+ return setParagLayoutFormatCommand(&format,KoParagLayout::Tabulator);
+}
+
+KCommand *KoTextFormatInterface::setCounterCommand(const KoParagCounter & counter )
+{
+ KoParagLayout format( *currentParagLayoutFormat() );
+ if(!format.counter)
+ format.counter = new KoParagCounter;
+ *format.counter = counter;
+ return setParagLayoutFormatCommand(&format,KoParagLayout::BulletNumber);
+}
+
+KCommand *KoTextFormatInterface::setLanguageCommand(const QString &_lang)
+{
+ KoTextFormat format( *currentFormat() );
+ format.setLanguage(_lang);
+ return setFormatCommand( &format, KoTextFormat::Language );
+}
+
+KoTextDocCommand *KoTextFormatInterface::deleteTextCommand( KoTextDocument *textdoc, int id, int index, const QMemArray<KoTextStringChar> & str, const CustomItemsMap & customItemsMap, const QValueList<KoParagLayout> & oldParagLayouts )
+{
+ return textdoc->deleteTextCommand( textdoc, id, index, str, customItemsMap, oldParagLayouts );
+}
+
+#include "KoTextObject.moc"
diff --git a/lib/kotext/KoTextObject.h b/lib/kotext/KoTextObject.h
new file mode 100644
index 00000000..58c92e9b
--- /dev/null
+++ b/lib/kotext/KoTextObject.h
@@ -0,0 +1,641 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2006 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kotextobject_h
+#define kotextobject_h
+
+#include <KoRichText.h>
+#include "KoChangeCaseDia.h"
+#include "KoStyleCollection.h"
+#include "KoTextDocument.h"
+#include <koffice_export.h>
+
+class KoSavingContext;
+class KCommand;
+class KoTextFormat;
+class QProgressDialog;
+class KoLinkVariable;
+class KoVariable;
+
+//#define TIMING_FORMAT
+//#include <qdatetime.h>
+
+/**
+ * The KoTextFormatInterface is a pure interface that allows access to the
+ * "current text format". This is implemented by both KoTextObject and KoTextView.
+ * For KoTextView, it's the format under the cursor.
+ * For KoTextObject, it's the global format.
+ * By changing this format and calling setFormat (with the appropriate flags),
+ * it's possible to implement "setBold", "setItalic" etc. only once, whether it applies
+ * to a text selection or to complete text objects.
+ */
+class KOTEXT_EXPORT KoTextFormatInterface
+{
+public:
+ KoTextFormatInterface() {}
+ virtual ~KoTextFormatInterface() {}
+
+ /** Interface for accessing the current format */
+ virtual KoTextFormat * currentFormat() const = 0;
+
+ virtual bool rtl() const = 0;
+
+ /**
+ * Interface for setting the modified format
+ * @param format can be a temporary format
+ * @param zoomFont set to true if the font size was used-specified (e.g. in KoFontDia)
+ * @param flags see enum KoTextFormat::Flags
+ */
+ virtual KCommand *setFormatCommand( const KoTextFormat *format, int flags, bool zoomFont = false ) = 0;
+
+ /** Interface for accessing the current parag layout */
+ virtual const KoParagLayout * currentParagLayoutFormat() const = 0;
+
+ /** Interface for changing the paragraph layout.
+ * @param newLayout pointer to the new layout to apply
+ * @param flags one of the KoParagLayout flags
+ * @param marginIndex type of margin. Only used if flags==KoParagLayout::Margins
+ */
+ virtual KCommand *setParagLayoutFormatCommand( KoParagLayout *newLayout, int flags, int marginIndex=-1) = 0;
+
+ virtual KCommand *setChangeCaseOfTextCommand(KoChangeCaseDia::TypeOfCase _type)=0;
+
+ KoTextDocCommand *deleteTextCommand( KoTextDocument *textdoc, int id, int index, const QMemArray<KoTextStringChar> & str, const CustomItemsMap & customItemsMap, const QValueList<KoParagLayout> & oldParagLayouts );
+
+ void setParagLayoutFormat( KoParagLayout *newLayout,int flags, int marginIndex=-1);
+ void setFormat( KoTextFormat * newFormat, int flags, bool zoomFont = false );
+
+ // Warning: use the methods that return a command! The others just leak the commands away
+ //void setBold(bool on);
+ KCommand *setBoldCommand(bool on);
+ //void setItalic(bool on);
+ KCommand *setItalicCommand(bool on);
+ //void setUnderline(bool on);
+ KCommand *setUnderlineCommand(bool on);
+ //void setStrikeOut(bool on);
+ KCommand *setDoubleUnderlineCommand( bool on );
+ KCommand *setUnderlineColorCommand( const QColor &color );
+ KCommand *setStrikeOutCommand(bool on);
+ //void setTextColor(const QColor &color);
+ KCommand *setTextColorCommand(const QColor &color);
+ //void setPointSize( int s );
+ KCommand *setPointSizeCommand( int s );
+ //void setFamily(const QString &font);
+ KCommand *setFamilyCommand(const QString &font);
+ //void setTextSubScript(bool on);
+ KCommand *setTextSubScriptCommand(bool on);
+ //void setTextSuperScript(bool on);
+ KCommand *setTextSuperScriptCommand(bool on);
+
+ //void setDefaultFormat();
+ KCommand *setDefaultFormatCommand();
+
+ //void setTextBackgroundColor(const QColor &);
+ KCommand *setTextBackgroundColorCommand(const QColor &);
+
+ //void setAlign(int align);
+ KCommand *setAlignCommand(int align);
+
+ //void setMargin(QStyleSheetItem::Margin m, double margin);
+ KCommand *setMarginCommand(QStyleSheetItem::Margin m, double margin);
+
+ //void setTabList(const KoTabulatorList & tabList );
+ KCommand *setTabListCommand(const KoTabulatorList & tabList );
+
+ //void setBackgroundColor(const QColor & color );
+ KCommand *setBackgroundColorCommand(const QColor & color );
+
+ //void setCounter(const KoParagCounter & counter );
+ KCommand *setCounterCommand(const KoParagCounter & counter );
+
+ KCommand *setLanguageCommand(const QString &);
+
+ KCommand *setShadowTextCommand( double shadowDistanceX, double shadowDistanceY, const QColor& shadowColor );
+
+ KCommand *setHyphenationCommand( bool _b );
+
+
+ KCommand *setFontAttributeCommand( KoTextFormat::AttributeStyle _att);
+
+ KCommand *setRelativeTextSizeCommand( double _size );
+
+ KCommand *setOffsetFromBaseLineCommand( int _offset );
+
+ KCommand *setWordByWordCommand( bool _b );
+
+
+ QColor textColor() const;
+ QFont textFont() const;
+ QString textFontFamily()const;
+ QString language() const;
+ QColor textBackgroundColor()const;
+ QColor textUnderlineColor()const;
+
+ KoTextFormat::UnderlineType underlineType()const;
+ KoTextFormat::StrikeOutType strikeOutType()const;
+ KoTextFormat::UnderlineStyle underlineStyle()const;
+ KoTextFormat::StrikeOutStyle strikeOutStyle()const;
+
+
+
+ bool textUnderline()const;
+ bool textDoubleUnderline()const;
+
+ bool textBold()const;
+ bool textStrikeOut()const;
+ bool textItalic() const;
+ bool textSubScript() const;
+ bool textSuperScript() const;
+ double shadowDistanceX() const;
+ double shadowDistanceY() const;
+ QColor shadowColor() const;
+ KoTextFormat::AttributeStyle fontAttribute() const;
+ double relativeTextSize() const;
+ int offsetFromBaseLine()const;
+ bool wordByWord()const;
+ bool hyphenation()const;
+};
+
+/**
+ * The KoTextObject is the high-level object that contains a KoTextDocument
+ * (the list of paragraphs), and takes care of the operations on it (particularly
+ * the undo/redo commands).
+ * Editing the text isn't done by KoTextObject but by KoTextView (document/view design).
+ */
+class KOTEXT_EXPORT KoTextObject : public QObject, public KoTextFormatInterface
+{
+ Q_OBJECT
+public:
+ /** Constructor.
+ * This constructor creates the contained KoTextDocument automatically.
+ *
+ * @param zh the zoom handler (to be passed to the KoTextDocument ctor)
+ * @param defaultFont the font to use by default (see KoTextFormatCollection)
+ * @param defaultLanguage the language to use by default (see KoTextFormatCollection)
+ * @param defaultHyphenation the default setting for hyphenation (see KoTextFormatCollection)
+ * @param defaultStyle the style to use by default (initial pararaph, and when deleting a used style)
+ * @param tabStopWidth the global value for the tabstop width
+ * @param parent parent widget for this object
+ * @param name name for this object
+ *
+ */
+ KoTextObject( KoTextZoomHandler *zh, const QFont& defaultFont, const QString &defaultLanguage,
+ bool defaultHyphenation, KoParagStyle* defaultStyle, int tabStopWidth = -1,
+ QObject* parent = 0, const char *name = 0 );
+
+ /** Alternative constructor.
+ * This constructor allows to use a derived class from KoTextDocument.
+ *
+ * @param textdoc the text document to use in this text object. Ownership is transferred
+ * to the text object.
+ * @param defaultStyle the style to use by default (initial pararaph, and when deleting a used style)
+ * @param parent parent widget for this object
+ * @param name name for this object
+ */
+ KoTextObject( KoTextDocument *textdoc, KoParagStyle* defaultStyle,
+ QObject* parent = 0, const char *name = 0 );
+
+ virtual ~KoTextObject();
+
+
+ static const char * acceptSelectionMimeType();
+ /// Check if the mimesource @p mime provides one of the OASIS mimetypes,
+ /// and if so, return it. Otherwise return an empty string.
+ static QCString providesOasis( QMimeSource* mime );
+
+ void setNeedSpellCheck(bool b);
+ bool needSpellCheck() const { return m_needsSpellCheck;}
+ void setProtectContent(bool b) { m_protectContent = b; }
+ bool protectContent() const{ return m_protectContent;}
+ /**
+ * Return the text document contained in this KoTextObject
+ */
+ KoTextDocument *textDocument() const { return textdoc; }
+
+ void setAvailableHeight( int avail ) { m_availableHeight = avail; }
+ int availableHeight() const;
+
+ void undo();
+ void redo();
+ /** Terminate our current undo/redo info, to start with a new one */
+ void clearUndoRedoInfo();
+
+ /** return true if some text is selected */
+ bool hasSelection() const { return textdoc->hasSelection( KoTextDocument::Standard, true ); }
+ /** returns the selected text [without formatting] if hasSelection() */
+ QString selectedText( KoTextDocument::SelectionId selectionId = KoTextDocument::Standard ) const {
+ return textdoc->selectedText( selectionId );
+ }
+ /** returns true if the given selection has any custom item in it */
+ bool selectionHasCustomItems( KoTextDocument::SelectionId selectionId = KoTextDocument::Standard ) const;
+
+ enum InsertFlag {
+ DefaultInsertFlags = 0,
+ CheckNewLine = 1, /// < if true, the text to be inserted is checked for '\\n' (as a paragraph delimiter)
+ OverwriteMode = 2,
+ DoNotRemoveSelected = 4, ///< whether to remove selected text before
+ DoNotRepaint = 8 ///< usually we repaint in insert(), this allows to turn it off
+ };
+
+ /**
+ * The main "insert" method, including undo/redo creation/update.
+ *
+ * @param cursor the insertion point
+ * @param currentFormat the current textformat, to apply to the inserted text
+ * @param text the text to be inserted
+ * @param insertFlags flags, see InsertFlag
+ * @param commandName the name to give the undo/redo command if we haven't created it already
+ * @param customItemsMap the map of custom items to include in the new text
+ * @param selectionId which selection to use (See KoTextDocument::SelectionId)
+ */
+ void insert( KoTextCursor * cursor, KoTextFormat * currentFormat, const QString &text,
+ const QString & commandName,
+ KoTextDocument::SelectionId selectionId = KoTextDocument::Standard,
+ int insertFlags = DefaultInsertFlags, // KDE4: TODO use QFlags
+ CustomItemsMap customItemsMap = CustomItemsMap() );
+
+ /**
+ * Remove the text currently selected, including undo/redo creation/update.
+ * @param cursor the caret position
+ * @param selectionId which selection to remove (usually Standard)
+ * @param cmdName the name to give the undo/redo command, if we haven't created it already
+ * @param createUndoRedo create an undo history entry for this removal
+ */
+ void removeSelectedText( KoTextCursor * cursor, KoTextDocument::SelectionId selectionId = KoTextDocument::Standard,
+ const QString & cmdName = QString::null, bool createUndoRedo=true );
+
+ KCommand * replaceSelectionCommand( KoTextCursor * cursor, const QString & replacement,
+ const QString & cmdName,
+ KoTextDocument::SelectionId selectionId = KoTextDocument::Standard,
+ int insertFlags = DefaultInsertFlags, // KDE4: TODO use QFlags
+ CustomItemsMap customItemsMap = CustomItemsMap() );
+ KCommand * removeSelectedTextCommand( KoTextCursor * cursor, KoTextDocument::SelectionId selectionId, bool repaint = true );
+ KCommand* insertParagraphCommand( KoTextCursor * cursor );
+
+ /**
+ * Paste plain text at the given @p cursor
+ * @param cursor location to paste text
+ * @param text the text to paste
+ * @param currentFormat format to apply to the pasted text
+ * @param removeSelected @c true when pasting with the keyboard, but @c false when dropping text.
+ *
+ * @todo Can currentFormat be NULL?
+ * @todo Besides saying when removeSelected is @c true, perhaps explain
+ * what it does (presumably, removes the selection and replaces it
+ * with the pasted text).
+ */
+ void pasteText( KoTextCursor * cursor, const QString & text, KoTextFormat * currentFormat,
+ bool removeSelected );
+ void selectAll( bool select );
+
+ /** Highlighting support (for search/replace, spellchecking etc.).
+ * Don't forget to ensure the paragraph is visible.
+ */
+ void highlightPortion( KoTextParag * parag, int index, int length, bool repaint );
+ void removeHighlight( bool repaint );
+
+ /** Implementation of setFormatCommand from KoTextFormatInterface - apply change to the whole document */
+ KCommand *setFormatCommand( const KoTextFormat *format, int flags, bool zoomFont = false );
+
+ /** Set format changes on selection or current cursor.
+ Returns a command if the format was applied to a selection */
+ KCommand *setFormatCommand( KoTextCursor * cursor, KoTextFormat ** currentFormat, const KoTextFormat *format, int flags, bool zoomFont = false, KoTextDocument::SelectionId selectionId = KoTextDocument::Standard );
+
+ enum KeyboardAction { // keep in sync with QTextEdit
+ ActionBackspace,
+ ActionDelete,
+ ActionReturn,
+ ActionKill
+ };
+ /** Executes keyboard action @p action. This is normally called by
+ * a key event handler. */
+ void doKeyboardAction( KoTextCursor * cursor, KoTextFormat * & currentFormat, KeyboardAction action );
+
+ // -- Paragraph settings --
+ KCommand * setCounterCommand( KoTextCursor * cursor, const KoParagCounter & counter, KoTextDocument::SelectionId selectionId = KoTextDocument::Standard );
+ KCommand * setAlignCommand( KoTextCursor * cursor, int align , KoTextDocument::SelectionId selectionId = KoTextDocument::Standard);
+ KCommand * setLineSpacingCommand( KoTextCursor * cursor, double spacing, KoParagLayout::SpacingType _type,KoTextDocument::SelectionId selectionId = KoTextDocument::Standard );
+ KCommand * setBordersCommand( KoTextCursor * cursor, const KoBorder& leftBorder, const KoBorder& rightBorder, const KoBorder& topBorder, const KoBorder& bottomBorder, KoTextDocument::SelectionId selectionId = KoTextDocument::Standard );
+ KCommand * setJoinBordersCommand( KoTextCursor * cursor, bool join, KoTextDocument::SelectionId selectionId = KoTextDocument::Standard );
+ KCommand * setMarginCommand( KoTextCursor * cursor, QStyleSheetItem::Margin m, double margin, KoTextDocument::SelectionId selectionId = KoTextDocument::Standard);
+ KCommand* setTabListCommand( KoTextCursor * cursor,const KoTabulatorList & tabList , KoTextDocument::SelectionId selectionId = KoTextDocument::Standard );
+ KCommand* setBackgroundColorCommand( KoTextCursor * cursor,const QColor & color , KoTextDocument::SelectionId selectionId = KoTextDocument::Standard );
+
+ KCommand * setParagDirectionCommand( KoTextCursor * cursor, QChar::Direction d, KoTextDocument::SelectionId selectionId = KoTextDocument::Standard );
+
+ /**
+ * Apply a KoParagStyle to a selection.
+ * @param cursor the current cursor; used if there is no selection. Can be 0L if there is one.
+ * @param style the KoParagStyle to apply
+ * @param selectionId the id of the selection, usually Standard or Temp
+ * @param paragLayoutFlags which settings from the paragraph layout to apply
+ * @param formatFlags which settings from the text format to apply
+ * @param createUndoRedo if true, an undo/redo command will be created and emitted
+ * @param interactive if true, the text will be reformatted/repainted to show the new style
+ */
+ void applyStyle( KoTextCursor * cursor, const KoParagStyle * style,
+ KoTextDocument::SelectionId selectionId = KoTextDocument::Standard,
+ int paragLayoutFlags = KoParagLayout::All, int formatFlags = KoTextFormat::Format,
+ bool createUndoRedo = true, bool interactive = true );
+
+ /**
+ * Helper for applyStyle. Can also be called directly, so that the command isn't emitted,
+ * e.g. to put it into a macro-command.
+ * @return the command for 'apply style', or 0L if createUndoRedo is false.
+ */
+ KCommand* applyStyleCommand( KoTextCursor * cursor, const KoParagStyle * style,
+ KoTextDocument::SelectionId selectionId = KoTextDocument::Standard,
+ int paragLayoutFlags = KoParagLayout::All, int formatFlags = KoTextFormat::Format,
+ bool createUndoRedo = true, bool interactive = true );
+
+
+ /** Update the paragraph that use the given style, after this style was changed.
+ * The flags tell which changes should be applied.
+ * @param changed map of styles that have changed
+ */
+ void applyStyleChange( KoStyleChangeDefMap changed );
+ /** Set format changes on selection or current cursor.
+ Creates a command if the format was applied to a selection */
+ void setFormat( KoTextCursor * cursor, KoTextFormat ** currentFormat, KoTextFormat *format, int flags, bool zoomFont = false );
+
+
+ /**
+ * Support for treating the whole textobject as a single object
+ * Use this format for displaying the properties (font/color/...) of the object.
+ * Interface for accessing the current format
+ */
+ virtual KoTextFormat * currentFormat() const;
+
+ /**
+ * Use this format for displaying the properties (Align/counter/...) of the object
+ */
+ virtual const KoParagLayout * currentParagLayoutFormat() const;
+
+ virtual bool rtl() const;
+
+ /**
+ * Support for changing the format in the whole textobject
+ */
+ virtual KCommand *setParagLayoutFormatCommand( KoParagLayout *newLayout, int flags, int marginIndex=-1);
+
+ // common for setParagLayoutFormatCommand above and KoTextView::setParagLayoutFormatCommand
+ KCommand *setParagLayoutCommand( KoTextCursor * cursor, const KoParagLayout& paragLayout,
+ KoTextDocument::SelectionId selectionId, int paragLayoutFlags,
+ int marginIndex, bool createUndoRedo );
+ /**
+ * Support for changing the format in the whole textobject
+ */
+ virtual void setFormat( KoTextFormat * newFormat, int flags, bool zoomFont = false );
+
+ /** Return the user-visible font size for this format (i.e. LU to pt conversion) */
+ int docFontSize( KoTextFormat * format ) const;
+ /** Return the font size in LU, for this user-visible font size in pt */
+ int zoomedFontSize( int docFontSize ) const;
+
+ /** Set the bottom of the view - in LU */
+ void setViewArea( QWidget* w, int maxY );
+ /** Make sure that @p parag is formatted */
+ void ensureFormatted( KoTextParag * parag, bool emitAfterFormatting = true );
+ void setLastFormattedParag( KoTextParag *parag );
+
+ static QChar customItemChar() { return QChar( s_customItemChar ); }
+
+ // Qt should really have support for public signals
+ void emitHideCursor() { emit hideCursor(); }
+ void emitShowCursor() { emit showCursor(); }
+ void emitEnsureCursorVisible() { emit ensureCursorVisible(); }
+ void emitUpdateUI( bool updateFormat, bool force = false ) { emit updateUI( updateFormat, force ); }
+
+ void typingStarted();
+ void typingDone();
+
+ /**
+ * Abort the current formatMore() loop, or prevent the next one from starting.
+ * Use with care. This is e.g. for KWFootNoteVariable, so that it can do
+ * a frame layout before formatting the main text again.
+ * It is important to make sure that formatMore will be called again ;)
+ */
+ void abortFormatting();
+
+ void selectionChangedNotify( bool enableActions = true );
+
+ void emitNewCommand(KCommand *cmd);
+
+ virtual KCommand *setChangeCaseOfTextCommand(KoChangeCaseDia::TypeOfCase _type);
+
+ KCommand *changeCaseOfText(KoTextCursor *cursor, KoChangeCaseDia::TypeOfCase _type);
+ QString textChangedCase(const QString& _text, KoChangeCaseDia::TypeOfCase _type);
+ KCommand *changeCaseOfTextParag(int cursorPosStart, int cursorPosEnd,KoChangeCaseDia::TypeOfCase _type,KoTextCursor *cursor, KoTextParag *parag);
+
+ void loadOasisContent( const QDomElement &bodyElem, KoOasisContext& context, KoStyleCollection * styleColl );
+ void saveOasisContent( KoXmlWriter& writer, KoSavingContext& context ) const;
+
+ // Similar to KoTextDocument::loadOasisText but there's no newline inserted before the first paragraph
+ // or after the last one - so it's possible to paste just a few chars.
+ // It also handles m_lastFormatted
+ KoTextCursor pasteOasisText( const QDomElement &bodyElem, KoOasisContext& context,
+ KoTextCursor& cursor, KoStyleCollection * styleColl );
+
+#ifndef NDEBUG
+ void printRTDebug(int);
+#endif
+
+ bool statistics( QProgressDialog *progress, ulong & charsWithSpace, ulong & charsWithoutSpace, ulong & words, ulong & sentences, ulong & syllables, ulong & lines, bool selected );
+ int numberOfparagraphLineSelected( KoTextParag *parag);
+
+ /**
+ * Return the variable at the given point (in document coordinates), if any
+ */
+ KoVariable* variableAtPoint( const QPoint& iPoint ) const;
+
+ /**
+ * Return the variable at the given position, if any.
+ * Passing KoTextView's m_cursor here is usually wrong, index must come from the variablePosition
+ * value returned by KoTextCursor::place().
+ */
+ KoVariable* variableAtPosition( KoTextParag* parag, int index ) const;
+
+ enum ParagModifyType { AddChar = 0, RemoveChar = 1, ChangeFormat = 2 };
+
+signals:
+ /** Emitted by availableHeight() when the available height hasn't been
+ * calculated yet or is invalid. Connect to a slot that calls setAvailableHeight() */
+ void availableHeightNeeded();
+
+ /** Emitted by formatMore() after formatting a bunch of paragraphs.
+ * KWord uses this signal to check for things like 'I need to create a new page'
+ */
+ void afterFormatting( int bottom, KoTextParag* m_lastFormatted, bool* abort );
+
+ /**
+ * Emitted by formatMore() when formatting a "Head 1" paragraph.
+ * Used for the Section variable
+ */
+ void chapterParagraphFormatted( KoTextParag* parag );
+
+ /** Emitted by formatMore() when formatting the first paragraph.
+ */
+ void formattingFirstParag();
+
+ /** Emitted when a new command has been created and should be added to
+ * the main list of commands (usually in the KoDocument).
+ * Make sure to connect to that one, otherwise the commands will just leak away...
+ */
+ void newCommand( KCommand *cmd );
+
+ /** Tell the world that we'd like some repainting to happen */
+ void repaintChanged( KoTextObject * );
+
+ void hideCursor();
+ void showCursor();
+ /** Special hack for undo/redo - used by KoTextView */
+ void setCursor( KoTextCursor * cursor );
+ /** Emitted when the formatting under the cursor may have changed.
+ * The Edit object should re-read settings and update the UI. */
+ void updateUI( bool updateFormat, bool force = false );
+ /** Same thing, when the current format (of the edit object) was changed */
+ void showCurrentFormat();
+ /** The views should make sure the cursor is visible */
+ void ensureCursorVisible();
+ /** Tell the views that the selection changed (for cut/copy...) */
+ void selectionChanged( bool hasSelection );
+
+ void showFormatObject(const KoTextFormat &);
+
+ // Keeping track of text modifications - not emitted during loading/closing.
+ void paragraphCreated( KoTextParag* parag );
+ void paragraphModified( KoTextParag* parag, int /*ParagModifyType*/, int pos, int length );
+ void paragraphDeleted( KoTextParag* parag );
+
+public slots:
+ // The default arguments are those used by the formatTimer.
+ // The return value is used by ensureFormatted
+ bool formatMore( int count = 10, bool emitAfterFormatting = true );
+
+ void emitRepaintChanged() { emit repaintChanged( this ); }
+
+public: // made public for KWTextFrameSet...
+
+ /** This prepares undoRedoInfo for a paragraph formatting change
+ * If this does too much, we could pass an enum flag to it.
+ * But the main point is to avoid too much duplicated code */
+ void storeParagUndoRedoInfo( KoTextCursor * cursor, KoTextDocument::SelectionId selectionId = KoTextDocument::Standard );
+ /** Copies a formatted char, <parag, position>, into undoRedoInfo.text, at position @p index. */
+ void copyCharFormatting( KoTextParag *parag, int position, int index /*in text*/, bool moveCustomItems );
+ void readFormats( KoTextCursor &c1, KoTextCursor &c2, bool copyParagLayouts = false, bool moveCustomItems = false );
+
+ /**
+ * The undo-redo structure holds the _temporary_ information for the current
+ * undo/redo command. For instance, when typing "a" and then "b", we don't
+ * want a command for each letter. So we keep adding info to this structure,
+ * and when the user does something else and we call clear(), it's at that
+ * point that the command is created.
+ * See also the place-holder command (in fact an empty macro-command is created
+ * right at the beginning, so that it's possible to undo at any time).
+ */
+ struct KOTEXT_EXPORT UndoRedoInfo { // borrowed from QTextEdit
+ enum Type { Invalid, Insert, Delete, Return, RemoveSelected };
+ UndoRedoInfo( KoTextObject* textobj );
+ ~UndoRedoInfo() {}
+ void clear();
+ bool valid() const;
+
+ KoTextString text; // storage for formatted text
+ int id; // id of first parag
+ int eid; // id of last parag
+ int index; // index (for insertion/deletion)
+ Type type; // type of command
+ KoTextObject* textobj; // parent
+ CustomItemsMap customItemsMap; // character position -> qtextcustomitem
+ QValueList<KoParagLayout> oldParagLayouts;
+ KoParagLayout newParagLayout;
+ KoTextCursor *cursor; // basically a "mark" of the view that started this undo/redo info
+ // If the view changes, the next call to checkUndoRedoInfo will terminate the previous view's edition
+ KMacroCommand *placeHolderCmd;
+ };
+ /**
+ * Creates a place holder for a command that will be completed later on.
+ * This is used for the insert and delete text commands, which are
+ * build delayed (see the UndoRedoInfo structure), in order to
+ * have an entry in the undo/redo history asap.
+ */
+ void newPlaceHolderCommand( const QString & name );
+ void checkUndoRedoInfo( KoTextCursor * cursor, UndoRedoInfo::Type t );
+
+ /** for KWTextFrameSet */
+ UndoRedoInfo & undoRedoInfoStruct() { return undoRedoInfo; }
+
+ void setVisible(bool vis) { m_visible=vis; }
+ bool isVisible() const { return m_visible; }
+
+private slots:
+ void doChangeInterval();
+ /** This is done in a singleShot timer because of macro-commands.
+ * We need to do this _after_ terminating the macro command (for instance
+ * in the case of undoing a floating-frame insertion, we need to delete
+ * the frame first) */
+ void slotAfterUndoRedo();
+ void slotParagraphModified(KoTextParag *, int, int , int);
+ void slotParagraphCreated(KoTextParag *);
+ void slotParagraphDeleted(KoTextParag *);
+private:
+ void init();
+
+private:
+ class KoTextObjectPrivate;
+ KoTextObjectPrivate* d;
+ /** The text document, containing the paragraphs */
+ KoTextDocument *textdoc;
+
+ /** The style to use by default (initial pararaph, and when deleting a used style)
+ TODO: check that we support 0 */
+ KoParagStyle* m_defaultStyle;
+
+ bool m_visible;
+
+ /** Currently built undo/redo info */
+ UndoRedoInfo undoRedoInfo;
+
+ /** All paragraphs up to this one are guaranteed to be formatted.
+ The idle-time formatting (formatMore()) pushes this forward.
+ Any operation on a paragraph pushes this backward. */
+ KoTextParag *m_lastFormatted;
+ /** Idle-time formatting */
+ QTimer *formatTimer, *changeIntervalTimer;
+ int interval;
+
+ /** The total height available for our text object at the moment */
+ int m_availableHeight;
+ /** Store the "needs" of each view */
+ QMap<QWidget *, int> m_mapViewAreas;
+
+ //QPtrDict<int> m_origFontSizes; // Format -> doc font size.
+
+ bool m_highlightSelectionAdded;
+
+#ifdef TIMING_FORMAT
+ QTime m_time;
+#endif
+
+ static const char s_customItemChar;
+ bool m_needsSpellCheck;
+ bool m_protectContent;
+};
+
+#endif
diff --git a/lib/kotext/KoTextParag.cpp b/lib/kotext/KoTextParag.cpp
new file mode 100644
index 00000000..d28bc110
--- /dev/null
+++ b/lib/kotext/KoTextParag.cpp
@@ -0,0 +1,3305 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2006 David Faure <faure@kde.org>
+ Copyright (C) 2005-2006 Martin Ellis <martin.ellis@kdemail.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextParag.h"
+#include "KoTextDocument.h"
+#include "KoParagCounter.h"
+#include "KoTextZoomHandler.h"
+#include "KoStyleCollection.h"
+#include "KoVariable.h"
+#include <KoOasisContext.h>
+#include <KoXmlWriter.h>
+#include <KoGenStyles.h>
+#include <KoDom.h>
+#include <KoXmlNS.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kglobalsettings.h>
+#include <assert.h>
+
+//#define DEBUG_PAINT
+
+KoTextParag::KoTextParag( KoTextDocument *d, KoTextParag *pr, KoTextParag *nx, bool updateIds )
+ : p( pr ), n( nx ), doc( d ),
+ m_invalid( true ),
+ changed( FALSE ),
+ fullWidth( TRUE ),
+ newLinesAllowed( TRUE ), // default in kotext
+ visible( TRUE ), //breakable( TRUE ),
+ movedDown( FALSE ),
+ m_toc( false ),
+ align( 0 ),
+ m_lineChanged( -1 ),
+ m_wused( 0 ),
+ mSelections( 0 ),
+ mFloatingItems( 0 ),
+ tArray( 0 )
+{
+ defFormat = formatCollection()->defaultFormat();
+ /*if ( !doc ) {
+ tabStopWidth = defFormat->width( 'x' ) * 8;
+ commandHistory = new KoTextDocCommandHistory( 100 );
+ }*/
+
+ if ( p ) {
+ p->n = this;
+ }
+ if ( n ) {
+ n->p = this;
+ }
+
+ if ( !p && doc )
+ doc->setFirstParag( this );
+ if ( !n && doc )
+ doc->setLastParag( this );
+
+ //firstFormat = TRUE; //// unused
+ //firstPProcess = TRUE;
+ //state = -1;
+ //needPreProcess = FALSE;
+
+ if ( p )
+ id = p->id + 1;
+ else
+ id = 0;
+ if ( n && updateIds ) {
+ KoTextParag *s = n;
+ while ( s ) {
+ s->id = s->p->id + 1;
+ //s->lm = s->rm = s->tm = s->bm = -1, s->flm = -1;
+ s = s->n;
+ }
+ }
+
+ str = new KoTextString();
+ str->insert( 0, " ", formatCollection()->defaultFormat() );
+ setJoinBorder( true );
+}
+
+KoTextParag::~KoTextParag()
+{
+ //kdDebug(32500) << "KoTextParag::~KoTextParag " << this << " id=" << paragId() << endl;
+
+ // #107961: unregister custom items; KoTextString::clear() will delete them
+ const int len = str->length();
+ for ( int i = 0; i < len; ++i ) {
+ KoTextStringChar *c = at( i );
+ if ( doc && c->isCustom() ) {
+ doc->unregisterCustomItem( c->customItem(), this );
+ //removeCustomItem();
+ }
+ }
+
+ delete str;
+ str = 0;
+// if ( doc && p == doc->minwParag ) {
+// doc->minwParag = 0;
+// doc->minw = 0;
+// }
+ if ( !doc ) {
+ //delete pFormatter;
+ //delete commandHistory;
+ }
+ delete [] tArray;
+ //delete eData;
+ QMap<int, KoTextParagLineStart*>::Iterator it = lineStarts.begin();
+ for ( ; it != lineStarts.end(); ++it )
+ delete *it;
+ if ( mSelections ) delete mSelections;
+ if ( mFloatingItems ) delete mFloatingItems;
+
+ if (p)
+ p->setNext(n);
+ if (n)
+ n->setPrev(p);
+
+ //// kotext
+ if ( doc && !doc->isDestroying() )
+ {
+ doc->informParagraphDeleted( this );
+ }
+ //kdDebug(32500) << "KoTextParag::~KoTextParag " << this << " done" << endl;
+ ////
+}
+
+void KoTextParag::setNext( KoTextParag *s )
+{
+ n = s;
+ if ( !n && doc )
+ doc->setLastParag( this );
+}
+
+void KoTextParag::setPrev( KoTextParag *s )
+{
+ p = s;
+ if ( !p && doc )
+ doc->setFirstParag( this );
+}
+
+void KoTextParag::invalidate( int /*chr, ignored*/ )
+{
+ m_invalid = true;
+#if 0
+ if ( invalid < 0 )
+ invalid = chr;
+ else
+ invalid = QMIN( invalid, chr );
+#endif
+}
+
+void KoTextParag::setChanged( bool b, bool /*recursive*/ )
+{
+ changed = b;
+ m_lineChanged = -1; // all
+}
+
+void KoTextParag::setLineChanged( short int line )
+{
+ if ( m_lineChanged == -1 ) {
+ if ( !changed ) // only if the whole parag wasn't "changed" already
+ m_lineChanged = line;
+ }
+ else
+ m_lineChanged = QMIN( m_lineChanged, line ); // also works if line=-1
+ changed = true;
+ //kdDebug(32500) << "KoTextParag::setLineChanged line=" << line << " -> m_lineChanged=" << m_lineChanged << endl;
+}
+
+void KoTextParag::insert( int index, const QString &s )
+{
+ str->insert( index, s, formatCollection()->defaultFormat() );
+ invalidate( index );
+ //needPreProcess = TRUE;
+}
+
+void KoTextParag::truncate( int index )
+{
+ str->truncate( index );
+ insert( length(), " " );
+ //needPreProcess = TRUE;
+}
+
+void KoTextParag::remove( int index, int len )
+{
+ if ( index + len - str->length() > 0 )
+ return;
+ for ( int i = index; i < index + len; ++i ) {
+ KoTextStringChar *c = at( i );
+ if ( doc && c->isCustom() ) {
+ doc->unregisterCustomItem( c->customItem(), this );
+ //removeCustomItem();
+ }
+ }
+ str->remove( index, len );
+ invalidate( 0 );
+ //needPreProcess = TRUE;
+}
+
+void KoTextParag::join( KoTextParag *s )
+{
+ //kdDebug(32500) << "KoTextParag::join this=" << paragId() << " (length " << length() << ") with " << s->paragId() << " (length " << s->length() << ")" << endl;
+ int oh = r.height() + s->r.height();
+ n = s->n;
+ if ( n )
+ n->p = this;
+ else if ( doc )
+ doc->setLastParag( this );
+
+ int start = str->length();
+ if ( length() > 0 && at( length() - 1 )->c == ' ' ) {
+ remove( length() - 1, 1 );
+ --start;
+ }
+ append( s->str->toString(), TRUE );
+
+ for ( int i = 0; i < s->length(); ++i ) {
+ if ( doc->useFormatCollection() ) {
+ s->str->at( i ).format()->addRef();
+ str->setFormat( i + start, s->str->at( i ).format(), TRUE );
+ }
+ if ( s->str->at( i ).isCustom() ) {
+ KoTextCustomItem * item = s->str->at( i ).customItem();
+ str->at( i + start ).setCustomItem( item );
+ s->str->at( i ).loseCustomItem();
+ doc->unregisterCustomItem( item, s ); // ### missing in QRT
+ doc->registerCustomItem( item, this );
+ }
+ }
+ Q_ASSERT(str->at(str->length()-1).c == ' ');
+
+ /*if ( !extraData() && s->extraData() ) {
+ setExtraData( s->extraData() );
+ s->setExtraData( 0 );
+ } else if ( extraData() && s->extraData() ) {
+ extraData()->join( s->extraData() );
+ }*/
+ delete s;
+ invalidate( 0 );
+ //// kotext
+ invalidateCounters();
+ ////
+ r.setHeight( oh );
+ //needPreProcess = TRUE;
+ if ( n ) {
+ KoTextParag *s = n;
+ while ( s ) {
+ s->id = s->p->id + 1;
+ //s->state = -1;
+ //s->needPreProcess = TRUE;
+ s->changed = TRUE;
+ s = s->n;
+ }
+ }
+ format();
+ //state = -1;
+}
+
+void KoTextParag::move( int &dy )
+{
+ //kdDebug(32500) << "KoTextParag::move paragId=" << paragId() << " dy=" << dy << endl;
+ if ( dy == 0 )
+ return;
+ changed = TRUE;
+ r.moveBy( 0, dy );
+ if ( mFloatingItems ) {
+ for ( KoTextCustomItem *i = mFloatingItems->first(); i; i = mFloatingItems->next() ) {
+ i->finalize();
+ }
+ }
+ //if ( p )
+ // p->lastInFrame = TRUE; // Qt does this, but the loop at the end of format() calls move a lot!
+
+ movedDown = FALSE;
+
+ // do page breaks if required
+ if ( doc && doc->isPageBreakEnabled() ) {
+ int shift;
+ if ( ( shift = doc->formatter()->formatVertically( doc, this ) ) ) {
+ if ( p )
+ p->setChanged( TRUE );
+ dy += shift;
+ }
+ }
+}
+
+void KoTextParag::format( int start, bool doMove )
+{
+ if ( !str || str->length() == 0 || !formatter() )
+ return;
+
+ if ( isValid() )
+ return;
+
+ //kdDebug(32500) << "KoTextParag::format " << this << " id:" << paragId() << endl;
+
+ r.moveTopLeft( QPoint( documentX(), p ? p->r.y() + p->r.height() : documentY() ) );
+ //if ( p )
+ // p->lastInFrame = FALSE;
+
+ movedDown = FALSE;
+ bool formattedAgain = FALSE;
+
+ formatAgain:
+ r.setWidth( documentWidth() );
+
+ // Not really useful....
+ if ( doc && mFloatingItems ) {
+ for ( KoTextCustomItem *i = mFloatingItems->first(); i; i = mFloatingItems->next() ) {
+ if ( i->placement() == KoTextCustomItem::PlaceRight )
+ i->move( r.x() + r.width() - i->width, r.y() );
+ else
+ i->move( i->x(), r.y() );
+ }
+ }
+ QMap<int, KoTextParagLineStart*> oldLineStarts = lineStarts;
+ lineStarts.clear();
+ int y;
+ bool formatterWorked = formatter()->format( doc, this, start, oldLineStarts, y, m_wused );
+
+ // It can't happen that width < minimumWidth -- hopefully.
+ //r.setWidth( QMAX( r.width(), formatter()->minimumWidth() ) );
+ //m_minw = formatter()->minimumWidth();
+
+ QMap<int, KoTextParagLineStart*>::Iterator it = oldLineStarts.begin();
+
+ for ( ; it != oldLineStarts.end(); ++it )
+ delete *it;
+
+/* if ( hasBorder() || str->isRightToLeft() )
+ ////kotext: border extends to doc width
+ //// and, bidi parags might have a counter, which will be right-aligned...
+ {
+ setWidth( textDocument()->width() - 1 );
+ }
+ else*/
+ {
+ if ( lineStarts.count() == 1 ) { //&& ( !doc || doc->flow()->isEmpty() ) ) {
+// kotext: for proper parag borders, we want all parags to be as wide as linestart->w
+/* if ( !str->isBidi() ) {
+ KoTextStringChar *c = &str->at( str->length() - 1 );
+ r.setWidth( c->x + c->width );
+ } else*/ {
+ r.setWidth( lineStarts[0]->w );
+ }
+ }
+ if ( newLinesAllowed ) {
+ it = lineStarts.begin();
+ int usedw = 0; int lineid = 0;
+ for ( ; it != lineStarts.end(); ++it, ++lineid ) {
+ usedw = QMAX( usedw, (*it)->w );
+ }
+ if ( r.width() <= 0 ) {
+ // if the user specifies an invalid rect, this means that the
+ // bounding box should grow to the width that the text actually
+ // needs
+ r.setWidth( usedw );
+ } else {
+ r.setWidth( QMIN( usedw, r.width() ) );
+ }
+ }
+ }
+
+ if ( y != r.height() )
+ r.setHeight( y );
+
+ if ( !visible )
+ r.setHeight( 0 );
+
+ // do page breaks if required
+ if ( doc && doc->isPageBreakEnabled() ) {
+ int shift = doc->formatter()->formatVertically( doc, this );
+ //kdDebug(32500) << "formatVertically returned shift=" << shift << endl;
+ if ( shift && !formattedAgain ) {
+ formattedAgain = TRUE;
+ goto formatAgain;
+ }
+ }
+
+ if ( doc )
+ doc->formatter()->postFormat( this );
+
+ if ( n && doMove && n->isValid() && r.y() + r.height() != n->r.y() ) {
+ //kdDebug(32500) << "r=" << r << " n->r=" << n->r << endl;
+ int dy = ( r.y() + r.height() ) - n->r.y();
+ KoTextParag *s = n;
+ bool makeInvalid = false; //p && p->lastInFrame;
+ //kdDebug(32500) << "might move of dy=" << dy << ". previous's lastInFrame (=makeInvalid): " << makeInvalid << endl;
+ while ( s && dy ) {
+ if ( s->movedDown ) { // (not in QRT) : moved down -> invalidate and stop moving down
+ s->invalidate( 0 ); // (there is no point in moving down a parag that has a frame break...)
+ break;
+ }
+ if ( !s->isFullWidth() )
+ makeInvalid = TRUE;
+ if ( makeInvalid )
+ s->invalidate( 0 );
+ s->move( dy );
+ //if ( s->lastInFrame )
+ // makeInvalid = TRUE;
+ s = s->n;
+ }
+ }
+
+//#define DEBUG_CI_PLACEMENT
+ if ( mFloatingItems ) {
+#ifdef DEBUG_CI_PLACEMENT
+ kdDebug(32500) << lineStarts.count() << " lines" << endl;
+#endif
+ // Place custom items - after the formatting is finished
+ int len = length();
+ int line = -1;
+ int lineY = 0; // the one called "cy" in other algos
+ int baseLine = 0;
+ QMap<int, KoTextParagLineStart*>::Iterator it = lineStarts.begin();
+ for ( int i = 0 ; i < len; ++i ) {
+ KoTextStringChar *chr = &str->at( i );
+ if ( chr->lineStart ) {
+ ++line;
+ if ( line > 0 )
+ ++it;
+ lineY = (*it)->y;
+ baseLine = (*it)->baseLine;
+#ifdef DEBUG_CI_PLACEMENT
+ kdDebug(32500) << "New line (" << line << "): lineStart=" << (*it) << " lineY=" << lineY << " baseLine=" << baseLine << " height=" << (*it)->h << endl;
+#endif
+ }
+ if ( chr->isCustom() ) {
+ int x = chr->x;
+ KoTextCustomItem* item = chr->customItem();
+ Q_ASSERT( baseLine >= item->ascent() ); // something went wrong in KoTextFormatter if this isn't the case
+ int y = lineY + baseLine - item->ascent();
+#ifdef DEBUG_CI_PLACEMENT
+ kdDebug(32500) << "Custom item: i=" << i << " x=" << x << " lineY=" << lineY << " baseLine=" << baseLine << " ascent=" << item->ascent() << " -> y=" << y << endl;
+#endif
+ item->move( x, y );
+ item->finalize();
+ }
+ }
+ }
+
+ //firstFormat = FALSE; //// unused
+ if ( formatterWorked ) // only if it worked, i.e. we had some width to format it
+ {
+ m_invalid = false;
+ }
+ changed = TRUE;
+ //#### str->setTextChanged( FALSE );
+}
+
+int KoTextParag::lineHeightOfChar( int i, int *bl, int *y ) const
+{
+ if ( !isValid() )
+ ( (KoTextParag*)this )->format();
+
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.end();
+ --it;
+ for ( ;; ) {
+ if ( i >= it.key() ) {
+ if ( bl )
+ *bl = ( *it )->baseLine;
+ if ( y )
+ *y = ( *it )->y;
+ return ( *it )->h;
+ }
+ if ( it == lineStarts.begin() )
+ break;
+ --it;
+ }
+
+ kdWarning(32500) << "KoTextParag::lineHeightOfChar: couldn't find lh for " << i << endl;
+ return 15;
+}
+
+KoTextStringChar *KoTextParag::lineStartOfChar( int i, int *index, int *line ) const
+{
+ if ( !isValid() )
+ ( (KoTextParag*)this )->format();
+
+ int l = (int)lineStarts.count() - 1;
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.end();
+ --it;
+ for ( ;; ) {
+ if ( i >= it.key() ) {
+ if ( index )
+ *index = it.key();
+ if ( line )
+ *line = l;
+ return &str->at( it.key() );
+ }
+ if ( it == lineStarts.begin() )
+ break;
+ --it;
+ --l;
+ }
+
+ kdWarning(32500) << "KoTextParag::lineStartOfChar: couldn't find " << i << endl;
+ return 0;
+}
+
+int KoTextParag::lines() const
+{
+ if ( !isValid() )
+ ( (KoTextParag*)this )->format();
+
+ return (int)lineStarts.count();
+}
+
+KoTextStringChar *KoTextParag::lineStartOfLine( int line, int *index ) const
+{
+ if ( !isValid() )
+ ( (KoTextParag*)this )->format();
+
+ if ( line >= 0 && line < (int)lineStarts.count() ) {
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.begin();
+ while ( line-- > 0 )
+ ++it;
+ int i = it.key();
+ if ( index )
+ *index = i;
+ return &str->at( i );
+ }
+
+ kdWarning(32500) << "KoTextParag::lineStartOfLine: couldn't find " << line << endl;
+ return 0;
+}
+
+int KoTextParag::leftGap() const
+{
+ if ( !isValid() )
+ ( (KoTextParag*)this )->format();
+
+ int line = 0;
+ int x = str->at(0).x; /* set x to x of first char */
+ if ( str->isBidi() ) {
+ for ( int i = 1; i < str->length(); ++i )
+ x = QMIN(x, str->at(i).x);
+ return x;
+ }
+
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.begin();
+ while (line < (int)lineStarts.count()) {
+ int i = it.key(); /* char index */
+ x = QMIN(x, str->at(i).x);
+ ++it;
+ ++line;
+ }
+ return x;
+}
+
+void KoTextParag::setFormat( int index, int len, const KoTextFormat *_f, bool useCollection, int flags )
+{
+ Q_ASSERT( useCollection ); // just for info
+ if ( index < 0 )
+ index = 0;
+ if ( index > str->length() - 1 )
+ index = str->length() - 1;
+ if ( index + len >= str->length() )
+ len = str->length() - index;
+
+ KoTextFormatCollection *fc = 0;
+ if ( useCollection )
+ fc = formatCollection();
+ KoTextFormat *of;
+ for ( int i = 0; i < len; ++i ) {
+ of = str->at( i + index ).format();
+ if ( !changed && _f->key() != of->key() )
+ changed = TRUE;
+ // Check things that need the textformatter to run
+ // (e.g. not color changes)
+ // ######## Is this test exhaustive?
+ if ( m_invalid == false &&
+ ( _f->font().family() != of->font().family() ||
+ _f->pointSize() != of->pointSize() ||
+ _f->font().weight() != of->font().weight() ||
+ _f->font().italic() != of->font().italic() ||
+ _f->vAlign() != of->vAlign() ||
+ _f->relativeTextSize() != of->relativeTextSize() ||
+ _f->offsetFromBaseLine() != of->offsetFromBaseLine() ||
+ _f->wordByWord() != of->wordByWord() ||
+ _f->attributeFont() != of->attributeFont() ||
+ _f->language() != of->language() ||
+ _f->hyphenation() != of->hyphenation() ||
+ _f->shadowDistanceX() != of->shadowDistanceX() ||
+ _f->shadowDistanceY() != of->shadowDistanceY()
+ ) ) {
+ invalidate( 0 );
+ }
+ if ( flags == -1 || flags == KoTextFormat::Format || !fc ) {
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " KoTextParag::setFormat, will use format(f) " << f << " " << _f->key() << endl;
+#endif
+ KoTextFormat* f = fc ? fc->format( _f ) : const_cast<KoTextFormat *>( _f );
+ str->setFormat( i + index, f, useCollection, true );
+ } else {
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " KoTextParag::setFormat, will use format(of,f,flags) of=" << of << " " << of->key() << ", f=" << _f << " " << _f->key() << endl;
+#endif
+ KoTextFormat *fm = fc->format( of, _f, flags );
+#ifdef DEBUG_COLLECTION
+ kdDebug(32500) << " KoTextParag::setFormat, format(of,f,flags) returned " << fm << " " << fm->key() << " " << endl;
+#endif
+ str->setFormat( i + index, fm, useCollection );
+ }
+ }
+}
+
+void KoTextParag::drawCursorDefault( QPainter &painter, KoTextCursor *cursor, int curx, int cury, int curh, const QColorGroup &cg )
+{
+ painter.fillRect( QRect( curx, cury, 1, curh ), cg.color( QColorGroup::Text ) );
+ painter.save();
+ if ( str->isBidi() ) {
+ const int d = 4;
+ if ( at( cursor->index() )->rightToLeft ) {
+ painter.setPen( Qt::black );
+ painter.drawLine( curx, cury, curx - d / 2, cury + d / 2 );
+ painter.drawLine( curx, cury + d, curx - d / 2, cury + d / 2 );
+ } else {
+ painter.setPen( Qt::black );
+ painter.drawLine( curx, cury, curx + d / 2, cury + d / 2 );
+ painter.drawLine( curx, cury + d, curx + d / 2, cury + d / 2 );
+ }
+ }
+ painter.restore();
+}
+
+int *KoTextParag::tabArray() const
+{
+ int *ta = tArray;
+ if ( !ta && doc )
+ ta = doc->tabArray();
+ return ta;
+}
+
+int KoTextParag::nextTabDefault( int, int x )
+{
+ int *ta = tArray;
+ //if ( doc ) {
+ if ( !ta )
+ ta = doc->tabArray();
+ int tabStopWidth = doc->tabStopWidth();
+ //}
+ if ( tabStopWidth != 0 )
+ return tabStopWidth*(x/tabStopWidth+1);
+ else
+ return x;
+}
+
+KoTextFormatCollection *KoTextParag::formatCollection() const
+{
+ if ( doc )
+ return doc->formatCollection();
+ //if ( !qFormatCollection )
+ // qFormatCollection = new KoTextFormatCollection;
+ //return qFormatCollection;
+ return 0L;
+}
+
+void KoTextParag::show()
+{
+ if ( visible || !doc )
+ return;
+ visible = TRUE;
+}
+
+void KoTextParag::hide()
+{
+ if ( !visible || !doc )
+ return;
+ visible = FALSE;
+}
+
+void KoTextParag::setDirection( QChar::Direction d )
+{
+ if ( str && str->direction() != d ) {
+ str->setDirection( d );
+ invalidate( 0 );
+ //// kotext
+ m_layout.direction = d;
+ invalidateCounters(); // #47178
+ ////
+ }
+}
+
+QChar::Direction KoTextParag::direction() const
+{
+ return (str ? str->direction() : QChar::DirON );
+}
+
+void KoTextParag::setSelection( int id, int start, int end )
+{
+ QMap<int, KoTextParagSelection>::ConstIterator it = selections().find( id );
+ if ( it != mSelections->end() ) {
+ if ( start == ( *it ).start && end == ( *it ).end )
+ return;
+ }
+
+ KoTextParagSelection sel;
+ sel.start = start;
+ sel.end = end;
+ (*mSelections)[ id ] = sel;
+ setChanged( TRUE, TRUE );
+}
+
+void KoTextParag::removeSelection( int id )
+{
+ if ( !hasSelection( id ) )
+ return;
+ if ( mSelections )
+ mSelections->remove( id );
+ setChanged( TRUE, TRUE );
+}
+
+int KoTextParag::selectionStart( int id ) const
+{
+ if ( !mSelections )
+ return -1;
+ QMap<int, KoTextParagSelection>::ConstIterator it = mSelections->find( id );
+ if ( it == mSelections->end() )
+ return -1;
+ return ( *it ).start;
+}
+
+int KoTextParag::selectionEnd( int id ) const
+{
+ if ( !mSelections )
+ return -1;
+ QMap<int, KoTextParagSelection>::ConstIterator it = mSelections->find( id );
+ if ( it == mSelections->end() )
+ return -1;
+ return ( *it ).end;
+}
+
+bool KoTextParag::hasSelection( int id ) const
+{
+ if ( !mSelections )
+ return FALSE;
+ QMap<int, KoTextParagSelection>::ConstIterator it = mSelections->find( id );
+ if ( it == mSelections->end() )
+ return FALSE;
+ return ( *it ).start != ( *it ).end || length() == 1;
+}
+
+bool KoTextParag::fullSelected( int id ) const
+{
+ if ( !mSelections )
+ return FALSE;
+ QMap<int, KoTextParagSelection>::ConstIterator it = mSelections->find( id );
+ if ( it == mSelections->end() )
+ return FALSE;
+ return ( *it ).start == 0 && ( *it ).end == str->length() - 1;
+}
+
+int KoTextParag::lineY( int l ) const
+{
+ if ( l > (int)lineStarts.count() - 1 ) {
+ kdWarning(32500) << "KoTextParag::lineY: line " << l << " out of range!" << endl;
+ return 0;
+ }
+
+ if ( !isValid() )
+ ( (KoTextParag*)this )->format();
+
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.begin();
+ while ( l-- > 0 )
+ ++it;
+ return ( *it )->y;
+}
+
+int KoTextParag::lineBaseLine( int l ) const
+{
+ if ( l > (int)lineStarts.count() - 1 ) {
+ kdWarning(32500) << "KoTextParag::lineBaseLine: line " << l << " out of range!" << endl;
+ return 10;
+ }
+
+ if ( !isValid() )
+ ( (KoTextParag*)this )->format();
+
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.begin();
+ while ( l-- > 0 )
+ ++it;
+ return ( *it )->baseLine;
+}
+
+int KoTextParag::lineHeight( int l ) const
+{
+ if ( l > (int)lineStarts.count() - 1 ) {
+ kdWarning(32500) << "KoTextParag::lineHeight: line " << l << " out of range!" << endl;
+ return 15;
+ }
+
+ if ( !isValid() )
+ ( (KoTextParag*)this )->format();
+
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.begin();
+ while ( l-- > 0 )
+ ++it;
+ return ( *it )->h;
+}
+
+void KoTextParag::lineInfo( int l, int &y, int &h, int &bl ) const
+{
+ if ( l > (int)lineStarts.count() - 1 ) {
+ kdWarning(32500) << "KoTextParag::lineInfo: line " << l << " out of range!" << endl;
+ kdDebug(32500) << (int)lineStarts.count() - 1 << " " << l << endl;
+ y = 0;
+ h = 15;
+ bl = 10;
+ return;
+ }
+
+ if ( !isValid() )
+ ( (KoTextParag*)this )->format();
+
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.begin();
+ while ( l-- > 0 )
+ ++it;
+ y = ( *it )->y;
+ h = ( *it )->h;
+ bl = ( *it )->baseLine;
+}
+
+uint KoTextParag::alignment() const
+{
+ return align;
+}
+
+void KoTextParag::setFormat( KoTextFormat *fm )
+{
+#if 0
+ bool doUpdate = FALSE;
+ if (defFormat && (defFormat != formatCollection()->defaultFormat()))
+ doUpdate = TRUE;
+#endif
+ defFormat = formatCollection()->format( fm );
+#if 0
+ if ( !doUpdate )
+ return;
+ for ( int i = 0; i < length(); ++i ) {
+ if ( at( i )->format()->styleName() == defFormat->styleName() )
+ at( i )->format()->updateStyle();
+ }
+#endif
+}
+
+KoTextFormatterBase *KoTextParag::formatter() const
+{
+ if ( doc )
+ return doc->formatter();
+ return 0;
+}
+
+/*int KoTextParag::minimumWidth() const
+{
+ //return doc ? doc->minimumWidth() : 0;
+ return m_minw;
+}*/
+
+int KoTextParag::widthUsed() const
+{
+ return m_wused;
+}
+
+void KoTextParag::setTabArray( int *a )
+{
+ delete [] tArray;
+ tArray = a;
+}
+
+void KoTextParag::setTabStops( int tw )
+{
+ if ( doc )
+ doc->setTabStops( tw );
+ //else
+ // tabStopWidth = tw;
+}
+
+QMap<int, KoTextParagSelection> &KoTextParag::selections() const
+{
+ if ( !mSelections )
+ ((KoTextParag *)this)->mSelections = new QMap<int, KoTextParagSelection>;
+ return *mSelections;
+}
+
+QPtrList<KoTextCustomItem> &KoTextParag::floatingItems() const
+{
+ if ( !mFloatingItems )
+ ((KoTextParag *)this)->mFloatingItems = new QPtrList<KoTextCustomItem>;
+ return *mFloatingItems;
+}
+
+void KoTextCursor::setIndex( int i, bool /*restore*/ )
+{
+// Note: QRT doesn't allow to position the cursor at string->length
+// However we need it, when applying a style to a paragraph, so that
+// the trailing space gets the style change applied as well.
+// Obviously "right of the trailing space" isn't a good place for a real
+// cursor, but this needs to be checked somewhere else.
+ if ( i < 0 || i > string->length() ) {
+#if defined(QT_CHECK_RANGE)
+ kdWarning(32500) << "KoTextCursor::setIndex: " << i << " out of range" << endl;
+ //abort();
+#endif
+ i = i < 0 ? 0 : string->length() - 1;
+ }
+
+ tmpIndex = -1;
+ idx = i;
+}
+
+///////////////////////////////////// kotext extensions ///////////////////////
+
+// Return the counter associated with this paragraph.
+KoParagCounter *KoTextParag::counter()
+{
+ if ( !m_layout.counter )
+ return 0L;
+
+ // Garbage collect un-needed counters.
+ if ( m_layout.counter->numbering() == KoParagCounter::NUM_NONE
+ // [keep it for unnumbered outlines (the depth is useful)]
+ && ( !m_layout.style || !m_layout.style->isOutline() ) )
+ setNoCounter();
+ return m_layout.counter;
+}
+
+void KoTextParag::setMargin( QStyleSheetItem::Margin m, double _i )
+{
+ //kdDebug(32500) << "KoTextParag::setMargin " << m << " margin " << _i << endl;
+ m_layout.margins[m] = _i;
+ if ( m == QStyleSheetItem::MarginTop && prev() )
+ prev()->invalidate(0); // for top margin (post-1.1: remove this, not necessary anymore)
+ invalidate(0);
+}
+
+void KoTextParag::setMargins( const double * margins )
+{
+ for ( int i = 0 ; i < 5 ; ++i )
+ m_layout.margins[i] = margins[i];
+ invalidate(0);
+}
+
+void KoTextParag::setAlign( int align )
+{
+ Q_ASSERT( align <= Qt::AlignJustify );
+ align &= Qt::AlignHorizontal_Mask;
+ setAlignment( align );
+ m_layout.alignment = align;
+}
+
+int KoTextParag::resolveAlignment() const
+{
+ if ( (int)m_layout.alignment == Qt::AlignAuto )
+ return str->isRightToLeft() ? Qt::AlignRight : Qt::AlignLeft;
+ return m_layout.alignment;
+}
+
+void KoTextParag::setLineSpacing( double _i )
+{
+ m_layout.setLineSpacingValue(_i);
+ invalidate(0);
+}
+
+void KoTextParag::setLineSpacingType( KoParagLayout::SpacingType _type )
+{
+ m_layout.lineSpacingType = _type;
+ invalidate(0);
+}
+
+void KoTextParag::setTopBorder( const KoBorder & _brd )
+{
+ m_layout.topBorder = _brd;
+ invalidate(0);
+}
+
+void KoTextParag::setBottomBorder( const KoBorder & _brd )
+{
+ m_layout.bottomBorder = _brd;
+ invalidate(0);
+}
+
+void KoTextParag::setJoinBorder( bool join )
+{
+ m_layout.joinBorder = join;
+ invalidate(0);
+}
+
+void KoTextParag::setBackgroundColor ( const QColor& color )
+{
+ m_layout.backgroundColor = color;
+ invalidate(0);
+}
+
+void KoTextParag::setNoCounter()
+{
+ delete m_layout.counter;
+ m_layout.counter = 0L;
+ invalidateCounters();
+}
+
+void KoTextParag::setCounter( const KoParagCounter * pCounter )
+{
+ // Preserve footnote numbering when applying a style
+ const bool isFootNote = m_layout.counter &&
+ m_layout.counter->numbering() == KoParagCounter::NUM_FOOTNOTE;
+ if ( isFootNote ) {
+ const QString footNotePrefix = m_layout.counter->prefix(); // this is where the number is
+ delete m_layout.counter;
+ m_layout.counter = pCounter ? new KoParagCounter( *pCounter ) : new KoParagCounter();
+ m_layout.counter->setNumbering( KoParagCounter::NUM_FOOTNOTE );
+ m_layout.counter->setStyle( KoParagCounter::STYLE_NONE ); // no number after the 'prefix'
+ m_layout.counter->setPrefix( footNotePrefix );
+ m_layout.counter->setSuffix( QString::null );
+ invalidateCounters();
+ } else {
+ if ( pCounter )
+ setCounter( *pCounter );
+ else
+ setNoCounter();
+ }
+}
+
+void KoTextParag::setCounter( const KoParagCounter & counter )
+{
+ // Garbage collect unnneeded counters.
+ if ( counter.numbering() == KoParagCounter::NUM_NONE
+ // [keep it for unnumbered outlines (the depth is useful)]
+ && ( !m_layout.style || !m_layout.style->isOutline() ) )
+ {
+ setNoCounter();
+ }
+ else
+ {
+ delete m_layout.counter;
+ m_layout.counter = new KoParagCounter( counter );
+
+ // Invalidate the counters
+ invalidateCounters();
+ }
+}
+
+void KoTextParag::invalidateCounters()
+{
+ // Invalidate this paragraph and all the following ones
+ // (Numbering may have changed)
+ invalidate( 0 );
+ if ( m_layout.counter )
+ m_layout.counter->invalidate();
+ KoTextParag *s = next();
+ // #### Possible optimization: since any invalidation propagates down,
+ // it's enough to stop at the first paragraph with an already-invalidated counter, isn't it?
+ // This is only true if nobody else calls counter->invalidate...
+ while ( s ) {
+ if ( s->m_layout.counter )
+ s->m_layout.counter->invalidate();
+ s->invalidate( 0 );
+ s = s->next();
+ }
+}
+
+int KoTextParag::counterWidth() const
+{
+ if ( !m_layout.counter )
+ return 0;
+
+ return m_layout.counter->width( this );
+}
+
+// Draw the complete label (i.e. heading/list numbers/bullets) for this paragraph.
+// This is called by KoTextParag::paint.
+void KoTextParag::drawLabel( QPainter* p, int xLU, int yLU, int /*wLU*/, int /*hLU*/, int baseLU, const QColorGroup& /*cg*/ )
+{
+ if ( !m_layout.counter ) // shouldn't happen
+ return;
+
+ if ( m_layout.counter->numbering() == KoParagCounter::NUM_NONE )
+ return;
+
+ int counterWidthLU = m_layout.counter->width( this );
+
+ // We use the formatting of the first char as the formatting of the counter
+ KoTextFormat counterFormat( *KoParagCounter::counterFormat( this ) );
+ if ( !m_layout.style || !m_layout.style->isOutline() )
+ {
+ // But without bold/italic for normal lists, since some items could be bold and others not.
+ // For headings we must keep the bold when the heading is bold.
+ counterFormat.setBold( false );
+ counterFormat.setItalic( false );
+ }
+ KoTextFormat* format = &counterFormat;
+ p->save();
+
+ QColor textColor( format->color() );
+ if ( !textColor.isValid() ) // Resolve the color at this point
+ textColor = KoTextFormat::defaultTextColor( p );
+ p->setPen( QPen( textColor ) );
+
+ KoTextZoomHandler * zh = textDocument()->paintingZoomHandler();
+ assert( zh );
+ //bool forPrint = ( p->device()->devType() == QInternal::Printer );
+
+ bool rtl = str->isRightToLeft(); // when true, we put suffix+counter+prefix at the RIGHT of the paragraph.
+ int xLeft = zh->layoutUnitToPixelX( xLU - (rtl ? 0 : counterWidthLU) );
+ int y = zh->layoutUnitToPixelY( yLU );
+ //int h = zh->layoutUnitToPixelY( yLU, hLU );
+ int base = zh->layoutUnitToPixelY( yLU, baseLU );
+ int counterWidth = zh->layoutUnitToPixelX( xLU, counterWidthLU );
+ int height = zh->layoutUnitToPixelY( yLU, format->height() );
+
+ QFont font( format->screenFont( zh ) );
+ // Footnote numbers are in superscript (in WP and Word, not in OO)
+ if ( m_layout.counter->numbering() == KoParagCounter::NUM_FOOTNOTE )
+ {
+ int pointSize = ( ( font.pointSize() * 2 ) / 3 );
+ font.setPointSize( pointSize );
+ y -= ( height - QFontMetrics(font).height() );
+ }
+ p->setFont( font );
+
+ // Now draw any bullet that is required over the space left for it.
+ if ( m_layout.counter->isBullet() )
+ {
+ int xBullet = xLeft + zh->layoutUnitToPixelX( m_layout.counter->bulletX() );
+
+ //kdDebug(32500) << "KoTextParag::drawLabel xLU=" << xLU << " counterWidthLU=" << counterWidthLU << endl;
+ // The width and height of the bullet is the width of one space
+ int width = zh->layoutUnitToPixelX( xLeft, format->width( ' ' ) );
+
+ //kdDebug(32500) << "Pix: xLeft=" << xLeft << " counterWidth=" << counterWidth
+ // << " xBullet=" << xBullet << " width=" << width << endl;
+
+ QString prefix = m_layout.counter->prefix();
+ if ( !prefix.isEmpty() )
+ {
+ if ( rtl )
+ prefix.prepend( ' ' /*the space before the bullet in RTL mode*/ );
+ KoTextParag::drawFontEffects( p, format, zh, format->screenFont( zh ), textColor, xLeft, base, width, y, height, prefix[0] );
+
+ int posY =y + base - format->offsetFromBaseLine();
+ //we must move to bottom text because we create
+ //shadow to 'top'.
+ int sy = format->shadowY( zh );
+ if ( sy < 0)
+ posY -= sy;
+
+ p->drawText( xLeft, posY, prefix );
+ }
+
+ QRect er( xBullet + (rtl ? width : 0), y + height / 2 - width / 2, width, width );
+ // Draw the bullet.
+ int posY = 0;
+ switch ( m_layout.counter->style() )
+ {
+ case KoParagCounter::STYLE_DISCBULLET:
+ p->setBrush( QBrush(textColor) );
+ p->drawEllipse( er );
+ p->setBrush( Qt::NoBrush );
+ break;
+ case KoParagCounter::STYLE_SQUAREBULLET:
+ p->fillRect( er, QBrush(textColor) );
+ break;
+ case KoParagCounter::STYLE_BOXBULLET:
+ p->drawRect( er );
+ break;
+ case KoParagCounter::STYLE_CIRCLEBULLET:
+ p->drawEllipse( er );
+ break;
+ case KoParagCounter::STYLE_CUSTOMBULLET:
+ {
+ // The user has selected a symbol from a special font. Override the paragraph
+ // font with the given family. This conserves the right size etc.
+ if ( !m_layout.counter->customBulletFont().isEmpty() )
+ {
+ QFont bulletFont( p->font() );
+ bulletFont.setFamily( m_layout.counter->customBulletFont() );
+ p->setFont( bulletFont );
+ }
+ KoTextParag::drawFontEffects( p, format, zh, format->screenFont( zh ), textColor, xBullet, base, width, y, height, ' ' );
+
+ posY = y + base- format->offsetFromBaseLine();
+ //we must move to bottom text because we create
+ //shadow to 'top'.
+ int sy = format->shadowY( zh );
+ if ( sy < 0)
+ posY -= sy;
+
+ p->drawText( xBullet, posY, m_layout.counter->customBulletCharacter() );
+ break;
+ }
+ default:
+ break;
+ }
+
+ QString suffix = m_layout.counter->suffix();
+ if ( !suffix.isEmpty() )
+ {
+ if ( !rtl )
+ suffix += ' ' /*the space after the bullet*/;
+
+ KoTextParag::drawFontEffects( p, format, zh, format->screenFont( zh ), textColor, xBullet + width, base, counterWidth, y,height, suffix[0] );
+
+ int posY =y + base- format->offsetFromBaseLine();
+ //we must move to bottom text because we create
+ //shadow to 'top'.
+ int sy = format->shadowY( zh );
+ if ( sy < 0)
+ posY -= sy;
+
+ p->drawText( xBullet + width, posY, suffix, -1 );
+ }
+ }
+ else
+ {
+ QString counterText = m_layout.counter->text( this );
+ // There are no bullets...any parent bullets have already been suppressed.
+ // Just draw the text! Note: one space is always appended.
+ if ( !counterText.isEmpty() )
+ {
+ KoTextParag::drawFontEffects( p, format, zh, format->screenFont( zh ), textColor, xLeft, base, counterWidth, y, height, counterText[0] );
+
+ counterText += ' ' /*the space after the bullet (before in RTL mode)*/;
+
+ int posY =y + base - format->offsetFromBaseLine();
+ //we must move to bottom text because we create
+ //shadow to 'top'.
+ int sy = format->shadowY( zh );
+ if ( sy < 0)
+ posY -= sy;
+
+ p->drawText( xLeft, posY , counterText, -1 );
+ }
+ }
+ p->restore();
+}
+
+int KoTextParag::breakableTopMargin() const
+{
+ KoTextZoomHandler * zh = textDocument()->formattingZoomHandler();
+ return zh->ptToLayoutUnitPixY(
+ m_layout.margins[ QStyleSheetItem::MarginTop ] );
+}
+
+int KoTextParag::topMargin() const
+{
+ KoTextZoomHandler * zh = textDocument()->formattingZoomHandler();
+ return zh->ptToLayoutUnitPixY(
+ m_layout.margins[ QStyleSheetItem::MarginTop ]
+ + ( ( prev() && prev()->joinBorder() && prev()->bottomBorder() == m_layout.bottomBorder &&
+ prev()->topBorder() == m_layout.topBorder && prev()->leftBorder() == m_layout.leftBorder &&
+ prev()->rightBorder() == m_layout.rightBorder) ? 0 : m_layout.topBorder.width() ) );
+}
+
+int KoTextParag::bottomMargin() const
+{
+ KoTextZoomHandler * zh = textDocument()->formattingZoomHandler();
+ return zh->ptToLayoutUnitPixY(
+ m_layout.margins[ QStyleSheetItem::MarginBottom ]
+ + ( ( joinBorder() && next() && next()->bottomBorder() == m_layout.bottomBorder &&
+ next()->topBorder() == m_layout.topBorder && next()->leftBorder() == m_layout.leftBorder &&
+ next()->rightBorder() == m_layout.rightBorder) ? 0 : m_layout.bottomBorder.width() ) );
+}
+
+int KoTextParag::leftMargin() const
+{
+ KoTextZoomHandler * zh = textDocument()->formattingZoomHandler();
+ return zh->ptToLayoutUnitPixX(
+ m_layout.margins[ QStyleSheetItem::MarginLeft ]
+ + m_layout.leftBorder.width() );
+}
+
+int KoTextParag::rightMargin() const
+{
+ KoTextZoomHandler * zh = textDocument()->formattingZoomHandler();
+ int cw=0;
+ if( m_layout.counter && str->isRightToLeft() &&
+ (( m_layout.counter->alignment() == Qt::AlignRight ) || ( m_layout.counter->alignment() == Qt::AlignAuto )))
+ cw = counterWidth();
+
+ return zh->ptToLayoutUnitPixX(
+ m_layout.margins[ QStyleSheetItem::MarginRight ]
+ + m_layout.rightBorder.width() )
+ + cw; /* in layout units already */
+}
+
+int KoTextParag::firstLineMargin() const
+{
+ KoTextZoomHandler * zh = textDocument()->formattingZoomHandler();
+ return zh->ptToLayoutUnitPixY(
+ m_layout.margins[ QStyleSheetItem::MarginFirstLine ] );
+}
+
+int KoTextParag::lineSpacing( int line ) const
+{
+ Q_ASSERT( isValid() );
+ if ( m_layout.lineSpacingType == KoParagLayout::LS_SINGLE )
+ return 0; // or shadow, see calculateLineSpacing
+ else {
+ if( line >= (int)lineStarts.count() )
+ {
+ kdError() << "KoTextParag::lineSpacing assert(line<lines) failed: line=" << line << " lines=" << lineStarts.count() << endl;
+ return 0;
+ }
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.begin();
+ while ( line-- > 0 )
+ ++it;
+ return (*it)->lineSpacing;
+ }
+}
+
+// Called by KoTextFormatter
+int KoTextParag::calculateLineSpacing( int line, int startChar, int lastChar ) const
+{
+ KoTextZoomHandler * zh = textDocument()->formattingZoomHandler();
+ // TODO add shadow in KoTextFormatter!
+ int shadow = 0; //QABS( zh->ptToLayoutUnitPixY( shadowDistanceY() ) );
+ if ( m_layout.lineSpacingType == KoParagLayout::LS_SINGLE )
+ return shadow;
+ else if ( m_layout.lineSpacingType == KoParagLayout::LS_CUSTOM )
+ return zh->ptToLayoutUnitPixY( m_layout.lineSpacingValue() ) + shadow;
+ else {
+ if( line >= (int)lineStarts.count() )
+ {
+ kdError() << "KoTextParag::lineSpacing assert(line<lines) failed: line=" << line << " lines=" << lineStarts.count() << endl;
+ return 0+shadow;
+ }
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.begin();
+ while ( line-- > 0 )
+ ++it;
+
+ //kdDebug(32500) << " line spacing type: " << m_layout.lineSpacingType << " value:" << m_layout.lineSpacingValue() << " line_height=" << (*it)->h << " startChar=" << startChar << " lastChar=" << lastChar << endl;
+ switch ( m_layout.lineSpacingType )
+ {
+ case KoParagLayout::LS_MULTIPLE:
+ {
+ double n = m_layout.lineSpacingValue() - 1.0; // yes, can be negative
+ return shadow + qRound( n * heightForLineSpacing( startChar, lastChar ) );
+ }
+ case KoParagLayout::LS_ONEANDHALF:
+ {
+ // Special case of LS_MULTIPLE, with n=1.5
+ return shadow + heightForLineSpacing( startChar, lastChar ) / 2;
+ }
+ case KoParagLayout::LS_DOUBLE:
+ {
+ // Special case of LS_MULTIPLE, with n=1
+ return shadow + heightForLineSpacing( startChar, lastChar );
+ }
+ case KoParagLayout::LS_AT_LEAST:
+ {
+ int atLeast = zh->ptToLayoutUnitPixY( m_layout.lineSpacingValue() );
+ const int lineHeight = ( *it )->h;
+ int h = QMAX( lineHeight, atLeast );
+ // height is now the required total height
+ return shadow + h - lineHeight;
+ }
+ case KoParagLayout::LS_FIXED:
+ {
+ const int lineHeight = ( *it )->h;
+ return shadow + zh->ptToLayoutUnitPixY( m_layout.lineSpacingValue() ) - lineHeight;
+ }
+ // Silence compiler warnings
+ case KoParagLayout::LS_SINGLE:
+ case KoParagLayout::LS_CUSTOM:
+ break;
+ }
+ }
+ kdWarning() << "Unhandled linespacing type : " << m_layout.lineSpacingType << endl;
+ return 0+shadow;
+}
+
+QRect KoTextParag::pixelRect( KoTextZoomHandler *zh ) const
+{
+ QRect rct( zh->layoutUnitToPixel( rect() ) );
+ //kdDebug(32500) << " pixelRect for parag " << paragId()
+ // << ": rect=" << rect() << " pixelRect=" << rct << endl;
+
+ // After division we almost always end up with the top overwriting the bottom of the parag above
+ if ( prev() )
+ {
+ QRect prevRect( zh->layoutUnitToPixel( prev()->rect() ) );
+ if ( rct.top() < prevRect.bottom() + 1 )
+ {
+ //kdDebug(32500) << " pixelRect: rct.top() adjusted to " << prevRect.bottom() + 1 << " (was " << rct.top() << ")" << endl;
+ rct.setTop( prevRect.bottom() + 1 );
+ }
+ }
+ return rct;
+}
+
+// Paint this paragraph. This is called by KoTextDocument::drawParagWYSIWYG
+// (KoTextDocument::drawWithoutDoubleBuffer when printing)
+void KoTextParag::paint( QPainter &painter, const QColorGroup &cg, KoTextCursor *cursor, bool drawSelections,
+ int clipx, int clipy, int clipw, int cliph )
+{
+#ifdef DEBUG_PAINT
+ kdDebug(32500) << "KoTextParag::paint ===== id=" << paragId() << " clipx=" << clipx << " clipy=" << clipy << " clipw=" << clipw << " cliph=" << cliph << endl;
+ kdDebug(32500) << " clipw in pix (approx) : " << textDocument()->paintingZoomHandler()->layoutUnitToPixelX( clipw ) << " cliph in pix (approx) : " << textDocument()->paintingZoomHandler()->layoutUnitToPixelX( cliph ) << endl;
+#endif
+
+ KoTextZoomHandler * zh = textDocument()->paintingZoomHandler();
+ assert(zh);
+
+ QRect paraRect = pixelRect( zh );
+
+ // Find left margin size, first line offset and right margin in pixels
+ int leftMarginPix = zh->layoutUnitToPixelX( leftMargin() );
+ int firstLineOffset = zh->layoutUnitToPixelX( firstLineMargin() );
+
+ // The furthest left and right x-coords of the paragraph,
+ // including the bullet/counter, but not the borders.
+ int leftExtent = QMIN ( leftMarginPix, leftMarginPix + firstLineOffset );
+ int rightExtent = paraRect.width() - zh->layoutUnitToPixelX( rightMargin() );
+
+ // Draw the paragraph background color
+ if ( backgroundColor().isValid() )
+ {
+ // Render background from either left margin indent, or first line indent,
+ // whichever is nearer the left.
+ int backgroundWidth = rightExtent - leftExtent + 1;
+ int backgroundHeight = pixelRect( zh ).height();
+ painter.fillRect( leftExtent, 0,
+ backgroundWidth, backgroundHeight,
+ backgroundColor() );
+ }
+
+ // Let's call drawLabel ourselves, rather than having to deal with QStyleSheetItem to get paintLines to call it!
+ if ( m_layout.counter && m_layout.counter->numbering() != KoParagCounter::NUM_NONE && m_lineChanged <= 0 )
+ {
+ int cy, h, baseLine;
+ lineInfo( 0, cy, h, baseLine );
+ int xLabel = at(0)->x;
+ if ( str->isRightToLeft() )
+ xLabel += at(0)->width;
+ drawLabel( &painter, xLabel, cy, 0, 0, baseLine, cg );
+ }
+
+ paintLines( painter, cg, cursor, drawSelections, clipx, clipy, clipw, cliph );
+
+ // Now draw paragraph border
+ if ( m_layout.hasBorder() )
+ {
+ bool const drawTopBorder = !prev() || !prev()->joinBorder() || prev()->bottomBorder() != bottomBorder() || prev()->topBorder() != topBorder() || prev()->leftBorder() != leftBorder() || prev()->rightBorder() != rightBorder();
+ bool const drawBottomBorder = !joinBorder() || !next() || next()->bottomBorder() != bottomBorder() || next()->topBorder() != topBorder() || next()->leftBorder() != leftBorder() || next()->rightBorder() != rightBorder();
+
+ // Paragraph borders surround the paragraph and its
+ // counters/bullets, but they only touch the frame border if
+ // the paragraph margins are of non-zero length.
+ // This is what OpenOffice does (no really, it is this time).
+ //
+ // drawBorders paints outside the give rect, so for the
+ // x-coords, it just needs to know the left and right extent
+ // of the paragraph.
+ QRect r;
+ r.setLeft( leftExtent );
+ r.setRight( rightExtent );
+ r.setTop( zh->layoutUnitToPixelY(lineY( 0 )) );
+
+ int lastLine = lines() - 1;
+ // We need to start from the pixelRect, to make sure the bottom border is entirely painted.
+ // This is a case where we DO want to subtract pixels to pixels...
+ int paragBottom = pixelRect(zh).height()-1;
+ // If we don't have a bottom border, we need go as low as possible ( to touch the next parag's border ).
+ // If we have a bottom border, then we rather exclude the linespacing. Looks nicer. OO does that too.
+ if ( m_layout.bottomBorder.width() > 0 && drawBottomBorder)
+ paragBottom -= zh->layoutUnitToPixelY( lineSpacing( lastLine ) );
+ paragBottom -= KoBorder::zoomWidthY( m_layout.bottomBorder.width(), zh, 0 );
+ //kdDebug(32500) << "Parag border: paragBottom=" << paragBottom
+ // << " bottom border width = " << KoBorder::zoomWidthY( m_layout.bottomBorder.width(), zh, 0 ) << endl;
+ r.setBottom( paragBottom );
+
+ //kdDebug(32500) << "KoTextParag::paint documentWidth=" << documentWidth() << " LU (" << zh->layoutUnitToPixelX(documentWidth()) << " pixels) bordersRect=" << r << endl;
+ KoBorder::drawBorders( painter, zh, r,
+ m_layout.leftBorder, m_layout.rightBorder, m_layout.topBorder, m_layout.bottomBorder,
+ 0, QPen(), drawTopBorder, drawBottomBorder );
+ }
+}
+
+
+void KoTextParag::paintLines( QPainter &painter, const QColorGroup &cg, KoTextCursor *cursor, bool drawSelections,
+ int clipx, int clipy, int clipw, int cliph )
+{
+ if ( !visible )
+ return;
+ //KoTextStringChar *chr = at( 0 );
+ //if (!chr) { kdDebug(32500) << "paragraph " << (void*)this << " " << paragId() << ", can't paint, EMPTY !" << endl;
+
+ // This is necessary with the current code, but in theory it shouldn't
+ // be necessary, if Xft really gives us fully proportionnal chars....
+#define CHECK_PIXELXADJ
+
+ int curx = -1, cury = 0, curh = 0, curline = 0;
+ int xstart, xend = 0;
+
+ QString qstr = str->toString();
+ qstr.replace( QChar(0x00a0U), ' ' ); // Not all fonts have non-breakable-space glyph
+
+ const int nSels = doc ? doc->numSelections() : 1;
+ QMemArray<int> selectionStarts( nSels );
+ QMemArray<int> selectionEnds( nSels );
+ if ( drawSelections ) {
+ bool hasASelection = FALSE;
+ for ( int i = 0; i < nSels; ++i ) {
+ if ( !hasSelection( i ) ) {
+ selectionStarts[ i ] = -1;
+ selectionEnds[ i ] = -1;
+ } else {
+ hasASelection = TRUE;
+ selectionStarts[ i ] = selectionStart( i );
+ int end = selectionEnd( i );
+ if ( end == length() - 1 && n && n->hasSelection( i ) )
+ end++;
+ selectionEnds[ i ] = end;
+ }
+ }
+ if ( !hasASelection )
+ drawSelections = FALSE;
+ }
+
+ // Draw the lines!
+ int line = m_lineChanged;
+ if (line<0) line = 0;
+
+ int numLines = lines();
+#ifdef DEBUG_PAINT
+ kdDebug(32500) << " paintLines: from line " << line << " to " << numLines-1 << endl;
+#endif
+ for( ; line<numLines ; line++ )
+ {
+ // get the start and length of the line
+ int nextLine;
+ int startOfLine;
+ lineStartOfLine(line, &startOfLine);
+ if (line == numLines-1 )
+ nextLine = length();
+ else
+ lineStartOfLine(line+1, &nextLine);
+
+ // init this line
+ int cy, h, baseLine;
+ lineInfo( line, cy, h, baseLine );
+ if ( clipy != -1 && cy > clipy - r.y() + cliph ) // outside clip area, leave
+ break;
+
+ // Vars related to the current "run of text"
+ int paintStart = startOfLine;
+ KoTextStringChar* chr = at(startOfLine);
+ KoTextStringChar* nextchr = chr;
+
+ // okay, paint the line!
+ for(int i=startOfLine;i<nextLine;i++)
+ {
+ chr = nextchr;
+ if ( i < nextLine-1 )
+ nextchr = at( i+1 );
+
+ // we flush at end of line
+ bool flush = ( i == nextLine - 1 );
+ // Optimization note: QRT uses "flush |=", which doesn't have shortcut optimization
+
+ // we flush on format changes
+ flush = flush || ( nextchr->format() != chr->format() );
+ // we flush on link changes
+ //flush = flush || ( nextchr->isLink() != chr->isLink() );
+ // we flush on small caps changes
+ if ( !flush && chr->format()->attributeFont() == KoTextFormat::ATT_SMALL_CAPS )
+ {
+ bool isLowercase = chr->c.upper() != chr->c;
+ bool nextLowercase = nextchr->c.upper() != nextchr->c;
+ flush = isLowercase != nextLowercase;
+ }
+ // we flush on start of run
+ flush = flush || nextchr->startOfRun;
+ // we flush on bidi changes
+ flush = flush || ( nextchr->rightToLeft != chr->rightToLeft );
+#ifdef CHECK_PIXELXADJ
+ // we flush when the value of pixelxadj changes
+ // [unless inside a ligature]
+ flush = flush || ( nextchr->pixelxadj != chr->pixelxadj && nextchr->charStop );
+#endif
+ // we flush before and after tabs
+ flush = flush || ( chr->c == '\t' || nextchr->c == '\t' );
+ // we flush on soft hypens
+ flush = flush || ( chr->c.unicode() == 0xad );
+ // we flush on custom items
+ flush = flush || chr->isCustom();
+ // we flush before custom items
+ flush = flush || nextchr->isCustom();
+ // when painting justified we flush on spaces
+ if ((alignment() & Qt::AlignJustify) == Qt::AlignJustify )
+ //flush = flush || QTextFormatter::isBreakable( str, i );
+ flush = flush || chr->whiteSpace;
+ // when underlining or striking "word by word" we flush before/after spaces
+ if (!flush && chr->format()->wordByWord() && chr->format()->isStrikedOrUnderlined())
+ flush = flush || chr->whiteSpace || nextchr->whiteSpace;
+ // we flush when the string is getting too long
+ flush = flush || ( i - paintStart >= 256 );
+ // we flush when the selection state changes
+ if ( drawSelections ) {
+ // check if selection state changed - TODO update from QRT
+ bool selectionChange = FALSE;
+ if ( drawSelections ) {
+ for ( int j = 0; j < nSels; ++j ) {
+ selectionChange = selectionStarts[ j ] == i+1 || selectionEnds[ j ] == i+1;
+ if ( selectionChange )
+ break;
+ }
+ }
+ flush = flush || selectionChange;
+ }
+
+ // check for cursor mark
+ if ( cursor && this == cursor->parag() && i == cursor->index() ) {
+ curx = cursor->x();
+ curline = line;
+ KoTextStringChar *c = chr;
+ if ( i > 0 )
+ --c;
+ curh = c->height();
+ cury = cy + baseLine - c->ascent();
+ }
+
+ if ( flush ) { // something changed, draw what we have so far
+
+ KoTextStringChar* cStart = at( paintStart );
+ if ( chr->rightToLeft ) {
+ xstart = chr->x;
+ xend = cStart->x + cStart->width;
+ } else {
+ xstart = cStart->x;
+ if ( i < length() - 1 && !str->at( i + 1 ).lineStart &&
+ str->at( i + 1 ).rightToLeft == chr->rightToLeft )
+ xend = str->at( i + 1 ).x;
+ else
+ xend = chr->x + chr->width;
+ }
+
+ if ( (clipx == -1 || clipw == -1) || (xend >= clipx && xstart <= clipx + clipw) ) {
+ if ( !chr->isCustom() ) {
+ drawParagString( painter, qstr, paintStart, i - paintStart + 1, xstart, cy,
+ baseLine, xend-xstart, h, drawSelections,
+ chr->format(), selectionStarts, selectionEnds,
+ cg, chr->rightToLeft, line );
+ }
+ else
+ if ( chr->customItem()->placement() == KoTextCustomItem::PlaceInline ) {
+ chr->customItem()->draw( &painter, chr->x, cy + baseLine - chr->customItem()->ascent(),
+ clipx - r.x(), clipy - r.y(), clipw, cliph, cg,
+ drawSelections && nSels && selectionStarts[ 0 ] <= i && selectionEnds[ 0 ] > i );
+ }
+ }
+ paintStart = i+1;
+ }
+ } // end of character loop
+ } // end of line loop
+
+ // if we should draw a cursor, draw it now
+ if ( curx != -1 && cursor ) {
+ drawCursor( painter, cursor, curx, cury, curh, cg );
+ }
+}
+
+// Called by KoTextParag::paintLines
+// Draw a set of characters with the same formattings.
+// Reimplemented here to convert coordinates first, and call @ref drawFormattingChars.
+void KoTextParag::drawParagString( QPainter &painter, const QString &str, int start, int len, int startX,
+ int lastY, int baseLine, int bw, int h, bool drawSelections,
+ KoTextFormat *format, const QMemArray<int> &selectionStarts,
+ const QMemArray<int> &selectionEnds, const QColorGroup &cg, bool rightToLeft, int line )
+{
+ KoTextZoomHandler * zh = textDocument()->paintingZoomHandler();
+ assert(zh);
+
+#ifdef DEBUG_PAINT
+ kdDebug(32500) << "KoTextParag::drawParagString drawing from " << start << " to " << start+len << endl;
+ kdDebug(32500) << " startX in LU: " << startX << " lastY in LU:" << lastY
+ << " baseLine in LU:" << baseLine << endl;
+#endif
+
+ // Calculate offset (e.g. due to shadow on left or top)
+ // Important: don't use the 2-args methods here, offsets are not heights
+ // (0 should be 0, not 1) (#63256)
+ int shadowOffsetX_pix = zh->layoutUnitToPixelX( format->offsetX() );
+ int shadowOffsetY_pix = zh->layoutUnitToPixelY( format->offsetY() );
+
+ // Calculate startX in pixels
+ int startX_pix = zh->layoutUnitToPixelX( startX ) /* + at( rightToLeft ? start+len-1 : start )->pixelxadj */;
+#ifdef DEBUG_PAINT
+ kdDebug(32500) << "KoTextParag::drawParagString startX in pixels : " << startX_pix /*<< " adjustment:" << at( rightToLeft ? start+len-1 : start )->pixelxadj*/ << " bw=" << bw << endl;
+#endif
+
+ int bw_pix = zh->layoutUnitToPixelX( startX, bw );
+ int lastY_pix = zh->layoutUnitToPixelY( lastY );
+ int baseLine_pix = zh->layoutUnitToPixelY( lastY, baseLine ); // 2 args=>+1. Is that correct?
+ int h_pix = zh->layoutUnitToPixelY( lastY, h );
+#ifdef DEBUG_PAINT
+ kdDebug(32500) << "KoTextParag::drawParagString h(LU)=" << h << " lastY(LU)=" << lastY
+ << " h(PIX)=" << h_pix << " lastY(PIX)=" << lastY_pix
+ << " baseLine(PIX)=" << baseLine_pix << endl;
+#endif
+
+ if ( format->textBackgroundColor().isValid() )
+ painter.fillRect( startX_pix, lastY_pix, bw_pix, h_pix, format->textBackgroundColor() );
+
+ // don't want to draw line breaks but want them when drawing formatting chars
+ int draw_len = len;
+ int draw_startX = startX;
+ int draw_bw = bw_pix;
+ if ( at( start + len - 1 )->c == '\n' )
+ {
+ draw_len--;
+ draw_bw -= at( start + len - 1 )->pixelwidth;
+ if ( rightToLeft && draw_len > 0 )
+ draw_startX = at( start + draw_len - 1 )->x;
+ }
+
+ // Draw selection (moved here to do it before applying the offset from the shadow)
+ // (and because it's not part of the shadow drawing)
+ if ( drawSelections ) {
+ bool inSelection = false;
+ const int nSels = doc ? doc->numSelections() : 1;
+ for ( int j = 0; j < nSels; ++j ) {
+ if ( start >= selectionStarts[ j ] && start < selectionEnds[ j ] ) {
+ inSelection = true;
+ switch (j) {
+ case KoTextDocument::Standard:
+ painter.fillRect( startX_pix, lastY_pix, bw_pix, h_pix, cg.color( QColorGroup::Highlight ) );
+ break;
+ case KoTextDocument::InputMethodPreedit:
+ // no highlight
+ break;
+ default:
+ painter.fillRect( startX_pix, lastY_pix, bw_pix, h_pix, doc ? doc->selectionColor( j ) : cg.color( QColorGroup::Highlight ) );
+ break;
+ }
+ }
+ }
+ if ( !inSelection )
+ drawSelections = false; // save time in drawParagStringInternal
+ }
+
+ // Draw InputMethod Preedit Underline
+ const int nSels = doc ? doc->numSelections() : 1;
+ if ( KoTextDocument::InputMethodPreedit < nSels
+ && doc->hasSelection( KoTextDocument::InputMethodPreedit )
+ && start >= selectionStarts[ KoTextDocument::InputMethodPreedit ]
+ && start < selectionEnds[ KoTextDocument::InputMethodPreedit ] )
+ {
+ QColor textColor( format->color() );
+ painter.setPen( QPen( textColor ) );
+
+ QPoint p1( startX_pix, lastY_pix + h_pix - 1 );
+ QPoint p2( startX_pix + bw_pix, lastY_pix + h_pix - 1 );
+ painter.drawLine( p1, p2 );
+ }
+
+ if ( draw_len > 0 )
+ {
+ int draw_startX_pix = zh->layoutUnitToPixelX( draw_startX ) /* + at( rightToLeft ? start+draw_len-1 : start )->pixelxadj*/;
+ draw_startX_pix += shadowOffsetX_pix;
+ lastY_pix += shadowOffsetY_pix;
+
+ if ( format->shadowDistanceX() != 0 || format->shadowDistanceY() != 0 ) {
+ int sx = format->shadowX( zh );
+ int sy = format->shadowY( zh );
+ if ( sx != 0 || sy != 0 )
+ {
+ painter.save();
+ painter.translate( sx, sy );
+ drawParagStringInternal( painter, str, start, draw_len, draw_startX_pix,
+ lastY_pix, baseLine_pix,
+ draw_bw,
+ h_pix, FALSE /*drawSelections*/,
+ format, selectionStarts,
+ selectionEnds, cg, rightToLeft, line, zh, true );
+ painter.restore();
+ }
+ }
+
+ drawParagStringInternal( painter, str, start, draw_len, draw_startX_pix,
+ lastY_pix, baseLine_pix,
+ draw_bw,
+ h_pix, drawSelections, format, selectionStarts,
+ selectionEnds, cg, rightToLeft, line, zh, false );
+ }
+
+ bool forPrint = ( painter.device()->devType() == QInternal::Printer );
+ if ( textDocument()->drawFormattingChars() && !forPrint )
+ {
+ drawFormattingChars( painter, start, len,
+ lastY_pix, baseLine_pix, h_pix,
+ drawSelections,
+ format, selectionStarts,
+ selectionEnds, cg, rightToLeft,
+ line, zh, AllFormattingChars );
+ }
+}
+
+// Copied from the original KoTextParag
+// (we have to copy it here, so that color & font changes don't require changing
+// a local copy of the text format)
+// And we have to keep it separate from drawParagString to avoid s/startX/startX_pix/ etc.
+void KoTextParag::drawParagStringInternal( QPainter &painter, const QString &s, int start, int len, int startX,
+ int lastY, int baseLine, int bw, int h, bool drawSelections,
+ KoTextFormat *format, const QMemArray<int> &selectionStarts,
+ const QMemArray<int> &selectionEnds, const QColorGroup &cg, bool rightToLeft, int line, KoTextZoomHandler* zh, bool drawingShadow )
+{
+#ifdef DEBUG_PAINT
+ kdDebug(32500) << "KoTextParag::drawParagStringInternal start=" << start << " len=" << len << " : '" << s.mid(start,len) << "'" << endl;
+ kdDebug(32500) << "In pixels: startX=" << startX << " lastY=" << lastY << " baseLine=" << baseLine
+ << " bw=" << bw << " h=" << h << " rightToLeft=" << rightToLeft << endl;
+#endif
+ if ( drawingShadow && format->shadowDistanceX() == 0 && format->shadowDistanceY() == 0 )
+ return;
+ // 1) Sort out the color
+ QColor textColor( drawingShadow ? format->shadowColor() : format->color() );
+ if ( !textColor.isValid() ) // Resolve the color at this point
+ textColor = KoTextFormat::defaultTextColor( &painter );
+
+ // 2) Sort out the font
+ QFont font( format->screenFont( zh ) );
+ if ( format->attributeFont() == KoTextFormat::ATT_SMALL_CAPS && s[start].upper() != s[start] )
+ font = format->smallCapsFont( zh, true );
+
+#if 0
+ QFontInfo fi( font );
+ kdDebug(32500) << "KoTextParag::drawParagStringInternal requested font " << font.pointSizeFloat() << " using font " << fi.pointSize() << "pt (format font: " << format->font().pointSizeFloat() << "pt)" << endl;
+ QFontMetrics fm( font );
+ kdDebug(32500) << "Real font: " << fi.family() << ". Font height in pixels: " << fm.height() << endl;
+#endif
+
+ // 3) Paint
+ QString str( s );
+ if ( str[ (int)str.length() - 1 ].unicode() == 0xad )
+ str.remove( str.length() - 1, 1 );
+ painter.setPen( QPen( textColor ) );
+ painter.setFont( font );
+
+ KoTextDocument* doc = document();
+
+ if ( drawSelections ) {
+ const int nSels = doc ? doc->numSelections() : 1;
+ for ( int j = 0; j < nSels; ++j ) {
+ if ( start >= selectionStarts[ j ] && start < selectionEnds[ j ] ) {
+ if ( !doc || doc->invertSelectionText( j ) )
+ textColor = cg.color( QColorGroup::HighlightedText );
+ painter.setPen( QPen( textColor ) );
+ break;
+ }
+ }
+ }
+
+ QPainter::TextDirection dir = rightToLeft ? QPainter::RTL : QPainter::LTR;
+
+ if ( dir != QPainter::RTL && start + len == length() ) // don't draw the last character (trailing space)
+ {
+ len--;
+ if ( len <= 0 )
+ return;
+ bw-=at(length()-1)->pixelwidth;
+ }
+ KoTextParag::drawFontEffects( &painter, format, zh, font, textColor, startX, baseLine, bw, lastY, h, str[start] );
+
+ if ( str[ start ] != '\t' && str[ start ].unicode() != 0xad ) {
+ str = format->displayedString( str ); // #### This converts the whole string, instead of from start to start+len!
+ if ( format->vAlign() == KoTextFormat::AlignNormal ) {
+ int posY = lastY + baseLine;
+ //we must move to bottom text because we create
+ //shadow to 'top'.
+ int sy = format->shadowY( zh );
+ if ( sy < 0)
+ posY -= sy;
+ painter.drawText( startX, posY, str, start, len, dir );
+#ifdef BIDI_DEBUG
+ painter.save();
+ painter.setPen ( Qt::red );
+ painter.drawLine( startX, lastY, startX, lastY + baseLine );
+ painter.drawLine( startX, lastY + baseLine/2, startX + 10, lastY + baseLine/2 );
+ int w = 0;
+ int i = 0;
+ while( i < len )
+ w += painter.fontMetrics().charWidth( str, start + i++ );
+ painter.setPen ( Qt::blue );
+ painter.drawLine( startX + w - 1, lastY, startX + w - 1, lastY + baseLine );
+ painter.drawLine( startX + w - 1, lastY + baseLine/2, startX + w - 1 - 10, lastY + baseLine/2 );
+ painter.restore();
+#endif
+ } else if ( format->vAlign() == KoTextFormat::AlignSuperScript ) {
+ int posY =lastY + baseLine - ( painter.fontMetrics().height() / 2 );
+ //we must move to bottom text because we create
+ //shadow to 'top'.
+ int sy = format->shadowY( zh );
+ if ( sy < 0)
+ posY -= sy;
+ painter.drawText( startX, posY, str, start, len, dir );
+ } else if ( format->vAlign() == KoTextFormat::AlignSubScript ) {
+ int posY =lastY + baseLine + ( painter.fontMetrics().height() / 6 );
+ //we must move to bottom text because we create
+ //shadow to 'top'.
+ int sy = format->shadowY( zh );
+ if ( sy < 0)
+ posY -= sy;
+ painter.drawText( startX, posY, str, start, len, dir );
+ } else if ( format->vAlign() == KoTextFormat::AlignCustom ) {
+ int posY = lastY + baseLine - format->offsetFromBaseLine();
+ //we must move to bottom text because we create
+ //shadow to 'top'.
+ int sy = format->shadowY( zh );
+ if ( sy < 0)
+ posY -= sy;
+ painter.drawText( startX, posY, str, start, len, dir );
+ }
+ }
+ if ( str[ start ] == '\t' && m_tabCache.contains( start ) ) {
+ painter.save();
+ KoTextZoomHandler * zh = textDocument()->paintingZoomHandler();
+ const KoTabulator& tab = m_layout.tabList()[ m_tabCache[ start ] ];
+ int lineWidth = zh->zoomItY( tab.ptWidth );
+ switch ( tab.filling ) {
+ case TF_DOTS:
+ painter.setPen( QPen( textColor, lineWidth, Qt::DotLine ) );
+ painter.drawLine( startX, lastY + baseLine, startX + bw, lastY + baseLine );
+ break;
+ case TF_LINE:
+ painter.setPen( QPen( textColor, lineWidth, Qt::SolidLine ) );
+ painter.drawLine( startX, lastY + baseLine, startX + bw, lastY + baseLine );
+ break;
+ case TF_DASH:
+ painter.setPen( QPen( textColor, lineWidth, Qt::DashLine ) );
+ painter.drawLine( startX, lastY + baseLine, startX + bw, lastY + baseLine );
+ break;
+ case TF_DASH_DOT:
+ painter.setPen( QPen( textColor, lineWidth, Qt::DashDotLine ) );
+ painter.drawLine( startX, lastY + baseLine, startX + bw, lastY + baseLine );
+ break;
+ case TF_DASH_DOT_DOT:
+ painter.setPen( QPen( textColor, lineWidth, Qt::DashDotDotLine ) );
+ painter.drawLine( startX, lastY + baseLine, startX + bw, lastY + baseLine );
+ break;
+
+ default:
+ break;
+ }
+ painter.restore();
+ }
+
+ if ( start+len < length() && at( start+len )->lineStart )
+ {
+#ifdef DEBUG_PAINT
+ //kdDebug(32500) << "we are drawing the end of line " << line << ". Auto-hyphenated: " << lineHyphenated( line ) << endl;
+#endif
+ bool drawHyphen = at( start+len-1 )->c.unicode() == 0xad;
+ drawHyphen = drawHyphen || lineHyphenated( line );
+ if ( drawHyphen ) {
+#ifdef DEBUG_PAINT
+ kdDebug(32500) << "drawing hyphen at x=" << startX+bw << endl;
+#endif
+ painter.drawText( startX + bw, lastY + baseLine, "-" ); // \xad gives squares with some fonts (!?)
+ }
+ }
+
+ // Paint a zigzag line for "wrong" background spellchecking checked words:
+ if(
+ painter.device()->devType() != QInternal::Printer &&
+ format->isMisspelled() &&
+ !drawingShadow &&
+ textDocument()->drawingMissingSpellLine() )
+ {
+ painter.save();
+ painter.setPen( QPen( Qt::red, 1 ) );
+
+ // Draw 3 pixel lines with increasing offset and distance 4:
+ for( int zigzag_line = 0; zigzag_line < 3; ++zigzag_line )
+ {
+ for( int zigzag_x = zigzag_line; zigzag_x < bw; zigzag_x += 4 )
+ {
+ painter.drawPoint(
+ startX + zigzag_x,
+ lastY + baseLine + h/12 - 1 + zigzag_line );
+ }
+ }
+
+ // "Double" the pixel number for the middle line:
+ for( int zigzag_x = 3; zigzag_x < bw; zigzag_x += 4 )
+ {
+ painter.drawPoint(
+ startX + zigzag_x,
+ lastY + baseLine + h/12 );
+ }
+
+ painter.restore();
+ }
+}
+
+bool KoTextParag::lineHyphenated( int l ) const
+{
+ if ( l > (int)lineStarts.count() - 1 ) {
+ kdWarning() << "KoTextParag::lineHyphenated: line " << l << " out of range!" << endl;
+ return false;
+ }
+
+ if ( !isValid() )
+ const_cast<KoTextParag*>(this)->format();
+
+ QMap<int, KoTextParagLineStart*>::ConstIterator it = lineStarts.begin();
+ while ( l-- > 0 )
+ ++it;
+ return ( *it )->hyphenated;
+}
+
+/** Draw the cursor mark. Reimplemented from KoTextParag to convert coordinates first. */
+void KoTextParag::drawCursor( QPainter &painter, KoTextCursor *cursor, int curx, int cury, int curh, const QColorGroup &cg )
+{
+ KoTextZoomHandler * zh = textDocument()->paintingZoomHandler();
+ int x = zh->layoutUnitToPixelX( curx ) /*+ cursor->parag()->at( cursor->index() )->pixelxadj*/;
+ //kdDebug(32500) << " drawCursor: LU: [cur]x=" << curx << ", cury=" << cury << " -> PIX: x=" << x << ", y=" << zh->layoutUnitToPixelY( cury ) << endl;
+ KoTextParag::drawCursorDefault( painter, cursor, x,
+ zh->layoutUnitToPixelY( cury ),
+ zh->layoutUnitToPixelY( cury, curh ), cg );
+}
+
+// Reimplemented from KoTextParag
+void KoTextParag::copyParagData( KoTextParag *parag )
+{
+ // Style of the previous paragraph
+ KoParagStyle * style = parag->style();
+ // Obey "following style" setting
+ bool styleApplied = false;
+ if ( style )
+ {
+ KoParagStyle * newStyle = style->followingStyle();
+ if ( newStyle && style != newStyle ) // if same style, keep paragraph-specific changes as usual
+ {
+ setParagLayout( newStyle->paragLayout() );
+ KoTextFormat * format = &newStyle->format();
+ setFormat( format );
+ format->addRef();
+ str->setFormat( 0, format, true ); // prepare format for text insertion
+ styleApplied = true;
+ }
+ }
+ // This should never happen in KWord, but it happens in KPresenter
+ //else
+ // kdWarning() << "Paragraph has no style " << paragId() << endl;
+
+ // No "following style" setting, or same style -> copy layout & format of previous paragraph
+ if (!styleApplied)
+ {
+ setParagLayout( parag->paragLayout() );
+ // Remove pagebreak flags from initial parag - they got copied to the new parag
+ parag->m_layout.pageBreaking &= ~KoParagLayout::HardFrameBreakBefore;
+ parag->m_layout.pageBreaking &= ~KoParagLayout::HardFrameBreakAfter;
+ // Remove footnote counter text from second parag
+ if ( m_layout.counter && m_layout.counter->numbering() == KoParagCounter::NUM_FOOTNOTE )
+ setNoCounter();
+ // Do not copy 'restart numbering at this paragraph' option (would be silly)
+ if ( m_layout.counter )
+ m_layout.counter->setRestartCounter(false);
+
+ // set parag format to the format of the trailing space of the previous parag
+ setFormat( parag->at( parag->length()-1 )->format() );
+ // KoTextCursor::splitAndInsertEmptyParag takes care of setting the format
+ // for the chars in the new parag
+ }
+
+ // Note: we don't call the original KoTextParag::copyParagData on purpose.
+ // We don't want setListStyle to get called - it ruins our stylesheetitems
+ // And we don't care about copying the stylesheetitems directly,
+ // applying the parag layout will create them
+}
+
+void KoTextParag::setTabList( const KoTabulatorList &tabList )
+{
+ KoTabulatorList lst( tabList );
+ m_layout.setTabList( lst );
+ if ( !tabList.isEmpty() )
+ {
+ KoTextZoomHandler* zh = textDocument()->formattingZoomHandler();
+ int * tabs = new int[ tabList.count() + 1 ]; // will be deleted by ~KoTextParag
+ KoTabulatorList::Iterator it = lst.begin();
+ unsigned int i = 0;
+ for ( ; it != lst.end() ; ++it, ++i )
+ tabs[i] = zh->ptToLayoutUnitPixX( (*it).ptPos );
+ tabs[i] = 0;
+ assert( i == tabList.count() );
+ setTabArray( tabs );
+ } else
+ {
+ setTabArray( 0 );
+ }
+ invalidate( 0 );
+}
+
+/** "Reimplemented" (compared to nextTabDefault) to implement non-left-aligned tabs */
+int KoTextParag::nextTab( int chnum, int x, int availableWidth )
+{
+ if ( !m_layout.tabList().isEmpty() )
+ {
+ // Fetch the zoomed and sorted tab positions from KoTextParag
+ // We stored them there for faster access
+ int * tArray = tabArray();
+ int i = 0;
+ if ( str->isRightToLeft() )
+ i = m_layout.tabList().size() - 1;
+ KoTextZoomHandler* zh = textDocument()->formattingZoomHandler();
+
+ while ( i >= 0 && i < (int)m_layout.tabList().size() ) {
+ //kdDebug(32500) << "KoTextParag::nextTab tArray[" << i << "]=" << tArray[i] << " type " << m_layout.tabList()[i].type << endl;
+ int tab = tArray[ i ];
+
+ // If a right-aligned tab is after the right edge then assume
+ // that it -is- on the right edge, otherwise the last letters will fall off.
+ // This is compatible with OOo's behavior.
+ if ( tab > availableWidth ) {
+ //kdDebug(32500) << "Tab position adjusted to availableWidth=" << availableWidth << endl;
+ tab = availableWidth;
+ }
+
+ if ( str->isRightToLeft() )
+ tab = availableWidth - tab;
+
+ if ( tab > x ) {
+ int type = m_layout.tabList()[i].type;
+
+ // fix the tab type for right to left text
+ if ( str->isRightToLeft() )
+ if ( type == T_RIGHT )
+ type = T_LEFT;
+ else if ( type == T_LEFT )
+ type = T_RIGHT;
+
+ switch ( type ) {
+ case T_RIGHT:
+ case T_CENTER:
+ {
+ // Look for the next tab (or EOL)
+ int c = chnum + 1;
+ int w = 0;
+ while ( c < str->length() - 1 && str->at( c ).c != '\t' && str->at( c ).c != '\n' )
+ {
+ KoTextStringChar & ch = str->at( c );
+ // Determine char width
+ // This must be done in the same way as in KoTextFormatter::format() or there can be different rounding errors.
+ if ( ch.isCustom() )
+ w += ch.customItem()->width;
+ else
+ {
+ KoTextFormat *charFormat = ch.format();
+ int ww = charFormat->charWidth( zh, false, &ch, this, c );
+ ww = KoTextZoomHandler::ptToLayoutUnitPt( ww );
+ w += ww;
+ }
+ ++c;
+ }
+
+ m_tabCache[chnum] = i;
+
+ if ( type == T_RIGHT )
+ return tab - w;
+ else // T_CENTER
+ return tab - w/2;
+ }
+ case T_DEC_PNT:
+ {
+ // Look for the next tab (or EOL), and for alignChar
+ // Default to right-aligned if no decimal point found (behavior from msword)
+ int c = chnum + 1;
+ int w = 0;
+ while ( c < str->length()-1 && str->at( c ).c != '\t' && str->at( c ).c != '\n' )
+ {
+ KoTextStringChar & ch = str->at( c );
+ if ( ch.c == m_layout.tabList()[i].alignChar )
+ {
+ // Can't use ch.width yet, since the formatter hasn't run over those chars
+ int ww = ch.format()->charWidth( zh, false, &ch, this, c );
+ ww = KoTextZoomHandler::ptToLayoutUnitPt( ww );
+ if ( str->isRightToLeft() )
+ {
+ w = ww / 2; // center around the decimal point
+ ++c;
+ continue;
+ }
+ else
+ {
+ w += ww / 2; // center around the decimal point
+ break;
+ }
+ }
+
+ // Determine char width
+ if ( ch.isCustom() )
+ w += ch.customItem()->width;
+ else
+ {
+ int ww = ch.format()->charWidth( zh, false, &ch, this, c );
+ w += KoTextZoomHandler::ptToLayoutUnitPt( ww );
+ }
+
+ ++c;
+ }
+ m_tabCache[chnum] = i;
+ return tab - w;
+ }
+ default: // case T_LEFT:
+ m_tabCache[chnum] = i;
+ return tab;
+ }
+ }
+ if ( str->isRightToLeft() )
+ --i;
+ else
+ ++i;
+ }
+ }
+ // No tab list, use tab-stop-width. qrichtext.cpp has the code :)
+ return KoTextParag::nextTabDefault( chnum, x );
+}
+
+void KoTextParag::applyStyle( KoParagStyle *style )
+{
+ setParagLayout( style->paragLayout() );
+ KoTextFormat *newFormat = &style->format();
+ setFormat( 0, str->length(), newFormat );
+ setFormat( newFormat );
+}
+
+void KoTextParag::setParagLayout( const KoParagLayout & layout, int flags, int marginIndex )
+{
+ //kdDebug(32500) << "KoTextParag::setParagLayout flags=" << flags << endl;
+ if ( flags & KoParagLayout::Alignment )
+ setAlign( layout.alignment );
+ if ( flags & KoParagLayout::Margins ) {
+ if ( marginIndex == -1 )
+ setMargins( layout.margins );
+ else
+ setMargin( (QStyleSheetItem::Margin)marginIndex, layout.margins[marginIndex] );
+ }
+ if ( flags & KoParagLayout::LineSpacing )
+ {
+ setLineSpacingType( layout.lineSpacingType );
+ setLineSpacing( layout.lineSpacingValue() );
+ }
+ if ( flags & KoParagLayout::Borders )
+ {
+ setLeftBorder( layout.leftBorder );
+ setRightBorder( layout.rightBorder );
+ setTopBorder( layout.topBorder );
+ setBottomBorder( layout.bottomBorder );
+ setJoinBorder( layout.joinBorder );
+ }
+ if ( flags & KoParagLayout::BackgroundColor )
+ {
+ setBackgroundColor( layout.backgroundColor );
+ }
+ if ( flags & KoParagLayout::BulletNumber )
+ setCounter( layout.counter );
+ if ( flags & KoParagLayout::Tabulator )
+ setTabList( layout.tabList() );
+ if ( flags == KoParagLayout::All )
+ {
+ setDirection( static_cast<QChar::Direction>(layout.direction) );
+ // Don't call applyStyle from here, it would overwrite any paragraph-specific settings
+ setStyle( layout.style );
+ }
+}
+
+void KoTextParag::setCustomItem( int index, KoTextCustomItem * custom, KoTextFormat * currentFormat )
+{
+ //kdDebug(32500) << "KoTextParag::setCustomItem " << index << " " << (void*)custom
+ // << " currentFormat=" << (void*)currentFormat << endl;
+ if ( currentFormat )
+ setFormat( index, 1, currentFormat );
+ at( index )->setCustomItem( custom );
+ //addCustomItem();
+ document()->registerCustomItem( custom, this );
+ custom->recalc(); // calc value (e.g. for variables) and set initial size
+ invalidate( 0 );
+ setChanged( true );
+}
+
+void KoTextParag::removeCustomItem( int index )
+{
+ Q_ASSERT( at( index )->isCustom() );
+ KoTextCustomItem * item = at( index )->customItem();
+ at( index )->loseCustomItem();
+ //KoTextParag::removeCustomItem();
+ document()->unregisterCustomItem( item, this );
+}
+
+
+int KoTextParag::findCustomItem( const KoTextCustomItem * custom ) const
+{
+ int len = str->length();
+ for ( int i = 0; i < len; ++i )
+ {
+ KoTextStringChar & ch = str->at(i);
+ if ( ch.isCustom() && ch.customItem() == custom )
+ return i;
+ }
+ kdWarning() << "KoTextParag::findCustomItem custom item " << (void*)custom
+ << " not found in paragraph " << paragId() << endl;
+ return 0;
+}
+
+#ifndef NDEBUG
+void KoTextParag::printRTDebug( int info )
+{
+ QString specialFlags;
+ if ( str->needsSpellCheck() )
+ specialFlags += " needsSpellCheck=true";
+ if ( wasMovedDown() )
+ specialFlags += " wasMovedDown=true";
+ if ( partOfTableOfContents() )
+ specialFlags += " part-of-TOC=true";
+ kdDebug(32500) << "Paragraph " << this << " (" << paragId() << ") [changed="
+ << hasChanged() << ", valid=" << isValid()
+ << specialFlags
+ << "] ------------------ " << endl;
+ if ( prev() && prev()->paragId() + 1 != paragId() )
+ kdWarning() << " Previous paragraph " << prev() << " has ID " << prev()->paragId() << endl;
+ if ( next() && next()->paragId() != paragId() + 1 )
+ kdWarning() << " Next paragraph " << next() << " has ID " << next()->paragId() << endl;
+ //if ( !next() )
+ // kdDebug(32500) << " next is 0L" << endl;
+ kdDebug(32500) << " Style: " << style() << " " << ( style() ? style()->name().local8Bit().data() : "NO STYLE" ) << endl;
+ kdDebug(32500) << " Text: '" << str->toString() << "'" << endl;
+ if ( info == 0 ) // paragraph info
+ {
+ if ( m_layout.counter )
+ {
+ m_layout.counter->printRTDebug( this );
+ }
+ static const char * const s_align[] = { "Auto", "Left", "Right", "ERROR", "HCenter", "ERR", "ERR", "ERR", "Justify", };
+ static const char * const s_linespacing[] = { "Single", "1.5", "2", "custom", "atLeast", "Multiple", "Fixed" };
+ static const char * const s_dir[] = { "DirL", "DirR", "DirEN", "DirES", "DirET", "DirAN", "DirCS", "DirB", "DirS", "DirWS", "DirON", "DirLRE", "DirLRO", "DirAL", "DirRLE", "DirRLO", "DirPDF", "DirNSM", "DirBN" };
+ kdDebug(32500) << " align: " << s_align[alignment()] << " resolveAlignment: " << s_align[resolveAlignment()]
+ << " isRTL:" << str->isRightToLeft()
+ << " dir: " << s_dir[direction()] << endl;
+ QRect pixr = pixelRect( textDocument()->paintingZoomHandler() );
+ kdDebug(32500) << " rect() : " << DEBUGRECT( rect() )
+ << " pixelRect() : " << DEBUGRECT( pixr ) << endl;
+ kdDebug(32500) << " topMargin()=" << topMargin()
+ << " breakableTopMargin()=" << breakableTopMargin()
+ << " bottomMargin()=" << bottomMargin()
+ << " leftMargin()=" << leftMargin() << " firstLineMargin()=" << firstLineMargin()
+ << " rightMargin()=" << rightMargin() << endl;
+ if ( kwLineSpacingType() != KoParagLayout::LS_SINGLE )
+ kdDebug(32500) << " linespacing type=" << s_linespacing[ -kwLineSpacingType() ]
+ << " value=" << kwLineSpacing() << endl;
+ const int pageBreaking = m_layout.pageBreaking;
+ QStringList pageBreakingFlags;
+ if ( pageBreaking & KoParagLayout::KeepLinesTogether )
+ pageBreakingFlags.append( "KeepLinesTogether" );
+ if ( pageBreaking & KoParagLayout::HardFrameBreakBefore )
+ pageBreakingFlags.append( "HardFrameBreakBefore" );
+ if ( pageBreaking & KoParagLayout::HardFrameBreakAfter )
+ pageBreakingFlags.append( "HardFrameBreakAfter" );
+ if ( pageBreaking & KoParagLayout::KeepWithPrevious )
+ pageBreakingFlags.append( "KeepWithPrevious" );
+ if ( pageBreaking & KoParagLayout::KeepWithNext )
+ pageBreakingFlags.append( "KeepWithNext" );
+ if ( !pageBreakingFlags.isEmpty() )
+ kdDebug(32500) << " page Breaking: " << pageBreakingFlags.join(",") << endl;
+
+ static const char * const tabtype[] = { "T_LEFT", "T_CENTER", "T_RIGHT", "T_DEC_PNT", "error!!!" };
+ KoTabulatorList tabList = m_layout.tabList();
+ if ( tabList.isEmpty() ) {
+ if ( str->toString().find( '\t' ) != -1 )
+ kdDebug(32500) << "Tab width: " << textDocument()->tabStopWidth() << endl;
+ } else {
+ KoTabulatorList::Iterator it = tabList.begin();
+ for ( ; it != tabList.end() ; it++ )
+ kdDebug(32500) << "Tab type:" << tabtype[(*it).type] << " at: " << (*it).ptPos << endl;
+ }
+ } else if ( info == 1 ) // formatting info
+ {
+ kdDebug(32500) << " Paragraph format=" << paragFormat() << " " << paragFormat()->key()
+ << " fontsize:" << dynamic_cast<KoTextFormat *>(paragFormat())->pointSize() << endl;
+
+ for ( int line = 0 ; line < lines(); ++ line ) {
+ int y, h, baseLine;
+ lineInfo( line, y, h, baseLine );
+ int startOfLine;
+ lineStartOfLine( line, &startOfLine );
+ kdDebug(32500) << " Line " << line << " y=" << y << " height=" << h << " baseLine=" << baseLine << " startOfLine(index)=" << startOfLine << endl;
+ }
+ kdDebug(32500) << endl;
+ KoTextString * s = string();
+ int lastX = 0; // pixels
+ int lastW = 0; // pixels
+ for ( int i = 0 ; i < s->length() ; ++i )
+ {
+ KoTextStringChar & ch = s->at(i);
+ int pixelx = textDocument()->formattingZoomHandler()->layoutUnitToPixelX( ch.x )
+ + ch.pixelxadj;
+ if ( ch.lineStart )
+ kdDebug(32500) << "LINESTART" << endl;
+ QString attrs = " ";
+ if ( ch.whiteSpace )
+ attrs += "whitespace ";
+ if ( !ch.charStop )
+ attrs += "notCharStop ";
+ if ( ch.wordStop )
+ attrs += "wordStop ";
+ attrs.truncate( attrs.length() - 1 );
+
+ kdDebug(32500) << i << ": '" << QString(ch.c).rightJustify(2)
+ << "' (" << QString::number( ch.c.unicode() ).rightJustify(3) << ")"
+ << " x(LU)=" << ch.x
+ << " w(LU)=" << ch.width//s->width(i)
+ << " x(PIX)=" << pixelx
+ << " (xadj=" << + ch.pixelxadj << ")"
+ << " w(PIX)=" << ch.pixelwidth
+ << " height=" << ch.height()
+ << attrs
+ // << " format=" << ch.format()
+ // << " \"" << ch.format()->key() << "\" "
+ //<< " fontsize:" << dynamic_cast<KoTextFormat *>(ch.format())->pointSize()
+ << endl;
+
+ // Check that the format is in the collection (i.e. its defaultFormat or in the dict)
+ if ( ch.format() != textDocument()->formatCollection()->defaultFormat() )
+ Q_ASSERT( textDocument()->formatCollection()->dict()[ch.format()->key()] );
+
+ if ( !str->isBidi() && !ch.lineStart )
+ Q_ASSERT( lastX + lastW == pixelx ); // looks like some rounding problem with justified spaces
+ lastX = pixelx;
+ lastW = ch.pixelwidth;
+ if ( ch.isCustom() )
+ {
+ KoTextCustomItem * item = ch.customItem();
+ kdDebug(32500) << " - custom item " << item
+ << " ownline=" << item->ownLine()
+ << " size=" << item->width << "x" << item->height
+ << " ascent=" << item->ascent()
+ << endl;
+ }
+ }
+ }
+}
+#endif
+
+void KoTextParag::drawFontEffects( QPainter * p, KoTextFormat *format, KoTextZoomHandler *zh, QFont font, const QColor & color, int startX, int baseLine, int bw, int lastY, int /*h*/, QChar firstChar )
+{
+ // This is about drawing underlines and strikeouts
+ // So abort immediately if there's none to draw.
+ if ( !format->isStrikedOrUnderlined() )
+ return;
+ //kdDebug(32500) << "drawFontEffects wordByWord=" << format->wordByWord() <<
+ // " firstChar='" << QString(firstChar) << "'" << endl;
+ // paintLines ensures that we're called word by word if wordByWord is true.
+ if ( format->wordByWord() && firstChar.isSpace() )
+ return;
+
+ double dimd;
+ int y;
+ int offset = 0;
+ if (format->vAlign() == KoTextFormat::AlignSubScript )
+ offset = p->fontMetrics().height() / 6;
+ else if (format->vAlign() == KoTextFormat::AlignSuperScript )
+ offset = -p->fontMetrics().height() / 2;
+
+ dimd = KoBorder::zoomWidthY( format->underLineWidth(), zh, 1 );
+ if((format->vAlign() == KoTextFormat::AlignSuperScript) ||
+ (format->vAlign() == KoTextFormat::AlignSubScript ) || (format->vAlign() == KoTextFormat::AlignCustom ))
+ dimd*=format->relativeTextSize();
+ y = lastY + baseLine + offset - ( (format->vAlign() == KoTextFormat::AlignCustom)?format->offsetFromBaseLine():0 );
+
+ if ( format->doubleUnderline())
+ {
+ QColor col = format->textUnderlineColor().isValid() ? format->textUnderlineColor(): color ;
+ int dim=static_cast<int>(0.75*dimd);
+ dim=dim?dim:1; //width of line should be at least 1
+ p->save();
+
+ switch( format->underlineStyle())
+ {
+ case KoTextFormat::U_SOLID:
+ p->setPen( QPen( col, dim, Qt::SolidLine ) );
+ break;
+ case KoTextFormat::U_DASH:
+ p->setPen( QPen( col, dim, Qt::DashLine ) );
+ break;
+ case KoTextFormat::U_DOT:
+ p->setPen( QPen( col, dim, Qt::DotLine ) );
+ break;
+ case KoTextFormat::U_DASH_DOT:
+ p->setPen( QPen( col, dim, Qt::DashDotLine ) );
+ break;
+ case KoTextFormat::U_DASH_DOT_DOT:
+ p->setPen( QPen( col, dim, Qt::DashDotDotLine ) );
+ break;
+ default:
+ p->setPen( QPen( color, dim, Qt::SolidLine ) );
+ }
+
+ y += static_cast<int>(1.125*dimd); // slightly under the baseline if possible
+ p->drawLine( startX, y, startX + bw, y );
+ y += static_cast<int>(1.5*dimd);
+ p->drawLine( startX, y, startX + bw, y );
+ p->restore();
+ if ( font.underline() ) { // can this happen?
+ font.setUnderline( FALSE );
+ p->setFont( font );
+ }
+ }
+ else if ( format->underline() ||
+ format->underlineType() == KoTextFormat::U_SIMPLE_BOLD)
+ {
+
+ QColor col = format->textUnderlineColor().isValid() ? format->textUnderlineColor(): color ;
+ p->save();
+ int dim=(format->underlineType() == KoTextFormat::U_SIMPLE_BOLD)?static_cast<int>(2*dimd):static_cast<int>(dimd);
+ dim=dim?dim:1; //width of line should be at least 1
+ y += static_cast<int>(1.875*dimd);
+
+ switch( format->underlineStyle() )
+ {
+ case KoTextFormat::U_SOLID:
+ p->setPen( QPen( col, dim, Qt::SolidLine ) );
+ break;
+ case KoTextFormat::U_DASH:
+ p->setPen( QPen( col, dim, Qt::DashLine ) );
+ break;
+ case KoTextFormat::U_DOT:
+ p->setPen( QPen( col, dim, Qt::DotLine ) );
+ break;
+ case KoTextFormat::U_DASH_DOT:
+ p->setPen( QPen( col, dim, Qt::DashDotLine ) );
+ break;
+ case KoTextFormat::U_DASH_DOT_DOT:
+ p->setPen( QPen( col, dim, Qt::DashDotDotLine ) );
+ break;
+ default:
+ p->setPen( QPen( col, dim, Qt::SolidLine ) );
+ }
+
+ p->drawLine( startX, y, startX + bw, y );
+ p->restore();
+ font.setUnderline( FALSE );
+ p->setFont( font );
+ }
+ else if ( format->waveUnderline() )
+ {
+ int dim=static_cast<int>(dimd);
+ dim=dim?dim:1; //width of line should be at least 1
+ y += dim;
+ QColor col = format->textUnderlineColor().isValid() ? format->textUnderlineColor(): color ;
+ p->save();
+ int offset = 2 * dim;
+ QPen pen(col, dim, Qt::SolidLine);
+ pen.setCapStyle(Qt::RoundCap);
+ p->setPen(pen);
+ Q_ASSERT(offset);
+ double anc=acos(1.0-2*(static_cast<double>(offset-(startX)%offset)/static_cast<double>(offset)))/3.1415*180;
+ int pos=1;
+ //set starting position
+ if(2*((startX/offset)/2)==startX/offset)
+ pos*=-1;
+ //draw first part of wave
+ p->drawArc( (startX/offset)*offset, y, offset, offset, 0, -qRound(pos*anc*16) );
+ //now the main part
+ int zigzag_x = (startX/offset+1)*offset;
+ for ( ; zigzag_x + offset <= bw+startX; zigzag_x += offset)
+ {
+ p->drawArc( zigzag_x, y, offset, offset, 0, pos*180*16 );
+ pos*=-1;
+ }
+ //and here we finish
+ anc=acos(1.0-2*(static_cast<double>((startX+bw)%offset)/static_cast<double>(offset)))/3.1415*180;
+ p->drawArc( zigzag_x, y, offset, offset, 180*16, -qRound(pos*anc*16) );
+ p->restore();
+ font.setUnderline( FALSE );
+ p->setFont( font );
+ }
+
+ dimd = KoBorder::zoomWidthY( static_cast<double>(format->pointSize())/18.0, zh, 1 );
+ if((format->vAlign() == KoTextFormat::AlignSuperScript) ||
+ (format->vAlign() == KoTextFormat::AlignSubScript ) || (format->vAlign() == KoTextFormat::AlignCustom ))
+ dimd*=format->relativeTextSize();
+ y = lastY + baseLine + offset - ( (format->vAlign() == KoTextFormat::AlignCustom)?format->offsetFromBaseLine():0 );
+
+ if ( format->strikeOutType() == KoTextFormat::S_SIMPLE
+ || format->strikeOutType() == KoTextFormat::S_SIMPLE_BOLD)
+ {
+ unsigned int dim = (format->strikeOutType() == KoTextFormat::S_SIMPLE_BOLD)? static_cast<int>(2*dimd) : static_cast<int>(dimd);
+ p->save();
+
+ switch( format->strikeOutStyle() )
+ {
+ case KoTextFormat::S_SOLID:
+ p->setPen( QPen( color, dim, Qt::SolidLine ) );
+ break;
+ case KoTextFormat::S_DASH:
+ p->setPen( QPen( color, dim, Qt::DashLine ) );
+ break;
+ case KoTextFormat::S_DOT:
+ p->setPen( QPen( color, dim, Qt::DotLine ) );
+ break;
+ case KoTextFormat::S_DASH_DOT:
+ p->setPen( QPen( color, dim, Qt::DashDotLine ) );
+ break;
+ case KoTextFormat::S_DASH_DOT_DOT:
+ p->setPen( QPen( color, dim, Qt::DashDotDotLine ) );
+ break;
+ default:
+ p->setPen( QPen( color, dim, Qt::SolidLine ) );
+ }
+
+ y -= static_cast<int>(5*dimd);
+ p->drawLine( startX, y, startX + bw, y );
+ p->restore();
+ font.setStrikeOut( FALSE );
+ p->setFont( font );
+ }
+ else if ( format->strikeOutType() == KoTextFormat::S_DOUBLE )
+ {
+ unsigned int dim = static_cast<int>(dimd);
+ p->save();
+
+ switch( format->strikeOutStyle() )
+ {
+ case KoTextFormat::S_SOLID:
+ p->setPen( QPen( color, dim, Qt::SolidLine ) );
+ break;
+ case KoTextFormat::S_DASH:
+ p->setPen( QPen( color, dim, Qt::DashLine ) );
+ break;
+ case KoTextFormat::S_DOT:
+ p->setPen( QPen( color, dim, Qt::DotLine ) );
+ break;
+ case KoTextFormat::S_DASH_DOT:
+ p->setPen( QPen( color, dim, Qt::DashDotLine ) );
+ break;
+ case KoTextFormat::S_DASH_DOT_DOT:
+ p->setPen( QPen( color, dim, Qt::DashDotDotLine ) );
+ break;
+ default:
+ p->setPen( QPen( color, dim, Qt::SolidLine ) );
+ }
+
+ y -= static_cast<int>(4*dimd);
+ p->drawLine( startX, y, startX + bw, y);
+ y -= static_cast<int>(2*dimd);
+ p->drawLine( startX, y, startX + bw, y);
+ p->restore();
+ font.setStrikeOut( FALSE );
+ p->setFont( font );
+ }
+
+}
+
+// ### is this method correct for RTL text?
+QString KoTextParag::toString( int from, int length ) const
+{
+ QString str;
+ if ( from == 0 && m_layout.counter && m_layout.counter->numbering() != KoParagCounter::NUM_FOOTNOTE )
+ str += m_layout.counter->text( this ) + ' ';
+ if ( length == -1 )
+ length = this->length() - 1 /*trailing space*/ - from;
+ for ( int i = from ; i < (length+from) ; ++i )
+ {
+ KoTextStringChar *ch = at( i );
+ if ( ch->isCustom() )
+ {
+ KoVariable * var = dynamic_cast<KoVariable *>(ch->customItem());
+ if ( var )
+ str += var->text(true);
+ else //frame inline
+ str +=' ';
+ }
+ else
+ str += ch->c;
+ }
+ return str;
+}
+
+// we cannot use QString::simplifyWhiteSpace() because it removes
+// leading and trailing whitespace, but such whitespace is significant
+// in ODF -- so we use this function to compress sequences of space characters
+// into single spaces
+static QString normalizeWhitespace( const QString& in, bool leadingSpace )
+{
+ QString text = in;
+ int r, w = 0;
+ int len = text.length();
+
+ for ( r = 0; r < len; ++r )
+ {
+ QCharRef ch = text[r];
+
+ // check for space, tab, line feed, carriage return
+ if ( ch == ' ' || ch == '\t' ||ch == '\r' || ch == '\n')
+ {
+ // if we were lead by whitespace in some parent or previous sibling element,
+ // we completely collapse this space
+ if ( r != 0 || !leadingSpace )
+ text[w++] = QChar( ' ' );
+
+ // find the end of the whitespace run
+ while ( r < len && text[r].isSpace() )
+ ++r;
+
+ // and then record the next non-whitespace character
+ if ( r < len )
+ text[w++] = text[r];
+ }
+ else
+ {
+ text[w++] = ch;
+ }
+ }
+
+ // and now trim off the unused part of the string
+ text.truncate(w);
+
+ return text;
+}
+
+void KoTextParag::loadOasisSpan( const QDomElement& parent, KoOasisContext& context, uint& pos, bool stripLeadingSpace )
+{
+ bool dummy;
+
+ return loadOasisSpan( parent, context, pos, stripLeadingSpace, &dummy );
+}
+
+void KoTextParag::loadOasisSpan( const QDomElement& parent, KoOasisContext& context, uint& pos, bool stripLeadingSpace, bool *hasTrailingSpace )
+{
+ // Parse every child node of the parent
+ // Can't use forEachElement here since we also care about text nodes
+ QDomNode node;
+ for ( node = parent.firstChild(); !node.isNull(); node = node.nextSibling() )
+ {
+ QDomElement ts = node.toElement();
+ QString textData;
+ const QString localName( ts.localName() );
+ const bool isTextNS = ts.namespaceURI() == KoXmlNS::text;
+ KoTextCustomItem* customItem = 0;
+
+ // allow loadSpanTag to modify the stylestack
+ context.styleStack().save();
+
+ // Try to keep the order of the tag names by probability of happening
+ if ( node.isText() )
+ {
+ textData = normalizeWhitespace( node.toText().data(), stripLeadingSpace );
+ *hasTrailingSpace = stripLeadingSpace = textData[textData.length() - 1].isSpace();
+ }
+ else if ( isTextNS && localName == "span" ) // text:span
+ {
+ context.styleStack().save();
+ context.fillStyleStack( ts, KoXmlNS::text, "style-name", "text" );
+
+ // the ODF spec states that whitespace is compressed through tags: e.g.
+ // "Foo <text:span> Bar </text:span> Baz"
+ // should only have one space between each of "Foo", "Bar", and "Baz"
+ // so we need to keep track of whether there was any trailing whitespace
+ // in sub-spans so that we can propogate the whitespace compression state
+ // back up to the parent element
+ loadOasisSpan( ts, context, pos, stripLeadingSpace, hasTrailingSpace ); // recurse
+ stripLeadingSpace = *hasTrailingSpace;
+ context.styleStack().restore();
+ }
+ else if ( isTextNS && localName == "s" ) // text:s
+ {
+ int howmany = 1;
+ if (ts.hasAttributeNS( KoXmlNS::text, "c"))
+ howmany = ts.attributeNS( KoXmlNS::text, "c", QString::null).toInt();
+
+ textData.fill(32, howmany);
+ }
+ else if ( isTextNS && localName == "tab" ) // text:tab (it's tab-stop in OO-1.1 but tab in oasis)
+ {
+ textData = '\t';
+ }
+ else if ( isTextNS && localName == "line-break" ) // text:line-break
+ {
+ textData = '\n';
+ }
+ else if ( isTextNS && localName == "number" ) // text:number
+ {
+ // This is the number in front of a numbered paragraph,
+ // written out to help export filters. We can ignore it.
+ }
+ else if ( node.isProcessingInstruction() )
+ {
+ QDomProcessingInstruction pi = node.toProcessingInstruction();
+ if ( pi.target() == "opendocument" && pi.data().startsWith( "cursor-position" ) )
+ {
+ context.setCursorPosition( this, pos );
+ }
+ }
+ else
+ {
+ bool handled = false;
+ // Check if it's a variable
+ KoVariable* var = context.variableCollection().loadOasisField( textDocument(), ts, context );
+ if ( var )
+ {
+ textData = "#"; // field placeholder
+ customItem = var;
+ handled = true;
+ }
+ if ( !handled )
+ {
+ handled = textDocument()->loadSpanTag( ts, context,
+ this, pos,
+ textData, customItem );
+ if ( !handled )
+ {
+ kdWarning(32500) << "Ignoring tag " << ts.tagName() << endl;
+ context.styleStack().restore();
+ continue;
+ }
+ }
+ }
+
+ const uint length = textData.length();
+ if ( length )
+ {
+ insert( pos, textData );
+ if ( customItem )
+ setCustomItem( pos, customItem, 0 );
+ KoTextFormat f;
+ f.load( context );
+ //kdDebug(32500) << "loadOasisSpan: applying formatting from " << pos << " to " << pos+length << "\n format=" << f.key() << endl;
+ setFormat( pos, length, document()->formatCollection()->format( &f ), TRUE );
+ pos += length;
+ }
+ context.styleStack().restore();
+ }
+}
+
+KoParagLayout KoTextParag::loadParagLayout( KoOasisContext& context, KoStyleCollection *styleCollection, bool findStyle )
+{
+ KoParagLayout layout;
+
+ // Only when loading paragraphs, not when loading styles
+ if ( findStyle )
+ {
+ KoParagStyle *style;
+ // Name of the style. If there is no style, then we do not supply
+ // any default!
+ QString styleName = context.styleStack().userStyleName( "paragraph" );
+ if ( !styleName.isEmpty() )
+ {
+ style = styleCollection->findStyle( styleName );
+ // When pasting the style names are random, the display names matter
+ if (!style)
+ style = styleCollection->findStyleByDisplayName( context.styleStack().userStyleDisplayName( "paragraph" ) );
+ if (!style)
+ {
+ kdError(32500) << "Cannot find style \"" << styleName << "\" - using Standard" << endl;
+ style = styleCollection->findStyle( "Standard" );
+ }
+ //else kdDebug() << "KoParagLayout::KoParagLayout setting style to " << style << " " << style->name() << endl;
+ }
+ else
+ {
+ kdError(32500) << "No style name !? - using Standard" << endl;
+ style = styleCollection->findStyle( "Standard" );
+ }
+ Q_ASSERT(style);
+ layout.style = style;
+ }
+
+ KoParagLayout::loadOasisParagLayout( layout, context );
+
+ return layout;
+}
+
+void KoTextParag::loadOasis( const QDomElement& parent, KoOasisContext& context, KoStyleCollection *styleCollection, uint& pos )
+{
+ // First load layout from style
+ KoParagLayout paragLayout = loadParagLayout( context, styleCollection, true );
+ setParagLayout( paragLayout );
+
+ // Load paragraph format
+ KoTextFormat defaultFormat;
+ defaultFormat.load( context );
+ setFormat( document()->formatCollection()->format( &defaultFormat ) );
+
+ // Load text
+ // OO.o compatibility: ignore leading whitespace in <p> and <h> elements
+ loadOasisSpan( parent, context, pos, true );
+
+ // Apply default format to trailing space
+ const int len = str->length();
+ Q_ASSERT( len >= 1 );
+ setFormat( len - 1, 1, paragFormat(), TRUE );
+
+ setChanged( true );
+ invalidate( 0 );
+}
+
+void KoTextParag::saveOasis( KoXmlWriter& writer, KoSavingContext& context,
+ int from /* default 0 */, int to /* usually length()-2 */,
+ bool /*saveAnchorsFramesets*/ /* default false */ ) const
+{
+ KoGenStyles& mainStyles = context.mainStyles();
+
+ // Write paraglayout to styles (with parent == the parag's style)
+ QString parentStyleName;
+ if ( m_layout.style )
+ parentStyleName = m_layout.style->name();
+
+ KoGenStyle autoStyle( KoGenStyle::STYLE_AUTO, "paragraph", parentStyleName );
+ paragFormat()->save( autoStyle, context );
+ m_layout.saveOasis( autoStyle, context, false );
+
+ // First paragraph is special, it includes page-layout info (for word-processing at least)
+ if ( !prev() ) {
+ if ( context.variableSettings() )
+ autoStyle.addProperty( "style:page-number", context.variableSettings()->startingPageNumber() );
+ // Well we support only one page layout, so the first parag always points to "Standard".
+ autoStyle.addAttribute( "style:master-page-name", "Standard" );
+ }
+
+
+ QString autoParagStyleName = mainStyles.lookup( autoStyle, "P", KoGenStyles::ForceNumbering );
+
+ KoParagCounter* paragCounter = m_layout.counter;
+ // outline (text:h) assumes paragCounter != 0 (because depth is mandatory)
+ bool outline = m_layout.style && m_layout.style->isOutline() && paragCounter;
+ bool normalList = paragCounter && paragCounter->style() != KoParagCounter::STYLE_NONE && !outline;
+ if ( normalList ) // non-heading list
+ {
+ writer.startElement( "text:numbered-paragraph" );
+ writer.addAttribute( "text:level", (int)paragCounter->depth() + 1 );
+ if ( paragCounter->restartCounter() )
+ writer.addAttribute( "text:start-value", paragCounter->startNumber() );
+
+ KoGenStyle listStyle( KoGenStyle::STYLE_AUTO_LIST /*, no family*/ );
+ paragCounter->saveOasis( listStyle );
+
+ QString autoListStyleName = mainStyles.lookup( listStyle, "L", KoGenStyles::ForceNumbering );
+ writer.addAttribute( "text:style-name", autoListStyleName );
+
+ QString textNumber = m_layout.counter->text( this );
+ if ( !textNumber.isEmpty() )
+ {
+ // This is to help export filters
+ writer.startElement( "text:number" );
+ writer.addTextNode( textNumber );
+ writer.endElement();
+ }
+ }
+ else if ( outline ) // heading
+ {
+ writer.startElement( "text:h", false /*no indent inside this tag*/ );
+ writer.addAttribute( "text:style-name", autoParagStyleName );
+ writer.addAttribute( "text:outline-level", (int)paragCounter->depth() + 1 );
+ if ( paragCounter->numbering() == KoParagCounter::NUM_NONE )
+ writer.addAttribute( "text:is-list-header", "true" );
+
+ QString textNumber = paragCounter->text( this );
+ if ( !textNumber.isEmpty() )
+ {
+ // This is to help export filters
+ writer.startElement( "text:number" );
+ writer.addTextNode( textNumber );
+ writer.endElement();
+ }
+ }
+
+ if ( !outline ) // normal (non-numbered) paragraph, or normalList
+ {
+ writer.startElement( "text:p", false /*no indent inside this tag*/ );
+ writer.addAttribute( "text:style-name", autoParagStyleName );
+ }
+
+ QString text = str->toString();
+ Q_ASSERT( text.right(1)[0] == ' ' );
+
+ const int cursorIndex = context.cursorTextParagraph() == this ? context.cursorTextIndex() : -1;
+
+ //kdDebug() << k_funcinfo << "'" << text << "' from=" << from << " to=" << to << " cursorIndex=" << cursorIndex << endl;
+
+ // A helper method would need no less than 7 params...
+#define WRITESPAN( next ) { \
+ if ( curFormat == paragFormat() ) { \
+ writer.addTextSpan( text.mid( startPos, next - startPos ), m_tabCache ); \
+ } else { \
+ KoGenStyle gs( KoGenStyle::STYLE_AUTO, "text" ); \
+ curFormat->save( gs, context, paragFormat() ); \
+ writer.startElement( "text:span" ); \
+ if ( !gs.isEmpty() ) { \
+ const QString autoStyleName = mainStyles.lookup( gs, "T" ); \
+ writer.addAttribute( "text:style-name", autoStyleName ); \
+ } \
+ writer.addTextSpan( text.mid( startPos, next - startPos ), m_tabCache ); \
+ writer.endElement(); \
+ } \
+ }
+#define ISSTARTBOOKMARK( i ) bkStartIter != bookmarkStarts.end() && (*bkStartIter).pos == i
+#define ISENDBOOKMARK( i ) bkEndIter != bookmarkEnds.end() && (*bkEndIter).pos == i
+#define CHECKPOS( i ) \
+ if ( cursorIndex == i ) { \
+ writer.addProcessingInstruction( "opendocument cursor-position" ); \
+ } \
+ if ( ISSTARTBOOKMARK( i ) ) { \
+ if ( (*bkStartIter).startEqualsEnd ) \
+ writer.startElement( "text:bookmark" ); \
+ else \
+ writer.startElement( "text:bookmark-start" ); \
+ writer.addAttribute( "text:name", (*bkStartIter).name ); \
+ writer.endElement(); \
+ ++bkStartIter; \
+ } \
+ if ( ISENDBOOKMARK( i ) ) { \
+ writer.startElement( "text:bookmark-end" ); \
+ writer.addAttribute( "text:name", (*bkEndIter).name ); \
+ writer.endElement(); \
+ ++bkEndIter; \
+ }
+
+
+
+ // Make (shallow) copy of bookmark list, since saving an inline frame might overwrite it
+ // from the context while we're saving this paragraph.
+ typedef KoSavingContext::BookmarkPositions BookmarkPositions;
+ BookmarkPositions bookmarkStarts = context.bookmarkStarts();
+ BookmarkPositions::const_iterator bkStartIter = bookmarkStarts.begin();
+ while ( bkStartIter != bookmarkStarts.end() && (*bkStartIter).pos < from )
+ ++bkStartIter;
+ //int nextBookmarkStart = bkStartIter == bookmarkStarts.end() ? -1 : (*bkStartIter).pos;
+ BookmarkPositions bookmarkEnds = context.bookmarkEnds();
+ BookmarkPositions::const_iterator bkEndIter = bookmarkEnds.begin();
+ while ( bkEndIter != bookmarkEnds.end() && (*bkEndIter).pos < from )
+ ++bkEndIter;
+
+ KoTextFormat *curFormat = 0;
+ KoTextFormat *lastFormatRaw = 0; // this is for speeding up "removing misspelled" from each char
+ KoTextFormat *lastFormatFixed = 0; // raw = as stored in the chars; fixed = after removing misspelled
+ int startPos = from;
+ for ( int i = from; i <= to; ++i ) {
+ KoTextStringChar & ch = str->at(i);
+ KoTextFormat * newFormat = static_cast<KoTextFormat *>( ch.format() );
+ if ( newFormat->isMisspelled() ) {
+ if ( newFormat == lastFormatRaw )
+ newFormat = lastFormatFixed; // the fast way
+ else
+ {
+ lastFormatRaw = newFormat;
+ // Remove isMisspelled from format, to avoid useless derived styles
+ // (which would be indentical to their parent style)
+ KoTextFormat tmpFormat( *newFormat );
+ tmpFormat.setMisspelled( false );
+ newFormat = formatCollection()->format( &tmpFormat );
+ lastFormatFixed = newFormat;
+ }
+ }
+ if ( !curFormat )
+ curFormat = newFormat;
+ if ( newFormat != curFormat // Format changed, save previous one.
+ || ch.isCustom() || cursorIndex == i || ISSTARTBOOKMARK( i ) || ISENDBOOKMARK( i ) )
+ {
+ WRITESPAN( i ) // write text up to i-1
+ startPos = i;
+ curFormat = newFormat;
+ }
+ CHECKPOS( i ) // do cursor position and bookmarks
+ if ( ch.isCustom() ) {
+ KoGenStyle gs( KoGenStyle::STYLE_AUTO, "text" );
+ curFormat->save( gs, context, paragFormat() );
+ writer.startElement( "text:span" );
+ if ( !gs.isEmpty() ) {
+ const QString autoStyleName = mainStyles.lookup( gs, "T" );
+ writer.addAttribute( "text:style-name", autoStyleName );
+ }
+ KoTextCustomItem* customItem = ch.customItem();
+ customItem->saveOasis( writer, context );
+ writer.endElement();
+ startPos = i + 1;
+ }
+ }
+
+ //kdDebug() << k_funcinfo << "startPos=" << startPos << " to=" << to << " curFormat=" << curFormat << endl;
+
+ if ( to >= startPos ) { // Save last format
+ WRITESPAN( to + 1 )
+ }
+ CHECKPOS( to + 1 ) // do cursor position and bookmarks
+
+ writer.endElement(); // text:p or text:h
+ if ( normalList )
+ writer.endElement(); // text:numbered-paragraph (englobing a text:p)
+}
+
+void KoTextParag::applyListStyle( KoOasisContext& context, int restartNumbering, bool orderedList, bool heading, int level )
+{
+ //kdDebug(32500) << k_funcinfo << "applyListStyle to parag " << this << " heading=" << heading << endl;
+ delete m_layout.counter;
+ m_layout.counter = new KoParagCounter;
+ m_layout.counter->loadOasis( context, restartNumbering, orderedList, heading, level );
+ // We emulate space-before with a left paragraph indent (#109223)
+ const QDomElement listStyleProperties = context.listStyleStack().currentListStyleProperties();
+ if ( listStyleProperties.hasAttributeNS( KoXmlNS::text, "space-before" ) )
+ {
+ double spaceBefore = KoUnit::parseValue( listStyleProperties.attributeNS( KoXmlNS::text, "space-before", QString::null ) );
+ m_layout.margins[ QStyleSheetItem::MarginLeft ] += spaceBefore; // added to left-margin, see 15.12 in spec.
+ }
+ // need to call invalidateCounters() ? Not during the initial loading at least.
+}
+
+int KoTextParag::documentWidth() const
+{
+ return doc ? doc->width() : 0; //docRect.width();
+}
+
+//int KoTextParag::documentVisibleWidth() const
+//{
+// return doc ? doc->visibleWidth() : 0; //docRect.width();
+//}
+
+int KoTextParag::documentX() const
+{
+ return doc ? doc->x() : 0; //docRect.x();
+}
+
+int KoTextParag::documentY() const
+{
+ return doc ? doc->y() : 0; //docRect.y();
+}
+
+void KoTextParag::fixParagWidth( bool viewFormattingChars )
+{
+ // Fixing the parag rect for the formatting chars (only CR here, KWord handles framebreak).
+ if ( viewFormattingChars && lineStartList().count() == 1 ) // don't use lines() here, parag not formatted yet
+ {
+ KoTextFormat * lastFormat = at( length() - 1 )->format();
+ setWidth( QMIN( rect().width() + lastFormat->width('x'), doc->width() ) );
+ }
+ // Warning, if adding anything else here, adjust KWTextFrameSet::fixParagWidth
+}
+
+// Called by KoTextParag::drawParagString - all params are in pixel coordinates
+void KoTextParag::drawFormattingChars( QPainter &painter, int start, int len,
+ int lastY_pix, int baseLine_pix, int h_pix, // in pixels
+ bool /*drawSelections*/,
+ KoTextFormat * /*lastFormat*/, const QMemArray<int> &/*selectionStarts*/,
+ const QMemArray<int> &/*selectionEnds*/, const QColorGroup & /*cg*/,
+ bool rightToLeft, int /*line*/, KoTextZoomHandler* zh,
+ int whichFormattingChars )
+{
+ if ( !whichFormattingChars )
+ return;
+ painter.save();
+ //QPen pen( cg.color( QColorGroup::Highlight ) );
+ QPen pen( KGlobalSettings::linkColor() ); // #101820
+ painter.setPen( pen );
+ //kdDebug() << "KWTextParag::drawFormattingChars start=" << start << " len=" << len << " length=" << length() << endl;
+ if ( start + len == length() && ( whichFormattingChars & FormattingEndParag ) )
+ {
+ // drawing the end of the parag
+ KoTextStringChar &ch = str->at( length() - 1 );
+ KoTextFormat* format = static_cast<KoTextFormat *>( ch.format() );
+ int w = format->charWidth( zh, true, &ch, this, 'X' );
+ int size = QMIN( w, h_pix * 3 / 4 );
+ // x,y is the bottom right corner of the
+ //kdDebug() << "startX=" << startX << " bw=" << bw << " w=" << w << endl;
+ int x;
+ if ( rightToLeft )
+ x = zh->layoutUnitToPixelX( ch.x ) /*+ ch.pixelxadj*/ + ch.pixelwidth - 1;
+ else
+ x = zh->layoutUnitToPixelX( ch.x ) /*+ ch.pixelxadj*/ + w;
+ int y = lastY_pix + baseLine_pix;
+ //kdDebug() << "KWTextParag::drawFormattingChars drawing CR at " << x << "," << y << endl;
+ painter.drawLine( (int)(x - size * 0.2), y - size, (int)(x - size * 0.2), y );
+ painter.drawLine( (int)(x - size * 0.5), y - size, (int)(x - size * 0.5), y );
+ painter.drawLine( x, y, (int)(x - size * 0.7), y );
+ painter.drawLine( x, y - size, (int)(x - size * 0.5), y - size);
+ painter.drawArc( x - size, y - size, size, (int)(size / 2), -90*16, -180*16 );
+#ifdef DEBUG_FORMATTING
+ painter.setPen( Qt::blue );
+ painter.drawRect( zh->layoutUnitToPixelX( ch.x ) /*+ ch.pixelxadj*/ - 1, lastY_pix, ch.pixelwidth, baseLine_pix );
+ QPen pen( cg.color( QColorGroup::Highlight ) );
+ painter.setPen( pen );
+#endif
+ }
+
+ // Now draw spaces, tabs and newlines
+ if ( (whichFormattingChars & FormattingSpace) ||
+ (whichFormattingChars & FormattingTabs) ||
+ (whichFormattingChars & FormattingBreak) )
+ {
+ int end = QMIN( start + len, length() - 1 ); // don't look at the trailing space
+ for ( int i = start ; i < end ; ++i )
+ {
+ KoTextStringChar &ch = str->at(i);
+#ifdef DEBUG_FORMATTING
+ painter.setPen( (i % 2)? Qt::red: Qt::green );
+ painter.drawRect( zh->layoutUnitToPixelX( ch.x ) /*+ ch.pixelxadj*/ - 1, lastY_pix, ch.pixelwidth, baseLine_pix );
+ QPen pen( cg.color( QColorGroup::Highlight ) );
+ painter.setPen( pen );
+#endif
+ if ( ch.isCustom() )
+ continue;
+ if ( (ch.c == ' ' || ch.c.unicode() == 0x00a0U)
+ && (whichFormattingChars & FormattingSpace))
+ {
+ // Don't use ch.pixelwidth here. We want a square with
+ // the same size for all spaces, even the justified ones
+ int w = zh->layoutUnitToPixelX( ch.format()->width( ' ' ) );
+ int height = zh->layoutUnitToPixelY( ch.ascent() );
+ int size = QMAX( 2, QMIN( w/2, height/3 ) ); // Enfore that it's a square, and that it's visible
+ int x = zh->layoutUnitToPixelX( ch.x ); // + ch.pixelxadj;
+ QRect spcRect( x + (ch.pixelwidth - size) / 2, lastY_pix + baseLine_pix - (height - size) / 2, size, size );
+ if ( ch.c == ' ' )
+ painter.drawRect( spcRect );
+ else // nbsp
+ painter.fillRect( spcRect, pen.color() );
+ }
+ else if ( ch.c == '\t' && (whichFormattingChars & FormattingTabs) )
+ {
+ /*KoTextStringChar &nextch = str->at(i+1);
+ int nextx = (nextch.x > ch.x) ? nextch.x : rect().width();
+ //kdDebug() << "tab x=" << ch.x << " nextch.x=" << nextch.x
+ // << " nextx=" << nextx << " startX=" << startX << " bw=" << bw << endl;
+ int availWidth = nextx - ch.x - 1;
+ availWidth=zh->layoutUnitToPixelX(availWidth);*/
+
+ int availWidth = ch.pixelwidth;
+
+ KoTextFormat* format = ch.format();
+ int x = zh->layoutUnitToPixelX( ch.x ) /*+ ch.pixelxadj*/ + availWidth / 2;
+ int charWidth = format->screenFontMetrics( zh ).width( 'W' );
+ int size = QMIN( availWidth, charWidth ) / 2 ; // actually the half size
+ int y = lastY_pix + baseLine_pix - zh->layoutUnitToPixelY( ch.ascent()/2 );
+ int arrowsize = zh->zoomItY( 2 );
+ painter.drawLine( x - size, y, x + size, y );
+ if ( rightToLeft )
+ {
+ painter.drawLine( x - size, y, x - size + arrowsize, y - arrowsize );
+ painter.drawLine( x - size, y, x - size + arrowsize, y + arrowsize );
+ }
+ else
+ {
+ painter.drawLine( x + size, y, x + size - arrowsize, y - arrowsize );
+ painter.drawLine( x + size, y, x + size - arrowsize, y + arrowsize );
+ }
+ }
+ else if ( ch.c == '\n' && (whichFormattingChars & FormattingBreak) )
+ {
+ // draw line break
+ KoTextFormat* format = static_cast<KoTextFormat *>( ch.format() );
+ int w = format->charWidth( zh, true, &ch, this, 'X' );
+ int size = QMIN( w, h_pix * 3 / 4 );
+ int arrowsize = zh->zoomItY( 2 );
+ // x,y is the bottom right corner of the reversed L
+ //kdDebug() << "startX=" << startX << " bw=" << bw << " w=" << w << endl;
+ int y = lastY_pix + baseLine_pix - arrowsize;
+ //kdDebug() << "KWTextParag::drawFormattingChars drawing Line Break at " << x << "," << y << endl;
+ if ( rightToLeft )
+ {
+ int x = zh->layoutUnitToPixelX( ch.x ) /*+ ch.pixelxadj*/ + ch.pixelwidth - 1;
+ painter.drawLine( x - size, y - size, x - size, y );
+ painter.drawLine( x - size, y, (int)(x - size * 0.3), y );
+ // Now the arrow
+ painter.drawLine( (int)(x - size * 0.3), y, (int)(x - size * 0.3 - arrowsize), y - arrowsize );
+ painter.drawLine( (int)(x - size * 0.3), y, (int)(x - size * 0.3 - arrowsize), y + arrowsize );
+ }
+ else
+ {
+ int x = zh->layoutUnitToPixelX( ch.x ) /*+ ch.pixelxadj*/ + w - 1;
+ painter.drawLine( x, y - size, x, y );
+ painter.drawLine( x, y, (int)(x - size * 0.7), y );
+ // Now the arrow
+ painter.drawLine( (int)(x - size * 0.7), y, (int)(x - size * 0.7 + arrowsize), y - arrowsize );
+ painter.drawLine( (int)(x - size * 0.7), y, (int)(x - size * 0.7 + arrowsize), y + arrowsize );
+ }
+ }
+ }
+ painter.restore();
+ }
+}
+
+int KoTextParag::heightForLineSpacing( int startChar, int lastChar ) const
+{
+ int h = 0;
+ int end = QMIN( lastChar, length() - 1 ); // don't look at the trailing space
+ for( int i = startChar; i <= end; ++i )
+ {
+ const KoTextStringChar &chr = str->at( i );
+ if ( !chr.isCustom() )
+ h = QMAX( h, chr.format()->height() );
+ }
+ return h;
+}
diff --git a/lib/kotext/KoTextParag.h b/lib/kotext/KoTextParag.h
new file mode 100644
index 00000000..1b65b8c3
--- /dev/null
+++ b/lib/kotext/KoTextParag.h
@@ -0,0 +1,583 @@
+#ifndef KOTEXTPARAG_H
+#define KOTEXTPARAG_H
+
+/* This file is part of the KDE project
+ Copyright (C) 2001-2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+// -*- c++ -*-
+
+#include "KoParagLayout.h"
+
+#include "KoTextFormat.h"
+#include "KoRichText.h" // for KoTextString
+class KoTextFormatterBase;
+class KoTextParagLineStart;
+class KoTextString;
+class KoTextDocument;
+class KoParagCounter;
+class KoParagStyle;
+class KoTextCustomItem;
+class KoOasisContext;
+class KoSavingContext;
+class KoStyleCollection;
+
+struct KoTextParagSelection
+{
+ int start, end;
+};
+
+#if defined(Q_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class QMap<int, KoTextParagSelection>;
+template class QMap<int, KoTextParagLineStart*>;
+// MOC_SKIP_END
+#endif
+
+class KOTEXT_EXPORT KoTextParag
+{
+ friend class KoTextDocument;
+ friend class KoTextCursor;
+
+public:
+ KoTextParag( KoTextDocument *d, KoTextParag *pr = 0, KoTextParag *nx = 0, bool updateIds = TRUE );
+ virtual ~KoTextParag();
+
+ KoTextString *string() const;
+ KoTextStringChar *at( int i ) const;
+ int leftGap() const;
+ int length() const;
+
+ // Abstraction over the trailing-space thing, so that it can be removed later
+ int lastCharPos() const { return str->length()-2; }
+
+ void setFormat( KoTextFormat *fm );
+ KoTextFormat *paragFormat() const;
+
+ KoTextDocument *document() const;
+
+ QRect rect() const;
+ void setRect( const QRect& rect ) { r = rect; }
+ void setHeight( int h ) { r.setHeight( h ); }
+ void setWidth( int w ) { r.setWidth( w ); }
+ void show();
+ void hide();
+ bool isVisible() const { return visible; }
+
+ KoTextParag *prev() const;
+ KoTextParag *next() const;
+ void setPrev( KoTextParag *s );
+ void setNext( KoTextParag *s );
+
+ void insert( int index, const QString &s );
+ void append( const QString &s, bool reallyAtEnd = FALSE );
+ void truncate( int index );
+ void remove( int index, int len );
+
+ void move( int &dy );
+ void format( int start = -1, bool doMove = TRUE );
+
+ /// Call this to ensure that format() will be called on this paragraph later on
+ void invalidate( int chr /*ignored*/ = 0 );
+ /// Returns false if format() needs to be called on this paragraph
+ bool isValid() const;
+
+ /// 'changed' tells the painting code what it needs to paint
+ bool hasChanged() const;
+ void setChanged( bool b, bool recursive = FALSE );
+ short int lineChanged(); // first line that has been changed.
+ void setLineChanged( short int line );
+
+ int lineHeightOfChar( int i, int *bl = 0, int *y = 0 ) const;
+ KoTextStringChar *lineStartOfChar( int i, int *index = 0, int *line = 0 ) const;
+ int lines() const;
+ KoTextStringChar *lineStartOfLine( int line, int *index = 0 ) const;
+ int lineY( int l ) const;
+ int lineBaseLine( int l ) const;
+ int lineHeight( int l ) const;
+ void lineInfo( int l, int &y, int &h, int &bl ) const;
+
+ void setSelection( int id, int start, int end );
+ void removeSelection( int id );
+ int selectionStart( int id ) const;
+ int selectionEnd( int id ) const;
+ bool hasSelection( int id ) const;
+ bool hasAnySelection() const;
+ bool fullSelected( int id ) const;
+
+ //void setEndState( int s );
+ //int endState() const;
+
+ void setParagId( int i );
+ int paragId() const;
+
+ QMap<int, KoTextParagLineStart*> &lineStartList();
+
+ void setFormat( int index, int len, const KoTextFormat *f, bool useCollection = TRUE, int flags = -1 );
+
+ void setAlignment( uint a );
+ void setAlignmentDirect( uint a ) { align = a; }
+ uint alignment() const;
+
+ virtual void paint( QPainter &painter, const QColorGroup &cg, KoTextCursor *cursor, bool drawSelections,
+ int clipx, int clipy, int clipw, int cliph ); // kotextparag.cc
+
+
+ int topMargin() const;
+ int bottomMargin() const;
+ int leftMargin() const;
+ int firstLineMargin() const;
+ int rightMargin() const;
+ int lineSpacing( int line ) const;
+ int calculateLineSpacing( int line, int start, int last ) const;
+
+ void registerFloatingItem( KoTextCustomItem *i );
+ void unregisterFloatingItem( KoTextCustomItem *i );
+
+ void setFullWidth( bool b ) { fullWidth = b; }
+ bool isFullWidth() const { return fullWidth; }
+
+ int customItems() const;
+
+ void setDocumentRect( const QRect &r );
+ int documentWidth() const;
+ //int documentVisibleWidth() const;
+ int documentX() const;
+ int documentY() const;
+ KoTextFormatCollection *formatCollection() const;
+ //void setFormatter( KoTextFormatterBase *f );
+ KoTextFormatterBase *formatter() const;
+ //int minimumWidth() const;
+ int widthUsed() const;
+
+ int nextTabDefault( int i, int x );
+ int nextTab( int i, int x, int availableWidth );
+ int *tabArray() const;
+ void setTabArray( int *a );
+ void setTabStops( int tw );
+
+ /// Set whether '\n' should break the paragraph into multiple lines
+ /// Not used
+ void setNewLinesAllowed( bool b );
+ /// Return whether '\n' should break the paragraph into multiple lines
+ bool isNewLinesAllowed() const;
+
+ virtual void join( KoTextParag *s );
+ virtual void copyParagData( KoTextParag *parag );
+
+ //void setBreakable( bool b ) { breakable = b; }
+ //bool isBreakable() const { return breakable; }
+
+ void setMovedDown( bool b ) { movedDown = b; }
+ bool wasMovedDown() const { return movedDown; }
+
+ void setDirection( QChar::Direction d );
+ QChar::Direction direction() const;
+
+ /// Mark a paragraph as being part of the table of contents (kword only)
+ void setPartOfTableOfContents( bool b ) { m_toc = b; }
+ bool partOfTableOfContents() const { return m_toc; }
+
+ // For KoTextFormatter only
+ void insertLineStart( int index, KoTextParagLineStart *ls );
+
+protected:
+ void drawLabel( QPainter* p, int x, int y, int w, int h, int base, const QColorGroup& cg );
+ void drawCursorDefault( QPainter &painter, KoTextCursor *cursor, int curx, int cury, int curh, const QColorGroup &cg );
+ void drawCursor( QPainter &painter, KoTextCursor *cursor, int curx, int cury, int curh, const QColorGroup &cg );
+
+/**
+ * We extend KoTextParag with more (zoom-aware) features,
+ * like linespacing, borders, counter, tabulators, etc.
+ * This also implements WYSIWYG text drawing.
+ */
+public:
+ KoTextDocument * textDocument() const { return document(); }
+
+ KoTextFormat * paragraphFormat() const
+ { return static_cast<KoTextFormat *>( paragFormat() ); }
+
+ /** Sets all or some parameters from a paragLayout struct.
+ * @param flags selects which settings to apply, see KoParagLayout's enum. */
+ virtual void setParagLayout( const KoParagLayout &layout, int flags = KoParagLayout::All,
+ int marginIndex = -1 );
+
+ const KoParagLayout & paragLayout() { return m_layout; }
+
+ // Margins
+ double margin( QStyleSheetItem::Margin m ) { return m_layout.margins[m]; }
+ const double * margins() const { return m_layout.margins; }
+ void setMargin( QStyleSheetItem::Margin m, double _i );
+ void setMargins( const double * _i );
+
+ /** Line spacing in pt if >=0, can also be one of the LS_* values */
+ double kwLineSpacing() const { return m_layout.lineSpacingValue(); }
+
+ void setLineSpacing( double _i );
+
+ KoParagLayout::SpacingType kwLineSpacingType() const { return m_layout.lineSpacingType; }
+
+ void setLineSpacingType( KoParagLayout::SpacingType _type );
+
+
+ /** Use this to change the paragraph alignment, not KoTextParag::setAlignment ! */
+ void setAlign( int align );
+ /** Return the real alignment: Auto is resolved to either Left or Right */
+ int resolveAlignment() const;
+
+ /// The part of the top margin that can be broken by a page break
+ /// Obviously the non-breakable part (e.g. border width) is topMargin()-breakableTopMargin()
+ int breakableTopMargin() const;
+
+ // Borders
+ KoBorder leftBorder() const { return m_layout.leftBorder; }
+ KoBorder rightBorder() const { return m_layout.rightBorder; }
+ KoBorder topBorder() const { return m_layout.topBorder; }
+ KoBorder bottomBorder() const { return m_layout.bottomBorder; }
+ bool hasBorder() const { return m_layout.hasBorder(); }
+ bool joinBorder() const { return m_layout.joinBorder; }
+
+ void setLeftBorder( const KoBorder & _brd ) { m_layout.leftBorder = _brd; }
+ void setRightBorder( const KoBorder & _brd ) { m_layout.rightBorder = _brd; }
+ void setTopBorder( const KoBorder & _brd );
+ void setBottomBorder( const KoBorder & _brd );
+ void setJoinBorder( bool join );
+
+ // Paragraph background
+ QColor backgroundColor() { return m_layout.backgroundColor; }
+ void setBackgroundColor( const QColor& color);
+
+ // Counters are used to implement list and heading numbering/bullets.
+ void setCounter( const KoParagCounter & counter );
+ void setNoCounter();
+ void setCounter( const KoParagCounter * pCounter );
+ KoParagCounter *counter();
+
+ /** The space required to draw the complete counter label (i.e. the Counter for this
+ * paragraph, as well as the Counters for any paragraphs above us in the numbering
+ * hierarchy). @see drawLabel(). */
+ int counterWidth() const;
+
+ /** Style used by this paragraph */
+ KoParagStyle *style() const { return m_layout.style; }
+ /** Sets the style in this paragraph, but doesn't _apply_ it, only sets a reference */
+ void setStyle( KoParagStyle *style ) { m_layout.style = style; }
+ /** Applies the style directly (without undo/redo! See KoTextObject for the full command) */
+ void applyStyle( KoParagStyle *style );
+
+ /** Get tabulator positions */
+ const KoTabulatorList& tabList() const { return m_layout.tabList(); }
+ /** Set tabulator positions */
+ void setTabList( const KoTabulatorList &tabList );
+
+ /** Return the X for the shadow distance in pixels (zoomed) */
+ int shadowX( KoTextZoomHandler *zh ) const;
+ /** Return the Y for the shadow distance in pixels (zoomed) */
+ int shadowY( KoTextZoomHandler *zh ) const;
+ /** Return the Y for the shadow distance in pt */
+ double shadowDistanceY() const;
+
+ /** Set a @p custom item at position @p index, with format @p currentFormat (convenience method) */
+ void setCustomItem( int index, KoTextCustomItem * custom, KoTextFormat * currentFormat );
+ /** Remove the custom item from position @p index, but doesn't delete it */
+ void removeCustomItem( int index );
+
+ /** Find a custom item that we know is somewhere in this paragraph
+ * Returns the index in the paragraph */
+ int findCustomItem( const KoTextCustomItem * custom ) const;
+
+ /** Cache to find a tab by char index, QMap<char index, tab index> */
+ QMap<int, int>& tabCache() { return m_tabCache; }
+
+ /** @return the parag rect, in pixels. This takes care of some rounding problems */
+ QRect pixelRect( KoTextZoomHandler* zh ) const;
+
+ /** draw underline and double underline. Static because it's used
+ * for draw double/simple in variable.
+ */
+ static void drawFontEffects( QPainter * p, KoTextFormat *format, KoTextZoomHandler *zh, QFont font, const QColor & color, int startX, int baseLine, int bw, int y, int h, QChar firstChar );
+
+ /** a bit more clever than KoTextString::toString, e.g. with numbered lists */
+ QString toString( int from = 0, int length = 0xffffffff) const;
+
+ /// The app should call this during formatting - e.g. in formatVertically
+ void fixParagWidth( bool viewFormattingChars );
+
+ /// Load from XML
+ virtual void loadOasis( const QDomElement& e, KoOasisContext& context, KoStyleCollection *styleCollection, uint& pos );
+ /// Save to XML
+ /// By default the whole paragraph is saved. from/to allow to save only a portion of it.
+ /// The 'from' and 'to' characters are both included.
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context,
+ int from, int to, bool saveAnchorsFramesets = false ) const;
+
+ /**
+ * Load a section of text from a oasis based xml tree.
+ * @param parent the xml element that has content as children.
+ * @param context the context
+ * @param stripLeadingSpace whether to remove leading literal whitespace
+ */
+ void loadOasisSpan( const QDomElement& parent, KoOasisContext& context, uint& pos, bool stripLeadingSpace = false );
+
+ /**
+ * Load a section of text from a oasis based xml tree.
+ * @param parent the xml element that has content as children.
+ * @param context the context
+ * @param stripLeadingSpace whether to remove leading literal whitespace
+ * @param hasTrailingSpace whether there was trailing literal whitespace in the span's text
+ */
+ void loadOasisSpan( const QDomElement& parent, KoOasisContext& context, uint& pos, bool stripLeadingSpace, bool *hasTrailingSpace );
+
+ void applyListStyle( KoOasisContext& context, int restartNumbering, bool orderedList, bool heading, int level );
+
+#ifndef NDEBUG
+ void printRTDebug( int );
+#endif
+
+protected:
+ void invalidateCounters();
+ bool lineHyphenated( int l ) const;
+
+ void paintLines( QPainter &painter, const QColorGroup &cg, KoTextCursor *cursor, bool drawSelections,
+ int clipx, int clipy, int clipw, int cliph );
+
+ void drawParagString( QPainter &painter, const QString &str, int start, int len, int startX,
+ int lastY, int baseLine, int bw, int h, bool drawSelections,
+ KoTextFormat *lastFormat, const QMemArray<int> &selectionStarts,
+ const QMemArray<int> &selectionEnds, const QColorGroup &cg, bool rightToLeft, int line );
+ void drawParagStringInternal( QPainter &painter, const QString &s, int start, int len, int startX,
+ int lastY, int baseLine, int bw, int h, bool drawSelections,
+ KoTextFormat *lastFormat, const QMemArray<int> &selectionStarts,
+ const QMemArray<int> &selectionEnds, const QColorGroup &cg, bool rightToLeft, int line, KoTextZoomHandler* zh, bool drawingShadow );
+
+ /// Bitfield for drawFormattingChars's "whichFormattingChars" param
+ enum { FormattingSpace = 1, FormattingBreak = 2, FormattingEndParag = 4, FormattingTabs = 8,
+ AllFormattingChars = FormattingSpace | FormattingBreak | FormattingEndParag | FormattingTabs };
+
+ /// Called by drawParagStringInternal to draw the formatting characters, if the
+ /// kotextdocument drawingflag for it was set.
+ /// The last arg is a bit special: drawParagStringInternal always sets it to "all",
+ /// but reimplementations can change its value.
+ virtual void drawFormattingChars( QPainter &painter, int start, int len,
+ int lastY_pix, int baseLine_pix, int h_pix, // in pixels
+ bool drawSelections,
+ KoTextFormat *format, const QMemArray<int> &selectionStarts,
+ const QMemArray<int> &selectionEnds, const QColorGroup &cg,
+ bool rightToLeft, int line, KoTextZoomHandler* zh,
+ int whichFormattingChars );
+
+protected:
+ KoParagLayout m_layout;
+ QMap<int, int> m_tabCache;
+
+private:
+ KoParagLayout loadParagLayout( KoOasisContext& context, KoStyleCollection *styleCollection, bool findStyle );
+
+
+
+ /////// End of kotext-specific additions
+private:
+ QMap<int, KoTextParagSelection> &selections() const;
+ QPtrList<KoTextCustomItem> &floatingItems() const;
+ /// Returns the height of the biggest character in that line
+ int heightForLineSpacing( int startChar, int lastChar ) const;
+
+ QMap<int, KoTextParagLineStart*> lineStarts;
+ QRect r;
+ KoTextParag *p, *n;
+ KoTextDocument *doc;
+ bool m_invalid : 1;
+ bool changed : 1;
+ bool fullWidth : 1;
+ bool newLinesAllowed : 1;
+ bool visible : 1;
+ bool movedDown : 1;
+ bool m_toc : 1;
+ uint align : 4;
+ short int m_lineChanged;
+ int id;
+ int m_wused;
+ KoTextString *str;
+ QMap<int, KoTextParagSelection> *mSelections;
+ QPtrList<KoTextCustomItem> *mFloatingItems;
+ KoTextFormat *defFormat; // is this really used?
+ int *tArray;
+
+ // Those things are used by QRT for the case of a paragraph without document
+ // We don't use this currently, and it's not worth making EVERY parag bigger
+ // just for a special case that's rarely used. Better have lightweight KoTextDocument
+ // replacement (with common base class), if we ever want efficient single-parag docs...
+ //int tabStopWidth;
+ //QRect docRect;
+ //KoTextFormatterBase *pFormatter;
+ //KoTextDocCommandHistory *commandHistory;
+};
+
+inline int KoTextParag::length() const
+{
+ return str->length();
+}
+
+inline QRect KoTextParag::rect() const
+{
+ return r;
+}
+
+inline KoTextStringChar *KoTextParag::at( int i ) const
+{
+ return &str->at( i );
+}
+
+inline bool KoTextParag::isValid() const
+{
+ return !m_invalid;
+}
+
+inline bool KoTextParag::hasChanged() const
+{
+ return changed;
+}
+
+inline short int KoTextParag::lineChanged()
+{
+ return m_lineChanged;
+}
+
+inline void KoTextParag::append( const QString &s, bool reallyAtEnd )
+{
+ if ( reallyAtEnd )
+ insert( str->length(), s );
+ else
+ insert( QMAX( str->length() - 1, 0 ), s );
+}
+
+inline KoTextParag *KoTextParag::prev() const
+{
+ return p;
+}
+
+inline KoTextParag *KoTextParag::next() const
+{
+ return n;
+}
+
+inline bool KoTextParag::hasAnySelection() const
+{
+ return mSelections ? !selections().isEmpty() : FALSE;
+}
+
+/*inline void KoTextParag::setEndState( int s )
+{
+ if ( s == state )
+ return;
+ state = s;
+}
+
+inline int KoTextParag::endState() const
+{
+ return state;
+}*/
+
+inline void KoTextParag::setParagId( int i )
+{
+ id = i;
+}
+
+inline int KoTextParag::paragId() const
+{
+ //if ( id == -1 )
+ // kdWarning() << "invalid parag id!!!!!!!! (" << (void*)this << ")" << endl;
+ return id;
+}
+
+inline QMap<int, KoTextParagLineStart*> &KoTextParag::lineStartList()
+{
+ return lineStarts;
+}
+
+inline KoTextString *KoTextParag::string() const
+{
+ return str;
+}
+
+inline KoTextDocument *KoTextParag::document() const
+{
+ return doc;
+}
+
+inline void KoTextParag::setAlignment( uint a )
+{
+ if ( a == align )
+ return;
+ align = a;
+ invalidate( 0 );
+}
+
+/*inline void KoTextParag::setListStyle( QStyleSheetItem::ListStyle ls )
+{
+ lstyle = ls;
+ invalidate( 0 );
+}
+
+inline QStyleSheetItem::ListStyle KoTextParag::listStyle() const
+{
+ return lstyle;
+}*/
+
+inline KoTextFormat *KoTextParag::paragFormat() const
+{
+ return defFormat;
+}
+
+inline void KoTextParag::registerFloatingItem( KoTextCustomItem *i )
+{
+ floatingItems().append( i );
+}
+
+inline void KoTextParag::unregisterFloatingItem( KoTextCustomItem *i )
+{
+ floatingItems().removeRef( i );
+}
+
+/*inline void KoTextParag::addCustomItem()
+{
+ numCustomItems++;
+}
+
+inline void KoTextParag::removeCustomItem()
+{
+ numCustomItems--;
+}*/
+
+inline int KoTextParag::customItems() const
+{
+ return mFloatingItems ? mFloatingItems->count() : 0;
+ // was numCustomItems, but no need for a separate count
+}
+
+inline void KoTextParag::setNewLinesAllowed( bool b )
+{
+ newLinesAllowed = b;
+}
+
+inline bool KoTextParag::isNewLinesAllowed() const
+{
+ return newLinesAllowed;
+}
+
+#endif
diff --git a/lib/kotext/KoTextView.cpp b/lib/kotext/KoTextView.cpp
new file mode 100644
index 00000000..c5edcf61
--- /dev/null
+++ b/lib/kotext/KoTextView.cpp
@@ -0,0 +1,1549 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2006 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextView.h"
+#include "KoTextParag.h"
+#include "KoParagCounter.h"
+#include "KoTextObject.h"
+#include "KoTextViewIface.h"
+#include "KoStyleCollection.h"
+#include "KoBgSpellCheck.h"
+#include "KoVariable.h"
+
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kstdaccel.h>
+#include <kdebug.h>
+#include <kinstance.h>
+#include <kdatatool.h>
+#include <krun.h>
+#include <kmessagebox.h>
+#include <kcommand.h>
+#include <kbookmarkmanager.h>
+#include <kbookmark.h>
+#include <kurldrag.h>
+
+#include <qapplication.h>
+#include <qtimer.h>
+#include <qclipboard.h>
+
+class KoTextView::KoTextViewPrivate
+{
+public:
+ KoTextViewPrivate()
+ {
+ m_currentUnicodeNumber = 0;
+ m_backSpeller = 0;
+ }
+
+ void appendDigit( int digit ) { m_currentUnicodeNumber = 10 * m_currentUnicodeNumber + digit; }
+ int currentUnicodeNumber() const { return m_currentUnicodeNumber; }
+ void clearCurrentUnicodeNumber() { m_currentUnicodeNumber = 0; }
+
+ KoBgSpellCheck* m_backSpeller;
+
+private:
+ int m_currentUnicodeNumber; // For the alt+123 feature
+};
+
+KoTextView::KoTextView( KoTextObject *textobj )
+{
+ d = new KoTextViewPrivate;
+ m_bReadWrite = true;
+ m_textobj = textobj;
+ dcop=0;
+ connect( m_textobj, SIGNAL( hideCursor() ), this, SLOT( hideCursor() ) );
+ connect( m_textobj, SIGNAL( showCursor() ), this, SLOT( showCursor() ) );
+ connect( m_textobj, SIGNAL( setCursor( KoTextCursor * ) ), this, SLOT( setCursor( KoTextCursor * ) ) );
+ connect( m_textobj, SIGNAL( updateUI(bool, bool) ), this, SLOT( updateUI(bool, bool) ) );
+ connect( m_textobj, SIGNAL( showCurrentFormat() ), this, SLOT( showCurrentFormat() ) );
+ connect( m_textobj, SIGNAL( ensureCursorVisible() ), this, SLOT( ensureCursorVisible() ) );
+
+ m_cursor = new KoTextCursor( m_textobj->textDocument() );
+
+ m_cursorVisible = false;
+
+ showCursor();
+ blinkTimer = new QTimer( this );
+ connect( blinkTimer, SIGNAL( timeout() ),
+ this, SLOT( blinkCursor() ) );
+ if ( QApplication::cursorFlashTime() > 0 )
+ blinkTimer->start( QApplication::cursorFlashTime() / 2 );
+
+ dragStartTimer = new QTimer( this );
+ connect( dragStartTimer, SIGNAL( timeout() ),
+ this, SLOT( startDrag() ) );
+
+ m_textobj->formatMore( 2 );
+
+ blinkCursorVisible = FALSE;
+ inDoubleClick = FALSE;
+ mightStartDrag = FALSE;
+ possibleTripleClick = FALSE;
+ afterTripleClick = FALSE;
+ m_currentFormat = 0;
+ m_variablePosition =-1;
+ m_overwriteMode = false;
+ //updateUI( true, true );
+}
+
+KoTextView::~KoTextView()
+{
+ delete m_cursor;
+ delete d;
+ delete dcop;
+ delete blinkTimer;
+ delete dragStartTimer;
+}
+
+KoTextViewIface* KoTextView::dcopObject()
+{
+ if ( !dcop )
+ dcop = new KoTextViewIface( this );
+
+ return dcop;
+}
+
+void KoTextView::terminate(bool removeselection)
+{
+ textObject()->clearUndoRedoInfo();
+ if ( removeselection && textDocument()->removeSelection( KoTextDocument::Standard ) )
+ textObject()->selectionChangedNotify();
+ hideCursor();
+}
+
+void KoTextView::deleteWordRight()
+{
+ if ( textObject()->hasSelection() ) {
+ textObject()->removeSelectedText( m_cursor );
+ return;
+ }
+ textDocument()->setSelectionStart( KoTextDocument::Standard, m_cursor );
+
+ do {
+ m_cursor->gotoRight();
+ } while ( !m_cursor->atParagEnd()
+ && !m_cursor->parag()->at( m_cursor->index() )->c.isSpace() );
+ textDocument()->setSelectionEnd( KoTextDocument::Standard, m_cursor );
+ textObject()->removeSelectedText( m_cursor, KoTextDocument::Standard, i18n("Remove Word") );
+}
+
+void KoTextView::deleteWordLeft()
+{
+ if ( textObject()->hasSelection() ) {
+ textObject()->removeSelectedText( m_cursor );
+ return;
+ }
+ textDocument()->setSelectionStart( KoTextDocument::Standard, m_cursor );
+
+ do {
+ m_cursor->gotoLeft();
+ } while ( !m_cursor->atParagStart()
+ && !m_cursor->parag()->at( m_cursor->index()-1 )->c.isSpace() );
+ textDocument()->setSelectionEnd( KoTextDocument::Standard, m_cursor );
+ textObject()->removeSelectedText( m_cursor, KoTextDocument::Standard, i18n("Remove Word") );
+}
+
+// Compare with QTextEdit::keyPressEvent
+void KoTextView::handleKeyPressEvent( QKeyEvent * e, QWidget *widget, const QPoint &pos)
+{
+ textObject()->typingStarted();
+
+ /* bool selChanged = FALSE;
+ for ( int i = 1; i < textDocument()->numSelections(); ++i )
+ selChanged = textDocument()->removeSelection( i ) || selChanged;
+
+ if ( selChanged ) {
+ // m_cursor->parag()->document()->nextDoubleBuffered = TRUE; ######## we need that only if we have nested items/documents
+ textFrameSet()->selectionChangedNotify();
+ }*/
+
+ bool clearUndoRedoInfo = TRUE;
+ if ( KShortcut( KKey( e ) ) == KStdAccel::deleteWordBack() )
+ {
+ if ( m_cursor->parag()->string()->isRightToLeft() )
+ deleteWordRight();
+ else
+ deleteWordLeft();
+ clearUndoRedoInfo = TRUE;
+ } else if ( KShortcut( KKey( e ) ) == KStdAccel::deleteWordForward() )
+ {
+ if ( m_cursor->parag()->string()->isRightToLeft() )
+ deleteWordLeft();
+ else
+ deleteWordRight();
+ clearUndoRedoInfo = TRUE;
+ }
+ else
+ switch ( e->key() ) {
+ case Key_Left:
+ case Key_Right: {
+ if (!doToolTipCompletion(m_cursor, m_cursor->parag(), m_cursor->index() - 1, e->key()) )
+ {
+ // a bit hacky, but can't change this without introducing new enum values for move and keeping the
+ // correct semantics and movement for BiDi and non BiDi text.
+ CursorAction a;
+ if ( m_cursor->parag()->string()->isRightToLeft() == (e->key() == Key_Right) )
+ a = e->state() & ControlButton ? MoveWordBackward : MoveBackward;
+ else
+ a = e->state() & ControlButton ? MoveWordForward : MoveForward;
+ moveCursor( a, e->state() & ShiftButton );
+ }
+ break;
+ }
+ case Key_Up:
+ moveCursor( e->state() & ControlButton ? MoveParagUp : MoveUp, e->state() & ShiftButton );
+ break;
+ case Key_Down:
+ moveCursor( e->state() & ControlButton ? MoveParagDown : MoveDown, e->state() & ShiftButton );
+ break;
+ case Key_Home:
+ moveCursor( e->state() & ControlButton ? MoveHome : MoveLineStart, e->state() & ShiftButton );
+ break;
+ case Key_End:
+ if (!doToolTipCompletion(m_cursor, m_cursor->parag(), m_cursor->index() - 1, e->key()) )
+ moveCursor( e->state() & ControlButton ? MoveEnd : MoveLineEnd, e->state() & ShiftButton );
+ break;
+ case Key_Prior:
+ moveCursor( e->state() & ControlButton ? MovePgUp : MoveViewportUp, e->state() & ShiftButton );
+ break;
+ case Key_Next:
+ moveCursor( e->state() & ControlButton ? MovePgDown : MoveViewportDown, e->state() & ShiftButton );
+ break;
+ case Key_Return: case Key_Enter:
+
+ if (!doToolTipCompletion(m_cursor, m_cursor->parag(), m_cursor->index() - 1, e->key()) )
+ if ( (e->state() & (ShiftButton|ControlButton)) == 0 )
+ {
+ if ( textObject()->hasSelection() )
+ textObject()->removeSelectedText( m_cursor );
+ clearUndoRedoInfo = FALSE;
+ textObject()->doKeyboardAction( m_cursor, m_currentFormat, KoTextObject::ActionReturn );
+ Q_ASSERT( m_cursor->parag()->prev() );
+ if ( m_cursor->parag()->prev() )
+ doAutoFormat( m_cursor, m_cursor->parag()->prev(),
+ m_cursor->parag()->prev()->length() - 1, '\n' );
+ }
+ clearUndoRedoInfo = true;
+ break;
+ case Key_Delete:
+ if ( textObject()->hasSelection() ) {
+ textObject()->removeSelectedText( m_cursor );
+ break;
+ }
+
+ textObject()->doKeyboardAction( m_cursor, m_currentFormat, KoTextObject::ActionDelete );
+
+ clearUndoRedoInfo = FALSE;
+ break;
+ case Key_Backtab:
+ if (e->state() & ShiftButton && m_cursor->parag() && m_cursor->atParagStart() && m_cursor->parag()->counter() && textDecreaseIndent())
+ break;
+ break;
+ case Key_Backspace:
+ if ( textObject()->hasSelection() ) {
+ textObject()->removeSelectedText( m_cursor );
+ break;
+ }
+ textObject()->doKeyboardAction( m_cursor, m_currentFormat, KoTextObject::ActionBackspace );
+
+ clearUndoRedoInfo = FALSE;
+ break;
+ case Key_F16: // Copy key on Sun keyboards
+ emit copy();
+ break;
+ case Key_F18: // Paste key on Sun keyboards
+ emit paste();
+ break;
+ case Key_F20: // Cut key on Sun keyboards
+ emit cut();
+ break;
+ case Key_Direction_L: {
+ if ( m_cursor->parag() && m_cursor->parag()->direction() != QChar::DirL )
+ {
+ KCommand* cmd = textObject()->setParagDirectionCommand( m_cursor, QChar::DirL );
+ textObject()->emitNewCommand( cmd );
+ }
+ break;
+ }
+ case Key_Direction_R: {
+ if ( m_cursor->parag() && m_cursor->parag()->direction() != QChar::DirR )
+ {
+ KCommand* cmd = textObject()->setParagDirectionCommand( m_cursor, QChar::DirR );
+ textObject()->emitNewCommand( cmd );
+ }
+ break;
+ }
+ default: {
+ //kdDebug(32500) << "KoTextView::keyPressEvent ascii=" << e->ascii() << " text=" << e->text()[0].unicode() << " state=" << e->state() << endl;
+ if (e->key() == Qt::Key_Tab)
+ {
+ if (doToolTipCompletion(m_cursor, m_cursor->parag(), m_cursor->index() - 1, e->key()) )
+ break;
+ if ( m_cursor->parag() && m_cursor->atParagStart() && m_cursor->parag()->counter() )
+ {
+ textIncreaseIndent();
+ break;
+ }
+ }
+
+ if ( e->key() == Qt::Key_Space )
+ {
+ if (doToolTipCompletion(m_cursor, m_cursor->parag(), m_cursor->index() - 1, e->key()) )
+ break;
+ }
+ if ( e->text().length() &&
+ ( !e->ascii() || e->ascii() >= 32 ) ||
+ ( e->text() == "\t" && !( e->state() & ControlButton ) ) ) {
+ clearUndoRedoInfo = FALSE;
+ QString text = e->text();
+
+ if ( d->m_backSpeller ) {
+ d->m_backSpeller->setIntraWordEditing( m_cursor->parag(), m_cursor->index() );
+ }
+
+ // Alt+123 feature
+ if ( ( e->state() & AltButton ) && text[0].isDigit() )
+ {
+ while ( text[0].isDigit() ) {
+ d->appendDigit( text[0].digitValue() );
+ text.remove( 0, 1 );
+ }
+ }
+ if ( !text.isEmpty() )
+ {
+ // Bidi support: need to reverse mirrored chars (e.g. parenthesis)
+ KoTextParag *p = m_cursor->parag();
+ if ( p && p->string() && p->string()->isRightToLeft() ) {
+ QChar *c = (QChar *)text.unicode();
+ int l = text.length();
+ while( l-- ) {
+ if ( c->mirrored() )
+ *c = c->mirroredChar();
+ c++;
+ }
+ }
+
+ if( !doIgnoreDoubleSpace( p, m_cursor->index()-1, text[ text.length() - 1 ] ) )
+ {
+ // ###### BUG: with the event compression, typing "kde" and then " k", might not apply
+ // autocorrection like it does for "kde" followed by " " followed by "k". We need to insert
+ // one character at a time, or better, to tell doAutoFormat how many chars to consider...
+ insertText( text );
+ // Don't use 'p' past this point. If we replaced a selection, p could have been deleted (#48999)
+ doAutoFormat( m_cursor, m_cursor->parag(), m_cursor->index() - 1, text[ text.length() - 1 ] );
+ }
+ showToolTipBox(m_cursor->parag(), m_cursor->index()-1, widget,pos);
+ }
+ else
+ removeToolTipCompletion();
+
+ }
+ // We should use KAccel instead, to make this configurable !
+ // Well, those are all alternate keys, for keys already configurable (KDE-wide)
+ // and a kaccel makes it hard to
+ else
+ {
+ if ( e->state() & ControlButton ) {
+ switch ( e->key() )
+ {
+ case Key_F16: // Copy key on Sun keyboards
+ copy();
+ break;
+ case Key_A:
+ moveCursor( MoveLineStart, e->state() & ShiftButton );
+ break;
+ case Key_E:
+ moveCursor( MoveLineEnd, e->state() & ShiftButton );
+ break;
+ case Key_K:
+ textObject()->doKeyboardAction( m_cursor, m_currentFormat, KoTextObject::ActionKill );
+ break;
+ case Key_Insert:
+ copy();
+ break;
+ case Key_Space:
+ insertNonbreakingSpace();
+ break;
+ default:
+ clearUndoRedoInfo = FALSE;
+ break;
+ }
+ }
+ else // e.g. just Key_Shift -> don't do anything (#129481)
+ {
+ clearUndoRedoInfo = FALSE;
+ }
+ }
+ break;
+ }
+ }
+
+ if ( clearUndoRedoInfo ) {
+ textObject()->clearUndoRedoInfo();
+ if ( d->m_backSpeller )
+ d->m_backSpeller->setIntraWordEditing( 0, 0 );
+ }
+
+ textObject()->typingDone();
+}
+
+void KoTextView::setOverwriteMode( bool overwriteMode )
+{
+ m_overwriteMode = overwriteMode;
+}
+
+void KoTextView::insertText( const QString &text )
+{
+ int insertFlags = KoTextObject::DefaultInsertFlags;
+ if ( m_overwriteMode )
+ insertFlags |= KoTextObject::OverwriteMode;
+ textObject()->insert( m_cursor, m_currentFormat, text, i18n("Insert Text"), KoTextDocument::Standard, insertFlags );
+}
+
+void KoTextView::newParagraph()
+{
+ textObject()->insert( m_cursor, m_currentFormat, "\n", i18n("Insert Text"), KoTextDocument::Standard, KoTextObject::CheckNewLine );
+}
+
+void KoTextView::handleKeyReleaseEvent( QKeyEvent * e )
+{
+ if ( e->key() == Key_Alt && d->currentUnicodeNumber() >= 32 )
+ {
+ QString text = QChar( d->currentUnicodeNumber() );
+ d->clearCurrentUnicodeNumber();
+ insertText( text );
+ doAutoFormat( m_cursor, m_cursor->parag(),
+ m_cursor->index() - 1, text[ text.length() - 1 ] );
+ }
+}
+
+void KoTextView::handleImStartEvent( QIMEvent * )
+{
+ // nothing to do
+}
+
+void KoTextView::handleImComposeEvent( QIMEvent * e )
+{
+ // remove old preedit
+ if ( textDocument()->hasSelection( KoTextDocument::Standard ) )
+ textDocument()->removeSelection( KoTextDocument::Standard );
+ if ( textDocument()->hasSelection( KoTextDocument::InputMethodPreedit ) )
+ textDocument()->removeSelectedText( KoTextDocument::InputMethodPreedit, m_cursor );
+
+ // insert preedit
+ int preeditStartIdx = m_cursor->index();
+ textDocument()->setSelectionStart( KoTextDocument::InputMethodPreedit, m_cursor );
+ textObject()->insert( m_cursor, m_currentFormat, e->text(), i18n("Insert Text"),
+ KoTextDocument::Standard,
+ KoTextObject::DoNotRepaint/* DO NOT REPAINT CURSOR! */ );
+ textDocument()->setSelectionEnd( KoTextDocument::InputMethodPreedit, m_cursor );
+
+ // selection
+ int preeditSelStart = preeditStartIdx + e->cursorPos();
+ int preeditSelEnd = preeditSelStart + e->selectionLength();
+ m_cursor->setIndex( preeditSelStart );
+ textDocument()->setSelectionStart( KoTextDocument::Standard, m_cursor );
+ m_cursor->setIndex( preeditSelEnd );
+ textDocument()->setSelectionEnd( KoTextDocument::Standard, m_cursor );
+
+ // set cursor pos
+ m_cursor->setIndex( preeditSelStart );
+
+ textObject()->emitUpdateUI( true );
+ textObject()->emitShowCursor();
+ textObject()->selectionChangedNotify();
+}
+
+void KoTextView::handleImEndEvent( QIMEvent * e )
+{
+ // remove old preedit
+ if ( textDocument()->hasSelection( KoTextDocument::Standard ) )
+ textDocument()->removeSelection( KoTextDocument::Standard );
+ if ( textDocument()->hasSelection( KoTextDocument::InputMethodPreedit ) )
+ textDocument()->removeSelectedText( KoTextDocument::InputMethodPreedit, m_cursor );
+
+ insertText( e->text() );
+
+ textObject()->emitUpdateUI( true );
+ textObject()->emitShowCursor();
+ textObject()->selectionChangedNotify();
+}
+
+void KoTextView::completion()
+{
+ (void) doCompletion(m_cursor, m_cursor->parag(),
+ m_cursor->index() - 1);
+}
+
+void KoTextView::moveCursor( CursorAction action, bool select )
+{
+ hideCursor();
+ bool cursorMoved = false;
+ if ( select ) {
+ if ( !textDocument()->hasSelection( KoTextDocument::Standard ) )
+ textDocument()->setSelectionStart( KoTextDocument::Standard, m_cursor );
+ cursorMoved = moveCursor( action );
+ if ( textDocument()->setSelectionEnd( KoTextDocument::Standard, m_cursor ) ) {
+ textObject()->selectionChangedNotify();
+ }
+ } else {
+ bool redraw = textDocument()->removeSelection( KoTextDocument::Standard );
+ cursorMoved = moveCursor( action );
+ if ( redraw ) {
+ textObject()->selectionChangedNotify();
+ }
+ }
+
+ if ( cursorMoved ) // e.g. not when pressing Ctrl/PgDown after the last parag
+ {
+ ensureCursorVisible();
+ // updateUI( true ); // done by moveCursor
+ }
+ showCursor();
+}
+
+bool KoTextView::moveCursor( CursorAction action )
+{
+ bool cursorMoved = true;
+ switch ( action ) {
+ case MoveBackward:
+ m_cursor->gotoPreviousLetter();
+ break;
+ case MoveWordBackward:
+ m_cursor->gotoPreviousWord();
+ break;
+ case MoveForward:
+ m_cursor->gotoNextLetter();
+ break;
+ case MoveWordForward:
+ m_cursor->gotoNextWord();
+ break;
+ case MoveUp:
+ m_cursor->gotoUp();
+ break;
+ case MoveDown:
+ m_cursor->gotoDown();
+ break;
+ case MoveViewportUp:
+ cursorMoved = pgUpKeyPressed();
+ break;
+ case MoveViewportDown:
+ cursorMoved = pgDownKeyPressed();
+ break;
+ case MovePgUp:
+ ctrlPgUpKeyPressed();
+ break;
+ case MovePgDown:
+ ctrlPgDownKeyPressed();
+ break;
+ case MoveLineStart:
+ m_cursor->gotoLineStart();
+ break;
+ case MoveHome:
+ m_cursor->gotoHome();
+ break;
+ case MoveLineEnd:
+ m_cursor->gotoLineEnd();
+ break;
+ case MoveEnd:
+ textObject()->ensureFormatted( textDocument()->lastParag() );
+ m_cursor->gotoEnd();
+ break;
+ case MoveParagUp: {
+ KoTextParag * parag = m_cursor->parag()->prev();
+ if ( m_cursor->index()==0 && parag )
+ {
+ m_cursor->setParag( parag );
+ m_cursor->setIndex( 0 );
+ }
+ else m_cursor->setIndex( 0 );
+ } break;
+ case MoveParagDown: {
+ KoTextParag * parag = m_cursor->parag()->next();
+ if ( parag )
+ {
+ m_cursor->setParag( parag );
+ m_cursor->setIndex( 0 );
+ }
+ } break;
+ }
+
+ updateUI( true );
+ return cursorMoved;
+}
+
+KoTextCursor KoTextView::selectWordUnderCursor( const KoTextCursor& cursor, int selectionId )
+{
+ KoTextCursor c1 = cursor;
+ KoTextCursor c2 = cursor;
+ if ( cursor.index() > 0 && !cursor.parag()->at( cursor.index()-1 )->c.isSpace() )
+ c1.gotoWordLeft();
+ if ( !cursor.parag()->at( cursor.index() )->c.isSpace() && !cursor.atParagEnd() )
+ c2.gotoWordRight();
+
+ // The above is almost correct, but gotoWordRight also skips the spaces/punctuations
+ // until the next word. So the 'word under cursor' contained e.g. that trailing space.
+ // To be on the safe side, we skip spaces/punctuations on both sides:
+ KoTextString *s = cursor.parag()->string();
+ bool beginFound = false;
+ for ( int i = c1.index(); i< c2.index(); i++)
+ {
+ const QChar ch = s->at(i).c;
+ // This list comes from KoTextCursor::gotoPreviousWord.
+ // Can't use QChar::isPunct since "'" and "-" are not word separators
+ const bool isWordDelimiter = ch.isSpace()
+ || ch.category() == QChar::Punctuation_Open // e.g. '('
+ || ch.category() == QChar::Punctuation_Close // e.g. ')'
+ || ch.category() == QChar::Punctuation_Other // see http://www.fileformat.info/info/unicode/category/Po/list.htm
+ ;
+
+ if( !beginFound && !isWordDelimiter )
+ {
+ c1.setIndex(i);
+ beginFound = true;
+ }
+ else if ( beginFound && isWordDelimiter )
+ {
+ c2.setIndex(i);
+ break;
+ }
+ }
+
+ textDocument()->setSelectionStart( selectionId, &c1 );
+ textDocument()->setSelectionEnd( selectionId, &c2 );
+ return c2;
+}
+
+KoTextCursor KoTextView::selectParagUnderCursor( const KoTextCursor& cursor, int selectionId, bool copyAndNotify )
+{
+ KoTextCursor c1 = cursor;
+ KoTextCursor c2 = cursor;
+ c1.setIndex(0);
+ c2.setIndex(c1.parag()->string()->length() - 1);
+ textDocument()->setSelectionStart( selectionId, &c1 );
+ textDocument()->setSelectionEnd( selectionId, &c2 );
+ if ( copyAndNotify )
+ {
+ textObject()->selectionChangedNotify();
+ // Copy the selection.
+ QApplication::clipboard()->setSelectionMode( true );
+ emit copy();
+ QApplication::clipboard()->setSelectionMode( false );
+ }
+ return c2;
+}
+
+void KoTextView::extendParagraphSelection( const QPoint& iPoint )
+{
+ hideCursor();
+ KoTextCursor oldCursor = *m_cursor;
+ placeCursor( iPoint );
+
+ bool redraw = FALSE;
+ if ( textDocument()->hasSelection( KoTextDocument::Standard ) )
+ {
+ redraw = textDocument()->setSelectionEnd( KoTextDocument::Standard, m_cursor );
+ if ( textDocument()->isSelectionSwapped( KoTextDocument::Standard ) )
+ m_cursor->setIndex( 0 );
+ else
+ m_cursor->setIndex( m_cursor->parag()->string()->length() - 1 );
+ textDocument()->setSelectionEnd( KoTextDocument::Standard, m_cursor );
+ }
+ //else // it may be that the initial click was out of the frame
+ // textDocument()->setSelectionStart( KoTextDocument::Standard, m_cursor );
+
+ if ( redraw )
+ textObject()->selectionChangedNotify( false );
+
+ showCursor();
+}
+
+QString KoTextView::wordUnderCursor( const KoTextCursor& cursor )
+{
+ selectWordUnderCursor( cursor, KoTextDocument::Temp );
+ QString text = textObject()->selectedText( KoTextDocument::Temp );
+ bool hasCustomItems = textObject()->selectionHasCustomItems( KoTextDocument::Temp );
+ textDocument()->removeSelection( KoTextDocument::Temp );
+ if( !hasCustomItems )
+ return text;
+ return QString::null;
+}
+
+bool KoTextView::handleMousePressEvent( QMouseEvent *e, const QPoint &iPoint, bool canStartDrag, bool insertDirectCursor )
+{
+ bool addParag = false;
+ mightStartDrag = FALSE;
+ hideCursor();
+
+ if (possibleTripleClick)
+ {
+ handleMouseTripleClickEvent( e, iPoint );
+ return addParag;
+ }
+
+ KoTextCursor oldCursor = *m_cursor;
+ addParag = placeCursor( iPoint, insertDirectCursor&& isReadWrite() );
+ ensureCursorVisible();
+
+ if ( e->button() != LeftButton )
+ {
+ showCursor();
+ return addParag;
+ }
+
+ KoLinkVariable* lv = linkVariable();
+ if ( lv && openLink( lv ) )
+ {
+ return addParag;
+ }
+
+ KoTextDocument * textdoc = textDocument();
+ if ( canStartDrag && textdoc->inSelection( KoTextDocument::Standard, iPoint ) ) {
+ mightStartDrag = TRUE;
+ m_textobj->emitShowCursor();
+ dragStartTimer->start( QApplication::startDragTime(), TRUE );
+ dragStartPos = e->pos();
+ return addParag;
+ }
+
+ bool redraw = FALSE;
+ if ( textdoc->hasSelection( KoTextDocument::Standard ) ) {
+ if ( !( e->state() & ShiftButton ) ) {
+ redraw = textdoc->removeSelection( KoTextDocument::Standard );
+ textdoc->setSelectionStart( KoTextDocument::Standard, m_cursor );
+ } else {
+ redraw = textdoc->setSelectionEnd( KoTextDocument::Standard, m_cursor ) || redraw;
+ }
+ } else {
+ if ( !( e->state() & ShiftButton ) ) {
+ textdoc->setSelectionStart( KoTextDocument::Standard, m_cursor );
+ } else {
+ textdoc->setSelectionStart( KoTextDocument::Standard, &oldCursor );
+ redraw = textdoc->setSelectionEnd( KoTextDocument::Standard, m_cursor ) || redraw;
+ }
+ }
+
+ //kdDebug(32500) << "KoTextView::mousePressEvent redraw=" << redraw << endl;
+ if ( !redraw ) {
+ showCursor();
+ } else {
+ textObject()->selectionChangedNotify();
+ }
+ return addParag;
+}
+
+void KoTextView::handleMouseMoveEvent( QMouseEvent*, const QPoint& iPoint )
+{
+ hideCursor();
+ KoTextCursor oldCursor = *m_cursor;
+ placeCursor( iPoint );
+
+ // Double click + mouse still down + moving the mouse selects full words.
+ if ( inDoubleClick ) {
+ KoTextCursor cl = *m_cursor;
+ cl.gotoWordLeft();
+ KoTextCursor cr = *m_cursor;
+ cr.gotoWordRight();
+
+ int diff = QABS( oldCursor.parag()->at( oldCursor.index() )->x - iPoint.x() );
+ int ldiff = QABS( cl.parag()->at( cl.index() )->x - iPoint.x() );
+ int rdiff = QABS( cr.parag()->at( cr.index() )->x - iPoint.x() );
+
+ if ( m_cursor->parag()->lineStartOfChar( m_cursor->index() ) !=
+ oldCursor.parag()->lineStartOfChar( oldCursor.index() ) )
+ diff = 0xFFFFFF;
+
+ if ( rdiff < diff && rdiff < ldiff )
+ *m_cursor = cr;
+ else if ( ldiff < diff && ldiff < rdiff )
+ *m_cursor = cl;
+ else
+ *m_cursor = oldCursor;
+ }
+
+ bool redraw = FALSE;
+ if ( textDocument()->hasSelection( KoTextDocument::Standard ) )
+ redraw = textDocument()->setSelectionEnd( KoTextDocument::Standard, m_cursor ) || redraw;
+ else // it may be that the initial click was out of the frame
+ textDocument()->setSelectionStart( KoTextDocument::Standard, m_cursor );
+
+ if ( redraw )
+ textObject()->selectionChangedNotify( false );
+
+ showCursor();
+}
+
+void KoTextView::handleMouseReleaseEvent()
+{
+ if ( dragStartTimer->isActive() )
+ dragStartTimer->stop();
+ if ( mightStartDrag ) {
+ textObject()->selectAll( FALSE );
+ mightStartDrag = false;
+ }
+ else
+ {
+ if ( textDocument()->selectionStartCursor( KoTextDocument::Standard ) == textDocument()->selectionEndCursor( KoTextDocument::Standard ) )
+ {
+ textDocument()->removeSelection( KoTextDocument::Standard );
+ }
+
+ textObject()->selectionChangedNotify();
+
+ // Copy the selection.
+ QApplication::clipboard()->setSelectionMode( true );
+ emit copy();
+ QApplication::clipboard()->setSelectionMode( false );
+ }
+
+ inDoubleClick = FALSE;
+ m_textobj->emitShowCursor();
+}
+
+void KoTextView::handleMouseDoubleClickEvent( QMouseEvent*ev, const QPoint& i )
+{
+ //after a triple click it's not a double click but a simple click
+ //but as triple click didn't exist it's necessary to do it.
+ if(afterTripleClick)
+ {
+ handleMousePressEvent( ev, i );
+ return;
+ }
+
+ inDoubleClick = TRUE;
+ *m_cursor = selectWordUnderCursor( *m_cursor );
+ textObject()->selectionChangedNotify();
+ // Copy the selection.
+ QApplication::clipboard()->setSelectionMode( true );
+ emit copy();
+ QApplication::clipboard()->setSelectionMode( false );
+
+ possibleTripleClick=true;
+
+ QTimer::singleShot(QApplication::doubleClickInterval(),this,SLOT(tripleClickTimeout()));
+}
+
+void KoTextView::tripleClickTimeout()
+{
+ possibleTripleClick=false;
+}
+
+void KoTextView::handleMouseTripleClickEvent( QMouseEvent*ev, const QPoint& /* Currently unused */ )
+{
+ if ( ev->button() != LeftButton)
+ {
+ showCursor();
+ return;
+ }
+ afterTripleClick= true;
+ inDoubleClick = FALSE;
+ *m_cursor = selectParagUnderCursor( *m_cursor );
+ QTimer::singleShot(QApplication::doubleClickInterval(),this,SLOT(afterTripleClickTimeout()));
+}
+
+void KoTextView::afterTripleClickTimeout()
+{
+ afterTripleClick=false;
+}
+
+bool KoTextView::maybeStartDrag( QMouseEvent* e )
+{
+ if ( mightStartDrag ) {
+ dragStartTimer->stop();
+ if ( ( e->pos() - dragStartPos ).manhattanLength() > QApplication::startDragDistance() )
+ startDrag();
+ return true;
+ }
+ return false;
+}
+
+bool KoTextView::insertParagraph(const QPoint &pos)
+{
+ KoTextParag *last = textDocument()->lastParag();
+ KoTextFormat *f = 0;
+ KoParagStyle *style = last->style();
+ KoParagCounter *counter = last->counter();
+ int diff = (pos.y()- textDocument()->height());
+ f = last->at( last->length()-1 )->format();
+ int height =f->height();
+ int nbParag = (diff / height);
+ QFontMetrics fm = f->refFontMetrics();
+ for (int i = 0; i < nbParag ;i++)
+ {
+ KoTextParag *s=textDocument()->createParag( textDocument(), last );
+ s->setFormat( 0, 1, f, TRUE );
+ if ( style )
+ s->setStyle( style );
+ s->setCounter( counter );
+ last = s;
+ }
+ bool createParag = (nbParag > 0 );
+ if ( createParag )
+ {
+ if ( pos.x() + f->width(' ') >= textDocument()->width())
+ {
+ //FIXME me bidi.
+ //change parag alignment => right alignment
+ last->setAlignment( Qt::AlignRight );
+ }
+ else
+ {
+ int nbSpace = pos.x()/f->width(' ');
+ QString tmp;
+ for (int i = 0; i< nbSpace; i++)
+ {
+ tmp+=' ';
+ }
+ last->insert( 0, tmp );
+ }
+ }
+ return createParag;
+
+}
+
+bool KoTextView::placeCursor( const QPoint &pos, bool insertDirectCursor )
+{
+ bool addParag = false;
+ if ( insertDirectCursor && (pos.y()>textDocument()->height()) )
+ addParag = insertParagraph(pos);
+ KoTextParag *s = 0L;
+ if ( addParag )
+ s = textDocument()->lastParag();
+ else
+ s = textDocument()->firstParag();
+ m_cursor->place( pos, s, false, &m_variablePosition );
+ if ( m_variablePosition != -1 )
+ kdDebug() << k_funcinfo << " m_variablePosition set to " << m_variablePosition << endl;
+ updateUI( true );
+ return addParag;
+}
+
+void KoTextView::blinkCursor()
+{
+ //kdDebug(32500) << "KoTextView::blinkCursor m_cursorVisible=" << m_cursorVisible
+ // << " blinkCursorVisible=" << blinkCursorVisible << endl;
+ if ( !m_cursorVisible )
+ return;
+ bool cv = m_cursorVisible;
+ blinkCursorVisible = !blinkCursorVisible;
+ drawCursor( blinkCursorVisible );
+ m_cursorVisible = cv;
+}
+
+void KoTextView::drawCursor( bool visible )
+{
+ m_cursorVisible = visible;
+ // The rest is up to the app ;)
+}
+
+void KoTextView::focusInEvent()
+{
+ if ( QApplication::cursorFlashTime() > 0 )
+ blinkTimer->start( QApplication::cursorFlashTime() / 2 );
+ showCursor();
+}
+
+void KoTextView::focusOutEvent()
+{
+ blinkTimer->stop();
+ hideCursor();
+}
+
+/*void KoTextView::setFormat( KoTextFormat * newFormat, int flags, bool zoomFont)
+{
+ textObject()->setFormat( m_cursor, m_currentFormat, newFormat, flags, zoomFont );
+}*/
+
+KCommand* KoTextView::setFormatCommand( const KoTextFormat * newFormat, int flags, bool zoomFont)
+{
+ return textObject()->setFormatCommand( m_cursor, &m_currentFormat, newFormat, flags, zoomFont );
+}
+
+void KoTextView::dragStarted()
+{
+ mightStartDrag = FALSE;
+ inDoubleClick = FALSE;
+}
+
+void KoTextView::applyStyle( const KoParagStyle * style )
+{
+ if ( style )
+ {
+ textObject()->applyStyle( m_cursor, style );
+ showCurrentFormat();
+ }
+}
+
+void KoTextView::updateUI( bool updateFormat, bool /*force*/ )
+{
+ // Update UI - only for those items which have changed
+
+ if ( updateFormat )
+ {
+ int i = cursor()->index();
+ if ( i > 0 )
+ --i;
+#ifdef DEBUG_FORMATS
+ if ( currentFormat() )
+ kdDebug(32500) << "KoTextView::updateUI old currentFormat=" << currentFormat()
+ << " " << currentFormat()->key()
+ << " parag format=" << cursor()->parag()->at( i )->format()->key() << endl;
+ else
+ kdDebug(32500) << "KoTextView::updateUI old currentFormat=0" << endl;
+#endif
+ if ( !currentFormat() || currentFormat()->key() != cursor()->parag()->at( i )->format()->key() )
+ {
+ if ( currentFormat() )
+ currentFormat()->removeRef();
+#ifdef DEBUG_FORMATS
+ kdDebug(32500) << "Setting currentFormat from format " << cursor()->parag()->at( i )->format()
+ << " ( character " << i << " in paragraph " << cursor()->parag()->paragId() << " )" << endl;
+#endif
+ setCurrentFormat( textDocument()->formatCollection()->format( cursor()->parag()->at( i )->format() ) );
+ if ( currentFormat()->isMisspelled() ) {
+ KoTextFormat fNoMisspelled( *currentFormat() );
+ fNoMisspelled.setMisspelled( false );
+ currentFormat()->removeRef();
+ setCurrentFormat( textDocument()->formatCollection()->format( &fNoMisspelled ) );
+ }
+ showCurrentFormat();
+ }
+ }
+}
+
+void KoTextView::showCurrentFormat()
+{
+ //kdDebug(32500) << "KoTextView::showCurrentFormat currentFormat=" << currentFormat() << " " << currentFormat()->key() << endl;
+ KoTextFormat format = *currentFormat();
+ //format.setPointSize( textObject()->docFontSize( currentFormat() ) ); // "unzoom" the font size
+ showFormat( &format );
+}
+
+KCommand * KoTextView::setCounterCommand( const KoParagCounter & counter )
+{
+ return textObject()->setCounterCommand( m_cursor, counter );
+}
+KCommand * KoTextView::setAlignCommand( int align )
+{
+ return textObject()->setAlignCommand( m_cursor, align );
+}
+KCommand * KoTextView::setLineSpacingCommand( double spacing, KoParagLayout::SpacingType _type)
+{
+ return textObject()->setLineSpacingCommand( m_cursor, spacing, _type);
+}
+KCommand * KoTextView::setBordersCommand( const KoBorder& leftBorder, const KoBorder& rightBorder, const KoBorder& bottomBorder, const KoBorder& topBorder )
+{
+ return textObject()->setBordersCommand( m_cursor, leftBorder, rightBorder, bottomBorder, topBorder );
+}
+KCommand * KoTextView::setJoinBordersCommand( bool join )
+{
+ return textObject()->setJoinBordersCommand( m_cursor, join );
+}
+KCommand * KoTextView::setMarginCommand( QStyleSheetItem::Margin m, double margin )
+{
+ return textObject()->setMarginCommand( m_cursor, m, margin );
+}
+KCommand * KoTextView::setTabListCommand( const KoTabulatorList & tabList )
+{
+ return textObject()->setTabListCommand( m_cursor, tabList );
+}
+KCommand * KoTextView::setBackgroundColorCommand( const QColor & color )
+{
+ return textObject()->setBackgroundColorCommand( m_cursor, color );
+}
+
+KoTextDocument * KoTextView::textDocument() const
+{
+ return textObject()->textDocument();
+}
+
+KoVariable *KoTextView::variable()
+{
+ if ( m_variablePosition < 0 )
+ return 0;
+ // Can't use m_cursor here, it could be before or after the variable, depending on which half of it was clicked
+ return textObject()->variableAtPosition( m_cursor->parag(), m_variablePosition );
+}
+
+KoLinkVariable * KoTextView::linkVariable()
+{
+ return dynamic_cast<KoLinkVariable *>(variable());
+}
+
+QPtrList<KAction> KoTextView::dataToolActionList(KInstance * instance, const QString& word, bool & _singleWord )
+{
+ m_singleWord = false;
+ m_wordUnderCursor = QString::null;
+ QString text;
+ if ( textObject()->hasSelection() )
+ {
+ text = textObject()->selectedText();
+ if ( text.find(' ') == -1 && text.find('\t') == -1 && text.find(KoTextObject::customItemChar()) == -1 )
+ {
+ m_singleWord = true;
+ }
+ else
+ {
+ m_singleWord = false;
+ //laurent : don't try to search thesaurus when we have a customItemChar.
+ if( text.find(KoTextObject::customItemChar())!=-1)
+ text = QString::null;
+ }
+ }
+ else // No selection -> use word under cursor
+ {
+ if ( !word.isEmpty() )
+ {
+ m_singleWord = true;
+ m_wordUnderCursor = word;
+ text = word;
+ }
+ }
+
+ if ( text.isEmpty() || textObject()->protectContent()) // Nothing to apply a tool to
+ return QPtrList<KAction>();
+
+ // Any tool that works on plain text is relevant
+ QValueList<KDataToolInfo> tools;
+ tools +=KDataToolInfo::query( "QString", "text/plain", instance );
+
+ // Add tools that work on a single word if that is the case
+ if ( m_singleWord )
+ {
+ _singleWord = true;
+ tools += KDataToolInfo::query( "QString", "application/x-singleword", instance );
+ }
+ // Maybe one day we'll have tools that use libkotext (or qt3's qrt), to act on formatted text
+ tools += KDataToolInfo::query( "KoTextString", "application/x-qrichtext", instance );
+
+ return KDataToolAction::dataToolActionList( tools, this, SLOT( slotToolActivated( const KDataToolInfo &, const QString & ) ) );
+}
+
+QString KoTextView::currentWordOrSelection() const
+{
+ if ( textObject()->hasSelection() )
+ return textObject()->selectedText();
+ else
+ return m_wordUnderCursor;
+}
+
+void KoTextView::slotToolActivated( const KDataToolInfo & info, const QString & command )
+{
+ KDataTool* tool = info.createTool( );
+ if ( !tool )
+ {
+ kdWarning() << "Could not create Tool !" << endl;
+ return;
+ }
+
+ kdDebug(32500) << "KWTextFrameSetEdit::slotToolActivated command=" << command
+ << " dataType=" << info.dataType() << endl;
+
+ QString text;
+ if ( textObject()->hasSelection() )
+ text = textObject()->selectedText();
+ else
+ text = m_wordUnderCursor;
+
+ // Preferred type is richtext
+ QString mimetype = "application/x-qrichtext";
+ QString datatype = "KoTextString";
+ // If unsupported, try text/plain
+ if ( !info.mimeTypes().contains( mimetype ) )
+ {
+ mimetype = "text/plain";
+ datatype = "QString";
+ }
+ // If unsupported (and if we have a single word indeed), try application/x-singleword
+ if ( !info.mimeTypes().contains( mimetype ) && m_singleWord )
+ mimetype = "application/x-singleword";
+
+ kdDebug(32500) << "Running tool with datatype=" << datatype << " mimetype=" << mimetype << endl;
+
+ QString origText = text;
+ if ( tool->run( command, &text, datatype, mimetype) )
+ {
+ kdDebug(32500) << "Tool ran. Text is now " << text << endl;
+ if ( origText != text )
+ {
+ if ( !textObject()->hasSelection() )
+ {
+ // Warning: ok for now, but wrong cursor if RMB doesn't place cursor anymore
+ selectWordUnderCursor( *m_cursor );
+ }
+ // replace selection with 'text'
+ textObject()->emitNewCommand( textObject()->replaceSelectionCommand(
+ cursor(), text, i18n("Replace Word") ));
+ }
+ }
+ delete tool;
+}
+
+bool KoTextView::openLink( KoLinkVariable* variable )
+{
+ kdDebug() << k_funcinfo << variable->url() << endl;
+ KURL url( variable->url() );
+ if( url.isValid() )
+ {
+ (void) new KRun( url );
+ return true;
+ }
+ else
+ {
+ KMessageBox::sorry( 0, i18n("%1 is not a valid link.").arg( variable->url() ) );
+ return false;
+ }
+}
+
+
+void KoTextView::insertSoftHyphen()
+{
+ textObject()->insert( cursor(), currentFormat(), QChar(0xad) /* see QRichText */,
+ i18n("Insert Soft Hyphen") );
+}
+
+void KoTextView::insertLineBreak()
+{
+ textObject()->insert( cursor(), currentFormat(), QChar('\n'),
+ i18n("Insert Line Break") );
+}
+
+void KoTextView::insertNonbreakingSpace()
+{
+ textObject()->insert( cursor(), currentFormat(), QChar(0xa0) /* see QRichText */,
+ i18n("Insert Non-Breaking Space") );
+}
+
+void KoTextView::insertNonbreakingHyphen()
+{
+ textObject()->insert( cursor(), currentFormat(), QChar(0x2013),
+ i18n("Insert Non-Breaking Hyphen") );
+}
+
+void KoTextView::insertSpecialChar(QChar _c, const QString& font)
+{
+ KoTextFormat * newFormat = new KoTextFormat(*currentFormat());
+ newFormat->setFamily( font );
+ if ( textObject()->hasSelection() )
+ {
+ KoTextFormat * lastFormat = currentFormat();
+
+ KCommand *cmd = textObject()->setFormatCommand( cursor(), &lastFormat, newFormat, KoTextFormat::Family );
+
+ KMacroCommand* macroCmd = new KMacroCommand( i18n("Insert Special Char") );
+ macroCmd->addCommand( cmd );
+ macroCmd->addCommand( textObject()->replaceSelectionCommand(
+ cursor(), _c, QString::null) );
+ textObject()->emitNewCommand( macroCmd );
+ }
+ else
+ {
+ textObject()->insert( cursor(), newFormat, _c, i18n("Insert Special Char"));
+ delete newFormat;
+ }
+}
+
+const KoParagLayout * KoTextView::currentParagLayoutFormat() const
+{
+ KoTextParag * parag = m_cursor->parag();
+ return &(parag->paragLayout());
+}
+
+bool KoTextView::rtl() const
+{
+ return m_cursor->parag()->string()->isRightToLeft();
+}
+
+KCommand* KoTextView::setParagLayoutFormatCommand( KoParagLayout *newLayout, int flags, int marginIndex )
+{
+ return textObject()->setParagLayoutCommand( m_cursor, *newLayout, KoTextDocument::Standard,
+ flags, marginIndex, true /*createUndoRedo*/ );
+}
+
+// Heading1 -> Heading2 -> Heading3 -> normal -> 1 -> 1.1 -> 1.1.1
+void KoTextView::increaseNumberingLevel( const KoStyleCollection* styleCollection )
+{
+ // TODO: do this for each paragraph in the selection
+ KoParagStyle* style = 0;
+ int level = 0;
+ KoParagCounter* counter = m_cursor->parag()->counter();
+ if ( counter )
+ level = counter->depth() + 1;
+ if ( m_cursor->parag()->style()->isOutline() )
+ {
+ QValueVector<KoParagStyle *> outlineStyles = styleCollection->outlineStyles();
+ while ( level < 10 && !style ) {
+ style = outlineStyles[ level ];
+ ++level;
+ }
+ if ( !style ) // no lower-level heading exists, use standard style
+ style = styleCollection->defaultStyle();
+ }
+ else // non-outline, just a numbered list
+ {
+ // Try to find a style with this depth, to know if the user wants display-levels etc.
+ style = styleCollection->numberedStyleForLevel( level );
+ if ( !style ) { // not found. Make the change though.
+ KoParagCounter c;
+ if (counter) {
+ c = *counter;
+ c.setDepth( level );
+ c.setDisplayLevels( c.displayLevels() + 1 );
+ } else {
+ // Start a simple numbered list.
+ c.setNumbering(KoParagCounter::NUM_LIST);
+ c.setStyle(KoParagCounter::STYLE_NUM);
+ }
+ KCommand* command = textObject()->setCounterCommand( m_cursor, c );
+ textObject()->emitNewCommand( command );
+ }
+ }
+ if ( style ) // can't be 0
+ textObject()->applyStyle( m_cursor, style );
+}
+
+// 1.1.1 -> 1.1 -> 1 -> normal -> Heading3 -> Heading2 -> Heading1
+void KoTextView::decreaseNumberingLevel( const KoStyleCollection* styleCollection )
+{
+ // TODO: do this for each paragraph in the selection
+ KoParagCounter* counter = m_cursor->parag()->counter();
+ int level = 9;
+ if ( counter )
+ level = counter->depth() - 1;
+ KoParagStyle* style = 0;
+ if ( m_cursor->parag()->style()->isOutline() || !counter ) // heading or normal
+ {
+ if ( level == -1 ) // nothing higher than Heading1
+ return;
+ QValueVector<KoParagStyle *> outlineStyles = styleCollection->outlineStyles();
+ while ( level >= 0 && !style ) {
+ style = outlineStyles[ level ];
+ --level;
+ }
+ }
+ else // non-outline, numbered list
+ {
+ if ( level == -1 )
+ style = styleCollection->defaultStyle();
+ else
+ {
+ style = styleCollection->numberedStyleForLevel( level );
+ if ( !style ) { // not found. Make the change though.
+ KoParagCounter c( *counter );
+ c.setDepth( level );
+ if ( c.displayLevels() > 1 ) {
+ c.setDisplayLevels( c.displayLevels() - 1 );
+ }
+ KCommand* command = textObject()->setCounterCommand( m_cursor, c );
+ textObject()->emitNewCommand( command );
+ }
+ }
+ }
+ if ( style )
+ textObject()->applyStyle( m_cursor, style );
+}
+
+KCommand *KoTextView::setChangeCaseOfTextCommand(KoChangeCaseDia::TypeOfCase _type)
+{
+ QString text;
+ if ( textObject()->hasSelection() )
+ text = textObject()->selectedText();
+ if(!text.isEmpty())
+ return textObject()->changeCaseOfText(cursor(), _type);
+ else
+ return 0L;
+}
+
+KCommand *KoTextView::prepareDropMove( KoTextCursor dropCursor )
+{
+ Q_ASSERT( textDocument()->hasSelection( KoTextDocument::Standard ) );
+ // Dropping into the selection itself ?
+ KoTextCursor startSel = textDocument()->selectionStartCursor( KoTextDocument::Standard );
+ KoTextCursor endSel = textDocument()->selectionEndCursor( KoTextDocument::Standard );
+ bool inSelection = false;
+ if ( startSel.parag() == endSel.parag() )
+ inSelection = dropCursor.parag() == startSel.parag()
+ && dropCursor.index() >= startSel.index()
+ && dropCursor.index() <= endSel.index();
+ else
+ {
+ // Looking at first line first:
+ inSelection = dropCursor.parag() == startSel.parag() && dropCursor.index() >= startSel.index();
+ if ( !inSelection )
+ {
+ // Look at all other paragraphs except last one
+ KoTextParag *p = startSel.parag()->next();
+ while ( !inSelection && p && p != endSel.parag() )
+ {
+ inSelection = ( p == dropCursor.parag() );
+ p = p->next();
+ }
+ // Look at last paragraph
+ if ( !inSelection )
+ inSelection = dropCursor.parag() == endSel.parag() && dropCursor.index() <= endSel.index();
+ }
+ }
+ if ( inSelection || m_textobj->protectContent() )
+ {
+ textDocument()->removeSelection( KoTextDocument::Standard );
+ textObject()->selectionChangedNotify();
+ hideCursor();
+ *cursor() = dropCursor;
+ showCursor();
+ ensureCursorVisible();
+ return 0L;
+ }
+ if ( textObject()->protectContent() )
+ {
+ textDocument()->removeSelection( KoTextDocument::Standard );
+ textObject()->selectionChangedNotify();
+ }
+ // Tricky. We don't want to do the placeCursor after removing the selection
+ // (the user pointed at some text with the old selection in place).
+ // However, something got deleted in our parag, dropCursor's index needs adjustment.
+ if ( endSel.parag() == dropCursor.parag() )
+ {
+ // Does the selection starts before (other parag or same parag) ?
+ if ( startSel.parag() != dropCursor.parag() || startSel.index() < dropCursor.index() )
+ {
+ // If other -> endSel.parag() will get deleted. The final position is in startSel.parag(),
+ // where the selection started + how much after the end we are. Make a drawing :)
+ // If same -> simply move back by how many chars we've deleted. Funny thing is, it's the same formula.
+ int dropIndex = dropCursor.index();
+ dropCursor.setParag( startSel.parag() );
+ // If dropCursor - endSel < 0, selection ends after, we're dropping into selection (no-op)
+ dropCursor.setIndex( dropIndex - QMIN( endSel.index(), dropIndex ) + startSel.index() );
+ }
+ kdDebug(32500) << "dropCursor: parag=" << dropCursor.parag()->paragId() << " index=" << dropCursor.index() << endl;
+ }
+ KCommand* cmd = textObject()->removeSelectedTextCommand( cursor(), KoTextDocument::Standard );
+
+ hideCursor();
+ *cursor() = dropCursor;
+ showCursor();
+
+ return cmd;
+}
+
+
+void KoTextView::copyTextOfComment()
+{
+ KoNoteVariable *var = dynamic_cast<KoNoteVariable *>( variable() );
+ if( var )
+ {
+ KURL::List lst;
+ lst.append( var->note() );
+ QApplication::clipboard()->setSelectionMode(true);
+ QApplication::clipboard()->setData( new KURLDrag(lst, 0, 0) );
+ QApplication::clipboard()->setSelectionMode(false);
+ QApplication::clipboard()->setData( new KURLDrag(lst, 0, 0) );
+ }
+}
+
+void KoTextView::removeComment()
+{
+ KoNoteVariable *var = dynamic_cast<KoNoteVariable *>( variable() );
+ if( var )
+ {
+ m_cursor->setIndex( m_variablePosition );
+ textDocument()->setSelectionStart( KoTextDocument::Temp, m_cursor );
+ m_cursor->setIndex( m_variablePosition + 1 );
+ textDocument()->setSelectionEnd( KoTextDocument::Temp, m_cursor );
+ textObject()->removeSelectedText( m_cursor, KoTextDocument::Temp, i18n("Remove Comment") );
+ }
+}
+
+KoParagStyle * KoTextView::createStyleFromSelection(const QString & name)
+{
+ KoTextCursor cursor = *m_cursor;
+ if ( textDocument()->hasSelection( KoTextDocument::Standard ) )
+ cursor = textDocument()->selectionStartCursor( KoTextDocument::Standard );
+ KoParagStyle * style = new KoParagStyle (name);
+ KoParagLayout layout(cursor.parag()->paragLayout());
+ layout.style = style;
+ style->setFollowingStyle( style );
+ style->format() = *(cursor.parag()->at(cursor.index())->format());
+
+ style->paragLayout() = layout;
+ // Select this new style - hmm only the parag layout, we don't want to erase any text-formatting
+ cursor.parag()->setParagLayout( style->paragLayout() );
+ return style;
+}
+
+void KoTextView::updateStyleFromSelection( KoParagStyle* style )
+{
+ KoTextCursor cursor = *m_cursor;
+ if ( textDocument()->hasSelection( KoTextDocument::Standard ) )
+ cursor = textDocument()->selectionStartCursor( KoTextDocument::Standard );
+
+ style->paragLayout() = cursor.parag()->paragLayout();
+ style->paragLayout().style = style;
+ style->format() = *(cursor.parag()->at(cursor.index())->format());
+}
+
+void KoTextView::addBookmarks(const QString &url)
+{
+ QString filename = locateLocal( "data", QString::fromLatin1("konqueror/bookmarks.xml") );
+ KBookmarkManager *bookManager = KBookmarkManager::managerForFile( filename,false );
+ KBookmarkGroup group = bookManager->root();
+ group.addBookmark( bookManager, url, KURL( url));
+ bookManager->save();
+ // delete bookManager;
+}
+
+void KoTextView::copyLink()
+{
+ KoLinkVariable * var=linkVariable();
+ if(var)
+ {
+ KURL::List lst;
+ lst.append( var->url() );
+ QApplication::clipboard()->setSelectionMode(true);
+ QApplication::clipboard()->setData( new KURLDrag(lst, 0, 0) );
+ QApplication::clipboard()->setSelectionMode(false);
+ QApplication::clipboard()->setData( new KURLDrag(lst, 0, 0) );
+ }
+}
+
+void KoTextView::removeLink()
+{
+ KoLinkVariable * var=linkVariable();
+ if(var)
+ {
+ KoTextCursor c1 = *m_cursor;
+ KoTextCursor c2 = *m_cursor;
+ c1.setIndex(var->index());
+ c2.setIndex(var->index()+1);
+ textDocument()->setSelectionStart( KoTextDocument::Temp, &c1 );
+ textDocument()->setSelectionEnd( KoTextDocument::Temp, &c2 );
+ KCommand *cmd=textObject()->replaceSelectionCommand( &c1, var->value(),
+ i18n("Remove Link"), KoTextDocument::Temp );
+ if ( cmd )
+ textObject()->emitNewCommand( cmd );
+ }
+}
+
+void KoTextView::setBackSpeller( KoBgSpellCheck* backSpeller )
+{
+ d->m_backSpeller = backSpeller;
+}
+
+#include "KoTextView.moc"
+class KoBgSpellCheck;
diff --git a/lib/kotext/KoTextView.h b/lib/kotext/KoTextView.h
new file mode 100644
index 00000000..51da4fb2
--- /dev/null
+++ b/lib/kotext/KoTextView.h
@@ -0,0 +1,306 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2006 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kotextview_h
+#define kotextview_h
+
+#include <qobject.h>
+#include <qpoint.h>
+#include <qcolor.h>
+#include <qfont.h>
+#include <KoRuler.h> // for KoTabulatorList
+#include <KoTextObject.h> // for KoTextView
+#include <koffice_export.h>
+class KoBgSpellCheck;
+class KoTextObject;
+class KoTextDocument;
+class KoTextParag;
+class KoTextFormat;
+class KoParagCounter;
+class KCommand;
+class QTimer;
+class KAction;
+class KInstance;
+class KDataToolInfo;
+class KoLinkVariable;
+class KoVariable;
+class KoTextViewIface;
+#include "KoRichText.h"
+class KoBorder;
+class KoParagStyle;
+
+/**
+ * Object that is created to edit a KoTextObject.
+ * It handles all the events for it (mouse, keyboard).
+ * There can be several KoTextView instances for the same KoTextObject.
+ */
+class KOTEXT_EXPORT KoTextView : public QObject, public KoTextFormatInterface
+{
+ Q_OBJECT
+public:
+ /**
+ * Constructor. A KoTextView is associated to a KoTextObject.
+ * Don't forget to call updateUI(true,true) in your derived constructor
+ */
+ KoTextView( KoTextObject *textobj );
+ virtual ~KoTextView();
+
+ void setBackSpeller( KoBgSpellCheck* backSpeller );
+
+ virtual KoTextViewIface* dcopObject();
+
+ /** Call this before deleting */
+ /** don't remove selection when we made dnd between different frame*/
+ void terminate( bool removeselection=true );
+
+ KoTextObject * textObject() const { return m_textobj; }
+ KoTextCursor * cursor() const { return m_cursor; }
+ void setCursor( const KoTextCursor& cursor ) { *m_cursor = cursor; };
+ KoTextDocument * textDocument() const;
+
+ /** Return true if the view is allowed to modify the text object.
+ This is the case by default */
+ bool isReadWrite() const { return m_bReadWrite; }
+ /** Call setReadWrite(false) to make the text view readonly */
+ void setReadWrite( bool b ) { m_bReadWrite = b; }
+
+ virtual KoTextFormat * currentFormat() const { return m_currentFormat; }
+ void setCurrentFormat( KoTextFormat *fmt ) { m_currentFormat = fmt; }
+
+ /**
+ * Use this format for displaying the properties (Align/counter/...) of the object
+ */
+ virtual const KoParagLayout * currentParagLayoutFormat() const;
+
+ virtual bool rtl() const;
+
+ virtual KCommand *setChangeCaseOfTextCommand( KoChangeCaseDia::TypeOfCase _type );
+
+ virtual KCommand* setParagLayoutFormatCommand( KoParagLayout *newLayout, int flags, int marginIndex = -1 );
+
+ /** Implement the KoTextFormatInterface */
+ virtual KCommand* setFormatCommand( const KoTextFormat * newFormat, int flags, bool zoomFont = false );
+
+ // -- Paragraph settings --
+ KCommand * setCounterCommand( const KoParagCounter & counter );
+ KCommand * setAlignCommand( int align );
+ KCommand * setPageBreakingCommand( int pageBreaking );
+ KCommand * setLineSpacingCommand( double spacing, KoParagLayout::SpacingType _type );
+ KCommand * setBordersCommand( const KoBorder& leftBorder, const KoBorder& rightBorder, const KoBorder& bottomBorder, const KoBorder& topBorder );
+ KCommand * setJoinBordersCommand( bool join );
+ KCommand * setMarginCommand( QStyleSheetItem::Margin m, double margin );
+ KCommand * setTabListCommand( const KoTabulatorList & tabList );
+ KCommand * setBackgroundColorCommand( const QColor & color );
+ void applyStyle( const KoParagStyle * style );
+
+ void dragStarted();
+ void focusInEvent();
+ void focusOutEvent();
+ void handleKeyPressEvent( QKeyEvent * e, QWidget *, const QPoint& );
+ void handleKeyReleaseEvent( QKeyEvent * e );
+ void handleImStartEvent( QIMEvent * e );
+ void handleImComposeEvent( QIMEvent * e );
+ void handleImEndEvent( QIMEvent * e );
+ // iPoint is in Layout Unit pixels
+ // return true if we add new parag with "insert direct cursor"
+ bool handleMousePressEvent( QMouseEvent* e, const QPoint& iPoint, bool canStartDrag = true, bool insertDirectCursor = false );
+ void handleMouseMoveEvent( QMouseEvent* e, const QPoint& iPoint );
+ void handleMouseReleaseEvent();
+ void handleMouseDoubleClickEvent( QMouseEvent* e, const QPoint& iPoint );
+ void handleMouseTripleClickEvent( QMouseEvent* e, const QPoint& /* Currently unused */ );
+ bool maybeStartDrag( QMouseEvent* e );
+
+ KoTextCursor selectWordUnderCursor( const KoTextCursor& cursor, int selectionId = KoTextDocument::Standard );
+ KoTextCursor selectParagUnderCursor( const KoTextCursor& cursor, int selectionId = KoTextDocument::Standard, bool copyAndNotify = true );
+ void extendParagraphSelection( const QPoint& iPoint );
+
+ QString wordUnderCursor( const KoTextCursor& cursor );
+
+ /** Return the list of actions from data-tools. Used to populate a RMB popupmenu usually. */
+ QPtrList<KAction> dataToolActionList( KInstance * instance, const QString& word, bool & _singleWord );
+
+ void insertSoftHyphen();
+ void insertLineBreak();
+ void insertNonbreakingSpace();
+ void insertNonbreakingHyphen();
+ void increaseNumberingLevel( const KoStyleCollection* styleCollection );
+ void decreaseNumberingLevel( const KoStyleCollection* styleCollection );
+ void insertSpecialChar( QChar _c, const QString& font );
+ void changeCaseOfText( KoChangeCaseDia::TypeOfCase _type );
+
+ void addBookmarks( const QString& );
+
+ //return a pointer to the variable under the cursor, if any
+ KoVariable *variable();
+ //return a pointer to the link variable under the cursor, if any
+ // (special case of variable())
+ KoLinkVariable *linkVariable();
+
+ /// A "drop move" will move the selected text to the given cursor position.
+ /// This method only takes care of "removing the selected text"
+ /// if the drop cursor isn't in the selected text (and !protectContent).
+ KCommand *prepareDropMove( KoTextCursor dropCursor );
+
+ void removeComment();
+ void copyTextOfComment();
+
+ // This is in fact "from selection or cursor"
+ KoParagStyle * createStyleFromSelection( const QString & name );
+ void updateStyleFromSelection( KoParagStyle* style );
+
+ QString currentWordOrSelection() const;
+
+ virtual void removeToolTipCompletion() {}
+
+ // return true if we "insert direct cursor" and we insert new parag
+ bool placeCursor( const QPoint &pos /* in internal coordinates */, bool insertDirectCursor=false );
+ void setOverwriteMode( bool overwriteMode );
+
+public slots:
+ /** Show the current settings (those for the paragraph and character under the cursor), in the GUI.
+ * The default implementation handles m_currentFormat and calls showCurrentFormat().
+ * If you reimplement, make sure to call KoTextView::updateUI(updateFormat,force); */
+ virtual void updateUI( bool updateFormat, bool force = false );
+ virtual void ensureCursorVisible() = 0;
+ void showCurrentFormat();
+
+ // This allows KoTextObject to hide/show all the cursors before modifying anything
+ void hideCursor() { drawCursor( false ); }
+ void showCursor() { drawCursor( true ); }
+
+ /** This is a slot so that it's accessible from DCOP */
+ void insertText( const QString &text );
+ void newParagraph();
+
+ void copyLink();
+ void removeLink();
+ void completion();
+
+ void setCursor( KoTextCursor * _cursor ) { *m_cursor = *_cursor; }
+
+protected slots:
+ /** Start a drag */
+ virtual void startDrag() = 0;
+ void slotToolActivated( const KDataToolInfo & info, const QString & command );
+signals:
+ void copy();
+ void cut();
+ void paste();
+
+protected:
+ /**
+ * Called when a character (@p ch) has been inserted into @p parag, at the given @p index.
+ * This is a virtual method rather than a signal for performance reasons.
+ */
+ virtual void doAutoFormat( KoTextCursor* /*cursor*/, KoTextParag * /*parag*/,
+ int /*index*/, QChar /*ch*/ ) { }
+
+ virtual bool doCompletion( KoTextCursor* , KoTextParag *, int ) { return false; }
+ virtual bool doToolTipCompletion( KoTextCursor* , KoTextParag *, int, int ) { return false; }
+ virtual void showToolTipBox( KoTextParag *, int , QWidget *, const QPoint& ) {}
+
+ virtual void textIncreaseIndent() {}
+ virtual bool textDecreaseIndent() { return true; }
+
+ //return true if we are a doubleSpace
+ virtual bool doIgnoreDoubleSpace(KoTextParag * /*parag*/,
+ int /*index*/,QChar /*ch*/ ) { return false;}
+
+ /** Show the settings of this format in the GUI. Needs to be implemented in the application. */
+ virtual void showFormat( KoTextFormat *format ) = 0;
+
+ /** Draws the cursor (or hides it if b is false).
+ * The default implementation only changes an internal flag, make sure to reimplement
+ * and to call the parent implementation (in all cases)
+ */
+ virtual void drawCursor( bool b );
+
+ /// Called when clicking on a link
+ virtual bool openLink( KoLinkVariable* linkVariable );
+
+ /** Reimplement this to handle PageUp. Example implementation:
+ textView->cursor()->gotoPageUp( scrollview->visibleHeight() ); */
+ virtual bool pgUpKeyPressed() = 0;
+ /** Reimplement this to handle PageDown. Example implementation:
+ textView->cursor()->gotoPageDown( scrollview->visibleHeight() ); */
+ virtual bool pgDownKeyPressed() = 0;
+ /** Reimplement this to handle CTRL+PageUp. Default implementation calls pgUpKeyPressed */
+ virtual void ctrlPgUpKeyPressed() { pgUpKeyPressed(); }
+ /** Reimplement this to handle CTRL+PageDown. Default implementation calls pgDownKeyPressed */
+ virtual void ctrlPgDownKeyPressed() { pgDownKeyPressed(); }
+
+ void deleteWordLeft();
+ void deleteWordRight();
+ bool insertParagraph( const QPoint &pos );
+
+private slots:
+ void blinkCursor();
+ void tripleClickTimeout();
+ void afterTripleClickTimeout();
+protected:
+ KoTextViewIface *dcop;
+ public: // necessary to be public to allow script action in KoTextViewIface
+ enum CursorAction { // keep in sync with QTextEdit
+ MoveBackward,
+ MoveForward,
+ MoveWordBackward,
+ MoveWordForward,
+ MoveUp,
+ MoveDown,
+ MoveLineStart,
+ MoveLineEnd,
+ MoveHome,
+ MoveEnd,
+ MovePgUp,
+ MovePgDown,
+ MoveParagUp, // libkotext-specific
+ MoveParagDown, // libkotext-specific
+ MoveViewportUp, // KWord-specific
+ MoveViewportDown // KWord-specific
+ };
+
+ void moveCursor( CursorAction action, bool select );
+ bool moveCursor( CursorAction action );
+
+private:
+ KoTextObject *m_textobj;
+ KoTextCursor *m_cursor;
+
+ // Store the index of the variable on which we last clicked, to position m_cursor
+ int m_variablePosition;
+ bool m_overwriteMode;
+
+ KoTextFormat *m_currentFormat;
+ QTimer *blinkTimer, *dragStartTimer;
+ class KoTextViewPrivate;
+ KoTextViewPrivate *d;
+ QPoint dragStartPos;
+ bool m_cursorVisible;
+ bool blinkCursorVisible;
+ bool inDoubleClick;
+ bool mightStartDrag;
+ bool m_bReadWrite;
+ bool possibleTripleClick;
+ bool afterTripleClick;
+
+ bool m_singleWord;
+ QString m_wordUnderCursor;
+};
+
+#endif
diff --git a/lib/kotext/KoTextViewIface.cc b/lib/kotext/KoTextViewIface.cc
new file mode 100644
index 00000000..642fb097
--- /dev/null
+++ b/lib/kotext/KoTextViewIface.cc
@@ -0,0 +1,667 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Laurent MONTEL <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextViewIface.h"
+#include "KoTextView.h"
+#include "KoTextParag.h"
+#include "KoBorder.h"
+#include <kapplication.h>
+#include <dcopclient.h>
+#include <kdebug.h>
+#include <KoVariable.h>
+#include <kcommand.h>
+
+
+KoTextViewIface::KoTextViewIface( KoTextView *_textview )
+ : DCOPObject( /*TODO name*/ )
+{
+ m_textView = _textview;
+}
+
+void KoTextViewIface::insertSoftHyphen()
+{
+ m_textView->insertSoftHyphen();
+}
+
+void KoTextViewIface::insertText( const QString &text )
+{
+ m_textView->insertText(text);
+}
+
+void KoTextViewIface::newParagraph()
+{
+ m_textView->newParagraph();
+}
+
+
+void KoTextViewIface::setBold(bool b)
+{
+ KCommand *cmd=m_textView->setBoldCommand(b);
+ delete cmd;
+}
+
+void KoTextViewIface::setItalic(bool on)
+{
+ KCommand *cmd=m_textView->setItalicCommand(on);
+ delete cmd;
+}
+
+void KoTextViewIface::setUnderline(bool on)
+{
+ KCommand *cmd=m_textView->setUnderlineCommand(on);
+ delete cmd;
+}
+
+void KoTextViewIface::setDoubleUnderline(bool on)
+{
+ KCommand *cmd=m_textView->setDoubleUnderlineCommand(on);
+ delete cmd;
+}
+
+
+void KoTextViewIface::setStrikeOut(bool on)
+{
+ KCommand *cmd=m_textView->setStrikeOutCommand(on);
+ delete cmd;
+}
+
+void KoTextViewIface::setPointSize( int s )
+{
+ KCommand *cmd=m_textView->setPointSizeCommand(s);
+ delete cmd;
+}
+
+void KoTextViewIface::setTextSubScript(bool on)
+{
+ KCommand *cmd=m_textView->setTextSubScriptCommand(on);
+ delete cmd;
+}
+
+void KoTextViewIface::setTextSuperScript(bool on)
+{
+ KCommand *cmd=m_textView->setTextSuperScriptCommand(on);
+ delete cmd;
+}
+
+void KoTextViewIface::setLanguage(const QString & _lang)
+{
+ KCommand *cmd=m_textView->setLanguageCommand(_lang);
+ delete cmd;
+}
+
+QString KoTextViewIface::language() const
+{
+ return m_textView->language();
+}
+
+void KoTextViewIface::setDefaultFormat()
+{
+ KCommand *cmd=m_textView->setDefaultFormatCommand();
+ delete cmd;
+}
+
+QColor KoTextViewIface::textColor() const
+{
+ return m_textView->textColor();
+}
+
+QString KoTextViewIface::textFontFamily()const
+{
+ return m_textView->textFontFamily();
+}
+
+QColor KoTextViewIface::textBackgroundColor()const
+{
+ return m_textView->textBackgroundColor();
+}
+
+QColor KoTextViewIface::textUnderlineColor() const
+{
+ return m_textView->textUnderlineColor();
+}
+
+double KoTextViewIface::relativeTextSize() const
+{
+ return m_textView->relativeTextSize();
+}
+
+void KoTextViewIface::setRelativeTextSize( double _size)
+{
+ KCommand *cmd=m_textView->setRelativeTextSizeCommand(_size);
+ delete cmd;
+}
+
+void KoTextViewIface::setUnderlineColor( const QColor & color )
+{
+ KCommand *cmd=m_textView->setUnderlineColorCommand(color);
+ delete cmd;
+}
+
+void KoTextViewIface::setTextColor(const QColor &color)
+{
+ KCommand *cmd=m_textView->setTextColorCommand(color);
+ delete cmd;
+}
+
+void KoTextViewIface::setTextBackgroundColor(const QColor &color)
+{
+ KCommand *cmd=m_textView->setTextBackgroundColorCommand(color);
+ delete cmd;
+}
+
+void KoTextViewIface::setAlign(int align)
+{
+ KCommand *cmd=m_textView->setAlignCommand(align);
+ delete cmd;
+}
+
+void KoTextViewIface::setAlign(const QString &align)
+{
+ KCommand *cmd=0L;
+ if( align=="AlignLeft")
+ cmd=m_textView->setAlignCommand(Qt::AlignLeft);
+ else if (align=="AlignRight")
+ cmd=m_textView->setAlignCommand(Qt::AlignRight);
+ else if (align=="AlignCenter" || align=="AlignHCenter")
+ cmd=m_textView->setAlignCommand(Qt::AlignHCenter);
+ else if (align=="AlignJustify")
+ cmd=m_textView->setAlignCommand(Qt::AlignJustify);
+ else
+ {
+ kdDebug(32500)<<"Align value not recognized...\n";
+ cmd=m_textView->setAlignCommand(Qt::AlignLeft);
+ }
+ delete cmd;
+}
+
+bool KoTextViewIface::textDoubleUnderline() const
+{
+ return m_textView->textDoubleUnderline();
+}
+
+bool KoTextViewIface::textItalic() const
+{
+ return m_textView->textItalic();
+}
+
+bool KoTextViewIface::textBold() const
+{
+ return m_textView->textBold();
+}
+
+bool KoTextViewIface::textUnderline()const
+{
+ return m_textView->textUnderline();
+}
+
+bool KoTextViewIface::textStrikeOut()const
+{
+ return m_textView->textStrikeOut();
+}
+
+bool KoTextViewIface::textSubScript() const
+{
+ return m_textView->textSubScript();
+}
+
+bool KoTextViewIface::textSuperScript() const
+{
+ return m_textView->textSuperScript();
+}
+
+bool KoTextViewIface::isReadWrite() const
+{
+ return m_textView->isReadWrite();
+}
+
+void KoTextViewIface::setReadWrite( bool b )
+{
+ m_textView->setReadWrite(b);
+}
+
+void KoTextViewIface::hideCursor()
+{
+ m_textView->hideCursor();
+}
+
+void KoTextViewIface::showCursor()
+{
+ m_textView->showCursor();
+}
+
+int KoTextViewIface::cursorParagraph() const
+{
+ return m_textView->cursor()->parag()->paragId();
+}
+
+int KoTextViewIface::cursorIndex() const
+{
+ return m_textView->cursor()->index();
+}
+
+void KoTextViewIface::moveCursorLeft(bool select)
+{
+ m_textView->moveCursor(KoTextView::MoveBackward,select);
+}
+
+void KoTextViewIface::moveCursorRight(bool select)
+{
+ m_textView->moveCursor(KoTextView::MoveForward,select);
+}
+
+void KoTextViewIface::moveCursorUp(bool select)
+{
+ m_textView->moveCursor(KoTextView::MoveUp,select);
+}
+
+void KoTextViewIface::moveCursorDown(bool select)
+{
+ m_textView->moveCursor(KoTextView::MoveDown,select);
+}
+
+void KoTextViewIface::moveCursorHome(bool select)
+{
+ m_textView->moveCursor(KoTextView::MoveHome,select);
+}
+
+void KoTextViewIface::moveCursorEnd(bool select)
+{
+ m_textView->moveCursor(KoTextView::MoveEnd,select);
+}
+
+void KoTextViewIface::moveCursorWordLeft(bool select)
+{
+ m_textView->moveCursor(KoTextView::MoveWordBackward,select);
+}
+
+void KoTextViewIface::moveCursorWordRight(bool select)
+{
+ m_textView->moveCursor(KoTextView::MoveWordForward,select);
+}
+
+void KoTextViewIface::moveCursorLineEnd(bool select)
+{
+ m_textView->moveCursor(KoTextView::MoveLineEnd,select);
+}
+
+void KoTextViewIface::moveCursorLineStart(bool select)
+{
+ m_textView->moveCursor(KoTextView::MoveLineStart,select);
+}
+
+bool KoTextViewIface::paragraphHasBorder() const
+{
+ return m_textView->cursor()->parag()->hasBorder();
+}
+
+double KoTextViewIface::lineSpacing() const
+{
+ return m_textView->cursor()->parag()->kwLineSpacing();
+}
+
+double KoTextViewIface::leftMargin() const
+{
+ return m_textView->cursor()->parag()->margin( QStyleSheetItem::MarginLeft);
+}
+
+double KoTextViewIface::rightMargin() const
+{
+ return m_textView->cursor()->parag()->margin( QStyleSheetItem::MarginRight);
+}
+
+double KoTextViewIface::spaceBeforeParag() const
+{
+ return m_textView->cursor()->parag()->margin( QStyleSheetItem::MarginTop);
+}
+
+double KoTextViewIface::spaceAfterParag() const
+{
+ return m_textView->cursor()->parag()->margin( QStyleSheetItem::MarginBottom);
+}
+
+double KoTextViewIface::marginFirstLine() const
+{
+ return m_textView->cursor()->parag()->margin( QStyleSheetItem::MarginFirstLine);
+}
+
+void KoTextViewIface::setMarginFirstLine(double pt)
+{
+ m_textView->cursor()->parag()->setMargin( QStyleSheetItem::MarginFirstLine,pt);
+}
+
+void KoTextViewIface::setLineSpacing(double pt)
+{
+ m_textView->cursor()->parag()->setLineSpacing(pt);
+}
+
+void KoTextViewIface::setLeftMargin(double pt)
+{
+ m_textView->cursor()->parag()->setMargin( QStyleSheetItem::MarginLeft,pt);
+}
+
+void KoTextViewIface::setRightMargin(double pt)
+{
+ m_textView->cursor()->parag()->setMargin( QStyleSheetItem::MarginRight,pt);
+}
+
+void KoTextViewIface::setSpaceBeforeParag(double pt)
+{
+ m_textView->cursor()->parag()->setMargin( QStyleSheetItem::MarginTop,pt);
+}
+
+void KoTextViewIface::setSpaceAfterParag(double pt)
+{
+ m_textView->cursor()->parag()->setMargin( QStyleSheetItem::MarginBottom,pt);
+}
+
+
+void KoTextViewIface::setLeftBorder( const QColor & c,double width )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->setLeftBorder(KoBorder( c, KoBorder::SOLID, width ));
+
+}
+
+void KoTextViewIface::setRightBorder( const QColor & c,double width )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->setRightBorder(KoBorder( c, KoBorder::SOLID, width ));
+}
+
+void KoTextViewIface::setTopBorder( const QColor & c,double width )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->setTopBorder(KoBorder( c, KoBorder::SOLID, width ));
+}
+
+void KoTextViewIface::setBottomBorder(const QColor & c,double width )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->setBottomBorder(KoBorder( c, KoBorder::SOLID, width ));
+}
+
+double KoTextViewIface::leftBorderWidth() const
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ return parag->leftBorder().width();
+}
+
+double KoTextViewIface::rightBorderWidth() const
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ return parag->rightBorder().width();
+
+}
+double KoTextViewIface::topBorderWidth() const
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ return parag->topBorder().width();
+
+}
+
+double KoTextViewIface::bottomBorderWidth() const
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ return parag->bottomBorder().width();
+
+}
+
+QColor KoTextViewIface::leftBorderColor() const
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ return parag->leftBorder().color;
+}
+
+QColor KoTextViewIface::rightBorderColor() const
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ return parag->rightBorder().color;
+}
+
+QColor KoTextViewIface::topBorderColor() const
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ return parag->topBorder().color;
+}
+
+QColor KoTextViewIface::bottomBorderColor() const
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ return parag->bottomBorder().color;
+}
+
+void KoTextViewIface::setLeftBorderColor( const QColor & c )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->leftBorder().color = c ;
+}
+
+void KoTextViewIface::setRightBorderColor( const QColor & c )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->rightBorder().color = c ;
+}
+
+void KoTextViewIface::setTopBorderColor( const QColor & c )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->topBorder().color = c ;
+}
+
+void KoTextViewIface::setBottomBorderColor(const QColor & c )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->bottomBorder().color = c ;
+}
+
+void KoTextViewIface::setLeftBorderWidth( double _witdh )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->leftBorder().setPenWidth(_witdh) ;
+}
+
+void KoTextViewIface::setRightBorderWidth( double _witdh )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->rightBorder().setPenWidth(_witdh) ;
+}
+
+void KoTextViewIface::setTopBorderWidth( double _witdh )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->topBorder().setPenWidth(_witdh) ;
+}
+
+void KoTextViewIface::setBottomBorderWidth( double _witdh )
+{
+ KoTextParag *parag= m_textView->cursor()->parag();
+ parag->bottomBorder().setPenWidth(_witdh) ;
+}
+
+
+void KoTextViewIface::changeCaseOfText( const QString & caseType)
+{
+ KCommand *cmd=0L;
+ if( caseType.lower() == "uppercase" )
+ {
+ cmd=m_textView->setChangeCaseOfTextCommand( KoChangeCaseDia::UpperCase );
+ }
+ else if( caseType.lower() =="lowercase" )
+ {
+ cmd=m_textView->setChangeCaseOfTextCommand( KoChangeCaseDia::LowerCase );
+ }
+ else if( caseType.lower() =="titlecase" )
+ {
+ cmd=m_textView->setChangeCaseOfTextCommand( KoChangeCaseDia::TitleCase );
+ }
+ else if( caseType.lower() =="togglecase" )
+ {
+ cmd=m_textView->setChangeCaseOfTextCommand( KoChangeCaseDia::ToggleCase );
+ }
+ else if ( caseType.lower() =="sentencecase" )
+ {
+ cmd=m_textView->setChangeCaseOfTextCommand( KoChangeCaseDia::SentenceCase );
+
+ }
+ else
+ kdDebug(32500)<<"Error in void KoTextViewIface::changeCaseOfText( const QString & caseType) parameter\n";
+ delete cmd;
+}
+
+bool KoTextViewIface::isALinkVariable() const
+{
+ return (m_textView->linkVariable()!=0);
+}
+
+QString KoTextViewIface::linkVariableUrl( ) const
+{
+ KoLinkVariable *var=m_textView->linkVariable();
+ if ( !var)
+ return QString::null;
+ else
+ {
+ return var->url();
+ }
+}
+
+QString KoTextViewIface::linkVariableName( ) const
+{
+ KoLinkVariable *var=m_textView->linkVariable();
+ if ( !var)
+ return QString::null;
+ else
+ {
+ return var->value();
+ }
+}
+
+
+bool KoTextViewIface::changeLinkVariableUrl( const QString & _url) const
+{
+ KoLinkVariable *var=m_textView->linkVariable();
+ if ( !var)
+ return false;
+ else
+ {
+ var->setLink(var->value(), _url);
+ var->recalc();
+ }
+ return true;
+}
+
+bool KoTextViewIface::changeLinkVariableName( const QString & _name) const
+{
+ KoLinkVariable *var=m_textView->linkVariable();
+ if ( !var)
+ return false;
+ else
+ {
+ var->setLink(_name, var->url());
+ var->recalc();
+ }
+ return true;
+}
+
+bool KoTextViewIface::isANoteVariable() const
+{
+ KoNoteVariable *var = dynamic_cast<KoNoteVariable *>(m_textView->variable());
+ return (var!=0);
+}
+
+QString KoTextViewIface::noteVariableText() const
+{
+ KoNoteVariable *var = dynamic_cast<KoNoteVariable *>(m_textView->variable());
+ if( var )
+ return var->note();
+ else
+ return QString::null;
+}
+
+bool KoTextViewIface::setNoteVariableText(const QString & note) const
+{
+ KoNoteVariable *var = dynamic_cast<KoNoteVariable *>(m_textView->variable());
+ if( var )
+ {
+ var->setNote( note);
+ return true;
+ }
+ else
+ return false;
+}
+
+void KoTextViewIface::removeComment()
+{
+ removeComment();
+}
+
+QString KoTextViewIface::underlineStyle() const
+{
+ return KoTextFormat::underlineStyleToString( m_textView->underlineStyle() );
+}
+
+QString KoTextViewIface::strikeOutStyle()const
+{
+ return KoTextFormat::strikeOutStyleToString( m_textView->strikeOutStyle() );
+}
+
+void KoTextViewIface::addBookmarks(const QString &url)
+{
+ m_textView->addBookmarks(url);
+}
+
+void KoTextViewIface::copyLink()
+{
+ m_textView->copyLink();
+}
+
+void KoTextViewIface::removeLink()
+{
+ m_textView->removeLink();
+}
+
+bool KoTextViewIface::wordByWord() const
+{
+ return m_textView->wordByWord();
+}
+
+void KoTextViewIface::setWordByWord( bool _b )
+{
+ KCommand *cmd=m_textView->setWordByWordCommand(_b );
+ delete cmd;
+}
+
+void KoTextViewIface::copyTextOfComment()
+{
+ m_textView->copyTextOfComment();
+}
+
+QString KoTextViewIface::fontAttibute()const
+{
+ return KoTextFormat::attributeFontToString( m_textView->fontAttribute() );
+}
+
+void KoTextViewIface::insertNonbreakingSpace()
+{
+ m_textView->insertNonbreakingSpace();
+}
+
+void KoTextViewIface::insertNonbreakingHyphen()
+{
+ m_textView->insertNonbreakingHyphen();
+}
diff --git a/lib/kotext/KoTextViewIface.h b/lib/kotext/KoTextViewIface.h
new file mode 100644
index 00000000..cee86f06
--- /dev/null
+++ b/lib/kotext/KoTextViewIface.h
@@ -0,0 +1,178 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002, Laurent MONTEL <lmontel@mandrakesoft.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOTEXTVIEW_IFACE_H
+#define KOTEXTVIEW_IFACE_H
+
+#include <KoDocumentIface.h>
+#include <dcopref.h>
+
+#include <qstring.h>
+#include <qcolor.h>
+#include <KoRichText.h>
+#include <koffice_export.h>
+class KoTextView;
+
+class KOTEXT_EXPORT KoTextViewIface : public DCOPObject
+{
+ K_DCOP
+public:
+ KoTextViewIface( KoTextView *_textview );
+
+k_dcop:
+ void insertSoftHyphen();
+ void insertNonbreakingSpace();
+ void insertNonbreakingHyphen();
+ void insertText( const QString &text );
+ void newParagraph();
+ void setBold(bool b);
+ void setItalic(bool on);
+ void setUnderline(bool on);
+ void setDoubleUnderline(bool on);
+ void setStrikeOut(bool on);
+ void setPointSize( int s );
+ void setTextSubScript(bool on);
+ void setTextSuperScript(bool on);
+ void setUnderlineColor( const QColor & color );
+ void setDefaultFormat();
+ void setRelativeTextSize( double _size);
+
+ QColor textColor() const;
+ QString textFontFamily()const;
+ QColor textBackgroundColor()const;
+ QColor textUnderlineColor() const;
+ bool textDoubleUnderline() const;
+
+ bool textItalic() const;
+ bool textBold() const;
+ bool textUnderline()const;
+ bool textStrikeOut()const;
+ bool textSubScript() const;
+ bool textSuperScript() const;
+ // TODO text shadow
+ double relativeTextSize() const;
+ bool wordByWord() const;
+
+ void setWordByWord( bool _b );
+ void setTextColor(const QColor &color);
+ void setTextBackgroundColor(const QColor &);
+ void setAlign(int align);
+ void setAlign(const QString &);
+
+ bool isReadWrite() const ;
+ void setReadWrite( bool b );
+
+ void hideCursor();
+ void showCursor();
+
+ int cursorParagraph() const;
+ int cursorIndex() const;
+
+ void moveCursorLeft(bool select);
+ void moveCursorRight(bool select);
+ void moveCursorUp(bool select);
+ void moveCursorDown(bool select);
+ void moveCursorHome(bool select);
+ void moveCursorEnd(bool select);
+ void moveCursorWordRight(bool select);
+ void moveCursorWordLeft(bool select);
+ void moveCursorLineEnd(bool select);
+ void moveCursorLineStart(bool select);
+
+ bool paragraphHasBorder() const;
+
+ //return line spacing in pt
+ double lineSpacing() const;
+
+ double rightMargin() const;
+ double leftMargin() const;
+ double marginFirstLine() const;
+ double spaceAfterParag() const;
+ double spaceBeforeParag() const;
+
+ void setMarginFirstLine(double pt);
+ void setLineSpacing(double pt);
+ void setLeftMargin(double pt);
+ void setRightMargin(double pt);
+ void setSpaceBeforeParag(double pt);
+ void setSpaceAfterParag(double pt);
+
+ // apply border, for the futur add border style
+ void setLeftBorder( const QColor & c,double width );
+ void setRightBorder( const QColor & c,double width );
+
+ void setTopBorder( const QColor & c,double width );
+ void setBottomBorder(const QColor & c,double width );
+
+ void setLeftBorderColor( const QColor & c );
+ void setRightBorderColor( const QColor & c );
+ void setTopBorderColor( const QColor & c);
+ void setBottomBorderColor(const QColor & c );
+ void setLeftBorderWidth( double _witdh );
+ void setRightBorderWidth( double _witdh );
+ void setTopBorderWidth( double _witdh );
+ void setBottomBorderWidth( double _witdh );
+
+
+ //return border width in pt
+ double leftBorderWidth() const ;
+ double rightBorderWidth() const;
+ double topBorderWidth() const;
+ double bottomBorderWidth() const;
+
+ QColor leftBorderColor() const ;
+ QColor rightBorderColor() const;
+ QColor topBorderColor() const;
+ QColor bottomBorderColor() const;
+
+ void changeCaseOfText( const QString & caseType);
+ bool isALinkVariable() const;
+ //return false if there is not a link
+ bool changeLinkVariableUrl( const QString & _url) const;
+ //return false if there is not a link
+ bool changeLinkVariableName( const QString & _name) const;
+
+ //be carefull these functions return QString::null when there is not
+ //a variable
+ QString linkVariableUrl( ) const;
+ QString linkVariableName( ) const;
+
+ bool isANoteVariable() const ;
+ QString noteVariableText() const;
+ //return false if there is not a note variable
+ bool setNoteVariableText(const QString & note) const;
+
+ void removeComment();
+ QString underlineStyle() const;
+ QString strikeOutStyle()const;
+
+ void setLanguage(const QString & _lang);
+ QString language() const;
+ void addBookmarks(const QString &url);
+ void copyLink();
+ void removeLink();
+ void copyTextOfComment();
+ QString fontAttibute()const;
+private:
+ KoTextView *m_textView;
+protected:
+ //QString lineStyleToString( KoTextFormat::LineStyle _style ) const;
+};
+
+#endif
diff --git a/lib/kotext/KoTextZoomHandler.cpp b/lib/kotext/KoTextZoomHandler.cpp
new file mode 100644
index 00000000..306c7f2f
--- /dev/null
+++ b/lib/kotext/KoTextZoomHandler.cpp
@@ -0,0 +1,89 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoTextZoomHandler.h"
+#include <kdebug.h>
+#include <qpaintdevice.h>
+#include <KoUnit.h>
+#include <KoGlobal.h>
+
+// Layout text at 1440 DPI
+// Well, not really always 1440 DPI, but always 20 times the point size
+// This is constant, no need to litterally apply 1440 DPI at all resolutions.
+int KoTextZoomHandler::m_layoutUnitFactor = 20;
+
+#if 0
+int KoTextZoomHandler::fontSizeToLayoutUnit( double ptSizeFloat, bool forPrint ) const
+{
+ return ptToLayoutUnit( ptSizeFloat / ( m_zoomedResolutionY *
+ ( forPrint ? 1.0 : (72.0 / KoGlobal::dpiY()) ) ) );
+}
+#endif
+
+double KoTextZoomHandler::layoutUnitToFontSize( int luSize, bool /*forPrint*/ ) const
+{
+ // Qt will use QPaintDevice::x11AppDpiY() to go from pt to pixel for fonts
+ return layoutUnitPtToPt( luSize ) * m_zoomedResolutionY
+#ifdef Q_WS_X11
+ / POINT_TO_INCH(QPaintDevice::x11AppDpiY())
+#endif
+ ;
+}
+
+int KoTextZoomHandler::layoutUnitToPixelX( int x, int w ) const
+{
+ // We call layoutUnitToPixelX on the right value, i.e. x+w-1,
+ // and then determine the height from the result (i.e. right-left+1).
+ // Calling layoutUnitToPixelX(w) leads to rounding problems.
+ return layoutUnitToPixelY( x + w - 1 ) - layoutUnitToPixelY( x ) + 1;
+}
+
+int KoTextZoomHandler::layoutUnitToPixelY( int y, int h ) const
+{
+ // We call layoutUnitToPixelY on the bottom value, i.e. y+h-1,
+ // and then determine the height from the result (i.e. bottom-top+1).
+ // Calling layoutUnitToPixelY(h) leads to rounding problems.
+ return layoutUnitToPixelY( y + h - 1 ) - layoutUnitToPixelY( y ) + 1;
+}
+
+int KoTextZoomHandler::layoutUnitToPixelX( int lupix ) const
+{
+ return int( static_cast<double>( lupix * m_zoomedResolutionX )
+ / ( static_cast<double>( m_layoutUnitFactor ) * m_resolutionX ) );
+}
+
+int KoTextZoomHandler::layoutUnitToPixelY( int lupix ) const
+{
+ // qRound replaced with a truncation, too many problems (e.g. bottom of parags)
+ return int( static_cast<double>( lupix * m_zoomedResolutionY )
+ / ( static_cast<double>( m_layoutUnitFactor ) * m_resolutionY ) );
+}
+
+int KoTextZoomHandler::pixelToLayoutUnitX( int x ) const
+{
+ return qRound( static_cast<double>( x * m_layoutUnitFactor * m_resolutionX )
+ / m_zoomedResolutionX );
+}
+
+int KoTextZoomHandler::pixelToLayoutUnitY( int y ) const
+{
+ return qRound( static_cast<double>( y * m_layoutUnitFactor * m_resolutionY )
+ / m_zoomedResolutionY );
+}
+
diff --git a/lib/kotext/KoTextZoomHandler.h b/lib/kotext/KoTextZoomHandler.h
new file mode 100644
index 00000000..2490cfa6
--- /dev/null
+++ b/lib/kotext/KoTextZoomHandler.h
@@ -0,0 +1,136 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001-2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kotextzoomhandler_h
+#define kotextzoomhandler_h
+
+#include <KoZoomHandler.h>
+
+/**
+ * This class extends KoZoomHandler to add support for WYSIWYG text layouting.
+ */
+class KOTEXT_EXPORT KoTextZoomHandler : public KoZoomHandler
+{
+public:
+ KoTextZoomHandler() {}
+ virtual ~KoTextZoomHandler() {}
+
+ //// Support for WYSIWYG text layouting /////
+
+ /** The "[zoomed] view pixel" -> "layout unit pixel" conversions. */
+ int pixelToLayoutUnitX( int x ) const;
+ int pixelToLayoutUnitY( int y ) const;
+ QPoint pixelToLayoutUnit( const QPoint &p ) const
+ { return QPoint( pixelToLayoutUnitX( p.x() ),
+ pixelToLayoutUnitY( p.y() ) ); }
+ QRect pixelToLayoutUnit( const QRect &r ) const
+ { return QRect( pixelToLayoutUnit( r.topLeft() ),
+ pixelToLayoutUnit( r.bottomRight() ) ); }
+
+ /** The "layout unit pixel" -> "[zoomed] view pixel" conversions. */
+ int layoutUnitToPixelX( int lupix ) const;
+ int layoutUnitToPixelY( int lupix ) const;
+
+ /** This variant converts a width, using a reference X position.
+ * This prevents rounding problems. */
+ int layoutUnitToPixelX( int x, int w ) const;
+ /** This variant converts a height, using a reference Y position.
+ * This prevents rounding problems. */
+ int layoutUnitToPixelY( int y, int h ) const;
+
+ QPoint layoutUnitToPixel( const QPoint &p ) const
+ { return QPoint( layoutUnitToPixelX( p.x() ),
+ layoutUnitToPixelY( p.y() ) ); }
+ QRect layoutUnitToPixel( const QRect &r ) const
+ { return QRect( layoutUnitToPixel( r.topLeft() ),
+ layoutUnitToPixel( r.bottomRight() ) ); }
+
+ /** Basic pt to pixel and pixel to pt conversions, valid at any zoom level,
+ as well as at the Layout Unit level (and mostly useful for Layout Units).
+ Don't confuse with zoomIt, which also converts pt to pixels, but applying the zoom! */
+ int ptToPixelX( double pt ) const
+ { return qRound( pt * m_resolutionX ); }
+ int ptToPixelY( double pt ) const
+ { return qRound( pt * m_resolutionY ); }
+ QPoint ptToPixel( const KoPoint & p ) const {
+ return QPoint( ptToPixelX( p.x() ), ptToPixelY( p.y() ) );
+ }
+ double pixelXToPt( int x ) const
+ { return static_cast<double>(x) / m_resolutionX; }
+ double pixelYToPt( int y ) const
+ { return static_cast<double>(y) / m_resolutionY; }
+ KoPoint pixelToPt( const QPoint& p ) const {
+ return KoPoint( pixelXToPt( p.x() ), pixelYToPt( p.y() ) );
+ }
+
+ /** The "document pt" -> "Layout Unit pixels" conversions, for convenience */
+ int ptToLayoutUnitPixX( double x_pt ) const
+ { return ptToPixelX( ptToLayoutUnitPt( x_pt ) ); }
+ int ptToLayoutUnitPixY( double y_pt ) const
+ { return ptToPixelY( ptToLayoutUnitPt( y_pt ) ); }
+ QPoint ptToLayoutUnitPix( const KoPoint & p ) const {
+ return QPoint( ptToLayoutUnitPixX( p.x() ), ptToLayoutUnitPixY( p.y() ) );
+ }
+
+ /**
+ * Given the font size for the font in layout units, in pt (use pointSize())
+ * this returns the font size to use on screen the current zoom, in pt (use setPointSizeFloat()),
+ */
+ double layoutUnitToFontSize( int luSize, bool /*forPrint*/ ) const;
+
+ // Note: For converting fontsizes from/to layout units and zoom-independent
+ // pt sizes (like the one the user sees, e.g. 12pt),
+ // use ptToLayoutUnit and layoutUnitToPt, not layoutToFontSize.
+
+
+ // The conversions below convert between an internal text layout resolution of
+ // ~1440 DPI (by default) and the point-size for the fonts (those known by the user).
+ // Those conversions don't depend on the zoom level.
+
+ /** Change the factor that converts between pointsizes
+ * and layout units (by default 20 - for 1440 DPI at 72 DPI) */
+ static void setPtToLayoutUnitFactor( int factor ) { m_layoutUnitFactor = factor; }
+
+ /** Not zoom dependent. Simply convert a pt value (e.g. a frame)
+ * to high-resolution layout unit coordinates (in pt). */
+ static double ptToLayoutUnitPt( double pt )
+ { return pt * static_cast<double>( m_layoutUnitFactor ); }
+ /** Same thing for integer values, e.g. a font size in pt */
+ static int ptToLayoutUnitPt( int ptSize )
+ { return ptSize * m_layoutUnitFactor; }
+
+ static KoPoint ptToLayoutUnitPt( const KoPoint &p )
+ { return KoPoint( ptToLayoutUnitPt( p.x() ),
+ ptToLayoutUnitPt( p.y() ) ); }
+ static KoRect ptToLayoutUnitPt( const KoRect &r )
+ { return KoRect( ptToLayoutUnitPt( r.topLeft() ),
+ ptToLayoutUnitPt( r.bottomRight() ) ); }
+
+ static double layoutUnitPtToPt( double lupt )
+ { return lupt / static_cast<double>( m_layoutUnitFactor ); }
+ static KoPoint layoutUnitPtToPt( const KoPoint& p )
+ { return KoPoint( layoutUnitPtToPt( p.x() ),
+ layoutUnitPtToPt( p.y() ) ); }
+
+protected:
+ /** This being static ensures that the same value is used by all KoTextZoomHandler instances */
+ static int m_layoutUnitFactor;
+};
+
+#endif
diff --git a/lib/kotext/KoUserStyle.cpp b/lib/kotext/KoUserStyle.cpp
new file mode 100644
index 00000000..1dc92a9e
--- /dev/null
+++ b/lib/kotext/KoUserStyle.cpp
@@ -0,0 +1,36 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "KoUserStyle.h"
+#include <klocale.h>
+
+KoUserStyle::KoUserStyle( const QString & name )
+ : m_name( name ), m_displayName( i18n( "Style name", name.utf8() ) )
+{
+}
+
+QString KoUserStyle::displayName() const
+{
+ return m_displayName;
+}
+
+void KoUserStyle::setDisplayName( const QString& name )
+{
+ m_displayName = name;
+}
+
diff --git a/lib/kotext/KoUserStyle.h b/lib/kotext/KoUserStyle.h
new file mode 100644
index 00000000..51603f10
--- /dev/null
+++ b/lib/kotext/KoUserStyle.h
@@ -0,0 +1,55 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOUSERSTYLE_H
+#define KOUSERSTYLE_H
+
+#include <koffice_export.h>
+#include <qstring.h>
+
+/**
+ * Base class for any kind of style that the user can create/modify/delete/display.
+ * Use in conjunction with KoUserStyleCollection.
+ *
+ * For every style provided by the application itself and named "Foo", ensure that
+ * i18n("Style name", "Foo") is available in a .cpp file, and create KoUserStyle("Foo").
+ * The display name of the style will be set automatically to the translation of "Foo".
+ */
+class KOTEXT_EXPORT KoUserStyle
+{
+public:
+ KoUserStyle( const QString & name );
+
+ /// The internal name (used for loading/saving, but not shown to the user)
+ /// Should be unique in a given style collection.
+ QString name() const { return m_name; }
+ /// Set the internal name - see generateUniqueName() if needed
+ /// Should be unique in a given style collection.
+ void setName( const QString & name ) { m_name = name; }
+
+ /// The user-visible name (e.g. translated, or set by the user)
+ QString displayName() const;
+ /// Set the user-visible name
+ void setDisplayName( const QString& name );
+
+protected:
+ QString m_name;
+ QString m_displayName;
+};
+
+#endif
diff --git a/lib/kotext/KoUserStyleCollection.cpp b/lib/kotext/KoUserStyleCollection.cpp
new file mode 100644
index 00000000..1b9b8ccf
--- /dev/null
+++ b/lib/kotext/KoUserStyleCollection.cpp
@@ -0,0 +1,147 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "KoUserStyleCollection.h"
+#include "KoUserStyle.h"
+#include <kdebug.h>
+
+KoUserStyleCollection::KoUserStyleCollection( const QString& prefix )
+ : m_prefix( prefix ),
+ m_lastStyle( 0 ),
+ m_default( false /*to be safe*/ )
+{
+}
+
+KoUserStyle* KoUserStyleCollection::findStyle( const QString & _name, const QString& defaultStyleName ) const
+{
+ // Caching, to speed things up
+ if ( m_lastStyle && m_lastStyle->name() == _name )
+ return m_lastStyle;
+
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_styleList.begin(), styleEnd = m_styleList.end() ; styleIt != styleEnd ; ++styleIt ) {
+ if ( (*styleIt)->name() == _name ) {
+ m_lastStyle = *styleIt;
+ return m_lastStyle;
+ }
+ }
+
+ if( !defaultStyleName.isEmpty() && _name == defaultStyleName && !m_styleList.isEmpty() )
+ return m_styleList.first(); // fallback..
+
+ return 0;
+}
+
+KoUserStyle* KoUserStyleCollection::findStyleByDisplayName( const QString& displayName ) const
+{
+ if ( m_lastStyle && m_lastStyle->displayName() == displayName )
+ return m_lastStyle;
+
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_styleList.begin(), styleEnd = m_styleList.end() ; styleIt != styleEnd ; ++styleIt ) {
+ if ( (*styleIt)->displayName() == displayName ) {
+ m_lastStyle = *styleIt;
+ return m_lastStyle;
+ }
+ }
+
+ return 0;
+}
+
+QString KoUserStyleCollection::generateUniqueName() const
+{
+ int count = 1;
+ QString name;
+ do {
+ name = m_prefix + QString::number( count++ );
+ } while ( findStyle( name, QString::null ) );
+ return name;
+}
+
+KoUserStyleCollection::~KoUserStyleCollection()
+{
+ clear();
+}
+
+void KoUserStyleCollection::clear()
+{
+ // KDE4: qDeleteAll
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_styleList.begin(), styleEnd = m_styleList.end() ; styleIt != styleEnd ; ++styleIt )
+ delete *styleIt;
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_deletedStyles.begin(), styleEnd = m_deletedStyles.end() ; styleIt != styleEnd ; ++styleIt )
+ delete *styleIt;
+ m_styleList.clear();
+ m_deletedStyles.clear();
+ m_lastStyle = 0;
+}
+
+QStringList KoUserStyleCollection::displayNameList() const
+{
+ QStringList lst;
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_styleList.begin(), styleEnd = m_styleList.end() ; styleIt != styleEnd ; ++styleIt )
+ lst.append( (*styleIt)->displayName() );
+ return lst;
+}
+
+KoUserStyle* KoUserStyleCollection::addStyle( KoUserStyle* sty )
+{
+ // First check for duplicates.
+ for ( QValueList<KoUserStyle *>::const_iterator styleIt = m_styleList.begin(), styleEnd = m_styleList.end() ; styleIt != styleEnd ; ++styleIt )
+ {
+ KoUserStyle* p = *styleIt;
+ if ( p->name() == sty->name() ) {
+ if ( p->displayName() == sty->displayName() ) {
+ // Replace existing style
+ if ( sty != p )
+ {
+ *p = *sty;
+ delete sty;
+ }
+ return p;
+ } else { // internal name conflict, but it's not the same style as far as the user is concerned
+ sty->setName( generateUniqueName() );
+ }
+ }
+ }
+ m_styleList.append( sty );
+ return sty;
+}
+
+void KoUserStyleCollection::removeStyle ( KoUserStyle *style ) {
+ if( m_styleList.remove(style)) {
+ if ( m_lastStyle == style )
+ m_lastStyle = 0;
+ // Remember to delete this style when deleting the document
+ m_deletedStyles.append(style);
+ }
+}
+
+void KoUserStyleCollection::updateStyleListOrder( const QStringList &lst )
+{
+ QValueList<KoUserStyle *> orderStyle;
+ for ( QStringList::const_iterator it = lst.begin(); it != lst.end(); ++it )
+ {
+ KoUserStyle* style = findStyle( *it, QString::null );
+ if ( style )
+ orderStyle.append( style );
+ else
+ kdWarning(32500) << "updateStyleListOrder: style " << *it << " not found!" << endl;
+ }
+ // we'll lose (and leak) styles if the list didn't have all the styles
+ Q_ASSERT( m_styleList.count() == orderStyle.count() );
+ m_styleList.clear();
+ m_styleList = orderStyle;
+}
diff --git a/lib/kotext/KoUserStyleCollection.h b/lib/kotext/KoUserStyleCollection.h
new file mode 100644
index 00000000..70910399
--- /dev/null
+++ b/lib/kotext/KoUserStyleCollection.h
@@ -0,0 +1,154 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOUSERSTYLECOLLECTION_H
+#define KOUSERSTYLECOLLECTION_H
+
+class KoUserStyle;
+#include <koffice_export.h>
+#include <qstringlist.h>
+
+/**
+ * Generic style collection class, for all "user styles" (see KoUserStyle).
+ * To use this for a particular kind of style, derive from KoUserStyle (to add the properties)
+ * and derive from KoUserStyleCollection (to add loading, saving, as well as
+ * re-defined findStyle and addStyle in order to cast to the correct style class).
+ */
+class KOTEXT_EXPORT KoUserStyleCollection
+{
+public:
+ /**
+ * Constructor
+ * @param prefix used by generateUniqueName to prefix new style names
+ * (to avoid clashes between different kinds of styles)
+ */
+ KoUserStyleCollection( const QString& prefix );
+
+ /**
+ * Destructor
+ * Deletes all styles.
+ */
+ ~KoUserStyleCollection();
+
+ /**
+ * Erase all styles
+ */
+ void clear();
+
+ /**
+ * @return true if the collection is empty
+ */
+ bool isEmpty() const { return m_styleList.isEmpty(); }
+ /**
+ * @return the number of items in the collection
+ */
+ int count() const { return m_styleList.count(); }
+ /**
+ * @return the index of @p style in the collection
+ */
+ int indexOf( KoUserStyle* style ) const { return m_styleList.findIndex( style ); }
+
+ /**
+ * Return the list of all styles in the collection.
+ */
+ QValueList<KoUserStyle *> styleList() const { return m_styleList; }
+
+ /**
+ * Generate a new unique name, to create a style whose internal name
+ * differs from the internal name of all existing styles.
+ * The prefix passed to the constructor is used here.
+ */
+ QString generateUniqueName() const;
+
+ /**
+ * Return the list composed of the display-name of each style in the collection
+ */
+ QStringList displayNameList() const;
+
+ /**
+ * Find style based on the internal name @p name.
+ * If the style with that name can't be found, then<br>
+ * 1) if @p name equals @p defaultStyleName, return the first one, never 0<br>
+ * 2) otherwise return 0
+ */
+ KoUserStyle* findStyle( const QString & name, const QString& defaultStyleName ) const;
+
+ /**
+ * Find style based on the display name @p displayName.
+ * There could be 0, 1 or more than 1 style with that name,
+ * the method simply returns the first one found, or 0 if none was found.
+ * This is mostly useful to detect similar styles when importing styles
+ * from another document.
+ */
+ KoUserStyle* findStyleByDisplayName( const QString& displayName ) const;
+
+ /**
+ * Remove @p style from the collection. If the style isn't in the collection, nothing happens.
+ * The style mustn't be deleted yet; it is stored into a list of styles to delete in clear().
+ */
+ void removeStyle( KoUserStyle *style );
+
+ /**
+ * Reorder the styles in the collection.
+ * @param list the list of internal names of the styles
+ * WARNING, if an existing style isn't listed, it will be lost
+ */
+ void updateStyleListOrder( const QStringList& list );
+
+ /**
+ * Try adding @p sty to the collection.
+ * From the moment of this call, the collection owns the style.
+ *
+ * Either this succeeds, and @p sty is returned, or a style with the exact same
+ * internal name and display name is present already, in which case the existing style
+ * is updated, @p sty is deleted, and the existing style is returned.
+ *
+ * WARNING: @p sty can be deleted; use the returned value for any further processing.
+ */
+ KoUserStyle* addStyle( KoUserStyle* sty );
+
+ /**
+ * @return true if this collection only holds the default styles provided by the application
+ * When true, those styles don't need to be saved.
+ */
+ bool isDefault() const { return m_default; }
+ /**
+ * Set whether this collection only holds the default styles provided by the application
+ */
+ void setDefault( bool d ) { m_default = d; }
+
+protected:
+ KoUserStyleCollection( const KoUserStyleCollection& rhs ); ///< forbidden
+ void operator=( const KoUserStyleCollection& rhs ); ///< forbidden
+
+ QValueList<KoUserStyle *> m_styleList;
+
+private:
+ QValueList<KoUserStyle *> m_deletedStyles;
+ const QString m_prefix;
+ // can become d pointer if needed
+ mutable KoUserStyle *m_lastStyle; ///< Last style that was searched
+ bool m_default;
+ bool m_unused1;
+ bool m_unused2;
+ bool m_unused3;
+};
+
+
+#endif /* KOUSERSTYLECOLLECTION_H */
+
diff --git a/lib/kotext/KoVariable.cpp b/lib/kotext/KoVariable.cpp
new file mode 100644
index 00000000..d110f02c
--- /dev/null
+++ b/lib/kotext/KoVariable.cpp
@@ -0,0 +1,2877 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+ Copyright (C) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoVariable.h"
+#include "KoVariable.moc"
+#include "KoTextZoomHandler.h"
+#include "TimeFormatWidget.h"
+#include "DateFormatWidget.h"
+#include "KoTextCommand.h"
+#include "KoTextObject.h"
+#include "KoTextParag.h"
+#include "KoOasisContext.h"
+#include <KoOasisSettings.h>
+
+#include <KoDocumentInfo.h>
+#include <KoOasisStyles.h>
+#include <KoXmlWriter.h>
+#include <KoDocument.h>
+#include <KoXmlNS.h>
+#include <KoDom.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kglobal.h>
+#include <kdialogbase.h>
+#include <kconfig.h>
+#include <kdeversion.h>
+#include <kinstance.h>
+#include <kcalendarsystem.h>
+#include <kaboutdata.h>
+
+#include <qstringlist.h>
+#include <qcombobox.h>
+#include <qvaluelist.h>
+#include <qdom.h>
+#include <qradiobutton.h>
+
+#include "IsoDuration.h"
+
+class KoVariableSettings::KoVariableSettingPrivate
+{
+public:
+ KoVariableSettingPrivate()
+ {
+ m_lastPrintingDate.setTime_t(0); // Default is 1970-01-01 midnight locale time
+ }
+ QDateTime m_lastPrintingDate;
+ QDateTime m_creationDate;
+ QDateTime m_modificationDate;
+};
+
+
+KoVariableSettings::KoVariableSettings()
+{
+ d = new KoVariableSettingPrivate;
+ m_startingPageNumber = 1;
+ m_displayLink = true;
+ m_displayComment = true;
+ m_underlineLink = true;
+ m_displayFieldCode = false;
+}
+
+KoVariableSettings::~KoVariableSettings()
+{
+ delete d;
+ d = 0;
+}
+
+QDateTime KoVariableSettings::lastPrintingDate() const
+{
+ return d->m_lastPrintingDate;
+}
+
+void KoVariableSettings::setLastPrintingDate( const QDateTime & _date)
+{
+ d->m_lastPrintingDate = _date;
+}
+
+QDateTime KoVariableSettings::creationDate() const
+{
+ return d->m_creationDate;
+}
+
+void KoVariableSettings::setCreationDate( const QDateTime & _date )
+{
+ d->m_creationDate = _date;
+}
+
+QDateTime KoVariableSettings::modificationDate() const
+{
+ return d->m_modificationDate;
+}
+
+void KoVariableSettings::setModificationDate( const QDateTime & _date)
+{
+ d->m_modificationDate = _date;
+}
+
+void KoVariableSettings::saveOasis( KoXmlWriter &settingsWriter ) const
+{
+ settingsWriter.startElement("config:config-item-set");
+ settingsWriter.addAttribute("config:name", "configuration-variable-settings");
+ settingsWriter.addConfigItem("displaylink", m_displayLink );
+ settingsWriter.addConfigItem( "underlinelink", m_underlineLink);
+ settingsWriter.addConfigItem( "displaycomment", m_displayComment);
+ settingsWriter.addConfigItem( "displayfieldcode", m_displayFieldCode);
+ // m_startingPageNumber isn't saved to OASIS. Applications must use either
+ // style:page-number in the first parag of a page (see KoTextParag), or
+ // style:first-page-number in style:page-layout, for spreadsheets etc.
+ if ( d->m_lastPrintingDate.isValid())
+ settingsWriter.addConfigItem("lastPrintingDate", d->m_lastPrintingDate.toString(Qt::ISODate));
+
+ if ( d->m_creationDate.isValid())
+ settingsWriter.addConfigItem("creationDate", d->m_creationDate.toString(Qt::ISODate));
+
+ if ( d->m_modificationDate.isValid())
+ settingsWriter.addConfigItem("modificationDate", d->m_modificationDate.toString(Qt::ISODate));
+
+ settingsWriter.endElement(); // config:config-item-set
+}
+
+void KoVariableSettings::loadOasis(const KoOasisSettings&settingsDoc)
+{
+ KoOasisSettings::Items configurationSettings = settingsDoc.itemSet( "configuration-variable-settings" );
+ if ( !configurationSettings.isNull() )
+ {
+ m_displayLink = configurationSettings.parseConfigItemBool( "displaylink", true );
+ m_underlineLink = configurationSettings.parseConfigItemBool( "underlinelink", true );
+ m_displayComment = configurationSettings.parseConfigItemBool( "displaycomment", true );
+ m_displayFieldCode = configurationSettings.parseConfigItemBool( "displayfieldcode", false );
+
+ QString str = configurationSettings.parseConfigItemString( "lastPrintingDate" );
+ if ( !str.isEmpty() )
+ d->m_lastPrintingDate = QDateTime::fromString( str, Qt::ISODate );
+ else
+ d->m_lastPrintingDate.setTime_t(0); // 1970-01-01 00:00:00.000 locale time
+
+ str = configurationSettings.parseConfigItemString( "creationDate" );
+ if ( !str.isEmpty() ) {
+ d->m_creationDate = QDateTime::fromString( str, Qt::ISODate );
+ }
+
+ str = configurationSettings.parseConfigItemString( "modificationDate" );
+ if ( !str.isEmpty() )
+ d->m_modificationDate = QDateTime::fromString( str, Qt::ISODate );
+
+ // m_startingPageNumber isn't loaded from OASIS here. KWTextParag::loadOasis does it.
+ }
+}
+
+void KoVariableSettings::save( QDomElement &parentElem )
+{
+ QDomElement elem = parentElem.ownerDocument().createElement( "VARIABLESETTINGS" );
+ parentElem.appendChild( elem );
+ if(m_startingPageNumber!=1)
+ {
+ elem.setAttribute( "startingPageNumber", m_startingPageNumber );
+ }
+ elem.setAttribute("displaylink",(int)m_displayLink);
+ elem.setAttribute("underlinelink",(int)m_underlineLink);
+ elem.setAttribute("displaycomment",(int)m_displayComment);
+ elem.setAttribute("displayfieldcode", (int)m_displayFieldCode);
+
+ if ( d->m_lastPrintingDate.isValid())
+ elem.setAttribute("lastPrintingDate", d->m_lastPrintingDate.toString(Qt::ISODate));
+
+ if ( d->m_creationDate.isValid())
+ elem.setAttribute("creationDate", d->m_creationDate.toString(Qt::ISODate));
+
+ if ( d->m_modificationDate.isValid())
+ elem.setAttribute("modificationDate", d->m_modificationDate.toString(Qt::ISODate));
+}
+
+void KoVariableSettings::load( QDomElement &elem )
+{
+ QDomElement e = elem.namedItem( "VARIABLESETTINGS" ).toElement();
+ if (!e.isNull())
+ {
+ if(e.hasAttribute("startingPageNumber"))
+ m_startingPageNumber = e.attribute("startingPageNumber").toInt();
+ if(e.hasAttribute("displaylink"))
+ m_displayLink=(bool)e.attribute("displaylink").toInt();
+ if(e.hasAttribute("underlinelink"))
+ m_underlineLink=(bool)e.attribute("underlinelink").toInt();
+ if(e.hasAttribute("displaycomment"))
+ m_displayComment=(bool)e.attribute("displaycomment").toInt();
+ if (e.hasAttribute("displayfieldcode"))
+ m_displayFieldCode=(bool)e.attribute("displayfieldcode").toInt();
+
+ if (e.hasAttribute("lastPrintingDate"))
+ d->m_lastPrintingDate = QDateTime::fromString( e.attribute( "lastPrintingDate" ), Qt::ISODate );
+ else
+ d->m_lastPrintingDate.setTime_t(0); // 1970-01-01 00:00:00.000 locale time
+
+ if (e.hasAttribute("creationDate")) {
+ d->m_creationDate = QDateTime::fromString( e.attribute( "creationDate" ), Qt::ISODate );
+ }
+
+ if (e.hasAttribute("modificationDate"))
+ d->m_modificationDate = QDateTime::fromString( e.attribute( "modificationDate" ), Qt::ISODate );
+ }
+}
+
+KoVariableDateFormat::KoVariableDateFormat() : KoVariableFormat()
+{
+}
+
+QString KoVariableDateFormat::convert( const QVariant& data ) const
+{
+ if ( data.type() != QVariant::Date && data.type() != QVariant::DateTime )
+ {
+ kdWarning(32500)<<" Error in KoVariableDateFormat::convert. Value is a "
+ << data.typeName() << "(" << data.type() << ")" << endl;
+ // dateTime will be invalid, then set to 1970-01-01
+ }
+ QDateTime dateTime ( data.toDateTime() );
+ if ( !dateTime.isValid() )
+ return i18n("No date set"); // e.g. old KWord documents
+
+ if (m_strFormat.lower() == "locale" || m_strFormat.isEmpty())
+ return KGlobal::locale()->formatDate( dateTime.date(), false );
+ else if ( m_strFormat.lower() == "localeshort" )
+ return KGlobal::locale()->formatDate( dateTime.date(), true );
+ else if ( m_strFormat.lower() == "localedatetime" )
+ return KGlobal::locale()->formatDateTime( dateTime, false );
+ else if ( m_strFormat.lower() == "localedatetimeshort" )
+ return KGlobal::locale()->formatDateTime( dateTime, true );
+
+ QString tmp ( dateTime.toString(m_strFormat) );
+ const int month = dateTime.date().month();
+ tmp.replace("PPPP", KGlobal::locale()->calendar()->monthNamePossessive(month, false)); //long possessive month name
+ tmp.replace("PPP", KGlobal::locale()->calendar()->monthNamePossessive(month, true)); //short possessive month name
+ return tmp;
+}
+
+QCString KoVariableDateFormat::key() const
+{
+ return getKey( m_strFormat );
+}
+
+QCString KoVariableDateFormat::getKey( const QString& props ) const
+{
+ return QCString("DATE") + props.utf8();
+}
+
+void KoVariableDateFormat::load( const QCString &key )
+{
+ QCString params( key.mid( 4 ) ); // skip "DATE"
+ if ( !params.isEmpty() )
+ {
+ if (params[0] == '1' || params[0] == '0') // old m_bShort crap
+ params = params.mid(1); // skip it
+ m_strFormat = QString::fromUtf8( params );
+ }
+}
+
+// Used by KoVariableFormatCollection::popupActionList(), to apply all formats
+// to the current data, in the popup menu.
+QStringList KoVariableDateFormat::staticFormatPropsList()
+{
+ QStringList listDateFormat;
+ listDateFormat<<"locale";
+ listDateFormat<<"localeshort";
+ listDateFormat<<"localedatetime";
+ listDateFormat<<"localedatetimeshort";
+ listDateFormat<<"dd/MM/yy";
+ listDateFormat<<"dd/MM/yyyy";
+ listDateFormat<<"MMM dd,yy";
+ listDateFormat<<"MMM dd,yyyy";
+ listDateFormat<<"dd.MMM.yyyy";
+ listDateFormat<<"MMMM dd, yyyy";
+ listDateFormat<<"ddd, MMM dd,yy";
+ listDateFormat<<"dddd, MMM dd,yy";
+ listDateFormat<<"MM-dd";
+ listDateFormat<<"yyyy-MM-dd";
+ listDateFormat<<"dd/yy";
+ listDateFormat<<"MMMM";
+ listDateFormat<<"yyyy-MM-dd hh:mm";
+ listDateFormat<<"dd.MMM.yyyy hh:mm";
+ listDateFormat<<"MMM dd,yyyy h:mm AP";
+ listDateFormat<<"yyyy-MM-ddThh:mm:ss"; // ISO 8601
+ return listDateFormat;
+}
+
+// Used by dateformatwidget_impl
+// TODO: shouldn't it apply the formats to the value, like the popupmenu does?
+QStringList KoVariableDateFormat::staticTranslatedFormatPropsList()
+{
+ QStringList listDateFormat;
+ listDateFormat<<i18n("Locale date format");
+ listDateFormat<<i18n("Short locale date format");
+ listDateFormat<<i18n("Locale date & time format");
+ listDateFormat<<i18n("Short locale date & time format");
+ listDateFormat<<"dd/MM/yy";
+ listDateFormat<<"dd/MM/yyyy";
+ listDateFormat<<"MMM dd,yy";
+ listDateFormat<<"MMM dd,yyyy";
+ listDateFormat<<"dd.MMM.yyyy";
+ listDateFormat<<"MMMM dd, yyyy";
+ listDateFormat<<"ddd, MMM dd,yy";
+ listDateFormat<<"dddd, MMM dd,yy";
+ listDateFormat<<"MM-dd";
+ listDateFormat<<"yyyy-MM-dd";
+ listDateFormat<<"dd/yy";
+ listDateFormat<<"MMMM";
+ listDateFormat<<"yyyy-MM-dd hh:mm";
+ listDateFormat<<"dd.MMM.yyyy hh:mm";
+ listDateFormat<<"MMM dd,yyyy h:mm AP";
+ listDateFormat<<"yyyy-MM-ddThh:mm:ss"; // ISO 8601
+ return listDateFormat;
+}
+
+////
+
+KoVariableTimeFormat::KoVariableTimeFormat() : KoVariableFormat()
+{
+}
+
+void KoVariableTimeFormat::load( const QCString &key )
+{
+ QCString params( key.mid( 4 ) );
+ if ( !params.isEmpty() )
+ m_strFormat = QString::fromUtf8(params);
+}
+
+QString KoVariableTimeFormat::convert( const QVariant & time ) const
+{
+ if ( time.type() != QVariant::Time )
+ {
+ kdDebug(32500)<<" Error in KoVariableTimeFormat::convert. Value is a "
+ << time.typeName() << "(" << time.type() << ")" << endl;
+ return QString::null;
+ }
+
+ if( m_strFormat.lower() == "locale" || m_strFormat.isEmpty() )
+ return KGlobal::locale()->formatTime( time.toTime() );
+ return time.toTime().toString(m_strFormat);
+}
+
+QCString KoVariableTimeFormat::key() const
+{
+ return getKey( m_strFormat );
+}
+
+QCString KoVariableTimeFormat::getKey( const QString& props ) const
+{
+ return QCString("TIME") + props.utf8();
+}
+
+// Used by KoVariableFormatCollection::popupActionList(), to apply all formats
+// to the current data, in the popup menu.
+QStringList KoVariableTimeFormat::staticFormatPropsList()
+{
+ QStringList listTimeFormat;
+ listTimeFormat<<"locale";
+ listTimeFormat<<"hh:mm";
+ listTimeFormat<<"hh:mm:ss";
+ listTimeFormat<<"hh:mm AP";
+ listTimeFormat<<"hh:mm:ss AP";
+ listTimeFormat<<"mm:ss.zzz";
+ return listTimeFormat;
+}
+
+// Used by timeformatwidget_impl
+QStringList KoVariableTimeFormat::staticTranslatedFormatPropsList()
+{
+ QStringList listTimeFormat;
+ listTimeFormat<<i18n("Locale format");
+ listTimeFormat<<"hh:mm";
+ listTimeFormat<<"hh:mm:ss";
+ listTimeFormat<<"hh:mm AP";
+ listTimeFormat<<"hh:mm:ss AP";
+ listTimeFormat<<"mm:ss.zzz";
+ return listTimeFormat;
+}
+
+////
+
+QString KoVariableStringFormat::convert( const QVariant & string ) const
+{
+ if ( string.type() != QVariant::String )
+ {
+ kdDebug(32500)<<" Error in KoVariableStringFormat::convert. Value is a " << string.typeName() << endl;
+ return QString::null;
+ }
+
+ return string.toString();
+}
+
+QCString KoVariableStringFormat::key() const
+{
+ return getKey( QString::null );
+ // TODO prefix & suffix
+}
+
+QCString KoVariableStringFormat::getKey( const QString& props ) const
+{
+ return QCString("STRING") + props.utf8();
+}
+
+////
+
+QString KoVariableNumberFormat::convert( const QVariant &value ) const
+{
+ if ( value.type() != QVariant::Int )
+ {
+ kdDebug(32500)<<" Error in KoVariableNumberFormat::convert. Value is a " << value.typeName() << endl;
+ return QString::null;
+ }
+
+ return QString::number( value.toInt() );
+}
+
+QCString KoVariableNumberFormat::key() const
+{
+ return getKey(QString::null);
+}
+
+QCString KoVariableNumberFormat::getKey( const QString& props ) const
+{
+ return QCString("NUMB") + props.utf8();
+}
+
+////
+
+KoVariableFormatCollection::KoVariableFormatCollection()
+{
+ m_dict.setAutoDelete( true );
+}
+
+KoVariableFormat * KoVariableFormatCollection::format( const QCString &key )
+{
+ KoVariableFormat *f = m_dict[ key.data() ];
+ if (f)
+ return f;
+ else
+ return createFormat( key );
+}
+
+KoVariableFormat * KoVariableFormatCollection::createFormat( const QCString &key )
+{
+ kdDebug(32500) << "KoVariableFormatCollection: creating format for key=" << key << endl;
+ KoVariableFormat * format = 0L;
+ // The first 4 chars identify the class
+ QCString type = key.left(4);
+ if ( type == "DATE" )
+ format = new KoVariableDateFormat();
+ else if ( type == "TIME" )
+ format = new KoVariableTimeFormat();
+ else if ( type == "NUMB" ) // this type of programming makes me numb ;)
+ format = new KoVariableNumberFormat();
+ else if ( type == "STRI" )
+ format = new KoVariableStringFormat();
+
+ if ( format )
+ {
+ format->load( key );
+ m_dict.insert( format->key() /* not 'key', it could be incomplete */, format );
+ }
+ return format;
+}
+
+/******************************************************************/
+/* Class: KoVariableCollection */
+/******************************************************************/
+KoVariableCollection::KoVariableCollection(KoVariableSettings *_settings, KoVariableFormatCollection *formatCollection)
+{
+ m_variableSettings = _settings;
+ m_varSelected = 0L;
+ m_formatCollection = formatCollection;
+}
+
+KoVariableCollection::~KoVariableCollection()
+{
+ delete m_variableSettings;
+}
+
+void KoVariableCollection::clear()
+{
+ variables.clear();
+ varValues.clear();
+ m_varSelected = 0;
+}
+
+void KoVariableCollection::registerVariable( KoVariable *var )
+{
+ if ( !var )
+ return;
+ variables.append( var );
+}
+
+void KoVariableCollection::unregisterVariable( KoVariable *var )
+{
+ variables.take( variables.findRef( var ) );
+}
+
+QValueList<KoVariable *> KoVariableCollection::recalcVariables(int type)
+{
+ QValueList<KoVariable *> modifiedVariables;
+ QPtrListIterator<KoVariable> it( variables );
+ for ( ; it.current() ; ++it )
+ {
+ KoVariable* variable = it.current();
+ if ( variable->isDeleted() )
+ continue;
+ if ( variable->type() == type || type == VT_ALL )
+ {
+ QVariant oldValue = variable->varValue();
+ variable->recalc();
+ if(variable->height == 0)
+ variable->resize();
+ if ( variable->varValue() != oldValue )
+ modifiedVariables.append( variable );
+ KoTextParag * parag = variable->paragraph();
+ if ( parag )
+ {
+ //kdDebug(32500) << "KoDoc::recalcVariables -> invalidating parag " << parag->paragId() << endl;
+ parag->invalidate( 0 );
+ parag->setChanged( true );
+ }
+ }
+ }
+#if 0
+ // TODO pass list of textdocuments as argument
+ // Or even better, call emitRepaintChanged on all modified textobjects
+ if( !modifiedVariables.isEmpty() )
+ emit repaintVariable();
+#endif
+ return modifiedVariables;
+}
+
+
+void KoVariableCollection::setVariableValue( const QString &name, const QString &value )
+{
+ varValues[ name ] = value;
+}
+
+QString KoVariableCollection::getVariableValue( const QString &name ) const
+{
+ if ( !varValues.contains( name ) )
+ return i18n( "No value" );
+ return varValues[ name ];
+}
+
+bool KoVariableCollection::customVariableExist(const QString &varname) const
+{
+ return varValues.contains( varname );
+}
+
+void KoVariableCollection::setVariableSelected(KoVariable * var)
+{
+ m_varSelected=var;
+}
+
+// TODO change to QValueList<KAction *>, but only once plugActionList takes that
+QPtrList<KAction> KoVariableCollection::popupActionList() const
+{
+ QPtrList<KAction> listAction;
+ // Insert list of actions that change the subtype
+ const QStringList subTypeList = m_varSelected->subTypeList();
+ kdDebug() << k_funcinfo << "current subtype=" << m_varSelected->subType() << endl;
+ QStringList::ConstIterator it = subTypeList.begin();
+ for ( int i = 0; it != subTypeList.end() ; ++it, ++i )
+ {
+ if ( !(*it).isEmpty() ) // in case of removed subtypes or placeholders
+ {
+ // We store the subtype number as the action name
+ QCString name; name.setNum(i);
+ KToggleAction * act = new KToggleAction( *it, KShortcut(), 0, name );
+ connect( act, SIGNAL(activated()), this, SLOT(slotChangeSubType()) );
+ if ( i == m_varSelected->subType() )
+ act->setChecked( true );
+ //m_subTextMap.insert( act, i );
+ listAction.append( act );
+ }
+ }
+ // Insert list of actions that change the format properties
+ KoVariableFormat* format = m_varSelected->variableFormat();
+ QString currentFormat = format->formatProperties();
+
+ const QStringList list = format->formatPropsList();
+ it = list.begin();
+ for ( int i = 0; it != list.end() ; ++it, ++i )
+ {
+ if( i == 0 ) // first item, and list not empty
+ listAction.append( new KActionSeparator() );
+
+ if ( !(*it).isEmpty() ) // in case of removed subtypes or placeholders
+ {
+ format->setFormatProperties( *it ); // temporary change
+ QString text = format->convert( m_varSelected->varValue() );
+ // We store the raw format as the action name
+ KToggleAction * act = new KToggleAction(text, KShortcut(), 0, (*it).utf8());
+ connect( act, SIGNAL(activated()), this, SLOT(slotChangeFormat()) );
+ if ( (*it) == currentFormat )
+ act->setChecked( true );
+ listAction.append( act );
+ }
+ }
+
+ // Restore current format
+ format->setFormatProperties( currentFormat );
+ return listAction;
+}
+
+void KoVariableCollection::slotChangeSubType()
+{
+ KAction * act = (KAction *)(sender());
+ int menuNumber = QCString(act->name()).toInt();
+ int newSubType = m_varSelected->variableSubType(menuNumber);
+ kdDebug(32500) << "slotChangeSubType: menuNumber=" << menuNumber << " newSubType=" << newSubType << endl;
+ if ( m_varSelected->subType() != newSubType )
+ {
+ KoChangeVariableSubType *cmd=new KoChangeVariableSubType(
+ m_varSelected->subType(), newSubType, m_varSelected );
+ cmd->execute();
+ m_varSelected->textDocument()->emitNewCommand(cmd);
+ }
+}
+
+void KoVariableCollection::slotChangeFormat()
+{
+ KAction * act = (KAction *)(sender());
+ QString newFormat = QString::fromUtf8(act->name());
+ QString oldFormat = m_varSelected->variableFormat()->formatProperties();
+ if (oldFormat != newFormat )
+ {
+ KCommand *cmd=new KoChangeVariableFormatProperties(
+ oldFormat, newFormat, m_varSelected );
+ cmd->execute();
+ m_varSelected->textDocument()->emitNewCommand(cmd);
+ }
+}
+
+KoVariable * KoVariableCollection::createVariable( int type, short int subtype, KoVariableFormatCollection * coll, KoVariableFormat *varFormat,KoTextDocument *textdoc, KoDocument * doc, int _correct, bool _forceDefaultFormat, bool /*loadFootNote*/ )
+{
+ Q_ASSERT( coll == m_formatCollection ); // why do we need a parameter ?!?
+ QCString string;
+ QStringList stringList;
+ if ( varFormat == 0L )
+ {
+ // Get the default format for this variable (this method is only called in the interactive case, not when loading)
+ switch ( type ) {
+ case VT_DATE:
+ case VT_DATE_VAR_KWORD10: // compatibility with kword 1.0
+ {
+ if ( _forceDefaultFormat )
+ varFormat = coll->format( KoDateVariable::defaultFormat() );
+ else
+ {
+ QCString result = KoDateVariable::formatStr(_correct);
+ if ( result.isNull() )//we cancel insert variable
+ return 0L;
+ varFormat = coll->format( result );
+ }
+ break;
+ }
+ case VT_TIME:
+ case VT_TIME_VAR_KWORD10: // compatibility with kword 1.0
+ {
+ if ( _forceDefaultFormat )
+ varFormat = coll->format( KoTimeVariable::defaultFormat() );
+ else
+ {
+ QCString result = KoTimeVariable::formatStr(_correct);
+ if ( result.isNull() )//we cancel insert variable
+ return 0L;
+ varFormat = coll->format( result );
+ }
+ break;
+ }
+ case VT_PGNUM:
+ varFormat = coll->format( "NUMBER" );
+ break;
+ case VT_FIELD:
+ case VT_CUSTOM:
+ case VT_MAILMERGE:
+ case VT_LINK:
+ case VT_NOTE:
+ varFormat = coll->format( "STRING" );
+ break;
+ case VT_FOOTNOTE: // this is a KWord-specific variable
+ kdError() << "Footnote type not handled in KoVariableCollection: VT_FOOTNOTE" << endl;
+ return 0L;
+ case VT_STATISTIC:
+ kdError() << " Statistic type not handled in KoVariableCollection: VT_STATISTIC" << endl;
+ return 0L;
+ }
+ }
+ Q_ASSERT( varFormat );
+ if ( varFormat == 0L ) // still 0 ? Impossible!
+ return 0L ;
+
+ kdDebug(32500) << "Creating variable. Format=" << varFormat->key() << " type=" << type << endl;
+ KoVariable * var = 0L;
+ switch ( type ) {
+ case VT_DATE:
+ case VT_DATE_VAR_KWORD10: // compatibility with kword 1.0
+ var = new KoDateVariable( textdoc, subtype, varFormat, this, _correct );
+ break;
+ case VT_TIME:
+ case VT_TIME_VAR_KWORD10: // compatibility with kword 1.0
+ var = new KoTimeVariable( textdoc, subtype, varFormat, this, _correct );
+ break;
+ case VT_PGNUM:
+ kdError() << "VT_PGNUM must be handled by the application's reimplementation of KoVariableCollection::createVariable" << endl;
+ //var = new KoPageVariable( textdoc, subtype, varFormat, this );
+ break;
+ case VT_FIELD:
+ var = new KoFieldVariable( textdoc, subtype, varFormat,this,doc );
+ break;
+ case VT_CUSTOM:
+ var = new KoCustomVariable( textdoc, QString::null, varFormat, this);
+ break;
+ case VT_MAILMERGE:
+ var = new KoMailMergeVariable( textdoc, QString::null, varFormat ,this);
+ break;
+ case VT_LINK:
+ var = new KoLinkVariable( textdoc,QString::null, QString::null, varFormat ,this);
+ break;
+ case VT_NOTE:
+ var = new KoNoteVariable( textdoc, QString::null, varFormat ,this);
+ break;
+ }
+ Q_ASSERT( var );
+ return var;
+}
+
+
+KoVariable* KoVariableCollection::loadOasisField( KoTextDocument* textdoc, const QDomElement& tag, KoOasisContext& context )
+{
+ const QString localName( tag.localName() );
+ const bool isTextNS = tag.namespaceURI() == KoXmlNS::text;
+ QString key;
+ int type = -1;
+ if ( isTextNS )
+ {
+ if ( localName.endsWith( "date" ) || localName.endsWith( "time" ) )
+ {
+ QString dataStyleName = tag.attributeNS( KoXmlNS::style, "data-style-name", QString::null );
+ QString dateFormat = "locale";
+ const KoOasisStyles::DataFormatsMap& map = context.oasisStyles().dataFormats();
+ KoOasisStyles::DataFormatsMap::const_iterator it = map.find( dataStyleName );
+ if ( it != map.end() )
+ dateFormat = (*it).formatStr;
+
+ // Only text:time is a pure time (the data behind is only h/m/s)
+ // ### FIXME: not true, a time can have a date too (reason: for MS Word (already from long ago) time and date are the same thing. But for OO the correction is not in the same unit for time and date.)
+ // Whereas print-time/creation-time etc. are actually related to a date/time value.
+ if ( localName == "time" )
+ {
+ type = VT_TIME;
+ key = "TIME" + dateFormat;
+ }
+ else
+ {
+ type = VT_DATE;
+ key = "DATE" + dateFormat;
+ }
+ }
+ else if (localName == "page-number" || localName == "page-count" )
+ {
+ type = VT_PGNUM;
+ key = "NUMBER";
+ }
+ else if (localName == "chapter")
+ {
+ type = VT_PGNUM;
+ key = "STRING";
+ }
+ else if (localName == "file-name")
+ {
+ type = VT_FIELD;
+ key = "STRING";
+ }
+ else if (localName == "author-name"
+ || localName == "author-initials"
+ || localName == "subject"
+ || localName == "title"
+ || localName == "description"
+ || localName == "keywords")
+ {
+ type = VT_FIELD;
+ key = "STRING";
+ }
+ else if ( localName.startsWith( "sender-" )
+ && localName != "sender-firstname" // not supported
+ && localName != "sender-lastname" // not supported
+ && localName != "sender-initials" // not supported
+ )
+ {
+ type = VT_FIELD;
+ key = "STRING";
+ }
+ else if ( localName == "variable-set"
+ || localName == "user-defined"
+ || localName == "user-field-get" )
+ {
+ key = "STRING";
+ type = VT_CUSTOM;
+ }
+ else
+ return 0L;
+ }
+ else if ( tag.namespaceURI() == KoXmlNS::office && localName == "annotation" )
+ {
+ type = VT_NOTE;
+ key = "NUMBER";
+ }
+ else
+ {
+ // Not an error. It's simply not a variable tag (the caller doesn't check for that)
+ return 0;
+ }
+// TODO localName == "page-variable-get", "initial-creator" and many more
+// TODO VT_MAILMERGE
+
+ return loadOasisFieldCreateVariable( textdoc, tag, context, key, type );
+}
+
+KoVariable* KoVariableCollection::loadOasisFieldCreateVariable( KoTextDocument* textdoc, const QDomElement& tag, KoOasisContext& context, const QString &key, int type )
+{
+ KoVariableFormat * varFormat = key.isEmpty() ? 0 : m_formatCollection->format( key.latin1() );
+ // If varFormat is 0 (no key specified), the default format will be used.
+
+ KoVariable* var = createVariable( type, -1, m_formatCollection, varFormat, textdoc, context.koDocument(), 0 /*correct*/, true );
+ var->loadOasis( tag, context );
+ return var;
+}
+
+/******************************************************************/
+/* Class: KoVariable */
+/******************************************************************/
+KoVariable::KoVariable( KoTextDocument *textdoc, KoVariableFormat *varFormat, KoVariableCollection *_varColl)
+ : KoTextCustomItem( textdoc )
+{
+ //d = new Private;
+ m_varColl=_varColl;
+ m_varFormat = varFormat;
+ m_varColl->registerVariable( this );
+ m_ascent = 0;
+}
+
+KoVariable::~KoVariable()
+{
+ //kdDebug(32500) << "KoVariable::~KoVariable " << this << endl;
+ m_varColl->unregisterVariable( this );
+ //delete d;
+}
+
+QStringList KoVariable::subTypeList()
+{
+ return QStringList();
+}
+
+void KoVariable::resize()
+{
+ if ( m_deleted )
+ return;
+ KoTextFormat *fmt = format();
+ QFontMetrics fm = fmt->refFontMetrics();
+ QString txt = text();
+
+ width = 0;
+ // size at 100%
+ for ( int i = 0 ; i < (int)txt.length() ; ++i )
+ width += fm.width( txt[i] ); // was fm.charWidth(txt,i), but see drawCustomItemHelper...
+ // zoom to LU
+ width = qRound( KoTextZoomHandler::ptToLayoutUnitPt( width ) );
+ height = fmt->height();
+ m_ascent = fmt->ascent();
+ //kdDebug(32500) << "KoVariable::resize text=" << txt << " width=" << width << " height=" << height << " ascent=" << m_ascent << endl;
+}
+
+void KoVariable::recalcAndRepaint()
+{
+ recalc();
+ KoTextParag * parag = paragraph();
+ if ( parag )
+ {
+ //kdDebug(32500) << "KoVariable::recalcAndRepaint -> invalidating parag " << parag->paragId() << endl;
+ parag->invalidate( 0 );
+ parag->setChanged( true );
+ }
+ textDocument()->emitRepaintChanged();
+}
+
+QString KoVariable::fieldCode()
+{
+ return i18n("Variable");
+}
+
+QString KoVariable::text(bool realValue)
+{
+ KoTextFormat *fmt = format();
+ QString str;
+ if (m_varColl->variableSetting()->displayFieldCode()&&!realValue)
+ str = fieldCode();
+ else
+ str = m_varFormat->convert( m_varValue );
+
+ return fmt->displayedString( str);
+}
+
+void KoVariable::drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int /*cx*/, int /*cy*/, int /*cw*/, int /*ch*/, const QColorGroup& cg, bool selected, int offset, bool drawingShadow )
+{
+ KoTextFormat * fmt = format();
+ KoTextZoomHandler * zh = textDocument()->paintingZoomHandler();
+ QFont font( fmt->screenFont( zh ) );
+ drawCustomItemHelper( p, x, y, wpix, hpix, ascentpix, cg, selected, offset, fmt, font, fmt->color(), drawingShadow );
+}
+
+void KoVariable::drawCustomItemHelper( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, const QColorGroup& cg, bool selected, int offset, KoTextFormat* fmt, const QFont& font, QColor textColor, bool drawingShadow )
+{
+ // Important: the y value already includes the difference between the parag baseline
+ // and the char's own baseline (ascent) (see paintDefault in korichtext.cpp)
+ // So we just draw the text there. But we need the baseline for drawFontEffects...
+ KoTextZoomHandler * zh = textDocument()->paintingZoomHandler();
+
+ p->save();
+
+ if ( fmt->textBackgroundColor().isValid() )
+ p->fillRect( x, y, wpix, hpix, fmt->textBackgroundColor() );
+
+ if ( drawingShadow ) // Use shadow color if drawing a shadow
+ {
+ textColor = fmt->shadowColor();
+ p->setPen( textColor );
+ }
+ else if ( selected )
+ {
+ textColor = cg.color( QColorGroup::HighlightedText );
+ p->setPen( QPen( textColor ) );
+ p->fillRect( x, y, wpix, hpix, cg.color( QColorGroup::Highlight ) );
+ }
+ else if ( textDocument() && textDocument()->drawFormattingChars()
+ && p->device()->devType() != QInternal::Printer )
+ {
+ textColor = cg.color( QColorGroup::Highlight );
+ p->setPen( QPen ( textColor, 0, Qt::DotLine ) );
+ p->drawRect( x, y, wpix, hpix );
+ }
+ else {
+ if ( !textColor.isValid() ) // Resolve the color at this point
+ textColor = KoTextFormat::defaultTextColor( p );
+ p->setPen( QPen( textColor ) );
+ }
+
+ p->setFont( font ); // already done by KoTextCustomItem::draw but someone might
+ // change the font passed to drawCustomItemHelper (e.g. KoLinkVariable)
+ QString str = text();
+ KoTextParag::drawFontEffects( p, fmt, zh, font, textColor, x, ascentpix, wpix, y, hpix, str[0] );
+ int posY = y + ascentpix + offset;
+ if ( fmt->vAlign() == KoTextFormat::AlignSubScript )
+ posY +=p->fontMetrics().height() / 6;
+ if ( fmt->vAlign() != KoTextFormat::AlignSuperScript )
+ posY -= fmt->offsetFromBaseLine();
+ else if ( fmt->offsetFromBaseLine() < 0 )
+ posY -= 2*fmt->offsetFromBaseLine();
+
+ //p->drawText( x, posY, str );
+ // We can't just drawText, it wouldn't use the same kerning as the one
+ // that resize() planned for [which is zoom-independent].
+ // We need to do the layout using layout units instead, so for simplicity
+ // I just draw every char individually (whereas KoTextFormatter/KoTextParag
+ // detect runs of text that can be drawn together)
+ const int len = str.length();
+ int xLU = zh->pixelToLayoutUnitX( x );
+ QFontMetrics fm = fmt->refFontMetrics();
+ for ( int i = 0; i < len; ++i )
+ {
+ const QChar ch = str[i];
+ p->drawText( x, posY, ch );
+ // Do like KoTextFormatter: do the layout in layout units.
+ xLU += KoTextZoomHandler::ptToLayoutUnitPt( fm.width( ch ) );
+ // And then compute the X position in pixels from the layout unit X.
+ x = zh->layoutUnitToPixelX( xLU );
+ }
+
+ p->restore();
+}
+
+void KoVariable::save( QDomElement &parentElem )
+{
+ //kdDebug(32500) << "KoVariable::save" << endl;
+ QDomElement variableElem = parentElem.ownerDocument().createElement( "VARIABLE" );
+ parentElem.appendChild( variableElem );
+ QDomElement typeElem = parentElem.ownerDocument().createElement( "TYPE" );
+ variableElem.appendChild( typeElem );
+ typeElem.setAttribute( "type", static_cast<int>( type() ) );
+
+ //// Of course, saving the key is ugly. We'll drop this when
+ //// switching to the OO format.
+ typeElem.setAttribute( "key", m_varFormat->key() );
+ typeElem.setAttribute( "text", text(true) );
+ if ( correctValue() != 0)
+ typeElem.setAttribute( "correct", correctValue() );
+ saveVariable( variableElem );
+}
+
+void KoVariable::load( QDomElement & )
+{
+}
+
+
+void KoVariable::loadOasis( const QDomElement &/*elem*/, KoOasisContext& /*context*/ )
+{
+ // nothing to do here, reimplemented in subclasses (make it pure virtual?)
+}
+
+void KoVariable::saveOasis( KoXmlWriter& /*writer*/, KoSavingContext& /*context*/ ) const
+{
+}
+
+void KoVariable::setVariableFormat( KoVariableFormat *_varFormat )
+{
+ // TODO if ( _varFormat ) _varFormat->deref();
+ m_varFormat = _varFormat;
+ // TODO m_varFormat->ref();
+}
+
+#define addText( text, newFormat ) { \
+ if ( !text.isEmpty() ) \
+ { \
+ newFormat +=text; \
+ text=""; \
+ } \
+}
+
+QString KoVariable::convertKlocaleToQDateTimeFormat( const QString & _format )
+{
+ QString newFormat;
+ QString format( _format );
+ QString text;
+ do
+ {
+ if ( format.startsWith( "%Y" ) )
+ {
+ addText( text, newFormat );
+ newFormat+="yyyy";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%y" ) )
+ {
+ addText( text, newFormat );
+ newFormat+="yyyy";
+
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%n" ) )
+ {
+ addText( text, newFormat );
+ newFormat+="M";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%m" ) )
+ {
+ addText( text, newFormat );
+ newFormat+="MM";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%e" ) )
+ {
+ addText( text, newFormat );
+ newFormat+="d";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%d" ) )
+ {
+ addText( text, newFormat );
+ newFormat+="dd";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%b" ) )
+ {
+ addText( text, newFormat );
+ newFormat+="MMM";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%B" ) )
+ {
+ addText( text, newFormat );
+ newFormat+="MMMM";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%a" ) )
+ {
+ addText( text, newFormat );
+ newFormat+="ddd";
+
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%A" ) )
+ {
+ addText( text, newFormat );
+ newFormat+="dddd";
+ format = format.remove( 0, 2 );
+ }
+ if ( format.startsWith( "%H" ) ) //hh
+ {
+ //hour in 24h
+ addText( text, newFormat );
+ newFormat+="hh";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%k" ) )//h
+ {
+ addText( text, newFormat );
+ newFormat+="h";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%I" ) )// ?????
+ {
+ addText( text, newFormat );
+ //TODO hour in 12h
+ }
+ else if ( format.startsWith( "%l" ) )
+ {
+ addText( text, newFormat );
+ //TODO hour in 12h with 1 digit
+ }
+ else if ( format.startsWith( "%M" ) )// mm
+ {
+ addText( text, newFormat );
+ newFormat+="mm";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%S" ) ) //ss
+ {
+ addText( text, newFormat );
+ newFormat+="ss";
+ format = format.remove( 0, 2 );
+ }
+ else if ( format.startsWith( "%p" ) )
+ {
+ //TODO am or pm
+ addText( text, newFormat );
+ newFormat+="ap";
+ format = format.remove( 0, 2 );
+ }
+
+ else
+ {
+ text += format[0];
+ format = format.remove( 0, 1 );
+ }
+ }
+ while ( format.length() > 0 );
+ addText( text, format );
+ return format;
+}
+
+
+/******************************************************************/
+/* Class: KoDateVariable */
+/******************************************************************/
+KoDateVariable::KoDateVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *_varFormat, KoVariableCollection *_varColl, int _correctDate)
+ : KoVariable( textdoc, _varFormat,_varColl ), m_subtype( subtype ), m_correctDate( _correctDate)
+{
+}
+
+QString KoDateVariable::fieldCode()
+{
+ if ( m_subtype == VST_DATE_FIX )
+ return i18n("Date (Fixed)");
+ else if ( m_subtype == VST_DATE_CURRENT)
+ return i18n("Date");
+ else if ( m_subtype == VST_DATE_LAST_PRINTING)
+ return i18n("Last Printing");
+ else if ( m_subtype == VST_DATE_CREATE_FILE )
+ return i18n( "File Creation");
+ else if ( m_subtype == VST_DATE_MODIFY_FILE )
+ return i18n( "File Modification");
+ else
+ return i18n("Date");
+}
+
+void KoDateVariable::resize()
+{
+ KoTextFormat * fmt = format();
+ QString oldLanguage;
+ if ( !fmt->language().isEmpty())
+ {
+ oldLanguage=KGlobal::locale()->language();
+ bool changeLanguage = KGlobal::locale()->setLanguage( fmt->language() );
+ KoVariable::resize();
+ if ( changeLanguage )
+ KGlobal::locale()->setLanguage( oldLanguage );
+ }
+ else
+ KoVariable::resize();
+}
+
+void KoDateVariable::recalc()
+{
+ if ( m_subtype == VST_DATE_CURRENT )
+ m_varValue = QDateTime::currentDateTime().addDays(m_correctDate);
+ else if ( m_subtype == VST_DATE_LAST_PRINTING )
+ m_varValue = m_varColl->variableSetting()->lastPrintingDate();
+ else if ( m_subtype == VST_DATE_CREATE_FILE )
+ m_varValue = m_varColl->variableSetting()->creationDate();
+ else if ( m_subtype == VST_DATE_MODIFY_FILE )
+ m_varValue = m_varColl->variableSetting()->modificationDate();
+ else
+ {
+ // Only if never set before (i.e. upon insertion)
+ if ( m_varValue.isNull() )
+ m_varValue = QDateTime::currentDateTime().addDays(m_correctDate);
+ }
+ resize();
+}
+
+void KoDateVariable::saveVariable( QDomElement& varElem )
+{
+ QDomElement elem = varElem.ownerDocument().createElement( "DATE" );
+ varElem.appendChild( elem );
+
+ QDate date = m_varValue.toDate(); // works with Date and DateTime
+ date = date.addDays( -m_correctDate );//remove correctDate value otherwise value stored is bad
+ elem.setAttribute( "year", date.year() );
+ elem.setAttribute( "month", date.month() );
+ elem.setAttribute( "day", date.day() );
+ elem.setAttribute( "fix", m_subtype == VST_DATE_FIX ); // for compat
+ elem.setAttribute( "correct", m_correctDate);
+ elem.setAttribute( "subtype", m_subtype);
+ if ( m_varValue.type() == QVariant::DateTime )
+ {
+ QTime time = m_varValue.toTime();
+ elem.setAttribute( "hour", time.hour() );
+ elem.setAttribute( "minute", time.minute() );
+ elem.setAttribute( "second", time.second() );
+ }
+}
+
+void KoDateVariable::load( QDomElement& elem )
+{
+ KoVariable::load( elem );
+
+ QDomElement e = elem.namedItem( "DATE" ).toElement();
+ if (!e.isNull())
+ {
+ const bool fix = e.attribute("fix").toInt() == 1;
+ if ( e.hasAttribute("correct"))
+ m_correctDate = e.attribute("correct").toInt();
+ if ( fix )
+ {
+ const int y = e.attribute("year").toInt();
+ const int month = e.attribute("month").toInt();
+ const int d = e.attribute("day").toInt();
+ const int h = e.attribute("hour").toInt();
+ const int min = e.attribute("minute").toInt();
+ const int s = e.attribute("second").toInt();
+ const int ms = e.attribute("msecond").toInt();
+ QDate date( y, month, d );
+ date = date.addDays( m_correctDate );
+ const QTime time( h, min, s, ms );
+ if (time.isValid())
+ m_varValue = QVariant ( QDateTime( date, time ) );
+ else
+ m_varValue = QVariant( date );
+ }
+ //old date variable format
+ m_subtype = fix ? VST_DATE_FIX : VST_DATE_CURRENT;
+ if ( e.hasAttribute( "subtype" ))
+ m_subtype = e.attribute( "subtype").toInt();
+ }
+}
+
+void KoDateVariable::saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const
+{
+ switch( m_subtype )
+ {
+ case VST_DATE_FIX:
+ case VST_DATE_CURRENT:
+ writer.startElement( "text:date" );
+ if ( m_subtype == VST_DATE_FIX )
+ {
+ writer.addAttribute( "text:date-value", m_varValue.toDate().toString( Qt::ISODate) );
+ writer.addAttribute( "text:fixed", "true" );
+ }
+ break;
+ case VST_DATE_LAST_PRINTING:
+ writer.startElement( "text:print-date" );
+ break;
+ case VST_DATE_CREATE_FILE:
+ writer.startElement( "text:creation-date" );
+ break;
+ case VST_DATE_MODIFY_FILE:
+ writer.startElement( "text:modification-date" );
+ break;
+ }
+ QString value( m_varFormat->formatProperties() );
+ bool klocaleFormat = false;
+ if ( value.lower() == "locale" ||
+ value.isEmpty() ||
+ value.lower() == "localeshort" ||
+ value.lower() == "localedatetime" ||
+ value.lower() == "localedatetimeshort" )
+ {
+ if ( value.lower() == "locale" || value.isEmpty())
+ value = KGlobal::locale()->dateFormat();
+ else if ( value.lower() == "localeshort" )
+ value = KGlobal::locale()->dateFormatShort();
+ else if ( value.lower() == "localedatetime" )
+ value = QString( "%1 %2" ).arg( KGlobal::locale()->dateFormat() ).arg( KGlobal::locale()->timeFormat() );
+ else if ( value.lower() == "localedatetimeshort" )
+ value = QString( "%1 %2" ).arg( KGlobal::locale()->dateFormatShort() ).arg( KGlobal::locale()->timeFormat() );
+ klocaleFormat = true;
+ }
+ writer.addAttribute( "style:data-style-name", KoOasisStyles::saveOasisDateStyle(context.mainStyles(), value, klocaleFormat ) );
+
+ if ( m_correctDate != 0 )
+ writer.addAttribute( "text:date-adjust", daysToISODuration( m_correctDate ) );
+ writer.endElement();
+}
+
+void KoDateVariable::loadOasis( const QDomElement &elem, KoOasisContext& /*context*/ )
+{
+ const QString localName( elem.localName() );
+ if ( localName == "date" ) // current (or fixed) date
+ {
+ // Standard form of the date is in text:date-value. Example: 2004-01-21T10:57:05
+ const QString dateValue = elem.attributeNS( KoXmlNS::text, "date-value", QString::null);
+ QDateTime dt;
+ if ( !dateValue.isEmpty() ) // avoid QDate warning
+ dt = QDate::fromString(dateValue, Qt::ISODate);
+
+ bool fixed = (elem.hasAttributeNS( KoXmlNS::text, "fixed") && elem.attributeNS( KoXmlNS::text, "fixed", QString::null)=="true");
+ if (!dt.isValid())
+ fixed = false; // OOo docs say so: not valid = current datetime
+ if ( fixed )
+ m_varValue = QVariant( dt );
+ m_subtype = fixed ? VST_DATE_FIX : VST_DATE_CURRENT;
+ }
+ // For all those the value of the date will be retrieved from meta.xml
+ else if ( localName.startsWith( "print" ) )
+ m_subtype = VST_DATE_LAST_PRINTING;
+ else if ( localName.startsWith( "creation" ) )
+ m_subtype = VST_DATE_CREATE_FILE;
+ else if ( localName.startsWith( "modification" ) )
+ m_subtype = VST_DATE_MODIFY_FILE;
+ const QString adjustStr = elem.attributeNS( KoXmlNS::text, "date-adjust", QString::null );
+ if ( !adjustStr.isEmpty() )
+ m_correctDate = ISODurationToDays( adjustStr );
+}
+
+QStringList KoDateVariable::actionTexts()
+{
+ QStringList lst;
+ lst << i18n( "Current Date (fixed)" );
+ lst << i18n( "Current Date (variable)" );
+ lst << i18n( "Date of Last Printing" );
+ lst << i18n( "Date of File Creation" );
+ lst << i18n( "Date of File Modification" );
+ return lst;
+}
+
+QStringList KoDateVariable::subTypeList()
+{
+ return KoDateVariable::actionTexts();
+}
+
+QCString KoDateVariable::defaultFormat()
+{
+ return QCString("DATE") + "locale";
+}
+
+QCString KoDateVariable::formatStr(int & correct)
+{
+ QCString string;
+ QStringList stringList;
+ KDialogBase* dialog=new KDialogBase(0, 0, true, i18n("Date Format"), KDialogBase::Ok|KDialogBase::Cancel);
+ DateFormatWidget* widget=new DateFormatWidget(dialog);
+ int count=0;
+ dialog->setMainWidget(widget);
+ KConfig* config = KoGlobal::kofficeConfig();
+ if( config->hasGroup("Date format history") )
+ {
+ KConfigGroupSaver cgs( config, "Date format history");
+ const int noe=config->readNumEntry("Number Of Entries", 5);
+ for(int i=0;i<noe;i++)
+ {
+ QString num;
+ num.setNum(i);
+ const QString tmpString(config->readEntry("Last Used"+num));
+ if(tmpString.startsWith("locale"))
+ continue;
+ else if(stringList.contains(tmpString))
+ continue;
+ else if(!tmpString.isEmpty())
+ {
+ stringList.append(tmpString);
+ count++;
+ }
+ }
+
+ }
+ if(!stringList.isEmpty())
+ {
+ widget->combo1->insertItem("---");
+ widget->combo1->insertStringList(stringList);
+ }
+ if(false) { // ### TODO: select the last used item
+ QComboBox *combo= widget->combo1;
+ combo->setCurrentItem(combo->count() -1);
+ widget->updateLabel();
+ }
+
+ if(dialog->exec()==QDialog::Accepted)
+ {
+ string = widget->resultString().utf8();
+ correct = widget->correctValue();
+ }
+ else
+ {
+ delete dialog;
+ return 0;
+ }
+ config->setGroup("Date format history");
+ stringList.remove(string);
+ stringList.prepend(string);
+ for(int i=0;i<=count;i++)
+ {
+ QString num;
+ num.setNum(i);
+ config->writeEntry("Last Used"+num, stringList[i]);
+ }
+ config->sync();
+ delete dialog;
+ return QCString("DATE") + string;
+}
+
+/******************************************************************/
+/* Class: KoTimeVariable */
+/******************************************************************/
+KoTimeVariable::KoTimeVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat, KoVariableCollection *_varColl, int _correct)
+ : KoVariable( textdoc, varFormat,_varColl ), m_subtype( subtype ), m_correctTime( _correct)
+{
+}
+
+QString KoTimeVariable::fieldCode()
+{
+ return (m_subtype == VST_TIME_FIX)?i18n("Time (Fixed)"):i18n("Time");
+}
+
+
+void KoTimeVariable::resize()
+{
+ KoTextFormat * fmt = format();
+ if ( !fmt->language().isEmpty() )
+ {
+ QString oldLanguage = KGlobal::locale()->language();
+ bool changeLanguage = KGlobal::locale()->setLanguage( fmt->language() );
+ KoVariable::resize();
+ if ( changeLanguage )
+ KGlobal::locale()->setLanguage( oldLanguage );
+ }
+ else
+ KoVariable::resize();
+}
+
+void KoTimeVariable::recalc()
+{
+ if ( m_subtype == VST_TIME_CURRENT )
+ m_varValue = QVariant( QTime::currentTime().addSecs(60*m_correctTime));
+ else
+ {
+ // Only if never set before (i.e. upon insertion)
+ if ( m_varValue.toTime().isNull() )
+ m_varValue = QVariant( QTime::currentTime().addSecs(60*m_correctTime));
+ }
+ resize();
+}
+
+
+void KoTimeVariable::saveVariable( QDomElement& parentElem )
+{
+ QDomElement elem = parentElem.ownerDocument().createElement( "TIME" );
+ parentElem.appendChild( elem );
+
+ QTime time = m_varValue.toTime();
+ time = time.addSecs(-60*m_correctTime);
+ elem.setAttribute( "hour", time.hour() );
+ elem.setAttribute( "minute", time.minute() );
+ elem.setAttribute( "second", time.second() );
+ elem.setAttribute( "msecond", time.msec() );
+ elem.setAttribute( "fix", m_subtype == VST_TIME_FIX );
+ elem.setAttribute( "correct", m_correctTime );
+}
+
+void KoTimeVariable::load( QDomElement& elem )
+{
+ KoVariable::load( elem );
+
+ QDomElement e = elem.namedItem( "TIME" ).toElement();
+ if (!e.isNull())
+ {
+ int h = e.attribute("hour").toInt();
+ int m = e.attribute("minute").toInt();
+ int s = e.attribute("second").toInt();
+ int ms = e.attribute("msecond").toInt();
+ int correct = 0;
+ if ( e.hasAttribute("correct"))
+ correct=e.attribute("correct").toInt();
+ bool fix = static_cast<bool>( e.attribute("fix").toInt() );
+ if ( fix )
+ {
+ QTime time;
+ time.setHMS( h, m, s, ms );
+ time = time.addSecs( 60*m_correctTime );
+ m_varValue = QVariant( time);
+
+ }
+ m_subtype = fix ? VST_TIME_FIX : VST_TIME_CURRENT;
+ m_correctTime = correct;
+ }
+}
+
+void KoTimeVariable::loadOasis( const QDomElement &elem, KoOasisContext& /*context*/ )
+{
+ const QString localName( elem.localName() );
+ Q_ASSERT( localName == "time" ); // caller checked for it
+ if ( localName == "time" ) // current (or fixed) time
+ {
+ // Use QDateTime to work around a possible problem of QTime::fromString in Qt 3.2.2
+ QDateTime dt(QDateTime::fromString(elem.attributeNS( KoXmlNS::text, "time-value", QString::null), Qt::ISODate));
+
+ bool fixed = (elem.hasAttributeNS( KoXmlNS::text, "fixed") && elem.attributeNS( KoXmlNS::text, "fixed", QString::null)=="true");
+ if (!dt.isValid())
+ fixed = false; // OOo docs say so: not valid = current datetime
+ if ( fixed )
+ m_varValue = QVariant( dt.time() );
+ m_subtype = fixed ? VST_TIME_FIX : VST_TIME_CURRENT;
+ QString adjustStr = elem.attributeNS( KoXmlNS::text, "time-adjust", QString::null );
+ if ( !adjustStr.isEmpty() )
+ m_correctTime = ISODurationToMinutes( adjustStr );
+ }
+}
+
+void KoTimeVariable::saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const
+{
+ writer.startElement( "text:time" );
+ if ( m_correctTime != 0 ) {
+ writer.addAttribute( "text:time-adjust", minutesToISODuration( m_correctTime ) );
+ }
+ if (m_subtype == VST_TIME_FIX )
+ {
+ writer.addAttribute( "text:fixed", "true" );
+ writer.addAttribute( "text:time-value", m_varValue.toTime().toString( Qt::ISODate ) );
+ }
+
+ QString value( m_varFormat->formatProperties() );
+ bool klocaleFormat = false;
+ if ( value.lower() == "locale" )
+ {
+ value = KGlobal::locale()->timeFormat();
+ klocaleFormat = true;
+ }
+ writer.addAttribute( "style:data-style-name", KoOasisStyles::saveOasisTimeStyle(context.mainStyles(), m_varFormat->formatProperties(), klocaleFormat ) );
+ //writer.addTextNode( /*value*/ value displayed as texte );
+ //TODO save text value
+ //<text:time style:data-style-name="N43" text:time-value="2004-11-11T14:42:19" text:fixed="true">02:42:19 PM</text:time>
+ writer.endElement();
+}
+
+
+QStringList KoTimeVariable::actionTexts()
+{
+ QStringList lst;
+ lst << i18n( "Current Time (fixed)" );
+ lst << i18n( "Current Time (variable)" );
+ return lst;
+}
+
+QStringList KoTimeVariable::subTypeList()
+{
+ return KoTimeVariable::actionTexts();
+}
+
+QCString KoTimeVariable::formatStr(int & _correct)
+{
+ QCString string;
+ QStringList stringList;
+ KDialogBase* dialog=new KDialogBase(0, 0, true, i18n("Time Format"), KDialogBase::Ok|KDialogBase::Cancel);
+ TimeFormatWidget* widget=new TimeFormatWidget(dialog);
+ dialog->setMainWidget(widget);
+ KConfig* config = KoGlobal::kofficeConfig();
+ int count=0;
+ if( config->hasGroup("Time format history") )
+ {
+ KConfigGroupSaver cgs( config, "Time format history" );
+ const int noe=config->readNumEntry("Number Of Entries", 5);
+ for(int i=0;i<noe;i++)
+ {
+ QString num;
+ num.setNum(i);
+ QString tmpString(config->readEntry("Last Used"+num));
+ if(tmpString.startsWith("locale"))
+ continue;
+ else if(stringList.contains(tmpString))
+ continue;
+ else if(!tmpString.isEmpty())
+ {
+ stringList.append(tmpString);
+ count++;
+ }
+ }
+ }
+ if(!stringList.isEmpty())
+ {
+ widget->combo1->insertItem("---");
+ widget->combo1->insertStringList(stringList);
+ }
+ if(false) // ### TODO: select the last used item
+ {
+ QComboBox *combo= widget->combo1;
+ combo->setCurrentItem(combo->count() -1);
+ }
+ if(dialog->exec()==QDialog::Accepted)
+ {
+ string = widget->resultString().utf8();
+ _correct = widget->correctValue();
+ }
+ else
+ {
+ delete dialog;
+ return 0;
+ }
+ config->setGroup("Time format history");
+ stringList.remove(string);
+ stringList.prepend(string);
+ for(int i=0;i<=count;i++)
+ {
+ QString num;
+ num.setNum(i);
+ config->writeEntry("Last Used"+num, stringList[i]);
+ }
+ config->sync();
+ delete dialog;
+ return QCString("TIME"+string );
+}
+
+QCString KoTimeVariable::defaultFormat()
+{
+ return QCString(QCString("TIME")+QCString("locale") );
+}
+
+
+/******************************************************************/
+/* Class: KoCustomVariable */
+/******************************************************************/
+KoCustomVariable::KoCustomVariable( KoTextDocument *textdoc, const QString &name, KoVariableFormat *varFormat, KoVariableCollection *_varColl )
+ : KoVariable( textdoc, varFormat,_varColl )
+{
+ m_varValue = QVariant( name );
+}
+
+QString KoCustomVariable::fieldCode()
+{
+ return i18n("Custom Variable");
+}
+
+QString KoCustomVariable::text(bool realValue)
+{
+ if (m_varColl->variableSetting()->displayFieldCode()&&!realValue)
+ return fieldCode();
+ else
+ return value();
+} // use a format when they are customizable
+
+
+
+void KoCustomVariable::saveVariable( QDomElement& parentElem )
+{
+ QDomElement elem = parentElem.ownerDocument().createElement( "CUSTOM" );
+ parentElem.appendChild( elem );
+ elem.setAttribute( "name", m_varValue.toString() );
+ elem.setAttribute( "value", value() );
+}
+
+void KoCustomVariable::load( QDomElement& elem )
+{
+ KoVariable::load( elem );
+ QDomElement e = elem.namedItem( "CUSTOM" ).toElement();
+ if (!e.isNull())
+ {
+ m_varValue = QVariant (e.attribute( "name" ));
+ setValue( e.attribute( "value" ) );
+ }
+}
+
+void KoCustomVariable::loadOasis( const QDomElement &elem, KoOasisContext& /*context*/ )
+{
+ const QString localName( elem.localName() );
+ // We treat all those the same. For OO/OpenDocument the difference is that
+ // - user-field-get is related to text:user-field-decls in <body>
+ // - variable-set is related to variable-decls (defined in <body>);
+ // its value can change in the middle of the document.
+ // - user-defined is related to meta:user-defined in meta.xml
+ if ( localName == "variable-set"
+ || localName == "user-defined"
+ || localName == "user-field-get" ) {
+ m_varValue = elem.attributeNS( KoXmlNS::text, "name", QString::null );
+ setValue( elem.text() );
+ }
+}
+
+void KoCustomVariable::saveOasis( KoXmlWriter& writer, KoSavingContext& /*context*/ ) const
+{
+ //TODO save value into meta:user-defined
+ writer.startElement( "text:user-field-get" ); //see 6.3.6
+ writer.addAttribute( "text:name", m_varValue.toString() );
+ writer.addTextNode( value() );
+ writer.endElement();
+}
+
+QString KoCustomVariable::value() const
+{
+ return m_varColl->getVariableValue( m_varValue.toString() );
+}
+
+void KoCustomVariable::setValue( const QString &v )
+{
+ m_varColl->setVariableValue( m_varValue.toString(), v );
+}
+
+QStringList KoCustomVariable::actionTexts()
+{
+ return QStringList( i18n( "Custom..." ) );
+}
+
+void KoCustomVariable::recalc()
+{
+ resize();
+}
+
+/******************************************************************/
+/* Class: KoMailMergeVariable */
+/******************************************************************/
+KoMailMergeVariable::KoMailMergeVariable( KoTextDocument *textdoc, const QString &name, KoVariableFormat *varFormat,KoVariableCollection *_varColl )
+ : KoVariable( textdoc, varFormat, _varColl )
+{
+ m_varValue = QVariant ( name );
+}
+
+QString KoMailMergeVariable::fieldCode()
+{
+ return i18n("Mail Merge");
+}
+
+void KoMailMergeVariable::loadOasis( const QDomElement &/*elem*/, KoOasisContext& /*context*/ )
+{
+ // TODO
+}
+
+void KoMailMergeVariable::saveOasis( KoXmlWriter& /*writer*/, KoSavingContext& /*context*/ ) const
+{
+ kdWarning(32500) << "Not implemented: OASIS saving of mail merge variables" << endl;
+}
+
+
+
+void KoMailMergeVariable::saveVariable( QDomElement& parentElem )
+{
+ QDomElement elem = parentElem.ownerDocument().createElement( "MAILMERGE" );
+ parentElem.appendChild( elem );
+ elem.setAttribute( "name", m_varValue.toString() );
+}
+
+void KoMailMergeVariable::load( QDomElement& elem )
+{
+ KoVariable::load( elem );
+ QDomElement e = elem.namedItem( "MAILMERGE" ).toElement();
+ if (!e.isNull())
+ m_varValue = QVariant( e.attribute( "name" ) );
+}
+
+QString KoMailMergeVariable::value() const
+{
+ return QString();//m_doc->getMailMergeDataBase()->getValue( m_name );
+}
+
+QString KoMailMergeVariable::text(bool /*realValue*/)
+{
+ // ## should use a format maybe
+ QString v = value();
+ if ( v == name() )
+ return "<" + v + ">";
+ return v;
+}
+
+QStringList KoMailMergeVariable::actionTexts()
+{
+ return QStringList( i18n( "&Mail Merge..." ) );
+}
+
+/******************************************************************/
+/* Class: KoPageVariable */
+/******************************************************************/
+KoPageVariable::KoPageVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat,KoVariableCollection *_varColl )
+ : KoVariable( textdoc, varFormat, _varColl ), m_subtype( subtype )
+{
+}
+
+QString KoPageVariable::fieldCode()
+{
+ if ( m_subtype == VST_PGNUM_CURRENT )
+ return i18n("Page Current Num");
+ else if ( m_subtype == VST_PGNUM_TOTAL )
+ return i18n("Total Page Num");
+ else if ( m_subtype == VST_CURRENT_SECTION )
+ return i18n("Current Section");
+ else if ( m_subtype == VST_PGNUM_PREVIOUS )
+ return i18n("Previous Page Number");
+ else if ( m_subtype == VST_PGNUM_NEXT )
+ return i18n("Next Page Number");
+
+ else
+ return i18n("Current Section");
+}
+
+
+void KoPageVariable::saveVariable( QDomElement& parentElem )
+{
+ QDomElement pgNumElem = parentElem.ownerDocument().createElement( "PGNUM" );
+ parentElem.appendChild( pgNumElem );
+ pgNumElem.setAttribute( "subtype", m_subtype );
+ if ( m_subtype != VST_CURRENT_SECTION )
+ pgNumElem.setAttribute( "value", m_varValue.toInt() );
+ else
+ pgNumElem.setAttribute( "value", m_varValue.toString() );
+}
+
+void KoPageVariable::load( QDomElement& elem )
+{
+ KoVariable::load( elem );
+ QDomElement pgNumElem = elem.namedItem( "PGNUM" ).toElement();
+ if (!pgNumElem.isNull())
+ {
+ m_subtype = pgNumElem.attribute("subtype").toInt();
+ // ### This could use the format...
+ if ( m_subtype != VST_CURRENT_SECTION )
+ m_varValue = QVariant(pgNumElem.attribute("value").toInt());
+ else
+ m_varValue = QVariant(pgNumElem.attribute("value"));
+ }
+}
+
+void KoPageVariable::saveOasis( KoXmlWriter& writer, KoSavingContext& /*context*/ ) const
+{
+ switch( m_subtype )
+ {
+ case VST_PGNUM_PREVIOUS:
+ case VST_PGNUM_NEXT:
+ case VST_PGNUM_CURRENT:
+ {
+ writer.startElement( "text:page-number" );
+ if ( m_subtype == VST_PGNUM_PREVIOUS )
+ {
+ writer.addAttribute( "text:select-page", "previous" );
+ }
+ else if ( m_subtype == VST_PGNUM_NEXT )
+ {
+ writer.addAttribute( "text:select-page", "next" );
+ }
+ else if ( m_subtype == VST_PGNUM_CURRENT )
+ {
+ writer.addAttribute( "text:select-page", "current" );
+ }
+ writer.addTextNode( m_varValue.toString() );
+ writer.endElement();
+ }
+ break;
+ case VST_CURRENT_SECTION:
+ {
+ writer.startElement( "text:chapter" );
+ writer.addTextNode( m_varValue.toString() );
+ writer.endElement();
+ }
+ break;
+ case VST_PGNUM_TOTAL:
+ {
+ writer.startElement( "text:page-count" );
+ writer.addTextNode( m_varValue.toString() );
+ writer.endElement();
+ }
+ break;
+ }
+}
+
+void KoPageVariable::loadOasis( const QDomElement &elem, KoOasisContext& /*context*/ )
+{
+ const QString localName( elem.localName() );
+ if ( localName == "page-number" )
+ {
+ m_subtype = VST_PGNUM_CURRENT;
+
+ if ( elem.hasAttributeNS( KoXmlNS::text, "select-page") )
+ {
+ const QString select = elem.attributeNS( KoXmlNS::text, "select-page", QString::null);
+ if (select == "previous")
+ m_subtype = VST_PGNUM_PREVIOUS;
+ else if (select == "next")
+ m_subtype = VST_PGNUM_NEXT;
+ }
+ // Missing: fixed, page adjustment, formatting style
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ else if ( localName == "chapter" )
+ {
+ m_subtype = VST_CURRENT_SECTION;
+ m_varValue = QVariant( elem.text() );
+ // text:display attribute can be name, number (i.e. with prefix/suffix),
+ // number-and-name, plain-number-and-name, plain-number
+ // TODO: a special format class for this, so that it can be easily switched using the RMB
+ }
+ else if ( localName == "page-count" )
+ {
+ m_subtype = VST_PGNUM_TOTAL;
+ m_varValue = QVariant( elem.text() );
+ }
+}
+
+QStringList KoPageVariable::actionTexts()
+{
+ QStringList lst;
+ lst << i18n( "Page Number" );
+ lst << i18n( "Number of Pages" );
+ lst << i18n( "Section Title" );
+ lst << i18n( "Previous Page" );
+ lst << i18n( "Next Page" );
+ return lst;
+}
+
+QStringList KoPageVariable::subTypeList()
+{
+ return KoPageVariable::actionTexts();
+}
+
+void KoPageVariable::setVariableSubType( short int type )
+{
+ m_subtype = type;
+ Q_ASSERT( m_varColl );
+ KoVariableFormatCollection* fc = m_varColl->formatCollection();
+ setVariableFormat((m_subtype == VST_CURRENT_SECTION) ? fc->format("STRING") : fc->format("NUMBER"));
+}
+
+/******************************************************************/
+/* Class: KoFieldVariable */
+/******************************************************************/
+KoFieldVariable::KoFieldVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat, KoVariableCollection *_varColl ,KoDocument *_doc )
+ : KoVariable( textdoc, varFormat,_varColl ), m_subtype( subtype ), m_doc(_doc)
+{
+}
+
+QString KoFieldVariable::fieldCode()
+{
+ switch( m_subtype ) {
+ case VST_FILENAME:
+ return i18n("Filename");
+ break;
+ case VST_DIRECTORYNAME:
+ return i18n("Directory Name");
+ break;
+ case VST_PATHFILENAME:
+ return i18n("Path Filename");
+ break;
+ case VST_FILENAMEWITHOUTEXTENSION:
+ return i18n("Filename Without Extension");
+ break;
+ case VST_AUTHORNAME:
+ return i18n("Author Name");
+ break;
+ case VST_EMAIL:
+ return i18n("Email");
+ break;
+ case VST_COMPANYNAME:
+ return i18n("Company Name");
+ break;
+ case VST_TELEPHONE_WORK:
+ return i18n("Telephone (work)");
+ break;
+ case VST_TELEPHONE_HOME:
+ return i18n("Telephone (home)");
+ break;
+ case VST_FAX:
+ return i18n("Fax");
+ break;
+ case VST_COUNTRY:
+ return i18n("Country");
+ break;
+ case VST_POSTAL_CODE:
+ return i18n("Postal Code");
+ break;
+ case VST_CITY:
+ return i18n("City");
+ break;
+ case VST_STREET:
+ return i18n("Street");
+ break;
+ case VST_AUTHORTITLE:
+ return i18n("Author Title");
+ break;
+ case VST_TITLE:
+ return i18n("Title");
+ break;
+ case VST_SUBJECT:
+ return i18n("Subject");
+ break;
+ case VST_ABSTRACT:
+ return i18n("Abstract");
+ break;
+ case VST_KEYWORDS:
+ return i18n("Keywords");
+ break;
+ case VST_INITIAL:
+ return i18n("Initials");
+ break;
+ }
+ return i18n("Field");
+}
+
+QString KoFieldVariable::text(bool realValue)
+{
+ if (m_varColl->variableSetting()->displayFieldCode()&&!realValue)
+ return fieldCode();
+ else
+ return value();
+} // use a format when they are customizable
+
+
+void KoFieldVariable::saveVariable( QDomElement& parentElem )
+{
+ //kdDebug(32500) << "KoFieldVariable::saveVariable" << endl;
+ QDomElement elem = parentElem.ownerDocument().createElement( "FIELD" );
+ parentElem.appendChild( elem );
+ elem.setAttribute( "subtype", m_subtype );
+ elem.setAttribute( "value", m_varValue.toString() );
+}
+
+void KoFieldVariable::load( QDomElement& elem )
+{
+ KoVariable::load( elem );
+ QDomElement e = elem.namedItem( "FIELD" ).toElement();
+ if (!e.isNull())
+ {
+ m_subtype = e.attribute( "subtype" ).toInt();
+ if ( m_subtype == VST_NONE )
+ kdWarning() << "Field subtype of -1 found in the file !" << endl;
+ m_varValue = QVariant( e.attribute( "value" ) );
+ } else
+ kdWarning() << "FIELD element not found !" << endl;
+}
+
+void KoFieldVariable::loadOasis( const QDomElement &elem, KoOasisContext& /*context*/ )
+{
+ const QString localName( elem.localName() );
+ if ( localName == "file-name" ) {
+ const QString display = elem.attributeNS( KoXmlNS::text, "display", QString::null );
+ if (display == "path")
+ m_subtype = VST_DIRECTORYNAME;
+ else if (display == "name")
+ m_subtype = VST_FILENAMEWITHOUTEXTENSION;
+ else if (display == "name-and-extension")
+ m_subtype = VST_FILENAME;
+ else
+ m_subtype = VST_PATHFILENAME;
+ }
+ else if ( localName == "author-name" )
+ m_subtype = VST_AUTHORNAME;
+ else if ( localName == "author-initials" )
+ m_subtype = VST_INITIAL;
+ else if ( localName == "subject" )
+ m_subtype = VST_SUBJECT;
+ else if ( localName == "title" )
+ m_subtype = VST_TITLE;
+ else if ( localName == "description" )
+ m_subtype = VST_ABSTRACT;
+ else if ( localName == "keywords" )
+ m_subtype = VST_KEYWORDS;
+
+ else if ( localName == "sender-company" )
+ m_subtype = VST_COMPANYNAME;
+ else if ( localName == "sender-firstname" )
+ ; // ## This is different from author-name, but the notion of 'sender' is unclear...
+ else if ( localName == "sender-lastname" )
+ ; // ## This is different from author-name, but the notion of 'sender' is unclear...
+ else if ( localName == "sender-initials" )
+ ; // ## This is different from author-initials, but the notion of 'sender' is unclear...
+ else if ( localName == "sender-street" )
+ m_subtype = VST_STREET;
+ else if ( localName == "sender-country" )
+ m_subtype = VST_COUNTRY;
+ else if ( localName == "sender-postal-code" )
+ m_subtype = VST_POSTAL_CODE;
+ else if ( localName == "sender-city" )
+ m_subtype = VST_CITY;
+ else if ( localName == "sender-title" )
+ m_subtype = VST_AUTHORTITLE; // Small hack (it's supposed to be about the sender, not about the author)
+ else if ( localName == "sender-position" )
+ m_subtype = VST_AUTHORPOSITION;
+ else if ( localName == "sender-phone-private" )
+ m_subtype = VST_TELEPHONE_HOME;
+ else if ( localName == "sender-phone-work" )
+ m_subtype = VST_TELEPHONE_WORK;
+ else if ( localName == "sender-fax" )
+ m_subtype = VST_FAX;
+ else if ( localName == "sender-email" )
+ m_subtype = VST_EMAIL;
+
+ m_varValue = QVariant( elem.text() );
+}
+
+void KoFieldVariable::saveOasis( KoXmlWriter& writer, KoSavingContext& /*context*/ ) const
+{
+ switch( m_subtype )
+ {
+ case VST_NONE:
+ break;
+ case VST_FILENAME:
+ writer.startElement( "text:file-name" );
+ writer.addAttribute( "text:display", "name-and-extension" );
+ break;
+ case VST_DIRECTORYNAME:
+ writer.startElement( "text:file-name" );
+ writer.addAttribute( "text:display", "path" );
+ break;
+ case VST_AUTHORNAME:
+ writer.startElement( "text:author-name" );
+ break;
+ case VST_EMAIL:
+ writer.startElement("text:sender-email" );
+ break;
+ case VST_COMPANYNAME:
+ writer.startElement("text:sender-company" );
+ break;
+ case VST_PATHFILENAME:
+ writer.startElement("text:display" );
+ writer.addAttribute( "text:display", "pathfilename" ); // ???????? not define !
+ break;
+ case VST_FILENAMEWITHOUTEXTENSION:
+ writer.startElement("text:display" );
+ writer.addAttribute( "text:display", "name-and-extension" ); // ???????? not define !
+ break;
+ case VST_TELEPHONE_WORK:
+ writer.startElement("text:sender-phone-work" );
+ break;
+ case VST_TELEPHONE_HOME:
+ writer.startElement("text:sender-phone-private" );
+ break;
+ case VST_FAX:
+ writer.startElement("text:sender-fax" );
+ break;
+ case VST_COUNTRY:
+ writer.startElement("text:sender-country" );
+ break;
+ case VST_TITLE:
+ writer.startElement("text:title" );
+ break;
+ case VST_KEYWORDS:
+ writer.startElement("text:keywords" );
+ break;
+ case VST_SUBJECT:
+ writer.startElement("text:subject" );
+ break;
+ case VST_ABSTRACT:
+ writer.startElement("text:description" );
+ break;
+ case VST_POSTAL_CODE:
+ writer.startElement("text:sender-postal-code" );
+ break;
+ case VST_CITY:
+ writer.startElement("text:sender-city" );
+ break;
+ case VST_STREET:
+ writer.startElement("text:sender-street" );
+ break;
+ case VST_AUTHORTITLE:
+ writer.startElement("text:sender-title" );
+ break;
+ case VST_AUTHORPOSITION:
+ writer.startElement("text:sender-position" );
+ break;
+ case VST_INITIAL:
+ writer.startElement("text:author-initials" );
+ break;
+ }
+ writer.addTextNode( m_varValue.toString() );
+ writer.endElement();
+}
+
+void KoFieldVariable::recalc()
+{
+ QString value;
+ switch( m_subtype ) {
+ case VST_NONE:
+ kdWarning() << "KoFieldVariable::recalc() called with m_subtype = VST_NONE !" << endl;
+ break;
+ case VST_FILENAME:
+ value = m_doc->url().fileName();
+ break;
+ case VST_DIRECTORYNAME:
+ value = m_doc->url().directory();
+ break;
+ case VST_PATHFILENAME:
+ value=m_doc->url().path();
+ break;
+ case VST_FILENAMEWITHOUTEXTENSION:
+ {
+ QString file=m_doc->url().fileName();
+ int pos=file.findRev(".");
+ if(pos !=-1)
+ value=file.mid(0,pos);
+ else
+ value=file;
+ }
+ break;
+ case VST_AUTHORNAME:
+ case VST_EMAIL:
+ case VST_COMPANYNAME:
+ case VST_TELEPHONE_WORK:
+ case VST_TELEPHONE_HOME:
+ case VST_FAX:
+ case VST_COUNTRY:
+ case VST_POSTAL_CODE:
+ case VST_CITY:
+ case VST_STREET:
+ case VST_AUTHORTITLE:
+ case VST_AUTHORPOSITION:
+ case VST_INITIAL:
+ {
+ KoDocumentInfo * info = m_doc->documentInfo();
+ KoDocumentInfoAuthor * authorPage = static_cast<KoDocumentInfoAuthor *>(info->page( "author" ));
+ if ( !authorPage )
+ kdWarning() << "Author information not found in documentInfo !" << endl;
+ else
+ {
+ if ( m_subtype == VST_AUTHORNAME )
+ value = authorPage->fullName();
+ else if ( m_subtype == VST_EMAIL )
+ value = authorPage->email();
+ else if ( m_subtype == VST_COMPANYNAME )
+ value = authorPage->company();
+ else if ( m_subtype == VST_TELEPHONE_WORK )
+ value = authorPage->telephoneWork();
+ else if ( m_subtype == VST_TELEPHONE_HOME )
+ value = authorPage->telephoneHome();
+ else if ( m_subtype == VST_FAX )
+ value = authorPage->fax();
+ else if ( m_subtype == VST_COUNTRY )
+ value = authorPage->country();
+ else if ( m_subtype == VST_POSTAL_CODE )
+ value = authorPage->postalCode();
+ else if ( m_subtype == VST_CITY )
+ value = authorPage->city();
+ else if ( m_subtype == VST_STREET )
+ value = authorPage->street();
+ else if ( m_subtype == VST_AUTHORTITLE )
+ value = authorPage->title();
+ else if ( m_subtype == VST_INITIAL )
+ value = authorPage->initial();
+ else if ( m_subtype == VST_AUTHORPOSITION )
+ value = authorPage->position();
+ }
+ }
+ break;
+ case VST_TITLE:
+ case VST_ABSTRACT:
+ case VST_SUBJECT:
+ case VST_KEYWORDS:
+ {
+ KoDocumentInfo * info = m_doc->documentInfo();
+ KoDocumentInfoAbout * aboutPage = static_cast<KoDocumentInfoAbout *>(info->page( "about" ));
+ if ( !aboutPage )
+ kdWarning() << "'About' page not found in documentInfo !" << endl;
+ else
+ {
+ if ( m_subtype == VST_TITLE )
+ value = aboutPage->title();
+ else if ( m_subtype == VST_SUBJECT )
+ value = aboutPage->subject();
+ else if ( m_subtype == VST_KEYWORDS )
+ value = aboutPage->keywords();
+ else
+ value = aboutPage->abstract();
+ }
+ }
+ break;
+ }
+
+ if (value.isEmpty()) // try the initial value
+ value = m_varValue.toString();
+
+ if (value.isEmpty()) // still empty? give up
+ value = i18n("<None>");
+
+ m_varValue = QVariant( value );
+
+ resize();
+}
+
+QStringList KoFieldVariable::actionTexts()
+{
+ // NOTE: if you change here, also change fieldSubType()
+ QStringList lst;
+ lst << i18n( "Author Name" );
+ lst << i18n( "Title" );
+ lst << i18n( "Initials" );
+ lst << i18n( "Position" );
+ lst << i18n( "Company" );
+ lst << i18n( "Email" );
+ lst << i18n( "Telephone (work)");
+ lst << i18n( "Telephone (private)");
+
+ lst << i18n( "Fax");
+ lst << i18n( "Street" );
+ lst << i18n( "Postal Code" );
+ lst << i18n( "City" );
+ lst << i18n( "Country");
+
+ lst << i18n( "Document Title" );
+ lst << i18n( "Document Abstract" );
+ lst << i18n( "Document Subject" );
+ lst << i18n( "Document Keywords" );
+
+ lst << i18n( "File Name" );
+ lst << i18n( "File Name without Extension" );
+ lst << i18n( "Directory Name" ); // is "Name" necessary ?
+ lst << i18n( "Directory && File Name" );
+ return lst;
+}
+
+short int KoFieldVariable::variableSubType( short int menuNumber )
+{
+ return fieldSubType(menuNumber);
+}
+
+KoFieldVariable::FieldSubType KoFieldVariable::fieldSubType(short int menuNumber)
+{
+ // NOTE: if you change here, also change actionTexts()
+ FieldSubType v;
+ switch (menuNumber)
+ {
+ case 0: v = VST_AUTHORNAME;
+ break;
+ case 1: v = VST_AUTHORTITLE;
+ break;
+ case 2: v = VST_INITIAL;
+ break;
+ case 3: v = VST_AUTHORPOSITION;
+ break;
+ case 4: v = VST_COMPANYNAME;
+ break;
+ case 5: v = VST_EMAIL;
+ break;
+ case 6: v = VST_TELEPHONE_WORK;
+ break;
+ case 7: v = VST_TELEPHONE_HOME;
+ break;
+ case 8: v = VST_FAX;
+ break;
+ case 9: v = VST_STREET;
+ break;
+ case 10: v = VST_POSTAL_CODE;
+ break;
+ case 11: v = VST_CITY;
+ break;
+ case 12: v = VST_COUNTRY;
+ break;
+ case 13: v = VST_TITLE;
+ break;
+ case 14: v = VST_ABSTRACT;
+ break;
+ case 15: v = VST_SUBJECT;
+ break;
+ case 16: v = VST_KEYWORDS;
+ break;
+ case 17: v = VST_FILENAME;
+ break;
+ case 18: v = VST_FILENAMEWITHOUTEXTENSION;
+ break;
+ case 19: v = VST_DIRECTORYNAME;
+ break;
+ case 20: v = VST_PATHFILENAME;
+ break;
+ default:
+ v = VST_NONE;
+ break;
+ }
+ return v;
+}
+
+QStringList KoFieldVariable::subTypeList()
+{
+ return KoFieldVariable::actionTexts();
+}
+
+/******************************************************************/
+/* Class: KoLinkVariable */
+/******************************************************************/
+KoLinkVariable::KoLinkVariable( KoTextDocument *textdoc, const QString & _linkName, const QString & _ulr,KoVariableFormat *varFormat,KoVariableCollection *_varColl )
+ : KoVariable( textdoc, varFormat,_varColl )
+ ,m_url(_ulr)
+{
+ m_varValue = QVariant( _linkName );
+}
+
+QString KoLinkVariable::fieldCode()
+{
+ return i18n("Link");
+}
+
+void KoLinkVariable::loadOasis( const QDomElement &elem, KoOasisContext& /*context*/ )
+{
+ if ( elem.localName() == "a" && elem.namespaceURI() == KoXmlNS::text ) {
+ m_url = elem.attributeNS( KoXmlNS::xlink, "href", QString::null);
+ m_varValue = QVariant(elem.text());
+ }
+}
+
+void KoLinkVariable::saveOasis( KoXmlWriter& writer, KoSavingContext& /*context*/ ) const
+{
+ //<text:a xlink:type="simple" xlink:href="http://www.kde.org/" office:name="sdgfsdfgs">kde org wxc &lt;wxc </text:a>
+ writer.startElement( "text:a" );
+ writer.addAttribute( "xlink:type", "simple" );
+ writer.addAttribute( "xlink:href", m_url );
+ writer.addAttribute( "office:name", m_varValue.toString() );
+ writer.addTextNode( m_varValue.toString() );
+ writer.endElement();
+
+}
+
+QString KoLinkVariable::text(bool realValue)
+{
+ if (m_varColl->variableSetting()->displayFieldCode()&&!realValue)
+ return fieldCode();
+ else
+ return value();
+}
+
+void KoLinkVariable::saveVariable( QDomElement& parentElem )
+{
+ QDomElement linkElem = parentElem.ownerDocument().createElement( "LINK" );
+ parentElem.appendChild( linkElem );
+ linkElem.setAttribute( "linkName", m_varValue.toString() );
+ linkElem.setAttribute( "hrefName", m_url );
+}
+
+void KoLinkVariable::load( QDomElement& elem )
+{
+ KoVariable::load( elem );
+ QDomElement linkElem = elem.namedItem( "LINK" ).toElement();
+ if (!linkElem.isNull())
+ {
+ m_varValue = QVariant(linkElem.attribute("linkName"));
+ m_url = linkElem.attribute("hrefName");
+ }
+}
+
+void KoLinkVariable::recalc()
+{
+ resize();
+}
+
+QStringList KoLinkVariable::actionTexts()
+{
+ return QStringList( i18n( "Link..." ) );
+}
+
+
+void KoLinkVariable::drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int /*cx*/, int /*cy*/, int /*cw*/, int /*ch*/, const QColorGroup& cg, bool selected, int offset, bool drawingShadow )
+{
+ KoTextFormat * fmt = format();
+ KoTextZoomHandler * zh = textDocument()->paintingZoomHandler();
+
+ bool displayLink = m_varColl->variableSetting()->displayLink();
+ QFont font( fmt->screenFont( zh ) );
+ if ( m_varColl->variableSetting()->underlineLink() )
+ font.setUnderline( true );
+ QColor textColor = displayLink ? cg.color( QColorGroup::Link ) : fmt->color();
+
+ drawCustomItemHelper( p, x, y, wpix, hpix, ascentpix, cg, selected, offset, fmt, font, textColor, drawingShadow );
+}
+
+
+/******************************************************************/
+/* Class: KoNoteVariable */
+/******************************************************************/
+KoNoteVariable::KoNoteVariable( KoTextDocument *textdoc, const QString & _note,KoVariableFormat *varFormat,KoVariableCollection *_varColl )
+ : KoVariable( textdoc, varFormat,_varColl )
+ , m_createdNoteDate( QDate::currentDate() )
+{
+ m_varValue = QVariant( _note );
+}
+
+QString KoNoteVariable::fieldCode()
+{
+ return i18n("Note");
+}
+
+QString KoNoteVariable::createdNote() const
+{
+ return KGlobal::locale()->formatDate( m_createdNoteDate, false );
+}
+
+void KoNoteVariable::loadOasis( const QDomElement &elem, KoOasisContext& /*context*/ )
+{
+ const QString localName = elem.localName();
+ QString note;
+ if ( localName == "annotation" && elem.namespaceURI() == KoXmlNS::office )
+ {
+ QDomElement date = KoDom::namedItemNS( elem, KoXmlNS::dc, "date" );
+ m_createdNoteDate = QDate::fromString( date.text(), Qt::ISODate );
+ QDomNode text = KoDom::namedItemNS( elem, KoXmlNS::text, "p" );
+ for ( ; !text.isNull(); text = text.nextSibling() )
+ {
+ if ( text.isElement() )
+ {
+ QDomElement t = text.toElement();
+ note += t.text() + "\n";
+ }
+ }
+ }
+ m_varValue = QVariant( note );
+}
+
+void KoNoteVariable::saveOasis( KoXmlWriter& writer, KoSavingContext& /*context*/ ) const
+{
+// <office:annotation><dc:date>2004-11-10</dc:date><text:p/><text:p>---- 10/11/2004, 16:18 ----</text:p><text:p>dfgsdfsdfg</text:p><text:p>---- 10/11/2004, 16:18 ----</text:p><text:p/><text:p>---- 10/11/2004, 16:18 ----</text:p><text:p>gs</text:p><text:p>---- 10/11/2004, 16:18 ----</text:p><text:p>fg</text:p></office:annotation>
+ writer.startElement( "office:annotation" );
+ writer.startElement( "dc:date" );
+ writer.addTextNode( m_createdNoteDate.toString(Qt::ISODate) );
+ writer.endElement();
+ QStringList text = QStringList::split( "\n", m_varValue.toString() );
+ for ( QStringList::Iterator it = text.begin(); it != text.end(); ++it ) {
+ writer.startElement( "text:p" );
+ writer.addTextNode( *it );
+ writer.endElement();
+ }
+ writer.endElement();
+}
+
+void KoNoteVariable::saveVariable( QDomElement& parentElem )
+{
+ QDomElement linkElem = parentElem.ownerDocument().createElement( "NOTE" );
+ parentElem.appendChild( linkElem );
+ linkElem.setAttribute( "note", m_varValue.toString() );
+}
+
+void KoNoteVariable::load( QDomElement& elem )
+{
+ KoVariable::load( elem );
+ QDomElement linkElem = elem.namedItem( "NOTE" ).toElement();
+ if (!linkElem.isNull())
+ {
+ m_varValue = QVariant(linkElem.attribute("note"));
+ }
+}
+
+void KoNoteVariable::recalc()
+{
+ resize();
+}
+
+QStringList KoNoteVariable::actionTexts()
+{
+ return QStringList( i18n( "Note..." ) );
+}
+
+QString KoNoteVariable::text(bool realValue)
+{
+ if (m_varColl->variableSetting()->displayComment() &&
+ m_varColl->variableSetting()->displayFieldCode()&&!realValue)
+ return fieldCode();
+ else
+ //for a note return just a "space" we can look at
+ //note when we "right button"
+ return QString(" ");
+
+}
+
+void KoNoteVariable::drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected, int offset, bool drawingShadow )
+{
+ if ( !m_varColl->variableSetting()->displayComment())
+ return;
+
+ KoTextFormat * fmt = format();
+ //kdDebug(32500) << "KoNoteVariable::drawCustomItem index=" << index() << " x=" << x << " y=" << y << endl;
+
+ p->save();
+ p->setPen( QPen( fmt->color() ) );
+ if ( fmt->textBackgroundColor().isValid() )
+ p->fillRect( x, y, wpix, hpix, fmt->textBackgroundColor() );
+ if ( selected )
+ {
+ p->setPen( QPen( cg.color( QColorGroup::HighlightedText ) ) );
+ p->fillRect( x, y, wpix, hpix, cg.color( QColorGroup::Highlight ) );
+ }
+ else if ( textDocument() && p->device()->devType() != QInternal::Printer
+ && !textDocument()->dontDrawingNoteVariable())
+ {
+ p->fillRect( x, y, wpix, hpix, Qt::yellow);
+ p->setPen( QPen( cg.color( QColorGroup::Highlight ), 0, Qt::DotLine ) );
+ p->drawRect( x, y, wpix, hpix );
+ }
+ //call it for use drawCustomItemHelper just for draw font effect
+ KoVariable::drawCustomItem( p, x, y, wpix, hpix, ascentpix, cx, cy, cw, ch, cg, selected, offset, drawingShadow );
+
+ p->restore();
+}
+
+void KoPageVariable::setSectionTitle( const QString& _title )
+{
+ QString title( _title );
+ if ( title.isEmpty() )
+ {
+ title = i18n("<No title>");
+ }
+ m_varValue = QVariant( title );
+}
+
+
+// ----------------------------------------------------------------
+// class KoStatisticVariable
+
+
+bool KoStatisticVariable::m_extendedType = false;
+
+
+KoStatisticVariable::KoStatisticVariable( KoTextDocument *textdoc,
+ short int subtype,
+ KoVariableFormat *varFormat,
+ KoVariableCollection *_varColl )
+ : KoVariable( textdoc, varFormat, _varColl ),
+ m_subtype( subtype )
+{
+}
+
+
+QStringList KoStatisticVariable::actionTexts()
+{
+ QStringList lst;
+ lst << i18n( "Number of Words" );
+ lst << i18n( "Number of Sentences" );
+ lst << i18n( "Number of Lines" );
+ lst << i18n( "Number of Characters" );
+ lst << i18n( "Number of Non-Whitespace Characters" );
+ lst << i18n( "Number of Syllables" );
+ lst << i18n( "Number of Frames" );
+ lst << i18n( "Number of Embedded Objects" );
+ lst << i18n( "Number of Pictures" );
+ if ( m_extendedType )
+ lst << i18n( "Number of Tables" );
+ return lst;
+}
+
+
+void KoStatisticVariable::setVariableSubType( short int subtype )
+{
+ m_subtype = subtype;
+ Q_ASSERT( m_varColl );
+ KoVariableFormatCollection* fc = m_varColl->formatCollection();
+ setVariableFormat(fc->format("NUMBER") );
+}
+
+
+QStringList KoStatisticVariable::subTypeList()
+{
+ return KoStatisticVariable::actionTexts();
+}
+
+
+void KoStatisticVariable::saveVariable( QDomElement& varElem )
+{
+ QDomElement elem = varElem.ownerDocument().createElement( "STATISTIC" );
+ varElem.appendChild( elem );
+
+ elem.setAttribute( "type", QString::number(m_subtype) );
+ elem.setAttribute( "value", QString::number(m_varValue.toInt()) );
+}
+
+
+void KoStatisticVariable::load( QDomElement &elem )
+{
+ KoVariable::load( elem );
+
+ QDomElement e = elem.namedItem( "STATISTIC" ).toElement();
+ if ( !e.isNull() ) {
+ // FIXME: Error handling.
+ m_subtype = e.attribute( "type" ).toInt();
+ m_varValue = e.attribute( "value" ).toInt();
+ }
+}
+
+
+void KoStatisticVariable::loadOasis( const QDomElement &elem, KoOasisContext& /*context*/ )
+{
+ const QString localName( elem.localName() );
+ if ( localName == "object-count" )
+ {
+ m_subtype = VST_STATISTIC_NB_EMBEDDED;
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ else if ( localName == "table-count" )
+ {
+ m_subtype = VST_STATISTIC_NB_TABLE;
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ else if ( localName == "picture-count" )
+ {
+ m_subtype = VST_STATISTIC_NB_PICTURE;
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ else if ( localName == "word-count" )
+ {
+ m_subtype = VST_STATISTIC_NB_WORD;
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ else if ( localName == "character-count" )
+ {
+ m_subtype = VST_STATISTIC_NB_CHARACTERE;
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ else if ( localName == "frame-count" )
+ {
+ m_subtype = VST_STATISTIC_NB_FRAME;
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ else if ( localName == "line-count" )
+ {
+ m_subtype = VST_STATISTIC_NB_LINES;
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ else if ( localName == "sentence-count" )
+ {
+ m_subtype = VST_STATISTIC_NB_SENTENCE;
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ else if ( localName == "non-whitespace-character-count" )
+ {
+ m_subtype = VST_STATISTIC_NB_NON_WHITESPACE_CHARACTERE;
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ else if ( localName == "syllable-count" )
+ {
+ m_subtype = VST_STATISTIC_NB_SYLLABLE;
+ m_varValue = QVariant( elem.text().toInt() );
+ }
+ //TODO other copy
+}
+
+void KoStatisticVariable::saveOasis( KoXmlWriter& writer, KoSavingContext& /*context*/ ) const
+{
+ switch( m_subtype )
+ {
+ case VST_STATISTIC_NB_EMBEDDED:
+ writer.startElement( "text:object-count" );
+ writer.addTextNode( QString::number( m_varValue.toInt() ) );
+ writer.endElement();
+ break;
+ case VST_STATISTIC_NB_TABLE:
+ writer.startElement( "text:table-count" );
+ writer.addTextNode( QString::number( m_varValue.toInt() ) );
+ writer.endElement();
+ break;
+ case VST_STATISTIC_NB_PICTURE:
+ writer.startElement( "text:picture-count" );
+ writer.addTextNode( QString::number( m_varValue.toInt() ) );
+ writer.endElement();
+ break;
+ case VST_STATISTIC_NB_FRAME:
+ //TODO verify that it's implemented into oasis file format
+ writer.startElement( "text:frame-count" );
+ writer.addTextNode( QString::number( m_varValue.toInt() ) );
+ writer.endElement();
+ break;
+ case VST_STATISTIC_NB_WORD:
+ writer.startElement( "text:word-count" );
+ writer.addTextNode( QString::number( m_varValue.toInt() ) );
+ writer.endElement();
+ break;
+ case VST_STATISTIC_NB_SENTENCE:
+ //TODO verify that it's implemented into oasis file format
+ writer.startElement( "text:sentence-count" );
+ writer.addTextNode( QString::number( m_varValue.toInt() ) );
+ writer.endElement();
+ break;
+ case VST_STATISTIC_NB_CHARACTERE:
+ writer.startElement( "text:character-count" );
+ writer.addTextNode( QString::number( m_varValue.toInt() ) );
+ writer.endElement();
+ break;
+ case VST_STATISTIC_NB_LINES:
+ //TODO verify that it's implemented into oasis file format
+ writer.startElement( "text:line-count" );
+ writer.addTextNode( QString::number( m_varValue.toInt() ) );
+ writer.endElement();
+ break;
+ case VST_STATISTIC_NB_NON_WHITESPACE_CHARACTERE:
+ //TODO verify that it's implemented into oasis file format
+ writer.startElement( "text:non-whitespace-character-count" );
+ writer.addTextNode( QString::number( m_varValue.toInt() ) );
+ writer.endElement();
+ break;
+ case VST_STATISTIC_NB_SYLLABLE:
+ //TODO verify that it's implemented into oasis file format
+ writer.startElement( "text:syllable-count" );
+ writer.addTextNode( QString::number( m_varValue.toInt() ) );
+ writer.endElement();
+ break;
+ }
+}
+
+QString KoStatisticVariable::fieldCode()
+{
+ if ( m_subtype == VST_STATISTIC_NB_FRAME )
+ {
+ return i18n( "Number of Frames" );
+ }
+ else if( m_subtype == VST_STATISTIC_NB_PICTURE )
+ {
+ return i18n( "Number of Pictures" );
+ }
+ else if( m_subtype == VST_STATISTIC_NB_TABLE )
+ {
+ return i18n( "Number of Tables" );
+ }
+ else if( m_subtype == VST_STATISTIC_NB_EMBEDDED )
+ {
+ return i18n( "Number of Embedded Objects" );
+ }
+ else if( m_subtype == VST_STATISTIC_NB_WORD )
+ {
+ return i18n( "Number of Words" );
+ }
+ else if( m_subtype == VST_STATISTIC_NB_SENTENCE )
+ {
+ return i18n( "Number of Sentences" );
+ }
+ else if( m_subtype == VST_STATISTIC_NB_LINES )
+ {
+ return i18n( "Number of Lines" );
+ }
+ else if ( m_subtype == VST_STATISTIC_NB_CHARACTERE )
+ {
+ return i18n( "Number of Characters" );
+ }
+ else if ( m_subtype == VST_STATISTIC_NB_NON_WHITESPACE_CHARACTERE )
+ {
+ return i18n( "Number of Non-Whitespace Characters" );
+ }
+ else if ( m_subtype == VST_STATISTIC_NB_SYLLABLE )
+ {
+ return i18n( "Number of Syllables" );
+ }
+ else
+ return i18n( "Number of Frames" );
+}
+
+
diff --git a/lib/kotext/KoVariable.h b/lib/kotext/KoVariable.h
new file mode 100644
index 00000000..0129bbc2
--- /dev/null
+++ b/lib/kotext/KoVariable.h
@@ -0,0 +1,807 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kovariable_h
+#define kovariable_h
+
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qasciidict.h>
+#include <qptrlist.h>
+#include <qmap.h>
+#include <qobject.h>
+#include <kaction.h>
+#include "KoRichText.h"
+#include <qvariant.h>
+#include <koffice_export.h>
+
+class QDomElement;
+// Always add new types at the _end_ of this list (but before VT_ALL of course).
+// (and update KWView::setupActions)
+enum VariableType {
+ VT_NONE = -1,
+
+ VT_DATE = 0,
+ VT_DATE_VAR_KWORD10 = 1,
+ VT_TIME = 2,
+ VT_TIME_VAR_KWORD10 = 3,
+ VT_PGNUM = 4,
+ // No number 5
+ VT_CUSTOM = 6,
+ VT_MAILMERGE = 7,
+ VT_FIELD = 8,
+ VT_LINK = 9,
+ VT_NOTE = 10,
+ VT_FOOTNOTE = 11,
+ VT_STATISTIC = 12,
+
+ VT_ALL = 256
+};
+
+enum VariableFormat {
+ VF_DATE = 0,
+ VF_TIME = 1,
+ VF_STRING = 2,
+ VF_NUM = 3
+};
+
+class KoVariable;
+class KoOasisSettings;
+
+class KOTEXT_EXPORT KoVariableSettings
+{
+ public:
+ KoVariableSettings();
+ virtual ~KoVariableSettings();
+
+ int startingPageNumber()const { return m_startingPageNumber; }
+ void setStartingPageNumber(int num) { m_startingPageNumber=num; }
+
+ bool displayLink() const{ return m_displayLink; }
+ void setDisplayLink( bool b) { m_displayLink=b; }
+
+ bool underlineLink() const { return m_underlineLink; }
+ void setUnderlineLink( bool b) { m_underlineLink=b; }
+
+ bool displayComment() const { return m_displayComment; }
+ void setDisplayComment( bool b) { m_displayComment=b; }
+
+ bool displayFieldCode() const { return m_displayFieldCode; }
+ void setDisplayFieldCode( bool b) { m_displayFieldCode=b; }
+
+ virtual void save( QDomElement &parentElem );
+ virtual void load( QDomElement &elem );
+
+ QDateTime lastPrintingDate() const;
+ void setLastPrintingDate( const QDateTime & _date);
+
+ QDateTime creationDate() const;
+ void setCreationDate( const QDateTime & _date);
+
+ QDateTime modificationDate() const;
+ void setModificationDate( const QDateTime & _date);
+
+ virtual void saveOasis( KoXmlWriter &settingsWriter ) const;
+ virtual void loadOasis(const KoOasisSettings&settingsDoc);
+
+
+ private:
+ int m_startingPageNumber;
+ bool m_displayLink;
+ bool m_displayComment;
+ bool m_underlineLink;
+ bool m_displayFieldCode;
+ class KoVariableSettingPrivate;
+ KoVariableSettingPrivate *d;
+};
+
+/**
+ * Class: KoVariableFormat
+ * Base class for a variable format - held by KWDocument.
+ * Example of formats are time, date, string, number, floating-point number...
+ * The reason for formats to be separated is that it allows to
+ * customize the formats, to implement subformats (various date formats, etc.).
+ */
+class KOTEXT_EXPORT KoVariableFormat
+{
+public:
+ KoVariableFormat() {}
+ virtual ~KoVariableFormat() {}
+ /**
+ * Return a key describing this format.
+ * Used for the flyweight pattern in KoVariableFormatCollection
+ */
+ virtual QCString key() const = 0;
+ /**
+ * @return the key for a given set of properties.
+ * Use this key to lookup the format in the "variable format" collection.
+ * @param props properties of this format, e.g. DD/MM/YYYY for a date format.
+ */
+ virtual QCString getKey( const QString& props ) const = 0;
+ /**
+ * Create a format from this key.
+ */
+ virtual void load( const QCString &key ) = 0;
+ /**
+ * Use this format to convert a piece of data into a string.
+ */
+ virtual QString convert(const QVariant& data ) const = 0;
+ /**
+ * Set the properties of this format, e.g. DD/MM/YYYY for a date format.
+ * WARNING: if you call this, you might be modifying a format that
+ * other variables use as well. Don't do it, use getKey.
+ */
+ virtual void setFormatProperties( const QString& ) {}
+ /**
+ * @return the properties of this format, e.g. DD/MM/YYYY for a date format.
+ */
+ virtual QString formatProperties() const { return QString::null; }
+ /**
+ * @return the list of available properties strings (e.g. hh:mm:ss)
+ */
+ virtual QStringList formatPropsList() const { return QStringList(); }
+ /**
+ * @return the translated version of the list of format properties
+ */
+ virtual QStringList translatedFormatPropsList() const { return QStringList(); }
+};
+
+/**
+ * Implementation of the "date" formats
+ * TODO: merge with KoVariableTimeFormat, for a single QDateTime-based class.
+ */
+class KOTEXT_EXPORT KoVariableDateFormat : public KoVariableFormat
+{
+public:
+ KoVariableDateFormat();
+ virtual QString convert(const QVariant& data ) const;
+ virtual QCString key() const;
+ virtual QCString getKey( const QString& props ) const;
+ virtual void load( const QCString &key );
+
+ /// Set the format string (e.g. DDMMYYYY)
+ virtual void setFormatProperties( const QString& props ) {
+ m_strFormat = props;
+ }
+ /// @return the format string (e.g. DDMMYYYY)
+ virtual QString formatProperties() const { return m_strFormat; }
+
+ /// @return the list of available format strings
+ virtual QStringList formatPropsList() const { return staticFormatPropsList(); }
+
+ /// @return the translated version of the list of formats
+ virtual QStringList translatedFormatPropsList() const { return staticTranslatedFormatPropsList(); }
+
+ static QStringList staticFormatPropsList();
+ static QStringList staticTranslatedFormatPropsList();
+
+private:
+ QString m_strFormat;
+};
+
+/**
+ * Implementation of the "time" formats
+ */
+class KOTEXT_EXPORT KoVariableTimeFormat : public KoVariableFormat
+{
+public:
+ KoVariableTimeFormat();
+ virtual QString convert(const QVariant& data ) const;
+ virtual QCString key() const;
+ virtual QCString getKey( const QString& props ) const;
+ virtual void load( const QCString & /*key*/ );
+
+ /// Set the format string (e.g. hh:mm:ss)
+ virtual void setFormatProperties( const QString& props ) {
+ m_strFormat = props;
+ }
+ /// @return the format string (e.g. hh:mm:ss)
+ virtual QString formatProperties() const { return m_strFormat; }
+
+ /// @return the list of available properties strings (e.g. hh:mm:ss)
+ virtual QStringList formatPropsList() const { return staticFormatPropsList(); }
+
+ /// @return the translated version of the list of format properties
+ virtual QStringList translatedFormatPropsList() const { return staticTranslatedFormatPropsList(); }
+
+ static QStringList staticFormatPropsList();
+ static QStringList staticTranslatedFormatPropsList();
+
+private:
+ QString m_strFormat;
+};
+
+
+/**
+ * Implementation of the string format
+ */
+class KoVariableStringFormat : public KoVariableFormat
+{
+public:
+ KoVariableStringFormat() : KoVariableFormat() {}
+ virtual QString convert(const QVariant& data ) const;
+ virtual QCString key() const;
+ virtual QCString getKey( const QString& props ) const;
+ virtual void load( const QCString & /*key*/ ) {}
+};
+
+
+class KOTEXT_EXPORT KoVariableNumberFormat : public KoVariableFormat
+{
+public:
+ KoVariableNumberFormat() : KoVariableFormat() {}
+ virtual QString convert(const QVariant& data ) const;
+ virtual QCString key() const;
+ virtual QCString getKey( const QString& props ) const;
+ virtual void load( const QCString & /*key*/ ) {}
+};
+
+
+/**
+ * The collection of formats for variables.
+ * Example: date (short or long), time, string (prefix/suffix), number (prefix/suffix, decimals?)...
+ * Implements the flyweight pattern to share formats and create them on demand.
+ * Each KoDocument holds a KoVariableFormatCollection.
+ */
+class KOTEXT_EXPORT KoVariableFormatCollection
+{
+public:
+ KoVariableFormatCollection();
+
+ /**
+ * Forget (and erase) all the formats this collection knows about
+ */
+ void clear() { m_dict.clear(); }
+
+ /**
+ * Find or create the format for the given @p key
+ */
+ KoVariableFormat *format( const QCString &key );
+
+ // TODO Refcounting and removing unused formats
+ // Not critical, that we don't delete unused formats until closing the doc...
+protected:
+ KoVariableFormat *createFormat( const QCString &key );
+
+private:
+ QAsciiDict<KoVariableFormat> m_dict;
+};
+
+class KoVariable;
+class KoVariableFormat;
+class KoDocument;
+class KoVariableFormatCollection;
+class KoTextDocument;
+class KoVariableCollection;
+class KOTEXT_EXPORT KoVariableCollection : public QObject
+{
+ Q_OBJECT
+public:
+ // Note that the KoVariableSettings becomes owned by the collection;
+ // we take it as argument so that it can be subclassed though.
+ KoVariableCollection(KoVariableSettings *settings, KoVariableFormatCollection *formatCollection);
+ ~KoVariableCollection();
+ void registerVariable( KoVariable *var );
+ void unregisterVariable( KoVariable *var );
+ QValueList<KoVariable *> recalcVariables(int type);
+
+ // For custom variables
+ void setVariableValue( const QString &name, const QString &value );
+ QString getVariableValue( const QString &name ) const;
+
+ const QPtrList<KoVariable>& getVariables() const {
+ return variables;
+ }
+ void clear();
+
+ bool customVariableExist(const QString &varname)const ;
+
+ virtual KoVariable *createVariable( int type, short int subtype, KoVariableFormatCollection * coll, KoVariableFormat *varFormat,KoTextDocument *textdoc, KoDocument * doc, int _correct , bool _forceDefaultFormat=false, bool loadFootNote= true );
+
+ /// Load variable from OASIS file format (called "field" in the OASIS format)
+ virtual KoVariable* loadOasisField( KoTextDocument* textdoc, const QDomElement& tag, KoOasisContext& context );
+ virtual KoVariable* loadOasisFieldCreateVariable( KoTextDocument* textdoc, const QDomElement& tag, KoOasisContext& context, const QString &key, int type );
+
+ KoVariableSettings *variableSetting() const { return m_variableSettings; }
+ KoVariableFormatCollection *formatCollection() const { return m_formatCollection; }
+
+ /// Variable that's under the popupmenu
+ void setVariableSelected(KoVariable * var);
+ KoVariable *selectedVariable()const {return m_varSelected;}
+
+ /// List of KActions to put into the popupmenu on a variable
+ QPtrList<KAction> popupActionList() const;
+
+ protected slots:
+ // This is here because variables and formats are not QObjects
+ void slotChangeSubType();
+ void slotChangeFormat();
+
+ private:
+ //typedef QMap<KAction *, int> VariableSubTextMap;
+ //VariableSubTextMap m_variableSubTextMap;
+
+ QPtrList<KoVariable> variables;
+ QMap< QString, QString > varValues; // for custom variables
+ KoVariableSettings *m_variableSettings;
+ KoVariable *m_varSelected;
+ KoVariableFormatCollection *m_formatCollection;
+};
+
+
+// ----------------------------------------------------------------
+// KoVariable and derived classes
+
+
+class KoDocument;
+class KoVariable;
+class QDomElement;
+class KoTextFormat;
+
+
+/**
+ * A KoVariable is a custom item, i.e. considered as a single character.
+ * KoVariable is the abstract base class.
+ */
+class KOTEXT_EXPORT KoVariable : public KoTextCustomItem
+{
+public:
+ KoVariable( KoTextDocument *fs, KoVariableFormat *varFormat,KoVariableCollection *varColl );
+ virtual ~KoVariable();
+
+ virtual VariableType type() const = 0;
+ virtual short int subType() const { return 0; }
+
+ // KoTextCustomItem stuff
+ virtual Placement placement() const { return PlaceInline; }
+ virtual void resize();
+ virtual int ascent() const { return m_ascent; } // for text, ascent != height!
+ virtual int widthHint() const { return width; }
+ virtual int minimumWidth() const { return width; }
+ virtual void drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected, int offset, bool drawingShadow);
+
+ /**
+ * Called by drawCustomItem. Some special variables can
+ * reimplement drawCustomItem to change the parameters passed to
+ * drawCustomItemHelper
+ */
+ void drawCustomItemHelper( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, const QColorGroup& cg, bool selected, int offset, KoTextFormat* fmt, const QFont& font, QColor textColor, bool drawingShadow );
+
+ void setVariableFormat( KoVariableFormat *_varFormat );
+
+ KoVariableFormat *variableFormat() const
+ { return m_varFormat; }
+
+ KoVariableCollection *variableColl() const
+ { return m_varColl; }
+
+ /**
+ * Returns the text to be displayed for this variable
+ * It doesn't need to be cached, convert() is fast, and it's the actual
+ * value (date, time etc.) that is cached in the variable already.
+ */
+ virtual QString text(bool realValue=false);
+
+ virtual QString fieldCode();
+
+ /// Return the variable value, as a QVariant, before format conversion
+ QVariant varValue() const { return m_varValue; }
+
+ /**
+ * Ask this variable to recalculate and to repaint itself
+ * Only use this if you're working on a single variable (e.g. popupmenu).
+ * Otherwise, better do the repainting all at once.
+ * @see KoVariableCollection::recalcVariables()
+ */
+ void recalcAndRepaint();
+
+ /** Save the variable. Public API, does the common job and then calls saveVariable. */
+ virtual void save( QDomElement &parentElem );
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
+ virtual void load( QDomElement &elem );
+ virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
+
+ /** Part of the KoTextCustomItem interface. Returns the code for a variable, see DTD.
+ * Do NOT reimplement in koVariable-derived classes.
+ */
+ virtual int typeId() const { return 4; }
+
+ /// List of available subtypes (translated). Use variableSubType() to map index to ID
+ virtual QStringList subTypeList();
+
+ /// Set this variable's subtype.
+ virtual void setVariableSubType( short int /*subtype*/ ) {}
+
+ /**
+ * Converts the @p menuNumber to variable subtype number (VST_x)
+ */
+ virtual short int variableSubType(short int menuNumber){ return menuNumber; }
+
+ QString convertKlocaleToQDateTimeFormat( const QString & _format );
+
+protected:
+ /** Variable should reimplement this to implement saving. */
+ virtual void saveVariable( QDomElement &parentElem ) = 0;
+ virtual int correctValue() const { return 0;}
+
+ KoVariableFormat *m_varFormat;
+ KoVariableCollection *m_varColl;
+ QVariant m_varValue;
+ int m_ascent;
+
+ //typedef QMap<KAction *, int> SubTextMap;
+ //SubTextMap m_subTextMap;
+ class Private;
+ Private *d;
+};
+
+
+/**
+ * Date-related variables
+ */
+class KOTEXT_EXPORT KoDateVariable : public KoVariable
+{
+public:
+ KoDateVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *_varFormat,KoVariableCollection *_varColl , int _correctDate = 0);
+
+ virtual VariableType type() const
+ { return VT_DATE; }
+
+ enum { VST_DATE_FIX = 0, VST_DATE_CURRENT = 1, VST_DATE_LAST_PRINTING = 2, VST_DATE_CREATE_FILE = 3, VST_DATE_MODIFY_FILE =4 };
+ static QStringList actionTexts();
+
+ virtual void recalc();
+ virtual QString fieldCode();
+ virtual void resize();
+ void setDate( const QDate & _date ) { m_varValue = QVariant(_date); }
+
+ virtual void saveVariable( QDomElement &parentElem );
+ virtual int correctValue() const { return m_correctDate;}
+ virtual void load( QDomElement &elem );
+ virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
+
+ virtual QStringList subTypeList();
+ /// Set this variable's subtype.
+ virtual void setVariableSubType( short int subtype )
+ { m_subtype = subtype; }
+ virtual short int subType() const { return m_subtype; }
+ /**
+ * Ask the user and return the date format string with prefix "DATE"
+ */
+ static QCString formatStr( int & correct );
+ /**
+ * Return the default date format for old file.
+ */
+ static QCString defaultFormat();
+
+protected:
+ short int m_subtype;
+ int m_correctDate;
+};
+
+
+/**
+ * Time-related variables
+ */
+class KOTEXT_EXPORT KoTimeVariable : public KoVariable
+{
+public:
+ KoTimeVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat, KoVariableCollection *_varColl, int _correct);
+
+ virtual VariableType type() const
+ { return VT_TIME; }
+
+ enum { VST_TIME_FIX = 0, VST_TIME_CURRENT = 1 };
+ static QStringList actionTexts();
+
+ virtual void recalc();
+ virtual void resize();
+ virtual QString fieldCode();
+
+ void setTime( const QTime & _time ) { m_varValue = QVariant(_time); }
+
+ virtual void saveVariable( QDomElement &parentElem );
+ virtual int correctValue() const { return m_correctTime;}
+ virtual void load( QDomElement &elem );
+ virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
+
+ virtual QStringList subTypeList();
+ virtual void setVariableSubType( short int subtype )
+ { m_subtype = subtype; }
+ virtual short int subType() const { return m_subtype; }
+ /**
+ * Returns the time format string with prefix "TIME"
+ */
+ static QCString formatStr(int & _correct);
+ /**
+ * Return the default date format for old file.
+ */
+ static QCString defaultFormat();
+
+protected:
+ short int m_subtype;
+ int m_correctTime; // in minutes
+};
+
+
+
+/**
+ * A custom variable is a variable whose value is entered
+ * by the user.
+ */
+class KOTEXT_EXPORT KoCustomVariable : public KoVariable
+{
+public:
+ KoCustomVariable(KoTextDocument *textdoc , const QString &name, KoVariableFormat *varFormat,KoVariableCollection *_varcoll );
+
+ virtual VariableType type() const
+ { return VT_CUSTOM; }
+ static QStringList actionTexts();
+
+ virtual void saveVariable( QDomElement &parentElem );
+ virtual void load( QDomElement &elem );
+ virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
+
+ QString name() const { return m_varValue.toString(); }
+ virtual void recalc();
+ virtual QString fieldCode();
+
+ virtual QString text(bool realValue=false);
+
+ QString value() const;
+ void setValue( const QString &v );
+
+protected:
+};
+
+
+/**
+ * Any variable that is a string, and whose value is automatically
+ * determined - as opposed to custom variables whose value is
+ * entered by the user
+ */
+class KOTEXT_EXPORT KoFieldVariable : public KoVariable
+{
+public:
+ KoFieldVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat,KoVariableCollection *_varColl, KoDocument *_doc );
+
+ // Do not change existing values, they are saved in document files
+ enum FieldSubType { VST_NONE = -1,
+ VST_FILENAME = 0, VST_DIRECTORYNAME = 1,
+ VST_AUTHORNAME = 2, VST_EMAIL = 3, VST_COMPANYNAME = 4,
+ VST_PATHFILENAME = 5, VST_FILENAMEWITHOUTEXTENSION=6,
+ VST_TELEPHONE_WORK = 7, VST_FAX = 8, VST_COUNTRY = 9,
+ VST_TITLE = 10, VST_ABSTRACT = 11,
+ VST_POSTAL_CODE = 12, VST_CITY = 13, VST_STREET = 14,
+ VST_AUTHORTITLE = 15, VST_INITIAL = 16, VST_TELEPHONE_HOME = 17, VST_SUBJECT = 18, VST_KEYWORDS=19,VST_AUTHORPOSITION = 20 };
+
+ virtual VariableType type() const
+ { return VT_FIELD; }
+
+ virtual void saveVariable( QDomElement &parentElem );
+ virtual void load( QDomElement &elem );
+ virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
+ virtual QString fieldCode();
+
+ virtual void recalc();
+ virtual QString text(bool realValue=false);
+
+ QString value() const { return m_varValue.toString(); }
+
+ static QStringList actionTexts();
+ /**
+ * Converts @p menuNumber to field variable subtype number
+ */
+ virtual short int variableSubType( short int menuNumber );
+ /**
+ * Converts @p menuNumber to field variable subtype number
+ */
+ static FieldSubType fieldSubType( short int menuNumber);
+
+ virtual QStringList subTypeList();
+ virtual void setVariableSubType( short int subtype )
+ { m_subtype = subtype; }
+ virtual short int subType() const { return m_subtype; }
+
+protected:
+ short int m_subtype;
+ KoDocument *m_doc;
+};
+
+
+class KOTEXT_EXPORT KoMailMergeVariable : public KoVariable
+{
+public:
+ KoMailMergeVariable( KoTextDocument *textdoc, const QString &name, KoVariableFormat *varFormat, KoVariableCollection *_varColl );
+
+ virtual VariableType type() const
+ { return VT_MAILMERGE; }
+ static QStringList actionTexts();
+ virtual QString fieldCode();
+
+ virtual void saveVariable( QDomElement &parentElem );
+ virtual void load( QDomElement &elem );
+ virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
+
+ virtual QString text(bool realValue=false);
+ QString name() const { return m_varValue.toString(); }
+ virtual QString value() const;
+
+protected:
+};
+
+
+/**
+ * "current page number" and "number of pages" variables
+ * This is a base class, it must be inherited by applications,
+ * to provide recalc().
+ */
+class KOTEXT_EXPORT KoPageVariable : public KoVariable
+{
+public:
+ KoPageVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat ,KoVariableCollection *_varColl);
+
+ virtual VariableType type() const
+ { return VT_PGNUM; }
+
+ enum { VST_PGNUM_CURRENT = 0, VST_PGNUM_TOTAL = 1, VST_CURRENT_SECTION = 2 , VST_PGNUM_PREVIOUS = 3, VST_PGNUM_NEXT = 4 };
+ static QStringList actionTexts();
+ virtual QString fieldCode();
+
+ virtual QStringList subTypeList();
+
+ virtual void setVariableSubType( short int subtype );
+
+ // For the 'current page' variable. This is called by the app e.g. when painting
+ // a given page (see KWTextFrameSet::drawFrame and KPTextObject::recalcPageNum)
+ void setPgNum( int pgNum ) { m_varValue = QVariant( pgNum); }
+ // For the 'current section title' variable. Same thing.
+ void setSectionTitle( const QString& title );
+
+ virtual short int subType() const { return m_subtype; }
+
+ virtual void recalc() = 0;
+
+ virtual void saveVariable( QDomElement &parentElem );
+ virtual void load( QDomElement &elem );
+ virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
+protected:
+ short int m_subtype;
+};
+
+
+class KOTEXT_EXPORT KoLinkVariable : public KoVariable
+{
+public:
+ KoLinkVariable( KoTextDocument *textdoc, const QString & _linkName, const QString & _ulr,KoVariableFormat *varFormat, KoVariableCollection *_varColl );
+ virtual void drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int /*cx*/, int /*cy*/, int /*cw*/, int /*ch*/, const QColorGroup& cg, bool selected, int offset, bool drawingShadow );
+
+ virtual VariableType type() const
+ { return VT_LINK; }
+
+ static QStringList actionTexts();
+ virtual QString fieldCode();
+
+ virtual void saveVariable( QDomElement &parentElem );
+ virtual void load( QDomElement &elem );
+ virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
+
+ virtual QString text(bool realValue=false);
+ QString value() const { return m_varValue.toString(); }
+ QString url() const { return m_url;}
+
+ virtual void recalc();
+
+ void setLink(const QString & _linkName, const QString &_url)
+ {
+ m_varValue=QVariant(_linkName);
+ m_url=_url;
+ }
+
+protected:
+ QString m_url;
+};
+
+
+// A custom item that display a small yellow rect. Right-clicking on it shows the comment.
+class KOTEXT_EXPORT KoNoteVariable : public KoVariable
+{
+public:
+ KoNoteVariable( KoTextDocument *textdoc, const QString & _note,KoVariableFormat *varFormat, KoVariableCollection *_varColl );
+ virtual void drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int /*cx*/, int /*cy*/, int /*cw*/, int /*ch*/, const QColorGroup& cg, bool selected, int offset, bool drawingShadow );
+
+ virtual VariableType type() const
+ { return VT_NOTE; }
+
+ static QStringList actionTexts();
+ virtual QString fieldCode();
+
+ virtual void saveVariable( QDomElement &parentElem );
+ virtual void load( QDomElement &elem );
+ virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
+
+ virtual QString text(bool realValue=false);
+ QString note() const { return m_varValue.toString(); }
+ void setNote( const QString & _note) { m_varValue = QVariant(_note); }
+ virtual void recalc();
+
+ QString createdNote() const;
+protected:
+ QDate m_createdNoteDate;
+};
+
+
+class KOTEXT_EXPORT KoStatisticVariable : public KoVariable
+{
+public:
+ KoStatisticVariable( KoTextDocument *textdoc, short int subtype,
+ KoVariableFormat *varFormat,
+ KoVariableCollection *_varColl);
+
+ enum {
+ VST_STATISTIC_NB_WORD = 0,
+ VST_STATISTIC_NB_SENTENCE = 1,
+ VST_STATISTIC_NB_LINES = 2,
+ VST_STATISTIC_NB_CHARACTERE = 3,
+ VST_STATISTIC_NB_NON_WHITESPACE_CHARACTERE = 4,
+ VST_STATISTIC_NB_SYLLABLE = 5,
+ VST_STATISTIC_NB_FRAME = 6,
+ VST_STATISTIC_NB_EMBEDDED = 7,
+ VST_STATISTIC_NB_PICTURE = 8,
+ VST_STATISTIC_NB_TABLE = 9
+ };
+
+ virtual VariableType type() const
+ { return VT_STATISTIC; }
+ static QStringList actionTexts();
+
+ virtual QStringList subTypeList();
+
+ virtual void saveVariable( QDomElement &parentElem );
+ virtual void load( QDomElement &elem );
+ virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
+ virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
+
+ virtual short int subType() const { return m_subtype; }
+
+ virtual void setVariableSubType( short int subtype );
+
+ QString name() const { return m_varValue.toString(); }
+ virtual QString fieldCode();
+
+ QString value() const;
+ void setValue( const QString &v );
+ static void setExtendedType( bool _b) { m_extendedType = _b; }
+ static bool extendedType() { return m_extendedType; }
+protected:
+ short int m_subtype;
+ // extend type for kword.
+ static bool m_extendedType;
+};
+
+
+#endif
diff --git a/lib/kotext/Makefile.am b/lib/kotext/Makefile.am
new file mode 100644
index 00000000..bb55e8a1
--- /dev/null
+++ b/lib/kotext/Makefile.am
@@ -0,0 +1,32 @@
+SUBDIRS = kohyphen . tests
+INCLUDES= $(KOFFICECORE_INCLUDES) $(KOFFICEUI_INCLUDES) $(KSTORE_INCLUDES) $(all_includes)
+## Needed for kohyphen...
+KDE_CXXFLAGS = $(USE_EXCEPTIONS)
+
+lib_LTLIBRARIES = libkotext.la
+libkotext_la_SOURCES = KoComplexText.cpp KoRichText.cpp \
+ KoTextZoomHandler.cpp KoBorder.cpp \
+ KoTextFormat.cpp KoParagCounter.cpp KoStyleCollection.cpp KoTextCommand.cpp \
+ KoTextParag.cpp KoTextDocument.cpp KoTextFormatter.cpp KoParagLayout.cpp \
+ KoTextObject.cpp KoTextView.cpp KoAutoFormat.cpp KoAutoFormatDia.cpp \
+ KoParagDia.cpp KoVariable.cpp KoCustomVariablesDia.cpp \
+ KoChangeCaseDia.cpp KoStyleManager.cpp KoSearchDia.cpp \
+ timedateformatwidget.ui TimeFormatWidget.cpp DateFormatWidget.cpp \
+ KFontDialog_local.cpp kofonttabbase.ui KoFontTab.cpp kohighlightingtabbase.ui KoHighlightingTab.cpp \
+ kodecorationtabbase.ui KoDecorationTab.cpp kolayouttabbase.ui KoLayoutTab.cpp kolanguagetabbase.ui KoLanguageTab.cpp \
+ KoFontDiaPreview.cpp KoCompletionDia.cpp KoCompletionBase.ui \
+ KoTextViewIface.skel KoTextViewIface.cc KoFontDia.cpp KoBgSpellCheck.cpp \
+ KoCommentDia.cpp KoSpell.cpp KoCreateStyleDia.cpp KoTextCustomItem.cpp \
+ KoImportStyleDia.cpp KoTextIterator.cpp KoOasisContext.cpp KoListStyleStack.cpp \
+ KoUserStyle.cpp KoUserStyleCollection.cpp KoParagStyle.cpp KoParagDecorationTab.ui \
+ KoTextBookmark.cpp
+
+libkotext_la_LDFLAGS = $(all_libraries) -version-info 3:0:0 -no-undefined
+
+libkotext_la_LIBADD = $(LIB_KOFFICEUI) kohyphen/libkohyphen.la $(LIBKSPELL2) -lkutils
+
+METASOURCES = AUTO
+
+# include_HEADERS =
+# KoTextZoomHandler.h KoTextFormat.h KoParagCounter.h KoStyleCollection.h
+# KoTextDocument.h KoBgSpellCheck.h KoCommentDia.h KoCreateStyleDia.h
diff --git a/lib/kotext/TODO b/lib/kotext/TODO
new file mode 100644
index 00000000..6be2a0fe
--- /dev/null
+++ b/lib/kotext/TODO
@@ -0,0 +1,13 @@
+Save Oasis File:
+----------------
+Done:
+-> Save/load field variables
+-> Save/load note variable
+-> Save/load date/time style format
+
+In progress:
+-> Save/load custom variable (add info into meta.xml)
+
+Todo:
+-> Save/load mail merge variable
+
diff --git a/lib/kotext/TimeFormatWidget.cpp b/lib/kotext/TimeFormatWidget.cpp
new file mode 100644
index 00000000..7479131d
--- /dev/null
+++ b/lib/kotext/TimeFormatWidget.cpp
@@ -0,0 +1,139 @@
+#include "timedateformatwidget.h"
+#include "TimeFormatWidget.h"
+#include "TimeFormatWidget.moc"
+#include <qdatetime.h>
+#include <qcombobox.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <qlineedit.h>
+#include <knuminput.h>
+#include <KoVariable.h>
+
+/*
+ * Constructs a TimeFormatWidget which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ */
+TimeFormatWidget::TimeFormatWidget( QWidget* parent, const char* name, WFlags fl )
+ : TimeDateFormatWidgetPrototype( parent, name, fl )
+{
+ setCaption( i18n( "TimeFormat", "This Dialog Allows You to Set the Format of the Time Variable" ) );
+
+ QStringList listTimeFormat = KoVariableTimeFormat::staticTranslatedFormatPropsList();
+ combo1->insertStringList(listTimeFormat);
+
+ combo2->insertItem( i18n( "Hour" ) );
+ combo2->insertItem( i18n( "Hour (2 digits)" ) );
+ combo2->insertItem( i18n( "Minute" ) );
+ combo2->insertItem( i18n( "Minute (2 digits)" ) );
+ combo2->insertItem( i18n( "Second" ) );
+ combo2->insertItem( i18n( "Second (2 digits)" ) );
+ combo2->insertItem( i18n( "Millisecond (3 digits)" ) );
+ combo2->insertItem( i18n( "am/pm" ) );
+ combo2->insertItem( i18n( "AM/PM" ) );
+ combo2->setCurrentItem( 0 );
+
+ label_correction->setText(i18n("Correct in Minutes"));
+ connect( CheckBox1, SIGNAL(toggled ( bool )),this,SLOT(slotPersonalizeChanged(bool)));
+ connect( combo1, SIGNAL(activated ( const QString & )), this, SLOT(slotDefaultValueChanged(const QString &)));
+ connect( combo1, SIGNAL(textChanged ( const QString & )), this, SLOT(slotDefaultValueChanged(const QString &)));
+ connect( KIntNumInput1, SIGNAL(valueChanged(int)), this, SLOT( slotOffsetChanged(int)));
+ slotPersonalizeChanged(false);
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+TimeFormatWidget::~TimeFormatWidget()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * public slot
+ */
+void TimeFormatWidget::slotDefaultValueChanged(const QString & )
+{
+ updateLabel();
+}
+
+void TimeFormatWidget::slotOffsetChanged(int)
+{
+ updateLabel();
+}
+
+void TimeFormatWidget::slotPersonalizeChanged(bool b)
+{
+ combo2->setEnabled(b);
+ combo1->setEditable(b);
+ TextLabel1->setEnabled(b);
+ updateLabel();
+
+}
+
+void TimeFormatWidget::comboActivated()
+{
+ QString string=combo2->currentText();
+ if(string==i18n("Hour"))
+ combo1->lineEdit()->insert("h");
+ else if(string==i18n("Hour (2 digits)"))
+ combo1->lineEdit()->insert("hh");
+ else if(string==i18n("Minute"))
+ combo1->lineEdit()->insert("m");
+ else if(string==i18n("Minute (2 digits)"))
+ combo1->lineEdit()->insert("mm");
+ else if(string==i18n("Second"))
+ combo1->lineEdit()->insert("s");
+ else if(string==i18n("Second (2 digits)"))
+ combo1->lineEdit()->insert("ss");
+ else if(string==i18n("Millisecond (3 digits)"))
+ combo1->lineEdit()->insert("zzz");
+ else if(string==i18n("AM/PM"))
+ combo1->lineEdit()->insert("AP");
+ else if(string==i18n("am/pm"))
+ combo1->lineEdit()->insert("ap");
+ updateLabel();
+ combo1->setFocus();
+}
+
+/*
+ * public slot
+ */
+void TimeFormatWidget::updateLabel()
+{
+ KoVariableTimeFormat format;
+ format.setFormatProperties( resultString() );
+
+ QTime ct = QTime::currentTime().addSecs(correctValue()); // ### TODO: dialog says correct in *minutes*
+ label->setText( format.convert( ct ) );
+}
+
+QString TimeFormatWidget::resultString()
+{
+ const QString lookup(combo1->currentText());
+ const QStringList listTranslated( KoVariableTimeFormat::staticTranslatedFormatPropsList() );
+ const int index = listTranslated.findIndex(lookup);
+ if (index==-1)
+ return (lookup); // Either costum or non-locale
+
+ // We have now a locale format, so we must "translate" it back;
+
+ // Lookup untranslated format
+ const QStringList listRaw( KoVariableTimeFormat::staticFormatPropsList() );
+
+ QStringList::ConstIterator it( listRaw.at(index) );
+ Q_ASSERT( it != listRaw.end() );
+ if ( it != listRaw.end() )
+ return *it;
+ kdError(32500) << "Internal error: could not find correcponding time format: " << lookup << endl;
+ return QString::null; // Something is wrong, give back a default
+}
+
+int TimeFormatWidget::correctValue()
+{
+ return KIntNumInput1->value()*60;
+}
diff --git a/lib/kotext/TimeFormatWidget.h b/lib/kotext/TimeFormatWidget.h
new file mode 100644
index 00000000..b98bf220
--- /dev/null
+++ b/lib/kotext/TimeFormatWidget.h
@@ -0,0 +1,22 @@
+#ifndef TIMEFORMATWIDGET_H
+#define TIMEFORMATWIDGET_H
+#include "timedateformatwidget.h"
+
+class TimeFormatWidget : public TimeDateFormatWidgetPrototype
+{
+ Q_OBJECT
+
+public:
+ TimeFormatWidget( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~TimeFormatWidget();
+ QString resultString();
+ int correctValue();
+public slots:
+ void updateLabel();
+ void comboActivated();
+ void slotPersonalizeChanged(bool b);
+ void slotDefaultValueChanged(const QString & );
+ void slotOffsetChanged(int);
+};
+
+#endif // TIMEFORMATWIDGET_H
diff --git a/lib/kotext/configure.in.bot b/lib/kotext/configure.in.bot
new file mode 100644
index 00000000..1d19ed69
--- /dev/null
+++ b/lib/kotext/configure.in.bot
@@ -0,0 +1,6 @@
+if test -z "$LIBKSPELL2"; then
+ echo ""
+ echo "You don't use kdelibs CVS (kspell2 not found). Spell-checking disabled."
+ echo ""
+ all_tests=bad
+fi
diff --git a/lib/kotext/configure.in.in b/lib/kotext/configure.in.in
new file mode 100644
index 00000000..2132a5cb
--- /dev/null
+++ b/lib/kotext/configure.in.in
@@ -0,0 +1,16 @@
+ AC_LANG_SAVE
+ AC_LANG_C
+ dnl Check for aspell library
+ KDE_CHECK_HEADERS([kspell2/broker.h])
+ if test "x$ac_cv_header_kspell2_broker_h" = "xyes"; then
+ dnl the header and the lib exist -> ok
+ dnl this is for config.h
+ AC_DEFINE(HAVE_LIBKSPELL2, 1, [If we are going to use libkspell2 for spell-checking])
+ LIBKSPELL2="-lkspell2"
+ AC_MSG_RESULT([found in $ac_kspell2_includes])
+ else
+ LIBKSPELL2=""
+ AC_MSG_RESULT([not found -- spell-checking will be disabled])
+ fi
+ AC_SUBST(LIBKSPELL2)
+ AC_LANG_RESTORE
diff --git a/lib/kotext/kodecorationtabbase.ui b/lib/kotext/kodecorationtabbase.ui
new file mode 100644
index 00000000..f9bb8176
--- /dev/null
+++ b/lib/kotext/kodecorationtabbase.ui
@@ -0,0 +1,360 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KoDecorationTabBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>decorationTab</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>368</width>
+ <height>235</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>colorGroupBox</cstring>
+ </property>
+ <property name="title">
+ <string>Colors</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textColorLabel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Text color:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>textKColorButton</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>backgroundColorLabel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Background color:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>backgroundKColorButton</cstring>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="1" column="1">
+ <property name="name">
+ <cstring>backgroundKColorButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="0" column="1">
+ <property name="name">
+ <cstring>textKColorButton</cstring>
+ </property>
+ <property name="text">
+ <string>Text Color</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>shadowGroupBox</cstring>
+ </property>
+ <property name="title">
+ <string>Text Shadow</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>shadowColorLabel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Shadow color:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>shadowKColorButton</cstring>
+ </property>
+ </widget>
+ <widget class="KDoubleNumInput" row="1" column="1">
+ <property name="name">
+ <cstring>shadowDistanceKDoubleNumInput</cstring>
+ </property>
+ <property name="precision">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="0" column="1">
+ <property name="name">
+ <cstring>shadowKColorButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>shadowDistanceLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Shadow &amp; distance:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>shadowDistanceSpinBox</cstring>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="1" column="2">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QButtonGroup" row="0" column="3" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>shadowDirectionButtonGroup</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KPushButton" row="0" column="0">
+ <property name="name">
+ <cstring>luShadowKPushButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="on">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId" stdset="0">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>uShadowKPushButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId" stdset="0">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="0" column="2">
+ <property name="name">
+ <cstring>ruShadowKPushButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId" stdset="0">
+ <number>3</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="1" column="2">
+ <property name="name">
+ <cstring>rShadowKPushButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image3</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId" stdset="0">
+ <number>4</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="2" column="2">
+ <property name="name">
+ <cstring>rbShadowKPushButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image4</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId" stdset="0">
+ <number>5</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="2" column="1">
+ <property name="name">
+ <cstring>bShadowKPushButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image5</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId" stdset="0">
+ <number>6</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="2" column="0">
+ <property name="name">
+ <cstring>lbShadowKPushButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image6</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId" stdset="0">
+ <number>7</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="1" column="0">
+ <property name="name">
+ <cstring>lShadowKPushButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image7</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId" stdset="0">
+ <number>8</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+</widget>
+<images>
+ <image name="image0">
+ <data format="PNG" length="112">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000003749444154388d6360180594024624f67f0af4c20113f96e216ccb7f38419a01282ea5ba0b470da4ae818c0c38d216b9068e8251402400000dca0315bbc793990000000049454e44ae426082</data>
+ </image>
+ <image name="image1">
+ <data format="PNG" length="101">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000002c49444154388d636018059402462c62ff293183897cb760072ce80214398f81062e1c35702418380a46020000ac0d021622311a270000000049454e44ae426082</data>
+ </image>
+ <image name="image2">
+ <data format="PNG" length="112">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000003749444154388d636018059402463c72ffc9318b897cb760072ce802ff497419ba17a9eec25103290718b14c06408968aabb70148c0400000152031889836c130000000049454e44ae426082</data>
+ </image>
+ <image name="image3">
+ <data format="PNG" length="100">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000002b49444154388d63601805c31f30a20bfc6760f84fa6018c0c0c0c0c4c94ba081d8c1a38120c1c0523010000ee1e0210bc7d1e170000000049454e44ae426082</data>
+ </image>
+ <image name="image4">
+ <data format="PNG" length="116">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000003b49444154388d63601805c31f30a20bfc6760f84fa20128663051ea2274400d03ff3320f96a50ba70a41b88910e910049e9116616d55d380a280700c2810511acdae06c0000000049454e44ae426082</data>
+ </image>
+ <image name="image5">
+ <data format="PNG" length="107">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000003249444154388d63601805c31f30a20bfc6760f84fa20128663051ea2274306ae0483090055d0023619208a8eec25140390000fabd0217e332fc180000000049454e44ae426082</data>
+ </image>
+ <image name="image6">
+ <data format="PNG" length="118">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000003d49444154388d63601805c31f30a20bfc6760f84fa20128663051ea2274c082c426c965b800d55d386a20e500390d911acb1869988181062e1c0594030091380414e0aeb3520000000049454e44ae426082</data>
+ </image>
+ <image name="image7">
+ <data format="PNG" length="96">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000002749444154388d63601805c31f3022b1ffc309d20c40368381895217a1835103478281a360240000f61e021097bbc8b20000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/lib/kotext/kofonttabbase.ui b/lib/kotext/kofonttabbase.ui
new file mode 100644
index 00000000..bdaa3549
--- /dev/null
+++ b/lib/kotext/kofonttabbase.ui
@@ -0,0 +1,28 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KoFontTabBase</class>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>fontPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>&amp;Font</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KFontChooser_local">
+ <property name="name">
+ <cstring>characterFont</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+<layoutdefaults spacing="6" margin="11"/>
+<includes>
+ <include location="local" impldecl="in declaration">KFontDialog_local.h</include>
+</includes>
+<includehints>
+ <includehint>KFontDialog_local.h</includehint>
+</includehints>
+</UI>
diff --git a/lib/kotext/kohighlightingtabbase.ui b/lib/kotext/kohighlightingtabbase.ui
new file mode 100644
index 00000000..939b66ca
--- /dev/null
+++ b/lib/kotext/kohighlightingtabbase.ui
@@ -0,0 +1,140 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KoHighlightingTabBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>highlightingTabBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>320</width>
+ <height>297</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KColorButton" row="1" column="2">
+ <property name="name">
+ <cstring>underlineKColorButton</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="0">
+ <property name="name">
+ <cstring>underlineWordByWordCheckBox</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Word by word</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Underlining:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>underlineStyleKComboBox</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Strikethrough:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>strikethroughStyleKComboBox</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="1" column="1">
+ <property name="name">
+ <cstring>underlineLineStyleKComboBox</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="3" column="1">
+ <property name="name">
+ <cstring>strikethroughLineStyleKComboBox</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="3" column="0">
+ <property name="name">
+ <cstring>strikethroughStyleKComboBox</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="1" column="0">
+ <property name="name">
+ <cstring>underlineStyleKComboBox</cstring>
+ </property>
+ </widget>
+ <widget class="QButtonGroup" row="5" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>capitalisationButtonGroup</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Capitalization</string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ </grid>
+ </widget>
+ <spacer row="6" column="0">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>41</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>kcombobox.h</includehint>
+</includehints>
+</UI>
diff --git a/lib/kotext/kohyphen/Makefile.am b/lib/kotext/kohyphen/Makefile.am
new file mode 100644
index 00000000..8e91bd60
--- /dev/null
+++ b/lib/kotext/kohyphen/Makefile.am
@@ -0,0 +1,21 @@
+INCLUDES = $(KOFFICECORE_INCLUDES) $(KOFFICEUI_INCLUDES) $(all_includes)
+KDE_CXXFLAGS = $(USE_EXCEPTIONS)
+
+METASOURCES = AUTO
+
+noinst_HEADERS = hnjalloc.h hyphen.h kohyphen.h
+
+noinst_LTLIBRARIES = libkohyphen.la
+libkohyphen_la_SOURCES = hnjalloc.c hyphen.c kohyphen.cpp
+libkohyphen_la_LIBADD = $(LIB_KDECORE)
+libkohyphen_la_LDFLAGS = $(all_libraries) -no-undefined
+
+dictsdir = $(kde_datadir)/koffice/hyphdicts
+
+SUBDIRS = . hyphdicts
+
+check_PROGRAMS = kohyphentest
+
+kohyphentest_SOURCES = kohyphentest.cpp
+kohyphentest_LDADD = ./libkohyphen.la $(LIB_QT) $(LIB_KDECORE)
+kohyphentest_LDFLAGS = $(KDE_RPATH) $(all_libraries)
diff --git a/lib/kotext/kohyphen/hnjalloc.c b/lib/kotext/kohyphen/hnjalloc.c
new file mode 100644
index 00000000..a102db43
--- /dev/null
+++ b/lib/kotext/kohyphen/hnjalloc.c
@@ -0,0 +1,72 @@
+/* LibHnj is dual licensed under LGPL and MPL. Boilerplate for both
+ * licenses follows.
+ */
+
+/* LibHnj - a library for high quality hyphenation and justification
+ * Copyright (C) 1998 Raph Levien, (C) 2001 ALTLinux, Moscow
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+*/
+
+/*
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.0 (the "MPL"); you may not use this file except in
+ * compliance with the MPL. You may obtain a copy of the MPL at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the MPL is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the MPL
+ * for the specific language governing rights and limitations under the
+ * MPL.
+ *
+ */
+/* wrappers for malloc */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+void *
+hnj_malloc (int size)
+{
+ void *p;
+
+ p = malloc (size);
+ if (p == NULL)
+ {
+ fprintf (stderr, "can't allocate %d bytes\n", size);
+ exit (1);
+ }
+ return p;
+}
+
+void *
+hnj_realloc (void *p, int size)
+{
+ p = realloc (p, size);
+ if (p == NULL)
+ {
+ fprintf (stderr, "can't allocate %d bytes\n", size);
+ exit (1);
+ }
+ return p;
+}
+
+void
+hnj_free (void *p)
+{
+ free (p);
+}
+
diff --git a/lib/kotext/kohyphen/hnjalloc.h b/lib/kotext/kohyphen/hnjalloc.h
new file mode 100644
index 00000000..67816a75
--- /dev/null
+++ b/lib/kotext/kohyphen/hnjalloc.h
@@ -0,0 +1,46 @@
+/* LibHnj is dual licensed under LGPL and MPL. Boilerplate for both
+ * licenses follows.
+ */
+
+/* LibHnj - a library for high quality hyphenation and justification
+ * Copyright (C) 1998 Raph Levien
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+/*
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.0 (the "MPL"); you may not use this file except in
+ * compliance with the MPL. You may obtain a copy of the MPL at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the MPL is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the MPL
+ * for the specific language governing rights and limitations under the
+ * MPL.
+ *
+ */
+/* wrappers for malloc */
+
+void *
+hnj_malloc (int size);
+
+void *
+hnj_realloc (void *p, int size);
+
+void
+hnj_free (void *p);
+
diff --git a/lib/kotext/kohyphen/hyphdicts/Makefile.am b/lib/kotext/kohyphen/hyphdicts/Makefile.am
new file mode 100644
index 00000000..d8b8e55a
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/Makefile.am
@@ -0,0 +1,4 @@
+dicts_DATA = dicts.xml hyph_cs.dic hyph_en.dic hyph_hu.dic hyph_uk.dic hyph_da.dic hyph_de.dic hyph_en_CA.dic hyph_es.dic hyph_fr.dic hyph_it.dic hyph_nl.dic hyph_pt_BR.dic hyph_pt.dic hyph_pt_PT.dic hyph_ru.dic hyph_sk.dic hyph_sv.dic hyph_sl.dic
+dictsdir = $(kde_datadir)/koffice/hyphdicts
+
+EXTRA_DIST = $(dicts_DATA)
diff --git a/lib/kotext/kohyphen/hyphdicts/dicts.xml b/lib/kotext/kohyphen/hyphdicts/dicts.xml
new file mode 100644
index 00000000..ecffcd51
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/dicts.xml
@@ -0,0 +1,21 @@
+<dicts>
+ <dict lang="cs" encoding="ISO8859-2"/>
+ <dict lang="en" encoding="ISO8859-1"/>
+ <dict lang="hu" encoding="ISO8859-2"/>
+ <dict lang="ru" encoding="KOI8-R"/>
+ <dict lang="uk" encoding="KOI8-U"/>
+ <dict lang="da" encoding="ISO8859-1"/>
+ <dict lang="de" encoding="ISO8859-1"/>
+ <dict lang="en_CA" encoding="ISO8859-1"/>
+ <dict lang="es" encoding="ISO8859-1"/>
+ <dict lang="et" encoding="ISO8859-1"/>
+ <dict lang="fr" encoding="ISO8859-1"/>
+ <dict lang="it" encoding="ISO8859-1"/>
+ <dict lang="nl" encoding="ISO8859-1"/>
+ <dict lang="pt_BR" encoding="ISO8859-1"/>
+ <dict lang="pt" encoding="ISO8859-1"/>
+ <dict lang="pt_PT" encoding="ISO8859-1"/>
+ <dict lang="sk" encoding="ISO8859-2"/>
+ <dict lang="sl" encoding="ISO8859-2"/>
+ <dict lang="sv" encoding="ISO8859-1"/>
+</dicts>
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_cs.dic b/lib/kotext/kohyphen/hyphdicts/hyph_cs.dic
new file mode 100644
index 00000000..bfae8339
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_cs.dic
@@ -0,0 +1,3637 @@
+ISO8859-2
+.a2
+.a4da
+.a4de
+.a4di
+.a4do
+.a4d
+.a4kl
+.a4ko
+.a4kr
+.a4ku
+.ale3x
+.a4ra
+.a4re
+.a4ri
+.a4ro
+.a4ry
+.a4r
+.a4sa
+.a4se
+.a4so
+.as3t3
+.a4sy
+.a4ta
+.a4te
+.at3l
+.a4to
+.a4tr
+.a4ty
+.a4ve
+.b2
+.c2
+.ch2
+.cyk3
+.d2
+.dez3
+.d4na
+.dne4
+.dne4k
+.d4ny
+.dos4
+.d4ve
+.d4v
+.d4v
+.e2
+.e4ch
+.e4ko
+.es3k
+.es3t
+.e4ve
+.f4ri
+.g2
+.h2
+.h4le
+.h4ne
+.i2
+.i4na
+.i4ni
+.i4no
+.is3l
+.j2
+.j4ak
+.je4dl
+.j4se
+.j4zd
+.jd4
+.k2
+.k4li
+.k4ly
+.k3d
+.l2
+.le4gr
+.li3kv
+.m2
+.mi3st4
+.moud3
+.na34
+.ne3c
+.ne4
+.ne3
+.ni2t
+.no4s3t
+.n4vp
+.n1
+.n4k
+.o2
+.o4b
+.ode3
+.od3l
+.od3r
+.o4ka
+.o4ko
+.o4na
+.o4ne
+.o4ni
+.o4no
+.o4nu
+.o4ny
+.o4n
+.o4n
+.o4pe
+.o4po
+.o4se
+.o4sl
+.os4to
+.os3t3r
+.os4t
+.ot3r
+.ot3v
+.o4t
+.o4t
+.ov4t
+.o4za
+.oz3do
+.o4zi
+.o4zo
+.o4zu
+.o4k
+.o4l
+.o4i
+.p2
+.pa4re
+.pa3t
+.polk4l
+.po34
+.p4ro
+.p4r
+.p4se
+.pu3b
+.r2
+.rej4
+.re3s
+.ro4k
+.roze3
+.roz3r
+.ru4dl
+.s2
+.s4ch
+.s4ci
+.sem4
+.se3pn
+.s4ke
+.sk4l
+.s4k
+.s4le
+.s4na
+.s4ny
+.s4pe
+.s4po
+.st2
+.s4t
+.s4i
+.t2
+.u2
+.u4ba
+.u4be
+.u4bi
+.u4bo
+.u4de
+.u4di
+.u4do
+.u4du
+.u4d
+.uh4n
+.uj4m
+.u4ko
+.u4ku
+.ul4h
+.u4ma
+.u4me
+.u4mi
+.u4mu
+.u4ne
+.u4ni
+.u4pa
+.u4pe
+.u4pi
+.up4n
+.u4po
+.u4pu
+.u4p
+.u4p
+.u4p
+.u4ra
+.u4ro
+.u4r
+.us2
+.u4so
+.u4st
+.u4sy
+.u4s
+.ut2
+.u4vi
+.u4ze
+.u4e
+.u4i
+.u4
+.u4e
+.u4i
+.u4k
+.u4t
+.u4
+.u4i
+.u4n
+.u4o
+.u4
+.v2
+.va4dl
+.v4po
+.vy3
+.v4z
+.v1
+.v4i
+.y4or
+.y4ve
+.z2
+.za3
+.zao3s
+.zar2
+.za2
+.zd2
+.z4di
+.z4dr
+.z4ky
+.z4mn
+.z4no
+.z4nu
+.z4n
+.z4n
+.z4pe
+.z4po
+.z4t
+.z4ve
+.z4vi
+.2
+.4te
+.2
+.2
+.2
+.2
+.e3t
+.4ka
+.4ke
+.4ky
+.4o
+.4
+.2
+.4d
+.2
+a1
+2a.
+aa3t2
+ab3lon
+ab4l
+ab3ri
+ab4sb
+ab2st
+ac4ci
+a2d
+a3da
+a3de
+a3di
+ad2la
+a4dli
+a4dl
+a4dl
+ad4me
+ad4mu
+a3do
+ado4s
+a3d3ra
+ad3ri
+a3dr
+a3du
+a4du
+3a3dva
+ad3vo
+a3dy
+a3d
+a3d
+a3d
+a3d
+ad4z
+ad4
+a3d
+a3d
+ae4vi
+afi2a
+a2g
+a3ga
+ag4fa
+a3go
+ag3ro
+a3gu
+a3g
+ah4li
+ah3v
+a2i
+a3in
+ai4re
+a3iv
+a2jd
+a2jm
+aj4me
+aj2o
+a2k
+a3ke
+a3ki
+a3kl
+ak4ni
+a3ko
+a3kr
+a3ku
+a3ky
+a3k
+a3k
+a3k
+a3k
+a3k
+al4fb
+al4kl
+al4tz
+al3
+am4bd
+am4kl
+am4nu
+amo3s
+am4i
+a4nae
+a4name
+an4dt
+ane4sk
+aneu4
+an4sc
+an4sg
+an4sl
+an4sm
+an2sp
+an4sv
+an4t
+an4h
+ao4ed
+ao4hm
+ao4st
+ao4t
+ap4r.
+a4pso
+ap3t
+a4p.
+a2r
+a3ra
+ar4dw
+a3re
+a4rer
+ar4gl
+a3ri
+ar4kh
+a3ro
+a4rox
+ar3st
+a3ru
+ar2va
+a3ry
+a3r
+a3r
+ar32
+ar4r
+a3r
+ars3
+a3r
+a2s
+a3sa
+a3se
+a3sh
+a3sin
+as3n
+a3so
+as3pi
+as4tat
+a4stk
+as4tm
+a4stru.
+as3tv
+a3su
+a3sv
+a3sy
+a3s
+a3s
+a3s
+a3s
+a2t
+a3ta
+at4ch
+a3te
+a3ti
+a4tio
+at4kl
+at3lo
+a3to
+a3tr
+at3re
+at3ron
+at3rov
+a4tru
+at4r
+at4th
+a3tu
+a3tv
+a3ty
+a3t
+a3t
+a3t
+a3t
+a3t
+at1
+a4t.
+a3t
+a3t
+a2u
+au4gs
+a3uj
+auj4m
+aus3t
+a3u
+2av
+av3d
+av4d.
+av3lo
+a4vlu
+a4vl
+av3t
+av4ti
+2ay
+ay4on
+az3k
+az3la
+az4l
+az3ni
+a3zp
+a2
+a3a
+a3e
+a3i
+a3l
+a4m
+a3o
+a3u
+a3
+a3
+a3
+a2
+a3o
+a3u
+ae4k
+a3
+a4pl
+a4py
+a2
+a3t
+2b.
+3ba.
+ba4br
+ba4chr
+ba3ka
+ba4se
+2b1c
+b1d
+be4ef
+be4et
+bej4m
+be3p
+beu4r
+be2z3
+beze3
+b1h
+1bi
+bi2b3
+bis3
+bist4
+bi4tr
+b1j
+2bk
+3bl.
+bl4bl
+b2lem
+b2les
+3blk
+b4ln
+b2lm
+b1m
+2bn
+1bo
+bo4et
+bo4jm
+bo4ok
+bo4tr
+bou3s
+bo4k
+b2ral
+b2ran
+2bri
+b4rodit
+b4rou
+broz4
+b2ru
+b3ru.
+b3rub
+b2rn
+2b1s2
+bs3tr
+2b1t
+bth4
+bu2c
+bu4en
+3by.
+bys3
+by4sm
+by4t
+by4zn
+b2z
+1b
+2b1
+b4rc
+1b.
+b3ta
+1b
+3bn
+b4rc
+2b
+b3a
+b3e.
+be4s
+b1
+2b2
+2c.
+1ca
+cad4l
+ca4es
+2cc
+1ce
+cech4
+ced4l
+celo3
+ce4ns
+ce4ov
+ce4ps
+cer4v
+ce2u
+2ch.
+1cha
+4chalg
+3che
+4che.
+2chl
+ch4ly
+ch4mb
+2ch3n
+2cht
+4chte
+1chu
+ch4u.
+1chy
+1ch
+2ch
+1ci
+cien4c
+cik4l
+2ck2
+c4ket
+ckte4r
+2cl
+c3la
+c3l
+2cn
+1co
+co4at
+co4mm
+co4p
+c2p
+2ct
+c2ti
+ctis4
+ct4la
+ct2n
+c3tv
+c2t
+cuk1
+1c2v
+cy2
+1c
+1c
+c4pl
+2c
+1c
+2d.
+1da
+da3d
+da4j
+da4kl
+da4tr
+d1b
+d2ba
+4dbat.
+d2b
+2d1c
+dch4l
+3dch4n
+d1d
+dd4ha
+1de
+de4bre
+de3hn
+de3jd
+dej4mo
+de3kl
+de3kv
+de2na
+de2oz
+de3sl
+de4sm
+de4so
+de2sp
+des4t
+de3str
+de1x
+de4xt
+de2z
+de3zn
+dez3o
+de3t
+de4p
+2d1h
+1di
+di4gg
+4dind
+dis3k
+di4so
+d1j
+dj4us
+2dk
+d3kv
+3dl.
+d1la
+d4lab
+d4lak
+d3li
+1dln
+d2lou
+d3lou.
+d2lu
+d3lu
+d4l
+d1l
+2d1l
+d2l
+d1m
+1dmd
+dm4
+2dn
+1do
+4dobl
+4doboj
+dob4rat
+do3by
+do3b
+do3b
+do1d
+4do4dd
+4do4dj
+dod4n
+do3h
+doj4m
+4dokn
+4doly
+do3mn
+domoh4
+do3p
+do4pc
+dop4n
+dor2v
+do1s
+dos4p
+dos4tiv
+do3t
+do3uk
+do3u
+do3z2
+doz4n
+do3
+4do4n
+do4t
+do4p
+4dran
+d4rap
+d1re
+d4ren
+3drobn
+d3ros
+d3rou
+d3ro
+dr4sc
+d3ru
+d3r
+d3r
+d4rv
+2d1s2
+ds4k
+ds4po
+d1t
+d3tl
+d3t
+1du
+dum3
+du3na
+du3p
+du4pn
+2dur
+du3si
+du4.
+d2v
+d4vac
+d3ve
+d3vl
+d3vr
+d3vy
+d3v
+d3v
+d3v
+1dy
+dy4su
+d3zb
+d3zd
+d3zn
+1d
+2d1
+1d
+1d
+3dj
+1d
+2d
+d1a
+de4k
+d4ep
+de4pn
+d4ev
+d1
+d2t
+2d2
+d3k
+d3t
+1d
+3d.
+d3s
+1d
+d22
+2e.
+e1a
+ea3dr
+e2ar
+e1b
+eb4er
+ebez2
+eb4li
+e2b
+e4ch.
+e3chl.
+e4chm
+e3cho
+e2chr
+e3chv
+e4ch
+ed4be
+ed4kv
+ed1l
+ed2ma
+e3dmn
+ed3v
+ed4
+e1e
+ee4th
+ee3xi
+eg4gi
+e1ha
+e1he
+ehno4
+eh4n
+e1ho
+e1hr
+e1hu
+e1hy
+e1h
+e1h
+e1i
+eilus3
+ej3ag
+e3jas
+e1je
+e3jed
+ej3ele
+e3jez
+ej3in
+e3jis
+ej1m
+ej3mo
+e3jmu
+ej1o
+ej1u
+eju3st
+ej3v
+e2k
+e3ka
+e3ke
+e4kly
+e3ko
+e3kr
+e3ku
+e3ky
+e3k
+e3k
+e3k
+e3k
+e3k
+e1la
+e4lau
+el4dv
+e1le
+e1lo
+e1lu
+e1ly
+el4ze
+e1l
+e1l
+e1l
+e1ml
+e4ml
+emo3k
+e1mr
+e1my
+e3m
+e1m
+e1m
+e3m
+e3m
+e1m
+em3e
+en4dv
+enitos4
+en4sc
+en4si
+ent3r
+e1o
+eo3by
+eoch3r
+eod3l
+eo4du
+e4ole
+eo1s
+eo2st
+eo4t
+eo3z
+eo4zb
+eo4zd
+eoe3
+epa3t
+e2pl
+e4pni
+ep2no
+e4pn
+epo3t
+epro4z
+ep4tl
+ep4tm
+ep4tn
+e4ptu
+epy3
+2er
+e1ra
+er4a.
+e1re
+e1ri
+e1ro
+er3s
+er4s.
+er4sn
+e1ru
+e1ry
+e1r
+e1r
+e1r
+e1r
+e1s
+e4sag
+e2sce
+e4sin
+esi4s
+e2sk
+es4k.
+e4s4kn
+es3ku.
+es3ky
+es3k
+e2sl
+e4s3li
+e4sly
+es2m
+e4sp.
+es4pe
+e2st
+e4st.
+e4ste
+es3ti
+es4tol
+e4strou
+es3tn
+e1t
+e4tki
+e4tkr
+e4tli
+e4tly
+et3ri
+et3ro
+et3r
+et1
+et4n
+e1u
+eu3b
+eu3ct
+eu3d
+eu3k
+eu3m
+eu4m.
+eu3n
+eu3p
+eu3r
+eu4r.
+e4ura
+eu4ras
+eu4rg
+eu3s2
+eu3t
+e4u4t.
+eu4tra
+eu4ts
+eu3v
+eu3z
+eu3
+e3vd
+eve4
+e3v2k
+e4vsk
+evy3
+evyjad4
+evyp4t
+evy4k
+ev4tr
+ex4ta
+e3xu
+ey4or
+ey4ov
+ezaos3
+ez4ap
+ez4bo
+ez3de
+ez3dov
+ez3du
+ez4d
+e3ze
+ez4ed2
+ez4ej
+ez4el
+ez4er
+ez4es
+ez4ez
+ez4e
+ezis4
+ez4it
+ez4le
+ez4n
+ez4n
+ez4py
+ez2t
+ez4c
+ez4h
+ez4e
+e3z
+e3z
+ez4e
+e1
+e4kat
+e1t
+e4te
+e4ti
+e4t
+e2
+e3o
+e3u
+e3
+e3n
+e1
+ee4k
+e4ku
+e3
+e2
+e3e
+e3i
+e4ka
+e3l
+e4l
+e3o
+e4to
+eth4
+e3
+e1
+emy4
+e3n
+e3p
+e3t
+e3
+e4
+1f
+2f.
+fe4in
+fene4
+fe4ue
+fi4em
+fi4fl
+f2l
+f3l
+fl4r
+fm4no
+2fn
+2fr
+f4ran
+f4ras
+3frek
+f1ri
+2fs
+fs4te
+2ft
+fu4ch
+2f
+f2
+1g
+2g.
+ga4u
+ge2s
+ghou4
+3gic
+3gin
+gi4m
+g4lom
+2g1m
+2gn
+g4noi
+g4nos
+go1
+go4hm
+3graf
+gu4el
+gu4it
+gu3m
+gu4m.
+gus4t
+gu3v
+2h.
+ha4ag
+ha4ar
+ha4bl
+ha4br
+ha3dl
+ha4dla
+ha4ke
+has3t
+hatos4
+ha4yd
+h2b
+h2c
+2hd
+he4br
+he4id
+hej4s
+he2s
+he2u
+he3x
+hi4an
+hi3er
+hi4gh
+hi4re
+2hk
+4hla.
+h4led
+h3len
+2hli
+4h3lo.
+h3lob
+h3lop
+h3lov
+h3luj
+2h1ly
+4hl.
+h4ls
+h3l.
+4hlk
+2hl
+h2m
+2h2n
+h3ne
+h4ned
+h3niv
+h4noj
+3hnd
+3hodin
+ho3str
+hos4t
+4hove
+4hovna
+4hovny
+4hovn
+4hovn
+h2r
+hra4p
+2h1t
+h4tin
+h2t
+h4tt
+hu4ch
+hu3mo
+hu4t
+2h2v
+hyd1
+hy4do
+hy4ps
+hys3
+hy2t3r
+hy4zd
+h1
+2h
+h2
+h4by
+h4bl
+h2
+2i.
+i1a
+ia3d
+ia3g2
+i4al.
+ias4t
+ia4tr
+i1b
+ib2l
+i2b1r
+i1ch
+i4ch
+i1d
+id4ge
+id2l
+id4lo.
+i4dl
+i1em
+i1en
+i1et
+if1r
+ig4ne
+i1h
+i2hl
+i3hl.
+i4hli
+ih3n
+ih4na
+i3im
+i1j
+ijed4
+ij4me
+ij4mi
+i2kl
+ik3le
+ik3lo.
+ik3m
+ik4ry
+i4kve
+ik4
+i1l
+il4ba
+ili4n
+i4lnu
+ilu3
+i1m
+i4mla
+i4mly
+i4mun
+i2n
+i3na
+ina3d
+in4cm
+in4dl
+i3ne
+3infe
+in4gh
+in4gp
+in4gs
+in4gt
+i3ni
+i3no
+i3nu
+i3ny
+i3n
+i3n
+i3n
+i3n
+in4p
+i3n
+i3n
+i1o
+io4sk
+i2ps
+i1r
+iro4s
+i1sa
+is3c
+is4ch
+is4k.
+is3ka
+is3ke
+is3ko.
+is3kr
+is3ku
+is3kv
+is3ky
+i3slav
+is3lo
+is3l
+is3pl
+is3po
+is1t
+is4tal
+is4tat
+is4th
+ist3v
+is3t
+i1sy
+i3s
+i1t
+it1r
+it4rh
+it4rp
+it4se
+it4su
+i2tv
+i1um
+iv3d
+i1x
+ix4td
+i3zp
+iz1r
+i1
+i1l
+i3t
+i4tl
+i4to
+i2
+i1
+i4re.
+i1c
+i1m
+i1
+i1
+i4kl
+i4e
+i2
+i3e
+i3i
+i3k
+i4kr
+i4kv
+i3o
+i4to
+i3u
+i3
+i3
+i2
+i3a
+i3e
+i3i
+i3o
+i3u
+i3
+2j.
+ja2b2
+jac4k
+ja4cq
+ja3d
+ja3g
+j3akt
+j1b2
+jbyst3
+2j1c
+j2d
+j3dob
+j3dok
+j3dos
+j3dr
+j3d
+jd4
+j3d
+jech4
+j3ef
+j3ex
+jez3d
+jg4ra
+2j1h
+1ji
+ji4ch
+jih3l
+ji4m
+j4ina
+jis3k
+jit4ro
+ji2zv
+j1j
+2jk
+j3kv
+2j1l
+j2m
+j3ma
+j3mi
+jmou3d
+2jm
+2jn
+jne3
+j1ob
+j1od
+jod2
+j1oh
+j1op
+j4ora
+j1os
+jo3sv
+j2ov
+j3ovl
+j1o3z2
+2jp
+jpor4
+jpo4zv
+jpz4
+2j1r
+2j1s2
+j4sem
+j4si.
+j4sk.
+js4ko
+js4k
+j4s4k
+j4s4me
+j3sn
+j4sou.
+j4souc
+js4po
+j4s4te
+2j1t
+j3tl
+ju4an
+ju3na
+ju3p
+j1us
+ju3sp
+ju3t
+ju4t.
+ju3v
+ju4xt
+ju3z
+j1u
+ju3i
+2jv2
+j3vd
+j3vn
+2jz
+j3zb
+j3zd
+j3zk
+j3zn
+j3zp
+jd2r
+2j1
+2j
+1j
+j3t
+j4ti
+j3
+2j1
+j3n
+j3
+j3
+2j
+1k
+2k.
+ka4bl
+ka4ch
+ka3dl
+3kaj
+ka3ka
+3kami
+3kan
+ka2p3l
+ka2p3r
+ka2ps
+ka4pv
+ka2p
+kas3t
+kast3r
+3kat
+ka4u
+3kav
+3ka
+3ka
+ka3l
+ka4p
+2k1c
+k2d
+k2e
+ke4bl
+ke3jo
+ke4pr
+ke4ps
+3ket
+2kf
+2kk
+k2l
+3kl.
+4k3la.
+k3lej
+4k3li.
+k4lib
+k3lic
+4klika
+4klo.
+k3los
+2k3ly
+k3l.
+k3l
+k3l
+k3l
+2k2m
+k3m
+2kn
+kna4s
+ko3by
+3kof
+ko4jm
+ko2p
+ko4sk
+ko2t3v
+kous3k
+3kov
+ko3z
+4kroa
+k3rob
+k3rof
+kr2s
+kr4.
+2ks
+2k1t
+kt2r
+kuch4
+ku4f
+ku4hr
+3kuj
+ku3se
+ku3si
+ku3su
+ku4th
+ku3v
+2k2v
+k4vr
+3kyn
+ky2pr
+kyp3
+ky4zn
+3kc
+k4pl
+3kr
+3k
+2k
+k2
+k22
+k3ej
+k4ti
+3k.
+2l.
+1la.
+la4br
+lab4s
+la3ka
+la4nq
+la4ps
+4la3si
+la4v
+la4y.
+la2zm
+2l1b
+2l1c
+2l1d
+ld4ne
+le4ad
+le4au
+lech3t
+leh3n
+le2i
+1lej
+le3jo
+4lejk
+1lel
+4lench
+lepa3d
+lepo4s
+le4pr
+le4ps
+le4sc
+le4sm
+le4sv
+let4li
+let3m
+le2tr
+le4t
+le4uk
+le4vh
+le4vk
+le3xi
+lez3n
+2lf
+2lg
+2lh
+3lhan
+1li
+li4az
+li4bl
+li4bv
+li4dm
+lind4
+3lio
+li4t
+li4vr
+2li
+2lj
+2lk
+l4kat
+l2kl
+lk4nu
+2ll
+2l1m
+2ln
+l4nul
+lo3br
+lo4id
+lo4is
+1los
+lo3sp
+lo3st
+lo3sv
+lo2tr
+lo4t
+lo4u.
+lo3z
+loz4d
+lo4k
+2lp
+l2p
+2l1s2
+l4sla
+ls3n
+lst4n
+l4st
+2l1t
+lt4ra
+lt4ru
+lt4ry
+lu4id
+lu4j.
+lu4k.
+lu4lk
+lu4m.
+lu4mn
+lu3pr
+lu3va
+lu3vl
+lu3vy
+lu3v
+2lv
+2lz
+1l.
+l4j
+l4v
+2l1
+1l.
+1lk
+l4pl
+l4zn
+1l
+2l
+2l2
+l3t
+l4t
+1l
+1l
+l2t
+2l2
+2m.
+1ma
+maj4s
+ma4kl
+ma4kr
+4mald
+mas3k
+mat3r
+ma4tra
+ma4v
+maz3l
+2m1b
+2m1c
+2m1d2
+m2dl
+1me
+3me.
+me4go
+me4is
+met3re
+me3x
+mezi3s
+2mf
+mh4le
+1mi
+mid3l
+mik3r
+mi4xt
+2mk2
+3m2kl
+mk4la
+mk4li
+m2l
+4mla.
+2mle
+ml3h
+ml4h.
+2mli
+ml4sc
+ml4sk
+4mlu.
+2mn
+m3na
+mna4s
+m4noh
+m3nos
+m4noz
+3mno
+m3n
+m3n
+m4nz
+m3nj
+m3n
+1mo
+mod3r
+mo2hl
+mo2k
+mo2s
+mo4s.
+mot3
+4mout
+moza4
+mo3z
+mo3
+2mp
+m4plo
+mpo4s
+m2ps
+mp4se
+mp2t
+mr2s
+2m1s2
+m4stl
+2m1t
+1mu
+mu4fl
+mu3n
+mu4n.
+mu4nd
+mu4nn
+mu4ns
+mu4n
+2mu
+2mv
+mys3lo
+my4k
+2mz
+3m.
+mlo3
+m2s
+2m
+m2e
+m1c
+m4r
+2m2
+m4i
+m3
+m4an.
+3m.
+3m.
+m2
+1n
+2n.
+3na.
+na3ch
+na4do
+na4em
+na3h
+na4h.
+na3jd
+na3ka
+nam4ne
+na3p2
+na3s2
+na4s.
+nat2
+na3tl
+na3t
+na3z
+naz4k
+na4z
+na4.
+na3
+na4n
+2nb
+2n1c
+n4chc
+2n1d
+nd4hi
+ndo4t
+nd2re
+nd4ri
+nd4
+ne1d
+ne4gl
+ne1h
+ne3h4n
+ne2j
+nej3t
+nej3u
+ne3kl
+ne4kro
+ne3kv
+ne4m.
+ne3p
+ne3s2
+ne4s.
+nes4le
+ne4ss
+4nesti
+ne3tl
+net4r
+ne3ud
+ne3v2
+ne4v.
+ne3z
+nez4n
+ne3k
+ne3
+2nf
+n3fr
+2ng
+ng1l
+ng4la
+ng4le
+ng4l
+n4gro
+ng4vi
+nik4t
+ni4mr
+ni4m
+3nio
+3nisk
+2nit
+n1j
+2nk
+2n1l
+2nn
+no3b2
+no4bs
+no3hn
+no4hs
+no4ir
+no4m
+no4sky
+no3sm
+no3str
+not4r
+no3z
+no4zd
+no4k
+2no
+2n1s2
+n2sa
+ns3ak
+ns4ko
+n4soc
+ns3po
+nst4ra
+2n1t
+nte4r3a
+nt4lem
+nt4r.
+nt3ru
+nt3r
+2nub
+nu4gg
+3ny.
+2nz
+3nk
+n3s2
+n4s.
+2n1
+2n
+2nv
+2n
+2n
+2n2
+n3t
+n4o
+n2
+2n
+2o.
+o1a
+oang4
+o1ba
+o1be
+obe3j
+obe3s
+obe3z
+ob1l
+ob1r
+ob4r
+o1bu
+obys4
+ob3z
+o3b
+ob3ez
+o1c
+o4chl
+o2chr
+oc4ke
+oc4ko
+o4ct.
+oct3n
+ocy3
+oc4n
+od3b
+odej4m
+ode3p
+ode3s
+od1l
+o4doc
+odos4
+odo4tk
+od3ra
+od4ran
+od3r
+o3dr
+od3v
+od1
+o1e2
+oe3g
+oe3ti
+o2fl
+ofrek4
+og2
+o3gn
+o1h
+oh4ne
+o1i
+oi4ce
+o4int
+o1j
+o4jar
+oje4dl
+o4jmi
+o4jmov
+o4jmu
+o4jm
+oj2o
+o4juz
+2oka
+ok2te
+o1l
+ol4gl
+ol4to
+o1m
+om4kl
+om2n
+o2n
+o3na
+ona4s
+o3ne
+o3ni
+o3no
+ont4ra
+o3nu
+o3ny
+o3n
+on4ka
+o3n
+o3n
+o3n
+o3n
+o1o
+oo4h
+oote2
+opo3t
+opro4s
+o2ps
+o4ptu
+op4t
+o4p.
+opej4
+ope4jm
+o1ra
+o4rae
+or4dm
+o1re
+o1ri
+o1ro
+or3st
+o1ru
+or4v
+o1ry
+o1r
+o3r
+o1r
+ors3
+o3r
+o1sa
+o4sai
+ose4s
+osi4d
+o1sk
+o4s3ke
+o4sku
+osk3v
+o4sk
+o4sk
+o1sl
+os4la
+os4li
+os4l
+os3mo
+os4mu
+o4st.
+o4stg
+o4stm
+os4tor
+os3tr
+o4st
+o4st
+o4st
+o1sy
+o1t
+ot4kl
+o4tl
+oto3s
+ot3ro
+ot3v
+o3t
+o3t
+ot3i
+o2u
+ou3b
+ou3d
+ou4fl
+ou4il
+ou4is
+ou4k.
+ou3ka
+o4ukl
+ou3kr
+ou3k
+ou3m
+oup3n
+oupo4
+ou4s.
+ou3sa
+ou3se
+ou4sk
+ou3sm
+ou4tv
+ou3v
+ou4vl
+ou4vn
+ouz3d
+o4uk
+ou3i
+ovi4dla
+o4vsk
+ovy2p
+o2vt
+o1x
+o2z
+o3za
+oz1b
+oz4d.
+oz3d
+oz3d
+oz3d
+o3ze
+oze3d2
+ozer4
+oz1h
+o3zi
+oz3j
+oz3k
+oz4ko
+oz1l
+oz3m
+o4zn.
+o3zo
+oz3p
+oz4py
+oz4p
+oz4p
+oz3ro
+oz3ru
+oz3r
+oz3t
+o3zu
+o4zut
+oz3vr
+oz3v
+o3z
+o3z
+oz4s
+o1
+o2k
+o4ka
+o2
+o3a
+o3o
+o1
+oi2s
+o3k
+o4ku
+o4ky
+o3l
+o4l
+o4mo
+o4ti
+o4u
+o3l
+o4mo
+1p
+2p.
+pa4ed
+pa4es
+pa4kl
+pa3si
+pa4t.
+pat4ri
+2p1c
+pe4al
+pede4
+pe4ig
+pe4np
+peri3
+pes3t3
+pe4tra
+3pe
+pi4kr
+pi4pl
+2pk
+p2kl
+p2l
+3pl.
+4p3la.
+pl3h
+pl4h.
+4p3li.
+4plo.
+2pn
+p2nu
+po1b2
+po3c2
+3pod
+podb4h
+pod4nes
+po3dru
+po3dr
+po3h
+poly3
+po3m2
+po4mp
+po4ol
+po3p
+po4p.
+po4pm
+po1s2
+pos4p
+post4r
+po3t2
+po4t.
+po4tn
+po3uk
+po3u
+po3u
+3po3v
+po3z2
+po4zd
+po2
+po3k
+po3te
+po3
+po4v
+2pp
+4pra.
+pra3st
+pr2c
+pro1
+prob2
+pro3p
+pro3t4
+pro3z
+pr2s
+4prn
+pr3
+pse4s
+2p1sk
+p4sut
+2pt
+p4tej
+p4ter
+p4tev
+pt4ri
+p3tu
+p4t.
+pu4dl
+pu4tr
+pyt3l
+p1
+p2c
+pd3l
+p4nv
+p4sl
+2p
+p4rh
+2p.
+pe3h
+pe3j
+pe3t4
+pe3z
+pe32
+pi3
+pih4
+2p
+p4ti
+2p
+qu2
+2r.
+1ra.
+ra4br
+ra4em
+ra4es
+ra4ff
+ra4hl
+ra4hm
+ra4jg
+ra4j
+2rak
+ra4nh
+ra3si
+rast4r
+ra4vv
+ra4wl
+ra4y.
+ra4yo
+ra4m
+4rai
+r1b
+r2bl
+r1c
+rca3
+r3cha
+r3cho
+rc4ki
+r1d
+r4dla
+rdo2s
+re4ad
+re4au
+red4r
+re4et
+re3kl
+re3kvi
+re4mr
+re2sb
+res3l
+retis4
+ret4r
+re4um
+r1ha
+r3hl.
+rh3n
+r1ho
+r3hu
+r1h
+ri4bb
+1ric
+ric4ku
+ri4dg
+ri4dr
+ri4fl
+ri4gh
+ri4zm
+2rk
+r2kl
+r1l
+2r1m
+r4mio
+2rn
+rna4v
+rn4dr
+ro4ad
+ro3by
+rod2l
+ro3d4r
+3rofy
+ro3h
+ro4h.
+ro4jb
+ro4k
+rom3n
+romy4s
+ropt4
+ro2sb
+ro4skv
+ro4sky
+ro3sv
+ro3ti
+ro3tl
+ro4t
+ro3vd
+rov4t
+3rov
+roz3d
+roz3n
+ro4zo
+roz3v
+ro3z
+ro4p
+rpa3d
+2rr
+rr4ha
+rr4ho
+2r1s
+r2st
+r4stu
+rs3tv
+rs3tv
+2r1t
+r2th
+r4tr
+rt4sm
+rtu3
+r2t3v
+rt4zu
+1ru.
+ru3se
+ru3si
+rus3k
+ru3i
+3rvan
+r1x
+1ry.
+rych3
+ryd2
+rys3ky
+rys3t
+ry4zk
+ry4zn
+ry4.
+ry4k
+2rz
+rz3d
+rz3l
+rd4l
+r4d
+1rk
+r3ri
+1r
+r1
+4rit.
+r3t
+3r.
+2r
+2r
+r4n
+r4m.
+rs3ta
+r4v.
+3r.
+r4zn
+2s.
+sa4pf
+sa4pr
+sas3k
+s2b2
+s2c
+s3ca
+s3ce.
+sch2
+sch4l
+sch4n
+3schop
+s3ci
+sci4e
+s3c
+s2d
+1se
+se4au
+se3h
+se4ig
+se4il
+sej4m
+se4ku
+3sel
+se3lh
+3sem
+ser4va
+se3s2
+ses4k
+se4ss
+se4stra
+se4stru
+se4st
+set2
+se3tk
+se3t
+se4ur
+se3z
+se3t
+2sf
+s3fo
+3sf
+s3f
+1si
+3sic
+3sif
+si4fl
+sig4no
+3sik
+si3ste
+3sit
+s2j
+s3ju
+s2k
+4skac
+s4kak
+4skam
+s4kok
+2skon
+skos4
+4skot
+sk4ra
+sk4ru
+sk4ry
+4skve
+sk4vo
+s3kn
+s3k
+3sl.
+4s3la.
+s4lav
+s3le.
+s4led
+s3lem
+s3len
+s3let
+s4lib
+s4lii
+3sln
+4s3lo.
+s2ly
+s3ly.
+s1l
+s2ma
+s4mek
+s2mo
+2sn
+s2na
+s3nat
+s2ne
+s3ne.
+sn4tl
+s2n
+s3n.
+s4nd
+1so
+sob4l
+so3br
+so4sk
+so4tv
+sou3h
+sou3s
+souz4
+so4k
+s2p
+s4pol
+spro4s
+1sr
+2ss
+ss4sr
+2st.
+4sta.
+s3taj
+s2tan
+st4at
+4stec
+s4tep
+st4er
+s4tero
+s4tich
+2stil
+s4tink
+4stit.
+4sti
+st3lo
+2stn
+4sto.
+s4tona
+4stou.
+4str.
+4stram
+s4trik
+4strn
+4strc
+4stupni
+s2tv
+st4ve
+3stv
+4sty.
+s4tyl
+3sty
+s2t
+4st.
+s3t
+4st.
+s4td
+3sth
+s2tr
+s2t
+s1t
+2st.
+s3tej
+1su
+su4ba
+su4bo
+suma4
+su3ve
+s2v
+sy3c
+sych3r
+sy4nes
+s2d
+3sh
+s2kl
+2s2
+s3i
+1s
+1s
+2s
+2s
+s3o
+1s
+s2
+2t.
+1ta.
+ta2bl
+tac4tvo
+t2a3d
+1taj
+ta4jf
+ta4jg
+4talt
+4tand
+3tan
+t1ao
+2tark
+tast4
+ta3str
+ta4k
+2t1b
+2t1c
+1te
+3te.
+te4ak
+te4fl
+te4in
+4tenm
+teob4
+tep3l
+ters4
+tes3ta
+te4tr
+te4uc
+te4ur
+te4ut
+2tf
+2tg
+1ti
+ti4gr
+2tih
+ti3kl
+tin4g
+ti4pl
+ti3sl
+tis4tr
+ti4tr
+2titu
+tiz4r
+4tiz
+ti3
+2ti
+2tk2
+t4kal
+4t2kan
+t4kat
+t2kl
+tk4la
+tk4li
+4tkn
+t2k
+2tl
+3tl.
+4tla.
+t1le
+tles3
+3tlm
+t3lo.
+t4lou
+tlu3
+tlu4s
+t1ly
+t1l
+2tm
+t2ma
+2tn
+t3n
+1to
+to4as
+to3b
+tob4l
+to3dr
+to4hm
+to4ir
+2toj
+tol4s
+to4ol
+4top.
+4topt
+4topu
+2torn
+2toup
+2tp
+t3rant
+t4rea
+t4ref
+tre4t
+4tric.
+trip4
+t4rit
+t4rog
+t3rol
+tro4sk
+t4rou
+4trouh
+4tro.
+4trun
+t4rus
+4t4ru
+t3rln
+4tr
+2tr
+t3rm
+t3rv
+2tr
+2t1s
+ts4ko
+ts2t
+2t1t
+tt4ch
+tt4ri
+1tu.
+tu4ff
+1tuj
+tu4lk
+2tup
+tu4r.
+tu3ry
+tu4s.
+tu4.
+tu3i
+t2v
+2tve
+2t3vi
+t4vinn
+t4vi
+t4vc
+1ty.
+ty4g
+ty2la
+ty4e
+ty4h
+ty4j
+ty4o
+ty4r
+ty4
+3t.
+t4fl
+t2
+t3i
+2t
+1t
+t2bl
+3tm
+1t
+t3d4l
+2th
+2tnn
+2tp
+1tc
+4tc.
+4tce
+1tm
+2tn
+2tr
+2t
+t4eb
+teh3n
+t2el
+t2ic
+t3il
+t4ti
+t1u
+t2
+3tb
+t4s
+2t
+t3t
+t4ti
+1t
+1t.
+1tm
+1t
+3t
+u1
+2u.
+u2at
+u2b
+u3ba
+u3be
+u3bi
+u3bo
+ubs4t
+u3bu
+u3b
+u3b.
+u3b
+uc4t
+2u2d
+u3de
+u3di
+u3do
+u3dru
+u3du
+u3dy
+u3d
+ue4fa
+2uf
+u2hl
+uh3l
+uh3no
+u2in
+u2jm
+u2k
+u3ka.
+uk4aj
+uk4al
+uk4at
+u3ke
+uk3la
+uk3le
+u3ko
+u3ku
+u3ky
+uk4.
+u3k
+ul4fa
+ul1h
+ul4p
+u2m
+u3ma
+u3me
+u3mi
+um4pl
+um4ru
+u3mu
+u3m
+3um
+u2n
+un4dl
+u3ne
+u3no
+u3nu
+u3n
+u3n
+u3n
+un4r
+u2p
+u3pa
+u3pe
+upe2r3
+u3pi
+u3pln
+u3pu
+u3py
+u3p
+u3p
+u3p
+u3p
+u2r
+u3ra
+u3re
+u3ri
+2u3ro
+u3ru
+u3ry.
+u3r
+1ur
+u3r
+u2s
+us3ky
+us3k
+us3k
+us3k
+us1l
+us2lo
+u3so
+u4ste
+u4sty
+u4st
+u4st
+u3st
+u4st
+u4st
+u3su.
+u3sy
+u3s
+u3s
+u3s
+u4tro
+u4tr
+u2v
+u3vi
+u3vu
+u2z
+u3ze
+u3zi
+uz1l
+u3zo
+u3zu
+u3z
+u2
+u3a
+u3e
+u3i
+u3o
+u3t
+u3u
+u3
+u3
+u2
+u2
+u2
+u3e
+u3i
+u4kl
+u3o
+u3t
+u3u
+u3
+u3
+u2
+u3e
+u3o
+u3u
+u3
+u3
+1v
+2v.
+va3dl
+va4j
+va4kl
+2v1b
+2v1c
+v2ch
+2v2d
+v4dal
+v3di
+v4dk
+v4d
+ve3dle
+ve3jd
+3ven
+ve2p
+ve3ps
+vep3
+ves3l
+ve4sm
+ves4p
+ve3sta
+ve3t4
+ve2z3m
+vi4ch
+vide2
+vi4dr
+vi4et
+vi4kr
+vi2tr
+2vk
+v2kr
+v2l
+2v3la.
+4vle.
+4vlem
+2vlo
+2vm
+2vn
+v4nad
+vo3b
+vo4ic
+vo4ja
+vo4jb
+vo4jd
+vo4jj
+vo4jm
+vo4j
+vo2s
+vo4t
+vou3
+vous2
+v2p
+vr2c
+vr2dl
+4vrny
+v1ro
+vr4st
+vrst3v
+vrs4tv
+2vs2
+v1sk
+v3stv
+2v2t
+vy3c
+vy3d2
+vy4dra
+vyp2
+vy3s2
+vy4sn
+vys4t
+vy3t
+vy3
+vy4k
+vy2
+vy4.
+vy4m
+vy4
+vy4l
+v2z2
+vz4no
+vz4n
+vz4n
+vz4n
+v3ri
+2v2
+v3
+v3
+v4r
+v4cm
+v3t4a
+vce3
+v4hat
+3vn
+2v
+2v
+v3n
+v22
+ve3s
+v3t.
+3vs
+v3t
+3v3z
+v22
+wa4fd
+3war
+wa4re
+we2
+2x.
+xand4
+2xf
+xisk4
+2xn
+3xov
+x1t
+xt4ra
+xy4sm
+y1
+y2a
+y2bl
+yb3ri
+y2ch
+y4chr
+y2d1l
+yd4l
+y2dr
+yd4y.
+y2e
+y2gr
+y3hn
+yh4ne
+yj4ma
+yj4me
+y2kl
+yk3la
+y3klop
+yk4ly
+yman4
+ym4kl
+yna4s
+y3ni
+ype4r
+yp4si
+yp4t
+y2p
+yr2v
+y2s
+y3sa
+y3se
+y3si
+ys3lu
+y3sm
+y3so
+y3sp
+ys2t
+ys3te
+yst4r
+y3su
+y3sv
+y3sy
+y3s
+y3s
+y3s
+yt4me
+yu3
+y3vs
+yv4t
+y3zb
+y3zd
+y3zk
+y3zn
+yz4n
+yz4n
+y3zp
+yz4po
+y2k
+y2
+y3b
+yk4n
+y4e
+y3
+y2
+y3e
+y3i
+y3k
+y1l
+y3o
+y3p
+y3u
+y3
+y2
+y3d
+1z
+2z.
+zab2l
+za4bs
+za4dk
+za3dl
+za4dn
+za3h
+za3i
+za3j
+za4jk
+za3k
+za4kt
+zal4k
+zam4n
+za3p2
+za3s2
+zat2
+za3tl
+zat4r
+za4ut
+za3z
+zaz4n
+za4z
+za4.
+za3
+za4k
+za4s
+2zb
+zban4
+z2by
+zbys4
+2z1c
+2z2d
+z3di
+zdn4n
+z4doba
+z4dobn
+zd4re
+zd4v
+z2e
+ze3h
+ze3p2
+4zerot
+ze3s2
+zes4p
+zet2
+zev2
+ze3vn
+ze3z
+ze4z.
+2z2f
+z1h
+z4ine
+z2j
+z3j
+2z2k
+z3ka.
+z3ky
+z3k
+z3k
+z3k
+2zl
+3zl.
+zlhos4
+zlik3
+z3ly.
+z2m2
+2zme
+z3mn
+z3my
+z4mn
+2z2n
+3znak
+z4nal
+z3ne.
+z3nic
+z3no
+z3nu
+z3ny
+z3n
+z3n
+z4nl
+z3n
+z4nt
+z4nv
+z3n
+zo4tr
+zo4k
+2z2p
+z3pt
+z4pt
+3zrak
+2z1s2
+2zt
+ztros3
+z4tr
+z3t
+3zu.
+zu3mo
+zu3m
+zu3m
+zu3
+z2v
+zva4d
+z3va
+z3vi
+zvik4
+zv4n
+z3vod
+z3voj
+z4von
+zv4ro
+z4vn
+z4vs
+z3vj
+3zy.
+2zz
+z1
+zh2
+z4kl.
+3zp
+z3s2
+z3z
+z2
+2z
+z3l
+2z
+z2
+zej3
+z3ez
+z3e
+2z2
+z3k
+z4ka
+z3t
+2z21
+z3
+z3
+z3s
+1b
+2bl
+b4ry
+4b.
+3cho
+c3ti3
+1d
+2dl
+do4s
+dos4ti
+d1
+1ha
+3he
+h1l
+3hl.
+h3n
+1ho
+1hr
+1h
+1j
+4jmu
+j4m
+4kli
+k4ni
+1la
+1le
+1lo
+1lu
+1ly
+3l
+1l
+3my
+3m
+1m
+3m
+3m
+ne4v
+1ra
+1re
+r2m
+1ro
+1ru
+3r
+1s
+2sc
+2s3k
+s4k.
+s4kl
+s4kn
+2sla
+s4ly
+2sm
+s4po
+2st
+t3k
+t1r
+1tu
+1ty
+1t
+3t
+v4si
+v4s
+z3k
+z3ni
+zni4c
+z4vi
+2
+1
+4ke
+4k
+2
+3e
+3
+2.
+1a
+a4br
+2b
+21c
+1e
+3e.
+e1c
+es3k
+1i
+2k
+3ka.
+3ko
+3ku
+3ky
+21m
+2n
+2ne
+1o
+2p
+2s
+1sk
+s4la
+s4sr
+22t
+4ten.
+4ten
+t4la
+4tov.
+3tv
+4tn
+3t
+1u
+1
+1
+s3l
+1
+2.
+1a
+1o
+s4te
+21t
+3uj
+1
+2d
+3di
+3do
+2f
+3fo
+f1r
+2kl
+2l
+2m
+3ma
+3me
+3mi
+3mo
+3mu
+3m
+4re.
+2s
+2t
+3ta
+3to
+3t
+2
+2
+1c
+d3r
+3ha
+3he
+3hl.
+h3lo
+h3n
+1ho
+3hu
+3h
+3ja
+1je
+1jo
+3j
+4kl
+3k2t
+1l
+1ra
+ra3d
+1re
+1ro
+r3s
+rs4t
+1ru
+1ry
+1r
+s3k
+s3n
+t1a3
+t4ac
+t1l
+1tr
+t3ra
+4traj
+t3v
+1t
+t3
+2v
+3va
+3ve
+3vl
+3vo
+3vu
+3v
+v3
+2z
+3ze
+3zi
+z3n
+3zo
+3z
+1
+2
+3e
+3i
+3o
+3u
+3
+3
+3
+4s
+2
+3o
+2
+3e
+3i
+3o
+3u
+3
+1b
+b3
+3cho
+ch4t
+d1l
+1h
+2hl
+h3n
+1j
+jed4
+j4m
+2kr
+1l
+1m
+3m
+1m
+1r
+1sa
+2s3k
+s4kl
+s4kn
+s4l.
+s3le
+s4ln
+sh2
+1t
+t3k
+3t3e
+z3da
+z3de
+z3k
+3zna
+3z3ni
+3znn
+2
+1
+2
+3e
+3i
+3o
+3
+1
+2.
+2a
+a3d
+2k
+2m
+3ov
+1s
+21t
+1
+2z
+3za
+3zi
+3zo
+3zy
+2.
+a4pl
+a4m
+22b
+2c
+2d
+e3ch
+e4dob
+e1h
+e3jd
+e3kl
+e3kv
+e4k
+eo4r
+e3p2
+e4p.
+e4pk
+e4p
+er4v
+2es
+e3ska
+e3sko
+e2sp
+es3po
+e4sr
+e3sta
+e3stu
+e3st
+e3st
+e3tl
+et4
+e3zd
+e3zk
+4ezl
+e3t
+i1
+ia3
+i3h
+i4h.
+i4hn
+i4j
+i4l.
+i4lb
+il2n
+4ine
+is2
+3i4t.
+i4v.
+i4vk
+i4vn
+i3z
+i4t
+i3
+i4.
+2k
+2kl
+k4la
+k4li
+k4ly
+k4no
+21l
+21m
+2n
+1o
+2ou
+22p
+21s
+s4to
+21t
+2v
+2z
+4pl
+2sl
+21
+2d
+4k
+1s
+2
+3t
+4ti
+1
+2.
+ab3
+a4vl
+21c
+ej4d
+ep3t
+i4mr
+22k
+3ka
+3ke
+3k3li
+43kou
+4kov
+3kr
+k4ro
+3ku.
+3ky
+2l
+2la
+2li
+3liv
+2lo
+l2
+2l
+2l
+21m
+mi4d
+2n
+2p
+21s
+2t
+4tip
+t4ka
+t4kl
+4tk
+2ts
+4tv
+4tp
+2v
+3d
+2
+3
+22
+3o
+3u
+3
+1
+2.
+3al
+2k
+2m
+2t
+4k
+1
+2c2
+2d
+j4ma
+2k
+2l
+2n
+2p
+2t
+t4ko
+2v
+2z
+z3k
+2
+3e
+e4z
+4ti
+2
+1b
+1c
+1hl
+3jd
+4jmov
+1le
+1my
+1m
+1ra
+r4va
+r4vy
+1s2
+2st
+s3te
+s3tn
+t2
+3tkl
+2v
+3va
+3vo
+3v
+2z
+3zo
+2
+3e
+3i
+3o
+1b
+3cho
+1d
+d4la
+1h
+1j
+1l
+1ml
+1m
+2n
+3no
+po34
+1r
+1s2
+2sk
+1t
+t4ku
+t4ky
+1u
+4vli
+3zk
+3zn
+4zvu
+4n
+1
+3l
+1
+2.
+a3d
+a4tv
+3a
+21b
+21c
+21d
+e2b3
+eh3n
+e4ml
+e4zg
+i4dl
+i4jm
+3il
+i2vl
+2k
+k4ni
+2l
+4lic
+3lo
+21m
+2n
+on2
+21s2
+21t
+2v
+4br
+4nr
+2
+4zn
+2
+2
+4ti
+4t
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_da.dic b/lib/kotext/kohyphen/hyphdicts/hyph_da.dic
new file mode 100644
index 00000000..77d0666f
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_da.dic
@@ -0,0 +1,1146 @@
+ISO8859-1
+.ae3
+.an3k
+.an1s
+.be5la
+.be1t
+.bi4tr
+.der3i
+.diagno5
+.her3
+.hoved3
+.ne4t5
+.nv5nt.
+.om1
+.ove4
+.po1
+.s3
+.til3
+.yd5r
+.r5i
+.v3r
+ab5le
+3abst
+a3c
+ade5la
+5adg
+a1e
+5afg
+5a4f1l
+af3r
+af4ri
+5afs
+a4gef
+a4gi
+ag5in
+ag5si
+3agti
+a4gy
+a3h
+ais5t
+a3j
+a5ka
+a3ke
+a5kr
+aku5
+a3la
+a1le
+a1li
+al3k
+4alkv
+a1lo
+al5si
+a3lu
+a1ly
+am4pa
+3analy
+an4k5r
+a3nu
+3anv
+a5o
+a5pe
+a3pi
+a5po
+a1ra
+ar5af
+1arb
+a1re
+5arg
+a1ri
+a3ro
+a3sa
+a3sc
+a1si
+a3sk
+a3so
+3a3sp
+a3ste
+a3sti
+a1ta1
+a1te
+a1ti
+a4t5in
+a1to
+ato5v
+a5tr
+a1tu
+a3t
+a5va
+a1ve
+a5v
+a5z
+1ba
+ba4ti
+4bd
+1be
+be1k
+be3ro
+be5ru
+be1s4
+be1tr
+1bi
+bi5sk
+b1j
+4b1n
+1bo
+bo4gr
+bo3ra
+bo5re
+1br4
+brd3
+4bs
+bs5k
+b3so
+b1st
+b5t
+3bu
+bu4s5tr
+b5w
+1by
+by5s
+5b
+4c1c
+1ce
+ce5ro
+3ch
+4ch.
+ci4o
+ck3
+5cy
+3da
+4d3af
+d5anta
+da4s
+d1b
+d1d4
+1de
+de5d
+4de4lem
+der5eri
+de4rig
+de5sk
+d1f
+d1g
+d3h
+1di
+di1e
+di5l
+d3j
+d1k
+d1l
+d1m
+4d1n
+3do
+4dop
+d5ov
+d1p
+4drett
+5d4reve
+3drif
+3driv
+d5ros
+d5ru
+5drv
+ds5an
+ds5in
+d1ski
+d4sm
+dst4
+d4su
+dsu5l
+ds5vi
+d3ta
+d1te
+dt5o
+d5tr
+dt5u
+1du
+dub5
+d1v
+3dy
+3d
+3d
+e5ad
+e3af
+e5ag
+e3ak
+e1al
+ea4la
+e3an
+e5ap
+e3at
+e3bl
+ebs3
+e1ci
+ed5ar
+edde4
+eddel5
+e4do
+ed5ra
+ed3re
+ed3rin
+ed4str
+e3e
+3eff
+e3fr
+3eft
+e3gu
+e1h
+e3in
+ei5s
+e3je
+e4j5el
+e1ka
+e3ke
+e3kl
+4e1ko
+e5kr
+ek5sa
+3eksem
+3eksp
+e3ku
+e1kv
+e5ky
+e3lad
+el3ak
+el3ar
+e1las
+e3le
+e4lek
+3elem
+e1li
+5elim
+e3lo
+el5sa
+e5lu
+e3ly
+e3l
+e3l
+e4mad
+em4p5le
+em1s
+en5ak
+e4nan
+4enn
+e4no
+en3so
+e5nu
+e5ol
+e3op
+e1or
+e3ov
+epi3
+e1pr
+e3ra
+er3af
+e4rag
+e4rak
+e1re
+e4ref
+er5ege
+5erhv
+e1ri
+e4rib
+er1k
+ero5d
+er5ov
+er3s
+er5tr
+e3rum
+er5un
+e5ry
+e3r
+er5n
+e1ta
+e1te
+etek4s
+e1ti
+e3tj
+e1to
+e3tr
+e3tu
+e1ty
+e5t
+e5t
+e3um
+e3un
+3eur
+e1va
+e3ve
+e4v3erf
+e1vi
+e1v
+e5x
+e3
+e5
+1fa
+fa4ce
+fags3
+f1b
+f1d
+1fe
+fej4
+fejl1
+f1f
+f1g
+f1h
+1fi
+f1k
+3fl
+1fo
+for1en
+fo4ri
+f1p
+f1s4
+4ft
+f3ta
+f1te
+f1ti
+f5to
+f5tvi
+1fu
+f1v
+3fy
+3f
+3f
+f4r5en
+1ga
+g3art
+g1b
+g1d
+1ge
+4g5enden
+ger3in
+ge3s
+g3f
+g1g
+g1h
+1gi
+gi4b
+gi3st
+gi4
+5gj
+g3k
+g1l
+g1m
+3go
+4g5om
+g5ov
+g3p
+1gr
+gs1a
+gsde4len
+g4se
+gsha4
+g5sla
+gs3or
+gs1p
+g5s4tide
+g4str
+gs1v
+g4s
+g5s
+g3ta
+g1te
+g1ti
+g5to
+g3tr
+gt4s
+g3ud
+gun5
+g3v
+1gy
+g5yd
+3g
+3g1
+3g
+4ha.
+heds3
+he5s
+4het
+hi4e
+hi4n5
+hi3s
+ho5ko
+ho5ve
+4h3t
+hun4
+hund3
+hvo4
+i1a
+i3b
+i4ble
+i1c
+i3dr
+ids5k
+i1el
+i1en
+i3er
+i3et.
+if3r
+i3gu
+i3h
+i5i
+i5j
+i1ka
+i1ke
+ik1l
+i5ko
+ik3re
+ik5ri
+iks5t
+ik4tu
+i3ku
+ik3v
+i3lag
+il3eg
+il5ej
+il5el
+i3li
+i4l5id
+il3k
+i1lo
+il5u
+i3mu
+ind3t
+5inf
+ings1
+in3s
+in4sv
+inter1
+i3nu
+i3od
+i3og
+i5ok
+i3ol
+ion4
+ions1
+i5o5r
+i3ot
+i5pi
+i3pli
+i5pr
+i3re
+i3ri
+ir5t
+i3sc
+i3si
+i4sm
+is3p
+i1ster
+i3sti
+i5sua
+i1ta
+i1te
+i1ti
+i3to
+i3tr
+it5re.
+i1tu
+i3ty
+i5t
+i1u
+i1va
+i1ve
+i1vi
+i3
+j3ag
+jde4rer
+jds1
+jek4to
+4j5en.
+j5k
+j3le
+j3li
+jlmeld5
+jlmel4di
+j3r
+jre5
+ju3s
+5kap
+k5au
+5kav
+k5b
+kel5s
+ke3sk
+ke5st
+ke4t5a
+k3h
+ki3e
+ki3st
+k1k
+k5lak
+k1le
+3klu
+k4ny
+5kod
+1kon
+ko3ra
+3kort
+ko3v
+1kra
+5kry
+ks3an
+k1si
+ks3k
+ks1p
+k3ste
+k5stu
+ks5v
+k1t
+k4tar
+k4terh
+kti4e
+kt5re
+kt5s
+3kur
+1kus
+3kut
+k4vo
+k4vu
+3k
+3k
+5lab
+lad3r
+5lagd
+la4g3r
+5lam
+1lat
+l1b
+ldiagnos5
+l3dr
+ld3st
+1le.
+5led
+4lele
+le4mo
+3len
+1ler
+1les
+4leu
+l1f
+lfin4
+lfind5
+l1go1
+l3h
+li4ga
+lingeni4
+4l5ins
+4l3int
+li5o
+l3j
+l1ke
+l1ko
+l3ky
+l1l
+l5mu
+lo4du
+l3op
+4l5or
+3lov
+4l3p
+l4ps
+l3r
+4ls
+lses1
+ls5in
+l5sj
+l1ta
+l4taf
+l1te
+l4t5erf
+l3ti
+lt3o
+l3tr
+l3tu
+lu5l
+l3ve
+l3vi
+l3v
+5ls
+1ma
+m1b
+m3d
+1me
+4m5ej
+m3f
+m1g
+m3h
+1mi
+mi3k
+m5ing
+mi4o
+mi5sty
+m3k
+m1l
+m1m
+mmen5
+m1n
+3mo
+mo4da
+4mop
+4m5ov
+m1pe
+m3pi
+m3pl
+m1po
+m3pr
+m1r
+mse5s
+ms5in
+m5sk
+ms3p
+m3ste
+ms5v
+m3ta
+m3te
+m3ti
+m3tr
+m5t
+m1ud
+1mul
+mu1li
+3my
+1m
+3m
+3m
+3na
+4nak
+1nal
+n1b
+n1c
+4nd
+n3dr
+nd5si
+nd5sk
+nd5sp
+1ne
+ne5a
+ne4da
+nemen4
+nement5e
+neo4
+n3erk
+n5erl
+ne5sl
+ne5st
+n1f
+n4go
+4n1h
+1ni
+4nim
+ni5o
+ni3st
+n1ke
+n1ko
+n3kr
+n3ku
+n5kv
+n3k
+4n1l
+n1m
+n1n
+1no
+n3ord
+n5p
+n3r
+4ns
+n3si
+n1sku
+ns3po
+n1sta
+n5sti
+n1ta
+nta4le
+n1te
+n1ti
+ntiali4
+n3to
+n1tr
+nt4s5t
+nt4su
+n3tu
+n3ty
+n5t
+4n1v
+3ny
+n3z
+3n
+4n5b
+5n
+o3a
+o4as
+ob3li
+o1c
+o4din
+od5ri
+od5s
+od5un
+o1e
+of5r
+o4gek
+o4gel
+o4g5o
+og5re
+og5sk
+o5h
+o5in
+oi6s5e
+o1j
+o3ka
+o1ke
+o3ku
+o3la
+o3le
+o1li
+o1lo
+o3lu
+o5ly
+o5l
+1omr
+on3k
+ook5
+o3or
+o5ov
+o3pi
+op3l
+op3r
+op3s
+3opta
+4or.
+or1an
+3ordn
+ord5s
+o3re.
+o3reg
+o3rek
+o3rer
+o3re3s
+o3ret
+o3ri
+3orient
+or5im
+o4r5in
+or3k
+or5o
+or3sl
+or3st
+or3
+o3si
+o3so
+o3t
+o1te
+o5un
+ov4s
+o5
+3pa
+pa5gh
+p5anl
+p3d
+4pec
+3pen
+1per
+pe1ra
+pe5s
+pe3u
+p3f
+4p5h
+1pla
+p4lan
+4ple.
+4pler
+4ples
+p3m
+p3n
+5pok
+4po3re
+3pot
+4p5p4
+p4ro
+1proc
+5pr
+p3sk
+p5so
+ps4p
+p3st
+p1t
+1pu
+pu5b
+p5ule
+p5v
+5py3
+5pd
+p3
+qu4
+4raf
+ra5is
+4rarb
+r1b
+r4d5ar
+r3dr
+rd4s3
+4reks
+1rel
+re5la
+r5enss
+5rese
+re5spo
+4ress
+re3st
+re5s4u
+5rett
+r1f
+r1gu
+r1h
+ri1e
+ri5la
+4rimo
+r4ing
+ringse4
+ringso4r
+4rinp
+4rint
+r3ka
+r1ke
+r1ki
+rk3so
+r3ku
+r5k
+r1l
+rmo4
+r5mu
+r1n
+ro1b
+ro3p
+r3or
+r3p
+r1r
+rre5s
+rro4n5
+r1sa
+r1si
+r5skr
+r4sk5v
+rs4n
+r3sp
+r5stu
+r5su
+r3sv
+r5tal
+r1te
+r4teli
+r1ti
+r3to
+r4t5or
+rt5rat
+rt3re
+r5tri
+r5tro
+rt3s
+r5ty
+r5t
+r5t
+r3ud
+run4da
+5rut
+r3va
+r1ve
+r3vi
+r3v
+ry4s
+r5l
+4rn
+5rr
+3rd
+r5r
+s3af
+1sam
+sa4ma
+s3ap
+s1ar
+1sat
+4s1b
+s1d
+sdy4
+1se
+s4ed
+5s4er
+se4se
+s1f
+4s1g4
+4s3h
+si4bl
+1sig
+s5int
+5sis
+5sit
+5siu
+s5ju
+4sk.
+1skab
+1ske
+s3kl
+sk5s4
+5sky
+s4k
+s1le
+s1li
+slo3
+5slu
+s5ly
+3sl
+s1m
+s4my
+4snin
+s4nit
+s4n
+so5k
+5sol
+5som.
+3somm
+s5oms
+5somt
+3son
+4s1op
+sp4
+3spec
+4sper
+3s4pi
+s1pl
+3sprog.
+s5r4
+s1s4
+4st.
+5s4tam
+1stan
+st5as
+3stat
+1stav
+1ste.
+1sted
+3stel
+5stemo
+1sten
+5step
+3ster.
+3stes
+5stet
+5stj
+3sto
+st5om
+1str
+5st
+1st
+s1ud
+3sul
+s3un
+3sur
+s3ve
+3s4y
+1sy1s
+1s
+4s5n
+1s
+s5k
+s4r5
+5ta.
+1tag
+tands3
+4tanv
+4tb
+tede4l
+teds5
+3teg
+5tekn
+teo1
+5term
+te5ro
+4t1f
+6t3g
+t1h
+tialis5t
+3tid
+ti4en
+ti3st
+ti4
+4t3k
+4t1l
+tli4s5
+t1m
+t1n
+to5ra
+to1re
+to1ri
+tor4m
+4t3p
+t4ra
+4tres
+tro5v
+1try
+3trk.
+4ts
+t3si
+ts4pa
+ts5pr
+t3st
+ts5ul
+t4s
+t5s
+4t1t
+t5uds
+5tur
+t5ve
+t3v
+1typ
+u1a
+5udl
+ud5r
+ud3s
+3udv
+u1e
+ue4t5
+uge4ri
+ugs3
+u5gu
+u3i
+u5kl
+uk4ta
+uk4tr
+u1la
+u1le
+u5ly
+u3l
+u5pe
+up5l
+u5q
+u3ra
+u3re
+u4r3eg
+u1rer
+u3ro
+us5a
+u3si
+u5ska
+u5so
+us5v
+u1te
+u1ti
+u1to
+ut5r
+ut5s4
+5u5v
+va5d
+3varm
+1ved
+ve4l5e
+ve4reg
+ve3s
+5vet
+v5h
+vi4l3in
+1vis
+v5j
+v5k
+vl4
+v3le
+v5li
+vls1
+1vo
+4v5om
+v5p
+v5re
+v3st
+v5su
+v5t
+3vu
+3vrd
+1vrk
+5v
+y3a
+y5dr
+y3e
+y3ke
+y5ki
+yk3li
+y3ko
+yk4s5
+y3kv
+y5li
+y5lo
+y5mu
+yns5
+y5o
+y1pe
+y3pi
+y3re
+yr3ek
+y3ri
+y3si
+y3ti
+y5t3r
+y5ve
+y5v
+zi5o
+b3l
+3c
+3e
+g5a
+4gek
+4g5r
+gs5
+5i
+5kv
+lle4
+n1dr
+5o
+1re
+r4g5r
+3ri
+r4ma
+r4mo
+r5s
+5si
+3so
+3ste
+3ve
+de5
+3e
+1je
+3ke
+3le
+ms5
+n3st
+n4t3
+1re
+3ri
+rne3
+r5o
+1ve
+1d
+1e
+5h
+3l
+3re
+rs5t
+5sk
+3t
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_de.dic b/lib/kotext/kohyphen/hyphdicts/hyph_de.dic
new file mode 100644
index 00000000..9f9f9555
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_de.dic
@@ -0,0 +1,5799 @@
+ISO8859-1
+.aa6l
+.ab3a4s
+.ab3ei
+.abi2
+.ab3it
+.ab1l
+.ab1r
+.ab3u
+.ad3o4r
+.alti6
+.ana3c
+.an5alg
+.an1e
+.ang8s2t1
+.an1s
+.ap1p
+.ar6sc
+.ar6ta
+.ar6tei
+.as2z
+.au2f1
+.au2s3
+.be5erb
+.be3na
+.ber6t5r
+.bie6r5
+.bim6s5t
+.brot3
+.bru6s
+.ch6
+.che6f5
+.da8c
+.da2r
+.dar5in
+.dar5u
+.den6ka
+.de5r6en
+.des6pe
+.de8spo
+.de3sz
+.dia3s4
+.dien4
+.dy2s1
+.ehren5
+.eine6
+.ei6n5eh
+.ei8nen
+.ein5sa
+.en6der
+.en6d5r
+.en3k4
+.en8ta8
+.en8tei
+.en4t3r
+.epo1
+.er6ban
+.er6b5ei
+.er6bla
+.er6d5um
+.er3ei
+.er5er
+.er3in
+.er3o4b
+.erwi5s
+.es1p
+.es8t1l
+.es8t1n
+.ex1a2
+.ex3em
+.fal6sc
+.fe6st5a
+.flu4g3
+.furch8
+.ga6ner
+.ge3n4a
+.ge5r
+.ges6
+.halb5
+.halbe6
+.hal6br
+.haup4
+.hau4t
+.heima6
+.he4r3e
+.her6za
+.he5x
+.hin3
+.hir8sc
+.ho4c
+.hu3sa
+.hy5o
+.ibe5
+.ima6ge
+.in1
+.ini6
+.is5chi
+.jagd5
+.kal6k5o
+.ka6ph
+.ki4e
+.kop6f3
+.kraf6
+.k5ra
+.lab6br
+.liie6
+.lo6s5k
+.l4s3t
+.ma5d
+.mi2t1
+.no6th
+.no6top
+.obe8ri
+.ob1l
+.obs2
+.ob6st5e
+.or3c
+.ort6s5e
+.ost3a
+.oste8r
+.pe4re
+.pe3ts
+.ph6
+.po8str
+.rau4m3
+.re5an
+.ro8q
+.ru5the
+.r5be
+.sch8
+.se6e
+.se5n6h
+.se5ra
+.si2e
+.spi6ke
+.st4
+.sy2n
+.tages5
+.tan6kl
+.ta8th
+.te6e
+.te8str
+.to6der
+.to8nin
+.to6we
+.um1
+.umpf4
+.un1
+.une6
+.unge5n
+.ur1c
+.ur5en
+.ve6rin
+.vora8
+.wah6l5
+.we8ges
+.we8s2t
+.wes3te
+.wo6r
+.wor3a
+.wun4s
+.zi4e
+.zuch8
+.nde8re
+.ch8
+aa1c
+aa2gr
+aal5e
+aa6r5a
+a5arti
+aa2s1t
+aat2s
+6aba
+ab3art
+1abdr
+6abel
+aben6dr
+ab5erk
+ab5err
+ab5esse
+1abf
+1abg
+1abh
+ab1ir
+1abko
+a1bl
+ab1la
+5ablag
+a6bla
+ab4ler
+ab1lu
+a8bl
+5a6bl
+abma5c
+1abn
+ab1ra
+ab1re
+5a6brec
+ab1ro
+ab1s
+ab8sk
+abs2z
+3abtei
+ab1ur
+1abw
+5abze
+5abzu
+ab1n
+abu8
+a4ce.
+a5chal
+ach5art
+ach5au
+a1che
+a8chent
+ach6er.
+a6ch5erf
+a1chi
+ach1l
+ach3m
+ach5n
+a1cho
+ach3re
+a1chu
+ach1w
+a1chy
+ach5f
+ack1o
+acks6t
+ack5sta
+a1d
+8ad.
+a6d5ac
+ad3ant
+ad8ar
+5addi
+a8dein
+ade5o8
+adi5en
+1adj
+1adle
+ad1op
+a2dre
+3adres
+adt1
+1adv
+a6d
+a1e2d
+ae1r
+a1er.
+1aero
+8afa
+a3fal
+af1an
+a5far
+a5fat
+af1au
+a6fentl
+a2f1ex
+af1fr
+af5rau
+af1re
+1afri
+af6tent
+af6tra
+aft5re
+a6f5um
+8af
+ag5abe
+5a4gent
+ag8er
+ages5e
+1aggr
+ag5las
+ag1lo
+a1gn
+ag2ne
+1agog
+a6g5und
+a1ha
+a1he
+ah5ein
+a4h3erh
+a1hi
+ahl1a
+ah1le
+ah4m3ar
+ahn1a
+a5ho
+ahra6
+ahr5ab
+ah1re
+ah8rei
+ahren8s
+ahre4s3
+ahr8ti
+ah1ru
+a1hu
+ah8
+ai3d2s
+ai1e
+aif6
+a3inse
+ai4re.
+a5isch.
+ais8e
+a3ismu
+ais6n
+aiso6
+a1j
+1akad
+a4kade
+a1ke
+a1ki
+1akko
+5akro1
+a5lal
+al5ans
+3al8arm
+al8beb
+al8berw
+alb5la
+3album
+al1c
+a1le
+a6l5e6be
+a4l3ein
+a8lel
+a8lerb
+a8lerh
+a6lert
+5a6l5eth
+1algi
+al4gli
+al3int
+al4lab
+al8lan
+al4l3ar
+alle3g
+a1lo
+a4l5ob
+al6schm
+al4the
+al4t3re
+8a1lu
+alu5i
+a6lur
+alu3ta
+a1l
+a6mate
+8ame.
+5a6meise
+am6m5ei
+am6mum
+am2n
+ampf3a
+am6schw
+am2ta
+a1mu
+a1m
+a3nac
+a1nad
+anadi5e
+an3ako
+an3alp
+3analy
+an3ame
+an3ara
+a1nas
+an5asti
+a1nat
+anat5s
+an8dent
+ande4s3
+an1ec
+an5eis
+an1e2k
+4aner.
+a6n5erd
+a8nerf
+a6n5erke
+1anfa
+5anfert
+1anf
+3angab
+5angebo
+an3gli
+ang6lis
+an2gn
+3angri
+ang5t6
+5anh
+ani5g
+ani4ka
+an5i8on
+an1kl
+an6kno
+an4kro
+1anl
+anma5c
+anmar4
+3annah
+anne4s3
+a1no
+5a6n1o2d
+5a6n3oma
+5a6nord
+1anr
+an1sa
+5anschl
+an4soz
+an1st
+5anstal
+an1s2z
+5antenn
+an1th
+5anw
+a5ny
+an4z3ed
+5anzeig
+5anzieh
+3anzug
+an1
+5ans
+a1n
+an8d
+a1os
+a1pa
+3apfel
+a2ph1t
+aph56
+a1pi
+8apl
+apo1c
+apo1s
+a6pos2t
+a6poth
+1appa
+ap1pr
+a1pr
+a5p
+a3p
+a1ra
+a4r3af
+ar3all
+3arbei
+2arbt
+ar1c
+2a1re
+ar3ein
+ar2gl
+2a1ri
+ari5es
+ar8kers
+ar6les
+ar4nan
+ar5o6ch
+ar1o2d
+a1rol
+ar3ony
+a8ror
+a3ros
+ar5ox
+ar6schl
+8artei
+ar6t5ri
+a1ru
+a1ry
+1arzt
+arz1w
+ar8z
+ar8m
+ar6
+ar5m
+ar12
+a1sa
+a6schec
+asch5l
+asch3m
+a6schn
+a3s4hi
+as1pa
+asp5l
+as5tev
+1asth
+a1str
+ast3re
+8a1ta
+ata5c
+ata3la
+a6tapf
+ata5pl
+a1te
+a6teli
+aten5a
+ate5ran
+6atf
+6atg
+a1th
+at3hal
+1athl
+2a1ti
+5atlant
+3atlas
+8atmus
+6atn
+a1to
+a6t5ops
+ato6ra
+a6t5ort.
+4a1tr
+a6t5ru
+at2t1h
+at5t6h
+6a1tu
+atz1w
+a1t
+a1t
+au1a
+au6bre
+auch3a
+au1e
+aue4l
+5aufent
+3auff
+3aufga
+1aufn
+auf1t
+3auftr
+1aufw
+3auge.
+au4kle
+aule8s
+6aum
+au8mar
+aum5p
+1ausb
+3ausd
+1ausf
+1ausg
+au8sin
+au4sta
+1ausw
+1ausz
+aut5eng
+au1th
+1auto
+aue8
+a1v
+ave5r6a
+aver6i
+a1w
+a6wes
+a1x
+a2xia
+a6xio
+a1ya
+a1z
+azi5er.
+8a
+1ba
+8ba8del
+ba1la
+ba1na
+ban6k5r
+ba5ot
+bardi6n
+ba1ro
+basten6
+bau3sp
+2b1b
+bb6le
+b2bli
+2b1c
+2b1d
+1be
+be1a
+be8at.
+be1ch
+8becht
+8becke.
+be5el
+be1en
+bee8rei
+be5eta
+bef2
+8beff
+be1g2
+beh8
+bei1s
+6b5eisen
+bei3tr
+b8el
+bel8o
+belu3t
+be3nac
+bend6o
+be6ners
+be6nerw
+be4nor
+ben4se6
+bens5el
+be1n
+be1n
+be1o2
+b8er.
+be1ra
+be8rac
+ber8gab.
+ber1r
+be1r
+bes8c
+bes5erh
+bes2p
+be5tha
+bet5sc
+be1un
+be1ur
+8bex
+be6zwec
+2b1f8
+2b1g2
+bga2s5
+bge1
+2b1h
+bhole6
+1bi
+bi1bl
+b6ie
+bi1el
+bi1la
+bil5
+bi1na
+bi4nok
+bi6stu
+bi5tr
+bit4t5r
+b1j
+2b1k2
+bk6
+bl8
+b6la.
+6b1lad
+6blag
+8blam
+1blat
+b8latt
+3blau.
+b6lav
+3ble.
+b1leb
+b1led
+8b1leg
+8b1leh
+8bleid
+8bleih
+6b3lein
+ble4m3o
+4blich
+b4lind
+8bling
+b2lio
+5blit
+b4litz
+b1loh
+8b1los
+1blu
+5blum
+2blun
+blut3a
+blut5sc
+3bl
+bls5c
+5bl
+3bl
+bl8sc
+2b1m
+2b1n
+1bo
+bo1ch
+bo5d6s
+boe5
+8boff
+8bonk
+bo1ra
+b1ort
+2b1p2
+b1q
+1br
+brail6
+brast8
+bre4a
+b5red
+8bref
+8b5riem
+b6riga
+bro1s
+b1rup
+b2ruz
+8brh
+brs5c
+8bs
+b1sa
+b8sang
+b2s1ar
+b1sc
+bs3erl
+bs3erz
+b8sof
+b1s2p
+bst1h
+b3stru
+b5st
+b6sun
+2b1t
+b2t1h
+1bu
+bu1ie
+bul6k
+b8ure
+bu6sin
+6b1v
+2b1w
+1by1
+by6te.
+8b1z
+1b
+b56s5
+1b
+b65bere
+bge6
+bgel5e
+br6sc
+1ca
+cag6
+ca5la
+ca6re
+ca5y
+c1c
+1ce
+celi4c
+celich5
+ce1ro
+c8h
+2ch.
+1chae
+ch1ah
+ch3akt
+cha6mer
+8chanz
+5chara
+3chari
+5chato
+6chb
+1chef
+6chei
+ch3eil
+ch3eis
+6cherkl
+6chf
+4chh
+5chiad
+5chias
+6chins
+8chj
+chl6
+5chlor
+6ch2m
+2chn6
+ch8nie
+5cho.
+8chob
+choi8d
+6chp
+ch3ren
+ch6res
+ch3r
+2chs
+2cht
+cht5ha
+cht3hi
+5chthon
+ch6tin
+6chuh
+chu4la
+6ch3unt
+chut6t
+8chw
+1ci
+ci5tr
+c2k
+2ck.
+ck1ei
+4ckh
+ck3l
+ck3n
+ck5o8f
+ck1r
+2cks
+ck5stra
+ck6s5u
+c2l
+1c8o
+con6ne
+8corb
+cos6t
+c3q
+1c6r
+8c1t
+1cu
+1cy
+5c1
+c5
+1da.
+8daas
+2dabg
+8dabr
+6dabt
+6dabw
+1dac
+da2gr
+6d5alk
+8d5amt
+dan6ce.
+dani5er
+dan8ker
+2danl
+danla6
+6dans
+8danzi
+6danzu
+d1ap
+da2r1a8
+2d1arb
+d3arc
+dar6men
+4d3art
+8darz
+1dat
+8datm
+2d1auf
+2d1aus
+2d1b
+2d1c
+2d1d
+d5de
+d3d2h
+ddmme8
+1de
+2deal
+de5an
+de3cha
+de1e
+defe6
+6deff
+2d1ehr
+5d4eic
+de5isc
+de8lar
+del6s5e
+del6spr
+de4mag
+de8mun
+de8nep
+dene6r
+8denge.
+8dengen
+de5o6d
+2deol
+de5ram
+8derdb
+der5ein
+de1ro
+der1r
+d8ers
+der5um
+de4s3am
+de4s3an
+de4sau
+de6sil
+de4sin
+de8sor
+de4spr
+de2su
+8deul
+de5us.
+2d1f
+df2l
+2d1g
+2d1h
+1di
+dia5c
+di5ara
+dice5
+di3chr
+di5ena
+di1gn
+di1la
+dil8s
+di1na
+8dind
+6dinf
+4d3inh
+2d1ins
+di5o6d
+di3p4t
+di8sen
+dis1p
+di5s8per
+di6s5to
+dis3tr
+di8tan
+di8tin
+d1j
+6dje
+2dju
+2d1k
+2d1l
+2d1m
+2d1n6
+dni6
+dnje6
+1do
+6d5obe
+do6berf
+6d5ony
+do3ran
+6dord
+2d1org
+dor4t3h
+6doth
+dott8e
+2d1p
+d5q
+dr4
+1drah
+8drak
+d5rand
+6dre.
+4drech
+d6reck
+4d3reg
+8d3reic
+d5reife
+8drem
+8d1ren
+2drer
+8dres.
+6d5rh
+1dria
+d1ric
+8drind
+droi6
+dro5x
+1dru
+8drut
+drs5c
+1dr
+dr5b
+dr8sc
+2ds
+d1sa
+d6san
+dsat6
+d1sc
+5d6scha.
+5dschik
+dse8e
+d8serg
+8dsl
+d1sp
+d4spak
+ds2po
+d8sp
+d1st
+d1s
+2dt
+d1ta
+d1te
+d1ti
+d1to
+dt1s6
+d1tu
+d5t
+1du
+du5als
+du1b6
+du1e
+duf4t3r
+4d3uh
+du5ie
+8duml
+8dumw
+2d1und
+du8ni
+6d5unt
+dur2c
+durch3
+6durl
+6dursa
+8durt
+dus1t
+du8schr
+2d1v
+2d1w
+dwa8l
+2d1z
+1d
+6dh
+8dnd
+d6r
+d8bl
+d5l
+dr6fl
+d8sc
+d54st
+1d
+ea4ben
+e1ac
+e1ah
+e1akt
+e1al.
+e5alf
+e1alg
+e5a8lin
+e1alk
+e1all
+e5alp
+e1alt
+e5alw
+e1am
+e1and
+ea6nim
+e1ar.
+e5arf
+e1ark
+e5arm
+e3art
+e5at.
+e6ate
+e6a5t6l
+e8ats
+e5att
+e6au.
+e1aus
+e1b
+e6b5am
+ebens5e
+eb4lie
+eb4ser
+eb4s3in
+e1che
+e8cherz
+e1chi
+ech3m
+8ech3n
+ech1r
+ech8send
+ech4su
+e1chu
+eck5an
+e5cl
+e1d
+ee5a
+ee3e
+ee5g
+e1ei
+ee5isc
+eei4s3t
+ee6lend
+e1ell
+ee5l
+e1erd
+ee3r4e
+ee8reng
+eere6s5
+ee5r
+ee6tat
+e1ex
+e1f
+e6fau
+e8fe8b
+3effek
+ef3rom
+ege6ra
+eglo6si
+1egy
+e1ha
+e6h5ach
+eh5ans
+e6hap
+eh5auf
+e1he
+e1hi
+ehl3a
+eh1le
+ehl5ein
+eh1mu
+ehn5ec
+e1ho
+ehr1a
+eh1re
+ehre6n
+eh1ri
+eh1ru
+ehr5um
+e1hu
+eh1w
+e1hy
+e1h
+e1h
+e3ht
+ei1a
+eia6s
+ei6bar
+eich3a
+eich5r
+ei4dar
+ei6d5ei
+ei8derf
+ei3d4sc
+ei1e
+8eifen
+3eifri
+1eign
+eil1d
+ei6mab
+ei8mag
+ein1a4
+ei8nat
+ei8nerh
+ei8ness
+ei6nete
+ein1g
+e8ini
+ein1k
+ei6n5od
+ei8nok
+ei4nor
+e3ins
+ei1o
+e1irr
+ei5ru
+ei8sab
+ei5schn
+ei6s5ent
+ei8sol
+ei4t3al
+eit3ar
+eit1h
+ei6thi
+ei8tho
+eit8samt
+ei6t5um
+e1j
+1ekd
+e1ke
+e1ki
+e1k2l
+e1kn
+ekni4
+e1la
+e2l1al
+6elan
+e6lanf
+e8lanl
+e6l5ans
+el3arb
+el3arm
+e6l3art
+5e6lasti
+e6lauge
+elbst5a
+e1le
+6elef
+ele6h
+e6l5ehe
+e8leif
+e6l5einh
+1elek
+e8lel
+3eleme
+e6lemen
+e6lente
+el5epi
+e4l3err
+e6l5ersc
+elf2l
+elg2
+e6l5ins
+ell8er
+4e1lo
+e4l3ofe
+el8soh
+el8tent
+5eltern
+e1lu
+elut2
+e1l
+e1l
+em8dei
+em8meis
+4emo
+emo5s
+1emp1f
+1empt
+1emto
+e1mu
+emurk4
+emurks5
+e1m
+en5a6ben
+en5achs
+en5ack
+e1nad
+en5af
+en5all
+en3alt
+en1am
+en3an.
+en3ant
+en3anz
+en1a6p
+en1ar
+en1a6s
+6e1nat
+en3auf
+en3aus
+en2ce
+enda6l
+end5erf
+end5erg
+en8dess
+4ene.
+en5eck
+e8neff
+e6n5ehr
+e6n5eim
+en3eis
+6enem.
+6enen
+e4nent
+4ener.
+e8nerd
+e6n3erf
+e4nerg
+5energi
+e6n5erla
+en5ers
+e6nerst
+en5erw
+6enes
+e6n5ess
+e2nex
+en3glo
+2eni
+enni6s5
+ennos4
+enns8
+e1no
+e6nober
+eno8f
+en5opf
+e4n3ord
+en8sers
+ens8kl
+en1sp
+ens6por
+en5t6ag
+enta5go
+en8terbu
+en6tid
+3entla
+ent5ric
+5entwic
+5entwu
+1entz
+enu5i
+e3ny
+en8zan
+en1f
+e1ns
+e1ng
+eo1c
+e5o6fe
+e5okk
+e1on.
+e3onf
+e5onk
+e5onl
+e5onr
+e5opf
+e5ops
+e5or.
+e1ord
+e1org
+eo5r6h
+eo1t
+e1pa
+e8pee
+e6p5e6g
+ep5ent
+e1p2f
+e1pi
+5epid
+e6pidem
+e1pl
+5epos
+e6pos.
+ep4p3a
+e1pr
+e1p
+e1q
+e1ra.
+er5aal
+8eraba
+e5rabel
+er5a6ben
+e5rabi
+er3abs
+er3ach
+era5e
+era5k6l
+er3all
+er3amt
+e3rand
+e3rane
+er3ans
+e5ranz.
+e1rap
+er3arc
+e3rari
+er3a6si
+e1rat
+erat3s
+er3auf
+e3raum
+3erbse
+er1c
+e1re
+4e5re.
+er3eck
+er5egg
+er5e2h
+2erei
+e3rei.
+e8reine
+er5einr
+6eren.
+e4r3enm
+4erer.
+e6r5erm
+er5ero
+er5erst
+e4r3erz
+er3ess
+5erfl
+er8gan.
+5ergebn
+er2g5h
+5ergnz
+5erhhu
+2e1ri
+eri5ak
+e6r5iat
+e4r3ind
+e6r5i6n5i6
+er5ins
+e6r5int
+er5itio
+er1kl
+3erkl
+5erls.
+ermen6s
+er6nab
+3ernst
+6e1ro.
+e1rod
+er1o2f
+e1rog
+6e3roi
+ero8ide
+e3rol
+e1rom
+e1ron
+e3rop8
+e2r1or
+e1ros
+e1rot
+er5ox
+ersch4
+5erstat
+er6t5ein
+er2t1h
+er5t6her
+2e1ru
+eruf4s3
+e4r3uhr
+er3ums
+e5rus
+5erwerb
+e1ry
+er5zwa
+er3zwu
+er8m
+er5s
+er8
+e3rs.
+e6r12b
+e1sa
+esa8b
+e8sap
+e6s5a6v
+e1sc
+esch4l
+ese1a
+es5ebe
+eserve5
+e8sh
+es5ill
+es3int
+es4kop
+e2sl
+eso8b
+e1sp
+espei6s5
+es2po
+es2pu
+5essenz
+e6stabs
+e6staf
+e6st5ak
+est3ar
+e8stob
+e1str
+est5res
+es3ur
+e2sz
+e1s
+e1ta
+et8ag
+etari5e
+eta8ta
+e1te
+eten6te
+et5hal
+e5thel
+e1ti
+1etn
+e1to
+e1tr
+et3rec
+e8tscha
+et8se
+et6tei
+et2th
+et2t1r
+e1tu
+etu1s
+et8zent
+et8zw
+e1t
+e1t
+e1t
+eu1a2
+eu1e
+eue8rei
+eu5fe
+euin5
+euk2
+e1um.
+eu6nio
+e5unter
+eu1o6
+eu5p
+3europ
+eu1sp
+eu5str
+eu8zo
+e1v
+eval6s
+eve5r6en
+ever4i
+e1w
+e2wig
+ex1or
+1exp
+1extr
+ey3er.
+e1z
+e12
+e58
+e1
+e8es
+fa6ch5i
+fade8
+fa6del
+fa5el.
+fal6lo
+falt8e
+fa1na
+fan4gr
+6fanl
+6fap
+far6ba
+far4bl
+far6r5a
+2f1art
+fa1sc
+fau8str
+fa3y
+2f1b2
+6f1c
+2f1d
+1fe
+2f1eck
+fe6dr
+feh6lei
+f6eim
+8feins
+f5eis
+fel5en
+8feltern
+8femp
+fe5rant
+4ferd.
+ferri8
+fe8stof
+fe6str
+fe6stum
+fe8tag
+fet6ta
+fex1
+2ff
+f1fa
+f6f5arm
+f5fe
+ffe5in
+ffe6la
+ffe8ler
+ff1f
+f1fla
+ff3lei
+ff4lie
+ff8sa
+ff6s5ta
+2f1g2
+fgewen6
+4f1h
+1fi
+fid4
+fi3ds
+fieb4
+fi1la
+fi8lei
+fil4m5a
+f8in.
+fi1na
+8finf
+fi8scho
+fi6u
+6f1j
+2f1k2
+f8lanz
+fl8e
+4f3lein
+8flib
+4fling
+f2lix
+6f3lon
+5flop
+1flor
+5f8lc
+3flt
+2f1m
+2f1n
+1fo
+foh1
+f2on
+fo6na
+2f1op
+fo5ra
+for8mei
+for8str
+for8th
+for6t5r
+fo5ru
+6f5otte
+2f1p8
+f1q
+fr6
+f5ram
+1f8ran
+f8ra
+f8re.
+frei1
+5frei.
+f3reic
+f3rest
+f1rib
+8f1ric
+6frig
+1fris
+fro8na
+frs5t
+2fs
+f1sc
+f2s1er
+f5str
+fs3tt
+2ft
+f1tak
+f1te
+ft5e6h
+ftere6
+ft1h
+f1ti
+f5to
+f1tr
+ft5rad
+ft1sc
+ft2so
+f1tu
+ftwi3d4
+ft1z
+1fu
+6f5ums
+6funf
+fun4ka
+fu8end
+6f1v
+2f1w
+2f1z
+1f
+f1c
+8frm
+6fug
+f8
+fde3
+8ff
+3fr
+1f
+fn4f3u
+1ga
+ga6bl
+6gabw
+8gabz
+g3a4der
+ga8ho
+ga5isc
+4gak
+ga1la
+6g5amt
+ga1na
+gan5erb
+gan6g5a
+ga5nj
+6ganl
+8gansc
+6garb
+2g1arc
+2g1arm
+ga5ro
+6g3arti
+ga8sa
+ga8sc
+ga6stre
+2g1atm
+6g5auf
+gau5fr
+g5aus
+2g1b
+g5c
+6gd
+g1da
+1ge
+ge1a2
+ge6an
+ge8at.
+ge1e2
+ge6es
+gef2
+8geff
+ge1g2l
+ge1im
+4g3eise
+geist5r
+gel8bra
+gelt8s
+ge5l
+ge8nin
+gen3k
+6g5entf
+ge3n
+ge1or
+ge1ra
+ge6rab
+ger8au
+8gerh
+ger8ins
+ge1ro
+6g5erz.
+ge1r
+ge1r
+ge1s
+ges2p
+ge2s7te.
+ge2s7ten
+ge2s7ter
+ge2s7tik
+ge5unt
+4g3ex3
+2g1f8
+2g1g
+g1ha
+6g1hei
+5ghel.
+g5henn
+6g1hi
+g1ho
+1ghr
+g1h
+1gi
+gi5la
+gi8me.
+gi1na
+4g3ins
+gis1tr
+g1j
+2g1k
+8gl.
+1glad
+g5lag
+glan4z3
+1glas
+6glass
+5glaub
+g3lauf
+1gle.
+g5leb
+3gleic
+g3lein
+5gleis
+1glem
+2gler
+8g3leu
+gli8a
+g2lie
+3glied
+1g2lik
+1g2lim
+g6lio
+1gloa
+5glom
+1glon
+1glop
+g1los
+g4loss
+g5luf
+1g2ly
+1gl
+2g1m
+gn8
+6gn.
+1gna
+8gnach
+2gnah
+g1nas
+g8neu
+g2nie
+g3nis
+1gno
+8gnot
+1go
+goe1
+8gof
+2gog
+5gogr
+6g5oh
+goni5e
+6gonist
+go1ra
+8gord
+2g1p2
+g1q
+1gr4
+g5rahm
+gra8m
+gra4s3t
+6g1rec
+gre6ge
+4g3reic
+g5reit
+8grenn
+gri4e
+g5riem
+5grif
+2grig
+g5ring
+6groh
+2grot
+gro6
+4grut
+2gs
+gs1ab
+g5sah
+gs1ak
+gs1an
+gs8and
+gs1ar
+gs1au
+g1sc
+gs1ef
+g5seil
+gs5ein
+g2s1er
+gs1in
+g2s1o
+gso2r
+gs1pr
+g2s1u
+2g1t
+g3te
+g2t1h
+1gu
+gu5as
+gu2e
+2gue.
+6gued
+4g3uh
+8gums
+6g5unt
+gut3h
+gu2tu
+4g1v
+2g1w
+gy1n
+g1z
+1g
+8g8m
+6grm
+1g
+1g
+6gb
+1haa
+hab8r
+ha8del
+hade4n
+8hae
+ha5el.
+haf6tr
+2hal.
+ha1la
+hal4b5a
+6hale
+8han.
+ha1na
+han6dr
+han6ge.
+2hani
+h5anth
+6hanz
+6harb
+h3arbe
+h3arme
+ha5ro
+ha2t1h
+h1atm
+hau6san
+ha8
+h1b2
+h1c
+h1d
+he2bl
+he3cho
+h3echt
+he5d6s
+5heft
+h5e6he.
+hei8ds
+h1eif
+2hein
+he3ism
+he5ist.
+heit8s3
+hek6ta
+hel8lau
+8helt
+he6mer
+1hemm
+6h1emp
+hen5end
+hen5klo
+hen6tri
+he2nu
+8heo
+he8q
+her3ab
+he5rak
+her3an
+4herap
+her3au
+h3erbi
+he1ro
+he8ro8b
+he4r3um
+her6z5er
+he4spe
+he1st
+heta6
+het5am
+he5th
+heu3sc
+he1xa
+hey5e
+h1f2
+h1g
+hgol8
+h1h
+h1iat
+hie6r5i
+hi5kt
+hil1a2
+hil4fr
+hi5nak
+hin4ta
+hi2nu
+hi5ob
+hirn5e
+hir6ner
+hi1sp
+hi1th
+hi5tr
+5hitz
+h1j
+h6jo
+h1k2
+hlabb4
+hla4ga
+hla6gr
+h5lai
+hl8am
+h1las
+h1la
+hl1c
+h1led
+h3lein
+h5ler.
+h2lif
+h2lim
+h8linf
+hl5int
+h2lip
+h2lit
+h4lor
+h3lose
+h1ls
+hme5e
+h2nee
+h2nei
+hn3eig
+h2nel
+hne8n
+hne4p3f
+hn8erz
+h6netz
+h2nip
+h2nit
+h1nol
+hn5sp
+h2nuc
+h2nud
+h2nul
+hoch1
+1hoh
+hoh8lei
+2hoi
+ho4l3ar
+1holz
+h2on
+ho1ra
+6horg
+5horn.
+ho3sl
+hos1p
+ho4spi
+h1p
+hpi6
+h1q
+6hr
+h1rai
+h8rank
+h5raum
+hr1c
+hrcre8
+h1red
+h3reg
+h8rei.
+h4r3erb
+h8rert
+hrg2
+h1ric
+hr5ins
+h2rom
+hr6t5erl
+hr2t1h
+hr6t5ra
+hr8tri
+h6rum
+hr1z
+hs3ach
+h6s5amt
+h1sc
+h6s5ec
+h6s5erl
+hs8erle
+h4sob
+h1sp
+h8spa
+h8spel
+hs6po
+h4spun
+h1str
+h4s3tum
+hs3und
+h1s
+h5ta.
+h5tab
+ht3ac
+ht1ak
+ht3ang
+h5tanz
+ht1ar
+ht1at
+h5taub
+h1te
+h2t1ec
+ht3eff
+ht3ehe
+h4t3eif
+h8teim
+h4t3ein
+ht3eis
+h6temp
+h8tentf
+hte8ren
+h6terf
+h8tergr
+h4t3erh
+h6t5ersc
+h8terst
+h8tese
+h8tess
+h2t1eu
+h4t3ex
+ht1he
+ht5hu
+h1ti
+ht5rak
+hts3ah
+ht1sc
+ht6sex
+ht8sk
+ht8so
+h1tu
+htz8
+h5tm
+hub5l
+hu6b5r
+huh1l
+h5uhr.
+huld5a6
+hu8lent
+hu8l
+h5up.
+h1v
+h5weib
+h3weis
+h1z
+h8kl
+hl8s
+hma8tu8
+h8sche.
+ht1s
+hu4s3c
+2h.
+2he
+8hi
+h6s
+hs5c
+hhne6
+hl4s3t
+htte8re
+i5adn
+i1af
+i5ak.
+i1al.
+i1al1a
+i1alb
+i1ald
+i5alei
+i1alf
+i1alg
+i3alh
+i1alk
+i1all
+i1alp
+i1alr
+i1als
+i1alt
+i1alv
+i5alw
+i3alz
+i1an.
+ia5na
+i3and
+ian8e
+ia8ne8b
+i1ang
+i3ank
+i5ann
+i1ant
+i1anz
+i6apo
+i1ar.
+ia6rab
+i5arr
+i1as.
+i1asm
+i1ass
+i5ast.
+i1at.
+i5ats
+i1au
+i5azz
+i6b5eig
+i6b5eis
+ib2le
+i4blis
+i6brig
+i6b5unt
+i6bb
+i1che
+ich5ei
+i6cherb
+i1chi
+ich5ins
+ich1l
+ich3m
+ich1n
+i1cho
+icht5an
+icht3r
+i1chu
+ich1w
+ick6s5te
+ic5l
+i1d
+id3arm
+3ideal
+ide8na
+3ideol
+ide5r
+i6diot
+id5rec
+id1t
+ie1a
+ie6b5ar
+iebe4s3
+ie2bl
+ieb1r
+ie8bra
+ie4bre
+ie8b
+ie2dr
+ie1e8
+ie6f5ad
+ief5f
+ie2f1l
+ie4fro
+ief1t
+i1ei
+ie4l3ec
+ie8lei
+ie4lek
+i3ell
+i1en.
+i1end
+ien6e
+i3enf
+i5enn
+ien6ne.
+i1enp
+i1enr
+i5ensa
+ien8stal
+i5env
+i1enz
+ie5o
+ier3a4b
+ie4rap
+i2ere
+ie4rec
+ie6r5ein
+ie6r5eis
+ier8er
+i3ern.
+ie8rum
+ie8rund
+ie6s5che
+ie6tau
+ie8tert
+ie5the
+ie6t5ri
+i1ett
+ie5un
+iex5
+2if
+i1fa
+if5ang
+i6fau
+if1fr
+if5lac
+i5f6lie
+i1fre
+ift5a
+if6t5r
+ig3art
+2ige
+i8gess
+ig5he
+i5gla
+ig2ni
+i5go
+ig3rot
+ig3s2p
+i1ha
+i8ham
+i8hans
+i1he
+i1hi
+ih1n
+ih1r
+i1hu
+i8hum
+ih1w
+8i1i
+ii2s
+ii2t
+i1j
+i1k
+i6kak
+i8kerz
+i6kes
+ik4ler
+i6k5unt
+2il
+i5lac
+i1lag
+il3ans
+i5las
+i1lau
+il6auf
+i1le
+ile8h
+i8lel
+il2fl
+il3ipp
+il6l5enn
+i1lo
+ilt8e
+i1lu
+i1l
+i8mart
+imb2
+i8mele
+i8mid
+imme6l5a
+i1mu
+i1m
+i5m
+ina5he
+i1nat
+in1au
+inau8s
+8ind.
+in4d3an
+5index
+ind2r
+3indus
+i5nec
+i2n1ei
+i8nerw
+3infek
+1info
+5ingeni
+ing5s6o
+5inhab
+ini5er.
+5inj
+in8kt
+in8nan
+i1no
+inoi8d
+in3o4ku
+in5sau
+in1sp
+5inspe
+5instit
+5instru
+ins4ze
+5intere
+5interv
+in3the
+in5t2r
+i5ny
+in2
+i1nr
+in1s
+in8
+in5d
+i1ns
+2io
+io1a8
+io1c
+iode4
+io2di
+ioi8
+i1ol.
+i1om.
+i1on.
+i5onb
+ion2s1
+i1ont
+i5ops
+i5o8pt
+i1or.
+i3oral
+io3rat
+i5orc
+i1os.
+i1ot.
+i1o8x
+2ip
+i1pa
+i1pi
+i1p2l
+i1pr
+i1q
+i1ra
+ir6bl
+i1re
+i1ri
+ir8me8d
+ir2m1o2
+ir8nak
+i1ro
+ir5rho
+ir6schl
+ir6sch5r
+i5rus
+i5ry
+i5r
+i1sa
+i8samt
+i6sar
+i2s1au
+i8scheh
+i8schei
+isch5m
+isch3r
+isch8
+is8ele
+ise3ra
+i4s3erh
+is3err
+isi6de
+i8sind
+is4kop
+ison5e
+is6por
+i8s5tum
+i5sty
+i5s
+i1ta
+it5ab.
+i2t1a2m
+i8tax
+i1te
+i8tersc
+i1thi
+i1tho
+i5thr
+it8h
+i1ti
+i8ti8d
+iti6kl
+itmen4
+i1to
+i8tof
+it3ran
+it3rau
+i1tri
+itri5o
+it1sc
+it2se
+it5spa
+it8tru
+i1tu
+it6z5erg
+it6z1w
+i1t
+it6r5e
+itt2
+itts5
+i1t
+i1u
+iu6r
+2i1v
+i6vad
+iva8tin
+i8vei
+i6v5ene
+i8verh
+i2vob
+i8vur
+i1w
+iwi2
+i5xa
+i1xe
+i1z
+ize8n
+i8zir
+i6z5w
+i8m
+i16r
+i5t.
+i5v
+i18
+i8
+i65ers
+ja5la
+je2t3r
+6jm
+5jo
+jo5as
+jo1ra
+jou6l
+ju5cha
+jugen4
+jugend5
+jung5s6
+3j
+1ka
+8kachs
+8kakz
+ka1la
+kal5d
+kam5t
+ka1na
+2kanl
+8kapf
+ka6pl
+ka5r6a
+6k3arbe
+ka1ro
+kar6p5f
+4k3arti
+8karz
+ka1r
+kasi5e
+ka6teb
+kat8ta
+kauf6s
+kau3t2
+2k1b
+2k1c
+4k1d
+kehr6s
+kehrs5a
+8keic
+2k1eig
+6k5ein
+6k5eis
+ke6lar
+ke8leis
+ke8lo
+8kemp
+k5ente.
+k3entf
+8k5ents
+6kentz
+ke1ra
+k5erlau
+2k1f8
+2k1g
+2k1h
+ki5fl
+8kik
+king6s5
+6kinh
+ki5os
+ki5sp
+ki5th
+8ki8
+2k1k2
+kl8
+1kla
+8klac
+k5lager
+kle4br
+k3leib
+3kleid
+kle5isc
+4k3leit
+k3lek
+6k5ler.
+5klet
+2klic
+8klig
+k2lim
+k2lin
+5klip
+5klop
+k3lor
+1kl
+2k1m
+kmani5e
+kn8
+6kner
+k2ni
+kn8
+1k2o
+ko1a2
+ko6de.
+ko1i
+koi8t
+ko6min
+ko1op
+ko1or
+ko6pht
+ko3ra
+kor6d5er
+ko5ru
+ko5t6sc
+k3ou
+3kow
+6k5ox
+2k1p2
+k1q
+1kr8
+4k3rad
+2k1rec
+4k3reic
+kre5ie
+2krib
+6krig
+2krip
+6kroba
+2ks
+k1sa
+k6sab
+ksal8s
+k8samt
+k6san
+k1sc
+k2s1ex
+k5spat
+k5spe
+k8spil
+ks6por
+k1spr
+kst8
+k2s1uf
+2k1t
+kta8l
+kt5a6re
+k8tein
+kte8re
+k2t1h
+k8tinf
+kt3rec
+kt1s
+1ku
+ku1ch
+kuck8
+k3uhr
+ku5ie
+kum2s1
+kunfts5
+kun2s
+kunst3
+ku8rau
+ku4ro
+kurz1
+4kusti
+ku1ta
+ku8
+6k1v
+2k1w
+ky5n
+2k1z
+1k
+k4m
+4k3mi
+kse5
+1k
+k1c
+k1s
+1k
+k1c
+kr6sc
+1la.
+8labf
+8labh
+lab2r
+2l1abs
+lach3r
+la8dr
+5ladu
+8ladv
+6laff
+laf5t
+la2gn
+5laken
+8lamb
+la6mer
+5lampe.
+2l1amt
+la1na
+1land
+lan4d3a
+lan4d3r
+lan4gr
+8lanme
+6lann
+8lanw
+6lan
+8lappa
+lap8pl
+lap6pr
+l8ar.
+la5ra
+lar4af
+la8rag
+la8ran
+la6r5a6s
+l3arbe
+la8rei
+6larm.
+la8sa
+la1sc
+la8sta
+lat8i
+6l5atm
+4lauss
+4lauto
+1law
+2lb
+l8bab
+l8bauf
+l8bede
+l4b3ins
+l5blo
+lbst5an
+lbst3e
+8lc
+l1che
+l8chert
+l1chi
+lch3m
+l5cho
+lch5w
+6ld
+l4d3ei
+ld1re
+l6db
+le2bl
+le8bre
+lecht6s5
+led2r
+6leff
+le4gas
+1lehr
+lei6br
+le8inf
+8leinn
+5leistu
+4lektr
+le6l5ers
+lemo2
+8lemp
+l8en.
+8lends
+6lendun
+le8nend
+len8erw
+6l5ents
+4l3entw
+4lentz
+8lenzy
+8leoz
+6lepi
+le6pip
+8lepo
+1ler
+l6er.
+8lerbs
+6l5erde
+le8reis
+le8rend
+le4r3er
+4l3erg
+l8ergr
+6lerkl
+6l5erzie
+8ler
+8lesel
+lesi5e
+le3sko
+le3tha
+let1s
+5leuc
+4leuro
+leu4s3t
+le5xe
+6lexp
+l1f
+2l1g
+lgend8
+l8gh
+lglie3
+lglied6
+6l1h
+1li
+li1ar
+li1as
+2lick
+li8dr
+li1en
+lien6n
+li8ers
+li8ert
+2lie
+3lig
+li8ga8b
+li1g6n
+li1l8a
+8limb
+li1na
+4l3indu
+lings5
+4l3inh
+6linj
+link4s3
+4linkt
+2lint
+8linv
+4lipp
+5lipt
+4lisam
+livi5e
+6l1j
+6l1k
+l8keim
+l8kj
+lk2l
+lko8f
+lkor8
+lk2sa
+lk2se
+6ll
+l1la
+ll3a4be
+l8labt
+ll8anl
+ll1b
+ll1c
+ll1d6
+l1le
+l4l3eim
+l6l5eise
+ller3a
+l4leti
+l5lip
+l1lo
+ll3ort
+ll5ov
+ll6spr
+llte8
+l1lu
+ll3urg
+l1l
+l5l
+l6lb
+2l1m
+l6m5o6d
+6ln
+l1na
+l1no
+8lobl
+lo6br
+3loch.
+l5o4fen
+5loge.
+5lohn
+4l3ohr
+1lok
+l2on
+4l3o4per
+lo1ra
+2l1ord
+6lorg
+4lort
+lo1ru
+1los.
+lo8sei
+3losig
+lo6ve
+lowi5
+6l1p
+lp2f
+l8pho
+l8pn
+lp4s3te
+l2pt
+l1q
+8l1r
+2ls
+l1sa
+l6sarm
+l1sc
+l8sec
+l6s5erg
+l4s3ers
+l8sh
+l5s6la
+l1sp
+ls4por
+ls2pu
+l1str
+l8suni
+l1s
+2l1t
+lt5amp
+l4t3ein
+l5ten
+l6t5eng
+l6t5erp
+l4t3hei
+lt3her
+l2t1ho
+l6t5i6b
+lti1l
+l8tr
+lt1sc
+lt6ser
+lt4s3o
+lt5ums
+lu8br
+lu2dr
+lu1en8
+8lu8fe
+luft3a
+luf8tr
+lu6g5r
+2luh
+l1uhr
+lu5it
+5luk
+2l1umf
+2l1umw
+1lun
+6l5u6nio
+4l3unte
+lu5ol
+4lurg
+6lurs
+l3urt
+lu4sto
+lus1tr
+lu6st5re
+lu8su
+lu6tal
+lu6t5e6g
+lu8terg
+lu3the
+lu6t5or
+lu2t1r
+lu65
+l1v
+lve5r6u
+2l1w
+1ly
+lya6
+6lymp
+ly1no
+l8zess
+l8zo8f
+l3zwei
+lz5wu
+3lnd
+l5on
+l6sc
+lt1s
+5luf
+2lug
+lu6s5c
+l5v
+l1l
+1ls
+l16t
+6l1be
+1ma
+8mabg
+ma5chan
+mad2
+ma5el
+4magg
+mag8n
+ma1la
+ma8lau
+mal5d
+8malde
+mali5e
+malu8
+ma8lut
+2m1amp
+3man
+mand2
+man3ds
+8mangr
+mani5o
+8m5anst
+6mappa
+4m3arbe
+mar8kr
+ma1r4o
+mar8schm
+3mas
+ma1sc
+ma1t
+4m5auf
+ma5yo
+2m1b
+mb6r
+2m1c
+2m1d
+md6s
+1me
+me1ch
+me5isc
+5meld
+mel8sa
+8memp
+me5nal
+men4dr
+men8schl
+men8schw
+8mentsp
+me1ra
+mer4gl
+me1ro
+3mes
+me6s5ei
+me1th
+me8
+2m1f6
+2m1g
+2m1h
+1mi
+mi1a
+mi6ale
+mi1la
+2m1imm
+mi1na
+mi5n
+mi4s3an
+mit1h
+mi5t6ra
+3mitt
+mitta8
+mi65
+6mj
+2m1k8
+2m1l
+2m1m
+m6mad
+m6m5ak
+m8menth
+m8mentw
+mme6ra
+m2mn
+mm5sp
+mm5ums
+mmut5s
+m8mn
+m1n8
+m5ni
+1mo
+mo5ar
+mo4dr
+8mof
+mo8gal
+mo4kla
+mol5d
+m2on
+mon8do
+mo4n3od
+mon2s1tr
+mont8a
+6m5ony
+mopa6
+mo1ra
+mor8d5a
+mo1sc
+mo1sp
+5mot
+moy5
+2mp
+m1pa
+mpfa6
+mpf3l
+mphe6
+m1pi
+mpin6
+m1pl
+mp2li
+m2plu
+mpo8ste
+m1pr
+mpr5
+mp8th
+mput6
+mpu5ts
+m1p
+8m1q
+2m1r
+2ms
+ms5au
+m1sc
+msch4l
+ms6po
+m3spri
+m1str
+2m1t
+mt1ar
+m8tein
+m2t1h
+mt6se
+mt8s
+mu5e
+6m5uh
+mumi1
+1mun
+mun6dr
+muse5e
+mu1ta
+2m1v
+mvol2
+mvoll3
+2m1w
+1my
+2m1z
+m6kl
+1mn
+m1s
+m5tr
+mu4s3c
+3m
+mb2
+6ml
+1m
+5mn
+3mt
+1na.
+n5ab.
+8nabn
+n1abs
+n1abz
+na6b
+na2c
+nach3e
+3nacht
+1nae
+na5el
+n1afr
+1nag
+1n2ah
+na8ha
+na8ho
+1nai
+6nair
+na4kol
+n1akt
+nal1a
+8naly
+1nama
+na4mer
+na1mn
+n1amp
+8n1amt
+5nanc
+nan6ce
+n1and
+n6and.
+2n1ang
+1nani
+1nann
+n1ans
+8nanw
+5napf.
+1n2ar.
+na2ra
+2n1arc
+n8ard
+1nari
+n8ark
+6n1arm
+5n6ars
+2n1art
+n8arv
+6natm
+nat6s5e
+1naue
+4nauf
+n3aug
+5naui
+n5auk
+na5um
+6nausb
+6nauto
+1nav
+2nax
+3naz
+1na
+n1b2
+nbau5s
+n1c
+nche5e
+nch5m
+2n1d
+nda8d
+n2d1ak
+nd5ans
+n2d1ei
+nde8lac
+ndel6sa
+n8derhi
+nde4se
+nde8stal
+n2dj
+ndnis5
+n6d5or6t
+nd3rec
+nd3rot
+nd8samt
+nd6sau
+ndt1h
+n8dumd
+1ne
+ne5as
+ne2bl
+6n5ebn
+2nec
+5neei
+ne5en
+ne1g4l
+2negy
+4n1ein
+8neis
+4n3e4lem
+8nemb
+2n1emp
+nen1a
+6n5energ
+nen3k
+8nentb
+4n3en3th
+8nentl
+8n5entn
+8n5ents
+ne1ra
+ne5r8al
+ne8ras
+8nerbi
+6n5erde.
+nere5i6d
+nerfor6
+6n5erh
+8nerl
+2n1err
+n8ers.
+6n5ertra
+2n1erz
+nesi3e
+net1h
+neu4ra
+neu5sc
+8neu
+n1f
+nf5f
+nf2l
+nflei8
+nf5lin
+nft8st
+n8g5ac
+ng5d
+ng8en
+nge8ram
+ngg2
+ng1h
+n6glic
+ng3rip
+ng8ru
+ng2se4
+ng2si
+n2g1um
+n1gy
+n8gl
+n1h
+nhe6r5e
+1ni
+ni1bl
+ni5ch
+ni8dee
+n6ie
+ni1en
+nie6s5te
+niet5h
+ni8etn
+4n3i6gel
+n6ik
+ni1la
+2n1imp
+ni5na
+2n1ind
+8ninf
+6n5inh
+ni8nit
+6n5inn
+2n1ins
+4n1int
+n6is
+nis1tr
+ni1th
+ni1tr
+n1j
+n6ji
+n8kad
+nk5ans
+n1ke
+n8kerla
+n1ki
+nk5inh
+n5kl
+n1k2n
+n8k5not
+nk3rot
+n8kr
+nk5spo
+nk6t5r
+n8kuh
+n6kb
+n5l6
+nli4mi
+n1m
+nmen4s
+n1na
+n8nerg
+nni5o
+n1no
+nn4t3ak
+nnt1h
+nnu1e
+n1ny
+n1n
+n1n
+n1n
+no5a
+no4b3la
+4n3obs
+2nobt
+noche8
+no6die
+no4dis
+no8ia
+no5isc
+6n5o6leu
+no4mal
+noni6er
+2n1onk
+n1ony
+4n3o4per
+6nopf
+6nopti
+no3ra
+no4ram
+nor6da
+4n1org
+2n1ort
+n6os
+no1st
+8nost.
+no8tan
+no8ter
+noty6pe
+6n5ox
+n1p2
+n1q
+n1r
+nrs3
+6ns
+n1sac
+ns3ang
+n1sc
+n8self
+n8s5erf
+n8serg
+n6serk
+ns5erw
+n8sint
+n1s2pe
+n1spr
+n6s5tat.
+n6stob
+n1str
+n1ta
+n4t3a4go
+nt5anh
+nt3ark
+nt3art
+n1te
+nt3eis
+nte5n6ar
+nte8nei
+nter3a
+nte6rei
+nt1ha
+nt6har
+n3ther
+nt5hie
+n3thus
+n1ti
+nti1c
+n8tinh
+nti1t
+ntlo6b
+ntmen8
+n1to
+nt3o4ti
+n1tr
+ntra5f
+ntra5ut
+nt8rea
+nt3rec
+nt8rep
+n4t3rin
+nt8rop
+n4t3rot
+n4tr
+nt1s
+nts6an
+nt2sk
+n1tu
+nt1z
+n1t
+n1t
+n8tl
+n1t
+1nu
+nu1a
+nu5el
+nu5en
+4n1uhr
+nu5ie
+8numl
+6n5ums
+6n5umw
+2n1und
+6nuni
+6n5unr
+2n1unt
+2nup
+2nu6r
+n5uri
+nu3skr
+nu5ta
+n1v
+8n1w
+1nys
+n1za
+n6zab
+n2z1ar
+n6zaus
+nzi4ga
+n8zof
+n6z5unt
+n1zw
+n6zwir
+1nc
+5ne
+5ni
+n8l
+n6m
+n6re
+n5rz
+5nus
+n1l
+1nt
+n5z
+5n.
+6n12b
+5n
+o5ab.
+oa2l
+o8ala
+o1a2m
+o1an
+ob1ac
+obe4ra
+o6berh
+5o4bers
+o4beru
+obe6ser
+1obj
+o1bl
+o2bli
+ob5sk
+3obst.
+ob8sta
+obst5re
+ob5sz
+o1che
+oche8b
+o8chec
+o3chi
+och1l
+och3m
+ocho8f
+o3chro
+och3to
+o3chu
+och1w
+o1d
+o2d1ag
+od2dr
+ode5i
+ode6n5e
+od1tr
+o5e6b
+o5e6der.
+oe8du
+o1ef
+o1e2l
+o1e2p
+o1er.
+o5e8x
+o1fa
+of8fan
+1offi
+of8fin
+of6f5la
+o5fla
+o1fr
+8o1g
+og2n
+o1ha
+o1he
+o6h5eis
+o1hi
+ohl1a
+oh1le
+oh4l3er
+5ohm.
+oh2ni
+o1ho
+oh1re
+oh1ru
+o1hu
+oh1w
+o1hy
+o1h
+o5ia
+o1id.
+o8idi
+oi8dr
+o5ids
+o5isch.
+oiset6
+o1ism
+o3ist.
+o5i6tu
+o1j
+o1k
+ok2l
+ok3lau
+o8kl
+1okta
+o1la
+old5am
+old5r
+o1le
+ole5in
+ole1r
+ole3u
+ol6gl
+ol2kl
+olk4s1
+ol8lak
+ol8lauf.
+ol6lel
+ol8less
+o1lo
+ol1s
+ol2ster
+ol6sk
+o1lu
+oly1e2
+5olym
+o2mab
+om6an
+o8mau
+ombe4
+o8merz
+om5sp
+o1mu
+o8munt
+o1m
+o1m
+o1na
+ona8m
+on1ax
+on8ent
+o6n5erb
+8oni
+oni5er.
+on1k
+on6n5a6b
+o1no
+ono1c
+o4nokt
+1ons
+onts8
+o1n
+oo8f
+1oog
+oo2pe
+oo2sa
+o1pa
+3o4pera
+o3pfli
+opf3lo
+opf3r
+o1pi
+o1pl
+o2pli
+o5p6n
+op8pa
+op6pl
+o1pr
+o3p4ter
+1opti
+o1p
+o5p
+o1q
+o1ra.
+o3rad
+o8radd
+1oram
+o6rang
+o5ras
+o8rauf
+or5cha
+or4d3a4m
+or8dei
+or8deu
+1ordn
+or4dos
+o1re
+o5re.
+ore2h
+o8r5ein
+ore5isc
+or6enn
+or8fla
+or8fli
+1orga
+5orgel.
+or2gl
+o1ri
+5o6rient
+or8nan
+or8n
+o1ro
+or1r2h
+or6t5an
+or8tau
+or8tere
+o1rus
+o1ry
+o1r
+or12
+o1sa
+osa3i
+6ose
+o8serk
+o1sk
+o6ske
+o6ski
+os2kl
+os2ko
+os2kr
+osni5e
+o2s1o2d
+o3s4per
+o4stam
+o6stau
+o3stra
+ost3re
+osu6
+o6s5ur
+o5s6ze
+o1ta
+ot3auf
+o6taus
+o1te
+o6terw
+o1th
+othe5u
+o2th1r
+o1ti
+o1to
+oto1a
+ot1re
+o1tri
+o1tro
+ot1sc
+o3tsu
+ot6t5erg
+ot2t3h
+ot2t5r
+ot8t
+o1tu
+ou3e
+ouf1
+ou5f6l
+o5u6gr
+ou5ie
+ou6rar
+ou1t6a
+o1v
+o1wa
+o1we
+o6wer.
+o1wi
+owid6
+o1wo
+o5wu
+o1xe
+oy5al.
+oy1e
+oy1i
+o5yo
+o1z
+oza2r
+1o2zea
+ozo3is
+o8
+o5elt
+o1t
+3paa
+pa6ce
+5pad
+pag2
+1pak
+pa1la
+pa8na8t
+pani5el
+pa4nor
+pan1s2
+1pap
+pap8s
+pa8rei
+par8kr
+paro8n
+par5o6ti
+part8e
+5partei
+3partn
+pas6sep
+pa4tha
+1pau
+6paug
+pau3sc
+p1b
+8p5c
+4p1d
+1pe
+4peic
+pe5isc
+2pek
+pen3k
+pen8to8
+p8er
+pe1ra
+pere6
+per5ea
+per5eb
+pe4rem
+2perr
+per8ran
+3pers
+4persi
+pe3r
+pe4sta
+pet2s
+p2f1ec
+p4fei
+pf1f
+pf2l
+5pflanz
+pf8leg
+pf3lei
+2pft
+pf3ta
+p1g
+1ph
+2ph.
+2p1haf
+6phb
+8phd
+6p5heit
+ph5eme
+6phg
+phi6e
+8phk
+6phn
+p5holl
+pht2
+ph3tha
+4ph3the
+phu6
+6phz
+pi1en
+pi5err
+pi1la
+pi1na
+5pinse
+pioni8e
+1pis
+pi1s2k
+pi1th
+p1k
+pl8
+5pla
+p2lau
+4plei
+p3lein
+2pler
+6p5les
+2plig
+p6lik
+6p5ling
+p2liz
+plo8min
+6p1m
+p1n
+1p2o
+8poh
+5pol
+po8lan
+poly1
+po3ny
+po1ra
+2porn
+por4t3h
+po5r
+5poti
+p1pa
+p6p5ei
+ppe6la
+pp5f
+p2p1h
+p1pi
+pp1l
+ppp6
+pp5ren
+pp1s
+pp2ste
+p5p
+pr6
+3preis
+1pres
+2p3rig
+5prinz
+1prob
+1prod
+5prog
+pro8pt
+pro6t5a
+prote5i
+8pro
+pr3l
+1prs
+prte4
+1prf
+p5schl
+2pst
+1p2sy
+p1t
+p8to8d
+pt1s
+5p6ty
+1pu
+pu1b2
+2puc
+pu2dr
+puf8fr
+6p5uh
+pun8s
+pu8rei
+pu5s6h
+pu1ta
+p1v
+p3w
+5py
+py5l
+p1z
+p6der
+p56m
+p8nu
+8pr
+pt5h
+pt1s
+qu6
+1qui
+8rabk
+ra6bla
+3rable
+ra2br
+r1abt
+6rabz
+ra4dan
+ra2dr
+5rafal
+ra4f3er
+ra5gla
+ra2g3n
+6raha
+ral5am
+5rald
+4ralg
+ra8lins
+2rall
+ral5t
+8ramei
+r3anal
+r6and
+ran8der
+ran4dr
+8ranf
+6ranga
+5rangi
+ran8gli
+r3angr
+rans5pa
+8ranw
+r8anz.
+ra5or
+6rapf
+ra5pl
+rap6s5er
+2r1arb
+1rarh
+r1arm
+ra5ro
+2r1art
+6r1arz
+ra8tei
+ra6t5he
+6ratl
+ra4t3ro
+r5atta
+raue4n
+6raus.
+r5austa
+rau8tel
+raut5s
+ray1
+r1b
+rb5lass
+r6bler
+rb4lie
+rbon6n
+r8brecht
+rb6s5t
+r8ces
+r1che
+rch1l
+rch3m
+rch3re
+rch3tr
+rch1w
+8rd
+r1da
+r8dachs
+r8dap
+rda5ro
+rde5ins
+rdio5
+r8dir
+rd3ost
+r1dr
+r8drau
+1re.
+re1ak
+3reakt
+re3als
+re6am.
+re1as
+4reben
+re6bl
+rech5a
+r8edi
+re3er
+8reff
+3refl
+2reh
+5reha
+r4ei.
+reich6s5
+8reier
+6reign
+re5imp
+4r3eina
+6r3einb
+6reing
+6r5einn
+6reinr
+4r3eins
+r3eint
+reli3e
+8r5elt
+6rempf
+2remt
+ren5a6b
+ren8gl
+r3enni
+1reno
+5rente
+4r3enth
+8rentl
+4r3entw
+8rentz
+ren4zw
+re1on
+requi5
+1rer
+rer4bl
+6rerbs
+4r3erd
+8rerh
+8rerkl
+4r3erla
+8rerl
+4r3erns
+6r5ern
+rer5o
+6r5erreg
+r5ertr
+r5erwec
+r5er
+re2sa
+re8schm
+2ress
+re5u8ni
+6rewo
+2r1ex
+r1f
+r8ferd
+rf4lie
+8r1g
+r8gah
+rge4bl
+rge5na
+rgest4
+rg6ne
+r2gni2
+r8gob
+r4g3ret
+rg8sel
+r1h8
+r2hy
+5rhyt
+ri1ar
+ri5cha
+rid2g
+r2ie
+rieg4s5
+ri8ei
+ri1el
+ri6ele
+ri1en
+ri3er.
+ri5ers.
+ri6fan
+ri8fer
+ri8fr
+1r2ig
+ri8kn
+ri5la
+rim8
+ri1na
+r8inde
+rin4ga
+rin6gr
+1rinn
+6rinner
+rino1
+r8insp
+4rinst
+ri1n
+ri5o6ch
+ri1o2d
+ri3o6st
+2r1ir
+r2is
+ri3sko
+ri8spr
+ri5sv
+r2it
+6r5i6tal
+ri5tr
+ri6ve.
+8r1j
+6rk
+r1ke
+rkehrs5
+r1ki
+r3klin
+r1k2n
+rk3str
+rk4t3an
+rk6to
+r6kuh
+rk4s3t
+r1l
+r5li
+rline5a
+6r1m
+r6manl
+rma4p
+r4m3aph
+r8minf
+r8mob
+rm5sa
+2rn
+r1na
+rna8be
+r5ne
+rn2ei
+r6neif
+r6nex
+r6nh
+rn1k
+r1no
+r6n5oc
+rn1sp
+r1n
+r1n
+ro6bern
+6robs
+ro1ch
+3rock.
+ro5de
+ro1e
+4rofe
+ro8hert
+1rohr
+ro5id
+ro1in
+ro5isc
+6rolym
+r2on
+6roog
+ro6phan
+r3ort
+ro1s2p
+ro5s6w
+ro4tau
+ro1tr
+ro6ts
+5rout
+r1p
+rpe8re
+rp2f
+r2ps
+r2pt
+r1q
+2rr
+r1ra
+r1re
+rrer6
+rr6hos
+r5rh
+r1ri
+r1ro
+rro8f
+rr8or
+rror5a
+r1ru
+r3ry
+r1r
+r1r
+r1r
+2r1s
+r2ste
+r2sti
+r6sab
+r4sanf
+rse6e
+rse5na
+r2sh
+r6ska
+r6ski
+rs2kl
+r8sko
+r2sl
+rs2p
+r6stauf
+r8sterw
+r8stran
+rswi3d4
+r2sz
+2r1t
+rt3art
+r8taut
+r5tei
+rt5eige
+r8tepe
+r4t3erh
+r8terla
+r4t3hei
+r5t6hu
+r4t3int
+rt5reif
+rt1sc
+rt6ser
+rt6s5o
+rt6s5u
+rt5und
+r8turt
+rube6
+ru1en
+1r4uf
+ruf4st
+ru1ie
+2r1umg
+2r1uml
+2rums
+run8der
+run4d5r
+6rundz
+6runf
+8runs
+2r1unt
+2r1ur
+r6us
+ru6sta
+rus1tr
+ru6tr
+1ruts
+r1v
+rven1
+rvi2c
+r1w
+r1x
+r1za
+rz5ac
+r6z5al
+r8z1ar
+r8zerd
+r6z5erf
+rz8erh
+rz4t3h
+r8zum
+r4ste
+ru8sc
+r1f
+5rhr
+r5le
+3rll
+5rmis
+r1r
+r2sc
+3rmp
+1sa.
+1saa
+s3a4ben
+sa2bl
+2s1abs
+6s1abt
+6sabw
+3sack.
+6s3a4der
+1saf
+sa1fa
+4s1aff
+sa5fr
+1sag
+1sai
+sa1i2k1
+4s1akt
+1sal
+sa1la
+4s3alpi
+6salter
+salz3a
+1sam
+s5anb
+san2c
+1sand
+s5angeh
+6sanl
+2s1ans
+6s3antr
+8s1anw
+s1ap
+s6aph
+8sapo
+sap5p6
+s8ar.
+2s1arb
+3sarg
+s1arm
+sa5ro
+2s1art
+6s1arz
+1sas
+1sat
+sat8a
+2s1atl
+sa8tom
+3s8aue
+s5auff
+sau5i
+s6aur
+2s1aus
+5s6ause
+2s1b2
+2sca
+s4ce
+8sch.
+3scha.
+5schade
+3schaf
+3schal
+sch5ame
+8schanc
+8schb
+1sche
+6schef
+8schex
+2schf
+2schg
+2schh
+1schi
+2schk
+5schlag
+5schlu
+6schm
+6schna
+1scho
+6schord
+6schp
+3schri
+8schric
+8schrig
+8schrou
+6schs
+2scht
+sch3ta
+sch3tr
+1schu
+8schunt
+6schv
+2schz
+5sch
+5sch
+2sco
+scre6
+6scu
+2s1d
+1se
+se5an
+se1ap
+se6ben
+se5ec
+see5i6g
+se3erl
+8seff
+se6han
+se8hi
+se8h
+6s5eid.
+2s1eig
+s8eil
+5sein.
+sei5n6e
+6s5einh
+3s8eit
+3sel.
+se4lar
+selb4
+6s3e4lem
+se8lerl
+2s1emp
+sen3ac
+se5nec
+6s5ents
+4sentz
+s8er.
+se8reim
+ser5inn
+8serm
+8s5erzi
+6serf
+se1um
+8sexa
+6sexp
+2s1f2
+sfal8ler
+2s3g2
+sge5b2
+s1h
+s8hew
+5s6hip
+5s4hop
+1si
+2siat
+si1b
+sicht6s
+6s5i6dee
+siege6s5
+si1en
+si5err
+si1f2
+si1g2n
+si6g5r
+si8kau
+sik1i
+si4kin
+si2kl
+si8k
+si1la
+sil6br
+si1na
+2s1inf
+sin5gh
+2s1inh
+sinne6s5
+2s1ins
+si5ru
+si5str
+4s1j
+s1k2
+6sk.
+2skau
+skel6c
+skelch5
+s6kele
+1s2ki.
+3s4kin.
+s6kiz
+s8kj
+6skn
+2skow
+3skrib
+3skrip
+2sku
+8sk
+s1l
+s8lal
+slei3t
+s4low
+2s1m
+s1n
+6sna
+6snot
+1so
+so1ch
+2s1odo
+so4dor
+6s5o4fen
+solo3
+s2on
+so5of
+4sope
+so1ra
+2s1ord
+4sorga
+sou5c
+so3un
+4s3ox
+sp2
+8spaa
+5spal
+1span
+2spap
+s2pec
+s4peis
+1spek
+s6perg
+4spers
+s6pes
+2s1pf
+8sphi
+1s2ph
+1spi
+spi4e
+6s5pig
+6spinse
+2spis
+2spla
+2spol
+5s6pom
+6s5pos
+6spoti
+1spra
+3s8prec
+6spreis
+5spring
+6sprob
+1spru
+s2pul
+1s2pur
+6spy
+5spn
+1sp
+s1q
+2s1r
+2ssa
+2sse
+2ssi
+2sso
+2ss
+2ss
+2ss
+2s1sch
+sse8nu
+ssini6s
+ssoi6r
+2st.
+1sta
+4stafe
+2stag
+sta3la
+6stale
+4s2talg
+8stalk
+8stamt
+6st5anf
+4stans
+6stanw
+6starb
+sta4te
+6staus
+2stb
+6stc
+6std
+s1te
+4steil
+6steppi
+8stesse
+6stf
+2stg
+2sth
+st1ha
+st3hei
+s8t1hi
+st1ho
+st5hu
+s1ti
+s2ti4el
+4s2tigm
+6s2tind
+4s2tinf
+s2ti8r
+2stk
+2stl
+2stm
+1sto
+6stoll.
+4st3ope
+6stopf.
+6stord
+6stp
+4strai
+s3tral
+6s5traum
+3stra
+3strec
+6s3tref
+8streib
+5streif
+6streno
+6stres
+6strev
+2st5rig
+8s2t1ris
+s8troma
+st5rose
+4struf
+3strum
+6strg
+2st1s6
+2stt
+1stu
+stu5a
+4stuc
+2stue
+8stun.
+2stv
+2stw
+s2tyl
+6stz
+1st
+8stg
+1st
+1st
+8stch
+4str.
+1su
+su2b1
+3suc
+su1e
+su2fe
+su8mar
+6sumfa
+8sumk
+2s1unt
+sup1p2
+6s5u6ran
+6surte
+2s1v
+2s1w
+1sy
+8syl.
+sy5la
+syn1
+sy2na
+syne4
+s1z
+s4zend
+5s6zene.
+8szu
+1s
+6s5nd
+6sugi
+6su
+5sm
+2s12b
+1sc
+s8di
+1sn
+5s
+taats3
+4tab.
+taba6k
+ta8ban
+tab2l
+ta6bre
+4tabs
+t3absc
+8tabz
+6t3acht
+ta6der
+6tadr
+tad6s
+tad2t
+1tafe4
+1tag
+ta6ga6
+ta8gei
+tage4s
+tag6s5t
+tah8
+tahl3
+tai6ne.
+ta5ir.
+tak8ta
+tal3au
+1tale
+ta8leng
+tal5ert
+6t5a6mer
+6tamp
+tampe6
+2t1amt
+tan5d6a
+tan8dr
+tands5a
+tani5e
+6tanl
+2tanr
+t3ans
+8t5antr
+tanu6
+t5anw
+8tanwa
+tan8zw
+ta8rau
+6tarbe
+1tari
+2tark
+2t1arm
+ta1ro
+2tart
+t3arti
+6tarz
+ta1sc
+ta6sien
+ta8stem
+ta8sto
+t5aufb
+4taufn
+8taus.
+5tause
+8tausf
+6tausg
+t5ausl
+2t1b2
+2t1c
+t6chu
+2t1d
+te2am
+tea4s
+te8ben
+5techn
+4teff
+te4g3re
+te6hau
+2tehe
+te4hel
+2t1ehr
+te5id.
+teig5l
+6teign
+tei8gr
+1teil
+4teinh
+t5einhe
+4teis
+t5eisen
+8teiw
+te8lam
+te4lar
+4telek
+8telem
+te6man
+te6n5ag
+ten8erw
+ten5k
+tens4p
+ten8tro
+4t3entw
+8tentz
+te6pli
+5teppi
+ter5a6b
+te3ral
+ter5au
+8terbar
+t5erbe.
+6terben
+8terbs
+4t3erbt
+t5erde.
+ter5ebe
+ter5ein
+te8rers
+terf4
+8terh
+6terkl
+ter8nor
+ter6re.
+t8erscha
+t5e6sel
+te8stau
+t3euro
+te1xa
+tex3e
+8texp
+tex6ta
+2t1f2
+2t1g2
+2th.
+th6a
+5tha.
+2thaa
+6t1hab
+6t5haf
+t5hah
+8thak
+3thal.
+6thals
+6t3hand
+2t1hau
+1the.
+3t4hea
+t1heb
+t5heil
+t3heit
+t3helf
+1theo
+5therap
+5therf
+6t5herz
+1thes
+1thet
+5thi.
+2t1hil
+t3him
+8thir
+3this
+t5hj
+2th1l
+2th1m
+th1n
+t5hob
+t5hof
+4tholz
+6thopti
+1thr6
+4ths
+t1hum
+1thy
+4t1h
+2t1h
+t1h
+ti1a2m
+ti1b
+tie6fer
+ti1en
+ti8gerz
+tig3l
+ti8kin
+ti5lat
+1tilg
+t1ind
+tin4k3l
+ti3spa
+ti5str
+5tite
+ti5tr
+ti8vel
+ti8vr
+2t1j
+2t1k2
+2t1l
+tl8a
+2t1m8
+2t1n
+3tobe
+8tobj
+to3cha
+5tocht
+8tock
+tode4
+to8del
+to8du
+to1e
+6t5o6fen
+to1in
+toi6r
+5toll.
+to8mene
+t2ons
+2t1ony
+to4per
+5topf.
+6topt
+to1ra
+to1s
+to2ste
+to6ska
+tos2l
+2toti
+to1tr
+t8ou
+2t1p2
+6t1q
+tr6
+tra5cha
+tra8far
+traf5t
+1trag
+tra6gl
+tra6gr
+t3rahm
+1trai
+t6rans
+tra3sc
+tra6st
+3traue
+t4re.
+2trec
+t3rech
+t8reck
+6t1red
+t8ree
+4t1reg
+3treib
+4treif
+8t3reis
+8trepo
+tre6t5r
+t3rev
+4t3rez
+1trib
+t6rick
+tri6er
+2trig
+t8rink
+tri6o5d
+trizi5
+tro1a
+3troc
+trocke6
+troi8d
+tro8man.
+tro3ny
+5tropf
+6t5rosa
+t5ro
+5trub
+5trup
+trut5
+1trg
+6t1rh
+5trb
+tr3bu
+t1rc
+t1rs
+2ts
+ts1ab
+t1sac
+tsa8d
+ts1ak
+t6s5alt
+ts1an
+ts1ar
+ts3auf
+t3schr
+t5sch
+tse6e
+tsee5i
+tsein6s
+ts3ent
+ts1er
+t8serf
+t4serk
+t8sh
+5t6sik
+t4s3int
+ts5ort.
+t5s6por
+t6sprei
+t1st
+t2ste
+t6s5tanz
+ts1th
+t6stit
+t4s3tor
+1t2sua
+t2s1uf
+t8sum.
+t2s1u8n
+t2s1ur
+2t1t
+tt5eif
+tte6sa
+tt1ha
+tt8ret
+tt1sc
+tt8ser
+tt5s6z
+1tuc
+tuch5a
+1tu1e
+6tuh
+t5uhr
+tu1i
+tu6it
+1tumh
+6t5umr
+1tums
+8tumt
+6tund
+6tunf
+2t1unt
+tu5ra
+tu6rau
+tu6re.
+tu4r3er
+2t1v
+2t1w
+1ty1
+ty6a
+ty8la
+8tym
+6ty6o
+2tz
+tz5al
+tz1an
+tz1ar
+t8zec
+tzeh6
+tzehn5
+t6z5ei.
+t6zor
+t4z3um
+t6zu
+5tg
+6th
+t5lt
+t8n
+tre8
+8t8st
+6tu
+t5ffen
+8t8k
+1tn
+4tb
+t65ber.
+5tch
+1tr.
+u3al.
+u5alb
+u5alf
+u3alh
+u5alk
+u3alp
+u3an.
+ua5na
+u3and
+u5ans
+u5ar.
+ua6th
+u1au
+ua1y
+u2bab
+ubi5er.
+u6b5rit
+ubs2k
+u5b
+u8bb
+2uc
+u1che
+u6ch5ec
+u1chi
+uch1l
+uch3m
+uch5n
+uch1r
+uch5to
+ucht5re
+u1chu
+uch1w
+uck1a
+uck5in
+u1d
+ud4a
+u1ei
+u6ela
+uene8
+u6ep
+u1er
+uer1a
+ue8rerl
+uer5o
+u8esc
+u2est
+u8ev
+u1fa
+u2f1ei
+u4f3ent
+u8ferh
+uf1fr
+uf1l
+uf1ra
+uf1re
+uf1r
+uf1r
+uf1s2p
+uf1st
+uft1s
+u8gabt
+u8gad
+u6gap
+ugeb8
+u8gn
+ugo3s4
+u1ha
+u1he
+u1hi
+uh1le
+u1ho
+uh1re
+u1hu
+uh1w
+u1h
+u1h
+6ui
+ui5en
+u1ig
+u3ins
+uin8tes
+u5isch.
+u1j
+6uk
+u1ke
+u1ki
+u1kl
+u8klu
+u1k6n
+u5ky
+u1la
+uld8se
+u1le
+ul8lac
+ul6lau
+ul6le6l
+ul6lo
+ulni8
+u1lo
+ulo6i
+ult6a
+ult8e
+u1lu
+ul2vr
+u1l
+u1l
+3umfan
+5umlau
+umo8f
+um8pho
+u1mu
+umu8s
+u5m
+u1n1a
+un2al
+un6at
+unau2
+6und.
+5undein
+un4d3um
+3undzw
+und8
+un8db
+une2b
+un1ec
+une2h
+un3eis
+3unfal
+1unf
+5ungea
+3ungl
+ung2s1
+un8g
+1u2nif
+un4it
+un8kro
+unk5s
+u1no
+unpa2
+uns2p
+unvol4
+unvoll5
+u5os.
+u1pa
+u1pi
+u1p2l
+u1pr
+up4s3t
+up2t1a
+u1q
+u1ra
+ur5abs
+ura8d
+ur5ah
+u6rak
+ur3alt
+u6rana
+u6r5ans
+u8rap
+ur5a6ri
+u8ratt
+u1re
+ur3eig
+ur8gri
+u1ri
+ur5ins
+3urlau
+urmen6
+ur8nan
+u1ro
+3ursac
+ur8sau
+ur8sei
+ur4sk
+3urtei
+u1ru
+uru5i6
+uru6r
+u1ry
+ur2za
+ur6z
+ur56m
+u5r
+u1r
+urck3
+u1sa
+usa4gi
+u2s1ar
+u2s1au
+u8schec
+usch5wi
+u2s1ei
+use8kel
+u8sl
+u4st3a4b
+us3tau
+u2s1uf
+u8surn
+ut1ac
+u1tal
+uta8m
+u1tan
+ut1ar
+u1tas
+ut1au
+u1te
+u8teic
+u4tent
+u8terf
+u6terin
+u4t3hei
+ut5ho
+ut1hu
+u1ti
+utine5
+uti6q
+u1to
+uto5c
+u1tr
+ut1sa
+ut1s6p
+ut6stro
+u1tu
+utz5w
+u1u
+u1v
+uve5n
+uve3r4
+u1w
+u1xe
+u5ya
+uy5e6
+u1yi
+u2z1eh
+u8zerh
+u5
+ue6n
+uen5e
+8vanb
+6vang
+6varb
+var8d
+va6t5a
+va8tei
+va2t1r
+2v1b
+6v5c
+6vd
+1ve
+6ve5g6
+ver1
+ver5b
+verb8l
+ve2re2
+verg8
+ve2ru8
+ve1s
+ve2s3p
+ve3xe
+2v1f
+2v1g
+6v5h
+vi6el
+vie6w5
+vi1g4
+vi8leh
+vil6le.
+8vint
+vi1ru
+vi1tr
+2v1k
+2v1l
+2v1m
+4v5n
+8vo8f
+voi6le
+vol8lend
+vol8li
+v2or1
+vo2re
+vo8rin
+vo2ro
+2v1p
+8vra
+v6re
+2v2s
+2v1t
+2v1v
+4v3w
+2v1z
+waffe8
+wa6g5n
+1wah
+wah8n
+wa5la
+wal8din
+wal6ta
+wan4dr
+5ware
+wa8ru
+war4za
+1was
+w5c
+w1d
+5wech
+we6fl
+1weg
+we8geng
+weg5h
+weg3l
+we2g1r
+weh6r5er
+5weise
+weit3r
+wel2t
+welt3r
+we6rat
+8werc
+5werdu
+wer4fl
+5werk.
+wer4ka
+wer8ku
+wer4ta
+wer8term
+we2sp
+we8s4tend
+we8str
+we8st
+wet8ta
+wich6s5t
+1wid
+wi2dr
+wiede4
+wieder5
+wik6
+wim6ma
+win4d3r
+5wirt
+wisch5l
+1wj
+6wk
+2w1l
+8w1n
+wo1c
+woche6
+wol6f
+wor6t5r
+6ws2
+w1sk
+6w5t
+5wunde.
+wun6gr
+wu1sc
+wu2t1
+6w5w
+wy5a
+wrme5
+w1sc
+1xag
+x1ak
+x3a4men
+8xamt
+x1an
+8x1b
+x1c
+1xe.
+x3e4g
+1xen
+xe1ro
+x1erz
+1xes
+8xf
+x1g
+8x1h
+1xi
+8xid
+xi8so
+4xiste
+x1k
+6x1l
+x1m
+8xn
+1xo
+8x5o6d
+8x3p2
+x1r
+x1s6
+8x1t
+x6tak
+x8terf
+x2t1h
+1xu
+xu1e
+x5ul
+6x3w
+x1z
+5ya.
+y5an.
+y5ank
+y1b
+y1c
+y6cha
+y4chia
+y1d
+yen6n
+y5ern
+y1g
+y5h
+y5in
+y1j
+y1k2
+y1lak
+yl1al
+yla8m
+y5lax
+y1le
+y1lo
+y5lu
+y8mn
+ym1p2
+y3mu
+y1na
+yno2d
+yn1t
+y1on.
+y1o4p
+y5ou
+ypo1
+y1pr
+y8ps
+y1r
+yri3e
+yr1r2
+ys5iat
+ys8ty
+y1t
+y3w
+y1z
+y8m
+z5a6b
+zab5l
+8za6d
+1zah
+za5is
+4z3ak
+6z1am
+5zange.
+8zanl
+2z1ara
+6z5as
+z5auf
+3zaun
+2z1b
+6z1c
+6z1d
+1ze
+ze4dik
+4z3eff
+8zein
+zei4ta
+zei8ters
+ze6la
+ze8lec
+zel8th
+4zemp
+6z5engel
+zen8zin
+8zerg
+zer8i
+ze1ro
+zers8
+zerta8
+zer8tab
+zer8tag
+8zerz
+ze8ste
+zeu6gr
+2z1ex
+2z1f8
+z1g
+4z1h
+1zi
+zi1en
+zi5es.
+4z3imp
+zi1na
+6z5inf
+6z5inni
+zin6s5er
+8zinsuf
+zist5r
+zi5th
+zi1tr
+6z1j
+2z1k
+2z1l
+2z1m
+6z1n
+1zo
+zo6gl
+4z3oh
+zo1on
+zor6na8
+4z1p
+z5q
+6z1r
+2z1s8
+2z1t
+z4t3end
+z4t3hei
+z8thi
+1zu
+zu3al
+zu1b4
+zu1f2
+6z5uhr
+zun2a
+8zunem
+zunf8
+8zungl
+zu1o
+zup8fi
+zu1s8
+zu1z
+2z1v
+zw8
+z1wal
+5zweck
+zwei3s
+z1wel
+z1wer
+z6werg
+8z5wes
+1zwi
+zwi1s
+6z1wo
+1zy
+2z1z
+zz8a
+zzi1s
+1z
+1z
+6zl.
+z1le
+1z
+2z12b
+1a6
+b1l
+1che
+3chi
+ch8sc
+ch8sp
+5chu
+ck5a
+d1a
+d5era
+6d5ia
+1e
+5fa
+f1l
+ft6s
+g1h
+g3le
+6g5nan
+g5str
+1he
+1hi
+h1le
+h5ne
+1hnl
+h1re
+h5ri
+h1ru
+1hu
+h1w
+6i
+1isc
+6ische
+5ism
+5j
+1k
+l1c
+1le
+8lei
+l6schl
+mi1e
+m8n
+m8s
+5na
+5nderu
+ne5i8
+ng3l
+nk5l
+1no
+n6s5c
+1pa
+p6s5c
+3q
+r1c
+1re
+re8m
+5rgern
+r6gl
+1ri
+3rmel
+1ro
+rt6s5
+1ru
+3rztl
+5r
+6s5chen
+sen8s
+s1th
+ta8b
+1te
+teri4
+ter5it
+6thy
+1ti
+3tk
+1to
+t8schl
+ts1p
+5tu
+ub1l
+u1e
+1ug
+u8ga
+u5i
+1um.
+1us.
+1u
+1z
+1b
+1che
+5chi
+ch8s2tei
+ch8str
+cht6
+56dem
+5ffn
+1he
+h1l8
+h1re
+1hu
+1is
+1ke
+12ko
+1l.
+l6k5l
+l8pl
+1mu
+5na
+nig6s3
+1no
+5o6t
+pf3l
+p6s5c
+1re
+r8gli
+1ri
+r8tr
+1ru
+5sterr
+1te
+5th
+1ti
+1tu
+1v
+1w
+we8
+2z
+b6e2
+34ber1
+b1l
+b1r
+52bu
+1che
+1chi
+8ch3l
+ch6s5c
+8ck
+ck1a
+ck5ers
+d1a2
+6deu
+di8t
+2d1o4
+d5s6
+ge4l5a
+g1l
+h5a
+1he
+8heh
+6h5erk
+h1le
+h1re
+h1ru
+1hu
+h1w
+3k
+1le
+l4l5a
+l8lo
+l4ps
+l6s5c
+1lu
+n8da
+n8fei
+nk5l
+n8za
+n6zw
+5pi
+1re
+8rei
+r8fl
+r8fr
+r8geng
+1ri
+1ro
+r8sta
+1ru
+se8n
+8sta
+8stes
+3ta
+1te
+1ti
+t8tr
+1tu
+t8zei
+1v
+1a8
+5a.
+8as
+1b8
+1c
+1d
+1e
+5ec
+8e8g
+8e8h
+21ei
+8em
+1f8
+1g
+1h
+1i
+1k
+1l
+1m
+1n
+1o
+1p8
+5q
+1r
+1s2
+st8
+1ta
+1te
+t3hei
+1ti
+5to
+1tr
+1u8
+65um
+1v
+1w
+1z
+2s1ta.
+i2s1tal
+2s1tani
+2s1tan.
+fe2s1ta
+te2s1ta
+nd2ste
+ve2ste
+3s2tec
+4s3techn
+3s2teg
+3s2teh
+3s2tein
+3s2teig
+3s2teif
+3s2tell
+3s2telz
+a4s3tel
+3s2temm
+3s2temp
+3s2tep
+s3s2ter
+t3s2tern
+3s2teue
+6s4teuro
+bs2ti
+te2s3ti
+ve2sti
+3s2tic
+3s2tieb
+3s2tieg
+3s2tif
+3s2til
+3s2tim
+3s2tink
+3s2titu
+a2s1to
+gu2s1to
+ku2s1to
+i2s1tol
+i2s1tor
+ve2s1to
+2s1tung
+2s7tus
+o2s1tul
+aus3s4
+ens3s4
+gs3s4
+.mis2s1
+s2s1b8
+s2s3chen
+s2s3d
+s2s5ec
+2s2s1ei
+s2s3f
+s2s1g
+s2s3h
+s2s3k
+s2s3l
+s2s3m
+s2s3n
+s2s3p8
+s2s5q
+s2s3r
+s2s3s2
+sss2t8
+as2s3te
+is2s3te
+us2s3te
+s2s3te
+s2st3hei
+s2s3ti
+s2s1to
+s2s1tr
+6ss5um
+s2s3v
+s2s3w
+s2s3z
+1cker.
+1ckert
+1ckad
+1cke.
+1ckel
+1cken
+4ck1ent
+1ckere
+1ckern
+1ckeru
+1ckie
+1ckig
+1ckun
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_en.dic b/lib/kotext/kohyphen/hyphdicts/hyph_en.dic
new file mode 100644
index 00000000..c2c5f8e2
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_en.dic
@@ -0,0 +1,11388 @@
+ISO8859-1
+.ab4i
+.1ab
+.ab3ol
+.abo2
+.ace4
+.ace2t3
+.a2ch4
+.ac5t2iva
+.a2ct
+.ac2t1iv
+.ad4d1in
+.ad1d4
+.ad3di
+.ad3e
+.a2d3o
+.4a2e5d
+.aer3i
+.aer1
+.a2f3f
+.a2f3t
+.ag4a
+.4a2g5n2
+.a2ir3
+.2ai2
+.al5im
+.4al1k
+.al3le
+.all2
+.a1m5a2r
+.2a2m
+.ama5te
+.am1at
+.am2i
+.am3pe
+.am2p
+.am3ph
+.a2n1
+.an1a3b
+.an2a
+.an2a3s
+.a4nd2
+.an5da
+.an4el
+.a4n4en
+.an4gl2
+.a4ng
+.an4on.
+.an1o
+.a4n3s
+.an2t3a
+.an3t2i3
+.4ant4ic
+.an4t5o
+.a2n2y5
+.a3ph5or
+.2ap
+.a1pho
+.ap4i
+.ar5ab
+.a2r
+.ar5ap
+.ar4c2i2
+.ar1c2
+.ar5d
+.ar4e
+.ar1i4
+.ar4ise
+.ar4isi
+.ar5sen
+.a2r2s2
+.ar2se
+.ar4t5icl2
+.art2
+.ar1t4ic
+.as1
+.as4q
+.as5s1ib
+.a4ss2
+.at5a2r
+.2a2ta
+.ateli4
+.ate2l
+.at5omi4se
+.a2to
+.at2om
+.atom1i
+.at5om1iz
+.2a2t3r2
+.a2t3t4
+.au3b
+.2au2
+.au3g4u
+.aur4e5
+.au4r
+.aus5
+.authen5
+.au3th
+.authe2
+.2av4
+.av5era
+.aver1
+.bap5ti2s1m4
+.b2a4p1
+.ba2pt2
+.bap2t1is
+.barri5c4
+.ba2r
+.b2a4r1r4
+.bar3ri
+.bas4i
+.1bas
+.ba5sic
+.be3d2i
+.b2e
+.2b2ed
+.be3lo
+.1bel
+.be5r4a
+.ber1
+.be5s1m4
+.be1s2
+.bi4er1
+.b4ie2
+.blaz5o
+.2bl2
+.bl2a
+.b4l2az2
+.bo3lo
+.bo2
+.bo1s5o2m
+.bou4n4d
+.bo4u2
+.b2oun1
+.bov4
+.3bra5ch
+.br4
+.br2e2
+.burn5i
+.bu4r
+.bur2n2
+.ca3de
+.ca4gin
+.ca1g2i
+.cam5i
+.c2a2m
+.ca1m3o
+.ca2n1
+.can5t2a
+.ca5p2itu
+.1c2ap
+.cap1i
+.car4i
+.1ca2r
+.cas5u1al
+.3cas1u3
+.cas2ua2
+.ca4ti
+.c1at
+.cen5so
+.1cen2
+.ce4n2s
+.cen5ten1a
+.3cent
+.cen1te
+.cen4t5ri
+.cen1tr2
+.cer4i
+.cer1
+.2ch4
+.cit4a
+.1c2i2
+.cle1m5e4
+.cl2
+.c2le2
+.clima5to
+.cli1m
+.co5i4t
+.1c2o2
+.c2oi
+.co3pa
+.cop5ro
+.co1pr2
+.c4o3r1u
+.co3si
+.co5ter1
+.c2ot
+.coty3le5
+.5coty
+.cri5t2i1c2i2
+.cr2
+.crit1ic
+.cust2om5
+.1cus
+.c4ust2
+.cus1to4
+.3d2av5
+.dea5c2o2
+.dea2
+.de5lec
+.d2ele
+.del5eg
+.de3li
+.de3l2i5r
+.1d4e1m
+.de5nit
+.den1i
+.de3n1o
+.der2
+.de3ra
+.de5re4s
+.d4er2e
+.1de3ri
+.de5sc2r2ib
+.5de2sc2
+.descr2
+.de5ser1v2
+.deser1
+.de5signe
+.des4i
+.des2i4g
+.desi2gn2
+.de5s2ir
+.de5s1is2
+.de5sp2oi
+.des1p
+.des2po
+.determ5i
+.1de1t
+.deter2
+.de3ve
+.de4w
+.di4al.
+.1d2i1a2
+.dia3s
+.di4at
+.din4a
+.2d1in
+.di2o5c
+.3d2i1o2
+.1do2
+.do4e
+.domest5
+.d2om
+.dom2e
+.do2me2s
+.du4al.
+.1du
+.d2ua2
+.du1al
+.3d4u4c
+.d4y2s3
+.2d2y
+.eas4t5
+.ea2
+.ech1in5
+.ech3i
+.e2ch
+.e1c2o3
+.e2c3t
+.e1d5em
+.2ed
+.ede2
+.ed4it.
+.ed1it
+.ed4iti
+.eg4
+.ei3d4
+.e2i5r
+.e2l3ev3
+.2ele
+.el2i
+.elu5s4
+.e1lu
+.e2m3b
+.em5in
+.em1p4
+.em5p4y
+.en1
+.en5c
+.en4d2ed
+.2e4nd
+.ende2
+.e4n3s
+.ent2
+.en5ta
+.eo1s5
+.epi1
+.epi3d
+.er2a
+.er1
+.er5em5
+.2er2e
+.er4i4
+.er4o2
+.eros4
+.er2ot3
+.er4ri
+.e4r1r4
+.es1
+.esc1al5
+.e2sc2
+.es1ca
+.es3p
+.es3t2
+.eter2n5
+.eter2
+.eth3e2
+.e2th1
+.eu1
+.eu4r4
+.eval3
+.evol5ut
+.e1vo
+.evo2l
+.ew4
+.ex1
+.ex3a
+.eye3
+.fal4le
+.1f2a
+.fall2
+.far4i
+.5fa2r
+.fec5un2da
+.3fec
+.fecun1
+.fecu4nd
+.f2e4n4d
+.feo2ff5
+.feof2
+.fi2
+.fi5l2i1a2
+.1fi2l
+.fil5tr2
+.fi1n5e4ss
+.2fin
+.fin2e
+.fine4s
+.f1i4n3g
+.fi5n4it
+.f2in1i
+.fi2s4c5
+.3f2o3c
+.1fo
+.fran5ch
+.1fr2
+.fra2n
+.fu5g4a
+.3fu
+.g2a4m
+.ga1m5e2t
+.gam2e
+.gen4et
+.3gen
+.g4ene
+.ge5neti
+.gen5i1a2
+.gen1i
+.ge3ro
+.ger1
+.glor5i3o2
+.2gl2
+.3glo
+.glor1i
+.gnost4
+.2gn2
+.g2no
+.gno4s
+.go3no
+.3gos3
+.h1ab2
+.ha2
+.ha5bili
+.hab1il
+.hama5
+.h2a4m
+.han4de2
+.ha2n
+.ha4nd
+.hast5i
+.hast2
+.h4e4i
+.he2
+.hem5a
+.hi2
+.hi3b
+.ho2l
+.ho5rol
+.hov3
+.hy3lo
+.h2y
+.hy2l
+.ico3s
+.2i2c2o2
+.idi2
+.i2d
+.2ig3
+.i2g1n2
+.il4i
+.i2m5b
+.in1
+.2i4n3d
+.in3e2
+.2in2i
+.2in3o
+.in3t
+.inve2st5i
+.in3v2
+.inve2
+.invest2
+.i4r3r4
+.2ir
+.i2s4c2
+.is4li
+.i2s1l4
+.is4o
+.i1s2o5m
+.ka5ro
+.ka2r
+.ki4e2
+.kin3e
+.k1in
+.lab4o2
+.l2a
+.l1ab
+.la4m2e
+.l2a2m
+.lam5enta
+.la3men
+.lan5i
+.la2n
+.lash4e2
+.l4as
+.las2h
+.le4m
+.len5t2i
+.le2p
+.le1p5r2
+.les5son
+.3le4s4s
+.les2so
+.le5va2n
+.2lev
+.l3eva
+.libra2r5
+.lib1r4
+.lig3a
+.1l2ig
+.l2i3o2
+.li4o4n1s2
+.l2i4p
+.loc3a
+.1l2oc
+.lo4g2i1a2
+.1l2o1g
+.lo3g2i
+.lo2p
+.loph3
+.lous5i
+.lo4u2
+.lov5er1
+.lub3
+.ly1o3
+.2ly
+.mac5u
+.mal5ad5
+.mal2a
+.ma5l1in
+.mar5ti
+.1ma2r
+.mart2
+.m4a2th5
+.me5lo3d2i1o2
+.m2e
+.melo4di
+.ment4
+.1men
+.men5ta
+.me5r2i2d
+.mer1
+.me5r3in
+.met4er2
+.1me2t
+.met1e
+.mi4e2
+.mi3gr2
+.m2ig
+.min5ue
+.m2in2u
+.mir2k4
+.m2ir
+.mis1
+.mi5to
+.mi2t
+.mo3b2i
+.1mo
+.mo5le2c4
+.mon3a4
+.m4on
+.mor5ti
+.m2ort2
+.mu3n2i
+.mun1
+.mu3si
+.mus2i5c2o2
+.myth3
+.2my
+.3myt
+.n2a5k2
+.n1a
+.nar1i4
+.na2r
+.nast4
+.n2as
+.nas5ti
+.ne2c3t
+.ni4c
+.n1i
+.ni5tro
+.n2itr2
+.n2o4c
+.no2m3o
+.n2om
+.nos3t2
+.no5t1ic
+.n2ot
+.nuc2le5
+.n2u
+.5n4uc
+.nuc3l2
+.o2b2ed5
+.ob2e
+.o1b3e4l
+.o2b3l2
+.od4
+.o2e4d5
+.oe5so
+.o2f5t
+.2oi4
+.ol4d
+.om2e2
+.2om
+.om5el
+.on4ce
+.on1c
+.o2n4e
+.op2i
+.op2t5a
+.1o2p1t2
+.or1
+.or4at4
+.or1a
+.ora5tor1i
+.orat1or5
+.ora2to
+.or5che2
+.or4ch
+.or1c2
+.or3d
+.2or2e4
+.or3eo
+.or4i
+.orn1er4
+.or2n2
+.or2o
+.os1
+.osi4
+.4oth5
+.2ot
+.out1
+.o4u2
+.ov4
+.pal5i
+.para5di4s1
+.1pa2r
+.par2ad
+.par5af
+.par1a5t
+.p2a5ta
+.pa4t2io2
+.pe2c3t4
+.pecu3
+.3ped3e2
+.2p2ed
+.p2e4nd4
+.pen5de2
+.pe2p3t2
+.per3i5n
+.p4eri
+.per1
+.per3se5c
+.pe2r1s2
+.per2se
+.pe5titi
+.3pet
+.pe2ti
+.ph2
+.phe5n2o2m
+.phe4
+.phen1o
+.phon4i
+.1pho
+.ph2o4n
+.p2i2e2
+.pi3l3a
+.p2il
+.plast4
+.p2l2
+.1pl2a
+.pl4as
+.plic4
+.plica4
+.plos4
+.po3l2a
+.1po
+.po5lite
+.pol2it
+.po2p
+.p4op5l2
+.po5si1t2io2
+.3p4os
+.pos1it
+.pos5si
+.po4s1s2
+.pro5bat
+.1pr2
+.pr4oba
+.pu4r4r4
+.pu4r
+.put4te
+.pu2t1t4
+.ra5cem
+.ran5g2i
+.ra2n
+.ra4ng
+.re3c2a
+.r2e
+.r2ef5er2e
+.re2fe
+.re1f
+.refer1
+.re5ga2r
+.re1i4
+.re5lin
+.re1m
+.re5o
+.res5c2i2
+.re2sc2
+.re5sen
+.re5s2po
+.re5stat
+.rest2
+.r2e5s4t2or2e
+.rest1or
+.re5st4r2
+.re3t2a
+.re5u
+.re3w
+.rib5a
+.2r2ib
+.rin4
+.rit2
+.rol4l2a
+.roll2
+.r4os3a
+.sa2
+.sac5r2
+.sal4i
+.sa2l
+.sa5l1in
+.salt5er1
+.s4al4t
+.sal1te
+.sanc5
+.sa2n
+.s4ap5a
+.s3ap
+.sa3vo
+.s2av
+.sci3e2
+.sc2
+.s1c2i2
+.sea3s4
+.se2a2
+.se2ct4
+.sec5to
+.se3gr2
+.sen3t
+.se1q
+.ser4ie2
+.ser1
+.s2es1
+.sev5era
+.3sev
+.sever1
+.s2h2
+.si5g2no
+.s2i4g
+.si2gn2
+.s1is3
+.st4
+.sta2t4o
+.stra5to
+.str2
+.str4in2g5i
+.stri4ng
+.su5d4a
+.sulph5a2
+.1s2ul
+.sulph2
+.sul3t
+.tact4i
+.ta2ct
+.tac5t2ic
+.t2a4m
+.ta1ma2r5
+.tar5o
+.ta2r
+.te2ct4
+.tel5a
+.te2l
+.tell5e
+.1tell2
+.te4m
+.te5ra5t
+.ter1
+.ter4p
+.th4
+.tho4
+.thol4
+.ti2
+.til4
+.t2i5n1i
+.t1in
+.t3i2t4is
+.t1or1
+.tran4c
+.tr2
+.tra2n
+.tri5bal
+.t2r2ib
+.tri3d
+.trin4a
+.t4ri5sti
+.trist2
+.tro4ph
+.tr2op
+.tro1ph5o
+.tro4v
+.tula2r5
+.tu1l2a
+.tur1b4
+.tu4r
+.tur1i4
+.tu5te
+.1tut
+.tu3t2o
+.4ul4l2
+.ulti5mat
+.ultim4a
+.ul1tim
+.un5ce
+.un1
+.un5ch
+.u4n3d2
+.under5
+.unde2
+.un3e
+.u4n3g
+.u1ni3c
+.un2i
+.un2i3o2
+.u4n3k4
+.u4n5s4
+.un3t4
+.un5u4
+.2up1
+.up3l2
+.ur1a4
+.u4r
+.ur5e2th1
+.ur1e2t
+.ur2e
+.ur4o
+.va5l2ed
+.1v2ale
+.ve2
+.vec5
+.ve5lo
+.2vel
+.vent5il
+.vent2i
+.v5er4ie2
+.ver1
+.ver3n2
+.vic5to
+.vic2
+.5vi2ct2
+.vi2s
+.vis3i
+.vi5so
+.v2o1c
+.1vo
+.vo5lut
+.vo2l
+.wine5s
+.wi2
+.win2e
+.xy3l
+.za5r
+.z1a1
+a4a
+1ab
+2ab.
+2aba
+ab5ar2e
+aba2r
+ab4ay4
+2a2b1b2
+ab5ber1
+abb2e
+2ab2e4
+ab3erd
+aber1
+a5b3e4r1r4
+a3bet
+ab1ic
+a3b4ie2
+2abin
+4a1b2i2o2
+abi5on
+ab3it1a
+ab4itu
+ab3l2a
+a2bl2
+abli4
+4abolic
+abo2
+abol3i
+ab3om
+ab3ota
+ab2ot
+3about
+abo4u2
+ab1r4
+2abs.
+a4b1s2
+ab1ul
+abu4lo
+ab3use
+ab3usi
+2a2by
+ac2a
+ac5a2bl2
+ac1ab
+ac3al
+5ac1anth2
+aca2n
+ac5ard
+a1ca2r
+a5c1at
+ach5al
+a2ch
+acha2
+a5ch2in1i
+ach1in
+ach5i2s1m4
+achro4
+a3c2hr
+ach5u4r4
+2a1c2i2
+a4cic
+aci4e2r1s2
+aci3er1
+acie2
+ac2i3f4
+4acit
+ack5a
+ack1
+ac3li
+acl2
+4a4co.
+a1c2o2
+aco3d
+ac5on1r
+acon1
+4acos
+4aco4u2
+ac1r2
+ac3r2y2
+act5ate
+a2ct
+ac2ta
+act5ile
+ac2to
+act5o2r2y
+act1or
+ac2t5r2
+ac5uat
+ac2ua2
+a5d2ai2
+a3d2a3v
+4adee
+ad5en1i
+ad4ha2
+a4d1h
+ad3ica
+a5d2i1f
+4adil4
+adi4op
+a3d2i1o2
+ad2i4p
+adis4i
+adi4s1
+a3diti
+3adju
+ad1j
+5admi2t
+a2d1m
+a2do
+4adoe
+4ad2oi
+ad3ol
+a3d4os
+ad1ow
+ad1r2
+a3dr2a2m4
+4a2du
+ad3u1l2a
+ad3um
+4a2d2y
+ae5a2
+ae4cit
+ae1c2i2
+ae1c2o3
+4a2ed
+aed5i4s1
+ae5g
+ae3on
+ae5p
+aero2d2y5
+aer1
+aer2od
+ae4s
+ae5si
+aes3t2
+aet4a
+ae2th4
+aet4or.
+aet1or
+aev3a
+4af.
+4afe
+af5ta
+a2ft
+a4fu
+ag4ar1i
+aga2r
+4ageri
+ager1
+a5ghe2
+a2gh
+a5g2i1a2
+a1g2i
+agi4as
+4ag2ino
+4a2gl2
+agli4
+4a2g1n2
+ag3on1i
+agor4a
+ag5ot
+a2gr2
+ag3ri
+a3gru5
+2ah
+a1h2a2
+aha2r2
+aha5r1a
+a1he2
+a2h4n2
+a5h2oo
+2ai2
+4ai.
+a2i3a2
+a1ic
+aid4a
+ai2d
+aid5er1
+a2ig2
+ai5gu
+ai2l3er1
+ail3o
+aim5er1
+aim2e
+ain5de2r3s2
+a2i4nd
+ainde2
+ainder1
+a4i5nea2
+a3ing.
+ai4ng
+a2in3i
+a2in5o
+aint5er1
+ain1te
+air5a
+a2ir
+air5p
+ai2r3s2
+ais1i
+a5i2s1m4
+2a1j
+a4ju
+2ak
+akel4
+ak5u
+al5a2bl2
+al2a
+al1ab
+ala2ct4
+al4ac
+a1l4ae
+al5ais
+al2ai2
+ala3ma
+al2a2m
+al5ance
+ala2n
+al3at
+a5l2av
+al2c3at
+al1c2
+al3ch
+ald5ri
+aldr2
+2ale
+a3lec
+aleg4
+ale5ma
+al5end4e2
+al2e4nd
+a1leo
+a2let
+al3ib1r4
+ali4c2i2
+al5i4c5s4
+al1i2d
+al3i1f
+5a1l2ig
+al1in
+a5l2in1i
+al2in5o
+al5ipe
+al2ip
+al5ip2ot
+ali3po
+4alis.
+al1is
+4al2i1u2
+4alk
+alk5ie2
+al4l1ab
+all2
+al1l2a
+al4lag
+alli5a2n
+al1li
+all2i1a2
+al1l2ig4
+al4lis2h
+all1is
+a5loe
+al3o1gr2
+a1l2o1g
+a3l2om
+a3l2oo
+al1or
+al4orim
+alor1i
+alos4
+a4lo4u2
+al3ous
+a5low
+al5pen
+al3ph2
+al5tati
+al3tie2
+alu3b
+al5u4ed
+a4lue
+al3ues
+a5lumn2i1a2
+alu4m1n2
+alumn1i
+al1va
+al5ver1
+alv5u
+2a2ly4
+a5lyn1
+2a2m
+a5mad
+ama4g
+ama4n5d
+a1ma2n
+a5marin4e
+a1ma2r
+amar1i
+a3mas.
+am1at
+a5m4at1i2c
+am5a2tu
+am4bin
+a2m1b
+amb2i
+3ambu
+am5elo
+am2e
+a3men
+am2e4n4d
+am3era
+amer1
+am5erl
+am1i
+am1i2c
+am5ica
+am2i1c5r2
+3ami2d
+a3mili
+am2il
+am5i2ly
+amin2i4f
+am2in1i
+am5in1iz
+am4inos4
+am2ino
+a5m2is.
+a4mium.
+a3m2i1u2
+ami3um
+a3m4on
+a1mo
+amor5a
+am2ort3
+am5ose
+am2p
+am5p4er3i
+amper1
+amph2i5g
+amp3li
+amp2l2
+ampo5l
+am3po
+am3ul
+amyl5
+a2my
+a2n
+an2a
+a5nadi4
+an3ae
+an3age
+an2a5k2
+an3ali
+an3ar1c2
+ana2r
+a5nast2
+an2as
+an4con1
+an1c2o2
+an3d4at
+a4nd
+an2da
+and5au2
+and5eer1
+ande2
+an5de4l
+an5d2i1f
+and5ist2
+andi4s1
+an5dit
+an4don1i
+an1do
+an4ea2
+an5eer1
+an3ell2
+anel5li
+an3eu
+a2n3ga2n
+a4ng
+ang2a
+angov4
+an1go
+an4gu4r
+an1gu
+4an1h2
+an3ic
+an1i
+an2i3f
+an5i3fo
+4an2i2g
+an5ion
+an2io2
+anis5te2
+anist2
+4anity
+4an2i1u2
+an5no
+an1n4
+4an2ny2
+an1o
+an2oe
+an3o1ma
+an2om
+anor3
+an2os
+an5ot
+a4n2s
+an3s2c2
+an4s2c2o2
+ans3il
+an2si
+an4su4r
+an3su
+an2t2a
+ant5a2bl2
+an2t1ab
+an3t1al
+an5t2a2m
+an2te
+1anth2
+an4thi
+3an1t2h2r
+4ant1ic
+ant2i
+an4tie2
+an4t3i4ng
+ant1in
+an2t4iv
+an4to2n4e
+an1t2o
+an1t4r2
+an4tus
+an1tu
+an5tym
+an2ty
+an3ul
+an2u
+an3um.
+an5u4m1s
+a3nu4r
+a5nut
+a2n2y2
+an5y1a2
+a5ny1i
+2ao
+aol3i
+5aow
+2ap
+4ap.
+4apa
+a1pac
+ap3al
+ap5aro
+a1pa2r
+ape5li
+a5peu
+aph5em
+aphe4
+aph3i
+aph5ol
+a1pho
+a3phy2l3
+aph2y
+ap1i
+ap5icu
+ap3in
+ap4in4e
+a5p2ir
+a3pla2n
+ap2l2
+a1pl2a
+ap5li
+apo5str2
+a1po
+a3p4os
+apost2
+ap4o3th
+ap2ot
+a2pr2
+ap5ron
+4a2ps2
+apt5at
+a2pt2
+apu5la2r
+apu1l2a
+a5p4un1
+a4q
+a5q2ui2
+aqu4
+a2r
+4arabi
+ar1ab
+ar2a5bo2
+aract4i
+ara2ct
+ara2g
+ar3age
+ar4a2g2e4d
+ar5a1g2i
+ar3ago
+a3r2a1j
+ar3all2
+ar2a3m
+ara4n4g
+ara2n
+aran5te
+aran2t
+ar5apa
+ar2ap
+ar1at
+a3r2au2
+ar2a3v
+ar3ba
+ar1b
+arb5et
+ar2b2e
+ar4b2i2d
+arb2i
+ar4bl2
+arb3li
+ar4bul
+ar5chet1
+ar1c2
+ar2ch
+arche2
+ar1ch5o
+ar5din1a
+ar2d2in
+ar4do2ne
+ar1do
+ar3en
+ar2e
+ar2e4n5d
+ar5e2t2t4
+ar3e1v5
+ar5gh
+ar1g2
+ar3gu
+ar3h2
+ar1i
+ar5i2ff
+ar2i1f
+ar4ill2
+a5r4i5net
+arin4e
+ar5in1i
+a5rishi
+aris2h
+arm3er1
+arm2e
+ar5mi2t
+ar3nal
+ar2n2
+arn1a
+ar3nis
+arn1i
+ar3od
+ar5o2i4d3
+a4r2oi
+aro4mas
+ar2om
+aro1ma
+aro4n
+a5roti
+ar2ot
+a5ro4uc
+aro4u2
+a4r3o4x
+arp5e2r1s2
+arpe2
+arper1
+ar4pu
+2a4r1r4
+ar2rh2
+a2r2s2
+ar2s5a2l
+ar3so
+art5at
+art2
+ar2th
+arth4e2
+ar1t2h3r
+ar5t1iz
+2aru
+ar3um
+ar5un4
+a3ry1o2
+a2r2y
+a5ry2t
+ar5z
+as1a
+as4af
+asa2n2
+2asc2
+as5con1
+as2c2o2
+as5c2ot
+as2cr2
+as2e
+as3e2ct
+4a2s2ed
+ase2p4
+ash5ay
+as2h
+asha2
+ash5i4l
+as5i2ly
+a2s3in
+a5s2io4
+a3s1it
+a4s5iv
+ask5er1
+as2k2
+aske2
+aski4
+as4l2a
+a2sl4
+as4lo
+2aso
+as5o2ch
+as2oc
+a4s4o2n2ed
+as4o2ne
+as5or
+as3ph2
+a4ss2
+assa5g2i
+as1sa
+assa4g
+ass5i2bl2
+as4s1ib
+as4sil
+as3s2it5
+2asta
+ast2
+as4tat
+as4t2i3a2
+as3t1is
+as4tit
+4asto2
+as3tra
+astr2
+as4tri
+as1u
+as4un1
+as5u4r
+2a2ta
+4atabi
+a2t1ab
+a5tal1is
+at2a2m4
+at2a3p
+atar3a
+ata2r
+ata3s
+ata3t4
+at3e2au3
+atea2
+at3e2ch
+at5eer1
+a5tel.
+ate2l
+at2e5le
+at5enat
+aten1a
+at3ent
+4ater1
+at3era
+at5er1n3is
+ater2n2
+atern1i
+at5ern3iz
+4ate4ss
+a2t2es
+at5et
+4a2th
+ath3a4
+a3then
+athe2
+ath5er3in
+at4her1
+ath5ero
+ath5ete
+athet1
+ath3i
+ath3od
+a5th2o4n
+a1t2h5r
+4a3t2i2a2
+at1i2c
+at5icis
+at2i1c2i2
+ati5cit
+at5ic1iz
+a2t2i1f2
+a4t1i4l
+a4tim
+a2t3in
+4atin1a
+at5i4ng
+4at4is.
+a2t1is
+at1it
+atit3u
+atitud5i
+4a3t2i1u2
+at4ivi
+a2t1iv
+a5tiv1iz
+a2to
+5at5od
+4a1t2o1g
+2atol
+4aton
+a3t2oo
+a4to2ps2
+a5t4oria2n
+at1or
+ator1i
+ator2i1a2
+a4to2r2y
+atos4
+a5t2oz
+2a2tr2
+at3ra
+a4tr2e
+5at5re4s4s
+at1ri
+a3t2r2ic5u
+at3ron
+at5ro4u2
+at4tag
+a2t1t4
+atta4
+2a2tu
+at1ul
+atu4m
+at3ur1a
+atu4r
+at3ur1g2
+4a2ty
+2au2
+4au.
+au1b5i
+4a4uc
+au5cer1
+au1c3o2
+au4d5er1
+aud4e
+audic4
+aul3i
+aul4t
+aul5t4ed
+aul1te
+ault5er1
+ault5i
+au3ma
+aun2
+aun5ch4ie2
+aun2ch
+au4n3d
+aun4dr2e
+aundr2
+au5reo
+au4r
+aur2e
+aur4o
+au5ror
+4aus.
+aus5er1
+aus5p
+au4s4t4ed
+a4ust2
+auste2
+aut3a2r
+aut3er1
+au3th
+2av
+a2v4ab
+ava4g
+av3a4ge
+ava5l2a
+av5alr4
+av5ant
+ava2n
+av5a2r
+avas3
+av3e4nd
+av3er2n2
+aver1
+av3ig
+av4i1ol4
+a3v2i1o2
+av1is
+aw5er.
+awer1
+aw5e2r1s2
+aw1i2
+aw5n2ie2
+awn1i
+aw5y2
+a4x
+ax2i2d
+ax1i
+4ay
+ay5l2a
+ay3m
+ayn4
+a4y2s2
+ay5si
+ay5sta
+ays1t2
+ayth4
+2az2
+az3a2r
+az1a1
+aze4
+az5ee
+azy1g4
+azz4l
+azz2
+2ba.
+ba5b2ir4
+b1ab
+3back1
+baen4
+bag4a
+5b2ah
+b2a4i2
+bal3a
+balm5i
+balm2
+ba5lon
+bal5u
+bam4a
+b2a2m
+ban4a
+ba2n
+ba5na2n
+b4ane
+5ba4ng
+b4aniti
+ban1i
+b4a4n2s
+b2a4p1
+5bar1b
+ba2r
+bar4d
+bardi4
+bar4n2
+ba5r2om
+bar3o4n
+5ba2r2s2
+1bas
+bas4te2
+bast2
+b4a4th4
+3bat1i2c
+ba5t2io2
+b4at5on
+ba2to
+battle5
+ba2t1t4
+bat2tl
+2b1b2
+b4b2a2ta
+b3bli
+b2bl2
+b4bo2n4e
+bbo2
+b3bon
+b1c2
+bcord4
+b1c2o2
+2b1d
+bdeac5
+bdea2
+bde4b
+b1di4v2
+b2e
+4be.
+3bea2
+4beas
+be3c2a
+3becu
+2b2ed
+be3da
+bed5el
+bede2
+bed2i
+be4do
+be5dra
+bedr2
+be4du
+5bee
+3be1f
+be3go
+be5gr2
+be3gu
+1bel
+be3l2a
+2b2ele
+be3l1it
+bel4t
+be3m
+b2e4n4d
+ben2d5a
+bend5er1
+bende2
+b4e1ne
+be5n2i2g
+ben1i
+b4e5n2u
+4beo
+be3q
+2b2er2e
+ber1
+berg2a5m
+ber1g2
+berl4
+5be4r1r4
+be2r5s2
+b5er2t1in
+bert2
+be1s2
+2b4es.
+be3sl4
+be3tr2
+be3w
+2b1f
+b1f2a4
+4b1h
+b4ha2
+2bi.
+1b2i1a2
+bi4b1
+bi1cen5
+b4ice
+3b2i2d
+bid5i
+b4ie2
+bi4e2r1s2
+bi1er1
+b2i1f4
+bi4fid.
+bifi4d
+bi5ga
+b2ig
+bigu3
+b1il
+b2ile
+5biles
+3b2ill2
+4bim
+bi1me2t5
+bim2e
+5bin1a
+5b2i4n4d
+bind3e2
+bin5et
+b2in5i4
+1b2i2o2
+b4i1o3l
+bi2o5m
+bi3o4u2
+b2ip4
+b2i5q
+b2ir4
+bi3r2e4
+bi5rus
+b2is
+5bi2s1m4
+bis4o
+bi5s2ul5
+3bit2u1a2
+4bity
+bi5ve
+b1j
+4b5k4
+2bl2
+5bl4ac
+bl2a
+blag4
+b3la2n
+5blast2
+bl4as
+bl2a5tu
+blem5at
+3b2ler1
+5blesp
+4b3l2ik2
+blim3a
+bl2i3o2
+bl2i2q
+b3l1is
+4b2ly
+2b1m
+bment4
+bm2e
+b1men
+bmi4
+4b1n
+bo2
+4bo.
+3b2oa2
+bo5a2m
+5bob
+bod5i
+bo5h2
+2bo2i4d
+b2oi
+4boke
+bol4e
+4bo2l2ed
+bol3i
+bol4t
+3bon
+bon4c
+bo2n4e
+bon4ie2
+bon1i
+bon3i4f
+bon4sp
+bo4n1s2
+1b2oo
+b3orat
+bor1a
+bor3d
+bor5ee
+b2or2e
+bor5et
+3bor1i
+bor5ic
+bor5i3o2
+bor4n2
+bot3a2n
+b2ot
+5boti
+boun5t2i
+bo4u2
+b2oun1
+3bou4r
+bous4
+bow2
+bow3s4
+4boxy
+bo4x
+5b2oy
+br4
+3bra2ch
+4bral
+br2a2m4
+b2ra2n
+bra4n4d
+4b4re.
+br2e
+b4reas
+brea4
+4b2res
+brev5et
+bre1v
+b2ri2d
+5brie1f
+brie2
+bri4ng5
+bri4os
+br2i3o2
+b5rist2
+b4r2oa2
+bro4ma
+br2om
+bros4
+brum4
+4bry.
+b2r2y
+4b1s2
+b3sc2
+bscon4
+bs2c2o2
+bsen4
+bserv5a2n
+bser1
+bser1v2
+b5si
+b2sin4
+bso2
+bsol3e
+bs2ol
+bso3lu
+b4stac
+bst2
+bstu1pe5
+bs1tu
+bst2up
+2b1t
+b5t1let
+b2tl
+4bu.
+5bub
+buf5fer1
+buf2
+bu2ff
+buf1fe
+b4ul2i
+b4ulos
+bu1lo
+bun2
+bu4n4a4
+b5u5nat
+bunt4
+bur3e
+bu4r
+bur4ri
+bu4r1r4
+busi4e2
+bu4ss2
+bus5si
+3b4ust2
+bu5ta2r
+b3ute
+b5ut1in
+but2i
+3bu3t2io2
+bu2t4iv
+b5ut5o
+b1v
+4b3w
+2by
+4by.
+3by1i
+b4y2s4
+5byt
+2ca.
+c2ab5in
+c1ab
+c4ace
+ca1c2o3
+cad4r2
+5caf
+ca3go
+5c2ai2
+5c2ak
+c1al
+c4al2a
+ca5la1ma2n
+cala3ma
+cal2a2m
+cal5a2r
+3cal1c2
+ca5le1f
+c2ale
+cal2l5in
+call2
+cal1li
+cal4m2
+c2a3ly4
+ca3ma
+c2a2m
+cam4i
+ca5na2r
+ca2n
+can2a
+c2an4e
+c4an1o
+ca3n2oe
+can5ta2r
+can2t2a
+can5t4ed
+can2te
+c4an4t1ic
+cant2i
+can4t4r2
+5c2ao
+1c2ap
+ca5p2il
+cap1i
+ca2pt4
+cap3ti
+cap3u
+1ca2r
+ca3ra5c
+car5am2e
+car2a3m
+ca3ree
+car2e
+ca3r4i3c
+car1i
+car3i1f
+car5m
+car3n1i
+car2n2
+car3ol
+car5o4n
+car5oo4
+ca3ro4u2
+car4v2
+cas2e5
+cashi4
+cas2h
+3ca4s3s2
+cas5t2ig
+cast2
+3cas1u3
+c1at
+c4at.
+c2a2tc2
+c4at2om
+ca2to
+c2a3t2r2
+c4a4t1s
+c2a2t4u
+3c2au2
+caulk4i
+cav3i4l
+c2av
+3c4ay
+c1c4
+ccen1t5r2
+c1cen2
+c3cent
+cces4sa
+c5ce4ss
+c3ch
+cci3d4
+c1c2i2
+cc2ip4
+cc2le3
+ccl2
+4ce.
+4c4e1ab
+cea2
+cea2n3
+3ceas
+ce4c2i2
+2c2ed
+5ceda
+ce3da2r
+3cede2
+3cedi
+4ce1f
+ce5g
+3ce2iv
+cel3ai2
+cel2a
+cel5ib5
+5cell2
+cel5lin
+cel1li
+celo4
+ce5l2om
+4ce2ly
+2cem
+ce4me2t
+ce1m2e4
+3cemi
+ce4mo
+1cen2
+5cenc
+cen5c2i2
+cen5d2ed
+c2e4nd
+cende2
+cend5en
+cend5er1
+cen3i
+2cen1n4
+3cent
+cent4a
+cen5t4ed
+cen1te
+cen5ter.
+center1
+cen5te2r1s2
+cen5t2es
+1cep
+cept3a
+ce2pt2
+cep5t4ic
+3cera
+cer1
+cer4b2i
+cer1b
+3c2erd
+ce3rem
+c2er2e
+5cer2n2
+5ce4ss
+cest5o
+cest2
+ces5t4r2
+ce2t
+cew4
+2ch
+4ch.
+4ch1ab
+cha2
+3chae
+3ch2ai2
+cham5per1
+ch2a4m
+cham2p
+chan5g2i
+cha4n2g
+cha2n
+ch4a3pa
+ch2ap
+chec4
+che2
+4ch2ed
+3chee
+3chem
+che3o2l
+ch1er1
+ch4eri
+5cher3in
+ch4erl
+4ches
+3chete
+chet1
+ch5eu2
+che5va
+che4v4
+3chew
+ch5ex
+5c2hi.
+3ch2i1a2
+3ch2i2c2o2
+ch1ic
+ch3i2ly
+chi4l
+ch4in.
+ch1in
+ch3in1n4
+3ch2io2
+5ch2i2p
+ch2izz4
+ch1iz
+ch5k
+5chlor
+c4hl
+4c2h1m
+1cho
+ch2o3a2
+5ch2oc
+4ch2oi
+ch5o2i4d
+3chor
+4cho2r4ed
+ch2or2e
+chor5ol
+4choso
+3ch2ot
+4choti
+ch5ous
+ch2o4u2
+chow5
+3c2hr
+chu4r4
+3chut
+5chy1d4
+ch2y
+3chy2l
+3chy2m
+1c2i2
+4ci.
+4ciac
+c2i1a2
+ci2a4m
+ci3ca
+4ci4d1s2
+ci2d
+4cie.
+cie2
+ci3er1
+ci3es2t2
+c2i5et
+c2i3f
+cifi4
+4c2ig
+ci3ga
+c3iga2r5
+3cil
+cil5lin
+cill2
+cil1li
+2cim
+cim3a
+ci3m2e
+5ci1men
+4cin3ab
+cin1a
+4c2i4nd
+c4ine5a2
+cine5mat
+ci5ne4ss
+cine4s
+4cint
+c4i3ol
+c2io2
+ci5om
+ci4po
+c2ip
+cisi4
+c2it3r2
+ck1
+cka2r5
+cka5t
+c4ke
+ck5i1f
+ck4sc2
+c4k1s
+cl2
+cla5r2i1f
+cl2a
+cla2r
+clar1i
+3cl4as
+c2le2
+2c4le.
+c5lec
+clemat4
+c2lev3
+cli1m
+c3li4ng
+cl2i2q
+c1lo4q
+c4l4o1tr2
+cl2ot
+c4lue4
+cl2yp5
+c2ly
+5cl4y2s
+cn2
+c3n1i
+1c2o2
+4co.
+3c2oa2
+c4o5ba
+3c2oc
+co3c2i2
+co5cu
+co3dic
+co3d2i1f
+4co2d2y
+3coe
+co5et
+co3gr2
+c2o1g
+4c3o2i4d
+c2oi
+co3inc
+4col.
+col3a
+co3l2o1g
+co1lo
+5col1o4u2
+co5ly
+co5mas
+c2om
+co1ma
+co4m2e
+co3mo4
+com1p4
+con1
+con4ati4
+con1a
+con4ch
+con1c
+con3d5er1
+co4nd
+conde2
+con4ey
+co2ne
+con4ie2
+con1i
+co4n3s2
+c2on3t
+conta5d
+3c2oo
+coo2p4
+co3or
+cop4e
+co3ph
+c4o5p2l2
+co3po
+c1o2p4t2
+2cor1a
+cor5d2ed
+cord5er1
+4co2r4ed
+c2or2e
+co3rel
+3cor2n2
+4coro
+co5rol
+5c2ort2
+3cos.
+c4ost3a
+cost2
+cost5er1
+coste2
+co5ta
+c2ot
+3c4o3tr2
+5coty
+co4us5t2
+co4u2
+cov1
+co3va
+cow5a
+c2oz4
+co5z1i
+c1q
+cr2
+5craf
+craft5i
+cra2ft
+c4ra2n
+5cran1i
+cr4a5n2i1u2
+cras3t2
+cras2
+cra4te
+c2r2e
+4crea2n
+crea4
+cre3at
+cre4p3
+5creti
+cre4t2o
+cret5or
+cri3l
+cron4
+crost4
+4cro4u2
+5c4rus
+c2r2y2
+crym3
+cry1o3
+4c5s4
+csim5
+2ct
+c2ta
+c3tac
+ctac5u
+c5ta5g
+ct1a2n
+ct5ant
+c5tar2i1a2
+cta2r
+ctar1i
+c3ta2to
+c1te
+c4tea2
+c2t5ee
+c4tent
+cter4i1a2
+c1teri
+cter1
+c2t5es
+ct5et
+ct2ic
+c5tic2i1a2
+ct2i1c2i2
+c4ti4c5s4
+ctifi4e2
+c1t2i1f2
+c3tim
+ct4in.
+ct1in
+ct4in1a
+ct5i4ng
+c3t2in1i
+c5t2in5o
+c5t2io2
+c3t2is
+c3tit
+c4titu
+c4tity
+ct5ive
+c2t1iv
+ct4iv1i2t
+ct5o1lo
+c1t2om
+c3ton
+c5toris
+ct1or
+ctor1i
+c5tor1iz
+c1tr2
+c2tr2e
+ct2r2o5t
+c1tu
+c2tum
+c1ty
+cub3at
+cuba4
+c4uf2
+cu5ity
+c2ui2
+cu4l5ab
+cu1l2a
+c2ul2i
+cul2l5er1
+c4ull2
+cul2l5in
+cul1li
+1c2ult
+cu4mi
+5cu4n3a4
+cun1
+cun4e
+5cun2i
+5cuol
+cu5pa
+c2up
+cu3pi
+c3up2l2
+1cu4r
+cur4er1
+cur2e
+cur5ial
+cur1i
+cur2i1a2
+4cur4o
+1cus
+cus5a
+c3u2t1iv
+cut2i
+c3utr2
+5cuu4
+cu5v2
+2cy.
+cy4b2i
+c4y1b
+1cyc
+cyl3
+cy4m
+cy5no
+cyn1
+c4y2s4
+cys5to
+cys1t2
+cy4t
+cz2
+4da.
+d4ab1r4
+d1ab
+1d2ac
+da2ch4
+d5ache2
+3da2ct
+d1ag
+d4a4g2i
+d4ale
+d4al1g2
+dal5ler1
+dall2
+dam5a
+d2a2m
+3dam2e
+d3am1i
+da5mu
+3da4ng
+da2n
+d1an4t
+d3ap
+d3ard
+da2r
+5darm
+3d4as2
+d2ast5a
+dast2
+d1at
+da2t1iv4
+d2a2t4u
+dau2gh3
+d2au2
+daun5te
+daun2
+3d2av
+d3b
+d3c4
+d1d4
+d4d4er2e
+dder1
+d3di
+d3d2ler1
+d2dl4
+d3dli
+d3dy1i
+d2d2y
+2de.
+de1a2c3t
+dea2
+de5aw
+de4b2i
+de1b
+deb5it
+3dec
+de5cant
+dec2a
+deca2n
+de4cil
+de1c2i2
+de1cr2
+4de2ct
+ded3i
+d2ed
+def2or5e
+de1f
+de1fo
+de4fy.
+de3g
+de4gu
+de3io2
+5d4e3is
+de3lat
+del2a
+de1li4e2
+del5ler1
+dell2
+del5li
+de5lo
+1d4em
+4de4mie2
+4dem4is
+d4em4o4n
+de1mo
+de4mo4n1s2
+de3mor
+de4mos
+4de2my
+de1n2a
+d2e4n4d
+4d4ene
+d3en1h2
+den2i4e2
+den1i
+dens5a
+de4n2s
+dens5er1
+den5tit
+dent2i
+de3od
+deo3l
+deon2
+de3ont5
+de1p
+depen4
+deposi4
+de1po
+de3p4os
+de2p4u
+d3eq
+derac4
+der1
+de3r2ai2
+d4er2e
+4d4e2r4ed
+de5reg
+3der3er1
+1deri
+der3k4
+3derm
+der4mi
+der5min
+5derne
+der2n2
+3dero4
+der5os
+de2r3s2
+5d2eru
+4d4es.
+de3sa
+5de2sc2
+des4ca
+de5sc1al
+de3sec
+des4i
+de3s4i2d
+des5ig1n1a
+des2i4g
+desi2gn2
+des1p
+des5p4o2n
+des2po
+de3sq
+d3e4st.
+dest2
+de2s3ti
+1de1t
+de3t2es
+de5th1
+de2ti
+dev3i4l
+de3vis
+de3vi2t
+de4v2oi
+de1vo
+devol5u
+devo2l
+3dex
+2d5f
+dfol4
+d1fo
+d2g
+dg4a
+d1gel4
+d4gen
+d3gr2
+4d1h
+dh2ot4
+d4hu
+4di.
+1d2i1a2
+di2ad
+3dia2r
+di5at5om
+di3at
+dia2to
+4d1ib
+d1ic.
+dic5a2m
+d4i4ce
+d4i3ch
+d5icl2
+dic5ol
+d2i2c2o2
+1di2ct
+dic5tat
+dic2ta
+dic4te
+5dicul
+d2icu
+d5i1cu4r
+1di2d
+di4e2r1s2
+die2
+di1er1
+3di3ev
+d4i3fo
+d2i1f
+dig3al
+d2ig
+di3g2a2m
+dil4
+5dill2
+dilo4
+d4i3lu
+di5mer1
+dim2e
+di1me2t4
+di1m1i
+2d1in
+din4e
+d4in5g2i
+di4ng
+d4i5nos
+d2ino
+3d2i1o2
+di2o4c
+di4ol2a
+d4i1ol
+di2p5t2
+d2ip
+3dir2e
+d2ir
+di3r1i
+4d5iro
+di4s1
+d4i2s3c2
+d4is3en3
+3d2is2i1a2
+3d2i4s1s
+d4it4as
+dit1a
+d4iter1
+dithe4
+d2ith
+d3ito
+dit1or3
+2dity
+1d2i1u2
+1di1v2
+di4val
+d2iva
+di5vin2e
+di2v1in
+dix4i
+d2ix
+d1j
+2dl4
+d1l2a
+5dle1f
+5dlest2
+3dlew
+dlin4
+d1lo
+d5lu
+2d1m
+4d1n2
+1do
+4do.
+d4ob
+do4c3u
+d2oc
+do2g4a
+d2o1g
+do4j
+d4ol.
+dol3en
+do5l4ine
+dol5it
+do4lon
+do1lo
+d4o4ls
+5dom.
+d2om
+do1ma2n4
+do1ma
+domin5
+dom1i
+dom5ino
+dom5i2t
+do5mo
+don4at
+don1a
+4do2ny2
+3d2oo
+d2or
+4dor.
+d2or4m
+d2ort4
+d4os
+do5sim
+dossi4
+do4ss
+dot1a
+d2ot
+dot4t1in
+do2t1t4
+dot3ti
+2dous
+do4u2
+d4own
+3do4x
+d1p
+dr2
+d5rail
+dr2ai2
+d3ral
+3dr2a2m
+dra2n4
+d4ras2
+drast4
+3drel
+dr2e
+dres4
+dres2s5o
+dre4ss
+dri4e2
+d4r2i1f
+dr2i4g3
+d4r2om
+dro1pho4
+dr2op
+dru4n2k3
+drun1
+4d1s2
+d5sl4
+d2s3m4
+ds4mi
+d4sw2
+dt4
+dt5ho
+1du
+2du.
+du1at
+d2ua2
+3d4uc
+du4ch5
+duci5a2n
+du1c2i2
+duc2i1a2
+du4c2o2
+du5eli
+du5ell2
+du5en
+du5e2t2t4
+due4t
+du5in
+d2ui2
+dul3c2
+d3ule
+d4ul4l2
+dum4b2e
+du2m1b
+du4n4a4
+dun1
+d5un4c
+d2u2p
+du3p2l2
+5dur1o
+du4r
+d5use
+dust5er1
+d4ust2
+duste2
+du3u4
+d1v
+dver2
+dvert3
+dvoc5at
+d1vo
+dv2oc
+dvoc2a
+2d1w
+dwell3
+2d2y
+dy4ad.
+dy1a2
+d1y5a2r
+5dy4e
+5dyk
+dyl2
+dyll3
+5dymi
+3dyn1
+dys3p
+d4y2s
+d3zo
+ea2
+4e1ab
+e1a2ct
+eac4te
+ea5cu
+e5ad1d4
+ead3er1
+ead1i
+ead3li
+ea2dl4
+ea4g
+e2ak1
+eal3a
+ea2l3er1
+e2ale
+ea3l2o1g
+eam4bl2
+e2a2m
+ea2m1b
+eam3er1
+eam2e
+ean5i
+ea2n
+e2ap2
+eap5er1
+e3a4p1p2
+ear3a
+ea2r
+ear3er1
+ear2e
+ear4li
+e5a4r2r4
+ear4te
+eart2
+earth5i
+ear2th
+eas5er1
+eas2e
+ea4son1i
+e2aso
+e1a4s1s2
+eassem4
+eas4t2
+east5i
+eat5en1i
+e4at3er1
+eat5ie2
+e3a2t2i1f2
+eat1it4
+eat4it3u
+e3at1ri
+e2a2tr2
+e4a2tu
+e2au3
+eav5i
+e2av
+eavi4e2
+eav5o4u2
+ea1vo
+eaz5i
+e2az2
+e1b
+eba2r4
+e2b2b2
+eb2e4
+e4bel.
+e1bel
+e4be4ls
+e2ben
+eb5et
+eb2i
+e5b1il
+e4bin
+e4b2is
+e4bl2
+e4bos
+ebo2
+ebo1t3o
+eb2ot
+e2br4
+eb1ra
+e2b2t
+e4b4uc
+ebus5i
+ec2a
+ec3ade
+ecad5en
+ec2al5e
+ec1al
+e5c2a2m
+e4ca1po
+e1c2ap
+ec3at
+ec5a2th
+e1ce
+ecen2t5o
+e1cen2
+e3cent
+ech3i
+e2ch
+e4cib
+e1c2i2
+ec2i4f
+ecip5i
+ec2ip
+e1cl2
+ec3l2ip
+econ4s2c2
+e1c2o2
+econ1
+eco4n3s2
+econstit5
+econ3s2t2
+e2c3or1a
+e4c5oro
+ec3rat
+ecr2
+e4c5rea2n
+ec2r2e
+ecrea4
+e4crem
+ec1ro
+ect5ati
+e2ct
+ec2ta
+ec4ter1
+ec1te
+ect2i4c
+ec4tit
+ec4t5us
+ec1tu
+ec1ul
+e5c2ul2i
+2ed
+e5da4n2s
+eda2n
+e2d1at
+ede2
+2e4d2ed
+e5de1h2
+e4d2ele
+edes3t2
+ede3te
+e1de1t
+edeter5
+e3dev
+e5dew
+ed4g
+edi4a4ls
+e1d2i1a2
+ed5i4c1al
+ed5i4c5s4
+ediges4
+ed2ig
+edi1ge
+ed5i1gr2
+ed3im2e
+ed1it
+e1di2v2
+ediv5i2d
+ed3li
+e2dl4
+ed2or4
+e1do
+e4do4x
+ed1ro
+edr2
+edu5cer1
+e1du
+e3d4uc
+e2dul
+ed3u1lo
+e4d5u4r
+ee4ce
+eed3er1
+e2ed
+eede2
+ee4do
+ee2f
+ee5g
+ee1i
+ee2l1i
+ee2m
+eem5er1
+ee1m2e4
+eem3i
+eep1
+ee4pa
+eer4in4e
+eer1
+eer3in
+eesi4
+ee3to
+e1f
+efac2t5o
+e1f2a
+efa2ct2
+efal4
+ef5er3ee
+efer1
+ef2er2e
+ef5ini4te
+e2fin
+ef2in1i
+e4fite
+ef4l2
+efor5est2
+e1fo
+ef2or2e
+2e3fu
+e4fug
+efut5a
+e1gel3
+eg2i5a2
+e1g2i
+e4gib
+e3gl2a
+e2gl2
+eg3le
+eg4mi
+e2g1m4
+eg5n1ab
+e2gn2
+eg1n1a
+e5g4on
+e2gr2
+e5gu4r
+e1h2
+e5ho
+e2h5s
+eh2y2
+ehyd5r2
+ehy1d4
+ei2d4
+5ei1do
+4e2i1f
+e2ig2
+e5ignit
+ei2gn2
+eig1n1i
+e4in.
+e3inc
+e2ine
+e1i4ng
+e2in5i
+e4ins.
+ei4n1s2
+e2i4p4
+eir3o
+e2ir
+4eis
+eis3i
+eit5er1
+e2ith4
+e2iv
+eiv3er1
+e2iz
+e1j
+ejudic4
+eju1di
+ek3en
+ek5is4
+ek4l2
+e4l4ac
+el2a
+e5lad
+el5age
+el2a2m4
+el5anc
+ela2n
+elast3
+el4as
+e4la2t2es
+ela4te
+el5at3ive
+ela2t1iv
+elch5er1
+el1c2
+elch4e2
+el2ch
+eld3er1
+2ele
+elea5g
+elea2
+4e4l2ed
+el5en1i
+el3en3o
+ele3o
+ele5ph1
+e2l1er1
+e1les
+e5le4s4s
+e4leste2
+elest2
+el3et3o
+e1let
+el3ev3a
+e2lev
+ele3vi
+el5ex
+e4l3ica4
+e1lie2
+eli4e2r1s2
+eli1er1
+e3lim
+el3i4ng
+eli3on
+el2io2
+e4l1i4s
+el2i2t4t4
+el1it
+e3l4iv
+el4l1ab
+ell2
+el1l2a
+ell5iz
+el1li
+e3l2oa2
+e3l2oc
+elo5c2a
+eloc3u
+elo4di
+e2l2o1g
+elom5ate
+el2om
+elo1ma
+elo3mat
+el5op.
+el5o2ps2
+elp5in
+el3so
+e4ls
+el5tie2
+e1lu
+elu4m
+elus4
+elv4
+e5ly1i
+e2ly
+3elyt
+e2m3ago4
+em3an3a
+e1ma2n
+e1ma2r4
+emarc5a
+emar1c2
+em5at1iz
+em2at5ol
+ema2to
+em5b2i
+e2m1b
+e1m2e4
+e4mee
+e4mel
+e3me2m
+e4m3era
+emer1
+em5ero
+emet4e
+e1me2t
+em4icis
+em1ic
+emi1c2i2
+e4mie2
+e2m2ig
+emig5ra
+emi2gr2
+em3in1a
+em5i4ng
+e3m2i3o2
+em3i2s1m4
+e4mit1a
+emi2t
+e4m2i1u2
+em4mae
+e2m1m2
+4emnit
+e4m1n2
+emn1i
+emo3b2i
+e1mo
+emo2d4u
+emod1
+e2m2o1g
+e4m2oi
+em3o1lo
+em5o1m
+4em4on
+e3mon1i
+emon5ol
+emo4no
+e2mor
+em5oris
+emor1i
+em3o4r1r4
+e4mot1ic
+em2ot
+e5m2oz
+em1pa5r
+em1p
+em3pa
+empara5
+em5pes
+4emp4li.
+emp2l2
+em4pr2e
+em1pr2
+em3um
+e5mut
+en3a2c
+en1a
+e4nal
+en3a1m3o
+e1n2a2m
+en4an1n4
+ena2n
+e2n3a2r
+en3as.
+en2as
+ena5tur2e
+en2a2tu
+enatu4r
+3en1cep
+en4cile
+en1c2i2
+en3cil
+en2c1t4
+2e4nd
+en4d5al
+en2da
+en4de2dl4
+ende2
+en1d2ed
+end5rit
+endr2
+4ene
+e2n2e5d
+en3ee
+e5nelle
+enell2
+e5ne2p
+e2n1er1
+e5nereo
+en2er2e
+ener5v2
+en5esi
+e3ne4ss
+en1et
+en4e2t2t4
+e2n3eu
+e3n4ew
+en3g2i
+e4ng
+en3ic
+en1i
+en5i1er1
+en2ie2
+en3i1g3r2
+en2i2g
+en5in
+enit5u
+e4n3k
+en1o
+en3oi
+en2o2m
+en3oty
+en2ot
+enov3
+e4n2s
+ens5a2l
+en3sp
+en4s4u2m
+en3su
+en4sus
+ent3a2r
+en4te2r1s2
+en1te
+enter1
+en5t2i2a2
+ent2i
+en4ti3fy
+en1t2i1f2
+en2t2o
+en4tri
+en1tr2
+ent5rin
+ent5up
+en1tu
+en4tus
+4en2u
+en3u1a2
+en3uf2
+en3u4r
+en5ut
+5enwa
+en5w
+eo3b
+e4o2ch
+e2oc
+e4oda
+eof2
+eo2l
+eol5ar.
+eol2a
+eola2r
+eol5at
+eolo3g2i4
+eo1lo
+eo1l2o1g
+e5olu
+e2o3m
+eon4a
+e3ont
+e1o2p4t2
+e1or1
+eor4de
+e2or3e
+eor5o
+eo1s2
+eo4t2o
+e2ot
+e1pa
+ep4al
+ep5ar1c2
+e1pa2r
+epa4t
+epend5en
+ep2e4nd
+epende2
+ep5ert2
+eper1
+e4pete
+e3pet
+epe5ti1t2io2
+epe2ti
+e4p5ex
+eph1
+eph4i
+e2p2ig
+e5pl2a
+ep2l2
+ep3lic
+epol3a
+e1po
+epol3i
+epol2it5
+ep3re1h2
+e1pr2
+epr2e
+ep3res5e
+e4p5ri4m
+e4p5rob5
+ept3or
+e2pt2
+e1p4u
+e3pu4r5
+e4puta
+equin4
+equ4
+eq2ui2
+equ2i5no
+er1
+era4cie2
+er2a1c2i2
+era4do
+er2ad
+era4g
+era4l
+er3aph
+er2ap
+er3ap1i
+er3a2p4y
+4era4ti.
+4era4tim
+er5a2tu
+er3bat
+er1b
+er2ba
+er3b2e
+er2b5os
+erbo2
+2er1c2
+er3ch
+er3cl2
+2erd
+er2d5a2r
+er4di4e2
+2er2e
+er3eal
+erea4
+4e2r4ed
+er3e2gr2
+er5el.
+er5ell2
+er5e4ls
+e4re1m2e4
+er3en
+5er2e4nd
+er4en4e2
+ere5o2l
+e3re1q
+er3er1
+ere4s
+er5ese
+er3esi
+er5este2
+erest2
+er5e2sti
+eres5t4r2
+eret4
+er3et.
+er3e4t1s
+er3e2t2t4
+ere4v
+er3ex
+ergi3v
+er1g2
+er1g2i
+er3gl2
+er3ia.
+er2i1a2
+er4ia2n
+eri4ci2d
+eri1c2i2
+5er5ick1
+er2i2d
+er3ie2
+er3i2ff
+er2i1f
+er4i1me2t
+erim2e
+er3in
+eri4n1a
+eri4on
+er2i3o2
+er3io4u2
+er4i2s4c2
+er4i5sta
+erist2
+4eri2t
+e3r2i4v
+er5iz
+4er1j
+er2k4
+er3m2e
+er4m2oi
+er1mo
+5ernacl2
+er2n2
+er3na2c
+ern1a
+er5nal1is
+er1n3er1
+er1n3is
+ern1i
+ern3it
+4e4ro.
+er3o2i4d3
+e4r2oi
+er4o5is
+ero5st2
+erpent5in
+erpe2
+er3pent
+erpent2i
+erre5l2a
+e4r1r4
+erre2l
+err2e
+er4rep
+er5s2ine
+e2r1s2
+er2sin
+er5t4ed
+ert2
+er4ter1
+ert5er.
+ert5e2r1s2
+er4th2i
+er2t5iz
+2eru
+eru4b
+er2u5d
+eru4n2d5
+erun1
+er4vi4l
+er1v2
+5erw2au2
+er1w
+eryth3
+e2r2y
+ery2t
+2er2z
+4es.
+es5a4m
+es5a2n
+e2sc2
+es5ca2n
+es1ca
+es5che2
+es2ch2
+esci5e2
+es1c2i2
+escut5
+e2s1cu
+e3se2a2
+e3se2ct
+e5see
+e5seg5
+ese4l
+es5enc
+e3sh4a2
+es2h
+e1shi
+e5shu4
+esi4a2n
+es2i1a2
+es5ic.
+e5s2ick1
+es5id3en
+es4i2d
+esi4de
+esi5d2i1u2
+es5ies
+esie2
+es3im
+e2s3in
+e5sion
+e1s2io4
+e4s1it
+es4it.
+es4i4t1s
+e3sk1in
+es2k2
+e3s4mi
+e2s1m4
+e2s4od
+es3ol3a
+es2ol
+es3ol3u
+es3on1a
+es2o3p
+e1sor
+es3per3
+es5pir1a
+esp2ir
+es5pit
+es4p2l2
+es3plen5
+esple2
+es5p2ot
+es2po
+e5s2pr2
+es4s3a2n
+e4ss
+es1sa
+essa2r5
+ess5ee
+es4sil
+es2so
+es2t1a4b2
+est2
+est3a2n
+e5sta2r
+es5t2au2
+e2sti
+est5ifi
+es1t2i1f2
+est5igati
+est2ig
+estig1at
+e3st2oc
+es5t2oo
+est4r2
+es4tud4
+es1tu
+e1su
+e2s3ul
+es4u4r5
+et2a
+et3al.
+et5all1is
+etall2
+etal1li
+et3al5o4
+eta5m2e
+et2a2m
+et2a3p
+et3ar1i
+eta2r
+et5a2r2y
+et4as
+et3ate
+et3ati
+et5ay
+et3eer1
+etel1l5i
+ete2l
+e1tell2
+etend5er1
+et2e4nd
+etende2
+et5en1i
+eter2
+et3er3a
+et5er3i1a2
+e1teri
+e3tex4
+e2th1
+ethy2l3
+eth2y
+2e1t2i2a2
+e3t2ic1u
+et1ic
+e3t4i4g2i
+et2ig
+e5tim
+et3in
+eti4n1a
+e3t2ir
+et5i2t3iv
+e3t2i4u2
+et5o1lo
+e5tomet1e
+et2om
+etom2e
+eto1me2t
+e2ton
+et3on1a
+etor3i
+et1or
+etra5g
+etr2
+4e4tral
+etr2a5m
+et4ra2n
+et5re4s4s
+etr2e
+et1ri
+et4r2i1a2
+etrib5a
+et2r2ib
+e4trim
+et1ro
+e2t2t4
+et3ter1
+etud4
+et3ud4e
+e4tum
+et4we
+et1w
+e2t5z2
+eu3d2i3o5
+eue4
+euk5
+4eum
+e3ur1g2
+eu4r
+eur5i
+eus4
+eu5ten
+eu3ter1
+eut3i
+ev4abi
+e2v3ab
+e1v2al5e
+ev2a2p3
+ev3ast2
+ev3at
+ev5eli
+e2vel
+eve4n
+ev5erat
+ever1
+ev5er3en
+e4v4er2e4
+ever4er1
+e4veri
+e4ves
+e1v2i1a2
+e4vi1ab
+e2vic2
+evic1tu4
+e5vi2ct2
+evi2d3
+ev5ig
+ev4ile
+evi4l
+ev5is2h
+evi2s5in
+evis5o
+e4v2i1u2
+ev2oc3
+e1vo
+evol5e
+evo2l
+evol5ute
+evu4
+e1wa
+e4wag
+e5w4ay
+ew1er1
+e3wh2
+ew5ie2
+ewi2
+ew1in
+ew5is2h
+e3wit
+e1wr
+ex5i4c
+ex1i
+ex4on.
+ex1o
+exo4n
+1ex3p
+4ey.
+ey4as
+ey1a2
+eyl4
+e4y3s2
+ez5er.
+ezer1
+ez5e2r1s2
+ez5ie2
+ez1i
+1f2a
+2fa.
+fab4i
+f1ab
+fa3ce2t
+fa2ct2
+fa2c3u
+2f3ag
+fal2l5in
+fall2
+fal1li
+5falo
+fa5lon
+fals5ifie2
+fa4ls
+fals2i1f4
+4fan3a
+fa2n
+fan5tas1iz
+fan2t2a
+fantas3i
+fant3i
+5fa2r
+far3i
+5faw
+4f5b
+2f5d
+2fe.
+3feas
+fea2
+fe4a3tu
+fe2b5r4
+fe1b
+3fec
+2f2ed1
+5fei
+fe1li
+fem3i
+femin5
+fend5er1
+f2e4nd
+fende2
+f5en1i
+4f4e2r4ed
+fer1
+f2er2e
+fer3ee
+3fero
+fe5r2oc
+fer5om
+3fe4r1r4
+fer3v2
+2f4es.
+fes2s3o
+fe4ss
+fest3a
+fest2
+fe2st5i
+fe4t
+fet4al
+fet2a
+fet4in
+fet4o
+3feu
+fe5veri
+fever1
+2ff
+f1fe
+ffec4te
+f3fec
+ffe2ct
+f5fe4t
+f1fi
+f5f2i1a2
+f3fic
+f5fie2
+f1fi2l3
+f2f3is
+ff4le
+ffl2
+ff3lin4
+f3f2oc3
+f1fo
+ffon1i4
+ffo2n
+ff2or3e
+f3fr2
+ffran2ch5
+ffra2n
+4f5h
+fi5ance
+f2i1a2
+fia2n
+f4ib5u
+4fic.
+4fi4c1al
+3fi1c2i2
+4fi4c5s4
+fi5del
+fi2d
+fid3en
+fiel4
+fie2
+fi2er4c2
+fi1er1
+figh2t5
+f2ig
+fi2gh
+1fi2l
+2fin
+fin2a
+fi3na4l
+f2i4nd3
+fin2e
+f1i4ng
+5finin
+f2in1i
+fin4n1i
+f2in1n4
+fir2m1
+f2ir
+f3it1a
+f5it3ee
+fl2
+3fl2a
+fle2s
+f3lica
+flin4
+3flo
+flo5ric
+flor1i
+3flu
+flu1m4i
+1fo
+4fo.
+3f2oc
+fo2e
+foet3i4
+fo1et
+fo1l4i
+fo4li2e2
+fomen4t4
+f2om
+fom2e
+fo1men
+fo2n
+fon4de2
+fo4nd
+3f2oo
+fo5r2a2m4
+for1a
+for5ay
+for5b
+for4di
+fore3t
+f2or2e
+5f2orm
+for4m3a
+fortu5n4a4
+f2ort2
+for1tu
+for3tun1
+fo3v
+1fr2
+frag5a
+fran2t4
+fra2n
+fra2r4
+frat2ch4
+fra2tc2
+fre4s
+fr2e
+fros4t5i
+frost2
+fr4uc4
+2f3s
+fs4p
+2ft
+f1t4ed
+f4ter.
+fter1
+f2t5es
+ft2i4et
+ftie2
+ft4ine
+ft1in
+3fu
+4fu.
+f4u4c
+fuel5li
+fuell2
+fug4a
+fu4min
+fu1mi
+fu4n2g
+fun1
+4fu2r4ed
+fu4r
+fur2e
+fur3n2
+fu3sil5
+fus5o
+fu5til
+fut2i
+4ga.
+ga4cie2
+g2a1c2i2
+gadi4
+ga4d4os
+ga2do
+3gag
+3g2ai2
+3g2ale
+ga5len
+gal2i4a2
+gal5ler1
+gall2
+3galo
+gam4bl2
+g2a2m
+ga2m1b
+gan5at
+ga2n
+gan2a
+4ga2n2ed
+gang5er1
+ga4ng
+g5ant.
+gan4t4r2
+g5an4t1s
+g5ar1c2
+ga2r
+g4ar2e
+gar3ee
+gariz4a1
+gar1i
+gar1iz
+ga5r2ot
+gar5p
+5g2a4r1r4
+1ga4s
+gas5i
+g2as3o
+gas2ol5
+gas2s5in
+ga4ss2
+gast3r2
+gast2
+g1at
+g4at.
+ga2t5iv
+g4a2to.
+ga2to
+g4atos4
+g4a2t1t4
+g2a2t5u
+gaud5
+g2au2
+ga5z1a1
+g2az2
+g1b
+g5d4
+2ge.
+5geal
+gea2
+3gea2n
+2g2e4d
+3gedi
+5ge4d1n2
+4ge1f
+1gel
+4g2ele
+ge4li
+gel4in
+gel5li
+gell2
+ge4lu
+2ge2ly
+gem3i
+5ge1mo
+3gen
+gen4du
+g2e4nd
+gen5it
+gen1i
+gen3o
+gen5t2i
+ge4o
+geo3lo
+geo2l
+4g2er2e
+ger1
+3germ4
+2g4es.
+5ge4ss
+gest5at
+gest2
+3get
+get3a
+2g1f
+2g1g
+gg4a
+g2ge
+g5ge2dl4
+g2g2e4d
+g3ger1
+g5ger3er1
+g4g2er2e
+gg2i4a5
+g1g2i
+g3gli
+g2gl2
+g3glu3
+g5g2ly
+ggr2av3
+g1gr2
+g4g4ro
+2gh
+g5h2ai2
+gha2
+gh5en1i
+ghe2
+g3ho
+g4hos
+gh2t
+1g2i
+4gi.
+gi4all2
+g2i1a2
+gi4at
+3gib
+g2i5c2o2
+g2i4g
+gi5ga2n
+1g4in5g2i
+gi4ng
+3g2io2
+gi4or
+gi4ot
+5g2ip
+gi5pa
+g4i4s
+5gis.
+gi2t1
+5gitu
+giv5en.
+2gl2
+g3la2r
+gl2a
+5glass.
+gl4as
+gla4ss2
+glec4
+3g2ler1
+g4leto
+g1let
+g4letr2
+g4ley
+gli5on
+gl2io2
+g5l1is4
+3glo
+4g5lod
+gl2om3
+4glop
+3glu
+glu5te
+glu5t2i
+3gl2yp2
+g2ly
+2g1m4
+2gn2
+g1n1a
+g4n1ab
+g5nate
+5gn4a2th
+g5nati4
+gna5tu4r
+gn2a2tu
+gn5e2dl4
+g2n2ed
+gn5ee
+gn3er1
+g1n1i
+g4n2i1a2
+g2n3in
+gn4in.
+g4n2i2o2
+g2no
+5gnor1i
+gno4s
+2go.
+5g2oa2
+3g2oc
+5god
+3goe
+go4et
+go4ge
+g2o1g
+4go3gr2a2m
+go1gr2
+g5o2i4d
+g2oi
+g4o3is
+go2m2e
+g2om
+5gon1n4
+go5n2om
+3g2oo
+goph4
+4gor.
+5gor1g2
+4go2r1s2
+g4o2r2y
+3gos
+gos4t2
+2go4u2
+gour4i
+gou4r
+g1ous
+gov1
+g3p
+1gr2
+gr1ab4
+3gr2a2m
+4gram2e
+gr2a2p
+g4r2e
+gril4
+gri2m3a
+g4ro
+gr2o4g
+g5ron
+gr2op4
+3gru
+gru3en
+gr2u5i2
+gru2m4b
+2g1s
+gs4c2
+gs4t2
+g4sti
+gth5en1i
+gthe2
+g5to
+g4u2a2
+gu5ab
+5gua2n
+3guar2d
+gua2r
+g5uat
+2gue
+5gueu
+5guit4
+g2ui2
+gui5t1a
+gu2ma
+gu4mi
+3gun1
+g4uras5
+gu4r
+gur1a
+g4u2r4ed
+gur2e
+gur4n2
+gur4u
+4gu2r2y
+gust5a
+g4ust2
+2g1w
+2gy
+g4y2b
+5gym
+3gyn1
+gyn5o
+g5z2
+ha2
+4ha.
+h4ac
+hadi4e2
+had4in4e
+ha2d1in
+hae3o
+ha2g2e4d5
+ha3g2i3o2
+ha1g2i
+hag5u
+ha5ic
+h2ai2
+hais4
+hak4ine
+h2ak
+hak1in
+hal5ant
+hal2a
+hala2n
+h2a4m
+ha1m5a2n
+han4cro
+ha2n
+han1cr2
+ha4n2g
+h1an1i4
+h5an1iz
+han4t
+han2t3a
+ha4pe
+h2ap
+hap3l2
+har1a
+ha2r
+har5b
+har4d
+har5die2
+har2ge4
+har1g2
+ha5ri2s1m4
+har1i
+har3o
+har4t4ed
+hart2
+har4ti
+has4te2
+hast2
+ha2t5o
+haugh2t5
+h2au2
+hau2gh
+ha2vel4
+h2av
+hav5ersi
+haver1
+have2r1s2
+ha1v5o
+h1b
+h1c
+h1d
+hdeac5
+hdea2
+h1du4
+he2
+4he.
+h2ea2
+1head
+3hea2r
+hear2ch4
+hear1c2
+heas4t5
+heav5en
+he2av
+he2c3t4
+he5del
+h2ed
+hede2
+he3do
+heek4
+h4ei
+h4e3is
+he5lat
+hel2a
+h5elin
+he3l2io2
+he5l2i1u2
+hel4li
+hell2
+h3el3o
+hem1a
+he3men
+he1m2e4
+hemis4
+he5m4op
+he1mo
+hem4p
+hende5
+h2e4nd
+he3or1
+hep1
+h1er.
+her1
+her4as2
+her2b
+her2b3a
+herb3i
+here3a4
+h2er2e
+here3o
+h5er3e2t2t4
+heret4
+h5erh2
+her5ial
+her2i1a2
+h5erin4e
+her3in
+h1erl
+her5om
+h4eron
+h1e2r1s2
+h5erwa
+her1w
+hes3t4r2
+hest2
+het1
+h4et3a
+het3i
+het4t4ed
+he2t2t4
+heu2
+h4eum3
+heumat5
+heu1ma
+he4v4
+hev5i
+hex5o
+h1f
+h5h
+2hi.
+hi4a2r
+h2i1a2
+h1ic
+hi3c4a2n
+h4i4cin
+hi1c2i2
+h4icl2
+h5ie.
+hie2
+h1i1er1
+h4i4e2r1s2
+h1ies
+h3ifi4
+h2i1f
+h3i3fy
+hig4o
+h2ig
+hi5ka
+h2ik2
+hi4l
+hi5ma4
+hi5mer1
+him2e
+himos4
+hi2mo
+h1in
+h2i4n4d
+h2in2e
+hi5n2ie2
+h2in1i
+h5in1iz
+hi5nop
+h2ino
+h2i4n1s2
+hio5lo
+h2io2
+h4i1ol
+h4i1or
+h2i2p
+hip3l2
+h4ir
+hi4r4r4
+hir3r5i
+hit4a
+h2iv5a
+4hl
+h3l2a
+h1le
+h3let
+h1l2i
+hl2i4a2
+2h1m
+h4man3ic4
+h1ma2n
+hman1i
+h5mica
+hm1ic
+2h1n2
+hno1cen5
+hn2oc
+hn4o3ce2
+4ho.
+ho3a2n
+h2oa2
+ho4c2o2
+h2oc
+ho3don
+ho2do
+ho5du
+ho5ep5
+hol3a2r
+hol2a
+hold1
+hol4is.
+hol1is4
+ho5l4y2s
+ho2ly
+ho4mag
+h2om
+ho1ma
+hom5in
+hom1i
+h2o4n
+hon5em
+ho2ne
+ho5neu
+hon3ey
+hon2g3i
+ho4ng
+ho5n2io2
+hon1i
+hon1o
+1hood
+h2oo
+hoo5r
+h4ope
+ho2p5r2
+h4op4te
+h1o2p1t2
+hor5et
+h2or2e
+h4or2n2
+horn5i
+ho5r2o1g
+hort5h
+h2ort2
+hosi4
+ho4ton
+h2ot
+ho1t2o
+h2o4u2
+3h2ouse3
+4h1p
+2hr
+hras5eo
+hras2
+hr2as2e
+hr2e4
+hre5ma
+hr5er1
+hres4
+hri4
+hril2l5in
+hrill2
+hril1li
+hrim4
+h5rit
+h3r2od
+hrom4i
+hr2om
+h2r2y4
+h3rym3
+2h1s
+hsi4
+h4s2k2
+ht5ag
+ht5ee
+ht3en.
+ht5e2n1er1
+h4t4ene
+ht3en1i
+ht3e4n2s
+ht5e2o
+h2t5es
+ht4f2oo
+h2t3f
+ht1fo
+h1th
+ht4ine
+ht1in
+hu4g
+hu4mat
+hu1ma
+hu5mer1
+hum2e
+hu4min
+hu1mi
+hun4c
+hun1
+hu4n2k4
+hun4t
+hur3i
+hu4r
+hu3s2i1a2
+huz4
+h1w
+h4wart2
+hwa2r
+h2y
+hy2l
+hyl5en
+hyle2
+hy2m
+hyn4
+hy3o2
+hyol5i
+hy1pe
+h2yp
+hy3ph
+hyr4
+hys3te2
+h4y2s
+hys1t2
+hy4t
+2i1a2
+ia4bl2
+i1ab
+iab5ol1is4
+iabo2
+iabol3i
+iab5ol1iz
+i2a2ch
+ia1c3o2
+i2ac2r2
+ia5cri
+ia5d4em
+i5ae
+iaf4
+i2ag4
+i4a3g1n2
+i5a4g5o
+ia3gr2
+i3ah
+i5ai2
+iale2ct4
+i2ale
+ia3lec
+i3al1it
+ial5li
+iall2
+4ial1n4
+i2a3lo
+i2a5ly4
+i5a2m1b
+i2a2m
+ia3m2e
+ian2ch5
+ia2n
+i3ant
+i5ape
+i2ap
+ia3ph
+i2ard
+ia2r
+4iarit
+iar1i
+i3at
+ia5the2
+i4a2th
+i5at2om
+ia2to
+i2a2t4u
+iat3ur4a
+iatu4r
+i3au2
+i2av4
+ib3era
+ib2e
+iber1
+ib1i
+i1b2i2o4
+ibios4
+ib5li
+i2bl2
+4ibo2
+i4bon
+ibor4
+i4bose
+i5bo4u2
+ib1ri
+ibr4
+4ibu
+ib3uta
+ic3ac
+ic5a2do
+i4c1al
+ic1a2n
+2i1ca2r
+iccu4
+ic1c4
+4ice
+i5ceo
+4i2ch
+ich4i
+ich5i4ng
+ich1in
+ich5ol
+i1cho
+4icin
+i1c2i2
+i5c2io2
+2ick1
+ic4lo
+icl2
+2i2c2o2
+i3c2o3c
+ic5ol3a
+icon3o
+icon1
+i5cop
+icoty3le5
+i5coty
+ic2ot
+2i1cr2
+i4cri
+i4cru
+i4c2r2y2
+ic4te2dl4
+i2ct
+ic1te
+ict4ed
+ic4ter1
+ict5ic
+2icu
+icu4lu
+ic3um
+i5cun4
+i5cut
+2i1cy
+i2d
+id1a
+i5d4ay
+i1d4e4m
+id3enc
+id3era
+ider1
+i3derm5
+i3d2icu
+id3i1f
+i5d2ig
+i5dil4
+i3dim
+id4ine4s
+i2d1in
+idin4e
+idios4
+i3d2i1o2
+id2ir4
+id1i4s4
+id4ist2
+2i4d1it
+i1di4v2
+id3li
+i2dl4
+id3ol
+i1do
+idol3a
+4idom1i
+id2om
+id3ow
+4idr2
+id5ri
+id3ul
+i1du
+ie2
+4iec
+2ieg2
+ie3ga
+ie5i
+i5ell2
+4iem
+2i1en
+i2e4n2d
+i1er1
+i3ere4s
+i2er2e
+i2eri
+ier3i4n
+4ier2n2
+ier2o
+i4ert2
+i3e2sc2
+ies3e4l
+i1es2t2
+i3e4st.
+2i1et
+i4et.
+ie2t3ie2
+4ieu
+i5eut3i
+iev3a
+iev3er1
+ie1v3o
+2i1f
+i2fe
+if4f2a
+i2ff
+iff5ler1
+iff4le
+iffl2
+i4f3ic.
+i4fic3ac
+i4f5i4c5s4
+ifi4d
+i2fi4n
+4i2fl2
+i3fo
+i3f2oc5
+if5tee
+i2ft
+i3fy
+2ig
+i3gad
+ig3a4nd
+iga2n
+3iga2r
+i1ge
+i3ger1
+ight5er.
+i2gh
+igh2t
+ighter1
+ight5e2r1s2
+4i1g2i
+ign5iz
+i2gn2
+ig1n1i
+ign2o5m
+ig2no
+i3gon
+ig1or
+ig3ot
+i5gret
+i1gr2
+ig4r2e
+i4g5ro
+i5gu5it4
+ig2ui2
+ig1u4r
+2i1h
+ih2y4
+2ii
+i5in
+i1ja4
+4iju
+2ik2
+ik5a2n
+ike4b
+i2l3a
+ila4g
+ila5te2l
+ila4te
+i5l4ater1
+il4a4x
+il5dr2
+il4du
+i3len
+ilesi4
+il3f
+il3ia.
+il2i1a2
+il3ia2r
+ili4arl
+i3li1c2i2
+i5l2i1en
+ilie2
+ili4er1
+il4i4fe
+il2i1f
+il4ific
+il1in
+il5i2ne.
+il4ine
+4ili3o4u2
+il2io2
+il5i4p1p2
+il2ip
+il5i1q
+il4ite
+il1it
+ilit5u
+il4mo
+ilm2
+i5lon
+il3o4u2
+ilth4
+il2tr2
+4ilu
+il5ul
+i5lum
+il5ur2e
+ilu4r
+il3v
+4ilym2
+i2ly
+ima4c
+im2ag
+im3a4ge
+im1al
+i2m5a2m
+i5m2as
+i4mat4ed
+i4ma2t3in
+im2a2t5u
+im1i
+i3m2ie2
+im4ine
+im5ino
+im5me2s
+i2m1m2
+imm2e
+i2mo
+i5m2o1g
+i3m4on
+im5oo
+i3mos.
+impar5a
+im1p
+im3pa
+im1pa2r
+impar2ad5
+im5p2ie2
+im2pi
+imp2o2t5
+im3po
+im5pr2
+im3pu4
+im1ul
+im5um
+in3ab
+in1a
+4inace
+ina2c
+in4a2do
+in5a2gl2
+in3a2ir
+in2ai2
+ina4l
+4inal1it
+i1n5a2m
+in3a2n
+in3ap
+in4a2r2s2
+ina2r
+i3nas.
+in2as
+4in2a2ta
+inat1or5
+ina2to
+in3au2
+in4aw
+2inc
+inc4t2u1a2
+in2c1t
+inc1tu
+2i4nd
+in5da2r
+in2da
+inde5p
+inde2
+inde4s5
+in1de3t
+indeterm5
+indeter2
+in5dro
+indr2
+4inea2
+4i2n2ed
+in5ee
+in5eg3a
+4in5eo
+ine4s
+in3esi
+ine5te
+4ineu
+inev5
+infilt5
+in3f
+in1fi2l
+infol4
+in1fo4
+4in3fu
+4ing2a
+i4ng
+in5gal
+4inge
+ing5ha2
+in2gh4
+4in2g2i
+4ingle
+in2gl2
+4ingli
+4in1go
+4in1gu
+in2g3um
+2in1i
+in5ia.
+in2i1a2
+4inic
+in4i1c2i2
+in3ion
+in2io2
+in4itud
+4i4n2k
+ink4ine
+ink1in
+4i4n1l2
+2in1n4
+2ino
+4i4no.
+in3oi
+i5nole
+4inos
+i3n4os.
+in5ose
+in3osi
+4in1q
+i4n1s2
+in4s2ch5
+ins2c2
+inse2
+inse2ct5
+in5sec
+insec5u
+in3si
+5ins2k2
+insolv5
+ins2ol
+in4tee
+in1te
+int5e4ss
+in2t2es
+in3til
+int2i
+int5res
+in1tr2
+intr2e
+intu5m
+in1tu
+2in2u
+in5ul
+in5um
+in3un1
+in3u4r
+invol5u
+in3v2
+in1vo
+invo2l
+2io2
+io3a2ct4
+i2oa2
+i1od
+iod3i4
+io2d5o
+ioe4
+io3gr2
+i2o1g
+4i1ol
+io3ma
+i2om
+i4oman1i
+io1ma2n
+io3mo
+i5ope
+io3ph
+i5o1po
+io2p4s2
+i1or
+ior2a4m4
+ior1a
+4i2or2e
+4iorit
+ior1i
+5ior1iz
+4iorl
+ior4n2
+io3sc2
+i3ose
+i3osi
+i4oso
+i4o5sta
+iost2
+i3ot
+iot4a
+i4o5th
+iot5ic
+i4o5tr2
+i4oty
+i4our.
+io4u2
+iou4r
+i4ou2r2s2
+i5o4x
+2ip
+ip3al
+ip2ap4
+ipar3o
+i1pa2r
+ipart5ite
+ipart2
+ip1at
+i3p2e4nd
+i1ph2e4
+iphen3
+i5pheri
+ipher1
+iphi4
+i4phu
+ip3i2d
+i5p2il
+ip3in
+ip4in4e
+ip2ir4
+ip5is
+ip1i4t
+ip4iti
+ip3lin
+ip2l2
+ip3lo
+i3po
+i4p2o1g
+i4poli
+i4p2om
+ip4o2n3
+i4pow
+ip2p2l2
+i4p1p2
+ip3pli
+ip4r2e
+i1pr2
+ip5tor1i
+i2pt2
+ipt1or
+ip1ul
+i5put
+i2p4y4
+2iq
+i3q2ua2
+iqu4
+2ir
+ir1a
+ir4abi
+ir1ab
+ira4c
+ir4ae.
+ir4ag
+ir4al1in
+ir4al1li
+irall2
+i5r2a3so
+iras2
+irassi4
+ira4ss2
+ir4ay4
+ird3i
+ire3a4
+ir2e
+ir3ec
+ir5ee
+irel4
+ire5li
+ires4
+ir5e4ss
+ir1i
+ir2i4d
+ir4im
+ir4is.
+5ir1iz
+irl5i4ng
+ir5o2ch
+ir2oc
+ir5ol
+ir3om
+ir4q
+i2r2s2
+ir5ta
+irt2
+ir5tee
+irwo4m2e
+ir1w
+ir1wo
+ir3w2om
+i4sa
+is5ad
+is3age
+isa4g
+is1a2l
+is3a4m
+is1a2n
+is3a2r
+is5av
+4i4s3b
+i2s3c2
+is5chi
+is2ch2
+isci5c
+is1c2i2
+4i1sec
+ise5cr2
+is3ell2
+4is3en
+is2er1
+is5er2e
+i2s3et
+4iseu
+is3ha2r
+is2h
+isha2
+ish5ee
+ishe2
+4ish3io2
+ish3op
+is5hor
+2is2i1a2
+is5ic
+is3ie2
+4isim
+is3inc
+i2sin
+4is1is2
+is4ke2
+is2k2
+i2s1l4
+islun4
+2isma
+i2s1m4
+is1on
+is5on1er1
+is4o2ne
+is2o5p
+is1p
+i3s2ph2
+5is1pr2
+2i4s1s
+iss5ad
+is1sa
+is4sa2l
+is5sa2n
+is4s4iv
+is1s4o
+4ista
+ist2
+is4tal
+ist5enc
+iste2
+ist5ent
+is5ter3er1
+i4s2t2er2e4
+ister1
+4is1th
+is4t3ic
+4i4s2tl
+i4s1to
+4is4t2om
+is1tr2
+3is2t4r2y
+4is4ty
+i5s2ul
+is3u4r
+2is2y
+it1a
+i2t5ab
+ita4c
+4i1t2ai2
+it3a2m
+it4an2a
+ita2n
+it4as
+it3at
+i3te2ct
+it3ee
+it3enc
+it3ent
+it3era
+iter1
+2ith
+itha5l
+itha4
+ith5i
+i5thol
+i1t2h3r
+ith2y5
+2i1t2i2a2
+it2i4c2o2
+it1ic
+it5ic1u
+it1ie2
+it3ig
+4i1tim
+it4in.
+it1in
+i4t4i4n1s2
+4itio.
+i1t2io2
+4itio2ne
+i5t2i4q
+4i5tit
+i2t3iv
+it4li
+i2tl
+it5lo
+4i2to.
+it5ol
+2iton
+it1o4u2
+2itr2
+it5re4s4s
+itr2e
+i4tric
+2i2t1t4
+it4tit
+it3ti
+itu4a4ls
+it2u1a2
+itu1al
+it5ua2r
+4itue
+it1ul
+it1u4r
+it3us
+2i1u2
+i3um
+iur5e
+iu4r
+2iva
+iv5anc
+iva2n
+iv1at
+i4v2ed
+iv5el.
+i2vel
+iv5el3i4ng
+iv5e4ls
+i4ver.
+iver1
+iv3eri
+i4vers.
+ive2r1s2
+iver5sa2l
+ives4
+iv3et
+i4vie2
+iv3i1f
+i5vil1it
+ivi4l
+ivil3i
+5ivi4st.
+i2v5ist2
+5ivi2s4t3s
+iv1i2t
+i2vo
+iv2oc3
+i5v2or2e
+2i1w
+2ix
+ix3o
+i5ye
+1iz
+4iz2ah
+iz1a1
+iz3i2
+2izo
+iz5oi
+2izz2
+1ja
+2ja.
+3jac
+ja2c5o2
+jac3u
+jag5u
+jal4
+ja5lo
+ja5pa2n
+j2ap
+j4apa
+jel5l2a
+jell2
+jeo2
+jeop3
+4jes
+jeu4
+jew3
+2ji
+3j2ig
+jil4
+jill5
+5jis.
+3jo2
+4jo.
+jo1c5o2
+j2oc
+joc5u
+jol4e
+4jr
+4js
+ju1di
+j2ui4
+ju5l
+ju3n2i
+jun1
+ju2s1cu4
+j2usc2
+jut3a
+ju1v2
+k4abi
+k1ab
+k2a5bu
+ka2ch4
+k3a4g
+kais5
+k2ai2
+ka4l
+ka5lim
+kal4is
+k4a2n
+k2a3o
+k2ap4
+kar4i
+ka2r
+1kas.
+kau4r4
+k2au2
+k2av4
+k1b4
+k1c
+kc2om4
+k1c2o2
+k5d2
+k1do4
+kdol5
+4k2ed
+ke5da
+k5ede2
+3kee
+ke4g
+k2e4n4d
+ken1o4
+ke2p5t2
+ker5a
+ker1
+k4er2e
+k5erel
+k4er4j
+ker5o
+kes4i
+ket5a
+key4wo
+key3w
+k1f
+kfu4r4
+k3fu
+k3ho
+5k2i1h
+ki2l
+kilo3
+k1in
+k2in.
+3k2i4nd
+kinema4
+kin5et
+k3i4ng
+k2in4i
+k2i4n1s2
+kir3m
+k2ir
+ki4r4r4
+kis4
+3kis.
+k1is2h
+ki2t5c2
+k2i4w
+kk4
+k5ker1
+k2l2
+k3l2a
+k5lea2
+k3ler1
+k3let
+k3li
+k3lo
+k1m
+kn2
+k2no
+1kn4ow
+k2o5a2
+kol4
+ko5m1i
+k2om
+ko5pe
+k1p
+k5ro4
+k3ru
+4k1s
+k3sl4
+ks2mi
+k2s1m4
+ks4t2
+k1t
+ku4r5
+k5v
+k1w
+3kyl
+l2a
+4la.
+5la4a
+lab5a2r
+l1ab
+l2aba
+la1bel4
+l2ab2e4
+5lab1r4
+l4ac
+la2c2a
+la5ceo
+la5cer1
+la4ch
+la2c2o2
+5la5col
+lac5on1
+la3cu
+la4de
+l5a2d1m
+l4ae
+l4af
+la3ger1
+la4g4i4s
+la1g2i
+la2g3r2
+5l2ah4
+la4ic.
+l2ai2
+la1ic
+l4al
+4l2ale
+5laman3dr2
+l2a2m
+lama4n5d
+la1ma2n
+la5mel1li
+lam2e
+lamell2
+lam4ie2
+lam1i
+la1m1o
+l5amu
+lan3at
+la2n
+lan2a
+la4n2d
+3land.
+land3i
+3lan4d1s2
+lan4er1
+lan3et
+lan5tine
+lant2i
+lant1in
+lan4t4r2
+l2a4p
+lap1i4
+lar5a2n
+la2r
+lar5de
+4la2r4ed
+lar2e
+l4as
+lat5al
+l2a2ta
+la4te
+5latil1is
+la4t1i4l
+5latil1iz
+5lat2in1i
+la2t3in
+lat5us
+l2a2tu
+l4au2
+5lau4r
+lav5at
+l2av
+l4aw
+4l2az2
+l3b
+lb2e4
+l4bit
+l4by
+l1c2
+l2c1at
+lce4
+l1cen4
+l4c2er2e
+lcer1
+lch4e2
+l2ch
+l3da2r
+l3d2ed
+l3de1h2
+l5dera
+lder1
+ld3est2
+l5dew
+ldi2
+l3die2
+ld4in4e
+l2d1in
+l5di5ne4s
+ld3is2h
+ldi4s1
+ld5li
+l2dl4
+l3do
+4le.
+3leagu
+lea2
+lea4g
+le5a1t2io2
+leav5er1
+le2av
+l3eb5ra
+le1b
+le2br4
+le3c2a
+le5cha2
+le2ch
+lect5ica
+lect2i4c
+le2ct
+2l2ed
+le5dr2
+leg1a
+l3ega2n
+3le2g1g
+le4gin
+le1g2i
+leg3o
+le3gra
+le2gr2
+lek4
+4l4e4l2ed
+l2ele
+lel5o
+le1lu5
+lem5enc
+le1m2e4
+le1men
+lem3is
+l5em1iz
+5le2m1m2
+l3e4m1n2
+le2mo
+l4em5on
+l5en2da
+l2e4nd
+len5da2r
+lend4e2
+len4do
+l4e1ne
+le5n2ie2
+len1i
+len3o
+4len1t2io2
+lent2i
+l4en5u
+le3on
+leo4s2
+le5q
+2ler1
+le5rec
+l2er2e
+5l4er2i1a2
+l4eric
+le5r2ig
+ler3om
+leros4
+ler3ot
+4l4es.
+le3s2c2o2
+le2sc2
+3le4s4s
+1let
+le5tra
+letr2
+le5tr2e
+5le5tu5
+leu4r5
+2lev
+l3eva
+5leve
+lev5it2a
+levi2t
+le4wi2
+l5ex1a
+1ley
+lf5i2d
+l2fo
+lf3o2n
+l1g2
+l4gal
+l4gem
+lg2i4a2
+l1g2i
+l4gi2d
+l4g2oi
+l3h
+4li.
+li4an1i
+l2i1a2
+lia2n
+lias4
+lib1r4
+l1ic.
+5l4i2ch
+li4cie2
+li1c2i2
+5li5c2io2
+l3ic3on1
+l2i2c2o2
+lict4o
+li2ct
+l2i4cu
+l3id1a
+li2d
+l4ida2r
+5lid3i1f
+3l4ieu
+lie2
+l4i2fe
+l2i1f
+l4i3fo
+lift5er1
+li2ft
+1l2ig
+li5ger1
+li1ge
+light5i
+li2gh
+ligh2t
+5l2i1h
+3l2ik2
+1l4il
+lil4i
+li2m2b
+limet4e
+lim2e
+li1me2t
+lim4p
+l4i2na.
+lin1a
+l4in2as
+l2i4n4d
+l4ine
+5l4in3ea2
+lin4er.
+lin1er1
+lin4e2r1s2
+lin4ger1
+l4inge
+li4ng
+l4in2g3i
+5lingt
+3l4in1gu
+3l4in1q
+lint5i
+3li2o1g
+l2io2
+l4i4ol
+li2o3m
+li3ot4
+li3o4u2
+5liph
+l2ip
+li2pt5
+l2i1q
+3l2ir
+l1is
+l4is2k2
+5lisse
+l2i4s1s
+l1it
+l2it.
+l3it5a
+5liter1
+3l2ith
+5l2i1t2i2a2
+3l2itr2
+lit4u
+l4iv
+l5iv1at
+l2iva
+liv3er1
+liv5i2d
+lkal5o
+lka4l
+lk5at
+lk3er.
+lker1
+lk3e2r1s2
+ll2
+l1l2a
+ll2a4ba
+ll1ab
+lla2ct4
+ll4ac
+l5l4as
+l4l4aw
+l5le1b
+l1lec
+l1leg
+l3lei
+l1lel
+lle5m
+l1len
+l3lep
+l3leu
+l3lev
+ll3f
+l1li
+lli5a2m
+ll2i1a2
+lli4a2n
+llib4e
+llic4
+l4licl2
+ll2i5c2o2
+l5lie2
+llig1at4
+l1l2ig
+l2lin
+l5lin.
+l3lin1a
+l3l4ine
+l5l2io2
+ll4i5v
+ll3m2
+l1lo
+lloc3a
+l1l2oc
+lloc5u
+l1lo2q
+l4lov
+llow5er1
+ll3p
+l4l3s
+ll5t
+l1lu
+llun4
+l5ly1a2
+l2ly
+l3ly1c
+l3ly1g
+l3ly1h
+l3ly1i
+l5lym2
+lm2
+l1ma
+l1m2e
+l4mer1
+lm3i4ng
+l5m2i3p
+l2m3od1
+l1mo
+l1n4
+l3ne
+lneo4
+2lo.
+5load
+l2oa2
+5l4ob3a
+1l2oc
+loc3al
+loc2a
+loc5ul
+lo4cus.
+lo1cus
+2lo1cy
+l3od1i4s2
+3lo3dr2
+1l2o1g
+lo5ga2n
+lo2ga
+4loi.
+l2oi
+lo5m1i
+l2om
+lo2m4m2
+lon4al
+lon1a
+lo2n4e
+l5onel
+lo5ney
+long5in
+lo4ng
+lon2g2i
+3l4o1n2i1a2
+lon1i
+lon2i4e2
+l3onis
+l3on1iz
+loom5er1
+l2oo
+lo2o4m
+loom2e
+lop4e
+5lo5pen
+l3o2p1m
+1lo1q
+l4o2r4ed
+l2or2e
+lor5i3at
+lor1i
+lor2i1a2
+lor4i2fe
+lor3i1f
+lo5rof
+loros4
+l4os.
+lo1so
+lo4ss4
+los5sie2
+lot5at
+l2ot
+loth4ie2
+l4oth
+lo5tu
+5lo2up
+lo4u2
+lp1at
+lp3er1
+lph2
+l5phe4
+l3ph1i4n
+l2pho
+l3p2ie2
+l3pit
+lr4
+l3ri
+l3ro
+l5ru
+4ls
+l5s2a4m
+ls5a2n
+lsi4f2i1a2
+ls2i1f4
+lsi4m
+ls4is2
+l5s2k2
+ls4p
+l1s2t2
+lt4an3e
+lta2n
+l4ta4ng
+lt5ant
+l5ta2r
+l1te
+l4tei4
+lter2n3
+lter1
+lth3i
+lt2i4c2i2
+lt1ic
+ltim4a
+l1tim
+lt1in4
+lti3t
+l3t4iv
+lt4or
+l1tr2
+ltram2ont5
+ltr2a2m
+ltra3m4on
+ltra1mo
+l1tu
+l4tus
+4lu.
+l2u1a2
+lu4ch4
+l4uc
+lu2c5o2
+luc5ra
+lucr2
+lu4cu
+4lue
+lu1en
+lu5er1
+l2u1i2
+lu4it
+lum4bri
+lu2m1b
+lumbr4
+lu4mo
+5lum2p
+lu2m5u
+lunch5eo
+lun1
+lun2ch
+lunche2
+5lune
+l3unta
+lu3or1i
+5l2up
+3lur3o
+lu4r
+lus2k5
+lu4ss4
+lut5a2n
+4lut5a2r
+5lution1iz
+lut2i
+lu3t2io2
+lution1i
+lu5t2oc
+lut2o
+lut5r2
+lu1v2
+lv5ate
+l5vet4
+l4vi
+l4vor
+l1vo
+l3w
+lx4
+2ly
+4ly.
+ly1c
+ly4ca
+lyc4l2
+ly2c5os
+ly1c2o2
+lym2
+lymph5
+lym1p
+l2yp2
+ly4pa
+lypt5o
+ly2pt2
+3lyr
+lys5er1
+l4y2s
+3ly3w
+3lyz
+lz4
+4ma.
+m4ac2a
+mac3ad
+ma5ch2in2e
+ma2ch
+mach1in
+5mach2y
+ma4cis
+m2a1c2i2
+ma2ct4
+4mad.
+4mada
+4ma4d1s2
+ma4ge
+5m4a2g1n2
+2mago4
+2m2ah
+ma5ho
+3m2a4i2
+4m4ai.
+mai2d3
+5m2ak
+mal3a4p
+mal2a
+mal5ar1i
+mala2r
+5m2ale2
+ma2l5ed
+mal3e1f
+m3al1g2
+m3al1is
+m4al4is.
+mal3le
+mall2
+mal4li
+2m2a2m
+mament4
+ma3men
+mam2e
+m5ament.
+1ma2n
+3m4an.
+man3a
+man5da2r
+ma4nd
+man2da
+man3dr2
+man3ic4
+man1i
+man4ica
+ma5n2il
+m4a4n2s
+man3te2l5
+man2te
+2m2ap
+m3aph
+1ma2r
+5mara2n
+mar5ol
+ma5ro4n
+ma3r2oo4
+mar5ri
+m2a4r1r4
+mar4shi
+ma2r2s2
+mars2h
+mar3v2
+ma3son
+m2aso
+massi4
+ma4ss2
+mass5i4ng
+mas2s1in
+3mas1t2
+ma4s4t4ed
+maste2
+mast4ic
+mas4t1in
+m4at.
+m4aten
+m4a3ter1
+mater5n4
+m4at1it
+mat4iti
+m4atiz1a1
+mat1iz
+m4a3t2o1g
+ma2to
+mat5om
+ma3top
+m4a4t1s
+3m4a2t1t4
+ma5tur2e
+m2a2tu
+matu4r
+m2av4
+2m1b
+mba2t4t4
+m2b4d
+m5bec
+mb2e
+m5ber3er1
+m2b2er2e
+mber1
+m4be2r2y
+m4be1s2
+mb2i
+m2bic
+m5b1il5
+m4b3i4ng
+m4b2is
+mb5ist2
+mbival5
+mb2iva
+m5b2ler1
+m2bl2
+m3bli
+mbru4
+mbr4
+mbu3l
+mbu4r4
+m1c
+m5d
+m2e
+2me.
+mea5g
+mea2
+me5a4nd
+mea2n
+me4ba
+me1b
+me4b2i
+2m2ed
+4med.
+3me1d2i1a2
+med5ic1at
+4medie2
+m5ed5ies
+3med1it
+me4do
+m5e2d2y
+me2g
+5meg2a1
+meg1a5t
+4m2ele
+mel5ee
+mel5ler1
+mell2
+mel3on
+mel4t
+melt5er1
+mel1te
+me2m
+4m5e1m2e4
+1men
+3men.
+2men1a
+men4ag
+mend5er1
+m2e4nd
+mende2
+men1d5o
+m4e1ne
+ment5or
+men2t2o
+5men4t1s
+5me2o1g
+me4p
+m5era2n
+mer1
+4m2er2e
+mer4i1a2
+2me2s
+mes5en
+me5s2i4a2
+mes5q
+3me2sti4
+mest2
+1me2t
+meta3t
+met2a
+met1e
+4met4ed
+meth4i
+me2th1
+met1i4c
+met5i1c2i2
+met3o
+met3ri
+metr2
+m1f
+4m3h
+4mi.
+m1ic
+m4i4cin
+mi1c2i2
+m2i3c2o2
+3micro
+m2i1cr2
+m4i2ct
+mi3cul
+m2icu
+mi4cus
+m4idi
+mi2d
+mi2d4in
+mid5on
+mi1do
+mi5fi
+m2i1f
+mig5a
+m2ig
+migh5ti
+mi2gh
+migh2t
+mi2gr2
+4mij
+mi5ka
+m2ik2
+m2il
+m3i2l3a
+mil4ad
+4m5ilie2
+mil5ies
+3mill2
+mi5lo
+mil4t
+3m2im
+mim5i
+5m2i4n4d
+mind5er1
+minde2
+min4er.
+min1er1
+min4e2r1s2
+m4ing5li
+mi4ng
+min2gl2
+min5ie2
+m2in1i
+m4init
+min3ol
+m2ino
+1m4int
+minth5o
+minth2
+m2i3o2
+m2i3p
+mir1ab4
+m2ir
+mir1a
+mi5r2acu
+mira4c
+m2is.
+m4i2s3c2
+mi4se
+4misem
+mis3ha2
+mis2h
+5missi
+m2i4s1s
+m3i4st.
+mist2
+mis4t1in
+m3i2s4t3s
+mi2t
+m5ita2n
+mit1a
+4mity
+3m2i1u2
+5m2ix
+4m1l
+mlo5cut2i
+m1l2oc
+mlun4
+2m1m2
+mma4n4d
+m1ma2n
+mmand5er1
+mmande2
+m3medi
+mm2e
+m2m2ed
+mmel5li
+mmell2
+mmet4e
+m1me2t
+mm2ig3
+mm2in3u
+mmis3
+mmob3
+m1mo
+m5m2oc
+mmor3
+mmut3a
+4m1n2
+mn2i1f4
+mn1i
+m4nin
+mn2i5o2
+mnis4
+mno5l
+1mo
+4mo.
+2m2oc
+mod1
+mod5ifie2
+mod2i1f
+mogast4
+m2o1g
+mo2ga
+mo3ga4s
+mo4go
+mo2g5ri
+mo1gr2
+m5o2ir
+m2oi
+mok4i
+mol3a
+4molog.
+mo1lo
+mo1l2o1g
+4molo2g1s
+4molo2gu
+mo3ly
+m2o1m
+mo4mis
+mom1i
+m4on
+mon1a4
+4m4o2n2ed
+mo2ne
+mo4n1g
+mo4no
+mono1lo4
+monolo3g5i
+mono1l2o1g
+m4op
+mophil5i
+mo5phi4l
+m1o2p4t2
+m3or1ab
+mor1a
+m3orat4
+mor4a2to
+m5ord
+mo5rel
+m2or2e
+3mor2i1a2
+mor1i
+m5or1iz
+mor5on
+3morp
+3mor2se
+mo2r1s2
+mor5tal
+m2ort2
+m4o3sp
+5most2
+m4o3sta
+2m1ous
+mo4u2
+m1p
+m3pa
+m4panc
+mpa2n
+m4pant
+mp4a2th3
+mpel5li
+mpell2
+m5per3er1
+m4p2er2e
+mper1
+mp4er3i
+mpet5it
+m3pet
+mpe2ti
+mphal5o
+mpha2
+m4phe4
+m4p4h2l
+m2pi
+mp5i2d
+m5p2ig
+mp3i2ly
+mp2il
+mp1in
+m3p2ir
+mp3is
+m3po
+mpol5it
+mp2o2t
+mpov5
+mp3to
+m2pt2
+mp5tr2
+m3pu
+m5q
+m3r
+m4r2y
+4m1s
+m5sel5f
+m5si
+ms2ol4
+mtu4
+muc4k4e
+m4uc
+muck1
+mu2ff4
+muf2
+mul1t2
+m5unc
+mun1
+mu5n2io2
+mun2i
+mun3is
+mus5c2o2
+m2usc2
+mu4se
+mus5ke2
+mus2k2
+mu3til
+mut2i
+m1v
+m3w
+2my
+5my3c
+my4d4
+my3e
+3my1i
+5mys1t4
+m4y2s
+3myt
+n1a
+2na.
+na2c
+na2ch4
+na5cious.
+n2a1c2i2
+nac2io2
+nacio4u2
+na5ciou2sl4
+nac4te
+na2ct
+nac5t2iva
+nac2t1iv
+na5cular1i
+nacu1l2a
+nacula2r
+na4d4a
+nadi4
+nad4op
+na2do
+n2ae.
+naf1fi2l4
+na2ff
+naf1fi
+nag4a
+n4a3gen
+5n4a5geri
+nager1
+na4g2i
+n5ago
+5n4a3gr2
+5n2ah
+5nail
+n2ai2
+na5iv
+n2ak2
+4na2l2ed
+n2ale
+n5al1g2
+n4al2i1a2
+n2a3ly4
+1n2a2m
+3nam2e
+na4m4n2
+na5n2as
+na2n
+n1an2a
+nann2ot4
+nan5no
+nan1n4
+nan4t2a
+nan5t4ed
+nan2te
+nan4t2o
+n2a5o
+4n4ard
+na2r
+nar5tisti
+nart2
+nar2t1is
+nartis2t2
+n2as
+nas5i
+nas5p
+na4s3s2
+nas5te2
+nast2
+nat5al
+n2a2ta
+na5ta3t4
+n4atee
+na3the2
+n4a2th
+nat4h4l
+nati4
+n4a4ti.
+nat5i2c
+n4a2to.
+na2to
+na3t2om
+na4tos4
+n2a2t4r2
+na5tur1i
+n2a2tu
+natu4r
+naugh5ti
+n2au2
+nau2gh
+naugh2t
+naus3
+3naut
+naut3i
+n2a2v
+na5vel
+n3b4
+nbarric5
+nba2r
+nb2a4r1r4
+nbar3ri
+nbe2au4
+nb2e
+n3bea2
+nbe4n
+nb4e1ne4
+nbet4
+nbit4
+n1c2a
+n4cal.
+nc1al
+ncarn5at
+n1ca2r
+ncar2n2
+ncarn1a
+ncel4i
+ncen4t5ri
+n1cen2
+n3cent
+ncen1tr2
+n4cept.
+n1cep
+nce2pt2
+n3cer1
+nc2er4e
+n4c4es.
+n5ce2t
+n5cey
+n3cha2
+n2ch
+nch4ie2
+n3cho
+nch5o1lo
+n3chu
+n4cic
+n1c2i2
+ncid5en
+nci2d
+n4c2i3f
+ncip5ie2
+nc2ip
+n1c2l2
+n4cles
+nc2le2
+n3c2oc4
+n1c2o2
+nco5pat
+nco1pa
+n1cr2
+n2c1t
+nc4t1in
+nct4ivi
+nc2t1iv
+nct2o
+n1cu
+ncu4lo
+n4cun1
+n4curvi
+n1cu4r
+ncur1v2
+nc4us4t2
+n1cus
+4nd
+n2da
+n3d2a4c
+n3dal
+n4d4ale
+n3d2a2m
+nd3anc
+nda2n
+nde2
+n3dea2
+nde3c2i2
+n3dec
+n1d2ed
+nde4l
+ndeleg4
+nd2ele
+nd3enc
+ndepr2e4
+nde1p
+nde1pr2
+n3derl
+nder1
+nde4s
+ndes5cr2
+n5de2sc2
+n5dez
+nd4hi
+n4d1h
+n1dic
+nd2ic5u
+ndid5a
+n1di2d
+n3die2
+nd5i2ly
+ndil4
+nd4in4e
+n2d1in
+nd3ise
+ndi4s1
+nd5is4i
+nd5ism.
+ndi2s1m4
+n2d5ity
+nd3ler1
+n2dl4
+nd1li
+n5d2oc
+n1do
+nd2or4
+n2do4u2
+nd5ou4r
+ndrag5
+ndr2
+n3dr2a2m4
+n5dron
+ndu4b
+n1du
+nduc2t5iv
+n3d4uc
+ndu2ct
+n4dun1
+nd2we
+n2d1w
+n3dy1i
+n2d2y
+2ne.
+ne3alo
+nea2
+n3ea2r
+ne2b3u
+ne1b
+5neck1
+ne4cl2
+ne2c2o2
+n5ec1t2om
+ne2ct
+2n2ed
+3nedi
+ne4du4
+neg3a
+ne3go
+5negu
+n4eis4
+2n2ele
+ne5l2i1a2
+ne1l2i4g
+n4e2ly
+ne2mo
+4n1en
+n3e4nd
+neo3l
+neon4
+ne2p
+n1er1
+4n4e2r4ed
+n2er2e
+5neri4ng
+ner3in
+ner5o
+ne4r4r5
+ner2v2
+ner2v5in
+2n4es.
+n1e2sc2
+ne3s2i1a2
+1ne4ss
+n1est2
+nes3t4r2
+net3a
+net3ic
+ne4t2o1g
+net1r2
+neuma5to
+n4eum
+neu1ma
+neut5r2
+nev5er1
+n4ew
+news3
+n4eys.
+ne4y3s2
+n3f
+n1fo4
+nform5er1
+n5f2orm
+nform2e
+nfor1tu5
+nf2ort2
+nfra2n3
+n1fr2
+4ng
+ng2a
+n4gae
+n5gee
+n3geri
+nger1
+n5gero
+n2gh4
+n2g2i
+n5gic
+ngi2o4g
+n3g2io2
+n5glem
+n2gl2
+n3glie2
+n5gl2io2
+n2g1n2
+n1go
+n4g2r2y
+n1gr2
+n1gu
+n2gum
+n1h2
+nh1ab3
+nha2
+nho4
+nh2y2
+nhy1d5
+n1i
+4ni.
+3niac
+n2i1a2
+ni3ba
+n4ic1ab
+ni4cen2
+n4ice
+4nicl2
+nic2t5a
+ni2ct
+ni4cul4
+n2icu
+ni4d2i1o2
+ni2d
+n2ie2
+ni4e2r1s2
+ni1er1
+ni2f4f
+n2i1f
+ni2ft4
+nif5ti
+n2i2g
+night5i
+ni2gh
+nigh2t
+n3i2g1m4
+3ni2gn2
+nik5e
+n2ik2
+n2il
+ni2l4a
+n3im1
+n4im2e
+5ni1me2t
+n4ine4s
+nin4j
+5n2in1n4
+n4in2u
+5n4i1ol
+n2io2
+ni1o4u2
+3nipu
+n2ip
+5n2iq
+n4is.
+n4is2k2
+ni2s4l4
+nis4o
+n5i4s1s
+nis5ter.
+nist2
+niste2
+nister1
+nis5te2r1s2
+nit2ch4
+ni2tc2
+ni4te
+ni3tho
+n2ith
+n4itos
+ni5tra
+n2itr2
+nit5res
+nitr2e
+ni3tri
+nit4u4r
+n2iv
+n2iv4a
+ni3vo
+niv2oc4
+niz5en
+n1iz
+n1j
+nj2a2m2
+n1ja
+njur5i
+nju4r
+4n2k
+nk5a2r
+n5ker5o
+nker1
+n3key
+nk5i1f
+nk5i2l
+4n1l2
+nla4n2d5
+nl2a
+nla2n
+n3le
+n1let4
+n3m
+nm4a3ter4
+nmor5ti
+n1mo
+nm2ort2
+n1n4
+nne4
+nnel5li
+nnell2
+nnerv5a
+nn1er1
+nner2v2
+n3n1i
+nni3ki
+nn2ik2
+nnov3
+n5ny1i
+n2ny2
+4no.
+n5ob2i
+no5b1il
+no2b4l2
+no5blem
+nobser4
+no4b1s2
+n5ocu1l2a
+n2oc
+no4di
+n4o2d2y
+noe4c
+no4f2a
+nois5i
+n2oi
+n4ois
+n5ol.
+no3l2a
+nol4i
+no2m3al
+n2om
+no1ma
+1nom1i
+no2mo
+4no2ne
+3n2oni4c
+non1i
+5nood
+n2oo
+nop5i
+nora4t
+nor1a
+nor5di
+nor4i1a2
+nor1i
+nor4is
+nor3ma
+n2orm
+n4oro
+n2or4t2
+n4os.
+nos4o
+n4o3sp
+not1a
+n2ot
+3note
+n1o4u2
+n4oug4
+3n2oun1
+2nous
+nou5v2
+nova4l
+nove2
+no2v3el
+no4v2el5e
+n4ow
+now5er1
+now3l
+n3p4
+np2il4
+n1pl2a4
+np2l2
+npoin4
+n1po
+np2oi
+npo5l2a
+n3p4os4
+npri4
+n1pr2
+n1q
+n4que1f
+nqu4
+n1r
+nre4i4
+nr2e
+nre3m
+nres5t4r2
+nrest2
+4n1s
+ns2c2
+n2s2c2o2
+ns3c2ot
+n4s1cu
+n5sec
+nsec4te
+nse2ct
+n2s2es
+n5seu
+n3s2h2
+n2si
+n4s3ib
+n4sic
+n5s2ick1
+n3s4i2d
+n3sie2
+ns5ifi
+ns2i1f4
+ns3i4ng
+n2sin
+n3s2io4
+n3s2is2
+ns1i2t
+n4s3iv
+nsolu4
+ns2ol
+n5son
+n4s2or2e
+n4s3o2r2y
+n3sp2ir
+n3s2t2
+nsta4
+nstil4
+n3su
+nsur4e
+nsu4r
+n3swa
+nsw2
+ntab4u
+n2t1ab
+nt3age
+nt1al
+n4t3anc
+nta2n
+nt5a4nd
+ntan5eo
+nt4ane
+n4t3ant
+nt4ar2i1u2
+nta2r
+ntar1i
+n5tas1is2
+ntas3i
+nt3as4t2
+nt1at
+nt5a2th
+nt3ati
+nt5a2t1iv
+n5t2au2
+n1te
+n4tec
+n4tee.
+n4tees
+n3te2l
+ntend5en
+nt2e4nd
+ntende2
+n4te2o
+n4ter.
+nter1
+n3teri
+n5ter2n2
+ntern5al
+ntern1a
+nter5nat
+nth2
+n1the2
+nt4her5
+nth5in2e
+nth1in
+nt2i
+n2t4ib
+n4t3ic.
+nt1ic
+n5ticis
+nt2i1c2i2
+n5tic1iz
+n4ti4c5s4
+nt2ic4u4
+n3ti2d4
+n1tie2
+n4tify.
+n1t2i1f2
+nti3fy
+n3t2ig
+nt5ilati
+nti2l3a
+n5t4ill2
+nt3i4ng
+nt1in
+nt5ing.
+n1t2i3p
+n4ti1pa2r
+n4tis.
+n2t1is
+nt3i2s1m4
+nt3is2t2
+n5ti1t2io2
+nt3iz
+n2tj
+n1t2o
+n3t2om
+nton1i4
+n5top
+n1tr2
+ntr2a3d
+nt3ral
+n4tran2t
+ntra2n
+n3trat
+nt5re4s4s
+ntr2e
+n2t3ril
+ntrol5ler1
+ntrolle2
+ntroll2
+n5trym
+n2t4r2y
+n1tu
+n3t2u1a2
+ntub5
+ntup5li
+nt2up
+ntup2l2
+n5tu4r
+n2ty
+n2u
+n2u1a2
+5n4uc
+3nud
+nud5i
+nu3en
+nug4a
+n2u3i2
+nu4is
+5nuk
+n4u1lo
+n3ult
+nul1tim5
+nu1m2e
+5numenta
+numen4t
+nu1men
+5numer1
+5nu1mi
+3nunc
+nun1
+nu3tat
+n5u2t1iv
+nut2i
+nu4t2o
+nu1tr2
+n3v2
+nve2
+n2vel3
+nv4e1n4e
+nven5o
+nver2s5a2n
+nver1
+nve2r1s2
+nvi4t
+nvoc5at
+n1vo
+nv2oc
+nvoc2a
+n5w
+nwin4
+nwi2
+n3w2om4
+n1wo
+n2x4
+2ny2
+5nyc
+nym5i2t
+nyth4
+n1z2
+nzy4
+2oa2
+o5ace
+o3a2ct
+oad5er1
+oad5i
+o3ag
+oak5er1
+o2ak
+o3ales
+o2ale
+oal4i
+oal5in
+o5al1it
+oan4t
+oa2n
+oap5i
+o2ap
+oar5er1
+oa2r
+oar2e
+oar4se
+oa2r2s2
+oast5er1
+oast2
+oaste2
+o2a2t5a
+oat5ee
+o4at5er1
+4oba
+o1be4l
+ob2e
+ob2i
+ob3i4ng
+2o1b2i3o2
+ob3it
+o3bl2a
+o2bl2
+ob1li
+4obo2
+ob3oc
+o5bol
+o5b2ot
+o3bra
+obr4
+obr2om4
+o2b5t
+ob3ul
+o3bus
+2oc
+oc2a
+o4c1ab
+o3cad
+oc5ag
+o5cal1li
+oc1al
+ocall2
+o4c5a2t1iv
+oc1at
+oc5a2to
+4o3ce2
+o4cea2
+ocen5o
+o1cen2
+ocess4i
+o5ce4ss
+och4e2
+o2ch
+och5in
+o3ch2o4n
+o1cho
+ochro4n
+o3c2hr
+o5chu
+oci3ab
+o1c2i2
+oc2i1a2
+oci4al
+o1cl2
+o2c2le2
+o1cr2
+oc2r2e3
+o2ct2
+oc2te
+oc1to
+ocu4lu
+ocum4
+oc5uo
+ocu4ss4
+o1cus
+ocus5si
+oc3ut5r2
+o1cy
+o5cy4t
+ocyt5o
+od3al.
+o3de4c
+o5de3g
+ode4ga
+o5d2e4n4d
+o3dent
+odes4
+od3ica
+o4d1ie2
+od3iga
+od2ig
+od4il4
+od1i4s2
+o3d2is5i1a2
+od5it
+5od1iz
+od3li
+o2dl4
+o2do
+od5o1lo
+o2d5ous
+odo4u2
+o3dro
+odr2
+od5ru
+o2du
+odu5cer1
+o3d4uc
+o4duct.
+odu2ct
+o4duc4t1s
+od3ul
+o5dyt
+o2d2y
+oe3a2
+oe4b2i
+oe1b
+oe5cu
+o2e4d
+o5ee
+oe5ic
+o3elec
+o2ele
+oel1li4
+oell2
+oelo4
+oe3o4p
+oep5
+o5eq
+o3er1
+oes3t2
+o1et
+o4et.
+oet3i
+oet4r2
+3oeu
+o3ev
+o3ex
+o3flu4
+ofl2
+4o1fo
+o4ful
+o3fu
+ofun4
+2o1g
+o2ga
+o3g2a2m
+og5a2r5
+o3ga4s
+o3gen1
+o5gey
+o3g2i
+o4g2io2
+og2n1a
+o2gn2
+ogon1i4
+o4g2ot
+o2gri
+o1gr2
+o4g4ro
+og4s2h
+o2g1s
+o2gu
+o5gyr
+o2gy
+o1h2
+o3ha2
+oh1ab3
+o3he2
+oher4er1
+oher1
+oh2er2e
+o3ho4
+oh2y4
+2oi
+oi4c
+o3ic.
+o4i5ch
+o2i4d
+4oide
+o2ig4
+oi5ki5
+o2ik2
+oi2l3er1
+oil5i
+oin3de2
+o2i4nd
+o3i4ng
+oin4t5er1
+oin1te
+oin4tr2
+o2i4o2
+4ois
+o3i2s1m4
+oi4t
+oit4al
+oit1a
+o2ith4
+o1j
+ok4ine
+ok1in
+ok3l2
+ok5u
+ol4a4c
+ol2a
+o4lack1
+o5lali
+ol4al
+ol4a2n
+ola4n5d
+ol5ast2
+ol4as
+ol4at5er1
+ola4te
+ol5ch
+ol1c2
+ole2c4
+ol5e1c2i2
+ol5efi
+ole1f
+o3leo
+ole4on
+o3lep
+o2l1er1
+o3lest2
+o3leu
+o1l2i1a2
+ol3ica
+o3l4ice
+ol5ic1iz
+oli1c2i2
+ol5ick1
+ol3i4c5s4
+ol5id.
+oli2d
+oli2e2
+o3li1er1
+ol5i4es.
+o5l2i1f
+ol4i4f3e
+oli5go
+o1l2ig
+o5lin1a
+ol3i4ng
+oli5os
+ol2io2
+ol5ip4
+ol1is4
+ol2it
+olle2
+oll2
+ollim3
+ol1li
+ol4lop4e
+ol1lo
+ol4ly1i
+ol2ly
+ol3mi
+olm2
+o1lo
+4o1l2oc
+ol3o2i4d
+ol2oi
+o4lon1a
+ol5on5el
+olo2n4e
+ol1or
+o3los
+ol1o4u2
+4ol1ub
+o3lu1mi
+o5lun1te
+olun1
+ol3us.
+oly3ph
+o2ly
+ol2yp2
+4olyt
+2om
+o1ma
+o4m1ab
+o2mac
+o2mal
+o4mane
+o1ma2n
+o3mas1t4
+o3mat
+om4b2e
+o2m1b
+o2m2e4d
+om2e
+ome4g
+o5meg5a1
+ome3li
+o2m3en1a
+o1men
+omen4t
+o3meri
+omer1
+om1i
+o3m2i1a2
+om1i2c
+om2i1c5r2
+om4ie.
+omie2
+om2il4
+om4i2ny2
+om2i4s1s4
+om2i2t
+omm2e4
+o2m1m2
+om2n1a
+o4m1n2
+omn1i3
+o4m2oi
+o1mo
+omoli3
+o2m4o4n
+om5o2ny2
+o4mos.
+omo2t5iv
+om2ot
+o2mo4u2
+om5p2il
+om1p
+om2pi
+ompt5er1
+om2pt2
+ona4d
+on1a
+on3ai2
+o5nas.
+on2as
+onast5i
+onast2
+on5a2t1iv
+onati4
+4on2au2
+on1c
+onc1at3
+on1c2a
+on4cho
+on2ch
+5ond5a2r
+o4nd
+on2da
+ond5ent
+onde2
+on3der1
+on3dr2
+on5d2y
+o2ne
+4onea2
+onec4r2
+4o2n2ed
+on1ee
+on5ell2
+o3neo
+o1n3e4ss
+on1et
+ong3at
+o4ng
+ong2a
+on4gu
+4on1h2
+4o1n2i1a2
+on1i
+on5ia2r
+2oni4c
+onic5a
+oni4c1al4
+on4i2d
+on3ies
+on2ie2
+on3i1f
+o5n2i2g
+o1n2io2
+on4k4s
+o4n2k
+4onnes
+on1n4
+onne4
+on5o4di
+on5oi
+o1no4m1i
+on2om
+4o5nom1i2c
+ono3s
+o5not1a
+on2ot
+o4n1s2
+2ont
+ont5a2ne.
+ont4ane
+onta2n
+on4ter1
+on1te
+onti5fi
+ont2i
+on1t2i1f2
+onton5
+on1t2o
+on1t4r2
+on4tr2e
+on5u4r
+on2u
+o5nus
+onvo5lu
+on3v2
+on1vo
+onvo2l
+on2z2
+2oo
+oof3er1
+o2o1i
+ook3er1
+ook3i
+oo4le
+ool5i2e2
+o2o4m
+oon3i
+oo2p
+oop4ie2
+oop1i
+o3o2p1t2
+oo4se
+oost5er1
+oost2
+ooste2
+o2o2t
+oot3er1
+ooz5er1
+o2oz
+o1pa
+o4p1ab
+o5pali
+opa5ra
+o1pa2r
+op4a2th5
+o5pec
+ope4n2s4
+op1er1
+3opera
+4opera4g
+o1pha2
+o4phe4
+oph4ie2
+o5phi4l
+op5hol
+o1pho
+o1ph2y
+ophy5l2a
+o3phy2l
+op1i
+op3ies
+op2ie2
+op5i4ng
+o3p2it
+4op2l2
+oplast4
+o1pl2a
+opl4as
+o4p2oi
+o1po
+opol3i
+op4o2n4
+o2p5o2ny2
+op5or1i
+op2oun4
+opo4u2
+o2p5ov
+op2p2l2
+o4p1p2
+op5pli
+oprac4
+o1pr2
+op3ra2n
+opr2e4
+opro4l
+op5r2op
+op5so
+o2ps2
+1o2p1t2
+op2ta
+op1u
+o5qui3al
+oqu4
+oq2ui2
+oqu2i1a2
+or1a
+or5a2do
+or2ad
+ora4g
+o5r2ai2
+or5al
+4ora4ls
+or2a2m4
+oran3e
+ora2n
+orat1or5
+ora2to
+or2b3in
+or1b
+orb2i
+or4ch
+or1c2
+orch3i
+or4du
+2or2e
+or5ead
+orea4
+ore5a2r
+ore5c2a
+ore3f
+ore3g
+or3ei4
+oreo5l
+or3e2sc2
+ore3s2h
+or3e4ss
+orest5at
+orest2
+or5este2
+or5e2t2t4
+ore4v
+5orex
+or4fr2
+or1f
+or5gn2
+or1g2
+or1i
+4o4ri.
+or3ia.
+or2i1a2
+4oria2n
+ori4c2i2
+ori5ci2d
+or2i1en4
+orie2
+or3i1f
+5or2ig
+ori5ga
+or4i4no
+4orio.
+or2i3o2
+or5ion
+4orios
+ork5a
+or2k
+2orm
+orm1i
+or3n4a
+or2n2
+5or1nis
+orn1i
+or3nit
+or3o2ne
+o5r2oo4
+or5ose
+or5oso
+or1o4u2
+orre2l3
+o4r1r4
+orr2e
+orres3
+or4sc2
+o2r1s2
+or4sey
+or2se
+or4sti
+orst2
+2ort2
+ort3a2n
+ort3at
+ort3er1
+or5t4es.
+or2t2es
+or3th2i
+or4t2h2r
+or4tit
+or2t3iz
+or4t1or
+or1t4o
+or5tra
+ortr2
+ort3r2e
+4or1u
+or4un1
+or2y5p
+o2r2y
+o3s2a5i2
+os3a2l
+osa2r5
+o1sc2
+os4ca
+os4ce
+o2s2ch2
+o4s1c2i2
+osclero5s4
+oscl2
+osc2le2
+osc2ler1
+o3sec
+osec3u
+ose5g
+os5enc
+o3se4n2s4
+os5eo
+oser4
+o2set
+os5eu
+o3s2i1a2
+osi4al
+osi4a2n
+os5i4de
+os4i2d
+o3si1er1
+osie2
+os5i1f4
+o2s1in
+o4s1is2
+o5ske2
+os2k2
+o5son
+o3soph
+os2o2p
+os3o1po
+4osp
+o3spec
+os1pi
+os4sa
+o4ss
+oss5a2r
+os4s2it
+4osta
+ost2
+ost5age
+os4ta2r
+os5tee
+oste2
+os5ten
+osten5t
+ost5ica
+ost1ic
+os3til
+o5stom2e
+ost2om
+ost3or
+4osu
+os1u4r
+2ot
+ot3a4g
+o5tal1it
+ot3a2m
+ot4an3ic
+ota2n
+otan1i
+o3t2ap
+ot4a1t2io2
+o5t2a5v
+o3t4a4x
+o4t4ed
+oter4m
+oter1
+ot5est3a
+o2t2es
+otes4t2
+4oth
+othal2a2m5
+otha4
+othal2a
+oth5er3in
+ot4her1
+othe2
+o5therm
+otherm5a
+o5thor
+o5t2i2a2
+o5t4ill2
+5ot5in1iz
+ot1in
+ot2in1i
+o2t4iv
+o3t2iva
+o5tivi
+o1t2o
+o5to2n4e
+o4tor2n2
+ot1or
+o4to4u2
+4o1tr2
+otur1i4
+otu4r
+oty3le2
+o4u2
+5o2u3a2
+oub2
+ou5br4
+ou5c2a
+o4uc
+ou5c2o2
+oud5i
+4oue
+ou3e4t
+oug4
+ou5ga
+ought5i
+ou2gh
+ough2t
+ou5g2i
+oul4t
+oult5i
+ou3m
+2oun1
+ou4n2d
+oun2d5a
+ound5e4l
+ounde2
+oun5gin
+ou4ng
+oun2g2i
+oun3tr2
+oup5li
+o2up
+oup2l2
+our3er1
+ou4r
+our2e
+ou5sa2n
+2ouse
+5ous2i1a2
+ou4ss4
+out5is2h
+out2i
+ou2t1is
+ou4v5a
+ouv2
+o1v2a3le
+o5va2r
+4ovati
+ov5el3i4ng
+o2vel
+o4ver.
+over1
+o5ver3b
+ove2r3s2
+ov4ete
+ovid5en
+ovi2d
+o1vis
+ovis5o
+o2v5os
+o1vo
+ow3ag
+ow3a2n
+o5w4ay
+owd4i
+ow2d3l4
+ow1el
+owel5li
+owell2
+ow5ha2
+owh2
+owh2ith4
+ow1i2
+ow5in
+owi5n2e
+ows4
+ow5s2h
+ow5sl4
+ow5y2
+o4x
+ox3i
+oxic5ol
+oxi4c
+ox2i2c2o2
+ox5o
+2oy
+oy5a2
+o4y2s4
+2oz
+o1zo
+oz2o5i
+o3zy1g
+4pa.
+pac4te
+pa2ct
+pa5do4u2
+pa2do
+pad4r2
+pae4s4
+pa3ga2n
+4pag1at
+pag4ati
+pain2
+p2ai2
+4pairm
+pa2ir
+pa5la2n
+pal2a
+pal3in
+pa3lo
+p4a4ls
+pan5a2c
+pa2n
+pan2a
+pan1e
+pan3i
+p4a4pa
+p2ap
+pa3pe
+pap3u
+pa3p4y
+1pa2r
+para5s2
+par3l
+pa3r2oc
+pa3rol
+par5o4n
+1p4as
+pass5ive
+pa4ss2
+pas4s1iv
+pas1t2
+pas4t1in
+p4a3ter1
+pa2t3i4n
+p5a2to
+pat4ric
+p2a2tr2
+pat1ri
+pa5tric2i1a2
+patri1c2i2
+5p2au2
+paul5e
+pa2u3p
+pa5vi4l
+p2av
+5paw
+pawk4
+paw5ki
+2p1b
+p1c4
+p5d2
+2pe.
+pear4l5i
+pea2
+pea2r
+pe4c2o2
+pec4tu
+pe2ct
+2p2ed
+5ped3a
+3pede2
+3pedi
+ped3i4s1
+3pe4d1s2
+pe2du
+p4ee
+pe2f
+4p2ele
+pe5le3o
+pel5v4
+pen4at
+pen1a
+5p4enc
+pend5er1
+p2e4nd
+pende2
+pen5dr2
+pen4ic
+pen1i
+3p4en1n4
+pens5ati
+pe4n2s
+pens2a1t
+p4en5u
+pe5on
+5p2er1c2
+per1
+per3cent5
+per1cen2
+4p2er2e
+perem5i
+p4eri
+5p4er3n2
+p3eron
+per4os.
+per5t1in
+pert2
+per2t5is
+per3v2
+p4e2r2y
+2pes
+pe4s4s3
+pes5til
+pe2sti
+pest2
+3pet
+pet5all2
+pet2a
+pet3en
+pe2ti
+pet3r2
+pe4wa
+4pex
+p1f
+p5g
+2ph.
+4phae
+pha2
+pha5g2e4d5
+ph5al.
+ph2a2n
+phant5i
+phan4t
+phe4
+ph5esi
+ph3et1
+3phib
+4ph1ic
+1phi4l
+ph1i4n
+ph1is
+ph2i5th
+p4h2l
+1pho
+4pho2bl2
+4ph4o2n2ed
+ph2o4n
+pho2ne
+3phor
+ph5or1iz
+phor1i
+ph4os3p
+ph3o4u2
+3phra
+p2hr
+4p2h1s
+1phu
+ph2u5i2
+2phy.
+ph2y
+3phy2l
+4pi.
+3pia2r
+p2i1a2
+4pica
+p5i4c1al
+p2i3c2o2
+p2i4cr2
+pi2ct4
+p2ie2
+p4i1es2t2
+pi5eti
+p2i1et
+p5ifie2
+p2i1f
+pi2g3n2
+p2ig
+p2il
+3pile
+pil2l5in
+pill2
+pil1li
+5pilo
+pi3l2ot
+pim2
+pin4e
+pin5et
+3p4inge
+pi4ng
+p4in1n4
+5p4i4n1s2
+3p2i1o2
+pip4a
+p2ip
+pi4pe
+5p2iq
+pir5a4c
+p2ir
+pir1a
+pir4t2
+p4is.
+p4i2s3c2
+p2i4s2s
+pis1s5a
+pis5til
+pist2
+pis4tr2
+p2itu
+2p3k2
+p2l2
+1pl2a
+pla5n1o
+pla2n
+plant5er1
+plan2te
+plas5t2i1c2i2
+pl4as
+plast2
+plast1ic
+pla5t4o
+4p4le.
+4pled.
+p2l2ed
+3pleg
+3plen
+2ples
+4pli2s1m4
+pl1is
+4plist2
+plu2m
+plum4b2e
+plu2m1b
+plumb5er1
+p4ly
+2p1m
+2pn
+pnos4
+1po
+4po.
+po3c2a
+p2oc
+3pod
+4pof
+2p5o2i4d
+p2oi
+pois5i
+p4ois
+po5lem1ic
+po4ly1
+pol4y3s
+po1ma2n5
+p2om
+po1ma
+pom4e
+p4o2n
+pon4a2c
+pon1a
+pon4ce
+pon1c
+pon4i4e2
+pon1i
+3pon3i1f
+pon5ta
+p2ont
+2po2ny2
+po4pa
+po5ple
+p4op2l2
+4pora2to
+por1a
+por3ea4
+p2or2e
+4po2r4ed
+por3i4f
+por1i
+por3p
+3p2ort2
+por5tie2
+3p4os
+po4s1s2
+po1te
+p2ot
+poul1t5e
+po4u2
+poul4t
+pound5er1
+p2oun1
+pou4n2d
+pounde2
+pout5er1
+p5ox3i
+po4x
+5p2oy
+4p1p2
+p1pa2r3
+ppar1at5
+p4p4ene
+p3pet3
+pph4
+ppi4c
+p4p2l2ed
+pp2l2
+p5p2ler1
+p5p1let
+ppres2s5o
+p1pr2
+ppr2e
+ppre4ss
+ppr4ob5a
+1pr2
+prac1
+pr2a5d
+pra2r4
+4p4re.
+pr2e
+pre1b3
+p2r4e1d
+pr2ef5er2e
+pre2fe
+pre1f
+prefer1
+prel5a4te
+pre1l2a
+3prem
+pre5mat
+pren3
+pres3a
+pre5scin
+pre2sc2
+pres1c2i2
+p3rese
+5pressi
+pre4ss
+5pri1c2i2
+pri4es
+prie2
+4pri4m
+pring5er1
+pr4inge
+pri4ng
+pr4in2g5i
+4pr2i3o2
+p5r4i1ol
+pri4os
+pri2s5in
+pr2i4v2
+4pr2iva
+4p4ro.
+pr4o3bo2
+p3roc3a
+pr2oc
+pro4ch
+pro1l
+pron4a
+pro4ph5e4
+pr2op
+pro3pyl5
+pro2p4y
+pro3r2
+pros4i
+pros5tr2
+prost2
+pr4o3th
+pr2ot
+4p2r2y
+2ps2
+p3sac
+ps4al5t
+psa2l
+p3s2h
+p1si
+p5sin.
+p2sin
+p1s2o3m
+p1st2
+psul3i
+p1s2ul
+3psy1c
+ps2y
+2pt2
+p2t3ab
+p4tad
+p4ta2n
+p2ta2r
+pt5ar1c2
+p1t4ed
+p5ten1a
+pt5en1n4
+5pte2r2y
+pter1
+p5tet
+pt4ic
+p5tie2
+p3til
+p2t3in
+pt4ine
+p3tise
+p2t1is
+p5tisi
+p5t2om
+p4tr2
+p1tu
+pub1
+pu5b2e
+p4uc4
+pu4ch4
+pudi4c
+pu5er1
+puff5er1
+puf2
+pu2ff
+puf1fe
+pu4la2r
+pu1l2a
+pu5lar.
+pu5l1is
+pul2i
+p4u4m
+pu1m4o
+p4un1
+pu4n4a4
+3punc
+pun5g2i
+pu4ng
+pun3i
+pun2t
+pu3pi
+p2up
+pur5b
+pu4r
+pur3c2
+p4us
+push4ie2
+pus2h
+pu3tat
+p5u5t1is
+put2i
+pu3tr2
+4p1w
+2p4y
+py3e
+3py1g
+3pyl
+pyr3e
+py5t
+4qf
+qu4
+5qu2ak
+q2ua2
+4qua2r
+qua5t2io2
+2que.
+3quer3a
+quer1
+4qu2er2e
+4qu4es.
+1que4t
+5quin1a
+q2ui2
+5qu2ir
+3quito
+4quitu
+4ra.
+r2a3ba
+r1ab
+5r2ab2e4
+3r2a3bin
+r2abo2
+ra3bol
+rac4a
+r2acu
+rac5u1l2a
+ra5cu1lo
+r2ad
+ra4de
+rad4in4e
+ra2d1in
+ra2g5o4u2
+ra3gr2
+3raill2
+r2ai2
+ra5ist2
+4ral2i1a2
+r2a3ly4
+r5a4m1n2
+r2a2m
+ra3mu
+r4andi
+ra2n
+ra4nd
+ran5dis2h
+randi4s1
+ran4du
+ra5nee
+ran4gen
+ra4ng
+ra3n2i1a2
+ran1i
+ra3n2oi
+ran1o
+ran2t
+ran5t4ed
+ran2te
+5ran3te2l
+rant5in
+rant2i
+ran1t5o
+rapol5
+r2ap
+ra1po
+rap5to
+ra2pt2
+4rar1c2
+ra2r
+rar2e2
+rar3e1f
+rar5ia.
+rar1i
+rar2i1a2
+ras2
+r2as3c2
+r2as2e
+r4as2k2
+r2a3so
+ras1s5a
+ra4ss2
+ras2s5in
+r4as5te2
+rast2
+ra5t2a3p
+r2a2ta
+ra5ta3t4
+rat5eu
+rath4e2
+r4a2th
+ra2t3i1f2
+rat4in.
+ra2t3in
+ra5t2oc
+ra2to
+5r2a5tol
+4r4at2om
+ra4tos4
+ra5t2u1i2
+r2a2tu
+rat5u4m
+rat3u4r
+rav5ai2
+r2av
+rav5eli
+ra2vel
+rav3i2t
+rawn4
+ra3z2ie2
+r2az2
+raz1i
+r1b
+r2ba
+r4bag
+rb3ali
+rb1a2n
+rba2r3
+r2b2e
+rbe5c
+r3bel
+rbel5o
+rb3ent
+r4be1s2
+rb2i
+rbic4
+rb2ic5u
+r2bin
+r5bine
+rbit1
+r2bos
+rbo2
+r4bum
+rbu5t4
+r1c2
+rcant5
+rca2n
+rca4s
+r4c2ele
+rce2n5er1
+r1cen2
+rc4ene
+rcen5ten1a
+r3cent
+rcen1te
+r2ces
+r3ch2a3i2
+r2ch
+rcha2
+rch3al
+rch5ar4d
+rcha2r
+rch5ate
+r3cheo
+rche2
+r4ch1er1
+rch4i1er1
+rchie2
+r4ch1in
+rch3is
+r3chit
+r3cil4
+r1c2i2
+rci5n2o1g
+rc2ino
+rcis2
+rciz4i2
+rc1iz
+r2cl2
+r4c2le2
+r5clo
+rco1lo4
+r1c2o2
+rcrit5
+rcr2
+rcriti4
+r2ct4
+rc5ti
+r5d2a2m
+r4d1a2n4
+rd4an.
+r2da2r
+r5de4l
+r3de4n2s
+r4des
+rd5e4ss
+rd5ia2n
+r1d2i1a2
+r4die2
+r5d2ig
+r2d2in
+rd3i4ng
+r3d2i3o2
+rd1i4s2
+rd5ler1
+r2dl4
+rd3li
+r4dol
+r1do
+r2d5ous
+rdo4u2
+r2e
+4re.
+rea4
+r4ea.
+reac2t5iv
+re1a2ct
+re3af
+re3a4g
+re5alt
+re5a2m1b
+re2a2m
+re3an5i
+rea2n
+re5ant
+re5asc2
+re2as3o
+r5e2au3
+3re2av
+r5ebrate
+re1b
+re2br4
+reb1ra
+re4b5uc
+re3c1al
+rec2a
+rec4ce
+rec1c4
+re3ce
+reced5en
+re2c2ed
+re3cede2
+re3cha2
+re2ch
+reci5si4
+re1c2i2
+r4e1c2r2
+rec4t3r2
+re2ct
+re3cu
+2r4ed
+re1de2
+re3di4s1
+re4dol
+re1do
+re1dr2
+reed5i
+re2ed
+ree3m
+3reer1
+re2fe
+re1f
+re3fin
+re5gali
+re5gra
+re2gr2
+r2e3g4r2e
+reg3ri
+re3g4ro
+reg3ul
+rei4
+r4e3i1f
+re1in
+r4e3is
+reit3
+reit4i
+re1l2a
+r2e1le
+4r4e4l2ed
+re3l2i1a2
+rel3ic
+re5l2ig
+rel2i4q
+rel3li
+rell2
+r5em.
+rem5ac
+rema4n4d
+re1ma2n
+rem5a2to
+r3em1p
+rem5ul
+ren1a4
+ren5at
+r4endi
+r2e4nd
+r4ene2
+ren4es
+r4en1i
+ren3ic5
+ren4it
+ren4ter1
+ren1te
+re5num
+r4en2u
+re3oc
+3re2o1g
+re5ol2a
+reo2l
+re3oli
+3reo1s2
+re1pe
+re4per1
+re5ph1
+rep5i2d
+re3pin
+re3ple
+rep2l2
+r2e4pr2e
+re1pr2
+re1q
+rer4a
+rer1
+r2er2e4
+re5rea4
+r2e3r2u
+2r4es.
+re3scr2
+re2sc2
+re3se4l
+re3sem
+re3ser1
+res5ist2
+res1is2
+re5s1it
+re3spe
+r3esq
+re5stal
+rest2
+rest5er1
+reste2
+re5s1tu
+3reta2r
+ret2a
+re3ten
+re4t4er3
+re5term
+re1t2o
+re5ton
+re3tra
+retr2
+r2e3tr2e
+re5t1ri
+re3tu
+re3un1
+reu4r4
+re1v
+re2v3el
+revi4t
+r1f
+rf4l2
+rfu4m
+r3fu
+r1g2
+r4gag
+rgal4
+r2ge
+r5gee
+r4g4ene
+r3gen
+r3ge4o
+r3ger1
+rg5li
+r2gl2
+rgu5f2
+rh2
+r5hel4
+rhe2
+rhe5o2l
+rhos4
+3r2h2y
+4ri.
+ri3a2m
+r2i1a2
+ri5ap
+2r2ib
+r4i3bo2
+ric2a5t4u
+ric1at
+2r4ice
+rich5om
+r4i2ch
+ri1cho
+rick4en
+r2ick1
+ric4ke
+r4icl2
+ri5cli
+ri3col
+r2i2c2o2
+ri5cor
+ri4cra
+r2i1cr2
+2r2icu
+rid4al
+ri2d
+rid1a
+rid4e
+ri5el
+rie2
+ri3er1
+ri2es
+rift5er1
+r2i1f
+ri2ft
+rif5tie2
+5rifug4a
+ri3fu
+ri5g2a2m
+r2ig
+rig5ant
+riga2n
+ri5l4a
+r4ile
+rill5er.
+rill2
+ril2ler1
+rill5in2g1s
+ril1li
+ril2lin
+rilli4ng
+4rim.
+ri2ma
+rim2a4g
+ri1m5a2n4
+rim3at
+r4i2m1b
+ri1men4
+rim2e
+4ri2m1m2
+4ri4m1s
+rin4e
+r4inet
+ring5ie2
+r4in2g2i
+ri4ng
+rink5er1
+r4i4n2k
+r4ino
+ri4n4s2
+rin3s5i
+rin4t5er1
+rin1te
+r2i3o2
+ri2o4g
+5rio2ne
+ri4op
+ri5or
+ri5p2a
+r2ip
+ri5p2ie2
+rip5lica
+rip2l2
+r2i5r
+ri2s4c2
+r4is4is2
+r2is1p
+ris4pa
+ris4pe
+ris5ter1
+rist2
+riste2
+4risti
+r2i3ton
+r5it5r2
+r2i4v
+riv4al
+r2iva
+ri5vall2
+riv5eli
+ri2vel
+riv3en
+riv3i4l
+5r2i5zo
+r1iz
+r1j
+r2k
+r5kas
+rk5ati
+r5kell2
+rk5en1i
+rk1er1
+r3ket
+r3key
+r3ki1er1
+rkie2
+r5ki1es2t2
+r5k2in.
+rk1in
+r5k2i4n1s2
+rks4m2e
+r4k1s
+rk2s1m4
+r1l2a
+rlat3
+r1le
+r3l4ic
+r3l4ine
+r5li4n1s2
+r4l1it
+r1lo
+r3mac
+rma5ce
+r5mad
+r2mal
+r4manc
+r1ma2n
+r4man1o
+r4mar1i
+r1ma2r
+r4ma2r2y
+rm4as
+r4m3ati
+rma5t2oc
+rma2to
+r5m2a5tol
+rme2a2
+rm2e
+r2m1ic
+rm4ica
+r5m2i2d
+rm4ie2
+r5m2ig
+rm2il5
+rmin4e
+rm3i4ng
+r4ming.
+r4mi4te.
+rmi2t
+r3m2oc
+r1mo
+rmol4
+r1mu
+rmu3l2i
+r2n2
+rn3ab
+rn1a
+r3na2c
+r5nad
+rn5a2r
+rn3ate
+rn5a2t3in
+rnati4
+rn5e2dl4
+r2n2ed
+r3nel
+r3ne4ss
+rn5est2
+r3net
+r3ney
+r5n2i1a2
+rn1i
+rn5ib
+r3nic
+rn3in
+rn4ine
+r1nis
+rn3ist2
+rn2i5v
+rn3iz
+rn5n4
+r3n2oc
+r5n2o1g
+rnt4
+r5n4uc4
+rn2u
+r5nut
+4ro.
+ro4b2e
+rob3le
+ro2bl2
+ro5br4
+5roc1c4
+r2oc
+ro3cu
+r2od
+ro3do
+ro3dy4n1
+ro2d2y
+ro1fe
+ro3gn2
+r2o1g
+4r2oi
+ro3i4c
+ro2i4d3
+ro3l2a
+r4o2l2ed
+rol5ite
+rol2it
+ro3ly
+romant4
+r2om
+ro1ma
+ro1ma2n
+ro5mel
+rom2e
+ro3m2i2t
+rom1i
+romole2c5
+ro1mo
+rom4p
+ro3mu
+ron4a2c
+ron1a
+4ronal
+ro5nate
+ron5ch
+ron1c
+ron4do
+ro4nd
+ron2g5i
+ro4ng
+r5onm2e
+ron3m
+ro1no
+ron4ton5
+r2ont
+ron1t2o
+r2oo4
+1ro2o4m
+5ro2o2t
+r2op
+4rop.
+ro3pel
+rop4in4e
+rop1i
+r4o1pr2
+r5opte
+r1o2p1t2
+ror5d
+4r2or2e
+r4osa
+ro3s2i4a2
+ro5s2ol
+4ro4ss
+ro5stat
+r4osta
+rost2
+ros4ti
+ros5tit
+ro3tat
+r2ot
+ro1te
+ro4ter1
+ro3tu
+5r4oue
+ro4u2
+roul3
+round5er1
+r2oun1
+rou4n2d
+rounde2
+rou5sel
+r2ouse
+4rou4ss4
+r4out
+r4ow
+row3er1
+4ro4x
+rpas2s5in
+r1p4as
+rpa4ss2
+rp3at
+rpe2
+r3pent
+rp5er.
+rper1
+r2ph
+rph5e4
+r3phol
+r1pho
+rp3i4ng
+rp5is
+rpol3a
+r1po
+r2p5o4u2
+rpr2e4
+r1pr2
+rpre4t5er3
+r3pu
+r1q
+4r1r4
+rr2a4h
+rran5g2i
+rra2n
+rra4ng
+rr2ap4
+rre2l
+rr2e
+r4reo4
+rrhe3
+rrh2
+r3ri
+rric4
+r2r2icu4
+rri4fy.
+rr2i1f
+rri3fy
+rr4in5ge
+rri4ng
+rri4os
+rr2i3o2
+rrob3
+rr2o1g5
+rr2o4t
+r5ru
+r2r2y5
+r3ry1i
+r3rym
+2r1s2
+r4sa4g
+r2sa2l
+r5sal1is
+r5sal1iz
+r2sa2n
+r4sa2r
+r2se
+r3se2a2
+r3sec
+rsel4
+rsell5
+rs3er.
+rser1
+2r1s3e2r1s2
+r3set
+r3sha2
+rs2h
+r3shi
+r4shie2
+r5s2i2a2
+r4s3ib
+r5sie2
+r4sil
+rs3i4ng
+r2sin
+r3s2io4
+r4s1it
+r4s3iv
+rs5li
+r2sl4
+rst1or4
+rst2
+rstrat4
+rstr2
+r3su
+r4sus
+rswea2r4
+rsw2
+rswea2
+rt2
+r2t3ab
+rta4g
+rt3age
+r3ta2r
+r4tar2e
+r2t3c2
+r1t4ed
+r4te2dl4
+r3te2l4
+r5t2e4nd
+rt3en1i
+r5ter3er1
+r2t2er2e4
+rter1
+r5tet
+r5teu
+r4th4ene
+rthe2
+rth2i
+rth5ing.
+rth1in
+rthi4ng
+rth3ri4
+r1t2h2r
+r1t4ic
+r4ticl2
+r5t2i1et
+rtie2
+r5ti2l3a
+r5t4ill2
+rtil5le
+rt5i2ly
+r2t1in
+r3tin1a
+rt3i4ng
+r3titi
+rti5tu
+r2t3iv
+r2t1iz
+rt5let
+r2tl
+rt3li
+r1t4o
+rto5l
+rt5ri2d
+rtr2
+rt5s2i
+r4t1s
+r1tu
+r4tus
+rtwis4
+rt1w
+rt2wi2
+r2u3a2
+r4ub2e
+rub3r4
+ru4ce
+r4uc
+r2ud
+rue4l
+r4uf2
+ru3in
+r2ui2
+ruis5i
+ru2l
+r4um2e
+r4u1mi
+ru4m2or2e
+ru1mo
+run4c2l2
+run1
+run1cu4
+runcul5
+ru4n2d4
+run2e
+ru5net
+ru4n4g
+run4t
+r2u2p
+rup5lic
+rup2l2
+ru3pu
+rur4i
+ru4r
+rus4p
+rust5at
+r4ust2
+rust5ee
+ruste2
+rus5t4ic
+rus4t5u
+ru3tal
+ru3t2i
+r1v2
+r4vanc
+rva2n
+r2ve
+rvel4i
+r2vel
+r3ven
+rv4e1n4e
+rv5er.
+rver1
+rv5ers.
+rve2r1s2
+r3vest2
+r3vet
+r3vey
+rvi4t
+r1w
+2r2y
+ry5er1
+5ry2g1m4
+ry1g
+ry4go
+ry2m4b
+3ryn1go
+ryn1
+ry4ng4
+4ryn4gol
+ryp5a
+r2yp
+ry2t
+ryth4i
+r2z
+2sa.
+2s1ab
+s3a2bl2
+5sack1
+sac4q
+s3a2ct
+sac4te
+sad5i
+sa2d5o
+5sae
+sa4g
+3s2ai2
+sain4t
+5s2ak
+sa2l
+sa5l4ac
+sal2a
+3s2ale
+sa3lie2
+s4al4t
+sa3lu
+s2a4m
+sa5min
+sam1i
+sa1m5o
+sam2p4
+san3a
+sa2n
+san4d2ed
+sa4nd
+sande2
+s4an4e
+san5ga2r
+sa4ng
+sang2a
+san5i3f
+san1i
+2sant
+sant5ri
+san1t4r2
+s3ap
+sa2p3r2
+sa2r5s2
+sa2r
+3sas.
+sa4s3s2
+sassem4
+s2a1t
+sa2te
+s5a2t1iv
+s5a4to2r2y
+sa2to
+sat1or
+s2a2t1u
+1s2au2
+sau5c2i2
+s4a4uc
+sau4r5
+savi2
+s2av
+sa3vo4u2
+sa1vo
+4s3b
+s4bei
+sb2e
+sbe4s2
+s2by3
+sc2
+s1ca
+sca5len
+sc1al
+sc2ale
+s1c2a2p
+scar4c2
+s1ca2r
+sc2av3
+s1ce
+s4c2ed
+4scei
+4s4ces
+s2ch2
+sci2d5
+s1c2i2
+s2c2o2
+scof4
+s4c2oi
+3s4cop4e
+5scopic
+scop1i
+5scripti
+scr2
+scr2ip
+scri2pt2
+2s1cu
+4sc4u4ra.
+s1cu4r
+scur1a
+4scuras5
+2s1d2
+2se.
+se2a2
+s4e2a2m
+seas4
+sea3w
+sec4a
+sec5a2n
+se2c2o2
+secon4
+2s2ed
+se4da
+sed4it
+3se2ed
+3sei
+se2i3g2
+5sel2a
+4s2ele
+se3lec
+selen5
+5self
+2s4e1m2e4
+sem2i
+semi5d
+se1m4o
+se4n5g
+3se4n2s
+sen5sati
+sens2a1t
+sen5sor1i
+sent5ee
+sen1te
+5sen4t3m
+seo5l2o1g
+seo2l
+seo1lo
+se2p
+se1p3a
+sep4si
+se2ps2
+3se2pt2
+sep3ti
+ser4a2n
+ser1
+se5r4en4e2
+s2er2e
+ser3en
+ser4t4o
+sert2
+4ser1vo
+ser1v2
+s2es
+4s4es.
+se5s2h
+s5esta
+sest2
+1set
+5s4eum
+3sev
+sev3e4n
+se1wo4
+3sex
+sex1o2
+3sey
+2s1f
+sfac2t5o
+s1f2a
+sfa2ct2
+sfi4
+sf2or5e
+s1fo
+sfra2n5
+s1fr2
+2s1g4
+s2h
+4sh1ab
+sha2
+sh4abi
+sh1er1
+she2
+sh5et1
+shil5li
+shi4l
+shill2
+sh5i1ne4ss
+sh1in
+sh2in2e
+shine4s
+sh3io2
+5sh2i2p
+s3h2o4n
+4shu4
+sh4y2s4
+sh2y
+si4all2
+s2i1a2
+siast5
+4s1ib
+s3ic1at
+3sic1c4
+2s5icl2
+s2i4cu
+si5cul
+s4i2d
+4sid.
+si4de
+side5l
+sid3en
+si1d5eri
+sider1
+4si4d1s2
+5sid5u4a2
+si1du
+si4e2r1s2
+sie2
+si1er1
+s2i1f4
+si2f5f
+s2i4g
+1sili
+sim4p4ly
+sim1p
+simp2l2
+2sin
+s2ine
+sin5et
+5sing5er1
+s4inge
+si4ng
+s2in3i
+5s4i4n2k
+si5nol
+s2ino
+si3nus
+s2in2u
+1s2io4
+4sio.
+si5o5s
+3s2ip
+si4pr2
+s1is2
+4sis2h
+4si2s1m4
+s4ist3a
+sist2
+si4s1t3o
+s1it
+si4te
+sit5om
+4s1iv
+5s2iva
+s1j
+s2k2
+4sk.
+s5ka2r
+ske2
+s3ket
+s5key
+s3ki1er1
+skie2
+s5ki1es2t2
+sk5i2ly
+ski2l
+sk5ine4s
+sk1in
+4s4k1s
+s3ky3l
+2sl4
+slan2g5i
+sl2a
+sla2n
+sla4ng
+s1lat
+3sl4au2
+slav5eri
+sl2av
+slaver1
+s2le
+s5lea2
+s3let
+s5ley
+s3l1it
+s1l2o3c
+slov5
+s5l4uc
+2s1m4
+s3ma2n
+smas4
+s3men
+sm2e
+sm2i3g
+3sm2ith
+smi2t
+smo4d1
+s1mo
+smu5ta1t2io2
+s1n2
+s2n1a
+2so.
+2s3od
+so2d3o
+so2d2y4
+3soe
+4s3o2i4d
+s2oi
+s2ol
+sol3a
+so5l4a2n
+so2l4er1
+so3lic
+3solve
+solv5er1
+1s2o2m
+soma5to
+so1ma
+so3mat
+3so2me.
+som2e
+so5met1e
+so1me2t
+so3mo
+s2on1a
+son5at
+s4o2ne
+son5or
+s2o2p
+4sor3ie2
+sor1i
+5sor2i3o2
+sor4it
+s5or1iz
+sor3o
+s3o2r2y
+sos4
+4sose
+s4o5th
+s2ot
+3so4u2
+sov5e
+so3vi
+spas1t4
+s1p4as
+spens5a
+spe4n2s
+4speo
+3sperm
+sper1
+s5pero
+spers5a
+spe2r1s2
+sph2
+s3pha2
+3spher1
+sphe4
+spic5ul
+sp2icu
+s2pi2d
+sp5id.
+s5pi1er1
+sp2ie2
+spil4l2
+sp2il
+s2pin
+sp3i4ng
+sp2i5n1i
+spital5
+spit1a
+s1p2l2
+sple2
+s4p4ly
+s2po
+5sp2om
+spon5g2i
+sp4o2n
+spo4ng
+3spo4n1s2
+3spoon
+sp2oo
+spr2u5d
+s1pr2
+s4p4y
+s1r
+sr2e2
+sreg5
+sre1p5u
+sre4s
+4ss
+s1sa
+s5s2a4m2
+s1sel
+s5se4n5g
+s3sent
+ssent5er1
+ssen1te
+ss3er.
+sser1
+s5seri
+ss3e2r1s2
+s5seu
+s3sev3
+s3s2i1a2
+s1sic
+s1s2i1f4
+s2s1in
+ss4in.
+s4s2ine
+ss4is.
+ss1is2
+s3s2it
+ss4ivi
+s4s1iv
+ss5li
+s2sl4
+s2s3m4
+s4s1n2
+s1so
+ssol3u
+ss2ol
+ss4ol1u4b
+s4s2or2e
+ssor5ial
+ssor1i
+ssor2i1a2
+ss5po
+s1su
+ss3w2
+st2
+4st.
+s2t1ab2
+sta3bi
+4s1t2ak
+s4t2ale
+stan2t5iv
+sta2n
+stant2i
+s3tas.
+5stat1i2c
+s2t3c2
+ste2
+ste5a2r
+stea2
+ste5at
+s4te1b
+s4tec
+4s1t4ed
+s4te2dl4
+s4te4d1n2
+4s2t2er2e4
+ster1
+ster4i1a2
+s1teri
+s4tern.
+ster2n2
+s3tero
+st5es4t2
+s2t2es
+s1th
+s4tha4
+s4thu
+s3t2i3a2
+3st2ick1
+st1ic
+s3t2ic1u
+stil5ler1
+st4ill2
+s4ti2ly
+st3i4ng
+st1in
+5s4t2ir
+s5t1iz
+4s2tl
+st3ler1
+st3li
+s4toe
+3ston
+sto2n4e3
+ston4ie2
+ston1i
+s5torat
+st1or
+stor1a
+st4or5ia2n
+stor1i
+stor2i1a2
+s4tose
+s2to4u2
+s4tr4ay
+str2
+str2e4
+strep3
+3st4r4uc
+str2u5d
+2s4t3s
+s1tu
+s4tud
+stu4m
+stur4e
+stu4r
+4st1w
+s4ty
+1styl
+4su.
+su5a2n
+s2ua2
+su4b1
+su2b1t2
+su2ct4
+s4uc
+sud4a
+su3e4t
+su2f3f
+suf2
+sug3
+3s2ui2
+su2i5c
+su5i4ng
+1s2ul
+s4u2m
+su1m3i
+su4n4a4
+sun1
+su5pe
+s2up
+su3pin
+supra3
+su2pr2
+sur4as5
+su4r
+sur1a
+sur3c2
+s4ur1g2
+sur3p2l2
+su5su
+su5z
+2s3v
+svers5a
+sver1
+sve2r1s2
+sves4
+sve2st5i
+svest2
+sw2
+5swee
+swel4l5i
+swell2
+4sw4e2r4ed
+swer1
+sw2er2e
+2s1wo
+s2y
+4sy.
+sy4b2i
+s4y1b
+sy1c
+sy4ce
+sy4c2hr
+sy2ch
+sy4d4
+1syl
+3syn1
+syn5e
+sy5pho
+s2yp
+sy2ph
+syr5i
+2ta.
+2t1ab
+ta5blem
+ta2bl2
+3tabli4
+t2abo2
+ta3bol
+ta4bo4u2
+t4a3ce
+ta5ch2om
+ta2ch
+ta1cho
+ta3ch2y
+ta4ci2d
+t2a1c2i2
+t5ade
+tad4i
+5t2ad1j
+ta5d2or
+ta2do
+tad2r2
+tae5n
+taf4
+tage5o
+ta5g2o1g
+3ta2gr2
+3t2ah
+1t2ai2
+3tail
+2ta2ir
+t4ais
+1t2ak
+tal2c2
+tal5ent
+t2ale
+ta5lep
+t4al2i1a2
+t4al1in
+tal4l3a
+tall2
+5tal1lu
+t2alo4
+t2a3ly4
+tam5ar1i
+t2a2m
+ta1ma2r
+5ta3me2t
+tam2e
+tamor2ph5
+ta1mo
+ta3morp
+tan5at
+ta2n
+tan2a
+tand5er1
+ta4nd
+tande2
+t4ane
+5tanel
+tan5ie2
+tan1i
+t5an1iz
+ta2nt5a2n
+tan2t2a
+t4a4pa
+t2ap
+1tard
+ta2r
+tar5ia.
+tar1i
+tar2i1a2
+tark5i
+tar2k
+tar3n2
+3t2a4r1r4
+tas3i
+t3a2s1m4
+5ta4ss2
+tas4t2
+t2a3sta
+tast5i4c
+t4ateu
+3ta2t1is
+t4a2to.
+ta2to
+tat4o4u2
+t2a2t4r2
+ta1t3ut
+t2a2tu
+tau3t2o
+t2au2
+t5awa
+tawn4
+t4a4x
+4t3b
+2tc2
+t1ca
+tcas4
+tch5e2t2t4
+t2ch
+tche2
+tchet1
+tch5u
+4t1d4
+4te.
+te5cha2
+te2ch
+5tec2h1n2
+te3cr2
+t4ed
+te5d2a
+4ted1d4
+4te1do
+4tee1i
+te2g
+5tegic
+te1g2i
+t3ego
+te2g1r2
+teg3u
+tei4
+te2l
+4t4e4l2ed
+t2ele
+tel5iz
+1tell2
+4te3lo
+3te4ls
+tem3a
+4te1m2e4
+t4e5m4on
+te1mo
+ten4ag
+ten1a
+4te2n3a2r
+4t4ene
+t5en3m
+5tenn1a
+ten1n4
+4ten1o
+te5n2o1g
+tent4a
+te2o
+teo5l
+2tep
+te3pe
+tep5i
+tera4c
+ter1
+t4era4g
+t4era2to
+3ter3b
+5t2erd
+2t2er2e4
+ter3e1b
+ter5ec
+5terel
+te3reo
+3tere4s4
+1teri
+ter3i1a2
+ter5i2d
+ter5i1f
+t4er3in
+ter5iorit
+ter2i3o2
+teri5or
+terior1i
+t4er3i2t
+ter5k4
+5tern3it
+ter2n2
+tern1i
+ter5no
+3te4r1r4
+2t2es
+4t4es.
+tesi4
+t3esq
+t3ess.
+te4ss
+t5ess2es
+tes4t2
+test3a
+5teste2
+test5er1
+test5in
+te2sti
+test5or
+tes5tu
+teti4
+tet1r2
+tet1r5o
+tew3a2r
+te1wa
+3tex
+2t3f
+t3g
+2th.
+tha4
+th5al.
+thal3m2
+4t4he.
+the2
+4th2ea2
+th5eas
+4th2ed
+1th4ei
+3theo
+theo3l
+t4her1
+5ther2ap
+th5er1c2
+t5h2erd
+4th4e2r4ed
+th2er2e
+th3er2n2
+th3e2r2y
+4t2hi.
+t5hill2
+thi4l
+3th4i4n2k
+th1in
+5th4io2
+th4is.
+th5lo
+t4hl
+2t2h1m2
+th4mi
+th3oli
+4t5h2oo
+4th1o2p1t2
+4thores
+th2or2e
+3th2ot
+5thoug4
+th2o4u2
+1t2h2r
+2t2h1s
+5thu4r
+5thy2m
+th2y
+3thyr4
+th4y2s4
+4ti.
+1t2i2a2
+ti3ab
+2t3ib
+5t4i5bu
+t1ic
+t3ic.
+tic5as
+t2i1c2i2
+tici5a2r
+tic2i1a2
+3t4i3cin
+t4icity
+ti3col
+t2i2c2o2
+t2ic1u
+4ticule
+t3id.
+ti2d
+t4id1a
+3tidi
+ti3die2
+t5i4d1s2
+3t2i2en
+tie2
+1t2i1f2
+ti3fe
+4ti2ff
+4ti4f3ic.
+3t4i1g2i
+t2ig
+ti3g2i5o2
+4ti2g1m4
+5tigu
+ti4ka
+t2ik2
+ti4let
+5til1in
+t4ill2
+til4l5ag
+til1l2a
+t4ilt
+1tim
+tim1a
+5ti1me2t4
+tim2e
+t1in
+5ti5nad
+tin1a
+4t4i2n2ed
+tin3et
+ti4ng5i4ng
+t4in2g2i
+ti4ng
+3t2in1n4
+4ti4n1s2
+t4int
+tin4te
+tin5t4ed
+tint5er1
+tin3ue
+t2in2u
+1t2io2
+ti3oc
+tiol3a
+t4i1ol
+ti5o3mo
+ti2om
+4tionem
+tio2ne
+1t2ip
+ti5plex
+tip2l2
+ti3pli
+t2i4q
+ti5q2ua2
+tiqu4
+t3iris
+t2ir
+tir1i
+2t1is
+3tis1a2n
+ti4sa
+ti2s4c2
+tish5i
+tis2h
+3t2i4s1s
+tis2t2
+5t4iste2
+t4is1tr2
+ti5t4a2n
+tit1a
+tith4e2
+t2ith
+tit5il
+t3i2t1is
+3ti2tl
+ti3tra
+t2itr2
+3t2i1u2
+2t1iv
+tiv5all2
+t2iva
+t3ive
+tiv3is
+2tl
+t1l2a
+tlant4
+tla2n
+5tle1b
+5tle5dr2
+t2l2ed
+3tle1f
+3tlem
+5tlen
+5tletr2
+t1let
+5tlew
+t1li
+tlin4
+4t3m
+t1me2t2
+tm2e
+tm2o4t5
+t1mo
+2t3n2
+t4n2er2e
+tn1er1
+2to.
+toas4
+t2oa2
+to1b
+4toc1c4
+t2oc
+to3de5c
+tod4i
+to5do
+3toe
+1t2o1g
+2t3o2i4d
+t2oi
+5tok
+4to2l2ed
+tol4l2
+tolu5
+to5ly
+to2m3ac
+t2om
+to1ma
+to1ma4n
+tom2at5ol
+to3mat
+toma2to
+to2m4b
+to4m2o1g
+to1mo
+tom5os
+to2n4e
+t4on5ea2
+3ton1n4
+to4n3s2
+top4e
+to5p2i1a2
+top1i
+to4p4os
+to1po
+t1or
+to5r2ad
+tor1a
+4t2or2e
+tor5er1
+tori4as
+tor1i
+tor2i1a2
+to4r5oi
+tor5p
+tor4q
+3tos.
+t4o3s4p
+tos4t2
+to5str2
+to5tal1is
+t2ot
+to5tal1iz
+to3tem
+tot5u
+tou4f2
+to4u2
+5tou4r
+t3ous
+4tov
+to3wa2r
+t3p
+tr2
+tra4c2o2
+4trad1d4
+tr2ad
+4tra5ist2
+tr2ai2
+tra5q
+trar2ch4
+t4rar1c2
+tra2r
+tra5ven
+tr2av
+tra5ve2r1s2
+traver1
+trav5est2
+3tr4ay
+4t4re.
+tr2e
+4t2r4ed
+tre4mo
+tren4
+tr4end5i
+tr2e4nd
+tre5pr2
+tre4s4s
+4trew
+t5r4icl2
+3t2r2icu
+t2rie2
+tri5fli
+tr2i1f
+tr4i2fl2
+t5rifu5g4a
+tri3fu
+2tril
+tri3li
+tri3m2e
+t2rit
+4tr2ix
+t4r2od
+tro5f
+5troo2p
+tr2oo4
+tro4pha2
+tr2op
+tr4o3sp
+t2r2ot
+t5ro1t2o
+tro1v
+3tr2oy
+t4r4uc
+tr2u3i2
+2t4r2y
+tr4y2s4
+4t1s
+t2sc2
+ts4h
+ts2i
+t4sil
+tst4ay4
+tst2
+2t1t4
+tta4
+t3t1ab
+t5ta2n
+t5tas
+t3t4ed
+t4t2er2e4
+tter1
+t5ter3er1
+t5tes4t2
+t2t2es
+t3ti
+tti3tu
+ttitud4
+ttitu5di
+t3t2ler1
+t2tl
+t3t1li
+t5t2oi
+t5t1or
+t3tos
+t4t5s
+t4tu1pe
+tt2up
+t2ty
+4tu.
+t2u1a2
+tu4al5li
+tu1al
+tuall2
+tuar3i4
+tua2r
+tu4bin
+tu1b2i
+tu5bu
+tu5den
+tud4e
+tud5ie2
+tu5en
+4tuf2
+t2u1i2
+tu4is
+2tum.
+3tu1mi
+4tu4m1s
+3tun1
+tu4n4a4
+tu4ne
+tun5it
+tun2i
+tup5let
+t2up
+tup2l2
+tup5lic
+tu5rac
+tu4r
+tur1a
+t4ura2n
+tur2b3a
+tur1b
+tur4d
+turf5i
+tur2f
+5turit
+tur1i
+tur4n2
+5tur5o
+1tut
+4tu2t4iv
+tut2i
+t1w
+t3wa4
+t2wi2
+twi5li
+t3wit
+t3wo
+twon4
+4ty.
+ty4a2
+5ty2ch
+ty4let
+tyle2
+tyl5i
+ty5mi
+1t2yp
+3type
+1tyr1
+2tz2
+t5z2i1a2
+tz1i
+t5z2ie2
+2ua2
+u2a3c2i2
+u2ag
+u2a5h
+u1al
+ua5lu
+uan4o
+ua2n
+uan2t5is
+uant2i
+uant5it
+uar3a
+ua2r
+uar2d
+uar3i
+uari4n
+uar5te2r1s2
+uart2
+uarter1
+uar4t5i
+ua5ter2n2
+u4ater1
+uba4
+ub5b2ly
+u2b1b2
+ub2bl2
+u1b2i
+u4b2icu
+ub3lin
+u2bl2
+ub5lo
+ub3ra
+ubr4
+4uc
+u1c2a
+uc1cen5
+uc1c4
+u4c2e4nd
+u1cen2
+u4ch
+u5c2hr
+uc3l2
+u4c2om
+u1c2o2
+uc2o5t
+uc2tr2
+u2ct
+uc3ub
+uc5ul
+u5cum
+u5d2ac
+ud1al
+ud4e
+ud5e1p
+u4der1
+udev4
+ud4g
+ud4i4cin
+udi1c2i2
+ud3i2ed
+udie2
+u5dinis
+u2d1in
+ud2in1i
+u3d2i3o2
+u5di1t2io2
+u2do
+u5d2oi
+ud5on
+u5d2or
+ue1b4
+u4ed
+uen4o
+uen4ter1
+uen1te
+uer3a
+uer1
+ue4s4s
+uest5rat
+uest4r2
+uest2
+ues5tri
+ue4t
+uf2
+3u1f2a
+u3fl2
+u4fo
+u2ft4
+uga4c
+ug5l2i1f
+u2gl2
+ug2n1i
+u2gn2
+u4go
+ug3ul
+ug3ur1a
+ugu4r
+uhem3
+uhe2
+2ui2
+ui3al
+u2i1a2
+u2ic
+ui3cent5
+u4ice
+ui1cen2
+ui1d5o
+ui2d
+ui2l4a
+uild5er1
+ui3lib
+uil4t
+uin1c5u
+u2inc
+ui4n4s2
+uint4
+uin4ta
+ui5pr2
+u2ip
+uis3er1
+uis4t2
+uisti4
+uit5er1
+ui5val5
+u2iva
+ui3vo
+u2iz
+4ul.
+u1l2a
+u4l1ab
+4ul4ac
+ul5ard
+ula2r
+u5lat
+ul4bo2
+ul3b
+ul3ca
+ul1c2
+ul4ch
+5ulch4e2
+5ulchr2e4
+ul3c2hr
+4ulea2
+u5lee
+u1len4
+4ulen1c2i2
+u5lent
+u1let4
+u2l4ev
+ul2f2a
+ul2i
+ul4i1a2
+u3l4ine
+ul3i4ng
+ul5is2h
+ul1is
+u5liti
+ul1it
+u5lity
+4ull2
+ul4lat
+ul1l2a
+ul4l5ib
+ul1li
+ul4l1is
+ul4l1it
+ul3m2
+u1lo
+u5l2om
+ulph3i
+ulph2
+ul2ph3o
+ulp5i4ng
+ul4po
+2u4ls
+ul3s2i1f4
+u1lu
+ul1v4
+u1ma
+u2m3a2m
+u1ma2r4
+u5mas
+um4bar.
+u2m1b
+umba2r
+um2b2i
+umen4t
+um2e
+u1men
+u1mi
+u4m1ic
+u2m5i1f
+umi4fy
+umi5l2i1a2
+um2il
+umin4a2r
+umin1a
+u4m4i2n2ed
+u4m3i4ng
+u4mor1a
+u1mo
+u4mos
+um2p
+um4pa
+ump3er1
+ump5li
+ump2l2
+um2pt4
+ump5te
+u1mu
+umu4lo
+un1
+u4n3a4
+un5ab
+unabu4
+un4ae
+un4as.
+un2as
+un2ce
+un4dal
+u4nd
+un2da
+un3d2ed
+unde2
+un1de4t
+undeter5m
+undeter2
+un1di4c
+un4die2
+un3do
+un4dus
+un1du
+u3n2er1
+unho5li
+un1h2
+unho4
+un2i
+u1nic
+un4ie2
+un3in
+un4ine
+un2i5p
+uni3s4o
+un3ist2
+un2i1v
+un3iz
+unk5eri
+u4n2k
+unker1
+un5ket
+un3kn2
+2un1n4
+un4nag
+unn1a
+un5o
+un5r
+u4n3s4
+un5s2h2
+un2t2i
+until4
+un2u4
+un3us
+uo3de
+uo3dent4
+u5oros
+u3os
+uo5t4a1t2io2
+u2ot
+u1o4u2
+2up
+u1pat
+u1pe
+u5p4ee
+uper3
+u1ph
+u5pi2d
+up3i4ng
+u4po
+u5pol
+u2pr2
+upr2e4
+u5que4t
+uqu4
+u4r
+ur1a
+4u4ra.
+ur2a4c2i2
+4urae
+ura2g
+4urant2i
+uran2t
+ura2n
+uras5
+urb5i4ng
+ur1b
+urb2i
+ur2bin
+ur2c2
+urc3a
+ur5den.
+ur5den1i
+ur5die2
+ur4du
+ur3ea4
+ur2e
+ur5ee
+ur1er1
+ur3e2r1s2
+ur1e2t
+ur3e2t2t4
+ur2f
+ur3f2a
+ur1i
+u5r2i5cu
+ur4ie.
+urie2
+ur5ifie2
+ur2i1f
+uril4
+ur4ili
+ur5ion
+ur2i3o2
+uri4os.
+ur2l5er1
+ur1le
+ur5lie2
+url5i4ng
+ur1m4
+urn3al
+ur2n2
+urn1a
+urn3er1
+ur4n5s
+ur1o
+ur2o4d
+ur5o4m
+ur5ot
+uroti4
+ur3pen5t
+urpe2
+ur2ph4
+u2r2s2
+ur2s5a2l
+urs5er1
+ur2se
+ur3s2h
+urs3or
+ur5ta
+urt2
+ur1te
+ur5t2es
+urth2
+ur3the2
+urti4
+ur1u
+ur4va
+ur1v2
+u3sad
+us3a4g
+us3a2l
+us4ap
+us3a1t
+2usc2
+us4ca2n
+us1ca
+ush5a2
+us2h
+us5ia2n
+us2i1a2
+usil5
+u4s1in
+usk5er1
+us2k2
+uske2
+us1p
+us4pa
+uss4e
+u4ss
+4ust2
+us3tac
+us5ta2n
+ust4ic
+us5t2i1c2i2
+ust5ig
+ust3il
+us1to4
+us1tr2
+us4tr2e4
+usur4e
+usu4r
+us5ur1i
+u3t4ane
+uta2n
+utch4e2
+u2tc2
+ut2ch
+ut5en1i
+u5te2o
+u4t2er2e4
+uter1
+ut2i
+u3tie2
+ut3i4ng
+ut1in
+u5t2in1i
+u3t2io2
+ut5i2s1m4
+u2t1is
+ut3is2t2
+5u5t1iz
+ut3le
+u2tl
+ut1li4
+ut2o
+u4to5s
+u4t1ra
+utr2
+u4t1s2
+ut5s1m4
+ut4to2n4e
+u2t1t4
+u3tu
+u4tul
+uu4
+uv2
+u4va
+uve2
+uven3
+uv5eri
+uver1
+u5v1in
+ux2o
+uy4a2
+uy5er1
+4va.
+2v3ab
+5vac
+va1c2a
+va5ceo
+vacu1
+v4ad
+3vag3a
+va4ge
+4va2g2e4d
+vager4
+va2g5r2
+v1al.
+1v2ale
+vali2
+va5lie2
+val4ise
+val1is
+5valu
+5val4v
+vam4i
+v2a2m
+va5mo
+5van1n4
+va2n
+van2t2a4
+4van2tl
+var4is
+va2r
+var1i
+4vas2e
+vas5el5
+v5a4so
+v2ast3a
+vast2
+v4at.
+5vatee
+v4at4in1a
+va2t3in
+4v2a2tu
+2ve.
+ve2ct4
+ve3g
+3vei
+2vel
+vel3at
+vel2a
+4v2ele
+v3e2l1er1
+ve5l4ine
+v1ell2
+v4el1l2a
+vel5ler1
+vel3li
+vel5op1i
+ve4n4al
+ven1a
+ven4do
+v2e4nd
+v4e1ne
+ve5n2i1a2
+ven1i
+ven2t5o
+ven4tr2
+4v4en2u
+v5en5ue
+5ve3o
+5ver1b
+ver1
+verde5v
+v2erd
+4v4er2e4
+ver5ea4
+ver3ei4
+v5er3ie2
+ver3m4
+ver4ne
+ver2n2
+5ver2se
+ve2r1s2
+4v4es.
+4vi.
+5vi3al1it
+v2i1a2
+vi4a2tr2
+vi3at
+vi1b4
+vic2
+vi4ca
+vi5car1i
+v2i1ca2r
+vice3r1
+v4ice
+5vi2ct2
+5v2icu
+5vider1
+vi2d
+vi2gn3
+v2ig
+vi4l
+vil3i
+3vil2i4a2
+v5ilise
+vil1is
+v5ilize
+vil1iz
+vil5lin
+vill2
+vil1li
+vim4
+5vim2e
+2v1in
+vin4a2c
+vin1a
+3vin1c2i2
+v2inc
+vin2e
+5vinit
+v2in1i
+v5in1iz
+vint4
+vin5ta
+3v2i1o2
+v4i1ol3
+vi5om
+5v2i3p
+vir2e4
+v2ir
+vi5r2i4d
+vir1i
+vir3u
+5visecti
+v4i1sec
+vise2ct
+5vi1s2io4
+v3i2s1m4
+2v5ist2
+vi2t
+vit2a
+vi3tal
+vi5te2l
+v5it1ie2
+v2it1r2
+vi3tu
+v3ity
+viv5al
+v2iva
+viv5or
+vi2vo
+v2i5zo
+v1iz
+1vo
+2vo.
+vo2l
+vo5li1t2io2
+vol2it
+vol4u1b2i
+v4ol1ub
+volv4
+4von
+vo5rac
+vor1a
+3vor1c2
+4v2or2e
+3voro
+vo3ta2r
+v2ot
+2vow
+vr4
+v5ra4
+v5ri
+v5ro
+vr2ot4
+4vs
+v3ur2e
+vu4r
+2vv2
+v5ver1
+v5vi
+4vy
+4w1ab
+wag3o
+wais4
+w2ai2
+w3al.
+wal2l5er1
+wall2
+w3a4ls
+wan5gli
+wa2n
+wa4ng
+wan2gl2
+wank5er1
+wa4n2k
+war5d2ed
+wa2r
+ward5er1
+ward5r2
+war4f
+war4te
+wart2
+war5th2i
+war2th
+wa4ss4
+was4t2
+wa1te
+wav4in2e
+w2av
+wa2v1in
+w1b4
+w4bon
+wbo2
+w5c
+w5die2
+w3dr2
+we4b
+w4ed
+3we2ed
+5wei
+weight5i
+we2ig2
+wei2gh
+weigh2t
+we2ir4
+wel3i
+wel1iz4
+wel4iz3i2
+wel4li
+well2
+went4
+wes4
+west3
+w5e4st.
+w5f
+wh2
+w5hi2d
+wi2
+wid4e
+wi2d
+wi5er1
+wie2
+wil2l5in
+will2
+wil1li
+wim2p
+win2e
+wing5er1
+w4inge
+wi4ng
+win4tr2
+3w4ise
+with5eri
+w2ith
+wit4her1
+withe2
+w3l2a
+w2l1er1
+wl1i
+wl4ie2
+w1m
+1wo
+wol4
+wol5ver1
+3w2om
+w2on2t
+word5i
+wot2ch4
+w2ot
+wo2tc2
+w2oun4
+wo4u2
+wp5in
+wra4
+ws5i4ng
+w2sin
+w5ster1
+wst2
+wste2
+wt4
+w5te
+w3to
+wy2
+wz4
+x1a
+x4a2ch
+x4ade
+x2ag
+x3a2g1g
+xa5me2t
+x2a2m
+xam2e
+x3am1i
+xa4n5d
+xa2n
+xan1o4
+x2as
+xas5p
+x3c4
+xc2av3
+xcor5
+x1c2o2
+xe4
+x1ec
+xec3r2
+xe5cu3t2io2
+xecut2i
+xecut5o
+x2e2d
+x5e2dl4
+x5e4d1n2
+x5eg
+x1em
+x3en
+xen4op
+xen1o
+x3er1
+xer4g2
+xer3o
+x1h
+xhort4a
+xh2ort2
+x1i
+x3ia.
+x2i1a2
+x4ias
+xi4c
+x5i1ge
+x2ig
+xim3a
+x4im2e
+xi1me2t4
+x3io2
+x2i4p
+x4it.
+x4i4t1s
+x1o
+x4ode
+x5om
+xo4mat
+xo1ma
+xo4n
+x4os
+xotr2op4
+x2ot
+x4o1tr2
+x3p
+xpel4
+xp4o5n2
+x1po
+xp2oun4
+xpo4u2
+x1s2
+x1t2
+x4t4ed
+xtens5o
+xte4n2s
+x1ter3i
+xter1
+xter4m3
+xter2n3
+x4th
+xti4
+xtr2a5d
+xtr2
+xtr2a3v
+xtr2e4
+xu4o
+x1u4r
+xur4b
+x5us
+x5w
+xx4
+x4y2s4
+xy3t
+y1a2
+y5ac
+1y2a2r
+3yard
+yas4i
+4y1b
+yb2i
+yc2a5m
+y5chede2
+y2ch
+y4ch2ed
+yche2
+ych5is
+y3cho
+y4chose
+yc1l2
+ycl2a2m4
+ycl2a
+y4coli
+y1c2o2
+y4coll2
+yc2om4
+y2cos
+y1d4
+yda4
+yder4
+ydro5s
+ydr2
+y4dro4u2
+y3ee
+yel5o
+y3en
+y1er1
+y3e4st.
+yest2
+yes5te2
+y5e2t2t4
+y5f
+y1g
+y1g2i2
+yg2i5a2
+y3gl2
+yg2o4i
+y1h
+y1i
+y3in
+yle2
+ylin5de2
+yl2i4n4d
+yllab5i
+yll2
+yl1l2a
+yll1ab
+yl3os
+yl5o4u2
+y1m2e4
+y3men
+y5me2t
+y5m2i1a2
+ym5in
+ym2ot4
+y1mo
+ym4pha2
+ym1p
+yn1
+yn5ago4
+yn1a
+yna4nd5
+yna2n
+yn5ap4
+yn5ast2
+yn2as
+yn4c2i2
+y4nd4
+yn2e
+yn3er1
+y4ng4
+yn4gol
+yn1go
+yni4c
+yn1i
+y2n4y2
+y1o2
+yo3d
+yo4g4i4s
+y2o1g
+yo3g2i
+y2oun4
+yo4u2
+you4ng5
+2yp
+yp5al
+yper3
+y5p2er2e
+y4p4eri
+y4pero
+y4pet
+y2ph
+yph4e4
+yph3i
+y4p1i
+y2p1n
+y1po1
+y4po4x
+y2pr2
+yp5ri
+yp4si
+y2ps2
+yp5sy5f
+yps2y
+ypt3a
+y2pt2
+y5pu
+y3rag
+yr3at
+yr3ic
+y5r2ig
+yr3is
+yr3i4t
+yr5o1lo
+y4r4r4
+y2r4s2
+yr5u
+4y2s
+ys5a4g
+ys5a1t
+y3s2c2
+y3s2h
+ys1ic
+y2s3in
+y1s2i4o4
+yso5
+ys4so
+y4ss
+ys1t2
+ys4to
+y3u
+yv4
+y3w
+yz5er1
+yzy4
+z1a1
+2za.
+za4bi
+z1ab
+z2a2i2
+z4as
+za4te
+zd4
+ze1b4
+z2e4d
+zen4a
+z5e4ng
+zer5a
+zer1
+z3et4
+z1i
+zib5
+5zic4
+z2ie2
+zi5m
+zin4c3i2
+z2inc
+z3i4ng
+z4in2g5i
+z4is
+3zlem
+z3ler1
+z3li
+4zo.
+5z2oa2
+zo3a2n
+3z2oo2
+zo3ol
+zo3on
+zo5o2p
+zo5oti
+zo2o2t
+zo5p
+z2ot2
+z5s
+5zum
+4zy.
+zz2
+z3za2r
+zz1a1
+z5z4as
+z3z2ie2
+zz1i
+zzo3
+z5z2ot2
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_en_CA.dic b/lib/kotext/kohyphen/hyphdicts/hyph_en_CA.dic
new file mode 100644
index 00000000..c2c5f8e2
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_en_CA.dic
@@ -0,0 +1,11388 @@
+ISO8859-1
+.ab4i
+.1ab
+.ab3ol
+.abo2
+.ace4
+.ace2t3
+.a2ch4
+.ac5t2iva
+.a2ct
+.ac2t1iv
+.ad4d1in
+.ad1d4
+.ad3di
+.ad3e
+.a2d3o
+.4a2e5d
+.aer3i
+.aer1
+.a2f3f
+.a2f3t
+.ag4a
+.4a2g5n2
+.a2ir3
+.2ai2
+.al5im
+.4al1k
+.al3le
+.all2
+.a1m5a2r
+.2a2m
+.ama5te
+.am1at
+.am2i
+.am3pe
+.am2p
+.am3ph
+.a2n1
+.an1a3b
+.an2a
+.an2a3s
+.a4nd2
+.an5da
+.an4el
+.a4n4en
+.an4gl2
+.a4ng
+.an4on.
+.an1o
+.a4n3s
+.an2t3a
+.an3t2i3
+.4ant4ic
+.an4t5o
+.a2n2y5
+.a3ph5or
+.2ap
+.a1pho
+.ap4i
+.ar5ab
+.a2r
+.ar5ap
+.ar4c2i2
+.ar1c2
+.ar5d
+.ar4e
+.ar1i4
+.ar4ise
+.ar4isi
+.ar5sen
+.a2r2s2
+.ar2se
+.ar4t5icl2
+.art2
+.ar1t4ic
+.as1
+.as4q
+.as5s1ib
+.a4ss2
+.at5a2r
+.2a2ta
+.ateli4
+.ate2l
+.at5omi4se
+.a2to
+.at2om
+.atom1i
+.at5om1iz
+.2a2t3r2
+.a2t3t4
+.au3b
+.2au2
+.au3g4u
+.aur4e5
+.au4r
+.aus5
+.authen5
+.au3th
+.authe2
+.2av4
+.av5era
+.aver1
+.bap5ti2s1m4
+.b2a4p1
+.ba2pt2
+.bap2t1is
+.barri5c4
+.ba2r
+.b2a4r1r4
+.bar3ri
+.bas4i
+.1bas
+.ba5sic
+.be3d2i
+.b2e
+.2b2ed
+.be3lo
+.1bel
+.be5r4a
+.ber1
+.be5s1m4
+.be1s2
+.bi4er1
+.b4ie2
+.blaz5o
+.2bl2
+.bl2a
+.b4l2az2
+.bo3lo
+.bo2
+.bo1s5o2m
+.bou4n4d
+.bo4u2
+.b2oun1
+.bov4
+.3bra5ch
+.br4
+.br2e2
+.burn5i
+.bu4r
+.bur2n2
+.ca3de
+.ca4gin
+.ca1g2i
+.cam5i
+.c2a2m
+.ca1m3o
+.ca2n1
+.can5t2a
+.ca5p2itu
+.1c2ap
+.cap1i
+.car4i
+.1ca2r
+.cas5u1al
+.3cas1u3
+.cas2ua2
+.ca4ti
+.c1at
+.cen5so
+.1cen2
+.ce4n2s
+.cen5ten1a
+.3cent
+.cen1te
+.cen4t5ri
+.cen1tr2
+.cer4i
+.cer1
+.2ch4
+.cit4a
+.1c2i2
+.cle1m5e4
+.cl2
+.c2le2
+.clima5to
+.cli1m
+.co5i4t
+.1c2o2
+.c2oi
+.co3pa
+.cop5ro
+.co1pr2
+.c4o3r1u
+.co3si
+.co5ter1
+.c2ot
+.coty3le5
+.5coty
+.cri5t2i1c2i2
+.cr2
+.crit1ic
+.cust2om5
+.1cus
+.c4ust2
+.cus1to4
+.3d2av5
+.dea5c2o2
+.dea2
+.de5lec
+.d2ele
+.del5eg
+.de3li
+.de3l2i5r
+.1d4e1m
+.de5nit
+.den1i
+.de3n1o
+.der2
+.de3ra
+.de5re4s
+.d4er2e
+.1de3ri
+.de5sc2r2ib
+.5de2sc2
+.descr2
+.de5ser1v2
+.deser1
+.de5signe
+.des4i
+.des2i4g
+.desi2gn2
+.de5s2ir
+.de5s1is2
+.de5sp2oi
+.des1p
+.des2po
+.determ5i
+.1de1t
+.deter2
+.de3ve
+.de4w
+.di4al.
+.1d2i1a2
+.dia3s
+.di4at
+.din4a
+.2d1in
+.di2o5c
+.3d2i1o2
+.1do2
+.do4e
+.domest5
+.d2om
+.dom2e
+.do2me2s
+.du4al.
+.1du
+.d2ua2
+.du1al
+.3d4u4c
+.d4y2s3
+.2d2y
+.eas4t5
+.ea2
+.ech1in5
+.ech3i
+.e2ch
+.e1c2o3
+.e2c3t
+.e1d5em
+.2ed
+.ede2
+.ed4it.
+.ed1it
+.ed4iti
+.eg4
+.ei3d4
+.e2i5r
+.e2l3ev3
+.2ele
+.el2i
+.elu5s4
+.e1lu
+.e2m3b
+.em5in
+.em1p4
+.em5p4y
+.en1
+.en5c
+.en4d2ed
+.2e4nd
+.ende2
+.e4n3s
+.ent2
+.en5ta
+.eo1s5
+.epi1
+.epi3d
+.er2a
+.er1
+.er5em5
+.2er2e
+.er4i4
+.er4o2
+.eros4
+.er2ot3
+.er4ri
+.e4r1r4
+.es1
+.esc1al5
+.e2sc2
+.es1ca
+.es3p
+.es3t2
+.eter2n5
+.eter2
+.eth3e2
+.e2th1
+.eu1
+.eu4r4
+.eval3
+.evol5ut
+.e1vo
+.evo2l
+.ew4
+.ex1
+.ex3a
+.eye3
+.fal4le
+.1f2a
+.fall2
+.far4i
+.5fa2r
+.fec5un2da
+.3fec
+.fecun1
+.fecu4nd
+.f2e4n4d
+.feo2ff5
+.feof2
+.fi2
+.fi5l2i1a2
+.1fi2l
+.fil5tr2
+.fi1n5e4ss
+.2fin
+.fin2e
+.fine4s
+.f1i4n3g
+.fi5n4it
+.f2in1i
+.fi2s4c5
+.3f2o3c
+.1fo
+.fran5ch
+.1fr2
+.fra2n
+.fu5g4a
+.3fu
+.g2a4m
+.ga1m5e2t
+.gam2e
+.gen4et
+.3gen
+.g4ene
+.ge5neti
+.gen5i1a2
+.gen1i
+.ge3ro
+.ger1
+.glor5i3o2
+.2gl2
+.3glo
+.glor1i
+.gnost4
+.2gn2
+.g2no
+.gno4s
+.go3no
+.3gos3
+.h1ab2
+.ha2
+.ha5bili
+.hab1il
+.hama5
+.h2a4m
+.han4de2
+.ha2n
+.ha4nd
+.hast5i
+.hast2
+.h4e4i
+.he2
+.hem5a
+.hi2
+.hi3b
+.ho2l
+.ho5rol
+.hov3
+.hy3lo
+.h2y
+.hy2l
+.ico3s
+.2i2c2o2
+.idi2
+.i2d
+.2ig3
+.i2g1n2
+.il4i
+.i2m5b
+.in1
+.2i4n3d
+.in3e2
+.2in2i
+.2in3o
+.in3t
+.inve2st5i
+.in3v2
+.inve2
+.invest2
+.i4r3r4
+.2ir
+.i2s4c2
+.is4li
+.i2s1l4
+.is4o
+.i1s2o5m
+.ka5ro
+.ka2r
+.ki4e2
+.kin3e
+.k1in
+.lab4o2
+.l2a
+.l1ab
+.la4m2e
+.l2a2m
+.lam5enta
+.la3men
+.lan5i
+.la2n
+.lash4e2
+.l4as
+.las2h
+.le4m
+.len5t2i
+.le2p
+.le1p5r2
+.les5son
+.3le4s4s
+.les2so
+.le5va2n
+.2lev
+.l3eva
+.libra2r5
+.lib1r4
+.lig3a
+.1l2ig
+.l2i3o2
+.li4o4n1s2
+.l2i4p
+.loc3a
+.1l2oc
+.lo4g2i1a2
+.1l2o1g
+.lo3g2i
+.lo2p
+.loph3
+.lous5i
+.lo4u2
+.lov5er1
+.lub3
+.ly1o3
+.2ly
+.mac5u
+.mal5ad5
+.mal2a
+.ma5l1in
+.mar5ti
+.1ma2r
+.mart2
+.m4a2th5
+.me5lo3d2i1o2
+.m2e
+.melo4di
+.ment4
+.1men
+.men5ta
+.me5r2i2d
+.mer1
+.me5r3in
+.met4er2
+.1me2t
+.met1e
+.mi4e2
+.mi3gr2
+.m2ig
+.min5ue
+.m2in2u
+.mir2k4
+.m2ir
+.mis1
+.mi5to
+.mi2t
+.mo3b2i
+.1mo
+.mo5le2c4
+.mon3a4
+.m4on
+.mor5ti
+.m2ort2
+.mu3n2i
+.mun1
+.mu3si
+.mus2i5c2o2
+.myth3
+.2my
+.3myt
+.n2a5k2
+.n1a
+.nar1i4
+.na2r
+.nast4
+.n2as
+.nas5ti
+.ne2c3t
+.ni4c
+.n1i
+.ni5tro
+.n2itr2
+.n2o4c
+.no2m3o
+.n2om
+.nos3t2
+.no5t1ic
+.n2ot
+.nuc2le5
+.n2u
+.5n4uc
+.nuc3l2
+.o2b2ed5
+.ob2e
+.o1b3e4l
+.o2b3l2
+.od4
+.o2e4d5
+.oe5so
+.o2f5t
+.2oi4
+.ol4d
+.om2e2
+.2om
+.om5el
+.on4ce
+.on1c
+.o2n4e
+.op2i
+.op2t5a
+.1o2p1t2
+.or1
+.or4at4
+.or1a
+.ora5tor1i
+.orat1or5
+.ora2to
+.or5che2
+.or4ch
+.or1c2
+.or3d
+.2or2e4
+.or3eo
+.or4i
+.orn1er4
+.or2n2
+.or2o
+.os1
+.osi4
+.4oth5
+.2ot
+.out1
+.o4u2
+.ov4
+.pal5i
+.para5di4s1
+.1pa2r
+.par2ad
+.par5af
+.par1a5t
+.p2a5ta
+.pa4t2io2
+.pe2c3t4
+.pecu3
+.3ped3e2
+.2p2ed
+.p2e4nd4
+.pen5de2
+.pe2p3t2
+.per3i5n
+.p4eri
+.per1
+.per3se5c
+.pe2r1s2
+.per2se
+.pe5titi
+.3pet
+.pe2ti
+.ph2
+.phe5n2o2m
+.phe4
+.phen1o
+.phon4i
+.1pho
+.ph2o4n
+.p2i2e2
+.pi3l3a
+.p2il
+.plast4
+.p2l2
+.1pl2a
+.pl4as
+.plic4
+.plica4
+.plos4
+.po3l2a
+.1po
+.po5lite
+.pol2it
+.po2p
+.p4op5l2
+.po5si1t2io2
+.3p4os
+.pos1it
+.pos5si
+.po4s1s2
+.pro5bat
+.1pr2
+.pr4oba
+.pu4r4r4
+.pu4r
+.put4te
+.pu2t1t4
+.ra5cem
+.ran5g2i
+.ra2n
+.ra4ng
+.re3c2a
+.r2e
+.r2ef5er2e
+.re2fe
+.re1f
+.refer1
+.re5ga2r
+.re1i4
+.re5lin
+.re1m
+.re5o
+.res5c2i2
+.re2sc2
+.re5sen
+.re5s2po
+.re5stat
+.rest2
+.r2e5s4t2or2e
+.rest1or
+.re5st4r2
+.re3t2a
+.re5u
+.re3w
+.rib5a
+.2r2ib
+.rin4
+.rit2
+.rol4l2a
+.roll2
+.r4os3a
+.sa2
+.sac5r2
+.sal4i
+.sa2l
+.sa5l1in
+.salt5er1
+.s4al4t
+.sal1te
+.sanc5
+.sa2n
+.s4ap5a
+.s3ap
+.sa3vo
+.s2av
+.sci3e2
+.sc2
+.s1c2i2
+.sea3s4
+.se2a2
+.se2ct4
+.sec5to
+.se3gr2
+.sen3t
+.se1q
+.ser4ie2
+.ser1
+.s2es1
+.sev5era
+.3sev
+.sever1
+.s2h2
+.si5g2no
+.s2i4g
+.si2gn2
+.s1is3
+.st4
+.sta2t4o
+.stra5to
+.str2
+.str4in2g5i
+.stri4ng
+.su5d4a
+.sulph5a2
+.1s2ul
+.sulph2
+.sul3t
+.tact4i
+.ta2ct
+.tac5t2ic
+.t2a4m
+.ta1ma2r5
+.tar5o
+.ta2r
+.te2ct4
+.tel5a
+.te2l
+.tell5e
+.1tell2
+.te4m
+.te5ra5t
+.ter1
+.ter4p
+.th4
+.tho4
+.thol4
+.ti2
+.til4
+.t2i5n1i
+.t1in
+.t3i2t4is
+.t1or1
+.tran4c
+.tr2
+.tra2n
+.tri5bal
+.t2r2ib
+.tri3d
+.trin4a
+.t4ri5sti
+.trist2
+.tro4ph
+.tr2op
+.tro1ph5o
+.tro4v
+.tula2r5
+.tu1l2a
+.tur1b4
+.tu4r
+.tur1i4
+.tu5te
+.1tut
+.tu3t2o
+.4ul4l2
+.ulti5mat
+.ultim4a
+.ul1tim
+.un5ce
+.un1
+.un5ch
+.u4n3d2
+.under5
+.unde2
+.un3e
+.u4n3g
+.u1ni3c
+.un2i
+.un2i3o2
+.u4n3k4
+.u4n5s4
+.un3t4
+.un5u4
+.2up1
+.up3l2
+.ur1a4
+.u4r
+.ur5e2th1
+.ur1e2t
+.ur2e
+.ur4o
+.va5l2ed
+.1v2ale
+.ve2
+.vec5
+.ve5lo
+.2vel
+.vent5il
+.vent2i
+.v5er4ie2
+.ver1
+.ver3n2
+.vic5to
+.vic2
+.5vi2ct2
+.vi2s
+.vis3i
+.vi5so
+.v2o1c
+.1vo
+.vo5lut
+.vo2l
+.wine5s
+.wi2
+.win2e
+.xy3l
+.za5r
+.z1a1
+a4a
+1ab
+2ab.
+2aba
+ab5ar2e
+aba2r
+ab4ay4
+2a2b1b2
+ab5ber1
+abb2e
+2ab2e4
+ab3erd
+aber1
+a5b3e4r1r4
+a3bet
+ab1ic
+a3b4ie2
+2abin
+4a1b2i2o2
+abi5on
+ab3it1a
+ab4itu
+ab3l2a
+a2bl2
+abli4
+4abolic
+abo2
+abol3i
+ab3om
+ab3ota
+ab2ot
+3about
+abo4u2
+ab1r4
+2abs.
+a4b1s2
+ab1ul
+abu4lo
+ab3use
+ab3usi
+2a2by
+ac2a
+ac5a2bl2
+ac1ab
+ac3al
+5ac1anth2
+aca2n
+ac5ard
+a1ca2r
+a5c1at
+ach5al
+a2ch
+acha2
+a5ch2in1i
+ach1in
+ach5i2s1m4
+achro4
+a3c2hr
+ach5u4r4
+2a1c2i2
+a4cic
+aci4e2r1s2
+aci3er1
+acie2
+ac2i3f4
+4acit
+ack5a
+ack1
+ac3li
+acl2
+4a4co.
+a1c2o2
+aco3d
+ac5on1r
+acon1
+4acos
+4aco4u2
+ac1r2
+ac3r2y2
+act5ate
+a2ct
+ac2ta
+act5ile
+ac2to
+act5o2r2y
+act1or
+ac2t5r2
+ac5uat
+ac2ua2
+a5d2ai2
+a3d2a3v
+4adee
+ad5en1i
+ad4ha2
+a4d1h
+ad3ica
+a5d2i1f
+4adil4
+adi4op
+a3d2i1o2
+ad2i4p
+adis4i
+adi4s1
+a3diti
+3adju
+ad1j
+5admi2t
+a2d1m
+a2do
+4adoe
+4ad2oi
+ad3ol
+a3d4os
+ad1ow
+ad1r2
+a3dr2a2m4
+4a2du
+ad3u1l2a
+ad3um
+4a2d2y
+ae5a2
+ae4cit
+ae1c2i2
+ae1c2o3
+4a2ed
+aed5i4s1
+ae5g
+ae3on
+ae5p
+aero2d2y5
+aer1
+aer2od
+ae4s
+ae5si
+aes3t2
+aet4a
+ae2th4
+aet4or.
+aet1or
+aev3a
+4af.
+4afe
+af5ta
+a2ft
+a4fu
+ag4ar1i
+aga2r
+4ageri
+ager1
+a5ghe2
+a2gh
+a5g2i1a2
+a1g2i
+agi4as
+4ag2ino
+4a2gl2
+agli4
+4a2g1n2
+ag3on1i
+agor4a
+ag5ot
+a2gr2
+ag3ri
+a3gru5
+2ah
+a1h2a2
+aha2r2
+aha5r1a
+a1he2
+a2h4n2
+a5h2oo
+2ai2
+4ai.
+a2i3a2
+a1ic
+aid4a
+ai2d
+aid5er1
+a2ig2
+ai5gu
+ai2l3er1
+ail3o
+aim5er1
+aim2e
+ain5de2r3s2
+a2i4nd
+ainde2
+ainder1
+a4i5nea2
+a3ing.
+ai4ng
+a2in3i
+a2in5o
+aint5er1
+ain1te
+air5a
+a2ir
+air5p
+ai2r3s2
+ais1i
+a5i2s1m4
+2a1j
+a4ju
+2ak
+akel4
+ak5u
+al5a2bl2
+al2a
+al1ab
+ala2ct4
+al4ac
+a1l4ae
+al5ais
+al2ai2
+ala3ma
+al2a2m
+al5ance
+ala2n
+al3at
+a5l2av
+al2c3at
+al1c2
+al3ch
+ald5ri
+aldr2
+2ale
+a3lec
+aleg4
+ale5ma
+al5end4e2
+al2e4nd
+a1leo
+a2let
+al3ib1r4
+ali4c2i2
+al5i4c5s4
+al1i2d
+al3i1f
+5a1l2ig
+al1in
+a5l2in1i
+al2in5o
+al5ipe
+al2ip
+al5ip2ot
+ali3po
+4alis.
+al1is
+4al2i1u2
+4alk
+alk5ie2
+al4l1ab
+all2
+al1l2a
+al4lag
+alli5a2n
+al1li
+all2i1a2
+al1l2ig4
+al4lis2h
+all1is
+a5loe
+al3o1gr2
+a1l2o1g
+a3l2om
+a3l2oo
+al1or
+al4orim
+alor1i
+alos4
+a4lo4u2
+al3ous
+a5low
+al5pen
+al3ph2
+al5tati
+al3tie2
+alu3b
+al5u4ed
+a4lue
+al3ues
+a5lumn2i1a2
+alu4m1n2
+alumn1i
+al1va
+al5ver1
+alv5u
+2a2ly4
+a5lyn1
+2a2m
+a5mad
+ama4g
+ama4n5d
+a1ma2n
+a5marin4e
+a1ma2r
+amar1i
+a3mas.
+am1at
+a5m4at1i2c
+am5a2tu
+am4bin
+a2m1b
+amb2i
+3ambu
+am5elo
+am2e
+a3men
+am2e4n4d
+am3era
+amer1
+am5erl
+am1i
+am1i2c
+am5ica
+am2i1c5r2
+3ami2d
+a3mili
+am2il
+am5i2ly
+amin2i4f
+am2in1i
+am5in1iz
+am4inos4
+am2ino
+a5m2is.
+a4mium.
+a3m2i1u2
+ami3um
+a3m4on
+a1mo
+amor5a
+am2ort3
+am5ose
+am2p
+am5p4er3i
+amper1
+amph2i5g
+amp3li
+amp2l2
+ampo5l
+am3po
+am3ul
+amyl5
+a2my
+a2n
+an2a
+a5nadi4
+an3ae
+an3age
+an2a5k2
+an3ali
+an3ar1c2
+ana2r
+a5nast2
+an2as
+an4con1
+an1c2o2
+an3d4at
+a4nd
+an2da
+and5au2
+and5eer1
+ande2
+an5de4l
+an5d2i1f
+and5ist2
+andi4s1
+an5dit
+an4don1i
+an1do
+an4ea2
+an5eer1
+an3ell2
+anel5li
+an3eu
+a2n3ga2n
+a4ng
+ang2a
+angov4
+an1go
+an4gu4r
+an1gu
+4an1h2
+an3ic
+an1i
+an2i3f
+an5i3fo
+4an2i2g
+an5ion
+an2io2
+anis5te2
+anist2
+4anity
+4an2i1u2
+an5no
+an1n4
+4an2ny2
+an1o
+an2oe
+an3o1ma
+an2om
+anor3
+an2os
+an5ot
+a4n2s
+an3s2c2
+an4s2c2o2
+ans3il
+an2si
+an4su4r
+an3su
+an2t2a
+ant5a2bl2
+an2t1ab
+an3t1al
+an5t2a2m
+an2te
+1anth2
+an4thi
+3an1t2h2r
+4ant1ic
+ant2i
+an4tie2
+an4t3i4ng
+ant1in
+an2t4iv
+an4to2n4e
+an1t2o
+an1t4r2
+an4tus
+an1tu
+an5tym
+an2ty
+an3ul
+an2u
+an3um.
+an5u4m1s
+a3nu4r
+a5nut
+a2n2y2
+an5y1a2
+a5ny1i
+2ao
+aol3i
+5aow
+2ap
+4ap.
+4apa
+a1pac
+ap3al
+ap5aro
+a1pa2r
+ape5li
+a5peu
+aph5em
+aphe4
+aph3i
+aph5ol
+a1pho
+a3phy2l3
+aph2y
+ap1i
+ap5icu
+ap3in
+ap4in4e
+a5p2ir
+a3pla2n
+ap2l2
+a1pl2a
+ap5li
+apo5str2
+a1po
+a3p4os
+apost2
+ap4o3th
+ap2ot
+a2pr2
+ap5ron
+4a2ps2
+apt5at
+a2pt2
+apu5la2r
+apu1l2a
+a5p4un1
+a4q
+a5q2ui2
+aqu4
+a2r
+4arabi
+ar1ab
+ar2a5bo2
+aract4i
+ara2ct
+ara2g
+ar3age
+ar4a2g2e4d
+ar5a1g2i
+ar3ago
+a3r2a1j
+ar3all2
+ar2a3m
+ara4n4g
+ara2n
+aran5te
+aran2t
+ar5apa
+ar2ap
+ar1at
+a3r2au2
+ar2a3v
+ar3ba
+ar1b
+arb5et
+ar2b2e
+ar4b2i2d
+arb2i
+ar4bl2
+arb3li
+ar4bul
+ar5chet1
+ar1c2
+ar2ch
+arche2
+ar1ch5o
+ar5din1a
+ar2d2in
+ar4do2ne
+ar1do
+ar3en
+ar2e
+ar2e4n5d
+ar5e2t2t4
+ar3e1v5
+ar5gh
+ar1g2
+ar3gu
+ar3h2
+ar1i
+ar5i2ff
+ar2i1f
+ar4ill2
+a5r4i5net
+arin4e
+ar5in1i
+a5rishi
+aris2h
+arm3er1
+arm2e
+ar5mi2t
+ar3nal
+ar2n2
+arn1a
+ar3nis
+arn1i
+ar3od
+ar5o2i4d3
+a4r2oi
+aro4mas
+ar2om
+aro1ma
+aro4n
+a5roti
+ar2ot
+a5ro4uc
+aro4u2
+a4r3o4x
+arp5e2r1s2
+arpe2
+arper1
+ar4pu
+2a4r1r4
+ar2rh2
+a2r2s2
+ar2s5a2l
+ar3so
+art5at
+art2
+ar2th
+arth4e2
+ar1t2h3r
+ar5t1iz
+2aru
+ar3um
+ar5un4
+a3ry1o2
+a2r2y
+a5ry2t
+ar5z
+as1a
+as4af
+asa2n2
+2asc2
+as5con1
+as2c2o2
+as5c2ot
+as2cr2
+as2e
+as3e2ct
+4a2s2ed
+ase2p4
+ash5ay
+as2h
+asha2
+ash5i4l
+as5i2ly
+a2s3in
+a5s2io4
+a3s1it
+a4s5iv
+ask5er1
+as2k2
+aske2
+aski4
+as4l2a
+a2sl4
+as4lo
+2aso
+as5o2ch
+as2oc
+a4s4o2n2ed
+as4o2ne
+as5or
+as3ph2
+a4ss2
+assa5g2i
+as1sa
+assa4g
+ass5i2bl2
+as4s1ib
+as4sil
+as3s2it5
+2asta
+ast2
+as4tat
+as4t2i3a2
+as3t1is
+as4tit
+4asto2
+as3tra
+astr2
+as4tri
+as1u
+as4un1
+as5u4r
+2a2ta
+4atabi
+a2t1ab
+a5tal1is
+at2a2m4
+at2a3p
+atar3a
+ata2r
+ata3s
+ata3t4
+at3e2au3
+atea2
+at3e2ch
+at5eer1
+a5tel.
+ate2l
+at2e5le
+at5enat
+aten1a
+at3ent
+4ater1
+at3era
+at5er1n3is
+ater2n2
+atern1i
+at5ern3iz
+4ate4ss
+a2t2es
+at5et
+4a2th
+ath3a4
+a3then
+athe2
+ath5er3in
+at4her1
+ath5ero
+ath5ete
+athet1
+ath3i
+ath3od
+a5th2o4n
+a1t2h5r
+4a3t2i2a2
+at1i2c
+at5icis
+at2i1c2i2
+ati5cit
+at5ic1iz
+a2t2i1f2
+a4t1i4l
+a4tim
+a2t3in
+4atin1a
+at5i4ng
+4at4is.
+a2t1is
+at1it
+atit3u
+atitud5i
+4a3t2i1u2
+at4ivi
+a2t1iv
+a5tiv1iz
+a2to
+5at5od
+4a1t2o1g
+2atol
+4aton
+a3t2oo
+a4to2ps2
+a5t4oria2n
+at1or
+ator1i
+ator2i1a2
+a4to2r2y
+atos4
+a5t2oz
+2a2tr2
+at3ra
+a4tr2e
+5at5re4s4s
+at1ri
+a3t2r2ic5u
+at3ron
+at5ro4u2
+at4tag
+a2t1t4
+atta4
+2a2tu
+at1ul
+atu4m
+at3ur1a
+atu4r
+at3ur1g2
+4a2ty
+2au2
+4au.
+au1b5i
+4a4uc
+au5cer1
+au1c3o2
+au4d5er1
+aud4e
+audic4
+aul3i
+aul4t
+aul5t4ed
+aul1te
+ault5er1
+ault5i
+au3ma
+aun2
+aun5ch4ie2
+aun2ch
+au4n3d
+aun4dr2e
+aundr2
+au5reo
+au4r
+aur2e
+aur4o
+au5ror
+4aus.
+aus5er1
+aus5p
+au4s4t4ed
+a4ust2
+auste2
+aut3a2r
+aut3er1
+au3th
+2av
+a2v4ab
+ava4g
+av3a4ge
+ava5l2a
+av5alr4
+av5ant
+ava2n
+av5a2r
+avas3
+av3e4nd
+av3er2n2
+aver1
+av3ig
+av4i1ol4
+a3v2i1o2
+av1is
+aw5er.
+awer1
+aw5e2r1s2
+aw1i2
+aw5n2ie2
+awn1i
+aw5y2
+a4x
+ax2i2d
+ax1i
+4ay
+ay5l2a
+ay3m
+ayn4
+a4y2s2
+ay5si
+ay5sta
+ays1t2
+ayth4
+2az2
+az3a2r
+az1a1
+aze4
+az5ee
+azy1g4
+azz4l
+azz2
+2ba.
+ba5b2ir4
+b1ab
+3back1
+baen4
+bag4a
+5b2ah
+b2a4i2
+bal3a
+balm5i
+balm2
+ba5lon
+bal5u
+bam4a
+b2a2m
+ban4a
+ba2n
+ba5na2n
+b4ane
+5ba4ng
+b4aniti
+ban1i
+b4a4n2s
+b2a4p1
+5bar1b
+ba2r
+bar4d
+bardi4
+bar4n2
+ba5r2om
+bar3o4n
+5ba2r2s2
+1bas
+bas4te2
+bast2
+b4a4th4
+3bat1i2c
+ba5t2io2
+b4at5on
+ba2to
+battle5
+ba2t1t4
+bat2tl
+2b1b2
+b4b2a2ta
+b3bli
+b2bl2
+b4bo2n4e
+bbo2
+b3bon
+b1c2
+bcord4
+b1c2o2
+2b1d
+bdeac5
+bdea2
+bde4b
+b1di4v2
+b2e
+4be.
+3bea2
+4beas
+be3c2a
+3becu
+2b2ed
+be3da
+bed5el
+bede2
+bed2i
+be4do
+be5dra
+bedr2
+be4du
+5bee
+3be1f
+be3go
+be5gr2
+be3gu
+1bel
+be3l2a
+2b2ele
+be3l1it
+bel4t
+be3m
+b2e4n4d
+ben2d5a
+bend5er1
+bende2
+b4e1ne
+be5n2i2g
+ben1i
+b4e5n2u
+4beo
+be3q
+2b2er2e
+ber1
+berg2a5m
+ber1g2
+berl4
+5be4r1r4
+be2r5s2
+b5er2t1in
+bert2
+be1s2
+2b4es.
+be3sl4
+be3tr2
+be3w
+2b1f
+b1f2a4
+4b1h
+b4ha2
+2bi.
+1b2i1a2
+bi4b1
+bi1cen5
+b4ice
+3b2i2d
+bid5i
+b4ie2
+bi4e2r1s2
+bi1er1
+b2i1f4
+bi4fid.
+bifi4d
+bi5ga
+b2ig
+bigu3
+b1il
+b2ile
+5biles
+3b2ill2
+4bim
+bi1me2t5
+bim2e
+5bin1a
+5b2i4n4d
+bind3e2
+bin5et
+b2in5i4
+1b2i2o2
+b4i1o3l
+bi2o5m
+bi3o4u2
+b2ip4
+b2i5q
+b2ir4
+bi3r2e4
+bi5rus
+b2is
+5bi2s1m4
+bis4o
+bi5s2ul5
+3bit2u1a2
+4bity
+bi5ve
+b1j
+4b5k4
+2bl2
+5bl4ac
+bl2a
+blag4
+b3la2n
+5blast2
+bl4as
+bl2a5tu
+blem5at
+3b2ler1
+5blesp
+4b3l2ik2
+blim3a
+bl2i3o2
+bl2i2q
+b3l1is
+4b2ly
+2b1m
+bment4
+bm2e
+b1men
+bmi4
+4b1n
+bo2
+4bo.
+3b2oa2
+bo5a2m
+5bob
+bod5i
+bo5h2
+2bo2i4d
+b2oi
+4boke
+bol4e
+4bo2l2ed
+bol3i
+bol4t
+3bon
+bon4c
+bo2n4e
+bon4ie2
+bon1i
+bon3i4f
+bon4sp
+bo4n1s2
+1b2oo
+b3orat
+bor1a
+bor3d
+bor5ee
+b2or2e
+bor5et
+3bor1i
+bor5ic
+bor5i3o2
+bor4n2
+bot3a2n
+b2ot
+5boti
+boun5t2i
+bo4u2
+b2oun1
+3bou4r
+bous4
+bow2
+bow3s4
+4boxy
+bo4x
+5b2oy
+br4
+3bra2ch
+4bral
+br2a2m4
+b2ra2n
+bra4n4d
+4b4re.
+br2e
+b4reas
+brea4
+4b2res
+brev5et
+bre1v
+b2ri2d
+5brie1f
+brie2
+bri4ng5
+bri4os
+br2i3o2
+b5rist2
+b4r2oa2
+bro4ma
+br2om
+bros4
+brum4
+4bry.
+b2r2y
+4b1s2
+b3sc2
+bscon4
+bs2c2o2
+bsen4
+bserv5a2n
+bser1
+bser1v2
+b5si
+b2sin4
+bso2
+bsol3e
+bs2ol
+bso3lu
+b4stac
+bst2
+bstu1pe5
+bs1tu
+bst2up
+2b1t
+b5t1let
+b2tl
+4bu.
+5bub
+buf5fer1
+buf2
+bu2ff
+buf1fe
+b4ul2i
+b4ulos
+bu1lo
+bun2
+bu4n4a4
+b5u5nat
+bunt4
+bur3e
+bu4r
+bur4ri
+bu4r1r4
+busi4e2
+bu4ss2
+bus5si
+3b4ust2
+bu5ta2r
+b3ute
+b5ut1in
+but2i
+3bu3t2io2
+bu2t4iv
+b5ut5o
+b1v
+4b3w
+2by
+4by.
+3by1i
+b4y2s4
+5byt
+2ca.
+c2ab5in
+c1ab
+c4ace
+ca1c2o3
+cad4r2
+5caf
+ca3go
+5c2ai2
+5c2ak
+c1al
+c4al2a
+ca5la1ma2n
+cala3ma
+cal2a2m
+cal5a2r
+3cal1c2
+ca5le1f
+c2ale
+cal2l5in
+call2
+cal1li
+cal4m2
+c2a3ly4
+ca3ma
+c2a2m
+cam4i
+ca5na2r
+ca2n
+can2a
+c2an4e
+c4an1o
+ca3n2oe
+can5ta2r
+can2t2a
+can5t4ed
+can2te
+c4an4t1ic
+cant2i
+can4t4r2
+5c2ao
+1c2ap
+ca5p2il
+cap1i
+ca2pt4
+cap3ti
+cap3u
+1ca2r
+ca3ra5c
+car5am2e
+car2a3m
+ca3ree
+car2e
+ca3r4i3c
+car1i
+car3i1f
+car5m
+car3n1i
+car2n2
+car3ol
+car5o4n
+car5oo4
+ca3ro4u2
+car4v2
+cas2e5
+cashi4
+cas2h
+3ca4s3s2
+cas5t2ig
+cast2
+3cas1u3
+c1at
+c4at.
+c2a2tc2
+c4at2om
+ca2to
+c2a3t2r2
+c4a4t1s
+c2a2t4u
+3c2au2
+caulk4i
+cav3i4l
+c2av
+3c4ay
+c1c4
+ccen1t5r2
+c1cen2
+c3cent
+cces4sa
+c5ce4ss
+c3ch
+cci3d4
+c1c2i2
+cc2ip4
+cc2le3
+ccl2
+4ce.
+4c4e1ab
+cea2
+cea2n3
+3ceas
+ce4c2i2
+2c2ed
+5ceda
+ce3da2r
+3cede2
+3cedi
+4ce1f
+ce5g
+3ce2iv
+cel3ai2
+cel2a
+cel5ib5
+5cell2
+cel5lin
+cel1li
+celo4
+ce5l2om
+4ce2ly
+2cem
+ce4me2t
+ce1m2e4
+3cemi
+ce4mo
+1cen2
+5cenc
+cen5c2i2
+cen5d2ed
+c2e4nd
+cende2
+cend5en
+cend5er1
+cen3i
+2cen1n4
+3cent
+cent4a
+cen5t4ed
+cen1te
+cen5ter.
+center1
+cen5te2r1s2
+cen5t2es
+1cep
+cept3a
+ce2pt2
+cep5t4ic
+3cera
+cer1
+cer4b2i
+cer1b
+3c2erd
+ce3rem
+c2er2e
+5cer2n2
+5ce4ss
+cest5o
+cest2
+ces5t4r2
+ce2t
+cew4
+2ch
+4ch.
+4ch1ab
+cha2
+3chae
+3ch2ai2
+cham5per1
+ch2a4m
+cham2p
+chan5g2i
+cha4n2g
+cha2n
+ch4a3pa
+ch2ap
+chec4
+che2
+4ch2ed
+3chee
+3chem
+che3o2l
+ch1er1
+ch4eri
+5cher3in
+ch4erl
+4ches
+3chete
+chet1
+ch5eu2
+che5va
+che4v4
+3chew
+ch5ex
+5c2hi.
+3ch2i1a2
+3ch2i2c2o2
+ch1ic
+ch3i2ly
+chi4l
+ch4in.
+ch1in
+ch3in1n4
+3ch2io2
+5ch2i2p
+ch2izz4
+ch1iz
+ch5k
+5chlor
+c4hl
+4c2h1m
+1cho
+ch2o3a2
+5ch2oc
+4ch2oi
+ch5o2i4d
+3chor
+4cho2r4ed
+ch2or2e
+chor5ol
+4choso
+3ch2ot
+4choti
+ch5ous
+ch2o4u2
+chow5
+3c2hr
+chu4r4
+3chut
+5chy1d4
+ch2y
+3chy2l
+3chy2m
+1c2i2
+4ci.
+4ciac
+c2i1a2
+ci2a4m
+ci3ca
+4ci4d1s2
+ci2d
+4cie.
+cie2
+ci3er1
+ci3es2t2
+c2i5et
+c2i3f
+cifi4
+4c2ig
+ci3ga
+c3iga2r5
+3cil
+cil5lin
+cill2
+cil1li
+2cim
+cim3a
+ci3m2e
+5ci1men
+4cin3ab
+cin1a
+4c2i4nd
+c4ine5a2
+cine5mat
+ci5ne4ss
+cine4s
+4cint
+c4i3ol
+c2io2
+ci5om
+ci4po
+c2ip
+cisi4
+c2it3r2
+ck1
+cka2r5
+cka5t
+c4ke
+ck5i1f
+ck4sc2
+c4k1s
+cl2
+cla5r2i1f
+cl2a
+cla2r
+clar1i
+3cl4as
+c2le2
+2c4le.
+c5lec
+clemat4
+c2lev3
+cli1m
+c3li4ng
+cl2i2q
+c1lo4q
+c4l4o1tr2
+cl2ot
+c4lue4
+cl2yp5
+c2ly
+5cl4y2s
+cn2
+c3n1i
+1c2o2
+4co.
+3c2oa2
+c4o5ba
+3c2oc
+co3c2i2
+co5cu
+co3dic
+co3d2i1f
+4co2d2y
+3coe
+co5et
+co3gr2
+c2o1g
+4c3o2i4d
+c2oi
+co3inc
+4col.
+col3a
+co3l2o1g
+co1lo
+5col1o4u2
+co5ly
+co5mas
+c2om
+co1ma
+co4m2e
+co3mo4
+com1p4
+con1
+con4ati4
+con1a
+con4ch
+con1c
+con3d5er1
+co4nd
+conde2
+con4ey
+co2ne
+con4ie2
+con1i
+co4n3s2
+c2on3t
+conta5d
+3c2oo
+coo2p4
+co3or
+cop4e
+co3ph
+c4o5p2l2
+co3po
+c1o2p4t2
+2cor1a
+cor5d2ed
+cord5er1
+4co2r4ed
+c2or2e
+co3rel
+3cor2n2
+4coro
+co5rol
+5c2ort2
+3cos.
+c4ost3a
+cost2
+cost5er1
+coste2
+co5ta
+c2ot
+3c4o3tr2
+5coty
+co4us5t2
+co4u2
+cov1
+co3va
+cow5a
+c2oz4
+co5z1i
+c1q
+cr2
+5craf
+craft5i
+cra2ft
+c4ra2n
+5cran1i
+cr4a5n2i1u2
+cras3t2
+cras2
+cra4te
+c2r2e
+4crea2n
+crea4
+cre3at
+cre4p3
+5creti
+cre4t2o
+cret5or
+cri3l
+cron4
+crost4
+4cro4u2
+5c4rus
+c2r2y2
+crym3
+cry1o3
+4c5s4
+csim5
+2ct
+c2ta
+c3tac
+ctac5u
+c5ta5g
+ct1a2n
+ct5ant
+c5tar2i1a2
+cta2r
+ctar1i
+c3ta2to
+c1te
+c4tea2
+c2t5ee
+c4tent
+cter4i1a2
+c1teri
+cter1
+c2t5es
+ct5et
+ct2ic
+c5tic2i1a2
+ct2i1c2i2
+c4ti4c5s4
+ctifi4e2
+c1t2i1f2
+c3tim
+ct4in.
+ct1in
+ct4in1a
+ct5i4ng
+c3t2in1i
+c5t2in5o
+c5t2io2
+c3t2is
+c3tit
+c4titu
+c4tity
+ct5ive
+c2t1iv
+ct4iv1i2t
+ct5o1lo
+c1t2om
+c3ton
+c5toris
+ct1or
+ctor1i
+c5tor1iz
+c1tr2
+c2tr2e
+ct2r2o5t
+c1tu
+c2tum
+c1ty
+cub3at
+cuba4
+c4uf2
+cu5ity
+c2ui2
+cu4l5ab
+cu1l2a
+c2ul2i
+cul2l5er1
+c4ull2
+cul2l5in
+cul1li
+1c2ult
+cu4mi
+5cu4n3a4
+cun1
+cun4e
+5cun2i
+5cuol
+cu5pa
+c2up
+cu3pi
+c3up2l2
+1cu4r
+cur4er1
+cur2e
+cur5ial
+cur1i
+cur2i1a2
+4cur4o
+1cus
+cus5a
+c3u2t1iv
+cut2i
+c3utr2
+5cuu4
+cu5v2
+2cy.
+cy4b2i
+c4y1b
+1cyc
+cyl3
+cy4m
+cy5no
+cyn1
+c4y2s4
+cys5to
+cys1t2
+cy4t
+cz2
+4da.
+d4ab1r4
+d1ab
+1d2ac
+da2ch4
+d5ache2
+3da2ct
+d1ag
+d4a4g2i
+d4ale
+d4al1g2
+dal5ler1
+dall2
+dam5a
+d2a2m
+3dam2e
+d3am1i
+da5mu
+3da4ng
+da2n
+d1an4t
+d3ap
+d3ard
+da2r
+5darm
+3d4as2
+d2ast5a
+dast2
+d1at
+da2t1iv4
+d2a2t4u
+dau2gh3
+d2au2
+daun5te
+daun2
+3d2av
+d3b
+d3c4
+d1d4
+d4d4er2e
+dder1
+d3di
+d3d2ler1
+d2dl4
+d3dli
+d3dy1i
+d2d2y
+2de.
+de1a2c3t
+dea2
+de5aw
+de4b2i
+de1b
+deb5it
+3dec
+de5cant
+dec2a
+deca2n
+de4cil
+de1c2i2
+de1cr2
+4de2ct
+ded3i
+d2ed
+def2or5e
+de1f
+de1fo
+de4fy.
+de3g
+de4gu
+de3io2
+5d4e3is
+de3lat
+del2a
+de1li4e2
+del5ler1
+dell2
+del5li
+de5lo
+1d4em
+4de4mie2
+4dem4is
+d4em4o4n
+de1mo
+de4mo4n1s2
+de3mor
+de4mos
+4de2my
+de1n2a
+d2e4n4d
+4d4ene
+d3en1h2
+den2i4e2
+den1i
+dens5a
+de4n2s
+dens5er1
+den5tit
+dent2i
+de3od
+deo3l
+deon2
+de3ont5
+de1p
+depen4
+deposi4
+de1po
+de3p4os
+de2p4u
+d3eq
+derac4
+der1
+de3r2ai2
+d4er2e
+4d4e2r4ed
+de5reg
+3der3er1
+1deri
+der3k4
+3derm
+der4mi
+der5min
+5derne
+der2n2
+3dero4
+der5os
+de2r3s2
+5d2eru
+4d4es.
+de3sa
+5de2sc2
+des4ca
+de5sc1al
+de3sec
+des4i
+de3s4i2d
+des5ig1n1a
+des2i4g
+desi2gn2
+des1p
+des5p4o2n
+des2po
+de3sq
+d3e4st.
+dest2
+de2s3ti
+1de1t
+de3t2es
+de5th1
+de2ti
+dev3i4l
+de3vis
+de3vi2t
+de4v2oi
+de1vo
+devol5u
+devo2l
+3dex
+2d5f
+dfol4
+d1fo
+d2g
+dg4a
+d1gel4
+d4gen
+d3gr2
+4d1h
+dh2ot4
+d4hu
+4di.
+1d2i1a2
+di2ad
+3dia2r
+di5at5om
+di3at
+dia2to
+4d1ib
+d1ic.
+dic5a2m
+d4i4ce
+d4i3ch
+d5icl2
+dic5ol
+d2i2c2o2
+1di2ct
+dic5tat
+dic2ta
+dic4te
+5dicul
+d2icu
+d5i1cu4r
+1di2d
+di4e2r1s2
+die2
+di1er1
+3di3ev
+d4i3fo
+d2i1f
+dig3al
+d2ig
+di3g2a2m
+dil4
+5dill2
+dilo4
+d4i3lu
+di5mer1
+dim2e
+di1me2t4
+di1m1i
+2d1in
+din4e
+d4in5g2i
+di4ng
+d4i5nos
+d2ino
+3d2i1o2
+di2o4c
+di4ol2a
+d4i1ol
+di2p5t2
+d2ip
+3dir2e
+d2ir
+di3r1i
+4d5iro
+di4s1
+d4i2s3c2
+d4is3en3
+3d2is2i1a2
+3d2i4s1s
+d4it4as
+dit1a
+d4iter1
+dithe4
+d2ith
+d3ito
+dit1or3
+2dity
+1d2i1u2
+1di1v2
+di4val
+d2iva
+di5vin2e
+di2v1in
+dix4i
+d2ix
+d1j
+2dl4
+d1l2a
+5dle1f
+5dlest2
+3dlew
+dlin4
+d1lo
+d5lu
+2d1m
+4d1n2
+1do
+4do.
+d4ob
+do4c3u
+d2oc
+do2g4a
+d2o1g
+do4j
+d4ol.
+dol3en
+do5l4ine
+dol5it
+do4lon
+do1lo
+d4o4ls
+5dom.
+d2om
+do1ma2n4
+do1ma
+domin5
+dom1i
+dom5ino
+dom5i2t
+do5mo
+don4at
+don1a
+4do2ny2
+3d2oo
+d2or
+4dor.
+d2or4m
+d2ort4
+d4os
+do5sim
+dossi4
+do4ss
+dot1a
+d2ot
+dot4t1in
+do2t1t4
+dot3ti
+2dous
+do4u2
+d4own
+3do4x
+d1p
+dr2
+d5rail
+dr2ai2
+d3ral
+3dr2a2m
+dra2n4
+d4ras2
+drast4
+3drel
+dr2e
+dres4
+dres2s5o
+dre4ss
+dri4e2
+d4r2i1f
+dr2i4g3
+d4r2om
+dro1pho4
+dr2op
+dru4n2k3
+drun1
+4d1s2
+d5sl4
+d2s3m4
+ds4mi
+d4sw2
+dt4
+dt5ho
+1du
+2du.
+du1at
+d2ua2
+3d4uc
+du4ch5
+duci5a2n
+du1c2i2
+duc2i1a2
+du4c2o2
+du5eli
+du5ell2
+du5en
+du5e2t2t4
+due4t
+du5in
+d2ui2
+dul3c2
+d3ule
+d4ul4l2
+dum4b2e
+du2m1b
+du4n4a4
+dun1
+d5un4c
+d2u2p
+du3p2l2
+5dur1o
+du4r
+d5use
+dust5er1
+d4ust2
+duste2
+du3u4
+d1v
+dver2
+dvert3
+dvoc5at
+d1vo
+dv2oc
+dvoc2a
+2d1w
+dwell3
+2d2y
+dy4ad.
+dy1a2
+d1y5a2r
+5dy4e
+5dyk
+dyl2
+dyll3
+5dymi
+3dyn1
+dys3p
+d4y2s
+d3zo
+ea2
+4e1ab
+e1a2ct
+eac4te
+ea5cu
+e5ad1d4
+ead3er1
+ead1i
+ead3li
+ea2dl4
+ea4g
+e2ak1
+eal3a
+ea2l3er1
+e2ale
+ea3l2o1g
+eam4bl2
+e2a2m
+ea2m1b
+eam3er1
+eam2e
+ean5i
+ea2n
+e2ap2
+eap5er1
+e3a4p1p2
+ear3a
+ea2r
+ear3er1
+ear2e
+ear4li
+e5a4r2r4
+ear4te
+eart2
+earth5i
+ear2th
+eas5er1
+eas2e
+ea4son1i
+e2aso
+e1a4s1s2
+eassem4
+eas4t2
+east5i
+eat5en1i
+e4at3er1
+eat5ie2
+e3a2t2i1f2
+eat1it4
+eat4it3u
+e3at1ri
+e2a2tr2
+e4a2tu
+e2au3
+eav5i
+e2av
+eavi4e2
+eav5o4u2
+ea1vo
+eaz5i
+e2az2
+e1b
+eba2r4
+e2b2b2
+eb2e4
+e4bel.
+e1bel
+e4be4ls
+e2ben
+eb5et
+eb2i
+e5b1il
+e4bin
+e4b2is
+e4bl2
+e4bos
+ebo2
+ebo1t3o
+eb2ot
+e2br4
+eb1ra
+e2b2t
+e4b4uc
+ebus5i
+ec2a
+ec3ade
+ecad5en
+ec2al5e
+ec1al
+e5c2a2m
+e4ca1po
+e1c2ap
+ec3at
+ec5a2th
+e1ce
+ecen2t5o
+e1cen2
+e3cent
+ech3i
+e2ch
+e4cib
+e1c2i2
+ec2i4f
+ecip5i
+ec2ip
+e1cl2
+ec3l2ip
+econ4s2c2
+e1c2o2
+econ1
+eco4n3s2
+econstit5
+econ3s2t2
+e2c3or1a
+e4c5oro
+ec3rat
+ecr2
+e4c5rea2n
+ec2r2e
+ecrea4
+e4crem
+ec1ro
+ect5ati
+e2ct
+ec2ta
+ec4ter1
+ec1te
+ect2i4c
+ec4tit
+ec4t5us
+ec1tu
+ec1ul
+e5c2ul2i
+2ed
+e5da4n2s
+eda2n
+e2d1at
+ede2
+2e4d2ed
+e5de1h2
+e4d2ele
+edes3t2
+ede3te
+e1de1t
+edeter5
+e3dev
+e5dew
+ed4g
+edi4a4ls
+e1d2i1a2
+ed5i4c1al
+ed5i4c5s4
+ediges4
+ed2ig
+edi1ge
+ed5i1gr2
+ed3im2e
+ed1it
+e1di2v2
+ediv5i2d
+ed3li
+e2dl4
+ed2or4
+e1do
+e4do4x
+ed1ro
+edr2
+edu5cer1
+e1du
+e3d4uc
+e2dul
+ed3u1lo
+e4d5u4r
+ee4ce
+eed3er1
+e2ed
+eede2
+ee4do
+ee2f
+ee5g
+ee1i
+ee2l1i
+ee2m
+eem5er1
+ee1m2e4
+eem3i
+eep1
+ee4pa
+eer4in4e
+eer1
+eer3in
+eesi4
+ee3to
+e1f
+efac2t5o
+e1f2a
+efa2ct2
+efal4
+ef5er3ee
+efer1
+ef2er2e
+ef5ini4te
+e2fin
+ef2in1i
+e4fite
+ef4l2
+efor5est2
+e1fo
+ef2or2e
+2e3fu
+e4fug
+efut5a
+e1gel3
+eg2i5a2
+e1g2i
+e4gib
+e3gl2a
+e2gl2
+eg3le
+eg4mi
+e2g1m4
+eg5n1ab
+e2gn2
+eg1n1a
+e5g4on
+e2gr2
+e5gu4r
+e1h2
+e5ho
+e2h5s
+eh2y2
+ehyd5r2
+ehy1d4
+ei2d4
+5ei1do
+4e2i1f
+e2ig2
+e5ignit
+ei2gn2
+eig1n1i
+e4in.
+e3inc
+e2ine
+e1i4ng
+e2in5i
+e4ins.
+ei4n1s2
+e2i4p4
+eir3o
+e2ir
+4eis
+eis3i
+eit5er1
+e2ith4
+e2iv
+eiv3er1
+e2iz
+e1j
+ejudic4
+eju1di
+ek3en
+ek5is4
+ek4l2
+e4l4ac
+el2a
+e5lad
+el5age
+el2a2m4
+el5anc
+ela2n
+elast3
+el4as
+e4la2t2es
+ela4te
+el5at3ive
+ela2t1iv
+elch5er1
+el1c2
+elch4e2
+el2ch
+eld3er1
+2ele
+elea5g
+elea2
+4e4l2ed
+el5en1i
+el3en3o
+ele3o
+ele5ph1
+e2l1er1
+e1les
+e5le4s4s
+e4leste2
+elest2
+el3et3o
+e1let
+el3ev3a
+e2lev
+ele3vi
+el5ex
+e4l3ica4
+e1lie2
+eli4e2r1s2
+eli1er1
+e3lim
+el3i4ng
+eli3on
+el2io2
+e4l1i4s
+el2i2t4t4
+el1it
+e3l4iv
+el4l1ab
+ell2
+el1l2a
+ell5iz
+el1li
+e3l2oa2
+e3l2oc
+elo5c2a
+eloc3u
+elo4di
+e2l2o1g
+elom5ate
+el2om
+elo1ma
+elo3mat
+el5op.
+el5o2ps2
+elp5in
+el3so
+e4ls
+el5tie2
+e1lu
+elu4m
+elus4
+elv4
+e5ly1i
+e2ly
+3elyt
+e2m3ago4
+em3an3a
+e1ma2n
+e1ma2r4
+emarc5a
+emar1c2
+em5at1iz
+em2at5ol
+ema2to
+em5b2i
+e2m1b
+e1m2e4
+e4mee
+e4mel
+e3me2m
+e4m3era
+emer1
+em5ero
+emet4e
+e1me2t
+em4icis
+em1ic
+emi1c2i2
+e4mie2
+e2m2ig
+emig5ra
+emi2gr2
+em3in1a
+em5i4ng
+e3m2i3o2
+em3i2s1m4
+e4mit1a
+emi2t
+e4m2i1u2
+em4mae
+e2m1m2
+4emnit
+e4m1n2
+emn1i
+emo3b2i
+e1mo
+emo2d4u
+emod1
+e2m2o1g
+e4m2oi
+em3o1lo
+em5o1m
+4em4on
+e3mon1i
+emon5ol
+emo4no
+e2mor
+em5oris
+emor1i
+em3o4r1r4
+e4mot1ic
+em2ot
+e5m2oz
+em1pa5r
+em1p
+em3pa
+empara5
+em5pes
+4emp4li.
+emp2l2
+em4pr2e
+em1pr2
+em3um
+e5mut
+en3a2c
+en1a
+e4nal
+en3a1m3o
+e1n2a2m
+en4an1n4
+ena2n
+e2n3a2r
+en3as.
+en2as
+ena5tur2e
+en2a2tu
+enatu4r
+3en1cep
+en4cile
+en1c2i2
+en3cil
+en2c1t4
+2e4nd
+en4d5al
+en2da
+en4de2dl4
+ende2
+en1d2ed
+end5rit
+endr2
+4ene
+e2n2e5d
+en3ee
+e5nelle
+enell2
+e5ne2p
+e2n1er1
+e5nereo
+en2er2e
+ener5v2
+en5esi
+e3ne4ss
+en1et
+en4e2t2t4
+e2n3eu
+e3n4ew
+en3g2i
+e4ng
+en3ic
+en1i
+en5i1er1
+en2ie2
+en3i1g3r2
+en2i2g
+en5in
+enit5u
+e4n3k
+en1o
+en3oi
+en2o2m
+en3oty
+en2ot
+enov3
+e4n2s
+ens5a2l
+en3sp
+en4s4u2m
+en3su
+en4sus
+ent3a2r
+en4te2r1s2
+en1te
+enter1
+en5t2i2a2
+ent2i
+en4ti3fy
+en1t2i1f2
+en2t2o
+en4tri
+en1tr2
+ent5rin
+ent5up
+en1tu
+en4tus
+4en2u
+en3u1a2
+en3uf2
+en3u4r
+en5ut
+5enwa
+en5w
+eo3b
+e4o2ch
+e2oc
+e4oda
+eof2
+eo2l
+eol5ar.
+eol2a
+eola2r
+eol5at
+eolo3g2i4
+eo1lo
+eo1l2o1g
+e5olu
+e2o3m
+eon4a
+e3ont
+e1o2p4t2
+e1or1
+eor4de
+e2or3e
+eor5o
+eo1s2
+eo4t2o
+e2ot
+e1pa
+ep4al
+ep5ar1c2
+e1pa2r
+epa4t
+epend5en
+ep2e4nd
+epende2
+ep5ert2
+eper1
+e4pete
+e3pet
+epe5ti1t2io2
+epe2ti
+e4p5ex
+eph1
+eph4i
+e2p2ig
+e5pl2a
+ep2l2
+ep3lic
+epol3a
+e1po
+epol3i
+epol2it5
+ep3re1h2
+e1pr2
+epr2e
+ep3res5e
+e4p5ri4m
+e4p5rob5
+ept3or
+e2pt2
+e1p4u
+e3pu4r5
+e4puta
+equin4
+equ4
+eq2ui2
+equ2i5no
+er1
+era4cie2
+er2a1c2i2
+era4do
+er2ad
+era4g
+era4l
+er3aph
+er2ap
+er3ap1i
+er3a2p4y
+4era4ti.
+4era4tim
+er5a2tu
+er3bat
+er1b
+er2ba
+er3b2e
+er2b5os
+erbo2
+2er1c2
+er3ch
+er3cl2
+2erd
+er2d5a2r
+er4di4e2
+2er2e
+er3eal
+erea4
+4e2r4ed
+er3e2gr2
+er5el.
+er5ell2
+er5e4ls
+e4re1m2e4
+er3en
+5er2e4nd
+er4en4e2
+ere5o2l
+e3re1q
+er3er1
+ere4s
+er5ese
+er3esi
+er5este2
+erest2
+er5e2sti
+eres5t4r2
+eret4
+er3et.
+er3e4t1s
+er3e2t2t4
+ere4v
+er3ex
+ergi3v
+er1g2
+er1g2i
+er3gl2
+er3ia.
+er2i1a2
+er4ia2n
+eri4ci2d
+eri1c2i2
+5er5ick1
+er2i2d
+er3ie2
+er3i2ff
+er2i1f
+er4i1me2t
+erim2e
+er3in
+eri4n1a
+eri4on
+er2i3o2
+er3io4u2
+er4i2s4c2
+er4i5sta
+erist2
+4eri2t
+e3r2i4v
+er5iz
+4er1j
+er2k4
+er3m2e
+er4m2oi
+er1mo
+5ernacl2
+er2n2
+er3na2c
+ern1a
+er5nal1is
+er1n3er1
+er1n3is
+ern1i
+ern3it
+4e4ro.
+er3o2i4d3
+e4r2oi
+er4o5is
+ero5st2
+erpent5in
+erpe2
+er3pent
+erpent2i
+erre5l2a
+e4r1r4
+erre2l
+err2e
+er4rep
+er5s2ine
+e2r1s2
+er2sin
+er5t4ed
+ert2
+er4ter1
+ert5er.
+ert5e2r1s2
+er4th2i
+er2t5iz
+2eru
+eru4b
+er2u5d
+eru4n2d5
+erun1
+er4vi4l
+er1v2
+5erw2au2
+er1w
+eryth3
+e2r2y
+ery2t
+2er2z
+4es.
+es5a4m
+es5a2n
+e2sc2
+es5ca2n
+es1ca
+es5che2
+es2ch2
+esci5e2
+es1c2i2
+escut5
+e2s1cu
+e3se2a2
+e3se2ct
+e5see
+e5seg5
+ese4l
+es5enc
+e3sh4a2
+es2h
+e1shi
+e5shu4
+esi4a2n
+es2i1a2
+es5ic.
+e5s2ick1
+es5id3en
+es4i2d
+esi4de
+esi5d2i1u2
+es5ies
+esie2
+es3im
+e2s3in
+e5sion
+e1s2io4
+e4s1it
+es4it.
+es4i4t1s
+e3sk1in
+es2k2
+e3s4mi
+e2s1m4
+e2s4od
+es3ol3a
+es2ol
+es3ol3u
+es3on1a
+es2o3p
+e1sor
+es3per3
+es5pir1a
+esp2ir
+es5pit
+es4p2l2
+es3plen5
+esple2
+es5p2ot
+es2po
+e5s2pr2
+es4s3a2n
+e4ss
+es1sa
+essa2r5
+ess5ee
+es4sil
+es2so
+es2t1a4b2
+est2
+est3a2n
+e5sta2r
+es5t2au2
+e2sti
+est5ifi
+es1t2i1f2
+est5igati
+est2ig
+estig1at
+e3st2oc
+es5t2oo
+est4r2
+es4tud4
+es1tu
+e1su
+e2s3ul
+es4u4r5
+et2a
+et3al.
+et5all1is
+etall2
+etal1li
+et3al5o4
+eta5m2e
+et2a2m
+et2a3p
+et3ar1i
+eta2r
+et5a2r2y
+et4as
+et3ate
+et3ati
+et5ay
+et3eer1
+etel1l5i
+ete2l
+e1tell2
+etend5er1
+et2e4nd
+etende2
+et5en1i
+eter2
+et3er3a
+et5er3i1a2
+e1teri
+e3tex4
+e2th1
+ethy2l3
+eth2y
+2e1t2i2a2
+e3t2ic1u
+et1ic
+e3t4i4g2i
+et2ig
+e5tim
+et3in
+eti4n1a
+e3t2ir
+et5i2t3iv
+e3t2i4u2
+et5o1lo
+e5tomet1e
+et2om
+etom2e
+eto1me2t
+e2ton
+et3on1a
+etor3i
+et1or
+etra5g
+etr2
+4e4tral
+etr2a5m
+et4ra2n
+et5re4s4s
+etr2e
+et1ri
+et4r2i1a2
+etrib5a
+et2r2ib
+e4trim
+et1ro
+e2t2t4
+et3ter1
+etud4
+et3ud4e
+e4tum
+et4we
+et1w
+e2t5z2
+eu3d2i3o5
+eue4
+euk5
+4eum
+e3ur1g2
+eu4r
+eur5i
+eus4
+eu5ten
+eu3ter1
+eut3i
+ev4abi
+e2v3ab
+e1v2al5e
+ev2a2p3
+ev3ast2
+ev3at
+ev5eli
+e2vel
+eve4n
+ev5erat
+ever1
+ev5er3en
+e4v4er2e4
+ever4er1
+e4veri
+e4ves
+e1v2i1a2
+e4vi1ab
+e2vic2
+evic1tu4
+e5vi2ct2
+evi2d3
+ev5ig
+ev4ile
+evi4l
+ev5is2h
+evi2s5in
+evis5o
+e4v2i1u2
+ev2oc3
+e1vo
+evol5e
+evo2l
+evol5ute
+evu4
+e1wa
+e4wag
+e5w4ay
+ew1er1
+e3wh2
+ew5ie2
+ewi2
+ew1in
+ew5is2h
+e3wit
+e1wr
+ex5i4c
+ex1i
+ex4on.
+ex1o
+exo4n
+1ex3p
+4ey.
+ey4as
+ey1a2
+eyl4
+e4y3s2
+ez5er.
+ezer1
+ez5e2r1s2
+ez5ie2
+ez1i
+1f2a
+2fa.
+fab4i
+f1ab
+fa3ce2t
+fa2ct2
+fa2c3u
+2f3ag
+fal2l5in
+fall2
+fal1li
+5falo
+fa5lon
+fals5ifie2
+fa4ls
+fals2i1f4
+4fan3a
+fa2n
+fan5tas1iz
+fan2t2a
+fantas3i
+fant3i
+5fa2r
+far3i
+5faw
+4f5b
+2f5d
+2fe.
+3feas
+fea2
+fe4a3tu
+fe2b5r4
+fe1b
+3fec
+2f2ed1
+5fei
+fe1li
+fem3i
+femin5
+fend5er1
+f2e4nd
+fende2
+f5en1i
+4f4e2r4ed
+fer1
+f2er2e
+fer3ee
+3fero
+fe5r2oc
+fer5om
+3fe4r1r4
+fer3v2
+2f4es.
+fes2s3o
+fe4ss
+fest3a
+fest2
+fe2st5i
+fe4t
+fet4al
+fet2a
+fet4in
+fet4o
+3feu
+fe5veri
+fever1
+2ff
+f1fe
+ffec4te
+f3fec
+ffe2ct
+f5fe4t
+f1fi
+f5f2i1a2
+f3fic
+f5fie2
+f1fi2l3
+f2f3is
+ff4le
+ffl2
+ff3lin4
+f3f2oc3
+f1fo
+ffon1i4
+ffo2n
+ff2or3e
+f3fr2
+ffran2ch5
+ffra2n
+4f5h
+fi5ance
+f2i1a2
+fia2n
+f4ib5u
+4fic.
+4fi4c1al
+3fi1c2i2
+4fi4c5s4
+fi5del
+fi2d
+fid3en
+fiel4
+fie2
+fi2er4c2
+fi1er1
+figh2t5
+f2ig
+fi2gh
+1fi2l
+2fin
+fin2a
+fi3na4l
+f2i4nd3
+fin2e
+f1i4ng
+5finin
+f2in1i
+fin4n1i
+f2in1n4
+fir2m1
+f2ir
+f3it1a
+f5it3ee
+fl2
+3fl2a
+fle2s
+f3lica
+flin4
+3flo
+flo5ric
+flor1i
+3flu
+flu1m4i
+1fo
+4fo.
+3f2oc
+fo2e
+foet3i4
+fo1et
+fo1l4i
+fo4li2e2
+fomen4t4
+f2om
+fom2e
+fo1men
+fo2n
+fon4de2
+fo4nd
+3f2oo
+fo5r2a2m4
+for1a
+for5ay
+for5b
+for4di
+fore3t
+f2or2e
+5f2orm
+for4m3a
+fortu5n4a4
+f2ort2
+for1tu
+for3tun1
+fo3v
+1fr2
+frag5a
+fran2t4
+fra2n
+fra2r4
+frat2ch4
+fra2tc2
+fre4s
+fr2e
+fros4t5i
+frost2
+fr4uc4
+2f3s
+fs4p
+2ft
+f1t4ed
+f4ter.
+fter1
+f2t5es
+ft2i4et
+ftie2
+ft4ine
+ft1in
+3fu
+4fu.
+f4u4c
+fuel5li
+fuell2
+fug4a
+fu4min
+fu1mi
+fu4n2g
+fun1
+4fu2r4ed
+fu4r
+fur2e
+fur3n2
+fu3sil5
+fus5o
+fu5til
+fut2i
+4ga.
+ga4cie2
+g2a1c2i2
+gadi4
+ga4d4os
+ga2do
+3gag
+3g2ai2
+3g2ale
+ga5len
+gal2i4a2
+gal5ler1
+gall2
+3galo
+gam4bl2
+g2a2m
+ga2m1b
+gan5at
+ga2n
+gan2a
+4ga2n2ed
+gang5er1
+ga4ng
+g5ant.
+gan4t4r2
+g5an4t1s
+g5ar1c2
+ga2r
+g4ar2e
+gar3ee
+gariz4a1
+gar1i
+gar1iz
+ga5r2ot
+gar5p
+5g2a4r1r4
+1ga4s
+gas5i
+g2as3o
+gas2ol5
+gas2s5in
+ga4ss2
+gast3r2
+gast2
+g1at
+g4at.
+ga2t5iv
+g4a2to.
+ga2to
+g4atos4
+g4a2t1t4
+g2a2t5u
+gaud5
+g2au2
+ga5z1a1
+g2az2
+g1b
+g5d4
+2ge.
+5geal
+gea2
+3gea2n
+2g2e4d
+3gedi
+5ge4d1n2
+4ge1f
+1gel
+4g2ele
+ge4li
+gel4in
+gel5li
+gell2
+ge4lu
+2ge2ly
+gem3i
+5ge1mo
+3gen
+gen4du
+g2e4nd
+gen5it
+gen1i
+gen3o
+gen5t2i
+ge4o
+geo3lo
+geo2l
+4g2er2e
+ger1
+3germ4
+2g4es.
+5ge4ss
+gest5at
+gest2
+3get
+get3a
+2g1f
+2g1g
+gg4a
+g2ge
+g5ge2dl4
+g2g2e4d
+g3ger1
+g5ger3er1
+g4g2er2e
+gg2i4a5
+g1g2i
+g3gli
+g2gl2
+g3glu3
+g5g2ly
+ggr2av3
+g1gr2
+g4g4ro
+2gh
+g5h2ai2
+gha2
+gh5en1i
+ghe2
+g3ho
+g4hos
+gh2t
+1g2i
+4gi.
+gi4all2
+g2i1a2
+gi4at
+3gib
+g2i5c2o2
+g2i4g
+gi5ga2n
+1g4in5g2i
+gi4ng
+3g2io2
+gi4or
+gi4ot
+5g2ip
+gi5pa
+g4i4s
+5gis.
+gi2t1
+5gitu
+giv5en.
+2gl2
+g3la2r
+gl2a
+5glass.
+gl4as
+gla4ss2
+glec4
+3g2ler1
+g4leto
+g1let
+g4letr2
+g4ley
+gli5on
+gl2io2
+g5l1is4
+3glo
+4g5lod
+gl2om3
+4glop
+3glu
+glu5te
+glu5t2i
+3gl2yp2
+g2ly
+2g1m4
+2gn2
+g1n1a
+g4n1ab
+g5nate
+5gn4a2th
+g5nati4
+gna5tu4r
+gn2a2tu
+gn5e2dl4
+g2n2ed
+gn5ee
+gn3er1
+g1n1i
+g4n2i1a2
+g2n3in
+gn4in.
+g4n2i2o2
+g2no
+5gnor1i
+gno4s
+2go.
+5g2oa2
+3g2oc
+5god
+3goe
+go4et
+go4ge
+g2o1g
+4go3gr2a2m
+go1gr2
+g5o2i4d
+g2oi
+g4o3is
+go2m2e
+g2om
+5gon1n4
+go5n2om
+3g2oo
+goph4
+4gor.
+5gor1g2
+4go2r1s2
+g4o2r2y
+3gos
+gos4t2
+2go4u2
+gour4i
+gou4r
+g1ous
+gov1
+g3p
+1gr2
+gr1ab4
+3gr2a2m
+4gram2e
+gr2a2p
+g4r2e
+gril4
+gri2m3a
+g4ro
+gr2o4g
+g5ron
+gr2op4
+3gru
+gru3en
+gr2u5i2
+gru2m4b
+2g1s
+gs4c2
+gs4t2
+g4sti
+gth5en1i
+gthe2
+g5to
+g4u2a2
+gu5ab
+5gua2n
+3guar2d
+gua2r
+g5uat
+2gue
+5gueu
+5guit4
+g2ui2
+gui5t1a
+gu2ma
+gu4mi
+3gun1
+g4uras5
+gu4r
+gur1a
+g4u2r4ed
+gur2e
+gur4n2
+gur4u
+4gu2r2y
+gust5a
+g4ust2
+2g1w
+2gy
+g4y2b
+5gym
+3gyn1
+gyn5o
+g5z2
+ha2
+4ha.
+h4ac
+hadi4e2
+had4in4e
+ha2d1in
+hae3o
+ha2g2e4d5
+ha3g2i3o2
+ha1g2i
+hag5u
+ha5ic
+h2ai2
+hais4
+hak4ine
+h2ak
+hak1in
+hal5ant
+hal2a
+hala2n
+h2a4m
+ha1m5a2n
+han4cro
+ha2n
+han1cr2
+ha4n2g
+h1an1i4
+h5an1iz
+han4t
+han2t3a
+ha4pe
+h2ap
+hap3l2
+har1a
+ha2r
+har5b
+har4d
+har5die2
+har2ge4
+har1g2
+ha5ri2s1m4
+har1i
+har3o
+har4t4ed
+hart2
+har4ti
+has4te2
+hast2
+ha2t5o
+haugh2t5
+h2au2
+hau2gh
+ha2vel4
+h2av
+hav5ersi
+haver1
+have2r1s2
+ha1v5o
+h1b
+h1c
+h1d
+hdeac5
+hdea2
+h1du4
+he2
+4he.
+h2ea2
+1head
+3hea2r
+hear2ch4
+hear1c2
+heas4t5
+heav5en
+he2av
+he2c3t4
+he5del
+h2ed
+hede2
+he3do
+heek4
+h4ei
+h4e3is
+he5lat
+hel2a
+h5elin
+he3l2io2
+he5l2i1u2
+hel4li
+hell2
+h3el3o
+hem1a
+he3men
+he1m2e4
+hemis4
+he5m4op
+he1mo
+hem4p
+hende5
+h2e4nd
+he3or1
+hep1
+h1er.
+her1
+her4as2
+her2b
+her2b3a
+herb3i
+here3a4
+h2er2e
+here3o
+h5er3e2t2t4
+heret4
+h5erh2
+her5ial
+her2i1a2
+h5erin4e
+her3in
+h1erl
+her5om
+h4eron
+h1e2r1s2
+h5erwa
+her1w
+hes3t4r2
+hest2
+het1
+h4et3a
+het3i
+het4t4ed
+he2t2t4
+heu2
+h4eum3
+heumat5
+heu1ma
+he4v4
+hev5i
+hex5o
+h1f
+h5h
+2hi.
+hi4a2r
+h2i1a2
+h1ic
+hi3c4a2n
+h4i4cin
+hi1c2i2
+h4icl2
+h5ie.
+hie2
+h1i1er1
+h4i4e2r1s2
+h1ies
+h3ifi4
+h2i1f
+h3i3fy
+hig4o
+h2ig
+hi5ka
+h2ik2
+hi4l
+hi5ma4
+hi5mer1
+him2e
+himos4
+hi2mo
+h1in
+h2i4n4d
+h2in2e
+hi5n2ie2
+h2in1i
+h5in1iz
+hi5nop
+h2ino
+h2i4n1s2
+hio5lo
+h2io2
+h4i1ol
+h4i1or
+h2i2p
+hip3l2
+h4ir
+hi4r4r4
+hir3r5i
+hit4a
+h2iv5a
+4hl
+h3l2a
+h1le
+h3let
+h1l2i
+hl2i4a2
+2h1m
+h4man3ic4
+h1ma2n
+hman1i
+h5mica
+hm1ic
+2h1n2
+hno1cen5
+hn2oc
+hn4o3ce2
+4ho.
+ho3a2n
+h2oa2
+ho4c2o2
+h2oc
+ho3don
+ho2do
+ho5du
+ho5ep5
+hol3a2r
+hol2a
+hold1
+hol4is.
+hol1is4
+ho5l4y2s
+ho2ly
+ho4mag
+h2om
+ho1ma
+hom5in
+hom1i
+h2o4n
+hon5em
+ho2ne
+ho5neu
+hon3ey
+hon2g3i
+ho4ng
+ho5n2io2
+hon1i
+hon1o
+1hood
+h2oo
+hoo5r
+h4ope
+ho2p5r2
+h4op4te
+h1o2p1t2
+hor5et
+h2or2e
+h4or2n2
+horn5i
+ho5r2o1g
+hort5h
+h2ort2
+hosi4
+ho4ton
+h2ot
+ho1t2o
+h2o4u2
+3h2ouse3
+4h1p
+2hr
+hras5eo
+hras2
+hr2as2e
+hr2e4
+hre5ma
+hr5er1
+hres4
+hri4
+hril2l5in
+hrill2
+hril1li
+hrim4
+h5rit
+h3r2od
+hrom4i
+hr2om
+h2r2y4
+h3rym3
+2h1s
+hsi4
+h4s2k2
+ht5ag
+ht5ee
+ht3en.
+ht5e2n1er1
+h4t4ene
+ht3en1i
+ht3e4n2s
+ht5e2o
+h2t5es
+ht4f2oo
+h2t3f
+ht1fo
+h1th
+ht4ine
+ht1in
+hu4g
+hu4mat
+hu1ma
+hu5mer1
+hum2e
+hu4min
+hu1mi
+hun4c
+hun1
+hu4n2k4
+hun4t
+hur3i
+hu4r
+hu3s2i1a2
+huz4
+h1w
+h4wart2
+hwa2r
+h2y
+hy2l
+hyl5en
+hyle2
+hy2m
+hyn4
+hy3o2
+hyol5i
+hy1pe
+h2yp
+hy3ph
+hyr4
+hys3te2
+h4y2s
+hys1t2
+hy4t
+2i1a2
+ia4bl2
+i1ab
+iab5ol1is4
+iabo2
+iabol3i
+iab5ol1iz
+i2a2ch
+ia1c3o2
+i2ac2r2
+ia5cri
+ia5d4em
+i5ae
+iaf4
+i2ag4
+i4a3g1n2
+i5a4g5o
+ia3gr2
+i3ah
+i5ai2
+iale2ct4
+i2ale
+ia3lec
+i3al1it
+ial5li
+iall2
+4ial1n4
+i2a3lo
+i2a5ly4
+i5a2m1b
+i2a2m
+ia3m2e
+ian2ch5
+ia2n
+i3ant
+i5ape
+i2ap
+ia3ph
+i2ard
+ia2r
+4iarit
+iar1i
+i3at
+ia5the2
+i4a2th
+i5at2om
+ia2to
+i2a2t4u
+iat3ur4a
+iatu4r
+i3au2
+i2av4
+ib3era
+ib2e
+iber1
+ib1i
+i1b2i2o4
+ibios4
+ib5li
+i2bl2
+4ibo2
+i4bon
+ibor4
+i4bose
+i5bo4u2
+ib1ri
+ibr4
+4ibu
+ib3uta
+ic3ac
+ic5a2do
+i4c1al
+ic1a2n
+2i1ca2r
+iccu4
+ic1c4
+4ice
+i5ceo
+4i2ch
+ich4i
+ich5i4ng
+ich1in
+ich5ol
+i1cho
+4icin
+i1c2i2
+i5c2io2
+2ick1
+ic4lo
+icl2
+2i2c2o2
+i3c2o3c
+ic5ol3a
+icon3o
+icon1
+i5cop
+icoty3le5
+i5coty
+ic2ot
+2i1cr2
+i4cri
+i4cru
+i4c2r2y2
+ic4te2dl4
+i2ct
+ic1te
+ict4ed
+ic4ter1
+ict5ic
+2icu
+icu4lu
+ic3um
+i5cun4
+i5cut
+2i1cy
+i2d
+id1a
+i5d4ay
+i1d4e4m
+id3enc
+id3era
+ider1
+i3derm5
+i3d2icu
+id3i1f
+i5d2ig
+i5dil4
+i3dim
+id4ine4s
+i2d1in
+idin4e
+idios4
+i3d2i1o2
+id2ir4
+id1i4s4
+id4ist2
+2i4d1it
+i1di4v2
+id3li
+i2dl4
+id3ol
+i1do
+idol3a
+4idom1i
+id2om
+id3ow
+4idr2
+id5ri
+id3ul
+i1du
+ie2
+4iec
+2ieg2
+ie3ga
+ie5i
+i5ell2
+4iem
+2i1en
+i2e4n2d
+i1er1
+i3ere4s
+i2er2e
+i2eri
+ier3i4n
+4ier2n2
+ier2o
+i4ert2
+i3e2sc2
+ies3e4l
+i1es2t2
+i3e4st.
+2i1et
+i4et.
+ie2t3ie2
+4ieu
+i5eut3i
+iev3a
+iev3er1
+ie1v3o
+2i1f
+i2fe
+if4f2a
+i2ff
+iff5ler1
+iff4le
+iffl2
+i4f3ic.
+i4fic3ac
+i4f5i4c5s4
+ifi4d
+i2fi4n
+4i2fl2
+i3fo
+i3f2oc5
+if5tee
+i2ft
+i3fy
+2ig
+i3gad
+ig3a4nd
+iga2n
+3iga2r
+i1ge
+i3ger1
+ight5er.
+i2gh
+igh2t
+ighter1
+ight5e2r1s2
+4i1g2i
+ign5iz
+i2gn2
+ig1n1i
+ign2o5m
+ig2no
+i3gon
+ig1or
+ig3ot
+i5gret
+i1gr2
+ig4r2e
+i4g5ro
+i5gu5it4
+ig2ui2
+ig1u4r
+2i1h
+ih2y4
+2ii
+i5in
+i1ja4
+4iju
+2ik2
+ik5a2n
+ike4b
+i2l3a
+ila4g
+ila5te2l
+ila4te
+i5l4ater1
+il4a4x
+il5dr2
+il4du
+i3len
+ilesi4
+il3f
+il3ia.
+il2i1a2
+il3ia2r
+ili4arl
+i3li1c2i2
+i5l2i1en
+ilie2
+ili4er1
+il4i4fe
+il2i1f
+il4ific
+il1in
+il5i2ne.
+il4ine
+4ili3o4u2
+il2io2
+il5i4p1p2
+il2ip
+il5i1q
+il4ite
+il1it
+ilit5u
+il4mo
+ilm2
+i5lon
+il3o4u2
+ilth4
+il2tr2
+4ilu
+il5ul
+i5lum
+il5ur2e
+ilu4r
+il3v
+4ilym2
+i2ly
+ima4c
+im2ag
+im3a4ge
+im1al
+i2m5a2m
+i5m2as
+i4mat4ed
+i4ma2t3in
+im2a2t5u
+im1i
+i3m2ie2
+im4ine
+im5ino
+im5me2s
+i2m1m2
+imm2e
+i2mo
+i5m2o1g
+i3m4on
+im5oo
+i3mos.
+impar5a
+im1p
+im3pa
+im1pa2r
+impar2ad5
+im5p2ie2
+im2pi
+imp2o2t5
+im3po
+im5pr2
+im3pu4
+im1ul
+im5um
+in3ab
+in1a
+4inace
+ina2c
+in4a2do
+in5a2gl2
+in3a2ir
+in2ai2
+ina4l
+4inal1it
+i1n5a2m
+in3a2n
+in3ap
+in4a2r2s2
+ina2r
+i3nas.
+in2as
+4in2a2ta
+inat1or5
+ina2to
+in3au2
+in4aw
+2inc
+inc4t2u1a2
+in2c1t
+inc1tu
+2i4nd
+in5da2r
+in2da
+inde5p
+inde2
+inde4s5
+in1de3t
+indeterm5
+indeter2
+in5dro
+indr2
+4inea2
+4i2n2ed
+in5ee
+in5eg3a
+4in5eo
+ine4s
+in3esi
+ine5te
+4ineu
+inev5
+infilt5
+in3f
+in1fi2l
+infol4
+in1fo4
+4in3fu
+4ing2a
+i4ng
+in5gal
+4inge
+ing5ha2
+in2gh4
+4in2g2i
+4ingle
+in2gl2
+4ingli
+4in1go
+4in1gu
+in2g3um
+2in1i
+in5ia.
+in2i1a2
+4inic
+in4i1c2i2
+in3ion
+in2io2
+in4itud
+4i4n2k
+ink4ine
+ink1in
+4i4n1l2
+2in1n4
+2ino
+4i4no.
+in3oi
+i5nole
+4inos
+i3n4os.
+in5ose
+in3osi
+4in1q
+i4n1s2
+in4s2ch5
+ins2c2
+inse2
+inse2ct5
+in5sec
+insec5u
+in3si
+5ins2k2
+insolv5
+ins2ol
+in4tee
+in1te
+int5e4ss
+in2t2es
+in3til
+int2i
+int5res
+in1tr2
+intr2e
+intu5m
+in1tu
+2in2u
+in5ul
+in5um
+in3un1
+in3u4r
+invol5u
+in3v2
+in1vo
+invo2l
+2io2
+io3a2ct4
+i2oa2
+i1od
+iod3i4
+io2d5o
+ioe4
+io3gr2
+i2o1g
+4i1ol
+io3ma
+i2om
+i4oman1i
+io1ma2n
+io3mo
+i5ope
+io3ph
+i5o1po
+io2p4s2
+i1or
+ior2a4m4
+ior1a
+4i2or2e
+4iorit
+ior1i
+5ior1iz
+4iorl
+ior4n2
+io3sc2
+i3ose
+i3osi
+i4oso
+i4o5sta
+iost2
+i3ot
+iot4a
+i4o5th
+iot5ic
+i4o5tr2
+i4oty
+i4our.
+io4u2
+iou4r
+i4ou2r2s2
+i5o4x
+2ip
+ip3al
+ip2ap4
+ipar3o
+i1pa2r
+ipart5ite
+ipart2
+ip1at
+i3p2e4nd
+i1ph2e4
+iphen3
+i5pheri
+ipher1
+iphi4
+i4phu
+ip3i2d
+i5p2il
+ip3in
+ip4in4e
+ip2ir4
+ip5is
+ip1i4t
+ip4iti
+ip3lin
+ip2l2
+ip3lo
+i3po
+i4p2o1g
+i4poli
+i4p2om
+ip4o2n3
+i4pow
+ip2p2l2
+i4p1p2
+ip3pli
+ip4r2e
+i1pr2
+ip5tor1i
+i2pt2
+ipt1or
+ip1ul
+i5put
+i2p4y4
+2iq
+i3q2ua2
+iqu4
+2ir
+ir1a
+ir4abi
+ir1ab
+ira4c
+ir4ae.
+ir4ag
+ir4al1in
+ir4al1li
+irall2
+i5r2a3so
+iras2
+irassi4
+ira4ss2
+ir4ay4
+ird3i
+ire3a4
+ir2e
+ir3ec
+ir5ee
+irel4
+ire5li
+ires4
+ir5e4ss
+ir1i
+ir2i4d
+ir4im
+ir4is.
+5ir1iz
+irl5i4ng
+ir5o2ch
+ir2oc
+ir5ol
+ir3om
+ir4q
+i2r2s2
+ir5ta
+irt2
+ir5tee
+irwo4m2e
+ir1w
+ir1wo
+ir3w2om
+i4sa
+is5ad
+is3age
+isa4g
+is1a2l
+is3a4m
+is1a2n
+is3a2r
+is5av
+4i4s3b
+i2s3c2
+is5chi
+is2ch2
+isci5c
+is1c2i2
+4i1sec
+ise5cr2
+is3ell2
+4is3en
+is2er1
+is5er2e
+i2s3et
+4iseu
+is3ha2r
+is2h
+isha2
+ish5ee
+ishe2
+4ish3io2
+ish3op
+is5hor
+2is2i1a2
+is5ic
+is3ie2
+4isim
+is3inc
+i2sin
+4is1is2
+is4ke2
+is2k2
+i2s1l4
+islun4
+2isma
+i2s1m4
+is1on
+is5on1er1
+is4o2ne
+is2o5p
+is1p
+i3s2ph2
+5is1pr2
+2i4s1s
+iss5ad
+is1sa
+is4sa2l
+is5sa2n
+is4s4iv
+is1s4o
+4ista
+ist2
+is4tal
+ist5enc
+iste2
+ist5ent
+is5ter3er1
+i4s2t2er2e4
+ister1
+4is1th
+is4t3ic
+4i4s2tl
+i4s1to
+4is4t2om
+is1tr2
+3is2t4r2y
+4is4ty
+i5s2ul
+is3u4r
+2is2y
+it1a
+i2t5ab
+ita4c
+4i1t2ai2
+it3a2m
+it4an2a
+ita2n
+it4as
+it3at
+i3te2ct
+it3ee
+it3enc
+it3ent
+it3era
+iter1
+2ith
+itha5l
+itha4
+ith5i
+i5thol
+i1t2h3r
+ith2y5
+2i1t2i2a2
+it2i4c2o2
+it1ic
+it5ic1u
+it1ie2
+it3ig
+4i1tim
+it4in.
+it1in
+i4t4i4n1s2
+4itio.
+i1t2io2
+4itio2ne
+i5t2i4q
+4i5tit
+i2t3iv
+it4li
+i2tl
+it5lo
+4i2to.
+it5ol
+2iton
+it1o4u2
+2itr2
+it5re4s4s
+itr2e
+i4tric
+2i2t1t4
+it4tit
+it3ti
+itu4a4ls
+it2u1a2
+itu1al
+it5ua2r
+4itue
+it1ul
+it1u4r
+it3us
+2i1u2
+i3um
+iur5e
+iu4r
+2iva
+iv5anc
+iva2n
+iv1at
+i4v2ed
+iv5el.
+i2vel
+iv5el3i4ng
+iv5e4ls
+i4ver.
+iver1
+iv3eri
+i4vers.
+ive2r1s2
+iver5sa2l
+ives4
+iv3et
+i4vie2
+iv3i1f
+i5vil1it
+ivi4l
+ivil3i
+5ivi4st.
+i2v5ist2
+5ivi2s4t3s
+iv1i2t
+i2vo
+iv2oc3
+i5v2or2e
+2i1w
+2ix
+ix3o
+i5ye
+1iz
+4iz2ah
+iz1a1
+iz3i2
+2izo
+iz5oi
+2izz2
+1ja
+2ja.
+3jac
+ja2c5o2
+jac3u
+jag5u
+jal4
+ja5lo
+ja5pa2n
+j2ap
+j4apa
+jel5l2a
+jell2
+jeo2
+jeop3
+4jes
+jeu4
+jew3
+2ji
+3j2ig
+jil4
+jill5
+5jis.
+3jo2
+4jo.
+jo1c5o2
+j2oc
+joc5u
+jol4e
+4jr
+4js
+ju1di
+j2ui4
+ju5l
+ju3n2i
+jun1
+ju2s1cu4
+j2usc2
+jut3a
+ju1v2
+k4abi
+k1ab
+k2a5bu
+ka2ch4
+k3a4g
+kais5
+k2ai2
+ka4l
+ka5lim
+kal4is
+k4a2n
+k2a3o
+k2ap4
+kar4i
+ka2r
+1kas.
+kau4r4
+k2au2
+k2av4
+k1b4
+k1c
+kc2om4
+k1c2o2
+k5d2
+k1do4
+kdol5
+4k2ed
+ke5da
+k5ede2
+3kee
+ke4g
+k2e4n4d
+ken1o4
+ke2p5t2
+ker5a
+ker1
+k4er2e
+k5erel
+k4er4j
+ker5o
+kes4i
+ket5a
+key4wo
+key3w
+k1f
+kfu4r4
+k3fu
+k3ho
+5k2i1h
+ki2l
+kilo3
+k1in
+k2in.
+3k2i4nd
+kinema4
+kin5et
+k3i4ng
+k2in4i
+k2i4n1s2
+kir3m
+k2ir
+ki4r4r4
+kis4
+3kis.
+k1is2h
+ki2t5c2
+k2i4w
+kk4
+k5ker1
+k2l2
+k3l2a
+k5lea2
+k3ler1
+k3let
+k3li
+k3lo
+k1m
+kn2
+k2no
+1kn4ow
+k2o5a2
+kol4
+ko5m1i
+k2om
+ko5pe
+k1p
+k5ro4
+k3ru
+4k1s
+k3sl4
+ks2mi
+k2s1m4
+ks4t2
+k1t
+ku4r5
+k5v
+k1w
+3kyl
+l2a
+4la.
+5la4a
+lab5a2r
+l1ab
+l2aba
+la1bel4
+l2ab2e4
+5lab1r4
+l4ac
+la2c2a
+la5ceo
+la5cer1
+la4ch
+la2c2o2
+5la5col
+lac5on1
+la3cu
+la4de
+l5a2d1m
+l4ae
+l4af
+la3ger1
+la4g4i4s
+la1g2i
+la2g3r2
+5l2ah4
+la4ic.
+l2ai2
+la1ic
+l4al
+4l2ale
+5laman3dr2
+l2a2m
+lama4n5d
+la1ma2n
+la5mel1li
+lam2e
+lamell2
+lam4ie2
+lam1i
+la1m1o
+l5amu
+lan3at
+la2n
+lan2a
+la4n2d
+3land.
+land3i
+3lan4d1s2
+lan4er1
+lan3et
+lan5tine
+lant2i
+lant1in
+lan4t4r2
+l2a4p
+lap1i4
+lar5a2n
+la2r
+lar5de
+4la2r4ed
+lar2e
+l4as
+lat5al
+l2a2ta
+la4te
+5latil1is
+la4t1i4l
+5latil1iz
+5lat2in1i
+la2t3in
+lat5us
+l2a2tu
+l4au2
+5lau4r
+lav5at
+l2av
+l4aw
+4l2az2
+l3b
+lb2e4
+l4bit
+l4by
+l1c2
+l2c1at
+lce4
+l1cen4
+l4c2er2e
+lcer1
+lch4e2
+l2ch
+l3da2r
+l3d2ed
+l3de1h2
+l5dera
+lder1
+ld3est2
+l5dew
+ldi2
+l3die2
+ld4in4e
+l2d1in
+l5di5ne4s
+ld3is2h
+ldi4s1
+ld5li
+l2dl4
+l3do
+4le.
+3leagu
+lea2
+lea4g
+le5a1t2io2
+leav5er1
+le2av
+l3eb5ra
+le1b
+le2br4
+le3c2a
+le5cha2
+le2ch
+lect5ica
+lect2i4c
+le2ct
+2l2ed
+le5dr2
+leg1a
+l3ega2n
+3le2g1g
+le4gin
+le1g2i
+leg3o
+le3gra
+le2gr2
+lek4
+4l4e4l2ed
+l2ele
+lel5o
+le1lu5
+lem5enc
+le1m2e4
+le1men
+lem3is
+l5em1iz
+5le2m1m2
+l3e4m1n2
+le2mo
+l4em5on
+l5en2da
+l2e4nd
+len5da2r
+lend4e2
+len4do
+l4e1ne
+le5n2ie2
+len1i
+len3o
+4len1t2io2
+lent2i
+l4en5u
+le3on
+leo4s2
+le5q
+2ler1
+le5rec
+l2er2e
+5l4er2i1a2
+l4eric
+le5r2ig
+ler3om
+leros4
+ler3ot
+4l4es.
+le3s2c2o2
+le2sc2
+3le4s4s
+1let
+le5tra
+letr2
+le5tr2e
+5le5tu5
+leu4r5
+2lev
+l3eva
+5leve
+lev5it2a
+levi2t
+le4wi2
+l5ex1a
+1ley
+lf5i2d
+l2fo
+lf3o2n
+l1g2
+l4gal
+l4gem
+lg2i4a2
+l1g2i
+l4gi2d
+l4g2oi
+l3h
+4li.
+li4an1i
+l2i1a2
+lia2n
+lias4
+lib1r4
+l1ic.
+5l4i2ch
+li4cie2
+li1c2i2
+5li5c2io2
+l3ic3on1
+l2i2c2o2
+lict4o
+li2ct
+l2i4cu
+l3id1a
+li2d
+l4ida2r
+5lid3i1f
+3l4ieu
+lie2
+l4i2fe
+l2i1f
+l4i3fo
+lift5er1
+li2ft
+1l2ig
+li5ger1
+li1ge
+light5i
+li2gh
+ligh2t
+5l2i1h
+3l2ik2
+1l4il
+lil4i
+li2m2b
+limet4e
+lim2e
+li1me2t
+lim4p
+l4i2na.
+lin1a
+l4in2as
+l2i4n4d
+l4ine
+5l4in3ea2
+lin4er.
+lin1er1
+lin4e2r1s2
+lin4ger1
+l4inge
+li4ng
+l4in2g3i
+5lingt
+3l4in1gu
+3l4in1q
+lint5i
+3li2o1g
+l2io2
+l4i4ol
+li2o3m
+li3ot4
+li3o4u2
+5liph
+l2ip
+li2pt5
+l2i1q
+3l2ir
+l1is
+l4is2k2
+5lisse
+l2i4s1s
+l1it
+l2it.
+l3it5a
+5liter1
+3l2ith
+5l2i1t2i2a2
+3l2itr2
+lit4u
+l4iv
+l5iv1at
+l2iva
+liv3er1
+liv5i2d
+lkal5o
+lka4l
+lk5at
+lk3er.
+lker1
+lk3e2r1s2
+ll2
+l1l2a
+ll2a4ba
+ll1ab
+lla2ct4
+ll4ac
+l5l4as
+l4l4aw
+l5le1b
+l1lec
+l1leg
+l3lei
+l1lel
+lle5m
+l1len
+l3lep
+l3leu
+l3lev
+ll3f
+l1li
+lli5a2m
+ll2i1a2
+lli4a2n
+llib4e
+llic4
+l4licl2
+ll2i5c2o2
+l5lie2
+llig1at4
+l1l2ig
+l2lin
+l5lin.
+l3lin1a
+l3l4ine
+l5l2io2
+ll4i5v
+ll3m2
+l1lo
+lloc3a
+l1l2oc
+lloc5u
+l1lo2q
+l4lov
+llow5er1
+ll3p
+l4l3s
+ll5t
+l1lu
+llun4
+l5ly1a2
+l2ly
+l3ly1c
+l3ly1g
+l3ly1h
+l3ly1i
+l5lym2
+lm2
+l1ma
+l1m2e
+l4mer1
+lm3i4ng
+l5m2i3p
+l2m3od1
+l1mo
+l1n4
+l3ne
+lneo4
+2lo.
+5load
+l2oa2
+5l4ob3a
+1l2oc
+loc3al
+loc2a
+loc5ul
+lo4cus.
+lo1cus
+2lo1cy
+l3od1i4s2
+3lo3dr2
+1l2o1g
+lo5ga2n
+lo2ga
+4loi.
+l2oi
+lo5m1i
+l2om
+lo2m4m2
+lon4al
+lon1a
+lo2n4e
+l5onel
+lo5ney
+long5in
+lo4ng
+lon2g2i
+3l4o1n2i1a2
+lon1i
+lon2i4e2
+l3onis
+l3on1iz
+loom5er1
+l2oo
+lo2o4m
+loom2e
+lop4e
+5lo5pen
+l3o2p1m
+1lo1q
+l4o2r4ed
+l2or2e
+lor5i3at
+lor1i
+lor2i1a2
+lor4i2fe
+lor3i1f
+lo5rof
+loros4
+l4os.
+lo1so
+lo4ss4
+los5sie2
+lot5at
+l2ot
+loth4ie2
+l4oth
+lo5tu
+5lo2up
+lo4u2
+lp1at
+lp3er1
+lph2
+l5phe4
+l3ph1i4n
+l2pho
+l3p2ie2
+l3pit
+lr4
+l3ri
+l3ro
+l5ru
+4ls
+l5s2a4m
+ls5a2n
+lsi4f2i1a2
+ls2i1f4
+lsi4m
+ls4is2
+l5s2k2
+ls4p
+l1s2t2
+lt4an3e
+lta2n
+l4ta4ng
+lt5ant
+l5ta2r
+l1te
+l4tei4
+lter2n3
+lter1
+lth3i
+lt2i4c2i2
+lt1ic
+ltim4a
+l1tim
+lt1in4
+lti3t
+l3t4iv
+lt4or
+l1tr2
+ltram2ont5
+ltr2a2m
+ltra3m4on
+ltra1mo
+l1tu
+l4tus
+4lu.
+l2u1a2
+lu4ch4
+l4uc
+lu2c5o2
+luc5ra
+lucr2
+lu4cu
+4lue
+lu1en
+lu5er1
+l2u1i2
+lu4it
+lum4bri
+lu2m1b
+lumbr4
+lu4mo
+5lum2p
+lu2m5u
+lunch5eo
+lun1
+lun2ch
+lunche2
+5lune
+l3unta
+lu3or1i
+5l2up
+3lur3o
+lu4r
+lus2k5
+lu4ss4
+lut5a2n
+4lut5a2r
+5lution1iz
+lut2i
+lu3t2io2
+lution1i
+lu5t2oc
+lut2o
+lut5r2
+lu1v2
+lv5ate
+l5vet4
+l4vi
+l4vor
+l1vo
+l3w
+lx4
+2ly
+4ly.
+ly1c
+ly4ca
+lyc4l2
+ly2c5os
+ly1c2o2
+lym2
+lymph5
+lym1p
+l2yp2
+ly4pa
+lypt5o
+ly2pt2
+3lyr
+lys5er1
+l4y2s
+3ly3w
+3lyz
+lz4
+4ma.
+m4ac2a
+mac3ad
+ma5ch2in2e
+ma2ch
+mach1in
+5mach2y
+ma4cis
+m2a1c2i2
+ma2ct4
+4mad.
+4mada
+4ma4d1s2
+ma4ge
+5m4a2g1n2
+2mago4
+2m2ah
+ma5ho
+3m2a4i2
+4m4ai.
+mai2d3
+5m2ak
+mal3a4p
+mal2a
+mal5ar1i
+mala2r
+5m2ale2
+ma2l5ed
+mal3e1f
+m3al1g2
+m3al1is
+m4al4is.
+mal3le
+mall2
+mal4li
+2m2a2m
+mament4
+ma3men
+mam2e
+m5ament.
+1ma2n
+3m4an.
+man3a
+man5da2r
+ma4nd
+man2da
+man3dr2
+man3ic4
+man1i
+man4ica
+ma5n2il
+m4a4n2s
+man3te2l5
+man2te
+2m2ap
+m3aph
+1ma2r
+5mara2n
+mar5ol
+ma5ro4n
+ma3r2oo4
+mar5ri
+m2a4r1r4
+mar4shi
+ma2r2s2
+mars2h
+mar3v2
+ma3son
+m2aso
+massi4
+ma4ss2
+mass5i4ng
+mas2s1in
+3mas1t2
+ma4s4t4ed
+maste2
+mast4ic
+mas4t1in
+m4at.
+m4aten
+m4a3ter1
+mater5n4
+m4at1it
+mat4iti
+m4atiz1a1
+mat1iz
+m4a3t2o1g
+ma2to
+mat5om
+ma3top
+m4a4t1s
+3m4a2t1t4
+ma5tur2e
+m2a2tu
+matu4r
+m2av4
+2m1b
+mba2t4t4
+m2b4d
+m5bec
+mb2e
+m5ber3er1
+m2b2er2e
+mber1
+m4be2r2y
+m4be1s2
+mb2i
+m2bic
+m5b1il5
+m4b3i4ng
+m4b2is
+mb5ist2
+mbival5
+mb2iva
+m5b2ler1
+m2bl2
+m3bli
+mbru4
+mbr4
+mbu3l
+mbu4r4
+m1c
+m5d
+m2e
+2me.
+mea5g
+mea2
+me5a4nd
+mea2n
+me4ba
+me1b
+me4b2i
+2m2ed
+4med.
+3me1d2i1a2
+med5ic1at
+4medie2
+m5ed5ies
+3med1it
+me4do
+m5e2d2y
+me2g
+5meg2a1
+meg1a5t
+4m2ele
+mel5ee
+mel5ler1
+mell2
+mel3on
+mel4t
+melt5er1
+mel1te
+me2m
+4m5e1m2e4
+1men
+3men.
+2men1a
+men4ag
+mend5er1
+m2e4nd
+mende2
+men1d5o
+m4e1ne
+ment5or
+men2t2o
+5men4t1s
+5me2o1g
+me4p
+m5era2n
+mer1
+4m2er2e
+mer4i1a2
+2me2s
+mes5en
+me5s2i4a2
+mes5q
+3me2sti4
+mest2
+1me2t
+meta3t
+met2a
+met1e
+4met4ed
+meth4i
+me2th1
+met1i4c
+met5i1c2i2
+met3o
+met3ri
+metr2
+m1f
+4m3h
+4mi.
+m1ic
+m4i4cin
+mi1c2i2
+m2i3c2o2
+3micro
+m2i1cr2
+m4i2ct
+mi3cul
+m2icu
+mi4cus
+m4idi
+mi2d
+mi2d4in
+mid5on
+mi1do
+mi5fi
+m2i1f
+mig5a
+m2ig
+migh5ti
+mi2gh
+migh2t
+mi2gr2
+4mij
+mi5ka
+m2ik2
+m2il
+m3i2l3a
+mil4ad
+4m5ilie2
+mil5ies
+3mill2
+mi5lo
+mil4t
+3m2im
+mim5i
+5m2i4n4d
+mind5er1
+minde2
+min4er.
+min1er1
+min4e2r1s2
+m4ing5li
+mi4ng
+min2gl2
+min5ie2
+m2in1i
+m4init
+min3ol
+m2ino
+1m4int
+minth5o
+minth2
+m2i3o2
+m2i3p
+mir1ab4
+m2ir
+mir1a
+mi5r2acu
+mira4c
+m2is.
+m4i2s3c2
+mi4se
+4misem
+mis3ha2
+mis2h
+5missi
+m2i4s1s
+m3i4st.
+mist2
+mis4t1in
+m3i2s4t3s
+mi2t
+m5ita2n
+mit1a
+4mity
+3m2i1u2
+5m2ix
+4m1l
+mlo5cut2i
+m1l2oc
+mlun4
+2m1m2
+mma4n4d
+m1ma2n
+mmand5er1
+mmande2
+m3medi
+mm2e
+m2m2ed
+mmel5li
+mmell2
+mmet4e
+m1me2t
+mm2ig3
+mm2in3u
+mmis3
+mmob3
+m1mo
+m5m2oc
+mmor3
+mmut3a
+4m1n2
+mn2i1f4
+mn1i
+m4nin
+mn2i5o2
+mnis4
+mno5l
+1mo
+4mo.
+2m2oc
+mod1
+mod5ifie2
+mod2i1f
+mogast4
+m2o1g
+mo2ga
+mo3ga4s
+mo4go
+mo2g5ri
+mo1gr2
+m5o2ir
+m2oi
+mok4i
+mol3a
+4molog.
+mo1lo
+mo1l2o1g
+4molo2g1s
+4molo2gu
+mo3ly
+m2o1m
+mo4mis
+mom1i
+m4on
+mon1a4
+4m4o2n2ed
+mo2ne
+mo4n1g
+mo4no
+mono1lo4
+monolo3g5i
+mono1l2o1g
+m4op
+mophil5i
+mo5phi4l
+m1o2p4t2
+m3or1ab
+mor1a
+m3orat4
+mor4a2to
+m5ord
+mo5rel
+m2or2e
+3mor2i1a2
+mor1i
+m5or1iz
+mor5on
+3morp
+3mor2se
+mo2r1s2
+mor5tal
+m2ort2
+m4o3sp
+5most2
+m4o3sta
+2m1ous
+mo4u2
+m1p
+m3pa
+m4panc
+mpa2n
+m4pant
+mp4a2th3
+mpel5li
+mpell2
+m5per3er1
+m4p2er2e
+mper1
+mp4er3i
+mpet5it
+m3pet
+mpe2ti
+mphal5o
+mpha2
+m4phe4
+m4p4h2l
+m2pi
+mp5i2d
+m5p2ig
+mp3i2ly
+mp2il
+mp1in
+m3p2ir
+mp3is
+m3po
+mpol5it
+mp2o2t
+mpov5
+mp3to
+m2pt2
+mp5tr2
+m3pu
+m5q
+m3r
+m4r2y
+4m1s
+m5sel5f
+m5si
+ms2ol4
+mtu4
+muc4k4e
+m4uc
+muck1
+mu2ff4
+muf2
+mul1t2
+m5unc
+mun1
+mu5n2io2
+mun2i
+mun3is
+mus5c2o2
+m2usc2
+mu4se
+mus5ke2
+mus2k2
+mu3til
+mut2i
+m1v
+m3w
+2my
+5my3c
+my4d4
+my3e
+3my1i
+5mys1t4
+m4y2s
+3myt
+n1a
+2na.
+na2c
+na2ch4
+na5cious.
+n2a1c2i2
+nac2io2
+nacio4u2
+na5ciou2sl4
+nac4te
+na2ct
+nac5t2iva
+nac2t1iv
+na5cular1i
+nacu1l2a
+nacula2r
+na4d4a
+nadi4
+nad4op
+na2do
+n2ae.
+naf1fi2l4
+na2ff
+naf1fi
+nag4a
+n4a3gen
+5n4a5geri
+nager1
+na4g2i
+n5ago
+5n4a3gr2
+5n2ah
+5nail
+n2ai2
+na5iv
+n2ak2
+4na2l2ed
+n2ale
+n5al1g2
+n4al2i1a2
+n2a3ly4
+1n2a2m
+3nam2e
+na4m4n2
+na5n2as
+na2n
+n1an2a
+nann2ot4
+nan5no
+nan1n4
+nan4t2a
+nan5t4ed
+nan2te
+nan4t2o
+n2a5o
+4n4ard
+na2r
+nar5tisti
+nart2
+nar2t1is
+nartis2t2
+n2as
+nas5i
+nas5p
+na4s3s2
+nas5te2
+nast2
+nat5al
+n2a2ta
+na5ta3t4
+n4atee
+na3the2
+n4a2th
+nat4h4l
+nati4
+n4a4ti.
+nat5i2c
+n4a2to.
+na2to
+na3t2om
+na4tos4
+n2a2t4r2
+na5tur1i
+n2a2tu
+natu4r
+naugh5ti
+n2au2
+nau2gh
+naugh2t
+naus3
+3naut
+naut3i
+n2a2v
+na5vel
+n3b4
+nbarric5
+nba2r
+nb2a4r1r4
+nbar3ri
+nbe2au4
+nb2e
+n3bea2
+nbe4n
+nb4e1ne4
+nbet4
+nbit4
+n1c2a
+n4cal.
+nc1al
+ncarn5at
+n1ca2r
+ncar2n2
+ncarn1a
+ncel4i
+ncen4t5ri
+n1cen2
+n3cent
+ncen1tr2
+n4cept.
+n1cep
+nce2pt2
+n3cer1
+nc2er4e
+n4c4es.
+n5ce2t
+n5cey
+n3cha2
+n2ch
+nch4ie2
+n3cho
+nch5o1lo
+n3chu
+n4cic
+n1c2i2
+ncid5en
+nci2d
+n4c2i3f
+ncip5ie2
+nc2ip
+n1c2l2
+n4cles
+nc2le2
+n3c2oc4
+n1c2o2
+nco5pat
+nco1pa
+n1cr2
+n2c1t
+nc4t1in
+nct4ivi
+nc2t1iv
+nct2o
+n1cu
+ncu4lo
+n4cun1
+n4curvi
+n1cu4r
+ncur1v2
+nc4us4t2
+n1cus
+4nd
+n2da
+n3d2a4c
+n3dal
+n4d4ale
+n3d2a2m
+nd3anc
+nda2n
+nde2
+n3dea2
+nde3c2i2
+n3dec
+n1d2ed
+nde4l
+ndeleg4
+nd2ele
+nd3enc
+ndepr2e4
+nde1p
+nde1pr2
+n3derl
+nder1
+nde4s
+ndes5cr2
+n5de2sc2
+n5dez
+nd4hi
+n4d1h
+n1dic
+nd2ic5u
+ndid5a
+n1di2d
+n3die2
+nd5i2ly
+ndil4
+nd4in4e
+n2d1in
+nd3ise
+ndi4s1
+nd5is4i
+nd5ism.
+ndi2s1m4
+n2d5ity
+nd3ler1
+n2dl4
+nd1li
+n5d2oc
+n1do
+nd2or4
+n2do4u2
+nd5ou4r
+ndrag5
+ndr2
+n3dr2a2m4
+n5dron
+ndu4b
+n1du
+nduc2t5iv
+n3d4uc
+ndu2ct
+n4dun1
+nd2we
+n2d1w
+n3dy1i
+n2d2y
+2ne.
+ne3alo
+nea2
+n3ea2r
+ne2b3u
+ne1b
+5neck1
+ne4cl2
+ne2c2o2
+n5ec1t2om
+ne2ct
+2n2ed
+3nedi
+ne4du4
+neg3a
+ne3go
+5negu
+n4eis4
+2n2ele
+ne5l2i1a2
+ne1l2i4g
+n4e2ly
+ne2mo
+4n1en
+n3e4nd
+neo3l
+neon4
+ne2p
+n1er1
+4n4e2r4ed
+n2er2e
+5neri4ng
+ner3in
+ner5o
+ne4r4r5
+ner2v2
+ner2v5in
+2n4es.
+n1e2sc2
+ne3s2i1a2
+1ne4ss
+n1est2
+nes3t4r2
+net3a
+net3ic
+ne4t2o1g
+net1r2
+neuma5to
+n4eum
+neu1ma
+neut5r2
+nev5er1
+n4ew
+news3
+n4eys.
+ne4y3s2
+n3f
+n1fo4
+nform5er1
+n5f2orm
+nform2e
+nfor1tu5
+nf2ort2
+nfra2n3
+n1fr2
+4ng
+ng2a
+n4gae
+n5gee
+n3geri
+nger1
+n5gero
+n2gh4
+n2g2i
+n5gic
+ngi2o4g
+n3g2io2
+n5glem
+n2gl2
+n3glie2
+n5gl2io2
+n2g1n2
+n1go
+n4g2r2y
+n1gr2
+n1gu
+n2gum
+n1h2
+nh1ab3
+nha2
+nho4
+nh2y2
+nhy1d5
+n1i
+4ni.
+3niac
+n2i1a2
+ni3ba
+n4ic1ab
+ni4cen2
+n4ice
+4nicl2
+nic2t5a
+ni2ct
+ni4cul4
+n2icu
+ni4d2i1o2
+ni2d
+n2ie2
+ni4e2r1s2
+ni1er1
+ni2f4f
+n2i1f
+ni2ft4
+nif5ti
+n2i2g
+night5i
+ni2gh
+nigh2t
+n3i2g1m4
+3ni2gn2
+nik5e
+n2ik2
+n2il
+ni2l4a
+n3im1
+n4im2e
+5ni1me2t
+n4ine4s
+nin4j
+5n2in1n4
+n4in2u
+5n4i1ol
+n2io2
+ni1o4u2
+3nipu
+n2ip
+5n2iq
+n4is.
+n4is2k2
+ni2s4l4
+nis4o
+n5i4s1s
+nis5ter.
+nist2
+niste2
+nister1
+nis5te2r1s2
+nit2ch4
+ni2tc2
+ni4te
+ni3tho
+n2ith
+n4itos
+ni5tra
+n2itr2
+nit5res
+nitr2e
+ni3tri
+nit4u4r
+n2iv
+n2iv4a
+ni3vo
+niv2oc4
+niz5en
+n1iz
+n1j
+nj2a2m2
+n1ja
+njur5i
+nju4r
+4n2k
+nk5a2r
+n5ker5o
+nker1
+n3key
+nk5i1f
+nk5i2l
+4n1l2
+nla4n2d5
+nl2a
+nla2n
+n3le
+n1let4
+n3m
+nm4a3ter4
+nmor5ti
+n1mo
+nm2ort2
+n1n4
+nne4
+nnel5li
+nnell2
+nnerv5a
+nn1er1
+nner2v2
+n3n1i
+nni3ki
+nn2ik2
+nnov3
+n5ny1i
+n2ny2
+4no.
+n5ob2i
+no5b1il
+no2b4l2
+no5blem
+nobser4
+no4b1s2
+n5ocu1l2a
+n2oc
+no4di
+n4o2d2y
+noe4c
+no4f2a
+nois5i
+n2oi
+n4ois
+n5ol.
+no3l2a
+nol4i
+no2m3al
+n2om
+no1ma
+1nom1i
+no2mo
+4no2ne
+3n2oni4c
+non1i
+5nood
+n2oo
+nop5i
+nora4t
+nor1a
+nor5di
+nor4i1a2
+nor1i
+nor4is
+nor3ma
+n2orm
+n4oro
+n2or4t2
+n4os.
+nos4o
+n4o3sp
+not1a
+n2ot
+3note
+n1o4u2
+n4oug4
+3n2oun1
+2nous
+nou5v2
+nova4l
+nove2
+no2v3el
+no4v2el5e
+n4ow
+now5er1
+now3l
+n3p4
+np2il4
+n1pl2a4
+np2l2
+npoin4
+n1po
+np2oi
+npo5l2a
+n3p4os4
+npri4
+n1pr2
+n1q
+n4que1f
+nqu4
+n1r
+nre4i4
+nr2e
+nre3m
+nres5t4r2
+nrest2
+4n1s
+ns2c2
+n2s2c2o2
+ns3c2ot
+n4s1cu
+n5sec
+nsec4te
+nse2ct
+n2s2es
+n5seu
+n3s2h2
+n2si
+n4s3ib
+n4sic
+n5s2ick1
+n3s4i2d
+n3sie2
+ns5ifi
+ns2i1f4
+ns3i4ng
+n2sin
+n3s2io4
+n3s2is2
+ns1i2t
+n4s3iv
+nsolu4
+ns2ol
+n5son
+n4s2or2e
+n4s3o2r2y
+n3sp2ir
+n3s2t2
+nsta4
+nstil4
+n3su
+nsur4e
+nsu4r
+n3swa
+nsw2
+ntab4u
+n2t1ab
+nt3age
+nt1al
+n4t3anc
+nta2n
+nt5a4nd
+ntan5eo
+nt4ane
+n4t3ant
+nt4ar2i1u2
+nta2r
+ntar1i
+n5tas1is2
+ntas3i
+nt3as4t2
+nt1at
+nt5a2th
+nt3ati
+nt5a2t1iv
+n5t2au2
+n1te
+n4tec
+n4tee.
+n4tees
+n3te2l
+ntend5en
+nt2e4nd
+ntende2
+n4te2o
+n4ter.
+nter1
+n3teri
+n5ter2n2
+ntern5al
+ntern1a
+nter5nat
+nth2
+n1the2
+nt4her5
+nth5in2e
+nth1in
+nt2i
+n2t4ib
+n4t3ic.
+nt1ic
+n5ticis
+nt2i1c2i2
+n5tic1iz
+n4ti4c5s4
+nt2ic4u4
+n3ti2d4
+n1tie2
+n4tify.
+n1t2i1f2
+nti3fy
+n3t2ig
+nt5ilati
+nti2l3a
+n5t4ill2
+nt3i4ng
+nt1in
+nt5ing.
+n1t2i3p
+n4ti1pa2r
+n4tis.
+n2t1is
+nt3i2s1m4
+nt3is2t2
+n5ti1t2io2
+nt3iz
+n2tj
+n1t2o
+n3t2om
+nton1i4
+n5top
+n1tr2
+ntr2a3d
+nt3ral
+n4tran2t
+ntra2n
+n3trat
+nt5re4s4s
+ntr2e
+n2t3ril
+ntrol5ler1
+ntrolle2
+ntroll2
+n5trym
+n2t4r2y
+n1tu
+n3t2u1a2
+ntub5
+ntup5li
+nt2up
+ntup2l2
+n5tu4r
+n2ty
+n2u
+n2u1a2
+5n4uc
+3nud
+nud5i
+nu3en
+nug4a
+n2u3i2
+nu4is
+5nuk
+n4u1lo
+n3ult
+nul1tim5
+nu1m2e
+5numenta
+numen4t
+nu1men
+5numer1
+5nu1mi
+3nunc
+nun1
+nu3tat
+n5u2t1iv
+nut2i
+nu4t2o
+nu1tr2
+n3v2
+nve2
+n2vel3
+nv4e1n4e
+nven5o
+nver2s5a2n
+nver1
+nve2r1s2
+nvi4t
+nvoc5at
+n1vo
+nv2oc
+nvoc2a
+n5w
+nwin4
+nwi2
+n3w2om4
+n1wo
+n2x4
+2ny2
+5nyc
+nym5i2t
+nyth4
+n1z2
+nzy4
+2oa2
+o5ace
+o3a2ct
+oad5er1
+oad5i
+o3ag
+oak5er1
+o2ak
+o3ales
+o2ale
+oal4i
+oal5in
+o5al1it
+oan4t
+oa2n
+oap5i
+o2ap
+oar5er1
+oa2r
+oar2e
+oar4se
+oa2r2s2
+oast5er1
+oast2
+oaste2
+o2a2t5a
+oat5ee
+o4at5er1
+4oba
+o1be4l
+ob2e
+ob2i
+ob3i4ng
+2o1b2i3o2
+ob3it
+o3bl2a
+o2bl2
+ob1li
+4obo2
+ob3oc
+o5bol
+o5b2ot
+o3bra
+obr4
+obr2om4
+o2b5t
+ob3ul
+o3bus
+2oc
+oc2a
+o4c1ab
+o3cad
+oc5ag
+o5cal1li
+oc1al
+ocall2
+o4c5a2t1iv
+oc1at
+oc5a2to
+4o3ce2
+o4cea2
+ocen5o
+o1cen2
+ocess4i
+o5ce4ss
+och4e2
+o2ch
+och5in
+o3ch2o4n
+o1cho
+ochro4n
+o3c2hr
+o5chu
+oci3ab
+o1c2i2
+oc2i1a2
+oci4al
+o1cl2
+o2c2le2
+o1cr2
+oc2r2e3
+o2ct2
+oc2te
+oc1to
+ocu4lu
+ocum4
+oc5uo
+ocu4ss4
+o1cus
+ocus5si
+oc3ut5r2
+o1cy
+o5cy4t
+ocyt5o
+od3al.
+o3de4c
+o5de3g
+ode4ga
+o5d2e4n4d
+o3dent
+odes4
+od3ica
+o4d1ie2
+od3iga
+od2ig
+od4il4
+od1i4s2
+o3d2is5i1a2
+od5it
+5od1iz
+od3li
+o2dl4
+o2do
+od5o1lo
+o2d5ous
+odo4u2
+o3dro
+odr2
+od5ru
+o2du
+odu5cer1
+o3d4uc
+o4duct.
+odu2ct
+o4duc4t1s
+od3ul
+o5dyt
+o2d2y
+oe3a2
+oe4b2i
+oe1b
+oe5cu
+o2e4d
+o5ee
+oe5ic
+o3elec
+o2ele
+oel1li4
+oell2
+oelo4
+oe3o4p
+oep5
+o5eq
+o3er1
+oes3t2
+o1et
+o4et.
+oet3i
+oet4r2
+3oeu
+o3ev
+o3ex
+o3flu4
+ofl2
+4o1fo
+o4ful
+o3fu
+ofun4
+2o1g
+o2ga
+o3g2a2m
+og5a2r5
+o3ga4s
+o3gen1
+o5gey
+o3g2i
+o4g2io2
+og2n1a
+o2gn2
+ogon1i4
+o4g2ot
+o2gri
+o1gr2
+o4g4ro
+og4s2h
+o2g1s
+o2gu
+o5gyr
+o2gy
+o1h2
+o3ha2
+oh1ab3
+o3he2
+oher4er1
+oher1
+oh2er2e
+o3ho4
+oh2y4
+2oi
+oi4c
+o3ic.
+o4i5ch
+o2i4d
+4oide
+o2ig4
+oi5ki5
+o2ik2
+oi2l3er1
+oil5i
+oin3de2
+o2i4nd
+o3i4ng
+oin4t5er1
+oin1te
+oin4tr2
+o2i4o2
+4ois
+o3i2s1m4
+oi4t
+oit4al
+oit1a
+o2ith4
+o1j
+ok4ine
+ok1in
+ok3l2
+ok5u
+ol4a4c
+ol2a
+o4lack1
+o5lali
+ol4al
+ol4a2n
+ola4n5d
+ol5ast2
+ol4as
+ol4at5er1
+ola4te
+ol5ch
+ol1c2
+ole2c4
+ol5e1c2i2
+ol5efi
+ole1f
+o3leo
+ole4on
+o3lep
+o2l1er1
+o3lest2
+o3leu
+o1l2i1a2
+ol3ica
+o3l4ice
+ol5ic1iz
+oli1c2i2
+ol5ick1
+ol3i4c5s4
+ol5id.
+oli2d
+oli2e2
+o3li1er1
+ol5i4es.
+o5l2i1f
+ol4i4f3e
+oli5go
+o1l2ig
+o5lin1a
+ol3i4ng
+oli5os
+ol2io2
+ol5ip4
+ol1is4
+ol2it
+olle2
+oll2
+ollim3
+ol1li
+ol4lop4e
+ol1lo
+ol4ly1i
+ol2ly
+ol3mi
+olm2
+o1lo
+4o1l2oc
+ol3o2i4d
+ol2oi
+o4lon1a
+ol5on5el
+olo2n4e
+ol1or
+o3los
+ol1o4u2
+4ol1ub
+o3lu1mi
+o5lun1te
+olun1
+ol3us.
+oly3ph
+o2ly
+ol2yp2
+4olyt
+2om
+o1ma
+o4m1ab
+o2mac
+o2mal
+o4mane
+o1ma2n
+o3mas1t4
+o3mat
+om4b2e
+o2m1b
+o2m2e4d
+om2e
+ome4g
+o5meg5a1
+ome3li
+o2m3en1a
+o1men
+omen4t
+o3meri
+omer1
+om1i
+o3m2i1a2
+om1i2c
+om2i1c5r2
+om4ie.
+omie2
+om2il4
+om4i2ny2
+om2i4s1s4
+om2i2t
+omm2e4
+o2m1m2
+om2n1a
+o4m1n2
+omn1i3
+o4m2oi
+o1mo
+omoli3
+o2m4o4n
+om5o2ny2
+o4mos.
+omo2t5iv
+om2ot
+o2mo4u2
+om5p2il
+om1p
+om2pi
+ompt5er1
+om2pt2
+ona4d
+on1a
+on3ai2
+o5nas.
+on2as
+onast5i
+onast2
+on5a2t1iv
+onati4
+4on2au2
+on1c
+onc1at3
+on1c2a
+on4cho
+on2ch
+5ond5a2r
+o4nd
+on2da
+ond5ent
+onde2
+on3der1
+on3dr2
+on5d2y
+o2ne
+4onea2
+onec4r2
+4o2n2ed
+on1ee
+on5ell2
+o3neo
+o1n3e4ss
+on1et
+ong3at
+o4ng
+ong2a
+on4gu
+4on1h2
+4o1n2i1a2
+on1i
+on5ia2r
+2oni4c
+onic5a
+oni4c1al4
+on4i2d
+on3ies
+on2ie2
+on3i1f
+o5n2i2g
+o1n2io2
+on4k4s
+o4n2k
+4onnes
+on1n4
+onne4
+on5o4di
+on5oi
+o1no4m1i
+on2om
+4o5nom1i2c
+ono3s
+o5not1a
+on2ot
+o4n1s2
+2ont
+ont5a2ne.
+ont4ane
+onta2n
+on4ter1
+on1te
+onti5fi
+ont2i
+on1t2i1f2
+onton5
+on1t2o
+on1t4r2
+on4tr2e
+on5u4r
+on2u
+o5nus
+onvo5lu
+on3v2
+on1vo
+onvo2l
+on2z2
+2oo
+oof3er1
+o2o1i
+ook3er1
+ook3i
+oo4le
+ool5i2e2
+o2o4m
+oon3i
+oo2p
+oop4ie2
+oop1i
+o3o2p1t2
+oo4se
+oost5er1
+oost2
+ooste2
+o2o2t
+oot3er1
+ooz5er1
+o2oz
+o1pa
+o4p1ab
+o5pali
+opa5ra
+o1pa2r
+op4a2th5
+o5pec
+ope4n2s4
+op1er1
+3opera
+4opera4g
+o1pha2
+o4phe4
+oph4ie2
+o5phi4l
+op5hol
+o1pho
+o1ph2y
+ophy5l2a
+o3phy2l
+op1i
+op3ies
+op2ie2
+op5i4ng
+o3p2it
+4op2l2
+oplast4
+o1pl2a
+opl4as
+o4p2oi
+o1po
+opol3i
+op4o2n4
+o2p5o2ny2
+op5or1i
+op2oun4
+opo4u2
+o2p5ov
+op2p2l2
+o4p1p2
+op5pli
+oprac4
+o1pr2
+op3ra2n
+opr2e4
+opro4l
+op5r2op
+op5so
+o2ps2
+1o2p1t2
+op2ta
+op1u
+o5qui3al
+oqu4
+oq2ui2
+oqu2i1a2
+or1a
+or5a2do
+or2ad
+ora4g
+o5r2ai2
+or5al
+4ora4ls
+or2a2m4
+oran3e
+ora2n
+orat1or5
+ora2to
+or2b3in
+or1b
+orb2i
+or4ch
+or1c2
+orch3i
+or4du
+2or2e
+or5ead
+orea4
+ore5a2r
+ore5c2a
+ore3f
+ore3g
+or3ei4
+oreo5l
+or3e2sc2
+ore3s2h
+or3e4ss
+orest5at
+orest2
+or5este2
+or5e2t2t4
+ore4v
+5orex
+or4fr2
+or1f
+or5gn2
+or1g2
+or1i
+4o4ri.
+or3ia.
+or2i1a2
+4oria2n
+ori4c2i2
+ori5ci2d
+or2i1en4
+orie2
+or3i1f
+5or2ig
+ori5ga
+or4i4no
+4orio.
+or2i3o2
+or5ion
+4orios
+ork5a
+or2k
+2orm
+orm1i
+or3n4a
+or2n2
+5or1nis
+orn1i
+or3nit
+or3o2ne
+o5r2oo4
+or5ose
+or5oso
+or1o4u2
+orre2l3
+o4r1r4
+orr2e
+orres3
+or4sc2
+o2r1s2
+or4sey
+or2se
+or4sti
+orst2
+2ort2
+ort3a2n
+ort3at
+ort3er1
+or5t4es.
+or2t2es
+or3th2i
+or4t2h2r
+or4tit
+or2t3iz
+or4t1or
+or1t4o
+or5tra
+ortr2
+ort3r2e
+4or1u
+or4un1
+or2y5p
+o2r2y
+o3s2a5i2
+os3a2l
+osa2r5
+o1sc2
+os4ca
+os4ce
+o2s2ch2
+o4s1c2i2
+osclero5s4
+oscl2
+osc2le2
+osc2ler1
+o3sec
+osec3u
+ose5g
+os5enc
+o3se4n2s4
+os5eo
+oser4
+o2set
+os5eu
+o3s2i1a2
+osi4al
+osi4a2n
+os5i4de
+os4i2d
+o3si1er1
+osie2
+os5i1f4
+o2s1in
+o4s1is2
+o5ske2
+os2k2
+o5son
+o3soph
+os2o2p
+os3o1po
+4osp
+o3spec
+os1pi
+os4sa
+o4ss
+oss5a2r
+os4s2it
+4osta
+ost2
+ost5age
+os4ta2r
+os5tee
+oste2
+os5ten
+osten5t
+ost5ica
+ost1ic
+os3til
+o5stom2e
+ost2om
+ost3or
+4osu
+os1u4r
+2ot
+ot3a4g
+o5tal1it
+ot3a2m
+ot4an3ic
+ota2n
+otan1i
+o3t2ap
+ot4a1t2io2
+o5t2a5v
+o3t4a4x
+o4t4ed
+oter4m
+oter1
+ot5est3a
+o2t2es
+otes4t2
+4oth
+othal2a2m5
+otha4
+othal2a
+oth5er3in
+ot4her1
+othe2
+o5therm
+otherm5a
+o5thor
+o5t2i2a2
+o5t4ill2
+5ot5in1iz
+ot1in
+ot2in1i
+o2t4iv
+o3t2iva
+o5tivi
+o1t2o
+o5to2n4e
+o4tor2n2
+ot1or
+o4to4u2
+4o1tr2
+otur1i4
+otu4r
+oty3le2
+o4u2
+5o2u3a2
+oub2
+ou5br4
+ou5c2a
+o4uc
+ou5c2o2
+oud5i
+4oue
+ou3e4t
+oug4
+ou5ga
+ought5i
+ou2gh
+ough2t
+ou5g2i
+oul4t
+oult5i
+ou3m
+2oun1
+ou4n2d
+oun2d5a
+ound5e4l
+ounde2
+oun5gin
+ou4ng
+oun2g2i
+oun3tr2
+oup5li
+o2up
+oup2l2
+our3er1
+ou4r
+our2e
+ou5sa2n
+2ouse
+5ous2i1a2
+ou4ss4
+out5is2h
+out2i
+ou2t1is
+ou4v5a
+ouv2
+o1v2a3le
+o5va2r
+4ovati
+ov5el3i4ng
+o2vel
+o4ver.
+over1
+o5ver3b
+ove2r3s2
+ov4ete
+ovid5en
+ovi2d
+o1vis
+ovis5o
+o2v5os
+o1vo
+ow3ag
+ow3a2n
+o5w4ay
+owd4i
+ow2d3l4
+ow1el
+owel5li
+owell2
+ow5ha2
+owh2
+owh2ith4
+ow1i2
+ow5in
+owi5n2e
+ows4
+ow5s2h
+ow5sl4
+ow5y2
+o4x
+ox3i
+oxic5ol
+oxi4c
+ox2i2c2o2
+ox5o
+2oy
+oy5a2
+o4y2s4
+2oz
+o1zo
+oz2o5i
+o3zy1g
+4pa.
+pac4te
+pa2ct
+pa5do4u2
+pa2do
+pad4r2
+pae4s4
+pa3ga2n
+4pag1at
+pag4ati
+pain2
+p2ai2
+4pairm
+pa2ir
+pa5la2n
+pal2a
+pal3in
+pa3lo
+p4a4ls
+pan5a2c
+pa2n
+pan2a
+pan1e
+pan3i
+p4a4pa
+p2ap
+pa3pe
+pap3u
+pa3p4y
+1pa2r
+para5s2
+par3l
+pa3r2oc
+pa3rol
+par5o4n
+1p4as
+pass5ive
+pa4ss2
+pas4s1iv
+pas1t2
+pas4t1in
+p4a3ter1
+pa2t3i4n
+p5a2to
+pat4ric
+p2a2tr2
+pat1ri
+pa5tric2i1a2
+patri1c2i2
+5p2au2
+paul5e
+pa2u3p
+pa5vi4l
+p2av
+5paw
+pawk4
+paw5ki
+2p1b
+p1c4
+p5d2
+2pe.
+pear4l5i
+pea2
+pea2r
+pe4c2o2
+pec4tu
+pe2ct
+2p2ed
+5ped3a
+3pede2
+3pedi
+ped3i4s1
+3pe4d1s2
+pe2du
+p4ee
+pe2f
+4p2ele
+pe5le3o
+pel5v4
+pen4at
+pen1a
+5p4enc
+pend5er1
+p2e4nd
+pende2
+pen5dr2
+pen4ic
+pen1i
+3p4en1n4
+pens5ati
+pe4n2s
+pens2a1t
+p4en5u
+pe5on
+5p2er1c2
+per1
+per3cent5
+per1cen2
+4p2er2e
+perem5i
+p4eri
+5p4er3n2
+p3eron
+per4os.
+per5t1in
+pert2
+per2t5is
+per3v2
+p4e2r2y
+2pes
+pe4s4s3
+pes5til
+pe2sti
+pest2
+3pet
+pet5all2
+pet2a
+pet3en
+pe2ti
+pet3r2
+pe4wa
+4pex
+p1f
+p5g
+2ph.
+4phae
+pha2
+pha5g2e4d5
+ph5al.
+ph2a2n
+phant5i
+phan4t
+phe4
+ph5esi
+ph3et1
+3phib
+4ph1ic
+1phi4l
+ph1i4n
+ph1is
+ph2i5th
+p4h2l
+1pho
+4pho2bl2
+4ph4o2n2ed
+ph2o4n
+pho2ne
+3phor
+ph5or1iz
+phor1i
+ph4os3p
+ph3o4u2
+3phra
+p2hr
+4p2h1s
+1phu
+ph2u5i2
+2phy.
+ph2y
+3phy2l
+4pi.
+3pia2r
+p2i1a2
+4pica
+p5i4c1al
+p2i3c2o2
+p2i4cr2
+pi2ct4
+p2ie2
+p4i1es2t2
+pi5eti
+p2i1et
+p5ifie2
+p2i1f
+pi2g3n2
+p2ig
+p2il
+3pile
+pil2l5in
+pill2
+pil1li
+5pilo
+pi3l2ot
+pim2
+pin4e
+pin5et
+3p4inge
+pi4ng
+p4in1n4
+5p4i4n1s2
+3p2i1o2
+pip4a
+p2ip
+pi4pe
+5p2iq
+pir5a4c
+p2ir
+pir1a
+pir4t2
+p4is.
+p4i2s3c2
+p2i4s2s
+pis1s5a
+pis5til
+pist2
+pis4tr2
+p2itu
+2p3k2
+p2l2
+1pl2a
+pla5n1o
+pla2n
+plant5er1
+plan2te
+plas5t2i1c2i2
+pl4as
+plast2
+plast1ic
+pla5t4o
+4p4le.
+4pled.
+p2l2ed
+3pleg
+3plen
+2ples
+4pli2s1m4
+pl1is
+4plist2
+plu2m
+plum4b2e
+plu2m1b
+plumb5er1
+p4ly
+2p1m
+2pn
+pnos4
+1po
+4po.
+po3c2a
+p2oc
+3pod
+4pof
+2p5o2i4d
+p2oi
+pois5i
+p4ois
+po5lem1ic
+po4ly1
+pol4y3s
+po1ma2n5
+p2om
+po1ma
+pom4e
+p4o2n
+pon4a2c
+pon1a
+pon4ce
+pon1c
+pon4i4e2
+pon1i
+3pon3i1f
+pon5ta
+p2ont
+2po2ny2
+po4pa
+po5ple
+p4op2l2
+4pora2to
+por1a
+por3ea4
+p2or2e
+4po2r4ed
+por3i4f
+por1i
+por3p
+3p2ort2
+por5tie2
+3p4os
+po4s1s2
+po1te
+p2ot
+poul1t5e
+po4u2
+poul4t
+pound5er1
+p2oun1
+pou4n2d
+pounde2
+pout5er1
+p5ox3i
+po4x
+5p2oy
+4p1p2
+p1pa2r3
+ppar1at5
+p4p4ene
+p3pet3
+pph4
+ppi4c
+p4p2l2ed
+pp2l2
+p5p2ler1
+p5p1let
+ppres2s5o
+p1pr2
+ppr2e
+ppre4ss
+ppr4ob5a
+1pr2
+prac1
+pr2a5d
+pra2r4
+4p4re.
+pr2e
+pre1b3
+p2r4e1d
+pr2ef5er2e
+pre2fe
+pre1f
+prefer1
+prel5a4te
+pre1l2a
+3prem
+pre5mat
+pren3
+pres3a
+pre5scin
+pre2sc2
+pres1c2i2
+p3rese
+5pressi
+pre4ss
+5pri1c2i2
+pri4es
+prie2
+4pri4m
+pring5er1
+pr4inge
+pri4ng
+pr4in2g5i
+4pr2i3o2
+p5r4i1ol
+pri4os
+pri2s5in
+pr2i4v2
+4pr2iva
+4p4ro.
+pr4o3bo2
+p3roc3a
+pr2oc
+pro4ch
+pro1l
+pron4a
+pro4ph5e4
+pr2op
+pro3pyl5
+pro2p4y
+pro3r2
+pros4i
+pros5tr2
+prost2
+pr4o3th
+pr2ot
+4p2r2y
+2ps2
+p3sac
+ps4al5t
+psa2l
+p3s2h
+p1si
+p5sin.
+p2sin
+p1s2o3m
+p1st2
+psul3i
+p1s2ul
+3psy1c
+ps2y
+2pt2
+p2t3ab
+p4tad
+p4ta2n
+p2ta2r
+pt5ar1c2
+p1t4ed
+p5ten1a
+pt5en1n4
+5pte2r2y
+pter1
+p5tet
+pt4ic
+p5tie2
+p3til
+p2t3in
+pt4ine
+p3tise
+p2t1is
+p5tisi
+p5t2om
+p4tr2
+p1tu
+pub1
+pu5b2e
+p4uc4
+pu4ch4
+pudi4c
+pu5er1
+puff5er1
+puf2
+pu2ff
+puf1fe
+pu4la2r
+pu1l2a
+pu5lar.
+pu5l1is
+pul2i
+p4u4m
+pu1m4o
+p4un1
+pu4n4a4
+3punc
+pun5g2i
+pu4ng
+pun3i
+pun2t
+pu3pi
+p2up
+pur5b
+pu4r
+pur3c2
+p4us
+push4ie2
+pus2h
+pu3tat
+p5u5t1is
+put2i
+pu3tr2
+4p1w
+2p4y
+py3e
+3py1g
+3pyl
+pyr3e
+py5t
+4qf
+qu4
+5qu2ak
+q2ua2
+4qua2r
+qua5t2io2
+2que.
+3quer3a
+quer1
+4qu2er2e
+4qu4es.
+1que4t
+5quin1a
+q2ui2
+5qu2ir
+3quito
+4quitu
+4ra.
+r2a3ba
+r1ab
+5r2ab2e4
+3r2a3bin
+r2abo2
+ra3bol
+rac4a
+r2acu
+rac5u1l2a
+ra5cu1lo
+r2ad
+ra4de
+rad4in4e
+ra2d1in
+ra2g5o4u2
+ra3gr2
+3raill2
+r2ai2
+ra5ist2
+4ral2i1a2
+r2a3ly4
+r5a4m1n2
+r2a2m
+ra3mu
+r4andi
+ra2n
+ra4nd
+ran5dis2h
+randi4s1
+ran4du
+ra5nee
+ran4gen
+ra4ng
+ra3n2i1a2
+ran1i
+ra3n2oi
+ran1o
+ran2t
+ran5t4ed
+ran2te
+5ran3te2l
+rant5in
+rant2i
+ran1t5o
+rapol5
+r2ap
+ra1po
+rap5to
+ra2pt2
+4rar1c2
+ra2r
+rar2e2
+rar3e1f
+rar5ia.
+rar1i
+rar2i1a2
+ras2
+r2as3c2
+r2as2e
+r4as2k2
+r2a3so
+ras1s5a
+ra4ss2
+ras2s5in
+r4as5te2
+rast2
+ra5t2a3p
+r2a2ta
+ra5ta3t4
+rat5eu
+rath4e2
+r4a2th
+ra2t3i1f2
+rat4in.
+ra2t3in
+ra5t2oc
+ra2to
+5r2a5tol
+4r4at2om
+ra4tos4
+ra5t2u1i2
+r2a2tu
+rat5u4m
+rat3u4r
+rav5ai2
+r2av
+rav5eli
+ra2vel
+rav3i2t
+rawn4
+ra3z2ie2
+r2az2
+raz1i
+r1b
+r2ba
+r4bag
+rb3ali
+rb1a2n
+rba2r3
+r2b2e
+rbe5c
+r3bel
+rbel5o
+rb3ent
+r4be1s2
+rb2i
+rbic4
+rb2ic5u
+r2bin
+r5bine
+rbit1
+r2bos
+rbo2
+r4bum
+rbu5t4
+r1c2
+rcant5
+rca2n
+rca4s
+r4c2ele
+rce2n5er1
+r1cen2
+rc4ene
+rcen5ten1a
+r3cent
+rcen1te
+r2ces
+r3ch2a3i2
+r2ch
+rcha2
+rch3al
+rch5ar4d
+rcha2r
+rch5ate
+r3cheo
+rche2
+r4ch1er1
+rch4i1er1
+rchie2
+r4ch1in
+rch3is
+r3chit
+r3cil4
+r1c2i2
+rci5n2o1g
+rc2ino
+rcis2
+rciz4i2
+rc1iz
+r2cl2
+r4c2le2
+r5clo
+rco1lo4
+r1c2o2
+rcrit5
+rcr2
+rcriti4
+r2ct4
+rc5ti
+r5d2a2m
+r4d1a2n4
+rd4an.
+r2da2r
+r5de4l
+r3de4n2s
+r4des
+rd5e4ss
+rd5ia2n
+r1d2i1a2
+r4die2
+r5d2ig
+r2d2in
+rd3i4ng
+r3d2i3o2
+rd1i4s2
+rd5ler1
+r2dl4
+rd3li
+r4dol
+r1do
+r2d5ous
+rdo4u2
+r2e
+4re.
+rea4
+r4ea.
+reac2t5iv
+re1a2ct
+re3af
+re3a4g
+re5alt
+re5a2m1b
+re2a2m
+re3an5i
+rea2n
+re5ant
+re5asc2
+re2as3o
+r5e2au3
+3re2av
+r5ebrate
+re1b
+re2br4
+reb1ra
+re4b5uc
+re3c1al
+rec2a
+rec4ce
+rec1c4
+re3ce
+reced5en
+re2c2ed
+re3cede2
+re3cha2
+re2ch
+reci5si4
+re1c2i2
+r4e1c2r2
+rec4t3r2
+re2ct
+re3cu
+2r4ed
+re1de2
+re3di4s1
+re4dol
+re1do
+re1dr2
+reed5i
+re2ed
+ree3m
+3reer1
+re2fe
+re1f
+re3fin
+re5gali
+re5gra
+re2gr2
+r2e3g4r2e
+reg3ri
+re3g4ro
+reg3ul
+rei4
+r4e3i1f
+re1in
+r4e3is
+reit3
+reit4i
+re1l2a
+r2e1le
+4r4e4l2ed
+re3l2i1a2
+rel3ic
+re5l2ig
+rel2i4q
+rel3li
+rell2
+r5em.
+rem5ac
+rema4n4d
+re1ma2n
+rem5a2to
+r3em1p
+rem5ul
+ren1a4
+ren5at
+r4endi
+r2e4nd
+r4ene2
+ren4es
+r4en1i
+ren3ic5
+ren4it
+ren4ter1
+ren1te
+re5num
+r4en2u
+re3oc
+3re2o1g
+re5ol2a
+reo2l
+re3oli
+3reo1s2
+re1pe
+re4per1
+re5ph1
+rep5i2d
+re3pin
+re3ple
+rep2l2
+r2e4pr2e
+re1pr2
+re1q
+rer4a
+rer1
+r2er2e4
+re5rea4
+r2e3r2u
+2r4es.
+re3scr2
+re2sc2
+re3se4l
+re3sem
+re3ser1
+res5ist2
+res1is2
+re5s1it
+re3spe
+r3esq
+re5stal
+rest2
+rest5er1
+reste2
+re5s1tu
+3reta2r
+ret2a
+re3ten
+re4t4er3
+re5term
+re1t2o
+re5ton
+re3tra
+retr2
+r2e3tr2e
+re5t1ri
+re3tu
+re3un1
+reu4r4
+re1v
+re2v3el
+revi4t
+r1f
+rf4l2
+rfu4m
+r3fu
+r1g2
+r4gag
+rgal4
+r2ge
+r5gee
+r4g4ene
+r3gen
+r3ge4o
+r3ger1
+rg5li
+r2gl2
+rgu5f2
+rh2
+r5hel4
+rhe2
+rhe5o2l
+rhos4
+3r2h2y
+4ri.
+ri3a2m
+r2i1a2
+ri5ap
+2r2ib
+r4i3bo2
+ric2a5t4u
+ric1at
+2r4ice
+rich5om
+r4i2ch
+ri1cho
+rick4en
+r2ick1
+ric4ke
+r4icl2
+ri5cli
+ri3col
+r2i2c2o2
+ri5cor
+ri4cra
+r2i1cr2
+2r2icu
+rid4al
+ri2d
+rid1a
+rid4e
+ri5el
+rie2
+ri3er1
+ri2es
+rift5er1
+r2i1f
+ri2ft
+rif5tie2
+5rifug4a
+ri3fu
+ri5g2a2m
+r2ig
+rig5ant
+riga2n
+ri5l4a
+r4ile
+rill5er.
+rill2
+ril2ler1
+rill5in2g1s
+ril1li
+ril2lin
+rilli4ng
+4rim.
+ri2ma
+rim2a4g
+ri1m5a2n4
+rim3at
+r4i2m1b
+ri1men4
+rim2e
+4ri2m1m2
+4ri4m1s
+rin4e
+r4inet
+ring5ie2
+r4in2g2i
+ri4ng
+rink5er1
+r4i4n2k
+r4ino
+ri4n4s2
+rin3s5i
+rin4t5er1
+rin1te
+r2i3o2
+ri2o4g
+5rio2ne
+ri4op
+ri5or
+ri5p2a
+r2ip
+ri5p2ie2
+rip5lica
+rip2l2
+r2i5r
+ri2s4c2
+r4is4is2
+r2is1p
+ris4pa
+ris4pe
+ris5ter1
+rist2
+riste2
+4risti
+r2i3ton
+r5it5r2
+r2i4v
+riv4al
+r2iva
+ri5vall2
+riv5eli
+ri2vel
+riv3en
+riv3i4l
+5r2i5zo
+r1iz
+r1j
+r2k
+r5kas
+rk5ati
+r5kell2
+rk5en1i
+rk1er1
+r3ket
+r3key
+r3ki1er1
+rkie2
+r5ki1es2t2
+r5k2in.
+rk1in
+r5k2i4n1s2
+rks4m2e
+r4k1s
+rk2s1m4
+r1l2a
+rlat3
+r1le
+r3l4ic
+r3l4ine
+r5li4n1s2
+r4l1it
+r1lo
+r3mac
+rma5ce
+r5mad
+r2mal
+r4manc
+r1ma2n
+r4man1o
+r4mar1i
+r1ma2r
+r4ma2r2y
+rm4as
+r4m3ati
+rma5t2oc
+rma2to
+r5m2a5tol
+rme2a2
+rm2e
+r2m1ic
+rm4ica
+r5m2i2d
+rm4ie2
+r5m2ig
+rm2il5
+rmin4e
+rm3i4ng
+r4ming.
+r4mi4te.
+rmi2t
+r3m2oc
+r1mo
+rmol4
+r1mu
+rmu3l2i
+r2n2
+rn3ab
+rn1a
+r3na2c
+r5nad
+rn5a2r
+rn3ate
+rn5a2t3in
+rnati4
+rn5e2dl4
+r2n2ed
+r3nel
+r3ne4ss
+rn5est2
+r3net
+r3ney
+r5n2i1a2
+rn1i
+rn5ib
+r3nic
+rn3in
+rn4ine
+r1nis
+rn3ist2
+rn2i5v
+rn3iz
+rn5n4
+r3n2oc
+r5n2o1g
+rnt4
+r5n4uc4
+rn2u
+r5nut
+4ro.
+ro4b2e
+rob3le
+ro2bl2
+ro5br4
+5roc1c4
+r2oc
+ro3cu
+r2od
+ro3do
+ro3dy4n1
+ro2d2y
+ro1fe
+ro3gn2
+r2o1g
+4r2oi
+ro3i4c
+ro2i4d3
+ro3l2a
+r4o2l2ed
+rol5ite
+rol2it
+ro3ly
+romant4
+r2om
+ro1ma
+ro1ma2n
+ro5mel
+rom2e
+ro3m2i2t
+rom1i
+romole2c5
+ro1mo
+rom4p
+ro3mu
+ron4a2c
+ron1a
+4ronal
+ro5nate
+ron5ch
+ron1c
+ron4do
+ro4nd
+ron2g5i
+ro4ng
+r5onm2e
+ron3m
+ro1no
+ron4ton5
+r2ont
+ron1t2o
+r2oo4
+1ro2o4m
+5ro2o2t
+r2op
+4rop.
+ro3pel
+rop4in4e
+rop1i
+r4o1pr2
+r5opte
+r1o2p1t2
+ror5d
+4r2or2e
+r4osa
+ro3s2i4a2
+ro5s2ol
+4ro4ss
+ro5stat
+r4osta
+rost2
+ros4ti
+ros5tit
+ro3tat
+r2ot
+ro1te
+ro4ter1
+ro3tu
+5r4oue
+ro4u2
+roul3
+round5er1
+r2oun1
+rou4n2d
+rounde2
+rou5sel
+r2ouse
+4rou4ss4
+r4out
+r4ow
+row3er1
+4ro4x
+rpas2s5in
+r1p4as
+rpa4ss2
+rp3at
+rpe2
+r3pent
+rp5er.
+rper1
+r2ph
+rph5e4
+r3phol
+r1pho
+rp3i4ng
+rp5is
+rpol3a
+r1po
+r2p5o4u2
+rpr2e4
+r1pr2
+rpre4t5er3
+r3pu
+r1q
+4r1r4
+rr2a4h
+rran5g2i
+rra2n
+rra4ng
+rr2ap4
+rre2l
+rr2e
+r4reo4
+rrhe3
+rrh2
+r3ri
+rric4
+r2r2icu4
+rri4fy.
+rr2i1f
+rri3fy
+rr4in5ge
+rri4ng
+rri4os
+rr2i3o2
+rrob3
+rr2o1g5
+rr2o4t
+r5ru
+r2r2y5
+r3ry1i
+r3rym
+2r1s2
+r4sa4g
+r2sa2l
+r5sal1is
+r5sal1iz
+r2sa2n
+r4sa2r
+r2se
+r3se2a2
+r3sec
+rsel4
+rsell5
+rs3er.
+rser1
+2r1s3e2r1s2
+r3set
+r3sha2
+rs2h
+r3shi
+r4shie2
+r5s2i2a2
+r4s3ib
+r5sie2
+r4sil
+rs3i4ng
+r2sin
+r3s2io4
+r4s1it
+r4s3iv
+rs5li
+r2sl4
+rst1or4
+rst2
+rstrat4
+rstr2
+r3su
+r4sus
+rswea2r4
+rsw2
+rswea2
+rt2
+r2t3ab
+rta4g
+rt3age
+r3ta2r
+r4tar2e
+r2t3c2
+r1t4ed
+r4te2dl4
+r3te2l4
+r5t2e4nd
+rt3en1i
+r5ter3er1
+r2t2er2e4
+rter1
+r5tet
+r5teu
+r4th4ene
+rthe2
+rth2i
+rth5ing.
+rth1in
+rthi4ng
+rth3ri4
+r1t2h2r
+r1t4ic
+r4ticl2
+r5t2i1et
+rtie2
+r5ti2l3a
+r5t4ill2
+rtil5le
+rt5i2ly
+r2t1in
+r3tin1a
+rt3i4ng
+r3titi
+rti5tu
+r2t3iv
+r2t1iz
+rt5let
+r2tl
+rt3li
+r1t4o
+rto5l
+rt5ri2d
+rtr2
+rt5s2i
+r4t1s
+r1tu
+r4tus
+rtwis4
+rt1w
+rt2wi2
+r2u3a2
+r4ub2e
+rub3r4
+ru4ce
+r4uc
+r2ud
+rue4l
+r4uf2
+ru3in
+r2ui2
+ruis5i
+ru2l
+r4um2e
+r4u1mi
+ru4m2or2e
+ru1mo
+run4c2l2
+run1
+run1cu4
+runcul5
+ru4n2d4
+run2e
+ru5net
+ru4n4g
+run4t
+r2u2p
+rup5lic
+rup2l2
+ru3pu
+rur4i
+ru4r
+rus4p
+rust5at
+r4ust2
+rust5ee
+ruste2
+rus5t4ic
+rus4t5u
+ru3tal
+ru3t2i
+r1v2
+r4vanc
+rva2n
+r2ve
+rvel4i
+r2vel
+r3ven
+rv4e1n4e
+rv5er.
+rver1
+rv5ers.
+rve2r1s2
+r3vest2
+r3vet
+r3vey
+rvi4t
+r1w
+2r2y
+ry5er1
+5ry2g1m4
+ry1g
+ry4go
+ry2m4b
+3ryn1go
+ryn1
+ry4ng4
+4ryn4gol
+ryp5a
+r2yp
+ry2t
+ryth4i
+r2z
+2sa.
+2s1ab
+s3a2bl2
+5sack1
+sac4q
+s3a2ct
+sac4te
+sad5i
+sa2d5o
+5sae
+sa4g
+3s2ai2
+sain4t
+5s2ak
+sa2l
+sa5l4ac
+sal2a
+3s2ale
+sa3lie2
+s4al4t
+sa3lu
+s2a4m
+sa5min
+sam1i
+sa1m5o
+sam2p4
+san3a
+sa2n
+san4d2ed
+sa4nd
+sande2
+s4an4e
+san5ga2r
+sa4ng
+sang2a
+san5i3f
+san1i
+2sant
+sant5ri
+san1t4r2
+s3ap
+sa2p3r2
+sa2r5s2
+sa2r
+3sas.
+sa4s3s2
+sassem4
+s2a1t
+sa2te
+s5a2t1iv
+s5a4to2r2y
+sa2to
+sat1or
+s2a2t1u
+1s2au2
+sau5c2i2
+s4a4uc
+sau4r5
+savi2
+s2av
+sa3vo4u2
+sa1vo
+4s3b
+s4bei
+sb2e
+sbe4s2
+s2by3
+sc2
+s1ca
+sca5len
+sc1al
+sc2ale
+s1c2a2p
+scar4c2
+s1ca2r
+sc2av3
+s1ce
+s4c2ed
+4scei
+4s4ces
+s2ch2
+sci2d5
+s1c2i2
+s2c2o2
+scof4
+s4c2oi
+3s4cop4e
+5scopic
+scop1i
+5scripti
+scr2
+scr2ip
+scri2pt2
+2s1cu
+4sc4u4ra.
+s1cu4r
+scur1a
+4scuras5
+2s1d2
+2se.
+se2a2
+s4e2a2m
+seas4
+sea3w
+sec4a
+sec5a2n
+se2c2o2
+secon4
+2s2ed
+se4da
+sed4it
+3se2ed
+3sei
+se2i3g2
+5sel2a
+4s2ele
+se3lec
+selen5
+5self
+2s4e1m2e4
+sem2i
+semi5d
+se1m4o
+se4n5g
+3se4n2s
+sen5sati
+sens2a1t
+sen5sor1i
+sent5ee
+sen1te
+5sen4t3m
+seo5l2o1g
+seo2l
+seo1lo
+se2p
+se1p3a
+sep4si
+se2ps2
+3se2pt2
+sep3ti
+ser4a2n
+ser1
+se5r4en4e2
+s2er2e
+ser3en
+ser4t4o
+sert2
+4ser1vo
+ser1v2
+s2es
+4s4es.
+se5s2h
+s5esta
+sest2
+1set
+5s4eum
+3sev
+sev3e4n
+se1wo4
+3sex
+sex1o2
+3sey
+2s1f
+sfac2t5o
+s1f2a
+sfa2ct2
+sfi4
+sf2or5e
+s1fo
+sfra2n5
+s1fr2
+2s1g4
+s2h
+4sh1ab
+sha2
+sh4abi
+sh1er1
+she2
+sh5et1
+shil5li
+shi4l
+shill2
+sh5i1ne4ss
+sh1in
+sh2in2e
+shine4s
+sh3io2
+5sh2i2p
+s3h2o4n
+4shu4
+sh4y2s4
+sh2y
+si4all2
+s2i1a2
+siast5
+4s1ib
+s3ic1at
+3sic1c4
+2s5icl2
+s2i4cu
+si5cul
+s4i2d
+4sid.
+si4de
+side5l
+sid3en
+si1d5eri
+sider1
+4si4d1s2
+5sid5u4a2
+si1du
+si4e2r1s2
+sie2
+si1er1
+s2i1f4
+si2f5f
+s2i4g
+1sili
+sim4p4ly
+sim1p
+simp2l2
+2sin
+s2ine
+sin5et
+5sing5er1
+s4inge
+si4ng
+s2in3i
+5s4i4n2k
+si5nol
+s2ino
+si3nus
+s2in2u
+1s2io4
+4sio.
+si5o5s
+3s2ip
+si4pr2
+s1is2
+4sis2h
+4si2s1m4
+s4ist3a
+sist2
+si4s1t3o
+s1it
+si4te
+sit5om
+4s1iv
+5s2iva
+s1j
+s2k2
+4sk.
+s5ka2r
+ske2
+s3ket
+s5key
+s3ki1er1
+skie2
+s5ki1es2t2
+sk5i2ly
+ski2l
+sk5ine4s
+sk1in
+4s4k1s
+s3ky3l
+2sl4
+slan2g5i
+sl2a
+sla2n
+sla4ng
+s1lat
+3sl4au2
+slav5eri
+sl2av
+slaver1
+s2le
+s5lea2
+s3let
+s5ley
+s3l1it
+s1l2o3c
+slov5
+s5l4uc
+2s1m4
+s3ma2n
+smas4
+s3men
+sm2e
+sm2i3g
+3sm2ith
+smi2t
+smo4d1
+s1mo
+smu5ta1t2io2
+s1n2
+s2n1a
+2so.
+2s3od
+so2d3o
+so2d2y4
+3soe
+4s3o2i4d
+s2oi
+s2ol
+sol3a
+so5l4a2n
+so2l4er1
+so3lic
+3solve
+solv5er1
+1s2o2m
+soma5to
+so1ma
+so3mat
+3so2me.
+som2e
+so5met1e
+so1me2t
+so3mo
+s2on1a
+son5at
+s4o2ne
+son5or
+s2o2p
+4sor3ie2
+sor1i
+5sor2i3o2
+sor4it
+s5or1iz
+sor3o
+s3o2r2y
+sos4
+4sose
+s4o5th
+s2ot
+3so4u2
+sov5e
+so3vi
+spas1t4
+s1p4as
+spens5a
+spe4n2s
+4speo
+3sperm
+sper1
+s5pero
+spers5a
+spe2r1s2
+sph2
+s3pha2
+3spher1
+sphe4
+spic5ul
+sp2icu
+s2pi2d
+sp5id.
+s5pi1er1
+sp2ie2
+spil4l2
+sp2il
+s2pin
+sp3i4ng
+sp2i5n1i
+spital5
+spit1a
+s1p2l2
+sple2
+s4p4ly
+s2po
+5sp2om
+spon5g2i
+sp4o2n
+spo4ng
+3spo4n1s2
+3spoon
+sp2oo
+spr2u5d
+s1pr2
+s4p4y
+s1r
+sr2e2
+sreg5
+sre1p5u
+sre4s
+4ss
+s1sa
+s5s2a4m2
+s1sel
+s5se4n5g
+s3sent
+ssent5er1
+ssen1te
+ss3er.
+sser1
+s5seri
+ss3e2r1s2
+s5seu
+s3sev3
+s3s2i1a2
+s1sic
+s1s2i1f4
+s2s1in
+ss4in.
+s4s2ine
+ss4is.
+ss1is2
+s3s2it
+ss4ivi
+s4s1iv
+ss5li
+s2sl4
+s2s3m4
+s4s1n2
+s1so
+ssol3u
+ss2ol
+ss4ol1u4b
+s4s2or2e
+ssor5ial
+ssor1i
+ssor2i1a2
+ss5po
+s1su
+ss3w2
+st2
+4st.
+s2t1ab2
+sta3bi
+4s1t2ak
+s4t2ale
+stan2t5iv
+sta2n
+stant2i
+s3tas.
+5stat1i2c
+s2t3c2
+ste2
+ste5a2r
+stea2
+ste5at
+s4te1b
+s4tec
+4s1t4ed
+s4te2dl4
+s4te4d1n2
+4s2t2er2e4
+ster1
+ster4i1a2
+s1teri
+s4tern.
+ster2n2
+s3tero
+st5es4t2
+s2t2es
+s1th
+s4tha4
+s4thu
+s3t2i3a2
+3st2ick1
+st1ic
+s3t2ic1u
+stil5ler1
+st4ill2
+s4ti2ly
+st3i4ng
+st1in
+5s4t2ir
+s5t1iz
+4s2tl
+st3ler1
+st3li
+s4toe
+3ston
+sto2n4e3
+ston4ie2
+ston1i
+s5torat
+st1or
+stor1a
+st4or5ia2n
+stor1i
+stor2i1a2
+s4tose
+s2to4u2
+s4tr4ay
+str2
+str2e4
+strep3
+3st4r4uc
+str2u5d
+2s4t3s
+s1tu
+s4tud
+stu4m
+stur4e
+stu4r
+4st1w
+s4ty
+1styl
+4su.
+su5a2n
+s2ua2
+su4b1
+su2b1t2
+su2ct4
+s4uc
+sud4a
+su3e4t
+su2f3f
+suf2
+sug3
+3s2ui2
+su2i5c
+su5i4ng
+1s2ul
+s4u2m
+su1m3i
+su4n4a4
+sun1
+su5pe
+s2up
+su3pin
+supra3
+su2pr2
+sur4as5
+su4r
+sur1a
+sur3c2
+s4ur1g2
+sur3p2l2
+su5su
+su5z
+2s3v
+svers5a
+sver1
+sve2r1s2
+sves4
+sve2st5i
+svest2
+sw2
+5swee
+swel4l5i
+swell2
+4sw4e2r4ed
+swer1
+sw2er2e
+2s1wo
+s2y
+4sy.
+sy4b2i
+s4y1b
+sy1c
+sy4ce
+sy4c2hr
+sy2ch
+sy4d4
+1syl
+3syn1
+syn5e
+sy5pho
+s2yp
+sy2ph
+syr5i
+2ta.
+2t1ab
+ta5blem
+ta2bl2
+3tabli4
+t2abo2
+ta3bol
+ta4bo4u2
+t4a3ce
+ta5ch2om
+ta2ch
+ta1cho
+ta3ch2y
+ta4ci2d
+t2a1c2i2
+t5ade
+tad4i
+5t2ad1j
+ta5d2or
+ta2do
+tad2r2
+tae5n
+taf4
+tage5o
+ta5g2o1g
+3ta2gr2
+3t2ah
+1t2ai2
+3tail
+2ta2ir
+t4ais
+1t2ak
+tal2c2
+tal5ent
+t2ale
+ta5lep
+t4al2i1a2
+t4al1in
+tal4l3a
+tall2
+5tal1lu
+t2alo4
+t2a3ly4
+tam5ar1i
+t2a2m
+ta1ma2r
+5ta3me2t
+tam2e
+tamor2ph5
+ta1mo
+ta3morp
+tan5at
+ta2n
+tan2a
+tand5er1
+ta4nd
+tande2
+t4ane
+5tanel
+tan5ie2
+tan1i
+t5an1iz
+ta2nt5a2n
+tan2t2a
+t4a4pa
+t2ap
+1tard
+ta2r
+tar5ia.
+tar1i
+tar2i1a2
+tark5i
+tar2k
+tar3n2
+3t2a4r1r4
+tas3i
+t3a2s1m4
+5ta4ss2
+tas4t2
+t2a3sta
+tast5i4c
+t4ateu
+3ta2t1is
+t4a2to.
+ta2to
+tat4o4u2
+t2a2t4r2
+ta1t3ut
+t2a2tu
+tau3t2o
+t2au2
+t5awa
+tawn4
+t4a4x
+4t3b
+2tc2
+t1ca
+tcas4
+tch5e2t2t4
+t2ch
+tche2
+tchet1
+tch5u
+4t1d4
+4te.
+te5cha2
+te2ch
+5tec2h1n2
+te3cr2
+t4ed
+te5d2a
+4ted1d4
+4te1do
+4tee1i
+te2g
+5tegic
+te1g2i
+t3ego
+te2g1r2
+teg3u
+tei4
+te2l
+4t4e4l2ed
+t2ele
+tel5iz
+1tell2
+4te3lo
+3te4ls
+tem3a
+4te1m2e4
+t4e5m4on
+te1mo
+ten4ag
+ten1a
+4te2n3a2r
+4t4ene
+t5en3m
+5tenn1a
+ten1n4
+4ten1o
+te5n2o1g
+tent4a
+te2o
+teo5l
+2tep
+te3pe
+tep5i
+tera4c
+ter1
+t4era4g
+t4era2to
+3ter3b
+5t2erd
+2t2er2e4
+ter3e1b
+ter5ec
+5terel
+te3reo
+3tere4s4
+1teri
+ter3i1a2
+ter5i2d
+ter5i1f
+t4er3in
+ter5iorit
+ter2i3o2
+teri5or
+terior1i
+t4er3i2t
+ter5k4
+5tern3it
+ter2n2
+tern1i
+ter5no
+3te4r1r4
+2t2es
+4t4es.
+tesi4
+t3esq
+t3ess.
+te4ss
+t5ess2es
+tes4t2
+test3a
+5teste2
+test5er1
+test5in
+te2sti
+test5or
+tes5tu
+teti4
+tet1r2
+tet1r5o
+tew3a2r
+te1wa
+3tex
+2t3f
+t3g
+2th.
+tha4
+th5al.
+thal3m2
+4t4he.
+the2
+4th2ea2
+th5eas
+4th2ed
+1th4ei
+3theo
+theo3l
+t4her1
+5ther2ap
+th5er1c2
+t5h2erd
+4th4e2r4ed
+th2er2e
+th3er2n2
+th3e2r2y
+4t2hi.
+t5hill2
+thi4l
+3th4i4n2k
+th1in
+5th4io2
+th4is.
+th5lo
+t4hl
+2t2h1m2
+th4mi
+th3oli
+4t5h2oo
+4th1o2p1t2
+4thores
+th2or2e
+3th2ot
+5thoug4
+th2o4u2
+1t2h2r
+2t2h1s
+5thu4r
+5thy2m
+th2y
+3thyr4
+th4y2s4
+4ti.
+1t2i2a2
+ti3ab
+2t3ib
+5t4i5bu
+t1ic
+t3ic.
+tic5as
+t2i1c2i2
+tici5a2r
+tic2i1a2
+3t4i3cin
+t4icity
+ti3col
+t2i2c2o2
+t2ic1u
+4ticule
+t3id.
+ti2d
+t4id1a
+3tidi
+ti3die2
+t5i4d1s2
+3t2i2en
+tie2
+1t2i1f2
+ti3fe
+4ti2ff
+4ti4f3ic.
+3t4i1g2i
+t2ig
+ti3g2i5o2
+4ti2g1m4
+5tigu
+ti4ka
+t2ik2
+ti4let
+5til1in
+t4ill2
+til4l5ag
+til1l2a
+t4ilt
+1tim
+tim1a
+5ti1me2t4
+tim2e
+t1in
+5ti5nad
+tin1a
+4t4i2n2ed
+tin3et
+ti4ng5i4ng
+t4in2g2i
+ti4ng
+3t2in1n4
+4ti4n1s2
+t4int
+tin4te
+tin5t4ed
+tint5er1
+tin3ue
+t2in2u
+1t2io2
+ti3oc
+tiol3a
+t4i1ol
+ti5o3mo
+ti2om
+4tionem
+tio2ne
+1t2ip
+ti5plex
+tip2l2
+ti3pli
+t2i4q
+ti5q2ua2
+tiqu4
+t3iris
+t2ir
+tir1i
+2t1is
+3tis1a2n
+ti4sa
+ti2s4c2
+tish5i
+tis2h
+3t2i4s1s
+tis2t2
+5t4iste2
+t4is1tr2
+ti5t4a2n
+tit1a
+tith4e2
+t2ith
+tit5il
+t3i2t1is
+3ti2tl
+ti3tra
+t2itr2
+3t2i1u2
+2t1iv
+tiv5all2
+t2iva
+t3ive
+tiv3is
+2tl
+t1l2a
+tlant4
+tla2n
+5tle1b
+5tle5dr2
+t2l2ed
+3tle1f
+3tlem
+5tlen
+5tletr2
+t1let
+5tlew
+t1li
+tlin4
+4t3m
+t1me2t2
+tm2e
+tm2o4t5
+t1mo
+2t3n2
+t4n2er2e
+tn1er1
+2to.
+toas4
+t2oa2
+to1b
+4toc1c4
+t2oc
+to3de5c
+tod4i
+to5do
+3toe
+1t2o1g
+2t3o2i4d
+t2oi
+5tok
+4to2l2ed
+tol4l2
+tolu5
+to5ly
+to2m3ac
+t2om
+to1ma
+to1ma4n
+tom2at5ol
+to3mat
+toma2to
+to2m4b
+to4m2o1g
+to1mo
+tom5os
+to2n4e
+t4on5ea2
+3ton1n4
+to4n3s2
+top4e
+to5p2i1a2
+top1i
+to4p4os
+to1po
+t1or
+to5r2ad
+tor1a
+4t2or2e
+tor5er1
+tori4as
+tor1i
+tor2i1a2
+to4r5oi
+tor5p
+tor4q
+3tos.
+t4o3s4p
+tos4t2
+to5str2
+to5tal1is
+t2ot
+to5tal1iz
+to3tem
+tot5u
+tou4f2
+to4u2
+5tou4r
+t3ous
+4tov
+to3wa2r
+t3p
+tr2
+tra4c2o2
+4trad1d4
+tr2ad
+4tra5ist2
+tr2ai2
+tra5q
+trar2ch4
+t4rar1c2
+tra2r
+tra5ven
+tr2av
+tra5ve2r1s2
+traver1
+trav5est2
+3tr4ay
+4t4re.
+tr2e
+4t2r4ed
+tre4mo
+tren4
+tr4end5i
+tr2e4nd
+tre5pr2
+tre4s4s
+4trew
+t5r4icl2
+3t2r2icu
+t2rie2
+tri5fli
+tr2i1f
+tr4i2fl2
+t5rifu5g4a
+tri3fu
+2tril
+tri3li
+tri3m2e
+t2rit
+4tr2ix
+t4r2od
+tro5f
+5troo2p
+tr2oo4
+tro4pha2
+tr2op
+tr4o3sp
+t2r2ot
+t5ro1t2o
+tro1v
+3tr2oy
+t4r4uc
+tr2u3i2
+2t4r2y
+tr4y2s4
+4t1s
+t2sc2
+ts4h
+ts2i
+t4sil
+tst4ay4
+tst2
+2t1t4
+tta4
+t3t1ab
+t5ta2n
+t5tas
+t3t4ed
+t4t2er2e4
+tter1
+t5ter3er1
+t5tes4t2
+t2t2es
+t3ti
+tti3tu
+ttitud4
+ttitu5di
+t3t2ler1
+t2tl
+t3t1li
+t5t2oi
+t5t1or
+t3tos
+t4t5s
+t4tu1pe
+tt2up
+t2ty
+4tu.
+t2u1a2
+tu4al5li
+tu1al
+tuall2
+tuar3i4
+tua2r
+tu4bin
+tu1b2i
+tu5bu
+tu5den
+tud4e
+tud5ie2
+tu5en
+4tuf2
+t2u1i2
+tu4is
+2tum.
+3tu1mi
+4tu4m1s
+3tun1
+tu4n4a4
+tu4ne
+tun5it
+tun2i
+tup5let
+t2up
+tup2l2
+tup5lic
+tu5rac
+tu4r
+tur1a
+t4ura2n
+tur2b3a
+tur1b
+tur4d
+turf5i
+tur2f
+5turit
+tur1i
+tur4n2
+5tur5o
+1tut
+4tu2t4iv
+tut2i
+t1w
+t3wa4
+t2wi2
+twi5li
+t3wit
+t3wo
+twon4
+4ty.
+ty4a2
+5ty2ch
+ty4let
+tyle2
+tyl5i
+ty5mi
+1t2yp
+3type
+1tyr1
+2tz2
+t5z2i1a2
+tz1i
+t5z2ie2
+2ua2
+u2a3c2i2
+u2ag
+u2a5h
+u1al
+ua5lu
+uan4o
+ua2n
+uan2t5is
+uant2i
+uant5it
+uar3a
+ua2r
+uar2d
+uar3i
+uari4n
+uar5te2r1s2
+uart2
+uarter1
+uar4t5i
+ua5ter2n2
+u4ater1
+uba4
+ub5b2ly
+u2b1b2
+ub2bl2
+u1b2i
+u4b2icu
+ub3lin
+u2bl2
+ub5lo
+ub3ra
+ubr4
+4uc
+u1c2a
+uc1cen5
+uc1c4
+u4c2e4nd
+u1cen2
+u4ch
+u5c2hr
+uc3l2
+u4c2om
+u1c2o2
+uc2o5t
+uc2tr2
+u2ct
+uc3ub
+uc5ul
+u5cum
+u5d2ac
+ud1al
+ud4e
+ud5e1p
+u4der1
+udev4
+ud4g
+ud4i4cin
+udi1c2i2
+ud3i2ed
+udie2
+u5dinis
+u2d1in
+ud2in1i
+u3d2i3o2
+u5di1t2io2
+u2do
+u5d2oi
+ud5on
+u5d2or
+ue1b4
+u4ed
+uen4o
+uen4ter1
+uen1te
+uer3a
+uer1
+ue4s4s
+uest5rat
+uest4r2
+uest2
+ues5tri
+ue4t
+uf2
+3u1f2a
+u3fl2
+u4fo
+u2ft4
+uga4c
+ug5l2i1f
+u2gl2
+ug2n1i
+u2gn2
+u4go
+ug3ul
+ug3ur1a
+ugu4r
+uhem3
+uhe2
+2ui2
+ui3al
+u2i1a2
+u2ic
+ui3cent5
+u4ice
+ui1cen2
+ui1d5o
+ui2d
+ui2l4a
+uild5er1
+ui3lib
+uil4t
+uin1c5u
+u2inc
+ui4n4s2
+uint4
+uin4ta
+ui5pr2
+u2ip
+uis3er1
+uis4t2
+uisti4
+uit5er1
+ui5val5
+u2iva
+ui3vo
+u2iz
+4ul.
+u1l2a
+u4l1ab
+4ul4ac
+ul5ard
+ula2r
+u5lat
+ul4bo2
+ul3b
+ul3ca
+ul1c2
+ul4ch
+5ulch4e2
+5ulchr2e4
+ul3c2hr
+4ulea2
+u5lee
+u1len4
+4ulen1c2i2
+u5lent
+u1let4
+u2l4ev
+ul2f2a
+ul2i
+ul4i1a2
+u3l4ine
+ul3i4ng
+ul5is2h
+ul1is
+u5liti
+ul1it
+u5lity
+4ull2
+ul4lat
+ul1l2a
+ul4l5ib
+ul1li
+ul4l1is
+ul4l1it
+ul3m2
+u1lo
+u5l2om
+ulph3i
+ulph2
+ul2ph3o
+ulp5i4ng
+ul4po
+2u4ls
+ul3s2i1f4
+u1lu
+ul1v4
+u1ma
+u2m3a2m
+u1ma2r4
+u5mas
+um4bar.
+u2m1b
+umba2r
+um2b2i
+umen4t
+um2e
+u1men
+u1mi
+u4m1ic
+u2m5i1f
+umi4fy
+umi5l2i1a2
+um2il
+umin4a2r
+umin1a
+u4m4i2n2ed
+u4m3i4ng
+u4mor1a
+u1mo
+u4mos
+um2p
+um4pa
+ump3er1
+ump5li
+ump2l2
+um2pt4
+ump5te
+u1mu
+umu4lo
+un1
+u4n3a4
+un5ab
+unabu4
+un4ae
+un4as.
+un2as
+un2ce
+un4dal
+u4nd
+un2da
+un3d2ed
+unde2
+un1de4t
+undeter5m
+undeter2
+un1di4c
+un4die2
+un3do
+un4dus
+un1du
+u3n2er1
+unho5li
+un1h2
+unho4
+un2i
+u1nic
+un4ie2
+un3in
+un4ine
+un2i5p
+uni3s4o
+un3ist2
+un2i1v
+un3iz
+unk5eri
+u4n2k
+unker1
+un5ket
+un3kn2
+2un1n4
+un4nag
+unn1a
+un5o
+un5r
+u4n3s4
+un5s2h2
+un2t2i
+until4
+un2u4
+un3us
+uo3de
+uo3dent4
+u5oros
+u3os
+uo5t4a1t2io2
+u2ot
+u1o4u2
+2up
+u1pat
+u1pe
+u5p4ee
+uper3
+u1ph
+u5pi2d
+up3i4ng
+u4po
+u5pol
+u2pr2
+upr2e4
+u5que4t
+uqu4
+u4r
+ur1a
+4u4ra.
+ur2a4c2i2
+4urae
+ura2g
+4urant2i
+uran2t
+ura2n
+uras5
+urb5i4ng
+ur1b
+urb2i
+ur2bin
+ur2c2
+urc3a
+ur5den.
+ur5den1i
+ur5die2
+ur4du
+ur3ea4
+ur2e
+ur5ee
+ur1er1
+ur3e2r1s2
+ur1e2t
+ur3e2t2t4
+ur2f
+ur3f2a
+ur1i
+u5r2i5cu
+ur4ie.
+urie2
+ur5ifie2
+ur2i1f
+uril4
+ur4ili
+ur5ion
+ur2i3o2
+uri4os.
+ur2l5er1
+ur1le
+ur5lie2
+url5i4ng
+ur1m4
+urn3al
+ur2n2
+urn1a
+urn3er1
+ur4n5s
+ur1o
+ur2o4d
+ur5o4m
+ur5ot
+uroti4
+ur3pen5t
+urpe2
+ur2ph4
+u2r2s2
+ur2s5a2l
+urs5er1
+ur2se
+ur3s2h
+urs3or
+ur5ta
+urt2
+ur1te
+ur5t2es
+urth2
+ur3the2
+urti4
+ur1u
+ur4va
+ur1v2
+u3sad
+us3a4g
+us3a2l
+us4ap
+us3a1t
+2usc2
+us4ca2n
+us1ca
+ush5a2
+us2h
+us5ia2n
+us2i1a2
+usil5
+u4s1in
+usk5er1
+us2k2
+uske2
+us1p
+us4pa
+uss4e
+u4ss
+4ust2
+us3tac
+us5ta2n
+ust4ic
+us5t2i1c2i2
+ust5ig
+ust3il
+us1to4
+us1tr2
+us4tr2e4
+usur4e
+usu4r
+us5ur1i
+u3t4ane
+uta2n
+utch4e2
+u2tc2
+ut2ch
+ut5en1i
+u5te2o
+u4t2er2e4
+uter1
+ut2i
+u3tie2
+ut3i4ng
+ut1in
+u5t2in1i
+u3t2io2
+ut5i2s1m4
+u2t1is
+ut3is2t2
+5u5t1iz
+ut3le
+u2tl
+ut1li4
+ut2o
+u4to5s
+u4t1ra
+utr2
+u4t1s2
+ut5s1m4
+ut4to2n4e
+u2t1t4
+u3tu
+u4tul
+uu4
+uv2
+u4va
+uve2
+uven3
+uv5eri
+uver1
+u5v1in
+ux2o
+uy4a2
+uy5er1
+4va.
+2v3ab
+5vac
+va1c2a
+va5ceo
+vacu1
+v4ad
+3vag3a
+va4ge
+4va2g2e4d
+vager4
+va2g5r2
+v1al.
+1v2ale
+vali2
+va5lie2
+val4ise
+val1is
+5valu
+5val4v
+vam4i
+v2a2m
+va5mo
+5van1n4
+va2n
+van2t2a4
+4van2tl
+var4is
+va2r
+var1i
+4vas2e
+vas5el5
+v5a4so
+v2ast3a
+vast2
+v4at.
+5vatee
+v4at4in1a
+va2t3in
+4v2a2tu
+2ve.
+ve2ct4
+ve3g
+3vei
+2vel
+vel3at
+vel2a
+4v2ele
+v3e2l1er1
+ve5l4ine
+v1ell2
+v4el1l2a
+vel5ler1
+vel3li
+vel5op1i
+ve4n4al
+ven1a
+ven4do
+v2e4nd
+v4e1ne
+ve5n2i1a2
+ven1i
+ven2t5o
+ven4tr2
+4v4en2u
+v5en5ue
+5ve3o
+5ver1b
+ver1
+verde5v
+v2erd
+4v4er2e4
+ver5ea4
+ver3ei4
+v5er3ie2
+ver3m4
+ver4ne
+ver2n2
+5ver2se
+ve2r1s2
+4v4es.
+4vi.
+5vi3al1it
+v2i1a2
+vi4a2tr2
+vi3at
+vi1b4
+vic2
+vi4ca
+vi5car1i
+v2i1ca2r
+vice3r1
+v4ice
+5vi2ct2
+5v2icu
+5vider1
+vi2d
+vi2gn3
+v2ig
+vi4l
+vil3i
+3vil2i4a2
+v5ilise
+vil1is
+v5ilize
+vil1iz
+vil5lin
+vill2
+vil1li
+vim4
+5vim2e
+2v1in
+vin4a2c
+vin1a
+3vin1c2i2
+v2inc
+vin2e
+5vinit
+v2in1i
+v5in1iz
+vint4
+vin5ta
+3v2i1o2
+v4i1ol3
+vi5om
+5v2i3p
+vir2e4
+v2ir
+vi5r2i4d
+vir1i
+vir3u
+5visecti
+v4i1sec
+vise2ct
+5vi1s2io4
+v3i2s1m4
+2v5ist2
+vi2t
+vit2a
+vi3tal
+vi5te2l
+v5it1ie2
+v2it1r2
+vi3tu
+v3ity
+viv5al
+v2iva
+viv5or
+vi2vo
+v2i5zo
+v1iz
+1vo
+2vo.
+vo2l
+vo5li1t2io2
+vol2it
+vol4u1b2i
+v4ol1ub
+volv4
+4von
+vo5rac
+vor1a
+3vor1c2
+4v2or2e
+3voro
+vo3ta2r
+v2ot
+2vow
+vr4
+v5ra4
+v5ri
+v5ro
+vr2ot4
+4vs
+v3ur2e
+vu4r
+2vv2
+v5ver1
+v5vi
+4vy
+4w1ab
+wag3o
+wais4
+w2ai2
+w3al.
+wal2l5er1
+wall2
+w3a4ls
+wan5gli
+wa2n
+wa4ng
+wan2gl2
+wank5er1
+wa4n2k
+war5d2ed
+wa2r
+ward5er1
+ward5r2
+war4f
+war4te
+wart2
+war5th2i
+war2th
+wa4ss4
+was4t2
+wa1te
+wav4in2e
+w2av
+wa2v1in
+w1b4
+w4bon
+wbo2
+w5c
+w5die2
+w3dr2
+we4b
+w4ed
+3we2ed
+5wei
+weight5i
+we2ig2
+wei2gh
+weigh2t
+we2ir4
+wel3i
+wel1iz4
+wel4iz3i2
+wel4li
+well2
+went4
+wes4
+west3
+w5e4st.
+w5f
+wh2
+w5hi2d
+wi2
+wid4e
+wi2d
+wi5er1
+wie2
+wil2l5in
+will2
+wil1li
+wim2p
+win2e
+wing5er1
+w4inge
+wi4ng
+win4tr2
+3w4ise
+with5eri
+w2ith
+wit4her1
+withe2
+w3l2a
+w2l1er1
+wl1i
+wl4ie2
+w1m
+1wo
+wol4
+wol5ver1
+3w2om
+w2on2t
+word5i
+wot2ch4
+w2ot
+wo2tc2
+w2oun4
+wo4u2
+wp5in
+wra4
+ws5i4ng
+w2sin
+w5ster1
+wst2
+wste2
+wt4
+w5te
+w3to
+wy2
+wz4
+x1a
+x4a2ch
+x4ade
+x2ag
+x3a2g1g
+xa5me2t
+x2a2m
+xam2e
+x3am1i
+xa4n5d
+xa2n
+xan1o4
+x2as
+xas5p
+x3c4
+xc2av3
+xcor5
+x1c2o2
+xe4
+x1ec
+xec3r2
+xe5cu3t2io2
+xecut2i
+xecut5o
+x2e2d
+x5e2dl4
+x5e4d1n2
+x5eg
+x1em
+x3en
+xen4op
+xen1o
+x3er1
+xer4g2
+xer3o
+x1h
+xhort4a
+xh2ort2
+x1i
+x3ia.
+x2i1a2
+x4ias
+xi4c
+x5i1ge
+x2ig
+xim3a
+x4im2e
+xi1me2t4
+x3io2
+x2i4p
+x4it.
+x4i4t1s
+x1o
+x4ode
+x5om
+xo4mat
+xo1ma
+xo4n
+x4os
+xotr2op4
+x2ot
+x4o1tr2
+x3p
+xpel4
+xp4o5n2
+x1po
+xp2oun4
+xpo4u2
+x1s2
+x1t2
+x4t4ed
+xtens5o
+xte4n2s
+x1ter3i
+xter1
+xter4m3
+xter2n3
+x4th
+xti4
+xtr2a5d
+xtr2
+xtr2a3v
+xtr2e4
+xu4o
+x1u4r
+xur4b
+x5us
+x5w
+xx4
+x4y2s4
+xy3t
+y1a2
+y5ac
+1y2a2r
+3yard
+yas4i
+4y1b
+yb2i
+yc2a5m
+y5chede2
+y2ch
+y4ch2ed
+yche2
+ych5is
+y3cho
+y4chose
+yc1l2
+ycl2a2m4
+ycl2a
+y4coli
+y1c2o2
+y4coll2
+yc2om4
+y2cos
+y1d4
+yda4
+yder4
+ydro5s
+ydr2
+y4dro4u2
+y3ee
+yel5o
+y3en
+y1er1
+y3e4st.
+yest2
+yes5te2
+y5e2t2t4
+y5f
+y1g
+y1g2i2
+yg2i5a2
+y3gl2
+yg2o4i
+y1h
+y1i
+y3in
+yle2
+ylin5de2
+yl2i4n4d
+yllab5i
+yll2
+yl1l2a
+yll1ab
+yl3os
+yl5o4u2
+y1m2e4
+y3men
+y5me2t
+y5m2i1a2
+ym5in
+ym2ot4
+y1mo
+ym4pha2
+ym1p
+yn1
+yn5ago4
+yn1a
+yna4nd5
+yna2n
+yn5ap4
+yn5ast2
+yn2as
+yn4c2i2
+y4nd4
+yn2e
+yn3er1
+y4ng4
+yn4gol
+yn1go
+yni4c
+yn1i
+y2n4y2
+y1o2
+yo3d
+yo4g4i4s
+y2o1g
+yo3g2i
+y2oun4
+yo4u2
+you4ng5
+2yp
+yp5al
+yper3
+y5p2er2e
+y4p4eri
+y4pero
+y4pet
+y2ph
+yph4e4
+yph3i
+y4p1i
+y2p1n
+y1po1
+y4po4x
+y2pr2
+yp5ri
+yp4si
+y2ps2
+yp5sy5f
+yps2y
+ypt3a
+y2pt2
+y5pu
+y3rag
+yr3at
+yr3ic
+y5r2ig
+yr3is
+yr3i4t
+yr5o1lo
+y4r4r4
+y2r4s2
+yr5u
+4y2s
+ys5a4g
+ys5a1t
+y3s2c2
+y3s2h
+ys1ic
+y2s3in
+y1s2i4o4
+yso5
+ys4so
+y4ss
+ys1t2
+ys4to
+y3u
+yv4
+y3w
+yz5er1
+yzy4
+z1a1
+2za.
+za4bi
+z1ab
+z2a2i2
+z4as
+za4te
+zd4
+ze1b4
+z2e4d
+zen4a
+z5e4ng
+zer5a
+zer1
+z3et4
+z1i
+zib5
+5zic4
+z2ie2
+zi5m
+zin4c3i2
+z2inc
+z3i4ng
+z4in2g5i
+z4is
+3zlem
+z3ler1
+z3li
+4zo.
+5z2oa2
+zo3a2n
+3z2oo2
+zo3ol
+zo3on
+zo5o2p
+zo5oti
+zo2o2t
+zo5p
+z2ot2
+z5s
+5zum
+4zy.
+zz2
+z3za2r
+zz1a1
+z5z4as
+z3z2ie2
+zz1i
+zzo3
+z5z2ot2
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_es.dic b/lib/kotext/kohyphen/hyphdicts/hyph_es.dic
new file mode 100644
index 00000000..2af6bfa1
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_es.dic
@@ -0,0 +1,468 @@
+ISO8859-1
+1ba
+1be
+1bo
+1b^^e1
+1b^^e9
+1b^^ed
+1b^^f3
+1b^^fa
+1bi
+1bu
+1b^^fc
+1ca
+1ce
+1co
+1c^^e1
+1c^^e9
+1c^^ed
+1c^^f3
+1c^^fa
+1ci
+1cu
+1c^^fc
+1da
+1de
+1do
+1d^^e1
+1d^^e9
+1d^^ed
+1d^^f3
+1d^^fa
+1di
+1du
+1d^^fc
+1fa
+1fe
+1fo
+1f^^e1
+1f^^e9
+1f^^ed
+1f^^f3
+1f^^fa
+1fi
+1fu
+1f^^fc
+1ga
+1ge
+1go
+1g^^e1
+1g^^e9
+1g^^ed
+1g^^f3
+1g^^fa
+1gi
+1gu
+1g^^fc
+1ja
+1je
+1jo
+1j^^e1
+1j^^e9
+1j^^ed
+1j^^f3
+1j^^fa
+1ji
+1ju
+1j^^fc
+1ka
+1ke
+1ko
+1k^^e1
+1k^^e9
+1k^^ed
+1k^^f3
+1k^^fa
+1ki
+1ku
+1k^^fc
+1la
+1le
+1lo
+1l^^e1
+1l^^e9
+1l^^ed
+1l^^f3
+1l^^fa
+1li
+1lu
+1l^^fc
+1ma
+1me
+1mo
+1m^^e1
+1m^^e9
+1m^^ed
+1m^^f3
+1m^^fa
+1mi
+1mu
+1m^^fc
+1na
+1ne
+1no
+1n^^e1
+1n^^e9
+1n^^ed
+1n^^f3
+1n^^fa
+1ni
+1nu
+1n^^fc
+1pa
+1pe
+1po
+1p^^e1
+1p^^e9
+1p^^ed
+1p^^f3
+1p^^fa
+1pi
+1pu
+1p^^fc
+1qa
+1qe
+1qo
+1q^^e1
+1q^^e9
+1q^^ed
+1q^^f3
+1q^^fa
+1qi
+1qu
+1q^^fc
+1ra
+1re
+1ro
+1r^^e1
+1r^^e9
+1r^^ed
+1r^^f3
+1r^^fa
+1ri
+1ru
+1r^^fc
+1sa
+1se
+1so
+1s^^e1
+1s^^e9
+1s^^ed
+1s^^f3
+1s^^fa
+1si
+1su
+1s^^fc
+1ta
+1te
+1to
+1t^^e1
+1t^^e9
+1t^^ed
+1t^^f3
+1t^^fa
+1ti
+1tu
+1t^^fc
+1va
+1ve
+1vo
+1v^^e1
+1v^^e9
+1v^^ed
+1v^^f3
+1v^^fa
+1vi
+1vu
+1v^^fc
+1wa
+1we
+1wo
+1w^^e1
+1w^^e9
+1w^^ed
+1w^^f3
+1w^^fa
+1wi
+1wu
+1w^^fc
+1xa
+1xe
+1xo
+1x^^e1
+1x^^e9
+1x^^ed
+1x^^f3
+1x^^fa
+1xi
+1xu
+1x^^fc
+1ya
+1ye
+1yo
+1y^^e1
+1y^^e9
+1y^^ed
+1y^^f3
+1y^^fa
+1yi
+1yu
+1y^^fc
+1za
+1ze
+1zo
+1z^^e1
+1z^^e9
+1z^^ed
+1z^^f3
+1z^^fa
+1zi
+1zu
+1z^^fc
+1^^f1a
+1^^f1e
+1^^f1o
+1^^f1^^e1
+1^^f1^^e9
+1^^f1^^ed
+1^^f1^^f3
+1^^f1^^fa
+1^^f1i
+1^^f1u
+1^^f1^^fc
+1c2ha
+1c2he
+1c2ho
+1c2h^^e1
+1c2h^^e9
+1c2h^^ed
+1c2h^^f3
+1c2h^^fa
+1c2hi
+1c2hu
+1c2h^^fc
+1l2la
+1l2le
+1l2lo
+1l2l^^e1
+1l2l^^e9
+1l2l^^ed
+1l2l^^f3
+1l2l^^fa
+1l2li
+1l2lu
+1l2l^^fc
+1r2ra
+1r2re
+1r2ro
+1r2r^^e1
+1r2r^^e9
+1r2r^^ed
+1r2r^^f3
+1r2r^^fa
+1r2ri
+1r2ru
+1r2r^^fc
+1b2la
+1b2le
+1b2lo
+1b2l^^e1
+1b2l^^e9
+1b2l^^ed
+1b2l^^f3
+1b2l^^fa
+1b2li
+1b2lu
+1b2l^^fc
+1b2ra
+1b2re
+1b2ro
+1b2r^^e1
+1b2r^^e9
+1b2r^^ed
+1b2r^^f3
+1b2r^^fa
+1b2ri
+1b2ru
+1b2r^^fc
+1c2la
+1c2le
+1c2lo
+1c2l^^e1
+1c2l^^e9
+1c2l^^ed
+1c2l^^f3
+1c2l^^fa
+1c2li
+1c2lu
+1c2l^^fc
+1c2ra
+1c2re
+1c2ro
+1c2r^^e1
+1c2r^^e9
+1c2r^^ed
+1c2r^^f3
+1c2r^^fa
+1c2ri
+1c2ru
+1c2r^^fc
+1d2ra
+1d2re
+1d2ro
+1d2r^^e1
+1d2r^^e9
+1d2r^^ed
+1d2r^^f3
+1d2r^^fa
+1d2ri
+1d2ru
+1d2r^^fc
+1f2la
+1f2le
+1f2lo
+1f2l^^e1
+1f2l^^e9
+1f2l^^ed
+1f2l^^f3
+1f2l^^fa
+1f2li
+1f2lu
+1f2l^^fc
+1f2ra
+1f2re
+1f2ro
+1f2r^^e1
+1f2r^^e9
+1f2r^^ed
+1f2r^^f3
+1f2r^^fa
+1f2ri
+1f2ru
+1f2r^^fc
+1g2la
+1g2le
+1g2lo
+1g2l^^e1
+1g2l^^e9
+1g2l^^ed
+1g2l^^f3
+1g2l^^fa
+1g2li
+1g2lu
+1g2l^^fc
+1g2ra
+1g2re
+1g2ro
+1g2r^^e1
+1g2r^^e9
+1g2r^^ed
+1g2r^^f3
+1g2r^^fa
+1g2ri
+1g2ru
+1g2r^^fc
+1k2la
+1k2le
+1k2lo
+1k2l^^e1
+1k2l^^e9
+1k2l^^ed
+1k2l^^f3
+1k2l^^fa
+1k2li 1k2lu
+1k2l^^fc
+1k2ra
+1k2re
+1k2ro
+1k2r^^e1
+1k2r^^e9
+1k2r^^ed
+1k2r^^f3
+1k2r^^fa
+1k2ri
+1k2ru
+1k2r^^fc
+1p2la
+1p2le
+1p2lo
+1p2l^^e1
+1p2l^^e9
+1p2l^^ed
+1p2l^^f3
+1p2l^^fa
+1p2li
+1p2lu
+1p2l^^fc
+1p2ra
+1p2re
+1p2ro
+1p2r^^e1
+1p2r^^e9
+1p2r^^ed
+1p2r^^f3
+1p2r^^fa
+1p2ri
+1p2ru
+1p2r^^fc
+1t2ra
+1t2re
+1t2ro
+1t2r^^e1
+1t2r^^e9
+1t2r^^ed
+1t2r^^f3
+1t2r^^fa
+1t2ri
+1t2ru
+1t2r^^fc
+b1h
+d1h
+f1h
+g1h
+j1h
+k1h
+l1h
+m1h
+n1h
+p1h
+q1h
+r1h
+s1h
+t1h
+v1h
+w1h
+x1h
+y1h
+z1h
+^^f11h
+2caca.
+2cacas.
+2caga.
+2cagas.
+2cago.
+2cerdo
+2cola.
+2colas.
+2culo.
+2culos.
+2cular.
+2loco.
+2locos.
+2loca.
+2locas.
+2moco.
+2mocos.
+2mula.
+2mulas.
+2pedo.
+2pedos.
+2peda.
+2pedas.
+2pito.
+2pitos.
+2puto.
+2putos.
+2puta.
+2putas.
+.caca2 \ No newline at end of file
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_et.dic b/lib/kotext/kohyphen/hyphdicts/hyph_et.dic
new file mode 100644
index 00000000..ca948a34
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_et.dic
@@ -0,0 +1,3690 @@
+ISO8859-15
+.aasta5
+.ahe4li
+.al4a
+.al4gas
+.antiik5
+.ap3l
+.ap3r
+.art5r
+.au3a
+.eba3
+.ee2
+.ee4l
+.eela4
+.ee3p
+.ee4s
+.ek3l
+.ek5r
+.gu4a
+.hie5
+.idi4
+.inim5a
+.ise5e
+.is4o
+.ja4e
+.ja4t
+.ka4e
+.ka2o
+.ke5hi
+.kip5r
+.ku4pl
+.ku5sa
+.kusee4
+.la4pl
+.le4e
+.le5hi
+.lemmik5
+.le5se
+.lpp3
+.ma4a
+.maa5a
+.ma5j
+.mi5sa
+.mo4e
+.nek3
+.ni4p
+.nisu5
+.noa3
+.oa3
+.oo4to
+.pap4p
+.pea3a
+.raadio5
+.re4a
+.re2o
+.rep3r
+.re5so
+.r5hi
+.sak5r
+.sap3r
+.se4a
+.sk4
+.skaa5
+.so5li
+.sp4
+.st4
+.teoo4
+.tet3r
+.tina5
+.toa3
+.ts4
+.tsi4s
+.turba5
+.tus2
+.tu3sa
+.ul4ga
+.ulu4k
+.um2b
+.uu4s
+.vaa3l
+.vask3
+.vere3
+.ppe5
+.hi4s
+.le3e
+.r2
+aaa5l
+a1aas
+4aab
+aa4bi.
+5aadel.
+aadio5a
+a1ae
+a4aer
+aa4fe
+aa4gan
+aa2h
+aa4has
+aa1i
+aai4g
+aa4is
+a5ait
+aa2j
+aa2la
+aa4lae
+aala4r
+aa4las
+aa4leh
+aa4lek
+aa4lel
+aalg4
+aali4ke
+aal3k
+a5allik
+aal3t4
+aa2l3
+aa4l
+aa4mad
+aa4man
+aa4mee
+a5ameer
+aa4m
+4aan
+aa4nam
+aa4nat
+a5andm
+aan4duu
+aa5ni
+aant4
+aa4pek
+aa4pen
+aa4ra4b
+aa4raf
+aa4raj
+aara4l
+a5arter
+aa2r3
+aa4r
+aa4r
+aa4sab
+aa4sai
+aa4sar
+aa2se4
+aa4so
+3aas5ta
+a5a4sul
+aa4sut
+aa4s
+4aat
+aa4taa
+aa4tas
+aa4teh
+5aatom
+aa4t
+aa4th
+a1au
+aai5
+a1b
+4a3ba
+a5be
+3abie
+a4bij
+5abs
+a1d
+a4dad
+a4deo
+a2der
+a3di
+adu4r
+adu3se
+a4d
+a5eali
+ae2d
+3aed.
+2aee
+a3ees
+ae4f
+1aeg.
+ae4ga4j
+ae4gi
+3aegn
+2a1e2h
+4aei
+4aek
+a3eks
+2ael
+a5elani
+ae2le
+ae4lo
+ae4lu.
+4ae2m
+4aen
+ae4pi
+ae2s
+a3esi
+4aett
+a1f
+a4fek
+a1g
+3a4gent
+agia4
+a3go
+5agreg
+agud4
+1a2hi.
+ah4kar
+5ahnu
+4ai.
+ai2a
+5aian
+ai4hu
+ai4ke
+ai4kl
+a3ilm
+ai4lu
+ai4me.
+aimp4
+4ain.
+a5inf
+a5inime
+4ains
+a3inse
+ai4pr
+ai2sa
+5aistin
+aist4r
+ai4va
+a1j
+a3ja.
+a4jale
+5ajalo
+a4jalu
+1a2jam
+4ajo
+ajut4
+a1k
+akaa4s
+a4kaat
+ak4as
+3aken.
+a3ki
+ak4kis
+ak4kr
+a3klas
+ak4lau
+a5klii
+a3krii
+ak3ro
+4aks
+ak4te4l
+a2ku.
+aku4map
+a5kvali
+3alald
+ala4mas
+a4lah
+ale4le
+al4et
+alet4t
+5algat
+al4ged
+a3li
+ali4san
+a4liste
+5allee.
+al4le4h
+al4luj
+al2l
+a4lob
+als4
+4alt
+4alu.
+a4lud
+1alun
+al4h
+a4lt
+a1m
+4am.
+a5ma.
+a4maad
+3ametn
+amit4
+am4o
+am4pal
+5amper.
+4am
+2an.
+3anal
+5anatoom
+an4das
+an4deo
+an4dog
+2ane
+a4neh
+a3ni
+a4niso
+4anj
+an4kr
+3anku
+an4nah
+4ano
+anos4
+3ansam
+4anst
+3anten
+5antilo
+ao4d
+ao4he
+a3oht
+ao4j
+ao2le
+ao2lu
+ao2m
+a3oma
+ao4nu
+aoo4p
+ao2pe
+a5opera
+ao2r
+a5oras
+a1osa
+ao4su
+a1ots
+a1p
+a2par
+5aparaa
+a5part
+a3parv
+a3pi
+a3pla
+a3po
+ap4pal
+ap4pin
+ap4pis
+ap3ri
+ap3ron
+a4pru
+a3p
+4ara
+arak4k
+a4rase
+5areng
+3aretu
+3arhit
+2ari
+ari4al
+ari4ap
+4ark
+ar4kel
+5armast
+5armee.
+a4ro4l
+1arst
+5artikk
+3arua
+3arvam
+5arvestus
+1arvu
+ar4v
+asa4las
+a4same
+a4sau
+ase4ma
+as5ema.
+1a2sen
+a4seos
+a4sese
+a4sett
+3a4setu
+as4f
+1a2si.
+asi4ala
+asi3an
+a4sind
+asip4
+5asjan
+ask4
+as4kl
+a5slaav
+a4sok
+as3ole
+aso4p
+as4pet
+as3pl
+as2po
+a3spor
+as4san
+ass5t
+4asti
+5astme
+ast4rak
+a4su4b
+a4sud
+asui4
+a4suss
+a5suu
+a1t
+a3ta
+a4ta
+5ateljee
+atii4v
+atmi4k
+5atroo
+at4ros
+at4rus
+at4soo
+ats4p
+at4s
+att4s
+4atu
+au2a
+aua3l
+au4ba.
+4aud
+au4de.
+a3ui
+4au2j
+au4ke
+aulu3
+aulus4
+au4p4
+a5urg
+aus4o
+au2su
+a3usul
+1auto
+autoo4
+auto5s
+aut4r
+a1v
+av4a
+a4vans
+a3var
+a4veh
+a12
+a12
+a12
+a12
+a4ni
+4a1
+5baa
+baa4g
+baa4k
+baa4s
+bab4
+bae4
+bag4
+ba4he
+ba4ju.
+ba3k4r
+bak4s
+bak4v
+bap4l
+bap4r
+ba4r
+basa4s
+bas4ko
+bas4pe
+bat4r
+4bb
+2bd
+be3a4
+beb2
+bef4
+beg4
+be4l4
+be2ra2
+berk4
+bero4
+be4r4
+be4si
+be4st
+bes4tis
+bet4r
+4bf
+4bh
+bha4
+bi4ala
+bia4v
+2bi1e
+bi4en
+4bin
+bi4pla
+bis4a
+bi4si
+bis4k
+2b1j
+2b1k
+2b1l
+bl4e
+blet4
+b2lon
+2bm
+2bn
+4bort
+2bp
+2b1r
+3brig
+bros4
+2bs
+b3so
+2bt4
+4buks
+bu4l
+3bum
+buse5
+bu4si4
+bus4kr
+2b3v
+1da
+daa2
+da5ab
+daala4
+da4do
+dae4
+daf4
+d5ain
+da4leh
+da4lum
+da4lus
+5dam
+4dann
+da4num
+dao4
+darat4
+4darb
+dar4de
+4da4re
+4daru
+2darv
+d3arv.
+4dasen
+da4sum
+2d5b2
+2dd
+1de
+dea2
+2deaa
+de5av
+ded4
+2dee.
+dee4le
+4dehe
+dek3l
+dek4s
+5del.
+de4lau
+4de4lek
+4deluv
+de4pr
+dep5ressi
+dere4
+de4rel
+de4rep
+5dero
+deru4
+2df
+2d5g
+2d1h
+1di
+dia4v
+did4
+dig4
+dii4g
+diina4
+dii4sa
+dii4su
+4dilm
+4dini
+di2os
+di4plo
+dis4ai
+di4sar
+di4sas
+dis4pr
+dit4r
+2d1j
+2d3k4
+dkop4
+2d1l
+dle4v
+dlust4
+2d1m
+dmee4
+dmi4k
+2d1n
+1do
+do4h
+doi4r
+2dos
+d3osa
+5dosk
+2d3p4
+2d1r4
+5draama.
+drao4
+3dreen
+d4rel
+d2ren
+3drena
+2d1s4
+dsar4
+2d3t2
+1du
+du4b
+due4
+2d5uks
+d4u2s
+du4s1a
+du4see
+dusk4
+2d1v
+2d
+d4l
+4d
+2dl
+d4li
+4d4r
+5d
+4d
+2d2
+3dem
+eaa2
+ea3aj
+e1aas
+ea2b
+e3abi
+e1ae
+ea2hi
+e1ai
+ea2j
+eak4s
+eak4v
+ea2la
+e3ala.
+e1a4lu
+ea2me
+e5amet
+e5ann
+ea4nu
+eao4
+ea2pa
+e1ar
+ea4re
+ea2s
+e4ass
+e5aste
+e5asut
+e3au
+ea2v
+e3ava.
+e1b
+e1d
+ed4a
+e3eali
+e3ees
+ee4fe
+eei4
+eek4r
+ee2la
+3eelar
+e5elekt
+eel5uu
+ee4nai
+ee4nal
+ee4nam
+ee4no
+eent4
+ee4pai
+e5e4pit
+5eepos
+ee4ral
+eer5ap
+ee4ros
+ee4rot
+ee4sin
+e5esine
+ee4s5ist
+5eeskir
+ee4s
+ee4tm
+ee4t
+e1f
+e1g
+egaa4
+egas4t
+e4goi
+4eha
+e2he.
+e2hi
+e3hin
+5ehist
+1e4hit
+5ehiti
+eh4ta4
+4eh
+ei4dul
+ei4e
+eie5ri
+ei2ga
+e3iga.
+ei4ha
+ei4he
+e3ilm
+ei2lu
+ei4mem
+5eine.
+ei4roo
+e5i4sa.
+ei4sist
+ei4tau
+ei4t
+ei4va.
+e3j
+e3ka
+e4kahi
+e3ke
+ek4kap
+ek2l
+ek4lo
+e3k4o
+ek3re
+e3krii
+4eks.
+5eksam.
+3eksem
+eksi3k
+3ekska
+eksp3r
+5ekstr
+ek4tl
+e3k
+elaa4v
+e4lagr
+e2lam
+3elamu
+el4an
+5elanik
+eleis4
+e4leks
+5elektro
+3eleme
+5elevaato
+e3li
+e4lid
+elii4t
+el4kus
+e4l4ob
+elo4p
+els4t
+elt2r
+el4t
+e2lu
+1elu.
+e5lub
+elu5i4
+1e4lun
+e3lus.
+e4luss
+el5uss.
+el4h
+e1m
+5emand.
+e5mat
+emne3
+emos4
+emp4r
+5emuls
+endus3
+5enelas
+e5nem
+3energ
+e4nese
+e4nesl
+enk5l
+enk4r
+en4sal
+en4tos
+en4t
+eo5a
+eo4ja
+e3o4le
+eo2lu
+eo2ma
+eoo4p
+eo5pl
+e3osa.
+e3osak
+e5osali
+e5osav
+eos4f
+e3ots.
+e1p
+e3pl
+e4pli
+ep4lu
+e1r
+e3raa
+5erakon
+5erald
+e4rao
+erei2
+erek4
+5ergut
+erih4
+eri4uu
+er4nau
+e4ro4r
+erp4
+er2pr
+ers4k
+er4taa
+er4tak
+er4tes
+e4rud
+es1an
+1e2se.
+e5sek
+e5sen
+e5sil
+eska4j
+eska4s
+eske4
+es5kel
+esk3l
+esk3r
+es2k5
+es4laa
+es3ole
+es4or
+es2po
+e3spor
+es4sist
+4est
+es4t
+e3su
+esup4
+e1t
+e3t4a
+e2ten
+5etendus.
+etii4s
+et2ra
+et4sin
+et4soo
+et4s
+et4taj
+1ette
+et4tru
+et4t
+et4t
+4etu
+e4t4d
+e4tm
+eu4de
+e3u2j
+e3u2l
+e5u2n
+eu4p
+eu4s
+e5usk
+e3uu
+e1v
+e3v4a
+e12
+e34
+e12
+e14
+e1
+5faa
+faa4n
+4fa4d
+2ff
+1fi
+fii4t
+4fj
+4fk
+2f1l
+f2lo
+5floora
+2f1n
+1fo
+folk5
+fo4ro
+2f1r
+f2re
+3frees
+2fs
+2f1t
+ftat4
+3fu
+3gaa
+gaa4r
+4gaast
+4gab
+4gaed
+gag4
+2gah
+ga2hi
+gai4g
+ga5is
+ga3k4
+5gam
+ga3o
+ga3p
+4gart
+4garv
+g4as
+4ga4suk
+5gata
+gat4r
+gau4
+ga4va.
+ga4van
+2g3b
+2gd4
+gea4
+ge4du.
+gek4
+ge5kl
+4gekse
+ge4lah
+gela4s
+ge4leh
+ge3lu
+ge4l
+ge4nan
+geok4
+ge4or
+4geos
+4gerg
+ge4rus
+4gf
+4gg
+2g1h
+gi2aj
+gii4s
+gi3k
+4ginf
+4gint
+gio4r
+gi3pl
+gi4san
+gi4sil
+gi4s
+git4r
+gi4vaj
+2g1j
+2g1k
+2g1l
+g4lt
+2g1m
+2g1n
+gne4ta
+gne4te4
+4goh
+go4le
+go4ma
+go4po
+2g1p4
+2g1r
+g2ran
+5granaa
+3g2rav
+g2ru
+3grup
+4g1s4
+2g1t2
+g3tr
+3gu
+gub4
+gue4
+gu5i
+gu4nel
+gu3o
+gup4
+gu4sen
+gu4s
+guu4j
+2g1v
+2g34
+4g
+g4l
+3ha
+haa4ri
+haa4s
+hal4lai
+5har
+hasa4
+hat4r
+1he
+hee4m
+hee4s
+hei4s
+hek4v
+2hel.
+hels4
+het4r
+4h1h
+hhe4l
+1hi
+hia2
+hii4s
+5hil
+5him
+hio2
+hi4san
+hi4sar
+hise4l
+hi4st4
+hi4s
+5hits
+h1j
+hjaa4
+4hk
+h4kal
+h4kas
+h4kis
+hk3l
+h4ko4
+hk3r
+hks4
+hkt4
+h4kusk
+h4ku4su
+h4k
+h4k
+h1l
+hle4n
+4h1m
+h4mo4
+h4m
+h1n
+hnika5
+1ho
+hom4o
+4hp4
+hrs4
+4ht
+h2ta
+hta2j
+h5tak
+hta4l
+ht5ar
+hta4su
+h4teg
+hte4n
+hte4r
+h4tid
+h4to
+h4tr
+ht5s4
+h4t
+h4t
+1hu
+hu3a
+hue4
+hui4d
+huk4l
+hup4
+hu3sa
+2h1v
+hvad4
+hvast4
+hve4l
+h4vini
+h4vo
+hvu4s
+1h
+3h
+1h
+3h
+4ia
+iaa2
+iaa4l
+ia5alane
+i3aast
+i5a4bi
+ia4bo
+i1ae
+ia2g
+ia2h
+i3aine
+i1a2j
+ia4kr
+i3akt
+i1a2la
+i5alb
+i3alli
+i1a2lu
+ia2me
+i5amet.
+ia2na
+i5andj
+i5andm
+ia4ne
+i5anne
+ia2p4
+i3apar
+ia5pr
+ia2re
+i3arm
+ia4ru
+i1arv
+ia2s
+ias4ke
+i5aste.
+i3asu
+ia4tel
+iat4r
+i1au
+iau4l
+i5a4vaj
+i5avald
+i1b
+i4bad
+i4bau
+i1d
+5ideaa
+idii4
+idlu4
+ie2
+i3eali
+i1eel
+iei4
+i1eks
+i5elani
+i1elu
+i3eos
+ie4ri
+iers4
+i3esi
+ie5so
+i5ess
+ie4st
+i3eten
+ietu4s
+i1f
+i1g
+i4ga4g
+i5gar
+5igatsu
+i4gav
+ig4ram
+ih4le
+ih4te
+ih4tin
+ii4a
+ii4deo
+ii4du.
+iie3
+ii4es
+ii4gaa
+ii4ga4s
+ii4ha
+iika4
+ii4kis
+iik4ro
+iiks4t
+iikt4
+ii4lab
+ii4lad
+ii4lae
+ii4last
+ii4leh
+ii4lel
+ii4les
+ii2l4
+ii4l
+ii4mai
+iimat4
+ii4met
+ii4nai
+ii4nau
+i5inde
+i5inf
+ii3ni
+i5inimen
+iinit4
+iink4
+iino4
+ii4nol
+ii4nos
+ii4n
+ii4pr
+ii4ran
+ii4rau
+iirs4
+ii4r
+ii4san
+iise4l
+ii4sev
+ii4sik.
+ii2ta
+ii4teh
+iito4
+ii4tom
+ii4tos
+iit5re
+ii4t
+ii4t
+ii4ves
+ii4vet
+ii2vo
+i1j
+i1k
+i4kalu
+i4ka4re
+i4kark
+i4kaut
+i4k5elu
+ike4si
+i3klaa
+i3klas
+ik4ler
+i5klub
+ikop4
+ikos4
+i4kov
+i3kre
+ik3ro
+ik4sar
+iks4k
+iks4po
+ik3t2r
+i3ku
+iku3a
+il4a
+ila4s
+i4lasi
+ilia4
+i4lisi
+il4kan
+il4k
+ille5s
+illo4
+5ilme.
+il4mot
+3ilmut
+ilo5g2
+ilp3l
+il4ti
+i5lun
+ilu3sa
+5ilustu
+il4h
+i1m
+i4melu
+imi4g
+imisu4
+i4mo4l
+5imper
+i1n
+ind3al
+5indeks
+inde4r
+ind4re
+2ine
+inee4s
+i4neh
+i4neks
+ini4k
+i2nim
+ini4mas
+i4nime
+5inimene
+5iniml
+i4nini
+inna5a
+inni4si
+3insen
+1insp
+1inst
+3inven
+io4de
+io4h
+i3oht
+i5ohv
+io4j
+i5oks.
+io2le
+i3olek
+io2lu
+i5oluk
+io4l
+io2ma
+i5oman
+ioo4da
+ioo4ne
+iooni3
+io2p
+i3oper
+i5ork
+i1osa
+ios4f
+ios4p
+ios4t
+iost4r
+io4su
+i3ots.
+i3otsi
+io4t
+i1p
+i3pla
+ip4lu
+ip4ro
+ip4sas
+ipse4
+ip4sep
+ip4sus
+i4ra4b
+i4rase
+ir4dis
+ir4n
+i2rui
+iruu4
+isaa4v
+isa4ja
+i4sana
+isa4re
+i4sarh
+i4selo
+i3sem
+iset4s
+isi4g
+i2so
+3isola
+i5soli
+is5oma
+iso4r
+i3sot
+i3s4pek
+is3pl
+i3s4por
+is3sp
+5istand
+i5s4tiil
+5istme
+ist4ru
+ist4se
+i5stsee
+5istutu
+i3su
+i4sm
+i2s4l
+is4r
+2it
+itaa2
+itee4l
+it4rak
+it4ras
+it2ru4
+its3k
+it4so
+itte1
+itt4s
+iu4b
+iu2da
+iu4gi
+iu2j
+i3uju
+iu4la
+iu4mar
+iu4me4
+iu2mo
+iu4ni
+iu4pu
+iu5sa
+i5uss.
+iu2su
+iuti4
+i3uu
+i1v
+i4vad
+i4vakt
+i4va4lus
+i4vant
+i4vau
+i4veh
+ive4l
+iviil5
+i4v
+i12
+i14
+i12
+i1
+j4a
+3jaa
+ja1aj
+jaa4l
+jaa4r
+jaa4s
+jab4
+jad4
+ja5el
+jae4r
+jag4
+ja3i2
+ja5kra
+5jama
+5jame
+jao4h
+ja3p4
+jas4ke
+jas4tii
+jat4r
+jat4su
+jau4b
+jau4l
+je3lu
+3jo
+joo4k
+jue4
+5juma
+ju4sei
+juse4l
+5j
+5j
+1ka
+kaa4da
+kaa3de
+ka5aj
+ka4al
+kaa4ra
+kaa4sis
+kaa4ta
+4kader
+4kaed
+4kaeg
+kae3lu
+kag4
+kahe5i
+4kaia
+2kain
+ka5ist
+kaitse5
+ka4jav
+ka4ju.
+k5a4lus
+ka4pl
+ka2pr
+4karm
+4kaset
+k5asj
+kat4r
+2k3b
+2kd4
+1k2e
+ke4el
+kee3lu
+2kehi
+4keks
+ke4laj
+ke4lak
+ke4lok
+4kemb
+2ken.
+5kene
+keo2
+kes2k
+kesk3a4
+ket5ra
+ket4te4
+2kf4
+4kg
+2k1h4
+1ki
+kie4
+kik4r
+4kinf
+kio4
+ki4pr
+kis4a
+ki4san
+ki4sik
+4kiste
+kit4r
+kiu4d
+kiu3su
+2k1j
+4k1k
+k3kra
+kks4
+kku4ro
+2k1l4
+k2la
+k3la.
+3klaas
+k3lai
+3k4lamb
+k3lan
+3klapp
+5klassi
+k3lat
+5klaver
+kle4a
+k4lee
+k2lei
+3kleit
+k3lem
+k4lib
+5klibu
+klig4
+k2lii
+3kliim
+5kliiste
+k3lik
+k3lin
+k4link
+k2lo
+k3loom
+3klots
+k2lub
+k3lus.
+klu4sa
+klu4s
+k4lut
+2k1m
+2k1n
+knaa4
+k4nip
+1ko
+2koks
+k4ol
+ko4len
+koo4sa
+4ko4rie
+4korpi
+k5osa.
+ko4va
+2k3p4
+2k2r
+k4raan
+5kraana
+3kraav
+3krab
+3k4rae
+k3rai
+3kramp
+4kran
+k3rau
+5kredii
+3k4reem
+4kreg
+5k4res
+k5ret
+4krip
+5kristal
+k4roh
+3krohv
+k4rook
+k3rut
+3kruu
+3kruvi
+4k3r
+4k1s
+k5sae
+k4sai
+ksek4
+ksi2k
+ksika4
+ksit4
+ksk4l
+ks5k
+ksp5lo
+ks2pr
+kst3r
+ks4t
+2kt
+kt2ra
+1ku
+kui4s
+4kujuj
+4kujum
+kuk3la
+4kuks
+kul2d
+2kulp
+kumi4su4
+kummi5
+3kus
+ku4siv
+kut4r
+kuu4ni
+kuuse5
+4ku
+2k1v
+k4van
+3kvart
+5kviitu
+1k
+k4de.
+2ki
+k5is
+4kp
+1k
+4kd
+1k
+ki5s
+2kk
+4km
+1k
+2khe
+4kle
+4kll.
+2k4
+4k
+1la
+5laag
+la4aj
+laa2r
+laar5a
+laa4sa
+2laav
+5laava
+4ladj
+5ladu
+lae4r
+3laev
+4lahv
+lai5ek5
+lai4ga
+la4jap
+la4jav
+la3k4r
+lak4v
+la4la.
+4lald
+la4les
+4lals
+la4lus
+3lama
+3lamp
+4lams
+la4nes
+2lani
+lap4l
+4l1arv
+4lar
+la4sas
+4lasb
+la4sei
+la4sem
+4lasen
+l2asi
+4la4sut
+3lau
+5laud
+lau4n
+lau5su
+4lavh
+2l1b
+l4bau
+lb4lo
+4l1d
+l4dala
+l5dist
+l4don
+l4d
+1le
+le1a2
+3lee
+leek5l
+lee4le
+leep5r
+le3hi
+4lehit
+5leht
+3lej
+4lekk
+5leks.
+4lektr
+lektri5
+4lele
+le4lek
+5lema.
+le4mor
+lenaa4
+leo2
+le3oh
+le5olu
+le4pl
+le2s
+4lese.
+le3s
+3let
+4lette
+4l1f
+lfoo4
+lf4t
+l1g
+l4gae
+l4gai
+l4gall
+l4gann
+l4gase
+lgas4k
+l4ge4le
+l4gi4d
+l2go
+l4gu4j
+2l1h
+1li
+li4ala
+li5am
+lia4v
+3lid
+li4dan
+li4ga.
+4liia
+liie4
+5liig
+lii4na
+5lik.
+likai4
+li3kla
+lik4ro
+4lilm
+4li4lus
+limi4s
+4linf
+4linim
+4lins
+lin4te
+4linv
+lio4k
+li3p4l
+li4sah
+li4sik
+4lisol
+li4suj
+li4sl
+li4s
+lit4r
+li5tu
+2lie
+2l1j
+lja1a
+lja5os
+2l1k
+lkk4
+l4kli
+lk4lu
+l3kr
+2l1l
+l5ler
+lli3tr
+l2lor
+l4lots
+llp4
+lls4
+llt4
+l3lu
+l4l
+2l1m
+lmaa4v
+lmat4
+l4mau
+l4meks
+lmp4
+2l1n
+1lo
+lod4r
+lof4
+lo4gal
+4loha
+4lohv
+5loi
+lok4r
+2lo2l
+l1ole
+l3olij
+3lolo
+lo4man
+5loog
+loo4ram
+4lord
+4lorn
+2losa
+l3osa.
+2l1p
+l3plaa
+lp4le
+l4puk
+2l1r
+lrih4
+2l1s
+ls4ka
+lske4
+ls4o
+lste4
+2lt
+l4tau
+lti4l
+l4tok
+lt4sel
+lt4sis
+l4tuk
+l4tm
+l4t
+l4tt
+1lu
+3lua
+lu3al
+lud4
+lue4
+3lug4
+4luhk
+4luim
+lu4juk
+4luk.
+3lukk
+2lun
+lu4nin
+lu4nio
+luo3r
+lu4rau
+lu4see
+lus4tii
+lu4sum
+lu4s
+3luta
+lut4r
+3luu
+2l1v
+lvel4
+1l
+4ld
+4lie
+5lik
+4lis
+4lit
+l4l
+l3pe
+lp2p
+1l
+4le
+1l
+4ln
+ln4gi
+lne5
+1l
+l3h
+l4ma
+1ma
+3maa
+maa2b4
+ma3abi
+maa3la
+maa3p
+ma4bi
+ma1e2
+mag4l
+5mahl
+4mahv
+4majam
+4ma4ju.
+ma3kl
+mak4v
+3mal
+ma4la.
+mal4ma
+ma4om
+ma3pl
+4mart
+4marv
+ma5se
+ma5sin
+ma4st
+4ma4sul
+ma4s
+4maut
+2m1b
+mbat4
+mbe2r3
+mblu4
+mbo4j
+mb5usa
+2md4
+1me
+me1a4
+me4an
+3mee
+mee5la
+mee4s
+me3hi
+4mekv
+mers4
+mert4
+me5s4o
+m4et
+4met.
+4metl
+2metn
+met4se
+4mett
+me5u4
+2m1f
+4mg4
+2m1h
+1mi
+mia4m
+mia4r
+4mide
+mi4kaj
+mi4nah
+4minf
+mi3ni
+mip4
+mi2s
+mis1a2
+mi3si
+mi4sig
+mi4sih
+4mi4sik
+mi4sil
+mis3k4
+mis4tii
+mist4r
+mis3ts
+mitte3
+2m1j
+2m3k4
+2m1l
+2m1m
+m4maat
+mma4s
+mm4e
+mme4r
+mmika4
+mmi4kal
+m4mor
+2m1n4
+1mo
+4moh
+mo4ha
+m3oks
+4morg
+4morn
+mo3sa
+2mp
+mpa4l
+m4pap
+mp3l
+mp3r
+2m1r
+mruu4
+2m1s
+ms4o
+ms4p
+2m1t2
+m5ts
+1mu
+mua4
+mu5ah
+mud4
+mue4
+mui4m
+4muls
+mup4
+5mus
+mut4ra
+2m1v
+m4d
+4mig
+4mp
+3m
+4mk
+3m
+4mk
+mr4gel
+3m
+4mh
+4m
+1na
+n4aa
+na5ah
+naa4lu
+naa4r5a
+nad4
+na5ei
+nag4l
+nah4ke
+nai4d
+nai4si
+na4kru
+2nal4
+4na4mer
+na4mii
+n5amiid
+nants5a
+na3o4
+nap4l
+na4ret
+4narv
+n4as
+4nasb
+nass4
+nat4ra
+nau4b
+4nb4
+4n1d
+n4daas
+n4dab
+n4dae
+nda4ko
+nda4l
+n4dau
+ndif4
+ndip4
+n4do4r
+n4duj
+ndu4s
+n4d
+1ne
+5ne.
+nea2
+nee3la
+nee4le
+nee3lu
+nei4v
+ne4lah
+4nelas
+ne4lek
+neo4d
+ne4pl
+2nerg
+n4es
+ne4tan
+ne4tm
+2n1f
+2n1g
+n4gai
+n4gall
+n4gase
+n4gau
+ng4l
+n4go4r
+ng3r
+ngud4
+ngus4t
+n2g
+2n1h
+1ni
+ni3ap
+nia4v
+nig4
+nii4g
+nii4tu
+nikkel5
+4nilm
+5nima
+nima4s
+5nimet
+3nimi
+ni4mig
+4niml
+4nint
+ni4sid
+nis4ke
+4nisl
+2n1j
+2nk
+n4ka4n
+nk3r
+nk4se
+nkst4
+2n1l4
+2n1m
+2n1n
+nna3e
+nna5i
+nnak4r
+n4ne4f
+nnio4
+nnk4
+1no
+4nob
+nod4
+4noks
+noo4na
+n4or
+2n3p4
+2n1r
+2ns
+n4salp
+ns4e
+nsk5r
+n3so
+nso4r
+nste4
+ns4tee
+ns4tem
+nstis4
+nst3r
+ns4tu
+nsu4s
+2nt
+ntaa4r
+n4teh
+nte4l
+ntig4
+n4tiso
+n4tots
+n4tr
+nt3ra
+nt3re
+nt4sab
+nt4sal
+nt4san
+nt4sar
+nt5s
+ntt4
+n4th
+n4tk
+1nu
+nu4da
+nui4g
+nur2k
+nus4p
+2n1v
+1n
+n4l
+4nli
+1n
+1n
+1n
+4nl
+4n
+4n
+oa2
+oa4a
+o1ae
+o5aku
+o3anal
+o5apa
+oau4b
+o1b
+oba4s
+1obj
+4o1d
+odaa4
+odaal3
+o4deh
+odu4s
+od4
+oe5a4
+oe4fe
+oe2l
+o3ele
+oe4mi
+oe4mu
+o4eo
+oe4rah
+oe4r
+oe4si
+oet4r
+o1f
+of5r
+o1g
+og4la
+og4li
+3ohaka
+oh5to
+5ohvits
+oi2ta
+oiu5a
+o1j
+oju2s
+okast4
+okku5
+ok3la
+ok5liin
+okoos4
+ok3r
+ok4re
+ok4ri
+o5kris
+ok4ru
+o3la
+o4lae
+olag4
+ola4las
+ola4su
+ol4do
+ole4an
+3olek.
+o4lend
+olig4
+o3lii
+olii4g
+o4li4lu
+o3lis
+4olj
+ol4lae
+ollis4
+ol4l
+ol4mai
+4o3lo
+ol4tam
+ol4tar
+1olu.
+5olukor
+o4luks
+ol4
+o4l
+3omadu
+om4baj
+om4ban
+o4mok
+ona4a
+o4naj
+ona4ko
+o4neh
+o4nele
+on4gos
+onit4r
+oniu4
+onsoo4
+ont4re
+o4nuu
+2o2o
+oo1a
+oo4kal
+ook4r
+oo4k
+oo4lau
+oo4lee
+oo4lig
+oo4list
+oo4log
+oo4l
+oo4l
+oo4nah
+oo4nar
+oo4nau
+oon4dee
+oonk4
+oono4
+oo4noh
+oons4
+oon5t4
+o5opti
+oo4rat
+oo4ree
+oo3sa
+oo4sel
+oo4t
+o3pa
+op5last.
+op4lu
+op3ra
+op3ri
+o2r3ai
+o4ralg
+ora4mii
+o4rana
+5orav
+3order
+1org
+org4r
+oria4
+3orju
+5orkeste
+3orna
+or4nel
+or4tal
+ort3r
+oru4s
+or4v
+o2sa
+o4sake
+3osako
+4o3sau
+4ose
+o4seks
+4osf
+o2si.
+4osin
+3oskus
+4osl
+4oso
+o4sok
+os1ol
+os4pa
+4oss
+os4saj
+os4s
+os5taas
+os4tem
+4osto
+ost4ru
+5osuti
+4os
+oto5a
+otok4
+ot2ra
+o3tran
+3otsa
+o5ts
+ot4ta
+ot4teo
+otus4ta
+ot4l
+ou4b
+ou4n
+o1v
+ovaa4l
+ovio4
+ovol4
+o4vu4n
+o34
+o2
+1pa
+paa4ka
+pa3a2m
+paa4tel
+pa4e
+pa4lus
+pans4
+pa4pr
+5paras
+3park
+4parta
+pa4sp
+4pb
+4pd
+1pe
+pe2a
+pea5j
+peas4
+pe4au
+pea3v
+pe4f
+4pektr
+pela4
+4pe4lev
+pel4t
+pe4l4
+p4em
+pe4ol
+5perd
+pe4tap
+peti4k
+2pf4
+pg4
+2ph
+1pi
+pii4v
+pik5r
+pin2d
+pin4gis
+pip3r
+pis5ta
+piu4g
+2p1j
+2p1k
+2p2l4
+4pla.
+p4laa
+p5laasi
+3plaat
+p4lak
+p3lam
+p5lane.
+3plasm
+5plastik
+plek2
+3plekk
+4p3lem
+p3li
+5pliia
+pliig4
+3plok
+p3lom
+p3lu
+3pluus
+4pl
+2p1m
+2p1n
+p4neu
+1p4o
+5po4e
+3pon
+3poo
+poo4la
+poola4v
+pordi5
+4p1p
+ppa4k
+p4pas
+ppe3a
+ppee4
+pp3l
+p2p3r
+pps4
+p4pud
+p4p
+p4p
+p2r4
+2pra
+3praa
+3prag
+3prakt
+p5rau
+p4rep
+p4resi
+4prib
+2prii
+p5riit
+p4rog
+p4roo
+4p4ros
+3p4rot
+4prum
+5pruu
+2p1s
+ps4a
+p4sor
+3p2s
+2p1t
+p4tak
+3pu
+pua4
+pu4da
+puha4
+pui4t
+puk4k
+pul4ti
+4purt
+pus4p
+2p1v
+3p
+phi3
+p4i
+pi4s
+pli4
+5p
+1p
+pr4gu
+4ps
+3p
+p3he
+4p
+4p
+1ra
+raal3a
+4raale
+5raalne
+raa4lu
+raamatu5
+raa4ta4
+4raatt
+raa4tu
+4raav
+5raa
+raie3
+2rain
+r3aine
+rai4si
+r5a4la.
+ral4t
+ra4lus
+3rame
+ran4dem
+ra3om
+4rapa
+ra4pl
+4rapt
+4rarb
+ra4ren
+4rars
+2rarv
+ra4sal
+4rasen
+ra4sis
+rast4r
+ra4suk
+ra4sul
+ra4sut
+5ratas
+ratiiv5a
+rat4sen
+raua3
+rau2d
+raud5o
+2rauk
+4raum
+4raur
+rau4te
+5ravi
+2r1b
+r4bae
+4r1d
+r4dae
+r2dar
+rde3a
+rd4re
+r4duj
+r4d
+1re
+5re.
+5rea
+reb2
+ree4le
+ree4ma.
+ree4man
+3reer
+3reet
+5reg
+2rehi
+rei4se
+rek3l
+4reks
+re4lai
+re4liit
+5relv
+re4m
+4repp
+re2pr
+rep3re
+re4sin
+re3te
+ret4k
+re4tr
+ret5s
+2r1f
+rf4r
+2r1g
+r4gae
+rg3ah
+rga4re
+r4geh
+rgi4me
+r5g2ra
+2r1h
+1ri
+3ria
+ri3am
+ri5ast
+5rid
+2rig
+ri4ga.
+3rige
+rig4r
+2riib
+5riie
+4riinu
+ri4kis
+ri3k4r
+4rilm
+3rim
+ri5oks
+rio4r
+3rip
+rip4li
+4rip2p
+4ri4sa.
+ri4sah
+ri4sar
+ri4ses
+4risol
+ri4tol
+ri3t2r
+5riu
+5riv
+4ri
+2r1j
+2r1k
+r4kad
+rk5ain
+rka4se
+r4kek
+rkt4
+2r1l
+2r1m
+r4mald
+r4me4le
+r4mig
+rmo4ra
+rmo4s
+rmp4
+rms4
+2r1n
+r4nad
+r4neh
+rnk4
+1ro
+roa4
+ro3e2
+rok4k
+rol4la
+rol4le
+4romb
+2romi
+ro4nop
+roo4ga
+4rosa
+ros4po
+ro5staati
+rost4r
+4ro
+2r1p
+rp5ret
+2r1r
+r3ri
+2rs
+rsaa4l
+rs4l
+rs4o
+r5s2po
+rs4tak
+2rt
+r4tah
+r4tos
+rt2r
+rt4ra
+r4tri
+rt5roo
+rt4sai
+1ru
+2rua4
+rud4
+r4uj
+ru3kr
+3ruma
+4rumb
+2rumm
+4rump
+5rus.
+ru4set
+ru4sin
+ru4sul
+rut4r
+ruum5a
+4ruur
+2r1v
+rva4la
+rva4lu
+r4vann
+rvas5k
+rvis4k
+r4voh
+r4vok
+1r
+2r2l
+r5li
+rn4gu
+4rr
+3r
+4rk
+r4pe
+rp5l
+1r
+4r4r
+1r
+4rk
+4rm
+4r4r
+4r
+4r
+1sa
+3s2aa
+saa5j
+saa4lu
+sa4an
+4s3aas
+3saba
+sa4bi.
+4sabo
+s4ad
+5sada
+4sade
+s5ader
+2s1ae
+sae4l
+5sa5ga
+s4age
+sa4gu
+4sahv
+3sai.
+4saia
+s1ain
+s4ajan
+sa4ju.
+sak4ro
+5saks
+4saku.
+sa4k
+4s3a4la.
+4salas
+s4alat
+5salat.
+sa4lev
+4salla
+4sallu
+3salt
+sa4lum
+5salv
+3s4am
+4samp
+4sank
+4s5ann
+s4ant
+4santi
+s4anu
+sa4num
+sa2pr
+sa4ris
+s4arv.
+sar4va
+sase4
+3sasti
+sas4tii
+sa4suk
+sa4sum
+3sat
+4satl
+s5avald
+2s3b2
+2s3d2
+1se
+3sead
+se3ala
+s5eali
+se5aval
+se4du.
+4seela
+see4le
+s5eeln
+see4ma
+4seepi
+3seer
+see4si
+see4ta4
+4se4fe
+5seg
+sega5a
+2seh
+3seha
+3seho
+5sehu
+5seh
+3sei
+sei4d
+sei4si
+3seka
+se3kl
+4s5eksp
+se4laj
+4selek
+5seli
+4sellu
+3selt
+2selu
+4sens
+se5oh
+seo4k
+se5om
+seo4p
+seo4r
+3sep
+sepat4
+4serem
+4sese.
+se4si.
+4se4sin
+s5esit
+ses4k
+3sest
+4s5eten
+se3t2r
+4sette
+2s1f2
+2s1g2
+2s1h
+1si
+3sia
+sia4h
+sie4
+5sign
+sig4ra
+s5i4ha.
+sii4g
+sii4sa
+sii4se
+4siits
+sii4tu
+si4ket
+siko4d
+siks4p
+sikt4
+sik4vi
+4sinim
+s5inime
+4sins
+sio4le
+si4pro
+4sirr
+5siru
+4si4sa.
+si3se
+s5i4sik
+sis2p
+sisse3
+s5istuj
+5sisu
+2s1j
+sja5ar
+2s1k
+4ska
+5skaa5la
+ska4no
+5skeem.
+s4kela
+5skelet
+s5ken
+ski4g
+sk2l
+s5klas
+5skler
+skuk4
+3skulp
+sku4si
+2s1l
+4s1m
+sma4sa
+2s1n
+sne4p
+1so
+3sobi
+3soe
+s1oht
+3soi
+s5oks.
+2so2l
+s3olek
+s3olij
+5solo
+so3lut
+so2ma
+3son
+3soo
+soo5o
+4so4pe
+so4pr
+5sor.
+s3orj
+3sort
+2s1os
+4sotsu
+2s1p
+s5per
+2s1r
+2s1s
+ssel4l
+ss2f
+ssin4
+s4sinf
+ssk4
+ss4ke
+ss2p
+s5spor
+ss2t
+s5stat
+ss4ti
+sst5r
+s4suss
+2s1t
+s2taa
+3staad
+5staa
+s4tain
+4stam
+5standard
+3start
+s4tati
+5statis
+s4teno
+5stepp
+stet4
+s4toh
+s4top
+s4tot
+5streik
+5strek
+5struktu
+st4so
+stt4
+stu2s
+stu4s5a
+3stuud
+st4
+s4tr
+s4th
+1su
+sua2
+su4bar
+sud4r
+su4du
+su5e
+su4jul
+4suks
+s5uks.
+5sulg
+sul4ga
+sun4de4
+su4nis
+supe4
+supe5s
+su4pr
+4surb
+5sus.
+sus4aa
+su4ses
+s5uss.
+sus4ti
+su4sun
+sut4r
+sut4
+4suug
+suu4ra
+suusa3
+2s1v
+svus4t
+1s
+5sda
+s4de
+4s3h
+3sid
+4sie
+2s1ig
+2s5is
+3sit
+s2l
+2s3li
+3slm
+3sn
+2s1p
+5sr
+ssa4
+2s3u
+1s
+4sd
+s2k
+2sn
+1s
+4sk
+4sm
+1s
+4sa
+5sd
+5sg
+2sh
+s3hi
+2sk
+s3ks
+s4la
+sl5di
+s3lem
+4slo
+s4ra
+3ss
+3s
+4s
+1ta
+3ta.
+3taat.
+2tabi
+4t3aed
+t3aine
+4tais
+4ta4ko
+t2al
+4ta4laj
+ta4lev
+tal4las
+ta3lu
+ta4lus
+3tam
+5tama
+4tanda
+ta4ot
+ta4pla
+ta4pr
+4ta4ret
+4tarm
+2tart
+ta4se4r
+ta4ses
+ta4set
+ta4sis
+ta4s
+2taut
+3tav
+ta4vaj
+2t1b4
+2td2
+1t2e
+te4aa
+tea4g
+tea4h
+te3an
+te5as
+3tee
+tee5lu
+te4et
+te3hi
+tehi4s
+te3kl
+tek4r
+tek4v
+tel4ke
+te4lok
+te3lu.
+4tepiv
+tep4l
+2tepp
+3ter
+5ter.
+te5r4a
+terd4
+4terg
+ters4
+tes4a
+te4sin
+tes4k
+2t1f
+4t1g4
+2t1h
+thl4
+3ti
+tia2
+ti3e
+tii2k
+tii4ma
+tii4sa
+tii4ve
+tik4o
+ti3k4r
+tik4vi
+4tilm
+5tima
+4tinf
+tin4ga
+ti4sai
+tisa4v
+ti4sik
+titee4
+2t1j
+2t1k2
+t3kl
+t3kr
+2t1l4
+tlu4
+2t1m
+tmika4
+tmis3
+2t1n
+3t2o
+4to4da
+toen4
+tog6
+4toks.
+toksi5k
+to4lek
+to4lu.
+to4lum
+tonis4
+to4o
+too4no
+too4pe
+to4rau
+tos4p
+tost4
+2t3p4
+2t1r
+t4rad
+t2raf
+3trafo
+t4rahh
+5trall
+t2ran
+3trans
+t4rate
+5traum
+t2re
+3treen
+t4rei
+5treim
+3trep
+t3rig
+5triib
+5triip
+5trikoo.
+tri4pl
+t4ross
+3trumm
+5t4rup
+3t2ruu
+3t2r
+4tr
+2t1s
+t3s2a
+ts4aa
+tsa5is
+t4saju
+tsa4lan
+3tsehh
+tse3la
+5tsellu
+5tsemen
+4tsena
+5tsensu
+tsig4
+5tsiitsi
+t4sink
+5tsiste
+ts4laa
+t2soo
+t4sor
+tsp4
+t4suss
+2t1t
+t4tad
+ttee2
+ttes2
+t5tsem
+3tu
+4tuim
+tu4raj
+tus1a
+tu4s5ee
+tu2si
+tus3s
+4t5uss.
+tus3t2
+tu5su
+tu4s4
+tus4
+4tutop
+4tuud
+tuule5
+2t1v
+1t
+5tb
+2ti
+t4l
+4t4n
+4tp
+2t5un
+1t
+4te
+4tk
+t5k
+t3p
+1t
+th4t3a
+t5ke
+4tm
+1t
+t5he.
+t3hi
+2t1
+t2e
+5tek
+3tem
+uaa4
+u3aast
+ua2b
+u5abi
+u1ae
+ua4he
+uai4k
+u3ain
+ua2ja
+u3akt
+ua2l
+u3all
+u3amet
+u1an
+ua4nu
+u5apar
+ua2re
+ua5ree
+u5art
+ua2s
+u3ast
+u1au
+uau4d
+ua2v
+u5avald
+u1b
+u4dalu
+u4deh
+udeo4
+udo4r
+u5eal
+u3eel
+u3eks
+ue2ma
+ueo4
+ue4r
+u1f
+u1g
+u4gi4d
+ug2ra
+u5graa
+u4g
+uh4tem
+uh4ter
+uh4tin
+uh4tis
+uidu5
+ui2ga
+ui4h
+u3iha
+u3ilm
+5uim.
+uina2
+uinas5
+ui4si
+3uisut
+uite4h
+ui4to
+ui4vala
+ui4vel
+ui4vo
+u1j
+u5ja
+u4juj
+u4jum
+3ujumi
+u1k
+ukaa4s
+ukii4g
+ukki5
+ukop4
+u3kraa
+u5kro
+uku4sa
+uk4vi
+ul4a
+ul4deh
+uldi4
+ul4kr
+ul4len
+ul4lui
+ultra5
+u3lu
+uluo4
+4u1m
+umaf4
+u4mau
+5umbroh
+umet4
+umf4
+umia4
+umit4
+um5p4r
+unaa4
+unaal5
+un4dak
+un4dan
+un4das
+un4do
+u4ni.
+u1o2
+uo4h
+u2or
+u3org
+u1p
+u3pla
+up3le
+uppe4
+up4pis
+uraa4l
+u4rag
+ura4ju
+u4rala
+u4rap
+ur5auk
+ura4va
+3urb.
+urde3
+urea4
+u4reos
+ures4k
+u4rett
+urgas4
+5urge.
+u4ri4met
+u4rini
+uris4k
+urka4v
+uro4r
+u4rulu
+u2sa2
+u5sa.
+usad4
+u4sae
+u4salu
+us5aste
+u3sea
+useg4
+us5elek
+u4sett
+u3setu
+u5sev
+us4f
+us5g
+u4si4d
+usi4g
+u4si4h
+us5ind
+usi4va
+us3kr
+u2so
+us5o2h
+us3ole
+uso4r
+us3p4
+u3s4por
+usui4
+3usuli
+u4suss
+u2s
+u2s
+us3h
+u1t
+ut4kl
+utos2
+utot4
+ut4ru
+ut4so
+utt4r
+utu4s
+ut4h
+uu5al
+4uud
+uu4du.
+uu4kak
+uuk5ri
+uu4mal
+uu4mis
+uu4p
+uu4ran
+uu4ras
+uu4rau
+uu4rav
+uu3sa
+uusa3k
+uus4ke
+u3uss.
+uu4sul
+4uut
+uu4tas
+uu4tis
+uu4th
+u5uuri
+u1v
+u4vau
+u12
+u2
+u3r
+u12
+u4l
+vaa4re4
+va4as
+4vabi
+vae4r
+vag4
+va5he
+4vaia
+4v3ain
+vak4v
+va4la.
+va4lai
+4valdi
+val4ga4
+va4l
+vana5i
+vane2
+4vanku
+van4ta
+van4te
+vap4r
+v4ar
+4varm
+var4p
+2vart
+4varuh
+4varve
+va4sas
+vas4k
+vast4r
+vat4r
+4vatud
+vau4d
+vav4
+4vb
+2v1d
+3ve
+vee3a
+vee3k
+vee5la
+vee3sp
+4vehi
+vei4sa
+ve4ol
+veot4
+ve4rah
+ves4p
+2vf
+2vg4
+2v1h
+3vi
+via2
+vid4
+4videa
+vip4
+vi3pl
+vir4k
+vi4sak
+vis4ko4d
+2v1j
+2v1k
+2v1l
+2v1m
+2v1n
+voo5lu
+2v5p
+2v1r
+2v1s
+2v1t2
+v3tr
+vu4sa
+vu4su4
+2v1v
+3v
+4vig
+4v4li
+4vm
+vr4k5
+3v
+v4re4
+v4ru
+3zo
+zook4
+zoos4
+1b
+be3
+1d
+ea4
+e4lan
+e3lu
+et2
+eu4
+1g
+h4vu
+i4a
+i4b
+ie5k
+3iel
+3igu
+i4ko
+ise4
+i4su4
+1j
+k4k
+l2d
+4lim
+4lit
+l4mad
+3mbl
+net4s
+2p
+3pa
+pi5e
+p2pa
+4p3r
+randa5
+ra4s
+r4da
+r4gaa
+r4gar
+r4go
+4s
+s4a
+4t4
+ude3
+1v4
+5p
+re4
+4rel
+4ta
+a2
+1b
+1d
+52dee
+di4k
+3eld
+ep4
+et4r
+1g4
+1h
+i4a
+i4g
+i4s
+1j
+1k
+2kon
+3kono
+k4v
+1l
+li2s
+lis5a
+1m
+o2
+2p3au
+p4lu
+4raa
+4rau
+r4da
+r4dell
+r4e
+4ri4l
+4ro4
+4r
+4rl
+s4tii
+4to4
+4t4
+1v
+3
+3a
+3e4
+5i
+3lan
+3o
+t4r
+4
+a4
+1b
+bus5
+but4
+1d
+e3a4
+e1o
+1g
+ga4ri
+he5a
+idi4s
+ike3
+i4lo
+i4lu
+i2s
+isa4
+i4s
+i4tar
+3j
+2ke
+3ke.
+5ker
+4k
+li2s
+l4ko
+5mbl
+4nah
+n4deo
+net4
+n4to4
+ok4
+4ra5a
+ra3o4
+4rar
+re4lis
+ret4
+rge4l
+rii4
+ri4kl
+ri4sel
+4riste
+r4kar
+4ro
+5rrit
+r4ta
+r2va
+4r
+s4ko
+s4nai
+s4p
+s4san
+s4so
+t4ri
+u4d
+1v
+vee4
+4kin
+o4
+4rase
+5ris.
+aa4
+1b
+dame5
+1g
+2h
+he5i4
+1hen
+3hik.
+3hit
+1j
+kan4
+k4kas
+k3l
+l2d
+ld5a2
+2le
+3lek
+5lel
+le4mas
+1les
+les4
+l4gav
+l4gee
+4lih
+lii4
+3liko
+4li
+l5kl
+l5la
+l4mei
+lo4r
+lp4
+lt4
+ma4rak
+ma4ru
+mi4ko
+5ne
+ni4s
+ot4
+p3l
+p5p4
+p3r
+psu4
+rd4
+rik4
+s4o
+s4pr
+s4tal
+s4tas
+ta4r
+tee4l
+5tlev
+4t3r
+t4ru
+1v
+4
+2l3a2
+4le
+4lo
+4pe
+1a
+4b
+1e
+5ee
+5er
+4f
+1i
+4j
+4k
+4l
+4m
+4n
+3o
+4p
+4t
+5
+5
+2
+3a
+4ak
+4au
+1e
+34i
+is4k
+4k
+5o
+4t
+3u4
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_fr.dic b/lib/kotext/kohyphen/hyphdicts/hyph_fr.dic
new file mode 100644
index 00000000..cec0294a
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_fr.dic
@@ -0,0 +1,1067 @@
+ISO8859-1
+.a4
+.ab3ra
+.ae3s4ch
+.amino1a2c
+.ana3s4tr
+.anti1a2
+.anti1e2
+.anti1s2
+.anti12
+.anti2enne
+.apo2s3ta
+.ar3dent.
+.ar3gent.
+.ar3pent.
+.as2ta
+.bai2se3main
+.bi1a2c
+.bi1a2t
+.bi1au
+.bi1u2
+.bi2s1a2
+.bio1a2
+.ch4
+.ch2vre3feuille
+.ci2s1alp
+.co1o2
+.co2o3lie
+.com3ment.
+.con4
+.cons4
+.contre1s2c
+.contre3matre
+.cul4
+.dacryo1a2
+.di1a2cid
+.di1a2c
+.di1a2mi
+.di1a2tom
+.di1ald
+.di1e2n
+.di2s3h
+.do3lent.
+.dy2s1a2
+.dy2s1i2
+.dy2s1o2
+.dy2s1u2
+.dy2s3
+.d1a2
+.d1io
+.d1o2
+.d2s
+.d2s1i2
+.d2s1oe0
+.d2s1u2n
+.d2s10
+.d2s12
+.d3s2a3cr
+.d3s2a3tell
+.d3s2astr
+.d3s2c
+.d3s2ensib
+.d3s2ert
+.d3s2exu
+.d3s2i3d
+.d3s2i3gn
+.d3s2i3li
+.d3s2i3nen
+.d3s2i3r
+.d3s2invo
+.d3s2ist
+.d3s2o3d
+.d3s2o3l
+.d3s2o3pil
+.d3s2orm
+.d3s2orp
+.d3s2oufr
+.d3s2p
+.d3s2t
+.d3s23gr
+.ds2a3m
+.e4
+.en1a2
+.en1o2
+.eu2r1a2
+.gem2ment.
+.i4
+.in1a2
+.in1e2
+.in1i2
+.in1o2
+.in1s2tab
+.in1u2
+.in12
+.in2a3nit
+.in2augur
+.in2effab
+.in2ept
+.in2er
+.in2exora
+.in2i3miti
+.in2i3q
+.in2i3t
+.in2o3cul
+.in2ond
+.in2u3l
+.in2uit
+.in23lucta
+.in23narra
+.inte4r3
+.intera2
+.intere2
+.interi2
+.intero2
+.inters2
+.interu2
+.inter2
+.kh4
+.la3tent.
+.ma2c3k
+.ma2l1a2dres
+.ma2l1a2dro
+.ma2l1a2v
+.ma2l1ais
+.ma2l1ap
+.ma2l1en
+.ma2l1int
+.ma2l1o2d
+.ma2l1oc
+.ma2r1x
+.macro1s2c
+.milli1am
+.mono1a2
+.mono1e2
+.mono1i2
+.mono1o2
+.mono1s2
+.mono1u2
+.mono12
+.mono12d
+.m2g1oh
+.m2s1es
+.m2s1i
+.m2s1u2s
+.m2sa
+.m3san
+.mta1s2ta
+.no2n1obs
+.o4
+.on3guent.
+.oua1ou
+.ovi1s2c
+.pa2n1a2f
+.pa2n1a2m
+.pa2n1a2ra
+.pa2n1is
+.pa2n1o2ph
+.pa2n1opt
+.pa2r1a2che
+.pa2r1a2ch
+.pa2r3h
+.pa3rent.
+.pa3tent.
+.para1s2
+.pe4r
+.pen2ta
+.per1a2
+.per1e2
+.per1i2
+.per1o2
+.per1u2
+.per12
+.ph4
+.phalan3s2t
+.pluri1a
+.pon2tet
+.pos2t1in
+.pos2t1o2
+.pos2t3h
+.pos2t3r
+.post1s2
+.pro1s2c
+.pro12
+.prou3d2h
+.pr1a2
+.pr1e2
+.pr1i2
+.pr1o2
+.pr1s2
+.pr1u2
+.pr12
+.pr2a3la
+.pr2au
+.psycho1a2n
+.pud1d2l
+.pri1os
+.pri1s2
+.pri1u2
+.pri2s3s
+.pri2s3ta
+.re1s2
+.re2s3cap
+.re2s3cisi
+.re2s3ciso
+.re2s3cou
+.re2s3cri
+.re2s3pect
+.re2s3pir
+.re2s3plend
+.re2s3pons
+.re2s3quil
+.re2s3s
+.re2s3t
+.re3s4tab
+.re3s4tag
+.re3s4tand
+.re3s4tat
+.re3s4tim
+.re3s4tip
+.re3s4toc
+.re3s4top
+.re3s4tr
+.re3s4tu
+.re3s4ty
+.re3s4tn
+.re3s4tr
+.re4s5trein
+.re4s5trict
+.re4s5trin
+.res3sent.
+.r1a2
+.r1e2
+.r1i2
+.r1o2
+.r12
+.r2a3le
+.r2a3lis
+.r2a3lit
+.r2aux
+.r2el
+.r2er
+.r2i3fi
+.r2uss
+.r2r
+.rtro1a2
+.ru2
+.sar3ment.
+.sch4
+.ser3ment.
+.seu2le
+.sh4
+.sou3vent.
+.sta2g3n
+.stil3l
+.su2b1a2
+.su2b1in
+.su2b1ur
+.su2b12
+.su2b3limin
+.su2b3lin
+.su2b3lu
+.su2r1a2
+.su2r1e2
+.su2r1i2m
+.su2r1inf
+.su2r1int
+.su2r1of
+.su2r1ox
+.su2r12
+.su2r3h
+.su3b2alt
+.su3b23r
+.su3r2a3t
+.su3r2eau
+.su3r2ell
+.su3r2et
+.ta3lent.
+.th4
+.tri1a2c
+.tri1a2n
+.tri1a2t
+.tri1o2n
+.u4
+.y4
+.4
+.4
+.4
+.mi3nent.
+.4
+.4
+.4
+.4
+1a2nesthsi
+1alcool
+1b2l
+1b2r
+1ba
+1be
+1bi
+1bo
+1bu
+1by
+1b
+1b
+1b
+1b
+1b
+1b
+1b
+1c2h
+1c2k
+1c2l
+1c2r
+1ca
+1ce
+1ci
+1co
+1coe0
+1cu
+1cy
+1c0
+1c
+1c
+1c
+1c
+1c
+1c
+1c
+1d2r
+1da
+1de
+1di
+1do
+1du
+1dy
+1d
+1d
+1d
+1d
+1d
+1d
+1d
+1f2l
+1f2r
+1fa
+1fe
+1fi
+1fo
+1fu
+1fy
+1f
+1f
+1f
+1f
+1f
+1f
+1f
+1g2ha
+1g2he
+1g2hi
+1g2ho
+1g2hy
+1g2l
+1g2n
+1g2r
+1ga
+1ge
+1gi
+1go
+1gu
+1gy
+1g
+1g
+1g
+1g
+1g
+1g
+1g
+1ha
+1he
+1hi
+1ho
+1hu
+1hy
+1h
+1h
+1h
+1h
+1h
+1h
+1h
+1informat
+1j
+1k2h
+1k2r
+1ka
+1ke
+1ki
+1ko
+1ku
+1ky
+1k
+1k
+1k
+1k
+1k
+1k
+1k
+1la
+1le
+1li
+1lo
+1lu
+1ly
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1m2ns
+1m2nmo
+1m2nsi
+1ma
+1me
+1mi
+1mo
+1moe0
+1mu
+1my
+1m0
+1m
+1m
+1m
+1m
+1m
+1m
+1m
+1na
+1ne
+1ni
+1no
+1noe0
+1nu
+1ny
+1n0
+1n
+1n
+1n
+1n
+1n
+1n
+1n
+1octet
+1p2h
+1p2l
+1p2neu
+1p2n
+1p2r
+1p2sych
+1p2tr
+1p2tr
+1pa
+1pe
+1pi
+1po
+1pu
+1py
+1p
+1p
+1p
+1p
+1p
+1p
+1p
+1q
+1r2h
+1ra
+1re
+1ri
+1ro
+1ru
+1ry
+1r
+1r
+1r
+1r
+1r
+1r
+1r
+1s2caph
+1s2ch
+1s2clr
+1s2cop
+1s2h
+1s2lav
+1s2lov
+1s2patia
+1s2perm
+1s2phr
+1s2phr
+1s2piel
+1s2piros
+1s2por
+1s2tandard
+1s2tein
+1s2tigm
+1s2tock
+1s2tomos
+1s2troph
+1s2tructu
+1s2tyle
+1sa
+1se
+1si
+1so
+1soe0
+1su
+1sy
+1s0
+1s
+1s
+1s
+1s
+1s
+1s
+1s
+1t2h
+1t2r
+1ta
+1te
+1ti
+1to
+1tu
+1ty
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1v2r
+1va
+1ve
+1vi
+1vo
+1vu
+1vy
+1v
+1v
+1v
+1v
+1v
+1v
+1v
+1w2r
+1wa
+1we
+1wi
+1wo
+1wu
+1za
+1ze
+1zi
+1zo
+1zu
+1zy
+1z
+1z
+1
+12drie
+12drique
+12lectr
+12lment
+12nerg
+2bent.
+2blent.
+2brent.
+2cent.
+2chb
+2chent.
+2chg
+2chm
+2chn
+2chp
+2chs
+2cht
+2chw
+2ck3h
+2ckb
+2ckent.
+2ckf
+2ckg
+2ckp
+2cks
+2ckt
+2clent.
+2crent.
+2dent.
+2dlent.
+2drent.
+2fent.
+2flent.
+2frent.
+2gent.
+2glent.
+2gnent.
+2grent.
+2guent.
+2jent.
+2jk
+2kent.
+2lent.
+2nent.
+2pent.
+2phent.
+2phn
+2phs
+2pht
+2plent.
+2prent.
+2quent.
+2r3heur
+2r3hydr
+2rent.
+2s3hom
+2schs
+2sent.
+2shent.
+2shm
+2shr
+2shs
+2t3heur
+2tent.
+2thl
+2thm
+2thn
+2ths
+2trent.
+2vent.
+2vrent.
+2went.
+2xent.
+2zent.
+3d2hal
+3d2houd
+3ph2tal
+3ph2tis
+4be.
+4bes.
+4ble.
+4bles.
+4bre.
+4bres.
+4ce.
+4ces.
+4ch.
+4che.
+4ches.
+4chle.
+4chles.
+4chre.
+4chres.
+4ck.
+4cke.
+4ckes.
+4cle.
+4cles.
+4cre.
+4cres.
+4de.
+4des.
+4dre.
+4dres.
+4fe.
+4fes.
+4fle.
+4fles.
+4fre.
+4fres.
+4ge.
+4ges.
+4gle.
+4gles.
+4gne.
+4gnes.
+4gre.
+4gres.
+4gue.
+4gues.
+4he.
+4hes.
+4je.
+4jes.
+4ke.
+4kes.
+4kh.
+4le.
+4les.
+4me.
+4mes.
+4ne.
+4nes.
+4pe.
+4pes.
+4ph.
+4phe.
+4phes.
+4phle.
+4phles.
+4phre.
+4phres.
+4ple.
+4ples.
+4pre.
+4pres.
+4que.
+4ques.
+4re.
+4res.
+4rhe.
+4rhes.
+4sch.
+4sche.
+4sches.
+4se.
+4ses.
+4sh.
+4she.
+4shes.
+4te.
+4tes.
+4th.
+4the.
+4thes.
+4thre.
+4thres.
+4tre.
+4tres.
+4ve.
+4ves.
+4vre.
+4vres.
+4we.
+4wes.
+4ze.
+4zes.
+a12dre
+a2l1algi
+a2s3tro
+ab2h
+ab3sent.
+absti3nent.
+ab2ment.
+ac3cent.
+acquies4cent.
+ad2h
+ai2ment.
+amalga2ment.
+ani2ment.
+antifer3ment.
+apo2s3tr
+appa3rent.
+ar2ment.
+archi12pis
+armil5l
+as2ment.
+au2ment.
+avil4l
+bou2ment.
+boutil3l
+bru2ment.
+ca3ou3t2
+capil3l
+car2ment.
+cci3dent.
+ch2l
+ch2r
+chevil4l
+chien3dent.
+chlo2r3a2c
+chlo2r32t
+chro2ment.
+cil3l
+cla2ment.
+co1a2d
+co1acc
+co1acq
+co1ap
+co1ar
+co1assoc
+co1assur
+co1au
+co1ax
+co1ef
+co1en
+co1ex
+co12
+co2nurb
+comp3tent.
+confi3dent.
+conni3vent.
+conti3nent.
+contin3gent.
+corpu3lent.
+cur3rent.
+cyril3l
+d1d2h
+d1s2
+da2ment.
+di2s3cop
+dia2g3n
+diaphrag2ment.
+dili3gent.
+dissi3dent.
+distil3l
+dca3dent.
+dtri3ment.
+e2n1i2vr
+e2s3ch
+e2s3cop
+entre3gent.
+er2ment.
+es3cent.
+esti2ment.
+eu1s2tat
+extra1
+extra2c
+extra2i
+f1s2
+fa2ment.
+fichu3ment.
+fir2ment.
+flam2ment.
+fritil3l
+fu2ment.
+fcu3lent.
+g1s2
+gil3l
+gram2ment.
+grandilo3quent.
+hil3l
+hu2ment.
+hype4r1
+hypera2
+hypere2
+hyperi2
+hypero2
+hypers2
+hyperu2
+hyper2
+hypo1a2
+hypo1e2
+hypo1i2
+hypo1o2
+hypo1s2
+hypo1u2
+hypo12
+hmi1
+hmo1p2t
+i1algi
+i1arthr
+i1oxy
+i1s2tat
+i12dre
+i2s3chia
+i2s3chio
+i2s3ch
+ibril3l
+il2l
+imma3nent.
+immi3nent.
+immis4cent.
+impo3tent.
+impu3dent.
+inci3dent.
+indi3gent.
+indo3lent.
+indul3gent.
+inno3cent.
+inso3lent.
+instil3l
+intelli3gent.
+inti2ment.
+io1a2ct
+is3cent.
+iva3lent.
+ja3cent.
+l1s2t
+l2ment.
+l3lion
+la2w3re
+lil3l
+llu2ment.
+m1s2
+mi2ment.
+mil3l
+mil4let
+mit3tent.
+mon2t3ral
+monova3lent.
+moye2n12g
+munifi3cent.
+mcon3tent.
+n1x
+n3s2at.
+n3s2ats.
+nutri3ment.
+o1d2l
+o1ioni
+o1s2tas
+o1s2tat
+o1s2tim
+o1s2tom
+o1s2trad
+o1s2tratu
+o1s2triction
+o1s2tro
+o12dre
+o2b3long
+om2ment.
+ombud2s3
+omni1s2
+omnipo3tent.
+opu3lent.
+or2ment.
+oxy1a2
+palo12
+papil3la
+papil3le
+papil3li
+papil3lom
+per3h
+perma3nent.
+perti3nent.
+ph2l
+ph2r
+photo1s2
+piril3l
+plu2ment.
+po1astre
+poly1a2
+poly1e2
+poly1i2
+poly1o2
+poly1s2
+poly1u2
+poly12
+poly12
+polyva3lent.
+privatdo3cent.
+privatdo3zent.
+pro2s3tat
+promi3nent.
+pru3dent.
+pr3sent.
+prmi3nent.
+pupil3l
+pusil3l
+p1r22q
+p2nul
+qua2ment.
+ra2ment.
+radio1a2
+rai3ment.
+rcil4l
+re3lent.
+re3pent.
+reli2ment.
+ri2ment.
+rin3gent.
+rmil4l
+ru3lent.
+ryth2ment.
+r3gent.
+rma3nent.
+rsur3gent.
+rti3cent.
+semil4l
+ser3gent.
+ser3pent.
+sesqui1a2
+slalo2ment.
+sporu4lent.
+stro1s2
+su2ment.
+su3r2ah
+sub1s2
+subli2ment.
+succu3lent.
+supe4r1
+supero2
+supers2
+surmi3nent.
+t1t2l
+ta2ment.
+tachy1a2
+tan3gent.
+tchin3t2
+tempra3ment.
+ter3gent.
+testa3ment.
+th2r
+thermo1s2
+thril3l
+to2ment.
+tor3rent.
+tran2s1a2
+tran2s1o2
+tran2s1u2
+tran2s3h
+tran2s3p
+tran3s2act
+tran3s2ats
+transpa3rent.
+tri3dent.
+trucu3lent.
+tu2ment.
+tung2s3
+turbu3lent.
+tl1e2
+tl1i2
+tl1o2b
+tl1o2p
+tl1s2
+u2s3tr
+ucil4l
+uevil4l
+uni1a2x
+uni1o2v
+uvil4l
+vacil4l
+vanil3lin
+vanil3lis
+veni2ment.
+ventripo3tent.
+vidi2ment.
+vil3l
+vol2t1amp
+vlo1s2ki
+wa2g3n
+xil3l
+y1algi
+y1asth
+y1s2tom
+2ment.
+2ment.
+3cent.
+3dent.
+3quent.
+3rent.
+ci2ment.
+cu2ment.
+d2hi
+li2ment.
+lo3quent.
+mil4l
+ni3tent.
+pi2s3cop
+pi3s4cope
+quipo3tent.
+quiva4lent.
+2ment.
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_hu.dic b/lib/kotext/kohyphen/hyphdicts/hyph_hu.dic
new file mode 100644
index 00000000..66564932
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_hu.dic
@@ -0,0 +1,83320 @@
+ISO8859-2
+.a2
+.ada2t11t1a2
+.a1da
+.ada1t
+.ada2t1e2
+.ads1s
+.a1d
+.ad2s3z
+.ad1y
+.ad1yi
+.ag1os
+.a1go
+.a2gyag1g
+.ag2y
+.a1gya
+.agy1a2lz
+.agya1l
+.agy12rat
+.a1gy
+.agy1ra
+.agy1rb
+.agy1rt
+.a1gy1e2
+.a1gyo2
+.agyon1
+.a1gy12
+.2a1gy12
+.akc1c
+.a1k
+.ak2c2s
+.akciks2z1
+.ak1ci
+.akci1
+.akci2ks
+.akci1k
+.akci2s1orr
+.akci1so
+.ak2h
+.a1ko2
+.ak2t12r.
+.ak1t
+.ak2t1orr
+.ak1to
+.ak2t12
+.aku1p2
+.a1ku
+.ala2g1
+.a1la
+.ala1k1a2
+.ala2k12
+.ala2k12
+.ala2pa
+.ala2p1
+.al1eg
+.a1le
+.al1is
+.a1li
+.al2jrn
+.al1j
+.al1je2
+.al2j1el
+.alje1l12
+.alo2m1
+.a1lo
+.al1os
+.al2t1a2k
+.al1ta
+.al2t1erj
+.al1te
+.al2t2n
+.al1t
+.al2trn
+.al2trt
+.al2ti2n
+.al1ti
+.am1ak
+.a1ma
+.ango2l12
+.an1go
+.anya2g2ra
+.an2y
+.a1nya
+.a2nyagr
+.anya1g
+.2apa1p2
+.a1pa
+.ap2ly12z
+.a1p
+.ap2l2y
+.ap1ly
+.ar2a2ny1e2
+.a1ra
+.aran2y
+.ara2s1ze
+.aras2z
+.2ar12c
+.a1r
+.ar2cal
+.ar1ca
+.arc3c
+.ar2c1e2
+.ar2cl
+.ar1c
+.ar2c3h
+.arc2h
+.ar2c3hoz
+.ar1c1ho
+.ar2cin
+.ar1ci
+.ar2ci1o
+.ar2col
+.ar1co
+.ar2c
+.ar2c3s
+.at2h
+.a1z1a2
+.az1m
+.a1z
+.a1ze2
+.a1z12
+.2
+.cs12k
+.c2s
+.1c1s
+.g1rn
+.1g
+.g1rt
+.1g12
+.gy1a1la
+.g2y
+.1gya
+.gy1as2z
+.gy1rt
+.1gy
+.gy12z
+.1l1
+.1l1i
+.2l1i2gaz1
+.li2g
+.2l1i1ga
+.l2l1alj
+.l1la
+.l2l1alt
+.l2lin
+.l1li
+.l1o2k
+.1lo
+.r1aj
+.1ra
+.r1ak1t
+.r1a2l
+.r1a2p
+.ra2s2z
+.r1a1s1z
+.r12c
+.1r
+.r1l
+.r12z
+.r1d2
+.1re2
+.r1em
+.1r2
+.r1ir
+.1ri
+.r2nye2l
+.rn2y
+.r1nye
+.r1ol
+.1ro
+.r1om
+.r1os
+.rrs1s
+.r1r
+.r1s2
+.r1t2r
+.sz1l
+.s2z
+.1s1z
+.sz1rb
+.sz12r
+.sz12ri
+.sz12ro
+.sz1o2kol
+.1s1zo
+.szo1ko
+.t1a2d
+.1ta
+.t1a2k
+.t1alt
+.t1a2n
+.t1ar
+.t1a2s
+.t1av
+.1t12
+.1t1e2
+.1t12
+.1t1i2
+.t1ol
+.1to
+.t1o2r
+.t1o2s
+.1t2
+.t1h
+.t1v
+.1t12
+.1t1u
+.1t12
+.1t1
+.b2
+.ba2b1a2r
+.1ba
+.b2abar
+.ba1ba
+.ba2bl
+.ba1b
+.ba2b1e2
+.ba2bol
+.ba1bo
+.ba2j12rat
+.b2ajr
+.ba1j
+.baj1ra
+.ba2j1e
+.ba2k1aszt
+.2bakas
+.ba1ka
+.bakas2z
+.ba2kl
+.ba1k
+.ba2k12ro
+.ba1k2
+.ba2k12
+.ba2ku2r
+.ba1ku
+.ba2l1e2g
+.ba1le
+.ba1ts
+.b2l
+.1b
+.b1r1a
+.b1th
+.be2a2t.
+.1be
+.be1a
+.be1d2
+.bee2s
+.be1e
+.be1i2
+.be1kr
+.be1str
+.be1szk
+.bes2z
+.bet2t1elh
+.be1t
+.bet1te
+.be1tr
+.br2c3s
+.1b
+.brc2s
+.b2r1o
+.bi2o1
+.1bi
+.bi1ta2
+.bi2tag
+.bi2t12
+.bi2tel
+.bi1te
+.bi2t1er
+.bi2t1orr
+.bi1to
+.bi2tur
+.bi1tu
+.bo2g12
+.1bo
+.bol2ta
+.b2o2ly12
+.bol2y
+.bo2nav
+.bo1na1
+.bo2raj
+.bo1ra
+.bo2ra2n
+.bo2ras
+.bo2rat
+.bo2rc
+.bo1r
+.bo2rl
+.bo2r1odv
+.bo1ro
+.bo2r1os2z
+.bor2st
+.bor1s
+.bort2
+.bo2t
+.bra2i
+.b1ra
+.bu2s1z1e
+.1bu
+.bus2z
+.c2
+.cen2t1
+.1ce
+.cen2t12
+.ce2t1e2l
+.ce1te
+.ce2t1
+.c2l1e2
+.1c
+.ci2n12
+.1ci
+.c2s2
+.csa2k1
+.1c1sa
+.csa2p12g
+.csa1p
+.csa2t12
+.cse2l12r
+.1c1se
+.cse1l
+.csr2s
+.1c1s
+.cs1r
+.cs2r1s2z
+.d2
+.dac1c
+.1da
+.da2c3s
+.da2i
+.dal1an
+.da1la
+.da2ls
+.da1l
+.da2l1e2
+.da2l1k
+.da1l
+.d2a2ln
+.da2l12
+.da2l12
+.2den2g
+.1de
+.d2la
+.1d
+.d1re2
+.d2res
+.d2sa2
+.di2a1fo
+.1di
+.di1a
+.di2a1ka
+.di2al
+.di2aszk
+.dias2z
+.di2c1s
+.dic2s
+.di21m
+.di1
+.d22mor
+.1d
+.d1mo
+.d2ra
+.1d
+.e2
+.eb1eg
+.e1be
+.eb1ir
+.e1bi
+.e1b1u2
+.e1g2
+.egres1s
+.eg1re
+.e1gy1a2
+.eg2y
+.e1gy2
+.egy1r
+.egy1ev
+.e1gye
+.egy1in
+.e1gyi
+.e1gy12
+.egy12l
+.e1gy
+.el1a2k
+.e1la
+.el1and
+.el1a2n2y
+.el1ap
+.ela2s
+.el1ass
+.el1aszn
+.elas2z
+.el1a1s1zo
+.el1aszv
+.e1l12
+.el1e2c
+.e1le
+.el1eger
+.ele1ge
+.ele2gy2
+.eleg2y
+.el1e2h
+.el1ejt
+.el1e2l
+.ele2ma
+.ele2m
+.ele2meg
+.ele1me
+.ele2mel
+.e1l1eme1le
+.el1e2mels
+.el1e2melt
+.ele2m1r1t
+.ele1m
+.el1e2ms
+.el1e2n
+.el1e2p
+.el1e2r
+.el1e2se
+.el1e2ss
+.ele1s
+.el1esh
+.el1e2si
+.el1esn
+.el1e2s
+.el1ess
+.el1es1te
+.el1estl
+.eles1t
+.el1es1t
+.el1e2s
+.el1esv
+.el1e2s2z
+.el1e2t
+.el1e2vet
+.ele1ve
+.el1e2vez
+.el1e1vi
+.el2d
+.e1l
+.el11de
+.el12gek
+.el1ge
+.el1h
+.el1kez
+.el1ke
+.el12le
+.el2n
+.el11ne
+.el12p
+.el12r
+.el12te2t.
+.el1te
+.el12v
+.el1id
+.e1li
+.el1ig
+.el1i2h
+.el1ik
+.el1i2mit
+.eli1mi
+.el1in
+.el1ir
+.el1i2s
+.eli2t1o
+.el1itt2a.
+.elit1ta
+.el1ittk
+.elit1t
+.el1izz
+.e1l1
+.elle1ge2
+.el1le
+.1elle2n12
+.e1lo2
+.el1okk
+.el1o1ko
+.el1or
+.e1l12
+.e1l2
+.el1k
+.el11le
+.el11l
+.el1lh
+.el11li
+.el1l2j.
+.el1l1je
+.el1l1j
+.el1l1j
+.el1l1ne
+.el1ln2.
+.ell1n
+.el1lnm
+.el1l1ni
+.el11l
+.el1l2t.
+.el1l1te
+.el1l1t
+.el1ltn
+.el1l1t
+.el1ln
+.el1l
+.el1lv
+.el1v
+.el1e2
+.e1l
+.el1es2t12j
+.ele2s
+.eles1t
+.el12
+.el1i2
+.el2ny1elv
+.eln2y
+.el1nye
+.el1s2
+.el1t2
+.e1l1u
+.e1l2
+.el1lh
+.el11li
+.el1lj
+.el1ln
+.el1l1te
+.el2v1el
+.el1ve
+.el2v12g.
+.el1v
+.el2v1szn
+.elvs2z
+.endo1s
+.en1do
+.endos2z2
+.es1er
+.e1se
+.ese2tel
+.ese1te
+.es2t1a
+.es2t1
+.es2t12k2e.
+.es1t
+.est1ke
+.es2t12kek
+.eszk2zel
+.es2z
+.esz1k
+.eszk1ze
+.evs1s
+.e1v
+.ex1el
+.e1xe
+.e1z1
+.ez1e2l
+.e1ze
+.2
+.des3s
+.1de
+.1g1a2
+.g1e2re1i
+.1ge
+.ge1re
+.ge2s
+.g1es2z
+.g12r.
+.1g
+.g12r
+.g1rn
+.gs3s
+.g2s2z
+.g1szb
+.g11s1ze
+.g11s1z
+.g1szn
+.g1szr
+.1g12
+.1g1u2
+.h1v
+.1h
+.1j1a2
+.1j12
+.j1el
+.1je
+.1j1u
+.1k1a2
+.1k1
+.kes1s
+.1ke
+.k1ir
+.1ki
+.1k1o
+.1l1a2
+.l2c1i
+.li2k
+.1li
+.l1i1ke
+.l2v12
+.p1es
+.1pe
+.p2pa
+.p2p1el
+.p1pe
+.p2p
+.p2po
+.r1a2n
+.1ra
+.r2c1e2l
+.r1ce
+.r2c12j
+.r1c
+.r2ck
+.r2c3serr
+.rc2s
+.r1c1se
+.rcse1r
+.r2c3s
+.r1e2l
+.1re
+.r1e2s
+.r2s2z
+.1r
+.r11s1z
+.r12t
+.1r2
+.r1l
+.r2vad
+.r1va
+.r2val
+.r2v12g.
+.r1v
+.sz1a2l
+.s2z
+.1s1za
+.21s1z1
+.1s1ze2
+.sz1el
+.sz1em
+.sz1es
+.sz12k
+.1s1z
+.szigaz1
+.1s1zi
+.2sz1i2ga
+.1s1z12
+.sz2t1rv
+.sz1t
+.1s1z2
+.sz11l
+.1t1o
+.v1ads
+.2vad
+.1va
+.va1d
+.v12g
+.1v
+.v1es2s2z
+.1ve
+.v12g
+.1v
+.v12k
+.f2
+.fa2gy12r2.
+.1fa
+.f2a1gy
+.fag2y
+.fagy1r
+.fa2gyrk
+.fa2leg
+.fa1le
+.fa2n1v
+.fa1n
+.fa2r1ss
+.fa1r
+.fa2r1szb
+.fars2z
+.fa2r12s1z
+.fa2r1szt
+.fa2r1ont
+.fa1ro
+.fas2
+.fa1st
+.fa2szl1l
+.fas2z
+.fa1s1z
+.fat2
+.fa1tr
+.fe2le1me
+.1fe
+.fe1le
+.fe2l1es2s2z
+.fe2lev
+.f2k1e2l
+.1f
+.f1ke
+.flme3g
+.fl1me
+.f2m1a2
+.f2m12
+.fil2m1r
+.1fi
+.fil1m
+.fin2ge
+.fog22s3z
+.1fo
+.fo1g
+.fog1s2z
+.fol2t1a2
+.f2l
+.1f
+.f2l2l.
+.f1l
+.fl2l1e2
+.g2
+.ga2za2n
+.1ga
+.ga1za
+.ga2z1em
+.3g2a1ze
+.2g2t1al
+.1g
+.g1ta
+.g2te
+.g2z12
+.gz2s2
+.g2z1su
+.gz1z
+.gene2a
+.1ge
+.ge1ne
+.ge2od
+.ge1o
+.ge2os
+.gesz2t1
+.ges2z
+.g2d1
+.1g
+.g2na2
+.g2n2
+.g2n3n
+.g2pe2lem
+.3g2pel
+.g1pe
+.gpe1le
+.giga1s
+.1gi
+.gi1ga
+.g2ce
+.1g
+.g2la
+.g2l
+.g2le2l
+.g1le
+.g2l1e2s
+.gli2g
+.g1li
+.g2l1i1ga
+.g2li2s
+.g2z12
+.1g
+.g2zen
+.g1ze
+.g2z1
+.g2z2s
+.gu2i
+.1gu
+.h2
+.ha2b1e2
+.1ha
+.ha2b1ol
+.3ha1bo
+.ha2bor
+.ha2b1
+.ha2b1u
+.ha2dal
+.ha1da
+.ha2d1e2
+.ha2d2z
+.ha2j1e2
+.ha2jom
+.ha1jo
+.ha2lc
+.3ha1l
+.hal2l12
+.ha2lrv
+.ha2leg
+.ha1le
+.ha2l1e2l
+.h2a2lep
+.ha2let
+.h2a2l1e2v
+.ha2li2s
+.ha1li
+.han2g1a2d1na
+.3hang
+.han1ga
+.hanga1d
+.han2g1e2
+.harminc12t1e
+.3harm
+.har1mi
+.harmin2c1
+.harminc2t
+.h2a2sor
+.ha1so
+.has3s2z
+.h2a2tag
+.ha1ta
+.ha2t1at
+.ha2t1e2
+.ha2told
+.ha1to
+.h2m1a2
+.1h
+.h2ny1in
+.hn2y
+.h1nyi
+.hro2m1ezren
+.h1ro
+.hrome2z
+.hro1me
+.hromez1re
+.hro2m1ezre2s.
+.hro2m1ezret
+.h2t1alj
+.h1ta
+.h2tus
+.h1tu
+.h2zol
+.h1zo
+.h2z
+.h2t1o
+.1h
+.hi2t1a
+.1hi
+.hi2tis
+.hi1ti
+.hods1
+.1ho
+.ho1d
+.hol2t1e
+.ho2ne2
+.h2s
+.1h
+.i2
+.ike2r1i
+.i1ke
+.ike1r2
+.ike2r11l
+.ikon1s
+.i1ko
+.ima1s
+.i1ma
+.in2gin
+.in1gi
+.inte2r1a
+.in1te
+.io2n1a2
+.i1o
+.io2n1
+.io2ne
+.ion3n
+.ipa2re
+.i1pa
+.ir2ny2ra
+.1irn2y
+.i1r
+.ir1ny
+.izo2m1rt
+.1i2zo1m
+.i1zo
+.2
+.j2t
+.1j
+.j11to
+.1n1e
+.r2s1g
+.1r
+.r1s
+.r2s3z
+.1v1a2
+.v12r
+.1v
+.v1ell
+.1ve
+.1z1a
+.j2
+.ja1k2
+.1ja
+.ja2kr
+.ja2ko2v
+.ja1ko
+.jrsks2z1
+.1j
+.j1r
+.jrs1k
+.jrm1k2
+.jr1m
+.j2s1z
+.js2z
+.j2s1z
+.je2gy1a2
+.1je
+.jeg2y
+.je2gy12
+.je2l1a
+.je2leg
+.je1le
+.je2lev
+.job2b1ol
+.1jo
+.job1bo
+.j2dal
+.1j
+.j1da
+.j2s1e2
+.j2t1
+.k2
+.ka2nar
+.1ka
+.ka1na
+.ka2n1e
+.kapolc1
+.ka1po
+.ka2ra1la
+.ka1ra
+.ka2ra2s
+.ka2r12csot
+.k2arc
+.ka1r
+.karc2s
+.kar1c1so
+.ka2r12s
+.kar2c3se
+.karc2s
+.ka1re2
+.ka2rem
+.ka2rk
+.ka1r
+.ka2ring
+.ka1ri
+.ka2r
+.ka2r2ra
+.ka1r
+.ka2r1
+.2k2r1a2d
+.1k
+.k1ra
+.k2r1omlkr
+.k1ro
+.krom1l
+.ks2
+.ksa3l
+.k1sa
+.ke2c1s
+.1ke
+.kec2s
+.ke2l12
+.ke2l1e2g
+.ke1le
+.ke2l1e2ve
+.ke1l1
+.ker2t1a2
+.k2nt
+.1k
+.k1n
+.k2p1e2r
+.k1pe
+.k2p1s
+.k1p
+.k1ta2
+.k2tab
+.k2tad
+.k2t1ag
+.k2ta1ka
+.k2tal
+.k2tan
+.k2tap
+.k2tas
+.k2tat2
+.k2ta1u
+.k2t12
+.k2t1e1le
+.k1te
+.k1to2
+.k2tok
+.k2tos
+.k2ze2m
+.k1ze
+.k2z2s2
+.kz1z
+.ki12
+.1ki
+.ki1g2
+.ki1k1r
+.ki12
+.ki2sg
+.ki1s
+.ki12
+.kl2re
+.k1l
+.ko2rc
+.1ko
+.ko1r
+.ko2r
+.ko2sis
+.ko1si
+.k2d1a2
+.1k
+.k2r1e
+.k2r12s
+.k1r
+.k2d1
+.1k
+.k2zellt2s.
+.k1ze
+.kzel1l
+.kzell1t
+.k2z12le1te
+.k1z
+.kz1le
+.k2z12let1te
+.kzr2t12ke2k.
+.kzr1t
+.kzrt1ke
+.kzr2t12k
+.kzr2t1kk
+.kzr2t1kn
+.k2zis
+.k1zi
+.k2z1
+.kz1z
+.kr2
+.kuk2k1o2l.
+.1ku
+.kuk1ko
+.kuk2kolj
+.kuk2k1oln
+.kuk2k1olt
+.ku1n1a
+.l2
+.la2k1a2d
+.1la
+.la1ka
+.l2a2kal
+.l2a2k1an
+.la2kp
+.la1k
+.la2kor
+.la1ko
+.la2k
+.lan2t1e
+.lan2t12
+.la2p1a2
+.la2p1c
+.la1p
+.la2p12r
+.la2p1e2
+.la2p1or
+.la1po
+.la2p1os2z
+.la2p
+.l2b1e2
+.1l
+.l2bil
+.l1bi
+.l2bor
+.l1bo
+.ln2c3s2
+.l2nya2n
+.ln2y
+.l1nya
+.l2ny1e2
+.l2p1e
+.l2p1il
+.l1pi2
+.l2z12
+.l2z3s
+.le3d
+.1le
+.le2g1
+.le3g2a1li
+.le1ga
+.le3g2els
+.le1ge
+.lege1l
+.lege2lbb
+.lege1l
+.lege2l1re
+.le3g2esle2g1
+.1leges1le
+.le3g2esle3g2esle2g1
+.legesle1ge
+.legesleges1le
+.lege2t
+.le4g1ne
+.le3gn
+.le1g
+.leg3g2
+.le3g2y
+.lei2d
+.le1i
+.le2ro
+.le1
+.le2rd
+.le1r
+.le2ru
+.le1kl
+.le1k2r
+.lemez1z
+.le1me
+.le1p2r
+.le1s2m
+.le1t2r
+.le12
+.l2c3s2
+.1l
+.l2g1a2
+.l2g1
+.l1ge2
+.l2g1el
+.l2gr
+.l1g
+.l2go
+.l2gy12
+.lg2y
+.l2p1a2
+.l2per
+.l1pe
+.l1p2
+.1l2p11l
+.2lpl
+.l2t1a2
+.l2t12
+.l2t1e2l
+.l1te
+.l2t1rd
+.l1t
+.l2tr
+.l1t2
+.lisz2ta
+.1li
+.lis2z
+.lisz2t12
+.lisz2ter
+.lisz1te
+.li1to1
+.2lo2b1e
+.1lo
+.lo1bi2
+.lo2bin
+.lo2i2
+.lo2m1a2
+.lo2m1
+.lom2b1e2
+.lo2me
+.lo2m12t
+.lo1m
+.lon2c1si
+.lonc2s
+.lfo2g1a2d
+.1l
+.l2fog
+.l1fo
+.lfo1ga
+.l2cs12v
+.1l
+.lc2s
+.l1c1s
+.lrs3s
+.l1r
+.m2
+.m2a2ga2l
+.1ma
+.ma1ga
+.ma2ga2r
+.ma2gl
+.ma1g
+.ma2g1e2
+.mag1g
+.ma1g2
+.ma2gr
+.ma2r1a2dottab
+.m2arad
+.ma1ra
+.mara1do
+.maradot1ta
+.ma2r1a2dottk
+.m2a2r1c
+.ma1r
+.ma2r1ing
+.ma1ri
+.masz2k1or
+.mas2z
+.masz1ko
+.masz2k1
+.m2r1is
+.1m
+.m1ri
+.me2g1e2
+.1me
+.me2g12
+.meg1if
+.me2gi
+.me2g1o2
+.me2g12
+.me2i
+.mel2l
+.me2ny1u2
+.men2y
+.me2z
+.mdi2af
+.1m
+.m1di
+.mdi1a
+.m2n
+.m2no
+.m2s1za2
+.ms2z
+.m2szet
+.m1s1ze
+.m2s1zi
+.m2s1zo
+.m2zis
+.m1zi
+.mi3r
+.1mi
+.mo2lyan
+.1mo
+.mol2y
+.mo1lya
+.m1i2
+.1m
+.m1kr
+.m1s
+.n2
+.na2gya
+.1na
+.nag2y
+.na2gy2
+.n2a2pap
+.na1pa
+.na2p1ar
+.na2pl
+.na1p
+.na2p1e
+.na2ps
+.na1p
+.na2p1o2r
+.na1po
+.na2p
+.ne2ma
+.1ne
+.ne2me2g
+.ne1me
+.ne2m1el
+.ne2min
+.ne1mi
+.ne2ol
+.ne1o
+.ne2s1z
+.nes2z
+.net2t1a2
+.ne2um
+.ne1u
+.n2gy
+.1n
+.ng2y
+.n2pa2
+.n2v1l
+.n1v
+.n2ve2l
+.n1ve
+.nya2k12ro
+.n2y
+.1nya
+.nya1k
+.nya2k1e2
+.nya2k12
+.nyoms3s
+.1nyo
+.nyo1m
+.o2
+.o1da1
+.ok1a2d
+.o1ka
+.ok1a2l
+.ok1ka2
+.ola2j12rat
+.o1la
+.ol2ajr
+.ola1j
+.olaj1ra
+.ola2j1e2
+.ola2s1z12
+.olas2z
+.olda2l12t
+.ol1da
+.olda1l
+.or2r1aj
+.or1ra
+.or2r1alt
+.or2ran
+.or2r1e2
+.or1r2
+.or2r1s
+.or2v1a2
+.2or2v
+.or2v1
+.or1vi2
+.or2vis
+.ot1tr
+.oxi2d1i2
+.o1xi
+.2
+.lo2m1a2
+.1lo
+.me3g2
+.1me
+.1n1a2
+.1n12
+.1n1e2
+.n1v
+.1n
+.v2s1rt2
+.1v
+.v1s
+.2
+.n1d2
+.1n1e2
+.1ni2
+.1n1
+.n3n
+.1n1o
+.1n1
+.n1s
+.1n1
+.1te2
+.t1eg
+.t1el
+.t1t2
+.v1e2g
+.1ve
+.v1e2l
+.1v12
+.2
+.a3l
+.1a
+.r1ab
+.1ra
+.r1a2n
+.r1e2g
+.1re
+.r12g
+.1r
+.r12s
+.r1ist
+.1ri
+.1r1o
+.1r1u2
+.r1g
+.1r
+.1s1a2
+.1s12
+.s1eg
+.1se
+.s1e2l
+.s1e2r
+.s1e2s
+.s12g
+.1s
+.s1rt
+.1s12
+.1s1o
+.1s12
+.s1p
+.s1t2r
+.1s1u2
+.1s1
+.1s1z1a2
+.s2z
+.1s1z1
+.sz1e2g
+.1s1ze
+.sz1el
+.sz1em
+.s3ze1ne
+.s3ze1n
+.1z1a2
+.z1eg
+.1ze
+.z1e2l
+.ze2t
+.z1e1te
+.z1k
+.1z
+.z11re
+.1z1
+.z3s
+.1z1u
+.p2
+.pa2da
+.1pa
+.pa2d12
+.p2a2din
+.pa1di
+.pa2d12
+.pa2pa2r
+.pa1pa
+.pa2pl
+.pa1p
+.pa2pe
+.par1ke2
+.par2ker
+.par2ta
+.par2tel
+.par1te
+.par2ter
+.p2c3s
+.1p
+.pn2ta
+.pr2t12
+.pen3n2y
+.1pe
+.pe2r1a2
+.pe2r1
+.pe2reg2y
+.pe1re
+.pe2r1enc
+.pe2rok
+.pe1ro
+.pe2r2l
+.pe1r
+.pe2s
+.pia2c3s
+.1pi
+.pi1a
+.pi1na1
+.pin2t1
+.pon1ta2
+.1po
+.pon2te2
+.po2rad
+.po1ra
+.po2ral
+.po2ra2n
+.po2rc
+.po1r
+.po2re
+.po2r1us
+.po1ru
+.p2ki2s
+.1p
+.p1ki
+.p2k1
+.p2rs
+.p1r
+.p2t1e
+.pre1k2
+.p1re
+.prs3s
+.p1r
+.pszicho1a2
+.1p2szic
+.ps2z
+.p1s1zi
+.pszi1c2h
+.pszi1c1ho
+.q2
+.r2
+.ra2b1as
+.1ra
+.ra1ba
+.ra2b1
+.ra2be
+.ra2b1il
+.ra1bi
+.r2a2b1i2z
+.ra2b
+.ra2bor
+.ra1bo
+.ra2b
+.ra2b12
+.ra2b
+.r2a2gal
+.ra1ga
+.ra2j12
+.raj1t2
+.raj2t1r
+.r2cs12z
+.1r
+.rc2s
+.r1c1s
+.r1dr
+.r1fr
+.r1gr
+.r1i2
+.rn2c1e
+.rn2y2
+.r1sp2r
+.r1s2t2
+.r1t2
+.ren2d1a2
+.1re
+.ren2d1szn
+.ren1d
+.rends2z
+.ren2d12
+.rete2k1
+.re1te
+.r2m1emb
+.1r
+.r1me
+.r2mu
+.r3p2a
+.r2sa2
+.rs3szer
+.rs2s2z2
+.rs1s1ze
+.r2s1za
+.rs2z
+.r22s1z2
+.r2szell
+.r1s1ze
+.r2szer
+.r2s1z
+.rs2zks2z1
+.rsz1k2
+.rsz1k
+.r2s1zo
+.r2s1z
+.r2t1a2
+.r2t12
+.r2v12
+.r2z2
+.r2ze2l
+.r1ze
+.r2ze2t
+.r2zis
+.r1zi
+.r2z1o
+.rz1z
+.ritmusks2z1
+.1ri
+.rit1mu
+.ritmus1k
+.ri2z1so
+.riz2s
+.rizs3z
+.2r2m
+.1r
+.ro1m2
+.1ro
+.ro2m1t
+.ro2min
+.ro1mi
+.ro2mis
+.ros2t1e2
+.ru2m1a
+.1ru
+.ru2mil
+.ru1mi
+.r2de
+.1r
+.s2
+.sa2h1a
+.1sa
+.saj2te
+.s2a2s1or
+.sa1so
+.s2a2vad
+.sa1va
+.sa2v1a1ra
+.sa2v1l
+.sa1v
+.sa2v1ri
+.s2avr
+.sa2v1e2
+.sa2v12
+.s2r1
+.1s
+.s2r2
+.ss1s
+.s2s3z
+.s2v1a
+.s2v
+.s2v
+.sc2
+.se2bal
+.1se
+.se1ba
+.se2b12
+.se2bel
+.se1be
+.se2bes2z
+.se2b1o
+.s2fi
+.1s
+.s3gr
+.si2em
+.1si
+.si1e
+.si2k
+.si1
+.sn3n
+.1s
+.s2p12
+.s2r1a2
+.s2rt
+.s1r
+.sk2
+.so2kl
+.1so
+.so1k
+.so2kil
+.so1ki
+.so2kis
+.so2k1ol
+.so1ko
+.so2m1ag
+.so1ma
+.so2ma2t
+.so1n2y2
+.so2ral
+.so1ra
+.so2rl
+.so1r
+.s2r1e2g
+.1s
+.s1re
+.sp2
+.spor2t12
+.s1po
+.st2
+.s1tar2t1a2
+.s1ta
+.s2z2
+.sza2k1at
+.1s1za
+.sza1ka
+.sza2k1s
+.sza1k
+.sza2k1e
+.sza2k1r1t
+.sza1k
+.s2zakks2z1
+.szak1k2
+.szak1k
+.sza2k
+.sza2k12
+.sz2l12
+.1s1z
+.s2zmolks2z1
+.sz1mo
+.szmo1l
+.szmol2ks
+.szmol1k
+.szzt2z1e2z
+.szz1t
+.szzt1ze
+.szz1z
+.sze2g12r.
+.1s1ze
+.sze1g
+.sze2g
+.sze2m1
+.sze2m12r.
+.sze1m
+.sze2m12ri
+.sze2r1g
+.sze1r
+.szer2v1a2d
+.3szerv
+.szer1va
+.szer2v1e2v
+.szer1ve
+.sze2s1z
+.s2zes2z
+.sze2szeg
+.s1ze1s1ze
+.sze2s1z12
+.sz2fa
+.1s1z
+.szn1n
+.sz2t1
+.sz1te2
+.s2znks2z1
+.1s1z
+.szn1k
+.szn3n
+.szk2
+.szo2l1
+.1s1zo
+.s2zks2z1
+.1s1z
+.sz2ks
+.sz1k
+.sz2sza2k
+.sz21s1za
+.s2zs2z
+.sz21s1z2
+.sz2sz1v
+.szt2
+.t2
+.t2a2gal
+.1ta
+.ta1ga
+.ta2g1a2r
+.ta2g1
+.ta2g1e
+.ta2gp
+.ta1g
+.tag1g
+.ta2g1i2n
+.ta1gi
+.ta2g
+.ta2nag
+.ta1na
+.ta2n1as
+.ta2nl
+.ta1n
+.tan1d2
+.ta2n1e2
+.ta2n1v
+.ta1n
+.tan2ve
+.ta2nis
+.ta1ni
+.tan1n
+.ta2n12
+.tant2
+.ta2n1u2s
+.ta1nu
+.ta3r
+.t2a2t1l
+.ta1t
+.ta2t1ra1i
+.t2atr
+.tat1ra
+.ta2t1e2
+.ta2t1
+.t2a2tor
+.ta1to
+.t2a2tur
+.ta1tu
+.t2l12
+.1t
+.tn2c1se
+.tnc2s2
+.t2p1ol
+.t1po
+.tr2gy1rt
+.trg2y
+.tr1gy
+.tr2sor
+.tr1so
+.tr2s12
+.tr2t1e2s
+.tr1te
+.tr2t1lt
+.tr1t
+.t2v1a
+.te2a1ka
+.1te
+.te1a
+.te2ar
+.te2j12
+.te2j1e2g
+.te1je
+.termin2l12
+.ter1mi
+.termi1n
+.ter2v1a2
+.ter2v12
+.2tes2tk
+.tes1t
+.tes2t1l
+.tes1t2
+.tetra12
+.tet1ra
+.tettreks2z1
+.tett1re
+.tettre1k
+.t3k
+.1t
+.t2nyem
+.tn2y
+.t1nye
+.t2ny
+.t2ra
+.t2r
+.t2ret
+.t1re
+.t2r1int
+.t1ri
+.t2z1e2z
+.1t
+.t1ze
+.t2z2s
+.t1z2
+.to2k1ro
+.1to
+.to1k
+.tol2le
+.topa1u2
+.to1pa
+.to2r12l
+.to1r
+.to2r1odv
+.to1ro
+.tor2z3se
+.torz2s
+.t1st
+.1t
+.t2t12r.
+.t1t
+.tn2k1a
+.1t
+.t1a2
+.1t
+.t1e2
+.t2gya
+.tg2y
+.t2r1ss
+.t1r
+.t2r12s2z
+.turnus1s2
+.1tu
+.tur1nu
+.tus3s
+.tu2s2z
+.tu1s3z
+.t2r1att
+.1t
+.t1ra
+.t2z1rt
+.1t
+.t1z
+.t2z12r
+.t1z
+.t2z1se
+.tz2s
+.u2
+.ugrs1s
+.ug1r
+.utas1s
+.u1ta
+.uts4
+.u1t
+.u1to2
+.ut2d1
+.u1t
+.2
+.1j1e
+.jra2p1t
+.j1ra1
+.jra1
+.jra1p
+.1r1a2
+.1r12
+.1r1e
+.szs2
+.s2z
+.1s1z
+.sz1sp
+.1t1a2
+.1t12
+.1t1e2
+.t1ol
+.1to
+.1t1
+.1t12
+.2
+.2gy12r.
+.g2y
+.1gy
+.1k1a2
+.st2l
+.s1t
+.s2t11l
+.t1e2
+.1t
+.tks2z1
+.t1k
+.ve2g1e2l
+.1ve
+.ve1ge
+.2
+.1r1a2
+.1r12
+.1r1e2
+.r12s
+.1r
+.r11te
+.1ri2
+.r1i1ta
+.r1ss
+.1r
+.r1s
+.rt2
+.v2
+.va2d1al
+.1va
+.va1da
+.va2dr
+.va1d
+.va2dt
+.va1d
+.vado2r
+.va1do
+.va2do1ro
+.va2dv
+.va1d
+.va2d1
+.va2d3z
+.va2gy1i
+.vag2y
+.va2j1e
+.va2k1ak
+.va1ka
+.v2a2kal
+.v2a2k1an
+.v2a2kap
+.va2kr
+.va1k
+.va2k1e2
+.va2k1
+.v2a2rak
+.va1ra
+.va2r12s
+.va1r
+.va2r1e2
+.va2r1ing
+.va1ri
+.va2sab
+.va1sa
+.v2a2sar
+.va2s1a2tom
+.vasa1to
+.va2s12g
+.va1s
+.va2sr1k2
+.va2ss
+.va2s1e
+.va2sk
+.va1s
+.va2s1i2r
+.va1si
+.va2sol
+.va1so
+.v2a2s1or
+.va2s
+.vas3s
+.v2as1tr
+.vast2
+.va2s1
+.va2s3z
+.vc2s1
+.1v
+.v2d
+.v2d1e2
+.v2ma2
+.v2r1a2d
+.v1ra
+.v2r1i2s
+.v1ri
+.v2r1ol
+.v1ro
+.v2rot
+.vers1s
+.1ve
+.ve1r
+.ver2s12g
+.ver1s
+.ver2s1o
+.ver2s2z
+.v2g12j
+.1v
+.v1g
+.v2g12k
+.v2g1o
+.v2nye2l
+.vn2y
+.v1nye
+.v2r1a2
+.v2r
+.v2r1e2b
+.v1re
+.v2r1eg
+.v2rik
+.v1ri
+.v2r1o
+.v2r
+.vr2t1e2lem
+.vr1te
+.vrte1le
+.vr2t1k
+.vr1t
+.v2ru2
+.v2s1za
+.vs2z
+.v22s1z
+.v2szer
+.v1s1ze
+.v2s1z
+.v2s1zo
+.v2s1z12
+.v2zed
+.1v
+.v1ze
+.v2ze2m
+.von2z1e2re1j
+.1vo
+.von1ze
+.vonze1re
+.w2
+.x2
+.y2
+.z2
+.z2a2bal
+.1za
+.za1ba
+.za2be
+.za2b1i2n
+.za1bi
+.za2j1e2
+.za2j1
+.za2jut
+.za1ju
+.z2r1a2d
+.1z
+.z1ra
+.z2r1e
+.z2r12ra
+.3zrr
+.z1r
+.zrta2n
+.zr1ta
+.zr2t1an2y
+.zr2t1
+.zr2t12v
+.zr1t
+.ze2i
+.1ze
+.z2l1
+.1z
+.z2t1
+.z2s2
+.zse2be2lem
+.1z1se
+.zse1be
+.zsebe1le
+.z2r1
+.1z
+2a.
+a1a
+aa2be
+aa2c
+aa2c2h
+aa2da
+aads1s
+aa1d
+aa2ds2s2z2
+aa2d
+aa2du
+aa2fo
+aa2ga
+aa2gi
+aa2g
+aa2g2y
+aa2j
+aa2ka
+aa2k
+aa2ko
+aa2ku
+aa2la
+aala2g1
+aa2l
+aa2l1e
+aa2l
+aalma1na2
+aal1ma
+aalmanac3
+aa2lo
+aa2lu
+aa2ma
+aa2na
+aa2ne
+aa2ni
+aa2no
+aa2n2y
+aa2pa
+aa2p
+aa2po
+aa2pu
+aa2ra
+aa2r
+aa2r
+aa2ri
+a2arl
+aa2ro
+aa2s2z
+aa2to
+aa2t2y
+aa2ur
+aa1u
+aa2ut
+aa2va
+a2a1vo
+aa2zo
+a1
+a2b
+a2c2s
+a2f
+a2ga
+a2g
+a2g
+a2gi
+a2go
+a2gu
+a2g2y
+a2h
+a2ju
+a2la
+a2lo
+a2po
+a2ra
+a2r
+a2r1e2
+a2r
+a2ri
+a2ro
+a2ru
+a2r
+a2sa
+a2s
+a2so
+a2s
+a2ta
+a2t12
+a2t1e2
+a2t
+a2t1i2
+a2t
+a2to
+a2t1
+a2tu
+a2t
+a2t
+a2z
+a2z
+2abab
+a1ba
+ab1a1d
+a2b1a1ga
+1a2bajg
+ab1ak1k
+2abal
+a2b1alj
+2aban
+a2ba2nal
+aba1na
+aba1pr
+2abar
+aba2rat
+aba1ra
+a2b1a2rb
+aba1r
+a2b1a2u
+2abb
+a1b
+ab2b1u2r
+ab1bu
+2abd
+2abn
+a2b1p
+ab2rak
+ab1ra
+ab12ron
+ab1ro
+a2b12r
+2abz
+ab1b2a
+1abbah
+2abe1a
+a1be
+abe12
+a2b1e2b
+2abec
+ab1e1d
+2abe1
+2abef
+2abeh
+2abe1i
+2abej
+a2b1ejt
+ab1e1la
+ab1e2l
+2abe1le
+abe2lem
+2abels
+ab1els2z
+a2b1elt
+ab1elv
+2abem
+ab1emb
+a2b1erd
+2abe1t
+2abe1te
+2abe1t
+2abe1to
+2abe1t
+2abev
+a2b1ex
+2abk
+a1b
+2abl
+2abn
+a2b12ne
+a2b1p
+2abr
+a2b1rz
+2ab1t
+a2b11ve
+ab1fl
+ab1fr
+2abic
+a1bi
+ab1i2do
+2abi1e
+ab1i2ke
+ab1ik1s
+a2b1i2na1i
+abi1na
+abi2nb
+abi1n
+a2b1ing
+2abir
+a2b1irk1i
+abir1k
+a2b1ism
+2abit
+a2b1i2ta
+2abiz
+a2b1j
+a1b
+ab1rn
+ab1kr
+1abla1k
+ab1la
+1ablakh
+1ablakk
+1abl2akos
+abla1ko
+1ablakr
+2ab1lo
+a1b2lok
+2abog
+a1bo
+2aboh
+2abok
+2abolt
+ab1ol1t
+2abom
+abo2rak
+abo1ra
+abo2r1as
+abo2rin
+abo1ri
+2abot
+a2b1b
+a1b
+ab2l
+ab11l
+ab1lt
+a2b1s
+a2b1t
+a2b12z
+a2b1rl
+a1b
+ab1pr
+ab2rek
+ab1re
+2ab1ri
+a1b2ri1ke
+ab2rin
+a1b2rit
+2ab1r
+ab2rk
+ab1st
+a2b1urd
+a1bu
+a2b12r.
+a1b
+a2b1rt
+ab2s1
+a2b1s2z
+ab12l
+a1b
+ab1s
+ab1v
+a2b1z
+aca2la
+a1ca
+aca2l
+aca2l1e2
+ac2a2l2t
+aca1l
+a2c1a2n
+aca2t
+a2c1g
+a1c
+a2c1l
+ac2c2h
+acci2
+ac1ci
+ac2c
+ac3c1se
+ac2c2s
+ac3c1s
+ac3c1s
+acc3s2z
+a2c2e.
+a1ce
+ac1e1b
+a2c1eg
+ace2l
+a2c1e1le
+a2c1e1l
+a2c1elh
+ac1el1le
+a2c1elm
+a2c1e1lo
+a2c1elv
+ac1emb
+2acen
+a2c1e2v
+a2c1ex
+a2c1l
+a1c
+ac1l1e2
+a2c1l
+a2c1p
+a2c12re
+a2c1r1te
+ac1fr
+a2c1h
+ac2h
+ac3hj
+a1c1h
+a1c3h
+a2c3hoz
+a1c1ho
+a1c3h
+a2c3h
+a2c3h
+ac1i1de
+a1ci
+a2c1i2g
+a2c1i2g
+a2c1i1ke
+2aci2n.
+a2c1in1d2
+a2c1inf
+a2c1ist
+a2c1r
+a1c
+ac1v
+ack1a1ro
+ac1ka
+ac2kl
+ac1k
+ac2k1e2v
+ac1ke
+ack2r
+ac1k
+ac2k11re
+ack11te
+ac2kil
+ac1ki
+ac2k1os2z
+ac1ko
+ac2ks
+ac1k
+ac2k
+ac2lu
+a2c1op
+a1co
+ac1s
+a1c
+ac1r
+a1c
+ac1pl
+ac1pr
+2acsal
+ac2s
+a1c1sa
+acs1al2j.
+acsa2p12g
+acsa1p
+a2cs1atk
+acs1ll
+a1c1s
+a2cs1ru
+acse2c
+a1c1se
+acs1eg2y
+a2c3seml
+1a2csb
+a1c1s
+a2cs1k
+2a1c1si
+2a1c1s
+2acson
+a1c1so
+acs1orm
+a2cs1c
+a1c1s
+acs1s
+ac3st2r
+a2csl
+a1c1s
+a2cs1r
+acs2l
+a1c1s
+a2cst
+ac3s1z
+acs2z
+ac3s1ze
+ac3s1z
+ac1tr
+a2c1ud
+a1cu
+2acu1la
+a2c1ut
+ac1j
+a1c
+ac1g
+a1c
+ac1r
+ac1z
+a1c3za
+ac2z
+a1c3z
+a1c3ze
+ac3z2s
+a1c3zu
+a2d1a2da
+a1da
+a2d1a2d
+1a2da2g.
+ada2g
+1a2dagb
+a2dag3g
+1a2dagh
+1ada1gi
+1a2dagj
+1a2dagn
+1a2da1go
+1a2dagr
+1a2dagt
+1ada1gu
+1a2da1g
+a2d1ak1t
+ada2lap
+ada1la
+ad2a2l1es
+ada1le
+1ada1l
+ad2a2ln
+ada2l1os2z
+ada1lo
+ada2l12
+ada2l12t
+ada1l
+a2d1a1na
+a2dand1i
+adan1d
+a2d1ann
+1a2dapt
+2adar
+ada2ral
+ada1ra
+ada2re
+ada2r1s
+ada1r
+ada2r1in
+ada1ri
+ada2rut
+ada1ru
+ad2a2tab
+ada1ta
+ada2tal
+ad2a2t1a2n
+ada2t12rak
+ad2atr
+ada1t
+adat1ra
+ada2t12ram
+ada2t12rat
+ada2t12r
+ada2t1rb
+ada2t1rr
+ada2t12ru
+1a2dat1u
+ada2t1e2g
+ada1te
+ada2tel
+ada2t1es
+ad2at2r
+ada1t
+ada2t1rd
+ada2t1re
+ada2t11r
+1a2d2atin
+ada1ti
+ada2tint
+ad2a2tis
+ada2tv
+ada1t
+a2datm
+1a2dato1ko
+ada1to
+1a2datokr
+ada2t1old
+ada2t12l
+ada1t
+ada2t1
+a2datv
+ad1a1zo
+a2d1g
+a1d
+ad1ra2
+ad2rak
+ad2ris
+ad1ri
+ade2g
+a1de
+ad1e1ge
+ad1e1g
+ad1eg2y
+a2d1ej
+adel1ej
+ade1le
+ad1elh
+ad1elm
+ad1eln
+a2d1e2l
+ad1elr
+ad1elt
+a2d1emb
+ad1e2m
+a2d1eml
+a2d1e1mu
+a2d1eng
+ad1e2pe
+ad1epr
+a2derd
+ad1e2r
+ade2ti
+a2d1e2v
+a2d1ex
+ad2kat
+a1d
+ad1ka
+ad2k1e2
+ad22ks
+ad1k
+ad2kis
+ad1ki
+ad2k
+ad2k
+ad11le
+2admont2
+ad1mo
+a2d1p
+a2d1rz
+ad2s
+ad2te
+a2d12ve
+ad1fl
+adfo2k1t
+ad1fo
+adfo1k
+ad1gr
+1ad1h
+2adi1a
+a1di
+adia2n
+ad1i2bo
+2adid
+adi2kut
+adi1ku
+2adin
+ad1i2n2a.
+adi1na
+ad1i2na1i
+a2d1ind
+a2d1ing
+adi2o1g2
+adi1o
+2adip
+2adis
+2adiv
+a2d12z
+a1d
+ad2ji
+adka2na
+ad1ka
+ad1kr
+2adob
+a1do
+2adoc
+a2d1ok1ke
+2adol
+ad1o1la
+1a2do1m
+2adomb
+2ado1mi
+1a2dop
+a2d1orc
+a2d1org
+2adorh
+2adorian
+ado1ri
+adori1a
+2adorig
+ad1orv
+a2d1os2z
+1a2dottaih
+adot1ta
+adotta1i
+1a2dottakb2a.
+adottak1ba
+1a2da2d
+a1d
+ad1a
+a2d1gu
+1a2d1ku
+a2d1li
+a2d1m
+a2d1r
+1a2dsat
+ad1sa
+2a3ds2i.
+ad1si
+ad12vs
+ad1v
+1a2d1z
+a2d12k
+a1d
+a2d12l
+ad1rd
+a2d1s
+ad1r1a
+a1d
+ad2rel
+ad1re
+ad12s
+ad1pl
+ad1pr
+a1d2rac
+ad1ra
+ad2ram
+ad2raz
+2ad1r
+ad2rm
+2ad1ro
+ad2rog
+a1d2rt
+ad1r
+ad2ruk
+ad1ru
+ad1sp
+ad1st
+2adug
+a1du
+2adum
+2adup
+ad1u2r
+ad1s2z
+a1d
+ad2t
+a2d11to
+a2d1g
+a1d
+ad12l
+a2d1t
+ad1z
+a2d1r
+a1d
+ad1z
+ad1yr
+ad1yt
+ad3zab
+ad2z
+a1d1za
+ad3zav
+ad3zr
+a1d1z
+a2d3ze
+a2d3z
+a1d3z1s
+adz2s
+a1e
+ae2b
+ae2ce
+ae2c2s
+ae2d
+ae2d2z
+ae2ge
+ae2g
+ae2g2y
+aegyhzkz1
+aegy1h
+aegyhz1k
+ae2he
+ae2ke
+ae2k
+ae2la
+ae2l12
+ae2le
+ael1ej
+ae3len
+ael1rh
+ae1l
+ae2l12
+a1elle2n12
+ael1le
+ae2lo
+ae2l12
+ae2l
+ae2lu
+ae2me
+ae2m
+ae2mi
+ae2mu
+ae2ne
+ae2pe
+ae2p
+ae2pi
+ae2po
+ae2red
+ae1re
+ae2r
+aero1s
+ae1ro
+aeros2z2
+ae2r
+ae2r
+ae2se
+aes1er
+ae2s
+ae2si
+ae2s
+ae2s
+ae2s2z
+ae2ta
+ae2t
+ae2te
+ae2ti
+ae2t
+ae2va
+ae2ve
+ae2v
+ae2vi
+ae2vo
+ae2v
+ae2xe
+ae2z
+a1
+a2derv
+a1de
+a2ge
+a2g
+a2g
+a2he
+a2je
+a2ke
+a2k
+a2le
+a2l
+a2li
+a2l
+a2l
+a2l
+a2ne
+a2p1te
+a1p
+a2ptsb
+ap1t
+a2pt1se
+a2pt1s
+a2ptsh
+a2pt1si
+a2ptsn
+a2ptsr
+a2ptss
+a2pt1s
+a2pth
+a2p1ti
+a2ptj
+a2ptk
+a2p
+arde2m1
+ar1de
+a2ri
+a2te
+a2va
+a2ve
+a2v
+a2vi
+a2v
+2af2a.
+a1fa
+2afa2j.
+2afa1ja
+2afa1j
+2afajb
+2afajj
+2afajn
+2afa1jo
+2afaj2t.
+afajt2
+2afa1ju
+2afajz
+2afak
+2afal
+2afam
+2afa1o
+2afar
+2afas
+afe2l1e2m
+a1fe
+afe1le
+2afk
+a1f
+2af1li
+2af1l
+2aflt
+2afn
+2afr
+2afs
+1af1f
+afi2a1p2
+a1fi
+afi1a
+afi2as2z
+afi2ke
+afi2t1a2
+afi2t1e2
+af2le
+a1f2lo
+a1f2l
+a1f2l
+af2lu
+2afoc
+a1fo
+2afog
+2afok
+2afol
+2afon
+2aford
+2aforg
+2aformc
+afor1m
+2aforml
+2aform1tu
+2aformz
+2afor1mu
+2aforr
+2afos
+2afot
+af2rak
+af1ra
+2a1f2re
+af2riz
+af1ri
+af2r
+2af1ro
+af2ron
+2a1f2r
+af3t
+afus3s
+a1fu
+a2g1abl
+a1ga
+a2g1abr
+ag1a2c
+a1g1a1ga
+a2g1a2ka
+a2g1akk
+a2g1akt
+2agal
+a2g1a2lak
+aga1la
+a2g1a2lap
+a2g1a2l
+a2g1alj
+a2g1alm
+aga2lom
+aga1lo
+a2g1alt
+ag1ang
+ag1a2no
+ag1ant
+a2gan2y
+a2gap
+ag1a1pa
+ag1a1p
+a2g1arc
+a2g1a1r
+a2g1a2ro
+a2g1art
+aga2tom
+aga1to
+ag1a2t
+a2g1a2ur
+aga1u
+ag1aut
+a2g1a1va
+2agaz
+a2g1a2zon
+aga1zo
+ag2c
+a1g
+a2g1c2s.
+agc2s
+a2g11c1si
+ag12ga
+1a2gk
+a3g1la
+a2g1lm
+aglks2z1
+ag1l
+agl2ks
+agl1k
+ag2lyan
+a3g2l2y
+ag1lya
+a2g1p
+a2g2r.
+a2g12rad
+ag1ra
+a2g12ra1i
+a2g12rak
+a2g12ras
+a2g12ra2t
+a2g2r
+a2grb
+a2g1rc
+a2g2re2
+a2g1r
+ag2rv
+a2grf
+a2grh
+a2g2ri
+a2grj
+a2grk
+a2grn
+ag1r1n
+a2g1ro
+a2grr
+a2gr1s2
+a2grt
+a2g12ru
+a2g12r
+ag1sv
+a2g12t12
+a2g12t1e2
+a2g1t1fe
+a2g1th
+a2g1tk
+a2g1tm
+ag2tol
+ag1to
+a2g1ts
+a2g12t2
+a2g1tv
+ag1bl
+ag2del
+ag1de
+agd2j1a2da
+ag1d
+agd1ja
+ag1e2c2s
+a1ge
+a2g1e2d
+a2g1e2g
+age2l
+a2g1e1la
+ag1elb
+ag1eld
+ag1e1le
+ag1e1l
+ag1elf
+ag1elh
+ag1e1li
+ag1elm
+ag1eln
+a2g1e1lo
+a2g1e1l
+ag1elr
+ag1els
+ag1elt
+ag1e1l
+ag1elv
+ag1elz
+a2g1e2m
+ag1eng
+a2g1en2y
+a2g1e2p
+a2g1erd
+age2red
+age1re
+a2g1erk
+a2g1e2r
+age2s
+a2g1e2v
+a2g1ex
+a2g1ez
+a2g12j
+a1g
+a2g12k.
+a2g1kn
+a2g12l
+ag2n
+ag2p1i2p
+ag1pi
+a2g12pl
+ag1p
+a2g12r.
+a2g12re
+a2g12r
+a2g1rh
+a2g12ri
+a2g1rk
+a2g1rl
+a2g1rm
+a2g1r1te
+a2g1r1t
+a2g1rth
+a2g1r1t
+ag1s2z
+a2g11te
+a2g11ve
+ag1fl
+ag1fr
+1ag2g.
+ag2g1a2t2y
+ag1ga
+ag2g1em
+ag1ge
+ag2git
+ag1gi
+1aggod
+ag1go
+1aggok
+ag3gyar
+ag2g2y
+ag1gya
+ag3gye
+ag3gyi
+ag3gyo
+ag3gy
+agi3a
+a1gi
+ag1i1de
+a2g1i2ga
+a2g1i1ge
+a2g1i2g
+ag1i1ke
+a2g1ill
+a2g1inf
+a2g1ing
+a2g1int
+a2g1i2o1ni
+agi1o
+agi2
+a2g1ip
+a2g1i1ro
+a2g1ist
+agi2s2z
+a2gi1ta
+ag1i1z
+ag1izm
+a2g1j
+a1g
+ag1n
+a2g1r
+ag1v
+a2g1z
+agk2rok
+ag1k
+agk1ro
+ag1kl
+ag1kr
+a2g1ob
+a1go
+a2g1ol1d
+ag1ol1t
+ago2lya
+agol2y
+2agom
+2ago1na
+agon3n
+ago2n1os2z
+ag2o1no
+a2g1op
+a2g1org
+ag1orj
+a2g1orn
+a2g1orr
+a2g1ors
+a2g1orv
+a2g1otth
+ag2r1i
+a1g
+ag1r
+a2g12l
+a1g
+ag1nk
+a2g1nt
+a2g11r
+a2g1rv
+a2g1s
+a2g1t
+a2g12v
+a2g12z
+a2g1r
+a1g
+a2g12s
+ag1pl
+ag1pr
+2a1g2rammj
+ag1ra
+a1g2rav
+2ag1r
+a1g2rf
+ag1r
+ag1sk
+ag1sp
+ag1sr
+ag1st
+ags2z2
+ag1szt2
+ag1tr
+a2g1und
+a1gu
+a2g1u2ram
+agu1ra
+agu2rat
+ag1u2r
+ag1urn
+ag1u2t
+a2g1j
+a1g
+a2g12t1a2
+a2g11ti
+a2g1tt
+a2g12gyi
+a1g
+agg2y
+a2g1gyv
+a2g12l
+a2g1r
+a2g1s
+a2g1t
+a2g1v
+a2g1z
+ag1r
+a1g
+ag1z
+a2gy1a2c
+ag2y
+a1gya
+a2gyad
+agy1a2d
+a2gy1a2gya
+agyag2y
+a2gyaj
+1a2gya2k.
+a2gyakb
+agya2la
+agy1alap
+agy1alg
+a2gyalj
+agy1al1ko
+agy1alm
+1a2gyam
+agy1a1na
+a2gy1an2y
+a2gy1a1pa
+agy1ap1ja
+a2gy1ap1j
+a2gy1a2p
+a2gy1apr
+agya2s2z
+a2gy1a1s1z
+a2gyl
+a1gy
+agy1rv
+agy1e2g
+a1gye
+a2gy1el
+agy1em
+a2gy1es2z
+a2gyev
+a2gy1ez
+agy12k.
+a1gy
+agy11ke
+agy1kk
+a2gy12r.
+a2gy12re
+a2gy1rn
+a2gy1rr
+agy1rs
+a2gyi1ma
+a1gyi
+agy2ny
+agyn2y
+agyo2r
+a1gyo
+a2gy1o1ro
+a2gy12l
+a1gy
+agy12r
+a1gy
+1a2gy2.
+a1gy
+1a2gy1a
+a2gyn
+agy12r.
+agy12s2z
+a2gyt
+agy1tt
+2a1gy
+aha2l1e
+a1ha
+ahan2g1a2
+a3hang
+aha2sbr
+aha1s
+ahlks2z1
+a1h
+ah1l
+ahl2ks
+ahl1k
+ahely2k
+a1he
+ahel2y
+ahe1ly
+aher1t2ze2k.
+ahert1ze
+aher1t2zekb
+aher1t2ze1ke
+ah2j1t
+a1h
+ah1j
+ahitkz1
+a1hi
+ahit1k
+ah1o2vi
+a1ho
+ah2sr
+a1h
+ah1s
+ahs3s
+a1i
+ai2bo
+2ai2de
+ai2dom
+ai1do
+2ai2d
+a2ik
+ai1
+a2i1fa
+ai2f2a.
+a2i1f
+ai2ga
+ai2g
+ai2ge
+ai2g
+ai2g2y
+ai2i1a
+ai1i
+ai2ib
+ai2ih
+ai2ij
+ai2in
+ai2ir
+ai2it
+ai2je
+ai1ka2
+ai2kab
+ai2k1ad
+ai2k1al
+ai2k1ar
+ai2k1as2
+ai2k
+ai2ke2
+aik1el
+ai1ki2
+ai2kik
+ai2kis
+ai2k1ol
+ai1ko
+ai2k1os2z
+ai2k
+ai2k
+2aill
+ail2l2e.
+ail1le
+ai2m2a.
+ai1ma
+2ai2m
+2ai1mi
+ai2mit
+2aimp
+ai2n2a.
+ai1na
+ai2na2l
+ain1a1la
+2ai2nas
+ai1n2
+ai2n11lo
+ai2nr
+2aind
+ai2ne
+ai2n2l
+ai1n
+2ainf
+2aing
+ai2n1in
+ai1ni
+ai2nol
+ai1no
+2ainp
+2ains
+2aint
+ai2n
+ai2onb
+ai1o
+ai2onn
+ai2o1no
+ai2onr
+ai2ont
+ai2pa
+ai2ram
+ai1ra
+2ai2rat
+2ai2r
+ai2ri
+2ai1ro
+ai2rod
+a2i2se
+ai2si
+2aisk
+2aism
+2aist
+2ais2z
+ai2s1za
+ai2s1zo
+2ai2ta
+ai2vad
+ai1va
+ai2var
+ai2vs
+ai1v
+2ai2v
+ai2z
+ai2zom
+ai1zo
+a1
+a2g
+a2ja
+a2j
+a2ju
+a2ra
+a2r
+a2ro
+a2r
+a2ru
+a2t
+a2v
+a2ve
+a2v
+a2vi
+a2v
+a2v
+a2v
+a2ze
+a2z
+a2z
+a2z
+a2j1a2d
+a1ja
+a2j1a1du
+aj1a1ga
+aj1agr
+aja2kol
+aja1ko
+a2j1a1k
+aja2k
+a2j1a1na
+a2j1ant
+a2j1an2y
+aj1apr
+aj2c
+a1j
+aj12go
+1a2jnd
+1a2jnl
+a2j1p
+2ajr
+a2j1rb
+a2j1rc
+a2j11re2
+a2j11r
+a2j1rr
+aj11s
+aj1sv
+a2j12t1e2
+aj2z
+aj11z
+aj1bl
+aj1br
+aj2d1alm
+aj1da
+aj2d1a2lo2m.
+ajda1lo
+aj2d1a2lomm
+aj2d1a2lomn
+aj2d1a2lomr
+aj2d1a2lomt
+a2j1e2c
+a1je
+a2j1ef
+a2j1e1g
+a2j1e1la
+aje2le1me
+aje1le
+a2j1elf
+aj1el1l
+a2j1e2l1o2
+aj1e1l
+aj1el1v
+aj1el1vo
+a2j1e2m
+aj1e1ne
+aj1enz
+a2j1e2r
+aj1e2se
+a2j1ex
+a2j1ez
+a2j11ge
+a1j
+a2j11g
+a2j12g
+a2j12k
+a2j1l
+a2j1p
+aj2r
+a2j11re
+a2j11te
+aj1fl
+aj1fr
+aj1g2r
+a2j1i2d
+a1ji
+a2j1ij
+a2j1ik
+a2j1im
+a2j1int
+a2j1i1o
+a2j1ip
+a2j1iz
+aj1r
+a1j
+aj1z
+aj1kl
+1ajk2.
+aj1k
+ajob1b1o
+a1jo
+ajo2g12s1za
+ajo1g
+ajogs2z
+a2j1o1la
+aj1old
+a2j1o2v
+a2j1csks
+a1j
+ajc2s
+ajcs1k
+aj2sr
+aj1s
+aj1b
+a1j
+a2j1k
+a2j1r
+a2j1z
+aj1r
+a1j
+aj12s
+aj1pl
+aj1pr
+aj1sh
+aj1sk
+aj1sp
+aj2tg
+aj1t
+aj2teg
+aj1te
+aj2t12t
+aj1t
+ajt1or1g2
+aj1to
+aju2hi
+a1ju
+a2j1j
+a1j
+aj1s2z
+a2j11to
+a2j1tr
+aj1g
+a1j
+aj1l
+aj1s
+aj1z
+aj1z
+a1j
+ajz1a1ka
+aj1za
+ajz1atl
+aj2ze2r
+aj1ze
+aj2z
+aj2z
+2akab
+a1ka
+aka2c1se
+akac2s
+a2kadag
+aka1da
+a2k1a2da1ta
+a2k1a2datb
+a2k1a2datn
+a2k1a2da1to
+a2k1a2datr
+a2k1a2dat1t2
+1a2kadl
+aka1d
+1a2kadm
+aka1d
+a2k1adm
+a2k1a1ga
+2akal
+ak1a2lag
+aka1la
+a2k1a2lak
+aka2la1p
+a2k1aleg
+aka1le
+a2k1al1ko
+2akam
+2akan
+2aka1o
+2akap
+a2ka2pd
+aka1p
+a2k1app
+ak1a2ra1i
+aka1ra
+a2k1a2ras2z
+akara2s
+a2k1a2rb
+aka1r
+a2k1a2rk
+2akarc
+a2karc2h
+2akard
+ak1a2rn
+aka1r
+2aka1ri
+2akarr
+2aka1s
+2akast2
+aka2szaj
+akas2z
+aka1s1za
+a2k1a2szat
+ak2a2szel
+aka1s1ze
+aka2s1z
+a2k1asztr
+2aka1ta
+ak2a2tab
+2aka1te
+aka2tel
+aka2tem
+aka1ti2
+aka2tik
+aka2tim
+ak2a2tin
+2aka1u
+a2k1a2u1t
+2akav
+2akaz
+1ak2c.
+a1k
+a2k1f
+a2k1g
+ak2l1a
+ak2lis
+ak1li
+a2k1l1l
+a2k12rad
+ak1ra
+a2k1rb
+a2k1rj
+a2krk
+ak2rokn
+ak1ro
+a2k1r1t
+akrt2
+a2k12ru
+ak2sad
+ak1sa
+ak2saj
+ak2sal
+ak2sar
+ak2sav
+a2k2sst
+ak1s
+aks3s
+ak12szn
+aks2z
+ak1s1z
+ak2s1zu
+a2k1szun
+ak1t1a
+a2k1t1la
+ak1bl
+akci2s12
+ak1ci
+akci1
+ake2c2s
+a1ke
+a2k1e2d2z
+ak1e2ge
+ak1e2g
+a2k1e1la
+a2k1e1l
+ake2lem
+ake1le
+ak1elh
+a2k1elj
+a2k1eln
+a2k1e1lo
+ake2lk
+ake1l
+a2k1elr
+a2k1elv
+a2k1emb
+ak1e2mel
+ake1me
+a2kerd
+ak1e2re1i
+ake1re
+a2k1e2r
+a2k1e2r
+aker2t12sz2e.
+aker1t
+akerts2z
+akert1s1ze
+aker2t1szn
+aker2t1szt
+a2k1est
+ak1eszk
+akes2z
+ak1eszm
+a2k1e2te
+ak1e2ti
+a2k1e2vez
+ake1ve
+a2k12kem
+a1k
+ak1ke
+ak12kes
+a2k12k
+a2k1kh
+ak1k1r
+2akm
+2akn2y
+2ak2p.
+2akpb
+2ak1pe
+ak2p1e2r
+2ak1p
+2akph
+2akpk
+2akpl
+2akpn
+2akppel
+akp1pe
+2akp1p
+2akpr
+2akp1t2
+2ak1p
+2akpz
+2akrd
+a2krdek
+akr1de
+2ak1re
+2ak1r
+a2k1rm
+2ak1r
+a2k12r1i
+a2k12rj
+a2k1rr
+a2krte1ke
+akr1te
+a2k1rtel
+a2k1rtet
+a2k1r1t
+2akrv
+a2k1rz
+2aks
+a2k12s1za
+aks2z
+a2k12te
+2akts
+a2k1tt
+2akz
+ak1fl
+ak1fr
+akgerinc1
+ak1ge
+akge1ri
+ak1gr
+2aki1a
+a1ki
+2akib
+2akic
+2akid
+a2k1i2d
+a2k1i1di
+2aki1e2
+2aki1
+2akif
+a2k1i1ga
+a2k1i1g
+2akig2y
+2akih
+2aki1
+2akij
+2akil
+a2k1ill
+a2k1il2y
+2akim
+a2k1i2m
+a2k1i1mi
+2akin
+a2k1ind
+a2k1ing
+a2k1ins
+a2k1ion
+aki1o
+2akir
+a2ki2rom
+aki1ro
+2akis
+a2k1i1si
+a2k1isk
+a2k1ism
+a2k1ist2
+2akit
+2akiv
+2akiz
+a2k1izm
+a2k1t
+a1k
+a2k12z
+ak2k1a2d
+ak1ka
+ak2kaj
+ak2k1a2la
+akk1alk
+ak2k1arc
+ak2kl
+ak1k
+ak2k12p
+ak2k1ed
+ak1ke
+akk1ell
+ak2kelm
+akk1elt
+ak2kem
+ak2k1e2r
+akke2s
+akk1e1se
+ak2ket
+ak2ko1la
+ak1ko
+1akkord
+akk1lt
+akk2l
+ak1k
+ak2k1s
+ak2kr
+ak1k
+1akk2u.
+ak1ku
+1akkum
+ak2la1u
+ak1la
+ak2lav
+ak2lor
+ak1lo
+ak2ln
+ak1l
+ak2lr
+1akna1i
+ak1na
+1aknb
+ak1n
+1aknh
+1akn1i
+1akn1ka
+1akn1ko
+1akns
+1akn2t.
+1aknv
+1aknz
+2ako1a
+a1ko
+ak1obj
+2akoc
+2akof
+2akok
+akols3s
+ako1l
+a2k1ol1da
+a2k1o2l2y
+2akom
+2akonc
+2akond
+2akonf
+2akong
+2akonk
+2akons
+2akont
+2akonv
+2akon2y
+2akonz2
+2ako1o
+2akop
+a2k1o2pe
+ak1o2rat
+ako1ra
+2akorb
+2akord
+a2k1org
+2ako1ri
+a2k1orj
+2akorl
+2akorm
+2ako1ro
+2akorp
+2akorr
+2akor1s2
+2akort
+2ako1ru
+2ako1r
+a2k1orv
+2akos
+2ak1ni
+a1k
+2aknus1s1z
+ak1nu
+aknuss2
+aknus2s2z
+2ak1p2
+a2k12r
+a2k12rd
+ak1r
+1a2k1z
+ak1s2s2z
+a1k
+ak2z12l
+ak1z
+akzre1a3
+akz1re
+ak12r.
+a1k
+ak12s.
+ak1pl
+ak1pr
+ak1ps
+ak2rt
+ak1r
+2ak1re
+ak2re1a
+2ak1r
+a1k2r1me
+ak2r1ta
+ak2r1t
+2akris
+ak1ri
+ak2ri1t
+2a1k2riti1ka
+akri1ti
+2ak1r
+ak2rz
+1akrob
+ak1ro
+2a1k2rnik
+ak1r
+akr1ni
+ak1sp
+ak1sz2t2
+aks2z
+ak2t1a2u
+ak1ta
+aktrgya2d
+ak1t
+aktrg2y
+aktr1gya
+aktr2gy1a1da
+aktr2s1a2d
+aktr1sa
+1akt2i.
+ak1ti
+ak2ti2m
+1aktivl2.
+akti1v
+aktiv1l
+akt2ve
+ak1t
+ak2t1v2e.
+1aktv1s
+akto2r1l
+ak1to
+akto1r
+akt1os2z
+ak1t1r
+1aktu1a
+ak1tu
+aktusks2z1
+aktus1k
+1akt2.
+ak1t
+a2k1udv
+a1ku
+a2k1ujj
+2akun
+1a2ku1pu
+a2k1g
+a1k
+a2k1j
+a2k1rr
+a2k1g
+a1k
+a2k12le
+a2k12l
+a2k1ln
+a2k12t
+a2k12v
+ak1ya
+a1ky
+a2l1abl
+a1la
+alac1c
+ala1ce2
+ala1ci2
+ala2cit
+ala2cor
+ala1co
+a2la1c1s
+alac2s
+ala2c3s
+ala2c1s
+a2ladag
+ala1da
+a2l1a2da1t
+ala2gl
+ala1g
+ala2g1e
+ala2gp
+ala1g
+ala2gol
+ala1go
+ala2gya
+alag2y
+ala2j1a2d
+ala1ja
+ala2jas
+ala2j1e2
+alajk2rok
+alaj1k
+alajk1ro
+a2la2kad
+ala1ka
+al2a2k1an
+a2l1a2kas
+ala2kl
+ala1k
+ala2k1p
+ala2kes
+ala1ke
+1a2la1k
+2a3laktsil
+alak1t
+alakt1si
+a2l1akn2a.
+alak1na
+a2laknk
+alak1n
+a2laknt
+ala2kol
+ala1ko
+a2l1a2kd
+ala1k
+ala2k1l
+ala1k
+a2l1ak1tu
+alakt2
+1ala1ku
+a2laku2l.
+a2lakult
+al1alg
+a2l1alj
+a2l1alk
+al1all
+al1alm
+al1a2lo
+al1alt
+ala2n1e
+1a2lan2n2y
+a2lan2y
+ala2nyal
+ala1nya
+al2a2ny1e2
+ala2p1a2d
+ala1pa
+ala2pak
+al2a2pal
+a2lapan
+ala2p12r
+ala1p
+alap12tokk
+alap1to
+alap12tokr
+a2l1a2ptom
+ala2p1e2
+ala2pill
+ala1pi
+ala2pin
+1a2laptv
+ala1p
+ala2p1ol
+ala1po
+ala2por
+ala2p1os2z
+ala1p12
+alap1p
+al1a2ra
+al1a2r
+al1arg
+ala1s2p
+a2l1aszp
+alas2z
+alaszta2l
+alasz1ta
+a1la2t1a1la
+ala1ta
+alat1an2y
+al2atan
+ala2t11t1a2
+ala1t
+ala2t1e2v
+ala1te
+ala2t1inf
+al2atin
+ala1ti
+ala2tv
+ala1t
+ala2t1ol
+ala1to
+ala1t2
+ala2tr
+a2l1attak
+alat1ta
+1a2lat1ti
+ala2t12
+al1a1va
+ala2zr
+ala1z
+1a2l1a
+a1l
+1a2l1
+alba2d
+al1ba
+al2b1a1da
+a2l1b1r
+1a2lbj
+al1b
+al2dal
+al1da
+al2d1a1p2
+1a2lf
+a2l12g.
+a2l1ga
+al12g
+al1gb
+a2l1gg
+al1gh
+al12gi
+al1gk
+al1gn
+al12go
+a2l1gr
+al1gt
+al12g
+al11gya
+alg2y
+1a2l1
+1a2l1mo
+a2l12rad
+al1ra
+a2lrak
+a2l1r
+al2rr
+a2l1rk
+als1te2
+als2tel
+als2t12r.
+als1t
+a2l1td
+a2l1te
+a2l1t
+al1t2p
+a2l1tf
+a2l12ti
+a2l1tl
+a2l1tm
+a2l1t
+a2ltr
+a2l1t
+al1bl
+al1br
+1album
+al1bu
+1aldehid1n
+al1de
+alde1hi
+al1d2r
+2ale1a
+a1le
+2aleb
+al1e1b
+2alec
+al1e1ce
+ale2g1e2l
+ale1ge
+al1egs
+ale1g
+ale2gs2z1
+a2l1egys
+aleg2y
+a2le1gy
+2aleh
+2ale12
+2alej
+ale2k1a
+a2l1e1la
+a2l1elg
+ale1l
+a2l1eld
+al1e2led
+a1le1le
+ale2le2m.
+ale2lemb
+ale2le1me
+ale2lemk
+ale2lemm
+ale2lemt
+a2l1elg
+a2l1elh
+al1elm
+a2l1eln
+ale2lk
+ale1l
+ale2lt
+a2l1elr
+a2l1els
+al1el1t
+a2l1elv
+2alem
+a2l1emb
+a2l1e2mel
+ale1me
+al1e2m
+a2l1eml
+2alen
+a2l1e1ne
+2alep
+ale2p2e.
+ale1pe
+a2lerd
+a2l1e2re
+a2l1erk
+a2l1ern
+a2l1e2r
+2ales
+al1esem
+ale1se
+ale2sik
+ale1si
+ale2tet
+ale1te
+ale12
+2alev
+ale2vol
+ale1vo
+ale2v1i
+ale1v
+2alex
+a2l1exp
+2alc
+a1l
+2alg
+a2l12g
+al2kal
+al1ka
+al2k1an
+al2ka2t
+al2k1em
+al1ke
+al2ker
+al2kes
+al2kor
+al1ko
+a2l2l.
+al12le2n
+al1le
+a2l12let
+a2l11l
+a2l1ll
+al12l
+a2l11l
+2aln
+a2lne1ke
+al1ne
+a2l1rd
+al1rs
+a2l1r1te
+a2l1r1t
+a2l1r1t
+a2l1rz
+2alt
+al2tek
+al1te
+a2l12tel
+a2l1tl
+a2l11vi
+1alfs
+al1f
+alf2r
+1algsat
+al1g
+alg1sa
+1algor
+al1go
+al1gr
+2alic
+a1li
+al1i1de
+a2li1d
+al1i2do
+al1ifj
+a2l1i1g
+2alik
+a2l1ill
+2alim
+a2l1i2m
+a2linas
+ali1na
+a2l1ind
+ali2nin
+ali1ni
+ali2ra
+ali1
+al1i2pa
+a2l1i1r
+a2l1i1ro
+a2l1i2si
+a2l1ism
+ali1s2po
+alis1p
+al1is1te
+2ali1te
+al1iz1ma
+al1j
+a1l
+a2l1n
+a2l12v
+alja2i1k
+al1ja
+alja1i
+1alja1ka
+1aljakb
+1alja1k
+1aljak1k2
+1alja1ko
+1aljas
+1alj1i
+al1j
+alj1r1na
+al2j12ro
+1aljb
+1aljc
+1aljd
+1al2j1er
+al1je
+1aljf
+1aljg
+1aljh
+1alji1a
+al1ji
+al2j
+1aljj
+1aljk
+1aljl
+1aljm
+1aljn
+1aljr
+1aljs
+1aljt
+1al1j
+1al2j
+1aljv
+1aljz
+al2k1a2p
+al1ka
+alk2a2r1i2z
+alka1ri
+alke1le2
+al1ke
+1alkm
+al1k
+1alkoh
+al1ko
+1alko1t
+1alkotm
+1alko1t
+al1kozi2ko
+alko1z
+alkoz1i
+1alk2u.
+al1ku
+1alkud
+1alkun
+al2l1aj
+al1la
+al2l1akt2
+al2l1akv
+alla2l
+al2l1a1la
+al2lalk
+al2l1ar
+al2la1u
+all1ll
+al1l
+all1z2s
+al2led
+al1le
+all1eg2y
+all1emb
+1allerg
+all1e1se
+all1est
+all1e2v
+all12j
+al1l
+al2l1id
+al1li
+al2lim
+all1int
+al2li2p
+al2l1isk
+al2l
+all11ri
+al1l
+all12sok
+all1so
+al2ls
+al1l
+al2l12
+al2l
+1al1l
+1almd
+al1m
+alme2g1o
+al1me
+2alob
+a1lo
+a2l1o2be
+alo2g12
+a2l1ok1ta
+al1old
+al2ol2d.
+a2lol1da
+alo1ma2
+alo2mad
+alo2mak
+alo2m1al
+alo2m1an
+alo2map
+alo2mar
+alo2mas
+alo2mc
+alo1m
+alo2mr
+alo2m1t
+alo2mer
+alo1me
+alo2min
+alo1mi
+alo2mi2s
+alo2mit
+alom1p2
+alo2m1
+alo2n1
+alon1d2
+alon3n
+2alop
+al1opc
+a2l1o2pe
+al1o2ra
+al1orc
+a2l1orn
+al1o2ro
+a2l1orr
+alos3s
+a2l1os1t
+a2l1oszl
+alos2z
+2alov
+al22c3se
+a1l
+alc2s
+3algu2s1e2s
+al1gu
+algu2s1e2
+aligaz1
+al1i
+al2i2ga
+ali2ko
+al12lo
+a2l1nn
+al12
+a2l2rj
+al1r
+al2rk
+al2za2n
+al1za
+al2zis
+al1zi
+a2l1b
+a1l
+a2l12l
+a2l1n
+a2l1r
+a2l1s
+a2l12z
+alpe2l
+al1pe
+alp1e1le
+al2piz
+al1pi
+al1sh
+al1sk
+al1sl
+al1sm
+al1sp
+al1s1to
+als2z2
+al1szt2
+al2ta1da
+al1ta
+al2t1alap
+alta1la
+alt1a1nya
+altan2y
+alt1elv
+al1te
+alt1emb
+al2t1e2p
+al2t1e2v
+al2t12k
+al1t
+alt2n
+alt11ne
+alt1r1ne
+al2t12r
+al2t1rr
+alt1r1t
+al2t1i2m
+al1ti
+alti2n
+alt1i1na
+alti2p
+alt1i1pa
+al2t1ir
+al2t1old
+al1to
+1alton1k2
+al2t1os2z
+al2tc
+al1t
+al2tn
+al1t
+al1trak
+alt1ra
+al1tran
+al1trav
+al2tur
+al1tu
+al2tr
+al1t
+1alt1v
+alu1p2
+a1lu
+1a2luss
+alu1str
+alust2
+a2l1j
+a1l
+al12r.
+al1rb
+al1rh
+al12ri
+al1rk
+al1rn
+al1rr
+a2l11t
+a2l1th
+a2l1tj
+a2l1tn
+a2l1tt
+al1g
+a1l
+al1l
+al1n
+al1r
+al1s
+al1t
+al1v
+a2l1z
+al1r
+a1l
+al1z
+1al1v
+a2ly1ap
+al2y
+a1lya
+a2lyar
+a2lyl
+a1ly
+a2ly1e2
+a2lyv
+a1ly
+a2ly1id
+a1lyi
+a2lyim
+a2lyis
+a2ly
+a2lyug
+a1lyu
+a2ly12
+am1abb
+a1ma
+am1abl
+2amad
+a2m1a2dat
+ama1da
+am1adm
+a2m1a2d
+a2m1a2du
+2amag
+ama2gt
+ama1g
+2amaj
+am1ajt
+ama2kar
+ama1ka
+a2m1akt
+am1akv
+a2m1a2lak
+ama1la
+am1a2lap
+a2m1a2l1e
+2aman
+ama2nya
+aman2y
+ama12
+2amap
+2amas
+am2a2sz1a2k
+amas2z
+ama1s1za
+am2a2sz1eg
+ama1s1ze
+ama2sz1em
+ama2szl
+ama1s1z
+ama2s1z
+ama2tad
+ama1ta
+am2ata2n
+ama2t1r
+am2atr
+ama1t
+ama2tel
+ama1te
+ama2told
+ama1to
+ama2t12
+a2m1a2u
+a2m1lm
+a1m
+a2m12ra1i
+am1ra
+a2m12rak
+am2r
+amt1a2d2.
+a2m12ta
+am2ta1d
+a2m1tk
+a2m1tl
+a2m1tt
+am2b1ag
+am1ba
+am2bal
+am2b1at
+am2b11s1z
+am1b
+ambs2z
+am2b1e2g
+am1be
+am2b1e2le
+am2bep
+am2b1e2te
+am2b12r.
+am1b
+1ambu1la
+am1bu
+am1dr
+a2m2e.
+a1me
+am1e2ce
+2ameg
+ame2g1o
+am1e1l
+am1e2lem
+ame1le
+a2m1e2l1i
+am1elj
+a2m1elk
+a2m1eln
+a2m1e1lo
+a2m1e2l
+a2m1els
+a2m1elt
+a2m1elv
+a2m1e2me
+a2m1eng
+2amenn
+amens1s
+amen2t12ro
+amen1t
+a2m1erd
+a2m1e2r
+a2mesk
+2amest
+a2m1e2v
+a2m1ex
+am1ezr
+am2hes
+a1m
+am1he
+am2k
+am11k
+am2let
+am1le
+a2m1p
+a2m1rd
+a2m1rtek
+amr1te
+a2mrtel
+a2m1tk
+a2m11v
+1amfo1r
+am1fo
+am1fr
+am1gr
+ami2g
+a1mi
+a2m1i1ga
+a2m1i1g
+a2m1i1g
+a2mi1m
+a1m1i1mi
+am1imp
+ami2n2a.
+ami1na
+ami2na2n
+ami2nin
+ami1ni
+a2m1in1t
+ami12
+a2m1i1r
+a2m1i1ro
+ami1se2
+ami2sel
+ami2sep
+ami2s2z
+1a2mit1bo
+1a2mit1ha
+1a2mitm
+1a2mi1t
+1a2mit1ro
+1a2mit1r
+1a2mits
+1a2mit1t
+1a2mit1t
+a2mg
+a1m
+am1kl
+am1kr
+amme2g
+am1me
+am2m1eg2y
+am2me1ta
+am2m12t
+am1m
+2amod
+a1mo
+a2m1o2k1e2
+a2m1okm
+a2m1o2koz
+amo1ko
+am1o1la
+a2m1old
+a2m1ol1t
+a2m1op
+a2m1or1s2
+1a2mort2
+a2m1orv
+2amos
+amos3s
+2amot
+2amoz
+am12ri
+a1m
+am12r
+a1m
+am1s
+am1t
+am12z
+am12r
+a1m
+am1s
+am1p1la
+am1p2r
+1amput
+am1pu
+am1sk
+am1sp
+am1sr
+am1st
+am1t2r
+2amun
+a1mu
+a2m1u1ni
+amu2riz
+amu1ri
+amu1sl
+a2m1u2tas
+amu1ta
+a2m1j
+a1m
+am1g
+a1m
+am12l
+am1t
+am1z
+an1a2c
+a1na
+2anad
+a2n1a2dat
+ana1da
+a2n1a1du
+a2n1a1ga
+a2n1a1g
+an1a2gya
+anag2y
+a2n1ah
+2ana1i
+1a2nakr
+ana2lap
+ana1la
+1ana1l
+an1alk
+an1alm
+1a2na1l
+an1a2mo
+a2n1a1na
+1a2na1n
+an1ann
+an1a2n2y
+2anap
+ana2pa2
+a2n1ap2a.
+a2n1a1p
+a2n1a2p
+a2n1ap1po
+anapp2
+an1a2rab
+ana1ra
+an1a2r
+a2narc
+a2n1arr
+ana2s1z1e2
+anas2z
+ana2szn
+ana1s1z
+an2a2szin
+ana1s1zi
+an2a2s1z12
+ana2s1z
+an2a2s1z
+ana2t1e
+ana2t
+2anav
+a2n1a2va
+a2n1az
+a2n1g
+a1n
+a2n1l1mi
+a2n12lom
+an1lo
+a2n12p
+a2nsat
+an1sa
+2ant
+a2n11ta
+a2n1tk
+a2n1tr
+an1br
+an2c1l
+an1c
+an1ce2
+an2c12r.
+an1c
+an2c3hi
+anc2h
+an2c1ho
+anci2al
+an1ci
+anci1a
+an2c12
+an2csaj
+anc2s
+an1c1sa
+an2csa2r
+ancs1ell
+an1c1se
+ancs1emb
+an2cs1en
+ancs1e2p
+ancs1et
+an2cs1r
+an1c1s
+an2cs1ill
+an1c1si
+an2csiz
+an2cs12z
+an1c1s
+an2cs1or
+an1c1so
+an2c1s
+an1c1s2
+ancs1t
+an2csu2t
+an1c1su
+an2c1s1
+an2d1alk
+an1da
+anda1s
+and1atl
+and1e2le
+an1de
+and1elk
+an2d1e1l
+and1els
+an2derd
+an2d1es
+an2dl
+an1d
+an2dil
+an1di
+an2d1
+an2d12
+an2ds
+an1d
+an2dn
+an1d
+an2d
+an1dy
+an2d1z
+and2z
+a2n1eb
+a1ne
+an1edd
+an1e2g
+1a2nekd
+ane2la
+ane2l1
+ane2l1e2l
+ane1le
+ane2l1emb
+ane2ll
+ane1l
+ane2l
+2anem
+an1e1mu
+an1e2re
+an1ern
+an1err
+2ane1u
+2anev
+a2n1ex
+ane2z
+an1e2z.
+a2n1e1ze
+an1e1z
+an1ezt
+an1ezz
+a2n12k
+a1n
+a2n11le
+an12p
+a2n11ri
+a2n1rv
+a2n1tk
+a2n1tt
+a2n1vc
+a2n12vem
+an1ve
+an12ves
+a2n12vet
+a2n2vb
+an1v
+an2vn
+an2vt
+an2vv
+an1v1ha
+an2vi2g
+an1vi
+an1v1ke
+an1v1k
+a2n11v
+a2nvz
+anf2l12v
+an1f
+anf1l
+an1fl
+an1f2r
+an2g1a1da
+an1ga
+an2ga1l
+an2g1a2ra
+an2g1ass
+ang1a1zo
+an2g12c
+an1g
+an2g1ll
+ang2r1a2d
+ang1ra
+ang11ta
+an2g1tj
+an2g1tt
+an2g1ed
+an1ge
+an2g1eg
+an2g1elf
+an2g1elh
+an2g1elj
+an2g1ell
+an2g1eln
+an2g1e1l
+an2g1elt
+an2g1elv
+an2g1em
+ang1eng
+an2g1e2r
+ang1e1se
+ang11le
+an1g
+ang1lv
+an2g12ne
+an2g12r.
+ang11r
+an2g1s
+an2gi2m
+an1gi
+an2giz
+an2g
+an2g1os2z
+an1go
+an2g11ri
+an1g
+an2g1l
+an1g
+an2g1s
+an2g12
+ang1s
+angsze2r1elm
+angs2z
+ang1s1ze
+ang3szerel
+angsze1re
+an2g
+an2g
+an1gye2
+ang2y
+angy1el
+an2gyk
+an1gy
+an1i1de
+a1ni
+ani2g
+a2n1i1ga
+a2n1i1g
+a2n1i2ko
+a2n1ind
+a2n1inf
+2anip
+a2n1i2pa
+a2n1i2r
+a2n1i1ro
+an1i2s.
+a2n1i1si
+a2n1isk
+a2n1ism
+a2ni1ta
+an1itt
+a2n1g
+a1n
+a2n1j
+2anv
+a2n1z
+ank1abl
+an1ka
+an2kaj
+an2k1a2k
+ank1a1le
+an2k1a2n
+ank1arc
+ank1a1ri
+an2k1atl
+an2k1a2u
+an2kaz
+an2k1l
+an1k
+an2k1e2g
+an1ke
+an2k1ek
+an2k1e2l
+an2k1e2m
+an2k1e2reit
+anke1re
+ankere1i
+an2k1erj
+an2k1es
+ank1r1de
+an1k
+ank1rem
+ank1re
+an2kr1te
+an2k1r1t
+an2k1i2d
+an1ki
+an2k1i2p
+an1k1lu
+an2k1old
+an1ko
+ank1oszt
+ankos2z
+an2k12rmb
+an1k
+ank1r
+an2ks
+an2k12v
+an2kr
+an1k
+ank1t2
+an2k1
+an2n2e.
+an1ne
+an3nye
+an2n2y
+an3nyo
+ano1g
+a1no
+a2n1oj
+a2n1ok1ta
+a2n1old
+1a2no1m
+2anor
+a2n1o2ro
+a2n1orr
+a2n1or1s2
+2anos
+a2n1ott
+a2ndd
+a1n
+a2n1do
+an1g2
+a2n11ni
+a2n11no
+a2n12r
+an11ri
+a2n1l
+a1n
+a2n1n
+a2n1r
+a2n1s
+a2n12t
+an1pl
+an1pr
+an2s1e2l
+an1se
+an1s1ka
+an2s
+an1s2p
+ans3s1ze
+ans2s2z
+an1s1ta
+an2szal
+ans2z
+an1s1za
+an2sz12b
+an1s1z
+an2sz12h
+an2szr
+ansz1es
+an1s1ze
+an2szl
+an1s1z
+an2sz1n
+an2sz12p
+an2szil
+an1s1zi
+an2szin
+an2s1z
+ansz1t2
+ansz12l
+an1s1z
+an2t1abl
+an1ta
+ant1a1ga
+an2t1eg
+an1te
+an2t1e2se
+ant1es2z
+anti1llt
+an1ti
+antil1l
+an2t1ing
+an1t2re
+a2n1ud
+a1nu
+a2n1ug
+a2n1uj
+2anuk
+a2n1u2r
+anu2s1zi
+anus2z
+a2n1u2t
+a2n1g
+a1n
+an12g
+a1n
+an12l
+an12z
+an1r
+a1n
+an1z
+a2ny1a2d
+an2y
+a1nya
+anya2g12r.
+a2nyagr
+anya1g
+anya2g1rr
+1anyagb
+1a2nya1g
+anyag1g
+1anyagh
+1anyagk
+1a2nyagm
+1anyagr
+1anyagt
+1a2nya1g
+a2nyakad
+anya1ka
+a2ny1a2kas
+a2ny1alk
+a2ny1all
+a2ny1ass
+a2ny1aszt
+anyas2z
+a2ny1a2tom
+anya1to
+a2nyaz
+1a2nydt
+a1ny
+1a2nyk
+any1
+any11lo
+a2ny11r
+a2ny1rb
+a2ny1rf
+a2ny1rk
+a2ny1rn
+a2ny12ro
+a2ny1rr
+any12s2z
+any1d
+2a1nye
+a2ny1e2c
+a2ny1ed
+a2nyeg
+any1e1g
+any1eg2y
+a2ny1e2k
+a2nye1la
+anye2le1me
+anye1le
+any1elev
+a2ny1ell
+a2ny1e1lo
+a2ny1em
+a2ny1en
+any1e2r2e.
+anye1re
+any1e2re1i
+any1e2ret
+any1e2rn
+anye1r
+any1e2rr
+any1e2rt
+any1e2rv
+a2ny1e2rm
+anye1r
+any1e2rr
+any1e2rt
+a2ny1g
+a1ny
+a2ny1he
+a2ny12j
+a2ny1k
+any1lv
+a2ny12r.
+a2ny1rb
+a2ny1rc
+a2ny1r1d2
+a2ny11re
+a2ny1rg
+a2ny1rh
+a2ny12ri
+a2ny1rk
+a2ny1rm
+a2ny1rn
+a2ny1r
+a2ny1rp
+a2ny1rr
+a2ny1rs
+a2ny1r1te
+a2nyr1t
+a2ny1r1t
+a2ny1rv
+a2ny1ve
+a2ny1v
+anyha2j1n
+any1ha
+anyha1j
+anyha2j12r
+anyhala2d
+anyha1la
+anyha2l1a1da
+2a1nyi
+anyigaz1
+a2ny1i2ga
+any1ing
+a2ny1i1o
+2a1ny
+2a1nyo
+any1old
+a2ny1o2r
+any11r
+a1ny
+any1k
+a1ny
+any12r
+any1z
+a2ny12
+any1s
+anyt2
+any1tr
+a2nyur
+a1nyu
+2a1ny
+2a1ny
+any1l
+an2z1a
+a1o
+ao2z
+ao1
+ao2be
+ao2c2s
+ao2da
+ao2d
+ao2ka
+ao2k
+ao2la
+aolaja2d
+aola1ja
+aola2j1a1da
+ao2mo
+ao2p
+ao2pe
+ao2ra
+ao2ro
+ao2so
+ao2ut
+ao1u
+ao2ve
+ao2vi
+ao2xi
+a1
+a2r
+a1
+a2bar
+a1ba
+a21b
+a21bi
+a21bo
+a2ce
+a2d
+a21di
+a21f
+a21fe
+a21fo
+a21f
+a21f
+a21h
+a21hi
+a21h
+a2il
+a1i
+a2is
+a2i2v
+a21k
+a21ke
+a1k2r
+a21ku
+a2la
+a21le
+a21l
+a21li
+a2lo
+a2lu
+a2mag
+a1ma
+a2mar
+a2mas2
+a21me
+a21mi
+a21mo
+a21n
+a21n
+a21n
+a2r
+a21r
+a2ri
+a21s
+a21s
+a21ta
+a21te
+a21t
+a2vo
+a2v
+a1
+a2b
+a2c2s
+a2d
+a2ko
+a2k
+a2le
+a2l
+a2l
+a2n
+a2r
+a2ve
+a2vi
+a2v
+a2z
+a1
+a2re
+a2r
+a2ri
+a2r
+a2r
+a2se
+a2s
+a2s2z
+apa2cs1a2v
+a1pa
+apac2s
+apa1c1sa
+ap2a2c1si
+a2p1a2da
+a2p1a1ga
+a2p1a1j
+a2p1akc
+2apal
+a2pa2lag
+apa1la
+apa2lak
+a2p1alb
+a2p1alj
+a2p1alt
+ap2a2mas
+apa1ma
+ap1ant
+2apap
+apa2pn
+apa1p
+ap1a2rn
+apa1r
+1apa1s
+a2p1asp
+apa2tad
+apa1ta
+apa2t1a1la
+ap2ata2n
+apa2t1as
+ap2a2tl
+apa1t
+apa2tem
+apa1te
+apa2t1
+ap1a2ut
+apa1u
+2apav
+a2pa1va
+ap1a2zo
+a2p1j
+a1p
+a2p1llap
+apl1la
+a2p1l1l
+a2p1l1lo
+apn1n
+a2p12rad
+ap1ra
+ap12ra1i
+a2p12rak
+ap12ram
+a2p12ras
+ap12rat
+a2p2r1
+ap1r
+ap2rh
+ap2rn
+ap2rr
+ap2rv
+apr1ba2
+a2p12r1e2
+a2p12r
+a2p1rf
+ap1r1ka
+ap1r1ko
+a2p1rn2y
+ap1r1t
+a2p11ru
+a2p12r
+aps1k2
+1a2ptfal1va
+apt1fa
+1a2ptfalvh
+aptfal1v
+1a2ptfalvn
+1a2ptfalvr
+1a2ptfalvt
+1a2ptfal1vi
+ap2tr
+ap1t
+1a2p1u
+ap1bl
+ap1dr
+ap1e2d
+a1pe
+a2p1e2g
+ap1e2l1a
+ap1elb
+ap1e2l
+a2p1elf
+ap1elg
+a2p1elh
+ap1elj
+ap1elk
+a2pell
+ap1elm
+ap1eln
+ap1e1lo
+ap1e2l
+ap1elr
+a2p1elt
+a2p1elv
+ape2m
+ap1emb
+ap1e1me
+ap1e1ne
+ap1e1ni
+ap1e2n2y
+a3p2ernyc
+apern2y
+aper1ny
+ap1e2r
+ape2s
+ap1e1se
+ap1e1s
+ap1e1s
+a2p1e2v
+a2p12he
+a1p
+a2p11je2
+a2p12le
+a2p1ll
+a2p1lm
+a2p12ne
+a2p11p
+a2p12r.
+ap1szl
+aps2z
+a2p11te
+a2p11ve
+ap1fl
+ap1f2r
+ap1gr
+a2p1i1de
+a1pi
+a2pi1d
+apigaz1
+a2p1i2ga
+ap1i2ko
+ap1ikr
+a2p1i2nr
+api1n
+a2p1ind
+a2p1inj
+a2p1ins
+a2p1i2r
+a2p1irk
+a2p1ism
+a2p1ist
+a2p1g
+a1p
+a2p1n
+a2p1t
+ap1v
+a2p1z
+ap1kl
+ap1kr
+ap1kv
+ap2laz
+ap1la
+ap2ld
+ap1l
+apmeg1
+ap1me
+ap1m1
+apmt2
+a2p1ob
+a1po
+ap1o2laj
+apo1la
+a2p1oltr
+apol1t
+a2p1opc
+a2p1o2pe
+a2p1op1t2
+apo2rad
+apo1ra
+ap1or1c
+ap1or1s
+apor2t12
+apo2t1l
+apo1t
+a2p1ov
+1a2p1k
+a1p
+ap11lo
+ap11ri
+a2p1b
+a1p
+ap1l
+ap1n
+ap1rv
+a2p1s
+ap1v
+a2p12z
+ap12r
+a1p
+1appa1r
+ap1pa
+ap2p1rn
+ap1p
+ap1ph
+app1ing
+ap1pi
+ap1p1la
+ap1p1ri
+ap1p1r
+ap1p2s
+ap2res
+ap1re
+a1p2rm
+ap1r
+a1p2rm
+ap1r
+2ap1ro
+ap2roc
+a1p2rod
+ap2rog
+1aprd
+ap1r
+ap2s1i2kon
+ap1si
+apsi1ko
+ap2sz
+ap1s
+aps1ork
+ap1so
+apsz1ert
+aps2z
+ap1s1ze
+ap1szf
+apsz2n12s
+ap1s1z
+apsz1n
+apsz2t
+aptra2d
+ap1t
+apt1ra
+apt2r1a1da
+ap1t2r
+apu12
+a1pu
+a2p1udv
+apu1p2
+apus3s2
+a2p1u2tas
+apu1ta
+a2p1utn
+apu1t
+a2putc
+a2p1j
+a1p
+a2p1d
+a1p
+a2p1g
+a2p12l
+a2p1n
+a2p1t
+a2p1v
+a2p1z
+ap1r
+a1p
+ap1wh
+ara2b1r
+a1ra
+ara1b
+ara2b12
+a2r1ab1la
+2arad
+ar1a2da1ta
+ara1da
+ar1a2da1to
+ar1a2datr
+ara12
+arane2kest
+ara2ne
+ara12nekes
+arane1ke
+2arag
+ara2g1e
+2araj
+a2r1ajk1r
+araj1k
+2arak
+a2r1a2kol
+ara1ko
+ara2kh
+ara1k
+ara2k1i
+ara2ks
+ara2kt
+a2r1ak2t.
+a2r1alk
+a2r1alm
+a2r1a1na
+1a2rann
+arany1a2g
+ara2nyag
+aran2y
+ara1nya
+ara2nyal
+1a2ranyb
+1a2ranyh
+ar2a2ny
+1a2ranyk
+1a2ranyn
+1a2ranyr
+1a2rany1s
+ar1arc
+1aras2z.
+aras2z
+arasz2t1e
+ar1a1s1z
+ara2tal
+ara1ta
+ara2tel
+ara1te
+ar2a2tin
+ara1ti
+ara2t12
+ara1t2
+ara2tr
+ar1aul
+ara1u
+aravas2z1
+ara1va
+1a2raw
+ara2zon
+ara1zo
+2arc
+a1r
+a2r12c.
+a2r12c1si
+arc2s
+a2rcsom
+ar1c1so
+ardi212
+ar1di
+ardi1
+a2r12g.
+a2r12g2a.
+ar1ga
+a2r12ga1i
+a2r12gak
+a2rga2n
+a2r12gat
+ar2gb
+ar1g
+ar2gh
+ar2gn
+ar2gr
+ar2gt
+ar2gv
+a2r1gb
+a2r11ge
+a2r12g
+a2r1gf
+a2r1gg
+a2r1gh
+a2r12gi
+a2r1gk
+a2r1gl
+ar2gon
+ar1go
+a2r1gr
+a2r1gs
+a2r1gt
+a2r12guk
+ar1gu
+a2r12gu2n
+a2r12g
+a2r12g2y
+ar1lc
+a2r1l1l
+a2r1l1lo
+2arm
+ar2m1e2
+ar2nyad
+arn2y
+ar1nya
+ar2nye
+arnyigaz1
+arnyi2g
+ar1nyi
+ar2ny1i2ga
+a2r12rak
+ar1ra
+a2r12r
+a2r1rk
+a2r1rr
+a2r12ru
+a2r11r
+ar1rv
+ar2s1ze
+ars2z
+a2r12szo1ki2
+ar1s1zo
+ar2tal
+ar1ta
+ar2t1
+ar2zsl
+ar1z4s
+arz2s
+ar1z1si2
+arzs3z
+ar2c1a2d
+ar1ca
+arc1ag2y
+arc1a1la
+arca2n
+arc1an2y
+ar2car
+ar2cat
+ar2ceg
+ar1ce
+ar2c1es
+ar2cev
+ar2c12h
+ar1c
+arc12l.
+arc1lb
+arc1ll
+arc1lt2
+ar2c12n
+ar2cs
+1ar1c1h
+arc2h
+ar2c1int
+ar1ci
+ar2ciz
+arcols1s
+ar1co
+arco1l
+ar2c
+ar2c
+arcs1a1la
+arc2s
+ar1c1sa
+ar2csl
+ar1c1s
+arc3se1re
+ar1c1se
+ar2csip
+ar1c1si
+ar2c3sor
+ar1c1so
+ar2c
+ar2c
+ar2c2z
+ard1a1c
+ar1da
+ar2d1alj
+ar2d1ll
+ar1d
+arde2l
+ar1de
+ard1e1le
+ard1e1l
+ard1elt
+ar2d1e2m
+ar2d12l
+ar1d
+ar2d1i1na
+ar1di
+ar2dor
+ar1do
+ar2d
+ar2d1ur
+ar1du
+ar2d
+a2r1e2d2z
+a1re
+ar1egs
+are1g
+a2r1e2g2y
+are2i
+areil2
+a2r1e2le
+ar1elh
+ar1elm
+ar1eln
+ar1elr
+ar1elt
+ar1e1l
+a2r1e1l
+ar1elv
+a2r1emb
+ar1e2mel
+are1me
+ar1e2ms
+are1m
+a2re1mu
+a2r1e2r
+ar1e2se
+ar1e2s
+a2r1eszek
+ares2z
+are1s1ze
+a2r1e1s1z
+a2r1e1s1z
+ar1e1t
+ar1e2ve
+ar1e2v
+ar12
+a1r
+ar12g.
+ar12ge
+ar2k1a2l
+ar1ka
+ar2kek
+ar1ke
+ar12l.
+ar1lt
+2arm
+ar2nek
+ar1ne
+ar1p
+a2r12p
+a2r12ri
+a2r11r
+a2r1r1t
+ar1szj
+ars2z
+ar1sz2t
+a2r1sz1t
+ar1t1ra
+ar1f2r
+ar1g1ha
+2ar2i.
+a1ri
+2ari1a
+ar1i2de
+a2ri1d
+a2r1i2ga
+a2r1i2g
+a2r1i2md
+ari1m
+ar1i2mi
+a2r1i2n2a.
+ari1na
+a2r1i2na1k
+a2r1i2nas
+a2r1i2nat
+a2r1i2nb
+ari1n
+a2r1i2nh
+a2r1i2nn
+a2r1i2nr
+a2r1i2nt
+a2r1i2nv
+a2r1in1g
+ari2nit
+ari1ni
+arink2
+a2r1in1t
+ari2n
+a2r1i2o1no
+ari1o
+a2r1i2n
+ari1
+2arip
+a2r1isp
+a2r1is1te
+ari1szf
+aris2z
+2ariz
+a2rizm2a.
+ariz1ma
+ari2zom
+ari1zo
+ar12t
+a1r
+ar2j1z
+ar1j
+ar2j1er
+ar1je
+arkas3s
+ar1ka
+ark2p
+ar1k
+ark2s
+ar2k1eg
+ar1ke
+ark1e1l
+ar2kj
+ar1k
+ar2k1p
+ar2k1rd
+ark1i2n.
+ar1ki
+ar2k1i2ont
+arki1o
+ar2kiz
+ar2k1orm
+ar1ko
+ar2kud
+ar1ku
+ar2k1u2s
+ar2les
+ar1le
+ar2m1a2g2y
+ar1ma
+arma2te
+arm1ll
+ar1m
+arme2s
+ar1me
+arm1ing
+ar1mi
+ar2m1is
+ar2m1os2z
+ar1mo
+ar2m1
+ar2m
+arnis3s
+ar1ni
+aro2k12
+a1ro
+aro2k1e2
+aro2kin
+aro1ki
+a2r1ol1da
+1a2romt
+aro1m
+aro2mis
+aro1mi
+a2r1opt
+a2r1o2r
+a2r1o1vi
+ar1p
+a1r
+a2r12rak
+ar1ra
+ar2s3zr
+ar21s1z
+ars2z
+ar2vr
+ar1v
+a2r12b
+a1r
+a2r1k
+a2r12l
+ar1ng
+a2r1r
+a2r1s
+a2r12z
+ar1r
+a1r
+ar1s
+ar1pl
+ar1pr
+ar1s1ka
+ar1s1r
+ar1s1ta
+ar1s1to
+ar1st2r
+2ar2t.
+art1abl
+ar1ta
+ar2t1a2lap
+arta1la
+arta2n12s
+arta1n
+art1aszt
+artas2z
+ar2t1a2u
+ar2t1l1la
+ar1t
+ar2t1e2g
+ar1te
+art1e2l
+art1emb
+art1e2re1i
+arte1re
+ar2tg
+ar1t
+ar2t12l
+ar2t1rp
+ar2t1i2n2a.
+ar1ti
+arti1na
+ar2t1i2nt
+arti1n
+ar2t1i2nv
+art1orz
+ar1to
+ar2t12v
+ar1t
+ar2tug
+ar1tu
+ar2t1ut
+artvis1s
+art1vi
+ar1t2y2
+a2r1u1ni
+a1ru
+aru2tas
+aru1ta
+a2r1j
+a1r
+a2r1s2z
+ar1tj
+ar1tr
+a2r1t
+a1r
+ar1z
+ar12z
+a1r
+ar2va1la
+ar1va
+arvas1s
+arv1g2y
+ar1v
+ar2v1rh
+ar2v12ri
+2asabl
+a1sa
+a2s1abr
+a2sadag
+asa1da
+a2s1a2g
+2asaj
+a2s1a2kar
+asa1ka
+2asal
+a2s1alab
+asa1la
+a2s1a2lap
+a2s1alf
+a2s1aljn
+asal1j
+a2s1al1ji
+a2s1alk
+a2s1alm
+a2s1a1n
+a2s1ant
+a2s1a2n2y
+2asap
+2asar
+as1aran
+asa1ra
+a2s1a2r
+asa2t12
+a2s1a2t2y
+2asav
+asa2vo
+a2s12c
+a1s
+as2g1ikr
+as1gi
+as1ll
+2asm
+a2s1rnak
+asr1na
+a2s12ro
+a2s1rr
+a2s1rt2
+a2s12ru
+ass1s
+as1s1v
+a2s1th
+2as1to
+2asv
+as1bl
+as1d2r
+a2s1e2d
+a1se
+as1e1ge
+a2s1e2g2y
+ase2k
+as1e1ke
+as1e1k
+as1ell
+a2s1emb
+a2s1e2n
+a2serd
+as1e2r
+a2s1e2r
+a2s1es
+ase2t
+as1e1ti
+a2s1ez
+a2s11he
+a1s
+a2s11ke
+a2s12l
+2asm
+a2s1p
+2asr
+a2s12r.
+a2s1rb
+a2s1rc
+a2s1rd
+as1s2
+a2s1tv
+as12ve
+as1fr
+as1gl
+as1gr
+as1i1de
+a1si
+as1i1do
+a2s1i2ga
+a2s1i2g
+a2s1inj
+a2s1i2o
+asi2rn
+asi1r
+2asiv
+a2s1i1z
+as1i2zo
+a2s1j
+a1s
+2ask
+2asn
+2asr
+asr1ta2
+asr2tal
+a2s12v
+a2s11z
+askala2p1c2s.
+as1ka
+aska1la
+askala1p
+askalapc2s
+2as1k
+as1kl
+asko2s1a2r
+as1ko
+asko1sa
+asko2s1
+as2koz
+as1k2r
+as2lg
+as1l
+as2luk
+as1lu
+as2mr
+as1m
+2asodr
+a1so
+a2s1of
+a2s1ok1ke
+a2s1okl
+a2s1o2kos
+aso1ko
+2asoks
+a2s1ok1ta
+aso2n
+2asor
+a2s1ord
+a2s1orm
+a2s1os2z
+a2s1ox
+as1p2
+a1s
+as12r
+a2s12k
+a1s
+a2s12l
+a2s1rd
+a2s1rv
+a2s1s
+a2s12ve
+as1r
+a1s
+as1pl
+as2pot
+as1po
+asp2r
+a1s2pu
+as1s2p
+as3sza1b
+as2s2z
+as1s1za
+assz2ve
+as1s1z
+assz1v2e.
+assz1vek
+assz1v1ne
+1asszoc
+as1s1zo
+1asszon2y
+as3s1z
+as3s1z
+2as1ta
+a1s2tand
+2as1t
+a1s2td
+2as1ti
+astil2
+as2tim
+2as1t
+2as1to
+as2top
+2astr
+as1trag
+ast1ra
+as1trav
+a1st2ru
+2as1t
+a2s1ud
+a1su
+2asug
+a2s1uj
+2asul2y
+asu2r
+a2s1u1ra
+a2s1urn
+a2s1u2s2z
+a2s1u2tak
+asu1ta
+a2s1u2tas
+a2s1u2t
+a2s1u2tu
+a2s12t
+a1s
+as1t1a2
+a2s1d
+a1s
+a2s12l
+a2s1st
+a2s1z
+as1z
+a1s
+2aszab
+as2z
+a1s1za
+a2sz1a2d
+2aszak
+a2s2z1akc
+asza2k1e
+a2sz1akt
+asza2k12
+a2sz1alk
+1asza1l
+a2sz1asp
+asz1ass
+asza2t1a2
+asza2t1e
+a2szath
+a2sza1ti
+2aszav
+a2sz12g.
+a1s1z
+asz12ga
+asz12g
+asz1gb
+asz1gg
+asz12gi
+asz1gk
+asz12go
+asz1gr
+asz1gt
+a2szlc
+a2szlm
+2aszm
+asz2ra1da
+asz1ra
+a2szram
+a2szrp
+a2sz1ta
+a2s2zth
+a2sz1tl
+a2sz12to
+a2s2z1ts
+2aszed
+a1s1ze
+2aszeg
+as2ze2g2s2z1
+asze1g
+a2sz1eh
+2aszek
+2aszel
+asz1e2lem
+asze1le
+asz1elj
+2aszemc
+2asze1me
+2asze1m
+2a3szem1p2
+a2sze1mu
+2as2ze1m
+2asze1m
+2aszen
+a2sz1eng
+a2sz1e2pi
+2asze2r.
+2asze1re
+a2sze2redm
+2asze1r
+2aszer1k2
+2aszern
+a2sz1e1ro
+a2s2ze2r
+2aszerr
+2a3szer1s
+2aszert
+2a3szerv
+2a3szerz
+asze2s
+a2sz1e1se
+asz1est
+2aszez
+2aszk
+a1s1z
+asz2k1el
+asz1ke
+asz12let
+asz1le
+asz1ls
+as2z1l
+asz2n1g
+asz1n
+aszn1n
+a2sz12re
+a2sz11r
+2aszt
+a2sz1ill
+a1s1zi
+2aszin
+a2sz1inf
+a2sz1ing
+2aszir
+a2sz1ism
+asz1ist2
+2asziv
+a2sz1iz
+2a1s1z
+a2sz1r
+a2sz12vi
+asz2karc
+asz1ka
+asz2k1p
+asz1k
+asz2kell
+asz1ke
+asz2kes
+2aszob
+a1s1zo
+2aszoc
+2a3szof
+aszon1n
+aszo2n1o
+a2sz1orr
+a2sz1ors
+a2s2z1os2z
+1asz1a
+a1s1z
+asz12d
+2aszt
+2aszk
+a1s1z
+asz1lt
+a2sz1n
+2aszr
+asz1ss
+a2szt
+2aszv
+2a1s1z
+aszl12
+a3sz1l
+as1z3su
+asz2s
+asz2tab
+asz1ta
+1asztalul
+aszta1lu
+asz2t1a1po
+asz2tc
+asz1t
+asz2tll
+asz2t1emb
+asz1te
+asz2t1ne
+asz1t
+asz2t1s
+asz2t1ing
+asz1ti
+asz2t1v
+asz1t
+asz2t1olt
+asz1to
+asz2t1orr
+asz2tors2
+as2z2t1os2z
+asz2tv
+asz1t
+asz2ts
+asz1t
+asz2t1l
+asz1t
+asztvz1
+aszt1v
+2aszur
+a1s1zu
+1a2szs
+a1s1z
+a2sz1tr
+2a1s1z
+asz2g
+a2sz1gg
+aszlt2t1e2kh
+asz1l
+aszlt1te
+aszltte1k
+a2sz12z
+2a1s1z
+asz2vit
+asz1vi
+asz1z
+2atab
+a1ta
+at1ab1la
+a2t1a2c
+ata2dat
+ata1da
+a2t1a2d
+2atag
+a2t1a1gya
+atag2y
+a2tajn
+ata1j
+2atak
+a2t1aka1ra
+ata1ka
+ata2k2r
+ata1k
+ata2ke2l
+ata1ke
+ata2k12pes
+at2ak1pe
+ata1k
+ata2k12v
+ata1k
+a2t1ak1tu
+a2t1a2la2g1
+ata1la
+ata2la2p.
+ata2lapb
+ata2la1p
+ata2lapj
+ata2la1po
+ata2lap1p
+ata2lapr
+ata2la1p
+ata2lat
+a2t1aleg
+ata1le
+at2a2lik
+ata1li
+a2t1al1le
+a2t1alms
+atal1m
+2atan
+a2t1a2nal
+ata1na
+ata2n1cs1be
+ata1n
+atanc2s
+ata2n
+a2t1a2nyag
+atan2y
+ata1nya
+at1a2nys
+ata1ny
+2atap
+a2t1app
+ata2puk
+ata1pu
+a2ta2pun
+2atar
+a2t1a2rab
+ata1ra
+ata2ran
+a2t1a2rn
+ata1r
+ata1s1pe
+ata1st2
+atau2r
+ata1u
+a2t1a2ut
+a2t1a1zo
+2atb
+a1t
+a2t1br
+2atg
+a2t12g.
+a2t12ga
+a2t1gr
+2atj
+2atl
+a2t1l1l
+a2t1l1l
+a2t1lm
+2atm
+at2nal
+at1na
+a2t12pol
+at1po
+2atr
+at2ra1da
+at1ra
+at2ra1do
+at2ramh
+a2tramk
+at2ramn
+at2r1az
+at2rt
+at1r
+at2ris
+at1ri
+a2t1rkr
+atr1k2
+atr1k
+atrs2g
+atr1s
+atr2s11g
+a2t1rts
+atr1t
+2ats
+at2s12g
+at1s
+at2s2z
+at2tal
+at1ta
+a1t1t2
+at2tr
+a2t1tb
+a2t1tf
+a2t1th
+a2t11ti
+a2t1tj
+a2t1tk
+a2t1tl
+a2t1tr
+a2t1ts
+a2t1tt
+a2t11tu
+a2t1tv
+2atv
+at1bl
+at1br
+at1cl
+at1dr
+at1e2g
+a1te
+ate2jel
+ate1je
+atek2r
+ate1k
+ate2k1re
+ate2k
+a2t1e2l1a
+a2t1elb
+at1elc
+a2t1eld
+at1e2led
+ate1le
+at1eleg
+at1e2lem
+at1e2l1en
+a2t1elf
+a2t1elh
+at1el1j
+at1el1k
+at1el1k
+a2t1elm
+at1eln
+a2t1e2lo
+at1e2ln
+ate1l
+ate2lt
+a2t1elr
+a2t1els2
+at1el1ta
+at1el1t
+at1el1t
+at1el1t
+a2t1e1lu
+a2t1e1l
+a2t1elv
+a2t1elz
+2atema1la
+ate1ma
+2atemalb
+atema1l
+2atemal1
+2atemal1i
+2atemal1na2
+2atemalt
+2atemalv
+at1e2mel
+ate1me
+a2t1e1m
+a2t1eml
+a2t1e1m
+a2t1enc
+a2t1e1ne
+at1e1pi
+at1e1po
+a2t1er1d2
+at1e2rec
+ate1re
+ater1mo1
+a2t1e2r
+a2t1e2se
+a2t1e1s
+a2tesk
+ates2t1
+ates2t2
+at1eszm
+ates2z
+at1e1s1z
+ate2tol
+ate1to
+a2t1e2z
+2atg
+a1t
+a2t2get
+at1ge
+a2t11he
+at2k1a2l
+at1ka
+at2ke2
+a2t1k2e.
+atk1el
+2atl
+a2t12le
+a2t12l
+a2t1lm
+a2t1lv
+2atm
+at2ne
+atn1er
+a2t1ps
+2atr
+at2r
+a2t1rdek
+atr1de
+a2t1rin
+at1ri
+atr1k2p1e2k
+atr1k
+atrk1pe
+a2t1rl
+a2t1rm
+a2t1rtel
+atr1te
+a2t1rvek
+atr1ve
+a2t1rz
+at11s1za
+ats2z
+at1szl
+2att
+at2tt
+at1t
+a2t1tv
+at1fj
+at1fl
+at1fr
+at1gl
+at1gr
+a1t2hus
+at1hu
+2at2i.
+a1ti
+a2t1iat
+ati1a
+a2t1i2de
+a2t1i1do
+ati2g
+a2t1i1ge
+a2t1i1g
+a2t1ig2y
+a2till
+at1il1le
+at1i2m
+at2i3m1d
+at1i2md
+at1i2mi
+a2t1imp
+2atin
+a2t1in2g.
+a2t1in1ga
+a2t1ingb
+a2t1in1ge
+ati1n2
+ati2n1r
+at1in1t
+at1in1to
+2atip
+a2t1i2pa
+2atir
+a2t1i1r
+a2t1i1ro
+2atis
+a2t1isk
+a2t1ism
+ati2s2z
+a2t1i1s1zo
+2atit
+a2t1i2ta
+a2t1i1z
+a2t1izg
+a2t1iz1mo
+a2t1i1zo
+a2t1g
+a1t
+a2t1j
+2atp
+2atr
+a2t12t
+at12vek
+at1ve
+at2v1e2l
+at12vet
+at2vt
+at1v
+a2t1z
+2at1ki
+2at1kl
+2at1ko
+2at1k
+2at1ku
+at1kv
+ato1g
+a1to
+at1ojt
+ato1ka2
+a2t1o2k1al
+ato2koss
+ato1ko
+a2t1o2koz
+a2t1ok1ta
+a2t1o2ku
+at1ol1d
+a2t1ol1d
+ato2m1
+1a2tom1be
+atom1b2
+ato2m1e
+1a2tomj
+a2toml
+1a2tomok
+ato1mo
+1a2tomos
+1a2tom1s
+1a2to1m
+a2t1opc
+a2t1o2pe
+a2t1op1t2
+2ator
+ato2rl
+ato1r
+a2t1ord2
+a2t1or1g2
+ato2r
+a2t1orv
+a2t1or1z
+atos3s
+ato1szf
+atos2z
+a2t1oszl
+at2dl
+a1t
+at1d
+at1p2
+a2t12rk
+at1r
+at2rn
+at2ri1
+at1ri
+at2s1i2
+at1s1pe
+at1s1t
+at1s2z
+at2s3zr
+at21s1z
+at2s3ze1n
+at2szen
+at1s1ze
+at1tr
+a2t12ko
+a1t
+at2l
+a2t11le
+a2t11l
+a2t11l
+at12n
+atn2k1a
+at12rm
+at1r
+a2t1s
+a2t1t
+at2v2i.
+at1vi
+a2t12z
+at2ra
+a1t
+a2t1rl
+a2t12s
+atpen1
+at1pe
+at1pl
+at1pr
+at1ps
+atrac1c
+at1ra
+a1t2rad
+2atraj
+2atrak
+at2ram1b2
+a1trap
+a1tra1u
+a1t2rav
+2at1r
+a1t2rf
+at2rn
+atr2szel
+atrs2z
+atr1s1ze
+a1t2ril
+at1ri
+at2roj
+at1ro
+a1t2rg
+at1r
+2atrn
+a1t2r
+at2sn
+at1s
+at1sk
+at1sl
+at1sp
+at1st
+at1sv
+at3sz2m1
+ats2z
+at1s1z
+atszraz1
+atsz1ra
+atszer2s
+at1s1ze
+atsze1r
+atsze2r1s1z
+ats2zers2z
+atsze2r1szh
+1att2akok
+at1ta
+atta1ko
+at2t1e2g
+at1te
+at2tez
+at1t2re
+2atud
+a1tu
+a2t1udv
+a2t1ug
+2atul
+a2t1und
+a2tu1ni
+2atur
+at1u1t
+2atl
+a1t
+at12s2z
+a2t1g
+a1t
+2atk
+at12l
+at1lt
+2atn
+a2t1st
+a2t12v
+2atz
+at1zem
+at1ze
+at1r2i.
+a1t
+at1ri
+at1rl
+2atz
+a1u
+au2b1in
+au1bi
+au2bor
+au1bo
+au2de
+au2ga
+au2go
+1a2ukc
+aul2l
+aul2t1a
+aul2ti
+au2ni1
+au1ni
+au2rad
+au1ra
+au2r1ikr
+au1ri
+au2r
+au2s1z1e
+aus2z
+au2ta2d.
+au1ta
+au2ta1da
+au2tal
+au2tam
+au2tas
+au2tat
+2a3u1t
+au2tl
+1a2uton
+au1to
+1a2utb
+au1t
+a2utdd
+1a2ut1
+1a2uth
+1a2utm
+1a2utn
+1a2utr
+1a2uts
+1a2utt
+1a2utv
+a2utr
+a2utt
+au2tun2k.
+au1tu
+au2tun1ka
+au2z
+au2z2s
+au2z1
+a1
+a2j
+a2jo
+a2r
+a2r1i
+a2s2z
+a2ti
+a2to
+a1
+a2d
+a2d
+a2ge
+a2g2y
+a2le
+a2l
+a2li
+a2l
+a2l
+a2l
+a2n
+a2re
+a2r
+a2r
+a2r
+a2s2z
+a2te
+a2t
+a2ti
+a2ve
+a2v
+a2ze2m.
+a1ze
+a2zemb
+a2zemen
+aze1me
+a2zemet
+a2ze1m
+a2zemh
+a2zemm
+a2zemn
+a2zemr
+a2zen
+a2z
+a1
+a2ri
+a2r
+a2ze
+a2z
+a2zi
+a2z
+a2z
+2avad
+a1va
+2avak
+a2v1ak1ti
+avak1t2
+a2v1anh
+a2v1a2nya
+avan2y
+a2vanz
+ava2ra2c
+ava1ra
+av2a2r1ag
+ava2r1e2
+ava2rk
+ava1r
+ava2s1ze
+avas2z
+av2a2s1z
+1a2va1t
+1a2va1t
+2avd
+a1v
+av2na2n
+av1na
+2avr
+av2r1a2l
+av1ra
+av2ri2a.
+av1ri
+avri1a
+av2ria1i
+a2v12ri1
+a2v11ta2
+a2v1tt
+av2zal
+av1za
+av1bl
+av1e2le
+a1ve
+av1elv
+2aves
+av1est2
+2avet
+2avez
+avi2c1se
+a1vi
+avic2s
+av1ing
+av1kr
+a2v1old
+a1vo
+av1ol1t
+a2v1ox
+a2v1m
+a1v
+a2v1s
+av1s
+a1v
+av1z
+av1pr
+av1sp
+av1st
+a2v1ut
+a1vu
+av12l
+a1v
+av1r
+av12z
+a2wag
+a1wa
+awat1t2
+awat2t1r
+aw2hi
+awhis1ky2
+awhiskyk2
+a2x1ab
+a1xa
+a2x1ad
+a2x1ak
+a2x1al
+a2x1an
+a2x1av
+ax1bl
+ax1eg
+a1xe
+ax1el
+ax1inf
+a1xi
+ax1ing
+ax1int
+axi2r
+axi1
+axi2se2
+ax1r
+a1x
+ax1s
+a1x
+ax1z
+ax1pr
+a2x1ut
+a1xu
+ax1j
+a1x
+ax1z
+a1x
+ax1r
+a1x
+a1y2e.
+a1yed
+a1ye1i
+a1yek
+ay1e2l
+a1yen
+a1yes
+ayet2
+ay1fl
+a1y2i.
+ay1il
+ay1ing
+a1yit
+aza2c2h
+a1za
+aza2cik
+aza1ci
+azai2ko
+aza1i
+azal2t1a
+aza1p2
+aza1s2
+azau2tu
+aza1u
+az1ll
+a1z
+az1lt
+az2n
+az2r12ra
+a3zrr
+az1r
+az2s1e2
+azsi2k
+az1si
+az2si1ko
+azs3s
+a2z1e2g
+a1ze
+az1e2le
+az1elj
+az1elm
+az1e1l
+a2z1ex
+a2z1g
+a1z
+az2k1e2
+az2kol
+az1ko
+a2z1r1t
+a2z1ing
+a1zi
+a2z1i2o
+a2z1i1r
+a2z1irt
+azkodks2z1
+az1ko
+azko1d
+azkod2ks
+azkod1k
+azma1g
+az1ma
+a2z1ob
+a1zo
+2azol
+azo2nal
+azo1na
+azo2n1
+azont2
+a2z1op
+a2z1or
+a2z1os2z
+az1sh
+a1z
+azt2
+az1tr
+a1z2r
+a1z4s
+az2s
+a2z3si1ke
+a1z1si
+a2z3sor
+a1z1so
+az3sp
+a2z3s
+az3s2z
+a2z1j
+a1z
+az2r1
+az1z
+a1z
+2.
+1a
+a2da
+a2d
+ads1s
+a2do
+a2d
+a2du
+a2j
+a2ka
+a2la
+a2lu
+a2ra
+a2s2z
+a2ut
+a1u
+a2va
+1
+2c2s
+2ga
+2g2y
+2ju
+2mu
+2ra
+2ru
+2s
+2s
+2so
+2s
+2su
+2zo
+2zu
+2b1a1du
+1ba
+2b1akc
+2b1alk
+2b1am1bu
+2b1a2n2y
+ba1p
+b1art
+ba3se
+2b12g
+1b
+b1ll
+2b1lm
+2b1p
+2b11r
+2b1rn
+2b12ru
+2b1tj
+2b1tl
+2b1tm
+2b1tv
+2b1z
+b2b1a2d
+b1ba
+bba2l
+b2b1a1la
+b2b1and
+b2b1r
+b1b
+b2ben
+b1be
+b2b1e2r
+b2b12l
+b1b
+b2bid
+b1bi
+b2bim
+b2b1i2s
+b2b1i1ta
+bb1o2so
+b1bo
+bb1oss
+b2b2r
+b1b
+b2b1l
+b1b
+b2b
+b1dr
+2b1ed
+1be
+2b1e2g
+be2l1a
+be2l1
+be2l1eg
+be1le
+be2l1el
+be2l1e2r
+be2lg
+be1l
+be2l1in
+be1li
+2bel1n
+2b1e2m
+2b1e2n
+b1e2ro
+b1e2r
+12bc
+1b
+2b12g
+b12ke
+2b1ks
+2b12les
+b1le
+2b1lt2
+2b1p
+2b12r.
+2b12ri
+2b1r1s
+2b1r1te
+brt2
+2b1r1t
+b1fr
+2b1i2d
+1bi
+bi2g
+b1i1ga
+b1i1g
+2b1ikr
+b1il1la
+2b1im
+bi2na1i
+bi1na
+2binas
+2b1ind
+2b1ing
+2b1int
+2b1is
+b1izm
+b1izz
+2b1v
+1b
+b1kl
+b1kr
+bla1kr
+b1la
+bla1p
+2b1ol1da
+1bo
+2b1op
+bo2raj
+bo1ra
+bo2ra2n
+bo2rl
+bo1r
+bo2ris
+bo1ri
+2b1os2z
+2b1ov
+b1b
+1b
+b12d
+b1l
+b1n
+b12r
+b1s
+b1v
+b1r
+1b
+b1pr
+1br1i
+b1r
+b2rek
+b1re
+b1sp
+b1st
+b1s2z2
+b1t2r
+2b1ujjal
+1bu
+buj1ja
+bu1s2z2
+2b12r.
+1b
+b1g
+1b
+b12l
+b1s
+b1t
+b1v
+2c1a2g
+1ca
+c1ajt
+ca1k2l
+c1akn
+2c1a2la
+c1alm
+2c1a2n2y
+2c1g
+1c
+2c1l
+c3c1se
+c2c2s
+c3c1so
+c1e2l1
+1ce
+ce1le2
+c1en
+c1er
+2c1p
+1c
+2c11re
+2c3ha
+c2h
+2c3h
+1c3he
+2c3h
+c3hon
+1c1ho
+2c3hu
+ci2as
+1ci
+ci1a
+2c1il
+c1inc
+c1ing
+cin2til
+cin1ti
+ci2sor
+ci1
+ci1so
+ci21s
+2c1i2s
+c1v
+1c
+2c1or
+1co
+2c1os2z
+c1r
+1c
+c12l
+1c
+2cs1abl
+c2s
+1c1sa
+2cs1a2g
+2cs1ajt
+2csa1ka
+2cs1akn
+cs1alap
+csa1la
+cs1alj
+cs1alom
+csa1lo
+c2s1app
+cs1atk
+2csatom
+csa1to
+2cs12c
+1c1s
+2cs1l
+c3srg
+2cs1r1k2
+2cs1rn
+2cs1ru
+2c2s12ta
+1csbelir
+cs1be
+csbe1li
+1csbeli1t2
+csboz1
+cs1bo
+2csef
+1c1se
+2cs1e2g
+2cs1e2l
+2cse1ne
+2csent
+2cser
+cse2t
+2cs1ev
+2cs12g
+1c1s
+cs2k
+cs11ki
+cs1kk
+cs1kn
+2csl
+2csp
+cs12te
+csi2g
+1c1si
+2c2s1i1ga
+2cs1il1le
+2csi1mi
+cs1int
+csi2p
+2cs1i1pa
+cs1isk
+1c1s2
+cs1r
+2c2sok1ta
+1c1so
+12csolat
+cso1la
+12csomk
+cs1orr
+2c2sos2z
+2cs1ov
+c3s2.
+1c1s
+cs12r
+c3st
+c3sv
+cs12k
+1c1s
+2cs12l
+2cs1s
+2cst
+cs12s
+1c1s
+cs1s
+2csuj
+1c1su
+2csut
+2cs1r
+1c1s
+cs12l
+1c1s
+2cs12t
+1csy
+cs3zen
+cs2z
+c1s1ze
+2c1ut
+1cu
+c1r
+1c
+c1l
+1c
+c1r
+d1abl
+1da
+2d1a2do
+2d1akc
+d1a2lap
+da1la
+2d1alb
+2d1alj
+2d1alk
+d1a2nya
+dan2y
+d1a2ny
+da1p2
+2d1a2p
+d1arc
+2d1at2y
+2d1g
+1d
+2d1l
+d12s2z
+d1tl
+d1dr
+d3d2z
+d1e2c
+1de
+2d1e2g
+2d1ej
+2d1e2l
+de1le2
+del1ej
+del1e1me
+2d1e2m
+2d1ep
+de2r1
+d1e2r
+d1e2ti
+dd2
+1d
+d1dr
+d1g2
+2d12ge
+d1k1r
+d11ne
+2d1r1te
+2d1rz
+d1s2t
+di2c1se
+1di
+dic2s
+2d1i2d
+2d1i2ga
+d1i2ko
+d1ill
+d1i1mi
+2d1ind
+2d1int
+di2b
+di1
+di21c
+dic2s2
+di2d2
+di1db
+di1dd
+di1dh
+di1dn
+di12
+di22.
+di2b
+di2h
+di2n
+di21ra
+di2t
+di2v
+di2f
+di2h
+di22i.
+di1i
+di2i2b
+di2i2g
+di2i2h
+di2i2k
+di2i2n.
+di2i2n
+di2ink
+di2i2r
+di2i2t
+di2i2v
+di2j
+dik2
+di22k.
+di21ka
+di21kb
+di2k2.
+di1k
+di2kh
+di2kr
+di21kh
+di21ki
+di21kk
+di21kn
+di21ko
+di21kr
+di21kt
+di2m
+di1m2b
+di1m2h
+di1m2m
+di2n2
+di1nk2
+di2r
+di2szers
+di1s2z2
+di1s1ze
+dis2ze1r
+di2t
+di2v
+2d1i2p
+d1ist
+d1v
+1d
+d1kl
+d1kr
+do2ga
+1do
+do2g
+do2ge
+do2rak
+do1ra
+2d1os2z
+ds2
+1d
+d2b
+1d
+2d1s
+d1v
+d12z
+d12r
+1d
+d1pr
+d1ps
+1d2rt
+d1r
+d1st
+d1tr
+d1udv
+1du
+2d12s
+1d
+2d1g
+1d
+d12l
+2d1z
+1d3za
+d2z
+2d3z
+2d3ze
+1d3z
+1e
+e2c2s
+e2d2z
+e2ge
+e2g
+e2g2y
+e2le
+e2l
+e2me
+e2re
+e2r
+e2se
+e2s
+e2si
+e2s
+e2s
+e2te
+e2ve
+e2v
+e2v
+1
+2de
+2ge
+2g
+2g
+2he
+2ke
+2le
+2ne
+2p
+2p
+2re
+2r
+2ri
+2r
+2r
+2te
+2f1a2gya
+1fa
+fag2y
+2f1alg
+2fb
+1f
+2f1g
+12fk
+2f1p
+12fs
+2ft
+f1dr
+f1elm
+1fe
+2f1e2m
+2f1e2t
+f12ne
+1f
+fi2ad
+1fi
+fi1a
+fi2am
+2f1i2d
+2f1im
+2f1in2g.
+2f1or1d
+1fo
+2f1os2z
+f2rec
+f1re
+1f2r
+fus3s
+1fu
+2f1n
+1f
+2g1abl
+1ga
+2g1abr
+ga2c
+g1a1c
+1gacs1ka
+gac2s
+2gad
+g1a2d
+1gadd
+g1a2d
+2g1a2j
+2ga1ka
+g1a2kar
+g1a2kas
+12gakb
+12gakh
+12ga1ki
+12gakk
+12gakn
+12gakr
+2gakt
+2g1a2la
+2g1alj
+2g1all
+g1alt
+12gam
+ga2n
+g1a1na
+2g1ang
+12gank
+g1ant
+2g1an2y
+2g1a2p
+2g1a2r
+12gask
+g1asp
+2g1as2z
+ga2tol
+ga1to
+2g1a2u
+12ga1za
+2ga2zon
+ga1zo
+2g12g
+1g
+2g1ld
+g1lm
+g12mu
+g2nyal
+gn2y
+g1nya
+2g1p
+2g12rad
+g1ra
+2g1rb
+2g12r
+2g1rh
+2g12ri1a
+g1ri
+g2rokb
+g1ro
+2g1rv
+gs3s
+g2s2z
+2g11t1a2
+2g12t12
+2g11t
+2g1tf
+2g1th
+2g11ti
+2g1tl
+2g1tm
+2g1tn
+g2tokk
+g1to
+2g1tr
+2g1ts
+2g1tt
+2g12t2
+2g1tv
+g1bl
+g1br
+g1d2r
+2g1e2c
+1ge
+2g1e2d
+g1ef
+2g1e2g
+2g1e2l
+2g1e2m
+2ge2n
+g1enc
+g1e1ne
+2g1e2p
+ge2ra
+ge2r
+ge2r1el
+ge1re
+2g1e2s
+2g1e2t
+2g1e2v
+2g1ex
+2g12g
+1g
+2g12he
+2g1j
+2g12k
+2g12l
+2g12ne
+2g12p
+g12p
+2g12r.
+2g12r
+2g12r
+2g11ri
+2g1rm
+2g12r
+2g1r1te
+2g1r1t
+2g1rv
+2g1s
+2g11te
+2g11ve
+2g11v
+g1fl
+g1fr
+g1g2l
+g1gr
+g3gyar
+g2g2y
+g1gya
+g3gye
+g3gy
+gh2nyi
+g1h
+ghn2y
+gi2al
+1gi
+gi1a
+gi2a1s2z
+gi2d
+2g1i1de
+2g1if
+gi2g
+2g1i1ga
+2g1ign
+gi2g
+2g1ill
+g1i1ma
+2g1i2mi
+2g1i2n2a.
+gi1na
+2g1inf
+2g1ing
+2g1ins
+2g1int
+2g1ip
+2g1i1ri
+2g1i1ro
+2g1ist
+2g1is2z
+2g1i2ta
+2g1iz
+2g1g
+1g
+2g1n
+2g1r
+2g1t
+2g1z
+gk2rok
+g1k
+gk1ro
+g1kl
+g1kr
+g1kv
+2g1o1
+1go
+2g1okl
+2g1o2li
+g1ol1t
+2g1op
+2g1or
+2g1os1ko
+gos3s
+2g1oszl
+gos2z
+g1dr
+1g
+2g12r
+2g12k
+1g
+2g12l
+2g1nt
+g2r
+g11r
+2g1rv
+2g1s
+2g1t
+2g1v
+2g12z
+g12r
+1g
+g12s
+g1pl
+gport2
+g1po
+gpor1tr
+g1pr
+g1ps
+g1sh
+g1sk
+g1sl
+g1sp
+g1st
+gs2z2
+g1tr
+2g1ud
+1gu
+2g1uj
+gu2n
+2g1u1na
+2g1und
+2g1u2ra
+2g1u2r
+2g1u2t
+2g1j
+1g
+2g1s
+2g1tt
+g1d
+1g
+g12g
+g12l
+g1n
+g1v
+g1z
+g12r
+1g
+g1z
+gya1g
+g2y
+1gya
+gy1alj
+gy1alk
+gy1alm
+12gya1sa
+12gyasn
+2gyas1sa
+2gy12l
+1gy
+2gy12ram
+gy1ra
+gys1s
+2gy1e2
+2gy1br
+1gy
+2gyl
+2gy12r.
+1gy1gy
+gyg2y
+2gyid
+1gyi
+2gyi1
+2gyil
+gy1i2p
+2gyivad
+gyi1va
+2gyob
+1gyo
+2gyos2z
+gy1otth
+gy1gyu2
+1gy
+gyg2y
+2gy12s
+gy12l
+1gy
+gy1s
+2gyur
+1gyu
+2gyh
+1gy
+2gyt
+2gy12
+h1aj1k2
+1ha
+h1ass
+12ht
+1h
+1i
+i2dom
+i1do
+i2d
+i2ga
+i2g
+i2g2y
+i2ha
+i2je
+i2m
+i2ram
+i1ra
+i2r
+i2s2z
+i2ta
+i2v
+i2vo
+i2z
+1
+2g
+2r
+2ve
+2vo
+2j1a1d
+1ja
+2j1akc
+2j1akv
+2j1a2la
+2j1am1bu
+2j1a1na
+j1ant
+2j1an2y
+2j1ar
+2j1atl
+2j1ax
+j1a1zo
+2j1g
+1j
+2j1l
+2j1p
+js3s
+2j11t1a
+2j1tt
+j1bl
+j1br
+j2c2h
+2j1e2c
+1je
+j1e1g
+j1elm
+j1eln
+j1e1l
+j1elv
+2j1em
+2j1e2n
+2j1es
+j1e2t
+2j1e2v
+j1ex
+2j12g
+1j
+2j1l
+2j1p
+j2r
+2j11re
+2j11te
+j1fl
+j1fr
+2j1i2d
+1ji
+2j1il
+2j1im
+2j1iz
+j1j
+1j
+j1r
+j1v
+j1z
+jk1ell
+j1ke
+j2k12
+j2k
+j2lad
+j1la
+jl1akt2
+j2l1an
+j2l1as
+j2li2k
+j1li
+j2lob
+j1lo
+j2nr
+j1n
+j2nin
+j1ni
+j2n
+2j1ob
+1jo
+2j1op
+2j1or
+2j1b
+1j
+j1k
+j1l
+2j1r
+j1r
+1j
+j1s
+j1pl
+j1pr
+j1sn
+j1sp
+j1st2
+j1t2r
+2j1ud
+1ju
+j1s2z
+1j
+j1g
+1j
+j1l
+j1r
+j12t
+j1v
+j1z
+j1r
+1j
+j2zab
+j1za
+j2za2j
+k1abr
+1ka
+2k1a2d
+2k1aj
+1k1a1ka
+2k1a2la1p
+ka1la
+k1a1le
+k1alj
+k1alm
+kalmanac3
+kalma1na2
+kal1ma
+k1ant
+k1a1ra
+2k1a2r
+k1arm
+k1arz
+2k1ass
+2k1atl
+2k1a2u
+2k12c
+1k
+2k12l
+k11ta
+k1tk
+k1bl
+k1e1b
+1ke
+2k1e2g
+k1e2le
+2k1elk
+2kelle1ne
+kel1le
+2k1elm
+2k1e2l
+k1emb
+k1e2r
+2k1e2v
+2k1e2vo
+2k12l
+1k
+2k12ne
+2k1rm
+2k1r1te
+2k1r1t
+2k1rv
+2k1rz
+k1ss
+2k12te
+2k1tk
+2k1tt
+2k12ve
+k1fl
+k1fr
+2k1i2d
+1ki
+2k1if
+ki2g
+2k1i1ga
+2k1i1g
+k1ill
+2k1i2m
+k1ing
+2k1int
+k1i1ro
+2k1i2s
+ki2t
+k1i1ta
+2k1i2v
+k1r
+1k
+k1k2l
+k1k2r
+k2lar
+k1la
+2k1oks
+1ko
+2k1o2la
+2k1old
+2k1o2li
+2k1oll
+2k1o2pe
+2k1orv
+kos3s
+2k1ott
+k11ni
+1k
+k2l
+1k
+2k11l
+k12r
+k12r
+1k
+k1pr
+k2rk
+k1r
+1k2re1
+k1re
+1k2ris
+k1ri
+k1sp
+k1sr
+k1st
+k1s2z2
+k1t2r
+2k1uj
+1ku
+ku2n
+2k1u1ni
+ku2r
+k1u1ra
+k1u1t
+k1j
+1k
+k2t
+2k11to
+k1d
+1k
+2k1g
+k2l
+k1n
+k1r
+k12t
+k1r
+1k
+1k2vat
+k1va
+2l2a.
+1la
+l1abl
+l1a1c
+2l1adag
+la1da
+2l1a2d
+l1a2j
+l1ajt
+la2kar
+la1ka
+2l1akn2a.
+lak1na
+2lal
+2l1alt
+la1l
+l1alg
+2l1alk
+2l1alm
+2l1a1ne
+2l1ang
+2l1ant
+2l1a2nya
+lan2y
+2l1a2ny1i
+la1ny
+2l1a2nyn
+2l1a2nyt
+2l1a2nyv
+2l1a2pos
+la1po
+l1a1p
+l1a2ra
+l2a2szek
+las2z
+la1s1ze
+l2a2szel
+l2a2sz1k
+la1s1z
+las2zks2z1
+lasz1k
+la2s1z
+l2a2s1z
+la2tat
+la1ta
+la2tet
+la1te
+la2t12r.
+l2atr
+la1t
+la2tikr
+la1ti
+la2tint
+l2atin
+l1at1l
+la2told
+la1to
+la2t12
+2l1at1ti
+2l1a2t2y
+l1aut
+la1u
+2l1br
+1l
+l12g.
+l12gi
+2l12g
+l1ll
+2l12rak
+l1ra
+l1rf
+l1rk
+2l1rn
+2l12ro
+l2s3z
+2l1tc
+2l1tk
+2l1tm
+2l11t
+2l1t1v
+l1bl
+l1br
+lca1i2
+l1ca
+1lds
+l1d
+1ldoz
+l1do
+l1d2r
+2l1e2c
+1le
+2l1e2d
+2l1ef
+l1elk
+l1elm
+l1e1lo
+l1e2l
+l1elr
+l1e1mu
+2l1e2r
+l1esem
+le1se
+2l1e2s
+2l1es2z
+2l1e2t
+l1ez
+2l1g
+1l
+2l12he
+l2kal
+l1ka
+l2k1an
+l2k1e2l
+l1ke
+l12le
+l12l
+2l12ne
+2l12r.
+2l1rb
+2l1rd
+2l1rf
+2l1rg
+2l1rh
+2l12ri
+2l1rm
+2l1rr
+2l1rs
+2l1r1t
+2l1r1te
+2l1r1t
+2l1rz
+2l12v.
+2l12v
+l1fl
+l1fr
+l1gr
+1lha1ja
+l1ha
+li2as
+1li
+li1a
+l1i2bo
+li2d
+l1i1de
+l1i1d
+li2g
+2l1i1ga
+2l1i1ge
+2l1i1g
+2l1ill
+l1imp
+2l1ind
+l1inf
+2l1i2onb
+li1o
+2l1i2ont
+2l1i2p
+l1i1r
+2l1i1ro
+li2s1e
+li2s1k
+li1s
+li2sis
+li1si
+lis3s
+l1is1te
+2l1iz
+l1n
+1l
+l12r
+l1t
+l12v
+lk2rok
+l1k
+lk1ro
+l1k2l
+l1k2r
+l2l1a2d
+l1la
+1llag
+l2laj
+l2l1a2lak
+lla1la
+lla2m1e
+1llamok
+lla1mo
+l2l1a2p
+l2l1a2r
+1lla1ta
+lla2tas
+lla2t1e2
+ll2a2t1or
+lla1to
+lla2t12
+1lla1tu
+l2l12g
+l1l
+l2l12l
+l2l1rr
+lls1s
+l2l1th
+l2l1tm
+l2led
+l1le
+l2l1e2h
+l2l1ej
+ll11k
+l1l
+l2l1iz
+l1li
+1llo1m
+l1lo
+l2l
+1lmaim
+l1ma
+lma1i
+lmeg1
+l1me
+1lmo2k.
+l1mo
+1lmom
+1lmo2t.
+1lmuk
+l1mu
+1lmunkb
+l1obj
+1lo
+2l1o2k2a.
+lo1ka
+2l1o2ka1i
+1lokaih
+1lokain
+1lokair
+2l1o2k
+1lokn
+1lokt
+1lo2k1u
+2l1o2k2i.
+lo1ki
+l1o2kok
+lo1ko
+1l1o2konk
+l1o2kos
+2l1ok1ta
+12l1o2ku
+2l1ol
+lo1ma2
+lo2mad
+lo2m1al
+lo2m1an
+lo2mar
+lo2mas
+lo2m1
+lo2m1e
+lo2m1it
+lo1mi
+lo2mot
+lo1mo
+2loms
+lo2m1
+2l1ont
+l1opc
+2l1o2pe
+2l1or
+2l1os2z
+2l1ox
+l1a2
+1l
+l12
+l12
+2l2rj
+l1r
+l2s12
+lt2
+l1b
+1l
+2l1d
+2l12l
+2l1s
+l1z
+2l1r
+1l
+l1p2l
+l1p2r
+l1p2s
+l1sk
+l1st
+1ltaln
+l1ta
+lta1l
+l1trad
+lt1ra
+l1t2rak
+l1t2ran
+l1t2re
+l1t1r
+2l1ug
+1lu
+2l1u1na
+2l1u2r
+2l1u2t
+2l1uz
+2l1j
+1l
+2l1r
+l2t
+l1tj
+l1tk
+l1tn
+2l11to
+2l1tr
+2l1tt
+l1g
+1l
+l1n
+l1r
+l1t
+l1v
+l1z
+l1r
+1l
+l1z
+ly1a1da
+l2y
+1lya
+lya1g
+ly1ant
+ly1a1nya
+lyan2y
+lya1p
+ly1ass
+2lyl
+1ly
+2ly1e2
+2lyj
+1ly
+2ly2l
+2ly12ne
+2ly1re
+2ly1ve
+2lyi1de
+1lyi
+2ly
+ly1k2
+ly1odv
+1lyo
+2ly12
+2ly1
+2ly
+ly1s
+2lyug
+1lyu
+2ly12l
+1ly
+2lyt
+2ly12
+2m1abl
+1ma
+2m1abr
+m1a2c
+m1adm
+m1agg
+2m1ajt
+2m1akt
+m1a2lap
+ma1la
+m1all
+m1alt
+ma12
+2m1app
+2m1arc
+ma2sz1l
+mas2z
+ma1s1z
+m2a2szel
+ma1s1ze
+ma2sz2v
+m2a1s1z
+ma2sz1odv
+ma1s1zo
+m2a2s1z12
+m1atl
+2m1att
+2m1at2y
+m1aud
+ma1u
+m1a2zo
+m2c
+1m
+m1f
+2m1g
+m1l1la
+m1l1lo
+mn1n
+mn1tr
+2m12rak
+m1ra
+2m12ram
+2m12ras
+2m12r
+2m1rb
+2m12ri
+2m1rn
+2m12ro
+2m1rr
+2m12ru
+m1sv
+2m1tb
+2m11ti
+2m1tm
+m12z
+m1b2l
+m1dr
+2m1e2b
+1me
+2m1ej
+2m1e1la
+m1e1l
+m1e2lem
+me1le
+m1e1l
+2m1elh
+2m1e2l12
+2m1elj
+2m1elk
+2m1elm
+m1e1lo
+2m1e2l
+m1els
+m1elt
+m1e1l
+m1elv
+2m1e2m
+2m1erd
+m1e2rek
+me1re
+2m1erk
+2m1e2ro
+me2rk
+me1r
+me2rt
+me2rv
+m1e2se
+m1ess
+m1es2z
+me2t
+2m1e1ti
+2m1e1t
+2m1ev
+2m1ex
+2m1ez
+m11ke
+1m
+2m12le
+2m1p
+2m1rc
+2m1rd
+2m1rtel
+mr1te
+2m1tk
+m1fr
+m1gr
+mi2ab
+1mi
+mi1a
+miak2
+mi2akr
+mi2al
+mi2am
+2mi1de
+2m1i1d
+2m1i2d
+2m1i1ga
+2m1i1g
+2m1i1g
+2m1ill
+2mi1m
+2mimm
+2m1imp
+2m1ind
+2m1inf
+2m1ing
+2m1in1te
+2m1in1t
+2m1inv
+2m1i2pa
+2m1i1r
+2m1i1ro
+2m1irt
+2m1isk
+2m1ism
+m1i2s1z
+mis2z
+2m1i2z
+m1g
+1m
+2m1j
+2m1r
+2m12v
+m1z
+m1kl
+m1kr
+m1kv
+mla3t2
+m1la
+2m1ob
+1mo
+2m1of
+2m1o1k
+2m1okl
+2m1okm
+2m1ok1ta
+mok1t
+mo2lyas
+mol2y
+mo1lya
+2m1op
+mo2r12l
+mo1r
+mo2ri2s
+mo1ri
+mo2r1odv
+mo1ro
+mo2sas
+mo1sa
+mos3s
+2m1os1to
+2m1os2z
+2m1ov
+2m1ox
+m12r
+1m
+m12k
+1m
+m1l
+m1n
+m1r
+m1s
+m1t
+m1v
+m12z
+m12r
+1m
+m12s
+m1z
+mpa1p2
+m1pa
+m1p2l
+m1p2r
+m1p2s
+m1sk
+m1sm
+m1sn
+m1sp
+m1st
+m1s2z2
+m1t2r
+2m1ud
+1mu
+2m1ug
+2m1uj
+mu2n
+2m1und
+2m1u1ni
+2m1u2r
+2m1u1t
+2m1j
+1m
+m1d
+1m
+m1g
+m12l
+m1r
+m1t
+m1v
+m1z
+3mt
+1m
+m12z
+mva2s1u2
+m1va
+2n1abl
+1na
+2n1a2c
+n1ac2h
+n1a1da
+na1e2
+n1a1gya
+nag2y
+n1ajt
+2n1a1k
+2n1akc
+2n1akr
+2n1a2la
+n1alk
+2n1all
+2n1a1n
+n1a1nya
+nan2y
+2n1a2o
+na2p1
+n1a1ra
+2n1arc
+n1as2s2z
+na2t12r.
+n2atr
+na1t
+na2tol
+na1to
+n2a2tor
+na2t1
+2n1a2u
+n1a1va
+2n1br
+1n
+2n1g
+2n1ll
+n12r.
+n12rad
+n1ra
+n11ri
+n1rm
+n1rn
+n11ro
+n11ru
+n1sv
+n2t1a
+n2t1
+2n12z
+n1bl
+n1br
+n2cac
+n1ca
+n2c1ad
+n2caj
+n2cal
+n2c1a2n
+n2car
+n2c1as
+n2cat
+n2c1a1u
+n2c1l
+n1c
+n2c12ro
+n2cs
+n2c1ed
+n1ce
+n2c1e2g
+nce2l
+nc1e1le
+n2c1elt
+n2c1er
+n2c1e2s
+n2c1et
+n2cez
+nc11he
+n1c
+nc12ne
+n2c12r.
+n2c3h
+n2c1ill
+n1ci
+n2cim
+n2c1ir
+n2c1i2s
+n2c12
+n2c12
+n2c
+n2cs1an
+nc2s
+n1c1sa
+nc3ss
+n1c1s
+n2c3seb
+n1c1se
+ncs1es
+nc3s1pe
+nc3s1po
+nc3s1za
+ncs2z
+n2c
+n2c2z
+ne2d
+1ne
+n1e1d
+2n1ef
+2n1e2g
+2n1e2l
+n1emb
+n1e2mi
+n1eml
+n1e2mu
+2n1en
+2n1e2p
+n1es
+2n1e2t
+n1e2u
+2n1ex
+n1ez
+2n12d
+1n
+2n12g
+2n12k.
+2n1kn
+n1ks
+2n12l
+2n12ne
+n11p
+2n12r.
+2n1rc
+2n1rd
+2n11r
+2n1rl
+n11te
+2n2vad
+n1va2
+2n11ve
+2n12v
+n1f2r
+n2gab
+n1ga
+n2g1a2r
+n2g11ra
+n1g
+ngs1s
+n2g1t
+n2ged
+n1ge
+n2g1el
+nge2s
+n2g12r.
+n1g
+n2g12s
+ng3g
+n2g1it
+n1gi
+n2g1iv
+n2g
+n2g1os2z
+n1go
+n2gr
+n1g
+n2g1us
+n1gu
+n2g
+1ng2y.
+ng2y
+n2gyas
+n1gya
+2n1i2d
+1ni
+2n1if
+2n1i2ga
+n1i1g
+ni2k1a
+ni2k1
+ni2ke
+n1ill
+2n1im
+2n1ind
+2n1i2p
+2nirr
+n1irt
+n1isk
+n1ism
+2n1i2s2z
+ni2t
+ni2t1e2
+ni2t1
+ni2tol
+ni1to
+ni2t1or
+n1i1zo
+n1g
+1n
+n1v
+n1z
+n2kaj
+n1ka
+nk1a1ro
+n2k1ern
+n1ke
+n1k2li
+n1k2lo
+n1k1lu
+n1k2r
+n3nye
+n2n2y
+n3ny
+n3nyo
+n3nyu
+2n1o2b
+1no
+2n1okir
+no1ki
+2n1ok1ta
+2n1o2ku
+2n1o2l
+3nom
+no2n1i2m
+no1ni
+2n1o2r
+2n1oszl
+nos2z
+n1ott
+2n1o2x
+n11ri
+1n
+n1k
+1n
+2n1l
+n1m
+2n1n
+2n1r
+2n1s
+2n1t
+n11v
+2n1r
+1n
+n12s
+2n12z
+n1pl
+n1pr
+n2ses
+n1se
+n2s1r
+n1s
+n2sis
+n1si
+n2si2z
+n1s2pi
+nst2
+n1str
+ns1ld
+n1s
+n1sz2l
+ns2z
+nt1a2n2y
+n1ta
+n2taz
+n2t12g
+n1t
+nt2p
+n2t1rb
+n2t11ri
+n2t1ed
+n1te
+nt1e1k
+nt1elh
+n2tez
+nt11ke
+n1t
+n2tr1te
+n2tid
+n1ti
+n2t1i1pa
+nt1ist
+n2t1iz
+n2t1v
+n1t
+n2tk
+n1t
+n2t1s
+n1t2rak
+nt1ra
+n1tran
+n2t12l
+n1t
+2n1ud
+1nu
+2n1ug
+2n1uj
+2n1u2r
+2n1u2t
+n1r
+1n
+n2t
+2n1tj
+2n11to
+2n1tt
+n12g
+1n
+n12l
+n12t
+n12v
+n12z
+n1z
+1n
+ny1a2dat
+n2y
+1nya
+nya1da
+2ny1a2ds
+nya1d
+2ny1a2d2.
+nya1d
+2ny1a2da2k.
+nyad1a
+2ny1a2db
+2ny1a2dk
+2ny1a2dn
+2ny1a2dt
+2ny1a2dv
+ny1agg
+2ny1akc
+ny1alap
+nya1la
+ny1alk
+ny1all
+2ny1a2nya
+n2yan2y
+2ny1a2nyk
+nya1ny
+2ny1a2nyn
+2ny1a2nyr
+2ny1a2nyt
+2ny1a2nyv
+ny1a1p
+ny1a1ra
+ny1a1r
+ny1art
+2ny1as2s2z
+2ny1aszt
+nyas2z
+2ny12l
+1ny
+2ny12ras
+ny1ra
+2ny12r
+2ny1rb
+2ny1rc
+2ny1rf
+2ny1rh
+2ny1rk
+2ny1rn
+2ny12ro
+2ny1rr
+2ny1rs
+2ny1rt
+2ny12ru
+2ny12r2
+2ny1tl
+2ny12z
+ny1ed
+1nye
+2ny1e2g
+nye2gyez1
+nyeg2y
+nye1gye
+ny1el
+nye2le
+2ny1e2m
+ny1en
+2ny1e1p2
+ny1e1s
+ny1et
+ny1e2v
+2ny1d
+1ny
+2ny1g
+2ny1he
+2ny12j
+2ny12k
+2ny1l
+2ny12ne
+2ny1r2c.
+ny1r1re
+2ny1r1te
+2ny1r1t
+ny2r12
+ny1r1v
+2ny1s
+2ny1te
+2nytk
+2ny1tt
+2ny1ve
+nyf2l12v
+ny1f
+nyf1l
+2ny1id
+1nyi
+nyi2g
+2ny1i1g
+2nyi1ke
+2ny1ikr
+2nyirat
+nyi1ra
+2nyi1ro
+2nyisk
+2ny1is2z
+2nyi1ta
+ny12r
+1ny
+2ny1oml
+1nyo
+2ny1ont2
+2ny1o2r
+2nyos2z
+ny1k
+1ny
+ny12r
+2ny1s
+ny1z
+2ny12
+nyta2n1csh
+ny1ta
+nyta1n
+nytanc2s
+nyta2n12c1si
+ny1tr
+2nyug
+1nyu
+2ny1ur
+2ny1ut
+2ny1to
+1ny
+2ny12
+2ny12
+n2zl
+n1z
+1o
+o2c2s
+o2k
+o2ko
+o2mo
+o2pe
+o2so
+o2sza2n
+os2z
+o1s1za
+o2s1z1e
+o2szis
+o1s1zi
+o2sziv
+o2s1z
+1
+2ha
+2va
+1
+2le
+2m
+2re
+2r
+1
+2s2z
+2p1a2dot
+1pa
+pa1do
+pa1tr
+pa1u2
+2p1g
+1p
+p1ll
+p12t1a2
+p1dr
+p1eg
+1pe
+p1e2l
+p1e2m
+pe2n
+2p1e2s
+p1e2t
+2p1g
+1p
+p12te
+pi2ac
+1pi
+pi1a
+pi2av
+2p1im
+2p1inj
+p1int
+pi2t
+2p1i1ta
+2p1n
+1p
+2poll
+1po
+po2r1e
+p1r
+1p
+p2ro
+p1t2r
+2p1ug
+1pu
+2p1u2t
+2p1r
+1p
+p1g
+1p
+p1z
+2r1abl
+1ra
+2r1abr
+2r1abs
+r1a2dag
+ra1da
+2rada1ta
+2rada1t
+2radatb
+12rada1t
+2radatn
+2rada1to
+12radatr
+2radat1t2
+r1a2g
+2r1ajk
+2r1a2kad
+ra1ka
+2r1a2kas
+2r1akc
+2r1akn2a.
+rak1na
+2raknt
+rak1n
+2r1ak2t.
+r1ak1ti
+r1a1l
+2r1al2j.
+2r1alj2a.
+ral1ja
+2raljak
+2r1al1j
+2r1alk
+r1all
+2r1alm
+r1alt
+2r1alv
+12ram2a.
+ra1ma
+12rama1i
+12ra1m
+ra2ml
+ra2m1el
+ra1me
+ra2m1r1t
+ra1m
+12ra1mi
+ra2m1in
+12ram1k
+12ramok
+ra1mo
+12ramol
+12r2amot
+12rams
+12ra1mu
+12ra1m
+r1a1na
+r1ang
+r1a2no
+2r1ant
+r1a2p
+r1a2p
+r1aps
+2r1a2r
+2r1arc
+r1a2ri
+2r1asp
+ra2taj
+ra1ta
+ra2tal
+ra2tav
+r2a2tl
+ra1t
+ra2t1inf
+r2atin
+ra1ti
+2r1at1l
+ra2t12
+2r1at2y
+2r1br
+1r
+r2c
+r2g
+r11ga
+r1gr
+r1g2y
+r12lo
+2r12p
+2r12rak
+r1ra
+2r12r
+2r1rb
+2r1rf
+2r12ri
+2r1rk
+2r12ro
+2r1rr
+2r1rt
+2r12ru
+2r11r
+r1rv
+2r12ss
+r1s
+r2s1z
+rs2z
+2r12ta
+r2t1a2d
+2r11t
+r1tb
+2r1tc
+2r1td
+r12t1e2
+2r11t
+2r1tf
+2r1th
+2r12ti
+2r1tj
+2r1tk
+2r1tm
+2r12t
+2r1tr
+2r1ts
+2r1tt
+2r11t2
+2r1tv
+r1bl
+1rboc
+r1bo
+r1br
+r2d1l
+r1d
+rd1ell
+r1de
+rd1e1me
+r2d12n
+r1d
+r2d1r
+r1d
+r1d1r
+r2dud
+r1du
+re2
+1re
+r1e2d
+2r1e2g
+r1ej
+2r1e2l
+re2ma
+re2ml
+re1m
+re2n
+r1e1ne
+r1eng
+2r1e2r
+r1e2s
+r1e2s
+2r1ex
+r1br
+1r
+r12de
+2r12g
+r12j.
+r12je
+r1js
+2r12ke
+2r12k
+2r1ks
+2r12l
+2r12ne
+2r1p
+2r11r
+2r12ri
+2r1r1t
+r1ss
+r1s2z
+2rtk
+2r1tr
+2r1tt
+2r1tv
+2r12v.
+r2vek
+r1ve
+2r1vk
+2r1vr
+r1fl
+r1f2r
+rgs1s
+r1g
+r1gl
+r1g2r
+rgy12ra1ka
+rg2y
+r1gy
+rgy1ra
+r2gyrv
+r2gyir
+r1gyi
+r2gyol
+r1gyo
+r2gy
+2r1i2de
+1ri
+2r1i2d
+3r2i3dtl
+2r1i2d
+r1i2dt
+r1ifj
+ri2g
+2r1i1ga
+2r1i1g
+2r1i1ge
+2r1i1g
+2r1ill
+2r1i2m
+r1imb
+2r1i2mi
+2rinas
+ri1na
+2r1inc
+2r1ind
+2r1inf
+2r1ing
+2r1int
+2r1inv
+2ri1o
+2r1i2pa1ro
+ri1pa
+ri2s1e
+r1is1ko
+r1is1te
+r1i2s1za
+ris2z
+2r1i2ta
+r1i2zo
+2r1r
+1r
+r1v
+2r12z
+rka1k2
+r1ka
+1rk1do
+r1k
+r1k2l
+1rkok
+r1ko
+r1k1r
+r1k2v
+rns3s
+r1n
+rnya2n
+rn2y
+r1nya
+r2n2y1an2y
+rnye2l
+r1nye
+r2ny1e1le
+r2nye1l
+r2nyem
+r2nyes
+1rny1ka
+r1ny
+1rnykk
+r2nyok
+r1nyo
+r2ny1ol
+r2nyos
+r2ny
+r2ny
+r1odv
+1ro
+2ro2k
+ro2k1e2
+2rok1ha
+2rokm
+ro2kol
+ro1ko
+2r1o2koz
+2rok1re
+12roks
+2rok1ta
+rok1t2
+2r1ol1da
+ro1ma2
+ro2maj
+ro2mak
+ro2m1al
+ro2m1as
+ro2mr
+ro1m
+2r1omlb
+rom1l
+2r1omlin
+roml1i
+2r1omlj
+2r1omls
+ro2m1ok
+ro1mo
+ro2m1os
+r1opt
+2r1o2r
+ro2sas
+ro1sa
+ro2sl
+ro1s
+ros3s
+2r1ostr
+ros1t2ro2m.
+rost1ro
+2r1ost2y
+r1otth
+2r1o2v
+r2r
+1r
+r1
+2r12nt
+r1n
+2r12nv
+r1p2
+2r12rak
+r1ra
+r2rk
+r1r
+2r11ri
+r1s1k
+r1s2p
+r12b
+1r
+r1c
+r1k
+2r12l
+r1n
+r1r
+2r1s
+r1v
+2r12z
+r12r
+1r
+r12s
+1rp2a.
+r1pa
+rprba1jo2
+r1p
+rpr1ba
+rprba2jok
+r1pl
+r1p2r
+r1p2s
+rrt1e2ge1ke
+r1r
+rr1te
+rrte1ge
+r2s1a1la
+r1sa
+rs1as2z
+r2s1l
+r1s
+r2sed
+r1se
+r2s1e2l
+r2sem
+r2s1en
+r2ses
+r2s12g
+r1s
+r2sip
+r1si
+r2si1r
+r2s1rt
+r1s
+rs1okt
+r1so
+r2s1ol
+r2sv
+r1s
+r2s1n
+r1s
+rs3s
+r1s2tab
+rs1ta
+r2su2t
+r1su
+rsza2k
+rs2z
+r1s1za
+r2s3ze1ne
+r1s1ze
+r2ta1do
+r1ta
+r2t1aj
+1rta1lo
+rta2n12s
+rta1n
+rt1a1r
+rt1a2ris
+rta1ri
+rta1u2
+rt1ll
+r1t
+r2t1rn
+r2t12ru
+r2t1e2g
+r1te
+rt1elh
+rt1e1li
+rt1ell
+rt1eln
+r2t1e1l
+rt1emb
+r2t1er1k2
+rte2s
+rt1e1se
+rt1esth
+rt1e1ti
+rt11le
+r1t
+r2t1rd
+r2t1r1te
+r2tid
+r1ti
+r2tif
+r2t1ins
+r2t1int
+rt1izg
+r2tt
+r1t
+r2t1ok1ta
+r1to
+r2top
+rt1otth
+r2t1n
+r1t
+r2t1s
+r2t1u1ra
+r1tu
+rt1u2s2z
+r2t1ut
+12r2u.
+1ru
+12ru1a
+ru12
+12ru1b2
+12ruc
+2rud
+1ru1da
+1ru1d
+12ru1
+12ruf
+1rug2y
+12ru1i
+2ruj
+1ru1j
+12rum
+12ru2n.
+12ru1na
+12ru1n
+2r1und
+2r1u1ni
+12ru1o
+12ru1p2
+2rur
+1rur2a.
+ru1ra
+r1u1r
+12rus
+rus3s2
+2rut
+1ru2t.
+ru2tal
+ru1ta
+ru2tas
+1ru1te
+ru1tr
+ru2tun
+ru1tu
+12ru1
+12ruv
+r1u2z
+12r1
+1r
+r11jo
+12rk
+r11r
+r1rf
+r1s2z
+2r11ta
+2r1tb
+2r11t
+2r1th
+2r12ti
+2r1tj
+r1tl
+2r1tn
+2r12to2
+2r1tr
+2r1ts
+2r1tt
+r12g
+1r
+r12l
+r1n
+r1r
+r12s
+r1t
+r12v
+r1z
+r1r
+1r
+r12z
+1rvc
+r1v
+sa2b
+1sa
+2s1abl
+2s1a1bo
+s1a2dat
+sa1da
+2s1a2d
+s1a2do
+2s1a2d
+2s1a2j
+s1aj1t
+2s1a2kar
+sa1ka
+2s1akc
+2s1akv
+s1a2la
+s1alg
+s1a2li
+s1alj
+s1alk
+s1all
+2s1alm
+2s1alt
+2s1amb
+sa2n
+2s1a1na
+2s1a1n
+2s1ant
+2s1an2y
+s1a2p
+2s1app
+2s1a1pu
+s1a2ra
+s1a2rn
+sa1r
+2s1arc
+2s1a1r
+2s1a2ri
+s1art
+2s1arz
+s1asp
+2sass
+12sa1t
+2s1atl
+2sa1to
+2s1at2y
+2s1a2u
+2s1a1zo
+2s1b
+1s
+2s1br
+s2ga1i
+s1ga
+2s1gb
+2s12gi2g
+s1gi
+2s1gk
+s1gn
+2s12g
+2s1l
+2s12p
+2s12ras
+s1ra
+2s2rt
+s1r
+s1r2
+s2rn
+12ssb
+12s1si
+1ssk
+s1sv
+2s12ta
+2s11t
+2s11t
+2s1th
+2s11ti
+2s1tj
+2s1tk
+2s1tl
+2s1tr
+2s1ts
+2s1tt
+2s1tv
+2s12z
+s1bl
+s1br
+scsa2p12
+sc2s
+s1c1sa
+s1d2r
+s1e2b
+1se
+2s1e2d
+2s1ef
+s1e2g2y
+2s1e2l
+2s1e2m
+2s1e2n
+s1e1pi
+s1er1k
+2s1e2r
+2s1e2s
+2s1e2t
+s1e2v
+s1ex
+s1ez
+2s12g
+1s
+2s11he
+2s1j
+2s12k
+2s12l
+2s12ne
+2s1p
+2s12r.
+2s1rd
+2s12re
+2s12r
+2s12ri
+2s1rl
+2s1rs
+2s1r1te
+2s1r1t
+2s1r1t
+2s1rv
+2s12s
+2s12te
+2s1tk
+2s1tt
+2s12ve
+s1fl
+s1fr
+s1gl
+s1gr
+2s1i2d
+1si
+2s1if
+si2g
+2s1i1ga
+2s1i1ge
+si2k1e
+2s1ill
+2s1i1m
+s1i1mi
+2s1imp
+2s1ind
+2s1inf
+2s1ing
+2s1i1ni
+2s1int
+2s1inv
+2s1i2p
+2s1i2rat
+si1ra
+2s1i2r
+2s1i1ro
+2s1irt
+2s1isk
+2s1ism
+s1ist2
+s1i2s2z
+s1i1ta
+2s1iz
+s1g
+1s
+2s1j
+2s1ns
+s2r
+s11r
+s11r
+2s12v
+s12z
+s1kl
+s1k2r
+s1kv
+1s1nu
+2s1ob
+1so
+so1da2
+so2d1al
+so2d1an
+so2d1as2
+so2da1u
+so2d1l
+so1d
+2s1okl
+2s1okm
+2s1ok1ta
+2s1ol1d
+s1o1li
+2s1ont
+2s1op
+s1o2r
+2s1org
+2so1ri
+2s1ork
+s1orr
+2s1ors
+2s1orv
+2s1os2z
+2s1o2v
+12sb
+1s
+12s1
+12sg
+12s1i
+12sj
+12sk
+12sn
+s1p2
+2sr
+s12r
+s11ri
+1s1r
+2ss
+s12s
+12st
+2sv
+2s12k
+1s
+s12l
+s1n
+2s12r
+2s1s
+s12v
+2s12z
+s12r
+1s
+s12s
+1spic
+s1pi
+s1pl
+1s2pr
+s1p
+sp2r
+s1ps
+s1s2k
+s1s2p
+s1sr
+s1s2t
+s2s2z2
+s3szab
+s1s1za
+s3szag
+s3sza1ka
+s3sza1k
+s3szj
+s1s1z
+s3szm
+s3szz
+s3s1ze
+s3szl
+s1s1z
+s3szf
+s3s1z
+s3sz1k2
+s3szoc
+s1s1zo
+s3szok
+s3szol
+s3szor
+s3s1z
+s3s1z
+s3szt2
+s3s1z
+s3s1z
+s2teg
+s1te
+st1elem
+ste1le
+s2tir
+s1ti
+s2t1s
+s1t
+s1t2re
+s1t1ri
+s1t2rf
+st1r
+2s1ud
+1su
+2s1uj
+2s1u2r
+2s1u2s
+su2t
+s1u1ta
+2s1u1t
+2s1u1t
+2s1u2z
+2s12r.
+1s
+2s1rn
+s12s2z
+2s11ti
+2s11to
+s1d
+1s
+2s1g
+s1ld
+s11le
+2s1n
+2s1r
+s12ve
+2s1z
+s1r
+1s
+s12z
+svgya2d
+s1v
+svg2y
+sv1gya
+sv2gy1a1da
+2s3zac
+s2z
+1s1za
+2sz1a2d
+sz1a1ga
+sz1a1g
+2sz1ag2y
+2szaj
+2s2z1akc
+sz1a2kol
+sza1ko
+2sz1akt
+sz1a1le
+2sz1alk
+sza2n
+2sza1na
+2sz1ant
+2sz1an2y
+2sz1ap
+sza2s
+s2z1as2z
+sza2t1e
+2sz1a1u
+s3zavar
+sza1va
+sz1gg
+1s1z
+2sz1g2y
+sz12lo
+2s3zp
+sz2r1as
+sz1ra
+sz12rih
+sz1ri
+2sz12r
+szs1s
+2sz1ta
+2sz1z
+sz1e2b
+1s1ze
+2sze1b2
+szeb11de
+sz1e2bd
+sz1e2g
+sz1e2g2y
+sz1eln
+sz1elv
+sz1emb
+s3ze1ne
+s3ze1n
+sz1eng
+sz1e2p
+2sz1er1d2
+2sz1e2r
+2sz1e2s
+sz1e2t
+sz1e2v
+sz1ex
+sz1ez
+2sz1j
+1s1z
+2sz1kb
+2sz12l
+2sz12ne
+2sz1p
+2sz11r
+2sz11te
+2sz1tt
+2sz11ve
+szg2p1e2kh
+sz1g
+szg1pe
+szgpe1k
+2szid
+1s1zi
+2szif
+2sz1ill
+2szind
+2sz1ing
+szi2p
+2sz1i1pa
+2s2zi1ro
+2sz1isk
+2sz1ism
+sz1ist2
+sz1i1ta
+2sziz
+2szr
+1s1z
+sz1k2
+1szk1i
+sz1k
+2szokl
+1s1zo
+2sz1okm
+2sz1ors
+2s2z1os2z
+sz1s2p
+1s1z
+2sz12b
+1s1z
+sz2l
+sz1lt
+2sz12r
+2sz1s
+sz11v
+sz1r
+1s1z
+sz12s
+s1z3sa
+sz2s
+s3z1su
+szt2
+sz1tr
+2s2zu1ni
+1s1zu
+2szur
+2szut
+2sz12s
+1s1z
+2sz12g
+1s1z
+2sz1n
+2sz12z
+szvro1sa3
+sz1v
+szv1ro
+sz1z
+t1abr
+1ta
+2ta1d
+t1a2j
+t1ajk
+t1ajt
+t2a1k1r
+2t1ak2t.
+2t1ak1to
+t1alh
+2t1al1ja
+2t1alm
+t1als
+t1a2lu
+t1al1v
+2t1a2ra
+2t1a1r
+2t1arc
+t1arz
+ta2s
+t1a2ut
+ta1u
+t1a1zo
+t2c
+1t
+2t12g.
+t1l
+t2p
+t11po
+2t12rad
+t1ra
+2t12ra1i
+t1ram
+2t12r
+2t1rb
+2t1rn
+2t12ro
+2t1rt
+2t12ru
+12t12ss
+t1s
+t2s3z
+2t1tf
+2t11tu
+t1bl
+t1br
+1t1bu
+t1dr
+t1e2c
+1te
+t1ej
+t1ell
+telle3n2r1z
+2t1elle1n
+tel1le
+telle2n1rz
+t1eln
+t1elv
+2t1emb
+t1eml
+t1eng
+te2r
+te1ri2
+te2rik
+t1e2r
+t1ex
+t12d
+1t
+t1e2
+t2g
+t11ge
+2t11g
+t2kaj
+t1ka
+t2k1a2l
+t2kas
+t2ke
+tk1em
+tk1es
+t2kol
+t1ko
+t2k1
+t12l
+t2p
+2t1rb
+2t12ri
+2t1rr
+2t1rz
+t2t12
+1tfs
+t1f
+t1fr
+t1gr
+t2h2i.
+t1hi
+t2hi1a
+1thid
+ti2ag
+1ti
+ti1a
+ti2al
+ti2d
+ti2g
+2t1i1g
+t1ill
+2t1ing
+2t1i2onn
+ti1o
+2t1i2o1no
+2t1i2ont
+t1i2pa
+2t1i1r
+t1isk
+t1ist
+2t1i2ta
+2t1i1z
+2t1izm
+t1g
+1t
+2t12r
+t12v
+1tkel
+t1ke
+t1kl
+t1k2r
+tle2g1
+t1le
+tle1ge2
+tmt2r
+t1m
+t1oj
+1to
+to2kol
+to1ko
+t1oko2l.
+t1o2koz
+t1ok1ta
+2tolj
+2tolt
+t1oml
+t1ont2
+t1op
+to2ra2n
+to1ra
+to2ras
+to2rl
+to1r
+to2re2
+to2ris
+to1ri
+to2r1ol
+to1ro
+t1or1z
+2t1o2x
+ti2ko
+1t
+t1i
+t1p2
+t11ri
+t1b
+1t
+t2l
+t11l
+t1ml
+t1n
+t1t
+2t12v
+t12z
+t12r
+1t
+t1pl
+t1pr
+t1ps
+t2ril
+t1ri
+t1sk
+t1sl
+t1sm
+t1sp
+t1sr
+t1st
+1t1s1z
+ts2z
+1tte1ki
+t1te
+t3t2
+tt2t1e2lem
+tt1te
+ttte1le
+t1t2r
+2t1udv
+1tu
+2t1ug
+2t1uh
+2t1uj
+tu2min
+tu1mi
+tu2n
+2t1u2r
+tu2s1ze
+tus2z
+2t1u2t
+t1j
+1t
+2t12r.
+2t1rb
+2t1rh
+t11ri
+2t1rn
+2t12ro
+2t1rr
+2t12s
+2t1g
+1t
+t1l
+2t1t
+2t12v
+t1r
+1t
+1tvr
+t1v
+1tvev
+t1ve
+1u
+u2ga
+u2go
+u2n
+u2no
+u2n
+u2nu
+u2s2z
+u2ta
+u2t
+1
+2s2z
+1
+2ge
+2g2y
+2le
+2l
+2l
+2l
+2l
+2r
+2t
+2ti
+2t
+2t
+2t
+2v
+1
+v1adm
+1va
+2v1ajk
+v1ak1t2
+v1alk
+v1alt
+v1asp
+va1st2
+va1s2z2
+va1t2
+2v1a2u
+v1a1zo
+v1ls
+1v
+v11te
+v1tf
+2v1th
+2v1tj
+2v1tk
+2v11tu
+ve2g2s2z1
+1ve
+ve1g
+2v1e2l
+ve1l1
+v12de
+1v
+v1dr
+2v12ri
+2v1r1te
+2v1r1t
+v1fr
+2v1i1ga
+1vi
+2v1i1g
+2v1ind
+2v1inf
+2v1ing
+2v1int
+2v1i2r
+2v1i1ro
+2v1i2si
+v1isk
+v1ism
+v1izm
+v1i1zo
+2v1ob
+1vo
+2v1olv
+2v1op
+2v1os2z
+v11r
+1v
+v1r
+1v
+v1s
+v1v
+v1r
+1v
+v1pr
+v1sk
+v1sp
+v1st
+v1tr
+2v1ug
+1vu
+2v1ur
+2v12s2z
+1v
+v2t
+2v11ti
+2v11to
+v1g
+1v
+v12z
+2z1abl
+1za
+2z1abs
+za2dal
+za1da
+za2d1e2
+za2dott
+za1do
+za2d
+z1ajt
+2z1akc
+2z1a2k
+2z1ak2t.
+2z1ak1ta
+2z1ak1t
+2z1ak1tu
+z1a2lap
+za1la
+2z1a2le
+2z1alk
+za2n
+2z1a1na
+2z1a1no
+2z1an2y
+2z1a2p
+z1a2r
+2z1arc
+2z1arm
+2z1as2s2z
+2z1aszt
+zas2z
+za2t1a2l
+za1ta
+z2a2tan
+za1te2
+za2t1el
+za2t12r.
+z2atr
+za1t
+za2t1rv
+za2ts
+za2tik
+za1ti
+za2t
+2z1at2y
+2z1a2u
+2z12g
+1z
+2z12l
+2z12ra1i
+z1ra
+2z12rak
+2z12ram
+2z12ras
+2z12rat
+z2rr
+z1r
+z2rt
+2z1rb
+2z1rc
+2z1rd
+2z12r
+2z1rf
+2z12ri
+2z1rjb
+zr1j
+2z1rjv
+2z1r1ka
+zr1k2
+2z12rokk
+z1ro
+2z12rokr
+2z1rp
+2z1r1r
+2z12runkn
+z1ru
+2z12runkr
+z3ru2s.
+z12rus
+zs3s
+2z12ta
+2z12t1
+2z1tb
+2z12t1e2
+2z11t
+2z1th
+2z1tr
+2z1ts
+2z11t
+2z1z
+z1bl
+z1d2r
+z1ef
+1ze
+z1e2g
+z1e2m
+z1ep
+z1e2r
+z1e2s
+z1e2t
+z1ex
+z1e2z
+2z1g
+1z
+2z12l
+2z12p
+2z12r.
+2z11r
+2z1r1te
+2z1r1t
+2z1r1t
+2z1rz
+2z12te
+2z11ve
+2z11vi
+z1fl
+z1fr
+z1gr
+2z1i2d
+1zi
+2z1i1g
+2z1i2kon
+zi1ko
+2z1ill
+2z1i1m
+2z1i1mi
+z1imp
+2z1inf
+2z1ing
+2z1inj
+2z1int
+2z1i2par
+zi1pa
+2z1i1r
+2z1i1ro
+zi2s1e
+zi2s12
+zis3s2
+zi2s1
+zi2s1z
+zis2z
+zi2z
+2z1izm
+z1i1zo
+z1j
+1z
+z12v
+z1k2l
+z1k2r
+2z1ol1da
+1zo
+zolks2z1
+zo1l
+zol2ks
+zol1k
+2zoltal
+zol1ta
+2z1ol1t
+2z1oml
+2z1ont
+2z1o2r
+2z1os2z
+zi2ko
+1z
+z1i
+2z12l.
+z12r
+2z11ri
+z1s2p
+z1s2z
+z1b
+1z
+z1d
+z12l
+z1m
+z1n
+z1s
+z12t
+z12v
+z1z
+z12r
+1z
+z1pl
+z1p2r
+2zsab
+z2s
+1z1sa
+2zs1a2d
+2zs1a2g2
+2zs1ajt
+2zs1akn
+zs1a1la
+zs1alk
+zs1all
+2zs1a1mu
+zs1an2y
+2zsar
+zs1a1r
+2zsat
+2zs1a2u
+2zs1ll
+1z1s
+2z3s2r.
+2z1se
+z3seb
+zs1e2c
+zs1ef
+zs1eg
+zs1e2l
+zs1e2m
+zs1es
+2zsj
+1z1s
+2zs12k
+zs11ne
+2zs11re
+2zs11ri
+zs2t
+2zs11te
+12zsi1a
+1z1si
+2zsi1de
+zsi2g
+2z2s1i1ga
+2z2s1i1g
+2z2si1ge
+2zsimm
+2zs1ing
+2zs1int
+2z2sinv
+2zsi1
+2zsip
+zs1isk
+2zs1i1ta
+2zsiz
+2z1s12
+2z3sor
+1z1so
+z3sh
+1z1s
+zs12r
+2z1s
+2z1s12
+zs1s
+2zs1uj
+1z1su
+2zs1ut
+2z2s1to
+1z1s
+2z1s
+zs12v
+2z3s
+z3s1z
+zs2z
+z1t2r
+2z1ud
+1zu
+2z1ug
+2z1uj
+2z1u2r
+2z1u2t
+2z1j
+1z
+2z1r
+2z12g
+1z
+z2l
+z1r
+z12z
+z1ya
+z1y
+z1yi
+z3z1se
+z2z2s
+2b.
+1ba
+baa2d
+ba1a
+ba2b1a2dat
+1ba1ba
+baba1da
+ba2b1ajk
+baba1k2
+ba2b1a1ra
+b2abar
+ba2b1arc
+ba2b1aszt
+babas2z
+ba2b1br
+b2abb
+ba1b
+bab2c
+ba2b11c1si
+babc2s
+ba2b1g
+bab1ll
+ba2b12ro
+ba2btv
+ba2b1rc
+b2abr
+ba1b
+bab2t
+bab11te
+ba2bv
+ba2bik
+ba1bi
+ba2b1i2n2a.
+babi1na
+ba2bo1la
+ba1bo
+bab1old
+ba2b12r
+ba1b
+ba2b1ult
+ba1bu
+ba2b
+ba2c3hu
+bac2h
+ba2cs1a2p2s.
+bac2s
+ba1c1sa
+bacsa1p
+ba2csor
+ba1c1so
+2b1a2dag
+ba1da
+ba2das
+2b1a2da1to
+ba2de2g
+ba1de
+ba2d1e2s
+ba2dog
+ba1do
+2b1a2do1m
+ba2dd
+ba1d
+ba2d1i
+ba2dj
+ba2dk
+ba2dt
+ba2duj
+ba1du
+ba2ds
+ba1d
+bae2gs2z1
+ba1e
+bae2g
+bae2r
+ba2p
+ba1
+ba1fl
+ba1f2r
+ba2g2a.
+ba1ga
+ba2ga1i
+ba1g2n
+ba1g2r
+2b1ag2y.
+bag2y
+bai2z
+ba1i
+ba2jag
+ba1ja
+ba2j12ru
+b2ajr
+ba1j
+ba2j12to
+2baj1k
+ba2jo2kt
+ba1jo
+bajo1k
+ba2j12r
+ba1j
+ba2j
+ba2j
+ba2k1a2p
+b2akap
+ba1ka
+2bakas
+ba2kaszt
+bakas2z
+2ba2kc
+ba1k
+bak12c2s
+bak1ll
+2bakc
+ba2keg
+ba1ke
+ba2k12r.
+ba1k
+ba2k11ri
+bak1k
+ba1k2li
+ba1k1lu
+ba2k1o2v
+ba1ko
+ba1k2ri
+bak1t2
+2b1ak1tu
+baku2r
+ba1ku
+bak1u1ra
+bak1u1r
+ba2ky
+2b1alakz
+ba1la
+2b1a2lan2y
+2b1a2ll
+ba1l
+b2a2l1e2s
+ba1le
+ba2l1
+bal2lak
+bal1la
+bal2lan
+bal2ll
+bal1l
+bal2l1s
+bal2lz
+bal1le2
+bal2leg
+bal2l1el
+bal2lem
+bal2les
+bal2l12l
+bal1l
+bal2lin
+bal1li
+bal2lr
+bal1l
+ba2lol
+ba1lo
+bal2t
+bal2tiz
+bal1ti
+ba2lud
+ba1lu
+2b1amp
+2banal
+ba1na
+2b1a2nat
+bans3s
+ba1n
+ban2c1e2
+banc3s
+2b1ang2y
+ban2kab
+ban1ka
+ban2k1a1da
+ban2k1a2d
+ban2k1a2d2.
+banka1d
+ban2k1a2l
+ban2kar
+ban1ke2
+ban2ker
+ban2kp
+ban1k
+ban2krd
+ban2kir
+ban1ki
+ban2kol
+ban1ko
+ban1ku2
+ban2kut
+ba2ny
+ban2y
+bao2k
+ba1o
+bao2l
+ba2r
+ba1
+ba1p2l
+b2a1p1ro
+2b1ar2c.
+2b1ar1c
+2b1arcn
+2b1ar1co
+2b1arcr
+bar2csad
+barc2s
+bar1c1sa
+bar2csal
+bar2csan
+bar2c1s
+2b1ar1c
+2b1ar1gu
+baro2ma
+ba1ro
+2b1ar1t
+basg1g
+ba1s
+ba2seb
+ba1se
+ba1s2l
+ba1s2m
+ba1s1ni
+2b1as1pe
+ba1s2p
+bas3s1ze
+bas2s2z
+b2a1s2ta
+b2a1s2t
+2b1asztag
+bas2z
+basz1ta
+ba2t1es1ti
+ba1te
+bat2t1e2lem
+b2att
+ba1t
+bat1te
+batte1le
+ba1t2r
+ba1t1re
+b2a1t1r
+ba2ud
+ba1u
+2b1a2ul
+bau2r
+2b1a2vat
+ba1va
+ba1yi
+2b1a2zo
+1b
+b2b1ass
+b1ba
+b2bl
+b1b
+b2b1es
+b1be
+b2bik
+b1bi
+b2b
+b2b1
+b2csor
+bc2s
+b1c1so
+b2c1s
+2b12ga
+b12g
+b2gyal
+bg2y
+b1gya
+b2gyar
+b2gyott
+b1gyo
+b2gy
+b2gy
+b2j1e2
+bj2n1
+b2j12
+b2j12
+bj2t1a2k
+bj1ta
+b2j
+bkos1
+b1ko
+b2laj
+b1la
+b2l1ap
+b2l1e2
+b1l2
+b2l1j
+b2li2d
+b1li
+b2l1ing
+b2l1i2o
+2b1l1l
+2b1l1lo
+2b1llv
+2blm
+b2l
+b2l
+b2lyad
+bl2y
+b1lya
+b2ly1al
+b2ly1a2n
+b2ly12z
+b1ly
+b2ly
+bni2as
+b1ni
+bni1a
+bn2r
+bnya2i1
+bn2y
+b1nya
+bnya1i
+b2po
+2b12rad
+b1ra
+2b12ra1i
+b2r1aj
+2b12ram
+b2rap
+b2ras
+2b2ra2t
+2b12rb
+b1r
+b2r2g
+b2rr
+b2r1s
+2b12rt
+br2das
+br1da
+br2d1
+br2de
+b2r1e
+b2rn
+b1r
+2b12ri1
+b1ri
+b2r1i2o
+b2r1i2p
+b2r
+2b1rn2y
+b2r12n2.
+b1r
+br1n
+2b12r2u.
+b1ru
+2b12ruf
+2b12rug
+2b12ruh
+2b12ruj
+2b12ruk
+2b12rur
+b1r1u2r2a.
+bru1ra
+2b12rus
+2b12rut
+2b12ruv
+2b1r
+b2rr
+b2r
+b2s12r
+b1s
+b2se
+b2sis
+b1si
+b2sz1ak
+bs2z
+b1s1za
+b2sza2n
+b2sza2s
+b2sz1l
+b1s1z
+b2sz12ru
+b2s1ze
+b2szil
+b1s1zi
+b2szi2p
+b2s1z
+b2s1z
+b2s1z
+b2t1a2k
+b1ta
+b2t1al
+b2t12
+2b12t1e2
+b2t
+b2t
+bb1a2da
+b1ba
+bb1add
+b2b1a2kas
+bba1ka
+b2b1alk
+b2b1als
+b2b1a1lu
+b2b1alv
+b2b1a2n2y
+b2b1ap
+b2b1a2ra
+bba2t
+b2b1a2u
+bb1b
+b1b
+bb2gyas
+bbg2y
+bb1gya
+b2b1ll
+b2b1lm
+b2b1p
+bb1rn
+bb12ru
+b2b12s
+bb1dr
+bbe2g
+b1be
+b2b1e2kn
+bbe1k
+b2b1elv
+b2b1emb
+bb1eng
+bb1erj
+bb1ern
+bb1e2r
+bb1e2r
+b2b1es1t
+b2b1etn
+b2b1ex
+b2b1g
+b1b
+bb12l.
+bb11le
+bb1lh
+b2b1lj
+bb1ln
+bb1lt2
+bb1lv
+b2b1p
+bb1rl
+b2b1rm
+b2b1r1t
+bbrt2
+bb1rv
+b2b11vi
+bb1fr
+bb1i2de
+b1bi
+b2b1i1ga
+bbi2gaz1
+bb1il1la
+b2b1ind
+b2b1int
+b2b1inv
+bbi2tat
+bbi1ta
+b2b1it1t2
+b2b12r
+b1b
+b2b1v
+bb1kl
+bb1kr
+b2b1okt
+b1bo
+bb1ol1t
+b2b1olv
+b2b1op
+bb1ott
+b2b1b
+b1b
+bb12r
+b2b12m
+b1b
+bb2r
+bb11r
+b2b1s
+bb11ri
+b1b
+bb1rz
+b2b12s
+bb1pl
+bb1pr
+bb1sk
+bb1sp
+bb1st2
+bb1tr
+b2b1ud
+b1bu
+b2b1u2g
+b2b1uj
+bbu2r
+bb1u1ra
+b2b1u2t
+bbgs1
+b1b
+bb1g
+b2b1j
+b2b12s
+b2b1g
+b1b
+b2b1r
+b2b1z
+bb12z
+b1b
+bb2v
+bda2cs1a2p
+b1da
+bdac2s
+bda1c1sa
+bda1d2
+bda1p2
+bda1s2
+bdas2z2
+bda1t2
+bd2r
+bd2ro
+bd2r
+1be
+bea2d
+be1a
+bea2j
+bea2k
+bea2l
+bea2n
+bea2r
+bea2s
+be2a2t1e
+be2a1ti
+be2a2tin
+be2atk
+be2atl
+bea2v
+be2j
+be1
+be2s
+be2z
+be1b2l
+be1b2r
+be2csar
+bec2s
+be1c1sa
+be2cs2r
+be1c1s
+be2csrt
+be1c1s
+be2cs12te
+be2dn
+be1d
+be2d2z
+bee2l
+be1e
+beel1le2
+bee2set2t.
+bee1se
+be2r
+be1
+be1fl
+be1f2r
+begs3s
+be1g
+be2gs2z1
+be1g2r
+be2gyel
+beg2y
+be1gye
+b1egyl
+bei2g
+be1i
+bei2s
+be2r
+be1
+be2j1elt
+be1je
+2bejt
+2b1e2k2e.
+be1ke
+beke2c1sa
+bekec2s
+2b1e2k1t
+be1k
+be1k2r
+be1k1ri
+be1k1r
+be1k2v
+be2ll
+be1l
+bele12
+be1le
+bel1els
+be2lemz
+bele1p2r
+belet2
+bele1tr
+be2l12k
+be1l
+be2l12r.
+be2l12re2n
+bel1re
+be2l1rr
+be2l
+belmeg1
+bel1me
+be2ll
+be1l
+2b1e2l1a
+be1l
+be2lr
+bel1p2
+2bemel
+be1me
+bemene2t1e2l1
+beme1ne
+bemene1te
+bemenete1l
+2b1eml
+b1e2mus
+be1mu
+be2n1l
+be1n
+be2n1k
+be1n
+ben2n1a2
+ben2n
+ben2n1e2r
+ben1ne
+ben2ng
+ben1n
+be2ny1e2g
+ben2y
+be1nye
+beo2k
+be1o
+beo2l
+beo2m
+be2v
+be1
+be2r
+be1
+be2p2e.
+be1pe
+be2ped
+2b1e2p
+be1p2l
+be1p2r
+be2r1ad
+be1ra
+ber1a1l
+ber1all
+bera2n
+ber1an2y
+be2r1a2p
+be2r1a2r
+ber1ass
+be2r1a2t
+be2r1av
+be2raz
+be3rg
+be1r
+ber1ll
+ber12r.
+2b1er1d
+ber1e1g
+be1re
+ber1eg2y
+be2r1e2k2e.
+bere1ke
+bere2k1eg
+be2r1e2ke1i
+be2r1e2k1
+bere1k
+be2r1e2kig
+berek1i
+be2r1e2kk
+be2r1ell
+be2r1elm
+be2r1eln
+bere1l
+be2r1e2m
+be2r1eml
+be2r1e2p
+be2r1e2r
+be2r1e2s1z
+beres2z
+be2r1e2tet
+bere1te
+be2rg
+be1r
+be2r1kk
+ber1ss
+ber1in1g
+be1ri
+be2r1ism
+be2r1ist
+ber1i2s1zo
+beris2z
+ber1old
+be1ro
+be2ror
+ber1os2z
+be2rl
+be1r
+be2r12r
+be2r
+2b1erd
+ber12s.
+ber12se
+ber12si
+ber12s
+ber3s2
+berta2n12s
+ber1ta
+berta1n
+be2r1ub
+be1ru
+be2r1un
+be2rur
+be2r1ut
+be2r12g
+be1r
+ber2l
+be2r1ld
+be2r11l
+be2r1lt
+be2sem
+be1se
+2b1esl
+be1s
+2b1e2ss
+be1s1ka
+be1s1k
+be1s2l
+be1s2m
+2b1e2s
+be1s2p2
+bes1s1z1a
+bes2s2z
+bes1s1z1
+be1s2ta
+2bes1te
+2bes1t
+be1s2til
+bes1ti
+be1s1to
+2b1e2szet
+bes2z
+be1s1ze
+2b1e2szt
+be1s1z
+b1eszm
+besz2t1a2
+besz2t1
+bete2g12r.
+be1te
+bete1g
+bet2t1elb
+be1t
+bet1te
+bet2t1e2le2m.
+bette1le
+bet2telk
+be1t2hi
+be1t2ra
+be1t1r
+be1t2r
+be1t2ro
+beu2g
+be1u
+beu2t
+be2t
+be1
+be2ve1z
+be1ve
+2b1e2vol
+be1vo
+2b1e2v
+2b1ezr
+1b
+2b1br
+b2d1as
+b1da
+b2d1
+2b1d
+2bdh
+2bdj
+2bdl
+b2d1o
+b2d
+2bdr
+2b1d
+2bdv
+b2g
+bk1alk
+b1ka
+2b1k1s2z2
+b2l1akt2
+b1la
+b2l1a2n
+b2l1a2r
+b2l2l
+b1l
+b2l11to
+b2l12z
+b2l1ed
+b1le
+b2l1e2g
+b2lek
+b2l1e2r
+2b12let
+b2l12j
+b1l
+b2liz
+b1li
+b2l
+2blj
+b2l1o
+b2l
+b2l
+2b12l
+blt2
+bl1tr
+b2lul
+b1lu
+b2l
+b2l3yen
+bl2y
+b1lye
+b2lyin
+b1lyi
+b2p
+b2p
+2b12ra1i
+b1ra
+b2r1aj
+b2ral
+b2r1a2n
+b2rap
+b2rar
+b2r
+2b1rb
+2b1rh
+2b1rv
+2b1r1de
+b2re2b
+b1re
+b2r1ele1me
+bre1le
+b2r1e2le1m
+b2r1e2lemh
+b2r1e2lemk
+b2r1e2lemn
+b2r1e2lemr
+b2r1ell
+b2relm
+b2r1el1i
+bre1l
+b2r1eng
+bre2n
+br1es2s2z
+b2r1es2z
+b2r1id
+b1ri
+b2rir
+b2r
+b1r1ni
+b2r
+br1s
+brt2
+2brtelm2.
+b1rtelm
+br1te
+brtel1m
+b2rtelms
+2b1rts
+br1t
+br1tr
+b2rut
+b1ru
+b2r
+b2s1z1a2
+bs2z
+b22s1z
+b2s1z1o
+bta1s2
+b1ta
+2btel
+b1te
+b1t2h
+2b1tk
+2b1tt
+2b12v.
+b2vek
+b1ve
+2b12ven
+2b12ves
+b2vet
+b2v2i.
+b1vi
+2b1vn
+b2z1s
+bz2s
+bfej1els
+b1fe
+bfe1je
+bfe2len
+bfe1le
+bf2n
+b1f
+bf2la
+bf2r
+bf2re
+bf2ri
+bf2ro
+bg2ra
+bg2r
+bgy1k2
+bg2y
+b1gy
+bgy2k1l
+1bi
+bia2d
+bi1a
+bi2a1e
+bi2ag
+bia2la
+bia2u
+bia2v
+bi1br
+bi1da2
+bi2d1ad
+bi2d1al
+bi2deg
+bi1de
+bi2del
+2b1i2d
+bi2ed
+bi1e
+bie2l
+bi1fr
+bi2gaz
+bi1ga
+2b1i2gj
+bi1g
+2bign
+bi1g
+2b1i2hat
+bi1ha
+bik1a1la
+bi1ka
+bi2k1l
+bi1k
+bi2k1em
+bi1ke
+bi2kik
+bi1ki
+bi1k1lu
+bi2k12
+bi1k2ro
+bik1s
+bil1i1ma
+bi1li
+bilis3s
+2bil1l
+2b1il1l
+2b1il1lu
+bi2l
+bi2m2a.
+bi1ma
+2b1i2mi
+2b1imp
+bi2nab
+bi1na
+2b1i2nad
+bi2naj
+2b1i2na2t.
+bi2n1rb
+bi1n
+2b1in1d
+bi2n12te
+bi1n
+2b1in1k
+bin3n
+bi2n
+bi2o1a
+bi1o
+bi2o1
+bi2ob
+bi2oc
+bi2od
+bi2o1e
+bi2o1
+bi2of
+bi2o1g
+bi2ok
+bi2ol
+bi2om
+2b1i2on
+bi2or
+bi2r
+bi1
+bi2par
+bi1pa
+bi1p2r
+2b1i2ram
+bi1ra
+2b1i2rat
+2b1i2rn
+bi1r
+2birk1i
+bir1k
+2b1i2ro1d
+bi1ro
+2b1irr
+2b1ir1t
+2b1ir1t
+bis2hi
+2b1i2si
+2bism
+bi2s
+bi1s2p
+bis3s
+bi1s2to
+bit1a1r
+bi1ta
+bi2t1e2g
+bi1te
+bit1elh
+bit1elr
+bit1elt
+bite2r1a
+bi2t1ing
+bi1ti
+bi2t1int
+bi2t1i2o
+bi2t1on
+bi1to
+bit1t2
+bit1u1ra
+bi1tu
+bi2t1ut
+bi2s
+bi1
+bi2var
+bi1va
+2b1i2vs
+bi1v
+1b
+b2ja
+br2r
+b1r
+br1
+b2ve
+b2v
+b2v
+2b12z
+bk2p1e2r
+b1k
+bk1pe
+bks3s
+bk2li
+bk2lu
+bk2ra
+bk2r
+bk2re
+bk2r
+bk2ri
+bk2r
+bk2ro
+bk2r
+1b2labl
+b1la
+blai2k
+bla1i
+bla2k1a2d
+bla1ka
+bl2a2kal
+bl2a2k1an
+bla2k1tm
+bla1k
+bla2k1tt
+bla2kem
+bla1ke
+bla2kik
+bla1ki
+bla2k1ol
+bla1ko
+bla2k
+bla1p1e
+bla1p2l
+bla1s2t
+bls3s
+b1l
+bl2be
+ble2r1i
+b1le
+ble2t1ak
+ble1ta
+ble2t1a2n
+ble2t12
+ble2t1e2l
+ble1te
+ble2t1er
+ble2tes2z
+ble2t2l
+ble1t
+ble2t1rd
+ble2t1tk
+bletigaz1
+bleti2g
+ble1ti
+ble2t1i2ga
+ble2t1o
+ble2t12
+ble2tu
+ble2tz
+ble1t
+ble12
+bleves1s
+ble1ve
+bl2he
+bli2af
+b1li
+bli1a
+blia1k2
+bli2akr
+bli2as
+bli2of
+bli1o
+b1lja1na
+bl1ja
+bl2ne
+blok2k12
+b1lo
+blo2n1
+blon3n
+b2l11z
+b1l
+bl2re
+bl2r
+bl2t
+bme2g1o
+b1me
+1bo
+bo2a1
+bo1a
+bo2ab
+bo2ad
+bo2a1e
+bo2af
+bo2ah
+bo2aj
+bo2am
+bo2at
+bo2av
+bo2c1ak
+bo1ca
+bo2ce
+bo2c
+bo2c3h
+bo2c1s
+boc2s
+bo2e1i
+bo1e
+bo2g1a2k
+bo1ga
+bo2g1a2t
+bo2g12c
+bo1g
+bogs1s
+bo2g1e
+bo2g1os2z
+bo1go
+bog22s1z
+bo1g
+bog1s2z
+bo2gyo
+bog2y
+boka1p
+bo1ka
+2b1o2k
+b1o2koz
+bo1ko
+bok2szak
+boks2z
+bok1s1za
+bok2szal
+bok2sz1l
+bok1s1z
+bok2szel
+bok1s1ze
+bok1s1z2
+bok2szl
+bok2sz1in
+bok1s1zi
+bok2s1z
+bok2s1z1
+2b1ok1ta
+2b1o2la2j.
+bo1la
+bols1s
+bo1l
+2b1ol1d
+2b1o2lim
+bo1li
+bolo1g2
+bo1lo
+bol2t1e
+bol2t12
+bol2t12
+2b1olvas
+bol1va
+bom2b1e
+bo1na1
+bon1a1va
+bon2can
+bon1ca
+bon2c1e
+bon2c2h
+2bond
+bo2n1e2
+bo2n12r.
+bo1n
+bo2n1or
+bo1no
+bon2t1i
+bo2n
+bo2pe
+bo2r1a2d
+bo1ra
+bo2r1a1ka
+bor1akk
+bo2r1akv
+bo2r1a2l
+bora2n
+bor1an2y
+bo2rar
+bor1as2z
+bor1atr
+bo2r1a2u
+bo2r1av
+bo2raz
+bor12c2s
+bo1r
+bo2r1ll
+bo2r1z
+bor1d2
+bo2re
+bor1e2l
+bor1e2r
+bor1e2s
+bor1f2
+borfi21k
+bor1fi
+borfi1
+bo2r1i2ko
+bo1ri
+bo2r1il
+bo2r1int
+bo2r1isk
+bo2r1iss
+bo2r1ist
+bo2r1itt
+bo2r1iz
+bor1k2
+2b1ornam
+bor1na
+bo2r1ond
+bo1ro
+bo2r12r
+bo1r
+bo2r
+bo2r
+2b1or2r.
+2b1or1r
+bor2s1ep1r
+bor1se
+bor2sors
+bor1so
+bor1st2r
+bor2sl
+bor1s
+bor2st
+bor1t1re
+bor1t1r
+bo2r
+borvz1
+bor1v
+bor2z12rak
+bor1z
+borz1ra
+bor2z1sa
+borz2s
+bor2z3se
+2b1oszt
+bos2z
+bo2t1a2g2
+bo1ta
+bo2t1al
+bo2tar
+bo2tas
+bo2t1a2u
+bo2t1c
+bo1t
+bo2tr
+bo2t1e2
+bo2t1il
+bo1ti
+bot1inf
+bot1int
+bo2t1i2p
+bo2t
+bo2t12
+bo2t
+bo2tur
+bo1tu
+bo1t2
+bo2tr
+bo2t
+bo2t
+bo2u2l
+bo1u
+bo2ur
+bo2vi
+bo1ya
+bo1y
+bo1y
+bo1yi
+bo1yo
+bo1yu
+bo2za2r
+bo1za
+bo2zl
+bo1z
+bo2z1e2
+bo2zid
+bo1zi
+bo2z1i2p
+bo2z1ir
+bo2z
+bo2z1old
+bo1zo
+bo2z3s
+bo2z
+bo2z
+1b
+ba2d
+b1a
+b2g
+b1
+b2r
+b2b
+b2cal
+b1ca
+b2c2h
+b2c
+b1fl
+b1k2r
+bli2a
+b1li
+b1lm
+b1p2l
+b1p2r
+b2r1ad
+b1ra
+b2r1an
+b2rat
+2b1r
+b2rs
+br1sv
+b2reg
+b1re
+b2rel
+b2ri2g
+b1ri
+b2r1in
+b2ri2z
+b2r1ol
+b1ro
+b1r2
+b2rs
+b2r
+brt2
+b2r
+b1s2p
+b1s2z
+bzisks2z1
+b1zi
+bzis1k
+1b
+b2c2h
+b2l
+bl2c1s
+blc2s
+2bl1h
+2bli2g
+b1li
+2b1l1t
+2bl1t
+b2l
+b2ly1k
+bl2y
+b1ly
+b1ml
+b2n
+2b1nt
+b2ra
+b2r1e
+b2ro
+2b1s2s2z
+2b1tl
+2b1ts
+b2ve
+1b
+b2r1a2
+b2r12
+b2r1e2g
+b1re
+b2r1e2l
+b2r1em
+b2r1en
+b2r1e2r
+b2r12g
+b1r
+b2rk
+b2r1s
+b2ril
+b1ri
+b2r1ing
+b2rip
+b2r1i2s
+b2riz
+b2r1izg
+2brl
+b2r1o2
+b2r1l
+b1r
+b2r
+brren2
+br1re
+br1s2
+b2r1u
+b2r
+b2r12g
+b1r
+b2r12l
+2b1si
+bp2la
+bp2l
+bp2le
+bp2re
+bp2r
+bp2r
+bp2ro
+b1p2roj
+bp2r
+bra2k12
+b1ra
+bra2ks
+bra1k
+bra1p2
+1b2rat2y
+br2nag
+b1r
+br1na
+br2nas
+br2n1t
+br1n
+brnt2
+br2sz1l
+brs2z
+br1s1z
+br2s1ze
+b2ric
+b1ri
+bri2da
+bri2d
+bri2der
+bri1de
+1b2rig
+bri2no
+bri2d
+bri1
+bri2f
+bri2m
+bri2tel
+bri1te
+b2ro1s
+b1ro
+br2m1a
+b1r
+br2me
+1b2rum
+b1ru
+bs2g1el
+b1s
+bs1ge
+b1s2k
+bs2l
+bs2pe
+bs2pi
+bs2po
+bs2ta
+bs2t
+bs2ti
+bs2t
+bs2t
+bsz2r1a2da
+bs2z
+b1s1z
+bsz1ra
+bsz2f
+b1sz2k
+bsz2t
+bter1mo1
+b1te
+b1t2ra
+bt2r
+b1t2re
+bt2r
+b1t2ri
+1bu
+bu2c2h
+2b1udv
+bu2r
+bu1
+bu2g1i2
+2b1uj2j.
+2b1ujj2a.
+buj1ja
+2b1ujjad
+buj2j1a2da
+2b1ujja1i
+2b1ujjak
+2b1ujjam
+2b1ujjas
+2b1ujjat
+2b1uj1j
+2b1ujjb
+2b1ujjc
+2b1ujjd
+2b1uj2j1e2
+2b1uj1j
+2b1ujjf
+2b1ujjg
+2b1ujjh
+2b1uj1ji
+2b1ujjk
+2b1ujjl
+2b1ujjm
+2b1ujjn
+2b1uj1jo
+2b1ujjp
+2b1ujjr
+2b1ujjs
+2b1ujjt
+2b1uj1ju
+2b1uj1j
+2b1ujjv
+buk2j1e
+bu2maj
+bu1ma
+bu2mel
+bu1me
+bu2m1i2k
+bu1mi
+bu2m1i1na
+bu2mis
+bu2mol
+bu1mo
+2b1ural
+bu1ra
+2burn
+2b1u2r
+bu2se
+bu2sol
+bu1so
+bu1s2p
+bus3s1ze
+bus2s2z
+bu2szab
+bus2z
+bu1s1za
+bu2sz1aj
+bu2szal
+bu2szas
+bu2sz1l
+bu1s1z
+bu2sz12rak
+busz1ra
+bu2sz1rn
+busz1en
+bu1s1ze
+bu2sz1l
+bu1s1z
+bu2sz12p
+bu2szid
+bu1s1zi
+bu2sz1il
+bu2szim
+bu2szin
+bu2szip
+bu2sziz
+bu1s1z2
+busz1j
+busz3s
+buszt2
+busz1tr
+bu2s1z2
+1b
+b2j
+2b2r.
+2b12ri
+2brt
+2bs2z
+b2s1z
+b12ti
+b1tm
+1b
+b2d
+b2ge
+b2g2y
+b2ku
+2b1ld
+b2l12n
+b1l
+b2ne
+2b1r
+2b12te
+2b12t
+b12t
+2b12ve
+b2ze
+1b
+b2na
+b2n
+b2nel
+b1ne
+b2nem
+b2nes
+b2n1e2t2
+bn1n
+b2no
+b2n
+b2n12
+b2nu
+b2n
+b2ri
+b2v1e2
+b2z1a2
+b2z1
+b2zo
+b2z1
+b2z3s
+bv2nya2d
+b1v
+bvn2y
+bv1nya
+bv2ny
+by2te
+2c.
+1ca
+2c1abl
+ca1b2r
+ca2cl
+ca1c
+ca2ds
+ca1d
+2c1a2d
+ca2es
+ca1e
+ca2ne2
+ca1
+ca2p
+c2a1f1ro
+2c1agg
+ca2gya
+cag2y
+ca2gy1a2d
+ca2gyu
+2c1ajk
+2c1a2kad
+ca1ka
+ca2kc
+ca1k
+ca2k1z
+2c1akc
+cak2kol
+cak1ko
+cak2k1
+ca1k2ri
+cala2g1
+ca1la
+ca2lan
+ca2l1a2s
+2c1al1bu
+ca2l1es1te
+c2ales
+ca1le
+ca2l12l
+ca1l
+calne2kest
+c2aln
+ca2lne1ke
+cal12nekes
+cal1ne
+c2al2t
+cal11te
+c2a2lim
+ca1li
+ca2l1ip
+ca2lol
+ca1lo
+cal1os2z
+cal1p
+cal1s
+ca2l
+ca2nal
+ca1na
+ca2nar
+2c1a2ni
+can2ne
+ca2r
+ca1
+ca2p
+ca1p2r
+ca1p2s
+ca2ran
+ca1ra
+ca2rn
+ca1r
+2c1arc
+ca2ris
+ca1ri
+ca1s2p
+2c1as2s2z
+cast2
+c2a1s1to
+c2a1str
+2c1aszt
+cas2z
+ca2ta1u
+ca1ta
+2c1atl
+c1a2uk
+ca1u
+cau2n
+ca2u1to
+ca2vat
+ca1va
+2c1a2zo
+1c
+2c1br
+c2ga
+c2g
+c2g2y
+c2la
+c1l1l
+2c1lm
+c2ne
+c2nt
+c1n
+c2nir
+c1ni
+c3p2a3
+2c12po
+2c12rad
+c1ra
+2c12rak
+c2r1as
+c2ri1a
+c1ri
+c2ri1
+c2r1i2n
+2crk
+2c1rp
+2c12r2u.
+c1ru
+2c12ruh
+2c12rus
+c2ss
+c1s
+2c12s
+2c1sv
+2c12sza1i
+cs2z
+c1s1za
+2c12s1zo
+2c12t1a2
+c1th
+2c12t1i2
+2c1tm
+2c1tr
+2c1tt
+2c12t
+2c1tv
+cb2lo
+cb2ra
+c2c1a2j
+c1ca
+c2c1ak
+cca2l
+cc1a1la
+cc1alb
+cc1a2n2y
+c2c1a2r
+c2c1a2u
+c2c1g
+c1c
+c2c1l
+cc1bl
+cc1ef
+c1ce
+c2c1elm
+c2c1ember
+ccem1be
+c2c1p
+c1c
+c2c12r.
+c2c1r1te
+c1c3he
+cc2h
+c1c3h
+c1c3ho
+c1c3h
+c1c3h
+c2c1i2m
+c1ci
+cci2n2a.
+cci1na
+cc1ing
+cci2v
+cci1
+cc1i2pa
+cc1i1ro
+c2c1i2z
+cc1r
+c1c
+cc1kl
+cc1k2r
+cc1o1
+c1co
+c2c1ov
+cc1n
+c1c
+cc1s
+cc1z
+cc1pl
+cc1pr
+c2c2s
+c3csap
+c1c1sa
+c3csar
+ccs1as
+c3csat
+ccs1l
+c1c1s
+c3csp
+ccs1s
+ccs1tl
+ccs1eg
+c1c1se
+ccs1elem
+ccse1le
+ccs1ell
+ccs1elv
+ccs1em1be
+c2cs1eml
+c3csep
+ccs1l
+c1c1s
+ccs1r1t
+ccs1iv
+c1c1si
+c3csop
+c1c1so
+c2cs1ork
+cc3so1ro
+ccs12l
+c1c1s
+ccs1nt
+ccs1s
+ccs1ut
+c1c1su
+c3c1s
+c3c1s
+cc3s1z
+ccs2z
+ccs3zen
+cc1s1ze
+cc3s1z
+cc1j
+c1c
+c2c1g
+c1c
+cc1r
+c1c3z
+cc2z
+c1c3ze
+cc3z2s
+cda2l12
+c1da
+cda2l1i
+cde2m1e2k
+c1de
+cde1me
+cde2m1el
+cd2ra
+cd2r
+1ce
+cea2l
+ce1a
+ce2at
+ce2a1u
+ce2r
+ce1
+ce2bd
+ce1b
+ce1b2l
+ce2c2h
+ce1c3he
+2c1e2d2z
+ce2gas
+ce1ga
+ce2g12k
+ce1g
+cegs3s
+ce2gi1na
+ce1gi
+ce2gor
+ce1go
+ce1g2r
+ce2gu
+ce2g
+c1eg2y.
+ceg2y
+c1egyb
+ce2gyen
+ce1gye
+ce2gyez
+c1e2gyi
+c1egym
+c1egyr
+2c1egys
+2c1e2k2e.
+ce1ke
+ce1kl
+2c1e2l1a2d
+ce1la
+2c1e2lg
+ce1l
+cel1r
+ce1l
+2c1elf
+2c1el1ha
+2c1el1j
+2c1e2l1os
+ce1lo
+c1e2l1a
+ce1l
+2c1e2ld2t.
+cel1d
+2c1e2lf
+2c1e2l1
+c1e2l1
+2c1el1s
+c1el1to
+2c1el1v
+2c1e2me1l
+ce1me
+2c1eml
+cenc1c
+cen2c1eg
+cen1ce
+cen2c3s
+2c1eng
+cen2s1g
+cen1s
+cen2ta1u
+cen1ta
+ceo2l
+ce1o
+ceo2r
+2c1e2p2e.
+ce1pe
+2c1e2pi
+ce1p2r
+cep2s1z1a2
+ceps2z
+cep2sz12p
+cep1s1z
+cep2s1zi
+cep2t1a2
+cep2t12r.
+cep1t
+cep2tim
+cep1ti
+cep2t1ol
+cep1to
+2c1e2rej
+ce1re
+ce2rz
+ce1r
+2c1e2r
+cer2t1a2
+cer1t2
+cer2tr
+cer2teg
+cer1te
+cer2t1e2l
+cer2t1emb
+cer2t1est
+cer2tl
+cer1t
+cer2t1n
+cer2t1ol
+cer1to
+cer2t1
+cer2tu
+cer1t2
+cer2t1z
+ce2sem
+ce1se
+2c1e2ss
+ce1s
+2c1e2s
+c1es2t12j
+ces1t
+ces2t1k
+ce1st1ra
+ce2t1e2g
+ce1te
+ce2t1es2s2z
+ce2t1es2z
+ce2t12t
+ce1t
+ce2t1ill
+ce1ti
+ce2t1i2n
+ce2tiz
+2cetn
+ce1t2ra
+ce2t1us
+ce1tu
+ce2td
+ce1t
+cet2z
+ce2t
+ce1
+ce2vs
+ce1v
+ce2v
+2c1e2zer
+ce1ze
+2c1ezre1de
+cez1re
+1c
+2c1br
+c2d2l
+c1d
+c2g1a2
+c2g12
+c2g1eg
+c1ge
+c2g1e2l
+c2ge2r
+cg1e1re
+cg1e1r
+c2g1esem
+cge1se
+c2ge1t
+c2ge1t
+c2g1k
+c1g
+c2gp
+2c12gs
+cg1g
+c2g1i2d
+c1gi
+cg1i1ga
+cgi2g
+c2g1i2g
+c2gim
+c2gir
+c2g1iz
+c1go2
+c2g1ok
+c2gol
+c2g
+c2g
+c2g1u2
+c2g
+c2g12g
+c1g
+c1ha2
+c2ha2l
+c2han
+c2har
+c2hed
+c1he
+c22h1e2g
+c2hi2r
+c1hi
+c2hu
+c2h
+2c1ks
+c2la
+cl1a2n
+c3lap
+cl1a2r
+c2lb
+c1l
+c2l2l
+c2l12r
+c2l12t
+c2l2e.
+c1le
+c2led
+c2leg
+c2le1i
+c2lek
+c2l1e2l
+c2lem
+c2l1emb
+c2le2n
+c2l1e2r
+c2l1e2s
+2c12let
+2c12lez
+c2lb
+c1l
+c2l12k
+c2lnk
+c2lp
+c2l1re
+c2ls
+c2li2m
+c1li
+c2lin
+c2lir
+c2l1is
+c2liz
+c2l
+clmeg1
+cl1me
+c2l1ol
+c1lo
+c2l
+c2l12
+c2l12
+clt2
+cl1tr
+c1lu2
+c2l1ut
+c2l
+2c12l
+c2p
+c2p
+c2rag
+c1ra
+2c1rd
+2c12rs
+c1r
+c2rin
+c1ri
+2c12rint
+c2ris
+cr1s
+2c1r1t
+2c1rt2.
+cr1t
+c2r
+2c1rz
+cs3s
+2c1szh
+cs2z
+2c1tk
+2c1tt
+2c12v.
+2c12vad
+c1va
+2c12v2e.
+c1ve
+2c12ve1i
+2c12vek
+2c12ven
+2c12ves
+2c12vet
+2c12vt
+c1v
+c2v2i.
+c1vi
+2c1vn
+2c12v
+cf2l
+cf2ra
+cf2ri
+cf2ro
+cg2ra
+cg2ri
+c2h
+1c1ha
+c3had
+2c3haj
+2c3ham
+2c3harc
+2c3harm
+2c3ha1t
+2c3hav
+1c1h
+2c3hm
+c3hn2y
+c3hz
+ch1bl
+1c1he
+2ch2e.
+2c3heg
+chegys1ge2
+cheg2y
+chegy1s
+2c3hek
+2c3hez
+1c1h
+1c1hi
+2c3hib
+2chi1e
+2c3hi1
+2c3hih
+2c3hi1ne
+2c3hi1
+ch1ip
+c3hir
+2c3hitel
+chi1te
+2c3hitet
+c3hi1
+1c1h
+1c1ho
+2c3hor
+2c3hoss
+1c1h
+1c1h
+1c1h
+ch1pr
+ch1sp
+1c1hu
+chu2r
+2c3huz
+1c1h
+1c1h
+1c1h
+1ci
+ci2a1a
+ci1a
+ci2a1
+cia1b2
+ci2a1ba
+ci2a1bo
+ci2abr
+ci2ac
+ci2ad
+ci2a1e
+ci2a1
+cia1f
+cia2fag
+cia1fa
+ci2afr
+ci2a1g2
+ci2ah
+ci2aik
+cia1i
+ci2a1
+ci2aj
+ci2akar
+cia1ka
+ci2akas
+ci2ak2n.
+cia1k
+ci2a1k
+ci2a1k2ri
+ci2a1la
+ci2a1l
+ci2a1le
+ci2a1l
+ci2a1lo
+ci2am
+ci2an2y
+ci2a1o
+ci2a1
+ci2a1
+ci2a1
+ci2a1p2
+ci2ar
+ci2a1s1za
+cias2z
+ci2a1s1z
+ci2a1s1z
+ci2a1s1zo
+ci2a1s1z
+cia1t2
+ci2a1ta
+ci2a1t
+ci2a1t
+ci2a1to
+ci2a1t
+ci2a1u2
+ci2a1
+ci2a1
+ci2a1
+ci2av
+ci2az
+ci2lan
+ci1
+ci1la2
+ci2nr
+ci1n
+ci21
+2c1i2deg
+ci1de
+ci2de1o
+2c1i2d
+2c1i2dom
+ci1do
+2c1i2d
+cie2r
+ci1e
+2c1ifj
+2c1i2g2a.
+ci1ga
+2c1i2gaz
+ci2g2e.
+ci1ge
+ci1g2r
+ci2ker
+ci1ke
+cik1ka2
+cik2kaj
+cik2kan
+cik2k1o
+ci1k2la
+2c1ik1r
+ci2l12t
+ci1l
+2c1il1lu
+ci2lol
+ci1lo
+ci2mit
+ci1mi
+2c1im1pu
+ci2n1al
+ci1na
+cin1d2
+ci2n1e2re
+ci1ne
+2cinf
+ci2nim
+ci1ni
+cin2kac
+cin1ka
+cin2k1a2l
+cin2krt
+cin1k
+cin2kol
+cin1ko
+cin2kor1s2
+cin2k
+ci2n
+cin2tar
+cin1ta
+cin2t1es
+cin1te
+cinus1s2
+ci1nu
+ci2n
+2c1inv
+ci2of
+ci1o
+ci2o1g2
+ci2ol
+ci3o1lo
+2c1i2onn
+cio2v
+ci21a
+ci1
+ci21
+ci2c
+ci3csk
+cic2s
+ci2dar
+ci1da
+ci21e
+ci2g
+ci21
+ci2kal
+ci1ka
+ci2kam
+ci21k
+ci21ke
+ci21kl
+ci2kom
+ci1ko
+ci2kos
+ci1k1r
+ci21ku
+ci2l
+ci2mag
+ci1ma
+ci21m
+ci21n
+ci21o
+ci21
+ci21
+ci21
+ci21p2
+ci21s
+ci21se
+ci2s1r
+ci1s
+ci21s2k
+ci2so2r.
+ci1so
+ci2so1ro
+ci1s2pec
+cis1pe
+ci1s2pek
+ci2s1t
+ci21s1zo
+ci1s2z2
+ci21t
+ci21
+ci21
+ci2zn
+ci1z
+ci2r
+ci1
+ci2rat
+ci1ra
+2c1i2rn
+ci1r
+2c1i2rod
+ci1ro
+2c1irt
+ci2s2i.
+ci1si
+2c1is1ko
+2c1ism
+ci1stad
+cis1ta
+ci2s1z1i
+cis2z
+ci2t1aj
+ci1ta
+cit2r
+ci1t
+cit12r.
+cit11ra
+cit11r
+cit11ro
+cit1ern
+ci1te
+cit1rr
+ci1t
+ci2tik
+ci1ti
+ci2t1ol
+ci1to
+ciu1mi2
+ci1u
+ciu2min
+ciu2m1i1o
+ciumkz1
+cium1k
+ciu2t
+2c1i2vad
+ci1va
+2c1i2vs
+ci1v
+1c
+c2ja
+c2j
+c2m1a2
+c2m1
+c2m1e2l
+c1me
+c2m12l
+c1m
+c2m
+c2mo
+c2m
+c2m
+c2mu
+c2r
+c2r
+c2v
+c2ve
+c2v
+c2z2s
+c2z
+c1ka1ka2
+c1ka
+c2k1alj
+c2k1arc
+cka2rom
+cka1ro
+c2k1g
+c1k
+ck1ll
+c2k1rn
+1c2k1e2g
+c1ke
+cke1p2
+ck22p1e2l
+c1k
+ck1pe
+c2k12r
+c2k1rl
+c2k1r1t
+ck1fl
+ck1fr
+ck1ill
+c1ki
+c2k1z
+c1k
+ck1kl
+ck1k2r
+ck2lu
+c2k1o2la
+c1ko
+ck1o2pe
+c2k1or1ro
+c2kor1ru
+c2kor1r
+c2k1o1u
+c2k1b
+c1k
+ck1ss
+ck2re1
+ck1re
+c1k2ri
+c1k2r
+c2k1g
+c1k
+ck1lt
+c2k1t
+c2k12v
+ck1r
+c1k
+ck2va
+cli2s
+c1li
+clu2b1a
+c1lu
+cme2g1o
+c1me
+cme1lo1
+cmelod2
+cnya2k
+cn2y
+c1nya
+cnyoms1s
+c1nyo
+cnyo1m
+1co
+co2z
+co1
+co2be
+co2e1u
+co1e
+co2kar
+co1ka
+co2k
+co2ke
+co2kl
+co1k
+co2k2p
+2c1o2k
+2c1o2laj
+co1la
+co2l11ro
+co1l
+2c1ol1da
+2c1ol1d
+2c1ol1d
+co2le
+co2l1ibr
+c2olib
+co1li
+co2li2m
+col1i1ma
+co2l1i2n2a.
+coli1na
+co2l1ing
+co2l1i2nu
+co2l1o2r
+co1lo
+2c1olvad
+col1va
+2c1olvas
+com1ba2
+com2bal
+com2b1e2
+com2biz
+com1bi
+com2bol
+com1bo
+com2b2r
+com1b
+com2b
+2c1oml
+2c1o2pe
+cop2f1
+co1py
+2c1orc
+2c1o2ri
+2c1orm
+co2rom
+co1ro
+2c1or1ro
+2c1or1r
+2corv
+2c1oskol
+cos1ko
+co2s1o2ku
+c2osok
+co1so
+cos3s
+costr2s1a2d
+cos1t
+costr1sa
+cos3z2s
+cos2z
+2c1oszt
+co2ul
+co1u
+co2un
+co2uv
+co2vi
+1c
+c12ni
+2c12r
+c12ri
+c2v
+1c
+c1l1t
+c1sv
+c1s2z
+c1tb
+c12te
+ct1en
+ct1ezred
+cte2z
+ctez1re
+ct1ezres
+ct1ezret
+c12t
+c1tf
+c1th
+c12ti
+c1tk
+c1tm
+c1tn
+c1tr
+c1ts
+c1tt
+c12t
+c12v.
+c2z
+1c
+c2r
+cp2la
+cp2ra
+cp2re
+cp2r
+cp2ri
+cp2ro
+cp2r
+c2s
+1c1sa
+2csabl
+2cs1a2dat
+csa1da
+2cs1a2d
+2cs1a2d
+2cs1akc
+csa2lakj
+csa1la
+csa2la1p
+2c2s1a2l1
+csa1l
+2csalt
+2c2s1alb
+2cs1alg
+2cs1alk
+cs1al1le
+2c2s1alm
+csa2lomb
+csa1lo
+cs1amb
+2csant
+csa2pl
+csa1p
+2c3sap1ka
+2csap1k
+csa2por
+csa1po
+2cs1a2p1k
+csa1p
+2cs1a2pkr
+2cs1a2psab
+csap1sa
+2cs1arc
+2csarg
+2csark
+2c2s1arz
+2cs1ass
+csa2t12r
+csa1t
+csava1r1a2
+csa1va
+cs1a1zo
+1c1s
+cs2be
+2csf
+2csg
+cs12gak
+cs1ga
+cs12gu
+2cs12rad
+cs1ra
+2cs12rak
+2c2s12ram
+2c2s12rat
+cs2rt
+cs1r
+2cs1rn2y
+cs2rot
+cs1ro
+cs12ruk
+cs1ru
+2c1s11s
+2c3s1si
+2cs12s
+2cs12t12ss
+cs1t
+cst1s
+2c2s1tf
+2c2s1tm
+2cstr
+2c3s2v.
+2c3s1vo
+cs1bl
+cs1br
+cs1d2r
+1c1se
+2cse1b
+cs1e2ce
+cse2c1sa
+csec2s
+2cs1e2d
+2cs1ed2z
+c2s1eff
+cs1e2ges
+cse1ge
+2cs1e2ge2t.
+2c3se1g
+2cs1e2k2e.
+cse1ke
+2c2self
+2cs1el1l
+2cs1e2l1
+cse1l
+2cs1el1ta
+2cs1el1t
+2cs1eltet2t.
+csel1te
+2c2s1el2v.
+2c3sel2y
+2c2s1ember
+csem1be
+2cs1e2mel
+cse1me
+2cseml
+2cse1mu
+csen2d12
+cse2nis
+cse1ni
+cse2n3yen
+csen2y
+cse1nye
+2cs1enz
+cse1p2r
+cse2rl
+cse1r
+cse2r1e2ped
+csere1p2
+cse1re
+csere1pe
+2cse2r
+2c2se2r
+2c2s1e2s
+2c2s1eszm
+cses2z
+cse2tz
+cse1t
+2c2s1e2v
+2cs1ex
+1c1s
+2csg
+c3s2g.
+c3sgb
+c3sg3g
+c3sgh
+c3s1gi
+c3sgn
+c3sgr
+2c2s12hes
+cs1he
+2c2s1hs
+2cs12ka
+2c2s1ks
+2cs11le
+cs2m1a
+2cs12nekb
+cs1ne
+2c2s12ne1ke
+2cs12ne1k
+2cs12nek1k2
+2cs12nekr
+2cs12neks
+2cs12nek1t2
+2cs12ne1k
+2c2s12p
+2c2s12p
+2cs1r1de
+cs2rsk
+cs1r
+2cs1rtettel
+csr1te
+csrtet1te
+2c3sr2v.
+2c3srvb
+2c3srvh
+2c3srvr
+2c3srvv
+2c2s1rz
+cs2s1za
+css2z
+cs2tab
+cs1ta
+2c2s12v.
+2c2s12vek
+cs1ve
+2c2s1vn
+2c2s1vr
+2c2s1vv
+cs1fr
+cs1gl
+cs1gr
+1c1si
+csi12
+2c2s1i2d
+2c2si1ge
+2c2s1i2g
+2c3si1m
+2c3simog
+csi1mo
+2csim1po
+c2simp
+2cs1i2n2a.
+csi1na
+2c2s1i2nas
+2c2s1ind
+2cs1inp
+2c2s1inv
+2cs1i2o1no
+csi1o
+2c3si1p
+2c3si1v
+2c2s1i2v
+1c1s
+2cs1ki
+2c3srb
+2c3srj
+cs12r
+2cs12v
+2cs1ze
+2c2s1zl
+cs1zn
+2cszt
+c2s11z
+cska1s
+cs1ka
+cskas2z2
+cs1kl
+cs1kv
+c3s2lg
+cs1l
+1c1so
+2cs1o2
+2cs1obj
+cso2k1
+2c3sok2k.
+2c2s1o2koz
+cso1ko
+2c2s1o2laj
+cso1la
+csolatks2z1
+csolat1k2
+csolat1k
+2c2s1ol1da
+2c2s1ol1d
+2cs1old2.
+c2sol1d
+2cs1oldk
+2cs1oldm
+2cs1oldn
+2cs1oldr
+2cs1oldt
+2cs1oldv
+2cs1o1li
+2c2s1ol1l
+2c2s1olvas
+csol1va
+cson2t1a2
+2cs1opc
+2cs1orc
+2cso1ri
+2csork
+2c3sorv
+2cs1oszl
+c2sos2z
+2cs1oszt
+1c1s
+cs11d
+cs2kes
+cs1ke
+cs2k12
+2cs11n
+cs1sh
+1c1s
+2cs1k1r
+cs1ml
+csn3n
+2c3s2r.
+c3s1re
+2cs1s2s2z
+2c2s12v.
+2cs12zn
+cs1z
+1c1s
+3cs2.
+3csb
+cs2h
+cs1
+csr1szb
+cs1r
+csrs2z
+csr11s1z
+2cs1rz
+cs2sz12ra
+css2z
+cs1s1z
+cs2sz2k
+cs1s1z
+cs2s1z
+3csv
+c3s2pek
+cs1pe
+cs1pl
+csp2r
+cs1ps
+cs1sl
+cs1s2p
+cs1s2t
+cs3s2z2
+c3s2tab
+cs1ta
+cs2top
+cs1to
+cst2r
+c3st1ru
+1c1su
+2c2s1udv
+2csug
+2c3su1ho
+c2s1ujj
+2cs1u1na
+2c2s1u2ni
+2c2s1u1ra
+2cs1u2r
+cs1u2tas
+csu1ta
+2cs1u1t
+c2s1u1t
+1c1s
+2cs1jhel2y
+csj1he
+cs1p2
+2cs1tn
+1c1s
+2csd
+2c3s3g
+2c2s12g2y
+2cs1nn
+cs12te
+2c3sv
+2cs1z
+1c1s
+csvgya2d
+cs1v
+csvg2y
+csv1gya
+csv2gy1a1da
+c4s3zac
+cs2z
+c1s1za
+cs3zaj
+csza2k
+cs3zam
+c3szl
+c1s1z
+c3szm
+c2s3zp
+cs3zt
+c3szz
+c3szer
+c1s1ze
+c3s1z
+c3sz2f
+c3s1zi
+c3s1z
+c3sz2l
+cs3zon
+c1s1zo
+cs3zn
+c1s1z
+c3s1z
+cs3z2s
+cs3zug
+c1s1zu
+c1s3z
+c3s1z
+c3s1z
+c3sz2v
+ct2ra
+ct2re
+ct2r
+ct2ri
+ct2ro
+ct2r
+1cu
+cuc1ci2
+cuc2cin
+cuko2r1a2
+cu1ko
+cula2te
+cu1la
+cu2l
+2c1und
+2c1u2no
+2c1u2ra
+2c1u2t
+1c
+c2j
+c12r.
+c1rr
+c12ti
+c2to
+1c
+c2ge
+c2g2y
+2c12l
+c2l
+c1nn
+c2re
+c2r
+c2r
+c2te
+c2t
+c2t
+c2ve
+c2ze
+1c
+c2z
+cv2a2ne2m
+c1va
+cva1ne
+cva2n2v
+cva1n
+cve2nv
+c1ve
+cve1n
+cven3n
+c2z
+1c1za
+cza2ib
+cza1i
+cza2i1
+cza2ih
+cza2ik
+cza2in
+cza2ir
+cza2it
+cza2iv
+1c1z
+1c1ze
+1c1z
+c3zh
+1c1zi
+1c1z
+1c1zo
+1c1z
+1c1z
+1c1z
+1c1zu
+1c1z
+1c1z
+1c1z
+1czy
+2d.
+1da
+daa2d
+da1a
+dat1
+da1
+2d1ab1la
+d2a1b1lo
+da2c1ir
+da1ci
+da2c2z
+da2dag
+1da1da
+dad1a1la
+2dada1to
+2d1a2d
+d2a1d1r
+d2a1d1ro
+dae2r
+da1e
+da2d
+da1
+da2p
+da2r
+da1f2l
+da1f2r
+da2g1e2l
+da1ge
+dag3g
+2d1ahh
+da2i2re
+da1i
+2d1a2jn
+da1j
+2d1ajt
+2d1a2kad
+da1ka
+dak2r
+da1k
+2d1akko1ra
+dak1ko
+d1ak1ku
+da1kl
+d2a1k2r
+da1k2ri
+2d1ak1tu
+dal1a2ga
+da1la
+dal1ajt
+da2lakj
+da2l1ak1ta
+dalakt2
+da2l1ak1t
+d1a2la1ku
+da2la1k
+2d1alakz
+da2l1a2l
+da2lapc
+da2lapk
+da2lapn
+da2lapr
+da2l1ap1s2
+da2lapt
+2d1a2la1p
+da2lar
+da2l1as2z
+da2latt
+da2l12g
+da1l
+da2l1l
+da2l12rak
+dal1ra
+da2l11r
+da2l1rb
+da2l1rn
+da2l1rr
+dal12s2z
+dale2l
+da1le
+dal1e1l
+da1l1e1le
+dal1ell
+dal1e2s
+d2ales
+dal2ke2
+da1l
+da2l12l.
+da2l12ne
+d2aln
+da2l12r.
+dal1f
+da2lid
+da1li
+da2l1i2ko
+d2alik
+da2l1ikr
+d2a2l1i2m
+da2l1i2nt
+dali1n
+da2l1inf
+da2l1ing
+da2l1inj
+da2l1int
+da2l1i2nu
+da2l1itt
+dali2z
+dal1i1zo
+2d1al1ji
+dal3l
+2d1al1lo
+dalo2m1e
+da1lo
+dalo1mo2
+da2l1or
+da2lr
+da1l
+dal1p2
+dal1ud
+da1lu
+da2l1ur
+da2l1u2s
+da2l1u2t
+dal2t
+da1l
+da2l11to
+dal1tr
+da2l
+2d1amc
+2d1amf
+2d1a2nal
+da1na
+2d1ang
+d1a2nyag
+dan2y
+da1nya
+2d1a2ny
+dao2k
+da1o
+da2r
+da1
+da2v
+2d1a2p2a.
+da1pa
+2d1a2pa1i
+da2pa1k
+da2pb
+da1p
+da2pd
+da2p1
+da2ph
+da2p1i
+da2pk
+da2pm
+da2pt
+da2pv
+2d1apj
+da1p2l
+da2p2.
+da1p
+2d1app
+d2a1p1ro
+da1p2s
+2dapt
+dara2be
+da1ra
+da2r1a2d
+d2arad
+dar1a1la
+da2r1ant
+da2r1a1zo
+da2r11ta
+da1r
+da2r1tf
+dar2c1e2
+dar2c3h
+dar2c1so
+darc2s
+2d1ar1c
+dar2d1a2l
+dar1da
+dar2d1
+dar2de2l
+dar1de
+dar2d1es
+dar2d12
+da2r1el
+da1re
+da2r1il
+da1ri
+darus3s2
+da1ru
+dar1u1ta
+da2r1
+da2sl
+da1s
+da1s2l
+da1s1pe
+2d1as2s2z
+d2a1s2ta
+da1szl
+das2z
+daszt2
+dasz2t
+2da1s1z
+da2tad
+da1ta
+da2t1akt
+d2atak
+da2t1akv
+da2t1a2la
+da2t1al1k2
+dat1a1pu
+d2atap
+dat1a1r
+d2atar
+dat1ass
+da2t1att
+da2taz
+da2t1ll
+d2atl
+da1t
+da2t1rad
+d2atr
+dat1ra
+dat2ramm
+dat2ramr
+da2t11ta
+da2t11t2
+da2t1e2lem
+da1te
+date1le
+dat1e2l1
+dat1e1l
+da2t1elk
+dat1ell
+da2t1e1l
+dat1elt
+dat1ern
+da2t1br
+da1t
+d2a2t12g
+dat1ret
+d2atr
+dat1re
+da2tr1te
+da2t1r1t
+da2t1rth
+da2t1rv
+da2tid
+da1ti
+dati2k
+da2t1i1ko
+da2tim
+da2t1inf
+d2atin
+dat1in1te
+dat1ist
+d2atis
+da2tiz
+d2a2t1r
+da1t
+dat11ve
+dat1k2
+datk2rok
+dat1k
+datk1ro
+2d1atlas
+dat1la
+da2t1os2z
+da1to
+da2tc
+da1t
+2datm
+da2t12r
+dat2s
+dat11s
+dat1t2
+da2t1u2t
+da1tu
+da2tt
+da1t
+da2tr
+da1t
+da2tya
+dat2y
+da2ty
+2d1a2uk
+da1u
+dau2n
+2d1a2ur
+dau2s
+dau2ta
+da2ut2.
+dau1t
+dau2t1p2
+da2t
+da1
+da2z
+2d1a2vat
+da1va
+2d1avv
+da1ye
+da1y
+2d1a2z.
+da2zl
+da1z
+2d1a2z
+da2zok
+da1zo
+da2zon
+1d
+2d12b
+2d1br
+d2c3ho
+dc2h
+d2f
+d2ga
+d2g
+d2g
+2d12g2y
+d2ll
+d1l
+d2lr
+d2l1e
+2d1lla2m.
+dl1la
+2d1lla1ma
+2d1lla1m
+2d1llamb
+2d1llamh
+2d1lla1mi
+2d1llamm
+2d1llamn
+2d1llamok
+dlla1mo
+2d1llamon
+2d1ll2amot
+2d1llamr
+2d1llat
+2d1l1l
+d2l
+d2ly1a2n
+dl2y
+d1lya
+d1ly2
+d2ly1s
+d2ny1a2d
+dn2y
+d1nya
+d2ny1al
+d2ny1a2n
+d2nyaz
+d2ny
+d2po
+2d12rad
+d1ra
+d2r1ag
+2d12ra1i
+d2r1a2j
+d2ral
+2d12ram
+d2r1a2n
+d2r1a2p
+d2rar
+d2r1as
+d2rat
+dr1atk
+d2r
+dr1l
+d2r1e2
+d2rb
+d1r
+2d12ri2a.
+d1ri
+dri1a
+d2rij
+d2ril
+d2r1i2p
+dr1isk
+dr1ism
+d2r
+d2rod
+d1ro
+d2r1ond
+d2r1ot
+d2r
+d2r
+dr1s2
+drt2
+dr1tr
+2d12r2u.
+d1ru
+d2ruk
+dru2s12g.
+d12rus
+dru1s
+dru2s12ga
+d2r2
+2d1r2.
+d2r
+d2r
+d2s1a2d
+d1sa
+d2sal
+d2sar
+d2s12g
+d1s
+d2s12rad
+ds1ra
+d2s1rh
+d2s12ru
+d12ss
+d2s12t1a2
+d2s1e2
+dsf2l12v
+ds1f
+dsf1l
+d2sim
+d1si
+d2sis
+d2sol
+d1so
+d2sor
+d2s2
+d2s1r
+d2s
+d2s
+ds3s1zi
+ds2s2z2
+dst2
+ds1tr
+d2su2t
+d1su
+d2s12
+d2szag
+ds2z
+d1s1za
+d2sza1ka
+d2szal
+d2szar
+d2szav
+d2sz1l
+d1s1z
+d2szr1k2
+d2sz12ro
+d2s1ze
+dsz1el
+dsz1em
+dsz1er
+d2szb
+d1s1z
+d2szi2p
+d1s1zi
+d2szir
+d2szis
+d2s1z12
+2d1szk1i
+dsz1k2
+dsz1k
+d2s1z1
+d2s1z
+dsz3s
+d2sz1us
+d1s1zu
+d2s1z1
+d2s1z12
+d2s1z1
+2d12ta
+dt1al
+2d12t
+2d1td
+d2t1e2
+2d12t
+2d1tf
+2d12t
+2d1tj
+2d1tk
+2d1tm
+2d1tr
+3d1tu
+2d12t
+2d1tv
+dba2l1
+d1ba
+dbe1e2
+d1be
+db2lo
+db2l
+db2ro
+db2r
+dc2lu
+dcsa2p12g
+dc2s
+d1c1sa
+dcsa1p
+dd2s
+d1d
+dd2r
+dd2r
+d2d2z
+d3dz2s
+1de
+de2a1a
+de1a
+de2a1
+de2ac
+dea2d
+de2a1e
+de2a1
+de2ag2y
+de2ah
+de2a1
+de2a1la
+de2a1l
+de2a1lo
+de2am
+dea2n
+de2a1o
+de2ap
+dea1s2z
+de2aszf
+de2at
+2d1e2b
+ded1ell
+de1de
+2d1e2dn
+de1d
+de2d12v
+de1d
+de1d1ra
+de2d12
+2d1e2d2z
+dee2s
+de1e
+de2r
+de1
+2d1eff
+de1fr
+de2g1a2l
+de1ga
+de2g1a2n
+de2g1l
+de1g
+2degd
+de2g1e2l
+de1ge
+de2ger
+de2g1k
+de1g
+deg2pe2lem
+de3g2pel
+deg1pe
+degpe1le
+de2g11ri
+de2gs
+deg1ss
+de2gs2z1
+deg3g
+de2giz
+de1gi
+2de1go
+de2gor
+de1g2
+de2g1l
+de2gr
+de2g1s
+2de2g
+2d1e2gye
+deg2y
+degyez1
+2degz
+2d1ehh
+deho2g
+de1ho
+de2if
+de1i
+dei2g
+de2r
+de1
+de2k1a2k
+de1ka
+de2kaz
+de2k1e2g
+de1ke
+de2kellen
+dekel1le
+de2kep
+dek1e2r
+de2k1es2z
+dek1kb
+de1k
+dek12ke
+de2k1l
+de2k11ri
+de2kr1te
+de2k1r1t
+de2k1rv
+de2k1rz
+de1k1lu
+dek1old
+de1ko
+dek1s
+2d1e2l1a2d
+de1la
+de2lef
+de1le
+2d1e2leg2y
+dele2m1a
+dele2m
+dele2meg
+dele1me
+d1e2lemek
+dele2mel
+de1lem1e1le
+dele2m1r1t
+dele1m
+dele2mu
+2d1e2le1m
+2d1e2lemz
+dele2t1a2
+2d1e2l1e2te1t
+dele1te
+2d1e2l12k
+de1l
+2d1e2ll
+dels3s
+2d1el1ho
+2d1elkez1d
+del1ke
+2d1elkez1d
+del2lal
+del1la
+del2l1an
+del2l1e2g
+del1le
+delle2l
+del2l1e1le
+del2lelk
+2d1elle1n
+2d1elle1ne
+del2l1ent
+del2l1e2r
+del2l12j
+del1l
+del2l12k
+del2l1in
+del1li
+del2l1is
+del2los
+del1lo
+del2lr
+del1l
+del2lr
+del1l
+2d1el1ma
+2d1el1n
+de2l1os
+de1lo
+2de1l
+de2ll
+de2lad
+de1l
+del1a
+2d1e2l1ka
+2d1e2lrej
+del1re
+2d1el1sa
+2d1eltet2t.
+del1te
+2d1eltr
+del1t
+2d1el2v.
+2d1el1v
+2d1elves
+del1ve
+2d1el1vo
+2d1elv2.
+del1v
+2d1elv1e
+2d1elvk
+2d1elvn
+2d1elvr
+2d1elvs2g.
+delv1s
+2d1elvsgb2e.
+delvsg1be
+2d1elvsgben
+2d1elvsg1b
+2d1elvs1ge
+2d1elvs1g
+2d1elvsg3g
+2d1elvsgh
+2d1elvs1gi
+2d1elvsgn
+2d1elvsgr
+2d1elvsgt
+2d1elv3s1g
+2d1elvt
+2d1elvv
+de2mad
+de1ma
+de2m1a2l
+de2maz
+de2m12l
+de1m
+dem1ern
+de1me
+de2mez
+de2m12rem
+de1m
+dem1re
+de2m1rm
+de2mi2m
+de1mi
+dem1ing
+dem1p
+de2mus
+de1mu
+dem2l
+de1m
+de2nal
+de1na
+2d1e2ner
+de1ne
+2deng
+denki2ben
+den1ki
+denki1
+denki1be
+denki2ne
+de2nol
+de1no
+de2n12
+dens1s
+de2od
+de1o
+de2of
+de2oj
+de2o1lo
+de2om
+de2ot
+de2p2e.
+de1pe
+2d1e2p
+de1p2re
+de1p2ro
+de1p2s
+de2rad
+de1ra
+der1a1ka
+de2r1a2la
+de2r1a2n
+de2r1ar
+de2r12g
+de1r
+de2r12r
+de2rs
+der1zt
+2d1er1d
+dere2c
+de1re
+2d1e2redm
+2d1e2re1je
+2d1e2rejn
+dere1j
+2d1e2rejr
+2d1e2rejt
+2d1e2reje2k.
+dere1j
+derej1e
+2d1e2rejn
+2d1e2rej2t.
+de2r1e2ke1i
+dere1ke
+der1e2le
+der1ell
+der1e2l
+der1elt
+de2rer
+de2r1e2s
+de2r1l
+de1r
+2derfelletek
+der1fe
+derfe1l
+derfel1le
+derfelle1te
+2derfelletn
+2derfellet1t2
+de2rid
+de1ri
+de2r1il
+de2r1i2m
+de2r1in
+de2r1i2p
+de2r1i2s
+der2nk
+der1n
+de2r1os2z
+de1ro
+de2r
+2d1er2.
+der12s.
+2d1ert
+2d1erv
+der1s2
+de1ru2
+de2rut
+de2r12g
+de1r
+de2r1ld
+der11le
+der1ltet
+derl1te
+dervis1s
+der1vi
+2de2s1a2
+2desg
+de2sip
+de1si
+2d1es1k
+2destes
+des1te
+de1s1to
+de2su2r
+de1su
+de1s2
+de2s1r
+2d1eszm
+des2z
+de2sz2.
+de1s1z
+de2t1k
+de1t
+de2ti1ka
+de1ti
+de2ti1k
+2d1e2v
+2d1evv
+de2xa
+de1xi2
+de2xin
+de2x
+de2x1o
+de2x
+2de1za
+de2zak
+de2zr
+de1z
+de2zil
+de1zi
+de2zin
+de2z1or
+de1zo
+dez1e2
+de1z
+dezks2z1
+dez1k
+2d1ezr
+1d
+2d1br
+d2dap
+d1da
+d2du
+d1fl
+d2g1a2
+d2g12
+d2g1e2b
+d1ge
+d2g1eg
+d2gp
+d1g
+d2g1rk
+d2gs
+dg1s2z
+dg3g
+dg1i1ga
+dgi2g
+d1gi
+d2g1i2g
+d2gin
+d2g
+d2g1ok
+d1go
+d2got
+d2g
+dg1s
+d2g1u2
+d2g
+d2g
+2d12hes
+d1he
+2d1hs
+2d12j.
+2d1jb
+d2k1ab
+d1ka
+d2kac
+d2k1a2d
+d2k1a2l
+d2k1a2n
+d2k1ap
+d2k1as
+d2k1a2u
+d2kaz
+d2k1g
+d1k
+d2k1rt2
+d2ks
+d2k11t1a2
+d2k1e2g
+d1ke
+dke2l
+d2k1e1le
+dk1ell
+dk1e1l
+d2k1elt
+d2k1er
+d2k1es2z
+d2k1e1ti
+d2kez
+d2k12j
+d1k
+d2k12k
+d2k12l
+d2k12r.
+d2k11te
+dk1is2z
+d1ki
+d2ki1v
+d2k
+dkkulc2s1
+dk1ku
+d2k1old
+d1ko
+d2kop
+d2k1or
+d2k1os2z
+d1k2
+d2kr
+d2k12v
+d1k
+d2kz
+d2k
+dk2rm
+dk1r
+d2k1ut
+d1ku
+d2lad
+d1la
+d2lam
+d2l12
+d2leg
+d1le
+d2le2l
+dl1e1l
+d2les
+dl1est
+2d12let
+d2li2m
+d1li
+d2li1o
+dlk2z1n
+dl1k
+dlk1z
+d2l1o
+d2l12
+2d12l
+d2l1u2
+d2lk
+d1l
+d2ly
+dl2y
+d2m1e2l
+d1me
+d2m1e2m
+dn1r1a2
+d1n
+2d12ne1ke
+d1ne
+d2ny1el
+dn2y
+d1nye
+d2nyid
+d1nyi
+d2nyo
+d2ny2
+d1p2i
+2d12p
+2d12p
+d2rag
+d1ra
+d2ral
+d2r1an
+d2rar
+d2ras
+d2r
+dr1d2
+d2reg
+d1re
+d2r1eml
+dr1e1s
+d2r1est
+d2rez
+d2rs
+d1r
+d2rif
+d1ri
+d2r1ik
+d2r
+d2rot
+d1ro
+d1r2
+d2rr
+d2r
+2d1r1t
+2d1rth
+d2r12t
+d1r
+d1ry
+2d1r1z
+d1sa2
+d2s1aj
+d2sal
+d2sap
+d2sar
+d2s1az
+d1s2
+d2s1r
+d2seg
+d1se
+d2s1e2l
+d2s1e1ti
+d2s1g
+d1s
+d2s
+d2s
+d2s12t
+d1s
+dsz1ak
+ds2z
+d1s1za
+d22s3z
+d2sz1k
+d1s1z
+d2szv
+d2s1z1o
+d2s1z
+d2t1as
+d1ta
+d2t1e2g
+d1te
+d2t1is
+d1ti
+2d1t1ke
+d2tr
+d1t
+2d12v.
+2d1vb
+2d12v2e.
+d1ve
+2d12ve1i
+2d12vek
+2d12vem
+2d12ven
+2d12ve2s.
+2d12vesb
+2d12vesek
+dve1se
+2d12vesen
+2d12vesh
+2d12ve1si
+2d12vesk
+2d12vesn
+2d12vesr
+2d12vess
+2d12vet
+2d1vez
+2d12vb
+d1v
+2d12v1i
+2dvn
+2dvr
+2d12vt
+2d12vv
+2d1vf
+2d1vh
+2d12vi
+2d1vk
+2d1vn
+2d1vr
+2d1vs
+2d1vt
+2d12vu
+2d12v
+2d1vv
+2d1vz
+df2nyem
+d1f
+dfn2y
+df1nye
+df2lo
+df2l
+df2r
+df2re
+df2ri
+df2ro
+df2r
+dg2z1r
+d1g
+dg1z
+dgzt1
+dg2zi
+dg2z
+dg2le
+dg2li
+dg2l
+dg2ra
+dg2r
+dg2r
+d2gyu
+dg2y
+d2ha1li
+d1ha
+dhan2g1e2
+d3hang
+dh2t1
+d1h
+d2h2i.
+d1hi
+d2hi1
+d2hih
+d2hi1i
+d2hij
+d2hik
+d2hir
+dh2s12
+d1h
+1di
+di2a1a
+di1a
+di2a1
+dia1b
+di2a1b
+di2a1bi
+di2abr
+di2ac
+dia1d2
+dia3da
+1di2a1di
+di2a1do
+di2a1e
+di2a1
+di2a1fa
+di2ag2y
+di2ah
+di2ai2k
+dia1i
+di2a1
+di2aj
+di2akp
+dia1k
+di2akol
+dia1ko
+di2a1la
+di2a1l
+di2a1li
+di2am
+di2a1na
+di2a1n
+di2a1ni
+di2a1n
+di2a1o
+di2a1
+di2a1
+di2a1
+di2a1p2
+di2a1ra
+di2a1s1za
+dias2z
+di2a1s1z
+di2a1t2
+di2a1u2
+di2a1
+di2a1
+di2a1
+di2av
+di2az
+di2k1e2
+di1
+di2kol
+di1ko
+din3n
+di1c2k
+di2cs1aj
+dic2s
+di1c1sa
+di2cs1e2r
+di1c1se
+2d1i2deg
+di1de
+2d1i2dej
+di2de1o
+2d1i2dn
+di1d
+2d1i2d
+di2e1u
+di1e
+di1fl
+di2g2a.
+di1ga
+2d1i2g1n
+di1g
+di2g2e.
+di1ge
+2d1i2gn
+di1g
+di2gt
+2d1i2jes
+di1je
+di2kp
+di1k
+2d1i2konh
+di1ko
+dik1u2ta
+di1ku
+di2la2n
+di1la
+dile2m
+di1le
+di2l
+di2l1
+di2l
+di1l2y
+di2m2a.
+di1ma
+2d1i2m
+di2mit
+di1mi
+2d1imp
+2d1i2na1ka
+di1na
+2dind
+2d1inf
+din1ga2
+din2gal
+2d1in1g
+2d1inger
+din1ge
+2d1i2nic
+di1ni
+di2n1ing
+2d1inj
+di2nd
+di1n
+di2n12n
+di2n12r
+2d1inp
+2d1in1t
+2d1inv
+di2o1a
+di1o
+di2o1i
+di2ok
+di2ol
+di2o1me
+di2ov
+di21a
+di1
+di21
+di1d1b
+di21e
+di2g
+di2i2l
+di1i
+di2i2m
+dii2r
+di21
+di21j
+di2kam
+di1ka
+di21k
+di2k1na2
+di1k
+di2k1n
+di2kt
+di21kl
+di2kok
+di1ko
+di1k1r
+di21ku
+di21m
+di21m2n
+di1m2r
+di2mt
+di21o
+di21
+di21
+di21
+di21p2
+di21r
+di21ri
+di2si2
+dis1ik
+di2szerek
+di1s2z2
+di1s1ze
+dis2ze1r
+diszer1e
+di21s1z
+di21u
+di21
+di21
+2d1i2pa2r.
+di1pa
+2d1i2pa1r
+2d1i2parb
+2d1i2pa1ri
+2d1i2pa1ro
+2d1i2rat
+di1ra
+2d1i2r
+2d1i2rod
+di1ro
+2d1irt
+di2saj
+di1sa
+2d1i2s2i.
+di1si
+2d1is1ko
+2d1ism
+2d1is1te
+di2tal
+di1ta
+dit1a2la
+dit1a1r
+di2t1e2g
+di1te
+dit1t2
+di2t
+diu1m2
+di1u
+diu2m1n
+diu2mil
+diu1mi
+di2t
+di1
+di2vad
+di1va
+diva2t1a
+2d1i2z
+1d
+d2g
+d2j11to
+d1j
+d2je
+d2j
+d2j
+d2j
+2d12r
+d1ri2
+d2rik
+2d12r
+d2s1z1a
+ds2z
+d2szer
+d1s1ze
+d2szez
+d2s1z
+dtsks2z1
+d1t
+dts1k
+dts3s
+d1t
+2d12v.
+2d12ve
+2dvn
+2d12v
+2d12v
+d2zi
+d2z2s
+d2z
+d2z
+dj2eg
+d1je
+dje2gya
+djeg2y
+dj1is
+d1ji
+djo2n1
+d1jo
+dka2n12
+d1ka
+dk2p1e2r
+d1k
+dk1pe
+dki1a2
+d1ki
+dki1e2
+dk2la
+dk2li
+dk2lo
+dk2lu
+dk2r
+dk2r
+dk2ri
+dk2ro
+dk2r
+dk2va
+dk2vi
+dls3s
+d1l
+dl2s3z
+dle12
+d1le
+dl1g2
+d1l
+dl2s1o
+dlt2
+dl1kr
+d1l
+dme2g1r
+d1me
+dme1g
+dme2g1o
+dna2pe
+d1na
+dn2v1
+d1n
+dn2k12l
+d1n
+dn1k
+1do
+do2z
+do1
+do2b1ag
+do1ba
+do2b1a2l
+doba2n
+do2b1an2y
+do2b1r
+do1b
+do2bt
+do1be2
+do2b1el
+do2b1ill
+do1bi
+do2b
+2dob1je
+do2b1old
+do1bo
+do2b1or
+do2b
+do2b
+do2b
+2d1o2d
+do2gar
+do1ga
+do2gr
+do1g
+dogs1s
+do2gor
+do1go
+do2g
+do2kal
+do1ka
+do2kas
+do2kj
+do1k
+do2k1l
+do2k1e
+do2k12l
+do1k
+do2k2p
+dok1k2
+dok2k1b
+dok2k
+do2k1ott
+do1ko
+2d1o2koz
+do2k
+dok2t
+do1k
+dok11to
+do2k
+2d1o2laj
+do1la
+dol2a2tar
+dola1ta
+dola2t1e
+dola2t1r
+dola1t
+2d1ol1da
+2d1ol1d
+2d1ol1do
+2d1ol1d
+2d1oltr
+dol1t
+2d1olts
+2d1olvas
+dol1va
+dom1a2c
+do1ma
+do2m1rb
+do1m
+do2m11r
+do2m1rh
+do2m1rj
+do2m1rk
+do2m1rl
+do2m1rn
+do2m12ron
+dom1ro
+do2m1rr
+do2m1r1t
+doms1s
+dom2ba2l
+dom1ba
+dom2bel
+dom1be
+dom2bol
+dom1bo
+dom2bn
+dom1b
+do2me2l
+do1me
+2do1m
+2doml
+do2m1ond
+do1mo
+do2m
+2do1m
+do2m
+do2n1ad
+do1na
+do2n1a2l
+do2n1a2r
+do2n1as
+do2n1l
+do1n
+do2n11ta
+do2n1tj
+do2n1ts
+do2n1tv
+don1d2
+do2n1e
+donos1s
+do1no
+do2n1os2z
+do2n
+don1s
+dont2
+don1tr
+do2n
+do2nyal
+don2y
+do1nya
+do2nyar
+do2nye
+do2ny
+2d1o2pe
+dor1akn
+do1ra
+do2r1a2l1
+do2r1a2p
+do2r1as
+do2rat
+dor1ll
+do1r
+do2r12lo
+dord2
+dor1dr
+do2r1e2
+do2rid
+do1ri
+do2r1il
+do2r1is
+do2r1i1ta
+dor1k2
+do2r1okl
+do1ro
+dor1oszt
+doros2z
+do2r
+do2r
+2d1or1r
+dors2
+dor1sp
+dor1t1r
+dor2t
+do1r
+do2r
+2d1orvos
+dor1vo
+2dottaih
+dot1ta
+dotta1i
+do2ut
+do1u
+2d1o2vi
+do1ye
+1d
+2da2d
+d1a
+d2g
+d1
+d2r
+d1b2l
+2dez
+d1e
+d1fl
+d1f2r
+2d1g
+d1g2r
+di2g
+d1i
+d2v
+d1
+d1k2l
+d1k2r
+d1k2v
+d2mab
+d1ma
+d2mak
+dm1org
+d2mor
+d1mo
+d2m
+d2r
+d1
+d1p2l
+d1p2r
+d2rd
+d1r
+d12rk
+d2ri1
+d1ri
+d2sam
+d1sa
+d2sas
+d2sel
+d1se
+3ds2i.
+d1si
+d2si2p
+d2sis
+d2sr
+d1s
+d1s2k
+d1s2pe
+d1s1pi
+d1s2r
+ds3s
+d1s2tb
+ds1t
+d21st2r
+d2s12
+ds2z2
+d1szf
+d21szp
+d1t2r
+2d12v
+1d
+d1bl
+d2ga
+d2g
+d2g1el
+d1ge
+d2gev
+dg3g
+dg1na2
+d2go
+d2g
+dg12l
+d1g
+d2g1
+d2gu
+d2ka
+d2k
+d2k1e2l
+d1ke
+d2k1e2r
+d2kk
+d1k
+d2k12r.
+d2k
+2d1ntz
+dn1t
+dntks2z1
+dn1t
+dnt1k
+2dntskn
+dnt1s
+d2ra
+d2r
+d2ro
+2d12rks
+d1r
+2d1s2z
+d1tl
+dt2trt
+dt1t
+d2ve
+d2vi
+1d
+da2n
+d1a
+d2g
+d1
+d1bl
+d1cl
+d1d1ra
+de2l
+d1e
+de2r
+d2l
+d1
+d2te
+d1fl
+d1f2r
+dg2p1e2k
+d1g
+dg1pe
+d1gr
+di2r2
+d1i
+di2ta
+d1kl
+dk2z1e2get
+d1k
+dk1ze
+dkze1ge
+dk2z1e2g
+d1kv
+d2ny1a
+dn2y
+d2nye1le
+d1nye
+d1pl
+d1p2r
+2d12r1b
+d1r
+2d12r12l
+2d12reb
+d1re
+dr1eg2y
+dr1e1le
+dr1e1l
+2d12rem
+2d12r2.
+d1r
+2d12rh
+2drk
+2d12r12l
+2drn
+2d1rh
+2d12r1if
+d1ri
+2d12ril
+2d12r1in
+2d12rip
+d2r1is
+2drok
+d1ro
+2d12r1or
+2dros
+d2rd
+d1r
+d2r1z
+2d12r1r
+d1r
+2d12r1un
+d1ru
+2d12r1u2r
+2d12rut
+2d12r2
+dr1g
+dr1l
+2d1rz
+d2s1rv
+d1s
+d1s1k
+d1s2m
+d1s1ni
+dso2d
+d1so
+ds1o1do
+d2s1or1r
+d1s1pe
+d1s2pi
+d1s1p
+d1s2ta
+d1s1t
+d1st2r
+d2s12rsget
+d1s
+ds1r
+dsr1s
+dsrs1ge
+d1sv
+d1s2z2
+dsza2k1a2d
+d1s1za
+ds2zakad
+dsza1ka
+dsze2r1e2pn
+d1s1ze
+dsze1re
+dszere1p
+dt1ll
+d1t
+d1t2r
+dprba2jokn
+d1p
+dpr1ba
+dprba1jo
+dp2la
+dp2le
+dp2l
+dp2ra
+dp2re
+dp2r
+dp2ri
+dp2r
+dp2ro
+dp2r
+dp2s2z
+draj2z12
+d1ra
+dra1ps
+dravas2z1
+dra1va
+drg1g
+d1r
+1d2rma1i
+dr1ma
+1d2rmak
+dr2sz1l
+drs2z
+dr1s1z
+dr2s1ze
+dr1ta2
+dr2tal
+dr2t1e2
+dr2t1r
+dr1t
+dreg2nye1k
+d1re
+dre1g
+dreg2n2y
+dreg1nye
+dren2d12
+1d2ress2z.
+dres2s2z
+1d2resszb
+1d2res1s1ze
+1d2resszh
+1d2ressz1k2
+1d2resszr
+1d2res1s1z
+dr22s1z
+d1r
+drs2z
+dro2g1a
+d1ro
+dro2g
+dro2gen
+dro1ge
+drog2n1i2
+dro1g
+drog3g
+dro2g12
+dro2n1a2
+dro2nyi
+dron2y
+drop2
+dro1pl
+dro1s2z2
+dr22baj
+d1r
+dr1ba
+d2rmak
+dr1ma
+dr2t1a2
+dr2t12
+dr2tis
+dr1ti
+dr2t12
+d2ru1i
+d1ru
+dru2se
+dru2si
+dsg1g
+d1s
+ds2g1el
+d1s
+ds1ge
+ds2gl
+d3s1g
+ds2k
+ds2li
+ds2pe
+ds2pi
+ds2po
+ds2r
+ds2ta
+ds2t
+ds2t
+dst2r
+dsza2k
+ds2z
+d1s1za
+dsz2las
+d1s1z
+dsz1la
+dszraz1
+dsz1ra
+d1s1z2e
+dsze2ra
+dsze2r1
+dsze2r1elv
+d3szerel
+dsze1re
+dsze2r1o
+dszert2
+dszerta2n12s
+d3szer1ta
+dszerta1n
+d1sz2l
+d1szn
+d1sz2p
+d1sz2t2
+d1sz2v
+dta2g1a2
+d1ta
+dtalpa2d
+dtal1pa
+dtal2p1a1da
+dtal2p1al
+dta2n12s
+dta1n
+d2t1kn
+d1t
+d1t2r
+d1t2r
+d1t2ri
+d1t2ro
+d1t2rf
+dt1r
+d2t1l
+d1t
+1du
+du2cem
+du1ce
+du2c3h
+du2c
+du2c
+due2l
+du1e
+du2g1r
+du1g
+2d1ugr
+2duit
+du1i
+2d1ujj
+dula1k2
+du1la
+dula2t1
+du2l1e
+du2lp
+du1l
+du1li2
+du2l1im
+du2l1in
+du2lis
+du2l
+du2l
+du2l
+2d1u2ni
+2d1u2no
+2d1unt
+du21a
+du1
+du21
+du2d
+du2f
+du2l
+du2p
+du2ra1i
+du1ra
+du2rak
+du2ral
+2d1u2rat
+du2rb
+du1r
+du2rh
+du2rt
+du2ruk
+du1ru
+du2sal
+du1sa
+du2san
+du2sar
+du2s1as
+du2sl
+du1s
+du2seg
+du1se
+du2s1r1t
+du1s
+du2sin
+du1si
+du2s1iv
+du2sol
+du1so
+du2s
+du2s1
+2du1s1zo
+dus2z
+dus3z2s
+du2t1i
+2d1u2to
+du2t2.
+du1t
+du2tr
+du2tu
+du2um
+du1u
+1d
+d2ce
+d2c2h
+d22c1se
+dc2s
+d22c3so
+dc3s2z
+d1dr
+d2j12
+d2j
+d2r1a2c
+d1ra
+d2ral
+d2r1e2
+d2rn
+d1r
+2d12ron
+d1ro
+d2r
+d2s1z
+ds2z
+d2s1z
+d2t1a2
+d2t
+2d1tj
+d1tl
+2d1tn
+d2to2n1
+d1to
+2d1tr
+1d
+1d2d
+d2g2y
+d2gy1rn
+d1gy
+d2ha
+d2h
+d2hel
+d1he
+d2ho
+d2h
+d2kt
+d1k
+d2l
+2d1ld
+d2lep
+d1le
+dls2
+d1l
+2d1n1ne
+d2r
+d2te
+d2t
+d2t
+d2ve
+d2ze
+d2z
+1d
+d1pr
+d1rl
+d1s2z
+d1tr
+d2z
+d2z
+dv2a2raj
+d1va
+dva1ra
+dva2r1e
+dva2r12
+dvgya2d
+d1v
+dvg2y
+dv1gya
+dv2gy1a1da
+dv2gy12n.
+dv1gy
+dv2nya2n
+dvn2y
+dv1nya
+dv2ny
+dv11ta2
+dv11te
+d2v1e1ce
+d1ve
+d2v1e2d2z
+dv1e2leg
+dve1le
+dv1elk
+dven2t1
+dve2ra2l
+dve1ra
+dve2rr
+dve1r
+dve2rip
+dve1ri
+dver1s2
+d2v1e2ss
+dve1s
+d2v1e2sze2m.
+dves2z
+dve1s1ze
+d2v1e2te1t
+dve1te
+dv1lm
+d1v
+d2v1p
+d2v1r1d2
+d2v12ri
+d2v1r1t
+d2v1rz
+dv1fr
+dvi2c1sa
+d1vi
+dvic2s
+dvi2c1s
+d2v1i1ga
+d2v1i2gaz1
+dvitz1
+dvi1t
+dv1or
+d1vo
+dv2l
+d1v
+dv11l
+dv1s
+d1v
+dv1z
+dv1pr
+dv1un
+d1vu
+dv12t
+d1v
+d2v1g
+d1v
+d2v12z
+d2v1z
+d1v
+dwa1yi
+d1wa
+dy1as
+d1yb
+d1yh
+d1yn
+dy11t
+d1yv
+dy2j
+dy2ke
+dyk2k
+dyk2n
+dyk2t
+dy2v
+d2z
+1d1za
+dza12
+2d3zaj
+dzak2
+dza1kr
+1d1z
+dz2r12ra
+d3zrr
+dz1r
+dzs1s
+d3zs2z
+1d1ze
+1d1z
+dz2sa
+1d1zi
+1d1z
+1d1zo
+1d1z
+1d1z
+1d1z
+dz1a2
+2dz1b
+2dzd
+2dzj
+2dz1n
+2dzr
+1d1z1sa
+dz2s
+1d1z1s
+1d1z1se
+2dzs1e2g
+2dzs1es2z
+1d1z1s
+1d1z1si
+2dzsir
+2dzs1is
+d3zsiv
+1d1z1s
+2d1z1so2
+dzs1ok
+1d1z1s
+1d1z1s
+1d1z1s
+dzs1s
+1d1z1su
+1d1z1s
+2d2zs1j
+1d1z1s
+1d1z1s
+1d1zu
+1d1z
+1d1z
+1d1z
+2e.
+e1a
+ea2bl
+ea1b
+e2a1bo
+e2a1b
+ea2dak
+ea1da
+ea2dand2.
+eadan1d
+ea2dand1a
+ea2dandb
+ea2dandk
+ea2dandn
+ea2dandt
+ea2das
+ea2dat
+ea2d
+eads1s
+ea2dod
+ea1do
+ea2dog
+ea2dok
+ea2dom
+ea2dot
+ea2d
+ea1d2r
+ea2du
+ea2d
+ea1
+e2a1f
+e2a1fe
+e2a1fi
+e2a1fo
+e2a1f
+e2a1f
+e2a1f
+e2a1f
+ea2gi
+e2a1g
+e2aid
+ea1i
+e2ail
+e2aim
+e2aip
+e2ais
+ea2ja
+ea2kas
+ea1ka
+e2akat
+e2a1k
+e2a1ke
+e2akp
+ea1k
+e2a1ki
+e2a1k
+e2a1kl
+e2a1ko
+e2a1k
+e2a1k
+e2a1k2r
+e2a1k
+e2a1k
+e2aln
+ea1l
+eal1eg
+ea1le
+ea2lu
+e2a1ma
+e2a1m
+e2amel
+ea1me
+e2amer
+e2a1m
+e2amin
+ea1mi
+ea2mo
+e2a1mu
+e2a1m
+e2a1m
+e2a1ne
+e2a1n
+e2a1n
+ea2nya
+ean2y
+e2a1pi
+e2a1po
+e2a1p
+e2a1p2ro
+e2a2r.
+ea2ran
+ea1ra
+ea2ras
+ea2rat
+ea2r
+e2arb
+e2a1re
+e2arh
+e2arj
+e2arn
+e2a1r
+e2arr
+e2a1ru
+e2a1r
+e2a1so
+e2a1st2
+e2a1s
+e2a1s
+e2aszem
+eas2z
+ea1s1ze
+e2a1s1z
+e2a1ta
+e2a1t
+e2atc
+e2a1te
+ea2t1eg
+e2a1t2
+e2a2tl
+ea2t12ne
+e2atf
+e2atg
+e2ath
+ea2tid
+ea1ti
+eat1ing
+e2atin
+e2a2tip
+e2a2tir
+e2atm
+e2atn
+e2a1to
+e2a2t1or
+e2a1t
+e2a1t
+e2a1t2rak
+eat1ra
+e2at2rn
+eat1r
+e2ats
+e2a1tu
+e2a2t
+e2a1t
+e2atz
+e2a2u.
+ea1u
+ea2ut
+e2a2ux
+e2a1vi
+ea2zo
+e1
+e2b
+e2c2s
+e2ga
+e2g
+e2gi
+e2go
+e2gu
+e2g2y
+e2h
+e2k1e
+e2k1osk
+e1ko
+e1la2
+e2lad
+e2l1ak
+e2ll
+e1l
+e2l12r
+e2l1e2
+e1l2
+e2ll
+el1fe2
+e2li2d
+e1li
+e2l1in
+e2lir
+e2l1ism
+e2lop
+e1lo
+e2l1r
+e1l
+e2l
+e1lu2
+e2l1u1ni
+e2mu
+e2nac
+e1na
+e2nal
+e2n1at
+e1n2
+e2nr
+e2n1t
+e2n1e2
+e2ny1a2l
+en2y
+e1nya
+e2nyap
+e2nyar
+e2ny1as
+e2nyav
+e2ny1e2
+e2nyn
+e1ny
+e2ny12r.
+e2nyif
+e1nyi
+e2ny1ing
+e2nyis
+e2ny1o2ku
+e1nyo
+e2ny
+e2po
+e2rad
+e1ra
+e2ram
+e2ras
+e2raz
+e2ru
+e2r
+e2sa
+e2s
+e2s
+e2s
+e2su
+e2s2z
+e1ta2
+e2t1e2
+e2t
+e2t
+e2tu
+e2t
+e2ba2d
+e1ba
+eb1a1d
+eb1ad1ta
+eb1a1ga
+e2b1ajk
+e2b1a2la
+e2b1alk
+eb1ant
+eb1a2n2y
+eb1atl
+e2b1a2u
+eb1gg
+e1b
+e2b1p
+eb11ra
+ebe12
+e1be
+e2b1e2he
+e2b1ejt
+ebe2l1
+e2b1e2lef
+ebe1le
+ebe2l1e1me
+e2b1elhel
+ebel1he
+e2b1enc
+e2b1es1te
+e2b1es1t
+ebe2szek
+ebes2z
+ebe1s1ze
+e2b1ex
+e2b1g
+e1b
+eb1p
+e2b1rd
+e2b1r1t
+ebrt2
+e2b1rz
+eb1gr
+e2b1id
+e1bi
+e2b1i2na
+e2b1inf
+e2b1ing
+e2b1i1r
+e2b1i2s
+e2b1izz
+eb1kl
+eb1kr
+eb2lat
+eb1la
+eb2lok
+eb1lo
+e1b2l
+eb1okt
+e1bo
+eb1o2la
+eb1orv
+eb1b
+e1b
+eb1s
+eb2rus
+eb1ru
+eb1st2
+eb1t2r
+e2b1g
+e1b
+eb2l
+eb11l
+e2b1r
+eb1z
+ec1ajt
+e1ca
+ec1alk
+e2c1a2n
+e2c1az
+ec1g
+e1c
+e2c1l
+ec1r
+ec1bl
+ec2c1a2
+ec2c1r
+ec1c
+ec2c3h
+eccs1t
+ec2c2s
+ec1c1s
+ec3c1so
+ec2c
+e2c1eg
+e1ce
+e2c1e1lo
+e2c1elv
+2ecen1to
+ece2t1o
+1e2cets
+1e2cett
+ece2tz
+ece1t
+e2c1e1v
+ec3har
+ec2h
+e1c1ha
+e2c3h2e.
+e1c1he
+ec3hed
+ec3hem
+ec3hen
+ec3hes
+e1c3h
+ec3h2i.
+e1c1hi
+ech1i2n
+1e2c1h
+e1c1h1u
+e1c3h
+ec2lu
+e2csad
+ec2s
+e1c1sa
+e2cs1a2la
+e2cs1a2n
+ecsa2p12g
+ecsa1p
+e2cs1a2pk
+ecs1a1r
+ecs2r
+e1c1s
+ecs11r
+ecs1rb
+ecs11ro
+e2cs12t
+e2cs12l
+e1c1s
+e2cs12r.
+ecs1r1t
+e2cs1ing
+e1c1si
+e2cs1ol
+e1c1so
+e2cs1l
+e1c1s
+ecs1s
+ecsszs1
+e1c1s
+ecss2z
+ecs1s1z
+e2c3skb
+e1c1s
+e2c3st
+ec3s1ze
+ecs2z
+e2c1ud
+e1cu
+e1c3z
+ec2z
+e1c3ze
+e2d1ab
+e1da
+e2d1a2d
+ed1a2n2y
+e2d1a2z
+e2d12c
+e1d
+e2d1g
+e2d1p
+ed1eg2y
+e1de
+edele1me2
+ede1le
+e2d1e1lo
+e2d1eml
+ede2rak
+ede1ra
+ede2r1l
+ede1r
+ede2rel
+ede1re
+ede2r1k
+ede1r
+ede2r1o
+ede2r12l
+ede1r
+ede2s1o
+ede2t
+ede2tel
+ede1te
+ede2t12r.
+ede1t
+e2d12j
+e1d
+ed2k
+ed2kis
+ed1ki
+ed2k1o
+ed2ly
+edl2y
+ed2lyo
+1e2dnn
+1e2dn2y
+e2d1p
+e2d1r1d2
+ed2sa2
+ed2so
+eds3s
+ed2s3z
+e2d12vn
+ed1v
+e2d12vr
+ed1gr
+e2di1de
+e1di
+e2d1i2ga
+edigaz1
+ed1ill
+e2d1int
+e2d1i1ra
+ed1i1ro
+e2d1r
+e1d
+e2d1vn
+e2d1z
+ed1old
+e1do
+ed1orv
+e2d1os
+e2d1s
+e1d
+e2d1rs
+e1d
+ed2s1
+ed1pl
+ed1pr
+ed2ram
+ed1ra
+e1d2rog
+ed1ro
+e1d2r
+e2d1g
+e1d
+e2d1t
+e2d1z
+e1d
+ed2v1a2
+ed1v2
+ed2v1r
+ed2vt
+edv12r.
+ed1v
+ed2v1z
+ed1v
+e1dyb
+e1dy
+e1dyh
+e1dy1i
+e1dyj
+e1dyk
+e1dyn
+e1dyr
+e1dys
+e1dyt
+e1dyv
+e2d3z
+ed2z
+1e2dz1i
+e1d1z
+1e2dzj
+1e2dzr
+1e2dzv
+1edzv
+e1e
+ee2b
+ee2c2s
+ee2d2z
+ee2ge
+ee2g
+ee2gs2z1
+ee2g2y
+ee3gyeztesd
+ee1gye
+eegyez1te
+ee2he
+ee2ke
+ee2la
+ee2le
+e2elb
+ee1l
+ee2ld
+e1elle2n12
+eel1le
+ee2lo
+ee2l
+ee2me
+ee2m
+ee2mu
+e2e2n.
+e2enb
+e2enj
+e2ent
+e2enw
+ee2n2y
+ee2pe
+ee2p
+ee2po
+ee2re
+ee2ro
+ee2r
+ee2r
+ee2setteb
+ee1se
+eeset1te
+ee2settek
+ee2setten
+ee2settet
+ee2set1t
+ee2settn
+ee2settr
+ee2setts
+ee2s
+ee2sh
+ee1s
+ee2sj
+ee2sr
+ee2ss
+ee2st
+ee2sv
+ee2s2z
+ee2te
+ee1t2h
+ee2to
+ee2ve
+ee2v
+ee2vi
+ee2vo
+ee2v
+ee2z
+e1
+e2de
+e2ge
+e2g
+e2g
+e2g
+e2he
+e2je
+e2j
+e2ke
+e2k
+e2le
+e2l
+e2li
+e2l
+elks2z1
+el1k
+e2l
+e2l
+e2me
+e2ne
+e2p
+epts1s
+ep1t
+e2p
+e2r
+e2ri
+e2r
+e2r
+e2s2z
+e2te
+e2ve
+e2v
+e2vi
+e2v
+efa2x1i2
+e1fa
+efek2t
+e1fe
+efek2t12
+efeny12
+efen2y
+efe1ny
+ef2f1in
+ef1fi
+ef2f1o
+e1f2la
+efle2x1i2k
+ef1le
+efle1xi
+efogadks2z1
+e1fo
+efo1ga
+efoga1d
+efogad2ks
+efogad1k
+efo2n1alk
+efo1na
+efo2nik
+efo1ni
+efor1ma2
+efor2m1al
+ef1pl
+e1f2r
+ef2r
+e2g1a2b
+e1ga
+ega2be
+eg1abl
+e2g1abr
+e2g1a2c
+ega2c2s
+e2g1a2d
+e2g1a2g
+ega2i
+e2g1a2j
+e2g1a2k
+e3g2a3k
+ega2lac
+ega1la
+ega2lak
+ega2lan
+eg1a2lap
+e2g1a2l
+e2g1alh
+e2g1alj
+e2g1alm
+e2g1als
+e2g1alt
+e2g1a2m
+eg1ang
+eg1ann
+eg1ant
+eg1a2n2y
+e2g1a2p
+eg1arc
+ega2ri
+eg1a2ro
+eg1art
+e2g1ass
+e2g1a2s1za
+egas2z
+e2g1a2s1zo
+e2ga1s1z
+eg1atk
+e3g2at2y
+e2g1a2u
+eg1a2va
+e3g2azol
+ega1zo
+e2ga2zon
+e3g21ba
+e1g
+e3g21b
+eg12c2s
+e2g1f
+e2g12g
+eg1h
+e3g21i
+e3g21ja
+e3g21j
+eg2ju
+eg2m
+e3g2n
+e2g1p
+e2g12r
+e2g1rb
+e3g2rg
+e2g1rn
+eg2ro
+eg1rt
+eg2ru
+eg2r
+eg2sa
+e3g22t.
+e3g21tu
+e3g21va
+eg2z
+eg2zi
+eg2zu
+eg1bl
+eg1br
+eg1d2r
+e2g1e2b
+e1ge
+ege2c1s12
+egec2s
+eg1ed2z
+e2g1e2ge
+eg1e1he
+e2g1e2ks
+ege1k
+e2ge1la
+e3geled
+ege1le
+ege2lej
+e2gelekt
+eg1e2lemb
+e2g1e2le1me
+e2g1e2lemn
+e2g1e2lemr
+e2g1e2lemt
+ege2l1e2s
+eg1e2lg
+ege1l
+eg1e2lr
+e2g1elf
+e3g2elg
+e2g1el1ha
+e3g2elit
+ege1li
+e2g1el1j
+e2g1elm
+e3g2el1ne
+e2g1e1lo
+e3g2el1
+ege1l
+ege2lb1be
+e3g2eld
+e3g2elf
+e3g2el1i
+e3g1elm
+e3gel1nye
+egeln2y
+e2g1el1t
+e3g2eltet
+egel1te
+e3g2el1t
+e2g1el1v
+e2g1elz
+e2g1e2mel
+ege1me
+e3g2end
+e3g2e1nye
+egen2y
+eg1e1pe
+eg1epr
+e3ge1r
+e2gerd
+1eger2e.
+ege1re
+e2gered
+1e2gerek
+e2ge1r
+ege2rn2y
+eg1erk
+e3gerl
+e2g1e2r
+e2g1e2r
+eg2esek
+ege1se
+e2g1ese1te
+e2g1eszk
+eges2z
+e2ge2tal
+ege1ta
+eg1e2ve
+e2g1ex
+e2g12g
+e1g
+e3g2mb
+e2g12ne1ke
+eg1ne
+e2g12nek1k2
+eg2ny1e2l
+eg2n2y
+eg1nye
+e2g12p
+eg1ps
+e2g2r.
+e2grb
+eg2r1es
+eg1re
+e2g2re2t
+egr1e1te
+eg2rez
+e2g1r
+eg2rs
+e2grg
+e2g1ri
+eg2r2i.
+e2grk
+e2grn
+e2g12r2.
+eg1r
+e2grr
+e2grs
+e2g1r1t
+e2g1rth
+e2gr1t
+e2grv
+e2gs2z
+eg1szl
+1egszs2g.
+egs1z3s
+egsz2s
+egsz3sg
+1egszsget
+egszs1ge
+1e1gszs1g
+1egszsg3g
+1egszsgh
+1egszs1gi
+1egszsgn
+1egszsgr
+1egszsgt
+1egsz3s1g
+eg11te
+eg1fl
+eg1f2r
+eg2gim
+eg1gi
+eg3gyal
+eg2g2y
+eg1gya
+eg3gyan
+eg3gys
+eg1gy
+eg3gy
+e3g2i.
+e1gi
+e2g1ibr
+eg1idd
+eg1i2de
+e3gi1e
+egi2g
+e3gi2g.
+e2g1i1ga
+e2g1i2g
+eg1ij
+e2g1i2ko
+eg1ikr
+e2g1ill
+eg1imb
+e2gimm
+e2g1inf
+e2g1ing
+eg1i1no
+e2g1ins
+e3g2i1o
+eg1i1ra
+e2g1i2ro
+eg1iss
+eg1ist
+egi2s2z
+e2g1i2ta
+e3g2i1t
+e2g1i1va
+e2g1i1v
+e3gi1ve
+eg1i1z
+eg1izg
+eg1izm
+eg1izz
+e2g1g
+e1g
+e2g1n
+e2g12r
+e2g1v
+e2g1z
+egkie3l1g
+eg1ki
+egkie2l
+egki1e
+egkie1l
+eg1kl
+eg1kr
+eg1kv
+e2g1ob
+e1go
+e2goc
+e2g1o2d
+e2go1i
+e2g1o2k
+eg1o2la
+e2gold
+eg1olt
+eg1olv
+e3gol2y
+ego2mi
+e2gont
+e2g1op
+eg1ord
+eg1org
+e3g2orom
+ego1ro
+ego2ros
+e2g1orr
+e2g1orv
+e2g1orz
+e2g1o2s
+e2g1ot
+eg1o1v
+e3g2.
+e1g
+e3g2b
+eg2do
+eg12ra
+eg11r
+eg1v
+e2g1b
+e1g
+eg1k
+e2g1nt
+eg11r
+e3g2rg
+eg2rm
+eg1t
+eg1v
+e2g12z
+egks2z1
+e1g
+eg1k
+e3g1re
+eg11ri
+eg11r
+eg2s1zi
+egs2z
+e3g2z
+eg1pl
+eg1pr
+eg1ps
+e3g2raf
+eg1ra
+e1g2rat
+e1g2rf
+eg1r
+eg1sk
+eg1sl
+eg1sm
+eg1sp
+eg1st
+egs2z2
+eg1szt2
+eg1tr
+e3g2ub
+e1gu
+eg1ud
+e3g2um
+eg1u2n
+e2g1u2r2a.
+egu1ra
+e2g1u2ra1i
+e2g1u2rak
+e2g1u2ras
+e2g1u2rat
+e2g1u2r
+e3gu1ru
+e2g1u2s
+e2g1u2t
+eg1u2z
+e3g2n
+e1g
+eg1r
+e2g1s
+e2g1t
+e2g1d
+e1g
+eg2gye
+egg2y
+e2g12gyi
+e2g12le
+eg12li
+e2g1s
+e2g1t
+e2g1v
+e2g1z
+e2g1z
+e1g
+egvro1si2
+eg1v
+egv1ro
+e2gy1a2d
+eg2y
+e1gya
+egy1a2g
+e2gy1aj
+egy1akt
+egy1a2la
+e2gy1a1r
+e2gy1as
+egy1a2t
+e2gy1a1u
+egy1az
+e2gyl
+e1gy
+egy12r
+e2gy1rf
+e2gyt
+e2gy1eleg
+e1gye
+egye1le
+e2gyelemz
+egy1elf
+egy1ell
+egy1e1lo
+egy1e2lj
+egye1l
+egy1e2lv
+egy1elz
+1e2gyenl
+1e2gyens
+egy1eszt
+egyes2z
+2e3gyezsil
+egye1z
+egyez1si
+1e2gyez2s
+egy1ks
+e1gy
+e2gy12r.
+1egyhz1
+egy1h
+egyh1z
+1egyhzh
+1egyhz1i
+1egyhzn
+1egyhzr
+1egyhzv
+1egyhzi1a
+egyh1zi
+1egyhzib
+1egyhzi1
+1egyhzik
+1egyhzin
+1egyhzir
+1egyhzit
+1egyhziv
+e2gyi2p
+e1gyi
+egy1i1pa
+e2gyis
+e2gy1iz
+egy1ok
+e1gyo
+e2gy1ol
+egyo2r
+e2gy1os
+egy1ot
+e2gy12r
+e1gy
+e2gyb
+e1gy
+egy12l
+e2gy1s
+e2gy1z
+egy12r
+e1gy
+e1gyu2
+egy1ut
+1e2gyt
+e1gy
+egyv1ro2
+egy1v
+1egzis
+eg1zi
+eha2de
+e1ha
+eh2zal
+e1h
+eh1za
+e2h1el1l
+e1he
+ehe2lyes
+ehel2y
+ehe1lye
+ehe2rl
+ehe1r
+ehe2rt
+ehe1re2
+ehe2r1el
+ehe2r1em
+ehe2ren
+ehe2res
+ehe2rin
+ehe1ri
+ehe2rol
+ehe1ro
+e2h12je2
+e1h
+eh2n
+eh2nv
+eh1n
+eh2z
+eh2zo2
+eh1s2z
+e1i
+e2ibn
+ei2de1
+ei1de
+e1i2de1i
+ei2de1o
+ei2dn
+ei1d
+ei2dom
+ei1do
+ei2d
+e2idp
+e2ier
+ei1e
+ei2g
+ei2g
+ei2g2y
+ei2ha
+eil2l2e.
+eil1le
+ei2ma
+ei2m
+ei2mit
+ei1mi
+e2imk
+e2ims
+e2imz
+ei2na2
+ein1ad
+ei2n12
+ei2neg
+ei1ne
+e2ini2g.
+ei1ni
+ei2n1i1ta
+ei2nol
+ei1no
+ei2n
+ein1t2r
+ei2n
+ei2on
+ei1o
+ei2pa
+ei2ram
+ei1ra
+ei2rat
+e1i2rn2y
+ei1r
+ei2ri
+ei2rod
+ei1ro
+e2i1si
+ei2ta
+e2itb
+e2itj
+e2itn
+e2itr
+ei2va
+ei2v
+ei2vo
+ei2v
+ei2z
+ei2zo
+e1
+e2g
+e2j
+e2j
+e2ra
+e2r
+e3rs1be
+e3rsil
+er1si
+e3rsoc
+er1so
+e3rsonk
+e2r2.
+e1r
+e2r1a
+e2r12
+e2rb
+e2rdn
+e2rf
+e2rg
+e2rh
+e2r2i.
+er1i
+e2rik
+e2rin
+e2rit
+e2r12
+e2r1ja
+e2r1j
+e2r1je
+e2r1ju
+e2rk
+e2rm
+e2r2n.
+e2r1na
+e2r1n
+e2rn2y
+e2rr
+e2rt2
+e2rv
+e2t
+e2v
+e2ve
+e2v
+e2vi
+e2vo
+e2v
+e2ze
+e2z
+e2z
+ej1ab
+e1ja
+ej1ac
+e2j1a2d
+ej1a2g
+e2jak
+ej1ak1k2
+ej1a2l
+ej1a2n
+ej1ar
+ej1a1u
+ej1a2z
+ej1b
+e1j
+e2j12g
+ej1l
+e2j1r1t
+ej12t1e2
+ej1tv
+ej1bl
+ej1br
+ejcsa2p1
+ejc2s
+ej1c1sa
+ej1dr
+eje2c
+e1je
+e2j1e1c1se
+ejec2s
+e2j1ef
+e2j1e2ged
+eje1ge
+e2j1e2g
+e2j1ekc
+e2j1e1la
+e2j1elc
+e2jele1de
+eje1le
+e2j1e2lemb
+e2j1e2le1me
+e2j1e2le1m
+e2j1e2lemn
+e2j1elf
+e2j1el1ha
+e2j1elhel
+ejel1he
+e2j1e2l1o2
+e2j1el1s1z
+ejels2z
+e2j1eltr
+ejel1t
+e2j1e2l1u
+e2j1eng
+e2j1es2s2z
+eje2s2z
+e2j1ex
+e2j12j
+e1j
+e2j12k
+e2j1l
+e2j1p
+e2j11te
+ej1fr
+ej1g2r
+e2j1i2d
+e1ji
+e2j1im
+ej1i1na
+e2j1int
+e2j1ip
+e2j1iz
+ej1g
+e1j
+ej1v
+ej1kl
+ej1kv
+ej2mok
+ej1mo
+ej1ol
+e1jo
+ej1op
+ej1c
+e1j
+ej1n
+ej2s
+ej1t
+ej1v
+e2j1b
+e1j
+e2j1l
+e2j12v2e.
+ej1ve
+e2j1z
+e1j
+ej1pl
+ej1pr
+ej1sp
+ej1st2
+ej2tad
+ej1ta
+ej2ta1u
+ej2tl
+ej1t
+ej2tt
+ej2t1elk
+ej1te
+ej2t1es1te
+ej2tev
+ejt2r
+ej1t
+ejt11r
+ej2tin
+ej1ti
+ej2tiz
+ej2tos
+ej1to
+ej2t12r
+ej1t
+ej2td
+ej1t
+ej2t12l
+ej2tn
+ej2ts
+ej1t1ra
+ej1t1r
+ej2tr
+ej1t
+ej1j
+e1j
+ej1r
+ej12t
+e2j1g
+e1j
+e2j1r
+e2j12t
+e2j1v
+e2j1z
+e2k1abl
+e1ka
+ek1a2c
+ek1a2d
+e2k1a2d
+eka2g2y
+ek1a2ja
+e2k1ajt2.
+ekaj1t
+e2k1ajt1i
+e2k1ajtk
+e2k1ajtn
+e2k1ajtr
+e2k1ajtt
+ek1a2kar
+eka1ka
+e2k1alj
+e2k1a2lo
+ek1alt
+e2k1ang
+e2k1a1ni
+ek1a2ny
+ekan2y
+ek1ar2c.
+ek1ar1ca
+ek1arcr
+ek1ar1c
+eka2si2p
+eka1si
+e2k1a2u
+ek1a1zo
+e2k1g
+e1k
+ek1l1lo
+ek1lm
+e2k12r.
+e2k12rad
+ek1ra
+ek2ra1i
+ek12rak
+ek12ras
+e2k12r
+e2k1r1d2
+e2k1rf
+e2k1rh
+e2k1rk
+e2k1rm
+e2k1rn
+e2k12ron
+ek1ro
+e2k1rr
+e2k12ru
+e2k12r
+e2k1rv
+ek12s
+ek11ta
+ek1td
+e2k1th
+ek1tj
+e2k1tm
+ek12to
+e2k1tt
+ek1bl
+ek1br
+1ekcm
+ek1c
+ekci2f
+ek1ci
+ekci1
+ek1cl
+ek1dr
+e2k1e1b
+e1ke
+e2k1e2d2z
+e2k1egg
+e2k1e2gye
+ekeg2y
+e2k1e2k1b
+eke1k
+e2k1e2ks
+e2ke1la
+e2k1e2leg
+eke1le
+e2ke2le1me
+ek1el1ha
+e2k1elk
+e2k1el1l
+e2k1elm
+e2k1e1lo
+e2k1eln
+eke1l
+e2k1elr
+ek1el1ta
+ekel2t12r
+ekel1t
+e2k1e2ma
+e2k1e2mel
+eke1me
+ek1e2ms
+eke1m
+ek1e2pi
+e2k1estr
+eke2sze1le
+ekes2z
+eke1s1ze
+eke2s1zo
+e2k1e2v
+e2k1e1vi
+1e2kh
+e1k
+ek1
+e2k1g
+1e2kik
+ek1i
+ek1kek
+ek1ke
+e2k1kt
+ek12le
+ek1ln
+ek11l
+ek2p1e2r
+ek1pe
+e2k12p
+e2k1rin
+ek1ri
+e2k1rtkb
+ekr1t
+ek2rl
+ek1r2
+e2k1szh
+eks2z
+e2k1szn
+ek2tel
+ek1te
+e2k1tk
+e2k1tl
+e2k1tt
+e2k12v2e.
+ek1ve
+e2k12vek
+e2k12vet
+e2k11vi
+ek1fr
+ek1gn
+ek1gr
+eki12
+e1ki
+e2k1i2ga
+ekigaz1
+e2k1i2ge
+e2k1i1g
+eki1i2
+ek1ill
+e2k1i1ma
+e2ki2mr
+eki1m
+e2k1i1n
+e2k1ind
+e2k1isk
+e2k1ism
+e2k1isp
+ek1i2zo
+e2k1j
+e1k
+ek12r
+ek1z
+ekka2r2
+ek1ka
+ek2k1e1le
+ek1ke
+ek2k1elf
+ekk1os2z
+ek1ko
+ek1k1ri
+ek2k
+ekls3s
+ek1l
+ek2lim
+ek1li
+e2k1o1
+e1ko
+ek1obj
+e2k1odv
+ek1ol1l
+e2k1olv
+ekombinci21
+ekom1bi
+ekombi1n
+ekombin1ci
+ekombinci1
+e2k1o2pe
+ekor2da
+ekor2d12
+ek1o2rom
+eko1ro
+ek1or1ra
+e2k1orv
+ek1otth
+e2k12h
+e1k
+ek12ra
+ek12r
+ek2k
+e1k
+e2k11k
+e2k12l
+ek12l
+e2k1m
+e2k1nk
+e2k1nt
+ek2ri
+e2k1rv
+ek1pl
+ek1pr
+ek1ps
+e1k2ram
+ek1ra
+e1kr1t
+ek1r
+ek2ris
+ek1ri
+ek2ri1ti
+e1k2r
+ek2rm
+ek1r
+ek1sl
+ek1sm
+ek1sp
+ek1st
+eksz1al
+eks2z
+ek1s1za
+ek2szi2p
+ek1s1zi
+ek2ta1u
+ek1ta
+ek2taz
+ekt1elk
+ek1te
+ek2t1es2z
+ek2t1rd
+ek1t
+ek2til
+ek1ti
+ek2ti2m
+ek2t1i2o
+ek2t1ok
+ek1to
+ektus1s
+ek1tu
+e2k1ud
+e1ku
+ek1u1ni
+e2k1u2ra
+ek1u1ro
+e2k1u1t
+e2k1u1t
+e2k1uz
+e2k1j
+e1k
+e2k12r.
+ek2t
+ek11to
+ek1tv
+e2k1nn
+e1k
+ek2t
+ek11t
+ek1zl
+e1k2v
+el1a2ba
+e1la
+el1abl
+el1a2bort
+ela1bo
+e2l1a2d
+el1agg
+el1a2g2y
+el1a2j
+e2l1a2kad
+ela1ka
+e2l1a2kas
+el1akc
+e2l1a2l
+el1a2m
+el1a1na
+elan2di
+el1a2ne
+el1a2ni
+ela2n2y
+el1a2pa
+ela2r
+el1a1ra
+el1a1r
+el1a1r
+el1a1s1za
+elas2z
+el1a1s1zi
+el1a1s1z
+el1a1s1zu
+e2l1a2u
+el1a2va
+el1a2ve
+el1a1zo
+el2b
+e1l
+el12g.
+e2l12ga
+el1gg
+el12gi
+el1gn
+el12go
+el12j
+el1ld
+el1ll
+el12lo
+el2m
+el12m
+el2n
+el2n2
+el2ne
+el2n
+el12p
+el12r.
+el12r
+el1rb
+el1rc
+el12re
+el12r
+el1rf
+el1rh
+el1rk
+el1rn
+el12ro
+el11r
+el1rr
+el1rt2
+el12ru
+el12r
+el2s
+el1ta2
+el11t1e2
+el1tf
+el1tk
+el1tl
+el1tm
+el1tr
+el11zi
+el11zo2
+el1zt
+el1bl
+el1br
+2el2d.
+el1d2r
+ele1b1re
+e1le
+2ele2d.
+1e2ledel
+ele1de
+el1eff
+ele2g1e2l
+ele1ge
+el1e2gye1ne
+eleg2y
+ele1gye
+e2le1gy
+el1egz
+ele3ran
+ele1
+ele2ra
+elekci21
+elek1ci
+elekci1
+ele1k2l
+ele2k1os
+ele1ko
+ele1k1r
+1elektr
+e2l1elb
+e2l1e2lemb
+ele1le
+e2l1elm
+e2lelz
+ele1l
+el1elr
+ele2mad
+ele1ma
+e2l1ember
+elem1be
+1elem2e.
+ele1me
+1e2leme1i
+1elemek
+ele2mell
+1e2leme2m.
+1e2lememm
+1e2leme2s.
+1e2lemesn
+ele2mes2z
+ele2mlt
+ele1m
+ele2mrd
+1e2lemk
+ele1m
+1e2lemnk
+1e2lem1z
+1e2lem1z
+2el2end
+e2le2ner
+ele1ne
+ele2n2l
+ele1n
+ele12
+ele2pal
+ele1pa
+ele2pa2p
+e1le2pe2le
+ele1pe
+ele2pell
+ele2p12r
+ele1p
+e2lerd
+el1e2red
+ele1re
+el1e2re1i
+e3le1r
+el1erj
+e2l1ern
+e2le2rz
+ele1r
+e2l1e2r
+e2le2se1ge
+ele1se
+ele2ssb
+ele1s
+ele2s1se
+ele2s1s
+ele2ssh
+ele2s1si
+ele2ssk
+ele2ssn
+ele2ssr
+ele2ss3s
+ele2sst
+ele2s1s
+ele2si2k.
+ele1si
+e2l1esnn
+eles1n
+ele2sb
+ele1s
+ele2ss
+e2l1essl
+eles1s
+ele1s1ta
+ele2szek
+eles2z
+ele1s1ze
+ele2t1e2kt
+ele1te
+elete1k
+ele2te1ti
+ele2tetn
+e2l1e2te1t
+ele2t1k
+ele1t
+ele2t2l
+e2l1ettk
+elet1t
+ele12
+1e2l1e2vk
+ele1v
+el1e2xi
+el2du
+e1l
+el12ges
+el1ge
+el12get
+el1gj
+el1gtek
+elg1te
+el1gv
+e2l12het
+el1he
+el1ka2
+el2kak
+el2k1an
+el2k1
+el2k1e2le
+el1ke
+el2kev
+el2ke1ze
+el2ke1zi
+el2kezt
+el11k
+el2k
+el2ku
+el12l.
+el1ld
+el2led
+el1le
+el12let
+e1l12l
+el1lh
+el12li
+el1lj
+el1ln
+el1ls
+e2l1lt
+el12l
+e2l1lv
+e2l12ne1ke
+el1ne
+e2l12nekh
+e2l12red
+el1re
+e2l12rem
+el2rend
+elre2n
+e2l12rez
+el2r2t.
+el1r
+el2r2i.
+el1ri
+e2l1rp
+e2l1r1r
+e2lrtel
+elr1te
+e2l1r1t
+el1rth
+e2l1r1t
+e2l12r
+e2l1rz
+2els1t2
+el1s
+el2so
+2els2z.
+els2z
+2elszel
+el1s1ze
+2elszem
+2elsz1ne
+2elsz1n
+2el1s1z
+2el1s1z
+2elszv
+el2tel
+el1te
+e2l12tes
+el2te1te
+e2l1tk
+e2l1tt
+e2l12v.
+el1fl
+el1f2r
+el1gl
+1elhap
+el1ha
+el2ib
+e1li
+el1i1d
+el1i2do
+el1i1ga
+e2l1i1g
+e2l1ill
+e2l1i2ma
+e2li1m
+e2l1imp
+e2l1i2na
+e2l1in1to
+el1i2on
+eli1o
+eli12
+e2l1i2p
+e2l1i1ra
+e2l1i2ro
+e2l1i2si
+e2l1ism
+el1iss
+el1is1te
+eli2tin
+eli1ti
+eli2tol
+eli1to
+eli1tu2
+el1i2v
+e2l2ix
+el1izm
+el1i2zo
+e2l1g
+e1l
+el12r
+el12v
+elka2r1
+el1ka
+1elkez1d
+el1ke
+1elkez1d
+el3ki
+el1k2l
+el1k2r
+el1kv
+el2l1a2d
+el1la
+el2l1a2d
+ell1alk
+el2l1amb
+el2lamp
+ella1t
+el2la1u
+el2l1br
+el1l
+el2l1ll
+1ellt2s12
+ell1t
+1elltm
+2elltakk
+ell1t
+ellt1a
+2ellts1gi
+ellt1s
+el2lef
+el1le
+elle2g12
+ell1el1k
+el2lelm
+1elle1n
+1ell2enes
+elle1ne
+1ellenf
+1elle1n
+1ellens2
+1ellenz
+el2lid
+el1li
+ell1inf
+ell1in2g.
+ell1int
+el2l1or
+el1lo
+ell1os2z
+ell11r
+el1l
+el2ln
+el1l
+el2ls
+el2l1r
+el1l
+elmeg1ol
+el1me
+elme2go
+1elm11
+el1m
+elm1
+1elmh
+1elml
+1elm1te
+1elnp
+el1n
+1elnk
+el1n
+el1obj
+e1lo
+el1oj
+e2l1o2k
+el1okm
+e2l1o2l
+el1oml
+el1o1mo
+el1ont
+el1opc
+e2l1o2pe
+el1o1ro
+el1orr
+el1os
+e2los2z
+e2l1ox
+el2ig
+e1l
+el1i
+el2in
+e2l12ri
+el1b
+e1l
+el12m
+e2l1n
+e2l1r
+e2l1s
+e2l12z
+2elp
+e1l
+el1
+2elr
+2el1b
+2el1bi
+2el1bo
+1e2lde1i
+el1de
+el2d12
+1e2ldj2e.
+eld1je
+2el1do
+1e2ld1ke
+el1d
+1e2ldkn
+1e2ldkr
+1e2ld2t.
+1e2l1f
+2el1f
+2el1f
+1e2lhv
+el1h
+1e2l1h
+2elib
+el1i
+2elik
+2elim
+2eliv
+2el1ja
+1e1lke1l
+el1ke
+2elkel2.
+2elk2.
+el1k
+2elkrt
+1e2lk1se
+1e2lkst
+2el1kl
+2el1k
+2elkt
+2el1ku
+2el1k
+2el2m.
+2el1m
+2el1m
+2el1na
+1e2lnn
+2el1n
+1e2ln2y.
+eln2y
+1e2lnyb
+2elnyer
+el1nye
+1e2lnyh
+2el1nyi
+1e2lnyk
+1e2lnyn
+1e2l1ny
+1e2lnyr
+1e2lnyt
+1e2l1ny
+2el1
+2elp
+el12r.
+1e2lreh
+el1re
+1e2lrej
+elre1p2
+el1riz
+el1ri
+el1rl
+2el1ro
+e2l11r
+2el1s
+2el1so
+2el1s
+el1s2p
+2el1s1ze
+els2z2
+2el1s1z
+2el1s1zi
+2el1s1z
+2elsz1ri
+el1s1z
+2el1t
+2el1
+2elvis
+el1vi
+2elviz
+1e2l2z.
+e2l1ze
+2e3lze1ne
+1e2lzm
+el1p2l
+el1p1r
+el1sk
+el1sl
+el1sm
+el1s1to
+el1sz2t2
+els2z
+el2t1aj
+el1ta
+elt2r1a2da1to
+el1t
+elt1ra
+eltra1da
+2elt2e.
+el1te
+el2t1e2re1i
+elte1re
+2eltes
+2elte2t.
+2el1te1te
+2elte1t
+2elteth
+2elte1ti
+2eltetj
+2eltetn
+2eltets
+1eltettk
+2elte1t
+2eltetv
+2eltb
+el1t
+2elt2l
+2eltt
+el1t2ra
+el1t1r
+el1t1r
+2eltk
+el1t
+e2l1ud
+e1lu
+el1u2g
+elu2n
+e2l1und
+e2l1u1ni
+el1u2r
+e2l1u2t
+e2l1uz
+el1j
+e1l
+el1s
+el12t
+el1c
+e1l
+e2l1d
+e2l1g
+el2gy12r.
+el2g2y
+el1gy
+el2gy1rn
+el2kn
+el1k
+e2l12l
+e2l1ltet
+ell1te
+e2l1r
+e2l1s
+e2l1t
+e2l1v
+e2l1z
+el1rt
+e1l
+e2l1z
+elv1a1da
+el1va
+el2v1a2d1so
+elva1d
+elv1a2d
+el2v1at
+2elvlaszt1u
+el1v
+elv1la
+elvlas2z
+elvlasz1t
+el2v1l2l.
+el2v1ra1i
+elv1ra
+el2v12ras
+el2v12rr
+elv1r
+elv1s2z
+el2vt
+el2v1enc
+el1ve
+1elvezet1
+elve1ze
+elveze1t
+el2v11g
+el1v
+elv11le
+el2v12r.
+el2v11ri
+el2vik
+el1vi
+el2vr
+el1v
+elv1olt
+el1vo
+el2v12
+el2vd
+el1v
+el2v
+el2v
+e2ly1a2
+el2y
+e2ly12
+e2ly1e2k2n.
+e1lye
+elye1k
+e2ly1el
+e2lyer
+ely1eszt
+elyes2z
+ely12j
+e1ly
+ely12k
+e2ly12l
+e2lys
+e2ly1i2ko
+e1lyi
+e2ly1i1ra
+ely2kj
+ely1k
+e2ly1o
+e2ly1
+e2lym
+e1ly
+e2lyn
+e2lys
+e2ly
+ely1ul
+e1lyu
+ely2l
+e1ly
+e2ly11l
+e2m1ab
+e1ma
+em1a2dat
+ema1da
+em1a2ds
+ema1d
+e2m1a2do
+e2m1a2d
+e2m1adt
+e2m1a2gi
+em1a2ja
+e2m1a1j
+em1ajk
+e2m1ajt
+em1a2ka
+em1a1k
+e2m1a1ku
+em1a2lap
+ema1la
+e2m1all
+em1al1m
+e2m1alv
+e2m1a1na
+1e2ma1n
+e2m1a2n2y
+ema2p
+em1a1p
+em1apr
+em1a2rn
+ema1r
+em1as1s1zo
+emas2s2z
+e2m1atl
+e2m1a2u
+e2m1a2v
+e2m1a2zo
+e2m1b
+e1m
+em2l
+em11la
+em1ld
+em11li
+e2m1p
+em2r
+e2m11ra
+e2m1rn
+e2m11ro
+e2m11ru
+em1rv
+e2m11s
+e2m12t1a2
+e2m1tl
+em1tm
+e2m1tt
+e2m11tu
+1embarg
+em1ba
+1embered
+em1be
+embe1re
+1embere1ki
+1emberf
+embe2r12
+1ember3s2
+emb2len
+emb1le
+1emb1l
+em1b1lo
+em1b1re
+1emb1ri
+em1b1ro
+em1dr
+eme2c3hanikh
+e1me
+emec2h
+eme1c1ha
+emecha1ni
+emechani1k
+eme2c3hanikkk
+eme2c3hanik1t2
+e2m1ef
+eme2geg2y
+eme1ge
+eme3ger
+eme3gi
+eme2g1o
+em1e2gyet
+emeg2y
+eme1gye
+em1e1gy
+e2m1egz
+e2m1e2ks
+eme1k
+e2m1e1la
+e2m1elb
+e2m1e2l1t
+eme1l
+1emel1ke
+e2melk
+e2m1el1l
+e2m1elm
+2e2m1e1lo
+1emelb
+eme1l
+1emel1e2
+em1eln2y
+1emels
+1emelv
+1e2melt2y
+e2m1ember
+emem1be
+e2m1e2mel
+eme1me
+e2m1e1mu
+e2me2ner
+eme1ne
+e2m1e2p
+e2m1e2re1i
+eme1re
+e2m1e2rn2y
+eme1r
+e2m1e2r
+eme2sa
+e2m1e2se1t
+eme1se
+e2m1e2ss
+eme1s
+e2m1e2szem
+emes2z
+eme1s1ze
+e2m1e2szet
+e2m1eszk
+e2m1eszm
+e2m1e2v
+eme2z1a
+eme2z12
+eme2z1er
+eme1ze
+eme2z1o
+eme2z3s
+e2m1g
+e1m
+e2m12h2e.
+em1he
+e2m12hen
+e2m12hes
+e2mhs
+e2m12j
+em2k
+e2m11ke
+em1kr
+em12let
+em1le
+e2mne1ke
+em1ne
+e2m1p
+e2mrtel
+emr1te
+e2m1rt1ke
+emr1t
+e2m1rt1k
+e2m1rtkn
+e2m1szl
+ems2z
+em2t1a2
+em2tr
+em1t
+e2m12tek
+em1te
+em2tel
+e2m1te2l.
+emt1elh
+emt1els2
+em1fl
+emfoga2d
+em1fo
+emfo1ga
+emfo2ga1da
+em1f2r
+em1gr
+e2mi1d
+e1mi
+e2m1i2d
+emi2g
+e2m1i1ga
+e2m1i1ge
+e2m1i1g
+1e2migr
+e2m1iks
+emi2m
+em1i1ma
+e2mi1m
+e2m1inf
+e2m1ins
+e2m1in1te
+e2m1i2p
+e2m1i1ra
+e2mi1r
+e2m1i1ro
+e2m1irt
+e2m1isk
+e2m1ism
+e2m1is1te
+emi2s1zo
+emis2z
+em1i1z
+em1izg
+e2m1i2zo
+e2mg
+e1m
+e2m1j
+e2mr
+e2m12v
+em1kl
+em1kr
+1emlkm
+em1l
+1emlkv
+emo2k
+e1mo
+e2m1okl
+em1o1ko
+e2m1ok1t
+em1o1la
+e2m1old
+em1oll
+e2m1olt
+e2m1o2p
+e2m1ork
+e2m1or1s2
+e2m1orv
+em2ra
+e1m
+em12r
+e2m1b
+e1m
+em2k
+e2m11k
+em2l
+e2m1ld
+em11l
+e2m1n
+e2m12r
+e2m1s
+em1v
+e2m12z
+em12r.
+e1m
+em1rk
+em1rn
+em12r
+em1rr
+em1rt
+1empt
+em1p
+em1pc
+em1p2re
+em1p1r
+em1p1ro
+em1p1r
+em1p2s
+em1sk
+em1sm
+em1sp
+em1s2t
+em1t2r
+1e2m2u.
+e1mu
+e2mud
+e2mug
+e2muj
+1e2muk
+1e2mulz
+1e2mum
+em1u1ni
+em1u1no
+e2mur
+e2mus2z
+em1u2tal
+emu1ta
+e2m1u2t
+e2mutc
+e2m1u1t
+e2m1j
+e1m
+em1r
+e2m1t
+e2m1d
+e1m
+e2m1g
+e2m12l
+e2m1nn
+e2m1r
+e2m1t
+e2m1v
+e2m1z
+emv2sze1k
+e1m
+em1v
+emvs2z
+emv1s1ze
+e2m1z
+em1zr
+e2n1ab
+e1na
+en1a2do
+en1a1gi
+e2n1a2j
+e2n1a2k
+en1a2la
+en1alk
+en1all
+en1alm
+e2n1a2n
+en1a2p
+ena2p1e
+en1a2r
+en1arc
+en1as2z
+en1atk
+ena2u
+en1aut
+e2n1br
+e1n
+en1g
+en1ld
+en1lm
+e2n11ra
+en1rn
+en12ro
+e2n11ru
+en1tk
+en1tm
+en1tv
+en1bl
+en2c1a2
+en2c1r
+en1c
+en2c3h
+en2cip
+en1ci
+en2c
+en2c1ol
+en1co
+en2c1os
+en2c12
+en2c3sg
+enc2s
+en1c1s
+en2c3sor
+en1c1so
+enc3s2p
+enc3s2z
+en2cu
+en2d1a1d
+en1da
+en2d1alk
+en2da1no
+en2d1ll
+en1d
+en2d1rn
+en2d1tl
+end12j
+en1d
+en2dl
+en2d12r.
+en2d1rr
+en2d1r1t
+en2d1rz
+en2d1or
+en1do
+en2d1n
+en1d
+en2d12r
+en2ds
+en1d
+en1d2r
+en2d
+en2d1za
+end2z
+ene12
+e1ne
+e2n1egr
+ene1g
+e2n1egg
+ene1k1ri
+en1e2lek
+ene1le
+en1el1j
+en1elk
+en1ell
+en1elm
+en1eln2y
+en1e1l
+en1el1v
+e2n1eml
+ene12
+ene1p2
+2ene1r
+ene2red
+ene1re
+1e2nerg
+e2n1ern
+e2nerv
+2enes
+ene1sz1t
+enes2z
+ene2tal
+ene1ta
+ene2tos
+ene1to
+e2n1ex
+en2k1a
+e1n
+en2ke2l
+en1ke
+en1ki2
+en2kis
+en12p
+en11p
+e2n12r.
+e2n1rd
+e2n11r
+e2n11ri
+e2n1r1te
+e2n1rv
+en2s1za
+ens2z
+en2szekt
+en1s1ze
+ensze1k
+en2szer
+en2sz1in
+en1s1zi
+e2n1tk
+e2n12ves
+en1ve
+en2vi2g
+en1vi
+en1f2l
+enflu1o2
+enf1lu
+en1ga2
+en2gan
+1enge1d
+en1ge
+enger2r1a2datb
+enger2r
+enge2r11ra
+enge1r
+enge2r12rad
+engerra1da
+enge2r12
+engs3s
+en1g
+eng1g
+e2ni1d
+e1ni
+e2n1i2ga
+e2n1i1ge
+e2n1i1g
+en1ill
+e2ni1m
+e2n1i1na
+e2n1ind
+e2n1inf
+e2n1in1te
+e2n1inv
+e2n1i2r
+en1isk
+e2n1ism
+eni2s1za
+enis2z
+eni2sz1e2r
+eni1s1ze
+eni2s1zo
+eni2s1z12
+e2n1v
+e1n
+en1k2j
+en2n1e1me
+en1ne
+en2nes
+enn11ge
+en1n
+enn2k
+en2n11ke
+en2nr
+en2nir
+en1ni
+en2n1o
+en2n
+en2n12l
+en1n
+enny1a2d
+en2n2y
+en1nya
+enny1as
+en1ny1
+enny1el2v.
+en1nye
+en3nyer
+en1ny12
+en3nyu
+e2n1ob
+e1no
+e2n1of
+e2n1o1i
+eno2k
+en1o1ko
+en1old
+e2n1olv
+eno2ni
+e2n1op
+eno2r12
+e2n1ost
+en1oszt
+enos2z
+e2n1o2x
+en1ta2
+e1n
+en2tal
+en2t1e2
+e2n1b
+e1n
+e2n1l
+en1n
+e2n1s
+e2n12t
+e3nv
+e2n12r
+e1n
+en1pr
+en2s1ab
+en1sa
+en2s1a2l
+en2s1a2n
+en2sas
+en2s1el
+en1se
+en2s1r1t
+en1s
+ens3s1z
+ens2s2z
+en2s3zon
+ens2z
+en1s1zo
+en2t1a2c
+en1ta
+en2ta1da
+entad2
+ent1ag2y
+enta1k2
+en2t1a2la
+ent1alj
+en2t1al1k2
+ent1a2lo
+ent1and
+en2t1a2n2y
+ent1ass
+en2t12rak
+en1t
+ent1ra
+en2t12rat
+en2t11r
+en2t12r
+en2t1el1m
+en1te
+ente2r1a
+enter1s2
+en2t1es1te
+en2t1estb
+entes1t
+en2t1estn
+en2t1estr
+en2t1estv
+en2t1es1ti
+ente1t2r
+en2t12g
+en1t
+en2tp
+en2trm
+ent2s1g3g
+ent1s
+en2t12v2e.
+ent1ve
+en2t1i1g
+en1ti
+en2t1i2o
+enti2p
+ent1i1pa
+enti2s2z
+en2t1okt
+en1to
+en2tn
+en1t
+en1trad
+ent1ra
+ent2ran
+en2tu2n
+en1tu
+en2t1u2r
+en2t12z
+en1t
+en1u1ta
+e1nu
+en1r
+e1n
+e2n1z
+e1n
+e2nyab
+en2y
+e1nya
+e2ny1a2d
+e2ny1a1e
+enya2g
+eny1a1ga
+eny1a1g
+e2ny1aj
+eny1alk
+e2ny1a2n
+eny1a1r
+e2ny1as
+e2ny1at
+e2ny1a1u
+enyaut2r
+eny1a2u1t
+eny1a2ut1
+eny1d2
+e2ny1e2d1z
+e1nye
+enyed2z
+e2ny1e2k1r
+enye1k
+e2nyelm
+eny1eln
+enye1l
+eny1el1vo
+eny1el1v
+e2ny1e2r
+e2ny1e1ve
+e2ny1va
+e1ny
+1enyh2i.
+eny1hi
+eny2h1s
+eny1h
+e2ny1id
+e1nyi
+e2nying
+e2ny1i1ra
+e2nyiz
+eny12r
+e1ny
+e2nyok
+e1nyo
+e2ny1o2l
+enyoms3s
+enyo1m
+e2ny1or
+e2ny1os
+e2ny12
+eny2k
+e1ny
+e2ny11k
+e2nyt
+eny1s
+enyt2
+eny1tr
+eny1t
+e1ny
+eny1va2
+eny2van
+1enyv2e.
+eny1ve
+eny2v1e2l
+1enzim
+en1zi
+e1o
+eo2z
+eo1
+e2o1bo
+e2o1de
+eo2d
+eo1g2r
+e2o1ka
+eo2kd
+eo1k
+e2okr
+e2o1k
+e2o1k2l
+e2okon
+eo1ko
+eo2kos
+eo2k
+eo2laj
+eo1la
+e2o1l
+eo2l2y
+e2o1me
+e2o1m
+e2o1mi
+eo2n1al
+eo1na
+eo2nan
+eo2n1a2t
+eo2n1a1u
+eo2n1l
+eo1n
+eo2nr
+eon1d2
+eo2ner
+eo1ne
+eon1f2
+eo2niz
+eo1ni
+eo2n
+eon1t2r
+eo2n1
+eo2n
+eo2pe
+eo1p2l
+e2o1p2r
+eo2r1a2
+eo2r12
+eo2re2s
+eo1re
+eo2r1s
+eo1r
+eori2t
+eo1ri
+eor1k2
+eo2r
+eor1s2
+eo2so
+e2ost
+e2o1s1za
+eos2z
+eo1szf
+e2o1sz2k
+e2o1t
+e2o1to
+eo2vi
+e1
+ea2d
+e1a
+e21b
+e2ce
+e2d
+e21fa
+e21he
+e21je
+e2kap
+e1ka
+e2kp
+e1k
+e2kor
+e1ko
+e21mi
+e21m
+e21n
+e2no
+e1pr
+e2r
+e21re
+e2sor
+e1so
+e21su
+e21s1zo
+es2z
+e21ta
+e21t
+e21te
+e21t
+e21ti
+e21t
+e1t1r
+e2vak
+e1va
+e21ve
+e21v
+e21v
+e2vo
+e2v
+e1
+e2b
+e2d
+e2k
+e2le
+e2l
+e2li
+e2l
+e2l
+e2l
+e2m
+e2n
+e2ress
+e1re
+e2r
+e2r
+e2ve
+e2vi
+e2v
+e2z
+e1
+e2re
+e2r
+e2r
+e2s2z
+e2p1ab
+e1pa
+e2p1a2da
+e2p1a2d
+e2p1a2d
+ep1a2g2y
+e2p1a1ka
+e2p1akk
+e2p1akn
+ep1a2lak
+epa1la
+ep1a2lap
+e2p1alj
+e2p1alk
+epa2lom
+epa1lo
+e2p1a2n2y
+epa2rn
+epa1r
+ep1at1r
+ep1a2ut
+epa1u
+ep1a2zo
+e2p1b
+e1p
+e2p12g
+ep1l1l
+e2p12ra
+ep2s
+e2p11sa
+ep12t1a2
+ep1tc
+e2p12t1
+ep1tf
+e2p1tm
+ep12t1o
+ep1tt
+ep12t
+e2p1tv
+ep1bl
+ep1br
+ep1dr
+e2p1e2d2z
+e1pe
+e2p1e2lemr
+epe1le
+e2p1e2le2t
+e2p1el1l
+e2p1e1lo
+e2p1e1ne
+epe2ral
+epe1ra
+epe2r1e2c
+epe1re
+epe2rev
+epe2rin
+epe1ri
+epe2r2l
+epe1r
+e2p1es1ti
+epe2s1z
+epes2z
+e2pesz1m
+e2p1ex
+1e2pd
+e1p
+1e2pb
+ep1
+1e2p1i
+1e2pn
+e2p1g
+1e2pit
+ep1i
+e2pj
+ep1kh
+ep11le
+e2p1lm
+1e2pnk
+e2p12r.
+ep1fl
+ep1i1do
+e1pi
+e2p1i2ko
+e2p1ind
+e2p1in1ga
+e2p1i2r
+e2p1irt
+e2p1ism
+e2piz
+e2p1g
+e1p
+e2p1j
+e2p1n
+e2p1v
+ep1kl
+ep1kr
+ep2lag
+ep1la
+e1p2la1k
+e1p2lan
+e1p2ln
+ep1l
+e2p1ob
+e1po
+e2poc2h
+ep1okt
+e2p1olv
+e2p1o2pe
+e2p1orn
+ep1or1s
+1epos2z.
+epos2z
+1epo1s1za
+1epo1s1z
+1eposz2t.
+ep1osz1t
+e2p12l
+e1p
+e2p1nt
+e2p1s
+e2p1v
+e2p11ri
+e1p
+ep2pan
+ep1pa
+ep2pt
+ep1p
+ep2p1e2le
+ep1pe
+ep2p1elh
+epp1e2r
+ep1p2
+ep2pr
+ep2p
+ep1p1ro
+ep1p1r
+e2p3ret
+ep1re
+e1p2rd
+ep1r
+e1p2roj
+ep1ro
+e1p2rot
+ep1s2k
+ep1sp
+ep1st
+ep2ta2d
+ep1ta
+ep2t1aj
+ep2t12v
+ep1t
+ep2t1op
+ep1to
+e2p1ug
+e1pu
+e2p1u2ta
+e2p1u1t
+ep1j
+e1p
+ep1t
+e2p1g
+e1p
+e2p1t
+e2p1z
+e2p1z
+e1p
+e2r1ab1la
+e1ra
+er1a2bor
+era1bo
+e2r1abr
+er1abs
+era2dat
+era1da
+e2r1a2d
+e2r1adm
+er1a2do
+e2r1a2d
+era1dr
+er1a2ge
+er1agr
+e2r1a2ja
+e2r1ajk
+er1aj1t
+e2r1a2kad
+era1ka
+e2r1a2kas
+e2r1akc
+erakci21
+erak1ci
+erakci1
+e2r1ak1ti
+er1a2la
+e2r1alg
+e2r1alj
+e2r1alk
+e2r1a2lo
+er1als
+e2r1alt
+er1alv
+er1am1b2
+er1amp
+er1ang2y
+er1ann
+er1a2nya
+eran2y
+e2r1a2p2a.
+era1pa
+e2r1app
+er1aps
+e2r1a2ro
+e2r1asp
+era2sz1a2l
+eras2z
+era1s1za
+er2a2szav
+era2szrn
+era1s1z
+er2a2szel
+era1s1ze
+era2sz12p
+era1s1z
+e2r1atk
+e2r1atl
+era1t2r
+er1att
+er1a2ut
+era1u
+e2r1a2zo
+e2r1br
+e1r
+er2f
+er11ge
+er12g
+e2r12g2y
+er1l1l
+er1l1l
+er1l1lo
+er1l1l
+er1llv
+e2r11po
+er12rak
+er1ra
+e1r12r
+e2r1rb
+er11re
+er11r
+er1rf
+er1rk
+e2r12ro
+e2r1rr
+er1rs
+e2r12ru
+e2r11r
+er1rv
+er11s
+e2r12s2z
+er12t1e2
+e2r1th
+er12ti
+e2r12t
+e2r1tj
+e2r1tk
+er1tl
+e2r1tm
+e2r1tn
+e2r1tr
+e2r1tt
+e2r1tv
+erb1i2na
+er1bi
+er2c1a2l
+er1ca
+er2car
+er2c1r
+er1c
+er2c1t
+erc1ell
+er1ce
+er2c3h
+er2ci2d
+er1ci
+er2c1i1na
+er2c1i1n
+er2c1i2p
+er2cis
+erc1k2
+er1co2
+er2c
+er2csad
+erc2s
+er1c1sa
+er2cs1an
+ercs1l
+er1c1s
+er2c
+er2c2z
+1erdej
+er1de
+1er1d
+ere12
+e1re
+1e2rede1t
+ere1de
+e2redn
+ere1d
+ere1e2
+e2r1eff
+ere2gl
+ere1g
+ere2gel
+ere1ge
+e2r1e2ger
+ere2gyes
+ereg2y
+ere1gye
+1e2rei1e
+ere1i
+erei2g
+1e2rej1
+ere1j
+1e2rejn
+1e2rejr
+1e2rej1t
+1e2rej1ke
+ere1j
+1e2rejkk
+1e2rejkn
+1e2rejkr
+1e2reje2k.
+ere1j
+erej1e
+1e2rejn
+1e2rej2t.
+ere2k1el
+ere1ke
+erek1e2s1z
+erekes2z
+ere2k12j
+ere1k
+ere2kot
+ere1ko
+erek1t
+ere2k12s
+ere1k
+e2r1e2leg
+ere1le
+e2r1elr
+ere1l
+e2r1ellen
+erel1le
+e2r1e1l
+e2r1elr
+e2r1elvek
+erel1ve
+e2r1embe2r.
+erem1be
+e2r1emberb
+e2r1embe1r
+e2r1emberh
+e2r1embe1ri
+e2r1emberk
+e2r1embern
+e2r1emberr
+e2r1embert2
+erem1eg2y
+ere1me
+ere2m1emb
+erem1r1t
+ere1m
+ere2m1ut
+ere1mu
+e2r1enz
+ere2pan
+ere1pa
+ere2pas
+ere1p2
+ere2p1l
+ere2p1e2s
+ere1pe
+ere2pin
+ere1pi
+ere2pos
+ere1po
+er1erk
+er1ern
+er1e1r
+e2r1es1ti
+e2r1estj
+e2r1estr
+1e2res2z.
+eres2z
+e2resz2e.
+ere1s1ze
+ere2s1z
+e2re1s1z
+ere2tl
+ere1t
+ere2t1eg
+ere1te
+ere2t1erj
+ere2t12r2.
+ere1t
+eret1r
+ere2t12v2e.
+eret1ve
+ere1t2
+er1e2vs
+ere1v
+e2r1ex
+1e2reze2t.
+ere1ze
+1e2reze1te
+1e2rezkh
+ere1z
+er1be2
+e1r
+er2bes
+er12g.
+er12ge
+er11g
+e2r12j.
+e2r1jb
+er1jf
+e2r1jn
+e2r1js
+er2k1a2
+er2k
+er2kol
+er1ko
+er2k1
+e2r12le1te
+er1le
+e2rne1ke
+er1ne
+erne2kest
+er12nekes
+e2r12ne1k
+er2p1a
+er2p
+e2r12re2n
+er1re
+e2r12r
+e2r12ri
+e2r1r1t
+er2sa2
+er2s1elv
+er1se
+er22s1z
+ers2z
+er2s1zo
+er22s1z
+e2r12ter
+er1te
+e2r1tk
+e2r12v.
+e2r12v2e.
+er1ve
+e2r12vek
+e2rven
+e2r12ves
+e2r12vet
+e2r12vn
+er1v
+e2r12v2t
+e2r1vf
+e2r1vh
+e2r12vi
+e2r1vn
+e2r1vr
+e2r1vt
+e2r1vv
+erf2l12v
+er1f
+erf1l
+er1fl
+er1f2r
+er1gl
+e2r1i2deg
+e1ri
+eri1de
+e2ri1d
+e2r1i1do
+er1i2du
+eri2ga
+e2r1i2g
+e2r1i2g
+eri2kon
+eri1ko
+e2r1i2mi
+eri2no
+erint2
+e2rinteg
+erin1te
+erin1tr
+e2r1i2on
+eri1o
+eri2os
+e2r1i2par
+eri1pa
+e2r1i1ra
+er1i1r
+e2r1isk
+er1ism
+eri2s1zo
+eris2z
+e2r1i1ta
+e2r1i2z
+e2r1izg
+e2r1izmusr
+eriz1mu
+erizmu1s
+e2r1izmusun
+erizmu1su
+er1g
+e1r
+e2r12j.
+e2r11j
+e2r1r
+e2r12z
+er1k2r
+er1k2v
+erme2k1a2
+er1me
+erme2k2
+erme2ke2s2z
+erme1ke
+erme2ko
+erme2kl
+erme1k
+erme2s1z1
+ermes2z
+er2mind
+er1mi
+erm1i2si
+ermo1sz2t
+er1mo
+ermos2z
+ern1a1la
+er1na
+ern1kn
+er1n
+ern3n
+er2n12d2
+er1n
+2ernycsk
+ern2y
+er1ny
+ernyc2s
+1ernys
+er1okl
+e1ro
+e2r1okm
+er1ol1da
+e2r1o2li
+ero2nal
+ero1na
+e2r1o1pe
+e2r1opt
+er1orc
+er1ord
+er1orm
+er1orn
+e1r1o2ro
+er1ors
+e2r1orv
+e2r1o2ve
+e2r1o1vi
+e2r1c
+e1r
+er12d
+er11lo
+er12r
+er11ri
+e2r12c
+e1r
+er2k
+er1kl
+er12ko
+e2r11k
+e2r12l
+e2r1r
+e2r1s
+e2r1t
+e2r12z
+e2rdd
+e1r
+er2n
+er1
+1e2rlt
+1e2r1m
+e2rmm
+e2rnkk
+1e2r1n
+1e2r1
+e2r11ri
+er12r
+er1p2l
+er1p2s
+err1di2
+er1r
+er2rv
+er1r
+er1ry
+er2s1a2d
+er1sa
+ers1alk
+er2s1an
+er2sat
+er2s12gi
+er1s
+ers11ra
+ers1eml
+er1se
+er2sr1te
+er1s
+er2s1r1t
+er2s1r1t
+er2si2d
+er1si
+er2s1im
+er2s1i2n
+er1s1k
+er2s1od
+er1so
+er2s1ol
+er2s1n
+er1s
+er1spor
+ers1po
+er1s1r
+er1st1ra
+erst2r
+er2su2t
+er1su
+ersz2to
+ers2z
+er2t1a1i
+er1ta
+ert2p
+er1t
+ert11po
+ertra2d
+ert1ra
+ert2r1a1da
+er2t1el1k
+er1te
+ert1estj
+ert1e1s1ze
+ertes2z
+er2t12j
+er1t
+er2t1kn
+er2t1vn
+ert1v
+er2t12vv
+er2tid
+er1ti
+er2t1i2m
+er2t1z
+er1t
+er2tos
+er1to
+ert11r
+er1t
+er2t1s
+er1t
+er2t1z
+er1t2ran
+ert1ra
+er1trn
+ert1r
+ert1s
+er2t1t
+er1t
+eru1bi2
+e1ru
+1e2rup
+e2r1u2ra
+er1u1r
+e1r1u1ru
+er1u2s2z
+er1u2t
+e2r1j
+e1r
+e2r1r
+e2r12s
+er1tj
+er1tl
+er12to2
+er1tr
+e2r1d
+e1r
+e2r1gg
+er1gyb
+erg2y
+e2r1gyn
+er1gyr
+e2r12led
+er1le
+e2r1r
+e2r1s
+e2r1t
+e2r12v
+e2r1z
+e2r12z
+e1r
+er2v1a1la
+er1va
+er2v1alt
+erva2n
+erv1an2y
+er2v12ru
+er1v
+er2v1sa
+er2v1tk
+erv1e2l1k
+er1ve
+erve1l
+er2vere1ze
+erve1re
+er2v1e2s1ze
+erves2z
+er2vk
+er1v
+er2vr1te
+er2v1rz
+er2vos
+er1vo
+er2vs
+er1v
+er2v
+er1ya
+2es2a.
+e1sa
+e2s1a2b
+e2s1a2d
+2esait
+esa1i
+e2s1al1ja
+e2s1alm
+esa2n
+esa2p
+es1a1p
+es1arc
+es1ass
+es1as2z
+e2s1a2t2y
+e2s1a2u
+2es1b
+e1s
+e2s12g
+2esn
+es11ra
+es12ru
+2est
+es1bl
+es1br
+es2ca
+es2c2h
+es2co
+1es1d
+es1d1r
+1e2sedez
+e1se
+ese1de
+ese1fr
+ese2gye
+eseg2y
+e2s1e2k2n.
+ese1k
+e2s1elm
+e2seng
+e2s1ep1ri
+e2s1erd
+eseren2
+ese1re
+e2settem
+eset1te
+1e2set1t
+2es2.
+e1s
+es2g1el
+es1ge
+1e2sll
+1e2sl2y
+e2s1p
+e2s1rc
+ess3s
+esike2t1
+e1si
+esi1ke
+e2s1i1na
+es1i2pa
+e2s1isk
+estks2z1
+e1s
+es1t
+est1k
+1estst
+e1s2kat2
+es1ka
+e1s2kl
+es1k
+es2kic
+es1ki
+1es1k
+es2lat
+es1la
+eslege2l
+es1le
+esle1ge
+esle2t1o
+es2lin
+es1li
+e1s2lu
+e1s2mac
+es1ma
+es1n2
+2eso2k.
+e1so
+2eso1ka
+2esok1b
+2esokk
+2esokr
+2eson
+e2s1op
+2eso2s.
+2eso1sa
+e2s1os2z
+es1ott
+e2s12r
+e1s
+e2sh
+e1s
+es1
+es1k2
+e2sz
+es2pan
+es1pa
+es2pec
+es1pe
+es1pl
+e1s2p
+e1s2r
+es1s1t
+es3szab
+es2s2z
+es1s1za
+essz1a1ga
+essz1a2r
+essz1eg
+es1s1ze
+1es2szenc
+es3s2ze1r
+essz1let
+es1s1z
+essz1le
+ess2z1lt
+essz1int
+es1s1zi
+essz1ok
+es1s1zo
+es3s1z
+e1s2tab
+es1ta
+es2tad
+es2taf
+es2t1a2l
+es2ta1na
+es2t1a2n2y
+estapolc1
+esta1po
+es2t1a2ra
+est1a1r
+e1s2tat
+es2taz
+es2t12p
+es1t
+est1ram
+est1ra
+es2t11ri
+es2t1rn
+es2t1t
+1este1ko
+es1te
+es2tenz
+este2r1a
+es2t1es1te
+es2t1es1ti
+1estih
+es1t
+est1i
+1estj
+1estly2i.
+estl2y
+est1lyi
+1estlyib
+1estlyi1
+1estlyi2k.
+1estlyi1ki
+1estlyis
+1estlyit
+1estm
+1estnk
+es2t12r.
+es2t11ri
+es2t1rr
+es2tr1te
+es2t12r
+es2t1ill
+es1ti
+es2t1i1na
+es2t1int
+es2tip
+es2t1i2s2z
+es2tiz
+es2t1ol
+es1to
+e1s2top
+es2t1o2r
+es2t1os
+es2t12r
+es1t
+es1t2
+es2t1s
+es2t12r.
+es1t
+es2t1rk
+es2t11r
+es2t1rr
+es2t1rt
+2est1r
+es2tun
+es1tu
+es2tur
+es2t
+es2tr
+es1t
+es2t12z
+e2s1ud
+e1su
+esu2r
+e2s1u1ra
+es1u1r
+e2s1u1t
+es2j
+e1s
+e2s12r.
+e2s1rb
+e2s11r
+e2s1rh
+e2s11ri
+e2s1rk
+e2s1rn
+e2s1rp
+e2s1rr
+e2s1rt
+e2s12t
+e2s1z
+e1s
+e2sza2c
+es2z
+e1s1za
+esz1a1c
+e2szad
+e2sz1a2e
+esz1ajt
+esza2k1
+esz1akn
+e2sz1alj
+esz1an2y
+e2sz1a1ra
+e2sz1a1u
+e2sz1ru
+e1s1z
+e2sz1s
+esz2t
+e2s2z1ts
+e2s2ze1ce
+e1s1ze
+eszeg1r
+esze1g
+e2sz1eg2y
+e2sz1eks
+esze1k
+e2sz1e1la
+e2sz1e2mel
+esze1me
+1e2szenc
+2eszen2e.
+esze1ne
+2eszeneka2r.
+es3zene1ka
+2eszenekarb
+2eszenekart
+2e2s3zen1je
+esze1n
+2e2s3zent
+e2sz1er1d2
+e2szev
+e2sz1ex
+esz2do
+e1s1z
+esz12p
+e2sz12ri
+esz1i2pa
+e1s1zi
+esz1isk
+esz1ist2
+e2sz1i1ta
+e2sz1iz
+eszke2l
+esz1ke
+1eszm2e.
+esz1me
+1eszmb
+esz1m
+1eszm1i
+1eszmj
+1eszmk
+1eszmn
+1eszmt
+1eszmv
+e2sz1old
+e1s1zo
+esz2l
+e1s1z
+esz11l
+e2sz1n
+es3z1s
+esz2s
+es1z3se
+esz2tab
+esz1ta
+esz2tad
+esz2t1a2g
+esz2taj
+esz2t1a1la
+esz2t1alj
+esz2t1ap
+esz2t1rf
+esz1t
+esz2t1rn
+esz2t1e2v
+esz1te
+esz2t12r.
+esz1t
+eszts3s
+1eszt1ti
+esz2tid
+esz1ti
+esz2t1ol
+esz1to
+esz2t1os
+esz2t12r
+esz1t
+esz1t2
+esz2t12l
+esz2t12r.
+esz1t
+esz2tut
+esz1tu
+esz2t1t
+esz1t
+esz2tz
+esz1t
+e2sz12g
+e1s1z
+e2sz12z
+1e2szs
+e1s1z
+1e2szt
+esz1z
+et1abr
+e1ta
+eta2c
+et1a1c
+e2t1a2d
+e2t1a2g
+e2t1a2g2y
+e2t1a2j
+et1a2kas
+eta1ka
+e2t1akc
+et1a1k
+e2t1a1ku
+e2ta2la2g1
+eta1la
+eta2lak
+et1a2ls
+eta1l
+e2t1alb
+et1alf
+e2t1alg
+et1alj
+e2t1al1k2
+1e2ta1lo
+eta2n1
+e2ta2nyag
+etan2y
+eta1nya
+e2tapr
+et1a2ra
+e2t1a1r
+e2t1arc
+e2t1arz
+et1asp
+e2t1ass
+et1a2s1z
+etas2z
+et1aszt
+e2t1atk
+e2t1a2to
+e2t1at2y
+e2t1a2u
+e2t1a2z
+e2t1br
+e1t
+e2t12c2s
+e2t1f
+e2t12g.
+e2t12ga
+e2t1gb
+e2t1gg
+e2t1gn
+e2t1gr
+e2t1h
+et11ju
+et1ll
+e2t1lm
+e2t12rad
+et1ra
+et12r1e2
+et1rn2y
+et2ron
+et1ro
+et12r
+e2t12ta
+e2t12t1a2d
+e2t1th
+et1tl
+et1ts
+et11tu
+e2t1tv
+et1bl
+et1br
+et1dr
+ete1a2
+e1te
+ete2g1
+ete2g1e2l
+ete1ge
+ete2g
+e2t1e2k2e.
+ete1ke
+e2t1e2ke1i
+e2t1e2kek
+ete2k1k
+ete1k
+e2t1e2knk
+e2t1e2ks
+e2t1elc
+et1el1do
+ete2le1ge
+ete1le
+e2t1e2lej
+e2telemz
+e2t1e2le1s
+e2t1el1r
+ete1l
+etels1s
+e2t1el1ha
+e2t1el1h
+et1elhel
+etel1he
+e2t1el1i1ga
+ete1li
+e2t1el1j
+e2t1el1l
+e2tellen
+etel1le
+e2t1el1me
+e2t1elm2n.
+etel1m
+e2t1elm1ne
+e2t1elmt
+e2t1elnev
+etel1ne
+e2tel1n
+e2t1eln2y
+e2t1e2lo
+ete2lad
+ete1l
+etel1a
+et1el1s1z
+etels2
+etels2z
+e2t1el1t
+e2t1elter
+etel1te
+et1elt1r
+etel1t
+e2t1el1v
+e2t1elvez
+etel1ve
+e2t1el1vo
+e2t1elz
+ete2mal
+ete1ma
+e2t1ember
+etem1be
+ete2mel
+ete1me
+e2t1enz
+ete1p2
+e2t1er1d2
+ete2rn
+ete1r
+ete1ro1
+e2t1e2r
+ete2s1a
+e2t1est2e.
+etes1te
+e2t1esz1t
+etes2z
+ete2te1t
+ete1te
+ete2t12r.
+ete1t
+1e2tetse2n
+etet1se
+1e2tetsn
+ete2tos
+ete1to
+ete2t1
+ete1t1ra
+e2t1ezr
+e2t1br
+e1t
+et12
+e2t12g.
+e2t1gb
+e2t12g
+e2t1gg
+e2t12gi
+e2t1gn
+et2k1a2
+et2k12
+et2k1e2l
+et1ke
+et12k2
+et2kos
+et1ko
+e2t1lm
+e2t1rc
+e2t12r2.
+et1r
+e2t12rn
+e2t12rr
+e2t12rt
+et2ri1e
+et1ri
+e2t1r1ke
+e2t1rm
+e2t12rs
+et1r
+e2t1rtel
+etr1te
+e2t1rz
+et2sa2
+et2s1g
+et1s
+et2so
+ets3s
+et2s1za
+ets2z
+et1szl
+et1szr
+et2t1a2
+et2te2r.
+et1te
+et2te1re
+et1t1ra
+e2t12ven
+et1ve
+e2t2ve2s.
+e2t12vet
+e2t12vh
+et1v
+et2vig
+etv1i
+e2t12v1ne
+et2v1t
+e2t1vh
+e2t1vt
+et1fr
+et1gl
+et1gr
+et2he1i
+et1he
+2ethove2n.
+et1ho
+etho1ve
+2ethovenb
+2ethovenek
+ethove1ne
+2ethovenen
+2ethove1n
+2ethovenh
+2ethove1ni
+2ethovenj
+2ethovenn
+2ethovenr
+2ethovent
+2ethove1n
+eti2d
+e1ti
+et1i1de
+et1i1do
+eti2g
+e2t1i1ge
+e2t1i1g
+e2t1ig2y
+e2till
+et1i2ma
+e2t1i1m
+e2t1i2mi
+1e2ti1mo
+e2t1imp
+eti1na1
+e2t1ind
+e2t1inf
+e2t1ins
+e2t1in1te
+e2t1inv
+e2tinz
+e2t1i2pa
+e2t1i2ra
+e2t1i1ri
+e2t1i1ro
+e2t1i1r
+e2t1ism
+e2t1is1te
+e2t1i2s1za
+etis2z
+e2t1i2szon
+eti1s1zo
+e2t1i2ta
+et1i1z
+e2t1izg
+e2t1i1zo
+e2t1izz
+e2t1g
+e1t
+e2t1j
+e2t1n
+e2t12r
+e2t12v
+e2t1z
+et1kl
+et1k2r
+et1kv
+1etnol
+et1no
+et1o1da
+e1to
+e2t1okm
+e2t1okt
+e2t1oml
+eto2n1a2
+eto2nl
+eto1n
+eto2n1is
+eto1ni
+eton1n
+e2t1opc
+e2t1o2pe
+e2t1op1t2
+et1ord2
+e2t1or1g2
+e2t1orm
+et1orom
+eto1ro
+e2t1ors2
+e2t1orv
+et1ost
+et1oszl
+etos2z
+et1oszt
+e2t1o1u
+e2t12c
+e1t
+et12ra
+et12r
+e2t12v
+e2t12ko
+e1t
+et2l
+e2t12l.
+et11l
+e2t11l
+e2t1n
+e2t1s
+e2t1t
+et12v
+e2t12z
+et1a2
+e1t
+ete2l
+et1e
+ete2r
+et2b
+et1
+etf2l12v
+et1f
+etf1l
+et1p2
+e2t12r.
+e2t1rb
+et1rc
+et12rh
+et1r
+et2r2i.
+et1ri
+et1rk
+e2t1rl
+e2t1rn
+et2rk
+et1r
+e2t1rp
+e2t1rr
+e2t1rs
+et12r
+et1s2p
+et1pl
+et1pr
+et1ps
+e1t2raf
+et1ra
+e1trap
+e1tra1u
+e1t2rg
+et1r
+e1trf
+et1r
+e1t2ril
+et1ri
+et1sk
+et1sn
+et1sp
+et1st
+etta1i2
+et1ta
+etta2n12
+et2telem
+et1te
+ette1le
+ette2s1e2kh
+ette1se
+ettese1k
+et2tr
+et1t
+et1t2r
+et1t1ri
+et1ty12
+et2t2y
+e2t1ug
+e1tu
+et1u1na
+et1und
+et1u1ni
+et1u2ra
+etu2s2z
+et1u1t
+e1t1u1tu
+e2t1j
+e1t
+e2t12ri
+e2t1t
+e2t1d
+e1t
+e2t1g
+e2t1ld
+e2t1t
+e2t12v
+et12zem
+et1ze
+et2s1or1ra
+e1t
+et1so
+et2s3z2r.
+ets2z
+et1s1z
+e1t3ya
+et2y
+e1u
+eu2bo
+eu2ga
+eu2mal
+eu1ma
+eu2m1e
+eu2mim
+eu1mi
+eu2m1i2p
+eu2mis
+eu2m1iz
+eu2m
+eu2mr
+eu1m
+eu2m
+eum1p2
+eu2m
+eu2na
+eu2n
+eu2no
+eu2n
+eu2r2i.
+eu1ri
+eu2rig
+e2urt
+eu2se
+eu2s1z
+eus2z
+eu2tal
+eu1ta
+eu2taz
+eu2t
+e2uts
+eu2z2s
+e1
+e2j
+e2s2z
+e2ti
+e2to
+e1
+e2d
+e2ge
+e2g2y
+e2le
+e2l
+e2li
+e2l
+e2l
+e2l
+e2re
+e2r
+e2r
+e2s2z
+e2te
+e2t
+e2t
+e2ve
+e2v
+e2ze
+e1
+e2ri
+e2ze
+e2z
+e2zi
+e2z
+e2z
+ev2r1a2l
+e1v
+ev1ra
+eve2s1z
+e1ve
+eves2z
+evez2relv
+eve1z
+evez1re
+ev2l
+e1v
+ev2l1e2l
+ev1le
+ev2nye2l
+evn2y
+ev1nye
+ev2r1emb
+ev1re
+ev2r
+ev2so
+ev2s1za
+evs2z
+ev22s1z
+evzi2t
+e1v
+ev1zi
+evzi1
+evzi1
+ex1ab
+e1xa
+e2x1ak
+ex1al
+ex1ap
+ex1b
+e1x
+ex12r
+e2x1t
+ex1bl
+ex1br
+ex1dr
+e2xeg
+e1xe
+e2x1elm
+e2x1el1v
+e2x1er
+e2x1k
+e1x
+e2x1l
+e2x1p
+e2x1i2d
+e1xi
+e2x1i1g
+ex1inf
+e2x1ing
+e2x1int
+e2x1iz
+ex1j
+e1x
+ex1r
+ex1v
+e2x1ob
+e1xo
+ex1op
+ex1n
+e1x
+ex1r
+ex1s
+1expan
+ex1pa
+ex1sk
+ex1sp
+ex1st
+ex1j
+e1x
+e2x1g
+e1x
+e2x1v
+e2x1z
+eza2c
+e1za
+ez1a1c
+e2z1a2d
+ez1ajt
+e2z1a2l
+e2z1a2n
+e2z1arz
+e2z1as
+ez1aut
+eza1u
+ez1ll
+e1z
+ez2ma
+ez1rb
+ez1rr
+ez12r
+e2z1t
+ez1bl
+ez2dl
+ez1d
+ez1e2g2y
+e1ze
+e2z1e2kk
+eze1k
+e2z1e1la
+e2z1e2le1me
+eze1le
+e2z1elr
+eze1l
+e2z1elm
+e2z1e1l1
+e2z1e2mel
+eze1me
+ezen2t1e2
+eze2r1a
+eze2r
+eze2red
+eze1re
+eze2r1el
+eze2r1em
+eze2r1es
+eze2r1o
+e2z1e2r
+e2z1es1te
+e2z1e2s2z
+eze2t1a2
+eze2t1
+eze2t1eg
+eze1te
+eze2t1e2l
+eze2t1es2z
+eze2t12r.
+eze1t
+eze2t12r2.
+ezet1r
+eze2t12v2e.
+ezet1ve
+eze2t1o
+eze2tu
+e2z1g
+e1z
+e2z12j
+ez2k
+ez2k1o
+e2z1l
+ez2r1emb
+ez1re
+e2z2rett
+ez2ru
+ez2sa
+ezsks2z1
+ezs1k
+e2z12te
+ez1fr
+ez1gr
+ez1i2do
+e1zi
+ezi2g
+e2z1i1g
+e2z1i2ko
+e2z1ill
+ez1imp
+ez1i1n
+ez1ind
+ez1inf
+ez1int
+ezi2o
+ez1ion
+e2z1i2p
+ez1i2r
+ezis2g
+ezi1s
+ezi2s11g
+e2z1ism
+e2z12v
+e1z
+ez1k2r
+ezkupac1
+ez1ku
+ezku1pa
+ez1kv
+e2z1ob
+e1zo
+ez1old
+ezo2nr
+ezo1n
+ezon3n
+ez1opt
+e2z1ox
+e2z12l
+e1z
+e2z12r
+ez12t
+ez12b
+e1z
+ez1s
+ez12v
+eze2l
+e1z
+ez1e
+e2z12ri
+e2z1rl
+e2z1rs
+e2z12r
+e2z1rz
+ezs1or1ra
+ez1so
+ez1pl
+ez1p2r
+1ezre1i
+ez1re
+1ezrel
+1ezrb
+ez1r
+1ezr1i
+1ezrn
+1ezrr
+1ez1r
+1ez1r
+ez3saj
+ez2s
+e1z1sa
+ez3sap
+ez3st
+e1z1s
+ez3sv
+e2z3s
+ezsi12
+e1z1si
+ez3s2l
+e2z3sor
+e1z1so
+ez3s2p
+ez3s2ta
+ez3st2r
+e2z3s
+ez3s2z
+ez1t2r
+ez1u2r
+e1zu
+ez1u2t
+ez1j
+e1z
+ez12t
+e2z1g
+e1z
+1e2zs
+e2z1t
+e2z12z
+2.
+1a
+a2da
+a2d
+a2do
+a2d
+a2ga
+a2gi
+a2j
+a2ka
+a2la
+a2l1e
+a2na
+a2n2y
+a2r
+a2ri
+a2ro
+a2uk
+a1u
+1
+2f
+2g2y
+2ju
+2ra
+2ro
+2ru
+2r
+2b1ag
+1ba
+2b1a2j
+2b1a2k
+2b1al
+ba2n
+2b1an2y
+2b1a2v
+b1l
+1b
+b2r
+b2b1
+b1e1s1z
+1be
+bes2z
+2b12k
+1b
+2b1l
+2b1p
+bi12
+1bi
+b1isk
+b1i2va
+b1z
+1b
+b1kr
+b1pl
+b1pr
+1bred
+b1re
+1bresz1t
+bres2z
+1breszt2.
+bresz1t
+1bresztb2b.
+1breszt1e
+1breszt1i
+1bresztj
+1bresztk
+1bresztn
+1bresztr
+1bresztt
+1bresztv
+2b1ug
+1bu
+b1g
+1b
+c1a2d
+1ca
+c1aj
+c1a2k
+c1a2l
+c1a2n
+c1l
+1c
+c1r
+2c1e2lem
+1ce
+ce1le
+2c1elv
+2c1ember
+cem1be
+2c1e2mel
+ce1me
+c1gr
+1c3ha
+c2h
+1c3h
+1c3h
+1c3ho
+2c1i2d
+1ci
+2c1il
+c1i1ma
+c1ob
+1co
+c1os
+c1r
+1c
+c1pr
+c3sab
+c2s
+1c1sa
+cs1ol
+1c1so
+c3s2z
+2c1u2t
+1cu
+2c1l
+1c
+c3z2s
+c2z
+2d1ab
+1da
+2d1a2c
+2d1a2d
+2d1a2g
+2d1a2j
+d1akc
+d1akt
+d1a2ku
+d1alk
+2d1a2n
+d1a1pa
+d1a2p
+2d1arc
+d1asp
+d1ass
+d1a2ti
+d1at1t2
+2d1g
+1d
+d1p
+d1dr
+2d1e2g
+1de
+2d1ej
+2d1e2k2e.
+de1ke
+de2k1t
+de1k
+2d1e2l1a
+2d1elk
+2d1ell
+2d1e1lo
+d1ember
+dem1be
+2d1eml
+2d1enz
+2d1ep
+d1erd
+2dere1i
+de1re
+2derem
+2derg
+2derl
+2der1n
+2d1e2r
+2der1r
+2der1s2
+2der1t
+12de2s1a2
+2desem
+de1se
+12desg
+12de1s
+2d1g
+1d
+2d12j
+2d1kb
+2d12k
+2d1kk
+d2l
+2d11le
+2d1lm
+2d1p
+2d12r.
+2d12ri
+2d1rs
+2d1r1te
+2d1r1t
+2d1rv
+2d1rz
+d1fr
+di2a1d2
+1di
+di1a
+dia1k2
+di2a1ka
+di2akr
+di2al
+di2ar
+di2a1s
+dias2z2
+2d1i2d
+di2g
+2d1i1ga
+2d1i1ge
+2d1i1g
+d1i2ko
+d1ill
+2d1i2m
+d1i2na
+2d1ind
+2d1i1ni
+d1ins
+2d1int
+2d1i2p
+2d1i1ro
+2d1i2z
+2d1n
+1d
+2d1r
+d1v
+d1kl
+d1ok1ta
+1do
+2d1op
+2d1or
+2d1os2z
+d1ott
+d12r
+1d
+d1l
+1d
+d1n
+2d12r
+d1t
+d1v
+d1z
+2d1rm
+1d
+2d1rn
+ds2
+d1sp
+d1pl
+d1pr
+1d2ram
+d1ra
+d2raz
+1d2rm
+d1r
+d1sk
+d1sp
+d1sr
+d1st
+d1t2r
+2d1ud
+1du
+d1uj
+d1u1ra
+2d1u2t
+2d1j
+1d
+d1r
+d12t
+2d1d
+1d
+2d1g
+2d1t
+2d1z
+1d3za
+d2z
+1d3z
+1d3ze
+1d3z
+1d3z
+1e
+e2b
+e2la
+e2le
+e2l
+e2me
+e2pi
+e2r
+e2se
+e2s
+e2si
+e2s
+e2s1z1a2
+es2z
+e2s1z1
+e2szel
+e1s1ze
+e2szp
+e1s1z
+e2szir
+e1s1zi
+e2szis
+eszt2
+esz1tr
+e2uf
+e1u
+e2v
+e2v
+1
+2ge
+2le
+2p
+2ra
+2te
+f1a1i
+1fa
+f1aj1t
+fajt2
+f1ing
+1fi
+2f1is
+f1kl
+2f1os
+1fo
+g1abl
+1ga
+2g1abr
+g1a2d
+g2adt
+g1a1ka
+g1akk
+g1akn
+g1alj
+g1am
+g1a2n2y
+g1a2p
+2g1a2r
+g1aut
+ga1u
+g1a2v
+ga2z
+2g12g
+1g
+2g1l
+g1p
+g1rt
+2gt1a2d
+g1ta
+2g12t12
+g12t1e2
+g1tf
+g1tj
+g1tm
+g1ts
+g1tt
+g1tv
+g1bl
+g1br
+g1d2r
+g1e1ce
+1ge
+2gedn
+ge1d
+2g1ed2z
+2g1e2ge
+2g1ej
+2g1e2ks
+ge1k
+2g1e1la
+2g1elb
+g2elek
+ge1le
+ge2lemb
+2ge2le1me
+ge2lemn
+ge2lemt
+2g1elr
+ge1l
+2g1elf
+2g1el1ha
+g1el1h
+ge2lin
+ge1li
+2g1elis
+2g1el1j
+2g1elk
+2g1el1l
+2g1ellen
+gel1le
+2g1elm
+2gel1n
+g1eln2y
+2g1e2l
+2g1e2l1a
+ge1l
+2g1e2lm
+2g1e2ln
+g1e2lt
+2g1elp
+2g1elr
+2g1el1sa
+2g1el1s1z
+gels2z
+g1el1ta
+2g1el1t
+2g1el1v
+2g1elz
+2g1enc
+2g1e2ne
+2g1eng
+ge1p
+2g1e1pi
+ge2rl
+ge1r
+2g1ere1de
+ge1re
+ge2r1el
+ge1ri2
+ge2rim
+ge2rin
+2g1e2r
+g1e2r
+12gesd2
+2g1es2s2z
+gess2
+ge2s1ze
+ges2z
+2g1eszk
+2g1eszt
+12getj
+12geth
+ge1t
+12getn
+12gett
+g1e1va
+g1e2ve
+g1e2v
+2g1e1vo
+2g1ex
+2g12g
+1g
+2g12l
+2g12ne1ke
+g1ne
+2g12ne1k
+2gnek1k2
+2g12nekn
+g12p
+2g11p
+2g12ret
+g1re
+2g12rez
+2g2r2.
+g1r
+2g1rh
+2g12ri
+2g1rl
+2g1rm
+2g12r2.
+g1r
+2g12rk
+grt2
+2g1r1te
+2g1r1t
+12g1s
+12gsn
+2gst
+2g11va
+g1fl
+g1fr
+g1g2l
+g1g2r
+g3gyo
+g2g2y
+1ghes
+g1he
+1g1h
+gi2as
+1gi
+gi1a
+g1i2den
+gi1de
+gi2g
+2g1ig2a.
+gi1ga
+gig1ap
+gig1as
+2g1igaz
+gi1g1
+2g1ill
+2g1i2m
+g1i1na
+2g1inf
+2g1ing
+2g1inj
+2g1ins
+2g1int
+2g1i1ra
+2g1i1ro
+2g1i2ta
+2g1i1va
+2g1i2zsn
+gi1z
+2g1izg
+g1g
+1g
+g1j
+g1n
+g1r
+g1v
+g1z
+1g2j.
+gki1a2
+g1ki
+g1kl
+g1kr
+g1kv
+1gn2e.
+g1ne
+1gnk
+g1n
+1gnn
+1gnt
+1g1ni
+gnyoms3s
+gn2y
+g1nyo
+gnyo1m
+2g1o2b
+1go
+g1o1ki2
+g1o1la
+g1old
+g1o1li
+g1oll
+g1olt
+2g1op
+2g1o2r
+2g1os
+g1ott
+2g1o2v
+2g1ox
+2g1c
+1g
+g12r
+g1b
+1g
+2g12d
+2g12l
+g1n
+g2r
+g11r
+2g1s
+2g1t
+2gv
+2g12z
+1g2.
+1g
+1gk
+2gr
+g11ri
+g11r
+g11si
+1gt
+1gv
+g1pl
+g1pr
+g1ps
+g1sk
+g1sp
+g1st
+gs2z2
+1gs2z.
+gszraz1
+g1s1z
+gsz1ra
+g1tr
+2g1ud
+1gu
+g1un
+2g1u2t
+g1g
+1g
+g1j
+g1r
+g1s
+g12t
+2g1d
+1g
+2g1g
+g2gye
+gg2y
+g2gy
+g2gy
+g2gy
+2g1r
+2g1s
+2g1t
+2g1v
+2g1z
+2g1z
+1g
+gve1z2
+g1ve
+2gy1a2
+g2y
+2gyl
+1gy
+2gye1d
+1gye
+2gy1eg
+2gyelek
+gye1le
+2gyele1me
+gye2m
+2gy1emb
+2gy1e1me
+gye2se1k
+gye1se
+2gy1es2z
+2gy1e2v
+2gye1ze
+2gy1k
+1gy
+2gyl
+gy12ne
+1gyi2
+2gyin
+2gyir
+2gy1is
+2gy1iv
+2gy
+1gyo2
+gy1ok
+gy1os
+gy1ot
+2gy12
+gy12l
+1gy
+2gy1u2
+2gy1
+2gy1g
+1gy
+2gy12l
+2gyr
+ha2l
+1ha
+h1a1la
+h1an2y
+2h1arc
+h1art
+2h1a1u
+2h1a2v
+h1e1d
+1he
+2heg
+h1e2g
+h1e2le
+h1e1l
+2h1elf
+h1elh
+h1ell
+h1e2l
+h1elt
+h1elv
+2h1enz
+2h1e2r
+2h1esem
+he1se
+2h1e2to
+2h1e1v
+2h1ex
+2he1ze
+12he1z
+12he1z
+12hezt
+2he1z
+2hezv
+h1g
+1h
+h12k
+2h12l
+2h1p
+h1rb
+h1fl
+2h1ic
+1hi
+2h1if
+2h1i2n
+2h1ip
+hi2r
+h1i1ra
+h1irt
+2hit
+h1i2ta
+2h1iz
+h1kr
+2h1od
+1ho
+h1old
+h1b
+1h
+h12d
+h1s
+h1pl
+h1pr
+1h1s
+h1sk
+h1sp
+h1ud
+1hu
+h1j
+1h
+2h1g
+1h
+2h1r
+2h1t
+2h1r
+1h
+1i
+i2d
+i2ga
+i2g
+i2m
+i2pa
+i2r
+i2ro
+i2ta
+i2vs
+i1v
+i2v
+1
+2r
+2ro
+2r
+2v
+2ze
+2j1ab
+1ja
+2j1a2da
+2j1a2l
+2j1an2y
+2j1a2r
+2j12l
+1j
+2j1p
+2j1rn
+j1eb
+1je
+2j1e2lem
+je1le
+2j1elh
+j1elm
+2j1elv
+j1emb
+2j1es2z
+2j1e2v
+2j12g
+1j
+j2j
+2j12k
+2j1l
+2j1p
+2j12te
+12j2i.
+1ji
+2j1il
+2j1im
+j1i2n
+2j1ip
+2j1iz
+2j1o2l
+1jo
+j12r
+1j
+j1d
+1j
+j1n
+j1r
+j1pl
+j1pr
+j1sp
+j1s2z
+j1ud
+1ju
+j1u2r
+ju2t
+j1u1ta
+2j1r
+1j
+2jl
+1j
+2j1z
+1j
+k1abl
+1ka
+k1a2c
+ka2dat
+ka1da
+k1a2d
+k1a2d
+k1ajt
+ka2kad
+ka1ka
+2k1a1k
+2k1akk
+2k1akn
+ka2lag
+ka1la
+k1a2lak
+2k1alg
+2k1alj
+2k1al1ko
+2k1all
+2k1alt
+k1a1lu
+k1amb
+2k1ang
+2k1app
+2k1a2r
+k1arc
+k1a2r
+k1arz
+2k1asp
+2k1ass
+k1aszt
+kas2z
+k1a2tom
+ka1to
+k1a2ve
+k1a1zo
+2k1l
+1k
+2k12p
+2k12rad
+k1ra
+2k12rak
+2k12r
+k1rb
+2k12r
+k1rh
+2k1rk
+2k1rn
+2k12ro
+k1rr
+2k12ru
+k12r
+k12s
+k1sv
+2k11ta
+2k12t12
+2k1tc
+2k1td
+2k12t1e2
+k11t
+2k1tf
+2k1th
+2k11ti
+2k12t
+2k1tk
+2k1tl
+2k1tm
+2k12t1
+2k1tr
+2k1ts
+k1tt
+2k11tu
+2k1tv
+2k1z
+k1bl
+k1br
+k1dr
+k1e1g
+1ke
+2k1e2ks
+ke1k
+2k1elb
+2k1e2leg
+ke1le
+2k1e2le1me
+2k1e2le1m
+2ke2lemm
+k1e2lr
+ke1l
+2k1elf
+2k1elk
+2k1el1l
+2k1ellen
+kel1le
+2k1elm
+2k1e1lo
+2k1e2l1
+ke1l
+2k1e2lg
+2kelkel
+kel1ke
+2k1e2lkp
+kel1k
+k1elp
+2k1el1ta
+k1el1t
+2k1eltr
+kel1t
+2k1ell
+ke1l
+2k1el1vi
+2k1e2mel
+ke1me
+k1eng
+ke1p2
+2k1erd
+2k1e2rec
+ke1re
+2k1e2red
+2k1e2re1i
+2k1e2rez
+2k1erg
+k1ern2y
+2k1e2r
+2k1e2r
+2k1e2se1te
+ke1se
+k1eszk
+kes2z
+ke1szl
+2k1e2tet
+ke1te
+ke2tik
+ke1ti
+ke2vs
+ke1v
+2k1e2vo
+2k1ex
+2k1g
+1k
+k1js
+k2p1e2r
+k1pe
+2k12p
+2k11p
+2k1rc
+2k12rem
+k1re
+2k12re2n
+2k12r
+2k12ri
+2k1rk
+2k1rl
+2k1rm
+2k12r2.
+k1r
+2k12r1i
+2k12rk
+2k1rp
+2k1rr
+2k1r1te
+2k1r1t
+2k1r1t
+2k12r2
+2k1rv
+2k1rz
+2ks
+ks3s
+k1szl
+ks2z
+2k1tk
+2k1tv
+2k12v2e.
+k1ve
+2k12vek
+2k12vet
+2k12vb
+k1v
+2k12vn
+2k12vt
+2k12vv
+2k11vi
+k1fj
+k1fl
+k1fr
+k1gr
+ki1a2
+1ki
+ki2d
+2k1i1de
+k1i1d
+k1i1do
+2k1i1d
+ki2g
+2k1i1ga
+2k1i1ge
+2k1i1g
+k1i2ko
+k1ikr
+2k1ill
+2k1i1ma
+2k1i1m
+k1i1mi
+2k1ind
+2k1ing
+2k1inh
+2k1inn
+2k1int
+2k1inv
+2k1i2o
+2k1i2p
+2ki2rn
+ki1r
+2k1i1ro
+2k1isk
+2k1ism
+2k1ist2
+ki2s1za
+kis2z
+2k1i2ta
+2k1i2z
+k1j
+1k
+2k1r
+2k12v
+2k12z
+k2kl
+k1k
+k1k2l
+k1k2r
+k1kv
+1k2lu
+2k1ob
+1ko
+k1of
+2k1o1k
+2k1o2laj
+ko1la
+2k1ol1da
+k1olts
+kol1t
+2k1oml
+2k1opc
+k1o2pe
+2k1org
+2k1orm
+2k1orr
+2k1orz
+2k1os1to
+2k1ott
+2k1o1u
+2k1ox
+2k1c
+1k
+k12l
+2k1n
+k12ra
+k12r
+2k12v
+2k12z
+2k12b
+1k
+k2l
+2k1m
+k1nt
+k12r
+2k1s
+2k1tl
+k12v
+k12z
+k12r
+1k
+k1s
+k1pl
+k1pr
+k1ps
+1k2re1
+k1re
+k2rim
+k1ri
+k1sk
+k1sl
+k1sp
+k1s2r
+k1st
+k1s2z2
+ksze2r1e2le
+k1s1ze
+k3szerel
+ksze1re
+k1t2r
+2k1ud
+1ku
+2k1ug
+2k1uj
+ku2n
+2k1und
+2k1u1ni
+2k1u2tac
+ku1ta
+2k1u2tak
+k1u2tal
+2k1u2tas
+2k1u1t
+2k1j
+1k
+k12r.
+k1rn
+k2t
+2k1th
+2k11ti
+2k1tj
+2k1tn
+2k11to
+2k1tr
+2k1tt
+2ktv
+2k1d
+1k
+2k1g
+k12le
+2k1nn
+2k1r
+2k12s
+2k12t
+2k12v
+2k1z
+k12r.
+1k
+k1rb
+k12r
+2k1z
+l1abl
+1la
+2l1abr
+l1a2c
+l1a2da
+l1a2do
+l1a2d
+l1a2g
+2l1a2j
+l1a2ka
+l1akc
+l1akn
+l1a1ko
+2l1a2l
+l1amc
+l1a2me
+2l1a1p
+l1arm
+l1asp
+l1ass
+l1as2z
+l1a2to
+l1a2u
+2l1a2va
+l1a1zo
+l1br
+1l
+2l12g
+l2l
+2l1ll
+2l1l1m
+2llmot
+ll1mo
+2l11lo
+2l12p
+l12r.
+l12r
+l1rb
+l1rf
+l12ri
+l1rk
+2l1rn
+l12ro
+l1rr
+l12ru
+l12r
+l1rv
+l12t1a2
+l1tc
+l1t1e2
+2l1tf
+l1th
+l12ti
+l1tj
+2l1tm
+l2tok
+l1to
+l1tr
+l1ts
+l1tt
+l11t
+l1tv
+l1bl
+l1br
+lc3s2z
+lc2s
+l1d2r
+le2b
+1le
+2l1e1b
+2l1e2d2z
+l1eff
+l1e2g
+le2gs2z1
+l1e2g2y
+le2k1a2
+le2k1
+le2k1e2l
+le1ke
+le2kem
+le2ker
+le2k1es
+2l1e2ks
+le1k
+le2kis
+le1ki
+le2kol
+le1ko
+le2k1on
+le2kot
+le2k
+le2k12
+le2ku
+le2k1
+l1e2l1a
+2l1e2leg
+le1le
+l1elf
+2l1e1lo
+2l1el1e
+le1l
+le2lj
+2l1e2lk
+le2lt
+2lemb
+2l1e2mi
+2l1em1p2
+le2n
+2l1e1ne
+2l1eng
+2lenj
+2l1en2y
+2l1enz
+2l1e2rej
+le1re
+l1e2r
+2l1e2r
+2l1e2ss
+le1s
+le2s1z
+les2z
+le2s1z
+le2t1a2
+le2t12
+le2t1eg
+le1te
+le2t1e2l
+le2t1e2r
+le2tes2z
+le2t1k
+le1t
+le2t2l
+le2t12r.
+le2t1rd
+le2t12r2.
+let1r
+le2t1r
+le2ts
+le2t1te
+le2t1t
+le2t1tn
+le2t12v2e.
+let1ve
+le2t12ved
+le2t12vn
+let1v
+le2tik
+le1ti
+le2ti2s2z
+le2t1o
+le1t2
+le2t12l
+le2t1r
+23letrajzoc
+let1ra
+letraj1zo
+le2t1u2
+le2tz
+le1t
+le2t12z
+le1t
+2l1e2v
+2l1ex
+l2d
+1l
+2l11de
+2l12g
+2l12hes
+l1he
+l1kek
+l1ke
+l11k
+2l12l
+l11p
+2l12r.
+2l1rb
+2l1rd
+l12rem
+l1re
+2l12ret
+2l12r
+2l1rm
+2l1rn
+2l1r1te
+2l1r1t
+2l12r
+2l1rz
+l2sa2
+ls3s
+2l12te
+2l1tk
+2l12v.
+2l12v1
+2l12ves
+l1ve
+2l12vet
+2l1vez
+2l12vn
+l1v
+2l12vr
+2l12vi
+2l11v
+l1f2l
+l1f2r
+l1g2r
+2l1i2d
+1li
+2l1i1ga
+li2g
+2l1i2ge
+2l1i1g
+2l1i2ko
+2l1ill
+li2m
+l1i1ma
+l1i1mi
+l1imp
+2l1ind
+2l1inf
+2l1ing
+l1int
+l1inv
+l1inz
+l1i2on
+li1o
+2l1i2p
+2l1i1r
+l1i1ro
+2l1ism
+li1s2p
+2l1i2s1z
+lis2z
+l1i2va
+2l1i2v
+l1izg
+2l1izm
+2l1i2zo
+l1j
+1l
+l12r
+l12v
+l1z
+lk2sz12l1se
+l1k
+lks2z
+lk1s1z
+lksz1l
+lk2sz12l1s
+lk2sz12lsr
+lk2sz12l
+lk2sz1lt
+l1k2l
+l1k2r
+l3lyu
+l2l2y
+l2mat
+l1ma
+1lmn
+l1m
+2l1ob
+1lo
+2l1okm
+2l1oks
+2l1oll
+l1olv
+2l1o2r
+los3s
+2l1os2z
+l1c
+1l
+l12n
+l12r
+l1b
+1l
+l1c1
+l12k
+l12l
+l1n
+l1r
+l1s
+2l12z
+l1e2
+1l
+li2r
+l1i
+l11r
+12lsk
+lv1ro2
+l1v
+lvros1
+l1p2l
+l1p2r
+lre1p2r
+l1re
+l1sk
+l1sp
+l1st
+l2sz1rnn
+ls2z
+l1s1z
+l1szt2
+ltal2p1al
+l1ta
+ltal1pa
+l1t1r
+l1t1r
+l1t1ri
+l1t1r
+2l1ud
+1lu
+2l1ug
+2l1uj
+l1ult
+lu2n
+2l1u1ni
+l1u2r
+2l1u2tas
+lu1ta
+l1u1t
+2l1j
+1l
+l1r
+2l1g
+1l
+l1ll
+l1lt
+2l1r
+2l1s
+2l1t
+2l1v
+2l1z
+l1z
+1l
+1lve1z
+l1ve
+2ly1ab
+l2y
+1lya
+2ly1a2d
+2lyaj
+2ly1a2l
+ly1a2n
+2ly1ap
+ly1a2r
+2ly1as
+ly1a1u
+2ly1av
+ly1az
+2ly12l
+1ly
+2lyef
+1lye
+ly1eg2y
+2lyeks
+lye1k
+2ly1el
+2lyeml
+2lye1ne
+2ly1ent
+2lyer
+2lye1ti
+2ly12j
+1ly
+2ly1k
+2ly2l
+2lys
+ly1f2
+2ly1i1ra
+1lyi
+ly1k2
+2ly1
+2lys
+1ly
+2ly1z
+2ly
+1ly2
+2lyt
+1ly
+2ly12v
+m1abr
+1ma
+ma1d2
+m1a2da
+m1a2d
+ma1e2
+mai2k
+ma1i
+m1ajt
+m1akk
+m1all
+m1alm
+m1app
+m1arc
+2m1arm
+mas2
+ma1sp
+mat2
+ma1tr
+m1aut
+ma1u
+m1a2zo
+m2c
+1m
+m2l
+m1lm
+m11lo
+2m1p
+m1rn
+2m11ru
+2m12t1a
+2m1tt
+m1b2l
+m1b2r
+m1dr
+me2c
+1me
+me2g
+2m1e2k2e.
+me1ke
+2m1e2ks
+me1k
+m1e1la
+me2led
+me1le
+2m1elh
+2m1ell
+m1e2l
+m1els
+2m1elv
+m1e2re
+m1ern
+m1e2r
+2m1ese1m
+me1se
+2m1es2z
+me2ta
+me2tel
+me1te
+me2t1k
+me1t
+me2to
+2m1e2v
+2m1ex
+m1ks
+1m
+2m12l
+2m1p
+2m1rc
+m1rd
+2m11ri
+2m1rm
+2m1r1t
+2m1s
+2m12te
+m1fl
+m1fr
+m1gr
+mi2al
+1mi
+mi1a
+2m1i2d
+mi2g
+2m1i1g
+2m1iks
+m1ill
+m1ind
+m1inf
+2m1inv
+2m1i2o
+2m1i2p
+m1i1r
+2m1irh
+2m1i1ro
+m1isk
+m1ism
+mi2s2z
+m1i2ta
+m1i1zo
+2m1r
+1m
+m12v
+m1z
+m1kl
+m1kr
+mo2nac
+1mo
+mo1na
+mo2ne
+mon1n
+mont2
+m1o2p
+m1ost
+m1ox
+m12l
+1m
+m12r
+m1b
+1m
+m12l
+m1n
+m1s
+m1t
+m1v
+m12r
+1m
+m1p2l
+m1p2r
+m1sk
+m1sl
+m1sp
+m1s2r
+m1s2t
+m1s2z2
+m1t2r
+m1uj
+1mu
+mu2n
+m1u1na
+2m1u2r
+2m1r
+1m
+2m1g
+1m
+2m1r
+2m1t
+2m1v
+2m1z
+m1wh
+n1abb
+1na
+2n1abl
+2na2dal
+na1da
+n1a1d
+n1a2do
+n1a1g
+n1agr
+n1akc
+2n1akn
+n1akt
+n1alk
+1n1a1na
+n1a1no
+n1ant
+n1arc
+nas2
+na1sp
+2n1ass
+na1t2
+2n1a2tom
+na1to
+2n1a2u
+2n1g
+1n
+n2l
+n11la
+n1lc
+n1ld
+2n1ll
+2n12p
+2n12rak
+n1ra
+ns1s
+n1sv
+n11ta
+n1tb
+n12t1e2
+n1tk
+n12t1
+2n1tr
+n1tt
+n12t
+2n1tv
+n1ba2
+n1bl
+n1br
+n1d2r
+2n1ef
+1ne
+n1e2g2y
+12ne2k1a2
+12nekd
+2nek2e.
+ne1ke
+12neke1i
+12nekek
+12nekem
+ne2ker
+12nekes
+ne2k12j
+ne1k
+12nekf
+12nekg
+ne2kiz
+ne1ki
+12ne1k
+12nekj
+12nek1ka
+nek1k2
+12nekl
+ne2k
+ne2k1
+12neks
+n1e1la
+n1el1g2
+n1elh
+n1elj
+n1ell
+n1eln
+n1e2l
+n1elp
+n1els
+n1elt
+n1elv
+n1eml
+ne2n
+2n1e1ne
+ne2r1a
+ne2r12
+ne2re1me
+ne1re
+n1e2r
+2n1e2s2z
+ne2t1a2
+ne2t12
+ne2t1e2l
+ne1te
+ne2test
+ne2to
+2n1e2v
+2n1ex
+n1jb
+1n
+n1kb
+n12k
+n12ki
+n12k
+n2l
+2n11le
+2n11l
+n2m1a
+2n1ne1ke
+n1ne
+2n12r.
+2n1rc
+2n11r
+n2ter
+n1te
+2nz
+n1f2r
+nfs1t2
+n1f
+nfs2t1l
+n1g2r
+n1i1do
+1ni
+ni2g
+2n1i1g
+n1i1ko
+n1ill
+n1i1mi
+n1i1na
+2n1ind
+n1inf
+n1inh
+n1int
+2n1i2o1no
+ni1o
+2n1i2onr
+2n1i2ont
+2n1i2p
+n1ism
+2n1i1ta
+2n1i1va
+2n1i2z
+n1j
+1n
+n1n
+2n1v
+n1k2l
+n1k2r
+n1k2r
+n1k1ri
+n3nyo
+n2n2y
+2n1ol
+1no
+n1oml
+n1ond
+2n1or
+2n1os2z
+n1ot
+2n1o2x
+n1c
+1n
+2n12r
+n1k
+1n
+n1l
+n1n
+n1r
+n1s
+n1t
+2nv
+2n12z
+n12s
+1n
+n1pe2
+n1pl
+n1pr
+n2sas
+n1sa
+n1s2p
+n1s2t2
+n2s
+n1t1ra
+n1t1r
+n1t2ri
+n1t1r
+2n1u2t
+1nu
+n1t
+1n
+2n12g
+1n
+2n11le
+2n1r
+2n1s
+2n12v
+2n12z
+2ny1a2
+n2y
+2ny12
+nye2c
+1nye
+2ny1e1ce
+2nye1c1se
+nyec2s
+2ny1e2d2z
+2nyef
+2ny1eg2y
+2nyeks
+nye1k
+2nye1la
+2nye1l
+2ny1e2le1me
+nye1le
+2ny1ell
+2ny1e1lo
+2ny1el1v
+ny1el1v
+ny1elvv
+2nye1ma
+2ny1enc
+2ny1e1p2
+2nyerd
+ny1ered
+nye1re
+2ny1e2r
+2ny1e2sett
+nye1se
+2ny1e2ss
+nye1s
+2ny1e2s
+2ny1es2s2z
+2ny1es1t
+2ny1e2s2z
+2nye1ta
+2nye1ti
+2nye1t
+2ny1ev
+2ny1g
+1ny
+2ny12j
+ny2k
+ny11ke
+ny1kh
+ny1kn
+ny1kt
+2ny12l
+2ny12r.
+2ny1r1d2
+2ny1r
+2ny12ri
+2ny1rn
+2nyr1te
+2ny1r1t
+2ny12r2
+2ny1rv
+2ny1rz
+2ny1s
+2ny12te
+2ny1tt
+2ny1va
+2ny1if
+1nyi
+nyi2g
+2ny1i1g
+2ny1i2ko
+2ny1ing
+2ny1i1ra
+2nyi1ro
+2nyisk
+2nyi1ta
+2nyiz
+ny2r
+1ny
+ny11r
+ny11r
+2ny1ok
+1nyo
+2ny1o2l
+2ny1o2r
+2ny1os
+2ny12
+1ny2
+2nyn
+ny1r
+2ny1s
+ny1z
+2ny12
+ny1s
+nyt2
+ny1tr
+2nyu
+ny1u2r
+ny1us
+2nyj
+1ny
+ny1t
+2ny12l
+1ny
+2ny1s
+2ny12v
+2nyz
+n1za2
+n2zad
+n2zag
+n2zak
+n2z1al
+n2zar
+n2za1u
+n2z1l
+n1z
+n2z1s
+n2z1t
+n2z1e2r
+n1ze
+n2z1im
+n1zi
+n2z1in
+n2zis
+n2z
+n1zo2
+n2z1ol
+n2zor
+n2zos
+n2z2r
+n1z
+n2z1
+n2z1sa
+nz2s
+n2z1se
+n2zur
+n1zu
+n2z
+nz1z
+1o
+o2la
+o2pe
+o2s2z
+1
+2ra
+2ri
+1
+1
+p1a1do
+1pa
+2p1a2j
+p1alk
+pa2n2y
+p1a1po
+pa1pr
+p1arc
+p1a1r
+p1ass
+p1atl
+pau2s
+pa1u
+p1a2ut
+p1a2va
+2p12g
+1p
+2p1l1la
+2p1l1lo
+p1p
+p12r.
+p1rb
+p1rf
+p11ri
+p12ro
+p12ru
+p12r
+p1tb
+p1tj
+p1tl
+p1tm
+p1ts
+p12t
+p1tv
+p1bl
+p1br
+p1dr
+2peb
+1pe
+p1e2g
+p1e2g2y
+2p1e2ks
+pe1k
+2pel
+2p1e1la
+2p1e1l
+2p1elb
+2p1elc
+2p1e2lemb
+pe1le
+2p1e2le1me
+2p1e2lemr
+2p1elr
+pe1l
+2p1elf
+2p1e2lin
+pe1li
+2p1el1j
+2p1elk
+p1el1l
+2p1ellen
+pel1le
+2p1elm
+2p1e1lo
+2p1e2l1ke
+pe1l
+2p1elr
+2p1eltr
+pel1t
+2p1e1lu
+pe2n
+2p1e1ne
+2p1e2p
+p1er1k2
+2p1e2r
+2p1esem
+pe1se
+2p1e2ser
+2p1e2sett
+2p1e2ss
+pe1s
+2p1e2s
+2p1es1te
+2p1es1t
+2p1es1ti
+2p1estj
+pe2s2z
+2p1e1s1ze
+2p1eszk
+2p1e1ta
+2p1e2te1te
+petet2
+pe1te
+2pe2te1t
+2p1e1t
+p1e1va
+2p1ex
+2p1g
+1p
+2p12k
+2p12l
+2p12ne1ke
+p1ne
+2p12r.
+2p11ri
+p2sa
+2p11te
+p1fl
+p1gr
+2p1i2d
+1pi
+2p1i2ko
+2p1imp
+2p1ind
+p1ing
+2p1ins
+2p1int
+2p1i2pa1i
+pi1pa
+2pipa1ra
+2p1ipa1ro
+2p1i1ra
+2p1i2r
+2p1i2ro
+2p1irt
+p1isk
+2p1ism
+2p1ist
+2p1i2ta
+2p1iz
+p1n
+1p
+2p12r
+12ptm
+ptks2z1
+p1t
+pt1k
+pt1p2
+1pttet2.
+pt1te
+ptte1t
+1pttet1i
+1pttet2k.
+2p1v
+pk2r
+p1k
+pk2pe2r
+p1k
+pk1pe
+p1kl
+p1kr
+p1kv
+ple2t1
+p1le
+p1ob
+1po
+2p1ok
+p1old
+p1olv
+p1on
+p1op
+p1orm
+p1ors
+p1os2z
+2p1c
+1p
+2p12h
+p12r
+p1l
+1p
+p1m
+p1n
+p2r
+p1s
+p12z
+p2p1ek
+p1pe
+p2p
+p1p2l
+p1p2r
+1p2rog
+p1ro
+p2r1z
+p1r
+p1sk
+p1s2n
+p1sp
+p1s2t
+ps2z2
+p1t1ra
+p1udv
+1pu
+p1ug
+2p1uj
+pu2n
+2p1u1no
+2p1u2r
+pu2s
+2p1u2t
+p1j
+1p
+p1s
+p1t
+2p1d
+1p
+2p1g
+2p1ld
+12p1le
+2p1r
+p1s
+2p1v
+2p1z
+r1abl
+1ra
+r1abs
+2r1a2d
+r1a2g
+r1agg
+r1ag2y
+r1a2ja
+r1ajt
+2r1a2ka
+2r1akc
+2r1a2la
+r1a1l
+r1alg
+2r1alk
+r1alm
+r1alv
+r1am1b2
+r1amp
+r1a1ne
+r1a1ni
+r1a2no
+r1ant
+r1a2p
+r1a2p
+2r1app
+r1apr
+1r1a2ra
+r1a2r
+r1arc
+r1asp
+r1ass
+r1a2ti
+r1atk
+r1atl
+r1a2to
+ra1t2r
+r1att
+2r1at2y
+2r1a2u
+r1a2va
+2r1a2x
+r1a2zo
+2r1br
+1r
+r12g.
+2r12ga
+r1gb
+r1gg
+r1g2y
+2r12l
+r12p
+1r11r
+r1rk
+r12ro
+r1rp
+r1rr
+2r12ru
+r12t1a2
+r12t12
+r1tc
+r12t1e2
+r11t
+r1tf
+r1th
+r1tj
+r1tl
+r1tm
+r12t
+r1tr
+r11t2
+2r11t
+r1tv
+2r1z
+1rbn
+r1b
+r1bl
+r1br
+r2caj
+r1ca
+r2c1a2l
+r2c1a2n
+r2c1as
+rc3c
+1rcd
+r2ce1d
+r1ce
+r2c1emb
+r2c1es2z
+r2c3h
+r2cil
+r1ci
+r2c1im
+r2ciz
+r2c1o
+r2c
+r2c1
+r2c
+r2c3seb
+rc2s
+r1c1se
+r2c3sis
+r1c1si
+r2c
+r2c2z
+r2d1am
+r1da
+r2d12
+1rdek1b
+r1de
+1rdek2e.
+rde1ke
+1rdeke1i
+1rdekel
+1rdekl
+1rdekt
+1rde1k
+1rde1k
+1rde1m
+r2d1e2r
+rd1es1te
+rds3s
+r1d
+r2d1i2n
+r1di
+r2d1iz
+r1d1ra
+rd2l
+r1d
+r2d11l
+r2d11l
+r2d3z
+re2b
+1re
+r1e1ba
+2r1e1be
+2r1e1b
+2r1ebr
+2r1eff
+re2g1a2
+re2g1
+re2ged
+re1ge
+re2gel
+re2g1em
+re2gen
+re2g1e2r
+re2gev
+re2g1l
+re1g
+reg1g
+re2gin
+re1gi
+re2go
+re2g12
+2r1e2g2y
+regyez1
+re1gye
+2r1ej
+2r1e2k2n.
+re1k
+2r1e1l
+2r1e2leg
+re1le
+2relemz
+r1e2lg
+re1l
+2r1elis
+re1li
+2r1elk
+2r1e1lo
+2r1e2l1a
+re1l
+re2lir
+rel1i
+2r1e2ll
+2r1e2l1me
+2r1e2ln
+r1elr
+r1el1t
+re2m1a
+re2m
+2rember
+rem1be
+re2m1e2g
+re1me
+2r1e2mel
+re2mes
+2r1e2ms
+re1m
+r1e2mis
+re1mi
+2reml
+re2m1o
+re2m1
+2re2mu
+re2n
+2r1e1ne
+2r1e2r
+re2s
+2r1es2.
+2r1esb
+2r1esj
+2r1esn
+res12r
+2r1est
+2r1es1t
+re2t1a
+re2t
+re2t1eg
+re1te
+re2t1el
+re2t12r.
+re1t
+re2t12v2e.
+ret1ve
+12rettsgi2k.
+rett1s
+retts1gi
+12rettsgin
+12rettsgir
+12rettsgit
+r1e2ve
+2r1e2v
+2r12d
+1r
+2r12g
+2r12j.
+2r12jt
+r1j
+2r12k
+2r12l
+2r12ne1ke
+r1ne
+2r1p
+2r12ri
+2r1r1t
+r2s1el
+r1se
+r2s1za
+rs2z
+r22s1z
+2r2ter
+r1te
+2r1tk
+2r12v2e.
+r1ve
+2r1vn
+2r1vv
+rfi12
+r1fi
+r1fl
+rfo2g12n.
+r1fo
+rfo1g
+rfo2g1s
+r1f2r
+r1g2r
+ri2al
+1ri
+ri1a
+ri2c1si
+ric2s
+2r1i1do
+ri2n
+ri1
+r1ifj
+ri2g
+2r1i1ga
+2r1i1ge
+2r1i1g
+2r1i2ko
+2r1ill
+2r1i2ma
+2r1i2m
+2r1i2mi
+2r1i2na
+2r1ind
+2r1inf
+2r1ing
+2r1inj
+2r1ins
+2rint
+r1inv
+2rinz
+2r1i2o
+2r1i2pa
+r1i1ra
+2r1isk
+r1ism
+2r1ist
+2r1i2s2z
+2r1i2ta
+2r1i1va
+2r1i1v
+2r1i2z
+r1g
+1r
+r1j
+2r1n
+2r1r
+2r12v
+2r12z
+r2jan
+r1ja
+r1k2l
+rk2z1e2p
+r1k
+rk1ze
+r1k2r
+r1k2v
+rle2t12l
+r1le
+rle1t
+1rm1
+r1m
+1rmj
+1rmk
+1rm2i.
+r1mi
+2r1o2l
+1ro
+r1ont
+ro2p
+2r1o1pe
+2r1o2r
+r1ott
+r1o1vi
+2r1o2x
+r2l
+1r
+r11lo
+r11ri
+2r12b
+1r
+2r12c
+r12ko
+2r12l
+2r1m
+2r1n
+2r1r
+2r1s
+r1t
+r1v
+2r12z
+r1f2
+1r
+r1pl
+r1p2r
+rrdi2k2
+r1r
+rr1di
+rrdi1
+1rsek
+r1se
+r1s2k
+r1s2l
+r1s2p
+r1s2r
+r1s2t
+rs2z2
+r1szk
+r2tat
+r1ta
+1rtekez
+r1te
+rte1ke
+r2t1e1la
+1rtelm
+2rtelms1g
+rtel1m
+rtelm1s
+1rte1s
+1rtkil
+r1t
+rt1ki
+1rtkm
+rts1f2
+rtsfl1
+rts3s
+1rthetbb
+rt1he
+rthe1t
+1rthetn
+1rthetr
+1rthett
+rt1lg
+r1t
+r2t1rvnyt2
+rtr1v
+rtrvn2y
+rt12ve
+1rtc
+r1t
+1rtg
+1rt1
+r1t2ran
+rt1ra
+r1t1r
+r1t2ren
+rt1re
+r1t2r
+1r1t2ro
+r1t1r
+r1u1ga
+1ru
+2r1uj
+ru2m1e
+ru2n
+r1u1na
+2r1u2r
+ru2s1r
+ru1s
+r1u2s2z
+r1u1ta
+r1u1t
+r1u2to
+2r1u2z
+2r1j
+1r
+r12r
+r12s
+r2t
+2r12g
+1r
+r2k2.
+r1k
+2r1r
+2r1s
+2r1t
+2r12v
+2r1z
+2r12z
+1r
+rv1a2d
+r1va
+rv1a1la
+r2v1a2n
+r2v12g2y
+r1v
+1rvel
+r1ve
+r2v1elem
+rve1le
+rvelks2z1
+r2velks
+rve1l
+rvel1k
+r2v1gb
+r1v
+r2v1gh
+r2vk
+r2vl
+r2vu
+2r1z
+1rz2k.
+r1z
+1rzkb
+1rz1k
+1rzkh
+1rzkk
+1rzkn
+1rzkr
+1rzkt
+1rz1k
+1rz1k
+1rzsil
+rz1si
+s1abl
+1sa
+2s1a2d
+s1ag2y
+s1ajt
+s1a2ka
+s1akl
+s1akn
+s1a1ko
+s1akt
+s1a2la
+s1alg
+s1alk
+s1all
+s1alt
+s1alv
+2s1am
+s1a1na
+s1ant
+s1a2n2y
+s1a1pa
+s1apr
+s1a1ra
+s1a2r
+s1arc
+s1a1r
+2s1arm
+2s1arz
+s1asp
+s1ass
+2s1a2u
+s2c
+1s
+2s1l
+s1rt2
+s2s
+2s11ta
+2s1th
+s1tl
+s1bl
+s1d2r
+se2b
+1se
+2s1e1b
+2s1ef
+s1e2ge
+s1e2g2y
+2s1e2k2e.
+se1ke
+2s1e2ke1i
+2s1e2ks
+se1k
+2s1eks
+2s1ekv
+s1e1la
+s1e1l
+2s1elb
+s1elk
+2s1elm
+s1e1lo
+2s1elr
+2s1el1v
+2s1elz
+2s1ember
+sem1be
+2s1e2mel
+se1me
+2s1eml
+se2n
+2s1e1ne
+2s1eng
+2s1en2y
+2s1e2p
+2s1e2r
+2s1es2z
+2s1e1to
+2s1ev
+2s1ex
+s1gb
+1s
+2s12gb
+s1g
+2s12g1
+s12gh
+s12gn
+2s12gv
+2s1gh
+2s12gi
+2s1gn
+2s2g2
+2s1gv
+2s12hen
+s1he
+2s12j
+2s12k
+2s12l
+2s1p
+2s12r.
+2s1rb
+2s1rc
+2s1rd
+2s12rem
+s1re
+2s12re2n
+2s12r
+2s1rh
+2s12ri
+2s1rl
+2s1rn
+2s12r2.
+s1r
+2s12rk
+2s12rt
+2s12rv
+2s1rr
+2s1r1te
+2s1r1t
+2s1r1t
+2s12r
+2s1rv
+s1s2z
+2s12te
+2s12v2e.
+s1ve
+2s12vet
+2s12vb
+s1v
+2s12vt
+2s12vv
+s1fl
+s1fr
+s1gr
+2s1ic
+1si
+2s1id
+3s2idet
+si1de
+si12
+si2g
+2s1i1ga
+2s1i1ge
+2s1ikt
+2s1ill
+2s1i1mi
+2s1imp
+2s1ind
+2s1inf
+2s1ing
+2s1int
+2s1inv
+2s1i2p
+2s1i1ra
+2s1i2r
+2s1i1ro
+2s1i2s
+2s1i2ta
+2s1i2v
+2s12r
+1s
+2s1v
+s2ka1tu
+skat2
+s1ka
+s1kl
+s1k2r
+s1kv
+1s2lg
+s1l
+2s1ob
+1so
+s1o1ko
+s1okt
+2s1o2l
+2s1om
+2s1op
+2sor
+s1org
+s1orn
+s1orv
+2s1os
+2s1ot
+s1o2v
+s1c
+1s
+s12l
+s1n
+s12r
+2s12l
+1s
+2s1n
+2s1s
+2s1t
+2s12v
+2s12z
+s1pl
+s1p2r
+s2p1ri
+s1ps
+s1s2k
+s1s2p
+s1s2t
+s2s2z2
+s3szab
+s1s1za
+s3szag
+s3szak
+s3szap
+s3s1z
+s4sze2l.
+s1s1ze
+s3sze1re
+s3sz1le
+s1s1z
+s3szf
+s3s1zi
+s3s1z
+s3s1zo
+s3s1z
+s3s1z
+s3s1z
+s3szt2
+s3s1z
+s3szl
+s1s1z
+s3s1z
+st2r
+s1t1ra
+s1t1r
+s1t1r
+1st1ru
+s1ud
+1su
+2s1u2t
+2s12t
+1s
+2s1g
+1s
+2s1nn
+2s1r
+s12t
+2s1z
+sz1abl
+s2z
+1s1za
+2sz1a2d
+sz1ag2y
+2szaj
+sza1k2
+sza2k1z
+2s2zakc
+sza2k12
+sz1a1le
+2sz1alg
+2sz1all
+sza2n
+sz1ant
+sz1an2y
+sza2p
+sz1a1po
+2sz1a2r
+2sz1as
+sz1a2to
+2sz1a1u
+2szaz
+21s1z
+2szb
+2sz12g
+sz2l
+sz1l1l
+2s3zp
+2sz1r
+sz1rn
+s2z1rf
+sz1r1k2
+2sz1rn
+sz12ru
+2szs
+2sz12t
+sz12z
+2sz1e2g2e.
+1s1ze
+sze1ge
+2sz1e2ge1i
+2sz1e2g2y
+2sz1ej
+sze2k1a2
+sze2k
+2sz1eks
+sze1k
+sze1k2
+sze2kv
+2sz1e1la
+2sz1e2leg
+sze1le
+2sz1e2lemb
+2sz1e2le1me
+2sz1e2le1m
+2sz1e2lemm
+2sz1e2lemn
+2sz1elk
+sz1eld
+sze1l
+2sz1elr
+2szelz
+2sz1ember
+szem1be
+2sze1mi
+2s3ze1n
+2sz1eng
+2sz1ep
+sz1e2red
+sze1re
+sz1e2rez
+sz1e2rn
+sze1r
+sz1er1k
+szer1k2
+2s2ze2r
+sz1eszt2
+szes2z
+sze1ta2
+sze2t1ak
+sze2t1e2l
+sze1te
+sze2t12r.
+sze1t
+sze2t1o
+sze2t1r
+sze1t
+2sz1e2ve
+2sz1ex
+sz1ezr
+2szg
+1s1z
+2sz1kt
+2sz12l
+2sz12p
+2sz11r
+2sz1r
+2s2zs2z
+2sz12te
+2s2z1tk
+2sz1i2d
+1s1zi
+2szif
+sz1i2ko
+2sz1ikt
+2sz1ill
+2sz1im
+2szi1na
+2sz1ind
+2sz1inf
+2sz1ing
+2sz1in1t
+2sz1i1o
+2sz1i2p
+2szi1ra
+2s2zi1ro
+2s2zirt
+2sz1i2s
+2sz1i1ta
+2sz1iz
+sz12j
+1s1z
+2szr
+sz12v
+sz12v
+sz12v
+sz1k2
+sz1okt
+1s1zo
+szo2l
+sz1old
+sz1olt
+2szop
+2sz1ors
+sz1orszg1
+szors2z
+szor1s1z
+2sz1os
+2sz1ot
+2s3zn
+1s1z
+21s1z
+s3zld
+sz1lt
+2sz1n
+2sz1s
+2szt
+sz1rs
+1s1z
+sz1p2
+s1z3su
+sz2s
+szts1s
+sz1t
+sz2tors2
+sz1to
+sztorz1
+sz1t1ra
+s3zul
+1s1zu
+sz1ut
+2sz1j
+1s1z
+sz1rn
+sz11ro
+2sz1t
+2sz12g
+1s1z
+2s2znn
+2szt
+2sz12z
+2szz
+1s1z
+sz1z
+t1ab1la
+1ta
+t1a2do
+t1a2d
+t1adt
+t1agg
+ta1gr
+tai2k
+ta1i
+2t1ajk
+2t1ajt
+t1akc
+ta1kr
+t1akt
+2t1alj
+2t1al1k2
+t1als
+2t1alt
+2t1a1ni
+2t1ann
+2t1ant
+t1a1nya
+tan2y
+t1a1ny
+2t1aps
+2t1arc
+2t1arg
+t1aszt
+tas2z
+tat2
+t1atom
+ta1to
+ta12
+t1a1zo
+2t1br
+1t
+2t12g
+2t1ll
+t12rad
+t1ra
+t12ram
+t12r
+2t12ri
+2t12r
+t1rv
+t11ti
+2t1tr
+2t1tv
+t1bl
+t1dr
+te1a2
+1te
+2tedn
+te1d
+te2g1a2
+te2ge1le
+te1ge
+te2g1elv
+te2ger
+te2go
+2t1e2k2e.
+te1ke
+2t1e2ke1i
+te2la
+te2l1
+te2l1e2l
+te1le
+te2l1er
+te2l1k
+te1l
+te2l12r.
+te2l12re2n
+tel1re
+te2l1r
+2telfog
+tel1fo
+te2lo
+2t1e2ll
+te1l
+te2l12r
+2t1e2mel
+te1me
+te1ra2
+te2rad
+te2r1ag
+te2r12
+te2reg
+te1re
+te2rel
+ter1mo1
+2t1e2r
+te2sik
+te1si
+2t1estn
+tes1t
+2t1esv
+2t1eszm
+tes2z
+t1e2vi
+t2g
+1t
+2t12g.
+t11ge
+2t11g
+2t1gn
+2t1gt
+2t12j
+2t12l
+2t12re2n
+t1re
+2t12r
+2t12ri
+2t12rt
+t1r
+2tr1te
+2t1r1t
+2t12r
+2t1rv
+2t1rz
+t1szl
+ts2z
+2t1tb
+2t12t
+2t1tn
+2t1tr
+t11va
+2t12ves
+t1ve
+2t1vt
+t1fl
+t1fr
+2t1i2d
+1ti
+ti2g
+2t1i1ge
+2t1i1g
+2t1i2ko
+2t1i2m
+2t1ind
+2t1inf
+2t1int
+ti2p
+2t1i1pa
+2t1i1r
+t1i1ro
+tis3s
+ti2s2z
+2t1i2v
+t1i1z
+2t12r
+1t
+2t12v
+t1kl
+t1kr
+1t1k
+t1kv
+tmeg1g2
+t1me
+t1o2k
+1to
+t1o2ki
+t1okm
+t1okoz
+to1ko
+to2l
+2t1o1la
+2t1olv
+t1oml
+2t1op
+t1ord2
+t1or1g2
+to2ris
+to1ri
+t1orm
+t1ors2
+2t1c
+1t
+t12ha
+t12n.
+t11r
+t2k
+1t
+t2l
+2t11m
+2t1n
+t2rl
+t1r
+2t1s
+t12t
+t12v
+2t12z
+t12r.
+1t
+t1rb
+t11ri
+t1rm
+t11r
+t11r
+2t12s
+2t12z
+tpen1
+t1pe
+t1pf
+t1pl
+t1pr
+1t2ra1f
+t1ra
+t2rf
+t1r
+tro2m12
+t1ro
+t1sl
+t1sm
+t1sp
+t1st
+t1t2r
+t1udv
+1tu
+2t1ug
+2t1uj
+tu2n
+t1u1na
+t1und
+2t1u2r
+2t1u2t
+t12s
+1t
+2t1g
+1t
+2t1r
+t1s
+2t1t
+2t12v
+2t12z
+t2z
+1t
+2t3ye
+t2y
+1u
+u2ni
+u2ta
+u2t
+u2z2s
+1
+1
+2g2y
+2le
+2l
+2l
+2l
+2r
+2t
+2t
+2t
+2ze
+1
+2vad
+1va
+1va2d.
+va2d2s.
+va1d
+v1a1d
+1vadr
+v1ag2y
+v1a1j
+2v1a2la
+2va1l
+2v1alk
+2v1am
+2v1a2n
+v1arc
+v1a2u
+1v1a1va
+2v1a2z
+2v1l1lo
+1v
+2v11ta2
+v1th
+v1tk
+2v1tr
+v2z
+v11z
+1vbe1o
+v1be
+2v1e2g
+1ve
+12ve1i
+12vekt
+2v1e1la
+12v1elf
+12v1e1li
+2v1ell
+v1eln
+2v1e1lo
+2ve1l
+velks2z1
+2velks
+vel1k
+2v1els
+2v1elt
+2v1elv
+2v1en1g2
+12ven3k2
+12vent
+v1e2ri
+2v1e2r
+12vesb
+1ve1s
+v1e2ss
+1vesf
+12ve1si
+12vesk
+12vesr
+v1es1t
+vest2
+1v1e1ve
+v12ge
+1v
+v12g
+v1gr
+v1gt
+v12r.
+v12r
+v2r2i.
+v1ri
+v1rr
+2v1r1te
+2v1r1t
+v1sh
+v1s1ka
+v1s2p
+v1s1t
+v1gr
+vi2g
+1vi
+v1i1ga
+2v1i1g
+12vih
+12vik
+12vim
+2vin
+2v1ind
+1vi1ne
+1vi1n
+v1ing
+v1int
+v1ism
+12vi1t
+12viv
+2v12r
+1v
+v2zel
+v1ze
+1vks
+v1k
+v1kr
+1vn2y
+v1ok
+1vo
+v1os
+v12r
+1v
+v12r
+1v
+v1s
+v1t
+12vd
+1v
+v1pr
+v1sk
+v1st
+v1s2z
+vsza2k1as
+v1s1za
+vsza1ka
+vt2r1a2d
+v1t
+vt1ra
+1vt2.
+v1t
+v1ur
+1vu
+v1j
+1v
+v12t
+2v1g
+1v
+2v2k.
+2vkb
+2v1ke
+2vkh
+2v1ki
+2vkn
+2vkt
+2vlj
+2v1t
+2v1z
+1v1z
+z1a2d
+1za
+z2a2gal
+za1ga
+za2ge
+z1a2j
+z1akr
+2z1a2l
+za2n
+z1an2y
+z1a2r
+z1as
+2z1a2t
+z1az
+2z12g
+1z
+2z12l
+z1sv
+z1z
+z1bl
+z1d2r
+ze2c
+1ze
+2z1e1ce
+2z1e2d
+z1e2g
+z1e2g2y
+2z1e1la
+2z1eld
+2z1e2le
+zel1en
+2z1elf
+2z1elh
+2z1ell
+2z1e2l1k
+ze1l
+2z1els
+2z1elv
+2z1emb
+z2e2n.
+ze2n1
+2z1enz
+2z1e2p
+ze2r1a
+ze2r1
+ze2r1in
+ze1ri
+ze2rip
+ze2ro
+2z1e2r
+zerpr1ba2
+zer1p2
+zer1p
+2z1e2r
+z1es2z
+ze2ta
+ze2t1
+ze2t1eg
+ze1te
+ze2t1e2kh
+zete1k
+ze2t1el
+2z1e2v
+2z1ex
+2z12d
+1z
+2z1g
+2z1k
+2z12l
+2z12r.
+2z1rc
+2z12ri
+2z1rm
+2z1rp
+2z1r1t
+2z1rz
+z1fr
+z1g2
+z1gr
+zi2d
+1zi
+z1i1do
+2z1i1g
+2z1ill
+z1imp
+z1ind
+z1ing
+2z1int
+2z1i2o
+2z1i2pa
+2z1i1p
+2z1i2r
+3z2i3re
+3z2i3r
+zis3s2
+zi2s1
+zi2s1za
+zis2z
+zi2s3z
+z1i2ta
+2z1i2v
+2z1izm
+z1i1zo
+2z1izz
+z12j
+1z
+z1r
+z12v
+z1z
+zkar2c3h
+z1ka
+z1k2r
+z1o1la
+1zo
+z1old
+z1op
+2z1or
+z1os2z
+2z1ox
+z1b
+1z
+z12k
+z1n
+z1r
+z1s
+z1t
+z12v
+z1a2
+1z
+z12r.
+z1pl
+z1p2r
+z3saj
+z2s
+1z1sa
+z3sar
+z3seb
+1z1se
+z3ser
+z3sik
+1z1si
+z3sn
+1z1s
+z3sod
+1z1so
+1z1s2
+2z3sk
+zs1r
+1z3s
+z3s1pi
+zs1s
+z3sug
+1z1su
+zs12r
+1z1s
+2z3s
+z3s2z
+z1t2r
+z1ug
+1zu
+z1uj
+2z1u2r
+z1ut
+2z12g
+1z
+2z1r
+2z1s
+2z1t
+2z12z
+z1r
+1z
+z3z1sa
+z2z2s
+2f.
+1fa
+fat1
+fa1
+fa1b2ro
+fa2c1hi
+fac2h
+fac3h2i.
+fa2c3ho
+fa1d2r
+faegyez1
+fa1e
+fae2g2y
+fae1gye
+fae3lek
+fae2le
+fae2r
+fa2d
+fa1
+fa2p
+fa1f2r
+fa1g2r
+fa1gy2
+fag2y
+fa2gyk
+fa2gyol
+fa1gyo
+fa2gy
+fa2gyr
+fa1gy
+fagy12r2k.
+f2a1gy
+fagy1r
+fagy12r1ke
+fai2d
+fa1i
+fai2s
+fa2j1a2l
+fa1ja
+fa2j1az
+fa2j1g
+fa1j
+fa2j12ru
+f2ajr
+fa2j1egys
+fa1je
+fajeg2y
+fa2jelem
+faje1le
+fa2j1elk
+fa2jelm
+fa2j1eln
+fa2j1elv
+fa2j1es
+fa2j1
+fa2j
+fajt2
+faj1tr
+faju2r
+fa1ju
+faj1u1ra
+fa2j
+fa1k2l
+fa1k2r
+fa1k2v
+fa2l1a2d
+fa1la
+fa2l1a2d
+fa2la1j
+fa2l1a2k
+fa2l1a2l
+fala2n
+fa2l1an2y
+fala2ptok
+fala1p
+falap1to
+fa2l1apto1ka
+fa2l1ap1ja
+fa2l1apjr
+falap1j
+fa2lav
+fa2l1a1z
+fa2l1br
+fa1l
+fa2l1l
+fa2l12ro
+fa2l1th
+fa2l1tv
+fal1e2g2y
+fa1le
+fa2l1elem
+fale1le
+fa2l1e1l
+fal1e1se
+f2ales
+fa2l11ri
+fa1l
+fal1f
+fa2lid
+fa1li
+fa2l1inj
+fa2l1iz
+fa2l12
+fa2l1ol
+fa1lo
+fa2l1oml
+fa2lor
+fa2l1os
+fal11r
+fa1l
+fa1l2
+fa2lk
+fa2l1v
+fa2l1r
+fa1l
+fal1p2
+fal2s12n.
+fal1s
+falta2n
+fal1ta
+fal2tem
+fal1te
+fal2ti2p
+fal1ti
+fal2tz
+fal1t
+fa2l
+fa2n1e2vet
+f2anev
+fa1ne
+fane1ve
+fan1vb
+fa1n
+fan1vr
+2f1a2ny2a.
+fan2y
+fa1nya
+fa2r
+fa1
+fa1p2l
+fa1p2r
+fa2r1a2d
+f2arad
+fa1ra
+fa2rag2y
+f2arag
+fa2r1a2k
+f2arak
+fa2r1akt1ra
+farak1t
+fa2r1a2l
+fa2r1asszal
+faras2s2z
+faras1s1za
+fa2r1at
+fa2r1a2v
+fa2r1cc
+f2arc
+fa1r
+fa2r1l
+fa2r12z
+fa2r1em
+fa1re
+fa2r1e2pe
+fa2r1es1te
+fa2r1es1ti
+fa2r1e2sze1l
+fares2z
+fare1s1ze
+fa2rev
+fa2r12sze1i
+fa1r
+fars2z
+far1s1ze
+far2szb
+far1s1z
+far2szt
+fa2r1szh
+fa2r1szn
+fa2r1id
+fa1ri
+fa2r1i1n
+fa2r1ing
+fa2r1izm
+f2ariz
+fa2r1i1zo
+far2k1al
+far1ka
+far2kol
+far1ko
+far2ml
+far1m
+far2min
+far1mi
+far2m1un1k
+far1mu
+fa2r1ok1ke
+fa1ro
+fa2r1os2z
+fa2r1ut
+fa1ru
+fa1s2k
+fa1s2p
+f2a1s1ta
+fa1s1t
+fasz1lls
+fas2z
+fa1s1z
+faszl1l
+fa2sz12v.
+f2a1s1z
+fa1t1ri
+fau2r
+fa1u
+fau2s
+f2a3u2t
+fa2u1t
+fa2t
+fa1
+fa2z
+fa2xe
+fa1xi2
+fa2x1ik
+fa2xin
+fa2x
+fa2x
+fa2x
+fa2x
+fa2x
+fa1ya
+fa1ye
+1f
+f1br
+f2c3h
+f2gp
+f1g
+fj2lak
+fj1la
+fj2l
+fj2l1e2
+fj2l12
+f2n
+fn1ka2
+fn2kar
+fn2k
+fn2tad2
+fn1ta
+fn2t1a2g
+fn2tan
+fn2t12
+fn2t1e2
+fn2tis
+fn1ti
+fn2tor
+fn1to
+fn2t
+f2po
+f2ram
+f1ra
+f12r
+fs3s
+f2t1a2
+f2t1
+f2te
+f2t1rd
+f1t
+f2t1i2s
+f1ti
+ft1m1
+f2t1ol
+f1to
+f2t12
+fzi2s1g
+f1zi
+fzi1s
+fzi2s3z
+fba2l1
+f1ba
+fc2lu
+fd2r
+1fe
+fe2a1a
+fe1a
+fe2a1
+fe2ab
+fe2ac
+fe2ad
+fe2a1e
+fe2a1
+fe2af
+fe2ag
+fe2ah
+fe2a1i
+fe2aj
+fe2am
+fe2an
+fe2a1p2
+fe2ar
+fe2as
+fe2at
+fe2a1
+fe2av
+2f1e2d2z
+fe1f2r
+fe2gy1i
+feg2y
+fe2gy
+fei2n1i
+fe1i
+fe2ja
+fe2j12
+fe2j1eg2y
+fe1je
+fe2j1elm
+fe2j1e2r
+fe2j1e2s2z
+fe2j1e2v
+fe2j1o
+fe2j1s
+fe1j
+fej1tr
+fe2j1u
+fe2j
+fek2t1emb
+fek1te
+fe2l1a2
+fe2l12
+fele2c
+fe1le
+fe2l1e2d2z
+fe2l1e2g
+fe2l1e2h
+fe2l1elev
+fele1le
+fe2l1e2mel
+fele1me
+fe3lemen
+fe3lemet
+fe2l1e2ms
+fele1m
+fe2l1eml
+fe2l1eng
+fe2l1enn
+fe2ler
+fel1e2re
+fe2l1esd
+fe2lesed
+fele1se
+fel1eseg
+fe2l1e2sett
+fe2l1ess
+fele1s
+fe2l1esik
+fele1si
+fe2l1esk
+fe2l1es1ni
+fe2l1e2s
+fe2l1essen
+feles1se
+fe2l1es1te
+fe2l1es1t
+fe2l1e2s2z
+fe2l1e2tes
+fele1te
+fe2l1e2tet
+fe2l1ettek
+felet1te
+fe2l1ettl
+felet1t
+fel1e2ve
+fel1e2v
+fel1e1vi
+fel2d
+fe1l
+fe2l11de
+fe2l12g
+fe2l12k
+fe2l12l
+fe2l12p
+fe2l12r.
+fe2l12rek
+fel1re
+fe2l1re2n
+fe2l1rh
+fe2l11ri
+fe2l1rj
+fe2l1rk
+fe2l1rn
+fe2l1rs
+fe2l1rt
+fe2l1rv
+fe2l1tet
+fel1te
+fe2l1i2
+fe3l2ib
+fe3l2ismers1f
+fe2l1ism
+felis1me
+felisme1r
+fe2l12
+fel3l
+fe2l1o2
+fe2l12
+fe2l12
+fe2l1g
+fe1l
+fe2l1r
+fel1p2
+felt2
+fe2l1u2
+fe2l
+2f1e2ner
+fe1ne
+fen2n
+fen1ne2
+fen2nev
+fer1abl
+fe1ra
+fe2rak
+fe2r1ll
+fe1r
+fe2r12r
+fere2g
+fe1re
+fer1eg2y
+fe2r1old
+fe1ro
+fe2r1olj
+fe2r1oln
+fe2r1olt
+fer1ro1
+fe2sem
+fe1se
+fe2s1er
+2f1e2s
+fe2v
+fe2z12r.
+fe1z
+fe2z
+fe2z2s
+1f
+f1ka2
+f2k1ad
+f2k1ag
+f2k1al
+f2kas
+f2k1a1u
+f2k12
+f2k1e2g
+f1ke
+fk1ell
+f2k1er
+f2k1k
+f1k
+f2k12l
+f2k12r.
+f2k1o2l
+f1ko
+f2k1or
+f2kn
+f1k
+f2k1u2
+f2k1
+f2l1a2
+f2l12j
+f1l
+f2l12r
+f2leg
+f1le
+fl1e1l
+f2l1ell
+f2l1e1l
+fle2m
+f2l1emb
+f2l1e1me
+f2l1eres
+fle1re
+f2l1e1se
+f2l1es2z
+2f12let
+f2l1ez
+f2l11va
+f1l
+f2l1i2gaz1
+f2l1i1ga
+f1li
+f2lin
+f2lir
+f2l1is
+f2liv
+flnyls1
+fln2y
+fl1ny
+fl3nyl
+flny1l
+f2l1ok
+f1lo
+f2los
+f2l
+f2l1
+f2lr
+f1l
+flpen1
+fl1pe
+fl1t2r
+f2l12
+f2mab
+f1ma
+f2ma1d2
+f2m1a2g
+f2m1a2j
+f2m1a2n
+f2m1ap
+f2ma1u
+f2maz
+f2m12c
+f1m
+f2m12l
+f2m1e2c
+f1me
+f2me1d
+f2me2k2t.
+fme1k
+f2m1e2l
+f2m1emb
+f2mer
+f2mez
+f2m12k
+f1m
+fm2r
+f2m11r
+f2m1i2n
+f1mi
+f2m1ir
+f2m1is
+f2mit
+f2m1iz
+f2m
+f2m1o
+f2m
+f2m
+f2m1u
+f1m2
+f2m1l
+f2ny1e2g
+fn2y
+f1nye
+f2ny1e2l
+f2ny1e2r
+f2ny1is
+f1nyi
+f2ny1
+f2nyo
+f2ny2
+f2ny
+f2p
+f2p
+2f1r
+fr2cem
+fr1ce
+fre2g1e2
+f1re
+f2s1orr
+f2sor
+f1so
+fsz1al
+fs2z
+f1s1za
+f21s1z2
+fsz1r
+f2szeg
+f1s1ze
+f2sz1el
+fta1u2
+f1ta
+2f1vk
+f2z2s
+f1z1s1e2
+f1z1s1o
+ffe3l1i2
+f1fe
+ffi2ac
+f1fi
+ffi1a
+ffi2ag
+ffi2a1ka
+ffi2at
+1f2fy
+fg2l
+1fi
+fi2a1a
+fi1a
+fi2a1
+fi2a1e
+fi2a1
+fi2af
+fi2ah
+fi2a1
+fia2la
+fi2a1o
+fi2a1
+fi2a1
+fia1p2
+fi2a1pa
+fia2ra
+fia2r
+fi2a1r
+fi2a1s1z
+fias2z
+fi2a1s1zo
+fi2a1u
+fi2a1
+fi2a1v
+fi2a1ve
+fi2l
+fi1
+fi2c3h
+fici2t1
+fi1ci
+fi2dan
+fi1da
+fi2d1
+fi2d1i2ont
+fi1di
+fidi1o
+fi1d1r
+fie2l
+fi1e
+fie2n
+fie2r
+fie2s
+fie2t
+fi1fl
+fi1fr
+2f1i2gaz
+fi1ga
+fi1k2l
+fi1k1r
+fi1k1r
+fi1k1ri
+fi1k2v
+fi2lac
+fi1la
+fil1a1da
+fil1akn
+fil1akt2
+fi2lal
+fi2lam
+fi2l1l
+fi1l
+fi2lr
+fil1elt
+fi1le
+fi2l1en
+fi2l1es
+fil1rt
+fi1l
+fi2li2d
+fi1li
+fi2l1i2m
+fi2l1in
+fil1ism
+fil2mad
+fil1ma
+fil2mak
+fil2man
+fil2m1as
+fil2mat
+fil2m12
+fil2mos
+fil1mo
+fil2mu2
+fi2l
+fi2l
+2f1i2m
+fimeg1
+fi1me
+2f1i2nas
+fi1na
+2find
+fin1os2z
+fi1no
+fi2n1
+fi2n1u2
+fi2n
+2finx
+fio2v
+fi1o
+fi3k
+fi1
+fi2kar
+fi1ka
+fi2k1e2
+fi2kp
+fi1k
+fi2kol
+fi1ko
+fi22k
+fi2r
+fi2r
+fi1
+fi1p2l
+fi1p2r
+fi2rod
+fi1ro
+fis1arc
+fi1sa
+fi1s2p
+fist2
+fi1str
+fi2t1a1d2
+fi1ta
+fit1a2la
+fi2t1alj
+fi2tg
+fi1t
+fit12rak
+fit1ra
+fit2t
+fi2t11ta
+fi2t1h
+fi1t
+fi2t1rd
+fi2tik
+fi1ti
+fi2t1in
+fi2tir
+fi2t1i2z
+f2i2t1os2z
+fi1to
+fi2tn
+fi1t
+fi2t1r
+fi1t
+fi2t1ug
+fi1tu
+fi2t1ur
+fiu2min
+fi1u
+fiu1mi
+fiu2t
+fi21a
+fi1
+fi21
+fi21e
+fi2f
+fi2g
+fi21
+fi2l
+fi21o
+fi21
+fi21
+fi2p
+fi2s2z
+fi21ti
+fi21u
+fi21
+fi21
+fi2x1r
+fi1x
+fi2x1el
+fi1xe
+fi2xo
+fi2x
+2f1izmus1
+fiz1mu
+fizmu1s
+2f1izmu1s
+2f1izmusokr
+fizmu1so
+2f1izmuso1ma
+2f1izmusukn
+fizmu1su
+2f1izmusuk1ra
+2f1izmu1s
+1f
+f2r
+fr1c1sa2
+frc2s
+f2r1in
+f1ri
+f12r
+fr1tr
+f2r
+fj1s2z
+f1j
+fki2s1
+f1ki
+fk2li
+fk2lu
+fk2r
+f2lak
+f1la
+f2lan
+fla2u
+f2lip
+f1li
+fli2s1
+flo2n1
+f1lo
+flo2n
+f2lot
+f2luk
+f1lu
+1fo
+fo2g1a2r
+fo1ga
+fo2g12c
+fo1g
+fo2gl
+fo2g1rk
+fo2g11ro
+fo2g1e
+fog3g
+fo2g
+fo2g1or
+fo1go
+fo2g1os
+fo2g
+fo2gur
+fo1gu
+fo2g
+foh2szat
+fo1h
+fohs2z
+foh1s1za
+fo2kal
+fo1ka
+fok1ll
+fo1k
+fo2k1rr
+fo2k1e2
+fok1ing
+fo1ki
+fo2k
+fok1k2
+fo2ko1la2
+fo1ko
+fo2k1or
+folta2n
+fol1ta
+fol2t1e
+fol2t1
+fo2n1a1da
+fo1na
+fo2na1do
+fo2nak
+fon1alap
+fona1la
+fona2l1e2
+fon1al1ja
+fon1al1jo
+fona2n
+fon1an2y
+fo2n1as2z
+fo2n1a1u
+fo2n12r
+fo1n
+fons1s
+fo2n1t
+fond2
+fon1dr
+fo2neg
+fo1ne
+fo2n1e2l1
+fo2ner
+fo2n1e2s
+fo2nk
+fo1n
+fon1f2
+fon1i2ko
+fo1ni
+fo2n1i2m
+fo2nin
+fo2n1is
+fo2niz
+fo2n
+fon1k
+fo2n1or
+fo1no
+fo2n1os2z
+fo2n
+fo2n12
+fons2
+fon1st
+fon2t1i2n
+fon1ti
+fon1t2
+fon2tn
+fo2n
+fo1nya1
+fon2y
+fo2r1ad
+fo1ra
+foraks2z1
+for2aks
+fora1k
+fo2r1a1la
+fo2r1a2n
+for1a1to
+fo2reg
+fo1re
+fo2r1e2l
+fo2r1er
+forgs1s
+for1g
+fo2r1il
+fo1ri
+fo2r1i2o
+for2m1e2l
+for1me
+for2m1em
+for2me1r
+for2mes
+for2m1r1t
+for1m
+for2mil
+for1mi
+for2m1in
+fo2r1ol
+fo1ro
+fo2r
+2f1or1r
+fors2
+for1sp
+for2t1l
+for1t
+for2t1e2l
+for1te
+for2t1rd
+for1t
+for2t
+fo2r
+foto1s
+fo1to
+fo2vi
+1f
+f2r
+f21s1za2
+fs2z
+1f
+f2la
+f2l
+fl2dk
+fl1d
+f2l1e2
+f3l2e.
+2f12lsbel
+f1l
+fls1be
+f2liv
+f1li
+f2l
+fl1k2
+f2lo
+f2l
+f2ln
+f1l
+flt2
+fl1tr
+f2lu
+f2l
+fn2n1
+fn1ne2
+f2s
+1f
+fa2n
+f1a
+f2g
+f1
+f1bl
+f1br
+fcsa2p12g
+fc2s
+f1c1sa
+fcsa1p
+f1d1ra
+fe2l
+f1e
+fe2r
+fe2s
+f2h
+f1
+f2te
+f1fl
+f1f2r
+f1gl
+f1gn
+f1gr
+fi2d
+f1i
+figaz1
+fi2ga
+fi2r
+fi2ta
+f2t
+f1
+f1kl
+f1kv
+f2n1ag
+f1na
+f2n1apj
+f1pl
+f1p2r
+f2r1aj
+f1ra
+f2rem
+f1re
+fre2s
+f2r1k
+f1r
+f1ri2
+f2r1is
+f2rl
+f1r
+fr11l
+f1s2l
+2f1s
+f1s1ta
+f1st2r
+fs2z2
+fsza2k1l
+f1s1za
+fsza1k
+f1szl
+f1szp
+f1szt2
+f1t2r
+f2l
+f1
+fz12
+f1z
+fp2la
+fp2ro
+fra1s
+f1ra
+fr2ma
+f1r
+fr2m
+fr2m1e2
+fr2nye
+frn2y
+f2rs
+f2resk
+f1re
+fr2n
+f1r
+fr2nn
+fr1n
+1f2ric
+f1ri
+f3ric2h
+f2ri1e
+f2rig
+f3rip
+1f2ris
+fron2t1a2
+f1ro
+fron2t1e2
+f2rc
+f1r
+fs2po
+fs2t
+fst2r
+ft1aj
+f1ta
+fta1kr
+ft1alj
+ft1bl
+f2t1ef
+f1te
+fte2m
+f2t1e1me
+f2t1p
+f1t
+f2t12r.
+fti2g
+f1ti
+f2t1i1ge
+f2t1ing
+ft1s
+f1t
+ft1t
+f1t
+f2t1g
+f1t
+ft1t
+f2t12z
+1fu
+fu1ga1
+fura2t1e
+fu1ra
+fu2s1as
+fu1sa
+fu2seg
+fu1se
+fu2sis
+fu1si
+fu2s1z12
+fus2z
+fu2sz1ol
+fu1s1zo
+fu2s1z2
+futks2z1
+fu1t
+fut2ks
+fut1k
+1f
+fj2tal
+fj1ta
+2f12r
+2f1rr
+f2z2s
+1f
+2f12g2y
+f2la
+f2l
+fle2c
+f1le
+f2l1eml
+f2l1e2p
+f2l1e2r
+f2l1e2v
+f2l12j
+f1l
+f2l12k
+f2l
+fl3l
+f2lo
+2f1l
+f2lt2
+fl3t2
+f2ma
+f2m
+f2m1e
+f2mo
+f2m
+f2m
+2f1nn
+fr2t1
+fs1t2
+fs2t11l
+2f12t
+2f12t
+2f1zl
+1f
+f1dr
+f1fr
+f1pr
+f1sr
+f3sze2r1el
+fs2z
+f1s1ze
+fsze1re
+f1t2r
+f2z
+f2zis
+f1zi
+f2zo
+f2z1lt
+f1z
+fvro1s2
+f1v
+fv1ro
+1fy
+2g.
+1ga
+2g1abc
+2gabr
+2g1abs
+ga1by
+2g1a2dag
+ga1da
+g1adap
+2g1a2da1ta
+2g1a2datb
+gads1s
+ga1d
+2g1adm
+ga2dog
+ga1do
+2g1a2do1m
+gadi2ko
+ga1d
+gad1i
+2g1a2dsat
+gad1sa
+2g1a2d2u.
+ga1du
+2g1a2duk
+gae2r
+ga1e
+ga2p
+ga1
+2g1aff
+ga1fl
+ga2g2a.
+ga1ga
+2g1agg
+g2a1g2r
+g1ag2y.
+gag2y
+ga2gyu
+g1a2gy
+2g1ajn
+ga1j
+2g1ajk
+2g1ajt
+2g1a2kad
+ga1ka
+ga2kc
+ga1k
+2g1akc
+g2a3k
+2gakv
+ga1kl
+2g1akna1i
+gak1na
+g1ak1tu
+g1akv
+gala2g1
+ga1la
+2g1a2la1k
+2g1alakz
+2g1a2la1pa
+ga2lat
+2g1a2lf
+ga1l
+2g1a2l1
+ga2lv
+2g1alb
+2g1alc
+gale2g1e2
+ga1le
+2g1alk
+galmazsks2z1
+gal1ma
+galma1z
+galmazs1k
+galo2m1e
+ga1lo
+3g2alop
+g1a2los
+2g1a2lud
+ga1lu
+ga2lul
+ga2lus2z
+2g1al1v
+ga2m1a2g
+g2amag
+ga1ma
+2g1amc
+2g1amp
+ga2nab
+ga1na
+2g1a2nal
+2ganc2s
+gan2csal
+gan1c1sa
+gan2cs1g
+gan1c1s
+gan2c1se
+gan1d2
+3g2a1n
+1gan2ga
+g1a2nim
+ga1ni
+ga2nyag
+gan2y
+ga1nya
+ga2ny1at
+ganye2l
+g2a1nye
+ga2nyr
+ga1ny
+g1a2ny
+ga2ny
+ga2r
+ga1
+ga2pa1
+ga1pa
+ga2pac
+ga2pn
+ga1p
+ga1p2l
+g1app
+ga1p2r
+g2a1p1ro
+gara2t1
+ga1ra
+2g1a2rk
+ga1r
+2g1a2rn2y
+ga2rn
+ga1r
+gar1k2
+ga2r
+ga2seg
+ga1se
+ga2s1is
+ga1si
+g2a2s1n
+ga1s
+ga1s2pi
+ga1sp2r
+gas3s1ze
+gas2s2z
+gas3s1z
+gast2
+g2a1s2ta
+g2a1s1to
+g2a1str
+gasz1agg
+gas2z
+ga1s1za
+ga2sz1an
+ga2szg
+ga1s1z
+ga2szs
+ga2sz1e2s
+ga1s1ze
+2g1asztalul
+gasz1ta
+gaszta1lu
+gasz2tr
+gasz1t
+ga2t1a2d
+ga1ta
+gat1a1r
+g2atar
+ga2tav
+g2a2t1l
+ga1t
+ga2t12ram
+g2atr
+gat1ra
+ga2t1eg
+ga1te
+ga2tep
+gat2s
+ga1t
+ga2tim
+ga1ti
+gat1old
+ga1to
+ga2to1mi
+g1a2uk
+ga1u
+ga2ul
+ga2u1t
+ga2van
+ga1va
+ga2var
+ga2vat
+2g1a2vu
+gaza2n
+ga1za
+gaz1an2y
+gaza2te
+ga2zl
+ga1z
+3g2azd
+3g2a1ze
+ga2zer
+2gazg
+2gaz1t
+ga1z
+gazmus1s2
+gaz1mu
+2gazod
+ga1zo
+2gazon
+ga2z
+1g
+g21ba
+2g12b
+g21b
+2g1br
+3g21ci
+gcs1a2va
+gc2s
+g1c1sa
+g2c1se
+g2cs1il
+g1c1si
+g2c1s
+g1da2
+g2d1al
+g2d
+g2d1l
+g1d
+g2d1i1a
+g1di
+g2dis
+g2d
+g2d1
+g2fo
+2g12g.
+g2gak
+g1ga
+g2gat
+g2gaz
+2g1gg
+2g12gi
+2g12g
+2g12g2y
+ggy1as2z
+g1gya
+2g12h
+g21ja
+g21j
+g2j1e2
+g2j
+gla1p
+g1la
+2g1lc
+2g1l1do
+g2l1es
+g1le
+g21li
+3glis
+2g1l2l.
+2g1l1l
+2g1l1lu
+2g1l1mo
+3g2l2y
+g22m.
+g2mal
+g1ma
+g2m1e2
+2g12m
+g2m
+g1na2
+g2nac
+g2nal
+g2n1at
+g2ns
+g1n
+gn2c1se
+gnc2s
+gn2c1si
+gn2c1s12
+gn1d2
+g2n1e
+2g1ng2y.
+gng2y
+g2nig
+g1ni
+g2n1i2o
+g2nis
+2g12niz
+g2n12
+gn1s2z
+gnt2
+gn1tr
+g2n1
+g2n
+g2ny1a2n
+gn2y
+g1nya
+g2nyar
+g2ny1as
+g2ny1e2
+g2nyr1d2
+g1ny
+g2nyrz
+g2nyij
+g1nyi
+gny1k2
+g2ny
+g2po
+g2rad
+g1ra
+g2r1ag
+g2r1aj
+2g12ram
+g2r1a2n
+g2rar
+g2ras
+g2ra2t
+gr1a1to
+gr1att
+g2r1av
+2g12raz
+g2r2g
+g1r
+g2r1l
+g2r12z
+g2re2
+gr1em
+gr1es
+gr11te
+g1r
+g2rif
+g1ri
+g2r1i2p
+g2r1isk
+g2r1ism
+g2r1iz
+g2r
+2g1rnya1la
+grn2y
+gr1nya
+2g1rny1ka
+gr1ny
+2g1rnykk
+2g1rny1ko
+g2r1ol
+g1ro
+g2rop
+gr1ost
+g2r1os2z
+g1r2
+g2r1r
+g2r
+g2r
+gr1s2
+gr1tr
+2g12r2u.
+g1ru
+2g12rud
+g2rug
+2g12ruh
+2g12ru1l
+2g12ru1l
+2g12rur
+2g12rus
+gr1u1ta
+g2rut
+gr1u1tu
+g2rr
+g1r
+g2rt
+g2r
+g2r
+g22s.
+g2s1a2d
+g1sa
+g2sal
+2g12sa1t
+g2s12g
+g1s
+g2s12rad
+gs1ra
+g2s1rn
+2g12ss
+g2s12to
+g2s1e2
+g2sim
+g1si
+g2sis
+g2s
+g2sor
+g1so
+g2s
+g2s12r
+g2s
+g2s
+gs3s1z
+gs2s2z2
+gs3s1zi
+gs3s1z
+gst2
+gs1tr
+g2su2t
+g1su
+g2s12
+g2s
+g2szal
+gs2z
+g1s1za
+g2sza2s
+g2szatl
+g2s3zav
+g2sz1l
+g1s1z
+g2s1z1e2
+g2szis
+g1s1zi
+g2szit
+g2s1z
+2g1sz1k
+gsz1k2
+gs2zks2z1
+gsz1k
+g2s2z1ok1ta
+g1s1zo
+g2sz1l
+g1s1z
+g2s3zn
+g2szv
+g1s1z
+g2s1z
+g22t.
+2gtad
+g1ta
+g2taj
+2g2tal
+gt1a2la
+gt1alj
+2g2t12
+2g1t1bo
+g2t1eg
+g1te
+g2t1e2l
+g2t1e2m
+g2ten
+g2t12l
+g1t
+gt2r
+g2t12r.
+g2t11re
+2gt1fe
+2g1tg
+2g1t1ha
+g2til
+g1ti
+g2tis
+g2t1i2z
+2g12t
+g1t1m
+g2t1ol1da
+g1to
+g1t2
+g2tr
+2g12t1
+g2t
+2g1t1t
+2g2t2
+g1t1vi
+g21va
+g12v
+g2z1a2d
+g1za
+gz1akn
+gz1akt
+g2z1a2l
+g2zar
+g2z1a2t
+g2z1av
+g2z11r
+g1z
+gz11re
+g2z1rh
+g2z1r1k2
+g2z1rn
+g2z12ro
+g2z1rr
+g2z1rt
+g2z1ru
+2g12zsos
+gz1so
+2g12z1s
+g2z1e2
+gzi2g
+g1zi
+g2z1i1ga
+g2zim
+g2z1i2p
+g2z1i2s
+g2z
+g2z
+g2z
+gz3s2p
+gz2s
+gz3s1ta
+gz3s1te
+gz3sug
+g1z1su
+g2z1s
+g2z3s
+gz3s2z
+g2z
+gbe12
+g1be
+gb2l
+g1b
+gb2rem
+gb1re
+gb2la
+gb2le
+gb2lo
+gb2l
+gb2ra
+gb2ri
+gb2ro
+gb2ru
+gcsa1p2
+gc2s
+g1c1sa
+gcsa2p1g
+gd1ell
+g1de
+gde1p2
+g2d12k
+g1d
+g2d12r.
+gd1in2a.
+g1di
+gdi1na
+gd1inb
+gdi1n
+gd1inh
+gd1inr
+gd1int
+gd1inv
+g1d2r
+gd2re
+gd2ro
+gd1t2r
+1ge
+gea2c
+ge1a
+gea2g
+gea2l
+ge2r
+ge1
+g2e1be
+g1e2cet
+ge1ce
+3g2e1ci
+g1ed2d2z
+2g1e2dnn
+ge1d
+2g1e2dn2y
+ge2d1ze
+ged2z
+ge2d1z
+ge2d1zi
+ge2d1z
+2g1eff
+2ge1ge
+2g1e2g
+g1e2gye
+geg2y
+2gegyez2s.
+gegye1z
+2gegyezsb
+2gegyez1se
+2gegyez1s
+2gegyezsh
+2gegyezs2i.
+gegyez1si
+2gegyezsi2g
+2gegyezsk
+2gegyezsn
+2gegyezsr
+2gegyezs3s
+2gegyezst
+2gegyez1s
+2gegye1z
+g1e2gy
+gegy1r
+ge2gyo
+2g1egys
+2g1e2gy
+ge2hes
+ge1he
+ge2het
+2g1e2h
+2g1ejt
+2g1e2k2e.
+ge1ke
+2g1e2ke1i
+2g1e2kek
+2g1e2k1
+ge1k
+ge2kj
+ge2kk
+2g1e2k2s.
+ge1k2li
+2g1eks
+3g2e2l.
+g1e2l1a2d
+ge1la
+ge2lag
+3g2elap
+ge2las
+ge2ll
+ge1l
+ge2l1r
+2g1elc2s
+3g2el2d.
+2g1el1do
+2g1el1d
+ge2lef
+ge1le
+2g1e2leg
+3g2ele2k.
+2ge2le1m
+ge2le1mi
+2ge2lemk
+2g1e2lemm
+2g1e2lemz
+gele2n
+3g2el2end
+ge2l1eng
+ge2l1en2y
+gel1es1te
+ge2lev
+ge2lg
+ge1l
+3g2elsb
+3g2elsek
+gel1se
+3g2else2n
+3g2elsn
+gel1s
+3g2elsr
+3g2elsh
+3g2els2i.
+gel1si
+3g2elsk
+3g2els1r
+3g2elss
+3g2els1t
+3g2el1s
+2g1els2z
+3g2els2z.
+3g2el1s1z
+3g2el1s1z
+3g2elszv
+2g1elhel
+gel1he
+3g2elhes
+3g2elhet
+3g2el2i.
+ge1li
+3g2elik
+gel1int
+3g2el2j.
+3g2el1je
+3g2el1j
+3g2el1j
+2g1el1k
+2g1elle1n
+gel1le
+2g1el1m
+2g1elnev
+gel1ne
+3g2elnn
+gel1n
+3g2el1ni
+2g1e2l1os
+ge1lo
+ge2l
+3g2el2.
+ge1l
+ge2lbbr
+3g2el1be
+3g2el1b
+3g2el1bi
+3g2el1bo
+3g2el1b
+3g2elc
+3g2el1e
+3g2el1
+3g2elg
+3g2elh
+3g2el1ja
+3g2el1j
+3g2el1jo
+3g2el1j
+3g2el1j
+3g2el2k.
+3g2el1ka
+3g2elkb
+3g2elkel2.
+g1e1lke1l
+gel1ke
+3g2elker
+3g2elket
+3g2elkez
+3g2elk2.
+gel1k
+3g2elkn
+2g1elks
+3g2elkh
+3g2el1ki
+3g2elkk
+3g2el1kl
+3g2elkn
+3g2el1k
+3g2el1k
+3g2elkr
+3g2elkt
+3g2el1ku
+3g2el1k
+2g1e2ll
+2g1elm
+3g2el2n.
+3g2el1na
+3g2el1ne
+3g2el1n
+3g2elnk
+3g2el1n
+3g2el1nyi
+geln2y
+3g2el1o
+3g2el1
+3g2el1
+3g2elp
+g2elr2e.
+gel1re
+3g2elrs
+gel1r
+3g2el1ro
+3g2el1r
+3g2el2s.
+3g2el1s
+3g2el1so
+3g2el1s
+3g2el1s1za
+gels2z2
+3g2el1s1ze
+3g2el1s1z
+3g2el1s1zi
+3g2el1s1z
+ge2l1s1z
+3g2elsz1ri
+gel1s1z
+3g2el2t.
+3g2el1t
+2g1el1t
+3g2el1t
+3g2el1t
+3g2el1
+3g2el1v
+3g2el1ve
+3g2el1v
+3g2elvis
+gel1vi
+3g2elviz
+2g1e2lz
+g1el1s
+3g2els2z.
+gels2z
+2g1el1s1z
+2g1el1s1zo
+3g2el2t.
+3g2elt2e.
+gel1te
+3g2eltek
+3g2eltem
+3g2eltes
+2g1eltet2t.
+2g1eltettn
+3g2eltb
+gel1t
+3g2eltk
+3g2elt2l
+2g1eltr
+3g2eltt
+2g1el1to
+2g1el1t
+ge2ll
+ge1l
+3g2eln
+2g1el2v.
+2g1elvb
+2g1elven
+gel1ve
+2g1elvt
+gel1v
+2g1elvh
+2g1elvn
+2g1el1vo
+2g1elvr
+2g1el1v
+2g1elvv
+ge2ly1e2g
+gel2y
+ge1lye
+ge2lyid
+ge1lyi
+ge2man
+ge1ma
+2g1ember
+gem1be
+2g1embl
+g1e2mel
+ge1me
+2geme1l
+2ge2melk
+ge3mell
+2geme1l
+2g1e2ms
+ge1m
+2g1eml
+ge2moc
+ge1mo
+2g1emp
+ge1na2
+ge2n1ad
+ge2nar
+ge2n1as
+ge2na2u
+ge2n1l
+ge1n
+ge2nr
+ge2nt
+g2end
+ge2n1eg
+ge1ne
+3g2ene1r
+ge2n1e1re
+2g1e2nerg
+ge2n1es2z
+g2enes
+ge2n1e2vet
+gene1ve
+ge2n1e2vez
+gen2k
+ge1n
+ge2n11k
+ge2n1kn
+ge2n1kt
+ge2n1in
+ge1ni
+ge2n1is
+gen1k2
+g1en1ni
+g1en1n
+gen3nya
+gen2n2y
+ge2n1or
+ge1no
+ge2n1os
+gen2srt
+gen1s
+gens3s
+gen1t2r
+ge2n1ur
+ge1nu
+g2e1nye
+gen2y
+2g1enyh
+g1enyv
+2g1enz
+ge2ob
+ge1o
+ge2oc
+ge2of
+ge2og
+ge2ok
+ge2om
+ge2o1te
+ge2r
+ge1
+ge2ped
+ge1pe
+ge2per
+ge2ps
+ge1p
+2ge1pi
+ge2pos
+ge1po
+ge2rab
+ge1ra
+ge2r1ad
+ge2r1aj
+ge2ral
+ge2r1a2n
+ge2r1a2p
+ge2r1as
+ge2ra1u
+ge2rb
+ge1r
+ge2r12g
+ger1ll
+ger2r
+ge2r11ra
+gerr1a2datot
+ge2r12rad
+ger2rada1to
+gerra1da
+ge2rt
+g1er1de
+3g2ereb
+ge1re
+2g1e2redm
+ge2reg
+1g1ere1ge
+ger1e2g2y
+2g1e2rej
+ge2r1e2lk
+gere1l
+ge2r1ember
+gerem1be
+ge2r1eml
+ge2r1en2y
+ge2r1e2r
+ge2res2z
+ge2r1e2v
+ge2rj
+ge1r
+ge2r1k
+ge2rl
+ger12le
+ger12l
+ge2r1p
+ge2r1tt
+ge2r1i2na
+ge1ri
+ge2r1ing
+ge2r1i2p
+ger2is
+ge2r1iz
+ge2rog
+ge1ro
+ge2ror
+ger1os2z
+ge2rot
+ge2r
+ge2r2k
+ge1r
+ge2r1n
+ge2r
+g1er2.
+g1erk
+g1erv
+ger1z
+ge1ru2
+ge2rur
+ge2r12g
+ge1r
+ge2r12l
+g2e2s.
+ge2s1
+ge1sc
+gesd2
+g2eseb
+ge1se
+3g2ese1i
+ge2s1emb
+g2ese2n.
+ge2send
+2g1e2s1er
+2g1e2setb
+2g1e2setet
+gese1te
+2g1e2se1t
+ge2setl
+2g1e2setr
+2g1e2sett
+2g1esl
+ge1s
+2g1e2ss
+g1e2sik
+ge1si
+2g1es1k
+gesleg1
+ges1le
+g1es1ni
+2g1e2s
+g2esr
+gess2
+3g2ess2.
+ges1s
+3g2essg
+g2es2t.
+2g1es1te
+2g1es1t
+2g1es1ti
+2g1estj
+g1es1v
+2g1e2szek
+ges2z
+ge1s1ze
+ge2szes
+ge2szet
+g1eszl
+2g1eszm
+ge2t1ak
+ge1ta
+ge2tal
+ge2t1a2n2y
+get1ap
+ge2t1as
+get1e2g2y
+ge1te
+2g1e2tetn
+gete1t
+ge2t12k
+ge1t
+get2l
+get11le
+ge2t12r.
+ge2t12r
+ge2t12v2e.
+get1ve
+ge1t2
+ge2t1r
+getks2z1
+ge1t
+get1k
+get1rt
+ge1t2r
+get2t1eb1b
+get1te
+ge2tut
+ge1tu
+ge2t12z
+ge1t
+ge2ur
+ge1u
+geu2s
+ge2vic
+ge1vi
+2ge1vo
+ge2vol
+2g1e2v
+ge1y
+ge2zo
+gez1a2
+ge1z
+2g1ezr
+1g
+g2ber
+g1be
+2g1br
+gc3c
+g2d1a2
+g2d12
+g2d1e2l
+g1de
+g2d1e2r
+g2d1es2z
+g2dik
+g1di
+g2din
+g2dir
+g2d
+g2d1o
+g2d
+g2d12
+g2d1u2
+g2d12
+g1d2
+g2d11l
+g2d
+g2d3z
+g2gi
+g2g
+g2g
+2g12h2e.
+g1he
+2g12hek
+2g12hen
+2g12hes
+2g12het
+2g1hh
+2g1hs
+2g12j.
+g2jrt
+g1j
+2g1jh
+2g1jj
+2g1js
+g2ke1i
+g1ke
+g12kel
+g12kes
+gkes1s
+g12kez
+2g1ks
+g2l2l
+g1l
+g2lel
+g1le
+2gles
+2g12let
+2g12lez
+g2ln
+g1l
+2g1lm
+glv1v2
+g2lya
+gl2y
+g2ly
+g2lyeg
+g1lye
+g2lyo
+g2ly2
+g2m1a2
+g2m1
+g2mb
+g2m1e2g
+g1me
+g2mel
+g2mer
+g2mr
+g1m
+g2m1o
+g1na2
+g2nab
+g2n1ad
+g2nag
+g2n1al
+g2n1an
+g2n1ar
+g2n1a1t2
+g1n2
+g2n1r
+g2nt
+3g2nd
+g2neg
+g1ne
+2g12nekes
+gne1ke
+2g12nekl
+g2n1e2l
+g2n1e2r
+g2n1e2t
+g2n12g
+g1n
+g2n1in
+g1ni
+g2n
+g2nn
+g2n
+g2n
+gnt2
+g2n
+g1n2
+g2n2y
+g2ny1e2g
+g1nye
+g2nyid
+g1nyi
+g2nyis
+g2ny2r
+g1ny
+g2nyo
+g2ny2
+g2ny
+3g2p.
+g2p1a2
+g2p12
+g2p1e2g
+g1pe
+3g2pel
+g2p1ell
+g2p1er
+g2p1e1s
+g2p1e2s2z
+g2p12szen
+g1p
+gps2z
+gp1s1ze
+g2pik
+g1pi
+g2p
+2g1pt
+g2p1o2
+g2p
+g2p
+g2p
+3g2pp
+gp1t2
+g2p1u
+g2p
+g2p1l
+g1p
+g1ra2
+g2rag
+g2rak
+g2ral
+g2r1an
+g2rap
+g2rar
+g2ras
+g2r
+2g1r2c.
+2g1rd
+g2r1el
+g1re
+g2r1eml
+2gret
+2gr2.
+g1r
+g2ri1e
+g1ri
+2g12rin
+g2ris
+gr1k2
+2grl
+2grm
+g2ro
+g2r
+2gr2.
+g1r
+2grk
+2gr1te
+2gr1t
+2grth
+g1r1ti
+g1rtj
+g1rtl
+g1rt2.
+gr1t
+g1rt1e
+g1rtk
+g1rtv
+g1rts
+g1rtv
+g2r1u2
+g2r1
+2g1r2v.
+2gr1v
+2g1rz
+3g2r1z
+g2sar
+g1sa
+g2seg
+g1se
+g2s1e2l
+g2s12g
+g1s
+g2sim
+g1si
+g2s1o
+g2s
+gs3s1za
+gs2s2z2
+g2s1za
+gs2z
+gs3zav
+g22s1z
+3gszt1
+g1s1z
+gsz1t
+g2s1z1o
+g2s1z
+2g12tel
+g1te
+g2ter
+g2tet
+2g1tk
+2g12t1o
+2g1tr
+2g1tt
+2g12v.
+2g1vb
+2g12v2e.
+g1ve
+2g12ved
+2g12ve1i
+2g12vek
+2g12ven
+2g12vet
+g2vb
+g1v
+2g12vn
+2g12vt
+2g12vv
+2g1vf
+2g12vi
+2g1vj
+2g1vk
+2g1vn
+2g1vr
+2g1vs
+2g1vt
+2g1vv
+g2za2n
+g1za
+g2zr
+g1z
+gz3s2
+gfala2d
+g1fa
+gfa1la
+gfa2l1a1da
+gfa2le
+gfi21k
+g1fi
+gfi1
+gf2la
+gf2lo
+gf2l
+gf2lu
+gf2l12le
+g1f
+gf1l
+gf2ra
+gf2r
+g1f2re
+gf2r
+gf2ro
+g1f2r
+gf2ru
+g2g1a2p
+g1ga
+gg1arc
+gga2s
+g2g1a1s1z
+ggas2z
+g2g1a1s1z
+g3g2a2z1e
+gge2lest
+g1ge
+gge1le
+ggs3s
+g1g
+gg1i2ta
+g1gi
+g2g1iz
+gg1orv
+g1go
+gg2n
+g1g
+g2g11ni
+ggs2
+g1g
+g1g2raf
+gg1ra
+g1g2ran
+g2g1re
+gg2ro
+gg1sp
+g2g12g
+g1g
+g2g2y
+g3gyak
+g1gya
+g3gya1l
+g3gyap
+g3gya1ra
+ggy1a1ro
+g3gyat
+g3gyr
+g1gy
+g3gyv
+ggy12z
+ggy1e2l
+g1gye
+g3gyeng
+g3gyep
+g3gyer
+g3gy1r
+g1gy
+g3gyil
+g1gyi
+ggy1ol
+g1gyo
+g3gyom
+g3gyor
+g3gy
+g3gy
+g3gy
+g3gyu
+g4gyt
+g1gy
+ggy1lt
+g1gy
+g3gyr
+g3gy
+gha2d1e2
+g1ha
+ghaji2ko
+gha1j
+ghaj1i
+g2ha2m.
+g2ham1b
+g2ha1me
+g2hamh
+g2hamm
+g2hamn
+g2hamr
+g2hamt
+gha2sbr
+gha1s
+g2hi1a
+g1hi
+1ghy
+1gi
+gi2a1a
+gi1a
+gi2a1
+gia1b2
+gi2a1ba
+gi2a1b
+gi2a1bi
+gi2a1bo
+gi2ac
+gi2a1d2
+gi2a1e
+gi2a1
+gia1f
+gi2afr
+gi2a1g2
+gi2ah
+gi2aim
+gia1i
+gi2a1
+gi2aj
+gi2akar
+gia1ka
+gi2akas
+gi2a1la
+gi2a1l
+gi2a1l
+gi2am
+gi2a1n
+gi2an2y
+gi2a1o
+gi2a1
+gi2a1
+gi2a1
+gi2a1p2
+gi2ar
+gia1s2z
+gi2a1s1za
+gi2a1s1z
+gi2aszem
+gia1s1ze
+gi2a1s1z
+gi2aszf
+gi2a1s1zi
+gi2a1s1zo
+gi2a1s1z
+gi2at
+gia1t2r
+gi2a1u2
+gi2a1
+gi2a1
+gi2a1
+gi2av
+gi2az
+2gibr
+2g1i2de1a
+gi1de
+2g1i2de1
+2g1i2deg
+gi2de1i
+2g1i2dej
+2g1i2de1o
+2g1i2d
+gi2di1
+gi1di
+2g1i2do
+2g1i2d
+gi1fl
+gig1ad
+gi1ga
+gig1a1ra
+gig1ass
+gig1a1u
+2gigaz
+gig1l
+gi1g
+2g1i2g2e.
+gi1ge
+gig1e2c
+gi2g1eg
+gig1eh
+gig1eng
+gig1enn
+gige2r
+gig1e1re
+gig1e2s
+gig1et
+gig1e2v
+gi2g
+gig1h
+gig12l
+gi2g1m
+gig12ne
+gig12r
+2g1igz
+gig3g
+1gi2g1i2
+gi2g
+gi2g1o2
+gi2g12
+gi2g1
+gi2g1u
+gi2g
+gi2g1
+gi2g
+g1i2g2y
+2g1i2ha
+2g1ihl
+2g1i2jes
+gi1je
+gi2ker
+gi1ke
+gi2kes
+3gi1le
+g1ill
+gi2m2a.
+gi1ma
+gi2man
+gi2mb
+gi1m
+2g1i2md
+gi2mr
+2g1imp
+gina1p2
+gi1na
+gi2nas
+gi2n12z
+gi1n
+2g1ind
+3gi1n
+2ginf
+2g1inkv
+g1in1n
+g1in1ni
+g1in1no
+g1in1nu
+2g1inp
+2gins
+2g1in1ta
+2g1in1te
+2g1in1t
+g1inth
+g1in1ti
+g1intj
+g1int2.
+gin1t
+g1ints
+g1in1tu
+g1intv
+2g1inv
+2g1inz
+2g1io1n
+gi1o
+gi2o1no
+gi2ot
+gi21a
+gi1
+gi21
+gi2c
+gi21e
+gi2f
+gi2g
+gi21k
+gi2kom
+gi1ko
+gi2l
+gi21p2
+gi21r
+gi21s2p
+gi21ta
+gi21t
+gi21
+gi21
+gi2z
+2g1i2pa
+3g2ips
+gip2s1za
+gips2z
+gip2s1z
+gip2s1zo
+gi2ram
+gi1ra
+2g1i2rat
+2g1i2r
+gi2rig
+gi1ri
+2gi1ro
+gi2rod
+2g1i2rn
+gi1r
+2g1irt
+g1isc
+2g1i2si
+2g1isk
+2g1isl
+2g1ism
+2g1isp
+2g1istl
+gis1t
+2g1is1te
+2g1i2s1z
+gis2z
+2g1i2s1zo
+gi2s1zu
+gi2tas
+gi1ta
+g2i1t
+2gitc
+3g2i1ti
+3g2it1te
+g1it1tu
+2g1i2vad
+gi1va
+2g1i2vs
+gi1v
+g1i2vo
+2g1i2v
+2g1i2z2.
+gi1z
+gi2zv
+2g1i2zo
+1g
+g2g
+g2ja
+g2j
+g2m1a2
+g2m
+g2n
+g2n2y
+g2ra
+g2r
+g2re
+g2ri
+g2ro
+g2r
+g12ts2z
+g1t
+gt1p2
+g1t
+g2v
+g2ve
+g2v
+g2vo
+g2v
+g2v
+g2ze
+g2z
+g2z
+gka2r2r
+g1ka
+gka1r
+gk22p1e2l
+g1k
+gk1pe
+gk2p1e2r
+gk2t12
+gkia3d1n
+g1ki
+gkia2d
+gki1a
+gkia1d
+gki12
+gkie3lg1t
+gkie2l
+gki1e
+gkie1l
+gkie2l1g
+gkis1s
+gk2la
+gk2li
+gk2l
+gk2lo
+gk2l
+gk2lu
+gk2zn
+g1k
+gk1z
+gk2z1r
+gk1v2
+g1k
+gk2ra
+gk2r
+gk2re
+gk2r
+gk2ri
+gk2r
+gk2ro
+gk2r
+gk2va
+gk2v
+gla1p2l
+g1la
+gla1s2t
+gla3t
+gl2s1za
+g1l
+gls2z
+gle2g1a2
+g1le
+glege2l
+gle1ge
+gle2g1e1l
+gle12
+glemez2k
+gle1me
+gleme1z
+gle2t1a2
+gle2t
+gle2t1el
+gle1te
+gle2t12rt
+gle1t
+glet1r
+gle2t1tn
+gle2tos
+gle1to
+gle12
+gl2nyel
+g1l
+gln2y
+gl1nye
+g2lor
+g1lo
+1g2los
+gl12
+g1l
+gls2
+gl1re2
+g1l
+gl2reg
+gl2rel
+gl2ro
+gme2g1a2
+g1me
+gme2g1e
+gme2g1
+gme2g1o
+gmens1s
+gmen2s2z
+gmus3s2
+g1mu
+gna2d
+g1na
+gn1a1da
+g2n1a2j
+gn1alk
+gna2pe
+g2n1a2r
+1g2nb
+g1n
+1g2nh
+1g2n1i
+g2n2n.
+g2n1n
+g2n1ra
+gn2s3z
+g2n2t.
+g2n1t
+1g2nv
+gn1br
+g2n1e2l
+g1ne
+gne2m1e2l
+gne1me
+gne1si2
+gne2sir
+gnes3s
+gne2s1z
+gnes2z
+gne1to1
+gn2l
+g1n
+g2n11le
+gn1v1a2
+gn2v1
+gni2g
+g1ni
+g2n1i1ga
+g2n1ing
+g2n1i2p
+g2n1i2r
+g2n1is
+gni1t1a2
+gni2tel
+gni1te
+g2n1okt
+g1no
+g2n1ol
+1g2no1re
+gn1k
+g1n
+gn1s
+gn1pr
+gn1s2k
+gn1st
+gn1t2r
+g2nj
+g1n
+gn1g
+g1n
+gn1z
+1go
+go2z
+go1
+2g1obj
+2g1o2d
+go2et
+go1e
+g1o2k2a.
+go1ka
+gok1a2d
+g1o2ka1i
+2g1o2k1a2l
+2g1o2k
+go1ki2
+gok1ir
+2g1okm
+g1o2kok
+go1ko
+2g1o2kos
+g1o2kot
+2g1o2koz
+2g1ok1ta
+2g1o2laj
+go1la
+2g1ol1da
+2gol1d
+g1oldd
+g1oldh
+g1oldj
+g1ol1do
+2g1ol1d
+goldks2z1
+gold2ks
+gold1k
+g1oldt
+g1ol1du
+g1oldv
+gol2f1a
+gol2f1e
+gol2fin
+gol1fi
+2g1o2lim
+go1li
+go2l12r
+go1l
+2g1olta1lo
+gol1ta
+2g1oltr
+gol1t
+2g1olts
+2g1olt2.
+gol1t
+2g1oltv
+2g1olvad
+gol1va
+2g1olvas
+go2m1as
+go1ma
+3g2omb
+gom2b1rn
+gom1b
+gom2b1rt
+gom2b1e2
+3g2o1me
+2g1oml
+go2n1a2to
+go1na
+go2n1ll
+go1n
+gonc3c
+gon2d12
+gon2d12r.
+gon1d
+gon1di2
+gon2dik
+gon2doks
+gon1do
+gon2d1or
+gon2d
+go2n1e2
+gon2g1a
+gon2gl
+gon1g
+g2o1no
+go2nol
+2g1on1to
+go2n
+go2nye
+gon2y
+go2p
+2g1o2pe
+gor1ass
+go1ra
+goras2z2
+gora1t2
+gor1ll
+go1r
+2g1orc
+go2r1e
+2g1o2ri1e
+go1ri
+2g1orm
+go2roz
+go1ro
+go2r
+2gorz
+go2se
+go2s
+2gos1to
+2g1ostr
+g1ost2y
+go2s
+go2s3za
+gos2z
+go2s3z
+go2s1z
+go2vc
+go1v
+2g1o2ve
+go2xi
+go1ya
+go1y
+1g
+ga2d
+g1a
+g2g
+g1
+g2r
+g1b2l
+g2c3h
+g2c1ol
+g1co
+gcsa1p2
+g21c1sa
+gc2s
+gcsa2p1g
+g2c
+2g12dn
+g1d
+g2div
+g1di
+g1d1ru
+g1f2r
+g2v
+g1
+g1kl
+g1k2r
+g2lar
+g1la
+gle2l
+g1le
+gl1e1l
+g2ler
+g2l12h
+g1l
+g2l
+g2l
+2g12nu
+g2r
+g1
+g1p2l
+g1p2r
+g12rad
+g1ra
+g12ras
+g2r1ka
+g1r
+g2rr
+3g21ro
+3g21sa
+g2s1aj
+g1s2k
+g1s2p
+g1s2r
+gs3s
+g1s2ta
+g1s1t
+g21st2r
+g1s2z
+g2s3zm
+g21s1z
+g2s3zras
+gsz1ra
+g2s3z1r
+gs3z1r
+g2ta1u
+g1ta
+g2t1is
+g1ti
+g1t1r
+g1t1ri
+3g2val
+g1va
+2g12vod
+g1vo
+2g12v
+g2vu
+3g21z
+3g21zi
+3g21zo
+3g21zu
+1g
+2g1bl
+2g12ko
+g2ku
+2g12l
+2g1lb
+g12le
+2g1lr
+3g2mb
+gm2b1a
+gm1be2
+gm2bel
+gm2b1er
+2g1ml
+2g12na
+g12n
+g2ne
+g2n
+2gnt
+3g2rb
+3g2rc
+gr2c1sa
+grc2s
+gr2c1s
+gr2csel
+gr1c1se
+gr2c1s
+3g2r1d
+3g2r1d
+2g12re
+3g2rg
+3g2rn
+g2rk
+g1r
+g12r
+2grv
+g1s2
+g2s1n
+2g1s2s2z
+2g1s2z
+2g1tl
+g12v.
+g1vb
+g12ve
+g12v
+g1vh
+g1vn
+g12v
+g1vr
+g1vt
+g12v
+g12v
+g1vv
+1g
+ga2n
+g1a
+g2g
+g1
+g1br
+gcsa2p1
+gc2s
+g1c1sa
+ge2l
+g1e
+ge2r
+g2b
+g1
+g1fr
+g1gl
+1g2g12
+gi2ta
+g1i
+g1kl
+g1kv
+g1ny2
+gn2y
+g1pl
+g1p2r
+2g12r.
+g1rb
+g1rh
+g2rit
+g1ri
+g2riz
+2g1rj
+g1rk
+2g1rl
+g1rn
+g2rk
+g1r
+2g1rr
+g1rs
+g1rt
+2g12r
+2g1rz
+3g2rz1s
+gr1z
+g2s1e2p
+g1se
+g2sib
+g1si
+g1s1pi
+g1s1ta
+g2s1u2gar2a.
+g1su
+gsu1ga
+gsuga1ra
+g2s12v
+g1s
+g2s12r1s
+g1s
+gs1r
+g1tr
+gu2t
+g1u
+g2l
+g1
+g2zt
+g1z
+g2z1e2k
+g1ze
+g2z1e2l
+g2z1o
+gz2s
+g1z
+g2z1s
+gz2s
+g2z3su
+g2z3s
+g2z
+g2p1e2lu
+g1pe
+gpia2c1i2o
+g1pi
+gpi1a
+gpia1ci
+gp2la
+gp2l
+gp2le
+gp2lu
+gpon2ga
+g1po
+gpo2re
+gp2ra
+gp2r
+gp2re
+gp2r
+gp2ri
+gp2r
+gp2ro
+gp2r
+gp2r
+gp2s2z
+1graff
+g1ra
+1g2ra1fi
+1g2ra1f
+gra2m1a2
+gra2m12
+gra2m1e2
+gra2m1r1t
+gra1m
+gra2mik
+gra1mi
+gra2m1in
+gra2m1is
+1g2rammj
+gra1mu2
+gra2mut
+g2ra1p
+1g2ra1v
+gr2c1s1i
+g1r
+grc2s
+3g2rf
+gr1fa2
+gr2f1an
+gr2f1e2
+gr2lt
+gr1l
+gr2l1e2
+g2r1n
+grn1d
+g1r2r
+gr2r1i2p
+gr1ri
+gr2s3za
+grs2z
+gren2d12
+g1re
+g2ril
+g1ri
+gril2l1a
+gri2s1
+gris3s
+gri1s2
+gri2st
+g2rz
+g1r
+gr1a2
+g1r
+gr12
+gr2f1a
+gr2f
+gr1p2
+1g2rup
+g1ru
+gsg1g
+g1s
+gs2gel
+g1s
+gs1ge
+gs2ho
+gs2ka
+gs2k
+gs2ko
+gsk2r
+gs2la
+gs2l
+gs2li
+gs2m
+gs2mi
+gs2mu
+gs2n
+gsors3s
+g1so
+gs2pa
+gs2p
+gs2pe
+gs2p
+gs2pi
+gs2po
+gs2p
+gsp2r
+gs2r
+gs2ta
+gs2t
+gs2te
+gs2t
+gs2ti
+gs2t
+gs2to2
+gst2r
+gs2tu
+gs2t
+gsu1g2
+g1su
+gs2v
+gsza2k
+gs2z
+g1s1za
+gsza2k12
+gszla2d
+g1s1z
+gsz1la
+gsz2l1a1da
+gsz2li
+gsz2r1a2da
+gsz1ra
+g1sz2c
+gsze2r1ss
+g1s1ze
+gsze1r
+gsze2r1szh
+gs2zers2z
+gsze2r1sz1k2
+gsze2r1szn
+gsz2t
+g1s1z
+g1sz2f
+gsz2n12sze1i
+g1s1z
+gsz1n
+gszns2z
+gszn1s1ze
+g1sz2k
+g1sz2l
+gsz2m
+g1sz2p
+gszt2
+g1sz2t
+gta2g1ar
+g1ta
+gta1ga
+gtag1g
+gta2n
+gtra2d
+g1t
+gt1ra
+gt2r1a1da
+gter1mo1
+g1te
+gt2r
+g1t
+gt2ra
+gt2r
+gt2re
+gt2r
+gt2ri
+gt2ro
+gt2r
+gt2r
+gt2ru
+gt2r
+gt2z12r
+g1t
+gt1z
+1gu
+gu2ay
+gu1a
+2g1u2bo
+g1u2ga
+3g2ugg
+g1u2go
+2g1ugr
+gu2id
+gu1i
+gu2in
+2g1ujj
+gula2te
+gu1la
+gula2t1
+gu2n
+2g1u2ni
+gu2n
+gu2nu
+3g2u1r
+gus1abl
+gu1sa
+gu2sad
+gu2s1a2n
+gu2sas
+gu2sat
+gu2s1av
+gu2sl
+gu1s
+gu2s1e2
+gu2s1r1t
+gu1s
+gu2sil
+gu1si
+gu2sis
+gu2s1
+gu2sol
+gu1so
+gu2sor
+gu2s12
+gu2s
+gu2s
+gus3s2
+gus2s2z2
+gust2
+gu2s
+gu2s1z
+gus2z
+gus3z2s
+gu2tac
+gu1ta
+gu2tak
+gu2tal
+gu2tam
+gu2tan
+gu2tas
+gu2tat
+gu2taz
+2g1utc
+2g1u2t
+gut2d1o2ku
+gut2dok
+gut1do
+2g1u2tu
+gu1ya
+1g
+g2ja
+g1jd
+g1jf
+2g1jho1d
+gj1ho
+2g12j
+2g1jr
+2g1js
+2g12ju
+g2ny1e
+gn2y
+g2ny12
+2g12r.
+g2r
+g2ri
+2g1rn
+g2ro
+2g12s2z
+2g2t1a2
+2g12t12
+2g1tb
+2g1tc
+2g1td
+2g12t1e2
+2g12t
+2g1tf
+2g1tg
+2g1th
+2g12t2i.
+g1ti
+2g12ti1a
+2g12ti2g
+2g12tih
+2g12tij
+2g12t1i2ko
+2g12ti1na
+2g12ti1n
+2g12tir
+g2tis
+2g12tit
+2g12tiv
+2g12t1i2z
+2g1tj
+2g1tk
+2g1tl
+2g1tm
+2g1tn
+2g12to
+2g1tp
+2g1tr
+2g1ts
+2gtt
+2g1tv
+2g1tz
+g2zi
+1g
+g2c2s
+g2d
+g2d
+g2d
+g2ge
+g2gy12r.
+gg2y
+g1gy
+2g11gyi
+g2gy2i.
+g2gyib
+g2gyie2k.
+ggyi1e
+3g2gyieket
+ggyie1ke
+3g2gyiekk
+g2gyig
+g2gyit
+g2gyiv
+2g1gyl
+2g1gyv2d.
+ggy1v
+2g1gyvdd
+2g1gyvdek
+ggyv1de
+2g1gyvdet
+2g1ld
+g2len
+g1le
+g2lep
+g2lik
+g1li
+g2lm
+g1l
+2g1nn
+3g2rc
+2g12re
+3g21ri
+2g12r
+2g12r
+g2te
+g2t
+g2ti
+g2t
+g2t
+g2t
+g2ve
+g2v
+g2ze
+g2z
+1g
+2g12r.
+2g1rb
+g1re2
+g1rh
+g2ri
+2g1rj
+2g1rl
+2g1rm
+2g1rn
+2g12r
+2g1rt
+g2ru
+g2r
+g2ze
+g2z
+g2zi
+g2z
+g2z
+gva2s1u2
+g1va
+gv2gy1a2da
+g1v
+gvg2y
+gv1gya
+gv2nya2n
+gvn2y
+gv1nya
+gvs1s
+gvers3s
+g1ve
+gve1r
+gvez2rel
+gve1z
+gvez1re
+gv2nye2l
+g1v
+gvn2y
+gv1nye
+gvi2n1a2
+g1vi
+gv2zel
+g1v
+gv1ze
+gv1s2
+g1v
+g2y
+1gya
+gy1abl
+2gy1a2c
+2gyadag
+gya1da
+gya2dal
+2gy1a2datb
+gy1a2dt
+gya1d
+2gya2g.
+2gyagb
+gya2ge
+gya2gp
+gya1g
+2gyagg
+2gyagh
+gya2gis
+gya1gi
+2gyagk
+2gyagn
+gya2g1ol
+gya1go
+2gyagt
+2gya1gya
+g2yag2y
+gy1a2gyu
+2gy1a1ja
+2gy1akc
+2gy1aknk
+gyak1n
+2gy1ak2t.
+2gy1ak1tu
+gya2laj
+gya1la
+gya2l1akt2
+gya2la1po
+gya2lap1p
+gy1alat
+2gy1a2l1
+gya1l
+gya2lel
+gya1le
+gy2a2lik
+gya1li
+gyan1ab
+gya1na
+gya2n1e
+2gy1a2nya
+gyan2y
+gy1a2ny
+gya2pak
+gya1pa
+gy1a2ph
+gya1p
+2gy1a2p1i
+2gy1a2pk
+2gy1a2pm
+2gy1a2pn
+gy1a2ps
+2gy1a2p1t
+2gyap1j
+gya2pn
+gya1p
+gya2pr
+2gy1app
+gy1aps
+gy1aran
+gya1ra
+2gy1a2raw
+gyard2
+2g3yardom
+gyar1do
+gya2rel
+gya1re
+gy1ar1g
+3gya1ri
+gya2r1n
+gya1r
+gya2r12r
+gya2rv
+2gya1r
+2gyas1ra
+2gy1a2t2y
+2gya1z
+1gy
+2gy1br
+2gy1g
+gy1lc
+gy1ll
+gy1lm
+3gym
+2gy1p
+2gy2r1e2
+2gyrf
+2gy12rok
+gy1ro
+2gy12rul
+gy1ru
+2gy12rus
+2gy12r2
+gy2s1z
+gys2z
+2gy12ta
+2gy1tk
+gy1tl
+2gy1tv
+gy1bl
+gy1br
+gy1dr
+1gye
+gye2d1s
+gye1d
+2gy1e2d2z
+gy1e2ge
+gy1e2g
+1gy1e2gye
+gyeg2y
+2gy1e2k2e.
+gye1ke
+2gy1e2ks
+gye1k
+2gyeleg
+gye1le
+g2ye2leg2y
+2gy1e2le1m
+2gy1elm11
+gyel1m
+gyelm1
+2gy1el1n
+2gy1eltr
+gyel1t
+2gy1el1v
+gy1el1v
+2gyembl
+2gy1e2mel
+gye1me
+gy1eml
+2gyene1s
+gy2enes
+gye1ne
+2gyenget
+gyen1ge
+2gy1enz
+gye2pal
+gye1pa
+2gy1erd
+gy1e2red
+gye1re
+2gy1e2rej
+gye2rn
+gye1r
+2gy1ern
+2gy1e2ro
+2gy1e2r
+2gy1ers
+gye2seg
+gye1se
+2gy1esl
+gye1s
+2gyesg
+gy1e2s
+2gy1es1te
+2gy1estly2i.
+gyes1t
+gyestl2y
+gyest1lyi
+2gy1estlyid
+2gy1estlyik
+2gy1estlyis
+2gy1estlyit
+2gy1ests
+2gy1es1ti
+2gy1es1t
+gye2s1z
+gyes2z
+2gyete2m.
+gye1te
+2gyetemb
+2gyete1me
+2gyete1m
+2gyetemh
+2gyetem2i.
+gyete1mi
+2gyetemi2g
+2gyetemis1ta
+2gyetemist2k.
+gyetemis1t
+2gyetemist1ka
+2gyetemistkk
+2gyetemistkn
+2gyetemistkr
+2gyetemistn
+2gyetemistt
+2gyetemm
+2gyetemn
+2gyetemr
+2gyetemt
+2gyete1m
+2gy1e2tet
+3gyezsil
+gye1z
+gyez1si
+2gy1ezre1de
+gyez1re
+2gy1ezrel
+2gyez2s
+1gy
+2gybr
+2gy1g
+2gy12hes
+gy1he
+2gy1hs
+2gy12ji
+gy12k2e.
+gy1ke
+gy12kes
+2gy12le
+2gy1lt
+gy1lv
+3gym
+2gyne1ke
+gy1ne
+2gy1ni
+2gy1p
+2gy2r.
+2gy1r1d2
+2gy12rem
+gy1re
+2gy12rez
+gy2rt
+gy1r
+gy1rg
+2gy1rh
+2gy12ri
+3gy1r
+gy1r1ke
+2gy1rm
+2gyrn
+2gyrr
+2gyr1te
+2gy1r1t
+gy1r1t
+2gy1rv
+2gy1rz
+gyrzke2ny1eb
+gy1r1z
+gyrz1ke
+gyrzken2y
+gyrzke1nye
+2gy11t
+2gytk
+2gy12v.
+2gy12vad
+gy1va
+2gy1vb
+2gy12v2e.
+gy1ve
+2gy12ve1i
+2gy12vek
+2gy12ven
+2gy12ves
+2gy12vet
+2gy1vh
+2gy12vi
+2gy1vn
+2gy1vr
+2gy1vt
+2gy12v
+2gy1vv
+gy1fl
+gy1f2r
+gy1gl
+gy1gr
+1gyi
+2gy1i1de
+2gy1i2d
+2gy1i2d
+2gyieken
+gyi1e
+gyie1ke
+2gyie1k
+2gyiekh
+2gyie1ki
+2gy1i2ga
+2gy1i2g
+2gy1i1ge
+2gy1i2g
+2gy1i1ha
+2gy1i2ker
+gyi1ke
+2gy1ill
+2gy1i2m
+2gy1ind
+2gy1inf
+2gy1ing
+2gy1i2pa2r.
+gyi1pa
+2gy1ipa1r
+2gy1i2parb
+2gy1i2parh
+2gy1i2parig
+gyipa1ri
+2gy1i2paril
+2gy1i2parin
+2gy1i2park
+2gy1i2parn
+2gy1i2pa1ro
+2gy1i2parr
+2gy1i2pars2
+2gy1i2par1t
+2gy1i2pa1ru
+2gy1i2rat
+gyi1ra
+2gy1i2r
+2gy1i1ro
+2gy1irt
+2gy1ish
+gy1isk
+2gy1ism
+2gy1isn
+2gy1i1ta
+2gy1i2v
+2gy1izg
+2gy1i2zo
+1gy
+2gy1g
+2gy12r
+2gy1v
+gy1z
+gy1kl
+gy1k2r
+gy1kv
+gyms1s
+gy1m
+1gyo
+2gy1o2kos
+gyo1ko
+2gy1old
+2gy1olvas
+gyol1va
+gyo2m1a2s
+gyo1ma
+gyo2mi
+gyomo2ro
+gyo1mo
+gyo2m1orom
+2gy1o2pe
+2gy1orc
+gy1orm
+2gy1or1s
+2gy1orv
+gy1o1u
+1gy
+2gy12dr
+gy1d
+2gy12dsak
+gyd1sa
+gy12r
+2gy12ri
+1gy
+gy11d
+2gy1kl
+2gy12t2d.
+gy1t
+2gy12tdd
+2gy12t1de
+2gy12t1d
+2gy12td1ne
+2gy12tdt
+gyt1d
+2gy12tdr
+2gy12t1d
+2gy1tt
+2gy1tv
+2gyv
+2gy12zn
+gy1z
+1gy
+gy11re
+gy11r
+2gy12s
+3gyz
+gypr1ba2
+gy1p
+gypen1
+gy1pe
+gy1pl
+gy1pr
+gy1ps
+gyrvid1
+gy1r
+gyr1vi
+gy1sc
+gy1sk
+gy1sl
+gy1sm
+gy1sn
+gy1sp
+gy1sr
+gy1st
+gy2sur
+gy1su
+gy1t2r
+1gyu
+2gy1ud
+2gy1ug
+2gy1uj
+2gy1und
+2gy1u2ni
+2gy1u2ra
+2gy1u2r
+2gy1u2ru
+1gy
+2gyd
+2gy1
+2gy1i
+2gy12j
+2gy1jr
+2gy1js
+2gym
+2gy1rb
+2gy1r
+2gy12ri
+2gy1rk
+2gy1rr
+gy11ti2
+gy1tr
+2gy1
+1gy
+2gy1d
+2gyg
+3gy1le
+3gym
+2gy1nn
+2gy1re
+2gy12r
+2gys
+gy1st
+2gyt
+2gyv
+gy12ve
+2gy1z
+1gy
+3gyl
+2gy12r2.
+gy1r
+3gys1g
+gy1s
+2gy12z
+gyvesztet2t1eb
+gy1ve
+gyves2z
+gyvesz1te
+gyvesztet1te
+gy1zr
+gza2t2p
+g1za
+gza1t
+gza2t1e
+gza2t
+gza2t12
+g3z2r12r
+g1z
+gz1r
+gz2se
+gzs3s
+gze2t1a2
+g1ze
+gze2t12
+gze2t1el
+gze1te
+gze2tin
+gze1ti
+gze2t1o
+gze2t12
+gz1a2
+g1z
+2h.
+1ha
+haa2d
+ha1a
+3ha2b.
+ha2bak
+ha1ba
+h2a2b1a2l
+h2a2b1a2n
+ha2b1g
+ha1b
+ha2b1rb
+ha2bed
+ha1be
+ha2b12r.
+h2abr
+ha1b
+ha2bid
+ha1bi
+hab1ill
+ha2b1im
+ha2b1i2n2a.
+habi1na
+ha2b1int
+3ha1bo
+hab1old
+hab1o2ra
+hab1orr
+ha2b1ost
+hab1s2z2
+habu2r
+ha1bu
+ha2b
+ha2d1ag
+ha1da
+had1alk
+ha2d1ap
+hada2s
+ha2d1as2z
+ha2d12c
+ha1d
+ha2d1l
+hads1s
+ha2d1sv
+ha2d12s1zo
+hads2z
+ha2de2g
+ha1de
+ha2d1el
+ha2dem
+ha2dl
+ha1d
+h2adi1a2
+ha1di
+hadi12
+h2adi2n
+ha2d1i1na
+ha2d1or
+ha1do
+ha2dos
+ha2d1u2r
+ha1du
+ha2d12r.
+ha1d
+ha2d12r
+ha2d1rh
+ha2d12ri
+ha2d1rk
+ha2d1rn
+ha2d1rr
+ha2d1rt
+ha2ds
+ha2d
+ha2d1za
+had2z
+ha2d3z
+hae2r
+ha1e
+ha2p
+ha1
+ha1fl
+ha1f2r
+ha2j12s
+ha1j
+ha2j12to
+ha2j2z
+ha2j1in
+ha1ji
+haj1k2
+haj1oml
+ha1jo
+ha2j
+ha2j
+haj1s
+haj1t2r
+ha2j
+ha2k1l
+ha1k
+hak2s3zen
+h2aks
+ha1k
+haks2z
+hak1s1ze
+ha1k2li
+ha1k2r
+h1akt
+ha1k2v
+ha2l1ac2h
+ha1la
+ha2l1a2g
+ha2l1aj
+ha2l1a2l
+hala2n
+ha2l1an2y
+ha2l1a2r
+hala2s2z
+ha2l1a1s1za
+ha2l1a1s1z
+ha2l1a1s1z
+ha2l1at1k2
+ha2l1a2tom
+hala1to
+ha2l1att
+3ha1l
+hal12c2s
+ha2l12g
+hal2l1e2
+ha2l12rak
+hal1ra
+ha2l12r
+ha2l1rb
+ha2l12ro
+ha2l1rr
+hal1r1ve
+ha2l11te
+h2a2leb
+ha1le
+h2a2lec
+hal1e2g2y
+hale2l
+ha1l1e1le
+hal1e1l
+h2a2lem
+h2a2l1en
+hal1e1pe
+h2alep
+ha2l1e1se
+h2ales
+ha2l1e2s
+hal1e1te
+hal1e2to
+hal1e1vo
+h2alev
+hal1e2v
+ha2lez
+ha2l12l
+ha1l
+ha2l12r.
+ha2l11te
+h2alt
+ha2l1tk
+ha2l1tt
+ha2lid
+ha1li
+h2a2l1ik
+h2a2l1i2m
+ha2l1ing
+ha2l1inv
+ha2l1i2o1no
+hali1o
+ha2l1i2ont
+ha2lip
+hali2s
+hal1is2z
+ha2l1iv
+ha2l1i2z
+ha2l
+hal2k1a2pu
+hal1ka
+halke2l1
+hal1ke
+hal2k1e1le2
+hal2l1aszt
+hal1la
+hallas2z
+hallsks2z1
+hal1l
+halls1k
+halls1s
+hal2l12t
+hal2lj
+hal1l
+hal2l1so
+hal1l
+hal3l2y
+3halm
+halma2z12
+hal1ma
+ha2l1ol
+ha1lo
+ha2l12ri
+ha1l
+ha2l1
+ha2l12
+hal1p2
+ha2l1ug
+ha1lu
+ha2l1u2s
+ha2l1u2t
+ha2l
+ha2l
+ha2l3ya
+hal2y
+ha2m1l
+ha1m
+ha2m1rb
+ham1b
+hame2l
+ha1me
+ham1e1le
+ham1es2z
+ha2mez
+ham1ism
+ha1mi
+hamks2z1
+ham1k
+ha2m1os2z
+h2amos
+ha1mo
+ha2m
+hans1s
+ha1n
+han2c2h
+2hans2z
+ha1n
+3hang
+han1ge2
+han2gen
+han2g1es
+han2gl
+han1g
+hang3g
+han2g12
+han2g
+han2gut
+han1gu
+han2t12
+ha2nyl
+han2y
+ha1ny
+ha2r
+ha1
+ha1p2r
+hara2g12
+h2arag
+ha1ra
+harang1g
+ha2r1l
+ha1r
+har2c1al
+har1ca
+har2ca2n
+harc3c
+har2c1e2
+har2c3h
+ha2rel
+ha1re
+ha2ret
+3harm
+ha2r1ol
+ha1ro
+ha2r1os2z
+ha2r1r
+ha1r
+ha2r
+3ha1sa
+hasg1g
+ha1s
+ha2s1iz
+ha1si
+ha2s1ol
+ha1so
+has1ors
+h2asor
+ha1s2pe
+ha1s2po
+ha3s2
+ha2sr
+ha1s
+ha1szp
+has2z
+h2a2t1ab
+ha1ta
+hat1ag2y
+h2atag
+ha2t1aj
+3ha1t
+hatra2d
+h2atr
+hat1ra
+hat2r1a1da
+ha2t1e2v
+ha1te
+ha2t1n
+ha1t
+ha2t12v
+ha2t12v
+ha1t
+hat1ol1da
+ha1to
+ha2t1os2z
+ha2t11r
+ha1t
+ha2t12v
+ha1t
+ha1t2r
+hatt2
+hat1tr
+ha2tl
+ha1t
+hau2n
+ha1u
+hau2s
+ha2ut
+ha2z
+ha1
+1h
+3h1bo
+h2g2y
+h2js
+h1j
+h1ma2
+h2m1al
+h2m1
+h2m1e2
+h1mi2
+h2m1is
+h2m1ol
+h1mo
+h2m
+hn2c1s1e
+hnc2s
+hn2c1si
+h2ny1a2l
+hn2y
+h1nya
+hnya2n
+h2ny1ar
+hnys1s
+h1ny
+h2ny1e2
+h2ny
+h1ra2
+h2r1ad
+h2r1al
+h2r1a1u
+h1ri2
+h2r1iv
+3h1r
+hr1k2
+hrmas1s
+hr1ma
+hro2m1a2
+h1ro
+hro2mo
+hr2s1al
+hr1sa
+hr2se
+3hrt
+h2r
+h1ry
+h2s
+hsz1a2tom
+hs2z
+h1s1za
+hsza1to
+h2s1z1e
+h2sziv
+h1s1zi
+2h1szk2a.
+hsz1k2
+hsz1ka
+h2s1z
+h2t1a2d
+h1ta
+h2t1a2la
+h2t1a2n
+h2tar
+h2t2p
+h1t
+h2t1e2
+h1t2
+h2t12l
+h2t12r.
+h2t11re
+h2t1rn
+h2t1i2s
+h1ti
+h2t
+h2t1ol
+h1to
+h2t1o2r
+h1t2
+h2t1s
+h2t
+h2t
+ht1u2s2z
+h1tu
+h2t1
+h2t
+htv2d1el
+ht1v
+htv1de
+h2z1a2d
+h1za
+h2zaj
+h2z1a1la
+h2z1as2z
+h2z1av
+h2z12p
+h1z
+h2z1rn
+h2z12ru
+h2z1e2
+h2z1isk
+h1zi
+h2z1ism
+h2z1ist2
+h2z1
+hz1okt
+h1zo
+hz1old
+h2zos
+hz1otth
+h2z
+h2z
+hz2s2
+h2z3sa
+h2z3se
+h2z3s
+h2z3si
+hz3sp
+hz3st
+h2z3s
+hz3s2z
+h2z1
+hb2le
+1he
+hec2c1emb
+hec1ce
+hec2c3s
+he2dn
+he1d
+3hedr
+he2f1i
+he2f1u2
+he2g1a2
+he2gs2z1
+he1g
+he2gy1a
+heg2y
+he2gy
+he2gyeg
+he1gye
+hegyes1s
+he2gy1o
+he2gy
+he2gy
+hegys2g1e1k
+hegy1s
+hegy3sgek
+hegys1ge
+he2gy
+he2ideg
+he1i
+hei1de
+2h1e2kk
+he1k
+he2lg
+he1l
+hels1s
+2helf
+hel2f2r
+2hel1l
+2hellen
+hel1le
+hel1e2
+he1l
+he2lyeg
+hel2y
+he1lye
+he2lyeml
+he2lyes2z
+he2ly12j
+he1ly
+2h1embl
+2h1eml
+3hemr
+hens1s
+he1n
+3heng
+he2ny1e2g2e.
+hen2y
+he1nye
+henye1ge
+he2nyo
+he2ol
+he1o
+he2rab
+he1ra
+he2r1a2d
+he2r1aj
+he2r1a2r
+he2ra1u
+her1ll
+he1r
+her11t1a2
+her11t
+her1eng
+he1re
+here1p2
+her1e1se
+herevz1
+here1v
+her1int2
+he1ri
+he2r
+her1s2
+he2rut
+he1ru
+he2r
+he2s1a
+he2s1
+h1e2ss
+he1s
+3het2y
+2heu1s1zi
+he1u
+heus2z
+2he1v
+he2vs
+he2z1
+2hezh
+2he1zi
+2hezn
+2he1z
+2hezz
+1h
+1h2h
+3h2i.
+h1i
+3hit
+h1je2
+h2j1eg
+h2j1el
+h2j
+3hkn
+h2nal
+h1na
+h2nan
+h2nar
+h2nt
+h1n
+h1ne2
+h2n1el
+h2nem
+h2n1et
+hn12v.
+h1n
+h2nid
+h1ni
+h2nil
+h2n1is
+hn3n
+h2n
+hnt2
+h2nu
+h2n
+h1ph
+h2p
+h1ra2
+h2rar
+h2r1as
+h2rat
+h2rin
+h1ri
+2h1rz
+h22s1z
+hs2z
+h2szeg
+h1s1ze
+h2s2zes2z
+h22s1z1
+h1ta2
+h2t1ab
+h2t1aj
+h2tal
+h2tar
+h2tl
+h1t
+h2t1e2l
+h1te
+h2t1e2m
+h2t1es
+h2t1ezred
+htez1re
+h2t1ezres
+h2t12v
+h1t
+h2t
+h2t1o2l
+h1to
+h2tor
+h2t1os
+h1t2
+h2t1r
+h2t1
+h2tu
+h2t12
+h2v1
+h2v2e.
+h1ve
+h2vg
+h1v
+h2v1rz
+h1ze2
+h2z1ek
+h2zip
+h1zi
+h1zo2
+h2z3s
+hf2l
+1hi
+hi2a1a
+hi1a
+hi2a1
+hi2abeli1e
+hia1be
+hiabe1li
+hi2ac
+hi2ad
+hi2a1e
+hi2a1
+hi2ag
+hi2ah
+hi2aj
+hi2al
+hi2am
+hi2ap
+hi2ar
+hi2at
+3hi1da
+3hie1ke
+hi1e
+2hiv
+hi1
+hig2a2nye2
+hi1ga
+higan2y
+3hi1gi
+2hi1la
+2hi2m.
+2hi1me
+2himds2z
+hi1m
+him1d
+2h1i2nn
+hi1n
+3hins
+2hing
+h1in2g.
+2hink
+h1insp
+hi2pa
+2h1ips
+2hi1se
+2hisn
+2hi1so
+hi2ta
+hit1ak
+hita2l
+hit1a2n
+hi2t12
+hi2t1e2g2y
+hi1te
+3hitel
+hite2l1e2g
+hite1le
+hite2l1e2l
+hi2t1e2le1s
+hi2t1e1l
+hi2t1elv2e.
+hitel1ve
+hi2t1eng
+hi2t1er
+hi2t1es2z
+3hitet
+hi2tl
+hi1t
+hi2t12r.
+hi2t1r1te
+hi2t1rv
+hi2t12te
+hi2t12v2e.
+hit1ve
+hi2t1im
+hi1ti
+hi2t1int
+hit1is2z
+hitks2z1
+hit1k
+hi2t1o
+hi1t2
+hi2t1n
+hi2t1r
+hi1t2
+hi2t1r
+hi2t1r
+hi1t
+hi2t1u2
+hi2t
+hi2tl
+hi1t
+hi2zo
+1h
+h2da
+h2d
+h2de
+h2d
+h2d
+h2d
+h2d
+h2d
+h2d2z
+h2g1e
+h2j
+h2m1a2
+h2m
+h2m1el
+h1me
+h2m1emb
+h2mer
+h2mo
+h2m
+h2mu
+h2r1a2
+h2r12
+h2r1e2g
+h1re
+h2r1ing
+h1ri
+h2r
+h2r1o
+h2r12
+h2r
+hr1s
+h2r1u
+h2r
+hkas3s
+h1ka
+hk2r
+h1k
+hk2ri
+hle2g1e2l
+h1le
+hle1ge
+hle2t1el
+hle1te
+hle2t
+1ho
+ho2d
+ho2i1i
+ho1i
+ho2it
+2hokl
+ho1la2
+ho2l1a1d2
+ho2l1al
+ho2lam
+ho2l1at
+ho2l1a1u
+ho2l1l
+ho1l
+ho2l12r
+hol2d
+hol2d12r
+hol1d
+ho2l1e2
+ho2lig
+ho1li
+ho2l1in
+ho2lip
+ho2l1i2v
+hol1k2
+hol2mes
+hol1me
+hol2nik
+hol1ni
+ho2lor
+ho1lo
+ho2l1os2z
+ho2lot
+ho2l12r
+ho1l
+ho2l
+hols2
+hol1st
+holta2n
+hol1ta
+holt1an2y
+ho2l
+ho2ly1al
+hol2y
+ho1lya
+ho2lye2
+3homb
+3ho1mo
+homo1s
+ho2n1a2g
+ho1na
+ho2n1a2l
+ho2n1a2n
+ho2n1a2p
+ho2n1a1u
+ho2n1a2v
+ho2n1l
+ho1n
+ho2n11t1a2
+ho2n12to
+ho1ne2
+ho2neg
+ho2n1e2l
+ho2n1ik
+ho1ni
+ho2n1i2m
+ho2n
+ho2n1orj
+ho1no
+ho2n1o2ro
+ho2n1orr
+ho2n12
+ho2n
+ho2n
+ho2n
+honv2d1elm1
+hon1v
+honv1de
+honvdel1m
+honv2d1elmr
+2h1ors
+2ho1ry
+hos1s1z1e2
+hos2s2z
+hos1s1z2
+hossz1k
+hos1s1z12
+2hos2z
+ho2us
+ho1u
+ho2we
+ho2zl
+ho1z
+ho2z1e
+ho1zi2
+ho2z
+1h
+ha2k
+h1a
+h2g
+h1
+h1b2l
+h2cal
+h1ca
+h2cat
+hc3c
+h2ce2l
+h1ce
+h2c12g
+h1c
+h2c3h
+h2ci2m
+h1ci
+h2c
+h2c1
+h2c1s
+hc2s
+h2c2z
+h2d1a2r2a.
+h1da
+hda1ra
+h22d1a2r
+h2d12
+h2dem
+h1de
+h2d1eszkb
+hdes2z
+hdesz1k
+h2d1
+h2d12
+h2d
+h2d
+h2d3z
+h2l1ej
+h1le
+h2l1e2ped
+hle1pe
+h2l1e2vet
+hle1ve
+h2nal
+h1na
+hn1a1pa
+h2nap
+2h1r
+h2rr
+h1sh
+h1v2
+hza2t1e
+h1za
+1h
+hl2gya
+hlg2y
+hl2gy12
+hl2gyel
+hl1gye
+1h
+ha2n
+h1a
+h1br
+he2l
+h1e
+he2m
+he2r
+h2n
+h1
+h1fl
+h1gl
+h1gr
+h1kv
+h1pr
+h1sa2
+h2s1al
+h2sas
+h2s1av
+h2s1el
+h1se
+h2se2p
+h2ses
+h2sim
+h1si
+h2sis
+h1s2pi
+hs3s
+h1s2tab
+hs1ta
+hs1t2r
+h2s1u2gar2a.
+h1su
+hsu1ga
+hsuga1ra
+h2s1u2gara1i
+h2su2t
+h2s1
+h2s1lt
+h1s
+h2s12v
+h1s2
+h2s1r
+h1tr
+h2l
+h1
+hp2la
+hp2ra
+hp2r
+hp2ri
+hp2ro
+hp2r
+hs2c2h
+hs2gel
+h1s
+hs1ge
+hs2ka
+hs2pi
+hs2po
+hs1s2t
+hsza2k
+hs2z
+h1s1za
+hsz2j1a2da
+h1s1z
+hsz1ja
+hsz2l
+ht1cl
+hten1s2
+h1te
+ht1kl
+h2t1ol
+h1to
+ht2r
+h1tref
+ht1re
+h2t1u2t
+h1tu
+1hu
+2hu1r
+hur2t1e
+hur2ti2t
+hur1ti
+2hu1si
+huszon1
+hus2z
+hu1s1zo
+1h
+h2gy1a2
+hg2y
+h2gye
+h2gyi2
+h2gy
+h2r1a2
+h2r1
+h2re
+h1ri2
+hrt2
+hr1tr
+h2s1ak
+h1sa
+h2sal
+h2sa2n
+h2sap
+h2sa2r
+h2s12g
+h1s
+h2s1l
+h2s1e2
+h2sim
+h1si
+h2s
+h2sor
+h1so
+h2s
+h2s
+hs3sza2k1
+hs2s2z
+hs1s1za
+hs3s1z
+hs3s1z
+h2s
+h2s3zab
+hs2z
+h1s1za
+h2sz1l
+h1s1z
+h21s1ze2
+h2szeg
+h2sz1el
+h2sz1em
+h22s1z12
+h2szol
+h1s1zo
+h2szos
+h2s1z12
+h22s1z12
+1h
+h2g2y
+2h1nn
+h2re
+h2r
+h2t
+h12v
+1h
+h2r
+h2ri
+h2r
+hy1v
+hy1ig
+2i.
+i1a
+iaa2d
+ia1a
+iat1
+ia1
+ia2ta2
+i2abaj
+ia1ba
+i2aber
+ia1be
+i2abes
+i2a1b
+i2abon
+ia1bo
+i2abor
+i2a1b
+i2a1b
+i2a1bu
+i2a1b
+i2a1b
+i2a1b
+ia2c1al
+ia1ca
+iac3c
+i2acet
+ia1ce
+ia2c11l
+ia1c
+ia2c12r.
+ia2c3h
+ia2cid
+ia1ci
+iac1i2ko
+ia2c1im
+ia2c1int
+i2a1c
+ia2c1or
+ia1co
+ia2c
+ia2c
+ia2c
+ia2c3s
+iac2s
+iac3s2p
+iac3st
+iac3s2z
+ia2c
+ia2c2z
+iads1s
+ia1d
+i2a1de
+i2a1d
+ia2dot
+ia1do
+iad1st
+ia1d
+i2a1d
+i2a1d
+i2a1d
+iae2l
+ia1e
+iae2r
+iae2t
+ia2p
+ia1
+ia2r
+i2a1f
+i2a1fe
+i2a1fi
+i2a1fl
+i2a1f
+i2a1f
+i2a1f
+i2af1ri
+i2a1f1ro
+i2a1fu
+i2a1f
+i2a1f
+i2a1f
+i2a1g
+i2a1ge
+i2a1g
+i2a1gi
+i2a1g
+i2a1g
+i2a1gu
+ia2gyu
+iag2y
+i2aig
+ia1i
+i2aip
+i2ai2z
+ia2jn
+ia1j
+i2a1je
+i2a1jo
+ia2kad
+ia1ka
+i2a1k
+i2a1ke
+i2a1k
+i2a1k2l
+i2akd
+ia1k
+i2akr
+i2a1k
+i2a1k
+i2a1k2re
+i2a1k2r
+i2a1k1r
+i2a1ku
+i2a1k
+i2a1k
+i2a1kv
+ia3lan
+ia1la
+ia2lat
+i2aleg
+ia1le
+i2alib
+ia1li
+i2a1l
+ia2lom
+ia1lo
+i2a1l
+ia2lud
+ia1lu
+ia2lus
+i2al2y
+i2a1m
+i2a1me
+i2a1m
+ia2m1ur
+ia1mu
+i2a1m
+i2a1m
+ia2nek
+ia1ne
+i2a1n
+i2a1n
+i2a1n
+iao2k
+ia1o
+ia2r
+ia1
+ia2pt
+ia1p
+i2a1pe
+i2a1p
+ia1p2l
+i2a1po
+ia1p2s
+iar1di2
+ia1r
+i2a1re
+ia2rn
+ia1r
+i2a1ro
+i2a1r
+i2a1r
+i2a1ru
+i2a1r
+i2a1se
+i2a1si
+i2a1s2k
+i2a1s2l
+i2a1s2m
+i2a1s
+i2a1s
+i2a1s2p
+iast2
+i2a1s2ta
+i2a1s2t
+i2a1s1ti
+i2a1s1to
+i2a1str
+i2a1s
+i2a1s
+i2a1s
+ia2sz1an
+ias2z
+ia1s1za
+i3as2ze1r
+ia1s1ze
+ia2sze2s
+ia2szp
+ia1s1z
+iasz2k1e2r
+iasz1ke
+ia2szop
+ia1s1zo
+i2a1s1z
+i2a1te
+i2a1t
+i2a1t
+i2a1t
+i2a1t1r
+ia2t2y
+i2aud
+ia1u
+i2au2r
+iau2s
+ia2z
+ia1
+ia2vat
+ia1va
+i2a1v
+i2a1vi
+i2a1v
+i2a1vo
+i2a1z
+i2a1ze
+ia2zo
+i2az2s
+i2a1z
+i1
+i2c2s
+i2ga
+i2g
+i2ge
+i2gi
+i2go
+i2g2y
+i2h
+i1ka2
+i2kab
+i2kak
+i2k1al
+i2k1an
+i2k1ap
+i2k1ar
+i2k1as
+i2k12
+i2keb
+i1ke
+i2k1el
+i2kem
+i2k1en
+i2k1e2s
+i2k12r.
+i1k
+i2k1rd
+i2ks
+i1ki2
+i2kin
+i2kir
+i2ki2t
+i2k
+i2kop
+i1ko
+i2k1or
+i2k1os2z
+i2k12
+i2k1
+i2k
+i2ku2r
+i1ku
+i2k1ut
+i2k12
+i2k1
+i2k
+i1la2
+il1a1na
+i2ll
+i1l
+i2l1r
+i2l1e2
+i2l1in
+i1li
+i2lop
+i1lo
+i2nar
+i1na
+i2n1as
+i2nem
+i1ne
+i2nir
+i1ni
+i2nis
+i2n
+int2
+in1tr
+i2n
+i2ny1ad
+in2y
+i1nya
+i2ny1a2l
+i2nyan
+i2nyar
+i2ny1e2
+i2nyrz
+i1ny
+i2ny
+i21i
+i1
+i2po
+i2rad
+i1ra
+i2rak
+i2ram
+ir2das
+ir1da
+ir2d1e
+ir2d3z
+i2re
+i2rim
+i1ri
+ir1s2
+i2ru
+i3run
+i2r
+i2sal
+i1sa
+i2sar
+i2s1as
+i2s12g
+i1s
+i2s1m
+i2ss
+i2s1e2
+i2sikr
+i1si
+i2s
+i2sor
+i1so
+i2s
+i2s
+i2s
+is3s1zi
+is2s2z2
+is3s1zo
+ist2
+is1tr
+i2s12
+i2s
+is1v2
+i2szs
+is2z
+i1s1z
+i2s3ze
+is3z2s
+i2ta
+i2t1e2l
+i1te
+i1ti2
+i2t1ir
+iba1d2
+i1ba
+iba1k2
+ibas2
+ibat2
+iba1u2
+iba12
+ib2l1a
+i1b
+ibe2lr
+i1be
+ibe1l
+ibe2r1in
+ibe1ri
+ibe1s
+ibi2o
+i1bi
+ib2lo
+ib2r
+ib2ru
+ica1f2
+i1ca
+ica1g2
+ica1kl
+ica1k2r
+ica2los
+ica1lo
+ica1pr
+ica1t2
+ic2can
+ic1ca
+ic2c12
+ic2c3h
+ic2cin
+ic1ci
+ic2cir
+ic2c
+ic2c1o
+ic2c1
+iccse2l
+ic2c2s
+ic1c1se
+iccs1ol
+ic1c1so
+ic1c1s12
+ic2c
+ic2c2z
+i2c3ha
+ic2h
+i2chi1n
+i1c1hi
+i2c3hiv
+ic3hoz
+i1c1ho
+i2c3h
+ici2t1a2
+i1ci
+ici2t2r
+ici1t
+ici2tel
+ici1te
+ici2ter
+i1c2lu
+i2c1ol
+i1co
+i2cs1a2d
+ic2s
+i1c1sa
+ics1a2la
+icsa2p12g
+icsa1p
+i2cs1a1u
+i2cs1g
+i1c1s
+ics1ll
+i2cs1eb
+i1c1se
+i2cs1e2g
+icse2t
+i2cs1e1te
+i2cs1ev
+i2cs12g
+i1c1s
+i2cs12r2.
+ics1r
+ics1i1pa
+i1c1si
+ics1s
+i2c2s1to
+i1c1s
+i2cs1l
+i1c1s
+i2cs12t
+ic3s1ze
+ics2z
+ic1s3z
+ic1z
+i1c
+i2d1a2j
+i1da
+id1a1na
+id1a2n2y
+i2d1a2u
+id1ll
+i1d
+id11ru
+i2d1sv
+id1br
+1id1do
+id3d2z
+ide2av
+i1de
+ide1a
+ide2g1
+ide2g1l
+ide1g
+ide2g12r.
+1i2dej
+ide1k2v
+id1elj
+id1elm
+id1e1lo
+id1elt
+i2d1emb
+ide1p2
+ide2red
+ide1re
+i2de1ro
+i2de3s1a2
+ide1u2
+i2d12g
+i1d
+id2ke2l
+id1ke
+i2dn2y
+idr2c3s
+2ids2z
+1i2dz
+id2ge
+1i2dil
+i1di
+i2d1i2onj
+idi1o
+i2d1i2onn
+i2d1i2o1no
+i2d1i2onr
+i2diot
+idi2d
+idi1
+i2d1i1ta
+idja2d
+i1d
+id1ja
+id2j1a1da
+id1kr
+id1old
+i1do
+i2d1olv
+ido2mac
+ido1ma
+ido2m1an
+i2do1m
+1i2do1mo
+1i2do1m
+id1s
+i1d
+1i2d2.
+i1d
+1i2db
+1i2dd
+1i2d1
+1i2dh
+1i2d1i
+1i2dk
+1i2dm
+i2d1ne
+i2d1n
+i2dnk
+1i2dp
+1i2dr
+1i2ds
+id2so2d
+id1so
+id2s1or1ra
+id1s2p
+id1s2
+id2s11l
+id2s1lt
+1i2dt
+id2tl
+id1t
+1i2dv
+i2dz
+id1pr
+id2rt
+id1r
+i1d2ru
+id1st
+id1t2r
+id1u2t
+i1du
+id1g
+i1d
+i2d1z
+i2d3z
+id2z
+i2d3ze
+i2d3z
+i2d1z1s1a
+idz2s
+i2d1z1s1
+i2dzsen
+i1d1z1se
+i2d2zsl
+i1d1z1s
+i2d1z1s12
+i1e
+ie2be
+ie2c2s
+ie2d2z
+ie2f1a2
+ie2f
+ie2f1i
+ie2f12
+ie2g
+ie2g2y
+ie2he
+i2eld
+ie2lo
+ie2l1a
+ie1l
+ie2ma
+iembe2r1e2k
+iem1be
+iembe1re
+ien2s
+ien2s1o
+iens3s
+ie2n2y
+ie2pe
+ie2r1a2d
+ie1ra
+ie2rag
+ie2r1aj
+ie2r1a2k
+ie2ral
+ie2ram
+ie2r1an
+ie2ras
+ie2r1
+ier1d2
+ie2reg
+ie1re
+ier1eg2y
+ie2r1el
+ie2r1ember
+ierem1be
+ie2r1est
+ie1ri2
+ie2r1i2ga
+ie2r1in
+ie2r1is1te
+ie2r
+ie2r1ol
+ie1ro
+ie2ror
+ie2r
+ie2r
+iers2z2
+iert2
+ier1tr
+ie2r1u2
+ie2r1
+ie2r12g
+ie1r
+ie2sel
+ie1se
+ie2sem
+ies1er
+ie2sett
+ie2ss
+ie1s
+ie2sik
+ie1si
+ie2s
+ie2s2z
+iet1s2z2
+ie1t
+ietz1
+ie2ur
+ie1u
+ie2ve
+ie2v
+ie2vi
+ie2v
+i1
+i21do
+i21fe
+i2ge
+i2g
+i2g
+i2g
+i21ha
+i2hes
+i1he
+i21hi
+i2il
+i1i
+i2le
+i2l
+i2li
+i2l
+i21me
+i21m
+i21mo
+i2ne1ke
+i1ne
+i2nekh
+i2nek1k2
+i2ne1k
+i2p
+i2p
+i2rek
+i1re
+i2re2n
+i2rez
+i2r
+i2ri
+i2r2.
+i1r
+i2rk
+i2rt
+i2r
+i21s1zi
+is2z
+ita1s
+i1ta
+i2tel
+i1te
+i21t
+i2v2e.
+i1ve
+i2vek
+ifa1st
+i1fa
+ifa1t2
+ifa1u2
+ifeny2h
+i1fe
+ifen2y
+ife1ny
+ifeny1
+ifi1o2
+i1fi
+if1r
+i1f
+1if1j
+1if1ju
+1ifj2.
+if1j
+1ifjb
+1ifj1
+1ifj1i
+1ifj1k
+1ifjn
+1ifjr
+1ifjs
+1ifjt
+1ifjv
+i1f2la
+if2lo
+if2l
+ifo1go2
+i1fo
+ifon1n
+i1f2ri
+i1f2ro
+i1f2r
+if2ru
+if2t1a
+if2t12
+if2t1e2l
+if1te
+if2tin
+if1ti
+if2t
+if2t
+ig1a2git
+i1ga
+iga1gi
+igaher1t2ze1se
+iga1he
+igahert1ze
+igaher1t2zes1n
+igaher1t2zess
+ig1a2ka
+ig1als
+ig1alv
+ig1an1d2
+iga2nyal
+igan2y
+iga1nya
+ig2a1nye2
+iga2ny1es
+iga2ras
+iga1ra
+1i2garz
+iga1sl
+iga2szag
+igas2z
+iga1s1za
+igasz1al
+igau2r
+iga1u
+1i2ga2z.
+1iga1z
+ig12c2s
+i1g
+ig1lm
+ig1sh
+i3gs2z
+ig12t1e2
+ig1br
+ig1d2r
+ig1ed2z
+i1ge
+i2geg
+igek2
+ige1kl
+ig1e2le
+ig1ell
+igel1le2
+ig1elm
+1i2genl
+ige2r
+ig1e2r
+ig1e2se
+ig1e1si
+ige2tl
+ige1t
+ige2teg
+ige1te
+ige2t2l
+ige1t
+ige2t1o
+ige2tr
+ige1t
+ig1e1vi
+i2g1ex
+1i2gd
+i1g
+ig12g
+ig12li
+ig12l
+ig12l
+ig1lv
+i2gm
+ig2na2
+ig2n2
+ig1ni2
+i3g1pe
+ig2p12s1zi
+ig1p
+igps2z
+ig2p1sz1t
+ig2p12s1z
+ig12p
+ig12r.
+ig1rj
+i2g1rl
+ig1rn
+ig12r
+ig1rv
+ig1s2z
+1i2g1
+ig1fl
+ig1g2r
+ig1v
+i1g
+ig1z
+ig1kl
+ig1kr
+ig2na2d
+ig1na
+ig2n1e2g
+ig1ne
+ig2n1e2r
+ig2n1os2z
+ig1no
+ig2n
+ig2n
+igo2rl
+i1go
+igo1r
+ig1o2s
+ig12
+i1g
+ig1b
+i1g
+ig12k
+ig1l
+ig12z
+ig1pr
+ig1sk
+ig1sl
+ig1sm
+ig1sp
+ig1st
+ig1s2z
+ig1tr
+ig1ug
+i1gu
+igu2n
+igu2t
+ig1s
+i1g
+ig1c
+i1g
+ig1d
+ig12g
+ig2l
+ig1t
+ig1v
+ig1z
+i1g
+i2gy2a.
+ig2y
+i1gya
+i2gyam
+i2gyk
+i1gy
+i2gyl
+i2gy1eg
+i1gye
+i2gy1e2kh
+igye1k
+igyelks2z1
+igye1l
+igyel1k
+i2gy1kt
+i1gy
+i2gy12r.
+i2gy1rt
+iha2re
+i1ha
+i1i
+ii2de
+ii2d
+ii2d
+ii2ga
+ii2g
+ii2g
+ii2g2y
+ii2ha
+ii2je
+ii2m
+ii2mi
+ii2pa
+ii2ram
+ii1ra
+ii2rat
+ii2r
+ii2ro
+ii2s2z
+ii2ta
+ii2v
+ii2vo
+ii2v
+ii2z
+ii2zo
+i1
+i2g
+i2ra
+i2r
+i2ro
+i2r
+i2ru
+i2t
+i2ve
+i2ze
+1i2jed
+i1je
+ije2gy12
+ijeg2y
+1i2jes
+ik2abe2j1
+i1ka
+ika1be
+ikabe1j2
+i2k1abl
+ik1ajt
+ika2lak
+ika1la
+i2k1ang
+ika12
+ika1p2l
+ika1p2r
+ika2r2r
+ika1r
+ikar11r
+ikas2
+ika1sp
+ika1t2r
+i2k1rk
+i1k
+i2k11ru
+iks1s
+ik2tol
+ik1to
+ik1dr
+ik1e1b
+i1ke
+i2k1eg
+ik1e1lo
+ik1eng
+ike2r1a2
+ike2r12
+ike2r1e2d2z
+ike1re
+ike2r1el
+ike2r1ev
+ike2ris
+ike1ri
+ike2r1o
+ik1e2r
+ike2ru
+ike2t1lt
+ike1t
+ik1e1vo
+i2k2kekk
+i1k
+ik1ke
+ik2p1e2r
+ik1pe
+i2k12p
+i2k11p
+i2k1rz
+ik1fr
+i2k1id
+i1ki
+ik1i2ko
+ik1ikr
+i2k1ind
+i2k1ins
+i2k1int
+i2k1i2o
+ik1isk
+ikka2l
+ik1ka
+ik2k1a1la
+ikk1an2y
+ik2k1a2r
+ikk11ra
+ik1k
+ik2kz
+ik2kev
+ik1ke
+ikk1r1de
+ik1k
+ik2kin
+ik1ki
+ik2k1i2p
+ik2k1ol
+ik1ko
+ik2k1
+ik2k1s
+ik1k
+ik2kt
+ik2k12z
+ik2k1u2
+ik2kz
+ik1k
+ikla1tr
+ik1la
+ik2ler
+ik1le
+i1k2lub
+ik1lu
+ik2lum
+i1knd
+ik1n
+iko1ma2
+i1ko
+iko2m1ar
+ik1p
+i1k
+ik12r
+ik22s3z
+iks2z
+ik2re2s
+i1k
+ik1re
+ik1pl
+ik1pr
+1ikre1i
+ik1re
+1ikrek
+ik2rm
+ik1r
+i1k2ri1ti
+ik1ri
+ikro1s2z2
+ik1ro
+i1k2ru
+ik1st
+iksz2t2
+iks2z
+iktusks2z1
+ik1tu
+iktus1k
+iktus1s
+iktu2s2z
+ik1udv
+i1ku
+iku2sav
+iku1sa
+ik12v
+i1k
+i2l1abr
+i1la
+il1a2ce
+il1a2c
+il1a2d
+i2l1ajk
+i1l1a2la
+il1alj
+i2l1alk
+il1amb
+ila2n
+i2l1a1na
+i2l1an2y
+ila2pin
+ila1pi
+ila2pol
+ila1po
+i2l1a2r
+il2g1e2
+i1l
+ilg3g
+il2g
+ilny1f2
+iln2y
+i2l12p
+i2l1rn
+il12ro
+il11ru
+il12r
+il2s2z
+i2l11s1zo
+il1tf
+il1tm
+il1tr
+il1bl
+il2c1a2
+ilc3c
+il2c2h
+il2c3sap
+ilc2s
+il1c1sa
+il2c3sik
+il1c1si
+ilc3s2z
+il2c2z
+il1e2lem
+i1le
+ile1le
+i2l1emb
+i2l1eml
+il1e2r
+il1exp
+il2n12
+i1l
+i2l12nekh
+il1ne
+i2l12nekn
+il1s2p
+il1f2l
+il1fr
+il1g2r
+i2l1icc
+i1li
+ili2d
+il1i1de
+i2l1i1do
+i2l1igh
+ili1g
+i2l1igj
+i2l1igs
+i2l1igt
+i2l1i2ko
+i2l1ill
+i2li2m2a.
+ili1ma
+il1i2mi
+il1imp
+ilin1n
+ili2p1
+il1i1r
+il1k2l
+il1k2r
+illa2g12
+il1la
+1illatb
+1illatr
+1illatt
+il2l1es1te
+il1le
+il2l1es1t
+1ill1s
+il1l
+ill2t
+ill11te
+ill1tt
+il2l1id
+il1li
+il2l1
+1il1lu
+1il1l
+ilm1a1da
+il1ma
+il2m1ag2y
+il2m1aj
+ilm1a1ka
+il2m1a2l
+ilm1ank
+ilm1an2y
+il2m1ap
+il2m1arc
+ilm1atl
+il2m1a2z
+il2m12l
+il1m
+ilme2g
+il1me
+il2m1e1g
+ilme2g1o
+il2m1eg2y
+il2m1e2l
+il2m1ep
+il2m1e2r
+il2m1es2z
+il2m12j
+il1m
+il2m1k
+ilm2l
+il2m11le
+il2m12r.
+il2m1rd
+ilm12rst
+ilm1r
+il2mr1te
+il2m1r1t
+il2m1s
+il2mid
+il1mi
+il2m1i2k
+il2mim
+il2mir
+il2m1is
+il2miz
+il2m12
+il2m1ok
+il1mo
+il2mol
+il2m1or
+ilm1os2z
+il2m12r
+il1m
+il2m
+il2m
+il1mu2
+il2m1ut
+ilo1g2
+i1lo
+il1old
+i2l1or
+ilt2
+i1l
+il1tr
+il1b
+i1l
+il1s
+il1p2l
+il1p2r
+il1sp
+il1s2t
+ilu1mi2
+i1lu
+ilumin1
+ilus3s
+i2l1g
+i1l
+il1r
+il1v
+i2l1z
+ilva1k2
+il1va
+ima1gl
+i1ma
+im1akk
+ima12
+ima1p2
+1i2md
+i1m
+i2mkt
+im1dr
+imeg1g2
+i1me
+ime2g1o
+im1elem
+ime1le
+ime2m
+i2m1e1me
+ime2ra
+ime2rin
+ime1ri
+i2m1rd
+i1m
+im1inh
+i1mi
+imi2t1a2
+imi2t12r
+imi1t
+imi2tin
+imi1ti
+1im1mu
+i2m1old
+i1mo
+i2m1om
+imo2n1o2x
+imo1no
+im12r
+i1m
+imt2
+im1s
+i1m
+1im1p
+1im1pu
+1imre1i
+im1re
+i2m1r
+i1m
+imt2r
+i1m
+i2n1abl
+i1na
+i2n1a2c
+i2n1a1d
+i2na1do
+in1a2j
+in1ajt
+inaka2r
+ina1ka
+1i2naka2t.
+i2n1akc
+i2nakk
+i2nakn
+i2nakt
+i2n1akv
+in1ald
+i2n1alk
+in1all
+1i2na2m.
+i2n1a2mi2t.
+ina1mi
+i1n1a1na
+ina1p1la
+ina2rn
+ina1r
+1i2na2s.
+ina2sis
+ina1si
+1i2nasn
+ina2tell
+ina1te
+inciks2z1
+i1n
+in1ci
+inci1
+inci2ks
+inci1k
+inci2kor
+inci1ko
+i2n1g
+in12rak
+in1ra
+in1rh
+i2n1ru
+i2n1sv
+2inb2e.
+in1be
+in1bl
+in1br
+in2c1a2g
+in1ca
+in2cal
+inca2n
+inc1elt
+in1ce
+in2c1l
+in1c
+in2c1hi
+inc2h
+in2c3ho
+in2c1is
+in1ci
+in2c1or
+in1co
+in2c1os
+in2c
+in2c1
+in2c
+in2cs1an
+inc2s
+in1c1sa
+in2cs1e2r
+in1c1se
+in2cs12j
+in1c1s
+in2cs12r.
+inc3srv
+in2csor
+in1c1so
+inc3so2r.
+in2c1s
+in2c3st
+in1c1s
+inc3s1za
+incs2z
+in2c
+in2d1ab
+in1da
+1inda1i
+in2d1az
+in2deb
+in1de
+in2d1ed
+in2d1e2g
+ind1e1k
+in2d1e2m
+ind1e2t.
+ind1ett
+1index
+in2d1e2z
+in2d1g
+in1d
+in2d1n
+in2ds
+ind1ink
+in1di
+1indiv
+1indt
+in1d
+in1d2
+in2d1r
+in2ds
+in1d1ra
+1indul
+in1du
+2in2e.
+i1ne
+i2n1e2d
+i2n1ef
+ineg1g
+in1e2g2y
+2ine1i
+ine2ku
+i2n1e2l
+in1e1mu
+i2n1en2y
+i2n1erd
+i2n1erj
+ine2t1a
+ine2t1r
+ine1t
+ine2t2l
+ine1t
+i2n1ex
+in12ge
+i1n
+in1k1r
+in2l
+i2n11le
+i2n1lt
+i2n1lv
+in12p
+i2n12r.
+i2n1rd
+i2n11r
+in1r1te
+in2t
+in2te
+1infek
+in1fe
+1infl
+in2g1a2d
+in1ga
+in2g1a2la
+ing1ll
+in1g
+ing12r
+ing12ro
+ing1rt
+ing11ru
+ings3s
+1ingec
+in1ge
+in2g1eg
+1inge1i
+ing1el1j
+ing1elk
+in2g1ell
+ing1els
+in2g1enc
+1ingerb
+1ingerc
+1inge1r
+inge2r1s
+1ingerg
+1ingerh
+1inge1ri
+1ingerk
+1ingerm
+1ingern
+1ingerp
+1ingerr
+1ingers
+1ingert
+1inge1r
+in2g1e2v
+in2g12j
+in1g
+in2g1k
+in2g1l
+ings3s
+ing3g
+ing1i2na
+in1gi
+in2g
+in1g1lo
+in2gor
+in1go
+in2g1l
+in1g
+in2g1s
+1in2g1uj
+in1gu
+in2g1u2t
+in2g
+ing1lt
+in1g
+2ini1e
+i1ni
+2ini1
+i2nigar
+ini1ga
+i2n1i1ge
+in1ik1ra
+ini1k1ro
+i2n1ill
+i2n1i2m2a.
+ini1ma
+in1i2mi
+i2n1ind
+i2n1inh
+i2n1i2o
+2inir
+ini2s1g
+ini1s
+i2n1isk
+i2n1ism
+i2n1i2tal
+ini1ta
+2ini1u
+i2n1z
+i1n
+1injekc
+in1je
+ink1a1c
+in1ka
+in2k1a2d
+in2k1a1to
+in2k1rn
+in1k
+in2k1es2z
+in1ke
+ink1r1t
+in1k
+in2ki1o
+in1ki
+ink1old
+in1ko
+ink1or1s
+inkor1s2
+in2ks
+in1k
+1inkub
+in1ku
+1inn2a.
+in1na
+in2nor
+in1no
+i2n1ob
+i1no
+i2n1okl
+i2n1old
+i2n1olt
+i2n1olv
+i2n1o2x
+in11da
+i1n
+in12d
+in2r
+i2n1l
+i1n
+in1n
+in1z
+i1n
+in1pl
+in1pr
+2in1ri
+in1s2k
+in1s2m
+1ins1pi
+in1spr
+1ins1ta
+inste2i
+ins1te
+in1s1to
+in2t1ak1tu
+in1ta
+int1ann
+int1ra1i
+in1t
+int1ra
+int1rak
+int1rat
+in2t12r
+in2t1rf
+in2t11ri
+int1ron
+int1ro
+in2t1rr
+int1rs2z
+in2t11ru
+int12ta
+1inte1ge
+in1te
+1integr
+in2t1e2g2y
+int1elt
+inte1l
+int1el1t
+in2t1e2n2y
+1intenz
+in2t1e2rez
+inte1re
+1inter1f
+int1es2s2z
+inte2t1s
+inte1t
+in2t12j
+in1t
+in2t1s2z
+1int1z
+2intzsil
+intz1si
+1intzk
+1int1z
+2intzc
+in1t2hos
+int1ho
+in2tid
+in1ti
+inti2g
+in2t1i1g
+int1il1la
+in2t1ing
+in2t1ip
+in2t1i1v
+in2t1i2z
+int1oml
+in1to
+in2t1os2z
+in2t1s
+in1t
+intks2z1
+in1t
+int1k
+int12r.
+int1u1ra
+in1tu
+intus1s
+in2t1ut
+in2ts
+in1t
+in2t1t
+in1ug
+i1nu
+i2n1uj
+in1j
+i1n
+in12s
+i2n12t
+i2n12g
+i1n
+in1lt
+in1nn
+in1r
+in1s
+i2n12t
+i2n12v
+i2n12z
+in1r
+i1n
+1inven
+in1ve
+in2xa
+1in1zu
+i1o
+io2r
+io1
+io1b2r
+io2c2s
+io2d
+i3o1g
+io2k
+io2k
+io2ko
+io2ku
+i3old
+io2l1i2v
+io1li
+iol1okk
+io1lo
+i2o1l
+i3olv
+io2mar
+io1ma
+io2m1rt
+io1m
+io2mil
+io1mi
+io2m
+io2nad
+io1na
+io2n1a2g
+io2nak
+io2n1a2n
+io2n1a2r
+io2n1as
+io2n1a2t
+io2n1av
+io2n1t
+io1n
+io2neg
+io1ne
+io2n1e2l
+io2ne2n
+io2nin
+io1ni
+ion1k2
+io2nop
+io1no
+io2n1oszt
+ionos2z
+io2n
+ion1s2
+ion1t2r
+io2pe
+io2r1a
+io2r1i2ko
+io1ri
+io2so
+iosz2f
+ios2z
+i2o1te
+io2xidj
+io1xi
+io2xidt
+i1
+ia2d
+i1a
+i2ap
+i2g
+i1
+i2r
+i2t1a2
+i21b
+i2bes
+i1be
+i21b
+i21b
+i21b2l
+i21bo
+i21b
+i21b
+i21b2r
+i21bu
+i21b
+i21b
+i21b
+i21ce
+i21c
+i21ci
+i21cu
+i21de
+i21d
+i21di
+i21d
+i21d
+i21d
+i21d1r
+i21d
+i21d
+i2d2z
+i2g
+i1
+i2k
+i2l
+i2p
+i2s
+i22v.
+i21f
+i21fe
+i21fi
+i21f
+i21f
+i21f
+i21f2r
+i21fu
+i21f
+i21f
+i1g2r
+i21ha
+i21h
+i21he
+i21h
+i21hi
+i21h
+i21h
+i21h
+i21h
+i21hu
+i21h
+i21h
+ii2g
+i1i
+i2ip
+i2is
+i2iz
+i2v
+i1
+i21je
+i21jo
+i21j
+i2kad
+i1ka
+i2kaj
+ik1arc
+i2k1aszt
+ikas2z
+i2kl
+i1k
+i2k1e2g
+i1ke
+i2k1i2d
+i1ki
+i21k
+ikkz1
+ik1k
+ik1old
+i1ko
+i2kort
+i21k
+i21k
+i2k2rm
+ik1r
+i2kz
+i1k
+i21la
+i21l
+i21le
+i21l
+i21li
+i21lo
+i21me
+i21m
+i21mu
+i21m
+i21m
+i21ne
+i21n
+i21n
+io2k
+i1o
+i2r
+i1
+i1p2s
+i2rab
+i1ra
+i2rag
+i2raj
+i2rak
+i2ran
+i2rap
+i2ras
+i2rd
+i1r
+i21re
+i21r
+i2ri1a
+i1ri
+i21ro
+i21r
+i21ru
+i2s1aj
+i1sa
+i2sel
+i1se
+i2s2i.
+i1si
+i2s
+is3s
+i21st2r
+i21s
+i1s2z2
+i21te
+i21t
+i21ti
+i21t
+i21t
+i21t
+i21t2r
+i21tu
+i21t
+i21t
+i21t
+i2ug
+i1u
+i2un
+i2ur
+i2ut
+i2vr
+i1v
+i2vs
+i21ve
+i21v
+i21vi
+i21v
+i21v
+i2zr
+i1z
+i21ze
+i2z2s
+i1
+i2k
+i2le
+i2l
+i2li
+i2l
+i2l
+i2m
+i2re
+i2r
+i2r
+i2t
+i2ve
+i2z
+i1
+i1dr
+i21ha
+i21k
+i21ku
+i21ra
+i2ri2
+i21s2p
+i21st
+i21te
+i21t
+i21va
+i21v
+ipa2c1se
+i1pa
+ipac2s
+1i2pa2r.
+1i2par2a.
+ipa1ra
+ipa2ral
+ipa2rl
+ipa1r
+1i2parn
+1i2part
+1i2parb
+ipa2r1en
+ipa1re
+ipa2r1es
+1i2pa1r
+1i2parh
+1i2parig
+ipa1ri
+1i2paril
+1i2parin
+ipa2ris
+1i2parm
+1i2parn
+i2parok
+ipa1ro
+1i2paron
+1i2parr
+1i2pars2
+1i2par1ta
+1i2par1t
+1i2par1te
+1i2par1t
+1i2pa1ru
+ipa1u2
+ipnk2
+i1p
+ipn1n
+ip1tm
+i2p1ef
+i1pe
+ip1e2g2y
+i2p1e2lu
+i2p1e1s
+i2p1ev
+ip2fu
+ip1kl
+ip1kr
+ipor2tel
+i1po
+ipor1te
+ipor2t1
+ip12l
+i1p
+ip1s
+ip2p1a2d
+ip1pa
+ip2pa2j
+ip2par
+ip2pr
+ip1p
+ipp1ing
+ip1pi
+ip2p1os
+ip1po
+ip2p
+i1p2rof
+ip1ro
+i1p2rog
+i1p2roj
+i1p2rot
+ipsz1a2l
+ips2z
+ip1s1za
+ipsz1l
+ip1s1z
+ip2sz1emb
+ip1s1ze
+ip2szip
+ip1s1zi
+ip2s1z12
+ipsz1or
+ip1s1zo
+i2p1ug
+i1pu
+ira1lo2
+i1ra
+1i2ra1ma
+1i2ra1m
+iramis1s
+ira1mi
+ira2tal
+ira1ta
+ir2ata2n
+ira2t1an2y
+ira2t1as
+ira2t1at
+ir2a2tl
+ira1t
+1i2ratb
+1i2ratc
+1i2ratd
+ira2tel
+ira1te
+1i2ra1t
+1i2ratf
+1i2ra1ti
+1i2ratm
+ira2t1ol
+ira1to
+1i2raton
+1i2ratos
+ira2t12
+1i2ratp
+1i2ratr
+1i2ra1t
+ir2f1a2
+i1r
+ir2g1al
+ir1ga
+ir2g1l
+ir1g
+ir2g12rak
+irg1ra
+ir2g12ro
+ir2g11to
+ir2gz
+ir2g1e
+irg1g
+ir2g1ol
+ir1go
+ir2g12r
+ir1g
+ir2g
+ir2l1a
+ir2l1e2
+1i2rnn
+1irn2y
+ir2nyal
+ir1nya
+ir2nye
+ir2c2h
+1ir1ga
+irin2c
+i1ri
+iri2zo
+irka1s
+ir1ka
+irkas2z2
+ir1ke1
+2irob
+i1ro
+1i2rod2a.
+iro1da
+1i2ro1d
+iro2ka
+iro2k
+iro2k1e2
+iro2kr
+ir2o1k
+iro2l1a
+iro2m1a
+iros3s
+ir2ke
+i1r
+i2r1no
+1ir1ri
+ir2s1a2
+ir2s12
+ir2sil
+ir1si
+ir2s1
+ir1t2
+ir2t1l
+ir2tiz
+ir1ti
+ir2t1o2r
+ir1to
+ir2t12
+ir2tr
+ir1t
+iru2s1ze
+i1ru
+irus2z
+i2s1abl
+i1sa
+is1a2da
+is1a2d
+is1a2do
+i2s1a2g
+is1ajk
+isa2k1e
+isa2kol
+isa1ko
+is1a2la
+i2s1alf
+i2s1alj
+is1alk
+i2s1alm
+is1amb
+isa2n
+i2s1a1na
+i2s1a1no
+i2s1ant
+i2s1an2y
+isa2p
+is1a1p
+is1a1po
+is1a2r
+is1ass
+i2s1a2ut
+isa1u
+i2s1a2z
+i2s1br
+i1s
+is1g2g2y
+is2gy1t
+i4s12g2y
+is1gy
+is1ll
+is12po
+i2s12rak
+is1ra
+i2s12r
+i2s1rb
+i2s1rf
+i2s1rh
+i2s1r1k
+isr1k2
+i2s1rn
+is2ron
+is1ro
+i2s1rr
+i2s1rt2
+i2s12ru
+i2s12rus1
+i2s12t1a2
+i2s1tk
+i2s1tl
+i2s1tv
+is1bl
+is1br
+is1dr
+is1ed2z
+i1se
+i2s1eff
+i2s1e1ge
+i2s1e2gr
+ise1g
+i2s1e2k2e.
+ise1ke
+i2s1elf
+is1elm
+i2s1e1lo
+i2s1eml
+i2s1e1ne
+is1eng
+i2s1ep1ri
+i2s1e2r
+is1e2set
+ise1se
+is1e1s
+is2ge2l
+i1s
+is1ge
+is2gs
+is1g
+is2gid
+is1gi
+isgks2z1
+i3sgk
+isg1k
+is1lv
+i2s12r.
+i2s12ri
+i2s1r1te
+i2s1r1t
+i2s12v2e.
+is1ve
+i2s12vet
+i2s12vn
+is1v
+i2s12vt
+i2s1vh
+i2s2v2i.
+is1vi
+isfl2
+is1f
+is1fr
+is2hin
+is1hi
+is2his
+i1s2how
+is1ho
+is1i1do
+i1si
+isi2g
+i2s1i1ga
+i2s1i2kerb
+isi1ke
+i2s1ind
+i2s1inf
+i2s1ing
+is1int
+i2s1inv
+isi12
+i2si1pa
+isi2par
+i2s1i1ro
+i2s1isten
+isist2
+isis1te
+is1i1ta
+is1i2zo
+i1s2ka1tu
+iskat2
+is1ka
+is1kl
+is1k2r
+is1kv
+is2lag
+is1la
+i1s2lat
+is2mn
+is1m
+1ism2e.
+is1me
+1ismek
+1isme1re
+1ismrv
+is1m
+i2s1ob
+i1so
+i2s1o2l
+i2s1orc
+i2s1ord
+iso2ros2z
+iso1ro
+i2s1or1ra
+i2s1or1r
+is1orv
+i2s1os1ko
+i2s1os2z
+i2s1ott
+is12r
+i1s
+i2s12c
+i1s
+is1l
+is1n
+is2r
+is11re
+is1s
+is12v
+is12r
+i1s
+i1s2pan
+is1pa
+i1s2pek
+is1pe
+isp2r
+i1s2pur
+is1pu
+is1s2p
+is1s1ta
+is1s1t
+issz12ram
+is2s2z
+is1s1z
+issz1ra
+issz1e2res
+is1s1ze
+issze1re
+is3szig
+is1s1zi
+is3szil
+is3s1z
+is3s1z
+is3s1z
+is3s1z
+is3s1z
+is3s1z
+ista1s
+is1ta
+istas2z2
+1istp
+is1t
+iste2n1o
+is1te
+i1s2til
+is1ti
+is1t2re
+is1t1r
+is1t1ri
+is1t1ro
+1istv
+i2s1ud
+i1su
+i2s1ujj
+isu2t
+is1u1ta
+is1u1t
+i2s1j
+i1s
+i2s1g
+i1s
+i2s1st
+i2s12tt
+is1t
+i2s1z
+isva2d1ss
+is1va
+isva1d
+i1svin
+is1vi
+isvz1
+is1v
+isza2k1o
+is2z
+i1s1za
+i2sza2p12
+isza2p1e
+is3z1r
+i1s1z
+isz1r1k2
+is3zrl
+i2s3z1r
+isz1e2g2y
+i1s1ze
+i2sz1elv
+is3ze1ne
+isz1esem
+isze1se
+i2szj
+i1s1z
+i2szi1mi
+i1s1zi
+i2sz1ing
+isz1isk
+isz1ist2
+isz1kl
+isz2k12v
+isz1k
+isz2k1
+isz1l
+i1s1z
+isz1s
+isz3s
+isz2t12ras
+isz1t
+iszt1ra
+isz2t1rb
+isz2trt2
+isz2t1kn
+isz1t
+isz2t12r.
+isz2t1ill
+isz1ti
+iszt1i2na1i
+iszti1na
+isz2t12l
+isz1t
+isz2t12r.
+isz1t
+isz2tz
+isz1t
+i2sz12g
+i1s1z
+i2szt
+i2s3zrdn
+i1s1z
+isz1r
+it1a2c
+i1ta
+ita1d2
+i2t1a2d
+ita1gr
+it1a1gya
+itag2y
+i2t1akk
+i2t1akn
+1i2ta2l.
+ita2lad
+ita1la
+ita2l12r
+ita1l
+i2talb
+ita2l1el
+ita1le
+ita1l2
+i2talh
+ita2l1i2n
+ita1li
+i2talj
+i2tal1k2
+it1al1lo
+1i2talm
+1i2taln
+i2ta1lo
+ita2l12
+1i2talr
+i2talt2
+i2ta1lu
+it1a1n
+it1ant
+i2t1a1ra
+i2t1a2u
+it1c2s.
+i1t
+itc2s
+i2t12g.
+it12ga
+it1na2
+it2n1at
+it2rak
+it1ra
+i2t12ram
+it12ras
+it12rat
+it2rr
+it1r
+it2rt
+i2t12ri1a
+it1ri
+it2ri2g
+it2ris
+it1r2
+it2r1r
+it2ruk
+it1ru
+it2r
+itsks2z1
+its1k
+it2s3z
+it2tal
+it1ta
+it1tf
+it1bl
+it1br
+it1dr
+ite2l1a
+i1te
+ite2l1
+ite2le2g
+ite1le
+i2telemz
+ite2leng
+ite2le1s
+ite2lex
+ite2ll
+ite1l
+ite2l12r.
+ite2linj
+ite1li
+it1el1j
+i2t1ellen
+itel1le
+it2elml2y
+it1elml
+itel1m
+ite2lo
+ite2lz
+ite1l
+i2t1e2mel
+ite1me
+i2t1eml
+i2t1e2p
+i2t1e2rez
+ite1re
+i2t1e2r
+i2t1e2se1te
+ite1se
+it1ezr
+i2t1br
+i1t
+it12le
+it1lm
+i2t12ret
+it1re
+i2t1rz
+it2tek
+it1te
+i2t1tt
+it1fl
+it1fr
+it1gl
+it1gr
+i2t1id
+i1ti
+iti2g
+itigaz1
+i2t1i2ga
+i2t1i1g
+it1i2ko
+it1ikr
+itikus1s
+iti1ku
+it1ill
+it1imp
+i2t1ind
+i2t1inf
+i2t1i2onn
+iti1o
+it1i2pa
+i2t1i1r
+i2t1i1ro
+it1i1r
+it1isk
+i2t1ism
+it1i1s1za
+itis2z
+iti2s1zo
+i2t1g
+i1t
+i2t1z
+it1kl
+itkos1s
+it1ko
+it1kr
+ito1gr
+i1to
+ito2k1aj
+ito1ka
+ito2kak
+ito2k1ol
+ito1ko
+ito2n12
+ito2r1as
+ito1ra
+ito2rl
+ito1r
+ito2ril
+ito1ri
+2itos2z
+i2t1ov
+it1a2
+i1t
+it1f2
+1i2tkn
+it1k
+i2t12n
+i2t1nn
+i2t1nt
+it1p2
+it11r
+its2
+it1sp
+it1st
+it1nt
+i1t
+i2t1s
+i2t1rl
+i1t
+it1pl
+it1pr
+it1sp
+1ittad2
+it1ta
+1ittam
+itta2n12s
+itta1n
+itta2n1
+itta2n12
+2it1te
+it2t1eg
+it2t1i2na
+it1ti
+it1t1ra
+it1t1r
+1ittuk
+it1tu
+1ittun
+it1ty1i
+it2t2y
+i2t1und
+i1tu
+itu2ral
+itu1ra
+i2t1u2rn
+itu1r
+it12j
+i1t
+i2t1g
+i1t
+it1ld
+i2t1st
+i2t1t
+i1t2z
+i1t2zi
+i1u
+iu2ga
+iu2go
+iu2mab
+iu1ma
+iu2mac
+iu2m1ad
+iu2maf
+iu2m1ag
+iu2mal
+iu2m1am
+iu2m1a2n
+iu2m1a2r
+iu2m1as
+iu2m1a2t
+iu2m1av
+iu2maz
+iu2m12l
+iu1m
+iu2me2g
+iu1me
+iu2m1el
+iu2m1en
+iu2mer
+iu2m1es
+iu2mez
+iu2ml
+iu1m
+iu2m11r
+iu2m1i2d
+iu1mi
+ium1ill
+iu2m1im
+ium1inj
+iu2m1i2p
+iu2m1is
+iu2m1iz
+iu2m
+iu2mol
+iu1mo
+iu2m1or
+iu2m12
+iu2m
+iu2m
+ium1p2
+iu2m
+iu2na
+iu2no
+iu2ra
+iu2r
+iu2ru
+ius3s1ze
+ius2s2z
+iu2ta
+iu2t
+iu2tu
+iu2z2s
+i1
+i21b
+i21be
+i21b
+i21bi
+i21bo
+i21b
+i21br
+i21ci
+i21c
+i21d
+i21de
+i21do
+i2d2z
+i2l
+i1
+i1fr
+i21ha
+i21h
+i21he
+i21hi
+i21h
+i21h
+i21hu
+i21h
+i2if
+i1i
+i21je
+i2j
+i21j
+i21ke
+i21k
+i21kl
+i21k
+i21k
+i21ku
+i21me
+i21m
+i21mu
+i21m
+i21ne
+i21n
+i21n
+i21re
+i2ri
+i2ro
+i21ru
+i21se
+i21so
+i21sp
+i21ta
+i21t
+i21te
+i2t
+i21t
+i21t
+i21t
+i21ve
+i21v
+i21vi
+i21vo
+i21ze
+i1
+i2c2s
+i2ge
+i2g2y
+i2le
+i2l
+i2li
+i2l
+i2l
+i2l
+i2re
+i2r
+i2r
+i2te
+i2t
+i2ti
+i2t
+i2t
+i2t
+i2ve
+i2v
+i2ze
+i1
+i2ze
+i2z
+i2z
+iv2a2csal
+i1va
+ivac2s
+iva1c1sa
+iva2c1s1e
+1i2va1d
+iva2r1a1i
+iva1ra
+iv2a2raj
+iva2re
+iva2rin
+iva1ri
+iva2rol
+iva1ro
+iva2r
+ivar1s2
+iv2a2t1a2n
+iva1ta
+iva2t1e2
+iv2a2tin
+iva1ti
+iva2tol
+iva1to
+iva2t12
+iva2t1
+1i2v2s.
+i1v
+1i2vsb
+1i2v1s
+1i2vsn
+1i2vsr
+1i2vss
+ivez2relv
+i1ve
+ive1z
+ivez1re
+1ivot
+i1vo
+ivks2z1
+i1v
+iv2ks
+iv1k
+ivs2
+iv12
+i1v
+i2x1ab
+i1xa
+i2x1ad
+i2x1an
+i2x1ar
+ix1as
+i2x1g
+i1x
+ix1bl
+i2x1ef
+i1xe
+i2x1eg
+i2x1ex
+i2x1p
+i1x
+ix1fr
+i2x1im
+i1xi
+i2x1in
+i2x1i1o
+i2x1ir
+i2x1is
+ixi2t
+i2x1ob
+i1xo
+i2x1op
+ix1s
+i1x
+ix1r
+i1x
+ix1s
+ix1pl
+ix1pr
+i2x1j
+i1x
+i2x1l
+i1x
+iz1akn
+i1za
+izala2g1
+iza1la
+iz1alk
+izas2
+iza1sp
+i2z1rn2y
+i1z
+iz1bl
+ize2d12
+i1ze
+ize2d1k
+ize1d
+iz1eg2y
+i2z1e2lem
+ize1le
+izele2tel
+izele1te
+i2z1e2lr
+ize1l
+i2z1e2l1
+ize1l
+i2z1eltet1t
+izel1te
+i2z1ember
+izem1be
+izene2g
+ize1ne
+izen3n
+ize2s12
+i2z1ese1m
+ize1se
+izetks2z1
+ize1t
+izet1k
+i2z1ev
+i2zd
+i1z
+i2z1g
+1i2zj
+1i2zk
+i2zl
+1i2zm
+i2z12p
+1i2z1s
+iz1fl
+1izgal
+iz1ga
+1izgatot
+izga1to
+i2z1i1ga
+i1zi
+i2z1i1g
+iz1inf
+iz1int
+i2z1i1ro
+iz1isk
+iz1ism
+izi2t1a2
+izi2t1u2r
+izi1tu
+1izmos
+iz1mo
+1izmuk
+iz1mu
+izmus1s2
+iz1okt
+i1zo
+1i2zo1l
+izo2m1a
+izo2ml
+izo1m
+1i2zom1b2
+1i2zo1m
+1i2zomf
+1i2zomm
+1i2zomn
+1i2zomr
+1i2zom1s
+1i2zomt
+1i2zomz
+izo1p
+i2z1os
+1i2zo1t
+iz2d1a2
+i1z
+iz11r
+iz1pl
+iz1pr
+i2zs1ad
+iz2s
+i1z1sa
+izsa2ik
+izsa1i
+i2zsakn
+i2zs1all
+izs1a1ra
+izsau2tk
+iz2saut
+izsa1u
+izsau1t
+i2z4s1g
+i1z1s
+i2zs1l
+izse2be2le
+i1z1se
+izse1be
+i2zsec
+i2zs1em1be
+i2zsev
+izs2t
+i1z1s
+i2zs11te
+i2zsil
+i1z1si
+i2z2s1imp
+i2zs1ist2
+i2zsi1ta
+i2zsiz
+i2z3sor
+i1z1so
+i2z1s1
+izs1s
+iz3st2r
+i2zs1l
+i1z1s
+iz3s1ze
+izs2z
+iztos1s
+iz1to
+iz1udv
+i1zu
+izu1ra1
+iz12t
+i1z
+i2z12g
+i1z
+i2z1t
+i2z12z
+1iz1zi
+1iz1z
+1izzot
+iz1zo
+2.
+1a
+1
+ba2l1
+1ba
+2bis
+1bi
+bo2r1as
+1bo
+bo1ra
+ci2sor
+1ci
+ci1
+ci1so
+cius1s
+ci1u
+d1a2c
+1da
+d1a2d
+d1a2l
+dala2g1
+da1la
+d1a2n
+d1a2v
+d1a2z
+d1g
+1d
+d1l
+d12r
+d1t
+d1bl
+d1e2g
+1de
+d1e2l
+d1e2m
+2d12g
+1d
+2d1l
+2d1p
+2d12r.
+2d1rz
+di2g
+1di
+2d1i1ga
+2d1i1g
+2d1in
+2d1i2r
+d1v
+1d
+2d1ol
+1do
+2d1om
+2d1os
+d1s
+1d
+d12r
+1d
+d1pr
+d1st
+2d1ud
+1du
+2d1ug
+d1j
+1d
+d1g
+1d
+d1n
+d1z
+1d3z
+d2z
+d3z2s
+1e
+1
+2le
+2g1a2g
+1ga
+g1e2p
+1ge
+ge2s
+2g2r
+1g
+2g1op
+1go
+g1tr
+1gy2
+g2y
+1i
+i2ro
+1
+2j1a2d
+1ja
+2j1a2d
+2j1a2j
+2j1akc
+2j1a2l
+j1an2y
+2j1a2r
+2j1a2u
+2j12c
+1j
+2j12g
+2j11r
+2j11re2
+2j1rt
+2j11ru
+12js
+j2s1ze2
+js2z
+j2s1zi
+j1sz1ka
+jsz1k2
+2j11ta
+2j12te
+2j1th
+2j1tl
+j2tos
+j1to
+2j1tt
+2j11tu
+2j1tv
+2j12z
+j1e2g
+1je
+j1e2l
+je1l2i
+j1e2m
+j1en
+j1e2r
+j1e2s
+j1p
+1j
+j2r
+2j11re
+j1fr
+2j1i2d
+1ji
+2j1im
+2j1int
+2j1ir
+2j1i2r2
+j1g
+1j
+j1n
+j1kr
+2j1o2d
+1jo
+2j1ok
+2j1ol
+2j1os
+2j1ot
+j1n
+1j
+j1s
+j12v
+j1z
+j1pl
+j1pr
+j1sk
+j1sp
+j1st2
+2j1ug
+1ju
+2j1u2t
+2j1t
+1j
+j1g
+1j
+j12t
+k1ab
+1ka
+k1a2c
+k1a2g
+k1a2l
+k1an
+k1ar
+ka2s
+k1a2v
+2k1b
+1k
+2k1g
+k1l
+2k12r
+2k1eg
+1ke
+2k1e2l
+k1em
+2k1es
+k1ev
+2k12k
+1k
+2k12r.
+2k1rb
+2k12r
+k1fr
+k1gr
+2k1i2d
+1ki
+2k1ing
+2k1i2r
+k1n
+1k
+k1r
+k1k2r
+1k2lu
+k1oll
+1ko
+2k1op
+2k1orn
+2k1orr
+2k1or1s2
+k2l
+1k
+2k12v
+k1pl
+k1pr
+k1sp
+k1s2z2
+2k1ug
+1ku
+2ku1ni
+2k1u2r
+2k1u2t
+2k12t
+1k
+k12v
+1k
+l1aj
+1la
+l1a2k
+l1a2l
+2l12g
+1l
+l1si2
+l2s1ik
+ls3s
+l2s2z
+2l1szrl
+l1s1z
+lsz1r
+2l1t
+l1bl
+l1br
+l1e2g
+1le
+2l1rz
+1l
+li2as
+1li
+li1a
+2l1i2m
+2l1i2r
+2l1is
+l12r
+1l
+l12v
+l1kr
+lmeg1
+l1me
+l1s
+1l
+l12z
+l1st
+l1t2
+l2t1r1k2
+l2t11ro
+l2t1rt
+l2t1e
+l2t12
+2l1u2r
+1lu
+lu2sab
+lu1sa
+lu2se
+lus3s
+lu2s3z
+ma2n
+1ma
+ma1p2
+2m12l
+1m
+m2ris
+m1ri
+ms3s
+m1b2l
+m1b2r
+m1dr
+2m1e2g
+1me
+2m1e2l12
+2m1elm
+melks2z1
+me1l
+mel1k
+me2r1a2
+me2r1
+me2reg
+me1re
+m1e2r
+2m1esem
+me1se
+2m1e2v
+2m12het
+1m
+m1he
+2m12k
+2m1p
+2m12r.
+2m12r
+2m12r2.
+m1r
+2m12r1i
+2m1rr
+2m1r1te
+2m1r1t
+2m1i2d
+1mi
+mi2g
+2m1i1ga
+2m1i1g
+2m1ill
+2m1ind
+2m1inf
+2m1i1ra
+2m1is
+2m1i2v
+m1r
+1m
+m1kr
+m1o2k1
+1mo
+m1ol
+m1on
+m1o2p
+m1os
+m1k
+1m
+m12l
+m1s
+m1t
+m12r
+1m
+m1p2r
+m1sp
+m1st
+m1u2r
+1mu
+m1u2t
+2m1g
+1m
+2m1nn
+2m1t
+2n1ab
+1na
+n1a2c
+na2d
+n1a1da
+n1a1d
+n1a1do
+2n1a2g
+2n1a2j
+2n1a2ka
+2n1akk
+n1a2la
+n1alj
+n1alk
+1n1a1na
+n1a2n2y
+2n1a2p
+2n1a2r
+2n1arc
+n1ass
+n1atl
+n1att
+2n1a2u
+2n1az
+2n1br
+1n
+2n12c
+2n1g
+2nlhaj
+nl1ha
+2n1lm
+2n12p
+n12t1a2
+n1tc
+n12t1e2
+n1tf
+n1th
+n1tl
+n1tm
+n1tt
+n1tv
+2n12z
+n1bl
+n1br
+n1d2r
+2n1ef
+1ne
+2n1e2g
+2n1e2k2e.
+ne1ke
+2n1elc
+2n1e2le1me
+ne1le
+2n1e2lemk
+2n1e2lemm
+2n1e2lemr
+2nelemz
+2n1elh
+2n1elj
+2n1elk
+2n1ell
+2n1elm
+2n1eln2y
+2n1e2lo
+2n1e2l12
+2n1e2lh
+ne1l
+2n1elr
+2n1el1t
+2n1el1to
+2n1el1v
+2n1e2mel
+ne1me
+2n1eml
+2n1e2mu
+ne2n
+2n1e1ne
+2nesd
+2n1e2s2z
+2n1e2v
+n1g
+1n
+n2l
+2n11le
+n11l
+n11l
+n1lt
+2n12p
+2n12r.
+2n1rd
+2n11ri
+2n1rl
+2n1rm
+2n12r
+n2s1za
+ns2z
+n2szer
+n1s1ze
+n2szint
+n1s1zi
+n2s1zo
+2n11te
+2n12ven
+n1ve
+n1f2r
+n1g2r
+ni2g
+1ni
+2n1i1ga
+2n1i1g
+2n1i2ko
+2n1ill
+2n1ind
+2n1inf
+2n1ing
+2n1int
+12ni1o
+2n1i2r
+2n1i1ro
+2n1ism
+2n1i2z
+n1z
+1n
+n1k2l
+n1k2r
+n1k2v
+n3ny
+n2n2y
+2n1ob
+1no
+2n1ol
+2n1op
+2n1or
+2n1os2z
+n12l
+1n
+n1n
+1n
+n1r
+n1s
+n1t
+n12v
+n12z
+n1pl
+n1pr
+n1ps
+1ns2g.
+n1s
+1nsgb
+1n3sg2e.
+ns1ge
+1nsge2k.
+n3sgek
+1nsgekb
+1nsge1ke
+1nsge1k
+1nsgekh
+1nsgekk
+1nsgekn
+1nsgekr
+1nsgekt
+1nsgen
+1nsges
+1nsget
+1nsg2.
+ns1g
+1nsgn
+1nsgrt2
+1nsgt
+1nsgv
+1nsg3g
+1nsg1he
+1nsg2i.
+ns1gi
+1nsgn
+1nsgr
+1nsgt
+n1s2k
+nso2k1
+n1so
+n1s2p
+n1s2t2
+n1s2z2
+n1t2r
+n1ug
+1nu
+n1j
+1n
+2n1d
+1n
+2n12g
+2n12t
+2n12v
+ny1e2c
+n2y
+1nye
+ny1e2g
+ny1el
+ny1e2r
+ny1ing
+1nyi
+1o
+1
+2vo
+1
+1
+2p1a2g
+1pa
+2p1a2n
+2p1lc
+1p
+2p1l
+1p
+ps3s
+2p1uj
+1pu
+pu2sa2n
+pu1sa
+pus3s2
+pus3z
+r1a2d
+1ra
+r1akc
+r1akn
+r1akt
+r1a2la
+r1alj
+2r1alk
+ra1pl
+ra1pr
+r1arc
+2r1a2u
+2r1br
+1r
+2r12g
+2r12p
+r12r.
+r1rak
+r1ra
+2r12ro
+2r12ru
+2r12ss
+r1s
+r2se
+rsks2z1
+rs1k
+rs3s
+r12t1a
+r12t1e2
+2r1th
+r1ts
+r1tv
+r11za
+r1bl
+r1br
+r1d2r
+r1e2d
+1re
+re2g
+2r1e2ks
+re1k
+2r1e2l
+re1l1a
+2r1ember
+rem1be
+r1eml
+r1e1mu
+re2n
+r1e1ne
+2r1e2r
+2r1esem
+re1se
+2r1e2s
+2r1eszk
+res2z
+2r1ev
+2r12g
+1r
+2r1j
+2r12k
+2r12l
+2r1p
+2r12ri
+2r1r1t
+2r1s
+2r12te
+2r1vh
+r1f2r
+r1gl
+r1g2r
+ri2g
+1ri
+2r1i1ga
+2r1i1g
+r1i1ko
+2r1ill
+2r1im
+r1ind
+2r1inf
+2r1inj
+r1ins
+2r1int
+2r1i2p
+r1i1ra
+2ris
+ri2s1z1
+ris2z
+2r1i2z
+r1n
+1r
+r1r
+r1v
+r12z
+r1k2l
+r1k2r
+r1kv
+1rnok
+r1no
+2r1o2b
+1ro
+1rog
+2r1okl
+2r1okm
+ro2l
+2r1o1la
+2r1old
+2r1olv
+2r1o2r
+2r1os2z
+2r1o2v
+2r1o2x
+r12
+1r
+2rdj
+2r1do
+2r1d
+2rdt
+2r1
+r1p2
+r1s2p
+r1s2z
+rt2
+r1tr
+r1n
+1r
+r1r
+2r1s
+2r12z
+2r12r
+1r
+r12s
+r1p2l
+r1p2r
+r1sh
+r1s2k
+r1s2p
+r1s2r
+r1s2t
+rs2z2
+rszt2
+r2t1ag
+r1ta
+rt1alap
+rta1la
+rt12te
+r1t
+rt1ha2
+r1tran
+rt1ra
+r1t1ro
+r2t1u2r
+r1tu
+ru2n
+1ru
+2r1und
+2r1u1ni
+2r1u2r
+ru2s1e2
+rus3s2
+2r1u2t
+2r1j
+1r
+2r1r
+2r12s
+2r1tj
+2r1tn
+2r12to2
+2r1tr
+2r1tt
+2r12g
+1r
+r2l
+r1r
+r12v
+2r1z
+r12z
+1r
+s2po
+s2t
+sz1aj
+s2z
+1s1za
+sza2k
+sza1k1o
+sz1a2l
+sz1as
+sz1at
+sz1a1u
+2s1z12
+2sz1eb
+1s1ze
+2sze1d
+2sz1e2g
+2sz1e2lem
+sze1le
+2sz1ell
+2szeln
+2sz1e2l
+2sz1elv
+2sz1emb
+2sz1e2mel
+sze1me
+2s2z1eml
+2sz1er1k2
+sz1ern
+sz1ezr
+2szg
+1s1z
+2sz12l
+2sz12p
+2sz1rem
+sz1re
+2sz1rt
+2s2z1tk
+1s1zi2
+2sz1id
+2sz1in
+2szr
+1s1z
+2sz1v
+sz1k2
+2s1z1o2
+2s1z12
+sz1l
+1s1z
+sz1n
+2s1z12
+sz1p2
+sz3s
+sz1tr
+2s1z1u
+2s1z1
+sz2l
+1s1z
+2sz11l
+2s2znn
+2szt
+sz1z
+ta1u2
+1ta
+t2s12g
+1t
+t1s
+t2k1a2l
+1t
+t1ka
+t2k1e2l
+t1ke
+12tl
+t2sa2
+t2s12g.
+t1s
+t2s12g
+t2s1gr
+t2s1za
+ts2z
+t22s1z
+t2s1zo
+tsz3s
+t1a2
+1t
+t1f
+tg2p12s
+t1g
+tg1p
+t1p2
+t1sp
+t1s1ta
+tt2
+t1tr
+te2r
+1t
+t1e
+ttrsa2d
+t1t
+ttr1sa
+ttr2s1a1da
+t2r
+tus3s
+1tu
+1u
+1
+1
+2d
+1
+2v1a2d
+1va
+v1a2j
+v1ajk
+v1ajt
+2v1a2la
+2v1alj
+2v1a2na
+2v1ang
+2v1a2n
+2v1a2n2y
+2v1arc
+2v1aszt
+vas2z
+2v1br
+1v
+2v12g
+2v1l
+v12rad
+v1ra
+2v12ram
+2v1rk
+2v1rn
+2v1rt
+2v1ru
+vs3s
+v2s3z
+v11ta2
+v1bl
+v1dr
+ve2c
+1ve
+2v1ed2z
+2v1e2g
+2v1ej
+2velek
+ve1le
+v1e2lemb
+v1e2le1me
+v1e2le1m
+v1e2lemr
+2velg
+v1e2ll
+ve1l
+2v1ember
+vem1be
+ve2n
+2v1end
+2v1e1ne
+ve2r
+v1e1re
+v1e1r
+v1e1r
+2v1ese1m
+ve1se
+2v1es2z
+2v1e2tet
+ve1te
+2v12g
+1v
+2v12k
+2v12le
+2v1lm
+2v12l
+v1lt
+2v1p
+2v12r.
+2v1r1d2
+2v12ri
+2v1rr
+v1r1t
+2v1rv
+2v1rz
+2v12te
+v1fr
+2v1i2d
+1vi
+vi2g
+2v1i1ga
+vi2k
+v1i1ke
+2v1ill
+2v1im
+2v1in
+2v1i2p
+v1i1ro
+vi2s1el
+vi1se
+vi2ses
+vis1s
+v1i1va
+2v1i2z
+v1kl
+v1kr
+2v1ol
+1vo
+2v1op
+2v1or
+2v1os2z
+2v1ox
+v1s2p
+1v
+v1v2
+2v1b
+1v
+2v12r
+2v1s
+v1v
+2v12z
+v1pl
+v1pr
+vren2de
+v1re
+v1sk
+v1sp
+v1st
+vs2z2
+v1szk
+v1tr
+2v1ug
+1vu
+v1ult
+2v1ur
+2v1u2t
+v1j
+1v
+v1t
+2v1g
+1v
+2v1r
+2v1t
+2v12v
+2v1z
+z1ab
+1za
+z1a2d
+z1a2g
+z1aj
+z1a2k
+z1a2l
+za2n
+z1ar
+z1a2u
+z12g
+1z
+z1l
+z12p
+z12r
+z2r1a2da1t
+z1ra
+zra1da
+z2r1a2datb
+z12r1a2datr
+zr1a2dsb
+zra1d
+zr1a2dsk
+zr1a2dsos
+zrad1so
+z1r12
+zs1s
+z12t
+z12t1a2d
+z1ta
+z1t1
+z1t1e2
+z1bl
+z1d2r
+2z1ef
+1ze
+2z1e2g
+2z1ej
+ze2l1el
+ze1le
+2ze1l
+ze2l
+ze2l
+2z1el1v
+2z1emel
+ze1me
+2ze1m
+ze2n
+2z1e1ne
+2z1e2r
+12ze1s
+2z1e2s2z
+2z1e2ti
+2z1e1u
+2z1e2v
+2z1ex
+ze2z
+2z1e1ze
+2z1ezres
+zez1re
+2z1ez1r
+2z1g
+1z
+z1kk
+2z12l
+2z12p
+2z12r.
+2z1rb
+2z1r1d2
+2z1rel
+z1re
+2z12re2n
+2z1rh
+2z12r1i
+2z1rk
+2z1rm
+2z1rn
+2z1rr
+2z1r1s
+2z1r1te
+2z1r1t
+2z1r1t
+2z1rv
+2z1rz
+z2sa
+z1s2z
+2z11vi
+z1fr
+z1gl
+2z1icc
+1zi
+zi2g
+2z1i1g
+z1i1ko
+2z1ill
+2zi1m
+2z1i1mi
+2z1imp
+2z1ind
+2z1inf
+2z1int
+zi2r
+zi1
+zi1
+zi21ra
+zi21to
+2z1i2pa
+2z1i1ra
+2z1i1r
+zi2so
+zi2s1za
+zis2z
+zi2s1zo
+zi2s1z
+2z1i2ta
+2z1i2v
+z12v
+1z
+z1z
+z1kl
+z1k2r
+zo2k
+1zo
+z1on
+z1or
+z1os
+2z12r
+1z
+z1b
+1z
+z1d
+z1k
+z1m
+z1n
+z1r
+z1s
+z12v
+z1z
+zpen1
+z1pe
+z1pf
+z1pl
+z1p2r
+2z1sa2
+z2s
+zs1al
+zs1as
+zs1a1u
+2z4s1g
+1z1s
+zs2r
+zs11ro
+z3sv
+z3seb
+1z1se
+2zs1e2l
+zse2s
+2z1s1e1se
+2zs1in
+1z1si
+2zs1it
+1z3s
+2z1so
+zs1ok
+2z3sor
+2z1s12
+2z1s
+zs1s
+z3st2r
+2z3su
+2z1s
+z3s2z
+z1t2r
+2z1ug
+1zu
+2z1uj
+zu2me2
+zu2m1i
+2z1und
+2z1u2r
+2z1u2t
+z1r
+1z
+z12t
+2z12g
+1z
+2z1le
+2z1r
+2z1s
+2z1t
+2z1v
+2z12z
+2z1e
+1z
+2zn
+12zr
+2zv
+2j.
+1ja
+ja2c
+2j1a2dag
+ja1da
+2j1a2dal
+ja2da1t
+2j1a2da1to
+2j1adm
+2j1a2dom
+ja1do
+2j1a2dot
+ja2dh
+ja1d
+ja2ds
+ja2dt
+ja2dv
+ja2dz
+ja2dus
+ja1du
+ja1f2r
+ja2g2a.
+ja1ga
+2j1agg
+2j1a2gi
+2jakad
+ja1ka
+ja2ka1d
+ja2k1l
+ja1k
+ja2k12p
+ja2k1rn
+2j1ak1ci
+ja2k1ec
+ja1ke
+ja2k1el
+ja2k1e2m
+ja2kes
+j2ak11re
+ja1k
+ja2k11ri
+2jakf
+ja2k1i2m.
+j2akim
+ja1ki
+j2a2k1iz
+ja2k12r
+ja1k
+jak1k2
+2j1ak1ku
+jako2v
+ja1ko
+jak1o1vi
+ja2kk
+ja1k
+ja2k1lts
+ja1k
+ja2k1s
+2j1ak1ro
+jakt2
+2j1ak2t.
+2j1ak1ti
+2j1ak1tu
+2j1alg
+2j1alk
+2j1all
+2j1alm
+2jam1bu
+ja2mes
+ja1me
+2jan2a.
+ja1na
+2j2ana2i
+ja2nal
+ja2nat
+2j1a2no
+jan2s1ze
+jans2z
+jan2s1z
+ja2nya
+jan2y
+ja2ran
+ja1ra
+2j1a2r
+2j1arc
+ja2rom
+ja1ro
+2j1a2szs
+jas2z
+ja1s1z
+2j1atk
+2j1at1r
+ja2ur
+ja1u
+ja2u1to
+2javat
+ja1va
+ja2xi
+ja2zon
+ja1zo
+1j
+2j12b
+2j1br
+2j12g.
+2j12g2a.
+j1ga
+2j12g1a2d
+2j12ga1i
+2j12gak
+2j12gas
+2j12gat
+2j12gaz
+2j12g
+2j1gb
+2j1gf
+2j1gg
+2j12gi
+2j1gk
+2j1gr
+2j12g2y
+j2r
+j1
+2j1ll
+j2n1e
+j2nk
+j1n
+2jnl
+j2po
+2j12ra1da
+j1ra
+2j12ra1i
+2j12rak
+2j12ram
+j2rar
+j2r1av
+2j12rn
+j1r
+jrs3s
+jr2s3z
+2j12rt
+2j12rv
+j1re2
+j2r1em
+j2res
+j2rr
+j1r
+2j12ri2g
+j1ri
+j2r1is
+2j1r1ki
+2j1r1ko
+2j1rn2y
+2j12ron
+j1ro
+j2r1ot
+j3r
+j2r
+2j1rtal
+jr1ta
+2j1rts
+jr1t
+2j12ruk
+j1ru
+2j12rus
+j12rut
+2j1rz
+j2s1ad
+j1sa
+j2sal
+j2sa2n
+j2s1g
+j1s
+j2s12ra1i
+js1ra
+j2s1rak
+j2ss
+j2s1e2
+j2sit
+j1si
+j2s1
+j2s1ol
+j1so
+2j12s
+j2s
+jst2
+j2s12
+j2sz1al
+js2z
+j1s1za
+j2szr
+j1s1z
+j1s1ze2
+j12szokt
+j1s1zo
+jszo1k
+j2s2z1ok1ta
+jsz11i
+j1s1z
+jsz1n
+jsz12r
+j2tad
+j1ta
+jt1a2d2.
+j2ta1d
+jt1a2d2k.
+jt1a2d2n.
+jt1a2dt
+2j12tal
+2j12t12
+jt2k1e2
+j1t
+2j1t1fe
+2j1t1h
+2j12ti
+2j12t12r
+j1t
+2j1t1l
+2j1tm
+jt1os2z
+j1to
+2j12t1
+2j1t1s1z
+jts2z
+2j12t
+2j1t1v
+2j1t1vi
+j3z2s
+jba2l1
+j1ba
+jbe1e2
+j1be
+jb2lo
+jb2ri
+jb2r
+jb2n12
+j1b
+j1c3ho
+jc2h
+jcsa1p2
+jc2s
+j1c1sa
+jcs1s
+jdona2t1
+j1do
+jdo1na
+jdona1t2
+j1d2r
+j1d2ro
+j1d2ru
+jdkz1
+j1d
+jd1k
+1je
+jea2d
+je1a
+jea2l
+jea2n
+je2b
+2j1e2dn
+je1d
+2j1e2d2z
+jee2n
+je1e
+je1f2r
+2jeged
+je1ge
+je2gs
+je1g
+je2gs2z1
+je2gyeg
+jeg2y
+je1gye
+je2gyel
+jegy1els
+jegy1elv
+2j1e2gye1s
+je2gy12k
+je1gy
+je2gy1in
+je1gyi
+je2gy1o
+je2gy
+je2gyu2
+je2gy1
+je2gy12r
+je1gy
+je1k1ri
+jek2t1a2
+jek2t12r
+jek1t
+jek2t1e2l
+jek1te
+jek2t1er
+je2l1a2j
+je1la
+je2l1an
+je2l1ap
+je2la2r
+je2lav
+je2laz
+je1l2
+je2l1b
+je2lg
+je2ll
+je2l1r
+je2l1t1
+je2lz
+jel1e2g2y
+je1le
+je2l1e2l1e2v
+jele1le
+je2l1ell
+je2l1e2l1
+jele1l
+je2l1e2lb
+je2l1els
+je2l1emel
+jele1me
+2jele1m
+je2l1eml
+2j1e2lemz
+je2l1eng
+je2l1e2r
+jel1ess
+jele1s
+jel1esik
+jele1si
+je2l1es1ni
+je2l1e2s
+jel1es1te
+je2l1es2z
+je2l1etet
+jele1te
+jel1e1vo
+je2lg
+je1l
+je2l1j
+je2ll
+je2l1p
+je2lr1te
+je2lim
+je1li
+je2l1inf
+je2l1ing
+je2l1int
+je2l12
+2j1ellen
+jel1le
+je2l1o2
+je2l1v
+je1l
+je2l1a
+je1l
+2j1e2l1fe
+je2l1
+2j1e2l1tu
+jel1p2
+2jel1s1z
+jels2z
+2jel1s1zo
+2j1eltet2t.
+jel1te
+2jeltr
+jel1t
+je2l1u
+je2l
+2j1em1ba
+2j1ember
+jem1be
+2j1e2mel
+je1me
+je2mu
+je2n1
+jen1d2
+je2n1e2k2e.
+je1ne
+jene1ke
+je2n1el
+je2ner
+j2ene2s
+je2n1es2z
+je2n1in
+je1ni
+je2n1o
+je2n12re
+je1n
+je2n1s
+je2n1
+je1p2r
+2j1erd
+je2red
+je1re
+je2r
+2j1e2r
+je2s1a
+je2s1emb
+je1se
+2j1e2setb
+2j1e2sett
+je2s
+jest2
+je1s1ta
+je1str
+je2su
+je2s12v
+je1s
+je2s3za2c
+jes2z
+je1s1za
+je2t1am
+je1ta
+je2tl
+je1t
+jet1ell
+je1te
+je2t1em
+je2t1k
+je1t
+je2t1o
+je1t1ra
+je2tun
+je1tu
+je2tut
+jeu2r
+je1u
+2j1e2v
+jezks2z1
+je1z
+jez1k
+1j
+2j1br
+j2g1a2
+j2g12
+jg2r1a2d
+jg1ra
+j2gec
+j1ge
+j2ged
+j2g1e2k
+j2g1el
+j2g1em
+j2g1erk
+j2g1es
+j2get
+j2gp
+j1g
+j2g12r.
+j2gs
+jg3g
+j1gi2
+j2g1id
+j2g1i2g
+jgi2g
+j2gim
+j2g1is
+j2g1o
+j2g
+j2g
+2j2g
+j2g1u2
+j2g
+j1g2
+2j12hen
+j1he
+2j12hes
+2j1hs
+j2k1os
+j1ko
+j2k
+2j12le
+j2l
+2j1lt
+j2nad
+j1na
+j2n1ess
+j1ne
+j2n12g
+j1n
+j2nil
+j1ni
+j2no
+j2n
+j2p
+j2p
+2j12r.
+2j1rb
+2j1rd
+j2reg
+j1re
+2j12re2n
+2j12r
+2j1rh
+2j12ri
+2j1rk
+2j1rl
+2j1rm
+2j1rn
+2j1rr
+2j1r1te
+2j1r1t
+2j1r1t
+2j12r
+2j1rv
+2j1rz
+j2tel
+j1te
+2j1tk
+2j1tt
+2j12v.
+2j1vb
+j2v2e.
+j1ve
+2j12vek
+2j12vet
+j2vn
+j1v
+j2vr
+j2vt
+j1vh
+j12vi
+j1vk
+2j1vn
+2j1vr
+j1vt
+2j12v
+j1vv
+jfeles1s
+j1fe
+jfe1le
+jf2le
+jf2lo
+jf2l
+jfls1s
+j1f
+jf1l
+jf2ra
+jf2re
+jf2ri
+jf2r
+jf2ro
+jf2r
+jfu2na
+j1fu
+j1g2le
+j1g2l
+jg2ru
+jh2r1e
+j1h
+1ji
+ji2do
+j1i2d
+2j1i2ga
+2j1i2g
+ji2je
+2j1ikr
+2j1ill
+ji2ma
+ji2m
+ji2mi
+2j1i2n2a.
+ji1na
+ji2nb
+ji1n
+2j1ind
+2j1inf
+2j1ing
+2j1inj
+2j1ins
+2j1in1te
+2j1in1t
+ji2on
+ji1o
+ji2pa
+2j1i2rat
+ji1ra
+2j1i2r
+2j1i2ro
+2j1irr
+2j1irt
+2j1isk
+2j1ism
+2j1ist
+2j1i2ta
+2j1i2v
+2j1i2v
+ji2z
+ji2zo
+1j
+j2g
+j2r
+j2r
+jtks2z1
+j1t
+jt2ks
+jt1k
+j2ve
+j2v
+j2v
+j2ze
+j2z
+j2z
+j2z
+j2j1alj
+j1ja
+j2j1a2z
+jj1s
+j1j
+jje2le1s
+j1je
+jje1le
+jje2le1si
+jje2lest
+jje2l1l
+jje1l
+jj1e2r
+j2j1im
+j1ji
+j2j1iz
+jj1v
+j1j
+jj1z
+j2j1ol
+j1jo
+j2j1os
+jj1pr
+jj1g
+j1j
+jka1pr
+j1ka
+jk1ard
+jka1u2
+j2k1e2g
+j1ke
+j2k1e2l
+j2k1e2s
+j1k2p1e2k
+j1k
+jk1pe
+jki1a2
+j1ki
+jki12
+j2k1id
+jki1e2
+jk2la
+jk2l
+j1k2li
+j1k2lo
+jk1me2
+j2k1old
+j1ko
+jko2r12s
+jko1r
+jko2r1in
+jko1ri
+jk11r
+j1k
+jk1pl
+jk1pr
+j1k2r
+j1k2ri
+j1k2r
+jk1st
+j2k1u2s
+j1ku
+jk1g
+j1k
+jk2va
+j1k2v
+j2l1abl
+j1la
+jl1a2da
+j2l1a2lap
+jla1la
+j2l1all
+j2l1ar
+jla2t1e2
+j2l1a1zo
+jls3s
+j1l
+jl12t1a
+jl1tn
+jl1bl
+jl1e2g2y
+j1le
+jle12
+jl1e1l
+jl1ell
+jl1eln
+jles2ztks2z1
+jles2z
+jlesz1t
+jleszt1k
+jle2t12te
+jle1t
+jl2cel
+j1l
+jl1ce
+jl2c3s2
+j2l12v.
+jli2k
+j1li
+jl1i1ko
+j2l1ind
+j2l1inf
+j2l1int
+jl1obj
+j1lo
+j2l1ol
+jlo2n1
+jlo2ni
+j2l1s
+j1l
+jl1pr
+jl1sp
+jl1st
+jl1t2r
+jme2g
+j1me
+jme2g1o
+jm1o1k
+j1mo
+j2m1old
+jna2l1e
+j1na
+jn2a2lg
+jna1l
+jna2lis
+jna1li
+jn12r
+j1n
+jn12ru
+jn1v1a2
+j1n
+jn1ing
+j1ni
+jn1st
+jn12g
+j1n
+1jo
+jo2g1a2d
+jo1ga
+jo2g1a1ka
+jo2gal
+jo2g1an
+jo2g1a2z
+jo2g12c
+jo1g
+jo2g12l
+jo2g1e2
+jog3g
+jo2g1
+jo2g1ol
+jo1go
+jo2g1or
+jo2g1os2z
+jo1g2
+jo2g1v
+jo2g
+jo2g
+jo2gur
+jo1gu
+jo2g
+2j1o2koz
+jo1ko
+2j1oks
+2j1ok1ta
+jo2laj
+jo1la
+jo2lim
+jo1li
+jo1ma2
+jo2m1ag
+jo2m1an
+jo2mar
+jo2m1as
+jo2m1
+jo2m1e2
+jo2m12t
+jo1m
+jo2mv
+jom1f2
+jo2mij
+jo1mi
+jo2m1ik
+jo2m1is
+jo2m1iv
+jo2m1ol
+jo1mo
+jo2m1or
+jo2m
+jo2m
+jom1p2
+jo2m
+jo2m
+jonc1c
+jon2c2h
+jon2cil
+jon1ci
+jon2c3s
+2j1ond
+jo2p
+jo2pe
+2j1or2r.
+jo2r
+2j1os1to
+2j1os2z
+jo2u1i
+jo1u
+jo2uk
+jo2ur
+jo2ut
+jo2va
+1j
+ja2k
+j1a
+j2g
+j1
+j2r
+j1b2l
+j1b2r
+j2ce
+j2dad
+j1da
+j2dak
+jd1al3l
+j2d1a2n
+jda2t
+j2d1a1to
+j1de2
+j2del
+j2dig
+j1di
+j2diz
+j22d1ol
+j1do
+j1d2
+j2dr
+j2d
+j2d3z
+j1fl
+j1kl
+j1k1ro
+j2l1e2s
+j1le
+2j1nn
+j1p2r
+j2rk
+j1r
+2j12ri
+j2sal
+j1sa
+j2sas
+j2sl
+j1s
+js1r1k2
+j2seg
+j1se
+j2se2m
+j2sn
+j1s
+j2si2p
+j1si
+j2sis
+j2s1o2do
+j1so
+j2s
+js3s
+js1ld
+j2sl
+j1s
+j2s1n
+j2s3zr
+j21s1z
+js2z
+j1t2r
+1j
+j2d
+j2ko
+j2l
+2j1nt
+j2re
+j2r
+j1sv
+j1tv
+2j12v.
+2jv2e.
+j1ve
+j12vez
+2j12vn
+j1v
+j2z
+1j
+j1rl
+j2r
+2j1rt
+j2r
+j2ze
+jpr1ba2
+j1p
+jp2la
+jp2le
+jp2re
+jp2r
+jp2ri
+jp2ro
+jp2r
+jra3d2
+j1ra
+jra1f
+jra1i2
+jrak2r
+jra1p2
+jra1s2
+jra1u2
+jr1di2
+j1r
+jr2sz1e2l
+j1r
+jrs2z
+jr1s1ze
+jr2s1z
+jsa2v1e
+j1sa
+jsa2v1
+jsa2vo
+jsa2v12n.
+jsa1v
+jsa2v12r
+jsg1g
+j1s
+js2ho
+js2k
+js2ki
+js2ni
+js2pe
+js2pi
+js2po
+js2p
+jsp2r
+j1s2ta
+js2ti
+j1s2t
+j1s2to
+j1st2ra
+j1st2ru
+j1s2t
+jszabs1s
+js2z
+j1s1za
+jsza1b
+jsz2l1a2da
+j1s1z
+jsz1la
+jszraz1
+jsz1ra
+jszn3n
+j1s1z
+jsz2k
+jszt2
+j2t1a2da
+j1ta
+jt1a2do
+jt1a2d
+jt1a2lap
+jta1la
+jt1al1k2
+j2t1all
+j2t1alv
+j2t1a2nyag
+jtan2y
+jta1nya
+jta1p2
+j2t1a2p
+jt1a2rom
+jta1ro
+j2t1arz
+jta1s2p
+j2t1atk
+j2t1a2ut
+jta1u
+j2t1c
+j1t
+jt11ga
+j2t1ll
+jt2ra1i
+jt1ra
+j2t12rak
+j2t1r1ka
+jtr1k2
+jt2s3z
+jt12t1a
+j2t1e2g2y
+j1te
+j2t1e2k2e.
+jte1ke
+j2t1e2leg
+jte1le
+j2t1e2le1me
+j2telemz
+j2t1elf
+j2t1elh
+jt1el1j
+j2t1ell
+j2t1elml
+jtel1m
+j2t1e2lo
+j2t1e2l
+j2t1el1p2
+j2t1elr
+j2t1els2
+j2t1elv
+j2t1eml
+j2te2ner
+jte1ne
+j2t1enz
+jt1e2red
+jte1re
+jt1e2rez
+j2t1e2r
+j2t1e2tet1e
+jte1te
+jtete1t
+jt1e2vs
+jte1v
+jt1e1vo
+j2t1e2v
+j2t12le
+j1t
+jt1lm
+j2t1rl
+j2t1rm
+jts3s
+jt1fl
+jt1fr
+j2t1i2d
+j1ti
+jti2m
+j2ti1m
+j2t1i1mi
+j2t1imp
+jt1inf
+j2t1ing
+jt1int
+j2t1i2pa
+j2t1ir
+jti2s
+jt1i1si
+j2t1izg
+jt1i2zo
+j2t12v
+j1t
+j2t12z
+jt1kl
+jt1kr
+j2t1ol1da
+j1to
+j2t1orjb
+jtor3j
+j2t1ors2
+jt1os2z
+j2t1o2x
+jt1a2
+j1t
+jt2ra
+jt1
+jt1p2
+jt1s2po
+jt1s2ta
+jt21st2r
+jt1s2z
+jt1tr
+jt11d
+j1t
+jt1ng
+jt1ss
+jt1a2
+j1t
+jt1e2
+jt12
+jt1p2
+jt1s2p
+jt1pl
+jt1pr
+j1t2ran
+jt1ra
+j1t2rg
+jt1r
+jt2ri
+j1t2roj
+jt1ro
+jt2rf
+jt1r
+jt1sp
+jt1st
+jt1t2r
+j2t1udv
+j1tu
+j2t1und
+j2t1j
+j1t
+j2t1g
+j1t
+j2t12l
+j2t1t
+1ju
+ju2ga
+ju1go1
+ju2had
+ju1ha
+ju2h1a2k
+ju2hal
+ju2h1a2n
+juha2ra
+ju2hat
+ju2hl
+ju1h
+ju2h1e2
+ju2h1j
+ju1h
+ju2h1is
+ju1hi
+ju2hor
+ju1ho
+ju2h
+ju2h
+2ju1la
+2juls
+2jural
+ju1ra
+ju2ru
+ju2sz1a2v
+jus2z
+ju1s1za
+ju2szim
+ju1s1zi
+ju2s1z12
+ju2tak
+ju1ta
+2j1u2tl
+ju1t
+1j
+j1fr
+j2j
+jjj13
+jj1j
+j1pl
+j1p2r
+j1s2p
+j1s2t
+j2s1z
+js2z
+j1szv
+2j1tb
+j2to2n1
+j1to
+2j1tv
+1j
+j2ge
+j2g2y
+j2le
+j2l
+j12l
+j1lt
+j2re
+j2r
+j2r
+j2ta
+j12t
+j2ve
+j2ze
+1j
+j2ri
+j2z
+j2z1abl
+j1za
+j2z1a2d
+jza2j
+j2z1a1j
+jz1ajt
+j2za2kad
+jza1ka
+j2z1akc
+j2z1a2l
+j2z1a2n2y
+j2z1ar
+j2z1as
+jz2a2tan
+jza1ta
+j2z1l
+j1z
+j2z12rad
+jz1ra
+j2z12rn
+jz1r
+j2z1e2l
+j1ze
+j2z1em
+jze2r
+jz1e1r
+j2z1es
+j2z1l
+j1z
+j2z1r1t
+jz1fr
+jzi2g
+j1zi
+j2z1i1g
+j2zill
+j2z1int
+j2z1i2r
+j2z1isk
+j2z1ism
+jz1k2l
+jz1k2r
+j2z1ob
+j1zo
+j2z1ok1ta
+j2z1ol1da
+j2z1olvas
+jzol1va
+j2z1os2z
+j2z12d
+j1z
+j2z12ra1i
+jz1ra
+j2z12r
+j2z1s
+j1z
+j2z1t
+jz1pl
+jz1pr
+jz3sab
+jz2s
+j1z1sa
+j2zs1a2l
+j2zs1l
+j1z1s
+jzscsa2p1
+jzsc2s
+jzs1c1sa
+j2zs1eg
+j1z1se
+j2zsen
+j2zs1er
+j2zs1in
+j1z1si
+jz3sn
+j1z1s
+j2z3sor
+j1z1so
+j2z1s12
+j2z1s1
+jzs1s
+j2zs1u2t
+j1z1su
+jz3s1za
+jzs2z
+jz3s1z
+jz3s1ze
+j2z1ut
+j1zu
+jz12g
+j1z
+2k.
+1ka
+kaa2d
+ka1a
+kat1
+ka1
+ka2ta2
+ka1b2a
+2k1abbah
+kab1b2a
+2k1ab1h
+kabi2n
+ka1bi
+2k1abla2k.
+kab1la
+2k1abla1ka
+2k1abla1k
+2k1ablakb
+2k1ablakh
+2k1ablakk
+2k1abl2akok
+kabla1ko
+2k1ablakon
+2k1abl2akos
+2k1ablakot
+2k1ablakr
+ka1b2le
+ka1b1re
+2k1abs
+ka2c2l.
+ka1c
+ka2c3h
+ka2cs12g
+kac2s
+ka1c1s
+ka2cs1s
+ka1c1s
+ka2c
+ka2c2z
+k1adap
+ka1da
+2kadl
+ka1d
+kads1s
+2k1a2dot
+ka1do
+ka2d1i
+ka1d
+ka2dj
+2k1a2d1so
+ka2d1u
+ka2dz
+k2a1d2r
+kae2gs2z1
+ka1e
+kae2g
+kae2l
+kae2r
+ka2p
+ka1
+ka2r
+ka1f2r
+ka2gan
+ka1ga
+2k1agg
+ka1g2r
+2k1ag2y.
+kag2y
+ka2gyu
+kai2z
+ka1i
+2k1a2jnl
+ka1j
+2k1ajk
+2k1ajth
+kaj1t
+ka2ka1d
+1ka1ka
+ka2ka1d
+kakas3s
+ka2kc
+ka1k
+2k1akc
+ka1k2l
+ka2k2.
+ka1k
+k2a1k2r
+ka1k2ri
+2k1ak2t.
+2k1ak1ti
+ka2la1pa
+ka1la
+2k1a2laptv
+kala1p
+2k1alb
+kal1eg2y
+ka1le
+2k1alf
+2k1al2j.
+2k1al1ji
+2k1al1ka
+2kal1ko
+2k1al1le
+kalma1na2
+kal1ma
+2k1al1ti
+kama2te
+ka1ma
+2k1am1bu
+kana2g
+ka1na
+k1a2na1l
+2k1a2nam
+k1a2nat
+ka2n1e2g
+ka1ne
+ka2n1el
+2kang
+ka2nim
+ka1ni
+ka2n1i2o
+ka2n1iv
+ka2nol
+ka1no
+ka2nd
+ka1n
+2kan1te
+ka2n
+ka2n
+2k1a2ny2a.
+kan2y
+ka1nya
+2k1a2nyag
+2k1a2nya1i
+ka2nyb
+ka1ny
+ka2ny
+ka21a
+ka1
+ka21
+ka2c
+ka21e
+ka2g
+ka21ha
+ka21
+ka21ko
+ka2kr
+ka2p
+ka21
+ka2z
+2kapd
+ka1p
+k1a2p1to
+2kapp
+ka1p2re
+ka1p2r
+2k1ap1r
+ka1p2rof
+k2ap1ro
+k2a2r1a2d
+ka1ra
+ka2rakk
+k2arak
+ka2r1a2k
+kar1a2lap
+kara1la
+2k1arank
+ka2r1a2r
+kara2s
+2ka2ras2z
+2kara2t.
+2karatn
+2kara1to
+ka2ra1u
+ka2r1csh
+k2arc
+ka1r
+karc2s
+ka2r1csn
+ka2r1cst
+ka2r1l
+2k1a2rn2y
+kar2c1el
+kar1ce
+kar2dac
+kar1da
+kar2dl
+kar1d
+ka2rel
+ka1re
+ka2rev
+kar11ke
+ka1r
+kar2kor
+kar1ko
+ka2rl
+ka2r11ne
+karfe2l1
+kar1fe
+ka2rid
+ka1ri
+ka2r1i2ko
+ka2r1ikr
+ka2rind
+ka2r1in2g.
+kar1ingb
+kar1in1ge
+kar1ing3g
+kar1ingr
+ka2r1isk
+ka2r1ism
+k2ari2z
+ka2riz2m2a.
+kariz1ma
+ka2r1i1zo
+2k1a2rom2a.
+ka1ro
+karo1ma
+2karo1m
+kars2
+2k1ar1ti
+kasg1g
+ka1s
+ka2sl
+ka2sid
+ka1si
+kasi2p
+kas1i1pa
+ka2siz
+ka2s1ol
+ka1so
+ka2s12r
+ka1s
+kas2pec
+kas1pe
+ka1s2po
+kas3s1ze
+kas2s2z
+kas3s1z
+2k1as1s1zi
+2k1asszon2y
+kas1s1zo
+kas3s1z
+kast2
+k2a1str
+ka2sr
+ka1s
+kasz1ajt
+kas2z
+ka1s1za
+2kaszat
+ka2szg
+ka1s1z
+kasz1ered
+k2asze1re
+ka1s1ze
+kat1a1r
+k2atar
+ka1ta
+kat1emb
+ka1te
+k2a2tl
+ka1t
+kat1i1ko
+ka1ti
+kat1int
+k2atin
+2k1at1k
+ka2tol1da
+ka1to
+ka1t2ri
+ka2ty
+kat2y
+ka2ud
+ka1u
+2k1a2ul
+kau2n
+kau2r
+kau2s
+kau2ta
+2k1a2u1to
+2k1a2ut2.
+kau1t
+2k1a2utb
+2k1a2ut1
+2k1a2uth
+2k1a2ut1i
+2k1a2utj
+2k1a2utk
+2k1a2utm
+2k1a2utn
+2k1a2uts
+2k1a2utt
+2k1a2utv
+ka2t
+ka1
+ka2z
+2k1a2vat
+ka1va
+2k1a2zon
+ka1zo
+1k
+2k1b
+2k1br
+k2cak
+k1ca
+k2ce
+2k2c3h
+k2c
+k2c3sar
+kc2s
+k1c1sa
+k2csat
+k2c1se
+k2cs12k
+k1c1s
+k2csi2p
+k1c1si
+k2csis
+k2c3sor
+k1c1so
+k2c1s
+k2c1s
+k2c
+k2dab
+k1da
+k2dar
+k2d1c
+k1d
+k2dt
+k2dil
+k1di
+k2d
+k2d1
+k2d12
+k2d3z
+k2f
+2k12g.
+k2ga
+2k1g2a.
+2k1gacs1ka
+kga2c
+kgac2s
+1k3gacs1k
+2k1ga1i
+2k1gak
+2k1gat
+2k1gaz
+2k12g
+2k1gb
+2k12ge
+k12g
+2k1gg
+2k1gh
+2k12gi
+2k1gk
+2k1gn
+2k12go
+2k1gr
+2k1gs
+2k1gt
+2k12gu
+2k12g
+2k12g2y
+2k12h
+k2j
+k2j
+k2lg
+k1l
+2kl1i
+2klk
+2kln
+2klv
+2klz
+2k1lc
+k1l1do
+k2l1e2
+k2ln
+k1l
+2k1llap
+kl1la
+2k1lls
+kl1l
+kl2l1e2
+kl1l2
+kl2lk
+2k1l1l
+2k1llom
+kl1lo
+2k1ll2t.
+k2l
+k2lyod
+kl2y
+k1lyo
+2k12m
+2k12mu
+k2n1ag
+k1na
+k2n1a2n
+k2n1as
+k2nem
+k1ne
+k2n1is
+k1ni
+k2n12
+k2ny1ag
+kn2y
+k1nya
+k2ny1a2l
+k2ny1a2n
+k2nyap
+k2nyar
+k2ny12to
+k1ny
+k2ny1e2
+k2nyis
+k1nyi
+k2nyiv
+k2ny
+2k12po1l
+k1po
+k2po1l
+2k2rad
+k1ra
+k2r1a2g
+2k12rakr
+k2rakt
+kr1ak1ta
+kr1ak1t
+k2r1a2l
+2k12ram
+k2r1a2p
+k2rar
+k2ras
+kr1ass
+2k12rat
+k2raz
+kr1a1zo
+kr1ll
+k1r
+k2r12z
+kr1d2
+k2r1e2
+kr11te
+k1r
+2k12ri1
+k1ri
+1k1r1k
+krki2h
+kr1ki
+krki1
+k2r1old
+k1ro
+k2r1os2z
+k2r
+k2r
+krp1s1zi2
+kr1p2s
+krps2z
+kr1p2szic3
+kr1s2
+krt2
+kr1tr
+k2ruh
+k1ru
+k2r
+ks1ajt
+k1sa
+k2s1ass
+k2s12go
+k1s
+k2s12ra1i
+ks1ra
+k2s1rak
+k2s12r
+k2s1rb
+k2s12ro
+k2s1rr
+k2s1rv
+k2s1rz
+2k12s1s
+2ksst
+k2s1e2
+k2s1i2k
+k1si
+k2sim
+k2sis
+k2s2r
+k1s
+ksk2r
+ks1k
+k2s1ol
+k1so
+k2s1ott
+k2s
+k2s
+k2s
+ks1p
+kst2
+ks1tr
+k2su2t
+k1su
+k2ss
+k1s
+k2s12
+2k12szb
+ks2z
+k1s1z
+k2szr
+ks3z2r.
+2k12szt
+k2s1ze
+k2s1z
+k2szis
+k1s1zi
+k2sziv
+2k12szom
+k1s1zo
+k2s3z
+k2tab
+k1ta
+2k12tad
+k2taj
+k2tal
+kt1a2la
+k2t1a2n
+k2tar
+k2ta1u
+k2t12
+2k1t1be
+k2t1e2
+k2t2g
+k1t
+k1t1fo
+k2tip
+k1ti
+k2t1ir
+k2tis
+k2t
+k1t1l
+2k1t1me
+k2t1os2z
+k1to
+k1t2
+k2tr
+k2t1
+k2t
+k1t1v
+kba2l1
+k1ba
+kbe1e2
+k1be
+kbe2j12rato1ka2
+kbe1j
+kbej1ra
+kbejra1to
+kb2rel
+k1b
+kb1re
+kb2la
+kb2le
+kb2lo
+kb2r
+kb2ri
+kb2ro
+kb2r
+kci21fa
+k1ci
+kci1
+kci21si
+kci2s1orral
+kci1so
+kcisor1ra
+kci2s1pe
+kc2lu
+kcsa2p12g
+kc2s
+k1c1sa
+kcsa1p
+kdi2al
+k1di
+kdi1a
+kd2ra
+kd2r
+kd2re
+kd2ro
+kd2r
+kd2ru
+1ke
+kea2d
+ke1a
+kea2j
+kea2k
+kea2l
+kea2n
+kea2r
+kea2s
+ke2l
+ke1
+ke2r
+ke2t1
+2k1e2b.
+ke2be1i
+ke1be
+ke2bek
+ke2bd
+ke1b
+kecs1alj
+kec2s
+ke1c1sa
+ke2cs1e2ge2k.
+ke1c1se
+kecse1ge
+ke2csr
+ke1c1s
+kecs1n
+ke1c1s
+kecs12r
+ke1d2ra
+keegyez1
+ke1e
+kee2g2y
+kee1gye
+kee2n
+kee2s
+2k1eff
+ke1f2r
+2k1e2gr
+ke1g
+ke2gs2z1
+2kegyb
+keg2y
+ke2gyk
+ke1gy
+kegyhzkz1
+kegy1h
+kegyhz1k
+ke2gy1in
+ke1gyi
+2k1egyl
+2kegyn
+ke2gy
+2kegyr
+2kegys
+ke2gyu2
+ke2gy1
+2ke1gy
+2k1e2k2e.
+1ke1ke
+2k1e2ke1i
+2k1e2kek
+2k1e2k1
+ke1k
+2k1e2kk
+ke1k2l
+ke1k2r
+kek2s1za
+keks2z
+2k1ekv
+2k1e2l1a2d
+ke1la
+ke2l1an
+ke2l1a2t
+2k1elav
+ke2l12g
+ke1l
+2k1e2lef
+ke1le
+ke2lekc
+2k1e2lekt
+ke2l1e2l
+k1e2lemb
+2kele1me
+2kele1m
+k1e2lemh
+2kelemm
+2k1e2lemn
+k1e2lemr
+2k1e2lemz
+ke2l1e2p2e.
+kele1pe
+ke2l1e2pe1i
+kele2p12
+ke2l1e2s
+ke2l1e1s1ze
+keles2z
+kele2t1el
+kele1te
+kele2t1o
+2keley
+ke2l12k
+ke1l
+2k1e2ll
+kel1rh
+kels3s
+kel2s3z
+2k1elhel
+kel1he
+2k1el1ho
+kel1id
+ke1li
+kel2ig
+2k1e2lim
+ke2li1o
+2k1e2l1ism
+2k1e2l12
+2k1el1j
+k1el1l
+2kellt
+2k1elle1n
+kel1le
+2k1elle1n
+2k1ellent
+2k1eln2y
+2k1e2l1os
+ke1lo
+2ke2l2l
+ke1l
+2k1e2l1a
+ke1l
+kel12
+2k1e2l1f
+2k1e2l1h
+ke2l1h
+2k1e2l1
+2k1e2ljel
+kel1je
+2kelkp
+kel1k
+2k1e2lks
+2k1e2ll
+ke2ln2y
+2k1e2l1o
+2k1e2l1r
+2k1e2l1ta
+ke2l1t
+2k1e2ltt
+k1e2lz
+k1el1ra
+2k1el1sa
+2k1el1s
+2k1el1s1z
+kels2z
+kel2t12r2.
+kel1t
+kelt1r
+2k1el1to
+2kel1t
+2kell
+ke1l
+ke2lr
+ke1l
+2k1el2v.
+2k1el1v
+2k1elve1i
+kel1ve
+2k1elvek
+2k1elven
+2kel1vi
+k1elvk
+2k1el1vo
+2k1elvt
+2k1el1v
+ke2lyemb
+kel2y
+ke1lye
+ke2ly1kn
+ke1ly
+kelykz1
+kely1k
+2k1elz
+2k1ember
+kem1be
+kembe2r1e2kh
+kembe1re
+kembere1k
+kembe2r1e2k1i
+2k1embl
+2k1embr
+keme2g
+ke1me
+2k1eml
+2k1emul
+ke1mu
+ke2nal
+ke1na
+2k1en1ci
+kende2rl
+ken1de
+kende1r
+ken2d1k
+ken1d
+2k1en1do
+2k1e2ner
+ke1ne
+2k1en1ge
+ke2n1ip
+ke1ni
+ke2nis
+ke2n1o
+kens3s
+kens2z2
+2k1enyv
+ken2y
+keo2l
+ke1o
+keo2r
+ke2d
+ke1
+ke2h
+ke2l
+ke2r
+ke2pik
+ke1pi
+ke2ral
+ke1ra
+ke2rap
+ke2r1a2r
+ke2r1as
+ke2ra1u
+ke2r1l
+ke1r
+ke2r1r
+ke2rs
+ker2c1s
+kerc2s
+ker2csell
+ker1c1se
+ker1c1s2
+ker2csr
+2ker1de
+2k1er1d
+2k1e2re1ge
+ke1re
+2k1e2rej
+kere2k1eg
+kere1ke
+ker1e2le
+ker1ell
+ker1elv
+ke2r1ember
+kerem1be
+ke2r1e2r
+kere2ta
+kere2t1e2l
+kere1te
+kere2t12
+ke2rg
+ke1r
+ke2r12l
+ke2r1p
+ker11te
+ke2r1id
+ke1ri
+ker1i2ga
+ke2r1ill
+ke2rim
+ke2r1ind
+ke2r1int2
+ke2r1inv
+ke2ri1o
+ker1ist
+ke2r1iz
+ker1k2
+2ker2n1e2l.
+ker1ne
+ke2r1ol
+ke1ro
+ke2ror
+ke2rd
+ke1r
+ke2r12r
+ke2r1de
+ke1r
+ke2r1e
+ke2r1k
+ke2r1o
+ke2r1s
+ke2r1te
+kers2
+ker1sp
+ker1st
+kers2z2
+ker2taj
+ker1ta
+ker2t2p
+ker1t
+ker2ts
+ker2t1eb1b
+ker1te
+ker2teg
+ker2t1es1te
+ker2t1es2z
+ker2tlv
+ker1t
+ker2t12vt
+kert1v
+ker2tn
+ker1t
+ker2tv
+ker2t1r
+ker1t
+ker2t1s
+ker1t1r
+ke2rt
+ke1r
+ker2g
+ke1r
+2k1ese1m
+ke1se
+ke2se1t
+2k1e2sett
+2k1esl
+ke1s
+2k1e2ss
+ke2sis
+ke1si
+2k1estst
+ke1s
+kes1t
+2k1es1k
+2k1e2s
+ke1s2po
+kes3s1z
+kes2s2z
+ke1s1ta
+2k1es1te
+2k1es1t
+2k1es1ti
+2k1estj
+2k1estk
+2k1estn
+ke1st1ra
+2k1est1re
+2k1estt
+2k1estn
+kes1t
+ke2szaj
+kes2z
+ke1s1za
+ke2szp
+ke1s1z
+2k1eszmn
+kesz1m
+kes2ztks2z1
+kesz1t
+keszt1k
+ke2tl
+ke1t
+ke2t1e2kh
+ke1te
+kete1k
+2k1e2te1t
+ke2ti2d
+ke1ti
+ke1t2ra
+ke1t2r
+ke1t2ri
+kettes1s
+ket1te
+ke2td
+ke1t
+keu2r
+ke1u
+keu2s
+kevs3s
+ke1v
+ke2vid
+ke1vi
+2k1e2v
+keze2ts
+ke1ze
+keze1t
+kezetks2z1
+kezet1k
+kez1a2
+ke1z
+kez1e2
+kezks2z1
+kez1k
+2k1ezr
+1k
+2k12ber
+k1be
+2k1br
+k2ge
+k2g
+k2g
+2k12hem
+k1he
+2k12hen
+2k12hes
+2k12he1z
+2k12hezt
+2k1hs
+k2j1ak
+k1ja
+k2j1e1l
+k1je
+k2j
+k2ju2t
+k1ju
+2k12k2e.
+k1ke
+2k12ke1i
+2kkekk
+2kkem
+k2k1e2r
+kkes3s
+kke2s3z
+k2kn
+k1k
+2k12kk
+k1k
+2k12k
+k2lel
+k1le
+2kles
+2k12letek
+kle1te
+2k12letet
+2k1lm
+k2ld
+k1l
+2k12ll
+2k1lr
+2k12l
+k2lya
+kl2y
+k2ly1es2z
+k1lye
+k2lyid
+k1lyi
+k2ly12l
+k1ly
+k1ma2
+k2ma1d2
+k2m1al
+k2m1an
+k2map
+k2m1as2
+k2m1
+kmi2as2
+k1mi
+kmi1a
+k2min
+k2mis
+k2m
+k2mo
+k2m
+k2m
+k2m1u2
+k1na2
+k2n1al
+k2nan
+k2n1ar
+k2n1a1t2
+kndi1o2
+kn1di
+2k12ne1ke
+k1ne
+2k12nekh
+2k12ne1ki
+2k12nek1k2
+2k12nekl
+k2n1e2l
+k2n1em
+k2n1er
+kn11te
+k1n
+k2ni2g
+k1ni
+k2nil
+k2n1ing
+k2no
+k2ny1e2g
+kn2y
+k1nye
+k2ny1elv
+knysze2r1e2t
+kny1s
+knys2z
+kny1s1ze
+knysze1re
+k2ny
+k2p1a2
+k2p1
+kp2r
+k2peg
+k1pe
+k2p1e2l
+k2pel
+k2p1el1t
+k2p1elv
+kpe2r
+kp1e1re
+k2p1ill
+k1pi
+k2pim
+k2p1i2p
+k2p
+2k1pt
+k2p1o
+k2p
+k2p1
+k2p
+kp1s
+kp1t2
+k2pu
+k2p
+k2p12l
+k1p
+k2p12l
+k1ra2
+k2rab
+k2ral
+k2ram
+k2r1an
+k2rar
+k2r1as
+k2rat
+k2r12
+2k1rde1ke
+kr1de
+kr1dr
+2k12retts
+k1re
+k2ro
+k2r
+2k1rtelm
+kr1te
+2krtkb
+kr1t
+2k1rt1ke
+2k1rtkh
+2k1rtkn
+2k1rtkr
+2k1rts
+1krt2i1k
+kr1t
+krt1i
+k2r1u2
+k2r1
+k1r2
+kr11l
+2k1rvek
+kr1ve
+2k1r1z
+k1sa2
+k2san
+k2s12
+k2s12g
+k1s
+k2s1o
+k2s
+ks3s1za
+ks2s2z2
+ks3szer
+ks1s1ze
+ks3szl
+ks1s1z
+k2st
+k1s
+ksz1a2l
+ks2z
+k1s1za
+k22s1z12
+k2szeg
+k1s1ze
+ksze2l
+k2s2zeml
+k2s2zes2z
+k2szd
+k1s1z
+k2sz1k1n
+k2szin
+k1s1zi
+k2szir
+k2s1zo
+k2s1z12
+k22s1z
+k2szr
+k1s1z
+kszt2
+k2s1zu
+k2s1z1
+kt1akar
+k1ta
+kta1ka
+k2takn
+k2t1a1k
+kt1a1la
+kt1asp
+k2tl
+k1t
+k2t1ed
+k1te
+k2t1eg
+k2te2l.
+k2teln
+k2t1e2m
+k2t1ep
+2k2te2r
+kt1e1re
+kt1er1k2
+kt1e1r
+k2te1s
+k2t1es1t
+k2t1es2z
+k2t1e2v
+k2t2
+kt1k
+kt1v
+k2t1i2
+k2t
+k2t1or
+k1to
+kt1os2z
+k1t2
+k2t1r
+k2t1
+k2tud
+k1tu
+k2t12
+2ktv
+2k12v.
+2k12vad
+k1va
+2k1vb
+2k12ve1i
+k1ve
+2k12vem
+2k12ven
+2kvet
+2k1vf
+2k1vh
+2k12v2i.
+k1vi
+k2vi2g
+2k12vin
+2k1vk
+2k1vn
+2k1vr
+2k1vs
+2k1vt
+2k12v
+2k1vv
+k2z1a
+k2z12
+k2zeg
+k1ze
+k2z1elt
+kze2m
+kz1e1me
+k2z1e2r
+k2z1ism
+k1zi
+k2z
+k2z1o
+k2z
+kz2s2
+k2z3s
+kz3st
+k2z1su
+k2z1u2
+kfe2l1em
+k1fe
+kfe1le
+kfil2mr
+k1fi
+kfil1m
+kfi2sar
+kfi1sa
+kf2jo
+kf2la
+kf2le
+kf2li
+kf2lo
+kf2l
+kfolyi2k
+k1fo
+kf2o1ly
+kfol2y
+kfoly1i
+kfo2n12
+kf2ra
+kf2r
+kf2re
+kf2ri
+kf2r
+kf2ro
+kf2r
+kf2ru
+kg2la
+kg2n
+kg2ra
+kg2r
+kg2ri
+kg2r
+kg2ru
+kh2t1al
+k1h
+kh1ta
+khelykz1
+k1he
+khel2y
+khely1k
+1k2hi1a
+k1hi
+khi2b
+khi1
+k2hil
+1k2himds2z
+khi1m
+khim1d
+kh2me
+1ki
+kia2d
+ki1a
+ki2a1
+ki2af
+kia2g
+kia2j
+kia2kar
+kia1ka
+kia2kas
+kia2lap
+kia1la
+kia2l
+kia2n
+kia2p
+kia2ra
+kia2s2z
+ki2a1
+kia2v
+ki2z
+ki1
+ki1b2l
+ki1b2r
+2k1i2de1
+ki1de
+2k1i2deg
+2k1i2dej
+2k1i2dt
+ki1d
+2k1i2dz
+2ki1di
+ki2di1o
+2k1i2db
+ki1d
+2k1i2dk
+2k1i2dm
+2k1i2dn
+2k1i2dt
+ki1d1r
+kie2l
+ki1e
+kie2m
+kie2r
+ki2ese2t.
+kie1se
+kie2t
+ki2ew
+ki2d
+ki1
+ki2k
+2k1ifj
+ki1f2r
+ki2g2a.
+ki1ga
+2k1i2gazg
+2ki1g
+ki2gt
+2ki1ge
+ki2gn
+ki1g
+ki2gz
+ki1g2r
+ki1k2l
+ki2konn
+ki1ko
+ki2ko1no
+ki1k2r
+ki1k2ri
+ki1k2v
+2k1il1le
+2kil2y
+ki2lye
+2k1i2m2a.
+ki1ma
+2k1i2ma1i
+ki2mak
+ki2mb
+ki1m
+2k1i2md
+ki2m1i
+ki2mj
+ki2mk
+2k1i2mm
+ki2mn
+2kimr
+ki2mt
+ki2mv
+ki2mit
+ki1mi
+2k1imp
+2k1i2n2a.
+ki1na
+2k1i2na1i
+2k1i2nb
+ki1n
+2k1i2nr
+kin2c1sa
+kinc2s
+kin2c1s
+kin2csel
+kin1c1se
+kin2c1so
+2kind
+2k1inf
+kin2gas
+kin1ga
+2k1inj
+2kins
+2k1integ
+kin1te
+kio2l
+ki1o
+kio2m
+2k1i2onn
+2k1i2o1no
+2kion2t.
+ki3h
+ki1
+2k1i22n.
+2kipar
+ki1pa
+ki1pf
+ki1p2la
+ki1p1le
+ki1p2r
+2k1ips
+2k1i2rat
+ki1ra
+2k1i2rnn
+ki1r
+2k1i2rn2y
+2kirg
+2k1irh
+2k1irk
+2k1i2rod
+ki1ro
+2kirom
+2k1irr
+2k1irt
+ki2sad
+ki1sa
+ki2s1aj1t
+ki2s1akn
+ki2sal
+ki2sa2p
+ki2sas
+ki2sl
+ki1s
+ki2s1e2c
+ki1se
+ki2s1emb
+ki2s12k
+ki1s
+ki2sr
+ki2s2i.
+ki1si
+ki2s1in
+ki2s1i1pa
+ki2s1i2ra
+ki2s1isk
+ki1skl
+kis1k
+2kism
+ki1s2m
+ki1s2min
+kis1mi
+kis2ny
+kisn2y
+kis1o1ko
+ki1so
+ki2s1oros
+kiso1ro
+ki2s2r
+ki1s
+ki2s
+kis1pl
+ki1s2por
+kis1po
+ki1s2p
+ki1sp2r
+kis3s2z
+kist2
+ki1s2tar
+kis1ta
+ki1ste1ri
+kis1te
+ki1s1t
+ki1stop
+kis1to
+ki1str
+ki1s1tu
+ki1t2r
+kit2t1er
+k2it1te
+kit2t1
+kiu2s
+ki1u
+kiu2t
+ki2s
+ki1
+ki2t
+kivz1
+ki1v
+2k1i2v
+1k
+2k12g
+k1g2y.
+kg2y
+k2ja
+k2nal
+k1na
+k2n1rb
+k1n
+k2n1e
+k2n2l
+k1n
+k2n12
+k2r
+2k12re
+2k12r
+2ktm
+kt1a2
+k1t
+kt1e2
+2k12v.
+2k1vb
+2k12ve
+2k12v
+2k12v
+k2z
+k2z
+k2z
+kk1abl
+k1ka
+k2k1a2da
+kk1ajt
+k2k1a2kad
+kka1ka
+k2k1akk
+k2ka1l
+k2k1alj
+k2k1alm
+kka2r2ra
+kka1r
+k2k1a2u
+k2k1a1zo
+k2k1ll
+k1k
+kk1rf
+kk2rok
+kk1ro
+k2k12ru
+kk2s
+k2k11s
+k2k1th
+k2k1tl
+kk11tu
+k2k1tv
+kk12z
+kk1br
+kke2c
+k1ke
+kk1e1c1se
+kkec2s
+kk1e2d2z
+kk1e2g
+kke2l1e2g
+kke1le
+k2k1e2lem
+k2k1el1l
+kke2l1
+kke1l
+kk1e1mu
+kke2ra
+kk1erd
+kkere2ss2e.
+kke1re
+kkere1s
+kkeres1se
+kke2r
+k2k1e2r
+kk1e2ti
+kk1e2v
+k2k1g
+k1k
+k2k12l
+kk2p1e2r
+kk1pe
+k2k12p
+kkpzet2t1eb1b
+kkp1ze
+kkpzet1te
+k2k1r1t
+k2k1rz
+kk1fr
+kk1gr
+kki12
+k1ki
+kk1i2do
+kki1e2
+k2k1i2ga
+k2k1i1g
+k2kill
+k2k1ind
+k2k1ing
+k2k1ink
+k2k1int
+k2k1i2par
+kki1pa
+k2k1i2ro
+kk1is1ko
+k2k1ism
+k2k12r
+k1k
+k2k1z
+k1k2l
+kk2l2.
+kk1l
+k1k2lu
+kko2laj
+k1ko
+kko1la
+k2k1ol1da
+kk1ol1l
+k2k1o2pe
+kkor2d
+k2k1org
+kko2r1os
+kko1ro
+kko2r1t
+kko1r
+k2k1orz
+k2k1oszl
+kkos2z
+kk1p2
+k1k
+kk12r
+kk2l
+k1k
+kk11l
+k2k1nt
+kk1tl
+kk12ri
+k1k
+kk12r
+kk1r1s2
+kk11r
+kk1pr
+kk2ris
+kk1ri
+kk2rit
+kk2r
+kk1sm
+kk1sp
+kk1st
+kk1t2r
+kk1udv
+k1ku
+kk1urt
+k2k1u1t
+k2k1j
+k1k
+k2k1g
+k1k
+kk12l
+k2k12t
+k2k12v
+kk1zl
+kk1r
+k1k
+kk2v
+kla1g
+k1la
+kla3ko
+kla1k1ri
+kla2p12t1a2
+kla1p
+k1la1p1la
+kla1s2k
+kl1ma2
+k1l
+kl2mal
+kl2m1an
+kl2mas
+kl2m12
+kl2m12r1a2d
+klm1ra
+kl2m1e2g
+kl1me
+kl2m1eh
+kl2mel
+kl2mer
+kl2m12r.
+kl1m
+kl2m1r1t
+kl2m1i2k
+kl1mi
+kl2min
+kl2mis
+kl2mol
+kl1mo
+kle12
+k1le
+kle2t1a2n
+kle1ta
+kle2tl
+kle1t
+kle2t1elv
+kle1te
+kle2t1e2r
+kle2t1e2v
+kle2t12r.
+kle1t
+kle2t1t1be
+kle2t12t
+kle2t12v2e.
+klet1ve
+kle2tin
+kle1ti
+kli12
+k1li
+k2li1s
+kli2s
+1k2lm
+k1l
+k2lo1
+k1lo
+k2lopf
+k2lot2y
+kl2rad
+k1l
+kl1ra
+kl2raj
+kl2ra2n
+kl2rat
+kl2ris
+kl1ri
+kl2rol
+kl1ro
+k2lub
+k1lu
+klu2b1a
+klu2b
+klu2b1e
+klu2bir
+klu1bi
+klu2bol
+klu1bo
+klu2se
+klus3s
+klu2s3z
+kma1b2
+k1ma
+kmai2ko
+kma1i
+kmas2
+km2nya2n
+k1m
+kmn2y
+km1nya
+kme2ge
+k1me
+kme2g1o
+knag2
+k1na
+knak2
+kna1kr
+kni2a2
+k1ni
+kni1ka2
+kni2k1al
+kni2k1as2
+kni1s2z2
+knc1c
+k1n
+1ko
+ko2z
+ko1
+ko2be
+2k1obs
+ko2c1ho
+koc2h
+2k1o2dav
+ko1da
+2k1o2d
+kogs1s
+ko1g
+ko1g2r
+ko2kd
+ko1k
+2ko1ke2
+ko2k1er
+2k1o2k1ir
+ko1ki
+2k1o2k
+2k1okl
+2k1okm
+2k1o2kol
+1ko1ko
+2k1o2koz
+kok2s1ze
+koks2z
+2k1ok1ta
+ko2l1ajt
+ko1la
+kol11ro
+ko1l
+2k1ol1d
+2k1ol1d
+ko2lid
+ko1li
+ko2l1i1g
+k1o2limp
+ko2l1i2n2a.
+koli1na
+ko2li1ta
+kol2l1ad
+kol1la
+kol2ll
+kol1l
+kol2le2l
+kol1le
+kol2les
+kol2l1t
+kol1l
+ko2l
+2k1oltr
+kol1t
+2k1olvas
+kol1va
+2k1om1bu
+ko2mil
+ko1mi
+kom2p12r.
+kom1p
+kom2p1ol
+kom1po
+ko2n1a2d
+ko1na
+ko2naj
+ko2n1a2l
+ko2n1a2n
+ko2n1ar
+ko2n1as
+ko2n1a1u
+ko2n1l
+ko1n
+konc1c
+kon1c2
+kon2c2h
+kon2c1s
+konc2s
+kon2c3so2r.
+kon1c1so
+kon2c3so1ro
+ko2n1e
+ko2n12r.
+ko1n
+ko2nir
+ko1ni
+2konog
+ko1no
+ko2n1ol
+ko2nor
+ko2n
+ko2nyag
+kon2y
+ko1nya
+ko2nyal
+ko2nye
+ko2ny
+konz2
+ko2n
+ko1
+kop2s
+ko1p
+2kopc
+2kop1ti
+ko2r1a2d
+ko1ra
+ko2rag
+ko2r1aj
+ko2r1a2n
+kor1ass
+ko2r1aszt
+koras2z
+ko2r1ss
+ko1r
+ko2r12szokh
+kors2z
+kor1s1zo
+ko2r12szokr
+ko2r1tl
+2k1orc2h
+kor2csal
+korc2s
+kor1c1sa
+kor2dad
+kor1da
+kor2d1ag
+kor2d1a2s
+kor2dc
+kor1d
+kord1d
+kor2d1e2l
+kor1de
+kor2dem
+kor2des
+k1ordt
+kor1d
+kor2d1
+kor2d2z
+ko2reg
+ko1re
+ko2r1e2l
+ko2r1e2r
+ko2r1e2s
+kor1f2
+korgs1s
+kor1g
+2k1o2ri1e
+ko1ri
+kor1ill
+ko2r1in1te
+kor1isk
+ko2r1i2zom
+kori1zo
+ko2ros2z
+ko1ro
+ko2r1o2v
+ko2r11i
+ko1r
+ko2rn
+ko2r
+ko2r
+2k1or2r.
+2k1orrk
+2k1orrt
+kor1s2
+kortrsa2d
+kor1t
+kortr1sa
+kor1t2r
+ko2r11to2
+ko1r
+ko2r
+ko2s1as
+ko1sa
+ko2sl
+ko1s
+ko2se
+kos3s1ze
+kos2s2z
+kos3s1zo
+kos3s1z
+2k1ostr
+ko2s
+ko2szal
+kos2z
+ko1s1za
+ko2szer
+ko1s1ze
+ko2szir
+ko1s1zi
+ko2s1z2
+k2o1s1zo
+ko2s1z
+2kosz1t
+kotks2z1
+ko1t
+kot2ks
+kot1k
+kots2
+kot1st
+ko2ut
+ko1u
+ko2vi1
+ko1vi
+ko2xi
+koza2tal
+ko1za
+koza1ta
+kozks2z1
+ko1z
+koz2ks
+koz1k
+kozkz1
+koz1k
+2koz1
+1k
+ka2d
+k1a
+k1b2l
+k1br
+kc3c
+k2cem
+k1ce
+k2c2h
+k2d1ab
+k1da
+k2dak
+k2d1a2l
+k2d1a2n
+k2daz
+k2d1l
+k1d
+kd1d
+k2d1e2l
+k1de
+k2dem
+k2d1e2r
+k2d1es
+k2d1s
+k1d
+k2din
+k1di
+k2d
+k2d
+k2d1z
+kd2z
+k2r
+k1
+k1f2r
+ki2g
+k1i
+k2v
+k1
+k1k2r
+k1kv
+2k12n2.
+k1n
+k2nt
+2k12n2i.
+k1ni
+2k12no
+k2pan
+k1pa
+2k2p1as
+k2p1e2l
+k1pe
+2kph
+k1p
+2kpih
+k1pi
+kpi1
+k2pir
+2kpiv
+2kplem
+kp1le
+2k2p1ob
+k1po
+2kpo1k
+k1p2
+k2p1r
+k2p
+2k12ra1a
+k1ra
+k2r1a2c
+2k12ra1i
+k2r1a2n
+k2ras
+k2rb
+k1r
+k2rd
+k2rg
+k2r1i
+k12rj
+k2rm
+k2rn
+k2rr
+k2rt
+k2rv
+k2rel
+k1re
+kre2s
+k2rj
+k1r
+k2r11ve
+k2r1ir
+k1ri
+k2r1ok
+k1ro
+kro2ka
+kro2ko
+2krd
+k1r
+k2r11d
+k2r
+2k12s1g
+k1s
+k2s1os
+k1so
+k1s2pe
+k1s1pi
+k1s2po
+k21st2r
+k2s12
+k2s3z1ra
+k21s1z
+ks2z
+2k12v
+k2z1a2m
+k1za
+1k
+k2ba
+k2da
+k2d
+k2del
+k1de
+k2der
+k2dev
+k2do
+k2d
+k2du
+k2d
+k2d2z
+2k12ko
+2k1k1r
+kl2csa2l
+klc2s
+kl1c1sa
+kl2c1s
+kl2csel
+kl1c1se
+kl2c1s12
+2k12lel
+k1le
+kles3s
+2k12ls2s2z2
+kls3s
+k1l
+k2l
+k2l1e2
+k1l
+kl1ta2
+kl2tal
+kl2t1e2v
+kl1te
+2k1ng
+k1n1t
+k1n1t
+k1ntv
+kny2v1a
+kn2y
+kny2v
+k2ra
+k2r
+k1r1d
+k2red
+k1re
+k2r1e2g
+k2rk
+k1r
+k2r1tt
+kr1f2
+k2ri2k
+k1ri
+k2r1iz
+k2ro
+k2r
+k2r12l
+k1r
+k2r12
+kr1p2
+kr1s2
+krt2
+kr1tr
+k2ru
+k2r
+kr2l1et
+k1r
+kr1le
+kr2l
+k2r1ls
+kr2l
+k2r1l2.
+2k1r2v.
+2k1rvb
+2k1rvh
+2k1rvn
+2k1r1v
+2k1rvr
+2k1rvt
+2k1r1v
+2k1r1v
+2k1rvv
+k1szt
+ks2z
+2k1t1l
+k1t1v
+2k12v.
+2k1vb
+kve2t1e2kh
+k1ve
+kve1te
+kvete1k
+2k1vh
+2k12vig
+k1vi
+2k1vr
+2k1vv
+k2za
+k2z
+k2zen
+k1ze
+k2z12k
+k1z
+k2z1
+k2zo
+k2z
+kz1e2
+k1z
+k2z3s
+k2zu
+k2z
+k2z12l
+k1z
+k2z12l
+1k
+ka2n
+k1a
+k1bl
+k2c2h
+k1d1ra
+ke2k
+k1e
+ke2l
+ke2r
+k2l
+k1
+k2ne
+k1f2r
+k1gn
+k1gr
+ki2t
+k1i
+k1kr
+k1pl
+k1p2r
+kr1a2n
+k1ra
+k12re1i
+k1re
+kre2s
+kr1es2z
+k12r2i.
+k1ri
+k2ril
+k2rip
+k2riv
+k1rl
+kr1s2
+k2rl
+k1r
+2k1rz
+k1s2k
+k2s
+k1s2t
+k1tr
+ku2t
+k1u
+kp1ra2
+k1p
+kp2rad
+kp2r1at
+kp2r1l
+kp1r
+kp2r1t
+kp1r
+kp2la
+kp2le
+kp2l
+kp2lu
+kp2t
+k1p
+kp2ra
+kp2re
+kp2r
+kp2ri
+kp2r
+kp2ro
+kp2r
+kp2s2z
+k2rac2h
+k1ra
+kra2c1hi
+1k2rajc
+k2rakk
+kra1p
+kr2s1z1e
+k1r
+krs2z
+kren2d12
+k1re
+k2re1o
+k2re1p
+1k2rmh
+k1r
+1k2rml
+1k2rmr
+1k2rist
+k1ri
+1k2riti1ka
+kri1ti
+1k2riti1k
+1k2ritikusab
+kriti1ku
+kritiku1sa
+1k2ritikusa2k.
+1k2ritikusan
+1k2ritikusn
+1k2ritiku1so
+1k2ritikus1s
+1k2roket2t.
+k1ro
+kro1ke2
+1k2rokod
+kro1ko
+kro2n1a2
+kro2n
+kron1d2
+kro2n1e
+kro1str
+kro1szf
+kros2z
+kr2ma2r
+k1r
+kr1ma
+kr2m1e
+kr22mis
+kr1mi
+1k2rnik
+kr1ni
+k2s1a2r
+k1sa
+ks1e1lo
+k1se
+ks2g1e1le
+k1s
+ks1ge
+ks2gis
+ks1gi
+ksg2l
+k3s1g
+ks2g11l
+k1s2k
+ks2ko
+ks2l
+ks2lu
+ks2mi
+k1s2ni
+ks2pa
+ks2pe
+ks2pi
+ks2po
+ks2p
+ksp2r
+ks2r
+k1s2ta
+k1s2t
+ks2ti
+k1s2t
+ks2to
+k1st2r
+k1s2tu
+k1s2t
+k2sz1a2d
+ks2z
+k1s1za
+ksza1e2
+k2szag2y
+k2sz1aj
+ksza2ke
+ksza2k
+ksza2k12
+k2sz1am
+ksz1an2y
+k2sz1a1r
+k2sz1g
+k1s1z
+kszraz1
+ksz1ra
+k2sz1e2g2y
+k1s1ze
+k2sz1e1la
+ksze2m1ss
+ks2zems
+ksze1m
+ksze2m12s1z
+ks2zems2z
+ksze2m1szh
+ksze2m1szn
+k2sze1mu
+k2sz1eng
+k2szev
+ksz1let
+k1s1z
+ksz1le
+ksz2t1
+k2sz1id
+k1s1zi
+kszi2p
+ksz1i1pa
+ksz1isk
+k2szr
+k1s1z
+k2sz1old
+k1s1zo
+k2szol1t
+k2s2z1os2z
+ksz2g1ell
+k1s1z
+k3sz1ge
+ksz2g1elv
+kszt2
+k2s2zu1ni
+k1s1zu
+k2szut
+k2sz1g
+k1s1z
+k2szt
+k2sz12z
+ksz1z
+kt1a2da
+k1ta
+kt1a1j
+kt1a2lap
+kta1la
+k2t1alb
+k2t1all
+kta2n12s
+kta1n
+kta2n12
+kta1p2
+k2t1arm
+kt1a2ud
+kta1u
+kt1a1zo
+k2t1br
+k1t
+kt1l1l
+k2t1lm
+ktra2d
+kt1ra
+kt2r1a1da
+kt2r1a1d
+kt2raj
+kt2r1az
+k2t1tf
+k2t1tv
+k2t1e2g
+k1te
+k2t1elg
+k2t1elh
+kt1el1j
+k2t1ell
+k2t1els2
+k2t1elv
+k2t1enz
+kte2rad
+kte1ra
+kte2ral
+kte2rr
+kte1r
+kte2rt
+kte2reg
+kte1re
+kte2r1e2l
+kte2r1in
+kte1ri
+kte2ros2z
+kte1ro
+k2t1esem
+kte1se
+kt2l
+k1t
+k2t1rl
+k2tr1mi
+k2t1r1te
+k2t1ss
+k2t12vet
+kt1ve
+kt1fr
+kt1gr
+k2t1id
+k1ti
+kti2g
+k2t1i1g
+kt1ill
+kti2m
+kt1i1ma
+k2t1ind
+k2t1inf
+k2t1i2onn
+kti1o
+k2t1i2o1no
+k2t1i2onr
+k2t1i2ont
+k2t1i2r
+k2t1isk
+k2t1ism
+k2t1i2vs
+kti1v
+k2t1g
+k1t
+k2t12r
+kt2v1e2l
+kt1ve
+kto1g2
+k1to
+kto2n1
+k2t1o2pe
+kto2ras
+kto1ra
+kto2r1e2
+kto2rol
+kto1ro
+k2t1s
+k1t
+k2t1t
+kt1pr
+k1t2ran
+kt1ra
+k1tra1u
+k1trf
+kt1r
+k1t2rn
+k1t2ri1
+kt1ri
+ktro2n
+kt1ro
+ktr2o1s
+ktros2z2
+k1t2rn
+kt1r
+kt1sp
+kt1st
+kt1s2z
+kt1t2r
+ktu2m1e
+k1tu
+ktu2min
+ktu1mi
+ktu2sab
+ktu1sa
+ktu2s1an
+ktu2szr
+ktus2z
+ktu1s1z
+ktu2s1ze
+ktu2s1z
+kt2l
+k1t
+k2t11l
+k2t1t
+k2t12v
+1ku
+ku2r
+ku1
+kue2l
+ku1e
+kue2r
+kue2s
+ku1f2r
+2k1u2go
+2k1ugr
+ku2gya
+kug2y
+2k1uj2j.
+2k1ujj2a.
+kuj1ja
+2k1ujjad
+kuj2j1a2da
+2k1ujja1i
+2k1ujjak
+2k1ujjal
+2k1ujjam
+2k1ujjas
+2k1ujjat
+2k1uj1j
+2k1ujjb
+2k1ujjg
+2k1ujjh
+2k1uj1ji
+2k1ujjk
+2k1ujjn
+2k1uj1jo
+2k1ujjp
+2k1ujjr
+2k1ujjs
+2k1ujjt
+2k1uj1ju
+2k1uj1j
+kuk2k1olh
+kuk1ko
+kukk1ol2j.
+kukk1ol1ja
+kukk1ol1j
+kukk1ol1tu
+kuk2k1olv
+kuk2k12
+kula1k
+ku1la
+kul2csal
+kulc2s
+kul1c1sa
+kul2c1se
+kulus1s
+ku1lu
+ku2m1a2d
+ku1ma
+ku2mal
+ku2m
+ku2nad
+ku1na
+ku2nal
+ku2n1s
+ku1n
+ku2ne
+ku2ni1
+ku1ni
+kun3n
+ku2nor
+ku1no
+ku2n12
+ku2n
+2kupr
+2ku1pu
+ku2rad
+ku1ra
+2k1u2ra1i
+ku2rak
+2kural
+ku2ram
+ku2r1u
+ku1r
+2k1urn
+ku2rol
+ku1ro
+kuru2c3s
+ku1ru
+ku2sal
+ku1sa
+ku2sas
+ku2sl
+ku1s
+ku2s1e2
+ku2sis
+ku1si
+ku2s1i2z
+ku2s12
+ku2s
+kus3s1ze
+kus2s2z
+ku2s1
+ku2s
+ku2szal
+kus2z
+ku1s1za
+ku2sza2r
+kusz1e2s
+ku1s1ze
+ku2sz12l
+ku1s1z
+ku2sz12p
+ku2szt
+ku2sz1il
+ku1s1zi
+ku2szis
+ku2s1z2
+2k1u2ta1l
+ku1ta
+2k1u2ta1s
+2k1u2taz
+ku2tl
+ku1t
+2k1u2tn
+2k1utc
+2k1u2tol
+ku1to
+2k1u2td
+ku1t
+ku2t1p2
+ku2um
+ku1u
+ku2z2s
+1k
+k2j
+2k1js
+k2p1a2
+k2p1
+k2p1e
+k2t1a2
+k2t12
+k2t1e
+kt1f2
+ktfl1
+k2tos
+k1to
+k2t1
+2k2tu
+k2t12
+1k
+k2ge
+k2g2y
+2k12lep
+k1le
+k2lo
+kl2t1
+2knn
+2k12reg
+k1re
+2k12r
+k2r
+2k1st
+k2s1z
+ks2z
+k2s1z
+2k1tk
+kvs3s
+k1v
+2k12v
+2k12ze
+1k
+2k1rh
+2k1rm
+k2ro
+k2r1s
+k1r
+k2z
+k2z
+1k2van
+k1va
+k2varc
+kv2nyol
+k1v
+kvn2y
+kv1nyo
+kvro1si2
+kv1ro
+kv2se2l
+k1v
+kv1se
+kv2so
+kvs3s
+1k2vin
+k1vi
+1k2vitt
+k2v1ta
+k1v
+k2v1t
+kv1c1sa2
+k1v
+kvc2s
+1ky
+kyd2n
+ky2fajtn
+ky1fa
+kyfajt2
+kyfaj1t
+ky2fajtr
+ky2fajtt
+ky1i2s
+ky1i2v
+kyk2k
+kyk2ne
+ky2se
+ky2s12ve2g.
+ky1s
+kys1ve
+ky2s12veget
+kysve1ge
+ky1z
+kza2tal
+k1za
+kza1ta
+kza2t1e2
+kza2t12
+2l.
+1la
+laa2d
+la1a
+lat1
+la1
+la2ta2
+2labr
+la1b
+3labd
+l2a1b1lo
+2labr
+2l1abs
+la2c1ag
+la1ca
+la2c1aj
+la2c1al
+la2cem
+la1ce
+la2c1e1te
+la2c3ha
+lac2h
+la2c1h
+la2c1ho
+lac1i1ta
+la1ci
+lac2k1orr
+lac1ko
+lac1orr
+la1co
+la2c12
+la2c
+la2csalj
+l2acsal
+lac2s
+la1c1sa
+la2c3sg
+la1c1s
+la2c3sor
+la1c1so
+lac3s2l
+la1c1s
+la2c3st
+lac3s2z
+la2c
+la2c
+2l1a2da1ta
+la1da
+2l1a2datb
+2l1a2dat1k2
+2l1a2datn
+2l1a2da1to
+2l1a2datr
+2l1a2dat1t2
+2l1a2da1tu
+ladsks2z1
+la1d
+lads1k
+lads1s
+l2ad1di
+2l1adl
+2l1a2dog
+la1do
+2l1a2do1m
+3l2a3don
+2l1a2dotts1g
+ladott1s
+ladi2ko
+la1d
+lad1i
+2l1a2duk
+la1du
+la1dy2
+lae2d
+la1e
+lae2l
+lae2r
+la2d
+la1
+la2p
+la2r
+2laff
+la1fl
+la2gac
+la1ga
+lag1a2d
+la2g1a2n
+lag1ass
+la2g1a2t
+la2ga1u
+la2gav
+la2gg
+la1g
+lag1ll
+la2g12r.
+la2g12r
+la2g1rb
+la2g12re2
+la2g12r
+la2g1rf
+la2g1rh
+la2g1rk
+la2g1rn
+la2g12ro
+la2g1rr
+la2g1r1s2
+la2g1rt
+la2g1e1re
+la1ge
+la2gs
+la1g
+la2gid
+la1gi
+la2g1i2k
+la2gim
+la2gis
+la2g
+la2g1ont
+la1go
+la2g1os2z
+la2gc
+la1g
+la2g12r
+la2g1v
+la2gn
+la1g
+la2g1ud
+la1gu
+la2g1ur
+la2g1ut
+la2g1
+la2g
+2l1ag2y.
+lag2y
+2l1agyb
+2l1a2gyi
+la2gy
+la2i2re
+la1i
+la2jag
+la1ja
+la2j1a2l
+la2jap
+la2j1ar
+laj1ass
+laj1a2s2z
+la2j1az
+la2j1l
+la1j
+2l1a2jnl
+la2j1rh
+l2ajr
+la2j1rn
+la2j1rs
+la2j1rt
+la2js
+la2j1th
+la2j1ts
+la2j1elt
+la1je
+la2jen
+la2j1es
+la1ji2
+la2jin
+la2j1is
+la2j
+la2j1ol
+la1jo
+la2j1oml
+la2j1or
+2lajoz
+la2j1r
+la1j
+la2j1s
+la1j
+la2j
+l2ajs
+laj1s2z
+la2j1u2t
+la1ju
+la2j12
+la2kad
+la1ka
+lak1alj
+l2akal
+la2k1alm
+la2k1a2lo
+lak2a2t1a2n
+l2aka1ta
+la2k1c
+la1k
+la2k1lk
+lak1ll
+la2k1rn
+lak1ss
+lak1s
+2lak1ci
+la2k1eg
+la1ke
+la2k1e2l
+la2k12r.
+la1k
+la2kr1te
+la2k1i1ko
+la1ki
+la2k1r
+la1k
+3laktsil
+lak1t
+lakt1si
+lak2k1as
+lak1ka
+lak2ke2c
+lak1ke
+lak2kel
+lak2kol
+lak1ko
+2l1akkor
+lak2k2l
+lak1k
+la1k1lu
+2l1aknb
+lak1n
+2l1aknh
+2l1akns
+la2kob
+la1ko
+l2a2k1op
+l2a2k1orm
+la2k1os2z
+l2akos
+la2k1ov
+2lakz
+la1k
+la2k1s
+la1k
+la1k2rm
+l2ak1r
+la1k2ru
+lakt2
+2l1ak2t.
+2l1aktiv
+lak1ti
+la2kuj
+la1ku
+2laku1l
+2lakulg
+2lakulh
+2lakulj
+2lakuln
+2laku1lo
+2laku1l
+2lakuls
+2laku1lu
+2lakulv
+2laks
+la1k
+la2k12to
+2lakv
+2lak1za
+la2la2g1
+1la1la
+l1a2la1ku
+2l1a2l1
+la1l
+lals1s
+2l1alb
+2l1alc
+2l1alf
+2l1aljn
+2l1al1ka
+2l1alkot
+lal1ko
+2l1al1ku
+2l1al1le
+lal2tr
+lal1t
+lal2te
+2l1alt2i.
+lal1ti
+2l1alton1k2
+lal1to
+lal2t12
+lal2t12
+2l1alt1v
+2l1al1vi
+lam1a1da
+l2amad
+la1ma
+la2m1a1ka
+la2m1an2y
+l2aman
+l2a2m1a2p
+la2m1a1r
+la2m1a2z
+l2ame2g
+la1me
+la2m1eg2y
+la2m1e1le
+lam1emb
+la2m1es2z
+la2m2k
+la1m
+lam11le
+la2m1ne
+la2m1rv
+la2minv
+la1mi
+la2m1ism
+la2m1ist
+la2m12
+2l1am1m
+la2m1ol
+la1mo
+lam1org
+la2m1os2z
+l2amos
+la2m12r
+la1m
+la2m
+la2m1ur
+la1mu
+la2m1
+la2nac
+la1na
+l2a2n1a2d
+lana2g
+la2n1aj
+la2nal
+1lan1a1la
+la2nam
+la2nar
+la2n1ll
+la1n
+la2n12ra1i
+lan1ra
+la2n12rak
+la2n12r
+la2n1rr
+la2n1rv
+lans1s
+lan2csel
+lanc2s
+lan1c1se
+lan2csem
+lan2c1si
+lan2csol
+lan1c1so
+lan2d1l
+lan1d
+lan2d1el
+lan1de
+lan2d12r.
+lan1d
+lan2diz
+lan1di
+la2ner
+la1ne
+la2nes
+la2n1p
+la1n
+lan2g1as
+lan1ga
+lan2gen
+lan1ge
+lang3g
+2l1angin
+lan1gi
+lan2g1ol
+lan1go
+la2nil
+la1ni
+l2a2nip
+la2nis
+2l1ankt
+lan1k
+lan1kr
+la2n1os2z
+l2anos
+la1no
+lans2
+lan2tag
+lan1ta
+la2n
+la2nyag
+lan2y
+la1nya
+1lany1a2la
+la2nya1u
+2lany1i
+la1ny
+la2ny1l
+2lanyn
+la2nys
+2lanyv
+la2ny1elem
+l2a1nye
+lanye1le
+lany1e2r
+la2ny12r
+l2a1ny
+la2ny1ol
+l2a1nyo
+la2ny
+l2a2ny
+la2r
+la1
+2l1a2p2a.
+la1pa
+lap1akk
+lap1akt
+1lap1a2la
+l2apal
+lap1alk
+la2p1atm
+la2p1att
+la2p1a2u
+la2paz
+la2pb
+la1p
+la2p12g
+la2pk
+la2pn
+lap12r
+lap1rh
+la2p1rr
+2l1a2ptfal1va
+lapt1fa
+2l1a2ptfalvh
+laptfal1v
+2l1a2ptfalvn
+2l1a2ptfalvr
+2l1a2ptfalvt
+2l1a2ptfal1vi
+2laptom
+lap1to
+la2pe2l
+la1pe
+lap1e1le
+la2pe2m
+la2p1en
+la2p1e2s
+la2pik
+la1pi
+1lap1il1la
+lap1il1le
+la2p1im
+la2p1i2n2a.
+lapi1na
+la2p1ing
+la2p1int
+la2p1i2p
+la2p1i2s
+la2p1i1ta
+la2p1iz
+lap2lat
+lap1la
+la2p1o2ku
+la1po
+lap1or1g2
+lap1orn
+lap1orz
+lapos1s
+la2p2.
+la1p
+la2pb
+la2pn
+la2pr
+la2p
+la2p
+2lappar
+lap1pa
+2lap1r
+lap1s2
+2lapn
+la1p
+2lapv
+la2p
+la2r2a.
+la1ra
+la2ran
+2l1arc
+larc3c
+la2rn
+la1r
+lar2m1e
+lar2min
+lar1mi
+2l1art
+2l1arz
+la1s2pa
+la1s2pi
+la1st1ra
+l2astr
+la2sz1abl
+l2aszab
+las2z
+la1s1za
+la2sz1al2t.
+la2szas
+2l1a2szat
+la2szs
+la1s1z
+la2sz1n
+la1s1z
+la2szd
+la1s1z
+lasz3s
+lasz2t1alj
+lasz1ta
+l1asztam
+la2sz1t
+la1s1z
+la2t1a2d
+la1ta
+la2t1aj
+lat1alak
+lata1la
+la2t1al1k2
+la2t1alt
+lat1a1r
+l2atar
+la2t1a2ro
+lat1ar1ti
+lat1aszt
+latas2z
+lat1att
+la2ta1u
+la2taz
+l2a2t1j
+la1t
+lat1ll
+l2atl
+la2t1rad
+l2atr
+lat1ra
+la2t12ra1i
+la2t12rak
+la2t12ram
+la2t12rat
+la2t12rb
+lat1r
+la2t12rh
+la2t12rn
+la2t12r
+la2t1rh
+la2t1rn
+la2t12rok
+lat1ro
+la2t1rr
+la1t1r1t
+la2t1r1t
+la2t12r
+la2t1rv
+lat12s2z
+l2ats
+la2t11ta
+latdi2al
+lat1di
+latdi1a
+la2t1e2g
+la1te
+la2t1e2lem
+late1le
+la2t1ell
+la2t1emb
+la2tep
+la2t1er1k2
+late2s
+la2t1ess
+la2te1s1ze
+lates2z
+la2t1e1ti
+la2t1e1to
+la2t1e2v
+la2t12ke2
+la1t
+lat12k
+lat1kk
+la2t12r
+l2atr
+la2t12r
+la2tr1te
+la2t1rv
+lat1ss
+la2t1i2ko
+la1ti
+lat1ik1ra
+lat1in1te
+l2atin
+la2t1inv
+la2t1ist
+l2atis
+la2t1iz
+l2a2t1r
+la1t
+lat11v
+lat1k2
+la2toj
+la1to
+la2t1okm
+lat1ol1da
+la2toll
+la2t1oml
+la2t1os2z
+la2t1otth
+la2t11r
+la1t
+la2t11ri
+la2t11vi
+la1t
+la2t12v
+la2t1r
+la1t
+2l1atta1ko
+lat1ta
+2lattv
+la2tut
+la1tu
+la2tl
+la1t
+lat11ze
+l2atz
+l2at2z
+la1t
+la2t11z
+la2ty
+lat2y
+la2u1to
+la1u
+la2u1t
+la2z
+la1
+la2vat
+la1va
+2l1a2vu
+la1y
+la1yig
+lazac1c
+la1za
+laza2c3s
+laz1ma1
+2l1a2zon
+la1zo
+1l
+l2ba2la
+l1ba
+l2bar
+lbas1s
+l2bl
+l1b
+l2b1e2l
+l1be
+l2b1i1na
+l1bi
+l2b1i2z
+lb1org
+l1bo
+lb1orr
+l2b
+l2b
+2lb1r
+l2b1u2s
+l1bu
+l2b
+l1c1s2
+lc2s
+l2cst
+l2cs1il
+l1c1si
+l2csi2p
+l2c1s2
+lda1s
+l1da
+l2d1az
+l2d1e2r
+l1de
+l2det
+l2dim
+l1di
+l2d1or
+l1do
+l2d1ott
+l2d1
+l2dl
+l1d
+l2d2z
+l2gab
+l1ga
+l2ga2c
+lg1a2da
+l2gad
+l2g1a2g
+l2g1al
+l2ga2n
+l2gas
+lg1ass
+lga2t
+l2g1atl
+l2g1a1to
+l2g1att
+l2gl
+l1g
+lg1ll
+l2gm
+l2g12rak
+lg1ra
+l2g12ro
+l2g12to
+l2gp
+l1g
+l2gi2d
+l1gi
+l2g1i2g
+lgi2g
+l2gim
+l2g1ott
+l1go
+l2g12
+l2g
+lg1s
+l2g
+l2g
+2lg2y.
+lg2y
+2l1gy
+l2has
+l1ha
+2l1he
+l2r
+l1
+l2lad
+l1la
+l2l1a1ka
+l22l1al
+lla2n
+l2l1an2y
+l2l1ar
+l2la1u
+l2l1g
+1l1l
+l2l12l
+lls1s
+l2l1tj
+2l1lds
+ll1d
+2l1ldoz
+ll1do
+l2lel
+l1le
+l2l1est
+l2l1e2v
+l2ll
+l1l
+l2lim
+l1li
+l2l1is
+l2l
+2l1llam
+ll1la
+2l1llat
+2l1lls
+ll1l
+2l1llk
+2l1llom
+ll1lo
+2l1llv
+2l1lmaim
+ll1ma
+llma1i
+2l1lmo2k.
+ll1mo
+2l1lmom
+2l1lmos
+2l1lmuk
+ll1mu
+2l1lmunkb
+2l1lokaih
+l2l1o2ka1i
+l1lo
+llo1ka
+2l1lokain
+2l1lokair
+2l1lokn
+l2l1o2k
+2l1lokt
+2l1lo2k1u
+l2lo1ko
+2l1l1o2konk
+2l12l1o2ku
+ll1k2r
+l1l
+ll11r
+l1l2
+l2l1v
+2l12l1u2t
+l1lu
+l2l12t
+l1l
+l2l
+l2l
+l2m1a2d
+l1ma
+l2m1aj
+lm1ass
+l2m1a1u
+l2m1l
+l1m
+l2m12z
+lm1b2
+lm1ell
+l1me
+lm1ern
+lm1e1r
+l2mes
+l2mk
+l1m
+l2m1rv
+l2m1int
+l1mi
+lm1ist
+l2m
+l2m1or
+l1mo
+l2m
+l2m
+l2m
+l2m12t.
+l1m
+l2m
+l2m
+l1na2
+l2nal
+l2n1an
+l2nar
+l2n1as
+l1n2
+l2nr
+lnc3c
+ln2ce2l
+ln1ce
+ln2c1g
+ln1c
+lnc2s2
+ln2c1s
+l2nem
+l1ne
+l2n1er
+l2np
+l1n
+ln2g1at
+ln1ga
+ln2gl
+ln1g
+ln2g1e
+l2nil
+l1ni
+l2n1is
+ln2k1e2l
+ln1ke
+ln2k12ra
+ln1k
+ln2k12v
+ln1k
+l3nok
+l1no
+ln1sp
+ln1s2z
+lnt2
+ln1tr
+l2n
+l2ny1a2d
+ln2y
+l1nya
+l2nyaj
+l2nya1la
+l2nyam
+lnya2n
+ln2y1an2y
+l2nyar
+l2ny1as
+l2nyav
+l2ny1el
+l1nye
+l2ny12r.
+l1ny
+l2ny
+l2ny
+l2pt
+l1p
+l1pi2
+2l12pol
+l1po
+l2rad
+l1ra
+2l12ra1i
+l2ra1ka
+l12rakb
+l12rakk
+l12rakr
+l2r1a2l
+2l12ram
+2l12rat
+l2r1av
+l12raz
+2lre2n
+l1re
+l2res
+l1rkot
+lr1ko
+2l1r1nya
+lrn2y
+lr1s2
+lrt2
+lr1tr
+2l12r2u.
+l1ru
+l2rug
+2l12ruh
+2l12ruk
+2l12rul
+2l12rus
+2l12rut
+2l12ruv
+l2r1a
+l1r
+l2r
+l2s1a2d
+l1sa
+l2s1aj
+l2sal
+l2s1a2r
+l2saz
+l2s12g
+l1s
+l2s12ra1i
+ls1ra
+l2s1rak
+l2s12r
+l2s1rb
+l2s12r
+l2s1rh
+l2s1rr
+2l12ss
+l2s12to
+l2se
+lsegyez1
+ls1e2g2y
+lse1gye
+l2s2r
+l1s
+lsk2ro2k.
+ls1k
+lsk1ro
+l2sott
+l1so
+ls1otth
+l1s2
+2l12s2.
+l2s1r
+l2s
+ls3s1z
+ls2s2z2
+ls3s1zi
+l2su2t
+l1su
+l2s
+l2sza2s
+ls2z
+l1s1za
+ls3zav
+ls3z1ro
+l1s1z
+2lszed
+l1s1ze
+l2szeg
+l2sz1e2m
+l2szen
+l2szi2p
+l1s1zi
+ls2zks2z1
+lsz1k2
+lsz1k
+l1s1z2
+l2sz2l
+l2szv
+lsz3s
+l2s1z
+l2taj
+l1ta
+l2t1e2re
+l1te
+lt2tel
+l1t
+lt1te
+2l1t1he
+2l12t
+2lt1k
+l2t1os2z
+l1to
+l1t2r
+l1t1ri
+2l1t1te
+2l1t1t
+2l1t1t
+l12t12s
+l1t
+2l1t1v
+l1t1vi
+2l1vi
+l2viz
+2l12v
+2l1vu
+l2z1adot
+l1za
+lza1do
+l2z1al
+l2z1rh
+l1z
+lz22rus
+lz1ru
+3lzb
+l2z1el
+l1ze
+l2z1i2s
+l1zi
+l1zo2
+l2z1olt
+l2zsal
+lz2s
+l1z1sa
+l2zsan
+l2z1s
+lz3s2z
+lbes2zlks2z1
+l1be
+lbes2z
+lbe1s1z
+lbesz1l
+lbeszl1k
+l2b1is
+l1bi
+lb2li
+lb2lo
+lb2l
+lb2ra
+lb2re
+lb2ri
+lb2ro
+lb2r
+lb2ru
+lc1ajt
+l1ca
+lc1alk
+lc1a2n.
+l2c1a2to
+l2c1g
+l1c
+l2c1l
+lc3c1si
+lc2c2s
+lc3c1so
+lc3c1s
+l2c1e2le
+l1ce
+lc1elr
+l2c1emb
+lc1emel
+lce1me
+lc1es2z
+l2c1e2v
+lce2z
+l2c1e1ze
+l2c1p
+l1c
+lc11vi
+lc1fr
+l1c3ha
+lc2h
+l1c3h
+l1c3hi
+l1c3ho
+l1c3hu
+l1c3h
+l1c3h
+l2c1i2d
+l1ci
+lci2tr
+lci1t
+lc1v
+l1c
+lc1k2r
+l1c2lu
+l2c1ost
+l1co
+l2c1os2z
+lc1k
+l1c
+lc1s
+lc1pr
+l2cs1a2d
+lc2s
+l1c1sa
+l2csakt
+lcs1alap
+lcsa1la
+l2cs1a2n
+lcsa2p12g
+lcsa1p
+lcs1apr
+lcsa2r
+lcs1a1ra
+lcs1a1ro
+l2cs1a2s
+l2csaz
+l2cs1g
+l1c1s
+l2cs1l
+l2c2s12t1a2
+l2cs1t
+l2c2s1th
+l2c2s1tj
+l2c2stv
+l2csec
+l1c1se
+l2cs1e2g
+l2c3sej
+l2c2s1elf
+l2cs1elt
+l2cs1elv
+lcs1emb
+l2cs1eml
+l2cserd
+lcse2r1e2l
+lcse1re
+l2c2s1e2r
+lc1s1e1se
+lcse2t
+l2cs1e1te
+l2csl
+l1c1s
+l2cs12rs
+lcs1r
+l2csr1le
+l2csr1te
+l2cs1r1t
+lcs1r1ve
+l2cs1r1v
+lcs2sz1k
+lcss2z
+lcs1s1z
+l2cs12te
+l2c2s1tk
+l2c2s12vt
+lcs1v
+l2c2si1d
+l1c1si
+l2csi1mi
+l2c2s1inf
+l2cs1ing
+l2cs1int
+l2cs1i2pa
+l2c2s1irt
+l2cs1isk
+l2cs1ism
+l2csi1ta
+l2cs12z
+l1c1s
+lcs1k2
+l2c2s1okm
+l1c1so
+lcs1ors
+l2cs12l
+l1c1s
+lcs12s
+l1c1s
+lcs1s
+lc3st2r
+l2c3sug
+l1c1su
+lcs1lt
+l1c1s
+lc3s1zo
+lcs2z
+lc3s1z
+lc1tr
+l2c1uj
+l1cu
+lc1l
+l1c
+lc1t
+l1c3z
+lc2z
+l1c3zo
+ld1abl
+l1da
+ld1abr
+l2d1a2c
+l2d1a2da1to
+lda1da
+l2d1a2d
+lda1i2
+lda2lag
+lda1la
+lda2laj
+lda2l1e2g
+lda1le
+lda2le2l
+ld2a2les
+lda2l12l
+lda1l
+lda2li2z
+lda1li
+lda2l12
+lda2los
+lda1lo
+ldalt2
+l2d1ant
+lda2nya
+ldan2y
+lda2ny
+ld1a1p
+l2d1aran
+lda1ra
+l2d1arc
+l2d1ark
+lda2t1as
+lda1ta
+lda2t1eg
+lda1te
+ld2a2t1in
+lda1ti
+lda2t2s
+lda1t
+ld1g
+l1d
+ld1ll
+ld1lm
+ld1rn
+lds3s
+ld1br
+ld1eg2y
+l1de
+l2d1e2kk
+lde1k
+l2d1e2kn
+l2d1e2k1t
+l2d1e2l1a
+l2d1e2le1me
+lde1le
+l2d1e2le1mi
+l2d1e2lemn
+l2d1elr
+lde1l
+l2d1el1ha
+l2d1elk
+l2d1el1l
+l2d1e1lo
+l2d1e2lh
+lde1l
+l2d1e2lvez
+ldel1ve
+l2d1els
+l2d1el1t
+l2d1el1v
+l2d1ember
+ldem1be
+l2d1e2mel
+lde1me
+l2d1eml
+lde1p2
+ld1e1pe
+l2d1e2r
+ld1e2v
+l2d1ex
+l2d12g
+l1d
+l2d12jr
+ld1j
+ld1lm
+l2d1p
+l2d1rc
+l2d11r
+l2d12ri
+l2d1r1te
+l2d1rz
+l2d1s2z
+ld2ves
+ld1ve
+ld1fl
+ld1fr
+ld1gl
+ld1gr
+l2d1i2ga
+l1di
+l2d1i1g
+l2d1ill
+l2d1i1mi
+l2d1ind
+l2d1int
+ldi2p
+ld1i1pa
+l2d1i1s1za
+ldis2z
+l2d1n
+l1d
+l2d1r
+l2d1z
+ld1kr
+ld1kv
+ldo2g1as
+l1do
+ldo1ga
+l2d1o1la
+l2d1old
+l2d1olt
+l2d1oml
+ld1orc
+ld1org
+l2d1os2z
+l2d12r
+l1d
+l2d11ri
+l2d1b
+l1d
+ld1k1le
+l2drk
+ld1r
+l2d1v
+ld11ri
+l1d
+ld1sk
+ld1pl
+ld1pr
+ld2rt
+ld1r
+ld1sp
+ld1st
+ld1udv
+l1du
+ldu2r
+ld1u1ra
+ldus3s
+l2d1u2t
+l2d1j
+l1d
+l2d1r
+l2d12t
+l2d1g
+l1d
+l2d11le
+l2d1r
+l2d1z
+l2d1r
+l1d
+l1d3z
+ld2z
+l1d3z
+l1d3zu
+1le
+lea2b
+le1a
+lea2d
+lea2g
+lea2k
+lea2l
+lea2n
+lea2p
+le2a1r
+lea2s2z
+lea2v
+le2j
+le1
+le2s
+le2z
+2l1e2bd
+le1b
+le2bin
+le1bi
+le1b1la
+le1b1lo
+le1b1ra
+leb2rek
+leb1re
+leb2s
+2lecc
+2l1e2cet
+le1ce
+2l1ecset
+lec2s
+le1c1se
+le1d2res
+led1re
+le1d1ro
+lee2s
+le1e
+le2r
+le1
+lefo1na2
+le1fo
+lefo2nal
+le1f2r
+le2ga1la
+le1ga
+lega2r
+le2g1a2s
+le2g1ll
+le1g
+le3g21to
+le3g2z
+le3geb
+le1ge
+le2g1e2g
+le3g2ele2m.
+lege1le
+leg1ell
+le3g2el1a
+lege1l
+le3g2elj
+le3g2el1k
+legelks2z1
+le2g1elks
+le3g2elt
+le3ge2l1ze
+le2g1e2lz
+le3g2elv2e.
+legel1ve
+le3g2el1v
+le2ge1ne
+le3g2erj
+le3g2e2s.
+le3g2eseb
+lege1se
+le3g2esek
+le3g2ese2n.
+le3g2esn
+le3g2esr
+le3gest
+le2g1e2s2z
+leg2d
+le1g
+leg2l
+le3gn
+legg2
+le2gid
+le1gi
+le2g1is
+legmeg1
+leg1me
+le3g2on
+le1go
+le2g1v
+le1g
+le3gng
+le1g
+le2g1s
+legpec1
+leg1pe
+legvz1
+leg1v
+le1gy2
+leg2y
+2legyb
+2legyed
+le1gye
+l1e2gyel
+legy1e2lr
+legye1l
+l1e2gyen1ge
+l1e2gyk
+le1gy
+le3gyi
+2l1egyl
+le3gyo
+2legys
+l1egy1s
+le3gy
+le3gy
+2l1egyv
+lei2g
+le1i
+le2i1ni
+lei2r
+lei2s
+lej2t1
+le2kad
+le1ka
+le2k1a2p2u.
+leka1pu
+le2k1l
+le1k
+lek2p
+le2k11ra
+le2k1rb
+2l1e2k2e.
+le1ke
+le2k1eg
+lek1els
+lek1emb
+lek1e1me
+lek1erj
+lek1e2r
+le2k1r1t
+le1k
+2l1e2k2s.
+le2k1id
+le1ki
+le2kij
+le2k1ik
+lek1ist2
+le2kiz
+lekks2z1
+lek1k
+le1k1li
+lek1olt
+le1ko
+le2k1orz
+le2k12r
+le1k
+le2k12
+2lekt1ro
+2lekt1r
+le2k12t
+le1k
+le2kd
+le1k
+lekvks2z1
+lek1v
+lekv1k
+2l1e2l1a2d
+le1la
+l1el1do
+2l1e2lekt
+1le1le
+lele2ma
+2l1e2leme1i
+lele1me
+2l1e2lemek
+2l1e2lemes
+2lelemz
+lele2t1a2
+lele2tel
+lele1te
+lele2to
+2lelg
+le1l
+2l1e2l1r
+lelsks2z1
+lels1k
+lels1s
+lel2s3z
+2l1el1go
+2l1el1ha
+2l1el1h
+2l1elhel
+lel1he
+l1el1ho
+le2lim
+le1li
+lel1ing
+le2liz
+2l1el1j
+2l1el1l
+2l1el1l
+2l1el1l
+2l1elmj
+lel1m
+2l1elms
+2l1elnev
+lel1ne
+2l1el1n
+2l1eln2y
+2l1e2l1os
+le1lo
+2l1e2l12l
+le1l
+2l1e2ll
+le1l
+lel1
+2l1e2l1fo
+le2l1
+le2l1s1z
+lels2z2
+l1el1so
+l1el1s
+2l1el1s1z
+lels2z
+2l1el1ta
+l1eltv
+lel1t
+2l1eltr
+lel1t
+2l1el1to
+l1el1t
+2l1el2v.
+2l1el1v
+2l1elvt
+lel1v
+2l1elvh
+l1elvn
+2l1elvs
+2l1elz
+2l1e2me2l.
+le1me
+2l1e2meld
+l1emeled
+1leme1le
+l1emelek
+2le2me1l
+l1emels
+2l1e2melg
+le2melh
+l1emel1he
+2l1e2me1li
+2l1e2melj
+l1emellek
+lemel1le
+2l1e2meln
+le2me1l
+2l1emel2.
+2l1emels
+le2mels
+le2melt
+l1emel2t.
+l1emel1t
+l1emel1t
+2l1e2me1l
+le2melv
+l1emel1ve
+lem1erk
+le2m1es2s2z
+lem1eszt
+lemes2z
+le2m1e2ti
+le2m12k
+le1m
+1le2m11le
+lem1l1te
+le2m1lv
+lem1r1de
+2l1e2mss
+le2m1ill
+le1mi
+le2mind
+le2m1ing
+le2m1is2z
+le2mi1ta
+le2m1itt
+l1emle1ge
+lemle1g2
+lem1le
+le2mo2k
+le1mo
+le2mol
+le2m1org
+le2m1os2z
+le2m12r
+le1m
+le2m2l
+le1m
+le2m12
+lem1p2
+le2m1u2r
+le1mu
+le2n1a2d
+le1na
+le2nal
+le2n1l
+le1n
+le2nt
+lenc1c
+len2cel
+len1ce
+len2c1e1me
+l2end
+le2n1e2g
+le1ne
+le2n1e2l
+le2ner
+lene2tel
+lene1te
+len2k
+le1n
+le2n11ke
+le2n1kk
+le2n1kt
+len2l
+len11l
+lens3s
+le2n1s2z
+le2n12v.
+len2g1e2l
+len1ge
+le2nid
+le1ni
+le2n1ip
+le2no2k
+le1no
+le2nol
+le2n1or
+le2n1v
+le1n
+le2n11r
+le1n
+len1s2p
+len1s1ta
+len3sze2r1e2l
+lens2z
+len1s1ze
+lensze1re
+lent2s12g
+len1t
+lent1s
+len1t1ra
+len1t2ren
+lent1re
+le1nu2
+le2n1ur
+le2n1ut
+le2n1g
+le1n
+le2n1t
+2l1enyv
+len2y
+le2o1a
+le1o
+le2oc
+le2og
+leo2k
+le2o1li
+leo2m
+le2oz
+le2c
+le1
+le2r
+le1
+le2p1aj
+le1pa
+lepa2p
+le1p1a1pa
+lep1l1la
+le1p
+le2p1eg
+le1pe
+1lepe2le
+le2pk
+le1p
+le2pl
+lep1il1l
+le1pi
+le2p1iz
+le1p2lo
+le2p1os2z
+le1po
+le2p12d
+le1p
+lep2p1elv
+lep1pe
+le1p2r1se
+lep1r
+le1p2ri
+le1p2ro
+le1p1r
+le2p12lh
+le1p
+lep1l
+2l1er1d
+2l1e2reid
+le1re
+lere1i
+2l1e2reir
+le2re1j
+le2r1k
+le1r
+ler11te
+le2r1il
+le1ri
+le2rir
+2lerz
+le1r
+le2r2.
+le1r
+le2rb
+le2rc
+le2rd
+le2rf
+le2rg
+le2r1i
+le2rk
+2l1erl
+le2rm
+le2rn
+le2rp
+le2rr
+le2rt
+le2rv
+le2s1al
+le1sa
+le2s1l
+le1s
+l1es1d
+2lese1ge
+le1se
+le2s1e2kh
+lese1k
+2l1ese1m
+l1e2setb
+2l1e2sete1i
+lese1te
+lese2tel
+2l1e2se1t
+l1e2seth
+l1e2se1ti
+l1e2setk
+l1e2setn
+lese2t1o2
+l1e2setr
+le2s1s
+le1s
+le1s2ka
+le1s1ki
+2l1es1k
+le1s1la
+le1s2li
+le1s1ma
+le1s2mi
+le1s2p2
+les3s1za
+les2s2z
+les3s1z
+le1s2tar
+les1ta
+le1stemp
+les1te
+2l1esten
+l1est1be
+les1t
+l1es2t12j
+2lest2i.
+les1ti
+le1s2til
+2l1estj
+2lestr
+l1estt
+2l1esz1k
+les2z
+le1sz1to
+le2t1ab
+le1ta
+le2ta2c
+let1a2la
+let1all
+le2t1am
+le2t1a1na
+le2t1apr
+le2t1e2kb
+le1te
+lete1k
+le2t1e2la
+le2t1elb
+le2t1elf
+let1elk
+let1el1a
+lete1l
+le2t1e2l1k
+let1elr
+let1e2mel
+lete1me
+le2t1eml
+le2te1ne
+le2t1ent
+let1ered
+lete1re
+le2t1e1r
+le2t1er1k2
+le2tes1t
+let1eszk
+letes2z
+2l1e2te1t
+2l1e2teth
+2l1e2tetj
+2l1e2tetv
+le2t1d
+le1t
+le2t12j
+let2l
+1let11le
+let11l
+let1lv
+le2t12nekn
+let1ne
+le2t1rb
+le2t12re2n
+let1re
+le2t12ri
+le2t1rr
+le2t1r1t
+let12rl
+let1r
+let2s2z
+let1ter
+let1te
+let12t2.
+let1t
+let2ve1de
+let1ve
+let1ves
+le2t12vb
+let1v
+le2t1v1i
+le2t12vr
+le2t12vt
+le2t12vv
+le2ti2d
+le1ti
+let1ikr
+le2t1ill
+le2tim
+le2t1ing
+le2t1ist
+leti2s2z
+let1i1s1zo
+le2ti1v
+le2tod
+le1to
+le2t1o2k
+le2t1on
+let1o1ra
+le2t1ox
+le2t12r
+le1t
+le2t12v
+le1t
+lete3d
+le1t
+let1e
+le2t11ri
+3letrajzoc
+let1ra
+letraj1zo
+letta2n12c
+let1ta
+letta1n
+let2teg
+let1te
+let2l
+le1t
+le2t11l
+let11z
+2let2y
+leu2g
+le1u
+leu2r
+leu2t
+2leve1ne
+le1ve
+2leve1n
+2leve1n
+l1e2ve2z.
+l1e2vezg
+l1e2vezh
+l1e2vezn
+l1e2vezt
+le2ve1z
+l1e2vezv
+levl1l
+le1v
+le2vo1l
+le1vo
+le2x
+le2x1el
+le1xe
+le2x1e2p
+le2x
+lexks2z1
+lex1k
+le2x
+le1y
+le2zer
+le1ze
+lez1a2
+le1z
+leze2r
+lez1e
+lez2n
+lez1
+lez1s2p
+2l1ezr
+1l
+2l1br
+l2ca
+l2c
+lc3c
+l2c1k
+l1c
+l2c3h
+l1ci2
+l2cim
+l2co
+lc2s2
+lc3sk
+l2d1as
+l1da
+l2d1el
+l1de
+l2d1emb
+l2d2l
+l1d
+l2d1s
+l2dil
+l1di
+l2dos
+l1do
+l2dot
+l2d
+l2d12
+le2r
+l1e
+l2r
+l1
+l1f2r
+l2gal
+l1ga
+lg12ra2m1ol
+l1g
+l2g12ram
+lg1ra
+lgra1mo
+l2g1e2c
+l1ge
+2lged
+l2g1eg
+lg1ell
+lg1els
+l2g1em
+l2g1e2r
+lg12r.
+l1g
+2l12gs
+l1ghet
+lg1he
+l2gil
+l1gi
+2l1g
+l2g1
+2l2g
+l1gtem
+lg1te
+l1gtet
+l1gtl
+lg1t
+l2g
+2l1g
+l2g12g
+l12gn
+l2gyel
+lg2y
+l1gye
+l2gyes
+l2gyi2
+l2gyo2
+l2gy
+3lgz
+lh1as2z
+l1ha
+2l12h2e.
+l1he
+l2hed
+l2h1em
+2lhes
+2lhet
+2l12he1z
+l2h1
+l2hol
+l1ho
+2lhs
+2l12j.
+2l12ji
+2l1jj
+2l1js
+2l12jl
+l1j
+l2kab
+l1ka
+l2k1a2d
+l2k1a2g
+l2k1aj
+l1k1a1ka
+l2k1a2la
+lk1ant
+lka2p
+l2k1a1po
+l2k1as
+lka2t
+lk1a1to
+l2k1a2u
+l2k1av
+l2kaz
+l2k1e2g
+l1ke
+l2k1e1p2
+lk1ern
+l2ke1s
+l2k1e2s2z
+lk1e1v
+l2k12k
+l1k
+lk2l
+l2k11le
+l2k1lv
+l2k12te
+l2ki2d
+l1ki
+l2kt
+l1k
+lkkz1
+lk1k
+lk1or1s2
+l1ko
+l2k1os2z
+l2k12l
+l1k
+l2kr
+l2kz
+l2k
+l2k1u2r
+l1ku
+lk2l
+l1k
+1l2k11l
+l2k1lt
+lkve2g
+lk1ve
+l1lc
+2l12l2e.
+l1le
+2l12le1i
+2l12les
+l2lb
+1l1l
+l2ln
+l2lr
+2l1lm
+llks2z1
+l1l
+ll1k
+2l1lr
+l2lk
+l1l
+2l12l
+2l12mel
+l1me
+l2nag
+l1na
+l1n2
+l2nekb
+l1ne
+2l12nekl
+l2nel
+2ln1k
+l2no
+l2ny2
+ln2y
+l2p1a2l
+l1pa
+l22p1el
+l1pe
+lp1ern
+lps3s
+l1p
+2l12p
+l2p
+2lpl
+l1p
+1l2p1l
+l3r1a2d
+l1ra
+l2ral
+l2rap
+l2ras
+l2rat
+l2rav
+l2r1
+2l1r2c.
+2l1r1de
+l2reg
+l1re
+l2r1e2l
+l2r1ember
+lrem1be
+l2r1e2s
+2l12re2z.
+2l12rezv
+l2r12j
+l1r
+2l12rs
+2l12rik
+l1ri
+l2ris
+l2rit
+l2r
+2l1r1ni
+2l1r1n
+l2r1os2z
+l1ro
+l2r
+2l12r2.
+l1r
+l2rd
+2l12r1e
+l2r1i
+2l12rj
+2l12rk
+l2rn
+2l12rt
+2l12rv
+2l1rtelm
+lr1te
+2l1rtk
+lr1t
+2l1rtj
+2l1rt2.
+lr1t
+l2rut
+l1ru
+2l1rvel
+lr1ve
+2l1rvn
+lr1v
+2l1r1ze
+2l1r1z
+l1sa2
+l2s1aj
+l2sak
+l2sal
+l2sar
+l2s1az
+l2s12
+l2seg
+l1se
+l2s1e2l
+l2s1e1ti
+l2s12g
+l1s
+l2ss
+l2s1ikr
+l1si
+l2s
+l2s1
+ls3s1za
+ls2s2z2
+ls3szer
+ls1s1ze
+ls2l
+l1s
+1l2s11l
+l2s11l
+l2s1t
+lsz1k
+ls2z
+l1s1z
+2lszst
+2l1szl
+ls3z1se
+lsz2s
+l2tag
+l1ta
+l2taz
+l2t1eg
+l1te
+l2te2l.
+lt1e2lo
+lt1e1l
+lt1elv
+l2te1ne
+l2te1s
+l2te1t
+2l12teth
+l2te1ti
+2l12tetn
+l2te1t
+l2tev
+l2t12r.
+l1t
+l2t1r1te
+l2t12te
+l2t1is
+l1ti
+l2tt
+l1t
+2ltl
+l2t1o2k
+l1to
+3l21t
+l2th
+l3tl
+l2t12r
+l1t2
+lt11r
+lt2rg
+lt1r
+l2tu2n
+l1tu
+2l12vad
+l1va
+2l1vb
+2l12v2e.
+l1ve
+2l12ved
+2l12ve1i
+2l12vek
+2l12v1elf
+2l12v1e1li
+2l12vem
+2l12ven
+2l12ve2t.
+2l12vb
+l1v
+2l12vh
+2l12v1i
+2lvn
+lv1rt
+2l12vt
+2l12vv
+2l1vf
+2l1vh
+2l12v2i.
+l1vi
+2l12vi2g
+l2vir
+l2vis
+2l1vk
+2l1vl
+2l1vm
+2l1vn
+2l12v
+2l1vr
+2l1vs
+2l1vt
+2l1v
+l2vk
+l2vn
+2l12v
+2l1vv
+2l1vz
+lfa2l1e2
+l1fa
+lfat2
+lfa1tr
+lf1aut
+lfa1u
+lf1cl
+lf1e1se
+l1fe
+lfe2t
+lf1e1ti
+lf2l12v
+l1f
+lf1l
+l2f1lm
+lf2m1e2k
+lf1me
+lfi2d1
+l1fi
+lfin3n
+lfi2nos
+lfi1no
+lf1i1ro
+lf1isk
+lf1kl
+lf2lo
+lf2l
+lf2l
+lf2lu
+l2f1ok1ta
+l1fo
+l2f12r
+l1f
+lfldi2h
+l1f
+lfl1di
+lfldi1
+lfldi2ne
+lf1pr
+lf2r
+lf2ri
+l1f2r
+l1f2ro
+lf2r
+lf2r
+lf1sp
+lf1s2z2
+l2f11l
+l1f
+lga1p2
+l1ga
+lgati2ko
+lga1t
+lgat1i
+lga1u2
+lg2r1as
+l1g
+lg1ra
+lg2pe2lem
+l1g
+l3g2pel
+lg1pe
+lgpe1le
+lgs3s
+lgi2as
+l1gi
+lgi1a
+lg2la
+lg2lo
+lg2l
+lgr2c1so
+l1g
+l3g2rc
+lgrc2s
+l1g2ra
+lg2ru
+l2gy1ad
+lg2y
+l1gya
+l2gy1ag
+l2gyaj
+lgy1a1la
+lgy1alj
+lgy1an2y
+l2gy1a2s
+l2gy1a1u
+l2gyb
+l1gy
+l2gyl
+l2gy1e2g
+l1gye
+l2gye1l
+l2gy1e2le
+l2gy1elz
+l2gyem1be
+lgy1e1r
+l2gy1esem
+lgye1se
+l2gy1e2v
+l2gyl
+l1gy
+l2gy12r.
+l2gy1s
+l2gyid
+l1gyi
+l2gyikr
+l2gy1ip
+l2gyis
+l2gy1ok
+l1gyo
+l2gy1ol
+l2gyop
+l2gy1os
+l2gy12r
+l1gy
+l2gy12r
+l1gy
+l2gy1s
+l2gy1u2t
+l1gyu
+l2gy1t
+l1gy
+lha1i2
+l1ha
+lh2n1al
+l1h
+lh1na
+1li
+li2a1a
+li1a
+li2a1
+li2a1bi
+li2a1bo
+lia2c
+li2a1ci
+li2ac2s
+li2a1cu
+li2a1d2
+li2a1e
+li2a1
+li2ag
+li2ah
+li2aid
+lia1i
+li2a1
+li2aj
+li2akp
+lia1k
+li2a1la
+li2a1le
+1li2a1li
+li2a1m
+li2a1mo
+li2a1o
+li2a1
+li2a1
+li2ap
+li2a1ra
+li2a1r
+li2a1s
+li2a1so
+lia1s2z
+li2a1s1za
+li2a1s1z
+li2a1s1z
+li2aszf
+li2a1s1zi
+li2a1t2
+lia2u
+li2a1
+li2av
+li2az
+li3be
+lic3s2z
+lic2s
+li2c
+li2de1
+li1de
+2l1i2deg
+li2dn
+li1d
+li2dt
+2l1i2di
+2l1i2d
+li2ec
+li1e
+lie2d
+2lien
+li2k
+li1
+li2n
+li2v
+lif2l12v
+li1f
+lif1l
+li2f
+li1f2r
+l2i2g.
+2l1i2gaz
+li1ga
+lign1n
+li1g
+2l1i2g2e.
+li1ge
+2l1i2geb
+2l1i2gek2
+2l1i2gep
+li2gb
+li1g
+li2gh
+li2g1i
+li2gj
+li2gk
+li2gn
+li2gr
+li2gs
+li2gt
+li2gv
+li2gz
+li1g2ra
+li2hat
+li1ha
+2l1ihl
+2l1i2ke2r.
+li1ke
+2l1i2kerb
+lik2k1ell
+lik1ke
+lik2k1elv
+lik2k1e2r
+lik2krd
+lik1k
+li1k1r
+2lill
+2lim2a.
+li1ma
+2l1i2md
+li1m
+li2mk
+li2mv
+l1im1bo
+lime2r
+li1me
+2lim1po
+li1m1
+li2nakr
+li1na
+li2nal
+lin1an2y
+lin1a1r
+2l1i2na2s.
+lin2c1s12
+linc2s
+2l1in1du
+li2neg
+li1ne
+link2
+li1n
+2l1inger
+lin1ge
+lin1ing
+li1ni
+lin1inj
+lin1kl
+lin3n2y
+2l1integ
+lin1te
+2l1intz
+lin1t
+li2n1u2s
+li1nu
+li2n1ut
+2l1i2n
+li2oc
+li1o
+li2o1g
+lio2l
+li2o1ni
+li21ke
+li1
+li21
+li1
+li2d
+li21e
+li2f
+li2g
+li2m
+li2p
+li2p2a.
+li1pa
+li2pa1i
+li2p1aj
+li2p12r
+li1p
+li2pt
+li2peg
+li1pe
+li2p1e2l
+li2p1es2z
+li2p
+li2p12
+2l1i2ram
+li1ra
+2l1i2rat
+2l1i2rn
+li1r
+2l1irh
+li2rig
+li1ri
+li2rod
+li1ro
+2l1irr
+2l1irt
+li2sl
+li1s
+li2s1el
+li1se
+lise2s
+li2sid
+li1si
+lis1isk
+2l1iskol
+lis1ko
+lismers1s
+lis1me
+lisme1r
+lis1p
+2l1is1p
+2l1isten
+lis1te
+2l1istr
+li2s12t
+li1s
+lis12v
+2l1iszl
+lis2z
+lisz2t12z
+lisz1t
+lisz2t1e2lk
+lisz1te
+liszte1l
+li2t1a2g
+li1ta
+2l1i2ta2l.
+li2ta1la
+li2t1al1k2
+li2t11ta
+li1t
+li2t1e2g
+li1te
+li2t1e2l
+li2t1emb
+li2tez
+li2t1rd
+li1t
+li2tr1te
+li2til
+li1ti
+lit1int
+li2t1i2o
+li2t1is
+li2t1okt
+li1to
+li2tn
+li1t
+li1t2
+li2t1r
+l1ittak
+lit1ta
+l1ittas
+l1ittat
+li2t1u1ra
+li1tu
+li2t
+li1
+2l1i2vad
+li1va
+l1i2vot
+li1vo
+l1i2v
+3li2x.
+l1i2zl
+li1z
+2l1i2zn
+2l1i2z1s
+l1iz1gu
+2l1iz1mo
+2l1iz1z
+2l1iz1z
+1l
+l2g
+l2ja
+l2ju
+l1ma1
+l2n2y
+l2nyenc1
+l1nye
+l1rd
+l1rh
+l1rj
+l1rl
+l2rod
+l1ro
+l12rog
+l2rok
+l2rom
+2l12r
+l1rs
+l12ru
+lts3s
+l1t
+lt1a2
+l1t
+2l2v.
+l1va1
+lvak2
+l12z.
+2l12ze
+l21zi
+lzis3s2
+2l1zl
+2l12z
+l12z
+l2j1a2da
+l1ja
+l2j1e2l
+l1je
+l2j1er
+ljes1s
+ljharc1
+lj1ha
+l2j1ip
+l1ji
+l2j1ir
+l2j1iz
+lj1r
+l1j
+l2j1or
+l1jo
+l2j1os
+lj1pr
+lj1sp
+lj1z
+l1j
+lka1sl
+l1ka
+lka2tel
+lka1te
+lka2t1
+lk2a2tin
+lka1ti
+lka2t12
+lk2p1ell
+l1k
+lk2pel
+lk1pe
+lk2p1e2r
+lk2s1za
+lks2z
+lk2sze2l
+lk1s1ze
+lkia2k
+l1ki
+lki1a
+lki12
+l1k2lin
+lk1li
+lk2l
+l1k2lu
+lkodks2z1
+l1ko
+lko1d
+lkod2ks
+lkod1k
+lk2z12n.
+l1k
+lk1z
+l1k2r
+l1k2rmb
+lk1r
+l1k2ri
+lk2r
+l1k2ro
+l1k2r
+lkuks2z1
+l1ku
+lku1k
+lk2va
+lk2v
+lk2v
+lla2dj
+l1la
+lla1d
+lla1f2
+lla2g1ad
+lla1ga
+ll2a2gal
+lla2g1a2s
+lla2gl
+lla1g
+lla2gen
+lla1ge
+lla2gp
+lla1g
+llag3g
+lla2gol
+lla1go
+ll1a2ja
+ll1a2kad
+lla1ka
+l2l1akc
+l2l1a2kz
+lla1k
+l2l1ak1ti
+llakt2
+l2l1a2lap
+lla1la
+l2l1alm
+ll2a2mad
+lla1ma
+lla2mal
+lla2mem
+lla1me
+lla2ml
+lla1m
+lla2mor
+lla1mo
+l2l1a2nal
+lla1na
+lla2nyer
+ll2a1nye
+llan2y
+lla2ny12
+ll2a2pal
+lla1pa
+ll1aszf
+llas2z
+llata2l
+lla1ta
+l1la2ta1la
+llat1an2y
+ll2atan
+ll2a2t1l
+lla1t
+lla2t1r1a2d
+ll2atr
+llat1ra
+lla2t1rb
+lla2ts
+lla1t
+lla2tint
+ll2atin
+lla1ti
+llatk2rok
+llat1k2
+llat1k
+llatk1ro
+lla2t1olt
+lla1to
+l2lato1mo
+lla2tors2
+ll2ator
+lla2t1
+l2l1at2y
+l2l1aut
+lla1u
+l2l12ga
+l1l
+l2l1gb
+l2l1gg
+l2l1g2y.
+llg2y
+l2l11gy
+l2l1l1lo
+l2l1lm
+ll2mag
+ll1ma
+ll2m1al
+ll2m1e2
+ll2m1r1t
+ll1m
+ll2mik
+ll1mi
+ll2mis
+ll2m1ut
+ll1mu
+lln2k1e2
+l2l12p
+ll1ra2
+ll2r1ad
+ll2rak
+ll2r12
+ll2s1ikr
+ll1si
+ll2s
+ll2s1za
+lls2z
+l2l1td
+l2l1tf
+l2l12ti
+l2l1tk
+ll1bl
+ll1br
+ll1cl
+ll1d2r
+l2l1e2d2z
+l1le
+ll1eff
+lle2g1e2l2s.
+lle1ge
+llege1l
+lle2ger
+lleg1g2
+lle2gy
+lleg2y
+lle12
+l2l1e2ks
+lle1k
+lle2l1a
+lle2lin
+lle1li
+l2l1ell
+l2l1e2l1a
+lle1l
+l2l1e2ld
+lle2m1a2
+lle2m1
+lle2m1e2g
+lle1me
+lle2mel
+l2l1e2me1l
+llem1ell
+lle2mer
+lle2m1l
+lle1m
+lle2m12r.
+lle2m1r1t
+lle2m1o2
+lle2mu
+llemzks2z1
+llem1z
+llemz1k
+lle2na
+llen3n
+lle2n12re
+lle1n
+llens2
+l2l1e2redm
+lle1re
+lle2r1in
+lle1ri
+l2l1e2r
+l2l1e2r
+l2l1e2st
+lle1s
+l2l1estr
+lle2tos
+lle1to
+l2l1e2vet
+lle1ve
+l2l1ex
+l2l12g.
+l1l
+l2l12het
+ll1he
+l2l12jek
+ll1je
+ll2k1aps
+llka2p
+ll1ka
+ll1k2
+ll2kr
+ll2k1ol
+ll1ko
+ll2kos
+ll2k
+ll2k12t
+ll1k
+l2l12le2t.
+ll1le
+l2l12letb
+l2l12le1te
+l2l12letn
+llle1t
+l2l12lett
+l2l12letk
+l2l1lt
+l2l1lv
+ll3ny1a2
+lln2y
+ll1sp
+l2l12ter
+ll1te
+l2l12v.
+l2l12vn
+ll1v
+ll1f2l
+ll1fr
+ll1gr
+ll1i1de
+l1li
+llig2
+l2l1i2ga
+l2l1i1g
+l2l1ill
+l2l1i2ma
+l2l1imp
+ll1in2a.
+lli1na
+l2l1ind
+ll1in1ga
+lli2nin
+lli1ni
+l2l1inv
+lli2p
+l2l1i1pa2
+l2l1i1r
+l2l1i1ro
+l2l1i1si
+ll1is1ko
+l2l1ism
+l2l1is1te
+l2l1i2ta
+l2l1i1z
+ll1iz1ma
+ll1iz1m
+l2l1i2zo
+l2l1g
+l1l
+l2l1j
+l2l12v
+ll1k2l
+ll1k2r
+ll1kv
+llmeg1
+ll1me
+l2l1o1
+l1lo
+ll1obj
+l2l1o2l
+ll1o2pe
+llos3s
+ll12
+l1l
+ll1gr
+ll12
+ll2rk
+ll1r
+l2l2rt
+ll2ri1
+ll1ri
+l2l1vo
+l2l1b
+l1l
+l2l1l
+ll1nt
+l2l1r
+ll1ss
+ll1s2z
+l2l12z
+l2l12r.
+l1l
+ll12re1i
+ll1re
+l2l12r
+l2l1rt
+l2l12si
+l2l12z2e.
+ll1ze
+ll1p2l
+ll1p2r
+ll2s2i.
+ll1si
+ll1sk
+ll1sp
+lls3s
+lls2z2
+ll1szt2
+ll1t1r
+ll1t1ri
+ll1t1r
+ll1u2bo
+l1lu
+l2l1ug
+ll1ult
+llus1s
+l2l1u2t
+l2l1s
+l1l
+l2l12to
+l2l1d
+l1l
+l2l1g
+l2l1r
+l2l1t
+l2l1z
+l2l1z
+l1l
+llv2d1e2l
+ll1v
+llv1de
+l2l2y
+l1ly1
+1llyw
+lma2kad
+l1ma
+lma1ka
+lm2a1k1r
+l2m1ant
+lma1t1r
+l2m1att
+lm2l
+l1m
+lm1lm
+lm11lo
+lm2nya2n
+lmn2y
+lm1nya
+lm2ny1t
+lm1ny
+lm2ris
+lm1ri
+lm1tk
+lm1tt
+lm1b2l
+lm1b2r
+lm1cl
+lm1dr
+lme3gon
+l1me
+lme2go
+lme1k2l
+lme1k1ri
+l2m1elb
+lm1e2li
+lm1elm
+lm1e2l
+l2m1ember
+lmem1be
+l2m1enc
+l2m1eng
+lme12
+lm1e1pi
+l2m1e2se1t
+lme1se
+l2m1es2s2z
+l2m1etn
+l2m1e1t
+l2m1ex
+lmezks2z1
+lme1z
+lmez1k
+l2m1g
+l1m
+l2m1lv
+l2m12ne1ke
+lm1ne
+lmnyks2z1
+lmn2y
+lmny1k
+l2m1p
+l2m11va
+lm1gl
+lm1gr
+l2m1i2d
+l1mi
+lmi2g
+l2m1i1ga
+l2m1i2gaz1
+l2m1ind
+l2m1inf
+l2m1ing
+l2m1ins
+l2m1in1te
+l2m1in1t
+l2m1inv
+l2m1i2p
+lm1i1r
+lm1i1ro
+lm1isk
+lm1izz
+lm1g
+l1m
+lm1r
+lm1z
+lm1kl
+lm1kr
+lmo1g
+l1mo
+lm1old
+lm1olv
+l2m1o2p
+lm1or1s2
+l2m1ov
+l2m11d
+l1m
+lm12r
+lm12k
+l1m
+lm1n
+lm12r
+lm1s
+lm1t
+lm12z
+lm12r
+l1m
+lm1p2l
+lm1p2r
+lm1sk
+lm1sl
+lm1sn
+lm1sp
+lm1st
+lm1s2z2
+lm1t2r
+l2m1u2g
+l1mu
+lm1u1ni
+l2m1u2r
+lm1u1t
+l2m1j
+l1m
+l2m1g
+l1m
+l2m1nn
+l2m1z
+lnak2
+l1na
+lna2p1e
+ln2ris
+l1n
+ln1ri
+ln2v1
+l1n
+lni2ker
+l1ni
+lni1ke
+lni2s1
+lnyoms1s
+ln2y
+l1nyo
+lnyo1m
+1lo
+lo2z
+lo1
+lo2b1a2r
+lo1ba
+2lo1b
+lo2b12c
+2lo2be
+lo2b1iv
+lo1bi
+lo2b12
+2lo1bu
+lo1by
+lo2c2h
+lo1d2r1ma
+lod1r
+lo2c
+lo1
+lo21o
+lo2p
+lo2z
+2l1off
+lo2g1a2d
+lo1ga
+lo2gal
+logat2s1orr
+loga1t
+logat1so
+lo2g1l
+lo1g
+logs1s
+lo2ge2r
+lo1ge
+lo2g
+lo2g1or
+lo1go
+lo2g
+lo2g1
+lo2g
+lo2kab
+lo1ka
+lo2k1a2d
+lo2k1ag
+lo2k1aj
+2l1o2kak
+lo2krb
+lo1k
+lo2k12ro
+lo2k1rr
+lo2k11ru
+lo2k1tj
+lo2k1u
+lo2k1e2
+lo2kk
+lo1k
+lo2kid
+lo1ki
+lok1is
+lo2k1i2z
+lo2k
+lokka2l
+lok1ka
+lok2k1a1la
+lok2k1el
+lok1ke
+lok2k12
+lok2ks
+lok1k
+lok2k1ut
+lok1ku
+lo2k1ol
+lo1ko
+l1o2konk
+lo2kor
+2l1o2koz
+lo2k
+lo2laj
+lo1la
+2l1olda2l.
+lol1da
+2l1olda1la
+2l1olda1l
+2l1oldaln
+2l1olda1lo
+2l1oldalr
+2l1olda1l
+2l1o2li
+2l1ol1l
+2l1oltr
+lol1t
+lom1a1d
+lo1ma
+lom1adt
+lo2m1ajt
+lom1a1ka
+lom1a2lap
+loma1la
+lom1a1r
+lom1ass
+lo2m1att
+lo2maz
+lom12c2s
+lo1m
+lo2m2g
+lo2m1l
+lo2m11r
+lom11ri
+lom1rk
+lo2m1rn
+lo2m12ro
+loms1s
+lomba2l
+lom1ba
+lom2ba1la
+lom2bav
+lo2med
+lo1me
+lo2men
+lom1erk
+lom1e2r
+lo2m1e2s
+lo2md
+lo1m
+lo2mk
+lo2ml
+lom12ne
+lo2m11ri
+lo2m1i2d
+lo1mi
+lo2mik
+lo2m1im
+lo2mink
+lom1int
+lomi2s
+lom1is2z
+lo2miz
+lo2m12
+l1om1l
+lo2m1okoz
+lo1mo
+lomo1ko
+lo2mol
+lo2m1o2r
+lo2m1os2z
+lom1ott
+lo2m12
+lo2m
+lo2m
+lom1p2l
+lo2m
+lo2m
+lo2nab
+lo1na
+lo2n1a2d
+lo2n1a2g
+lo2naj
+lo2nak
+lo2n1a2l
+lo2n1ar
+lo2n1as
+lo2n1a1u
+lo2n1av
+lo2n12z
+lo1n
+lon2c2h
+lon2cil
+lon1ci
+lon2d12
+lo2n1e
+lo2n1ir
+lo1ni
+lon1k2
+lo2nol
+lo1no
+lo2n12
+lo2n
+lon1s2
+lon1tr
+lo2n
+lo2o1i
+lo1o
+lo2oj
+lo2s
+lo1
+lo2pap
+lo1pa
+lo2p1l
+lo1p
+lo2pe
+lop1e2l
+lo2pi2z
+lo1pi
+lo2p
+lo2p1o2r
+lo1po
+lo2p1os2z
+lo2p
+lop2p1in
+lop1pi
+lop1t2
+2l1op1ti
+lo2p
+lo2r1e2t
+lo1re
+2l1org
+2l1orm
+2lorn
+2l1ors
+l1orv
+2l1orz
+l2o2s.
+l2o1sa
+l2osb
+lo2se
+lo2s
+lo1sz2k2p.
+los2z
+losz1k
+lo1sz2kpb
+lo1sz2kph
+lo1sz2kpj2a.
+loszkp1ja
+lo1sz2kpjt
+loszkp1j
+lo1sz2kpjv
+lo1sz2kpk
+lo1sz2kpn
+lo1sz2kpo2k.
+loszk1po
+lo1sz2kpo1ka
+lo1sz2kpok1ba
+lo1sz2kpokh
+lo1sz2kpokk
+lo1sz2kpok1n
+lo1sz2kpo1ko
+lo1sz2kpon
+lo1sz2kpos
+lo1sz2kpot
+lo1sz2kpp
+lo1sz2kpr
+lo1sz2kpt
+lo1sz2kpun2k.
+loszk1pu
+2l1ottl
+lo2x
+lo2xi
+1l
+la2d
+l1a
+l2r
+l1
+l1b2l
+l1br
+lc3c
+l2cem
+l1ce
+l2c2h
+lcsa2p12g
+l21c1sa
+lc2s
+lcsa1p
+2l12dt
+l1d
+l1d1ro
+l1e3rejkn
+l1e
+le2re
+lere1j
+lf2l12v
+l1f
+lf1l
+lfi21k
+l1fi
+lfi1
+l1fl
+lg1g
+l2g
+l1g1r
+l2v
+l1
+l1k2l
+l2nar
+l1na
+l12n2.
+l1n
+2l12n2i.
+l1ni
+2lnn
+2l1no
+2lnr
+2lnt
+lpr1ba2
+l1p
+l1p2l
+l1p2r
+l2rac
+l1ra
+lr1a1da
+l2r1a2la
+lra2n
+lr1an2y
+l2rar
+2lr1i
+l1r
+2lrj
+l12rmr
+2lrr
+2lrt
+l2rem
+l1re
+l2r1e2s
+l2r1r
+l1r
+l2r1ing
+l1ri
+lr1ism
+l2r
+lr1old
+l1ro
+l2r
+l2s1aj
+l1sa
+lsa2n
+ls1an2y
+l2s1e2p
+l1se
+l1s1ki
+l1s1la
+l1s2pe
+l1s2po
+l1s2r
+ls3s
+l1s2ta
+l21st2r
+l1s2z
+l1t2r
+l1t1re
+l1t1r
+l1t1ri
+l1t1ro
+2l12vod
+l1vo
+l12v
+l2za1d2
+l1za
+l2z1a2k
+l2zal
+lza2n
+lz1an2y
+lza2t1e
+l2zl
+l1z
+l2z1es
+l1ze
+l2zim
+l1zi
+l2z1ir
+lz1isk
+lz1ism
+l2zolv
+l1zo
+l2z
+l2z
+l2z1
+1l
+l2b
+l2ca
+lc3c
+l2c2h
+l2c
+2l12d
+l2ka
+l2k
+l2ko
+l1l1d
+ll2t1a
+ll2t
+2l1lts
+ll1t
+l1lt1he
+ll2to
+l1ltt
+ll1t
+l1ltz
+l1l1t
+2l1ml
+l2ml
+l1m
+l2na
+l2n
+ln2b1kt
+ln1b
+lnb1k
+l2ne
+l2n
+l2n1o
+l2n
+l2nu
+l2n
+l2pa
+l2p
+l2pe
+l2pl
+l1p
+l1p2
+l2p11l
+l2p11l
+l2re
+l2r
+ls3s1z
+ls2s2z
+2ls1s1ze
+l2s
+l2s1ze
+ls2z
+l2szi2s
+l1s1zi
+2l1tl
+lt2ter
+lt1te
+2l1tv
+2l12v.
+2l1vb
+l12v2e.
+l1ve
+l12vez
+2l1vh
+2l1vn
+l12vn
+l1v
+2l1vr
+l12vk
+l1v
+2l1vv
+1l
+la2c
+l1a
+la2n
+l2g
+l1
+l1bl
+l1br
+l2dad
+l1da
+l2d
+2ld2e.
+l1de
+2lde1i
+l2del
+l2d1k
+l1d
+l2din
+l1di
+l2d1iv
+2ldj2e.
+ld1je
+2ldjt
+ld1j
+ldkz1
+ld1k
+2ld1ke
+l1d
+2ldkn
+2ldkr
+2ld2t.
+l2d3ze
+ld2z
+l1e2lem2e.
+l1e
+le1le
+lele1me
+le3rejb2e.
+le2re
+lere1j
+lerej1be
+le3rejh
+le2r2.
+le1r
+le2rb
+le2r1ne
+le2rr
+le2rt
+le2rv
+le2s
+2le2s
+l1fl
+l1f2r
+lg1pi2
+l1g
+lg2p1ip
+l12gyel
+lg2y
+l1gye
+2l1h
+li2ta
+l1i
+2lt
+l1
+2lkelb
+l1ke
+1lke1l
+2lkelv
+2lk1se
+l1k
+l1kl
+lko2r1t
+l1ko
+lko1r
+l1kv
+2lle1ge
+l1le
+2lnn
+2ln2y.
+ln2y
+l2nyal
+l1nya
+l2nyr
+l1ny
+2lnyb
+2lny2e.
+l1nye
+2lnye1i
+l2ny1el1vi
+2lnyb
+l1ny
+2lnyn
+2lnyr
+2lnyt
+2lnyv
+2lnyh
+2lnyk
+2lnyn
+2l1ny
+2lnyr
+2lnyt
+2l1ny
+lr2s12g
+l1
+lr1s
+l1pl
+l1p2r
+l1ps
+2lreh
+l1re
+2lrej
+lre3m
+2lret
+2lrb
+l1r
+l2r1is
+l1ri
+l2rl
+l1r
+2l1rz
+l2s2l
+l1s
+l1s1ho
+l1s2ka
+l1s1k
+l1s1la
+l1s2
+l2sr
+l2s1t
+l2s
+l1s2pi
+l1sp2r
+l1s1r
+ls3s
+ls2tar
+ls1ta
+l1st2r
+ls2z2
+ls3z1ra
+l1s1z
+ls3zrr
+l1szf
+l12szt
+l1s1z
+2lsz2r.
+l1s1z
+l1szt2
+2lt2t.
+l1t
+2lto1l
+l1to
+l1t1re
+lu2t
+l1u
+l2l
+l1
+2lvig
+l1vi
+2l12zt
+l1z
+2l12zi1
+l1zi
+2lzl
+2lzm
+2l12zk
+l1z
+l2p1a2lag
+l1pa
+lpa1la
+l2p1a2lap
+l2p1alt
+lpa1l
+l2p1a2lv
+l2p1alk
+l2p1an2y
+l2p1ll
+l1p
+l2p1tm
+l2p1ts
+lpcsa2p1
+lpc2s
+lp1c1sa
+l2p1eg
+l1pe
+l2p1e2lu
+l2p1e2m
+lpen1n
+l2p1e2r
+l2p1g
+l1p
+lp2l
+l2p11le
+lp2r
+l2p11ri
+l2p1i2d
+l1pi
+l2p1i2na
+lp1izm
+lp1i2zo
+l2p1v
+l1p
+l1p2l
+l2p1old
+l1po
+lpo2n
+lpo1n1
+lp1p2r
+l1p2ri
+l1p2ro
+l1p2rb
+lp1r
+lpu2s
+l1pu
+lp1u1s1zo
+lpus2z
+lr2k1e
+l1r
+lre1i2
+l1re
+lre1p2r
+lre1s2z
+lre12
+lsg3g
+l1s
+ls1eprik
+l1se
+l2sep1ri
+ls2ho
+ls2ka
+ls2k
+ls2ki
+ls2la
+ls2l
+ls2li
+ls2ma
+ls2mi
+lsors1s
+l1so
+ls2r
+l1s
+ls1
+ls1s2z
+l1s
+l1s2pa
+l1s2pe
+l1s2p
+l1s2pi
+l1s2po
+l1s2p
+l1sp2r
+l1s2r
+l1s2r
+l1s2ta
+ls2t
+l1s2te
+lste2i
+l1s2ti
+l1s2t
+l1st2r
+l1s2tu
+l1s2t
+lsza2k
+ls2z
+l1s1za
+lsza2k12
+lsz2r
+l1s1z
+l2sz1e2g
+l1s1ze
+l1sz2f
+lsz2nel
+l1s1z
+l3sz1ne
+l1sz2l
+l1sz2p
+lszt2
+lsz2t
+l1sztr
+l1sz2v
+lta2gy
+l1ta
+ltag2y
+lt1a1j
+lta2lapb
+lta1la
+lta2l12s
+lta1l
+lta2l12z
+lt2a2len
+lta1le
+lt2a2les
+lt2a2l1ev
+lta2l12
+lta2liz
+lta1li
+ltal1l
+lta2l
+l2t1amp
+l2t1apr
+lt1a1r
+l2t1arc
+lta2ri1
+lta1ri
+l2t1as2s2z
+lt1aszt
+ltas2z
+l2t1a2u
+lt1a1zo
+l2t12g.
+l1t
+lt12ga
+l2t1gb
+l2t1gg
+l2t1gn
+l2t1gr
+l2t1ll
+lt1na2
+lt2nan
+lt2r1adatb
+lt1ra
+ltra1da
+ltr2s1g
+ltr1s
+lt12rur
+lt1ru
+lt2s12g
+lt1s
+lt2tal
+lt1ta
+l2t1tr
+lt1bl
+lt1br
+ltelevzi21k
+l1te
+lte1le
+ltele1v
+ltelev1zi
+ltelevzi1
+l2t1ell
+l2t1e1l
+l2t1e1mu
+lte2rad
+lte1ra
+l2t1e2reik
+lte1re
+ltere1i
+l2t1e2r
+l2te1ru
+lte2t1a2
+lte2tk
+lte1t
+l2t1k1n
+l1t
+lt2l
+lt11le
+lt1lm
+lt1rc
+l2t1rz
+lt2sa2
+lt2s12g
+lt1s
+lts3s
+l1t2t12
+l2t2ve2s.
+lt1ve
+lt1fl
+lt1gl
+lt1gr
+lt1i1de
+l1ti
+ltig2
+l2t1i2g
+lti1kl
+l2t1ill
+lt1imp
+l2t1ind
+l2t1ing
+l2t1i2o
+l2t1i1si
+lt1ism
+l2t1ist
+l2t1i2ta
+l2t1n
+l1t
+l2t12r
+lt1t
+l2t12v
+lt2v1e2l
+lt1ve
+l2t12z
+lt1kr
+l2t1oml
+l1to
+l2t1ord2
+l2t1or1g2
+l2t1orj
+l2t1orr
+lt1ors2
+ltos3s
+l2t1o2x
+lt1p2
+l1t
+lt1s2p
+lt1s2z
+ltt2
+lt2l
+l1t
+l2t11l
+lt1nt
+lt1ss
+lt1a2
+l1t
+lte2l
+lt1e
+lte2r
+lt1p2
+lt12r
+lt1pl
+lt1pr
+ltra1s
+lt1ra
+lt2rg
+lt1r
+lt2rn
+lt1r
+lt2rik
+lt1ri
+lt2ril
+lt2rf
+lt1r
+l1t2rn
+lt2rp
+lts2g1el
+lt1s
+lts1ge
+lt1sl
+lt1sp
+lt1st
+lt1t2r
+l2t1udv
+l1tu
+l2t1u1na
+lt1u1ra
+ltu2s1ze
+ltus2z
+l2t1u2t
+l2t1g
+l1t
+lt12l
+l2t1st
+l2t12v
+lt12zem
+lt1ze
+1lu
+lua2g
+lu1a
+lu2r
+lu1
+lu2b1a2d
+lu1ba
+lu2bal
+luba2n
+lu2b1as
+lu2br
+lu1b
+lu2b1e2g
+lu1be
+lube2r
+lu2bes
+lu2bl
+lu1b
+lu2b1in
+lu1bi
+lu1b2
+lu2br
+lu2b
+lub1t2
+lu2b
+2ludj
+2ludv
+lu1dy
+lue2l
+lu1e
+lu2e1s
+lugas1s
+lu1ga
+lu2gat
+lu1g2l
+2l1u2gor
+lu1go
+2l1ugr
+2l1ujj
+lu1kl
+lu2k1os
+lu1ko
+lu2k1o2v
+lu2l
+2lulr
+lu2mad
+lu1ma
+lu2maz
+lu2ml
+lu1m
+lumen1n
+lu1me
+lu2mer
+lu2mes
+lu2m1i2k
+lu1mi
+lu2m1ip
+2lu1m
+lum2pe2l
+lum1pe
+lu2nal
+lu1na
+2lund
+l1unh
+l1unj
+l1unl
+l1unn
+l1u2no
+l1u2n
+l1unv
+lu2rak
+lu1ra
+lu2ram
+lu2rat
+2l1u2ru
+2l1u2r
+lu2sad
+lu1sa
+lu2s1a1ka
+lu2sakr
+lu2sal
+lu2s1a2n
+lu2s1g
+lu1s
+lu2sl
+lu2s1e2r
+lu1se
+lu2s1r1t
+lu1s
+lu2sim
+lu1si
+lu2sis
+lu2s2r
+lu1s
+lusks2z1
+lus1k
+lu2s12
+lu1s2
+lu2sr
+lu2s
+lus3s1ze
+lus2s2z
+lus3s1zi
+lust2
+2l1u2tnz
+lu1t
+2l1utc
+lu1t2h
+lu2td
+lu1t
+lu1t1ra
+lu2z2s
+1l
+l2d1a
+l2d
+l2de
+l2d2t
+l1d
+l2d3z
+l2ga
+l2g1
+l2ge
+lg3g
+l2gi
+l2gol
+l1go
+2l1jd
+2l12j
+l2ju
+l2ri
+l2ru
+l2r
+2l12s2z
+l2t2.
+l1t
+2l1tv
+l2z1a2n
+l1za
+1l
+l2c2s
+l2d
+l2d
+l2ge
+l2g2y
+3l2gyletec
+lgy1le
+lgyle1te
+l2l
+l1l1d
+l2lel
+l1le
+l2l1e2m
+l1lep
+l2l
+ll1r
+2l1ls
+2l1lhe2t.
+ll1he
+2l1lhet1ne
+2l1lhets
+l2l
+2l1ljek
+ll1je
+2l1lnek
+ll1ne
+2l1lnk
+ll1n
+2l1l1ni
+2l12l
+2l12l
+2l1ls2z.
+lls2z
+2l1l2t.
+l1lt2e.
+ll1te
+2l1ltek
+2l1ltem
+2l1ltes
+2l1lte2t.
+2l1l1te1te
+2l1ltet2i.
+llte1ti
+2l1ltett2e.
+ll1tet1te
+2l1ltettem
+2l1ltet1t
+2ll1t
+l1lt1i
+l1ltk
+l1lt2l
+l1ltn
+l1ltr
+l1ltt
+l1ltn
+2l1l1t
+l2l
+1l2l
+2l1ln
+2l1l1ve
+2l1nn
+l2re
+l2r
+l2r
+l2s2z
+l2te
+l2t
+l2ti
+l2t
+l2t
+l2t
+l2ve
+l2v
+l2ze
+l2z
+1l
+l2r
+2l1rb
+2l12ri
+l1rl
+l2ze
+l2z
+l2zi
+l2z
+l2z
+l2z
+lva2dat
+l1va
+lva1da
+l2v1adm
+lvaj1ak
+lva1ja
+lva2j1e
+l2v1a2kad
+lva1ka
+l2v1akc
+l2v1a2la
+l2v1alg
+l2v1alk
+l2v1ant
+l2v1a2n2y
+l2v1a2rs
+lva1r
+l2v1a2z
+lv2gy1n
+l1v
+lvg2y
+lv1gy
+l2v1llat
+lvl1la
+l2v1llt
+l2v1p
+lv2rain
+lv1ra
+lvra1i
+l2v12ra2k.
+lv2ras
+lv2rr
+lv1r
+l2v1rn2y
+lv2rol
+lv1ro
+l2v12rul
+lv1ru
+lvs3s
+lv2s1zi
+lvs2z
+lv11ta2
+lv1th
+lv1tk
+lv1br
+l2v1e2d2z
+l1ve
+lv1egys
+lveg2y
+l2v1egyv
+l2v1e2kb
+lve1k
+l2ve2le1me
+lve1le
+l2v1elk
+l2v1ell
+l2v1e2r
+l2v1ex
+l1vez2rel1ve
+lve1z
+lvez1re
+l2v12gs
+l1v
+lv1g
+lv2gl
+lv1g
+l2v1lm
+l2v12ne1ke
+lv1ne
+l2v1p
+lv2r2i.
+lv1ri
+l2vrtel
+lvr1te
+l2v1r1t
+l2v12r
+l2vrz1si
+lvr1z
+lv2s1za
+lvs2z
+l2v12szen
+lv1s1ze
+lv1fr
+l2v1i2de
+l1vi
+l2v1i2do
+l2v1i1ga
+lv1i1ko
+l2v1i2m
+l2v1in1t
+l2v1i2pa
+l2v1i1ro
+l2v1irt
+l2v1is1ko
+l2v1ism
+l2v1izm
+l2v1i1zo
+lv12r
+l1v
+l2v12ve
+lv1ze2
+lv2z1el
+lvz1es
+lv1kl
+lv1kr
+l2v1ok
+l1vo
+l2v1old
+l2v1olv
+l2v1on1to
+l2v1op
+l2v1or
+l2v1os
+lv11d
+l1v
+lv2l
+l2v11l
+l2v1lt
+l2v1n
+l2v1s
+l2v1v
+l2v12z
+lv12r
+l1v
+lv1s
+lv1pr
+lv1ps
+lv1sp
+lv1st
+l2v1ut
+l1vu
+lv1j
+l1v
+l2v1g
+l1v
+l2v1t
+l2y
+1lya
+lya2dat
+lya1da
+2ly1adm
+2ly1a2d
+2ly1ag2y.
+lyag2y
+2ly1agyr
+2ly1ajt
+2ly1a2kas
+lya1ka
+ly1akc
+2ly1ak1n
+2ly1a2ks
+lya1k
+2lyakt
+ly1a2lat
+lya1la
+2ly1alb
+2ly1alk
+2ly1alm
+ly1a2lom
+lya1lo
+ly1alt
+ly2a2maj
+lya1ma
+lya2ma1r
+lya2m1el
+lya1me
+lya2mem
+lya2m1r1t
+lya1m
+2ly1ang
+2lya1ni
+lya2nyag
+lyan2y
+lya1nya
+ly1a2ny
+ly1a2pn
+lya1p
+lya1p2r
+2ly1arc
+ly2a2sal
+lya1sa
+ly1as1pe
+ly1as2s2z
+2ly1atl
+lya1t2r
+2ly1a2t2y
+2lya1zo
+1ly
+2ly12b
+2ly1br
+2ly1g
+ly1ld
+ly1ll
+2ly1p
+2ly12rad
+ly1ra
+2ly12rak
+2ly12ram
+2ly12rat
+ly1rk
+2ly1rn
+2ly1rr
+2ly12ru
+lys3s
+ly2s2z
+2ly12ta
+2ly1tf
+2ly1th
+2ly1t1l
+2ly1t1l
+2ly1tm
+2ly1ts
+2ly1tt
+2ly1tv
+ly1bl
+ly1br
+ly1dr
+1lye
+lye2ga2
+ly1e2gye
+lyeg2y
+lye2gyez1
+2ly1ej
+2ly1e2k2e.
+lye1ke
+2ly1e2kek
+2ly1e2kb
+lye1k
+2ly1e2k1r
+ly1e2le
+ly1elf
+ly1elh
+ly1ell
+ly1elm
+ly1e2l
+ly1elr
+ly1els
+ly1elt
+ly1e1l
+ly1elv
+ly1elz
+lye2m1a
+2ly1ember
+lyem1be
+2ly1e2mel
+lye1me
+lye2min
+lye1mi2
+2ly1em1l
+2ly1eng
+ly1erk
+ly1e2r
+2ly1esd
+2ly1ese1m
+lye1se
+2ly1e2se1te
+2ly1e2se1t
+2ly1e2sett
+2ly1esl
+lye1s
+2ly1e2ss
+2ly1es1te
+2ly1eszk
+lyes2z
+2ly1eszm
+2ly1e2s1z
+2ly1e2tet
+lye1te
+2ly1e2v
+2ly1ex
+1ly
+2ly1g
+2ly12h2e.
+ly1he
+2ly12hen
+2ly12het
+ly2l
+ly11le
+ly1lm
+2lyne1ke
+ly1ne
+2ly1p
+2ly12r.
+2ly1rc
+2ly1r1d2
+2ly12r
+2ly1rm
+2ly12r2.
+ly1r
+2ly12r1i
+2ly12rk
+2ly1rr
+2ly1r1te
+2ly1r1t
+2ly12r
+2ly1rv
+2ly1rz
+ly1s2z
+2ly1tt
+2ly12v.
+2ly12v2e.
+ly1ve
+2ly12ve1i
+2ly12vek
+2ly12ven
+2ly12vet
+2ly12vv
+ly1v
+2ly12vi
+2ly1vr
+2ly1vv
+ly1fl
+lyf1lt2
+ly1f
+ly1gl
+ly1gr
+1lyi
+2ly1i2bo
+2ly1i2de1
+lyi1de
+2ly1i2deg
+2ly1i2den
+2lyi1di
+2ly1i1do
+2ly1i2d
+lyi2h
+lyi1
+lyi2g
+2ly1i2ga
+2ly1i2g
+2ly1i1ge
+2ly1i1g
+2ly1i1ha
+2ly1ill
+ly1i1ma
+2ly1i2m
+2ly1imp
+2ly1ind
+2ly1inf
+2ly1ing
+2ly1i1ni
+2ly1int
+2ly1inv
+2ly1i2p
+ly1i2rat
+lyi1ra
+2ly1i2r
+2ly1i2ri
+2ly1i1ro
+2ly1irr
+2ly1irt
+2ly1isk
+2ly1ism
+2ly1isp
+2ly1ist
+2ly1i1ta
+2lyivad
+lyi1va
+2ly1i2z
+1ly
+2ly1g
+2ly1n
+2ly12r
+ly1v
+ly2kiz
+ly1ki
+ly1kl
+ly1k2r
+1lyo
+2ly1ob
+2ly1o2d
+2ly1of
+2ly1o2k1al
+lyo1ka2
+2ly1okl
+2ly1okm
+2ly1o2koz
+lyo1ko
+2ly1ok1ta
+2ly1o2l
+lyo2m1a2s
+lyo1ma
+2ly1op
+2ly1o2r
+2ly1os2z
+2ly1ott
+1ly
+ly11d
+ly2s1
+1ly
+2ly1b
+2ly12l
+2ly12r
+ly1ss
+2ly1v
+1ly
+ly12r
+ly1pl
+ly1pr
+lyre1p2
+ly1re
+ly1sk
+ly1sp
+ly3sz2m1
+lys2z
+ly1s1z
+ly2ta2c
+ly1ta
+ly1t2r
+1lyu
+2ly1ud
+2ly1ugr
+2ly1uh
+2ly1uj
+lyu2k2s
+lyu1k
+2ly1u2ni
+2ly1u2r
+2ly1u2t
+1ly
+2ly1js
+2ly12r.
+2ly1th
+2ly1tr
+2ly1tt
+2ly1tv
+1ly
+2ly1d
+2ly1g
+ly1ld
+2ly1ltet1se
+lyl1te
+lylte1t
+2ly1nn
+2ly1r
+2ly12ve2g.
+ly1ve
+2ly12vegb
+2ly12vegc
+2ly12vegek
+lyve1ge
+2ly12veges
+2ly12veget
+2ly12veg3g2
+2ly12vegr
+2ly12ve1g
+2ly1z
+1ly
+2ly12r.
+2ly1rh
+2ly1rl
+lyze2t1el
+ly1ze
+lyze1te
+lzs1s
+l1z
+lze2ta
+l1ze
+lze2t1e2l
+lze1te
+lze2t12r.
+lze1t
+lz2sa
+l1z
+lz1a2
+l1z
+lz1e2
+lz2s1orr
+lz1so
+lzus3s2
+l1zu
+lzu2s3z
+2m.
+1ma
+maa2d
+ma1a
+m2a1b1lo
+ma1b1ra
+2m1abs
+ma2c2l.
+ma1c
+ma2clb
+ma2clt2
+2madag
+ma1da
+2m1adap
+ma2datb
+ma2da1to
+ma2dat1t2
+mads1s
+ma1d
+ma2d12v
+ma1d
+madks2z1
+ma1d
+mad2ks
+mad1k
+ma2dz
+3m2a3d2z
+mae2r
+ma1e
+ma2p
+ma1
+ma2r
+ma1f2ra
+ma1f1ri
+ma2gac
+ma1ga
+ma2g1a2da1to
+maga1da
+ma2g1a2d
+ma2g1a2d
+ma2g1a2du
+m2aga2l
+mag1a1la
+ma2ga2n
+ma2g1an2y
+maga2r
+mag1a1ra
+ma2g1a1s1za
+magas2z
+mag1a1zo
+m2agaz
+ma2gg
+ma1g
+mag1ll
+ma2g12r
+ma2g1rn
+ma2g1rr
+ma2g1rt
+mag11ta
+ma2g11to
+ma2g1e2l
+ma1ge
+2m1aggr
+ma2gid
+ma1gi
+ma2g1i2k
+ma2g1
+magkia3d
+mag1ki
+magkia2d
+magki1a
+ma2g1or
+ma1go
+ma2g1os2z
+mag11ra
+ma1g
+ma2g1v
+ma2g1u2r
+ma1gu
+ma2g12
+2m1ag2y.
+mag2y
+2m1agyb
+2m1a2gyu
+m1ahh
+mai2z
+ma1i
+2m1aj1ta
+maj2ti
+ma2ka1r
+ma1ka
+ma2kc
+ma1k
+2m1akc
+mak2k1e2
+2m1ak1ku
+ma1k1lu
+2m1a2ko2l.
+ma1ko
+ma1k2rm
+m2ak1r
+ma1k2ri
+2mak1ro
+m1ak1ti
+ma2kus
+ma1ku
+mala2c3h
+ma1la
+malac2h
+mala2c3s
+2malag
+mala2g1
+m1a2la1ku
+2m1alakz
+2m1a2lan
+2m1a2la1p
+malasz2t1a
+malas2z
+2m1alb
+2m1alc
+2malg
+m1al1go
+2m1alj
+2m1alk
+malo2m1e
+ma1lo
+mal1os
+m1alr
+m1al2t.
+mal1th
+2m1a2lu
+2malv
+2m1amp
+2m1a2nal
+ma1na
+ma2nat
+2ma1n
+ma2n1eg
+ma1ne
+2m1an1gi
+2m1an1to
+2m1antr
+2m1a2ny2a.
+man2y
+ma1nya
+ma2nyag
+2m1a2ny
+2m1a2ny
+mao2k
+ma1o
+ma2p2a.
+ma1pa
+ma2pas
+2m1a2pt
+ma1p
+ma1p2l
+ma1p2re
+ma1p2r
+ma1p2ri
+m2a1p2ro
+2m1aps
+2m1a2rn2y
+ma1r
+2m1arb
+2m1ar2c.
+2m1arcc
+2m1arc2h
+mar1c1ko
+2m1ar1cu
+2m1ar1c
+2m1a2rn
+ma1r
+ma2r1i2si
+ma1ri
+mar2k1al
+mar1ka
+mar2k1in
+mar1ki
+mar2k1n
+mar1k
+mar2k12r
+2marm
+maro2k1
+ma1ro
+ma2ro1m
+maros1s
+mark2
+ma1r
+mar1kh
+mar1kk
+mar1kn
+mar1kr
+ma1ry
+2m1arz
+m2a1s2k
+ma1s2pe
+ma1sp2r
+ma1s2r
+mast2
+m2a1s2ta
+ma1s1te
+m2a1str
+masz1eg2y
+m2aszeg
+mas2z
+ma1s1ze
+m2asz1e2me
+m2a2sz1t
+ma1s1z
+ma2szv
+ma2szis
+ma1s1zi
+masz2v
+m2a1s1z
+masz11ve
+masz1s
+ma1s1z
+mat1a1da
+ma1ta
+mat1alap
+mata1la
+mat1a1nya
+m2atan
+matan2y
+ma2taz
+m2a2tg
+ma1t
+mat2ra1ka
+m2atr
+mat1ra
+ma2t12ras
+mat12rr
+mat1r
+ma2t1rn
+ma2t12r
+ma2t1z
+ma2t1e2g
+ma1te
+mat1e1li
+ma2t1ell
+mat1e1l
+mat1elt
+ma2t1e1me
+mate2s
+m2a2tl
+ma1t
+ma2t1r1te
+m2atr
+mat1f2
+matfl1
+matf1l2
+ma2tid
+ma1ti
+ma2t1ind
+m2atin
+ma2t1inf
+ma2t1ing
+ma2t1int
+ma2t1os2z
+ma1to
+ma2t1r
+ma1t
+ma1t2ran
+mat1ra
+mat2rg
+mat1r
+ma2t1ut
+ma1tu
+2m1a2tya
+mat2y
+ma2ty
+2m1a2uk
+ma1u
+mau2n
+mau2ra
+mau2ta
+2m1a2u1to
+ma2u1t
+2m1a2vat
+ma1va
+ma2z1a2l
+ma1za
+ma2zl
+ma1z
+ma2z1tl
+ma2zel
+ma1ze
+mazks2z1
+ma1z
+maz2ks
+maz1k
+ma2z3s
+maz2s
+1m
+2m12b
+2m1br
+mci2sp
+m1ci
+mci1
+m2cs1as
+mc2s
+m1c1sa
+m2c1s1e2
+m2csin
+m1c1si
+m2csir
+m2csis
+m2c1s
+m2c1s
+m2f
+2m12g.
+2m12ga
+2m12g
+2m1gb
+2m12g
+2m1gg
+m2g2i.
+m1gi
+2m12gi2g
+2m1gk
+m1g1na
+2m1go
+2m1g
+2m1gr
+m2guk
+m1gu
+m2gu2n
+2m12g
+2m12g2y
+mgya2d
+m1gya
+mgy1a1da
+m2h
+m2jan
+m1ja
+m2j1rt
+m1j
+m2j1e2
+m1jo2
+m2j1ol
+mjren2
+mj1re
+m2j1ul
+m1ju
+m2j
+m1ka2
+m2k1al
+m2kar
+m2k1e2
+m2k12r.
+m1k
+m2kil
+m1ki
+m2k1
+m2k
+m2k1
+m22l1a2l
+m1la
+2m1lar
+m2ll
+m1l
+2m1lc
+m2l1e2
+ml1rt
+m1l
+2m1llam
+ml1la
+m1llap
+m1llat
+2m1l1l
+m1llom
+ml1lo
+2m1l1ma
+2m1l1mo
+m2los
+m1lo
+m2m1as
+m1ma
+2m12m
+m1na2
+m2n1a1ka
+m2n1as
+m2nav
+m2nr
+m1n
+mnc1c
+mn2ce
+mn2c1g
+mn1c
+mn2c1s
+mnc2s
+m2n1e
+m2n1in
+m1ni
+m2nis
+m2n1it
+m2n12
+m2n
+mns3s
+mn2tag
+mn1ta
+mn2t1al
+mn2t1as
+mn1t2
+mn2t1k
+mn1t
+mn2t1l
+mn1t
+m2n
+m2n
+m2ny1a2d
+mn2y
+m1nya
+m2ny1a2g
+m2nyaj
+m2ny1a1ka
+m2ny1a2l
+mnya2n
+m2n2yan2y
+m2nyap
+m2nyar
+m2nya1u
+m2nyav
+m2nyaz
+m2ny1e2
+m2ny12r.
+m1ny
+m2nyr1d2
+m2nyrz
+m2ny12
+m2ny12
+m2ny
+mny1tr
+m1ny
+m2po
+2m12rad
+m1ra
+m2r1a2g
+2mram
+m2r1a2n
+m2ras
+mr1ass
+2m12rat
+m2r1a1u
+m2r1l
+m1r
+m2re2
+mr1em
+m2rs
+m1r
+m2r1id
+m1ri
+m2r1ik
+m2r1i2p
+m2r1i2si
+mr1isk
+mr1is1t
+m2r
+2m1rkok
+mr1ko
+m2r
+m2r
+m2rug
+m1ru
+m12ruh
+m2ruk
+m12rur
+m2r
+m2s1a2d
+m1sa
+m2sal
+m2sap
+m2s1a2r
+m2s1av
+m2saz
+m2s12r
+m1s
+m2s1rn
+m2ss
+2m11s1s
+2m1ssn
+2m1ssr
+msbe2j1
+ms1be
+msbe1j2
+m2s1e2
+m2s2r
+m1s
+m2sor
+m1so
+2m12s
+m2s
+m2s
+mst2
+ms1tr
+m2s12
+ms3zav
+ms2z
+m1s1za
+2m12ta
+mt1a2k
+2m12t
+2m1tc
+2m1td
+2m12t1e2
+2m1t
+2m1tf
+2m1tg
+2m1th
+2m12tir
+m1ti
+2m12t
+m1tj
+2m1t1l
+2m1tn
+m2t1ol
+m1to
+2m12t1
+2m1tp
+2m1t1re
+2m1ts
+2m1t1te
+2m12t
+2m12t
+2m1tv
+m2zal
+m1za
+m2ze
+mzi2a
+m1zi
+mzi2
+m2z1i2s
+m2z
+m2zsal
+mz2s
+m1z1sa
+m2z1s1e
+mz3s2z
+m2b1akc
+m1ba
+m2b1ak1k
+mba1k2r
+mb1akv
+m2b1a2lag
+mba1la
+m2b1alj
+m2b1alk
+m2b1a2na
+m2b1a2nya
+mban2y
+mba1p2
+mb1a2var
+mba1va
+mb12g2y
+m1b
+m2b1ll
+m2b12ron
+mb1ro
+m2b1r1r
+mb2szv
+mbs2z
+mb1s1z
+m2b1sz1n
+m2b12szo1ka
+mb1s1zo
+m2b12szokk
+m2b12szo1ko
+m2b12szokr
+m2b11ta
+m2b1th
+mbe12
+m1be
+mb1e2ce
+mbe1e2
+mbe1k2
+mbe2led
+mbe1le
+mb1e2leg
+m2b1ell
+mb1elr
+mb1els2z
+mb1e1pe
+mbe2r1a2g
+mbe1ra
+mbe2ral
+mbe2ra2n
+mbe2ras
+mbe2r
+mbe2reg
+mbe1re
+mbere2s2z
+mber1e1s1z
+mbe2rev
+mbe2r12l
+mbe1r
+mbe2r12s
+mbe2ri1m
+mbe1ri
+mbe2ring
+mbe2ris2z
+mbe2rol
+mbe1ro
+mbe2ros
+mbert2
+mbe2r1
+m2b12g
+m1b
+mb12ke
+m2b11k
+m2b1p
+mb2ress
+mb1re
+m2b1r1t
+mbrt2
+m2b1rz
+mb1gr
+m2b1i1de
+m1bi
+mbi2k1al
+mbi1ka
+mbi2ke
+m2b1il1la
+m2b1i2n2a.
+mbi1na
+m2b1i2na1i
+m2binam
+mb1ind
+m2b1inf
+m2b1ing
+mb1inv
+m2b1i1pa
+m2b1izm
+mb1i2zom
+mbi1zo
+m2b1izz
+m2b1v
+m1b
+mb1z
+mb1kl
+mb2lok
+mb1lo
+m1b2l
+m2b1ob
+m1bo
+mb1ol1da
+mbo2lyak
+mbol2y
+mbo1lya
+m2b1ond
+m2b1op
+m2b1or1m
+m2b1or1m
+m2b1o2roz
+mbo1ro
+m2b1oszl
+mbos2z
+m2b12vri1na
+m1b
+mb1v
+mbv1ri
+mb11le
+m1b
+m2b1v
+m2b12si
+m1b
+m2b12s2z
+mb1pl
+mb1pr
+mb2rev
+mb1re
+mb2rok
+mb1ro
+mb2ron
+mb1sp
+mb1st2
+mb1s2z
+mb1tr
+mbu2s1ze
+m1bu
+mbus2z
+mbu2s1z2
+m2b1u2t
+mb1j
+m1b
+m2b1g
+m1b
+m2b1l
+m2b1s
+m2b1t
+m2b1z
+mbve1z2
+mb1ve
+mc2lu
+mcsa2p12g
+mc2s
+m1c1sa
+mcsa1p
+mda1b2
+m1da
+mda1g2
+mda1p2
+mdi2a1le
+m1di
+mdi1a
+mdi3a1p2
+md2ra
+md2r
+md2ro
+md2r
+1me
+mea2d
+me1a
+mea2l
+mea2n
+me2av
+mede2r1e2
+me1de
+2m1e2dn2y
+me1d
+me1d2r
+2m1e2d2z
+mee2s
+me1e
+2m1eff
+me2ga1ba
+me1ga
+me2g1a1la
+me2g1a1lu
+me2g1alv
+me2g1an
+me2g1a2r
+mega1s2z2
+me2gav
+me2g1
+me3g2m
+meg2s
+meg2t
+meg2z
+me2g1el
+me1ge
+mege2le
+mege2l
+me2ger
+me2g1esem
+mege1se
+meg1eszt
+meges2z
+me2ge1ta
+me2g1e2te
+me2gez
+me2g12l
+me1g
+megs3s
+me2gs2z1
+megg2
+meg1gr
+me2gi
+meg1i1g
+megi2g
+meg1inn
+meg1ir
+meg1is
+meg1itt
+me2g1
+me2go
+me2g12
+me2g12
+me2gr
+me1g
+me2g1u2
+me2g12g
+me1g
+me2g12l
+2megyez
+meg2y
+me1gye
+2m1egyh
+2m1egyl
+2m1egys
+2m1e2gyt
+me1gy
+me2he1t
+me1he
+mei2r
+me1i
+me2k1ad
+me1ka
+me2k1ag
+mek1alk
+me2k1am
+mek1arc
+me2k1a2s
+me2k1att
+me2k12l
+me1k
+me2k12p
+me2k11ra
+me2kt
+mekde2d1eb1b
+mek1de
+mekde1de
+mek1eg2y
+me1ke
+mek1ell
+me2kep
+me2k1ers2
+meke2s2z
+me2k1e1s1ze
+me2keszm
+mek1esz1te
+me2kev
+me2k1k
+me1k
+me2kl
+me2k12r.
+mek1r1de
+me2k1rk
+me2k1r1te
+me2k1r1t
+me2k1ss
+me2k11te
+me2ki1do
+me1ki
+me2kij
+mek1i1m
+me2k1ing
+me2k1int
+me2k1i2p
+me2k1ist2
+me2k1i1ta
+me2kr
+me1k
+me2kt
+mek1k2
+mek3lu
+me2kob
+me1ko
+me2k1ok
+me2k1old
+me2k1olt
+me2k1onk
+me2kop
+meko2r
+mek1o1ra
+mek1o1ro
+mek1ort
+me2k1os
+mek1ott
+me2k12v
+me1k
+mek1l1t
+me1k
+me2kn
+mek1rm
+mek1r
+me2k1t
+me2k1
+mek2rit
+mek1ri
+mek1s
+meks2z2
+mek1t2
+me2kuj
+me1ku
+me2kun
+me2kur
+me2k12
+me2kd
+me1k
+me2k1g
+me2k1ld
+me2k12l
+me2k12l
+me2kz
+m1e2l1a2d
+me1la
+mel1ak
+me2lg
+me1l
+me2ll
+2melb
+2m1e2lef
+me1le
+me2lekt
+mel1e2l
+2m1e2le1me
+2m1e2lemz
+2m1e2les
+2melet
+mele2t12r.
+mele1t
+2m1e2lg
+me1l
+2m1e2l12l
+2m1e2l1r
+mels3s
+2m1elf
+2m1el1go
+m1el1ha
+2m1el1h
+2m1elhel
+mel1he
+me2li2t.
+me1li
+2me2l12
+2m1el1j
+2melk
+m1el1k
+m1el1k
+m1el1k
+mel2ll
+mel1l
+m1elle1ne
+mel1le
+mel2l1er
+mel2l12r.
+mel1l
+mel2ling
+mel1li
+mel2l1iz
+mel2lo
+mel2l
+mel2l1u2
+2m1el1m
+2m1el1n
+me2l1os
+me1lo
+m1el1de
+me1l
+mel1e2
+2m1e2l1
+m1e2l1le
+m1e2ltt
+2melz
+me2l1z
+2m1elr
+2m1el1s1z
+mels2z
+2m1el1ta
+2m1el1t
+2m1eltel2s.
+mel1te
+melte1l
+m1elter
+2m1eltet2t.
+2m1eltettn
+2m1eltr
+mel1t
+2m1el1ti
+2melt2y
+2m1el2v.
+2m1el1v
+2m1elves
+mel1ve
+2m1elvn
+2m1el1vo
+me2ly1k
+mel2y
+me1ly
+2m1elz
+2m1eml
+2m1e2mul
+me1mu
+me2n1a2d
+me1na
+me2nal
+me2nar
+me2na2u
+me2nt
+me1n
+me2n1e2g
+me1ne
+me2n1el
+me2ner
+mene2t12
+mene2t
+mens3s
+me1n
+2m1enges
+men1ge
+me2nil
+me1ni
+me2n1ip
+me2n
+me2n
+men2s12g
+men1s
+men2t1ell
+men1te
+men2ti2p
+men1ti
+men2t1is
+me2n1u
+me2nya
+men2y
+menye2ma
+me1nye
+me1p2h
+me2pik
+me1pi
+me2pos
+me1po
+me1p2r
+mera1p2
+me1ra
+mer1ass
+2m1er1d
+2m1e2rec
+me1re
+2m1e2redm
+mer1e2g2y
+2m1e2rej
+me2r1e2l
+me2r1eml
+mere2t1a
+mere2t1e2l
+mere1te
+mere2t12r.
+mere1t
+2m1e2rezkh
+mere1z
+me2r1p
+me1r
+me2r1il
+me1ri
+me2rim
+mer1inf
+mer1ing
+me2r1ip
+2m1er1ny
+mern2y
+me2r1ol
+me1ro
+me2ror
+me2r1os
+me2rov
+2merl
+me1r
+2mer1s
+mers2
+mer1st
+mer1t1r
+me2r12g
+me1r
+me2sas
+me1sa
+me2s1emb
+me1se
+2m1e2semn
+mese1m
+mes1ern
+mese1s
+2mese1t
+2m1e2sett
+2m1e2sl2y
+me1s
+2m1e2s1s
+2m1e2ssh
+2messk
+2messr
+2mess3s
+2messt
+2m1e2s
+me1s2po
+2m1estb
+2m1est2e.
+mes1te
+2m1estek
+2m1es1t
+2m1estf
+me1s2t
+2m1estr
+2m1estn
+mes1t
+me2szan
+mes2z
+me1s1za
+2meszem
+me1s1ze
+me2szeset
+mesze1se
+me1sz2t
+met1a1nya
+me1ta
+metan2y
+me2t1e2g2y
+me1te
+met1ell
+2m1e2te1t
+met1ing
+me1ti
+me2tr
+me1t
+me2t
+me2td
+me1t
+2m1e2ug
+me1u
+meus3s
+meu2t
+me2v
+me2za2c
+me1za
+me2z1aj
+meza2k
+me2za1u
+me2zl
+me1z
+me2ze1d
+me1ze
+me2zeg
+me2z1elj
+me2z1ell
+me2zelh
+meze1l
+me2zer
+mez1e1re
+me2z1k
+me1z
+me2z12r.
+me2z1r1d2
+mez1ret
+mez1re
+me2z12ri
+me2z1r1t
+me2z1id
+me1zi
+me2zim
+me2zin
+me2zi2o
+me2zr
+me1z
+me2z1ol
+me1zo
+me2z1or
+me2z1
+mez1e2
+me1z
+me2z12r
+me2z1ss
+2m1ezre2d.
+mez1re
+2m1ezre1de
+2m1ezre1di
+2m1ezresek
+mezre1se
+2m1ezresn
+2m1ezresr
+2m1ezrest
+me2z3sa
+mez2s
+me2z1s
+me2z1s
+me2zu
+me2z
+1m
+m2ber
+m1be
+2m1br
+m2c1s1a2
+mc2s
+m2c1so
+m2g1a
+m2ge
+m2g
+m2gi
+mg1is
+m2g1o2
+m2g
+m2g
+m2h1a2
+m2h1
+m22heg
+m1he
+m2hel
+m2hi2r
+m1hi
+m2h1is
+m2h1or
+m1ho
+m2h
+mhren2
+mh1re
+2m1h1s
+2m12j.
+2m1jb
+m2jes
+m1je
+2m1js
+m1ka2
+m2k1ad
+m2k1aj
+m2k1ak
+m2k1al
+m2k1an
+m2kar
+m2kaz
+m2k12
+m2k1e2g
+m1ke
+mk1elh
+mk1ell
+mk1e1l
+m2k1e1se
+m2kev
+m2kez
+m2k12k
+m1k
+m2k12l
+m2ki2d
+m1ki
+m2ki1r
+m2k
+m2k1o
+m2k1
+m2k
+m2k1u2
+m2k1
+m2l2e.
+m1le
+2m12lel
+m2les
+m2lez
+2m12ln
+m1l
+2m1lm
+m2lya
+ml2y
+m2ly
+m2lyeg
+m1lye
+m2ly12
+m2n1a2r
+m1na
+m2n1a2t2
+2mnekb
+m1ne
+2mnekh
+2m12nekl
+m2n1el
+m2n12k
+m1n
+m2n1s
+m2nid
+m1ni
+m2nin
+m2n1is
+m2niv
+mnt2
+m2ny1e2g
+mn2y
+m1nye
+m2ny1e2l
+m2ny1er
+m2ny2k
+m1ny
+m2nyim
+m1nyi
+m2ny2r
+m1ny
+m2ny1o
+m2ny2
+m2ny
+mny2l
+m1ny
+m2ny11l
+m2p
+m2p
+2m1r2c.
+2m12rettsgit
+m1re
+mrett1s
+mretts1gi
+2m12rn
+m1r
+m2rr
+mrs1s
+2m12rv
+2m12ri1e
+m1ri
+2m12rin
+2m1r1k
+2m1rlel
+mr1le
+2mrte1ke
+mr1te
+2m1rtes
+mrt2k1elv
+mr1t
+mrt1ke
+2m1rtr
+2m1rts
+2m1r1t
+2m12rl
+m1r
+mr2v1a2
+2m1rz
+m2s1a2
+m2s12
+m2s1e2l
+m1se
+m2s1e2r
+m2sez
+m2sin
+m1si
+m2s
+ms3s1za
+ms2s2z2
+m1s1za2
+ms2z
+msz1al
+m2sz12l
+m21s1z
+m2sz12ra
+m2szed
+m1s1ze
+m2sz1el
+2mszl
+m2s1z1
+msz3s
+2msz1t
+2mszth
+2msz1ti
+2msztj
+2msztl
+2msz1t
+2msztv
+m2s1z12
+m2t1ad
+m1ta
+m2t1ak
+m2t1a2n
+mt1rt
+m1t
+mt1el1ho
+m1te
+mt1el1ta
+m2t1e2v
+m2t2g
+m1t
+2m1t1je
+2m1tjr
+mt1j
+2m1tjv
+2m1t1j
+2m1tk2e.
+mt1ke
+m2t1o
+m2t
+m1t2
+m2tr
+m2t1u
+m2t1
+2m12v.
+2m1vb
+2m12v2e.
+m1ve
+2m12ve1i
+2m12vek
+m2ven
+m2ves
+2m12vet
+2m12vb
+m1v
+m2vn
+2m1vf
+2m1vh
+2m12vi
+2m1vk
+2m1vn
+2m1vr
+2m1vs
+2m1vt
+2m1vv
+m2z1a
+m2z12
+m2zeg
+m1ze
+m2zil
+m1zi
+m2zim
+m2zin
+mz1ism
+m2zit
+m2z
+m2z1o
+m2z3s
+m2zu
+m2z
+mfa2l1e2
+m1fa
+mfa2lom
+mfa1lo
+mfa1s2
+mfit2
+m1fi
+mfi1tr
+mf2la
+m1f2lo
+mf2l
+mf2lu
+mfog1adat
+m1fo
+mfo1ga
+mfoga1da
+m1f2rak
+mf1ra
+m1f2ran
+mf2r
+m1f2re
+m1f2ri
+m1f2r
+m1f2ro
+m1f2r
+m3g2a2z1e
+m1ga
+m3g22p1e2l
+m1g
+mg1pe
+mg1pi2
+mg2p1ip
+mg2li
+mg2l
+mgr2c1so
+m1g
+m3g2rc
+mgrc2s
+mg2ra
+mg2r
+mha2sbr
+m1ha
+mha1s
+mhossz1t
+m1ho
+mhos2s2z
+mhos1s1z
+1mi
+mi2a1a
+mi1a
+mi2a1
+mi2a1bo
+mi2ac
+mi2a1e
+mi2a1
+mia1f2
+mi2afr
+mi2ag
+mi2ah
+mi2a1
+mia1k1ri
+mi2a1le
+mi2a1ma
+mi2a1m
+mi2a1o
+mi2a1
+mi2a1
+mi2a1
+mi2a1p2
+mi2a1r
+mias2
+mi2a1s1z
+mias2z
+mi2a1s1z
+mi2a1s1zi
+mi2a1s1z
+mi2a1t
+mi2a1ti
+mi2a1to
+mi2a1
+mi2av
+2m1i2z
+mi1
+mi1bl
+micsa2p1
+mic2s
+mi1c1sa
+2m1i2de1
+mi1de
+2m1i2deg
+2m1i2de1i
+2m1i2dej
+2miden
+mi2dent
+2m1i2de1o
+mi2dn
+mi1d
+mi2di1
+mi1di
+mi2dol
+mi1do
+2mi1d
+m1i2dz
+mie2l
+mi1e
+mi2f
+mi1
+mi1f2l
+mi1fr
+2m1i2gaz
+mi1ga
+2m1i2gn
+mi1g
+mi1g1ri
+2m1ihl
+mii2d
+mi1i
+mi1k2li
+mi1k1lu
+mi2ko1no
+mi1ko
+mi2kont
+2miks
+mi2lal
+mi1la
+2mil1le
+2m1il1lu
+2m1il1l
+mi2m2a.
+mi1ma
+mi2mh
+mi1m
+mi2mit
+mi1mi
+mi2mr
+mi1m
+mi2naj
+mi1na
+2m1i2nam
+mina2n
+min1an2y
+2m1i2nas
+mi2n11ra
+mi1n
+min2c1e2
+min2c2h
+min2d1a2
+2m1in1d
+min2dek
+min1de
+min2d1er
+min2det
+min2din
+min1di
+2m1in1d
+2min1du
+mi2neg
+mi1ne
+mine2s
+2m1infl
+2m1in1f
+min2g1
+2m1in1g
+min1g2h
+min1inj
+mi1ni
+min2k1a2l
+min1ka
+min2k1an
+min2k1as
+min2kec
+min1ke
+min2k
+min2k
+2m1insp
+2m1i2nuk
+mi1nu
+mi2n
+2m1inz
+mio2n1a
+mi1o
+mio2n1
+mio2r
+mi2r
+mi1
+mi1p2l
+mi1p2r
+mi2ram
+mi1ra
+2m1i2rat
+2mi2rn
+mi1r
+2mirg
+2mirh
+miri2gyel
+mi1ri
+mirig2y
+miri1gye
+2m1irk
+2m1i2rod
+mi1ro
+2m1i2rom
+mi2rn
+mi1r
+2m1irr
+mi2sal
+mi1sa
+mis1elv
+mi1se
+mis1e1pe
+2misit
+mi1si
+mi2s12r
+mi1s
+mi1s2pi
+mis3szab
+mis2s2z
+mis1s1za
+mis3szer
+mis1s1ze
+mi2s12t
+mi1s
+mi2s12v
+mi2s1
+mis3z2r.
+mis2z
+mi1s1z
+mi1szf
+mi2tac
+mi1ta
+mita2n
+mit1an2y
+2m1i2tat
+2mitc
+mi1t
+mit12r.
+mit11r
+mit1rh
+mit11ri
+mit1r1k2
+mit1rn
+mit1rr
+mit1rt
+mit12r
+2mit1bo
+mit1ing
+mi1ti
+miti2s
+2mit1l
+mi2tk
+mi1t
+mi1t1ri
+2mit1ro
+2mit1r
+mi2tr
+mi1t
+miu1m2
+mi1u
+miu2min
+miu1mi
+miu2s
+2m1i2vad
+mi1va
+2m1i2v
+mi2x1i
+mi2x
+mi2z2.
+mi1z
+mi2zt
+1m
+m12g
+m2ja
+m2j
+m1ns
+2m12r
+2m12r
+m12v.
+m2v
+m1vb
+m2v
+m1vh
+m1vr
+m1vv
+m2z
+m2z
+mj2n
+m1j
+mjob1b1o
+m1jo
+mjo2g12s
+mjo1g
+m2j1ol
+mj11s
+m1j
+mj1s
+m1j
+mka1r2
+m1ka
+mka2r1r
+mke1p2
+m1ke
+mk2p1e2r
+m1k
+mk1pe
+mki1a2
+m1ki
+mki12
+mki1e2
+mk2la
+mk2li
+mk2l
+mk2lo
+mk2lu
+mk2ra
+mk2r
+mk2re
+mk2r
+mk2ri
+mk2r
+mk2ro
+mk2r
+mk2va
+mk2v
+mla1f
+m1la
+mlap2r
+mla1p
+mla2p11ro
+mla2p1e2
+mla2pin
+mla1pi
+mla1s2t
+mls3s
+m1l
+ml2s3z
+mle1g2
+m1le
+mle12
+mle1kn
+mle1p1la
+ml2k1a2
+m1l
+ml2k1
+ml2k1el
+ml1ke
+ml2k12r.
+ml1k
+ml2k1ol
+ml1ko
+ml2kos
+ml2k
+ml2k12
+ml2s1z
+mls2z
+mlo2k1l
+m1lo
+mlo1k
+mlo2k
+ml1e2
+m1l
+ml2s1a2
+ml2s12
+mmag1g
+m1ma
+mma1gl
+mma1i2
+mmas2
+m2m1atk
+mme2g1
+m1me
+mme2g1o
+mmif2l12v
+m1mi
+mmi1f
+mmif1l
+1mo
+mo2be
+2m1obj
+mo1ci1
+2m1off
+mo2gy1a2
+mog2y
+mo1hu2
+mo2kab
+mo1ka
+mo2k1ad
+mo2k1a2k
+mo2k1a2l
+mo2k1a2n
+mo2kar
+mo2kd
+mo1k
+mo2k1l
+mo2k12s
+mo2k1e2
+mo2k1il
+mo1ki
+mok1k2
+mo2k1ol
+mo1ko
+mo2k1or
+mo2k12
+mo2k
+mok1t
+2m1oktat
+mok1ta
+mo1ku2
+mo2kur
+mo1k2
+mo2ks
+mo2k11to
+mo2k
+2m1o2laj
+mo1la
+2m1ol1da
+m1ol1d
+2m1o2lim
+mo1li
+mol1li2
+mol2l1in
+2m1ol1l
+moli2ko
+mo1l
+mol1i
+2m1oltr
+mol1t
+2m1olts
+2m1olvad
+mol1va
+2m1olvas
+mo2ly1ag1ga
+mol2y
+mo1lya
+2m1oml
+mon1a1c
+mo1na
+mo2n1a2d
+mo2n1a2l
+mo2n1an
+mo2n1a2p
+mona2r
+mo2n1as
+mo2n1ll
+mo1n
+mo2neg
+mo1ne
+mo2n1e2r
+mo2n1is
+mo1ni
+mon2or
+mo1no
+mo2n
+mons2
+mon1sp
+mon1t1r
+mo2n
+mo2n
+mo1ny2
+mon2y
+mo2nyz
+mo2or
+mo1o
+2m1opc
+2mo1pe
+mo2per
+mo1p2l
+2m1opt
+mo2r1ad
+mo1ra
+mora2n
+mor1an2y
+mor2la
+mo1r
+2m1or1d
+mo2r1e2l
+mo1re
+mo2r1e2r
+mo2rid
+mo1ri
+2m1o2ri1e
+mori2s
+mo2r1isk
+mo2r1i1s1zo
+moris2z
+mor1izg
+mor1izm
+mo2r1ol
+mo1ro
+mo2r1ont
+mo2r1n
+mo1r
+mo2r12r
+mo2rs
+mo2r
+2m1or2r.
+mor1s2
+mort2
+mor3t
+mor1tr
+mo2r
+mo2r
+mo2sl
+mo1s
+mo2s1e
+2mos1to
+2m1ostr
+2m1ost2y
+mo2s
+mo2szal
+mos2z
+mo1s1za
+mo1sz2f
+mo2szis
+mo1s1zi
+2m1osz1lo
+mosz2tat
+mosz1ta
+mosz2tt
+mosz1t
+mo1t2h
+2m1ott1ha
+mot2to
+mo2vi
+mo2xi
+mo3z1so
+moz2s
+1m
+m2g
+m1
+m1b2l
+m2c2h
+mcsa2p1
+m21c1sa
+mc2s
+mcsa1p2
+m2d1a2l
+m1da
+m2da1u
+m2dk
+m1d
+m2dr
+m2d1e2
+m2di2p
+m1di
+m2d1o2r
+m1do
+m1d2
+m2d1r
+m1du2
+mdus1
+m1fl
+mi2ko
+m1i
+m1k2l
+mkus1s
+m1ku
+m2lar
+m1la
+m1p2r
+m2rak
+m1ra
+m2rar
+m2rg
+m1r
+m2r1i
+m2rj
+m2rm
+mri2as
+m1ri
+mri1a
+m1r2
+m2r1n
+m2r
+m1s2k
+m1t1he
+1m
+m2b
+m2ko
+ml2c1s1a
+mlc2s
+ml2c1s
+ml2csel
+ml1c1se
+ml2cs1es
+ml2cs12r.
+ml1c1s
+ml2cs1il
+ml1c1si
+ml2c1s1o
+ml2c1s1
+m2le
+m2nu
+m2r1
+m1tl
+m2ve
+m2v
+m2v
+m2v
+1m
+ma2n
+m1a
+m2g
+m1
+me2l
+m1e
+me2r
+m2l
+m1
+m2te
+m1kl
+m1ps
+m2r12r
+m1r
+2m1rh
+2m12ri
+m2si
+m2s
+ms3zr
+ms2z
+m1s1z
+m2l
+m1
+m2zi
+mpa1dr
+m1pa
+m2p1akc
+m2p1ak1t
+m2p1ll
+m1p
+m2p1r1ko
+m2p1tj
+m2p1tk
+mp2ci
+mp1elt
+m1pe
+mpe2ra1u
+mpe1ra
+mpe2rr
+mpe1r
+mp1fr
+m2p1ind
+m1pi
+mp2lak
+mp1la
+mplo2mal
+mp1lo
+mplo1ma
+m1p2lu
+mpon1d2
+m1po
+m2p1ord
+mpor1ta2
+mpor2t1al
+mpor2t12r
+mpor1t
+mpor2t1e2
+m2p1oszts
+mpos2z
+mposz1t
+m2p1s
+m1p
+m1p2ref
+mp1re
+mp2rep
+m1p2rs
+mp1r
+m1prib
+mp1ri
+m1p2ric
+mp2ri1o
+m1p2rod
+mp1ro
+m1p2rof
+m1p2rog
+m1p2roj
+m1p2rop
+mp2rot
+m1p2rb
+mp1r
+m1p2ru
+m1p2s1zi
+mps2z
+m2p1u2ta
+m1pu
+m2p1u1t
+m2p1z
+m1p
+mra1p
+m1ra
+mren2d12
+m1re
+mr2m1
+m1r
+mripor1te2
+m1ri
+mri1po
+mripor2t1e1re
+msa2vo
+m1sa
+ms2ka
+ms2k
+ms2ki
+ms2ko
+ms2l
+ms2mi
+ms2ni
+m2s1ond
+m1so
+ms2pa
+ms2pe
+ms2pi
+ms2po
+ms2p
+ms2r
+ms2ta
+ms2t
+ms2te
+ms2ti
+ms2t
+ms2to
+mst2r
+ms2t
+mstdi21k
+m3s2td
+mst1di
+mstdi1
+msza2k
+ms2z
+m1s1za
+msza2k12
+mszraz1
+m1s1z
+msz1ra
+mszzharminc1
+mszz1ha
+mszz3harm
+mszzhar1mi
+msz2c
+msz2dem
+m1s1z
+msz1de
+m1sz2f
+mszn3n
+m1s1z
+msz2l
+msz2m
+m1sz2p
+msz2t
+m1sz2v
+mta2n12
+m1ta
+mtra2d
+m1t
+mt1ra
+mt2r1a1da
+mts3s
+m1t
+mt1e2
+m1t
+mtks2z1
+mt1k
+mtran2s
+mt1ra
+mtrans2z1
+mt2r
+mt2re
+mt2r
+mt2ri
+m1t2r
+mt2r
+mt2r
+1mu
+2m1udv
+2m1ugr
+m1ujj
+2mulet
+mu1le
+2mulz
+mu2m1ad
+mu1ma
+mu2m1el
+mu1me
+mu2ml
+mu1m
+mu2m1s
+mu2min
+mu1mi
+mu2m1ir
+mu2mis
+mu2m1iv
+mumks2z1
+mum1k
+mu2m12
+mu2m
+mu2m
+mumus1s2
+mu1mu
+mu2ni1
+mu1ni
+mu2nok
+mu1no
+2mu2r.
+mu2ral
+mu1ra
+mu2ram
+mu2rat
+mu2rl
+mu1r
+mur1izm
+mu1ri
+mu2r1u2
+mu2sal
+mu1sa
+mu2san
+mu2sar
+mu2sas
+mu2sat
+mu2s12g
+mu1s
+mu2sl
+mu2s1e
+mu2s1r1t
+mu1s
+mu2sir
+mu1si
+mu2sor
+mu1so
+mu2s12
+mu2s
+muss2
+mus3s1ze
+mus2s2z
+mus2t1r
+mus1t
+mus2t1erj
+mus1te
+mu2szal
+mus2z
+mu1s1za
+mus3zav
+mu2szl
+mu1s1z
+mu2szs
+mu2t1a2g
+mu1ta
+mu2tal
+mut1a2la
+2m1uta1l
+2m1u2talv
+muta2n
+mu2t1an2y
+mu2ta1s
+m1u2taz
+mu2t12ra
+mu1t
+mu2t1rb
+mu2t12ru
+2m1u2ts
+2m1ut1ca
+mu2t1el
+mu1te
+mu2til
+mu1ti
+mu2t1in
+2m1u2tol
+mu1to
+2m1u2td
+mu1t
+2m1u2t1p2
+mu2t1
+mu2t
+1m
+m2j
+ml2t1e2
+ml2tol
+ml1to
+2m12r.
+m2ri
+2m1rn
+2m12s2z
+2m1tb
+2m1th
+2m12ti
+2m1tj
+2m1tk
+2m1tm
+2m1tn
+2m12to
+2m1tr
+2m1tt
+2m1tv
+1m
+m2d
+m2d
+m2g2y
+m2n
+m2re
+m2r
+m2r
+m2te
+m2t
+m2t
+mt1e2
+m2ve
+m2v
+m2ze
+1m
+m1bl
+m1br
+m1fl
+m1fr
+m1gr
+m1kl
+m1pl
+m1pn
+m1pr
+2m1rl
+m1sp
+m1s2
+m1s2z
+msza2k1l
+m1s1za
+msza1k
+mtks2z1
+m1t
+mt1k
+mves3s
+m1ve
+m2z
+m2zi
+m2z
+m2z
+m2z
+m2v1a2dot
+m1va
+mva1do
+mvgya2d
+m1v
+mvg2y
+mv1gya
+mv2gy1a1da
+mvers3s
+m1ve
+mve1r
+mw2hi
+mza2t1e
+m1za
+mzs3s
+m1z
+mze2r1o
+m1ze
+mze2t1a2
+mze2t12
+mze2t1e2g
+mze1te
+mze2t1el
+mze2ter
+mze2tes2z
+mze2t12k
+mze1t
+mze2t1rd
+mze2to
+mze2t12
+mze2t12
+mz2s1a
+m1z
+mz2so
+mzks2z1
+m1z
+mz2ks
+mz1k
+mze2r
+m1z
+mz1e
+mz2r
+2n.
+1na
+naa2d
+na1a
+n1ab1b
+2n1abr
+2n1abs
+na1cl
+2n1a2dag
+na1da
+2n1a2ds
+na1d
+2n1add
+2n1adm
+2n1a2d
+na1d2re
+2n1adt
+na2d2u.
+na1du
+na2dus
+na2e1i
+na1e
+na2p
+na1
+na2r
+2n1aff
+na1f2r
+na2g2a.
+na1ga
+na2gr
+na1g
+na2git
+na1gi
+na2gn
+na1g
+n2a1g1r
+na2gy1agg
+nag2y
+na1gya
+na2gy1a2l
+na2gyapj
+na2gy1as
+na2gyav
+na2gy12k
+na1gy
+na1gy2
+nagy1r
+na2gy1t
+nagyva2d12
+nagy1va
+na2i2re
+na1i
+na2ji
+2n1ajk
+2n1a2ka2d.
+na1ka
+2n1a2ka1d
+2n1a2kadha2t.
+nakad1ha
+2n1a2kadhatnak
+nakadhat1na
+2n1a2kadhatnnk
+nakadhat1n
+2n1a2kadha1to
+2n1a2kadha1tu
+2n1a2kadjan
+nakad1ja
+2n1a2kadjat
+2n1a2kad1jo
+2n1a2kad1ju
+2n1a2kad1na
+2n1a2kadnn
+nakad1n
+2n1a2kad1n
+2n1a2kad1ni
+2n1a2kad1nu
+2n1a2ka1do
+2n1a2ka1d
+2n1a2kads
+2n1a2kad2t.
+2n1a2kadta2k.
+nakad1ta
+2n1a2kadta1ka
+2n1a2kadtam
+2n1a2kad1t
+2n1a2kad1tu
+2n1a2ka1du
+2n1a2kadv
+naka1r2
+nak12s2z
+na1k
+na2k1t
+1nakci2i1na
+nak1ci
+nakci1
+nakci1i
+n1ak1ko
+na1k1li
+na1k1lu
+nako2l
+na1ko
+nak1o1la
+2n1a2k2.
+na1k
+n2a1k2r
+2n1a2kus
+na1ku
+na2k1tn
+na1k
+na2l1a2d
+na1la
+2n1a2la2g1
+na2l1aj
+na2l1a2l
+1na2la1na
+2n1a2la1pa
+2n1a2lapd
+na2lapr
+na2lapt
+na2lar
+na2lav
+nal1br
+na1l
+na2lg
+na2l12l
+na2l12ro
+na2l12t1
+na2l1ts
+na2l1e1l
+na1le
+na2l1ell
+nal1eng
+n2alen
+nal1ent
+nal12g.
+n2alg
+na1l
+na2l1k
+na2l11ri
+na2lid
+na1li
+na2l1ing
+na2l1i2o
+na2l12r
+na1l
+2nalzisb
+nal21zi
+2nalzi1se
+2nalzi1s
+2nalzish
+2nalzi1si
+2nalzisk
+2nalzisn
+2nalzisr
+2nalzis1s
+nalzis3s2
+2nalzist2
+2nalzi1s
+2nal2j.
+n1alj2a.
+nal1ja
+3naljac
+n1aljad
+n1alja1i
+2naljak
+n1aljam
+n1aljat
+n1al1ji
+2naljon
+nal1jo
+2nal1ju
+2n1aljz
+2n1alkat
+nal1ka
+n2a2l1ob
+na1lo
+na2l1ol
+n2a2lop
+nal1os2z
+na2l12r
+na1l
+na2l1
+nalt2
+nal1tr
+na2lulj
+na1lu
+na2l1ut
+na2l
+na2mer
+na1me
+2n1a2mit1bo
+na1mi
+2n1a2mi1te
+2n1a2mitg
+2n1a2mit1ha
+2n1a2mitk
+2n1amitl
+2n1a2mitm
+2n1a2mi1t
+2n1a2mitp
+2n1a2mit1ro
+2n1a2mit1r
+2n1a2mits
+2n1a2mit1t
+2n1a2mit1t
+2n1amp
+2n1a2nal
+na1na
+2n1ang
+2n1anh
+na2nd
+na1n
+2n1a2nyag
+nan2y
+na1nya
+nao2l
+na1o
+na2r
+na1
+2nap2a.
+na1pa
+nap1a1d
+na2p1a2g
+na2p1a1la
+n2apal
+na2p1alk
+na1p1a2pa
+n2apap
+nap1a1p
+nap1a1r
+na2p1as
+na2pd
+na1p
+na2p12g
+na2pk
+nap1ll
+na2pm
+na2p1rb
+na2p1tm
+nape2l
+na1pe
+na2p1ell
+na2pe2m
+nap1est
+nape2s
+na2p1ill
+na1pi
+na2p1ing
+na2p1int
+nap1isk
+na2p
+nap2lat
+nap1la
+na2p1o1la
+na1po
+nap1orm
+napos1s
+na2p1os1t
+na2p1ott
+na2p2.
+na1p
+na2p12r
+napp2
+2nap1po
+nap1pr
+n1ap1r
+na2p1u2t
+na1pu
+na2p1r
+na1p
+2n1a2ra1i
+na1ra
+2n1a2rann
+2n1a2ran2y.
+naran2y
+2n1a2rany2a.
+nara1nya
+2n1a2ra1ny
+2n1a2ranyb
+2n1a2ranyh
+2n1a2ranyk
+2n1a2ranyn
+2n1a2ranyr
+2n1a2rany1s
+2n1a2ranyt2
+2n1ar2c.
+2n1ar1c
+narchi2ab
+narc2h
+nar1c1hi
+narchi1a
+2n1ar1co
+2n1ar1cu
+2n1ar1c
+2narr
+2n1arz
+na2sv
+na1s
+nas1isk
+na1si
+2nask
+na1s2ka
+na1s2r
+nast2
+n2a1s2ta
+n2a1s2t
+n2a1str
+na2sz1an
+nas2z
+na1s1za
+na2sz12rad
+na1s1z
+nasz1ra
+nas2zks2z1
+nasz1k
+nasz12g
+n2a1s1z
+n2a2t1ab
+na1ta
+na2tad
+na2t1aj
+na2t1al1k2
+na2t1alt
+nat1a1r
+n2atar
+nat1ll
+n2atl
+na1t
+na2t12r
+n2atr
+na2t1rn
+na2t1eg
+na1te
+nate3le
+na2t1e1l
+nat1el1le
+n2a2tl
+na1t
+nat1r1ke
+n2atr
+na2t1rv
+na2t1i2m
+na1ti
+na2t1ing
+n2atin
+na2t1old
+na1to
+nat1ors2
+n2ator
+na2t1os2z
+na2t1u2t
+na1tu
+na2tl
+na1t
+n2at2z
+na1t
+2n1a2t2y
+na2ul
+na1u
+nau2ra
+na2u1r
+nau2s
+na2u1to
+na2u1t
+na2z
+na1
+na2vart
+na1va
+na2vat
+2n1avv
+na1wh
+2n1azb
+na2z
+2n1a2zo
+1n
+2n12b
+2nbr
+n2caj
+n1ca
+n2c3h
+n2c
+n2csal
+nc2s
+n1c1sa
+n2csap
+n2cs1as
+2n1csbelir
+ncs1be
+ncsbe1li
+2n1csbeli1t2
+n2c1se
+nc3sik
+n1c1si
+n2csis
+2n12csolat
+n1c1so
+ncso1la
+nc3sor
+n2c1s
+n2c1s
+nc3s2z
+n2d1a1la
+n1da
+n2da1p2
+n2d1a2r
+n2d1as2z
+n2d1a2v
+n2d
+nd1d
+n2d1e2
+n2d1
+n2dud
+n1du
+n2d12
+n2d2z
+n2ga
+n2g
+n2gi
+n2gu
+n2g
+n2g2y
+2n12h
+n2k12r.
+n1k
+n2kol
+n1ko
+n2k
+n2lab
+n1la
+n22l1a2l
+n2la1na
+n1lar
+nla2te
+n2l1az
+n2l1t
+n1l
+n1le2
+n2l1eg
+n2l1el
+n2lem
+n2les
+n21l
+n2l1p
+n2l1in
+n1li
+n2lir
+n2l
+2n1l2l.
+2n1ll2a.
+nl1la
+2n1llap
+2n1llat
+2n1l1l
+2n1llom
+nl1lo
+nllks2z1
+nl1l
+nll2ks
+nll1k
+nllkz1
+nll1k
+n2l
+n2m
+n2mu
+n2nad
+n1na
+n2n1al
+n2nar
+n2n12r
+n1n
+nn2c1e
+n2n1e2
+n1n2
+n2nt
+n2n
+nn2se
+n2n
+n2rad
+n1ra
+2n12ra1ka
+2n12rakb
+2n12rakh
+2n12rakk
+2n12rakn
+2n12ra1ko
+2n12rakr
+2n12rakt
+2n12ram
+n2r1a2n
+n2rap
+n2ras
+nr1ass
+2n12ra2t.
+n2r1att
+n2r1av
+n2r12c
+n1r
+n2r1l
+n2r1e2
+n2r11ve
+n1r
+2n12ria1i
+n1ri
+nri1a
+2n12ri1
+n2r1i2p
+n2r
+n1r2
+n2r1r
+n2r
+nr1s2
+nrt2
+nr1tr
+2n12rud
+n1ru
+n2rug
+2n12ru2n.
+n2r1ur
+2n12rus
+n2ru2t
+nr1u1t
+n2rt
+n1r
+n2r
+n2s1as
+n1sa
+ns11r
+n1s
+n2s12ru
+2n12ss
+n2s1e2
+n2s1i2k
+n1si
+nsk2ro2k.
+ns1k
+nsk1ro
+nst2
+ns1tr
+n2sza2n
+ns2z
+n1s1za
+n2sza2s
+n2szg
+n1s1z
+n2szl
+n2s1ze
+n2szn
+n1s1z
+n2szil
+n1s1zi
+n2szin
+n2szis
+2n1szk2a.
+nsz1k2
+nsz1ka
+2n1szoks
+n1s1zo
+n2s1z1
+n2s1z1
+n2s1z1
+n2ta1la
+n1ta
+n2t1a2n
+n2t1l
+n1t
+nt1sv
+n2t1e2
+2n1t1hi
+n2t1i2o
+n1ti
+2n12t1ir
+2n12t
+2n1t1l
+n2t1
+2n1t1ru
+2n12t1ug
+n1tu
+2n12t1u2t
+2n12t
+n2t
+2n1t1vi
+nba2k
+n1ba
+nba2k1e2
+nbank2ri
+nban1k
+nbank2rokn
+nbank1ro
+nbank2rokr
+n2b12kb
+n1b
+nb1k
+n2b12kn
+n2b12kr
+n2b12kv
+n2b12rs1gi
+n1b
+nb1r
+nbr1s
+nb2la
+nb2lo
+nb2l
+nbo2n1a2
+n1bo
+nb2ra
+n1b2ri
+nb2ro
+nb2r
+nburg2hi
+n1bu
+nc1a1c
+n1ca
+n2c1a1j
+nc1ajt
+n2c1akn
+n2c1akt
+nc1a2la
+nc1alj
+n2c1alk
+nc1alt
+nc1alv
+nc1a1na
+nc1ant
+nc1a2nya
+ncan2y
+nc1a1ri
+nc1att
+n2c1a1va
+n2c1g
+n1c
+nc1rb
+n2c1rk
+n2c1rn
+nc1rt
+nc12sa
+nc11s
+nc1bl
+nc1br
+nc3c1si
+nc2c2s
+nc3c1so
+nc3c1s
+nc3c1su
+nc1dr
+nce1a2
+n1ce
+nc1egg
+n2c1eld
+nc1e2lek
+nce1le
+nc1e2lem
+nc1elm
+n2c1elv
+nc1e2red
+nce1re
+nc1e1r
+n2c1eszt
+nces2z
+n2c1etn
+n2c1ex
+nc2g1r
+n1c
+nc1g
+nc2hes
+nc1he
+n2c1p
+n2c11vi
+nc1fl
+nc1fr
+nc1gr
+n2c3ha
+nc2h
+n2c3h
+nc3hel
+n1c1he
+nc3het
+n2c3h
+nc3hi1
+n1c1hi
+n1c3h
+nc3hol
+n1c1ho
+nc3hon
+n2c3hoz
+n2c3h
+n1c3h
+n2c3hu
+n2c3h
+nci2alis
+n1ci
+nci1a
+ncia1li
+nci2a1so
+n2c1i1ge
+n2c1i2g
+n2c1i2ko
+nc1i2m
+n2c1i2n2a.
+nci1na
+n2c1in1d2
+n2c1inf
+n2c1ing
+n2c1int
+n2c1i2pa
+n2c1i1r
+nc1i1ro
+n2c1ist
+n2c1i2ta
+n2c1i2z
+nc1j
+n1c
+n2c1r
+n2c1v
+n2c1z
+nc1kl
+nc1k1re
+n2c1ob
+n1co
+n2c1ok1ta
+n2c1o2li
+n2c1orv
+n2c1ott
+n2c1l2t.
+n1c
+nc1ss
+nc2t
+nc1r
+n1c
+nc1pl
+nc1pr
+n2cs1ab
+nc2s
+n1c1sa
+n2csac
+n2csad
+n2cs1ag
+n2cs1ajt
+n2csakt
+ncs1alap
+ncsa1la
+n2cs1alj
+n2csam
+n2csan
+ncsa2p12g
+ncsa1p
+ncsa2r
+ncs1a1ra
+n2cs1arg
+ncs1a1ro
+n2cs1a2u
+n2csaz
+ncs1gr
+n1c1s
+n2csg
+n2cs1l
+n2c3s2r.
+n2cs12r
+ncs1rb
+n2cs1rn
+ncs1rr
+n2cs1ru
+n2c2s1ta
+n2cs1t
+n2c2stv
+n2c2s1elf
+n1c1se
+ncs12rs
+n1c1s
+ncs1r
+n2csr1te
+n2cs1r1t
+n2c3s1r
+n2c3s1ta
+ncs1i2kon
+n1c1si
+ncsi1ko
+ncs1int
+n2cs1i1o
+n2csi1pa
+n2csi1r
+nc2s1irt
+n2cs1ism
+n2csi1ta
+ncs1izz
+n2c3s1ki
+n1c1s
+n2cs12r
+n2cs1zt
+n2csob
+n1c1so
+n2cs1oks
+n2c2sok1ta
+n2c2sos2z
+n2cs12l
+n1c1s
+n2cs1s
+n2cs1z
+n2cs12r.
+n1c1s
+ncs11r
+nc3spec
+ncs1pe
+ncs1s
+n2csur
+n1c1su
+ncsu2t
+ncs1u1ta
+n2cst
+n1c1s
+n2csg
+n1c1s
+n2cst
+ncs3zr
+ncs2z
+nc1s1z
+nc3s1ze
+nc3s1zo
+nc3s1z
+nc3s1z
+nc1tr
+n2c1ud
+n1cu
+n2c1ug
+nc1uj
+n2c1ur
+n2c1j
+n1c
+nc1t
+n2c1g
+n1c
+n2c1t
+nc1v
+n2c1z
+n2c1r
+n1c
+nc1ya
+n2c3z
+nc2z
+n1c3ze
+n2c3z
+n1c3z
+nc3z2s
+n1c3z
+nczy1i
+n1czy
+nd1abl
+n1da
+nda1br
+nd1a2dat
+nda1da
+nda2ds
+nda1d
+nd1add
+n2d1a1j
+n2d1akc
+n2d1akk
+nd1akt
+n2d1alj
+n2d1alr
+nd1ann
+nd1a1p
+nd1a2rn
+nda1r
+nd1arr
+ndat1an2y
+nd2atan
+nda1ta
+nd2a2tap
+nda2t1eg
+nda1te
+nd2a2tin
+nda1ti
+nd2a2tir
+nd1a1zo
+nd1azt
+nd1azz
+nd12rak
+n1d
+nd1ra
+nds1s
+nd1bl
+nd1cl
+nd1dr
+nd1ebb
+n1de
+n2d1e2kb
+nde1k
+n2d1e2kin
+ndek1i
+nde2kz
+nde1k
+n2d1elf
+n2d1el1ha
+n2d1ellen
+ndel1le
+n2d1elm
+n2d1e1l
+nde2mer
+nde1me
+nde2mu
+nde2m1
+nde2n
+nde1p2
+nde2r1a
+nde2rl
+nde1r
+nde2rz
+nde2rel
+nde1re
+nde2ro
+n2d1e2r
+n2d1e2sett
+nde1se
+n2d1e2ss
+nde1s
+n2d1e2s
+n2d1e2s1z
+ndes2z
+n2d1e1za
+nd2go
+n1d
+nd2ke2l
+nd1ke
+nd12kez
+nd2k
+nd11le
+nd1lm
+n2d1p
+nd2raj
+nd1ra
+n2d1s2s2z2
+n2d1szb
+nds2z
+n2d12sz2e.
+nd1s1ze
+n2d12s1z
+n2d1szh
+n2d1sz1k2
+n2d1szl
+n2d1szr
+n2d12te
+n2d1tt
+nd1fr
+nd1gr
+n2d1i1ga
+n1di
+n2d1i1ge
+n2d1ill
+n2d1i2n2a.
+ndi1na
+n2d1ing
+n2d1ins
+n2d1i2onj
+ndi1o
+ndi212
+ndi1
+ndi2f
+ndi2m
+n2d1i1s1za
+ndis2z
+nd2j1a2da
+n1d
+nd1ja
+nd1kl
+n2d1o1
+n1do
+ndo2k12t
+ndo1k
+ndo2rl
+ndo1r
+n2d1or1ni
+ndo2r1
+n2d1ov
+nd2r
+n1d
+nd1
+nd12ni
+n2d12r
+nd2b
+n1d
+nd1ss
+n2d12z
+n2d12r.
+n1d
+n2d12r1a2
+n2d1rb
+n2d1rc
+n2d1rd
+nd12reg
+nd1re
+nd12re1i
+nd12rek
+nd12rel
+n2d12rk
+nd1r
+n2d12rn
+nd12rr
+nd12rt
+nd12rv
+n2d1rf
+n2d1rg
+nd12rig
+nd1ri
+nd12r1is
+nd12rit
+n2d1rj
+n2d1rk
+n2d1rl
+n2d1rm
+n2d1rn
+n2d1rok
+nd1ro
+n2d1ros
+n2d12r
+nd12r12s
+nd1r
+n2d1rp
+n2d1rr
+n2d1rs
+n2d1rt
+n2d11r
+n2d1rv
+nd1pr
+nd2raz
+nd1ra
+n1d2ruk
+nd1ru
+nd1sl
+nd1sp
+nd1st
+ndsz2m1t
+nds2z
+nd1s1z
+nd3sz1m
+nd3sze2r1e2l
+nd1s1z2e
+ndsze1re
+ndtr2s1a2d
+nd1t
+ndtr1sa
+n2d1u2s1zo
+n1du
+ndus2z
+ndu2t
+n2d1u1ta
+nd12j
+n1d
+nd2r
+nd1s2z
+n2d1g
+n1d
+nd1nn
+n2d1z
+n2d12r.
+n1d
+n2d1rr
+n2d1rt
+n2d1z
+ndy2b
+ndy2h
+ndy2n
+ndy2r
+ndy2t
+ndy2v
+nd3zav
+nd2z
+n1d1za
+nd3zr
+n1d1z
+n2d3ze
+n2d3zi
+n2d3z
+n2d3zu
+1ne
+nea2d
+ne1a
+nea2j
+nea2k
+nea2la
+ne2a1lo
+nea2n
+nea2r
+ne2b
+ne1b2l
+ne1d1ra
+ne1d2r
+ned2v1el
+ned1ve
+2n1e2d1z
+ned2z
+2neff
+2n1e2ger
+ne1ge
+2n1e2g2r.
+ne1g
+ne2g1
+n1eg2y.
+neg2y
+n1egyb
+ne2gyek
+ne1gye
+ne2gyen
+ne2gyes
+ne2gyet
+ne2gyez
+2n1e2gy
+n1egyf
+n1egyh
+ne2gyig
+ne1gyi
+n1egyk
+n1egym
+n1egyn
+n1egyr
+2n1egys
+n1egyt
+ne2gyn
+ne1gy
+nehz1
+ne1h
+2n1ehh
+nei2g
+ne1i
+ne2r
+ne1
+ne2k1aj
+ne1ka
+ne2k1a2n
+ne2kt
+ne1k
+ne2k1e2g
+ne1ke
+nek1e1r
+nek12j
+ne1k
+ne2kk
+nek1kn
+neki1e2
+ne1ki
+2nekj
+nek1k2
+2nek1ka
+2nek1ki
+ne1k1lu
+ne2k1ok
+ne1ko
+nek2r
+ne1k
+ne1kre1
+nek1re
+nek1t2
+ne2k1g
+ne1k
+nek1l1d
+ne2lag
+ne1la
+ne2l1a2j
+ne2l1an
+ne2ll
+ne1l
+nel2r
+ne2lef
+ne1le
+ne2leg
+n1eleg2y.
+neleg2y
+ne1l1e2le
+nele2ma
+nelem1el
+nele1me
+nel1e2ms
+nele1m
+nel1eng
+ne2ler
+ne2l1p
+ne1l
+nel1f2
+nel1g2
+2n1el1ha
+ne2l1id
+ne1li
+ne2lim
+ne2l1in
+n1el1l
+2n1elnev
+nel1ne
+ne2l1ot
+ne1lo
+ne2l12
+ne2l12
+2n1e2l1a
+ne1l
+2n1e2l1
+ne2ld
+ne2lf
+ne2l1h
+2n1e2l1
+2n1e2l1k
+ne2ll
+2n1eln2y
+2n1e2lrej
+nel1re
+2n1e2l1t
+2n1eltr
+nel1t
+ne2ll
+ne1l
+2n1elz
+ne2mak
+ne1ma
+2nem1ba
+2n1ember
+nem1be
+neme2g
+ne1me
+nem1eg2y
+2neme1le
+2n1e2melk
+ne2m1es2z
+ne2m12r.
+ne1m
+ne2m1id
+ne1mi
+ne2m1is1s1za
+nemis2s2z
+2nems
+2nemul
+ne1mu
+2n1eng
+2n1enn
+nen2sa
+nense2s
+nen1se
+nen2s1e1se
+nens3s
+nen2s3z
+2n1enyv
+nen2y
+2n1enz
+ne2ob
+ne1o
+ne2od
+ne2of
+ne2og
+ne2oh
+ne2o1ko
+ne2o1la
+ne2o1li
+neo1n1a2
+ne2op
+ne2o1ro
+ne2pad
+ne1pa
+ne2pelm
+ne1pe
+ne2p1est
+ne2pid
+ne1pi
+ne2p12r
+ne1p
+ne2p1ut
+ne1pu
+ne2r1a2d
+ne1ra
+ne2r1a2k
+ne2r1a2n
+ne2r1a2r
+ne2r1as
+ne2raz
+ne2rb
+ne1r
+ner2co2
+ne2r1e2g
+ne1re
+n1e2rej
+ne2r1e2k2e.
+nere1ke
+ne2r1e2l
+ner1e2mel
+nere1me
+ne2r1er
+ne2rez
+ne2rg
+ne1r
+ne2r1l
+ne2r1p
+ne2r1tt
+ne2r1id
+ne1ri
+ne2r1i2ga
+ne2r1il
+ne2r1i2m
+ne2r1inf
+ne2r1ing
+ne2r1int2
+ne2ris
+ner1k2
+ne2r1ol
+ne1ro
+ne2ror
+ne2r1os
+ne2r
+ne2r1n
+ne1r
+2n1e2r
+3n2e3r1k
+ner1s
+ner1tr
+ne2r1u2
+ne2r1g
+ne1r
+ne2s1al1j
+ne1sa
+ne2sas
+ne2s1l
+ne1s
+ne2sr
+2n1e2setb
+ne1se
+2n1e2setr
+2n1e2ss
+ne1s
+2n1e2s
+nes3s1za
+nes2s2z
+nes3s1z
+2n1es1t
+2n1es1ti
+ne2s12v
+ne1s
+nesz1l
+nes2z
+ne1s1z
+ne2s3zr
+ne2sz1l
+ne1s1z
+ne2s1z12
+ne2t1ab
+ne1ta
+net1a2la
+ne2t1a2n2y
+ne2tl
+ne1t
+ne2t1t1
+ne2t1e2g
+ne1te
+net1e1l
+net1elm
+ne2t1el1a
+nete1l
+ne2t1eml
+ne1t1es1te
+ne2t1es2z
+ne2t1etet
+nete1te
+ne2t1e1ti
+ne2t12k
+ne1t
+ne2t12l
+ne2t12r.
+ne2t1rd
+ne2t11r
+ne2t12r2.
+net1r
+ne2t12rk
+ne2t1rr
+ne2tr1te
+ne2t1r1t
+ne2t12r
+ne2t1s2z
+ne2t12v2e.
+net1ve
+ne2ti2d
+ne1ti
+ne2t1i2ko
+ne2t1int
+ne2tip
+netk2s1z1
+net1k
+netks2z
+ne2t1o2k
+ne1to
+ne2tol
+net1old
+ne2t12
+net2tv
+net1t
+ne2tun
+ne1tu
+ne2t1ut
+net2l
+ne1t
+net11l
+ne2t12z
+2n1e2v
+2n1evv
+ne1y
+2n1e2zer
+ne1ze
+2n1e2zs
+ne1z
+1n
+2n1br
+2ndl
+n1f2r
+2n12g.
+2n12gek
+n1ge
+2n12ge1t
+2n12get2.
+nge1t
+2n12geth
+2n12getk
+2n12getn
+2n12gett
+2n12g
+2n1gj
+2n1gn
+2n12g
+2n1gs
+2n1gt
+2n12g
+n2gyer
+ng2y
+n1gye
+n2gyn
+n1gy
+n2gy1o2
+n2gyk
+n1gy
+2n12hes
+n1he
+2n1hs
+n2kaj
+n1ka
+n2kak
+n2k1a2n
+n2kar
+n2k1
+nke2l
+n1ke
+nk1e1le
+n2ker
+n2kv
+n1k
+n2ki2d
+n1ki
+nk1is2z
+2n12k
+n2k
+n1k2
+n2kl
+n12les
+n1le
+2n12let
+2n1lm
+n2l1i
+n1l
+n2ln
+2nne1ke
+n1ne
+2n12ne1k
+n1pa2
+n2pad
+n2p1ak
+n2p1al
+n2p1an
+n2pap
+n2p1as
+n2pa1u
+n1p2
+n2p1l
+n2p1r
+n2pt
+n2p1z
+n2peg
+n1pe
+n22p1e2l
+n2p1e2r
+np1etet2
+npe1te
+n2p1etn
+n2pev
+n2p1s
+n1p
+np1f2
+n2p
+2n1ptk
+2n1pttet2.
+npt1te
+nptte1t
+2n1pttet1i
+2n1pttet2k.
+n3pttetkn
+n2p1o
+n2p1
+n2p
+np1s
+n2p1u2s
+n1pu
+n2p
+2npl
+n1p
+n1ra2
+n2raj
+n2r1an
+n1rd
+2nr1de
+2n12rem
+n1re
+n2r2.
+n1r
+n2rs
+n2r2i.
+n1ri
+n2rin
+n2rip
+n2r
+2n12r2.
+n1r
+2n1r1t
+n2r
+2n1rz
+n2s1e2l
+n1se
+n2s1g
+n1s
+ns3szer
+ns2s2z2
+ns1s1ze
+nsz1ak
+ns2z
+n1s1za
+nsz1al
+n22s1z1
+n2szeg
+n1s1ze
+nsz1e2k1t
+nsze1k
+n2sz1e2l
+n2sz1emb
+n2s2z1e2s2z
+n2sz1k
+n1s1z
+n2szik
+n1s1zi
+n2s1z1
+ns2zks2z1
+nsz1k2
+nsz1k
+n2s1z
+n22s1z12
+n2s1zu
+n2s1z1
+n2szl
+n1s1z
+n2t1eg
+n1te
+2n12tel
+n2t1es
+2n12tet
+n1ti2
+n2tir
+n1t2r
+n1va2
+nv1a1da
+n2vad
+nv1a1d
+n2vaj
+n2var
+n2vav
+n2v1g
+n1v
+2n1v1b
+2n12v2e.
+n1ve
+2n12ve1i
+2n12vek
+nve2l
+n2v1e1le
+n2v1e1l
+2n2vem
+2n12ven3k2
+2n12vent
+n2v1e2r
+n2ves
+nv1es2z
+2n2vet
+2nvb
+n1v
+n2v12l
+n2v11ri
+n2v1r
+n2v1rz
+n2vis
+n1vi
+2n1vn2y
+n2v1o
+n2v
+n2v
+n2v1u2
+n2v
+n2vn
+n1v
+n2za
+nfe2le1m
+n1fe
+nfe1le
+nf2l1o
+n1f
+n1f2la
+n1f2lo
+nfluo1r1e
+nf1lu
+nflu1o
+nfol2ta
+n1fo
+n1f2rak
+nf1ra
+n1f2r
+n1f2rek
+nf1re
+n1f2ri
+n1f2r
+n1f2r
+n1f2ru
+nfs2t11l
+n1f
+nfs1t
+n2g1abl
+n1ga
+n2g1a2dat
+nga1da
+n2g1a2d
+n2g1a2dot
+nga1do
+n2g1a2d2.
+nga1d
+n2g1a2d1a
+n2g1a2db
+n2g1a2d2i.
+ngad1i
+n2g1a2di2k.
+n2g1a2din
+n2g1a2dit
+n2g1a2di1va
+n2g1a2d1ja
+n2g1a2djn
+ngad1j
+n2g1a2dj2t.
+n2g1a2dj1v
+n2g1a2d1ju
+n2g1a2d2k.
+n2g1a2d1ka
+n2g1a2d1k
+n2g1a2dkh
+n2g1a2dkk
+n2g1a2dkn
+n2g1a2dk1ra
+n2g1a2d2n.
+n2g1a2d1ra
+n2g1a2dt
+n2g1a2dv
+ng1akn
+n2g1akr
+n2g1akt
+n2g1a2lag
+nga1la
+ng2al2akun
+ng1ala1ku
+ng1alt
+nga1l
+ng1alel
+nga1le
+n2g1alg
+n2g1alj
+n2g1a2n2y
+nga1p2
+n2g1a2rn
+nga1r
+n2g1arc
+n2g1art
+n2g1arz
+n2g1asp
+ng1as2s2z
+n2g1aszt
+ngas2z
+nga1tr
+n2g1a2u
+n2g1a1va
+n2ga2zon
+nga1zo
+ng2c
+n1g
+n2g12g
+ng1l1l
+ng1l1lo
+ng1l1l
+n2g1p
+n2g12ra1i
+ng1ra
+n2g12rak
+ng12ras
+n2g12ra2t
+n2g12r
+ng2r
+n2g1r1ta
+ng2ruk
+ng1ru
+n2g12r
+n2g12szaib
+ngs2z
+ng1s1za
+ngsza1i
+n2g12szair
+n2g12szait
+n2g12szv
+ng1s1z
+n2g12s1z
+n2g12sz2i.
+ng1s1zi
+n2g12szig
+n2g1sz1ko
+ngsz1k2
+n2g12szo1k
+ng1s1zo
+n2g12szos
+n2g12t12
+ng1tc
+n2g12t1e2
+n2g12ti
+n2g1tk
+n2g1tl
+n2g1tm
+n2g1ts
+n2g1tv
+n2g12zj
+ng1z
+n2g12zs
+n2g1zta1to
+ngz1ta
+ng1bl
+ng1br
+ng1d2r
+ng1ed2z
+n1ge
+nge2gs2z1
+n2g1e2g
+n2g1e1la
+nge2lis
+nge1li
+nge2r1a
+nge2rl
+nge1r
+nge2r1e2s2z
+nge1re
+nger2im
+nge1ri
+nge2ro
+n2g1esem
+nge1se
+n2g1eszk
+nges2z
+nge2ti1ka
+nge1ti
+n2g1ex
+n2g12g
+n1g
+n2g2les
+ng1le
+n2g12p
+n2g1rc
+n2g1rl
+n2g12r2.
+ng1r
+n2g1r1t
+ng2sa
+n2g11te
+ng1fr
+ng1g2r
+ng3gyi
+ng2g2y
+ng3gyo
+n2g1i2d
+n1gi
+ngi2g
+n2g1i1ga
+n2g1i1ge
+n2g1i2g
+ng1i2ko
+n2g1ikr
+n2g1ill
+ngi2m
+ng1i1mi
+n2g1inf
+n2g1ing
+n2g1ins
+n2g1i1ro
+n2g1izg
+ng1g
+n1g
+ng1r
+ng1v
+ng1z
+ng1kl
+ng1kr
+ng1kv
+n1glec
+ng1le
+ngmeg1
+ng1me
+n1g2n
+n2g1of
+n1go
+n2g1op
+ngo1ra1
+n2g1ord
+n2g1org
+n2g1ork
+n2g1os1to
+ng1oszt
+ngos2z
+n2g1otth
+ng2ri1
+n1g
+ng1ri
+n2g1b
+n1g
+n2g1nt
+ng2r
+ng11r
+n2g1rv
+n2g1v
+n2g12z
+ng11r
+n1g
+ng2z12s
+ng1z
+ng1pr
+ng1ps
+n1g2ram
+ng1ra
+ng2run
+ng1ru
+ng1sh
+ng1sk
+ng1sp
+ng1st
+ng1tr
+n2g1ud
+n1gu
+n2g1ug
+n2g1uj
+n2g1und
+ng1u2ra
+n2g1u1ta
+n2g1j
+n1g
+n2g1tt
+n2g1d
+n1g
+n2g12g
+ng1r
+ng1t
+n2g1z
+ng1r
+n1g
+n2gy1a2gya
+ng2y
+n1gya
+ngyag2y
+ngya2l12
+ngy1ass
+n2gy12l
+n1gy
+n2gy1em
+n1gye
+n2g3yene1s
+ngy2enes
+ngye1ne
+n2gy1es
+n2gyez
+n2gy12d
+n1gy
+ngy1ks
+ngy1kt
+n2gyl
+n2gy12r.
+n2gyid
+n1gyi
+n2gyim
+n2gyb
+n1gy
+n2gy1ut
+n1gyu
+n2gy12l
+n1gy
+nha2b1i
+n1ha
+nhal1k2
+nha2sbr
+nha1s
+nh2z1alt
+n1h
+nh1za
+nh2zip
+nh1zi
+nh2zol
+nh1zo
+nh2z
+nh2z3s2
+nhe2d3z
+n1he
+nhe2i
+nh2s
+n1h
+nhs3s
+1ni
+ni2a1a
+ni1a
+ni2a1
+ni2a1bo
+ni2ac
+ni2ad
+ni2a1e
+ni2a1
+ni2a1fo
+nia1g2
+ni2ag2y
+ni2ah
+ni2a1
+ni2aj
+ni2a1la
+ni2a1l
+ni2am
+ni2a1o
+ni2a1
+ni2a1
+ni2a1
+ni2a1p
+ni2ar
+ni2a1s1za
+nias2z
+ni2a1s1z
+nia1t2
+ni2a1to
+ni2atr
+ni2a1
+ni2av
+ni2az
+ni2t1a2
+ni1
+2n1i2bo
+ni1br
+ni2c1e2l
+ni1ce
+ni2c3he
+nic2h
+ni2c3h
+ni2c3ho
+ni2d2e.
+ni1de
+2n1i2deg
+2n1i2d
+ni2d
+ni2et
+ni1e
+2n1ifj
+2n1i2gal
+ni1ga
+2n1i2ga2z.
+2n1i2g
+ni2g2e.
+ni1ge
+ni2gj
+ni1g
+2n1i2gn
+ni2gz
+2nigm
+2n1ihl
+nikciks2z1
+ni1k
+nik1ci
+nikci1
+nikci2ks
+nikci1k
+ni2keb
+ni1ke
+ni2k1el
+ni2k1em
+ni2k1r1t
+ni1k
+nikk2
+ni1k1lu
+ni2konr
+ni1ko
+2n1ikri2t.
+nik1ri
+ni2kud
+ni1ku
+n1il1le
+2n1il1lu
+2n1i2l2y
+2n1i2md
+ni1m
+n1i2m1
+2n1imp
+2n1i2n2a.
+ni1na
+ni2nas
+ni2n1ll
+ni1n
+2nind
+2n1in1fo
+2n1in1f
+nin2gas
+nin1ga
+nin2g
+2n1ing2e.
+nin1ge
+2n1inge1i
+nin2g1e2l
+nin2g12
+nin1g2r
+nin2gu
+2n1ingk
+nin1g
+ni2n1i2p
+ni1ni
+ni2nol
+ni1no
+2n1in1t
+2nionb
+ni1o
+1ni2o1ni
+2nionn
+2nio1no
+2nionr
+2niont
+ni21a
+ni1
+ni2d
+ni21e
+2ni1
+2ni1i
+ni2p
+ni21ta
+ni21t
+ni21
+ni1v2
+nip2p1i
+ni1pr
+2ni1r
+nirs2z1
+ni1r
+2n1irg
+2n1irh
+2n1irk
+2n1i2rod
+ni1ro
+ni2rn
+ni1r
+ni2s2i.
+ni1si
+ni2sin
+nis2v
+ni1s
+nisz1ak
+nis2z
+ni1s1za
+ni2szeg
+ni1s1ze
+ni2s2zeml
+ni2sze1se
+ni2sz12l
+ni1s1z
+ni2szip
+ni1s1zi
+ni2szis
+nisz1okt
+ni1s1zo
+nisz1ol
+2n1iszon
+ni2s1z
+ni2s1z1
+ni2s1zu
+ni2t1a2d2
+ni1ta
+ni2t1ag
+ni2t1aj
+ni2tal
+nit1a2la
+ni2t1as
+2n1i2tat
+nit1ell
+ni1te
+ni2t1p
+ni1t
+ni2t1r
+ni2tim
+ni1ti
+ni2t1in
+ni2tir
+nit1old
+ni1to
+nit1olt
+n2i2t1os2z
+ni2tr
+ni1t
+2n1i2vad
+ni1va
+2n1i2var
+2n1i2v
+ni2xa
+ni2x
+ni2zn
+ni1z
+2n1izg
+2n1iz1m
+ni2zsol
+niz2s
+ni1z1so
+1n
+n2g
+n2ja
+n2ju
+nli2a
+n1li
+n2ra2
+2n12r
+n2r12
+n2r1ot
+n1ro
+2n12r
+n2r1
+2n12tl
+n1t
+nt1a2
+n1t
+nt1p2
+n2ve
+2n12vi
+n2ze
+n2z
+njo2g12s1za
+n1jo
+njo1g
+njogs2z
+njo2g12s1zi
+njo2g12szokr
+njog1s1zo
+nka2da1to
+n1ka
+nka1da
+nkai2k
+nka1i
+nk1ajt
+n2k1akk
+n2k1alv
+n2k1a1n
+nka2ny
+nkan2y
+nka12
+nka1p2l
+n2k1app
+nka2ris
+nka1ri
+nka1s2k
+nka1s2p
+nka2tom
+nka1to
+nka1t2r
+nk1a1zo
+n2k1g
+n1k
+n2k12rad
+nk1ra
+nk2rl
+nk1r
+nk2rol
+nk1ro
+nk2ruk
+nk1ru
+nk2sad
+nk1sa
+nk2sal
+nk2sav
+nks3s
+nk2s3z
+nk1ta2
+n2k1tj
+n2k1tm
+n2k1ts
+n2k11tu
+nk1br
+nkciks2z1
+nk1ci
+nkci1
+nkci2ks
+nkci1k
+nkci21s
+nk1dr
+nk1e2c1se
+n1ke
+nkec2s
+nk1e2d2z
+nk1e1la
+n2k1el1l
+n2k1el1t
+nke2r1a
+nk1ered
+nke1re
+n2k1e2r
+n2k1e2ti
+n2k1e2v
+n2k12l
+n1k
+nk22p1el
+nk1pe
+nk2p1e2r
+nk2p1s
+nk1p
+n2k12p
+n2k1rc
+nk12s1z
+nks2z
+nk1gr
+nki1a2
+n1ki
+nki12
+nkie3lgtkn
+nkie2l
+nki1e
+nkie1l
+nkie2l1g
+nkielg1t
+n2k1i2ga
+n2k1i1g
+n2k1i1mi
+n2k1ind
+n2k1ing
+n2k1int
+n2kinz
+nk1i2on
+nki1o
+nki2rn
+nki1r
+nki2s1i2
+n2k1ism
+nk1k2
+nk1k2r
+nk2lar
+nk1la
+n1k2l
+n2k1ob
+n1ko
+n2k1o1ke2
+nkos3s
+n2k1oszl
+nkos2z
+n2k1ox
+n2k11n
+n1k
+n2k11ni
+nk1p2
+n2k12ri
+n2k12l
+n1k
+n2k12l
+nk1ss
+nk1tl
+nk1r1s2
+n1k
+nk1pl
+nk1pr
+nk2rac
+nk1ra
+n1k2ris
+nk1ri
+n1k2ritiku2s.
+nkri1ti
+nkriti1ku
+n1k2r
+nkron1n
+nk1ro
+nk1sp
+nk1st
+nk1s2z2
+n2k1ud
+n1ku
+n2k1u2ra
+n2k1u2s
+nk1utal
+nku1ta
+n2k1u1t
+n2k1uz
+n2k1j
+n1k
+n2k1s
+n2k1g
+n1k
+nlac1
+n1la
+nla2pa
+nla1p1e
+nla2p1os2z
+nla1po
+nla2tal
+nla1ta
+nl2a2t1a2n
+nla2t1e2
+nla2t12te
+nl2att
+nla1t
+nls3s
+n1l
+nle2g1
+n1le
+nle12
+nle2t1o
+nle1t2
+nle2tz
+nl2ts
+n1l
+nl1t
+nl2t12v2e.
+nlt1ve
+nme2g1a2
+n1me
+nme2g1
+nme2g1o
+nmo2n1o2x
+n1mo
+nmo1no
+nm2n
+n1m
+nm1
+nna2i1
+n1na
+nna1i
+nnak2
+n2n1a2kas
+nna1ka
+nna1kr
+nn1alv
+nna1p2r
+nna1s2
+nn1ll
+n1n
+n2n1eml
+n1ne
+nne2p1a2
+nne2se
+nn1ess
+nn1es2z
+n2n1e2tet
+nne1te
+n2n1ett
+nn1evez
+nne1ve
+nn2get
+n1n
+nn1ge
+nn11ri
+n2n1id
+n1ni
+nn1irt
+nn1or1s2
+n1no
+nn2h
+n1n
+nn1
+nn2n
+nn12s
+n1n
+n2n12c
+n1n
+nn2l
+nn11l
+nn1lt
+nn1lv
+n2n2y
+n3nyak
+n1nya
+n3nya1l
+nny1a2n
+n3nyar
+nny2r
+n1ny
+nny11ra
+n3nydr
+nny1ell
+n1nye
+n3nye1l
+nny1elt
+nny1el1v
+nny1elvez
+nnyel1ve
+nny1e2sett
+nnye1se
+nny1e2ss
+nnye1s
+nny1e2s
+nny1g
+n1ny
+nny12k
+nny12ki
+nnyi2h
+n1nyi
+nnyi1
+nnyi2ne
+nnyi2g
+nny1i1g
+n3ny1j
+nny1old
+n1nyo
+nny1on
+nny1z
+n1ny
+n3nyst
+1no
+no1d2r
+2n1o2d
+2no2g.
+2nogh
+2nogj
+2nogn
+2no1go
+2nogs
+2nogt
+2nogv
+2nokal
+no1ka
+nok1a1la
+no2k1a2r
+no2ka1u
+no2k1l
+no1k
+no2k12l
+no1k
+no2k2p
+no2k1ing
+no1ki
+nok1ist2
+nok1k2
+2n1o2koz
+no1ko
+no2k
+no2k
+no1k2ro
+nok1s
+noks2z2
+no2kur
+no1ku
+no2kr
+no1k
+no2k
+2n1o2la
+2n1o2lim
+no1li
+2n1ol1l
+2n1o2l2y
+no2m1a2c
+no1ma
+nom1p2
+no1na2
+no2n1al
+nonc3c
+non2c2h
+nonc3s2z
+nonc2s
+no2n1e
+non1k2
+no2n
+no2n
+non1s2
+no2ok
+no1o
+2n1o2pe
+no2r1al
+no1ra
+no2r1a2t
+no2raz
+no2r1e2l
+no1re
+no2r1iv
+no1ri
+no2r
+2n1or1mo
+2n1or1r
+nor1s2
+no2r
+2n1or1vo
+no2se
+nos3s1ze
+nos2s2z
+nos3szf
+nos3s1zi
+no1szf
+nos2z
+no1sz2k
+2noszl
+2n1otth
+no2u1i
+no1u
+2n1o2v2i.
+no1vi
+no2xidb
+no1xi
+n1o2xidh
+no2xidn
+no2xidt
+1n
+na2k
+n1a
+n2r
+n1
+n1b2lo
+n2ce
+n2c2h
+n2d2a.
+n1da
+n2d1a2n
+n2dk
+n1d
+n2d1e2s
+n1de
+n2d1is
+n1di
+n1fl
+n1fr
+n1k2l
+n2mac
+n1ma
+n2m1em
+n1me
+n22mi2k
+n1mi
+n2m1u2t
+n1mu
+n2m
+n2nib
+n1ni
+n2non
+n1no
+n1p2r
+n12rac
+n1ra
+n2r1ad
+n12raf
+2n12ra1i
+n2r1a2l
+n12rar
+n12ras
+n12rat
+n2rs
+n1r
+n2ri1
+n1ri
+n2r
+ns1akk
+n1sa
+n2seg
+n1se
+n1s2l
+n1s2p
+n1s2r
+ns3s
+n1s2ta
+n2s1u2garait
+n2sug
+n1su
+nsu1ga
+nsuga1ra
+nsugara1i
+n2s1u2garv
+nsuga1r
+n1s2z2
+ns3zr
+n21s1z
+ns3ze1ne
+n2szen
+n1s1ze
+ns3ze1n
+nt1a1la
+n1ta
+n2til
+n1ti
+n1t1r
+n2v
+1n
+n2ka
+n2k
+n2k1e2l
+n1ke
+nke2t
+nk1e1ti
+n2k12j
+n1k
+n2k1k
+n2k12l
+n2k12r.
+n2k11ri
+n2k1r1t
+n2ko
+n2k
+n2ku
+n2k
+n12le
+n12l
+n2l
+n1ml
+2n12n
+2n1nz
+n2r
+2n1s2s2z
+2n12s2z
+n2te
+n2t
+n2ti
+n1tl
+nt1t2
+n2t
+2n12v.
+n1vb
+n12v2e.
+n1ve
+n2vn
+n1v
+2n1vr
+2n12zn
+n1z
+1n
+na2l
+n1a
+na2n
+n2g
+n1
+n1br
+n2ca
+n2c2h
+n2csr
+nc2s
+n1c1s
+n2css
+n1c1s
+n2c1s
+ne2r
+n1e
+n2l
+n1
+nf2l12
+n1f
+n1kl
+n1pl
+n1p2r
+2n12r.
+2n12r1a2n
+n1ra
+2n12r1a2s
+2n1rb
+2n1rc
+2n12re1i
+n1re
+2n12rh
+n1r
+2n12rn
+n2r2t.
+n2r1t
+2n12rv
+2n1rg
+2n1rh
+2n12r2i.
+n1ri
+2n12ri2z.
+2n12rizd
+2n12ri1ze
+2n12ri1z
+2n12rizg
+2n12rizh
+2n12ri1zi
+2n12rizl
+2n12riz1ni
+2n12rizt
+2n12ri1z
+2n1rk
+2n1rl
+2n1rn
+2n12r
+2n1rr
+n1rs
+2n1rt
+2n11r
+n2rl
+n2rn
+2n1rv
+2n1rz
+n2s1a2l
+n1sa
+n2s1e2l
+n1se
+n2ses
+n2s12r
+n1s
+n2so2k
+n1so
+n1s1pe
+ns3s
+n1sz2t2
+ns2z
+n1t2r
+nt2tin
+nt1ti
+nu2t
+n1u
+n2l
+n1
+npa2dal
+n1pa
+npa1da
+npe2s
+n1pe
+npes2z1
+np2la
+np2l
+np2le
+np2l
+np2lo
+np2l
+npon2t1a2
+n1po
+npo2r1a
+np2ra
+np2re
+np2r
+np2ri
+np2ro
+np2r
+np2s2z
+npu2t1a
+n1pu
+npu2t12
+npu2t1e2
+npu2t1i
+nreakci2kr
+n1re
+nre1a
+nreak1ci
+nreakci1
+nreakci1k
+nren2da
+n2s1a2d
+n1sa
+n2s1akc
+ns1alk
+ns1a2r
+ns1ass
+n2s1a2u
+ns2a2vr
+nsa1v
+nsa2v1e2
+nsa2vil
+nsa1vi
+nsa2vol
+nsa1vo
+n2s1a2z
+nsg1g
+n1s
+ns1ll
+n2s12rak
+ns1ra
+n2s11ta
+n2s1tv
+ns1br
+ns2c2h
+ns1c3he
+ns1c3h
+ns1dr
+ns1e2l
+n1se
+ns1elm
+ns1eln
+ns1e1lo
+ns1els
+ns1elv
+n2s1e1ne
+n2s1es2z
+ns2gel
+n1s
+ns1ge
+ns2g1j
+ns1g
+nsg2kt
+n3s1g
+nsg1k
+n2s1k
+n2s12l
+n2s1p
+n2s12v2e.
+ns1ve
+ns1fr
+n2s1i2d
+n1si
+n2s1imp
+n2s1inf
+n2s1ing
+n2s1i1r
+ns1isk
+nsi2z
+ns1i1zo
+n2s12r
+n1s
+n2s12v
+n1s2kl
+ns1k
+ns1kl
+n2s1ob
+n1so
+n2s1ol
+n2s1op
+n2s1os2z
+n2s1ott
+n2s12r
+n1s
+n2s1s
+n1s
+ns2pec
+ns1pe
+ns1pl
+ns2por
+ns1po
+n1s2r
+ns1st
+ns1sy
+ns3szer
+ns2s2z
+ns1s1ze
+ns3s1zi
+ns3s1zo
+ns3s1z
+n1s2tab
+ns1ta
+ns2tc
+ns1t
+n1s2tim
+ns1ti
+ns2top
+ns1to
+nsu2r
+n1su
+n2s1u1ra
+n2s1u2t
+ns1r
+n1s
+n2sz1a2d
+ns2z
+n1s1za
+nsza2k12
+nsz1alk
+n2sz1a2n
+ns3za1r
+n2sz12b2a.
+n1s1z
+nsz1ba
+ns3z1r
+nsz12ru
+n2sz1it
+n1s1zi
+n2sziz
+n2sz1omm
+n1s1zo
+nsz1p2
+n2szut
+n1s1zu
+n2sz12z
+n1s1z
+nsz1z
+nt1ab1la
+n1ta
+n2t1abr
+ntad2
+n2t1a2d
+nt1a2g2a.
+nta1ga
+n2t1agg
+nta2gyu
+ntag2y
+nta2gy
+ntai2k
+nta1i
+n2t1ajk
+n2t1ajt
+n2t1akc
+n2t1ak1t
+nt1alt
+nta1l
+nt1alel
+nta1le
+n2t1alf
+n1t1an1ta
+nt1a2r2a.
+nta1ra
+nta2ran
+n2t1a2r
+n2t1arc
+n2t1ark
+nta1s2p
+n2t1as2s2z
+n2t1at2y
+nt1a2u1ra
+nta1u
+nta12
+n2t1a1zo
+n2t1br
+n1t
+nt2c2s
+nt11c1si
+nt11c1so
+nt2r1a2d
+nt1ra
+n2tram
+nt2rv
+nt1r
+nt1rn2y
+nt2ruk
+nt1ru
+n2t12s
+n2t1s1v
+n2t11ti
+n2t1tl
+n2t1tr
+n2t1ts
+n2t1tv
+nt2z1si
+ntz2s
+nt1bl
+nt1br
+nt1dr
+nt1e1be
+n1te
+n2tedn
+nte1d
+nte3g
+n2t1e1la
+n2t1elb
+ntele2m
+nte1le
+nt1elf
+n2t1el1j
+n2t1elk
+n2t1ellen
+ntel1le
+n2t1elml
+ntel1m
+n2tel1n
+n2t1e2lo
+nte2l1
+nte1l
+n2t1elr
+n2t1el1to
+n2t1el1v
+n2t1elz
+n2t1ember
+ntem1be
+n2t1e2mel
+nte1me
+n2t1eml
+n2t1e1mu
+n2t1endr
+n2t1ent
+nte2rl
+nte1r
+nte2re1le
+nte1re
+nte2r1in
+nte1ri
+nter2v1e2l
+nter1ve
+n2t1esth
+ntes1t
+n2t1est1i
+n2t1estk
+n2t1ests
+n2t1est1t
+n2t1esth
+n2t1eszk
+ntes2z
+n2t1e1va
+nt1e2vet
+nte1ve
+nte2vez
+n2t12g.
+n1t
+n2t12g
+n2t12kek
+nt1ke
+nt2kes
+n2t12k
+n2t1ks
+n2t12le
+n2t12ls
+nt1l
+n2t1lm
+n2t1lt
+n2t12l
+n2t12ne1ke
+nt1ne
+n2t11p
+n2t1rin
+nt1ri
+n2t1r1m
+n2t1r1t
+n2t1rz
+nts3s
+nt2ter
+nt1te
+n2t12ven
+nt1ve
+n2t12vet
+n2t12vb
+nt1v
+n2t12vn
+n2t12vr
+n2t12vt
+n2t1vh
+n2t1vk
+n2t1vt
+nt1fl
+nt1fr
+nt1gr
+ntia2n
+n1ti
+nti1a
+ntia2t
+nt1i1do
+n2t1i1ge
+nti1k2l
+ntil2l2t.
+ntil1l
+n2t1il1le
+n2t1imp
+n2t1in1fo
+n2t1in2g.
+n2t1in1ga
+nti1n2k.
+n2t1in1t
+nti11
+nti2par
+nti1pa
+n2t1i1r
+n2t1i1ro
+n2t1isk
+n2t1ism
+n2t1is1te
+nti2vs
+nti1v
+nt1i1zo
+n2t1j
+n1t
+nt11r
+n2t1vb
+n2t12z
+nt1kl
+nt1kr
+n2t1of
+n1to
+nto1g
+nto1ka2
+n2t1o2k1al
+n2t1okl
+n2t1ol1da
+n2t1ol1d
+n2t1o2l2y
+nto2m1e2
+n2t1opc
+nto2ras
+nto1ra
+nto2rk
+nto1r
+nt1or1m
+nt1or1ro
+n2t1oszl
+ntos2z
+n2t1oszt
+n2t1otth
+nt1p
+n1t
+n2t12r
+n2t12ri
+ntt2
+nt1tr
+nt1kl
+n1t
+nt12k
+nt12l
+nt1nt
+n2t1rd
+nt1a2
+n1t
+nte2r
+nt1e
+nt2n
+nt1
+nt1p2
+nt1rb
+n2t1rl
+nt1rn
+n2t1z
+nt1pl
+nt1pr
+nt2rans
+nt1ra
+ntrciks2z1
+nt1r
+ntr1ci
+ntrci1
+ntrci2ks
+ntrci1k
+ntrlks2z1
+ntr1l
+ntrl2ks
+ntrl1k
+n1t2rf
+nt1r
+n1t2rf
+nt1r
+nt1ry
+nt1sk
+nt1sp
+nt1st
+nts2z2
+nt3sz2m1
+nt1s1z
+ntsz2m12t.
+nt3sz1m
+nt1szv
+nt1t2r
+n2t1udv
+n1tu
+n2t1ug
+n2t1uj
+ntu2mor
+ntu1mo
+ntu2n
+n2t1u1na
+nt1und
+nt1u2r
+ntu2s1za
+ntus2z
+n2t1g
+n1t
+n2t1j
+nt2ral
+nt1ra
+nt2ran
+nt2r1e2
+nt2r12
+nt2rin
+nt1ri
+nt12s2z
+n2t1g
+n1t
+nt1lt
+n2t1t
+n2t12v
+ntvona2l1a2d
+nt1vo
+ntvo1na
+ntvona1la
+n2ty1a2l
+nt2y
+n1tya
+n2ty1a2n
+n2tyl
+n1ty
+n2ty1e2l
+n1tye
+n2ty1l
+n1ty
+n2ty1ik
+n1tyi
+n2ty1int
+n2ty1iv
+n2ty
+n2ty12r
+n1ty
+n2tyut
+n1tyu
+1nu
+n1ucc
+nu2ga
+2n1u2go
+n1ujj
+nu1k2la
+nu1k1lu
+nu2m
+2n1und
+2n1u2ni
+2n1u2no
+2n1unt
+nu2ram
+nu1ra
+nu2r
+nu2sal
+nu1sa
+nu2sas
+nu2s1av
+nu2s1e
+nu2s1r1t
+nu1s
+nu2sik
+nu1si
+nu2sol
+nu1so
+nu1s2po
+nuss2
+nus3s1zi
+nus2s2z
+nu2szab
+nus2z
+nu1s1za
+nu2s3zav
+nu2szir
+nu1s1zi
+nu2s1z
+nu2sz1ol
+nu1s1zo
+nu2tal
+nu1ta
+nu2tat
+nu2taz
+nu2tl
+nu1t
+nu2us
+nu1u
+1n
+n1jd
+n2j
+2n1js
+nks2z1
+n2ks
+n1k
+n1pr
+2n12r.
+2n1rb
+2n1rh
+2n1rn
+2n1rr
+2n1rt
+2n12s1z
+ns2z
+2ntb
+2nth
+2ntj
+2n1tk
+2n1tn
+2ntr
+2n1ts
+2ntt
+2n1tv
+1n
+n1bl
+2n12d
+2n1dv
+n1fr
+2n1gg
+n1gr
+2n1g2y.
+ng2y
+2n1gyb
+2n1gyc
+2n12gy2e.
+n1gye
+2n12gye1i
+2n12gyek
+2n12gyes
+2n12gyet
+2n12gy
+n2gy1s
+2n1gyh
+2n12gyi
+2n1gyk
+2n1gyl
+2n1gyn
+2n1gyr
+2n1ld
+n1pr
+n2r
+nst2
+n1str
+2n12tem
+n1te
+n2ts
+n1t
+n2ti
+n2t2.
+n1t
+n2tk
+n2ts
+n2t
+n2v
+n2z
+2n1zl
+1n
+n2z
+n2z
+nva2su
+n1va
+nvgya2d
+n1v
+nvg2y
+nv1gya
+nv2gy1a1da
+nv2gy1n
+nv1gy
+nv2r1a2l
+nv1ra
+n2v1t
+nven2ta
+n1ve
+nve2s1ebbel
+nve1se
+nveseb1be
+nv2d1a
+n1v
+nv2d12r
+nv1d
+n2v1ind
+n1vi
+nv2zel
+n1v
+nv1ze
+nvona2l1t
+n1vo
+nvo1na
+nvona1l
+n2v1os
+nv1sk
+nx1ar
+n1xa
+n2y
+1nya
+2ny1abl
+2ny1abr
+nya2cl
+nya1c
+2ny1adag
+nya1da
+2nyads
+nya1d
+2nyad2.
+nya1d
+2ny1a2da2d
+nyad1a
+2nyada2k.
+2ny1a2dan
+2nyadb
+2ny1a2d1i
+2ny1a2dj
+2nyadk
+2ny1a2dm
+2nyadn
+2ny1a2dr
+2nyadt
+2ny1a2d1u
+2nyadv
+ny1a2dz
+2ny1aff
+nya2gar
+nya1ga
+2nyagh
+nya1g
+2nyagr
+2nyagv
+2nyagc
+nya2gen
+nya1ge
+2nya1gi
+2nyagj
+2nyagm
+2nyagos
+nya1go
+2nyag1ta
+2nyaguk
+nya1gu
+2nya1g
+2ny1a2jn
+nya1j
+2ny1ajk
+2ny1ajt
+3nya2k.
+nya2k1a1la
+ny2akal
+nya1ka
+nya2ka1ra
+2nyakc
+nya2kel
+nya1ke
+nya2k12k
+nya1k
+ny2a2kiz
+nya1ki
+2ny1ak2t.
+2nyak1t
+2ny1aktb
+2nyak1ti
+2ny1aktj
+2nyak1to
+2ny1ak1tu
+2ny1a2lag
+nya1la
+2ny1a2la2k.
+2ny1a2lakj
+2ny1a2lakk
+2ny1a2lakr
+2n2y1a2lan2y
+nya2lapb
+nya2laph
+nya2la1po
+nya2lap1p
+nya2lap1s2
+2ny1als2z
+nya1l
+2ny1alb
+ny1alp
+nya1l
+2ny1alm
+ny1al1te
+2ny1al1t
+2nyamal
+nya1ma
+2ny1a2nal
+nya1na
+2ny1ang
+2ny1ant
+nya2nyak
+n2yan2y
+nya1nya
+2nyanyk
+nya1ny
+2nyanyn
+2nyanyt
+2nyanyv
+2nyaot
+nya1o
+ny1a2pad
+nya1pa
+nya2pt
+nya1p
+2ny1app
+nya2rn
+nya1r
+2ny1ar1ma
+2ny1arz
+nya1sp
+2nyas2s2z
+2nyaszt
+nyas2z
+2ny1at1k
+nya1t1r
+2ny1a2t2y
+2ny1a2uk
+nya1u
+2ny1a2vat
+nya1va
+1ny
+2ny1br
+2nyd1n
+2nydt
+2nyk
+ny1
+2ny1g
+2nyld
+2ny1l1l
+ny2lom
+ny1lo
+2nymk
+ny1m
+2nym1n
+2nyp
+2ny12rad
+ny1ra
+2ny12ra1i
+2ny12rak
+2ny12ram
+2nyras
+2ny12rat
+ny2rb
+ny1r
+ny2rn
+ny2rt
+ny2rv
+2nyrc
+2ny2r1e2
+2nyrh
+2ny1rj
+2nyrk
+2nyrp
+3ny2r2t.
+2ny2ru
+2ny2r2
+2nyrv
+2ny12s
+ny2szak
+nys2z
+ny1s1za
+ny2szr
+ny1s1z
+2ny12ta
+2ny12t
+2ny12t
+2ny1tf
+2ny1th
+2ny1tk
+2ny1tm
+2ny1tn
+2ny12t1
+2ny1tr
+2ny1ts
+2ny1tt
+2ny12t
+2ny1tv
+ny1bl
+ny1br
+ny1cv
+1nydr2e.
+nyd1re
+1nye
+2nyedn
+nye1d
+2nye1d1z
+nyed2z
+2ny1eff
+2ny1egyl
+nyeg2y
+2ny1egys
+2ny1e2k2e.
+nye1ke
+2ny1e2ke1i
+2ny1e2k1
+nye1k
+2ny1elb
+2ny1elc
+2ny1e2lef
+nye1le
+2ny1e2le1m
+2nyelemz
+2ny1elf
+ny1el1ha
+2ny1el1j
+ny1elk
+2ny1el1l
+ny1el1ma
+2ny1el1n
+2ny1e2l1
+nye1l
+2ny1e2l1
+2ny1e2lz
+2ny1elr
+2ny1el1s
+2ny1el1t
+2ny1eltr
+nyel1t
+2ny1el1to
+2ny1ell
+nye1l
+nyel2ve2s2z
+nyel1ve
+2nyelvev
+2ny1ember
+nyem1be
+2nyembl
+2nyembr
+2nyemel
+nye1me
+2ny1e2mit
+nye1mi2
+2ny1eml
+2nyenc
+2nye1ne
+2ny1eng
+nye1p2
+2ny1er1d
+2ny1e2rej
+nye1re
+nye2rekl
+2ny1erk
+2n2y1ern2y
+2nyerm
+nye1r
+2ny1ese1m
+nye1se
+ny1e2s1er
+2ny1e2se1t
+2ny1esl
+nye1s
+2nyestj
+2ny1eszk
+nyes2z
+2ny1e2tik
+nye1ti
+2nye1ve
+nye2vez
+2ny1e2v
+2nye1vo
+2ny1e2v
+2ny1ex
+nyezks2z1
+nye1z
+nyez1k
+2nyezr
+2ny1e2zs
+nye1z
+1ny
+2ny1br
+2ny12hen
+ny1he
+2ny12hes
+2ny1hs
+ny12jek
+ny1je
+2ny12let
+ny1le
+2nylm
+2nyne1ke
+ny1ne
+2ny12ne1k
+2ny12nekn
+2ny1p
+2nyr2c.
+2ny1re2m.
+ny2rem
+ny1re
+ny2r1e2s
+2ny12rin
+ny1ri
+2ny12r2.
+ny1r
+2ny12r1i
+2ny12rt
+2ny1rtk
+nyr1t
+ny1r2
+2ny1r2v.
+2ny1r1z
+2ny12tel
+ny1te
+2ny1t1ke
+2ny1tl
+2ny12v.
+2ny1vb
+2ny12v2e.
+ny1ve
+2ny12ve1i
+2ny12vek
+2ny12vem
+2ny12ven
+2ny12ves
+2ny12vet
+2ny1vez
+2ny12vb
+ny1v
+2ny12vr
+2ny12vt
+2ny12vv
+2ny1vf
+2ny12vi
+2ny1vk
+2ny1vm
+2ny1vn
+2ny1vr
+2ny1vs
+2ny1vt
+2ny12v
+2ny12v
+2ny1vv
+ny1fl
+ny1f2r
+ny1gl
+ny1gr
+1nyi
+2ny1i2deg
+nyi1de
+2ny1i2dej
+2ny1i2d
+nyi2b
+nyi1
+2ny1ifj2.
+nyif1j
+2ny1ifjb
+2ny1ifj1
+2ny1ifj1i
+2ny1ifj1k
+2ny1ifjn
+2ny1ifjr
+2ny1ifjs
+2ny1ifjt
+2ny1ifjv
+2ny1i2ga
+2nyi1ha
+2ny1ihl
+2ny1ill
+2ny1i1ma
+2ny1i2m
+2ny1imb
+2ny1imp
+2ny1i2nas
+nyi1na
+2ny1inc
+2ny1ind
+2ny1inf
+ny1in2g.
+2ny1inj
+2ny1ins
+2ny1int
+2ny1inv
+2ny1i2p
+2ny1i2r
+2ny1i2ri
+2ny1i2rod
+nyi1ro
+2ny1irt
+2ny1is1ko
+2ny1ism
+2ny1isp
+2ny1ist
+2nyivad
+nyi1va
+2ny1i2vs
+nyi1v
+2ny1i2v
+2ny1izn
+2ny1izt
+1ny
+2ny1g
+2ny1j
+3nyl
+2ny1n
+2ny1v
+2ny1z
+1nyjb
+ny1j
+3ny2k.
+nyka2r12ra
+ny1ka
+nyka1r
+1nyke2t.
+ny1ke
+1nykk
+ny1kl
+1nykn
+ny1k2r
+ny1k2v
+1ny2m.
+1nyme2t.
+ny1me
+1nymt
+1ny2n.
+1nyo
+2ny1ob
+2ny1o2d
+2ny1of
+2ny1ok1ke
+2ny1okl
+2ny1o2kos
+nyo1ko
+2ny1o2koz
+2ny1ok1ta
+2ny1o2laj
+nyo1la
+nyolc1c
+2ny1ol1da
+2ny1ol1d
+2ny1ol1d
+ny1ol1l
+2ny1oltr
+nyol1t
+2ny1olts
+2ny1olvas
+nyol1va
+3nyo2m.
+3nyoma2t.
+nyo1ma
+3nyomatk
+3nyomato2k.
+nyoma1to
+3nyomatom
+3nyo1mo
+3nyomt
+2ny1op
+ny1orc
+ny1orm
+ny1ors
+ny1orv
+2ny1os1ko
+2ny1os1to
+2ny1oszl
+nyos2z
+2ny1oszt
+2ny1ott
+2ny1ov
+2ny1ox
+1ny
+ny12ni
+ny2rc
+ny1r
+ny2rn
+2ny12ri
+ny2s1
+1ny
+2ny1b
+2ny1c
+2ny12l
+ny1nt
+2ny1v
+1ny
+2ny1rs
+ny1pl
+ny1pr
+ny1ps
+3ny2s.
+ny1sc
+3nysek
+ny1se
+ny1sk
+ny1sl
+ny1sp
+1nys2t.
+ny1s2ta
+ny1s2t
+nyta2n1csr
+ny1ta
+nyta1n
+nytanc2s
+1nyu
+2nyud
+2nyuj
+2nyu1k
+2ny1uk1r
+3nyul
+2ny1u2ni
+2ny1u2no
+2nyut
+ny1u2ta
+ny1u2t
+1ny
+2ny1jd
+2ny12j
+2ny12j
+2ny1js
+3nyl
+ny2l
+2ny12r.
+2ny1rb
+2ny1rh
+2ny12ri
+2ny1rk
+2ny1rn
+2ny12ro
+2ny1rr
+2ny12s2z
+2ny1tb
+2ny11t
+2ny1th
+2ny11ti2
+2ny1tj
+2ny1tk
+ny1tl
+2ny1tm
+2ny1tn
+2ny1tp
+2ny1t1r
+2ny1tt
+2ny1tv
+1ny
+2ny1d
+2ny12g
+2ny1ld
+ny11le
+2ny1nn
+2ny1r
+2ny1t
+2ny12ze
+1ny
+2ny12r.
+2ny1rb
+2ny11r
+2ny1rh
+2ny12ri
+2ny1rj
+2ny1rl
+2ny1rn
+2ny12r
+2ny1rr
+2ny1rt
+2ny12z
+2ny12z2.
+ny1z
+2ny12zb
+2ny12zen
+nyz1e2
+2ny12z1
+2ny12zh
+2ny12zk
+2ny12zn
+2ny12zr
+2ny12zt
+2ny12zv
+ny2vk
+ny1v
+ny2v1isk
+ny1vi
+ny2v
+ny2vs
+ny1v
+ny2v
+ny2v
+nyz2ke
+ny1z
+n3z2a.
+n1za
+n2z1abl
+nza2c
+n2z1a1c
+nz1a1da
+nz1a1d
+nz1a1do
+nz1a1d
+nz1a2ga
+nz1agg
+n2z1aj1ta
+nz1ak1k2
+nza1k2o
+n2z1akt
+n2z1alk
+n2z1ang
+n2z1a2n2y
+n2z1ap1p2
+nz1a1ra
+nz1a1r
+n2z1arc
+nz1a1ri
+nz1aut
+nza1u
+nz12g2y
+n1z
+nz1ll
+n2z12rad
+nz1ra
+n2z1rn2y
+nz2r12ra
+n3zrr
+nz1r
+n2z12ru
+nz2s1e2
+nz11s
+nzs3s
+nz11t1a2
+nz1d2r
+n2z1e2g
+n1ze
+n2z1elb
+n2ze2le1me
+nze1le
+n2z1e2lr
+nze1l
+n2z1elf
+n2z1el1ha
+n2z1elis
+nze1li
+n2z1elk
+n2z1el1l
+n2z1ellen
+nzel1le
+n2z1elm
+n2z1eln2y
+n2z1e1lo
+n2z1e2l1
+nze1l
+n2z1e2ll
+n2z1e2lt
+n2zelz
+n2z1els
+n2z1el1ta
+n2z1el1t
+n2z1elver
+nzel1ve
+n2z1el1v
+n2z1el1vo
+n2z1ember
+nzem1be
+n2z1e2mel
+nze1me
+n2z1e2ms
+nze1m
+n2z1e1mi
+n2z1eml
+n2zener
+nze1ne
+n2z1e2r
+nzer2t1a2
+nzer2v1a2d
+nzer1va
+nzerv2t
+nzer1v
+nzer2v11te
+nzer2vi
+nze2su
+n2z1eszk
+nzes2z
+n2z1ez
+n2z1g
+n1z
+nz2k1el
+nz1ke
+n2z12l
+n2z12r.
+n2z1r1d2
+n2z12rem
+nz1re
+n2z1rk
+n2z1rm
+n2z1r1t
+n2z1rv
+n2z1rz
+n2z1tv
+nz1gr
+nzi2a
+n1zi
+n2z1i2ga
+n2z1i1g
+n2z1ill
+nzi2m1a2
+nzi2m
+nzi2mi
+nzi2n12
+nzi2n1o
+nzi2n12
+n2z1i2p
+n2z1i1r
+nz1ism
+n2z1ist2
+nzi2tr
+nzi1t
+nzi1te2
+nzi2t1el
+nzi2ten
+nzi2t12v2e.
+nzi1t
+nzit1ve
+n2z1b
+n1z
+nz1g
+nz1n
+nz1kl
+nz1kr
+n2z1okl
+n1zo
+nzo2lin
+nzo1li
+nzo2l
+nzo2n1a
+nzo2n
+n2z1os2z
+nzks2z1
+n1z
+nz2ks
+nz1k
+n2z1n
+n1z
+nz2r
+nz11r
+n2z1s
+n2z12v
+n2z1z
+nz1pl
+nz1pr
+nz3saj
+nz2s
+n1z1sa
+n2z3sr
+n1z1s
+n2z3st
+n2zsv
+nz3seg
+n1z1se
+n2z3ser
+nz3sik
+n1z1si
+n2z3sis
+n2z3sod
+n1z1so
+n2z3sor
+n2z3s
+nz3s2p
+nz3s2t
+nz3s2z
+nzt2r1a2d
+nz1t
+nzt1ra
+nz1t2r
+n2z1uj
+n1zu
+nzu2l1a
+nzu2m
+nzu2n
+n2z1u1ni
+nz1u2ra
+nzu2sa2n
+nzu1sa
+nzus3s2
+n2z1u2t
+nz1j
+n1z
+nz12t
+n2z1d
+n1z
+n2z12g
+nz1s
+nz1v
+n2z12z
+nz3z2s
+2o.
+o1a
+oa2c
+oa1fr
+o2a1ki
+oa2na1li
+oa1na
+o2a1si
+o2a1s1z
+oas2z
+o1
+o2ga
+o2r1a2n
+o1ra
+o2ril
+o1ri
+o2r
+o2r1ol
+o1ro
+o2z2s
+oba1b2
+o1ba
+oba1d2
+o2b1alj
+obal2t1a2
+oba1p2
+ob1a2ra
+oba1u2
+obs3s
+o1b
+ob1tm
+ob2b
+o2b1eg
+o1be
+ob1e1le
+o2b1e2m
+o2b1e2r
+o2b1ez
+o2b12g
+o1b
+o2b1rz
+obi2k12
+o1bi
+obi2lip
+obi1li
+obi1na2
+ob1in2a.
+obi2n1al
+o2b1ing
+o2b1i2s
+ob1v
+o1b
+1objek
+ob1je
+ob1kl
+1o2bo1a
+o1bo
+1o2bo1
+o2b1oll
+obo2r1a
+obo2r1os
+obo1ro
+obo2t12
+obo2tin
+obo1ti
+obks2z1
+o1b
+ob2ks
+ob1k
+o2b12n
+o2b12r
+ob1t
+o1b
+ob1pr
+1obst
+o2b1ut
+o1bu
+o2b12s
+o1b
+ob1g
+o1b
+ob1r
+ob1t
+ob1r
+o1b
+oca2k
+o1ca
+o2c1g
+o1c
+o2c1l
+oc1er
+o1ce
+oc12k
+o1c
+o2c3h2i.
+oc2h
+o1c1hi
+oc3hok
+o1c1ho
+oc3hot
+oci3a
+o1ci
+oci1e2
+oci1k2r
+oci12
+oci1p2
+oci1s2z2
+o1c2kef
+oc1ke
+oc2k11ne
+oc1k
+oc2ki1a
+oc1ki
+oc2kop
+oc1ko
+oc1pr
+o2c3sap
+oc2s
+o1c1sa
+o2cs1l
+o1c1s
+ocs2s
+o2cs1s2z
+o2cs12z
+o2c1s1e2
+oc3sr
+o1c1s
+ocsi2ra
+o1c1si
+ocsi1
+o2cs1ing
+ocs1izm
+o2c1s2
+oc3sn
+o2csop
+o1c1so
+ocs1s
+ocs1t
+o2csuj
+o1c1su
+o2c1s12
+oc3s1za
+ocs2z
+oc1s3z
+oc3s1ze
+oc3z2s
+oc2z
+o2daa2d
+o1da
+oda1a
+oda1b2
+o2d1adj
+oda1dr
+o2d1akk
+o2d1alj
+oda1p2
+odas2
+o2d1ass
+od1aszt2
+odas2z
+odat2
+oda1tr
+od1au1t
+oda1u
+odb2
+o1d
+od1l1l
+o2d1ru
+odsks2z1
+ods1k
+ods3s
+od2s3z
+1o2dz
+od1ed
+o1de
+ode2l
+odel2l1a
+ode2min
+ode1mi
+od1e2v
+o2d12g
+o1d
+od12ne
+o2d1p
+o2d1r1d2
+o2d12te
+o2d12ve
+od12v
+2odz
+od1i1de
+o1di
+odi2g
+o2d1i1ga
+o2d1ik1re
+odi2l1e
+odi2lik
+odi1li
+odi2l1is
+o2d1int
+o2d1i1ro
+od1isp
+od12z
+o1d
+od1kl
+o2d1okt
+o1do
+o2d1op
+odo2rak
+odo1ra
+odo2ros2z
+odo1ro
+od12l
+o1d
+od12r
+od12r
+o1d
+od1pr
+od1st
+odu2l1a2l
+o1du
+odu1la
+o2d1u2r
+1odn
+o1d
+od1g
+o1d
+od1n
+od1z
+1odvb
+od1v
+o1d3ze
+od2z
+o1e
+oe2le
+oe2mu
+oe2ne
+oe1t2he
+oe2ur
+oe1u
+o1
+o21fa
+o21f
+o21fo
+o21ke
+o21ki
+o1na2
+o2n1al
+o2n1an
+o2n1ar
+o1n2
+o2n1r
+o2nis
+o1ni
+o2s2z
+o21vi
+ofi2lad
+o1fi
+ofi1la
+ofi2lak
+ofi2l1
+ofi2lel
+ofi1le
+ofi2lr
+ofi1l
+ofi1li2
+ofi2l1i1ga
+ofi2l1i1g
+ofi2lis
+ofi2l1os2z
+ofi1lo
+ofi2tal
+ofi1ta
+ofi2t1e2
+o2f1izmus1n
+ofiz1mu
+o2f1izmusukb
+ofizmu1su
+ofo1na2
+o1fo
+ofo2n1al
+ofo2na2n
+ofo2n1
+ofo2n12r.
+ofo1n
+ofon3n
+ofo2n12
+ofor2m12
+of2r1e
+o1f
+of1r2
+o2g1abr
+o1ga
+o2g1a2g
+oga2kar
+oga1ka
+o2g1a1k
+o2g1a2la
+o2g1a2l
+o2g1alj
+og1all
+og1alt
+og1a1lu
+o2g1a2n2y
+o2g1ap
+og1arc
+o2g1a2s2z
+og2a2t1a2g
+oga1ta
+oga2t1e2
+og2a2t1i2n
+oga1ti
+og1a2t2y
+o2g12g
+o1g
+og1ll
+og1lm
+o2g1p
+o2g12rak
+og1ra
+o2g12re2
+o2g1r1ja
+o2g1rjt
+ogr1j
+o2g12rok
+og1ro
+og2ros
+o2g12ru
+ogsks2z1
+ogs1k
+o2g2s
+o2g11ta
+o2g11te
+o2g1tj
+o2g1tk
+o2g1tl
+o2g1tn
+o2g12to
+o2g1tr
+o2g1ts
+o2g1tt
+o2g12t2
+o2g1tv
+og1bl
+ogd2j1a2d
+og1d
+ogd1ja
+og1dr
+o2g1e2d
+o1ge
+o2g1e2g
+oge2gs2z1
+o2g1e2g
+o2g1e2l
+o2g1em
+o2g1e2p
+oge2r
+og1e1re
+og1ern
+og1e2r
+o2g1e2s
+o2g1e2v
+o2g1ez
+o2g12g
+o1g
+o2g12l
+og2n1n
+o2g12p
+o2g12r.
+o2g1r1te
+o2g1r1t
+o2g1r1t
+o2g1rv
+o2g1s
+og1fl
+og1fr
+og1g2l
+o2g1ic
+o1gi
+o2g1i2d
+o2g1if
+ogi2g
+o2g1i1ga
+o2g1i2g
+o2g1ill
+o2g1inf
+o2g1ing
+o2g1ins
+o2g1int
+o2g1ip
+o2g1i2ro
+og1i1ta
+o2g1j
+o1g
+og1n
+og1r
+og1v
+og1kl
+og1kr
+o1g2lic
+og1li
+o1g2na1i
+og1na
+o2g1odv
+o1go
+og1org
+og1orr
+o2g1orz
+ogos3s
+o2g1oszl
+ogos2z
+o2g1oszt
+o2g1o2v
+og12b
+o1g
+og12l
+og12r
+og1s
+og12r
+o1g
+og1pl
+og1pr
+o1g2raf
+og1ra
+2og1r
+og1sk
+og1sp
+og1st
+og1tr
+og1u2ra
+o1gu
+og1u2ru
+o2g1u2s
+o2g1u2t
+o2g1j
+o1g
+og12g
+o1g
+og1l
+og1r
+og1t
+og1z
+og1z
+o1g
+ogy1a2c
+og2y
+o1gya
+ogy1a2p
+ogy1i2s.
+o1gyi
+ogy1os
+o1gyo
+ogy12
+o1gy
+oha2mal
+o1ha
+oha1ma
+oha2me2l
+oha1me
+oha2mes
+oha2mis
+oha1mi
+ohas2
+oha1sp
+o2h1g
+o1h
+o2h1l
+oh2nyad
+ohn2y
+oh1nya
+oh2nya2n
+oh2r1e
+oh2s1zi
+ohs2z
+oh2sz1odv
+oh1s1zo
+o2h12z
+o2h1ing
+o1hi
+oh2ni
+o2h1orr
+o1ho
+oh22c1si
+o1h
+ohc2s
+o2h11r
+oh12v
+o1h
+o2h1u1r
+o1hu
+o1i
+oi2a1e
+oi1a
+oi2af
+oi2an
+oi2av
+oi1da1
+oi2d1ad
+oi2dan
+oi2dl
+oi1d
+oi2d1e2
+oi2dol
+oi1do
+oi2d3z
+oi1na2
+oi2n1ad
+oi2ne
+oi2zo
+o1
+oj2r1as
+o1j
+oj1ra
+ojs3s
+ojs3z
+ojek2t12
+o1je
+ojek2t12
+ojek2t1o2
+oj1in
+o1ji
+oj2t11ra
+oj1t
+oj2t1orjk
+oj1to
+ojtor3j
+oj2t1orj1na
+ojt12
+oj1t
+ok1abl
+o1ka
+ok1a2c
+o2k1a2dat
+oka1da
+o2k1a2d
+o2k1a2d
+o2k1a2kar
+oka1ka
+ok1akv
+o2k1alj
+o2k1alk
+ok1alm
+ok1alt
+o2k1ang
+ok1a1ni
+ok1ant
+oka1p2l
+o2k1app
+ok1a2ra
+ok1arc
+oka2ris
+oka1ri
+o2k1asp
+o2k1ass
+ok1aszf
+okas2z
+ok1aszt
+o2k1att
+o2k1at2y
+ok1a2ut
+oka1u
+o2k1a1va
+o2k1g
+o1k
+ok1jt
+o2k12rad
+ok1ra
+o2k12rak
+ok2rul
+ok1ru
+o2k1rv
+ok2sal
+ok1sa
+ok12s
+oks3s
+ok1s2z
+o2k12t1e2
+ok1bl
+ok1br
+ok1dr
+ok1e2b
+o1ke
+o2k1e2c
+oke2d
+ok1e1d
+o2k1e2g
+o2k1e2l
+o2k1e2m
+ok1e1r
+ok1er1k2
+o2k1er2n1e2l.
+oker1ne
+ok1e1r
+o2ke2s
+ok1e1s
+o2k1e2v
+ok1e2z
+o2k1g
+o1k
+ok12ke
+o1k12k
+o2k12l.
+o2k12les
+ok1le
+ok12let
+ok12l
+ok1ln
+ok1lt
+o2k12ne
+ok2p
+ok3p1
+ok12p
+o2k11p
+o2k12r.
+o2k1rb
+o2k1rc
+o2k1rd
+o2k1rg
+o2k1rh
+o2k12ri
+o2k1rm
+o2k1rr
+ok1r1t
+o2k1r1te
+o2k1r1t
+ok1r1t
+o2k1rz
+ok1s2
+oks2z2
+o2k1tk
+o2k1tt
+o2k12ve
+ok1fl
+ok1fr
+ok1gr
+o2k1i2de
+o1ki
+o2k1i2do
+o2k1i2ga
+okigaz1
+o2k1i1g
+o2k1i1g
+o2k1ind
+o2k1int
+o2k1i2r
+o2k1i2ro
+o2k1isk
+o2k1ism
+o2k1isp
+ok1is1te
+okist2
+o2k1i2ta
+o2k1izm
+ok1j
+o1k
+ok1r
+ok1v
+ok1z
+ok2kab
+ok1ka
+ok2k1a2d
+ok2k1aj
+ok2k1a1le
+okk1alk
+ok2k1as
+ok2kaz
+okk1elh
+ok1ke
+okk1e1l
+okk1e1l
+okk1elr
+okke2r1e2ssb
+okke1re
+okkere1s
+okke2r1e2s1se
+okke2r1e2ssh
+okke2r1e2s1si
+okke2r1e2ssn
+okke2r1e2ssr
+okke2r1e2ss3s
+1okke1r
+ok2k1es
+ok2k1p
+ok1k
+ok2kid
+ok1ki
+ok1k1l
+ok2kob
+ok1ko
+okk1ss
+ok1k
+okk12v
+ok1k1ri
+ok2kud
+ok1ku
+ok2k1ur
+o1k2l
+o2k1ob
+o1ko
+oko1la2
+oko2lr
+oko1l
+o2k1olts
+okol1t
+okon1n
+oko2n1ok1s
+oko1no
+oko2ra
+oko2r1
+oko2ril
+oko1ri
+oko2ris
+o2k1or1m
+ok1o2ro
+o2k1os2z
+o2k1o2v
+o2k1b
+o1k
+o2k12d
+ok12k
+o2k1l
+o2k1n
+ok2r
+o2k1s
+o2k12v
+ok12z
+ok12r
+o1k
+ok1pl
+ok1pr
+ok2ris
+ok1ri
+ok2sel
+ok1se
+ok1sp
+oksz1alm
+oks2z
+ok1s1za
+ok2szan
+ok2sz1es
+ok1s1ze
+ok2sz1is
+ok1s1zi
+1oktn
+ok1t
+o2k1ud
+o1ku
+o2k1ug
+o2k1uj
+ok1u2ra
+o2k1u2t
+ok12r.
+o1k
+ok1rb
+ok1rh
+ok1rr
+ok1s2z
+o2k1tb
+o2k1th
+o2k12ti
+o2k1tj
+o2k1tk
+o2k1tn
+o2k1tr
+o2k1tt
+o2k12tu
+o2ktv
+ok1g
+o1k
+ok12l
+ok1n
+ok1r
+ok12t
+ok12v
+ok1z
+ok1z
+o1k
+o3l2a.
+o1la
+ol1abl
+ola1d2
+ola1f2
+1o2la2j.
+1o2lajb
+1o2lajf
+1o2lajg
+1o2lajh
+1o2la1ji2
+1o2lajj
+1o2lajk
+1o2lajm
+1o2lajn
+1o2lajp
+1o2lajr
+1o2l2ajs
+o2lajt
+o2la1ju
+1o2la1j
+o2lajv
+ola1k2r
+o2l1alg
+ol1alk
+ol1amn
+ol1a1nya
+olan2y
+ola1p2
+ola1s2p
+ola1s2t
+o1la2t1a1la
+ola1ta
+olat1an2y
+ol2atan
+ol2a2tl
+ola1t
+ola2tp
+ola2tk
+ola1t
+ola2t1inf
+ol2atin
+ola1ti
+ola2t12v
+ola1t
+ola2t1ol
+ola1to
+ola2t1orn
+ol2ator
+ola2t12l
+ola1t
+ol2a2tz
+ola1t
+olau2r
+ola1u
+o2l1b1r
+o1l
+o2l12g
+ol2ha
+ol1ll
+o2l1rb
+o2l1rh
+o2l12ri1a
+ol1ri
+ol2ri1
+o2l1rk
+o2l1rn
+ol2rok
+ol1ro
+ol2ron
+o2l1rr
+o2l1rt2
+o2l12ru
+ol2s1za
+ols2z
+o2l12ti
+o2l1tv
+ol2caj
+ol1ca
+ol2cal
+ol2c1a2n
+ol2c1e2k
+ol1ce
+ol2cel
+ol2ces
+ol2c1v
+ol1c
+ol2c3h
+olc1i1ko
+ol1ci
+ol2c
+ol2c
+ol2c3sor
+olc2s
+ol1c1so
+ol2c1s
+olc3s2z
+ol2c
+ol2c2z
+ol2dab
+ol1da
+1olda2l.
+1olda1l
+1oldalb
+olda2le
+1oldalh
+1oldalk
+1oldal3l
+1oldaln
+1olda1lo
+1oldalr
+1oldal1t
+oldalt2
+1olda1lu
+ol2d1an2y
+ol2dap
+olda2tel
+olda1te
+ol2d1a2u
+ol2dl
+ol1d
+ol2deg
+ol1de
+ol2d1e1l
+ol2d1ell
+ol2d1elv
+ol2d1em
+ol2d1e2r
+ol2d1e2s
+ol2dev
+ol2dez
+ol2ds
+ol1d
+ol2d11ve
+ol2di2p
+ol1di
+ol2d1is
+ol2dor
+ol1do
+1olds
+ol1d
+ol2d12
+ol2dud
+ol1du
+ol2d1u2g
+ol2d1
+ol2d
+ol1e2g
+o1le
+o2l1e2l
+o2l12d
+o1l
+o2l12g
+o2l1l
+ol12r.
+ol1rd
+ol12re
+ol11r
+ol1rh
+ol12ri
+ol1rj
+ol1rl
+ol1rn
+ol11r
+ol1rs
+o2l1r1t
+ol12r
+ol1rv
+o2l1rz
+olfa2k
+ol1fa
+ol2fa1u
+ol2f1r
+ol1f
+ol2fes
+ol1fe
+ol2fe2t
+olf1ing
+ol1fi
+ol2fir
+ol2fis
+ol1fu2
+ol2f1ut
+ol2fj
+ol1f
+ol1gl
+ol1g2r
+2olib
+o1li
+o2l1i2du
+1o2li1ga
+oli2gz
+oli1g
+o2l1i1g
+o2l1ill
+o2l1i2m2a.
+oli1ma
+o2l1i2m
+1olimp
+o2l1ind
+oli2nu
+o2l1i2pa
+o2l1isk
+oli2szl
+olis2z
+oli1s1z
+o2l12v.
+o1l
+ol1k2r
+oll1a2g2y
+ol1la
+ol2l1aj
+olla2l
+ol2l1a1la
+ol2l1alj
+ollan2d12
+oll1an2y
+ol2l1at1k2
+oll1att
+ol2l12g
+ol1l
+ol2l1e2c
+ol1le
+oll1e1ge
+oll1e1g
+ol2l1e2g2y
+ol2l1e2h
+olle2l
+ol1l1e1le
+ol2l1emb
+ol2l1e2re2i.
+olle1re
+ollere1i
+ol2l1e2rein
+ol2l1e2reit
+ol2l1e2reiv
+oll1e1se
+ol2l12k
+ol1l
+ol2l12r.
+ol2l11ri
+ol2l1inf
+ol1li
+ol2l1ing
+oll1inj
+ol2lins
+ol2l1int
+oll1isk
+ol2lob
+ol1lo
+ol2lor
+ol2l1os2z
+ol2l1
+ol2l12
+oll1s
+ol2lub
+ol1lu
+ol2lul
+ol2l1u2s
+ol2l
+ol3lyu
+ol2l2y
+olmeg1
+ol1me
+oln1i1ke
+ol1ni
+o2l1o2l
+o1lo
+o2l1op
+ol1ott
+o2l1ox
+ol1e3dnn
+o1l
+ol1e
+ole2d
+ol1f2
+ol1k2r
+o2l11n
+o2l1nn
+o2l12no
+o2l1nr
+o2l1nt
+o2l2r1i
+ol1r
+o2l2rj
+ol2rk
+ol2rn
+o2l2rr
+o2l2rt
+ol12ri
+olt2
+ol1tr
+ol12l
+o1l
+ol1r
+ol1s
+ol1p2l
+ol1p2r
+ol1sk
+ol2t1aj
+ol1ta
+1oltalm
+1olta1lo
+ol2t1a1ri
+ol2t1g
+ol1t
+ol2t11ta
+ol2t1eg
+ol1te
+ol2t1em
+olte2r
+ol2t1e1re
+olte2s
+ol2t1e2v
+ol2t1p
+ol1t
+ol2t12r.
+ol2t1rr
+ol2t1s
+ol2tid
+ol1ti
+ol2tim
+ol2tis
+ol2t1iz
+ol2t1old
+ol1to
+1olt1
+ol1t
+1olth
+1olt1k
+1olt1lo
+1oltm
+1oltn
+ol2t1r
+ol1t
+ol2tr
+ol1t
+o2l1ug
+o1lu
+o2l1ur
+o2l1u2t
+ol1s
+o1l
+ol1g
+o1l
+ol1l
+ol1v
+ol1z
+1olvad
+ol1va
+1olvas
+o2lyabr
+ol2y
+o1lya
+oly1a1da
+oly1ag2g2y
+olya1me2
+olya2mes
+oly1aszt
+olyas2z
+o2lyl
+o1ly
+o1lye2
+o2ly1el
+o2ly1em
+oly1en
+1o2lyb
+o1ly
+1o2lyh
+1o2ly1i
+o2ly2l
+1o2ly2n.
+1o2lyir
+o1lyi
+olyi1
+o2lyim
+2o1ly
+o2ly1
+o2ly
+o2lyug
+o1lyu
+o2ly12
+o2ly12
+omat1a2d2.
+o1ma
+oma1
+oma2ta
+oma2ta1d
+o2m1abl
+om1a2dat
+oma1da
+o2m1adm
+o2m1a2d
+oma1f
+oma1ga2
+oma2g1ad
+om2a2ga2l
+oma2g12
+oma2ge
+oma1gi2
+oma2g1in
+o2m1a2gya
+omag2y
+om1a1gy
+o2m1a1j
+o2m1ajk
+om2a1k1r
+o2m1akt
+o2m1a2lag
+oma1la
+oma2la1po
+oma2lapr
+o2m1alm
+om1alt
+o2m1alv
+o2m1amb
+om1ang
+o2m1ann
+om1apad
+oma1pa
+o2m1app
+oma1pr
+o2m1a2ra
+o2m1arc
+o2m1arg
+oma2t1rak
+om2atr
+oma1t
+omat1ra
+o2m1at1k
+o2m1at2y
+o2m1a2u
+om1a2zo
+om2c2s
+o1m
+om2g
+om11gi
+o2m11go
+om2nya2n
+omn2y
+om1nya
+omny1k2
+o2m1p
+o2m12ra1i
+om1ra
+om12rak
+o2m12ram
+om12ras
+o2m12r
+o2m1rd
+o2m12re2
+om2r2.
+om1r
+om2rt
+o2m1rg
+om2ri1a
+om1ri
+om2ri1
+o2m1rm
+o2m12ru
+om2s
+om2s2z
+om1s3z
+o2m12t1
+o2m1tk
+o2m1tm
+om12t1ol
+om1to
+o2m1tr
+om2b1a2lo
+om1ba
+om2bg
+om1b
+om2b1eg
+om1be
+omb1elh
+om2b1elt
+om2b1erd
+omb11ne
+om1b
+om2b11ri
+omb12n.
+om1b
+omb2r
+omb11ra
+om1b1ro
+om2buj
+om1bu
+omdi1o2
+om1di
+om1dr
+o2m1e2b
+o1me
+o2m1e2ce
+ome2c3hani1k
+omec2h
+ome1c1ha
+omecha1ni
+o2m1e2d
+om1ef
+o2m1e2g
+ome2l
+o2m1e1la
+om1e1l
+o2m1elb
+o2m1e1le
+o2m1e1l
+o2m1elk
+om1el1l
+o2m1elm
+o2m1eln
+o2m1e1lo
+o2m1e1l
+o2m1els
+om1el1te
+o2m1e1lu
+o2m1elv
+o2m1e2m
+om1e1ne
+om1eng
+om1en2y
+om1enz
+ome1o1
+ome2os
+omeos2z2
+om1erd
+o2m1e2red
+ome1re
+o2m1e2re1i
+o2m1ern2y
+om1e2ro
+ome2r
+o2m1er2.
+o2m1erb
+o2m1erh
+o2m1ern
+o2m1err
+o2m1er1s
+omer1ss
+o2m1ert
+o2m1erv
+om1e2r
+ome2s
+om1e1se
+om1e1s
+om1ess
+om1est
+o2m1e2ti
+o2m1etn
+o2m1e1t
+o2m1e2v
+o2m1ex
+ome2z
+o2m1e1ze
+o2m11be
+o1m
+om12de
+o2m1g
+o2m12he
+o2mhs
+om11je
+o2m12ke
+o2m12le
+om11l
+om12l
+o2m1p
+o2m12r.
+o2m1rb
+o2m1rc
+o2m12re
+o2m12r
+om2r2i.
+om1ri
+o2m1rm
+o2m12r
+o2m1rr
+o2m1r1te
+o2m1r1t
+o2m1rv
+o2m12s
+om2tel
+om1te
+o2m1tt
+o2m11ve
+om11v
+om1f2l
+om1gl
+om1gr
+om1i1de
+o1mi
+o2m1i2d
+omi2g
+o2m1i1ga
+o2m1i1g
+om1i2ko
+o2m1iks
+o2m1ill
+om1i1m
+omi1me2
+omi2mel
+omi2m1
+om1i2n2a.
+omi1na
+omi2nb
+omi1n
+omi2nv
+o2m1ind
+om1inf
+o2m1ing
+om1inv
+o2m1i2o1no
+omi1o
+o2m1i2p
+o2m1i1r
+o2m1i2ri
+o2m1i1ro
+o2m1irt
+o2m1isk
+o2m1ism
+o2m1is1te
+omi2s1z1
+omis2z
+om1i2tal
+omi1ta
+omi2ta2n
+omi2t1s
+omi1t
+omi2t1e
+omi2ti2s
+omi1ti
+om1i1z
+om1i1zo
+om1izz
+om1j
+o1m
+o2m1r
+om12v
+om12z
+om1j2
+om2j
+omk2ro2k.
+om1k
+omk1ro
+om1kl
+om1kr
+oml2b1t
+om1l
+oml1b
+1omlan
+om1l
+oml1a
+1omlkr
+oml1k
+omo2dor
+o1mo
+omo1do
+omo2kas
+omo1ka
+o2m1ont
+o2m1o1pe
+omo2ras
+omo1ra
+omo2re
+omo2riz
+omo1ri
+o2m1or3j
+o2m1os1to
+o2m1oszt
+omos2z
+o2m1ox
+om1k
+o1m
+om12l
+om1n
+om12r
+om1s
+om12t
+om1v
+om12z
+om12r
+o1m
+om12s
+om2pel
+om1pe
+om1p1la
+om2p1ors
+om1po
+om2p
+om2p1u2t
+om1pu
+om1sk
+om1sl
+om1sp
+om1st
+omtes2s
+om1te
+om1t2r
+o2m1ud
+o1mu
+o2m1ug
+o2m1uj
+omu2n
+o2m1u1no
+o2m1ur
+o2m1u2t
+o2m1u2z
+o2m1j
+o1m
+om1d
+o1m
+om1g
+om12l
+om1r
+om1s
+om1t
+om1v
+om1z
+om1r
+o1m
+om1z
+om1ya
+o2n1abl
+o1na
+ona2cl
+ona1c
+ona2dat
+ona1da
+ona1dr
+on1ads
+ona1e2
+on1agg
+on1a1gi
+on1a1g
+on1agyh
+onag2y
+on1ajn
+o2n1ajt
+on1akc
+o2n1akk
+on1akn
+o2n1akt
+on2a2len
+ona1le
+on2a2l1e2s
+ona2lint
+ona1li
+o2n1al2j.
+o2n1al1ju
+ona2lok
+ona1lo
+ona2los
+1ona1ni
+o2n1a2no
+o2n1ant
+on1app2
+ona1pr
+ona1ps
+on2a2rc
+ona1r
+ona1s2p
+on2a2tl
+ona1t
+ona1t2
+on2a2tz
+o2n1br
+o1n
+2onc
+o2n1g
+o2n1l1lo
+o2n1llv
+o2n12p
+on12rad
+on1ra
+o2n12rak
+on12rat
+on1rb
+o2n1rk
+o2n1rn
+o2n12ro
+o2n1rt2
+o2n12ru
+o2n12r
+on1rv
+o2n12s1za
+ons2z
+o2n12szokr
+on1s1zo
+o2n12t1l
+on1t
+on2ts
+o2n1tc
+o2n12t1e2
+on2t1r
+on1t
+o2n1tf
+o2n1t1he
+o2n1tm
+o2n1t1re
+on1bl
+on1br
+on2cal
+on1ca
+on2c1l
+on1c
+on2c1e2g
+on1ce
+once2s
+on2c1ez
+on2c1k
+on1c
+on2c12r.
+on2c11r
+on2c1he
+onc2h
+on2cid
+on1ci
+on2c1ikr
+onc1ill
+on2cs
+on1c
+on2c3sg
+onc2s
+on1c1s
+on2cseg
+on1c1se
+oncs1emb
+on2cs1g
+on1c1s
+on2cs12r.
+onc3sikk
+on1c1si
+on2cs1im
+on2c
+on2c
+ond1i1ko
+on1di
+on2d1o2kos
+on1do
+ondo1ko
+ond1ok1s
+on2d1os2z
+on2d1l
+on1d
+on1e2b
+o1ne
+o2n1e2d
+on1e2ge
+on1egg
+o2n1e2g2y
+on1e2h
+one2l
+o2n1e1la
+o2n1e1le
+on1e1l1
+o2n1elh
+on1elj
+o2n1elm
+o2n1eln
+o2n1e1lo
+on1e1l
+o2n1elr
+on1els
+on1elt
+o2n1elv
+o2n1e2m
+one2n
+o1n1e1ne
+on1erj
+on1er1k2
+on1er1s
+one2s
+o2n1e1se
+on1est
+o2n1e2v
+o2n1ex
+2onb
+o1n
+on2d
+on11de
+o2n12g
+o2n12he
+on12ke
+on1ks
+o2n12l
+on12ne
+o2n12p
+o2n1r1be
+o2n1rc
+o2n1rd
+o2n11ri
+o2n1rl
+o2n1rm
+o2n1rp
+o2n1rs
+o2n1r1te
+o2n1rv
+o2n12v.
+o2n2vad
+on1va2
+o2n1vb
+o2n12ve
+on12vi
+o2n1vk
+o2n1vn
+on1vr
+on2g1ll
+on1g
+ongs1s
+on2g1e2c
+on1ge
+on2ged
+on2g1eg
+on2g1e2l
+on2gik
+on1gi
+on1g2l
+on2g
+on2gyad
+ong2y
+on1gya
+on2gy
+o2n1i2d
+o1ni
+oni2g
+o2n1i1ga
+o2n1i1ge
+o2n1i1g
+o2n1ij
+on1i2ke
+o2n1ill
+o2n1inb
+o2n1ind
+o2n1inf
+o2n1ing
+o2n1inj
+o2n1inn
+o2n1inr
+o2n1ins
+o2n1int
+o2n1i2onb
+oni1o
+o2n1i2onn
+o2n1i2o1no
+o2n1i2ont
+o2n1i2p
+o2n1i2r
+o2n1i1ro
+o2n1irt
+o2n1isk
+o2n1ism
+on1is1te
+oni1ta2
+o2n1i2z
+on1i1zo
+o2n1izz
+on1g
+o1n
+o2n1n
+o2n1v
+on1z
+onk1ll
+on1k
+onk2ro2k.
+onk1ro
+onk2t1
+on1k
+on2n2e.
+on1ne
+on3ny2r
+on2n2y
+on1ny
+on3nye
+on3nyo
+on3ny
+on3ny
+o2n1ob
+o1no
+ono1ka2
+o2n1o2kal
+on1o2kos
+ono1ko
+o2n1ok1ta
+o2n1old
+on1oll
+on1opt
+ono2r1ll
+ono1r
+o2n1oszl
+onos2z
+o2n1o2v
+o2n11ri
+o1n
+on2sak
+on1sa
+on2si
+on22s1z
+on1s2z2
+on22szen
+on1s1ze
+on1b
+o1n
+on1l
+on1n
+on1r
+on1s
+on12t
+on12v
+on12z
+o2n11ri
+o1n
+on12s
+on1pl
+on1pr
+on1ps
+on1s2k
+on1s2l
+on1s2m
+on1s1pe
+on1s1po
+on1spr
+on1sr
+on1s1t
+ons2z2
+on1szt
+ont1ag2y
+on1ta
+on2t1aj
+on2t1al1k2
+on2t1a1ra
+on2t1atr
+on2taz
+on2t1ll
+on1t
+ont1rv
+on2teb
+on1te
+on2t1ed
+on2t1e2g
+ont1e1l
+ont1eld
+ont1elh
+ont1ell
+ont1elm
+on2teln
+on2t1e1l
+ont1elt
+ont1elv
+ont1emb
+onte2s
+on2t1e1se
+ont1e1ve
+on2tl
+on1t
+onti2g
+on1ti
+on2t1i1g
+on2t1i2ko
+ont1ikr
+on2t1i2m
+on2t1inf
+on2t1int
+onti2s2z
+ont1i1s1zo
+on2t1iz
+on2t12v
+on1t
+on2t1oml
+on1to
+on2t1ors2
+ont11ni
+on1t
+1ontst
+on2t1s
+on1t
+on2t1z
+on2tl
+on1t
+on2tr
+on2t1z
+on2tye
+ont2y
+o2n1ud
+o1nu
+o2n1ug
+o2n1uj
+onu2n
+o2n1u1na
+o2n1u2r
+o2n1u2t
+o2n1j
+o1n
+o2n12s
+on2t
+o2n1tb
+on11t
+o2n1th
+on11ti
+o2n1tj
+on11to
+o2n1tr
+o2n1tt
+on12c
+o1n
+o2n12g
+on12l
+o2n1n
+on1r
+o2n12t
+on12v
+o2n12z
+on1r
+o1n
+on1z
+o2ny1a1c
+on2y
+o1nya
+ony1a2d
+o2ny1akc
+ony1alj
+o2ny1alk
+ony1alt
+o1ny1a1nya
+onyan2y
+onya1p2
+o2ny1a1p
+o2ny1l
+o1ny
+o2ny1rk
+o2ny1rn
+ony11z
+ony1e2c
+o1nye
+ony1e2g
+o2ny1e2l
+o2ny1e2m
+o2nyen
+o2ny1e2r
+ony1e2s
+o2ny1g
+o1ny
+o2ny12j
+o2ny12k
+o2ny1l
+o2ny12ne
+o2ny12r.
+o2ny1r
+onygc1
+ony1g
+o2nyi1g
+o1nyi
+ony1i1ko
+ony1ing
+o2nyi1ta
+o2nyitk
+onyi1t
+o2ny12r
+o1ny
+ony1old
+o1nyo
+ony1oml
+o2ny1o2r
+o2nyos2z
+ony12r
+o1ny
+o2ny1
+o2ny12
+o2nyug
+o1nyu
+o2ny1ur
+o2ny12
+on2zag
+on1za
+onz1aj1t
+on2zar
+on2zg
+on1z
+on2z12l
+on2z1ed
+on1ze
+on2z1e2l
+on2z1e2m
+onz1ern
+on2z1es
+on2z1k
+on1z
+on2z11re
+on2z1im
+on1zi
+onz1ing
+onz3sel
+onz2s
+on1z1se
+on2z
+o1o
+oo2ib
+oo1i
+oo2in
+oo2pe
+oo2re
+oo2se
+oo2xi
+o1
+o1
+o1
+o2p1a2b
+o1pa
+o2p1a2d
+o2pal
+op1a2la
+o2p1an2y
+op1a2po
+op1a2r
+2opat2a.
+opa1ta
+2opath
+opa1t
+2opat1i
+2op2atj
+2opat2k.
+2opat1ka
+2opatkb
+2opatk1na
+2opatn
+2op2atr
+2op2ats
+2opatt
+2op2atv
+2opatiku2s.
+opa1ti
+opati1ku
+o2p1a2z
+o2pl
+o1p
+o2p1m
+o2p12rat
+op1ra
+opsks2z1
+ops1k
+o2p1th
+2opti2a.
+op1ti
+opti1a
+2optia1i
+2opti2a1p2
+2optib
+opti1
+2optirt
+opti1
+2optih
+2optin
+2optir
+2opti2s.
+2optisa2n
+opti1sa
+2opti2t.
+2optiv
+o2p1tl
+o2p1tm
+op1bl
+op1e2d
+o1pe
+op1e2g
+op1ejt
+op1e1l
+op1em
+opera1s
+ope1ra
+operas2z2
+op1erd
+op1er1k2
+op1e1r
+op1es
+op1e2t
+o2p12l
+o1p
+o2p12n
+op1gr
+op1i2ko
+o1pi
+op1ikr
+o2p1im
+o2p1ind
+o2p1ing
+o2p1i2p
+o2piram
+opi1ra
+o2p1i2r
+op1i1ro
+op1i1si
+op1ist
+opi2t
+o2p1i1ta
+opi2z
+op1i1zo
+op1izz
+op1v
+o1p
+op1kl
+op1kr
+o1p2lnjait
+op1l
+opln1ja
+oplnja1i
+o1p2lno2k.
+opl3nok
+opl1no
+o1p2lnon
+o2p1ob
+o1po
+2opol
+o2p1orj
+o2p1orr
+opor2t1a2
+opor2t12
+opor2t1e2
+opor2t1rd
+opor1t
+opor2t
+o2p1or1z
+o2p1ov
+op1s
+o1p
+op2p
+op2p1is
+op1pi
+op1py
+op1s2l
+op1sp
+op1sr
+op1s2t
+o2p1ud
+o1pu
+o2p1u2r
+o2p1u2t
+op1j
+o1p
+o2p1s
+op1d
+o1p
+op1g
+op1t
+op1z
+o2r1abl
+o1ra
+o2r1abr
+ora2dat
+ora1da
+o2r1a2d
+o2r1adm
+o2r1a2d
+ora12
+or1aff
+or1agg
+or1a2g
+ora2kad
+ora1ka
+ora2kas
+o2r1akc
+ora1kl
+ora2kol
+ora1ko
+o2r1akt
+or1alg
+o2r1alj
+o2r1alk
+o2r1alm
+o2r1alt
+o2r1alv
+or1amp
+o2r1a1na
+o2r1a1ne
+o2r1ank
+o2r1a2no
+o2r1ant
+or1a2nya
+oran2y
+ora12
+o2r1app
+o2r1a2r
+o2r1arc
+or1a2ri
+or1aszk
+oras2z
+o2r1atk
+o2r1atl
+or1att
+o2r1at2y
+o2r1a2zo
+o2r1br
+o1r
+or2c2s
+or1c2s.
+or11c1sa
+or11c1so
+o2r12g
+or2le
+o2r1llam
+orl1la
+or1l1l
+o2r1llv
+or2l
+o2r12p
+o2r12rak
+or1ra
+o2r11r
+o2r1rb
+o2r1rk
+o2r12ro
+o2r1rp
+o2r1rr
+o2r1rt
+o2r12ru
+o2r11r
+o2r1rv
+o2r1sv
+or2s1ze
+ors2z
+o2r11ta
+o2r12t1e2
+o2r1tf
+o2r1th
+o2r1tj
+o2r1tk
+o2r1tm
+o2r1tr
+o2r1ts
+o2r1tt
+o2r11t
+o2r1tv
+or1bl
+or1br
+or2c1a2l
+or1ca
+or2car
+1orcd
+or1c
+or2c1h
+orc2h
+or2c3h
+or2c3ho
+or2c3sg
+orc2s
+or1c1s
+or2c3seb
+or1c1se
+or2c3s
+or2c
+or2c2z
+or2d1a2u
+or1da
+ord1e1me
+or1de
+ord1e2s
+or2dex
+2ore1a
+o1re
+o3re1
+o2r1e2b
+o2r1e2c
+o2r1e2d
+o2r1ef
+or1e2ge
+or1e2g
+o2r1e2g2y
+2ore2k
+or1e1ke
+or1e1k
+ore2l
+or1e1la
+or1e1le
+or1elh
+or1elj
+or1elm
+or1eln
+or1e1lo
+or1e1l
+or1elr
+or1els
+or1elt
+or1elv
+o2r1e2m
+o2r1e2n
+o2r1ep
+or1e1r
+ore2s
+or1e1se
+or1e1s
+or1e1s
+o2r1ess
+o2r1est
+o2r1e1s1ze
+ores2z
+o2r1e2v
+o2r1ex
+or1ez
+o2r12d
+o1r
+o2r12g
+o2r12j
+or2ks
+or1k
+or2k1e2
+or1k1n
+o2r12l
+o2r12m
+o2r12ne
+o2r1p
+o2r11r
+o2r1r1t
+o2r12te
+o2r1tk
+o2r12v.
+o2r12ve
+o2r12v
+o2r12vi
+o2r1vn
+o2r1vr
+orf2l12v
+or1f
+orf1l
+orfi2r
+or1fi
+orfi1
+orfi1
+1organiku2s.
+or1ga
+orga1ni
+organi1ku
+1organikusab
+organiku1sa
+or1gl
+o2r1i1bo
+o1ri
+o2r1i2de
+o2r1i2d
+ori1di2
+ori2d1i1o
+1o2ri1e
+o2r1ifj
+o2r1i2ga
+o2r1i2g
+o2r1i2g
+o2r1i2g2y
+or1i1ha
+o2r1i2m2a.
+ori1ma
+o2r1i2m
+o2r1i2n2a.
+ori1na
+o2rinas
+o2r1i2nn
+ori1n
+o2r1i2nt
+or1i2nv
+o2r1ind
+o2r1inf
+o2r1ing
+or1inh
+o2r1inj
+o2r1ins
+orin2t1a2
+orin2tel
+orin1te
+orin2t1
+o2r1i2p
+o2r1i2si
+o2r1ism
+or1isp
+o2r1is1te
+o2r1i2s1z
+oris2z
+ori2tan
+ori1ta
+o2r1i2z
+o2riz1mo
+o2r1g
+o1r
+o2r12j
+o2r12n
+o2r1r
+o2r12v
+o2r12z
+or3j
+or1k2l
+ork2z1e2p
+or1k
+ork1ze
+or1k2v
+or2m1app
+or1ma
+orma1t2re
+or2m1att
+or2m1a1zo
+orme2g
+or1me
+or2m1eg2y
+orm1e1li
+orm1elv
+orm1erk
+orme1r
+orm1es2z
+orm2t
+or1m
+or2m11te
+orm1ing
+or1mi
+or2m1os2z
+or1mo
+or2mv
+or1m
+or2m1
+or2m1
+or2m
+or2n2e.
+or1ne
+ornis1s
+or1ni
+o2r1o2
+o1ro
+orogks2z1
+orog1k
+oro2k12
+oro2kor
+oro1ko
+o2r1ol1da
+o2r1o2li
+o2roltl
+orol1t
+o2r1ont2.
+oron1t
+o2r1ontb
+o2r1ont1
+o2r1onti2g
+oront1i
+o2r1ontj
+o2r1ontn
+o2r1ontr
+o2r1ontt2
+o2r1ontv
+oro2nya
+oron2y
+oro2nyo
+o2r1o1pe
+or1opt
+o2r1o2r
+o2r1os1ko
+o2r1os1to
+1o2ro1s1zi
+oros2z
+1o2roszr
+o2r1osz1t
+o2r1o2x
+or12i1a
+o1r
+or1i
+or12ni
+or12r
+or11ri
+or12s
+orso2r
+or1so
+or2so1ro
+or12b
+o1r
+or12c
+or12l
+or1n
+or1r
+or1s
+or1t
+or1v
+or12z
+or12r
+o1r
+or12s
+or1pl
+or1p2n
+or1p2r
+orr1abl
+or1ra
+or2r1a2r
+or2r11ta
+or1r
+1orrb
+1orr2i.
+or1ri
+or2rin
+or2riz
+1orrk
+1orruk
+or1ru
+1orr2.
+or1r
+or2s1a2d
+or1sa
+or2s1ajt1ja
+orsaj1t
+or2s1ajtk
+ors1alk
+ors1ass
+or2s1l
+or1s
+or2sed
+or1se
+or2s1e2s
+or2s12ne
+or1s
+or2sr1te
+ors12tt
+ors1t
+ors2r
+or1s
+or2s11r
+or2sn
+or1s
+or2s
+or1s1r
+or1s2tab
+ors1ta
+ors1lt
+or1s
+ors12t
+1orszg
+ors2z
+or1s1z
+ors3z1n
+or1s1z
+or1sz2t
+or2t1agg
+or1ta
+or2t1alm
+or2ta1na
+orta2n12c
+orta1n
+or2t1a1r
+or2tg
+or1t
+ort1rad
+ort1ra
+ort12ram
+ort12rn
+ort1r
+ort12rr
+ort1r1be
+ort1r1n
+ortr2s1adat
+ortr1sa
+ortrsa1da
+ort12ruk
+ort1ru
+or2t12r
+or2t1e2g
+or1te
+ort1ejt
+or2t1e1la
+ort1e2lem
+orte1le
+or2t1e1l
+or2t1ell
+or2t1elm
+or2t1eln
+or2t1e1lo
+or2t1e1l
+or2t1elt
+ort1elv
+ort1emb
+or2te1ne
+orte2r1a
+or2t1ess
+ort1e1ti
+ort11le
+or1t
+ort11l
+ort1lt
+ort1lv
+or2t1rm
+or2tid
+or1ti
+ort1i2ku
+or2t1int
+or2t1ist
+or2t1i1ta
+or2tt
+or1t
+or2t1okm
+or1to
+or2t1o2kol
+orto1ko
+or2t1ok1ta
+or2t1old
+or2t1orm
+or2t1ott
+or2t12r
+or1t
+or2t1n
+or1t
+or2t1s
+or2t12v
+ort1u1ra
+or1tu
+or2t1u2t
+ort12r.
+or1t
+or2t12zr
+or1t
+ort1z
+ortvro1sa3
+ort1v
+ortv1ro
+o2r1ud
+o1ru
+o2r1u2g
+o2r1u2r
+o2r1u2t
+o2r1tb
+o1r
+o2r1th
+o2r12ti
+o2r1tj
+o2r1tn
+o2r12to2n1
+or1to2
+o2r1tr
+o2r1ts
+o2r1tt
+or1d
+o1r
+or12g
+or12l
+or1n
+or1r
+or12s
+or1t
+or12v
+or1z
+or1r
+o1r
+1or2v.
+or2v1a2n
+or1va
+2or1v
+orv1i1si
+or1vi
+1orvos
+or1vo
+or2v
+1orvv
+or2z1a2va2r.
+or1za
+orza1va
+or2z1e2c
+or1ze
+or2zes
+or2zsan
+orz2s
+or1z1sa
+orz1z
+o2s1abl
+o1sa
+o2s1a2da
+o2s1a2d
+o2s1akc
+o2s1a2l
+osa2n
+o2s1ang
+o2s1ant
+o2s1an2y
+o2s1a2p
+os1arc
+os1as2s2z
+o2s1a2t2y
+o2s1a2u
+o2s1br
+o1s
+o2s12g
+o2s1ll
+os12lom
+os1lo
+os1ra2
+os2rak
+os1ri2
+os2rik
+os2rok
+os1ro
+o2s11ru
+oss1s
+o2s12t1a
+o2s11t
+o2s1tj
+o2s1tk
+o2s1tr
+os1e2d
+o1se
+o2s1e2g
+o2s1e2l
+os1emb
+os1e2n
+o2s1er
+o2s1es
+os1e2t
+os1ex
+os1ez
+o2s12g
+o1s
+o2s12l
+o2s1p
+o2s1rd
+o2s1r1te
+o2s1r1t
+os1g2
+o2s1i1de
+o1si
+o2s1if
+osi2g
+o2s1i1ga
+os1ikr
+o2s1inf
+o2s1int
+o2s1i2p
+o2s1i2r
+o2s1i1ro
+o2s1irt
+o2s1ism
+os1isp
+os1is1te
+osist2
+o2s1i2s2z
+o2s1j
+o1s
+o2s12r
+o2s12z
+os1kl
+os1k1r
+2osok
+o1so
+o2sonh
+o2sonn
+o2so1no
+1o2sont
+o2so1nu
+1o2sonv
+o2s1o2r
+o2s1os2z
+os1p2
+o1s
+os1k
+o1s
+os12l
+os1n
+os12v
+os12r
+o1s
+os1pl
+os1p2r
+os1ps
+os1s1ta
+os1su2
+os2s1ur
+ossz1ll
+os2s2z
+os1s1z
+ossz12ro
+ossze2r1ep1re
+os1s1ze
+ossze1re
+ossz1es
+ossz1j
+os1s1z
+os1s1z2
+os3s1z
+os2t1ell
+os1te
+os1t1e2te
+os2tip
+os1ti
+os2tir
+os2tiz
+1ostob
+os1to
+ost1old
+os2t1s
+os1t
+os1t2rom1je
+ost1ro
+2os1tu
+os2t12
+1os1tya
+ost2y
+1ostyn2k.
+os1ty
+o2s1ud
+o1su
+o2s1uj
+o2s1u2r
+o2s1u2t
+o2s12r.
+o1s
+o2s1g
+o1s
+o2s1n
+o2s12v
+o2s1z
+os3za1b
+os2z
+o1s1za
+o2szaj
+osz1a1l
+osz1alk
+osz1alt
+osza2n
+osz1an2y
+o2szar
+o2sz1a1r
+osza2t1e2
+o2sz1l
+o1s1z
+o2sz1ed
+o1s1ze
+o2sz1e2g
+o2sz1e2l
+o2s3zen
+osz1ep
+osz1es
+o2szg
+o1s1z
+o2szj
+o2sz12l
+o2sz12p
+osz2fed
+osz1fe
+o1szfl
+o2szi1ge
+o1s1zi
+o2sz1ing
+osz1ism
+osz1ist2
+o1s1z2
+osz1v
+o1szkl
+1osz1no
+o2sz1o2ro
+o1s1zo
+o2sz1ors
+o2sz1orz
+os3zn
+o1s1z
+osz12r
+o2s1z
+os3zl
+osz2t1alm
+osz1ta
+oszt1an2y
+osz2t1a1po
+osz2tlj
+osz1t
+osz2t2r.
+osz2t1rn
+osz2ted
+osz1te
+osz2tell
+osz2tem
+oszt2r
+osz1t
+osz2t11r
+osz2t1v
+osz1t
+os2z2t1os2z
+osz1to
+oszt2s12
+osz1t
+o2szur
+o1s1zu
+osz1r
+o1s1z
+o2s1z
+osz1g
+os3zl
+ot1abl
+o1ta
+ot1a2da
+otag2
+ota1gr
+ota1k
+ot1a1na
+o2t1ant
+ot1a2n2y
+ot1arc
+ot1arz
+ot1ass
+o2t1a2z
+o2t1br
+o1t
+o2t12g
+ot12rak
+ot1ra
+o2t12r
+o2t1rb
+o2t12r
+ot1rn
+ot1bl
+o2t1e2g
+o1te
+ote1l1a
+ote2l1
+ote2lel
+ote1le
+ote2l
+ote2m1
+ote2m1o
+ot1e2v
+o2t12l
+o1t
+o2t1p
+o2t12r.
+o2t1r1t
+o2t1rz
+ot1fr
+ot1gr
+o2t1id
+o1ti
+o2t1im
+oti1na2
+ot1i2n2a.
+oti2nar
+oti2nr
+oti1n
+o2t1ind
+otin1k2
+2oti1pa
+2oti1pi
+2otipn
+2otipt
+o2t1i1r
+o2t1is
+o2t1i1z
+ot1j
+o1t
+ot1n
+ot1kl
+ot1k2r
+o2t1ob
+o1to
+oto1g2
+ot1o1la
+oto1na2
+oto2n1
+oto2n1i2n.
+oto1ni
+oto2nis
+oton3n
+oto2rak
+oto1ra
+oto2rl
+oto1r
+oto2rr
+oto2re2
+oto2rim
+oto1ri
+oto2rin
+oto2rol
+oto1ro
+ot1f2
+o1t
+ot2pan
+ot1pa
+ot2pas
+ot2pin
+ot1pi
+ot2p1os2z
+ot1po
+ot2s1t
+ot2st
+ot1s
+ots3s
+ot1s1ta
+ot1s2z
+ot2s3zr
+ot21s1z
+ott2
+ot1tr
+ot12l
+o1t
+ot1s
+ot1pl
+ot1pr
+ot1ps
+ot1sp
+ot1sr
+ot1st
+otta1g
+ot1ta
+ot2t12g
+ot1t
+1ottl
+ot1u1ra
+o1tu
+ot1u2s2z
+o2t1j
+o1t
+ot11ri
+ot12l
+o1t
+ot1t
+ot12z
+ot1r
+o1t
+otva1k2
+ot1va
+o1tya1
+ot2y
+o1u
+o1
+o1
+o1
+ova2ga
+o1va
+ova2g1i2n
+ova1gi
+ova2r1an
+ova1ra
+ova2rt
+ova1r
+ova2r1el
+ova1re
+ova2rk
+ova1r
+ova2rs
+ova2ris
+ova1ri
+ov2a2riz
+ovas3s
+ova1u2
+ovb2b1o
+o1v
+ov2s12r
+ov1s
+ov2si2k
+ov1si
+ovi1o2
+o1vi
+owat1t2
+o1wa
+owat2t1r
+ow1el
+o1we
+ow1st
+1oxidh
+o1xi
+o2xi1g
+oy2ce
+oy1st
+oza2g
+o1za
+oza1g1a
+o2z1a1gi
+o2z1a2l
+oza2mal
+oza1ma
+oza2m1e2
+oza2m1r1t
+oza1m
+oza2min
+oza1mi
+oza2n
+o2z1an2y
+oza2r
+oz1a1ra
+oza2tat
+oza1ta
+oz2a2tl
+oza1t
+oza2t1e2
+oza2ts
+oza1t
+oza2t12te
+oz2att
+oza2t1ill
+oza1ti
+oza2t12
+oza2t1ol
+oza1to
+o2z1a2u
+o2z12g
+o1z
+oz2ke
+oz1ll
+o2z12ro
+o2z11ru
+oz2s1e2
+ozs3s
+oz2s3z
+o2z1tl
+oz1e2g
+o1ze
+oz1e2m
+oz1en
+oz2k1e2
+o1z
+o2z12l
+o2z12p
+o2z12r
+oz1i2do
+o1zi
+o2z1i2par
+ozi1pa
+o2z1i1ro
+ozi2s1aj
+ozi1sa
+ozi1st2
+ozi1s2z2
+oz12n
+o1z
+o2zor
+o1zo
+oz1ors
+o2z1os2z
+oz1b2l
+o1z
+ozegyez1
+oz1e
+oze2g2y
+oze1gye
+2ozfi2a.
+oz1fi
+ozfi1a
+2ozfia2i.
+ozfia1i
+2ozfiail
+2ozfia1k2
+2ozfiban
+ozfi1
+ozfi1ba
+2ozfi1b
+2ozfih
+2ozfi1ja
+2ozfijb
+ozfi1j
+2ozfijn
+2ozfijv
+2ozfi2n.
+2ozfi1na
+2ozfir
+2ozfi2t.
+2ozfi1t
+2ozfi1va
+oz22tan
+oz1ta
+oz1p2r
+o2zs1a2l
+oz2s
+o1z1sa
+ozsa2n
+ozs1an2y
+o2z1s1
+ozs1s
+o2z1s
+oz1n
+o1z
+oz12z
+oz1r
+o1z
+ozz1s2
+oz1z
+2.
+1a
+a2c
+a2dag
+a1da
+a2d
+a2do
+a2d
+a2ga
+a2gi
+a2g2y
+a2j
+ajt1i2
+aj1t
+a2kad
+a1ka
+a2kar
+a2k
+a2ku
+a2la
+ala2g1
+a2l
+a2l1e
+alma1na2
+al1ma
+almanac3
+a2lo
+al1os
+a2lu
+a2ma
+a2na
+a2n
+a2n2y
+a2p
+a2po
+a2p
+a2pu
+a2ra
+a2r
+a2r
+a2ri
+a2ro
+a2t2y
+a2uk
+a1u
+a2ur
+a2ut
+a2va
+a2xi
+a2zo
+1
+2b
+2c2s
+2ga
+2gi
+2go
+2gy
+g2y
+2h
+2la
+2lo
+2po
+2r
+2ru
+2r
+2sa
+2s
+2s2z
+2ta
+t1a2d2.
+2ta1d
+2t
+2t1e2
+2t
+2t1i2
+2t
+2to
+2t1
+2tu
+2t
+2t
+2bab
+1ba
+2baj
+2bak
+2bal
+2band
+2bank
+ba1p2
+2ba1r
+2bark
+2bar1na
+bas2
+ba1t2r
+ba1u2
+2bec
+1be
+2bef
+2beg
+2beh
+2bej
+bej2ratok
+be1j
+bej1ra
+bejra1to
+2bek
+2be1le
+2be1l
+2bels
+2bem
+2be1o
+2ber
+2bet
+2bev
+2bez
+2bg
+1b
+2bil
+1bi
+2bi1o
+2bir
+2bit
+2biz
+1b2le
+2bj
+1b
+2b1l
+b2r
+1b2ro
+b2rk
+b1r
+b2ru
+buda2ik
+1bu
+bu1da
+buda1i
+bu2s1z1
+bus2z
+2c1aj
+1ca
+2c1akr
+c1a2la
+c1alk
+2c1ar
+2c1ass
+c1att
+2c1l
+1c
+12ce1
+1ce
+2c1e2g
+ce2l
+c1e1le
+c1elm
+c1e1l
+c1emb
+2c1e2v
+2c1p
+1c
+2c1t
+1c3h
+c2h
+1c3he
+1c3ho
+ci2m
+1ci
+c1i1mi
+c1ing
+2c1i2pa
+2c1is
+c2lu
+2c1or
+1co
+2c1os2z
+c12r
+1c
+c1pr
+21c1sa
+c2s
+2c3sg
+1c1s
+2cs11ru
+21c1se
+21c1s
+21c1si
+2csit
+21c1s
+21c1so
+21c1s
+21c1s
+cs1p
+c3s2p
+c3s2z
+c1tr
+2c1ud
+1cu
+c1n
+1c
+c1z
+1c3za
+c2z
+1c3ze
+1c3zu
+1d1a1da
+1da
+d1a2d
+da2j
+d1a1j
+d1akt
+2da2l.
+2da1la
+d1alg
+2d1am
+d1a1na
+2darabk
+da1ra
+2da1r
+d1a2ut
+da1u
+d1a1zo
+2d1f
+1d
+2d1g
+2d1l1lo
+2d1p
+d12ru
+ds3s
+d1bl
+d1br
+2d1e2d
+1de
+2d1e2g
+d1e2lem
+de1le
+2d1elh
+d1elj
+2d1ell
+2d1elm
+2d1e1lo
+d1e1l
+d1elr
+2d1elv
+d1emb
+d1e1me
+d1ep
+de2ra
+d1e2r
+de2ss
+de1s
+2d1e2v
+2d1ez
+2d12g
+1d
+2d1p
+2d1r1te
+2d1rz
+d1fr
+d1gl
+2d1i2d
+1di
+2d1i1g
+2d1int
+di2p
+2d1i1pa
+2d1i1ro
+di2s2z
+d1i1zo
+2d1r
+1d
+d1kl
+d1kr
+d1kv
+2dob
+1do
+2dok
+2dol
+2dom
+2d1op
+2d1os2z
+2d1o2x
+dks2z1
+1d
+d2ks
+d1k
+d11r
+2d12l
+1d
+d1s
+2d1t
+2d1v
+d1r
+1d
+d1pr
+21d2ram
+d1ra
+2d1r
+d2rm
+1d2rog
+d1ro
+1d2rt
+d1r
+d2ruk
+d1ru
+d1sp
+d1st
+2dug
+1du
+du2r
+2d1u1ra
+dus3s
+du2s3z
+2d1u2t
+2d1j
+1d
+d12r.
+d1g
+1d
+2d1r
+d1v
+d1z
+d3zr
+d2z
+1d1z
+2d3ze
+2d3z1so2
+dz2s
+1e
+e2b
+e2c2h
+e2c2s
+e2d
+e2d2z
+e2ge
+e2g
+e2gs2z1
+e2g2y
+e2ke
+e2k
+e2l1a2
+e2l12
+e2le
+el1en
+e2l
+el1r
+e2l2i
+e2l12
+e2lo
+e2l
+e2l
+embe2r1k
+em1be
+embe1r
+e2me
+e2m
+e2mu
+e2ne
+e2p
+e2pi
+e2po
+e2re
+e2r
+e2r
+e2r
+e2se
+e2s
+e2s
+e2s2z
+e2te
+e2ti
+e2t
+e2ve
+e2v
+e2v
+e2z
+1
+2be
+2ge
+2g
+2g
+22he
+2hs
+2ke
+2k
+2k
+2le
+2l
+2l
+22ne
+2p
+2p
+22r.
+2rd
+22re
+22r
+2ri
+2r
+2r1te
+2r1t
+2rz
+2te
+2tk
+2ve
+2v
+2vi
+2v
+2f2a.
+1fa
+2fa1a
+2fa1
+2fab
+2fac
+2fad
+2fa1e
+2faf
+2fag
+2fah
+2fak
+2fal
+2fa1o
+2fap
+2far
+2fas
+fa1st
+2fa1t2
+2fa1
+2fav
+2faz
+fe2l1em
+1fe
+fe1le
+fe2len
+2f1ev
+2fk
+1f
+2f1l
+2flt
+2fn
+2f12r.
+fi2ab
+1fi
+fi1a
+fi2ad
+fi2ag
+fia1k2
+fi2akr
+1f2la
+1f2lo
+f2l
+f2l
+f2lu
+2foc
+1fo
+2fog
+2fok
+2fol
+2ford
+2forg
+2formc
+for1m
+2formj
+2forml
+2forr
+2fos
+2fot
+2f1ov
+1f2rak
+f1ra
+1f2ri
+1f2r
+1f2ro
+1f2r
+2f1ud
+1fu
+fu2r
+f1u1ra
+f12r.
+1f
+f1rn
+ga1p2
+1ga
+ga2z1
+g1dr
+ge2o
+1ge
+g2p1i2p
+1g
+g1pi
+g3g2y
+gia1k2
+1gi
+gi1a
+gi2akr
+gi2al
+g1r
+1g
+g2la
+g2le
+go2ras
+1go
+go1ra
+1g2raf
+g1ra
+g2rn
+g1r
+gu2sab
+1gu
+gu1sa
+gu2s3z
+2gy1el
+g2y
+1gye
+2gy1es
+3gy2i.
+1gyi
+gy1int
+gy2k1rb
+1gy
+gy1k
+gyta2n12
+gy1ta
+gyte2a
+gy1te
+ha2de
+1ha
+2hal
+2han
+2has
+2hat
+hza2d
+1h
+h1za
+h2z1a1da
+he2ly1e2kt
+1he
+hel2y
+he1lye
+helye1k
+2hon
+1ho
+2hor
+2hos
+hs1s
+1h
+1i
+2i2de
+2i1d
+i2dn
+i2di
+2i2dom
+i1do
+2i2d
+2i2ga
+2i2ge
+2i1g
+i2gb
+i2g1i
+i2gj
+i2gk
+i2gn
+i2gr
+i2gt
+i2gv
+i2konb
+i1ko
+2i2konj
+2i2konn
+2i2ko1no
+i2konr
+i2kont
+2ill
+i2m2a.
+i1ma
+2i2m
+i2mi
+2imp
+2i2n2a.
+i1na
+i2na1i
+i2na1ka
+i2nas
+i2nat
+i2nn
+i1n
+i2nr
+i2nt
+2ind
+2inf
+2ing
+2i2ni
+2inj
+2inp
+2int
+2inv
+i2pa
+2i2rat
+i1ra
+2i2r
+2i2ro
+i2s2z
+2i2ta
+i2tk
+i1t
+i2vad
+i1va
+i2z
+i2zo
+1
+2r
+2ri
+2ro
+2r
+2t
+2v
+2v
+2v
+2ze
+2z
+2zi
+2z
+2z
+ja1g2
+1ja
+2jak2n.
+ja1k
+jak2r
+2jam
+ja1p2
+2jav
+2j1r
+1j
+2jrm
+2jr2.
+j3r
+2j1ru
+2jrv
+2j1t
+2jts
+je2gy12
+1je
+jeg2y
+2jut
+1ju
+2kab
+1ka
+k1a2da
+k1ajt
+2k1a1k
+2k1alj
+2k1al1ko
+2ka1l
+2kamp
+2kamr
+2ka1pa
+2kapc
+2kaps
+2ka2r.
+2ka1ra
+2karr
+2kart
+ka1sh
+2ka1ta
+2ka1te
+ka1t2r
+k1a2ut
+ka1u
+2kav
+2kaz
+2k1ll
+1k
+2k12rad
+k1ra
+2k12ri
+2k1rn
+2k11ru
+2ke2d
+1ke
+2k1ed2z
+k1e1g
+2kem
+2k1emb
+2ker
+ker1es1te
+ke1re
+ke2r1k1n
+ke1r
+ke2rig
+ke1ri
+2k1e2r
+ke2r12g
+ke1r
+ke2s2z
+k1e1s1ze
+ke2t
+k1e1te
+2kev
+2kez
+2k12l
+1k
+2km
+2kn2y
+2k2p.
+2kpb
+2k1pe
+k22p1e2l
+k2p1e2r
+2k1p
+2kpl
+2kpn
+2kppel
+kp1pe
+2kpr
+2kp1t2
+2kpz
+2k12r.
+2krd
+2k1re
+2k1r
+2k1r
+2ks
+2k1tt
+2k1tv
+k1gr
+k2hi1
+k1hi
+2ki1a
+1ki
+2ki1
+2kic
+2ki1e2
+2ki1
+2kif
+ki2g
+2k1i1ga
+2k1i1g
+2ki1
+2kij
+k1ill
+2kim
+k1i1mi
+2kinc
+2ki1ne
+2k1int
+2kin2y
+2ki1o
+2k1isk
+2k1ist2
+2kis2z
+2kit
+2kiv
+k1i2va
+k1k2r
+k2lim
+k1li
+1k2l
+21k2l
+21k2lu
+2kock
+1ko
+2ko1co
+2ko1e
+2koh
+2koll
+2ko1m
+2komf
+2komp
+2konc
+2konf
+2konj
+2kons
+2kont
+2kon2y
+2konz2
+2ko1o
+2kop
+2ko1r
+ko2r12s
+2korb
+2ko1re
+2k1org
+2ko1ri
+2korl
+2korm
+2korn
+2ko1ro
+2korr
+2kor1s2
+2ko1ru
+2k1oszl
+kos2z
+2kd
+1k
+k12l
+2kr
+2k1v
+2kl
+1k
+k12l
+k12l
+k1rd
+k1tl
+k1pl
+k1pr
+1k2r
+k2re1
+k1re
+2krm
+k1r
+k2rt
+21k2ri
+1k2r
+k2ron
+k1ro
+k2ros
+21k2rn
+k1r
+k1sk
+k1st
+2k1ug
+1ku
+2kum
+2kup
+2kur
+ku2sz1l
+kus2z
+ku1s1z
+ku2s1ze
+2kut
+2kr
+1k
+2k1g
+1k
+2kl
+2ks
+k1zl
+21k2v
+l1ajt
+1la
+l2a2man
+la1ma
+la2pa
+2l1a2pl
+la1p
+la2pol
+la1po
+la2p1os2z
+l1a2r
+l1a1zo
+l2b1t
+1l
+l1b
+12ll
+ls3s
+l2s
+l1tl
+le12
+1le
+le2j12ra1to
+le1j
+lej1ra
+l1e2r
+l1e2se
+l1e2s
+l1esh
+l1esn
+l1ess
+l1est
+le2ta
+le1te2
+le2t1ev
+2l1rz
+1l
+l2tel
+l1te
+l2ts
+l1t
+li2a1ko
+1li
+li1a
+li2am
+li2s
+l1i1s1zo
+lis2z
+l1n
+1l
+lo1ma2
+1lo
+lo2m1al
+lo2m1
+lo2m1e
+lo2mi2s
+lo1mi
+12lomr
+2l1os2z
+l12
+1l
+l1s2l
+l1sp
+lt2
+2l1l
+1l
+2l1r
+2l1s
+2l12z
+l1p2r
+lu2m1e
+1lu
+lus3s
+lu2s1z
+lus2z
+l1t
+1l
+l1v
+lya2ga
+l2y
+1lya
+lyag1g
+1ly2
+m1abl
+1ma
+2m1a2c
+2magn
+m1akn
+m1all
+2man
+2ma1ra
+2marc
+maren2
+ma1re
+2marh
+2mark
+mas2
+ma1sp
+2mass
+2ma1te
+m1a2to
+2m1a2u
+2max
+2mg
+1m
+m1ll
+2mrt
+2mz
+m1b2r
+me2g1o
+1me
+m1e2g2y
+2md
+1m
+2ml
+m11le
+2m1p
+2m1re
+2m1r
+2mrg
+2mrk
+2mrn
+2m1r
+2mrs
+2mr1t
+mi2ac1
+1mi
+mi1a
+mi2as2
+mi2g
+2m1i1g
+2mi2k
+m1i1ko
+2min
+2m1i2o1no
+mi1o
+2m1i2ont
+2m1i2p
+2mis
+2m1isk
+2m1ist
+mi2s2z
+2m1i2z
+2mod
+1mo
+2mog
+2moh
+2m1o1la
+2m1old
+2mond
+2mo1ni
+2mo1no
+2mor
+2mos
+2m1os2z
+2mot
+2m1ox
+2moz
+m1t
+1m
+m1r
+1m
+m1pr
+m1t
+1m
+m1z
+mt2
+1m
+2nad
+1na
+2nag
+na2ks
+na1k
+na2k1e2
+na2ko2l
+na1ko
+2n1al2j.
+2n1aljak
+nal1ja
+n1al1j
+n1al1jo
+2n1al1ju
+2nap
+2na2p2a.
+na1pa
+na2p
+2n1ap1ba
+na2pe
+n1arc
+2n1asp
+n1aszt
+nas2z
+na1t2
+2nav
+n2l
+1n
+2n1ll
+2n11lo
+ns1s
+n1br
+ne2d
+1ne
+n1ez
+12n1
+1n
+2nm
+2n12p
+12n1ra2
+n1rc
+2n1rd
+12n1r
+n2v1
+2nz
+ni2g
+1ni
+2n1i1g
+2n1ist
+n1odv
+1no
+12nokul
+no1ku
+2nor
+n1o2x
+n1n
+1n
+2n1r
+n1t
+n2h
+1n
+n1
+n1pr
+2n1u2t
+1nu
+n1r
+1n
+21nya
+n2y
+21nye
+2nyil
+1nyi
+2nyi1t
+2nyit2.
+nyi1t
+21ny
+21nyo
+21nyu
+21ny
+1o
+o2d
+o2ka
+o2k
+o2k1i2
+o2ku
+o2la
+o2li
+o2pe
+o2ra
+o2ri
+o2ro
+o2vi
+o2xi
+1
+2la
+2l
+2li
+2lo
+2ra
+2ri
+2s
+2v
+2vo
+2v
+1
+2b
+2ko
+2k
+2l
+2l
+2r
+2ve
+2z
+1
+2re
+2r
+2ri
+2r
+2r
+2s
+2s
+2p1a2da
+1pa
+2p1alk
+p1a2nal
+pa1na
+2p1a2no
+p1ant
+2p1an2y
+p1a2rn
+pa1r
+p1ll
+1p
+prba2jok1b
+pr1ba
+prba1jo
+prba2jok1r
+pcsa2p1
+pc2s
+p1c1sa
+2p1ef
+1pe
+2p1e2g
+p1e1lo
+pia1k2
+1pi
+pi1a
+pi2akr
+2p1id
+2p1ind
+2p1i2o
+p1i2r
+1p2lak
+p1la
+1p2las
+1p2lu
+2p1ob
+1po
+2p1o2la
+po2rad
+po1ra
+p11ra
+1p
+1p2ri
+p2rod
+p1ro
+p2rog
+p2rop
+1prb
+p1r
+p1t2r
+pus3s2
+1pu
+2p1j
+1p
+p1v
+1p
+2ra1b
+1ra
+r1a1ce
+ra2dat
+ra1da
+ra12
+12rai2.
+ra1i
+rai1
+ra2ir
+ra2i1k
+ra2i1ko
+12ra1je
+ra1kv
+2ra1la
+2r1alk
+2ra1mo
+2r1a1ni
+r1ant
+ra1p2l
+r1arc
+1ra1re
+ra1s2p
+2r1a2tom
+ra1to
+12ra1
+rdi21i
+1r
+r1di
+rdi1
+1rn
+r1
+r1gg
+r12g2y
+2r1l
+12r1mo
+1rmr
+2r12p
+r2se
+2r1ta
+r1tv
+r1br
+r1e1ge
+1re
+2r1e2g2y
+2r1e2le
+r1ell
+r1elm
+2r1e1lo
+2r1e2l
+r1elv
+r1emb
+r1eml
+2r1e2r
+2r1e2set
+re1se
+2r1e2t
+2re1z
+r12je
+1r
+2r12l
+r12ri
+2r1r1t
+rszv1te2
+rs2z
+rsz1v
+rszv2t1e1l
+r2vek
+r1ve
+r1fl
+rh2zot
+r1h
+rh1zo
+ri2a1ka
+1ri
+ri1a
+ri2al
+2ri1si
+ri1
+ris3s
+ri2c2h
+2r1id
+ri2g
+r1i1g
+2r1int
+2r1i2onn
+ri1o
+2r1i2o1no
+2rip
+2r1i2pa
+2r1i2si
+2r1is1me
+2rit
+ri2z
+r1i1zo
+r12j
+1r
+2r1r
+r12z
+r1kl
+rm2s
+r1m
+r1o2k
+1ro
+3r2o1k
+r1o2ki
+ro2kok
+ro1ko
+ro2koz
+r1o2ku
+r1o1k2
+2r1os2z
+2r1o2x
+2r11da
+1r
+r2dj
+r1d
+ri2ko
+r1i
+r1p
+r11s
+2rz
+2r12l
+1r
+2r1ml
+2r1s
+2r1t
+r1r
+1r
+r1p2r
+r1t1r
+ru2mag
+1ru
+ru1ma
+ru2me
+2r1u2r
+ru2sab
+ru1sa
+ru2sa2n
+ru2se
+rus3s2
+ru2s
+ru2s3z
+2r1u1ta
+2r12s
+1r
+2r1t
+r1n
+1r
+r12v
+r1z
+2sabl
+1sa
+2s1a2d
+2s1a2g
+2s1alj
+s1alt
+s1amn
+2s1apr
+2sar
+2s1arcot
+sar1co
+2s1asp
+s1ass
+2s1atl
+2s1a2u
+sa2vo
+2s1br
+1s
+2s1f
+sg1g
+2s1ll
+s12lo
+2s12ro
+2s11ti
+2s1to
+s1bl
+s1br
+scsa1p12
+sc2s
+s1c1sa
+s1e2g2y
+1se
+2sej
+s1elj
+s1elm
+s1e2l
+s1els
+s1elv
+se2m
+s1emb
+s1e1mi
+2s1en
+se2p
+s1e1po
+2s1e2r
+2s1es
+2s1e2t
+2s1ez
+2s12l
+1s
+2sm
+s12ne
+2s1p
+2s12r.
+2s1r1te
+2st
+s2t1ka
+s1t
+2s12te
+2s1tk
+2s1tt
+s1fr
+2s1i2d
+1si
+si2g
+2s1i1ge
+si2kerb
+si1ke
+2sikl
+2s1ind
+2s1inf
+si2p
+s1i1pa
+2s1i1ro
+2s1isk
+s1ist2
+2sk
+1s
+2s1nh
+s12r
+s12r
+1s2kat2
+s1ka
+s2kic
+s1ki
+ski2s
+s1kl
+s1kv
+s2lag
+s1la
+1s2ni
+2sokas
+1so
+so1ka
+2sok1ko
+2soks
+s1o1li
+2so1ra
+2so1r
+2sorb
+2s1org
+2sorh
+2so1ri
+2s1orj
+2s1orm
+2sorn
+2sorok
+so1ro
+2soron
+2sor1r
+2sor1re
+2sors
+2sort
+2sorv
+2s1ott
+2s1ov
+2s12r
+1s
+2s12l
+1s
+2s1s
+s1t
+s1r
+1s
+21s2pir
+s1pi
+s1pl
+1s2pu
+s1s2k
+s1s2p
+s3s1ze
+s2s2z
+s3s1z
+21s2tab
+s1ta
+1s2tad
+1s2taf
+21s2tat
+s2tbb
+s1t
+21s2td
+1s2tt
+1s2tg
+s1t
+2s1t
+s2to1po
+s1to
+2st2r
+s1t1r
+s1t1ri
+1st1ru
+2s1t
+2sug
+1su
+2s1u2r
+2s1u2t
+2s12r.
+1s
+2s12ri
+2s1rn
+2sl
+1s
+2sr
+2s1s
+2s1z
+23s1r
+1s
+21s1za
+s2z
+2s3zac
+2sz1a2lap
+sza1la
+21s1z
+sz2gol
+sz1go
+2s3zr1na
+2szed
+1s1ze
+2szeg
+2sz1e2g
+2szek
+2szel
+2szem
+2szen
+2sze2r.
+2sze1re
+sze2r1e2p
+2szer1k2
+2szerb
+s2ze1r
+23szerv
+23szerz
+2szez
+21s1z
+sz2n12
+21s1zi
+2szi1ma
+21s1z
+2szk
+sz2l
+2szob
+1s1zo
+2szoc
+23szof
+2szol
+2szon
+21s1z
+21s1z
+2sz1s
+21s1z
+2szp
+s3z2s
+2szt
+1sz2t
+szt2r
+21s1z
+21s1z
+2sz1g
+23szk
+1s1z
+2sz1r
+2sz1r
+2s3zrt
+sz2v
+t1a1d
+1ta
+2ta2g.
+2ta1ga
+t2a2gal
+2tagb
+2tag1g
+2ta1gi
+2tagj
+2tagk
+2tagn
+2ta1go
+2tags
+2ta1gu
+t1ajk
+2talap
+ta1la
+2ta1l
+t1al1k2
+2t1alm
+2tan
+t1an1ti
+2tap
+2tar
+tas2
+2t1ass
+2tat
+t1a2ur
+ta1u
+2tax
+2tg
+1t
+2t12gast2
+t1ga
+2t1gg
+2tp
+tra2d
+t1ra
+t2r1a1da
+2t1ro
+2trs
+t1vi2
+t2v1ir
+2t1e2g
+1te
+2t1elh
+2t1e2l
+2t1emb
+2ter1d2
+2t11g
+1t
+2t12k
+t2t12
+t1fr
+2t1i2d
+1ti
+ti2g
+2t1i1g
+t1ill
+2t1im
+2t1ing
+t1i2pa
+ti2s2z
+2t12r
+1t
+2t12v
+2t1z
+t1kr
+tl2ke
+t1l
+2toj
+1to
+2tol
+tol2l1a2d
+tol1la
+t1oml
+2ton
+2tor
+2t1ors2
+2tov
+2t2.
+1t
+2tn
+2t12ko
+1t
+t1e2
+1t
+t2rad
+t1ra
+t2raf
+t2rak
+t2ran
+t2rn
+t1r
+t2rik
+t1ri
+t2ril
+t2ri1
+t2rom
+t1ro
+t1sl
+t1sp
+tsze2r1ep
+ts2z
+t1s1ze
+tsze1re
+tu2s1ze
+1tu
+tus2z
+t11l
+1t
+t12l
+2t1st
+2t12v
+t2z3s
+1t
+1u
+u2bo
+u2ga
+ugrs1s
+ug1r
+uj2j1a2da
+1ujjad
+uj1ja
+u2ni
+u2no
+u2ra
+u2s2z
+u2ta
+u2t
+u2to
+u2t
+u2tu
+1
+2j
+2r
+2s2z
+2ti
+2to
+1
+2g2y
+2le
+2l
+2l
+2n
+2re
+2r
+2r
+2s2z
+2te
+2t
+2t
+2ve
+2ze
+1
+2z
+2vad
+1va
+2vag
+2vaj
+2va2k.
+2vaks
+2va1ku
+2va1l
+2var
+2vas
+2vat
+2vg
+1v
+2vk
+2vl
+2vn
+v2r1a2l
+v1ra
+vrosi2h
+v1ro
+vro1si
+2v1sa
+12v1si
+2v1so
+12vsr
+12vss
+12vst2
+2vz
+ve2r1a
+1ve
+ve1ri2
+ve2rip
+verse2ny1e2kh
+ver1se
+versen2y
+verse1nye
+versenye1k
+v1in
+1vi
+v2zel
+1v
+v1ze
+12vod
+1vo
+2vom
+2von
+za1d2
+1za
+z1a2d
+z1a2d
+2zaj
+2z1akc
+za1k2r
+z1akt
+z1a2la
+2z1arc
+za1s
+za2t1a2l
+za1ta
+z2a2tan
+z2a2tl
+za1t
+za2ts
+za1t
+za2told
+za1to
+za2t12
+2zav
+2z12g
+1z
+z1ll
+2z12ru
+2z12r
+z1bl
+2z1e2g
+1ze
+2z1el
+z1em
+2z1e2r
+2z1ex
+z1ez
+2z12l
+1z
+2z12te
+z1fl
+z1fr
+zhaj1i2
+z1ha
+zha1j
+z1imp
+1zi
+z1ing
+2z1i2p
+zi2s1e2
+zis3s2
+zi2s3z
+zmeg1
+z1me
+2z1old
+1zo
+zo2n1a2
+zo2n1
+zo2ni
+zs2
+1z
+z1sp
+z1r
+1z
+z1pr
+zsa1k2
+z2s
+1z1sa
+2z3ser
+1z1se
+2z3sor
+1z1so
+z3s2z
+z1t2r
+2zuh
+1zu
+2z1u2r
+2z1u2t
+z12s
+1z
+2z1t
+z12g
+1z
+z1l
+z12z
+2.
+1a
+1
+b1a2n
+1ba
+b1l
+1b
+b12r
+b1t
+b2b1a2
+b2b12
+b2b1e2g
+b1be
+bbe2l
+b2b1e1le
+bbe2m
+bb1e1me
+b2b1e2r
+b2b1es2z
+bb1e1ve
+b2bid
+b1bi
+bbi2g
+bb1i1g
+b2b
+b2b1ol
+b1bo
+b2b1os
+b2bot
+b2b
+b2b
+b1b2
+b2b1l
+2b1ef
+1be
+2b1eg
+2b1e2l
+2b1e2m
+2b1e2n
+2b1er
+2b1l
+1b
+2b12r.
+2b1r1t
+brt2
+2b1rz
+b1fr
+2b1i2d
+1bi
+2b1ing
+2b1int
+1b1li
+1b1l
+b1or
+1bo
+b1n
+1b
+12bl1t
+1b
+c1aj
+1ca
+c1c1s1a2
+c2c2s
+c1c1s1i
+2c1p
+1c
+2c11ve
+1c3he
+c2h
+1c3h
+ci12
+1ci
+c1r
+1c
+2c1s1a
+c2s
+cs1j
+1c1s
+cs1k
+2cs12te
+2csiz
+1c1si
+cs1izz
+1c1s1
+2cs12l
+1c1s
+cs12r
+1c1s
+c3s2z
+d1a2l
+1da
+d1a2n
+d1ar
+d12l
+1d
+d1r
+2d1ef
+1de
+d1ell
+2d1em
+d1e2v
+d2m1o
+1d
+d2sa2
+ds3s
+d2s3z
+2d12ves
+d1ve
+2d12vn
+d1v
+2d12vr
+d1gr
+d1z
+1d
+d1os
+1do
+d1c
+1d
+d12r
+d1sp
+d1u2s
+1du
+d1j
+1d
+d12s
+2d1v
+1d
+2d1z
+1d
+1d3z
+d2z
+dz1r2
+1d3zu
+1e
+1
+fs3s
+1f
+g1ab
+1ga
+g1a2c
+g1a2d
+g1ag
+g1a2k
+g1a2l
+g1a2n
+g1ap
+g1ar
+g1as
+g1a2t
+g1b
+1g
+g1g
+g12l
+g12r
+g1t
+g1dr
+2g1e2g
+1ge
+2g1e2k1i
+ge1k
+g1elb
+2ge2le1me
+ge1le
+2g1elf
+2g1el1ha
+2g1elm
+2g1e1lo
+2g1e2mel
+ge1me
+2g1er
+2g1es2z
+g1e2v
+2g12g
+1g
+g1kt
+2g12p
+2g12r.
+2g1rs
+2g1r1t
+gs3s
+g1fr
+2g1id
+1gi
+2g1i2m
+2g1inf
+2g1ist
+2g1i1va
+2g1i2z
+g1n
+1g
+g1r
+g1v
+g1kr
+g1o2l
+1go
+g1op
+g1o2r
+g1os
+g12r
+1g
+g11li
+1g
+g11l
+2g1v
+g1pr
+gre1p2
+g1re
+g1sk
+g1sp
+g1tr
+g1ud
+1gu
+g1u2n
+g1u2t
+2g1g
+1g
+2g1s
+2g1t
+2g1v
+2g1z
+2g1z
+1g
+1g3ya
+g2y
+1i
+1
+j2tl
+j1t
+j2t1o
+k1ab
+1ka
+k1a2g
+k1a2k
+k1a2l
+k1a2n
+k1a2p
+k1ar
+k1as
+k1a2t
+k1a2u
+k1a2v
+k1g
+1k
+k1l
+k12p
+k12r
+k1t
+k1z
+k1dr
+2k1e2d
+1ke
+2k1e2g
+2k1e1ke
+ke2l
+k1e1la
+k1e1le
+k1elh
+k1elm
+k1eln
+k1e1l
+k1elv
+2k1e2m
+ke2n
+ken1s
+k1erd
+2k1e2res2z
+ke1re
+2k1e2r
+2k1es
+ke2vs
+ke1v
+2k1ez
+2k1g
+1k
+k1kh
+2k1kn
+k1ks
+2k12les
+k1le
+2k1p
+k2r1e2l
+k1re
+k2r1em
+2k12rez
+2k12rs
+k1r
+ks3s
+2k12te
+2k12v2e.
+k1ve
+2k12vek
+2k12vet
+k1fr
+k1gl
+ki2d
+1ki
+k1i1de
+k1i1do
+ki2g
+2k1i1ga
+2k1i1g
+2k1ikt
+2k1i2na
+2k1ind
+2k1ing
+2k1int
+2k1i2o
+2k1i2p
+2k1i1ro
+2k1is
+2k1iz
+k1j
+1k
+2k1r
+k1v
+k1z
+k1kl
+k1k2r
+1k1l
+k1ok
+1ko
+k1old
+1ko1l
+1kon
+k1o2p
+k1o2r
+k1o2v
+k12r
+1k
+k1v
+1k2r.
+1k
+k2r
+kr1a2d
+1k
+k1
+k2ra
+k12
+k1pr
+1krs
+k1r
+1k1r
+1k1r
+k1sp
+k1sr
+k1t2r
+k1u2n
+1ku
+k1u2r
+k1us
+k1u2t
+k1j
+1k
+k1r
+k1t
+2k1g
+1k
+k2l
+2k11l
+2k1lt
+2k12t
+2k12v
+2k1z
+l1a2d
+1la
+l1ag
+l1a2j
+l1a2k
+l1al
+l1ap
+l1a2r
+l1a2u
+l1a2v
+l12g
+1l
+l1l
+l12m
+l12p
+l12r
+l12s
+l1t
+l12z
+l1br
+lcsa2l
+lc2s
+l1c1sa
+lcs12p
+l1c1s
+lcs12r
+lcs1ell
+l1c1se
+l2csev
+l2csid
+l1c1si
+l2csiz
+l2cs1ok
+l1c1so
+lcs1ol
+l2csos
+l2csg
+l1c1s
+l2csl
+l2dab
+l1da
+l2d1a2d
+l2d1a2k
+l2d1a2la
+l2d1alj
+l2d1alk
+l2d1a2n
+l2dap
+l2d1as
+l2d12
+l2deg
+l1de
+l2de1p2
+l2dev
+l2d1d
+l1d
+l2dl
+l2d1ing
+l1di
+l2di2p
+l2d1o2r
+l1do
+l2dos
+l2d12
+l1d2
+l2dr
+l2ds
+l1d1r
+l2du2r
+l1du
+l2d3z
+12l1e2b
+1le
+le2gel
+le1ge
+leg1g2
+2lel
+2l1e2r
+3l2e3s
+le2t12
+le2t1el
+le1te
+le2to
+le2t1u
+2l1e2v
+l2d
+1l
+2l11de
+12l1
+2l12g
+2l12kes
+l1ke
+2l11k
+2l12l.
+2l12le
+2l12l
+2l1lh
+2l12li
+2l1lj
+2l1ln
+2l1ls
+2l1lt
+2l1lv
+2l11me
+2l12ne1ke
+l1ne
+2l12p
+2l12r.
+2l12red
+l1re
+2l12rek
+2l12rezn
+2l11r
+2l1rh
+2l12ri
+2l1rj
+2l1rk
+2l1rl
+2l1rn
+2l1rs
+2l1r1te
+2l1r1t
+2l1r1t
+2l12r
+2l1rv
+2l1rz
+ls3s
+2l12tet
+l1te
+l1fr
+l1gy2
+lg2y
+l2gyer
+l1gye
+lgygyu2lo
+l1gy
+lgyg2y
+lgy1gyu
+2l1i2d
+1li
+li2g
+2l1i1ga
+2l1i1g
+2l1ig2y
+2l1ij
+2l1il
+2l1im
+2l1i2n
+2l1i2p
+2l1i2r
+2l1i2s
+2l1i2ta
+2l1itt
+2l1iz
+l12r
+1l
+l12v
+l1o2c
+1lo
+l1o2k
+l1ol
+l1or
+l1o2s
+l12v
+1l
+l2ki
+1l
+2l1kl
+2l1l
+l1nt
+2l1r
+2l12v
+l1e2
+1l
+l1rl
+l11r
+lpr1ba2
+l1p
+l1p2r
+l1sk
+l1sr
+l1st
+l2t1ad
+l1ta
+l2taj
+lt1a1la
+lt1alj
+lta2n
+l2tid
+l1ti
+l2til
+l2t
+l1t1ro
+l2tur
+l1tu
+l1u2g
+1lu
+l1uj
+l1u2s
+l1u2t
+l1j
+1l
+l1s
+2l1d
+1l
+2l1g
+l2le
+2l1l1t
+2l1l1t
+2l1s
+2l1t
+2l1v
+2l1z
+2l1z
+1l
+2ly1a2
+l2y
+2ly1
+ly1e2g
+1lye
+2lyel
+ly2fl
+ly1f
+m1a2d
+1ma
+m1a2g
+m1al
+m1a2n
+m1a2p
+m1ar
+m1a2u
+m1b
+1m
+m1g
+m1h
+m1l
+m1p
+m12r
+m12t
+m1z
+m2b1a2c
+m1ba
+m2b1ak
+mba2l
+m2b1a2n
+m2b1
+m2bec
+m1be
+mb1e1le
+m2b1e2m
+m2b1es
+m2bk
+m1b
+m2b1i2d
+m1bi
+m2bin
+m2b
+m2b1os
+m1bo
+m2b12
+m2b
+m2br
+m1b
+2m1e2b
+1me
+me2g1a2
+me2geg
+me1ge
+me2g1e2r
+me2ges2z
+me2g1k
+me1g
+me2gp
+meg3g2
+m1eg2y
+2m1e2l
+2m1ember
+mem1be
+2m1emel
+me1me
+2m1e2r
+me2s
+2m1e1se
+2m1es1te
+2m1g
+1m
+2mhs
+2m12l
+2m12nekb
+m1ne
+2m12ne1ke
+2m12ne1k
+2m12nekh
+2m12nek1k2
+2m12nekr
+m2ny1
+mn2y
+2m1p
+2m12r.
+2m1r1te
+2m1r1t
+ms3s
+m1gr
+mi2g
+1mi
+2m1i1g
+2m1in
+2m1i2p
+2m1i2ta
+2m1itt
+2m1izm
+2m1i2zo
+m12z
+1m
+mks2z1
+m1k
+m1kl
+m1kr
+mls3s
+m1l
+1mlt
+m1l
+m1o2k
+1mo
+m1o2l
+m1or
+m1os
+m12d
+1m
+m12r
+m1p2r
+m1sp
+m1st
+m1tr
+m1u2g
+1mu
+m1uj
+m1u2t
+2m1g
+1m
+2m1nn
+2m1v
+2m1z
+2m1z
+1m
+n1ab
+1na
+n1a2d
+n1a2g
+n1a2j
+n1a2k
+n1a2l
+n1am
+n1a2n
+n1a2p
+n1ar
+n1as
+n1at
+n1a2u
+n1a2v
+n1az
+n1b
+1n
+n1g
+n1l
+n1m
+n12p
+n12r
+n12t
+nt1a2d2.
+n2ta1d
+n1ta
+n1t1
+n1z
+nb2k2t.
+n1b
+nb1k
+n1bl
+n2c1l
+n1c
+n2c2h
+n2c
+n2c3sg
+nc2s
+n1c1s
+n2c2z
+n2dab
+n1da
+n2dap
+nde2m
+n1de
+n2d12r.
+n1d
+n2d1rn
+n2d1rr
+n2d1r1t
+n2d1or
+n1do
+n2d1
+n2d2z
+2n1eb
+1ne
+2n1e2d
+2n1ef
+2n1e2g
+2n1e2l
+2n1e2m
+ne2n
+1n1e1ne
+2n1e2r
+2n1es
+n1e2v
+n1ex
+n12g
+1n
+2n1j
+2n12k
+2n12l
+2n12p
+2n1rd
+n11ri
+n1rl
+n1r1te
+n1rv
+ns3s
+n1s2z
+2n11te
+2n1tt
+2n12v.
+2n12ves
+n1ve
+2n12vet
+2n12vr
+n1v
+2n12vt
+2n1vv
+nfe2lem
+n1fe
+nfe1le
+n1f2r
+n1g2l
+n1g2r
+ngy1as
+ng2y
+n1gya
+n2gyk
+n1gy
+ngy12r
+n1gy
+2n1gy
+n2gy
+2n1i2d
+1ni
+n1if
+ni2g
+2n1i1ga
+n1i1ge
+2n1i1g
+n1ill
+2n1im
+2n1in
+2n1i2p
+2n1i2r
+2n1is
+n1i1ta
+2n1i2z
+n1j
+1n
+2n1r
+2n1z
+n2k1ag
+n1ka
+n2k1an2y
+nk11ru
+n1k
+n2kt
+nk1olt
+n1ko
+n2k1
+n1k2
+nmeg1g2
+n1me
+nna2k2
+n1na
+n2n1
+nny1a2d
+n2n2y
+n1nya
+nny12r
+n1ny
+n2ny12r1a2d
+nny11ra
+nny1e2d2z
+n1nye
+n3ny
+n1o2d
+1no
+n1o2k
+n1op
+n1or
+n1os
+n1o2x
+n12c
+1n
+n12r
+n1v
+n1b
+1n
+2n1r
+2n12v
+n1r
+1n
+n2re
+n1z
+n1pl
+n1pr
+n1ps
+nsg2k
+n1s
+n3s1g
+n1s2p
+n1s2t2
+ns2z2
+n2t1ell
+n1te
+ntgen1n
+nt1ge
+nts3s
+n1t
+1ntz
+n1t2ra
+n1t2r
+n1t2r
+n1ud
+1nu
+n1un
+n1u2r
+n1u2s
+n1u2t
+n1j
+1n
+n12s
+n1t
+n1d
+1n
+2n12g
+2n1r
+2n12t
+2n1z
+2ny1a2
+n2y
+2ny1
+ny1d
+2ny1el
+1nye
+2ny1id
+1nyi
+2ny1in
+2ny
+2ny1o
+2nyz
+1ny
+ny2vaj
+ny1va
+ny2v1a2l
+ny2van
+ny2v12r
+ny1v
+ny2v1e2g
+ny1ve
+ny2v1er
+ny2v1es2z
+ny2vev
+ny2v1g
+ny1v
+ny2vl
+ny2v12r.
+ny2v1ill
+ny1vi
+ny2v1
+ny2v1o
+1o
+1
+1
+1
+p1aj
+1pa
+p1a2l
+p1l
+1p
+p1e2l
+1pe
+pe2ny2
+pen2y
+p1e2r
+2p1p
+1p
+p12l
+1p
+r1ab
+1ra
+r1a2c
+r1a2d
+r1a2g
+r1aj
+r1a2k
+r1a2l
+r1a2n
+r1a2r
+r1as
+r1a2t
+r1a2u
+r1a2x
+r1a2z
+r1b
+1r
+r12c
+r12g
+r12l
+r12r
+r12s
+r12t
+r1br
+rcs1l
+rc2s
+r1c1s
+rcs1ell
+r1c1se
+rcsks2z1
+rcs1k
+r2csos
+r1c1so
+2r1d
+r1d2r
+2r1d
+2r1e2c
+1re
+r1e2d2z
+2r1ef
+re2ga
+re2g1k
+re1g
+r1e2g2y
+re2j1
+re2k1e2s2z
+re1ke
+re1k2
+2r1e2l
+2r1em
+r1enc
+2r1e2p
+2r1e2r
+2re2s.
+2resb
+r1e2se
+2re1s
+2resn
+2resr
+2rest
+2r1e2te1t
+re1te
+2r1e2v
+2r1ex
+2r1ez
+2r12de
+1r
+2r12g
+2r12j.
+r1ks
+2r12l
+2r1ne1ke
+r1ne
+2r1p
+2r11r
+2r12ri
+2r1r1t
+r2sel
+r1se
+r2t1e2g
+r1te
+2r1tv
+2r12v2e.
+r1ve
+2r1vk
+r2f
+r2f1v
+r1f
+r2f1i2p
+r1fi
+r2fis
+r2f1os
+r1fo
+r2fr
+r1f
+r1g2r
+2r1i2d
+1ri
+ri2g
+2r1i1ga
+2r1i1g
+2r1i1g
+ri2k
+r1i1ko
+2r1ill
+2r1im
+2r1ind
+2r1inj
+2r1ink
+2r1int
+2r1inv
+2r1i2p
+2r1i1ra
+2r1i2s
+2r1i2ta
+r1itt
+2r1i1v
+r1i2zo
+2r1r
+1r
+2r12v
+2r12z
+r1k2l
+r2k1l1t
+r1k
+r1k2r
+rle2ta
+r1le
+r2l1in
+r1li
+rny1a2l
+rn2y
+r1nya
+rny1a2n
+rny1as
+rnye2l
+r1nye
+rny1e1le
+r2ny1er
+r2nyj
+r1ny
+r2nys
+rny12r
+r1ny
+r2ny
+r1ob
+1ro
+r1o2k
+r1o2l
+r1op
+r1o2r
+r1os
+r12r
+1r
+2rg
+1r
+r3g2e
+12rkl
+12r1m
+2r1nt
+2r1r
+2rs1s1ze
+rs2s2z
+2r1s2z
+rpe1t2
+r1pe
+r1s2p
+r1s2v
+rta2r
+r1ta
+rt2v1
+r1t
+r2t1ks
+r1t
+rt2l
+r2t11l
+r2t11l
+rt1r1ne
+rt2s2z
+r2t1ok
+r1to
+r2top
+r1ud
+1ru
+r1uj
+r1u2n
+r1u2r
+r1u2s
+r1u2t
+r1j
+1r
+r1r
+r12t
+2r1d
+1r
+2r12g
+r2l1k
+r1l
+2r1r
+2r1s
+2r1t
+2r12v
+2r1z
+1r2v.
+rva2s
+r1va
+1rvb
+1rvek
+r1ve
+1rvem
+1rvet
+1rvb
+r1v
+1rvh
+1rvv
+1rvh
+1rvn
+1rvr
+1rvt
+1r1v
+1r1v
+1rvv
+rz4s
+r2z1s12
+r2zs1e2l
+r1z1se
+r2zsid
+r1z1si
+r2zsin
+r2zsir
+r2z1s12
+r2z1s1o
+r2z1s
+r2z1su
+r2z1s
+s1a2g
+1sa
+s1al
+s1r
+1s
+ses3s
+1se
+2s1ez
+si12
+1si
+2s1i2p
+s1k2r
+s1o2l
+1so
+s1o2r
+s3s1za
+s2s2z
+1sszeg
+s1s1ze
+1sszes
+s3s1z
+s2t1arc
+s1ta
+2s12v
+1s
+2s1z1a2
+s2z
+sz1e2r
+1s1ze
+szi2s
+1s1zi
+s2z1is2z
+2s1z1o2
+2s1z1
+sz2t1ell
+sz1te
+t1ab
+1ta
+t1aj
+t1a2k
+t1a2l
+t1as
+t1a2t
+t1b
+1t
+t1g
+t1l
+t1r
+t12s
+t1e1k
+1te
+t1e2m
+t1ep
+t1es
+te2t1a2
+te2tel
+te1te
+te2u
+t1e2v
+te2z
+t1e1ze
+t1l2
+1t
+t2lk
+t2l1o
+1t1r1t
+t1rz
+ts3s
+t12ves
+t1ve
+t1fl
+t1fr
+t1gr
+t1i2r
+1ti
+t12v
+1t
+t1kr
+1tlet
+t1le
+tle2t1
+1t1l
+t1ol
+1to
+t1or
+t1os
+t12r
+1t
+2tdb
+1t
+12tdd
+12td1ne
+12tdt
+t1d
+12tdr
+12t1d
+2ts
+t1a2
+1t
+t1e2
+t12
+t1p2
+t1pr
+t1sc
+t1st
+t2t1a2c
+t1ta
+t2tar
+t2t1as
+t2t1l
+t1t
+tt2r
+tt1er1k2
+t1te
+tt1r1te
+t1t
+t2t1ut
+t1tu
+t1uj
+1tu
+t1un
+t1u2t
+t12l
+1t
+1u
+1
+1
+1
+v1ab
+1va
+v1ak
+v12r
+1v
+v1e2d2z
+1ve
+ve2g1a2
+veg1s
+ve1g
+veg1g2
+ve2go
+v1e2r
+ve2t1a2
+ve2teg
+ve1te
+ve2t12l
+ve1t
+ve2to
+ve2t1
+vet2l
+ve1t
+ve2t11l
+2v2.
+1v
+v1g
+v12j
+v2nye2l
+vn2y
+v1nye
+v2nyer
+v2ny2
+v2s1za
+vs2z
+v22s1z
+v2szer
+v1s1ze
+vs2zks2z1
+vsz1k2
+vsz1k
+v2s1zo
+v22s1z
+v2sz2l
+v1s1z
+vi2d
+1vi
+2vih
+vis3s
+2viv
+v1or
+1vo
+v12d
+1v
+v1lt
+1v
+vrs3s
+1v
+v1r
+v1ut
+1vu
+z1ab
+1za
+z1a2c
+z1a2d
+z1a2j
+z1a2k
+z1a2l
+z1a2m
+z1a2n
+z1a2p
+z1a2r
+z1at
+z1a2u
+z1az
+z12g
+1z
+z1l
+z12m
+z12p
+z12r
+z12t
+z1t1
+z1d2r
+2z1e2b
+1ze
+2z1e2d
+ze2gel
+ze1ge
+ze2g2s2z1
+ze1g
+2z1e2g2y
+2z1e1la
+ze2le1me
+ze1le
+2z1e2m
+z1eng
+z1ent
+2z1epr
+2z1er
+2z1es
+ze2t12k
+ze1t
+ze1t2
+ze2t1r
+2z1e2v
+2z1g
+1z
+2z12je
+z2k1e2l
+z1ke
+2z12le2l
+z1le
+2z12le2t.
+2z12l
+2z1lm
+2z1lt
+z2m
+2z11me
+z2p1a
+z22p1el
+z1pe
+z2p1em
+z2p
+2z1pt
+z2p1o2
+2z12r.
+2z1rb
+2z1r1d2
+2z1rh
+2z12ri
+zr2t1e2h
+zr1te
+2z1rte1le
+2z1r1t
+2z1rv
+2z1rz
+2z1tk
+z1fr
+zfunkci2in
+z1fu
+zfunk1ci
+zfunkci1
+zfunkci1i
+zi2g
+1zi
+2z1i1ga
+zigaz1
+2z1i1g
+2z1i1g
+2z1ig2y
+2z1i2ko
+2z1ikt
+2z1ill
+2z1i2m
+2z1inf
+2z1ing
+2z1inp
+2z1int
+2z1i2n
+2z1inv
+2z1i1ra
+2z1i1r
+2z1i2ri
+2z1i1ro
+2z1i1r
+z1is1ko
+2z1ism
+2z1isp
+2z1i2s2z
+2z1iz
+z1r
+1z
+z1z
+zjo2g1szt2
+z1jo
+zjo1g
+zjogs2z
+zmeg1g2
+z1me
+z1ob
+1zo
+z1o2k
+z1ol
+z1op
+z1os
+z1ov
+z12h
+1z
+z1n
+12znt
+1z
+2z12r
+2z1s2s2z
+2z1v
+2z1z
+z1a2
+1z
+ze2r
+z1e
+z12r.
+2z1rk
+z12r
+z1pl
+z1p2r
+1z3sa
+z2s
+1z3s
+1z3se
+1z3s
+z3s2k
+1z3so
+z3s2p
+z3st
+1z3s
+z3s2z
+z1t2r
+z1ug
+1zu
+z1u2n
+z1ur
+z1u2t
+z12r
+1z
+z1t
+2z1d
+1z
+2z12g
+2z1nn
+2z1t
+2z1v
+2z12z
+z3z2s
+2.
+1a
+a2da
+a2d
+ads1s
+ad2s2z
+a2do
+a2d
+a2du
+a2ga
+a2g
+a2gi
+a2g2y
+agyag1
+a1gya
+a2ja
+a2j
+a2ka
+a2k
+a2k
+a2la
+ala2g1
+a2l1e
+a2lo
+a2m
+a2na
+a2no
+a2n
+a2ny
+an2y
+a2pa
+2apar
+a2p
+a2po
+a2p
+a2pu
+a2ra
+a2r
+a2ri
+a2ro
+a2s2z
+a2to
+a2t2y
+a2ul
+a1u
+a2ur
+a2ut
+a2uti2k
+au1t
+aut1i
+a2va
+a2xi
+a2zo
+1
+2c2s
+2ga1i
+1ga
+2gak
+2gas
+2gat
+2g
+2g
+2gi
+2go
+2g
+2g2y
+2h
+2la
+2lo
+2m
+2po
+2ra
+2r
+2re2
+r1em
+2ri
+2ro
+2ru
+2r
+2sa
+2s
+2so
+2s
+2su
+2s2z
+2ta
+2t12
+2t1e2
+2t
+2t
+2t
+2v
+ba1p2
+1ba
+be2j12ratok
+1be
+be1j
+bej1ra
+bejra1to
+b2le
+b2lo
+b2ri
+b2ro
+b2r
+b2ru
+c1ap
+1ca
+c3c1so
+c2c2s
+c1gr
+1c3h
+c2h
+1c3h
+1c3h
+c2lu
+2cs1a1la
+c2s
+1c1sa
+csap2g
+csa1p
+csa2p11gya
+csapg2y
+2cs12j
+1c1s
+2cs12r
+cs1st
+1c1s
+cs1s
+c3s2z
+1d1a2da
+1da
+d1a2d
+2d1a2lap
+da1la
+2d1a1u
+d1l
+1d
+d12z
+de1a2
+1de
+2d1e2g
+d1eld
+d1elj
+d1elk
+d1e2l
+d1els
+2d1p
+1d
+2d1r1te
+2d1rz
+d2sa2
+d2so
+ds3s
+d2s3z
+2d1id
+1di
+di2g
+2d1i1ga
+2d1ind
+d1int
+2d1isk
+2d1op
+1do
+d1ost
+2d12l
+1d
+2d1ntskn
+dn1t
+dnt1s
+2d1v
+d12r.
+1d
+d12r
+d1rn
+d1rr
+d1rt
+2d1st
+d1pr
+d2ram
+d1ra
+d2rap
+1d2r
+1d2res
+d1re
+1d2rog
+d1ro
+1d2r
+1d2ru
+d1st
+d1t2r
+2d1g
+1d
+2d1z
+2d3z
+d2z
+1e
+e2ce
+e2c2s
+e2d
+e2d2z
+e2ge
+e2g
+e2g2y
+e2k2e.
+e1ke
+e2kk
+e1k
+e2la
+e2l12
+e2lek
+e1le
+e2le1m
+e2lemg
+e2lemh
+e2lemn
+e2lemr
+e2le1m
+e2les
+e2li
+e2lo
+e2l
+e2ld
+e1l
+e2l
+e2ma
+e2me
+e2m
+e2mu
+e2ne
+e2pi
+e2po
+e2re
+e2r
+e2r2d.
+e1r
+e2r1de
+e2rdn
+e2r1d
+e2r2.
+er1
+e2rh
+e2r2i.
+er1i
+e2r2k.
+e2r1ke
+e2r2m.
+e2r1me
+e2r2n.
+e2r1n
+e2rn2k.
+e2rn1ke
+e2rnkr
+e2r1r
+e2r
+e2s
+e2si
+e2s
+es2t12j
+1estj
+es1t
+es2t12k
+e2ta
+e2te
+e2ti
+e2un
+e1u
+e2v
+e2vi
+e2vo
+e2v
+e2ze
+1
+2de
+2et
+1e
+2ge
+2g
+2gi
+2g
+2hem
+1he
+2hes
+2ji
+2ke
+2k
+2k
+2l
+2l
+2l
+2nekb
+1ne
+2ne1ke
+ne2kest
+12nekes
+2ne1k
+2nek1k2
+2nekr
+2p
+2p
+2rem
+1re
+2re2n
+2rez
+2r
+2ri
+2tek
+1te
+2va
+2v2e.
+1ve
+2vek
+2ves
+2vet
+2vb
+1v
+2vn
+2vr
+2vt
+2vi
+fa2l1a2d
+1fa
+fa1la
+f2la
+f2le
+f2lo
+f2l
+f2l
+f2lu
+fo2kl
+1fo
+fo1k
+fo2kr
+fo1k
+fo2kin
+fo1ki
+f2ra
+f2r
+f2ri
+1f2ro
+f2r
+ga2z1
+1ga
+3g22p1e2l
+1g
+g1pe
+gp12szn
+g1p
+gps2z
+gp1s1z
+gp2l
+g1p
+g2p11l
+gs3s
+g2le
+g2l
+g2n
+2g12l
+1g
+g2ra
+g2r
+g2ri
+g2r
+gu1ba2
+1gu
+gy1a2la
+g2y
+1gya
+gy1art
+2gyeg
+1gye
+2gyel
+gy1e2l
+gy1elv
+gy1elz
+2gyin
+1gyi
+2gy1r
+1gy
+1i
+i2de1a
+i1de
+i2de1
+i2deg
+i2de1o
+i2dn
+i1d
+i2do
+i2d
+i2ga
+i2ge
+i2g
+i2g2y
+i2ko
+i2ma
+i2m
+i2mi
+i2nas
+i1na
+i2on
+i1o
+i2pa
+i2ra
+i2ri
+i2ro
+i2si
+i2s2z
+i2ta1la
+i1ta
+i2ta1l
+i2ta1l2
+i2ta1li
+i2tall
+i2va
+i2v
+i2v
+i2z
+i2zo
+1
+2g
+2ja
+2ra
+2r
+2ro
+2r
+2ru
+2v
+2ve
+2v
+2vi
+2vkb
+1v
+2v1ke
+2vn
+2v
+2ze
+2z
+2z
+je2gy12
+1je
+jeg2y
+job2b1ol
+1jo
+job1bo
+job2b1
+jo2g1ss
+jo1g
+jog12sza1i
+jogs2z
+jog1s1za
+jo2g12s1z
+jo2g12s1zi
+jo2g1sz1k2
+jo2g12szo1ka
+jog1s1zo
+jo2g12szokr
+jo2g12szon
+jo2g1szt2
+ke1k2
+1ke
+ke1p2
+kes2
+ke1sp
+ke1st
+k22p1el
+1k
+k1pe
+k2p1e2r
+k2s1el
+k1se
+ki12
+1ki
+ki1e2
+k2la
+k2le
+k2li
+k2l
+k2l
+k2lu
+k1ro2
+1k
+kpe2ny1e2g
+1k
+k1pe
+kpen2y
+kpe1nye
+kz1e2gb
+k1ze
+kze1g
+1k2ra
+1k2r
+1k2re1
+k1re
+k2red
+1k2r
+1k2ri
+1k2r
+1k2ro
+1k2r
+k2va
+le12
+1le
+ls3s
+1l
+l2l12
+l2r
+1l
+l1
+lt2
+l1tr
+ma2gr
+1ma
+ma1g
+mag1g
+ma2g12
+me2g1o
+1me
+m2h
+1m
+m1
+m2n
+mt2
+2n1e2ke
+1ne
+2n1ems
+n1ve2
+1n
+n2v1es
+2ny1a2d
+n2y
+1nya
+nya2g
+2ny1a1ga
+ny1a2la
+ny11ra
+1ny
+ny12ro
+2nyt
+2nyef
+1nye
+nye2lem
+nye1le
+2ny1elh
+2ny1ell
+2ny1e1lo
+2ny1em
+2ny1lv
+1ny
+2ny1
+2nyz
+1ny
+1o
+o2z
+o1
+o2be
+o2d
+o2k
+o2k1i2
+o2k
+o2ko
+o2la
+ol2a2j12r
+ola1j
+ola2je
+o2pe
+o2r
+o2ri
+o2ro
+o2so
+o2ve
+o2xi
+1
+2ce
+2ha
+2no
+2nu
+2ra
+2r
+2ri
+2va
+2v
+1
+2b
+2d
+2ko
+2k
+2l
+2l
+2na
+2re
+2r
+2ve
+2v
+2vi
+2v
+2z
+1
+2re
+2r
+2ri
+2r
+r2s1gb
+r1s
+r2s1gn
+2se
+2si
+prba2jo
+1p
+pr1ba
+p2la
+p2le
+p2l
+p2ne
+ponc1
+1po
+po2ral
+po1ra
+p2re
+1p2r
+prs1s
+1p2ri
+1p2rof
+p1ro
+1p2r
+p2s2z
+r1a2d
+1ra
+r1a2g
+r1agg
+r1ajk
+raj2t1l
+raj1t
+r1akc
+2r1a2l
+ra1l1e
+ra2n
+r1an2y
+r1ap
+2r1a2r
+2r1a2s
+2r1at
+2r1a2u
+2r1a2z
+12r1b
+1r
+r1g2y
+r2k1e
+2r12l
+2r12p
+2r12ru
+1r1b
+1r1bl
+1r1br
+2re1a
+1re
+re2li
+re1
+re1e2
+re2get
+re1ge
+r1e2gye
+reg2y
+rei2g
+re1i
+2r1ekc
+2r1ekh
+re2lem
+re1le
+r1elh
+2r1ell
+r1e2l1a
+re1l
+r1els
+r1elt
+2r1elv
+2r1emb
+r1eml
+ren2d12
+r1enz
+re1o2
+2r1e2s
+re1u2
+re12
+2r1ex
+12r1ezr
+12r12g.
+1r
+12r1gn
+12r1gt
+12r1kh
+r1k1n
+r1ks
+2r12l
+r12p
+2r12ri
+2r1r1t
+r2sa2
+r2s1za
+rs2z
+12r1
+2r12v2e.
+r1ve
+r12vek
+r1f2l
+1r1f
+r1fr
+r1g2r
+2r1i2d
+1ri
+2r1if
+2r1i2ga
+2r1i2g
+2r1i2g
+r1i1ha
+r1ill
+2rim
+r1i1mi
+r1i2na
+r1ind
+2r1inf
+2r1int
+r1i2pa
+ri2s1
+r1i1v
+12ri2z.
+12rizd
+12ri1ze
+12ri1z
+r1i2z2.
+2rizg
+12rizh
+12ri1zi
+r1izm
+2rizned
+riz1ne
+2riznem
+12riz1n
+12riz1ni
+12riz1n
+r1i2zo
+12rizt
+12ri1z
+12riz1v
+12riz2z.
+12riz1ze
+12riz1z
+r1r
+1r
+1r1j
+r1k2l
+r1k2r
+1r1l
+2r1ok1t2
+1ro
+r1old
+12r1o2li
+r1oll
+2r1or
+2r1os2z
+2r12r
+1r
+3rg
+1r
+12r1k
+2rl
+12r1m
+r1ng
+2r1r
+2r1s1s1ze
+rs2s2z
+12r1r
+1r
+2r12s
+1rsr
+2r12z
+r1pl
+r1p2r
+1r1p2s
+1r2s.
+r2s1g
+r1s
+r2s1l
+1r1s
+1r1s
+r1s2pe
+r1s1pi
+r1s1r
+rs3s
+r1s2z2
+r2s3zm
+r1s1z
+1r1t2r
+12r1un
+1ru
+12r1u2r
+r1u1t
+2r12j
+1r
+r1r
+2r1t
+2r1d
+1r
+r1ld
+12r1le
+2r1s
+2r1t
+2r1z
+2rz1s
+r1z
+2s1a2g
+1sa
+s1ajtb
+saj1t
+2s1ajtk
+sa2n
+s1a1na
+sa2p
+s1arc
+s1ass
+s1a2u
+2s1b
+1s
+2s12g
+s2l
+s1ll
+s11ra
+s1rv
+s1dr
+s1e2d
+1se
+2s1e2ge
+2s1e2g2y
+s1elm
+s1e2l
+s1elv
+2s1e2m
+se2n
+s1e1ne
+se2p
+s1e1pi
+s1e1po
+2s1e2rej
+se1re
+2s1e2r
+s1ess
+s1es2z
+s1etn
+2s1e2v
+2s1ez
+s2g1e2l
+1s
+s1ge
+2s12ger
+s2gs
+s1g
+2s1k
+2s12l
+s1p
+s1fl
+s1fr
+s1gn
+s1gr
+2s1i2d
+1si
+2s1if
+si2g
+2s1i1ga
+s1i2ma
+s1i2m
+s1i1mi
+2s1inf
+s1ing
+s1int
+2s1i2pa
+s1i2ra
+s1ist2
+s1i2s2z
+2s1i2z
+s12r
+1s
+s12z
+s2kl
+s1k
+s1kl
+s1k2r
+s1kv
+s2lat
+s1la
+s2lg
+s1l
+s2nit
+s1ni
+s1ob
+1so
+so2k
+s1o1ko
+2s1o2l
+2s1op
+2s1org
+2s1or1r
+2s1os
+s1c
+1s
+s11ri
+2s12l
+1s
+s1nz
+s2r
+2s1rd
+s11re
+s11r
+2s1rv
+2s12z
+s1r
+1s
+s12s
+s2pec
+s1pe
+s2pek
+s1pl
+s2pr
+s1p
+sp2r
+s2rc
+s1r
+s1sk
+s1s2p
+s1s2t
+s2s2z2
+s3s1za
+s3s1z
+s3szeg
+s1s1ze
+s3szek
+s3szell
+s3szem
+s3szen
+s3szer
+s3szes
+s3szk
+s1s1z
+s3szn
+s3szf
+s3s1zi
+s3s1z
+s3szl
+s3s1zo
+s3s1z
+s3s1z
+s3s1z
+s3s1zu
+s3s1z
+s2tad
+s1ta
+s2tat
+1s2tt
+s1t
+1s2te1ri
+s1te
+s2tg
+s1t
+s2til
+s1ti
+st2r
+s1t1re
+s1un
+1su
+su2t
+s1u1ta
+2s12r.
+1s
+s12s
+2s12rs1g
+1s
+s1r
+sr1s
+sza2k1cc
+s2z
+1s1za
+sza1k
+sza2k1e
+sza2k12
+sz1e2l
+1s1ze
+2szer1k2
+2s2ze2r
+sz1est
+sz1ill
+1s1zi
+sz1ist2
+sz2l
+1s1z
+sz11l
+sz11l
+sz1lt
+s3z1se
+sz2s
+s3z1si
+szt2
+2s3z1r
+1s1z
+ta2n1cs1be
+1ta
+ta1n
+tanc2s
+tarta2m1t
+tar1ta
+tarta1m
+ter1mo1
+1te
+tes2t12
+tol2l1a2d
+1to
+tol1la
+1t2ra
+1t2r
+1t2ri
+t2ro
+1t2r
+ttes3s
+t1te
+t2ts
+t1t
+tt1int
+t1ti
+t2t1o2
+t2t1u2
+t1f2
+1t
+tfl1
+1u
+u2go
+u2ni
+u2ra
+u2r
+u2ru
+u2ta
+u2t
+u2tu
+1
+2jo
+2r
+2ri
+2ro
+2s2z
+2t
+2ti
+2to
+1
+2d
+2ge
+2g2y
+2le
+2re
+2r
+2s2z
+2te
+2t
+2ti
+2t
+2t
+2ve
+2v
+2ze
+2z
+1
+2r
+2ri
+2r
+2z
+2z
+vas1f2
+1va
+vasfl1
+vr1a2l
+1v
+v1ra
+ve2r1a
+1ve
+2vet
+v2res
+1v
+v1re
+v2ret
+v2z1el
+1v
+v1ze
+2z1abs
+1za
+2z1a2d
+z1a2g
+2z1ak
+2z1a2l
+2z1a2t
+2z1a2u
+2z1l
+1z
+z12t1e2
+z1bl
+zeg1g
+1ze
+ze2g1i
+12zekn
+z1e1lo
+z1els
+z1elv
+2zem
+z1emb
+z1e2mel
+ze1me
+2z1e2r
+ze2t1a2
+ze2t1eg
+ze1te
+ze2t1el
+ze2ter
+ze2t1o
+2z12r.
+1z
+z2rem
+z1re
+2z12ri
+2z1rl
+z1r1t
+12zi1
+1zi
+2zi2g
+z1i1g
+2z1in
+2z1iz
+z1k2r
+z1o2k
+1zo
+z1ol
+z1os
+2z1s2s2z
+1z
+z1a2
+1z
+ze2l
+z1e
+ze2r
+z1p2r
+z3saj
+z2s
+1z1sa
+z3sap
+z3st
+1z1s
+z3sik
+1z1si
+z3sis
+z3s2t
+2z3s
+z3s2z
+z1t2r
+z1t
+1z
+z1g
+1z
+2z1s
+2z12z
+z12z
+1z
+2p.
+1pa
+2p1abl
+pa2cem
+pa1ce
+pa2c2h
+pa1cl
+pa2c1s
+pac2s
+p1a2dag
+pa1da
+pad1a1la
+pa2d1as
+pa2d12l
+pa1d
+pa1de2
+pa2d1el
+pa2d1em
+p2a2d1id
+pa1di
+pa2d1i1ga
+p1a2dott
+pa1do
+pa2d2u.
+pa1du
+pa2dut
+pa2dl
+pa1d
+pae2r
+pa1e
+pa2p
+pa1
+pa2r
+pa1fl
+pa1f2r
+pa2g2a.
+pa1ga
+pai2d
+pa1i
+2p1aj1t
+pa2kad
+pa1ka
+paka2r1
+pa2k1e2m
+pa1ke
+pa2k12r.
+pa1k
+2pak1ku
+pa1k1lu
+pa2k12
+p2a1k2r
+2p1akt2a.
+pak1ta
+pak2tal
+pak2t1e2l
+pak1te
+pak2t1es
+pak2t1e2v
+2p1ak1ti
+pak2t1o2r.
+pak1to
+pak2t1orr
+pak2tos
+2palag
+pa1la
+pala2g1
+pa2la1p
+palza2d
+pa1l
+pal1za
+pal2z1a1d
+pa2l12l
+pa1l
+2p1alf
+2p1alg
+2p1al1le
+2p1al1m
+pal1ud
+pa1lu
+pam1ass
+p2amas
+pa1ma
+pa2m1ur
+pa1mu
+pamu2ta
+p2ana2d
+pa1na
+pa2n1ag
+pa2nal
+pan1a1la
+pa2n12r
+pa1n
+pans1s
+pan1d2
+pang1g
+pa2n1il
+pa1ni
+p1an2n2y
+pa2nol
+pa1no
+pans2
+pans2z2
+pan1sz1t2
+pa2n
+2p1a2nya
+pan2y
+p1a2nyu
+pa2p1ad
+1pa1pa
+1pa2p1a2pa
+p2apap
+papa2r
+pap1a1ra
+pa2p1aszt
+papas2z
+pap1ll
+pa1p
+pa2p1il
+pa1pi
+pa2p1i2n2a.
+papi1na
+pa2p1i2p
+pa2p1o2ku
+pa1po
+pa2p
+pap1p2
+pa2p1ur
+pa1pu
+pa2p1u2t
+pa2p
+2par2a.
+pa1ra
+para2je
+p2araj
+par1a2la
+2pa2r1a2r
+pa2r11g
+pa1r
+pa2r1gn
+pa2r11go
+pa2r1gv
+2parh
+2p1a2rj
+par1ll
+2parr
+2parv
+2parb
+2p1ar2c.
+2p1ar1ca
+2p1arcc
+2p1arc2h
+2par1ci
+2p1ar1co
+2p1arct
+2p1ar1cu
+2p1ar1c
+pa2r1el
+pa1re
+pa2r12l
+pa1r
+2parig
+pa1ri
+2paril
+pa2r1ill
+par1isk
+par2k1a2l
+par1ka
+par2k1
+par2kel
+par1ke
+par2k1in
+par1ki
+parkols1s
+par1ko
+parko1l
+par2k
+par2kn
+par1k
+par2k12v
+par2k12
+par2k1
+2paro2s.
+pa1ro
+2paro1si
+2paro1so
+pa2r
+pa2r
+2parr
+pars2
+par2tem
+par1te
+par2t1ol
+par1to
+par2t12
+pa2r12
+pa2r
+par1v2
+past2
+pa2sz1alj
+pas2z
+pa1s1za
+pasz1alt
+pa2szas
+pat1a1da
+pa1ta
+pata1k2
+p2atak
+pa2t1al1k2
+pat1a1nya
+p2atan
+patan2y
+pa2t1a1ra
+p2atar
+pat1lc
+p2atl
+pa1t
+pa2t1r1k2
+p2atr
+pa2t1e2g
+pa1te
+pa2t1ell
+pat1emb
+pate2s
+p2a2tl
+pa1t
+pa2t12r.
+p2atr
+pa2t1rd
+pa2t11re
+pa2t1r1te
+pa2tid
+pa1ti
+pa2t1int
+p2atin
+p2a2tir
+2p1atk2a.
+pat1ka
+2p1atknk
+pat1k
+pa2t1old
+pa1to
+pa2t1olt
+2p1a2tom1be
+patom1b2
+pa2t1os2z
+pa2t1otth
+pa2t1ut
+pa1tu
+pa2ts
+pa1t
+pa1t2
+p2a2t1z
+2p1a2tya
+pat2y
+2p1a2ty
+2paur
+pa1u
+pau2ra
+p1a2vat
+pa1va
+pa1wh
+2p1a2xi
+1p
+2p12b
+2p1br
+2p1ca
+2p1c
+p2c1e
+p1c2
+p2c3h
+p2c3s
+pc2s
+p2c1s
+p2c1s
+2p12g.
+2p12ga
+2p1gg
+2p1g2y.
+pg2y
+2p12gy2a.
+p1gya
+2p12gyac
+2p12gyad
+p2gyaib
+pgya1i
+p2gyaid
+2p12gyaih
+p2gyaik
+p2gyaim
+2p12gyain
+p2gyair
+p12gyakb
+p2gya1k
+p2gya1ki
+2p1gyak1n
+2p12gya1ko
+2p12gyakr
+p2gyakt
+2p12gyal
+2p12gyam
+2p12gyan
+p2gyast2
+2p1gyaz
+2p12gyb
+p1gy
+2p12gy12l
+2p12gyn
+p2gy1t
+2p12gyv
+2p1gyb
+2p1gyc
+2p12gy1e2
+2p12gy
+2p1gyf
+2p1gy1ga
+2p1gy1go
+2p1gyh
+2p12gyi
+2p1gyj
+2p1gyk
+2p1gyl
+2p1gym
+2p1gy1n
+2p12gyos
+p1gyo
+2p12gy
+2p1gyp
+2p1gyr
+2p1gys
+2p1gyt
+2p12gyu
+p2gy
+2p12gy12
+2p1gyv
+2p1gyz
+2p1jt
+p1la2
+p2lab
+p2lac
+2p1lar
+2p1l1do
+p2le
+p1ll2a.
+pl1la
+2pllap
+2p1l1l
+2p1llom
+pl1lo
+2p1llv
+2pl1mo
+p2l
+p2l2y
+plya1s
+p1lya
+2p1mi
+2p12m
+p2mu
+p1na2
+p2n1am
+p2n1an
+p2nar
+p2n1as
+p2nr
+p1n
+p2n1e2
+p2nk
+p1n
+p2nil
+p1ni
+p2nir
+p2nis
+p2n
+pn1k1r
+2pnkt
+p2n12
+p2n
+p2n
+pn1s2z
+pn1te2
+pn2tek
+pn2t1el
+p2n
+p2ny1ad
+pn2y
+p1nya
+p2ny1a2l
+p2ny1a2n
+p2nyar
+p2nyat
+p2nya1u
+p2nyaz
+p2ny1e2
+p2nyr1d2
+p1ny
+p2nyim
+p1nyi
+p2ny
+2p12po
+pr1a1d
+p1ra
+2pras
+2pr1
+p1r
+pr2d1a2
+pr2del
+pr1de
+p2r1e2
+p2r1i2p
+p1ri
+p2r
+pr1s2
+pr2t1ag
+pr1ta
+2prtal
+prt1an2y
+pr2ta1ri
+pr2tl
+pr1t
+pr1te2
+pr2t1el
+pr2tem
+pr2te2s
+pr2tet
+pr2tl
+pr1t
+pr2t12r.
+pr2t12te
+pr2tiz
+pr1ti
+pr2tol1da
+pr1to
+pr2tott
+pr1t2
+pr2tk
+pr2t1
+pr2tus
+pr1tu
+pr1t2
+pr2t1z
+p2ruh
+p1ru
+p2ruk
+p2ru2t
+pr1u1tu
+p2rn
+p1r
+p2r
+2p12ss
+p1s
+p2s1e
+p2sir
+p1si
+p2s
+ps3s
+p2s12
+2p1svn
+ps1v
+p2t1a2
+p2t
+p2tel
+p1te
+p2t1e2m
+2ptfal1va
+pt1fa
+2ptfalvh
+ptfal1v
+2ptfalvn
+2ptfalvr
+2ptfalvt
+2ptfal1vi
+p2tis
+p1ti
+2p1tk2a.
+pt1ka
+2p1tkt
+pt1k
+2p1tkv
+p1tlag
+pt1la
+2p1t1l
+p2t1or
+p1to
+2p1trak
+pt1ra
+2p1t3t2
+pt1rt
+p1t
+p2t
+2p1tvt
+pt1v
+pba2l1
+p1ba
+pb2r1e2l
+p1b
+pb1re
+pb2lo
+pb2ra
+pb2ri
+pb2ro
+pci21fo
+p1ci
+pci1
+pci2sor
+pci1so
+pcsa2p12g
+pc2s
+p1c1sa
+pcsa1p
+pcs2s1orr
+p1c1s
+pcs1so
+pda2l1ad
+p1da
+pda1la
+pdal1an
+pda2leg
+pda1le
+pda2le2l
+pd2a2l1es
+pd2a2ln
+pda1l
+pda2l12
+pd2ra
+pd2r
+pd2ro
+pd2r
+1pe
+pea2p
+pe1a
+pea2r
+pe1ca1
+pec3c
+pe2c2h
+pe1c3he
+2peci1a
+pe1ci
+pe2c2z
+2p1eff
+pe1fl
+2p1e2ge1se
+pe1ge
+pe2gs2z1
+pe1g
+pe1g2r
+2p1egz
+2p1e2k2e.
+pe1ke
+2p1e2ke1i
+pe1k2r
+pe2ll
+pe1l
+pe2lr
+pe2lekt
+pe1le
+2pelemb
+2p1e2lemek
+pele1me
+pe2lemet
+2p1e2le1m
+2p1e2lemg
+2p1e2lemh
+2p1e2le1mi
+2p1e2lemk
+2p1e2lemm
+2p1e2lemn
+2pelemr
+2p1e2lemz
+pel1e1r
+pele2t
+pel1e1te
+2p1el1go
+2p1el1ha
+2p1elhel
+pel1he
+2pel1j
+2p1elleb
+pel1le
+2p1elnev
+pel1ne
+2p1eln2y
+pe2l1os
+pe1lo
+2p1e2l
+2p1e2l1a
+pe1l
+2p1e2l1
+2p1e2l1e
+pe2lg
+2p1e2lh
+pe2l1
+2p1e2l1j
+2p1e2ljeg
+pel1je
+2p1e2ll
+2p1e2lz
+2p1elren
+pel1re
+2p1el1s
+2p1el1t
+2p1eltet2t.
+pel1te
+2p1eltettel
+peltet1te
+2p1el1to
+2pe1lu
+2p1el2v.
+2p1el1v
+pel2v1el
+pel1ve
+2p1elven
+2p1elvh
+2p1el1vi
+2p1el1vo
+2p1el1v
+3pel2y
+2p1elz
+2p1ember
+pem1be
+2p1e2mel
+pe1me
+2p1e2ms
+pe1m
+2p1eml
+2p1ems
+2p1e2mu
+2p1e2ner
+pe1ne
+2penged
+pen1ge
+pen3n2y.
+pen2n2y
+pen3nyb
+penny1r
+pen1ny
+pen3nyh
+pen3nyj
+pen3nyk
+pen3nym
+pen3nyn
+pen3nyr
+pen3nyt
+pen3nyv
+pe2nya
+pen2y
+pe1ny2
+pe2ny1e2l
+pe1nye
+pe2ny1e2r
+peo2l
+pe1o
+peo2p
+pe2r
+pe1
+pe2p2e.
+pe1pe
+2p1e2p
+pe1p2r
+per1all
+pe1ra
+pera1p2
+perc1c
+per2c1el
+per1ce
+2p1er1d
+perec1c
+pe1re
+per1e1gye
+pereg2y
+peregyez1
+2p1e2rej
+pe2r1elk
+pe2r1e2lf
+pere1l
+pe2r1e2l1k
+pere2mrt
+pere1m
+per1e1v
+2per1fa
+pe2rid
+pe1ri
+peri2k
+pe2r1i1ko
+pe2r1il
+pe2r1i2na
+pe2r1i2n
+pe2r1ind
+pe2r1ing
+pe2r
+per1k2
+permarke2t1in
+per1ma
+permar1ke
+permarke1ti
+3p2ernycsk
+pern2y
+per1ny
+pernyc2s
+2p1ernys
+3p2ernytl
+per1ok1t2
+pe1ro
+pe2r1os
+pe2r1o2x
+pe2r12r
+pe1r
+pe2rd
+pe1r
+pe2rf
+pe2r1i
+pe2rm
+pe2rn
+pe2rr
+2p1e2rs
+pe2rt
+pe2rv
+per1st
+pers2z2
+pe2r
+pe2r12g
+pe1r
+per2l
+per11l
+per1lt
+pe2s1ebbel
+pe1se
+peseb1be
+pe2s1eb1b
+pes1ern
+pe2ssi2g
+pe1s
+pes1si
+2p1e2s1s
+pe2s1i
+pe1s
+pe1s2p
+2p1esszv
+pes2s2z
+pes1s1z
+pes2t1a2
+pes2t1er
+pes1te
+pe2szak
+pes2z
+pe1s1za
+pe2sz1l
+pe1s1z
+pesz1ell
+pe1s1ze
+pe2sz1elv
+pesze2m
+pe2sze1me
+pe2s1zu
+pe2sz12l
+pe1s1z
+pe2tal
+pe1ta
+pe2t1a2n
+pe1t2
+petet2
+pe1te
+2pe1te1te
+2pete1t
+2p1e2te1t
+2p1e2ti1ka
+pe1ti
+2petim
+2p1e2to
+pet2ti
+pe2td
+pe1t
+pe2v
+2p1ezr
+1p
+p2c1su
+pc2s
+p1d2
+p2d11l
+2pb
+p1
+2p1i
+2pn
+2p12ge
+2p12g
+pgs3s
+2p12hen
+p1he
+2p12hes
+2p12het
+2p1hs
+2p12j.
+p1je2
+p2j1eg
+2p12ji
+2p1jj
+p2k1as
+p1ka
+p2k1a1u
+p2k12
+p2k1er
+p1ke
+p2k1k
+p1k
+p2k12l
+pk2t
+p2k11te
+p2k1i2n
+p1ki
+p2kis
+2p12l.
+2p1lb
+p2l2e.
+p1le
+p2le1i
+p2lek
+ple2l
+p1l1e1le
+pl1elme1i
+plel1me
+p2le2n
+p2let
+2p12l
+2plm
+2p1ln
+2p12l
+2p1lt
+2p12l
+2p1lv
+2p12ne2k1a2
+p1ne
+2p12nekb
+2p12nekd
+2p12ne1k
+2p12nekf
+2p12nekg
+2p12ne1ki
+2p12ne1k
+2p12nekj
+2p12nek1k2
+2p12nekn
+2p12nekr
+2p12nek1t2
+2p12ne1k
+p2ny1el
+pn2y
+p1nye
+pn2z1a2
+pn2z12
+pn2z2s
+p2p1er
+p1pe
+p2p1i2p
+p1pi
+2p12p
+2p1p
+2p1rc
+2p1rd
+2p12r
+2p1rh
+p2ri2g
+p1ri
+2p12rin
+2p1rm
+2p1rn
+2p12r2.
+p1r
+2p1rr
+2p1r1te
+2p1r1t
+2p1r1t
+2p1rv
+2p1rz
+p2s1aj
+p1sa
+p2sal
+p2s1e2l
+p1se
+p2ss
+p1s
+psks2z1
+ps1k
+p2so
+ps3s1za
+ps2s2z2
+p2s12t
+p1s
+p2s1za
+ps2z
+p2s3zaj
+psz1ak
+ps3zav
+p22s1z12
+p2sz1emb
+p1s1ze
+2p12sz1n
+p1s1z
+p2szin
+p1s1zi
+p2s1z1o
+p22s1z1
+psz3s
+p2s1zu
+p2s1z
+p2s1z1
+p1ta1
+p2tel
+p1te
+2p1tk
+2ptl
+p1t1la
+2p1tr
+2p1tv
+2p12v.
+2p1vb
+2p12v2e.
+p1ve
+2p12ve1i
+2p12vek
+p2ven
+p2ves
+2p12vet
+2p1vf
+2p1vh
+p1vk
+2p1vn
+2p1vr
+2p1vs
+2p1vt
+2p1vv
+p2zak
+p1za
+p2z1r
+p1z
+p2zel
+p1ze
+p2z1e2m
+p1zi2
+p2zi2d
+p2zin
+p2ziz
+p2zol
+p1zo
+p2z1sa
+pz2s
+p2zu
+p2f1p
+p1f
+pfi21
+p1fi
+pfi1
+pfi2kr
+pfi1k
+pf2lo
+pf2l
+pf2lu
+pfgys2z1
+p1f
+pf1
+pf2g2y
+pf2gys
+pf1gy
+pf2r
+p1f2re
+p1f2ri
+p1f2r
+p1f2ro
+pf2ru
+pf1st
+pg2ra
+pg2ru
+pg2r
+pha2de
+p1ha
+p2ha1i
+1p2hans2z
+pha1n
+phely2k
+p1he
+phel2y
+phe1ly
+1p2heu1s1zi
+phe1u
+pheus2z
+1p2hi1a2
+p1hi
+p2hic
+1p2hi1la
+1p2ho1i
+p1ho
+ph2i
+p1h
+1pi
+pi2a1a
+pi1a
+pi2a1
+pi2a1ba
+pia2ce2l
+pia1ce
+pia2cl
+pia1c
+pia2cik
+pia1ci
+pia2c3se
+piac2s
+pi2ad
+pi2a1e
+pi2a1
+pi2ag
+pi2ah
+pi2aj
+pi2ak2n.
+pia1k
+pi2al
+pi2am
+pi2a1o
+pi2a1
+pi2ap
+pi2a1r
+pi2a1s1za
+pias2z
+pi2at
+pia2u
+pi2a1
+pi2a1
+pi2a1ve
+pi2az
+2picc
+2picl
+pi1da2
+pi2dan
+pi2de1a
+pi1de
+pi2de1
+pi2de1i
+pi2den
+pi2de1o
+2p1i2dom
+pi1do
+2p1i2d
+2p1i2du
+pi2g
+pi1
+pi1fr
+2p1i2ga
+2p1i2ge
+2p1i2g
+2pi1go
+2p1ihl
+pi2k1
+pilis3s
+pi1li
+2pilles
+pil1le
+2p1illet
+2pills
+pil1l
+2p1il1lu
+2p1i2l2y
+2p1i2m
+2p1i2mi
+2p1imm
+pinak2
+pi1na
+pina1p
+2pind
+2p1inf
+pin2gas
+pin1ga
+pin2g1r
+pin1g
+pin2gelj
+pin1ge
+pin2gp
+pin1g
+pin2gos
+pin1go
+2p1in1g
+2pinj
+2p1inp
+pin2tc
+pin1t
+pin2t1or
+pin1to
+pintks2z1
+pin1t
+pint2ks
+pint1k
+pin2tr
+pin1t
+pin1tu2
+pin2tur
+pi2n
+2p1inv
+2p1inz
+pion1n
+pi1o
+pi21a
+pi1
+pi21
+pi21e
+pi2f
+pi2g
+pi21ki
+pi2l
+pi21ma
+pi21m
+pi21o
+pi2p
+2pipa1i
+pi1pa
+2p1i2pa2r.
+2p1i2pa1r
+2p1i2parb
+2p1i2pa1r
+2p1i2parh
+2p1i2parig
+pipa1ri
+2p1i2parn
+2pipa1ro
+2p1i2parr
+2p1i2par1ta
+2p1i2par1te
+2p1i2par1t
+2p1i2pa1ru
+2p1i2rat
+pi1ra
+2p1irh
+2p1i2rod
+pi1ro
+pisa1u2
+pi1sa
+2pis1ko
+pi2s1op
+pi1so
+2p1is1te
+2p1i1s1za
+pis2z
+piszkos1s
+pisz1ko
+pi2t1aj
+pi1ta
+pi2ta1la
+pi2tall
+pi2t1a2n
+pi2t12p
+pi1t
+pitos1s
+pi1to
+pi2t12
+pi2vs
+pi1v
+2p1i2z
+1p
+p2g
+p2j
+p2n
+p2r1a2
+p2r
+pr1l
+pr12r
+2p1rs
+p2r1e2
+p2r1in
+p1ri
+p2r1i2s
+p2r
+p2ro2l
+p1ro
+2p12r
+p2r12
+pr1s
+prt2
+pr1tr
+p2r
+p2r
+2p12tl
+p1t
+2ptm
+pt1a2
+p1t
+pte2l
+pt1e
+p2ve
+p2ze
+p2z
+p2z
+p2z
+pke1p2
+p1ke
+pke1s2
+pks1s
+p1k
+pki1a2
+p1ki
+pki12
+pki1e2
+pk2la
+pk2li
+pk2l
+pk2lu
+pk2r
+pk2re
+pk2r
+pk2ri
+pk2ro
+pk2r
+pk2va
+pk2v
+p2lacc
+p1la
+pla1k2l
+pl2a2pal
+pla1pa
+plap1ll
+pla1p
+pla2p1os2z
+pla1po
+p2latf
+1p2lnj2n.
+p1l
+pln1j
+ple12
+p1le
+ple2t1a2n
+ple1ta
+ple2t1e2l
+ple1te
+plet2t1ebben
+plet1te
+pletteb1be
+pl12
+p1l
+pl2has
+pl1ha
+pli2s3z
+p1li
+plis2z
+plo2m1e
+p1lo
+plo2mn
+plo1m
+plo2m1ol
+plo1mo
+plt2
+p1l
+pl1tr
+plg2p1e2kh
+p1l
+pl1g
+plg1pe
+plgpe1k
+pl2sa
+pl1s1t
+pl2szr
+pls2z2
+pl1s1z
+plu2m1e
+p1lu
+p2lur
+pms1s
+p1m
+pme2ge
+p1me
+pmeg1g2
+pme2g1o
+1po
+po2be
+po1c1si2
+poc2s
+po2cs1iz
+pogs1s
+po1g
+po1g1ra
+po1ki2
+2p1o2k1ir
+po2k
+2p1ok1le
+2p1okm
+poko2la2
+po1ko
+pokol1l
+2p1ok1ta
+2p1ok1t
+pols1s
+po1l
+polc3c
+pol2c3s
+2p1ol1da
+pol12
+po1l
+2poltr
+pol1t
+2p1olts
+2p1ol1ti
+2p1ol1t
+2p1olvas
+pol1va
+po2n1a
+pon2c3so
+ponc2s
+po2ne2l
+po1ne
+pon2g1e2
+po1ni2
+po2niz
+pon3n
+po2n1os2z
+po1no
+pon2t1a2d2
+pon1ta
+pon2tag
+pon2t1a2l
+pont1an2y
+pon2tl
+pon1t
+pon2tr
+pon1te2
+pon2t1el
+pon2tem
+pon2ten
+pon2te2s
+pon2t12r.
+pon1t
+pon2t11te
+pon2ti2s2z
+pon1ti
+pon2t
+pon2t12
+2ponz
+po2ol
+po1o
+po2p1a2
+po2p12
+2popc
+2po2pe
+pop1el
+po1pi2
+po2pik
+po2p1in
+po2pir
+po2pis
+p2o2p1o2l
+po1po
+pop1p2
+pop1s
+pops2z2
+2pop1t2
+po2p
+po2p
+po2r1a2c
+po1ra
+po2r1ag
+po2rakk
+por1a1la
+por1all
+po2ram
+pora2n
+por1an2y
+po2r1a2r
+po2rat
+por12c2s
+po1r
+po2r1l
+por2can
+por1ca
+por2c3h
+por2c3s
+porc2s
+po2re2s
+po1re
+por1f2
+por1g2
+po2rid
+po1ri
+2p1o2ri1e
+po2rih
+po2r1il
+po2r1i2m
+po2rin
+por1k2
+po2r
+po2r
+por2tamb
+por1ta
+por2t1a2u
+por2t12r
+por1t
+por2trb
+por2trn
+por2tej
+por1te
+por2t1em
+por2tet
+por2tl
+por1t
+por2t12r.
+por2t1rk
+por2t1i2k
+por1ti
+por2tiz
+por2tur
+por1tu
+por2t1us2z
+por2tr
+por1t
+por2t
+po2r
+2p1or1vo
+pos3s1zo
+pos2s2z
+pos3s1z
+2postol
+pos1to
+2p1ost2y
+po2s
+po2s1ze
+pos2z
+po2s1z2
+2p1oszl
+posz2t
+po2tab
+po1ta
+po2tad
+po2t1a2l
+po2tan
+po2t1a2u
+po2t1e2l
+po1te
+po2t1inf
+po1ti
+po2t1ip
+po2t12
+po2tol
+po1to
+po2t
+po2tus
+po1tu
+po2t
+po2vi
+1p
+p2ce
+p1fr
+pi2g
+p1i
+p2k1ass
+p1ka
+p2ka1u
+p2k1e2l
+p1ke
+p22kem
+p2ke2t
+p2k1id
+p1ki
+p22kim
+pki2s
+p2k1is2z
+p22kiv
+p2k1s
+p1k
+p2k1
+p2l1
+p2lom
+p1lo
+2p12n2.
+p1n
+p1p2r
+p12rad
+p1ra
+pr12s2z
+p1r
+p1re2
+p2reg
+p2rem
+p12ri1
+p1ri
+p2r
+p2s1or
+p1so
+ps3s
+p2s12v
+p1s
+p1ta2
+p2t1ad
+p2tal
+p22t1an
+p2til
+p1ti
+p1t2
+p2tl
+2pn
+p1
+2p12v
+p2ze
+p2z3s
+pz2s
+1p
+p2ka
+p2ke2l
+p1ke
+p2ker
+p2ki2d
+p1ki
+p12ko
+p2ku
+p2k
+p2lye
+pl2y
+2pnt
+p2ra
+p1r1d
+p2res
+p1re
+3prg
+p2ro
+p2r1
+p2r
+2p1ss
+p1tl
+ptty1in
+pt2t2y
+pt1tyi
+2p1tv
+p2ve
+1p
+pa2n
+p1a
+p2g
+p1
+p1bl
+p1d1ro
+pe2r
+p1e
+p2h
+p1
+p2l
+p1kl
+p1pl
+p1p2r
+2p12r.
+p2r2i.
+p1ri
+p1rj
+p1rl
+2p1rn
+p1rs
+2p1rt
+p12r
+2p1rz
+p1s2z
+pp1a1da
+p1pa
+ppa1i2
+ppa2j
+pp1a1j
+pp1akk
+pp2a2na2d
+ppa1na
+ppa2n1ell
+ppa1ne
+ppan1k2
+pp1an2y
+pp1arc
+ppark1fe3
+pparkfel2
+pparkfe2l3
+ppa1s
+pp1ll
+p1p
+p2p1rj
+p2p12rok
+pp1ro
+pp1tm
+p2p12to
+pp1tv
+p2p1e2g2y
+p1pe
+p2p1e2kh
+ppe1k
+p2p1e1lo
+p2p1elr
+ppe2r1a
+ppe2r
+p2p1g
+p1p
+p2p1ks
+pp2h
+ppin2g1e2
+p1pi
+pp1g
+p1p
+pp1kl
+pp2las
+pp1la
+pp2lat
+pp1o2l2y
+p1po
+p2p1o2rom
+ppo1ro
+ppor2t12r
+ppor1t
+ppor2t1e2
+pportks2z1
+pport1k
+ppor2t12
+p2p12l
+p1p
+pp11r
+pp1n
+p1p
+pp1v
+pp12z
+p1p2ref
+pp1re
+p1p2rem
+p1p2rez
+p1p2rm
+pp1r
+pp2rin
+pp1ri
+pp2ri1o
+p1p2roc
+pp1ro
+p1p2rod
+p1p2rof
+p1p2rog
+p1p2roj
+p1p2ros
+p1p2rot
+pp2rb
+pp1r
+pp1sp
+p2p1g
+p1p
+p2p12r.
+pp1v2
+ppvz1
+1p2rax
+p1ra
+p2re1mi
+p1re
+1p2re1pa
+pressz2b
+pres2s2z
+pressz2h
+pressz2k2
+pressz2n
+pressz2r
+pressz2t2
+2pret
+pre1t2
+1p2r1di
+p1r
+p2rn
+p2rp
+pr2sa2
+pr22s3z
+prs2z
+p2ric2c2s
+p1ri
+p2ri1u
+p2rizm
+pr2m1e2l
+p1r
+pr1me
+pr2mem
+1p2robl
+p1ro
+1p2ro1ce
+p2rof
+1pro1fe
+p2roj
+1pro1je
+pro2mo
+p2ro1pa
+1p2ro1te
+1p2ro1t
+1p2ro1to
+1p2ro1vo
+1p2r1b
+p1r
+pr2d1e
+pr2d2z
+1p2r1za
+pru2s1g
+p1ru
+pru1s
+pru2se
+1p2rs
+p1r
+p2s1a2d
+p1sa
+ps2gel
+p1s
+ps1ge
+p2s1i2ha
+p1si
+ps12ze
+p1s
+p1s2k
+p1s2mi
+p2s1n
+p1s
+p2s12z
+p1s
+p1s2pe
+ps2pi
+p1s2po
+ps1pr
+ps2r
+ps3s1z
+ps2s2z
+p1s2t
+ps2ti
+p1s2t
+ps2to
+p1st2r
+ps2tu
+p1s2t
+psza2k12
+ps2z
+p1s1za
+psz1an2y
+p2sz1as
+psz1atl
+p2sz1g
+p1s1z
+p2s3zp
+p2szg
+p1s1z
+psz2f
+1p2szic
+p1s1zi
+p2sz1ill
+pszis3s2
+psz1k2
+psz1old
+p1s1zo
+p2sz1orn
+p2sz1n
+p1s1z
+p2sz1s
+psz3s
+pta2d
+p1ta
+pt1a1da
+pta2n12s
+pta1n
+pta2ne
+pt2raj
+p1t
+pt1ra
+pt1r2
+pt2rr
+p2t1eg
+p1te
+p2t1e2k2e.
+pte1ke
+p2t1e2l
+p2t1els2
+pte2rl
+pte1r
+pt2k
+p1t
+pt2k1el
+pt1ke
+p2t1rd
+pt1i2m2a.
+p1ti
+pti1ma
+p2t1i2n
+p2t1i2o
+p2t1i2r
+p2t12r
+p1t
+pt1kl
+pto1g
+p1to
+p2t1t
+p1t
+p1t2rag
+pt1ra
+p1t2ran
+p1t2r
+pt2r
+ptu2s1ze
+p1tu
+ptus2z
+ptu2s1zi2
+p2t1rr
+p1t
+p2t1t
+p1t
+1pu
+pua2d
+pu1a
+pu2csor
+puc2s
+pu1c1so
+pue2l
+pu1e
+2p1ugr
+2pu1k
+pul2tas
+pul1ta
+2p1u2ni
+2pu1no
+2p1u2n
+puo2r
+pu1o
+pu1p2r
+pu2rak
+pu1ra
+pu2ral
+pu2sad
+pu1sa
+pu2sal
+pusa2n
+pus1an2y
+pu2sap
+pu2sl
+pu1s
+pu2s1tl
+pu2s1e2
+pu2s1r1t
+pu1s
+pu2sik
+pu1si
+pu2sis
+pu2s
+pu2sol
+pu1so
+pu2s
+pu2s
+puss2
+pus2s2z2
+pust2
+pu2s
+pu2szag
+pus2z
+pu1s1za
+pu2szal
+pu2s3z2r.
+pu1s1z
+pusz12p
+pu1s1z
+pu2s1z
+pu2tab
+pu1ta
+pu2t1a2d
+pu2tak
+puta2n
+2p1u2taz
+put1ing
+pu1ti
+pu2tol
+pu1to
+pu2td
+pu1t
+2p1u2t1p2
+pu1t1r
+1p
+2p1rf
+p2s2z
+2p1tb
+p2t
+2p12ti
+2p1tj
+2p1tk
+2p1tn
+2p12to
+2p1tp
+2p1tr
+2p1tt
+2p1tv
+1p
+p2ge
+p2g2y
+p2k
+2p1le
+ple2t1o2
+2p1nn
+p2re
+2p12r
+2p1st
+2p12te
+p2t
+2p1tk
+2p12t
+p2ve
+p2ze
+1p
+p2z
+pv2r1a2l
+p1v
+pv1ra
+pv2zel
+p1v
+pv1ze
+pvonala2d
+p1vo
+pvo1na
+pvona1la
+pvona2l1a1da
+pw2hi
+pwhis1ky2
+py2ba
+py2b
+py2do
+py2ho
+py2ja
+py2j
+py2ka
+py2k
+py2ki
+py2ko
+py2ma
+py2na
+py2n
+py2ra
+py2r
+py2t
+py2va
+py2v
+pze2t1a2
+p1ze
+pze2t12
+pze2t1e2r
+pze1te
+pz1a2
+p1z
+pz1e2
+pz12
+2q.
+1qa
+1q
+1qe
+1q
+1qi
+1q
+1qo
+1q
+1q
+1q
+1qu
+qu2at
+qu1a
+qu2ez
+qu1e
+que2zi
+qu2b
+qu1
+qu2i1e
+qu1i
+qu2ij
+qu2in
+1q
+1q
+1q
+2r.
+1ra
+raa2d
+ra1a
+rat1a2d2.
+ra1
+ra2ta
+ra2ta1d
+ra2bad
+ra1ba
+rab1as2z
+1rab12ra
+ra1b
+rab1rb
+rab1rr
+ra2b1t
+r2a2b1e1le
+ra1be
+ra2b1ell
+ra2br1te
+r2abr
+ra1b
+rabrt2
+ra2bid
+ra1bi
+rabi2g
+ra2b1i1ga
+ra2b1i1g
+ra2b1im
+ra2b1i2n2a.
+rabi1na
+ra2b1i2n
+ra2bind
+ra2b1int
+2rab1la
+r2a1b1ri
+ra2buj
+ra1bu
+ra2c1aj
+ra1ca
+rac3c1sa
+rac2c2s
+ra2cet
+ra1ce
+ra2c1ha
+rac2h
+rac3hig
+ra1c1hi
+ra2c3hok
+ra1c1ho
+ra2c3hos
+ra2c3hot
+rac2kar
+rac1ka
+rac2kit
+rac1ki
+rac2k12
+rac2k
+ra2dag
+ra1da
+r1a2da1l
+rad2a2rad
+r2adar
+rada1ra
+2rada1t
+rads1s
+ra1d
+r2a3d
+2radc
+2radm
+2r1a2dottaih
+ra1do
+radot1ta
+radotta1i
+2r1a2dottakb2a.
+radottak1ba
+2r1a2dottja1i
+radott1ja
+3r2a3ds2i.
+ra1d
+rad1si
+2r1a2dz
+r2a1d1r
+ra1d1ru
+2r1a2d2u.
+ra1du
+ra2dus
+rae2r
+ra1e
+ra2derb
+ra1
+ra1de
+ra2de1re
+ra2derh
+ra2dern
+ra2derr
+ra2dert
+ra2r
+rafikus1s
+ra1fi
+rafi1ku
+2r1a2g2a.
+ra1ga
+ra2gak
+rag1a1lo
+r2agal
+ra2g12c
+ra1g
+ra2g1
+2r1a2gn
+rag2de
+rag1di2
+rag2din
+ra2ge2l
+ra1ge
+ra2g1i2n2a.
+ra1gi
+ragi1na
+2r1ag2y.
+rag2y
+ra2gyat
+ra1gya
+2r1agyn
+ra2gyon
+ra1gyo
+2r1agyr
+rai2o
+ra1i
+ra2j1a2d
+ra1ja
+ra2j1a1u
+ra2j12ru
+r2ajr
+ra1j
+ra2j1es
+ra1je
+ra2jin
+ra1ji
+2rajk1r
+raj1k
+2r1aj1k
+rajob2
+ra1jo
+raj2t1e2l
+raj1te
+raj2t1en
+raj2zat
+raj1za
+raj2z1e
+raj2z3s
+2r1a2ka1ra
+ra1ka
+rakci2sor
+rak1ci
+rakci1
+rakci1so
+rak2kp
+rak1k
+rak2kis
+rak1ki
+ra1k2li
+ra1k1lo
+ra1k1l
+ra1k1lu
+2r1aknb
+rak1n
+2r1akn1i
+r1a2kz
+ra1k
+r2ak2re
+r2a1k2r
+ra1k2ri
+2r1ak1ro
+r1aktvb
+rak1t
+raktus1s
+rak1tu
+2r1a2kus
+ra1ku
+r2alab
+ra1la
+2r1a2la2g1
+2r1a2la1ku
+ra2la1pa
+r1a2la1p
+ra2l1z
+ra1l
+ra2l1z
+2r1alb
+2r1alja2i.
+ral1ja
+ralja1i
+2r1al1ji
+2ralk
+ralla2k
+ral1la
+ral2l1a1k
+ral2l1at
+ral1l2
+ral2ll
+ral2lev
+ral1le
+ralo2m1e
+ra1lo
+ra2mab
+ra1ma
+2rama1i
+rama2l
+ram1ll
+ra1m
+ra2m12r
+ra2m1rb
+ra2m12re2
+ra2m1rh
+ra2m1rn
+ra2m1rr
+ram1b2
+ra2m11he
+ra1m
+ram1i1de
+ra1mi
+ram1i2ko
+ram1ill
+ra2m1im
+ram1i1na
+ram1inf
+ram1ing
+ram1inj
+ra2m1i2p
+2rammj
+ra2m1os2z
+r2amos
+ra1mo
+ra2m12r
+ra1m
+ra2m
+ra2m
+ra2m
+2r1a2nal
+ra1na
+2r1a2nat
+rans1s
+ra1n
+ranciaks2z1
+ran1ci
+ranci1a
+ranci2aks
+rancia1k
+ran2csal
+ranc2s
+ran1c1sa
+ran2cs1g
+ran1c1s
+ran2c1se
+ran2csik
+ran1c1si
+ran2c1s2
+rancs3z
+2ran2d.
+ran2dat
+ran1da
+ran2d1a1u
+2randj
+ran2d2z
+ra2nek
+ra1ne
+ran2g1a2
+ran2g1
+ran2g1e2
+ran2g12
+ran2gye2
+rang2y
+ra2nil
+ra1ni
+ra2nim
+2ran1ka
+ran2szl
+rans2z
+ran1s1z
+ran2s1ze
+ransz1om1b2
+ran1s1zo
+2ran2y.
+ran2y
+ra2nyag
+ra1nya
+rany1a2la
+ra2ny1a2n
+ra2nyap
+ra2ny1ar
+r1a2nyit
+ra1ny
+rany1i
+r1a2ny1ka2
+r1a2nykh
+r1a2nykk
+ra2ny1l
+ra2nys
+r1any2s.
+2ranyb
+ra2ny1e2s
+r2a1nye
+2ra1ny
+ra2nyl
+2ranyh
+ra2nyid
+r2a1nyi
+ra2nyin
+ra2nyir
+rany12r
+r2a1ny
+2ranyk
+2ranyn
+ra2ny1ol
+r2a1nyo
+2ra2ny
+rany12r
+ra2ny
+2ranyr
+2rany1s
+2ranyt2
+r2a2ny12
+2ran2z1a
+ra21a
+ra1
+ra21
+ra2f
+ra21l
+ra2m
+ra2p
+ra2s2z
+2rap2a.
+ra1pa
+ra2pk
+ra1p
+2rapp
+rap2pin
+rap1pi
+ra1p2re
+ra1p1r
+ra1p2ri
+r2a1p2ro
+2r1a2rann
+1ra1ra
+2r1a2ran2y.
+raran2y
+2r1a2rany2a.
+rara1nya
+2r1a2ra1ny
+2r1a2ranyb
+2r1a2ranyn
+2r1a2ranyr
+2r1a2ranyt2
+ra2rat
+2r1ar1co
+ra2rn
+ra1r
+2r1art
+2r1arz
+r2a1s2k
+ra1s2l
+ra1s2pe
+ra1s2po
+ras1s1z1e2
+ras2s2z
+2r1asszoc
+ras1s1zo
+rast2
+r2a1s2ta
+r2a1s1t
+r2a1str
+ra2sz1abl
+r2aszab
+ras2z
+ra1s1za
+ra2sz1aj
+ra2szas
+ra2szat
+ra2szg
+ra1s1z
+ras2z1rn2y
+ra2sz1rr
+rasz1emb
+ra1s1ze
+ra2sz1tt
+r2aszt
+ra1s1z
+ra2szb
+ra1s1z
+ra2sz1i
+ra2szn
+ra2szs
+ra1s1z
+rasz2t1a2n2y
+rasz1ta
+rasz2t1el
+rasz1te
+rasz2t12te
+rasz1t
+rasz2t
+rasz2t
+ra2t1a2d
+ra1ta
+rat1ajt
+rat1a2la
+rat1alt
+rat1a1r
+r2atar
+2r1a2td
+ra1t
+rat1ll
+r2atl
+ra2t1rad
+r2atr
+1rat1ra
+ra2t12ra1i
+ra2t12rak
+ra2t1rb
+ra2t1rv
+rat1t1a2
+rat2vi
+r2atv
+ra2t1e2g
+ra1te
+ra2t1elk
+ra2t1ell
+ra2t1emb
+2r2atg
+ra1t
+rat11ge
+ra2t1rd
+r2atr
+rat1r1ke
+ra2tr1te
+ra2t1rv
+rat1ing
+r2atin
+ra1ti
+r2a2t1r
+ra1t
+ra2t11ve
+2r1at1k
+2rat1l
+ra1t2ran
+rat1ra
+2r1attr
+ratraks2z1
+ra1t
+rat1ra
+ratr2aks
+ratra1k
+ra2tr
+ra1t
+2rat2y
+ra2tya
+ra2ty
+ra2tyu
+ra2u1di
+ra1u
+2r1a2uk
+ra2u1l
+2raum
+rau2n
+rau2ta
+r2a3u2t
+ra2u1to
+r1a2ut12
+rau1t
+ra2t
+ra1
+ra2z
+2r1a2va1t
+ra1va
+2ra1v
+ra2x
+ra1ye
+ra1y
+raz1ajt
+ra1za
+raza2n
+ra2z1an2y
+ra2zel
+ra1ze
+ra2z1olt
+r2azol
+ra1zo
+ra2zo1no
+1r
+r1b1re
+r2cal
+r1ca
+r2c3h
+r2c1i2n
+r1ci
+rci2f
+rci1
+r2c
+r2csa1la
+rc2s
+r1c1sa
+r2c3sg
+r1c1s
+r2cst
+r1c1s
+r2csir
+r1c1si
+r2cs1is
+r2c
+r2c
+r2d1an2y
+r1da
+2rdh
+r1d
+r2g1ad
+r1ga
+2r12gam
+2r12gaz
+rg12z
+r1g
+r2gi1a
+r1gi
+r2gil
+r2gim
+r2gis
+2r1g
+r2g1os2z
+r1go
+rgus4
+r1gu
+r2g
+2r1gya
+rg2y
+2rgyb
+r1gy
+2rgy1
+2rgyh
+2rgy1i
+2rgyj
+2rgyk
+2rgyn
+2rgyr
+2rgys
+2rgyt
+2rgyv
+r2gyu
+r2r
+r1
+rj2k1a2
+rj2kel
+rj1ke
+rj2k12
+r2j
+r2kt
+r1k
+r2k1ered
+r1ke
+rke1re
+r2k1e2s
+r1k1la
+2rkog
+r1ko
+r2k1os2z
+r2k1n
+r1k
+r2k12r
+1r1k1r
+r1krt
+rk1r
+r2l1ak
+r1la
+r22l1a2l
+r2la1na
+2r1lar
+rla2t1e
+r2ll
+r1l
+rl1tl
+r1l1c
+2r1l1d
+r2li2d
+r1li
+r2lim
+r2l
+2r1llamok
+rl1la
+rlla1mo
+2r1llap
+2r1llat
+2r1l1l
+2r1llom
+rl1lo
+2r1l1ma
+2r1l1tatot1ta
+rl1ta
+rlta1to
+r2l
+r2lyal
+rl2y
+r1lya
+r2ly1a2n
+r2lya1p
+r2ly1as
+r2lyav
+r2lys
+r1ly
+r2lyt
+r2ly
+r2m
+r2nal
+r1na
+r2n1a2n
+r2n1a2t
+r2n1r
+r1n
+r2ns
+rnc1c
+r2nk
+r1n
+rn2gl
+rn1g
+r2niz
+r1ni
+r2n
+rn1kl
+r2not
+r1no
+r2n12
+rn2sav
+rn1sa
+rns3s
+rn2t1ak
+rn1ta
+r2n
+r2nya1da
+rn2y
+r1nya
+r2nyag
+rny1alt
+r2ny1a2n
+r2ny1ap
+r2nyar
+r2nyaz
+r2nyrm
+r1ny
+r2nyrz
+r2ny12r
+r1ny
+r2nyol
+r1nyo
+r2ny
+r1p2l
+2r1po
+r2pol
+r1p2r
+2r12rad
+r1ra
+rr1a2d
+2r12ra1i
+2r12ram
+2r12ras
+2r12rat
+r2raz
+r2rb
+1r1r
+r2rh
+r2r1l
+r2rr
+r2rt
+r2rv
+r2r1em
+r1re
+r2rr
+r1r
+2r1rh
+r2ria1i
+r1ri
+rri1a
+2r12ri1
+2r1rj
+2r1rl
+2r1rn
+r2r1ol
+r1ro
+r1r1t
+2r1ru
+r2rul
+r2run
+2r1r
+r2r2.
+r2rt
+r2rv
+r2s1a2d
+r1sa
+r2s1akn
+r2sal
+rsa2r
+1rs1a1r
+r2s1as
+2r12sa1t
+r2s1a2to
+r2saz
+rs12ga
+r1s
+r2s12rad
+rs1ra
+r2s1rak
+1r2s12r
+r2s12r
+r2ss
+r2ser
+r1se
+r2sis
+r1si
+r2s1ol
+r1so
+2r12s2.
+r1s
+2r12sb
+2r12s1
+2r12sg
+2r12sh
+2r12s1i
+2r12sj
+2r12sk
+2r12sn
+rs12ra
+r2sr
+2r1s1r
+2r12ss
+2r12st
+2r12sv
+r2s
+rs3s1zi
+rs2s2z2
+rst2
+rs1tr
+r2su2t
+r1su
+r2sza2n
+rs2z
+r1s1za
+r2sza2s
+r2sz12ru
+r1s1z
+r2sziv
+r1s1zi
+rs3zn
+r1s1z
+r2tad
+r1ta
+rt1a2da
+rt1a1la
+r12t1l
+r1t
+r2t2g
+r1t
+r2t12l
+2rt2p
+rt2t1e2lem
+rt1te
+rtte1le
+r2t
+2r1t1l
+rtus1s
+r1tu
+r1t2
+r2tr
+2r1t
+r2t1l
+r2zal
+r1za
+rzi2s2z
+r1zi
+r2zsal
+rz2s
+r1z1sa
+r1z4s
+r2z1s1e2
+r1z1s2
+r2zsn
+2r12zsi2a
+r1z1si
+r2zsis
+r2z1s
+r2z1s12
+rba2j1e
+r1ba
+rba2jokt
+rba1jo
+rbty2t
+r1b
+rbt2y
+rb1ty
+rb2ty11to
+rbe1e2
+r1be
+r2b1ell
+rbes2zdks2z1
+rbes2z
+rbe1s1z
+rbeszd1k
+r1b2la
+r1b2lo
+rb2l
+rboc1c
+r1bo
+r2b1ol1da
+rbo2n1a2
+r1b2ra
+r1b2r
+rb2ri
+rb2ro
+r1b2r
+rb2ru
+rbu2t1e
+r1bu
+rc1a1d
+r1ca
+rc1ajt
+rca2lak
+rca1la
+r2c1alk
+r2c1a1na
+rc1a1nya
+rcan2y
+rca1p2
+rc1a1ra
+rc1a1r
+rc1ass
+rc1a2to
+r2c1g
+r1c
+r2c12l
+rc12r.
+r2c11ri
+r2c1rn
+r2c12ro
+r2c1rr
+r2c1rt
+r2c12ru
+rc3c1si
+rc2c2s
+rc3c1s
+rc3c1so
+rc3c1s
+rc3c1s
+rce2g1a2
+r1ce
+rceg1g
+rc1eg2y
+rc1e2leg
+rce1le
+rc1elk
+rc1e2ld
+rce1l
+r2c1els
+r2c1ember
+rcem1be
+r2c1e1pe
+rc1e2ve
+r2c1ex
+r2c1ez
+rc12kt
+r1c
+rc1k
+r2c11le
+r2c12l
+r2c12li
+r2c1lm
+r2c12l
+r2c1p
+r2c12r.
+r2c1rb
+r2c12ri
+r2c1rr
+rc1s2z
+rc1fr
+rc1gr
+r2chan
+rc2h
+r1c1ha
+r2c3has
+rc3hel
+r1c1he
+r2chen
+r2chig
+r1c1hi
+r2chom
+r1c1ho
+r1c3hu
+r2c3h
+r2c3h
+rci2d
+r1ci
+r2c1i1de
+r2c1i2ko
+r2c1ikr
+rc1ill
+r2ci1m
+r2c1i1mi
+rc1i2n2a.
+rci1na
+rci2nb
+rci1n
+rci2n1
+rc1i2nr
+r2c1i2nt
+r2c1in1d2
+r2c1ing
+rc1i2o1ni
+rci1o
+r2c1i2pa
+r2c1i1si
+r2c1isk
+r2c1ist
+rc1izm
+rc1i2zo
+r2c1j
+r1c
+r2c1v
+r1c2k2.
+rc1k
+r1c2kh
+r1c2k1i
+r1c2kt
+r1c2k2i.
+rc1ki
+r1c2ki1a
+r1c2kig
+r1c2kok
+rc1ko
+rc1k2r
+rc1kv
+r1c2lu
+r2c1op
+r1co
+r2c1o2r
+r2c1os2z
+rc1n
+r1c
+rc12r
+rc1v
+r2c1b
+r1c
+r2c1n
+r2c1r
+r2c1s
+rc1r
+r1c
+rc1pl
+rc1pr
+r2cs1abl
+rc2s
+r1c1sa
+rcs1alak
+rcsa1la
+rcsa2p12g
+rcsa1p
+r2c3sa1ra
+r2csarl
+r2c3sp
+r1c1s
+r2c3s2r.
+rcs11ru
+r2c3sej
+r1c1se
+r2csele1me
+rcse1le
+r2c2s1elr
+r2c2s1rb
+r1c1s
+r2csikr
+r1c1si
+rcs1rs
+r1c1s
+rcs1r
+rc3s2k
+r2c3so1ra
+r1c1so
+r2c3so1ro
+rcsna2k12
+r1c1s
+rcs1na
+rcs12s.
+r1c1s
+rcs1p
+rc3s2pi
+rcs1s
+rc3s1to
+rc3s2z
+rc1tr
+r2c1ud
+r1cu
+r2c1ur
+r2c1ut
+r2c1j
+r1c
+rc1g
+r1c
+r2c1r
+r2c1s
+r2c1t
+rc1v
+rc1z
+rc1z
+r1c
+r1c3z
+rc2z
+r1c3ze
+r1c3z
+rc3z2s
+r1c3zu
+r1c3z
+rda2cl
+r1da
+rda1c
+rd1a2dat
+rda1da
+r2d1akc
+rda2l12
+rd1al1ka
+rd1al1ko
+r2d1a2nya
+rdan2y
+rda1p2
+rd1a2rn
+rda1r
+r2d1arc
+rd1aszt2
+rdas2z
+r2d1a1zo
+rd1c2s.
+r1d
+rdc2s
+rd12rak
+rd1ra
+rd12rat
+rd12ron
+rd1ro
+r2d1rv
+rds1s
+rd1bl
+rd3d2z
+r2d1e2g
+r1de
+rde2k1a2
+rde2ker
+rde1ke
+rde2kk
+rde1k
+rde2kol
+rde1ko
+rde2k12
+r2d1e1la
+r2d1e2rej2.
+rde1re
+rdere1j
+r2d1e2rej1v
+rde2st
+rde1s
+rd1exp
+rdez2p3
+rde1z
+r2d12g
+r1d
+rd12l
+rd1lr
+rd1lt
+rd12l
+r2d1p
+r2d12r.
+r2d1r1d2
+r2d12ri
+rd2sa2
+rd2s1za
+rds2z
+r2d12v
+rd1fr
+r2d1i2d
+r1di
+r2d1i2ga
+r2d1i1g
+r2d1i1ma
+r2d1i2n2a.
+rdi1na
+r2d1i2na1i
+r2d1i2n2t.
+rdi1n
+r2d1ing
+rdio2x
+rdi1o
+rd1i1zo
+r2d1g
+r1d
+r2d1z
+rd1kl
+r2d1ok1ta
+r1do
+r2d1old
+rd1orr
+r2d1os2z
+r2d1o1u
+rd1a2
+r1d
+rd12r
+rd2g1l
+r1d
+rd1g
+r2d1l
+r2d1s
+rd1v
+rd2s1orr
+r1d
+rd1so
+rd1pr
+r1d2ram
+rd1ra
+rd2rap
+r1d2raz
+rd2rog
+rd1ro
+r1d2rt
+rd1r
+rd1sk
+rd1sp
+rd1st
+rdsza2k1
+rds2z
+rd1s1za
+rd1t2r
+rd1udv
+r1du
+r2d1u1r
+rd1g
+r1d
+r2d1t
+r2d3za
+rd2z
+r2d3z
+r1d3zo
+r1d3z
+r2d3z
+r1d3z1s
+rdz2s
+r1d3z
+1re
+rea2d
+re1a
+rea2j
+rea2ka
+rea2la
+rea2r
+2re1l
+re1
+2re1l
+2r1e2b.
+2r1eb1b
+reb1eg2y
+re1be
+2r1e2bd
+re1b
+2r1ebh
+2r1ebk
+re1b1lo
+2r1ebm
+2r1ebn
+2r1ebs
+2r1ebv
+re2caj
+re1ca
+re2cal
+re2c
+2r1e2cets
+re1ce
+re2c2h
+rec3sar
+rec2s
+re1c1sa
+2r1e2cset
+re1c1se
+rec3sor
+re1c1so
+re2c2z
+re2dan
+re1da
+red1elv
+re1de
+2redend
+re2d1e2r
+2rede1ti
+2rede1t
+redkks2z1
+re1d
+redk1k
+2r1e2dn2y
+re2d12ves
+red1ve
+re2dir
+re1di
+re2dor
+re1do
+2r1edzb
+red2z
+re1d1z
+2r1e2dzj
+2r1e2dzk
+2r1e2dzr
+2r1e2dzt
+2r1e2dzv
+2reff
+re2gas
+re1ga
+reg1ll
+re1g
+re2gr
+reg1e2le
+re1ge
+reg1elh
+reg1ell
+re2g1elr
+reg1elv
+reg1eng
+reg1e2te1t
+rege1te
+reg1e2v
+regny1e2kb
+re1g
+reg2n2y
+reg1nye
+regnye1k
+reg2pe2lem
+re3g2pel
+reg1pe
+regpe1le
+re2gs2z1
+re2gid
+re1gi
+reg1inj
+re2giz
+re2gc
+re1g
+reg2v
+re2g
+reg2l
+re1g
+re2g11l
+2r1eg2y.
+reg2y
+2r1egyb
+re2gy2e.
+re1gye
+re2gyed
+re2gyen
+re2gyet
+2r1e2gy
+2r1egyh2z.
+regy1h
+2r1egyh1za
+2r1egyhzb
+regyh1z
+2r1egyhz1
+2r1egyhzh
+2r1egyhz1i
+2r1egyhzn
+2r1egyhzr
+2r1egyhzt
+2r1egyhzv
+2r1egyhz2i.
+regyh1zi
+2r1egyhzi1a
+2r1egyhzib
+2r1egyhzi1
+2r1egyhzig
+2r1egyhzik
+2r1egyhzin
+2r1egyhzir
+2r1egyhzit
+2r1egyhziv
+regyhzkz1
+regyhz1k
+2r1egyk
+2r1egyl
+2r1egyn
+2r1egyr
+2r1egys
+2r1egyt
+re2gyn
+re1gy
+r1egyv
+rei2r
+re1i
+re2ja
+2rej1
+re1j
+2rejk1b
+re1j
+2rejkk
+2rejkn
+2rejkr
+2reje2k.
+re1j
+rej1e
+2rejn
+2rej2t.
+re2k1ag
+re1ka
+re2k1a1r
+re2k1as2z
+re2k12l
+re1k
+re2k12p
+re2ks
+rek1elh
+re1ke
+rek1elt
+rek1e1l
+rek1erd
+re2k1e2r
+reke2s1z1
+rekes2z
+2r1e2kh
+re1k
+rek1
+2r1e2kt
+re2kj
+re2kk
+2r1ek2k.
+rek1kh
+re2kl
+2r1e2knk
+re2k12r.
+re2k1rd
+re2k1r1te
+2r1e2k2s.
+re2k1ss
+re2k1id
+re1ki
+re2kij
+re2kil
+re2k1ing
+re2k1int
+re2k1ip
+re2kr
+re1k
+rek1k2
+re1k1lu
+re2k1ok
+re1ko
+re2k1old
+rek1opt
+re2k1os
+rek1ott
+re2kr
+re1k
+re2k2k
+re1k
+re2ktl
+re2k
+rek1s
+reks2z2
+re2k1u2s
+re1ku
+re2kd
+re1k
+re2k1g
+rek2l
+re2k11l
+re2k11l
+re2k2t
+2r1e2l1a2d
+re1la
+2r1e2lg
+re1l
+2r1elb
+2r1elc
+2r1el1do
+2r1e2lef
+re1le
+2r1elektr
+rele2ma
+2r1e2lem2e.
+rele1me
+2r1e2lemed
+rele2meg
+2r1e2leme1i
+2r1e2lemek
+2r1e2leme2m.
+2r1e2le1me1me
+2r1e2lememm
+2r1e2lemen
+rele2m1er
+2r1e2leme2s.
+2r1e2leme1se
+2r1e2lemesn
+2r1e2lemet
+re2leme1z
+rele2m12r.
+rele1m
+2r1e2lemtel
+relem1te
+2r1e2lemk
+rele1m
+2r1e2lemnk
+2r1e2lem1z
+2r1e2lem1z
+2r1e2l1eng
+2relr
+re1l
+2r1elf
+2r1el1ha
+2r1el1h
+2r1elhel
+rel1he
+2r1el1h
+2r1el1j
+2r1el1k
+rel2l1a2
+2r1el1l
+2r1el1l
+2r1el1ma
+2r1elm11
+rel1m
+relm1
+2r1elmh
+2r1elm2i.
+relm1i
+2r1elml
+2r1elm1te
+2r1elnev
+rel1ne
+2r1el1n
+2r1eln2y
+2r1e2l1os
+re1lo
+2r1e2lad
+re1l
+rel1a
+2r1e2lde1i
+rel1de
+2r1e2ld1ke
+rel1d
+2r1e2ldkn
+2r1e2ldkr
+2r1e2ld2t.
+rel1e2
+2r1e2lnn
+2r1el1nye
+reln2y
+2r1e2lzm
+2r1el1so
+2r1el1s1z
+rels2z
+2r1el1ta
+rel2tr
+rel1t
+2r1eltv
+2r1eltet2t.
+rel1te
+2r1eltettk
+2r1elt1r
+rel1t
+2r1eltv
+2re1l
+2r1e2l1l
+re1l
+2re1l
+2r1el2v.
+2r1el1v
+3r2elvlaszt1u
+relv1la
+relvlas2z
+relvlasz1t
+2r1elvb
+2relved
+rel1ve
+2relve1i
+r1elve2i.
+r1elveiben
+relvei1be
+r1elveih
+r1elvei1ke
+r1elveim
+r1elvei1ne
+r1elvein2k.
+r1elvein1ke
+r1elveir
+r1elvei2t.
+r1elveiv
+2relvek
+r1elve2k.
+r1elvekben
+relvek1be
+r1elveket
+relve1ke
+r1elve1k
+r1elvekh
+r1elvekk
+r1elvekn
+1r1elvek1re
+2relvem
+r1elve2m.
+r1elve1me
+r1elvemm
+2r1elven
+2r1elves
+2r1elv2.
+rel1v
+2r1elv1ne
+2r1elvr
+2r1elv1
+2r1elvv
+2r1elvh
+2r1el1vi
+2r1elvk
+2r1elvn
+2r1el1vo
+2r1elvr
+2r1elvs
+2r1elvt
+2r1el1v
+2r1el1v
+2r1elvv
+2r1elz
+re2m1a2d
+re1ma
+re2m1as2z
+re2maz
+re2m12l
+re1m
+re2mt
+2rembar
+rem1ba
+2r1ember2e.
+rem1be
+1rembe1re
+2r1embered
+2r1embere1i
+2r1emberes
+2r1ember3s2
+2r1embe1r
+rem1b1le
+r1em1b
+2rembr
+re2mel
+re1me
+rem1e2lem
+reme1le
+2r1eme1l
+2r1emelg
+r1e2melk
+rem1eld
+reme1l
+rem1els
+re2m1eng
+re2m1es2z
+re2m12r.
+re1m
+re2m1rm
+re2m12te
+re2m1r
+re1m
+re2m
+re2m12r
+re1m
+rem1p2
+2r1e2muk
+re1mu
+2r1e2mul
+re2m1ur
+2r1e2mus
+2r1encik
+ren1ci
+ren2d1e2r
+ren1de
+ren2d1g
+ren1d
+ren2dj
+ren2dk
+ren2d1o
+ren2d1
+ren2d12s
+ren1d
+2r1e2ner
+re1ne
+rens3s
+re1n
+2r1enged
+ren1ge
+2re1n
+ren2s1g
+ren1s
+rens3s
+re2of
+re1o
+re2og
+re21a
+re1
+re2c
+re21e
+re21
+re2f
+re21ka
+re2l
+re21o
+re2p
+re21s
+re2s2z
+re2p1aj
+re1pa
+rep1a1na
+rep1as2z
+re2pa1u
+re2paz
+rep1ll
+re1p
+rep1lm
+re2p2s
+re2pt
+re2p1e2g
+re1pe
+re2p1elf
+re2p1elk
+re2p1ell
+re2pelm
+re2p1eng
+re2p1ep
+2r1e2pe2r.
+re2p1er1k2
+2r1e2pd
+re1p
+re2p12j
+2r1e2pnk
+2r1e2ps
+re2p1i2d
+re1pi
+rep1il1le
+rep1int
+re2pok
+re1po
+2r1epos2z.
+repos2z
+2r1eposz2t.
+rep1osz1t
+re1p2
+re2p1r
+rep1pl
+rep1pr
+re2p
+2r1erd
+re2re1i
+1re1re
+re2rej
+re2res
+re2rez
+2r1erg
+re2rz
+re1r
+2r1e2r
+2r1ers
+re2sas
+re1sa
+2r1ese1m
+re1se
+res1epr
+rese2t1e2l
+rese1te
+2r1esl
+re1s
+2r1es1k
+re2szaj
+res2z
+re1s1za
+2reszekb
+re1s1ze
+2reszes
+2r1e2szet
+resz1v
+re1s1z
+2resz1k
+2reszm
+resz1ta2
+resz2t1an
+resz2tl
+resz1t
+resz2t1r
+resz2t12v
+resz1t
+resz2t1o2r
+resz1to
+2resz2.
+re1s1z
+2r1e2sz1e
+re2t1ab
+re1ta
+re2t1akt
+re2tal
+ret1a2la
+re2t1ant
+re2t1a2n2y
+re2tg
+re1t
+re2t11ra
+re2t11ro
+re2t1elb
+re1te
+re2t1ell
+re2telm
+ret1e2mel
+rete1me
+re2t1er1k2
+rete2s1z1
+retes2z
+2r1e2tet2s.
+rete1t
+2r1e2tets2e.
+retet1se
+2r1e2tetse2n
+2r1e2tet1s
+2r1e2tetsn
+re2t12k
+re1t
+re2t1l
+re2t1rb
+re2t1rd
+re2ti2d
+re1ti
+2r1e2ti1ka
+re2ti1k
+re2t1ill
+r1e2tilt
+re2t1ing
+re2t1int
+re2tis
+re2t1ok
+re1to
+re2t1old
+re2t1os
+re2tr
+re1t
+re2t11r
+re1t
+re2t12v
+ret2t1ne
+ret1t
+ret2t1in
+ret1ti
+2rettsgi2k.
+rett1s
+retts1gi
+2rettsgin
+2rettsgir
+2rettsgit
+re2t1ut
+re1tu
+re2t1lt
+re1t
+re2td
+re1t
+re2u1te
+re1u
+re2ve1z
+re1ve
+revte2l1e2kh
+re1v
+rev1te
+revte1le
+revtele1k
+2r1e2v
+2rezetn
+re1ze
+2reze1t
+2rezor
+re1zo
+2rezkh
+re1z
+2r1ezr
+2r1e2zs
+re1z
+1r
+r2b
+r2bis
+r1bi
+r2biv
+r2b
+2r1bres
+rb1re
+r2b
+2r1f
+2r1gb
+r2gt
+r1g
+2r1gn
+r2g12
+r2g
+2rgt
+2r12h.
+2r12hen
+r1he
+2r12hes
+2r12het
+2r1hs
+2r1ht
+r2jen
+r1je
+2r12jet
+2r12jn
+r1j
+r2k1ab
+r1ka
+r2kac
+r2k1a2g
+r2k1a2n
+r2k1a2u
+rk12s
+r1k
+r2k1e2b
+r1ke
+r2k1eg
+r2kel
+rk1e1le
+rk1e1l
+rk1elr
+rk1els
+r2k1es2z
+r2k11te
+r1k
+r2kik
+r1ki
+r2kin
+r2kit
+rk1o1la
+r1ko
+rk1old
+r2kr
+r1k
+r2k12v
+r2kz
+r2k
+r1ku2
+r2k1ut
+r2k1
+r2leth
+r1le
+r2letn
+r2lett
+rletta2n12s
+rlet1ta
+rletta1n
+2r1lf
+2r1lm
+2rl2y
+r2ma1d2
+r1ma
+r2m1a2l
+r2m1an
+r2mar
+r2ma1u
+r2m12l
+r1m
+r2mr
+r2mel
+r1me
+rm1e2le
+r2mer
+1r2m12r
+r1m
+r2mil
+r1mi
+r2m1ist
+r2mos
+r1mo
+r2m
+r2m
+2rm1tu
+rna1p2
+r1na
+2r12nekh
+r1ne
+2r12ne1ki
+2r12nekl
+2r12ne1k
+r2nel
+2rner
+r2n12j
+r1n
+r2n
+r2ny1e2l
+rn2y
+r1nye
+r2p1ed
+r1pe
+r2peg
+r2pes
+r1pi2
+r2p1ip
+2r12p
+r2pol
+r1po
+r2p
+r2p
+2r1pl
+2r12r.
+2r1rb
+2r1rc
+2r1rd
+2r12ret
+r1re
+2r12rez
+r2r2.
+1r1r
+r2rb
+r2rn
+r2rr
+r2r2s.
+r2r1se
+r2r1s
+r2rsh
+r2r1si
+r2rsk
+r2rsn
+r2rsr
+r2rss
+r2rst
+r2r1s
+r2rt
+2r1rf
+2r1rh
+r2ri1e
+r1ri
+r2ri2g
+2r1rk
+2r1rl
+2r1rm
+2r1rn
+2r12r2.
+r1r
+r2rk
+2r1rr
+2r1r1t
+2r1r1te
+2r1r1t
+2r1r1t
+2r12r
+2r1rv
+2r1rz
+r1sa2
+r2sal
+r2sar
+r2s1r
+r1s
+r2st
+r2seg
+r1se
+rs1ell
+r2s1e2r
+r2ss
+r1s
+r2s12
+rs3s1za
+rs2s2z2
+rs3szer1e
+rs1s1ze
+rss2ze1r
+r2s
+r2s12t
+r1s
+r2s12v
+rsz1a2l
+rs2z
+r1s1za
+r2sza2n
+rs3zav
+rsz12l
+r21s1z
+r2s2z1eml
+r1s1ze
+r2s2z1e2s2z
+r2sz12k
+r1s1z
+r2szin1te
+r1s1zi
+rsz12v
+r1s1z
+r2szok
+r1s1zo
+r2szo2l
+r2s1z
+rsz12r
+r2szr
+r1s1z
+rsz3s
+rsz1t2r
+r2s1zu
+r2s1z
+rsz2l
+r1s1z
+r2sz11l
+2rtz
+r1t
+r2t1eg2y
+r1te
+2r2tel
+rt1elm
+2rter
+r2t1e2s2z
+2r12te1t
+r2t12k
+r1t
+r2tiz
+r1ti
+r2t1o2l
+r1to
+r2t1os
+1r1t1r
+r2tud
+r1tu
+r1v2
+r2vt
+2rv2e.
+r1ve
+2r12ve1i
+rv1e1k
+r2v12l
+r1v
+r2v11ri
+2rv2t
+r2v11te
+2r12vv
+2rvf
+2rvh
+2rvt
+r2v
+2rvv
+r2z1a2
+r1z2
+r2z1r
+r2z1e2g
+r1ze
+rze2l
+rz1e1l
+r2zer
+r2zes
+rze2t
+rz1e1te
+r2zi2d
+r1zi
+r2zin
+r2zip
+rz1is2z
+r2zos
+r1zo
+r1z2
+r2z1r
+r2z
+r2z1sa
+rz2s
+r2z3s
+r2z3se
+r2z3si
+r2z1s
+r2z1so
+r2z1su
+rf1l
+r1f
+r2f1p
+r1f
+rf2s1za
+rfs2z
+rf22s1z2
+rf1fl
+rfia2n
+r1fi
+rfi1a
+rfi1b2
+rfid2
+rfi1i2
+rfik2
+rfi1kr
+r2f1ind
+rf1isk
+rfi1s2z2
+rfit2
+rfi1tr
+rf1kl
+rf1kr
+rf2la
+rf2lo
+rf2l
+rf2lu
+rf1okt
+r1fo
+rf11r
+r1f
+rf1pr
+r1f2r
+rf2r
+r1f2r
+rf1sp
+rf1st
+r2f1t
+r1f
+rga1k2
+r1ga
+rg2csal
+r1g
+rgc2s
+rg1c1sa
+rg2csan
+rg2csav
+rg2z1
+rge2o
+r1ge
+rge2r1a
+rgs3s
+r1g
+rg2h2a.
+rg1ha
+rgi2a1ko
+r1gi
+rgi1a
+rgi2al
+rgi2a1so
+rg2il
+rg2la
+rg2le
+rg2lo
+rg2l
+r1g2n
+rg2l
+r1g
+rg13le
+rgr2cs12l
+r3g2rc
+rgrc2s
+rgr1c1s
+rg1c1sa2
+r1g
+rgc2s
+rg2z1lt
+rg1z
+rg2z12s
+rg1z
+r1g2r
+r1g2ru
+r2gya1do
+rg2y
+r1gya
+r2gy1aj
+r2gyalak
+rgya1la
+r2gy1alap
+r2gy1al1g
+r2gy1alk
+r2gy1an2y
+r2gyap
+r2gyarc
+r2gy1as2z
+r2gya1u
+r2gy1az
+r2gyl
+r1gy
+r2gy12z
+r2gy1eg
+r1gye
+r2gy1e2l
+r2gy1enc
+r2gy1e2s
+r2gy1s
+r1gy
+r2gy1v
+r2gyim
+r1gyi
+r2gy1int
+r2gy1i2p
+rgy1i1ra
+r2gy1ok
+r1gyo
+r2gy1z
+r1gy
+r2gyr
+r1gy
+rhaj2r
+r1ha
+rha1j
+rhaj1
+rhat2s1t
+r3ha1t
+rh2ats
+rhat1s
+rhza2d
+r1h
+rh1za
+rh2z1a1da
+rh2zal
+rh2zip
+rh1zi
+rh2z3s2
+rhitkz1
+r1hi
+rhit1k
+1ri
+ri2a1a
+ri1a
+ri2a1
+ria1b2
+ri2a1ba
+ri2a1b
+ri2a1bo
+ri2ac
+ri2a1e
+ri2a1
+ria1f
+ri2afag
+ria1fa
+ri2afr
+ri2a1g2
+ri2ah
+ri2ai2k
+ria1i
+ri2a1
+ri2aj
+ri2ak2n.
+ria1k
+ri2a1k
+ri2a1la
+ri2a1l
+ri2a1lu
+ri2am
+ri2a1na
+ri2a1o
+ri2a1
+ri2a1
+ri2a1
+ri2a1p2
+ri2a1r
+ri2a1r
+ri2a1s1za
+rias2z
+ri2a1s1z
+ri2a1s1zi
+ri2a1s1zo
+ri2a1t
+ri2a1to
+ri2a1t2r
+ri2a1u
+ri2a1
+ri2a1
+ri2av
+ri2az
+2ris2z
+ri1
+r1i2zs
+ri1z
+2ri1b
+ri2bol
+ri1bo
+2r1ibr
+2ri1b
+ri2c1e2l
+ri1ce
+ri2c3he
+ric2h
+ri2c3h2i.
+ri1c1hi
+ri2c3hi1e
+ri2c3hig
+ri2c1ho
+rics1il
+ric2s
+ri1c1si
+ri2d1a2l
+ri1da
+ri2dl
+ri1d
+rid1d
+2r1i2de1
+ri1de
+ri2de1i
+2r1i2dej
+ri2del
+ri2de1o
+rid1e1re
+ri2d1es2z
+2r1i2dil
+ri1di
+2r1i2dom
+ri1do
+2r1i2d
+ri2du
+ri2ed
+ri1e
+3rie2l
+3rier
+rie2r1izmus1ra
+1rie1ri2
+rieriz1mu
+ri1fl
+2r1i2g2e.
+ri1ge
+2ri1gi
+2r1igr
+ri2har
+ri1ha
+2r1ihl
+ri1h2
+rihn1
+2r1i2jes
+ri1je
+1ri1k2ri
+ril2l1e2h
+ril1le
+ril2l2t
+ril1l
+ril2l1in
+ril1li
+ril2l1
+2r1il1lu
+2r1il1l
+2ri1l
+2rim1da
+r1i2md
+ri1m
+2rim1d
+2r1imp
+ri2n1a2d
+ri1na
+2r1i2na1i
+ri2naj
+ri2n1a2l
+ri2n1a2n
+ri2n1a2r
+2r1i2na2s.
+2r1i2na1s
+2r1i2nasn
+2r1i2na1so
+ri2nass
+2r1i2nast2
+rina1s2z2
+ri2na2t.
+rin2c1a
+rin2c
+rinc3c
+rin2c1eg
+rin1ce
+rin2cel
+rin2cer
+rin2csr
+rinc2s
+rin1c1s
+rin2c1si
+2r1in1de
+2r1in1du
+ri2neg
+ri1ne
+ri2np
+ri1n
+rin2gl
+rin1g
+rin2gel
+rin1ge
+2r1ingt
+rin1g
+rin2gl
+rin1g
+2r1in1ha
+2r1i2nic
+ri1ni
+ri2nil
+ri2n1ip
+2r1injek
+rin1je
+rin1k1r
+rin3n
+2r1insp
+2r1inst
+rin2t1ad2
+rin1ta
+rint2r
+rin1t
+rin2t1ra
+rin2t1ro
+rin2trs
+2rinten
+rin1te
+2rinterf
+rint2r
+rin1t
+rin2t12r.
+rin2t11r
+1rin2t11ri
+2rint2.
+rin1t
+2rintk
+ri2nl
+ri1n
+rio2lok
+ri1o
+rio1lo
+ri2om
+2rionn
+2rio1no
+2riox
+ri21a
+ri1
+ri21
+ri2c
+ri2dar
+ri1da
+ri21e
+ri2g
+ri21ke
+ri2l
+ri21m
+ri21m
+ri21o
+ri21p2
+ri21
+2r1i2pa1i
+ri1pa
+2r1i2pa2r.
+2r1ipa1ra
+2r1i2pa1r
+2r1i2parb
+2r1i2pa1r
+2r1i2parh
+2r1i2paril
+1ripa1ri
+2r1i2parin
+2r1i2parn
+2r1i2parr
+2r1i2pars2
+2r1i2par1te
+2r1i2par1t
+2r1i2pa1ru
+2ripl
+ripor2ta
+ri1po
+2rip1t
+2r1i2ram
+ri1ra
+2r1i2rat
+2r1i2r
+2r1irh
+2r1i2ri
+2r1i2ro
+ri2rn
+ri1r
+2r1irr
+2r1irt
+ri2s1ar
+ri1sa
+ri2s1as
+ri2s1l
+ri1s
+ri2sp
+ri2s1e2l
+ri1se
+ri2s1emb
+ri2s1e2r
+ri2sid
+ri1si
+ri2si1i
+2r1i2sik
+ri2sil
+2r1i2sim
+ri2s1is
+2r1ismrv
+ris1m
+ri2s1o2r.
+ri1so
+ri2s1ort
+2r1is1p
+2ristl
+ris1t
+ri2su2t
+ri1su
+ris11t
+ri1s
+ri2s12t2.
+ris1t
+ri2s12v
+2r1i2szk
+ris2z
+ri1s1z
+ri2t1a2d2
+ri1ta
+ri2tal
+2r1i2ta2l.
+2r1i2talb
+ri2t1al1k2
+2r1itall
+2r1i2taln
+2r1i2ta1lo
+2r1i2talr
+2r1i2talt2
+rit1a2n2y
+ri2tg
+ri1t
+rit1ell
+ri1te
+2riti1ka
+ri1ti
+2riti1k
+2ritikusab
+riti1ku
+ritiku1sa
+2ritikusa2k.
+2ritikusan
+2ritikusn
+2ritiku1so
+2ritikus1s
+ri2t1i2o
+ri2t1
+riu2m1ne
+ri1u
+riu1m
+2r1i2vad
+ri1va
+ri2var
+2r1i2vs
+ri1v
+2r1i2v
+ri1xe2
+ri2x1el
+ri2x
+ri2x
+2ri1za
+r1i2zn
+ri1z
+r1i2zt
+2r1iz1mi
+2r1izmuk
+riz1mu
+2r1izmusom
+rizmu1so
+2rizn2e.
+riz1ne
+2riz1n
+ri2zsar
+riz2s
+ri1z1sa
+ri2zseb
+ri1z1se
+ri2zsel
+2riz1v
+2r1iz1za
+2r1iz1z
+2rizzn
+riz1z
+1r
+r2g
+2r2j.
+r2ja1i
+r1ja
+r2jak
+r2jam
+r2jas
+2r1j
+r2jn
+rj12szaik
+r12js
+rjs2z
+rj1s1za
+rjsza1i
+rj12szair
+rj12s1z
+rj12s1zi
+rj12szokb
+rj1s1zo
+rj12szokk
+rj12szok1n
+rj12szok1r
+rj1szt2
+r2jt
+r2jv
+2r1jh
+2r1jj
+2r1jl
+2r1jr
+2r1jv
+r2m1a2l
+r1ma
+2r1m
+rm1emb
+r1me
+r2mo
+r2m
+r2n
+2r1ns
+r2ra
+r12r
+r12r
+2r12tl
+r1t
+rts3s
+rt1a2
+r1t
+rt1e2
+rtks2z1
+rt1k
+rt1p2
+2r12v.
+r1va2
+2r1vb
+2r12ve
+2r12v
+2r1vh
+r2vi
+r12v
+r2v
+2r1vv
+r2za
+r2z1el
+r1ze
+rzis3s2
+r1zi
+r2zo
+r2j1a1do
+r1ja
+rj1an2y
+r2j1g
+r1j
+r2j1p
+rjet2
+r1je
+r2j1id
+r1ji
+r2j1s
+r1j
+r2j1u2r
+r1ju
+rka1b2
+r1ka
+r2k1ang
+rka1pr
+rkaros3
+rka1ro
+rka2r2r
+rka1r
+rka1s1pe
+rka2s12v
+rka1s
+rka1t2r
+r2k1c2s.
+r1k
+rkc2s
+rk2c1s
+rk2ne
+r2k12ri
+rkr1om
+rk1ro
+r2k12ru
+r2k1e2d2z
+r1ke
+rk1e2lem
+rke1le
+rk2elm
+r2k1el1t
+rke1p2
+r2k1erd
+rk1ere1d
+rke1re
+r2k1e2re1i
+r2k1e2rez
+r2k1e2r
+rke2s1z
+rkes2z
+r2k1ex
+rk22p1e2l
+r1k
+rk1pe
+rk2p1e2r
+rk2p1ss
+rk1p
+r2k12r.
+r2k1r1t
+rk2s1za
+rks2z
+r2k1tt
+rki1a2
+r1ki
+rki1e2
+rkigaz1
+rki1ga
+rkilenc1
+rki1le
+r2k1i1mi
+rk1in1ga
+r2ki2on2t.
+rki1o
+rki2sem
+rki1se
+rki2z1a
+rk1i1zo
+rk1kl
+r1kli1e
+rk1li
+r1k2l
+r1k2lo
+r1k2l
+rk1o2laj
+r1ko
+rko1la
+rko2nya
+rkon2y
+r2k1o2vi
+r2k11n
+r1k
+rk12r
+rk12ri
+r2k1lt1si
+r1k
+rkl1t
+rkpe2ny1e2g
+rk1pe
+rkpen2y
+rkpe1nye
+r2k1tl
+rk2z
+rk12r.
+r1k
+rk12r
+rk1rk
+rk1rn
+rk12r
+rk1rr
+rk1r1s2
+rk1rt
+rk2rm
+rk1r
+r1k2ri
+r1k2r
+rk2rom
+rk1ro
+rktus1s
+rk1tu
+rk1udv
+r1ku
+r2k1ug
+rku2s1ze
+rkus2z
+r2k12s2z
+r1k
+r2k1d
+r1k
+r2k1g
+rk2v
+rlag1g
+r1la
+rla2g1ol
+rla1go
+rlan2ga2
+rla2p1a
+rla2pl
+rla1p
+rla1p1e
+rla2pol
+rla1po
+rla2p1os2z
+rl2a1p1ro
+rla1s2t
+rl2a2t1a2n
+rla1ta
+rla2t12
+rl2pe
+r1l
+rls3s
+rl2s1t
+rl1s
+rl2t1e2
+rl2t1
+rl2tor
+rl1to
+rle2g1a2
+r1le
+rle2g1
+rle2g1er
+rle1ge
+rleg1g2
+rle2gigaz1
+rlegi2g
+rle2g1i1ga
+rle1gi
+rle12
+rle2t12
+rle2t1eg
+rle1te
+rle2tell
+rle2t1e1l
+rle2t1k
+rle1t
+rle2t2l
+rle2t12r.
+rle2t1rv
+rle12
+rlst1
+r1l
+rl2s12
+rl2s11ta2
+rls3s
+rl1gr
+rl1g2
+r1l
+rl12
+rlt2
+rl1e2
+r1l
+rl1s1ta
+r2m1akad
+r1ma
+rma1ka
+rmak2s1z1
+rm2aks
+rma1k
+rmaks2z
+r2m1a2k
+rm2a1k1r
+r2m1alt
+r2m1a2nya
+rman2y
+rma12
+rma2ta1la
+rma1ta
+rma2t12ru
+rm2atr
+rma1t
+rm2a2t1ur
+rma1tu
+rma2zon
+rma1zo
+rm2lr
+r1m
+rm1l
+rm2nya2n
+rmn2y
+rm1nya
+r2m12ram
+rm1ra
+r2m12ro
+r2m1ru
+rm1cl
+rme1ge2
+r1me
+rme2geg
+rme2g1er
+rme2g1es
+rme2g1
+rmeg1ol
+rme2go
+rme3g22
+rme2k1an
+rme1ka
+rme2kar
+rme1k2
+rme2k1eg
+rme1ke
+rme2k1e2l
+rme2krd
+rme1k
+rme2ko2r
+rme1ko
+rme2kot
+rme2k12
+rmek2r
+rme1k
+rme2k1r
+r2m1elk
+r2m1elm
+rme2ran
+rme1ra
+rme2ras
+rme2rin
+rme1ri
+r2m1e2r1i
+rme1r
+rme2r2k.
+rme2r1ke
+rme2rkn
+r2m1e2rm
+rmert2
+rmer1tr
+rm1esem
+rme1se
+rmeste2r1e2kh
+rmes1te
+rmeste1re
+rmestere1k
+rme2t1l
+rme1t
+rme2tin
+rme1ti
+rm2k1e2l
+r1m
+rm1ke
+rm2ker
+r2m12le
+r2m1p
+r2m12r.
+r2m1r1te
+r2m1tk
+r2m1tr
+r2m1tt
+rmi2g
+r1mi
+r2m1i1ga
+r2m1i1g
+rm1il1la
+rminc3s
+rm1in1te
+r2m1i1r
+rmi2si
+r2m1is1ko
+r2m1ism
+rmi1te2
+rmi2t1el
+r2m1g
+r1m
+rmjob2
+rm1jo
+rm1kl
+rmo2n1a
+r1mo
+rmo2nr
+rmo1n
+rmo2n1e
+rmon1n
+r2m1o1pe
+r2m1or1s2
+rmo1szf
+rmos2z
+rmo1sz2t.
+rmo1sz1ta
+rm2s1z
+r1m
+rms2z
+rm1p2l
+rm1p2r
+rm1sk
+rm1st
+rm1s2z2
+rm1tr
+rm1g
+r1m
+rm1z
+rm1e2
+r1m
+rm1s
+rm1ya
+rna1b2
+r1na
+rna2gy2
+rnag2y
+rnai2k
+rna1i
+rna1k2r
+rna2pe2s
+rna1pe
+rn2a1p1ro
+rnas2
+rna1sp
+rna1s2z2
+rna1t2
+rn2c2s
+r1n
+r2n1e2l.
+r1ne
+r2n1elb
+r2n1elf
+r2n1elh
+r2n1elj
+r2n1ell
+r2n1eln
+r2n1elr
+r2n1elt
+r2n1est
+rne2t1a2
+rne2t1elt
+rne1te
+rne1t1o
+rnp1e2kt
+r1n
+rn1pe
+rnpe1k
+rns2
+rn1st
+r2n1i2d
+r1ni
+rni2g
+r2n1i1ga
+rno1g2
+r1no
+rno2kis
+rno1ki
+rn1d2
+r1n
+rn2ke2t
+r1n
+rn1ke
+rnus3s1ze
+r1nu
+rnuss2
+rnus2s2z
+r2ny1a2d
+rn2y
+r1nya
+r2nyakad
+rnya1ka
+r2nyala1ko
+rnya1la
+r2ny1a2lap
+r2ny1alk
+r2nyarc
+rny1lm
+r1ny
+r2ny1ell
+r1nye
+r2nyelm
+r2ny1eln
+r2ny1e1lo
+rny1el1vo
+rny1emb
+r2nyerd
+r2ny1e2rez
+rnye1re
+rny1e2s
+rny1k1n
+r1ny
+rny1s2z
+r2ny1id
+r1nyi
+r2nyiz
+rnyolc1
+r1nyo
+rny1old
+rnyoms3s
+rnyo1m
+r2ny1or
+rny1k
+r1ny
+r2nyt
+rny1s
+r2ny1ur
+r1nyu
+1ro
+ro2ad
+ro1a
+roa2n
+2r1obj
+2robl
+r1obs
+2r1o2d
+rofi2tr
+ro1fi
+rofi1t
+ro2g1ad
+ro1ga
+ro2g1ak
+ro2gal
+ro2g1am
+ro2gar
+ro2g12r
+ro1g
+ro2g1z
+rog1enc
+ro1ge
+ro2ge2r
+ro1g2l
+ro2g1o2l
+ro1go
+ro2gor
+ro2g1os2z
+ro2g
+ro1gu2
+ro2gur
+ro2g
+3rog2y
+ro2h
+3rojt
+ro2k2a.
+ro1ka
+ro2kab
+ro2kac
+ro2k1a2d
+ro2kait
+roka1i
+ro2k1aj
+ro2kak
+ro2k1al
+ro2k1a2n
+ro2k1a2s
+ro2kb
+ro1k
+r1o2kd
+ro2k1l
+ro2kn
+ro2k12s
+ro1ke2
+ro2ke2d
+ro2k1en
+2roket2t.
+r2o1k
+ro2kk
+ro2k12l
+ro2k2p
+ro2kid
+ro1ki
+ro2k1ing
+ro2k1
+2rokod
+ro1ko
+rok1old
+ro2k
+ro1k1ri
+rok2rm
+rok1r
+2r1oksg
+rok1s
+rok1t2
+2r1oktat
+rok1ta
+2r1oktn
+rok1t
+ro2k1u2s
+ro1ku
+ro1k2
+ro2k2.
+ro2ks
+ro2k
+2r1o2laj
+ro1la
+rola2n
+rols1s
+ro1l
+2r1ol1d
+2r1ol1d
+ro2l1i2d
+ro1li
+roligar2
+r1o2li1ga
+roligarc3
+rol2l1a2d
+rol1la
+rol2lag
+rol2l1akn
+rol2lan
+rol2lat
+rol2leg
+rol1le
+rol2le2l
+rol2lis
+rol1li
+2r1ol1l
+2r1olts
+rol1t
+2r1olt2.
+rol1t
+2r1oltb
+2r1olt1
+2r1olth
+2r1olt1i
+2r1olt1k
+2r1oltm
+2r1oltn
+2r1oltt2
+2r1oltv
+2r1oltv
+ro2l
+2r1olvad
+rol1va
+2r1olvas
+2r1o2lya1i
+rol2y
+ro1lya
+2r1o2lyh
+ro1ly
+2r1o2lyn
+2r1o2lyr
+2r1o2lyb
+ro1ly
+2r1o2lyh
+2r1o2ly1i
+2r1o2ly2n.
+2r1o2lyir
+ro1lyi
+rolyi1
+2r1o2lyuk
+ro1lyu
+rom1ajt
+ro1ma
+rom1akk
+rom1a1k
+1rom1a2ro
+ro2m1l
+ro1m
+2romm
+ro2m12ri
+ro2m1rk
+ro2m1rn
+1ro2m12ro
+rom1b2
+rom2bn
+rom1bl
+ro2m1e2l
+ro1me
+ro2m1e2r
+ro2m1e2s
+ro2mj
+ro1m
+ro2m12ne
+rom2f1os
+rom1fo
+ro2mim
+ro1mi
+rom1i1n
+rom1ist
+ro2mi1ta
+ro2miz
+ro2m
+romkz1
+rom1k
+2roml1a
+rom1l
+2r1oml1
+2r1omlkr
+roml1k
+2r1oml1va
+2r1om1ni
+ro2m1o2r
+ro1mo
+ro2m12r
+ro1m
+ro2m
+ro2m
+rom1pr
+ro2m
+ron1alj
+ro1na
+ron1alt2
+ron1a1lu
+ron1an2y
+rona1t2
+ro2n11ta
+ro1n
+ro2n1tr
+ron2csel
+ronc2s
+ron1c1se
+ron2csem
+ro2ne2n
+ro1ne
+ron1es2z
+rone2s
+ro2n12r.
+ro1n
+ron2gal
+ron1ga
+ro2n1i2ko
+ro1ni
+ro2n1i2m
+ro2n
+ro2nop
+ro1no
+ro2nc
+ro1n
+ro2n12r
+ro2n
+ro2n
+ron1s2
+ron2tab
+ron1ta
+ron2tem
+ron1te
+ron2tev
+ron2t1n
+ron1t
+ron2tin
+ron1ti
+ron2t
+2ront1
+ron1t
+2r1onth
+2ronti2g
+ront1i
+2ronts
+ro2n
+ro2nyac
+ron2y
+ro1nya
+rony1a2l
+ro2nyid
+ro1nyi
+ro2nyik
+ro2nyir
+ro2ny
+ron2z1al
+ron1za
+ron2zer
+ron1ze
+ron2zin
+ron1zi
+ron2z1ol
+ron1zo
+ron2z1or
+ron2z12
+ronz1z
+ro2os
+ro1o
+2r1opc
+2ro1pe
+ro2per
+ro1p2l2n.
+rop1l
+ropo1s
+ro1po
+ro1p2r
+rop2s
+ro2ra
+ror1a2l
+ror1ll
+ro1r
+ro1re2
+ro2reg
+ro2r1e2l
+ro2r1e2s
+ro2r1in
+ro1ri
+ro2ros2z
+ro1ro
+rort2
+ror1tr
+ro2r
+ro2sar
+ro1sa
+ros1ass
+ro2s1atl
+ro2s1av
+ro2s1r1k2
+ro1s
+1ro2s11ro
+ro2sem
+ro1se
+ro2s1ist2
+ro1si
+ro2s1ol
+ro1so
+ro2s12
+ro2s
+ro2s
+ros3s1ze
+ros2s2z
+ros3szk
+ros1s1z
+ros2tet
+ros1te
+2r1ostob
+ros1to
+ros2tol
+ros1t2rom2a.
+1rost1ro
+rostro1ma
+ros1t2roma2i.
+rostroma1i
+ros1t2romait
+ros1t2romb
+ros1t2romh
+ros1t2ro1mi
+ros1t2romk
+ros1t2romlk
+rostrom1l
+ros1t2rom1n
+ros1t2romo1ka
+rostro1mo
+ros1t2romot
+ros1t2romr
+2r1os1tya
+rost2y
+2r1ostyn2k.
+ros1ty
+ro2s1t
+ro1s
+ro2szal
+ros2z
+ro1s1za
+ro2sza2n
+ro2szs
+ro1s1z
+2r1osz1lo
+2r1osz1no
+ro2s1z
+r1osz1t
+2ro1t
+ro1t2he
+roto2na2
+ro1to
+ro2us
+ro1u
+rova2re
+ro1va
+rovs1s
+ro1v
+2r1o2v2i.
+ro1vi
+2r1o2vib
+2r1o2vik
+ro2vis
+ro1ya
+roza2tal
+ro1za
+roza1ta
+ro2zsa2n
+roz2s
+ro1z1sa
+1r
+ra2d
+r1a
+rb1ajt
+r2baj
+r1ba
+2r1b
+rbe2j1ra1to
+r2bej
+r1be
+rbe1j
+rbej1ra
+rb2l
+r1b1lo
+rc3c
+r2c3h
+r2cin
+r1ci
+r2c1
+r2c3s
+rc2s
+r2c2z
+r2da1i
+r1da
+r2d1ep
+r1de
+rdi2a1d2
+r1di
+rdi1a
+r2d
+r2d
+2r12v.
+r1
+2r2ve
+2r12v
+r22f1ag
+r1fa
+2rfe1a
+r1fe
+2rfe1
+r2f1iv
+r1fi
+2rfs
+r2fu2r
+r1fu
+r1g2r
+ri2g
+r1i
+rke2rest
+r2ker
+r1ke
+rke1re
+rke2r1in
+rke1ri
+r1k2l
+r1k2r
+2r1lm
+r12lom
+r1lo
+2rm2a.
+r1ma
+2rmab
+r2m1a2l
+rma2r
+r2m1a1ra
+r2ml
+r1m
+rme2l
+r1me
+r22ml
+r1m
+rm1i2s2z
+r2mis
+r1mi
+r2m
+r2m
+r2m
+rne2m
+r1ne
+2r12nb
+r1n
+2r12n1
+2r12nh
+2r12nn
+2rnr
+2rnt
+2rnv
+2rnj
+2rnn
+2rnr
+rnus3s2
+r1nu
+2r1n
+r2n
+ro2k
+r1o
+r2r
+r1
+r1p2l
+r1p1ro
+2r12ra1a
+r1ra
+2r12rac
+2r12rad
+2r12ra1e
+2r12raf
+2r12rag
+2r12ra1je
+2r12ram
+2r12ran
+2r12rap
+2r12rar
+2r12ras
+2r12rat
+2r12ra1
+2r12rav
+2r12rb
+r1r
+2r12rd
+2r12r2.
+rr1
+2r12rn
+2r12rv
+2r12rh
+2r12r1i
+2r12r1ju
+2r12r1ka
+2r12r2m.
+2r12r1ma
+2r12rmb
+2r12rmn
+2r12r1mo
+2r12rmr
+2r12r2n.
+2r12r1na
+2r12r1n
+2r12rnk
+2r12rn2y
+2r12rr
+2r12rs
+2r12rt
+2r12rv
+2r12ri1
+r1ri
+rs1orom
+r1so
+rso1ro
+r1s1pi
+r2s3z1ro
+r21s1z
+rs2z
+r2s3zrr
+2rtb
+2rth
+r2tip
+r1ti
+rt1ist
+2rtj
+2rtk
+2rtm
+2rtn
+r2t12v
+r1t
+r1t1ri
+r2tl
+r1t
+2r12v
+rza1t2
+r1za
+r2z1e
+r2z1in
+r1zi
+r2z
+r2z
+1r
+2r1bl
+2r12b2l.
+r1b
+2r12blb
+2r1blh
+2r1b1li
+2r12bll
+2r12bln
+2r12blr
+2r12bl1t
+r2ga
+r2go
+r2k12l
+r1k
+r2k1rv
+2r1k
+r2ko
+2r12kr
+r1k
+2rk1s
+2rk1s
+2r1k1r
+r2ls
+r1l
+r2ly
+rl2y
+r2ma
+r2m
+2rm2e.
+r1me
+2rmed
+r2meg
+2rme1i
+2rmn
+r1m
+2rmt
+2rmv
+r2m
+2rm1m
+r2mo
+r2m
+2rmd
+r1m
+2rmk
+2rmt
+r2mu
+2r1m
+2r1m
+rn2d1e
+rn2k1a2
+rn2k1e2
+rn2kp
+rn1k
+rn2kol
+rn1ko
+rn2kos
+rn2k1l
+rn1k
+rn2k12
+r2p1i2
+r2re
+1r2r
+r2sa
+r2so
+2r12v.
+2r1vb
+2r12ve
+r12v
+2r1vh
+2r1vn
+2r12v
+2r1vr
+r12v
+2r1vv
+1r
+ra2n
+r1a
+rt1
+r1
+r2ta2
+r1bl
+r1br
+r2d
+r2d1e2l
+r1de
+r2dos
+r1do
+r2d12r
+r1d
+re2l
+r1e
+re2r
+re2s
+r2h
+r1
+r2l
+r2r
+r2te
+r2f1as
+r1fa
+r1fl
+r2f1
+rg2p1s
+r1g
+rg1p
+ri2r
+r1i
+ri2ta
+r1kl
+r1kv
+2rlk
+2rlt
+2rnkb
+r1pl
+r1p2r
+2r12r.
+rr1ak
+r1ra
+rr1eg
+r1re
+r12re1i
+r1rh
+rr1in
+r1ri
+r2riz
+rrkz1
+rr1k
+2r1rl
+2r1rm
+2r1rn
+r2r
+2r1rp
+2r1rr
+2r1rs
+2r1rt
+2r12r
+2r1rz
+r1s2
+r2sr
+r2sr
+r1s
+r1s1k
+r2s
+r1s1pe
+r1s2pi
+r1s1ta
+r1st2r
+rs2l
+r1s
+r2s11l
+r2s1lt
+r2s12t
+r2s12
+rsza2k1l
+rs2z
+r1s1za
+rsza1k
+ru2t
+r1u
+r2l
+r1
+rva2s1
+r1va
+r2z2i.
+r1zi
+r2zn
+r1z
+rprba2jo1ko
+r1p
+rpr1ba
+rprba1jo
+rpe1i2
+r1pe
+rpe2szel
+rpes2z
+rpe1s1ze
+r2p1ig
+r1pi
+rpi1s12
+rpi2t1a
+rpi2t1e2
+r2p1i1v
+r1p2la
+rp2le
+rp2l
+rp2lu
+rp2l
+rprecz1
+rp1re
+rpre1c
+r1p2r
+r1p2ri
+r1p2r
+r1p2ro
+r1p2r
+rpu2s1z
+r1pu
+rpus2z
+r2p1z
+r1p
+r2r1a2lap
+r1ra
+rra1la
+rr1an1te
+rra2s1za
+rras2z
+rra2s1zi
+rr2ata2n
+rra1ta
+rrat1an2y
+rr2a2t12r
+rra1t
+rra2t1e
+r2r1br
+r1r
+r2r12ga
+r2r12g2y
+r2r1rb
+rr2saj
+rr1sa
+rr2sa2r
+rr2sg
+rr1s
+rr2se
+rrs3s
+rr2s
+rr2s3z
+rr2tal
+rr1ta
+r2r1ts
+rre2l1i
+r1re
+rr1emb
+rren2d12
+r2r1k
+r1r
+rr2r
+r2r11ri
+rr2sem
+rr1se
+rr1fl
+rr1fr
+r2r1i2de
+r1ri
+rr1i2n.
+rr1ing
+r2r1ir
+rri2ta
+rr1i2z
+rr1izg
+rr1izm
+rr1k2r
+r2r1o1pe
+r1ro
+rro2rl
+rro1r
+rro2r1os2z
+rro1ro
+rr1dr
+r1r
+rr1p2
+r2r1b
+r1r
+r2r1s
+rr1pl
+rr1pr
+rr1sp
+rr1t2r
+r2r1u2r
+r1ru
+r2r1r
+r1r
+r2r1t
+rry2n
+r2s1a2d
+r1sa
+r2s1a2g
+rsa2il2
+rsa1i
+r2s1ak1ku
+rs1alan
+rsa1la
+rsa2lap
+r2s1a1le
+r2s1alm
+r2s1a2lomb
+rsa1lo
+r2s1a1na
+rs1a2n2y
+r2s1a2p
+r2s1a2po
+rs1a2r2a.
+rsa1ra
+r2s1arc
+r2s1arom
+rsa1ro
+r2s1arz
+rs1att
+rsa2v1ar
+rsa1va
+rsa2v12
+rsa2v1i
+r2s1ax
+r2s1a2z
+r2s1br
+r1s
+rsg1g
+rs1ld
+r2s12r
+r2s1rn
+r2s1rr
+r2s12ru
+r2s11t
+r2s11ti
+rs1bl
+rs1br
+rs2c2h
+r1s1c1he
+rs1c3h
+rs1d2r
+rs1ed2z
+r1se
+r2s1ef
+r2s1e2gt
+rse1g
+r2s1e2g2y
+rse2il
+rse1i
+rse2k1a2
+rse2keg
+rse1ke
+r2s1e2le1me
+rse1le
+r2s1elf
+r2s1elk
+r2s1e2l1a
+rse1l
+r2s1e2ll
+rs1e2mi
+r2s1e2mu
+rse2ny1a2
+rsen2y
+rse2nyeg
+rse1nye
+rse2ny1e2l
+rse2nyer
+rse2ny
+rse2ny
+r2s1erd
+r2s1er1k
+r2s1e2r
+r2s1ess
+r2s1es2z
+rs2g1el
+r1s
+rs1ge
+r2s1l
+r2s1p
+r2s12r.
+r2s1rd
+r2s1rl
+r2s1rtk
+rsr1t
+r2s1s
+rs12te
+r2s1tt
+rs1fr
+rs1gl
+rs1gr
+rsi2d
+r1si
+rs1i1de
+rs1i1do
+rsi2g
+r2s1i1ga
+r2s1ikr
+r2s1ill
+r2simm
+r2s1ind
+r2s1ing
+r2s1int
+r2s1i2o
+rs1i2pa
+rsi2rn
+rsi1r
+r2s1i1ro
+r2s1i2si
+r2s1isk
+r2s1ism
+r2s1ist2
+r2s12r
+r1s
+r1s2kl
+rs1k
+rs1kl
+rs1k2r
+rs2lg
+rs1l
+r1s2lu
+rs2mink
+rs1mi
+rs2ni
+r2s1ond
+r1so
+rso1nya2
+rson2y
+rso2nyal
+rso2nyan
+rso2nyat
+rso2ny
+r2s1op
+r2s1ord
+r2s1org
+r2s1os2z
+rs21c1sa2
+r1s
+rsc2s
+rscsap1
+r2s11d
+r2s11n
+rs2s3zrr
+rs1s2z
+rs21s1z
+r2s1b
+r1s
+rs1nt
+r2s1rv
+r2s1s
+r2s12z
+rs1r
+r1s
+r1spe1ci
+rs1pe
+rs1pl
+rsp2r
+r1s2rc
+rs1r
+rs1s2t
+rs3szag
+rs2s2z
+rs1s1za
+rs3szak
+rs3s1z
+rs3sze2m.
+rs1s1ze
+rs3szemet
+rssze1me
+rs3sze2r.
+rs3szer2.
+rss2ze1r
+rs3szerb
+rs3szer1e
+rs3szern
+rs3szers
+rs3szert
+rs3szerv
+rs3s1zi
+rs3s1z
+rs3s1z
+rs3s1z
+r1s2tand
+rs1ta
+r1s2tat
+r1s2tc
+rs1t
+r1s2tt
+rs2top
+rs1to
+rst2r
+r1strat2
+rst1ra
+rs1t1re
+rs1t1r
+r1st1r
+r1st1ru
+r1s2t
+rsu2r
+r1su
+r2s1u1ra
+rsu2t
+r2s1u1ta
+rs1u1t
+r2s12r.
+r1s
+r2s12ri
+r2s12s
+r2s11to
+r2s1d
+r1s
+rs1ld
+r2s1z
+rsz2a2k1a2l
+rs2z
+r1s1za
+rsza1ka
+rsza2k1e
+rsza2k
+rsza2k12
+r2sza1l
+r2s3zam
+rszg1g
+r1s1z
+rszraz1
+rsz1ra
+rs3zrl
+r2s3ze1n
+r1s1ze
+r1sz2f
+rsz2lo
+rsz2m
+rszom2j1a2d
+r1s1zo
+r3szomj
+rszom1ja
+rs3z1si
+rsz2s
+rsz2ta
+rszt1al
+rsz2t2r.
+rsz1t
+rsz2t1rv
+rszt2r
+r2s3z2r.
+r1s1z
+r1sz2v
+r2t1ab1la
+r1ta
+r2t1abr
+r2t1a2dat
+rta1da
+r2t1a2d
+r2t1a2g2a.
+rta1ga
+rt1agit
+rta1gi
+r2t1a1j
+rt1aj1t
+r2t1a2ka1ra
+rta1ka
+r2t1akc
+rt2a1k1re
+rt2a1k2r
+rt1alapj
+rta1la
+rt1a2lb
+rta1l
+r2t1alr
+r2t1alb
+r2t1alel
+rta1le
+r2t1alg
+r2t1alj
+r2t1al1k2
+r2t1alt
+r2t1alv
+rta2m1r
+rta1m
+r2t1a2nim
+rta1ni
+r2t1an1to
+r2t1antr
+r2t1a2nyag
+rtan2y
+rta1nya
+r2t1app
+r2t1a2rn
+rta1r
+r2t1arc
+rta2rn
+rta1r
+rt1a2t2y
+r2t1a2u1to
+rta1u
+r2t1a1zo
+r2t1br
+r1t
+r2t1f
+r2t12g.
+rt12ga
+r2t1gb
+r2t1gg
+r2t1gj
+r2t1gn
+r2t1gr
+rt1gs
+rt2la2d
+rt1la
+rt2la1la
+rt2lal
+rt2ra1da
+rt1ra
+rt2raj
+rt2ramr
+rt1ri1a
+rt1ri
+rt1ri1
+r2t1rin
+rt1r1s1zi
+rtrs2z
+rt1r1s1z
+r2t1r1ta
+rt2ru1k
+rt1ru
+rt2rukk
+rt2rukn
+rt2rukr
+rt2rukt
+r2t12rur
+r2t12rut
+rt2s1g
+rt1s
+r2t12ss
+rt2s3z
+r2t12t1a
+r2t1tl
+r2t1ts
+r2t1tv
+rt2v1
+rt1vi2
+rt1bl
+rt1br
+rt1cl
+rt1cr
+rt1dr
+rte1a2
+r1te
+rt1e2g
+rt1e2gye
+rteg2y
+rte1i2
+r2t1eks
+r2t1e2l1a2d
+rte1la
+r2t1elb
+rtelevzi2in
+rte1le
+rtele1v
+rtelev1zi
+rtelevzi1
+rtelevzi1i
+rtelevzi21k
+r2t1elf
+rt1el1j
+rt1elker
+rtel1ke
+rt1el1k
+rt1el1k
+rtel2la
+rtel2l12
+rt1el1ma
+rt1e2l1a
+rte1l
+rte2ll
+r2t1elr
+r2t1ember
+rtem1be
+r2t1eml
+r2t1enc
+r2t1ent
+rte1p
+rte2rac
+rte1ra
+rte2rl
+rte1r
+rte2r1in
+rte1ri
+rter1mo1
+rt1ern2y
+rte2r1os
+rte1ro
+r2t1e2r
+r2t1e2r
+rte1sp2
+r2t1estk
+rtes1t
+rt1est1n
+r2t1estn
+rtes1t
+rte2sz2e.
+rtes2z
+rte1s1ze
+rte2sze1i
+rte2szek
+rte2szem
+r2te2szet
+r2t1eszk
+r2t1eszm
+r2t1e2s1z
+r2t12d
+r1t
+rt12gi
+rt2kaj
+rt1ka
+rt2k1a2l
+rt2k11t1a2
+rt1k
+rt2k12
+rt2kos
+rt1ko
+rt2ku
+r2t12let
+rt1le
+rt2ln
+rt1l
+rt12li
+r2t1lm
+r2t12ne1ke
+rt1ne
+r2t12nek1k2
+r2t12nekr
+r2t11p
+r2t1rdem
+rtr1de
+r2t12rem
+rt1re
+r2t12r
+r2t1rin
+rt1ri
+r2t12rit
+r2t1rtek
+rtr1te
+r2t1r1t
+r2t1rv
+r2t1rz
+rt2s1g
+rt1s
+rtsfl2v
+rts1f
+rtsf1l
+rtsks2z1
+rts1k
+rts3s1za
+rts2s2z2
+rt2s2l
+rt1s
+rt22s1z
+rts2z
+rt2s1zo
+rt22s1z
+rts3z1s
+rtsz2s
+r2t1tk
+r2t1tl
+r2t1tt
+r2t1tv
+r2t12v2e.
+rt1ve
+r2t12vet
+rt2v1n
+rt1v
+r2t12vr
+r2t1vk
+rt1fl
+rt1fr
+rt1gr
+r1t2hg
+rt1h
+r1thy2
+r2t1i2de
+r1ti
+rt1i1d
+rt1i1di
+rt1ifj
+r2t1i2g
+r2t1ill
+r2ti1m
+r2t1i2mi
+r2t1imp
+r2t1i2nb
+rti1n
+r2t1i2n1
+r2t1i2nh
+r2t1i2nn
+r2t1ind
+r2t1inf
+r2t1ing
+rti2nik
+rti1ni
+r2t1i2pa
+r2t1i1r
+r2t1i1ro
+r2t1i1si
+r2t1isk
+r2t1ism
+r2t1i1s1za
+rtis2z
+rt1i2tal
+rti1ta
+r2t1i1z
+rt1izm
+r2t1izz
+r2t1g
+r1t
+r2t1j
+r2t1n
+rt2ra
+rt2r
+r2t12v
+rt2z1ezren
+rtze2z
+rt1ze
+rtzez1re
+r2t1zl
+rt1kl
+rt1kr
+rt1kv
+rt1m1
+rtmt2
+r2t1of
+r1to
+rto2kad
+rto1ka
+rto2k1a2l
+rto2k1ar
+r2t1o2li
+r2t1oml
+rto2n1a2
+rto2n12
+rt1o1p
+r2t1o2pe
+rt1op1t2
+r2t1or1g2
+r2t1o2rom
+rto1ro
+r2t1orr
+r2t1ors2
+r2t1orv
+r2t1os2z
+rte3re1j
+r1t
+rt1e
+rte2re
+rt1p2
+rt2rk
+rt1r
+rt2s12n.
+rt1s
+rt1s2p
+rt2s3zr
+rt21s1z
+rts2z
+r2t1kl
+r1t
+rt1kl
+rt1k
+r2t12l1se
+rt1l
+rtn3n
+rt12rk
+rt1r
+rt1rm
+r2t1s2s2z
+rt12vez
+rt1ve
+rt2h
+r1t
+rt1
+rtks2z1
+rt1k
+r2t1rkd
+rtr1k
+r2t1rl
+r2trl
+rt1r
+rt1pl
+rt1pr
+rt1ps
+rt2rad
+rt1ra
+r1t2raf
+r1t2ranz
+r1t2rg
+rt1r
+r1t2ri1
+rt1ri
+r1t2rik
+r1t2ril
+r1t2ri1
+r1t2rn
+rt1r
+r1t2r
+rt1sk
+rt1sl
+rt1sp
+rt1st
+rts2z2
+rt1t2r
+r2t1udv
+r1tu
+r2t1ugr
+rtu2k
+r2t1u1k
+r2tunik
+rtu1ni
+r2tu2ra1i
+rtu1ra
+rtu2ral
+rt1u2r
+rtu2s1ze
+rtus2z
+r2t1j
+r1t
+r2t12s
+r2t1g
+r1t
+r2t1ld
+r2t12l
+rt11l
+r2t1t
+r2t12v
+rt12z
+r1t
+r2tying
+rt2y
+r1tyi
+rty2j
+rty2s
+r1t2zi
+rt2z
+1ru
+ru2ac
+ru1a
+ru2b1i2k
+ru1bi
+rub1t2
+ru2c3h
+ru2c2z
+2r1udv
+rue2l
+ru1e
+rue2r
+2rugar
+ru1ga
+2r1u2gat
+rug3g
+2r1ugr
+ruhs1s
+ru1h
+2r1ujj
+ru1k2l
+2ruk1tu
+2ruk1t
+rum1agr
+ru1ma
+ru2maj
+ru2mal
+ru2maz
+ru2m1eng
+ru1me
+ru2mer
+ru2mes
+ru2ml
+ru1m
+ru2m1i2k
+ru1mi
+rum1ill
+ru2m1i2p
+ru2mis
+ru2m1iv
+ru2miz
+ru2m
+ru2mol
+ru1mo
+ru2m1o2r
+ru2m
+ru2m
+ru2m
+2r1unc
+run2da
+ru2ni1
+ru1ni
+ru2nit
+r1u2nok
+ru1no
+ru2pad
+ru1pa
+ru2pe
+ru2p1il
+ru1pi
+ru2p
+ru2rad
+ru1ra
+ru2ra1i
+r1u2ral
+ru2ras
+ru2rat
+r1u2raz
+ru2rn
+ru1r
+ru2rt
+2r1urb
+ru2ruk
+ru1ru
+rus1abl
+ru1sa
+ru2sad
+ru2sal
+rusa2n
+rus1an2y
+rusa2r
+rus1a1ro
+ru2sas
+ru2sl
+ru1s
+ru2s1iz
+ru1si
+ru2s2r
+ru1s
+ru2s1ol
+ru1so
+ru2s12
+ru2s
+russ2
+rus2s2z2
+rust2
+rus1t1ra
+ru2s12
+ru2sz12p
+rus2z
+ru1s1z
+ru2szip
+ru1s1zi
+r1u2tac
+ru1ta
+r1u2tak
+r1u2tat
+r1u2taz
+2r1utc
+r1u2t2.
+ru1t
+r1u2tb
+r1u2td
+r1u2t1i
+r1u2tj
+r1u2tk
+r1u2tn
+ru2t1p2
+r1u2tr
+r1u2ts
+r1u2tt
+r1u2tv
+1r
+r1da2
+r2da2d
+r2d1al
+r2d1ar
+r2d1
+r2de2l
+r1de
+r2din
+r1di
+r2du
+r2d
+r2d3z
+r1gr
+2r1jd
+r2j
+2r1jk
+r2jon
+r1jo
+2r1js
+2r12r.
+2r1rb
+2r1rh
+2r12ri
+2r1rk
+2r1rn
+r2ro
+2r1rr
+2r1rt
+r2s1z
+rs2z
+r2t1a2l
+r1ta
+2r12t1e2
+2r12t2.
+r1t
+r2tr
+r2tit
+r1ti
+2r1tk
+2r1t1le
+2r1tm
+r1to2
+2rts
+2r12t
+2r1tv
+r2zsad
+rz2s
+r1z1sa
+r22z1se
+1r
+r2d
+r2d
+2rgyn
+rg2y
+r2ha
+r2la
+r2l
+r2led
+r1le
+r2les
+r2lp
+r1l
+r2lr
+r2l
+r2l1o
+r2l
+r1l2
+r2l1n
+r2l1z
+r2l1g
+r1l
+r2lu
+r2l
+r2l2l
+r1l
+2r1nn
+2r12n
+r2r
+1r2r
+r2te
+r2t
+r2t
+r2t
+r2v
+r2ze
+r2z
+1r
+r1gr
+r1kl
+r1pr
+2r12r.
+2r1rh
+2r1rm
+r2r
+2r1rt
+r2s1orr
+r1so
+rs1or1s
+r1sp
+r1st2r
+r2v1a1g
+r1va
+r2v1akc
+rva2lap
+rva1la
+r2v1alj
+r2v1alk
+r2v1a2rn
+rva1r
+rva2sb
+rva1s
+rva2sk
+rva1s
+rva1su2
+r2v1a2s1z
+rvas2z
+rva1t2r
+rva1v2
+r2v11ga
+r1v
+rv2gyi
+rvg2y
+r2v1llam
+rvl1la
+r2v1l1lo
+rv1llv
+rv2nya2d
+rvn2y
+rv1nya
+rv2nya2n
+rv2ny1
+r2v1p
+rv2r1a2l
+rv1ra
+r2v12ram
+rvro2s1os
+rv1ro
+rvro1so
+rv12r2
+r2v12ss
+rv1s
+r2v11ta2
+rv2tors2
+rv1to
+r2v1e2b
+r1ve
+r2v1e2d2z
+r2v1e2gye
+rveg2y
+r2v1e1la
+rv1e2led
+rve1le
+rve2lemb
+r2ve2le1me
+rv1e2les
+r2v1elk
+r2v1ell
+r2v1e1lo
+r2v1e2l1a
+rve1l
+rv1e2l1
+r2v1e2lkp
+rvel1k
+r2v1elr
+r2velz
+r2v1en1g2
+r2v1ep
+rve2r1a
+rve2r12
+r2v1e2retn
+rve1re
+rvers3s
+rve1r
+rve2rip
+rve1ri
+rve2r1o
+r2v1e2r1i
+rve1r
+r2v1e2se1te
+rveset2
+rve1se
+r2v1e2ss
+rve1s
+r2v1ex
+rv11ke
+r1v
+rv1kk
+rv1kn
+rv11k
+rv12lel
+rv1le
+r2v12l
+rv2ny1e2l
+rvn2y
+rv1nye
+r2v1p
+r2v12rem
+rv1re
+r2v12r2.
+rv1r
+r2v12rs
+r2v1rp
+r2v1r1t
+r2v1rv
+r2v12vet
+rv1ve
+r2v11vi
+rv1fr
+r2v1i1do
+r1vi
+r2v1i1ga
+r2v1i2gaz1
+r2v1i1g
+r2v1ik
+r2v1inf
+rv1in1te
+r2v1in1t
+r2v1i2p
+r2vi2rn
+rvi1r
+r2v1is1me
+rvis3s1ze
+rvis2s2z
+r2v1ital
+rvi1t2a
+rvi2z1a2
+rvi2z12
+rvi2z1eltett
+rvi1ze
+rvizel1te
+rvi2z1elv
+rvi1z1o
+rvi2z
+r2v12r
+r1v
+rv1ze2
+rv2zel
+rvz1es
+rv1kl
+rv1kr
+r2v1ob
+r1vo
+r2v1olv
+rvonala2d
+rvo1na
+rvona1la
+rvona2l1a1da
+r2v1op
+r2v1or
+rv1os2z
+r2v1ov
+r2v12h
+r1v
+r2v11r
+rv1ss
+r1v
+rv1s
+r1v
+rv1pr
+rv1sk
+rv1sp
+rv1st
+rv1tr
+r2v1ub
+r1vu
+r2v1u2t
+r2v1g
+r1v
+rv2l
+r2v11l
+r2v11l
+r2v1lt
+r2v1t
+r2v12v
+r2v12z
+ry2be
+ry2b
+ry2b
+ry12n
+ry2ho
+ry2j
+ry2na
+ry2ne
+ry2ra
+ry2re
+rys2n
+ry2t
+ry2t
+ry2va
+ry2ve
+r2z1a2dot
+r1za
+rza1do
+r2z1a2la
+r2z1alj
+r2z1alk
+r2z1alms
+rzal1m
+rza2s2z
+r2z1a1s1z
+rza2tal
+rza1ta
+rza2t1e2
+rza2tol
+rza1to
+rzava2r1odv
+rza1va
+rzava1ro
+r2z1ll
+r1z
+r3z2r12r
+rz1r
+rz2se
+rzs3s
+r2z1e2be
+r1ze
+rze1p2
+rz1est
+rze2tal
+rze1ta
+rze2t1eg
+rze1te
+rze2t1e2l
+rzetes3s
+rze2t1o
+rzet2kt
+rze1t
+rzet1k
+rz1na2
+r1z
+rz2n1al
+rz2na1t2
+rz2n
+r2z1rm
+rz2so
+rzi2ab
+r1zi
+rzi1a
+rzis3s2
+r2z1n
+r1z
+rzo2r1l
+r1zo
+rzo1r
+rz2s3zr
+r1z
+rz21s1z
+rzs2z
+rz1a2
+r1z
+rz1e2
+rz1p2r
+rzs1a1la
+rz2s
+r1z1sa
+rzs1an2y
+rzs1a1pa
+r2zsaz
+r2z3s2r.
+r1z1s
+rz3seben
+r1z1se
+rzse1be
+r2zs1e2g
+r2zs1e2r
+r2z3sg
+r1z1s
+r2zs1k
+r2zs12r.
+r2zs1va
+r2z2s1i1ga
+r1z1si
+rz2s1inj
+rzs1int
+r2zsip
+r2zsi1ta
+r3zs2r
+r1z1s
+r2zs1or
+r1z1so
+r2zs1r
+r1z1s
+r2z1s12
+rzs1s
+rzs1u2t
+r1z1su
+rzs1r
+r1z1s
+r2zs1lt
+r1z1s
+rzu2sak
+r1zu
+rzu1sa
+rzu2sa2n
+rzus3s2
+rzu2s3z
+r2z1ut
+2s.
+1sa
+2sa1bo
+2sabr
+2s1abs
+2s1a2c
+s1a2da1l
+sa1da
+2s1adap
+2s1a2da1ta
+2s1a2da1to
+2s1ada1t
+sads1s
+sa1d
+2s1adm
+sa2dog
+sa1do
+sa2dc
+sa1d
+sa2dd
+sa2d1
+sa2dh
+sa2d1i
+sa2dj
+sa2dm
+sa2dn
+sa2dr
+sa2d1u
+sa2dz
+sae2r
+sa1e
+sa2p
+sa1
+sa1f2r
+sa2g1l
+sa1g
+2s1a2g
+sa2g
+s2a1g1r
+s1ag2y.
+sag2y
+s1agyb
+s1a2gyo
+sa2gy
+3sa2h.
+saha2r
+sa1ha
+sa2hov
+sa1ho
+sa2ig
+sa1i
+sa2jg
+sa1j
+2sajn
+sa2j1
+saj2tal
+saj1ta
+saj2t1a2n
+saj2tar
+sajt2r
+saj1t
+saj2t11r
+saj2tor
+saj1to
+saj2t1
+saj2t12
+s2a2k1ab
+sa1ka
+2s1a2kad
+s2a2k1an
+sa2kas
+2s1ak1ci
+sak2k1a2r
+sak1ka
+sak2k1as
+sak1ke2
+sak2k1eg
+sak2k1er
+sak2ke2s
+sak2kis
+sak1ki
+sak2kol
+sak1ko
+sak2k1orr
+sak2k12
+2sak1ku
+sa1k1lu
+2s1akn2a.
+sak1na
+2s1aknb
+sak1n
+2s1akn1i
+2s1aknk
+sak1o1la
+sa1ko
+s2a2k1orm
+sa2k1s
+sa1k
+sa1k2ru
+2s1ak2t.
+2s1ak1ti
+2s1ak1tu
+sa2k1ug
+sa1ku
+2s1a2kus
+sa1k2va
+2salab
+sa1la
+sa2la2g1
+sala2ka
+s1a2la1ku
+2s1a2la1pa
+sa2la1p
+sa2lapl
+sa2lapoz
+sala1po
+s1a2lapr
+sa2lapt
+sal2da
+sa1l
+2s1a2l1
+saln1n
+sals1s
+2s1a2l1t
+2s1alb
+s1a2lel
+sa1le
+s1a2l12p
+sa1l
+s2al2t
+sa2l11te
+2salf
+2s1algh
+sal1g
+2s1alg1i
+2s1algn
+2s1algsat
+salg1sa
+2s1alja1i
+sal1ja
+2s1aljh
+sal1j
+2s1aljr
+2s1alj2t.
+2s1al1ka
+2s1alkot
+sal1ko
+s1al1ku
+2salm
+2s1a2lomn
+sa1lo
+2s1a2lomr
+sal2tag
+sal1ta
+2s1al1te
+2s1alth
+2s1altit
+sal1ti
+sa2m1an2y
+s2aman
+sa1ma
+sa2mec
+sa1me
+sa2m1il
+sa1mi
+sa2mol
+sa1mo
+sa2m1os2z
+s2amos
+2s1a2m
+sa2nal
+sa1na
+sa2nat
+s2and
+2sa1ne
+sa2nek
+2s1ang2y
+sa2nd
+sa1n
+sa3n
+s1an1te
+sa2ny2a.
+san2y
+sa1nya
+s1a2nyag
+sa3nyar
+2sa1ny
+sa2r
+sa1
+sa2p1a2d
+sa1pa
+sa2p1a2g
+sapa2te
+sa2pc
+sa1p
+sap12c2s
+sap1ll
+sa2p1tm
+sa2p1to
+sa2p1el
+sa1pe
+3sap1ka
+3sapkb
+sap1k
+3sapkn
+3sapks
+3sapkt
+3sapkv
+sa2p1os2z
+sa1po
+s1a2pkr
+sa1p
+s1a2psab
+sap1sa
+2sapp
+s1ap1r
+s2a1p1ro
+2sa1pu
+sa2ra1t
+sa1ra
+sa2ra1t
+sa2rn2y
+sa1r
+sar2c3ho
+sarc2h
+sar2cin
+sar1ci
+sa2rn
+sa1r
+sa2rit
+sa1ri
+sar2j1e
+sar2k1e2
+3sar1ki
+sar2kin
+sar2kir
+sar2k12
+3sar1k
+3sar1l
+2sarm
+2sarom
+sa1ro
+2sarz
+sa1se2
+sa2s1eb
+sa1s2m
+sa1s2po
+sas3s1za
+sas2s2z
+sas3s1z
+sas3s1ze
+2s1as1s1zo
+3sast
+sa2s1u2t
+sa1su
+sa2s
+s1aszf
+sas2z
+2saszt
+sat2a2ks
+s2atak
+sa1ta
+sata1k
+sa2t1alj
+sa2t1alt
+sa2t1a2ny
+s2atan
+satan2y
+sat1a1pu
+s2atap
+sa2t12ra2k.
+s2atr
+sa1t
+sat1ra
+sa2t1r1ka
+satr1k2
+sa2t1rk
+s2atr
+sa1t
+sa2t1rr
+sa2t1i2k
+sa1ti
+sa2t1ing
+s2atin
+s1at1l
+sat1mo1
+2s1a2tom1b
+sa1to
+satom1b2
+2s1a2to1mo
+sa2t1orm
+s2ator
+sa2t12d
+sa1t
+sa2t12n
+sa1t2r
+2sat2y
+sa2ty
+sa2ul
+sa1u
+sa2u1r
+2saut
+sa2u1to
+s1a2ut2.
+sau1t
+saut2r
+s1a2ut1
+sauti2ko
+sa2utik
+saut1i
+3sa2v.
+3sav2a.
+sa1va
+sa2v1a2da
+s2avad
+sa2v1a2l
+3savn
+sa1v
+sav11ra
+s2avr
+sav1ri1a
+sav1ri
+sa2v1rt
+sa2v1el
+sa1ve
+sa2v1r
+sa1v
+sav1ill
+sa1vi
+sa2v1i2n
+sa2v
+sa2v
+sa2xi
+sa2zon
+sa1zo
+1s
+s2b1ak
+s1ba
+s2b1e2l
+s1be
+s2b1e2r
+s2bi2g
+s1bi
+s2b1il
+s2b
+s2buj
+s1bu
+s2b1ut
+s2b
+1s2c1s
+sc2s
+s2gab
+s1ga
+s2ga2d
+sg1a1da
+2s1gadd
+s2gal
+s2ga2n
+s2gas
+2s1ga2s.
+sg1ass
+s2gat
+2s12gaz
+s2g1l
+s1g
+s2g12rak
+sg1ra
+s2g1rn
+s2g12ru
+s2g1e2
+s2gp
+s1g
+s2g1i2ko
+s1gi
+s2g
+s2g1os2z
+s1go
+s2g12
+s2g1
+s2g
+sg1s
+s2g
+s2g
+4s12g2y
+sgy1a2d
+s1gya
+s1ka2
+s2kal
+s2k1an
+s2kar
+s2kt
+s1k
+s2k1e2
+skkz1
+sk1k
+s2k1
+s2k
+s1lc
+s2l1in
+s1li
+2s1lm
+s12lomb
+s1lo
+3s1m
+sn2c1
+sn2c3so
+snc2s
+sn1k2r
+s2n
+s2p1ost
+s1po
+s2rad
+s1ra
+sr1a1d
+sr1a2d
+s2r1ag
+s2raj
+2s12ra2k.
+s2ra1ka
+2s12rakb
+2s12rakh
+2s12rakk
+2s12rakn
+2s12ra1ko
+2s12rakr
+s2rakt
+s2r1a2l
+2s12ram
+s2r1a2n
+2s2ras
+sr1ass
+sr1as2z
+2s12rat
+s2r2g
+s1r
+s2r1l
+sr1d2
+s2r1e2
+2srt
+s1r
+s2r1v
+s2ri2a.
+s1ri
+sri1a
+2s12ri1
+sr1i1ko
+s2r1i2p
+s2r1i2s
+s2r
+sr1k2
+s2r1os2z
+s1ro
+sr1ott
+sr11ni
+s1r
+s2r
+s2r
+srr2tegek
+sr1r
+srr1te
+srrte1ge
+2sr1ro
+sr1s2
+srt2
+sr1tr
+s2rug
+s1ru
+2s12ruh
+2s12rul
+2s12rus
+s1r2
+2s12r2.
+s2r
+s2s1ad
+s1sa
+s2sar
+s2ss
+s1s
+s2s1e2
+s2sis
+s1si
+ssks2z1
+ss1k
+s2s
+2s1s2.
+s2s12r
+2s12sv
+s2s
+s2s
+ss3s2z2
+s2s3za
+ss2z
+ssz2r1a2d
+s1s1z
+ssz1ra
+2s12s1zo
+2s1ta
+s12tad
+s2t1alj
+s12t1l
+s1t
+s12t12z
+2s1tb
+2s1tc
+2s1td
+2s12t1e2
+2s1t
+s2t12l
+2s1tf
+2sth
+2s1ti
+s2t1ir
+2s12t
+2stj
+2stk
+2s1tm
+s12tokt
+s1to
+3stor
+stks2z1
+s1t
+st2ks
+st1k
+2s12t1
+3st1ra
+3st1r
+s1t1re
+2sts
+2stt
+s1t1t
+2s1tu
+2s12t
+2stv
+s1t1ve
+s1t1v
+s1t1vi
+3s2v.
+s2v1a2d
+s1va
+sva2l
+s2v1a2r
+s2v1l
+s1v
+s2v12r
+3svb
+s2v1e2
+s2v1rz
+s1v
+s2vis
+s1vi
+s2viz
+3svj
+s2v1or
+s1vo
+s2v
+3svr
+3s1v
+3svv
+sba2l1
+s1ba
+sbe12
+s1be
+sbr2c2s
+s1b
+sb2lo
+sb2l
+sb2ra
+sb2ri
+sb2ro
+sb2r
+sb2ru
+scar2
+s1ca
+1schei1e
+sc2h
+s1c1he
+sche1i
+sc3hen
+sc3het
+sc3h2.
+s1c1h
+1schb2e.
+sch1be
+sc3hd
+1sch1re
+sch1
+1sch1re
+sc3hs
+sc3h2i.
+s1c1hi
+sc3hig
+1schil
+sda2dal
+s1da
+sda1da
+sda1i2
+sde12
+s1de
+sde1b2
+sde2del
+sde1de
+sde1kr
+sdes2
+sde1sp
+sde1st
+sdesz2t
+sdes2z
+sdi2a1le
+s1di
+sdi1a
+sd2ra
+sd2r
+sd2ro
+sd2ru
+1se
+sea2d
+se1a
+sea2l
+sea2n
+se2l
+se1
+se2r
+se2bag
+se1ba
+se2b1ak
+seb1alt
+se1b2
+se2b1g
+se2br
+se2b1e2g
+se1be
+seb1ell
+seb1elz
+se2b1esh
+seb1e1s1ze
+sebes2z
+s1e2bd
+se1b
+3sebs
+se2b12
+se2b
+se2b12
+seb1s
+se2b1u
+se2b
+se2b2l
+se1b
+3seb1z
+secs1a2p
+sec2s
+se1c1sa
+se2csev
+1se1c1se
+se2cs1k
+se1c1s
+2sedez
+se1de
+sedl1
+se1d
+2s1e2dn2y
+se1d1ra
+se1d2r
+se2d1z
+sed2z
+se2d1z
+see2l
+se1e
+see2n
+2seff
+se1f2ra
+2s1e2ger
+se1ge
+3segd
+se1g
+2segr
+segs3s
+s1e2gs2z1
+2segt
+3segg
+seg2ga
+seg2go
+3se1g
+se2gyed
+seg2y
+se1gye
+segy1e2l
+s1e2gy
+2s1egyh
+segyhzkz1
+segy1h
+segyhz1k
+2s1e1gy
+se2r
+se1
+sej2t1a2
+sej2t1e2n2y
+sej1te
+sej2ter
+sej2t2r
+sej1t
+sej2t1o
+sej2t
+seka2r
+se1ka
+se2k1l
+se1k
+2s1e2k2s.
+se1k
+sek2k1
+sek2kos
+sek1ko
+sek2k1
+se1k1lu
+se1k2ra
+se1k2r
+se2kur
+se1ku
+se2kr
+se1k
+sel1ak
+se1la
+se2ll
+se1l
+2selb
+s1el1d
+2s1e2lef
+se1le
+s1e2leg2y
+se2l1e2h
+se2l1e1k
+s1e2lemek
+sele1me
+2s1e2le1m
+se2lemk
+se2lemm
+2s1e2lemz
+se2l1e1re
+s1e2le1s
+sele2s2z
+se2l1e1s1z
+sele2t1a2
+sele2t1e2l
+sele1te
+sele2t12r.
+sele1t
+se2l1e2v
+se2l1e2v
+sels3s
+se1l
+2self
+2s1el1ha
+2s1elhel
+sel1he
+s1el1ho
+sel1id
+se1li
+se2lis
+s1el1j
+s1el1l
+2s1elml
+sel1m
+seln2k1l
+s1elnk
+sel1n
+seln1k
+2s1eln2y
+s1e2l1os
+se1lo
+2s1e2l
+se2lad
+se1l
+sel1a
+sel1e2
+s1e2l1
+2s1e2lz
+2selr
+s1el1ta
+s1el1t
+s1eltet2t.
+sel1te
+2s1el1t
+2s1el2v.
+2s1elvek
+sel1ve
+s1el1v
+2s1elvv
+2selz
+2sember
+sem1be
+s1embe2r.
+s1emberb
+sembe2r1e2k1r
+sembe1re
+sembere1k
+s1embern
+2s1embr
+2semn
+se1m
+2sem1l
+se2nat
+se1na
+se2n1l
+se1n
+sen2d1a
+sen2d1
+s1e2ner
+se1ne
+sens3s
+se1n
+2s1enged
+sen1ge
+sen1ist
+se1ni
+se2n1or
+se1no
+s1en1ta
+seny1a2g
+sen2y
+se1nya
+seny1ak
+se2ny12
+seny1ell
+se1nye
+seny1e1re
+se2ny1l
+se1ny
+se2ny12r.
+se2nyr1d2
+se2nyr1te
+2s1enyh2i.
+seny1hi
+se2nyi1g
+se1nyi
+se2nys
+se1ny
+se2nyu
+se2ny
+se2ny12l
+se1ny
+2s1enyv2e.
+seny1ve
+s1enz
+se2r
+se1
+se2pid
+se1pi
+s1e2piz
+sep2pa
+sep2p12
+sep2per
+sep1pe
+2sep1ri
+se1p2ro
+se1p2r
+se2r1ag2y
+se1ra
+se2ral
+se2ram
+se2r1a2n
+se2r1a2r
+se2r1as
+se2ra1u
+se2r12g
+se1r
+ser1ll
+se2rr
+s1er1de
+2s1er1d
+s1e2redm
+se1re
+sereg1g
+3seregs
+2serej
+se2r1e2le2m.
+sere1le
+se2r1e2l
+se2r1elt
+se2r1elv
+sere1p2
+sere2pe1d
+sere1pe
+se2r1e2sz2e.
+seres2z
+sere1s1ze
+ser1eszk
+sere1t
+se2r1szb
+se1r
+sers2z
+se2r1i2ga
+se1ri
+se2r1il
+seri2n
+se2r1i1na
+ser1inf
+ser1ing
+ser1int2
+se2ris
+se2riz
+ser1k
+se2r1ol
+se1ro
+se2r
+s1erz
+2se2r
+s1er2.
+s1erb
+s1erd
+s1er1
+s1erf
+s1erk
+s1erm
+s1ern
+ser12s.
+s1ert
+s1erv
+ser1s
+sert2
+ser1tr
+se2r1g
+se1r
+ser1v2
+2s1ese1m
+1se1se
+ses1ern
+2s1e2se1t
+2s1esl
+se1s
+2s1e2ss
+2s1es1k
+2s1e2s
+se1s2p
+ses1s1z1a2
+ses2s2z
+sessz2l
+ses1s1z
+ses1s1z1o
+2s1es1te
+2s1estly2i.
+ses1t
+sestl2y
+sest1lyi
+2s1estlyib
+2s1estlyi1
+2s1estlyi2k.
+2s1estlyi1ki
+2s1estlyis
+2s1estlyit
+se1s1ti
+s1eszen
+ses2z
+se1s1ze
+2seszk
+s1esz1k
+2s1eszm
+2s1e2s1z
+se2t1a2la
+se1ta
+se2ta1na
+se2t1a2n2y
+se2tt
+se1t
+se2t1e2g
+se1te
+set1eleg
+sete1le
+se2t1elk
+se2t1elm
+2setenk
+2sete2s.
+2sete1se
+2s1e2te1t
+2s1e2te1t
+se2t12j
+se1t
+set2k
+se2t1kb
+se2t11k
+se2t12l
+se2t1nk
+se2t12r.
+se2t12ri
+se2t1r1t
+se2ti1ka
+se1ti
+se2ti1k
+se2t1ing
+se2tol
+se1to
+set1old
+se1tran
+set1ra
+se1t1ri
+se1t2ro
+2sette1k
+set1te
+2settk
+2sett1n
+se2t
+se1
+2s1e2vs
+se1v
+2s1e2v
+se1ye
+se1y
+se1yi
+s1ezr
+1s
+2s1br
+s2f1a
+s2f1
+s2g1a2
+s2g12
+3sg2e.
+s1ge
+s2g1eg
+3sge1i
+3sgek
+sg1e1le
+sge2lem
+s2g1ell
+3sgem
+s2g1ent
+s2ger
+sg1erk
+s2g1es2z
+s2ge1t
+s2g1e2ti
+s2gev
+sg12je
+s1g
+s2g12jn
+sg1j
+s2g12k
+s2gp
+s2g12r.
+s2g12r
+s2g1rn
+s2g1rr
+s2g1r1t
+sgrt2
+s2g12r
+s2g1rv
+sg1s2z
+sg3g
+sg1i1ga
+sgi2g
+s1gi
+s2g1i2g
+sg1ist
+s2g
+3sgk
+s1go2
+s2g1ok
+s2gol
+s2g12
+s2g2r
+s1g
+s2g2
+s2g1r
+sg1s
+sg1s
+s2gu
+s2g
+3s1g
+s2g12l
+sg1lt
+2s12h.
+2s12h2e.
+s1he
+2s12hek
+2s12hes
+2s12het
+2s12h
+2s1hh
+2s1hr
+2s1hs
+s2jem
+s1je
+s12ji
+s1js
+s2kek
+s1ke
+s1k1ho
+2s1km
+2s1ks
+s2k1
+s2lel
+s1le
+s12let
+2sll
+2s1lm
+slks2z1
+s1l
+sl1k
+s2l
+2sl2y
+s2lya
+s2lyeg
+s1lye
+3s1m
+s2mu
+s12nekb
+s1ne
+2s12ne1ke
+s12ne1k
+2s12nekh
+2s12ne1ki
+s12nek1k2
+2s12nekl
+2s12nekn
+s12nekr
+s12nek1t2
+s12ne1k
+2s12p
+2s12p
+s2ral
+s1ra
+s2ran
+s2rt
+s1r
+2srb
+2src
+s1r1de
+s2r1
+s1r
+s2ri1e
+s1ri
+s2ri2g
+s1rlel
+sr1le
+2srm
+s3r
+2srr
+s1rt1ke
+sr1t
+3srvb
+s1rve1i
+sr1ve
+3srvem
+3srves
+3srvh
+3srvr
+3srvv
+4s1ry
+2s1rz
+2ss1di
+2sse1ki
+s1se
+s2s1el
+3ss1f
+2ss2s2z2
+2ss1t
+ssz1ak
+ss2z
+s1s1za
+s22s1z1
+s2sz1emb
+s1s1ze
+s2szez
+s2szir
+s1s1zi
+s2s1z1o
+ssz3s
+st1abl
+s1ta
+s2t1a2d
+2stk
+s2t1o
+s1t2
+s2t1r
+2str
+2stt
+2stv
+2s12v.
+2s12vad
+s1va
+2s1vb
+2sv2e.
+s1ve
+2s12ved
+2s12ve1i
+2s12vek
+2s12ven
+2svet
+2svb
+s1v
+2s12v1i
+2svn
+2svt
+2svv
+2s1vf
+2svh
+2sv2i.
+s1vi
+2s1vk
+2s1vn
+2s1vr
+2s1vt
+2s12v
+2s1vv
+sfa3ga2c
+s1fa
+sfa1
+sfa2ga
+sfa2gy1al
+sfag2y
+sfa1gya
+sfeny12
+s1fe
+sfen2y
+sfe1ny
+sf2m
+s1f
+sf2m1e2kh
+sf1me
+sfme1k
+sf2m1
+sf2mi
+sfi12
+s1fi
+sfi1
+sfi21ra
+sfi2t
+sf2le
+sf2lo
+sf2l
+sf2lu
+sfo2k1t
+s1fo
+sfo1k
+sf2ra
+sf2r
+sf2re
+sf2ri
+sf2r
+sf2ro
+sf2r
+sga1b2
+s1ga
+sga1d2
+sga1p2
+sga1tr
+sga2z1
+sge2o
+s1ge
+sg2le
+sg2l
+sg2n
+sgr2cs12l
+s1g
+s3g2rc
+sgrc2s
+sgr1c1s
+s1g2ra
+sg2r
+sg2ri
+sg2r
+sha2k
+s1ha
+shely2k
+s1he
+shel2y
+she1ly
+1s2h2i.
+s1hi
+1s2hih
+1s2hij
+1s2hik
+shitkz1
+shit1k
+s2horr
+s1ho
+s2how
+sh2sr
+s1h
+sh1s
+shs1s
+1si
+si2ac
+si1a
+sia2d
+si2a1
+si3ak
+sia2l
+sia2n2y
+si2ro
+si1
+si2b12
+sibilis1
+si1bi
+sibi1li
+sids1s
+si1d
+si2de1a
+si1de
+si2de1
+si2deg
+si2de1i
+si2den
+si2de1o
+s2idet
+2si1d
+s1i2dn
+si2dom
+si1do
+2s1i2d
+si2du
+si2eg
+si1e
+sie2l
+si2en
+2s1ifj
+2si1ga
+s1i2ga1zo
+2si1g
+2si1ge
+s1i2g2e.
+s1i2gek2
+s1i2ges
+2s1i2g
+sig2na
+sig2n12
+2si1ha
+3sihed
+si1he
+2s1ihl
+si2k1a2n
+si1ka
+sike2r1e2sett
+si1ke
+sike1re
+sikere1se
+sike2r1es2z
+sike2s
+si2k1in
+si1ki
+si2k1i2r
+si2k1old
+si1ko
+s1i2konh
+s1i2konj
+2s1i2konk
+s1i2konn
+2s1i2ko1no
+s1i2konr
+2s1i2kont
+s1i2ko1nu
+sik1orr
+si1k1r
+sikus1s
+si1ku
+2s1i2md
+si1m
+si2m1el
+si1me
+si2m1in
+si1mi
+s1i2mit
+3si1m
+3simog
+si1mo
+2simp
+s1impor
+sim1po
+si2m1u2t
+si1mu
+2s1i2nas
+si1na
+2sind
+s1in1du
+si2ner
+si1ne
+2sinf
+s1in1g
+s1inget
+sin1ge
+s1in1g
+s1ingk
+sin1g
+si2nic
+si1ni
+2sinj
+2s1in1ku
+2s1ins
+s1in1te
+2sinv
+s1in1v
+2s1inz
+si2onn
+si1o
+s1i2o1no
+si21a
+si1
+si21
+si2c
+si21da
+si21e
+si2g
+si2i2k
+si1i
+si21o
+si2p
+si21so
+si21
+2s1i2pa2r.
+si1pa
+2sipa1ra
+2sipa1r
+2s1i2parb
+2s1iparc
+2s1i2parh
+2s1i2parm
+2s1i2parn
+2s1i2pa1ro
+2s1i2parr
+2s1i2par1t
+2s1i2par1t
+2s1i2pa1ru
+3si1p
+3sip1ka
+3sip1k
+3sipol
+si1po
+2s1i2ram
+si1ra
+s1i2rn2y
+si1r
+s1irg
+2s1irh
+2si1ro
+s1i2rod
+2s1i2rn
+si1r
+2sirt
+s1ir1t
+si2sad
+si1sa
+si2sl
+si1s
+si2s1is
+si1si
+si2s12
+sis3s
+sist2
+si2s12
+si2s3zab
+sis2z
+si1s1za
+s1i2tal
+si1ta
+sita2li
+si2t1i
+si2t1
+3sit2y
+si2t
+si1
+2s1i2vad
+si1va
+2s1i2var
+2sivs
+si1v
+3si1v
+2s1i2v
+2si1z
+si2z2.
+si2zb
+s1iz1mo
+1s
+s2g
+s2ja
+s2ju
+s2k1a
+s1ke2
+s2k1er
+s2k
+s2k
+s1na2
+s2nac
+s2nal
+s2nan
+s2n12
+s2n1e2l
+s1ne
+s2n
+2sns
+s2n1
+s2r1ad
+s1ra
+s2r1l
+s1r
+sr2s3z
+sr12to
+s2red
+s1re
+s2r1e2g
+s2r1e2m
+s2re2n
+s2res
+s2r1e2t
+s2r1n
+s1r
+srgombc1
+sr1go
+sr3g2omb
+srgom1b
+s2rir
+s1ri
+s2r
+s12r1a
+s1r
+s2rf
+s2rl
+s2r1p2
+s2r
+sr2t1e2v
+sr1te
+s2r1
+s1sp
+s1st
+st2kol
+s1t
+st1ko
+2s12tl
+sts3s
+stmny1k2
+st1m
+stmn2y
+st1a2
+s1t
+st1e2
+st1p2
+s1tr
+stv2ny12t1a2
+st1v
+stvn2y
+stv1ny
+2s12v.
+s2v
+2s1vb
+s12vek
+s1ve
+s12ve2n
+s12vet
+s2v
+s2v
+s2za
+s2z2e.
+s1ze
+2s1zl
+s1zr
+2s1z
+s2zl
+sje2gy12
+s1je
+sjeg2y
+skala2p12c1s
+s1ka
+ska1la
+skala1p
+skalapc2s
+skala2p1csh
+s1kala2p12cso1ka
+skalap1c1so
+skala2p1csr
+ska1o2
+skapoc2s1
+ska1po
+ska2r1i2m
+ska1ri
+skaros3
+ska1ro
+ska2r2r
+ska1r
+ska1sm
+skat2
+ska1tr
+ska1u2
+1s2klk
+s1k
+sk1l
+1sklr
+ske1p2
+s1ke
+ske1s2p
+sk22p1el
+s1k
+sk1pe
+sk2p1e2r
+ski12
+s1ki
+1s2kicc
+ski1e2
+sk2la
+sk2li
+sk2l
+sk2lo
+sk2l
+sk2lu
+skols1s
+s1ko
+sko1l
+sko2s1a2ra1i
+sko1sa
+skosa1ra
+sk1p2
+s1k
+s1k2r
+s1k2r
+s1k2rit
+sk1ri
+sk2r
+sk2rn
+sk1r
+sk2ru
+sk2va
+sk2vi
+sk2v
+sky1r
+s1ky
+sky1i
+sla1d2
+s1la
+sla2g1e2
+sla1s2p
+sla2t1a2l
+sla1ta
+sl2a2t1a2n
+sla2tel
+sla1te
+sla2tev
+sla2ts
+sla1t
+sl2a2t12t
+1slgereiv
+s1l
+sl1ge
+slge1re
+slgere1i
+1slgerekb
+sl2nyal
+sln2y
+sl1nya
+sls3s
+sle1ga2
+s1le
+sleg1g2
+sle12
+sle2j12ra1to
+sle1j
+slej1ra
+sle2tal
+sle1ta
+sle2t1el
+sle1te
+sle2t1em
+sle2t2l
+sle1t
+sleves1s
+sle1ve
+sl1i2
+s1l
+sl1ke2
+sl2kev
+sl2k1ol
+sl1ko
+sl2ny1e2get
+sln2y
+sl1nye
+slnye1ge
+sl2ny1e2g
+sls3s
+slic2c1elv
+s1li
+slic1ce
+sli2k
+1s2liss
+sls2
+s1l
+s2lus
+s1lu
+sma12
+s1ma
+smarc2
+smas2
+sma1sp
+3s2m2r.
+s1m
+3s2m1ru
+sme2g1a2
+s1me
+sme2g1
+sme2g1o
+smen2tel
+smen1te
+smentks2z1
+sment1k
+1s2mirg
+s1mi
+sn2a2pal
+s1na
+sna1pa
+sna2p1e
+sna2p1or
+sna1po
+snap2s1z1e2
+snaps2z
+sne1yi
+s1ne
+snit2t1elv
+s1ni
+sn2it1te
+sn2h
+s1n
+sn1
+1so
+s1obj
+soda2ne2
+so1da
+soda1
+soda1g
+so2d1e
+so2dn
+so1d
+so2dv
+so2did
+so1di
+so2dis
+so2d
+so2dob
+so1do
+so2d1org
+so2d1os
+so2d
+so2d
+sodrs1s
+sod1r
+so2d
+sod1t
+so2d
+so2d3z
+so2kab
+so1ka
+so2ka1i
+so2k1aj
+so2k1a2la
+so2k1ap
+so2kar
+soka2t
+so2k1a1to
+so2k1l
+so1k
+so2k1rn
+so2k1e2
+sok1ill
+so1ki
+so2k
+3sok2k.
+sokka2l
+sok1ka
+sok2k1a1la
+sok2k1a2p
+2sok1ke
+sok2k1el
+sok2kir
+sok1ki
+sok2k12v
+sok1k
+sok2k1
+2sokl
+2sokm
+so2kok
+so1ko
+2so2kos
+2s1o2koz
+so2k12
+2sok1ta
+s1oktat
+so2k12
+so2k
+2s1o2laj
+so1la
+sol2a2j12r
+sola1j
+sola2je
+sola2tel
+sola1te
+sols1s
+so1l
+2s1ol1da
+2s1ol1d
+2sol1d
+s1old2.
+s1oldk
+s1oldm
+s1oldn
+s1oldr
+s1oldt
+s1oldv
+so2lim
+so1li
+2s1ol1l
+sol12
+so1l
+s1olts
+sol1t
+2s1olvas
+sol1va
+so2lyan
+sol2y
+so1lya
+so2lye2
+s2o2ly
+so2m1ad
+so1ma
+somag1g
+so2m1a2l
+soma2t
+som1a1to
+so2m1e2
+so2ml
+so1m
+so2m11te
+so2mil
+so1mi
+so2m1i1ta
+so2m
+so2m1o1do
+so1mo
+so2m1or
+so2m1os2z
+som1p
+so2m
+so2m
+son2c2h
+2sond
+so2n1e
+son2kl
+son1k
+son2k1e2
+2so1n
+son2tab
+son1ta
+son2t1a2l
+son2t1a2n
+son2tar
+son2t12r
+son1t
+son2t1e2
+sont2r
+son1t
+son2t11r
+son2tik
+son1ti
+son2tip
+son2t
+son2t
+2sonv
+so2nye
+son2y
+so2nyis
+so1nyi
+s1opc
+s1o2pe
+sor1a1da
+so1ra
+sor1a1la
+sor1ll
+so1r
+so2r1tl
+3so2r1e2
+sor1f2
+s1or1gi
+so2rid
+so1ri
+2s1o2ri1e
+so2rif
+so2rim
+so2ris
+3sor1k
+sor1m1
+sormt2
+sor1oszt
+so1ro
+soros2z
+3soro1za
+so2r12
+so2r
+so2r
+2s1or2r.
+s1orrt
+sor1r
+2s1orrb
+2s1orrn
+2s1or1ro
+2s1or1r
+3sor2s.
+sor2sal
+sor1sa
+sor2sar
+sor2sas
+sor2s1e2
+sor1si2
+sor2sir
+2sor1s
+sor2s
+sor1s2z
+sor2szn
+sor1s1z
+sor1t1re
+sor2t
+so1r
+so2r11to2
+so2r
+so2r
+2s1os1to
+2s1ostr
+s1ost2y
+2sos2z
+s1oszl
+s1oszt
+so2ur
+so1u
+so2ve
+so2vis
+so1vi
+so2xi
+1s
+s2g
+s1
+s2r
+scsa1p2
+s21c1sa
+sc2s
+s2d1i
+s1d
+s2dk
+s2dv
+sg2p1e2k
+s1g
+sg1pe
+s1g2r
+si2g
+s1i
+s2v
+s1
+s2k1a2d
+s1ka
+s2kil
+s1ki
+s22kim
+s2k
+s1k2r
+s1m1
+s2n2.
+s1n
+s2ni
+s2r
+s1
+s2ra1i
+s1ra
+s2rb
+s1r
+s2r1i
+s2rj
+s2rm
+s2rn
+s2rr
+s2rt
+s2ri1
+s1ri
+s2s12
+s1s2z
+st2ny1r
+s1t
+stn2y
+st1ny
+s1t2r
+2s1tv
+2s12v
+1s
+s2ga
+s2g
+s2g1e2l
+s1ge
+s2g1em
+s2g1k
+s1g
+sg3g
+s2go
+s2g12l
+s1g
+s2g1lt
+s2g
+s2ka
+s2k1e2l
+s1ke
+s2ki2d
+s1ki
+2s12ko
+s12kr
+s1k
+s2k
+s2lj
+s1l
+s12lz
+s1l2y
+s2na
+s2n
+sn2d1a2
+s2no
+s2n1l
+s1n
+s2n1
+s1ntv
+s2n
+3s2r.
+s2ra
+s2r
+3srb
+2srd
+s2r1ed
+s1re
+s2reg
+s2ren
+sr1f2
+s2r1iz
+s1ri
+3srk
+s2ro
+s2r
+s2r12l
+s1r
+s2r1
+sr1s
+s2ru
+2srv
+s1s2s2z
+s1sv
+s1s2z
+2s1tl
+2s1tv
+2s12v.
+2s1ve
+s1vv
+s12zn
+s1z
+1s
+sa2c
+s1a
+sa2l
+sa2n
+2s2g
+s1
+s1bl
+2sbok
+s1bo
+s2dad
+s1da
+s2dalk
+s2d
+s2del
+s1de
+s2din
+s1di
+s2d12r
+s1d
+s1d1ro
+se2l
+s1e
+se2r
+se2s
+s1gr
+si2r
+s1i
+s1kl
+s1pl
+s1pn
+s1p2r
+s2r1aj
+s1ra
+s2r12csot
+s1r
+src2s
+sr1c1so
+s2riz
+s1ri
+s2rol
+s1ro
+s2r12l
+s1r
+s1r1ti
+s1rz
+s2s1av
+s1sa
+s2sim
+s1si
+ss1orr2a.
+s1so
+ssor1ra
+s2s1or1r
+s1s2p
+s1s1ta
+s1st2r
+s1s2
+s2s1l
+s2s1t
+s2szap
+ss2z
+s1s1za
+s2sz1ll
+s1s1z
+ssz2k
+s1s1z
+ssz11k
+s2s1z1
+spa2d1a2
+s1pa
+s2pa1tu
+s2pj
+s1p
+sp2n1a2
+1s2prg
+1s2peci1a
+s1pe
+spe1ci
+1specifi1ku
+speci1fi
+1spektrumo2k.
+spekt1ru
+spektru1mo
+1spektrumo1ka
+1spektrumok1k2
+1s2pe1ku
+1s2pk
+s1p
+s2p1r
+1spir1l
+s1pi
+spi1r
+spis3s
+sp2la
+sp2le2
+s1p2l
+sp2lu
+sp2ne
+1s2pong
+s1po
+spor1ta2
+spor2t1al
+1s2por2tg
+spor1t
+spor2t1l1la
+spor2tr
+3s2portb
+spor2t1e2
+1s2por1t
+spor2t1rd
+1s2porth
+spor2t1i2n
+spor1ti
+1s2portj
+1s2portn
+1s2porto1ka
+spor1to
+1s2portol
+sport1orszg1
+spor2t1ors2
+sportors2z
+sportor1s1z
+3s2portot
+spor2t1
+spor2t
+1s2port1ra
+1s2port1r
+1s2por1tu
+spor2t12
+1spr2k.
+s1p
+sp1r
+1sprol
+sp1ro
+sp2ra
+s1prak
+3spray
+s1p2re
+s1p2r
+1spric
+sp1ri
+s1p2ro
+s1p2r
+sp2s2z
+1s2raf
+s1ra
+sra1u2
+1s2r1co
+s1r
+sren2d12
+s1re
+3s2rf
+s1r
+sr2de
+s1r
+ssab2b1i
+s1sa
+ssa2vo
+ssg3g
+s1s
+ss2g1e2l
+s1s
+ss1ge
+ss2g12j
+ss1g
+ss2gid
+ss1gi
+s2s1kt
+s2s1i2z
+s1si
+ss2kl
+ss1k
+ss2ko
+ss1k2r
+ss2l
+ss2p
+s1s2r
+ss3s2z
+ss2tad
+ss1ta
+ss2tar
+ss2tat
+s1s2t
+ss2to
+s1st2r
+ss2t
+s2s1u1ra
+s1su
+ssy1r
+ssy1t
+s2s2z
+ssza1e2
+s1s1za
+s2sza1p2r
+sszat2
+ssza1tr
+ssz12g
+s1s1z
+ssz12ruk
+ssz1ru
+ss2z12s2z
+s3sze1d
+s1s1ze
+ssze2g12r.
+ssze1g
+sszeg2l
+ssze1g
+ssze2g11l
+s3szekv
+ssz1e2l1a
+ssze1l
+s3szemb
+s3s2zeml
+s3szemm
+ssze1p2
+ssze2re1se
+ssze1re
+sszer2t12r
+sszer1t
+sszer2v1e2reik
+s3szerv
+sszer1ve
+sszerve1re
+sszervere1i
+ssze1t2r
+s3sz1ki
+s1s1z
+ssz12l
+s2sz1r1in
+ssz1ri
+s3sz1to
+s3szi1ge
+s1s1zi
+s2sz1ing
+sszis1s2
+ssz2vel
+s1s1z
+ssz1ve
+ssz1k2
+ss2zks2z1
+ssz1k
+s3szob
+s1s1zo
+ss2z1os2z
+ssz11s
+s1s1z
+s3szc
+s1s1z
+s3szr
+ssz1s
+s3szv
+ss3z1si
+ssz2s
+sszt2
+ssz1t1ro
+s3szur
+s1s1zu
+sszus1s2
+ssz12r.
+s1s1z
+1stabil
+s1ta
+sta1bi
+1s2tadi1o
+sta1di
+st1a2d
+1s2ta1f
+s2t1alj
+s2t1al1k2
+sta2n12cso1k
+sta1n
+stanc2s
+stan1c1so
+1standar1do
+stan1da
+sta2n12r
+sta1n
+stan2s1
+s2t1a2nyag
+stan2y
+sta1nya
+s2tarc
+1s2t2ar2t.
+star2tas
+star1ta
+1s2tartos
+star1to
+1s2tartot
+1s2tartt
+sta1sl
+sta1s2t2
+1statisztik
+st2atis
+stati2s2z
+sta1ti
+statisz1ti
+sta1t2r
+stau2t
+sta1u
+s2t1a2x
+st1a1zo
+1s2t2b.
+s1t
+1s2tbj
+1s2tbk
+1s2tbn
+1s2tbot
+st1bo
+s2t12g.
+st1ld
+stn2c1ol
+stn1co
+stn2s12
+st2ri1
+st1ri
+s2t1r1ka
+str1k2
+s2t1r1k
+st12t1a2
+st1ts
+1s2t1tu
+st1tv
+st1br
+st1dr
+s2t1e1b
+s1te
+s2tedn
+ste1d
+s2t1e2g2y
+s2t1e2k2e.
+ste1ke
+s2t1elf
+s2t1elh
+s2t1ellen
+stel1le
+s2t1elm
+s2t1e2lo
+s2t1e1l
+s2t1e2l
+s2t1elr
+s2t1elt
+s2t1elv
+s2t1ember
+stem1be
+s2t1e2mel
+ste1me
+s2t1eml
+ste2n1a
+ste2n1
+ste2ne2g
+ste1ne
+ste2n1s
+ste1n
+ste2nos
+ste1no
+ste2n12
+1s2tepp
+ste2rad
+ste1ra
+ste2raj
+ste2ral
+ste2rav
+ste2rc
+ste1r
+ste2rl
+ste2r1e2le
+ste1re
+ste2r1ember
+sterem1be
+1s2teri1li
+ste1ri
+ste2r1int2
+ste2ris
+ste2r1o
+s2t1e2r
+ster1s2
+sters2z2
+ste2s2z
+s2t1eszm
+ste2u
+s2t1br
+s1t
+1stgek
+st1ge
+1s2tget
+1s2tgg
+1s2tgr
+st2j1n
+st1j
+st2k1a2
+st2k
+stkt1
+st2k11ta2
+st2k1el
+st1ke
+st12ke1s
+st12k2
+st2k1o
+st2ku
+s2t12le
+st12l
+s2t1lm
+s2t1lt
+st1lv
+s2t1rc
+s2t12rem
+st1re
+s2t12r
+s2t12rt
+st1r
+s2t1r1t
+s2t1rz
+sts3s
+s2t1szl
+sts2z
+s2t1tk
+s2t12v2e.
+st1ve
+st1fl
+st1fr
+st1gr
+s2t1i2d
+s1ti
+sti2g
+s2t1i1ge
+s2t1i1g
+s2t1i2ma
+s2t1i2m
+1s2timm
+s2t1imp
+sti2n2a.
+sti1na
+s2t1ind
+s2tinf
+s2t1ing
+s2t1inv
+s2t1i2o
+st1i2pa
+st1i1r
+st1i1r
+stis3s
+sti2s2z
+s2t1i1s1za
+s2t1i2v
+st1i2zo
+s2t1j
+s1t
+3s2tl
+s2tr
+st11r
+st12v
+st12z
+stk2ro
+st1k
+st1kr
+st1kv
+stola2t
+s1to
+sto1la
+s1to2la1to
+sto2p1a
+1s2topb
+1s2toph
+1s2topr
+1s2top1t2
+sto2rl
+sto1r
+sto2rs
+sto2re2
+sto2ris
+sto1ri
+st1o2x
+3s2t1la
+s1t
+3s2t1l
+st12r
+st2k1lt
+s1t
+st1k
+s2t1nt
+s2t11r
+s2t1s2s2z
+st1a2
+s1t
+st1e2
+stks2z1
+st1k
+st1p2
+s2t11ra
+s2t1rb
+s2t1rc
+s2t1reg
+st1re
+s2t1re1i
+s2t1r2.
+st1r
+s2t1rn
+s2t1rr
+s2t1rv
+s2t1rf
+s2t1rg
+s2t1rh
+s2t12ri
+s2t1rl
+s2t1rm
+s2t1rn
+s2t1rp
+s2t1rs
+s2t12r
+s2t1rv
+st1pf
+st1pl
+st1pr
+1strand
+st1ra
+1st2rap
+1stra1t
+strat2
+s1trg
+st1r
+1st2rb
+st1r
+s1t2rn
+st2ri1
+st1ri
+st2rf
+st1r
+1str1f
+1st2ruc
+st1ru
+1st2ruk1t
+st1st
+st1s2z
+st1t2r
+s2t1udv
+s1tu
+1stukk
+st1u1ni
+st1u2ra
+3s2td
+s1t
+st12r.
+st1t
+s2t1g
+s1t
+s2t12l
+s2t1st
+s2t1t
+s2t12v
+s2t12r.
+s1t
+s2t12ri
+s2t1rn
+s2t1rt
+1su
+su2r
+su1
+su1bi1
+s1udm
+2s1udv
+3sug2r.
+su1g
+3sugrr
+2s1ugr
+3su1hi
+2sujj
+suj2j1a2da
+s1ujjad
+suj1ja
+su2k1a1r
+su1ka
+su2ke
+su2k1
+su2k1
+3summ
+su2nal
+su1na
+2s1und
+2s1u2ni
+su2no
+2su1ra
+s1u2rad
+su2ra1i
+su2rak
+su2ral
+su2rat
+su2rt
+su1r
+su2rin
+su1ri
+2surn
+2s1u2ru
+su2s1zo
+sus2z
+2s1u2tac
+su1ta
+2s1u2tad
+2sutak
+s1u2tal
+2s1u2tam
+2s1u2tan
+sutas1s
+2s1u2tat
+s1u2ta1z
+2s1utc
+2su1t
+su2td
+2su1tu
+1s
+s2csal
+s21c1sa
+sc2s
+s2csat
+s21c1se2
+s2csem
+s2cs1er
+s2csip
+s1c1si
+scs1k2
+s2c1s1
+s2c1s12
+scs3z
+s1di2
+si2m
+s1i
+2s12j
+2s1js
+3sl2y
+2s2r.
+2srb
+2s1r
+2srh
+2s1ri
+2srk
+3srl
+2srn
+2srp
+2srr
+2srt
+s2sn
+s1s
+s2s
+ss2z2s3z
+ss2z
+s1s1z
+2s1tb
+st1en
+s1te
+2s1t
+s1th
+2s1ti
+s2ti2g
+2s1tj
+2s1tk
+s1tn
+2s1to
+s12to2n1
+s2t1
+2s1tr
+2s1tt
+s1t2
+st1z
+2s1tv
+1s
+s2d1e
+s2d
+s2d
+3s3g
+s1g2g2y
+2s12g2y
+3s2k1a
+s2k
+2sl1d
+s2led
+s1le
+3sltr
+s1lye2
+sl2y
+s2lyes
+s2n
+s1ne2
+s2nev
+s2n1
+2s12n
+s2r
+2s12r
+2sst
+s2s2z
+2stk
+3stb
+s1t
+s2ze
+s2z
+1s
+s1pr
+s2r1a
+3s1r
+s12ru
+s2z
+sva2s1u2
+s1va
+sv2gy12n.
+s1v
+svg2y
+sv1gy
+sv2nya2n
+svn2y
+sv1nya
+sv2r1a2l
+sv1ra
+svro1si2
+sv1ro
+sven1
+s1ve
+svezet12
+sve1ze
+sveze1t
+sv2nye2l
+s1v
+svn2y
+sv1nye
+sv2tes
+sv1te
+sv1ze2
+s1v
+sv2zel
+svz1es
+s2vun
+s1vu
+sw2hi
+swhis1ky2
+sy2b
+sy1ig
+1sylvani1a
+syl1va
+sylva1ni
+1sylvanib
+sylvani1
+1sylvanin
+1sylvani1ra
+1sylvani2t.
+1sylvaniv
+s2z
+1s1za
+sza1a2
+3sz2abz
+sza1b
+3szabd
+sz1a2ds
+sza1d
+2sz1a2d
+sza12
+3szaft
+3sza2g.
+3szagb
+3sza1g
+2sz1ag2y.
+szag2y
+2sza1gya
+2s3za2j.
+2sza1j
+2s3zajj
+2s3za1j
+2szak1ci
+s2zakc
+3szakm
+sza2k12r
+sza1k
+sza2kz
+sza1k
+2szals
+sza1l
+2sz1alb
+2sz1alf
+2szalg
+2szalj
+sz1al2j.
+sz1aljak
+szal1ja
+sz1al1jo
+2szall
+2szaln
+2sz1alp
+2sz1als
+2szal2t.
+2sz1al1te
+2szal1to
+2szal1tu
+2sza1ne
+sz1antr
+2sza1nya
+szan2y
+2sz1a2ny
+2sza2p.
+2sza1p
+2szapb
+sza2pe2l
+sza1pe
+2sza1p
+2szaph
+2sza1pi
+2szapj
+2szapn
+2szapr
+2szapt
+sza2rat
+sza1ra
+2szarn
+sza1r
+3szarb
+2s2zarc
+2sza1r
+3szart
+3szarv
+2szasp
+s2z1as2s2z
+sz1aszt
+szas2z
+sza2ta1la
+sza1ta
+sza1t1ro
+2szaut
+sza1u
+szau2ta1z
+szau1ta
+szau2tazg
+szau2tazh
+szau2ta1zi
+szau2tazn
+szau2ta1zo
+szau2taz2.
+szauta1z
+szau2tazk
+szau2tazt
+szau2ta1zu
+szau2tazv
+szau2tazz
+3szax
+2sz1a2zo
+1s1z
+2s2z1br
+2sz1g
+2szg2y
+sz2gy
+sz2gyo
+sz2j1e
+sz2ke
+2szl1do
+sz2lin
+sz1li
+3sz1l
+sz2man
+sz1ma
+sz2ma2r
+3sz1m
+sz2ml
+3szmc
+sz2m1e2
+3sz1m
+sz2m1r1t
+3sz1m
+3szmk
+3szml
+3szmm
+3szmn
+sz2mor
+sz1mo
+3szmt
+3sz1m
+3sznd
+3sznt
+2szp
+2sz12radd
+sz1ra
+2szrs
+sz1r
+sz2r1e
+2s2z12ri1
+sz1ri
+3sz1r
+3szrm
+sz2r12ra
+s3zrr
+sz1r
+s3zrs
+szrt2
+2sz12r2u.
+sz1ru
+2sz12ruh
+2sz12rus
+2sz12s2.
+sz1s
+2sz1td
+2sz12t1
+2sz12t1i2
+2sztl
+2s2z1tm
+2sz2t1
+2s2zts
+2sz11tu
+2sz12t
+2s2z1tv
+sz1bl
+sz1br
+sz1cl
+sz1d2r
+1s1ze
+2sze1b
+2sz1e2c2h
+2sze1c1se
+szec2s
+2s2z1e2d2z
+2szeger
+sze1ge
+2szegz
+2szeh
+sze2keg
+sze1ke
+2sz1e2kit
+sze1k
+szek1i
+2szeks
+sze2k2s.
+3szekrn
+szek1r
+3szek1to
+szek1t2
+3szel2e.
+sze1le
+2szelef
+2szelemb
+2sz1e2lemek
+szele1me
+2szele1m
+2sz1e2lemk
+2szelemm
+2sz1e2lemr
+2szele1m
+2szelemz
+2sz1e2l1e2re
+3szelet
+3szeln
+sze1l
+2sz1elf
+2sz1el1go
+2sz1el1ha
+2s2z1el1h
+2sz1el1j
+2sz1el1k
+2sz1el1l
+3szel1l
+2sz1elm
+2s2z1elnev
+szel1ne
+2sz1el1n
+2sze1lo
+2sze1l
+2sz1e2l1
+sze1l
+sze2l1d
+2sz1e2lf
+sze2l1r
+2sz1el1s
+2sz1el1s1z
+szels2z
+2sz1el1ta
+2s2z1el1t
+2s2z1el1t
+2sz1e2lu
+2sz1ell
+sze1l
+2sz1el2v.
+2sz1el1v
+2sz1elvek
+szel1ve
+2sz1elves
+2sz1elvez
+sz1el1vi
+2sz1elvn
+2sz1elvt
+2sz1elz
+2szember
+szem1be
+3s2zemek
+sze1me
+3szeml
+sze1m
+3szem1p2
+3szem2.
+sze1m
+2szenc
+2szener
+sze1ne
+2s3zen1je
+sze1n
+3szen2n2y
+3s2zenz
+sze1o2
+2sze1pi
+sze2r12l
+sze1r
+2szeredm
+sze1re
+sze2r1e2ge
+2sz1e2rej
+3szerel
+sze2r1eszt
+szeres2z
+3szer1ke
+szer1k2
+3szer1s
+3szer1ta
+szer2t1lo
+szer1t
+3szerv
+szervz1
+szer1v
+3szerz
+2sz1esd
+2sz1ese1m
+sze1se
+2sz1e2setb
+2sz1e2set2e.
+szese1te
+2sz1e2sete1k
+2sz1e2setet
+2sz1e2se1t
+2sz1e2se1ti
+2sz1e2setr
+2sz1e2ss
+sze1s
+2sz1es1k
+2s2z1e2s
+2s2zes1te
+2s2z1es1t
+2szes1ti
+2s2z1estj
+2szestr
+sze2t1e2l
+sze1te
+sze2t12k
+sze1t
+2sz1e2ti1ka
+sze1ti
+sze2ton
+sze1to
+sze2tr
+sze1t
+2sze1ve
+2sz1e2v
+2szexp
+3sze1zo
+1s1z
+2sz12ber
+sz1be
+2s2z1br
+2sz12g.
+2sz12ge
+2sz12g
+2sz1gr
+2sz12h2e.
+sz1he
+2sz12hen
+2sz12het
+2s2z1hs
+2sz12ji
+3szk2e.
+sz1ke
+3szked
+3szke1i
+3szkek
+3szkem
+3szkes
+2sz12kez
+3szkb
+sz1k
+3szkv
+sz2k1ol
+sz1ko
+sz2kos
+3szks
+3sz1k
+3szlek
+sz1le
+2s2z12ne1ke
+sz1ne
+2sz12nekn
+sz1p1r
+3szp1s
+2sz12r.
+2sz1rb
+2sz1rc
+2sz1r1d2
+sz12rel
+sz1re
+2szrem
+sz2re2m.
+sz2remm
+2sz12re2n
+2sz1r
+sz2r2.
+sz2rn
+sz2rr
+sz2rt
+sz2rv
+sz1rf
+sz1rg
+sz1rh
+2sz1rin
+sz1ri
+sz1rj
+2sz1rk
+2sz1rl
+2sz1rm
+sz1rn
+2s2z12r2.
+sz1r
+2sz12r1i
+2sz12rk
+2sz12rt
+sz1rp
+2sz1rr
+sz1r1s
+sz1r1t
+2sz1r1te
+2sz1r1t
+sz1r1t
+2sz1r1t
+2sz12r
+2sz1rv
+2sz1rz
+sz2tel
+sz1te
+szte2s
+2s2z12v.
+2s2z12vad
+sz1va
+2sz1vb
+2s2z12v2e.
+sz1ve
+2sz12ve1i
+2s2z12vek
+2sz12vet
+2sz12vn
+sz1v
+2sz12vt
+2sz12vv
+2sz1vf
+2s2z1vi
+2sz1vk
+2s2z1vn
+2sz1vr
+2sz1vs
+2sz1vt
+2sz12v
+sz2fe1l
+sz1fe
+1sz2f1ra
+sz1f
+1sz2f1r
+sz1fr
+sz1gl
+sz1gr
+1s1zi
+szi2ab
+szi1a
+2szi1de
+2sz1i1d
+2s2z1i2d
+2sz1ifj
+2sz1i2ga
+2sz1i1g
+3szign
+szi2k1a2s2
+szi1ka
+szi2k1e2r
+szi1ke
+3szikl
+szi2k12
+3szi1l
+sz1i2mak
+szi1ma
+2sz1i2m
+3szim1b2
+2sz1im1pu
+2s2z1i2nas
+szi1na
+2szin1de
+2szin1d
+2sz1in1du
+sz1in1fo
+2szing
+sz1in1ko
+2szinteg
+szin1te
+2szi1o
+2sz1i2rat
+szi1ra
+2s2zi1r
+2sz1i2ri
+2sz1i2rod
+s2zi1ro
+szi2s
+2sz1i2s1za
+s2zis2z
+szi2s1z
+3szi1tu
+2sz1i2vad
+szi1va
+2szivs
+szi1v
+2s2z1i2v
+sz1izg
+2sz1izz
+1s1z
+2sz1g
+3sz1ne
+2sz1n1na
+sz2vr
+sz1v
+2sz1vi
+3sz1v
+2sz1z
+szka1pr
+sz1ka
+1szkarab
+szka1ra
+szk1arc2h
+1sz2kenn
+sz1ke
+1sz2kpo1k
+sz1k
+szk1po
+1szlvh
+sz1l
+1sz2len2g.
+sz1le
+1szlengn
+1szlengr
+szle2t1e2l
+szle1te
+szle2t1o
+1sz2lo1ge
+sz1lo
+1sz2mok
+sz1mo
+1sz2nob
+sz1no
+1s1zo
+2sz1obj
+2szod2a.
+szo1da
+2szoda1i
+2szodak
+2sz1o2d
+3szof
+3szo1k
+2sz1ok1ke
+2s2z1o2koz
+szo1ko
+2szok1s
+2s2z1o2laj
+szo1la
+szo2l1l
+szo1l
+2szol1da
+2s2z1ol1d
+2szo2lim
+szo1li
+2sz1ol1l
+2sz1oltr
+szol1t
+2sz1olts
+2s2z1olvad
+szol1va
+2sz1olvas
+3szomj
+3s2zom1s
+szo2nas
+szo1na
+szo2nr
+szo1n
+3szond
+2szo1ra
+szo2r1l
+szo1r
+2szorm
+2szorn
+2szors
+2szorv
+2sz1os1t
+2sz1os1to
+2sz1otth
+3szov
+2sz1ox
+1s1z
+sz1b2l
+2sz1lm
+3sz1l
+2s3znd
+sz1n
+2s3zn1i
+2sz12ni
+2sz12nod
+sz1no
+2sz12rn
+sz1r
+2sz12rt
+2sz1ri
+sz22sk
+sz1s
+3szs2z.
+s2zs2z
+szsza2k
+sz21s1za
+sz2szll
+sz21s1z
+sz2szn
+1s1z21s1z
+sz2sz1l
+sz21s1z
+sz1tr
+1s1z
+2sz1b1li
+3sz1ge
+2s3zldes
+szl1de
+2sz12le
+2sz1re
+2sz12v.
+2sz12ve1i
+sz1ve
+2sz1z
+1s1z
+sz1a2
+sze2r
+sz1e
+sz12
+3sz1l
+sz2ra
+sz11si
+2szz
+sz11ze
+1sz2p
+sz1pl
+1sz2ponz
+sz1po
+sz3saj
+sz2s
+s1z1sa
+sz3sap
+sz3sas
+sz3sav
+s3zsk
+s1z1s
+sz3sn
+sz3sr
+sz3ss
+sz3st
+sz3sv
+sz3seg
+s1z1se
+s3zsem
+s3zsen
+sz3sep
+sz3ser
+s1z3s
+szsgtan2c
+sz3sg
+szsg1ta
+szsgta1n
+szsgta2n11c1so
+szsgtanc2s
+sz3sh
+sz3sik
+s1z1si
+s3zsin
+sz3sis
+sz3siv
+sz3sn
+s1z1s
+sz3s2k
+sz3s2l
+sz3sod
+s1z1so
+sz3sok
+s3zsol
+s2z3sor
+s1z3s
+sz3sr
+s1z1s
+sz3sv
+sz3s2p
+sz3s2r
+sz3s2t
+s3zsll
+s1z1s
+s2zsl
+s1z3s
+s1z3s
+s2z3s2z
+1sz2tatb
+sz1ta
+sz2t1l1la
+sz1t
+szt2r1a2d
+szt1ra
+szt12ram
+sz2t2ras
+szt2rat
+sz2t2r1e2
+sz2trf
+sz2trh
+1sz2trj
+sz2trn2y
+szt1r2
+sz2t1ru
+szt12ruk
+sz2trv
+1sz2ttj
+1sz2ttn
+1sz2ttr
+1sz2t1tu
+szte2r1el
+sz1te
+szte1re
+1sz2tere2o
+szt2g
+sz1t
+szt11ge
+sz2tr1te
+sz2t1rv
+sz2t11t
+szt1rk
+sz1t
+szt1r
+sz2t1rn
+sz1t
+1szt2r1d
+szt1r
+1szt2rjk
+sz2tr
+sz1t
+1sz2tye
+szt2y
+1s1zu
+szuc1
+2szud
+sz1udv
+2s3zu1go
+2sz1ugr
+2szuh
+2sz1uj
+3szu1k
+sz1u2ra
+2sz1u2r
+2s2z1u2ta
+sz1u2t
+sz1u1t
+2sz1u2tu
+2s3zuz
+1s1z
+2szg
+2szj
+2sz1rr
+sz1r1t
+2szs
+2sz1t
+2sz1th
+2sz11ti
+2sz1tj
+2sz1tn
+2sz1to
+2sztr
+2sz1tt
+2sz1tv
+1s1z
+2sz1d
+2szgg
+3szks
+2szld
+2sz12led
+sz1le
+2szl1se
+sz1l
+3sz1ne
+3szr1ke
+3szrks
+szr1k
+2sz1s
+2sz1v
+1s1z
+3szk
+2szrdn
+sz1r
+1sz2vi2t.
+sz1vi
+1szvitet
+szvi1te
+1sz2vitj
+1sz2vitn
+1szvitt
+sz3z2s
+2t.
+1ta
+taa2d
+ta1a
+tat1
+ta1
+1ta2ta2
+t2a1b1lo
+taboz1
+ta1bo
+ta1b1ra
+2t1ab1ro
+t2a1b1r
+2t1abs
+ta1cl
+t1a2da1l
+ta1da
+2t1adap
+ta2das
+1t1a2da1ta
+2t1a2datb
+2t1a2da1to
+ta2da1tu
+2t1a2d
+2tadi1o
+ta1di
+t1adj
+t1adl
+2t1adm
+ta2dod
+ta1do
+2t1a2dog
+2t1a2dot
+t1a2d1a
+ta1d
+ta2d1
+ta2db
+ta2dd
+ta2df
+ta2dg
+t1a2dh
+t1a2di2g
+tad1i
+t1a2dik
+t1a2din
+t1a2dit
+ta2d1
+t1a2dj
+t1a2d1ka
+t1a2d1k
+t1a2d1ko
+t1a2dk1ra
+ta2dl
+t1a2d1na
+t1a2d1n
+ta2dp
+t1a2dr
+t1a2d1t
+ta2d1
+t1a2dv
+t2a1d1r
+ta1d2re
+t2a1d1ro
+t1ads
+ta2dun
+ta1du
+t1adv
+tae2l
+ta1e
+tae2r
+ta2e1ro
+tane2kes2t.
+ta1
+ta2ne
+ta12nekes
+tane1ke
+ta2p
+ta2r
+2ta1f
+ta1f2r
+1taf2ta
+ta2g1aj
+ta1ga
+ta2gav
+t2aga2z
+tag1a1zo
+ta2gg
+ta1g
+ta2g1l
+ta2gec
+ta1ge
+ta2g1e2l
+ta2g1e2r
+ta2g12g
+ta1g
+2tag1go
+2t1aggr
+ta2gid
+ta1gi
+ta2giz
+ta2g1os2z
+ta1go
+ta2g1ott
+ta2gc
+ta1g
+2t1a2gn
+ta2g12r
+ta2gv
+ta1g2ram
+tag1ra
+ta2g1u2s
+ta1gu
+ta2gut
+ta2g12
+2t1ag2y.
+tag2y
+ta2gy2a.
+ta1gya
+ta2gyb
+ta1gy
+ta2gyh
+2t1agyb
+2t1agyn
+2t1agyr
+2t1agyv
+ta2i2re
+ta1i
+tai2rn
+tai1r
+tai2z
+ta2j
+ta2j1u2s
+ta1ju
+ta2js
+ta1j
+2t1a2kad
+ta1ka
+ta2k1l
+ta1k
+tak2r
+tak11ro
+ta2ks
+ta2ktk
+2t1ak1ce
+2t1ak1ci
+take2l
+ta1ke
+tak1e1le
+ta2k12r.
+ta1k
+tak12s1ze
+t2aks
+taks2z
+2t1akko1ra
+tak1ko
+2t1akkord
+2t1ak1ku
+ta1k2la
+ta1k1lu
+t1akn2a.
+tak1na
+ta2k2.
+ta1k
+ta2k12b
+ta1k
+ta2k1rm
+tak1r
+ta2k1s
+ta1k1r
+tak2re1
+t2ak1re
+t2a1k1r
+2t1ak1ro
+ta1k2rn
+tak1r
+2t1akt2a.
+tak1ta
+2t1akt2i.
+tak1ti
+2t1aktiv
+2t1ak1t
+2t1aktj
+taktus1s
+tak1tu
+ta2kus
+ta1ku
+ta1k2va
+ta2l1a2da
+ta1la
+ta2l1a2d
+ta2l1adh
+ta2l1adj
+ta2l1adn
+ta2l1a2do
+ta2l1a2d
+ta2l1adt
+ta2l1a2du
+ta2l1adv
+2tala2g1
+t1a2la1gu
+ta2la1g
+2t1a2lakb
+tal1akc
+2t1a2la1k
+2t1a2lakj
+2t1a2la1ku
+2t1alakz
+ta2l1a2l
+2t1a2lan2y
+2t1a2la1pa
+2t1a2laptv
+tala1p
+ta2lapk
+t1a2lapl
+2t1a2laps2z
+talap1s2
+ta2l1a2r
+ta2l1as
+tala2te
+2t1a2lat1ti
+ta2l1a1u
+2t1a2l1
+ta1l
+ta2l12g
+2t1a2l1
+ta2l1l1lo
+ta2l12rak
+tal1ra
+tals1s
+1ta2l11ta
+ta2l1tr
+2t1aldehi2d.
+tal1de
+talde1hi
+2t1aldehid1b
+2t1aldehidd
+2t1aldehidet
+taldehi1de
+2t1aldehidh
+2t1aldehid1n
+2t1aldehidr
+tal1ell
+ta1le
+ta2l1e1l
+ta2l1eng
+t2alen
+tal1e1si
+t2ales
+t2al2g
+ta1l
+tal2k1e2
+ta2l12r.
+2t1al1ge
+ta2l1i2ko
+t2alik
+ta1li
+tal1ikr
+tal1imp
+t2alim
+ta2lip
+ta2l1isk
+ta2l12r
+ta1l
+2t1aljas
+tal1ja
+2t1al1ji
+2t1aljz
+tal1k2
+2t1alkal
+tal1ka
+2t1alkm
+tal1k
+2t1alkoh
+tal1ko
+2talkot
+2taller
+tal1le
+tal3l2y
+ta2l1ol
+ta1lo
+talo2m1e
+ta2l1os2z
+ta2l1r
+ta1l
+tal2p12ro
+tal1p
+tal2pe2l
+tal1pe
+tal2p1il
+tal1pi
+tal2pu2s
+tal1pu
+tal1t2re
+ta2lud
+ta1lu
+2t1a2lulj
+ta2l1u2r
+ta2l1u2t
+ta2lr
+ta1l
+ta2l12t.
+ta2l
+ta2l
+ta2mal
+ta1ma
+tam1alm
+ta2maz
+ta2m1i2d
+ta1mi
+2t1a2m
+t1am1pa
+2t1am1pu
+2t1amur
+ta1mu
+ta2m
+ta2n1aj
+ta1na
+ta2nal
+ta2nan
+ta2n1ar
+2t1a2nat
+tan1ll
+ta1n
+tan11lo
+tans1s
+ta2n12szo1ka
+tans2z
+tan1s1zo
+ta2n1szt2
+2tan2d.
+tan2del
+tan1de
+2tandr
+ta2n1el
+ta1ne
+ta2ner
+2ta2n1es
+ta2n1e2z
+ta2n1j
+ta1n
+ta2n12r.
+ta2n1rk
+tan1vb
+tan12v
+tan12vi
+tan1vm
+ta2nid
+ta1ni
+2ta2nim
+tan1ist
+tank2r
+tan1k
+tan2k1re
+tan2ks
+tan1k2
+tan2k11ra
+2tan2n2y
+ta2n1os2z
+t2anos
+ta1no
+ta2nd
+ta1n
+tan2t1el
+tan1te
+t1anten
+tan1t1r
+ta2n
+ta2n
+2tanyag
+tan2y
+ta1nya
+2tanyd
+ta1ny
+2t1a2ny
+tao2l
+ta1o
+ta2r
+ta1
+2t1a2p2a.
+ta1pa
+2t1a2pa1i
+ta2pa1k
+t1a2pa1s
+2t1a2pb
+ta1p
+2t1a2pd
+2t1a2p1
+2t1a2ph
+2t1a2p1i
+2t1a2pj
+2t1a2pk
+2t1a2pm
+ta2p1ra
+ta2p1r
+2t1a2p1u
+2t1a2pv
+taperc1
+ta1pe
+ta1p2la
+ta1p1l
+t1a2p2.
+ta1p
+2tapp
+ta1p2r
+2t1ap1r
+t2a1p2ro
+tap2sor
+tap1so
+taps3s
+tap2s12
+2tapun
+ta1pu
+ta2ra1be
+ta1ra
+ta2ra1i
+2t1a2ras
+2t1a2rat
+2t1a2rb
+ta1r
+2t1a2rh
+2ta2rn
+2t1a2rt
+2t1a2rv
+2t1ar1bi
+2t1ar2c.
+2t1arc2h
+2t1ar1co
+t1ar1cu
+2t1ar1c
+ta2r1i2k
+ta1ri
+ta2ro1m
+ta1ro
+tar1s2
+tar2tab
+tar1ta
+tar2t1e2l
+tar1te
+tar2t1em
+tar2t1en
+tar2t12r.
+tar1t
+tar2tit
+tar1ti
+tar2told
+tar1to
+2tartos
+2tartr
+2tartt
+2tasc
+ta2sem
+ta1se
+2tasf
+t2a1s2k
+ta1s1lu
+ta1s2m
+2tas1n
+ta2s1ol
+ta1so
+2t1as1pi
+ta1sp2r
+2tas1ru
+2tas2s2z
+tas3s1z
+tas3szt2
+tast2
+1t2a1s2ta
+2tas1te
+t2a1str
+2tasv
+2t1aszk
+tas2z
+ta1szl
+ta2t1alj
+1ta1ta
+ta2t1alm
+tatas2
+ta2t1aszt
+tatas2z
+tat2ra2i.
+t2atr
+ta1t
+tat1ra
+tatra1i
+2t1a2te1i
+ta1te
+tate2s
+2tati1k
+ta1ti
+ta2t1i2n2a.
+t2atin
+tati1na
+ta2t1i2n
+ta2t1ing
+t1atlas
+tat1la
+t1a2to1mo
+ta1to
+tat1orj
+t2ator
+ta2t1r
+ta1t
+ta1t2ri
+2t1at1ti
+tat1u2ra
+t2atur
+ta1tu
+ta2tya
+tat2y
+ta2ty
+2t1a2uk
+ta1u
+tau2n
+1tau2ta
+t2a3u2t
+2tau1to
+ta2ut1i
+tau1t
+ta2utj
+ta2utk
+tau2tu
+ta2z
+ta1
+2t1a2va1t
+ta1va
+2t1a2va1t
+ta1wh
+2tazhats
+taz1ha
+2tazha1tu
+2taznnk
+taz1n
+ta2zon
+ta1zo
+1t
+2t2b.
+t2b1
+tbe2sz12l
+t1be
+tbes2z
+tbe1s1z
+2t1b
+t2bi2g
+t1bi
+t2bin
+2tbj
+2tbk
+2tbn
+2tbon
+t1bo
+2tbot
+t2b
+2tbr
+t1b1r
+t2b
+2tci1u
+t1ci
+t2fa
+t2f
+2t2g.
+t2g2a.
+t1ga
+t2ga2d
+tg1a1da
+2t12ga1i
+2t12gask
+2tgast2
+t2gaz
+2t12g
+2tgb
+2t1gc
+2t12ge
+2t12g
+2t1gf
+2tgg
+2t1gh
+2t12gi
+2tgj
+2t1gk
+2t1gm
+2tgn
+2t12go
+2tgr
+2t1gt
+2t12guk
+t1gu
+2t12gu2n
+2t12g
+2t1gv
+2t12g2y
+t2h
+t2jal
+t1ja
+t2jaz
+t2j1e2g
+t1je
+t2j1e2l
+t2j
+t2j1ok
+t1jo
+t2j12
+t2j
+t12jul
+t1ju
+t2lab
+t1la
+tla2d
+tl1a1da
+t2laj
+tl1a2lap
+t2lal
+tla1la
+t2lap
+2t1lar
+t2l1l
+t1l
+t2l1th
+2t1l1d
+2t1l1do
+t2l1e2
+t2ll
+t1l
+2t1l2l.
+2t1llam
+tl1la
+2t1llan
+2t1llat
+2t1lls
+tl1l
+2t1llh
+2t1l1l
+2t1llj
+2t1lln
+2t1l1lo
+2t1lls
+2t1llt
+2t1l1lu
+t1l1l
+2t1llv
+2t1l1ma
+2t1l1mi
+2t1lmok
+tl1mo
+2t12lomr
+t1lo
+t2lomt
+t2l
+2t1l1ru
+t2l
+t2lyab
+tl2y
+t1lya
+t2ly1a2c
+t2lyad
+t2ly1a2g
+t2ly1a2l
+t2ly1a2n
+t2lya1p
+t2ly1at
+t2lya1u
+t2lytl
+t1ly
+t2ly12z
+t2lyid
+t1lyi
+t2lyir
+t2lyis
+tma2s1ze
+t1ma
+tmas2z
+t2m
+t2mos
+t1mo
+2t12mu
+tn1alm
+t1na
+t2nr
+t1n
+tnc3c
+tn2c1e
+tn2ch
+tn1c
+tn2cl
+tn2cn
+tncks2z1
+tnc1k
+tnc2s2
+tn2c1s
+tn2csor
+tn1c1so
+tn1d2
+t2n1e2
+t2n
+t2n12
+t2n
+2tn1p
+tn2s1e
+t2n
+t2n
+t2nyal
+tn2y
+t1nya
+t2ny1as
+t2nye
+2tnz
+t2p1a2
+t1p2
+t2pl
+t2p1r
+t2pt
+t2p1e2
+t2p1il
+t1pi
+t2p1in
+t2p1oll
+t1po
+t2p1os2z
+t2p
+t2p
+tra2dat1b
+t2radatb
+t1ra
+tra1da
+tra2dato1ka2
+t2rada1to
+2t12ra1d
+tr1a2dot
+tra1do
+t2ra1d
+t2r1a2g
+tr1ajt
+t2r1a2l
+2t12ram2a.
+tra1ma
+2t12ra1m
+2t12ra1mi
+2t12raml
+2t12ramok
+tra1mo
+2t12ramol
+2t12r2amot
+2t12ramt
+2t12ra1mu
+2t12ra1m
+tra2n
+t2r1an2y
+t2rap
+t2r1as2z
+t2r1att
+t2r1a2u
+t2r1av
+t2r2g
+t1r
+t2r1l
+t2r12s2z
+t2r1tl
+2t1rboc
+tr1bo
+t2r1e2
+t2rd
+t1r
+trne2kest
+t2r12ne
+tr12nekes
+trne1ke
+t2rs
+tr2gy
+trg2y
+t2r1i2k
+t1ri
+t2r1i2p
+tr1isk
+t2r1ism
+t2r
+tr1k2
+2t1rkd
+tr1k
+2t1rk1na
+2trkr
+2t1r1ny
+trn2y
+t2r1okm
+t1ro
+t2r1os2z
+t2rc
+t1r
+tr11r
+t2r
+t2r
+tr2s1alt
+tr1sa
+2trts
+tr1t
+trt1l1t
+tr1t
+tr1t1ro
+2t12r2u.
+t1ru
+2t12ru1a
+2t12ru1b2
+2t12ruc
+2t12rug
+2t12ruh
+2t12ru1i
+2t12ruj
+2t12ru1na
+2t12rus
+2t1ru2t.
+t2rut
+tr1u1ta
+2t12ru1
+2t12ruv
+2t12r1
+t1r
+t2rj
+2t12rk
+t2rs
+t2r
+t2r
+t2s1a2d
+t1sa
+t2s1aj
+t2sal
+t2s1a2r
+t2saz
+ts12ga
+t1s
+t2s12ra1i
+ts1ra
+t2s12r
+t2s12r
+t2s1rh
+t2s1rn
+t2s12ro
+t2s1rr
+t2s1rt2
+t2ss
+2t1s1so
+t2s12to
+t2s1e2
+t2sis
+t1si
+t2sodv
+t1so
+t2s1ol
+t2sor
+t2s
+2t12sk
+t2s12r
+t2s
+t2s
+ts3s
+tst2
+ts1tr
+t2su2t
+t1su
+t2s12
+t2s
+t1svn
+ts1v
+t2sz1ak
+ts2z
+t1s1za
+t2szal
+ts3zav
+t2s3z
+t2s1ze
+ts3zen
+2t1s1zi
+2t1s1zo
+t2szos
+t2s3z
+2tszt2
+2t12tad
+t1ta
+2t12t1l
+t1t
+2ttb2a.
+tt1ba
+2t1tc
+2t1td
+2t12t1e2
+2t12t1
+2t1t1fe
+t1t1fo
+2t1tg
+2t1t1he
+t1t1hi
+t2t1ir
+t1ti
+2t12t
+2t1t1je
+2ttk
+t1t1k
+2t1tlag
+tt1la
+2t1tm
+2t12t1ol
+t1to
+2t12t1
+2t12t
+2t1tp
+2t1t1re
+2t1t1ru
+2t1ts2z
+2t1t1te
+2t1t3t2
+2tt1t
+2t1t1t
+2t1t1t
+2t12t1u2t
+t1tu
+2t12t
+2t1t1vi
+2t1t1vo
+t2v1a2d
+t1va
+t2vak
+tva2l
+t2v1a2n
+t2vas
+t2vaz
+t2v1l
+t1v
+t2v1e2
+t2vd
+t1v
+t2v1rz
+t2v1s
+t2vin
+t1vi
+t2vis
+t2v1or
+t1vo
+2t12v
+t2v
+t2v
+t2v
+t2zsal
+tz2s
+t1z1sa
+t2zsl
+t1z1s
+t2z1s
+tzs1p
+tbal2l1e2
+t1ba
+tbe12
+t1be
+tb2la
+tb2le
+tb2li
+tb2lo
+tb2l
+tb2ra
+tb2re
+tb2ri
+tb2ro
+tb2r
+tb2ru
+tca1k
+t1ca
+tca1s
+tca1t2
+tc2lu
+tc2re
+tcsap12g
+tc2s
+t1c1sa
+tcsa1p
+tdja2d
+t1d
+td1ja
+td2j1a1da
+td2ra
+td2r
+td2re
+td2ro
+td2r
+td2ru
+1te
+te2a1a
+te1a
+te2a1
+te2ab
+te2ac
+te2ad
+te2a1e
+te2a1
+te2ag
+te2ah
+tea1i2
+te2aiv
+te2a1
+te2aj
+te2a1ku
+te2alap
+tea1la
+te2alz
+tea1l
+te2a1li
+te2a1na
+te2a1o
+te2a1
+te2a1
+te2a1pa
+te2a1p
+teas2
+te2a1sp
+te2a1s1za
+teas2z
+te2a1s1z
+te2a1s1zo
+tea1t1r
+te2a1
+te2a1
+te2av
+te2az
+te2ber
+te1be
+te2bd
+te1b
+2t1e2c1h
+tec2h
+te2c1s
+tec2s
+te2d
+2t1e2d2z
+2t1eff
+te1f2r
+te2gan
+te1ga
+te2g1a2r
+tega2z
+teg1a1zo
+te2g
+teg1l
+teg1r
+te2g1eg
+te1ge
+teg1e2lem
+tege1le
+te2g1ell
+te2g1elr
+te2ge1ne
+2t1eger2e.
+tege1re
+te2g1ered
+te2g1l
+te1g
+te2g12p
+te2gs2z1
+teg3g
+te2gid
+te1gi
+te2gis
+te2giz
+te2g1on
+te1go
+te2g1
+te2g
+te2g12g
+te1g
+teg2l
+te2g11l
+te2g11l
+2t1eg2y.
+teg2y
+2t1e2gyes
+te1gye
+t1e2gyez
+t1egyn
+te1gy
+tegy1r
+2t1egyh
+tegyh2z1a2da
+tegy1h
+tegyh1za
+2t1egyl
+2t1egys
+2t1e2gyt
+te1gy
+tei2g
+te1i
+te2in2.
+tei1n
+te2inb
+te2int
+te2inv
+tein1s
+te2j1a
+teje2g
+te1je
+te2j1ell
+te2j1elv
+te2j1er
+te2jin
+te1ji
+te2j
+te2jo
+te2j1
+te2j1s
+te1j
+te2j
+te2j1u2
+te2j
+te2k1ag
+te1ka
+te2k1l
+te1k
+te2k1el
+te1ke
+tek1ret
+te1k
+tek1re
+te2k1i2p
+te1ki
+te2k
+te1k1lu
+te2k1ok
+te1ko
+te2k1s
+te1k
+te2k1und
+te1ku
+te2k12t
+te1k
+te2lab
+te1la
+te2lag
+te2l1a2j
+te2l1an
+te2lap
+te2la2r
+te2las
+te2lav
+te2l12g
+te1l
+te2ll
+tel2r
+te2l1t
+2tel1b
+tele3r
+te1le
+tele1
+2telej
+tel1ejt
+2t1elektr
+tel1e2len
+tele1le
+te2l1elk
+te2l1ell
+te2lem1ba
+t1e2lem2e.
+tele1me
+2t1e2leme1i
+2t1e2lemek
+te2lemes
+te2lemn
+tele1m
+2t1e2le1m
+tel1ess
+tele1s
+te2l1e2s
+1te2l1es1te
+tel1es1ti
+tele2t12r.
+tele1t
+t1e2lg
+te1l
+tel1rt
+tel1r
+1te2l11te
+t1elfo1ga
+tel1fo
+teli2h
+te1li
+teli1
+te2l1i1mi
+te2lind
+te2l1inf
+te2l1ing
+2t1e2l2ix
+te2l1i2z2s.
+teli1z
+te2l1i2z1s
+te2l1i2zsh
+te2l1i2zs3s
+te2l1i2zst
+te2lr
+te1l
+tel2l1e2g
+tel1le
+2t1ellenf
+2t1elle1n
+2t1ellenz
+2t1ellniv
+tell1ni
+telmeg1
+tel1me
+2telm1le
+t1elml
+tel1m
+te2l12
+te2l1l
+te1l
+2tela2d
+te1l
+tel1a
+tel1e2
+2t1e2l1
+2t1e2lnn
+2t1e2ln2y
+te2ltt
+2t1e2l1tu
+te2lvt
+tel1v
+tel1z2i.
+tel1zi
+tel1p2
+tels2
+2t1el1sa
+2t1el1s
+2t1elte1l
+1tel1te
+2t1eltet2t.
+2t1elt1r
+tel1t
+te2l
+tel2k2.
+te1l
+tel1k
+2t1el2v.
+2t1elvb
+2t1elve1i
+tel1ve
+2t1elvek
+2t1elvet
+2t1elvv
+tel1v
+2t1elvh
+2t1elv2i.
+tel1vi
+2t1elvil
+2t1elvk
+2t1elvn
+2t1elvr
+2t1elvt
+2t1el1v
+2t1el1v
+2t1elvv
+te2ma2p
+te1ma
+te2m1as
+2t1ember3s2
+tem1be
+2t1embl
+2t1embr
+te2m1e2g
+te1me
+tem1e2leg
+teme1le
+2t1eme1l
+2t1e2melk
+2te2me1l
+te2melv
+te2m1l
+te1m
+te2m12r.
+te2m12r2.
+tem1r
+tem1r1t
+2t1e2ms
+1te2m11te
+te2m1tk
+te2mid
+te1mi
+tem1ill
+te2mi2m
+tem1ing
+te2m1int
+te2mc
+te1m
+te2m12r
+te2m12
+2tem1p
+2temp1li
+2t1e2mul
+te1mu
+te2mus
+te2mut
+tem2l
+te1m
+te2m11l
+te2nad
+te1na
+te2n1a2g
+te2nal
+te2n1a2r
+te2n1as
+te2nat
+te2na2u
+te2n12t
+te1n
+ten1d2h
+tene2g
+te1ne
+ten1eg2y
+te2n1el
+te2ner
+2t1e2nerg
+te2n1es2z
+t2enes
+te2n1kt
+te1n
+te2np
+te2n12v.
+te2n11vi
+2t1enged
+ten1ge
+te2n1i2p
+te1ni
+ten3n
+te2n1ol
+te1no
+te2n12
+te2n
+1tens1te2
+ten2tin
+ten1ti
+ten2t12v
+ten1t
+ten1t1ri
+te2n1u2
+te2n1
+te2n1g
+te1n
+te2nnn
+2t1enyh
+ten2y
+t1enyv
+teo2s
+te1o
+2t1e2piz
+te1pi
+2t1e2pos
+te1po
+2tepp
+tep2p12k
+tep1p
+ter1abl
+te1ra
+ter1a2c
+te2r1a1da
+ter1a1ka
+te2r1a2n
+te2r1a2r
+te2ra1u
+ter12c2s
+te1r
+te2rf
+te2r1ll
+ter1lm
+te2r12ri
+ter11ta
+ter1d2
+2t1er1d
+2t1e2redm
+te1re
+te2r1e2d2z
+ter1e1g
+ter1e2g2y
+2t1e2rej
+te2r1e2k2e.
+tere1ke
+te2r1e2k1t
+tere1k
+2t1e2rekl
+te2r1elm
+tere1me2
+te2r1ent
+2tere1o
+tere2pa
+tere2p1e2l
+tere1pe
+tere2p12l
+tere1p
+te2r1er
+te2r1e2s
+1te2r1es1te
+te2r1es1t
+te2re1ta
+te2r1e1ti
+2t1e2retn
+te2rg
+te1r
+te2r12j
+te2r1k
+te2r2l
+ter11le
+ter1lv
+ter1g2
+ter1i1ko
+te1ri
+2teri1li
+ter1il1la
+teri2na
+te2r1i2p
+te2r1ism
+ter1ist
+ter1izm
+ter1k2
+t1erklc
+ter1k
+terms1s
+ter1m
+te2r1old
+te1ro
+te2ror
+te2r1ox
+te2r12r
+te1r
+te2r2k
+te1r
+te2r1n
+te2r
+2t1er2.
+2t1erb
+2t1erf
+2t1ers
+t1ert
+t1erv
+ters2
+ter1sk
+ter1sp
+ter1st
+ter1sz1t
+ters2z
+tert2
+ter1tr
+te2rur
+te1ru
+te2r1ut
+te2r1t
+te1r
+te2r1g
+te1r
+te2r1ld
+ter2vaj
+ter1va
+ter2va2n
+te2sar
+te1sa
+te2sr
+te1s
+te2sel
+te1se
+tes1ell
+2t1ese1m
+2t1e2setb
+2t1e2set2e.
+1tese1te
+2t1e2sete1i
+2t1e2seten
+2t1e2setet
+2t1e2se1t
+2t1e2seth
+2t1e2se1ti
+2t1e2setn
+2t1e2setr
+2t1e2sett
+te2sl
+te1s
+2t1e2sll
+2t1e2sl2y
+2t1e2ss
+te2s1int
+te1si
+tes2r
+te1s
+te2srn
+te2s11r
+2t1es1k
+t1es1ni
+te2sot
+te1so
+2t1e2s
+tesp2
+2t1esszen
+tes2s2z
+tes1s1ze
+tes2tak
+tes1ta
+tes2t1ll
+tes1t
+test2r
+tes2t1ra
+tes2t1elk
+1tes1te
+tes2t1ell
+tes2t1er
+2t1estj
+tes1t
+2testk
+tes2t1kn
+tes2t1ks
+2t1estm
+2t1estnk
+tes2tism
+tes1ti
+tes1t2
+tes2t11re
+tes2t11r
+te2s1
+te2s12v
+te1s
+2teszet
+tes2z
+te1s1ze
+2t1esz1m
+tesz2t1a2
+teszte2r
+1tesz1te
+tesz2t1e1re
+1tesz2t12te
+tesz1t
+tesz2tor
+tesz1to
+te2t1a2k
+te1ta
+te2t1a2l
+te2ta1na
+te2t1a2p
+te2tg
+te1t
+te2t1l
+tet2r
+te2t11ra
+te2tt
+te2t1e2g
+1te1te
+te2t1ell
+tet1e2l
+tet1elr
+te2t1elv
+te2te1ne
+tete2r
+te2t1e1r
+te2t1es2z
+te2t1j
+te1t
+tet1kk
+te2t12l
+te2t11ri
+te2t1rv
+tetsks2z1
+tets1k
+te2ti2d
+te1ti
+2t1e2ti1ka
+2t1e2ti1k
+te2tim
+te2t1int
+tetks2z1
+tet1k
+te2t1olt
+te1to
+te2t1ot
+te2tr
+te1t
+te2tur
+te1tu
+te2t1z
+te1t
+2t1e2td
+te1t
+te2t12z
+tevs3s
+te1v
+te2vol
+te1vo
+2t1exp
+2t1e2zer
+te1ze
+tez1a2
+te1z
+2t1ezreds
+tez1re
+2t1ezrel
+1t
+2t1bresz1t
+tb1re
+tbres2z
+2t1breszt2.
+tbresz1t
+2t1bresztb2b.
+2t1breszt1e
+2t1breszt1i
+2t1bresztj
+2t1bresztk
+2t1bresztn
+2t1bresztr
+2t1bresztt
+2t1bresztv
+t2c
+t2des
+t1de
+2t2g.
+2tgb
+2tget
+t1ge
+2t1g
+t2gp
+t2gs
+2tgg
+2tgj
+2t1gk
+tg1la1
+2tgn
+2t12g
+2t12g
+2tgr
+2tgt
+t1g2
+t2g1l
+2t12h.
+2t12hek
+t1he
+2t12hen
+2t12hes
+2t12het
+2t12h
+2t1hs
+2t12jen
+t1je
+t2jes
+2t1jr
+2t1js
+2t1jt
+t2kab
+t1ka
+t2kad
+tk1a1da
+t2k1a1ka
+tk1alk
+t2kam
+t2k1a2n
+t2k1ar
+tka2t
+t2k1att
+t2kaz
+t2k1g
+t1k
+t2k1e2c
+t1ke
+t2ke1d
+t2k1e2g
+t2k1e2kh
+tke1k
+t2k1elr
+t2k1e2r
+t2k1es2z
+t2k1e1ti
+t2k12k
+t1k
+t2k12l
+t2kp
+t2k12r.
+t22k1s
+tkf1l2
+tk1f
+tkf2l1v
+t2ki2d
+t1ki
+t2kik
+t2kim
+t2ki1r
+t2k1i2s
+t2k2
+t2k1o2r
+t1ko
+t2k1os2z
+t1k2
+t2kr
+t2k12
+t2k
+t2k1u2t
+t1ku
+tk2l
+t1k
+t1la2
+t2lak
+t2l1an
+t2lap
+t2las
+t21l
+t2lb
+t2l2l
+t2lr
+t2l12t
+t2le1i
+t1le
+t2le2l
+t1l1e1le
+tl1ell
+tl1e1l
+tl1elv
+t2l1e2r
+t2les
+tl1est
+t2lez
+tl1kb
+t1l
+tl11k
+t2l
+t2l1ol
+t1lo
+t2l
+t2l12
+tlks2z1
+t1l
+tl1k
+t1lu2
+t2lut
+2t2l
+t2lyeg
+tl2y
+t1lye
+tlyigaz1
+t1lyi
+tlyi2g
+t2ly1i2ga
+tma1p
+t1ma
+t2m
+t2mil
+t1mi
+t1na2
+t2n1an
+2t12nekb
+t1ne
+2t12nek2e.
+tne1ke
+2t12nekek
+2t12ne1k
+2t12nekl
+t2n12
+t2ny1e2g
+tn2y
+t1nye
+t2ny1e2l
+t2ny2k
+t1ny
+tnyigaz1
+tnyi2g
+t1nyi
+t2ny1i2ga
+t2nyim
+t2nyo
+t2ny2
+tps3s
+t1p
+2t12p
+t1p2la
+2t12pl
+t1p
+t2rab
+t1ra
+t2raj
+tr1akt
+t2r1a2n
+t2rar
+t2ras
+t2rav
+t2r12r
+t1r
+2trdekb
+tr1de
+2t1rdekl
+2trdekn
+2t1rde1k
+2t1rde1k
+tr2d1e2mel
+trde1me
+tr2d12j
+tr1d
+t2reg
+t1re
+t2r1e2l
+t2rem
+t2r1eml
+t2r1eng
+tre2n
+t2r1e2s
+t2r1es2s2z
+t2r1es2z
+2t12rettsg2i.
+trett1s
+tretts1gi
+2t12rettsgi2k.
+2t12rettsgin
+2t12rettsgir
+2t12rettsgit
+trs1s
+t1r
+t2r1s2z
+tr11te
+tri2d
+t1ri
+t2r1i1de
+t2ril
+t2rip
+t2ris
+2trkez
+tr1ke
+2t1r1m
+t2r1os
+t1ro
+t2r
+3t2rtelms1g
+t1rtelm
+tr1te
+trtel1m
+trtelm1s
+2t1rtes
+2t1rtk
+tr1t
+2trt2.
+tr1t
+2t1rtk
+tr1t2r
+2t1rtv
+t2r1u2
+2t1r2v.
+2t1rve1i
+tr1ve
+2trvek
+2t1rvn2y
+tr1v
+t1sa2
+t2sab
+t2sag
+t2s1aj
+t2sak
+t2s1al
+t2san
+t2sap
+t2s1as
+t2s1az
+t2s12
+t2s11t1a2
+t2s1eg
+t1se
+t2s1e2l
+t2s1e2r
+t2ss
+t1s
+ts1i1ko
+t1si
+t22s1or
+t1so
+t2s
+t2s12
+t2su
+ts2l
+t1s
+t2s11l
+ts11l
+t2s1t
+ts3zav
+ts2z
+t1s1za
+tsz12l
+t21s1z
+ts3zr
+t2szeg
+t1s1ze
+t2sz1emb
+ts3ze1ne
+t2s2zes2z
+t2sz1k
+t1s1z
+ts3z1si
+tsz2s
+2t12sznkb
+t1s1z
+t2tad
+t1ta
+t2t1a2l
+tt1c1sa2
+ttc2s
+t2t1e2g
+t1te
+tte2l1e2kh
+tte1le
+ttele1k
+tt1elks
+ttel1k
+t2t1el1ve
+2t1te1ri
+t2t1ers2
+t2t1e2v
+t2t12te
+t1t
+t2tok
+t1to
+t2t1o2l
+t2t1os
+t1t2
+t2tn
+t2t1r
+2t12v.
+2t12vad
+t1va
+2t1vb
+2t1vc
+2t12vedb
+t1ve
+2t12ve1i
+2t12vek
+2t12vem
+2tve2s.
+tv1s2z2
+t1v
+2t1vf
+2tvh
+2t12vi
+2tvk
+2t1vn
+2t1vr
+2t1vs
+2tvt
+t2v
+2t11v
+t2v1k
+t2vn
+2t12v
+2t1vv
+t2z2s
+tfa2l1aj
+t1fa
+tfa1la
+tfa2la2n
+tfa2le
+tfa2lom
+tfa1lo
+tf2jo
+tf2la
+tf2le
+tf2li
+tf2lo
+tf2l
+tf2ra
+tf2r
+tf2re
+tf2ri
+tf2r
+tf2ro
+tf2r
+tf2ru
+t3g2a2z1e
+t1ga
+tg2zak
+t1g
+tg1za
+tg2zr
+tg1z
+tg2z
+tge2n1el
+t1ge
+tge1ne
+tge2n
+tgen1s2
+tg2lo
+tg2l
+tgomo2ly1agg
+t1go
+tgo1mo
+tgomol2y
+tgomo1lya
+tg2ra
+tg2r
+tg2ri
+tg2r
+tg2ru
+tg2r
+tha2de
+t1ha
+1t2ha1u
+1t2h2e.
+t1he
+1t2heid
+the1i
+1t2heus2z
+the1u
+thon1n
+t1ho
+1t2hos2z
+th1sc
+1thy
+1ti
+ti2a1a
+ti1a
+ti2a1e
+ti2a1
+ti2af
+ti2ah
+ti2aj
+tiaks2z1
+ti2aks
+tia1k
+ti2a1la
+ti2am
+ti2a1p2
+ti2a1ta
+ti2atl
+ti2a1
+ti2av
+ti2c1hi
+tic2h
+ti2de1a
+ti1de
+2t1i2de1
+2t1i2deg
+ti2de1i
+2t1i2dej
+2t1i2de1o
+ti2dn
+ti1d
+2t1i2dz
+ti2di1o
+ti1di
+2t1i2dom
+ti1do
+2t1i2d
+tie2le
+ti1e
+tie2n
+ti2b
+ti1
+2t1i2ga
+2t1i2g
+2t1i2g2e.
+ti1ge
+2t1i2gk
+ti1g
+ti2g2n2y
+ti1g2ra
+2t1ihl
+ti1k1le
+ti1k1lu
+ti2konb
+ti1ko
+ti2ko1no
+ti2konr
+ti1k2ri
+ti2lac
+ti1la
+ti2lad
+ti2la2n
+ti2l1g
+ti1l
+tile2g
+ti1le
+til1eg2y
+ti2ler
+ti2lex
+ti2lim
+ti1li
+til1ing
+ti2l1i2p
+ti2lir
+til1isk
+2t1illa1to
+til1la
+2t1il1l
+ti2l12
+2t1i2l2y
+ti2mak
+ti1ma
+ti2mb
+ti1m
+2tim1d
+t1i2md
+ti2mj
+ti2mr
+ti2mz
+2t1im1mu
+2t1imre1i
+tim1re
+2t1i2naka2t.
+ti1na
+tina1ka
+2t1i2nakk
+ti2n1akt
+ti2n1a2n
+tin1a1r
+tina1t2
+ti2n1a1u
+ti2n1ll
+ti1n
+tin1rt2
+2t1in1d
+2t1in1de
+2t1in1d
+2t1in1du
+t2i2n2e.
+ti1ne
+ti2neg
+ti2n1e1k
+ti2nem
+2t1infar
+tin1fa
+2t1infl
+2t1infr
+tin2gal
+tin1ga
+tin2gas
+tin2g1r
+tin1g
+tin2g1e2l
+tin1ge
+1tin2g1e1ti
+tin2gos
+tin1go
+tin2g12
+2t1i2nic
+ti1ni
+tini2g
+tin1i1ga
+ti2n1i2m
+2t1in1ku
+2t1inkv
+tin3n
+tin12r
+ti1n
+ti2n
+2t1insp
+2t1integ
+tin1te
+2t1intz
+tin1t
+ti2n1ut
+ti1nu
+ti2n
+ti2ol
+ti1o
+ti2o1ni
+tio2x
+ti2pad
+ti1pa
+ti1p2la
+tip2pin
+tip1pi
+2t1i2rat
+ti1ra
+2t1i2rn
+ti1r
+2t1irg
+ti2rig
+ti1ri
+2t1irk
+2t1i2rod
+ti1ro
+ti2rom
+ti2rn
+ti1r
+2t1irr
+2t1irt
+tis2as
+ti1sa
+ti2s1a2u
+ti2s1el
+ti1se
+2t1i2s2i.
+ti1si
+ti2sim
+ti2sin
+ti2s1i2r
+2t1i2sis
+2t1is1ko
+ti2sor
+ti1so
+2t1istv
+tisz2ti1na
+tis2z
+tisz1ti
+ti2t1i2o
+ti1ti
+tiu2m
+ti1u
+2tivad
+ti1va
+2t1i2var
+2t1i2vn
+ti1v
+2t1i2v
+ti2xa
+tize2n1
+ti1ze
+ti2z2.
+ti1z
+2t1i2zj
+2t1i2zk
+ti2zr
+ti2zt
+ti2zv
+tizo2m
+ti1zo
+2t1i2zom1b2
+2t1izo1me
+2t1i2zomm
+2t1i2zomn
+2t1i2zomr
+2t1i2zomt
+2t1i2zomz
+1t
+t2g
+t2ja
+t2j
+t2j
+t2la
+t2l12
+2t12ni1o
+t1ni
+2t12no
+2t1ns
+t2n2y
+t2ra2n
+t1ra
+t2rar
+t2r1l
+t1r
+2t12rs
+t2r1e
+2t12r
+t2r
+t2r
+tts3s
+t1t
+tt1a2
+t1t
+tt1e2
+ttg2p12s
+tt1g
+ttg1p
+tt1p2
+t2v1e2c
+t1ve
+2t12ve1i
+t2vel
+t2ve2r
+2t12v1i
+t1v
+t1vi2
+t2vi2k
+t2vir
+t2viv
+t2v12
+t2v
+t2v
+tv1s
+t2za
+t2z
+t2zel
+t1ze
+tz1e1le
+t2z1emb
+t1zi2
+t2zik
+t2z1is
+t2z
+2tzl
+t2z1o
+t2z1s
+tz2s
+t2zu
+t2zl
+t1z
+tz11l
+2t12z
+tje2gy12
+t1je
+tjeg2y
+tj2t1
+t1j
+tka1pr
+t1ka
+tka2r2r
+tka1r
+tken1de2
+t1ke
+tker2t1szn
+tker1t
+tkerts2z
+tk2p1e2kh
+t1k
+tk1pe
+tkpe1k
+tk2p1e2r
+tkia2l
+t1ki
+tki1a
+tki12
+tki1e2
+tki12
+tk2la
+tk2li
+tk2l
+tk2l
+tk2lu
+tk2z1l
+t1k
+tk1z
+tk2h
+t1k
+tk1
+tk2ra
+tk2r
+t1k2rec
+tk1re
+tkre1
+t1k2r
+t1k2ri
+tk2r
+t1k2ro
+t1k2r
+tk2ru
+tk2va
+tk2vi
+tk2v
+tla2c3
+t1la
+tla2g1a2d
+tla1ga
+tla2g1ar
+tla2gas
+tla2gl
+tla1g
+tla2g1e2
+tlag3g
+tla2g1
+tla2n1e2
+tlan1k2
+tla2n
+tla2pr
+tla1p
+tle12
+t1le
+tlen3n
+tle2t1a2n
+tle1ta
+tle2tas
+tle2t1e2l
+tle1te
+tle2t12r.
+tle1t
+tle2tos
+tle1to
+tle2t
+tle12
+tl2kal
+t1l
+tl1ka
+tl2kem
+tl1ke
+tls3s
+tl1t1r
+tl1dr
+t1l
+tma2gl
+t1ma
+tma1g
+tma1k
+tm2nyir
+t1m
+tmn2y
+tm1nyi
+tmnyta2n1csn
+tmny1ta
+tmnyta1n
+tmnytanc2s
+tme2g1e2
+t1me
+tme2g1
+tme3gif
+tme2gi
+tme2g1o
+tmu2s
+t1mu
+tmus3s2
+tmu2s2z
+tna2gya
+t1na
+tnag2y
+tn2d1
+t1n
+tne2k1el
+t1ne
+tne1ke
+tne2kld
+tne1k
+tne2m1e2r
+tne1me
+tne2r1a
+tne2r1
+tne2s1z1a
+tnes2z
+tne2s1zi
+tne2s1z12
+tn1v1a2
+t1n
+tno1g
+t1no
+tnmen1
+t1n
+tn1me
+tnmenk2
+tn2k1l
+t1n
+tn1k
+tn2n
+t1n
+tn1
+1to
+2t1o2be
+2t1obj
+2t1obl
+2t1obs
+to1c2ki
+to2da1a
+to1da
+to2das2
+to2d
+2t1o2d
+2t1odv
+2t1off
+togs1s
+to1g
+to2k1a1ka
+to1ka
+to2k1a2n
+to2k1ap
+tok1a1ri
+to2k1l
+to1k
+tok12rok
+tok1ro
+to2k1tl
+to2k1tm
+to2k1tr
+to2k1ts
+to2k1tt
+to2k1tv
+to2k12l
+to1k
+to2k2p
+to2kid
+to1ki
+to2k1im
+to2k1in
+to2k1ip
+to2k1iv
+to2k
+t1o2ko1z
+to1ko
+to2k1
+to2k
+tok1s
+to2k1ur
+to1ku
+to2kr
+to1k
+to2k
+to2k
+to2l1a2d2
+to1la
+2t1o2laj
+to2l1akt2
+tola2n
+to2l1an2y
+to2l1a2r
+tol1atom
+tola1to
+tol1br
+to1l
+2t1olda1la
+tol1da
+2t1oldaln
+2t1olda1lo
+2t1olda1l
+2t1o2lim
+to1li
+tol2l1rb
+tol1l
+tol2l12r
+tol2l1rh
+tol2l1rr
+tol2leg
+tol1le
+tol2lin
+tol1li
+tol2l12
+to2l1o2r
+to1lo
+2t1olts
+tol1t
+to2l1ut
+to1lu
+2t1olvas
+tol1va
+to2lye2
+tol2y
+to2m1ag
+to1ma
+to2m1ak
+to2m1a2l
+to2m1a2n
+to2m1ap
+to2m1l
+to1m
+to2m12r
+toms1s
+tom1b2
+2tom1be
+to2m1e2l
+to1me
+to2men
+to2m1e2s
+to2m
+to2m1os2z
+to1mo
+to2m12
+to2m
+tom1p2
+tom1s
+2tom1t
+2to1m
+to2m
+to2m
+to2nalm
+to1na
+tona1t2
+tona1u2
+ton1ll
+to1n
+ton1lm
+to2n12z
+to2n1e2l
+to1ne
+to2n1e2n
+to2ner
+ton1gr
+to2nil
+to1ni
+ton1k2
+to2nol
+to1no
+to2n1or
+to2n1os2z
+to2nc
+to1n
+to2nr
+to2n
+to2n
+ton1s2
+tont2
+ton1tr
+to2n12t
+to1n
+to2n
+to2n
+to2nyad
+ton2y
+to1nya
+to2nyal
+to2nye
+to2p1at
+to1pa
+2topc
+2to2pe
+to2pik
+to1pi
+to2pi2z
+2top2p.
+2top1po
+2toppr
+top1t2
+to2p
+to2r1a2d
+to1ra
+to2r1ag
+to2r1aj
+to2r1a1ka
+to2r1akn
+to2r1a1ko
+to2r1a2l
+tora2n
+to2r1an2y
+to2r1a2p
+to2r1ar
+tor1ass
+to2rat
+to2r1a2u
+to2r1av
+to2r1c
+to1r
+to2r1ll
+to2r1lm
+tor11t
+to2r1tl
+to2r12z
+2t1or1c
+tord2
+tor1dr
+to1re2
+t2o2re2k
+to2r1e2l
+to2r1er
+tor1f2
+tor1g2
+2t1organ
+tor1ga
+2t1o2ri1e
+to1ri
+to2r1ill
+to2r1int
+to2r1isk
+tor1k2
+2tor1n
+to2rop
+to1ro
+to2ros2z
+tor1oszt
+to2r1ov
+to1r2
+to2rn
+to2r1r
+to2r
+to2r
+2t1or2r.
+2t1orrv
+tor1r
+2t1or1ri
+tors2
+tor1sk
+2t1or1s
+tor1sp
+tor1st
+tort2
+tor1tr
+to2r
+3t2or1v
+2t1orvos
+tor1vo
+2t1orvv
+to2s1as
+to1sa
+to2s1e
+to2sik
+to1si
+to2s1in
+to2sis
+tos3s1ze
+tos2s2z
+2t1os1to
+2t1ost2y
+to2s
+to2szal
+tos2z
+to1s1za
+to2sza2n
+to2s1z1e
+tosz1k2
+tosz1tr
+3t2o2t.
+2t1otthon
+tott1ho
+to2ut
+to1u
+to1va1
+2t1o2ve
+2t1o2vi
+2t1o2vu
+2t1oxid
+to1xi
+2t1o2xig
+to1yo
+toza2t1al
+to1za
+toza1ta
+1t
+t2g2y
+t1
+t2r
+tt1
+t2ta2
+t1b2l
+t1b1ra
+t1b1r
+t1cl
+tcsa2p12g
+t21c1sa
+tc2s
+tcsa1p
+t2da2j
+t1da
+t2d1a2n
+t2d1e1s
+t1de
+t1d1ro
+t2dr
+t1d
+t1fl
+t1gl
+t1g2r
+ti2g
+t1i
+t2v
+t1
+tk2rok
+t1k
+tk1ro
+t1k2l
+t1k1re
+t1k2r
+t1k1ro
+tnus3s2
+t1nu
+to2k
+t1o
+t2r
+t1
+tp1ass
+t1pa
+t2p1e2l
+t1pe
+tp1int
+t1pi
+t1p1ro
+t2ras
+t1ra
+t2rb
+t1r
+t2r1
+t2rh
+2t12r1i
+t2rr
+2t12rs
+t2rt
+t12rv
+t2se2p
+t1se
+ts1tk
+t2st
+t1s
+ts1t
+ts12tt
+t1s2how
+ts1ho
+t2sr
+t1s
+t1s2kan
+ts1ka
+t1skl
+ts1k
+t2s1ol
+t1so
+ts2pek
+ts1pe
+t1s2rc
+ts1r
+t22s12l
+t1s
+t2s3ze1ne
+t2szen
+ts2z
+t1s1ze
+t1szf
+t21szk
+t2taj
+t1ta
+t2tom
+t1to
+t1t2r
+t1t2re
+t1t1ro
+2t12vod
+t1vo
+2t12v
+1t
+tb2bev
+tb1be
+tb2b1o
+2t1bl
+2td1
+t1d
+t2dm
+t2d
+2td1n
+t2do
+2tdt
+t1d
+2t1d
+t2ka
+t2k
+t2k1e2v
+t1ke
+t2k12r.
+t1k
+t2k1rd
+t2ki2d
+t1ki
+t2k
+2t2ko
+2t12kr
+t1k
+tks3s
+t2k1
+2t1krs
+tk1r
+t2ku
+2t1lb
+2t1l1ci
+tl2gya
+tlg2y
+tl2t12
+t1ltn
+1tl1t
+t1ltz
+tm2b1a
+tm1be2
+tm2bel
+tm2b1o
+t1m1le
+2t1m1l
+t1m1li
+t2ml
+t1m
+t2na
+t2n
+tn1d2
+t2ne2n
+t1ne
+t2n1
+tn2kr
+tn1k
+tnks2z1
+tn1k
+t2no
+t2n1
+tn1s
+t2nu
+t2n
+2t12reg
+t1re
+trs3s
+t1r
+2trks
+t1r
+tr2t1a2
+tr2teg
+tr1te
+tr2t1e2lem
+trte1le
+tr2t1er
+tr2trn
+tr1t
+tr2t1s
+tr2t1o2
+tr2t1l
+1tr1t
+tr2ts
+tr2z1sa
+trz4s
+tr2zs12l
+tr1z1s
+2t1sv
+2t1s2z
+2t1tl
+tt2t1
+2t1tv
+2t12v.
+2t1vb
+2t1vh
+2t12vi1e
+t1vi
+2tvig
+2t1vj
+2t1vk
+2t1vn
+2t1vr
+2t1vv
+2t12zn
+t1z
+tz1e2
+t1z
+1t
+ta2c
+t1a
+ta2l
+t2g
+t1
+t1bl
+t1br
+te2k
+t1e
+te2rr
+te1r
+t2l
+t1
+t1fl
+tg2p1e2kh
+t1g
+tg1pe
+tgpe1k
+tg2p1ss
+tg1p
+tg2p1s1z
+tgps2z
+tg2p1szn
+t1gr
+ti2r
+t1i
+t2t
+t1
+t2v
+tjo2g12s1za
+t1jo
+tjo1g
+tjogs2z
+tjo2g1szn
+t1kl
+t1kv
+t1pl
+t1ps
+t2rag
+t1ra
+t12r1a2l
+2t12r1a2n
+tr1eg2y
+t1re
+2t1rez
+2t12rk
+t1r
+2t12r1
+t2rin
+t1ri
+t2r1is
+2t12r
+2t1r1j
+2t1rjel
+tr1je
+2t1r1j
+2tr1ka
+2trl
+2t2r1l
+t1r
+2trp
+2t1r1ti
+2t1r1t2r
+2t1rz
+t1s1ho
+2t1sn2y
+t1s1pe
+t1s2pi
+t1sp2r
+t1s1r
+t1s1ta
+t1s2t
+t1s1t
+t1st2r
+2t1s
+t2s2.
+ts2z2
+t1szt2
+t1tr
+t2l
+t1
+t1z2
+tzr1
+tpen3n
+t1pe
+tp2fe
+tp2la
+tp2l
+tp2l
+tp2lu
+tp2ra
+tp2re
+tp2r
+tp2ri
+tp2ro
+tp2r
+tp2ru
+tp2s2z
+tpu2tin
+t1pu
+tpu1ti
+t2ra1f
+t1ra
+1t2ra1g
+1tra1gi
+traj1z2
+traj2z1r
+tra1k2l
+tran2d1a2
+tran2d
+trans1s
+tran2sz1a1i
+trans2z
+tran1s1za
+tran2sz1o2m
+tran1s1zo
+tra1s2p
+trat2
+tra1tr
+1t2r1gya
+t1r
+trg2y
+1t2rgyb
+tr1gy
+1t2rgy1
+1t2rgyh
+1t2rgy1i
+1t2rgyj
+1t2rgyk
+1t2rgyn
+1t2rgyr
+1t2rgys
+1t2rgyt
+1t2rgyv
+t2rjk
+trn2s2z
+tr2nyal
+trn2y
+tr1nya
+tr2t1r
+tr1t
+tre2c1sa
+t1re
+trec2s
+tre2c1so
+tren2da
+tren2d12
+1t2re1n
+tr12
+t1r
+1t2r1ni
+tr1p2
+tr22s1z12
+trs2z
+tri1i2
+t1ri
+t2ri1k
+t2rill
+1t2ri2.
+tri1
+t2rij
+t2rik
+tro2mad
+t1ro
+tro1ma
+tro2maj
+tro2mar
+tro2n1ag
+tro1na
+tro2nal
+tro2nan
+tro2ne2s
+tro1ne
+tron3n
+tron1tr
+tr2os
+tro1szf
+tros2z
+tr2de
+t1r
+tr2nas
+tr1na
+tr2n1e
+1t2rnj
+1t2r1no
+t2rnt
+tr1s2z
+tr2z1si
+trz2s
+1t2rs
+t1r
+1t2rub
+t1ru
+tru2mad
+tru1ma
+1t2rup
+tsa2vo
+t1sa
+ts2c2h
+1ts1c1he
+ts2g1j
+t1s
+ts1g
+ts2k
+ts2ko
+ts2la
+ts2l
+ts2le
+ts2li
+ts2m
+ts2mi
+ts2ni
+ts1i2
+t1s
+ts2pa
+ts2pe
+ts2pi
+ts2po
+ts2p
+tsp2r
+ts2r
+t1s2ta
+t1s2t
+ts2te
+ts2t
+ts2ti
+ts2t
+ts2to
+tst2r
+ts2tu
+ts2t
+1t2sub
+t1su
+ts2vi
+tsza2k
+ts2z
+t1s1za
+tsza2k12
+tsza2t1e2
+tsza2t
+tsze2r1el1m
+t1s1ze
+t3szerel
+tsze1re
+tszer1szn
+tsze1r
+ts2zers2z
+tszer1s1z
+tsze2r1sz1n
+tsz2t
+t1s1z
+t1sz2f
+t1sz2k
+t1sz2l
+tszomja2d
+t1s1zo
+t3szomj
+tszom1ja
+tszom2j1a1da
+tsz2g1e2le
+t1s1z
+t3sz1ge
+t1sz2p
+t1sz2t2
+ttad2
+t1ta
+ttag1g
+tta2g1o2ku
+tta1go
+tta2n12szokn
+tta1n
+ttans2z
+ttan1s1zo
+tta2n1r
+tta1n
+t2t1a1r
+t2t1aszt
+ttas2z
+tta1t2r
+tta12
+t2t1a2z
+ttn2s12g
+t1t
+ttn1s
+tt2v1i2
+tte2le1me
+t1te
+tte1le
+t2t1e2l1a
+tte1l
+tte2r1in
+tte1ri
+t2t1e2r
+tte2s1a2
+t2t12g.
+t1t
+t2t12le
+tt2rak
+tt1ra
+tt2r1em
+tt1re
+tt2r1es
+tt2r12ne
+tt1r
+tt2ri2d
+tt1ri
+ttr1in
+tt1ss
+tt12vr
+tt1v
+t2t1ing
+t1ti
+t2t1i2o
+t2t1i1ro
+t2t1isk
+t2tizz
+tt1r1a
+t1t
+tt11r
+tt1kr
+ttornc1
+t1to
+ttor1n
+t2t1ors2
+tt1dr
+t1t
+tt1p2
+t2t12r
+tt1sh
+tt1s2r
+tt2l
+t1t
+tt11l
+tt1pr
+t1t2raf
+tt1ra
+t1t2rag
+t1t2ran
+t1t2rav
+t1t2rf
+tt1r
+tt2rn
+tts2gel
+tt1s
+tts1ge
+tt2si
+t2t1ug
+t1tu
+t2t1d
+t1t
+t2t1t
+t2t12v
+t2t2y
+tty1or
+t1tyo
+tty12l
+t1ty
+tty2s3z2r.
+t1ty
+ttys2z
+tty1s1z
+t1ty2
+tty1l
+ttyls1
+tty1l
+1tu
+tu2r
+tu1
+tubus1s
+tu1bu
+tuda2te
+tu1da
+tuda2t1
+2tu1d
+tu2ga
+tu2go
+tu2hu
+tu2in
+tu1i
+2t1ujj
+2tu1k
+tu1lo2
+2t1ul1ti
+2t1ultr
+tu2l
+tu2mab
+tu1ma
+tu2m1a2d
+tu2maj
+tu2mal
+tu2man
+tu2mar
+tu2maz
+tu2ml
+tu1m
+tu2me2g
+tu1me
+tu2m1el
+tu2mer
+tu2mes
+tu2m1i2k
+tu1mi
+tu2mim
+tu2m1inf
+tu2m1int
+tu2m1ir
+tu2mis
+tu2miz
+tu2m
+tu2mol
+tu1mo
+tu2m
+tu2m
+tum1p2
+tu2m
+tu2nal
+tu1na
+2t1unc
+2t1u2ni1
+tu1ni
+tu2nit
+2t1u2no
+2t1u2n
+2t1unt
+tu1p2r
+tu2rac
+tu1ra
+2tura1i
+2t1u2rak
+tu2ra1lo
+tu2ram
+2t1u2ras
+tu2rh
+tu1r
+2turn
+tu2rr
+tur2g1a
+tu2run
+tu1ru
+tus1abl
+tu1sa
+tu2sar
+tu2sg
+tu1s
+tu2se
+tu2s1r1t
+tu1s
+tu2sis
+tu1si
+tu2s1
+tu2sor
+tu1so
+tu2s12
+tu2s1
+tu2s
+tus3s1ze
+tus2s2z
+tus3s1zi
+tus3s1zo
+tu2s
+tu2szab
+tus2z
+tu1s1za
+tu2sz1a2d
+tu2szag
+tu2szal
+tu2szap
+tu2sza2r
+tus3zav
+tu2szl
+tu1s1z
+tusz1em
+tu1s1ze
+tu2sz12l
+tu1s1z
+tu2sz12p
+tu1s1zi2
+tu2sz1il
+tu2szin
+tu2sz1ip
+tu2szir
+tu2szis
+tu2sz1it
+tu2s1z
+tusz1k2
+tu2szol
+tu1s1zo
+tu2s3z
+tu2s1z
+tu2s1z
+tus1z3sa
+tusz2s
+tus3z1se
+tuszt2
+tusz1tr
+tu2s1z2
+2t1u2tad
+tu1ta
+2t1u2tak
+2t1u2tal
+2t1u2tam
+2t1u2tas
+2t1u2taz
+2t1u2t
+2t1utc
+2t1u2to
+tu2td
+tu1t
+tu2t1p2
+tu2tt
+tu2tun
+tu1tu
+tu2um
+tu1u
+2t1u1z1so
+tuz2s
+1t
+2t1jd
+2t12j
+2t1js
+t2ju
+t2l1a2
+t2l12
+t2l1e2
+t2l12
+t2list
+t1li
+t2l
+t2lo2k
+t1lo
+t2lop
+t2l12
+t2l
+t2l1
+tl1s
+tlt2
+t2l
+t2l
+t2l
+tra1s2z
+t1ra
+t22r1s
+t1r
+t2r1ol
+t1ro
+t2r
+t2r
+t22s1ze
+ts2z
+t22s1z
+t22s1z
+t2t
+2t1tb
+t2t1e2
+2t12t
+2t1th
+2t12ti
+2t1tj
+2t1tl
+2t1tn
+2t12to
+2t1tr
+2t1tt
+2t1tv
+1t
+2t12d
+2t12d
+2t1dv
+t2ge
+t2g2y
+t2l1a
+t2l
+2t12led
+t1le
+t2l1e2m
+t2len
+t2lep
+t2l1e2s
+t2l1e2v
+t2l1r
+t1l
+t2lir
+t1li
+t2l
+t2l1o2
+t2l1kl
+t1l
+t2lm
+t2l1n
+t2l1z
+t2lk
+t1l
+t2lr
+t2lu
+t2l
+t2ma
+t2mk
+t1m
+t2m1
+tne2tel
+t1ne
+tne1te
+2t1nn
+2t12reg
+t1re
+2t12res
+2t12r
+2t12r
+2tst
+2t12te
+2t12t
+t2ti
+2t1tk
+t2t
+2t12t
+t2v
+2t12zen
+t1ze
+2t1zl
+1t
+tcsa2p1
+tc2s
+t1c1sa
+t2d1al
+t1da
+t2d
+te2g
+t1e
+te2kt
+te1k
+t2h
+t1
+tf1l2
+t1f
+t1gr
+t1kv
+tle12
+t1le
+t1pl
+t1pr
+trs1s
+t1r
+t2s1or1r
+t1so
+t1sp
+t2s12
+t2z1a2
+tz2r
+t1z
+t2z11ra
+t2zt
+t2ze1ne
+t1ze
+t2zis
+t1zi
+t2z
+t2zo
+t2z1s
+t1z
+tz3seb
+tz2s
+t1z1se
+t2z
+tva2n1e
+t1va
+tva2n2v
+tva1n
+tv2a2raj
+tva1ra
+tv2nya2d
+t1v
+tvn2y
+tv1nya
+tv2ny
+tv2z1al
+tv1za
+tv2zip
+tv1zi
+tve2n1e2v
+t1ve
+tve1ne
+tven3n
+tven3t
+tve1n2
+tve2nl
+tve2n3y
+tve2raj
+tve1ra
+tve2ra2l
+tve2r12
+tve2reg
+tve1re
+tve2r12s2z
+tve1r
+tve2rint2
+tve1ri
+tve2rip
+tve2r1o
+tvers2
+tver1st
+tve3se
+tv2nye2l
+t1v
+tvn2y
+tv1nye
+tv2r1int
+tv1ri
+tv2r1o
+tvisel12
+t1vi
+tvi1se
+tvise1l
+tvis3s1z
+tvis2s2z
+t2v1ve
+t1v
+t2y
+1tya
+tyai2ko
+tya1i
+tya1kl
+tya1p2
+tya1s2z2
+tyat2
+tya1tr
+tya1u2
+1ty
+2ty1g
+ty1ld
+ty1ll
+ty2ra2n
+ty1ra
+tyr1s
+tys3s
+1tye
+ty1e2g2y
+ty1e1la
+ty1ell
+ty1emb
+ty1e2r
+2ty1ex
+1ty
+2ty11te
+1tyi
+1ty
+ty12r
+ty1v
+tynk2
+1tyo
+tyo2la2n
+tyo1la
+tyo2r1os
+tyo1ro
+1ty
+1ty
+1ty
+ty1s
+ty1pr
+ty2sa
+ty1sp
+1tyu
+2ty1ug
+ty1u2t
+1ty
+ty2k
+1ty
+1ty
+1t2zek1r
+t1ze
+1t2ze2n.
+1t2ze2s.
+1t2zese1ke
+tze1se
+tz12r
+t1z
+tz3sc
+tz2s
+t3zs2r
+t1z1s
+2u.
+u1a
+ua2c2h
+ua2da
+ua2d
+u2ado2r.
+ua1do
+u2adorb
+u2ado1r
+u2adorn
+u2ado1ro
+u2adorr
+u2adort
+ua2d
+ua2g
+ua2ja
+ua2j
+ua2la
+ua2l
+ua2n2y
+ua2s2z
+ua2t2y
+ua2ut
+ua1u
+ua1y
+ua1y
+ua1yi
+ua1yo
+ua2zo
+u1
+ucis2
+u1ci
+uci1
+u2ga
+u2g2y
+u2po
+u2r1
+u2r1e
+u2rj
+u1r
+u2r1is
+u1ri
+u2s2z
+u2t1a2
+u2t1e
+ub1a2la
+u1ba
+ub1alk
+u2b1ang
+ub1arc
+ub1a2ri
+ub12r.
+u1b
+ub12ro
+ub1dr
+u2b1e2b
+u1be
+u2b1ed
+ube2l
+ube2lel
+ube1le
+ub1e1l
+ub1e2se
+ub1est
+u2b1j
+u1b
+ub11le
+u2b12n
+u2b1p
+u2b1rd
+u2b12re
+u2b1rm
+u2b1r1te
+ubrt2
+u2b11ve
+ubi2g
+u1bi
+u2b1i1ga
+u2b1i1ge
+ubi2ke
+u2b1in2a.
+ubi1na
+u2b1ism
+ub1kr
+ub1ol1da
+u1bo
+u2bor1k2
+u2b1orv
+u2b1os2z
+ub11ri
+u1b
+ub1l
+u1b
+ub1s
+ub1v
+ub1pl
+ub1pr
+ub1sl
+ub1sp
+u2b1ud
+u1bu
+ubu2s2z
+u2b1j
+u1b
+ub1d
+u1b
+ub1g
+ub12l
+ub1z
+uca2t12
+u1ca
+uc2c1e
+uc2c3h
+uc2c1i1na
+uc1ci
+uc2cip
+uc2c
+ucc3s2z
+uc2c2s
+uc2c
+uc2c
+uc2c2z
+uc1emb
+u1ce
+u1c3h
+uc2h
+u2c3h
+u2c3ho
+uci2r
+u1ci
+uci1
+uci1p2
+u1c2kig
+uc1ki
+u1c2kon
+uc1ko
+u1c2kot
+uc12l
+u1c
+uc1pr
+ucsa2p12
+uc2s
+u1c1sa
+u2c3sg
+u1c1s
+u2cs1l
+u2cs1ru
+u2cs1e2l
+u1c1se
+u2cs1id
+u1c1si
+ucs1s
+u2c3s
+uc3s2z
+u2c1ug
+u1cu
+uc1g
+u1c
+u1c3z
+uc2z
+u1c3ze
+uda2tal
+u1da
+uda1ta
+ud2a2tl
+uda1t
+uda2t12ram
+ud2atr
+udat1ra
+uda2t1eg
+uda1te
+uda2ter
+udsks2z1
+u1d
+uds1k
+uds3s
+udi2o
+u1di
+u2d1isk
+2udiz
+ud2se
+u1d
+ud2sor
+ud1so
+u1d2r
+u1d2ro
+u1e
+ue2b
+ue2d2z
+ue2g
+ue2gs2z1
+ue2g2y
+uel1r
+ue1l
+ue2l
+ue2me
+ue2r
+uervz1
+uer1v
+u2e2s.
+u2esb
+ue2s1e
+u2esh
+u2e1si
+u2esk
+u2esn
+ue2s
+u2esr
+u2est
+u2e1su
+ue2s3ze1ne
+ues2z
+ue1s1ze
+ue2te
+ue2ve
+u1
+u2ge
+u2g
+u2k
+u2le
+u2p
+u2p
+u2te
+uf2nye
+u1f
+ufn2y
+u1f2le
+u1f2ri
+uf2t
+ug1ag2y
+u1ga
+uga1p2
+ug1a1pa
+1u2ga1ro
+uga2t1el
+uga1te
+uga2t2s
+uga1t
+uga2tol
+uga1to
+uga2t12r
+uga1t
+ug1g
+u1g
+ug1ra2
+ug2r1ad
+ug2r
+ug2ros
+ug1ro
+ug2ru
+ug1r1
+ugs3s
+ug12s2z
+ug1e2v
+u1ge
+ug12l
+u1g
+ug1ing
+u1gi
+ug1int
+u2g1i1ro
+ugi2t
+ug1i1ta
+ug1i1v
+ug1r
+u1g
+ug1kl
+ugo2r12
+u1go
+ugosz2l
+ugos2z
+ug1sv
+u1g
+ug22s3z
+ug1s2z
+ug1s
+u1g
+ug1pr
+ug1sk
+2ugu1i
+u1gu
+u2g1ut
+u2g1j
+u1g
+u2g1z
+u1g
+ugya2n
+ug2y
+u1gya
+uh1a2d
+u1ha
+uh1alk
+uha2r1as
+uha1ra
+uha1t2r
+uh1att2
+u2h12g
+u1h
+uh1ll
+u2h12r.
+u2h1rb
+u2h1rf
+u2h1rh
+u2h1rn
+u2h1rr
+u2h1rv
+uh2szak
+uhs2z
+uh1s1za
+uh1em
+u1he
+uh1ex
+uh1ind
+u1hi
+u2h1ing
+uh1orz
+u1ho
+uh1r
+u1h
+uh1pr
+uh1tr
+u2h2u.
+u1hu
+u2huj
+uh1ujj
+uh1z
+u1h
+u1i
+ui2de
+ui2d
+ui2e1u
+ui1e
+ui2ga
+ui2g
+u2ilh
+ui2pa
+ui2r
+ui2ro
+ui2z
+u1
+u2ja
+u2ju
+u2ve
+u2v
+u2j1an
+u1ja
+1ujj2a.
+uj1ja
+1ujjad
+1ujja1i
+1ujjak
+1ujjam
+1ujjas
+1ujjat
+uj2j12ru
+uj1j
+1ujjb
+1ujjc
+1ujjd
+1uj2j1e2
+1uj1j
+1ujjf
+1ujjg
+1ujjh
+1uj1ji
+uj2j
+1ujjk
+1ujjl
+1ujjm
+1ujjn
+1ujjp
+1ujjr
+1ujjs
+1ujjt
+1uj1ju
+1uj1j
+uj2j
+1ujjv
+u2j1op
+u1jo
+uk1abl
+u1ka
+uka2c3se
+ukac2s
+u2k1a2lap
+uka1la
+uka1pl
+uka2rn
+uka1r
+u2k1arc
+uka2szs
+ukas2z
+uka1s1z
+uka1t2r
+uk1ll
+u1k
+uk2sar
+uk1sa
+u2k12s
+uks3s
+u2k1tm
+uk1bl
+uke2l
+u1ke
+uk1e2m
+uk1ex
+u2k1g
+u1k
+u2k1rz
+u2k1i2p
+u1ki
+uk2k1alt
+uk1ka
+uk2k1eg
+uk1ke
+uk2k1em
+uk2k1o1la
+uk1ko
+uk2k2l
+uk1k
+ukls1s
+uk1l
+ukl22s3z
+uk1l
+ukl1s2z
+u2k1old
+u1ko
+uko1ra2
+uko2ras
+uko2r12
+uko2ril
+uko1ri
+uko2rin
+uko2r1o
+uks2
+u1k
+uk1b
+u1k
+uk1pr
+u1k2rn
+uk1r
+uk12t
+u1k
+uk1r
+u1k
+ula2c1s12
+u1la
+ulac2s
+ula1g2
+ula2jas
+ula1ja
+ul1aleg
+ula1le
+u2l1alj
+ula1s2p
+ulata2l
+ula1ta
+u1la2t1a1la
+ul2a2t1a2n
+ul2a2tl
+ula1t
+ula2tem
+ula1te
+ula2t1b
+ula1t
+ula2tik
+ula1ti
+ula2tol
+ula1to
+u2l1br
+u1l
+ul2k1e
+ul2k1
+u2l12ri1a
+ul1ri
+ul2s1i2k
+ul1si
+ulsks2z1
+uls1k
+uls3s
+ul2s1za
+uls2z
+ul2s1ze
+ul1bl
+ulcs1e2l
+ulc2s
+ul1c1se
+ulcs1es
+ul2cs12r.
+ul1c1s
+ul2csrv
+ul2cs12v
+ul2c2si1ga
+ul1c1si
+ul2csip
+ul2c1s12
+ul2csor
+ul1c1so
+ul2c1s12
+ul2c1s1
+ul2csut
+ul1c1su
+ul2c1s
+ulcs3z
+ule12
+u1le
+ule2l
+ul1e1l
+ulet2ta
+u2l1ex
+ul2kal
+u1l
+ul1ka
+ul2k1e2
+ul2k1ol
+ul1ko
+ul2kut
+ul1ku
+ul11p
+u2l1r1t
+uli2nar
+u1li
+uli1na
+uli2nin
+uli1ni
+ul1ism
+ul12r
+u1l
+ul1k2r
+ul2l1em
+ul1le
+ul2l1en
+ul2l1r
+ul1l
+ul1f2
+u1l
+uli2kon
+ul1i
+uli1ko
+ulks2z1
+ul2ks
+ul1k
+ul12
+ult2
+ul2za2n
+ul1za
+ul2z12ra
+ul1z
+ul2z3s
+ul1t
+u1l
+ul1pr
+ul1st
+ul2t1aj
+ul1ta
+ulta2r
+ult1as2z
+ul2taz
+ul2tl
+ul1t
+ul1r
+u1l
+ul1t
+u1l
+ul1r
+u1l
+u2lyi
+ul2y
+u2m1abl
+u1ma
+um1abr
+um1a2c
+um1ac2h
+um1a2dat
+uma1da
+u2m1adm
+um1a2do
+um1a2d
+um1a1j
+u2m1a2ka
+umaks2z1
+um2aks
+uma1k
+u2m1akk
+u2m1akt
+u2m1a2la
+u2m1alg
+um1all
+um1alt
+u2m1a1na
+u2m1ank
+u2m1a2no
+u2m1a2n2y
+uma1p2
+u2m1a2r
+um1arc
+um1arg
+u2m1a2ri
+um1a2ro
+um1asp
+u2m1atl
+u2m1a2u
+um1a2zo
+u2m1g
+u1m
+u2m1ll
+um1lm
+u2m12rak
+um1ra
+u2m12ram
+u2m12ras
+u2m12r
+u2m1rf
+u2m1rk
+u2m1rn
+u2m12ro
+u2m1rr
+u2m1rt
+u2m12ru
+u2m1rv
+u2m12t1a
+u2m1tm
+u2m11tu
+um1b2l
+um1b2r
+um1dr
+u2m1e2d
+u1me
+u2m1ef
+ume2g
+ume2g1o
+um1eg2y
+um1e1la
+u2m1elb
+u2m1e2le
+um1e1l
+um1elh
+u2m1e2l12
+um1elj
+um1elm
+u2m1eln
+um1e1lo
+um1e2l
+u2m1elt
+um1elv
+u2m1e2m
+ume2n1
+ume2n12
+um1e2re
+um1erk
+um1e2r
+um1e2se
+um1ess
+um1e2s2z
+u2m1e2t
+u2m1e2v
+u2m1ex
+um1ezr
+u2m1g
+u1m
+u2mhs
+um12le
+um1lv
+u2m1p
+u2m12r.
+u2m1rc
+u2m1rm
+u2m1r1te
+u2m1r1t
+u2m1rv
+u2m12te
+um1fl
+um1f2r
+um1gl
+um1gr
+umi1a2
+u1mi
+u2m1i2d
+umig2
+umi1gr
+um1imp
+umi2n2a.
+umi1na
+u2m1ind
+u2m1ing
+u2m1inv
+u2m1i2onb
+umi1o
+u2m1i2o1n
+u2m1i2onh
+u2m1i2onj
+u2m1i2on1k2
+u2m1i2onn
+u2m1i2o1no
+u2m1i2onr
+u2m1i2ont
+u2m1irt
+um1isk
+umi1sl
+um1ism
+umi1s2p
+umi2szr
+umis2z
+umi1s1z
+umi2s1z
+umit2
+umi1tr
+um1i1z
+um1v
+u1m
+um1z
+umk1s1z1e
+um1k
+umks2z
+um1kl
+um1kr
+um1kv
+umla2u
+um1la
+um1na2
+u2m1o2koz
+u1mo
+umo1ko
+um1o1la
+um1old
+um1oll
+um1olt
+um1olv
+u2m1o2p
+umo2ra2n
+umo1ra
+um1o2rat
+umo2rl
+umo1r
+umo2rin
+umo1ri
+u2m1os1to
+u2m1os2z
+u2m1ox
+um12r
+u1m
+um12l
+u1m
+um1m
+um1n
+um12r
+um1s
+um1t
+um1v
+um12z
+um12r
+u1m
+um1s
+umpe2l
+um1pe
+ump1e1le
+um2p1ing
+um1pi
+um1p2r
+um1sk
+um1sp
+um1st
+um1s2z
+um1t2r
+u2m1ud
+u1mu
+u2m1ug
+u2mu1ni
+u2m1u2r
+u2m1u2t
+um1g
+u1m
+um12l
+um1r
+um1s
+um1t
+um1v
+um1z
+umva2s
+um1va
+una1b2
+u1na
+un1a1du
+un1akt
+u2n1arc
+u2n12g
+u1n
+un2c1s1e
+unc2s
+un2csiv
+un1c1si
+un2d2z
+un1e2r
+u1ne
+un1e2t
+un1g
+u1n
+un2g1a2g
+un1ga
+un2g1eg
+un1ge
+un2g1er
+ung3g
+un2g1ol
+un1go
+u2n1i2d
+u1ni
+1u2nif
+1u2ni1ku
+u2n1il
+u2nin
+un1ing
+1u2niv
+unka1p2
+un1ka
+unka1s
+un2k1eg
+un1ke
+u2nod
+u1no
+u2n1orr
+un1or1s2
+u2not
+un1pr
+un1s2t2
+u2nun
+u1nu
+u2n1tj
+u1n
+un12l
+u1n
+u1o
+uo2la
+uo2li
+uo2r1a2
+uo2r1i2o
+uo1ri
+uo2xi
+u1
+u21bu
+u21ne
+u1p2r
+u21r
+u2ri
+u21so
+u2s2z
+u21ve
+u1
+u2ko
+u2k
+u2r
+u2z
+u1
+u2re
+u2r
+u2ri
+u2r
+u2r
+upa1b2
+u1pa
+up1a1da
+upap2
+upa1pr
+upas2
+upa1sp
+upa1t2r
+upe2r1in
+u1pe
+upe1ri
+uper1s
+up1e2s
+up1p2
+u1p
+upli2n
+up1li
+up1z
+u1p
+ura12
+u1ra
+1u2raim
+ura1i
+1u2ra2k.
+1u2rakh
+1u2rakk
+1u2rakn
+1u2rakr
+u2ralh
+1u2ralk
+1u2ralm
+1u2ra1sa
+ura1s2p
+ur1ll
+u1r
+ur1t1a
+ur2dar
+ur1da
+ur2d1e
+u2r1ef
+u1re
+ur2f
+ur2f1
+1ur1n
+ur2ne
+ur1n2
+uro2k1
+u1ro
+uro2ke2
+uro2ne
+uro1p
+ur1l
+u1r
+ur1pi2
+ur2t1ag
+ur1ta
+ur2t1e2t
+ur1te
+ur2t1e2v
+urti2t
+ur1ti
+urt1i1ta
+ur2t1ok1ta
+ur1to
+uru2c1e
+u1ru
+2urul
+uru1p2
+uru2szl
+urus2z
+uru1s1z
+u2r2.
+u1r
+us1ab1la
+u1sa
+us1a2da
+us1a2d
+u2s1a2d
+u2s1a2g
+u2s1a2j
+usa2kar
+usa1ka
+u2s1akc
+u2s1a2la
+us1alg
+us1alj
+us1alk
+u2s1alt
+us1alv
+u2s1a1na
+u2s1a1ne
+us1ant
+us1a1p
+u2s1a2ra
+u2s1a2r
+u2s1arc
+u2s1arz
+u2s1ass
+u2s1att
+u2s1a2t2y
+u2s1a2u
+u2s1a2z
+u2s1br
+u1s
+u2s12g
+us1gb
+u2s1gg
+us1gh
+us1gn
+u2s1gr
+us1ld
+us1ll
+u2s12p
+u2s12rad
+us1ra
+u2s12ra1i
+u2s12rak
+u2s12r
+u2s1rb
+u2s1rh
+u2s12ri
+u2s1r1k2
+u2s1rn
+u2s12ro
+u2s1rr
+u2s1rt2
+u2s12ru
+u2s11ta
+u2s1th
+u2s11ti
+u2s1tk
+u2s1tt
+u2s11tu
+u2s1tv
+us1bl
+us1br
+us1dr
+us1eb
+u1se
+us1e2c
+us1e2d
+u2s1ef
+us1e2g2y
+u2s1e2l
+u2s1e2m
+u2s1e2n
+us1erd
+u2s1e2s
+use1t
+u2s1e2v
+u2s1ex
+us1ez
+u2s1g
+u1s
+u2s11he
+u2s12k
+u2s12l
+u2s12ne
+u2s1p
+u2s1rd
+u2s1r1te
+u2s1rv
+u2s1s
+u2s12te
+u2s1tk
+u2s1tt
+u2s11ve
+us1fr
+us1gr
+u2s1i2d
+u1si
+usi2g
+u2s1i1ga
+u2s1i2ko
+u2s1ill
+u2s1i2ma
+u2s1i2m
+us1i1mi
+u2simm
+u2s1imp
+u2s1inc
+u2s1ind
+u2s1inf
+u2s1ing
+u2s1ink
+u2s1int
+u2s1inv
+u2s1i2p
+u2s1i2rat
+usi1ra
+u2s1i2r
+u2s1i1ro
+u2s1irt
+u2s1isk
+u2s1ism
+us1i1ta
+u2s1i1z
+us1g
+u1s
+u2s1j
+us2r
+us11r
+us11r
+u2s12v
+u1s2kl
+us1k
+us1kl
+uski2k
+us1k
+usk1i
+us1k2r
+us1kv
+us2lg
+us1l
+u2so2d
+u1so
+u2s1of
+u2s1okl
+u2s1okm
+u2s1ok1ta
+us1o1la
+u2s1old
+us1o1li
+u2s1oml
+u2s1ond
+u2s1op
+u2s1org
+u2so1ri
+u2s1orr
+u2s1ors
+u2s1os2z
+u2s1ott
+us1c
+u1s
+us12s
+u2s12l
+u1s
+u2s1n
+u2s1rd
+us12r
+u2s1s
+u2s1t
+us12v
+u2s12z
+us12r
+u1s
+u1s2pec
+us1pe
+us1pl
+us1pn
+us1pr
+us1ps
+us2s2e.
+us1se
+us1s1k
+us1s2p
+us1s1ta
+us1sy
+us3szab
+us2s2z
+us1s1za
+us3szag
+us3szak
+us3szl
+us1s1z
+us3szm
+us3szen
+us1s1ze
+us3s1z
+us3szig
+us1s1zi
+us3s1z
+us3s1z
+us3s1z
+us3s1z
+us1s1z2
+ussz1l
+us3s1z
+usta2n12cso2k.
+us1ta
+usta1n
+ustanc2s
+ustan1c1so
+ust12rr
+us1t
+ust1r
+us2teg
+us1te
+us2t1il
+us1ti
+us1trad
+ust1ra
+us1t1re
+us1t1r
+us1t1ro
+u1st1ru
+us2t1l
+us1t
+u2s1uj
+u1su
+u2s1u2s
+u2s1u2t
+u2s1j
+u1s
+u2s11t
+us1d
+u1s
+u2s1g
+us2l
+us11l
+u2s1n
+u2s1r
+us1z
+usz1abl
+us2z
+u1s1za
+u2szaj
+usz1a2la
+usz1alk
+usz1alv
+u2sz1a2n
+us2z1ap1p2
+usza2r
+usz1a1r
+u2sz1a1r
+usz1a1ro
+us2z1as2z
+u2sz1a1u
+u2sz12g
+u1s1z
+usz1l1l
+u2sz12p
+u2sz12rad
+usz1ra
+u2s3zra1ko
+usz1r1je
+usz1sv
+u2s2zth
+u2sz12t1
+u2sz1e2c
+u1s1ze
+u2szef
+usz1e2ge
+usz1e2g2y
+usze2k
+usz1e1ke
+u2sz1e2l
+usz1emb
+us2z1eml
+us3ze1ne
+usz1eng
+u2sz1er1d2
+usz1e2r
+usz1ern
+usze2s
+u2sz1e2v
+u2sz1ex
+u2sz1ne
+u1s1z
+usz11te
+usz11to
+usz1imp
+u1s1zi
+usz1ind
+usz1inj
+usz1isk
+usz1ism
+u2s2z1is2z
+usz2j1a2d
+u1s1z
+usz1ja
+u2sz1r
+1u2szo1d
+u1s1zo
+u2szo1la
+u2sz1old
+u2szon2y
+u2szop
+u2s2zos2z
+u2sz12b
+u1s1z
+usz1l
+usz1n
+u2sz1s
+usz1p2
+uszte2r1a
+usz1te
+u2sz1u2s
+u1s1zu
+u2szut
+u2sz1tr
+u1s1z
+u1s1z2
+usz1g
+u2sz1l
+u2sz1z
+usz1z
+ut1abl
+u1ta
+uta2csel
+utac2s
+uta1c1se
+ut1a2d
+1u2ta1l
+1u2talv
+uta1me2
+uta2mel
+uta2m1er
+uta1p2
+ut1a1r
+1u2tasc
+uta2se
+1u2tasf
+1u2tasl
+1u2tasv
+uta12
+utn1n
+u1t
+1u2tnz
+ut2r
+ut1bl
+1ut1ca
+1ut1c
+u2t1e2g
+u1te
+ute2r1a
+ute2r
+ute2reg
+ute1re
+ute2rim
+ute1ri
+ute2ru
+utn3n
+u1t
+ut1fr
+uti2k12r
+u1ti
+uti1k
+uti2ke
+ut1ill
+uti2m
+uti2n1e2
+uti2nr
+uti1n
+uti1ni2
+uti2ni2g
+uti2n1ik
+uti2n1
+utin1s
+u2t1i2pa
+u2t1isk
+ut1kl
+u2t1old
+u1to
+uto2l1
+u2tols
+2utoma1ta
+uto1ma
+uto2rim
+uto1ri
+2utos
+2utot
+2ut1a
+u1t
+ut2dal
+ut1da
+u2t1d
+ut2del
+ut1de
+2ut1
+2utf
+2utg
+2utik
+ut1i
+2utir
+2utkh
+2ut1ki
+2utkt
+2utm
+ut1p2
+ut2s1aj
+ut1sa
+ut1s2po
+uts3s
+ut1s2to
+ut1s2z
+ut1tr
+uttz1
+ut1t
+2utz
+ut1pr
+ut2rak
+ut1ra
+ut2ran
+ut2rk
+ut1r
+ut1sp
+ut1st
+ut1t2r
+u2tun1ko
+u1tu
+ut1g
+u1t
+ut12z
+utya1s2
+ut2y
+u1tya
+u1u
+uu2m1ag
+uu1ma
+uu2mal
+uu2m1as
+uu2ml
+uu1m
+uu2m1e2
+uu2m12r
+uu1m
+uu2mim
+uu1mi
+uu2min
+uu2m
+uum1p2
+uu2m
+uu2ta
+uu2t
+uu2z2s
+u1
+u1
+u2g2y
+u2r
+u2t
+u2ve
+u2ze
+u1
+uva2r1a
+u1va
+uva2r12
+uva2r1e
+uva2rin
+uva1ri
+uva2szl
+uvas2z
+uva1s1z
+uva1ta2
+uv2a2t1ag
+uxi2t1a
+u1xi
+uxi2t1
+uxi2t1e
+uza1la2
+u1za
+uza2lac
+uza2lad
+uza2la2n
+uza2lg
+uza1l
+uza2l1t
+uza2le2l
+uza1le
+uza2l1k
+uza1l
+uza1p2
+uza1s2
+u2z1id
+u1zi
+u2z1i2gye
+uzig2y
+uz1r
+u1z
+uz1ki2
+uz1i2
+u1z
+uz3sap
+uz2s
+u1z1sa
+uz3s2z
+uz1t2r
+uz12g
+u1z
+uz2l
+2.
+1a
+a2da
+a2d
+a2d
+a2g2y
+a2j
+a2kar
+a1ka
+a2kas
+a2la
+a2l
+a2n2y
+a2s2z
+a2ud
+a1u
+a2va
+1
+2ga
+2g
+2gi
+2go
+2g2y
+2h
+2lo
+2po
+2ra
+2ri
+2ru
+2bab
+1ba
+2band
+2bar
+b2lo
+2bd
+1b
+b2ri
+b2ro
+2c1aj
+1ca
+2c1a2l
+2c1a2n
+2c1a2v
+c1e2t
+1ce
+1c3he
+c2h
+1c3ho
+2c1i2d
+1ci
+ci2kp
+ci1
+ci1k
+c1pr
+21c1sa
+c2s
+2csab
+2csad
+2cs1ag
+2cs1aj
+2csakt
+cs1a1la
+2cs1a2n
+csa2p12
+2cs1a2s
+2cs1a2u
+2csaz
+2cs12g
+1c1s
+2cs1l
+2cs11r
+2cs1rf
+2cs11ri
+2cs1rv
+2c2stv
+21c1se
+2cs1eb
+2cs1e2g
+c3sej
+2cs1e2l
+cs1emb
+2cs1en
+cs1ern
+2c2s1e2r
+2cs1e2s
+2cs1l
+1c1s
+2cs12r.
+2csrd
+2cs1r1te
+2cs1r1t
+2cs12v
+2cs1id
+1c1si
+2csigaz
+c2si1ga
+2cs1il
+2csim
+2c2s1inf
+2cs1int
+cs1i2pa
+2csi1r
+2cs1is
+2cs1iz
+21c1so
+2c2sok1ta
+2c2sos2z
+21c1s
+2cs12r
+cs1l
+1c1s
+cs1s
+cs1p
+cs1s
+cs1t
+css1s
+1c1s
+cs12t
+1c1s
+c1s3za
+cs2z
+2d1a2c
+1da
+da2d
+1d1a1da
+2d1a2k
+2d1a2n
+d1g
+1d
+d1l
+d12r
+2d1e2g
+1de
+2d1ej
+de2l
+d1e1le
+d1elh
+d1e1l
+2d1e2m
+de2ra
+de2r1e2c
+de1re
+d1e2r
+d1e2v
+2d1k
+1d
+2d12r.
+2d1rc
+d2t
+d11te
+2d1i2d
+1di
+di2g
+2d1i1g
+d1ing
+di2dar
+di1
+di1da
+di2st
+di2z
+2d1os
+1do
+d1pr
+d2r
+d2ro
+d1v
+1d
+d1y
+d1yi
+1dy2s
+1d3z
+d2z
+1e
+e2b
+e2g
+e2gs2z1
+e2g2y
+e2la
+e2le
+e2lo
+e2l
+e2l
+e2me
+e2pi
+e2re
+e2r
+e2r
+e2r
+1es2t12j
+es1t
+e2s2z
+e2ta
+e2te
+e2ve
+e2v
+1
+2he
+2le
+2l
+22ne
+2p
+22r.
+2r1
+2re
+2ri
+2rz
+2te
+2ve
+f1l2
+1f
+f2l1v
+f2l
+f2r
+f2ri
+f2r
+f2ro
+g1a2d
+1ga
+gs1s
+1g
+g1el
+1ge
+g1i2v
+1gi
+g1old
+1go
+gs2
+1g
+g2r
+gy1ag
+g2y
+1gya
+gy1el
+1gye
+2gy12r.
+1gy
+1gyi2
+gy1is
+gy1iv
+2gy1u2
+1i
+2i2de
+i2d
+i2ga
+i2g
+2i2ke
+2ik1re
+2ill
+2i2m
+i2mi
+2ing
+2int
+i2pa
+i2rat
+i1ra
+i2r
+2isk
+2ism
+2ist
+i2ta
+2i2vad
+i1va
+i2vs
+i1v
+1
+2r
+2ve
+2vi
+2v
+2j1t
+1j
+j1es
+1je
+j1ez
+j11ve
+1j
+j11v
+1jhel2y
+j1he
+1jho1d
+j1ho
+j1k2r
+j1pl
+j1ra1
+1j1s
+j1ud
+1ju
+2jul
+2kab
+1ka
+2k1a2g
+2k1a2j
+2kalan
+ka1la
+2k1alk
+2k1an2y
+2kap
+2k1a2p
+2kar
+2ka1te
+2k1atk
+2k1l
+1k
+2k1ru
+ke2l
+1ke
+k1e1le
+k1ell
+2k1em
+ke2s
+ke2t
+k1e1te
+k1e2v
+2krd
+1k
+2k1r
+2ks
+2k1ss
+2k1szr
+ks2z
+2k12te
+2kz
+ki1a2
+1ki
+2k1i2d
+2kin
+2k1is
+2k1i2t
+1k2li
+k2lu
+2kol
+1ko
+2k1olt
+2kom
+2konf
+2kong
+2ko1r
+2ko1ro
+2kos
+k12l
+1k
+k2l
+1k
+k11l
+k1pr
+1k2re
+k1t2r
+2k1ud
+1ku
+2k1r
+1k
+k2l
+1k
+k11l
+k1lt
+2k1r
+2k12t
+2k1z
+l1a2d
+1la
+l1a2ja
+l1a2l
+l1a2m
+la2n
+2l1an2y
+l1a2ro
+2l12g
+1l
+2l1l
+l1rn
+2l12s2z
+l1tv
+l1br
+l1d2r
+l1e2d
+1le
+le2l
+1l1e1le
+l1ell
+2l1emb
+l1en
+2l1e2re
+2l1e2r
+l1e2s
+2l1e2v
+l1ex
+3l2.
+1l
+l12d
+l2g
+3l23va
+l1f2r
+l1gl
+2l1i2d
+1li
+2l1i1g
+2l1ij
+2l1il
+2li1m
+2l1ind
+2l1inf
+2l1ing
+2l1inj
+2l1int
+2l1inv
+2l1i2p
+2l1i1r
+2l1isk
+2l1i2s2z
+2l1i2ta
+2l1itt
+2livs
+li1v
+2li1vo
+2lizga1to
+liz1ga
+2l1izz
+l1g
+1l
+l12v
+l1k2l
+l1kv
+lo2k
+1lo
+l1o1ko
+2l1ol
+l1o2pe
+2l1or
+2l1os
+2l1ox
+l1b
+1l
+l1l
+l12m
+l12n
+l1r
+2l1s
+lvs1s
+l1v
+l11r
+1l
+l1p2l
+l1p2r
+l1p2s
+l1sk
+l1sm
+l1sp
+l1st
+ls2z2
+lsz2t2
+lszt2
+lt1agg
+l1ta
+lt1ag2y
+l2t1aj
+l2t1al
+l2t1rn
+l1t
+l2t2l
+l1t
+l2tr1te
+l2t1s
+lt1ves
+lt1ve
+l1ti2
+l2tid
+l2t1im
+l2t1in
+l2t1ip
+l2tis
+l2t
+lt1old
+l1to
+l2ts
+l1t
+l2t12r
+l1t
+l1t1r
+2l1ud
+1lu
+2l1u2g
+2l1ur
+2l1u2t
+2l1r
+1l
+l1s
+l1g
+1l
+l1l
+l1n
+l1r
+l1t
+l1v
+l1z
+l1z
+1l
+2ly1a2d
+l2y
+1lya
+2ly1a2l
+2ly1an
+2ly1a2r
+2ly1a1u
+2lyl
+1ly
+2ly1tl
+2ly1e2
+2ly2l
+1ly
+2lys
+2ly1
+2ly
+ly1s
+2lyug
+1lyu
+2mac
+1ma
+2mad
+2mag
+2maj
+2mar
+2matr
+mi2al
+1mi
+mi1a
+2moz
+1mo
+2nac
+1na
+2nap
+na1u2
+nya1ka2
+n2y
+1nya
+nya2k1a1da
+2ny1a2n
+2ny1i2r
+1nyi
+ny1tr
+1o
+o2ko
+o2ve
+1
+2ra
+2r
+2s
+2vo
+1
+2le
+2l
+2l
+2r
+2ve
+1
+2r
+p1eg
+1pe
+pe2l
+p1es
+2p1in
+1pi
+p2la
+p2l
+2p1or
+1po
+p1p2l
+p2r
+p2ro
+2rab
+1ra
+ra12
+2raj
+r1akk
+r1a1lu
+r1a2nya
+ran2y
+ra1p2
+ra1szp
+ras2z
+ra1u2
+2r1br
+1r
+2r12ri
+rs1s
+2r1tm
+r1br
+r1d2r
+r1e2c
+1re
+2r1e2l
+r1ez
+2rk
+1r
+r1kk
+r1lt
+r12ne
+2rs
+rf2l12v
+r1f
+rf1l
+ri2al
+1ri
+ri1a
+2r1i2d
+2ri1e
+r1ifj
+2r1i1ga
+r1i2m
+2r1inf
+r1ing
+r1in1te
+2ris
+r1ist
+r1k2r
+rn2pe1k
+r1n
+rn1pe
+1rnr
+r1n
+r1p2
+1r
+r1sp
+r2s3z2r.
+r21s1z
+rs2z
+r2s3z1ra
+r12c
+1r
+r12l
+r1n
+r1t
+r1s
+1r
+r1pr
+r1s2k
+r1sn
+r1s2r
+r1s2t
+r1szn
+rs2z
+r1u2t
+1ru
+r12l
+1r
+r12v
+2sabl
+1sa
+2s1abr
+2s1a2d
+2s1a2j
+s1a2la
+sa2n
+s1an2y
+s1apr
+sa2r
+s1a1r
+2s1arc
+2sarj
+s2gol
+1s
+s1go
+s1ld
+2s12p
+2s12ra1i
+s1ra
+2s12rak
+2s1rb
+2s12r1e2
+2s12ro
+2s12ru
+2s12r2
+2s1rv
+2st
+s1tl
+2s12z
+s1dr
+s1e2c
+1se
+s1e2l
+s1e2v
+s1ex
+2s12g
+1s
+2s12l
+s12ne
+2s12r
+2s1rm
+2s1r1t
+2s12t
+2s12te
+2s1tr
+s1fr
+si2g
+1si
+2s1i1ga
+2s1il
+2s1imp
+2s1in
+2s1i2p
+2s1i2r
+2s1is
+s12z
+1s
+s1kl
+s1kv
+2s1o1la
+1so
+2s1old
+s1org
+2s1orr
+2s1os2z
+s12h
+1s
+s1s
+1s
+s1r
+1s
+s2pe
+s1pr
+s1s2p
+s3szag
+s2s2z
+s1s1za
+ssza2k1
+s3szav
+s3s1ze
+s3s1zi
+s3s1z
+s3s1z
+s3s1z
+s3s1z
+s3s1z
+s2tat
+s1ta
+s1t2r
+2s1u2ga
+1su
+2s1u2t
+s1g
+1s
+s1n
+s12t
+s1z
+sv2t1e
+s1v
+2sz1a2d
+s2z
+1s1za
+2s2z1akc
+2sz12g
+1s1z
+2s3z1r
+2s3z1ro
+2s3zrr
+szs1s
+21s1ze
+sz1ej
+2sz1e2s
+2sz1e2v
+2s1ze1ze
+21s1z
+2sz1v
+2szi1g
+1s1zi
+21s1z
+sz1k2
+sz1old
+1s1zo
+s2z1os2z
+21s1z
+sz1s
+s3z1se
+sz2s
+2s3z
+21s1z
+sz12g
+sz2ve
+t1a2d
+1ta
+t1a2i
+2t1a2j
+t1a2v
+2t1l
+1t
+t12ro
+t12s
+2t12t1
+t2v1i2
+t1bl
+t1ef
+1te
+2t1e2g
+t1ell
+t1elz
+2th
+1t
+t12l
+2tn
+2t1p
+t1rd
+2t12ri
+t1rz
+tf1l2
+t1f
+t1gr
+2tiakh
+1ti
+ti1a
+2tiakn
+t1id
+ti1e2
+2ti1
+ti2g
+t1i1g
+12tij
+12t1i2ko
+t1ill
+12ti1n
+t1ind
+t1inf
+t1ing
+t1int
+t1i2pa
+12tir
+t1i1r
+t1ism
+t1ist
+12t1i2z
+t1g
+1t
+t1j
+t1v
+t1okm
+1to
+2t1o1la
+t1old
+t1oml
+to2n1
+t1ont2
+t1op
+2tor
+to2ra2n
+to1ra
+to2r1as
+to2rl
+to1r
+to2re2
+t1ost
+t1os2z
+t1s
+1t
+t2r
+1t
+t1pl
+t1pr
+1t2rag
+t1ra
+21t2ri
+ts2gi
+t1s
+t1st
+tu2m1
+1tu
+tu2r
+t1u1r
+2t1t
+1t
+2t1g
+1t
+1t1vo
+1u
+u2no
+u2ra
+1
+1
+2g2y
+2l
+2re
+2te
+2ve
+2v
+2ze
+1
+2z
+2vl
+1v
+v2r
+v2rad
+v1ra
+v2ra2l
+v2ris
+v1ri
+v2ro2s2z
+v1ro
+v2r12
+v1ru2
+za1e2
+1za
+za12
+zak2
+za1p2
+2z1arc
+za1t2r
+2z1l
+1z
+2z1ru
+zs1s
+z1i2d
+1zi
+zi1do2
+zt2
+1z
+z1tr
+z1p2r
+2zs1a2l
+z2s
+1z1sa
+2zsl
+1z1s
+21z1se
+zs1e2c
+21z1si
+z3s2z
+z1t2r
+2.
+1a
+a2j
+a2la
+1
+2ga
+2go
+2gu
+2ra
+2s2z
+b2lo
+cs2k1
+c2s
+1c1s
+2des
+1de
+12dt
+1d
+d1z
+2d1r
+1d
+d12
+1d
+dsza1ka2
+d1s2z2
+d1s1za
+12dl
+1d
+d2v1a2
+d2v1el
+d1ve
+d2v1e2s
+d2vl
+d1v
+d2vid
+d1vi
+d2v1
+d2vo
+1d1v
+d2v2l
+d2v
+d2vu
+d2v
+1e
+e2b
+e2ge
+e2g
+e2le
+e2l12
+e2me
+1
+2ke
+2p
+f2f12
+f3l1e2
+1f
+f2ro
+ge1k2
+1ge
+ge3l
+g2ra
+2gy1a2
+g2y
+2gy1
+2gyef
+1gye
+2gyel
+gy1e2lemb
+gye1le
+gy1e2lemm
+gy1elf
+gy1ell
+gy1elm
+gy1e1lo
+2gy2.
+1gy
+gy11j
+gy1kb
+gy11r
+2gy1rr
+2gys
+2gyiekb
+1gyi
+gyi1e
+2gyieket
+gyie1ke
+2gyiekk
+2gyiekn
+2gyiekr
+2gyiekt
+2gyi1
+2gyih
+2gyik
+2gyil
+12gyin
+gy1int
+2gyir
+gy1i1ra
+3gy
+2gyletec
+gy1le
+gyle1te
+1gy1n
+gy1os
+1gyo
+2gy12
+1gyb
+1gy
+1gy1
+1gy1i
+1gyj
+1gyk
+1gyn
+1gyr
+1gys2g.
+gy1s
+1gysgb
+1gys1ge
+1gys1g
+1gysg3g
+1gysgh
+1gys1gi
+1gysgn
+1gysgr
+1gysg1s
+1gysgt
+1gy3s1g
+1gyt
+1gyv
+1gyv2d.
+gy1v
+1gyvdd
+1gyvdek
+gyv1de
+1gyvdet
+h1af
+1ha
+h1at
+h1s
+1h
+2h1e2le
+1he
+2h1elf
+2h1ellen
+hel1le
+2h1e2l
+h1elv
+2h1h
+1h
+2h12r.
+2h1in
+1hi
+2h1it
+h1or
+1ho
+h1s
+1h
+1i
+i2g
+i2ko
+1
+2r
+k1a2n
+1ka
+ka2p
+k2p1e2r
+1k
+k1pe
+k2kal
+k1ka
+k2k
+k1ke2
+kkel1
+k2ker
+k1ko2
+k2kop
+k1u2n
+1ku
+l1ab
+1la
+l1a2d
+l1ag
+l1aj
+l1a2k
+2l1a2l
+l1a2r
+l1at
+l1a2u
+l12c
+1l
+l12g
+l1l
+l12p
+l12r
+l12s
+l1br
+l1d2r
+2l1e1c1se
+1le
+lec2s
+l1e2d2z
+2l1e2g
+2lek
+l1ell
+2l1e2l1te
+le1l
+l1eng
+l1enn
+2l1e2re
+l1e2s
+le1ta2
+le2tal
+le2t1an
+le2tas
+le2tav
+le2t12
+le2t1eg
+le1te
+le2t1e2l
+le2t1k
+le1t
+le2t12r.
+le2t1rn
+le2t12r2.
+let1r
+le2t1r
+le2t12v2e.
+let1ve
+le1to2
+le2t1or
+le2tos
+le2t12
+let1t2
+l1ett2e.
+let1te
+l1etted
+le2t1u
+le2tz
+le1t
+2l1ex
+2l12g
+1l
+l2k1a2
+l2k12
+l2k1e2l
+l1ke
+l2kev
+l1ki2
+l2kir
+l2k1o
+l2ku
+2l1l
+l12p
+2l12r.
+2l12r
+l11ri
+l1rj
+l1rn
+l1rs
+2l12r
+l1rv
+2l1rz
+l2sa2
+l2so
+ls3s
+l22s3z
+ls2z
+l1fr
+2l1i2d
+1li
+li2g
+2l1i1ga
+2l1ill
+2l1im
+2l1int
+l1i1ra
+2l1itt
+2l1iz
+l1g
+1l
+l12r
+l12v
+l2l1a2n
+l1la
+l2l1in
+l1li
+l2l12v
+l1l
+l2l1u2
+l3lyu
+l2l2y
+lme2g1o
+l1me
+ln2k1l
+l1n
+ln1k
+l1o2d
+1lo
+l1o2l
+l1om
+l1op
+l1or
+l12v
+1l
+2l1b
+1l
+2l12l
+2l11m
+2l1r
+2l12v
+l1e2
+1l
+l2l
+l1
+li2r
+l1i
+l1sl
+l1s2p
+l1s1ta
+lt2
+l1p2l
+l1p2r
+l1sl
+l1sp
+l1st
+l2t1ad
+l1ta
+lt2r
+l1t
+l2t1e2v
+l1te
+l1t1ra
+l1ud
+1lu
+l1u2g
+l1u2t
+l1s
+1l
+2l1g
+1l
+l2l
+l12l
+l1lh
+l11li
+l1lj
+l1ln
+l1lt
+l1lv
+2l1r
+2l1t
+2l1v
+2lyel
+l2y
+1lye
+ly1ess
+ly1es2z
+m1a2l
+1ma
+m1a2n
+m1a2r
+m12r
+1m
+me3gi
+1me
+me2g1o
+m1ks
+1m
+2m1p
+2m1rd
+m1fl
+m1fr
+mi2g
+1mi
+2m1i1ga
+2m1il
+2m1im
+2m1i2p
+2m1is
+2m1iz
+m1kl
+m1kr
+m1o2l
+1mo
+m1or
+m1os
+2m1ss
+1m
+m1r
+1m
+m1p2r
+m1tr
+m1j
+1m
+2m12l
+1m
+2m1v
+2m1z
+n1l
+1n
+n12r
+n1e2l
+1ne
+ne2t1elet
+ne1te
+nete1le
+ne2ts
+ne1t
+n1e1v
+2n12p
+1n
+n1id
+1ni
+2n1ing
+2n1irt
+1nnep
+n1ne
+1o
+o2k1i2
+1
+2r
+1
+1
+2re
+p2ri
+p2ro
+rds1s
+r1d
+12reg
+1re
+re2g1a
+re2g
+reg1g
+12res
+re2t
+2rm
+1r
+r2t1a
+r2t1
+r2t1e2
+r2tis
+r1ti
+r2t1o2
+rtok1
+r1t2
+r2tl
+12rl
+1r
+s2s1a2
+s2s1
+s2s1eg
+s1se
+s2s1o2
+ss1s
+s1s2
+s2s1l
+s2t1a2
+s2t2
+st1g
+st1l
+st1r
+s2t1e2
+st1g
+s1t
+s2t1k
+s2tl
+s2t12r.
+s2t11re
+s2t1rm
+s2t1il
+s1ti
+s2tim
+s2tir
+s2t1is
+s2t
+s2t1o2
+s2t12
+s2t1r
+s1t
+s2t12v
+s2t1r
+s1t
+s2t1s
+s2t1u2
+s2t
+s1t2
+s2t1z
+sz1l
+s2z
+1s1z
+1s1zi2
+2sz1iv
+sz12v
+1s1z
+2s2z1nt
+1s1z
+2szr
+1s1z
+t1ab
+1ta
+t1aj
+12teg
+1te
+12te2m.
+te2m1a2
+2temb
+12te1me
+te2m1el
+2temb
+te1m
+te2mrt
+te2min
+te1mi
+t1si2
+1t
+t2sik
+ts3s
+t2s3z
+1t1k
+t1p2
+1t
+t1s2p
+t2t1
+t2t12
+tty1e2g
+t2t2y
+t1tye
+1u
+u2ta
+1
+1
+1
+ve2g1a2
+1ve
+veg3g2
+vez2r
+ve1z
+12ze2m1a2
+1ze
+ze2m1
+ze2meg
+ze1me
+ze2m1elet
+zeme1le
+ze2m1r1t
+ze1m
+ze2m1tk
+12ze1mi
+ze2m1o
+2zemt
+ze2m1u2
+2ze1m
+ze2t1a
+ze2t1o
+z2ra
+1z
+z2r1e2l
+z1re
+1zle2t.
+z1le
+1zletn
+2.
+1a
+a2da
+a2d
+a2g2y
+a2ka
+a2la
+ala2g1
+a2lo
+a2na
+a2n2y
+a3nyagoc
+a1nya
+anya1go
+a2or
+a1o
+a2pa
+a2p
+a2ra
+a2r
+a2to
+a2ut
+a1u
+a2va
+a2xi
+a2zo
+1
+2b
+2ga
+2g
+2g2y
+2h
+2je
+2lo
+2po
+2ra
+2ri
+2ro
+2ru
+2s
+2t
+2t
+ba2l1
+1ba
+b2rel
+1b
+b1re
+b2lo
+b2r
+csa1p2
+c2s
+1c1sa
+csa2p1g
+cs1as
+2cs1k
+1c1s
+cs1i2pa
+1c1si
+d1l
+1d
+2d1e2l
+1de
+d2ro
+1d2r
+d1sk
+1e
+e2c2s
+e2ge
+e2g
+e2gyes
+eg2y
+e1gye
+egyete2m1e2k
+e2gyete1me
+egye1te
+e2k1re
+e1k
+e2la
+e2le
+e2l
+e2l12
+e2l
+e2l
+e2me
+e2pi
+e2po
+e2re
+e2r
+e2se
+e2s
+e2s
+e2te
+e2ti
+e2v
+e2v
+1
+2le
+2l
+2nekb
+1ne
+2ne1ke
+ne2kest
+12nekes
+2ne1k
+2nekr
+2p
+2te
+fa2j1e2
+1fa
+f2lo
+fo2g1a2l
+1fo
+fo1ga
+f2ra
+f2ri
+f2ro
+2g12l
+1g
+2g12l2.
+g1l
+g1s
+1g
+g2z
+g2ra
+g2r
+holda2d
+1ho
+hol1da
+hol2d1a1da
+1i
+i2do
+i2ga
+i2g
+i2m
+i2mi
+i2pa
+i2r
+i2ro
+i2s2z
+i2ta
+i2z
+i2zo
+1
+2r
+2ri
+2r
+2t
+2ve
+2z
+2z
+ki1a2
+1ki
+k2la
+k2li
+k2l
+k2lo
+k2rep
+k1re
+1k2r
+1k2ri
+1k2ro
+1k2r
+k2va
+me2g1
+1me
+n1al
+1na
+n1ar
+n1l
+1n
+n12r
+n1e2le
+1ne
+n1elh
+n1e2li
+n1elk
+n1e2l
+n1elr
+n1elt
+n1eml
+n1e2se
+n1est
+ne1t2
+2n12r.
+1n
+2n1r1te
+ni2g
+1ni
+2n1i1ga
+2n1in
+2n1i2p
+2n1i2r
+2n1is
+n1me2
+n3n2y
+n1o2k
+1no
+n1ol
+n1os
+n12r
+1n
+n1pr
+n1s2k
+n1s2t
+n1u2n
+1nu
+n1u2t
+2n1s
+1n
+2n1z
+n1z
+1n
+1o
+o2d
+o2k
+o2ko
+o2la
+o2r
+o2ro
+1
+2ce
+2ra
+2r
+2ri
+1
+2l
+2r
+2ve
+2z
+1
+2r
+p2la
+p2l
+p2ne
+p2r
+p2ri
+p2r
+p2ro
+p2r
+r1ad
+1ra
+r1a2l
+r1a2m
+r1a2n
+r1a2u
+r1a2v
+r1b
+1r
+r1l
+r1s
+r1z
+r1eg2y
+1re
+r1e2l
+re2n
+2r1e2r
+r1ex
+2r12j
+1r
+r12l
+r1p
+rs3szer
+rs2s2z2
+rs1s1ze
+r2s1za
+rs2z
+r22s1z
+r2s1z
+r2s1zo
+r1fl
+r1id
+1ri
+ri2g
+r1i1ga
+2r1i2m
+r1int
+r1i2p
+r1ist
+2r1r
+1r
+r1o2d
+1ro
+2r1ol
+r1o2p
+r1or
+ros2t1a2
+r1ot
+r1n
+1r
+2r12l
+1r
+r1r
+r1f2
+1r
+r1pl
+r1pr
+r1p2s
+r1s2p
+r1s2t
+rszt2
+rs2z
+r1t1ra
+r1uj
+1ru
+r1un
+r1u2t
+r1t
+1r
+r1g
+1r
+r1z
+2s1aj1t
+1sa
+s1l
+1s
+s2g1el
+1s
+s1ge
+2s12n.
+1s
+2s12r
+1s2ka
+1s2k
+so2rad
+1so
+so1ra
+so2raj
+so2ral
+so2ran
+so2rl
+so1r
+so2ros2z
+so1ro
+sor1s
+sort2
+s2pe
+s2pi
+s2po
+sp2r
+s2r
+s3s2z
+1s2ta
+1s2t
+1s2to
+st2r
+s1t1ro
+2s1uj
+1su
+2s12t
+1s
+2s3z1ra
+s2z
+1s1z
+sze2r1
+1s1ze
+sze2r1e2le
+3szerel
+sze1re
+szere2p
+sze2r1e1p
+sze2r1lt
+sze1r
+sz2k
+sz2t
+tr2gy1ra
+1t
+trg2y
+tr1gy
+ts3s
+1t
+t1a2
+1t
+t1e2
+t1p2
+1t2ra
+1t2r1g
+t1r
+1t2re
+t2ri
+1t2ro
+1u
+u2ga
+u2ra
+u2s2z
+u2ta
+u2t
+u2tu
+1
+2ri
+2s2z
+2ti
+2to
+1
+2g2y
+2l
+2r
+2te
+2t
+2t
+2ve
+2v
+2ze
+1
+2z
+v2s1z1a
+1v
+vs2z
+v22s1z1
+v2sz1e2l
+v1s1ze
+v2szer
+v2szint
+v1s1zi
+v2s1zo
+v2s1z12
+v22s1z
+v2s1z2
+v2z1
+1v
+v1ze2
+2z1a2b
+1za
+z1a2d
+z1a2g
+z1ak
+z1a2l
+za1l1e
+z1a2p
+z1a2r
+z1a2s
+z1a2t
+z1a2u
+z12g
+1z
+2z1l
+2z1rb
+2z1rj
+z1tl
+z11tu
+2z1ed
+1ze
+2z1ef
+2z1e2l
+2z1em
+2z1e2r
+ze2s
+2z1e1se
+2z1e1s
+2z1est
+2z1es2z
+ze2teg
+ze1te
+ze2tel
+2z1e2v
+2z1g
+1z
+2z12l
+2z1rm
+2z1r1t
+2z1rz
+2z1s2z
+z1fr
+z1gl
+z1gr
+zi2g
+1zi
+2z1i1ga
+zigaz1
+2z1i1g
+2z1i2m
+2z1i2r
+z1isk
+z1ism
+z1ist2
+z1i2s2z
+2z1iz
+z1n
+1z
+z1r
+z12v
+z1kl
+z1kr
+z1o2k
+1zo
+z1o2l
+3zom
+z1on
+z1op
+z1or
+z1os
+2z1c
+1z
+2z12r
+2z12k
+1z
+zl2d1el
+zl1de
+2z12v
+2z1z
+z1a2
+1z
+z1e2
+2z12r.
+z12re1i
+z1re
+2z12ri
+2z1rk
+2z1rm
+2z1rn
+2z12r
+2z1rr
+2z1rs
+2z1rt
+2z1rz
+z1pr
+1z3sa
+z2s
+2zsm
+1z1s
+2z3sr
+2z3sv
+2z3ser
+1z1se
+2z3s
+2z3s
+2z3s
+z3s2p
+2z3su1ga
+1z1su
+1z3s
+2z3s
+z3s2z
+z1t2r
+2z1ug
+1zu
+z1r
+1z
+z1t
+2z12g
+1z
+2z1l
+2z1nn
+2z1t
+z3z2s
+2v.
+1va
+vaa2d
+va1a
+vat1
+va1
+va2ta2
+2v1abl
+va1b1ra
+v1abs
+vacs1a1la
+v2acsal
+vac2s
+va1c1sa
+va2cs1an
+va2csap
+va2csl
+va1c1s
+va2c1s12
+vacs3z
+2v1a2dag
+va1da
+va2d1aj
+v1a2da1l
+2v1adap
+va2d1as2z
+v1a2da1ta
+v1a2datb
+v1a2dat1k2
+v1a2da1to
+v1a2datr
+va2daz
+va2d1l
+va1d
+va2de2g
+va1de
+va2d1e2l
+va2dep
+va2d1e2r
+va2d1e2t
+va2dl
+va1d
+vad12te
+va2dib
+va1di
+v2a2d1id
+va2d1ir
+va2d1i2t
+va2d1r
+va1d
+v2a2d1ol
+va1do
+2vadom
+vad1oros
+vado1ro
+va2dh
+va1d
+va2d1i
+v1a2dj
+va2dr
+v1a2d1u
+va2d1r
+va1d
+va2d12
+va2d1
+va2d
+va2d1za
+vad2z
+va2d1z
+va2r
+va1
+va2g1as
+va1ga
+va2gav
+va2gs
+va1g
+va2g1e2
+va2g12n
+va1g
+vag1g
+va2gid
+va1gi
+va1g1le
+va2g1o2ku
+va1go
+vag1ost
+va2g1os2z
+va2g1u1ra
+va1gu
+va2g
+2v1a2gyuk
+vag2y
+va1gyu
+2v1a2gy
+va2j1ar
+va1ja
+va2j12c
+va1j
+va2j12ro
+v2ajr
+va2j1e2g
+va1je
+va2j
+va2j1ol
+va1jo
+va2j12s
+va1j
+va2j
+va2j
+2va2kad
+va1ka
+vak1a2d
+va2k1aj
+vak1akn
+vak1rn
+va1k
+va2k1s
+va2k1t
+va2keg
+va1ke
+va2kem
+va2k1r1t
+va1k
+v2a2kis
+va1ki
+va2k1r
+va1k
+va2k12s
+va1k
+v2a1k1r
+vak1t2
+2vak1ti
+2v1ak1tu
+2vakup
+va1ku
+va2k1t
+va1k
+va2lac
+va1la
+v1a2la1ku
+va2la2p.
+va2la1p
+va2la1p
+valls1s
+val1l
+2v1amp
+2v1a2nal
+va1na
+va2n1e2g
+va1ne
+v2ane2m
+van1e1me
+va2n1es
+van2v
+va1n
+van11ve
+van11vi
+2vang
+van3n
+va2nol
+va1no
+va2n
+2v1a2ny
+van2y
+2v1a2ny
+va1p2l
+va2pos
+va1po
+va1p2r
+2v1a2pu
+va2r1ab
+va1ra
+vara2c
+var1a1c
+v2a2r1a2d
+var1ajt
+v2araj
+var1akt
+v2arak
+va2r1al
+va2ran2y
+var1a2nya
+va2r1a2p
+va2r1a2r
+va2r1as2s2z
+va2r1at
+va2r1av
+va2rg
+va1r
+va2r1l
+2v1a2rn2y
+va2r1szn
+vars2z
+var11ta
+va2r1tf
+va2r1tm
+va2r12to
+va2r12z
+var1ca2
+var2cag
+var2cal
+var2ca2n
+varc1c
+var2c3ho
+varc2h
+va2r1es
+va1re
+va2r1e2t
+va2rev
+va2rg
+va1r
+var12k.
+var1ks
+va2r12l
+va2r1p
+va2r11r
+va2rid
+va1ri
+va2r1i2ko
+va2r1ikr
+va2r1ill
+va2rim
+var1inf
+var1ink2
+va2r1inv
+v2a2r1i2p
+var1isk
+var1ism
+var1izm
+v2ariz
+va2r
+var1k
+var3k.
+var2k1an
+var1ka
+vark2b
+vark2j
+vark2k
+va2r1okm
+va1ro
+var1old
+va2rop
+va2rn
+va1r
+va2r
+vars2
+vars2z2
+var2t1i2n
+var1ti
+var2tor
+var1to
+var1t2
+var2t1r
+va2r1ut
+va1ru
+va2rt
+va1r
+va2r12
+va2r
+v2as1abl
+va1sa
+v2a2s1aj
+vas1arc
+v2asar
+vas1as2z
+va2s1br
+va1s
+va2s1l
+va2s1rl
+va2se2k
+va1se
+va2s1e2l
+va2sem
+va2s1e2r
+va2se2t
+va2s12k.
+va1s
+vas1kk
+va2s1kn
+vas1kt
+v2as2r
+va2s11re
+va2s1r1t
+va2s1rv
+vasfl2v
+vas1f
+vasf1l
+va2sid
+va1si
+va2s1i2n2a.
+vasi1na
+va2s1ing
+va2s1i2s
+va2s1iz
+va2s1n
+va1s
+va2s
+vas3s1ze
+vas2s2z
+vas3s1zi
+vas3s1z
+vast2
+vas1t1r
+v2astr
+va2sus
+va1su
+va2s12t
+va1s
+va2s
+v2asz1e2l
+vas2z
+va1s1ze
+va2szis
+va1s1zi
+va2t1a2d
+va1ta
+va2t1aj
+va2ta1u
+v2a2t1l
+va1t
+va2t12ru
+v2atr
+va2t1e2v
+va1te
+va2t1k
+va1t
+v2a2tl
+va2t1r1te
+v2atr
+va2t12te
+v2att
+va2t1id
+va1ti
+va2tim
+vat1inf
+v2atin
+vat1ing
+v2a2t1is
+v2a2t1r
+va1t
+vat1mo1
+va2t1okm
+va1to
+va2t1old
+va2t12v
+va1t
+va1t2
+va2t1r
+vatt2
+2vatta1ko
+vat1ta
+v2a2t1ur
+va1tu
+2v1a2uk
+va1u
+vau2n
+vaza2t1e
+va1za
+2v1a2zon
+va1zo
+vaz1b2
+va1z
+1v
+vb2baj
+vb1ba
+vb2b1as
+vb2b1e2
+vb2b1
+vb2bil
+vb1bi
+vb2bol
+vb1bo
+vb2bos
+vb2b
+vb2bu
+2vbr
+v2c3h
+v2cs1a2p
+vc2s
+v1c1sa
+v2c1se
+v2cs12k
+v1c1s
+v2csi2p
+v1c1si
+v2cs1is
+v2c1s
+v2c1s
+v2c1s
+vcs3z
+v2d1al
+v1da
+v2d1a2n
+v1de2
+v2des
+v1d2
+v2dn
+v2dik
+v1di
+v2d1ir
+v2d1or
+v1do
+v2d
+v2d
+2v12gaz
+v1ga
+2v1gr
+v2g
+v2gyal
+vg2y
+v1gya
+v2gyan
+v2gy
+v2gy
+v2k1e
+v2k1
+v2laj
+v1la
+v22l1a2l
+vla2n
+v2l1an2y
+v2l1ap
+v2lar
+vl2a2szin
+vlas2z
+vla1s1zi
+v2l12r
+v1l
+v2l1t
+v2l1e2
+v2ll
+v1l
+v2li2d
+v1li
+v2lin
+v2lir
+v2l1ism
+2v1llag
+vl1la
+2v1lls
+vl1l
+vl2l1e2
+2v1llom
+vl1lo
+2v1l1l
+vl2l12
+vllv2d1s2
+vll1v
+vllv1d
+v2l
+v2l
+v1ma2
+v2m1ad
+v2m1aj
+v2m1ak
+v2m1al
+v2m1as
+v2ma1u
+v2m12
+vm1b2
+v2m1e2
+v2m12r.
+v1m
+v2m1r1t
+v2mil
+v1mi
+v2m1in
+v2m1ir
+v2mis
+v2m
+v2m1or
+v1mo
+v2m
+v2m
+v1mu2
+v2m1ut
+v2m
+v2naj
+v1na
+vna2n
+vn1an2y
+v2n1e
+v2nis
+v1ni
+vns3s
+v2n1
+v2n
+vnya2d
+vn2y
+v1nya
+v2nyaj
+v2ny1a2l
+vnya2n
+v2n2yan2y
+v2ny1ap
+v2nyar
+v2ny1as
+v2nya1u
+v2nyaz
+v2ny1e2
+v2ny12r.
+v1ny
+v2nyr1d2
+v2nyrr
+v2nyrv
+v2nyrz
+v2ny1ing
+v1nyi
+v2nyis
+vny12r
+v1ny
+v2ny12
+v2ny
+v2po
+v2r1a2da1to
+v1ra
+vra1da
+v2ra1d
+v2r1a2d
+v2r1a2du
+vra2l
+v2r1a1la
+vr1a1le
+v2raml
+vra2n
+v2r1an2y
+v2r1ar
+v2r1as2s2z
+v2r1a2s2z
+v2r2g
+v1r
+v2r1l
+vrd2
+v2r1e2
+vr1isk
+v1ri
+vr1ism
+vr1ist
+v2r
+vr1old
+v1ro
+v2r1oml
+v2r1ont
+vros1t2rom1l
+v2r1ostr
+vrost1ro
+vro2s2z
+vr1oszt
+v2r12n
+v1r
+v2r
+v2r
+vrs2
+vr1sp
+vr1sr
+vr2t1e2s
+vr1te
+vr2t12r.
+vr1t
+2v12r2u.
+v1ru
+v2ruh
+v2r1u2r
+vr1us2z
+v12rus
+v2r1ut
+v1r2
+v2rs
+v2r
+v2s1a2d
+v1sa
+v2sam
+v2saz
+vs2r1a2d
+v1s
+vs1ra
+v2s1e
+vsi2k
+v1si
+vs1i1ko
+v2sis
+v2s2r
+v1s
+vsks2z1
+vs1k
+v1s2
+vst2
+vs1tr
+v2s1
+v2s
+v2sza2n
+vs2z
+v1s1za
+v2s3zav
+v2s1z1e
+v2szin
+v1s1zi
+v1ta2
+v2t1al
+2v1td
+2v12t1e2r
+v1te
+2v1t1fe
+v2t1ir
+v1ti
+2v12t
+v1t1l
+2v1tm
+2v12t1
+2v1tp
+2v12t
+2v1tv
+v2z1alj
+v1za
+v2z1alt
+v2z1a2tom
+vza1to
+v2z1a2v
+v2z1e2
+v2zi2z
+v1zi
+v2z
+v2zos
+v1zo
+v2z
+v2z
+v2z3sa
+vz2s
+v2z3s
+v2z3se
+v2z3s
+v2z3s
+v2z3su
+vz3s2z
+v2z
+vb2lo
+vb2ra
+vcs2ne
+vc2s
+v1c1s
+vcs1
+vd2r
+1ve
+vea2g
+ve1a
+vea2l
+vea2n
+vea2r
+ve2l
+ve1
+2ve1ce
+ve2cet
+ve1cl
+ve2cseg
+vec2s
+ve1c1se
+2v1e2dn2y
+ve1d
+ve2d1z
+ved2z
+ve2gab
+ve1ga
+ve2gac
+ve2gar
+ve2g1as
+vega2z
+ve2g12
+ve2g1eg
+ve1ge
+ve2g1e2kh
+vege1k
+ve2g1ell
+vege2l1k
+vege1l
+ve2g1elr
+ve2g1e2r
+ve2g1esem
+vege1se
+ve2g1es2z
+ve2g1e2tet
+vege1te
+ve2g1k
+ve1g
+ve2g1l
+ve2g1p
+ve2g11r
+ve2g1r1te
+ve2g1rv
+vegs3s
+ve2g2s2z
+vegg2
+veg1gr
+ve2gid
+ve1gi
+ve2gik
+ve2gim
+ve2g
+ve2g1ol
+ve1go
+ve2gor
+ve2g12
+ve2g12
+ve2g1u
+ve2g
+ve2gyemb
+veg2y
+ve1gye
+ve2gyez
+2v1egyl
+2vegyv
+ve2k1ak
+ve1ka
+2v1e2k2e.
+ve1ke
+2v1e2ke1i
+2vekb
+ve1k
+ve2k1b
+2v1e2kk
+2v1e2ks
+ve1k1lu
+2velan2di
+ve1la
+2v1e2lef
+ve1le
+2v1e2lemz
+vele2t1e2l
+vele1te
+2v1e2lg
+ve1l
+vels3s
+2v1elf
+v1elg2y
+2v1el1ha
+2v1elhel
+vel1he
+ve2lis
+ve1li
+2v1e2l12
+v1el1j
+2v1elm
+ve2l1os
+ve1lo
+vel1e2
+ve1l
+2v1e2li1r
+vel1i
+2v1e2l1
+2velks
+vel1k
+2v1elleg
+vel1le
+velv1ro2
+vel1v
+velvros1
+2v1elr
+2v1el1sa
+2v1el1s1z
+vels2z
+2v1el1s1zo
+2v1el1t
+2v1elter
+vel1te
+2v1eltr
+vel1t
+2v1el1to
+2v1el2v.
+2v1el1v
+2v1elvek
+vel1ve
+ve2ly
+vel2y
+ve2lyu
+2v1elz
+2v1em1b
+2v1e2mel
+ve1me
+2v1eml
+2v1e2mu
+ve2n1ad
+ve1na
+ve2na2u
+ve2n1
+ve2n1e2g
+ve1ne
+ve2n1e2l
+ven1emel
+vene1me
+ve2n1es2z
+v2enes
+ve2n12vi
+ve1n
+ven1f2
+ven1g2
+ven3k2
+ve2n1o
+ve2n12
+ve2n
+ven1t2
+ven2t1l
+ve2nu
+ven11l
+ve1n
+ve2ny
+ven2y
+2v1enz
+ve2r
+ve1
+ve2pe
+ve1p2r
+ve2rab
+ve1ra
+ve2r1a2c
+ve2r1a2d
+ve2r1a2g
+ve2ra1j
+vera2l
+vera2n
+ve2r1a2r
+ve2r1a1u
+ve2raz
+ve2r1g
+ve1r
+ve2r1l
+2v1er1d
+ver1e2g2y
+ve1re
+ve2r1e2h
+ve2r1e2k2e.
+vere1ke
+ve2rekl
+ve2r1e2l
+ve2r1eng
+ve2r1e2r
+ve2r1e2s
+ve2r1es2z
+ve2r12l
+ve1r
+ver1g2
+ve2r1i2ga
+ve1ri
+ve2r1ill
+ve2rim
+ve2r1inc
+ve2rind
+ve2r1inf
+ve2r1ing
+ver1in1te
+verint2
+ver1i1pa
+ve2ris
+ve2r1ol
+ve1ro
+ve2ror
+ve2r
+ver12r
+ve2r
+ver1p2
+ver2s1al
+ver1sa
+ver2sr
+ver1s
+vers2g
+ver1s
+ver2s11g
+ver2s1g3g
+ver2s1gn
+ver2s1gt
+ver2sir
+ver1si
+ver2s12
+ver2s
+ver1s1pe
+vers3s
+ver2s1t
+ver1s
+vers3zr
+vers2z
+ver1s1z
+vers3zen
+ver1s1ze
+ver1t1ra
+ve2rur
+ve1ru
+ve2r1ut
+ve2rt
+ve1r
+ve2r12g
+ve1r
+ve2sas
+ve1sa
+ve2s1l
+ve1s
+ve2s1e2k1t
+ve1se
+vese1k
+veset2
+2v1e2sett
+ve2sip
+ve1si
+ve2sis
+ve2s1z
+ve1s
+ve1s1k
+2v1e2s
+ve1s2pe
+ves3s1za
+ves2s2z
+ves3szer
+ves1s1ze
+vest2
+ve2s1u2
+2v1e2sz2e.
+ves2z
+ve1s1ze
+2v1e2szekn
+2v1e2szes
+2v1e2szn
+ve1s1z
+2v1eszm
+2v1e2szk
+ve1s1z
+2v1e2s1z
+veta2l
+ve1ta
+ve2tas
+ve2tl
+ve1t
+ve2t12r
+vet1eg2y
+ve1te
+ve2t1e2ll
+vete1l
+ve2tg
+ve1t
+ve2t12k
+ve2ti2d
+ve1ti
+2v1e2ti1ka
+v1e2tim
+ve2t1ing
+ve2t1ol
+ve1to
+ve2t12l
+ve1t
+ve2tv
+vet12
+ve1t
+ve2tur
+ve1tu
+ve2t1ut
+ve2t12z
+ve1t
+ve2vet
+ve1ve
+2v1e2vo
+veze2r
+ve1z
+vez1e
+vezks2z1
+vez1k
+vez2sorr
+vez1so
+vezs1s
+2v1ezr
+1v
+v2g
+v1
+2v1br
+v2dak
+v1da
+vda2l
+v2d1as
+v2d
+v2d1emb
+v1de
+v2dos
+v1do
+v2dv
+v1d
+v2d
+v2d
+v2d2z
+v1f2r
+v1ga2
+v2gab
+v2gak
+v2gal
+v2g12
+v2g1eg
+v1ge
+v2g1e2le
+v2g1elg
+v2g1elh
+v2g1e1li
+v2g1ell
+v2g1els
+v2g1elv
+vg2em
+vge2n
+v2g1en2y
+v2g1e1p
+v2g1e2r
+v2g1esem
+vge1se
+v2g1e2se1te
+v2ge1t
+v2ge1t
+v2g12r.
+v1g
+v2g12re2n
+vg1re
+v2g12r
+v2g1rr
+vg1rv
+vg3g
+2v1g1h
+v2g1id
+v1gi
+v2g1igaz1
+vgi2g
+vgi1ga
+v2gim
+v2giz
+v2g1
+vgkts1
+vg1k
+vgk1t
+v2gol
+v1go
+v2g12
+v2g
+v2g
+2v12h.
+2v12h2e.
+v1he
+2v12hen
+2v12hes
+2v1hs
+v2ke1i
+v1ke
+v2kt
+v1k
+v1k2l
+v1k2r
+v1k2ri
+2v1ks
+v2kk
+v1k
+v2l1a2
+v2lb
+v1l
+v2l2l
+v2l1r
+v2leg
+v1le
+vl1ell
+vl1els
+vl1elt
+v2l1emb
+v2l1e1me
+v2l1e2r
+v2les
+vl1ess
+vl1est
+v2lev
+v2l12k
+v1l
+v2lin
+v1li
+v2lir
+v2l
+v2l1ol
+v1lo
+v2los
+v2l1i
+v1l
+v2ls
+vlt2v
+vl1t
+v2l1u
+v2l
+v2l
+vna1p
+v1na
+2v12nekl
+v1ne
+v2n1emb
+v2ny1eg
+vn2y
+v1nye
+v2ny1e2k1r
+vnye1k
+vnye2l
+vny1e1le
+vny1els
+v2nyid
+v1nyi
+v2nyis
+v2ny1
+v2ny
+vny2l
+v1ny
+v2ny11l
+v2ny1lt
+2v12p
+v1p2l
+v1p2r
+2v12p
+v2ral
+v1ra
+v2r1a2n
+v2rap
+v2rar
+v2raz
+v2r1r
+v1r
+v2rt
+vr1d2
+v2r1e2l
+v1re
+v2r1eml
+vres3s
+vr1e1ti
+v2rs
+v1r
+vr1s2z
+vr11te
+vr1ikr
+v1ri
+v2rir
+v2r1o2k
+v1ro
+v2rot
+v2rv
+v1r
+vr1s
+vrtes1s
+vr1te
+vr2t12n.
+vr1t
+vr2t1l
+vr1t
+vr2t1rv1nye
+vrtr1v
+vrtrvn2y
+vr2tv
+v1ru2
+v2rug
+v2rut
+v2r
+vr2k
+v1r
+2v1rze2t.
+vr1ze
+v2sak
+v1sa
+v2sal
+v2seg
+v1se
+vse2l
+vs1e1le
+vs1elt
+v2s1e2r
+v2s
+v1s2pe
+vs3szer
+vs2s2z2
+vs1s1ze
+vs2tb
+vs1t
+v2s12v
+v1s
+vs3zav
+vs2z
+v1s1za
+vsz12r
+v21s1z
+v2szeg
+v1s1ze
+vsz1ell
+v2sz1e2se1te
+vsze1se
+v2szez
+v2sz1kn
+v1s1z
+v2s1z12
+vsz3s
+v2s1zu
+v1s1z2
+vsz1r
+vsz2l
+v1s1z
+vsz11l
+vt1est
+v1te
+2v12v.
+v3va
+2v1vb
+2v12ve1i
+v1ve
+2v12vek
+2v12ven
+2v12v1
+1v1v
+2v12vr
+v2v2i.
+v1vi
+2v1vr
+2v1vt
+2v12v
+vfe2l1em
+v1fe
+vfe1le
+vf2ra
+vf2re
+vf2ri
+vf2ro
+vge2o
+v1ge
+vg2ra
+vg2r
+vhez1
+v1he
+1vi
+vi2a1a
+vi1a
+vi2ab
+vi2ac
+vi2a1
+vi2ag
+via2p
+via2szal
+vias2z
+via1s1za
+via2sz1l
+via1s1z
+via2sz1rn
+via2sz1em
+via1s1ze
+via1s1z2
+via2szl
+via2s1z
+vi1ra2
+vi1
+vi2r1ad
+vic2ca
+2vic1k
+vi2csag
+vic2s
+vi1c1sa
+vi2csal
+vi2cs1an
+vi2cs1as
+vi2csl
+vi1c1s
+vi2cs1e2l
+vi1c1se
+vi2cs12r.
+vi1c1s
+vi2csr1t
+vi1c1si2
+vi2csim
+vi2csip
+vi2c1s12
+vics3z
+vi2deg
+vi1de
+vi2d1es2z
+2v1i2dz
+vi1d
+2v1i2d
+vi2d2z
+2v1i2gaz
+vi1ga
+2v1i2gn
+vi1g
+vi1ka2
+vi2k1ag
+vi2k1el
+vi1ke
+vi2kon
+vi1ko
+vi2l1k
+vi1l
+villa1s
+vil1la
+villas2z2
+2v1il1lu
+vi2m
+2v1imm
+vina1t2
+vi1na
+2vind
+vi2n1emb
+vi1ne
+vi2n1
+vin2tess
+vin1te
+vin2tes2z
+2vin1t
+vin2tos
+vin1to
+2v1i2on
+vi1o
+2vi1pa
+vi1p2s
+2v1i2ra2t.
+vi1ra
+2v1i2ra1ta
+2v1i2ra1t
+2v1i2ratb
+2v1i2ratc
+2v1i2ra1t
+2v1i2ratf
+2v1i2rath
+2v1i2ra1ti
+2v1i2ratk
+2v1i2ratl
+2v1i2ratm
+2v1i2ratn
+2v1i2ratod
+vira1to
+2v1i2ratok
+2v1i2ratom
+2v1i2raton
+2v1i2ratos
+2v1i2ratot
+2v1i2ratr
+2v1i2rats
+2v1i2ratt
+2v1i2ra1tu
+2v1i2ra1t
+2v1i2ratv
+2v1i2rod
+vi1ro
+vi1sa2
+vi2sal
+vi2s1a1u
+vi2s12g
+vi1s
+vi2ser
+vi1se
+vi2s1k
+vi1s
+vi2sim
+vi1si
+vi2s1is
+vi2siz
+vi2s
+vi2szr
+vis2z
+vi1s1z
+vi2szok
+vi1s1zo
+vi1t2a
+vi3ta1d2
+vitaks2z1
+vit2aks
+vita1k
+2vital
+vite1l2
+vi1te
+2vitn
+vi2t1
+vi2zeg
+vi1ze
+vi2z1ell
+vi2z12l
+vi1z
+vi2zin
+vi1zi
+vi2zis
+vi2zok
+vi1zo
+vi2zol
+vi2zom
+vi2z1s
+viz2s
+viz3st
+viz3s2z
+vi2zud
+vi1zu
+vi2z
+1v
+v1di2
+v2ge
+v2n2y
+v2nyenc1
+v1nye
+2v12ra
+2v12r2s.
+v1r
+2v12rsb
+2v12rsh
+2v12r1si
+2v12rsn
+2v12rsr
+2v12rs3s
+2v12rst2
+2v1r1da
+2v12r
+2vtle2t.
+v12tl
+v1t
+vt1le
+v23tletb
+2vtle1te
+2v1vb
+vvks2z1
+v1v
+vv2ks
+vv1k
+v2z1a2
+v2z
+v2z1e2le
+v1ze
+v2z1elf
+v2z1elh
+v2z1ell
+v2z1eln
+v2z1e2l
+v2z1elp
+v2z1els
+v2z1elt
+v2z1el1v
+v2z1el1vo
+vze2m
+vz1emb
+vz1e1me
+v2z1e1m
+v2zk
+v1z
+v2zs
+v2z1ing
+v1zi
+v2z1ist2
+v2z1is2z
+v2z
+v2z1o
+v2z12
+v2z
+v2z12
+v2z3s2
+v2z
+v1z2
+2v12z
+vz3z
+vjra2t1t
+v1j
+vj1ra
+vjra1t
+vje2gya
+v1je
+vjeg2y
+vje2tel
+vje1te
+vje2tu
+vkia2l
+v1ki
+vki1a
+vki12
+vk2li
+vk2l
+vk2lu
+vk2ri
+vk2r
+vk2r
+vla2te
+v1la
+vle12
+v1le
+vle12
+vme2g1
+v1me
+vna2p1in
+v1na
+vna1pi
+1vo
+vo2ji
+vo2k
+2v1okm
+voks3s
+2v1ok1ta
+vola1t
+vo1la
+2v1ol1d
+2v1old2.
+vol1d
+vol2t1a2d
+vol1ta
+vo1me2
+vomec3
+vona2l1e2
+vo1na
+vona2t12rak
+von2atr
+vona1t
+vonat1ra
+vona2t1e
+vons1s
+vo1n
+von2s3z
+vo2pe
+vo2r1a2
+vo2r1in
+vo1ri
+2v1orm
+vo2s1as
+vo1sa
+vo2s1av
+vo2s1e
+vos3s2
+vo2s1
+vo2s
+vo2v
+vo2xi
+1v
+va2k
+v1a
+v2g
+v1
+v2r
+vcsa2p12
+v21c1sa
+vc2s
+v1d2re
+v1f2r
+v1k2l
+2v1nn
+v2r
+v1
+v1p2l
+v1p2r
+v2ran
+v1ra
+v2rk
+v1r
+v2rn
+v2rt
+v2s1akk
+v1sa
+v2s1a2l
+v2seg
+v1se
+v2s1iv
+v1si
+v2sol
+v1so
+v2s1orr
+v2s
+v2s
+v2s
+v1s1pi
+vs3s
+v2s1t2r
+v1s2z2
+vsza2k1
+v21s1za
+v2s3zr
+v21s1z
+v22s3zen
+v1s1ze
+v2ta1t2
+v1ta
+v1t2r
+vvro1s1u
+v1v
+vv1ro
+1v
+v2b
+v2dm
+v1d
+2v12ko
+vl2gya
+vlg2y
+2v12rk
+v1r
+2v1tl
+v2ve
+v2v
+2v1zn
+v1z
+vz1e3
+v1z
+v2z2s
+1v
+va2n
+v1a
+v2g
+v1
+vcsa1p1
+vc2s
+v1c1sa
+ve2l
+v1e
+ve2r
+v2j
+v1
+v2n
+v1fl
+v1f2r
+vi3de1j
+v1i
+v1i2dej
+vi1de
+vi2r
+v1kl
+vo2l
+v1o
+v1pl
+v1p2r
+v1rm
+v12r
+v1s2p
+v1s1ta
+v1st2r
+v1t2r
+v2l
+v1
+v2zi
+vp2la
+vp2ra
+vp2re
+vp2r
+vp2ri
+vp2ro
+vp2r
+vp2s2z
+vs2k
+vs2ki
+vs2ko
+vs2l
+vs2pe
+vs2ta
+vs2ti
+vs2t
+vs2to
+vst2r
+vs2t
+vsz2p
+vs2z
+v1sz2t
+vta2n12s
+v1ta
+vta1n
+vta2n12to
+vt2ant
+vta2n12
+vt2r1adatb
+v1t
+vt1ra
+vtra1da
+vt2r1a2da1to
+vt2raj
+vt2r1ass
+vt2ris
+vt1ri
+vt1r2
+vt2r1r
+vtels1s
+v1te
+vte1l
+vt2ra
+vt2r
+vt2ri
+vt2ro
+1vu
+vu2bo
+vu2mal
+vu1ma
+vu2man
+vu2m1e2
+vu2mis
+vu1mi
+vu2m
+2v1u2ni
+vu2ra
+vu2ru
+2v1u2tak
+vu1ta
+2v1u2tas
+2v1u2tat
+vu2t
+v1utc
+v1u2t
+1v
+v1fr
+v1jd
+v12j
+v1js
+v2r1ad
+v1ra
+v2re
+v1r2
+v2rn
+v2r
+v2s1z
+vs2z
+v1tn
+1v
+v2g2y
+v2k
+v2l
+2v1ld
+2v1nn
+v1pr
+v2r
+v1st
+v1s2z2
+v2te
+v2t
+v2z
+1v
+2v1rl
+v2z
+vvgy1b
+v1v
+vvg2y
+vv1gy
+vvers3s
+v1ve
+vve1r
+vz2r12ra
+v1z
+v3zrr
+vz1r
+2w.
+1wa
+wa2i1i
+wa1i
+war2di
+wa2re
+wa1s2h
+wa1ye
+wa1y
+1w
+1we
+we2b1a2
+we2b12
+we2b1e1le
+we1be
+we2b1
+we2bir
+we1bi
+we2b1o
+we2b1
+we2b
+we2le
+we2r
+we1
+1w
+whi2t
+w1hi
+1wi
+wi2c2h
+wi2c2z
+1w
+1wo
+wo2od
+wo1o
+1w
+1w
+1w
+ws2to2
+1wu
+1w
+1w
+1w
+wyo2m1
+2x.
+1xa
+x1a2da
+xa2d
+2x1a2la
+xa2l
+2x1alg
+2x1alj
+2x1alk
+xa2na
+x1a2n2y
+x1a2r
+xa2ri
+xa2vi
+1x
+2x1br
+x2g2y
+2x1ll
+x2rak
+x1ra
+2x12ram
+x2ras
+2x12ro
+2x1rr
+2x12ru
+2x1tj
+2x1tr
+2x1tv
+xba2l1
+x1ba
+xb2la
+xb2lo
+xb2ra
+xd2r
+1xe
+x1e2g2y
+2x1e2k2e.
+xe1ke
+xe2l1a
+xe2l1
+2x1e2lekt
+xe1le
+xe2lel
+xe2l1emb
+2x1e2lemr
+xe2l1es2z
+xe2l1in
+xe1li
+xe2l1o
+2x1emel
+xe1me
+2x1eml
+2x1e2r
+2x1e2s
+2x1e2z
+1x
+2x1hs
+x2p
+2x12r.
+2x1r1te
+2x1r1t
+2x1r1t
+2x1rz
+2x12ve1i
+x1ve
+xf2re
+1xi
+xia2n
+xi1a
+xi2av
+xi2d1a2l
+xi1da
+2xi1d
+xi2ds
+2xi2de
+2xi1d
+2xid1g
+2xid1j
+2xid1j
+2xidl
+2xidm
+xi2dol
+xi1do
+xi2d
+2xi2d
+xi2d1z
+2xid1r
+2xids
+2xi1du
+2xidv
+2xi2d2z
+2x1i2ga
+xig2n1n
+xi1g
+2x1ill
+xi1na2
+xi2n1an
+2x1ind
+xi1ne2
+xi2n1et
+xi2n1i2
+xi2n
+xi2on
+xi1o
+xi2c
+xi1
+xi21e
+xi2g
+xi21m
+xi21o
+xi21
+xi2p
+xi2r
+xi21so
+2x1i2r
+2x1i2ro
+xi2sad
+xi1sa
+xi2sal
+xi1se2
+xi2s1el
+xi2s1es
+xi1s2k
+xis1p
+xis3s
+xi2s1
+xi2t1e2g
+xi1te
+xi2t1e2r
+xi2t1i2
+xi2t12
+1x
+x2ja
+x2j
+x2jo
+x2ju
+x12r
+x2r
+x2ve
+x2v
+x2vi
+x2v
+xmeg1
+x1me
+1xo
+2x1old
+xo2n1a1i
+xo1na
+xo2n1al
+xo2n1e
+xo2pe
+2x1os2z
+1x
+1x
+x2r
+x2z
+1x
+x2s
+xpanzi2in
+x1pa
+xpan1zi
+xpanzi1
+xpanzi1i
+xpanzi21k
+xp2la
+xpor2t1a2
+x1po
+xpor2t12r
+xpor1t
+xpor2t1e2
+xpor2t1rd
+xpor1t
+xpor2t12re
+xpor1t
+xpor2t12r
+xpor2t12
+xp2ri
+x1p2ro
+x1p2r
+xs2k
+xs2pe
+xs2ta
+xst2r
+xti2la
+x1ti
+xti2l
+xti2le2g
+xti1le
+xti2lin
+xti1li
+xti2lis
+xti2l1o
+xt1rt
+x1t
+1xu
+xu2sad
+xu1sa
+xu2sal
+xu2s1a2n
+xu2se
+xu2s1r1t
+xu1s
+xu1si2
+xu2sil
+xu2sim
+xu2sin
+xu2sit
+xu2s1ol
+xu1so
+xu2s12
+xu2s12
+xus3s
+xust2
+xus1tr
+xu1s2
+xu2s1t
+xu2s
+xu2s1
+xu2s3z
+xu2ta
+1x
+1x
+x2l
+x2ve
+x2ze
+1x
+2y.
+yaa2d
+ya1a
+y1ab1la
+y2a1b1lo
+y1a2bon
+ya1bo
+y1ab1ra
+y2a1b1ri
+y1abs
+ya2c2l.
+ya1c
+ya2da1ko
+ya1da
+y1a2da1l
+y1adap
+y1a2da1ta
+y1a2datb
+ya2da1ti
+y1a2da1to
+y1a2da1tu
+yad2ki
+ya1d
+ya2d12s
+ya2dv
+y1ad1mi
+y1a2dan
+ya1d
+yad1a
+y1a2d1b
+ya2d1
+y1a2d1i
+y1a2dj
+y1a2d1k
+y1a2dkt
+y1a2dm
+y1a2d1n
+y1a2dr
+y1a2ds
+y1a2d1u
+yae2r
+ya1e
+ya2e1ro
+yae2t
+ya2p
+ya1
+ya2r
+y1aff
+ya1f2r
+ya2g1a2d
+ya1ga
+ya2g1ag
+ya2g1am
+ya2gan
+y1aganc
+ya2g1as
+ya2g1atl
+ya2g1a1to
+ya2ga1u
+y2aga2z
+yag1a1zo
+ya2g1ll
+ya1g
+ya2g12r
+ya2g1rb
+ya2g12r
+ya2g1rh
+ya2g12ri
+ya2g1rj
+ya2g1rk
+ya2g12ro
+yag1rr2a.
+ya2grr
+yagr1ra
+ya2g1r1s2
+ya2g1rt
+ya2gs
+yag11t1a2
+ya2g1tf
+ya2g1tl
+ya2g1tr
+yag1d2
+ya2gec
+ya1ge
+ya2g1e2l
+ya2g1e2s
+ya2g12g
+ya1g
+ya2gk
+y1aggr
+yag3gy
+yag2g2y
+ya2gid
+ya1gi
+ya2gim
+ya2g1i1o
+yag1i2s2z
+ya2giz
+ya2g
+ya2g1os2z
+ya1go
+ya2g12r
+ya1g
+ya2g
+yag1s
+ya2gur
+ya1gu
+ya2g1ut
+y1ag2y.
+yag2y
+y1a2gyat
+ya1gya
+y1agyb
+y1agyf
+y1agyk
+y1a2gyon
+ya1gyo
+y1agyr
+y1a2jak
+ya1ja
+y1a2jn
+ya1j
+y1ajk
+y1ajt
+y1aka1d
+ya1ka
+ya2k1ll
+ya1k
+ya2k1tk
+ya2k1tm
+yak1elm
+ya1ke
+yak1elt
+yak1kn
+ya1k
+ya2k12r.
+ya2k11ri
+yak1i2zo
+y2akiz
+ya1ki
+ya1k1lu
+y1akn2a.
+yak1na
+y1aknk
+yak1n
+ya1k1n
+ya2k1o1la
+ya1ko
+ya2k1old
+ya2k1n
+ya1k
+y1a2ks
+ya2k1rv
+ya1k
+ya1k2rm
+y2ak1r
+ya1k2ri
+y2a1k1r
+y1ak2t.
+y1aktk
+yak1t
+y1aktb
+y1aktiv
+yak1ti
+y1aktj
+y1aktot
+yak1to
+y1ak1tu
+yala2g1
+ya1la
+ya2l1ag2y
+yal1ajk
+ya2lakb
+y1a2lakj
+y1a2lakk
+y1a2l2akok
+yala1ko
+y1a2lakot
+ya2lakt2
+y1a2la1ku
+y1alakz
+y1a2lan2y
+ya2la1pa
+y1a2la1p
+ya2lap1j
+y1a2la1p
+yala2te
+ya2l11ga
+ya1l
+ya2l1l
+yals1s
+y1a2l1t
+ya2l12ne
+y2aln
+ya1l
+ya2lif
+ya1li
+yal1i2ko
+y2alik
+ya2l1inv
+y1alja1i
+yal1ja
+y1al1ji
+ya2lor
+ya1lo
+yalks2z1
+ya1l
+yal2ks
+yal1k
+ya2l11r
+ya2l12
+yals2
+y2al1ta
+yal1t2r
+y1al1t
+ya2l
+ya2l
+y1a2malg
+ya1ma
+ya2m1an2y
+y2aman
+yam1a2rr
+yama1r
+yama2tal
+yama1ta
+ya2m1rb
+ya1m
+ya2m1rn
+yamszs1
+yams2z
+yam1s1z
+ya2m12to
+yam1b2
+yam1emb
+ya1me
+yam1ess
+yame1s
+yami2k
+ya1mi
+ya2m1i1ko
+ya2mind
+ya2m1i2o
+ya2m1is
+ya2m1os2z
+y2amos
+ya1mo
+ya2m12r
+ya1m
+ya2m
+ya2m
+ya2m
+y1a2nal
+ya1na
+ya2nan
+ya2nat
+yan1att
+ya2n1e2g
+ya1ne
+ya2nek
+ya2ner
+ya2n1et
+ya2ne2z
+y1a2nm
+ya1n
+y1ang
+ya2nid
+ya1ni
+ya2n1in
+ya2nis
+ya2nit
+y1a2niz
+y1an2n2y
+yano2d
+ya1no
+yan1o1da
+yan1onn
+ya2n2.
+ya1n
+y1anya1o
+yan2y
+ya1nya
+y1a2nyas
+y1a2ny1ka2
+ya1ny
+y1a2nykk
+y1a2ny1t
+y1anyj
+y1a2ny
+y1a2nyuk
+ya1nyu
+ya2r
+ya1
+y1a2p2a.
+ya1pa
+y1a2pa1i
+y1a2pas
+y1a2pb
+ya1p
+y1a2pd
+y1a2p1
+y1a2p1i
+y1a2pk
+y1a2pm
+y1a2p1ra
+y1a2p1r
+y1a2p2t.
+y1a2p1to
+y1a2p1t
+y1a2pv
+y1a2p2i.
+ya1pi
+y1apjh
+yap1j
+y1apj1i
+y1ap1ju
+ya1p2l
+ya2post
+ya1po
+yapo2t
+y1a2p2.
+ya1p
+y1a2p1
+y1a2ph
+y1a2p1i
+y1a2pj
+ya2p1k
+ya2p1na
+y1a2ps
+ya2p2t.
+ya2p1t
+y1a2pv
+y1app
+ya1p1re
+ya1p2ri
+y1ap1r
+y2a1p1ro
+ya2r1a2d
+y2arad
+ya1ra
+ya2r1a2d
+ya2r1a2du
+ya2ras2z
+ya2rnn
+ya1r
+y1a2rn2y
+ya2r1tv
+y1ar2c.
+y1ar1ca
+y1ar1c
+y1arcb
+y1arcc
+y1arc2h
+y1arck
+y1arcn
+y1ar1co
+y1arcr
+y1ar1cu
+y1ar1c
+1yar2d.
+1yardn
+3yardom
+yar1do
+1yardos
+yar1d1r
+yar1ell
+ya1re
+ya2ro1ma
+ya1ro
+yar12r
+ya1r
+yar11v
+yar1s2
+yas1alj
+y2asal
+ya1sa
+ya2s1as
+yasg1g
+ya1s
+ya1s2l
+ya1s1ne
+ya1s2pi
+ya1s2po
+ya1s2r
+yast2
+y2a1s2ta
+y2a1s1to
+y2a1str
+ya1s1vi
+yasz2tr
+yas2z
+yasz1t
+y1a2td
+ya1t
+yat2k11t1a2
+ya1t
+yat1k
+y1atk2a.
+yat1ka
+y1at1k
+ya2tomh
+ya1to
+y1a2tomm
+y1a2to1mo
+yat2rg
+yat1r
+y2a1t1r
+ya1trf
+yat1r
+y1attr
+y1a2t2y
+y1a2uk
+ya1u
+y1a2u1l
+y2a3u2t
+y1a2u1to
+y1a2u1t
+yauti2ko
+ya2utik
+yaut1i
+ya2t
+ya1
+ya2z
+y1a2vat
+ya1va
+y1a2zon
+ya1zo
+y1a2zr
+ya1z
+y12b
+y1br
+y2ga
+y2g
+y2g
+y2gi
+y2go
+y2gu
+y2g
+y2g2y
+y2jal
+y1ja
+y2j1e
+y2j1
+y2j
+y1ka2
+y2k1an
+y2k1
+y2k1e
+y2k
+ylas3s
+y1la
+y2ll
+y1l
+y1l1do
+y2l1e
+y1llam
+yl1la
+y1llat
+y1lls
+yl1l
+y1l1l
+y1l1lo
+y1l1l
+y1llv
+y2l
+y1ma2
+y2m1al
+y2m1an
+y2m1ap
+y2m1as
+y1mi2
+y2m1in
+y2m
+y2n1e
+y2nk
+y1n
+yn3n
+y2n
+ynt2
+yn1tr
+y2n
+y1n2y2
+y12po
+y2r1a2l
+y1ra
+y12raml
+y12ra1mo
+yra2n
+yr1an2y
+y2rap
+y2rar
+y2r1ass
+y2r1av
+y2raz
+y1ra1z
+yr1a1zo
+y2r1l
+y1r
+y1rbev
+yr1be
+yr1d2
+y2r1e2
+y1rem
+y2rj
+y1r
+y12ri1
+y1ri
+y2rim
+y2r1is
+y1r1nya
+yrn2y
+y1r2
+y2rr
+y2r
+y2r
+y1r1p
+yr2s
+y2r2t.
+y1rtm
+yr1t
+yr1tr
+y12ruh
+y1ru
+y12rur
+y2r2
+y1r2.
+y2r
+y1r1va
+y1rver
+yr1ve
+y2sal
+y1sa
+y2sas
+y2s12g
+y1s
+y2s12r
+y2s1rt2
+y12ss
+y2se
+ys1k2
+y12s
+y2s
+ys3s1zi
+ys2s2z2
+y2szab
+ys2z
+y1s1za
+y2szag
+y2szal
+y2sza2s
+y2sz1l
+y1s1z
+y2s1ze
+ysz1el
+ysz1em
+ys3zen
+ysz1e2r
+y2szt
+y1s1z
+y2szv
+y2szim
+y1s1zi
+y2szin
+y2szis
+y2szit
+ysz12d
+y1s1z
+ysz12r
+y2s1z12
+y2s1z
+y2s1z12
+y12ta
+yt1a2l
+y12t
+y1tb
+y12t1e2
+y12t
+y1tf
+y1th
+y12t1i2
+y1tk
+y1tlag
+yt1la
+y1t1l
+y1t1l
+y1tm
+y1tn
+y12t1
+y1tp
+y1tr
+y1ts
+y1tt
+y12t
+y1tv
+ybank2ra
+y1ba
+yban1k
+ybank2ri
+ybank2rokb
+ybank1ro
+ybe12
+y1be
+ybe1e2
+yb2la
+yb2le
+yb2l
+yb2li
+yb2lo
+yb2l
+yb2ra
+yb2ri
+yb2ro
+yb2r
+ycsa2p12g
+yc2s
+y1c1sa
+ycsa1p
+ycs12
+y1c1s
+yc2vi
+yd2be
+yd2ni
+y1d2ra
+y1d2r
+yd2ro
+yd2r
+y1d2ru
+yea2d
+ye1a
+yea2v
+ye2r
+ye1
+ye1b2l
+y1ecset
+yec2s
+ye1c1se
+ye2d1
+ye2deg
+ye1de
+ye2d1es2z
+ye2dol
+ye1do
+ye2d12
+ye2d1u2
+ye2d1
+ye2d12l
+ye1d
+yed2vr
+yed1v
+yee2s
+ye1e
+y1eff
+ye1ga2
+ye2g1a1la
+ye2gan
+ye2g1az
+ye2g12
+ye2g1el
+ye1ge
+ye2g1e2red
+yege1re
+ye2g1l
+ye1g
+yeg1r1be
+ye2grb
+y1e2grr
+ye2gs2z1
+yeg1szn
+yeg3g2
+ye2gid
+ye1gi
+ye2g
+ye2g
+ye2g1g
+ye1g
+ye2gyed
+yeg2y
+ye1gye
+y1e2gyen
+y1e2gyes
+ye2gyet
+ye2gyez
+y1e2gy
+y1egyh
+yegyhzkz1
+yegy1h
+yegyhz1k
+y1egyl
+y1egys
+y1e1gy
+y1egyv
+yei2g
+ye1i
+y1ejt
+y1e2k2e.
+ye1ke
+y1e2ke1i
+y1e2kek
+y1e2k1
+ye1k
+ye2kj
+y1e2k2s.
+y1e2k1se
+ye1k2r
+y1e2l1a2d
+ye1la
+y1e2lg
+ye1l
+ye2ll
+y1elc
+y1e2lef
+ye1le
+ye2le1ge
+ye2l1e2h
+y1e2lem2e.
+yele1me
+y1e2lemek
+y1e2le1m
+y1e2l1e2re
+ye2lgt
+ye1l
+ye2l12k
+ye2l12r.
+yels3s
+yel2s3z
+y1elhal
+yel1ha
+y1elhel
+yel1he
+y1el1h
+y1e2l1in
+ye1li
+ye2liv
+y1e2l12
+y1el1j
+y1el1ka
+y1elnev
+yel1ne
+y1el1n
+y1eln2y
+ye2l1os
+ye1lo
+y1e2l
+y1e2lad
+ye1l
+yel1a
+yel1e2
+y1e2l1
+ye2ltt
+y1e2lz
+y1el1sa
+y1el1s
+y1eltr
+yel1t
+y1el1to
+y1el1t
+yel2vad
+yel1va
+yel2v1ll
+yel1v
+yel2vs
+yel2v1eg
+yel1ve
+yel2v1e2r
+yel2ves2s2z
+yelve2s2z
+yelv1e1s1ze
+y1elve1v
+yel2vd
+yel1v
+yel2v1g
+yel2vl
+yel2v1rz
+yel2v1
+yel2vol
+yel1vo
+ye2mak
+ye1ma
+ye2m1a2l
+ye2ma2p
+yema2r
+ye2m1at
+ye2m2l
+ye1m
+y1ember
+yem1be
+y1e2me1l
+ye1me
+y1e2melk
+ye2m1er
+y1e2ms
+ye1m
+ye1mi2
+yem1ing
+ye2m1is
+ye2mit
+yem1i1ta
+ye2miz
+y1emlk
+yem1l
+y1em1l
+y1em1l
+yem1ost
+ye1mo
+ye2m1
+yem1p2
+yemu2s
+ye1mu
+ye2m1us2z
+ye2n12
+yen2c1sa
+yenc2s
+yen2c3ser
+yen1c1se
+ye2n1elj
+ye1ne
+ye2n1eln
+ye2n1elv
+y1e2ner
+yenes3s
+y2enes
+ye2n12l
+ye1n
+yenf2l12v
+yen1f
+yenf1l
+ye2nid
+ye1ni
+ye2n1i2p
+yen1k2
+ye2n1o
+ye2n1g
+ye1n
+ye1ny2
+yen2y
+y1enz
+ye2pag
+ye1pa
+yep1a1lo
+ye2p1a1r
+ye2p1ll
+ye1p
+ye2pt
+ye2p1e2l
+ye1pe
+ye2p12k
+ye1p
+y1e2piz
+ye1pi
+ye2pos
+ye1po
+yep2p1e2r
+yep1pe
+ye1p2ro
+yep1t2
+y1er1de
+y1e2redm
+ye1re
+yere2ga
+yere2ge1te
+yere1ge
+yereg1g
+y1e2rej
+yere2k1a
+yere2k
+yere2k1e2s2z
+yere1ke
+yere2ko
+yere2k12
+y1e2rn2y
+ye1r
+y1er1k
+y1er1k
+y1ern2y
+y1e2ro
+ye2r2r
+ye1r
+yer1
+ye2rig
+yer1i
+ye2r1n
+ye2r1r
+ye2r1s
+ye2rss
+ye2r1v
+yer2s1a
+y1er1s1z
+yers2z
+ye2s
+yes1eg2y
+ye1se
+yes1e2k1t
+yese1k
+y1e2semn
+yese1m
+ye2s1er
+y1e2setb
+y1e2se1t
+y1e2se1ti
+y1e2setk
+y1e2setr
+y1e2se1t
+y1esl
+ye1s
+ye2sip
+ye1si
+ye2s12r
+ye1s
+y1es1
+ye1s
+ye2s1be
+y1e2sh
+ye2s1je
+ye2s2k.
+ye2skh
+ye2skr
+y1e2sn
+y1e2sr
+y1e2ss
+ye2s1v
+ye1s2pe
+yes2t1a2
+y1estlyid
+yes1t
+yestl2y
+yest1lyi
+y1estlyik
+y1ests
+y1estv
+y1est1j
+yes2tr
+yes1t
+y1es1t
+y1eszk
+yes2z
+y1eszm
+y1esztt
+yesz1t
+y1e2s1z
+y1e2tal
+ye1ta
+yete2g12r.
+ye1te
+yete1g
+y1e2tet
+ye2t1rt
+ye1t
+y1e2tik
+ye1ti
+y1etn
+y1e2td
+ye1t
+ye2vet
+ye1ve
+ye2ve1z
+y1e2v
+y1e2vol
+ye1vo
+y1e2v
+y1e2zer
+ye1ze
+yeze2t1k
+yeze1t
+yez1a2
+ye1z
+y1ezre1de
+yez1re
+y2b1
+y2b12r.
+y1b
+y2b1i2
+y2b
+y2des
+y1de
+y1gb
+y12ge
+y12g
+y12gi
+y12g
+y1gt
+y12h2e.
+y1he
+y12hen
+y12hes
+y12het
+y1hs
+y12j.
+y1jb
+y2je1i
+y1je
+y2jen
+y2jrt
+y1j
+y12ji
+y1jj
+y1js
+y1jt
+y2kab
+y1ka
+y2kad
+y2k1a1ka
+y2k1a2l
+y12kat
+y2k1el
+y1ke
+y2ker
+y2k12k
+y1k
+y2k12l
+y2k12r.
+y2kik
+y1ki
+y2k12
+y2k1
+y2k
+y2kr
+y1k
+y2l1
+y2l2e.
+y1le
+y2les
+y12let
+y12ln
+y1l
+y2lt
+y2li2m
+y1li
+yl3l
+y2ls
+y1l
+y1l1sp
+y12l
+y1n2
+y2n1r
+y2n1e2k2e.
+y1ne
+yne1ke
+y2nel
+y2n1ikr
+y1ni
+y2no
+y2p
+y2p
+y1ra2
+y2r1aj
+y2r1ak
+y2ral
+y2r1an
+y2rar
+y2r12
+y1r2c3h
+yr1d2
+y1rdek
+yr1de
+y2reg
+y1re
+y2r1e2l
+y2rem
+y1re2m.
+yr1e1me
+y2r1enc
+yre2n
+yr1e2s
+y12ret
+y2rev
+y12rez
+y12rs
+y1r
+y2ril
+y1ri
+y12rin
+y1r1m
+y2r1os2z
+y1ro
+y1r2
+y2r1r
+y12r2.
+y1r
+y12r1i
+y12rk
+y12rt
+y1r1pa
+y1rtk
+yr1t
+y1ru2
+y2rut
+y1r2v.
+y1rvn
+yr1v
+y1rvv
+y1rzet
+yr1ze
+y1r1z
+y1r1z
+y22s1z1
+ys2z
+y2sz1emb
+y1s1ze
+y2s1z1o
+y2s1z1
+y2t1a
+y12tel
+y1te
+y12ter
+y2tn
+y1t
+y1t1ke
+y1tl
+y12v.
+y12vad
+y1va
+y1vb
+y12v2e.
+y1ve
+y12vek
+y12vem
+y12ven
+y12ves
+y12vet
+y1vez
+y12vb
+y1v
+y12vn
+y12vr
+y12vt
+y12vv
+y1vf
+y1vh
+y12vi
+y1vk
+y1vm
+y1vn
+y1vr
+y1vs
+y1vt
+y12v
+y12v
+y1vv
+yfas2
+y1fa
+yf2l
+y1f
+yflmeg1
+yfl1me
+yf2l1o
+yf1gl
+yf2la
+yf2le
+yf2li
+yf2lo
+yf2l
+y2f2l.
+y1f
+y2f12s
+y1f
+y1f2ra
+yf2ri
+yf2r
+y1f2ro
+yf2r
+yga2z1
+y1ga
+yg2le
+yg2l
+yg1g2
+y1g
+ygt2
+yg2ra
+yg2r
+yg2ri
+yg2r
+yg2ru
+yg2r
+yha1bl
+y1ha
+y2h1a2d
+yha1p2
+yha1t2r
+yh2zal
+y1h
+yh1za
+y2h1elv
+y1he
+y1i2bo
+y1i2de1
+yi1de
+y1i2deg
+y1i2den
+y1i2de1o
+y1i2d
+y1i2dom
+yi1do
+y1i2d
+y1i2ga
+y1i2g
+y1i2g2n2y
+yi1g
+y1i2gz
+y1i2har
+yi1ha
+yi2hat
+y1ihl
+y1i2ker
+yi1ke
+yi2k1rn
+yi1k
+yi2kont
+yi1ko
+yi1k2ri
+y1i2m2a.
+yi1ma
+y1i2m
+y1i2mit
+yi1mi
+y1imp
+y1i2nas
+yi1na
+y1inc
+y1ind
+y1inf
+y1in1ga
+yi2nic
+yi1ni
+y1inj
+y1ins
+y1inv
+yi2o1no
+yi1o
+y1ipa1r
+yi1pa
+y1i2park
+y1i2pa1ro
+y1i2ram
+yi1ra
+y1i2ra2t.
+y1i2ra1ta
+y1i2ra2t1
+y1i2ratn
+y1i2ra1to
+yi2ratt
+y1i2r
+y1i2ri
+y1i2rod
+yi1ro
+y1irr
+y1irt
+y1ish
+y1is1ko
+y1ism
+y1isp
+y1ist
+y1i2s1za
+yis2z
+yi2szel
+yi1s1ze
+yi2szon
+yi1s1zo
+y1i2tal
+yi1ta
+y1i2tat
+y1i2var
+yi1va
+y1i2vs
+yi1v
+y1i2v
+y1i2z
+y1izg
+y1izm
+yi2zom
+yi1zo
+y2g
+y2ja
+y2j
+y2ju
+y2ka
+y2k
+y2ke
+y2k
+y2kol
+y1ko
+y2k1
+y2la
+y2l1e2
+y2l
+y2l
+y2ral
+y1ra
+y2rb
+y1r
+y2r12s2z
+y12rog
+y1ro
+y2r
+yt1a2
+y1t
+yt1p2
+y2v
+y2ve
+y2v
+y2v
+y2v
+y2v
+y2z
+y2z
+yje2gy12
+y1je
+yjeg2y
+y2jv
+y1j
+yjob2b1o
+y1jo
+yjo2g12szait
+yjo1g
+yjogs2z
+yjog1s1za
+yjogsza1i
+yjo2g12s1z
+yjo2g12szokk
+yjog1s1zo
+yjo2g12s1zu
+yka1i2
+y1ka
+yka1k2
+yka2r2ra
+yka1r
+yk2b
+y2k1e2lem
+y1ke
+yke1le
+yk12jv
+y1k
+yk1j
+yk22p1el
+yk1pe
+yk2p1e2r
+yk2ho
+yki12
+y1ki
+yki1e2
+yk1izm
+yk2ka
+yk2la
+yk2le
+yk2li
+yk2l
+yk2l
+yk2lu
+yk2n
+yk1ro2
+y1k
+yk2ra
+y1k2r
+y1k2ri
+yk2r
+yk2ro
+yk2r
+yk2v
+ylal2ta
+y1la
+yl2a2t1a2n
+yla1ta
+yl2a2t12t
+yla1t
+yle1i2
+y1le
+yle12
+yle2tal
+yle1ta
+yle2t
+yl12
+y1l
+ylt2
+yma1d2
+y1ma
+y2ma2t.
+ym2s1ik
+y1m
+ym1si
+yme2g1
+y1me
+yme2g1o
+ym2ma
+yn2vr
+y1n
+yn1v
+yn2ka
+ynk2r
+yn2n
+y1n
+yn1
+yn2i1
+yn1i
+yo2be
+y1obj
+y1o2d
+yo2gal
+yo1ga
+yo2gl
+yo1g
+yo2g1r
+yo2ge
+yog3g
+yo1gi2
+yo2git
+yo2g1iv
+yo2g
+yo2g1os2z
+yo1go
+yo2g
+yo2g
+yo2g
+yo1ka2
+y1o2k1al
+y1o2k
+yo1ki2
+y1o2k1ir
+y1okm
+y1o2kol
+yo1ko
+y1o2kos
+y1o2koz
+y1ok1ta
+yo2l1a2l
+yo1la
+yola2n
+yol1an2y
+yo2l11ri
+yo1l
+yol2cem
+yol1ce
+yol1ci2
+yol2cik
+y1ol1d
+y1ol1d
+y1o2lim
+yo1li
+y1olts
+yol1t
+yol2te2r
+yol1te
+yo2l
+yo2l
+yol1v2
+yoma2n
+yo1ma
+yo2m1an2y
+yoma2s
+yo2m1a1s1z
+yomas2z
+yo2maz
+yo2m1l
+yo1m
+yom2ny12t1a2
+yomn2y
+yom1ny
+yo2m1rk
+yo2m12to
+yo2m12z
+yo2m1e
+yo2m1ik
+yo1mi
+yo2mil
+yo2m1is
+yo2m
+yo2m1ol
+yo1mo
+yo2m
+yo2m
+yom1p2
+yo2n1a2d
+yo1na
+yo2nag
+yo2naj
+yon1a2ka
+yo2n1a2l
+yo2n1am
+yo2n1a2n
+yo2nap
+yo2n1a2r
+yo2n1a2s
+yo2n1a2t
+yo2n1a1u
+yo2n1l
+yo1n
+yo2n11t1a2
+yo2n11t
+yo2n1tj
+yon1tk
+yo2n1tr
+yo2n1ts
+yo2n1tv
+yo2n12z
+yon1d2
+yo2n1e2
+yo2n2d
+yo1n
+yo2nh
+yo2nk
+yo2nn
+yon1f2
+yo2nim
+yo1ni
+yo2n1is
+yon1itt
+yo2niz
+yo2n
+yon1k2
+yon3n
+yo2n1ol
+yo1no
+yo2nop
+yo2n1os2z
+yo2n
+yo2n12
+yon1s2
+yont2
+yon1tr
+yo2n1
+y1o2pe
+y1opt
+yo2rad
+yo1ra
+yo2r1a2k
+yo2r1a2p
+y1ord
+y1or1gi
+y1or1r
+yor2sol
+yor1so
+y1or1s
+yors3s
+yo2se
+yos3s
+y1os1to
+y1oszl
+yos2z
+yos3z2s
+y1oszt
+yo2ut
+yo1u
+yo2ve
+yo2xi
+y2g
+y1
+y2r
+ycsa2p12
+y21c1sa
+yc2s
+y2dk
+y1d
+y12dr
+y12dsak
+yd1sa
+y1f2l
+y1g2r
+y2gyi
+yg2y
+y2v
+y1
+yo2k
+y1o
+y2r
+y1
+y1p2r
+y12rac
+y1ra
+y12rad
+y2rag
+y2ra1i
+y12ras
+y12rb
+y1r
+y12rd
+y12r1
+y12rh
+y12r1i
+y12rj
+y12rk
+y12rm
+y12rr
+y12rs
+y12rt
+y12rv
+y12ri
+y2s1aj
+y1sa
+ys1c1sa2
+ysc2s
+y2sr
+y1s
+y2s1ol
+y1so
+y2s1orr
+y2s1ors
+ys3s
+y2s2l
+y1s
+y2s12
+y1bl
+y12b
+y2c2s
+y2dm
+y1d
+y2ka
+y2k
+y2ke2l
+y1ke
+y2k1k
+y1k
+y2ki2d
+y1ki
+y2k
+y2ko
+yk1os
+y2k
+y2kr
+y1k
+y2k1ss
+y2ku
+y2lk
+y1l
+y1lts
+yl1t
+y1ml
+y12n
+yn2gya
+yng2y
+yn2gy
+yn2gy
+yn2gy1l
+y2n1gy
+y1nk
+y1n1t
+y1nz
+y2ra
+y1rd
+y2rit
+y1ri
+y2ro
+y2ru
+y2so
+y1s2s2z
+y1sv
+y1szt
+ys2z
+y1tl
+y12t2d.
+y1t
+y12t1de
+y12t1d
+y1tt
+y1tv
+y2ve
+y2v
+y2vi
+y12v
+y12zn
+y1z
+ya2n
+y1a
+y1bl
+ye2l
+y1e
+ye2r
+y1fr
+y1p2r
+y2ra
+y12re1i
+y1re
+y1rg
+y1rl
+y1rp
+y1rs
+y12rl
+y1r
+y1rz
+y2seg
+y1se
+y1st2r
+ys2z2
+y2s3z2r.
+y1s1z
+y1szt2
+yzks2z1
+y1z
+yz1k
+yprba2jokn
+y1p
+ypr1ba
+yprba1jo
+yprba2jokr
+ypen1n
+y1pe
+ype2te
+yp2la
+yp2le
+yp2l
+yp2lu
+ypon1t2
+y1po
+yp2ra
+yp2re
+yp2r
+yp2ri
+yp2r
+yp2ro
+yp2r
+y2p1r
+yp2ru
+yp2s2z
+yrgs1
+y1r
+yr1g
+yre1a2
+y1re
+yren2d12
+yre1u2
+ysa2van
+y1sa
+ysa1va
+ysg1g
+y1s
+ys2c2h
+ys2g1e2l
+y1s
+ys1ge
+ys2gs
+ys1g
+ys2ho
+ys2ka
+ys2k
+ys2ki
+ys2la
+ys2l
+ys2le
+ys2lu
+ys2mi
+ys2na
+ys2ni
+y2soml
+y1so
+ys2pe
+ys2pi
+ys2po
+yspor2t1olt
+y1s2portol
+yspor1to
+ys2p
+ysp2r
+ys2ra
+ys2r
+ys2r
+ys2sa
+ys2s
+ys2se
+ys2ta
+ys2t
+y1s2ti
+y1s2t
+y1s2to
+y1s2t
+ys2t
+y1st2r
+y1s2tu
+y1s2t
+ys2t
+y2s12vegb
+y1s
+ys1ve
+y2s12veg3g2
+ysza2k12
+ys2z
+y1s1za
+y2sza1l
+y2szld
+y1s1z
+yszraz1
+ysz1ra
+yszz2ezred
+ysz2z1e2
+yszz1e2z
+yszzez1re
+yszzharminc1
+yszz1ha
+yszz3harm
+yszzhar1mi
+yszzhatvan1
+yszzhat1va
+yszzhetven1
+yszz1he
+yszzhet1ve
+yszznegyven1
+yszz1ne
+yszzneg2y
+yszznegy1ve
+ysze2ra
+y1s1ze
+yszeregyez1
+ysze2r1e2g2y
+ysze1re
+yszere1gye
+ysze2r1e2llapr
+y3szerel
+yszere1l
+yszerel1la
+yszer2v1e2kh
+y3szerv
+yszer1ve
+yszerve1k
+yszer2v12
+y1sz2f
+y1sz2k
+y1sz2l
+y1sz2m
+ysz2g1el
+y1s1z
+y3sz1ge
+y1sz2p
+y1sz2t
+y1sz2v
+yta2c
+y1ta
+yt1a1c
+yta2n1
+yta2n12
+yt2l12
+y1t
+y2t1l1l
+y2t1l1l
+yt2raf
+yt1ra
+yt2ran
+yt2rap
+y1t2r
+y1t2re
+y1t2r
+y1t2ri
+y1t2ro
+yt2rn
+yt1r
+yt2r
+y1udv
+yu2g1
+y1ugr
+yu2g2y
+yu2hu
+y1ujj
+yuj2j1a2da
+y1ujjad
+yuj1ja
+yu2kab
+yu1ka
+yu2kar
+yu2k1a1s1z
+yukas2z
+yu2k1c
+yu1k
+yu2kl
+yuk2s
+yuk11s
+yu2k1e
+yu2k1
+yu2k
+yuk1t2
+yu2k
+y1und
+y1u2ni
+y1u2no
+yu2rad
+yu1ra
+yu2ra1i
+yu2rak
+yu2ral
+yu2ram
+yu2ras
+yu2rat
+y1u2r
+y1urn
+y1u2ru
+yu2sl
+yu1s
+yus3s
+yu2s1z
+yus2z
+y1u2s1zo
+yu2tak
+yu1ta
+yu2tal
+yu2tam
+yu2tat
+yu2taz
+yu2tl
+yu1t
+y1utc
+yu2td
+yu1t
+y1u2tu
+y1u2t
+y1bl
+y1br
+y1gr
+y1jd
+y12j
+y12j
+y1jr
+y1js
+y2ke2l
+y1ke
+y2k1e2s
+y2ke2t
+y2kev
+y2k
+y2k2l
+y1k
+y2l1ag
+y1la
+y2laj
+y2lar
+y2l12r
+y1l
+y2lt
+y2l1eg
+y1le
+y2l1e2l
+y2l1e2t
+y2lin
+y1li
+y2l1is
+yl2tag
+yl1ta
+y2l
+y2l
+y1pl
+y1p2r
+y1rb
+y12r2.
+y1r
+y12r12l
+y12rv
+y1r1ho
+y12ri
+y1rk
+y1r1n
+y1rr
+y1r1t
+y1s1ta
+y2s
+y2s3z1ra
+ys2z
+y1s1z
+y1szt
+y1tb
+y2t2.
+y1t
+y1th
+y1ti2
+y2t2i.
+y2ti2g
+y1tj
+y1tk
+y1tm
+y1tn
+y12to2n1
+y1to
+y1tp
+y1t1r
+y1ts
+y1tv
+y2d
+y2g2y
+y1g2y.
+y1gyb
+y11gye
+y11gyi
+y1gyn
+y11gy
+y1gy2.
+y1gy
+y1gy1e
+y2kt
+y1k
+y2l
+y2led
+y1le
+y1ltet1se
+yl1te
+ylte1t
+y1nn
+y2r
+y12r
+y12te
+y12t
+y1tk
+y12t
+y12ve2g.
+y1ve
+y12vegb
+y12vegc
+y12vegek
+yve1ge
+y12veges
+y12veget
+y12veg3g2
+y12vegr
+y12ve1g
+y2vl
+y1v
+y12ze
+y12z
+y1zl
+y1bl
+y2n
+y1
+y2g1
+y1kl
+y1pl
+y1rb
+y12r2.
+y1r
+y2rb
+y2rn
+y2rn
+y1r
+y1rr
+y2s
+y2s1orr2a.
+y1so
+ysor1ra
+ys1s
+y12zb
+y1z
+y12zen
+yz1e2
+y12z1
+y12zh
+y12zk
+y12zn
+y12zr
+y12zt
+y12zv
+y2v1abr
+y1va
+y2v1a2d
+yva2d3z
+yva1i2
+y2v1akc
+y2v1alb
+y2v1alk
+y2v1ank
+y2v1ant
+yv1a2nya
+yvan2y
+y2v1a1po
+y2v1arz
+yva2s1u2
+y2v1atk
+y2v1a1u
+y2v1a1zo
+y2v1br
+y1v
+yv1l1lo
+yv1llv
+yv12ra1i
+yv1ra
+yv12rn
+yv1r
+y2v12r1e2
+y2v1rj
+y2v1rl
+yvrosi2b
+yv1ro
+yvro1si
+yvros1o2s.
+yvro1so
+yvro2s
+yv1r1re
+y2v12ru
+y2v1rv
+y2v11ta2
+y2v11ti
+y2v1tt
+yv1br
+yv1dr
+yv1e2gye
+y1ve
+yveg2y
+yv1egys
+y2v1e2kb
+yve1k
+y2v1e1la
+y2v1e2l
+y2v1ell
+y2v1e1lo
+y2v1el1ti
+y2v1ember
+yvem1be
+yven3n
+y2v1e2p
+yve2r1a
+yve2r12
+yve2reg
+yve1re
+yve2r1e2k1t
+yvere1k
+yve2r1s2z
+yve1r
+yve2rip
+yve1ri
+yve2r1o
+yvert2
+y2v1es1s1z
+yves2s2z
+y2v1e1va
+y2v1e2v
+yv1e2v2.
+yve1v
+y2v1ex
+yvez2rel
+yve1z
+yvez1re
+yv2du
+y1v
+yv11k
+yv12let
+yv1le
+y2v1lm
+y2v1lt
+y2v1p
+y2v1r1d2
+y2v12ri
+y2v1r1r
+y2v1r1t
+y2v12r
+y2v1r1ze
+y2v12v2e.
+yv1ve
+yv1fr
+yv1gr
+y2v1i2gaz1
+y1vi
+yvi1ga
+y2v1i1g
+y2v1i2k
+y2v1il1le
+y2v1im
+y2v1ind
+y2vint
+y2v1i2p
+y2v1ism
+y2v1ist
+y2v1g
+y1v
+y2v1n
+yv12r
+yv2zel
+yv1ze
+yvz1elv
+yv2zis
+yv1zi
+yv2z2
+yv1kl
+yv1kr
+y2v1old
+y1vo
+y2v1olv
+y2v1or
+y2v1os
+yv12r
+y1v
+yv1ss
+y1v
+y2v12z
+yv1r
+y1v
+yv1pr
+yv1sk
+yv1sl
+yv1st
+yv1s2z2
+yv1tr
+y2v1ub
+y1vu
+y2v1ud
+y2v1ur
+y2v1u2t
+yv1j
+y1v
+yv1t
+y2v1g
+y1v
+y2v12z
+yza2t1a2l
+y1za
+yza1ta
+yza2t1e
+yza2t1rd
+yz2atr
+yza1t
+yz2r12ra
+y1z
+y3zrr
+yz1r
+yzs3s
+yze2t1a2
+y1ze
+yze2t1
+yze2t12r.
+yze1t
+yze2t12r2.
+yzet1r
+yze2ts
+yze2t1te
+yze2t1o
+yze2t12l
+yze1t
+yz2k1e2l
+y1z
+yz1ke
+yzb2
+y1z
+yz1bl
+yz1a2
+y1z
+yz2r
+2z.
+1za
+3zab2a.
+za1ba
+za2b1aj
+zab1alt
+z2abal
+zab2b1i2ko
+zab1bi
+za2b1i2ga
+za1bi
+za1b1re
+z2a1b1ri
+z1ab1ro
+2zabs
+za2ce
+za2c1g
+za1c
+za2c1ho
+zac2h
+zac1ikr
+za1ci
+za2c1im
+za2ci1pa
+za2c1iv
+za2c
+zac1k2
+za2dad
+za1da
+2zadag
+zad1alj
+za2dan
+za2da1ta
+2z1a2da1to
+z1a2datr
+zads1s
+za1d
+z2adi2a
+za1di
+za2d1r
+za1d
+za2d1me
+za1d
+za2dz
+z2a1d2r
+za2d1ut
+za1du
+za2d3z
+za2p
+za1
+za1fl
+za1f2r
+za2g1a2d
+za1ga
+za2gak
+za2ga2n
+za2g1an2y
+za2ga1ra
+za2g1a2t
+za2ga1u
+za2gg
+za1g
+za2g1l
+za2g1rn
+za2g1rt
+za2g1z
+za2ge2l
+za1ge
+za2gs
+za1g
+z1ag2g2y
+2za1gi
+za2gin
+z1a2git
+za2g1os2z
+za1go
+zagren2
+zag1re
+za2g1
+z1ag2y.
+zag2y
+z1a2gyak
+za1gya
+z1a2gyar
+z1agyb
+za2i1j
+za1i
+zai2z
+3za2j.
+3zaj2a.
+za1ja
+za2j1a2d
+za2jan
+za2j1tv
+za1j
+3zajv
+za2jes
+za1je
+3zajf
+za2jin
+za1ji
+3zajj
+zajk2rok
+zaj1k
+zajk1ro
+3zajol
+za1jo
+za2j1or
+2zaj1ta
+2zajt2.
+zaj1t
+z1ajtk
+2zajtt
+zaj1tr
+3za1j
+za2j12
+2zakad
+za1ka
+za2k1a2da2t.
+zaka1da
+zakai2ko
+zaka1i
+za2k1a1ka
+zak1alk
+z2akal
+za2k1alv
+za2ka1na
+z2akan
+za2k1ant
+za2ka1ra
+z1akarat
+z1a2ka1r
+za2k1atl
+za2k12p
+za1k
+za2k11t1a
+za2k1tl
+2zakc
+z1akci1
+zak1ci
+za2k1e2g
+za1ke
+za2k1e1le
+za2kelm
+za2k1e1l
+za2ket
+za2k12l
+za1k
+za2k1int
+z2akin
+za1ki
+za2k1i2p
+zak1i1ro
+z2akir
+za2k1r
+za1k
+zak1k2
+za1k1lu
+2z1aknk
+zak1n
+zak1oszt
+z2akos
+za1ko
+zakos2z
+za2k1o2v
+za2ks
+za1k
+za1k2rit
+zak1ri
+z2a1k1r
+2zak1t
+2zak1ti
+z1aktv
+zak1t
+2zak1t
+zaku1p2
+za1ku
+zaku2r
+zak1u1ra
+za2k1u1r
+za1k2
+za1k1v
+zal1a1c
+za1la
+zala2g
+zalag1g
+2z1a2la1k
+za2lakj
+z1a2la1ku
+zala2n
+zal1ant
+za2l1an2y
+z1a2lapb
+za2lapj
+zal1tk
+za1l
+zale2l
+za1le
+za1l1e1le
+zal1ell
+zal1e1l
+z2a2l1e2m
+za2ler
+z1al1g
+z1al1ge
+za2lid
+za1li
+z1alkal
+zal1ka
+z1alkat
+z1alkot
+zal1ko
+2zalms
+zal1m
+za2ll
+za1l
+zalta2n
+zal1ta
+zal2tel
+zal1te
+zal2tem
+z1al1ti
+z2a2m1a2d
+za1ma
+z2a2m1aj
+zam1a1la
+z2a2m1a2p
+zama2t12
+za2maz
+2z1am1bu
+za2mem
+za1me
+zam1ing
+za1mi
+za2m1is
+za2m
+za2m1os2z
+z2amos
+za1mo
+za2m
+z1a2nal
+za1na
+z1a2nek
+za1ne
+2zang
+z1ang2y
+2z1ankt
+zan1k
+zan2tes
+zan1te
+za2ny2a.
+zan2y
+za1nya
+z1a2nyag
+z1a2ny
+zao2k
+za1o
+zao2s
+za2h
+za1
+za2v
+z1a2p2a.
+za1pa
+za2pad
+za2p1a2g
+z1a2pa1i
+za2p1g
+za1p
+z1a2pn
+za2p11ra
+z1a2pt
+z1a2pv
+zape2l
+za1pe
+zap1e1le
+za2pe2m
+za2pe2s
+za2p
+za1p2ln
+zap1l
+z1a2p2.
+za1p
+z1a2p1
+z1a2pk
+2zap1p2
+zappa2ne
+zap1pa
+zap3rof
+z2ap1ro
+zap1s2
+za2r1a2d
+z2arad
+za1ra
+za2ran
+zar1a2nya
+zaran2y
+za2r1a2p
+za2rar
+zar1a2to
+z2a2r12c
+za1r
+z1a2r1i
+za2r1l
+z1a2rn2y
+z1a2rr
+2zarc
+z1ar2c.
+z1ar1ca
+z1ar1c
+z1arc2h
+z1ar1ci
+z1arck
+z1ar1co
+z1ar1c
+za2rel
+za1re
+zare2t
+za2r1e1te
+za2rev
+za2r1na
+za1r
+za2r1n
+2zarm
+za2r1n
+za1r
+za2r1
+zar2vg
+zar1v
+2zarz
+za2sem
+za1se
+z2a1s2k
+za1s2ko
+za1s2li
+za1s2p
+za1sp2r
+z2a2t1ab
+za1ta
+za2t1a2d
+za2t1aj
+zat1alap
+zata1la
+zat1alj
+zat1a1na
+z2atan
+za2t1a2n2y
+zat1a1r
+z2atar
+zat1att
+za2ta1u
+za2taz
+za2t1ll
+z2atl
+za1t
+zat11lo
+zat2p
+zat11po
+za2t1rad
+z2atr
+zat1ra
+za2t11r
+za2t12ru
+za2t1e1l
+za1te
+zat1elk
+za2t1emb
+za2t1e2r
+za2t1er1k2
+z2a2t12g
+za1t
+z2a2tl
+zat1i2ko
+za1ti
+za2tim
+za2t1ind
+z2atin
+za2t1ing
+za2tins
+za2t1int
+za2t1ist
+z2atis
+za2tiz
+za2t1v
+za1t
+zat1k2
+2z1atk2a.
+zat1ka
+z1atlas
+zat1la
+za2t1okos
+za1to
+zato1ko
+zat1ol1da
+2z1a2tomj
+za2t1oml
+za2t1os2z
+za2tk
+za1t
+za2t1n
+zatt2
+zat1tr
+za2tu1ra
+z2atur
+za1tu
+za2tl
+za1t
+za2tr
+2zat2y
+za2tya
+za2ty
+z1a2ul
+za1u
+zau2tak
+zau1ta
+z1a2u1to
+z1a2u1t
+za2t
+za1
+za2z
+za3va1r
+za1va
+3zavarb
+2zavat
+z1a2z.
+z1azh
+z1a2zo
+1z
+2z1br
+zciks2z1
+z1ci
+zci1
+zci2ks
+zci1k
+z2de
+z2g1a2d
+z1ga
+z2ga2k.
+z2ga1ko
+z2g1al
+z12gas
+z12gat
+z2gaz
+zg1a1zo
+z2g1l
+z1g
+z2g12rak
+zg1ra
+z2g11ru
+z2g1e
+z2gp
+z1g
+z2gol1ta
+z1go
+z12g1i
+z1g
+z2g12t.
+z1g
+z2g
+z1g2y.
+zg2y
+z12gya
+zgy1a2da
+z1gyb
+z1gyh
+z1gyn
+z1gyr
+z12gyu
+z2r
+z1
+z2j1k
+z1j
+z2j
+z2j1ol
+z1jo
+z2j1s
+z1j
+z2j
+z2j
+z2j
+z2kin
+z1ki
+z2k12v
+z1k
+zla2n
+z1la
+z2l1an2y
+zl1apr
+z1lar
+zl1as2s2z
+z1l1ca
+z1l1c
+z1l1d
+z2l1e2g
+z1le
+z2l1e2l
+z2l1em
+z2lib
+z1li
+z2li2d
+zl1ing
+z2lir
+z1llam
+zl1la
+z1llap
+zlltks2z1
+zl1l
+zll1t
+zllt2ks
+zllt1k
+z1l1ma
+z1l1m
+z1l1mo
+z2lob
+z1lo
+zlo2d
+z2l1o1da
+z2los
+z2l
+z2ly1a2l
+zl2y
+z1lya
+z2mac
+z1ma
+z2m1a2d
+z2m1aj
+z2m1a2l
+zm1an2y
+z2m1a2p
+zma2r
+zm1a1r
+z2maz
+z2m1tl
+z1m
+z2m12to
+z2ml
+z1m
+z2m12r
+z2m1ik
+z1mi
+z2mip
+z2mir
+zm1orm
+z1mo
+zm1or1s2
+z2m
+z2m
+z2m
+z2m1ut
+z1mu
+z2m
+z2m
+z2naj
+z1na
+z2n1as
+z2n1at
+z2n1t
+z1n
+z2nem
+z1ne
+z2n1p
+z1n
+z2nis
+z1ni
+z2n1it
+zn3n
+z2n1os2z
+z1no
+zn1sp
+z2n
+zn2y2
+z2p1ad
+z1pa
+z2p1ag
+z2p1or1z
+z1po
+z1p2r
+zr1a2daton
+z2rada1to
+z1ra
+zra1da
+zr1a2dsokk
+zra1d
+zrad1so
+zr1a2dsok1n
+zr1a2dsokr
+z12radd
+3zra1d
+z2r1a2dot
+zra1do
+z2r1a2l
+z12ramk
+z12raml
+zra2n
+z2r1an2y
+z2r1ap
+z2rar
+z2r1a1ti
+z2r1a2to
+z2r1att
+z2r1av
+z2r1l
+z1r
+3zr2s.
+3zr1sa
+3zrsb
+3zr1si
+3zrs1s
+3zrst2
+z2r12s2z
+3zr1d
+zr2dem
+zr1de
+zr2d3z
+2z2r1em
+z1re
+z2rb
+z1r
+2zrf
+2z12ri1
+z1ri
+z2rid
+z2r1i2k
+z2rim
+z2r1is
+z2r1iz
+zr1k2
+3zrkk
+zr1k
+2zr1k
+3zrlat
+zr1la
+2zr1n
+2zrn2y
+zr2nyl
+zr1ny
+z2r1os2z
+z1ro
+3zr2.
+z1r
+3zr1a
+3zrb
+z2r11bo
+3zrc
+3zrd
+3zr1
+zr1v
+3zrh
+3zr1i
+3zrj
+3zrk
+3zrn
+3zrr
+z2r12r
+3zrt
+3zrv
+z2r
+2zr1r
+zrs2
+zr1sk
+zrt1a1ny
+zr1ta
+zrtan2y
+zr2t1e2s
+zr1te
+zrt2r
+zr1t
+zr1t1ro
+z2rug
+z1ru
+z12ruh
+z12ruj
+2zrunkn
+2zrunkr
+z2r
+z1rvah
+zr1va
+z2s1a2d
+z1sa
+z2saj
+z2sal
+z2s1a2r
+z2s1at
+z2saz
+z2s12g
+z1s
+z2s12rad
+zs1ra
+z2s12r
+z2s12r
+z2s1rh
+z2s1rn
+z2s1rt2
+z12ss
+z2sep
+z1se
+zs1ikon
+z1si
+zsi1ko
+z2sis
+z2s1
+z2s1ol
+z1so
+z12s2.
+z1s
+z2s12r
+z12sv
+z2su2t
+z1su
+z2s
+z2s3zav
+zs2z
+z1s1za
+3zszl
+zs1z3se
+zsz2s
+z12tad
+z1ta
+zt1a2d2.
+z2ta1d
+zt1a2dk
+zt2r
+z1t
+2ztb
+2z1tc
+z1td
+zt1e2m
+z1te
+z2t12l
+z1t
+2z1tf
+2zth
+z1t1ha
+z1t1he
+z1t2hi
+z12t1i2
+2z1tj
+2z1tm
+z1t1ra
+z1t1ro
+2zts
+2z1tv
+z2z1a1la
+z1za
+zza2t
+z2z1a1to
+z2z1e2
+z2zv
+z1z
+z2z1ol
+z1zo
+z2zos
+z1z2
+z2zr
+z2z
+z2zsaj
+zz2s
+z1z1sa
+z2zsas
+z1z4s
+z2zsl
+z2zsol
+z1z1so
+zba2ki
+z1ba
+zbe12
+z1be
+zbe1e2
+zb2le
+zb2lo
+zb2l
+zb2ri
+zb2r
+zb2r
+zc2lu
+zcsa2p12g
+zc2s
+z1c1sa
+zcsa1p
+zda1p2
+z1da
+zdas2
+z2d1ass
+zd1ll
+z1d
+zds1s
+z1d
+zd1s2p
+z1d
+zd2ri
+1ze
+zea2g
+ze1a
+zea2k
+zea2l
+zea2s
+1zen2s1ze
+ze1
+zens2z
+ze2r
+ze2z
+2z1e2b.
+2ze1be
+ze2b2e.
+ze2be1i
+ze2bek
+z1e2bd
+ze1b
+z1ebf
+z1ebh
+z1ebk
+2z1ebn
+ze1b1ru
+2ze1ce
+z1e2cet
+z1e2c2h
+z1e2cset
+zec2s
+ze1c1se
+ze2d12l.
+ze1d
+ze2d1lj
+ze2d1ln
+ze2d1lt
+ze2d1lv
+zede2r1e
+ze1de
+ze2dil
+ze1di
+ze2d12
+2z1e2d2z
+zee2s
+ze1e
+z1eff
+ze1fr
+ze2g1a2l
+ze1ga
+ze2gar
+ze2g1l
+ze1g
+ze2g1r
+ze2g1eg
+ze1ge
+zeg1ell
+ze2gep
+zeget2t1eb
+zeget1te
+ze2g1rr
+ze1g
+ze2g2s2z
+zeg1szb
+zeg11s1z
+2z1egszs2g.
+zegs1z3s
+zegsz2s
+zegsz3sg
+zeg1szsgb
+zeg1szsgen
+zegszs1ge
+2z1egszsget
+2z1e1gszs1g
+2z1egszsg3g
+2z1egszsgh
+2z1egszs1gi
+2z1egszsgn
+2z1egszsgr
+2z1egszsgt
+2z1egsz3s1g
+ze2gid
+ze1gi
+ze2gil
+ze2gol
+ze1go
+ze2g
+ze2gyed
+zeg2y
+ze1gye
+ze2gy1e2l
+ze2gye1ne
+ze2gyez
+z1egyl
+z1egys
+ze2het
+ze1he
+zei2g
+ze1i
+zei2s
+ze2r
+ze1
+zekci21s2z2
+zek1ci
+zekci1
+zek1e2g2y
+ze1ke
+ze2k1ell
+z1e2kit
+ze1k
+zek1i
+2zekk
+ze2kil
+ze1ki
+ze1k2lap
+zek1la
+ze2k1ott
+ze1ko
+zek1vek
+ze1k
+zek1ve
+ze2k
+ze1k2re1
+zek1re
+zek1t2
+ze2k12l
+ze1k
+z1ekviv
+zek1vi
+ze2lag
+ze1la
+ze2la2r
+2z1el1bo
+2z1e2ledel
+ze1le
+zele1de
+z1e2le1f
+ze2le1ji
+2zelekt
+z1e2lem2e.
+zele1me
+z1e2lemek
+zelem1el
+zele2m12r.
+zele1m
+ze2le1m
+zele2p
+zele2p1el
+zele1pe
+zele2po
+zele2p12l
+zele1p
+z1e2l1e2re
+zele2t
+zele2ter
+zele1te
+2z1e2lg
+ze1l
+2z1el1r
+zel1rh
+zels1s
+2z1el1h
+2z1elhel
+zel1he
+2z1elher
+ze2litet
+ze1li
+zeli1te
+z1el1k
+2z1ellt1so
+zel1l
+zell1t
+2z1ellt2s12
+2z1ell1to
+2zellen
+zel1le
+z1elle1ne
+2z1elnev
+zel1ne
+z1el1n
+2z1e2l1os
+ze1lo
+z1e2l2l
+ze1l
+2z1e2l1n
+zele2l
+ze1l
+zel1e
+2z1e2l1ha
+zeli2r
+zel1i
+zel2saj
+zel1sa
+ze2l1z
+z1el1s
+2z1el1t
+2z1eltetted
+zel1te
+zeltet1te
+2z1eltr
+zel1t
+2z1el1to
+2z1el1t
+z1e2lu
+2z1e2l
+z1el2v.
+z1elvek
+zel1ve
+z1elves
+2z1elvev
+2z1elveze1t
+1zelve1ze
+2z1elvezet2.
+zelveze1t
+2z1elvezet1
+2z1elvezetb
+2z1elvezet1i
+2z1elvezetj
+2z1elvezetk
+2z1elvezetr
+2z1elvezets
+2z1elvezett
+z1elvn
+z1elvt
+2z1el1v
+2z1el1z
+2ze1ma
+ze2mak
+ze2m1g
+ze1m
+ze2m12r
+ze2mt
+z1embe2r.
+zem1be
+z1emberb
+zembe2r1e2kn
+zembe1re
+zembere1k
+zembe2r1e2kt
+z1embe1r
+z1emberh
+z1emberk
+z1embern
+z1emberr
+z1embert2
+z1embl
+2zem2e.
+ze1me
+ze2m1e1g
+2zeme1i
+2zemek
+ze2m1ell
+ze2m1eng
+2zemb
+ze1m
+2zemh
+ze2m12k
+ze2m11le
+ze2m12l
+ze2m12l
+ze2m1lt
+ze2m1lv
+ze2m12rt
+zem1r
+2zems
+zem2te
+ze2m1ten
+ze2m1tet
+ze2m1t1j
+2zemv
+ze2m1ing
+ze1mi
+ze2m1int
+ze2mis
+ze2m1iz
+ze2m1
+2zemk
+2zeml
+2zem1m
+ze2mol
+ze1mo
+ze2m1os2z
+ze2m12
+ze2m1
+2zems
+z1emul
+ze1mu
+ze2m1ur
+ze2m
+2ze1m
+2zemv
+zemvz1
+zem1v
+3zeneir
+ze1ne
+zene1i
+3zene1ka
+zenes2z2
+z2enes
+3zen1
+ze1n
+3zen1i
+3zen1je
+ze2np
+ze2n1o
+zen2tag
+zen1ta
+zen2tal
+zen2t1an
+zen2t1as
+zente2g
+zen1te
+zen2t1eg2y
+zen2telm
+zen2tev
+zen2t12j
+zen1t
+zen2ti2p
+zen1ti
+zen2tis
+zen2t
+zen2tol
+zen1to
+zen2t12
+zen2t1
+zent2s
+zen1t
+zen2t11se
+2zenz
+zeo2k
+ze1o
+zeo2m
+ze2r
+ze1
+2z1e2pb
+ze1p
+zep1
+2z1e2p1i
+2z1e2pn
+2z1e2pit
+zep1i
+2z1e2pj
+2z1e2pm
+2z1e2ps
+z1e2piz
+ze1pi
+ze1p1la
+ze1p1le
+2zepr
+ze1p2ri
+ze1p1r
+ze2r1a2d
+ze1ra
+ze2ra1j
+ze2r1ajt
+ze2r1al
+ze2ram
+ze2r1a2n
+ze2r1a2r
+ze2r1as
+ze2r1a2t
+ze2r1a1u
+ze2raz
+ze2r11ga
+ze1r
+ze2r12r
+ze2rs
+ze2r12t
+zer2bin
+zer1bi
+zer1d2
+z1er1d
+ze2r1eb
+ze1re
+ze2r1e2ce
+ze2re1d
+ze2re1ge
+zer1e2g2e.
+ze2r1e2g
+ze2r1egg
+ze2r1e2g2y
+2z1e2re1je
+2z1e2rejb
+zere1j
+2z1e2rej1
+2z1e2rejh
+2z1e2rejn
+2z1e2rejr
+2z1e2rej1t
+2z1e2rejv
+2z1e2rej2k.
+zere1j
+2z1e2rejkb
+2z1e2rej1ke
+2z1e2rejkk
+2z1e2rejkn
+2z1e2rejkr
+2z1e2re1j
+ze2r1e2k2e.
+zere1ke
+z1e2rekl
+ze2reldj
+zere1l
+ze2r1ember
+zerem1be
+ze2re1mi
+ze2r1eng
+zere2p1a
+ze2r1e2r
+ze2r1e2ss
+zere1s
+ze2r1es2s2z
+ze2r1es1te
+ze2r1e2sz2e.
+zeres2z
+1zere1s1ze
+zer1e2szek
+zer1eszk
+ze2reszt
+ze2r1e2u
+ze2r1e2v
+ze2rg
+ze1r
+ze2r12j
+ze2r1k
+ze2r12l
+ze2r1p
+zer1g2
+ze2r1i2d
+ze1ri
+ze2r1i2ga
+ze2r1i1ko
+ze2r1ill
+ze2r1i2m
+ze2r1i1na
+ze2rind
+ze2r1inf
+ze2r1ing
+ze2r1inj
+ze2r1ink
+ze2r1intel
+zerint2
+zerin1te
+ze2r1in1t
+zer1in1t
+ze2ri1o
+ze2r1ism
+ze2riz
+ze2r12j
+ze1r
+zer1k2
+zer2nal
+zer1na
+z1er1ny
+zern2y
+ze2r1ok1t2
+ze1ro
+ze2r1old
+ze2rolv
+ze2ror
+ze2r1ost
+ze2r1os2z
+ze2ro1ti
+ze2r12r
+ze1r
+ze2r2k
+ze1r
+2ze2r
+z1er2.
+z1erf
+z1er1i
+z1erk
+z1erl
+z1ern
+z1ers
+z1ert
+z1erv
+zer1z
+zer1p2
+zer1s
+zers2k
+zers2p
+zers2t
+zert12lom
+zer1t
+zert1lo
+zer2tit
+zer1ti
+zer2tr
+zer1t
+zer1t1ra
+zer1tren
+zert1re
+ze2r1un
+ze1ru
+ze2rur
+ze2rus
+ze2r1u2t
+ze2r1t
+ze1r
+ze2r12g
+ze1r
+2ze1r
+zer2v1a2d
+zer1va
+zer2va2n
+zer2vel
+zer1ve
+zervez2r
+zerve1z
+zer2vl
+zer1v
+2z1e2sedk
+ze1se
+zese1d
+ze2s1e2kh
+zese1k
+z1e2setb
+z1e2set2e.
+zese1te
+z1e2sete1k
+z1esetes
+z1e2setet
+z1e2se1t
+z1e2se1ti
+z1e2setr
+2z1e2s2s.
+ze1s
+2z1e2ssb
+2z1essd
+2z1e2ss2e.
+zes1se
+2z1e2sse1i
+2z1e2ssek
+2z1e2ssem
+2z1e2sse2n
+2z1e2sses
+2z1e2s1s
+2z1e2ssh
+2z1e2s1si
+2z1e2ssk
+2z1e2ssn
+2z1e2ssr
+2z1e2ss3s
+2z1e2sst
+ze1s2mi
+2z1e2s
+zesp2
+ze1s1pa
+ze1s2pe
+ze1spr
+2zes1te
+z1estek
+z1estem
+2z1es1t
+z1est2i.
+zes1ti
+ze1s2til
+2z1estj
+ze1s1to
+z1est1re
+z1estt
+ze2s12v
+ze1s
+ze2szg
+zes2z
+ze1s1z
+zesz1e2get
+1ze1s1ze
+zesze1ge
+ze2szel1le
+ze2szeng
+ze2szh
+ze1s1z
+ze2sz12le
+ze2sz1im
+ze1s1zi
+ze2szip
+2zeszk
+z1esz1k
+ze2szol
+ze1s1zo
+zeszt2
+zesz1tr
+ze2t1ab
+ze1ta
+ze2ta2c
+ze2t1a2la
+ze2t1a2n2y
+ze2tj
+ze1t
+ze2t12l
+ze2t12p
+ze2t1t
+zet1e1g
+ze1te
+zet1e1l
+ze2t1ell
+ze2telm
+ze2t1e2l1
+zete1l
+ze2t1e2ld
+ze2t1elr
+zet1e2mel
+zete1me
+ze2t1eml
+ze2te1ne
+zet1er1k2
+zet1e2r
+zete2s1g
+zete1s
+zetest2
+zetes1tr
+z1e2te1t
+ze2t1e1ti
+ze2tetn
+ze2t1d
+ze1t
+ze2t12j
+ze2t12l
+ze2tr1te
+ze2t1r1t
+zet1r1t
+ze2t12r
+zet2s2z
+1zet11s1ze
+zet1ter
+zet1te
+ze2ti2d
+ze1ti
+z1e2ti1ka
+ze2t1i2ko
+ze2t1ill
+ze2t1ing
+ze2tt
+ze1t
+1zetk1s1z1e
+zet1k
+zetks2z
+ze2tom
+ze1to
+zet1ont2
+ze2top
+ze2t12r
+ze1t
+ze2t12v
+ze1t
+zet11ri
+ze1t
+zet11r
+zet1rt
+ze2tut
+ze1tu
+ze2tr
+ze1t
+ze2t12z
+ze2t2y
+zeu2g
+ze1u
+z1e2ur
+ze2t
+ze1
+z1e2v
+ze2x1id
+ze1xi
+ze2xim
+ze2x1i2p
+z1ex1pe
+zex2t1
+ze2x
+z1e2zer
+ze1ze
+2zezres
+zez1re
+2zez1r
+2z1ez1r
+1z
+z12ber
+z1be
+2z1br
+z2dak
+z1da
+z2d1a2l
+z2d1a2r
+z2d1as
+z2dat
+z2d12
+z2d1ekt
+z1de
+zde1k
+z2d1e2lem
+zde1le
+z2delm
+z2d1esem
+zde1se
+z2d1es2z
+z2d1e1ti
+z2d1s
+z1d
+z2dik
+z1di
+z2d
+z2d1
+zdren2
+zd1re
+z1du2
+z2dur
+z2d
+z2d3z
+z2f
+z12g.
+z1gb
+z12ge
+z2g
+z12gi
+z1gn
+z12g
+z1gr
+z1gt
+z12h2e.
+z1he
+z12hen
+2z12hes
+z12het
+2z1hs
+2zid
+z1i
+z12j.
+z2jen
+z1je
+z12ji
+zjje2l1e2
+zj1je
+z1js
+2z12jl
+z1j
+2z12jn
+z2k1a2d
+z1ka
+z2k1a2l
+z2k1a2n
+z2k1ap
+z2k1as
+z2ks
+z1k
+z2k1eg
+z1ke
+z2k1e2kt
+zke1k
+z2k1elet
+zke1le
+z2k1elr
+z2ker
+z12kez
+z2k12k
+z1k
+z2k12l
+z22k1s
+zk1old
+z1ko
+zk1os2z
+z2k12
+z2kr
+z1k
+z2kr
+z1k
+zk2l
+z1k
+z2k11l
+z2k11l
+z1la2
+z2lab
+z2lad
+z2lak
+z2l1an
+z2las
+z2l12
+2z2le2l
+z1le
+z1l1e1le
+zl1ell
+zl1e1l
+zl1elt
+z2l1e2r
+2zle2t.
+2z12letb
+2z12let2e.
+zle1te
+2z12leten
+2z12le1t
+z2letf
+2z12leth
+2z12le1ti
+2z12letn
+2z12letp
+2z12letr
+2z12lets
+2z12let1t
+2z12le1t
+2z12le1t
+2z1l
+z2l1kh
+z2li2m
+z1li
+z2l1ist
+z2l
+2zlm
+zlmeg1
+zl1me
+z2l1o
+z2l
+z2l12
+2zls
+z1l
+2zlt
+z2l1u2
+z2l
+z2lya
+zl2y
+z2ly
+z2ly1esh
+z1lye
+z2lyo
+2z1me
+z2n1apr
+z1na
+z2n1rn
+z1n
+zndi1o2
+zn1di
+z2neg
+z1ne
+2z12nekb
+2z12ne1ke
+z12ne1k
+z2nek1k2
+2z12nekl
+z12nekn
+z2nekr
+z2ne1k
+z2n1e2l
+z2n1e2r
+z1ni2
+z2nik
+z2nil
+z2nim
+z2n1i1o
+z2n1is
+z2n
+z2nom
+z1no
+z2n
+z2n
+znt2
+z2n12l
+z1n
+z2p1a2g
+z1pa
+z2p1a2l
+z2p1a2n2y
+z2p1a2p
+z2p1a2r
+z2pas
+z2pat
+z2pa1u
+z2pav
+z2p12r
+z1p
+z2pt
+z2peg
+z1pe
+zp1ell
+z2pel
+z2p1er
+z2pez
+zp1f2
+z2pin
+z1pi
+z2p1i2p
+z2pir
+z2p1i2s
+2zpt
+z1p
+z1po2
+z2pol
+z2pos
+z2p
+z2p
+zp1s
+zp1t2
+z2pud
+z1pu
+z2p1u2s
+z2p
+2zpl
+z1p
+z2rab
+z1ra
+z2rag
+z2r1a2l
+z12ram
+z2r1a2n
+z2rap
+z2rar
+z2r1as
+z2rat
+z2rav
+z2r12
+zr1d2
+z2r1e2le1m
+z1re
+zre1le
+z2r1e2lemk
+z2r1e2lemn
+z2remb
+z2r1eml
+z2r1es2z
+2zrett
+z2rev
+z2r2s.
+z1r
+z2rsb
+z2r1se
+z2r1si
+z2rsk
+z2rsn
+z2r1id
+z1ri
+z2rim
+z2ris
+z2r1o2k
+z1ro
+z2r1os
+3zrs
+z1r
+z2r
+2z12r2.
+z1r
+z12r1i
+z12rk
+z2rs
+z12rt
+zr1s
+zr2taj
+zr1ta
+2z1rtekez
+zr1te
+zrte1ke
+2z1rtelm
+2z1rtetl
+2z1rte1t
+2z1rt2k.
+zr1t
+2z1rtkb
+2z1rtke1i
+zrt1ke
+2z1rt1ke1ke
+2z1rtkel
+2z1rtkh
+2z1rtkr
+2z1rtkt
+2z1rt1k
+2z1rt1k
+2z1rts
+2z1rthet2.
+zrt1he
+zrthe1t
+2z1rthetbb
+2z1rthet1e
+2z1rthetk
+2z1rthetn
+2z1rthetr
+2z1rthets
+2z1rthett
+2z1rthetv
+z1r1to
+z2r
+z2sab
+z1sa
+z2san
+z2sar
+z2s1az
+z2s12
+z2seg
+z1se
+z2s1e2l
+z2s1e2r
+z2s1e1ti
+z2s1g
+z1s
+z2ss
+z2s1i2k
+z1si
+z2sok
+z1so
+z2s
+zs3s
+z2s12t
+z1s
+z2s3za
+zs2z
+z1szb
+1z12s1z
+z1szl
+z2s1z
+zs3z2s
+z2t1a2b
+z1ta
+z2t1ad
+z2tag
+z2t1aj
+z2t1a2k
+z2t1a2l
+z2t1ap
+z2t1a2s
+z2t1a1u
+z2t12
+zte2n
+z1te
+zte2se
+zte2s
+z2t2g
+z1t
+z2t12n
+z2t1i2
+2ztk
+z2t1o2l
+z1to
+z2t1o2m
+z2tor
+z2t1o2s
+z2tu2n
+z1tu
+z2t
+z2t12
+z2t1
+2ztv
+2z12v.
+2z12vad
+z1va
+z1vb
+2z12v2e.
+z1ve
+2z12vek
+2z12ven
+2z12ves
+z12vn
+z1v
+z12vt
+z12vv
+z1vf
+2z1vi
+z12v2i.
+z1vk
+2z1vn
+z1vr
+z1vs
+z1vt
+z12v
+2z1vv
+zfa2l1a2da
+z1fa
+zfa1la
+zfa2l1aj
+zfa2l1e2l
+zfa1le
+zf2a2les
+zfe2l1em
+z1fe
+zfe1le
+zfe2len
+zfe2re2g
+zfe1re
+z2f1ra
+z1f
+zf2la
+zf2le
+z1f2li
+z1f2lo
+z1f2l
+zfo1ra2
+z1fo
+zfo2rat
+zfo2riz
+zfo1ri
+zfldi12
+z1f
+zfl1di
+zf2ra
+zf2r
+zf2re
+zf2ri
+zf2r
+zf2ro
+zf2r
+z3g2a2z1e
+z1ga
+zgs3s
+z1g
+zg2s3z
+zg2z
+zg2p1e2kt
+z1g
+zg1pe
+zgpe1k
+zg2sa
+zg2s
+zg2sem
+zg1se
+zgs3s
+zg2la
+zg2l
+zg1g2
+z1g
+zg2ny2
+z1g
+zgn2y
+zg2z12
+zg2zr
+zg1z
+zg2z1
+zg2ra
+zg2r
+zg2r
+zg2ru
+zhn2
+z1h
+zh2t1a2d
+zh1ta
+zhzkz1
+zhz1k
+zhelyigaz1
+z1he
+zhel2y
+zhe1lyi
+zhelyi2g
+zhe2ly1i2ga
+1zi
+zi2a1a
+zi1a
+zi2a1
+zi2a1bo
+zi2ac
+zi2ad
+zi2a1e
+zi2a1
+zi2ag
+zi2ah
+zi2a1
+zi2aj
+zi2akp
+zia1k
+zi2a1k
+zi2al
+zi2am
+zi2a1o
+zi2a1
+zi2a1p2
+zi2ar
+zi2a1s1za
+zias2z
+zi2a1s1zo
+zi2a1s1z
+zi2at
+zi2a1u2
+zi2a1
+zi2a1
+zi2av
+2z1ibr
+2zicc
+zi1c2h
+z1i2de1
+zi1de
+z1i2deg
+z1i2de1o
+zi2dn
+zi1d
+2z1i2d
+zie2l
+zi1e
+zie2m
+zi21a
+zi1
+zi21
+zi21ke
+zi2p
+zi21ta
+zi21t
+zi21
+z1ifj
+z2i2g.
+zi2g2a.
+zi1ga
+2z1i2gazg
+2z1i2ga1zo
+z1i2gs
+zi1g
+zi2gj
+zi1g
+2z1i2gn
+zi1g2r
+2zi1gye
+zig2y
+zi2k1a2n
+zi1ka
+zik1kek
+zi1k
+zik1ke
+zi2kik
+zi1ki
+zi2kim
+zi2k1ing
+zi1k1lu
+zi2k1u2r
+zi1ku
+zikus1s
+zi2lal
+zi1la
+zi2l1c
+zi1l
+zi2l12g
+zi2ler
+zi1le
+zi2l12j
+zi1l
+zi2l1k
+zi2l1ing
+zi1li
+zi2l1
+z1i2m2a.
+zi1ma
+zi2mak
+zi2mb
+zi1m
+zi2mj
+zi2mk
+zim1ll
+zi2mr
+zi2mt
+zi2mz
+zim1b2
+zi2m1e2g
+zi1me
+zi2m1e2l
+zi2m12r
+zi1m
+zi2m1r1t
+zim1ind
+zi1mi
+zi2m1ip
+z1i2mit
+zi2m
+zim1pr
+zi2n1a2d
+zi1na
+zi2n1a2l
+zi2n1a2n
+zi2n1a2r
+2z1i2nas
+zi2n1a1u
+zi2n1i
+zi1n
+zi2n1ll
+z1in1du
+zin1emb
+zi1ne
+zi2ng
+zi1n
+zin2gas
+zin1ga
+zin2gl
+zin1g
+zi2n1i2m
+zi1ni
+zi2n1in
+zi2n
+zin3n
+zi2nol
+zi1no
+zin1s2
+zin2t1a2d2
+zin1ta
+zin2t1a2l
+zin2t1a2s
+zin2tt
+zin1t
+zin2t12z
+zinte2l
+zin1te
+zin2t1e1le
+zin2te1l
+zin2telt
+z1interj
+z1interp
+z1interv
+zin2tom
+zin1to
+zin2t1n
+zin1t
+zi2n1u2t
+zi1nu
+zi2n
+zi2ol
+zi1o
+2z1i2o1no
+zi2ot
+zi21a
+zi1
+zi21
+zi2c
+zi21e
+zi2g
+zi21
+zi2kam
+zi1ka
+zi2kap
+zi21k
+zi21ke
+zi21kl
+zi2l
+zi21m
+zi21m
+zi21n
+zi2n2y
+zi21o
+zi21p2
+zi21r
+zi21s
+zi21se
+zi21s
+zi21s2k
+zi2sor
+zi1so
+zi21s2p
+zi2s1t
+zi21s1z
+zi1s2z2
+zi21ta
+zi21t
+zi21
+zi21
+zi21
+zi2pa1i
+zi1pa
+zi2pa1ri
+zi2pj
+zi1p
+zi1p2l
+zi1p2r
+z1i2rat
+zi1ra
+2zi1r
+z1i2rn
+z2i3re
+2zi1ro
+z1i2rod
+zi2rn
+zi1r
+z2i3r
+2zirt
+zir2t1a2
+z1ir1t
+zir2to
+z1ir1t
+zi2sad
+zi1sa
+zi2sal
+zi2sam
+zi2sar
+zi2s1a2s
+zi2sl
+zi1s
+zi2s11ro
+zi2s1e2g
+zi1se
+zi2s1e2l
+zi2s1e2r
+zise2s
+zi2s1e1se
+zi2s1es2z
+zi2s1k
+zi1s
+zis11vi
+zi2s1i2ke1r
+zi1si
+zisi1ke
+zi2s1i2kern
+zi2s1i2kerr
+zi2s1il
+zi2sin
+zi2s1i2r
+zi2s1is
+zi2sit
+zismer2t1ebbel
+zis1me
+zismer1te
+zismerteb1be
+zi2s1o2v
+zi1so
+zi2s12
+zi2s
+zi2s
+ziss2
+zis3s1za
+zis2s2z
+zis3s1z
+zis3s1zo
+zist2
+zis1t1ra
+zi2su2t
+zi1su
+zi2s12v
+zi1s
+zi2s3zaj
+zis2z
+zi1s1za
+zis3zav
+zis3zn
+zi1s1z
+zi2t1ll
+zi1t
+zit11ru
+zi2t1e2g
+zi1te
+zi2t1elr
+zit1eng
+zi2tt
+zi1t
+zi2til
+zi1ti
+zi2tin
+zi2tip
+zi2tir
+zi2t1or
+zi1to
+zi1t2
+zi2tr
+zi2t1t
+zi1t
+zi2r
+zi1
+z1i2vad
+zi1va
+2z1i2v
+2z1i2z
+2zizm
+z1iz1mo
+z1izmus1ba
+ziz1mu
+zizmu1s
+z1izmus1
+z1izmus1t
+z1izmusod
+zizmu1so
+z1izmusokk
+z1izmusot
+z1izmusukn
+zizmu1su
+z1izmusukr
+z1i2zom
+zi1zo
+1z
+z2g
+z2jan
+z1ja
+z2je
+z2j
+z2j
+z2nac
+z1na
+z2na2d
+z2na1ku
+z2nal
+z2nan
+z2nas
+z2nat
+z2n1ll
+z1n
+z2n1r
+z2nt
+z2n1e2r
+z1ne
+z2n2l
+z1n
+z2n
+z1n1na
+zn3nye
+zn2n2y
+z1no2
+z2n1od
+z2n1ok
+z2nos
+z2n12
+z2n
+z2nu
+z2n
+z12n2y
+z2nyenc1
+z1nye
+z2r1a
+2z12r
+z12rog
+z1ro
+2z12r
+zt1a2
+z1t
+zt1e2
+ztks2z1
+zt1k
+zt1p2
+z2vaj
+z1va
+zv1ak1t2
+z2val
+z2ve2r
+z1ve
+z2v1
+z2vul
+z1vu
+z2v
+z2ze
+z2z
+z2z
+zjtszi2k
+z1j
+zjts2z
+zjt1s1z
+zjtsz1i
+zje2gy12
+z1je
+zjeg2y
+zjo2g1ss
+z1jo
+zjo1g
+zjo2g12s1za
+zjogs2z
+zjo2g12s1z
+zjo2g12s1zi
+zjo2g1sz1k2
+zjo2g12szokn
+zjog1s1zo
+z2k1abl
+z1ka
+z2k1alak
+zka1la
+z2k1alj
+z2k1alt
+zka1p2l
+z2k1a2rd
+zka1r
+z2k1a2rj
+z2k1a2rn
+zka1r
+zka1r2
+zka2rr
+zka1s2k
+z2k1llv
+z1k
+zk1bl
+zk1dr
+z2k1egys
+z1ke
+zkeg2y
+z2kenn
+zk1eszk
+zkes2z
+z2k1e1t
+z2k12r.
+z1k
+z2k1r1t
+z1k2h
+zki1a2
+z1ki
+zki12
+zki1e2
+zki2g
+z2k1i1g
+zk2la
+z1k2l
+zk2ler
+zk1le
+z1k2l
+zk2l
+z1k2lu
+z2k1ol1da
+z1ko
+z2k1on1t
+zko2r1os
+zko1ro
+z2k1oszl
+zkos2z
+z3koszt
+z2kkor
+z1k
+zk1ko
+zk1kort
+zk2p
+zk2z3s
+zk2ze1le
+z1k
+zk1ze
+zkz1ell
+zk2z12l
+zk1z
+zk2z1r1t
+zk2h
+z1k
+zk1
+zk1pr
+zk2r
+z1k2re1
+zk1re
+z1k2rm
+zk1r
+z1k2r1ta
+z1k2r1t
+zk2rip
+zk1ri
+z1kripc
+z1k2ri1ti
+zk2r
+z1k2ro
+z1k2rn
+zk1r
+z2k1u2rn
+z1ku
+zku1r
+z2k1u2r2t.
+z2k1u1t
+z1k2val
+zk1va
+zk2v
+zky2b
+z1ky
+zky2h
+zky2j
+zky2k
+zky2n
+zky2r
+zky2t
+zky2v
+zla2tal
+z1la
+zla1ta
+zl2ata2n
+zlat1an2y
+zl2m1e
+z1l
+zl2mis
+zl1mi
+zls3s
+z2l1v
+z2lvk
+zleg1g2
+z1le
+zle1i2
+zle12
+z2len2g.
+zle2tak
+zle1ta
+zle2tal
+zle2t1a2n
+zle2tl
+zle1t
+zle2t12r
+zle2t1eg
+zle1te
+zle2t1ell
+zle2tes2z
+zle2t2l
+zle1t
+zle2t12r.
+zlet1rv
+zle2ts
+zle2t12t
+zle2t12v2e.
+zlet1ve
+zletigaz1
+zleti2g
+zle1ti
+zle2t1i2ga
+zle2t1u
+zle2tz
+zle1t
+zl2s
+z1l
+zl2so
+zls3s
+zli1na2
+z1li
+zli2nan
+zli2nin
+zli1ni
+z2lo1ge
+z1lo
+zlo2p1as
+zlo1pa
+zlo2p
+zl12
+z1l
+zl2s1orr
+zl1so
+zma1pr
+z1ma
+zmas2
+zma1sp
+zme12
+z1me
+zmeg2e3gyezsf
+zme1ge
+zmeg1e2gye
+zmegeg2y
+zmegegye1z
+zmeg1ol
+zme2go
+zme3gom
+zmi2n1a2
+z1mi
+zmi2n1e
+zmusks2z1
+z1mu
+zmus1k
+zmu2s
+zmu2s3z
+zm1e2
+z1m
+zna2pe2s
+z1na
+zna1pe
+zni1e2
+z1ni
+zni2
+z2nob
+z1no
+zn21st2r
+z1n
+znt2
+zn1tr
+znyoms3s
+zn2y
+z1nyo
+znyo1m
+1zo
+z1obj
+z1o2d
+zo2es
+zo1e
+z1o2k2a.
+zo1ka
+z1o2k1a2d
+z1o2ka1i
+zo2k1l
+zo1k
+zo1ki2
+zo2k1ip
+z1o2k1ir
+z1ok1ke
+z1ok1le
+z1o2ko1l
+zo1ko
+2z1o2koz
+2zok1ta
+zo2lab
+zo1la
+2z1o2laj
+zola1j2
+zol2a2j1r
+zola2je
+zo2l1a2l
+zo2l1as
+zol1br
+zo1l
+zo2l11ro
+z1oldal
+zol1da
+2z1oldh
+2z1ol1d
+zo2l1e
+zol1f2
+zol1inf
+zo1li
+zo2l1is
+zo2l1
+z1ol1l
+zo2l
+z1olts
+zol1t
+z1olt2.
+zol1t
+zol1t2re
+zo2l
+2z1olvad
+zol1va
+zo2m1a2g
+zo1ma
+zo2mak
+zo2m1a2l
+zo2m1a2n
+zo2map
+zo2m1a2s
+zom1ll
+zo1m
+zo2m12r
+zom1b2
+zo2m1e2l
+zo1me
+zo2men
+2zomer
+2zo1m
+zo2ml
+zom2t
+zo2m11te
+2zomf
+2zomg
+zo1mi2
+zo2min
+zo2miz
+zom2j2
+2zoml
+zo2m1or1s2
+zo1mo
+zo2m1os
+2zo2m
+2zom1p2
+2zom1s
+2zomz
+zo2n1aj
+zo1na
+zo2n1ak
+zo2n1a2la
+zo2n1a1l
+zo2n1alk
+zona2n
+zo2n1an2y
+zo2n1a2r
+zon1as2z
+zo2n1a1u
+zo2nld
+zo1n
+zo2n1ll
+zo2n1tl
+zo1ne2
+zo2neg
+zo2ne2l
+zo2n1er
+zo2ne2s
+zo2nv
+zo1n
+zo2nin
+zo1ni
+zo2n1i1o
+zo2nol
+zo1no
+zo2n1or
+zono2s
+zo2n12
+zo2n
+zon1s2
+zon2t1e2s
+zon1te
+zon2tin
+zon1ti
+zon1t1re
+zo2n
+zo2ny1ad
+zon2y
+zo1nya
+zo2ny1a2l
+zo2ny1a2n
+zo2nyar
+zo2nyav
+zo2nye
+zo2nyid
+zo1nyi
+zo2nyij
+zo2ny
+zo2ol
+zo1o
+z1o2pl
+zo1p
+z1o2pe
+zo1p1ho
+zo2r1a2d
+zo1ra
+zo2raf
+zo2r1ag
+zo2r1aj
+zo2r1a2l
+zo2ran
+zo2r1as
+z1o2rat
+zo2r1a2u
+zo2r1e2
+zor1f2
+zo2rid
+zo1ri
+zo2r1il
+z1or1m
+zo2r1ol
+zo1ro
+zo2rop
+zo2ros2z
+zo2r12
+zo2r
+z1or2r.
+z1or1r
+z1or1s
+zor1t2re
+zo2r
+2z1os1ko
+z1os1t
+z1os1to
+zo1szf
+zos2z
+z1oszl
+2zo1te
+2zo1t
+zot2pa
+zo2vi
+zo2xi
+1z
+za2d
+z1a
+z2g
+z1
+z2r
+z1b2r
+z1cl
+z2d1e2l
+z1de
+z1fl
+z1f2r
+z1gl
+zgy2k1r
+zg2y
+z1gy
+zgy1k
+zi2g
+z1i
+z2v
+z1
+z1ja1
+z1k2l
+z1k2r
+zkupac1
+z2kup
+z1ku
+zku1pa
+2z2l.
+z1lm
+z2lomb
+z1lo
+3znd
+z1n
+3zn1i
+z12ni
+2z1nj
+2z1nn
+z12nod
+z1no
+2z1nt
+z2r
+z1
+z1p2l
+z1p2r
+2z12ra1a
+z1ra
+z12rad
+2z12rai2.
+zra1i
+zrai1
+z12rar
+z2ras2z
+z2rb
+z1r
+z2r1i
+z12rj
+z12rk
+z2rm
+z12rr
+zrs1s
+z12rt
+z12rv
+z12ri1
+z1ri
+zs12k.
+z2sk
+z1s
+z2s12n.
+z1s2k
+z1s2l
+z1s2ta
+z1s1t
+zs2z1akad
+z21s1za
+zs2z
+zsza1ka
+zsz1l1l
+z21s1z
+z2sze1ne
+z2szen
+z1s1ze
+z2sz12le
+z21s1z
+z2sz1j
+z21s1z
+zsz12l2.
+z21s1z
+zsz1l
+z2ta2g1a2
+z1ta
+zt2g
+z1t
+zt11ge
+z1t1r
+z12v
+1z
+z2b
+z2bo
+z2b
+z1cc
+z2d
+z2d
+z2ga
+z2g
+zg3g
+z2gil
+z1gi
+z2g
+z2go
+z1g2
+z2g1l
+z2gu
+z2g2y
+2z1kl
+2z12ko
+2z1k1r
+3zldes
+zl1de
+3zlds
+2z12l1e2b
+z1le
+2z1lniv
+zl1ni
+z1lyv
+zl2y
+2z1ml
+z12na
+z12n
+2znb
+2z1ne
+2z1n
+2z1ni
+2znl
+2zn1ne
+2z1n
+2znr
+2znt
+3zrej
+z1re
+zr2f1e
+zr2f1o
+zr2nya
+zrn2y
+zr2ny
+zr2nye2l
+zr1nye
+zr2nyes2z
+zr2nyk
+zr1ny
+zr2ny
+z2rk
+z1r
+zr2p1a2
+zr2p
+2z1rv
+2zs2s2z
+z1sv
+z1sz1t
+zs2z
+z2te
+2z1tl
+2z1tv
+z12v.
+z12ve1i
+z1ve
+z12vek
+zve2t1e2l
+zve1te
+z12vez
+1z2z
+1z
+za2c
+z1a
+za2l
+z2g
+z1
+z1bl
+z1br
+ze2rd
+z1e
+ze1r
+ze2rk
+ze2rm
+z2l
+z1
+z1fl
+z1f2r
+zg2p1szn
+z1g
+zg1p
+zgps2z
+zg1pi2
+zg2p1ip
+z1gr
+zi2r
+z1i
+z1kl
+z1m1
+z1ny2
+zn2y
+z2ny1er
+z1nye
+z2ny12k
+z1ny
+z2nyrt
+z1pl
+z1p2r
+z2ra2n
+z1ra
+z2r1e2c
+z1re
+z2r1e1ge
+z2rel
+z2r1er
+2zrk
+2zrl
+z1r1l
+2zrm
+z2rol
+z1ro
+2z1r
+z2r12g
+2zrz
+z1r1z
+1z1r1z
+2z12s2i.
+z1si
+z2sis
+z1s1k
+z1s1pe
+z1s2pi
+z1s1ta
+z1s1ti
+z1st2r
+zs2z2
+z1szf
+z1szt2
+z1tr
+z2l
+z1
+zprba2jo2ko
+z1p
+zpr1ba
+zprba1jo
+zpen1n
+z1pe
+zp2fe
+zp2la
+zp2l
+zp2lo
+zpor2t1e2
+z1po
+zpor2t12
+zpor2t1
+z1p2ra
+z1p2ri
+z1p2ro
+z1p2r
+z1p2ru
+zrae3le
+z1ra
+zra1e
+zrdi21i
+z1r
+zr1di
+zrdi1
+zre2d12
+z1re
+zre2del
+zre1de
+zre2d12k
+zre1d
+zre2d3z
+zren2d12
+3z2r2.
+z1r
+z2s
+1z1sa
+zs1ab1la
+2zs1a2dat
+zsa1da
+2zs1a2d
+zsag2
+2z3sa2h.
+2zsajt
+2zs1akc
+2zs1alj
+2z2s1alm
+2zs1alt
+z2sa2ny
+zsan2y
+zsa2p2a.
+zsa1pa
+2z3sapk
+zsa2rn
+zsa1r
+z3sarj
+2z3sark
+2z3sarl
+2z2s1arz
+2z2s1aszt
+zsas2z
+zs1atl
+zsa1tr
+2z2s1a2t2y
+2zs1a2ut2.
+z2saut
+zsa1u
+zsau1t
+2zs1a2utn
+zs1a1zo
+1z1s
+2zs1br
+2z3sf
+2z3sg
+zs1g2g2y
+zs2k
+2zs11la
+2zs1lc
+2z2s1lm
+2zs12p
+2zs12rak
+zs1ra
+2z2s12rat
+2z3s1ri
+2zs1ru
+2z2s12t1e2
+2z2s1tk
+2zs1to
+2z2s12t1
+2z2s1ts
+2zs12zs
+zs1z
+zs1bl
+zs1br
+z3s2c2h
+zscsa1p2
+zsc2s
+zs1c1sa
+zsde1s2
+zs1de
+zs1dr
+1z1se
+zse2ba
+zse2bi1ro
+zse1bi
+zse2b1o2
+2zsebz
+zs1e2ce
+zs1e2d
+z3sej
+2zsell
+zs1elm
+2z2s1e2l
+zs1e2lf
+zse1l
+zs1e2lr
+2z2sember
+zsem1be
+2zs1e2mel
+zse1me
+zs1enc
+zs1e1ne
+zse2raj
+zse1ra
+zse2r12
+zse2rel
+zse1re
+zsere2s
+zse2r1es2z
+zse2r1k
+zse1r
+zse2ri2n
+zse1ri
+zse2r1o
+2z1se1se
+zse2s1z
+zses2z
+zs1e1v
+2zs1ex
+2zsez
+1z1s
+z3sg
+zs2ge2l
+zs1ge
+2z2s1hs
+2zsl
+zs11le
+2zsp
+2zs1rd
+2zs1r1te
+2zs1r1t
+3z4s1ry
+2z2s1rz
+2zs1te
+2z2s1tk
+2z2s1tr
+2z2s1tt
+2z2s12v2e.
+zs1ve
+zs1fl
+zs1fr
+zs1gr
+1z1si
+2z2s1i2d
+2z2si1g
+2z2s1i2g
+zsi2kor
+zsi1ko
+2zs1ill
+2zs1i2m
+zsi2m1u
+2z2s1i2nas
+zsi1na
+zs1i2pa
+z3sipk
+2zsirat
+zsi1ra
+zs1ira1to
+zsi2rn
+zsi1r
+2z2s1i1ro
+2z2s1irt
+2zs1ism
+2zsist2
+zsi2tat
+zsi1ta
+2z2s1i2v
+z2s1i1z
+2zs1izm
+2zs1i2zo
+zs1izz
+1z1s
+2z3sb
+zs1j
+2z3sk
+2z3sp
+zs2r1a2
+zs2r2
+3zsr1b
+3zs1r
+3zsros
+zs1ro
+3zsrr
+3zsrt2
+2zs12v
+2zs12z
+zs1kl
+zs1k2r
+1z1so
+2z3sof
+2z2s1okm
+2z2s1ok1ta
+2z2s1o2laj
+zso1la
+zs1o1li
+3zsom
+2zs1op
+2zsor
+z3so1ro
+2zs1ost2y
+2z2s1os2z
+1z1s
+zs11n
+zs11r
+1z1s
+2zs12kr
+zs1k
+2zs12lz
+zs1l
+2zs1s
+z3st
+z2s12ve
+1z1s
+zs2pir
+zs1pi
+zs1pl
+zsp2r
+zs1s2k
+zs1s2p
+zs1st
+zs3s2z
+zs3sze2r1e2l
+zs1s1ze
+zssze1re
+z3s2tad
+zs1ta
+zs2tat
+z3s2top
+zs1to
+zst2r
+zs1t1ro
+z3s2t
+1z1su
+2zs1ud
+2z3sug2r.
+zsu1g
+2z3sugrr
+2z2s1ugr
+3zsul
+2zsum
+zsu1s
+zsus2z2
+1z1s
+2zs1j
+2zsl
+zs2r1a
+1z1s
+2zsg
+2zslt
+2zsnn
+zs1s
+2zst
+2zs1z
+1z1s
+zs1wh
+zs3zac
+zs2z
+z1s1za
+z3szag
+zsza2k
+zsza2k12
+z3szav
+z2s3zp
+z1s1z
+zs3zs
+z3szem
+z1s1ze
+zs3ze1n
+z3szer
+z3s1z
+zsz2f
+z3s1zi
+z3s1z
+z3sz2k
+zsz2l
+z3s1zo
+z4s3zon
+z3s1z
+z3s1z
+zsz2p
+z2s3z2s
+zsz2t2
+z3s1z
+z3s1z
+zt1ab1la
+z1ta
+z2t1a2bor
+zta1bo
+z2t1a2c
+z2ta2dal
+zta1da
+zt1a2dat
+z2t1a2d
+z2t1ag1re
+z2t1a2k
+z2t1akc
+z2t1akk
+zt1akn
+ztakz1
+zta1k
+z2t1akv
+zt1a2la1p
+zta1la
+ztale2l
+zta1le
+zta2le1le
+z2t1a2nal
+zta1na
+zta1n2e
+z2t1a2n1es
+zt1an1k
+zta2n12
+z2t1a2nyag
+ztan2y
+zta1nya
+zt1anyak
+zt1anyas
+z2t1anyd
+zta1ny
+zt1anym
+zt1any1u
+z2t1a1nyu
+zt1a2pn
+zta1p
+zt1a2ps
+zt1a2pt
+z2t1a1p
+z2t1app
+z2t1aps
+zt1a2puk
+zta1pu
+z2t1a2r2a.
+zta1ra
+z2t1a2rn
+zta1r
+z2t1arc
+zta1s2p
+z2t1as2s2z
+z2taszt
+ztas2z
+z1t1asz1ta
+z2t1atk
+z2taton
+zta1to
+z2t1at2y
+z2t1a2ut
+zta1u
+z2t1br
+z1t
+zt2c2s
+zt11c1so
+z2t12g.
+z2t12ga
+z2t1li
+z2t1lm
+zt2raj
+zt1ra
+zt2r1ass
+zt1rem
+zt2r1e2
+zt2ris
+zt1ri
+z2t1r1n
+zt1r1nya
+ztrn2y
+z2troc
+zt1ro
+z2trokk
+zt2r1olt
+zt2r11ra
+zt1r
+ztr1sm
+ztr1s2p
+ztrt2
+zt1r1v
+zt2s2z
+z2t11s1zo
+z2t1szt2
+z2tt1b
+z2t1tf
+z2tth
+zt1t1ha
+z2ttj
+z2ttn
+z2ttom
+zt1to
+z2ttot
+z2ttr
+z2t1ts
+z2t1tu
+z2t1tv
+zt1vi2
+zt2v1ir
+zt1bl
+zt1br
+zt1dr
+z2t1e2b
+z1te
+z2t1ef
+z2t1e2g
+z2t1eg2y
+z2t1e2k2e.
+zte1ke
+z2t1e2ks
+zte1k
+z2t1e1la
+z2t1e1l
+z2t1elb
+z2t1e2leg2y
+zte1le
+z2t1e2le1me
+z2t1e2lemm
+z2telemz
+z2t1elf
+z2t1el1j
+z2t1ellt
+ztel1l
+z2t1elm
+z2tel1n
+z2t1e2lo
+z2t1e2la2d
+zte1l
+ztel1a
+z2t1e2lc
+z2t1elr
+z2t1el1t
+z2t1el1to
+z2t1ember
+ztem1be
+z2t1e2mel
+zte1me
+z2t1eml
+z2tent
+z1t1en1te
+zte2raj
+zte1ra
+zte2rak
+zte2rl
+zte1r
+zte2rr
+z2ter1de
+zter1d2
+z2tere2o
+zte1re
+zte2re1po
+zte2rill
+zte1ri
+zte2ris
+zte2riz
+zte2ros2z
+zte1ro
+z2t1e2rot
+z2t1e2r
+z2t1e2r
+zter1s2
+zte2r12l
+zte1r
+zte2s2z
+z2t1e1s1ze
+z2t1e1s1z
+z2t1eszk
+z2t1ezr
+z2t12g.
+z1t
+z2t1gb
+z2t12g
+z2t1gr
+z2t12j
+zt2k1e2l
+zt1ke
+z2t1k1n
+z2t12le
+z2t1l
+zt12ls
+z2t1lm
+z2t12l
+z2t1lt
+z2t12l
+z2t11p
+zt2r
+z2t1rd
+z2t1rl
+z2t1r1t
+z2t1rz
+zt2s2z
+z2t1szh
+z2t1szn
+zt2tt
+zt1t
+z2t1tk
+z2t12ve2s.
+zt1ve
+z2t1vt
+zt1fl
+zt1fr
+zt1gr
+z1t2hen
+zt1he
+ztia2g
+z1ti
+zti1a
+zt1i2den
+zti1de
+z2t1i1d
+z2ti1di
+z2t1ifj
+z2t1i2g
+z2t1i2kon
+zti1ko
+z2t1il1le
+z2ti1m
+z2t1imp
+z2t1ind
+z2tin1fe
+z2t1in1fo
+z2t1in2g.
+z2t1in1g
+z2t1ingb
+z2t1in1ge
+z2t1in1g
+z2t1ing3g
+z2tin1gu
+z2t1in1te
+z2t1in1t
+z2t1in1v
+zti2p
+z2t1i1pa
+z2t1i1r
+z2t1isk
+z2t1ism
+z2t1is1t
+z2t1is1te
+z2tital
+zti1ta
+z2t1i2tat
+z2t1j
+z1t
+z2t1n
+z2t12r
+zt12ve1ke
+zt1ve
+zt2z1ezret
+ztze2z
+zt1ze
+ztzez1re
+zt1kl
+zt1kr
+zt1kv
+z2to1i
+z1to
+z2t1o2koz
+zto1ko
+z2t1ol1t
+zto2lyag
+ztol2y
+zto1lya
+z2t1o2pe
+zto2ras
+zto1ra
+zto2r1e2
+z2t1or1gi
+ztor1g2
+ztorks2z1
+ztor1k2
+ztor1k
+zt1ornam
+ztor1na
+z2tor1r
+z2tor1vo
+z2t1oszl
+ztos2z
+zt12
+z1t
+ztigaz1
+zti2g
+zt1i
+zt2i2ga
+z2t12ni
+zt1p2
+zt1sp
+zt1tr
+z2t12ko
+z1t
+zt2l
+z2t11le
+ztn3n
+z2t2rks
+zt1r
+z2t1ss
+zt12vez
+zt1ve
+z2t1vig
+zt1vi
+z2t1z
+zt1a2
+z1t
+zte2l
+zt1e
+zte2r
+zt2b
+zt1
+zt1p2
+z2t1rh
+z2t1rl
+z2t1rs
+zt12se1i
+zt1se
+z2t12s
+z2t11s
+zt1pl
+zt1pr
+zt1ps
+z1tranz
+zt1ra
+zt2r1d
+zt1r
+z1t2rg
+z1trf
+zt1r
+z1t2rn
+z1t2rik
+zt1ri
+z1tril
+z1t2ri1
+zt1sl
+zt1sn
+zt1sp
+zt1st
+zt1s2z
+zt1t2r
+z2t1udv
+z1tu
+z2t1ug
+z2t1u1ra
+z2t1u1ru
+ztus3s
+zt1u2tat
+ztu1ta
+z2t1u1tu
+z2t1j
+z1t
+z2t12r.
+z2t1rb
+z2t12r
+z2t1rh
+z2t12ri
+z2t1rk
+z2t1rn
+z2t12ro
+z2t1rr
+z2t1rt
+z2t1g
+z1t
+zt2l
+z2t1ls
+ztl1l
+z2t1t
+z2t12v
+zt12zem
+zt1ze
+z2t12r.
+z1t
+z2t12ri
+z2tye
+zt2y
+1zu
+3zubb
+zu2c3s
+3zu2g.
+zu2gag
+zu1ga
+zu2ga1p2
+zu2g2ru
+zu1g
+zu2g1s
+3zugb
+zu2g1e2
+zu2g
+zu2gin
+zu1gi
+zu2gi2t
+zu2giv
+zu2g
+3zu1go
+zu2g1or
+zu2g
+3zu1ha
+zu2le2l
+zu1le
+zu2l1enc
+zuli2n
+zu1li
+zu2l
+zu1lya2
+zul2y
+zu2ly1ag
+zu2mab
+zu1ma
+zu2m1a2d
+zu2maj
+zu2mal
+zu2mar
+zu2m1as
+zu1me2
+zu2megyez1
+zume2g
+zum1eg2y
+zume1gye
+zu2mel
+zu2m1en
+zu2ml
+zu1m
+zu2m12n
+zu2m1id
+zu1mi
+zu2m1in
+zu2m1i2p
+zu2m
+zumks2z1
+zum1k
+zu2mol
+zu1mo
+zu2m
+zu2m
+2zund
+z1un1do
+zu2ne
+zu2n1
+2zu1ni
+z1u2ni1
+zu2n12
+zu2ral
+zu1ra
+zu2ram
+zurat2
+2z1urn
+zu2r
+zu2sad
+zu1sa
+zus1a1ka
+zu2sal
+zusa2n
+zus1an2y
+zu2sas
+zu2s1g
+zu1s
+zu2s1e2
+zu2s1r1t
+zu1s
+zu2sis
+zu1si
+zu2s1
+zusks2z1
+zus1k
+zu2s1ol
+zu1so
+zu2s12
+zu2s
+zuss2
+zus3s1ze
+zus2s2z
+zus3s1zi
+zust2
+zus1tr
+zu2s12
+zu2sz1i2k
+zus2z
+zu1s1zi
+zu2szon
+zu1s1zo
+zu2s3z
+2z1u2ta
+2z1utc
+zu2tol
+zu1to
+zu2t2.
+zu1t
+zu2tb
+zu2t1i
+zu2tj
+zu2tn
+z1u2tu
+1z
+z1dr
+z1fl
+3z1g
+z1jd
+z12j
+z12j
+z2jon
+z1jo
+z1js
+z2r1e2
+zr2t
+z1r
+z12szs
+zs2z
+z1s1z
+z2t2.
+z1t
+z12tr
+z1th
+z11ti
+z2t2i.
+z2tia2k.
+zti1a
+3z2tia1ka
+z2tiakr
+z2tib
+z2ti2g
+z2tih
+z2tin
+z2tiv
+z12t
+z1tj
+z1tn
+z12to2n1
+z1to
+z1t1r
+z1tt
+z2t
+z1tv
+3z1z
+1z
+z2d
+z2gy1s
+zg2y
+z1gy
+z1gyk
+z1l1d
+z12lep
+z1le
+z12lseb
+z1l
+zl1se
+z12lset
+z2ni
+2znn
+z2r
+z12r
+z12te
+z12t
+z1tk
+z12t
+z2ve
+z2v
+z2zen
+z1ze
+z1zl
+1z
+z2c1sa
+zc2s
+z2c1s
+z2csip
+z1c1si
+z2c1s1o
+z2ra
+z2r
+zrs3s
+z1r
+z2r1i2z
+z1ri
+z1r1la
+z2r
+z2ru
+z2z1a2
+z2z1
+z2ze
+zz2r
+z1z
+z2z11re
+z2zo
+z12z
+z2z2s
+z2z
+zva2su
+z1va
+zvro1s2
+z1v
+zv1ro
+zvro2s1om
+zvro1so
+zve2gya
+z1ve
+zveg2y
+zvettks2z1
+zve1t
+zvet1t
+zvett1k
+zv2nye2l
+z1v
+zvn2y
+zv1nye
+z2vi2t.
+z1vi
+zvi2tc
+zvi1t
+z2vitj
+zy2be
+zy2je
+zy2ne
+zy2n
+zy2re
+zy2r
+zy2sa
+zy2so
+zy2t
+zy2ve
+z3z2r12r
+z1z
+zz1r
+zzt2
+zz1tr
+zzi2n12
+z1zi
+z2z2s
+z3zsk
+z1z1s
+z3zsm
+z3z1si
+z3z1s
+z3z1so
+
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_it.dic b/lib/kotext/kohyphen/hyphdicts/hyph_it.dic
new file mode 100644
index 00000000..cefb0e39
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_it.dic
@@ -0,0 +1,410 @@
+ISO8859-1
+.a3p2
+.anti1
+.a1n
+.a2n1t
+.a1nti3m2n
+.anti1m
+.bio1
+.1b
+.1c2
+.ca4p3s2
+.ca1p
+.circu2m1
+.ci1r
+.1ci2r1c
+.1d2
+.di2s3cine
+.di1s2
+.dis1c
+.disci1n
+.fra2n2k3
+.1f
+.f2r
+.fra1n
+.free3
+.narco1
+.1n
+.na1r
+.na2r1c
+.opto1
+.o1p
+.o2p1t
+.orto3p2
+.o1r
+.o2r1t
+.para1
+.1p
+.pa1r
+.1poli3p2
+.po1l
+.pre1
+.p2r
+.2p2s2
+.sha2re3
+.1s2
+.s1h
+.sha1r
+.tran2s3c
+.1t
+.t2r
+.tra1n
+.tra2n1s2
+.tran2s3d
+.tran2s3f
+.tran2s3l
+.tra1n2s3n
+.tran2s3p
+.t1ran2s3r
+.1tran2s3t
+.su2b3lu
+.su1b
+.sub2l
+.su2b3r
+.wa2g3n
+.1w
+.wa1g
+.we2l2t1
+.we1l
+a1ia
+a1ie
+a1io
+a1iu
+a1uo
+a1ya
+2a2t.
+a1t
+e1iu
+e2w
+o1ia
+o1ie
+o1io
+o1iu
+'2
+1b
+2b1b
+2b1c
+2b1d
+2b1f
+2b1m
+2b1n
+2b1p
+2b1s2
+2b1t
+2b1v
+b2l
+b2r
+2b.
+2b'.
+b'2
+2b'2'2
+1c
+2c1b
+2c1c
+2c1d
+2c1f
+2c1k
+2c1m
+2c1n
+2c1q
+2c1s2
+2c1t
+2c1z
+c2h
+2c2h1h
+2c2h1b
+c2h2r
+2c2h1n
+c2l
+c2r
+2c.
+2c'.
+c'2
+2c'2'2
+1d
+2d1b
+2d1d
+2d1g
+2d1l
+2d1m
+2d1n
+2d1p
+d2r
+2d1s2
+2d1t
+2d1v
+2d1w
+2d.
+2d'.
+d'2
+2d'2'2
+1f
+2f1b
+2f1g
+2f1f
+2f1n
+f2l
+f2r
+2f1s2
+2f1t
+2f.
+2f'.
+f'2
+2f'2'2
+1g
+2g1b
+2g1d
+2g1f
+2g1g
+g2h
+g2l
+2g1m
+g2n
+2g1p
+g2r
+2g1s2
+2g1t
+2g1v
+2g1w
+2g1z
+2gh2t
+2g.
+2g'.
+g'2
+2g'2'2
+1h
+2h1b
+2h1d
+2h1h
+hi3p2n
+hi1p
+h2l
+2h1m
+2h1n
+2h1r
+2h1v
+2h.
+2h'.
+h'2
+2h'2'2
+1j
+2j.
+2j'.
+j'2
+2j'2'2
+1k
+2k1g
+2k1f
+k2h
+2k1k
+k2l
+2k1m
+k2r
+2k1s2
+2k1t
+2k.
+2k'.
+k'2
+2k'2'2
+1l
+2l1b
+2l1c
+2l1d
+2l3f2
+2l1g
+l2h
+2l1k
+2l1l
+2l1m
+2l1n
+2l1p
+2l1q
+2l1r
+2l1s2
+2l1t
+2l1v
+2l1w
+2l1z
+2l.
+2l'.
+l'2
+2l'2'2
+1m
+2m1b
+2m1c
+2m1f
+2m1l
+2m1m
+2m1n
+2m1p
+2m1q
+2m1r
+2m1s2
+2m1t
+2m1v
+2m1w
+2m.
+2m'.
+m'2
+2m'2'2
+1n
+2n1b
+2n1c
+2n1d
+2n1f
+2n1g
+2n1k
+2n1l
+2n1m
+2n1n
+2n1p
+2n1q
+2n1r
+2n1s2
+2n1t
+2n1v
+2n1z
+1n2g3n
+2nhei2t.
+n1h
+nhei1t
+2n.
+2n'2
+2n'2'2
+1p
+2p1d
+p2h
+p2l
+2p1n
+3p2ne
+2p1p
+p2r
+2p1s2
+3p2si1c
+2p1t
+2p1z
+2p.
+2p'.
+p'2
+2p'2'2
+1q
+2q1q
+2q.
+2q'.
+q'2
+2q'2'2
+1r
+2r1b
+2r1c
+2r1d
+2r1f
+r2h
+2r1g
+2r1k
+2r1l
+2r1m
+2r1n
+2r1p
+2r1q
+2r1r
+2r1s2
+2r1t
+r2t2s3
+2r1v
+2r1x
+2r1w
+2r1z
+2r.
+2r'.
+r'2
+2r'2'2
+1s2
+2s2h1m
+s1h
+2s3s2
+s4s3m
+2s3p2n
+s1p
+2s2t1b
+s1t
+2s2t1c
+2s2t1d
+2s2t1f
+2s2t1g
+2s2t1m
+2s2t1n
+2s2t1p
+2s2t1s2
+2s2t1t
+2s2t1v
+2s1z
+4s.
+4s'.
+s'2
+4s'2'2
+1t
+2t1b
+2t1c
+2t1d
+2t1f
+2t1g
+t2h
+t2l
+2t1m
+2t1n
+2t1p
+t2r
+2t1s2
+3t2sc2h
+ts1c
+2t1t
+2t1v
+2t1w
+t2z
+2tz1k
+2t2z1s2
+2t.
+2t'.
+t'2
+2t'2'2
+1v
+2v1c
+v2l
+v2r
+2v1v
+2v.
+2v'.
+v'2
+2v'2'2
+1w
+w2h
+wa2r
+2w1y
+2w.
+2w'.
+w'2
+2w'2'2
+1x
+2x1t
+2x1w
+2x.
+2x'.
+x'2
+2x'2'2
+y1ou
+y1i
+1z
+2z1b
+2z1d
+2z1l
+2z1n
+2z1p
+2z1t
+2z1s2
+2z1v
+2z1z
+2z.
+2z'.
+z'2
+2z'2'2
+.1z2
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_nl.dic b/lib/kotext/kohyphen/hyphdicts/hyph_nl.dic
new file mode 100644
index 00000000..0a5b745b
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_nl.dic
@@ -0,0 +1,12725 @@
+ISO8859-1
+.a4
+.aan5
+.aarts5
+.aat5
+.ab5l
+.acht5end
+.ac5re
+.adi5
+.af3
+.af5l
+.af5s
+.aftu5re
+.al3ee
+.al3f
+.alk4
+.al5ko
+.alko5v
+.al5ma
+.al3om
+.al4st
+.ana3s
+.an3d2
+.an3en
+.an3gl
+.an5th
+.ar5d
+.ar5tr
+.as5h
+.as5l
+.as3t
+.as5tra
+.as3u
+.at4a
+.ave5n
+.b4
+.be3la
+.be5ra
+.be5ri
+.bos1
+.c4
+.coo5
+.co3ro
+.cus5
+.d4
+.daar5
+.da4gi
+.dag5r
+.da2k
+.dan2
+.debe4
+.de2k
+.dek5l
+.dek5s
+.den4k5r
+.de5od
+.de3ro
+.de5sta
+.di4a
+.die4p
+.di3o
+.doet3
+.do3v
+.du4w
+.e4
+.ede2
+.edel5a
+.ed3w
+.ee4n
+.eer5ste
+.eest3
+.eesto4
+.eet3
+.ei3l
+.ei5sc
+.ei3sp
+.ei5t
+.el4s5
+.en5s
+.en5th
+.ep4a
+.ere5s
+.er2f
+.erf3l
+.er3in
+.ert4
+.erts3
+.es3
+.es5c
+.es5pe
+.es5tr
+.eten4
+.et4h
+.ets5te.
+.eu3
+.eus5
+.^^e92
+.f4
+.fel4s
+.g4
+.gaat5
+.gang5s
+.gea5v
+.ge3l4a
+.ge5le
+.gelo5v
+.ge3n4a
+.gena5z
+.ge5ne
+.ge5no
+.ge3ra
+.ge5r4e
+.ge5r4o
+.gerst5a
+.ge3s
+.ge5sk
+.ge5ta
+.ge5tj
+.ge5to
+.gid4
+.go4m
+.goot3
+.h2
+.handels5
+.her5in
+.hits5t
+.ho4lo
+.houd5s
+.i4
+.ide5o
+.ij4s
+.ijs5l
+.ijs3p
+.ijs3t
+.ik3
+.in1
+.in5d4
+.in3g4
+.in5gr
+.ink2
+.in5kr
+.in5kw
+.in3s4
+.in5sl
+.in5st
+.in5ta
+.is5c
+.j4
+.jor5
+.k4
+.ka3d
+.ka5g
+.ka4taa
+.kerk5l
+.kerk5r
+.kerk5u
+.ker5sten
+.ke4s
+.koot5
+.ko5pe
+.kop5l
+.ko3v
+.kun2
+.l4
+.laat5ste
+.le4b5
+.leg3o
+.le4g3r
+.leid5st
+.len4s3
+.le5r4
+.le4s3
+.le5th
+.lin5d
+.lof5
+.loot3
+.lo4s1
+.lu3e
+.lui5t4j
+.lu4s
+.m4
+.ma5d
+.ma5^^ef
+.meel5d
+.me5la
+.me5ni
+.merk5l
+.me2s
+.me4st
+.met5ee
+.mij4n5i
+.moot3
+.mor5sten
+.mo4s
+.n4
+.naat5
+.na3d
+.na3n
+.na3s4
+.nee5s
+.ne2p
+.nep3a
+.ne4s
+.ne5te
+.ne4t3j
+.neu4t5j
+.nie4t5j
+.noot5
+.nos5t
+.no5v
+.o4
+.oe4r5
+.oe4s5
+.oeve4
+.ol3f
+.om1
+.omme3
+.on3a
+.on3d
+.onde4r
+.on1e
+.on5g
+.on3i
+.on5k
+.on1o
+.ono5v
+.on2t3
+.on4tee
+.on4ter
+.ont5s
+.ooi5tj
+.oot5jes
+.op5ee
+.opi5
+.op5l
+.op3r
+.op5s
+.org4
+.os5
+.ove4
+.p4
+.pee5tj
+.peri5
+.pers5te.
+.piet5j
+.pits5te.
+.poort5j
+.po4st
+.puit4
+.pui5tj
+.pu2t
+.r4
+.raads5le
+.ran4d
+.rand5a
+.re4men
+.ren4o
+.reno5v
+.re5o
+.rie4t3
+.rij5sp
+.ring5s4
+.roe5tj
+.ro4l
+.ro4st
+.ro4t3h
+.ro5v
+.s4
+.sap3
+.sa5v
+.sci3
+.see3
+.seks5te
+.se5re
+.set3
+.se5v
+.side3
+.ski3s4
+.sneu3
+.sno2
+.so2k3
+.song5
+.spoor5tj
+.st4
+.ste4m
+.t4
+.taart5j
+.tan4da
+.te4a
+.te4f
+.tek2
+.te3le
+.ten5ac
+.te3no
+.ten4t5j
+.te3ra
+.ter4p5a
+.ter5s
+.te4s
+.ti2n
+.tin3a
+.tin3e
+.toe5pr
+.to4lo
+.to4p
+.to5v
+.tri3s4
+.ts4
+.tsa3
+.tuit5j
+.ty2r
+.u4
+.ui2
+.ui5s
+.uit1
+.uit4je
+.uke5
+.ur4a
+.vaat5j
+.ven4t5j
+.ve4r3
+.ves5p
+.vet3j
+.vie4r
+.vol5s
+.w4
+.wals5te.
+.wee4ko
+.wee4t3
+.we4l3
+.wen4s5t
+.west5r
+.win4s
+.xe3
+.y2
+.z4
+.zes5
+.zit5
+.zooi5
+4a.
+a4a4
+4aad
+aad1a
+aad1o
+aad1r
+aad5sap
+aaf5a
+4aag
+aag1a
+aag3e
+aag3o
+aag5r
+aags4
+aag3sa
+aag5so
+aag3sp
+aai3l
+aak1a
+aak3e2
+aak1o
+aak5r
+aak3sp
+aal5a2
+aal1e
+aal5f4o
+aalfo5l
+aal1i
+aal5k
+aal5m
+aal1o2
+aal3sl
+aal5so
+aal5spe
+aal5ste
+aal1u
+aam1a
+aam3o
+aam4sta
+aam4ste
+aan1a
+5aandee
+aand4r
+aan1e2
+aan5g
+aan5i
+3aanj
+aan5k4
+3aann
+aan3o
+aan3sp
+aans4po
+aant4
+3aanta
+3aanv
+aap1a
+aap3i
+aap3o2
+aap3r
+aar3a
+aar4d5as
+aar3e4
+aar1i
+4aarn
+aar1o2
+aar5spel
+aar4t5on
+aarts5l
+aar3u
+aas3e
+aas3i
+4aast
+aas5tr
+aat3a
+aat5e
+aat3h
+aat3i
+aat1o
+aat5r
+abak4s5
+aba4l
+abat4s
+ab5eun
+ab3ijz
+a2bon
+aboot4j
+abot4j
+2abr
+ab3ru
+4ac.
+a3cal
+a3car
+4ace
+ace3st
+4ach.
+a3cha
+2a1che
+4a1chi
+ach3l
+a1cho
+a3chr
+4achs
+ach5tec
+a1chu
+achuut5
+4ack
+ac3kl
+2acl
+2a3co
+2acr
+ac5res
+4acta
+4acu
+4ad.
+a5da.
+ad3ac
+ada2d
+ada4l
+ada2r3
+adas5
+2add
+a5de.
+ad3ei
+ade5re
+a5des
+a3det
+a5deta
+ad3e4te
+2adh
+4ad4i
+adi3al
+adi4oc
+adi4od
+4adk
+2adl
+4ado.
+a3doo
+2adp
+ad3rei
+a3d4ri
+ad3rol
+2ads
+ad5se
+ad3so
+ad1s4t
+ad5sta
+ad3ui
+ad3w
+2ady
+4ae
+aege4
+ae5k4
+a3e2p
+ae3r
+ae2s3
+ae4s5t
+a3eu
+a2^^eb
+a4^^ebr
+4afa
+af3aa
+a2f3ac
+af4as
+af4at
+afd4i
+afd2r
+af5d4w
+4afe
+afee4
+4afi
+af3l
+4afo
+a5fo.
+a2foe
+afon4d
+af3op
+af5org
+af1r
+af3s4
+afs2c
+af5se
+3afsl
+3afsp
+aft4a
+af5tr
+af3ui
+2afy
+4ag.
+ag1a2d
+ag3af
+ag3a2m
+ag3ar
+ag3di
+a5ge.
+agee5t
+4a5gen.
+ager4s
+ag3ex
+a4gil
+ag3ind
+a4g3ins
+agi5ot
+4ag1l
+ag3of
+a4g3or
+ag4o3v
+a2gr
+ag4ra
+ag5rap
+ag3ru
+ag3sl
+ag4sle
+ag5slu
+ags2p
+ag3spe
+ag3spi
+ag1st
+ag3sta
+ag5str
+2agt
+agu5a
+a2g3ui
+ag3u4r
+a2g3uu
+2ah
+4a1ha
+4a5he
+ahe5ri
+a1hi
+ah3l
+a3ho
+ah5r
+ah5t2
+a3hu
+a3hy
+ai5a2
+ai4dr
+ai1e
+a1ij
+ai5k
+ail3m
+ai2lo
+a2in
+aio4
+ai3ov
+ai3s4
+ai5sc
+ai4s5l
+ai5sn
+ai1so
+ai1st
+ai5tj
+ai3tr
+aiu4
+a^^efn4
+a^^efns5
+a^^efs3o4
+2a1j
+ajaars5
+aka2
+ak3af
+ak3ag
+a4k3ar
+a4k3ed
+ak3emi
+ake2t
+ak3id
+ak3ink
+ak5is
+1akko
+4a2k3l
+a2k3n
+ak5ne
+ak4ni
+a3kof
+ak3on
+ak3o2p
+a2kr
+ak5ru
+2aks
+ak4so
+ak5spe
+ak1st
+ak5to
+ak5t4w
+a2k3u4
+ak1w
+ak3wi
+a1la
+a4l3ach
+al3adr
+a3l4ag
+a3lal
+a5lapr
+al3art
+4ald
+a1le
+a5le.
+al3eff
+2aleg
+a2l3el
+ale5ro
+ale5ste
+ale4tj
+a3l^^e8
+al4fen
+alf3l
+al5fon
+alfu4
+al2gl
+a3lie
+al3int
+alk5ei
+al5kle
+alk3s
+al4kui
+al5le
+al4mac
+al5me
+a1lo
+a4l3ol
+alo2n
+al3ou
+a4l3o4v
+2alp
+al3s4ag
+al3san
+al3scr
+als5j
+al2sl
+als5li
+als5m
+al4sn
+al4s3oo
+al4stem
+al5sten
+als5tou
+altaar5
+al3tha
+al4t3ro
+alt4st
+a1lu
+a2lui
+al3uit
+al3u4r
+alu2s5
+4am.
+a4m3ac
+am3adr
+ama4f
+4amag
+am3art
+5ambt
+ament4j
+ame4ran
+ame5tj
+a2meu
+am4i
+4amm
+am3oli
+a2m3o4v
+3amp^^e8
+am2pl
+am4ple
+am4sm
+am4s3o
+am4spr
+ams5te.
+a2m3ui
+a3nad
+an3alg
+an4a3n
+an3arc
+2anc
+4anda
+anda4d
+and5ank
+an4d3e4d
+an4dex
+2andj
+an4dom
+an5d4ri
+and5roo
+ands5lo
+an4d3ul
+a4nem
+a3nen
+anen3i
+4aner
+an3est
+ane3us
+4ang.
+an4gan
+anga5p
+ange5st
+ang5le
+an2gr
+ang5sna
+angs4te
+aniet3
+anij4
+3anima
+an5ion
+a4n5isl
+ani5t
+4aniv
+4ank.
+an4kaa
+anka4n
+an4k3as
+an2k3j
+an4klu
+ank3of
+an2k3r
+a1no
+an3och
+a4n3oor
+an3ork
+ano3s
+ano3t4
+a4n3ou
+ano5v
+4ans
+an3san
+ans3cr
+an4seg
+an4serv
+an4sid
+an2so4
+ans5or
+ans3pi
+ans5pir
+an1st
+an4s5te.
+an5stru
+an4tac
+ante4n
+an3th
+2anti
+ant5sl
+ant3w
+4a1nu
+a5nuf
+an3ui
+an3ur
+an3uu
+anze5s
+2a1o
+ao4g
+ao2l
+a4om
+a2op2
+aor5t
+a3os
+aos3p
+aos5t
+4ap.
+a1pa
+a4pak
+a4pas
+ap3as.
+ap3ass
+a1pe
+ap5eten
+4a1pi
+apij4t5j
+ap3ijz
+ap1j
+2apl
+ap3le
+ap3li
+ap3lo
+a1plu
+apon5
+ap3oo
+apo3p
+apo5sta
+ap3o4v
+1appa
+4appen
+4apr
+ap3ra
+a3pre
+a4prem
+a5p4ris
+ap3ru
+ap2sa
+ap4si
+ap2s3l
+ap3sn
+ap4ste.
+2apt
+ap3tj
+2apu
+a2q
+4ar.
+a1ra
+araat5j
+a4r3app
+ara3s4
+ar2da
+ard3ac
+ard3ak
+ardo4
+ar4d3om
+ar4d3op
+ar4d3ov
+ar2d1r
+ar4dra
+ard3re
+ar4du
+ard3w
+a1re
+5a2rea
+a3reg
+a3rem
+ar4en
+are4no
+are3sp
+a3rev
+ar3gh
+ar2gl
+a1ri
+arie4tj
+arij3s
+ar3ins
+ark2
+ark3ac
+ar3k4l
+ar4map
+arm3u
+a1ro
+a2r3ob
+ar3oge
+a3rok
+aro4ko
+ar3oog
+a2r1o2p
+a3rot
+arpi4
+ar2s
+ar5sch
+ar3scr
+ars2e
+ar5see
+ar3si
+ars3l
+ar4sla
+ars5m
+ar3sni
+ar4so
+ar4sp
+ar5spo
+ars3ta
+ars5tal
+ar4s5tek
+ar4str
+ar4su
+art4aa
+ar4t3ak
+ar4tan
+art5ank
+ar4tap
+ar3tar
+4arte
+ar4tei
+ar2th
+ar5tij
+4ar4tj
+art5jesv
+4arto
+ar5tof
+art5o4ge
+art5oog
+ar4t3o4v
+ar2t3r
+ar4tro
+art5ru
+art4sl
+art5ste
+a3ru
+ar3ui
+4arw
+arwe3s
+a1ry
+4asa
+as3ad
+as4ag
+as3ak
+as1ap
+a2sc
+as5ce
+2ase
+a4sec
+a4s3eg
+aser5a
+ase5tj
+aseve4
+as5ha
+asis1
+a4sj
+as5ja
+as3ji
+as3k
+as5ka
+as5ki
+as3l
+as4lu
+as3m
+as5mi
+as3n
+as4ne
+as4ni
+4aso
+as3ob
+aso2l
+aso4r
+as1p
+as3pl
+a4s5q
+as5sa
+4assm
+3assu
+a2st
+4as3ta
+a4sta.
+as5tag
+as4tas
+as4tat
+as3te
+a3stek
+a3stem
+as5ten
+as3t^^e8
+asting5sp
+as1to
+as3tob
+ast3op
+4astr
+ast5rem
+as5tro.
+as4tu
+a1t
+ataart5j
+at1ac
+at3ade
+at3af.
+at3ank
+ata3s
+2atek
+a5tell
+ate2n
+ate3no
+aten4t5r
+ater5ad
+ater5sl
+at4eu
+2atg
+at3hu
+ati5ni
+a2t3j
+at4je
+atjes5
+at5jesb
+at5jesh
+at5jesm
+at5jesp
+2atm
+2atn
+a2too
+at3oog
+atos5f
+ato3st
+at3rac
+at3rei
+at3rib
+at4roe
+at5ru
+at4s3a2
+at4s3ec
+atsi4
+at4s3id
+at2s3l
+at4slo
+ats5m
+ats3n
+at4sne
+ats3pr
+at2st
+at4staa
+at4s5tak
+at4ste.
+at5sten
+at5stij
+ats5tol
+ats5top.
+ats5trek
+at4t3u4
+a2t3ui
+at3w
+aua4
+au3ch
+au3co
+au5de
+aud4j
+1aug
+au3na
+aun3t
+aup2
+aur4
+au5re
+aure3u
+4aus
+au3so
+au4s5p
+au3sto
+au3t4
+4aut.
+1auto
+auto3p
+2auts3
+auw3a
+4auz
+a4^^fc
+avast4
+ave3c
+avee4
+ave4n3i
+aven5sp
+aver3a
+ave3re
+ave3r4u
+4avi
+a2vo
+1a4von
+a5voo
+a5vor
+4avy
+2a1w
+axis4
+ay2a
+4azif
+^^e43h
+^^e4mme3
+^^e43r
+1b
+4b.
+3ba
+baar5ste
+baar5tj
+ba4da
+bad3ar
+ba4d3r
+bad3s
+ba3g4h
+ba3gl
+5b2ak
+ba4k3o4
+bak4sp
+ba3lan
+ba4lar
+bal3dw
+bale4
+bal3ev
+ba3li^^eb
+bal4kl
+ba3lo
+bals4
+bal3sf
+ba4me
+ba5n2a
+ban4k3a
+ban4kl
+ban4k3o
+ban4kr
+bank3w
+ba3sa
+ba4st
+ba2tr
+ba3tro
+4bb
+bbe4l5ag
+bbe4l5ee
+bbe2n
+bben3a
+4b1c
+4b1d4
+b5de
+bdi5a
+3b4e
+be1a
+be3as
+be2au
+be3ch
+be5dwe
+be5dwi
+be5dwo
+bee4
+beet1
+be5g
+beie4
+bei3s
+bei5tj
+be5ki
+be3k4l
+be1kw
+be3lar
+be5l4as
+bel5dr
+be3le
+be4l3ec
+be4lex
+bel5f
+be3li
+be4l5int
+bel3k
+bel4o
+be3lo5v
+bel3sc
+bel3sp
+belt4
+bemen4s
+be3nep
+be5n4o
+be5ot
+be1ra
+bere5s4
+ber4g5af
+ber4g5et
+ber4gl
+ber4gr
+ber4i
+be1r4o
+bero5v
+be3ru
+be3ry
+be1s4
+bes5ac
+be4sh
+be4sje
+be3so
+be5sp
+bes5s
+bes5te.
+bes5ten.
+be5stie
+bet2
+be3t4h
+be5ton
+bet5ren
+be3tw
+be5twi
+be3und
+beur4s
+4b3f
+2b1g
+4b3h
+3b2i
+bid3s
+bi2du
+bie4li
+bi4en
+bie4t3j
+bij5d
+bij3f
+bij3g4
+bij5k4
+bij1p
+bij1s2
+bik4a
+5bil
+bi3lo
+bil3s2
+bin4dr
+bin4st
+bin4t3j
+bi5ob
+bi3ok
+bi5om
+bi3oso
+bi5ow
+bir3
+bi4st
+bis5troo
+bi1tr
+bit4se
+bit4s3p
+4b1j
+4b1k
+3b4l
+blad5ij
+2b5lap
+b5led
+bles3
+ble5spe
+ble2t3
+b5lid
+blijs4
+blij5ste
+bli2k
+4b5loi
+blok5l
+bloot5j
+blu2s
+2b1m
+4b1n
+b4o
+bo4d3ec
+body3
+boe4g3a
+boe4kn
+boe4ko
+boes4
+boe3st
+boet5st
+bo3f4l
+bo2k
+bok3an
+bokje5
+bok4st
+bolk4
+bo2m3a4
+bo2m3o
+bo5na
+bond2
+bond4s5
+3bone
+bo3no
+bon4t3j
+bon4t5o4
+boot3j
+boots5te.
+bo3p2
+bor4sta
+borst5o
+bor4st5r
+bo4s
+bos3a
+bo5sco
+bo5si
+bo5so
+bos5p
+bos5to
+bot3j
+bo4to
+bot3r
+bot4sp
+bot4st
+bo2tu
+bou5ta
+bouw5s
+bo3v
+bove4
+4b1p
+3br4
+braad5s
+bran4da
+bra5str
+brei5s4
+brie4t
+brie5tje.
+bri4l
+bro2n
+bron3o4
+bru2l
+4b1s4
+b2s5a
+b5sc
+b3si
+bsi3d
+bs5je
+b2s5la
+b2s5m
+bs5s
+b4stij
+4bt4
+b3ta
+b1tr
+bts5
+3b4u
+buit4j
+bul4k
+bu4lu
+bune5t
+b5urb
+bu5ri
+bus5c
+bus3o
+but4a
+but3j
+bu2to
+but4s
+buts5te
+buur4tj
+4bv
+2b3w
+by3
+4bz
+4c.
+1ca
+3ca.
+ca3b
+ca1ch
+5cada
+ca3do
+ca3dr
+cae3
+ca3g2
+cal4l3
+ca3lo
+came5r
+ca3na
+cant4
+ca2of
+ca1pr
+ca4pra
+ca5pri
+ca3ra
+car4u
+ca5se
+ca3s2p
+cas3t
+cas5tr
+ca3ta
+cate4n
+ca3t4h
+cau3
+cau4st
+ca3v
+2cb
+4c1c
+cca3
+cces5
+c4d
+c5do
+1ce
+3ced
+cee4
+3ceel
+3cel
+cel3d
+celes5
+ce5li
+cel5k
+ce4l3o
+2ce3n4a
+2cene
+ce3no
+5cent
+cen4t3j
+ceo4
+ce3ra
+cer2n
+ce5ro
+cer4t3r
+ce2s
+ce3s2a
+ce5sc
+ce3s2h
+ce3sta
+ce3s4ti
+cesu5r
+ce3ta
+ce4t3j
+ceto4
+cet3og
+cet3oo
+1c^^e9
+c3g
+4ch.
+3cha^^ef
+5chao
+3chas
+1chau
+5chauf
+2chc
+1chef
+5chef.
+5chefs
+5chemi
+5cheq
+che5ri
+che3ru
+5ches
+che3us
+1ch^^e9
+5chir
+4chn
+2chp
+5chromo
+4cht
+4chw
+1chy
+3ci
+ci5ab
+ci3am
+cie3k
+cier4s5
+ci1eu
+5cij
+5cil
+ci5le
+cil3m
+4cind
+ci3o
+ci5om
+5cir
+ci3t2
+ci5ta
+c3j
+c2k3a
+c4k3ed
+ck3ef
+cke5re
+c5k4et
+ck3id
+c2k3l
+ck4le
+c2k3n
+c2k3o4
+c4k3r
+ck5se
+ck3so
+ck5st
+c3ky
+1c4l
+cla2n
+cle3u
+5clu
+2c1n
+1co
+co3ad
+co3d
+co4i
+coin5
+co3k4
+co3la
+5com
+5cond
+con1g
+2co1no
+5cons
+3con5t4
+2coo
+2co1p2
+3copa
+4copi
+cor4dr
+co4rel
+co5ri
+cor2o
+5corr
+cors4
+co3ru
+co5sc
+co5se
+co5sp
+co3th
+co3tr
+5coun
+2cout
+co5v
+c3p4
+1c4r2
+3cras
+cre5d
+2crip
+3cris
+cro5f
+cro5k
+croo3
+cro5v
+crus5
+c3so
+c3sp
+c3ste
+2c1t
+ct3act
+ct3ad
+ct5c
+ctee5t
+cte2n3
+c2t1h
+c2t3j
+c4t3of
+c3tol
+c2t1on
+ct4or
+ct3rap
+c4t3re
+ct3sl
+ct3sp
+1c2u
+cu5d4
+cu3en
+cu3^^e9s
+cui5s
+cui2t
+cuit5e
+cu3k4
+cula5p
+cu3ra
+5cur3s
+cus3o
+c3w
+1cy
+1^^e7
+^^e7a4o
+4d.
+1da
+3da.
+3daag
+d4aal
+d3aap
+daar5e
+5daat
+4dabo
+2d3acc
+da4ce
+da5den
+4dadr
+3dae
+2d1af
+3dag
+da2g3a4
+da3ge
+da4g3ed
+da4g3e4t
+da4g3on
+da4g3r
+dag4s3t
+da2gu
+3dai
+da3^^ef
+da3ke
+da4ker
+2dakk
+da4k1r
+4dala
+d3alar
+d3alc
+da3le
+4dalf
+da3li
+2dalm
+da2l3u
+d4am
+dam4a
+da5mac
+d3a4mat
+d2a5me4
+dames3
+dam4pl
+2da2na
+dan3as
+dank3l
+danoot5
+dan4si
+dan4sm
+dan4s3p
+dan4st
+dans5ta
+4d3antw
+2d1ap
+4d3a2pe
+5dapu
+da2r3a
+d3arb
+3dare
+3dari
+dar4mo
+darm5on
+3daro
+dar3s
+dar5st
+3das3
+5dasa
+da3stu
+3d4at
+da3ta
+dat5j
+4d5atl
+4d5atm
+da2t3r
+5daue
+4d1aut
+3dauw
+2db
+dbei5
+dbou4w5i
+2d5c
+4d3d4
+ddags4
+ddag5sp
+ddel5ev
+dde2n
+dden5a
+ddera4
+dder5al
+ddere4
+dder5ee
+dder5ep
+dder3o
+ddi3a
+d5dles
+d5do
+ddo3p
+1de
+3de.
+de2al
+de1ch
+d4e5den
+5dedir
+de4dit
+dee4g3
+dee4l
+deel3i
+4d3een
+dee4r
+4d3eff
+de3g
+4d5eg.
+4d5egg
+2d5egy
+2dei
+d3eie
+d3eig
+d3eil
+d1eis
+d3eiw
+5dek
+de3ke
+dek3lu
+dek3w
+del4aa
+del5da
+del5dr
+del5eek
+4d3e4lek
+4delem
+de4lev
+4d3e4lit
+del3k
+del2s
+del4s3e
+dels3i
+del4so
+4d3e4mai
+2demh
+5demi
+dem5ond
+d2en.
+den4ac
+den5ate
+den3ei
+den3e4p
+den3ev
+4d3engt
+den4k5of
+de4noc
+den3o4r
+den3sh
+den5str
+de3nu
+5denvl
+de4o
+de5ofo
+de5ol
+deo4li
+deo3v
+de3rab
+de4r3ad
+der3a4g
+de3rak
+de3ram
+de3ran
+de3rap
+de3ras
+de4r5as.
+de4r5ass
+der2e
+der5ede
+der5egd
+de4r3ei
+de4r3em
+de5re4n
+de4rep
+de4ret
+de5rij
+de4r3im
+der3k4
+der3on
+dero4r
+4d3eros
+der4s3a
+der4s5om
+der5ste
+der5sto
+der5stra
+der5th
+4d3erts
+der5tw
+de2r3u
+de3rup
+de2s
+de3sav
+des3m
+des3n
+des3p
+de3spe
+de5spel
+de4spl
+des5sm
+de3st
+des5tak
+de5stal
+de4s3te
+de4sti
+de5stic
+des5top
+de3t4
+4d3e4tap
+de5tw
+deu4r3o4
+de3us.
+deu4tj
+deve4
+2dex
+4d1exa
+4dexp
+3d^^e8
+2d1f
+2d3g
+d4gaf
+dge3la
+dge2t
+dgeto4
+dget5on
+dget5ov
+dge4tr
+dg4l
+2d1h
+d5he
+dheer4
+3d4hi.
+1di
+di2a
+di5ae
+di4ak
+di4ano
+dia3s4
+di4atr
+5dich
+di4do
+die2f
+die4r3o
+di3esr
+die3st
+die2t
+diet3r
+di1eu
+3dig
+di2ga
+dig5aa
+diges5
+dijk3r
+di3jo
+2d3ijz
+di2k3o4
+5dil
+2d3imp
+di5n2a
+2d3ind
+2dinf
+3d4ing.
+4d5ingel
+4d3inj
+4d3inko
+2d5inr
+2d3ins
+4d3int
+dintel5
+2d3inv
+2d3inw
+2d3inz
+di2o
+di5ofon
+di4ol
+di4one
+di4oni
+dio1s
+dio5sc
+2d3i2ro
+2d3irr
+3di4s
+dis5ag
+di5se
+di5si
+dis4kr
+dis5p
+dis1t
+dis5tr
+di3th
+dit3j
+dit3r
+5div
+2d1j
+2d3k2
+4d3l
+d5le.
+dli4n
+dlot4s
+2d1m
+2d3n2
+d5ne
+dni3s
+1do
+3do.
+do3a
+2dobj
+4d3obs
+3d4oe
+5doe.
+doe5d
+4doef
+d5oefe
+5doek
+5doen
+5doet
+4d5oev
+3doi
+d4ole
+2do2li
+d4olin
+dolk5s
+5dol5s
+3d4om.
+5domi
+do4m3o4
+d3omr
+dom4sn
+5domu
+d3omv
+4domz
+5don.
+d4ona
+5done
+do5ni
+5d4onn
+5do3n4o
+do3nu
+do5ny
+5donz
+2dop
+do3pa
+d3opb
+d3opd
+do3pee
+5dopj
+4d1opl
+3dopo
+d3ops
+d3opz
+4d5org
+do4ri^^eb
+d3ork
+dors5m
+do3sp
+do3sta
+dot3j
+5dou
+2dov
+dover5s
+3dovl
+3dovo
+2d3p
+dpren4
+1dr4
+3dra
+5dra.
+d3raam
+d3raap
+d4rac
+d5race
+5drach
+d3rad.
+d3rada
+5draf
+5d4rag
+d4rama
+d3rame
+4d3rand
+4drap
+4dras
+4d3raz
+2dre
+4d1rec
+d5reco
+d1red
+d2ree
+4d3reek
+4drend
+d4ress
+4dret
+3d2rev
+5dreve
+d3ric
+dries4
+5d2rif
+dri5ga
+d3rijd
+d3rijk
+d3rijm
+d3rijs
+5d4rin
+3dris
+4d3rit
+4d3roei
+d3roer
+5d2rog
+4d3rok
+d3roma
+d3rond
+3droog
+4droos
+5drop
+2drou
+2d3ro5v
+2droz
+drug4s
+d3ruim
+d3ruit
+5d4ru4k
+4d3rus
+2ds
+d2s1a2
+d4saa
+dsa4b
+d3sal
+ds4ate
+ds2ch
+d5schi
+dse2
+ds3eco
+d4s3ed
+d4s5ee
+d4sef
+d4sei
+ds3eis
+ds3elf
+dse4li
+d5sen
+d4s3es
+d4set
+d2sh
+ds3ho
+d2s1i2
+d4s5id
+dsig5a
+ds2im
+ds4ing
+ds5is
+d4s3j
+ds4jo
+ds5jon
+ds4l
+d1sla
+ds5las
+ds5lic
+d4s5lie
+ds5lim
+d3slin
+d2sm
+ds4mak
+d3smij
+ds5mo
+ds3n
+ds4ne
+ds5neu
+d3snu
+ds1o4
+ds3ob
+ds3om
+d4son
+ds2oo
+ds3op
+d4spa
+d5span
+ds5pati
+d5spec
+d5s4pel
+d4s3pet
+d1spi
+d4s3pl
+d5spoe
+d5spok
+d5spor
+ds5s
+dst4
+d1sta
+d5staat
+d4stab
+ds3tak
+d4s3tal
+ds4tan
+d3s4tat
+d5stav
+d3ste
+ds4te.
+d5stee
+d4stek
+ds4ter
+d4sterr
+d4stev
+ds3th
+d3s4ti
+d4stit
+d1sto
+ds5tram
+ds5trekk
+ds5ty
+d2su4
+ds3ure
+ds3uu
+d1sy
+2dt
+d1ta
+dtaart5j
+d1th
+d2tj
+d1to
+d1tr
+d1tu
+1du
+2duca
+5due
+du3en
+du3et
+5duid
+5duif
+5duik
+d3uil
+2duit
+4duit.
+d3uitd
+5duite
+4duitg
+d3uitv
+5duiv
+du4n
+dun5i
+du2o
+du4ol
+3durf
+3durv
+5du1s
+dut3j
+du5wen
+2dv
+dvaat5
+dvee3
+dve5na
+dvies5
+2dw
+d3wac
+d3was
+d3wat
+d1we
+3d2wei
+d3wek
+d3wet
+d3wez
+d1wi
+4d1wo
+d3wor
+d3wr
+1dy
+4d3yo
+dy4sp
+dy2s4t
+2dz
+4e.
+4ea
+e3aa
+e1ab
+ea3bo
+e3ac
+ea4ca
+eac5t
+e1ad
+ea3da
+e5adem
+ea3do
+ead3s2
+ead5sh
+e1af
+e1ag
+e3ai
+ea4k3o4
+e1al
+ea3la
+e3ali
+e4als
+ea5mi
+e3an
+e4an.
+eang3
+ean4s
+e5ap
+ea3pr
+e3aq
+e1ar
+ear2c
+e1as
+e2asc
+ea5s4e
+ease5t
+ea3so
+e1at
+e4at.
+eat3s
+eau3s4t
+e1av
+e3bo
+ebots5te.
+e5br
+3ecd
+e3ce
+e1che
+e1chi
+echt5ec
+echts5o
+e3chu
+4eck
+ec5le
+4ecor
+4ect
+ec3ta
+ec4taa
+3ecz
+e1d
+ed4ag
+e3dam
+e3d4an
+e4d4as
+ede3a
+ed3ei.
+ede5le
+edem4
+ede5nac
+ede5o
+ed4er
+e4d5erns
+ede5rog
+edi3al
+edi3am
+e5die
+4edir
+edoe5tj
+e3d4oo
+ed3opv
+edors5te
+ed3ov
+e3d2r
+ed3rod
+ed3rol
+ed1s
+ed5se
+ed2sl
+ed4so
+ed5sp
+ed3su
+ed3uit
+e4d2w
+e5dwan
+e4e
+eea4
+ee5b
+ee5ca
+ee5che
+ee2d3a
+eed4ac
+eed5as
+ee5de
+ee5do
+eed3ru
+eed3si
+eed3w
+ee2f
+ee3fa
+eef3ac
+ee3fi
+eef3l
+eef3r
+ee4gap
+eeg3l
+ee3i
+ee2k
+ee3ka
+ee5kaa
+eek3ak
+eek5all
+eek1e
+ee5ket
+ee3ki
+ee3kl
+ee4k3lo
+eek3n
+eek3re
+ee3kri
+eek3ro
+eek5st
+eek3w
+ee2l
+eel3a
+ee3lad
+eel4as.
+eel5d4u
+ee3le
+eel4ee
+ee3li
+ee5lij
+eel5k4
+ee3lob
+eel3og
+eelo4ge
+ee3lu4
+eel3ur
+eel3uu
+4eem
+eema4
+ee2n
+een3a
+eena4r
+een3e2
+een5g
+ee3ni
+een5ie
+een5k
+ee5o2
+ee2pa
+eep3an
+ee3pl
+eepo4
+ee4p3re
+eep3ru
+ee2r
+eer1a
+eer3aa
+ee4rad
+eera4l
+ee3ram
+ee3ran
+ee3re
+ee4ree
+ee5rei
+ee4r3i
+ee5ric
+eer5k
+eer3og
+eer5oom
+ee3rot
+eer5ston
+eer5str
+ee2s3
+ee5sch
+ee4s5em
+ees5et
+ee3sj
+ees5lo
+ee3sn
+ee3s4p
+ees5pl
+ees5pot
+ees5ten
+ee3stu
+ee2t
+eet5aa
+ee3tal
+ee3tan
+ee5te
+eet5h
+ee3tj
+eetna4
+ee3to
+eet3og
+eeto4ge
+eet3oo
+eeto4r
+ee3tr
+ee4tro
+eet5rok
+eet3sp
+eet5ste
+ee5v
+ee5z
+e^^ebn3
+e5^^ebr
+ef3ad
+efa4z
+efde5l
+ef3do
+ef3ei
+e5fer
+4efi
+efie4t
+efiet5j
+ef3ins
+e3fis5
+e1fl
+ef3li
+ef3loo
+e3flu
+ef3om
+e3foo
+ef3op
+e1fr
+ef3rij
+e5fron
+ef3sf
+4e1g
+egas4
+eg3as.
+ega5sk
+eg3ebb
+e4ge4c
+eg3eig
+egel5ei.
+ege4l5ov
+ege4net
+egen5of
+ege4ra
+eger5eng
+ege4ro
+eger5on
+e3g4i
+eg3ijz
+egip4
+egiste4
+e2gl
+e4go.
+eg3org
+e2gos
+eg3oud
+e5graf
+eg3s4
+eg5sle
+eg5so
+e2g3u4r
+egut4
+e4g3uu
+e1h4
+e5ha
+eheis5
+ehit4
+e2i
+ei5a
+4eid
+ei3do
+eid4sc
+ei1e
+4eien
+eien5s
+eie5re
+ei3f4
+ei3gl
+4eign
+e3ij
+eik4l
+ei3kn
+ei5kr
+eiks4
+4eil.
+eil5ant
+4eild4
+eil5dr
+4eile
+ei4lev
+eil5m
+ei2l3o
+ei4n3ab
+ei3n4ac
+ein4do
+eind5oo
+ein4d3r
+ein5gr
+ein5k
+ei2no
+ein5sl
+ei3o
+ei2sa
+ei5sha
+ei3s4la
+ei3slo
+eis4p
+ei3s4ta
+4eit2
+ei4too
+eit4s3
+eits5c
+eits5n
+eits5te.
+eit5sten
+eits5tr
+eive4
+4eiz
+e1j2
+e3je
+ek3aan
+ekaart5j
+ekaat4
+ek3af.
+e4k3a4g
+ek3al.
+ek3alt
+e5kam
+ek3ang
+ek4ee
+ek1ei
+e3kem
+e5ker.
+e5kers
+ekes3
+ekes4t
+ekes5tr
+e3ket
+ek5eter
+e5kic
+e4kil
+e5kis
+ekla4m
+eklam5a
+ek3lev
+e5klim
+ek5loos
+ek4ni
+e3ko
+e4k3ob
+e5kof
+ek3oli
+ek3opz
+e5kor
+ek5os.
+ek5oss
+e5kran
+ek3roz
+eks4e
+eks5erv
+ek5set
+ek4str
+eks5tra
+ek5t4e
+ek3to
+eku4
+ek3uit
+ek3ur
+ek1uu
+ekwet5ste
+ek3win
+e1la
+el3aan
+el5aand
+el1ac
+el4ade
+el3adj
+el3adm
+el3adr
+el3adv
+el1a4f
+el1al
+e3lan
+el5ana
+e3lap
+e5lap.
+e4lapp
+el3arb
+el3arc
+el3arm
+el3art
+e4l3as.
+el3asi
+e4l3asp
+e4l3ass
+el1au
+e4laut
+e3laz
+el5azi
+el4dec
+el4dr
+el4du
+e1le
+e3le.
+el3eeu
+el5eff
+e5leid
+el5eier
+el3eig
+el3ei5s
+e4lel
+3e2lem
+el3emp
+e5l4en
+e3ler
+ele5r4a
+eler4s
+el3erv
+e3les
+eles4t
+e4l3eta
+ele4tr
+e4l3etu
+el3exc
+e3l^^e9
+elfi4d
+el1fl
+elf3s4
+el3gu
+2eli
+e5lie
+e5lig
+eli5kw
+el3imp
+e4l3ind
+e3ling
+e4l5inkt
+el5inz
+3elix
+el4kee
+elk3s
+el4k3u4r
+el4kw
+4e1lo
+e5loep
+el3oes
+e3lok
+el3ol
+el3oms
+el5ond
+el5ont
+e3loo
+e5lood
+e5loos
+el3ops
+el5opt
+el5opv
+el3o2r
+el5org
+elot4j
+e5lou
+el3o4ve
+e5loz
+elp4o
+el4ps
+el4s5em
+el4s3k
+el5smed
+el5twe
+4e1lu
+el3uit
+eluks5
+2ema
+e4mana
+ema3sc
+ema5to
+emees5
+emens5te
+emer4s
+emes3
+emie4tj
+e5mok
+em3oli
+em3op
+em3org
+emor5sten
+e4mo4v
+em3sa
+em5sc
+em4sli
+em4sm
+em1st
+em3su
+em3uit
+emut4
+en3aap
+e3naar
+e4n3aas
+en1ac
+e5n4acc
+en5af
+e2n1ak
+e2nal
+en3al.
+en3als
+en3amb
+en4ame
+e2nan
+e4n3ang
+en1a2p
+e5nari
+en3ars
+e2n3a2s
+enas3p
+e3nat
+ena4tel
+e4n3att
+en1av
+e2n3a2z
+enci4
+3ency.
+en3da
+en5daa
+end5ama
+5enderti
+en3d4o
+en3dr
+en5drek
+e2n3e2c
+enede4
+e3nee
+en3eed
+enee5t
+en5eg.
+en5egg
+en3ela
+en3elf
+en3ema
+e4n3en5t
+e2ne2p
+en3epo
+e5nere
+5energ
+e4nerv
+en3eta
+en3ete
+ene4ten
+e3neu
+4enf
+en5ga
+en3gl
+en4g5le
+eng4r
+en5gri
+engs4
+eng5se
+eng3sm
+e3nie
+e5nijd
+e2n3im
+e4ninga
+e4n3ink
+e3niv
+e4n3i4vo
+en3k2a
+e4n3och
+en3off
+e4n3oli
+e2n1on
+e4n3oor
+enoot5
+e2n1o2p
+e3nor.
+en3ord
+eno3s
+en3ou
+e2n1ov
+3enq
+en5sce
+en4sei
+ens5ein
+ensek5
+3ensem
+ens4fe
+en4sin
+en5slak
+en4s3on
+en1s2p
+ens5pot
+en5stan
+en5sten
+enst5ijv
+en4stin
+en4stu4r
+en3su
+en4tac
+en5tee
+en5tei
+ente5re
+en4terv
+3ent^^e8
+en1t2h
+en5tom
+ent4r
+en3tre
+ent5rol
+ent4sl
+ents3m
+ent4s3p
+en3tw
+e1nu
+e4n1ui
+e2nun
+en3ur
+en3uu
+5envelo
+eny4
+e3o
+eo3d
+eodo3
+e5oe
+eoes3
+e5off
+eo3fr
+e4o3k4
+e5on
+eo5ni
+e5oo
+eo3pa
+eo3pe
+eo3pl
+eop4la
+eo3p2r
+e5ops
+eor5d
+e5org
+e5ori
+eo3ro
+eo3s4
+eo5st
+e4ot
+eo5te
+e5o3t4h
+e1pa
+e3paa
+ep3aak
+ep3ac
+e4paf
+epa4k
+ep5ake
+e3pal
+e3pap
+e4p3app
+e3par
+ep3asp
+e1pe
+e5pe.
+ep5een
+e5per
+epers5te.
+e1pi
+3epid
+ep3ijs
+ep3ijz
+ep5ingr
+ep3ins
+epit4s
+epits5te
+ep1j
+e1pl
+ep3led
+e4p3lod
+e5ploe
+ep3lus
+e1po
+e4p5o4ge
+epoort5j
+epoot4j
+3e4pos.
+e3pot
+epou4
+e1pr
+ep4ra
+e3pri
+ep5rode
+eprot4
+ep2s
+ep4s5ee
+ep4ser
+eps3l
+eps5n
+eps3p
+eps3ta
+eps5taa
+eps5tal
+eps5to
+eps3tr
+eps5tro
+ep4tak
+ep2tj
+ep4tr
+ept3ra
+ep5tro
+ep3uit
+4equa
+e3ra.
+e1raa
+e5raad
+e4raak.
+er3aan
+er5aanp
+e4raap.
+e5raat
+e4r1ac
+e5rac.
+e5race
+e5raco
+e3rad
+e5rad.
+er3ado
+er3af
+e3raff
+era4gen
+e1rai
+e4r3all
+er3ama
+er3ana
+e5randa
+e5rane
+e5ra3pl
+er3arc
+e3rare
+e3rari
+e1rat4
+er3a4tr
+er3azi
+er3d2a
+er3d4i
+erd4o
+er3d2r
+erd5uit.
+er3d4w
+e1re
+er5eat
+4erec
+er5editi
+er3een
+e5reep
+er5eers
+er3eet
+er3ef
+er5eff
+er5eg.
+er3egd
+er5egg
+er5egt
+er3eie
+er3eig
+er3eil
+er5eind
+ere3kl
+er3elk
+e4r3emm
+er3emp
+e3rend
+e5rendel
+ere4ne
+eren5eg
+er5enen.
+e3renm
+e3rent
+er5enth
+e5rento
+eren5tw
+ere2o
+ere4og
+er3epi
+er3e2q
+er3eri
+e3res.
+er3esk
+e3ress
+ere4st
+ere4t3j
+er3etn
+e4r3ets
+e4r5ex
+erg2l
+e3ri
+eri5ab
+e5rif
+e5rig
+erig5a
+er3ijl
+er3ijs
+e4rijs.
+er3ijv
+e4r3ijz
+e5rik
+er5ind
+e4r3ini
+er5inkt
+er3ins
+er3int
+e5rio
+e5ris
+erkeers5
+er2kn
+er3m4i
+er5mo
+er5nu
+e1ro.
+e3rob
+er3oc
+e4r3oed
+er3oef
+e5roep
+eroe5tj
+er3oev
+er3of
+ero2g
+e3rok
+e1ro2l
+e5rol.
+er3oli
+e5roll
+er3om
+er1on
+e3ron.
+e3rone
+er3onv
+er3oog
+er3oor
+e5roos
+e4r3op
+erop3a
+ero5pen
+e2r3or
+er1ov
+er3oxi
+e3roz
+e3r^^f6
+er4plu
+errie5tj
+er3scr
+er3sj
+er5slag
+er5span
+ers4pot
+er5stem
+er5te
+er3t2h
+er5t4i
+er5t4o
+er3tr
+ert5se
+erts5l
+er3t4u
+er3t4w
+e1ru
+e3rub
+e3rug5
+e2rui
+er3uit
+erui5t4j
+e2run
+e3runs
+e4r3ur
+e3rus
+er5uu
+3ervar
+3erwt
+e4saf
+e4s3a2g
+e3sam
+e5san
+es3ap
+es3arr
+e3sa3s
+e3scop
+e3s2cr
+es4e
+e5sec
+es5een
+e5sel
+es5ene
+e4s5eng
+es5ex
+es2fe
+es5he
+e4shi
+e3sid
+e3sie
+es1in
+e4sir
+es5je.
+es5jes
+e3s4jo
+es5jon
+e4s3ka
+es5kr
+e3sl
+es4la
+e5sla.
+e5slag
+es3lak
+es5lat
+es4le
+es5leg
+es2m
+es4mui
+e5smuil.
+e1sn
+e3s4ne
+e1so
+e3sol
+es4oo
+es5oor.
+eso4p
+es3ore
+e1sp
+es5pas
+es4pel
+espit5ste
+e3spl
+e4sprie
+esp5riem
+es4sm
+e3stak
+e3s4tal
+e3stap
+es4tar
+es5tatie
+e4s3te.
+es4tea
+es4teel
+est5ei.
+e4steka
+es5tekam
+e3s4tem
+es5temo
+es3ten
+e4sten.
+es5tenb
+es3ter
+estere5o
+es5tes
+es4tet
+e3steu
+es4tic
+e4stie
+e3stot
+es5tra.
+es5trac
+es5trak
+e5stral
+est5rap
+es5trei
+est4sc
+es4tur
+e3sty
+e3su
+esu4r
+e3sy
+e1ta
+e3ta.
+et3aan
+et3ac
+et3ad
+et3afz
+3e2tag
+e3tak
+e5tak.
+et4ana
+e5tand
+e2tap
+e4tapp
+e5tat
+e4tau
+e2tav
+e3te
+e5tea
+et3edi
+e5tek
+4etel
+e5tel.
+e4t5elf
+e5tels
+et5emb
+et5emm
+etens5u
+eten5tj
+ete5r4a
+ete3ro
+eters5la
+eter5sm
+e5tes
+e1th
+et3ha
+et3hor
+et5hu
+e4t5i4d
+e5tie
+e4t3inc
+e4tiq
+e5tis
+e4tja
+e1to
+e5toc
+e3toe
+e5toev
+e3tol
+eto4p
+et3ope
+et3opl
+e4t3ork
+eto3sf
+e1tr
+et3rec
+e4t5res
+e3troe
+e5tron
+e5troo
+etros4
+e4t3ru
+et4sl
+ets5lap
+et5slu
+ets3n
+et4s3oo
+et3spe
+ets3pr
+et3spu
+et4ste
+ets5tek
+et5sten
+et5sti
+ets4u
+et5su5r
+et5suu
+e1tu
+etui5tj
+etu4r
+et3we
+et2wi
+1eua4
+1euc
+eudi5o
+eu5dr
+eu3e
+eugd3r
+eu3g2r
+eu4ler
+eu4li
+e1um
+e3um.
+e2umd
+eu2na
+eun3t
+1eu1o
+eu2po
+eu4rad
+eu4rec
+eu3ren
+eu4res
+eu4rij
+eur5k
+euro5v
+eur4sta
+eurs5taa
+eurs5te.
+eur4s5tr
+eur4su
+eu5sch
+eus4p
+eu3spa
+eu4st
+eu5str
+eu3tj
+eu1tr
+e3uu
+2euw
+eu4wa
+eu5win
+euw4str
+evaar5tj
+eval4s
+evari5
+eve4lo
+evel5op
+eve5n4aa
+4ever
+eve3ra
+4e1w
+e5wa
+e5we
+ewen4s
+ewens5te.
+ewest5r
+ew2h
+e5wi
+ewo3v
+4ex.
+2ex3aa
+ex3af
+4exco
+3exeg
+3exem
+4exi
+ex3in
+ex5op
+1exp
+e3y4o
+eys4
+ey3st
+e5za
+e3zee
+4e3zen
+ezers5
+e3zo
+ezz4
+^^e93a
+^^e91d
+^^e9dee4
+^^e9di3
+^^e91g
+^^e9gee5
+^^e93h
+^^e93j
+^^e93n
+^^e93p
+^^e93r
+^^e91t
+^^e81
+4^^e8c
+^^e82l
+^^e82s
+^^e85t
+^^e8ta5
+^^ea1
+^^ea2p
+^^ea3per
+^^ea5t
+3^^eb
+4^^eb.
+^^eb2b
+^^eb3c
+^^eb3d
+^^ebe2
+^^eben3
+^^eb3j
+^^eb1l
+5^^ebn
+^^ebnce3
+^^ebn4e
+^^ebns2
+^^ebn5sc
+^^ebnt2
+^^ebn5th
+^^ebn5tw
+^^eb3p
+^^eb1ra
+^^eb1re
+^^eb1ri
+^^eb1ro
+^^ebro1g2
+^^ebro3s
+^^eb2s
+^^eb3si
+^^ebs3t
+^^eb1t
+^^ebt4s
+^^ebts3te
+^^ebve5
+^^ebven4
+4^^ebzu
+4f.
+1fa
+f3aanb
+f4aat
+3fab
+fa2bo
+f3acc
+face4
+f1ach
+2fad
+2f1af
+fa3g
+fal3s
+fa3m
+f3ang
+fant2
+fan4t3j
+fant4s5
+2f3a2p
+f4arm
+3fa5se
+fa2to
+fa3v
+4fb
+fbe5dw
+f1c
+4fd
+f3da
+fda4g
+f5dan
+fd1ar
+fde4k
+fdek3l
+fde4s3
+fdes5e
+fdes5l
+fde5sm
+fdes5t
+f2d3in
+fd3of
+fdors5te
+fd4ra
+f3d4ru
+fd5se
+fd3si
+fd3so
+fd3sp
+f4d2w
+fd3wo
+1fe
+fe2a
+fec4tr
+fede3
+fe4del
+f3een
+5fees
+feest5r
+fel5dr
+fe4l3ee
+3feli
+fe4lom
+fe4l3op
+fel3sp
+fe3no
+f4er
+fe3rab
+fe3ran
+fe4r3et
+fe3rom
+fe3ron
+3fes3
+fe4t3j
+fetu5r
+2f3ex
+1f^^e9
+3f^^e8
+3f^^ea
+4f1f
+f5fe
+f5fi
+ffs2
+ff3sh
+ff3si
+f3fu
+f3g2
+fge3
+fge5r4
+fge5t
+4f5h
+1fi
+fi5ac
+fi4al
+fi3am
+fi3apa
+fi3apo
+fia4s
+3fib
+fi1ch
+5fie
+5fig
+f3ijs
+2f1ijz
+fik4st
+3f2il
+fil4m3a
+film5on
+fi3lo
+4find
+3fini
+f3inj
+4fink
+2finr
+fi3o
+fi4r
+fi4s
+fi5se
+f5iso
+f1j
+fjes5
+4f1k4
+f3ke
+f2l2
+4f3laa
+f1laf
+f4lam
+f3lei
+flen4st
+flens5te.
+f4les
+fle2t
+flet3j
+4flev
+f4lex
+f3lez
+2flie
+2flij
+f4lik
+f4lip
+f4lit
+f3lok
+3f4lor
+flu4t3
+4f1m
+f1n
+1fo
+3fob
+5foc
+foe5d
+foe5ta
+2f3of
+5fok
+2foms
+fo5na
+fond5en
+fonds5l
+fon5eng
+fo1no
+4font
+fon5te
+foo4
+fooi5
+f3oom
+5foon
+2fo4p
+fop5s4
+f4or
+3fo5re
+fo5ri
+5form
+for4t3j
+fo1ru
+fo3t
+2f3oud
+4f1ov
+3f^^f6
+4f5p4
+fpers5te.
+fpits5te.
+fr4
+f4raak.
+fraam5
+5frac
+f3rad
+f2ras
+5frau
+f1rec
+f3rek
+5freq
+frie4s
+frie4t
+friet5j
+f4rik
+f4rod
+4f3rol
+f4rolo
+f3roma
+frus3
+4f1s
+f2sa4
+fs3ad
+fs3an
+fs3ar
+f3sc
+f5sch
+f4scr
+fse2
+f4s3ec
+f4s5ee
+f4sei
+f4s3eth
+fs4fe
+f2sh
+fs5he
+f2si
+f3sie
+fs3im
+fs1in
+f5slaa
+f5slac
+f5slag
+fs3lap
+fs2m
+fs3ma
+fs4mi
+fs3mo
+fs3mu
+f2s1o4
+fs3ob
+fs3om
+fs4oo
+fs2p
+fs4pre
+fs4t
+fst3as
+f3ste
+fs5tec
+f5stell
+fste4m3
+f4sterr
+f3sti
+f5stif
+f3sto
+f4st3oc
+f4ston
+f3str
+f3stu
+f3sy
+4ft
+f1ta
+ft1ac
+fta4kl
+fta4p
+ft3art
+fter5sh
+ft3h
+f1to
+f5tond
+f4tont
+f1tr
+ft2s3l
+ft4sm
+fts3n
+ft4so
+fts3p
+f1tu
+ftu4r
+1fu
+2fuit
+fu4ma
+fum3ac
+3f2un
+fur4o
+3fus
+2fuu
+4fv
+fva2
+fval3
+4f1w4
+3fy1
+2fz
+fzet5
+4g.
+1ga
+3ga.
+gaar5tj
+g4aat
+2g1ac
+4g3adm
+g4af.
+g3afd
+ga3fr
+4g3afs
+4g3afw
+2g3a4h
+4gal.
+ga3la
+ga4l3ap
+ga5ler
+gal3s
+4gamb
+g4a3mi
+3gan
+gan5d
+5gane
+gan4s5t
+ga3pl
+3gar.
+4g3arb
+ga3re
+g1arm
+3gars
+2g3art
+gar5tj
+ga4s
+gas5c
+gas3i
+ga5sla.
+ga3sli
+ga5slo
+gas3o
+gas3p
+gas3tr
+gas5tra
+gast5rol
+3gat
+gat5j
+gat3s
+4gaut
+ga5ve
+g1avo
+2g5b
+2g1c
+4gd
+g5dac
+g5dag
+gd3art
+gd3at
+gd5ate
+g3de
+g4d3elf
+g5der.
+gd3erv
+g4d3id
+gd3im
+g2din
+g3dr
+g5dru
+gd3sa
+gd5sp
+g3du
+1ge
+3ge.
+ge3a
+gea3dr
+gea5na
+gea3q
+ge4ari
+ge5au
+4g3eb.
+2gebb
+ge3c
+ge3d4
+gedi3a
+ge4dit
+ge5dr
+ge5dw
+3gee4
+geest5r
+geet3a
+ge3f4
+2g3eff
+ge5g4
+gege4s
+4geig
+2g3eik
+gei4l5a
+5geit
+geit3j
+ge3k4a
+ge3ke
+ge5ki
+ge5k4l
+ge3kr
+gek4st
+gek4u
+ge3k4w
+ge3lau
+gel4d3a4
+ge3l4e
+4ge4lem
+gel5f
+gel5k
+5ge3l4o
+gel5si
+gel3sl
+gel3sp
+gel5ste
+ge5ma
+4gemb
+4g3emf
+ge5mo
+2g3emp
+gems3
+ge3m4u
+g4en.
+ge3nak
+gen4az
+3ge3ne
+ge4n3ed
+ge4nend
+4g3engt
+3geni
+gen5k
+ge1no
+ge4n4of
+ge4nog
+gen5sfe
+gen5ston
+gen5stu
+genstu5r
+5genw
+ge5om
+geo5pe
+georke5
+ge5os
+ge5ot
+ge5p4
+ge1ra
+ger5aal
+ger5aap.
+ge4r3a4l
+gera4p
+ger5ape
+ger5as.
+ge5reg
+ge3rem
+ge5ren.
+ger4i
+ger5ini
+ge1r2o
+ger4of
+ge5rol
+ger5slan
+ger4sli
+gers5lij
+ger4sp
+4g3erts
+ge3r4u
+3ge1s4
+ge3sa
+ge3sc
+ge5se
+ge3si
+4ge3sk
+ge5sl
+ge3sn
+ge3so
+ge5spend
+ge5sper
+ge5spo
+ge5stan
+ges5te.
+ges5ten.
+ge3str
+ge5sw
+ge3ta
+get4aa
+ge5tam
+ge2th
+ge5t4i
+ge3t4j
+get4o
+ge3tr
+ge5tra
+ge5tro
+ge5tru
+ge5tsj
+ge5tu
+ge5t4w
+ge3ui
+5g4ev
+4gex
+5g4ez
+1g^^e9
+g^^e9di4
+3g^^e8
+4g1f
+gfijn5ste
+4g3g4
+g5ge
+gge3la
+gge4r5on
+gges5ti
+g4g5h
+g5gi
+ggings5
+g5gl
+2g1h
+g2het
+ght4
+gh5te
+g2hum
+1gi
+gids5te
+gie5ra
+gier4s
+gi1eu
+gi2f
+gif5r
+gi3ga
+5gigere
+5gigste
+2gij
+g3ijs
+4gijz
+gi2m
+gi3na
+4g3inb
+4g3inf
+g5infe
+g5infr
+5ging
+2g3inh
+gin3o
+2ginr
+gi4oc
+gi2od
+gi4onet
+gi2or
+gip4st
+5gir
+3gis
+4g1j
+4g1k
+gl4
+g5lab
+3glai
+1gla4s
+glas3e
+g5lat
+3g4laz
+3gle.
+g5leer
+glee5t
+g3len
+2g5lep
+4g5ler
+g3les
+3gle4t
+glet3j
+g5lev
+g5lice
+g5lich
+3gli^^eb
+g2lif
+g5lijs
+g2lim
+3g4lio
+g2lob
+3glof
+g5log
+3glom
+4g3lon
+g3loon
+g3lop
+3g2los
+g5loz
+3g2ly
+4g1m
+gmaat5j
+2g1n
+g3na
+gn4e
+gne5g
+gne5m
+gne4t3j
+gnie4tj
+4gnu
+1go
+3go.
+3go2a
+3gob
+2goc
+g1och
+go4d3a
+god4s3
+gods5t
+4goef
+goe1r
+2gof
+go3f2r
+g4og
+4goh
+go2k
+5gom.
+go2ma
+g3oml
+4gomz
+go4n3az
+2g3ong
+go5no
+2g1ont
+g2oo
+2g3oor
+3goot
+2g1op
+go3pa
+g4opr
+g4ora
+4go4re
+go5re.
+5g4ori
+gor2s
+gos1
+go3tr
+gou4d5ee
+2g3ov
+2g5p
+gpes3
+1gr4
+3gra
+5gra.
+graat5j
+g5rak
+gra2m
+g4ram.
+gram3a
+g3ramp
+gra4s3
+5grav
+2g3rec
+2g3red
+5gredi
+g5redu
+g3reek
+g3reel
+g4reep
+g3reis
+4g3rek
+2g3rem
+gren4s
+gre4s
+g4reu
+g3rev
+5gria
+grie4t5j
+g5rijd
+g5rijk
+g5rijm
+g5ring
+5g4ris
+grit5s
+2g3riv
+groet5j
+grof5
+g3rok
+g3rook
+g3room
+groot5j
+2grou
+gro5v
+2g3rug
+g3ruim
+g3rup
+4gs
+gs1a2
+gsa4g
+gs5alar
+gs3alt
+g2sc
+gse4
+gs3eco
+g4s3ed
+gs5een
+gs3ei
+gs3en
+gs5ene
+gs3erv
+gs3et
+gs3ev
+gs5he
+g2s1i2
+g3sie
+gs5is
+gs1j
+g3s4ke.
+gs3l
+gs4la
+gs5laag
+gs5lam
+gs5las
+gs1le
+g3slep
+g4sleu
+gs5lie
+gs4lin
+g5sling
+gs4lo
+gs5log
+gs5lok
+gs5lon
+gs4lu
+g4s5ma
+gs3n
+g4sna
+g3snij
+g4s1o4
+g5sol
+g5som.
+gs5ons
+gs3op
+gs3p
+gs5pand
+g3spec
+g3s4pel
+g3s4pet
+gs4pi
+g3spie
+g3spil
+g5spin.
+g5spinn
+gs5pir
+gs5pol
+g3s4pon
+gs5ps
+gs5q
+gs5sc
+gst2a
+gs5taal
+gst5aang
+gs5tac
+g5stad
+g5s4tan
+g4st3ap
+g5stat
+g1ste
+g5s4te.
+g5sted
+g5stee
+g3stei
+gs3tek
+g5stel
+g3sten
+g3ster
+g5ster.
+gs5terr
+g5sters
+gs3th
+g5s4tic
+g3s4tig
+gs5tijg
+g5stof
+g5stop
+g5stor
+gst3o4v
+g4s3tra
+gs5trad
+gs5trak
+gst5ram
+gs5trap
+g5strat
+gst5res
+gs5troe
+gs5tron
+g4stru
+g5struc
+g3stu
+gs5ty
+g2s1u4
+gsver3
+gs5w
+g5sy
+4gt
+g1ta
+g2t3ap
+g3te
+gte3ro
+gtes4
+gte3st
+g1to
+g3tr
+g1tu
+1gu
+5gu.
+3gue
+gu4eu
+2guit
+gu4ni
+gu2s3
+gut4st
+guts5te.
+4gv
+g5vo
+4g1w
+g5wa
+1gy
+4gyp
+2gz
+4h.
+haams5ta
+haar5sl
+haar5sp
+haars5te
+haar5tj
+haats5te.
+h3afd
+haf4t3u
+ha3g
+ha5ge
+hal2f1
+5hals
+hal4sto
+5halz
+2hamp
+4han.
+han4dr
+hand5sl
+han3ga
+hang5l
+hang5s
+han4s3l
+han3so
+han4st
+hap2s
+hap4se
+har4ta
+harte5l
+hart3j
+har4t3o4
+har5tre
+hart5sl
+hat5j
+ha2t3r
+hat3s
+ha3v
+4have.
+4hb
+2hd
+h4e
+2hea
+he2ar
+3hech
+he3co
+4hee.
+hee3g4
+hee4k
+heek3a
+heek5l
+hee4l3o
+heep4s
+heeps5c
+heers5tak
+hee5sto
+hee5tjes
+he2f
+he4i
+heids5p
+heis4
+hei5tj
+he2k3a
+he2kl
+hek4st
+heks5te.
+hek5sten
+hek3w
+he3le
+he4l3ee
+he3li
+hel4m3a
+helo4
+hel4p3a
+hel3sm
+he5mo
+he5ne
+hen4kr
+he3n4o
+4he5o
+he4pij
+he2p3l
+he2pr
+he1ra
+her4aa
+he4r3ad
+he3r4au
+he4r3i
+herm5eng
+he3ros
+hero5v
+her4p5aa
+3herst
+hert4
+herts5te
+he2ru
+he5se
+he2sp
+he2s5t
+hets5te.
+heu5le
+2h3f
+4h5g
+h3h
+hi5d
+hie4f3
+hielsges5
+hie4r3
+hie5ren
+hier5u
+hie4t5o
+hie4tr
+hiet5s
+hij4sl
+hik4s5
+hi3kw
+hil3m
+him4pl
+him4pr
+hin5d
+h3ins
+hin4t3j
+hi2p5l
+2hir2
+his5p
+hi3tr
+hit4st
+hits5te.
+hit5sten
+h3j
+2hl
+h3la
+h4lag
+h3lep
+h3loc
+2h2m
+h3ma
+h3me
+h4mer
+h1n
+h2na
+hno3
+2ho.
+ho3a
+hoa3n
+hoboot4
+ho3ch
+hoe4ker
+hoe4s
+hoes5l
+hoe3t
+ho2f
+hof5d
+hof3e
+ho3g2
+ho2ka
+ho5mo
+hon3dr
+hond4s
+hon3g
+honi4
+ho1no
+hool3e
+4hoom
+hoort4
+hoor5tr
+2hoot
+ho3pa
+ho1pe
+ho2p3o
+hop3r
+hop4str
+hor5de
+5horl
+ho3ro
+hor4st
+hors5te.
+hor5sten
+hor4t3j
+ho3ru
+ho3sa
+hot3j
+ho3tr
+ho4t3re
+hot4st
+hots5te.
+ho3v
+2ho4w
+how3o
+2h1p
+hpi4
+2hr
+hra4b
+h4re
+h5rea
+hri4
+hro2k
+hrok3o
+hroot3
+4hs
+h3sa
+h3sp
+h3st
+2ht
+h4t1a2
+ht3ac
+h3tal
+ht3ala
+h5tans
+h3te.
+h4t3ec
+ht4eco
+h2t3ee
+h2t3ef
+h2t3ei
+ht5em
+h3ten
+h4ten5t
+ht5entw
+hter3a
+hte4r5o
+h4t3esk
+h4tev
+ht5eve
+h5tevo
+ht3ex
+h2t5h
+h4t3int
+h2t1j
+ht1o4
+ht5oef
+ht5op
+h4t1r
+ht5roo
+ht4sap
+htse4
+ht4ser
+ht2si
+ht4sl
+ht5sla
+ht5slot
+ht3sme
+ht5smij
+ht4s3o
+ht3spe
+hts3pl
+ht3spr
+hts5taal
+ht4s5tak
+ht4s5tek
+ht4sti
+hts5tore
+hts5trekk
+ht1u2
+ht3w
+hu4ba
+3huiz
+hul4der
+hur4t5
+hut3j
+huts5te.
+huur5s
+4h1w
+hy4la
+3hyp
+hypo1
+4i.
+i1a
+i3aa
+i4ab
+i5abi
+i4ac
+i3ady
+i3ae
+i5ae.
+i2a3f4
+i2a3g2
+i3agr
+i3ai
+i5ak.
+i3ake4
+ia4kem
+ia3kl
+ia3kr
+i3al.
+i4a3la
+i3ali
+i2am
+i5am.
+i3ami
+i3an
+ian4o
+ia3o
+i2a1p4
+ia5pa
+i5api
+ia3sc
+ia5se
+ia3so
+ia4s5po
+ia3sta
+i3at
+ia3t2h
+i5atri
+iave4
+i5ble
+iboot4
+4ic
+i3ce
+5i4cepa
+i1cha
+i1che
+ichee4t
+i1chi
+i1cho
+i3chr
+ick5l
+icos4
+ic4t3op
+ict4s5c
+i3dam
+idde4r5a
+ide3a
+i4dee.
+ider4sp
+ider4st
+ides4
+idi3a
+idi5ab
+i2di5o
+id4mak
+i3dok
+i2dr
+id3ran
+id3ru
+id2s1
+id4s3a
+id4ser
+ids5i
+ids5j
+ids5l
+id4sm
+ids5ma
+id5s4mee
+id4s3o
+ids3ta
+ids5tak
+ids5tek
+id4stem
+id4sti
+ids5tr
+id3u4r
+id3uu
+idu3w
+id3w
+4ie
+ie1a2
+ie4d3ac
+ie3de
+ie4dro
+ied3w
+i1ee4
+ie^^eb2
+ie3fi
+ie2fl
+ie3fle
+ie3fon
+ie4fr
+ie4gas
+ie3ge
+ie4g5ins
+i2ek
+iek3e4v
+ie4kl
+iek3li
+ie5klu
+ie2kn
+iek5ond
+iek4s5n
+iek4sp
+ie2ku
+ie3kwa
+ie5lan
+ie5lap
+iel5do
+iel5d4r
+iel4e
+iel5ei.
+iel5k
+iel3sc
+ie3ma
+iem3ov
+ien4dr
+ien3ij
+i3enn
+i5enne.
+ien3s4m
+ien5sp
+ien4sta
+ien4st5o
+ien4str
+ienst5ur
+ieo4
+i4ep
+ie5pen
+iepiet5
+iep5oog
+iepou5
+iep5rel
+iepro4s
+iep3s4
+iep5st
+iep5tr
+ie4pui
+ie5r4ad
+ier3a4l
+ie3ram
+ie3rap
+ier3as
+ie4rat
+ier5el.
+ier5els
+ie5ren.
+ie5ring
+ierk4
+ie3r2o
+ie4rof
+ier4sl
+ier5slu
+ie3ru
+ier4ui
+ie3sf
+ie2si
+ie4sl
+ie5sle
+ies3li
+ies3m
+ie2s3n
+ie2so4
+ie4s3pl
+ie3sta
+ies5te.
+ie5stel
+ies5tere
+ie3sto
+ie4taa
+ie5tal
+iet5ant
+ie5ten
+ie3tj
+ie3to4
+ie4t3og
+ie4too
+ie4top
+ie4tor
+ieto5re
+ie4t3ov
+ie5troe
+iets5te.
+iet3ur
+iet3uu
+ie3twi
+i3ety
+ie2u
+ieu3k
+i1eur
+ieu5r4e
+i1eus
+ieu3sp
+i1euz
+ie3v
+ie3z
+iezel5a
+i3^^e9s
+i1^^e9t
+i1^^e8
+i4^^ebg
+i4^^ebva
+4if
+if3aa
+if3ad
+if3l
+if3r
+if4ra
+if4taa
+if4tar
+if4tre
+iftu5r
+if3ui
+ig4a
+ig3aa
+ig5ac
+i5gal
+i4g5av
+i3ge
+ige2s
+ig3esk
+ig3ij
+i4gind
+igi3o
+ig5no
+i3g4om
+ig4op
+igs4
+ig3sk
+ig3sl
+ig3sp
+ig3sto
+ig3un
+i1h
+i3i
+i5ie
+ii2n
+i5is
+i2j
+4ij.
+ij5a
+ija4d
+4ijd
+4ije
+ij3ef
+ij3ei
+ij3el
+ij5e4n3
+ij1er
+ij3i
+4ijn
+ij3o4
+i3jou
+4ijso
+4ijsp
+4ijst
+ij5te
+ij4tr
+ij5u
+4ijvo
+4ijzo
+4ik
+ik3aar
+i4kam
+i3ke
+ik3ef
+ike4ra
+iket3
+i2kij
+i3kl
+ik3la
+i4k3lo
+i4k3lu
+i2k4n
+i4k5na
+ik5o2g
+i3kom
+i2koo
+iko2p
+ik3ope
+ik3ord
+i4kr
+ik3re
+ik3ri
+ik3ro
+ik5se
+ik5si
+ik3s4l
+iks3n
+ik3sno
+ik3sp
+ik4spa
+ik1st
+ik5sta
+iks5te.
+ik1w
+ik5war
+i1la
+i3la.
+il4aa
+il5aan
+il3ac
+il4act
+il3ad
+il3af
+i3lak
+il3al
+i5land
+il2da
+il4d3r
+ilds4
+4i3le
+il3een
+ile3l
+i4l3erv
+ile4t
+ilet5r
+ile3u
+il3e4ve
+ilevin4
+i4l3e2z
+i3l^^e9
+il5f
+i3li
+ilie5g
+ilie5t
+il3ink
+ilk4l
+ilk3s2
+illa3s
+1illu
+il2m
+ilme2
+il4min
+il4mo
+i1lo
+ilo4ge
+il3ond
+i3loo
+i5loon
+il3oor
+il1or
+ilo4re
+ilo4ve
+il3s2h
+ils5j
+il4sti
+il2th
+i1lu
+4im.
+i2mag
+i4mago
+im5au
+imee4
+im3een
+i4m3em
+im3enc
+im3ex
+4imf
+i2m3of
+im3op
+im3org
+im5pa
+im4s3oo
+im1st
+i3mu
+in1ac
+i2nau
+ind4aa
+in4dene
+ind3sc
+ind5ste
+1indu
+in3e4de
+in3edi
+in3eed
+inek4
+ineo2
+inet4s
+i5neu
+1inf
+in2ga4
+ing3aa
+ing3ag
+ing3al
+3ingan
+ing5lo
+in2go
+in4gr
+ing4st
+4ini.
+i3nie
+ini5on
+ini5sl
+ini5sta
+4inkj
+in2kn
+3inkom
+in4kri
+3inno
+i1no
+i3noc
+i3nod
+in4o2g
+in1on
+ino5pe
+ino3s4t
+in3ov
+1inri
+4ins.
+in5sch
+in5se
+in3sl
+in3smi
+in3so
+in1sp
+in5spo
+in5sten
+in5swi
+in4t3ap
+in5te
+intes5
+in3th
+1int4r
+i1nu
+inuut3
+4i1o
+io5a
+ioas5
+io5b
+i3o1c
+i3ode
+ioes3
+io3f
+io3g2
+i3ol
+i5ol.
+i5olen
+i5olus
+i3on
+ioneel4
+i5ong
+ion4s3
+ions5c
+i5oo
+i2op4
+io3pa
+io3pr
+i3opt
+io3ra
+i3ori
+io3ru
+io4s
+i3os.
+ios3c
+i3o5se
+i3o5sf
+io5sh
+io5si
+i5osi.
+io5so
+io5sp
+io5s4t
+i5o5su
+i3osy
+i5othek
+i3oti
+iot3j
+i5otorens
+io3tr
+i2o3v
+i3ox
+i2oz
+i1pa
+i2p1ac
+ip3af
+i3pap
+i1pe
+i4perw
+ipe4t3j
+i1pi
+ip1j
+i1pl
+ip3lu
+i1po
+ipo4g
+i1pr
+i2pri
+ip3ru
+i4ps
+ipse4
+ip4si
+ip4sle
+ips5te.
+ip5sten
+i3ra
+ira3k
+i1r2e
+ires4
+ire3st
+i3r^^e9
+i1ri
+irk4s
+i1ro
+iro3p
+iro5v
+ir2s
+ir4sc
+ir3sp
+ir5ste
+irt3r
+i1ru
+4is
+i1sa
+i2saa
+i4s3ad
+is3a2g
+is3ap
+i2s1ar
+i2s3as
+i4sc
+i5scha
+i5schr
+is5col
+i5scoo
+i5scope
+ise2d
+i4s3ei
+is3ell
+is5eng
+i4s3erv
+ise3st
+iset3j
+is4fee
+is4fer
+i4sh
+is5ho
+isi2d
+i2sij
+i2s3im
+is3ja
+i4sk
+is3ka
+is3ke
+is3l
+is5lag
+is5las
+is5le
+i4s5m
+i4s3n
+is5ned
+is5nij
+is5no
+5isol
+i4soo
+is4oor
+iso3s
+i2sot
+is3ott
+is3p
+is5pas
+is2pi
+is5pl
+is5q
+is5sa
+is5so
+i2s3t
+is1ta
+i3stak
+ist3ap
+i4s5tas
+is4tat
+is5terd
+is5tere
+is4th
+is1to
+ist5ong
+i3str
+is5tri
+i5stro.
+i3sty
+isu2m
+i5sy
+4it
+i1ta
+it3ac
+ita5d
+it3een
+i3ten
+i3ter
+ite5rei
+ites4
+ite3st
+ite4t
+it3hie
+it1ho
+it1hu
+it2i
+itie5st
+i4tj
+i1to
+it5oef
+it3oog
+i3t2ou
+i4to4v
+itper5st
+it3red
+it1ru
+it3sje
+it3sli
+it3sop
+it1sp
+its4te
+it4ste.
+it4too
+i3tu
+it3w
+4i3u2
+iu4m
+ium3a4
+ium3e
+ium3o
+iu3r
+i3ve
+iven5s
+ive3re
+i5w
+iwi2
+iwie2
+iwit3
+4iz
+i3ze
+ize3t
+^^ee3
+^^eet4
+1^^ef
+2^^ef.
+^^ef5a
+^^ef1c
+^^ef1d
+^^efe4n3
+^^efe5nen.
+^^ef2n3a
+^^efns5m
+^^efn3sp
+^^efn3u
+^^ef3n4ur
+^^ef3o
+^^ef3ri
+^^ef3ro
+4^^efs.
+^^efs3a
+^^ef4sc
+^^ef5sche
+^^efs3l
+^^ef3so
+^^efs3t
+^^ef1t
+^^ef5z
+4j.
+1jaar
+jaar5tj
+ja3b
+2jaf
+1jag
+jagers5
+ja3kn
+ja3mi
+jan4s3l
+jan4st
+ja3pl
+ja1po
+1jar
+jare4
+1jas3
+jas5p
+3jaw
+jaz4
+j3b
+jba4l
+jbe4l3i
+j1c
+jda2
+j2d3aa
+jd3an
+j4d3ar
+j2d3ee
+jde4n3e
+jden4s
+jdens5p
+j4d3erv
+jdes4
+jde3sp
+jde5st
+jdi3a
+j2do4
+j3dom
+jd5on
+jd3op
+j3dr
+j4d3re
+j4d1ri
+j4d3ro
+j4d3ru
+jd5sei
+jd3spo
+jd1st
+j2d3u
+jd3w
+j3d4wan
+jea4
+3jeba
+je3ch
+jec4ta
+2j1ee
+jel4
+je3la
+j1en
+je2na2
+je3n4o
+5jep
+jepiet5
+je3ro
+jers4
+jer3sp
+je4s3
+3jesa
+5jesal
+je5sch
+3jeskn
+jes5l
+jes5m
+jeso2
+jes5pa
+jes4pr
+3jesr
+jes5tr
+5jesvo
+3jeswa
+3jeswi
+je2t
+jet3er
+jeto4v
+jet5st
+5jeu
+3jevr
+2jew
+j3ex
+j2f1a
+j2f3ei
+j2f1en5
+j4f3ij
+jf3ink
+jf3l
+j3f4lat
+jf5le
+j2f3o4
+jf3r
+j3f4ra
+j3f4ro
+jf2s
+jfs3a
+jf4sc
+jf4s3er
+jfs5f
+jfs3l
+jfs5m
+jfs3n
+jfs3p
+jfs5pa
+jf3st
+jf4sta
+jfs5tak
+jf5stan
+jf4stel
+jf4sti
+jf4s5to
+jft2
+jf5ti
+jf5tw
+j1g
+j3ge
+jger5sl
+j2g3l
+jg4s5e
+jg3sn
+jg2st
+jg3s4te
+j3h
+jif3
+j3ig
+jin3g
+ji5t2j
+j3j
+2jk
+j3ka
+j4kaa
+jk5aard
+j4kar
+jk3arb
+j4kau
+j4kav
+j2kij
+j2k4l
+j3klaa
+jk5lak
+jk5lap
+jk5las
+j4kle
+j5kled
+jk5les
+jk5li
+j3klon
+jk5lop
+jk5luc
+j2kna
+j2k3of
+j4k3o4l
+j2k3on
+j2ko4p
+jk3opb
+jk3ope
+jk3opl
+j3kops
+j2kr
+j4kra
+jk3raa
+j5kran
+jk3re
+jk3ro
+j4k5ru
+jk3slo
+jks3pl
+jk4sta
+jks5taak
+jks5taal
+jks5tak
+jk5stan
+j2k3ui
+jk3w
+j3k4was
+j1la
+j3laa
+jl5ana
+j1le
+j2l3ef
+j2l3el
+jl5f
+jl3ink
+j1lo
+j2loe
+j3lu
+j2m3af
+j5m4ar
+j3mi
+jm3op
+jm3s
+j2n1a4
+j4naa
+jn5ac
+j3na5g
+jn3ak
+jn2am
+jna5me
+j3n4an
+jn5d2r
+j2nef
+jne4n
+j4n3erk
+j4n3erv
+jn3gl
+j4n3im
+j4n3ink
+jn3k4
+j2n1o4
+jn4si
+jn2s3l
+jns5lac
+jn3slu
+jns5or
+jn2sp
+jns3pl
+jn1st
+jn4ste.
+jnt4
+jn3tr
+joet3
+4joi
+jol4e
+jo5lij
+j3om
+1j4on
+jone2
+j3op
+jo3pe
+jo3ra
+jo3ru
+j4ou
+1jour
+jou5re
+joy3
+j3pa
+j4p3ac
+jp3arm
+j1pe
+j2p3em
+jp3ij
+j1pin
+j3pio
+jp1j
+j1pla
+jp3li
+j1po
+j2p3or
+j4pre
+jp3ri
+jp3rok
+jps4
+j3r
+jraads5
+2js
+js1a
+j4sef
+j4s3ela
+j5seli
+j4s5em
+j4s3e4r
+j2s1i
+js5in
+js4ir
+js4le
+js3lee
+js3li
+js5lie
+js4me
+js5mel
+js5met
+js3n
+j4s1o4
+j5soe
+js3ol
+js3pac
+js3par
+j3spe
+js3pl
+j4spo
+js3poo
+jspoort5j
+j5spor
+j1sta
+j4star
+j2s3te
+j3stee
+j3s4tek
+j3s4tel
+j5s4teng
+js3th
+js4tij
+j5stond
+j4stoo
+js3tou
+jst5ran
+j5strok
+j2su
+j3sy
+j3taal
+jt3aar
+jt1ac
+j1tag
+j3tak
+j3tan
+j3te.
+jt1h
+j3toe
+jt3opt
+j3tr
+jt3ra
+j5tred
+j5tree
+jt3rei
+j5trek
+jt3ri
+j5trok
+jt3rot
+jt1s
+j1tu
+1j4u
+ju3d
+4jum
+jus3
+juve5
+j3v
+jve2n
+jver4s
+jvers5p
+jve3t
+jvie5s
+j1w
+jze4r5o
+4k.
+1ka
+k3aanb
+k3aanl
+5kaart
+kaart5jes
+kaats5te.
+kabe2
+ka3bo
+2k1ac
+kade4t5
+4k3adm
+ka3do
+k3adv
+2kaf
+k3afd
+k4aff
+ka3fl
+3k4aft
+ka4ga
+k3a4gen
+k3ah
+ka3i
+2k3alb
+ka3le
+5kalf
+kalf4s5
+ka3l4i
+kal2k
+kalk3a
+4kalt
+5kalv
+3kam
+4kamb
+kamen4
+kame4re
+kam4pa
+kam4pl
+kam4pr
+ka5naa
+kan5d
+4kang
+kan4sl
+kan4st
+kan4t3j
+kao3
+5kap.
+ka3pe
+kap3l
+ka1po
+4kappa
+ka3pr
+kap3s
+k3arc
+k4a3ro
+kart4
+4k3arti
+kar3tr
+ka4s
+kas5c
+4k3asi
+kast3o4
+ka3str
+kast5ra
+ka5stro
+kas3u4r
+kat5aal
+ka4t5a4le
+ka4tan
+kati4
+ka4t5io
+kat5j
+k3atl
+kato4
+ka4t3og
+ka5tr
+kat3s
+2k1aut
+2kavo
+2k3b
+2k1c
+k3ca
+2k5d
+kdi3a
+1ke
+k4eb
+2k3ec
+ke4di
+2k3een
+kee4p5l
+kee4r
+keer4s
+keers5to
+2kef
+4keff
+k4ei.
+k4eie
+k2eil
+kei3s4
+kei5t
+ke4lap
+kel5da
+kel5dr
+ke5lel
+4kelem
+kel5f
+ke4l5int
+ke4lom
+ke4l3op
+kel3sp
+5k4ema
+2kemm
+2kemp
+ke4n3an
+ke4nau
+ken4ei.
+ke5nen
+ken5k
+ke2n1o
+kens5po
+kepie5t
+4k3e4q
+ke3ram
+ke4r5enk
+ker3kl
+ker4kle
+ker4kn
+ker4k3r
+ker4ku
+ker4kw
+ker4n3a
+ker4no
+ker3o4
+ke3ros
+ker4sm
+ker5spe
+ker4spr
+ker4sta
+ker5ste.
+ker4sti
+4k3erts
+4kerva
+4kerwt
+ke2s
+ke3s4p
+ke3sta
+kes5ten
+ke3sto
+ke5straa
+k2et
+5ketel
+ke2t3j
+ke3to
+ke2t3r
+kets5te.
+ketting5s
+4k3e2tu
+ket3w
+3k2eu
+keviet5
+ke4vl
+4k1ex
+2k3e2z
+2k1f
+2k3g
+2k1h4
+k3ho
+khoud5s
+1ki
+2ki2d
+4kied
+kie4sp
+kie4s4t
+kie5ste
+kie4tj
+kieze4
+2ki^^eb
+kijk5l
+k3ijs
+4kijv
+4k1ijz
+ki3lo
+kilo5v
+ki3na
+4kinb
+4k5indel
+kinds5te.
+4kindu
+kin3en
+5king
+kings5l
+2k3inh
+kinie4
+k3inko
+4k1inr
+2k1ins
+2k3int
+4k3inv
+ki3o
+ki2p3l
+ki5se
+ki3s4p
+kit4s
+kits5te
+k1j
+2k3ja
+k3jew
+k3jo
+2k3ju
+4k5k4
+kke5nei
+kker4s
+kkers5ten
+kke3st
+1k2l4
+5klac
+k3ladi
+kla2p1
+k4las
+5klas.
+5klass
+k3last
+k3lat.
+k3latt
+3k4lav
+3k4led
+5kledi
+5kleed
+k5leer.
+4k5leg
+5klem
+4k5len
+k3ler.
+4klera
+k3lers
+k3les
+5k4le4u
+k5lic
+4klid
+k3lig
+2k3lij
+4klijs
+k4lim
+kli4me
+3k4lin
+k5lob
+4klod
+3klok
+5klok.
+k5loka
+k3loke
+k3lood
+5kloof
+k3lope
+5klos
+klots5te.
+2k5loz
+4kluc
+4kluih
+2k1m
+k3ma
+1k2n4
+4knam
+k4nap
+3k4nar
+5knec
+k5nem
+kni2
+5knie.
+knip1
+4k5niv
+3knol
+k3note
+2knum
+1ko
+ko4bl
+k4oc
+2k5oct
+4k1oef
+5koek
+koe4ket
+koers5p
+koes3
+koe3tj
+koets5te.
+koge4
+5ko5gr
+3k4ok
+ko5ko
+kol2e2
+kolen3
+2kolm
+5kolo
+ko4ly
+ko2m3a
+4komg
+kom5p
+k3omsl
+kom4str
+4komz
+konge4
+k4oni
+k3ontb
+kon4t3j
+kon4t3r
+koo4
+2k1oog
+kooi5tj
+koot3
+koot4j
+ko3pa
+4kopb
+4k3opd
+ko1pe
+ko5pen.
+4kopg
+3ko5pi
+5kopj
+ko2pl
+2kops
+4kopz
+2kord
+kor5do
+2k1org
+2k3ork
+kors5te.
+kor4ta
+kor4t3o4
+kor4tr
+ko3ru
+3k4o4s3
+4k3os.
+kos4j
+ko5sjere
+koso4
+4koss
+kot4st
+kots5te.
+4k1ov
+4k3ox
+2k3p
+kpi3s
+k4plam
+kpren4
+1kr4
+3kra
+k5raad
+kraads5
+kra4b
+4k5rad
+k5rand
+2k1rea
+2k3rec
+4k3rede
+k4ree4
+k5reep
+kreet3
+k3ref
+k2reg
+2k3rel
+2k1ric
+k3rijk
+k3rijp
+krij4t
+krijt5j
+k4rit
+k5ritm
+kroet5j
+2krol
+k4ron
+kron3t
+5kroon
+krop3a
+kro4to
+2krou
+k3ro5v
+3k4ru
+k5rub
+5kruis
+kru4l
+krul5a
+2ks
+k3sal
+ks3alm
+ks3an
+ks3ap
+ks1ar
+ks3as
+ks2e2
+k5sec
+ks3ed
+ks5ei.
+ks3ep
+k4serv
+ks3et
+kse3v
+ksges5t
+k4si
+k5sil
+ks1in
+k5sis
+k5sit
+ks1j
+k1sla
+ks3lab
+k4slan
+ks3le
+ks3li
+k4smo
+ks3na
+ks3no
+ks3nu
+kso4
+ks3om
+k5song
+k2s3pa
+ks5pand
+k4spar
+k1spe
+k3spi
+ks3poo
+k5spor
+ks3pot
+ks3pru
+k3spu
+ks5s
+ks4t
+k1sta
+k5staan
+k5staat
+k1ste
+ks5tec
+k4st3ed
+k3sten
+ks5tent
+kste4r
+kster5a
+k4sterr
+ks3th
+k3sti
+k3sto
+ks5ton
+k5stoo
+k4stop
+k5stot
+ks5trek
+ks3tri
+k3stue
+kst5uit
+k1sy
+4kt
+k1ta
+kt3aan
+k3taar
+ktaat5
+kt3ac
+kt3art
+k3te
+kte2c
+kt3eco
+k4tex
+kt1h
+k5tij
+kt3im
+kt3in
+k5tit
+kt3j
+k1to
+kt3om
+kto4p
+kt4or
+kt5ord
+kt5org
+kt5ori
+kt3o4v
+k1tr
+kt3res
+k5troll
+ktro3s
+k3tu
+1ku
+ku5be
+kui2f
+2kuit
+ku5k
+ku5me
+3k4u2n
+4k5uni
+5kuns
+ku2r
+ku3ra
+ku3re
+kur3s
+3ku2s
+kut3
+2k^^fb
+2kv
+k3ve
+kven4t3
+5k4waal
+2k3wac
+k2wad
+k1wag
+5k2wal
+5k2wam
+3k4war
+k5ware
+4kwat
+k3weer
+2kweg
+k1wei
+5kwel
+kwen4st
+kwens5te.
+4k1wer
+5k2wes1
+kwes5tr
+5kwets
+k2wie
+k3wijz
+k4wik
+2kwil
+2kwin
+k3wind
+4k1wo
+ky3
+2kz
+4l.
+2laan
+4laand
+l3aanh
+laa5re
+laar5tj
+laat5sta
+l3abon
+2lac
+la4ca
+5lach.
+la4cha
+5lache
+lach5te
+lacht4s
+l4aci
+la2d5a
+la4det
+2ladj
+4ladm
+la2d3o
+4la2dr
+lad5s
+la2du
+4ladv
+3lae3
+2laf
+la2fa
+la3fl
+lafo2
+4l3afs
+la2g3a
+la4gent
+la2go
+lag3r
+lags4
+lag5sa
+la2k3a
+la4ki
+la3kr
+2lal
+3lald
+lal4o
+lam4p3j
+lam4p5l
+lam4po4
+lam4s3p
+l4an
+4la2na
+lan3ac
+3land
+lan4da
+land5aa
+lan4d5oo
+lan4d3r
+lands5te.
+la4n3ec
+lanel5
+5lange.
+lang5l
+lang5sp
+lang5sta
+lan4k3a
+lan4k3l
+lank3w
+4lann
+la4nor
+lan2s
+lans3l
+lan4st
+lan4t3j
+lap3ac
+la3pi
+lap3l
+lap3o4
+la5pre
+la2p3u
+la3q
+lar3da
+2larm
+4larm.
+lar5st
+las3a4
+lase4
+la2si
+las3to
+5lastt
+la3te
+la4t3he
+lat5j
+la4t3ro
+4lats4
+lat3sl
+2lau
+5lauf
+lau4st
+l2auw
+la3v
+lava3
+la4vo
+5law
+l4az
+4lazi
+la4zij
+2lb4
+lber4t
+lbert5j
+lboot4
+2l1c
+lce4l5
+4ld
+ldaat5
+l2d3ac
+ldak4
+ld3alf
+l4da4r
+ld3arc
+ld3ari
+ld3art
+l2dau
+ld3eco
+ldeks5
+l4d3e4z
+ldi3a
+ld5oef
+ld3oli
+l2d3om
+l2d3on
+ld3oog
+l4do4p
+ld3opi
+ld3ord
+ld1ov
+l3dr
+l5drade
+ld3ram
+ld5rang
+ld3rat
+ld1re
+l5dree
+ld3rij
+ld3roe
+ld3rol
+ld3rom
+ld3rui
+ld3sa
+ld3sl
+ld3sma
+ld5sp
+ld5ste
+l3du
+ld3uit
+ld3uu
+ld1w
+le2a
+le4ane
+le3at
+leba4l
+lecht5st
+lee4
+leeg3
+leege4
+leeg5i
+4leekh
+lee5l
+leem3
+3leen
+4leep
+leep3o
+lees5e
+lees5l
+lees5po
+2leeu
+2leff
+lega5s
+leg3ec
+leg3l
+le4go
+le5go.
+leg5s
+3leidi
+4leier
+4leig
+lei5tj
+leit5s
+le4ko4
+4leks
+lek5str
+5leld
+le2le
+5leli
+l3elp
+le4n3a4d
+len3a4k
+3lene
+le4n3e4m
+len5kw
+le2no
+len3op
+len3sf
+len3sm
+4l3en5th
+le5o
+4lep.
+3le1ra
+le4r3a4k
+le5rei
+le4r3e4v
+ler5g4
+le3r4o
+le4ron
+ler4sl
+ler5spo
+4l3erts
+le2s
+le4sa
+le3sc
+les5et
+le3s4h
+les3m
+le4sp
+le3spe
+4l3essa
+les3t
+les4ta
+les5taa
+le5s4tel
+le3str
+le4s3u
+le4t4h
+le3tha
+let4i
+le5tin
+le4top
+le2t3r
+le3t4re
+let4st
+lets5te.
+le2t3u
+leu3ko
+leum3a
+leur4o
+leus4
+leu5ste
+5leuz
+leven4s
+levink5j
+4lexc
+4lexp
+l2fac
+l3f4ag
+lfa3s
+l2fau
+lfe4n
+l4f3end
+lf3ene
+l2fe2z
+lf3li
+l3f4lo
+lf3lu
+l4fo
+l5foe
+lf3o4l
+lf1op
+lf5ord
+lf5org
+l5fou
+l1fra
+l3fru
+lfs5ei
+lf4sl
+lfs3le
+lf2s3m
+lf4so
+lft4
+lf5ta
+lf5tw
+lf3uu
+2l1g
+l5gaar
+l4gap
+lge4n5a
+l3gla
+l3g4oe
+l3gog
+l3goo
+lg3s4
+lgse5
+4l1h
+1li
+li3ag
+li3am
+licht5st
+3lid
+5lid.
+5lidm
+lid3s4
+lie4g3a
+lie4gr
+lie3ka
+lie4sp
+lie3s4t
+lie4to
+li3eu
+3li^^e8
+3lift
+l4ig
+li3go
+lijk3a
+lij4m3a
+4lijmv
+5lijn
+4lijp
+3lij2s
+lijst5a
+4lijt
+4l3ijz
+li5kr
+lik5sp
+li4kw
+li3kwi
+lim4a
+li3mi
+2limp
+lim4p3j
+lin4da
+4linf
+4l3inh
+li5ni
+lin4k3a
+3linn
+l3inna
+2linr
+2l3ins
+lin4t3j
+l3inv
+4linz
+li3ob
+li5om
+li5o5s4
+li3ot
+li2pa
+li3pi
+li2p3l
+li5see
+2liso
+l5isw
+li1t2h
+lit3r
+lit4sa
+lit4sl
+lit4st
+lits5te.
+lit5sten
+2lix
+4l1j2
+lk3af
+l4k3ank
+lk3arm
+lk3art
+l3ke
+l4k3ei
+l4k3em
+lken5e
+lken4s
+l4k3ep
+l3ki
+lking4
+lk3laa
+lk3lag
+l5klas
+l4k3lev
+l5klim
+l3ko
+l5koe
+lk3ont
+lkooi5
+lk3opb
+l5kor
+l5kou
+l5kra
+l2kre
+lk3rep
+lk3res
+lk3rij
+l2k3ro
+lk2s
+lk4se
+lk4so
+lk3son
+lks3oo
+lks5taa
+lk3ste
+lks5tel
+lks5tr
+l4k3uu
+l3kw
+lk3wi
+l3ky
+2l1l
+l5la
+lla3d
+lla3g4
+lla5tr
+ll3eig
+lle3k
+ll4el
+lleo4
+ller5on
+lle3s4m
+lle5th
+llevie5
+l3l4i
+l3lo
+llo5f
+l5lon
+ll3sh
+2lm
+l3maa
+lmaat5
+lm3a4ca
+lm3af
+lma5^^ef
+l3mak
+lm3arc
+lm3art
+lma3s2
+lm3au
+l3me
+l4med
+lm3edi
+l4m3ep
+lme2s
+lme5te
+l3mi
+l3mo
+l5mog
+lm3oli
+lm3or
+lmro4z
+lm5sc
+lm3sh
+lm3su
+2l3n
+lni4s
+lo3a
+2lobj
+lo4boo
+loe4d5a
+loed3r
+4loeg
+loe4gr
+loen4st
+loens5te.
+4loes
+l3oeu
+5loev
+lo4faa
+lof5d2
+lof4s4
+log4
+log5l
+lo3go
+5logr
+log2s3
+lo4k3ar
+lo2k3o2
+lo4kr
+lo2ku
+2lo2l
+lo3la
+l3oml
+lom4p3j
+lom4p3l
+l3omt
+l3omv
+4lomz
+3lon.
+4lond
+5long
+lon4gaa
+lon4g3o
+lon4gr
+lon3o
+2lont
+lon4t3j
+3look
+loo5pi
+3loosh
+loot3e
+lo3pa
+4lopb
+l3opd
+lo1pe
+2l3oph
+2l3opl
+lop4la
+2lopn
+lo3p2r
+4lopt
+4l3opv
+4l3opw
+2lor
+3l4or.
+lo3re
+4l1org
+lo3ri
+l4o1r2o3
+3l4ors
+lo3ru
+lo3spe
+lost4
+los5to
+lo4s5tr
+lo5s2u
+lo2ta
+lot3a4l
+lo4tet
+lo2t3h
+lot3j
+lo4tof
+lot3r
+lou3s
+lo3v
+2love
+3lo5z
+4lp
+l1pa
+l3paa
+lp3aan
+lp3a4g
+lp3am
+l3par
+l3pas
+l1pe
+lpe2n
+l2pex
+l3pi
+l5ping
+lp3ins
+lp3j
+l1pl
+l3p4la
+l4plam
+l1po
+lp3of
+l3pom
+lp3on
+lp3ope
+l3pos
+l3pot
+l1pr
+lp3ram
+4l3r
+lraads5
+lrus5
+4ls
+l4saa
+ls1a2d
+ls3a2g
+l1sam
+ls3an
+l3sap
+ls3as
+l2sat
+ls4cor
+ls4cu
+ls3eco
+l4s3e2d
+l4sef
+l5sen
+l4s3e2p
+lsge4st
+l3s2hi
+l3si
+l4s3im
+l4sin
+ls3inj
+ls3ink
+ls3int
+ls4j
+ls5ja
+l3s4kel
+l3s2ki
+l1sl
+l3sla
+l2s4le
+ls5led
+ls5lee
+ls5leg
+ls5len
+l2s3li
+ls4lin
+l3slo
+ls4maak
+ls4med
+ls4mee
+l3smid
+ls3na
+l3sne
+l3sno
+ls3nor
+l3soc
+ls3of
+l3sol
+ls3op
+ls3o4r
+ls1ov
+l1sp
+l2spa
+ls3pac
+l3span
+ls3par
+ls4pe
+l3spi
+ls3pli
+l3spoo
+l4s5poot
+l3spor
+l2spr
+ls3pra
+l1st
+l3sta
+l4staf
+l4stak
+ls5tak.
+l3ste
+l4stek
+l4stev
+ls4ti
+l3sto
+l5straa
+ls5trak
+l5strat
+l3stu
+ls5ty
+l2su
+l3sur
+ls3us
+l3sy
+4l1t
+lt4aa
+lt1ac
+l4tam
+l5tame
+l5t4an
+lt4han
+l4t3hi
+l2t3ho
+l3thu
+lto4l
+lt3oli
+l2t3o4v
+l3tr
+ltra3s
+lt3rug
+lt3sl
+lt3sp
+lts5te.
+l3tu
+lu4b1
+lub5e
+lub5l
+lu1en
+3lui.
+5luia
+5luid
+luids3
+5luie.
+2luit
+luk2s
+luks3t
+lu3na
+3lunc
+2l3u2ni
+lu3sta
+lu3ta
+lut3j
+lut4st
+luts5te.
+lu3wi
+lven5s
+lvera4
+l1w
+1ly
+ly5i
+ly3st
+4lz
+lzooi5
+4m.
+1ma
+maas3
+maat5st
+m3act
+2m3adv
+ma5esto
+m3afl
+ma3fr
+2m3afs
+4m3afw
+m4ag
+ma3gl
+ma5go
+ma3gr
+ma^^ef4
+ma5ka
+ma5ke
+5ma3k4r
+ma3kw
+ma3l4a
+ma5lac
+ma4l5ent
+mal5st
+5m4an.
+man3ac
+m3anal
+man5da
+man5do
+mand4s
+5m4ann
+ma5no
+5man2s
+man4se
+mans5ee
+man4so
+mans3p
+man4s3t
+mans5ta
+man4th
+mant4r
+ma5pa
+ma3pr
+ma3q
+m4a5ri
+mariet5
+5m4ark
+mar3sh
+mar4s5t
+mar5ti
+ma1so
+ma3s4po
+5mass
+ma4ste
+ma3str
+ma5ta
+5mater
+mat5j
+ma4tom
+ma3tr
+mat4st
+mats5te.
+ma3v
+4mb
+m5bl
+mboot4j
+mbo5st
+mb4r
+2m1c
+2m1d
+m5da
+mdi3a
+mdis5
+m3do
+mdo3p
+m3dr
+m3dw
+1me
+me1c
+me5de
+5media
+5mediu
+mee5g
+mee3k4r
+mee5las
+mee3lo
+mee5re
+mee5ri
+5mees
+meest5al
+mee5stov
+mee5str
+m5eg.
+me3g2a
+mega5s
+m5egd
+m5egg
+m5egt
+me4i
+mei2n
+mei5tj
+m2el
+me4l4as
+mel5as.
+mel5dr
+mel4ko
+mel4kr
+5melo
+mel3s4m
+me4mi
+3men
+m4en.
+me3na
+men4as
+meng5ra
+men5k
+me5nor
+4menq
+men4s5uu
+men4t3j
+ment3w
+me5nu
+me3p2j
+2m3e2q
+me1ra
+me4r5aak
+me4r3a4k
+me4r4am
+mer5ante
+me4rap
+me3rau
+me4rav
+mer3ei
+5merk
+mer4kl
+mer4kn
+mer4kw
+mer5oc
+me5rong
+me3roo
+4m3eros
+me3rot
+mer4si
+mer4sl
+mers5m
+mers5ta
+me2ru4
+m4es
+me3s4h
+me4s4l
+mes5li
+me5slo
+mes3m
+me3so
+me4sp
+mes3pa
+me5spe
+me5spot
+me5stel
+mesto4
+mest5ov
+me3stu
+me5ta5n
+me3t4h
+3meti
+me5tr
+mets5te.
+meve4
+m3e4ven
+2mex
+3m^^e9
+3m^^e8
+3m^^ea
+2m1f
+mfa3t
+mf4l
+mf3li
+mf5lie
+m5fo
+2m5g
+mger4
+2m1h
+1mi
+3mid
+4mid.
+5midd
+mie5kl
+mie3st
+4m3ijs
+4m3ijz
+mi3kn
+5mili
+mi3lo
+mimie4
+m3imp
+mi5nar
+2minf
+5ming
+4minh
+2m5inr
+2m3ins
+mi5nu
+4m3inw
+m2is
+mis5f
+mi2s3i
+mi3s4la
+mi4st
+mi5stra
+mis5tro
+mi3t4a
+mi1tr
+mit4st
+mits5te.
+mit5sten
+2m1j
+2m3k2
+mkaart5j
+2m3l
+2m1m
+2m1n
+m5na
+1mo
+5mo.
+mo3a
+5moda
+5mode
+moed4s
+2moef
+5moei
+moers5t
+moe2s
+moes3p
+moes4te
+mog2
+5moge
+mogen4s
+mo3gl
+4mok
+5mole
+2moli
+mo4lie
+mol4m3a
+4molt
+3mom
+4m3omv
+mond3r
+mo5no
+5mons
+mon4so
+mon5ta
+3mooi
+2mop
+mo3pa
+m1ope
+m4opp
+mop4s
+mo3ra
+mo3r4e
+mo3ro
+mor4sp
+mor4st
+mors5te.
+5mos
+mo5sc
+mo4s5l
+mo3sta
+mo3t2h
+mot3j
+mot3ol
+mot4st
+mots5te.
+2m3oud
+5mouw
+mou4wi
+mo3v
+m3ox
+2m1p
+mp3ach
+m4p3af
+m5pan
+mp3arm
+mp5arts
+m4p3ec
+m5pen
+m4p3erv
+mp3ins
+m3pl
+mp3lam
+m5plan
+mp3leg
+mp3lei
+mp3lev
+mp3lie
+m4plu
+mp5olie
+m5pon
+mpon4g
+mp3ope
+mp2r
+mp3rec
+mp3red
+m5pres
+m4ps2
+mp5sc
+m5p4se
+mp3sh
+mp5su
+2m1r
+2ms
+m3sam
+ms3ana
+ms3ap
+ms2c
+ms3co
+ms3cu
+ms2j
+m3sje
+m1sl
+m2sle
+ms3len
+ms3lie
+m3s2m
+ms3ma
+m1sn
+ms3nee
+mso4
+m3sol
+ms3or
+m3s2p
+ms4t
+m3sta
+m1ste
+ms5tec
+m5stel
+m5sten
+m1sti
+m1sto
+ms5toc
+m4s5ton
+mst5s
+m3sy
+2mt
+m1ta
+mte5re
+mtes4
+mte5sta
+m1th
+m1to
+m3tr
+m1tu
+1mu
+mu5da
+mue4
+5muilde.
+2muit
+2muk
+mul3p
+mu2m3
+mu3no
+munt3j
+mu3sa
+mus5ta
+5mut
+mut3j
+muts2
+muts5te
+3muu
+5muz
+2mv
+mvari5
+mve4
+mvee3
+mver3e
+2m1w
+1my
+my3e
+2mz
+mze4
+mzet5
+4n.
+1na
+3na.
+3naal
+5n4aam
+4n1aan
+2naap
+n4aar.
+4n3aard
+5naars
+naars5tr
+naar5tj
+5naast
+5naat
+n3abd
+5nabe
+2nac
+na2ca
+nacee5t
+n2aci
+3naco
+4n3act
+na5d4a
+nad4e
+3nade.
+5n4a5den
+3nades
+3nadi
+4n3adm
+na5dra
+2n1adv
+5nae
+n3a^^eb
+4n1af
+na3f4lu
+n2a3g4
+na1h
+3nai
+3na^^ef
+n2ake
+na3k4l
+na3kr
+n3alb
+3n4ale
+5nalen
+4n3alf
+n3alm
+2naly
+4nalys
+3nam
+4namb
+name5st
+n4ami
+n3amp
+n3a2na
+n3ank
+3nant
+5nant.
+5nante
+n5antenn
+nan4t3j
+2nap
+nap3ac
+3na3p4l
+na3p4r
+nap3s
+nap5st
+2n1arb
+5nares
+2n3arg
+narie5t
+2n1arm
+3naro
+4nars
+nar4st
+nars5te.
+nar5sten
+4n1art
+nas2
+3na3sa
+na1s4l
+na1sp
+na3sta
+na3stu
+n4at.
+3n4ati
+nat5j
+4n3atl
+na3to
+nats4
+nat3sp
+5nau.
+5naus
+2na3v
+5naven
+3navi
+3nazif
+na4zij
+2nb
+nbe5st
+nbe5t
+nbots5te.
+2n1c
+n3ce
+nces4t
+n3che
+ncht2
+nch5tr
+nch3u
+n5co
+4nd
+n5da.
+nd3aan
+nd5aas
+nd3abo
+nd3act
+nd5adel
+nd3adr
+ndags5p
+nd3alf
+nd3alm
+n4d3ana
+n4dap
+n2dar
+nd3art
+n4das
+nd3ass
+nda3st
+n4dav
+n4d3a4z
+n3de
+n4d3edi
+n4d1ei
+nde5laa
+n4d3emm
+n5den.
+ndera4
+nder5aal
+nder5al
+nde4r5an
+n4d5e4rec
+nder5in.
+nder5og
+nde4ten
+ndi3a
+ndie4tj
+n4dijs
+nd5ijs.
+n4d3ink
+ndi3o
+n3d2ji
+n5do.
+n5doc
+n4d5of
+nd3oli
+nd3omd
+n4don
+n5dona
+nd5ond
+n5dons
+nd3ont
+nd3oog
+nd3ope
+nd3opp
+nd3ov
+nd5rap
+nd3rat
+nd1re
+nd4rek
+n4dres
+nd3rot
+nd3rug
+nd3s4cu
+nd4sec
+nd5set
+nd3s4i
+nd3sjo
+nd4sm
+nd3sp
+nd4spo
+nd4spra
+nds5taal
+nd3su
+nd3uit
+n2d3u4r
+nd5ure
+n4d3uu
+nd1w
+n3dy
+1ne
+3ne.
+ne5ac
+ne3am
+nebe4s
+3neck
+ne2cl
+ne4dit
+ne3do
+n3edu
+ne5dw
+nee4
+4need
+nee5k
+neel5d
+neel3o
+3neem
+4n1een
+nee5ri
+nee5se
+neet3a
+neet5o
+neet3r
+neet5s
+4n1eff
+ne3g2
+ne4gel
+negen5en
+nege4re
+4n1ei
+5neien
+n5eier
+n2eig
+5neigd
+5nei5t
+ne4k3r
+ne2la
+4nelem
+4nelf
+3nem
+4n3emb
+5n4eme
+4n3e4mig
+4n3emm
+4n3emp
+ne2n
+3n4en.
+5nenb
+5n4end.
+nen5do
+ne4n5enk
+ne4ni
+ne5nig
+nen5k4
+nen1o4
+5nenp
+nen5t4a
+ne5oc
+ne5ok
+ne5om
+neo5p
+ne5os
+ne5ot
+nep3ag
+ne3pe
+nepi3s
+ne1ra
+nera4d
+3n2e5re
+n3erfe
+2nerg
+ne4r3id
+ne3ros
+ner4sl
+ner4sp
+ner4st
+ners5te
+ner3u
+ne3ry
+3nes
+ness5a
+ness5t
+ne3sta
+nes3te
+nes4tei
+ne5s4tek
+ne4ter
+net3on
+net4si
+ne2u
+4neum
+ne3ums
+neu5ste
+2nex
+3n^^e9
+2n3f
+2ng
+ngaat5j
+n2g1a2d
+ng3af
+ng3ana
+n4ga4p
+n2gar
+nga5sl
+n3gav
+nge4ad
+n4g3een
+ngels5te.
+ng3emb
+n5gen
+nge4rap
+nge4ras
+n4giger
+n4gigs
+ng3ij
+n4gind
+ng3ink
+n4g3ins
+ng4l
+ng5lad
+ng5lam
+ng5lan
+ng5led
+ng5leu
+ng2li
+ng5lin
+ng5lop
+n3goe
+ng3of
+n3go^^ef
+n2g1on
+ng5oor
+ng5op
+ng3ore
+ng3org
+n3got
+n3gr
+ng3rac
+ng3rad
+ng3rai
+n4gras
+ng5rass
+ng4red
+n4g4ri
+ng5rie
+ng3rij
+n5gron
+ng3rui
+ng2s
+ng4se
+ngs5lop
+ngs5lu
+ng4s5ne
+ngs5tak.
+ngs5take
+ngs5trek
+ng5stri
+ng3uit
+4n3h
+nhek5
+1ni
+n4i2d
+nie5kle
+ni3eri
+nie4s3p
+nie4tr
+3nieu
+ni4g3ee
+nig3ra
+nij3f
+nij3k
+2n3ijz
+ni5kr
+nik4s
+niks3p
+3nil
+3nim.
+5nimf
+n3imp
+2n3in.
+n3inb
+2n1ind
+2ninf
+ning3r
+2n3inh
+n3inj
+2ninr
+2n1ins
+2n1int
+2n3inv
+ni3o
+ni4on.
+ni4one
+ni5or
+ni5o5s4
+nip3l
+3nis
+ni4sau
+ni4sel
+ni4s3ev
+ni3sfe
+ni2s3i
+ni4sl
+nis5n
+ni3sot
+ni5stel
+nis5to
+ni3t2h
+ni1tr
+nits4
+n1j4
+n3je
+njes4
+nje5sp
+nje5st
+nje3t
+4n1k
+nk3aan
+nk5aard
+nkaart5j
+nk3af
+n5k4am
+n4k3arb
+nkar5s
+n4k3asp
+n3kef
+nk3eff
+nk3emp
+n3ken
+nken4e
+nker5ku
+nk3id
+nk2j
+nk3lad
+nk3lod
+nk3luc
+nk3lus
+n2k3na
+n3kne
+n4ko4g
+nk3oge
+nkoot5
+nk4ra
+n4krim
+nk3rol
+nk5se
+nk5si
+nk3sl
+nk3s4m
+nk3sn
+nk4s5o
+nk1sp
+nk1st
+n4kw
+nk3waa
+nk3wez
+nk3wi
+2n3l
+2n3m4
+n3n
+n5n2e
+nnee5t
+nne3ne
+nnepo4
+nne4p5ol
+nne5te
+nnet4j
+nn4i
+nning5r
+nnoot5
+nno5v
+3no.
+1noc
+1no3d
+2noef
+noen5s
+noes3
+noet5s
+n5offi
+n3o2ge
+n5ogi
+1nogr
+3no^^ef
+no3kl
+no3k2w
+no2li
+1nolo
+1nom
+4n3om.
+n2oma
+n3oml
+n1oms
+n3omv
+2n3omw
+2nomz
+3n2on.
+3n4onb
+3nonc
+4n5ond
+n4o5ni
+4nont
+3nood
+4n5oof
+4n1oog
+nooi5tj
+3noot3
+noot4j
+3no3pa
+no4p3as
+4n3opb
+no1pe
+n1opg
+n5opleidi
+no4poo
+no4por
+2nops
+2n3opz
+2nord
+no3re
+2n1org
+1norm
+4norr
+3nors
+3norz
+1nos
+no3sf
+no3sn
+no3sp
+1not
+3nota
+not5a4p
+5noti
+not3j
+not3r
+3nou.
+no3v
+3nova
+no4ve
+3nox
+3noz
+2n1p
+npers5te.
+npi4s5
+npoor4
+npoort5j
+n3ps
+2n3r
+nraads5l
+n5re
+n5ri
+2ns
+ns3a4d
+n3sag
+n1sal
+ns3alp
+n1sam
+ns3an
+n3sanc
+n1sap
+n3s4cal
+n5scho
+ns4ci
+n4sco
+nsee5t
+n4sef
+nse4g
+ns5ege
+ns3eis
+ns5emp
+n3si
+ns3idi
+n2sin
+n5sing
+ns3inj
+ns3ink
+ns3int
+n1sjo
+n1sl
+n5sla.
+n3s4laa
+ns5laag
+n5slag
+ns5lap.
+ns5lapp
+n4sle
+n5slep
+ns4let
+n5sleu
+n5slib
+ns3lie
+n5s4liep
+n5slim
+n5slip
+ns5lot.
+ns3m
+ns5mac
+n3s4me
+n3smij
+n3smol
+n4smu
+n1sn
+n2sna
+n5sne
+ns3nod
+n4snoo
+n4snot
+n1so
+n2s3ob
+n2sof
+n3sol
+n2son
+ns3ong
+ns3onz
+ns4opp
+ns4or
+n2s3ou
+ns1ov
+n4s3paa
+ns3pad
+n1spe
+n5spee
+n5spel
+ns3per
+n4spet
+ns4pi
+ns1po
+ns3pol
+n4spot
+n1spr
+ns5q
+ns5s
+ns4t
+n1sta
+nst5aang
+nst5aans
+nst3a4g
+n3stal
+n3ste
+ns5tec
+n4st3ei
+n4s5teko
+ns5teks
+n5sten.
+ns5tent
+n5ster.
+ns5tes
+ns3the
+n1sti
+n3stig
+n4stijv
+n1sto
+nst5oef
+n4ston
+n3stor
+nst5rade
+n5stree
+ns5trekk
+ns5troe
+ns5trog
+nst5roos
+ns5ty
+ns3uil
+n3sy
+2nt
+n3ta
+n5taal
+n4t5aard
+ntaar5tj
+n5tab
+nt3ach
+nt4act
+nt1ad
+nt3aga
+n4t3art
+nt4as
+n5t4at
+n3te
+n5tec
+n4t3ei
+nte4lo
+n5tem
+n5te2n
+nte5nach
+ntene5ten
+nte5rad
+nte4rof
+n3t^^e8
+nt3ha
+n4tho
+n5thol
+n5tig
+nt3inw
+nt4jo
+n3to
+nt4og
+nt4ol
+n4t5oli
+n5ton
+nt4oo
+nt5oog
+n4top
+nt3opl
+nt3opm
+nt3opt
+n1tr
+nt3rec
+nt3rei
+nt3rel
+ntre4s
+nt5ribb
+nt5rij
+n5troos
+nt4rou
+nt3rus
+n5try
+nts3a
+nt5slu
+nt1sn
+nt4sno
+nt1sp
+nt4spr
+nts5pre
+nt1st
+nt5ste
+n3tu
+n4t3uit
+ntu4n
+n5twijf
+n5t4wis
+3nu.
+3nuc
+3nue
+nu3en
+nu3et
+4nuf
+2nui
+4n3uil
+nu2lo
+3num
+nu2m3a
+5numm
+nu2n
+3nunc
+n3uni
+2nu4r
+3n4u5ri
+nu5ro
+1nus
+nu4s3o
+nu3tr
+nut4st
+4nuu
+5nuut
+nuw5a
+nu2w3i
+2nv
+nve5na
+2n1w
+nx3
+n3xe
+nxo4
+1ny
+4n3yi
+4n3yo
+2nz
+nzet5s
+3^^f1
+4o.
+4oa
+o3aa
+o2ad
+o3af
+o1ag
+o3ah
+o3ai
+o1al
+oa2m
+o1a2n
+oa4tiev
+o3au
+o3av
+o3ax
+2o3b
+4ob.
+obal4
+obalt3
+3obj
+1o4bli
+ob5oor
+o4b5o4r
+4obr
+4oca
+ocaat5
+5o2cea
+o3cha
+o1che
+o3chi
+o3cho
+o3chr
+ocke4
+4o3co
+oco3a
+oco3s4
+oc3t4
+od5ac
+oda3g
+ode4m5ar
+ode4mo
+ode5re
+odes4
+odi3a
+o5dru
+od5sc
+od5sei
+od3s4i
+od2sl
+ods5lam
+od5slan
+od3sli
+od5smak
+od4s3o
+od3spo
+od4spr
+ods4t
+od5sta
+od4ste
+ods5te.
+od5stek
+od5sten
+od3w
+o4e
+oe5an
+oe3as
+oe2d3a
+oeda4d
+oede4n
+oe2d3o2
+oe4dr
+oed3re
+oed3ri
+oed3ro
+oe2d3u
+oed3w
+oe3e
+oe5er
+oe4f1a
+1oefe
+oe2fi
+oe2fl
+oef3la
+oef5le
+oef3lo
+oe4f5o4
+oe2f3r
+oege3l
+oeg5ij
+oeg1l
+oe4gou
+oeii4
+oei3n
+oei5s4
+oei5tj
+oei3tr
+oe4kaa
+oek5erk
+oeke4t
+oe2k3l
+oe4k3op
+oe4k3r
+oe2ku
+oek1w
+oe4lap
+oe4lar
+oel5dr
+oe4l3ei
+oe3lem
+oel5f
+oelo4
+oe5loe
+oelo5p
+oel3sp
+oe4m3ac
+oem3o4
+oen3al
+oe5n4e
+oen5gr
+oen3o
+oen4sn
+2oep
+oep5ind
+oe4pl
+oe5plo
+oe4p3r
+oe3pra
+oe4ps
+oeps3e
+oe2p3u
+4oer
+oe1ra
+oe4raa
+oer5aal
+oe4r3a4l
+oer4e
+oer5ei.
+oer5eie
+oero2
+oe3roe
+oer3og
+oer5om
+oer4sl
+oer4sp
+oer4sta
+oers5tak
+oers5te.
+4oes.
+oe3sfe
+oe3si
+oe4sli
+oe4s3o4
+oes4ta
+oes4th
+oe3sto
+oe4taa
+oe2t3h
+oe5t4i
+oe2tj
+oe4t3o4
+oe5toe
+oe4t3ra
+oet4s3p
+oet3w
+2o^^eb
+of3ar
+of3at
+o4fav
+of4d1a4
+ofd3ei
+of2d3o
+of2d3r
+ofd3w
+of3l
+o4fli
+o4flo
+4ofo
+of3om
+o3foo
+of3op
+o3for
+of3ox
+of1r
+o3f2ra
+of5se
+of4sl
+of5sla
+ofs3le
+of2sp
+of3spe
+ofs3pl
+of3spo
+ofs3pr
+ofs3tr
+ofs5tra
+4oft
+of4tu
+oft3ur
+oft3uu
+of3ui
+og5ac
+oga4l
+og3al.
+og5de
+og3di
+oge4d
+oge5laa
+ogel5ei
+2ogem
+o3ger
+oge4ro
+oger5on
+oge4s3t
+2og5h
+1ogig
+og1l
+og5ne
+og3op
+og3sp
+og3sta
+og4st5ei
+og3sto
+og4ston
+og4str
+ogs5tro
+og3ui
+o3gy
+2o1h
+3ohm
+4oi
+oi3do
+oi1e
+oi3j
+oi5k
+o3ing
+oi3o4
+oi3s4
+oi5sc
+ois2p
+oist2
+ois5tj
+o3^^ef
+2o1j
+2ok
+o3ka.
+o3kaa
+o4k3aas
+ok3ab
+ok3ag
+o3kal
+ok3ank
+o4k3a4z
+ok3ef
+o2k4l
+ok5let
+o4kli
+ok5lu
+o2k3n
+ok3o2l
+ok3op.
+ok3o4pe
+okos5
+o2k3ou
+o2k3r
+ok4ra
+ok1sa
+ok3s4l
+ok3sn
+ok5spri
+ok1st4
+oks5te.
+ok5sten
+ok4s5tr
+ok5te
+okter4s
+oku4
+ok3ur
+ok3uu
+ok1w
+ok2wi
+o1la
+o3l4ab
+ol3ac
+o3lal
+ol3a2p
+ol3arm
+ola3s4m
+4old
+ol3d4o
+ol3d2w
+o1le
+o3le.
+ole5g
+ol1ei
+ol3eks
+ol3emm
+o3len
+o5ler
+oleu2
+ole3um
+ol3exa
+ol2fa
+olf3l
+ol3fr
+olf5sl
+ol2gl
+ol2g1o
+olg5rap
+ol4gre
+ol4g3ri
+ol2g3u
+o3lia
+o3lic
+o5lid
+o3lik
+o3lin
+o5ling
+ol3int
+o3lit
+ol3kaf
+ol5ke
+ol2kr
+olk4s
+olk2v
+ollie4
+o3lo
+o5loc
+olo3k
+ol4om
+o4lop
+ol3op.
+ol3opp
+olo3s4t
+olo4ve
+ol4pra
+4ols
+ol5se
+ol4s5h
+ol5si
+ol1sj
+ol3s4l
+ol3s4n
+ol3so
+ol3sp
+ol5ster
+4o1lu
+ol3uit
+olu4r
+4oma
+om2aa
+om1ac
+om1af
+o3man
+4ome
+o4m3ef
+om3ela
+omen4s
+omen5ste.
+ome5ren
+omer5kl
+ome5sp
+ome5t
+om2i
+o4m3int
+4omm
+4omo
+omo5l
+omo3s
+om4p5ei
+5omro
+om3sl
+om4ste.
+om3ui
+3omz
+on1ac
+on4ag
+o4n3am
+on4an
+on3ap
+ona3th
+2onc
+on4d3ac
+on5d4as
+on5der
+ond5ete
+on4d3id
+ond5ijs
+ond5om.
+on2dr
+ond3re
+ond3ro
+ond5sj
+ond5slo
+on3d4u
+on4dur
+o5ne.
+o3neb
+o2n1e2c
+on3ei
+on3erf
+on3erv
+one3st
+4onet.
+on1e3v
+ong5aan
+ong5aap
+ong3ap
+4ongen
+ong5le
+ong2r
+ongs4
+ong5se
+ong3sp
+ong3st
+on5id
+o5nig
+on4k3ap
+onke5lap
+on3k2i
+on4k3lo
+on3kn
+on5kw
+onnes4
+onne5st
+o4n3of
+ono3l
+on1on
+o2n1ov
+on3sc
+ons4e
+on5sei
+ons2f
+on3s4m
+on2s3n
+ons5op
+on3sor
+on1s2p
+ons4pe
+on3spl
+on1st
+on5sten
+on5str
+4ont.
+on4taa
+3ont1h
+on4tid
+3ont1s4
+ont5sp
+3ontv
+1ont3w
+on1ui
+on3ur
+o4o2
+4oo.
+oo3c
+4oo4d
+ood1a
+ood1e4
+oo5de.
+ood1o
+ood1r
+ood3sl
+ood3sp
+4oof
+oo3fi
+oo4g
+oog1a
+oog3e
+oo5gi
+oog1r
+oogs4
+oog3sh
+oog3sl
+ook3a
+oo3ke
+ook5l
+ook3s4
+ook5st
+oo4k5w
+oo4l
+ool5a2
+oole2
+ool3ed
+ool5f
+ool5g
+oo5lig
+ool3ij
+ool3k
+ool1o4
+ool1u
+oom5a4
+oo3me
+oom3i
+oom1o4
+ooms5te.
+4oon
+oon5a
+oon5du
+oon3in5
+oon5k4
+oon1o
+oon5ta
+oo4p1
+oopa2
+oop5ee
+oop3o4
+oop3r
+oop4sp
+oor3a
+oord5aa
+oor5dop
+oor1e4
+oor3g4
+oor5i
+oor5k
+oor5m
+oor1o
+oor3sm
+oor5ste
+oor5sto
+4oort
+oor4th
+oo4s
+oos3a
+oo5se
+oos5n
+oo4t
+oot1a
+oot3es
+oot3h
+oot5o
+oot3r
+oot4sl
+o1^^f6
+2opa
+o4p3ac
+op3ad
+o4p3af
+o4p3ak
+op3am
+o3pan
+op3and
+op3at.
+op3att
+3opbre
+3opdr
+o3pe.
+op3ee
+op5eet
+op3ei
+o1pel
+o3pen.
+3o4peni
+o5per.
+o4pera
+op3e4te
+op3e4v
+4opf
+o1pi
+o5pic
+op3i2d
+opie5t
+op3ijz
+op3in.
+o5pina
+o5pis
+4op1j
+op3l
+op5los
+1opn
+o1po
+opoe3
+op1of
+o5pog
+o5poi
+o5pol
+op3ond
+o5poni
+op3ont
+op3ord
+op3o4re
+op3o4v
+op1r
+op3ric
+o4pru
+o4ps
+op5s2c
+op5se
+op5si
+3ops4l
+ops4m
+op3sma
+op3sn
+op3so
+op3sp
+op3sta
+op3su
+2opt
+4opt.
+op5tr
+op3ui
+o2p3u2n
+o1ra
+or3ach
+or3act
+or3adm
+or1af
+ora4g
+o4r3alg
+or3ana
+o5rate
+or4daa
+or4d3as
+or4denv
+or4do
+ord5ond
+ord3or
+ord3o4v
+or3dr
+or4drad
+ord3w
+o1re
+ore5ad
+4orec
+oree4
+ore4no
+or2gl
+o1ri
+o5ria
+3ori^^eb
+o5rig.
+o5rigere
+o4r3ink
+or3ins
+ork2a
+or5k4e
+or3kl
+or5kn
+or3kw
+or4m3ac
+or4mas
+or4m3ei
+or4n3ac
+or3ni
+orno3s4
+or3oe
+o3rol
+or1on
+or3ont
+or1oo
+or1o2p
+or3or
+o3ros
+or5ov
+4orp
+or4p3ac
+orp4s5c
+or3sag
+or5sc
+or5se
+or3sli
+or3smi
+or3so
+or4son
+or3sp
+or5s4pa
+or5spu
+or4t3ak
+ort5een
+or4t5ijl
+or2to
+or4tof
+or4t3oo
+or4tred
+ort5sp
+ort5ste
+or1u
+o3ry
+orzet5
+2os
+o4sac
+o5sas
+o3sau
+4o3s2c
+osca4
+o4sci
+o5s4cl
+os3cu
+o5sed
+os4el
+o5ser
+os3f
+os4fe
+o4sha
+o3shi
+os2ho
+o3si
+o4sj
+os5jer.
+o4sk
+os5ko
+os3l
+os5li4
+o4s3m
+os4n
+os5no
+o3s2o
+os3pa
+os3per
+os1pi
+os4pir
+o4spr
+os4s5m
+o2s3t
+os4ta
+os5taal
+os5taar
+osta3c
+ost3a4g
+os5tan
+os5tar
+o3stas
+o3stat
+os5te.
+os4tem
+o5stero^^ef
+os4th
+os4to
+os5toli
+os5tou
+ost3o4v
+os5tra.
+os5traa
+ost3re
+ost3ri
+o3stro
+os5trum
+os1tu
+o3sty
+o3su
+o5sy
+4o1ta
+ot3aar
+ot1ac
+ot3af
+o3tag
+ot3akt
+ot3app
+ot3art
+otas4
+o5tat
+o3te
+ot3e2d
+o5tee.
+o5tees
+o5teg
+ot3ei
+ote4lan
+o5ten
+o5ter
+oter5sp
+ote4st
+ote4t
+ot3eta
+o1th
+o2t1ho
+ot3hu
+o4tj
+otje5sp
+otli2
+o1to
+ot3off
+ot3olv
+o5tom
+ot3ont
+ot3opm
+oto5po
+ot3opr
+o5t4or
+oto3s
+2otr
+o1t4ro
+ot3ru
+ot5s4i
+ot2sl
+ot3sla
+ots3li
+ot3smo
+ot3sn
+ot3sp
+ot4s3pa
+ot4ste.
+ots5tek
+ot5sten
+ot4stu
+o1tu
+ot3ui
+o3tul
+ot5w
+4ou.
+ou5a
+ou1c
+ou4d1a
+ou4des
+ou2do
+ou1e
+oue2t3
+ou3k4
+ou4ren
+ou5ren.
+ou5renn
+ou2r3o2
+4ous
+ou3sa
+ous5c
+oust4
+ou2ta
+out3h
+out1j
+ou2t3o
+out1r
+out5sp
+out5ste
+ouw3a
+ouw5do
+ouw5ins
+o2v
+2o3va
+o5ve.
+2o5vee
+3o4verg
+over5sp
+over5ste
+o5ves
+2ovi
+ovi5so
+4ovl
+4o3vo
+4ovr
+ovu3
+4ow
+o1wa
+o1we
+o5wen
+ow3h
+o1wi
+ow2n
+o3wo
+ow3r
+o4x
+oys4
+ozet5
+^^f63l
+^^f61p
+^^f6pe1
+^^f64r
+^^f6s4
+^^f6s5t
+^^f65su
+4p.
+4paan
+paar5du
+paar5tj
+5paas
+3pab
+p3acc
+2pach
+pacht5s
+p4aci
+5pacu
+3pad.
+pa4da
+4padv
+pa3e
+4p3afd
+1pag
+pag2a
+pa4gen
+pa3gh
+p4a5gi
+3pak
+pa2k3a
+4p4ake
+pa4ki
+pa4k5l
+2p3alb
+3pale
+pal3f
+pa3li
+paling5s
+palle4
+palm5ac
+pal4mo
+pa4m
+pa3na
+pa4n3a4d
+5panee
+5panel
+4pank
+pan5sp
+pan4tr
+1pap
+pa4pe4t
+5papi
+pap3l
+pa3po
+pa3pr
+4par.
+3pa3ra
+p3arb
+pard4
+par3da
+3park
+par4ka
+par4k5l
+3parl
+4parm
+pa5ro
+4parr
+par5ta
+3parti
+part3j
+3partn
+pa5ru
+paru5r
+1pa4s3
+pa5sa
+pas5c
+pa5se
+pa5so
+pas4th
+pas5to
+pas5tr
+pa5te
+1path
+p3atl
+3pa3tr
+pats5te.
+2paut
+5pauz
+pa4vl
+5paz
+2pb4
+2p1c
+2p3d2
+pe4al
+4peci
+p3e2co
+3pectu
+1ped
+pe3de
+pe3do
+p4ee4
+3pee.
+3pee^^eb
+pee5li
+4peen
+5pees
+3peg
+1p4eil
+pei4l3a
+4peis
+pek5ee
+pe2k3l
+pe2k3n
+pek5s
+p4el
+pe3l4aa
+pe4l3ak
+pel5dr
+pe3le
+pe4l3ee
+pe4l3e4t
+pe3l4i
+pe3l4or
+pel5si
+pel3so
+pel3sp
+2p3emm
+pe3na
+pe4nak
+pe4nap
+pe4nau
+pe4naz
+p3ency
+pen5d4r
+penge5
+pen5k
+5penn
+pen3sa
+pen5sl
+pen3sm
+pen5sp
+pent4
+pen5to
+2p3epi
+pep3o
+pep5s
+p4er.
+pe1ra
+pera3s4
+per4at
+3perc
+pe4r5eg
+pe5req
+1peri
+peri3s
+per1o
+pe3ron
+pe5ros
+3pers
+per4sm
+per5sti
+per4str
+p2ert
+3pes
+pe3sa
+3pet.
+pe5ta
+5pe5ter
+3peti
+pe4t3ra
+pets5te
+petu5
+3peuk
+5peut
+1p^^e9
+3p^^ea
+2p1f
+2p1g
+pge5s
+2p1h4
+4p3ha
+3p4hec
+p4his
+4pho
+pi3am
+pi5an
+pi4at
+2pid
+piek5la
+5piep
+pie4r3o
+pie4s3p
+pie4tj
+pi2g5a
+pi3gl
+3pij.
+pij3k
+pij5ke
+pij4li
+3pijn
+5pijp
+pij4p3a
+2pijz
+pi4k3l
+pilo5g
+pi5nam
+2pind
+3pinda
+3p4ing
+5ping.
+pin4ga
+pin5gri
+4p3inj
+pink3r
+pink5s
+4pinr
+2pins
+pin4ta
+pi5o
+pis5n
+pis5ta
+pi3th
+pit3j
+pit3r
+pit4sp
+2p1ja
+pjes5
+p3ji
+p1jo
+2p1k
+pkaart5j
+p2l2
+p3la.
+plaat5j
+2p3lad
+pla3di
+4p3lamp
+4p3lang
+p4lant
+p3lap
+1p4las
+3p4lat
+pla4t3r
+5p4lay
+p4lec
+plee5tj
+p3leid
+3p4len
+p3lep
+pleu5ro
+p4lex
+2p3lig
+4plij
+p4lom
+p3lone
+p5lood
+plooi5tj
+p3loon
+p3luie
+2p1m
+pmans5t
+2p1n
+p3na
+3pneum
+3po.
+poda5
+3poei
+poe2s3
+poes5t
+poets5te.
+3poez
+3po^^eb
+p2ofa
+3pogi
+po5gr
+po2k3i2
+po4kol
+1pol
+po5l4o
+polo3p
+pol4s
+pols5te.
+1pom
+2p3oml
+3ponds
+pon4sm
+pon4st
+pons5te.
+pon5ta
+5pony
+poo3d
+poo5de
+4poog.
+3pool
+poo5len
+4poor.
+poor4tj
+poot3
+po4p3a
+4popd
+2pope
+pop5h
+2p3org
+2p3ork
+po3ro
+p4ort
+5portef
+por4to
+por4t5ra
+po3ru
+1pos
+po1sa
+po3sf
+po4taa
+po4t3as
+po5te
+potes5t
+pot1j
+pot3r
+3poul
+po3v
+4p3p
+p5pa
+p5pe
+ppe4l3o
+ppe5ni
+pper5ste
+ppie5k
+ppij5p
+p4ps
+pr4
+p2ra
+3pra.
+p5raad
+praat5j
+p5rad
+3prakt
+4pram
+p5rand
+3prao
+4p3rap
+p4rat
+p4rax
+4preeku
+1prem
+p3remm
+3prent
+pren4t5j
+3pres
+p3reso
+3pret
+pre4t3j
+pret3r
+4pric
+4p3riek
+4priet
+prie4t5j
+1prij
+3prik
+3princ
+pring5s4
+5prins
+3p4rio
+3p4riu
+5priv
+5p4rob
+3p2roc
+1p2rod
+p3roed
+3proef
+proet5j
+3proev
+5p4rof
+5p2rog
+1proj
+pro3la
+3prom
+p3rood
+prooi5
+pro5pa
+p4roq
+3pros
+pro5sc
+pro4s5t
+pro3t4a
+3proto
+3pro5v
+4proy
+pru2t
+prut3o4
+2ps
+p3sab
+ps3a2g
+p3sak
+ps3ar
+ps3ass
+4pse
+ps3erk
+p4s3et
+p3si
+p4s3i2d
+p4sin
+p5sis
+p1sl
+ps3le
+ps2me
+ps5mi
+p4s3na
+ps3neu
+p4sof
+p3sol
+ps3opt
+pso4r
+p1sp
+ps2pl
+ps3ple
+p1s4t
+p3stat
+p3ste
+ps5tent
+ps5tes
+ps5th
+ps3tor
+ps5tron
+p3stu
+ps5ty
+3psy
+5psyc
+p3sys
+4p1t
+pt3ad
+pt3alb
+p3te
+p2t1h
+p5ti
+pt3j
+p4t3o4v
+p3tr
+pt3ric
+1p2u
+3pub
+pu3ch
+pu3e
+puil3o
+pul4st
+3pun
+4pun.
+punt3j
+3put.
+puter5in
+put1j
+pu2t3o
+put3r
+put4st
+puts5te.
+2pv
+pvan4
+pvari5
+2p1w
+1py1
+2p5z
+1q
+5qe
+qu4
+que4s
+5quo
+4r.
+r2aa
+2raan
+4raand
+3raar
+5raar.
+4r3aard
+5raars
+raar5tj
+2rac
+ra4ca
+ra3ce
+5racl
+rad4a
+3radb
+ra5den
+ra3di
+5radia
+3radio
+4radm
+4r3adr
+3rad3s
+4radv
+2rafd
+r4aff
+raf5ond
+ra3fra
+3ragez
+ra5gi
+ra3g2n
+ra5go
+rag4s
+3rais
+raket3
+ra3k4l
+rak5r
+4r3a2la
+ra4l3ee
+4r3alf
+r3a4lim
+r3alt
+ra4man
+r5ameu
+ra3mi
+r2amp
+4rana
+ran4dr
+ran4g3o
+ran4gr
+r5angst.
+ra4nim
+4ranj
+ran4kl
+rank3w
+ran4sa
+ran4st
+ran4t3j
+r3antw
+ra3o
+4rap.
+ra3po
+4rappa
+rap5roe
+ra3q
+2r3arb
+r4a5re
+4rarit
+2r1arm
+4r3arr
+2r1art
+ra5sei
+ra4sk
+ra4sl
+ra1so
+ra2sp
+ras3po
+rast5ri
+r4ati
+rat5j
+ra4tom
+ra4tra
+ra5tri
+rat3sp
+rat4st
+rats5te.
+ra3t4u
+2rau
+3raus
+r1aut
+5ravr
+ra4zij
+rbe4ti
+r1c
+r3ce
+rces3
+r3chi
+r3co
+2r1d
+r4d3act
+rd3alk
+rda2m
+rd5ama
+r3dan
+r2d3ar
+rd3ei
+r4d5e4las
+rden5dr
+rde5o4
+r4derva
+rde5s4t
+rdi3a
+rdi5o
+rd5l
+r3do
+r5doc
+r4d3ol
+rd5olie
+rd3ont
+rd3oos
+rdo3pe
+rdo3v
+rd3ras
+rd3res
+rd5roos
+rd2ru
+rd3sa
+rd3s4c
+rd3so
+rd1sp
+rds4t
+rd5sta
+rd5ste
+rd3su
+r3du
+rd2wi
+rd5wo
+3re.
+1reac
+re4ade
+4reak
+re3amb
+4re5at
+re3co
+3recr
+rec5ta
+3reda
+3redd
+rede4s3
+4re4diti
+3redu
+re5dw
+ree4k
+2r1een
+ree3n4e
+r5eenh
+ree2p
+reeps5
+ree5r4ad
+4reers
+reer5ste
+r3eerw
+ree4s
+ree5sh
+r4ef
+4refb
+2reff
+3refl
+re3fu
+1reg
+4reg.
+4regd
+rege5ne
+rege4s
+4regg
+3regi
+re3gl
+4regt
+4reie
+4reil
+4reind
+rei5tj
+5reiz
+re4kap
+5rekeni
+re2k3l
+re2k5n
+re4ko
+re4k3re
+rek3sp
+re4ku
+re1kw
+rel4di
+rel4d3o
+reld3r
+re4l3ei
+rel5k
+re4lu4r
+3rem.
+re4mai
+remie5tj
+re5mo5v
+2remp
+3r4en.
+re2na
+re4naa
+ren5aar
+re5nade
+re3nal
+re4n3an
+ren3a4r
+r4end
+5rendee
+r5endert
+re5ne.
+re4nel
+re5nen.
+ren5enk
+ren3e4p
+re5ner.
+ren5erf
+ren5erv
+5renf
+2r1eni
+5r4enkl
+r4enn
+re4noc
+ren4og
+ren4opl
+re3nov
+5r4enp
+4renq
+ren4sl
+r4ento
+r3entw
+r5enveer
+re4of
+re4op4
+re5pa
+3repet
+re4pie
+4req
+re3qua
+4r1erf
+2r1erg
+re3r2o
+rer4s
+2r3ert
+4r5erv
+2rerw
+re3sa
+re5se
+re4sl
+res5le
+res3m
+re2s1p
+res3t
+re4tem
+re3t4h
+ret4i
+re4tik
+re5tin
+2retn
+re4t3o4g
+re4t3oo
+rets5te.
+re2u
+reur5es
+reus4t
+reu5ste
+3revis
+3revo
+2r3ex
+r4f3aa
+rf3act
+r2f3a4g
+rf3al
+r3fas
+r3fe
+r4f3eng
+r1fl
+r4f3lag
+rf3lev
+r2f3li
+rf3lus
+r4f3op
+r1fr
+r4f3re
+r5frea
+rf2s2
+rf3sm
+rf3sp
+r4f3u4r
+rf3uu
+r1g
+r4g3ab
+rg3amb
+r4g3een
+rg3ei
+rg4eis
+rgel5dr
+r5gen.
+rge4ra
+rge5rap
+r4g3ins
+r5glas
+r3glo
+r4g3lu
+rg4o3v
+r5grij
+rg3rit
+r3g4ro
+rg1s4
+rg2sm
+rg5so
+rg4s5pr
+r3h
+ri5abel
+ri4ag
+ri2ak
+ri5an
+rias4
+ri4av
+ri4bl
+4rice
+ri3co
+ridde4
+ri3di
+ri4dol
+ri4doo
+rie5dr
+rie4k5ap
+rie5kl
+rie3kw
+rie4la
+riel5aa
+rie4lei
+rie4ro
+rie4ta
+riet3o
+ri1eu
+ri3fl
+ri3fr
+r4ig
+ri4gaa
+ri3gl
+5rigste
+r4ijl
+4r5ijl.
+r5ijld
+r5ijlt
+rij5o
+rij3pl
+rij3pr
+rij3sp
+rij5ster
+rij4str
+4rijv
+ri4k5l
+rik5n
+ri3k4o
+ril5m
+ri3ma
+rim4pr
+4r3inb
+4rind
+ri5ne
+4r5inf
+r4ing
+4r5ingan
+r5ingeni
+ring5l
+4r3inh
+ri4nit
+rin4k3l
+r3inko
+4rinkt
+r3inl
+4r3inna
+4r1inr
+4rins
+r3inst
+4rint
+4r1inv
+ri5on
+ri3o5s
+ri4sam
+ri3sc
+ri3sot
+ris5to
+rit3j
+rit3ov
+rit4st
+rits5te.
+rit5sten
+3ritt
+r5j4
+rjaars5
+r5ka.
+rkaart5j
+rk3adr
+rk3af
+r2kah
+rk3ang
+r4k3art
+r2k3ei
+rke4n
+rken4s
+rker4sl
+r4k3erv
+rke4s
+rke5stree
+rke5strer
+rk5iep
+rk3ijv
+rk3inb
+r4k3ink
+rkjes5
+rk3lag
+r4k3lat
+rk5leid
+r2klo
+rk3loo
+rk3lus
+r3kn
+r4kne
+r2kob
+rk3olm
+rk3omg
+rkoot5
+rk3opg
+rk3ord
+rk5os.
+rk5oss
+rk2r
+r5k4ran
+rk4ri
+r5kris
+r5kron
+rk1s
+rk3s4f
+rk5si
+rks4p
+rk4t5e4v
+rkt3h
+rk4ti
+rkt3o
+rkt1r
+rk3uit
+r1kwa
+rk3waa
+rk5wat
+rk3wee
+r1kwi
+rk3win
+r3l
+rlaat5ste
+rle4g3r
+rlink4s
+rlinks5te
+rlofs5
+rlui5t4
+r1m
+rmaf4r
+r4m3art
+r2m3eb
+r2m5eg
+rme4r3a4
+rmes3
+rme4t3j
+rmet5st
+rm3inh
+rmi2s
+r3mo
+r5moe
+r4mop
+rm3opm
+rmors5te
+rmos5f
+rm3s4a
+rm1st
+rm3uit
+rmun4
+2r1n
+r3na
+r5n4am
+r4n3ap
+rn3ars
+rnee5t
+r4n3ene
+rnes3
+rne5te
+rne4t3j
+r2n5id
+r2nin
+r2n1on
+rn3oor
+r5noot
+rn3ops
+r5not
+rn3ove
+rns4
+rn3sm
+rn3sp
+rn1st
+rn3sta
+rn3th
+rn5tj
+rn5to
+r3nu
+rnu5r
+ro1a
+ro5ac
+r4oc
+ro1ch
+ro3d4o
+3roe.
+4roef
+4roeg
+roe4g3r
+3roem
+roens4
+roen5sm
+roep3l
+roe4rei
+roet4j
+4roev
+3ro^^eb
+r5offi
+r4ofi
+ro3fl
+roges5
+1ro^^ef
+ro3kl
+3rokm
+rok3sp
+r4ol.
+ro2l3a
+role5st
+rol3g2
+2roli
+rol3ov
+ro5ma
+ro3mo
+4romz
+r2on.
+ron3a4d
+5r4onal
+ron4da
+ron4d3o
+ron4d3r
+ron4d5u
+r2one
+r2oni
+r2onk
+ron4ka
+r2onn
+r2o1no
+r2ons
+ron4ste
+rons5te.
+4ron2t
+ront3j
+ront3r
+ro3nu
+4ronv
+3roof
+2roog
+4roon
+2r1oor
+root5ste
+ro3pa
+ro4paa
+ro4pan
+4ropb
+ro1pe
+ro5pee
+ro4pin
+ro3p4la
+4ropn
+r4opo
+rop5rak
+rop3sh
+r4opte
+ro4pu
+ror5d
+ro3ro
+ro3sa
+ro5se
+ro3sf
+ro3sh
+r4o5si
+ro3sp
+ros4s5t
+ro5stel
+ros5tra
+ro5te
+ro3t2h
+rot3j
+ro5ton
+ro3tr
+rot4ste
+rots5te.
+r1oud
+3rou5t4
+ro3v
+ro4ve
+ro5veri
+4roxi
+3roy
+r1p
+r3pa
+rp3aan
+rp3adv
+rp3ank
+r5pee
+rp3eis
+rpi3s
+r2p3j
+rp4lo
+rp5lod
+rpoort5j
+r4p3o4v
+r4p3rec
+rp3ric
+rp4ro
+r3psa
+rp4si
+rp2sl
+rp3sli
+rp5spe
+rp4s5to
+2r5r
+rre4l3u
+rren5s4
+rre5o
+rreu2
+rri5er.
+rrie4t
+rron5k
+rrot4j
+4rs
+rs3a2d
+rs3a2g
+r3sal
+rs3alm
+rs3amb
+r3san
+rs3ana
+rs3ap
+rs3ar
+rs3as
+rs4asse
+rsa4te
+r5schi
+rs2cr
+r4s3eis
+rsek5ste
+rs4et
+rseve3
+r2s3ez
+rs4fer
+rs4hal
+r3s2hi
+r3s4hoc
+rs3hot
+rs3ini
+rs3int
+r4sj4
+r5sjac
+r5sjou
+r5sjt
+r3s4kat
+r1sl
+r4slan
+r5slec
+r5slep
+r5sleu
+r5slib
+rs4lie
+r5sling
+rs3lob
+rs5loep
+r4s3loo
+r5sluis
+rs4m
+r5smaak
+rs5maal
+rs5mak
+r3sme
+r3smij
+rs5mis
+r5smit
+rs5mu
+r1sn
+r2s3na
+rs3neu
+r2s3no
+r1so
+r5sol
+rs3ong
+r2sor
+rsorkes5
+rs1ov
+r1sp
+r3spaa
+rs3pad
+r4s3par
+rs4pare
+r3spe
+r5spec
+r5spee
+r5spek
+rs4pene
+r4s3pet
+r5spit
+r5spoe
+r5spog
+r5spon
+r5spoo
+rs3pot
+r5spraa
+r4spu
+r5spul
+rs3put
+r1s4t
+r4s5taak
+rst5aang
+rs5tas
+r5stat
+r3ste
+r4s3te.
+r5ster.
+r5sterk
+rs5term
+r5sters
+r5stes
+rste5st
+r4steva
+r3sti
+r4stit
+r3sto
+rs5toma
+r4ston
+rst5ora
+r3str
+rs5trap
+r4st5red
+rs5trei
+r5stren
+rs5trog
+rst5roz
+r3sty
+r3su
+rs3usa
+r3sy
+4rt
+r1ta
+r5ta.
+r4t3aan
+rt5aand
+rt5aanv
+r4t1ac
+rt1ad
+rt3af.
+rt3aff
+rt3am
+r5tans
+r2tar
+rt3art
+r4tau
+r2tav
+rt5c
+r5teco
+rt3eig
+rt3eil
+rte4lei
+rt5emb
+r5ten.
+rte5nach
+rte3no
+rte3ro
+rtes4
+rte5sta
+r2t5e2v
+r4tha
+rt1he
+r3ther
+rt3hi
+r1tho
+rt3hol
+rt3hu
+rt3hy
+rt4ij
+rtij3k
+r4t3ini
+r4t3ink
+rt5jesc
+r3to
+rt3off
+r5tofo
+r5tok
+rt3om.
+rt3ond
+r4t3op
+r5tori
+r1tr
+r3tra
+rt4rap
+r4t3ras
+rt3rec
+r5treden.
+r3t4rek
+r4t3res
+rt3ri
+r4t3rol
+r2t4ru
+rt5ruk
+rt5rus
+rt4s5eco
+rt5sei
+rt2s3l
+rt3sle
+rts5li
+rt4slu
+rts5m
+rts5no
+rt4soo
+rt1sp
+rt4s3pr
+rts5ten
+r1tu
+rt3ui4t
+rt3w
+rt2wi
+5rubr
+rude3r
+ru1e
+4ruf
+ru2g
+ru4gr
+r5uitr
+ru2k
+4ru3ke
+ruk3i
+rul3aa
+rul3ap
+ru2li
+ru4l3ij
+ru3lin
+rul5s
+r2um
+ru2mi
+3run.
+r2und
+runet3
+4r5u2ni
+ru3niv
+ru4r
+ru5ra
+ru5re.
+ru5res
+r2u4s
+rus3e
+rus5tr
+4rut
+rut3j
+rut4st
+ruts5te.
+4ruu
+ru3wa
+rvaat5
+rval4st
+rvals5te.
+rvers5te.
+rves4
+rve3sp
+rvloot5
+r1w
+rwen4st
+rwens5te.
+r4wh
+rw2t3j
+r3x
+r3yu
+4rz
+rzet5st
+4s.
+5sa.
+s1aa
+1saag
+5s2aai
+saai4s
+3s2aal
+3s4aat
+1sab
+sa3bo
+2s1ac
+sa2ca
+3sacr
+s1adv
+2s1af
+3safe
+3safo
+sa3fr
+s5agg
+s4a3gi
+3sagn
+sa3go
+3sah
+3sai
+3saj
+2sak
+3saks
+s1akt
+s2al
+5sal.
+3sa3la
+3sald
+5salh
+s3all
+4salm
+sal5ma
+s3aln
+3s4a3lo
+3s2ame
+5samm
+sam5p
+4sa2na
+sa3nat
+s4anc
+s2a3ne
+s4ant
+san4t3j
+sa2p
+3sap.
+sa3pa
+2s3ape
+sa4pr
+sa5pro
+sa3ra
+s1arb
+3sard
+sa2re
+s1arm
+saro4
+sar3ol
+s4ars
+4s1art
+sart5se
+4sas.
+3sasa
+sa3sc
+3s4ast
+1sat
+3sa3te
+5sati
+2s3atl
+2s1att
+s3aud
+1saur
+3s2aus
+s1aut
+3sauz
+1sax
+4s3b
+s5ba
+s5be
+s5bo
+1sc
+2sca
+4sce
+5scena
+5sc^^e8
+3s4ch2
+4sch.
+sch4a
+5schak
+5schap
+4schau
+5sche.
+s5chec
+4schef
+5schen
+4scheq
+5scher
+5schev
+5schew
+s2chi
+4schir
+5schol
+5schoo
+5schot
+sch5ta
+2sci
+4scl
+2sco
+3s4cola
+3scoo
+3scope
+5scopi
+3s4co5re
+3scout
+2scr
+4scris
+2scu
+2scy
+4s1d
+s5de
+s4dh
+sdi5a
+sdis5
+s3do
+s5dr
+s3dw
+3se
+5se.
+se2a
+se3ak
+se3al
+sear4
+se3au
+s4eb
+4s3ech
+se3cr
+5sect
+4secz
+s4ee
+4s5eed
+5seei
+4s1een
+s5eenh
+see4t
+see5ts
+4seev
+s1eff
+se3ge
+2s5e2go
+seg2r
+4s3ei.
+4s3eig
+s4ein
+5sein.
+5seine
+2seis
+seis4t
+sei5tj
+5seiz
+sek4st
+seks5ten
+se1kw
+s2el
+5s4el.
+sel3ad
+se4l3a4g
+se4lak
+se4las
+se3le
+4s3e4lek
+sel3el
+4se4lem
+4self
+se5ling
+4s3elit
+sel5k
+5selm
+selo4
+5selp
+5s4els
+sel3sp
+5selt
+se2l3u
+s4em
+se4m3ac
+s5emm
+sem3oo
+s4en
+5sen.
+se4n3a4g
+se5nan
+se4net
+5sengr
+5senh
+sen5k
+se4n3o
+4s5enq
+sen5tw
+5s4er.
+se1r4a
+ser5au
+5se3r4e
+se4ree
+se5ren
+s4erg
+5sergl
+s5ergo
+5sergr
+ser4i
+se5rij
+4s3ern
+se3ro
+se5rop
+ser2s
+sers3p
+ser3st
+sert5w
+se3ru
+s4es
+se5sc
+se3sf
+2s5esk
+5sess
+se4t
+se5ta
+4s3ete
+se5ti
+se3tj
+set3r
+se5t4ra
+set5st
+4s5etu
+set3w
+se3um
+se4ven
+4s1ex
+4sez
+se2ze
+3s^^e9
+3s^^e8
+2s1f
+4sfed
+s5fei
+4sfi
+4s5fr
+4sfu
+sfu5m
+4s5g
+sgue4
+s1h
+s4ha.
+sha4g
+s5hal.
+3shamp
+4she
+sheid4
+sheids5
+s5hie
+5s4hir
+sh3l
+4shm
+s3hoe
+s3hoo
+3s4hop
+s2hot
+s3hote
+3show
+s5hul
+1si
+5si.
+5s4ia
+si5ac
+si3am
+si5an
+5sic
+sici4
+si3co
+3sie.
+3sie^^eb
+sie5fr
+sie5kl
+siep4
+sies4
+sie5sl
+sie3so
+sie3st
+sie5ta
+sie5to
+si5^^e8
+si1f4
+5s2ig
+si5go5
+s3ijv
+4s1ijz
+5sile
+4s5imper
+3simu
+5sina
+s3inb
+4s3inc
+4s1ind
+2sinf
+sing4
+3sing.
+s3inga
+s5ingeni
+sin3gl
+s3in5gr
+s3inh
+4si2ni
+4s3inko
+sin5kr
+4s3inm
+s4inn
+4sinr
+2s1ins
+2sint
+4s5inv
+4s3inz
+3sir
+5siro
+s3irr
+si4s
+sis3e4
+sis5ee
+sis3i
+sis5tr
+3sit
+si5to
+sito5v
+si3tr
+si4tru
+si5tu
+3siu
+3siz
+sj2
+4sj.
+3s4ja.
+5sjab
+4sj3d
+s1je
+2s3je.
+s5jeb
+3sjee
+3s2jei
+1sjer
+sje4ri
+s3jes
+3sjew
+3s4jez
+4sj5k4
+5sjof
+4s3jon
+sj3s2
+sjt4
+s5ju
+2s1k2
+skaart5j
+s5kad
+s4kele
+s5ken
+3s2kes
+sk4i
+3s2ki.
+3skied
+skie3s
+3ski^^eb
+ski5sc
+s2k3j
+s3ko
+s5kre
+sk5ruim
+sk3ste
+4sku
+s3k4w
+s2l4
+3s4la.
+5s4laan
+5slaap
+4s5laar
+4slab
+s4lac
+4s3lad
+3s4lag
+5slagm
+sla4me
+s5lamp.
+s5lampe
+4s5land
+3slang
+3slap
+5slape
+sla3pl
+4s3las
+2s3lat
+3s4la5v
+4slaw
+3s4laz
+s3led
+3s4lee.
+5sleep
+4s5leer
+s4leet
+slee5tj
+4s3leg
+2s5lei
+s5leng
+s3leni
+slen4st
+slens5te.
+3slent
+s4lep
+4s5ler
+s5les
+sle4t3j
+3s4leu
+s5leug
+s5leus
+5sleut
+2s5lev
+s3li.
+4s3lic
+4slid
+2slie
+s5lied
+s3lief
+3s4lier
+s3lif
+s5lig
+4s3lijf
+5slijp
+4s5lijs
+s4li4k
+sli2m
+slim5a
+s5lini
+4slinn
+s4lip
+4s3lit
+slo4b5
+2s3loc
+3s4loe
+3slof
+4s3log
+s3lol
+s3lood
+s5loon
+s5loos
+5s4loot3
+s3los
+3slot
+slo4tr
+4s3lou
+4s5loz
+4s5luc
+1s4lui
+4s5lui.
+4sluid
+5sluis.
+sluis4t
+slui5ste
+5sluit
+5sluiz
+4slun
+2s5lus
+4s3ly
+s1m
+4s5maat
+3smad
+3smak.
+3smal
+2s5man
+s5map
+s4mart
+4s5mat
+4s5mec
+5smeden
+3smeed
+5s4meet
+4s5mei
+4smelo
+4s5men
+4s5mes3
+5smid.
+smie2
+smies5
+s4mij
+s5min
+5smok
+s3mon
+5smuilden
+s5muile
+5smuilt
+s2n4
+s5nam
+5s4nap
+s4nar
+3snau
+3s4nav
+3s4ned
+3snee
+snee5t
+s5neg
+5s4nel
+2s5nes
+4s5net
+sneus4
+sneu5st
+s5neuz
+s3nie
+1s4nij
+s5nim
+3s4nip
+4s5niv
+4snod
+3s4noe
+s3nog
+2snoo
+s4nor.
+s3norm
+sno5v
+3snuf
+s4nui
+2snum
+3so.
+so4bl
+so1c
+s3oce
+3s4o3d
+1soe
+2soef
+3soep
+soes3
+2s1off
+3soft
+2so2g
+3so3ga
+s1oge
+so3gl
+3sogy
+5soi
+3so^^ef
+3sok
+s2ol
+5sol.
+so3la
+so3le
+so3lis
+3so5l4o3
+solo5v
+5sols
+s2om
+3s4om.
+5somm
+2s3oms
+s3omv
+2somz
+5s4on.
+3sona
+so5nar
+s3onb
+2s1ond
+2song
+3sonn
+3so3no
+s4ons
+2s1on4t3
+4s3onv
+s3onw
+3soo
+4s5oog
+4s3ook
+4s3oor.
+s3oord
+4s3oorl
+5soort
+2s1op
+3s4op.
+4s5ope
+so3phi
+s2o5po
+so3pr
+3s4opra
+sop4re
+s2orb
+s3ord
+2s1or3g
+4s5ork
+sor4o
+so3ror
+sor4st
+3s2ort
+sos4
+so3sf
+s4ot
+s3oud
+sou2l
+sou3t
+2sov
+s1ove
+3so5z
+4sp.
+sp4a
+5spaak
+s3paal
+5spaan
+5spaat
+2spad
+2spak
+5spake
+s4pan
+3spann
+4s5pap
+5spar.
+s4pari
+5sparr
+2spas5
+5spatt
+s3pau
+5s4pea
+4spectu
+3s4pee
+speet3
+4s3pei
+s4pek
+5spell
+4s3pen
+s5pen.
+spe4na
+s5pep
+4sper
+s4per.
+s5peri
+s4perm
+5s4perr
+4spes
+s3pez
+s3pid
+1s4pie
+spie5tj
+4spijn
+4spijp
+s5ping
+5s2pio
+s3pis
+spi5sto
+2s1p4l
+4s5pla
+s4plet
+s2pli4
+5splin
+3split
+s3plo
+s3plu
+sp4o
+s2poe
+s3poes
+4spo^^eb
+4spog
+4spol
+2s3pom
+s4pon.
+s4ponn
+s2poo
+s3pop
+5s4pore
+s4pori
+4s3pos
+5spots
+4spou
+4sprakt
+5spray
+s5pred
+5sprei
+s4prek
+4sprem
+4spres
+5spreu
+5spriet
+4s5prij
+4sprik
+4sprob
+4sproc
+4s5prod
+4sprof
+4sprog
+5s4pron
+s4proo
+4spros
+4s3ps
+4spt
+s2p4u
+4spub
+5s4pui
+4spun
+s4pur
+5spuw
+s4q
+4s5r
+sraads5l
+sro5v
+4s3s4
+ssa1s2
+s4sco
+s4s5cu
+s5se
+ssei3s
+sseo4
+s5si
+s5sl
+s4spa
+s5spaa
+ss5pas
+s5su
+s5sy
+s2t
+4st.
+5staaf
+5staan.
+4staang
+4staanw
+staart5j
+s4taat
+staat5j
+st3abo
+2s4t1ac
+3stad
+5stads
+2staf
+5staf.
+sta4fo
+s4tag
+s4tak
+5staki
+4stakk
+st3akt
+4s3tali
+5stam.
+5stamm
+3stamp
+3s4tand
+stan4s
+s4tap
+4stapo
+s4t3arc
+4stari
+2stas
+stasie4
+5statio
+4stau
+st3aut
+s4tav
+4stavo
+4s5tax
+4staz
+2stb
+2st5c
+2std
+4stea
+5steak
+4stec
+s5tech
+5steco
+3s4ted
+4stedu
+3steek
+3steen
+4steenh
+s5teer
+stee5t
+5stein
+5stekar
+5stekk
+5steldh
+ste4lee
+st5elem
+3stell
+5stem.
+5stemd
+5stemm
+4stemo
+4stent
+4stenu
+ste5ran
+4sterm
+ster5og
+st5e4ros
+5sterren
+s5teru
+4ste4s
+4s4t3ex
+s4t3e2z
+2stf
+4stg
+4sth
+s4tha
+st3hed
+st5heer
+st3hek
+s5them
+s3ther
+st1hi
+s4t1ho
+s4t1hu
+s4t3hy
+2stia
+2stib
+4sticu
+s4t3id
+5stiefe
+s5tiev
+4stijd
+3s4tijg
+5s4tijl
+st3ijs
+3stils
+s4tim
+st3imp
+sti5ni
+4stins
+4s5tint
+4stite
+2stiv
+st3ivo
+4s4t1j
+2stk
+4stl
+2stm
+2stn
+2stob
+2stoc
+4stoef
+3stoel
+5stoel.
+5stoele
+4stoen
+4stoer
+4stoes
+4stoez
+3s4tof
+st3o4ge
+5s4tok
+s4tol
+sto5li
+4stoma
+4stomz
+s4tong
+3s4too
+4st3oog
+stoot5j
+s4top
+st3o5pe
+st5opto
+4stora
+sto4rat
+4stord
+sto5ri
+4s5tos
+s4tov
+2stp
+1s4tr
+4stra.
+straat5j
+4st4rad
+3stra4f
+5straf.
+s5trag
+4strai
+4st3rec
+s5tref
+4streg
+4s3trei
+5strel
+3strep
+st3rif
+st5rijp
+s5tris
+4s3troe
+s5troep
+st4rom
+5strook
+5stroom
+4stroos
+st5roos.
+4s5trou
+4stroz
+3stru
+4strui.
+5struik
+4st1s4
+st3sc
+st5se
+st3sf
+st3sk
+st3sl
+st3so
+st5sp
+st5st
+2st5t2
+1stu
+4stub
+4stuc
+5s4tud
+4stuin
+stui5tj
+st5uitk
+5stuk
+2s4tun
+st3uni
+stu4nie
+4stus
+2stv
+2st3w
+2s4ty
+1styl
+s5typ
+2stz
+1su
+5su.
+5sua
+5su4b1
+suba4
+sub5e
+su5bl
+5suc
+5sud
+3sug
+2sui
+5suik
+4s1uit
+5suit.
+s5uitl
+5suits.
+5suk
+3sul
+5sum
+4s1u2n
+5sup
+5surv
+su4s
+sus3e
+suur5
+4s5v
+svaat5
+svari5
+sve4r
+sve5ri
+4s1w
+s5wo
+s4y
+3sy.
+4syc
+3syn
+sy4n3e
+1sys5
+4s5z
+4t.
+3taak.
+t4aal
+t5aando
+t3aank
+taan4st
+t3aanw
+t3aap
+taar5sp
+4t3aas
+taat4st
+taats5ta
+3tabe
+3tabl
+2tac
+ta2ca
+3t4aci
+4tad
+ta4de
+t3ader
+5tado
+t3adr
+tad4s3
+t3adve
+2taf.
+2t3afd
+5ta3fe
+4taff
+t3afha
+t4afr
+ta3fro
+4t1afs
+2t3afw
+4tafz
+ta4gaa
+5tagee
+5ta5g4l
+tag3r
+5taka
+5takg
+5takken
+ta3kl
+5takn
+5takp
+5tak3r
+5taks
+t2al
+ta3laa
+ta5lact
+4talb
+5tale.
+5talent
+ta3li
+5talig
+t5allia
+talm3a
+4talt
+ta4mak
+4tamb
+t3amba
+5tamen
+tament5j
+4tamp
+t3ampu
+5tan.
+4t3a2na
+ta3nag
+ta3nat
+tan4d3r
+tan4k5r
+ta3o
+t4ape
+5tapi
+ta3pl
+5tapo
+ta3q
+ta3ra
+4t3arb
+5tari
+4t1arm
+ta2ro4
+tar5sp
+tar5taa
+t3arti
+3tarw
+3tas
+5tasa
+5tasj
+5taso
+ta3s2p
+ta3sta
+ta3str
+ta3sy
+4tata
+4tatio
+tat5j
+4t3atl
+3tatr
+3tau
+4taut
+2t1avo
+3tax
+t3a2z
+4t3b
+tba2l
+4t3c
+t4ch
+t5cha
+t5che
+t5chi
+t5chu
+4t3d2
+tdor5st
+tdo3v
+1te
+3tea
+te3akt
+5tea4m
+3tec
+4t3echt
+4teco
+te4dit
+t3edu
+tee2
+teeds5te.
+tee4g
+4teek
+tee4k3l
+teem1
+4tee4n
+t5eenhe
+3teer
+tee5rin
+tee4t
+4t3eeu
+t4ef
+t5eff
+3tefl
+3teh
+4t3eier
+4teig
+tei4lo
+t4ein
+t5eind
+5teit
+tei5tj
+2t3eiw
+5tekene
+5tekens
+4teker
+4tekk
+3teko
+te4k3om
+3teks
+te3kw
+te4k3wi
+t4el
+tel5ant
+te4lap
+tel5da
+4telec
+5teleco
+t5elect
+tel5een
+5telef
+5teleg
+tel5ei.
+tel5eie
+tel5eit
+te5lel
+5telev
+5te5lex
+tel3f
+tel5k
+te4loe
+te4l3o4g
+tel5oog
+te4l3op
+telo4r
+tels4
+4telse
+tel3so
+tel5su
+te4l3uu
+t4em
+2temb
+4temm
+te4mor
+tem3ov
+5temper
+5tempo
+t4en
+ten4ach
+ten3a4g
+te3nak
+te5nare
+te4nau
+tene2
+ten3ed
+ten3el
+tene4t
+3tenh
+ten5k4
+te5nore
+4t5enq
+ten5scr
+ten3sn
+ten3sp
+tensu4
+tens5uu
+3tent
+5tenta
+5tenten.
+ten5to
+t3entw
+5tenu
+t2er
+teraads5
+te4r5aak
+ter3a4b
+tera5ca
+te4rad
+tera4de
+te4r5af
+ter3ag
+te3ral
+te4ran
+ter3ap
+ter3as
+5terec
+te4rei
+ter5eik
+te4rel
+te4rem
+te5ren.
+te4r5enk
+te4r5env
+4t4erf.
+4terfd
+ter3fr
+4t4erft
+te4r5in.
+3terj
+4terk.
+4terkt
+ter3k4w
+3term
+5term.
+5termi
+ter5oc
+te3rod
+te3rof
+te3rog
+5teron
+te5rons
+tero5pe
+tero4r
+te3ros
+5terrei
+5terreu
+5terror
+ter4spr
+ter5ste.
+ter5ston
+3tes
+te3s4ap
+tes3m
+te3so
+tes3ta
+te5stel
+tes5ten
+test5op
+test5ri
+test3u
+te3ta
+te5tr
+4t3euv
+t4ev
+t5e4van
+teve4r
+5tevl
+3tevr
+2tex
+3tex.
+4t3exe
+4texp
+1t^^e9
+t^^e83
+4t3f
+4t3g2
+tgaat5
+t5ge
+tge3la
+tger4
+4th.
+2t1ha
+t3haa
+t4haan
+t4had
+t3hak
+t5ham
+t4hans
+t3har
+t3hav
+5thea
+t3heb
+5thee.
+4t3hei
+4t3hel
+3t2hen
+5theo
+1t2her
+5the3ra
+4t3here
+3thes
+3thet
+t4hin
+4thm
+t1hoe
+t2hog
+t3hok
+t1hoo
+thoof5di
+4t1hou
+t3houd
+5thous
+4t3hov
+3thr
+2thu
+t1hul
+4thum
+t4hur
+3ti
+5ti.
+5tia
+ti5ab
+ti5ae
+ti3ap
+5tib
+5tica
+5tice
+5tici
+5ticu
+ti3d4
+5tie.
+tie5d4
+5tiefs
+tie3kn
+tie4kon
+ti3enc
+tien5st
+5tiep
+5ties
+tie5s4l
+tie5ta
+tie5to
+tie5tw
+ti1eu
+5tieven
+ti3fe
+ti3fr
+ti2ga
+tig5aa
+4tigm
+ti4gu4
+tig3ur
+5tijd
+tije4
+tij5ka
+tij4kl
+5tijn
+tij5p
+t3ijs.
+tij3st
+tij3t2
+tij5tr
+tij5tw
+4t1ijz
+ti3ko
+ti5kr
+t4il
+4tils
+5timm
+5timo
+tina4d
+tin3as
+4t3incu
+4t1ind
+4tinf
+tin4g3i
+ting4sa
+t3inh
+ti4nit
+4t3inj
+t3inko
+4t3inl
+t3inq
+4tinr
+4t3ins
+ti3nu
+4t3inv
+4tinw
+ti5om
+ti3o4p5
+t2is
+ti5sa
+ti3s4j
+ti3sl
+ti3so
+ti4son
+ti3s4p
+ti3sta
+5tite
+ti3th
+ti1t2r
+5tivi
+ti4vo
+1tj2
+2t1ja
+t5jaa
+t5jee
+t5jek
+t3jen
+t5jet
+4tjeu
+2tjo
+t1jou
+2tju
+4t3k2
+tkars3
+4t3l
+t5le.
+5tleb
+t5les
+tli4n
+4t3m
+tmen4st
+tmens5te
+tmos5
+4t3n
+tna4m3o
+tne4r
+tnes4
+5to.
+toa2
+to3ac
+to3ar
+to5bl
+3toc
+1toch
+3tod
+to3da
+t4oe
+toe5d4
+3toej
+toe5k
+5toe3l4a
+toe5le
+5toelic
+toemaat5
+5toen
+to5ende
+toe5pl
+3toer
+5toeri
+5toern
+5toe1s4
+toe5st
+toe3tj
+3toets
+5toets.
+5toetse
+toets5te.
+3toev
+5toez
+to2f
+tof5ar
+tof5d
+to4fr
+tof3th
+3togn
+5togr
+3toi
+to4kan
+tok3s
+t2ol
+to3la
+5tolaa
+to5le
+5tolet
+t3olf
+2toli
+5tolic
+to4lie
+tolk5s
+5tolo
+tolp3r
+t3oly
+4tom.
+5tomaa
+tomaat5
+t3oml
+to3mo
+tom4p3j
+4t3om5s
+5ton.
+4tond
+3t2one
+5tonee
+5to5nen
+to5ner
+3t4ong
+5tong.
+3t4oni
+5t4onn
+to3no
+5tons
+ton3sk
+too4m
+toom3e
+5toon
+t4op.
+top5art
+top3as
+to3pen
+to3pet
+to3pi
+2topm
+to4po
+to5pos
+t4opp
+to4pu
+to5pus
+t3opva
+5tor.
+to3ra
+to4r3ag
+t3ord
+to5rec
+5torens
+4t1org
+t5orga
+t4ori
+3toria
+to4ri^^eb
+tor3k
+tor4m3a
+toro4
+to4r5oli
+to3rom
+5torr
+3tors
+tors5te.
+to3r2u
+3tos4
+to3sa
+to1sl
+to1s2p
+tos5te
+5tota
+to3tr
+2t3oud
+3tour
+tou4r3e
+to3v
+tove5na
+to4vens
+4toverg
+to3w4
+4t3p4
+tpe4t3
+tpi3s
+tr4
+3tra.
+4t3raad
+5trac^^e9
+5trafo.
+3trag
+4tragez
+3t4rai
+5train
+5traka
+t3rake
+3trakt
+3trans
+5transa
+5trap.
+5trau
+4t3raz
+3t4re.
+4trea
+2trec
+5tred.
+4treda
+t5redes
+4tredu
+3tref
+4t5reg
+4t3reis
+4treiz
+4trel
+t3rese
+t3resu
+tre2t3
+t4reu
+t3rib.
+5tribu
+5trico
+trie5ta
+trig2
+2trij
+5t4ril
+tri5ni
+5t4rio4
+t3risi
+t3rit.
+5t4riti
+5trody
+t3roed
+t3roes
+5trofy
+3trog
+t4ro^^ef
+5troj
+4trol.
+5trola
+5trolo
+5tromm
+5tron.
+5trona
+t5rond
+3trone
+5tronn
+5trono
+5trons
+tront5j
+t3rood
+5troon
+t4roos
+tro5pi
+t4ros
+5trotu
+3trou
+4t5rout
+tro5v
+5truc.
+5truf
+4trug
+5trui.
+5truie
+t3ruim
+trui5t4
+t3ruk
+t4rum
+4ts
+ts3a2d
+tsa4g
+ts1am
+t3sap
+ts3as
+tse4d
+ts5een
+t4s3ei
+ts5eind
+t4s5ene
+t4s3eng
+t4s3erg
+ts5erge
+t4s3e2v
+t2sij
+t4s3ink
+ts3int
+ts2j
+ts3ja
+t3sjen
+3tsji
+t1sl
+ts4laa
+t3slac
+t5slag.
+ts3lam
+t2s3le
+t5slib
+t5sloe
+t3s4lu
+ts2me
+ts4moe
+ts3neu
+ts4no
+ts5nor
+ts5not
+ts3nu
+ts3ob
+tso2l
+ts3oli
+ts3om
+ts1on
+ts4opp
+ts1o4r
+ts1ov
+ts3pad
+t3span
+t5spec
+t4s3pet
+t3spi
+t4s3pil
+t3spoe
+t3spoo
+t5s4por
+ts3pot
+t4spro
+ts4pru
+ts5q
+ts5s
+t3sta
+t4staak
+t4s5tank
+ts5tant
+t4star
+t4stas
+t3ste
+t5sted
+t5stee
+ts5teko
+t5stell
+t5stels
+t5stem
+t5ster.
+t4sterr
+t5sters
+t5s4tes.
+t5steu
+ts3th
+t1s4ti
+t3stij
+t5stijg
+t5stil
+ts5tin
+ts5t4j
+t1sto
+ts5toep
+ts5tong
+t4store
+ts5trad
+ts5trei
+t3stri
+ts5troe
+ts5ty
+t4su4
+ts3ur
+ts3us
+ts3uu
+t1sy
+4t3t
+t5t4a
+t5te
+tte5loe
+tte5l4op
+tte2n
+tten4t5j
+tte5ri
+t5tlet
+tt3oog
+ttop2
+t5t4r
+t5tum
+tt3uu
+3tua
+3tub
+3tuch
+3tu3e
+5tueu
+tu3^^e9s
+3tuig
+5tuin
+4tuip
+2tuit
+tuit4j
+4tuk
+tu4k3i
+tul5pi
+t4um
+5tune
+5tunn
+tu1o
+5turb
+tu3ri
+3tu4s3
+tut3j
+tuurs5la
+tu3wa
+4tv
+tvaat5
+t3ve
+4t1w
+3t4wijf
+t2win
+1ty1
+3typ
+tys4
+4tz
+t3za
+t3zi
+t5zw
+u1a
+u3ac
+u3an
+ua5ne
+ua3p
+u5ar.
+uar5t
+ua3sa
+uat4
+2u2b
+ub3ac
+ube4li
+ub5em
+u5bi
+u3bo
+ub5or
+4uc
+u1che
+ucht5sl
+uc4ki
+ucle3
+uc4t3a
+uc4tin
+u1d
+uda2
+u5da.
+ud5am
+ud3ei
+ud3ess
+u4de4z
+ud3eze
+udi4o
+udi5ologe
+udi3om
+udoe2
+ud3ond
+ud3oo
+ud3ov
+u4d1r
+uds5lo
+uds4m
+uds5ma
+ud3sme
+ud3smi
+ud1st
+ud4sta
+uds5tak
+ud4sti
+ud1w
+u3ec
+ue2co
+u1ee4
+u3ef
+u3ei
+u1el
+u4ene
+u1er
+uer3il
+ue3st
+u1eu
+u5eul
+u3ez
+u3^^e8
+u4f3an
+u1fl
+u1f4r
+uf2s
+u5ga
+ug4da2
+ug4der
+ug2do
+ug4dr
+uge4l5o
+ug3ij
+ug1l
+u2go
+ug3or
+u2g1r
+ug5sce
+ug4sec
+ugs4p
+ugs5pa
+ug1s4t
+ugs5tra
+u1h
+u2i
+ui5ac
+ui2d3a
+ui2d1o
+uid4s
+uid3sp
+uid5spre
+uid5ste.
+uid3u
+ui3e
+uien4t
+ui2fa
+uif1l
+uif5r
+ui2fu
+4uig
+ui4g5aa
+uig1l
+ui2g3o
+ui4g3r
+ui4gu
+4uik
+ui2k3a
+ui4k3l
+ui2ko
+ui2ku
+ui2la
+uil5aa
+ui4l3em
+uil5m
+ui4l3og
+ui4loo
+uil3ov
+4uim
+ui2m3a
+ui3mag
+ui4n1a
+uin5g
+ui2no
+uin5og
+uin3or
+uin4s5lo
+uin5to
+ui2p3l
+ui4p3o4
+ui2p3r
+4uis
+ui2s3a
+uis5c
+ui4sl
+ui5slu
+uis5p
+ui4st
+ui4t3a4
+uit5aa
+uit5al
+ui5tar
+1uitg
+uit1j
+3uitl
+ui2t1o
+1uit5r
+uit3sl
+uit3sn
+uit5sp
+uits5te.
+3uitw
+3uitz
+ui3v
+4u3j
+2uk
+u2k3al
+uk3as
+ukkers5
+u2k3l
+u3klas
+u2k3n
+u2k3o
+u3koc
+uko2p
+uk4o3pl
+u4k3r
+uk3s2m
+uk3spa
+uk3spl
+uk4sti
+uk1w
+u1la
+ul3ac
+ulam4
+ula4p
+ul4d3a
+uld5erk
+ul5dop
+ul4d3u
+u1le
+ule5sp
+ul3fl
+ul5fo
+ul3fr
+ul3in.
+u5ling
+ul3inn
+ul3k2a
+ul5ke
+ul2k3l
+u1lo
+ul3o2p
+u3los
+ul2pa
+ulp3ac
+ul4pi
+ul2p3l
+ul2po
+ul4p3r
+ul3sa
+ul3so
+ul2s3p
+uls5te.
+uls5tel
+u3lu
+um3af
+um3ar
+3umda
+2ume
+umee4
+umes4
+ume3st
+um3om
+um3op
+um3so
+um3st
+u2m3ui
+un3ac
+un2c
+unch3r
+un4dra
+und4s
+unds5ta
+und5ste
+une4t
+un3g
+1univ
+un4k3r
+un4o
+uno3g
+un5o2p
+unst3a
+un4ste.
+unst3o
+un4st5r
+unst5ui
+un4tag
+unt5een
+un2tj
+un4t5o4
+unt3s4m
+un4t3u
+u3ol
+u3on
+u3oo
+u1or
+uo3ru
+u3os
+uota3
+4up
+u1pa
+u1pe
+upe3k
+upe4ro
+uper5st
+u3ph
+u3pi
+u1pl
+u4p3lei
+u1po
+u3pol
+up3om
+up3op
+u1pr
+up4tr
+u1ra
+ur3aan
+ur1ac
+ur3ada
+ur3adv
+u2r3a4r
+uras3
+u4r3a2z
+urd4o
+u1r2e
+ur3ech
+ur3een
+uree5s
+ure5lu
+urelu5r
+u4rem
+ur3emb
+ure4n
+u3res
+ur3ess
+ure3st
+ur3eta
+4urf
+ur2fa
+ur3gi
+u1ri
+uri4gl
+ur3ijz
+ur3ind
+ur3int
+4urk
+urken5s
+ur4kie
+ur3k4l
+urk4s5t
+u1ro
+ur5opb
+ur3or
+uro5s
+ur5pr
+ur4serv
+ur4s3ev
+ur3s4fe
+ur2sl
+urs5laa
+urs5li
+ur4s5m
+ur2sn
+ur4sp
+urs5pa
+ur5spel
+ur5spor
+urs5take
+urs5th
+ur4sti
+urs5tik
+ur3ta
+ur4tro
+ur5troe
+u3ru
+ur3ui
+4urv
+u1r4y
+4usaa
+us3ad
+us3a2m
+us1ap
+u4sc
+u5s2cr
+use5tj
+u5sie
+u4sj
+u4s5l
+u4sm
+u2s5n
+uso2
+us3o^^ef
+us3os
+u2s3p
+us5pi
+us5pu
+us4ta
+us5tag
+ust3al
+u2s3te
+us4t3ei
+u4sti
+ust3oo
+us5tra.
+us5tre.
+us5tro
+us5tru
+ustu4
+ust3ur
+ust3uu
+u1ta
+ut3aan
+utaar5
+ut1ac
+ut3af
+u3tan
+uta3s4
+ut5c
+u4t3ees
+u4tek
+ut3eks
+ut3em
+ut5emm
+uter5an
+ut3ex
+ut2h
+ut3ho
+u2tj
+u1to
+uto5f
+ut3oog
+uto3pe
+utop4l
+uto5po
+utop4r
+uto5s
+ut3saa
+ut3s2c
+uts5eng
+uts2m
+ut1sn
+ut3sp
+ut4spa
+ut4spo
+ut2st
+uts5tak
+ut4ste.
+ut5sten
+ut3str
+ut5su
+utt4
+u1tu
+ut5w
+u4u4
+uur3a4
+uur3e4
+uur5i
+uur3k
+uur1o2
+uur5ste
+uur5sti
+4uut
+uut3a
+uut3r
+uvel4s
+uve5na
+uw1a
+u3wag
+uw3ar
+uw5art
+u1we
+uw3ec
+uwe5d
+uw3een
+u2w3ei
+uwe4nen
+uwes4
+u1wi
+u2w3ij
+uw5ijz
+u4wind
+u3wing
+u4wins
+uw3inz
+uw1o
+u3woe
+uwo4ge
+uw1r
+uw3u
+uxa3
+u3ya
+4uz
+uze3t4
+uzie2
+^^fbt3s4
+1^^fc
+^^fc4b
+^^fc1n
+^^fc3ri
+^^fcs3l
+1v2
+2v.
+vaar4ta
+vaart5r
+va3de
+va3g4
+va2ki
+va4kl
+va2ko
+va2l3a
+val5m
+va3lo
+va4loe
+val5si
+val4s5p
+vals5tek
+valu5
+va2n
+van3ac
+vand4
+vang3a
+van4gr
+va3no
+va4noc
+va1p
+va3re
+va5se
+va3s4o
+vast3r
+va3su
+va3te
+va2t3h
+vat5j
+va3z
+v4b
+4v3c
+v4e
+3ve.
+5veb
+vee4l
+veel5e
+vee3p4
+vees4
+ve3g4h
+vei3s4
+vei5tj
+3vek
+5vel
+ve4l3a4g
+vel4d3o
+ve3le
+vel3k
+5vem
+vem4a
+ve4na
+ve5nare
+5vend
+ven5k
+ve2n3o
+2venr
+ven4s3e
+ven4sl
+vens5lan
+vens5lo
+ven4sp
+vens5taak
+vens5take
+vens5tek
+ven4s3u4
+ve2r
+ver1a
+ver5aas
+ve4rad
+vera4g
+ve4rand
+ver5do
+ve3rec
+ver3ed
+ve3reg
+ve3rei
+ver5eis
+ve5ren.
+ve5rend
+ver3e4t
+ver5ijd
+ver5ijl
+ver5ijs
+ve5ring
+ver5k4
+ver3o
+ve3rom
+vero5v
+ver5p
+ver5spe
+ver5sta
+ver5sto
+ver5tw
+ver1u
+ve3ry
+ve2s3
+ves5ti
+ve2tj
+ve2to4
+vet3og
+vet3oo
+ve3tor
+ve2t3r
+vet4roe
+vet5ste
+5ve5z
+3vi
+4vicepa
+vid5st
+vie4r3a
+vie4s3
+vies5n
+vie4tj
+vi3eu
+vijf5
+vik4s
+vil4t3j
+ving4
+vings3
+vi3o
+vi5om
+vi4s3an
+vi1so
+vis5ot
+vis5p
+vi4st
+vis5tr
+vi1tr
+v3j
+vje4
+vjet1
+3vl
+v3lar
+vlei3s4
+vlie4s5
+vlot5s
+v3lov
+5vo.
+3voe
+voe4t3a
+voe4t3r
+voet5sp
+3vog
+voge4
+3voi
+vo2le
+vol4g3a
+vol4gra
+vo2li
+vol3ij
+vol5p
+von4det
+vond5u
+3voo
+voo5d
+vooi5t
+voorn4
+voor5na
+vo3ra
+vorm3a
+vors5te.
+vor5sten
+vos3
+3vot
+vot3j
+3vou
+vous5
+3v4r2
+vrei5
+vrie4s
+vrij5k4
+vrijs4
+vrij5ste
+v3t
+vues4
+vu2l
+vul5p
+vuur5s
+vy3
+2w.
+waad3
+w2aar
+waar5e
+waar5ste
+wa4b3
+wa2ba
+wa5bl
+w2ad
+wa3dr
+w4ag
+wa2la
+wa3lan
+4wam
+wan4d5r
+wan4gr
+wang5sl
+wa2n1o
+wan3s4
+3wap
+w4ar
+w5arc
+5ward
+war4st
+wars5te
+wart3j
+war4to
+wa2si
+wa4s5l
+wa4s5p
+was5tr
+1wate
+wat5j
+wa3tr
+3way
+2wb
+w1c
+2w1d
+w4doo
+wd3oom
+we2a
+2we2c
+3wed
+wede4
+we2d3i
+we4d3r
+wee4ki
+wee4k3r
+wee3lo
+wee3s4t
+wee5ste
+3weg
+we4g1a
+we4gerv
+weg3l
+we2g3o
+we4g5r
+wei3s
+wei5tj
+we4k3r
+we4le2
+4welem
+we3li
+we2lo
+wel3s
+we2m
+wem3a
+we3me
+we2n
+wena4
+wen3ad
+we3ne4
+we4nem
+we5nen.
+wen5enk
+we3ni
+wen4k3a
+wen3o
+wen5to
+wer2f
+4werg
+wer4ka
+wer4k5l
+wer4kn
+wer4k3o
+wer4k3r
+werk5ru
+wer4k3u4
+wer4k3w
+wer4p3a
+wer4p3l
+wer4pr
+wer4s
+wer5ste
+we2s3
+we3spo
+wes4t5o
+3wet.
+we2th
+we2t3j
+wet4st
+we2t3u
+2wex
+wezen4s5
+2w1f
+w1g
+w1h
+wie4la
+wie4t
+w4ij
+3wijd
+wij4ka
+wij4s
+wijs3l
+wijs3p
+wijs5ta
+wi4k
+3wil
+wind3a
+win4d3r
+w4ing
+2winr
+win2s
+winst5aa
+winst5r
+wi4t3h
+wit3j
+wi2t3o4
+wit3r
+w1j
+2w1k
+2w1l
+4w1m
+2wn
+wn3ac
+w3ne
+w3ni
+w3no
+w3ob
+w2oe
+woes3
+woest5a
+wo4l
+wol3a
+wolf4s5
+woon5sf
+woor4d5r
+wor4g3e
+w1p
+wren4st
+wrens5te.
+2ws
+ws3a2
+w3sc
+w1sl
+w2s3le
+w3som
+w3sp
+ws2pl
+w4spr
+w5spra
+w1s4t
+w4stij
+2wt
+wtes3
+wtje5sp
+w1to
+w1tr
+wu2
+wva2
+w1w
+xaf4
+xa3g
+xamen5t
+xan3
+xan5t
+x1c
+x4e
+xen4d
+xe3ro
+x1f
+x1h
+xie4t
+xi3g
+xi5o
+xi3sta
+xi3sto
+xi4t3i
+x3l
+x1m
+xo3no
+x4op
+xo3s4
+x1p
+xpre2
+xpres5
+x3r
+x3so
+x3sp
+x1t
+x2tak
+xtie2
+x3w
+xy3
+y1a
+ya3s4
+ya4s5p
+y3at
+yba2l3
+yber4t3
+y1c
+ycho3
+y3co
+y1d4
+ydi3a
+y5dr
+ydro3
+y1e
+yes3
+y3^^e9s
+y3^^e8
+y1f
+y1g
+ygu2
+y1h
+y1i
+y4in
+y5is
+yksge4
+y3la
+yl3al
+y3le
+y4l3et
+y3lo
+ylo3l
+ym2f5l
+ym5pa
+y3na
+yn3er
+y3no
+yn1t
+y1o
+y3on
+y3os
+yo3t
+y1p
+y3p4h
+ypo3
+ypot4
+yp3s
+yp5si
+y1r
+y3r4e
+y5ri
+ys3
+y1s4a
+y3s4c
+y5s4e
+yse5t
+y3s4f
+y3s4h
+ys4i
+y3s4o
+y3s4p
+ys5pl
+ys4ta
+ys5tr
+y3sy
+y1t
+yt3hu
+yto3
+y2tof
+ytop4
+yu5a
+y3ui
+y3u2r
+yvari5
+y1w4
+1z
+4z.
+zaar5t
+za3f2
+zags4t
+za2k3a
+zak3r
+zan2d
+zand5a4
+zan3di
+zan4dr
+zang3s
+za3po
+za3s4
+4zb
+4zc
+4zd
+z4e
+zee3k
+zeel5d
+zee3r4o
+zeero5v
+zeer5s
+zee3s4
+ze5ge
+zeg4sl
+zei3sp
+ze5k
+zel5dr
+ze3lem
+zel2f1
+zel4so
+zen4d3a
+ze4nin
+zen5k
+zen3o4
+zen4og
+ze3non
+ze4r3a
+ze3ro
+zer2s
+zer4s5e
+ze4s3
+ze5sch
+zes5e
+zes5l
+ze5ste
+ze2t3a
+ze2t3h
+ze4ti
+ze2t3j
+ze2t3r
+zeve2
+zeven3
+4zf
+4zg
+2z3h
+z2i
+ziek3l
+zie4k3o
+ziek3w
+ziel4s
+zie5sl
+3zif
+zi2g5a
+zij5kl
+zij3po
+zij5s4
+zik2w
+zi4n3a4
+zings3
+zin4k3l
+zin4s
+zins3t
+zins5ta
+zin5str
+zi3o5
+zipi3
+zi4t
+zit3e
+zit3j
+zit3u4
+4z3k
+4z3l
+4zm
+zodi5
+zoet3j
+zoet5ste
+zo3f2
+zoi4
+zo5ie
+zo3la
+zome4
+zo2na
+zon3sf
+zon5ta
+zooi5tj
+zo1p
+zor4g3a
+zor4gl
+zor4gr
+zo2t
+zot3h
+zo3tr
+zo3v
+4z3p
+4z3r
+2zs
+4z5t
+zui4d3i
+zui4dr
+zus3
+2zv
+z4w
+zwets5te.
+5zy
+2z3z
+zz3in
+zz3or
+z4z5w
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_pt.dic b/lib/kotext/kohyphen/hyphdicts/hyph_pt.dic
new file mode 100644
index 00000000..11129db3
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_pt.dic
@@ -0,0 +1,308 @@
+ISO8859-1
+.ex1e4m3p2l2o.
+1b2l
+1b2r
+1ba
+1be
+1bi
+1bo
+1bu
+1b
+1b
+1b
+1b
+1b
+1b
+1b
+1b
+1b
+1c2h
+1c2l
+1c2r
+1ca
+1ce
+1ci
+1co
+1cu
+1c
+1c
+1c
+1c
+1c
+1c
+1c
+1c
+1c
+1a
+1e
+1i
+1o
+1u
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1d2l
+1d2r
+1da
+1de
+1di
+1do
+1du
+1d
+1d
+1d
+1d
+1d
+1d
+1d
+1d
+1d
+1f2l
+1f2r
+1fa
+1fe
+1fi
+1fo
+1fu
+1f
+1f
+1f
+1f
+1f
+1f
+1f
+1f
+1f
+1g2l
+1g2r
+1ga
+1ge
+1gi
+1go
+1gu
+1gu4a
+1gu4e
+1gu4i
+1gu4o
+1g
+1g
+1g
+1g
+1g
+1g
+1g
+1g
+1g
+1ja
+1je
+1ji
+1jo
+1ju
+1j
+1j
+1j
+1j
+1j
+1j
+1j
+1j
+1j
+1k2l
+1k2r
+1ka
+1ke
+1ki
+1ko
+1ku
+1k
+1k
+1k
+1k
+1k
+1k
+1k
+1k
+1k
+1l2h
+1la
+1le
+1li
+1lo
+1lu
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1ma
+1me
+1mi
+1mo
+1mu
+1m
+1m
+1m
+1m
+1m
+1m
+1m
+1m
+1m
+1n2h
+1na
+1ne
+1ni
+1no
+1nu
+1n
+1n
+1n
+1n
+1n
+1n
+1n
+1n
+1n
+1p2l
+1p2r
+1pa
+1pe
+1pi
+1po
+1pu
+1p
+1p
+1p
+1p
+1p
+1p
+1p
+1p
+1p
+1qu4a
+1qu4e
+1qu4i
+1qu4o
+1ra
+1re
+1ri
+1ro
+1ru
+1r
+1r
+1r
+1r
+1r
+1r
+1r
+1r
+1r
+1sa
+1se
+1si
+1so
+1su
+1s
+1s
+1s
+1s
+1s
+1s
+1s
+1s
+1s
+1t2l
+1t2r
+1ta
+1te
+1ti
+1to
+1tu
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1v2l
+1v2r
+1va
+1ve
+1vi
+1vo
+1vu
+1v
+1v
+1v
+1v
+1v
+1v
+1v
+1v
+1v
+1w2l
+1w2r
+1xa
+1xe
+1xi
+1xo
+1xu
+1x
+1x
+1x
+1x
+1x
+1x
+1x
+1x
+1x
+1za
+1ze
+1zi
+1zo
+1zu
+1z
+1z
+1z
+1z
+1z
+1z
+1z
+1z
+1z
+a3a
+a3e
+a3o
+c3c
+e3a
+e3e
+e3o
+i3a
+i3e
+i3i
+i3o
+i3
+i3
+i3
+o3a
+o3e
+o3o
+r3r
+s3s
+u3a
+u3e
+u3o
+u3u
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_pt_BR.dic b/lib/kotext/kohyphen/hyphdicts/hyph_pt_BR.dic
new file mode 100644
index 00000000..11129db3
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_pt_BR.dic
@@ -0,0 +1,308 @@
+ISO8859-1
+.ex1e4m3p2l2o.
+1b2l
+1b2r
+1ba
+1be
+1bi
+1bo
+1bu
+1b
+1b
+1b
+1b
+1b
+1b
+1b
+1b
+1b
+1c2h
+1c2l
+1c2r
+1ca
+1ce
+1ci
+1co
+1cu
+1c
+1c
+1c
+1c
+1c
+1c
+1c
+1c
+1c
+1a
+1e
+1i
+1o
+1u
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1d2l
+1d2r
+1da
+1de
+1di
+1do
+1du
+1d
+1d
+1d
+1d
+1d
+1d
+1d
+1d
+1d
+1f2l
+1f2r
+1fa
+1fe
+1fi
+1fo
+1fu
+1f
+1f
+1f
+1f
+1f
+1f
+1f
+1f
+1f
+1g2l
+1g2r
+1ga
+1ge
+1gi
+1go
+1gu
+1gu4a
+1gu4e
+1gu4i
+1gu4o
+1g
+1g
+1g
+1g
+1g
+1g
+1g
+1g
+1g
+1ja
+1je
+1ji
+1jo
+1ju
+1j
+1j
+1j
+1j
+1j
+1j
+1j
+1j
+1j
+1k2l
+1k2r
+1ka
+1ke
+1ki
+1ko
+1ku
+1k
+1k
+1k
+1k
+1k
+1k
+1k
+1k
+1k
+1l2h
+1la
+1le
+1li
+1lo
+1lu
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1ma
+1me
+1mi
+1mo
+1mu
+1m
+1m
+1m
+1m
+1m
+1m
+1m
+1m
+1m
+1n2h
+1na
+1ne
+1ni
+1no
+1nu
+1n
+1n
+1n
+1n
+1n
+1n
+1n
+1n
+1n
+1p2l
+1p2r
+1pa
+1pe
+1pi
+1po
+1pu
+1p
+1p
+1p
+1p
+1p
+1p
+1p
+1p
+1p
+1qu4a
+1qu4e
+1qu4i
+1qu4o
+1ra
+1re
+1ri
+1ro
+1ru
+1r
+1r
+1r
+1r
+1r
+1r
+1r
+1r
+1r
+1sa
+1se
+1si
+1so
+1su
+1s
+1s
+1s
+1s
+1s
+1s
+1s
+1s
+1s
+1t2l
+1t2r
+1ta
+1te
+1ti
+1to
+1tu
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1v2l
+1v2r
+1va
+1ve
+1vi
+1vo
+1vu
+1v
+1v
+1v
+1v
+1v
+1v
+1v
+1v
+1v
+1w2l
+1w2r
+1xa
+1xe
+1xi
+1xo
+1xu
+1x
+1x
+1x
+1x
+1x
+1x
+1x
+1x
+1x
+1za
+1ze
+1zi
+1zo
+1zu
+1z
+1z
+1z
+1z
+1z
+1z
+1z
+1z
+1z
+a3a
+a3e
+a3o
+c3c
+e3a
+e3e
+e3o
+i3a
+i3e
+i3i
+i3o
+i3
+i3
+i3
+o3a
+o3e
+o3o
+r3r
+s3s
+u3a
+u3e
+u3o
+u3u
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_pt_PT.dic b/lib/kotext/kohyphen/hyphdicts/hyph_pt_PT.dic
new file mode 100644
index 00000000..11129db3
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_pt_PT.dic
@@ -0,0 +1,308 @@
+ISO8859-1
+.ex1e4m3p2l2o.
+1b2l
+1b2r
+1ba
+1be
+1bi
+1bo
+1bu
+1b
+1b
+1b
+1b
+1b
+1b
+1b
+1b
+1b
+1c2h
+1c2l
+1c2r
+1ca
+1ce
+1ci
+1co
+1cu
+1c
+1c
+1c
+1c
+1c
+1c
+1c
+1c
+1c
+1a
+1e
+1i
+1o
+1u
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1d2l
+1d2r
+1da
+1de
+1di
+1do
+1du
+1d
+1d
+1d
+1d
+1d
+1d
+1d
+1d
+1d
+1f2l
+1f2r
+1fa
+1fe
+1fi
+1fo
+1fu
+1f
+1f
+1f
+1f
+1f
+1f
+1f
+1f
+1f
+1g2l
+1g2r
+1ga
+1ge
+1gi
+1go
+1gu
+1gu4a
+1gu4e
+1gu4i
+1gu4o
+1g
+1g
+1g
+1g
+1g
+1g
+1g
+1g
+1g
+1ja
+1je
+1ji
+1jo
+1ju
+1j
+1j
+1j
+1j
+1j
+1j
+1j
+1j
+1j
+1k2l
+1k2r
+1ka
+1ke
+1ki
+1ko
+1ku
+1k
+1k
+1k
+1k
+1k
+1k
+1k
+1k
+1k
+1l2h
+1la
+1le
+1li
+1lo
+1lu
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1l
+1ma
+1me
+1mi
+1mo
+1mu
+1m
+1m
+1m
+1m
+1m
+1m
+1m
+1m
+1m
+1n2h
+1na
+1ne
+1ni
+1no
+1nu
+1n
+1n
+1n
+1n
+1n
+1n
+1n
+1n
+1n
+1p2l
+1p2r
+1pa
+1pe
+1pi
+1po
+1pu
+1p
+1p
+1p
+1p
+1p
+1p
+1p
+1p
+1p
+1qu4a
+1qu4e
+1qu4i
+1qu4o
+1ra
+1re
+1ri
+1ro
+1ru
+1r
+1r
+1r
+1r
+1r
+1r
+1r
+1r
+1r
+1sa
+1se
+1si
+1so
+1su
+1s
+1s
+1s
+1s
+1s
+1s
+1s
+1s
+1s
+1t2l
+1t2r
+1ta
+1te
+1ti
+1to
+1tu
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1t
+1v2l
+1v2r
+1va
+1ve
+1vi
+1vo
+1vu
+1v
+1v
+1v
+1v
+1v
+1v
+1v
+1v
+1v
+1w2l
+1w2r
+1xa
+1xe
+1xi
+1xo
+1xu
+1x
+1x
+1x
+1x
+1x
+1x
+1x
+1x
+1x
+1za
+1ze
+1zi
+1zo
+1zu
+1z
+1z
+1z
+1z
+1z
+1z
+1z
+1z
+1z
+a3a
+a3e
+a3o
+c3c
+e3a
+e3e
+e3o
+i3a
+i3e
+i3i
+i3o
+i3
+i3
+i3
+o3a
+o3e
+o3o
+r3r
+s3s
+u3a
+u3e
+u3o
+u3u
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_ru.dic b/lib/kotext/kohyphen/hyphdicts/hyph_ru.dic
new file mode 100644
index 00000000..17678747
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_ru.dic
@@ -0,0 +1,3875 @@
+KOI8-R
+.2
+.1
+.2
+.2
+.1
+.1
+.5
+.1
+.2
+.1
+.2
+.212
+.212
+.232
+.21
+.1
+.1
+.21
+.1
+.2
+.12
+.21
+.23
+.2
+.32
+.1
+.6
+.2
+.2
+.2
+.1
+.2
+.2
+.2
+.2
+.1
+.32
+.32
+.2
+.2
+.2
+.3
+.23
+.1
+.1
+.2
+.1
+.1
+.2
+.2
+.2
+.1
+.1
+.5
+.2
+.2
+.2
+.1
+.2
+.23
+.34
+.34
+.34
+.62
+.21
+.12
+.12
+.2
+.56
+.1
+.12
+.1
+.32
+.5
+.2
+.212
+.2
+.12
+.5
+.2
+.1
+.1
+.1
+.1
+.1
+.1
+.32
+.5
+.5
+.212
+.21
+.1
+.5
+.2
+.1
+.2
+.1
+.1
+.3
+.12
+.12
+.12
+.2
+.2
+.2
+.21
+.2
+.2
+.21
+.3
+.1
+.1
+.21
+.12
+.12
+.32
+.2
+.1
+.3
+.2
+.2
+.21
+.21
+.21
+.21
+.21
+.6
+.21
+.12
+.5
+.1
+.1
+.1
+.21
+.1
+.2
+.1
+.1
+.2
+.2
+.2
+.2
+.6
+.2
+.2
+.1
+.2
+.2
+.21
+.21
+.1
+.2
+.2
+.2
+.2
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+12
+12
+12
+12
+12
+12
+1
+1
+1
+1
+1.
+12
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+12
+12
+12
+12
+12
+12
+1
+1
+1
+1.
+1
+1
+1
+1
+1
+1
+121
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+121
+1
+1
+1.
+12
+1
+1
+1
+1.
+1
+1
+1
+1.
+1.
+11
+112
+1
+1
+1.
+1
+1
+1
+1.
+1
+1
+1
+1
+121
+12
+12
+1
+1
+1
+1
+1
+12
+12
+12
+12
+12
+1.
+1
+1
+1
+1
+1
+121
+1
+11
+1
+1
+1
+1
+1.
+1
+12.
+12.
+1
+1
+1
+1
+1
+1
+1
+1
+12
+12
+121
+12
+12
+12
+14
+1
+1
+1
+1
+1
+1
+1
+1
+12.
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+12
+1221
+12
+12
+14
+14
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+121
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+16
+1
+1
+12
+1
+1
+1
+1
+1
+1.
+1
+1.
+1
+1
+1
+1
+1.
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+12
+1221
+121
+1
+1
+1
+1
+1
+1
+12
+21
+23
+21
+21
+21
+21
+21
+21
+21
+25
+2
+2
+2.
+2
+21
+21
+21
+21
+21
+21
+21
+21
+21.
+21
+21.
+21
+2
+2.
+21
+21
+21
+21
+21
+21
+25
+2
+21
+21
+21
+21.
+21
+21
+232
+2
+2
+2
+2
+2
+23.
+21
+21
+2
+21
+21
+2
+2
+2
+2
+21
+21
+21
+21
+21
+21
+2
+2.
+2
+21
+2
+21
+21
+21
+21.
+21
+21.
+21.
+21
+21
+21
+21
+2
+2.
+2
+2
+2
+21
+21
+212
+21
+21
+21
+21
+21
+21
+2
+2
+2
+2
+212
+21
+21
+21
+21
+21
+21
+21
+212
+21
+21
+25
+2
+2
+2
+2
+2
+2
+2
+21
+21.
+21.
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+23
+2.
+2
+2
+2
+2
+21
+21
+2
+21
+21
+21
+21
+2
+2.
+2
+2
+2.
+2
+2
+2.
+2
+2
+2
+2.
+2
+22
+2
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+2
+2
+2
+2.
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2.
+21
+21
+21
+21
+21
+21
+21
+21
+212
+21
+21
+21
+21
+21
+212
+21
+21
+21
+21
+21
+2
+21
+21
+2
+2.
+2.
+2.
+2.
+32
+3
+32
+3
+32
+32
+36
+3
+3
+3
+3
+321
+32
+3
+32
+32
+32
+32
+3
+32
+3
+52
+5
+5
+5
+5
+5
+5
+5.
+5
+5
+5.
+5
+5
+5
+56.
+5
+5
+56
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+56
+52
+5
+5
+5
+5
+5
+5
+5.
+5
+5
+5
+5
+5
+5.
+5
+5
+5
+61
+61
+61
+612
+61
+6.
+6.
+65
+6.
+6
+6.
+65
+6.
+6.
+6.
+6
+61
+65
+6.
+6.
+6.
+6
+6.
+6.
+6.
+6
+6
+6.
+61
+61
+61
+6
+6.
+6
+61
+61
+6.
+6
+6.
+612
+6.
+6
+61
+61
+61
+61
+61
+6.
+6.
+6.
+6.
+65
+6
+6
+6
+6
+6.
+6.
+6.
+6.
+6.
+6.
+61
+65
+6
+6.
+6
+6.
+6.
+6
+6.
+6.
+6
+6
+6
+6.
+61
+61
+61
+6.
+6
+6.
+6
+6
+6
+6.
+6.
+6.
+6.
+61
+65
+6.
+6.
+6.
+6.
+6.
+6.
+6
+61
+65
+65
+6.
+6.
+61
+6.
+6.
+6.
+6.
+61
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+16
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+11
+1
+1
+21
+21
+21
+2
+2
+2
+21
+25
+21
+21
+21
+2
+2
+2
+2
+2
+2
+21
+2
+3
+321
+5
+5
+5
+56
+5
+5
+6
+6
+21
+1
+1
+56
+12
+1
+5
+2
+2
+2
+1
+1
+1
+1
+65
+2
+1
+1
+5
+1
+1
+1
+1
+2
+2
+2
+2
+2
+23
+1
+2
+6
+1
+21
+2
+1
+1
+1
+1
+3
+5
+5
+5
+5
+2
+6
+1
+21
+1
+5
+1
+2
+1
+1
+1
+1
+1
+1
+2
+1
+1
+1
+1
+16
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+1
+21
+214
+2
+21
+2
+1
+1
+12
+5
+21
+1
+1
+3
+2
+5
+5
+21
+1
+21
+16
+1
+1
+1
+1
+2
+2
+2
+32
+2
+6
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+2
+2
+2
+5
+6
+6
+6
+6
+1
+2
+2
+56
+1
+1
+21
+21
+21
+1
+1
+32
+43
+6
+5
+2
+21
+2
+5
+5
+1
+1
+1
+1
+23
+21
+23
+23
+2
+32
+1
+2
+1
+6
+25
+5
+32
+1
+1
+5
+65
+1
+1
+1
+1
+1
+5
+21
+1
+1
+1
+1
+1
+1
+2
+2
+2
+1
+2
+2
+2
+2
+2
+6
+1
+21
+21
+1
+1
+1
+2
+21
+2
+3
+1
+21
+2
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+5
+4
+1
+21
+2
+1
+1
+2
+212
+212
+2
+2
+2
+2
+21
+25
+2
+21
+5
+5
+1
+1
+5
+1
+12
+1
+1
+1
+12
+1
+12
+2
+6
+1
+23
+21
+2
+3
+1
+1
+2
+23
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+12
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1.
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+21
+21
+212
+2
+2
+2
+2
+212
+21
+23
+212
+2
+3
+3
+3
+3.
+3
+3
+3
+3
+3
+3
+3
+5
+5.
+5
+5
+5.
+6
+2
+2
+21
+6
+2
+2
+2
+1.
+1
+1
+1
+1
+6
+1
+5
+2
+2
+2
+1
+1
+1
+1
+1
+1
+1
+2
+2
+2
+2
+2
+2
+2
+6
+1
+4
+1
+1.
+1
+1
+5
+5
+5
+12
+1
+1
+6
+12
+1
+1
+1
+12
+5
+2
+1
+2
+6
+1
+2
+2
+2
+5
+1
+1
+1
+2
+3
+12
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+1
+12
+52
+2
+21
+21
+212
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+2
+21
+21
+2
+2
+5
+5
+5
+5
+6
+6
+1
+12
+1
+12
+1
+12
+12
+1
+1
+1
+2
+3
+5
+5
+2
+56
+2
+4
+2
+2
+6
+2
+23
+2
+2
+2
+6
+6
+1
+12
+12
+12
+1
+12
+1
+2
+32
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+11
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+12
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+21
+2
+2
+2
+21
+212
+212
+2
+2
+2
+2
+21
+21
+21
+2
+2
+5
+5
+5
+5
+5
+65
+6
+1
+2
+1
+1
+3
+5
+2
+1
+1
+1
+2
+2
+1
+1
+21
+2
+1
+1
+1
+1
+21
+1
+1
+12
+1
+2
+2
+2
+5
+1
+1
+1
+1
+1
+5
+1
+1
+1
+1
+1
+1
+5
+1
+1
+1
+1
+1
+5
+2
+2
+6
+2
+2
+2
+2
+2
+21
+2
+2
+5
+65
+1
+5
+2
+2
+1
+1
+1
+1
+1
+1
+1
+2
+21
+2
+2
+21
+5
+5
+5.
+1
+1
+1
+21
+2
+21
+21
+21
+3
+1
+5
+3
+21
+1
+5
+5
+1
+323
+43
+5
+1
+2
+23
+1
+1
+2
+23
+2
+2
+5
+2
+5
+1
+1
+1
+25
+2
+1
+1
+2
+1
+1
+1
+1
+1
+1
+16
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+16
+1
+1
+1
+1
+1
+1
+16
+1
+2
+2
+2
+2
+2
+2
+5
+65
+1
+12
+21
+2
+21
+5
+21
+5
+21
+21
+21
+21
+21
+2
+5
+6
+65
+1
+1
+16
+1
+1
+1
+6
+5
+5
+2
+12
+1
+23
+23
+23
+32
+5
+2
+2
+1
+1
+1
+1
+1
+1
+1.
+1.
+1
+1
+1
+1
+1
+21
+2
+21
+2
+5
+5
+5
+5
+5
+5
+6
+6
+1
+2
+21
+21
+2
+6
+1
+1
+21
+1
+21
+2
+21
+21
+21
+2
+6
+2
+65
+32
+1
+1
+1
+1
+23
+23
+3
+21
+1
+23
+2
+2
+2
+1
+56
+43
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+2
+2
+2
+21
+21
+2
+2
+2
+2
+212
+2
+2
+2
+6
+12
+1
+12
+1
+1
+1
+1
+1
+3
+3
+3
+5
+12
+2
+6
+5
+2
+6
+21
+12
+1
+1
+1
+1
+1
+12
+12
+12
+1
+1
+12
+23
+2
+2
+32
+32
+36
+5
+5
+56
+2
+1
+6
+2
+2
+2
+2
+2
+2
+2
+2
+5
+6
+1
+1
+5
+6
+5
+1
+1
+1
+1
+2
+5
+5
+5
+5
+2
+2
+2
+2
+2
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+12
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+12
+12
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+21
+21
+21
+2
+212
+212
+23
+2
+2
+21
+21
+21
+21
+2
+2
+2
+212
+2
+21
+21
+23
+32
+3
+3
+32
+3
+5
+5
+5
+5.
+5
+56
+56
+5
+6
+6
+1
+123
+1
+2
+5
+5
+5
+5
+5
+2
+1
+1
+1
+2
+5
+1
+2
+1
+2
+2
+1
+1
+2
+5
+21
+26
+2
+2
+2
+6
+1
+1
+5
+34
+2
+1
+1
+1
+2
+2
+6
+2
+1
+1
+1
+21
+5
+5
+6
+1.
+1
+1
+1
+1
+1
+1.
+1
+1
+1
+2
+21
+2
+3
+3
+5
+5
+5
+6
+1
+1
+1
+12
+12
+12
+2
+12
+2
+2
+2
+2
+1
+5
+2
+2
+2
+6
+1
+1.
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+2
+2
+3.
+5
+5
+6
+12
+2
+21
+21
+5
+5
+1
+1
+21
+2
+65
+1
+1
+21
+36
+2
+52
+21
+12
+1
+1
+1
+1
+1
+1
+1
+21
+212
+212
+21
+21
+21
+21
+212
+2
+3
+5
+5
+6
+2
+2
+2
+1
+1
+22
+2
+21
+12
+1
+1
+1
+1
+2
+2
+2
+21
+12
+12
+1
+1
+1
+21
+1
+3
+6
+1
+1.
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+21
+21
+2
+2
+2
+21
+2
+2
+2
+2
+2
+21
+25
+2
+2
+2
+2
+21
+21
+21
+2
+2
+21
+2
+2
+232
+5
+5
+6
+6
+6
+2
+21
+21
+21
+21
+21
+21
+2
+3
+3
+5
+5
+6
+6
+6
+1
+1
+12
+1
+1
+3
+2
+1
+1
+2
+12
+1
+12
+12
+1
+12
+212
+212
+212
+212
+232
+2
+2
+21
+2
+21
+1
+1
+2
+2
+1
+2
+2
+5
+1
+1
+1
+1
+2
+2
+1
+6
+1
+1
+1
+1
+12
+1
+1
+21
+21
+21
+21
+5
+5
+5
+5
+6
+2
+1
+2
+1
+1
+6
+6
+1
+1
+1
+1
+1
+1
+21
+1
+1
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+16
+1
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+32
+5
+5
+5.
+5
+5
+5
+6
+21
+1
+6
+2
+2
+21
+2
+1
+6
+1
+1
+1
+2
+1
+1
+5
+21
+3
+1
+2
+21
+21
+21
+1
+12
+1
+1
+12
+12
+12
+12
+1
+21
+2
+2
+32
+5
+5
+5
+65
+2.
+1
+1
+5
+2
+1
+1
+2
+2
+2
+1
+1
+21
+21
+23
+3
+3
+3
+3
+23
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+2
+2
+2
+4
+1
+2
+1
+1
+21
+2
+21
+21
+6
+1
+1
+3
+5
+1
+2
+12
+1
+21
+21
+5
+5
+2
+1
+1
+1
+12
+2
+21
+1
+2
+2
+2
+2
+2
+1
+5
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+21
+21
+2
+21
+2
+21
+4
+5
+5
+5
+5
+5
+6
+6
+6
+6
+2
+2
+1
+2
+5
+1
+5
+6
+1
+1
+2
+1
+1
+1
+1
+1
+1
+2
+2
+5
+5.
+5
+6
+2
+1
+1
+12
+3
+5
+5
+2
+1
+1
+1
+1
+1
+1
+1
+2
+5
+1
+5
+1
+21
+21
+6
+1
+12
+2
+3
+6
+1
+5
+21
+1
+16
+1
+1
+1
+1.
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+16
+1
+1
+1
+1
+2
+2
+4
+5.
+5
+5
+65
+2
+2
+1
+2
+1
+21
+21
+1
+1
+1
+1
+1
+21
+1
+21
+65
+21
+21
+1
+1
+1
+1
+1
+21
+3
+1
+1
+1
+21
+21
+1
+1
+1
+1
+1
+1
+2
+2
+2.
+2
+5
+6
+1
+1
+2
+21
+21
+1
+1
+21
+23
+12
+2
+3
+3
+6
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+16
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+21
+21
+5
+6
+1
+5
+1
+1
+2
+2
+5
+6
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+21
+2
+2
+2
+2
+21
+5
+5
+5
+6
+6.
+6
+6
+6
+6
+1
+5
+5
+2
+1
+1
+1
+1
+2
+5
+5
+5
+5
+5
+5
+6
+6
+1
+1
+1
+1
+2
+1
+2
+5
+1
+1
+2
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+21
+2
+21
+21
+6
+1
+1
+1
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+21
+5
+5
+1
+5
+1
+1
+1
+6
+1
+1
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_sk.dic b/lib/kotext/kohyphen/hyphdicts/hyph_sk.dic
new file mode 100644
index 00000000..e9c91be8
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_sk.dic
@@ -0,0 +1,2468 @@
+ISO8859-2
+a1
+1
+1
+e1
+1
+i1
+1
+o1
+1
+1
+u1
+1
+y1
+1
+i2a
+i2
+i2e
+i2u
+o2u
+c2h
+d2z
+d2
+2b1b
+2b1c
+2b1
+2b1d
+2b1
+2b1f
+2b1g
+2b1h
+2b1c2h
+2b1j
+2b1k
+2b1l
+2b1
+2b1m
+2b1n
+2b1
+2b1p
+2b1r
+2b1s
+2b1
+2b1t
+2b1
+2b1v
+2b1w
+2b1x
+2b1z
+2b1
+2b1d2z
+2b1d2
+2c1b
+2c1c
+2c1
+2c1d
+2c1
+2c1f
+2c1g
+2c1c2h
+2c1j
+2c1k
+2c1l
+2c1
+2c1m
+2c1n
+2c1
+2c1p
+2c1r
+2c1s
+2c1
+2c1t
+2c1
+2c1v
+2c1w
+2c1x
+2c1z
+2c1
+2c1d2z
+2c1d2
+21b
+21c
+21
+21d
+21
+21f
+21g
+21h
+21c2h
+21j
+21k
+21l
+21
+21m
+21n
+21
+21p
+21r
+21s
+21
+21t
+21
+21v
+21w
+21x
+21z
+21
+21d2z
+21d2
+2d1b
+2d1c
+2d1
+2d1d
+2d1
+2d1f
+2d1g
+2d1h
+2d1c2h
+2d1j
+2d1k
+2d1l
+2d1
+2d1m
+2d1n
+2d1
+2d1p
+2d1r
+2d1s
+2d1
+2d1t
+2d1
+2d1v
+2d1d2z
+2d1d2
+21b
+21c
+21
+21d
+21
+21f
+21g
+21h
+21c2h
+21j
+21k
+21l
+21
+.as4t4ro3
+.atmo3
+.a2u1to3
+21m
+21n
+21
+21p
+21r
+21s
+21
+21t
+21
+21v
+21z
+21
+21d2z
+21d2
+2f1b
+2f1c
+2f1
+2f1d
+2f1
+2f1f
+2f1g
+2f1h
+2f1c2h
+2f1j
+2f1k
+2f1l
+2f1
+2f1m
+2f1n
+2f1
+2f1p
+2f1r
+2f1s
+2f1
+2f1t
+2f1
+2f1v
+2f1z
+2f1
+2f1d2z
+2f1d2
+2g1b
+2g1c
+2g1
+2g1d
+2g1
+2g1f
+2g1g
+2g1h
+2g1c2h
+2g1j
+2g1k
+2g1l
+2g1
+2g1m
+2g1n
+2g1
+2g1p
+2g1r
+2g1s
+2g1
+2g1t
+2g1
+2g1v
+2g1z
+2g1
+2g1d2z
+2g1d2
+2h1b
+2h1c
+2h1
+2h1d
+2h1
+2h1f
+2h1g
+2h1h
+2h1c2h
+2h1j
+2h1k
+2h1l
+2h1
+2h1m
+2h1n
+2h1
+2h1p
+2h1r
+2h1s
+2h1
+2h1t
+2h1
+2h1v
+2h1z
+2h1
+2h1d2z
+2h1d2
+2c2h1b
+2c2h1c
+2c2h1
+2c2h1d
+2c2h1
+2c2h1f
+2c2h1g
+2c2h1h
+2c2h1c2h
+2c2h1j
+2c2h1k
+2c2h1l
+2c2h1
+2c2h1m
+2c2h1n
+2c2h1
+2c2h1p
+2c2h1r
+2c2h1s
+2c2h1
+2c2h1t
+2c2h1
+2c2h1v
+2c2h1w
+2c2h1
+2c2h1d2z
+2c2h1d2
+2j1b
+2j1c
+2j1
+2j1d
+2j1
+2j1f
+2j1g
+2j1h
+2j1c2h
+2j1j
+2j1k
+2j1l
+2j1
+2j1m
+2j1n
+2j1
+2j1p
+2j1r
+2j1s
+2j1
+2j1t
+2j1
+2j1v
+2j1w
+2j1x
+2j1z
+2j1
+2j1d2z
+2j1d2
+2k1b
+2k1c
+2k1
+2k1d
+2k1
+2k1f
+2k1g
+2k1h
+2k1c2h
+2k1j
+2k1k
+2k1l
+2k1
+2k1m
+2k1n
+2k1
+2k1p
+2k1r
+2k1s
+2k1
+2k1t
+2k1
+2k1v
+2k1w
+2k1x
+2k1z
+2k1
+2k1d2z
+2k1d2
+2l1b
+2l1c
+2l1
+2l1d
+2l1
+2l1f
+2l1g
+2l1h
+2l1c2h
+2l1j
+2l1k
+2l1l
+2l1
+2l1m
+2l1n
+2l1
+2l1p
+2l1r
+2l1s
+2l1
+2l1t
+2l1
+2l1v
+2l1z
+2l1
+2l1d2z
+2l1d2
+21b
+21c
+21
+21d
+21
+21f
+21g
+21h
+21c2h
+21j
+21k
+21l
+21
+21m
+21n
+21
+21p
+21r
+21s
+21
+21t
+21
+21v
+21z
+21
+21d2z
+21d2
+2m1b
+2m1c
+2m1
+2m1d
+2m1
+2m1f
+2m1g
+2m1h
+2m1c2h
+2m1j
+2m1k
+2m1l
+2m1
+2m1m
+2m1n
+2m1
+2m1p
+2m1r
+2m1s
+2m1
+2m1t
+2m1
+2m1v
+2m1z
+2m1
+2m1d2z
+2m1d2
+2n1b
+2n1c
+2n1
+2n1d
+2n1
+2n1f
+2n1g
+2n1h
+2n1c2h
+2n1j
+2n1k
+2n1l
+2n1
+2n1m
+2n1n
+2n1
+2n1p
+2n1r
+2n1s
+2n1
+2n1t
+2n1
+2n1v
+2n1w
+2n1x
+2n1z
+2n1
+2n1d2z
+2n1d2
+21b
+21c
+21
+21d
+21
+21f
+21g
+21h
+21c2h
+21j
+21k
+21l
+21
+21m
+21n
+21
+21p
+21r
+21s
+21
+21t
+21
+21v
+21z
+21
+21d2z
+21d2
+2p1b
+2p1c
+2p1
+2p1d
+2p1
+2p1f
+2p1g
+2p1h
+2p1c2h
+2p1j
+2p1k
+2p1l
+2p1
+2p1m
+2p1n
+2p1
+2p1p
+2p1r
+2p1s
+2p1
+2p1t
+2p1
+2p1v
+2p1w
+2p1x
+2p1z
+2p1
+2p1d2z
+2p1d2
+2r1b
+2r1c
+2r1
+2r1d
+2r1
+2r1f
+2r1g
+2r1h
+2r1c2h
+2r1j
+2r1k
+2r1l
+2r1
+2r1m
+2r1n
+2r1
+2r1p
+2r1r
+2r1s
+2r1
+2r1t
+2r1
+2r1v
+2r1w
+2r1x
+2r1z
+2r1
+2r1d2z
+2r1d2
+2s1b
+2s1c
+2s1
+2s1d
+2s1
+2s1f
+2s1g
+2s1h
+2s1c2h
+2s1j
+2s1k
+2s1l
+2s1
+2s1m
+2s1n
+2s1
+2s1p
+2s1r
+2s1s
+2s1
+2s1t
+2s1
+2s1v
+2s1z
+2s1
+2s1d2z
+2s1d2
+21b
+21c
+21
+21d
+21
+21f
+21g
+21h
+21c2h
+21j
+21k
+21l
+21
+21m
+21n
+21
+21p
+21r
+21s
+21
+21t
+21
+21v
+21w
+21x
+21z
+21
+21d2z
+21d2
+2t1b
+2t1c
+2t1
+2t1d
+2t1
+2t1f
+2t1g
+2t1h
+2t1c2h
+2t1j
+2t1k
+2t1l
+2t1
+2t1m
+2t1n
+2t1
+2t1p
+2t1r
+2t1s
+2t1
+2t1t
+2t1
+2t1v
+2t1w
+2t1x
+2t1z
+2t1
+2t1d2z
+2t1d2
+21b
+21c
+21
+21d
+21
+21f
+21g
+21h
+21c2h
+21j
+21k
+21l
+21
+21m
+21n
+21
+21p
+21r
+21s
+21
+21t
+21
+21v
+21w
+21x
+21z
+21
+21d2z
+21d2
+2v1b
+2v1c
+2v1
+2v1d
+2v1
+2v1f
+2v1g
+2v1h
+2v1c2h
+2v1j
+2v1k
+2v1l
+2v1
+2v1m
+2v1n
+2v1
+2v1p
+2v1r
+2v1s
+2v1
+2v1t
+2v1
+2v1v
+2v1w
+2v1x
+2v1z
+2v1
+2v1d2z
+2v1d2
+2z1b
+2z1c
+2z1
+2z1d
+2z1
+2z1f
+2z1g
+2z1h
+2z1c2h
+2z1j
+2z1k
+2z1l
+2z1
+2z1m
+2z1n
+2z1
+2z1p
+2z1r
+2z1s
+2z1
+2z1t
+2z1
+2z1v
+2z1z
+2z1
+2z1d2z
+2z1d2
+21b
+21c
+21
+21d
+21
+21f
+21g
+21h
+21c2h
+21j
+21k
+21l
+21
+21m
+21n
+21
+21p
+21r
+21s
+21
+21t
+21
+21v
+21z
+21
+21d2z
+21d2
+2d2z1k
+2d2z1n
+2d2z1r
+2d2z1s
+2d21
+2x1t
+2x1n
+2b1
+21b
+2d2z1
+21d2z
+2d2z1
+21d2
+2d21
+a12
+a1o2
+e12
+e12
+e1o2
+e12
+e1u2
+i1o2
+o1a2
+o1e2
+o1i2
+o1o2
+u1a2
+u12
+u1i2
+u12
+u1o2
+u1u2
+y1a2
+y1e2
+y12
+y1u2
+a2u1
+a2i1
+b2l3b
+3b2l3
+b2l3c2h
+3b2l3k
+3b23k
+3b2l3
+b2l3
+b23
+3b2r3b
+b2r3d
+3b2r3k
+3b23k
+3b2r3l
+3b23
+3b2r3n
+3b2r3
+3b2r3v
+b2r3z
+b3s2c
+b3s2t
+c3k2t
+3c2r3
+3c23
+3c2r3k
+3c23k
+c3t2v
+32l3n
+32r3
+2r3p
+32r3t
+32r3v
+d3c4h4n
+3d2l3b
+3d2l3h
+d2l3n
+3d2l3
+3d23
+3d2r3d
+3d2r3g
+d2r3l
+3d2r3k
+3d2r3m
+d2r3n
+3d2r3v
+3d2r3z
+3d2r3
+3d23
+d3s2v
+d3s2t
+d3v2r
+3f2r3
+3f2r3f
+3f2r3k
+3f23k
+3f2r3m
+3f2r3n
+3g2l3g
+3g2r3c
+3g2r3g
+3h2l3b
+3h23b
+3h2l3t
+3h2m2l
+3h2r3b
+3h23b
+3h2r3
+3h2r3d
+3h2r3d2z
+3h2r3k
+3h2r3m
+3h2r3n
+3h2r3
+3h2r3t
+3h2r3v
+3c2h2l3p
+3c2h2r3b
+3c2h2r3
+c2h2r3c4h
+3c2h2r3l
+3c2h2r3t
+j2c2h3n
+j3s2t
+j32le
+j3t2m
+j3t2r
+3k2l3b
+3k23b
+3k2l3
+3k2l3z
+3k23z
+k2r3b
+3k2r3
+3k23
+3k23d
+3k2r3k
+3k23k
+3k23m
+3k2r3p
+3k2r3s
+3k2r3t
+3k2r3v
+k3s2
+k2s3n
+k3t2r
+l3d2r
+3k2n
+l3t2r
+m3b2l
+m3b2
+m3b2r
+m3f2l
+m3f2r
+m3k2n
+3m2l3
+3m2l3k
+m3p2l
+m3p2
+m3p2r
+m3p2s
+3m2r3h
+m2r3c4h
+3m2r3k
+m2r3l
+m2r3
+m2r3t
+3m2r3v
+3m2r3z
+3m23z
+m3s2t
+m32t
+n3da
+n3d2r
+n3f2l
+n3f2r
+n3g2h
+n3g2l
+n3g2
+n2g3n
+n3g2r
+n3g2v
+n3k2c
+n3k2h
+n3k2n
+n3k2r
+n3k2v
+n3s2c
+n32p
+n32t
+n3t2g
+n3t2l
+n3t2n
+n3t2r
+n23m
+3p2l3n
+3p2l3
+3p23
+3p2l3z
+3p23z
+3p23
+3p23c
+3p2r3
+3p2r3d
+3p2r3s
+3p2r3
+p32
+p3t2r
+r2b3n
+r3g2
+r3g2r
+r3g2s
+r3k2d
+r2k3n
+r3k2t
+r3k2v
+r3p2c
+r3p2
+r3p2r
+r3s2p
+r32
+r32l
+r32r
+r2t3m
+r3t2n
+r2t3
+r3t2r
+r3t2v
+3s4c4h4n
+s2k3l
+s2k3m
+s2k3n
+s3k2r
+s3k2v
+3s2l3n
+3s2l3
+3s2l3z
+s3p2r
+3s2r3d
+3s43k
+3s4r3
+s3t2k
+s4t3k2r3s4t4v
+s2t3l
+s3t2m
+s2t3n
+s3t2r
+s3t2v
+s23h
+s23m
+s23p
+3k2l
+3k2r
+3t2r
+34t4v
+t3k2l
+t3k2n
+3t2l3
+3t2l3k
+t3h2l
+3t4r3
+3t4r3h
+3t2r3l
+3t2r3k
+3t2r3m
+a4t2r3n
+3t2r3n
+3t23n
+3t23
+3t4r3p
+3t2r3v
+3t23
+3v2l3
+3v23
+3v2l3h
+3v2l3k
+3v2l3n
+3v2r3h
+3v2r3c2h
+3v2r3l
+3v23
+3v23t
+3v2r3z
+3v23z
+3v4z4d
+3v4z4h
+3v4z4n
+3v3z2
+z3d2n
+noz5d4r
+3z4d4r
+3z4d4v
+z3g2n
+3z4h4r
+3z2r3k
+3z2r3n
+3z4v4l
+2d3n
+32l3
+32l3t
+32t
+32r3
+3s2t
+x3p2l
+x3p2r
+x3t2r
+3b2l43n
+3b243k
+3b2l4n3k
+3b23k2n
+3b2r4b3l
+3b2r4b3t
+3b2r43k
+3b2r4d3c
+3b24d3n
+3b2r3h2l
+3b44k3n
+3b4r4m3b
+3b4r4n3
+3b4r4n3k
+3b4r43l
+3b4r4t3l
+3b4r4t3n
+3b4r4v3n
+3b4r4z3d
+3b4r4z3l
+3b4r4z3n
+b3s2t2r
+3c443k
+3c4r4k3n
+3c4v4r3
+3c4v4r3k
+3c4v43k
+3c4v4r3l
+34l4n3k
+34r34r
+34r4c4h3n
+34r4p3k
+34r4p3n
+34r4t3n
+34v4r3k
+34v4r3l
+3d4l4b3n
+d443k
+d4l43n
+d443n
+3d4r4c3n
+3d4r4g3
+3d4r4g3n
+3d4r4h3n
+3d4r4n3
+3d4r4n3k
+3d4r4s3n
+3d4r43b
+3d4r43k
+3f4r4c3k
+3f4r4c3n
+3f4r43k
+3f4r4f3l
+3f4r4k3n
+3f4r4n3d
+3f4r4n3d4
+3f4r4n3g
+3f4r4n3k
+3g4l4g3n
+3g2r4c3k
+3h24b3k
+3h2l3t4n
+3h2r4b3
+3h2r43k
+h2r4d3l
+3h2r4g3
+3h2r4k3
+3h2r4k3n
+3h24k3n
+3h2r4n3
+3h2r4s3t
+3h2r4s3
+3ch44p3k
+3c2h2r4b3t
+3c2h2r4c4h3l
+3c2h2r4c4h3
+3c4h4r4s3t
+j3s4t4r
+j3s4t4v
+3k4l4b3
+3k4l4b3k
+3k4l4z3k
+3k4l4z3n
+3k4r43m
+3k4r43n
+3k4r4k3v
+3k4r4m3n
+3k44m3n
+3k4r4p3
+3k4r4s3t
+3k4r43t
+3k4r4t3k
+3k4r4v3n
+3m2l43k
+3m24k3n
+3m24k3v
+3m2l4s3n
+m3p4r3p
+m3p4r3v
+3m4r4k3n
+3m4r4k3v
+3m4r4m3l
+3m4r4n3
+3m4r4n3k
+3m443t
+3m44t3v
+3m4r4z3l
+3m4r4z3k
+3m4r4z3n
+n4g3s4t
+n34t4r
+n3t4l3m
+3p2l4z3l
+3p24z3n
+p24c3n
+3p2r43k
+3p4r4d3n
+3p44c2h3n
+3p4r4s3k
+3p4r4t3k
+r2s3k4d
+r2s3k4t
+er4s3t4v
+3s4l4n3k
+3s4k4r3z
+3s4m4r3c
+3s4m4r3
+3s4m4r3d
+3s4m4r3k
+3s4m4r3t
+3s4p4r3c4h
+3s4r4d3c
+3s4r4k3n
+3s4r4s3t
+3s4t43k
+s3t4r3b
+ko4s3t4r3
+3s4t4r3
+3s4t43h
+3s4t4r3k
+s4t4r3v
+4s45k4rt
+34k4l3b
+34k4r3k
+34k43k
+ma3k4r3t
+34k4r3t
+34p4l3h
+34t4r3b
+4t4r3n
+34t4v4r3t
+34t4v4r3
+3t24c3
+3t2r4b3l
+t2r43k
+3t2r4d3l
+3t2r4h3l
+3t2r4h3n
+3t2r4k3n
+3t2r4k3v
+3t2r4m3n
+3t44p3n
+3t2r43k
+3t2r43n
+3t2v4r3d
+3t2v4r3d4z
+3t2v43d4z
+3v2l4h3
+3v2l4h3k
+3v2l4h3n
+3v2l4n3k
+3v2l4n3n
+3v4r4h3n
+3v4r4k3n
+3v44z3g
+3v4r4z3g
+3v4r4z3n
+3v4r43l
+3z4h43
+3z4r4n3n
+34l43n
+34l4t3n
+34r4d3k
+3b4r4n3k4n
+b3d443n
+3c4v4r43k
+3c4v4r4n3k
+344s3t4v
+34r4t4t3n
+34v4r4k3n
+3d4r43g4r
+3f4r4n4g3n
+h24s3t4k
+3c4h4r4s4t3n
+3k4r4s4t3n
+3k4r4s4t3
+3s4m4r43
+3s4m4r4t3k
+s3t4r4n3k
+34k4l4b3n
+ma3k4r4t3n
+34k4r4t3n
+34k4v4r3
+34k4v4r3k
+34k4v43k
+34k4v4r3n
+34m4r4d3k
+34m4r4n3c
+34p4l4h3n
+34t4r4k3n
+33t4r4n3g
+3t4v4r4d3n
+3v4r4s3t4v
+3v4r4z3g4n
+3c4v4r4n3g4n
+34k4v4r4k3n
+34k4v44k3n
+k43n.
+k43nho.
+k43nmu.
+k43nom.
+k43nm.
+k43n.
+k43n.
+k43nej.
+k43n.
+k43nou.
+k43n.
+k43nch.
+k43nmi.
+k4t3n.
+k4t3nho.
+k4t3nmu.
+k4t3nom.
+k4t3nm.
+k4t3n.
+k4t3n.
+k4t3nej.
+k4t3n.
+k4t3nou.
+k4t3n.
+k4t3nch.
+k4t3nmi.
+n43n.
+n43nho.
+n43nmu.
+n43nom.
+n43nm.
+n43n.
+n43n.
+n43nej.
+n43n.
+n43nou.
+n43n.
+n43nch.
+n43nmi.
+n4k43n
+n4t3n.
+n4t3nho.
+n4t3nmu.
+n4t3nom.
+n4t3nm.
+n4t3n.
+n4t3n.
+n4t3nej.
+n4t3n.
+n4t3nou.
+n4t3n.
+n4t3nch.
+n4t3nmi.
+r4d3n.
+r4d3nho.
+r4d3nmu.
+r4d3nom.
+r4d3nm.
+r4d3n.
+r4d3n.
+r4d3nej.
+r4d3n.
+r4d3nou.
+r4d3n.
+r4d3nch.
+r4d3nmi.
+r4m3n.
+r4m3nho.
+r4m3nmu.
+r4m3nom.
+r4m3nm.
+r4m3n.
+r4m3n.
+r4m3nej.
+r4m3n.
+r4m3nou.
+r4m3n.
+r4m3nch.
+r4m3nmi.
+r4p43n
+r4t3n.
+r4t3nho.
+r4t3nmu.
+r4t3nom.
+r4t3nm.
+r4t3n.
+r4t3n.
+r4t3nej.
+r4t3n.
+r4t3nou.
+r4t3n.
+r4t3nch.
+r4t3nmi.
+s4t3n.
+s4t3nho.
+s4t3nmu.
+s4t3nom.
+s4t3nm.
+s4t3n.
+s4t3n.
+s4t3nej.
+s4t3n.
+s4t3nou.
+s4t3n.
+s4t3nch.
+s4t3nmi.
+z4d3ny.
+z4d3neho.
+z4d3nemu.
+z4d3nom.
+z4d3nym.
+z4d3ne.
+z4d3na.
+z4d3nej.
+z4d3nu.
+z4d3nou.
+z4d3ni.
+z4d3nych.
+z4d3nymi.
+z4d3n.
+z4d3nho.
+z4d3nmu.
+z4d3nm.
+z4d3n.
+z4d3n.
+z4d3n.
+z4d3n.
+z4d3nch.
+z4d3nmi.
+b2l43k
+l2t3k2a.
+l2t3k2y.
+l2t3k2e.
+l2t3k2u.
+l2t3k2ou.
+l2t3k2m.
+l2t3k2ch.
+l2t3k2a1mi.
+n2t3k2a.
+n2t3k2y.
+n2t3k2e.
+n2t3k2u.
+n2t3k2ou.
+n2t3k2m.
+n2t3k2ch.
+n2t3k2a1mi.
+n2k2t3k
+p2t3k2a.
+p2t3k2y.
+p2t3k2e.
+p2t3k2u.
+p2t3k2ou.
+p2t3k2m.
+p2t3k2ch.
+p2t3k2a1mi.
+s2t3k2a.
+s2t3k2y.
+s2t3k2e.
+s2t3k2u.
+s2t3k2ou.
+s2t3k2m.
+s2t3k2ch.
+s2t3k2a1mi.
+5p4r4s3t
+b3s4k
+d3s4k
+j3s4k
+l4p3s4k
+l3s4k
+3s4k
+l4t3s4k
+4m3s4k
+4m4p3s4k
+n4d3s4k
+n4k4t3s4k
+n3s4k
+n4t3s4k
+p3s4k
+p4t3s4k
+r3s4k
+r4t3s4k
+r4z5s4k
+5s4r4b3s4k
+3s4k
+t3s4k
+v3s4k
+z3s4k
+3s4k
+n2d3
+z32t2
+r4z32t2
+b3s4t4v
+3s4t4v
+d3s4t4v
+3s4t4v
+3s4t4v
+m3s4t4v
+n3s4t4v
+n4t3s4t4v
+p3s4t4v
+r3s4t4v
+r4v5s4t4v
+3s4t4v
+t3s4t4v
+v3s4t4v
+3s4t4v
+.a2e2ro
+.a2e2ro3d2r
+.aero3g2r
+.a2e2ro3k2l
+.aero3p2l
+.aero3s2k
+.aero3s2t
+.aero3t2r
+.akcie3s2c2h
+.ane3s2teti
+.ane3s2tz
+.anti5k4l
+.anti5k4r
+.apo5p4le
+.ap4rio
+.ap4ri
+.arci5k4
+.aristo5k4
+.as3k2lep
+.austro5s4
+.bac2k3hand
+.balne2o3
+.belo5
+.belo5h4
+.bez5
+.bez5b4
+.bez5d4
+.bez5h4
+.bez5k4
+.bez5m4
+.bez5p4
+.bez5s4
+.bez5t4
+.bez5v4
+.bez5z4
+.bielo5
+.bielob4
+.bieloh4
+.bielov4
+.bi2o5
+.biok4
+.biop4
+.bios4
+.blaho5
+.blahop4
+.blahos4
+.bledo5
+.boha5p4
+.boho5s4
+.boe5
+.boe5d4
+.boec2h4
+.brato5v4r
+.b2z2d
+.cro5v4ra
+.celo5d4
+.celo5k4
+.celo5p4
+.celo5s4
+.celo5u4
+.ceno5t4
+.ces2t5maj
+.cirkevno5
+.cirkevno5p4
+.c4t4n
+.cudzo5k4
+.cudzo5o4
+.cudzo5s4
+.cudzo5t4
+.cudzo5v4
+.cyto5p4
+.aro5k4
+.aro5s4
+.aro5v4
+.aro5z4
+.erno5b4
+.erno5h4
+.erno5k4
+.erno5o4
+.erveno5a4
+.erveno5b4
+.erveno5h4
+.erveno5k4
+.erveno5o4
+.erveno5p4
+.ierno5b4
+.ierno5h4
+.ierno5o4
+.o5ch4
+.o5s4
+.udo5t4
+.da3k2d
+.atelino5t4
+.de5f4
+.de5g4
+.dek4l
+.desa5
+.de54t2
+.dez5i2
+.dez5o2
+.dis2k3d4
+.divo5t4
+.dlho5h4
+.dlho5p4
+.dobro5d4
+.dobro5p4
+.dobro5s4
+.do52m
+.do5d4
+.do5f4
+.do5h4
+.do5c4h4
+.do5i4
+.do5k4
+.do5o
+.do5p4
+.do5s4
+.do54p
+.do54tie
+.do54t
+.do5t4l
+.do5t4m
+.do5t4r
+.do5t4v
+.do5u
+.do5v4
+.do5z4
+.do54
+.drevo5p4
+.drevo5o
+.drevo5v4
+.drobno5z4
+.druho5s4
+.dvoj5al
+.dvoj54
+.dvoj5d4
+.dvoj5h4
+.dvoj5i4
+.dvoj5k4
+.dvoj5p4
+.dvoj5s4
+.dvoj5t4
+.dvoj5u
+.dvoj5v4
+.dvoj5z4
+.elektro5
+.ex5k4
+.fol2k5
+.foto5
+.gala5p4
+.gama5g4
+.ge4o
+.hnedo5o
+.hnedo5u
+.holo5b4
+.holo5h4
+.holo5k4
+.hore5z4
+.horno5u4
+.hrzo5s4t4
+.hrzo5v4
+.hrzy5p4
+.hrubo5s4
+.hydro5
+.chorobo5p4
+.jasno5o
+.jasno5z4
+.jedno5h4
+.jedno5i4
+.jedno5p4
+.jedno5s4
+.jedno5u4
+.jedno5z4
+.juho5a
+.juho5s4
+.juno5s4
+.kata5k4
+.kata5s4t4
+.kmeo5t4
+.koso5d4
+.koso54
+.koso5u
+.krivo5p4
+.kruto5v4
+.krvi5p4
+.krvi5s4
+.krvi5t4
+.ktovie5a2
+.lsky5p4
+.lesos4
+.4s4t
+.udovo5u
+.makro5k4
+.makro5o4
+.makro5s4
+.mlo5k4
+.malo5o
+.mlo5v4
+.mrno5t4
+.medzi5h4
+.medzi5i4
+.medzi5p4
+.medzi54
+.medzi5t4
+.melo5d4
+.meru52
+.miesto5d4
+.miesto5p4
+.mikro5e4
+.mikro5k4
+.mikro5o
+.mikro5p4
+.mimo54
+.mimo5
+.mimo5v4
+.mnoho5s4
+.mnoho5t4
+.mnoho5u
+.mnoho5v
+.mnoho5z
+.modro5o
+.mrako5d4
+.mravo5u
+.mucho5t4
+.m4z4d
+.na5a4
+.na5b4
+.na5c4
+.nad5h4
+.na5d4nes.
+.nad5p4
+.na5d4p4.
+.na5d44.
+.na5d4robno.
+.na5h4
+.na5i4
+.na5k4
+.na5m4
+.na5o4
+.na5p4
+.n5p4
+.nrodno5o
+.na5s4
+.na5st4
+.n5s4
+.n5st4
+.na54
+.na5k4
+.na65sk
+.na5t4
+.na5u4
+.na54
+.n5u4
+.n54
+.na5v4l
+.na5v4na
+.na5v4r4
+.n5v4r4
+.na5v4z4
+.na5z4r
+.na5z4v
+.na6z5vy
+.nz5v4
+.na54
+.ne5a4
+.ne5do3u2k
+.ne5e4
+.ne5i4
+.ne5m4
+.ne5na5h4
+.ne5na5i4
+.ne5na5k4
+.ne5na5m4
+.ne5na5p4
+.ne5na5s4
+.ne5na5t4
+.ne5p4
+.ne5s4
+.ne6s5tor
+.ne54
+.ne5t4
+.ne6t5t
+.ne5u2
+.ne52
+.ne5v4
+.ne5z4d4r
+.ne5z4d4v
+.ne5z4l
+.ne5z4m
+.ne5z4n
+.ne5z4r
+.ne5z4v
+.nie5k4
+.ni5k4
+.ni6k5to
+.nzko5k4
+.novo5u2
+.novo5z2
+.obi5d4
+.ob5k4
+.obo5s4
+.obo5z4
+.ob5s4
+.ob5t4
+.ob5z4
+.od5b4
+.od5c4
+.od5d4
+.od5f4
+.od5h4
+.od5c4h4
+.od5i4
+.od6i5
+.od54
+.od5k4
+.odo5b4
+.odo5h4
+.odo5k4
+.odo5m4k4
+.odo5p4
+.odo5s4
+.od5p4
+.od5s4
+.od54
+.od5t4
+.od5v4
+.od5z4
+.t4v4r
+.o5h4l
+.o5h4
+.o5h4na
+.o5h4n
+.o5h4r
+.o5c4h4
+.o5k4l
+.o5k4
+.okolo5i
+.okolo5s4
+.o5k4ra
+.o5k4r
+.o5k4resa
+.o5k4resva
+.o5k4ri
+.o5k4r
+.o5k4ru
+.o5k4r
+.o5m4l
+.o5m4n
+.o5m4r
+.o5p4
+.o6p5lan
+.o6p5rat
+.o5s4lab
+.o5s4lad
+.o5s4lav
+.o5s4lv
+.o5s4lep
+.o5s4lo
+.o5s4p4
+.o5s4tar
+.o5s4ta
+.o5s4tan
+.o5s4ta
+.o6s5tatn
+.o5s4tatok
+.o5s4tatk
+.o5s4tv
+.o5s6to5
+.o5s6t4rap
+.ostro5u
+.o5s4ved
+.o5s4vetl
+.o5s4viet
+.o5s4vie
+.o5s4vit
+.o5s4voj
+.o54k4
+.o544
+.o54m4
+.o54p4
+.o54v4
+.o5t4ras
+.o5t4rav
+.o5t4rv
+.o5t4rep
+.o5t4ria
+.o5v4dov
+.o5v4ld
+.o5v4la
+.o5v4p4
+.o5v4r
+.o5z4l4
+.o5z4n
+.o5z4re
+.o5z4v4l
+.p5izbo
+.plno5a
+.plno5p4
+.plno54
+.plno5kr4
+.plocho5d4
+.po5b4
+.po54
+.poda5k4
+.pod5b4r
+.pod5h4
+.pod5c4h
+.pod5k4
+.pod5p4
+.po5d4r
+.po5d4rep
+.pod5re
+.po5d4rh
+.po5d4rie
+.po5d4rm
+.po5d4rv
+.po5d4r4
+.pod5s4ko
+.pod5v4
+.pod3zem
+.pod3zol
+.pod3a
+.pod3u
+.po5h4
+.po6h5reb
+.po5c4h4
+.po5i4
+.po5k4
+.pol5d4
+.pol5i4z
+.polo5a
+.polo5b4
+.pol5o4bl
+.polo5d4
+.polo5h4l
+.polo5i
+.polo5k4
+.polo5m4
+.polo5o4
+.polo5p4
+.polo5s4
+.polo5t4
+.polo5u4
+.polo54
+.polo5v4
+.polo5z4
+.pol5s4t
+.po5m4
+.po6m5nk
+.po5o4
+.po5ob4h
+.po5ob4l
+.po5s4
+.po6s4t5s4k4rip
+.po6s5tul
+.po54
+.po65ta
+.po65tov
+.po65v
+.po5t4k4n
+.po5t4
+.po5t4r
+.poroz5p4
+.poroz5s4
+.poroz5v4
+.po6st5g4r
+.po6s5ti
+.po5t4
+.po5u
+.po5v4
+.po4v5ra
+.povy5h4
+.povy5k4
+.povy5p4
+.povy5s4
+.povy5v4
+.povy5z4
+.po5v4z4b
+.po5z4
+.pra5o4
+.pra5p4
+.pravicovo5o
+.pra5v4l
+.pra5v4nu
+.pra5v4n
+.pr5vo5p4
+.pra5vo5s4
+.pre5b4
+.pre5c4
+.pred5c4
+.pred5h4
+.pred5ch4
+.pred5i
+.pred5k4
+.pred5m4
+.predo5h4
+.pred5op
+.pred5ostatn
+.pred5p4
+.pre5d4rah
+.pre5d4rap
+.pre5d4ra
+.pre5d4ra
+.pre5d4ri
+.pre5d4r
+.pred5s4
+.pred5v4
+.pred5z4
+.pre54
+.pre5e2
+.pre5f2
+.pre5h4
+.pre5c4h4
+.pre5i4
+.pre5k4
+.pre6k5vap
+.pre5m4
+.pre5o4
+.pre5p4
+.pre5s4
+.pre6s5n
+.pre54
+.pre5t4
+.pre5v4
+.pre5z4
+.pre54
+.pri5b4
+.pri54
+.pri5d4
+.pri5h4
+.pri5c4h4
+.pri5k4
+.pr5k4
+.pri5m4
+.pri5p4
+.pri5s4
+.pr5s4
+.pr6s5p
+.pri6s5p
+.pri5s4p
+.pri54
+.pri65la.
+.pri65li.
+.pri65lo.
+.pri5t4
+.pri5v4
+.pri5z4
+.pri54
+.re5g4
+.re5k4
+.re6k5v
+.re5p4
+.re6p5n
+.re54
+.re5t4
+.ro4z5i4
+.ro6z54
+.rozo5b4
+.rozo5d4
+.rozo5c4h4
+.rozo5m4
+.rozo5p4
+.rozo5r4
+.rozo5s4
+.rozo54
+.rozo5z4
+.rozo54
+.ro6z5u4
+.ro6z5v4
+3s4polu5
+3s4polu5h4
+3s4polu5p4
+3s4polu5v4
+.ikmo5o
+.iroko5
+.iroko5p4
+.tto5
+.t4vor5
+.su4b5s4
+.s5h4
+.s5k4r
+.s5m4r
+.s5s4
+.s5v4
+.s5z4
+.troj5
+.t4v4r4do5
+.viac5k4
+.viac5v4
+.vide2o5
+.vntro5s4
+.vntro54
+.vo5p4ch
+.vo5p4r
+.vo5s4p
+.vo5t4
+.vo5v4
+.vy5
+.v5
+.vy5b4
+.vy5c4
+.v5c4
+.vy54
+.v54
+.vy5d4
+.v5d4
+.vy5h4
+.vy6h5
+.vy6h5ne
+.v5h4
+.vy5c4h4
+.vy5k4
+.v5k4
+.vy5m4
+.vy5p4
+.v5p4
+.vy5s4
+.v5s4
+.vy54
+.vy65
+.v65k
+.vy5t4
+.v5t4
+.vy5v4
+.vy5z4
+.v5z4
+.za5b4
+.z5b4
+.za5c4
+.za54
+.za5d4
+.za5h4
+.za5c4h4
+.za5k4
+.za5m4
+.za5p4
+.za5r4
+.za5s4
+.za54
+.za5t4
+.za5v4
+.za5z4
+.za54
+.z5k4
+.z5z4
+.zo5b4
+.zo6d5p
+.zo5d4r
+.zo5d4v
+.zo5h4
+.zo5m4l
+.zo5m4r
+.zo5s4
+.zo54
+.zo5t4
+.zo5v4
+.zo5z4
+.zo54
+5alkohol
+auto4rk
+auto4rs
+5b4lah
+5b4ledn
+5b4lesk
+5b4lok
+5b4ld
+5b4lysk
+5b4lysn
+5boh3vi4e3a2k
+5boh3vi4e3o2d3k
+5boh3z4
+5boles4t5n
+5b4ra
+5b4rzd
+5b4rec2h
+5b4ronz
+5b4ru
+5b4rs
+5b4rzg
+5c4muk
+5c4nie
+5c4vak
+5c4vi
+5c4vik
+6s5lov
+54len
+54lnk
+54lnok
+54lov
+5d4ov
+5d4ramat
+5d4ra
+5d4vans45
+5d4vih
+5d4vi
+5d4voj
+5d4vor
+5e2u2rp
+5f4ak
+5f4lias
+5f4ranc
+5f4rekven
+5f4rz
+5g4raf
+5g4ram
+pro6g5ram
+5g4r
+5g4rob
+5g4vardej
+5h4lad
+5h4las
+5h4lav
+5h4ad
+5h4liad
+5h4luch
+5h4mat
+5h4mot
+5h4na
+5h4ned
+5h4nev
+5h4niezd
+5h4noj
+5h4nut
+5h4n
+5h4nt
+5h4rab
+5h4r3mot
+5h4ran
+5h4ra
+5h4rob
+5h4rom
+5h4roz
+5h4rub
+5h4ryz
+5h4viezd
+5c6h4lap
+5c6h4leb
+5c6hran
+5c6h4rn
+5c6h4r
+5c6h4vl
+5c6h4vt
+5c6h4vat
+5c6h4vost
+5jedens4t5k
+5jedens45
+5k4lad
+5k4la
+5k4ak
+5k4lam
+5k4ls
+5k4liat
+5k4lia
+5k4lep
+5k4les
+5k4
+5k4resb
+5k4res
+5k4ritic
+5k4rdl
+5k4rch
+5k4ruh
+5k4r
+5k4ryt
+5k4valif
+5k4valit
+5k4vet
+5k4vadr
+5m4ladis4t3v
+5m4no
+5m4rav
+5m4rz
+na5d44ga
+na5d44g
+nav34tev
+nv34tev
+nav34tv
+5p4ln
+5p4lastik
+5p4lat
+5p4lav
+5p4leta
+5p4letie
+5p4let
+5p4lies
+5p4ne2umat
+5p4rv
+s6prv
+5p4riam
+5p4rirod
+5p2rism
+5p4roduk
+5s4fr
+5s4c2hopn
+5s4k4lad
+5s4k4lon
+5s4ko
+5s4kok
+5s4kop
+5s4kor
+5s4kr
+5s4k4romne
+5s4k4rot
+5s4k4rc
+5s4k4rutk
+5s4k4rv
+5s4ksen
+5s4kuto
+5s4k4vc
+5s4ladk
+5s4lav
+5s4lv
+5s4led
+5s4lep
+5s4lovn
+5s4love
+5s4lova
+5s4lovk
+5s4luh
+5s4l
+5s4ub
+5s4ma
+5s4mel
+5s4mer
+5s4piev
+5s4pev
+5s4por
+5s4potreb
+5s4p4ravod
+5s4p4raved
+5s4p4rvn
+5s4p4ravo
+5s4tarost
+5s4tatic
+5s4tav
+5s4t4rach
+5s4t4ran
+5s4t4rn
+5s4t4rda
+5s4t4ra
+5s4t2rat
+5s4t2red
+5s4t2rek
+5s4t4rel
+5s4t4re
+5s4t4riel
+5s4t4rie
+5s4t4rih
+5s4t4ri
+5s4t4rom
+5s4t4rh
+5s4t4run
+5s4t4ru
+5s4tati
+5d2ve5s4to
+5t2ri5s4to
+54tyri5s4to
+5p5s4to
+5es45s4to
+5sedem5s4to
+5osem5s4to
+5dev5s4to
+5p5
+5es45
+5s4t4la
+5s4tup
+5s4ved
+54ah
+54liap
+54kola
+54k4rab
+54k4rie
+54pin
+54p4liech
+54print
+54tart
+54tt
+54tep
+54tt
+54t4ruktr
+54tude
+54tudo
+54t4vera
+54t4vorec
+54tyli
+54ast
+5tiep4
+54t4v4r45k4
+54t4v4r45l4
+54t4v4r45r4
+54t4v4r45s4
+5t4la
+5t4lak
+5t4ran4s5
+5t4ras
+5t4resk
+5t4retin
+5t4ried
+5t4rub
+5t4r4vaj
+5t4r4val
+5t4r4van
+5uholnk
+5uhon
+5viac5h4
+5v4era
+5v4ld
+5v4las
+5v4rs
+5v4rav
+5v4rat
+5v4rt
+5v4imn
+5v4tk
+5v4tip
+5vy5s4t4rja
+5v4z4du
+5v4z4ah
+5v4z4a
+5z4lom
+5z4lu
+5z4mysel
+5z4mysl
+5z4nak
+5z4nm
+5z4na
+5z4rak
+5z4vz
+5z4vest
+5zv4es
+5z4vod
+5z4vuk
+5z4vu
+54r
+54rane
+54reb
+54rt
+.cv6
+.ch6
+.sp6
+.st6
+.k6
+.p6
+.t6
+.tk6
+.uh6
+.uc6h6
+.uk6
+.um6
+.up6
+.us6
+.s6
+.usc6h6
+.sc6h
+.usk6
+.sl6
+.usm6
+.sm6
+.s7ta.
+.s7tami.
+.s7to
+.s7ti
+.ust6l
+.st7ny
+.ust6r
+.s7tret
+.us7t4ric
+.s6t6r
+.6
+.ut6
+.uv6
+.uz6
+.vd6
+.vh6
+.vk6
+.vp6
+.vs6
+.v6
+.vt6
+.vz6
+.vzh6
+.vzk6
+.vzl6
+.vzp6
+.v6
+.zb6
+.zd6n
+.zd6r
+.zd6v
+.zg6
+.zh6
+.zm6
+.zr6
+.zv6
+4b4s4.
+8c4h.
+8d4z.
+8d4.
+4c4ht4.
+4j4s4.
+4lt.
+4m4p4r.
+4m4p4s.
+4m44t.
+4n4k4t.
+4p4r4v.
+4rd.
+r4p4t.
+r44.
+r4t4z.
+4st.
+4s.
+5k4rt.
+5s4to5k4rt.
+5t44c4.
+akci3a2
+akvri3u2m
+gymnzi3um
+le2u3kmia
+t2ri3u2mf
+kli3e2nt
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_sl.dic b/lib/kotext/kohyphen/hyphdicts/hyph_sl.dic
new file mode 100644
index 00000000..2a11edb0
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_sl.dic
@@ -0,0 +1,1070 @@
+ISO8859-2
+.av5r
+.di6spo
+.ek3s
+.ek5v
+.is1
+.iz1
+.obi4d
+.ob5it
+.od1
+.po4d5n
+.po4v5s
+.pre6d7n
+.se4k5s
+.si4s
+.st4
+.voz5l
+.voz5n
+.zliz6
+a1a
+a1b
+ab5ba
+ab6rod
+a1c
+ac5ci
+a1"c
+a1d
+ad2l
+a6dobl
+ad6rl.
+ad6rla
+ad6rob
+ad5ur
+a1e1
+a1f
+af5ga
+af1t
+a1g
+a1h
+a4hm
+ah5mi
+ah5mo
+a1i
+ai2n1
+a1j
+a4j5ek
+a4jf
+aj5fi
+aj5fo
+aj5ha
+aj5he
+aj5im
+aj6imo
+aj3os
+aj6stb
+a5ju.
+aj3u"c
+aj3ug
+aj5"zn
+a1k
+ak4s
+a4kst
+a1l
+a1m
+a4mz
+a1n
+an6dga
+an6dhi
+a4nm
+an5mi
+an5zi
+a1o
+ao2b1
+a1p
+a4ph
+a1ra
+ar6dwa
+a1re
+a1ri
+a1ro
+a1ru
+ar5xa
+ar5xo
+ar5xu
+a1s
+a4s"s
+as5"s"c
+a1"s
+a1t
+a4tf
+at4i
+a1u1
+a4uf
+a2uk
+a4ul
+a1v
+av5"si
+a4v"z
+av5"za
+ay5to
+a1ze
+az5fo
+a4zig
+az3la
+az3le
+az4lil
+az4lit
+az4liv
+a4zob
+a4z3o"c
+az5ora
+az5oro
+a4zra
+az4red
+az5vp
+a1"z
+a"z5mi
+ba6bba
+ban3"c4
+ba4u
+2b1c
+2b1"c
+2b1d
+be1
+be4v
+b1h
+bi1
+b1ja
+b4ja.
+b5jel
+b3jem
+b5jet
+2b1k
+b3lep
+b5leta
+b5lil
+b5lit
+b5liv
+b1m
+4bmi
+2b1n
+bo1
+bo6chm
+b5ord
+bo5vp
+b3rab
+b5ras
+b3ra"s
+b3rez
+bre4zg
+bre4zi
+bre4zr
+b5re"ze
+b3rob
+br6"zda
+2b1s
+2b1"s
+2b1t
+bu5ki
+bu5ku
+bu5kv
+bu5ry
+2b1v
+b1z
+b1"z
+2cc
+2ch.
+ch5ma
+2ck
+c1ka
+ck1o2
+c5ko.
+ckov3
+ck1s
+ck5we
+2c1n
+2c1t
+2"c1b
+2"c1g
+"ci1
+1"cj
+2"c1k
+1"cl
+4"c3let
+"c5mes
+2"c1n
+4"cop
+2"c1p
+2"c1s
+4"cup
+2d1b
+2d1c
+2d1"c
+2d1d
+dd6voj
+d2e
+6d5elem
+de4min
+de4mn
+de4z3i
+2d1g
+2d1h
+di5ck
+4dind
+d4i5no
+dis1
+di4skr
+di6spr
+2d1j
+2d1k
+5dlet
+d2li
+d5lit
+d5liv
+d1lo
+2d3m
+4d3nac
+4d5na"c
+4d5nap
+4d3nar
+4dnas
+4d5neb
+d5niv
+4d5niz
+4d5nja"c
+4d3no"z
+d2o
+4dob"c
+4d5obd
+2d3o2f
+do5rd
+do5v"c
+do5v4z
+2d1p
+d5raz
+d3rep
+dre6pn
+d4rev
+2d1s
+2d1"s
+2d1t
+dteks6
+d4ur
+du5ro
+du5um
+2d1v
+4d3vi
+2d1z2
+e1a
+e1b
+eb4j
+eb6liz
+e1c
+e1"c
+e4"cd
+e"c5de
+e"c5di
+e"c5do
+e"c3le
+e"c5op
+e4"ct
+e"c5ti
+e"c5to
+e"c5tr
+e"c5up
+e2"c1v
+e"c6vrs
+e1d
+e4df
+ed5ig
+ed2l
+ed5ob
+ed6obe
+ed6obr
+e4dobs
+e4d3o"c
+ed5v"c
+ed5zb
+e1e
+e4ep
+e1f
+e4ff
+ef5fe
+ef5ta
+e1g
+e1h
+e1i
+ei6pzi
+ei2z
+eiz5e
+e1j
+e1k
+ek6mal
+ek6tre
+e1l
+e1m
+e1n
+e1o1
+eob4j
+eob4r
+eo4dl
+eo4z5n
+e1p
+ep5nik
+e1ra
+era6z5l
+era5z4r
+era5z4v
+e1re
+e4rf
+e1ri
+e1ro
+e4rr
+e1ru
+e1s
+es5da
+e5sta
+e5sti.
+e5stih
+e5stil
+e1"s
+e4"sp
+e"s5po
+e1t
+4eth
+e4tin"s
+e1u1
+e1v
+eve6t5l
+ev5ha
+ev6pre
+ev6ste
+ev5stv
+2ew
+ew6ind
+ew5le
+e4wt
+ew5to
+e4yw
+e1z
+ez5dj
+e3z4dr
+ez2g
+ez5gl
+e5zij
+ez6ijo
+ez5imn
+e5zis
+ez6ist
+ez5iz
+ez4l
+ez6lom
+ez6man
+ez4mo
+e4zob
+e4z5or
+ez4re
+e4zt
+e4z5u4m5
+e4z"z
+e1"z
+1fa
+fe1
+fe6ljt
+ff5ma
+fi6zlj
+2f1n
+fo6uri
+fre4u
+2f1s
+2ft
+ft5ve
+fu1
+2g1d
+ge6ige
+gel5"c4
+ge6nj"c
+gi6tpr
+go1
+go5vz
+2g1t
+gu1
+ha4u
+2h1"c
+he4i
+2h1k
+4hl.
+h4lo
+2h1n
+h5ren
+2h1"s
+2h1t
+1hu
+hu6ffm
+i1a
+i1b
+i1c
+i4cs
+i1"ca
+i1"ce
+i1"ci
+i"c5ra
+i1"cu
+i"c5vr
+i1d
+4idor
+i1e1
+i1f
+i1g
+4igh
+i1h
+i1i
+ii2n1
+i1j
+i1k
+i4k"c
+ik5"ca
+i1l
+il5"c4k
+4ile
+4ilo
+i1m
+i4mh
+im5hi
+i1n
+1ind
+2ine
+3i4n3os
+1inp
+3inse
+1in"s
+4in"sk
+3intr
+i1o1
+i1p
+i1r
+4ire
+i1s
+is4a
+is6ert
+isis4
+i4skv
+2iss
+i1"s
+i1t
+it5pr
+i1u
+i1v
+iv5jo
+i1x
+i1z
+iz1l
+iz4la
+izli4z
+iz5me
+iz5mo
+iz6ode
+iz5po
+i2zr
+iz1u
+iz6ure
+i1"z
+j5akt
+2j1b
+2j1c
+2j1"c
+2j1d
+je4ks4
+2j1g
+2jh
+j1hi
+4jime
+4j5int
+2j1k
+2j1l
+2j1m
+2j1n
+4job
+2j1od
+jod4l
+2jos
+4jo"z
+2j1p
+2j1r
+jra1
+jraz4
+2j1s
+jsis6t
+2j1"s
+2j1t
+ju1
+2ju"c
+ju5dm
+2jus
+ju2"z1
+2j1v
+2j1z
+jz6ves
+2k1c
+2k1d
+ke5ti
+ki1
+2k1m
+1kn
+ko1
+kok4
+ko5kd
+ko6v"se
+koz6lo
+1kre
+2ks.
+k5sat
+ks1c
+ks1p
+ks4po
+ks1t
+4kst.
+ks6taz
+ks5te
+2k1t
+3ktr
+4ktra
+ku5ro
+k5vip
+la4ir
+la6vz.
+2l1b
+2l1c
+2l1"c
+2l1d
+le1
+le4e
+le6ipz
+le5me
+2l1f
+2l1g
+lg5"ca
+2l1h
+l2i1
+li6d"z.
+1liz
+4l5izd
+2lj.
+4ljc
+2lj"c
+2ljk
+2ljn
+2ljs
+2lj"s
+lju5d6j
+2l1k
+2l1l
+2l1m
+2l1n
+lo1
+1lo"c
+2l1p
+2l1s
+2l1"s
+2l1t
+lu5ki
+lu5ku
+2l1v
+2l1z
+2l1"z
+2m1b
+2m1c
+2m1"c
+2m1d
+me4d5n
+me6dos
+me4dr
+2m1f
+4mind
+4minp
+4min"s
+mi6th.
+2m1k
+2m1m
+m5niv
+mo6"st.
+mo6v"s.
+2m1p
+2m1s
+2m1"s
+2m1t
+m5urn
+2m1v
+my5hi
+2m1"z
+na1
+5na"cel
+na4d5nj
+nad5r
+na6dra
+na4dre
+na6dur
+1naj
+na6jak
+na4j5en
+naj3o
+na6jo"c
+na4j3u
+1nas
+na4v3z
+navze6
+1naz
+naz6or
+2n1b
+2n1c
+2n"c
+n1"ca
+n1"ce
+n1"ci
+n1"cu
+2n3d2
+nd5ga
+nd5hi
+n4dm
+ne1
+ne3d2
+1neh
+ne3zm
+nez4v
+2n1f
+2n1g
+n4gh
+ng5ha
+n4gv
+ng5vi
+2n1h
+2nj.
+2njc
+nje4v5s
+2njk
+2njs
+2nj"s
+4njv
+2n1k
+2n1l
+2n1n
+no5rd
+n4ost
+2n1p
+2n1s
+nsis4
+2n1"s
+2n1t
+nteks4
+n4tg
+nt5ga
+nt5ge
+n4tv
+nt5vi
+nu1
+2n1v
+ny5qu
+2n1z
+nz4i
+2n1"z
+o1a
+o4as
+o1b
+ob5gl
+ob5ide
+ob5jo
+5obla
+5obro
+o4bz
+o1c
+oc5ke
+oc5ki
+o4cr
+o1"c
+o1d
+od5dv
+od5nal
+o6drep
+od5zd
+o2d1"z
+o1e
+oele4
+o1f
+o1g
+4ogl
+o1h
+o1i
+oiz2
+o1j
+o1k
+o4kb
+ok5ba
+ok5be
+o4kt
+o1l
+o6l5avt
+ol6g"ca
+o4lr
+ol5re
+o1m
+o1n
+o1o
+ood4l
+o2ol
+o4om
+o1p
+o4pm
+op5me
+4opy
+o1ra
+or4de"c
+o1re
+o1ri
+o1ro
+o1ru
+o1s
+5oseb
+ose4m5
+o1"s
+o1t
+o1u
+ou5ki
+ou5ku
+o1v
+ov5sem
+ov5"sk
+o2v1z
+o5vza
+ov3zd
+o1y
+o1z
+oz4b
+ozd5j
+oz4g
+oz5lo
+oz6lo"z
+oz2n
+oz5nic
+oz5ni"s
+oz2o
+oz2r
+oz2v
+o1"z
+o"z5mi
+2p1c
+2p3"c2
+p"c5ka
+pe1
+1pe"c
+pe4kt
+pet3l
+pe4tle
+pe4v5s
+pev5t4
+4phs
+ph5so
+pi5zo
+2p1k
+4ploz
+po1
+po6dfa
+po4d3l
+po4dna
+po4d5o"c
+po6lob
+po6std
+prez4
+2p1s
+2p1"s
+2p1t
+pz6ig.
+qu2
+3ra"cu
+2rae
+ra6j"zn
+rav5z
+ra6vza
+ra4z5id
+3razl
+ra4z5or
+2r1b
+2r1c
+2r1"c
+2r1d
+re1
+3real
+re6cht
+re5"cv
+5red"c
+re6dig
+re6dnju
+re6iba
+re5jo
+re5km
+re6sda
+rev6sk
+re6zna"c
+re6zus
+re6zve
+r1f
+2r1g
+2r1h
+ri1
+r4in
+ri5n4o
+riz4g
+riz4l
+riz4n
+2r1j
+2r1k
+2r1l
+2r1m
+2r1n
+ro1
+rob6id
+3rodi
+ro5zo
+2r1p
+r1r
+2r1s
+2r1"s
+2r1t
+r4th
+rt5ha
+ru5kl
+2r1v
+r3v2j
+rv5jo
+ry5an
+2r1z
+rz2l
+r1"z
+r"z5da
+2s1b
+1sc
+4sc.
+s2ci
+se4k5sa
+sek5si
+se5ma
+se5vp
+2s1f
+si1
+s4id
+si6gn.
+sis1
+2s1j
+2sk.
+s2kn
+4skre
+s4lav
+s4on
+soni5
+soni"c4
+1sp
+s4plod
+spod4l
+2s1s
+2st.
+3ste
+s4ten
+4stf
+s4ti"c
+5stim
+s4tir
+2stk
+2stm
+1str
+s4tra.
+su1
+su4bo
+sve5t
+"s2"c
+2"s"c.
+2"s"ck
+2"s"cn
+"se2s
+2"s1j
+ta5wi
+taz4
+2t1b
+2t1c
+tch5o
+2t1d
+tek6st
+5tema
+te5xa
+t1f
+4tind
+4tinos
+4tinp
+4tinse
+4t3int
+2t1k
+6tletno
+2t1m
+4tnaj
+to6v"z.
+trt5u
+tr6tur
+2t1s
+2t1t
+tu1
+4tz.
+2u1a
+u1b
+ub4j
+u4bp
+ub5po
+u1c
+u1"c
+u1d
+ud6mi.
+u1e
+u1f
+u1g
+u1h
+u1i
+u1j
+u1ka
+u1ke
+u1ko
+u1l
+u1m
+u1n
+u1p
+up6"cka
+u1ra
+u1re
+4urg
+u1ri
+u1s
+1usp
+u1"s
+u"se3s
+u1t
+u4th
+uth5o
+u1v
+ux5em
+u1z
+u1"z
+2v1b
+2v1c
+2v"c
+v1"ca
+v1"ce
+v4"cer
+v1"ci
+2v1d
+ve4"cl
+ve4"cm
+ve4i
+ve4tin
+vetle6t
+v1f
+v1g
+vi5dv
+vid6va
+1viv
+vi6"zg.
+2v1j
+4vjo
+2v1k
+2v1m
+2v1n
+vo5rd
+voz5le
+2v1p
+3v2pa
+v4pij
+v4pil
+v5skn
+v5"sek
+4v"sk
+2v1t
+vt4k
+vz2
+v2za
+3v2zg
+2v3zk
+2vzo
+v3zp
+v2zu
+1wa
+wo2
+x1f
+1ye
+2y1f
+y1j
+y1l
+y1w
+1z2a
+z6ane.
+za5uk
+za3vp
+za1z2
+za5zd
+2z1b
+3zbir
+z1c
+2z1"c
+2z1d2
+zd5ju
+z3dv
+z1g
+z4gni
+z5got
+2z1h
+1zi
+z1ig
+2z1is
+4z5i"s"c
+2z1j
+2z1k
+z3ku
+z5las
+z1li
+3zlil
+5zlit
+5zliv
+zliz5
+1zlj
+3zlog
+z5lom
+3zlo"z
+z1lu
+2z1m
+1zn
+1zo
+z1ob
+2z1od
+z1og
+z2ol
+z4om
+2z1p
+1z1r
+4zred"c
+4zre"s
+4zrez
+4zre"z
+4zri
+4zru
+2z1s
+z1"s
+z1t
+1zu
+z4uj
+2z1up
+2z1uz
+z1v2
+z4ven
+z3vn
+3z4voj
+z4vok
+2z1z2
+z1"z
+2"z1b
+2"z1c
+2"z1"c
+2"z1j
+2"z1k
+4"zmi
+."c8
+."s8
+."z8
+8"z.
+8"s.
+8"c.
+
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_sv.dic b/lib/kotext/kohyphen/hyphdicts/hyph_sv.dic
new file mode 100755
index 00000000..6ec0f944
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_sv.dic
@@ -0,0 +1,4697 @@
+charset ISO8859-1
+.a4b
+.ab5i
+.ab5ol
+.ab3r
+.ac3
+.a4d
+.a3dr
+.ad3s
+.a5g4ra
+.a5gre
+.a5kl
+.a5le
+.al4pr
+.a3lu
+.am4br
+.amp3l
+.a5mu
+.and4rar
+.a2n5es
+.ang4er
+.an5go
+.an5s
+.ap1p
+.as2k
+.a3sket
+.as4t
+.a5sten
+.a3sti
+.a5ta
+.at3t
+.au3st
+.a4val
+.av3s4
+.b4
+.bak5s
+.ben5s
+.bild3s
+.bo2k
+.bort1
+.cis4
+.cy5klop
+.d4
+.d^^e4r3
+.ek1v
+.e3l4a
+.e2l5in
+.en5st
+.e4n^^e4
+.e2r3i
+.e2s
+.e5skad
+.es3kal
+.es5kap
+.es4t
+.e5strad
+.e3tr
+.evan5
+.ex3
+.f4
+.feb3r
+.fram3
+.fres5
+.f^^e5gel3
+.f^^f6r1a
+.f^^f6r1en
+.g2
+.gu4l^^e4
+.gus3
+.he2m
+.hu5sa
+.ib4
+.ik4
+.im3p
+.i2n1
+.i4na
+.in3d
+.in4ger
+.ink2
+.in3s2
+.in3t
+.is5ka
+.i3so
+.k4
+.kans4k
+.ko5li
+.kort5s
+.kring3
+.krings2
+.k^^f6p5s
+.l2
+.lak5r
+.lek5tr
+.lu2st
+.m2
+.mas2ke
+.ma5skeri
+.me4re
+.minis4
+.mj^^f6lk5s
+.mon2s
+.m^^e5n3s
+.m^^e54st
+.m^^e4n5sko
+.m^^f6rk5r
+.n4
+.ner1
+.no4n
+.n^^f6d5r
+.oc1ku
+.ok3t
+.o3kv
+.o2ma
+.o2mo
+.om3s4
+.o3mu
+.on4k
+.o3o
+.ord3s
+.o5sc
+.o1s4k
+.o3sl
+.o3stra
+.o3sv
+.o3tr
+.o1u
+.p4
+.papp5s
+.pa3ste
+.pa5sti
+.pi5sti
+.pres2s
+.pub3lika
+.r2
+.re4gr
+.re2ste
+.runs4
+.rym2d
+.r^^f6ve5
+.s4
+.sa2k
+.seg3r
+.si5o
+.sj^^f61
+.sk4
+.skott3s
+.slut3s
+.st4
+.sta2m
+.sten3s
+.string4
+.sup3p
+.t4
+.ta3bl
+.ta4k
+.tak5l
+.tes3ta
+.tig3r
+.til4l
+.ti3o
+.topp5s
+.tred2s
+.tre3s
+.tr^^e45k
+.u3k
+.ult5r
+.ung2e
+.up2
+.u4ra
+.ur3s
+.u2t1
+.u4ta
+.u5trer
+.ut5s
+.v2
+.var4t
+.vatten3
+.ved5s
+.v^^e42g
+.v^^e4g3s
+.x2
+.y2a
+.y4e
+.^^e5ng3
+.^^e5r4s5
+.^^e53st
+.^^e5ter1
+.^^e43ro
+.^^f63ro
+a2b
+ab4bu
+a5be
+abel4s
+abe2s
+ab1l
+ab3la
+ab3ort
+ab5ric
+ab3rio
+ab4sc
+ab4sk
+a5bu
+ac4kes
+ac4kis
+ack3sk
+ack3u4p
+a5dag
+a5dek
+a5del
+ad5ep
+ad3j
+ad3op
+a5dran
+a3dre
+1adres
+ad3ril
+ad3ru
+ad2s
+a5ed
+af4fo
+3aff^^e4
+1af3ri
+af4tor
+a1ga
+aga4ra
+a1ge
+a2ge.
+ag1gr
+ag1l
+ag5ord
+ag3ro
+a4gur
+a4hj
+aib4
+a3iv
+a1j
+a3ka
+a4kart
+a5ke
+a1ki
+ak3n
+a1ko
+ak5ram
+akri5s
+ak3rob
+ak4sta
+1aktig
+ak3tri
+a1ku
+a5kvari
+ak3ve
+a5k^^e5r
+ak5^^e5t
+4ak^^f6
+a1la
+al5adm
+ali2br
+a2lin
+a5lin.
+a3line
+al3ins
+ali5stik
+a4lj
+alk3ak
+al2kv
+al4k^^e4
+all3st
+al3l^^e5
+alms4k
+a1lo
+al5ort
+als5pa
+al3tr
+al4tu
+al4t^^e4
+a1lu
+alu5s
+alv3s
+a1ly
+a4maf
+am4i
+am4pr
+am1s
+am3^^e5t
+a3m^^f6
+ana4bo
+an3alf
+an3ark
+an3c
+anci5
+an5dak
+andel2s
+an4dun
+an4d^^e4n
+a4nef
+ang4es
+an3gi
+an1gr
+aniu4
+ank3r
+ano2i
+a4nok
+a4nop
+an5sce
+ansis3t
+an4sj
+ans5ku
+ans3li
+ans3par
+an1st
+an4sto
+an4sty
+1ansvar
+an4tj
+an4tre
+a1nu
+a5ny
+a3n^^f6
+a1o
+a1pe
+a2pe.
+ape4n3
+a1pi
+ap4lan
+apo3str
+1appara
+apps4k
+ap3ric
+ap3rif
+a5pris
+ap2s
+ap3se
+aps5l
+aps3p
+apu5s
+a5py
+a5p^^e4
+2ara
+a4rann
+a4rarv
+1arb
+4arbi
+2arbo
+4arbr
+ar3dr
+ard5st
+a4rend
+arg5si
+2arh
+a1ri
+a4rigen
+ar3ka
+ark3lan
+ar5kr
+4arl
+4arn.
+ar4nal
+a1ro
+a2rob
+4arp
+ar2sa
+ar5skal
+arsk5l
+ar2sv
+ar4tro
+arts5p
+ar4tur
+4aru
+a4rur
+a5rus
+ar4v^^e4g
+a3ry
+a3r^^e4
+2asa
+asbe4
+a1sc
+as2h
+asis5t
+as3kis
+a2sko
+a4skr
+as3ku
+as5l
+as3pa
+as3pig
+as2sk
+as2s5op
+as2sp
+as2st
+ass5up
+as3ta
+a5stard
+as5ter
+as5tiker
+asti5o
+as3to
+as4tr
+ast5rak
+a5stral
+ast3rol
+as5t^^f6r
+a3su
+a4sul
+a4sund
+as2ut
+as3v
+a1sy
+a2s5^^e5
+a2s^^f6
+a1t
+ata5ra
+a5te
+ati5^^f6
+a4tj
+a2tr
+a3tral
+4atrar
+a4t3re
+at3ria
+a3tric
+at3rie
+a5trik
+a3tris
+a3t4ro
+a4tro.
+at4ska
+1attac
+at2tak
+at4tj
+at4tos
+att3s
+a4tung
+2au
+au5b
+au2t5a
+3autom
+aut5s
+2a1va
+a4vart
+1avg
+2a1vi
+av3r
+4a3v^^e4
+a5^^e5
+1b2
+3ba
+ba4di
+ba4do
+bad3s4
+bak5l
+ba4ko
+ba4ku
+bank5l
+bas4ta
+ba5stu
+4bb
+b4bak
+b4batt
+bbb4
+bb3l
+bb4ler
+b4b3r
+bb4so
+4b3d
+3be
+be3d4r
+be5e
+be1k
+4beld
+be5lu
+be3ly
+be3l^^e5
+be5l^^f6
+beng4
+be3n^^e5
+be1r^^f6
+be1s
+be3sl
+bes5s
+be4sta
+be4ste
+be5su
+be3tr
+be3tv
+be3u
+4bex
+2b3f
+2b5h
+3bi
+bi3d4
+4binv
+bis3ko
+bi5skv
+b3je
+b3k
+b5lar
+b5lat
+ble4mo
+b5len
+5blera
+3bles
+5blid
+3blikr
+3bliks
+4b3m
+2b3n
+3bo
+bo4gr
+bo2kl
+bo1mu
+5bon
+bors5te
+bor4ti
+bort3r
+borts2
+bort3sl
+bo1s
+bo4sc
+boy5
+4b3p
+2b5raf
+4brar
+2b5rati
+3brik.
+b3rika
+3brike
+3briks
+b5rik^^f6
+bru4st
+3bry
+3br^^f6
+4b3s
+b5sce
+bs3ch
+b4slan
+b4sof
+b4sp
+bst4
+b4stj
+4b3t
+3bu
+bund4s
+bus2st
+b3v
+3by
+by5r
+3b^^e5
+b^^e5ng3
+b^^e5t2s
+3b^^e4
+3b^^f6
+b^^f6r2s
+c2
+5cap
+c3c
+1c4e
+cens3t
+3centr
+ceu4s
+4ch.
+3chau
+3chef
+5choc
+4cht
+ch^^e4s3
+ch^^f6r4
+1ci
+ci4lu
+cim2
+cipp4
+4ck
+c3ka
+c3ke
+c3ki
+ck5j
+ck1l
+ck5lis
+ck3n
+c3ko
+c4kordn
+ck3org
+c4kort
+ck3r
+ck4re
+ck3sla
+ckus2
+ck3va
+ck3ve
+ck3v^^e4
+ck5^^e4
+ck3^^f6
+cle2a
+co2a
+co4m
+4cr
+cros2
+4cs
+1cy
+1d
+3da
+5da.
+4dadr
+dags3
+2dak
+5dako
+da3li
+5dam
+da3m^^e5
+4dand.
+4d1ap
+4darb
+4dart
+da4tr
+dat5t
+4dax
+2db
+4dc
+dcen3
+2dd
+ddd4
+ddi4s
+d3dj
+d4dos
+dd3ra
+dd3re
+dd3ri
+d3dr^^e4
+dd2s
+dds3v
+3d2e
+de1k4
+4deko
+4deld
+del2sa
+dels5ti
+de5lut
+d4en
+denti5^^f6
+den2to
+de3pr
+5der
+der1k
+de2ro
+de5rol
+der5sti
+de4ru
+de2s
+de3se
+de3sp
+des3ti
+d4et
+de3tr
+4dex
+2d1f
+df^^f63ra
+2d1g
+d3gl
+2d5h
+3di
+dias4
+di5el
+di2gr
+di3ka
+di5ku
+4dinf
+din3g4o
+4dinr
+4dins
+2dinsp
+4dint
+di1o
+di4od
+di3sc
+di4sj
+dis3ko
+dis1kr
+dis1p
+dis5to
+dis3tra
+di4tre
+2dj
+d3jor
+djup5p
+3djur
+2d3k2
+4d5l
+2d1m
+2d1n
+3do
+d2ol
+do5lo
+4domr
+dom2sk
+5don
+do4pak
+4d5ord
+4dori
+4dort
+d5ost
+do3y
+2d1p
+2d2r2
+d3rad
+3d4rag
+d3rand
+d5rarb
+d5rassera
+d5ratu
+3drej
+d3ren
+5dres
+d3ret
+d4ric
+3drif
+d3rig
+4d5rik
+d3rin
+3d4riv
+d5roc
+3dropp
+d3ror
+4drot
+drotts3
+d3r^^e4kn
+3dr^^e4kt
+5dr^^e4n
+d3r^^e4t
+d5r^^f6d
+4ds
+d2s1an
+d2se
+ds5enh
+d4sf
+d2si
+ds3ins
+d2sj
+dsk2
+d3skef
+ds4ken
+d3ski
+ds3kl
+ds5kn
+ds1l
+ds4lot
+ds4mo
+d4sm^^e5
+ds5n^^e5
+d2so
+ds3pl
+ds3s4
+ds3tal
+d5stat
+ds4te
+dste4a
+d5stig
+ds3tin
+ds5tro
+d2su
+ds1v
+d2s^^f6
+2d3t
+3du
+dub3ble
+4dup
+du1s
+du2sc
+du4ste
+du5s^^f6
+4dut
+du4vu
+2d1v
+d3vr
+2d3w
+3dy
+dy4kan
+dy4ro
+4dz
+5d^^e5g
+2d^^e5s
+4d^^e5t
+4d^^e4g
+d^^e42r
+3d^^f6
+d^^f6ds1
+4d^^f6g
+4d^^f6p
+d5^^f6st
+d^^e94
+e1a
+e2ake
+e4am
+4eb
+e2br
+eb3ril
+4ec
+e3ch
+echiff5
+ecis4
+e3co
+e2d
+e4dans
+edd4r
+edi4u
+ed3j
+e5dral
+ed1sk
+ed2sko
+ed3s2l
+edso4
+e3d^^e5
+e1e
+e2ed
+e4ei
+ee2k5
+e4en.
+e4ene
+e1f
+ef4s
+3efte
+e1g
+e3ga
+e3ge
+ege2l
+eg1l
+eg2ler
+e3glera
+e5gleri
+e4gran
+eg5rat
+eg3rin
+e5gru
+egs3
+e5g^^e5
+eig2
+ei5gn
+e3ik
+e1in
+ei5sh
+e1isk
+e1jo
+e3ju
+e3j^^e4
+e5j^^f6
+e3ka
+e1ki
+e1kl
+ek3lat
+ek4le
+ek3n
+e1ko
+ekord5s
+ek3orr
+ek4ret.
+ek5ro
+e1ku
+e1kve
+ek5vis
+e1ky
+e1k^^e4
+e1la
+el1akt
+el4arb
+3eld.
+eleb3r
+elekt3ri
+el4fra
+eli5ku
+el3k4
+el3li
+ell3s
+el3l^^e4
+e1lo
+e4lob
+el3p
+el2si
+el5ug
+e5luv
+2e1l^^e4
+e1m
+e5mat
+e5mis
+emon1s
+em5ort
+emp5le
+en5art
+e2nav
+en4ce
+e4ned
+e4nek
+ene3r^^f6
+2enj
+en5klo
+en3kn
+en5kr
+en5k^^e4
+enning5
+ennings2
+eno2m
+en3si
+ens5ke
+ens2m
+en2sp
+ens4te
+ens4vin
+en4s^^e5
+ent4ha
+en2t1r
+ent4rat.
+ent3rati
+ent3ri
+ent5ru
+e5nus
+2eny
+2e1n^^e4
+e1o
+e2og
+eo4i
+e5or
+2ep
+e1pe
+e1pi
+e3pla
+ep5le
+epp2s3
+epps5t
+e1pr
+ep3s
+ep4tr
+epu3b
+e3p^^e5
+er1ak
+4eras
+er3d4
+erg4l
+er4gu
+er4g^^e5s
+e1ri
+e5rib
+e4rinf
+erings3
+eri5stik
+erk4lin
+erl^^e44
+er5na
+e1ro
+e3rob
+e2rom
+erp4
+er3ra
+er5sc
+ers4ken
+er3sl
+ers4le
+er4sta
+er2ste
+er3str
+er3sv
+e1ru
+e5rum
+e3ry
+e5r^^e5d
+e1r^^e4
+e2sal
+es5all
+es3arm
+e1sc
+2ese
+es4hi
+esi4u
+es2k
+e4skan
+es5kar
+e4s3ken
+es3ker
+es5kul
+e1sl
+e5slag
+es2mi
+e1sp
+es3pl
+es2sk
+ess5l^^e4
+es2st
+e3stal
+es5ten.
+esti2ge
+es3tin
+es5tor.
+es4tr
+est5rer
+e3stru
+est4r^^f6
+e3st^^e5
+es2u
+e1sy
+eta3b
+e5ti
+eti3^^f6
+e1to
+e5tri.
+et3ris
+e5tr^^e4
+et2s
+ets2ad
+ets3kr
+ets1l
+ets3m
+ets5pa
+et4sv
+ett3r
+e1tu
+etu4ri
+et4va
+et5vu
+e1ty
+2etz
+e1t^^e4
+et^^e4c4
+euk4
+e5um.
+e5up4
+4eur
+eu4se.
+eu5tro
+e1v
+e4varm
+e4vj
+ev3r
+3exp
+ext4r
+4e^^e4
+f2
+3fa
+fac4
+fac5ke
+4fans
+4farb
+fa3sh
+fa4st
+fa4t^^f6
+4fav
+4f3b
+f3d
+3fe
+4fef
+fe2l
+fes5ta
+fe3sto
+4fex
+2f1f
+fff4
+ff3l
+ff3n
+f3fo
+ff3r
+ffs4
+f3f^^e4
+ff^^f65re
+f3g2
+f5h
+3fi
+fi2br
+fib5rig
+fi3li
+fin5sm
+fi3skal
+fisk3r
+fi2ti
+2f3k
+1fl
+flo4da
+4f3m
+fma4
+1fo
+4fof
+fol2
+folk1
+2f5om
+fo2na
+for4mo
+fost3r
+4f3p
+fra2m
+fram5p
+f4rer
+5freri
+fre4s
+f4ri.
+fri5sp
+5frit
+fros5ta
+fru5str
+fr^^e5n5
+2f3s
+fs2k
+f4sl
+f4sm
+f4sn
+f4sp
+f4st
+f4sv
+2ft
+f3ta
+f4taf
+f4tak
+f4tap
+f4tarm
+fte4r
+f4tex
+f3ti
+f4tin
+f3to
+f4t3r
+ft2sa
+ft4set
+ft2s5i
+ft4sj
+fts4t
+fts5v^^e4
+ft5t
+ft1v
+3fu
+furs5te
+fu5ru
+fu3tu
+4fv
+5fy
+fy4ma
+f^^e53t^^f6
+1f^^e4
+f^^e4s5ti
+3f^^f6
+f^^f62ra
+f^^f62ren
+f^^f62ri
+f^^f6r3k
+f^^f6r3sm
+f^^f6r3su
+f^^f6rt4
+f^^f6r1^^f6
+ga5br
+3g2ag
+4gakt
+3g2al
+gall3s
+ga5l^^e4
+ga4no
+2garb
+4garm
+ga2ro
+4gart
+ga4st
+ga4su
+5g2ati
+gaus4
+g4av
+g5avsn
+4gax
+2gb
+2gd
+g3d4r
+ge2a
+ge5b4
+2gef
+2ge4j
+g2eli
+3gelis
+gel5st
+gel5y
+3gel^^e4
+gel5^^e4n
+g4em
+ge4nap
+gen5g
+3g2eni
+3genj
+4genm
+genom5
+gen4sa
+g4ense
+1g2ent
+4genv
+ge5ny
+3gen^^e4
+ge2o
+1g2era
+4gerarb
+3g2eri
+gers5n
+5gese
+ge4to
+get5s
+5g2ett
+2g1f
+2gg
+g1ga
+g4gap
+g1ge
+gg5g
+gg1l
+g4gos
+ggs4la
+ggs4m
+gg3s4t
+gg3s4v
+g4gu
+2gh
+gh4te
+1g2i
+gi1o
+gi5sn
+gi4ste
+gis4tr
+gi5stral
+gi5st4rat
+3giv
+gi2^^f6
+g2jo
+3gjor
+g3j^^e4
+2g3k2
+2gl
+g4lans
+g1lar
+g2las
+5glase
+glas5k
+5glas^^f6
+g4lid
+4glj
+g4l^^f6g
+5gl^^f6m
+2g1m
+2g1n
+g4nag
+g2no
+1g2o
+3go.
+3gol
+gon3s4
+4gont
+2gord
+4gorm
+4gort
+go3sl
+2g1p
+g2r4
+3graf
+5gral
+gra2m5
+5grans
+4gras
+5grec
+5grett
+g3rig
+4g5rik
+5grip
+3gris
+g5roi
+gro2v
+4grum
+grus5t
+g4r^^e5
+5gr^^e5.
+gr^^e44n
+5gr^^e4ns
+2g2s
+gs1an
+g5satt
+g3sel
+g4sf
+gsi4d
+g3sju
+g5skaf
+gs4ki
+gs3kn
+gs4kot
+g3sky
+gs1l
+gs1m
+g4sme
+gs3n
+gs4ni
+gs4n^^f6
+gs1or
+gs3pl
+gs3po
+gs4por
+gs5pre
+gs3pu
+gs3s
+gs3tak
+gs3tal
+g3stark
+gs4ten
+g3stif
+gs3till
+gs3tj
+g3stol
+gs3tra
+gst4re
+g3st^^e4m
+g4sug
+gs1v
+g4s3ve
+gs3vi
+gs3v^^e5
+gs3yt
+gs1^^e4
+2g1t
+g3tr
+1g2u
+4gug
+guld3
+gul4da
+4gul^^e4
+gu2ma
+4gup
+gu5ru
+gus4k
+2gut
+g3utb
+2g1v
+4gw
+3gy
+gytt3j
+1g2^^e5
+g^^e5rds5
+2g5^^e5ri
+g4^^e4l
+g2^^e4r
+g^^e44s
+1g2^^f6
+4g^^f6g
+g^^f65ro
+2g5^^f6rt
+1h
+ha3bl
+ha5ge
+ha4li
+hal4so
+halv3^^e5
+ham4st
+handels3
+hands4l
+han5g2a
+ha5ra
+ha4sc
+ha4sp
+hasp5l
+has3t
+hav2
+havs3
+h5c
+4hd
+he4at
+he4fr
+he4l^^e4
+hets1
+hets3t
+hets3v
+h3g
+h2i
+4hir
+his2sk
+hi4t
+hj^^e4l3s
+h1k
+2hl
+h4le
+2hm
+4hn
+h2na
+h2nit
+ho5nu
+hop5plo
+hop3s
+hos3p
+hos5ti
+4how
+h3p
+h5ru
+h1s
+2ht
+hu2s
+hust5r
+hyg5r
+hys4t
+hys5ta
+hy3ster
+h^^e5rd5s4
+h^^e4ll2
+h^^e4lls1
+h^^e4lso3
+h^^e44ri
+h^^e44s
+h^^e44var
+h2^^f6
+h^^f62g
+h^^f65gen
+h^^f6g5r
+h^^f6rn5s
+h^^f64s
+h^^f6st5r
+i1a
+ia3fr
+ia3g
+ia4lu
+ia4sk
+ia3tr
+i2b3l
+i5bril
+i3ca
+i4ce.
+i5cha
+ic4kord
+ick3u4
+i5co
+i2d
+iden3s
+id4ge
+i4dom
+id1r
+id3ro
+id2s
+ids3v
+i4dun
+i3d^^e5
+i4d^^f6
+2i1e
+ifes4
+i5fn
+i1fr
+3ifr^^e5n
+i1g
+4igan
+i2geb
+ig5ej
+ig1l
+ig3no
+i3i
+i4kart
+i1ki
+i3klo
+ik5l^^e4n
+ik3n
+i1ko
+ik3re
+i5krob
+ik5rof
+ik5ros
+ik5s2h
+ik5skor
+i3kul
+i3kum
+ik5u4t
+ik1v
+i3ky
+i3k^^e5
+i3k^^f6
+i1la
+il4dan
+i2lin
+il1j^^f6
+il5k
+il5lak
+il4lik
+ill3s2
+3illu
+il5l^^e4r
+il2min
+i1lo
+il2tj
+i3lu
+ilufts5
+i4lup
+i5l^^e4
+im2b3r
+im5sm
+im4so
+i1mu
+i5m^^e5
+i3m^^e4
+i5m^^f6
+i4nau
+ind5sk^^e4
+ind5sti
+1indu
+in4ga
+in4ge.
+ing4es.
+ing5is
+in5glas
+ings5te
+i3ni
+i4nif
+in5j
+in5kve
+1inneh
+5inre
+1inri
+3inr^^e4
+in4sem
+in3skr^^e4
+in3sl
+ins4m
+in3sn
+1inspe
+5inspeln
+in5spr
+3instink
+3instru
+in4st^^e5
+in5te
+1intr
+in4tra
+int3s
+i1nu
+i4nun
+in3ym
+i1n^^e4
+i5oc
+i1og
+i3ok
+io4kr
+i1ol
+io5li
+i5om
+ion2
+i3ono
+ions3
+i1op
+i1or
+i1os
+i1ot
+i1pe
+i1pi
+ipos4
+ip5pi
+i3ra
+i4res
+i1ri
+irk5l
+i1ro
+iro3p
+i1ru
+i5sce
+isel4
+is2h
+i2sk
+is5kep
+isk5na
+is3kopa
+is3ku
+is4kun
+is3ky
+i5slam
+is3l^^e4n
+is3m
+is3n
+i2s3p
+is4pri
+is3sa
+is3se
+iss5n
+is4s3tr
+iss3t^^e4
+i1stal
+i1stans
+ist5att
+is5ten.
+i1stent
+is4tes
+is3tig
+is5ting
+is5tor.
+is5tore
+ist5ro
+ist^^e54
+is5v
+i3sy
+i4s^^e5
+i1t
+it5c
+i4tei
+i4tex
+i4tj
+it5ran
+i5trin
+i3tris
+it2t5op
+it4t3r
+it4tu
+i2t5^^e5
+4i1u
+i1va
+i2vak
+i1vi
+i4vin
+iv3r
+iv2s
+i1v^^e5
+ix2t
+ix5tu
+i1^^f6
+1ja
+3jakt.
+4jarb
+jas5p
+2jb
+2jd
+jd3r
+jd4sty
+j4du
+1je
+je2a
+5jef
+je5sta
+2j1f
+4j3g
+4jh
+1ji
+4jin
+4jk
+j4kl
+j3ko
+jk3v
+2j1l
+2jm
+2j1n
+j2o
+3job
+jo4kr
+4jolj
+jo5l^^f6
+jor4din
+jord3s4
+3jou
+4jp
+j5pl
+2j3r
+2j1s
+j5sa
+j4sk
+js4me
+js4te
+2jt
+jts4
+2j2u
+ju4kos
+juk3s
+jul3k
+4jur
+jus5kr
+juss4
+jus4t
+jus5ta
+jut4sta
+j^^e45lo
+j^^e4l4p5r
+j^^e4l4sa
+j^^e4rn3sk
+j^^e4r5s
+j^^f6r2s
+j^^f6s4t
+5j^^e9
+1k2a
+3ka.
+3kad.
+3kade.
+ka4dr
+2kaf
+5kaf^^e4
+ka3i
+ka5ju
+2kak
+k3akti
+4kalf
+4kalg
+kal4lo
+kall3s
+3kamp
+3kamr
+3kan.
+4kand.
+5kano
+2kap
+3kapi
+ka5pla
+kap4pr
+kaps5t
+5kapten
+3kar.
+ka3ra
+4karb
+k5arbet
+ka5ri
+4kark
+3karna
+4karp
+karp5s
+4kart.
+4karte
+4karv
+3kas
+ka4sk
+kas3ti
+3kat.
+3kats.
+4kau
+2kb
+4kc
+2k3d4
+kdom4
+1k2e
+3ke.
+2ked.
+2keda
+ke3dr
+ked4s
+ke4er
+2kefu
+4keld
+kels4
+4kense
+ke5n^^e5
+2kep
+3kern
+ke2s
+kes3s
+4kex
+2k1f
+kf^^f62
+kf^^f63ri
+2k5g4
+2kh4
+kid3s
+4kif
+1kig
+kik4s
+kilt4
+5kim^^e5
+king3r
+4kinne
+4kins
+2kint
+ki4nu
+ki4tr
+kiv3s
+4kj
+5kjol
+k3j^^e4
+2k3k
+kl2
+1klag
+k2lama
+kla4mi
+3klang.
+3klass
+2klat
+5klav
+2kle
+k2lej
+2klig
+k2lim
+3klip
+k2lis
+5klist3r
+k5lock.
+5klocka
+3klos
+1klub
+4kluk
+1kl^^e4d
+2k3l^^e4g
+2k1m
+2k2n
+k4nal
+3k4nap
+5knip
+3k4niv
+3k4nu
+k4ny
+k5nyk
+k2o
+4koc
+ko5de
+k5odl
+kog3n
+ko4gr
+kog4s3
+4kola
+ko2lin
+4kolj
+kol5tr
+5kolv.
+1kom
+3komm
+5komp
+2k3omr
+kom4s
+1kon
+3konf
+3konst
+3kont
+ko3nu
+1kor
+3korg
+ko3ri
+2korr
+3korres
+5kortera
+ko5s4k
+ko3sl
+3kost
+ko4str
+4k3ou
+2k1p
+k2r4
+3kraf
+5kra3ge
+4krang
+5krera
+k4reten
+krid5s2
+1krig
+krigs3
+krings2k
+4kriv
+3kropp
+kropps5
+kru5stad
+k3ryg
+kr^^e5k5s
+kr^^e54pa
+k5r^^e4dd.
+kr^^e4k5l
+4kr^^e4l
+k3r^^e4t
+2ks
+ksaks5
+k2s5as
+ks3ch
+k4ser
+ks2k4
+ks3kl
+ks5kra
+ks5kv
+k3sk^^e4
+k3sk^^f6
+k5slag.
+ks2li
+k5sly
+k2so
+ks3pl
+k1s4t
+kstavs3
+ks5tid
+k2su
+4k1t
+k4tex
+kti5ge
+k4tinn
+k2tins
+k2tod
+k2tom
+k2tr
+kt3re
+kt3rin
+k5trod
+kt5rog
+kt3rol
+kt5r^^e4t
+kt2st
+kt5t4
+k4tug
+k2tut
+k4t^^e4l
+4kug
+k5ugn
+ku5la
+4kuld
+3kul^^f6
+kum5pl
+kungs5
+5kunn
+ku4pen
+ku4ro
+3kurs
+3kus
+kust3a
+kv4
+3kvali
+k5vare
+3kvarn
+kvar3s
+3kvart
+k4vato
+k2ve
+2kvente
+1kvinn
+5kvire
+k4vo
+k1v^^e5
+3kv^^e4ll
+k1v^^e4r
+kydds3
+ky4lin
+3kyrk
+k^^e4l4m
+5k^^e4mp
+5k^^e4nn
+3k^^e4ns
+3k^^e4rl
+4k^^f6g
+k^^f6ks5t
+5k^^f6p.
+k^^f6r4l
+k^^f6r4sl
+3la.
+1lade.
+2ladm
+4ladr
+2laf
+3lagd.
+la4gin
+5lagm
+lag3r
+2lak
+5lakan.
+5laki
+3laktis
+la5lo
+3lande.
+lan4di
+2lappara
+2larb
+1larn
+lar5s
+4lart
+las3h
+4lask
+la4st
+5laste.
+1lat.
+la5tr
+lat4tis
+2lau
+2lav
+la5vu
+2lb4
+4l1c
+2l2d
+lder4s
+l3dj
+ld3ra
+l5dry
+lds4an
+1le
+3le.
+le4ge.
+le5ig
+le2kl
+le4kv
+lem4s^^f6
+2l5enl
+3ler.
+ler5k
+3lern
+ler3ste
+le5s2l
+le5t^^e5
+le3um
+le4vu
+2lex
+2l1f
+2l1g
+l2gj
+l3g2l
+lgs4
+lg5st
+2lh
+1li
+li5ch
+3lif
+3lig
+li4go
+lig3s
+lik2l
+li5kli
+lik3s
+5limer
+2lind
+2linga.
+ling5o
+4lingr
+lings5t
+2lini
+5linj
+2lint
+li1o
+2lip
+lis3c
+li4sta
+li3str^^f6
+li4vo
+livs1
+l2jak
+4l1jo
+1lju
+l5j^^e5
+l1j^^e4
+l3j^^f6r
+2l1k
+l3ke
+l5kju
+l2kl
+lk5lag
+l5kl^^e4
+l2kr
+l3k4ra
+lk3t
+l1la
+lld4
+ll3dr
+lle5b
+ll3k
+ll1l
+l1lo
+llok5v
+ll3p
+ll4san
+ll2se
+ll3ska
+ll2so
+ll4sva
+ll4tig
+ll3tr
+l1lu
+ll5un
+llust3ra
+ll5v
+l5ly
+ll^^e4ggs5
+l5l^^f6d
+ll^^f6r4
+ll5^^f6rt
+4l1m
+l4mol
+lm3st
+l1n
+lo2af
+loc4ku
+4lodl
+lo4do
+lod3st
+lo2ge.
+2lolj
+2lom
+4lord
+2lorg
+lor4s
+lo4vo
+l4pak
+l1pe
+l1pi
+l5pla
+lp5l^^f6
+lp4st
+4l3r
+2l1s
+l2sc
+l4sjo
+l4sj^^e4
+l2sk
+l4skensv
+l3ski
+lsk3n
+l5skot
+l3skr^^e4
+l3sky
+l3sk^^e5
+lsk^^e54p
+l3sk^^e4
+l3slu
+l4sm
+ls4mo
+ls5nyt
+l2sp
+l3spe
+ls3pl
+ls3pol
+ls5s
+l2st
+l3sta
+l4stak
+ls4te
+ls5ter
+l3sto
+l3sty
+l4styg
+l3st^^e5
+l3st^^e4
+l5st^^f6
+l2su
+l5sur
+l2sv
+l4svi
+ls5vid
+l4s^^e5
+4l1t
+lta2tu
+l4tef
+l4tif
+l4tih
+l4tos
+lt5rati
+l4tret
+l4tr^^f6
+lt5sk
+ltu4
+lu5i
+luk4to
+4lull.
+2lun
+lung3
+2lupp
+lu4pu
+lus2s5p
+5lust.
+4lutb
+4luts
+2lv
+l1va
+l4varm
+lvers4
+l1vi
+l4vos
+lv3ri
+lv3sp
+l1v^^e4
+lv^^e4v4
+lycks5t
+ly4gat
+lyg3r
+lyg3s2
+3lyste
+5lystn
+ly4str
+2l^^e5.
+l^^e5g3s
+1l^^e5ng
+l^^e5ng3s
+l^^e54sk
+l^^e5s5te
+l^^e54st^^e5
+4l^^e4c
+l^^e4g5r
+1l^^e4nds
+5l^^e4ngder
+l^^e44san
+l^^e44sp
+l^^e4tt3s
+4l^^f6l
+4l^^f6m
+3l^^f6n
+3l^^f6rer
+1l^^f6s
+l^^f64v^^e4
+3l^^e9
+1ma
+ma5fr
+mag5n
+mag5s
+ma5ju
+mak3r
+ma3li
+mand4
+mang2a
+man5g4o
+ma5ni
+mani1k
+5ma3ri
+mash5
+mas3ko
+mask3ro
+ma5sk^^f6
+mas3ti
+mas4v
+2mb
+mb4sk
+2mc
+2md
+m4dat
+m4di
+m4do
+m3d4r
+1me
+2meds
+me4du
+me4kl
+me4ko
+4meld
+melo5
+me5lu
+men5k
+me5nu
+me5ny
+mer2sko
+me4so
+mes4t
+me3sti
+2meta
+me5trin
+met3ro
+meu4
+2mex
+2m1f
+m4fes
+m4fn
+2m1g4
+2mh
+1mi
+mid3s
+mi4lu
+2mind
+ming4o
+4mink
+min4kr
+4minv
+mi3n^^f6
+mis2
+mi5sf
+mi4sp
+miss3t
+mi4te.
+mi4tr
+mitt3s
+2m1k
+2m3l
+2m1m2
+mme5d
+mm3s4
+m4mul
+2m1n
+m2nam
+mnas3t
+m4nav
+mn5dr
+mn3g4
+mn5st
+mn5tu
+m2n3^^e5
+1mo
+m4od
+mo4i
+2momr
+mo3na
+mos3k
+mo2ta
+mo4tin
+mo4tu
+mot3v
+2m1p
+m2pak
+m4part
+m2pl
+mp3lad
+m5plane
+mp3lat
+mp3lin
+mpos4
+mp5p4
+mps4k
+mp5sp
+m4p^^e5
+2m1r
+4ms
+m4sal
+m4ske
+m3slag
+ms3l^^e4
+ms2m
+mste2
+m1sto
+m2str
+mst3rin
+ms5^^e4p
+2m1t
+4mud
+mulls3
+mult5r
+5mum
+4mun3g4
+mun4ko
+3mur
+3musi
+mu3sta
+mut4sl
+2m3v
+1myn
+mys4te
+m^^e5g4
+1m^^e5l.
+5m^^e5let.
+5m^^e5n.
+4m^^e5r
+m^^e51s
+4m^^e4g
+m^^e4k3
+1m^^e4n
+m^^e4ns4
+3m^^e4rk
+1m^^e4s
+m^^e4s5ta
+1m^^e4t
+m^^f64bl
+m^^f64gen.
+3m^^f6j
+m^^f6r4kl
+3m^^f6s
+4m^^f6v
+1na
+3na.
+3nad
+nads3
+2naf
+na5gr
+2nak
+3nako
+3nakr
+na3kro
+n1akt
+2nalf
+5nalfl
+4nalg
+nal3s
+na2lu
+n5amb
+5namn
+4nand.
+4nanv
+na4rap
+2narb
+2nark
+4narm
+2nart
+nast3r
+2nb4
+2n1c
+n2ch
+n3cha
+n3che
+n3chi
+ncis4
+ncyk3l
+2nd
+n4dak
+n4dav
+nd3d4
+n5de
+nde3s
+n4dil
+nd5rak
+nd5ras
+nd3rat
+nd3ri
+n5dril
+n3drop
+nd5ros
+nd5skal
+nd3sn
+nds3or
+nds5v^^e4
+nd5^^e5s
+1ne
+3ne.
+ne4di
+5nedl
+ne4d3r
+ned3s
+ne4d^^f6
+ne2gr
+ne5gres
+4nek.
+ne5ly
+4nenl
+ner5sm
+nes3s4
+ne4sta
+ne5s4ti
+ne3tre
+ne1ut
+2nex
+2n1f4
+nfalls5
+nfis3
+2ng1
+n4gar
+n4gen.
+n4gend
+n4gens
+n4genti
+n4germ
+n4get
+n2gi
+ng3ig
+ngi4s
+ng4ly
+n2go
+ng5om
+ng3or
+ng3rad
+n4gr^^f6
+ng4ser
+ngs1k
+ngs3pa
+ngs5tim
+ngs3val
+n4g^^f6d
+2nh
+1n2i
+4nid
+ni5ec
+ni4ki
+ni5li
+3nin
+nings1
+nings3k
+nings5v
+ni1o
+4nip
+nip4pr
+ni5steri
+nist3ra
+ni3t4r
+niv5sk
+niv5st
+2n1j
+n4jar
+n3jun
+nju4s
+n3j^^e4
+2nk
+n4kart
+n1ki
+n4kis.
+n3kny
+n1ko
+nkrafts5
+nk3ri
+n1kro
+nkrus4
+nk5sl
+nk3sp
+nk4tin
+n1ku
+n1k^^f6
+2n1l
+2n1m
+2n1n
+nn3d
+n3ne
+nnis4
+nn3k
+nn3s4t
+1no
+2nodl
+no4kl
+2nolj
+2nomr
+nom3s4
+2nord
+2norg
+no5sa
+no5sc
+no4tu
+2n1p
+2n1r
+4ns
+ns2i
+n4sint
+n4sis.
+n4sise
+ns2k
+ns3kan
+n1ski
+ns3kor
+nslags5
+ns5las
+ns5mit
+n4soc
+n1spi
+ns3pl
+ns3po
+ns3s4
+n3stans
+n3stap
+ns4tel
+n3stif
+ns3tig
+ns4tra
+n2strik
+nst5up
+nst5vil
+n3s4ty
+n1sva
+ns3vi
+ns3v^^e4r
+2n1t
+n4tark
+nter5s4
+n4tinf
+n2t5omb
+nt3rad
+n3trah
+n3trak
+n5trala
+nt3rali
+n5tram
+nt3rep
+n3trer
+nt3ria
+nt3rin
+nt3ris
+n4tropin
+n4tror
+n4tr^^f6
+nts3c
+nt4se
+nts5kor
+nt4str
+n4tut
+n3tv^^e5
+nufts4
+4nug
+n5ugn
+3nui
+3num
+nums5
+2nup
+n3upp
+2nutb
+2n1v
+ny5gr
+n5z
+4n^^e5r
+4n^^e4.
+4n^^e4c
+3n^^e4m
+3n^^e4t
+4n^^f6g4
+3n^^f6j
+n^^f62ja
+n^^f65kr
+4n^^f6l
+n^^f6s4
+n^^f6s5ke
+o1a
+o2ard
+o2b
+5o4bj
+o4bli
+oby4
+oc4k5r
+ock3sk
+oc3ku
+o2d
+ode4k
+odi4a
+1odli
+o5dral
+o3dro
+ods4k
+od2st
+ods4ti
+od5stu
+o3d^^e4
+o1e
+offs5t
+o4fl
+o3fr
+of^^f6rm^^e54
+o1g
+o4gav
+og3gr
+o4gj
+o5glo
+o5gly
+ognos4
+ogno5st
+o4gri
+o4gr^^f6
+og3se
+og4s3t
+o4g^^e4
+o1i
+o4il
+o1j
+o1k
+o4kli
+ok3n
+ok3sl
+ok4su
+o2kv
+o1la
+o5lak
+ol5au
+olf^^f64
+1olj
+ol3ka
+olk3r
+ol4ku
+ol4k^^e4
+oll4si
+oll5sl^^e4
+ol3l^^e4
+olm4s
+oln3s
+o1lo
+olo5kv
+ol4sa
+ol4t^^e5
+o1lu
+o4lug
+o4lur
+o1ly
+ol5^^e5r
+o1l^^e4
+om4br^^e4
+o3men
+o4mord
+om5pa
+om3pl
+1omr
+4omra
+om1sk
+om4ste
+3oms^^e4t
+om4tr
+om3tv
+on3c
+on5gi
+on1gr
+ongs4l
+o4nins
+on3j
+on1k4
+ons3c
+onsi3s
+ons3m
+on5stel
+ons4ter
+on3tras
+on4tre
+ont4s
+o1ny
+on5^^e5
+o1n^^e4
+o3n^^f6
+oo4d
+oom5s
+o3or
+o1pe
+o1pi
+o5pline
+op4pl
+opp3le
+op4pr
+op4pu
+o3pri
+op4st
+o3p^^e5
+o5q
+4ora
+o3rak
+oran3g4
+o2rap
+1ordn
+or4d5^^e4
+o4reh
+1orga
+5organi
+or4gr
+or4g^^e5
+o1ri
+3orient
+4ork
+or4m^^f6
+or4nu
+or4n^^e4
+o1ro
+or4pl
+or5pr
+or4spa
+ors5tig
+or5te
+or2tr
+ort3re
+ort3ro
+o1ru
+o3ry
+o1r^^e4
+o1r^^f6
+o3s2f^^e4
+osk4l
+o1skop
+o3som
+os5pig
+os4sk
+os4s4t
+os3tig
+os5tiker
+o5still
+os4tr
+ost5ron
+ost5r^^f6
+os3tul
+ota2lan
+4oti.
+4otie
+4otin
+o1to
+o5tro
+ot5run
+ot3sv
+ot5ti
+ot4tr^^e4
+ott2s
+o1tu
+o5tun
+otvin4
+o1ty
+o5t^^e5
+o3t^^e4
+oun4
+oup4
+4our
+ou3r^^f6
+ou4s
+o3ut3t
+o1va
+ova4n
+o1vi
+ov3r
+ov4si
+ov3sl
+ovs4me
+o1v^^e4
+o3we
+ox5
+oy2
+o3^^e5
+o3^^e4n
+o3^^f6
+1pa
+4paf
+pag4
+paki3
+pakis4
+pa5la
+pals5
+pa5l^^e4
+4pand.
+pan4tr
+3pap
+2parb
+4parm
+par3s
+2pask
+pa5ski
+pa2st
+3patr
+pa3u
+2pb4
+2pc
+2p3d4
+pek5tri
+pekt3ro
+4peld
+pel3s4i
+4pem
+5peng
+3penn
+pent5r
+per4bl
+3perio
+3pers
+per4sl
+pe5tro
+4pex
+2p1f
+4p3g
+2ph
+pi4el
+1pig
+pi1o
+3pip
+pi5so
+pi5sta
+pi5sto
+p2j
+3pj^^e4s
+4p3k2
+p2l
+p4lac
+5plan.
+p4lane
+p3larn
+p3lev
+3plex
+3plic
+1plik
+4plit
+p3lj
+1plom
+p3lop
+2p1m
+4p1n
+p3ni
+1po
+5poa
+2poc
+2pof
+po2i
+3polit
+4polj
+poly3
+2porg
+3pos
+pos4ter
+4pov
+po4v^^e4
+2pp
+p4part
+pp5ask
+p4pax
+p3pe
+p1pi
+p4pins
+pp3j
+pp1l
+pp3la
+pp3lin
+pp5lis
+pp5lu
+pp3ly
+pp3l^^e5n
+pp3l^^e5t
+pp3l^^e4
+pp3l^^f6
+pp5oc
+pp3of
+pp3p4
+pp1r
+pp3ra
+pp3ri
+pp3ru
+pp3ry
+pp3r^^e4
+pp3tr
+p2pu
+p5py
+pp3^^e5
+p2r2
+2pra
+5prax
+1pres
+pres4t
+pre3sta
+pres5to
+p3rig
+p3rik
+5pril
+3princ
+pring3
+p5riol
+3pro
+pro3g
+p3ror
+4pr^^e5
+3pr^^e4s
+3pr^^f6v
+2ps
+p2sal
+3psalm
+p5s2ho
+ps4ken
+ps2li
+p3sna
+4pso
+p3sod
+p1s4t
+p4stak
+p4st^^e4v
+p2s^^f6
+2p1t
+p3tri
+1pu
+4pug
+pul2l5ov
+pul5tr
+5pung
+3punk
+pus3t
+2p1v
+p^^e53dr
+3p^^e4l
+p^^e45ro
+4p^^f6r
+3p^^e9
+qu4
+3que
+1ra
+3ra.
+raci4t
+3rade.
+4radr
+ra4du
+5ra1e
+2raff^^e4
+ra3fr
+ra5is
+2rak
+ra2lo
+r4ande
+3rande.
+4ran4d3r
+rand3s
+2ransv
+ra3pl
+3rar
+r4ar.
+4rarb
+r4are
+4rarg
+r4ark
+4rarm
+r4arn
+r4ars
+4rart
+r3arta
+ra5r^^f6
+r4as
+ras3h
+ra2st
+3raste.
+3rativ
+ra3tri
+2rav
+ra5yo
+2rb
+2r1c
+2r2d
+r4daf
+rda5gr
+r3dj
+r4dos
+rd3ran
+rd3rat
+r4dul
+r3d^^e5
+r3d^^e4
+r4d^^f6s
+1re
+3re.
+4reaus
+re3b
+4rec
+5reco
+re3d4r
+re5du
+4reft
+4regg
+3regn.
+re1kr
+rek5tri
+4reld
+re3lu
+rem5p
+3rems
+r4en.
+2reni
+2renk
+2renl
+re3n^^f6
+re3o
+3rer.
+3rern
+3reso
+ress5k
+re1sti
+3ret.
+4retet
+ret3ro
+4rety
+re5t^^e5
+2revig
+4rex
+2r1f
+rf^^f63ri
+2r1g
+rg3g2
+rgs5top
+2rh
+rhands5
+3rial
+4rib
+3rifi
+2rifr
+r3ifr^^e5
+3rifu
+3rigt
+rik2s
+3riktn
+ri4mo
+2rind
+rind3s
+5ringen.
+ring3r
+2rinr
+2rins
+2rint
+ri1o
+3riot
+ri5ple
+ri2st^^e4
+ri4tut
+ri4vis
+riv3s
+4rj
+r4jis
+r3jo
+r5ju
+r5j^^f6
+2rk
+rk3akt
+r4kek
+rkes3
+r1ki
+r3klas
+rk2le
+r4kl^^f6
+rk3n
+rk4ne
+r1ko
+r4kod
+rk3tr
+r1ku
+r4kup
+r1k^^e4
+r5k^^f6r
+2r1l
+r5laka
+r5lav
+rld2
+rlds3
+rl5sp
+2r1m
+r4marb
+r4mil
+rm2s5j
+rm5tr
+2r1n
+rnal4
+rn3g4
+rn1k
+r2nom
+rns4k
+rns4t
+rn3t
+ro3b
+ro4gro
+ro2kr
+2rolj
+rol4li
+rom4a
+5roman
+5ronau
+5rond.
+ron4v
+ro3pl
+ropp2s
+ro4ra
+2rord
+2rorg
+2rorie
+3rorn
+ro4sin
+ro4sn
+ros3v
+ro5te
+2r1p
+r4pl^^f6
+r4p^^f6
+4r1r
+rra4n
+rrd4
+rreligi5
+rres4
+r5rib
+rr5k4
+r4rob
+r4rom
+rr1s
+rrs2k
+r4rur
+2rs
+r4seld
+r4sex
+r2sin
+r1ski
+r4skid
+rsk3na
+rs5koll
+rs4kos
+rskotts3
+r2sku
+r3sk^^f6
+rslags4v
+r4sle
+r4slo
+r4s5l^^f6
+rs4mo
+rs5nat
+rs5n^^e4
+r1sp
+r2spl
+r2spo
+rs3s4
+rs5tak
+rs4te
+r5stek
+rs5tend
+r5steni
+rs5till
+r1sto
+r4ston
+rst4r
+r3str^^f6
+r3stu
+r1sv
+rs4vag
+r2sv^^e4
+r1sy
+2r1t
+r2taf
+r2takti
+rt4an
+r4tins
+r4tom
+r5trit
+r3tr^^e4
+rt3t
+r4tut
+rubb5l
+ru3br
+ru4dan
+ruks1
+ruks3v
+5rullera
+3rum.
+runn2
+runns5
+4rupp
+rus2h
+ru5sha
+2rut
+5rutig
+rut4ra
+ru4vi
+5ru^^f6
+2r1v
+rv4sj
+rv2s5k^^e4
+r3w
+rydd5s
+ry5o
+r^^e5ge5l
+4r^^e5l
+r^^e5ng3s
+r^^e55ra
+r^^e53st
+r^^e4ck5s
+4r^^e4kt
+4r^^e4m
+r^^e4ng3s
+r^^e4ns5t
+4r^^e4s
+r^^e44san
+r^^e4s3s
+r^^e45sti
+r^^e4v5s
+r^^f6d5el
+r^^f6d5r
+r^^f6d3s
+2r^^f6g
+r3^^f6i
+r^^f6k3s
+r^^f6ns4t
+4r^^f6p
+3r^^f6r
+r^^f6r4s
+r^^f64st
+r^^f6st3r
+r1^^f6vr
+1sa
+3sa.
+3sad.
+3sade
+4sadj
+2sa3dr
+sad5s
+2saf
+sa3i
+sak5ri
+2s1akt
+sa5lo
+3s2am
+sa2ma
+samman3
+sa2mor
+sand3s
+4sang
+2sanl
+s3anl^^e4
+san3sla
+2sap
+3s4ar.
+2sarb
+2sarm
+s5arm.
+3sarn
+2sart
+4sarv
+4sass
+5sat.
+sa4tu
+2sau
+s3auk
+2s1av
+4sb
+s2c
+2sch.
+1scha
+2schau
+4schb
+1schen
+1scher
+1schet
+1schi
+4schk
+4schm
+4schp
+3schy
+3sch^^f6
+sci3p
+4s3d
+1se
+se4at.
+se2g
+2s3egg
+3segl
+seg3ra
+sek5le
+sek3r
+sek5tr
+3sel.
+se5ly
+sem2
+3sen.
+s5ers^^e4
+3set.
+2sexp
+2s1f
+s4f^^e4r.
+sf^^f62
+4s3g2
+2sh
+5s2haw
+shi1s
+s5h^^f6
+1si
+sid5s
+5sie
+si4eri
+si4esk
+si2ett
+3s2ig
+3sik
+sikts3
+5sill.
+silver3
+silv3r
+2s1ind
+2s1inf
+sinne2s3
+3sinni
+4sinr
+2sin1s
+s1inst
+5sint.
+2sintr
+3sio
+sis4t
+siu4
+1s2j
+2sjak
+s3jakt
+4sjn
+4sjt
+s4ju
+5sjuk
+4sjur
+sj^^e4ls3
+3sj^^f6
+4sk.
+2ska.
+3s2kada
+s2kado
+3skaffn
+1skaft
+s4kag
+s2kal
+3skal.
+1skap
+5skap.
+5skapet
+4skapi
+skaps1
+4skar
+s4kara
+5skarv
+4skas
+s2kat
+s4kav
+4ske.
+3sked.
+s4kene
+3skepp
+4skh
+sk4i
+3skif
+5skin
+4skis.
+5skiv
+5skjor
+3skju
+4skl
+sk5lap
+s3klas
+4skn
+3s4ko.
+1s4kog
+4skogsg
+1skol
+3skola
+s4kolo
+s4korp
+skor1st
+1skot
+s5kran.
+3skrat
+sk4ret
+3skrev
+1skri
+3skrif
+s3krig
+5skrin
+3skrip
+s5kris
+3skriv
+s5kron
+s4kru
+5skrub
+3skruv
+5skr^^e4c
+sk3s
+2skt
+3skulp
+s3kup
+2skv
+s4kve
+1s2ky
+s4kyn
+2skyrk
+1sk^^e5
+s4k^^e5l
+5sk^^e5p.
+4sk^^e5r
+5sk^^e4nk
+3sk^^e4rv
+2sl2
+4sla.
+s5lad.
+s3land
+3s2lang
+s4lant
+s3lar.
+4slas
+s1lat
+s2lev
+3slev.
+s4lic
+slins3
+4slis
+s2lit
+s5lor
+slotts3
+s2lu
+s3luc
+s3luf
+4slus
+s3lust
+3slut
+slu4to
+3sl^^e5.
+5s4l^^e5r
+s4l^^e4k
+s5l^^e4m
+s5l^^e4nn
+3s4l^^e4p
+4s3l^^e4r
+s2l^^e4t
+3s2l^^f6j
+2sm
+s2mak
+3smak.
+s3makt
+s2mal
+s2met.
+s2mid
+s2mit
+3smitta
+s3mj
+5smug
+5smyg
+sm^^e55g
+sm^^e53k
+sm^^e53s
+3sm^^e4d
+3sm^^e4l
+4sm^^e4s
+3sm^^f6r
+2s2n4
+3snab
+3s4nac
+s3nam
+s5nare
+s3nast
+s5ner
+3snib
+3snil
+3snit
+1snitt
+s3niv
+3snut
+s4n^^e5
+5sn^^e5r
+5sn^^e4c
+s4n^^e4r
+3sn^^f6.
+sn^^f65g
+3sn^^f6r
+sn^^f63s
+1so
+3soc
+5sock
+2sod
+5soi
+2solj
+sol3s2
+2som
+5somm
+3son
+son4st
+so5pra
+so4pu
+3sor.
+2sord
+s5ord.
+2sorg
+3sorn
+3sot
+4sott
+s2p2
+5spann.
+s4park
+5sparv
+4spas
+s3pass
+spa5tr
+1spe
+4sped
+3s4pek
+3s4pel
+4spelsl
+2spen
+2sper
+5spets
+3spill
+3spir
+4spl
+s1pla
+s3plan
+s3plats
+spli4
+s4plin
+5split
+s5pl^^e4
+4spre
+s3pres
+4s3pris
+3sprit
+2spro
+s3pry
+3spr^^e5
+5spr^^e4n
+s3ps
+1s4p^^e5
+3sp^^e5n
+3sp^^e5r
+5sp^^e4n
+3sp^^f6
+4s1r
+4s1s
+s5sad
+sse4lin
+s5sil
+ss2k
+ss5kl
+ss3kun
+ss1l
+ss2lag.
+ss2l^^e4
+ss2l^^f6
+ss3na
+sss4
+ss3unn
+s2sv
+ss3vi
+s2t
+2st.
+4sta.
+5stac
+3stadi
+s4taf
+5stalgis
+3stalla
+2stalli
+5stam.
+5stamm
+1stant
+5stark.
+5startad
+1state
+3statl
+1stau
+st3c
+2s5te.
+4stea
+5steg.
+s4tek.
+2stekn
+5stekt
+s4tell
+3stem.
+3steme
+5stenar
+3s4tene
+3stense
+5stensm
+1stera
+1stering
+s4teriu
+3sterne
+5stetis
+2stia
+2stib
+3stick
+2stid
+s4tiken
+2stil
+3stil.
+3stink
+3stisc
+1stit
+2stj
+s5tju
+3stj^^e4l
+3stj^^e4r
+2stm
+5stoc
+1stol
+4stolk
+4stom
+stori4eu
+5storis
+stor3s
+3straff
+4strativ
+3strato
+3strec
+3strej
+st3ren
+1strer
+2stria
+1strid
+5stride
+2striel
+st4rif
+1strikt
+st5risk
+1stru
+3struk
+2strumm
+s3tryc
+5stryk
+5str^^e5k
+3str^^e5l
+3str^^e4c
+4str^^e4d
+3str^^e4ng
+5str^^e4v
+3str^^f6m
+2st3s4
+st3t
+4stv
+s3tvis
+1sty
+2styp
+1st^^e5
+4st^^e5g
+5st^^e5l
+1st^^e4
+3st^^e4l
+1st^^f6
+1su
+su4b
+3sug
+su3i
+3sum
+2sun
+5sun.
+s1under
+5sune
+s5ung
+2sup
+5supa
+su2pu
+5sus
+2s1ut
+su4to
+su4tr
+s2v2
+5svag.
+s3vagn
+4s3vak
+5svam
+4svap
+svars3
+3svart
+4svas
+s3vat
+4svec
+3sven
+5svep
+4s3ver
+s5ves
+4s3vil
+s4vine
+4svis
+s5vitt
+s5v^^e5d
+3sv^^e5ri
+3sv^^e4ng
+5sv^^e4rm.
+s3v^^e4s
+s3v^^e4t
+4syk
+5syl
+3syn
+syn3k
+s3yrk
+3sys
+sys4t
+sys5ter
+syt2
+sy5th
+1s^^e5
+5s^^e5g
+4s^^e5k
+2s^^e5lde
+s^^e5ng3
+1s^^e4
+s4^^e4d
+2s5^^e4gg
+s4^^e4l
+2s^^e4p
+5s^^e4s
+3s^^e4t
+4s^^e4ta
+1s^^f6
+4s^^f6d
+2s^^f6g
+s5^^f6ga
+s^^f64ko
+4s^^f6l
+4s^^f6p
+s^^f6r2s
+2s3^^f6rt
+1ta
+3ta.
+ta1ch
+3tade.
+4tadi
+4tads5
+2taff
+3taga
+5tak.
+ta5kre
+2taktig
+tak4to
+4talf
+5tallise
+tall5s
+4talv
+3tame
+3tami
+3tan.
+ta4nab
+3tande.
+2t3anfa
+4tanl
+t4ap3l
+2tappar
+3tar.
+4tarb
+tar4mi
+3tarn
+tars4
+4tart
+5tartavl
+4tarv
+4task
+3tast
+ta1str
+tat2
+ta4tan
+tats3
+2tatt
+2tav
+4tave
+5tavla.
+3tavlan
+3tavlo
+tav2s
+3tax
+2tb4
+2tc
+t3cha
+t3che
+2t3d4
+3t2e
+te4as
+te3b4
+5tec
+4teg
+te2g1r
+te3gre
+te3i
+te4int
+4tej
+tej2s
+te4kl
+5teknik
+5teknis
+4teld
+5te5l^^f6
+5tema
+4temo
+te4mu
+ten3g4
+5tensi
+ten3tr
+te4n^^e4
+te5n^^f6r
+5ter.
+5teri^^f6
+ter3k4
+5term
+5terna
+5ters
+ter3t
+te4ru
+5tes.
+5test
+tes4te
+te5stik
+te5stu
+5tetik
+tets3
+4texa
+2texp
+2t1f4
+2t3g4
+2th
+t4hen
+1ti
+3tial
+5tib
+5tici
+3tid
+5tide
+ti4du
+4tid^^f6
+ti4ed
+tifts5
+ti2gel
+3tigh
+ti4go
+ti2gr
+3tigt
+tik3l
+3tiks
+5tikul
+t2il
+5tilj
+3tillst
+3tillv
+3till^^e4
+5time
+2tind
+2tinr
+2tint
+ti4od
+3tion
+ti2os
+3tis
+4tisc
+5tisk
+3tiva
+ti4van
+5tivite
+ti2^^f6
+t2j
+4tje
+4tjob
+2tjou
+4tj^^e4l
+4tj^^e4m
+3tj^^e4n
+2t3k2
+2t3l
+2t1m
+2t5n4
+tne4r
+4todl
+3tok
+4tol.
+4tolj
+2tomr
+4toms
+t2op
+5torap
+t5ord.
+5toriett
+4torm
+torm3s
+3torn
+tor1st
+4tort.
+tos4k
+t5ost.
+t4ov
+2t1p
+t2r4
+2tra
+t4raf
+3trafi
+3t4ral.
+t4rala
+3t4rale
+5tralo
+3trals
+t4ralt
+3trans
+tran2s5a
+4trar
+t3ras.
+t3rat.
+t4rato
+4treg
+4tren
+4trer.
+4trern
+t3rets.
+2tri
+3tribu
+5trick
+trids3
+t5riel
+t1ring
+t3ring.
+2troc
+t3rock
+t4rog
+t5ronik
+t3rono
+4tropi.
+5tross
+5trotn
+t4rump
+t4rup
+3trupp
+trus5ta
+1tryc
+5tryck.
+5tryggh
+4tr^^e5k
+5tr^^e4.
+3tr^^e4d
+tr^^e4ds4
+3tr^^e4f
+3tr^^e4g
+4tr^^e4k
+t3r^^e4kn
+t4r^^e4n
+5tr^^e4ni
+5tr^^f6ja
+t4r^^f6t
+5tr^^e9
+2ts
+t5s4and
+ts5art
+t3s4at
+t3se
+t4seg
+ts4en
+t4sex
+ts2k
+t5skall
+t3skatt
+t1ski
+ts3kl
+tskotts5
+t5slot
+ts5l^^e4k
+ts3n^^e4
+t3sn^^f6
+t2so
+ts3ord
+ts3pl
+tss4
+t1st
+ts4te
+ts5ter
+ts5tillf
+ts3tj
+t3stol
+t4ston
+t2stra
+t4stry
+t4stur
+t5styr
+t2su
+t3sud
+t5sy
+2tt
+t3tac
+t4tau
+t4ted
+tte5g4
+t4tem
+tte2n
+ttes4
+t4tex
+t4tins
+t4tip
+tt3ja
+t1to
+tt3rad
+tt3rand
+tt3rat
+tt3re
+tt3ri
+tt4ry
+tt4se
+tt2si
+tt4sta
+t3tu
+t4tug
+tt1v
+tt4v^^e5
+t3ty
+t3t^^e4
+t3t^^f6r
+4t5ugn
+2tund
+3tunga
+tung3s
+5tunn
+2tupp
+tu5re
+2tutb
+t3utv
+t3ut^^f6
+tu4vu
+5tu^^f6
+2tv
+t1va
+4tve
+t3vig
+3tving
+t3vit
+3tviv
+t3v^^e5g
+3tv^^e5n
+t3v^^e4n
+tv^^e4r3s
+3tv^^e4tt
+ty5da
+5tyg.
+3tyngd
+3typ
+ty3pi
+5tys
+2tz
+3t^^e5g
+t^^e5s4
+4t^^e5t
+t^^e4c4ko
+4t5^^e4g
+4t^^e4m
+4t^^e4rm
+3t^^e4vl
+4t^^f64d
+t^^f65de
+4t^^f6g
+4t^^f6p
+t^^f64pi
+3t^^f6rer
+t^^f6rs3t
+t^^f64vas
+5t^^e9
+u1a
+u2b
+ub5al
+ubb4le
+ub3lic
+u4bo
+u3cha
+u5cl
+u2d
+u4dak
+u5de
+ud3r
+ud4ret
+uds4a
+u4du
+u4dy
+u1e
+u2es
+uf4f^^e4
+uf4tan
+uf4to
+4u1ga
+u1ge
+ugg3s
+ugn4
+ugns5
+ug3s4
+u5ie
+u1in
+u3is
+u3itet
+u3j
+u2keb
+u5ki
+u4kl
+uk5la
+uk3n
+u1ko
+ukos4
+uk2s
+uks5ko
+uk3tris
+ukt5s
+uk4t^^e4
+u3ku
+uk3v
+u1la
+ul4di
+ulds2m
+ul4du
+ul4d^^f6
+ull3ste
+ull3^^e4n
+u1lo
+uls5ti
+ul2tr
+u3lu
+u1l^^e4
+u1l^^f6
+um4f^^e4
+um4so
+ums4t
+u1mu
+u3m^^f6r
+5underl
+1unders^^f6
+1underv
+un4dom
+und3r
+un4d^^e5
+un5g2ef
+un3gersk
+ung5it
+ung3r
+ungs4p
+3unif
+unk3l
+unk3n
+un4kr
+un1sk
+un4tr
+un5trati
+u5nu
+u1o
+u1pe
+u4pern
+u1pi
+u2pl
+u3plet
+up3lik
+3uppfa
+1uppg
+up4pin
+1uppla
+5uppl^^e4
+up4p3r
+upp3s
+upp5sp
+up5ut
+ur5ak
+ur5arv
+u3re
+u1ri
+u1ro
+u4rob
+u4rom
+urs5tin
+ur4st^^e4
+u5ry
+u2sak
+us5anl
+u3scha
+u3se
+usen3
+u2s1k
+us3ka
+us4kla
+us4kr
+u5sky
+us4k^^e5
+us5l^^e4
+us3n
+u2sp
+us3pen
+us5tat
+us3tig
+u3stik
+us5tin
+ust5ro
+u4st^^e5
+u4st^^e4
+us3v
+u4s^^e5
+u4s^^e4
+u2s^^f6
+u4tak
+1utb
+u4tef
+ute3s
+utik2
+u5til
+uti3^^f6
+ut3j
+3utj^^e4m
+utlands3
+u1to
+u3top
+uto5s
+ut3r
+ut4rer
+ut4ro
+ut5rop
+1utru
+2utsid
+ut3sl
+3utsl^^e4
+2utt
+utt4j
+ut1v
+3utvec
+u5ty
+ut3^^f6v
+u5u
+2u1v
+u2vak
+u4vj
+u4v^^e4
+u5^^e5
+u3^^f6
+va5dro
+1vagn
+2v1akti
+val3k
+val4li
+val4st
+5valv
+5vama
+4vand.
+4vanp
+van4st
+van5tr
+5vap
+2varb
+va4res
+va4ri.
+4vark
+var2s
+vart5r
+va1ru
+vas5ti
+5vattn
+4vau
+4vav
+5vavi
+2vb4
+2v1c
+2v3d4
+1ve
+5vec
+ve2k
+ve3ke
+4veld
+vensk3^^e4
+5ventera
+ve3ny
+ve5n^^f6
+4vep
+ver5g
+3verk
+ves4
+ve2s5p
+ve1st
+3veta
+3vete
+vet5sa
+vett5s
+2v1f
+2v1g
+2vh
+v4i
+vi4c
+vid3s
+vild3s
+vil4t
+3vind.
+ving3s4
+3vinkl
+vi2no
+5vinst.
+5vinste
+vi5ny
+3vis.
+vi5sa
+vis5h
+vis5ko
+vi4st
+vis3ta
+vi2tr
+vi4var
+4vjo
+2v3k2
+2v1l
+2v1m
+vm^^f6rk4
+2v1n4
+1vo
+4vok.
+2vom
+4vord
+2vorg
+vos4
+2v1p
+2v2r
+5vrak
+3vrera
+v3ru
+2vs
+v4sc
+v1s2k
+v2skri
+vs4mi
+v3sni
+v2so
+v1st
+vs4te
+vs5tr^^e5
+v5styc
+vs3v^^e5
+v2s^^f6
+2v1t
+vu4d1
+v1und
+4v5up
+4vut
+2v1v
+3vy
+5v^^e5ld
+v^^e5ngs3
+3v^^e5rd
+4v^^e5ri
+v^^e53ru
+3v^^e4g
+v^^e4gg5s
+v^^e44l
+v^^e4ll4s3
+3v^^e4nl
+3v^^e4rde
+v^^e44ril
+4v^^e4rj
+5v^^e4rk
+3v^^e4rld
+2v^^e4t
+3v^^e4x
+4v^^f6g
+4v^^f6p
+3v^^f6r
+1wa
+we2
+w2h
+whi2
+wi2e
+w4na
+x1
+xan5d4
+xem3pla
+xis4
+xk2
+xli4
+xs4
+xti2
+x4t^^e5
+2y
+y1a
+y4bris
+yb4s
+y2d
+y4da
+y5dan
+y4do
+yd3r
+yds4
+y4du
+y4d^^f6
+y1e
+y1ga
+y1ge
+ygg3r
+yg4g^^e5
+ygs4p
+y1i
+y1ki
+y5klist
+yk5lon
+yk3n
+y1ko
+y1la
+yl4gj
+y3li
+yl5k
+yl5l^^e4
+y1lo
+yl4tr
+ym2fl
+ym4for
+y3m^^e5
+yng3r
+ynk5l
+yn4sa
+yns4t
+y3or
+y5ou
+y1pe
+y5po
+yp3ri
+yre4s
+y1ri
+yr4ku
+yrk5v
+y1ro
+yrs4k
+yr5st
+yr5tu
+y1r^^e53
+y5scho
+ys2st
+ys3ta
+ys3ti
+ys4tik.
+yst3ra
+y2tak
+y4te.
+y4tea
+y1to
+ytt3r
+yt5v
+y3va
+y3vi
+y3v^^e4
+y5w
+y5^^e5
+1za
+1ze
+ze4ro
+1zi
+1zo
+zo4nal
+4zp
+z5s
+3zu
+z4zin
+^^e51a
+^^e53dj
+^^e5ds4l
+^^e51e
+^^e51f
+^^e51ga
+^^e51ge
+^^e5ge2l
+^^e5g3l
+^^e5g3s4k
+^^e5g3st
+^^e5g^^e54
+^^e53i
+^^e51ki
+5^^e5klag
+^^e5k4str^^e4
+^^e51la
+1^^e5lder
+^^e52lin
+^^e5l3k
+^^e5ll4sp
+^^e5l2s5e
+^^e5l3st
+^^e51l^^e4
+^^e51m
+^^e5man4s
+^^e5nd4r
+^^e5n4du
+^^e5ns4t
+^^e5ns4v
+^^e53o
+^^e51p
+^^e52pl
+^^e55pla
+^^e54p^^f6
+^^e5r4do
+^^e5rd4ra
+^^e5rd2s
+^^e5rd4s3t
+^^e54rel
+^^e51ri
+^^e55ror
+5^^e5rsav
+^^e5r5s2li
+^^e5r2sv
+^^e5r5^^f6
+^^e5s4ke
+^^e5s3n
+^^e5ss4
+^^e5s4skr
+^^e5s4t
+^^e5te2
+^^e5t3ri
+^^e53tr^^e5
+^^e5t2sj
+^^e5tt5s
+^^e51v
+^^e41a
+^^e42b
+2^^e4c
+^^e4ck5v
+^^e42d
+^^e4dd3s
+^^e4d4du
+^^e4de4s
+^^e4d3r
+^^e4d5se
+^^e4d3st
+^^e43e
+^^e41ga
+^^e41ge
+^^e4g4go
+^^e4g1l
+^^e4g3r
+^^e4g4re
+^^e4g3se
+^^e43i
+^^e45jo
+4^^e4k
+^^e41ki
+^^e4k3n
+^^e4k3r
+^^e41la
+^^e4l4pap
+^^e4l4seg
+^^e4ls5kog
+^^e4l4slu
+^^e4l2t3r
+^^e4l2tu
+^^e4l4vin
+^^e4mp3l
+4^^e4ndligh
+^^e4nd3r
+^^e4nd1st
+^^e4ng5r
+^^e4nni3s
+^^e4nn3s
+^^e44no
+^^e4ns1l
+^^e4n4st
+^^e4ns5te
+^^e4n4sv
+^^e4n2t3r
+^^e43pe
+^^e4pp3l
+^^e44pr
+^^e4p4st
+^^e44rap
+^^e4r2bre
+^^e4rg5l
+^^e4r4gr
+^^e41ri
+^^e4rib4
+^^e4r4k^^e4
+^^e4r4nis
+^^e4rn3st
+^^e4r2n^^e5
+^^e4r4n^^f6
+^^e4r5ob
+^^e45rol
+^^e43rop
+^^e45ror
+^^e45ros
+^^e4r2si
+^^e4r4sko
+^^e4r2so
+^^e4r4sp
+^^e4r2sv
+^^e4r4tand
+^^e4r2tr
+^^e4rt3s
+4^^e4s
+^^e4s3pa
+^^e4s5pi
+^^e4s4sk
+^^e4s4sp
+^^e4s3ta
+^^e4st3r
+^^e44st^^e4
+^^e44s^^e5
+2^^e4t
+^^e43to
+^^e45tre
+^^e4t4s3k
+^^e4t5te
+^^e4t4top
+^^e4tt3r
+^^e4t4tu
+^^e4t4tv
+^^e41va
+^^e42vak
+^^e43vi
+^^e45vu
+^^f61a
+^^f62d
+^^f64dak
+^^f64dal
+^^f64darv
+^^f6de4s5
+^^f64dis
+^^f6d3ra
+^^f6d2s
+^^f6d3se
+^^f64du
+^^f64d^^f6
+^^f61e
+^^f61ga
+^^f6g5ak
+^^f65gar
+1^^f6gd
+^^f61ge
+^^f65ger
+^^f6gg4
+^^f6g1l
+^^f6g2n
+^^f6gn3e
+1^^f6go
+^^f6g3si
+^^f6g3sk
+^^f61i
+^^f63jo
+^^f6j4sv
+^^f64karm
+^^f61ki
+^^f6k3n
+^^f6k2s
+^^f6k3sl
+^^f61la
+^^f6l4kv
+^^f6l4k^^f6
+^^f6l2p
+^^f65l^^e4
+^^f6man4
+^^f6m2kl
+^^f64nal
+^^f62nom
+^^f6ns3ke
+^^f6n4so
+^^f6nst3r
+^^f63pe
+^^f64pel
+^^f63pi
+^^f6p5li
+^^f65plo
+1^^f6ppn
+^^f64pr
+^^f63rande
+^^f63ras
+^^f64rask
+^^f6rb4
+^^f6r3d4r
+^^f6r1eni
+^^f63res
+^^f64restr
+^^f63ret
+^^f6r5evig
+^^f6r3g
+^^f61ri
+^^f65rig
+^^f63ring
+^^f6r3int
+^^f6r5ir
+^^f6r5iv
+^^f6r4kal
+^^f6r1k2l
+^^f6r5kli
+^^f6r4nis
+^^f6r3ol
+^^f6r1or
+^^f6r2p5la
+^^f6r1s2k
+^^f6r3sl
+^^f6r4sl^^e4
+^^f6r5te
+^^f6rt5s
+^^f6r1u
+^^f6r3vr
+^^f6r3y
+^^f6r1^^e4
+^^f6r^^f64d
+^^f62sak
+^^f6s3n
+^^f6s4sj
+^^f6s2sk
+^^f6s4sp
+^^f6s3ta
+^^f6st3v
+^^f62tak
+^^f6ts5ko
+^^f6t4st
+^^f61v
+^^f6ve4
+^^f6ver1
+5^^f6vere
+^^f62vj
+^^f6v3ra
+^^f6v3ri
+^^f6v4sk
+^^e93e
+}
+}
+
diff --git a/lib/kotext/kohyphen/hyphdicts/hyph_uk.dic b/lib/kotext/kohyphen/hyphdicts/hyph_uk.dic
new file mode 100644
index 00000000..be6a153c
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphdicts/hyph_uk.dic
@@ -0,0 +1,1654 @@
+KOI8-U
+'4
+'4
+'4
+'4
+'4
+'4
+'4
+'4
+.'8
+.6
+.4'3
+.43
+.543
+.5.
+.343
+.54
+.צ43
+.4
+.̦43
+.̦434
+.̦43
+.̦43
+.̦43
+.̦43
+.6
+.'8
+.6
+.6'6
+.6'6
+.6
+.6
+.6
+.6
+.66
+.34
+.34
+.צ43
+.צ54
+.צ54
+.צ54
+.צ54
+.צ54
+.צ54
+.צ'3
+.צĦ34
+.6
+.6
+.6
+.6'6
+.6
+.6'6
+.66
+.6
+.66
+.6
+.66
+.'8
+.6
+.6
+.6
+.34
+.ϧ4
+.ϧ4
+.ϧ5
+.6
+.'8
+.34
+.34
+.34
+.4
+.4
+.4
+.6
+.6'6
+.6
+.ڭ6
+.6
+.66
+.ڦ34
+.6
+.6'6
+.6
+.66
+.66
+.6
+.6
+.66
+.6
+.6
+.6
+.6
+.6
+.6
+.66
+.6
+.6
+.'8
+.ͦ43
+.6
+.6
+.'8
+.34
+.34
+.4
+.Ц43
+.6
+.4Ҧ
+.'8
+.4.
+.3
+.34
+.4'3
+.43
+.43
+.43
+.43
+.43
+.43
+.43
+.43
+.43
+.43
+.43
+.43Ӧ
+.43
+.43
+.Ц43
+.Ц43
+.Ц54
+.Ц54
+.Ц54
+.Ц54
+.Ц54
+.Ц'3
+.34
+.34
+.ϧ4
+.43
+.54
+.54
+.54
+.6
+.34
+.34
+.6
+.6
+.'8
+.4'3
+.43
+.54
+.54
+.54
+.34
+.6
+.6
+.66
+.6
+.6
+.6'6
+.66
+.66
+.Ц43
+.6
+.6
+.66
+.'8
+.6
+.6
+.6
+.6
+.4
+.4
+.4Ҧ
+.4
+.'8
+.6
+.6
+.6
+.4'3
+.43
+.6
+.'8
+.6
+.6
+.6
+.6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+21
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34Ǧ
+34
+34̦
+34
+34
+34
+34
+34
+34
+34
+34æ
+34
+34
+34̦
+3
+3
+3
+3
+3
+3æ
+3
+3
+3
+3
+3
+3
+3'4
+344
+34
+34
+34
+34
+34
+34
+344
+34
+34
+34
+34
+344
+344
+34
+34
+344
+34
+34
+34
+344
+344
+34Ԧ
+34
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3Ҧ
+3Ҧ
+3Ҧ
+3
+3
+3
+3
+3
+3
+3
+3
+34
+34
+34
+34
+34
+34
+3
+3צ
+3צ
+3צަ
+3Ϥ
+3
+3
+3
+3Ҧ
+3Ҧ
+3
+3
+3
+3
+34
+34
+34
+34
+34
+34ͦ
+34æ
+34
+34
+34
+34
+343
+34
+34
+34
+3
+3ͦ
+3Ҧ
+3'4
+344Ϥ
+344
+344
+34
+34
+34
+34
+344'
+34
+34
+34Ħ
+34
+34
+34
+3
+3
+3
+3
+3
+3
+3
+3
+3צ
+3
+3
+3
+3
+3ͦ
+3ͦ
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3Φ
+3Ҧ
+3Ҧ
+3Ҧ
+3
+3
+34
+34
+34צ
+34Φæ
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34ͦ
+34צ
+34.
+34
+344
+34
+36
+3̤
+3
+3
+3'4
+3'4
+344
+344Φ
+344
+34
+34Ҧ
+34
+3
+34'
+34'
+34
+34
+34¦
+34¦
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34Ҧ
+34
+344
+34
+34
+34
+34
+34
+34צ
+344
+344
+344
+344
+344
+34
+34˦
+34˦
+34
+34
+34
+34
+34
+344
+344
+344
+344
+344
+344
+344
+34
+34
+34
+34
+34Ц
+34Ц
+34Ц
+34צ
+34
+34
+34
+344
+344
+344
+344
+344
+344Ҧ
+344Ҧ
+344Ҧ
+344Ϥ
+344ϧ
+344
+344
+344
+344
+344
+344
+344
+344
+344
+34¦
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34Ҧ
+34
+34
+34
+34
+34Ԧ
+34Ԧ
+34Ԧ
+34Ԧ
+34
+34
+34Ҧ
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34Ȧ
+34
+344
+34
+344
+344Φ
+3
+3
+34
+34
+34
+34
+34
+34
+34
+34
+34
+34ͦ
+344
+34
+34
+34
+34
+34
+34
+34Ц
+34
+34Ц
+34
+34
+34
+34
+34˦
+34˦
+34˦
+34
+34
+34
+34
+34
+34
+34˦
+34
+34
+43
+47
+6'
+66.
+666.
+666.
+666.
+66.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+66.
+66.
+66.
+66.
+666.
+666.
+666.
+66.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+66.
+666.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+66.
+666.
+666.
+666.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+66.
+66.
+6.
+6.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+66.
+66.
+66.
+66.
+666.
+666.
+666.
+66.
+66.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+66.
+66.
+66.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+66.
+66.
+66.
+666.
+666.
+666.
+666.
+666.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+666.
+66.
+66.
+666.
+666.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+666.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+666.
+666.
+666.
+666.
+66.
+66.
+666.
+66.
+66.
+66.
+66.
+666.
+66.
+66.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+666.
+66.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+666.
+66.
+666.
+66.
+66.
+666.
+666.
+666.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+666.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+666.
+66.
+66.
+666.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+66.
+66.
+66.
+66.
+666.
+666.
+666.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+666.
+66.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+6.
+66.
+66.
+6.
+6.
+6.
+6.
+6.
+66.
+66.
+66.
+66.
+6.
+6.
+6.
+6.
+66.
+6
+1
+2
+34
+34
+4
+4
+צ4
+ϧ4
+4
+4
+43
+¦5
+34
+4
+4
+4Ц
+4
+4
+4
+43Ʀ
+43
+43
+43
+43
+43Ħ
+43
+43
+43ͦ
+434
+434
+434
+43Ц
+43
+434
+43
+43Ȧ
+43
+4
+43
+Ħ4
+ϧ4
+'4
+43
+43
+43
+34̦
+Ҧ4
+43
+4
+454
+5
+34
+54
+4Ҧ
+צ43
+4ͦӦ
+4
+4
+4
+¦43
+¦̦4
+4
+43
+43
+43
+43
+43
+43
+43
+43
+43
+4434
+443
+4434
+443
+443
+45
+4
+43
+Ҧ43
+3'4
+34
+443
+443
+43
+34
+34
+34
+ɧ4
+4
+34
+34
+4
+4
+4
+צ544
+צ54
+צ54
+צ3'4
+צ54
+צ54
+צ7
+צ4
+4
+4
+45
+4Τ
+54¦
+54
+43
+43
+23
+4
+̦4
+34̦
+Ǧ455
+Ǧ34
+Ǧ34ͦӦ
+445
+43
+4
+434
+34
+43
+34Ӧ
+4
+4
+4Φ34
+434
+45
+43
+43
+43
+454
+454
+45
+45
+45
+45
+45
+45
+45Ť
+45
+45
+4
+4
+43
+43
+43
+43
+43
+43
+43
+43
+43Ӧ
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+
+Ħ34
+Ħ34
+Ħ4
+Ħ4צ43
+Ħ4
+Ħ4
+Ħ4
+3'4
+3'4
+34צ
+34
+43
+54
+ϧ4
+ϧ4
+ϧ4
+ϧ4
+ϧ4
+54
+4
+4
+1
+2
+34
+34
+34Ҧ
+34
+4Ҧ
+4
+4
+34
+34
+4ͦӦ
+4
+4
+Ŧ4
+21
+21
+21
+21
+34
+34
+34Ҧ
+74
+4
+4
+4
+4
+4
+4
+4
+4צ
+4
+4
+4æ
+4
+Ԧ4
+4
+4
+4
+1
+2
+43
+43
+45
+Ц45
+454
+34
+'4
+'4
+34
+34̦
+3'4
+3'4
+34
+3'4
+3'4
+3'4
+3'4
+34
+34
+34
+4צ43
+43
+54
+4
+4
+4
+4
+4
+4
+4
+4
+4
+Ħ4
+4
+ڦ3'4
+ڦ3'4
+ڦ3'4
+ڦ3'4
+34
+34
+4
+4
+4
+4˦
+4
+6
+4
+1
+2
+34
+34
+4Ҧ
+ϧ4
+4ͦӦ
+4
+4
+4
+1
+2
+34
+434
+4
+4
+4
+4
+3'4
+43
+4
+34
+1
+2
+34
+34
+4צ
+5
+43
+43
+43
+43
+ϧ4
+ɧ4
+4
+43
+4
+34
+443
+ϧ4
+4
+43
+34̦
+4
+ͦ454
+ͦ454
+ͦ4
+ͦ34Ҧ
+ͦ34̦
+ͦ4
+45
+34
+34
+3'4
+3'4
+34
+34
+34
+34ަ
+34
+34
+3'4
+34
+4'3
+474
+43
+43
+43
+43
+43
+434
+43˦
+474
+474
+474
+474
+474
+474
+54
+34Ҧ
+Ħ4
+Ħ4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+34
+34
+34
+34
+34
+4
+4
+4
+ʦ4
+4
+Ц34Ҧ
+4
+4
+34
+34
+34
+34
+34
+4
+4
+4
+4̦
+4̦
+4
+4
+4
+4Ʀ
+4
+צ4'3
+צ43
+34
+ϧ4
+ŧ4
+4
+3'4
+4
+4
+4
+4
+4
+Φ45
+Φ4
+3'4
+434
+34̦
+1
+2
+34̦
+34
+34
+34
+34
+4Ҧ
+4
+4æ
+4
+4
+4
+'3
+3'4
+3'4
+434ͦ
+44
+54
+¦3'4
+¦34
+¦34
+¦34
+¦4
+¦4
+4
+34
+צ43
+'3
+4
+4ͦӦ
+4
+4
+34
+Ϧ4
+Ϧ4
+4
+ϧ4
+4
+4¦
+4
+4
+4
+4
+4
+4
+4
+4
+4צ
+4æ
+4
+4
+'3
+3
+3
+4
+4
+4
+4
+4
+45
+434
+4
+34
+34
+34
+34
+34
+34
+3'4
+34
+45
+54
+54
+4Φ
+34Ҧ
+34
+34
+34
+54¦
+54
+ŧ4
+ŧ4
+ŧ4
+ŧ4
+ŧ4
+ŧ4
+4
+4
+Ц54
+Ц54Φ
+Ц654
+Ц34
+Ц34
+Ц34
+Ц544
+Ц4
+Ц4
+Ц3'4
+Ц34
+Ц54
+ЦĦ3'4
+ЦĦ4
+Ц4
+34
+3'4
+3'4
+3'4
+34
+34
+34
+34ަ
+34
+34
+34
+3'4
+443
+443
+443
+443Ħ
+445
+445
+445æ
+44
+443
+54Φ
+54
+54
+4
+ϧ4
+ϧ4
+̦34̦
+̦4
+̦45
+̦43
+43
+43
+43
+43
+43
+43
+43
+43
+43Ʀ
+34Ҧ
+34
+4
+4
+4
+4
+4
+4
+4
+45
+44
+3'4
+34
+34
+3'4
+4
+ɧ4
+4
+4
+4
+34
+34
+43
+43
+43צ43
+43
+ϧ4
+4
+4
+Ħ4
+34
+34̦
+ϧ4
+4'5
+43
+43
+45
+45
+454
+45Ħ
+45ͦ
+45
+54
+545
+54.
+54
+54
+54Ҧ
+54
+54
+54
+54
+54
+654.
+'4
+'4
+34
+5
+5
+5
+54
+54
+4
+4
+4
+4
+54
+34
+443
+4
+4Ҧ
+4
+ŧ4
+ŧ4
+4
+æ4
+43צ43
+43
+43
+43
+4
+Цצ43
+43
+43
+43
+43
+43
+443
+5
+3'4
+34Ҧ
+34
+34
+4
+4̦
+4
+4
+43צ43
+43
+43
+43
+1
+2
+3'4
+3'4
+44
+ϧ4
+զ3'4
+զ3'4
+34
+34
+34
+344
+4
+Ʀڦ4
+4443
+34
+434
+Ȧͦ4
+43
+34̦
+443
+3
+34
+Ц43
+43
+1
+2
+1
+2
+34
+4Ҧ
+4ͦӦ
+ϧ4
+6
diff --git a/lib/kotext/kohyphen/hyphen.c b/lib/kotext/kohyphen/hyphen.c
new file mode 100644
index 00000000..97f47bf7
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphen.c
@@ -0,0 +1,500 @@
+/* LibHnj is dual licensed under LGPL and MPL. Boilerplate for both
+ * licenses follows.
+ */
+
+/* LibHnj - a library for high quality hyphenation and justification
+ * Copyright (C) 1998 Raph Levien,
+ * (C) 2001 ALTLinux, Moscow (http://www.alt-linux.org),
+ * (C) 2001 Peter Novodvorsky (nidd@cs.msu.su)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+*/
+
+/*
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.0 (the "MPL"); you may not use this file except in
+ * compliance with the MPL. You may obtain a copy of the MPL at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the MPL is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the MPL
+ * for the specific language governing rights and limitations under the
+ * MPL.
+ *
+ */
+#include <stdlib.h> /* for NULL, malloc */
+#include <stdio.h> /* for fprintf */
+#include <string.h> /* for strdup */
+
+#ifdef UNX
+#include <unistd.h> /* for exit */
+#endif
+
+#define noVERBOSE
+
+#include "hnjalloc.h"
+#include "hyphen.h"
+
+static char *
+hnj_strdup (const char *s)
+{
+ char *new;
+ int l;
+
+ l = strlen (s);
+ new = hnj_malloc (l + 1);
+ memcpy (new, s, l);
+ new[l] = 0;
+ return new;
+}
+
+/* a little bit of a hash table implementation. This simply maps strings
+ to state numbers */
+
+typedef struct _HashTab HashTab;
+typedef struct _HashEntry HashEntry;
+
+/* A cheap, but effective, hack. */
+#define HASH_SIZE 31627
+
+struct _HashTab {
+ HashEntry *entries[HASH_SIZE];
+};
+
+struct _HashEntry {
+ HashEntry *next;
+ char *key;
+ int val;
+};
+
+/* a char* hash function from ASU - adapted from Gtk+ */
+static unsigned int
+hnj_string_hash (const char *s)
+{
+ const char *p;
+ unsigned int h=0, g;
+
+ for(p = s; *p != '\0'; p += 1) {
+ h = ( h << 4 ) + *p;
+ if ( ( g = h & 0xf0000000 ) ) {
+ h = h ^ (g >> 24);
+ h = h ^ g;
+ }
+ }
+ return h /* % M */;
+}
+
+static HashTab *
+hnj_hash_new (void)
+{
+ HashTab *hashtab;
+ int i;
+
+ hashtab = hnj_malloc (sizeof(HashTab));
+ for (i = 0; i < HASH_SIZE; i++)
+ hashtab->entries[i] = NULL;
+
+ return hashtab;
+}
+
+static void
+hnj_hash_free (HashTab *hashtab)
+{
+ int i;
+ HashEntry *e, *next;
+
+ for (i = 0; i < HASH_SIZE; i++)
+ for (e = hashtab->entries[i]; e; e = next)
+ {
+ next = e->next;
+ hnj_free (e->key);
+ hnj_free (e);
+ }
+
+ hnj_free (hashtab);
+}
+
+/* assumes that key is not already present! */
+static void
+hnj_hash_insert (HashTab *hashtab, const char *key, int val)
+{
+ int i;
+ HashEntry *e;
+
+ i = hnj_string_hash (key) % HASH_SIZE;
+ e = hnj_malloc (sizeof(HashEntry));
+ e->next = hashtab->entries[i];
+ e->key = hnj_strdup (key);
+ e->val = val;
+ hashtab->entries[i] = e;
+}
+
+/* return val if found, otherwise -1 */
+static int
+hnj_hash_lookup (HashTab *hashtab, const char *key)
+{
+ int i;
+ HashEntry *e;
+
+ i = hnj_string_hash (key) % HASH_SIZE;
+ for (e = hashtab->entries[i]; e; e = e->next)
+ if (!strcmp (key, e->key))
+ return e->val;
+ return -1;
+}
+
+/* Get the state number, allocating a new state if necessary. */
+static int
+hnj_get_state (HyphenDict *dict, HashTab *hashtab, const char *string)
+{
+ int state_num;
+
+ state_num = hnj_hash_lookup (hashtab, string);
+
+ if (state_num >= 0)
+ return state_num;
+
+ hnj_hash_insert (hashtab, string, dict->num_states);
+ /* predicate is true if dict->num_states is a power of two */
+ if (!(dict->num_states & (dict->num_states - 1)))
+ {
+ dict->states = hnj_realloc (dict->states,
+ (dict->num_states << 1) *
+ sizeof(HyphenState));
+ }
+ dict->states[dict->num_states].match = NULL;
+ dict->states[dict->num_states].fallback_state = -1;
+ dict->states[dict->num_states].num_trans = 0;
+ dict->states[dict->num_states].trans = NULL;
+ return dict->num_states++;
+}
+
+/* add a transition from state1 to state2 through ch - assumes that the
+ transition does not already exist */
+static void
+hnj_add_trans (HyphenDict *dict, int state1, int state2, char ch)
+{
+ int num_trans;
+
+ num_trans = dict->states[state1].num_trans;
+ if (num_trans == 0)
+ {
+ dict->states[state1].trans = hnj_malloc (sizeof(HyphenTrans));
+ }
+ else if (!(num_trans & (num_trans - 1)))
+ {
+ dict->states[state1].trans = hnj_realloc (dict->states[state1].trans,
+ (num_trans << 1) *
+ sizeof(HyphenTrans));
+ }
+ dict->states[state1].trans[num_trans].ch = ch;
+ dict->states[state1].trans[num_trans].new_state = state2;
+ dict->states[state1].num_trans++;
+}
+
+#ifdef VERBOSE
+HashTab *global;
+
+static char *
+get_state_str (int state)
+{
+ int i;
+ HashEntry *e;
+
+ for (i = 0; i < HASH_SIZE; i++)
+ for (e = global->entries[i]; e; e = e->next)
+ if (e->val == state)
+ return e->key;
+ return NULL;
+}
+#endif
+
+HyphenDict *
+hnj_hyphen_load (const char *fn)
+{
+ HyphenDict *dict;
+ HashTab *hashtab;
+ FILE *f;
+ char buf[80];
+ char word[80];
+ char pattern[80];
+ int state_num, last_state;
+ int i, j;
+ char ch;
+ int found;
+ HashEntry *e;
+
+ f = fopen (fn, "r");
+ if (f == NULL)
+ return NULL;
+
+ hashtab = hnj_hash_new ();
+#ifdef VERBOSE
+ global = hashtab;
+#endif
+ hnj_hash_insert (hashtab, "", 0);
+
+ dict = hnj_malloc (sizeof(HyphenDict));
+ dict->num_states = 1;
+ dict->states = hnj_malloc (sizeof(HyphenState));
+ dict->states[0].match = NULL;
+ dict->states[0].fallback_state = -1;
+ dict->states[0].num_trans = 0;
+ dict->states[0].trans = NULL;
+
+ /* read in character set info */
+ for (i=0;i<MAX_NAME;i++) dict->cset[i]= 0;
+ fgets(dict->cset, sizeof(dict->cset),f);
+ for (i=0;i<MAX_NAME;i++)
+ if ((dict->cset[i] == '\r') || (dict->cset[i] == '\n'))
+ dict->cset[i] = 0;
+
+ while (fgets (buf, sizeof(buf), f) != NULL)
+ {
+ if (buf[0] != '%')
+ {
+ j = 0;
+ pattern[j] = '0';
+ for (i = 0; ((buf[i] > ' ') || (buf[i] < 0)); i++)
+ {
+ if (buf[i] >= '0' && buf[i] <= '9')
+ pattern[j] = buf[i];
+ else
+ {
+ word[j] = buf[i];
+ pattern[++j] = '0';
+ }
+ }
+ word[j] = '\0';
+ pattern[j + 1] = '\0';
+
+ /* Optimize away leading zeroes */
+ for (i = 0; pattern[i] == '0'; i++);
+
+#ifdef VERBOSE
+ printf ("word %s pattern %s, j = %d\n", word, pattern + i, j);
+#endif
+ found = hnj_hash_lookup (hashtab, word);
+ state_num = hnj_get_state (dict, hashtab, word);
+ dict->states[state_num].match = hnj_strdup (pattern + i);
+
+ /* now, put in the prefix transitions */
+ for (; found < 0 ;j--)
+ {
+ last_state = state_num;
+ ch = word[j - 1];
+ word[j - 1] = '\0';
+ found = hnj_hash_lookup (hashtab, word);
+ state_num = hnj_get_state (dict, hashtab, word);
+ hnj_add_trans (dict, state_num, last_state, ch);
+ }
+ }
+ }
+
+ /* Could do unioning of matches here (instead of the preprocessor script).
+ If we did, the pseudocode would look something like this:
+
+ foreach state in the hash table
+ foreach i = [1..length(state) - 1]
+ state to check is substr (state, i)
+ look it up
+ if found, and if there is a match, union the match in.
+
+ It's also possible to avoid the quadratic blowup by doing the
+ search in order of increasing state string sizes - then you
+ can break the loop after finding the first match.
+
+ This step should be optional in any case - if there is a
+ preprocessed rule table, it's always faster to use that.
+
+*/
+
+ /* put in the fallback states */
+ for (i = 0; i < HASH_SIZE; i++)
+ for (e = hashtab->entries[i]; e; e = e->next)
+ if ( *(e->key) ) /* not for the empty key entry */
+ {
+ for (j = 1; 1; j++)
+ {
+ state_num = hnj_hash_lookup (hashtab, e->key + j);
+ if (state_num >= 0)
+ break;
+ }
+ /*KBH: FIXME state 0 fallback_state should always be -1? */
+ if (e->val)
+ dict->states[e->val].fallback_state = state_num;
+ }
+#ifdef VERBOSE
+ for (i = 0; i < HASH_SIZE; i++)
+ for (e = hashtab->entries[i]; e; e = e->next)
+ {
+ printf ("%d string %s state %d, fallback=%d\n", i, e->key, e->val,
+ dict->states[e->val].fallback_state);
+ for (j = 0; j < dict->states[e->val].num_trans; j++)
+ printf (" %c->%d\n", dict->states[e->val].trans[j].ch,
+ dict->states[e->val].trans[j].new_state);
+ }
+#endif
+
+#ifndef VERBOSE
+ hnj_hash_free (hashtab);
+#endif
+
+ return dict;
+}
+
+void hnj_hyphen_free (HyphenDict *dict)
+{
+ int state_num;
+ HyphenState *hstate;
+
+ for (state_num = 0; state_num < dict->num_states; state_num++)
+ {
+ hstate = &dict->states[state_num];
+ if (hstate->match)
+ hnj_free (hstate->match);
+ if (hstate->trans)
+ hnj_free (hstate->trans);
+ }
+
+ hnj_free (dict->states);
+
+ hnj_free (dict);
+}
+
+#define MAX_WORD 256
+
+int hnj_hyphen_hyphenate (HyphenDict *dict,
+ const char *word, int word_size,
+ char *hyphens)
+{
+ char prep_word_buf[MAX_WORD];
+ char *prep_word;
+ int i, j, k;
+ int state;
+ char ch;
+ HyphenState *hstate;
+ char *match;
+ int offset;
+
+ if (word_size + 3 < MAX_WORD)
+ prep_word = prep_word_buf;
+ else
+ prep_word = hnj_malloc (word_size + 3);
+
+ j = 0;
+ prep_word[j++] = '.';
+
+ for (i = 0; i < word_size; i++)
+ prep_word[j++] = word[i];
+
+ for (i = 0; i < j; i++)
+ hyphens[i] = '0';
+
+ prep_word[j++] = '.';
+
+ prep_word[j] = '\0';
+#ifdef VERBOSE
+ printf ("prep_word = %s\n", prep_word);
+#endif
+
+ /* now, run the finite state machine */
+ state = 0;
+ for (i = 0; i < j; i++)
+ {
+ ch = prep_word[i];
+ for (;;)
+ {
+
+ if (state == -1) {
+ /*return 1;*/
+ /*KBH: FIXME shouldn't this be as follows?*/
+ state = 0;
+ goto try_next_letter;
+ }
+
+#ifdef VERBOSE
+ char *state_str;
+ state_str = get_state_str (state);
+
+ for (k = 0; k < i - strlen (state_str); k++)
+ putchar (' ');
+ printf ("%s", state_str);
+#endif
+
+ hstate = &dict->states[state];
+ for (k = 0; k < hstate->num_trans; k++)
+ if (hstate->trans[k].ch == ch)
+ {
+ state = hstate->trans[k].new_state;
+ goto found_state;
+ }
+ state = hstate->fallback_state;
+#ifdef VERBOSE
+ printf (" falling back, fallback_state %d\n", state);
+#endif
+ }
+ found_state:
+#ifdef VERBOSE
+ printf ("found state %d\n",state);
+#endif
+ /* Additional optimization is possible here - especially,
+ elimination of trailing zeroes from the match. Leading zeroes
+ have already been optimized. */
+ match = dict->states[state].match;
+ if (match)
+ {
+ offset = i + 1 - strlen (match);
+#ifdef VERBOSE
+ for (k = 0; k < offset; k++)
+ putchar (' ');
+ printf ("%s\n", match);
+#endif
+ /* This is a linear search because I tried a binary search and
+ found it to be just a teeny bit slower. */
+ for (k = 0; match[k] && offset+k < word_size+1 ; k++)
+ if (hyphens[offset + k] < match[k])
+ hyphens[offset + k] = match[k];
+ }
+
+ /* KBH: we need this to make sure we keep looking in a word
+ for patterns even if the current character is not known in state 0
+ since patterns for hyphenation may occur anywhere in the word*/
+ try_next_letter: ;
+
+ }
+#ifdef VERBOSE
+ for (i = 0; i < j; i++)
+ putchar (hyphens[i]);
+ putchar ('\n');
+#endif
+
+ for (i = 0; i < j - 4; i++)
+#if 0
+ if (hyphens[i + 1] & 1)
+ hyphens[i] = '-';
+#else
+ hyphens[i] = hyphens[i + 1];
+#endif
+ hyphens[0] = '0';
+ for (; i < word_size; i++)
+ hyphens[i] = '0';
+ hyphens[word_size] = '\0';
+
+ if (prep_word != prep_word_buf)
+ hnj_free (prep_word);
+ return 0;
+}
diff --git a/lib/kotext/kohyphen/hyphen.h b/lib/kotext/kohyphen/hyphen.h
new file mode 100644
index 00000000..ae78fe8f
--- /dev/null
+++ b/lib/kotext/kohyphen/hyphen.h
@@ -0,0 +1,77 @@
+/* LibHnj is dual licensed under LGPL and MPL. Boilerplate for both
+ * licenses follows.
+ */
+
+/* LibHnj - a library for high quality hyphenation and justification
+ * Copyright (C) 1998 Raph Levien, (C) 2001 ALTLinux, Moscow
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+/*
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.0 (the "MPL"); you may not use this file except in
+ * compliance with the MPL. You may obtain a copy of the MPL at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the MPL is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the MPL
+ * for the specific language governing rights and limitations under the
+ * MPL.
+ *
+ */
+#ifndef __HYPHEN_H__
+#define __HYPHEN_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef struct _HyphenDict HyphenDict;
+typedef struct _HyphenState HyphenState;
+typedef struct _HyphenTrans HyphenTrans;
+#define MAX_CHARS 256
+#define MAX_NAME 20
+
+struct _HyphenDict {
+ int num_states;
+ char cset[MAX_NAME];
+ HyphenState *states;
+};
+
+struct _HyphenState {
+ char *match;
+ int fallback_state;
+ int num_trans;
+ HyphenTrans *trans;
+};
+
+struct _HyphenTrans {
+ char ch;
+ int new_state;
+};
+
+HyphenDict *hnj_hyphen_load (const char *fn);
+void hnj_hyphen_free (HyphenDict *dict);
+int hnj_hyphen_hyphenate (HyphenDict *dict,
+ const char *word, int word_size,
+ char *hyphens);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __HYPHEN_H__ */
diff --git a/lib/kotext/kohyphen/kohyphen.cpp b/lib/kotext/kohyphen/kohyphen.cpp
new file mode 100644
index 00000000..584fa247
--- /dev/null
+++ b/lib/kotext/kohyphen/kohyphen.cpp
@@ -0,0 +1,231 @@
+/******************************************************************************
+ * Copyright (C) 2002 by Alexander Dymo <cloudtemple@mskat.net> *
+ * Copyright (C) 2002-2003 by Lukas Tinkl <lukas@kde.org> *
+ * Copyright (C) 2003 David Faure <faure@kde.org> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Library General Public License as *
+ * published by the Free Software Foundation; either version 2 of the *
+ * License, or (at your option) any later version. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Library General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Library General Public License *
+ * along with this library; see the file COPYING.LIB. If not, write to *
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA. *
+ ******************************************************************************/
+
+#include <qdom.h>
+#include <qfile.h>
+#include <qtextcodec.h>
+#include <qstring.h>
+
+#include <klocale.h>
+#include <kapplication.h>
+#include <kstandarddirs.h>
+#include <kstaticdeleter.h>
+
+#include "kohyphen.h"
+#include <kdebug.h>
+
+
+//#define DEBUG_HYPHENATOR 1
+
+KoHyphenator* KoHyphenator::s_self;
+static KStaticDeleter<KoHyphenator> kohyphensd;
+
+KoHyphenator* KoHyphenator::self()
+{
+ if ( !s_self )
+ kohyphensd.setObject( s_self, new KoHyphenator );
+ return s_self;
+}
+
+KoHyphenator::KoHyphenator()
+{
+/* Reading config for dictionary encodings from file...*/
+
+ QString path = kapp->dirs()->findResource("data", "koffice/hyphdicts/dicts.xml");
+#ifdef DEBUG_HYPHENATOR
+ kdDebug() << path << endl;
+#endif
+
+ QFile *f;
+ if (!path.isNull())
+ f = new QFile(path);
+ else
+ throw KoHyphenatorException( "Could not create KoHyphenator instance." );
+
+ QDomDocument config;
+ QDomNodeList records;
+ config.setContent(f);
+
+ for (QDomNode n = config.firstChild(); !n.isNull(); n = n.nextSibling())
+ if (n.nodeName() == "dicts")
+ {
+ records = n.childNodes();
+ for (uint i = 0; i < records.count(); i++)
+ {
+ QDomNamedNodeMap attr = records.item(i).attributes();
+ if (attr.contains("lang") && attr.contains("encoding")) {
+ QString lang = attr.namedItem("lang").nodeValue();
+ QString encoding = attr.namedItem("encoding").nodeValue();
+#ifdef DEBUG_HYPHENATOR
+ kdDebug() << "KoHyphenator: found lang=" << lang << " encoding=" << encoding << endl;
+#endif
+ encodings.insert( lang,
+ EncodingStruct( encoding.latin1() ) );
+ }
+ }
+ }
+
+ delete f;
+}
+
+KoHyphenator::~KoHyphenator()
+{
+ for (QMap<QString, HyphenDict*>::iterator it = dicts.begin(); it != dicts.end(); ++it)
+ {
+ if ((*it) != 0)
+ hnj_hyphen_free((*it));
+ }
+}
+
+char *KoHyphenator::hyphens(const QString& str, const QString& lang) const
+{
+ char *x = new char[str.length()+1];
+ try
+ {
+ QTextCodec *codec = codecForLang(lang);
+ hnj_hyphen_hyphenate(dict(lang), (const char *)(codec->fromUnicode(str)), str.length(), x);
+ }
+ catch (KoHyphenatorException &e)
+ {
+#ifdef DEBUG_HYPHENATOR
+ kdDebug() << e.message().latin1() << endl;
+#endif
+ for (uint j = 0; j < str.length(); j++)
+ x[j] = '0';
+ x[str.length()] = '\0';
+ }
+ return x;
+}
+
+QString KoHyphenator::hyphenate(const QString& str, const QString& lang) const
+{
+ char* x = new char[str.length()+1];
+ QString res = str;
+ try
+ {
+ QTextCodec *codec = codecForLang(lang);
+ hnj_hyphen_hyphenate(dict(lang), (const char *)(codec->fromUnicode(str)), str.length(), x);
+ }
+ catch (KoHyphenatorException &e)
+ {
+#ifdef DEBUG_HYPHENATOR
+ kdDebug() << e.message() << endl;
+#endif
+ delete[] x;
+ return str;
+ }
+ int i = 0, j = 0;
+ int len = strlen(x);
+ for (; i < len; i++)
+ {
+#ifdef DEBUG_HYPHENATOR
+ kdDebug() << "loop: i=" << i << ", j=" << j << ", x=" << x << ", res=" << res << endl;
+#endif
+ if ((x[i] % 2) != 0)
+ {
+ res.insert(j+1, QChar(0xad));
+ j++;
+ }
+ j++;
+ }
+ delete[] x;
+ return res;
+}
+
+bool KoHyphenator::checkHyphenPos(const QString& str, int pos, const QString& lang) const
+{
+#ifdef DEBUG_HYPHENATOR
+ kdDebug() << "string: " << str << endl;
+#endif
+
+ char *hyph = hyphens(str, lang);
+
+#ifdef DEBUG_HYPHENATOR
+ kdDebug() << "result: " << hyph << endl;
+ kdDebug() << "checked position: " << pos << endl;
+#endif
+ bool ret = ((hyph[pos] % 2) != 0);
+ delete[] hyph;
+ return ret;
+}
+
+HyphenDict *KoHyphenator::dict(const QString &_lang) const
+{
+ QString lang( _lang );
+ //only load dictionary when encoding info is present
+ if (encodings.find(lang) == encodings.end())
+ {
+ int underscore = lang.find('_');
+ if ( underscore > -1 ) {
+ lang.truncate( underscore );
+ if (encodings.find(lang) == encodings.end())
+ throw KoHyphenatorException( QString("No dictionary for %1").arg(lang) );
+ }
+ else
+ throw KoHyphenatorException( QString("No dictionary for %1").arg(lang) );
+ }
+ if (dicts.find(lang) == dicts.end())
+ {
+#ifdef DEBUG_HYPHENATOR
+ kdDebug() << "Searching dictionary for '" << lang << "' language..." << endl;
+#endif
+ QString path = kapp->dirs()->findResource("data", "koffice/hyphdicts/hyph_" + lang + ".dic");
+ if (!path.isNull())
+ {
+#ifdef DEBUG_HYPHENATOR
+ kdDebug() << "Loading dictionary for '" << lang << "' language: path = " << path << endl;
+#endif
+ const_cast<KoHyphenator*>(this)->dicts.insert( lang, hnj_hyphen_load(QFile::encodeName(path)) );
+ if (dicts.find(lang) == dicts.end())
+ {
+#ifdef DEBUG_HYPHENATOR
+ kdDebug() << "No dictionary loaded" << endl;
+#endif
+ throw(KoHyphenatorException( QString("Could not load dictionary for the language: %1").arg(lang) ));
+ }
+ }
+ else
+ throw(KoHyphenatorException( QString("Could not load dictionary for the language: %1").arg(lang) ));
+ }
+ return dicts[lang];
+}
+
+QTextCodec* KoHyphenator::codecForLang(const QString& lang) const
+{
+ EncodingMap::Iterator it = encodings.find(lang);
+ if (it == encodings.end())
+ {
+ int underscore = lang.find('_');
+ if ( underscore > -1 ) {
+ QString _lang( lang );
+ _lang.truncate( underscore );
+ it = encodings.find(_lang);
+ }
+ }
+ if (it != encodings.end())
+ {
+ if ( (*it).codec )
+ return (*it).codec;
+ (*it).codec = QTextCodec::codecForName((*it).encoding);
+ return (*it).codec;
+ }
+ return QTextCodec::codecForMib(106); // utf-8
+}
diff --git a/lib/kotext/kohyphen/kohyphen.h b/lib/kotext/kohyphen/kohyphen.h
new file mode 100644
index 00000000..b36f80c3
--- /dev/null
+++ b/lib/kotext/kohyphen/kohyphen.h
@@ -0,0 +1,129 @@
+/******************************************************************************
+ * Copyright (C) 2002 by Alexander Dymo <cloudtemple@mskat.net> *
+ * Copyright (C) 2002-2003 by Lukas Tinkl <lukas.tinkl@suse.cz> *
+ * Copyright (C) 2003 David Faure <faure@kde.org> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Library General Public License as *
+ * published by the Free Software Foundation; either version 2 of the *
+ * License, or (at your option) any later version. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Library General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Library General Public License *
+ * along with this library; see the file COPYING.LIB. If not, write to *
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA. *
+ ******************************************************************************/
+
+#ifndef KOHYPHEN_H
+#define KOHYPHEN_H
+
+#include <qmap.h>
+#include <qstring.h>
+#include "hyphen.h"
+
+class KoHyphenatorException{
+public:
+ KoHyphenatorException(const QString& MessageText): messageText(MessageText) {}
+ QString message() const { return messageText; }
+private:
+ QString messageText;
+};
+
+/**
+ * @short The KoHyphenator class provides an interface to the libhnj hyphenation library
+ * @author Alexander Dymo (cloudtemple@mksat.net)
+ * @author Lukas Tinkl (lukas.tinkl@suse.cz)
+ *
+ * The KoHyphenator class provides an interface to the libhnj hyphenation library.
+ *
+ * Libhnj library was written for TeX and adopted to use with OpenOffice.
+ * This library tries to adopt it for KDE.
+ *
+ * It handles the hyphenation dictionary loading for the specified language.
+ * QString -> char* conversion is done by using of settings in
+ * dicts.xml file in datadir/koffice/hyphdicts (dictionaries are also located
+ * there).
+ *
+ * The @ref hyphenate() functions returns QString containing hyphenation
+ * chars (0xad) or char* in format of hnj_hyphen_hyphenate() function from
+ * libhnj library.
+ */
+class KoHyphenator{
+public:
+ /**
+ * Returns the single KoHyphenator instance (singleton pattern)
+ * Beware that this might throw an exception in case of an installation problem!
+ * Catch KoHyphenatorExceptions!
+ */
+ static KoHyphenator* self();
+
+ ~KoHyphenator();
+
+ /**
+ * Checks if the letter in position pos is placed before the hyphen.
+ *
+ * Can be used to check if the line break at given position
+ * should be forced and automatic hyphen added.
+ */
+ bool checkHyphenPos(const QString& str, int pos, const QString& lang) const;
+
+ /**
+ * Returns the pointer to the string in hnj_hyphen_hyphenate() format
+ * (that is hyphenation function from underlying libhnj library).
+ *
+ * The string is array of integer numbers. Each odd number marks
+ * that hyphen can be added after the character in the position
+ * of that number. The returned string must be deleted with "delete[] x;"
+ *
+ * For example, for the string "example" the returning value is "01224400".
+ *
+ * @param str String to be hyphenated.
+ *
+ * @param lang Language for the hyphenation dictionary to be loaded.
+ * Language: two chars containing the ISO 639-1 code
+ * (for example "en", "uk", etc.) (could be lang_COUNTRY as well).
+ */
+ char *hyphens(const QString& str, const QString& lang) const;
+
+ /**
+ * Hyphenates the string str and returns the string with
+ * hyphenation marks in it.
+ *
+ * @param str String to be hyphenated.
+ *
+ * @param lang Language for the hyphenation dictionary to be loaded.
+ * Language: two chars containing the ISO 639-1 code
+ * (for example "en", "uk", etc.) (could be lang_COUNTRY as well).
+ */
+ QString hyphenate(const QString& str, const QString& lang) const;
+
+private:
+ /**
+ * @return the encoding of dictionary for the language @p lang.
+ */
+ QTextCodec* codecForLang(const QString& lang) const;
+
+ KoHyphenator();
+ HyphenDict *dict(const QString &lang) const;
+
+ QMap<QString, HyphenDict*> dicts;
+ struct EncodingStruct {
+ EncodingStruct() // for QMap
+ : encoding(), codec(0L) {}
+ EncodingStruct(const QCString& _encoding)
+ : encoding(_encoding), codec(0L) {}
+ QCString encoding;
+ QTextCodec* codec;
+ };
+ typedef QMap<QString, EncodingStruct> EncodingMap;
+ mutable EncodingMap encodings; // key is the language code
+
+ static KoHyphenator* s_self;
+};
+
+#endif
diff --git a/lib/kotext/kohyphen/kohyphentest.cpp b/lib/kotext/kohyphen/kohyphentest.cpp
new file mode 100644
index 00000000..d19526ce
--- /dev/null
+++ b/lib/kotext/kohyphen/kohyphentest.cpp
@@ -0,0 +1,73 @@
+//KoHyphenator test, Lukas Tinkl <lukas.tinkl@suse.cz>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <qstringlist.h>
+
+#include <kapplication.h>
+
+#include "kohyphen.h"
+#include <kdebug.h>
+
+static bool check(QString a, QString b)
+{
+ if (a.isEmpty())
+ a = QString::null;
+ if (b.isEmpty())
+ b = QString::null;
+ if (a == b) {
+ kdDebug() << "checking '" << a << "' against expected value '" << b << "'... " << "ok" << endl;
+ }
+ else {
+ kdDebug() << "checking '" << a << "' against expected value '" << b << "'... " << "KO !" << endl;
+ exit(1);
+ }
+ return true;
+}
+
+KoHyphenator * hypher = 0L;
+
+void check_hyphenation( const QStringList& tests, const QStringList& results, const char* lang )
+{
+ QStringList::ConstIterator it, itres;
+ for ( it = tests.begin(), itres = results.begin(); it != tests.end() ; ++it, ++itres ) {
+ QString result = hypher->hyphenate((*it), lang);
+ kdDebug() << (*it) << " hyphenates like this: " << result << endl;
+ check( result.replace(QChar(0xad),'-'), *itres );
+ }
+}
+
+int main (int argc, char ** argv)
+{
+ KApplication app(argc, argv, "KoHyphenator test");
+
+ try {
+ hypher = KoHyphenator::self();
+ }
+ catch (KoHyphenatorException &e)
+ {
+ kdDebug() << e.message() << endl;
+ return 1;
+ }
+
+ QStringList::ConstIterator it, itres;
+
+ //testing Czech language, this text is in UTF-8!
+ QStringList cs_tests = QStringList() << "Žluťoučký" << "kůň" << "úpěl" <<
+ "ďábelské" << "ódy";
+
+ for ( it = cs_tests.begin(); it != cs_tests.end() ; ++it )
+ kdDebug() << (*it) << " hyphenates like this: " << hypher->hyphenate((*it), "cs") << endl;
+
+ //testing English
+ QStringList en_tests = QStringList() << "Follow" << "white" << "rabbit";
+ QStringList en_results = QStringList() << "Fol-low" << "white" << "rab-bit";
+ check_hyphenation( en_tests, en_results, "en" );
+
+ QStringList fr_tests = QStringList() << "constitution" ;
+ QStringList fr_results = QStringList() << "consti-tu-tion" ;
+ check_hyphenation( fr_tests, fr_results, "fr" );
+
+ return 0;
+}
diff --git a/lib/kotext/kolanguagetabbase.ui b/lib/kotext/kolanguagetabbase.ui
new file mode 100644
index 00000000..f5f79904
--- /dev/null
+++ b/lib/kotext/kolanguagetabbase.ui
@@ -0,0 +1,76 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KoLanguageTabBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>koLanguageTabBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>282</width>
+ <height>257</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>languageGroupBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Language</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>languageLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Language:</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>languageKComboBox</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>171</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kcombobox.h</includehint>
+</includehints>
+</UI>
diff --git a/lib/kotext/kolayouttabbase.ui b/lib/kotext/kolayouttabbase.ui
new file mode 100644
index 00000000..d40cd006
--- /dev/null
+++ b/lib/kotext/kolayouttabbase.ui
@@ -0,0 +1,295 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KoLayoutTabBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>koLayoutTabBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>356</width>
+ <height>206</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>positionButtonGroup</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Position</string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>normalPosRadioButton</cstring>
+ </property>
+ <property name="text">
+ <string>Normal</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>Superscript</cstring>
+ </property>
+ <property name="text">
+ <string>Superscript</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>subscriptRadioButton</cstring>
+ </property>
+ <property name="text">
+ <string>Subscript</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KDoubleSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>relativeSizeKDoubleSpinBox</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="suffix">
+ <string> %</string>
+ </property>
+ <property name="maxValue">
+ <number>100</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="value">
+ <number>66</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>customRadioButton</cstring>
+ </property>
+ <property name="text">
+ <string>Custom</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>3</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>offsetLabel</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Offset:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>relativeSizeLabel</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Relative size:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>offsetSpinBox</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="suffix">
+ <string> pts</string>
+ </property>
+ <property name="maxValue">
+ <number>9</number>
+ </property>
+ <property name="minValue">
+ <number>-9</number>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>hyphenGroupBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Hyphenation</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>hyphenateCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Auto hyphenation</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>customRadioButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>offsetSpinBox</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>customRadioButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>offsetLabel</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>customRadioButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>relativeSizeLabel</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>customRadioButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>relativeSizeKDoubleSpinBox</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>Superscript</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>relativeSizeLabel</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>Superscript</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>relativeSizeKDoubleSpinBox</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>subscriptRadioButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>relativeSizeLabel</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>subscriptRadioButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>relativeSizeKDoubleSpinBox</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="global" impldecl="in declaration">knuminput.h</include>
+ <include location="global" impldecl="in declaration">klocale.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>knuminput.h</includehint>
+</includehints>
+</UI>
diff --git a/lib/kotext/tests/KoUserStyleTester.cpp b/lib/kotext/tests/KoUserStyleTester.cpp
new file mode 100644
index 00000000..4fff7085
--- /dev/null
+++ b/lib/kotext/tests/KoUserStyleTester.cpp
@@ -0,0 +1,162 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+// KoUserStyle/KoUserStyleCollection test
+
+#include <kunittest/runner.h>
+#include <kunittest/module.h>
+
+#include <KoUserStyleCollection.h>
+#include <KoUserStyle.h>
+#include <kdebug.h>
+#include <kglobal.h>
+
+#include "KoUserStyleTester.h"
+#include "KoUserStyleTester.moc"
+
+KUNITTEST_MODULE(kunittest_KoUserStyleTester, "KoUserStyle Tester");
+KUNITTEST_MODULE_REGISTER_TESTER(KoUserStyleTester);
+
+#undef COMPARE
+/// for source-compat with qttestlib: use COMPARE(x,y) if you plan to port to qttestlib later.
+#define COMPARE CHECK
+
+/// for source-compat with qttestlib: use VERIFY(x) if you plan to port to qttestlib later.
+#undef VERIFY
+#define VERIFY( x ) CHECK( x, true )
+
+void KoUserStyleTester::testEmptyCollection()
+{
+ KoUserStyleCollection coll( "test" );
+ VERIFY( coll.isEmpty() );
+ COMPARE( coll.count(), 0 );
+ VERIFY( coll.styleList().isEmpty() );
+}
+
+void KoUserStyleTester::testAddStyle()
+{
+ KoUserStyleCollection coll( "test" );
+
+ KoUserStyle* style = new KoUserStyle( "test1" );
+ COMPARE( style->name(), QString( "test1" ) );
+ COMPARE( style->displayName(), QString( "test1" ) );
+ const QString displayName = "A lovely name";
+ style->setDisplayName( displayName );
+ COMPARE( style->displayName(), displayName );
+
+ KoUserStyle* ret = coll.addStyle( style );
+ COMPARE( ret, style );
+
+ KoUserStyle* style2 = new KoUserStyle( "test1" );
+ COMPARE( style2->name(), QString( "test1" ) );
+ style2->setDisplayName( displayName );
+ ret = coll.addStyle( style2 );
+ // here style2 got deleted.
+ COMPARE( ret, style );
+
+ VERIFY( !coll.isEmpty() );
+ COMPARE( coll.count(), 1 );
+ COMPARE( (int)coll.styleList().count(), 1 );
+
+ // Add another style for good this time
+ KoUserStyle* style3 = new KoUserStyle( "test3" );
+ COMPARE( style3->name(), QString( "test3" ) );
+ ret = coll.addStyle( style3 );
+
+ QStringList displayNames = coll.displayNameList();
+ COMPARE( (int)displayNames.count(), 2 );
+ COMPARE( displayNames[0], displayName );
+ COMPARE( displayNames[1], style3->name() );
+}
+
+void KoUserStyleTester::testFindStyle()
+{
+ KoUserStyleCollection coll( "test" );
+ KoUserStyle* style = new KoUserStyle( "test1" );
+ const QString displayName = "A lovely name";
+ style->setDisplayName( displayName );
+ coll.addStyle( style );
+
+ // --- findStyle tests ---
+ KoUserStyle* ret = coll.findStyle( "test1", QString::null );
+ COMPARE( ret, style );
+
+ ret = coll.findStyle( "foo", QString::null );
+ COMPARE( ret, (KoUserStyle*)0 );
+
+ ret = coll.findStyle( "foo", "test1" ); // fallback not used for style 'foo'
+ COMPARE( ret, (KoUserStyle*)0 );
+
+ ret = coll.findStyle( "test1", "test1" ); // fallback used for standard style test1
+ COMPARE( ret, style );
+
+ // --- findStyleByDisplayName tests ---
+ ret = coll.findStyleByDisplayName( displayName );
+ COMPARE( ret, style );
+
+ ret = coll.findStyleByDisplayName( "foo" );
+ COMPARE( ret, (KoUserStyle*)0 );
+
+ // --- indexOf tests ---
+ int pos = coll.indexOf( style );
+ COMPARE( pos, 0 );
+
+ KoUserStyle* style2 = new KoUserStyle( "test1" );
+ pos = coll.indexOf( style2 );
+ COMPARE( pos, -1 );
+ delete style2;
+}
+
+void KoUserStyleTester::testRemoveStyle()
+{
+ KoUserStyleCollection coll( "test" );
+ KoUserStyle* style = new KoUserStyle( "test1" );
+ coll.addStyle( style );
+ COMPARE( coll.count(), 1 );
+
+ // Try removing an unrelated style (noop)
+ KoUserStyle* style2 = new KoUserStyle( "test1" );
+ coll.removeStyle( style2 );
+ delete style2;
+ COMPARE( coll.count(), 1 );
+
+ coll.removeStyle( style );
+ COMPARE( coll.count(), 0 );
+}
+
+void KoUserStyleTester::testReorder()
+{
+ KoUserStyleCollection coll( "test" );
+ KoUserStyle* style = new KoUserStyle( "test1" );
+ coll.addStyle( style );
+ style = new KoUserStyle( "test2" );
+ coll.addStyle( style );
+ style = new KoUserStyle( "test3" );
+ coll.addStyle( style );
+ COMPARE( coll.count(), 3 );
+
+ QStringList newOrder;
+ newOrder << "test3";
+ newOrder << "test2";
+ newOrder << "test1";
+ coll.updateStyleListOrder( newOrder );
+ COMPARE( coll.count(), 3 );
+ QStringList displayNames = coll.displayNameList();
+ COMPARE( (int)displayNames.count(), 3 );
+ COMPARE( displayNames.join(","), newOrder.join(",") );
+}
diff --git a/lib/kotext/tests/KoUserStyleTester.h b/lib/kotext/tests/KoUserStyleTester.h
new file mode 100644
index 00000000..79e61c6a
--- /dev/null
+++ b/lib/kotext/tests/KoUserStyleTester.h
@@ -0,0 +1,34 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KOUSERSTYLETESTER_H
+#define KOUSERSTYLETESTER_H
+
+#include <kunittest/tester.h>
+
+class KoUserStyleTester : public KUnitTest::SlotTester {
+ Q_OBJECT
+private slots:
+ void testEmptyCollection();
+ void testAddStyle();
+ void testFindStyle();
+ void testRemoveStyle();
+ void testReorder();
+};
+
+#endif
diff --git a/lib/kotext/tests/Makefile.am b/lib/kotext/tests/Makefile.am
new file mode 100644
index 00000000..a505dce1
--- /dev/null
+++ b/lib/kotext/tests/Makefile.am
@@ -0,0 +1,24 @@
+INCLUDES = $(KOFFICECORE_INCLUDES) $(KOFFICEUI_INCLUDES) $(KOTEXT_INCLUDES) $(all_includes)
+KDE_CXXFLAGS = $(USE_EXCEPTIONS)
+
+METASOURCES = AUTO
+
+check_PROGRAMS = kotextformattertest kobordertest kovariabletest
+
+TESTS = kotextformattertest kovariabletest
+
+LDADD = ../libkotext.la
+AM_LDFLAGS = $(KDE_RPATH) $(all_libraries)
+
+kobordertest_SOURCES = kobordertest.cpp
+kotextformattertest_SOURCES = kotextformattertest.cpp
+kovariabletest_SOURCES = kovariabletest.cpp
+
+check_LTLIBRARIES = kunittest_KoUserStyleTester.la
+
+kunittest_KoUserStyleTester_la_SOURCES = KoUserStyleTester.cpp
+kunittest_KoUserStyleTester_la_LIBADD = ../libkotext.la -lkunittest
+kunittest_KoUserStyleTester_la_LDFLAGS = -module $(KDE_CHECK_PLUGIN) $(all_libraries)
+
+check-local:
+ kunittestmodrunner
diff --git a/lib/kotext/tests/kobordertest.cpp b/lib/kotext/tests/kobordertest.cpp
new file mode 100644
index 00000000..cce43179
--- /dev/null
+++ b/lib/kotext/tests/kobordertest.cpp
@@ -0,0 +1,113 @@
+#include <KoBorder.h>
+#include <KoZoomHandler.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <qpainter.h>
+#include <qwidget.h>
+#include <qgrid.h>
+
+class MyWidget : public QWidget
+{
+public:
+ MyWidget( KoZoomHandler* _zh, QWidget* parent )
+ : QWidget( parent ), m_zh(_zh) {
+ setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
+ }
+
+ QSize sizeHint() const {
+ return QSize( 150, 150 );
+ }
+ QSize minimumSizeHint() const {
+ return sizeHint();
+ }
+
+ KoBorder m_leftBorder;
+ KoBorder m_rightBorder;
+ KoBorder m_topBorder;
+ KoBorder m_bottomBorder;
+
+protected:
+ virtual void paintEvent( QPaintEvent* )
+ {
+ QPainter p( this );
+ QRect rect( 10, 10, 100, 100 );
+ KoBorder::drawBorders( p, m_zh, rect, m_leftBorder,
+ m_rightBorder, m_topBorder, m_bottomBorder,
+ 0, QPen() );
+ // Show the corners of the rect - they must apppear _inside_ the borders.
+ p.setPen( black );
+ p.drawPoint( rect.topLeft() );
+ p.drawPoint( rect.topRight() );
+ p.drawPoint( rect.bottomRight() );
+ p.drawPoint( rect.bottomLeft() );
+ }
+private:
+ KoZoomHandler* m_zh;
+};
+
+int main (int argc, char ** argv)
+{
+ KApplication::disableAutoDcopRegistration();
+ KCmdLineArgs::init(argc,argv,"kobordertest", 0, 0, 0, 0);
+ KApplication app;
+
+ KoZoomHandler* zh = new KoZoomHandler();
+
+ QGrid* grid = new QGrid(2, Qt::Horizontal, 0L); // 2 columns
+ {
+ // First square
+ MyWidget* w = new MyWidget(zh, grid);
+ w->m_leftBorder.setPenWidth( 6 );
+ w->m_leftBorder.color = Qt::red;
+ w->m_rightBorder.setPenWidth( 9 );
+ w->m_rightBorder.color = Qt::red;
+ w->m_topBorder.setPenWidth( 11 );
+ w->m_topBorder.color = Qt::blue;
+ w->m_bottomBorder.setPenWidth( 13 );
+ w->m_bottomBorder.color = Qt::green;
+ }
+ {
+ // Second square, with opposite (odd/even-wise) widths
+ MyWidget* w = new MyWidget(zh, grid);
+ w->m_leftBorder.setPenWidth( 7 );
+ w->m_leftBorder.color = Qt::red;
+ w->m_rightBorder.setPenWidth( 8 );
+ w->m_rightBorder.color = Qt::red;
+ w->m_topBorder.setPenWidth( 10 );
+ w->m_topBorder.color = Qt::blue;
+ w->m_bottomBorder.setPenWidth( 12 );
+ w->m_bottomBorder.color = Qt::green;
+ }
+ {
+ // Third square, with double borders
+ MyWidget* w2 = new MyWidget(zh, grid);
+ w2->m_leftBorder.setPenWidth( 2 );
+ w2->m_leftBorder.setStyle( KoBorder::DOUBLE_LINE );
+ w2->m_rightBorder.setPenWidth( 6 );
+ w2->m_rightBorder.color = Qt::red;
+ w2->m_rightBorder.setStyle( KoBorder::DOUBLE_LINE );
+ w2->m_topBorder.setPenWidth( 4 );
+ w2->m_topBorder.color = Qt::blue;
+ w2->m_topBorder.setStyle( KoBorder::DOUBLE_LINE );
+ w2->m_bottomBorder.setPenWidth( 6 );
+ w2->m_bottomBorder.color = Qt::green;
+ w2->m_bottomBorder.setStyle( KoBorder::DOUBLE_LINE );
+ }
+ {
+ // Fourth square, with double borders
+ MyWidget* w2 = new MyWidget(zh, grid);
+ w2->m_leftBorder.setPenWidth( 1 );
+ w2->m_leftBorder.setStyle( KoBorder::DOUBLE_LINE );
+ w2->m_rightBorder.setPenWidth( 5 );
+ w2->m_rightBorder.color = Qt::red;
+ w2->m_rightBorder.setStyle( KoBorder::DOUBLE_LINE );
+ w2->m_topBorder.setPenWidth( 3 );
+ w2->m_topBorder.color = Qt::blue;
+ w2->m_topBorder.setStyle( KoBorder::DOUBLE_LINE );
+ w2->m_bottomBorder.setPenWidth( 5 );
+ w2->m_bottomBorder.color = Qt::green;
+ w2->m_bottomBorder.setStyle( KoBorder::DOUBLE_LINE );
+ }
+ grid->show();
+ return app.exec();
+}
diff --git a/lib/kotext/tests/kotextformattertest.cpp b/lib/kotext/tests/kotextformattertest.cpp
new file mode 100644
index 00000000..0a4ab140
--- /dev/null
+++ b/lib/kotext/tests/kotextformattertest.cpp
@@ -0,0 +1,220 @@
+//KoTextFormatter test (also for profiling purposes), GPL v2, David Faure <faure@kde.org>
+
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kglobal.h>
+#include <klocale.h>
+
+#include "KoTextFormatter.h"
+#include "KoTextFormat.h"
+#include "KoTextDocument.h"
+#include "KoTextParag.h"
+#include "KoTextZoomHandler.h"
+#include "KoParagCounter.h"
+
+#include <assert.h>
+
+class KoTextFormatterTest
+{
+public:
+ KoTextFormatterTest();
+ ~KoTextFormatterTest() {
+ delete zh;
+ delete doc;
+ }
+
+ void speedTest();
+ void counterAndBigChar();
+ void oneLineTest();
+ void noHeightTest();
+ void noWidthEverTest();
+ void tooWideChar();
+
+private:
+ KoTextZoomHandler* zh;
+ KoTextDocument* doc;
+};
+
+// To test various cases with variable document widths: a custom KoTextFlow
+class TextFlow : public KoTextFlow
+{
+public:
+ TextFlow( int availableWidth, int availableHeight )
+ : m_availableWidth( availableWidth ), m_availableHeight( availableHeight ),
+ m_leftMargin( 0 )
+ {
+ setWidth( m_availableWidth );
+ }
+ virtual int availableHeight() const {
+ return m_availableHeight;
+ }
+ void setLeftMargin( int lm ) {
+ m_leftMargin = lm;
+ }
+ virtual void adjustMargins( int yp, int h, int reqMinWidth, int& leftMargin, int& rightMargin, int& pageWidth, KoTextParag* ) {
+ Q_UNUSED(yp);
+ Q_UNUSED(h);
+ Q_UNUSED(reqMinWidth);
+ Q_UNUSED(rightMargin);
+ if ( m_leftMargin ) {
+ leftMargin = m_leftMargin;
+ pageWidth = m_availableWidth - m_leftMargin;
+ kdDebug() << "adjustMargins: returning leftMargin=" << leftMargin << " pageWidth=" << pageWidth << endl;
+ } else
+ pageWidth = m_availableWidth;
+ }
+private:
+ int m_availableWidth;
+ int m_availableHeight;
+ int m_leftMargin;
+};
+
+KoTextFormatterTest::KoTextFormatterTest()
+{
+ zh = new KoTextZoomHandler;
+ QFont defaultFont( "helvetica", 12 );
+ KoTextFormatCollection* fc = new KoTextFormatCollection( defaultFont, Qt::black, "en_US", false /*no hyphenation*/ );
+ KoTextFormatter* formatter = new KoTextFormatter;
+ // fc and formatter are owned by the doc
+ doc = new KoTextDocument( zh, fc, formatter );
+}
+
+void KoTextFormatterTest::speedTest()
+{
+ kdDebug() << k_funcinfo << endl;
+ doc->clear(true);
+ KoTextParag* parag = doc->firstParag();
+ parag->append( "They burst into flames when it is time for them to die, and then they are reborn from the ashes" );
+
+ // Format it 50 times
+ for ( uint i = 0 ; i < 50 ; ++i )
+ {
+ parag->invalidate(0);
+ parag->format();
+ }
+ doc->clear(false);
+}
+
+void KoTextFormatterTest::noHeightTest()
+{
+ kdDebug() << k_funcinfo << endl;
+ // We test the case of going past maxY - by setting the available height to 0
+ // Expected result: the formatter 'aborts', i.e. no line-breaking, but still
+ // goes over each character to set them all correctly; and usually KWord
+ // would create a new page and reformat the paragraph
+ doc->setFlow( new TextFlow( 250, 0 ) ); // 250 is just enough for one char
+ doc->clear(true);
+ KoTextParag* parag = doc->firstParag();
+ parag->append( "abcdefghi" );
+ parag->format();
+ assert( parag->lines() == 2 ); // one break, then we keep going
+ doc->clear(false);
+ doc->setFlow( new KoTextFlow ); // default
+}
+
+void KoTextFormatterTest::noWidthEverTest()
+{
+ kdDebug() << k_funcinfo << endl;
+ // We test the case of formatting where there is no width (e.g. narrow
+ // passage, or after last page).
+ // Expected result: the formatter goes down until it finds more width
+ // (TODO a test case where this happens)
+ // If it doesn't find any (and hits maxY), then it 'aborts', i.e. no line-breaking,
+ // but still goes over each character to set them all correctly; and usually KWord
+ // would create a new page and reformat the paragraph
+ TextFlow* flow = new TextFlow( 1000, 2000 );
+ flow->setLeftMargin( 1000 );
+ doc->setFlow( flow );
+
+ doc->clear(true);
+ KoTextParag* parag = doc->firstParag();
+ parag->append( "abcdefghi" );
+ parag->format();
+ // The resulting paragraph is NOT marked as formatted. See kotextformatter.cc -r1.79
+ assert( !parag->isValid() );
+ doc->clear(false);
+ doc->setFlow( new KoTextFlow ); // default
+}
+
+void KoTextFormatterTest::tooWideChar()
+{
+ kdDebug() << k_funcinfo << endl;
+ // We test the case of formatting where there is not enough width
+ // for the character (e.g. a very large inline table, larger than the document).
+ // Expected result: the formatter goes down until it finds more width,
+ // gives up, and come back up.
+ doc->setFlow( new TextFlow( 10, 2000 ) );
+ doc->clear(true);
+ KoTextParag* parag = doc->firstParag();
+ parag->append( "a" );
+ parag->format();
+ assert( parag->isValid() );
+ assert( parag->lines() == 1 );
+
+ doc->clear(false);
+ doc->setFlow( new KoTextFlow ); // default
+}
+
+void KoTextFormatterTest::oneLineTest()
+{
+ kdDebug() << k_funcinfo << endl;
+ // Normal case, only one line
+ // Expected: the parag is as wide as the doc
+ doc->setFlow( new TextFlow( 2000, 200 ) );
+ doc->clear(true);
+ KoTextParag* parag = doc->firstParag();
+ parag->append( "abcdefghi" );
+ parag->format();
+ assert( parag->lines() == 1 );
+ assert( parag->isValid() );
+ assert( parag->rect().width() == 2000 );
+ assert( parag->widthUsed() < 2000 );
+ doc->clear(false);
+ doc->setFlow( new KoTextFlow ); // default
+}
+
+void KoTextFormatterTest::counterAndBigChar()
+{
+ kdDebug() << k_funcinfo << endl;
+ // Only one line, with a counter and a big char.
+ // Bug #82609: the new height led to "formatting again" which restarted without taking the counter into account
+ // Expected: the char starts after the counter
+ doc->setFlow( new TextFlow( 2000, 200 ) );
+ doc->clear(true);
+ KoTextParag* parag = doc->firstParag();
+ parag->append( "aB" );
+ KoTextFormat f( *parag->at( 0 )->format() );
+ f.setPointSize( 48 );
+ parag->setFormat( 1, 1, doc->formatCollection()->format( &f ), true );
+ KoParagCounter counter;
+ counter.setNumbering( KoParagCounter::NUM_LIST );
+ counter.setStyle( KoParagCounter::STYLE_NUM );
+ parag->setCounter( &counter );
+ parag->format();
+ assert( parag->lines() == 1 );
+ assert( parag->isValid() );
+ assert( parag->rect().width() == 2000 );
+ assert( parag->widthUsed() < 2000 );
+ assert( parag->at(0)->x > 0 );
+ doc->clear(false);
+ doc->setFlow( new KoTextFlow ); // default
+}
+
+int main (int argc, char ** argv)
+{
+ KApplication app(argc, argv, "KoTextFormatter test");
+
+ // Don't let locale settings lead to different hyphenation output
+ KGlobal::locale()->setLanguage( QString::fromLatin1( "en_US" ) );
+ KGlobal::locale()->setCountry( QString::fromLatin1( "C" ) );
+
+ KoTextFormatterTest test;
+ //test.speedTest();
+ test.oneLineTest();
+ test.counterAndBigChar();
+ test.noHeightTest();
+ test.noWidthEverTest();
+ test.tooWideChar();
+
+ return 0;
+}
diff --git a/lib/kotext/tests/kovariabletest.cpp b/lib/kotext/tests/kovariabletest.cpp
new file mode 100644
index 00000000..05b801c6
--- /dev/null
+++ b/lib/kotext/tests/kovariabletest.cpp
@@ -0,0 +1,67 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <qstring.h>
+#include <assert.h>
+
+#include "../IsoDuration.h"
+
+void testMinutes()
+{
+ int minutes = 145;
+ QString str = minutesToISODuration( minutes );
+ int result = ISODurationToMinutes( str );
+ qDebug( "%d minutes -> %s -> %d", minutes, str.latin1(), result );
+ assert( result == minutes );
+}
+
+void testNegativeMinutes()
+{
+ int minutes = -15;
+ QString str = minutesToISODuration( minutes );
+ int result = ISODurationToMinutes( str );
+ qDebug( "%d minutes -> %s -> %d", minutes, str.latin1(), result );
+ assert( result == minutes );
+}
+
+void testDays()
+{
+ int days = 14;
+ QString str = daysToISODuration( days );
+ int result = ISODurationToDays( str );
+ qDebug( "%d days -> %s -> %d", days, str.latin1(), result );
+ assert( result == days );
+}
+
+void testNegativeDays()
+{
+ int days = -14;
+ QString str = daysToISODuration( days );
+ int result = ISODurationToDays( str );
+ qDebug( "%d days -> %s -> %d", days, str.latin1(), result );
+ assert( result == days );
+}
+
+int main ( int argc, char ** argv )
+{
+ testMinutes();
+ testDays();
+ testNegativeMinutes();
+ testNegativeDays();
+ return 0;
+}
diff --git a/lib/kotext/timedateformatwidget.ui b/lib/kotext/timedateformatwidget.ui
new file mode 100644
index 00000000..92881747
--- /dev/null
+++ b/lib/kotext/timedateformatwidget.ui
@@ -0,0 +1,218 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>TimeDateFormatWidgetPrototype</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>TimeDateFormatWidgetPrototype</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>262</width>
+ <height>176</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="baseSize">
+ <size>
+ <width>260</width>
+ <height>130</height>
+ </size>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>combo1</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1</cstring>
+ </property>
+ <property name="text">
+ <string>C&amp;ustom</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Insert:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>combo2</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>50</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>combo2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="currentItem">
+ <number>0</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>label_correction</cstring>
+ </property>
+ <property name="text">
+ <string>TextLabel1:</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>50</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KIntNumInput">
+ <property name="name">
+ <cstring>KIntNumInput1</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>label</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ <property name="indent">
+ <number>5</number>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>combo1</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>TimeDateFormatWidgetPrototype</receiver>
+ <slot>updateLabel()</slot>
+ </connection>
+ <connection>
+ <sender>combo2</sender>
+ <signal>activated(int)</signal>
+ <receiver>TimeDateFormatWidgetPrototype</receiver>
+ <slot>comboActivated()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>combo1</tabstop>
+</tabstops>
+<includes>
+ <include location="local" impldecl="in implementation">timedateformatwidget.ui.h</include>
+</includes>
+<slots>
+ <slot>comboActivated()</slot>
+ <slot>updateLabel()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+</includehints>
+</UI>