From 10099f1c3752721df2febefc2bdb8bb64853c95d Mon Sep 17 00:00:00 2001 From: Dimo Karaivanov Date: Thu, 27 Oct 2022 14:31:57 +0300 Subject: [PATCH] New dictionary loader (#89) * new, simpler (and hopefully, more efficient) dictionary loader * no more dict.properties * dictionaries are now validated during the build process * TraditionalT9Settings code cleanup and code style improvements * removed English, French, Italian, Russian repeating words * removed invalid and repeating German words --- .gitignore | 1 - assets/de-utf8.txt | 975 +----------------- assets/en-utf8.txt | 9 - assets/fr-utf8.txt | 4 - assets/it-utf8.txt | 3 - assets/ru-utf8.txt | 76 +- build.gradle | 41 +- res/values-bg/strings.xml | 8 +- res/values-de/strings.xml | 6 +- res/values-fr/strings.xml | 7 +- res/values-it/strings.xml | 6 +- res/values-ru/strings.xml | 5 +- res/values-uk/strings.xml | 7 +- res/values/strings.xml | 6 +- scripts/remove-dictionary-repeating-words.js | 39 +- .../answer/UnicodeBOMInputStream.java | 315 ------ .../github/sspanak/tt9/db/DictionaryDb.java | 12 +- .../db/DictionaryImportAbortedException.java | 7 + .../tt9/db/DictionaryImportException.java | 14 + .../sspanak/tt9/db/DictionaryLoader.java | 259 +++++ .../InvalidLanguageCharactersException.java | 15 + .../sspanak/tt9/languages/Language.java | 6 +- .../tt9/preferences/T9Preferences.java | 28 +- .../sspanak/tt9/ui/TraditionalT9Settings.java | 540 +++------- 24 files changed, 534 insertions(+), 1855 deletions(-) delete mode 100644 src/com/stackoverflow/answer/UnicodeBOMInputStream.java create mode 100644 src/io/github/sspanak/tt9/db/DictionaryImportAbortedException.java create mode 100644 src/io/github/sspanak/tt9/db/DictionaryImportException.java create mode 100644 src/io/github/sspanak/tt9/db/DictionaryLoader.java create mode 100644 src/io/github/sspanak/tt9/languages/InvalidLanguageCharactersException.java diff --git a/.gitignore b/.gitignore index c36085e5..ad2c9e8a 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,6 @@ local.properties *.log #Other -assets/dict.properties t9build.properties *.keystore diff --git a/assets/de-utf8.txt b/assets/de-utf8.txt index 5f251013..d091faf2 100644 --- a/assets/de-utf8.txt +++ b/assets/de-utf8.txt @@ -287,7 +287,6 @@ abdrückten abebben abebbende Abel -abend Abend Abendanzug Abendbrot @@ -379,7 +378,6 @@ abfahrend abfahrendem abfahrenden abfahrender -abfahrt Abfahrt abfährt Abfahrten @@ -522,7 +520,6 @@ abfragen Abfragetext abfragt abfräsen -abfuhr Abfuhr abfuhren abführen @@ -2131,7 +2128,6 @@ abkommandierte abkommandierten abkommandierter abkommandiertes -abkommen Abkommen abkommend abkommende @@ -2166,7 +2162,6 @@ abkriegen abkriegendem abkriegenden abkriegender -abkühlen Abkühlen abkühlend abkühlende @@ -2629,7 +2624,6 @@ Abriegelung abriet abrieten abringen -abriss Abriss abrollen abrollend @@ -2801,7 +2795,6 @@ abschiebender abschiebendes Abschiebung Abschiebungen -abschied Abschied abschiede Abschieds @@ -2909,7 +2902,6 @@ Abschn abschnallen abschneide abschneiden -abschnitt Abschnitt abschnitte abschnitten @@ -3040,7 +3032,6 @@ abseifende abseifenden abseifender abseifendes -abseilen Abseilen abseitigen abseits @@ -3246,9 +3237,7 @@ abstammendes abstammte abstammten Abstammung -abstand Abstand -abstände Abstände Abständen Abstandes @@ -3332,7 +3321,6 @@ absterbendem absterbenden absterbender absticht -abstieg Abstieg abstiege abstiegen @@ -3414,7 +3402,6 @@ abstreitende abstreitendem abstreitenden abstreitendes -abstrich Abstrich Abstriche abstrichen @@ -3483,7 +3470,6 @@ Abtastraten Abtasttheorem Abtastung Abtastungen -abtauchen Abtauchen abtauchende abtauchenden @@ -3561,7 +3547,6 @@ abtretendes Abtreter Abtretung Abtretungen -abtrieb Abtrieb Abtritt Abtritte @@ -3798,7 +3783,6 @@ abwischendes abwischte abwohnen Abwurf -abwürfe Abwürfe abwürfen abwürgen @@ -4028,7 +4012,6 @@ Achsel Achselhöhle Achselhöhlen Achseln -achselzucken Achselzucken Achsen Achsenmächte @@ -4038,7 +4021,6 @@ achsigem achsigen achsiger achsiges -acht Acht achtbar achtbare @@ -4215,7 +4197,6 @@ addiertes addiertest Addition Additionen -additiv Additiv additive additiven @@ -4989,7 +4970,6 @@ Alkoholkonzentration Alkoholspiegel Alkoholvergiftungen Alkoven -all All allabendlich allabendliche @@ -5120,7 +5100,6 @@ allgemein allgemeinbildende Allgemeinbildung allgemeine -allgemeinem Allgemeinem allgemeinen allgemeiner @@ -5148,10 +5127,8 @@ Allheilmittels Allianz Allianzen alliiert -alliierte Alliierte alliiertem -alliierten Alliierten alljährlich alljährlichem @@ -5274,7 +5251,6 @@ altem alten Altenheim Altenheimen -alter Alter älter altere @@ -7382,7 +7358,6 @@ angrenzenden angrenzender angrenzendes angrenzten -angriff Angriff Angriffe angriffen @@ -7408,7 +7383,6 @@ angrinsende angrinsendem angrinsenden angrinsendes -angst Angst Ängste Ängsten @@ -7543,7 +7517,6 @@ anheim anheischig anheizen anheizt -anhieb Anhieb anhielt anhielte @@ -7652,7 +7625,6 @@ anklammernd anklammerndem anklammernden anklammernder -anklang Anklang Anklänge anklängen @@ -7849,7 +7821,6 @@ anliefernden anlieferndes anliefert Anlieferung -anliegen Anliegen anliegend anliegendem @@ -8172,7 +8143,6 @@ anprallenden anprallender anprallendes Anpralls -anprangern Anprangern anprangerte anpreisen @@ -8494,7 +8464,6 @@ anschneidende anschneidendem anschneidender anschneidendes -anschnitt Anschnitt anschnitten Anschnittes @@ -8729,7 +8698,6 @@ anstachelndes anstachle Anstalt Anstalten -anstand Anstand anständig anständige @@ -8810,7 +8778,6 @@ ansteuernder ansteuerndes ansteuerte Ansteuerung -anstieg Anstieg anstiege anstiegen @@ -8890,7 +8857,6 @@ anstrengendste anstrengt Anstrengung Anstrengungen -anstrich Anstrich Anstriche Anstrichs @@ -9068,7 +9034,6 @@ antriebe antrieben Antriebs antrifft -antritt Antritt Antrittes Antrittsbesuch @@ -9099,7 +9064,6 @@ anvertrautem anvertrauten anvertrautes Anverwandlung -anverwandte Anverwandte anverwandten anvisieren @@ -9542,7 +9506,6 @@ Aquariums äquidistanten Äquidistanz äquifunktional -äquivalent Äquivalent äquivalente äquivalenten @@ -9891,7 +9854,6 @@ Argentinien argentinische argentinischen arger -ärger Ärger ärgere ärgerem @@ -9999,7 +9961,6 @@ Arkansas arktisch arktische arktischen -arm Arm Armada Armatur @@ -10152,7 +10113,6 @@ arteigene arteigenem arteigener arteigenes -arten Arten Arterie Arterien @@ -10284,7 +10244,6 @@ Assumptionist Assumptionisten Ast äst -äste Äste Aster Astern @@ -10387,7 +10346,6 @@ Atlantiks Atlantis atlantischen Atlas -atmen Atmen atmete Atmosphäre @@ -10476,7 +10434,6 @@ atü ätzt ätzten Ätzung -au Au Aubergine auch @@ -10672,7 +10629,6 @@ auffischende auffischendem auffischenden auffischendes -aufflackern Aufflackern aufflammen aufflammend @@ -11913,7 +11869,6 @@ auflockernden auflockerndes Auflockerung Auflockerungstendenz -auflodern Auflodern auflodernd auflodernde @@ -12318,7 +12273,6 @@ Aufschneiderei Aufschneidereien Aufschneiders aufschneidet -aufschnitt Aufschnitt aufschnitte Aufschnitts @@ -12365,7 +12319,6 @@ aufschütteln aufschwingen Aufschwung Aufschwungs -aufsehen Aufsehen aufsehend aufsehenden @@ -12454,9 +12407,7 @@ aufstampfen aufstampfende aufstampfenden aufstampfender -aufstand Aufstand -aufstände Aufstände aufständen aufständisch @@ -12505,7 +12456,6 @@ aufstellt Aufstellung Aufstellungen Aufstellungsplanung -aufstieg Aufstieg aufstiegen Aufstiegs @@ -12536,7 +12486,6 @@ aufstreichend aufstreichenden aufstreichender aufstreichendes -aufstrich Aufstrich aufstrichen Aufstrichs @@ -12656,13 +12605,11 @@ auftretendem auftretenden auftretender Auftretens -auftrieb Auftrieb auftriebe Auftriebs Auftriebskraft Auftriebskräfte -auftritt Auftritt Auftritte Auftritten @@ -12688,9 +12635,7 @@ aufwachten aufwallen aufwallt Aufwallung -aufwand Aufwand -aufwände Aufwände aufwänden Aufwandes @@ -13250,7 +13195,6 @@ ausdrehende ausdrehender ausdrehendes Ausdruck -ausdrücke Ausdrücke ausdrucken ausdrücken @@ -13358,7 +13302,6 @@ ausfahrend ausfahrende ausfahrender ausfahrendes -ausfahrt Ausfahrt Ausfahrten Ausfall @@ -13446,7 +13389,6 @@ ausfressend ausfressende ausfressenden ausfressendes -ausfuhr Ausfuhr ausführbar ausführbare @@ -15566,9 +15508,7 @@ ausstaffiertem ausstaffierten ausstaffierter Ausstaffierung -ausstand Ausstand -ausstände Ausstände ausstanzen ausstatten @@ -15624,7 +15564,6 @@ aussterbendes Aussterbens Aussteuer aussteuern -ausstieg Ausstieg Ausstiegschance ausstieß @@ -15738,7 +15677,6 @@ austrinkend austrinkende austrinkender austrinkendes -austritt Austritt Austritten Austrittes @@ -15825,7 +15763,6 @@ Auswirkung Auswirkungen auswischen Auswuchs -auswüchse Auswüchse auswüchsen Auswuchses @@ -16212,7 +16149,6 @@ Bahnüberganges Bahnverbindung Bahnwärter Bahrain -bahre Bahre Bai Bairemaß @@ -16276,7 +16212,6 @@ Ballaste Ballasten Ballastes Bälle -ballen Ballen Bällen Ballens @@ -16347,7 +16282,6 @@ Bandaufnahme Bandbreite Bandbreiten Bande -bände Bände banden bänden @@ -16378,7 +16312,6 @@ Banditen Bandpass Bands Bandscheibe -bang Bang bange bangen @@ -16435,7 +16368,6 @@ Banknote Banknoten Banknotenumlauf Bankraubes -bankrott Bankrott bankrotte bankrottem @@ -16464,7 +16396,6 @@ Bannung banque Bantu Baptist -bar Bar Bär Baracke @@ -16531,7 +16462,6 @@ barmherziges Barmherzigkeit Barmittel Barmixer -barock Barock Barometer Barometerstand @@ -16783,7 +16713,6 @@ Baum Baumaschinen Baumaterialien Baumdiagramm -bäume Bäume Baumeister Baumeisters @@ -17145,7 +17074,6 @@ bebt bebte bebten Becher -bechern Bechern Bechers Becken @@ -17183,7 +17111,6 @@ bedankte bedankten bedanktest bedanktet -bedarf Bedarf Bedarfs Bedarfsartikel @@ -17325,7 +17252,6 @@ Bedienpult bedienst Bedienstete bediensteten -bediensteter Bediensteter bedient Bedientastatur @@ -18157,7 +18083,6 @@ Begrenztheit Begrenzung Begrenzungen Begrenzungslinie -begriff Begriff begriffe begriffen @@ -18339,7 +18264,6 @@ Behandlungserfolge Behandlungsmethode behandschuht Behang -behänge Behänge behangen behängen @@ -18857,7 +18781,6 @@ beißendem beißender beißendes beißt -beistand Beistand beistanden Beistandspakt @@ -18907,7 +18830,6 @@ beitretende beitretendem beitretenden beitretendes -beitritt Beitritt Beitritte Beitrittsbedingung @@ -19205,7 +19127,6 @@ Belagerungen Belagerungszustand Belagerungszuständen Belagerungszustandes -belang Belang belange belangen @@ -19307,7 +19228,6 @@ belebtest belebtet Belebung Belebungsmaßnahme -beleg Beleg belegbar belegbare @@ -21314,7 +21234,6 @@ besoldungsmäßig Besoldungsordnung besondere besonderem -besonderen Besonderen besonderer besonderes @@ -21447,9 +21366,7 @@ bestahl bestahlen bestahlt Bestallungen -bestand Bestand -bestände Bestände bestanden bestandene @@ -21753,7 +21670,6 @@ bestrahltest bestrahltet Bestrahlung bestrebe -bestreben Bestreben bestrebend bestrebende @@ -22066,7 +21982,6 @@ Betrachtungseinheit Betrachtungsweise betraf betrafen -betrag Betrag Beträge betragen @@ -22138,7 +22053,6 @@ betreuter betreutes betreutest Betreuung -betrieb Betrieb betriebe betrieben @@ -22307,7 +22221,6 @@ betrübtem betrübter betrübtes betrübtest -betrug Betrug betrüge betrugen @@ -22384,7 +22297,6 @@ Bettlakens Bettler Bettlers Bettnachbar -bettnässen Bettnässen Bettruhe Betttuch @@ -22421,7 +22333,6 @@ beugtet Beugung Beugungen Beugungsform -beule Beule beulen beunruhigen @@ -22479,10 +22390,8 @@ beurteiltest Beurteilung Beurteilungen Beurteilungskriterien -beute Beute Beutel -beuteln Beuteln Beutelschneider beutelt @@ -22748,7 +22657,6 @@ beweinter beweintes beweintest beweintet -beweis Beweis Beweisangeboten Beweisaufnahme @@ -22952,7 +22860,6 @@ bewusster bewusstes Bewusstheit bewusstlos -bewusstlose Bewusstlose bewusstlosem bewusstlosen @@ -23062,7 +22969,6 @@ bezogenen bezogener bezogst bezogt -bezug Bezug Bezüge Bezügen @@ -23536,7 +23442,6 @@ bislang Bismarck Bismarcks Bison -biss Biss bisschen bisse @@ -23635,7 +23540,6 @@ Blankovollmacht Blankovollmachten Bläschen Bläschens -blase Blase Blasebalg blasen @@ -23722,7 +23626,6 @@ Blech Blechbüchse Blechbüchsen Bleche -blechen Blechen blechern blecherne @@ -24186,7 +24089,6 @@ Böe Boeing bog bogen -bögen Bögen Bogenabstand Bogenfenster @@ -24306,7 +24208,6 @@ Bonze Bonzen Boot boote -booten Booten Bootes Bootfahrten @@ -24626,7 +24527,6 @@ brasilianischen brasilianischer Brasilien brate -braten Braten bratend bratenden @@ -24842,7 +24742,6 @@ Bremen Bremsbelag Bremsbeläge bremse -bremsen Bremsen bremsend bremsende @@ -24990,7 +24889,6 @@ Briketten brillant brillante brillantem -brillanten Brillanten brillanter brillanteste @@ -25048,7 +24946,6 @@ bröckelnder bröckelt bröckelte bröckelten -brocken Brocken brodeln brodelnd @@ -25209,7 +25106,6 @@ brummst brummte brummten brummtest -brunch Brunch brünett brünette @@ -25286,7 +25182,6 @@ Bruthennen Brutkasten Brutofen Brutstätte -brutto Brutto Bruttoeinkommen Bruttoeinnahmen @@ -25443,7 +25338,6 @@ Buchwerte Buchwerten Buchwertes bücke -buckel Buckel buckelig buckeligem @@ -25474,7 +25368,6 @@ Budget Budgets Büfett Büfetts -büffel Büffel büffeln büffelt @@ -25692,10 +25585,8 @@ Buntstifte Buntstiften Buntstiftes Burda -bürde Bürde Burg -bürge Bürge Burgen bürgen @@ -25801,7 +25692,6 @@ bürstetet Bus Busch Büsche -büschel Büschel büscheln Büschen @@ -25930,7 +25820,6 @@ Carsten Cartansche Cartanschen cartesische -cartesisches Cartesisches Cartoon cartoons @@ -26365,7 +26254,6 @@ Cousins CPU CPUs Crack -creme Creme cremefarben cremefarbig @@ -26538,7 +26426,6 @@ dämliches Damm Dammbruch Dammbrüche -dämme Dämme dämmerhaft Dämmerlicht @@ -27072,7 +26959,6 @@ dazwischentretende dazwischentretenden dazwischentretendes dB -DB dBase de deaktivieren @@ -27159,7 +27045,6 @@ Defekten defekter defektes defensiv -defensive Defensive defensiven defensiver @@ -28068,14 +27953,12 @@ dich Dichothomie Dichotomie dicht -dichte Dichte Dichtefunktion dichtem dichten dichtend dichtende -dichter Dichter dichteren Dichterinnen @@ -28105,7 +27988,6 @@ dick Dickdarm Dickdärme Dickdarms -dicke Dicke dickem dicken @@ -28175,7 +28057,6 @@ dienend dienenden dienender dienendes -diener Diener dienern Dieners @@ -28184,7 +28065,6 @@ dienlich dienliche dienlichen dienlicher -dienst Dienst Dienstag Dienstagen @@ -28342,7 +28222,6 @@ diffamierten Diffamierung Differente Differenten -differential Differential Differentiale Differentialen @@ -29094,7 +28973,6 @@ Dotter Dotterblume dottergelb Dottern -double Double Doubles Doublette @@ -29167,7 +29045,6 @@ Dramaturgen dramaturgisch Dramen dran -drang Drang dränge drangeht @@ -29416,7 +29293,6 @@ dreisprachige dreisprachigen dreisprachiges dreißig -dreißiger Dreißiger dreißigfach dreißigjährig @@ -29531,7 +29407,6 @@ Dringlichkeitsstufe dringlichste dringst dringt -drink Drink Drinks drinnen @@ -29542,7 +29417,6 @@ drippeln dritt drittbeste dritte -drittel Drittel dritteln drittelnder @@ -29870,7 +29744,6 @@ dunkelhäutigen Dunkelheit Dunkelkammer Dunkelmänner -dunkeln Dunkeln dunkelrot dunkelsten @@ -30032,7 +29905,6 @@ durcheilendes durcheilt durcheilten durcheiltest -durcheinander Durcheinander durcheinandergeworfener durcheinanderraten @@ -30048,7 +29920,6 @@ durchfahrend durchfahrenden durchfahrender durchfahrendes -durchfahrt Durchfahrt Durchfahrten Durchfall @@ -30407,7 +30278,6 @@ durchlässiges Durchlässigkeit durchlässt Durchlaucht -durchlauf Durchlauf Durchläufe durchlaufen @@ -30800,7 +30670,6 @@ dürftiger dürftiges Dürftigkeit dürr -dürre Dürre dürren dürrer @@ -30861,7 +30730,6 @@ düstre Dutt Dutte Dutzend -dutzende Dutzende Dutzenden dutzendweise @@ -30904,7 +30772,6 @@ ebendies ebendiese ebendieselbe ebene -ebenen Ebenen ebener ebenerdig @@ -30934,7 +30801,6 @@ echtzeitgesteuert Eck Eckball Eckbälle -ecke Ecke ecken eckig @@ -31058,7 +30924,6 @@ egalisierte Egalisierung Egel Egeln -egge Egge Ego Egoismen @@ -31078,7 +30943,6 @@ egozentrischem egozentrischer egozentrisches eh -ehe Ehe Eheberatung Ehebett @@ -31317,7 +31181,6 @@ ehrwürdiger Ei Eibe Eichamt -eiche Eiche Eichel Eicheln @@ -31405,7 +31268,6 @@ eifrigstes Eigelb Eigelben Eigelbs -eigen Eigen Eigenarbeit Eigenart @@ -31567,7 +31429,6 @@ eignen eignende eignenden eignender -eigner Eigner eignes eignest @@ -31664,9 +31525,7 @@ einäugig einäugigen Einbahnstraße Einbahnstraßen -einband Einband -einbände Einbände einbändig einbändigem @@ -32048,7 +31907,6 @@ Eingänge Eingängen eingängig eingängige -eingangs Eingangs Eingangsbedingung Eingangsdaten @@ -32108,10 +31966,8 @@ eingebogen eingebogene eingebogenen eingebogenes -eingeborene Eingeborene eingeborenen -eingeborener Eingeborener eingebracht eingebrachte @@ -32790,7 +32646,6 @@ eingrenzen eingrenzenden eingrenzten Eingrenzung -eingriff Eingriff eingriffe eingriffen @@ -32831,7 +32686,6 @@ einheftenden einheftender einheftendes einheimisch -einheimische Einheimische einheimischem einheimischen @@ -33008,7 +32862,6 @@ einkochend einkochende einkochenden einkochendes -einkommen Einkommen Einkommens Einkommensbelastung @@ -33469,7 +33322,6 @@ einschneidender einschneidendes einschneidet einschneien -einschnitt Einschnitt einschnitten Einschnittes @@ -33670,7 +33522,6 @@ einsteigender einsteigt Einstein einsteinscher -Einstein'scher einstellbar einstellbare einstellbaren @@ -33690,7 +33541,6 @@ einstellten Einstellung Einstellungen Einstellwert -einstieg Einstieg einstiegen einstig @@ -33853,7 +33703,6 @@ eintretendem eintretenden eintretender eintrifft -eintritt Eintritt Eintritts Eintrittsfläche @@ -33969,7 +33818,6 @@ Einwohners Einwohnerschaft Einwohnerzahl Einwurf -einwürfe Einwürfe einwürfen Einwurfes @@ -34220,7 +34068,6 @@ Eisbergen Eisbergs Eisdecke Eisdiele -eisen Eisen eisenärmeren Eisenbahn @@ -34553,7 +34400,6 @@ Elemente Elementen Elementes Elements -elend Elend elende elendem @@ -34626,7 +34472,6 @@ Elternteil Elternteile Elternteilen Elternteils -email Email Emanuel Emanuela @@ -34918,7 +34763,6 @@ Endbild Endbilder Enddaten Enddruck -ende Ende Endeffekt enden @@ -35119,7 +34963,6 @@ Engländer Engländerinnen Engländern Englands -englisch Englisch englische englischem @@ -36002,7 +35845,6 @@ entnommen entnommene entnommenen entnommenes -entpacken Entpacken entpackten entprellt @@ -36597,7 +36439,6 @@ entwürdigtes entwürdigtest entwürdigtet Entwurf -entwürfe Entwürfe Entwurfes Entwurfs @@ -36649,7 +36490,6 @@ entzogene entzogenen entzogener entzogst -entzücken Entzücken entzückend entzückende @@ -36834,9 +36674,7 @@ erbberechtigt erbberechtigte erbberechtigten erbberechtigtes -erbe Erbe -erben Erben erbend erbende @@ -38444,10 +38282,8 @@ ernsthaftester ernsthaftestes ernstlich ernstlichen -ernte Ernte Erntedankfest -ernten Ernten erntend erntenden @@ -39078,7 +38914,6 @@ Erstattungen Erstaufführung Erstauftrag erstaune -erstaunen Erstaunen erstaunend erstaunende @@ -39107,7 +38942,6 @@ erstauntes erstauntest erstauntet erstbeste -erste Erste ersteche erstechen @@ -39287,7 +39121,6 @@ ertönendes ertönt ertönte ertönten -ertrag Ertrag ertrage Erträge @@ -39669,9 +39502,7 @@ Erzes erzeuge erzeugen erzeugend -erzeugende Erzeugende -erzeugenden Erzeugenden erzeugender erzeugendes @@ -39814,7 +39645,6 @@ essbares Essbesteck Essbestecks esse -essen Essen essend essenden @@ -40301,7 +40131,6 @@ Exports Exportüberschuss Exportüberschüsse Exposition -express Express Expressgut Expression @@ -40446,13 +40275,11 @@ Fachbetrieb Fachblatt Fachbücher Fachdozent -fache Fache fächeln fächelte fachen fachende -fächer Fächer fächerförmig fächern @@ -40580,7 +40407,6 @@ Fachzeitschrift Fachzeitung Fachzweige Fackel -fackeln Fackeln facto Fädchen @@ -40766,7 +40592,6 @@ Fahrstühlen Fahrstuhles Fahrstuhls Fahrstuhlwartung -fahrt Fahrt fährt Fährte @@ -40843,15 +40668,12 @@ Falk Falke Falken Falklandinseln -fall Fall Fallbeil Fallbeispiel -falle Falle Fälle fallen -fällen Fällen fallend fällend @@ -40979,7 +40801,6 @@ faltigsten faltigster faltigstes Faltung -fam Fam familiär familiäre @@ -41059,7 +40880,6 @@ fanden fänden fandest Fanfare -fang Fang Fangarm fangbewehrt @@ -41234,10 +41054,8 @@ faserigen faseriger faseriges Faserlänge -fasern Fasern Faserzeug -fass Fass Fassade Fassaden @@ -41435,7 +41253,6 @@ federleichten federleichter federleichtes Federlesens -federn Federn federnde federndem @@ -41477,7 +41294,6 @@ Fehdehandschuh Fehdehandschuhe Fehdehandschuhes Fehden -fehl Fehl Fehlanpassung Fehlanzeige @@ -41606,7 +41422,6 @@ fehlte fehlten fehltest fehltraten -fehltritt Fehltritt Fehltritts Fehlurteil @@ -41631,7 +41446,6 @@ Feierlichkeiten feierlichste feierlichstem feierlichsten -feiern Feiern feiernd feiernde @@ -41694,10 +41508,8 @@ Feinanpassung Feinbäckerei Feinbäckereien Feinbleche -feind Feind Feindbild -feinde Feinde feinden Feindes @@ -42052,7 +41864,6 @@ ferromagnetischen Ferse Fersen Fersengeld -fertig Fertig Fertigbauweise fertige @@ -42086,7 +41897,6 @@ Fertigungsstraßen Fertigungstechnik Fertigware Fertigwaren -fertigwerden Fertigwerden fertigzuwerden fesch @@ -42420,7 +42230,6 @@ fettigster fettigstes Fettnäpfchen Fettsucht -fetzen Fetzen Fetzens feucht @@ -42644,7 +42453,6 @@ Filmarchiv Filmatelier Filmateliers Filmaufnahmen -filme Filme Filmemacher filmen @@ -42683,7 +42491,6 @@ Filmvorstellungen Filter filtere filterlos -filtern Filtern filternd filternde @@ -42711,7 +42518,6 @@ filzigen filziges Filzstiften Fimmel -final Final finale finalen @@ -42810,7 +42616,6 @@ Findungen Finesse Finessen fing -fingen Fingen Finger Fingerabdruck @@ -42877,7 +42682,6 @@ Firlefanz Firma Firmament Firmamentes -firmen Firmen Firmenautos firmeneigen @@ -43048,7 +42852,6 @@ flachhügelig Flachland Flachländern Flachlandes -flachs Flachs flachste flachstem @@ -43070,7 +42873,6 @@ Fladen Fläden Fladens Flag -flagge Flagge flaggen Flaggenalphabet @@ -43093,9 +42895,7 @@ flämische flämischer flämisches Flämmchen -flamme Flamme -flammen Flammen flammend flammenden @@ -43178,7 +42978,6 @@ flaumigem flaumiger flaumiges Flausen -flaute Flaute Flautezeit flechte @@ -43210,7 +43009,6 @@ Fleckwassers Fledermaus Fledermäuse Fledermäusen -flegel Flegel Flegelalter flegelhaft @@ -43331,7 +43129,6 @@ Flickzeug Flickzeuges Flickzeugs Flieder -fliegen Fliegen fliegend fliegende @@ -43443,7 +43240,6 @@ flitztest flitztet flocht Flocke -flocken Flocken flockig flockige @@ -43454,7 +43250,6 @@ flog flogen flöget flogst -floh Floh Flöhe flohen @@ -43492,7 +43287,6 @@ flötetest flötetet Flötist flott -flotte Flotte Flottenabkommen Flottenmanöver @@ -43520,7 +43314,6 @@ fluchen Flüchen Flucher Fluches -flucht Flucht fluchtartig fluchtartige @@ -43760,7 +43553,6 @@ fokussieren fokussiert fokussierten Fokussierung -folge Folge Folgeaufträge Folgeband @@ -43989,7 +43781,6 @@ formelles formelmäßig Formeln Formelzeichen -formen Formen Formenbau formend @@ -44100,7 +43891,6 @@ forschend forschenden forschender forschendes -forscher Forscher Forschergruppe Forschergruppen @@ -44172,7 +43962,6 @@ Forstwirtschaft forstwirtschaftlichen fort fortan -fortbestand Fortbestand fortbestanden fortbestehe @@ -44356,7 +44145,6 @@ fortpflanzendes fortpflanzt Fortpflanzung Fortran -FORTRAN fortrannte forträumen fortreißen @@ -44376,7 +44164,6 @@ fortschreitende fortschreitenden fortschreitender fortschreitendes -fortschritt Fortschritt fortschritte fortschritten @@ -44433,7 +44220,6 @@ fortzuschaffen fortzuschreiten fortzusetzen Forum -fossil Fossil Fossilien Foto @@ -44520,7 +44306,6 @@ Frack Fräcke Fräcken Fracks -frage Frage Fragebogen Fragebögen @@ -44587,7 +44372,6 @@ Fraktionen fraktionslos Fraktionsvorsitzende Franc -frank Frank Frankens Frankenstein @@ -44610,7 +44394,6 @@ frankiertet franko frankophon Frankreich -franse Franse Franz Franziska @@ -44632,7 +44415,6 @@ frappantes frappieren frappierend fräsen -fraß Fraß fraßen Fraßes @@ -44942,7 +44724,6 @@ freitragend Freitreppe Freitreppen Freiverkehr -freiwerden Freiwerden Freiwerdens Freiwild @@ -44986,9 +44767,7 @@ fremdartiger fremdartiges Fremdatome fremdbezogen -fremde Fremde -fremden Fremden Fremdenbettes Fremdenführer @@ -45007,7 +44786,6 @@ Fremdenpolizei Fremdenverkehr Fremdenzimmer Fremdenzimmern -fremder Fremder fremdes Fremdfinanzierung @@ -45111,9 +44889,7 @@ freuende freuenden freuendes Freund -freunde Freunde -freunden Freunden Freundes Freundeskreis @@ -45167,9 +44943,7 @@ frevelte frevelten frevle Frieda -friede Friede -frieden Frieden friedender Friedens @@ -45368,7 +45142,6 @@ frommen frommer frommes Frömmigkeit -fron Fron Fronarbeit Fronarbeiten @@ -45714,7 +45487,6 @@ Füllungen Füllzeichen fulminant fulminante -fummel Fummel fummeln fummelnd @@ -45809,7 +45581,6 @@ fünfzehnten fünfzehnter fünfzehntes fünfzig -fünfziger Fünfziger fünfzigjährig fünfzigste @@ -45848,7 +45619,6 @@ funkelt funkelte funkelten funkeltest -funken Funken funkend funkende @@ -45886,9 +45656,7 @@ funktest funktet Funktion funktional -funktionale Funktionale -funktionalen Funktionalen funktionales Funktionalität @@ -45901,7 +45669,6 @@ funktionellen funktioneller funktionelles Funktionen -funktionieren Funktionieren funktionierend funktionierende @@ -45951,7 +45718,6 @@ Fürbitte Furche furchen furchender -furcht Furcht furchtbar furchtbare @@ -46142,7 +45908,6 @@ Fußwegen Fußweges Fußzeilen futsch -futter Futter Futteral Futterale @@ -46183,7 +45948,6 @@ Gabe gäbe Gabel gabelig -gabeln Gabeln gabelndes Gabelstapler @@ -46306,7 +46070,6 @@ Gammler gammligste Gämse Gämsen -gang Gang Gangart Gangarten @@ -46474,7 +46237,6 @@ Gärstoffes gärt gärte Garten -gärten Gärten Gartenanlage Gartenanlagen @@ -46748,7 +46510,6 @@ geartetem gearteten gearteter geartetes -geäst Geäst Geästes geatmet @@ -46893,9 +46654,7 @@ gebeugten gebeugtes gebeutelt Gebiet -gebiete Gebiete -gebieten Gebieten gebietend gebietende @@ -47015,7 +46774,6 @@ geborstene geborstenen geborstener geborstenes -gebot Gebot Gebote geboten @@ -47100,7 +46858,6 @@ gebräuntes Gebräus gebraust gebrauter -gebrechen Gebrechen gebrechlich gebrechliche @@ -47597,7 +47354,6 @@ gefährdeter gefährdetes gefährdetest Gefährdung -gefahren Gefahren gefahrene gefahrenen @@ -47700,7 +47456,6 @@ gefalteter gefaltetes gefangen gefangene -gefangenen Gefangenen Gefangenenlager gefangenes @@ -48334,14 +48089,12 @@ gegrüßt geguckt gegürtet geh -gehabe Gehabe gehabt gehabte gehabten gehabter gehackt -gehackte Gehackte gehacktem gehackten @@ -48626,7 +48379,6 @@ gehöriger gehöriges Gehörlose Gehörs -gehorsam Gehorsam gehorsame gehorsamer @@ -48650,7 +48402,7 @@ gehortet gehst Gehsteig geht -geht's +gehts gehuldigt gehüllt gehüllte @@ -48712,7 +48464,6 @@ geißeln geißelte Geißelung Geist -geister Geister Geisterbeschwörer Geisterbeschwörern @@ -48724,7 +48475,6 @@ geisterhaften geisterhafter geisterhaftes Geisterhand -geistern Geistern geistert geisterten @@ -49422,7 +49172,6 @@ gelehrigstes Gelehrsamkeit gelehrt gelehrte -gelehrten Gelehrten gelehrter gelehrteren @@ -49500,7 +49249,6 @@ gelichteten gelichtetes geliebäugelt geliebt -geliebte Geliebte geliebter geliebtes @@ -49621,7 +49369,6 @@ gelüste gelüsten gelyncht gem -gemach Gemach Gemächer Gemächern @@ -50201,7 +49948,6 @@ Gentleman Gentlemen Genua genug -genüge Genüge genügen genügend @@ -50550,7 +50296,6 @@ geradegestanden geradehin geradelt geradem -geraden Geraden geradenwegs gerader @@ -50588,7 +50333,6 @@ Gerassel Gerassels gerasselt gerastete -gerät Gerät gerate Geräte @@ -52064,7 +51808,6 @@ geschwollen geschwollenes geschwommen geschworen -geschworene Geschworene Geschworenen Geschworenengericht @@ -52091,7 +51834,6 @@ gesehener gesehenes gesehnt geselchte -geselle Geselle gesellen Gesellenbrief @@ -53625,7 +53367,6 @@ gewichtete gewichteten gewichteter gewichtetes -gewichtheben Gewichtheben Gewichtheber gewichtig @@ -53748,7 +53489,6 @@ gewispertes gewiss gewisse gewissem -gewissen Gewissen gewissenhaft gewissenhafte @@ -54125,7 +53865,6 @@ Giebel Giebeln Giebels Giebelwand -gier Gier gieren gierig @@ -54279,7 +54018,6 @@ Glasaugen Glasdachs Glasenbach Gläser -gläsern Gläsern gläserne gläsernem @@ -54336,7 +54074,6 @@ Glaswand Glaswollen glatt glatte -glätte Glätte Glatteis Glatteisbildung @@ -54403,7 +54140,6 @@ gläubig gläubige gläubigem gläubigen -gläubiger Gläubiger Gläubigerbank gläubigere @@ -54608,7 +54344,6 @@ gleichwertig gleichwertige gleichwertigem gleichwertiger -gleichwertiges Gleichwertiges Gleichwertigkeit gleichwohl @@ -54949,7 +54684,6 @@ Golfspielern Golfspielers Golfstrom Gondel -gong Gong gönne gönnen @@ -55030,7 +54764,6 @@ Gouverneure Gouverneurs Grab grabe -graben Graben Gräben Grabenkrieg @@ -55234,7 +54967,6 @@ Gräuel Gräueltat Gräueltaten grauem -grauen Grauen grauenerregender grauenhaft @@ -55356,7 +55088,6 @@ Greifer Greifhand greifst greift -greis Greis greise greisen @@ -55382,9 +55113,7 @@ Grenzabkommen Grenzabstand Grenzbewohner Grenzbewohners -grenze Grenze -grenzen Grenzen grenzend grenzende @@ -55470,7 +55199,6 @@ griesgrämigen griesgrämiges Grieß Grießbrei -griff Griff griffbereit griffbereitem @@ -55498,7 +55226,6 @@ griffigster griffigstes Griffs griffst -grill Grill grille grillen @@ -55518,7 +55245,6 @@ grimmigstem grimmigsten grimmigstes grinse -grinsen Grinsen grinsend grinsende @@ -55875,7 +55601,6 @@ Grundbuchinhalt Grunddilemma Grunddreieck Grunde -gründe Gründe grundehrlich grundehrlichem @@ -55889,7 +55614,6 @@ Grundeinheit Grundeinstellung Grundelement Grundempfehlung -gründen Gründen gründend gründende @@ -56153,9 +55877,7 @@ gruseln Gruß Grußadresse Grußbotschaft -grüße Grüße -grüßen Grüßen grüßend grüßende @@ -56266,7 +55988,6 @@ Gussform Gussformen gustiöseren Gusto -gut Gut Gutachten Gutachtens @@ -56329,7 +56050,6 @@ gutgläubige gutgläubigen gutgläubiger gutgläubiges -guthaben Guthaben gutheißend gutheißende @@ -56433,7 +56153,6 @@ Haarausfall Haarbürste Haarbürsten Haare -haaren Haaren Haares Haaresbreite @@ -56489,7 +56208,6 @@ Haarwassers Haarwuchsmittel Haarwuchsmitteln Haarwuchsmittels -hab Hab habe haben @@ -56647,7 +56365,6 @@ häkelt häkelte häkelten häkeltet -haken Haken hakenden hakender @@ -56667,7 +56384,6 @@ halbautomatisch Halbbruder Halbbrüder Halbbrüdern -halbdunkel Halbdunkel halbe Halbebene @@ -56695,7 +56411,6 @@ halbhohe halbiere halbieren halbierend -halbierende Halbierende halbierendem halbierender @@ -56796,7 +56511,6 @@ Halle hallen hallender Hallig -hallo Hallo hallt hallte @@ -56844,7 +56558,6 @@ Halsverband Halsweh Halswirbel Halswirbelsäule -halt Halt hält haltbar @@ -57228,7 +56941,6 @@ Hängebrücke Hängebrücken Hängematte Hängematten -hängen Hängen hängend hängende @@ -57348,7 +57060,6 @@ Harry harsch hart harte -härte Härte Härtefälle Härtegründe @@ -57471,7 +57182,6 @@ hastigen hastiges hat Hatree -hat's hätscheln hatschten hatte @@ -57736,7 +57446,6 @@ Hausdach Hausdiener Hausdienern Hausdieners -hause Hause hauseigen hausen @@ -57883,7 +57592,6 @@ hauswirtschaftlichem hauswirtschaftlichen hauswirtschaftlicher Hauswirtschaftslehre -haut Haut Hautärzte Hautärzten @@ -57891,7 +57599,6 @@ Hautarztes Hautausschlag Hautcreme haute -häute Häute hauten hauteng @@ -57924,7 +57631,6 @@ Hebelarm Hebelarme Hebelarmen Hebelkraft -hebeln Hebeln Hebels hebelt @@ -57943,7 +57649,6 @@ Hebräer Hebräerin Hebräern hebräisch -hebräische Hebräische Hebräischem hebst @@ -58169,7 +57874,6 @@ heiltest Heilung Heilungen Heilverfahren -heim Heim Heimarbeit Heimarbeiten @@ -58590,7 +58294,6 @@ Hemdenknopfs Hemdes Hemds hemdsärmelig -hemdsärmeln Hemdsärmeln Hemisphären hemmen @@ -59217,7 +58920,6 @@ herbeisehnen herbeisehnte herbeiwünschen herbeiwünscht -herbeiziehen Herbeiziehen herbeizuführen herbeizurufen @@ -60068,9 +59770,7 @@ herzlosestem herzlosesten herzlosester Herzlosigkeit -herzog Herzog -herzöge Herzöge herzogen herzögen @@ -60201,7 +59901,6 @@ Hexer Hexerei Hexereien Hi -hieb Hieb hieben Hiebes @@ -60706,7 +60405,6 @@ hineinzulegen hineinzupacken hineinzustellen hinfahren -hinfahrt Hinfahrt hinfallen hinfallend @@ -60914,7 +60612,6 @@ hinreichende hinreichenden hinreichender hinreicht -hinreise Hinreise hinreisend hinreisenden @@ -61379,7 +61076,6 @@ hobeltest hobeltet hoble hobst -hoch Hoch Hochachtung hochachtungsvoll @@ -61840,7 +61536,6 @@ hohl hohle Höhle hohlen -höhlen Höhlen höhlendes Höhlenforscher @@ -62242,7 +61937,6 @@ Huldigung Huldigungen huldvoll huldvolle -hülle Hülle hüllen hüllt @@ -62304,7 +61998,6 @@ Hunden Hunderasse hundert hunderte -hunderten Hunderten hunderter hundertfach @@ -62324,11 +62017,9 @@ hundertprozentiger hundertprozentiges Hundertschaft hundertste -hundertstel Hundertstel hundertsten hunderttausend -hunderttausende Hunderttausende hunderttausenden hundertzehn @@ -62559,10 +62250,8 @@ ichbezogenes Ichform Ichsucht ICs -ideal Ideal Idealbedarf -ideale Ideale idealem idealen @@ -62760,7 +62449,6 @@ ihm ihn ihnen ihr -ihre Ihre ihrem ihren @@ -62855,7 +62543,6 @@ imitierte imitierten imitiertest Imker -imkern Imkern Imkers immanent @@ -62906,7 +62593,6 @@ Immunität Immunkörper Impedanz Impedanzwandler -imperativ Imperativ imperativen Imperator @@ -63081,7 +62767,6 @@ inadäquat inaktiv inaktive inaktiven -inaktiver Inaktiver inaktives Inaktivität @@ -63418,7 +63103,6 @@ informiertest informiertet infrage infragekommen -infrarot Infrarot infraroten Infrastruktur @@ -63518,7 +63202,6 @@ Inhomogenitäten inhuman inhumanen initial -initiale Initiale initialen initialisiere @@ -63662,7 +63345,6 @@ innere Innerei Innereien innerem -inneren Inneren innerer inneres @@ -63677,7 +63359,6 @@ Innern innerorganismisch innerpolitisch innerstaatlich -innerste Innerste innerstem innersten @@ -63832,7 +63513,6 @@ inständigste inständigstem inständigster inständigstes -instandsetzen Instandsetzen Instandsetzung Instandsetzungsarbeit @@ -63884,7 +63564,6 @@ Instruktion Instruktionen instruktiv Instrument -instrumental Instrumental Instrumentalist Instrumentalpart @@ -63926,7 +63605,6 @@ intaktestem intaktester intaktestes integer -integral Integral Integralbildung integrale @@ -64034,7 +63712,6 @@ interessantere interessanterem interessanteren interessanteres -interessantes Interessantes interessanteste interessantesten @@ -64262,7 +63939,6 @@ Invalidenrente Invalidenrenten Invalidität invariant -invariante Invariante Invarianz Invasion @@ -64278,7 +63954,6 @@ inverse inversem inversen inverser -inverses Inverses Inversion invertieren @@ -64766,7 +64441,6 @@ jämmerlichste jämmerlichstem jämmerlichster jämmerlichstes -jammern Jammern jammernd jammerndem @@ -65020,7 +64694,6 @@ Jumbo jung junge jungem -jungen Jungen jungenhaft jungenhafte @@ -65060,7 +64733,6 @@ jüngster jüngstes Juni Junigehalt -junior Junior Juniorchef Juniorchefin @@ -65239,7 +64911,6 @@ Kaiserschnitte Kaiserschnitts Kaiserslautern Kajak -kajaken Kajaken Kajaker Kajakfahren @@ -65282,7 +64953,6 @@ Kalenderwoche kalfatern Kali Kaliber -kalibrieren Kalibrieren kalibriert kalibrierten @@ -65748,7 +65418,6 @@ Kansas Kant Kantate Kante -kanten Kanten kantend Kantenlänge @@ -65809,7 +65478,6 @@ Kapillargefäße Kapillargefäßen Kapillargefäßes Kapillarstruktur -kapital Kapital Kapitalabwanderung Kapitalanlage @@ -66104,7 +65772,6 @@ Karpfenteich Karpfenteiche Karpfenteiches karre -karren Karren Karriere karrierebedingt @@ -66480,7 +66147,6 @@ katzenfreundlicher katzengewandt katzenhaft kaudern -kauderwelsch Kauderwelsch Kauderwelschs kaue @@ -66641,8 +66307,6 @@ kavitös Kay Kayaking kB -KB -kByte KByte keck keckem @@ -66665,7 +66329,6 @@ kegelförmigen kegelförmiger Kegelklub Kegelklubs -kegeln Kegeln kegelnd kegelnde @@ -66680,9 +66343,7 @@ kegelten kegeltest kegle Kegler -kehle Kehle -kehlen Kehlen Kehlkopf Kehlköpfe @@ -66755,9 +66416,7 @@ Keilschrift Keim Keimdrüse Keimdrüsen -keime Keime -keimen Keimen keimend keimenden @@ -66819,7 +66478,6 @@ kellern kellertiefe Kellerwohnung Kellerwohnungen -kellner Kellner kellnern Kellners @@ -66918,7 +66576,6 @@ kentertest kentertet Kentucky keplerschen -Kepler'schen Keramik Keramiken keramisch @@ -66926,7 +66583,6 @@ keramische keramischem keramischen keramisches -kerbe Kerbe Kerbel Kerbels @@ -66954,7 +66610,6 @@ Kern Kernbereiche Kernchen Kerne -kernen Kernen Kernenergie Kernexplosion @@ -67059,9 +66714,7 @@ kesseres kesseste Ketchup Ketschup -kette Kette -ketten Ketten Kettenantrieb Kettenantriebe @@ -67497,7 +67150,6 @@ kitteten kittetest kittetet Kitts -kitzel Kitzel kitzele kitzelig @@ -67524,7 +67176,6 @@ klaffenden klaffendes klafft klaffte -klage Klage Klageanspruch Klageantrag @@ -67541,7 +67192,6 @@ Klageforderung Klagelieder Klageliedern Klageliedes -klagen Klagen klagend klagende @@ -67579,7 +67229,6 @@ klagtest klagtet klamm klamme -klammen Klammen Klammer Klammerausdruck @@ -67587,7 +67236,6 @@ klammere klammerem klammeren klammeres -klammern Klammern klammernd klammernde @@ -67606,9 +67254,7 @@ klammster Klammstrecke Klamotte Klamotten -klang Klang -klänge Klänge klangen klängen @@ -67819,7 +67465,6 @@ klatscht klatschte klatschten klatschtet -klau Klau klaue klauen @@ -68104,7 +67749,6 @@ klettertest klettertet Klick klicke -klicken Klicken klickt klickte @@ -68142,7 +67786,6 @@ klimpert klimperte klimperten klimpertet -klinge Klinge Klingel klingele @@ -68206,7 +67849,6 @@ Klo klobig Klone klöne -klonen Klonen klönen klönst @@ -68299,7 +67941,6 @@ klumpigem klumpigen klumpiges km -km/h knabbern knabbernd knabbernde @@ -68483,7 +68124,6 @@ Knicks knicksen knicksend knickte -knie Knie Kniebeuge Kniebeugen @@ -68499,7 +68139,6 @@ Kniegelenken Kniegelenks kniehoch knielang -knien Knien kniend kniende @@ -68518,7 +68157,6 @@ knieten knietest knietief knietiefem -kniff Kniff kniffe kniffelig @@ -68654,12 +68292,10 @@ knorpeliger Knorpeln knorrig knorrige -knospe Knospe knospen knospenhaft knospenhafte -knoten Knoten Knotenpunkt Knotenpunkte @@ -68685,7 +68321,6 @@ knüpften knüpftet Knüppel knüppeldick -knüppeln Knüppeln Knüppels knüpple @@ -68825,7 +68460,6 @@ Kohleherde Kohlehydrate Kohlehydraten Kohlehydrates -kohlen Kohlen Kohlenbecken Kohlenbergbau @@ -68952,7 +68586,6 @@ Kollegiums Kollekte Kollektion Kollektionen -kollektiv Kollektiv kollektive kollektivem @@ -69177,7 +68810,6 @@ Kommissionssitzung Kommissionsvorschläge Kommissionsvorsitzende Kommissionsvorsitzender -kommode Kommode kommoden kommst @@ -69191,7 +68823,6 @@ kommunales Kommunalsteuern Kommunalverfassung Kommunalwahlen -kommune Kommune kommunen Kommunikation @@ -69323,7 +68954,6 @@ komplettestes komplettieren Komplettierung Komplettierungen -komplex Komplex komplexe komplexen @@ -69333,7 +68963,6 @@ komplexerem komplexeren komplexerer komplexeres -komplexes Komplexes Komplexität Komplicen @@ -69828,7 +69457,6 @@ konspirativen konstant konstante konstantem -konstanten Konstanten konstanter konstantes @@ -70290,7 +69918,6 @@ Kopfbedeckung Kopfbogen Kopfe Köpfe -köpfen Köpfen Kopfende Kopfes @@ -70379,7 +70006,6 @@ Korinthe Korinthen Kork Korkeiche -korken Korken Korkens Korkenziehern @@ -70573,7 +70199,6 @@ kostbarstem kostbarsten kostbarstes koste -kosten Kosten Kostenanteil Kostenantrag @@ -70708,7 +70333,6 @@ kracht krachten krächzen krächzendem -kraft Kraft Kraftakt Kraftanlagen @@ -70789,14 +70413,12 @@ Kraftwerks Kragen Krägen Kragens -krähe Krähe krähen kräht krähtest krakeelen Krakeleien -kralle Kralle krallen krallte @@ -70819,10 +70441,8 @@ krampfhafte krampfhaften Kran krank -kranke Kranke krankem -kranken Kranken kränken Krankenanstalt @@ -71080,7 +70700,6 @@ kreierten kreierter kreiertes kreiertest -kreis Kreis Kreisabschnitt Kreisabschnitte @@ -71105,13 +70724,11 @@ kreischte kreischten kreischtet Kreisdirektion -kreise Kreise Kreisel kreiseln kreiselnden Kreisels -kreisen Kreisen kreisende kreisenden @@ -71157,9 +70774,7 @@ krepierendes krepiert Kresse Kreta -kreuz Kreuz -kreuze Kreuze kreuzen kreuzende @@ -71201,9 +70816,7 @@ kriechender kriechendes kriechst Krieg -kriege Kriege -kriegen Kriegen Krieger kriegerisch @@ -71291,7 +70904,6 @@ Kriminalroman kriminell kriminelle kriminellem -kriminellen Kriminellen krimineller kriminelles @@ -71314,7 +70926,6 @@ krisensicher krisenunabhängig Kristall Kristalle -kristallen Kristallen kristallenen Kristallgitters @@ -71464,7 +71075,6 @@ kubanische Kubas Kübel Kübeln -kubik Kubik Kubiken Kubikmeter @@ -71505,7 +71115,6 @@ kugelförmiges Kugelgelenk kugelig kugeliger -kugeln Kugeln Kugelradius Kugelschale @@ -71783,7 +71392,6 @@ kurbelt Kurbelwelle Kürbis Kurde -kuren Kuren küren Kurgästen @@ -71791,7 +71399,6 @@ Kurgastes Kurie Kurier Kurierdienst -kurieren Kurieren kurierten kurios @@ -71847,7 +71454,6 @@ Kurt Kurtisane Kurtisanen Kurve -kurven Kurven Kurvendiagramme kurvenreichen @@ -71866,7 +71472,6 @@ Kurzbezeichnung Kurzdarstellung Kurzdokumentation kurze -kürze Kürze Kürzel Kürzeln @@ -71947,7 +71552,6 @@ Kusinen Kuss Küsschen küsse -küssen Küssen küssend küssende @@ -72046,7 +71650,6 @@ Labyrinthes labyrinthischen lach lächele -lächeln Lächeln lächelnd lächelnden @@ -72085,7 +71688,6 @@ lachtest lachtet Lack Lackanstriche -lacke Lacke lacken lackiere @@ -72109,7 +71711,6 @@ ladefähig Ladefläche Ladeflächen Ladehemmung -laden Laden Läden ladend @@ -72710,7 +72311,6 @@ Laterne Laternen Laternenpfahl Latex -LaTeX Latifundien Latifundium Latinum @@ -72729,7 +72329,6 @@ Lauch Lauches laue lauem -lauer Lauer lauere lauerem @@ -72741,7 +72340,6 @@ Lauerstellung lauert lauerte lauerten -lauf Lauf Laufbahn laufe @@ -72847,9 +72445,7 @@ lauste laustem lauster laustes -laut Laut -laute Laute lautem lauten @@ -72926,7 +72522,6 @@ least leb Lebedame Lebedamen -leben Leben lebend lebende @@ -73129,7 +72724,6 @@ lebtet Lebzeiten lechzen lechzt -leck Leck lecke lecken @@ -73270,7 +72864,6 @@ Lehrbrief Lehrbuch Lehrbücher Lehrbüchern -lehre Lehre lehren lehrend @@ -73463,7 +73056,6 @@ leichtsinnigste leichtsinnigstem leichtsinnigsten leichtsinnigstes -leid Leid leide leiden @@ -73953,7 +73545,6 @@ Libyer libysch libysche lich -licht Licht Lichtanlagen Lichtbild @@ -73984,7 +73575,6 @@ lichtempfindlichstes lichten lichtende lichtenden -lichtender Lichtender lichter lichterloh @@ -74212,7 +73802,6 @@ Lieferwagen Lieferwagens Lieferzeit lieft -liege Liege liegen liegend @@ -74258,7 +73847,6 @@ Lilie Liliputaner Lima Limerick -limes Limes Limit Limitation @@ -74369,9 +73957,7 @@ lispele lispeln lisple List -liste Liste -listen Listen Listenpreis listenreich @@ -74488,7 +74074,6 @@ lochende lochenden lochender Löcher -löchern Löchern Loches Lochkarten @@ -74502,7 +74087,6 @@ lochtest lochtet Lochung locke -locken Locken lockende lockenden @@ -74578,7 +74162,6 @@ logische logischem logischen logischer -logischerweise Logischerweise logisches Logistik @@ -74598,7 +74181,6 @@ Lohnbüro Löhne Lohnempfänger lohnen -löhnen Löhnen lohnend lohnende @@ -74639,7 +74221,6 @@ lohnten Lohnzahlung Lohnzettel Loipe -lokal Lokal lokalbedingt lokale @@ -74692,7 +74273,6 @@ Lords Lore Lorelei Loren -los Los lösbar lösbare @@ -74892,7 +74472,6 @@ LPG LPT lt Lübeck -luchs Luchs luchsen Lücke @@ -75008,12 +74587,10 @@ Luftwiderstand Luftzug Luftzüge Luftzügen -lug Lug Lugano lüge lugen -lügen Lügen Lügendetektor Lügerei @@ -75034,7 +74611,6 @@ lukullisch lukullischen lukullischer Lukullismen -lümmel Lümmel lümmelte Lumpen @@ -75277,7 +74853,6 @@ Magenleiden Magenleidens Magens Magenschmerzen -magenta Magenta mager magere @@ -75445,7 +75020,6 @@ makroskopischen makroskopischer makroskopisches Makulatur -mal Mal malaiischen Malaria @@ -75474,7 +75048,6 @@ maliziös maliziöser Mallorca Malmö -maloche Maloche Malprogramme malst @@ -75558,7 +75131,6 @@ mangelndes Mangelpunkt Mängelpunkte Mängelrüge -mangels Mangels mangelt mangelte @@ -75723,11 +75295,9 @@ Marienkäfer Marienkäfern Marihuana marin -marine Marine marineblaue marinem -marinen Marinen Marineoffizier Marineoffiziere @@ -75961,7 +75531,6 @@ Maskottchen maskulin Masochismus masochistisch -maß Maß Massage Massagen @@ -75984,7 +75553,6 @@ Maße Maßeinheit Maßeinheiten Massen -maßen Maßen Massenänderung Massenandrang @@ -76099,7 +75667,6 @@ massigsten mäßigte mäßigten Mäßigung -massiv Massiv massive massivem @@ -76246,12 +75813,9 @@ matschigstem matschigsten matschigstes matt -matte Matte mattem -matten Matten -matter Matter mattere matterem @@ -76272,12 +75836,10 @@ Mattscheibe mattschwarz Mattsetzen Maturität -mauer Mauer Mauerblümchen Mauerblümchens Mauerdurchlass -mauern Mauern mauernde Mauersteinen @@ -76313,7 +75875,6 @@ Mauritius Maus Mäuse Mäusen -mauser Mauser mausern mausert @@ -76649,7 +76210,6 @@ Meinungsverschiedenheit Meinungsverschiedenheiten Meise Meißel -meißeln Meißeln Meißen meist @@ -76662,7 +76222,6 @@ meiste meisten meistens meistenteils -meister Meister meistere meisterhaft @@ -76682,7 +76241,6 @@ meisterliche meisterlichen meisterlicher meisterliches -meistern Meistern meisternd Meisterprüfung @@ -76765,7 +76323,6 @@ Memo Memoiren Memorandum Menge -mengen Mengen Mengenänderung Mengenberechnung @@ -77064,7 +76621,6 @@ Metall Metallarbeiter Metallarbeiters Metalle -metallen Metallen metallene metallenen @@ -77181,7 +76737,6 @@ mieden Mieder Miederwaren miedest -mief Mief Miene Mienen @@ -77287,7 +76842,6 @@ Mieze Migräne Mikado Mike -mikro Mikro Mikrobe Mikroben @@ -77866,7 +77420,6 @@ Misstimmung misstönen misstönenden misstraue -misstrauen Misstrauen Misstrauens Misstrauensantrag @@ -78004,7 +77557,6 @@ Mitbürger Mitbürgerin Mitbürgerinnen Mitbürgern -mitdenken Mitdenken Miteigentum Miteigentümer @@ -78331,7 +77883,6 @@ Mitteilung Mitteilungen Mitteilungsblätter mitteilungsgemäß -mittel Mittel Mittelachse Mittelalter @@ -78397,7 +77948,6 @@ mittelmäßigsten mittelmäßigstes Mittelmeer Mittelmeers -mitteln Mitteln Mittelpunkt Mittelpunkte @@ -78407,7 +77957,6 @@ Mittelpunkts Mittelpunktsformel Mittelpunktsformeln Mittelpunktslage -mittels Mittels Mittelschule Mittelschulen @@ -78492,7 +78041,6 @@ mitwirkte mitwirkten Mitwirkung Mitwirkungspflicht -mitwissen Mitwissen Mitwissern Mitwissers @@ -78531,7 +78079,6 @@ Mnemotechnik Mob Möbel Möbelgeschäft -möbeln Möbeln Möbels Möbelstück @@ -78862,7 +78409,6 @@ Monitor Monitore Monitoren Monitors -mono Mono monochromatische monogam @@ -78939,7 +78485,6 @@ Moos moosigen Moped Mopeds -mops Mops Möpse Moral @@ -79048,7 +78593,6 @@ moslemisch Moslems Most Moste -mosten Mosten Motel Motiv @@ -79124,7 +78668,6 @@ Müdigkeit Muffe muffig muffige -mühe Mühe mühelos mühelose @@ -79190,7 +78733,6 @@ Mülltonne Mülltonnen Müllverbrennungsanlagen mulmig -multi Multi multifunktional Multilinearität @@ -79296,9 +78838,7 @@ munteres munterstem muntersten munterster -münze Münze -münzen Münzen Münzer Münzgeld @@ -79448,7 +78988,6 @@ Musterlieferung Mustermesse Mustermietvertrag Mustermietverträgen -mustern Mustern musternd musternde @@ -79714,7 +79253,6 @@ nacherzählten nacherzähltes Nacherzählung Nacherzählungen -nachfahre Nachfahre nachfahrt nachfolge @@ -79742,7 +79280,6 @@ nachforscht Nachforschung Nachforschungen nachfrage -nachfragen Nachfragen nachfühlen nachfühlend @@ -79940,7 +79477,6 @@ nachhelfend nachher Nachhilfe Nachhilfestunde -nachhinein Nachhinein Nachholbedarf Nachholbedarfs @@ -79951,7 +79487,6 @@ Nachhut nachjagen nachkäme nachkämen -nachklang Nachklang Nachklänge nachklängen @@ -79961,7 +79496,6 @@ nachklingendem nachklingender nachklingendes nachkomme -nachkommen Nachkommen Nachkommens Nachkommenschaft @@ -80007,7 +79541,6 @@ nachmachender nachmachendes nachmessen nachmessend -nachmittag Nachmittag Nachmittagen nachmittags @@ -80028,7 +79561,6 @@ nachrechnendes nachrechnet Nachrede Nachreden -nachreichen Nachreichen Nachreichung nachrennen @@ -80143,7 +79675,6 @@ nachsuchendem nachsuchender nachsuchendes nachsuchte -nacht Nacht Nachtangriff Nachtarbeit @@ -80265,7 +79796,6 @@ nachwirkender nachwirkt Nachwirkung Nachwirkungen -nachwuchs Nachwuchs nachwuchsen Nachwuchses @@ -80370,7 +79900,6 @@ Nahaufnahmen nahbar Nahbereich nahe -nähe Nähe nahegerückt nahen @@ -80597,7 +80126,6 @@ Nashörner nass Nassau nasse -nässe Nässe nassem nassen @@ -80869,7 +80397,6 @@ Negation Negationen negativ Negativbescheinigungen -negative Negative negativem negativen @@ -80994,11 +80521,8 @@ Neonazismus Neonlicht Neons Nepal -nepp Nepp -nerv Nerv -nerven Nerven Nervenarzt nervenaufreibend @@ -81199,7 +80723,6 @@ neueste neuestem neuesten neuester -neuestes Neuestes Neufestsetzung neuformieren @@ -81376,11 +80899,8 @@ Newton Newtonmeter Newtons newtonsche -Newton'sche newtonschen -Newton'schen newtonsches -Newton'sches Nicaragua nicht Nichtachtung @@ -81694,7 +81214,6 @@ nieste niesten niestest Niet -niete Niete nieten Niethosen @@ -81832,7 +81351,6 @@ nonkonformistisches Nonne Nonnen Nonplusultra -nord Nord Nordafrika nordafrikanischen @@ -81900,7 +81418,6 @@ Nordzipfel nörgeln nörgelt nörgelten -norm Norm normal Normalausführung @@ -81966,7 +81483,6 @@ Normanne normativ normative norme -normen Normen Normenausschuss normgerecht @@ -82167,7 +81683,6 @@ nuklear nukleare nuklearen nukleares -null Null Nulldurchgänge Nullen @@ -82197,7 +81712,6 @@ nummeriertes nummeriertet Nummerierung Nummerierungen -nummern Nummern Nummernfolge Nummernkonten @@ -82232,10 +81746,8 @@ nutzbringende nutzbringenden nutzbringender nutzbringendes -nutze Nutze nütze -nutzen Nutzen nützen Nutzenanalyse @@ -82330,7 +81842,6 @@ obenliegendem obenliegenden obenliegender obenliegendes -ober Ober Oberammergau Oberarm @@ -82509,7 +82020,6 @@ obwohl obzwar Ochs Ochse -ocker Ocker ockergelb ockergelbe @@ -82680,7 +82190,6 @@ oh Oheim Ohio ohmsche -Ohm'sche ohmschen ohmscher ohne @@ -82821,7 +82330,6 @@ Olympiasiegerin Olympiastadion Olympiastadions olympisch -olympische Olympische olympischen olympischer @@ -82971,11 +82479,9 @@ Optokoppler opulent opulenter Opus -orange Orange orangefarbene orangem -orangen Orangen orangenfarbene Orangensaft @@ -82986,7 +82492,6 @@ oranges Oratorium Oratoriums Orbital -orbitale Orbitale Orbitales Orbitals @@ -83169,7 +82674,6 @@ Orientierungspreis Orientierungspunkt Orientierungsrahmen Orients -original Original Originalantwort Originalausgabe @@ -83203,9 +82707,7 @@ Ornament Ornamenten Ort Ortbändern -orte Orte -orten Orten ortend ortende @@ -83409,9 +82911,7 @@ Ozon Ozonschicht paar Paarbildung -paare Paare -paaren Paaren Paares paart @@ -83527,7 +83027,6 @@ Paläste Palästen Palastes Palästinenser -palaver Palaver palavern Palermo @@ -83641,7 +83140,6 @@ Pappband Pappbände Pappbandes Pappbecher -pappe Pappe Pappel Pappeln @@ -83725,10 +83223,8 @@ Paragraphen Paragraphenreiter Paraguay parallel -parallele Parallele parallelem -parallelen Parallelen paralleler paralleles @@ -83956,7 +83452,6 @@ Parteivorsitz Parteivorsitzende Parteivorstände Partenkirchen -parterre Parterre partial Partie @@ -84004,7 +83499,6 @@ Parzellen parzelliert parzellierten Pascal -PASCAL Pascha Pass passabel @@ -84022,7 +83516,6 @@ Passagierin Passagiers Passagierschiff Passagierschiffes -passant Passant Passanten Passau @@ -84134,7 +83627,6 @@ Patenkind Patenschaft Patenschaften Patenstelle -patent Patent Patentamt Patentämter @@ -84245,12 +83737,10 @@ patrouillierst patrouillierte patrouillierten patrouilliertest -patsche Patsche Pattstellung patzen Patzer -pauke Pauke Paukenschlag Paukenschläge @@ -84267,7 +83757,6 @@ Pauschalabgeltung Pauschalbetrag pauschale pauschalem -pauschalen Pauschalen pauschaleren pauschales @@ -84279,7 +83768,6 @@ Pauschalreisen pauschalste Pauschalverurteilung Pause -pausen Pausen pausenlos pausenlosem @@ -84524,7 +84012,6 @@ Peripheriekonzept Peripherien Perkussionist perle -perlen Perlen perlend perlende @@ -84767,7 +84254,6 @@ Pfennigfuchser Pfennigs Pfennigstück Pferch -pferche Pferche pferchen Pferd @@ -84787,7 +84273,6 @@ Pferdestärke Pferdestärken Pfg pfiff -pfiffe Pfiffe pfiffig pfiffige @@ -84804,7 +84289,6 @@ Pfirsich Pfirsiche Pfirsichen pflanze -pflanzen Pflanzen pflanzend pflanzende @@ -84852,7 +84336,6 @@ Pflaume Pflaumen Pflaumenbaum pflaumenblaues -pflege Pflege Pflegeanstalt pflegebedürftig @@ -84913,7 +84396,6 @@ pflichteifrige pflichteifrigen pflichteifriger pflichteifriges -pflichten Pflichten Pflichtenheft Pflichtenkreis @@ -85105,7 +84587,6 @@ philosophischen philosophischer philosophisches Phlegma -phon Phon Phonetik phonetisch @@ -85191,7 +84672,6 @@ pickten piekfein piepen piepse -piepsen Piepsen Piepser piepste @@ -85338,14 +84818,12 @@ Plakatmaler Plakatsäule Plakette Plaketten -plan Plan planare planaren planarer plane Pläne -planen Planen Plänen planende @@ -85466,11 +84944,9 @@ Plättchen Plättchens plattdeutsch Plattdeutsche -platte Platte plätte plattem -platten Platten Plattendicke Plattendicken @@ -85554,7 +85030,6 @@ plausiblerer plausibles Play-back Playboy -pleite Pleite pleitebedroht Pleiten @@ -85598,7 +85073,6 @@ plünderten plündertet Plünderung Plünderungen -plural Plural Plurale Pluralismus @@ -85668,7 +85142,6 @@ pokerte Pol polar Polarachse -polare Polare polarem polaren @@ -85706,7 +85179,6 @@ Polarstern Polarwinkel Polarwinkels Poldistanz -pole Pole Polemik Polemiken @@ -85727,7 +85199,6 @@ polemisiertem polemisierter polemisiertes polemisiertest -polen Polen Polens Polente @@ -85854,7 +85325,6 @@ Polygonzüge Polygonzügen Polygonzuges polykristalline -polymer Polymer Polymere Polymeren @@ -86001,7 +85471,6 @@ Portweinen Portweines Porzellan Porzellane -posaune Posaune posaunen posaunet @@ -86494,7 +85963,6 @@ predigt predigte predigten predigtest -preis Preis Preisabbau Preisabschlag @@ -86511,11 +85979,9 @@ preisbereinigt preisbewusst Preisbildung Preisdifferenz -preise Preise Preisempfehlung Preisempfehlungen -preisen Preisen preisenden preisender @@ -86625,7 +86091,6 @@ Premierminister Premierministerin Presbyterianer preschen -presse Presse Presseamt Presseamtes @@ -86674,7 +86139,6 @@ Priestern Priesterrock Priestertum Priesterweihe -prim Prim prima Primaballerina @@ -86818,7 +86282,6 @@ Probelauf Probeläufe probelesen Probelieferung -proben Proben Probenarbeit probende @@ -87610,7 +87073,6 @@ prunkvoll prunkvolle prunkvollen pseudo -pseudonym Pseudonym pseudonymen Pseudonyms @@ -87686,7 +87148,6 @@ Pudelmütze Pudels pudelwohl Puder -pudern Pudern Puders puderte @@ -87739,9 +87200,7 @@ pulvern Pulvers pulverte Puma -pump Pump -pumpe Pumpe pumpen pumpende @@ -87760,7 +87219,6 @@ Punk Punkt Punkte Punktekämpfe -punkten Punkten Punktepaar Punktes @@ -87812,9 +87270,7 @@ Punktzeile Punsch Pupille Pupillen -puppe Puppe -puppen Puppen Puppenspieler Puppenwagen @@ -87861,7 +87317,6 @@ putschen putscht putschte Pütt -putz Putz putze putzen @@ -87930,7 +87385,6 @@ quäkendsten quäkendster Quäker Quäkers -qual Qual quäle quälen @@ -88086,9 +87540,7 @@ Quatsch Quebec Quell Quelldatei -quelle Quelle -quellen Quellen Quellenangabe Quellensteuer @@ -88104,7 +87556,6 @@ quellten quer Querachse Querachsen -quere Quere Querelement Querelemente @@ -88118,7 +87569,6 @@ Querschlägers Querschnitt Querschnitte Querschnitten -querschnittgelähmte Querschnittgelähmte Querschnitts Querschnittsfläche @@ -88252,7 +87702,6 @@ rächte rächten rächtest rächtet -rad Rad Radar Radaranlage @@ -88329,9 +87778,7 @@ radiertet Radierung Radierungen Radieschen -radikal Radikal -radikale Radikale radikalem radikalen @@ -88441,7 +87888,6 @@ ragte ragten ragtest Rahm -rahmen Rahmen Rahmenabkommens Rahmenbedingung @@ -88518,7 +87964,6 @@ Randbereich Rande Randeffekte Ränder -rändern Rändern Randerscheinung Randes @@ -88548,10 +87993,8 @@ Randwert Randwerte Randwerten Randzone -rang Rang Rangältesten -ränge Ränge rangen rängen @@ -88692,7 +88135,6 @@ rassische Rassismus rassistisch rassistischer -rast Rast raste rasten @@ -88949,9 +88391,7 @@ Raumaufteilung Raumbedarf Raumdiagonalen Raume -räume Räume -räumen Räumen räumend räumende @@ -89026,7 +88466,6 @@ raus rausbekommen Rausch rausche -rauschen Rauschen rauschend rauschende @@ -89057,7 +88496,6 @@ räuspere räuspern räuspert räusperte -rausschmiss Rausschmiss raussuchen rauszubekommen @@ -89084,7 +88522,6 @@ reagierte reagierten reagiertest Reaktion -reaktionär Reaktionär reaktionäre reaktionärem @@ -89177,7 +88614,6 @@ rebellisches Reben Rebenblätter Rechaud -rechen Rechen Rechenanlage Rechenanlagen @@ -89249,7 +88685,6 @@ Rechnungsprüfern Rechnungsprüfers Rechnungsprüfung Rechnungswesens -recht Recht rechte Rechteck @@ -89309,7 +88744,6 @@ rechtmäßigen rechtmäßiger rechtmäßiges Rechtmäßigkeit -rechts Rechts Rechtsamt Rechtsanspruch @@ -89489,7 +88923,6 @@ rechtzeitige rechtzeitigen rechtzeitiger rechtzeitiges -reck Reck Recke recken @@ -89744,7 +89177,6 @@ regelmäßigstes Regelmechanismen Regelmechanismus Regelmöglichkeit -regeln Regeln regelnde regelndem @@ -89770,7 +89202,6 @@ regelwidriger Regelwidrigkeit Regelzugang regem -regen Regen Regenbogen Regenbögen @@ -90016,9 +89447,7 @@ reibungsloses Reibungstensor Reibungstensors Reibungsterm -reich Reich -reiche Reiche reichen reichend @@ -90081,7 +89510,6 @@ Reichweiten reif reife reifem -reifen Reifen reifende reifendem @@ -90119,9 +89547,7 @@ reiftest reiftet Reifung Reigen -reihe Reihe -reihen Reihen Reihenfolge Reihenhaus @@ -90218,7 +89644,6 @@ reinwaschende reinwascht reinzogen Reis -reise Reise Reiseantritt Reisebegleiter @@ -90258,9 +89683,7 @@ reisen reisend Reisende reisendem -reisenden Reisenden -reisender Reisender Reisepass Reisepässe @@ -90925,7 +90348,6 @@ retournierter retourniertes retourniertest retrospektiv -retrospektive Retrospektive retrospektiver rette @@ -91029,7 +90451,6 @@ revoltieren revoltierenden Revolution revolutionär -revolutionäre Revolutionäre revolutionären revolutionärer @@ -91126,7 +90547,6 @@ richtiger richtigerem richtigeren richtigerer -richtiges Richtiges Richtigkeit Richtigstellung @@ -91246,10 +90666,8 @@ Rindern Rindfleisch Rinds Ring -ringe Ringe ringelten -ringen Ringen ringend ringendem @@ -91267,7 +90685,6 @@ Ringkampf Ringkämpfen Ringkampfes Ringrichter -rings Rings ringst ringsum @@ -91323,11 +90740,8 @@ riskiert riskierte riskierten riskiertet -riss Riss -risse Risse -rissen Rissen rissig rissige @@ -91343,10 +90757,8 @@ rissigsten rissigstes Rita Riten -ritt Ritt ritte -ritten Ritten Ritter ritterlich @@ -91358,7 +90770,6 @@ rittest rittlings rittst Ritual -rituale Rituale Ritualen ritualisiert @@ -91368,7 +90779,6 @@ rituelle rituellem rituellen rituelles -ritze Ritze Ritzel ritzen @@ -91398,7 +90808,6 @@ rivalisiertest Rivalität Riviera Rizinus -robbe Robbe robben robbt @@ -91486,7 +90895,6 @@ Rohrbruchs Rohre Röhre Rohren -röhren Röhren röhrenförmig röhrenförmigem @@ -91502,9 +90910,7 @@ Rohstoffpreise Rohstoffpreisen Rohware Roland -rolle Rolle -rollen Rollen Rollenbesetzung rollendem @@ -91563,7 +90969,6 @@ römischen römischer römisches Ronald -röntgen Röntgen Röntgenaufnahme Röntgenstrahlen @@ -91643,7 +91048,6 @@ Rotationskörpers Rotationswirkung rotbraun rote -röte Röte Röteln rotem @@ -91712,7 +91116,6 @@ Rubins Rubrik Rubriken ruchbar -ruck Ruck Rückansicht Rückantwort @@ -91920,7 +91323,6 @@ rudimentär rudimentäre rudimentäres Rudolf -ruf Ruf rufe rufen @@ -91939,7 +91341,6 @@ Rugby rügen rügte ruh -ruhe Ruhe Ruhebedürftigkeit Ruhelage @@ -92135,7 +91536,6 @@ runtergeschraubt runtergezählt Runzel runzele -runzeln Runzeln runzle runzlig @@ -92209,7 +91609,6 @@ Rutsch Rutschbahn Rutschbahnen rutsche -rutschen Rutschen rutschend rutschende @@ -92368,11 +91767,9 @@ Sachverhalts Sachverhaltsaufklärung Sachvermögen Sachverstand -sachverständige Sachverständige Sachverständigen Sachverständigenstellen -sachverständiger Sachverständiger Sachvortrag Sachwert @@ -92419,7 +91816,6 @@ saftloses Safts sag Saga -sage Sage säge Sägeblatt @@ -92462,7 +91858,6 @@ Sägewerke Sägewerken Sägewerks sägezahnförmig -sag's sagst sagt sägt @@ -92625,7 +92020,6 @@ Salzbergwerke Salzbergwerken Salzburg Salzburgs -salze Salze salzen Salzes @@ -92708,9 +92102,7 @@ Samstage Samstagen Samstagnachmittag samstagnachts -samstags Samstags -samt Samt samtartig samtartige @@ -93042,7 +92434,6 @@ Sauce Saucen Sauciere Säue -sauen Sauen sauer Sauerbraten @@ -93327,7 +92718,6 @@ Schädel Schädelbruch Schädeldecke Schädeln -schaden Schaden Schäden schadend @@ -93491,14 +92881,11 @@ schäkerte schäkerten schäkertest schäkertet -schal Schal Schälchen -schale Schale schäle schalem -schalen Schalen schälen schälend @@ -93869,7 +93256,6 @@ Schatzämter Schatzamtes Schatzanweisung Schätzchen -schätze Schätze schätzen schätzenswert @@ -93897,7 +93283,6 @@ Schätzung Schätzungen Schätzwert Schätzwerte -schau Schau Schaubild Schaubilder @@ -93934,7 +93319,6 @@ schauend schauenden schauender schauendes -schauer Schauer schauerartig schauerlich @@ -94456,7 +93840,6 @@ Schichtarbeit Schichtarbeiter Schichtarbeitern Schichtarbeiters -schichten Schichten schichtend schichtende @@ -94540,7 +93923,6 @@ schief schiefe schiefem schiefen -schiefer Schiefer Schieferdach schiefere @@ -94649,9 +94031,7 @@ schiffbrüchiger Schiffbruchs Schiffbrücke Schiffchen -schiffe Schiffe -schiffen Schiffen schiffend schiffende @@ -94840,7 +94220,6 @@ schindete Schinken Schinkenwürste Schirm -schirme Schirme schirmen schirmend @@ -94886,7 +94265,6 @@ Schlachtbeilen Schlachtbeiles Schlachtbeils schlachte -schlachten Schlachten schlachtend schlachtende @@ -94925,14 +94303,12 @@ Schlachtung Schlachtvieh Schlachtviehs Schlacke -schlacken Schlacken schlackern schlackernd schlackernde schlackerst schlackig -schlaf Schlaf Schlafanzug Schlafanzügen @@ -95142,7 +94518,6 @@ schlammigem schlammigen schlammiger schlammiges -schlampe Schlampe schlampen Schlamperei @@ -95161,7 +94536,6 @@ schlängelnde schlängelnder schlängelndes schlängelte -schlangen Schlangen Schlangenbiss Schlangenbisse @@ -95210,7 +94584,6 @@ Schlaraffenland Schlaraffenlandes schlau Schlauberger -schlauch Schlauch Schlauchboot Schlauchbooten @@ -95237,7 +94610,6 @@ Schlawiner schlecht schlechte schlechtem -schlechten Schlechten schlechter schlechterdings @@ -95291,9 +94663,7 @@ schleierhaftestem schleierhaftester schleierhaftestes Schleiers -schleife Schleife -schleifen Schleifen schleifend schleifende @@ -95363,7 +94733,6 @@ schlenkert schlenkerte schlenkerten schlenkertet -schlepp Schlepp schleppe schleppen @@ -95413,9 +94782,7 @@ schleunigste schleunigsten schleunigster schleunigstes -schleuse Schleuse -schleusen Schleusen Schleusentor schleust @@ -95428,7 +94795,6 @@ schlichten schlichtende schlichtenden schlichtender -schlichter Schlichter schlichtere schlichterem @@ -95460,7 +94826,6 @@ schliefet schlieft schlierenartig schließe -schließen Schließen schließend schließende @@ -95476,7 +94841,6 @@ schließlich schließt Schließung Schließungen -schliff Schliff schliffen Schliffs @@ -95488,7 +94852,6 @@ schlimmer schlimmere schlimmerem schlimmerer -schlimmeres Schlimmeres schlimmes schlimmsten @@ -95536,7 +94899,6 @@ schlohweiße schlohweißem schlohweißer schlohweißes -schloss Schloss schlossen Schlosser @@ -95573,7 +94935,6 @@ Schlucht Schluchten Schluchtwandern schluchze -schluchzen Schluchzen schluchzend schluchzende @@ -95701,7 +95062,6 @@ Schlüsselindustrien Schlüssellöcher Schlüssellöchern Schlüsselloches -schlüsseln Schlüsseln Schlüsselnummern Schlüsselposition @@ -95937,7 +95297,6 @@ schmelzbare schmelzbaren schmelzbarer schmelzbares -schmelze Schmelze schmelzen schmelzend @@ -95958,7 +95317,6 @@ Schmerbäuche Schmerbäuchen Schmerbauches Schmerz -schmerzen Schmerzen schmerzend schmerzende @@ -96096,7 +95454,6 @@ Schmierung Schmierungen Schmierzettel schmilzt -schminke Schminke schminken schminkende @@ -96156,7 +95513,6 @@ schmorte schmorten schmortest schmortet -schmuck Schmuck schmucke schmücke @@ -96361,7 +95717,6 @@ schnauftest Schnauzbart Schnauzbärte Schnauzbartes -schnauze Schnauze schnäuze schnäuzen @@ -96442,7 +95797,6 @@ schneeweiße schneeweißem schneeweißer schneeweißes -schneid Schneid Schneidbrenner Schneidbrennern @@ -96561,7 +95915,6 @@ schneuzendes schniefen schniegeln Schnippchen -schnippel Schnippel schnippeln schnippelnd @@ -96577,12 +95930,10 @@ schnippisch schnippischen schnippischer schnippisches -schnitt Schnitt Schnittblumen Schnittbohnen Schnitte -schnitten Schnitten Schnittern Schnittes @@ -96717,7 +96068,6 @@ Schnuller Schnullern Schnulze Schnulzen -schnupfen Schnupfen schnupfende schnupfenden @@ -96733,7 +96083,6 @@ Schnupftuch Schnupftücher Schnupftüchern Schnupftuches -schnuppe Schnuppe schnuppere schnuppern @@ -96791,7 +96140,6 @@ schob schoben Schober Schobern -schock Schock schocke schocken @@ -97021,9 +96369,7 @@ schränktet Schranktüren Schraubdeckeln Schraubdeckels -schraube Schraube -schrauben Schrauben Schraubendampfer Schraubenfeder @@ -97050,10 +96396,8 @@ Schraubverschlüssen Schraubverschlusses Schrebergärten Schrebergartens -schreck Schreck schrecke -schrecken Schrecken schreckend schreckenden @@ -97084,7 +96428,6 @@ schrecklichere schrecklicherem schrecklicherer schrecklicheres -schreckliches Schreckliches schrecklichstem schrecklichsten @@ -97102,7 +96445,6 @@ schreckte schreckten schrecktest schrecktet -schrei Schrei Schreibarbeit Schreibaufwand @@ -97289,15 +96631,11 @@ schrillstem schrillsten schrillstes schrillt -schritt Schritt -schritte Schritte -schritten Schritten Schrittes schrittet -schritthalten Schritthalten Schrittmacher Schrittmachers @@ -97428,7 +96766,6 @@ schüchternster schuf schufen schufst -schuft Schuft schuften Schufterei @@ -97488,7 +96825,6 @@ Schulbücher Schulbüchern Schulbuches Schulbuchs -schuld Schuld Schuldanerkenntnis schuldbeladen @@ -97500,7 +96836,6 @@ schuldbewusste schuldbewussten schuldbewusster schuldbewusstes -schulden Schulden Schuldenbergs schuldend @@ -97653,7 +96988,6 @@ Schulterblatt schultere schulterfrei Schulterklappe -schultern Schultern schulternde schulternden @@ -97750,7 +97084,6 @@ schürte schürten schürtest Schurz -schürze Schürze schürzen Schurzes @@ -97785,7 +97118,6 @@ Schusslinien Schusswaffe Schussweite Schusswunde -schuster Schuster schustere schustern @@ -97805,7 +97137,6 @@ schütte schüttele Schüttelfrost Schüttelfrosts -schütteln Schütteln schüttelnd schüttelnde @@ -97852,9 +97183,7 @@ Schutzbrillen Schutzdächer Schutzdächern Schutzdaches -schütze Schütze -schützen Schützen schützend schützendem @@ -97945,12 +97274,10 @@ schwäbische schwäbischen schwach schwache -schwäche Schwäche Schwächeanfälle schwachem schwachen -schwächen Schwächen schwächend schwächende @@ -98037,7 +97364,6 @@ Schwall Schwälle Schwallen Schwalls -schwamm Schwamm Schwammbefall Schwämme @@ -98153,7 +97479,6 @@ Schwarzbrots schwarze schwarzem schwarzen -schwärzen Schwärzen schwärzend schwärzende @@ -98227,7 +97552,6 @@ schwatzt schwatzte schwatzten schwatztest -schwebe Schwebe Schwebebahn Schwebebalken @@ -98441,7 +97765,6 @@ Schwemmlandes schwemmt schwemmte schwemmten -schwenk Schwenk Schwenkarm Schwenkarme @@ -98880,14 +98203,12 @@ sechswöchig sechzehn sechzehntausend sechzehnte -sechzehntel Sechzehntel sechzehntem sechzehnten sechzehnter sechzehntes sechzig -sechziger Sechziger Sechzigern Sechzigers @@ -99150,7 +98471,6 @@ Sehfeldern Sehkraft sehn sehne -sehnen Sehnen sehnende Sehnenscheidenentzündung @@ -99288,7 +98608,6 @@ seimige seimigem seimigen seimiges -sein Sein seine seinem @@ -99310,7 +98629,6 @@ seist seit seitdem Seite -seiten Seiten Seitenanfang Seitenangabe @@ -99768,7 +99086,6 @@ senilste senilstem senilsten senilstes -senior Senior Senioren Seniors @@ -100016,7 +99333,6 @@ setzte setzten setztest Seuche -seuchen Seuchen Seuchenherd seufze @@ -100250,13 +99566,11 @@ siebzehn siebzehnjährig siebzehnt siebzehnte -siebzehntel Siebzehntel siebzehntem siebzehnten siebzehntes siebzig -siebziger Siebziger Siebzigerinnen Siebzigers @@ -100309,7 +99623,6 @@ Sieg siege Siegel Siegellack -siegeln Siegeln siegelnd Siegelring @@ -100367,7 +99680,6 @@ sieh siehe siehst sieht -siel Siel Siemens Siesta @@ -100543,7 +99855,6 @@ sinnbildlich sinnbildlichem sinnbildlicher sinnbildliches -sinne Sinne sinnen sinnende @@ -100739,7 +100050,6 @@ situierte situiertem situierten situiertes -sitz Sitz Sitzbad sitze @@ -100779,7 +100089,6 @@ sizilianisches Sizilien Skala Skalar -skalare Skalare Skalaren skalares @@ -100996,7 +100305,6 @@ Sofortmaßnahmen Software Softwarehaus Softwarepakets -sog Sog sogar sogen @@ -101008,7 +100316,6 @@ Sohlenleder Sohlenleders Sohn Söhne -söhnen Söhnen Sohnes Sohns @@ -101070,7 +100377,6 @@ solidesten solidestes Solidität Solist -soll Soll Sollbeschaffenheit Sollbruchstelle @@ -101080,7 +100386,6 @@ Söller Sollmaß Sollmenge Solls -soll's sollst Sollstärke sollte @@ -101089,7 +100394,6 @@ solltest solltet Sollwert Sollzustand -solo Solo Solostimme Solquellen @@ -101237,9 +100541,7 @@ Sonnabend Sonnabende Sonnabenden sonnabends -sonne Sonne -sonnen Sonnen Sonnenaufgang Sonnenaufgänge @@ -101348,7 +100650,6 @@ Sopranen Sopranist Sopranisten Sopranistinnen -sorge Sorge sorgen sorgend @@ -101438,7 +100739,6 @@ Souffleusen soundsovielte Souterrain Souterrains -souverän Souverän souveräne souveränen @@ -101582,9 +100882,7 @@ Spalieren Spaliers Spalt spaltbaren -spalte Spalte -spalten Spalten spaltende spaltenden @@ -101616,11 +100914,9 @@ spanischen spanischer spanisches spanlos -spann Spann Spannbeton Spannbetons -spanne Spanne spannen spannend @@ -101851,7 +101147,6 @@ Speere Speeren Speerwurf Speiche -speichel Speichel Speicheldrüsen Speichelfluss @@ -101897,7 +101192,6 @@ Speisefettes Speisekammer Speisekammern Speisekarte -speisen Speisen speisend speisende @@ -101936,7 +101230,6 @@ spektakulären spektakuläres spektakulärsten Spektra -spektral Spektral Spektralanalyse Spektralanalysen @@ -102381,13 +101674,10 @@ spitzbübisch Spitzdach Spitzdächer Spitzdachs -spitze Spitze Spitzel -spitzeln Spitzeln Spitzels -spitzen Spitzen Spitzenbelastung Spitzenbewertung @@ -102620,7 +101910,6 @@ Sprache spräche Spracheigentümlichkeit Spracheigentümlichkeiten -sprachen Sprachen sprächen Sprachenumschaltung @@ -102889,10 +102178,8 @@ spröderes sprödstem sprödsten sprödstes -spross Spross Sprosse -sprossen Sprossen sprossest Sprössling @@ -102988,7 +102275,6 @@ Spuks spukt Spule spüle -spulen Spulen spülen spulend @@ -103431,7 +102717,6 @@ stagnierendes stagniert stagnierte stagnierten -stahl Stahl Stahlbau Stahlbaus @@ -103579,7 +102864,6 @@ stampfte stampften stampftest stampftet -stand Stand Standard Standardabweichung @@ -103634,7 +102918,6 @@ Standbild Ständchen Ständchens Stande -stände Stände standen Stander @@ -103824,7 +103107,6 @@ starkem Stärkemehl Stärkemehls starken -stärken Stärken stärkende stärkenden @@ -104070,7 +103352,6 @@ staubdicht Stäube Staubecken stauben -stäuben Stäuben staubende staubenden @@ -104138,7 +103419,6 @@ Stauer Staufer Staumauer staune -staunen Staunen staunend staunende @@ -104427,9 +103707,7 @@ Stellage Stellagen Stelldichein Stelldicheins -stelle Stelle -stellen Stellen Stellenangebot Stellenangebote @@ -104628,7 +103906,6 @@ sterblichem sterblichen sterbliches Sterblichkeit -stereo Stereo Stereoaufnahme Stereoaufnahmen @@ -104800,7 +104077,6 @@ steuernder steuerndes Steuernummer steuerpflichtig -steuerpflichtige Steuerpflichtige steuerpflichtigem steuerpflichtigen @@ -104852,7 +104128,6 @@ stibitzten stibitztes stibitztest stibitztet -stich Stich Stiche Stichel @@ -104955,10 +104230,8 @@ stiebtet Stiefbruder Stiefbrüder Stiefbrüdern -stiefel Stiefel Stiefelknecht -stiefeln Stiefeln stiefelnd stiefelnde @@ -104992,7 +104265,6 @@ Stiefväter Stiefvätern Stiefvaters stieg -stiege Stiege stiegen stiegst @@ -105001,7 +104273,6 @@ stiehlt Stiel Stielen Stiels -stier Stier stiere stieren @@ -105086,7 +104357,6 @@ stilistischer stilistisches Stilkunde still -stille Stille stillegend stillem @@ -105142,7 +104412,6 @@ Stillsetzen stillsitzender stillsitzendes stillst -stillstand Stillstand Stillstandes Stillstands @@ -105178,7 +104447,6 @@ Stimmband Stimmbändern Stimmbruch Stimmbruchs -stimme Stimme stimmen Stimmenfang @@ -105320,7 +104588,6 @@ stolpere Stolperer stolpern stolperten -stolz Stolz stolze stolzen @@ -105334,7 +104601,6 @@ Stopfgarn Stopfnadeln stopft stopfte -stopp Stopp stoppe Stoppel @@ -105438,7 +104704,6 @@ Störungsmeldung Störunterdrückung Story Storys -stoß Stoß stoßartig Stoßdämpfer @@ -105554,7 +104819,6 @@ Strahl Strahlantrieb Strahlantriebes Strahlantriebs -strahlen Strahlen Strahlenbehandlung Strahlenbrechung @@ -105721,7 +104985,6 @@ strebten Strebung Streckbett Streckbetts -strecke Strecke strecken Streckenabschnitt @@ -105762,13 +105025,11 @@ Streichorchesters Streichquartett Streichung Streichungen -streif Streif Streifband Streifbändern Streifbandes Streife -streifen Streifen Streifens Streifenwagen @@ -105843,7 +105104,6 @@ Streubüchse Streubüchsen Streudosen Streueffekt -streuen Streuen streuend streuende @@ -105861,7 +105121,6 @@ streute Streuung Streuungen Streuzucker -strich Strich Striche Strichformen @@ -105923,7 +105182,6 @@ Stromabnehmer Stromabnehmern Stromabnehmers Strome -ströme Ströme strömen strömende @@ -106031,7 +105289,6 @@ Stückarbeitern Stückarbeiters Stückchen stückchenweise -stücke Stücke stückeln stückelnd @@ -106046,7 +105303,6 @@ stückeltest stückeltet Stückelung Stückelungen -stücken Stücken Stückes Stückgut @@ -106190,7 +105446,6 @@ stummes Stummfilme Stummfilmen Stummfilms -stümper Stümper Stümperei stümperhaft @@ -106236,7 +105491,6 @@ stumpfwinkeliges Stündchen Stunde stünde -stunden Stunden stünden Stundengeschwindigkeit @@ -106311,9 +105565,7 @@ stures Sturheit Sturm Sturmangriff -stürme Stürme -stürmen Stürmen stürmend stürmende @@ -106683,7 +105935,6 @@ suggestiver suggestives Suggestivfrage Suggestivität -sühne Sühne sühnen sühnenden @@ -106720,9 +105971,7 @@ Summationsbeginns Summationsindex Summationszeichen Sümmchen -summe Summe -summen Summen Summenbeschränkung Summensymbol @@ -107029,7 +106278,6 @@ Syndikus Synergie Synode Synoden -synonym Synonym synonyme synonymer @@ -107177,7 +106425,6 @@ Tadler Tafel Tafelbutter tafelfertig -tafeln Tafeln täfeln tafelnde @@ -107207,7 +106454,6 @@ Tagbaues Tagblätter Tagblättern Tagblatts -tage Tage Tagebuch Tagebücher @@ -107232,7 +106478,6 @@ Tagelohns Tagemarsch Tagemärschen Tagemarsches -tagen Tagen tagende tagenden @@ -107450,7 +106695,6 @@ Talglicht Talgs Talisman Talismanen -talk Talk Talkessel Talkesseln @@ -107481,7 +106725,6 @@ Tandem Tandems tändle Tang -tangens Tangens Tangensfunktion Tangente @@ -107490,7 +106733,6 @@ Tangentenvektor Tangentenvektoren tangential Tangentialbündels -tangentiale Tangentiale Tangentialebene Tangentialen @@ -107731,7 +106973,6 @@ tastetet Tastsinn Tastsinnes Tastsinns -tat Tat Tatar Tatbestand @@ -107769,7 +107010,6 @@ tätige tätigem tätigen tätigende -tätigenden Tätigenden tätigender tätiger @@ -107849,7 +107089,6 @@ Tau taub taube taubem -tauben Tauben taubenblau taubenblaue @@ -108027,7 +107266,6 @@ tausendmal Tausendsassa Tausendsassas tausendste -tausendstel Tausendstel Tausendstels tausendsten @@ -108112,7 +107350,6 @@ technologischen technologischer technologisches Technophilie -techtelmechtel Techtelmechtel techtelmechteln Teckel @@ -108178,7 +107415,6 @@ teigigsten teigigstes Teigs Teigwaren -teil Teil Teilaspekt Teilaufgabe @@ -108207,7 +107443,6 @@ Teilchenstößen Teilchenzahl Teilchenzahlen Teildisziplin -teile Teile Teileigentum teilen @@ -108308,7 +107543,6 @@ Teilprobleme Teilproblems Teilraten Teilräumung -teils Teils Teilstrecke Teilstrecken @@ -108452,7 +107686,6 @@ Teleskopen teleskopisch Teletex Television -telex Telex Telexdienst Telexdiensten @@ -108790,11 +108023,9 @@ Textbuch Textbücher Textbuches Textbuchs -texte Texte Texteingabe Texten -textende Textende Texter Texterfassung @@ -109006,7 +108237,6 @@ Tiefdruckgebiet Tiefdruckgebieten Tiefdruckgebiets Tiefdrucks -tiefe Tiefe Tiefebene Tiefebenen @@ -109211,7 +108441,6 @@ Tischdame Tischdamen Tischdecke Tischdecken -tische Tische tischen Tischgast @@ -109598,7 +108827,6 @@ Töpfe Töpfen Töpfer Töpferei -töpfern Töpfern Töpfers Töpferscheibe @@ -109922,7 +109150,6 @@ tragende tragenden tragender tragendes -träger Träger trägere trägeren @@ -110091,12 +109318,10 @@ tranchierter tranchiertes tranchiertet Träne -tränen Tränen Tränendrüse Tränengas Tränengases -trank Trank tränke tranken @@ -110147,7 +109372,6 @@ transformieren transformierend transformierst transformiert -transformierte Transformierte transformiertem transformierten @@ -110212,7 +109436,6 @@ transplantiertes transplantiertest transponieren transponiert -transponierte Transponierte transponierten Transport @@ -110364,7 +109587,6 @@ Traumbach Traumberuf Traumbild Traumbilder -träume Träume träumen träumend @@ -110494,7 +109716,6 @@ treffsicherstes treibe Treibeis Treibeises -treiben Treiben treibend treibende @@ -110630,7 +109851,6 @@ treubrüchigen treubrüchiger treubrüchiges Treubruchs -treue Treue Treuebrüche Treuebrüchen @@ -110722,7 +109942,6 @@ tricks tricksen trickst Tridiagonalform -trieb Trieb triebe trieben @@ -110891,7 +110110,6 @@ Tripper tripple trist tristen -tritt Tritt Trittbrett Trittbretter @@ -111072,7 +110290,6 @@ tröpfelt tröpfelte tröpfelten tröpfeltet -tropfen Tropfen tropfend tropfende @@ -111178,7 +110395,6 @@ trottetest trottetet Trottoir Trotts -trotz Trotz trotzdem trotze @@ -111289,7 +110505,6 @@ trudle Trüffel Trüffeln Trüffels -trug Trug Trugbild trüge @@ -111488,7 +110703,6 @@ tumultuarisch tumultuarischem tumultuarischen tumultuarischer -tun Tun tünche tünchen @@ -111525,7 +110739,6 @@ tunneln Tunnels Tuns tupfe -tüpfel Tüpfel Tüpfelchen Tüpfels @@ -111567,7 +110780,6 @@ Türke Türkei Türken Türkinnen -türkis Türkis türkisch türkische @@ -111580,9 +110792,7 @@ Türklinke Türklinken Turm Türmchens -türme Türme -türmen Türmen türmend türmende @@ -111660,7 +110870,6 @@ Türschließer Türschließers turteln Turteltaube -tusch Tusch tusche tuscheln @@ -111698,7 +110907,6 @@ tuteten Tutor TÜV Tycoon -typ Typ Type Typen @@ -111772,7 +110980,6 @@ tyrannisierter tyrannisiertes tyrannisiertet übe -übel Übel Übelbefinden Übelkeit @@ -112140,11 +111347,9 @@ tyrannisiertet überfahrenen überfahrenes überfährst -überfahrt Überfahrt überfährt Überfahrten -überfall Überfall überfalle Überfälle @@ -112426,7 +111631,6 @@ tyrannisiertet übergreifender übergreifendes übergreifst -übergriff Übergriff übergriffe übergriffen @@ -113248,7 +112452,6 @@ tyrannisiertet Überschneidung Überschneidungen überschneidungsfrei -überschnitt Überschnitt überschnitten überschoben @@ -113651,7 +112854,6 @@ tyrannisiertet übertraf übertrafet übertrafst -übertrag Übertrag übertragbar übertragbarem @@ -114211,7 +113413,6 @@ umdisponiert umdisponierte umdisponierten umdisponiertest -umdrehen Umdrehen umdrehend umdrehende @@ -114871,7 +114072,6 @@ umklammertest umklammertet Umklammerung Umklammerungen -umklappen Umklappen umklappend umklappende @@ -115129,7 +114329,6 @@ umringten umringter umringtes umringtet -umriss Umriss umrisse umrissen @@ -115457,7 +114656,6 @@ umstellt Umstellung umsteuern umsteuernd -umstieg Umstieg umstimmen umstimmend @@ -116750,7 +115948,6 @@ undisziplinierteste undiszipliniertesten undiszipliniertester undiszipliniertestes -und/oder unduldsam unduldsame unduldsamem @@ -116924,7 +116121,6 @@ unempfindlichstes unendlich unendliche unendlichem -unendlichen Unendlichen unendlicher unendlichere @@ -117638,7 +116834,6 @@ ungeheuchelte ungeheucheltem ungeheuchelter ungeheucheltes -ungeheuer Ungeheuer ungeheuerlich ungeheuerliche @@ -118267,9 +117462,7 @@ unidentifizierte unidentifizierten unidentifiziertes unidirektional -uniform Uniform -uniformen Uniformen uniformiert uniformierte @@ -118325,8 +117518,6 @@ Universitätsprofessors Universum Universums Unix -UNIX -unke Unke unken unkenntlich @@ -118801,12 +117992,10 @@ unrealistische unrealistischen unrealistischer unrealistisches -unrecht Unrecht unrechte unrechten unrechter -unrechtes Unrechtes unrechtmäßig unrechtmäßige @@ -119783,7 +118972,6 @@ unternahmen unternähmen unternahmst unternehme -unternehmen Unternehmen unternehmend unternehmende @@ -119934,7 +119122,6 @@ Unterschenkel Unterschenkeln Unterschenkels Unterschiebung -unterschied Unterschied Unterschiede unterschieden @@ -120113,7 +119300,6 @@ Untersumme Untersummen untertage untertägig -untertan Untertan Untertanen Untertasse @@ -120122,7 +119308,6 @@ untertauchen untertauchende untertauchenden untertauchender -unterteil Unterteil unterteile unterteilen @@ -121015,7 +120200,6 @@ Urstoffe Urstoffs Ursula Urteil -urteile Urteile urteilen urteilende @@ -121090,10 +120274,8 @@ Vandalen Vanille variabel Variabilität -variable Variable variablem -variablen Variablen variabler variablere @@ -121413,7 +120595,6 @@ verallgemeinert verallgemeinerte verallgemeinertem verallgemeinerten -verallgemeinerter Verallgemeinerter verallgemeinertes verallgemeinertet @@ -121433,7 +120614,6 @@ verändere veränderlich veränderliche veränderlichem -veränderlichen Veränderlichen veränderlicher veränderliches @@ -121743,9 +120923,7 @@ verbalem verbalen verbaler verbales -verband Verband -verbände Verbände verbanden verbandest @@ -122117,7 +121295,6 @@ verborgenste verborgenstem verborgenster verborgenstes -verbot Verbot Verbote verboten @@ -122190,7 +121367,6 @@ verbrauchter verbrauchtes verbrauchtest verbreche -verbrechen Verbrechen verbrechend verbrechenden @@ -122349,12 +121525,9 @@ verbundenes Verbundenheit verbündest verbündet -verbündete Verbündete verbündetem -verbündeten Verbündeten -verbündeter Verbündeter verbündetest verbündetet @@ -122602,7 +121775,6 @@ verdienend verdienenden verdienender verdienendes -verdienst Verdienst Verdienstausfall Verdienstausfälle @@ -123083,7 +122255,6 @@ vereinst Vereinswesen vereinte vereintem -vereinten Vereinten vereinter vereintes @@ -123220,7 +122391,6 @@ verewigtes verewigtest Verewigung verfahre -verfahren Verfahren verfahrend verfahrende @@ -123245,7 +122415,6 @@ Verfahrensweise Verfahrensweisen verfährst verfährt -verfall Verfall Verfalldatum verfallen @@ -123841,7 +123010,6 @@ vergegenwärtigtes vergegenwärtigtest vergegenwärtigtet Vergegenwärtigung -vergehen Vergehen vergehend vergehende @@ -124044,7 +123212,6 @@ verglühten verglühter verglühtes vergnüge -vergnügen Vergnügen vergnügend vergnügenden @@ -124265,7 +123432,6 @@ verhallten verhalltes verhält verhalte -verhalten Verhalten verhaltenem verhaltenen @@ -124447,7 +123613,6 @@ verhätscheltet verhätscheltste verhätscheltsten verhätscheltster -verhau Verhau verhauen verhauend @@ -124640,7 +123805,6 @@ verholfene verholfenem verholfener verholfenes -verhör Verhör verhöre verhören @@ -125451,7 +124615,6 @@ verlangtet verlas verlasen verlasest -verlass Verlass verlasse verlassen @@ -125561,7 +124724,6 @@ verleidete verleidetem verleideter verleidetes -verleih Verleih verleihe verleihen @@ -125735,7 +124897,6 @@ Verlöbnisses verlobst verlobt verlobte -verlobten Verlobten verlobter verlobtes @@ -126157,7 +125318,6 @@ vermodertem vermoderten vermoderter vermöge -vermögen Vermögen vermögend vermögende @@ -126622,7 +125782,6 @@ verpulvertet verpumpen verpuppen verpustet -verputz Verputz verputzen verputzend @@ -127161,7 +126320,6 @@ verscheuchtes verscheuchtest verscheuern verschicke -verschicken Verschicken verschickende verschickenden @@ -128065,7 +127223,6 @@ Verspottung versprach versprachst verspreche -versprechen Versprechen versprechend versprechende @@ -128471,7 +127628,6 @@ verstummtes verstummtet verstünde verstünden -versuch Versuch versuche versuchen @@ -128561,7 +127717,6 @@ Vertagungen vertan Vertauschbarkeit vertausche -vertauschen Vertauschen vertauschst vertauscht @@ -128703,7 +127858,6 @@ Vertrag vertrage Verträge vertragen -vertragende Vertragende vertragene vertragenem @@ -128807,7 +127961,6 @@ vertratest vertratet vertratst vertraue -vertrauen Vertrauen vertrauenerweckender Vertrauensbasis @@ -128917,7 +128070,6 @@ Vertreters Vertretung Vertretungen vertretungsberechtigt -vertrieb Vertrieb vertriebe vertrieben @@ -129268,10 +128420,8 @@ Verwandschaft verwandt verwandte verwandtem -verwandten Verwandten Verwandtenbesuch -verwandter Verwandter verwandtes verwandtest @@ -129384,9 +128534,7 @@ verweiltest verweiltet Verweilzeit verweint -verweis Verweis -verweise Verweise verweisen verweist @@ -129983,7 +129131,6 @@ verzwickten verzwickter Vesper Vesperbrot -vespern Vespern Vestibül Veteran @@ -130071,11 +129218,8 @@ vielerlei vielerorts vieles vielfach -vielfache Vielfache -vielfachen Vielfachen -vielfaches Vielfaches Vielfachheit Vielfachheiten @@ -130271,7 +129415,6 @@ Viertaktmotoren viertausend vierte vierteilen -viertel Viertel Viertelfinale Vierteljahr @@ -130318,7 +129461,6 @@ vierzehntes Vierzeiler Vierzeilers vierzig -vierziger Vierziger Vierzigerin Vierzigern @@ -130408,7 +129550,6 @@ visierter visiertes visiertet Vision -visionär Visionär visionäre visionären @@ -130490,7 +129631,6 @@ Vogelfang Vogelfutter Vogelfutters Vogelhaus -vögeln Vögeln Vogelnest Vogelnestern @@ -130854,7 +129994,6 @@ von voneinander vonnöten vonstatten -vonstattengehen Vonstattengehen Vopo vor @@ -130962,7 +130101,6 @@ vorausgesetztes Vorauskasse voraussagbar voraussage -voraussagen Voraussagen voraussagt voraussagte @@ -131001,7 +130139,6 @@ vorauszusetzen Vorbau vorbauen Vorbaues -vorbedacht Vorbedacht vorbedachte vorbedachtes @@ -131210,7 +130347,6 @@ voreingenommene voreingenommenen voreingenommener voreingenommenes -voreingestellt Voreingestellt Voreinstellung vorenthält @@ -131362,7 +130498,6 @@ vorgehaltene vorgehaltenem vorgehaltenen vorgehaltenes -vorgehen Vorgehen Vorgehens Vorgehensweise @@ -131460,7 +130595,6 @@ vorgesehener vorgesetzt vorgesetzte vorgesetztem -vorgesetzten Vorgesetzten vorgesetzter vorgesetztes @@ -131545,7 +130679,6 @@ vorgibt vorging vorgingen vorgreifen -vorgriff Vorgriff vorgriffe Vorgriffes @@ -131626,7 +130759,6 @@ vorhersagbaren vorhersagbarer vorhersagbares vorhersage -vorhersagen Vorhersagen vorhersagt vorhersagten @@ -131679,7 +130811,6 @@ Vorkenntnis Vorkenntnisse Vorkenntnissen vorknöpfen -vorkommen Vorkommen vorkommende vorkommenden @@ -131719,7 +130850,6 @@ vorlautem vorlauten vorlauter vorlautes -vorleben Vorleben vorlegen Vorleger @@ -131765,7 +130895,6 @@ Vormarschs vormenschlich vormerken vormerkt -vormittag Vormittag Vormittagen vormittags @@ -131823,7 +130952,6 @@ Vorprojekt Vorprüfung Vorprüfungen Vorrang -vorrangig Vorrangig vorrangige vorrangigem @@ -131876,7 +131004,6 @@ vorsätzliches Vorsatzlinse Vorschau Vorschein -vorschieben Vorschieben vorschiebt vorschießen @@ -132002,9 +131129,7 @@ Vorstädte Vorstädten Vorstädter vorstädtisch -vorstand Vorstand -vorstände Vorstände vorständen Vorstandes @@ -132107,7 +131232,6 @@ vortrefflicher vortreffliches vortreten Vortrieb -vortritt Vortritt Vortritts vortrug @@ -132192,7 +131316,6 @@ Vorwochen Vorwort Vorworten Vorwurf -vorwürfe Vorwürfe vorwurfsvoll vorwurfsvolle @@ -132286,18 +131409,14 @@ Waagemeister Waagen Waagenfabrik waagerecht -waagerechte Waagerechte waagerechtem -waagerechten Waagerechten waagerechter waagerechtes waagrecht -waagrechte Waagrechte waagrechtem -waagrechten Waagrechten waagrechter waagrechtes @@ -132320,7 +131439,6 @@ Waben wabenförmigen wach Wachbootes -wache Wache wachen wachend @@ -132514,7 +131632,6 @@ Wagehälse Wagemut wagemutig wagemutige -wagen Wagen wägen Wagenabteil @@ -132978,7 +132095,6 @@ wallfahrender wallfahrendes Wallfahrer Wallfahrers -wallfahrt Wallfahrt wallfahrten Wallfahrtsort @@ -133008,10 +132124,8 @@ Waltraud Walzbleche Walzblechen Walzblechs -walze Walze wälze -walzen Walzen wälzen walzend @@ -133046,12 +132160,10 @@ Wams Wämse Wämsern Wamses -wand Wand Wandbefestigung Wandbekleidung Wandbekleidungen -wände Wände Wandel wandelbar @@ -133084,7 +132196,6 @@ wandelten wandeltest wandeltet Wandelzeit -wänden Wänden Wanderausstellung Wanderbühne @@ -133238,7 +132349,6 @@ warfen warfst warm warme -wärme Wärme Wärmeausgleich wärmebeständig @@ -133493,7 +132603,6 @@ Wasserbombe Wasserdampf Wasserdampfes wasserdicht -wasserdichte Wasserdichte wasserdichten wasserdichter @@ -133578,7 +132687,6 @@ Wassermängel Wassermelone Wassermühle Wassermühlen -wassern Wassern Wässern wassernd @@ -133891,7 +132999,6 @@ wedelten wedeltest weder wedle -weg Weg wegaß wegbegeben @@ -134296,7 +133403,6 @@ wegsehende wegsehenden wegsehendes wegsetzen -wegstrecke Wegstrecke wegstrecken wegstreiche @@ -134358,7 +133464,6 @@ wegzulaufen wegzunehmen wegzupuffern wegzuziehen -weh Weh wehe wehen @@ -134639,7 +133744,6 @@ Weihrauchs weil weiland Weilchen -weile Weile weilen weilend @@ -134732,7 +133836,6 @@ weintet Weintraube Weintrauben weis -weise Weise weisem weisen @@ -134766,7 +133869,6 @@ weismachend weismachenden weismachender weismachendes -weiß Weiß weissagen Weissager @@ -134792,7 +133894,6 @@ Weißbücher Weißbüchern Weißbuches Weißbuchs -weiße Weiße weißen weißend @@ -135149,7 +134250,6 @@ Wellblech Wellblechen Wellblechs Welle -wellen Wellen Wellenbad Wellenbereich @@ -135415,7 +134515,6 @@ weltwirtschaftlich Weltwunder wem wen -wende Wende Wendekreis Wendeltreppe @@ -135541,7 +134640,6 @@ werfende werfenden werfender werfendes -werft Werft Werftarbeiter Werg @@ -135552,7 +134650,6 @@ Werkbänken Werkdienstwohnung Werke werkelten -werken Werken werkend werkenden @@ -135616,7 +134713,6 @@ Werkzeugtaschen Wermut Wermutstropfen Werner -wert Wert Wertangabe Wertangaben @@ -135631,13 +134727,11 @@ wertbeständiger Wertbrief Wertbriefe Wertbriefen -werte Werte Wertebereich Wertebereiche Wertegruppe Werteliste -werten Werten wertend wertende @@ -135650,7 +134744,6 @@ Wertepakete werterhaltend Werterhöhung Wertermittlung -wertes Wertes wertest wertestem @@ -135906,7 +134999,6 @@ Wetterkarten Wetterkunde Wetterlagen Wetterleuchten -wettern Wettern Wetters Wettersatellit @@ -135966,7 +135058,6 @@ Wettrennen Wettrennens Wettrudern Wettruderns -wettrüsten Wettrüsten Wettrüstens Wettschwimmen @@ -136290,12 +135381,9 @@ widerspruchsvollste widerspruchsvollstem widerspruchsvollster widerspruchsvollstes -widerstand Widerstand -widerstände Widerstände widerstanden -widerständen Widerständen Widerstandes widerstandest @@ -136344,7 +135432,6 @@ widerstehender widerstehendes widerstehst widerstrebe -widerstreben Widerstreben widerstrebend widerstrebendem @@ -136511,7 +135598,6 @@ wiederaufnehmender wiederaufnehmendes wiederaufrüstenden Wiederaufrüstung -wiederauftreten Wiederauftreten wiederauftretend wiederauftretende @@ -136811,7 +135897,6 @@ Wiederkünfte Wiederlösen wiedermal wiedermelden -wiedersehen Wiedersehen wiedersehend wiedersehende @@ -136919,7 +136004,6 @@ wieherte wieherten wiehertest wiehertet -wiener Wiener Wienerin Wienerinnen @@ -136983,7 +136067,6 @@ Wildheit Wildhüter Wildhütern Wildleder -wildledern Wildledern Wildleders Wildlinge @@ -137006,7 +136089,6 @@ Wilfried Wilhelm will Wille -willen Willen willenlos willenlose @@ -137021,7 +136103,6 @@ willenlosestem willenlosesten willenlosestes Willenlosigkeit -willens Willens Willensakt Willensakten @@ -137500,7 +136581,6 @@ wirrstes Wirrung Wirrwarr Wirrwarrs -wir's Wirsingkohl wirst Wirt @@ -137816,7 +136896,6 @@ wodurch wofern wofür wog -woge Woge wogegen Wogen @@ -137828,7 +136907,6 @@ woher wohin wohingegen wohinter -wohl Wohl wohlangebracht wohlanständig @@ -138214,7 +137292,6 @@ wolkigsten wolkigster wolkigstes Wolldecke -wolle Wolle wollen wollend @@ -138513,7 +137590,6 @@ wuchertest Wucherung Wucherzins Wucherzinsen -wuchs Wuchs wuchsen Wuchses @@ -138577,12 +137653,9 @@ wulstigste wulstigsten wulstigster wulstigstes -wund Wund -wunde Wunde wundem -wunden Wunden Wunder wunderbar @@ -138688,9 +137761,7 @@ Wundstarrkrampfs Wunsch Wunschbild Wunschdenken -wünsche Wünsche -wünschen Wünschen wünschend wünschende @@ -138787,7 +137858,6 @@ würdigten würdigtet Würdigung Wurf -würfe Würfe Würfel Würfelbecher @@ -138797,7 +137867,6 @@ würfelförmigen würfelförmiger würfelförmiges würfelig -würfeln Würfeln würfelnde würfelndem @@ -138876,7 +137945,6 @@ Wurst Würstchen Würstchens Würste -wursteln Wursteln wurstelnd wurstelnde @@ -138900,7 +137968,6 @@ Wurzel Wurzelbehandlung Wurzelformel Wurzelknolle -wurzeln Wurzeln wurzelnd wurzelnden @@ -138956,7 +138023,6 @@ wüsstest wusstet Wust wüst -wüste Wüste wüstem wüsten @@ -139051,7 +138117,6 @@ zählbares zahle zähle zählebig -zahlen Zahlen zählen Zahlenangabe @@ -139263,7 +138328,6 @@ Zahntechnikers Zander Zange Zangen -zank Zank zanke zanken @@ -139374,13 +138438,11 @@ zauderte Zaum Zaun Zaunanlage -zäune Zäune Zaunkönig zäunten Zebra Zebras -zeche Zeche Zeeman Zeh @@ -139403,7 +138465,6 @@ zehntausend Zehntausende Zehntausenden zehnte -zehntel Zehntel zehntels zehnten @@ -139498,7 +138559,6 @@ Zeilenvorschub Zeilenvorschübe zeilenweise zeilig -zeit Zeit zeitabhängigen Zeitabhängigkeit @@ -139946,7 +139006,6 @@ zerdrücktes zerdrücktest zerdrücktet Zeremonie -zeremoniell Zeremoniell zeremoniellem zeremoniellen @@ -140794,9 +139853,7 @@ zetteln Zettels zettelten Zeug -zeuge Zeuge -zeugen Zeugen Zeugenaussagen zeugend @@ -140888,7 +139945,6 @@ ziehst zieht Ziehung Ziehvater -ziel Ziel Zielband zielbewusst @@ -141282,7 +140338,6 @@ zitterigste zitterigstem zitterigsten zitterigstes -zittern Zittern zitternd zitternden @@ -141358,7 +140413,6 @@ zöge zogen zögere zögerlich -zögern Zögern zögernd zögernde @@ -141591,7 +140645,6 @@ Züchtung Züchtungen Zuchtwahl zucke -zucken Zucken zücken zuckend @@ -141721,7 +140774,6 @@ zufahrend zufahrende zufahrenden zufahrendes -zufahrt Zufahrt Zufahrten Zufahrtsstraße @@ -141828,7 +140880,6 @@ zufüllen Zug zugab Zugabe -zugaben Zugaben Zugang Zugänge @@ -142074,7 +141125,6 @@ zügellosesten zügellosester zügellosestes Zügellosigkeit -zügeln Zügeln zügelnd zügelnde @@ -142450,7 +141500,6 @@ zugreifend zugreifenden zugreifender zugreifendes -zugriff Zugriff Zugriffe zugriffen @@ -142460,15 +141509,11 @@ Zugriffspfade Zugriffszeit zugrunde zugrundegegangen -zugrundegehen Zugrundegehen zugrundegelegt zugrundegerichtet -zugrundelegen Zugrundelegen -zugrundeliegen Zugrundeliegen -zugrunderichten Zugrunderichten Zugrunderichtens zugrundezulegen @@ -142508,7 +141553,6 @@ zuhauenden zuhauender zuhauendes zuhauf -zuhause Zuhause zuheften zuheilen @@ -144137,7 +143181,6 @@ zusammenhaltenden zusammenhaltender Zusammenhalts Zusammenhang -zusammenhänge Zusammenhänge zusammenhängen zusammenhängend @@ -144186,9 +143229,7 @@ zusammenkitten zusammenkittende zusammenkittenden zusammenkittender -zusammenklang Zusammenklang -zusammenklänge Zusammenklänge Zusammenklangs zusammenklappbar @@ -144440,7 +143481,6 @@ zusammentretend zusammentretenden zusammentretender zusammentretendes -zusammentritt Zusammentritt zusammentrommeln zusammentrommelnd @@ -144456,7 +143496,6 @@ zusammenwerfen zusammenwerfende zusammenwerfenden zusammenwerfender -zusammenwirken Zusammenwirken zusammenwirkend zusammenwirkende @@ -144598,7 +143637,6 @@ Zuschneider Zuschneidern Zuschneiders zuschneidest -zuschnitt Zuschnitt zuschnitte Zuschnittes @@ -144688,19 +143726,15 @@ zuspringendes Zuspruch Zusprüche Zuspruches -zustand Zustand zustande -zustände Zustände zustandebrachte zustandebringen zustandegekommen -zustandekommen Zustandekommen Zustandekommens zustandekommt -zuständen Zuständen Zustandes zuständig @@ -144843,7 +143877,6 @@ Zutritt Zutrittes Zutrittsrecht zutuend -zutun Zutun zuungunsten zuunterst @@ -145014,7 +144047,6 @@ zuzutrauen zuzuweisen zuzuweisenden zuzuwenden -zwang Zwang Zwänge zwangen @@ -145100,7 +144132,6 @@ zwanzigjährig zwanzigjährigen zwanzigjähriger zwanzigste -zwanzigstel Zwanzigstel Zwanzigstels zwanzigstem @@ -145244,7 +144275,6 @@ zweifellosem zweifellosen zweifelloser zweifelloses -zweifeln Zweifeln zweifelnd zweifelnde @@ -145270,9 +144300,7 @@ Zweiflern Zweiflers Zweig Zweigbahn -zweige Zweige -zweigen Zweigen Zweiges zweigeteilt @@ -145739,7 +144767,6 @@ zwölft zwölftägig zwölftausend zwölfte -zwölftel Zwölftel zwölften zwölftens diff --git a/assets/en-utf8.txt b/assets/en-utf8.txt index 8b2cf09b..5dad8233 100644 --- a/assets/en-utf8.txt +++ b/assets/en-utf8.txt @@ -25,7 +25,6 @@ ma md mi mo -ms may mr mrs @@ -145,7 +144,6 @@ cow cox coy cry -cs cub cue cum @@ -236,7 +234,6 @@ gin gnu go gob -god goo got gum @@ -278,7 +275,6 @@ hum hut ice icy -id if ifs ilk @@ -336,14 +332,12 @@ lot low lug lye -ma mad man map mar mas mat -may me men mes @@ -356,7 +350,6 @@ mom moo mop mow -ms mu mud mug @@ -396,7 +389,6 @@ old on one opt -or ore our out @@ -405,7 +397,6 @@ owe owl own ox -pa pad pal pan diff --git a/assets/fr-utf8.txt b/assets/fr-utf8.txt index 56f020b5..bfb833b5 100644 --- a/assets/fr-utf8.txt +++ b/assets/fr-utf8.txt @@ -141541,9 +141541,7 @@ esquilles Esquimau esquimaud esquimaude -Esquimaude esquimaudes -Esquimaudes esquimauds esquimautage esquimautages @@ -186709,7 +186707,6 @@ interneront internes internés internet -Internet internez interniez internions @@ -215758,7 +215755,6 @@ naphtes naphtol naphtols napoléon -Napoléon napoléonien napoléonienne napoléoniennes diff --git a/assets/it-utf8.txt b/assets/it-utf8.txt index bc969305..67675d43 100644 --- a/assets/it-utf8.txt +++ b/assets/it-utf8.txt @@ -1707,7 +1707,6 @@ Courmayeur Cremona Cristina Cristoforo -DOS DVI Daniele Dante @@ -1740,7 +1739,6 @@ Euripide Europa Eusebio Eva -FAQ FSF Fabio Faenza @@ -102310,7 +102308,6 @@ tosavano tosavate tosavi tosavo -toscana toscane toscani toscano diff --git a/assets/ru-utf8.txt b/assets/ru-utf8.txt index a9d8dede..e938041f 100644 --- a/assets/ru-utf8.txt +++ b/assets/ru-utf8.txt @@ -1,33 +1,25 @@ -и -в не на -я что быть -с он -а это как то этот по -к но они мы она который из -у свой вы весь за для от -о так мочь все @@ -167,7 +159,6 @@ поэтому почему понимать -москва любой однако хорошо @@ -351,7 +342,6 @@ появиться хотеться нельзя -д белый центр опять @@ -400,7 +390,6 @@ быстро черный сильный -н порядок чувствовать создать @@ -487,7 +476,6 @@ возможно принимать рубль -б миллион целый приходить @@ -529,7 +517,6 @@ пара квартира забыть -е значение внутренний связать @@ -577,7 +564,6 @@ команда добрый поле -г сша исследование общественный @@ -591,7 +577,6 @@ сон уходить служба -ж население воздух словно @@ -616,7 +601,6 @@ орган доллар держать -т название похожий дорогой @@ -703,7 +687,6 @@ поздний песня лучше -п случиться ум выбор @@ -785,7 +768,6 @@ чтоб прошлый столько -л понятие длинный поддержка @@ -963,7 +945,6 @@ хватать вчера режим -р очередной отдать здоровье @@ -1145,7 +1126,6 @@ утверждать позвонить реклама -николай революция явление отдел @@ -1405,7 +1385,6 @@ бедный появление издание -э резко поговорить еврей @@ -1436,7 +1415,6 @@ достигнуть сохранить встретиться -ю предполагать глубина приказ @@ -1552,7 +1530,6 @@ понятно уважение последствие -ф буква изображение творческий @@ -1595,7 +1572,6 @@ обед переходить изучение -олег обеспечивать заставлять подниматься @@ -1826,7 +1802,6 @@ публикация кивнуть обсуждать -х наверняка напомнить логика @@ -1865,7 +1840,6 @@ кошка саша характерный -мария толстый общаться пятый @@ -2591,7 +2565,6 @@ набрать защитить остановка -з дорого какую-то жестокий @@ -2779,7 +2752,6 @@ разнообразный отойти разделить -ы сборник глобальный кафе @@ -2816,7 +2788,6 @@ великолепный доходить образовать -наталья разрушить отражать лезть @@ -3781,10 +3752,8 @@ симпатичный сделаться продаваться -ш направляться предупреждать -ч благоприятный палка выдающийся @@ -4016,7 +3985,6 @@ рыцарь дежурный отрицать -светлана выделяться частица динамика @@ -4276,7 +4244,6 @@ рецепт сан махнуть -соня смесь творение кредитный @@ -4967,7 +4934,6 @@ привязать издатель предать -й отставка заголовок отступать @@ -5538,7 +5504,6 @@ как-нибудь превосходство конфета -ь преподавать ла грамотный @@ -6238,7 +6203,6 @@ даша армянский замерзнуть -вячеслав фракция разноцветный гроза @@ -6250,7 +6214,6 @@ хрупкий выпивать напиться -будда октябрьский невыносимый сертификат @@ -6601,7 +6564,6 @@ грант выраженный слушаться -ц расстроить веселье жюри @@ -7004,7 +6966,6 @@ алена подсчет профессионально -оксана погладить рассыпаться перебирать @@ -7631,7 +7592,6 @@ несомненный многократно выгодно -санкт-петербург украинец коварный аккумулятор @@ -8657,7 +8617,6 @@ авраам мэрия фуражка -ё прикол минуть яростно @@ -11523,7 +11482,6 @@ кабинка сатурн байт -м прямоугольный остыть смягчить @@ -12768,7 +12726,6 @@ разделяться конфликтный лыжи -ванька обосноваться активизация основополагающий @@ -13204,7 +13161,6 @@ затащить терапевтический чернокожий -ъ челнок моделировать ограбление @@ -13526,7 +13482,6 @@ видеокарта выключатель росток -щ ослаблять безошибочно заикаться @@ -14528,7 +14483,6 @@ акцентировать высокотехнологичный невозмутимый -Нина железнодорожник амулет дилемма @@ -15852,7 +15806,6 @@ никитич заманить вмещать -жигули цыганский поразиться обсерватория @@ -22020,7 +21973,6 @@ лицезреть никулин неукоснительно -нельсон понапрасну фанатичный модернизм @@ -22864,7 +22816,6 @@ гадина провиант лещ -мекка флагманский адресоваться внешнеторговый @@ -32494,7 +32445,6 @@ холодить исцелиться дарвиновский -оКсана шайтан алешин объёме @@ -32893,7 +32843,6 @@ аркадьевна овсяный обвешать -мАксвелл сплетничать узнаваемость улать @@ -32995,7 +32944,6 @@ сомать пунктуальный фотокорреспондент -бояРин отвержение философствование дыгать @@ -38746,7 +38694,6 @@ мет кинохроника подложка -бойфренд очиститель лёгкостью голубовато @@ -38934,7 +38881,6 @@ петраков трип маттиас -кондрат пинг отписка фукс @@ -40162,7 +40108,6 @@ апример чейни отшатываться -серБия столыпинский смердеть физкультурник @@ -40898,7 +40843,6 @@ сворачивание дикобраз родин -Макар переговорщик чметр валуй @@ -41894,7 +41838,6 @@ просечь ярик генуэзский -Стеб глазастый рпг цыганов @@ -44210,7 +44153,6 @@ шпангоут плебисцит наркомафия -Бойфренд лавчонка джеми проверенный @@ -45721,7 +45663,6 @@ стройно неход несоизмеримый -Спорткомплекс усреднение конвульсии саров @@ -45832,7 +45773,6 @@ авитаминоз прополоскать порыбачить -Понт топологический хромовый аутотренинг @@ -47174,7 +47114,6 @@ пятикратный интеллектуальность пва -евроремонт маканин окопчик твердышев @@ -54281,7 +54220,6 @@ карканье пасторский виан -перегРин тоить окунев юхан @@ -54906,7 +54844,6 @@ измор трый шляхетский -бРин лима нестроевой суннитский @@ -55758,7 +55695,6 @@ пиноккио идиотический ереть -Клава послепродажный бревна несомнить @@ -56484,7 +56420,6 @@ жосслить полтонна комбо -Метрострой мелеть руга антропософия @@ -59199,7 +59134,6 @@ зульфия фотокросс провинциализм -кордицеПС комендантша луковский аудить @@ -61891,7 +61825,6 @@ хайти кворт пупка -Таврия мирье исподний видеопрокат @@ -63203,7 +63136,7 @@ флорентино сагитировать долан -санкт-Петербург +Санкт-Петербург салаг засека батюшок @@ -63405,7 +63338,6 @@ пакля заартачиться лайдекер -гРин агатовый микросекунда брыззать @@ -63460,7 +63392,6 @@ субара пожестче омоним -Евроремонт амбиз йцукен долби @@ -69811,7 +69742,6 @@ еврисфей браунли возьаться -Казанцев задержки портфельчик неумолимость @@ -74213,7 +74143,6 @@ социобиология взбрыкивать чёткость -Экспоцентр засекречивание бомжик хамар @@ -78233,7 +78162,6 @@ войт эндорэ окк -Автосервис бандеровский правдин обрисовываться @@ -81985,7 +81913,6 @@ цаостров гафгарьон астрорунет -мэйРин промаркировать дегтяренко четвёрки @@ -84423,7 +84350,6 @@ оршанский карачевский неизменять -Минздрав чулка трехосный четать diff --git a/build.gradle b/build.gradle index de26c1ad..64c34644 100644 --- a/build.gradle +++ b/build.gradle @@ -106,20 +106,47 @@ android { // } } -task getDictSizes { +task validateDictionaries { inputs.dir fileTree(dir:'assets', excludes:['dict.properties']) outputs.file "t9build.properties" doLast { - println "Calculating dict size..." + String errors = ""; inputs.getFiles().each {File file -> - println "dict: "+ file.name - ant.propertyfile(file:"assets/dict.properties") { - entry(key: "size."+ file.name, value: file.length()) + println "Validating dictionary: " + file.name + + def geographicalName = ~"[A-Z]\\w+-[^\\n]+" + def uniqueWords = [:] + + int lineNumber = 0 + file.eachLine {line -> + lineNumber++ + if (line.matches("\\d")) { + errors += "Dictionary '" + file.name + "' is invalid. Found numbers on line " + lineNumber + ". Please, remove all numbers.\n" + } + + if (line.matches("^\\P{L}+\$")) { + errors += "Dictionary '" + file.name + "' is invalid. Found a garbage word: '" + line + "' on line " + lineNumber + ".\n" + } + + if (line.matches("^.\$")) { + errors += "Dictionary '" + file.name + "' is invalid. Found a single letter: '" + line + "' on line " + lineNumber + ". Remove all single letters. The alphabet will be added automatically.\n" + } + + String uniqueWordKey = line ==~ geographicalName ? line : line.toLowerCase() + if (uniqueWords[uniqueWordKey] != null && uniqueWords[uniqueWordKey] == true) { + errors += "Dictionary '" + file.name + "' is invalid. Found a repeating word: '" + line + "' on line " + lineNumber + ". Ensure all words appear only once.\n" + } else { + uniqueWords[uniqueWordKey] = true + } } } + + if (errors != "") { + throw new GradleException(errors) + } } } -preBuild.dependsOn getDictSizes -preBuild.mustRunAfter getDictSizes +preBuild.dependsOn validateDictionaries +preBuild.mustRunAfter validateDictionaries diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index d5135cdb..aeb90a02 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -17,9 +17,11 @@ Зареди свой речник Изтрий речник - Зареждане на речник… + Неуспешно зареждане. Невалидна дума \"%1$s\" на ред %2$d за език \"%3$s\". + Несупешно зареждане на речник за език \"%1$s\" (%2$s). + Зареждане на речник (%1$s)… Зареждане на вашия речник… - Зареди речник - Неуспешно зареждане. Липсва речник за %1$s. + Зареждане на речник + Неуспешно зареждане. Липсва речник за \"%1$s\". Речникът е изтрит успешно diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 45de385d..1a48fec7 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -14,10 +14,10 @@ Sprachen Wörterbuch laden Benutzerwörterbuch laden + Wörterbuch löschen - Lade Wörterbuch… + Lade Wörterbuch (%1$s)… Lade Benutzerwörterbuch… Wörterbuch laden - Wird nicht geladen. Wörterbuch für %1$s nicht gefunden. - Wörterbuch löschen + Wird nicht geladen. Wörterbuch für \"%1$s\" nicht gefunden. diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index b7d2f0a5..a21f5175 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -14,10 +14,11 @@ Choisir langues Charger le dictionnaire Charger le dictionnaire utilisateur + Supprimer le dictionaire - Chargement du dictionnaire… + Echec du chargement de dictionnaire pour langue «%1$s» (%2$s). + Chargement du dictionnaire (%1$s)… Chargement du dictionnaire utilisateur… Charger le dictionnaire - Echec du chargement. Dictionnaire %1$s introuvable. - Supprimer le dictionaire + Echec du chargement. Dictionnaire «%1$s» introuvable. diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index f15cca57..95ad9410 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -14,11 +14,11 @@ Le lingue Carica dizionario Carica dizionario utente + Eliminare il dizionario - Caricamento dizionario… + Caricamento dizionario (%1$s)… Caricamento dizionario utente… Caricamento dizionario - Impossibile caricare. Dizionario per %1$s non trovato. - Eliminare il dizionario + Impossibile caricare. Dizionario per “%1$s” non trovato. diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index e26ee31a..544169f8 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -17,9 +17,10 @@ Загрузить свой словарь Очистить словарь - Загрузка словаря… + Ошибка загрузки словаря для языка «%1$s» (%2$s). + Загрузка словаря (%1$s)… Загрузка пользовательского словаря… Загрузить словарь - Ошибка загрузки. Словарь %1$s не найден. + Ошибка загрузки. Словарь «%1$s» не найден. Словарь успешно очищен. diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 245f06dc..6a0a1190 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -14,10 +14,11 @@ Вибір мови Завантажити словник Завантажити свій словник + Очистити словник - Завантаження словника… + Помилка завантаження словника для мови «%1$s» (%2$s). + Завантаження словника (%1$s)… Завантаження словника користувача… Завантажити словник - Помилка завантаження. Словник %1$s не знайдено. - Очистити словник + Помилка завантаження. Словник «%1$s» не знайдено. diff --git a/res/values/strings.xml b/res/values/strings.xml index 0cc0e277..c3634f30 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -21,9 +21,11 @@ SDcard/traditionalt9/user.lang.dict (lang: en/ru/de/fr) Clear dictionary - Loading dictionary… + Loading failed. Invalid word \"%1$s\" on line %2$d of language \"%3$s\". + Failed importing dictionary for language \"%1$s\" (%2$s). + Loading dictionary (%1$s)… Loading user dictionary… Load dictionary - Loading failed. Dictionary for %1$s not found. + Loading failed. Dictionary for \"%1$s\" not found. Dictionary successfully cleared. diff --git a/scripts/remove-dictionary-repeating-words.js b/scripts/remove-dictionary-repeating-words.js index ca51f903..379701a6 100644 --- a/scripts/remove-dictionary-repeating-words.js +++ b/scripts/remove-dictionary-repeating-words.js @@ -2,6 +2,8 @@ const { basename } = require('path'); const { createReadStream, existsSync } = require('fs'); +const GEO_NAME = /[A-Z]\w+\-[^\n]+/; + function printHelp() { console.log(`Usage ${basename(process.argv[1])} LOCALE FILENAME.txt `); @@ -28,17 +30,44 @@ function validateInput() { +function getRegularWordKey(locale, word) { + if (typeof word !== 'string' || word.length === 0) { + return ''; + } + + return GEO_NAME.test(word) ? word : word.toLocaleLowerCase(locale); +} + + + +function getWordKeyPreservingCaptialization(locale, word, wordMap) { + if (typeof word !== 'string' || word.length === 0 || typeof wordMap !== 'object') { + return ''; + } + + let wordKey = word.toLocaleLowerCase(locale); + + if (GEO_NAME.test(word) || word.toLocaleLowerCase(locale) !== word) { + wordKey = word; + if (wordMap[word.toLocaleLowerCase(locale)]) { + delete wordMap[word.toLocaleLowerCase(locale)]; + } + } + + return wordKey; +} + + + async function removeRepeatingWords({ fileName, locale }) { const lineReader = require('readline').createInterface({ input: createReadStream(fileName) }); - const geographicalName = /[A-Z]\w+\-[^\n]+/; const wordMap = {}; for await (const line of lineReader) { - const wordKey = geographicalName.test(line) ? line : line.toLocaleLowerCase(locale); - wordMap[wordKey] = true + wordMap[getWordKeyPreservingCaptialization(locale, line, wordMap)] = true; } return Object.keys(wordMap); @@ -57,4 +86,6 @@ function printWords(wordList) { /** main **/ -removeRepeatingWords(validateInput()).then(words => printWords(words)); +removeRepeatingWords(validateInput()) + .then(words => printWords(words)) + .catch(e => console.error(e)); diff --git a/src/com/stackoverflow/answer/UnicodeBOMInputStream.java b/src/com/stackoverflow/answer/UnicodeBOMInputStream.java deleted file mode 100644 index 34aeda71..00000000 --- a/src/com/stackoverflow/answer/UnicodeBOMInputStream.java +++ /dev/null @@ -1,315 +0,0 @@ -/* ____________________________________________________________________________ - * - * File: UnicodeBOMInputStream.java - * Author: Gregory Pakosz. - * Date: 02 - November - 2005 - * ____________________________________________________________________________ - */ -package com.stackoverflow.answer; - -import java.io.IOException; -import java.io.InputStream; -import java.io.PushbackInputStream; - -/** - * The UnicodeBOMInputStream class wraps any - * InputStream and detects the presence of any Unicode BOM - * (Byte Order Mark) at its beginning, as defined by - * RFC 3629 - UTF-8, a transformation format of ISO 10646 - * - *

The - * Unicode FAQ - * defines 5 types of BOMs:

- * - *

Use the {@link #getBOM()} method to know whether a BOM has been detected - * or not. - *

- *

Use the {@link #skipBOM()} method to remove the detected BOM from the - * wrapped InputStream object.

- */ -public class UnicodeBOMInputStream extends InputStream -{ - /** - * Type safe enumeration class that describes the different types of Unicode - * BOMs. - */ - public static final class BOM - { - /** - * NONE. - */ - public static final BOM NONE = new BOM(new byte[]{},"NONE"); - - /** - * UTF-8 BOM (EF BB BF). - */ - public static final BOM UTF_8 = new BOM(new byte[]{(byte)0xEF, - (byte)0xBB, - (byte)0xBF}, - "UTF-8"); - - /** - * UTF-16, little-endian (FF FE). - */ - public static final BOM UTF_16_LE = new BOM(new byte[]{ (byte)0xFF, - (byte)0xFE}, - "UTF-16 little-endian"); - - /** - * UTF-16, big-endian (FE FF). - */ - public static final BOM UTF_16_BE = new BOM(new byte[]{ (byte)0xFE, - (byte)0xFF}, - "UTF-16 big-endian"); - - /** - * UTF-32, little-endian (FF FE 00 00). - */ - public static final BOM UTF_32_LE = new BOM(new byte[]{ (byte)0xFF, - (byte)0xFE, - (byte)0x00, - (byte)0x00}, - "UTF-32 little-endian"); - - /** - * UTF-32, big-endian (00 00 FE FF). - */ - public static final BOM UTF_32_BE = new BOM(new byte[]{ (byte)0x00, - (byte)0x00, - (byte)0xFE, - (byte)0xFF}, - "UTF-32 big-endian"); - - /** - * Returns a String representation of this BOM - * value. - */ - public final String toString() - { - return description; - } - - /** - * Returns the bytes corresponding to this BOM value. - */ - public final byte[] getBytes() - { - final int length = bytes.length; - final byte[] result = new byte[length]; - - // Make a defensive copy - System.arraycopy(bytes,0,result,0,length); - - return result; - } - - private BOM(final byte bom[], final String description) - { - assert(bom != null) : "invalid BOM: null is not allowed"; - assert(description != null) : "invalid description: null is not allowed"; - assert(description.length() != 0) : "invalid description: empty string is not allowed"; - - this.bytes = bom; - this.description = description; - } - - final byte bytes[]; - private final String description; - - } // BOM - - /** - * Constructs a new UnicodeBOMInputStream that wraps the - * specified InputStream. - * - * @param inputStream an InputStream. - * - * @throws NullPointerException when inputStream is - * null. - * @throws IOException on reading from the specified InputStream - * when trying to detect the Unicode BOM. - */ - public UnicodeBOMInputStream(final InputStream inputStream) throws NullPointerException, - IOException - - { - if (inputStream == null) - throw new NullPointerException("invalid input stream: null is not allowed"); - - in = new PushbackInputStream(inputStream,4); - - final byte bom[] = new byte[4]; - final int read = in.read(bom); - - switch(read) - { - case 4: - if ((bom[0] == (byte)0xFF) && - (bom[1] == (byte)0xFE) && - (bom[2] == (byte)0x00) && - (bom[3] == (byte)0x00)) - { - this.bom = BOM.UTF_32_LE; - break; - } - else - if ((bom[0] == (byte)0x00) && - (bom[1] == (byte)0x00) && - (bom[2] == (byte)0xFE) && - (bom[3] == (byte)0xFF)) - { - this.bom = BOM.UTF_32_BE; - break; - } - - case 3: - if ((bom[0] == (byte)0xEF) && - (bom[1] == (byte)0xBB) && - (bom[2] == (byte)0xBF)) - { - this.bom = BOM.UTF_8; - break; - } - - case 2: - if ((bom[0] == (byte)0xFF) && - (bom[1] == (byte)0xFE)) - { - this.bom = BOM.UTF_16_LE; - break; - } - else - if ((bom[0] == (byte)0xFE) && - (bom[1] == (byte)0xFF)) - { - this.bom = BOM.UTF_16_BE; - break; - } - - default: - this.bom = BOM.NONE; - break; - } - - if (read > 0) - in.unread(bom,0,read); - } - - /** - * Returns the BOM that was detected in the wrapped - * InputStream object. - * - * @return a BOM value. - */ - public final BOM getBOM() - { - // BOM type is immutable. - return bom; - } - - /** - * Skips the BOM that was found in the wrapped - * InputStream object. - * - * @return this UnicodeBOMInputStream. - * - * @throws IOException when trying to skip the BOM from the wrapped - * InputStream object. - */ - public final synchronized UnicodeBOMInputStream skipBOM() throws IOException - { - if (!skipped) - { - in.skip(bom.bytes.length); - skipped = true; - } - return this; - } - - /** - * {@inheritDoc} - */ - public int read() throws IOException - { - return in.read(); - } - - /** - * {@inheritDoc} - */ - public int read(final byte b[]) throws IOException, - NullPointerException - { - return in.read(b,0,b.length); - } - - /** - * {@inheritDoc} - */ - public int read(final byte b[], - final int off, - final int len) throws IOException, - NullPointerException - { - return in.read(b,off,len); - } - - /** - * {@inheritDoc} - */ - public long skip(final long n) throws IOException - { - return in.skip(n); - } - - /** - * {@inheritDoc} - */ - public int available() throws IOException - { - return in.available(); - } - - /** - * {@inheritDoc} - */ - public void close() throws IOException - { - in.close(); - } - - /** - * {@inheritDoc} - */ - public synchronized void mark(final int readlimit) - { - in.mark(readlimit); - } - - /** - * {@inheritDoc} - */ - public synchronized void reset() throws IOException - { - in.reset(); - } - - /** - * {@inheritDoc} - */ - public boolean markSupported() - { - return in.markSupported(); - } - - private final PushbackInputStream in; - private final BOM bom; - private boolean skipped = false; - -} // UnicodeBOMInputStream diff --git a/src/io/github/sspanak/tt9/db/DictionaryDb.java b/src/io/github/sspanak/tt9/db/DictionaryDb.java index 8d3fe1dd..db57d621 100644 --- a/src/io/github/sspanak/tt9/db/DictionaryDb.java +++ b/src/io/github/sspanak/tt9/db/DictionaryDb.java @@ -59,16 +59,8 @@ public class DictionaryDb { } - public static void beginTransaction() { - getInstance().beginTransaction(); - } - - - public static void endTransaction(boolean success) { - if (success) { - getInstance().setTransactionSuccessful(); - } - getInstance().endTransaction(); + public static void runInTransaction(Runnable r) { + getInstance().runInTransaction(r); } diff --git a/src/io/github/sspanak/tt9/db/DictionaryImportAbortedException.java b/src/io/github/sspanak/tt9/db/DictionaryImportAbortedException.java new file mode 100644 index 00000000..25c6f4b5 --- /dev/null +++ b/src/io/github/sspanak/tt9/db/DictionaryImportAbortedException.java @@ -0,0 +1,7 @@ +package io.github.sspanak.tt9.db; + +public class DictionaryImportAbortedException extends Exception{ + public DictionaryImportAbortedException() { + super("Dictionary import stopped by request."); + } +} diff --git a/src/io/github/sspanak/tt9/db/DictionaryImportException.java b/src/io/github/sspanak/tt9/db/DictionaryImportException.java new file mode 100644 index 00000000..6a3fd087 --- /dev/null +++ b/src/io/github/sspanak/tt9/db/DictionaryImportException.java @@ -0,0 +1,14 @@ +package io.github.sspanak.tt9.db; + +public class DictionaryImportException extends Exception { + public final String file; + public final String word; + public final long line; + + DictionaryImportException(String file, String word, long line) { + super("Dictionary import failed"); + this.file = file; + this.word = word; + this.line = line; + } +} diff --git a/src/io/github/sspanak/tt9/db/DictionaryLoader.java b/src/io/github/sspanak/tt9/db/DictionaryLoader.java new file mode 100644 index 00000000..a0d2ceda --- /dev/null +++ b/src/io/github/sspanak/tt9/db/DictionaryLoader.java @@ -0,0 +1,259 @@ +package io.github.sspanak.tt9.db; + +import android.content.Context; +import android.content.res.AssetManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.LineNumberReader; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.regex.Pattern; + +import io.github.sspanak.tt9.Logger; +import io.github.sspanak.tt9.languages.InvalidLanguageCharactersException; +import io.github.sspanak.tt9.languages.InvalidLanguageException; +import io.github.sspanak.tt9.languages.Language; +import io.github.sspanak.tt9.preferences.T9Preferences; + +public class DictionaryLoader { + private final AssetManager assets; + private final T9Preferences prefs; + + private boolean isStopped = true; + private int currentFile = 0; + private long lastProgressUpdate = 0; + + private final Pattern containsPunctuation = Pattern.compile("\\p{Punct}(? languages) { + new Thread() { + @Override + public void run() { + currentFile = 0; + isStopped = false; + // SQLite does not support parallel queries, so let's import them one by one + for (Language lang : languages) { + if (isStopped) { + break; + } + importAll(handler, lang); + currentFile++; + } + } + }.start(); + } + + + public void stop() { + isStopped = true; + } + + + private void importAll(Handler handler, Language language) { + final String logTag = "tt9.DictionaryLoader.importAll"; + + if (language == null) { + Logger.e(logTag, "Failed loading a dictionary for NULL language."); + sendError(handler, InvalidLanguageException.class.getSimpleName(), -1); + return; + } + + DictionaryDb.runInTransaction(() -> { + long start = System.currentTimeMillis(); + importLetters(language); + Logger.i( + logTag, + "Loaded letters for '" + language.getName() + "' language in: " + (System.currentTimeMillis() - start) + " ms" + ); + + try { + start = System.currentTimeMillis(); + importWords(handler, language); + Logger.i( + logTag, + "Dictionary: '" + language.getDictionaryFile() + "'" + + " processing time: " + (System.currentTimeMillis() - start) + " ms" + ); + } catch (DictionaryImportAbortedException e) { + stop(); + + Logger.i( + logTag, + e.getMessage() + ". File '" + language.getDictionaryFile() + "' not imported." + ); + } catch (DictionaryImportException e) { + stop(); + sendImportError(handler, DictionaryImportException.class.getSimpleName(), language.getId(), e.line, e.word); + + Logger.e( + logTag, + " Invalid word: '" + e.word + + "' in dictionary: '" + language.getDictionaryFile() + "'" + + " on line " + e.line + + " of language '" + language.getName() + "'. " + + e.getMessage() + ); + } catch (Exception e) { + stop(); + sendError(handler, e.getClass().getSimpleName(), language.getId()); + + Logger.e( + logTag, + "Failed loading dictionary: " + language.getDictionaryFile() + + " for language '" + language.getName() + "'. " + + e.getMessage() + ); + } + }); + } + + + private void importLetters(Language language) { + ArrayList letters = new ArrayList<>(); + + for (int key = 0; key <= 9; key++) { + for (String langChar : language.getKeyCharacters(key)) { + if (langChar.length() == 1 && langChar.charAt(0) >= '0' && langChar.charAt(0) <= '9') { + // We do not want 0-9 as "word suggestions" in Predictive mode. It looks confusing + // when trying to type a word and also, one can type them by holding the respective + // key. + continue; + } + + Word word = new Word(); + word.langId = language.getId(); + word.frequency = 0; + word.sequence = String.valueOf(key); + word.word = langChar; + + letters.add(word); + } + } + + DictionaryDb.insertWordsSync(letters); + } + + + private void importWords(Handler handler, Language language) throws Exception { + importWords(handler, language, language.getDictionaryFile()); + } + + + private void importWords(Handler handler, Language language, String dictionaryFile) throws Exception { + long totalWords = countWords(dictionaryFile); + + BufferedReader br = new BufferedReader(new InputStreamReader(assets.open(dictionaryFile), StandardCharsets.UTF_8)); + + ArrayList dbWords = new ArrayList<>(); + long line = 0; + + sendProgressMessage(handler, language, 0, 0); + + for (String word; (word = br.readLine()) != null; line++) { + if (isStopped) { + br.close(); + sendProgressMessage(handler, language, 0, 0); + throw new DictionaryImportAbortedException(); + } + + validateWord(language, word, line); + dbWords.add(stringToWord(language, word)); + + if (line % prefs.getDictionaryImportWordChunkSize() == 0) { + DictionaryDb.insertWordsSync(dbWords); + dbWords.clear(); + } + + if (totalWords > 0) { + int progress = (int) Math.floor(100.0 * line / totalWords); + sendProgressMessage(handler, language, progress, prefs.getDictionaryImportProgressUpdateInterval()); + } + } + + br.close(); + sendProgressMessage(handler, language, 100, 0); + } + + + private long countWords(String filename) { + try (LineNumberReader reader = new LineNumberReader(new InputStreamReader(assets.open(filename), StandardCharsets.UTF_8))) { + //noinspection ResultOfMethodCallIgnored + reader.skip(Long.MAX_VALUE); + long lines = reader.getLineNumber(); + reader.close(); + + return lines; + } catch (Exception e) { + Logger.w("DictionaryLoader.countWords", "Could not count the lines of file: " + filename + ". " + e.getMessage()); + return 0; + } + } + + + private void validateWord(Language language, String word, long line) throws DictionaryImportException { + if (!language.isPunctuationPartOfWords() && containsPunctuation.matcher(word).find()) { + throw new DictionaryImportException(language.getDictionaryFile(), word, line); + } + } + + + private Word stringToWord(Language language, String word) throws InvalidLanguageCharactersException { + Word dbWord = new Word(); + dbWord.langId = language.getId(); + dbWord.frequency = 0; + dbWord.sequence = language.getDigitSequenceForWord(word); + dbWord.word = word; + + return dbWord; + } + + + private void sendProgressMessage(Handler handler, Language language, int progress, int progressUpdateInterval) { + long now = System.currentTimeMillis(); + if (now - lastProgressUpdate < progressUpdateInterval) { + return; + } + + lastProgressUpdate = now; + + Bundle bundle = new Bundle(); + bundle.putInt("languageId", language.getId()); + bundle.putInt("progress", progress); + bundle.putInt("currentFile", currentFile); + Message msg = new Message(); + msg.setData(bundle); + handler.sendMessage(msg); + } + + + private void sendError(Handler handler, String message, int langId) { + Bundle bundle = new Bundle(); + bundle.putString("error", message); + bundle.putInt("languageId", langId); + Message msg = new Message(); + msg.setData(bundle); + handler.sendMessage(msg); + } + + + private void sendImportError(Handler handler, String message, int langId, long fileLine, String word) { + Bundle bundle = new Bundle(); + bundle.putString("error", message); + bundle.putLong("fileLine", fileLine); + bundle.putInt("languageId", langId); + bundle.putString("word", word); + Message msg = new Message(); + msg.setData(bundle); + handler.sendMessage(msg); + } +} diff --git a/src/io/github/sspanak/tt9/languages/InvalidLanguageCharactersException.java b/src/io/github/sspanak/tt9/languages/InvalidLanguageCharactersException.java new file mode 100644 index 00000000..4f5186d5 --- /dev/null +++ b/src/io/github/sspanak/tt9/languages/InvalidLanguageCharactersException.java @@ -0,0 +1,15 @@ +package io.github.sspanak.tt9.languages; + +public class InvalidLanguageCharactersException extends Exception { + private Language language; + + public InvalidLanguageCharactersException(Language language, String extraMessage) { + super("Some characters are not supported in language: " + language.getName() + ". " + extraMessage); + this.language = language; + } + + public Language getLanguage() { + return language; + } +} + diff --git a/src/io/github/sspanak/tt9/languages/Language.java b/src/io/github/sspanak/tt9/languages/Language.java index 1e801e41..8a2d4498 100644 --- a/src/io/github/sspanak/tt9/languages/Language.java +++ b/src/io/github/sspanak/tt9/languages/Language.java @@ -70,7 +70,7 @@ public class Language { return chars; } - public String getDigitSequenceForWord(String word) throws Exception { + public String getDigitSequenceForWord(String word) throws InvalidLanguageCharactersException { StringBuilder sequence = new StringBuilder(); String lowerCaseWord = word.toLowerCase(locale); @@ -83,9 +83,7 @@ public class Language { } if (word.length() != sequence.length()) { - throw new Exception( - "Failed generating digit sequence for word: '" + word + "'. Some characters are not supported in language: " + name - ); + throw new InvalidLanguageCharactersException(this, "Failed generating digit sequence for word: '" + word); } return sequence.toString(); diff --git a/src/io/github/sspanak/tt9/preferences/T9Preferences.java b/src/io/github/sspanak/tt9/preferences/T9Preferences.java index eb06b7ea..b85acfd9 100644 --- a/src/io/github/sspanak/tt9/preferences/T9Preferences.java +++ b/src/io/github/sspanak/tt9/preferences/T9Preferences.java @@ -2,10 +2,10 @@ package io.github.sspanak.tt9.preferences; import android.content.Context; import android.content.SharedPreferences; -import androidx.preference.PreferenceManager; - import android.view.KeyEvent; +import androidx.preference.PreferenceManager; + import java.util.ArrayList; import java.util.Arrays; @@ -23,11 +23,13 @@ public class T9Preferences { private final SharedPreferences prefs; private final SharedPreferences.Editor prefsEditor; + public T9Preferences (Context context) { prefs = PreferenceManager.getDefaultSharedPreferences(context); prefsEditor = prefs.edit(); } + public static T9Preferences getInstance() { if (self == null) { self = new T9Preferences(TraditionalT9.getMainContext()); @@ -36,7 +38,8 @@ public class T9Preferences { return self; } - /************* VALIDATORS *************/ + + /************* validators *************/ private boolean doesLanguageExist(int langId) { return LanguageCollection.getLanguage(langId) != null; @@ -70,7 +73,7 @@ public class T9Preferences { } - /************* PREFERENCES OPERATIONS *************/ + /************* input settings *************/ public ArrayList getEnabledLanguages() { int languageMask = prefs.getInt("pref_enabled_languages", 1); @@ -101,6 +104,7 @@ public class T9Preferences { prefsEditor.apply(); } + public int getTextCase() { return prefs.getInt("pref_text_case", InputMode.CASE_LOWER); } @@ -131,6 +135,7 @@ public class T9Preferences { } } + public int getInputMode() { return prefs.getInt("pref_input_mode", InputMode.MODE_PREDICTIVE); } @@ -146,18 +151,24 @@ public class T9Preferences { } + /************* hotkey settings *************/ + public int getKeyBackspace() { return prefs.getInt("pref_key_backspace", KeyEvent.KEYCODE_BACK); } - public int getKeyInputMode() { return prefs.getInt("pref_key_input_mode", KeyEvent.KEYCODE_POUND); } - public int getKeyOtherActions() { return prefs.getInt("pref_key_other_actions", KeyEvent.KEYCODE_STAR); } - public int getSuggestionsMin() { return 8; } - public int getSuggestionsMax() { return 20; } + /************* internal settings *************/ + public int getDictionaryImportProgressUpdateInterval() { return 100; /* ms */ } + public int getDictionaryImportWordChunkSize() { return 1000; /* words */ } + public int getSuggestionsMax() { return 20; } + public int getSuggestionsMin() { return 8; } + + + /************* add word, last word *************/ public String getLastWord() { return prefs.getString("last_word", ""); @@ -173,5 +184,4 @@ public class T9Preferences { public void clearLastWord() { this.saveLastWord(""); } - } diff --git a/src/io/github/sspanak/tt9/ui/TraditionalT9Settings.java b/src/io/github/sspanak/tt9/ui/TraditionalT9Settings.java index b9b43a0d..1543bc9d 100644 --- a/src/io/github/sspanak/tt9/ui/TraditionalT9Settings.java +++ b/src/io/github/sspanak/tt9/ui/TraditionalT9Settings.java @@ -1,6 +1,5 @@ package io.github.sspanak.tt9.ui; -import android.app.Activity; import android.app.AlertDialog; import android.app.ListActivity; import android.app.ProgressDialog; @@ -8,38 +7,24 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; -import android.os.AsyncTask; import android.os.Bundle; -import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.os.Message; -import android.os.SystemClock; -import android.text.TextUtils; import android.view.View; import android.widget.ListAdapter; import android.widget.ListView; -import com.stackoverflow.answer.UnicodeBOMInputStream; - -import java.io.BufferedReader; -import java.io.Closeable; -import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Properties; -import io.github.sspanak.tt9.Logger; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.DictionaryDb; -import io.github.sspanak.tt9.db.Word; +import io.github.sspanak.tt9.db.DictionaryImportException; +import io.github.sspanak.tt9.db.DictionaryLoader; +import io.github.sspanak.tt9.languages.InvalidLanguageCharactersException; +import io.github.sspanak.tt9.languages.InvalidLanguageException; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageCollection; import io.github.sspanak.tt9.preferences.T9Preferences; @@ -49,365 +34,11 @@ import io.github.sspanak.tt9.settings_legacy.SettingAdapter; public class TraditionalT9Settings extends ListActivity implements DialogInterface.OnCancelListener { - AsyncTask task = null; - final static String userdictname = "user.%s.dict"; - final static String sddir = "tt9"; + private DictionaryLoader loader; + ProgressDialog progressDialog; Context mContext = null; - public static class LoadException extends Exception { - private static final long serialVersionUID = 3323913652550046354L; - - public LoadException() { - super(); - } - } - - private static class Reply { - public boolean status; - private final List msgs; - - protected Reply() { - this.status = true; - this.msgs = new ArrayList<>(4); - } - - protected void addMsg(String msg) throws LoadException { - msgs.add(msg); - if (msgs.size() > 6) { - msgs.add("Too many errors, bailing."); - throw new LoadException(); - } - } - protected void forceMsg(String msg) { - msgs.add(msg); - } - - } - - private void finishAndShowError(ProgressDialog pd, Reply result, int title){ - if (pd != null) { - // Logger.d("onPostExecute", "pd"); - if (pd.isShowing()) { - pd.dismiss(); - } - } - if (result == null) { - // bad thing happened - Logger.e("onPostExecute", "Bad things happen?"); - } else { - String msg = TextUtils.join("\n", result.msgs); - Logger.d("onPostExecute", "Result: " + result.status + " " + msg); - if (!result.status) { - showErrorDialog(getResources().getString(title), msg); - } - } - } - - private static void closeStream(Closeable is, Reply reply) { - if (is == null) { - return; - } - try { - is.close(); - } catch (IOException e) { - e.printStackTrace(); - reply.forceMsg("Couldn't close stream: " + e.getMessage()); - } - } - - private class LoadDictTask extends AsyncTask { - /** - * The system calls this to perform work in a worker thread and delivers - * it the parameters given to AsyncTask.execute() - */ - ProgressDialog pd; - long size; - long pos; - boolean internal; - String[] dicts; - ArrayList mSupportedLanguages; - - LoadDictTask(int msgid, boolean intern, ArrayList supportedLanguages) { - internal = intern; - - dicts = new String[supportedLanguages.size()]; - int x = 0; - for (Language language : supportedLanguages) { - if (intern) { - dicts[x++] = language.getDictionaryFile(); - } else { - dicts[x++] = String.format(userdictname, language.getName().toLowerCase(Locale.ENGLISH)); - } - } - mSupportedLanguages = supportedLanguages; - - pd = new ProgressDialog(TraditionalT9Settings.this); - pd.setMessage(getResources().getString(msgid)); - pd.setOnCancelListener(TraditionalT9Settings.this); - } - - private long getDictSizes(boolean internal, String[] dicts) { - if (internal) { - InputStream input; - Properties props = new Properties(); - try { - input = getAssets().open("dict.properties"); - props.load(input); - long total = 0; - for (String dict : dicts) { - total += Long.parseLong(props.getProperty("size." + dict)); - } - return total; - - } catch (IOException e) { - Logger.e("getDictSizes", "Unable to get dict sizes"); - e.printStackTrace(); - return -1; - } catch (NumberFormatException e) { - Logger.e("getDictSizes", "Unable to parse sizes"); - return -1; - } - } else { - File backupfile = new File(Environment.getExternalStorageDirectory(), sddir); - long total = 0; - File f; - for (String dict : dicts) { - f = new File(backupfile, dict); - if (f.exists() && f.isFile()) { - total = total + f.length(); - } else { - total = total + 0; - } - } - return total; - } - } - - @Override protected void onPreExecute() { - size = getDictSizes(internal, dicts); - pos = 0; - if ( size >= 0 ) { - pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - pd.setMax(10000); - } else { - pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); - } - pd.show(); - } - - @Override - protected Reply doInBackground(String... mode) { - Reply reply = new Reply(); - - long startnow, endnow; - startnow = SystemClock.uptimeMillis(); - - // add characters first, then dictionary: - Logger.d("doInBackground", "Adding characters..."); - processChars(mSupportedLanguages); - Logger.d("doInBackground", "Characters added."); - - Logger.d("doInBackground", "Adding dict(s)..."); - - InputStream dictstream = null; - - try { - for (int x=0; x allLanguages) { - ArrayList list = new ArrayList<>(); - - try { - for (Language lang : allLanguages) { - for (int key = 0; key <= 9; key++) { - for (String langChar : lang.getKeyCharacters(key)) { - if (langChar.length() == 1 && langChar.charAt(0) >= '0' && langChar.charAt(0) <= '9') { - // We do not want 0-9 as "word suggestions" in Predictive mode. It looks confusing - // when trying to type a word and also, one can type them by holding the respective - // key. - continue; - } - - Word word = new Word(); - word.langId = lang.getId(); - word.sequence = String.valueOf(key); - word.word = langChar; - word.frequency = 0; - - list.add(word); - } - } - } - - DictionaryDb.insertWordsSync(list); - } catch (Exception e) { - Logger.e("processChars", e.getMessage()); - } - } - - private String getLine(BufferedReader br, Reply rpl, String fname) throws LoadException { - try { - return br.readLine(); - } catch (IOException e) { - e.printStackTrace(); - rpl.status = false; - rpl.addMsg("IO Error ("+fname+"): " + e.getMessage()); - } - return null; - } - - private Reply processFile(InputStream is, Reply rpl, Language lang, String fname) - throws LoadException, IOException { - long start = System.currentTimeMillis(); - - UnicodeBOMInputStream ubis = new UnicodeBOMInputStream(is); - - BufferedReader br = new BufferedReader(new InputStreamReader(ubis)); - ubis.skipBOM(); - - int freq; - String seq; - int linecount = 1; - int wordlen; - String fileWord = getLine(br, rpl, fname); - ArrayList dbWords = new ArrayList<>(); - int insertChunkSize = 1000; - int progressUpdateInterval = 100; // ms - long lastProgressUpdate = 0; - - try { - - DictionaryDb.beginTransaction(); - - while (fileWord != null) { - if (isCancelled()) { - rpl.status = false; - rpl.addMsg("User cancelled."); - break; - } - if (fileWord.contains(" ")) { - rpl.status = false; - rpl.addMsg("Cannot parse word with spaces: " + fileWord); - break; - } - - freq = 0; - wordlen = fileWord.getBytes(StandardCharsets.UTF_8).length; - pos += wordlen; - // replace junk characters: - fileWord = fileWord.replace("\uFEFF", ""); - try { - seq = lang.getDigitSequenceForWord(fileWord); - } catch (Exception e) { - rpl.status = false; - rpl.addMsg("Error on word ("+fileWord+") line "+ - linecount+" in (" + fname+"): "+ - getResources().getString(R.string.add_word_badchar, lang.getName(), fileWord)); - break; - } - linecount++; - - Word word = new Word(); - word.sequence = seq; - word.langId = lang.getId(); - word.word = fileWord; - word.frequency = freq; - dbWords.add(word); - - if (linecount % insertChunkSize == 0) { - DictionaryDb.insertWordsSync(dbWords); - dbWords.clear(); - } - - if (size >= 0 && System.currentTimeMillis() - lastProgressUpdate > progressUpdateInterval) { - publishProgress((int) ((float) pos / size * 10000)); - lastProgressUpdate = System.currentTimeMillis(); - } - fileWord = getLine(br, rpl, fname); - } - - DictionaryDb.insertWordsSync(dbWords); - DictionaryDb.endTransaction(true); - dbWords.clear(); - - publishProgress((int) ((float) pos / size * 10000)); - } catch (Exception e) { - DictionaryDb.endTransaction(false); - Logger.e("processFile", e.getMessage()); - } finally { - br.close(); - is.close(); - ubis.close(); - is.close(); - - Logger.d("processFile", "Inserted: " + fname + " in: " + (System.currentTimeMillis() - start) + "ms"); - } - return rpl; - } - - @Override - protected void onProgressUpdate(Integer... progress) { - if (pd.isShowing()) { - pd.setProgress(progress[0]); - } - } - - @Override - protected void onPostExecute(Reply result) { - finishAndShowError(pd, result, R.string.dictionary_load_title); - } - } - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -433,22 +64,33 @@ public class TraditionalT9Settings extends ListActivity implements DialogInterfa } + @Override + public void onCancel(DialogInterface dint) { + if (loader != null) { + loader.stop(); + } + } + @Override protected void onListItemClick(ListView l, View v, int position, long id) { Setting s = (Setting)getListView().getItemAtPosition(position); - if (s.id.equals("help")) - openHelp(); - else if (s.id.equals("loaddict")) - preloader(R.string.dictionary_loading, true); - else if (s.id.equals("truncatedict")) { - truncateWords(); + switch (s.id) { + case "help": + openHelp(); + break; + case "loaddict": + loadDictionaries(); + break; + case "truncatedict": + truncateWords(); + break; + default: + s.clicked(mContext); + break; } - else if (s.id.equals("loaduserdict")) - preloader(R.string.dictionary_loading_user_dict, false); - else - s.clicked(mContext); } + private void openHelp() { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(getString(R.string.help_url))); @@ -465,50 +107,106 @@ public class TraditionalT9Settings extends ListActivity implements DialogInterfa DictionaryDb.truncateWords(afterTruncate); } + private void loadDictionaries() { + ArrayList languages = LanguageCollection.getAll(T9Preferences.getInstance().getEnabledLanguages()); + initProgress(100 * languages.size()); - private void preloader(int msgid, boolean internal) { + Handler loadHandler = new Handler(Looper.getMainLooper()) { + @Override + public void handleMessage(Message msg) { + String error = msg.getData().getString("error", null); + if (error != null) { + hideProgress(); + handleError( + error, + msg.getData().getInt("languageId", -1), + msg.getData().getLong("fileLine", -1), + msg.getData().getString("word", "") + ); + } else { + int langId = msg.getData().getInt("languageId", -1); + Language lang = LanguageCollection.getLanguage(langId); + String langName = lang != null ? lang.getName() : "???"; - task = new LoadDictTask( - msgid, - internal, - LanguageCollection.getAll(T9Preferences.getInstance().getEnabledLanguages()) - ); - task.execute(); + String title = getResources().getString(R.string.dictionary_loading, langName); + showProgress( + msg.getData().getInt("currentFile", 0), + msg.getData().getInt("progress", 0), + title + ); + } + } + }; + + loader = new DictionaryLoader(this); + loader.load(loadHandler, languages); } + private void initProgress(int max) { + if (progressDialog == null) { + progressDialog = new ProgressDialog(this); + progressDialog.setOnCancelListener(TraditionalT9Settings.this); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + } + + progressDialog.setMax(max); + } + + private void showProgress(int currentFile, int currentFileProgress, String title) { + if (progressDialog == null) { + return; + } + + if (title != null) { + progressDialog.setMessage(title); + } + + int totalProgress = 100 * currentFile + currentFileProgress; + if (totalProgress <= 0 || totalProgress >= progressDialog.getMax()) { + progressDialog.dismiss(); + } else { + progressDialog.setProgress(totalProgress); + if (!progressDialog.isShowing()) { + progressDialog.show(); + } + } + } + + private void hideProgress() { + if (progressDialog != null) { + progressDialog.dismiss(); + } + } + + private void handleError(String errorType, int langId, long line, String word) { + Language lang = LanguageCollection.getLanguage(langId); + String message; + + if (lang == null || errorType.equals(InvalidLanguageException.class.getSimpleName())) { + message = getString(R.string.add_word_invalid_language); + } else if (errorType.equals(DictionaryImportException.class.getSimpleName()) || errorType.equals(InvalidLanguageCharactersException.class.getSimpleName())) { + String languageName = lang.getName(); + message = getString(R.string.dictionary_import_bad_char, word, line, languageName); + } else if (errorType.equals(IOException.class.getSimpleName()) || errorType.equals(FileNotFoundException.class.getSimpleName())) { + String languageName = lang.getName(); + message = getString(R.string.dictionary_not_found, languageName); + } else { + String languageName = lang.getName(); + message = getString(R.string.dictionary_import_error, languageName, errorType); + } + + showErrorDialog(getString(R.string.dictionary_load_title), message); + } + private void showErrorDialog(CharSequence title, CharSequence msg) { - showErrorDialog(new AlertDialog.Builder(this), title, msg); - } - - private void showErrorDialog(AlertDialog.Builder builder, CharSequence title, CharSequence msg) { - builder.setMessage(msg).setTitle(title) - .setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - dialog.dismiss(); - } - }); + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder + .setMessage(msg) + .setTitle(title) + .setNeutralButton(android.R.string.ok, (dialog, id) -> dialog.dismiss()); AlertDialog dialog = builder.create(); dialog.show(); } - - private void showErrorDialogID(AlertDialog.Builder builder, int titleid, int msgid) { - builder.setMessage(msgid).setTitle(titleid) - .setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - dialog.dismiss(); - } - }); - AlertDialog dialog = builder.create(); - dialog.show(); - } - - - @Override - public void onCancel(DialogInterface dint) { - task.cancel(false); - } }