diff --git a/README.md b/README.md index 6509eda4a..ee8f20636 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,8 @@ or get the APK from the [Releases Section](https://github.com/sspanak/tt9/releas ## System Requirements - Android 4.4 or higher. _(Tested and confirmed on Android 4.4.2, 10 and 11)_ - Free space: - - Minimum 30 Mb when not using Predictive mode and no dictionaries are loaded. - - Plenty of space per each enabled language in Predictive mode (25-100 Mb, depending on the word count). + - Minimum 40 Mb when not using Predictive mode and no dictionaries are loaded. + - Plenty of space per each enabled language in Predictive mode (50-400 Mb, depending on the word count). - A hardware keypad or a keyboard. For touchscreen-only devices, an on-screen keypad can be enabled in the Settings. _If you own a phone with Android 2.2 up to 4.4, please refer to the original version of Traditional T9 from 2016._ diff --git a/build.gradle b/build.gradle index a4a867697..812b93ad4 100644 --- a/build.gradle +++ b/build.gradle @@ -9,10 +9,13 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:8.0.2' classpath 'gradle.plugin.at.zierler:yaml-validator-plugin:1.5.0' + classpath("io.objectbox:objectbox-gradle-plugin:3.7.1") } } + apply plugin: 'com.android.application' apply plugin: 'at.zierler.yamlvalidator' +apply plugin: "io.objectbox" apply from: 'gradle/scripts/constants.gradle' apply from: 'gradle/scripts/dictionary-tools.gradle' @@ -20,10 +23,6 @@ apply from: 'gradle/scripts/validate-languages.gradle' apply from: 'gradle/scripts/version-tools.gradle' configurations.configureEach { - // fixes 'duplicate class error', when using these combine: androidx.core:1.10.1, androidx.preference:1.2.0 and androidx.room:2.5.1 - // see: https://stackoverflow.com/questions/75274720/a-failure-occurred-while-executing-appcheckdebugduplicateclasses/75315276#75315276 - exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8' - yamlValidator { searchPaths = ['languages/definitions'] } @@ -32,8 +31,10 @@ configurations.configureEach { dependencies { implementation 'androidx.core:core:1.10.1' implementation 'androidx.preference:preference:1.2.1' - implementation 'androidx.room:room-runtime:2.5.2' - annotationProcessor 'androidx.room:room-compiler:2.5.2' + + // fixes 'duplicate class error' when using "androidx.core" > 1.9.0 + // see: https://stackoverflow.com/a/77323424 + implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) } repositories { diff --git a/objectbox-models/default.json b/objectbox-models/default.json new file mode 100644 index 000000000..8e995d8af --- /dev/null +++ b/objectbox-models/default.json @@ -0,0 +1,78 @@ +{ + "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.", + "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.", + "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.", + "entities": [ + { + "id": "1:8686759156275895115", + "lastPropertyId": "9:148562041880145406", + "name": "Word", + "properties": [ + { + "id": "1:7053654361616810150", + "name": "id", + "type": 6, + "flags": 1 + }, + { + "id": "2:1100881396300803213", + "name": "frequency", + "type": 5 + }, + { + "id": "3:3482550679443532896", + "name": "isCustom", + "type": 1 + }, + { + "id": "4:7366572918924354162", + "name": "langId", + "type": 5 + }, + { + "id": "5:2610279871343053806", + "name": "length", + "type": 5 + }, + { + "id": "6:5269773217039117329", + "name": "sequence", + "indexId": "1:2971223841434624317", + "type": 9, + "flags": 2048 + }, + { + "id": "7:3922044271904033267", + "name": "sequenceShort", + "indexId": "2:2641086768976362614", + "type": 2, + "flags": 8 + }, + { + "id": "8:1684236207225806285", + "name": "uniqueId", + "indexId": "3:5820769207826940948", + "type": 9, + "flags": 34848 + }, + { + "id": "9:148562041880145406", + "name": "word", + "type": 9 + } + ], + "relations": [] + } + ], + "lastEntityId": "1:8686759156275895115", + "lastIndexId": "3:5820769207826940948", + "lastRelationId": "0:0", + "lastSequenceId": "0:0", + "modelVersion": 5, + "modelVersionParserMinimum": 5, + "retiredEntityUids": [], + "retiredIndexUids": [], + "retiredPropertyUids": [], + "retiredRelationUids": [], + "version": 1 +} \ No newline at end of file diff --git a/src/io/github/sspanak/tt9/db/DictionaryDb.java b/src/io/github/sspanak/tt9/db/DictionaryDb.java index f223564a6..2452f0132 100644 --- a/src/io/github/sspanak/tt9/db/DictionaryDb.java +++ b/src/io/github/sspanak/tt9/db/DictionaryDb.java @@ -1,11 +1,9 @@ package io.github.sspanak.tt9.db; import android.content.Context; -import android.database.sqlite.SQLiteConstraintException; import android.os.Handler; import androidx.annotation.NonNull; -import androidx.sqlite.db.SimpleSQLiteQuery; import java.util.ArrayList; import java.util.List; @@ -13,24 +11,22 @@ import io.github.sspanak.tt9.ConsumerCompat; import io.github.sspanak.tt9.Logger; import io.github.sspanak.tt9.db.exceptions.InsertBlankWordException; -import io.github.sspanak.tt9.db.room.TT9Room; -import io.github.sspanak.tt9.db.room.Word; -import io.github.sspanak.tt9.db.room.WordList; -import io.github.sspanak.tt9.db.room.WordsDao; +import io.github.sspanak.tt9.db.objectbox.Word; +import io.github.sspanak.tt9.db.objectbox.WordList; +import io.github.sspanak.tt9.db.objectbox.WordStore; import io.github.sspanak.tt9.ime.TraditionalT9; -import io.github.sspanak.tt9.languages.InvalidLanguageException; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.preferences.SettingsStore; +import io.objectbox.exception.UniqueViolationException; public class DictionaryDb { - private static TT9Room dbInstance; - + private static WordStore store; private static final Handler asyncHandler = new Handler(); public static synchronized void init(Context context) { - if (dbInstance == null) { + if (store == null) { context = context == null ? TraditionalT9.getMainContext() : context; - dbInstance = TT9Room.getInstance(context); + store = new WordStore(context); } } @@ -40,18 +36,18 @@ public static synchronized void init() { } - private static TT9Room getInstance() { + private static WordStore getStore() { init(); - return dbInstance; + return store; } - private static void printDebug(String tag, String title, String sequence, WordList words, long startTime) { + private static void printLoadDebug(String sequence, WordList words, long startTime) { if (!Logger.isDebugLevel()) { return; } - StringBuilder debugText = new StringBuilder(title); + StringBuilder debugText = new StringBuilder("===== Word Matches ====="); debugText .append("\n") .append("Word Count: ").append(words.size()) @@ -62,12 +58,12 @@ private static void printDebug(String tag, String title, String sequence, WordLi debugText.append(" Sequence: ").append(sequence); } - Logger.d(tag, debugText.toString()); + Logger.d("loadWords", debugText.toString()); } public static void runInTransaction(Runnable r) { - getInstance().runInTransaction(r); + getStore().runInTransaction(r); } @@ -78,42 +74,66 @@ public static void runInTransaction(Runnable r) { * This query will finish immediately, if there is nothing to do. It's safe to run it often. */ public static void normalizeWordFrequencies(SettingsStore settings) { - new Thread(() -> { - long time = System.currentTimeMillis(); - - int affectedRows = getInstance().wordsDao().normalizeFrequencies( - settings.getWordFrequencyNormalizationDivider(), - settings.getWordFrequencyMax() - ); + final String LOG_TAG = "db.normalizeWordFrequencies"; - Logger.d( - "db.normalizeWordFrequencies", - "Normalized " + affectedRows + " words in: " + (System.currentTimeMillis() - time) + " ms" - ); + new Thread(() -> { + for (int langId : getStore().getLanguages()) { + getStore().runInTransactionAsync(() -> { + try { + long start = System.currentTimeMillis(); + + if (getStore().getMaxFrequency(langId) < settings.getWordFrequencyMax()) { + return; + } + + List words = getStore().getMany(langId); + if (words == null) { + return; + } + + for (Word w : words) { + w.frequency /= settings.getWordFrequencyNormalizationDivider(); + } + + getStore().put(words); + + Logger.d( + LOG_TAG, + "Normalized language: " + langId + ", " + words.size() + " words in: " + (System.currentTimeMillis() - start) + " ms" + ); + } catch (Exception e) { + Logger.e(LOG_TAG, "Word normalization failed. " + e.getMessage()); + } finally { + getStore().closeThreadResources(); + } + }); + } }).start(); } public static void areThereWords(ConsumerCompat notification, Language language) { new Thread(() -> { - int langId = language != null ? language.getId() : -1; - notification.accept(getInstance().wordsDao().count(langId) > 0); + boolean areThere = getStore().count(language != null ? language.getId() : -1) > 0; + getStore().closeThreadResources(); + notification.accept(areThere); }).start(); } - public static void deleteWords(Runnable notification) { - deleteWords(notification, null); + public static void deleteWords(Context context, Runnable notification) { + new Thread(() -> { + getStore().destroy(); + store = null; + init(context); + notification.run(); + }).start(); } - public static void deleteWords(Runnable notification, ArrayList languageIds) { + public static void deleteWords(Runnable notification, @NonNull ArrayList languageIds) { new Thread(() -> { - if (languageIds == null) { - getInstance().clearAllTables(); - } else if (languageIds.size() > 0) { - getInstance().wordsDao().deleteByLanguage(languageIds); - } + getStore().removeMany(languageIds).closeThreadResources(); notification.run(); }).start(); } @@ -124,168 +144,128 @@ public static void insertWord(ConsumerCompat statusHandler, @NonNull La throw new InsertBlankWordException(); } - Word dbWord = new Word(); - dbWord.langId = language.getId(); - dbWord.sequence = language.getDigitSequenceForWord(word); - dbWord.word = word; - dbWord.length = word.length(); - dbWord.frequency = 1; - new Thread(() -> { try { - if (getInstance().wordsDao().doesWordExist(dbWord.langId, dbWord.word) > 0) { - throw new SQLiteConstraintException("Word already exists."); + if (getStore().exists(language.getId(), word, language.getDigitSequenceForWord(word))) { + throw new UniqueViolationException("Word already exists"); } - - getInstance().wordsDao().insert(dbWord); - getInstance().wordsDao().incrementFrequency(dbWord.langId, dbWord.word, dbWord.sequence); + getStore().put(Word.create(language, word, 1, true)); statusHandler.accept(0); - } catch (SQLiteConstraintException e) { - String msg = "Constraint violation when inserting a word: '" + dbWord.word + "' / sequence: '" + dbWord.sequence + "', for language: " + dbWord.langId - + ". " + e.getMessage(); - Logger.e("insertWord", msg); + } catch (UniqueViolationException e) { + String msg = "Skipping word: '" + word + "' for language: " + language.getId() + ", because it already exists."; + Logger.w("insertWord", msg); statusHandler.accept(1); } catch (Exception e) { - String msg = "Failed inserting word: '" + dbWord.word + "' / sequence: '" + dbWord.sequence + "', for language: " + dbWord.langId + ". " + e.getMessage(); + String msg = "Failed inserting word: '" + word + "' for language: " + language.getId() + ". " + e.getMessage(); Logger.e("insertWord", msg); statusHandler.accept(2); + } finally { + getStore().closeThreadResources(); } }).start(); } public static void upsertWordsSync(List words) { - getInstance().wordsDao().upsertMany(words); + getStore().put(words); + getStore().closeThreadResources(); } - public static void incrementWordFrequency(Language language, String word, String sequence) throws Exception { - Logger.d("incrementWordFrequency", "Incrementing priority of Word: " + word +" | Sequence: " + sequence); - - if (language == null) { - throw new InvalidLanguageException(); - } - - // If both are empty, it is the same as changing the frequency of: "", which is simply a no-op. - if ((word == null || word.length() == 0) && (sequence == null || sequence.length() == 0)) { + public static void incrementWordFrequency(@NonNull Language language, @NonNull String word, @NonNull String sequence) { + // If any of these is empty, it is the same as changing the frequency of: "", which is simply a no-op. + if (word.length() == 0 || sequence.length() == 0) { return; } - // If one of them is empty, then this is an invalid operation, - // because a digit sequence exist for every word. - if (word == null || word.length() == 0 || sequence == null || sequence.length() == 0) { - throw new Exception("Cannot increment word frequency. Word: " + word + " | Sequence: " + sequence); - } - new Thread(() -> { try { - int affectedRows = getInstance().wordsDao().incrementFrequency(language.getId(), word, sequence); + long start = System.currentTimeMillis(); + + Word dbWord = getStore().get(language.getId(), word, sequence); // In case the user has changed the text case, there would be no match. // Try again with the lowercase equivalent. - if (affectedRows == 0) { - String lowercaseWord = word.toLowerCase(language.getLocale()); - affectedRows = getInstance().wordsDao().incrementFrequency(language.getId(), lowercaseWord, sequence); + if (dbWord == null) { + dbWord = getStore().get(language.getId(), word.toLowerCase(language.getLocale()), sequence); + } - Logger.d("incrementWordFrequency", "Attempting to increment frequency for lowercase variant: " + lowercaseWord); + if (dbWord == null) { + throw new Exception("No such word"); } - Logger.d("incrementWordFrequency", "Affected rows: " + affectedRows); + int max = getStore().getMaxFrequency(dbWord.langId, dbWord.sequence, dbWord.word); + if (dbWord.frequency <= max) { + dbWord.frequency = max + 1; + getStore().put(dbWord); + long time = System.currentTimeMillis() - start; + + Logger.d( + "incrementWordFrequency", + "Incremented frequency of '" + dbWord.word + "' to: " + dbWord.frequency + ". Time: " + time + " ms" + ); + } else { + long time = System.currentTimeMillis() - start; + Logger.d( + "incrementWordFrequency", + "'" + dbWord.word + "' is already the top word. Keeping frequency: " + dbWord.frequency + ". Time: " + time + " ms" + ); + } } catch (Exception e) { Logger.e( DictionaryDb.class.getName(), - "Failed incrementing word frequency. Word: " + word + " | Sequence: " + sequence + ". " + e.getMessage() + "Failed incrementing word frequency. Word: " + word + ". " + e.getMessage() ); + } finally { + getStore().closeThreadResources(); } }).start(); } /** - * loadWordsExact - * Loads words that match exactly the "sequence" and the optional "filter". - * For example: "7655" gets "roll". + * loadWords + * Loads words matching and similar to a given digit sequence + * For example: "7655" -> "roll" (exact match), but also: "rolled", "roller", "rolling", ... + * and other similar. */ - private static ArrayList loadWordsExact(Language language, String sequence, String filter, int maximumWords) { - long start = System.currentTimeMillis(); - WordList matches = new WordList(getInstance().wordsDao().getMany( - language.getId(), - maximumWords, - sequence, - filter == null || filter.equals("") ? null : filter - )); - - printDebug("loadWordsExact", "===== Exact Word Matches =====", sequence, matches, start); - return matches.toStringList(); - } - - - /** - * loadWordsFuzzy - * Loads words that start with "sequence" and optionally match the "filter". - * For example: "7655" -> "roll", but also: "rolled", "roller", "rolling", ... - */ - private static ArrayList loadWordsFuzzy(Language language, String sequence, String filter, int maximumWords) { + private static ArrayList loadWords(Language language, String sequence, String filter, int minimumWords, int maximumWords) { long start = System.currentTimeMillis(); - // fuzzy queries are heavy, so we must restrict the search range as much as possible - boolean noFilter = (filter == null || filter.equals("")); - int maxWordLength = noFilter && sequence.length() <= 2 ? 5 : 1000; - String index = sequence.length() <= 2 ? WordsDao.indexShortWords : WordsDao.indexLongWords; - SimpleSQLiteQuery sql = TT9Room.getFuzzyQuery(index, language.getId(), maximumWords, sequence, sequence.length(), maxWordLength, filter); - - WordList matches = new WordList(getInstance().wordsDao().getCustom(sql)); - - // In some cases, searching for words starting with "digitSequence" and limited to "maxWordLength" of 5, - // may yield too few results. If so, we expand the search range a bit. - if (noFilter && matches.size() < maximumWords) { - sql = TT9Room.getFuzzyQuery( - WordsDao.indexLongWords, - language.getId(), - maximumWords - matches.size(), - sequence, - 5, - 1000 - ); - matches.addAll(getInstance().wordsDao().getCustom(sql)); - } + WordList matches = getStore() + .getMany(language, sequence, filter, maximumWords) + .filter(sequence.length(), minimumWords); - printDebug("loadWordsFuzzy", "~=~=~=~ Fuzzy Word Matches ~=~=~=~", sequence, matches, start); + getStore().closeThreadResources(); + printLoadDebug(sequence, matches, start); return matches.toStringList(); } - private static void sendWords(ConsumerCompat> dataHandler, ArrayList wordList) { - asyncHandler.post(() -> dataHandler.accept(wordList)); - } - - public static void getWords(ConsumerCompat> dataHandler, Language language, String sequence, String filter, int minimumWords, int maximumWords) { final int minWords = Math.max(minimumWords, 0); - final int maxWords = Math.max(maximumWords, minimumWords); - - ArrayList wordList = new ArrayList<>(maxWords); + final int maxWords = Math.max(maximumWords, minWords); if (sequence == null || sequence.length() == 0) { Logger.w("db.getWords", "Attempting to get words for an empty sequence."); - sendWords(dataHandler, wordList); + sendWords(dataHandler, new ArrayList<>()); return; } if (language == null) { Logger.w("db.getWords", "Attempting to get words for NULL language."); - sendWords(dataHandler, wordList); + sendWords(dataHandler, new ArrayList<>()); return; } - new Thread(() -> { - wordList.addAll(loadWordsExact(language, sequence, filter, maxWords)); + new Thread(() -> sendWords( + dataHandler, + loadWords(language, sequence, filter, minWords, maxWords)) + ).start(); + } - if (sequence.length() > 1 && wordList.size() < minWords) { - wordList.addAll(loadWordsFuzzy(language, sequence, filter, minWords - wordList.size())); - } - sendWords(dataHandler, wordList); - }).start(); + private static void sendWords(ConsumerCompat> dataHandler, ArrayList wordList) { + asyncHandler.post(() -> dataHandler.accept(wordList)); } } diff --git a/src/io/github/sspanak/tt9/db/DictionaryLoader.java b/src/io/github/sspanak/tt9/db/DictionaryLoader.java index 5ea356504..0e6670c3b 100644 --- a/src/io/github/sspanak/tt9/db/DictionaryLoader.java +++ b/src/io/github/sspanak/tt9/db/DictionaryLoader.java @@ -16,7 +16,7 @@ import io.github.sspanak.tt9.db.exceptions.DictionaryImportAbortedException; import io.github.sspanak.tt9.db.exceptions.DictionaryImportAlreadyRunningException; import io.github.sspanak.tt9.db.exceptions.DictionaryImportException; -import io.github.sspanak.tt9.db.room.Word; +import io.github.sspanak.tt9.db.objectbox.Word; import io.github.sspanak.tt9.languages.InvalidLanguageCharactersException; import io.github.sspanak.tt9.languages.InvalidLanguageException; import io.github.sspanak.tt9.languages.Language; @@ -80,7 +80,7 @@ public void run() { currentFile = 0; importStartTime = System.currentTimeMillis(); - sendFileCount(languages.size()); + sendStartMessage(languages.size()); // SQLite does not support parallel queries, so let's import them one by one for (Language lang : languages) { @@ -155,8 +155,8 @@ private void importAll(Language language) { Logger.e( logTag, - "Failed loading dictionary: " + language.getDictionaryFile() + - " for language '" + language.getName() + "'. " + "Failed loading dictionary: " + language.getDictionaryFile() + + " for language '" + language.getName() + "'. " + e.getMessage() ); } @@ -164,7 +164,7 @@ private void importAll(Language language) { } - private void importLetters(Language language) { + private void importLetters(Language language) throws InvalidLanguageCharactersException { ArrayList letters = new ArrayList<>(); boolean isEnglish = language.getLocale().equals(Locale.ENGLISH); @@ -172,15 +172,7 @@ private void importLetters(Language language) { for (int key = 2; key <= 9; key++) { for (String langChar : language.getKeyCharacters(key, false)) { langChar = (isEnglish && langChar.equals("i")) ? langChar.toUpperCase(Locale.ENGLISH) : langChar; - - Word word = new Word(); - word.langId = language.getId(); - word.frequency = 0; - word.length = 1; - word.sequence = String.valueOf(key); - word.word = langChar; - - letters.add(word); + letters.add(Word.create(language, langChar, 0)); } } @@ -189,7 +181,7 @@ private void importLetters(Language language) { private void importWords(Language language, String dictionaryFile) throws Exception { - sendProgressMessage(language, 0, 0); + sendProgressMessage(language, 1, 0); long currentLine = 0; long totalLines = getFileSize(dictionaryFile); @@ -200,7 +192,7 @@ private void importWords(Language language, String dictionaryFile) throws Except for (String line; (line = br.readLine()) != null; currentLine++) { if (loadThread.isInterrupted()) { br.close(); - sendProgressMessage(language, -1, 0); + sendProgressMessage(language, 0, 0); throw new DictionaryImportAbortedException(); } @@ -209,7 +201,7 @@ private void importWords(Language language, String dictionaryFile) throws Except int frequency = getFrequency(parts); try { - dbWords.add(stringToWord(language, word, frequency)); + dbWords.add(Word.create(language, word, frequency)); } catch (InvalidLanguageCharactersException e) { br.close(); throw new DictionaryImportException(word, currentLine); @@ -222,6 +214,7 @@ private void importWords(Language language, String dictionaryFile) throws Except if (totalLines > 0) { int progress = (int) Math.floor(100.0 * currentLine / totalLines); + progress = Math.max(1, progress); sendProgressMessage(language, progress, settings.getDictionaryImportProgressUpdateInterval()); } } @@ -269,19 +262,7 @@ private int getFrequency(String[] lineParts) { } - private Word stringToWord(Language language, String word, int frequency) throws InvalidLanguageCharactersException { - Word dbWord = new Word(); - dbWord.langId = language.getId(); - dbWord.frequency = frequency; - dbWord.length = word.length(); - dbWord.sequence = language.getDigitSequenceForWord(word); - dbWord.word = word; - - return dbWord; - } - - - private void sendFileCount(int fileCount) { + private void sendStartMessage(int fileCount) { if (onStatusChange == null) { Logger.w(logTag, "Cannot send file count without a status Handler. Ignoring message."); return; @@ -289,6 +270,7 @@ private void sendFileCount(int fileCount) { Bundle progressMsg = new Bundle(); progressMsg.putInt("fileCount", fileCount); + progressMsg.putInt("progress", 1); asyncHandler.post(() -> onStatusChange.accept(progressMsg)); } diff --git a/src/io/github/sspanak/tt9/db/SQLWords.java b/src/io/github/sspanak/tt9/db/SQLWords.java new file mode 100644 index 000000000..28f5192cd --- /dev/null +++ b/src/io/github/sspanak/tt9/db/SQLWords.java @@ -0,0 +1,78 @@ +package io.github.sspanak.tt9.db; + +import android.app.Activity; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +import java.io.File; + +import io.github.sspanak.tt9.Logger; + +public class SQLWords { + private static final String DB_NAME = "t9dict.db"; + private static final String TABLE_NAME = "words"; + + private static boolean isCompleted = false; + + private final String LOG_TAG; + private final Activity activity; + private SQLiteDatabase db; + + public SQLWords(Activity activity) { + this.activity = activity; + + LOG_TAG = getClass().getSimpleName(); + } + + public void clear() { + if (isCompleted) { + return; + } + + new Thread(() -> { + openDb(); + if (areThereWords()) { + deleteAll(); + } + closeDb(); + isCompleted = true; + }).start(); + } + + + private void openDb() { + try { + db = null; + File dbFile = activity.getDatabasePath(DB_NAME); + if (dbFile.exists()) { + db = SQLiteDatabase.openDatabase(dbFile.getAbsolutePath(), null, SQLiteDatabase.OPEN_READWRITE); + } + } catch (Exception e) { + Logger.d(LOG_TAG, "Assuming no SQL database, because of error while opening. " + e.getMessage()); + db = null; + } + } + + + private void closeDb() { + if (db != null) { + db.close(); + } + } + + + private boolean areThereWords() { + String sql = "SELECT COUNT(*) FROM (SELECT id FROM " + TABLE_NAME + " LIMIT 1)"; + try (Cursor cursor = db.rawQuery(sql, null)) { + return cursor.moveToFirst() && cursor.getInt(0) > 0; + } catch (Exception e) { + Logger.d(LOG_TAG, "Assuming no words, because of query error. " + e.getMessage()); + return false; + } + } + + private void deleteAll() { + db.execSQL("DROP TABLE words"); + Logger.d(LOG_TAG, "SQL Words cleaned successfully."); + } +} diff --git a/src/io/github/sspanak/tt9/db/migrations/DB10.java b/src/io/github/sspanak/tt9/db/migrations/DB10.java deleted file mode 100644 index 4540c4742..000000000 --- a/src/io/github/sspanak/tt9/db/migrations/DB10.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.github.sspanak.tt9.db.migrations; - -import androidx.annotation.NonNull; -import androidx.room.migration.Migration; -import androidx.sqlite.db.SupportSQLiteDatabase; - -import io.github.sspanak.tt9.Logger; -import io.github.sspanak.tt9.db.room.TT9Room; - -public class DB10 { - public static final Migration MIGRATION = new Migration(9, 10) { - @Override - public void migrate(@NonNull SupportSQLiteDatabase database) { - try { - database.beginTransaction(); - database.execSQL(TT9Room.createShortWordsIndexQuery().getSql()); - database.execSQL(TT9Room.createLongWordsIndexQuery().getSql()); - database.setTransactionSuccessful(); - } catch (Exception e) { - Logger.e("Migrate to DB10", "Migration failed. " + e.getMessage()); - } finally { - database.endTransaction(); - } - } - }; -} diff --git a/src/io/github/sspanak/tt9/db/migrations/DB11.java b/src/io/github/sspanak/tt9/db/migrations/DB11.java deleted file mode 100644 index b6b0c9c37..000000000 --- a/src/io/github/sspanak/tt9/db/migrations/DB11.java +++ /dev/null @@ -1,95 +0,0 @@ -package io.github.sspanak.tt9.db.migrations; - -import android.content.Context; - -import androidx.annotation.NonNull; -import androidx.room.migration.Migration; -import androidx.sqlite.db.SupportSQLiteDatabase; - -import java.util.Locale; - -import io.github.sspanak.tt9.Logger; -import io.github.sspanak.tt9.languages.Language; -import io.github.sspanak.tt9.languages.LanguageCollection; - -public class DB11 { - private Context ctx; - - public Migration getMigration(Context context) { - ctx = context; - return MIGRATION; - } - - private final Migration MIGRATION = new Migration(10, 11) { - @Override - public void migrate(@NonNull SupportSQLiteDatabase database) { - final String deWords = "'aalen','abbitte','abdrücke','abgeordnete','abgeordneten','abreise','abschnitte','abstiege','abstrichen','abstürze','abteile','achteln','AFG','Aids','albert','ÄndG','anfrage','angaben','angehöriger','anklage','anklängen','anlagen','anreize','ansage','anstiege','antriebe','anzahlen','anzeige','APPLE','arge','auffahrt','auflagen','aufständen','auftrage','aufwinde','ausbeute','auslese','ausmaßen','ausnahmen','ausreise','auswüchsen','backend','Bafög','band','bänden','bändern','baumstark','BCD','bediensteten','begriffe','belange','berge','berichte','beschlagnahme','betriebe','bildhauer','bildhauern','bisse','blättern','bogen','boote','brause','brecht','brühe','brüste','BSHG','buche','bucht','bürste','büscheln','delegierter','dienern','dingen','drall','ducke','durchreise','durchsage','dusche','ecken','eiern','eindrücke','einfahrt','eingaben','eingriffe','einrede','erbrecht','erlasse','fächern','feinden','fernsehen','fidel','flaggen','flechte','flöte','flöten','fortschritte','frachten','fronten','fuhrwerken','funke','gebühren','genese','gesandter','gewittern','gifte','giften','gottlob','gurten','GWG','hacke','hallen','harke','haushalten','hechte','hefte','heimfahrt','herzögen','holst','hörnern','horste','horsten','IV','IWC','jagst','kabeln','kämme','kanzeln','keile','kellern','kiebitze','klappe','klaue','klemme','klinke','knechte','knöpfe','knospen','kommunen','krallen','kreide','kreische','krümme','kugelstoßen','KWV','lacken','lande','laufe','lauge','laugen','LEAR','lecker','legende','legenden','leinen','linden','Lkws','locke','logen','lotse','LPT','marin','märkten','messe','MHG','miete','miss','misse','mixe','morde','nachbeben','nachfolge','nachfrage','nachleben','NaCl','nadeln','netzen','niese','nieten','NJW','oberst','ohrfeige','panzern','parke','perle','pfähle','pfeife','pflanze','pike','posaunen','PRN','probst','prost','prostituierten','quartiere','rängen','reime','robben','RTM','säge','sankt','säume','schärfe','schauerte','schere','schiele','schiene','schlinge','schollen','schulen','schuppen','schwärme','schwelle','schwenke','seife','seile','senke','siebtel','siege','sitze','spende','spieße','spinne','stacheln','staffeln','stelzen','stiere','stieres','TASS','taue','taufe','töne','tricks','triebe','trolle','trompete','trompeten','tusche','übergriffe','überhänge','UdSSR','umfange','umlauten','umrisse','umtriebe','UNC','untiefen','VCO','verdammtes','vereine','verhöre','verlobter','vermerke','verschnitt','verstoß','VI','voraussage','vorfahren','vorfahrt','vorhaben','vorhersage','vorsorge','vorständen','WBG','wegstrecken','weide','weine','weiterreise','welker','wilderer','winde','winkeln','wippe','wische','WiStG','wohlwollen','wunderer','würfen','XMS','zelte','ziele','zigeunern','zirkeln','zuckern','zusage','zutaten'"; - final String enWords = "'I''d','I''m','d''annunzio','I''ll','I''ve','prud''hon','an''t','bo''s''n','bo''s''ns','bo''sun','bo''suns','bos''n','bos''ns','br''er','ca''canny','could''ve','d''arezzo','d''estaing','e''en','e''er','fo''c''s''le','fo''c''s''les','fo''c''sle','fo''c''sles','ha''penny','he''d','he''ll','how''d','how''re','howe''er','it''d','it''ll','might''ve','must''ve','n''importe','ne''er','nor''easter','nor''wester','o''er','rec''d','sec''y','she''d','she''ll','should''ve','sou''wester','ta''en','that''d','that''ll','they''d','they''ll','they''re','they''ve','we''d','we''ll','we''re','we''ve','whate''er','whatsoe''er','whene''er','where''er','who''d','who''ll','who''re','who''ve','why''d','would''ve','you''d','you''ll','you''re','you''ve','Ch''in','L''Amour','L''Enfant','L''Oreal','L''Ouverture','T''ang','Xi''an'"; - final String frWords = "'abaisse-langue','à-côté','à-côtés','à-coup','à-coups','adjudant-chef','adjudants-chefs','afro-asiatique','afro-asiatiques','afro-cubain','afro-cubaine','afro-cubaines','afro-cubains','agro-alimentaire','agro-alimentaires','ai-je','anarcho-syndicalisme','anarcho-syndicalismes','anarcho-syndicaliste','anarcho-syndicalistes','anglo-arabe','anglo-arabes','anglo-normand','anglo-normande','anglo-normandes','anglo-normands','anglo-saxon','anglo-saxonne','anglo-saxonnes','anglo-saxons','anti-américanisme','anti-américanismes','anti-impérialisme','anti-impérialismes','anti-impérialiste','anti-impérialistes','anti-inflammatoire','anti-inflammatoires','anti-inflationniste','anti-inflationnistes','anti-scientifique','anti-scientifiques','anti-sous-marin','anti-sous-marine','anti-sous-marines','anti-sous-marins','à-peu-près','à-pic','appui-bras','appuie-bras','appuie-main','appuie-tête','appui-main','appuis-bras','appuis-main','appuis-tête','appui-tête','après-demain','après-dîner','après-dîners','après-guerre','après-guerres','après-midi','après-rasage','après-rasages','après-ski','après-skis','après-vente','à-propos','arrière-ban','arrière-bans','arrière-bec','arrière-becs','arrière-bouche','arrière-bouches','arrière-boutique','arrière-boutiques','arrière-cerveau','arrière-cerveaux','arrière-choeur','arrière-choeurs','arrière-corps','arrière-cour','arrière-cours','arrière-cuisine','arrière-cuisines','arrière-faix','arrière-fond','arrière-fonds','arrière-garde','arrière-gardes','arrière-gorge','arrière-gorges','arrière-goût','arrière-goûts','arrière-grand-mère','arrière-grand-mères','arrière-grand-oncle','arrière-grand-père','arrière-grands-oncles','arrière-grands-parents','arrière-grands-pères','arrière-grand-tante','arrière-grand-tantes','arrière-main','arrière-mains','arrière-pays','arrière-pensée','arrière-pensées','arrière-petite-fille','arrière-petite-nièce','arrière-petites-filles','arrière-petites-nièces','arrière-petit-fils','arrière-petit-neveu','arrière-petits-enfants','arrière-petits-fils','arrière-petits-neveux','arrière-plan','arrière-plans','arrière-saison','arrière-saisons','arrière-train','arrière-trains','arrière-vassal','arrière-vassaux','as-tu','a-t-elle','a-t-il','a-t-on','au-dedans','au-dehors','au-delà','au-dessous','au-dessus','au-devant','auraient-elles','auraient-ils','aurai-je','aurais-je','aurais-tu','aurait-elle','aurait-il','aurait-on','auras-tu','aura-t-elle','aura-t-il','aura-t-on','aurez-vous','auriez-vous','aurions-nous','aurons-nous','auront-elles','auront-ils','auto-accusation','auto-accusations','auto-adhésif','auto-adhésifs','auto-adhésive','auto-adhésives','auto-allumage','auto-allumages','auto-amorçage','auto-amorçages','auto-calibration','auto-calibrations','auto-couchettes','auto-école','auto-écoles','auto-équilibrant','auto-équilibrante','auto-équilibrantes','auto-équilibrants','auto-imposition','auto-impositions','auto-intoxication','auto-intoxications','autos-couchettes','auto-stop','auto-stoppeur','auto-stoppeurs','auto-stoppeuse','auto-stoppeuses','avaient-elles','avaient-ils','avais-je','avais-tu','avait-elle','avait-il','avait-on','à-valoir','avant-bras','avant-centre','avant-corps','avant-coureur','avant-coureurs','avant-creuset','avant-creusets','avant-dernier','avant-dernière','avant-dernières','avant-derniers','avant-garde','avant-gardes','avant-gardisme','avant-gardismes','avant-gardiste','avant-gardistes','avant-goût','avant-goûts','avant-guerre','avant-guerres','avant-hier','avant-main','avant-mains','avant-midi','avant-port','avant-ports','avant-poste','avant-postes','avant-première','avant-premières','avant-projet','avant-projets','avant-propos','avant-scène','avant-scènes','avants-centres','avant-toit','avant-toits','avant-train','avant-trains','avant-veille','avant-veilles','avez-vous','aviez-vous','avions-nous','avons-nous','bas-bleu','bas-bleus','bas-côté','bas-côtés','bas-fond','bas-fonds','bas-jointé','bas-jointée','bas-jointées','bas-jointés','bas-mât','bas-mâts','bas-relief','bas-reliefs','bas-ventre','bas-ventres','beaux-arts','benoît','bien-aimé','bien-aimée','bien-aimées','bien-aimés','bien-dire','bien-être','bien-fondé','bien-fondés','bien-fonds','bien-jugé','bien-jugés','bien-pensant','bien-pensante','bien-pensantes','bien-pensants','bill','boston','brabant','brésil','camion-citerne','camions-citernes','canada','cardio-vasculaire','cardio-vasculaires','catalogne','celle-ci','celle-là','celles-ci','celles-là','celui-ci','celui-là','ceux-ci','ceux-là','charlotte','cherchons-nous','chez-moi','chez-soi','chez-toi','chine','choisit-il','ci-après','ci-avant','ci-contre','ci-dessous','ci-dessus','ci-devant','ci-gît','ci-haut','ci-inclus','ci-incluse','ci-incluses','ci-joint','ci-jointe','ci-jointes','ci-joints','communiquent-ils','condé','contre-alizé','contre-alizés','contre-allée','contre-allées','contre-amiral','contre-amiraux','contre-assurance','contre-assurances','contre-attaqua','contre-attaquai','contre-attaquaient','contre-attaquais','contre-attaquait','contre-attaquâmes','contre-attaquant','contre-attaquas','contre-attaquasse','contre-attaquassent','contre-attaquasses','contre-attaquassiez','contre-attaquassions','contre-attaquât','contre-attaquâtes','contre-attaque','contre-attaqué','contre-attaquée','contre-attaquées','contre-attaquent','contre-attaquer','contre-attaquera','contre-attaquerai','contre-attaqueraient','contre-attaquerais','contre-attaquerait','contre-attaqueras','contre-attaquèrent','contre-attaquerez','contre-attaqueriez','contre-attaquerions','contre-attaquerons','contre-attaqueront','contre-attaques','contre-attaqués','contre-attaquez','contre-attaquiez','contre-attaquions','contre-attaquons','contre-buta','contre-butai','contre-butaient','contre-butais','contre-butait','contre-butâmes','contre-butant','contre-butas','contre-butasse','contre-butassent','contre-butasses','contre-butassiez','contre-butassions','contre-butât','contre-butâtes','contre-bute','contre-buté','contre-butée','contre-butées','contre-butent','contre-buter','contre-butera','contre-buterai','contre-buteraient','contre-buterais','contre-buterait','contre-buteras','contre-butèrent','contre-buterez','contre-buteriez','contre-buterions','contre-buterons','contre-buteront','contre-butes','contre-butés','contre-butez','contre-butiez','contre-butions','contre-butons','contre-caution','contre-cautions','contre-chant','contre-chants','contre-courant','contre-courants','contre-dénonciation','contre-dénonciations','contre-digue','contre-digues','contre-écrou','contre-écrous','contre-électromotrice','contre-électromotrices','contre-empreinte','contre-empreintes','contre-enquête','contre-enquêtes','contre-épaulette','contre-épaulettes','contre-épreuve','contre-épreuves','contre-espionnage','contre-espionnages','contre-essai','contre-essais','contre-exemple','contre-exemples','contre-expertise','contre-expertises','contre-extension','contre-extensions','contre-fer','contre-fers','contre-feu','contre-feux','contre-fil','contre-filet','contre-filets','contre-fils','contre-fugue','contre-fugues','contre-haut','contre-hermine','contre-hermines','contre-indication','contre-indications','contre-indiqua','contre-indiquai','contre-indiquaient','contre-indiquais','contre-indiquait','contre-indiquâmes','contre-indiquant','contre-indiquas','contre-indiquasse','contre-indiquassent','contre-indiquasses','contre-indiquassiez','contre-indiquassions','contre-indiquât','contre-indiquâtes','contre-indique','contre-indiqué','contre-indiquée','contre-indiquées','contre-indiquent','contre-indiquer','contre-indiquera','contre-indiquerai','contre-indiqueraient','contre-indiquerais','contre-indiquerait','contre-indiqueras','contre-indiquèrent','contre-indiquerez','contre-indiqueriez','contre-indiquerions','contre-indiquerons','contre-indiqueront','contre-indiques','contre-indiqués','contre-indiquez','contre-indiquiez','contre-indiquions','contre-indiquons','contre-interrogatoire','contre-interrogatoires','contre-jour','contre-jours','contre-lettre','contre-lettres','contre-manifesta','contre-manifestai','contre-manifestaient','contre-manifestais','contre-manifestait','contre-manifestâmes','contre-manifestant','contre-manifestante','contre-manifestantes','contre-manifestants','contre-manifestas','contre-manifestasse','contre-manifestassent','contre-manifestasses','contre-manifestassiez','contre-manifestassions','contre-manifestât','contre-manifestâtes','contre-manifestation','contre-manifestations','contre-manifeste','contre-manifesté','contre-manifestent','contre-manifester','contre-manifestera','contre-manifesterai','contre-manifesteraient','contre-manifesterais','contre-manifesterait','contre-manifesteras','contre-manifestèrent','contre-manifesterez','contre-manifesteriez','contre-manifesterions','contre-manifesterons','contre-manifesteront','contre-manifestes','contre-manifestez','contre-manifestiez','contre-manifestions','contre-manifestons','contre-mesure','contre-mesures','contre-mina','contre-minai','contre-minaient','contre-minais','contre-minait','contre-minâmes','contre-minant','contre-minas','contre-minasse','contre-minassent','contre-minasses','contre-minassiez','contre-minassions','contre-minât','contre-minâtes','contre-mine','contre-miné','contre-minée','contre-minées','contre-minent','contre-miner','contre-minera','contre-minerai','contre-mineraient','contre-minerais','contre-minerait','contre-mineras','contre-minèrent','contre-minerez','contre-mineriez','contre-minerions','contre-minerons','contre-mineront','contre-mines','contre-minés','contre-minez','contre-miniez','contre-minions','contre-minons','contre-mura','contre-murai','contre-muraient','contre-murais','contre-murait','contre-murâmes','contre-murant','contre-muras','contre-murasse','contre-murassent','contre-murasses','contre-murassiez','contre-murassions','contre-murât','contre-murâtes','contre-muré','contre-murée','contre-murées','contre-murer','contre-murera','contre-murerai','contre-mureraient','contre-murerais','contre-murerait','contre-mureras','contre-murèrent','contre-murerez','contre-mureriez','contre-murerions','contre-murerons','contre-mureront','contre-murés','contre-murez','contre-muriez','contre-murions','contre-murons','contre-offensive','contre-offensives','contre-ordre','contre-ordres','contre-passa','contre-passai','contre-passaient','contre-passais','contre-passait','contre-passâmes','contre-passant','contre-passas','contre-passasse','contre-passassent','contre-passasses','contre-passassiez','contre-passassions','contre-passât','contre-passâtes','contre-passation','contre-passations','contre-passe','contre-passé','contre-passée','contre-passées','contre-passent','contre-passer','contre-passera','contre-passerai','contre-passeraient','contre-passerais','contre-passerait','contre-passeras','contre-passèrent','contre-passerez','contre-passeriez','contre-passerions','contre-passerons','contre-passeront','contre-passes','contre-passés','contre-passez','contre-passiez','contre-passions','contre-passons','contre-pente','contre-pentes','contre-performance','contre-performances','contre-pied','contre-pieds','contre-placage','contre-placages','contre-plaqua','contre-plaquai','contre-plaquaient','contre-plaquais','contre-plaquait','contre-plaquâmes','contre-plaquant','contre-plaquas','contre-plaquasse','contre-plaquassent','contre-plaquasses','contre-plaquassiez','contre-plaquassions','contre-plaquât','contre-plaquâtes','contre-plaque','contre-plaqué','contre-plaquée','contre-plaquées','contre-plaquent','contre-plaquer','contre-plaquera','contre-plaquerai','contre-plaqueraient','contre-plaquerais','contre-plaquerait','contre-plaqueras','contre-plaquèrent','contre-plaquerez','contre-plaqueriez','contre-plaquerions','contre-plaquerons','contre-plaqueront','contre-plaques','contre-plaqués','contre-plaquez','contre-plaquiez','contre-plaquions','contre-plaquons','contre-plongée','contre-plongées','contre-pointe','contre-pointes','contre-porte','contre-portes','contre-préparation','contre-préparations','contre-prestation','contre-prestations','contre-projet','contre-projets','contre-propagande','contre-propagandes','contre-proposition','contre-propositions','contre-publicité','contre-publicités','contre-rail','contre-rails','contre-réforme','contre-réformes','contre-révolution','contre-révolutionnaire','contre-révolutionnaires','contre-révolutions','contre-scella','contre-scellai','contre-scellaient','contre-scellais','contre-scellait','contre-scellâmes','contre-scellant','contre-scellas','contre-scellasse','contre-scellassent','contre-scellasses','contre-scellassiez','contre-scellassions','contre-scellât','contre-scellâtes','contre-scelle','contre-scellé','contre-scellée','contre-scellées','contre-scellent','contre-sceller','contre-scellera','contre-scellerai','contre-scelleraient','contre-scellerais','contre-scellerait','contre-scelleras','contre-scellèrent','contre-scellerez','contre-scelleriez','contre-scellerions','contre-scellerons','contre-scelleront','contre-scelles','contre-scellés','contre-scellez','contre-scelliez','contre-scellions','contre-scellons','contre-sujet','contre-sujets','contre-taille','contre-tailles','contre-terrorisme','contre-terrorismes','contre-terroriste','contre-terroristes','contre-timbre','contre-timbres','contre-tira','contre-tirai','contre-tiraient','contre-tirais','contre-tirait','contre-tirâmes','contre-tirant','contre-tiras','contre-tirasse','contre-tirassent','contre-tirasses','contre-tirassiez','contre-tirassions','contre-tirât','contre-tirâtes','contre-tire','contre-tiré','contre-tirée','contre-tirées','contre-tirent','contre-tirer','contre-tirera','contre-tirerai','contre-tireraient','contre-tirerais','contre-tirerait','contre-tireras','contre-tirèrent','contre-tirerez','contre-tireriez','contre-tirerions','contre-tirerons','contre-tireront','contre-tires','contre-tirés','contre-tirez','contre-tiriez','contre-tirions','contre-tirons','contre-torpilleur','contre-torpilleurs','contre-ut','contre-vair','contre-vairs','contre-valeur','contre-valeurs','contre-vérité','contre-vérités','contre-visite','contre-visites','contre-voie','contre-voies','cuba','dallas','demi-bas','demi-botte','demi-bottes','demi-bouteille','demi-bouteilles','demi-brigade','demi-brigades','demi-cercle','demi-cercles','demi-circulaire','demi-circulaires','demi-clef','demi-clefs','demi-colonne','demi-colonnes','demi-deuil','demi-deuils','demi-dieu','demi-dieux','demi-douzaine','demi-douzaines','demi-droite','demi-droites','demi-fin','demi-finale','demi-finales','demi-finaliste','demi-finalistes','demi-fine','demi-fines','demi-fins','demi-fond','demi-frère','demi-frères','demi-gros','demi-heure','demi-heures','demi-jour','demi-journée','demi-journées','demi-jours','demi-litre','demi-litres','demi-longueur','demi-longueurs','demi-lune','demi-lunes','demi-mal','demi-maux','demi-mesure','demi-mesures','demi-mondaine','demi-mondaines','demi-monde','demi-mondes','demi-mort','demi-morte','demi-mortes','demi-morts','demi-mot','demi-pause','demi-pauses','demi-pension','demi-pensionnaire','demi-pensionnaires','demi-pensions','demi-place','demi-places','demi-plan','demi-plans','demi-portion','demi-portions','demi-produit','demi-produits','demi-quart','demi-quarts','demi-queue','demi-queues','demi-reliure','demi-reliures','demi-ronde','demi-rondes','demi-saison','demi-saisons','demi-sang','demi-sel','demi-soeur','demi-soeurs','demi-solde','demi-soldes','demi-sommeil','demi-sommeils','demi-soupir','demi-soupirs','demi-tarif','demi-tarifs','demi-teinte','demi-teintes','demi-tige','demi-tiges','demi-ton','demi-tons','demi-tour','demi-tours','demi-volée','demi-volées','écosse','elle-même','elles-mêmes','entre-bande','entre-bandes','entre-déchirâmes','entre-déchirassiez','entre-déchirassions','entre-déchirâtes','entre-déchiré','entre-déchirée','entre-déchirées','entre-déchirer','entre-déchirerez','entre-déchireriez','entre-déchirerions','entre-déchirerons','entre-déchirés','entre-déchirez','entre-déchiriez','entre-déchirions','entre-déchirons','entre-détruire','entre-détruirez','entre-détruiriez','entre-détruirions','entre-détruirons','entre-détruisez','entre-détruisiez','entre-détruisîmes','entre-détruisions','entre-détruisissiez','entre-détruisissions','entre-détruisîtes','entre-détruisons','entre-détruit','entre-détruite','entre-détruites','entre-détruits','entre-deux','entre-deux-guerres','entre-dévorâmes','entre-dévorassiez','entre-dévorassions','entre-dévorâtes','entre-dévoré','entre-dévorée','entre-dévorées','entre-dévorer','entre-dévorerez','entre-dévoreriez','entre-dévorerions','entre-dévorerons','entre-dévorés','entre-dévorez','entre-dévoriez','entre-dévorions','entre-dévorons','entre-égorgé','entre-égorgée','entre-égorgées','entre-égorgés','entre-eux','entre-frappâmes','entre-frappassiez','entre-frappassions','entre-frappâtes','entre-frappé','entre-frappée','entre-frappées','entre-frapper','entre-frapperez','entre-frapperiez','entre-frapperions','entre-frapperons','entre-frappés','entre-frappez','entre-frappiez','entre-frappions','entre-frappons','entre-haï','entre-haïe','entre-haïes','entre-haïmes','entre-haïrez','entre-haïriez','entre-haïrions','entre-haïrons','entre-haïs','entre-haïssaient','entre-haïssez','entre-haïssiez','entre-haïssions','entre-haïssons','entre-haïtes','entre-heurtâmes','entre-heurtassiez','entre-heurtassions','entre-heurtâtes','entre-heurté','entre-heurtée','entre-heurtées','entre-heurter','entre-heurterez','entre-heurteriez','entre-heurterions','entre-heurterons','entre-heurtés','entre-heurtez','entre-heurtiez','entre-heurtions','entre-heurtons','entre-jambe','entre-jambes','entre-ligne','entre-lignes','entre-louâmes','entre-louassiez','entre-louassions','entre-louâtes','entre-loué','entre-louée','entre-louées','entre-louer','entre-louerez','entre-loueriez','entre-louerions','entre-louerons','entre-loués','entre-louez','entre-louiez','entre-louions','entre-louons','entre-mangé','entre-mangeâmes','entre-mangeassiez','entre-mangeassions','entre-mangeâtes','entre-mangée','entre-mangées','entre-mangeons','entre-manger','entre-mangerez','entre-mangeriez','entre-mangerions','entre-mangerons','entre-mangés','entre-mangez','entre-mangiez','entre-mangions','entre-nerf','entre-nerfs','entre-noeud','entre-noeuds','entre-nous','entre-nui','entre-nuire','entre-nuirez','entre-nuiriez','entre-nuirions','entre-nuirons','entre-nuisez','entre-nuisiez','entre-nuisîmes','entre-nuisions','entre-nuisissiez','entre-nuisissions','entre-nuisîtes','entre-nuisons','entre-rail','entre-rails','entre-regardâmes','entre-regardassiez','entre-regardassions','entre-regardâtes','entre-regardé','entre-regardée','entre-regardées','entre-regarder','entre-regarderez','entre-regarderiez','entre-regarderions','entre-regarderons','entre-regardés','entre-regardez','entre-regardiez','entre-regardions','entre-regardons','entre-temps','entre-tuâmes','entre-tuassiez','entre-tuassions','entre-tuâtes','entre-tué','entre-tuée','entre-tuées','entre-tuer','entre-tuerez','entre-tueriez','entre-tuerions','entre-tuerons','entre-tués','entre-tuez','entre-tuiez','entre-tuions','entre-tuons','entre-vous','est-elle','est-il','est-on','es-tu','étaient-ce','étaient-elles','étaient-ils','étais-je','étais-tu','était-ce','était-elle','était-il','était-on','êtes-vous','étiez-vous','étions-nous','eûmes-nous','eurent-elles','eurent-ils','euro-obligation','euro-obligations','eus-je','eusse-je','eussent-elles','eussent-ils','eusse-tu','eussiez-vous','eussions-nous','eus-tu','eut-elle','eût-elle','eûtes-vous','eut-il','eût-il','eut-on','eût-on','eux-mêmes','extra-fin','extra-fine','extra-fines','extra-fins','extra-fort','extra-forts','extra-légal','extra-légale','extra-légales','extra-légaux','extra-lucide','extra-lucides','extra-muros','extra-parlementaire','extra-parlementaires','extra-sensible','extra-sensibles','extra-sensoriel','extra-sensorielle','extra-sensorielles','extra-sensoriels','extra-terrestre','extra-terrestres','fiat','figaro','florence','formula','Francais-GUTenberg','fûmes-nous','furent-ce','furent-elles','furent-ils','fus-je','fussent-ce','fussent-elles','fussent-ils','fus-tu','fut-ce','fût-ce','fut-elle','fût-elle','fûtes-vous','fut-il','fût-il','fut-on','fût-on','gaule','germain','gilles','gironde','guillaume','GUTenberg','henry','hollande','inde','jan','japon','jean','je-ne-sais-quoi','jésus','joseph','jules','jusque-là','limoges','louis','lui-même','luis','macédoine','macro-économique','macro-économiques','malte','mans','marc','médico-légal','médico-légale','médico-légales','médico-légaux','médico-pédagogique','médico-pédagogiques','médico-professionnel','médico-professionnelle','médico-professionnelles','médico-professionnels','médico-social','médico-sociale','médico-sociales','médico-sociaux','mi-août','mi-avril','mi-bas','mi-carême','mi-carêmes','mi-chemin','mi-clos','mi-close','mi-closes','mi-côte','micro-informatique','micro-informatiques','micro-ordinateur','micro-ordinateurs','micro-organisme','micro-organismes','mi-décembre','mi-février','mi-fin','mi-fins','mi-jambe','mi-janvier','mi-juillet','mi-juin','milan','mi-mai','mi-mars','mini-chaîne','mini-chaînes','mini-jupe','mini-jupes','mini-ordinateur','mini-ordinateurs','mi-novembre','mi-octobre','mi-parti','mi-partie','mi-parties','mi-partis','mi-septembre','mi-temps','mi-voix','moi-même','mont-blanc','napoléon','néo-celtique','néo-celtiques','néo-classicisme','néo-classicismes','néo-colonialisme','néo-colonialismes','néo-criticisme','néo-criticismes','néo-darwinisme','néo-darwinismes','néo-gothique','néo-gothiques','néo-grec','néo-grecque','néo-grecques','néo-grecs','néo-hébridais','néo-hébridaise','néo-hébridaises','néo-kantisme','néo-kantismes','néo-platonicien','néo-platonicienne','néo-platoniciennes','néo-platoniciens','néo-platonisme','néo-platonismes','néo-positivisme','néo-positivismes','néo-positiviste','néo-positivistes','néo-réalisme','néo-réalismes','néo-réaliste','néo-réalistes','néo-thomisme','néo-thomismes','néo-zélandais','néo-zélandaise','néo-zélandaises','non-acceptation','non-acceptations','non-agression','non-agressions','non-aligné','non-alignée','non-alignées','non-alignement','non-alignements','non-alignés','non-assistance','non-assistances','non-belligérance','non-belligérances','non-belligérant','non-belligérante','non-belligérantes','non-belligérants','non-combattant','non-combattante','non-combattantes','non-combattants','non-comparant','non-comparante','non-comparantes','non-comparants','non-comparution','non-comparutions','non-conciliation','non-conciliations','non-conformisme','non-conformismes','non-conformiste','non-conformistes','non-conformité','non-conformités','non-contradiction','non-contradictions','non-croyant','non-croyante','non-croyantes','non-croyants','non-directif','non-directifs','non-directive','non-directives','non-directivité','non-directivités','non-engagé','non-engagée','non-engagées','non-engagement','non-engagements','non-engagés','non-être','non-euclidien','non-euclidienne','non-euclidiennes','non-euclidiens','non-exécution','non-exécutions','non-existence','non-existences','non-figuratif','non-figuratifs','non-figurative','non-figuratives','non-fumeur','non-fumeurs','non-fumeuse','non-fumeuses','non-ingérence','non-ingérences','non-initié','non-initiée','non-initiées','non-initiés','non-inscrit','non-inscrite','non-inscrites','non-inscrits','non-intervention','non-interventions','non-lieu','non-lieux','non-moi','non-paiement','non-paiements','non-participation','non-participations','non-prolifération','non-proliférations','non-rapatriement','non-rapatriements','non-recevoir','non-remboursable','non-remboursables','non-remboursement','non-remboursements','non-résident','non-résidente','non-résidentes','non-résidents','non-respect','non-respects','non-responsabilité','non-responsabilités','non-retour','non-révisable','non-révisables','non-satisfaction','non-satisfactions','non-sens','non-spécialiste','non-spécialistes','non-stop','non-tissé','non-tissés','non-usage','non-usages','non-valeur','non-valeurs','non-viable','non-viables','non-violence','non-violences','non-violent','non-violente','non-violentes','non-violents','nord-africain','nord-africaine','nord-africaines','nord-africains','nord-américain','nord-américaine','nord-américaines','nord-américains','nord-coréen','nord-coréenne','nord-coréennes','nord-coréens','nord-est','nord-ouest','nord-vietnamien','nord-vietnamienne','nord-vietnamiennes','nord-vietnamiens','nous-mêmes','ont-elles','ont-ils','par-ci','paris','par-là','parme','passe-boules','passe-crassane','passe-droit','passe-droits','passe-lacet','passe-lacets','passe-montagne','passe-montagnes','passe-partout','passe-passe','passe-pied','passe-pieds','passe-plat','passe-plats','passe-rose','passe-roses','passe-temps','passe-thé','passe-velours','passe-volant','passe-volants','pékin','pèse-acide','pèse-acides','pèse-alcool','pèse-bébé','pèse-bébés','pèse-esprit','pèse-esprits','pèse-lait','pèse-lettre','pèse-lettres','pèse-liqueur','pèse-liqueurs','pèse-moût','pèse-moûts','pèse-personne','pèse-personnes','pèse-sel','pèse-sels','pèse-sirop','pèse-sirops','peut-elle','peut-il','ph','pierre','porte-affiches','porte-aiguille','porte-aiguilles','porte-allumettes','porte-amarre','porte-avions','porte-bagages','porte-baïonnette','porte-baïonnettes','porte-balais','porte-bannière','porte-bannières','porte-bébé','porte-bébés','porte-billets','porte-bonheur','porte-bouquet','porte-bouquets','porte-bouteilles','porte-cartes','porte-chapeaux','porte-cigares','porte-cigarettes','porte-clefs','porte-clés','porte-copie','porte-copies','porte-couteau','porte-couteaux','porte-crayon','porte-crayons','porte-croix','porte-crosse','porte-crosses','porte-documents','porte-drapeau','porte-drapeaux','porte-enseigne','porte-épée','porte-épées','porte-étendard','porte-étendards','porte-étriers','porte-étrivière','porte-étrivières','porte-faix','porte-fanion','porte-fanions','porte-fenêtre','porte-fort','porte-glaive','porte-greffe','porte-greffes','porte-hauban','porte-haubans','porte-jarretelles','porte-jupe','porte-jupes','porte-lame','porte-lames','porte-malheur','porte-menu','porte-menus','porte-mine','porte-mines','porte-monnaie','porte-montre','porte-montres','porte-mors','porte-musique','porte-objet','porte-objets','porte-outil','porte-outils','porte-parapluies','porte-parole','porte-plume','porte-queue','porte-savon','porte-savons','porte-serviettes','porte-vent','porte-voix','pour-soi','psycho-analeptique','psycho-analeptiques','psycho-éducatif','psycho-éducatifs','psycho-éducation','psycho-éducative','psycho-éducatives','quasi-délit','quasi-délits','queue-de-cheval','queue-de-cochon','queue-de-morue','queue-de-pie','queue-de-rat','queue-de-renard','queues-de-cheval','queues-de-cochon','queues-de-morue','queues-de-pie','queues-de-rat','queues-de-renard','rendez-vous','rené','richard','richelieu','robert','rousseau','saint-bernard','saint-crépin','saint-cyrien','saint-cyrienne','saint-cyriennes','saint-cyriens','saint-frusquin','saint-glinglin','saint-honoré','saint-nectaire','Saint-Office','saint-paulin','saint-père','saint-pierre','Saint-Siège','saint-simonien','saint-simonienne','saint-simoniennes','saint-simoniens','saint-simonisme','sans-abri','sans-coeur','sans-culotte','sans-culottes','sans-emploi','sans-façon','sans-fil','sans-filiste','sans-filistes','sans-fils','sans-gêne','sans-grade','sans-le-sou','sans-logis','sans-parti','sans-souci','sauveur','saxe','self','self-control','self-government','self-governments','self-inductance','self-inductances','self-induction','self-inductions','self-made-man','self-made-men','self-service','self-services','semi-aride','semi-arides','semi-automatique','semi-automatiques','semi-auxiliaire','semi-auxiliaires','semi-chenillé','semi-chenillée','semi-chenillées','semi-chenillés','semi-circulaire','semi-circulaires','semi-coke','semi-cokes','semi-conducteur','semi-conducteurs','semi-conductrice','semi-conductrices','semi-consonne','semi-consonnes','semi-fini','semi-finis','semi-lunaire','semi-lunaires','semi-manufacturé','semi-manufacturée','semi-manufacturées','semi-manufacturés','semi-nomade','semi-nomades','semi-nomadisme','semi-nomadismes','semi-ouvré','semi-ouvrée','semi-ouvrées','semi-ouvrés','semi-perméable','semi-perméables','semi-produit','semi-produits','semi-public','semi-publics','semi-publique','semi-publiques','semi-remorque','semi-remorques','semi-rigide','semi-rigides','semi-voyelle','semi-voyelles','sera-ce','seraient-ce','seraient-elles','seraient-ils','serai-je','serais-je','serais-tu','serait-ce','serait-elle','serait-il','serait-on','seras-tu','sera-t-elle','sera-t-il','sera-t-on','serez-vous','serge','seriez-vous','serions-nous','serons-nous','seront-ce','seront-elles','seront-ils','socio-culturel','socio-culturelle','socio-culturelles','socio-culturels','socio-économique','socio-économiques','socio-éducatif','socio-éducatifs','socio-éducative','socio-éducatives','socio-professionnel','socio-professionnelle','socio-professionnelles','socio-professionnels','soi-même','sommes-nous','sont-ce','sont-elles','sont-ils','soudan','sous-activité','sous-activités','sous-admissible','sous-admissibles','sous-aide','sous-aides','sous-alimenta','sous-alimentai','sous-alimentaient','sous-alimentais','sous-alimentait','sous-alimentâmes','sous-alimentant','sous-alimentas','sous-alimentasse','sous-alimentassent','sous-alimentasses','sous-alimentassiez','sous-alimentassions','sous-alimentât','sous-alimentâtes','sous-alimentation','sous-alimentations','sous-alimente','sous-alimenté','sous-alimentée','sous-alimentées','sous-alimentent','sous-alimenter','sous-alimentera','sous-alimenterai','sous-alimenteraient','sous-alimenterais','sous-alimenterait','sous-alimenteras','sous-alimentèrent','sous-alimenterez','sous-alimenteriez','sous-alimenterions','sous-alimenterons','sous-alimenteront','sous-alimentes','sous-alimentés','sous-alimentez','sous-alimentiez','sous-alimentions','sous-alimentons','sous-amendement','sous-amendements','sous-arbrisseau','sous-arbrisseaux','sous-bailleur','sous-bailleurs','sous-barbe','sous-barbes','sous-bas','sous-bibliothécaire','sous-bibliothécaires','sous-bois','sous-brigadier','sous-brigadiers','sous-calibré','sous-calibrée','sous-calibrées','sous-calibrés','sous-chef','sous-chefs','sous-classe','sous-classes','sous-clavier','sous-clavière','sous-clavières','sous-claviers','sous-commission','sous-commissions','sous-compte','sous-comptes','sous-comptoir','sous-comptoirs','sous-consommation','sous-consommations','sous-couche','sous-couches','sous-cutané','sous-cutanée','sous-cutanées','sous-cutanés','sous-développé','sous-développée','sous-développées','sous-développement','sous-développements','sous-développés','sous-diaconat','sous-diaconats','sous-diacre','sous-diacres','sous-directeur','sous-directeurs','sous-directrice','sous-directrices','sous-dominante','sous-dominantes','sous-économe','sous-économes','sous-embranchement','sous-embranchements','sous-emploi','sous-emplois','sous-ensemble','sous-ensembles','sous-entend','sous-entendaient','sous-entendais','sous-entendait','sous-entendant','sous-entende','sous-entendent','sous-entendes','sous-entendez','sous-entendiez','sous-entendîmes','sous-entendions','sous-entendirent','sous-entendis','sous-entendisse','sous-entendissent','sous-entendisses','sous-entendissiez','sous-entendissions','sous-entendit','sous-entendît','sous-entendîtes','sous-entendons','sous-entendra','sous-entendrai','sous-entendraient','sous-entendrais','sous-entendrait','sous-entendras','sous-entendre','sous-entendrez','sous-entendriez','sous-entendrions','sous-entendrons','sous-entendront','sous-entends','sous-entendu','sous-entendue','sous-entendues','sous-entendus','sous-épidermique','sous-épidermiques','sous-équipée','sous-équipées','sous-équipement','sous-équipements','sous-estima','sous-estimai','sous-estimaient','sous-estimais','sous-estimait','sous-estimâmes','sous-estimant','sous-estimas','sous-estimasse','sous-estimassent','sous-estimasses','sous-estimassiez','sous-estimassions','sous-estimât','sous-estimâtes','sous-estimation','sous-estimations','sous-estime','sous-estimé','sous-estimée','sous-estimées','sous-estiment','sous-estimer','sous-estimera','sous-estimerai','sous-estimeraient','sous-estimerais','sous-estimerait','sous-estimeras','sous-estimèrent','sous-estimerez','sous-estimeriez','sous-estimerions','sous-estimerons','sous-estimeront','sous-estimes','sous-estimés','sous-estimez','sous-estimiez','sous-estimions','sous-estimons','sous-évalua','sous-évaluai','sous-évaluaient','sous-évaluais','sous-évaluait','sous-évaluâmes','sous-évaluant','sous-évaluas','sous-évaluasse','sous-évaluassent','sous-évaluasses','sous-évaluassiez','sous-évaluassions','sous-évaluât','sous-évaluâtes','sous-évaluation','sous-évaluations','sous-évalue','sous-évalué','sous-évaluée','sous-évaluées','sous-évaluent','sous-évaluer','sous-évaluera','sous-évaluerai','sous-évalueraient','sous-évaluerais','sous-évaluerait','sous-évalueras','sous-évaluèrent','sous-évaluerez','sous-évalueriez','sous-évaluerions','sous-évaluerons','sous-évalueront','sous-évalues','sous-évalués','sous-évaluez','sous-évaluiez','sous-évaluions','sous-évaluons','sous-exploita','sous-exploitai','sous-exploitaient','sous-exploitais','sous-exploitait','sous-exploitâmes','sous-exploitant','sous-exploitas','sous-exploitasse','sous-exploitassent','sous-exploitasses','sous-exploitassiez','sous-exploitassions','sous-exploitât','sous-exploitâtes','sous-exploitation','sous-exploitations','sous-exploite','sous-exploité','sous-exploitée','sous-exploitées','sous-exploitent','sous-exploiter','sous-exploitera','sous-exploiterai','sous-exploiteraient','sous-exploiterais','sous-exploiterait','sous-exploiteras','sous-exploitèrent','sous-exploiterez','sous-exploiteriez','sous-exploiterions','sous-exploiterons','sous-exploiteront','sous-exploites','sous-exploités','sous-exploitez','sous-exploitiez','sous-exploitions','sous-exploitons','sous-exposa','sous-exposai','sous-exposaient','sous-exposais','sous-exposait','sous-exposâmes','sous-exposant','sous-exposas','sous-exposasse','sous-exposassent','sous-exposasses','sous-exposassiez','sous-exposassions','sous-exposât','sous-exposâtes','sous-expose','sous-exposé','sous-exposée','sous-exposées','sous-exposent','sous-exposer','sous-exposera','sous-exposerai','sous-exposeraient','sous-exposerais','sous-exposerait','sous-exposeras','sous-exposèrent','sous-exposerez','sous-exposeriez','sous-exposerions','sous-exposerons','sous-exposeront','sous-exposes','sous-exposés','sous-exposez','sous-exposiez','sous-exposions','sous-exposition','sous-expositions','sous-exposons','sous-expression','sous-expressions','sous-fifre','sous-fifres','sous-filiale','sous-filiales','sous-frutescent','sous-frutescente','sous-frutescentes','sous-frutescents','sous-garde','sous-gardes','sous-genre','sous-genres','sous-gouverneur','sous-gouverneurs','sous-homme','sous-hommes','sous-imposition','sous-impositions','sous-ingénieur','sous-ingénieurs','sous-intendant','sous-intendants','sous-jacent','sous-jacente','sous-jacentes','sous-jacents','sous-lieutenant','sous-lieutenants','sous-locataire','sous-locataires','sous-location','sous-locations','sous-loua','sous-louai','sous-louaient','sous-louais','sous-louait','sous-louâmes','sous-louant','sous-louas','sous-louasse','sous-louassent','sous-louasses','sous-louassiez','sous-louassions','sous-louât','sous-louâtes','sous-loue','sous-loué','sous-louée','sous-louées','sous-louent','sous-louer','sous-louera','sous-louerai','sous-loueraient','sous-louerais','sous-louerait','sous-loueras','sous-louèrent','sous-louerez','sous-loueriez','sous-louerions','sous-louerons','sous-loueront','sous-loues','sous-loués','sous-louez','sous-louiez','sous-louions','sous-louons','sous-main','sous-maître','sous-maîtres','sous-maîtresse','sous-maîtresses','sous-marin','sous-marinier','sous-mariniers','sous-marins','sous-multiple','sous-multiples','sous-nappe','sous-nappes','sous-normale','sous-normales','sous-occipital','sous-occipitale','sous-occipitales','sous-occipitaux','sous-oeuvre','sous-oeuvres','sous-off','sous-officier','sous-officiers','sous-offs','sous-orbitaire','sous-orbitaires','sous-ordre','sous-ordres','sous-paie','sous-paient','sous-paiera','sous-paierai','sous-paieraient','sous-paierais','sous-paierait','sous-paieras','sous-paierez','sous-paieriez','sous-paierions','sous-paierons','sous-paieront','sous-paies','sous-palan','sous-paya','sous-payai','sous-payaient','sous-payais','sous-payait','sous-payâmes','sous-payant','sous-payas','sous-payasse','sous-payassent','sous-payasses','sous-payassiez','sous-payassions','sous-payât','sous-payâtes','sous-paye','sous-payé','sous-payée','sous-payées','sous-payent','sous-payer','sous-payera','sous-payerai','sous-payeraient','sous-payerais','sous-payerait','sous-payeras','sous-payèrent','sous-payerez','sous-payeriez','sous-payerions','sous-payerons','sous-payeront','sous-payes','sous-payés','sous-payez','sous-payiez','sous-payions','sous-payons','sous-peuplé','sous-peuplée','sous-peuplées','sous-peuplement','sous-peuplements','sous-peuplés','sous-pied','sous-pieds','sous-préfecture','sous-préfectures','sous-préfet','sous-préfète','sous-préfètes','sous-préfets','sous-production','sous-productions','sous-produit','sous-produits','sous-programme','sous-programmes','sous-prolétaire','sous-prolétaires','sous-prolétariat','sous-prolétariats','sous-pubien','sous-pubienne','sous-pubiennes','sous-pubiens','sous-pull','sous-pulls','sous-répertoire','sous-répertoires','sous-réseau','sous-réseaux','sous-routine','sous-routines','sous-scapulaire','sous-scapulaires','sous-secrétaire','sous-secrétaires','sous-secrétariat','sous-secrétariats','sous-section','sous-sections','sous-seing','sous-sol','sous-sols','sous-station','sous-stations','sous-système','sous-systèmes','sous-tangente','sous-tangentes','sous-tasse','sous-tasses','sous-tend','sous-tendaient','sous-tendais','sous-tendait','sous-tendant','sous-tende','sous-tendent','sous-tendes','sous-tendez','sous-tendiez','sous-tendîmes','sous-tendions','sous-tendirent','sous-tendis','sous-tendisse','sous-tendissent','sous-tendisses','sous-tendissiez','sous-tendissions','sous-tendit','sous-tendît','sous-tendîtes','sous-tendons','sous-tendra','sous-tendrai','sous-tendraient','sous-tendrais','sous-tendrait','sous-tendras','sous-tendre','sous-tendrez','sous-tendriez','sous-tendrions','sous-tendrons','sous-tendront','sous-tends','sous-tendu','sous-tendue','sous-tendues','sous-tendus','sous-tension','sous-tensions','sous-titra','sous-titrage','sous-titrages','sous-titrai','sous-titraient','sous-titrais','sous-titrait','sous-titrâmes','sous-titrant','sous-titras','sous-titrasse','sous-titrassent','sous-titrasses','sous-titrassiez','sous-titrassions','sous-titrât','sous-titrâtes','sous-titre','sous-titré','sous-titrée','sous-titrées','sous-titrent','sous-titrer','sous-titrera','sous-titrerai','sous-titreraient','sous-titrerais','sous-titrerait','sous-titreras','sous-titrèrent','sous-titrerez','sous-titreriez','sous-titrerions','sous-titrerons','sous-titreront','sous-titres','sous-titrés','sous-titrez','sous-titriez','sous-titrions','sous-titrons','sous-traita','sous-traitai','sous-traitaient','sous-traitais','sous-traitait','sous-traitâmes','sous-traitance','sous-traitances','sous-traitant','sous-traitante','sous-traitantes','sous-traitants','sous-traitas','sous-traitasse','sous-traitassent','sous-traitasses','sous-traitassiez','sous-traitassions','sous-traitât','sous-traitâtes','sous-traite','sous-traité','sous-traitée','sous-traitées','sous-traitent','sous-traiter','sous-traitera','sous-traiterai','sous-traiteraient','sous-traiterais','sous-traiterait','sous-traiteras','sous-traitèrent','sous-traiterez','sous-traiteriez','sous-traiterions','sous-traiterons','sous-traiteront','sous-traites','sous-traités','sous-traitez','sous-traitiez','sous-traitions','sous-traitons','sous-utilisa','sous-utilisai','sous-utilisaient','sous-utilisais','sous-utilisait','sous-utilisâmes','sous-utilisant','sous-utilisas','sous-utilisasse','sous-utilisassent','sous-utilisasses','sous-utilisassiez','sous-utilisassions','sous-utilisât','sous-utilisâtes','sous-utilise','sous-utilisé','sous-utilisée','sous-utilisées','sous-utilisent','sous-utiliser','sous-utilisera','sous-utiliserai','sous-utiliseraient','sous-utiliserais','sous-utiliserait','sous-utiliseras','sous-utilisèrent','sous-utiliserez','sous-utiliseriez','sous-utiliserions','sous-utiliserons','sous-utiliseront','sous-utilises','sous-utilisés','sous-utilisez','sous-utilisiez','sous-utilisions','sous-utilisons','sous-ventrière','sous-ventrières','sous-verge','sous-verre','sous-vêtement','sous-vêtements','sous-vira','sous-virai','sous-viraient','sous-virais','sous-virait','sous-virâmes','sous-virant','sous-viras','sous-virasse','sous-virassent','sous-virasses','sous-virassiez','sous-virassions','sous-virât','sous-virâtes','sous-vire','sous-viré','sous-virent','sous-virer','sous-virera','sous-virerai','sous-vireraient','sous-virerais','sous-virerait','sous-vireras','sous-virèrent','sous-virerez','sous-vireriez','sous-virerions','sous-virerons','sous-vireront','sous-vires','sous-virez','sous-viriez','sous-virions','sous-virons','sud-africain','sud-africaine','sud-africaines','sud-africains','sud-américain','sud-américaine','sud-américaines','sud-américains','sud-coréen','sud-coréenne','sud-coréennes','sud-coréens','sud-est','sud-ouest','sud-vietnamien','sud-vietnamienne','sud-vietnamiennes','sud-vietnamiens','suède','suis-je','super-grand','super-grands','sus-dénommé','sus-dénommée','sus-dénommées','sus-dénommés','sus-dominante','sus-dominantes','sus-hépatique','sus-hépatiques','talkies-walkies','talkie-walkie','télé-enseignement','télé-enseignements','terre-neuve','toi-même','toute-bonne','toute-épice','toute-puissance','toute-puissante','toutes-bonnes','toutes-épices','toutes-puissantes','tout-fait','tout-fou','tout-fous','tout-petit','tout-petits','tout-puissant','tout-puissants','tout-venant','turbo-alternateur','turbo-alternateurs','turbo-train','turbo-trains','ultra-chic','ultra-court','ultra-courte','ultra-courtes','ultra-courts','ultra-petita','ultra-pression','ultra-pressions','ultra-royaliste','ultra-royalistes','ultra-sensible','ultra-sensibles','ultra-son','ultra-sonique','ultra-soniques','ultra-sons','ultra-violet','ultra-violets','ultra-violette','ultra-violettes','us','usa','vénus','vice-amiral','vice-amiraux','vice-chancelier','vice-chanceliers','vice-consul','vice-consulat','vice-consulats','vice-consuls','vice-légat','vice-légation','vice-légations','vice-légats','vice-présidence','vice-présidences','vice-président','vice-présidente','vice-présidentes','vice-présidents','vice-recteur','vice-recteurs','vice-reine','vice-reines','vice-roi','vice-rois','vice-royauté','vice-royautés','vichy','victoria','vide-bouteille','vide-bouteilles','vide-cave','vide-ordures','vide-poches','vide-pomme','vide-pommes','virginie','voltaire','vous-même','vous-mêmes'"; - final String itWords1 = "'aa','abbaglierà','abbaglierò','abbagliò','abbaierà','abbaierò','abbaiò','abbandonerò','abbassandola','abbassandole','abbassarli','abbasserà','abbasserò','abbassò','abbatté','abbatterà','abbatterò','abbattettero','abbellendola','abbellì','abbellirà','abbellirò','abbenché','abbevererà','abbevererò','abbeverò','abbi','abbian','abbiglierà','abbiglierò','abbigliò','abbinerà','abbinerò','abbinò','abboccherà','abboccherò','abboccò','abbonderà','abbonderò','abbondò','abbonerà','abbonerò','abbonò','abbozzerà','abbozzerò','abbozzò','abbracciò','abbrevierà','abbrevierò','abbreviò','abbronzerà','abbronzerò','abbronzò','abbruciacchiarle','abbruciò','abbrunerà','abbrunerò','abbrunò','abdicherà','abdicherò','abdicò','abietinico','abilissimi','abiliterà','abiliterò','abilitò','abitandovi','abitò','abituatosi','abituerà','abituerò','abiurerà','abiurerò','abiurò','abolì','abolirà','abolirò','abortì','abrogherà','abrogherò','abrogò','abuserà','abuserò','abusò','ac','accademia','accalorerà','accalorerò','accalorò','accamperà','accamperò','accampò','accanì','accanirà','accanirò','accarezzarla','accarezzarlo','accascerà','accascerò','accasciò','accaserà','accaserò','accasò','accattarlo','accecherà','accecherò','accecò','accedé','accederà','accederò','accelererà','accelererò','accelerò','accennandomi','accennarla','accennarle','accennarlo','accennerà','accennò','accentrerà','accentrerò','accentrò','accentuerò','accentuò','accerterà','accerterò','accertò','accetterò','acchiapparlo','acciglierà','acciglierò','accigliò','acciò','acclamerà','acclamerò','acclamò','accoderà','accoderò','accodò','accoltellerà','accoltellerò','accoltellò','accommiatandolo','accommiatò','accomodarlo','accomoderà','accomoderò','accomodò','accompagnerà','acconsentirò','accoppierà','accoppierò','accoppiò','accorarlo','accorcerà','accorcerò','accorciò','accordarlo','accordataci','accorderà','accorderò','accordò','accorgerà','accorgerò','accorgertene','accorrerà','accostatosi','accosterà','accosterò','accostò','accozzarli','accrescerà','accrescerle','accrescerlo','accumulerà','accumulerò','accumulò','accusar','accuserà','accuserò','acquietarle','acquietarlo','acquieterà','acquieterò','acquietò','acquistarle','acquistarli','acquisterà','acquisterò','acri','adagerà','adagerò','adagiò','adatterà','adatterò','adattò','addebiterà','addebiterò','addebitò','addenserà','addenserò','addensò','addentandolo','addenterà','addenterò','addentò','addentrerà','addentrerò','addentrò','addestrandoli','addestrerà','addestrerò','addestrò','addì','additerà','additerò','additò','addizionerà','addizionerò','addizionò','addobberà','addobberò','addobbò','addolcirà','addolorerà','addolorerò','addolorò','addormenterà','addormenterò','addormentò','addosserà','addosserò','addossò','adeguarlo','adeguarvisi','adeguerà','adeguerò','adeguò','adirerà','adirerò','adirò','adocchierà','adocchierò','adocchiò','adombrerà','adombrerò','adombrò','adonterà','adonterò','adontò','adopererò','adorandoti','adorerà','adorerò','adornerà','adornerò','adornò','adorò','adottarli','adotterà','adotterò','adulerà','adulerò','adulò','adultererò','adulterò','adunerà','adunerò','adunò','ae','aereonautici','af','afa','affaccerà','affaccerò','affacciatosi','affacciò','affamerà','affamerò','affamò','affannerà','affannerò','affannò','affaticherà','affaticherò','affaticò','affermerà','affermerò','afferrandogli','afferrerà','afferrerò','afferrò','affetterà','affetterò','affettò','affiaterà','affiaterò','affiatò','affibbierà','affibbierò','affibbiò','affiderà','affiderò','affilerà','affilerò','affilierà','affilierò','affiliò','affilò','affitterà','affitterò','affittò','affogherà','affogherò','affogò','affonderò','affrancherà','affrancherò','affrancò','affrettarne','affretterà','affretterò','affronterà','affronterò','affumicherà','affumicherò','affumicò','Afrodite','ag','agevolò','aggancerà','aggancerò','agganciò','agghiaccerà','agghiaccerebbero','agghiaccerò','agghiacciò','aggiogherà','aggiogherò','aggiogò','aggiornerà','aggiornerò','aggiornò','aggirarlo','aggirerà','aggirerò','aggirò','aggiudicherà','aggiudicherò','aggiungergli','aggiungici','aggiustandogli','aggiusterà','aggiusterò','aggiustò','aggrapperà','aggrapperò','aggrappò','aggravarli','aggravarlo','aggraverò','aggravò','aggrazierà','aggrazierò','aggraziò','aggrupperà','aggrupperò','aggruppò','aghi','agii','agio','agirò','agiterà','agiterò','agitò','agli','Agnese','agonizzerà','agonizzerò','agonizzò','agostino','agra','Agrigento','agro','aguzzerà','aguzzerò','aguzzò','aiutatori','aiuterò','alba','albe','albeggerà','albeggerò','albeggiò','alce','Aldo','alfa','alga','alienerà','alienerò','alienò','alimenterà','alimentò','all','alla','allaccerà','allaccerò','allacciò','allagherà','allagherò','allagò','allargherà','allargherò','allargò','allarmerà','allarmerò','allatterà','allatterò','allattò','alle','alleerà','alleerò','alleggerì','allegherà','allegherò','allegò','allenerà','allenerò','allenterà','allenterò','allentò','allestì','allettarla','alletterà','alletterò','allettò','alleverà','alleverò','allevierà','allevierò','alleviò','allevò','allo','allocherà','allocherò','allocò','alloggerà','alloggerò','alloggiò','allontanarne','allungherà','allungherò','allungò','alpi','alte','altererà','altererò','alternerà','alternerò','alternò','alterò','alti','altrordine','altruomo','altruscio','alza','alzandogli','alzargli','alzerà','alzerò','alzi','alzo','alzò','am','amai','amalgamerà','amalgamerò','amalgamò','amarissime','ambe','ambi','ambo','Ambrogio','amerà','amerò','Amilcare','ammaccherà','ammaccherò','ammaccò','ammalerà','ammalerò','ammalierà','ammalierò','ammaliò','ammassandole','ammasserà','ammasserò','ammassò','ammazzerà','ammazzerò','ammazzò','amministrarla','amministrarlo','ammirerà','ammirerò','ammirò','ammonì','ammonterà','ammonterò','ammontò','ammutinerà','ammutinerò','ammutinò','ammutolì','ampi','amplierà','amplierò','amputerà','amputerò','amputò','analizzerà','analizzerò','analizzò','Anastasia','anca','anchegli','anchella','anchessa','anchesse','anchessi','anchesso','anchio','Ancona','ancoroggi','andò','angoscerà','angoscerò','angosciò','animerà','animerò','Anna','annacquerà','annacquerò','annacquò','annebbierà','annebbierò','annebbiò','annegherà','annegherò','annegò','anniderà','anniderò','annidò','annientandone','annientarne','annienterà','annienterò','annientò','annoderà','annoderò','annodò','annoierà','annoierò','annoiò','annoterà','annoterò','annotò','annoverargli','annovererà','annoverò','annuì','annullerà','annullerò','annullò','annunziargli','annunzierà','annunzierò','annunziò','annurziargli','annuserà','annuserò','annusò','ansa','Anselmo','ante','anticiperà','anticiperò','anticipò','Antonino','anzi','ao','apollo','appagarlo','appaierà','appaiò','appannerà','appannò','apparecchiarli','apparendogli','apparì','appellerà','appellò','appesterà','appestò','appianerà','appianò','appiopparlo','applaudì','applicargli','applicherò','applicò','appo','appoggerà','appoggerò','apporterà','apportò','appostarlo','apposterà','appostò','apprezzarne','apprezzerà','apprezzò','approderà','approfondì','approfondirà','approfondirò','appronterà','appronterò','approntò','approssimò','appuntellò','appunterà','appuntò','appurerà','appurò','apra','apre','apri','aprì','aprirgli','aprirne','apro','aq','arai','arca','archivierà','archiviò','arde','ardì','ardo','aree','arenerà','arenò','arerà','arerò','argentina','arginerà','arginò','argomentò','arie','armerà','armerò','armo','armò','Arno','arò','arpa','arpe','arrabbierà','arrabbierò','arrabbiò','arrangerà','arrangiò','arrederà','arredò','arrestabilità','arrestarlo','arresterà','arrestò','arretrarmi','arretrerà','arretrò','arriccerà','arricchì','arricciò','arringherà','arringherò','arringò','arrischiò','arrivandogli','arrivatoci','arrogherà','arrogò','arrossì','arrossò','arroterà','arrotò','arrotolerà','arrotolò','arsa','arse','arsi','arso','arti','articolò','arto','as','asce','asciugherà','asciugherò','asciugò','ascoltò','aspettan','aspetterà','aspettò','aspirerà','aspirò','aspo','assaggerà','assaggerò','assaggiò','assaltò','assaporandosi','assedierà','assediò','assegnerà','assemblea','asserì','assesterà','assestò','assi','assicurerà','assidererà','assidererò','assiderò','assillerà','assillò','assimilerà','assimilerò','assimilò','assisté','assisterà','asso','assocerà','associò','assoderà','assoderò','assodò','assorbì','assorderà','assordò','assottigliò','asta','astuccetti','atri','atrocissimi','atta','attaccherà','attaccherò','atte','atteggerà','atteggiò','attenderà','attenterà','attentissimi','attentò','atterrerà','atterrò','attesoché','attestarlo','attesterà','attestò','atti','attirerà','attivarla','attivarlo','attiverà','attivò','attrezzerà','attrezzò','attribuirlo','augurerà','augurò','aula','aule','aumenterò','Autieri','autostato','av','avallerà','avallò','avendogli','aver','avrà','avrò','avutone','avvalertene','avvelenerà','avvelenò','avventerà','avventò','avvererà','avverò','avviabili','avvicinandola','avvicinandoseli','avvicinatosi','avvicinerà','avvilì','avviserà','avvisò','avviterà','avvitò','az','azzarderà','azzarderò','azzardò','azzeccherà','azzeccherò','azzufferà','azzufferò','azzuffò','bab','bac','bacchiarle','bacerà','bacerò','baci','baciò','baco','bada','baderà','baderò','badi','bado','badò','baf','bagnerà','bagnerò','bagnò','bah','baia','baie','bal','balbetterà','balbetterò','balbettò','balenerà','balenò','ballerò','ballò','balzerà','balzò','ban','bandì','bap','baq','bara','baratterà','baratterò','barattò','barcollerà','barcollerò','barcollò','bare','barerà','barerò','bari','baro','barò','bas','basa','base','baserà','baserò','basi','baso','basò','bastandoci','bastandogli','bastandomi','basterò','bastò','bastonerà','bastonerò','bastonò','bat','battendogli','batterà','battergli','batterò','battezzerà','battezzò','bav','bava','bave','baviera','baz','be','beb','bec','bed','bef','beg','bell','bem','benderà','benderò','bendò','bene','benedettuomo','benedirà','beneficarli','beni','bep','beq','bere','bernardino','bernardo','bes','bet','bev','beva','beve','bevi','bevo','bez','bianchissime','biasimerà','biasimerò','biasimò','bib','bibanda','bibliotece','bic','bid','biechissime','biechissimi','bif','big','bigi','bih','bil','bile','bili','bim','bin','BIOS','biq','bir','bisbigliò','bisognai','bisognammo','bisognassi','bisognassimo','bisognaste','bisognasti','bisognata','bisognate','bisognati','bisognavamo','bisognavate','bisognavi','bisognavo','bisognerai','bisognerei','bisogneremmo','bisogneremo','bisognereste','bisogneresti','bisognerete','bisognerò','bisogniamo','bisognò','biv','biz','bla','ble','bli','blo','bloccherò','bloccò','boc','boccerà','boccerò','bocciò','bod','bof','bog','boh','boia','bol','bollì','bom','bombarderà','bonificherà','bonificherò','bonificò','bop','boq','bor','borbotterà','borbotterò','borbottò','bos','bosonici','bov','boz','bramante','bramarla','bramerà','bramerò','bramò','brancolerà','brancolerò','brancolò','bravuomo','bre','brevetterà','brevetterò','brevettò','bri','brillerà','brillerò','brillò','brinderà','brinderò','brindò','brio','brontolerà','brontolerò','brontolò','bru','brucerà','brucerò','bruciò','bub','buc','buca','buco','bud','buf','bug','buh','buio','bul','bun','buoi','buon','bup','buq','bur','burlerà','burlerò','burlò','busserà','busserò','bussò','but','butterò','buttò','buv','buz','cac','caccerà','caccerò','cacciarne','cad','cada','cade','caderne','cadi','cadimenti','cado','caf','cag','cagionarla','cagionò','cah','cal','cala','calarlo','calcolandola','calcolerà','calcolò','caldei','cale','calerà','calerò','cali','calmerà','calmò','calo','calò','calpestarlo','calpesterà','calpesterò','calpestò','calunnierà','calunnierò','calunniò','calzerà','calzò','cam','cambiargli','cambiarli','cambiarlo','camerunense','camminerà','camminerò','camminò','campeggiarlo','camperà','camperò','campò','camufferà','camufferò','camuffò','can','cancellalo','cancellarla','candiderà','candiderò','candido','candidò','cane','cangiar','cangiò','cani','canterà','canticchiandola','canzonarlo','caos','capaciterà','capi','capì','capirli','capiterà','capitolerà','capitolerò','capitolò','capo','capovolgerne','Caprona','caq','car','cara','carcerarlo','care','carezzerà','carezzerò','carezzò','cari','caricandolo','caricò','caro','cas','casa','cascargli','cascarle','cascherà','cascò','case','casi','caso','Cataldo','catturerà','Cauchy','causerà','cav','cava','cavarli','cavarne','cavatogli','cave','caverà','cavi','cavo','cavò','caz','ceb','cec','ceco','ced','ceda','cede','cedé','cederà','cederò','cedi','cedo','cef','ceg','ceh','cel','cela','celebrerà','celerà','celerò','celi','celo','celò','cem','cen','cena','cene','cenerà','cenerò','ceni','ceno','cenò','censurerà','censurerò','censurò','centaltre','centaltri','centanni','cep','ceq','cer','cera','cercandone','cercandosi','cercargli','cercarli','cercarlo','cercarti','cercarvi','cercherò','cere','ceri','cero','certaltre','certaltri','ces','cesserà','cesserò','cet','ceti','ceto','cev','cez','chiacchierassero','chiacchierassimo','chiacchiererà','chiacchiereranno','chiacchiererebbe','chiacchiererebbero','chiacchiereremmo','chiacchierereste','chiacchiereresti','chiacchiererò','chiacchierò','chiamandola','chiamandoli','chiamandolo','chiamarli','chiarì','chiarirla','chiarirle','chiaritosi','chiedendole','chinandola','chinerà','chinerò','chinò','chiuderne','chiuderò','ciao','ciarlerà','ciarlò','ciascunaltra','cib','ciba','cibi','cibo','cic','cid','cif','cig','cigolerà','cigolerò','cigolò','cih','cil','cim','cima','cime','cimenterà','cimenterò','cimentò','Cina','cinquantanni','cioè','cip','ciq','cir','circolerà','circolerò','circolò','circonderà','circondò','cis','Cisanello','cita','citandosi','citarle','citarli','citarlo','citerà','citerò','citi','cito','citò','civetterà','civetterò','civettò','ciz','cla','classificarlo','cle','cli','clo','clu','Cluny','coabiterà','coabiterò','coabitò','cob','coc','cod','coda','code','codificarla','codificarle','cof','cog','coglierà','coh','cola','colà','colarla','colarlo','colerà','colerò','coli','coll','collasserà','collauderà','collaudò','collegandola','collegarla','collegherà','collegherò','collegò','collocandolo','collocarla','collocherà','collocherò','collocò','colmerò','colmò','colo','colò','colorandola','coltiverà','coltiverò','coltivò','comandargli','comandarle','comandarne','comandarti','comanderà','comanderò','combatterà','combatterlo','combatterò','combinerà','combinerò','combinò','come','cominciandomi','cominciarla','commemorerò','commentarle','commentarli','commenterò','commentò','commiserarla','commuterà','commutò','Como','comparì','compatirlo','compatterà','compatterò','compattò','compensarla','comperarne','compererà','compererò','comperò','competé','competerà','competerò','compiacerle','compiangerle','compiangerli','compilarlo','compilò','complementa','complementai','complementammo','complementando','complementano','complementante','complementarono','complementasse','complementassero','complementassi','complementassimo','complementaste','complementasti','complementata','complementate','complementati','complementato','complementava','complementavamo','complementavano','complementavate','complementavi','complementavo','complementerà','complementerai','complementeranno','complementerebbe','complementerebbero','complementerei','complementeremmo','complementeremo','complementereste','complementeresti','complementerete','complementerò','complementiamo','complementiate','complementino','complementò','completerà','completerò','complicherà','complicherebbero','complicherò','complicò','componendone','comportarle','comporterò','comprandolo','comprargli','comprarli','comprarlo','comprarne','comprenderà','comprerà','comprerò','comproverà','comproverò','comprovò','computerà','computerò','computò','comunicarla','comunicarle','comunicherà','comunicherebbero','comunicherò','comunicò','concatenerà','concatenerebbero','concatenerò','concatenò','concedasi','conceder','concederà','concedergli','concederò','conceduta','concentrarla','concepì','concerà','concerné','concernerà','concertò','concilierà','conciliò','conciò','concluderò','concorderà','concordò','concreterà','condannarlo','condannarmi','condannerà','condannerò','condenserà','condenserò','condensò','condì','condirà','condirò','condonerà','condonerò','condonò','conducendoli','condurli','conferirà','conferirò','confermarla','confermarle','confermerò','confessarla','confessarlo','confesserà','confesserò','confessò','conficcherà','conficcherebbero','conficcherò','conficcò','confidatogli','confiderà','confiderò','confidò','configuralo','configurandolo','configurarlo','confinerà','confinerò','confinò','confischerà','confischerebbero','confischerò','confiscò','confluì','confluirà','confluirò','confondergli','confonderli','confonderò','confortarla','confortarli','confortarlo','conforterà','conforterò','confortò','confronterà','confronterebbero','confronterò','confrontò','congedandolo','congederà','congedò','congelerà','congelerò','congelò','congetturarlo','congetturò','congiurerà','congiurerò','congiurò','congloberà','congloberò','conglobò','coni','conierà','conierò','coniò','coniugherà','coniugherò','coniugò','conlcudere','cono','conoscendosi','conoscendovi','conoscergli','conoscerli','conoscerò','conquistarla','conquisterà','conquisterebbero','conquisterò','consacrerà','consacrerò','consacrò','consegnarla','consegnarle','consegnarlo','consegnerà','consegnerò','consentente','consentirne','conservarla','conservarle','conservarlo','conserverà','conserverò','considerarvi','considererebbero','considererò','consigliarla','consigliarle','consigliarlo','consiglierà','consigliò','consolarla','consolarli','consolarlo','consolerà','consolerò','consolò','constaterà','constaterò','constatò','consterà','consulterà','consultò','consumarlo','consumerò','consumò','contagerà','contagerò','contagiò','contandosi','contarlo','contarmi','contarvi','contemplarla','contemplarlo','contenderà','contentarli','contentarlo','contenterà','contentissimo','contentò','conterò','contestarlo','contesterà','contesterò','contestò','contestualizzati','contornerà','contornò','contraddì','contraddirgli','contrastarlo','controesempi','controllarla','controllarle','controllerà','controllerebbero','controllerò','controllò','converserà','converserò','conversò','convertirà','convertirlo','convocherà','convocherò','coopererà','coopererò','cooperò','coordinerò','coordinò','cop','copi','copiandolo','copiandosi','copiarglielo','copiarli','copiarlo','copierà','copierò','copiò','coq','cor','corazzerà','corazzerò','corazzò','cori','coricò','coro','coronerà','coronerò','coronò','corredandole','corredarle','correggendole','correggerli','correndole','correrà','corrermi','correrò','corrisponderà','corrispondessero','corroborarla','corroborò','corromperà','corromperò','cosa','cose','cosi','così','coso','cospirerà','cospirerò','cospirò','costargli','costeggiarla','costernò','costerò','costringerà','costringerle','costringerlo','costruirò','cot','Courmayeur','cov','cova','coverà','coverò','covi','covo','covò','coz','cozzerà','cozzerò','cozzò','cra','cre','crea','creandone','crearla','credé','credendola','credendolo','credendosi','crederà','crederci','crederle','crederli','crederlo','credermi','crederne','crederò','crederti','credutosi','creerò','crei','cremerà','cremerò','cremò','creo','creò','creperà','creperò','crepiterà','crepiterò','crepitò','crepò','cri','criptarlo','criptazione','criticarlo','crivellerà','crivellerò','crivellò','cro','crollerà','crollerò','cru','crudelissime','crudelissimi','cub','cubi','cubo','cuc','cucinerà','cucinerò','cucinò','cud','cuf','cug','cuh','cul','cullerà','cullerò','cullò','culminerà','culminerò','culo','cum','cun','cuor','cup','cupa','cupe','cupi','cupo','cuq','cur','cura','curandolo','cure','curerà','curerò','curi','curioserà','curioserò','curiosò','curo','curò','curverà','curverò','curvò','cus','custodì','custodirà','custodirò','cute','cuv','cuz','dab','dac','dad','dadi','dado','daf','dag','dah','dall','dama','dame','danneggerà','danneggerò','danneggiò','dannerà','dannerò','dannò','danzerà','danzerò','danzò','dap','daq','darà','dare','dargliele','darò','das','dat','data','date','daterà','daterò','dati','dato','datò','datoci','datogli','dav','dava','davo','daz','dazi','deb','Debian','dec','decapiterà','decapiterò','decapitò','decentrerà','decentrerò','decentrò','deciderlo','deciderò','decifralo','decifrarli','decifrerà','decifrerò','decifrò','declinerà','declinò','decollerà','decollò','decolorerà','decolorerò','decolorò','decongestionarsi','decreterà','decriptarlo','ded','dedicherà','dedicherò','deditissimi','definirà','definirle','definirli','definirò','defletterà','defletterò','deformerà','deformerò','deformò','defrauderà','defrauderò','defraudò','deg','degenererà','degenererò','degenerò','degnerà','degnerò','degnissimo','degnò','degradandoli','degraderà','degraderò','degradò','deh','delegherà','delegherò','delegò','delibererà','delibererò','deliberò','delimiterà','delimiterò','delimitò','delirerà','delirerò','delirò','delizierà','delizierò','deliziò','dell','deluderò','dem','demeriterà','demeriterò','demeritò','demolì','demolirà','demolirò','den','denigrerà','denigrerò','denigrò','denominandole','denominerà','denominerò','denominò','denuderà','denuderò','denudò','denuncerà','denuncerò','dep','deperì','deperirà','deperirò','deplorerà','deplorerò','deplorò','depositerà','depositerò','depositò','deprecherà','deprecherò','deprecò','deprezzerà','deprezzerò','deprezzò','deprimermi','depurerà','depurerò','depurò','deq','der','deraglierà','deraglierò','deragliò','deriverà','deriverò','deruberà','deruberò','derubò','des','desiderabilissime','desiderarlo','desidererà','desidererò','desiderò','designerà','designerò','designò','desinerà','desinerò','desinò','desolarli','desolò','desterà','desterò','destinerà','destinerò','destinò','destò','det','determinerà','determinerebbero','determinerò','detestarla','detestarle','detesterà','detesterò','detestò','detterà','detterò','dettò','deturperà','deturpò','dev','devasterà','devasterò','devastò','deve','devi','devo','dez','dialogherà','dialogherò','dialogò','dib','dic','dica','dice','dicendolo','dicendone','dichiarerò','dici','dico','did','dif','difenderà','difetterà','difetterò','difettò','diffamerà','diffamerò','diffamò','diffiderà','diffiderò','diffidò','diffonderle','dig','diga','digiterà','digiterò','digitò','digiunerà','digiunerò','digiunò','digraderà','digraderò','digradò','digrignerà','digrignerò','digrignò','dih','dil','dilanierà','dilanierò','dilaniò','dilapiderà','dilapiderò','dilapidò','dilaterà','dilaterò','dilatò','dilazionerà','dilazionerebbero','dilazionerò','dilazionò','dileggerà','dileggerò','dileggiò','dileguerà','dileguerò','dileguò','diletterà','diletterò','dilettò','diligentissimi','diluì','diluirà','diluirò','dim','dimagrì','dimenerà','dimenerò','dimenò','dimenticarla','dimenticarli','dimenticò','dimezzerà','dimezzerò','dimezzò','diminuì','diminuirà','diminuirò','dimorò','dimostramenti','dimostrargli','dimostrerà','dip','dipanerà','dipanerò','dipanò','dipartì','dipingendola','diq','dirà','Dirac','diradarle','diraderà','diraderò','diradò','diramerà','diramerò','diramò','dire','dirizzante','dirizzarono','dirizzassero','dirizzassimo','dirizzavamo','dirizzavano','dirizzavate','dirizzerà','dirizzeranno','dirizzerebbe','dirizzerebbero','dirizzeremmo','dirizzeremo','dirizzereste','dirizzeresti','dirizzerete','dirizzerò','dirizzò','dirmele','dirò','dirozzerà','dirozzerò','dirozzò','dis','disabiliterà','disabiliterebbero','disabiliterò','disabilitò','disarmerò','disarmò','disassemblarlo','discacciarle','discacciarlo','discolperà','discolperò','discolpò','discorrerà','discorrerò','discosterà','discosterò','discostò','disdegnerà','disdegnò','disegnarla','disegnerà','disegnerò','diserederà','diserederò','diseredò','diserterà','diserterò','disertò','disfarne','disgregherà','disgregherebbero','disgregherò','disgregò','disgusterà','disgustò','disingannarla','disingannarli','disingannò','disinstallassi','dislocherà','dislocherò','dislocò','disonorerà','disonorerò','disonorò','dispenserà','dispenserò','dispensò','disperatosi','dispererà','dispererò','disperò','dispiacerà','disponendosi','disporle','disporli','disputerò','dissesterà','dissesterò','dissestò','disseterà','disseterò','dissetò','dissiperà','dissipò','dissoderà','dissoderò','dissodò','distaccherà','distaccherebbero','distaccherò','distaccò','disterà','disterò','distillerà','distillerò','distillò','distinguerli','distinguerne','distò','distogliendoli','distraendola','distribuirà','distribuirle','distrigarsi','distrigato','distruggendoli','distruggerle','disturbarla','disturbarlo','disturberà','disturberò','disturbò','dit','dita','dite','dito','div','divagherà','divagherò','divagò','divamperà','divamperò','divampò','dive','divenendogli','divenirgli','divenirlo','diventerò','divergerà','dividerlo','dividerò','divinerà','divinerò','divinò','divoratosi','divorerà','divorerò','divorò','divorzierà','divorzierò','divorziò','divulgarla','divulgherà','divulgherò','divulgò','diz','dla','dle','dli','dlo','dlu','dò','dob','doc','documentini','dod','dof','doga','doh','dol','dolo','dom','doma','domandandogli','domandandole','domandandolo','domandargli','domandarne','domanderà','domanderò','domandò','domarlo','domerà','domerò','domi','dominarle','dominerà','domo','domò','dona','donandogli','dondolerà','dondolerò','dondolò','donerà','donerò','doni','Donizetti','dono','donò','dop','dopo','doppierà','doppiò','doq','dor','dormì','dormirà','dormirò','dos','dosa','dose','doserà','dosi','doso','dosò','dota','dotandomi','dotandone','dote','doterà','doterò','doti','doto','dotò','dov','dove','dovendosi','dovergli','doverla','doverne','doverti','doz','dra','dre','dri','drizzerà','drizzerò','drizzò','dro','dru','du','dub','dubitanza','dubiterà','dubiterò','dubitò','duc','duca','duce','duci','dud','duf','dug','duh','dul','dun','duna','dune','dup','duq','dur','dura','durarla','dure','durerò','duri','duro','durò','dus','dut','duv','duz','ea','eb','ebbe','ebbi','ec','eccedé','eccederà','ecciterà','eccitò','ecco','eccole','eccoli','echi','eclisserà','eclissò','edificherà','edificherò','edificò','edifizi','editarla','educherà','educò','ee','ef','effettuerà','eg','egli','eguaglierà','eguagliò','ehm','Einstein','elaborerà','elaborerò','elemosinerà','elemosinerebbero','elemosinerò','elemosinò','elencandole','elencandone','elencherà','elencò','eleverà','eliminarla','eliminarvi','eliminerà','eliminerò','eliminò','ella','elle','elmo','elogerà','elogerò','elogiò','eluderà','em','Emacs','emanerà','emenderà','emenderò','emendò','emergerà','emetterà','emigrerà','emigrerò','Emiliano','empi','emTeX','emulerà','emulò','en','Enea','enti','entrandovi','entratovi','entrerò','entusiasmerà','entusiasmerebbero','entusiasmerò','entusiasmò','enumererà','enumererò','enumerò','Enzo','eo','ep','Epicuro','epurerà','epurerò','epurò','eq','equa','eque','equi','equo','er','Erasmo','erba','erbe','erediterà','erge','ergo','Ermete','Erminio','erogarli','eroi','erra','errerà','errerò','erri','erro','errò','erta','erte','erto','esacerbò','esagererà','esagerò','esalterà','esalterò','esaltò','esaminandole','esaminarla','esaminarle','esaminarne','esaspererà','esasperò','esaurente','esca','esce','esci','esclamerà','esclamerò','esco','esecrerà','esecrerò','esecrò','eseguirà','eseguirò','esenterà','esentò','esercitarne','eserciterà','esibirgli','esilierà','esilierò','esiliò','esisterà','esiterò','esitò','esonerandone','esonererà','esonererò','esonerò','esorbiterà','esorbitò','esortandosi','esorterà','esortò','espanderle','Esperia','espi','espierà','espierò','espiò','esplicherà','esplicherò','esplicitandole','espliciterà','espliciterebbero','espliciterò','esplicitò','esplicò','esplorerà','esplorò','esponendolo','esportandolo','esportarlo','esporterà','esportò','espugnarla','espugnerà','espugnò','essa','esse','essendogli','essendone','esserli','esserlo','essi','esso','estirparlo','esulterà','esultò','Etna','etnologhi','etti','etto','eu','Euclide','Euripide','eurocentricamente','Eusebio','ev','evacuerà','evacuerò','evacuò','evaporerà','evaporerò','evaporò','evidentissimi','evitali','eviterà','eviterò','evitò','evolverà','ez','fab','fabbricherà','fabbricherebbero','fabbricherò','fabbricò','fac','facendoglieli','faciliterà','faciliterò','facilitò','fad','faf','fag','fah','fal','falcerà','falcerò','falciò','falò','fam','fama','fame','fami','fantasmino','fap','faq','fara','farà','farcele','fare','farglieli','fari','farmele','faro','farò','farsele','farseli','fartele','fas','fascerà','fascerò','fasciò','fase','fasi','Fassa','fata','fate','fatele','fateli','faticherà','faticherò','faticò','fato','fatteli','fav','fava','fave','favellerà','favellò','faz','feb','fec','fece','feci','feconderà','feconderò','fecondò','fed','fede','fedi','fef','feg','feh','fel','fem','fen','fep','feq','fer','ferì','ferirà','ferirò','fermandola','fermandolo','fermarli','fermatosi','fermerà','fermerò','fes','fet','fev','Feynman','fi','fiaccherà','fiaccherò','fiaccò','fiatò','fib','fic','ficcandogli','ficcherà','ficcherò','ficcò','fico','fid','fida','fidantesi','fidanzerà','fidanzerò','fidanzò','fiderà','fiderò','fidi','fido','fidò','Fidonet','fif','figurò','fih','fila','file','filerà','filerò','fili','film','filo','filò','filtrarne','fim','fina','finanzierà','finanzierò','finanziò','fine','fingerò','fini','finì','finirlo','fino','fintantoché','Fiorella','fip','fiq','fir','firmerà','firmerò','fis','fischierà','fischierò','fischiò','fisonomie','fissandolo','fissarlo','fisserà','fisserò','fissò','fit','fiutarla','fiuterà','fiuterò','fiutò','fiv','fiz','fla','fle','fli','flo','flu','fluì','fluirà','fluirò','fluttuamenti','fob','foc','foca','foce','foci','fod','fodererà','fodererò','foderò','fof','fog','foga','foh','fol','fom','fonderà','fonderò','fop','foq','for','fora','forerà','fori','formalizzarli','formalizzerà','formalizzerebbero','formalizzerò','formalizzò','formarla','formarne','formerà','formerò','formulò','fornirgli','foro','forò','forzerà','forzerò','forzò','fos','foss','fot','foto','Fourier','fov','foz','fracasserà','fracasserò','fracassò','frai','fral','frall','franerà','franerò','franò','frantumerà','frantumerò','frantumò','fratturerà','fratturerò','fratturò','fre','fregarle','fregherà','fregò','frequentarli','frequenterà','frequenterebbero','frequenterò','fri','friggerti','fro','frodandola','froderà','froderò','frodò','fru','frugherà','frugherò','frugò','frullerà','frullerò','frullò','frustandoli','frusterà','frusterò','frustò','frustrerà','frustrerò','frustrò','frutterà','frutterò','fruttò','fub','fuc','fucilerà','fucilerò','fucilò','fud','fuf','fug','fuga','fuggirla','fuggirmi','fugherà','fugherò','fugo','fugò','fuh','ful','fulminarlo','fum','fuma','fumerà','fumerò','fumi','fumo','fumò','fune','funestissimo','funzionerà','funzionerò','funzionò','fup','fuq','fur','fus','fusa','fuse','fusi','fuso','fut','fuv','fuz','gab','gac','gad','gaf','gah','gaia','gaie','gaio','gala','Galois','galopperà','galopperò','galoppò','gam','gan','gaq','gar','gara','garantirò','gare','gareggerà','gareggerò','gareggiò','gat','Gauss','gav','gaz','ge','geb','gec','ged','gef','geg','geh','gela','gelerà','gelerò','geli','gelo','gelò','gem','geme','genererà','genererò','geni','gep','geq','ger','ges','gestì','gestirà','gestirlo','gestirò','Gesù','get','gettandole','getterà','getterò','gev','gez','ghermì','Ghezzano','ghiaccerà','ghirlandaio','GhostScript','giacerei','gib','gic','gid','gif','gig','gih','gil','gilè','gim','Gino','giocherò','gioì','gioirà','gioirò','gioverà','gioverò','giovò','gip','giq','gira','girerò','giri','giro','girò','gis','git','gita','gite','giudicandole','giudicandolo','giudicherà','giudicherò','giudicò','giurerà','giurerò','giurò','giustificherò','giustificò','giv','giz','gla','gle','glo','glu','goal','gob','goc','gocciolerà','gocciolerò','gocciolò','god','goda','gode','godi','godo','gof','gog','goh','gola','gole','gom','gon','gonfierà','gonfiò','gop','goq','gor','gos','got','gota','gote','goti','governarli','governerà','governerò','goz','gra','gracchierà','gracchierò','gracchiò','graduerà','graduerò','graduò','graffierà','graffierò','graffiò','gran','grandinerà','grandinerò','grandinò','granduomo','gratterà','gratterò','grattò','graverà','graverò','gravò','grazierà','grazierò','graziò','gre','gremì','gremirà','gremirò','gri','gridandole','gridatogli','griderà','griderò','gridò','gro','grondò','gu','guadagnandoti','guadagnarli','guadagnatosi','guadagnerà','guadagnerò','guaderà','guaderò','guadò','guai','guardalo','guardandogli','guardargli','guarderà','guarderò','guardò','guarì','guastarli','guasterà','guasterò','gub','guc','gud','guf','gufi','gufo','gug','guh','guiderà','guiderò','guido','guizzerà','guizzerò','guizzò','gul','gum','gun','gup','guq','gur','gus','gusterà','gusterò','gustò','gut','guv','guz','hab','hac','had','haf','hag','hah','hal','ham','hap','haq','har','has','hat','hav','haz','he','heb','hec','hed','hef','heg','Hegel','heh','hel','hem','hen','hep','heq','her','hes','het','hev','hez','hib','hid','hif','hig','hih','hil','him','hin','hiq','hir','his','hiv','hiz','hla','hle','hli','hlo','hlu','hob','hod','hof','hog','hoh','hol','hom','hon','hoq','hor','hos','hov','hoz','hra','hre','hri','hro','hru','HTML','hu','hub','huc','hud','huf','hug','huh','hul','hum','hun','hup','huq','hur','HURD','hus','hut','huv','huz','ia','Iacopo','ib','ic','Icilio','idee','idem','identificherà','identificheranno','identificherebbero','identificheremmo','identifichereste','identificheresti','identificherò','identificò','ideo','ideò','idolatrerà','idolatrò','ie','iena','iene','ieri','if','ig','ignorarle','ignorarne','ignorerà','ignorerò','ignorò','ih','ii','illuminerà','illuminò','illustrerà','illustrerò','illustrò','im','imbacuccarla','imballerà','imballò','imbarcherà','imbarcò','imbasciate','imbiancherà','imbiancherebbero','imbiancò','imboccherà','imboccò','imbottì','imbratterà','imbrattò','imbrogliarle','imbrunì','imburrerà','imburrò','imiterà','imitò','immaginerà','immaginò','immetterli','immigrerà','immigrerò','immigrò','immischiò','Imola','impaccerà','impacciò','impallidì','imparali','impararlo','imparerà','impasterà','impastò','impaurì','impaurirla','impazzì','impedirle','impegnatissima','impegnerà','imperciò','imperciocché','Imperia','impero','imperò','impiccarli','impiccherà','impiccò','impiegarla','impiegarli','impiegherà','implementarlo','implementerà','implementerebbero','implementò','implicherà','implicò','implorerà','implorò','impolverò','importerà','importerò','importò','importunandola','impostali','impoverì','imprecherà','imprecò','impresterà','impresterò','imprestò','improvviserà','improvviserò','improvvisò','impugnerà','impugnò','imputandoli','imputarne','imputatogli','imputerà','imputò','inalbererà','inalberò','inamiderà','inamidò','inasprì','inaugurerà','incaglierà','incagliò','incalzerà','incalzò','incantarla','incanterà','incantò','incarterà','incartò','incasserà','incassò','incatenerà','incatenò','incendierà','incendiò','incenerì','incererà','incerò','incetterà','incettò','inchinatosi','inchinerà','inchinò','inchioderà','inchiodò','inciamperà','inciampò','inciprierà','incipriò','inciterà','incitò','includendoci','includerle','incollerà','incollerò','incollò','incolparli','incolperà','incolpò','incomincerò','incomodarla','incomodità','incontrandolo','incontrarne','incoraggiandoli','incoraggiarle','incoronerà','incoronò','incrinerà','incrinò','incrocerà','incrociò','inculcatomi','indenterà','indentò','indi','indicandogli','indicherà','indicò','indirizzerà','indirizzò','individuerà','individuerò','individuò','indossò','indovinarla','indovinerà','indovinò','indugerà','indugerò','indugiò','inebrierà','inebriò','infamerà','infamò','infarinarne','inferocì','infetterà','infetterò','infettò','infilerà','infilò','infittì','informarlo','informerà','informò','infrangerle','ingaggerà','ingaggerò','ingaggiò','ingannerà','ingannò','ingelosì','ingesserà','ingesserò','ingessò','inginocchiatosi','ingoierà','ingoiò','ingombrerà','ingombrò','ingommerà','ingommò','ingozzarne','ingranerà','ingranò','ingrassarla','ingrasserà','ingrassò','ingrosserà','ingrossò','iniquissimi','inizializzassero','inizializzassimo','inizializzerà','inizializzeranno','inizializzerebbe','inizializzerebbero','inizializzeremmo','inizializzereste','inizializzeresti','inizializzò','inizierò','innaffierà','innaffierò','innaffiò','innalzò','innamorerà','innamorerò','innesterà','innesterò','innestò','inni','inoltrerà','inoltrerò','inoltrò','inonderà','inonderò','inondò','inox','inquieterà','inquietò','insaccherà','insaccò','insaponerà','insaponò','insegnarle','insegnarvi','insegnerà','inseguì','inserirà','inserirò','insidierà','insidiò','insignì','insilerà','insilò','insindacabilmente','insinuerà','insinuò','installabile','installabili','installarle','installarlo','installerà','installerò','installò','instaurerà','insultarla','insulterà','insultò','intaglierà','intagliò','intarsierà','intarsiò','intaserà','intasò','integrerà','integrò','intenterà','intentò','interagì','interdì','interesserà','interfaccerà','interfaccerebbero','interfacciassero','interfacciassimo','interfacciò','interloquì','internerà','Internet','internò','interpretarle','interpreterà','interrogandolo','interrogarci','interrogò','intesterà','intestò','intimerà','intimidì','intimò','intitolerà','intitolò','intonò','invaliderà','invaliderò','invalidò','inveì','inventarlo','inventerà','investigarlo','invidiandole','invierà','invischiarlo','inviterà','invocherà','invocò','inzupperà','inzuppò','ione','iosa','ip','iperreali','Ippocrate','Ippolito','iq','ir','irraggerà','irraggerò','irraggiò','irrigherà','irrigò','irriterà','irritò','irte','irti','is','isolerà','isolò','ispezionarti','ispirandogli','istigherà','istigò','istituto','istruì','it','iter','itererà','itererò','iterò','iu','iv','IVA','ivi','iz','Kronecker','lab','lac','lacerarli','lacererà','lacererò','lacerò','lad','laf','lag','laggiù','lago','lagrangiana','lah','lal','lam','lama','lambì','lambirà','lambirò','lame','lamenterà','lamenterò','lamentò','lan','lana','lancerà','lancerò','lane','languì','languirà','languirò','lap','Laplace','laq','lar','lascerò','lasciale','lasciamoli','lasciandole','lastricherà','lastricherebbero','lastricherò','lastricò','LaTeX','lati','lato','latrerà','latrerò','latrò','laudabilissima','lav','lava','lavarli','laverà','laverò','lavi','lavo','lavò','lavorarci','lavorerà','laz','leb','Lebesgue','lec','leccherà','leccherò','lecco','leccò','lede','ledi','ledo','lef','leg','lega','legarli','leggerle','leggerò','leggersele','leggili','legherà','legherò','legittimerà','legittimerebbero','legittimerò','legittimò','lego','legò','leh','lel','lem','len','leopardi','lep','leq','ler','lesa','lese','lesi','leso','lessaggine','lesserà','lesserò','lessò','let','lev','leva','levarla','levarle','levarne','leve','leverà','leverò','levi','levigherà','levigherò','levigò','levo','levò','lez','lib','liberarle','libererà','libererò','lic','licenziarlo','licenzierà','licenzierò','licenziò','lid','lidi','lido','lietissimamente','lif','lig','ligi','lih','lil','lim','lima','lime','limitarli','limitarti','limiterà','limiterò','lin','lineerà','lineerò','lineò','lini','lino','Linus','lip','liq','liquidarla','liquiderà','liquiderò','liquidò','lir','lira','lire','lis','lisciò','LISP','listerà','listerò','listò','lite','liti','litigherà','litigherò','litigò','liv','liz','lla','lle','lli','llo','llu','loc','lod','loda','lodarci','lodarmi','lodarti','lode','loderà','loderò','lodi','lodo','lodò','lof','logorerà','logorerò','logorò','loh','lol','lom','lon','lontanto','lop','loq','lor','loro','lot','lotterà','lotterò','lottò','lov','loz','lra','lre','lri','lro','lru','lub','luc','Luca','luccicherà','luccicherò','luccicò','luce','luci','luciderà','luciderò','lucidò','lud','luf','lug','luh','lul','lum','lume','lumi','lun','luna','lune','Lunigiana','lup','lupi','lupo','luq','lur','lus','lusingherà','lusingherò','lusingò','lut','lutifigolo','luv','luz','mab','mac','macererà','macererò','macerò','maculazione','mad','madonna','maf','mag','mago','mah','mais','mala','male','maledirà','maledirò','mali','malignerà','malignerò','malignò','malposta','malscritti','malscritto','maltrattarla','mam','mammà','mancarle','mancarmi','mancherò','mandagli','mandamela','mandamelo','mandandomi','mandartelo','mandatomi','manderà','manderò','maneggerà','maneggerò','maneggiarli','maneggiarlo','maneggiò','mangerà','mangiarne','mangiò','mani','manifesterà','manipolerà','manipolerò','manipolò','mano','mantenergli','mantenerli','mantenerne','map','maq','marcandoli','marcherà','marcherò','marco','marcò','mare','margherita','mari','marinerà','marinerò','marinò','maritarli','mariterà','mariterò','maritò','Marta','martellandole','mas','masi','masterizzarli','masterizzartela','masticarla','masticherà','masticherò','masticò','mat','maturerà','maturerò','mav','maz','meb','mec','med','medi','mediterà','mediterò','meditò','mef','meh','mela','mele','meledettissimi','meli','melissico','melo','mem','memorizzerà','memorizzerebbero','memorizzerò','memorizzò','mena','menerà','menerò','meni','meno','menò','mentì','mentirà','mentirò','menu','menù','mep','meq','mer','mera','meri','meritarci','meriterà','meriterò','meritò','mero','mes','mescendosi','mescolerà','mescolerò','mescolò','mese','mesi','mesterà','mesterò','mestissima','mestò','met','meta','metà','mete','metterò','mettersele','metterseli','mev','mez','mezz','miagolerà','miagolerò','miagolò','mib','mic','mica','Michela','mid','miei','mieté','mieterà','mieterò','mif','mig','migliorandolo','migliorerà','migliorerò','mih','mil','mila','mill','mim','mina','minaccerà','minaccerò','minacciò','mine','mini','minorarle','mip','miq','mira','mirarli','mire','mirerà','mirerò','miri','miricilico','miro','mirò','mis','miscelerà','miscelerò','miscelò','mischierà','mischierò','mischiò','mise','misi','misurerò','misurò','mit','mite','miti','mitigherà','mitigherò','mitigò','mito','miv','miz','mla','mle','mli','mlo','mlu','mob','moc','mod','moda','mode','modellerà','modellerò','modellò','moderarle','modererà','modererò','moderò','modi','modificarne','modificherà','modificherò','modo','mof','mog','moh','mola','mole','molerà','molerò','moli','molo','molò','mom','mon','monderà','monderò','mondò','monterà','monterò','montò','mop','moq','mor','mora','mordendolo','morderle','more','Morgex','mori','morì','morirò','mormorerà','mormorerò','mormorò','moro','morsicchiandosi','mos','Mosè','mostratone','mostrerà','mostrerò','mot','mota','moti','motivò','moto','mov','movendole','moz','mozzarle','mozzerà','mozzerò','mozzò','mra','mre','mri','mro','mru','mu','mub','muc','mud','muf','mug','muggì','muggirà','muggirò','mugolerà','mugolerò','mugolò','muh','mul','mula','mule','muli','mulo','multipoli','mum','mun','muor','muovendoci','muoverò','mup','muq','mur','mura','muri','muro','Murphy','mus','musa','muse','musi','muso','mut','muta','mutarla','mute','muterà','muterò','muti','muto','mutò','muv','muz','na','nab','nac','nad','naf','nag','nah','nal','nam','nan','nana','nane','nani','nano','nap','naq'"; - final String itWords2 = "'nar','narrandomi','narrandosi','narrarle','narrerà','narrerò','narrò','nas','nascondendolo','nasconderla','nasconderlo','nasi','naso','nata','nate','nati','nativamente','nato','naufragherà','naufragherebbero','naufragherò','nauseerà','nauseerò','nauseò','nav','nave','navi','navigherà','navigherò','navigò','naz','neanchio','neb','nec','ned','nef','neg','nega','negarla','negarlo','negherà','negherò','negl','nego','negò','negozierà','negozierò','negoziò','neh','nell','nem','nen','nep','Nepero','neq','ner','nera','nere','neri','nero','nes','nessunaltra','net','nev','neve','nevi','nevicassero','nevicassimo','nevicherà','nevicheranno','nevicherebbero','nevicheremmo','nevicheremo','nevichereste','nevicheresti','nevicherete','nevicherò','Newton','nez','ni','nib','nic','nid','nidi','nido','nientaltro','nif','nig','nih','nil','nim','nin','nip','niq','nir','nis','niv','niz','nla','nle','nli','nlo','nlu','nob','nobiliterà','nobiliterò','nobilitò','noc','noce','noci','nod','nodi','nodo','nof','nog','noh','noia','noie','nol','noleggerà','noleggerò','noleggiò','noli','nom','nome','nomi','nominandolo','nominarla','nominarle','nominarlo','nominerà','nominerò','nona','none','noni','nono','nop','noq','nor','nord','nos','not','nota','notarne','note','noterà','noterò','noti','notificherà','notificherò','notificò','noto','notò','nov','nove','noz','Npc','nra','nre','nri','nro','nru','nu','nub','nube','nubi','nuc','nuca','nud','nuda','nude','nudi','nudo','nuf','nug','nuh','nul','nullaltro','num','nume','numererà','numererò','numerò','nun','nuocono','nuoterà','nuoterò','nuotò','nup','nuq','nur','nut','nutrì','nuv','nuz','oa','oasi','ob','obbedente','obbedì','obbedirà','obbedirò','obbietterà','obbietterò','obbiettò','obbligherà','obbligherò','obererà','obererò','oberò','oblierà','oblierò','obliò','oblò','oc','occidente','occulterà','occulterò','occultò','occuperò','oceano','oche','odia','odierà','odierò','odiò','odor','odorerà','odorerò','odorò','odoruzzi','oe','of','offrirli','offuscherà','offuscherò','offuscò','og','ogni','ohi','oi','oibò','oimè','ol','olà','olezzerà','olezzerò','olezzò','olia','olierà','olii','oliò','olmi','olmo','oltracciò','oltrepasserà','oltrepasserò','oltrepassò','om','omnicomprensivo','omologherà','omologherò','omologò','once','onde','ondeggerà','ondeggerò','ondeggiò','ondulerà','ondulerò','ondulò','onor','onorandogli','onorerà','onorerò','onorò','onta','oo','operarli','opererò','opinerà','opinerò','opinò','opta','opterà','opterò','opti','opto','optò','oq','orco','orda','orde','ordì','ordinandogli','ordinarli','ordinarne','ordinerò','ordirà','ordirò','Orfeo','organizzerà','organizzerò','Oriano','orientandola','oriente','originerà','originerò','originò','origlierà','origlierò','origliò','orla','orlando','orlerà','orlerò','orli','orlo','orlò','orma','orme','ormeggerà','ormeggerò','ormeggiò','orna','ornerà','ornerò','orni','orno','ornò','orsa','orse','orsi','orso','orsù','orti','orto','os','osai','oscillerà','oscillerò','oscillò','oscurerà','oscurerò','oscurissimi','oscurò','oserò','osi','ospiterò','ossa','ossequierà','ossequierò','ossequiò','osservane','osservarti','osserverà','osserverò','ossi','osso','osta','ostacolerà','ostacolerò','ostacolò','oste','ostenterà','ostenterò','ostentò','osti','ostinatissimi','Ostrogradski','ot','otre','otri','Ottaviano','ottenerle','ottenervi','otto','otturerà','otturerò','otturò','ou','ov','Ovidio','ovvi','ovvierà','ovviò','oz','ozia','ozierà','ozio','oziò','pa','pab','pac','pace','paci','pad','paf','pag','paga','pagandolo','pagherò','pago','pagò','pah','paia','paio','pal','pala','Palaia','pale','palesarlo','paleserà','paleserò','palesò','pali','pallidissime','palo','palperà','palperò','palpò','pam','pane','pani','pap','papa','papi','paq','para','paragonerà','paragonerò','pare','pareggerà','pareggerò','pareggiò','parendoci','parer','parerà','parerò','pari','parlane','paro','parò','partecipandosi','parteciperò','particolarizzate','partorì','partorirà','partorirò','pas','pascolerà','pascolerò','pascolò','passandone','passarla','passarli','passarlo','passarne','passarti','passeggerà','passeggerò','passeggiò','passerò','pat','patrocinerà','patrocinerebbero','patrocinerò','patrocinò','pattinerà','pattinerò','pattinò','pav','pavimenterà','pavimenterebbero','pavimenterò','pavimentò','pe','peb','pec','peccherà','peccherò','peccò','pece','ped','pedinerà','pedinerò','pedinò','pef','peg','peggiorerà','peggiorerò','peggiorò','peh','pel','pela','pelerà','pelerò','peli','pelo','pelò','pem','pen','pena','penalizzerà','penalizzerò','penalizzò','pendé','penderà','penderò','pene','penerà','penerò','penetrerà','penetrerò','penetrò','peni','peno','penò','pensarne','pensatoci','penserò','pentì','Pentium','penzolerà','penzolerò','penzolò','pep','pepe','peq','pera','percepì','percepirà','percepirò','perciocché','perdé','perderò','perdonerà','perdonerò','perdonò','pere','peregrinerà','peregrinerebbero','peregrinerò','peregrinò','perequerà','perequerò','perequò','perfezionerà','perfezionerò','perfezionò','perforerà','perforerò','perforò','peri','perloché','pernotterà','pernotterò','pernottò','pero','però','perocché','perplime','perplimono','perquisì','perquisirà','perquisirò','persevererà','persevererò','perseverò','persisté','personalizzarlo','personalizzassero','personalizzassimo','personalizzavamo','personalizzavano','personalizzavate','personalizzerà','personalizzeranno','personalizzerebbe','personalizzerebbero','personalizzeremmo','personalizzeremo','personalizzereste','personalizzeresti','personalizzerete','personalizzò','persuaderne','perturbandolo','perturberà','perturberò','perturbò','pervenirvi','pes','pesa','pesandoli','pescherà','pescherò','pescò','pese','peserò','pesi','peso','pesò','pesterà','pesterò','pestò','pet','pev','pez','piacendogli','piacerà','piacerò','piacevolissimi','piagnucolerà','piagnucolerebbero','piagnucolerò','piagnucolò','piangerà','piangerò','piantandogli','piantandole','piantatosi','pianterà','pianterò','piantò','pib','pic','picchierà','picchierò','picchiettò','picchiò','pid','pieghettò','piegò','Pieramato','pietrificò','pif','pig','pigliandosi','pigliarne','piglierà','piglierò','pigliò','pignorerà','pignorerò','pignorò','pigolerà','pigolerò','pigolò','pih','pil','pila','pile','piluccherà','piluccherò','piluccò','pim','pini','pino','Pinocchio','piomberà','piomberò','piombò','pioverà','pip','pipa','pipe','piq','pir','piratati','pis','Pisa','pit','pitturerà','pitturerò','pitturò','piv','piz','pizzicherà','pizzicherò','pizzicò','pla','placcherà','placcherò','placcò','plasmerà','plasmerò','plasmò','plasticose','ple','pli','plo','plu','pob','poc','poca','poco','pod','podi','pof','pog','poh','pol','poli','polo','pom','pomi','pomo','pomperà','pomperò','pompò','pondererà','pondererò','ponderò','pone','poni','popolerà','popolerò','popolò','poq','porgendone','pori','poro','portarteli','portatosi','portatovi','pos','posa','posandogli','posarlo','posdatante','posdatarono','posdatassero','posdatassimo','posdatavamo','posdatavano','posdatavate','posdaterà','posdateranno','posdaterebbe','posdaterebbero','posdateremmo','posdateremo','posdatereste','posdateresti','posdaterete','posdaterò','posdatò','pose','poserà','poserò','posi','posizionerà','poso','posò','possedé','possederà','possederle','POST','postalo','postarle','posterò','PostScript','pota','poté','poterà','poterò','poti','poto','potò','pov','poz','pra','pranzerà','pranzerò','pranzò','praticarle','praticherà','praticherò','praticò','pre','precedé','precederà','precederò','precipiterà','precipiterò','preciserà','preciserò','precisò','precompilai','precompilammo','precompilano','precompilante','precompilarono','precompilasse','precompilassero','precompilassi','precompilassimo','precompilaste','precompilasti','precompilate','precompilati','precompilava','precompilavamo','precompilavano','precompilavate','precompilavi','precompilavo','precompilerà','precompilerai','precompileranno','precompilerebbe','precompilerebbero','precompilerei','precompileremmo','precompileremo','precompilereste','precompileresti','precompilerete','precompilerò','precompili','precompiliamo','precompilino','precompilo','precompilò','prederà','prederò','predicherà','predicherò','predicò','predò','preferirà','preferirò','pregherà','pregherò','pregò','pregusterà','pregusterò','pregustò','prelati','prelevabile','prelevarli','preleverà','preleverò','prelevò','premé','premeditò','premendoci','premerà','premermi','premerò','premetterò','premierà','premierò','premiò','prendendogli','prendergli','prenderò','prendertela','prendiamolo','prenoterà','prenoterò','prenotò','preoccupartene','prepararne','preparerà','preparerò','prescriverebbero','prescriverò','presentamele','presentente','presenterò','presentì','presentirà','presentirò','presenziò','preservarti','preserverà','preserverò','preservò','presiedé','presiederà','presserà','presserò','pressò','prestabilì','prestabilirà','prestabilirebbero','prestabilirò','presterà','presterò','prevedendosi','prevenirle','preventivò','pri','pria','prillerà','prillerò','prillò','principiò','procacciargli','procacciò','procedé','procederò','processarlo','processerà','processerò','processò','proclamerà','proclamerò','procreerà','procreerò','procreò','procurerà','procurerò','prodigò','proferì','professerà','professerò','professò','profetizzerà','profetizzerebbero','profetizzerò','profetizzò','profitterà','profitterò','profittò','profumandolo','profumarlo','profumerà','profumerò','profumò','progetterà','progetterò','programmarla','progredì','progredirà','progredirò','proibì','proibirà','proibirmelo','proibirò','proibirvelo','proietterà','proietterò','proiettò','prolificherà','prolificherebbero','prolificherò','prolificò','prolungherà','prolungherò','prolungò','prometterle','prometterlo','promulgherà','promulgherò','promulgò','pronosticarle','pronosticherà','pronosticheremmo','pronostichereste','pronosticheresti','pronosticherò','pronosticò','pronuncerà','pronuncerò','pronunziò','propagarla','propagherà','propagherò','propagò','propalerà','propalerò','propalò','propendé','propenderà','propenderò','propenduta','propendute','propenduti','propinerà','propinerò','propinò','proponendogli','proponendone','proporzionò','prorogherà','prorogherò','prorogò','prorompé','proromperà','prosciugherà','prosciugherò','prosciugò','proseguirò','prospererà','prospererò','prosperò','prospetterà','prospetterò','prospettò','prostituì','prostrerà','prostrerò','prostrò','protesterò','protestò','provandolo','provarla','proverà','provocarli','provocarlo','provocherà','provocherò','provvedé','provvederà','provvederlo','provvederò','pru','prudentissimi','pu','pubblicarle','pubblicherà','pubblicherò','pube','puc','pud','puf','pug','pugnalerà','pugnalerò','pugnalò','puh','pul','pula','pulì','pulirà','pulirò','pulserà','pulserò','pulsò','pum','pun','pungerà','punirmi','puntellerà','puntellerò','puntellò','punterà','punterò','puntò','puoi','pup','pupullante','pupullarono','pupullassero','pupullassimo','pupullavamo','pupullavano','pupullavate','pupullerà','pupulleranno','pupullerebbe','pupullerebbero','pupulleremmo','pupulleremo','pupullereste','pupulleresti','pupullerete','pupullerò','pupullò','puq','pura','pure','purgandolo','purgherà','purgherò','purgò','puri','purificherà','purificherò','purificò','puro','put','puv','puz','puzzerà','puzzerò','puzzò','qa','qab','qac','qad','qaf','qag','qah','qal','qam','qan','qap','qaq','qar','qas','qat','qav','qaz','qe','qeb','qec','qed','qef','qeg','qeh','qel','qem','qen','qep','qeq','qer','qes','qet','qev','qez','qi','qib','qic','qid','qif','qig','qih','qil','qim','qin','qip','qiq','qir','qis','qit','qiv','qiz','qla','qle','qli','qlo','qlu','qo','qob','qoc','qod','qof','qog','qoh','qol','qom','qon','qop','qoq','qor','qos','qot','qov','qoz','qra','qre','qri','qro','qru','qu','quadripotenziale','qual','qualcosaltro','qualè','qualificherà','qualificherebbero','qualificherò','quandè','quandecco','quandero','quantaltro','quarantanni','quattrotto','qub','quc','qud','quei','quel','querelerà','querelerò','querelò','quf','qug','quh','quietò','quintanno','quiz','qul','qum','qun','quoterà','quoterò','quotò','qup','quq','qur','qus','qut','quv','quz','rab','rabbrividì','rabbrividirò','rac','raccapezzerà','raccapezzerò','raccapezzò','raccatterà','raccatterò','raccattò','raccomanderà','raccomanderò','raccomandò','racconterò','racimolerà','racimolerò','racimolò','rada','raddoppierà','raddoppiò','raddrizzerà','raddrizzerò','raddrizzò','rade','radi','radierà','radierò','radiò','rado','radunerà','radunerò','radunò','raf','raffigurerà','raffigurerò','raffigurò','raffinerà','raffinerò','raffinò','rafforzerà','rafforzerò','rafforzò','raffreddatissimo','raffredderà','raffredderò','raffreddò','raggirerà','raggirerò','raggirò','raggrumerà','raggrumerò','raggrumò','raggrupperà','raggrupperò','raggruppò','ragguaglierà','ragguaglierebbero','ragguaglierò','ragguagliò','ragionerà','ragionerò','ragionier','ragionò','ragù','rah','ral','rallegrerà','rallegrerò','rallegrò','ram','rame','rami','ramificherà','ramificherebbero','ramificherò','ramificò','rammenderà','rammenderò','rammendò','ramo','ran','rana','rane','rapa','rape','raperà','raperò','rapi','rapì','rapirà','rapirò','rapo','rapò','rappezzerà','rappezzerò','rappezzò','rappresenterà','rappresenterò','raq','rar','rara','rare','rari','raro','rasa','raschierà','raschierò','raschiò','rase','rasenterà','rasenterò','rasentò','raserà','raserò','rasi','raso','rasò','rasperà','rasperò','raspò','rassegnerà','rassegnerò','rassegnò','rassetterà','rassetterò','rassettò','rassicurerà','rassicurerò','rassicurò','rassoderà','rassoderò','rassodò','rastrellerà','rastrellerebbero','rastrellerò','rat','rata','rate','ratificherà','ratificherebbero','ratificherò','ratificò','rattristerà','rattristerebbero','rattristerò','rattristò','rav','ravviverà','ravviverò','ravvivò','raz','razzolerà','razzolerò','razzolò','realizzarli','realizzerò','reb','rec','reca','recapiterà','recapiterò','recapitò','recedé','recederà','recederò','recherò','reciderà','reciterà','reciterò','reclamerà','reclamerò','reclamò','reco','recò','recriminerà','recriminerebbero','recriminerò','recriminò','recupererà','recupererò','recuperò','red','redarguì','redarguirà','redarguirò','redirigere','redistribuibili','referenziantisi','refrigererà','refrigererebbero','refrigererò','refrigerò','reg','regalandolo','regalarla','regalarlo','regalerà','regalerò','registrandoli','registrerò','regnerà','regnerò','regolerò','regolò','reh','reimportano','reimportarono','reimportassero','reimportassi','reimportassimo','reimportaste','reimportasti','reimportata','reimportate','reimportati','reimportava','reimportavamo','reimportavano','reimportavate','reimportavi','reimportavo','reimporterà','reimporterai','reimporteranno','reimporterebbe','reimporterebbero','reimporterei','reimporteremmo','reimporteremo','reimportereste','reimporteresti','reimporterete','reimporterò','reimportiamo','reimportiate','reimportino','reimportò','reinserì','reinserirà','reinserirlo','reinserirò','reintegrerà','reintegrerò','reintegrò','rel','relegarli','relegherà','relegherò','relegò','rema','remerà','remerò','remi','remo','remò','ren','renderà','rene','reni','rep','reperì','reperirà','reperirò','replicherà','replicò','reputerà','reputerò','reputò','req','rer','res','resa','rese','resi','reso','respirerà','respirerò','respirò','restaurerà','restaurerò','restaurò','restituì','restituirà','restituirò','ret','rete','reti','retribuì','retrodaterà','retrodaterebbero','retrodaterò','retrodatò','rettificherà','rettificherebbero','rettificherò','rettificò','rev','revocherà','revocherò','revocò','rez','ri','rialzerà','rialzerò','rialzò','rianimerà','rianimerò','rianimò','riapparirà','riattiverà','riattiverò','riattivò','rib','ribadì','ribadirà','ribadirò','ribalterà','ribalterò','ribaltò','ribasserà','ribasserò','ribassò','ributtò','ricalcherà','ricalcherò','ricalcò','ricambierà','ricambierò','ricambiò','ricamerà','ricamerò','ricamò','ricapitolerà','ricapitolerebbero','ricapitolerò','ricapitolò','ricatterà','ricatterò','ricattò','ricaverà','ricaverò','ricavò','ricercherà','ricercherò','ricercò','ricevé','riceverò','richiamerà','richiamerò','richiamò','richiederà','ricollegherà','ricollegherebbero','ricollegherò','ricollegò','ricolmerà','ricolmerò','ricolmò','ricomincerà','ricomincerò','ricominciò','ricompenserà','ricompenserò','ricompensò','riconcilierà','riconcilierò','riconciliò','riconferì','riconsiderarla','ricordarteli','ricorderò','ricordò','ricostruì','ricovererà','ricovererò','ricoverò','ricupererà','ricupererò','ricuperò','rid','ride','ridi','ridigitai','ridigitammo','ridigitano','ridigitante','ridigitarono','ridigitasse','ridigitassero','ridigitassi','ridigitassimo','ridigitaste','ridigitasti','ridigitava','ridigitavamo','ridigitavano','ridigitavate','ridigitavi','ridigitavo','ridigiterà','ridigiterai','ridigiteranno','ridigiterebbe','ridigiterebbero','ridigiterei','ridigiteremmo','ridigiteremo','ridigitereste','ridigiteresti','ridigiterete','ridigiterò','ridigiti','ridigitiamo','ridigitino','ridigitò','ridistribuirlo','rido','ridò','rielaborarla','riempirà','rientrerà','rientrerò','riepilogherà','riepilogherebbero','riepilogherò','riepilogò','rievocherà','rievocherò','rievocò','rif','riferirà','riferirmelo','riferirò','rifinì','rifinirà','rifinirò','rifiuterà','rifiuterò','rifletté','rifletterò','riformerà','riformerò','riformò','rifornì','rifornirà','rifornirò','rifuggì','rifuggirà','rifuggirò','rig','riga','rigenererà','rigenererò','rigenerò','rigo','rigovernerà','rigovernerebbero','rigovernerò','rigovernò','riguarderò','riguardò','rih','ril','rilasciarlo','rilasserà','rilasserò','rilassò','rileggerli','rilegherà','rilegherò','rilegò','rileverà','rileverò','rim','rima','rimanderà','rimanderò','rimandò','rimapparli','rimboccherà','rimboccherò','rimboccò','rimborserà','rimborserò','rimborsò','rime','rimedierà','rimedierò','rimediò','rimirerà','rimirò','rimodernerà','rimodernerebbero','rimodernerò','rimodernò','rimonterà','rimonterò','rimontò','rimorchierà','rimorchierò','rimorchiò','rimpatrierà','rimpatrierò','rimpatriò','rimpiazzerà','rimpiazzerebbero','rimpiazzerò','rimpiazzò','rimpinzerà','rimpinzerò','rimpinzò','rimprovererà','rimprovererò','rimuoverli','rimuoverlo','rincalzerà','rincalzerò','rincalzò','rincarerà','rincarerò','rincarò','rincaserà','rincaserò','rincasò','rinforzerà','rinforzerò','rinforzò','rinfrescherà','rinfrescherò','rinfrescò','ringhierà','ringhierò','ringhiò','ringrazierà','ringrazierò','ringraziò','rinnegherà','rinnegherò','rinnegò','rinnoverà','rinnoverò','rinnovò','rinsavì','rinsavirà','rinsavirò','rintoccherà','rintoccherebbero','rintoccherò','rintoccò','rinuncerà','rinuncerò','rinvierà','rinvierò','rinviò','riordinerà','riordinerò','riordinò','riorganizzassero','riorganizzassimo','riorganizzerà','riorganizzerebbe','riorganizzerebbero','riorganizzeremmo','riorganizzereste','riorganizzeresti','riorganizzerò','riorganizzò','rip','ripagherà','ripagherò','ripagò','riparerà','riparerò','riparò','ripartì','ripartirà','ripartirò','ripasserà','ripasserò','ripassò','ripenserà','ripenserò','ripensò','ripeté','ripeterò','ripetettero','ripiegherà','ripiegherò','ripiegò','ripopolerà','ripopolerò','ripopolò','riporterò','riposerà','riposerò','riposizionerà','riposò','ripostarli','riprenderli','riprenderò','ripristinarlo','ripristinerà','ripristinerebbero','ripristinerò','ripristinò','riprogrammabile','riproverà','riproverò','riprovò','ripudierà','ripudierò','ripudiò','ripugnerà','ripugnerò','ripugnò','ripulì','ripulirà','ripulirò','riq','rir','ris','risa','risalterà','risalterò','risaltò','risanerà','risanerò','risanò','riscalderà','riscaldò','riscatterà','riscatterò','riscattò','rischiarerà','rischiarerebbero','rischiarerò','rischiarò','rischierò','rischiò','risciacquerà','risciacquerò','risciacquò','riscontrerà','riscontrerebbero','riscontrerò','riscontrò','riscriverle','riscriverlo','riscrivilo','riscuoterà','rise','riseleziona','riselezionai','riselezionammo','riselezionano','riselezionante','riselezionarono','riselezionasse','riselezionassero','riselezionassi','riselezionassimo','riselezionaste','riselezionasti','riselezionata','riselezionate','riselezionati','riselezionava','riselezionavamo','riselezionavano','riselezionavate','riselezionavi','riselezionavo','riselezionerà','riselezionerai','riselezioneranno','riselezionerebbe','riselezionerebbero','riselezionerei','riselezioneremmo','riselezioneremo','riselezionereste','riselezioneresti','riselezionerete','riselezionerò','riselezioni','riselezioniamo','riselezionino','riseleziono','riselezionò','riserverà','riserverò','riservò','risi','risiedé','risiederà','risiederò','risistema','risistemai','risistemammo','risistemante','risistemasse','risistemassero','risistemassi','risistemassimo','risistemaste','risistemasti','risistemava','risistemavamo','risistemavano','risistemavate','risistemavi','risistemavo','risistemerà','risistemerai','risistemeranno','risistemerebbe','risistemerebbero','risistemerei','risistemeremmo','risistemeremo','risistemereste','risistemeresti','risistemerete','risistemi','risistemiamo','risistemino','risistemo','risistemò','riso','risolverà','risonerà','risonerò','risonò','risparmierà','risparmierò','risparmiò','rispecchierà','rispecchierò','rispecchiò','rispettarle','rispettarli','rispetterò','rispettò','ristabilì','ristamperà','ristamperò','ristampò','risulterò','rit','ritaglierà','ritaglierò','ritagliò','ritarderà','ritarderò','ritardò','riti','ritiratigli','ritirerà','ritirerò','rito','ritoccherà','ritoccherò','ritoccò','ritornerò','riunirò','riuscirò','riutilizzerà','riutilizzerebbero','riutilizzò','riv','riva','rivaleggerà','rivaleggerebbero','rivaleggerò','rivaleggiò','rive','rivelan','rivelerò','rivendendolo','rivenderlo','rivendicherà','rivendicherò','rivendicò','rivolterà','rivolterò','rivoltò','riz','rla','rle','rli','rlo','rlu','rob','roba','robottini','robottino','roc','rod','rof','rog','rogo','roh','rol','rom','Roma','romberà','romberò','rombò','ron','ronzerà','ronzerò','ronzò','rop','roq','ror','ros','rosa','rose','rosolerà','rosolerò','rosolò','Rossella','rot','rotolerà','rotolerò','rotolò','rov','rovescerà','rovescerò','rovesciò','rovi','rovinerà','rovinerò','rovinò','rovisterà','rovisterò','rovistò','rovo','roz','rra','rre','rri','rro','rru','ru','rub','ruba','ruberà','ruberò','rubi','rubo','rubò','ruc','rud','ruf','rug','ruga','ruh','rul','rullerà','rullerò','rullò','ruminerà','ruminerò','ruminò','run','rup','rupe','rupi','ruq','rur','rus','russerà','russerò','russò','rut','ruv','ruz','ruzzolerà','ruzzolerò','ruzzolò','sab','sabotarli','sac','sacrificò','sad','saf','sag','saggerà','saggerò','saggiò','sah','saio','sala','salasserà','salasserò','salassò','saldarle','salderà','salderò','saldò','sale','salerà','salerò','sali','salì','salirò','Sallustio','salo','salò','salperà','salperò','salterà','salterò','saltò','salutargli','saluterà','saluterò','salutò','salvala','salverà','salverò','Salvetti','sam','sana','sanarle','sane','sanerà','sanerò','sanguinerà','sanguinerò','sanguinò','sani','sano','sanò','santificherà','santificherebbero','santificherò','santificò','santuomo','sap','saputosi','saq','sar','sarà','sarò','sas','sat','sav','savi','saz','sazi','sazierà','sazierò','saziò','sbagliatissimo','sbaglierà','sbaglierò','sballerà','sballerò','sballò','sbalordì','sbalordirà','sbalordirò','sbalzerà','sbalzerò','sbalzò','sbandirli','sbaraglierà','sbaraglierò','sbaragliò','sbarcherò','sbarrerà','sbarrerò','sbarrò','sbassarlo','sbatté','sbattendone','sbatterà','sbatterò','sbattettero','sbaverà','sbaverò','sbavò','sbenderà','sbenderò','sbendò','sbiadì','sbiadirà','sbiadirò','sbigottì','sbigottirà','sbigottirò','sbilancerà','sbilancerò','sbilanciò','sbircerà','sbircerò','sbirciò','sbloccherà','sbloccherò','sbloccò','sboccerà','sboccerò','sbocciò','sbottonerà','sbottonerò','sbottonò','sbranerà','sbranerò','sbranò','sbriciolerà','sbriciolerò','sbriciolò','sbrigarlo','sbrigherà','sbrigherò','sbrigò','sbroglierà','sbroglierò','sbrogliò','sbuccerà','sbuccerò','sbucciò','sbufferà','sbufferò','sbuffò','scaccerà','scaccerò','scacciò','scaglierà','scaglierò','scagliò','scalderà','scalderò','scaldò','scalerà','scalerò','scalò','scambiarci','scambiargli','scambierà','scambierò','scambiò','scamperà','scamperò','scampò','scandalizzerà','scandalizzerò','scandalizzò','scandì','scandirà','scandirò','scansarli','scansò','scapiterà','scapiterò','scapitò','scappargli','scapperà','scapperò','scappò','scarcererà','scarcererò','scarcerò','scardinerà','scardinerò','scardinò','scaricarli','scaricarlo','scaricherà','scaricherò','scaricò','scarterà','scarterò','scartò','scartocciò','scasserà','scasserò','scassò','scatenarla','scatenerà','scatenerò','scatterà','scatterò','scattò','scavalcherà','scavalcherò','scavalcò','scavarti','scaverà','scaverò','scavò','scegliendolo','sceglierà','sceglierò','scemò','scenderà','scenderò','schermì','schernì','schernirà','schernirò','scherzerà','scherzerò','scherzò','schiaccerà','schiaccerò','schiacciò','schianterà','schianterò','schiantò','schiarì','schiarirà','schiarirò','schiererà','schiererò','schifargli','schizzerà','schizzerò','schizzò','Schwarzschild','scia','sciacquarli','sciacquerà','sciacquerò','sciacquò','scialacquerà','scialacquerò','scialacquò','scie','scilla','sciò','sciogliendogli','scioglierà','scioglierò','sciopererà','sciopererò','scioperò','sciuperà','sciuperò','sciupò','scivolerà','scivolerò','scivolò','scoccò','scodellò','scodinzolerà','scodinzolerebbero','scodinzolerò','scodinzolò','scolorì','scolorirà','scolorirò','scolpì','scolpirà','scolpirò','scomparì','scomparirà','scomparirò','scompatta','scompigliandole','scompiglierà','sconfesserà','sconfesserò','sconfessò','sconficcò','sconfinerà','sconfinerò','sconfinò','scongiurerà','scongiurerò','scongiurò','sconsacrerà','sconsacrerò','sconsacrò','sconsiglierà','sconsiglierebbero','sconsiglierò','sconsigliò','scontenterà','scontenterebbero','scontenterò','scontentò','sconterà','sconterò','scontò','scoperchierà','scoperchierebbero','scoperchierò','scoperchiò','scoppierò','scoprirle','scoprirò','scoraggerà','scoraggerò','scoraggiò','scorderà','scorderò','scordò','scorgendoli','scorrendola','scortecciò','scorterà','scorterò','scortò','scosterà','scosterò','scostò','scottandogli','scotterà','scotterò','scottò','scoverà','scoverò','scovò','scozzerà','scozzerò','scozzò','screditerà','screditerò','screditò','scremerà','scremerò','scremò','screpolerà','screpolerò','screpolò','scribacchiò','scricchiolassimo','scricchiolerà','scricchioleranno','scricchiolerebbe','scricchiolerebbero','scricchioleremmo','scricchiolereste','scricchioleresti','scricchiolerò','scricchiolò','scritturerà','scritturerebbero','scritturerò','scritturò','scrivendola','scrivendolo','scrivendone','scriverò','scrollerà','scrollerò','scrollò','scroscerà','scroscerò','scrosciò','scrosterà','scrosterò','scrostò','scruterà','scruterò','scrutò','sculaccerà','sculaccerò','sculacciò','scuoterne','scusarne','scuserà','scuserò','scusò','sdegnerà','sdegnerò','sdegnò','sdoganerà','sdoganerò','sdoganò','sdoppierà','sdoppierò','sdoppiò','sdraiò','sdrucciolò','seb','seco','secondarla','secondarle','secondarlo','seconderà','seconderò','secondò','sed','seda','sede','sederà','sederò','sedi','sedo','sedò','sedutosi','sef','seg','sega','segnalarmelo','segnalerà','segnalerò','segnalò','segnerà','segnerò','sego','segregherà','segregherò','segregò','seguendone','seguirò','seguitandolo','seguiterà','seguiterò','seguitò','seguitolo','seh','sel','selcerà','selcerò','selciò','selezionandolo','selezionerà','selezionerò','selezionò','sembrandogli','sembrerò','seme','semi','seminerò','semplificargli','semplificherà','semplificherò','semplificò','sempreché','seni','sennò','seno','sentente','sentirgli','sentirle','senzaltro','sep','separatone','separerà','separerò','seppellì','seppellirà','seppellirlo','seppellirò','seq','sequestrò','ser','sera','serbali','serbarli','serbateli','serberà','serberò','serbò','sere','seri','serrandosi','serrerà','serrerò','serrò','servendolo','servirò','ses','sessantanni','seta','sete','settantanni','sev','sezionerà','sezionerò','sezionò','sfacchinerà','sfacchinerò','sfacchinò','sfamerà','sfamerò','sfamò','sfascerà','sfascerò','sfasciò','sfavillerà','sfavillerò','sfavillò','sfavorì','sfibbierà','sfibbierò','sfibbiò','sfibrerà','sfibrerò','sfibrò','sfiderà','sfiderò','sfidò','sfigurerà','sfigurerò','sfigurò','sfilerà','sfilerò','sfilò','sfinì','sfinirà','sfinirò','sfiorerà','sfiorerò','sfiorì','sfiorirà','sfiorirò','sfiorò','sfocerà','sfocerò','sfociò','sfodererà','sfodererò','sfoderò','sfogherà','sfogherò','sfoglierà','sfoglierò','sfogliò','sfogò','sfondarla','sfonderà','sfonderò','sfondò','sfracellò','sfratterà','sfratterò','sfrattò','sfregherà','sfregherò','sfregò','sfronderà','sfronderò','sfrondò','sfrutterò','sfuggì','sfuggirà','sgerri','sghignazzò','SGML','sgobberà','sgobberò','sgobbò','sgocciolò','sgombererà','sgombererò','sgomberò','sgombrò','sgomenterà','sgomenterò','sgomentò','sgominerà','sgominerò','sgominò','sgorgherà','sgorgherò','sgorgò','sgozzerà','sgozzerò','sgozzò','sgradevolissimo','sgranchì','sgranchirà','sgranchirò','sgranerà','sgranerò','sgranò','sgranocchiassero','sgranocchiassimo','sgranocchierà','sgranocchieranno','sgranocchierebbe','sgranocchierebbero','sgranocchieremmo','sgranocchiereste','sgranocchieresti','sgranocchierò','sgranocchiò','sgrasserà','sgrasserò','sgrassò','sgraverà','sgraverò','sgravò','sgretolerà','sgretolerò','sgretolò','sgridarli','sgriderà','sgriderò','sgridò','sguainerà','sguainerò','sguainò','sguinzagliassimo','sguinzaglierà','sguinzaglieremmo','sguinzagliereste','sguinzaglieresti','sguinzaglierò','sguinzagliò','sibilerà','sibilerò','sibilò','sid','siederà','siederò','sif','sigillerà','sigillerò','sigillò','significantissima','significherà','significherò','sih','sil','silurerà','silurerò','silurò','sim','simboleggerà','simboleggerò','simboleggiassimo','simboleggiò','Simona','simpatizzerà','simpatizzerò','simpatizzò','simulerà','simulerò','simulò','singhiozzerà','singhiozzerò','singhiozzò','sino','sintetizzò','sintonizzerà','sintonizzerò','sintonizzò','sip','siq','sire','sis','sistemerà','sistemerò','sistemò','sit','siti','sito','situerà','situerò','situò','siv','siz','sla','slaccerà','slaccerò','slacciò','slanciò','sle','slegherà','slegherò','slegò','slenterà','slenterò','slentò','sli','slip','slitterà','slitterò','slittò','slo','sloggerà','sloggerò','sloggiò','slogherà','slogherò','slogò','slu','smacchierà','smacchierò','smacchiò','smaglierà','smaglierò','smagliò','smalterà','smalterò','smaltì','smaltirà','smaltirò','smaltò','smarrì','smarrirà','smarrirò','smaschererà','smaschererò','smascherò','smembrerà','smembrerò','smembrò','smentì','smentirà','smentirò','smercerà','smercerò','smerciò','smeriglierà','smeriglierebbero','smeriglierò','smerigliò','smetterà','smetterò','smezzerà','smezzerò','smezzò','sminuzzerà','sminuzzerò','sminuzzò','smontarlo','smonterà','smonterò','smontò','smorzerà','smorzerò','smorzò','smusserà','smusserò','smussò','snoderà','snoderò','snodò','sob','sobbalzerà','sobbalzerò','sobbalzò','sobbarcherebbero','sobillerà','sobillerò','sobillò','soc','soccombé','soccomberà','soccomberò','soccorrerà','soci','sod','soda','soddisfò','sode','sodi','sodo','sof','sofà','soffierà','soffierò','soffiò','soffocarla','soffocarlo','soffocherà','soffocherò','soffocò','soffrirà','soffrirli','soffrirò','sog','sogghignerà','sogghignerebbero','sogghignerò','sogghignò','sognerà','sognerò','sognò','soh','soia','sola','solcherà','solcherò','solcò','sole','solennissimi','soli','sollecitò','solleticherà','solleticherebbero','solleticherò','solleticò','solleverà','solleverò','sollevò','solo','som','soma','somiglierà','somiglierò','somigliò','sommerà','sommerò','somministrassimo','somministrerà','somministreremmo','somministrereste','somministreresti','somministrerò','somministrò','sommò','sonderà','sonderò','sondò','sono','sop','soperchiarli','sopì','sopirà','sopirò','sopperì','sopperirà','sopperirò','soppeserà','soppeserò','soppesò','soppianterà','soppianterò','soppiantò','sopportandone','sopporterà','sopporterò','sopportò','soprabbondanti','sopraeleverà','sopraeleverebbero','sopraeleverò','sopraelevò','soprassedé','soq','sormonterà','sormonterò','sormontò','sorpasserà','sorpasserò','sorpassò','sorvolerà','sorvolerò','sorvolò','sos','sospenderne','sospetterà','sospetterò','sospirerà','sospirerò','sostenendola','sostenterà','sostenterò','sostentò','sosterà','sosterò','sostituirà','sostituirò','sostò','sot','sotterrarli','sottilizzerà','sottilizzerebbero','sottilizzerò','sottilizzò','sottolineerà','sottolineerò','sottolineò','sottoporli','sottostarò','sottovaluterà','sottovaluteranno','sottovaluterebbe','sottovaluterebbero','sottovaluteremmo','sottovalutereste','sottovaluteresti','sottovaluterò','sottovalutò','sottrarli','sov','sovrascrive','sovrasterà','sovrastò','sovrecciterà','sovreccitò','sovvenzionassimo','sovvenzionerà','sovvenzioneremmo','sovvenzionereste','sovvenzioneresti','sovvenzionerò','sovvenzionò','sovvertì','sovvertirà','sovvertirò','soz','spaccerà','spaccerò','spaccherà','spaccherò','spacciandoli','spacciò','spaccò','spalancherà','spalancherò','spalancò','spalmerà','spalmerò','spalmò','sparerà','sparerò','spargerà','spargerli','sparì','sparirà','sparirò','sparlerà','sparlerò','sparlò','sparpaglierà','sparpaglierò','sparpagliò','spartì','spartirà','spartirò','spasimerà','spasimerò','spasimò','spaventerà','spaventerò','spaventò','spazierà','spaziò','spazzarla','spazzerà','spazzerò','spazzò','spazzolerà','spazzolerò','spazzolò','specchierà','specchiò','specializzandola','specificherà','specificherò','specificò','speculerà','speculerò','speculò','spedì','spedirà','spedirò','spellerà','spellerò','spellò','spenderà','spenderci','spenderli','spenderò','spengendolo','spengerlo','sperderà','sperderò','spererà','spererò','spergiurò','sperimenterà','sperimenterò','sperimentò','sperò','sperpererà','sperpererò','sperperò','speserà','speserò','spesò','spettinerà','spettinò','spettò','spezzale','spezzerà','spezzerò','spezzetterà','spezzetterebbero','spezzetterò','spezzettò','spezzò','spia','spiaccicherà','spiaccicherò','spiaccicò','spianerà','spianerò','spianò','spiattellargli','spiccherà','spiccherò','spiccò','spie','spiegalo','spiegarlo','spiegazzerà','spiegazzerò','spiegazzò','spiegherò','spii','spillerà','spillerò','spillò','spio','spirerà','spirerò','spirò','splenderà','splenderò','spodesterà','spodesterò','spodestò','spoetizzerà','spoetizzerebbero','spoetizzerò','spoetizzò','spoglierà','spoglierò','spogliò','spolvererà','spolvererò','spolverò','spopolerà','spopolerò','spopolò','sporcarne','sporcherà','sporcherò','sporcò','sposterà','sposterò','sprangherà','sprangherò','sprangò','sprecherà','sprecherò','sprecò','spregerà','spregerò','spregiò','spremé','spremerà','spremerne','spremerò','sprezzerà','sprezzerò','sprezzò','sprigionò','sprofondò','spronerà','spronerò','spronò','spruzzerà','spruzzerò','spruzzò','spuntargli','spuntarlo','spuntellerà','spuntellerebbero','spuntellerò','spuntellò','spunterà','spunterò','spuntò','sputerà','sputerò','sputò','squadrandolo','squadrò','squaglierà','squaglierò','squagliò','squalificherà','squalificherò','squalificò','squarcerà','squarcerò','squarciò','squarterà','squarterò','squartò','squasserà','squasserò','squassò','squilibrerà','squilibrerò','squilibrò','squillò','sra','sradicherà','sradicherò','sradicò','sragionerà','sragionerò','sragionò','sre','sri','sro','sru','stabilirà','stabilirò','stabilirvi','staccherà','staccherò','stai','stampali','stamperà','stamperò','stampigliò','stampò','stan','stancherà','stancherò','stancò','standovi','stanerà','stanerò','stanò','stanzierà','stanzierò','stanziò','stapperà','stapperò','stappò','star','starnazzerà','starnazzerebbero','starnazzerò','starnazzò','starnutì','starnutirà','starnutirò','starò','stazzerà','stazzerò','stazzò','stendendole','stendendone','stenderà','stenderne','stenograferà','stenograferebbero','stenograferò','stenografò','stenterà','stenterò','stentò','sterilizzò','sterminerà','sterminerò','sterminò','sterzerà','sterzerò','sterzò','stia','stilizzerà','stilizzerò','stilizzò','stillerà','stillerò','stillò','stimerà','stimerò','stimò','stimolerà','stimolò','stipulerà','stipulerò','stipulò','stiracchiò','stirerà','stirò','stiverà','stiverò','stivò','Stokes','stomacherà','stomacherò','stomacò','stonerà','stonerò','stonò','storcendolo','stordì','stordirà','stordirò','stormì','stormirà','stormirò','stornarlo','stornerà','stornò','storpierà','storpiò','straboccherà','straboccherebbero','straboccherò','straboccò','straccerà','straccerò','stracciò','stradelle','stralcerà','stralcerò','stralciò','stramazzerà','stramazzerebbero','stramazzerò','stramazzò','strangolerà','strangolerò','stranierà','stranierò','straniò','strapazzerà','strapazzerò','strapazzò','strapperà','strapperò','strappò','strariperà','strariperò','straripò','strascicandolo','strascicherà','strascicherò','strascicò','strascinarla','strascinarli','strascinarlo','strascinerebbero','strascinò','stratificherà','stratificheremmo','stratifichereste','stratificheresti','stratificherò','stratificò','straziarli','strazierà','strazierò','straziò','stremerà','stremerò','stremò','strepiterà','strepiterò','strepitò','strettissime','stridé','striderà','striglierà','striglierò','strigliò','strillerà','strillerò','strillò','strimpellerà','strimpellerebbero','strimpellerò','strimpellò','stringergli','striscerà','striscerò','strisciò','stritolerà','stritolerò','stritolò','strizzarli','strizzerà','strizzerò','strizzò','strombazzerà','strombazzerò','strombazzò','stroncherò','stroncò','stropiccerà','stropiccerò','stropicciò','strozzò','strumenterà','strumenterebbero','strumentò','strutturerà','strutturerò','strutturò','stuccherà','stuccherò','stuccò','studiala','studiarne','studierà','studierò','stupì','stupidissimi','stupirà','stupirò','sturerà','sturerò','sturò','stuzzicarlo','stuzzicherà','stuzzicherò','stuzzicò','subaffitterà','subaffitterò','subaffittò','subentrerà','subentrerò','subordinerà','subordinerebbero','subordinerò','subordinò','suc','succedé','succhiargli','suda','suderà','suderò','sudi','sudo','sudò','suf','suffragherà','suffragherò','suffragò','sug','suggellerà','suggellò','suggerirà','suggerirò','suggestionassero','suggestionassimo','suggestionerà','suggestioneranno','suggestionerebbe','suggestionerebbero','suggestioneremmo','suggestionereste','suggestioneresti','suggestionerò','suggestionò','sugo','suh','sull','sun','suoi','suol','suon','suonerò','sup','supererà','supplicherà','supplicherebbero','supplicò','supporterà','suppurerà','suppurerò','suppurò','suq','sur','surriscaldassimo','surriscalderà','surriscalderemmo','surriscaldereste','surriscalderesti','surriscalderò','surriscaldò','surrogherà','surrogherò','surrogò','sus','susciterà','susciterò','susseguì','susseguirà','susseguirò','sussisté','sussisterà','sussulterà','sussulterò','sussultò','sussurrerà','sussurrerò','sussurrò','sut','suv','suz','svagherà','svagherò','svagò','svaligerà','svaligiò','svaluterà','svaluterò','svalutò','svanì','svanirà','svanirò','svaporerà','svaporerò','svaporò','svegliarla','sveglierà','sveglierò','svegliò','svendersi','sventolerà','sventolerò','sventolò','svergognandola','svergognarla','svergognerà','svergognerebbero','svergognerò','svergognò','svernerà','svernerò','svernò','svestì','svestirà','svestirò','svi','svia','svierà','svierò','svignò','svilupperà','svilupperò','svincolerà','svincolerò','svincolò','svio','sviò','sviscererà','sviscererò','sviscerò','sviserà','sviserò','svisò','sviterà','sviterò','svitò','svizzera','svolazzerà','svolazzerò','svolazzò','svolterà','svoltò','svuoterà','svuoterò','svuotò','ta','tab','tac','taccerà','taccerò','tacciò','tace','tacerà','tacerò','taci','tad','taf','tagliandoli','tagliarla','taglierà','tagliò','tagliuzzerà','tagliuzzerebbero','tagliuzzerò','tagliuzzò','tah','Taizé','tale','tali','talmenteché','tamponerà','tamponerò','tamponò','tan','tana','tane','tant','tantalo','tantaltre','tantaltri','tapinò','tapperà','tapperò','tappezzerà','tappezzerò','tappezzò','tappò','taq','tar','tara','tarderà','tarderò','tardò','tare','tarperà','tarperò','tarpò','tartaglierà','tartaglierò','tartagliò','tartasserà','tartasserò','tartassò','tas','tasserà','tasserò','tassò','tastarlo','tasterà','tastò','tat','tatuerà','tatuerò','tatuò','tav','taz','teb','tec','tedi','tediarla','tedierà','tedierò','tediò','tef','teg','teh','tela','tele','telefonerà','telefonerò','telefonò','telegraferà','telegraferò','telegrafò','teli','telo','tem','tema','teme','temé','temerà','temerò','temi','temo','tempererà','tempererò','temperò','temporeggerà','temporeggiò','temprerà','temprerò','temprò','tenderà','tenerceli','teneteli','tentennerà','tentennerò','tentennò','tenterò','tenutogli','tep','teq','ter','tergiverserà','tergiverserebbero','tergiverserò','tergiversò','terminarle','terminerà','terminerò','terrificherà','terrificherebbero','terrificherò','terrificò','terrorizzerà','terrorizzerò','terrorizzò','tes','tesa','tese','tesi','teso','tessé','tesserà','tessererà','tessererò','tesserò','testarlo','tet','tev','TeX','tez','tib','tid','tif','tifo','tig','tih','til','tim','timbrerà','timbrerò','timbrò','tin','tini','tino','tintinnerà','tintinnerò','tintinnò','tipa','tipe','tipi','tipo','tipograficamente','tiq','tir','tira','tirerà','tirerò','tiri','tiro','tirò','Tirrenia','tis','tit','Tito','titolerà','titolerò','titolò','tituberà','tituberò','titubò','tiv','tiz','tizi','tla','tle','tli','tlo','tlu','to','tob','toccargli','toccherò','tod','tof','tog','toga','togliendoli','toglierà','toh','tol','tollerarle','tollerarli','tollererà','tollererò','tollerò','tom','toni','tono','topi','topo','toq','tori','tormenterà','tormenterò','tormentò','tornandoci','tornandole','tornandomi','tornarcene','tornarci','tornì','tornirà','tornirò','toro','torrefarà','torreggerà','torreggiò','torturarlo','torturerà','torturerò','torturò','tos','tosa','toserà','tosi','toso','tosò','tossì','tossirà','tossirò','tosterà','tosterò','tostò','totalizzò','tov','toz','traballerà','traballerò','traballò','traboccherà','traboccherò','traboccò','tracannerà','tracannerò','tracannò','traccerà','traccerò','tracciò','tracollerà','tracollerò','tracollò','tradì','tradirà','tradirò','trae','trafficherà','trafficherò','trafficò','traforerà','traforerò','traforò','trafugherà','trafugò','traghetterà','traghetterò','traghettò','trai','trainerà','trainò','tralascerà','tralascerò','tralasciò','tralignerà','tralignerò','tralignò','tramanderà','tramanderò','tramandò','tramerà','tramerò','tramezzerà','tramezzerò','tramezzò','tramò','tramonterà','tramonterò','tramontò','tramortì','tramortirà','tramortirò','tramuterà','tramuterò','tramutò','trancerà','trancerò','tranciò','trangugiandolo','transiterà','transiterò','transitò','trapanerà','trapanerò','trapanò','trapasserà','trapasserò','trapassò','trapelerà','trapelerò','trapelò','trapianterà','trapianterò','trapiantò','trarle','trasalì','trasalirà','trasborderà','trasborderò','trasbordò','trascinerà','trascinerò','trascinò','trascriverò','trascurerà','trascurerò','trascurò','trasecolerà','trasecolerò','trasecolò','trasferirò','trasformerò','traslerà','traslò','trasmetterla','trasmigrerà','trasmuterà','trasmutò','trasognerà','trasognerò','trasognò','trasparì','trasparirà','traspirerà','traspirerò','traspirò','trasporterà','trasporterò','trasportò','trastullerà','trastullerò','trastullò','trasuderà','trasuderò','trasudò','trasumanammo','trasumanante','trasumanassi','trasumanassimo','trasumanaste','trasumanasti','trasumanava','trasumanavamo','trasumanavano','trasumanavate','trasumanavi','trasumanavo','trasumanerà','trasumanerai','trasumaneranno','trasumanerebbe','trasumanerebbero','trasumanerei','trasumaneremmo','trasumaneremo','trasumanereste','trasumaneresti','trasumanerete','trasumanerò','trasumaniamo','trasumanò','trasvolerà','trasvolerò','trasvolò','trattargli','trattenerne','travasarla','travaserà','travaserò','travasò','travestì','travestirà','travestirò','travierà','travierò','traviò','travisarlo','traviserà','traviserò','travisò','trebbierà','trebbierò','trebbiò','tremerà','tremerò','tremò','trentanni','trepiderà','trepiderò','trepidò','tri','tribolerà','tribolerò','tribolò','tributerà','tributò','trillerà','trillerò','trillò','trionferà','trionferò','trionfò','tripudierà','tripudierò','tripudiò','triterà','triterò','tritò','triturerà','triturerò','triturò','trivellerà','trivellerò','trivellò','tro','tromberà','tromberò','trombò','troncherà','troncherò','troncò','trotterà','trotterò','trottò','trovandogli','tru','truccherà','truccherò','truccò','truciderà','truciderò','trucidò','trufferà','trufferò','truffò','tub','tuba','tuberà','tuberò','tubi','tubo','tubò','tuc','tud','tuf','tufferò','tuffò','tug','tuh','tul','tum','tun','tuoi','tuonerà','tuonerò','tuonò','tup','tuq','tur','tura','turbarne','turberà','turberò','turbinerà','turbinerò','turbinò','turbò','turerà','turerò','turi','turo','turò','tus','tut','tutelerà','tutelerò','tutelò','tutt','tuttaltra','tuttaltro','tuttattorno','tuttintorno','tuttoggi','tuttun','tuttuna','tuttuno','tuv','tuz','ua','ub','Ubaldo','ubbidì','ubbidirli','ubriacherà','ubriacò','uc','ucciderà','ud','udii','udirà','udirle','ue','uf','ufficerà','ufficiò','ufo','ug','uggiolerà','uggiolò','uguaglierà','uguagliò','Uguccione','ui','ul','Ulisse','ultimerà','ultimerò','ultimò','ululerà','ululò','um','umilierà','umiliò','unendoli','unge','ungi','ungo','unificherà','unificò','uniformerà','uniformerò','uniformò','unii','unione','unirli','università','unix','unni','unsi','unta','unte','unti','unto','uo','uopo','uova','uovo','uq','urbe','urgentissimi','urla','urlerà','urli','urlo','urlò','urna','urne','urta','urtarla','urtarli','urtarlo','urterà','urti','urtò','us','usa','usai','usali','usandoli','usandolo','usarle','usarne','usci','uscì','uscirò','Usenet','userò','ustionerà','ustionò','usufruì','usurperà','usurpò','ut','utilizzandola','utilizzerà','utilizzerò','uu','uv','uz','vab','vac','vacci','vaccinerà','vaccinerò','vaccinò','vacillerà','vacillerò','vacillò','vad','vada','vado','vaf','vag','vaga','vagabonderà','vagabonderebbero','vagabonderò','vagabondò','vagheggiò','vagherà','vagherò','vagì','vaglierà','vaglierò','vagliò','vago','vagò','vah','vale','vali','valicherà','valicherò','valicò','valorizzarla','valutandole','valutarne','valuterò','valutò','vam','vana','vane','vaneggerà','vaneggiò','vangherà','vangò','vani','vano','vantandone','vanterà','vanterò','vantò','vap','vaq','vara','varcarlo','varerà','varerò','vari','variandosi','varierà','variò','varo','varò','vasi','vaso','vat','vati','vav','vaz','veb','vec','vece','veci','veda','vede','vedendogli','vedendoli','vedermelo','vedersela','vedersene','vedi','vedo','vef','veg','vegeterà','vegeterò','vegetò','veglierà','veglierò','vegliò','veh','vel','vela','vele','velerà','velerò','veli','velo','velò','vem','ven','vena','vendé','venderà','venderla','venderli','venderlo','venderò','vene','venendogli','venerarli','venere','venererà','venererò','venerò','venirgli','venirle','venirlo','venirne','venirti','ventanni','Venturina','Venturini','vep','veq','ver','vera','vere','vergognerà','vergognò','veri','verificarlo','verificherà','verificherebbero','verificherò','vernicerà','verniciò','vero','versarle','versarli','versarne','verserà','verserò','versò','verterà','ves','vesserà','vesserò','vessò','vestendolo','vestì','vestitosi','vet','veti','veto','vettorini','vev','vez','vezzeggerà','vezzeggiarli','vezzeggiò','vi','viaggerà','vib','vibrerà','vibrerò','vibrò','vicinissimi','vid','vide','vidi','vidimerà','vidimerò','vidimò','vien','viepiù','vietandogli','vieterà','vieterò','vietò','vif','vig','vigilerò','vigilò','vih','vil','vile','vili','vilissime','villeggerà','villeggerò','villeggiò','vim','vincerle','vincerò','vini','vino','violentarlo','violentissimi','violerà','violerò','violò','vip','viq','vir','vira','virerà','virerò','viri','viro','virò','visi','visionatele','visitarla','visitarli','visitarlo','visiterò','viso','visterà','visterò','vistò','visualizzarlo','visualizzerebbero','visualizzerò','visualizzò','vit','vita','vite','viti','Vito','vitupererà','vitupererò','vituperò','viv','viva','vivacchierebbero','vive','viverli','vivi','vivo','viz','vizi','vizierà','vizierò','viziò','vla','vle','vli','vlo','vlu','vob','voc','voce','voci','vod','vof','vog','voga','vogherà','vogherò','vogo','vogò','voh','vola','volendola','volendole','volendolo','volendosi','volerà','volergliene','volerla','volerle','volgendomi','volgerà','voli','volo','volò','volterà','volterò','voltò','vom','vop','voq','vor','vos','vostraltezza','vot','vota','votandolo','votarlo','voterà','voti','voto','votò','vov','voz','vra','vre','vri','vro','vru','vub','vuc','vud','vuf','vug','vuh','vul','vum','vun','vuoi','vuol','vuoterà','vuoterò','vuotò','vup','vuq','vur','vus','vut','vuv','vuz','Windows','za','zab','zac','zad','zaf','zah','zal','zam','zan','zap','zapperà','zapperò','zappò','zaq','Zarlino','zas','zat','zav','zaz','ze','zeb','zec','zed','zef','zeg','zeh','zel','zelo','zem','zep','zeq','zer','zeri','zero','zes','zet','zeta','zev','zez','zi','zib','zic','zid','zif','zih','zil','zim','zin','ziq','zir','zis','zit','ziv','ziz','zla','zle','zli','zlo','zlu','zo','zob','zoc','zod','zof','zog','zoh','zol','zom','zon','zona','zone','zop','zoppicherà','zoppicherò','zoppicò','zoq','zor','zos','zot','zov','zoz','zra','zre','zri','zro','zru','zu','zub','zuc','zucchererà','zucchererò','zuccherò','zud','zuf','zufolerà','zufolerò','zufolò','zug','zuh','zul','zum','zun','zup','zuq','zur','zus','zut','zuv','zuz'"; - final String jiWords = "'אראפ,','וואס,'"; - final String nlWords = "'''s-Graveland','''s-Gravendeel','''s-Gravenhaags','''s-Gravenhage','''s-Gravenhagenaar','''s-Gravenmoer','''s-Gravenzande','''s-Gravenzander','''s-Gravenzands','''s-Hertogenbosch','''t','A.D.','az.','chin.','d.v.','h.k.h.','h.m.','l.b.','mgr.','n.b.','n.h.','n.n.','n.o.','n.v.','n.w.','ned.','o.l.v.','openoffice.org','r.i.p.','st.-eustatius','st.-maarten','stct.','w.','w.v.str.','z.h.','z.k.h.','a.d.h.v.','a.g.v.','a.h.w.','a.j.b.','a.m.','a.s.','a.u.b.','aanw.','afb.','afd.','afz.','an.','arr.','b.d.','b.g.g.','b.v.d.','bc.','bett.','bijl.','bijv.','blz.','bv.','bw.','c.q.','c.s.','ca.','d.d.','d.i.','d.m.v.','d.w.z.','dd.','dhr.','div.','dr.','dra.','drs.','drs.-titel','ds.','e.a.','e.d.','e.e.a.','e.o.','e.v.','e.v.a.','enz.','etc.','evt.','excl.','fa.','fam.','fig.','fr.','g.g.d.','geb.','gem.','get.','i.c.','i.c.m.','i.e.','i.h.a.','i.h.b.','i.m.','i.o.','i.o.v.','i.p.v.','i.s.m.','i.t.t.','i.v.m.','i.z.g.st.','incl.','ing.','ir.','jhr.','jkvr.','jl.','jr.','k.k.','lic.','m.','m.a.w.','m.b.t.','m.b.v.','m.i.','m.i.v.','m.m.','m.m.v.','m.n.','m.u.v.','max.','mevr.','min.','mld.','mln.','mr.','mw.','n.a.v.','n.o.t.k.','n.v.t.','nl.','nl.openoffice.org','no.','nr.','nrs.','o.a.','o.b.v.','o.i.','o.i.d.','o.m.','o.t.t.','o.v.t.','o.v.v.','ong.','p.','p.a.','p.m.','p.o.','p.p.','p.w.','pag.','plm.','plv.','prof.','q.e.d.','q.q.','r.-k.','red.','resp.','s.j.','s.v.p.','sr.','t.a.v.','t.b.v.','t.g.v.','t.h.t.','t.h.v.','t.n.v.','t.o.v.','t.w.','t.w.v.','t.z.t.','v.','v.chr.','v.d.','v.h.','v.l.n.r.','v.r.n.l.','v.t.t.','v.v.','v.v.t.','v.w.b.','verg.','vgl.','vnl.','vnw.','voorz.','vs.','w.o.','w.v.t.t.k.','ww.','z.g.','z.g.a.n.','z.i.','z.o.z.','z.s.m.','zgn.'"; - final String plWords = "'abchazji','achajowie','achemenidów','ackermanna','adamowski','adidas','adonisa','adria','afrodyta','afrodytę','afrodyty','afrykanerów','albertyna','albertynie','algierczyków','amerykanek','amfitriona','andaluzja','andaluzji','andrus','andrusa','antka','aparatownia','apollina','araki','ardeny','arystarch','arystarcha','arystotelesa','AS','asdic','atalia','ateneum','atlancie','atlanta','azjatów','babić','babiej','babin','babinie','babsk','babsku','babsztyl','bachorza','bachorze','baciki','baczka','bajda','bajer','bajor','bałaban','banacie','banialuka','barbarce','barbarka','bardy','bartnicki','barwik','baryła','baryłeczka','baskerville','bauer','bazyli','beatles','beatlesi','beatlesów','bednarek','bekiesz','bekiesza','belga','belgiem','belgów','belgowie','berda','berezie','bergmann','berkut','bermudów','bermudy','białoszewskiego','bielaw','bielawa','bielawie','bielica','bishopa','blachowni','blachownia','blanka','blicharz','bobru','bobrze','bocianicha','boćki','bogdanka','bojka','borek','borgiem','borki','borku','bostonie','bostonu','brachiosaurus','bratczyk','brechta','bretona','bronek','browning','browninga','brożek','brożyna','brudzeń','bryce','brzeszcze','brzezin','brzezince','brzezinka','brzeźniak','buczynka','bujaka','bukówka','burgunda','buton','bykowce','bystrzyca','bystrzycy','calvados','casanova','casco','celcie','centrolew','centrolewica','cerber','ceres','chałupek','chałupka','chałupki','chandra','charleston','chevrolet','chevroleta','chippendale','chmara','chmielnika','chochołów','cholewa','chrapek','chrapka','chrobrego','chrobry','chruściel','chrusty','chrystusowa','chrzciciel','chrzciciela','chrzcicielem','ciasnocha','cicero','ciemięga','cieplak','cierpisz','cisowa','clara','collectanea','comodo','company','cumberland','curie','cuscuta','ćwierk','ćwikła','cyców','cygany','cyr','cyrla','czadzie','czapliniec','czeremsze','czerkiesi','czerkiesów','czerniawa','czernin','czerninie','czerwionka','czopik','czuha','dąbek','dąbka','dąbki','dąbrówce','dąbrówkę','dąbrówki','dajna','danielem','danielowi','dawidowa','dawidowi','dębina','dębinie','dębinka','dębniak','dębnica','dębnik','dekameron','delft','demografia','derek','digitalis','dioskurów','długonogi','dłużyna','dolany','domin','domowina','donnie','dowcipna','dragan','duali','dukaj','dukli','dybów','dynamie','dziczej','dzieciątku','dziekanka','dziwisz','edenie','edenu','efraim','ermitażu','eskulap','eskulapa','expresie','fajfer','fałat','fałata','famie','fentona','fermat','fermata','fetta','fiata','fiatów','figaro','fikusa','filaret','filipie','filipin','filipina','filipinka','filipów','filipy','firka','fisza','flach','flacha','flamandowie','flisa','flisy','foksa','foksal','forda','fortranie','fortunat','fortunata','frankowie','frankowskiego','gable','gajda','galanta','gałeczki','gałuszka','garbarnią','garson','gaudeamus','germanów','gierka','gilbert','gilberta','gilów','gladiolus','gładysza','gładyszów','gliniak','głódź','głowaczów','gnata','gnaty','gniewoszów','gnojnik','goguś','gogusia','gołda','goleniowa','golgotą','golgotę','gołogóra','goplan','goplana','goplanie','góralczyk','gordon','gouda','goudzie','grabarka','grabin','grabina','grabinie','grabniak','graham','grahama','grandą','grochowa','grochowisk','grodziec','gromnicznej','gromnik','grosa','gruber','grubera','grzmiąca','grzmiącej','guignol','gumieniec','gwiżdż','hadesie','hakata','hakaty','halfa','halle','hamad','haras','hardy','harnasie','hassa','hawana','hawanie','helweci','helwetów','hemanta','henry','heraklit','herodowi','hesperornis','hester','hiacynta','hodża','holendry','horst','hożej','huculi','huntera','hydronimia','hyzia','iblis','iblisa','igławie','ikarus','ikarusy','interwizji','iskrze','izerskich','izraelita','jabłecznej','jabłonce','jabłonka','jabłonkach','jabłonkowa','jagielońskiego','jagnięcy','jakubówka','jałówce','janczarskiego','jarosz','jarosza','jaśka','jasła','jastruna','jastrząbka','jaszczów','jaworowa','jaworowej','jaworze','jedwabno','jeleniej','jenie','jersey','jeziorak','jezusowego','jodłowiec','jolka','jonatana','juana','juanie','juany','juchy','junga','jungiem','jungowie','jupiter','jupitera','kabul','kabulu','kadłubek','kadłubka','kaj','kajtek','kalamaria','kaleń','kaleta','kalinka','kalipso','kalmar','kalmarze','kałmuków','kałudze','kaługa','kamen','kamena','kamie','kamieńca','kamieniec','kanaryjskich','kańczugi','kandahar','kandaharu','kandaharze','kanty','kapsa','karasek','karczemka','karczmisko','kaszmirze','kątki','katon','kędzior','kędziora','kencie','kingiem','kingston','kingu','kirch','kleksa','klemencja','klepacz','klepaczka','kleparz','kleszczów','kłótnik','kłótnika','kluska','kobiałka','kobyłce','kobyli','kobyłka','kochera','kocin','kodak','kokosz','kokot','kolorado','kongo','koninie','koniuchy','kopanina','kopcie','koprowy','kor','kordowy','kordyliera','kornel','kornera','korsaka','korzonek','koszka','kotwicz','kowalczyk','kowar','kowary','kozera','kozeta','koziki','koziniec','kozub','kozuby','krąglaka','krakauer','krakus','krakusa','kraśnikiem','kratkowane','krecie','kreolów','krewie','krezusa','królikarni','królowo','krowiarek','krupka','kruszka','kruszyn','krynica','kryska','krzesanica','krzesanicy','krzewina','krzywousty','kucharczyk','kuchta','kugler','kulas','kulczyk','kulisz','kumów','kupczyk','kupczyka','kurierze','kurów','kurpiów','kurta','lambert','lamberta','lamia','lapunowa','łaskawej','laskonogi','łaszcz','łatana','łatanej','laudzie','laurencja','lazurowe','legionowo','lejba','lejowej','lekowo','lenka','leszczyńscy','lewiatan','lewka','liberia','liberii','ligocie','linowiec','linux','linuxa','lipce','lipek','lipina','lipka','lipna','liska','lisków','lisowski','litworowy','lniano','łomianek','łomianki','łopusze','loran','lorenc','lorenca','łosic','łososina','lotus','łowiec','łubiance','łubianka','lubień','ludoznawczego','ludwiki','łyczko','lynch','łysków','maceracie','mąciwoda','maczki','mader','maderze','madison','madisona','madonn','madonny','magdalence','magdalenka','majcher','maladze','malo','małolat','mamry','maniek','marcelina','marcinek','marla','marona','marsowym','martena','maryna','mateczny','matołka','maur','mazepa','mazepy','meksyk','meksykiem','mendla','mendy','mentonie','mercedes','mercedesie','messalina','messerschmitt','michałek','michałka','michałki','miedziance','międzygórza','międzygórze','międzylesie','międzynarodówce','mielnica','mielnik','mikołajki','milić','miłki','milordzie','minera','minorce','minorka','miranda','mirandzie','mirze','młodożeniec','młynarczyk','młyniec','mniszku','moczydło','modła','modrzewina','mogołowie','molik','molino','morka','morus','moskwicz','moskwicza','motycz','mrozek','mulda','muminków','nagłos','najświętszego','najświętszej','najświętszemu','nalepa','nalepą','nankin','nankinie','narwę','nautilus','nawarze','nędznicy','nędzników','neoplan','nieciecz','niecieczy','niepokalanego','niepokalanowa','niepokalanowie','niwka','notecka','nysie','obórki','obornikach','oborniki','ochockim','odessę','odessie','okonek','okraj','olchowa','olszówce','olszówka','omanie','opałka','oplem','orany','organika','orientalia','orlean','orlęta','osiek','osina','ossolińska','ostrobramska','ostrobramską','ostrowa','ostrówek','ostrowi','ostrowie','ostrówka','ostrówki','ostrówkiem','ostrzyca','owczych','ozorków','pacanów','pacek','paliwoda','palla','panek','panka','pantaleon','pantokrator','papowie','paprotnia','parabellum','paradyż','parker','paseo','pasynki','paszek','patok','patry','pawica','paździor','pekaes','peloponeski','pentagonie','pentium','pepita','pershing','pershinga','persie','perzyna','peszcie','peugeocie','peugeot','peugeota','peugeotem','piecuch','pieńki','pierzchała','pieskowa','pieskowej','pigmeje','pilawie','pilch','pilcha','piszcz','piszczek','piwowarczyk','płaczliwe','plater','platerówka','plejad','plewny','plichta','płomyczek','podleśny','podwale','pogorzelec','polesie','połom','południowochińskiego','pompadour','porąb','poraj','porfirogeneta','porozmawiaj','porozumiewawczy','porto','porzecze','pościsz','postscript','prądnik','prądnika','prusaków','przedświt','przenajświętszego','przenajświętszej','przyborze','przyboś','przydroże','przyjemniaczek','przylep','przytyku','ptaszyn','puchaczów','pukawka','pylenie','pyrek','quasimodo','racławicka','radiokomitetu','radlin','radlina','radlinie','raglan','rajsko','rajsku','rakowieckiej','rakuski','ramot','ramoty','raszce','rataje','reasumując','regon','rejowca','rejowcu','rejowiec','remington','remingtona','renault','renie','repasaże','richelieu','rohatyn','rohatynie','różance','roztoce','roztoczu','roztoka','roztoką','roztoki','rudawce','rudel','rutka','rutki','rydla','rydze','rydzyk','rydzyka','rykach','rytel','rytla','rzeczpospolita','sadek','sadki','sadku','sadowy','sadyba','sadybie','sadzik','sagan','sagana','samarytan','samarytanie','samozwańca','sanna','ściegiennego','secam','sędziwój','serdar','shoah','siadło','sidło','siemens','sierra','siklawa','silno','sinfonietta','sitek','sitki','siwek','skiba','skierki','skoda','skonto','skopie','skrze','skylab','ślipko','słomianka','smętka','śmigłego','smokowca','smoleń','smolenia','smolik','smreka','smyków','śniadka','śnieżce','sobek','sobka','sobków','sodalicja','solano','sosnowca','spencer','spencera','spisz','spójnia','sportsman','spytek','średniogórze','śródka','śródziemne','śródziemnego','śródziemnym','stadniki','staruch','sterlinga','stewie','stilon','stoczek','stoczka','stoczki','stoczkiem','stradivariusa','strasz','strużyna','strzyża','supełek','susie','sweeta','świątniki','świderek','świdnicy','świdrze','świerszczyk','świętochowski','świtały','sylwester','sylwestrowi','szajba','szczerbca','szczerbiec','szczęsny','szetlandy','szkodny','szuba','szuja','szwajcarów','szwajcarzy','tafta','talbot','tambor','targowica','tatary','technicolor','telegazeta','teneryfa','teogonia','texas','tilbury','tokarnią','tomahawk','tonkin','tonkinu','topólka','toponimia','toposie','trędowata','trepka','trompa','trwam','trybunalskim','trzaska','trzebień','trzeciaka','tucholskich','turkuci','tybecie','tyfon','tymianka','ulsteru','unita','uszatek','venta','victoria','volkswagen','volvo','waligóry','wandalów','wandalowie','warchoły','wargowo','weber','webera','węgierce','węgierka','wellington','wellingtona','wenta','werki','wężowiec','wicehrabiowie','wideoteka','widnokręgi','wietrzno','wilgą','wilia','willys','winchester','winduga','winkle','wniebowzięcia','wojaczek','wolak','wolina','wrzosowej','wyrobek','xenia','yardu','zadni','zadniej','zagaj','zagaje','żagary','zagość','zakarpacia','zakaukazia','zakaukaziu','żakowski','zakrzewie','zalesia','żarach','żarki','żarnówka','zatańcz','zawad','zdrowaś','zdrówko','zduny','zefir','zefira','żegota','żegoty','żelaźnie','żeleński','żeleźniak','zelówek','zeppelin','zeppelina','zielonce','złotowa','zmarzła','zmarzłego','żmigrodzka','żółkiewka','zrzesz','zuber','żuława','żuławskiego','żwirki','żydówek','żyronda','żytko','żywcu'"; - - try { - Language German = LanguageCollection.getByLocale(ctx, Locale.GERMAN.toString()); - assert German != null; - - Language English = LanguageCollection.getByLocale(ctx, Locale.ENGLISH.toString()); - assert English != null; - - Language French = LanguageCollection.getByLocale(ctx, Locale.FRENCH.toString()); - assert French != null; - - Language Italian = LanguageCollection.getByLocale(ctx, Locale.ITALIAN.toString()); - assert Italian != null; - - Language Yiddish = LanguageCollection.getByLocale(ctx, "ji_JI"); - assert Yiddish != null; - - Language Dutch = LanguageCollection.getByLocale(ctx, "nl_NL"); - assert Dutch != null; - - Language Polish = LanguageCollection.getByLocale(ctx, "pl_PL"); - assert Polish != null; - - - database.beginTransaction(); - database.execSQL(getTruncateBulgarianQuery()); - - database.execSQL(getDeleteWordsQuery(German.getId(), deWords)); - database.execSQL(getDeleteWordsQuery(English.getId(), enWords)); - database.execSQL(getDeleteWordsQuery(French.getId(), frWords)); - database.execSQL(getDeleteWordsQuery(Italian.getId(), itWords1)); - database.execSQL(getDeleteWordsQuery(Italian.getId(), itWords2)); - database.execSQL(getDeleteWordsQuery(Yiddish.getId(), jiWords)); - database.execSQL(getDeleteWordsQuery(Dutch.getId(), nlWords)); - database.execSQL(getDeleteWordsQuery(Polish.getId(), plWords)); - - database.execSQL(getDeleteSwordsQuery(English.getId())); - database.execSQL(getDeleteSwordsQuery(Dutch.getId())); - - database.setTransactionSuccessful(); - } catch (Exception e) { - Logger.e("Migrate to DB11", "Migration failed. " + e.getMessage()); - } finally { - database.endTransaction(); - } - } - }; - - private String getDeleteSwordsQuery(int langId) { - return "DELETE FROM words WHERE lang=" + langId + " AND word LIKE '%''s'"; - } - - private String getDeleteWordsQuery(int langId, String wordList) { - return "DELETE FROM words WHERE lang=" + langId + " AND word IN(" + wordList + ")"; - } - - private String getTruncateBulgarianQuery() { - Language Bulgarian = LanguageCollection.getByLocale(ctx, "bg_BG"); - assert Bulgarian != null; - return "DELETE FROM words WHERE lang=" + Bulgarian.getId(); - } -} diff --git a/src/io/github/sspanak/tt9/db/migrations/DB6.java b/src/io/github/sspanak/tt9/db/migrations/DB6.java deleted file mode 100644 index bbeadf968..000000000 --- a/src/io/github/sspanak/tt9/db/migrations/DB6.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.sspanak.tt9.db.migrations; - -import androidx.room.migration.Migration; -import androidx.sqlite.db.SupportSQLiteDatabase; - -public class DB6 { - public static final Migration MIGRATION = new Migration(5, 6) { - @Override - public void migrate(SupportSQLiteDatabase database) { - database.execSQL("DROP TRIGGER IF EXISTS normalize_freq"); - } - }; -} diff --git a/src/io/github/sspanak/tt9/db/migrations/DB7.java b/src/io/github/sspanak/tt9/db/migrations/DB7.java deleted file mode 100644 index c5b6cc0b0..000000000 --- a/src/io/github/sspanak/tt9/db/migrations/DB7.java +++ /dev/null @@ -1,90 +0,0 @@ -package io.github.sspanak.tt9.db.migrations; - -import android.content.Context; - -import androidx.annotation.NonNull; -import androidx.room.migration.Migration; -import androidx.sqlite.db.SupportSQLiteDatabase; - -import java.util.ArrayList; -import java.util.Locale; - -import io.github.sspanak.tt9.languages.Language; -import io.github.sspanak.tt9.languages.LanguageCollection; -import io.github.sspanak.tt9.preferences.SettingsStore; - -public class DB7 { - private Context ctx; - - public Migration getMigration(Context context) { - ctx = context; - return migration; - } - - private int getNewLanguageId(int oldId) { - Language language; - - switch (oldId) { - default: - return oldId; - case 1: - language = LanguageCollection.getByLocale(ctx, Locale.ENGLISH.toString()); - break; - case 2: - language = LanguageCollection.getByLocale(ctx, "ru_RU"); - break; - case 3: - language = LanguageCollection.getByLocale(ctx, Locale.GERMAN.toString()); - break; - case 4: - language = LanguageCollection.getByLocale(ctx, Locale.FRENCH.toString()); - break; - case 5: - language = LanguageCollection.getByLocale(ctx, Locale.ITALIAN.toString()); - break; - case 6: - language = LanguageCollection.getByLocale(ctx, "uk_UA"); - break; - case 7: - language = LanguageCollection.getByLocale(ctx, "bg_BG"); - break; - case 8: - language = LanguageCollection.getByLocale(ctx, "nl_NL"); - break; - case 9: - language = LanguageCollection.getByLocale(ctx, "es_ES"); - break; - } - - return language != null ? language.getId() : -1; - } - - private final Migration migration = new Migration(6, 7) { - private void migrateSQL(SupportSQLiteDatabase database) { - for (int oldLangId = 1; oldLangId <= 9; oldLangId++) { - database.execSQL( - "UPDATE words " + - " SET lang = " + getNewLanguageId(oldLangId) + - " WHERE lang = " + oldLangId - ); - } - } - - private void migrateSettings() { - SettingsStore settings = new SettingsStore(ctx); - - ArrayList newLangIds = new ArrayList<>(); - for (int langId : settings.getEnabledLanguageIds()) { - newLangIds.add(getNewLanguageId(langId)); - } - - settings.saveEnabledLanguageIds(newLangIds); - } - - @Override - public void migrate(@NonNull SupportSQLiteDatabase database) { - migrateSQL(database); - migrateSettings(); - } - }; -} diff --git a/src/io/github/sspanak/tt9/db/migrations/DB8.java b/src/io/github/sspanak/tt9/db/migrations/DB8.java deleted file mode 100644 index 12334ab9d..000000000 --- a/src/io/github/sspanak/tt9/db/migrations/DB8.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.github.sspanak.tt9.db.migrations; - -import androidx.annotation.NonNull; -import androidx.room.migration.Migration; -import androidx.sqlite.db.SupportSQLiteDatabase; - -import io.github.sspanak.tt9.Logger; -import io.github.sspanak.tt9.db.room.TT9Room; - -public class DB8 { - public static final Migration MIGRATION = new Migration(7, 8) { - @Override - public void migrate(@NonNull SupportSQLiteDatabase database) { - try { - database.beginTransaction(); - database.execSQL("ALTER TABLE words ADD COLUMN len INTEGER NOT NULL DEFAULT 0"); - database.execSQL("UPDATE words SET len = LENGTH(seq)"); - database.execSQL(TT9Room.createShortWordsIndexQuery().getSql()); - database.setTransactionSuccessful(); - } catch (Exception e) { - Logger.e("Migrate to DB8", "Migration failed. " + e.getMessage()); - } finally { - database.endTransaction(); - } - } - }; -} diff --git a/src/io/github/sspanak/tt9/db/migrations/DB9.java b/src/io/github/sspanak/tt9/db/migrations/DB9.java deleted file mode 100644 index 68675718d..000000000 --- a/src/io/github/sspanak/tt9/db/migrations/DB9.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.github.sspanak.tt9.db.migrations; - -import androidx.annotation.NonNull; -import androidx.room.migration.Migration; -import androidx.sqlite.db.SupportSQLiteDatabase; - -import io.github.sspanak.tt9.Logger; -import io.github.sspanak.tt9.db.room.TT9Room; -import io.github.sspanak.tt9.db.room.WordsDao; - -public class DB9 { - public static final Migration MIGRATION = new Migration(8, 9) { - @Override - public void migrate(@NonNull SupportSQLiteDatabase database) { - try { - database.beginTransaction(); - database.execSQL("DROP INDEX " + WordsDao.indexLongWords); - database.execSQL(TT9Room.createLongWordsIndexQuery().getSql()); - database.setTransactionSuccessful(); - } catch (Exception e) { - Logger.e("Migrate to DB9", "Migration failed. " + e.getMessage()); - } finally { - database.endTransaction(); - } - } - }; -} diff --git a/src/io/github/sspanak/tt9/db/objectbox/Word.java b/src/io/github/sspanak/tt9/db/objectbox/Word.java new file mode 100644 index 000000000..4eae3de1a --- /dev/null +++ b/src/io/github/sspanak/tt9/db/objectbox/Word.java @@ -0,0 +1,48 @@ +package io.github.sspanak.tt9.db.objectbox; + +import androidx.annotation.NonNull; + +import io.github.sspanak.tt9.languages.InvalidLanguageCharactersException; +import io.github.sspanak.tt9.languages.Language; +import io.objectbox.annotation.ConflictStrategy; +import io.objectbox.annotation.Entity; +import io.objectbox.annotation.Id; +import io.objectbox.annotation.Index; +import io.objectbox.annotation.Unique; + +@Entity +public class Word { + @Id public long id; + public int frequency; + public boolean isCustom; + public int langId; + public int length; + @Index public String sequence; + @Index public byte sequenceShort; // up to 2 digits + @Unique(onConflict = ConflictStrategy.REPLACE) public String uniqueId; + public String word; + + public static Word create(@NonNull Language language, @NonNull String word, int frequency) throws InvalidLanguageCharactersException { + Word w = new Word(); + w.frequency = frequency; + w.isCustom = false; + w.langId = language.getId(); + w.length = word.length(); + w.sequence = language.getDigitSequenceForWord(word); + w.sequenceShort = shrinkSequence(w.sequence); + w.uniqueId = (language.getId() + "-" + word); + w.word = word; + + return w; + } + + public static Word create(@NonNull Language language, @NonNull String word, int frequency, boolean isCustom) throws InvalidLanguageCharactersException { + Word w = create(language, word, frequency); + w.isCustom = isCustom; + return w; + } + + public static Byte shrinkSequence(@NonNull String sequence) { + return Byte.parseByte(sequence.substring(0, Math.min(2, sequence.length()))); + } +} diff --git a/src/io/github/sspanak/tt9/db/room/WordList.java b/src/io/github/sspanak/tt9/db/objectbox/WordList.java similarity index 63% rename from src/io/github/sspanak/tt9/db/room/WordList.java rename to src/io/github/sspanak/tt9/db/objectbox/WordList.java index 397c75059..a1446a60e 100644 --- a/src/io/github/sspanak/tt9/db/room/WordList.java +++ b/src/io/github/sspanak/tt9/db/objectbox/WordList.java @@ -1,15 +1,22 @@ -package io.github.sspanak.tt9.db.room; +package io.github.sspanak.tt9.db.objectbox; import androidx.annotation.NonNull; import java.util.ArrayList; import java.util.List; + public class WordList extends ArrayList { - public WordList(List words) { + public WordList() { + super(); + } + + + public WordList(@NonNull List words) { addAll(words); } + @NonNull @Override public String toString() { @@ -26,6 +33,19 @@ public String toString() { return sb.toString(); } + + @NonNull + public WordList filter(int minLength, int minWords) { + WordList filtered = new WordList(); + for (int i = 0; i < size(); i++) { + if (get(i).length == minLength || filtered.size() < minWords) { + filtered.add(get(i)); + } + } + return filtered; + } + + @NonNull public ArrayList toStringList() { ArrayList strings = new ArrayList<>(); diff --git a/src/io/github/sspanak/tt9/db/objectbox/WordStore.java b/src/io/github/sspanak/tt9/db/objectbox/WordStore.java new file mode 100644 index 000000000..b27a1e7f9 --- /dev/null +++ b/src/io/github/sspanak/tt9/db/objectbox/WordStore.java @@ -0,0 +1,208 @@ +package io.github.sspanak.tt9.db.objectbox; + +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import io.github.sspanak.tt9.Logger; +import io.github.sspanak.tt9.languages.Language; +import io.objectbox.Box; +import io.objectbox.BoxStore; +import io.objectbox.config.DebugFlags; +import io.objectbox.query.Query; +import io.objectbox.query.QueryBuilder; +import io.objectbox.query.QueryCondition; + +public class WordStore { + private BoxStore boxStore; + private Box wordBox; + + private Query longWordQuery; + private Query singleLetterQuery; + + + public WordStore(Context context) { + init(context); + } + + + private void init(Context context) { + boxStore = MyObjectBox.builder() + .androidContext(context.getApplicationContext()) + .debugFlags(Logger.isDebugLevel() ? DebugFlags.LOG_QUERY_PARAMETERS : 0) + .build(); + + wordBox = boxStore.boxFor(Word.class); + + longWordQuery = getLongWordQuery(); + singleLetterQuery = getSingleLetterQuery(); + } + + + private Query getLongWordQuery() { + return boxStore.boxFor(Word.class) + .query() + .equal(Word_.langId, 0) + .startsWith(Word_.sequence, "", QueryBuilder.StringOrder.CASE_SENSITIVE).parameterAlias("seq_start") + .lessOrEqual(Word_.sequence, "", QueryBuilder.StringOrder.CASE_SENSITIVE).parameterAlias("seq_end") + .equal(Word_.sequenceShort, 0) + .startsWith(Word_.word, "", QueryBuilder.StringOrder.CASE_SENSITIVE) + .order(Word_.length) + .orderDesc(Word_.frequency) + .build(); + } + + private Query getSingleLetterQuery() { + return wordBox + .query() + .equal(Word_.langId, 0) + .equal(Word_.sequenceShort, 0) + .startsWith(Word_.word, "", QueryBuilder.StringOrder.CASE_SENSITIVE) + .orderDesc(Word_.frequency) + .build(); + } + + + public long count(int langId) { + try (Query query = wordBox.query(Word_.langId.equal(langId)).build()) { + return query.count(); + } catch (Exception e) { + return 0; + } + } + + + public boolean exists(int langId, @NonNull String word, @NonNull String sequence) { + return get(langId, word, sequence) != null; + } + + + @Nullable + public Word get(int langId, @NonNull String word, @NonNull String sequence) { + QueryCondition where = Word_.langId.equal(langId) + .and(Word_.sequenceShort.equal(Word.shrinkSequence(sequence))) + .and(Word_.word.equal(word, QueryBuilder.StringOrder.CASE_SENSITIVE)); + + try (Query query = wordBox.query(where).build()) { + return query.findFirst(); + } + } + + @Nullable + public List getMany(int langId) { + try (Query query = wordBox.query(Word_.langId.equal(langId)).build()) { + return query.find(); + } + } + + + @NonNull + public WordList getMany(Language language, @NonNull String sequence, @Nullable String filter, int maxWords) { + Query query; + if (sequence.length() < 2) { + singleLetterQuery.setParameter(Word_.sequenceShort, Byte.parseByte(sequence)); + query = singleLetterQuery; + } else { + longWordQuery.setParameter(Word_.sequenceShort, Word.shrinkSequence(sequence)); + longWordQuery.setParameter("seq_start", sequence); + longWordQuery.setParameter("seq_end", sequence + "99"); + query = longWordQuery; + } + + query.setParameter(Word_.langId, language.getId()); + + if (filter != null && !filter.equals("")) { + query.setParameter(Word_.word, filter); + } else { + query.setParameter(Word_.word, ""); + } + + return new WordList(query.find(0, maxWords)); + } + + + public int[] getLanguages() { + try (Query query = wordBox.query().build()) { + return query.property(Word_.langId).distinct().findInts(); + } + } + + + public int getMaxFrequency(int langId) { + return getMaxFrequency(langId, null, null); + } + + + public int getMaxFrequency(int langId, String sequence, String word) { + QueryCondition where = Word_.langId.equal(langId); + + if (sequence != null && word != null) { + where = where.and(Word_.sequenceShort.equal(Word.shrinkSequence(sequence))) + .and(Word_.sequence.equal(sequence)) + .and(Word_.word.notEqual(word)); + } + + try (Query query = wordBox.query(where).build()) { + long max = query.property(Word_.frequency).max(); + return max == Long.MIN_VALUE ? 0 : (int)max; + } + } + + + public void put(@NonNull List words) { + wordBox.put(words); + } + + + public void put(@NonNull Word word) { + wordBox.put(word); + } + + + public WordStore removeMany(@NonNull ArrayList languageIds) { + if (languageIds.size() > 0) { + try (Query query = wordBox.query(Word_.langId.oneOf(IntegerListToIntArray(languageIds))).build()) { + query.remove(); + } + } + + return this; + } + + + public void destroy() { + boxStore.closeThreadResources(); + boxStore.close(); + boxStore.deleteAllFiles(); + } + + + public void runInTransaction(Runnable r) { + boxStore.runInTx(r); + } + + + public void runInTransactionAsync(Runnable action) { + boxStore.runInTxAsync(action, null); + } + + + public void closeThreadResources() { + boxStore.closeThreadResources(); + } + + + private int[] IntegerListToIntArray(ArrayList in) { + int[] out = new int[in.size()]; + Iterator iterator = in.iterator(); + for (int i = 0; i < out.length; i++) { + out[i] = iterator.next(); + } + return out; + } +} diff --git a/src/io/github/sspanak/tt9/db/room/TT9Room.java b/src/io/github/sspanak/tt9/db/room/TT9Room.java deleted file mode 100644 index e3a362120..000000000 --- a/src/io/github/sspanak/tt9/db/room/TT9Room.java +++ /dev/null @@ -1,63 +0,0 @@ -package io.github.sspanak.tt9.db.room; - -import android.content.Context; - -import androidx.room.Database; -import androidx.room.Room; -import androidx.room.RoomDatabase; -import androidx.sqlite.db.SimpleSQLiteQuery; - -import io.github.sspanak.tt9.db.migrations.DB10; -import io.github.sspanak.tt9.db.migrations.DB11; -import io.github.sspanak.tt9.db.migrations.DB6; -import io.github.sspanak.tt9.db.migrations.DB7; -import io.github.sspanak.tt9.db.migrations.DB8; -import io.github.sspanak.tt9.db.migrations.DB9; - -@Database(version = 11, entities = Word.class, exportSchema = false) -public abstract class TT9Room extends RoomDatabase { - public abstract WordsDao wordsDao(); - - public static synchronized TT9Room getInstance(Context context) { - return Room - .databaseBuilder(context, TT9Room.class, "t9dict.db") - .addMigrations( - DB6.MIGRATION, - new DB7().getMigration(context), - DB8.MIGRATION, - DB9.MIGRATION, - DB10.MIGRATION, - new DB11().getMigration(context) - ) - .build(); - } - - public static SimpleSQLiteQuery getFuzzyQuery(String index, int langId, int limit, String sequence, int minWordLength, int maxWordLength, String word) { - String sql = "SELECT *" + - " FROM words INDEXED BY " + index + " " + - " WHERE 1" + - " AND lang = " + langId + - " AND len BETWEEN " + minWordLength + " AND " + maxWordLength + - " AND seq > " + sequence + " AND seq <= " + sequence + "99 " + - " ORDER BY len ASC, freq DESC " + - " LIMIT " + limit; - - if (word != null) { - sql = sql.replace("WHERE 1", "WHERE 1 AND word LIKE '" + word.replace("'", "''") + "%'"); - } - - return new SimpleSQLiteQuery(sql); - } - - public static SimpleSQLiteQuery getFuzzyQuery(String index, int langId, int limit, String sequence, int minWordLength, int maxWordLength) { - return getFuzzyQuery(index, langId, limit, sequence, minWordLength, maxWordLength, null); - } - - public static SimpleSQLiteQuery createShortWordsIndexQuery() { - return new SimpleSQLiteQuery("CREATE INDEX IF NOT EXISTS " + WordsDao.indexShortWords + " ON words (lang ASC, len ASC, seq ASC)"); - } - - public static SimpleSQLiteQuery createLongWordsIndexQuery() { - return new SimpleSQLiteQuery("CREATE INDEX IF NOT EXISTS " + WordsDao.indexLongWords + " ON words (lang ASC, seq ASC, freq DESC)"); - } -} diff --git a/src/io/github/sspanak/tt9/db/room/Word.java b/src/io/github/sspanak/tt9/db/room/Word.java deleted file mode 100644 index 17ff2d830..000000000 --- a/src/io/github/sspanak/tt9/db/room/Word.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.github.sspanak.tt9.db.room; - -import androidx.room.ColumnInfo; -import androidx.room.Entity; -import androidx.room.Index; -import androidx.room.PrimaryKey; - -@Entity( - indices = { - @Index(value = {"lang", "word"}, unique = true), - @Index(value = {"lang", "seq", "freq"}, orders = {Index.Order.ASC, Index.Order.ASC, Index.Order.DESC}), - @Index(value = {"lang", "len", "seq"}, orders = {Index.Order.ASC, Index.Order.ASC, Index.Order.ASC}) - }, - tableName = "words" -) -public class Word { - @PrimaryKey(autoGenerate = true) - public int id; - - @ColumnInfo(name = "lang") - public int langId; - - public String word; - - @ColumnInfo(name = "seq") - public String sequence; - - @ColumnInfo(name = "freq") - public int frequency; - - @ColumnInfo(name = "len") - public int length; -} diff --git a/src/io/github/sspanak/tt9/db/room/WordsDao.java b/src/io/github/sspanak/tt9/db/room/WordsDao.java deleted file mode 100644 index 0083039ce..000000000 --- a/src/io/github/sspanak/tt9/db/room/WordsDao.java +++ /dev/null @@ -1,66 +0,0 @@ -package io.github.sspanak.tt9.db.room; - -import androidx.room.Dao; -import androidx.room.Insert; -import androidx.room.OnConflictStrategy; -import androidx.room.Query; -import androidx.room.RawQuery; -import androidx.sqlite.db.SimpleSQLiteQuery; - -import java.util.ArrayList; -import java.util.List; - -@Dao -public interface WordsDao { - String indexLongWords = "index_words_lang_seq_freq"; - String indexShortWords = "index_words_lang_len_seq"; - - @Query("SELECT COUNT(id) FROM words WHERE :langId < 0 OR lang = :langId") - int count(int langId); - - @Query("DELETE FROM words WHERE lang IN(:langIds)") - void deleteByLanguage(ArrayList langIds); - - @Query("SELECT COUNT(id) FROM words WHERE lang = :langId AND word LIKE :word") - int doesWordExist(int langId, String word); - - @Query( - "SELECT * " + - "FROM words " + - "WHERE " + - "lang = :langId " + - "AND seq = :sequence " + - "AND (:word IS NULL OR word LIKE :word || '%') " + - "ORDER BY freq DESC " + - "LIMIT :limit" - ) - List getMany(int langId, int limit, String sequence, String word); - - @RawQuery(observedEntities = Word.class) - List getCustom(SimpleSQLiteQuery query); - - @Insert - void insert(Word word); - - @Insert(onConflict = OnConflictStrategy.REPLACE) - void upsertMany(List words); - - @Query( - "UPDATE words " + - "SET freq = (SELECT IFNULL(MAX(freq), 0) FROM words WHERE lang = :langId AND seq = :sequence AND word <> :word) + 1 " + - "WHERE lang = :langId AND word = :word AND seq = :sequence" - ) - int incrementFrequency(int langId, String word, String sequence); - - @Query( - "UPDATE words " + - "SET freq = freq / :normalizationDivider " + - "WHERE lang IN ( " + - "SELECT lang " + - "FROM words " + - "WHERE freq >= :maxFrequency " + - "GROUP BY lang" + - ")" - ) - int normalizeFrequencies(int normalizationDivider, int maxFrequency); -} diff --git a/src/io/github/sspanak/tt9/ime/TraditionalT9.java b/src/io/github/sspanak/tt9/ime/TraditionalT9.java index ec0147ee2..6f51e195a 100644 --- a/src/io/github/sspanak/tt9/ime/TraditionalT9.java +++ b/src/io/github/sspanak/tt9/ime/TraditionalT9.java @@ -355,7 +355,7 @@ public boolean onKeyAddWord(boolean validateOnly) { cancelAutoAccept(); clearSuggestions(); - String word = textField.getSurroundingWord(); + String word = textField.getSurroundingWord(mLanguage); if (word.isEmpty()) { UI.toastLong(this, R.string.add_word_no_selection); } else { diff --git a/src/io/github/sspanak/tt9/ime/helpers/TextField.java b/src/io/github/sspanak/tt9/ime/helpers/TextField.java index 104180aac..6ea89a7fb 100644 --- a/src/io/github/sspanak/tt9/ime/helpers/TextField.java +++ b/src/io/github/sspanak/tt9/ime/helpers/TextField.java @@ -18,12 +18,16 @@ import io.github.sspanak.tt9.Logger; import io.github.sspanak.tt9.ime.modes.InputMode; +import io.github.sspanak.tt9.languages.Language; public class TextField { public static final int IME_ACTION_ENTER = EditorInfo.IME_MASK_ACTION + 1; private static final Pattern beforeCursorWordRegex = Pattern.compile("(\\w+)(?!\n)$"); private static final Pattern afterCursorWordRegex = Pattern.compile("^(? letters = getKeyCharacters(4, false); + return letters.contains("ї"); + } + /* ************ utility ************ */ /** diff --git a/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java b/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java index d90f7250c..3b7121229 100644 --- a/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java +++ b/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java @@ -17,6 +17,7 @@ import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.DictionaryDb; import io.github.sspanak.tt9.db.DictionaryLoader; +import io.github.sspanak.tt9.db.SQLWords; import io.github.sspanak.tt9.ime.helpers.GlobalKeyboardSettings; import io.github.sspanak.tt9.ime.helpers.InputModeValidator; import io.github.sspanak.tt9.preferences.helpers.Hotkeys; @@ -41,6 +42,7 @@ protected void onCreate(Bundle savedInstanceState) { applyTheme(); Logger.enableDebugLevel(settings.getDebugLogsEnabled()); + new SQLWords(this).clear(); DictionaryDb.init(this); DictionaryDb.normalizeWordFrequencies(settings); diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemClickable.java b/src/io/github/sspanak/tt9/preferences/items/ItemClickable.java index 96c244c92..c1788cb19 100644 --- a/src/io/github/sspanak/tt9/preferences/items/ItemClickable.java +++ b/src/io/github/sspanak/tt9/preferences/items/ItemClickable.java @@ -2,16 +2,20 @@ import androidx.preference.Preference; +import java.util.ArrayList; +import java.util.List; + import io.github.sspanak.tt9.Logger; -abstract class ItemClickable { - protected final int CLICK_DEBOUNCE_TIME = 250; +abstract public class ItemClickable { + private final int CLICK_DEBOUNCE_TIME = 250; private long lastClickTime = 0; protected final Preference item; + private final ArrayList otherItems = new ArrayList<>(); - ItemClickable(Preference item) { + public ItemClickable(Preference item) { this.item = item; } @@ -31,6 +35,29 @@ public void enableClickHandler() { } + public ItemClickable setOtherItems(List others) { + otherItems.clear(); + otherItems.addAll(others); + return this; + } + + + protected void disableOtherItems() { + for (ItemClickable i : otherItems) { + i.disable(); + } + + } + + + protected void enableOtherItems() { + for (ItemClickable i : otherItems) { + i.enable(); + } + + } + + /** * debounceClick * Protection against faulty devices, that sometimes send two (or more) click events diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemLoadDictionary.java b/src/io/github/sspanak/tt9/preferences/items/ItemLoadDictionary.java index 7f89a8814..c24e71c0f 100644 --- a/src/io/github/sspanak/tt9/preferences/items/ItemLoadDictionary.java +++ b/src/io/github/sspanak/tt9/preferences/items/ItemLoadDictionary.java @@ -35,11 +35,15 @@ public ItemLoadDictionary(Preference item, Context context, SettingsStore settin this.settings = settings; loader.setOnStatusChange(this::onLoadingStatusChange); + refreshStatus(); + } + - if (!progressBar.isCompleted() && !progressBar.isFailed()) { - changeToCancelButton(); + public void refreshStatus() { + if (loader.isRunning()) { + setLoadingStatus(); } else { - changeToLoadButton(); + setReadyStatus(); } } @@ -49,12 +53,12 @@ private void onLoadingStatusChange(Bundle status) { item.setSummary(progressBar.getTitle() + " " + progressBar.getMessage()); if (progressBar.isCancelled()) { - changeToLoadButton(); + setReadyStatus(); } else if (progressBar.isFailed()) { - changeToLoadButton(); + setReadyStatus(); UI.toastFromAsync(context, progressBar.getMessage()); } else if (progressBar.isCompleted()) { - changeToLoadButton(); + setReadyStatus(); UI.toastFromAsync(context, R.string.dictionary_loaded); } } @@ -65,23 +69,25 @@ protected boolean onClick(Preference p) { ArrayList languages = LanguageCollection.getAll(context, settings.getEnabledLanguageIds()); try { + setLoadingStatus(); loader.load(languages); - changeToCancelButton(); } catch (DictionaryImportAlreadyRunningException e) { loader.stop(); - changeToLoadButton(); + setReadyStatus(); } return true; } - public void changeToCancelButton() { + private void setLoadingStatus() { + disableOtherItems(); item.setTitle(context.getString(R.string.dictionary_cancel_load)); } - public void changeToLoadButton() { + private void setReadyStatus() { + enableOtherItems(); item.setTitle(context.getString(R.string.dictionary_load_title)); item.setSummary(progressBar.isFailed() || progressBar.isCancelled() ? progressBar.getMessage() : ""); } diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java b/src/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java index c8a14e202..e35fdf886 100644 --- a/src/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java +++ b/src/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java @@ -14,42 +14,30 @@ public class ItemTruncateAll extends ItemClickable { protected final PreferencesActivity activity; protected final DictionaryLoader loader; - protected final ItemLoadDictionary loadItem; - protected ItemClickable otherTruncateItem; - public ItemTruncateAll(Preference item, ItemLoadDictionary loadItem, PreferencesActivity activity, DictionaryLoader loader) { + + public ItemTruncateAll(Preference item, PreferencesActivity activity, DictionaryLoader loader) { super(item); this.activity = activity; - this.loadItem = loadItem; this.loader = loader; } - public ItemTruncateAll setOtherTruncateItem(ItemTruncateUnselected item) { - this.otherTruncateItem = item; - return this; - } - - @Override protected boolean onClick(Preference p) { if (loader != null && loader.isRunning()) { - loader.stop(); - loadItem.changeToLoadButton(); + return false; } onStartDeleting(); - DictionaryDb.deleteWords(this::onFinishDeleting); + DictionaryDb.deleteWords(activity.getApplicationContext(), this::onFinishDeleting); return true; } protected void onStartDeleting() { - if (otherTruncateItem != null) { - otherTruncateItem.disable(); - } - loadItem.disable(); + disableOtherItems(); disable(); item.setSummary(R.string.dictionary_truncating); } @@ -57,10 +45,7 @@ protected void onStartDeleting() { protected void onFinishDeleting() { activity.runOnUiThread(() -> { - if (otherTruncateItem != null) { - otherTruncateItem.enable(); - } - loadItem.enable(); + enableOtherItems(); item.setSummary(""); enable(); UI.toastFromAsync(activity, R.string.dictionary_truncated); diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java b/src/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java index 366333a9d..86787aada 100644 --- a/src/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java +++ b/src/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java @@ -18,23 +18,17 @@ public class ItemTruncateUnselected extends ItemTruncateAll { private final SettingsStore settings; - public ItemTruncateUnselected(Preference item, ItemLoadDictionary loadItem, PreferencesActivity context, SettingsStore settings, DictionaryLoader loader) { - super(item, loadItem, context, loader); + public ItemTruncateUnselected(Preference item, PreferencesActivity context, SettingsStore settings, DictionaryLoader loader) { + super(item, context, loader); this.settings = settings; } - public ItemTruncateUnselected setOtherTruncateItem(ItemTruncateAll otherTruncateItem) { - this.otherTruncateItem = otherTruncateItem; - return this; - } - @Override protected boolean onClick(Preference p) { if (loader != null && loader.isRunning()) { - loader.stop(); - loadItem.changeToLoadButton(); + return false; } ArrayList unselectedLanguageIds = new ArrayList<>(); diff --git a/src/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java b/src/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java index a174d47ae..217d5c53c 100644 --- a/src/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java +++ b/src/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java @@ -1,5 +1,7 @@ package io.github.sspanak.tt9.preferences.screens; +import java.util.Arrays; + import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.preferences.PreferencesActivity; import io.github.sspanak.tt9.preferences.items.ItemLoadDictionary; @@ -8,6 +10,10 @@ import io.github.sspanak.tt9.preferences.items.ItemTruncateUnselected; public class DictionariesScreen extends BaseScreenFragment { + private ItemLoadDictionary loadItem; + private ItemTruncateUnselected deleteItem; + private ItemTruncateAll truncateItem; + public DictionariesScreen() { init(); } public DictionariesScreen(PreferencesActivity activity) { init(activity); } @@ -23,31 +29,35 @@ protected void onCreate() { ); multiSelect.populate().enableValidation(); - ItemLoadDictionary loadItem = new ItemLoadDictionary( + loadItem = new ItemLoadDictionary( findPreference(ItemLoadDictionary.NAME), activity, activity.settings, activity.getDictionaryLoader(), activity.getDictionaryProgressBar() ); - loadItem.enableClickHandler(); - ItemTruncateAll truncateItem = new ItemTruncateAll( - findPreference(ItemTruncateAll.NAME), - loadItem, + deleteItem = new ItemTruncateUnselected( + findPreference(ItemTruncateUnselected.NAME), activity, + activity.settings, activity.getDictionaryLoader() ); - ItemTruncateUnselected truncateSelectedItem = new ItemTruncateUnselected( - findPreference(ItemTruncateUnselected.NAME), - loadItem, + truncateItem = new ItemTruncateAll( + findPreference(ItemTruncateAll.NAME), activity, - activity.settings, activity.getDictionaryLoader() ); - truncateItem.setOtherTruncateItem(truncateSelectedItem).enableClickHandler(); - truncateSelectedItem.setOtherTruncateItem(truncateItem).enableClickHandler(); + loadItem.setOtherItems(Arrays.asList(truncateItem, deleteItem)).enableClickHandler(); + deleteItem.setOtherItems(Arrays.asList(truncateItem, loadItem)).enableClickHandler(); + truncateItem.setOtherItems(Arrays.asList(deleteItem, loadItem)).enableClickHandler(); + } + + @Override + public void onResume() { + super.onResume(); + loadItem.refreshStatus(); } } diff --git a/src/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java b/src/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java index 2fbec2247..09c392e6e 100644 --- a/src/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java +++ b/src/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java @@ -106,6 +106,7 @@ public String getMessage() { public void show(Context context, Bundle data) { String error = data.getString("error", null); int fileCount = data.getInt("fileCount", -1); + int progress = data.getInt("progress", -1); if (error != null) { hasFailed = true; @@ -116,10 +117,12 @@ public void show(Context context, Bundle data) { data.getLong("fileLine", -1), data.getString("word", "") ); - } else if (fileCount > -1) { - setFileCount(fileCount); - } else { + } else if (progress >= 0) { hasFailed = false; + if (fileCount >= 0) { + setFileCount(fileCount); + } + showProgress( context, data.getLong("time", 0), @@ -143,7 +146,7 @@ private String generateTitle(Context context, int languageId) { private void showProgress(Context context, long time, int currentFile, int currentFileProgress, int languageId) { - if (currentFileProgress < 0) { + if (currentFileProgress <= 0) { hide(); isStopped = true; title = "";