diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 65ce9320..b413fc3c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,7 +20,7 @@ repos: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - - id: check-added-large-files + # - id: check-added-large-files - repo: https://github.com/realm/SwiftLint rev: 0.62.2 diff --git a/Keyboards/Data/DELanguageData.sqlite b/Keyboards/Data/DELanguageData.sqlite new file mode 100644 index 00000000..7934ed73 Binary files /dev/null and b/Keyboards/Data/DELanguageData.sqlite differ diff --git a/Keyboards/Data/ENLanguageData.sqlite b/Keyboards/Data/ENLanguageData.sqlite new file mode 100644 index 00000000..fe268aa8 Binary files /dev/null and b/Keyboards/Data/ENLanguageData.sqlite differ diff --git a/Keyboards/Data/ESLanguageData.sqlite b/Keyboards/Data/ESLanguageData.sqlite new file mode 100644 index 00000000..81612e1e Binary files /dev/null and b/Keyboards/Data/ESLanguageData.sqlite differ diff --git a/Keyboards/Data/FRLanguageData.sqlite b/Keyboards/Data/FRLanguageData.sqlite new file mode 100644 index 00000000..31c11f31 Binary files /dev/null and b/Keyboards/Data/FRLanguageData.sqlite differ diff --git a/Keyboards/Data/ITLanguageData.sqlite b/Keyboards/Data/ITLanguageData.sqlite new file mode 100644 index 00000000..ca3f2832 Binary files /dev/null and b/Keyboards/Data/ITLanguageData.sqlite differ diff --git a/Keyboards/Data/PTLanguageData.sqlite b/Keyboards/Data/PTLanguageData.sqlite new file mode 100644 index 00000000..7e30543e Binary files /dev/null and b/Keyboards/Data/PTLanguageData.sqlite differ diff --git a/Keyboards/LanguageKeyboards/English/ENLanguageData.sqlite b/Keyboards/Data/RULanguageData.sqlite similarity index 50% rename from Keyboards/LanguageKeyboards/English/ENLanguageData.sqlite rename to Keyboards/Data/RULanguageData.sqlite index 769b84a7..6dffd162 100644 Binary files a/Keyboards/LanguageKeyboards/English/ENLanguageData.sqlite and b/Keyboards/Data/RULanguageData.sqlite differ diff --git a/Keyboards/Data/SVLanguageData.sqlite b/Keyboards/Data/SVLanguageData.sqlite new file mode 100644 index 00000000..393cce0b Binary files /dev/null and b/Keyboards/Data/SVLanguageData.sqlite differ diff --git a/Keyboards/LanguageKeyboards/TranslationData.sqlite b/Keyboards/Data/TranslationData.sqlite similarity index 99% rename from Keyboards/LanguageKeyboards/TranslationData.sqlite rename to Keyboards/Data/TranslationData.sqlite index 0f8c27d1..44fa6b7d 100644 Binary files a/Keyboards/LanguageKeyboards/TranslationData.sqlite and b/Keyboards/Data/TranslationData.sqlite differ diff --git a/Keyboards/DataContracts/de.json b/Keyboards/DataContracts/de.json new file mode 100644 index 00000000..05180f58 --- /dev/null +++ b/Keyboards/DataContracts/de.json @@ -0,0 +1,64 @@ +{ + "numbers": { + "nominativeSingular": "nominativePlural" + }, + "genders": { + "canonical": [ + "gender" + ], + "feminines": [], + "masculines": [], + "commons": [], + "neuters": [] + }, + "conjugations": { + "1": { + "title": "Präsens", + "conjugationTypes": { + "1": { + "title": "Präsens", + "conjugationForms": { + "ich": "indicativePresentFirstPersonSingular", + "du": "indicativePresentSecondPersonSingular", + "er/sie/es": "indicativePresentThirdPersonSingular", + "wir": "indicativePresentFirstPersonPlural", + "ihr": "indicativePresentSecondPersonPlural", + "sie/Sie": "indicativePresentThirdPersonPlural" + } + } + } + }, + "2": { + "title": "Preterite", + "conjugationTypes": { + "1": { + "title": "Preterite", + "conjugationForms": { + "ich": "indicativePreteriteFirstPersonSingular", + "du": "indicativePreteriteFirstPersonPlural", + "er/sie/es": "indicativePreteriteSecondPersonSingular", + "wir": "indicativePreteriteSecondPersonPlural", + "ihr": "indicativePreteriteThirdPersonSingular", + "sie/Sie": "indicativePreteriteThirdPersonPlural" + } + } + } + }, + "3": { + "title": "Perfekt", + "conjugationTypes": { + "1": { + "title": "Perfekt", + "conjugationForms": { + "ich": "[indicativePresentFirstPersonSingular auxiliaryVerb] pastParticiple", + "du": "[indicativePresentSecondPersonSingular auxiliaryVerb] pastParticiple", + "er/sie/es": "[indicativePresentThirdPersonSingular auxiliaryVerb] pastParticiple", + "wir": "[indicativePresentFirstPersonPlural auxiliaryVerb] pastParticiple", + "ihr": "[indicativePresentSecondPersonPlural auxiliaryVerb] pastParticiple", + "sie/Sie": "[indicativePresentThirdPersonPlural auxiliaryVerb] pastParticiple" + } + } + } + } + } +} diff --git a/Keyboards/DataContracts/de_declensions.json b/Keyboards/DataContracts/de_declensions.json new file mode 100644 index 00000000..edf470e7 --- /dev/null +++ b/Keyboards/DataContracts/de_declensions.json @@ -0,0 +1,479 @@ + +{ + "declensions": { + "1": { + "title": "Akkusativ Definitpronomen", + "forms": { + "M": "den", + "F": "die", + "N": "das", + "PL": "die" + } + }, + "2": { + "title": "Akkusativ Indefinitpronomen", + "forms": { + "M": "einen", + "F": "eine", + "N": "ein", + "PL": "" + } + }, + "3": { + "title": "Akkusativ Personalpronomen", + "forms": { + "ich": "mich", + "du/Sie": { + "title": "Formalität des Subjekts?", + "forms": { + "informell": "dich", + "formell": "Sie" + } + }, + "er/sie/es": { + "title": "Geschlecht des Subjekts?", + "forms": { + "er": "ihn", + "sie": "sie", + "es": "es" + } + }, + "wir": "uns", + "ihr": "euch", + "sie": "sie" + } + }, + "4": { + "title": "Akkusativ Possessivpronomen", + "forms": { + "ich": { + "displayValue": "mein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "meinen", + "F": "meine", + "N": "mein", + "PL": "meine" + } + }, + "du/Sie": { + "displayValue": "dein*/Ihr*", + "title": "Formalität des Subjekts?", + "forms": { + "informell": { + "displayValue": "dein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "deinen", + "F": "deine", + "N": "dein", + "PL": "deine" + } + }, + "formell": { + "displayValue": "Ihr*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "Ihren", + "F": "Ihre", + "N": "Ihr", + "PL": "Ihre" + } + } + } + }, + "er/sie/es": { + "displayValue": "sein*/ihr*/sein*", + "title": "Geschlecht des Subjekts?", + "forms": { + "er": { + "displayValue": "sein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "seinen", + "F": "seine", + "N": "sein", + "PL": "seine" + } + }, + "sie": { + "displayValue": "ihr*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "ihren", + "F": "ihre", + "N": "ihr", + "PL": "ihre" + } + }, + "es": { + "displayValue": "sein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "seinen", + "F": "seine", + "N": "sein", + "PL": "seine" + } + } + } + }, + "wir": { + "displayValue": "unser*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "unsren", + "F": "unsre", + "N": "unser", + "PL": "unsre" + } + }, + "ihr": { + "displayValue": "euer*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "euren", + "F": "eure", + "N": "euer", + "PL": "eure" + } + }, + "sie": { + "displayValue": "ihr*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "ihren", + "F": "ihre", + "N": "ihr", + "PL": "ihre" + } + } + } + }, + "5": { + "title": "Akkusativ Demonstrativpronomen", + "forms": { + "M": "diesen", + "F": "diese", + "N": "dieses", + "PL": "diese" + } + }, + "6": { + "title": "Dativ Definitpronomen", + "forms": { + "M": "dem", + "F": "der", + "N": "dem", + "PL": "den" + } + }, + "7": { + "title": "Dativ Indefinitpronomen", + "forms": { + "M": "einem", + "F": "einer", + "N": "einem", + "PL": "" + } + }, + "8": { + "title": "Dativ Personalpronomen", + "forms": { + "ich": "mir", + "du/Sie": { + "title": "Formalität des Subjekts?", + "forms": { + "informell": "dir", + "formell": "Ihnen" + } + }, + "er/sie/es": { + "title": "Geschlecht des Subjekts?", + "forms": { + "er": "ihm", + "sie": "ihr", + "es": "ihm" + } + }, + "wir": "uns", + "ihr": "euch", + "sie": "ihnen" + } + }, + "9": { + "title": "Dativ Possessivpronomen", + "forms": { + "ich": { + "displayValue": "mein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "meinem", + "F": "meiner", + "N": "meinem", + "PL": "meinen" + } + }, + "du/Sie": { + "displayValue": "dein*/Ihr*", + "title": "Formalität des Subjekts?", + "forms": { + "informell": { + "displayValue": "dein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "deinem", + "F": "deiner", + "N": "deinem", + "PL": "deinen" + } + }, + "formell": { + "displayValue": "Ihr*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "Ihrem", + "F": "Ihrer", + "N": "Ihrem", + "PL": "Ihren" + } + } + } + }, + "er/sie/es": { + "displayValue": "sein*/ihr*/sein*", + "title": "Geschlecht des Subjekts?", + "forms": { + "er": { + "displayValue": "sein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "seinem", + "F": "seiner", + "N": "seinem", + "PL": "seinen" + } + }, + "sie": { + "displayValue": "ihr*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "ihrem", + "F": "ihrer", + "N": "ihrem", + "PL": "ihren" + } + }, + "es": { + "displayValue": "sein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "seinem", + "F": "seiner", + "N": "seinem", + "PL": "seinen" + } + } + } + }, + "wir": { + "displayValue": "unser*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "unsrem", + "F": "unsrer", + "N": "unsrem", + "PL": "unsren" + } + }, + "ihr": { + "displayValue": "euer*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "eurem", + "F": "eurer", + "N": "eurem", + "PL": "euren" + } + }, + "sie": { + "displayValue": "ihr*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "ihrem", + "F": "ihrer", + "N": "ihrem", + "PL": "ihren" + } + } + } + }, + "10": { + "title": "Dativ Demonstrativpronomen", + "forms": { + "M": "diesem", + "F": "dieser", + "N": "diesem", + "PL": "diesen" + } + }, + "11": { + "title": "Genitiv Definitpronomen", + "forms": { + "M": "des", + "F": "der", + "N": "des", + "PL": "der" + } + }, + "12": { + "title": "Genitiv Indefinitpronomen", + "forms": { + "M": "eines", + "F": "einer", + "N": "eines", + "PL": "" + } + }, + "13": { + "title": "Genitiv Personalpronomen", + "forms": { + "ich": "meiner", + "du/Sie": { + "title": "Formalität des Subjekts?", + "forms": { + "informell": "deiner", + "formell": "Ihrer" + } + }, + "er/sie/es": { + "title": "Geschlecht des Subjekts?", + "forms": { + "er": "seiner", + "sie": "ihrer", + "es": "seiner" + } + }, + "wir": "unser", + "ihr": "euer", + "sie": "ihrer" + } + }, + "14": { + "title": "Genitiv Possessivpronomen", + "forms": { + "ich": { + "displayValue": "mein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "meines", + "F": "meiner", + "N": "meines", + "PL": "meiner" + } + }, + "du/Sie": { + "displayValue": "dein*/Ihr*", + "title": "Formalität des Subjekts?", + "forms": { + "informell": { + "displayValue": "dein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "deines", + "F": "deiner", + "N": "deines", + "PL": "deiner" + } + }, + "formell": { + "displayValue": "Ihr*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "Ihres", + "F": "Ihrer", + "N": "Ihres", + "PL": "Ihrer" + } + } + } + }, + "er/sie/es": { + "displayValue": "sein*/ihr*/sein*", + "title": "Geschlecht des Subjekts?", + "forms": { + "er": { + "displayValue": "sein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "seines", + "F": "seiner", + "N": "seines", + "PL": "seiner" + } + }, + "sie": { + "displayValue": "ihr*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "ihres", + "F": "ihr", + "N": "ihres", + "PL": "ihr" + } + }, + "es": { + "displayValue": "sein*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "seines", + "F": "seiner", + "N": "seines", + "PL": "seiner" + } + } + } + }, + "wir": { + "displayValue": "unser*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "unsres", + "F": "unsrer", + "N": "unsres", + "PL": "unsrer" + } + }, + "ihr": { + "displayValue": "euer*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "eures", + "F": "eurer", + "N": "eures", + "PL": "eurer" + } + }, + "sie": { + "displayValue": "ihr*", + "title": "Geschlecht des Objekts?", + "forms": { + "M": "ihres", + "F": "ihrer", + "N": "ihres", + "PL": "ihrer" + } + } + } + }, + "15": { + "title": "Genitiv Demonstrativpronomen", + "forms": { + "M": "dieses", + "F": "dieser", + "N": "dieses", + "PL": "dieser" + } + } + } +} diff --git a/Keyboards/DataContracts/en.json b/Keyboards/DataContracts/en.json new file mode 100644 index 00000000..2bd61564 --- /dev/null +++ b/Keyboards/DataContracts/en.json @@ -0,0 +1,136 @@ +{ + "numbers": { + "singular": "plural" + }, + "genders": { + "canonical": [], + "feminines": [], + "masculines": [], + "commons": [], + "neuters": [] + }, + "conjugations": { + "1": { + "title": "Present", + "conjugationTypes": { + "1": { + "title": "Pr. Simple", + "conjugationForms": { + "I/you/plural": "simplePresent", + "he/she/it": "simplePresentThirdPersonSingular" + } + }, + "2": { + "title": "Pr. Perfect", + "conjugationForms": { + "I/you/plural": "[have] pastParticiple", + "he/she/it": "[has] pastParticiple" + } + }, + "3": { + "title": "Pr. Continuous", + "conjugationForms": { + "I": "[am] presentParticiple", + "you/plural": "[are] presentParticiple", + "he/she/it": "[is] presentParticiple" + } + }, + "4": { + "title": "Pr. Perf. Continuous", + "conjugationForms": { + "I/you/plural": "[have been] presentParticiple", + "he/she/it": "[has been] presentParticiple" + } + } + } + }, + "2": { + "title": "Past", + "conjugationTypes": { + "1": { + "title": "Past Simple", + "conjugationForms": { + "all": "simplePast" + } + }, + "2": { + "title": "Past Perfect", + "conjugationForms": { + "all": "[had] pastParticiple" + } + }, + "3": { + "title": "Past Continuous", + "conjugationForms": { + "I/he/she/it": "[was] presentParticiple", + "you/plural": "[were] presentParticiple" + } + }, + "4": { + "title": "Past Perf. Continuous", + "conjugationForms": { + "all": "[had been] presentParticiple" + } + } + } + }, + "3": { + "title": "Future", + "conjugationTypes": { + "1": { + "title": "Fut. Simple", + "conjugationForms": { + "all": "[will] infinitive" + } + }, + "2": { + "title": "Fut. Perfect", + "conjugationForms": { + "all": "[will have] pastParticiple" + } + }, + "3": { + "title": "Fut. Continuous", + "conjugationForms": { + "all": "[will be] presentParticiple" + } + }, + "4": { + "title": "Fut. Perf. Continuous", + "conjugationForms": { + "all": "[will have been] presentParticiple" + } + } + } + }, + "4": { + "title": "Conditional", + "conjugationTypes": { + "1": { + "title": "Cond. Simple", + "conjugationForms": { + "all": "[would] infinitive" + } + }, + "2": { + "title": "Cond. Perfect", + "conjugationForms": { + "all": "[would have] pastParticiple" + } + }, + "3": { + "title": "Cond. Continuous", + "conjugationForms": { + "all": "[would be] presentParticiple" + } + }, + "4": { + "title": "Cond. Perf. Continuous", + "conjugationForms": { + "all": "[would have been] presentParticiple" + } + } + } + } + } +} diff --git a/Keyboards/DataContracts/es.json b/Keyboards/DataContracts/es.json new file mode 100644 index 00000000..797d1b2c --- /dev/null +++ b/Keyboards/DataContracts/es.json @@ -0,0 +1,65 @@ +{ + "numbers": { + "feminineSingular": "femininePlural", + "masculineSingular": "masculinePlural" + }, + "genders": { + "canonical": [], + "feminines": ["feminineSingular"], + "masculines": ["masculineSingular"], + "commons": [], + "neuters": [] + }, + "conjugations": { + "1": { + "title": "Presente", + "conjugationTypes": { + "1": { + "title": "Presente", + "conjugationForms": { + "yo": "indicativePresentFirstPersonSingular", + "tú": "indicativePresentFirstPersonPlural", + "él/ella/Ud.": "indicativePresentSecondPersonSingular", + "nosotros": "indicativePresentSecondPersonPlural", + "vosotros": "indicativePresentThirdPersonSingular", + "ellos/ellas/Uds.": "indicativePresentThirdPersonPlural" + } + } + } + }, + "2": { + "title": "Pretérito", + "conjugationTypes": { + "1": { + "title": "Pretérito", + "conjugationForms": { + "yo": "preteriteFirstPersonSingular", + "tú": "preteriteFirstPersonPlural", + "él/ella/Ud.": "preteriteSecondPersonSingular", + "nosotros": "preteriteSecondPersonPlural", + "vosotros": "preteriteThirdPersonSingular", + "ellos/ellas/Uds.": "preteriteThirdPersonPlural" + } + } + } + + }, + "3": { + "title": "Imperfecto", + "conjugationTypes" : { + "1": { + "title": "Imperfecto", + "conjugationForms": { + "yo": "pastImperfectFirstPersonSingular", + "tú": "pastImperfectFirstPersonPlural", + "él/ella/Ud.": "pastImperfectSecondPersonSingular", + "nosotros": "pastImperfectSecondPersonPlural", + "vosotros": "pastImperfectThirdPersonSingular", + "ellos/ellas/Uds.": "pastImperfectThirdPersonPlural" + } + } + } + + } + } + } diff --git a/Keyboards/DataContracts/fr.json b/Keyboards/DataContracts/fr.json new file mode 100644 index 00000000..32c9f92c --- /dev/null +++ b/Keyboards/DataContracts/fr.json @@ -0,0 +1,77 @@ +{ + "numbers": { "singular": "plural" }, + "genders": { + "canonical": ["gender"], + "feminines": [], + "masculines": [], + "commons": [], + "neuters": [] + }, + "conjugations": { + "1": { + "title": "Présent", + "conjugationTypes": { + "1": { + "title": "Présent", + "conjugationForms": { + "je": "indicativePresentFirstPersonSingular", + "tu": "indicativePresentFirstPersonPlural", + "il/elle": "indicativePresentSecondPersonSingular", + "nous": "indicativePresentSecondPersonPlural", + "vous": "indicativePresentThirdPersonSingular", + "ils/elles": "indicativePresentThirdPersonPlural" + } + } + } + }, + "2": { + "title": "Passé simple", + "conjugationTypes": { + "1": { + "title": "Passé simple", + "conjugationForms": { + "je": "indicativePreteriteFirstPersonSingular", + "tu": "indicativePreteriteFirstPersonPlural", + "il/elle": "indicativePreteriteSecondPersonSingular", + "nous": "indicativePreteriteSecondPersonPlural", + "vous": "indicativePreteriteThirdPersonSingular", + "ils/elles": "indicativePreteriteThirdPersonPlural" + } + } + } + }, + "3": { + "title": "Imparfait", + "conjugationTypes": { + "1": { + "title": "Imparfait", + "conjugationForms": { + "je": "indicativeImperfectFirstPersonSingular", + "tu": "indicativeImperfectFirstPersonPlural", + "il/elle": "indicativeImperfectSecondPersonSingular", + "nous": "indicativeImperfectSecondPersonPlural", + "vous": "indicativeImperfectThirdPersonSingular", + "ils/elles": "indicativeImperfectThirdPersonPlural" + } + } + } + + }, + "4": { + "title": "Futur", + "conjugationTypes":{ + "1": { + "title": "Futur", + "conjugationForms": { + "je": "indicativeSimpleFutureFirstPersonSingular", + "tu": "indicativeSimpleFutureFirstPersonPlural", + "il/elle": "indicativeSimpleFutureSecondPersonSingular", + "nous": "indicativeSimpleFutureSecondPersonPlural", + "vous": "indicativeSimpleFutureThirdPersonSingular", + "ils/elles": "indicativeSimpleFutureThirdPersonPlural" + } + } + } + } + } + } diff --git a/Keyboards/DataContracts/it.json b/Keyboards/DataContracts/it.json new file mode 100644 index 00000000..cdce757c --- /dev/null +++ b/Keyboards/DataContracts/it.json @@ -0,0 +1,63 @@ +{ + "numbers": { "singular": "plural" }, + "genders": { + "canonical": ["gender"], + "feminines": [], + "masculines": [], + "commons": [], + "neuters": [] + }, + "conjugations": { + "1": { + "title": "Presente", + "conjugationTypes": { + "1": { + "title": "Presente", + "conjugationForms": { + "io": "presentIndicativeFirstPersonSingular", + "tu": "presentIndicativeFirstPersonPlural", + "lei/lui": "presentIndicativeSecondPersonSingular", + "noi": "presentIndicativeSecondPersonPlural", + "voi": "presentIndicativeThirdPersonSingular", + "loro": "presentIndicativeThirdPersonPlural" + } + } + } + + }, + "2": { + "title": "Preterito", + "conjugationTypes": { + "1": { + "title": "Preterito", + "conjugationForms": { + "io": "preteriteFirstPersonSingular", + "tu": "preteriteFirstPersonPlural", + "lei/lui": "preteriteSecondPersonSingular", + "noi": "preteriteSecondPersonPlural", + "voi": "preteriteThirdPersonSingular", + "loro": "preteriteThirdPersonPlural" + } + } + } + + }, + "3": { + "title": "Imperfetto", + "conjugationTypes": { + "1": { + "title": "Imperfetto", + "conjugationForms": { + "io": "pastImperfectFirstPersonSingular", + "tu": "pastImperfectFirstPersonPlural", + "lei/lui": "pastImperfectSecondPersonSingular", + "noi": "pastImperfectSecondPersonPlural", + "voi": "pastImperfectThirdPersonSingular", + "loro": "pastImperfectThirdPersonPlural" + } + } + } + + } + } + } diff --git a/Keyboards/DataContracts/pt.json b/Keyboards/DataContracts/pt.json new file mode 100644 index 00000000..36f07ba9 --- /dev/null +++ b/Keyboards/DataContracts/pt.json @@ -0,0 +1,79 @@ +{ + "numbers": { "singular": "plural" }, + "genders": { + "canonical": ["gender"], + "feminines": [], + "masculines": [], + "commons": [], + "neuters": [] + }, + "conjugations": { + "1": { + "title": "Presente", + "conjugationTypes": { + "1": { + "title": "Presente", + "conjugationForms": { + "eu": "indicativePresentFirstPersonSingular", + "tu": "indicativePresentFirstPersonPlural", + "ele/ela/você": "indicativePresentSecondPersonSingular", + "nós": "indicativePresentSecondPersonPlural", + "vós": "indicativePresentThirdPersonSingular", + "eles/elas/vocês": "indicativePresentThirdPersonPlural" + } + } + } + }, + "2": { + "title": "Pretérito Perfeito", + "conjugationTypes": { +"1": { + "title": "Pretérito Perfeito", + "conjugationForms": { + "eu": "indicativePastPerfectFirstPersonSingular", + "tu": "indicativePastPerfectFirstPersonPlural", + "ele/ela/você": "indicativePastPerfectSecondPersonSingular", + "nós": "indicativePastPerfectSecondPersonPlural", + "vós": "indicativePastPerfectThirdPersonSingular", + "eles/elas/vocês": "indicativePastPerfectThirdPersonPlural" + } + } + } + + }, + "3": { + "title": "Pretérito Imperfeito", + "conjugationTypes": { +"1": { + "title": "Pretérito Imperfeito", + "conjugationForms": { + "eu": "indicativePastImperfectFirstPersonSingular", + "tu": "indicativePastImperfectFirstPersonPlural", + "ele/ela/você": "indicativePastImperfectSecondPersonSingular", + "nós": "indicativePastImperfectSecondPersonPlural", + "vós": "indicativePastImperfectThirdPersonSingular", + "eles/elas/vocês": "indicativePastImperfectThirdPersonPlural" + } + } + } + + }, + "4": { + "title": "Futuro Simples", + "conjugationTypes": { +"1": { + "title": "Futuro Simples", + "conjugationForms": { + "eu": "indicativePluperfectFirstPersonSingular", + "tu": "indicativePluperfectFirstPersonPlural", + "ele/ela/você": "indicativePluperfectSecondPersonSingular", + "nós": "indicativePluperfectSecondPersonPlural", + "vós": "indicativePluperfectThirdPersonSingular", + "eles/elas/vocês": "indicativePluperfectThirdPersonPlural" + } + } + } + + } + } + } diff --git a/Keyboards/DataContracts/ru.json b/Keyboards/DataContracts/ru.json new file mode 100644 index 00000000..1742fb91 --- /dev/null +++ b/Keyboards/DataContracts/ru.json @@ -0,0 +1,44 @@ +{ + "numbers": { + "nominativeSingular": "nominativePlural" + }, + "genders": { + "canonical": ["gender"], + "feminines": [], + "masculines": [], + "commons": [], + "neuters": [] + }, + "conjugations": { + "1": { + "title": "Настоящее (Present)", + "conjugationTypes": { + "1": { + "title": "Indicative Present", + "conjugationForms": { + "я (I)": "indicativePresentFirstPersonSingular", + "ты (you, sing.)": "indicativePresentSecondPersonSingular", + "он/она/оно (he/she/it)": "indicativePresentThirdPersonSingular", + "мы (we)": "indicativePresentFirstPersonPlural", + "вы (you, pl.)": "indicativePresentSecondPersonPlural", + "они (they)": "indicativePresentThirdPersonPlural" + } + } + } + }, + "2": { + "title": "Прошедшее (Past)", + "conjugationTypes": { + "1": { + "title": "Indicative Past", + "conjugationForms": { + "я/ты/она (I/you/she, fem.)": "feminineIndicativePast", + "я/ты/он (I/you/he, masc.)": "masculineIndicativePast", + "оно (it, neut.)": "neuterIndicativePast", + "мы/вы/они (we/you/they)": "indicativePastPlural" + } + } + } + } + } +} diff --git a/Keyboards/DataContracts/ru_declensions.json b/Keyboards/DataContracts/ru_declensions.json new file mode 100644 index 00000000..d54b2e5f --- /dev/null +++ b/Keyboards/DataContracts/ru_declensions.json @@ -0,0 +1,59 @@ +{ + "declensions": { + "1": { + "title": "Винительные местоимения", + "forms": { + "я": "меня", + "ты": "тебя", + "он/она/оно": "его/её/его", + "мы": "нас", + "вы": "вас", + "они": "их" + } + }, + "2": { + "title": "Дательные местоимения", + "forms": { + "я": "мне", + "ты": "тебе", + "он/она/оно": "ему/ей/ему", + "мы": "нам", + "вы": "вам", + "они": "им" + } + }, + "3": { + "title": "Родительные местоимения", + "forms": { + "я": "меня", + "ты": "тебя", + "он/она/оно": "его/её/его", + "мы": "нас", + "вы": "вас", + "они": "их" + } + }, + "4": { + "title": "Творительные местоимения", + "forms": { + "я": "мной", + "ты": "тобой", + "он/она/оно": "им/ей/им", + "мы": "нами", + "вы": "вами", + "они": "ими" + } + }, + "5": { + "title": "Предложные местоимения", + "forms": { + "я": "мне", + "ты": "тебе", + "он/она/оно": "нём/ней/нём", + "мы": "нас", + "вы": "вас", + "они": "них" + } + } + } +} diff --git a/Keyboards/DataContracts/sv.json b/Keyboards/DataContracts/sv.json new file mode 100644 index 00000000..6bdb2e62 --- /dev/null +++ b/Keyboards/DataContracts/sv.json @@ -0,0 +1,43 @@ +{ + "numbers": { + "nominativeIndefiniteSingular": "nominativeIndefinitePlural", + "nominativeDefiniteSingular": "nominativeDefinitePlural" + }, + "genders": { + "canonical": ["gender"], + "feminines": [], + "masculines": [], + "commons": [], + "neuters": [] + }, + "conjugations": { + "1": { + "title": "Aktiv", + "conjugationTypes": { + "1": { + "title": "Aktiv", + "conjugationForms": { + "infinitiv": "activeInfinitive", + "presens": "activePresent", + "preteritum": "activePreterite", + "supinum": "activeSupine" + } + } + } + }, + "2": { + "title": "Passiv", + "conjugationTypes": { + "1": { + "title": "Passiv", + "conjugationForms": { + "infinitiv": "passiveInfinitive", + "presens": "passivePresent", + "preteritum": "passivePreterite", + "supinum": "passiveSupine" + } + } + } + } + } +} diff --git a/Keyboards/DataManager/ConjugationManager.swift b/Keyboards/DataManager/ConjugationManager.swift new file mode 100644 index 00000000..1bc194a4 --- /dev/null +++ b/Keyboards/DataManager/ConjugationManager.swift @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +import Foundation + +/// Manages retrieval of verb conjugations for different languages. + +class ConjugationManager { + static let shared = ConjugationManager() + + private init() {} + + /// Returns nested structure: [TenseTitle: [TypeTitle: [(pronoun, conjugatedForm)]]] + func getConjugations( + verb: String, + language: String + ) -> [(String, [(String, [(String, String)])])]? { + + let contract = ContractManager.shared.loadContract(language: language) + + guard let conjugations = contract.conjugations else { + return nil + } + + var result: [(String, [(String, [(String, String)])])] = [] + + for (_, tenseGroup) in conjugations.sorted(by: { + Int($0.key) ?? 0 < Int($1.key) ?? 0 + }) { + var conjugationTypes: [(String, [(String, String)])] = [] + + for (_, conjugationType) in tenseGroup.conjugationTypes.sorted(by: { + Int($0.key) ?? 0 < Int($1.key) ?? 0 + }) { + var forms: [(String, String)] = [] + + for (pronoun, columnName) in conjugationType.conjugationForms { + let conjugatedForm = queryConjugatedForm( + verb: verb, + columnName: columnName, + language: language + ) + forms.append((pronoun, conjugatedForm)) + } + + conjugationTypes.append((conjugationType.title, forms)) + } + + result.append((tenseGroup.title, conjugationTypes)) + } + + return result.isEmpty ? nil : result + } + + private func queryConjugatedForm( + verb: String, + columnName: String, + language: String + ) -> String { + if columnName.contains("[") { + return parseComplexForm(verb: verb, columnName: columnName, language: language) + } else { + // Simple column query + let results = LanguageDBManager.shared.queryVerb(of: verb, with: [columnName]) + let result = results.first ?? "" + + return result + } + } + + private func parseComplexForm( + verb: String, + columnName: String, + language: String + ) -> String { + // Extract "[auxiliaryPart]" and "mainColumn" + let pattern = "\\[(.*?)\\]" + guard let regex = try? NSRegularExpression(pattern: pattern), + let match = regex.firstMatch(in: columnName, range: NSRange(columnName.startIndex..., in: columnName)) else { + return "" + } + + let auxiliaryPart = (columnName as NSString).substring(with: match.range(at: 1)) + let mainColumn = columnName.replacingOccurrences(of: pattern, with: "", options: .regularExpression) + .trimmingCharacters(in: .whitespaces) + + // Get the main verb form (e.g., "gegangen") + guard let mainForm = LanguageDBManager.shared.queryVerb(of: verb, with: [mainColumn]).first, + !mainForm.isEmpty else { + return "" + } + + // Check if it's dynamic lookup (German style: "indicativePresentFirstPersonSingular auxiliaryVerb") + let auxWords = auxiliaryPart.split(separator: " ") + if auxWords.count > 1 { + let targetForm = String(auxWords.first!) // e.g., "indicativePresentFirstPersonSingular" + let auxColumn = String(auxWords.last!) // e.g., "auxiliaryVerb" + + // Get the auxiliary verb identifier + if let auxVerbId = LanguageDBManager.shared.queryVerb(of: verb, with: [auxColumn]).first, + !auxVerbId.isEmpty { + + // Try querying by wdLexemeId first + var auxConjugated = LanguageDBManager.shared.queryVerb( + of: auxVerbId, + identifierColumn: "wdLexemeId", + with: [targetForm] + ).first + + // Fallback: try by infinitive + if auxConjugated?.isEmpty ?? true { + auxConjugated = LanguageDBManager.shared.queryVerb( + of: auxVerbId, + with: [targetForm] + ).first + } + + if let auxConjugated = auxConjugated, !auxConjugated.isEmpty { + return "\(auxConjugated) \(mainForm)" + } + } + } + + // Fallback: use auxiliary as-is + return "\(auxiliaryPart) \(mainForm)" + } +} diff --git a/Keyboards/DataManager/ContractManager.swift b/Keyboards/DataManager/ContractManager.swift new file mode 100644 index 00000000..b61dce77 --- /dev/null +++ b/Keyboards/DataManager/ContractManager.swift @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +import Foundation + +/** ContractManager is responsible for loading and caching DataContract instances + based on language codes. +*/ +class ContractManager { + static let shared = ContractManager() + private var contractCache: [String: DataContract] = [:] + + private init() {} + + func loadContract(language: String) -> DataContract { + let languageCode = language.lowercased() + + // Check cache + if let cached = contractCache[languageCode] { + return cached + } + + // Load JSON file (e.g., "de.json", "en.json", "es.json") + guard let jsonResourcePath = Bundle.main.path( + forResource: languageCode, + ofType: "json" + ) else { + NSLog("Contract not found: \(languageCode).json") + return createDefaultContract() + } + do { + let data = try Data(contentsOf: URL(fileURLWithPath: jsonResourcePath)) + let contract = try JSONDecoder().decode(DataContract.self, from: data) + contractCache[languageCode] = contract + print("Loaded contract: \(languageCode).json") + return contract + } catch { + NSLog("Error loading contract \(languageCode).json: \(error)") + return createDefaultContract() + } + } + + private func createDefaultContract() -> DataContract { + return DataContract( + numbers: nil, + genders: nil, + conjugations: nil + ) + } +} diff --git a/Keyboards/DataManager/DataContract.swift b/Keyboards/DataManager/DataContract.swift new file mode 100644 index 00000000..e3ef59ec --- /dev/null +++ b/Keyboards/DataManager/DataContract.swift @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +import Foundation + +/** DataContract represents the structure of the data used in the application. +*/ +struct DataContract: Codable { + let numbers: [String: String]? + let genders: GenderContract? + let conjugations: [String: ConjugationTense]? +} + +struct GenderContract: Codable { + let canonical: [String]? + let feminines: [String]? + let masculines: [String]? + let commons: [String]? + let neuters: [String]? +} + +struct ConjugationTense: Codable { + let title: String + let conjugationTypes: [String: ConjugationType] +} + +struct ConjugationType: Codable { + let title: String + let conjugationForms: [String: String] +} diff --git a/Keyboards/DataManager/DeclensionManager.swift b/Keyboards/DataManager/DeclensionManager.swift new file mode 100644 index 00000000..aa1fa9cc --- /dev/null +++ b/Keyboards/DataManager/DeclensionManager.swift @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +import Foundation + +/// Manages loading and parsing of declension contracts +class DeclensionManager { + static let shared = DeclensionManager() + + private init() {} + + /// Loads declension cases for a language + func loadDeclensions(language: String) -> [NavigationLevel]? { + let languageCode = language.lowercased() + + // Load declensions JSON file (e.g., "de_declensions.json") + guard let jsonResourcePath = Bundle.main.path( + forResource: "\(languageCode)_declensions", + ofType: "json" + ) else { + NSLog("Declensions not found: \(languageCode)_declensions.json") + return nil + } + + do { + let data = try Data(contentsOf: URL(fileURLWithPath: jsonResourcePath)) + guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any], + let declensionsDict = json["declensions"] as? [String: [String: Any]] else { + return nil + } + + // Sort by numeric keys + let sortedKeys = declensionsDict.keys.sorted { Int($0) ?? 0 < Int($1) ?? 0 } + + var cases: [NavigationLevel] = [] + + for key in sortedKeys { + guard let declension = declensionsDict[key], + let title = declension["title"] as? String, + let forms = declension["forms"] as? [String: Any] else { + continue + } + + let options = parseForms(forms, parentTitle: title) + cases.append(NavigationLevel(title: title, options: options)) + } + + return cases + } catch { + NSLog("Error loading declensions \(languageCode)/declensions.json: \(error)") + return nil + } + } + + /// Recursively parses forms with optional displayValue + private func parseForms( + _ forms: [String: Any], + parentTitle: String + ) -> [(label: String, node: NavigationNode)] { + var options: [(label: String, node: NavigationNode)] = [] + + // Sort keys to maintain consistent order + let sortedKeys = forms.keys.sorted() + + for key in sortedKeys { + guard let value = forms[key] else { continue } + + if let stringValue = value as? String { + // Final value + options.append((label: key, node: .finalValue(stringValue))) + + } else if let nestedDict = value as? [String: Any], + let title = nestedDict["title"] as? String, + let nestedForms = nestedDict["forms"] as? [String: Any] { + // Has nested forms - need to navigate deeper + + // Check for explicit displayValue, otherwise auto-generate + let displayValue: String + if let explicit = nestedDict["displayValue"] as? String { + displayValue = explicit + } else { + displayValue = autoGenerateDisplayValue(from: nestedForms) + } + + let suboptions = parseForms(nestedForms, parentTitle: title) + let nextLevel = NavigationLevel(title: title, options: suboptions) + + options.append((label: key, node: .nextLevel(nextLevel, displayValue: displayValue))) + } + } + + return options + } + + /// Auto-generates display value by joining direct child values + private func autoGenerateDisplayValue(from forms: [String: Any]) -> String { + var values: [String] = [] + + // Sort keys to maintain consistent order + let sortedKeys = forms.keys.sorted() + + for key in sortedKeys { + guard let value = forms[key] else { continue } + + if let stringValue = value as? String { + // Direct string value - use it + values.append(stringValue) + } + } + + return values.joined(separator: "/") + } +} diff --git a/Keyboards/DataManager/GenderManager.swift b/Keyboards/DataManager/GenderManager.swift new file mode 100644 index 00000000..ad29bb08 --- /dev/null +++ b/Keyboards/DataManager/GenderManager.swift @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +import Foundation + +/// Manages gender query logic based on data contracts +class GenderManager { + static let shared = GenderManager() + + private init() {} + + struct GenderQueryInfo { + let query: String + let outputCols: [String] + let args: [String] + let fallbackGender: String? + } + + /**Builds the appropriate gender queries based on the contract structure + - Parameters: + - word: The word to query + - contract: The data contract defining gender structure + - Returns: Array of query info objects to execute + */ + func buildGenderQueries(word: String, contract: DataContract) -> [GenderQueryInfo] { + + if hasCanonicalGender(contract) { + if let queryInfo = buildCanonicalQuery(word: word, contract: contract) { + return [queryInfo] + } + } else if hasMasculineFeminine(contract) { + return buildMasculineFeminineQueries(word: word, contract: contract) + } else { + NSLog("GenderManager: No valid gender structure found in contract") + } + + return [] + } + + // MARK: - Private Helper Methods + + /// Checks if the data contract defines a single, canonical gender column + private func hasCanonicalGender(_ contract: DataContract) -> Bool { + return contract.genders?.canonical?.first?.isEmpty == false + } + + /// Checks if the data contract defines separate columns for masculine and feminine genders + private func hasMasculineFeminine(_ contract: DataContract) -> Bool { + let hasMasculine = !(contract.genders?.masculines?.isEmpty ?? true) + let hasFeminine = !(contract.genders?.feminines?.isEmpty ?? true) + return hasMasculine && hasFeminine + } + + /// Builds query for canonical gender structure + private func buildCanonicalQuery(word: String, contract: DataContract) -> GenderQueryInfo? { + guard let nounCol = contract.numbers?.keys.first, + let genderCol = contract.genders?.canonical?.first else { + NSLog("GenderManager: Missing columns for canonical gender query") + return nil + } + + let query = """ + SELECT `\(genderCol)` FROM nouns + WHERE `\(nounCol)` = ? OR `\(nounCol)` = ? + """ + + return GenderQueryInfo( + query: query, + outputCols: [genderCol], + args: [word, word.lowercased()], + fallbackGender: nil + ) + } + + /// Builds queries for masculine/feminine gender structure + private func buildMasculineFeminineQueries(word: String, contract: DataContract) -> [GenderQueryInfo] { + var queries: [GenderQueryInfo] = [] + + // Masculine column query + if let masculineCol = contract.genders?.masculines?.first { + let query = """ + SELECT `\(masculineCol)` FROM nouns + WHERE `\(masculineCol)` = ? OR `\(masculineCol)` = ? + """ + queries.append(GenderQueryInfo( + query: query, + outputCols: [masculineCol], + args: [word, word.lowercased()], + fallbackGender: "masculine" + )) + } + + // Feminine column query + if let feminineCol = contract.genders?.feminines?.first { + let query = """ + SELECT `\(feminineCol)` FROM nouns + WHERE `\(feminineCol)` = ? OR `\(feminineCol)` = ? + """ + queries.append(GenderQueryInfo( + query: query, + outputCols: [feminineCol], + args: [word, word.lowercased()], + fallbackGender: "feminine" + )) + } + + return queries + } +} diff --git a/Keyboards/KeyboardsBase/LanguageDBManager.swift b/Keyboards/DataManager/LanguageDBManager.swift similarity index 70% rename from Keyboards/KeyboardsBase/LanguageDBManager.swift rename to Keyboards/DataManager/LanguageDBManager.swift index ac49e68f..7ccf5a08 100644 --- a/Keyboards/KeyboardsBase/LanguageDBManager.swift +++ b/Keyboards/DataManager/LanguageDBManager.swift @@ -12,6 +12,7 @@ class LanguageDBManager { static let shared = LanguageDBManager(translate: false) static let translations = LanguageDBManager(translate: true) private var database: DatabaseQueue? + private var cachedHasGrammaticalCase: Bool? private init(translate: Bool) { if translate { @@ -97,7 +98,7 @@ class LanguageDBManager { /// - query: the query to run against the language database. /// - outputCols: the columns from which the values should come. /// - args: arguments to pass to `query`. - private func queryDBRows(query: String, outputCols _: [String], args: StatementArguments) -> [String] { + private func queryDBRows(query: String, outputCols: [String], args: StatementArguments) -> [String] { var outputValues = [String]() do { guard let languageDB = database else { return [] } @@ -105,8 +106,14 @@ class LanguageDBManager { try Row.fetchAll(db, sql: query, arguments: args) } for r in rows { - outputValues.append(r["word"]) - } + // Loop through all columns. + for col in outputCols { + if let value = r[col] as? String, + !value.trimmingCharacters(in: .whitespaces).isEmpty { + outputValues.append(value) + } + } + } } catch let error as DatabaseError { let errorMessage = error.message let errorSQL = error.sql @@ -270,59 +277,128 @@ extension LanguageDBManager { /// Query the noun form of word in `nonuns`. func queryNounForm(of word: String) -> [String] { - let query = """ - SELECT - * + let language = getControllerLanguageAbbr() + let contract = ContractManager.shared.loadContract(language: language) - FROM - nouns + var allGenders: [String] = [] - WHERE - noun = ? - OR noun = ? - """ - let outputCols = ["form"] - let args = [word, word.lowercased()] + let queries = GenderManager.shared.buildGenderQueries(word: word, contract: contract) - return queryDBRow(query: query, outputCols: outputCols, args: StatementArguments(args)) + for queryInfo in queries { + let results = queryDBRows( + query: queryInfo.query, + outputCols: queryInfo.outputCols, + args: StatementArguments(queryInfo.args) + ) + + // For canonical gender: results are the actual genders + if queryInfo.fallbackGender == nil { + for gender in results where !gender.isEmpty { + if !allGenders.contains(gender) { + allGenders.append(gender) + } + } + } + // For masculine/feminine: if any result, use fallback + else { + if !results.isEmpty && !results[0].isEmpty, + let fallback = queryInfo.fallbackGender, + !allGenders.contains(fallback) { + allGenders.append(fallback) + } + } + } + + return allGenders.isEmpty ? [""] : [allGenders.joined(separator: "/")] } /// Query the plural form of word in `nouns`. func queryNounPlural(of word: String) -> [String] { - let query = """ - SELECT - * + let language = getControllerLanguageAbbr() + let contract = ContractManager.shared.loadContract(language: language) - FROM - nouns + let queryInfos = PluralManager.shared.buildPluralQuery( + word: word, + contract: contract + ) - WHERE - noun = ? - """ - let outputCols = ["plural"] - let args = [word] + // Try each query until we find a result. + for queryInfo in queryInfos { + let result = queryDBRow( + query: queryInfo.query, + outputCols: queryInfo.outputCols, + args: StatementArguments(queryInfo.args) + ) - return queryDBRow(query: query, outputCols: outputCols, args: StatementArguments(args)) + // If we found a result, return it. + if result.count >= 2 && !result[1].isEmpty { + return [result[1]] + } + } + + return [] + } + + /// Query all plural forms for the current language. + func queryAllPluralForms() -> [String]? { + let language = getControllerLanguageAbbr() + let contract = ContractManager.shared.loadContract(language: language) + + guard let queryInfo = PluralManager.shared.buildAllPluralsQuery(contract: contract) else { + return nil + } + + let result = queryDBRows( + query: queryInfo.query, + outputCols: queryInfo.outputCols, + args: StatementArguments() + ) + + return result == [""] ? nil : result } /// Query preposition form of word in `prepositions`. func queryPrepForm(of word: String) -> [String] { - let query = """ - SELECT - * - - FROM - prepositions + // Check if this language's database has grammaticalCase column + guard hasGrammaticalCaseColumn() else { + return [""] + } - WHERE - preposition = ? - """ - let outputCols = ["form"] + let query = """ + SELECT grammaticalCase + FROM prepositions + WHERE preposition = ? + """ + let outputCols = ["grammaticalCase"] let args = [word] return queryDBRow(query: query, outputCols: outputCols, args: StatementArguments(args)) } + /// Check if the prepositions table has a grammaticalCase column. + /// Result is cached to avoid repeated PRAGMA queries. + private func hasGrammaticalCaseColumn() -> Bool { + if let cached = cachedHasGrammaticalCase { + return cached + } + + var hasColumn = false + + do { + try database?.read { db in + let columns = try Row.fetchAll(db, sql: "PRAGMA table_info(prepositions)") + hasColumn = columns.contains { row in + (row["name"] as? String) == "grammaticalCase" + } + } + } catch { + hasColumn = false + } + + cachedHasGrammaticalCase = hasColumn + return hasColumn + } + /// Query the translation of word in the current language. Only works with the `translations` manager. func queryTranslation(of word: String) -> [String] { let translateLanguage = getKeyInDict(givenValue: getControllerTranslateLangCode(), dict: languagesAbbrDict) @@ -344,6 +420,7 @@ extension LanguageDBManager { /// Query the verb form of word in `verbs`. func queryVerb(of word: String) -> [String] { + let columnName = (controllerLanguage == "Swedish") ? "verb" : "infinitive" let query = """ SELECT * @@ -352,9 +429,9 @@ extension LanguageDBManager { verbs WHERE - verb = ? + \(columnName) = ? """ - let outputCols = ["verb"] + let outputCols = [columnName] let args = [word] return queryDBRow(query: query, outputCols: outputCols, args: StatementArguments(args)) @@ -363,8 +440,11 @@ extension LanguageDBManager { /// Query specific form of word in `verbs`. /// /// - Parameters: + /// - word: The value to search for + /// - identifierColumn: The column to search in (default: "infinitive" or "verb" for Swedish) /// - outputCols: Specific form want to output - func queryVerb(of word: String, with outputCols: [String]) -> [String] { + func queryVerb(of word: String, identifierColumn: String? = nil, with outputCols: [String]) -> [String] { + let columnName = identifierColumn ?? ((controllerLanguage == "Swedish") ? "verb" : "infinitive") let query = """ SELECT * @@ -373,7 +453,7 @@ extension LanguageDBManager { verbs WHERE - verb = ? + \(columnName) = ? """ let args = [word] diff --git a/Keyboards/DataManager/PluralManager.swift b/Keyboards/DataManager/PluralManager.swift new file mode 100644 index 00000000..dadde1a6 --- /dev/null +++ b/Keyboards/DataManager/PluralManager.swift @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +import Foundation + +/// Manages plural query logic based on data contracts +class PluralManager { + static let shared = PluralManager() + + private init() {} + + struct PluralQueryInfo { + let query: String + let outputCols: [String] + let args: [String] + } + + /**Builds a query to find the plural form of a word based on the contract structure + - Parameters: + - word: The singular word to find the plural for + - contract: The data contract defining the database structure + - Returns: Query info to execute, or nil if contract is invalid + */ + func buildPluralQuery(word: String, contract: DataContract?) -> [PluralQueryInfo] { // ← Return array! + guard let contract = contract, + let numbers = contract.numbers, + !numbers.isEmpty else { + NSLog("PluralManager: No valid plural columns in contract") + return [] + } + + var queries: [PluralQueryInfo] = [] + + // Build a query for EACH singular/plural pair + for (singularCol, pluralCol) in numbers { + let query = """ + SELECT `\(singularCol)`, `\(pluralCol)` + FROM nouns + WHERE `\(singularCol)` = ? COLLATE NOCASE + """ + + queries.append(PluralQueryInfo( + query: query, + outputCols: [singularCol, pluralCol], + args: [word.lowercased()] + )) + } + + return queries + } + + /**Builds a query to get all plural forms for a language + - Parameter contract: The data contract defining plural columns + - Returns: Query info to execute, or nil if contract is invalid + */ + func buildAllPluralsQuery(contract: DataContract?) -> PluralQueryInfo? { + guard let contract = contract, + let numbers = contract.numbers, + !numbers.isEmpty else { + NSLog("PluralManager: No valid plural columns in contract") + return nil + } + + let pluralColumns = Array(numbers.values) + let columns = pluralColumns.map { "`\($0)`" }.joined(separator: ", ") + let query = "SELECT \(columns) FROM nouns" + + return PluralQueryInfo( + query: query, + outputCols: pluralColumns, + args: [] + ) + } +} diff --git a/Keyboards/KeyboardsBase/DynamicConjugationViewController.swift b/Keyboards/KeyboardsBase/DynamicConjugationViewController.swift new file mode 100644 index 00000000..07d4c4b9 --- /dev/null +++ b/Keyboards/KeyboardsBase/DynamicConjugationViewController.swift @@ -0,0 +1,320 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +/** + * Dynamic view controller for arbitrary-depth navigation. + * Handles conjugations and declensions. + */ + +import UIKit + +class DynamicConjugationViewController: UIViewController { + + // MARK: UI Components + + private var leftArrowButton: UIButton! + private var rightArrowButton: UIButton! + private var buttonContainerView: UIView! + + // MARK: Navigation Data + + // For tree navigation (conjugations and variant declensions) + private var navigationStack: [NavigationLevel] = [] + + // For linear navigation (declension cases) + private var linearCases: [NavigationLevel]? + private var currentCaseIndex: Int = 0 + + private weak var commandBar: CommandBar? + + // MARK: Initialization + + // Tree navigation (conjugations) + init(navigationTree: NavigationLevel, commandBar: CommandBar) { + self.commandBar = commandBar + super.init(nibName: nil, bundle: nil) + navigationStack = [navigationTree] + } + + // Linear navigation (declensions) + init(linearCases: [NavigationLevel], commandBar: CommandBar, startingIndex: Int = 0) { + self.commandBar = commandBar + self.linearCases = linearCases + self.currentCaseIndex = startingIndex + super.init(nibName: nil, bundle: nil) + + if !linearCases.isEmpty && startingIndex < linearCases.count { + navigationStack = [linearCases[startingIndex]] + } + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: Lifecycle + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = keyboardBgColor + setupUI() + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + + if buttonContainerView.subviews.isEmpty { + displayCurrentLevel() + } + } + + // MARK: Setup + + private func setupUI() { + buttonContainerView = UIView() + buttonContainerView.backgroundColor = .clear + buttonContainerView.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(buttonContainerView) + + leftArrowButton = UIButton(type: .system) + leftArrowButton.setImage(UIImage(systemName: "chevron.left"), for: .normal) + leftArrowButton.tintColor = keyCharColor + leftArrowButton.backgroundColor = keyColor + leftArrowButton.layer.cornerRadius = keyCornerRadius + leftArrowButton.layer.shadowColor = keyShadowColor + leftArrowButton.layer.shadowOffset = CGSize(width: 0, height: 1) + leftArrowButton.layer.shadowOpacity = 1.0 + leftArrowButton.layer.shadowRadius = 0 + leftArrowButton.addTarget(self, action: #selector(leftArrowTapped), for: .touchUpInside) + leftArrowButton.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(leftArrowButton) + + rightArrowButton = UIButton(type: .system) + rightArrowButton.setImage(UIImage(systemName: "chevron.right"), for: .normal) + rightArrowButton.tintColor = keyCharColor + rightArrowButton.backgroundColor = keyColor + rightArrowButton.layer.cornerRadius = keyCornerRadius + rightArrowButton.layer.shadowColor = keyShadowColor + rightArrowButton.layer.shadowOffset = CGSize(width: 0, height: 1) + rightArrowButton.layer.shadowOpacity = 1.0 + rightArrowButton.layer.shadowRadius = 0 + rightArrowButton.addTarget(self, action: #selector(rightArrowTapped), for: .touchUpInside) + rightArrowButton.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(rightArrowButton) + + NSLayoutConstraint.activate([ + leftArrowButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8), + leftArrowButton.topAnchor.constraint(equalTo: view.topAnchor, constant: 8), + leftArrowButton.widthAnchor.constraint(equalToConstant: 40), + leftArrowButton.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -8), + + rightArrowButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8), + rightArrowButton.topAnchor.constraint(equalTo: view.topAnchor, constant: 8), + rightArrowButton.widthAnchor.constraint(equalToConstant: 40), + rightArrowButton.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -8), + + buttonContainerView.topAnchor.constraint(equalTo: view.topAnchor, constant: 8), + buttonContainerView.leadingAnchor.constraint(equalTo: leftArrowButton.trailingAnchor, constant: 4), + buttonContainerView.trailingAnchor.constraint(equalTo: rightArrowButton.leadingAnchor, constant: -4), + buttonContainerView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -8) + ]) + } + + // MARK: Display + + private func displayCurrentLevel() { + buttonContainerView.subviews.forEach { $0.removeFromSuperview() } + + guard let currentLevel = navigationStack.last else { + commandBar?.text = commandPromptSpacing + "No data" + return + } + + commandBar?.text = commandPromptSpacing + currentLevel.title + commandBar?.isShowingInfoButton = false + + let options = currentLevel.options + guard !options.isEmpty else { + commandBar?.text = commandPromptSpacing + "No options available" + return + } + + // Create button grid + let count = options.count + let (rows, cols) = getGridLayout(forCount: count) + let spacing: CGFloat = 4 + + let containerWidth = buttonContainerView.bounds.width + let containerHeight = buttonContainerView.bounds.height + let buttonWidth = (containerWidth - CGFloat(cols + 1) * spacing) / CGFloat(cols) + let buttonHeight = (containerHeight - CGFloat(rows + 1) * spacing) / CGFloat(rows) + + for (index, option) in options.enumerated() { + let row = index / cols + let col = index % cols + + let button = UIButton(type: .custom) + button.frame = CGRect( + x: CGFloat(col) * (buttonWidth + spacing) + spacing, + y: CGFloat(row) * (buttonHeight + spacing) + spacing, + width: buttonWidth, + height: buttonHeight + ) + + button.setTitleColor(keyCharColor, for: .normal) + button.backgroundColor = keyColor + button.titleLabel?.font = .systemFont(ofSize: 16) + button.titleLabel?.numberOfLines = 0 + button.titleLabel?.adjustsFontSizeToFitWidth = true + button.titleLabel?.minimumScaleFactor = 0.6 + button.titleLabel?.textAlignment = .center + button.contentVerticalAlignment = .center + button.layer.cornerRadius = keyCornerRadius + button.layer.shadowColor = keyShadowColor + button.layer.shadowOffset = CGSize(width: 0, height: 1) + button.layer.shadowOpacity = 1.0 + button.layer.shadowRadius = 0 + button.tag = index + button.addTarget(self, action: #selector(optionButtonTapped(_:)), for: .touchUpInside) + + // Determine the display value + let displayValue: String? + switch option.node { + case .finalValue(let value): + displayValue = value.isEmpty ? nil : value + case .nextLevel(_, let value): + displayValue = value + } + + // Add label at top-left + let label = UILabel() + label.text = " " + option.label + label.font = .systemFont(ofSize: 11) + label.textColor = commandBarPlaceholderColor + label.translatesAutoresizingMaskIntoConstraints = false + button.addSubview(label) + + // Set value in center (if exists) + if let value = displayValue { + button.setTitle(value, for: .normal) + } + + NSLayoutConstraint.activate([ + label.topAnchor.constraint(equalTo: button.topAnchor, constant: 2), + label.leadingAnchor.constraint(equalTo: button.leadingAnchor, constant: 2) + ]) + + buttonContainerView.addSubview(button) +} + + updateArrowButtons() + } + + @objc private func optionButtonTapped(_ sender: UIButton) { + guard let currentLevel = navigationStack.last, + sender.tag < currentLevel.options.count else { + return + } + + let selectedOption = currentLevel.options[sender.tag] + + switch selectedOption.node { + case .nextLevel(let nextLevel, _): // ← Add underscore for displayValue + // Navigate deeper + navigationStack.append(nextLevel) + displayCurrentLevel() + + case .finalValue(let value): + // Skip empty values + guard !value.isEmpty else { return } + + // Insert text and close + proxy.insertText(value + " ") + closeTapped() + } +} + + @objc private func leftArrowTapped() { + if let cases = linearCases { + // Linear mode: navigate between cases OR go back in tree + if navigationStack.count > 1 { + // In a variant - go back + navigationStack.removeLast() + displayCurrentLevel() + } else if currentCaseIndex > 0 { + // At root level - go to previous case + currentCaseIndex -= 1 + navigationStack = [cases[currentCaseIndex]] + displayCurrentLevel() + } + } else { + // Tree mode: just go back + if navigationStack.count > 1 { + navigationStack.removeLast() + displayCurrentLevel() + } + } + } + + @objc private func rightArrowTapped() { + if let cases = linearCases { + // Linear mode: navigate to next case + if navigationStack.count > 1 { + // In a variant - can't navigate cases + return + } else if currentCaseIndex < cases.count - 1 { + // At root level - go to next case + currentCaseIndex += 1 + navigationStack = [cases[currentCaseIndex]] + displayCurrentLevel() + } + } + // Tree mode: right arrow does nothing + } + + private func updateArrowButtons() { + if let cases = linearCases { + // Linear mode + if navigationStack.count > 1 { + // In a variant - left goes back, right disabled + leftArrowButton.isEnabled = true + leftArrowButton.alpha = 1.0 + rightArrowButton.isEnabled = false + rightArrowButton.alpha = 1.0 + } else { + // At root case level - arrows navigate cases + leftArrowButton.isEnabled = currentCaseIndex > 0 + + rightArrowButton.isEnabled = currentCaseIndex < cases.count - 1 + } + } else { + // Tree mode - left goes back, right disabled + leftArrowButton.isEnabled = navigationStack.count > 1 + + rightArrowButton.isEnabled = false + } + } + + @objc private func closeTapped() { + commandState = .idle + autoActionState = .suggest + + let kvc = parent as? KeyboardViewController + + removeFromParent() + view.removeFromSuperview() + + kvc?.loadKeys() + kvc?.conditionallySetAutoActionBtns() + } + + private func getGridLayout(forCount count: Int) -> (rows: Int, cols: Int) { + switch count { + case 1: return (1, 1) + case 2: return (1, 2) + case 3: return (3, 1) + case 4: return (2, 2) + case 6: return (3, 2) + default: return (3, 2) + } + } +} diff --git a/Keyboards/KeyboardsBase/InterfaceVariables.swift b/Keyboards/KeyboardsBase/InterfaceVariables.swift index cf34a93c..ecdf1aca 100644 --- a/Keyboards/KeyboardsBase/InterfaceVariables.swift +++ b/Keyboards/KeyboardsBase/InterfaceVariables.swift @@ -90,12 +90,12 @@ enum CommandState { case selectCommand case translate case conjugate - case selectVerbConjugation case selectCaseDeclension case plural case alreadyPlural case invalid case displayInformation + case dynamicConjugation } /// States of the keyboard corresponding to which auto actions should be presented. @@ -118,6 +118,7 @@ var shiftButtonState: ShiftButtonState = .normal var commandState: CommandState = .idle var autoActionState: AutoActionState = .suggest var conjViewShiftButtonsState: ConjViewShiftButtonsState = .bothInactive +var pluralWords: Set? // Variables and functions to determine display parameters. enum DeviceType { diff --git a/Keyboards/KeyboardsBase/KeyboardViewController.swift b/Keyboards/KeyboardsBase/KeyboardViewController.swift index 97bc06b9..de1a4213 100644 --- a/Keyboards/KeyboardsBase/KeyboardViewController.swift +++ b/Keyboards/KeyboardsBase/KeyboardViewController.swift @@ -294,6 +294,9 @@ class KeyboardViewController: UIInputViewController { /// Sets the tooltip to display information to the user. func setInformationState() { + formKeySingle?.isHidden = false + formKeySingle?.alpha = 1.0 + setFormDisplay1x1View() let contentData = InformationToolTipData.getContent() let datasources = contentData.compactMap { text in @@ -316,6 +319,21 @@ class KeyboardViewController: UIInputViewController { tipView.topAnchor.constraint(equalTo: formKeySingle.topAnchor).isActive = true tipView.bottomAnchor.constraint(equalTo: formKeySingle.bottomAnchor).isActive = true styleBtn(btn: formKeySingle, title: "", radius: keyCornerRadius) + + shiftFormsDisplayLeft?.isHidden = false + shiftFormsDisplayRight?.isHidden = false + + setBtn(btn: shiftFormsDisplayLeft, color: keyColor, name: "shiftFormsDisplayLeft", canBeCapitalized: false, isSpecial: false) + setBtn(btn: shiftFormsDisplayRight, color: keyColor, name: "shiftFormsDisplayRight", canBeCapitalized: false, isSpecial: false) + + activateBtn(btn: shiftFormsDisplayLeft) + activateBtn(btn: shiftFormsDisplayRight) + + styleBtn(btn: shiftFormsDisplayLeft, title: "", radius: keyCornerRadius) + styleBtn(btn: shiftFormsDisplayRight, title: "", radius: keyCornerRadius) + + styleIconBtn(btn: shiftFormsDisplayLeft, color: commandBarPlaceholderColor, iconName: "chevron.left") + styleIconBtn(btn: shiftFormsDisplayRight, color: keyCharColor, iconName: "chevron.right") } // Shifts the view of the information tooltip view. @@ -996,15 +1014,6 @@ class KeyboardViewController: UIInputViewController { @IBOutlet var formKeySPP: UIButton! @IBOutlet var formKeyTPP: UIButton! - /// Returns all buttons for the 3x2 conjugation display. - func get3x2FormDisplayButtons() -> [UIButton] { - let conjugationButtons: [UIButton] = [ - formKeyFPS, formKeySPS, formKeyTPS, formKeyFPP, formKeySPP, formKeyTPP - ] - - return conjugationButtons - } - // Labels for the conjugation view buttons. // Note that we're using buttons as labels weren't allowing for certain constraints to be set. @IBOutlet var formLblFPS: UIButton! @@ -1014,195 +1023,29 @@ class KeyboardViewController: UIInputViewController { @IBOutlet var formLblSPP: UIButton! @IBOutlet var formLblTPP: UIButton! - /// Returns all labels for the 3x2 conjugation display. - func get3x2FormDisplayLabels() -> [UIButton] { - let conjugationLabels: [UIButton] = [ - formLblFPS, formLblSPS, formLblTPS, formLblFPP, formLblSPP, formLblTPP - ] - - return conjugationLabels - } - - /// Sets up all buttons and labels that are associated with the 3x2 conjugation display. - func setFormDisplay3x2View() { - let conjugationNames: [String] = [ - "firstPersonSingular", - "secondPersonSingular", - "thirdPersonSingular", - "firstPersonPlural", - "secondPersonPlural", - "thirdPersonPlural" - ] - - let displayBtns = get3x2FormDisplayButtons() - - for (idx, btn) in displayBtns.enumerated() { - setBtn(btn: btn, color: keyColor, name: conjugationNames[idx], canBeCapitalized: false, isSpecial: false) - activateBtn(btn: btn) - } - - if DeviceType.isPad { - var conjugationFontDivisor = 3.5 - if isLandscapeView { - conjugationFontDivisor = 4 - } - for btn in get3x2FormDisplayButtons() { - btn.titleLabel?.font = .systemFont(ofSize: letterKeyWidth / conjugationFontDivisor) - } - } - } - @IBOutlet var formKeyTop: UIButton! @IBOutlet var formKeyMiddle: UIButton! @IBOutlet var formKeyBottom: UIButton! - /// Returns all buttons for the 3x1 conjugation display - func get3x1FormDisplayButtons() -> [UIButton] { - let conjugationButtons: [UIButton] = [ - formKeyTop, formKeyMiddle, formKeyBottom - ] - - return conjugationButtons - } - @IBOutlet var formLblTop: UIButton! @IBOutlet var formLblMiddle: UIButton! @IBOutlet var formLblBottom: UIButton! - - /// Returns all labels for the 3x1 conjugation display. - func get3x1FormDisplayLabels() -> [UIButton] { - let conjugationLabels: [UIButton] = [ - formLblTop, formLblMiddle, formLblBottom - ] - - return conjugationLabels - } - - /// Sets up all buttons and labels that are associated with the 3x1 conjugation display. - func setFormDisplay3x1View() { - let conjugationNames: [String] = [ - "formTop", "formMiddle", "formBottom" - ] - - let displayBtns = get3x1FormDisplayButtons() - - for (idx, btn) in displayBtns.enumerated() { - setBtn(btn: btn, color: keyColor, name: conjugationNames[idx], canBeCapitalized: false, isSpecial: false) - activateBtn(btn: btn) - } - - if DeviceType.isPad { - var conjugationFontDivisor = 3.5 - if isLandscapeView { - conjugationFontDivisor = 4 - } - for btn in get3x1FormDisplayButtons() { - btn.titleLabel?.font = .systemFont(ofSize: letterKeyWidth / conjugationFontDivisor) - } - } - } - @IBOutlet var formKeyTL: UIButton! @IBOutlet var formKeyTR: UIButton! @IBOutlet var formKeyBL: UIButton! @IBOutlet var formKeyBR: UIButton! - /// Returns all buttons for the 2x2 conjugation display - func get2x2FormDisplayButtons() -> [UIButton] { - let conjugationButtons: [UIButton] = [ - formKeyTL, formKeyTR, formKeyBL, formKeyBR - ] - - return conjugationButtons - } - @IBOutlet var formLblTL: UIButton! @IBOutlet var formLblTR: UIButton! @IBOutlet var formLblBL: UIButton! @IBOutlet var formLblBR: UIButton! - /// Returns all labels for the 2x2 conjugation display. - func get2x2FormDisplayLabels() -> [UIButton] { - let conjugationLabels: [UIButton] = [ - formLblTL, formLblTR, formLblBL, formLblBR - ] - - return conjugationLabels - } - - /// Sets up all buttons and labels that are associated with the 2x2 conjugation display. - func setFormDisplay2x2View() { - let conjugationNames: [String] = [ - "formTopLeft", "formTopRight", "formBottomLeft", "formBottomRight" - ] - - let displayBtns = get2x2FormDisplayButtons() - - for (idx, btn) in displayBtns.enumerated() { - setBtn(btn: btn, color: keyColor, name: conjugationNames[idx], canBeCapitalized: false, isSpecial: false) - activateBtn(btn: btn) - btn.isEnabled = true - } - - if DeviceType.isPad { - var conjugationFontDivisor = 3.5 - if isLandscapeView { - conjugationFontDivisor = 4 - } - for btn in get2x2FormDisplayButtons() { - btn.titleLabel?.font = .systemFont(ofSize: letterKeyWidth / conjugationFontDivisor) - } - } - } - @IBOutlet var formKeyLeft: UIButton! @IBOutlet var formKeyRight: UIButton! - /// Returns all buttons for the 1x2 conjugation display - func get1x2FormDisplayButtons() -> [UIButton] { - let conjugationButtons: [UIButton] = [ - formKeyLeft, formKeyRight - ] - - return conjugationButtons - } - @IBOutlet var formLblLeft: UIButton! @IBOutlet var formLblRight: UIButton! - /// Returns all labels for the 1x2 conjugation display. - func get1x2FormDisplayLabels() -> [UIButton] { - let conjugationLabels: [UIButton] = [ - formLblLeft, formLblRight - ] - - return conjugationLabels - } - - /// Sets up all buttons and labels that are associated with the 3x1 conjugation display. - func setFormDisplay1x2View() { - let conjugationNames: [String] = [ - "formLeft", "formRight" - ] - - let displayBtns = get1x2FormDisplayButtons() - - for (idx, btn) in displayBtns.enumerated() { - setBtn(btn: btn, color: keyColor, name: conjugationNames[idx], canBeCapitalized: false, isSpecial: false) - activateBtn(btn: btn) - } - - if DeviceType.isPad { - var conjugationFontDivisor = 3.5 - if isLandscapeView { - conjugationFontDivisor = 4 - } - for btn in get1x2FormDisplayButtons() { - btn.titleLabel?.font = .systemFont(ofSize: letterKeyWidth / conjugationFontDivisor) - } - } - } - @IBOutlet var formKeySingle: UIButton! /// Returns all buttons for the 1x1 conjugation display @@ -1249,434 +1092,6 @@ class KeyboardViewController: UIInputViewController { } } - /// Sets up all buttons and labels for the conjugation view given constraints to determine the dimensions. - func setConjugationBtns() { - // Add swipe functionality to the conjugation and declension views. - guard controllerLanguage != "Indonesian" else { return } - let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(shiftLeft)) - keyboardView.addGestureRecognizer(swipeRight) - let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(shiftRight)) - swipeLeft.direction = .left - keyboardView.addGestureRecognizer(swipeLeft) - - // Set the conjugation view to 2x2 for Swedish and Russian past tense. - if controllerLanguage == "Swedish" { - formsDisplayDimensions = .view2x2 - } else if controllerLanguage == "Russian" && ruConjugationState == .past { - formsDisplayDimensions = .view2x2 - } else if - commandState == .selectCaseDeclension - && controllerLanguage == "German" - && deCaseVariantDeclensionState != .disabled { - switch deCaseVariantDeclensionState { - case .disabled: - break - case .accusativePersonalSPS, .dativePersonalSPS, .genitivePersonalSPS, - .accusativePossessiveSPS, .dativePossessiveSPS, .genitivePossessiveSPS: - formsDisplayDimensions = .view1x2 - case .accusativePersonalTPS, .dativePersonalTPS, .genitivePersonalTPS, - .accusativePossessiveTPS, .dativePossessiveTPS, .genitivePossessiveTPS: - formsDisplayDimensions = .view3x1 - case .accusativePossessiveFPS, .accusativePossessiveSPSInformal, .accusativePossessiveSPSFormal, - .accusativePossessiveTPSMasculine, .accusativePossessiveTPSFeminine, .accusativePossessiveTPSNeutral, - .accusativePossessiveFPP, .accusativePossessiveSPP, .accusativePossessiveTPP, - .dativePossessiveFPS, .dativePossessiveSPSInformal, .dativePossessiveSPSFormal, - .dativePossessiveTPSMasculine, .dativePossessiveTPSFeminine, .dativePossessiveTPSNeutral, - .dativePossessiveFPP, .dativePossessiveSPP, .dativePossessiveTPP, - .genitivePossessiveFPS, .genitivePossessiveSPSInformal, .genitivePossessiveSPSFormal, - .genitivePossessiveTPSMasculine, .genitivePossessiveTPSFeminine, .genitivePossessiveTPSNeutral, - .genitivePossessiveFPP, .genitivePossessiveSPP, .genitivePossessiveTPP: - formsDisplayDimensions = .view2x2 - } - } else if - commandState == .selectCaseDeclension - && controllerLanguage == "German" - && [ - .accusativeDefinite, .accusativeIndefinite, .accusativeDemonstrative, - .dativeDefinite, .dativeIndefinite, .dativeDemonstrative, - .genitiveDefinite, .genitiveIndefinite, .genitiveDemonstrative - ].contains(deCaseDeclensionState) { - formsDisplayDimensions = .view2x2 - } else if controllerLanguage == "English" { - switch enConjugationState { - case .present, .presCont, .past, .future, .conditional: - formsDisplayDimensions = .view2x2 - case .presSimp, .presPerf, .presPerfCont: - formsDisplayDimensions = .view1x2 - case .pastCont: - formsDisplayDimensions = .view3x1 - } - } else if commandState == .displayInformation { - formsDisplayDimensions = .view1x1 - } else { - formsDisplayDimensions = .view3x2 - } - - // The base conjugation view is 3x2 for first, second, and third person in singular and plural. - switch formsDisplayDimensions { - case .view3x2: - setFormDisplay3x2View() - case .view3x1: - setFormDisplay3x1View() - case .view2x2: - setFormDisplay2x2View() - case .view1x2: - setFormDisplay1x2View() - case .view1x1: - setFormDisplay1x1View() - } - - // Setup the view shift buttons. - setBtn( - btn: shiftFormsDisplayLeft, - color: keyColor, - name: "shiftFormsDisplayLeft", - canBeCapitalized: false, - isSpecial: false - ) - setBtn( - btn: shiftFormsDisplayRight, - color: keyColor, - name: "shiftFormsDisplayRight", - canBeCapitalized: false, - isSpecial: false - ) - - if [.bothActive, .rightInactive].contains(conjViewShiftButtonsState) { - activateBtn(btn: shiftFormsDisplayLeft) - } else { - shiftFormsDisplayLeft.isUserInteractionEnabled = false - } - if [.bothActive, .leftInactive].contains(conjViewShiftButtonsState) { - activateBtn(btn: shiftFormsDisplayRight) - } else { - shiftFormsDisplayRight.isUserInteractionEnabled = false - } - - // Make all labels clear and set their font for if they will be used. - let allFormDisplayLabels: [UIButton] = - get3x2FormDisplayLabels() - + get3x1FormDisplayLabels() - + get2x2FormDisplayLabels() - + get1x2FormDisplayLabels() - + get1x1FormDisplayLabels() - for lbl in allFormDisplayLabels { - lbl.backgroundColor = UIColor.clear - lbl.setTitleColor(commandBarPlaceholderColor, for: .normal) - lbl.isUserInteractionEnabled = false - if DeviceType.isPad { - lbl.titleLabel?.font = .systemFont(ofSize: letterKeyWidth / 4) - } - } - } - - /// Activates all buttons that are associated with the conjugation display. - func activateConjugationDisplay() { - if [.bothActive, .rightInactive].contains(conjViewShiftButtonsState) { - activateBtn(btn: shiftFormsDisplayLeft) - } else { - shiftFormsDisplayLeft.isUserInteractionEnabled = false - } - if [.bothActive, .leftInactive].contains(conjViewShiftButtonsState) { - activateBtn(btn: shiftFormsDisplayRight) - } else { - shiftFormsDisplayRight.isUserInteractionEnabled = false - } - - switch formsDisplayDimensions { - case .view3x2: - for btn in get3x2FormDisplayButtons() { - activateBtn(btn: btn) - } - - for btn in get3x1FormDisplayButtons() + get2x2FormDisplayButtons() + get1x2FormDisplayButtons() { - deactivateBtn(btn: btn) - } - case .view3x1: - for btn in get3x1FormDisplayButtons() { - activateBtn(btn: btn) - } - - for btn in get3x2FormDisplayButtons() + get2x2FormDisplayButtons() + get1x2FormDisplayButtons() { - deactivateBtn(btn: btn) - } - case .view2x2: - for btn in get2x2FormDisplayButtons() { - activateBtn(btn: btn) - } - - if controllerLanguage == "German" - && [.accusativeIndefinite, .dativeIndefinite, .genitiveIndefinite].contains(deCaseDeclensionState) { - formKeyBR.isUserInteractionEnabled = false - } - - for btn in get3x2FormDisplayButtons() + get3x1FormDisplayButtons() + get1x2FormDisplayButtons() { - deactivateBtn(btn: btn) - } - case .view1x2: - for btn in get1x2FormDisplayButtons() { - activateBtn(btn: btn) - } - - for btn in get3x2FormDisplayButtons() + get3x1FormDisplayButtons() + get2x2FormDisplayButtons() { - deactivateBtn(btn: btn) - } - case .view1x1: - break - } - } - - /// Deactivates all buttons that are associated with the conjugation display. - func deactivateConjugationDisplay(deactivateShiftForms: Bool) { - if deactivateShiftForms { - deactivateBtn(btn: shiftFormsDisplayLeft) - shiftFormsDisplayLeft.tintColor = UIColor.clear - deactivateBtn(btn: shiftFormsDisplayRight) - shiftFormsDisplayRight.tintColor = UIColor.clear - } - - let allFormDisplayButtons: [UIButton] = - get3x2FormDisplayButtons() - + get3x1FormDisplayButtons() - + get2x2FormDisplayButtons() - + get1x2FormDisplayButtons() - + get1x1FormDisplayButtons() - let allFormDisplayLabels: [UIButton] = - get3x2FormDisplayLabels() - + get3x1FormDisplayLabels() - + get2x2FormDisplayLabels() - + get1x2FormDisplayLabels() - + get1x1FormDisplayLabels() - let allConjElements: [UIButton] = allFormDisplayButtons + allFormDisplayLabels - - for elem in allConjElements { - deactivateBtn(btn: elem) - } - - for lbl in allFormDisplayLabels { - lbl.setTitle("", for: .normal) - } - } - - /// Assign the verb conjugations that will be selectable in the conjugation display. - func assignVerbConjStates() { - var conjugationStateFxn: () -> String = deGetConjugationState - if let conjugationFxn = keyboardConjStateDict[controllerLanguage] as? () -> String { - conjugationStateFxn = conjugationFxn - } - - if !["English", "Russian", "Swedish"].contains(controllerLanguage) { - formFPS = conjugationStateFxn() + "FPS" - formSPS = conjugationStateFxn() + "SPS" - formTPS = conjugationStateFxn() + "TPS" - formFPP = conjugationStateFxn() + "FPP" - formSPP = conjugationStateFxn() + "SPP" - formTPP = conjugationStateFxn() + "TPP" - } else if controllerLanguage == "Russian" { - if formsDisplayDimensions == .view3x2 { - formFPS = ruGetConjugationState() + "FPS" - formSPS = ruGetConjugationState() + "SPS" - formTPS = ruGetConjugationState() + "TPS" - formFPP = ruGetConjugationState() + "FPP" - formSPP = ruGetConjugationState() + "SPP" - formTPP = ruGetConjugationState() + "TPP" - } else { - formTopLeft = "pastMasculine" - formTopRight = "pastFeminine" - formBottomLeft = "pastNeutral" - formBottomRight = "pastPlural" - } - } else if controllerLanguage == "Swedish" { - let svTenses = svGetConjugationState() - - formTopLeft = svTenses[0] - formTopRight = svTenses[1] - formBottomLeft = svTenses[2] - formBottomRight = svTenses[3] - } else if controllerLanguage == "English" { - if formsDisplayDimensions == .view2x2 { - let enTenses = enGetConjugationState() - - formTopLeft = enTenses[0] - formTopRight = enTenses[1] - formBottomLeft = enTenses[2] - formBottomRight = enTenses[3] - } else if formsDisplayDimensions == .view1x2 { - let enTenses = enGetConjugationState() - - formLeft = enTenses[0] - formRight = enTenses[1] - } else if formsDisplayDimensions == .view3x1 { - formTop = "presPart" - formMiddle = "pastSimpCont" - formBottom = "pastSimpPluralCont" - } - } - } - - /// Sets the label of the conjugation state and assigns the current tenses that are accessed to label the buttons. - func setVerbConjugationState() { - // Assign the conjugations that will be selectable. - assignVerbConjStates() - - // Set the view title and its labels. - var conjugationTitleFxn: () -> String = deGetConjugationTitle - var conjugationLabelsFxn: () -> Void = deSetConjugationLabels - if let titleFxn = keyboardConjTitleDict[controllerLanguage] as? () -> String { - conjugationTitleFxn = titleFxn - } - if let labelsFxn = keyboardConjLabelDict[controllerLanguage] as? () -> Void { - conjugationLabelsFxn = labelsFxn - } - - if !["Russian", "Swedish"].contains(controllerLanguage) { - commandBar.text = conjugationTitleFxn() - conjugationLabelsFxn() - } else if controllerLanguage == "Russian" { - commandBar.text = ruGetConjugationTitle() - ruSetConjugationLabels() - } else if controllerLanguage == "Swedish" { - commandBar.text = svGetConjugationTitle() - svSetConjugationLabels() - } - - // Assign labels that have been set by SetConjugationLabels function. - formLblFPS.setTitle(" " + (formLabelsDict["FPS"] ?? ""), for: .normal) - formLblSPS.setTitle(" " + (formLabelsDict["SPS"] ?? ""), for: .normal) - formLblTPS.setTitle(" " + (formLabelsDict["TPS"] ?? ""), for: .normal) - formLblFPP.setTitle(" " + (formLabelsDict["FPP"] ?? ""), for: .normal) - formLblSPP.setTitle(" " + (formLabelsDict["SPP"] ?? ""), for: .normal) - formLblTPP.setTitle(" " + (formLabelsDict["TPP"] ?? ""), for: .normal) - - formLblTop.setTitle(" " + (formLabelsDict["Top"] ?? ""), for: .normal) - formLblMiddle.setTitle(" " + (formLabelsDict["Middle"] ?? ""), for: .normal) - formLblBottom.setTitle(" " + (formLabelsDict["Bottom"] ?? ""), for: .normal) - - formLblTL.setTitle(" " + (formLabelsDict["TL"] ?? ""), for: .normal) - formLblTR.setTitle(" " + (formLabelsDict["TR"] ?? ""), for: .normal) - formLblBL.setTitle(" " + (formLabelsDict["BL"] ?? ""), for: .normal) - formLblBR.setTitle(" " + (formLabelsDict["BR"] ?? ""), for: .normal) - - formLblLeft.setTitle(" " + (formLabelsDict["Left"] ?? ""), for: .normal) - formLblRight.setTitle(" " + (formLabelsDict["Right"] ?? ""), for: .normal) - - switch formsDisplayDimensions { - case .view3x2: - allConjugations = [formFPS, formSPS, formTPS, formFPP, formSPP, formTPP] - allConjugationBtns = get3x2FormDisplayButtons() - case .view3x1: - allConjugations = [formTop, formMiddle, formBottom] - allConjugationBtns = get3x1FormDisplayButtons() - case .view2x2: - allConjugations = [formTopLeft, formTopRight, formBottomLeft, formBottomRight] - allConjugationBtns = get2x2FormDisplayButtons() - case .view1x2: - allConjugations = [formLeft, formRight] - allConjugationBtns = get1x2FormDisplayButtons() - case .view1x1: - break - } - - // Populate conjugation view buttons. - let outputCols = allConjugations - let conjugationsToDisplay = LanguageDBManager.shared.queryVerb(of: verbToConjugate, with: outputCols) - for index in 0 ..< allConjugations.count { - if conjugationsToDisplay[index] == "" { - // Assign the invalid message if the conjugation isn't present in the directory. - styleBtn(btn: allConjugationBtns[index], title: invalidCommandMsg, radius: keyCornerRadius) - } else { - conjugationToDisplay = conjugationsToDisplay[index] - if controllerLanguage == "English" { - if index == 0 && allConjugations[index] == "presTPS" { - let simple = LanguageDBManager.shared.queryVerb(of: verbToConjugate, with: ["presSimp"]) - conjugationToDisplay = simple[0] + "/" + conjugationToDisplay - } else if index == 1 && allConjugations[index] == "presPart" { - if enConjugationState == .present { - conjugationToDisplay = "am/are/is " + conjugationToDisplay - } else { - conjugationToDisplay = "was/were " + conjugationToDisplay - } - } else if index == 2 && allConjugations[index] == "presPerfTPS" { - conjugationToDisplay = "have/" + conjugationToDisplay - } else if index == 3 && allConjugations[index] == "presPerfTPSCont" { - conjugationToDisplay = "have/" + conjugationToDisplay - } - } - if inputWordIsCapitalized { - if controllerLanguage == "English", conjugationToDisplay.count(of: " ") > 0 { - conjugationToDisplay = conjugationToDisplay.capitalize() - } else if deConjugationState != .indicativePerfect { - conjugationToDisplay = conjugationToDisplay.capitalized - } - } - styleBtn(btn: allConjugationBtns[index], title: conjugationToDisplay, radius: keyCornerRadius) - } - } - } - - /// Sets the label of the conjugation state and assigns pronoun conjugations for the given case. - func setCaseDeclensionState() { - // Set the view title and its labels. - var conjugationTitleFxn: () -> String = deGetCaseDeclensionTitle - var conjugationLabelsFxn: () -> Void = deSetCaseDeclensionLabels - var conjugationsFxn: () -> Void = deSetCaseDeclensions - if deCaseVariantDeclensionState != .disabled { - conjugationsFxn = deSetCaseVariantDeclensions - } - - if controllerLanguage == "Russian" { - conjugationTitleFxn = ruGetCaseDeclensionTitle - conjugationLabelsFxn = ruSetCaseDeclensionLabels - conjugationsFxn = ruSetCaseDeclensions - } - - commandBar.text = conjugationTitleFxn() - conjugationLabelsFxn() - conjugationsFxn() - - // Assign labels that have been set by SetCaseDeclensionLabels function. - formLblFPS.setTitle(" " + (formLabelsDict["FPS"] ?? ""), for: .normal) - formLblSPS.setTitle(" " + (formLabelsDict["SPS"] ?? ""), for: .normal) - formLblTPS.setTitle(" " + (formLabelsDict["TPS"] ?? ""), for: .normal) - formLblFPP.setTitle(" " + (formLabelsDict["FPP"] ?? ""), for: .normal) - formLblSPP.setTitle(" " + (formLabelsDict["SPP"] ?? ""), for: .normal) - formLblTPP.setTitle(" " + (formLabelsDict["TPP"] ?? ""), for: .normal) - - formLblTop.setTitle(" " + (formLabelsDict["Top"] ?? ""), for: .normal) - formLblMiddle.setTitle(" " + (formLabelsDict["Middle"] ?? ""), for: .normal) - formLblBottom.setTitle(" " + (formLabelsDict["Bottom"] ?? ""), for: .normal) - - formLblTL.setTitle(" " + (formLabelsDict["TL"] ?? ""), for: .normal) - formLblTR.setTitle(" " + (formLabelsDict["TR"] ?? ""), for: .normal) - formLblBL.setTitle(" " + (formLabelsDict["BL"] ?? ""), for: .normal) - formLblBR.setTitle(" " + (formLabelsDict["BR"] ?? ""), for: .normal) - - formLblLeft.setTitle(" " + (formLabelsDict["Left"] ?? ""), for: .normal) - formLblRight.setTitle(" " + (formLabelsDict["Right"] ?? ""), for: .normal) - - switch formsDisplayDimensions { - case .view3x2: - allConjugations = [formFPS, formSPS, formTPS, formFPP, formSPP, formTPP] - allConjugationBtns = get3x2FormDisplayButtons() - case .view3x1: - allConjugations = [formTop, formMiddle, formBottom] - allConjugationBtns = get3x1FormDisplayButtons() - case .view2x2: - allConjugations = [formTopLeft, formTopRight, formBottomLeft, formBottomRight] - allConjugationBtns = get2x2FormDisplayButtons() - case .view1x2: - allConjugations = [formLeft, formRight] - allConjugationBtns = get1x2FormDisplayButtons() - case .view1x1: - break - } - - // Populate conjugation view buttons. - for index in 0 ..< allConjugations.count { - styleBtn(btn: allConjugationBtns[index], title: allConjugations[index], radius: keyCornerRadius) - } - } - /// Displays an annotation instead of the translate auto action button given the word that was just typed or selected. func conditionallyDisplayAnnotation() { if [.idle, .alreadyPlural, .invalid].contains(commandState) { @@ -1687,18 +1102,12 @@ class KeyboardViewController: UIInputViewController { @objc func shiftLeft() { if commandState == .displayInformation { tipView?.updatePrevious() - } else { - conjugationStateLeft() - loadKeys() } } @objc func shiftRight() { if commandState == .displayInformation { tipView?.updateNext() - } else { - conjugationStateRight() - loadKeys() } } @@ -2012,6 +1421,10 @@ class KeyboardViewController: UIInputViewController { /// Loads the keys given the current constraints. func loadKeys() { + // Early returns for dynamic views + if commandState == .dynamicConjugation || commandState == .selectCaseDeclension { + return + } // The name of the language keyboard that's referencing KeyboardViewController. controllerLanguage = classForCoder.description().components(separatedBy: ".KeyboardViewController")[0] if let userDefaults = UserDefaults(suiteName: "group.be.scri.userDefaultsContainer") { @@ -2057,15 +1470,17 @@ class KeyboardViewController: UIInputViewController { // Drop non-unique values in case the lexicon has added words that were already present. LanguageDBManager.shared.deleteNonUniqueAutocompletions() + + // Load plural words for the current language + if let allPlurals = LanguageDBManager.shared.queryAllPluralForms() { + pluralWords = Set(allPlurals.map { $0.lowercased() }) + } } setKeyboard() setCommaAndPeriodKeysConditionally() setCommandBackground() setCommandBtns() - if controllerLanguage != "Indonesian" { - setConjugationBtns() - } // Clear annotation state if a keyboard state change dictates it. if !annotationState { @@ -2120,9 +1535,72 @@ class KeyboardViewController: UIInputViewController { } } - if ![ - .selectVerbConjugation, .selectCaseDeclension, .displayInformation - ].contains(commandState) { // normal keyboard view + // Always hide old form buttons first + formKeyFPS?.isHidden = true + formKeySPS?.isHidden = true + formKeyTPS?.isHidden = true + formKeyFPP?.isHidden = true + formKeySPP?.isHidden = true + formKeyTPP?.isHidden = true + formKeyTop?.isHidden = true + formKeyMiddle?.isHidden = true + formKeyBottom?.isHidden = true + formKeyTL?.isHidden = true + formKeyTR?.isHidden = true + formKeyBL?.isHidden = true + formKeyBR?.isHidden = true + formKeyLeft?.isHidden = true + formKeyRight?.isHidden = true + formKeySingle?.isHidden = true + formLblFPS?.isHidden = true + formLblSPS?.isHidden = true + formLblTPS?.isHidden = true + formLblFPP?.isHidden = true + formLblSPP?.isHidden = true + formLblTPP?.isHidden = true + formLblTop?.isHidden = true + formLblMiddle?.isHidden = true + formLblBottom?.isHidden = true + formLblTL?.isHidden = true + formLblTR?.isHidden = true + formLblBL?.isHidden = true + formLblBR?.isHidden = true + formLblLeft?.isHidden = true + formLblRight?.isHidden = true + formLblSingle?.isHidden = true + shiftFormsDisplayLeft?.isHidden = true + shiftFormsDisplayRight?.isHidden = true + + // Handle displayInformation separately + if commandState == .displayInformation { + for view in [stackViewNum, stackView0, stackView1, stackView2, stackView3] { + view?.isUserInteractionEnabled = false + } + + scribeKey.toEscape() + scribeKey.setPartialShadow() + scribeKey.setPartialCornerRadius() + + commandBar.backgroundColor = commandBarColor + commandBar.textColor = keyCharColor + commandBar.set() + commandBar.setCornerRadiusAndShadow() + hideAutoActionPartitions() + + deactivateBtn(btn: conjugateKey) + deactivateBtn(btn: translateKey) + deactivateBtn(btn: pluralKey) + deactivateBtn(btn: phoneEmojiKey0) + deactivateBtn(btn: phoneEmojiKey1) + deactivateBtn(btn: padEmojiKey0) + deactivateBtn(btn: padEmojiKey1) + deactivateBtn(btn: padEmojiKey2) + + setInformationState() + return // Return here to skip normal keyboard setup + } + + // Normal keyboard view for view in [stackViewNum, stackView0, stackView1, stackView2, stackView3] { view?.isUserInteractionEnabled = true view?.isLayoutMarginsRelativeArrangement = true @@ -2162,8 +1640,6 @@ class KeyboardViewController: UIInputViewController { scribeKey.setTitle("", for: .normal) commandBar.set() // set here so text spacing is appropriate conditionallyShowAutoActionPartitions() - deactivateConjugationDisplay(deactivateShiftForms: true) - if DeviceType.isPhone { translateKey.titleLabel?.font = .systemFont(ofSize: scribeKey.frame.height * scalarCommandKeyHeightPhone) conjugateKey.titleLabel?.font = .systemFont(ofSize: scribeKey.frame.height * scalarCommandKeyHeightPhone) @@ -2181,12 +1657,11 @@ class KeyboardViewController: UIInputViewController { } else { styleBtn(btn: conjugateKey, title: conjugateKeyLbl, radius: commandKeyCornerRadius) styleBtn(btn: pluralKey, title: pluralKeyLbl, radius: commandKeyCornerRadius) -} + } scribeKey.toEscape() scribeKey.setFullCornerRadius() scribeKey.setFullShadow() - commandBar.hide() hideAutoActionPartitions() } else { @@ -2195,7 +1670,6 @@ class KeyboardViewController: UIInputViewController { deactivateBtn(btn: pluralKey) } deactivateBtn(btn: translateKey) - deactivateBtn(btn: phoneEmojiKey0) deactivateBtn(btn: phoneEmojiKey1) deactivateBtn(btn: padEmojiKey0) @@ -2232,52 +1706,6 @@ class KeyboardViewController: UIInputViewController { } setKeyPadding() - - } else { - // Load conjugation view. - for view in [stackViewNum, stackView0, stackView1, stackView2, stackView3] { - view?.isUserInteractionEnabled = false - } - - scribeKey.toEscape() - scribeKey.setPartialShadow() - scribeKey.setPartialCornerRadius() - - commandBar.backgroundColor = commandBarColor - commandBar.textColor = keyCharColor - commandBar.set() - commandBar.setCornerRadiusAndShadow() - hideAutoActionPartitions() - - deactivateBtn(btn: conjugateKey) - deactivateBtn(btn: translateKey) - deactivateBtn(btn: pluralKey) - - deactivateBtn(btn: phoneEmojiKey0) - deactivateBtn(btn: phoneEmojiKey1) - deactivateBtn(btn: padEmojiKey0) - deactivateBtn(btn: padEmojiKey1) - deactivateBtn(btn: padEmojiKey2) - - activateConjugationDisplay() - styleBtn(btn: shiftFormsDisplayLeft, title: "", radius: keyCornerRadius) - styleIconBtn(btn: shiftFormsDisplayLeft, - color: ![.bothInactive, .leftInactive].contains(conjViewShiftButtonsState) ? keyCharColor : commandBarPlaceholderColor, - iconName: "chevron.left") - styleBtn(btn: shiftFormsDisplayRight, title: "", radius: keyCornerRadius) - styleIconBtn(btn: shiftFormsDisplayRight, - color: ![.bothInactive, .rightInactive].contains(conjViewShiftButtonsState) ? keyCharColor : commandBarPlaceholderColor, - iconName: "chevron.right") - - if commandState == .selectVerbConjugation { - setVerbConjugationState() - } else if commandState == .displayInformation { - deactivateConjugationDisplay(deactivateShiftForms: false) // Ensures that previously displayed buttons disappear before showing the info view - setInformationState() - } else { - setCaseDeclensionState() - } - } } func setCommaAndPeriodKeysConditionally() { @@ -2361,11 +1789,20 @@ class KeyboardViewController: UIInputViewController { case "Scribe": if [.translate, .conjugate, - .selectVerbConjugation, .selectCaseDeclension, - .plural].contains(commandState) { // escape + .plural, + .dynamicConjugation].contains(commandState) { // escape + + // If closing dynamic conjugation, remove the view + if commandState == .dynamicConjugation || commandState == .selectCaseDeclension { + children.forEach { child in + if child is DynamicConjugationViewController { + child.removeFromParent() + child.view.removeFromSuperview() + } + } + } commandState = .idle - deCaseVariantDeclensionState = .disabled } else if [.idle, .alreadyPlural, .invalid].contains(commandState) { // ScribeKey commandState = .selectCommand activateBtn(btn: translateKey) @@ -2373,7 +1810,6 @@ class KeyboardViewController: UIInputViewController { activateBtn(btn: pluralKey) } else { // escape commandState = .idle - deCaseVariantDeclensionState = .disabled } loadKeys() @@ -2390,11 +1826,11 @@ class KeyboardViewController: UIInputViewController { } else if commandState == .translate { queryTranslation(commandBar: commandBar) } else if commandState == .conjugate { - resetVerbConjugationState() let conjugationTblTriggered = triggerVerbConjugation(commandBar: commandBar) if conjugationTblTriggered { - commandState = .selectVerbConjugation - loadKeys() // go to conjugation view + // loadKeys() // go to conjugation view + commandState = .dynamicConjugation + showDynamicConjugationView(verb: verbToConjugate) return } else { commandState = .invalid @@ -2458,11 +1894,11 @@ class KeyboardViewController: UIInputViewController { case "Conjugate": if let selectedText = proxy.selectedText { - resetVerbConjugationState() let verbInTable = isVerbInConjugationTable(queriedVerbToConjugate: selectedText) if verbInTable { - commandState = .selectVerbConjugation - loadKeys() // go to conjugation view + commandState = .dynamicConjugation + // Show dynamic conjugation view instead of old hardcoded one + showDynamicConjugationView(verb: verbToConjugate) return } else { commandState = .invalid @@ -2528,93 +1964,6 @@ class KeyboardViewController: UIInputViewController { case "shiftFormsDisplayRight": shiftRight() - case "firstPersonSingular": - returnConjugation(keyPressed: sender, requestedForm: formFPS) - loadKeys() - - case "secondPersonSingular": - returnConjugation(keyPressed: sender, requestedForm: formSPS) - loadKeys() - - case "thirdPersonSingular": - returnConjugation(keyPressed: sender, requestedForm: formTPS) - loadKeys() - - case "firstPersonPlural": - returnConjugation(keyPressed: sender, requestedForm: formFPP) - loadKeys() - - case "secondPersonPlural": - returnConjugation(keyPressed: sender, requestedForm: formSPP) - loadKeys() - - case "thirdPersonPlural": - returnConjugation(keyPressed: sender, requestedForm: formTPP) - loadKeys() - - case "formTop": - returnConjugation(keyPressed: sender, requestedForm: formTop) - loadKeys() - - case "formMiddle": - returnConjugation(keyPressed: sender, requestedForm: formMiddle) - loadKeys() - - case "formBottom": - returnConjugation(keyPressed: sender, requestedForm: formBottom) - loadKeys() - - case "formTopLeft": - if controllerLanguage == "English" && enConjugationState == .present { - enConjugationState = .presSimp - conjViewShiftButtonsState = .bothInactive - } else { - returnConjugation(keyPressed: sender, requestedForm: formTopLeft) - } - loadKeys() - - case "formTopRight": - if controllerLanguage == "English" { - if enConjugationState == .present { - enConjugationState = .presCont - conjViewShiftButtonsState = .bothInactive - } else if enConjugationState == .past { - enConjugationState = .pastCont - conjViewShiftButtonsState = .bothInactive - } else { - returnConjugation(keyPressed: sender, requestedForm: formTopRight) - } - } else { - returnConjugation(keyPressed: sender, requestedForm: formTopRight) - } - loadKeys() - - case "formBottomLeft": - if controllerLanguage == "English" && enConjugationState == .present { - enConjugationState = .presPerf - conjViewShiftButtonsState = .bothInactive - } else { - returnConjugation(keyPressed: sender, requestedForm: formBottomLeft) - } - loadKeys() - - case "formBottomRight": - if controllerLanguage == "English" && enConjugationState == .present { - enConjugationState = .presPerfCont - conjViewShiftButtonsState = .bothInactive - } else { - returnConjugation(keyPressed: sender, requestedForm: formBottomRight) - } - loadKeys() - - case "formLeft": - returnConjugation(keyPressed: sender, requestedForm: formLeft) - loadKeys() - - case "formRight": - returnConjugation(keyPressed: sender, requestedForm: formRight) - loadKeys() - case "AutoAction0": executeAutoAction(keyPressed: translateKey) @@ -2687,9 +2036,9 @@ class KeyboardViewController: UIInputViewController { let prepForm = LanguageDBManager.shared.queryPrepForm(of: wordToCheck.lowercased())[0] hasPrepForm = !prepForm.isEmpty if hasPrepForm { - resetCaseDeclensionState() + prepAnnotationForm = prepForm commandState = .selectCaseDeclension - loadKeys() // go to conjugation view + showDynamicDeclensionView(preposition: wordToCheck) return } else { return @@ -2918,7 +2267,7 @@ class KeyboardViewController: UIInputViewController { } // Remove tipview if it's present. - if formsDisplayDimensions != .view1x1, tipView != nil { + if commandState != .displayInformation && formsDisplayDimensions != .view1x1, tipView != nil { tipView?.removeFromSuperview() tipView = nil } @@ -2963,6 +2312,112 @@ class KeyboardViewController: UIInputViewController { } } + func showDynamicConjugationView(verb: String) { + // Remove any existing view + children.forEach { child in + if child is DynamicConjugationViewController { + child.removeFromParent() + child.view.removeFromSuperview() + } + } + + // Hide the command buttons + deactivateBtn(btn: translateKey) + deactivateBtn(btn: conjugateKey) + deactivateBtn(btn: pluralKey) + hideAutoActionPartitions() + + // Update Scribe key to escape mode + scribeKey.toEscape() + scribeKey.setPartialCornerRadius() + scribeKey.setPartialShadow() + + // Set up command bar with verb title + commandBar.set() + commandBar.setCornerRadiusAndShadow() + commandBar.backgroundColor = commandBarColor + + // Build conjugation cases array + guard let cases = NavigationBuilder.buildConjugationCases( + verb: verb, + language: languagesAbbrDict[controllerLanguage] ?? "" + ) else { + return + } + + let conjugationVC = DynamicConjugationViewController( + linearCases: cases, + commandBar: commandBar, + startingIndex: 0 // Always start at first tense + ) + + addChild(conjugationVC) + + conjugationVC.view.frame = CGRect( + x: 0, + y: commandBar.frame.maxY, + width: view.bounds.width, + height: view.bounds.height - commandBar.frame.maxY + ) + + view.addSubview(conjugationVC.view) + conjugationVC.didMove(toParent: self) + } + + func showDynamicDeclensionView(preposition: String) { + // Remove any existing view + children.forEach { child in + if child is DynamicConjugationViewController { + child.removeFromParent() + child.view.removeFromSuperview() + } + } + + // Set up UI state + deactivateBtn(btn: translateKey) + deactivateBtn(btn: conjugateKey) + deactivateBtn(btn: pluralKey) + hideAutoActionPartitions() + + scribeKey.toEscape() + scribeKey.setPartialCornerRadius() + scribeKey.setPartialShadow() + + commandBar.set() + commandBar.setCornerRadiusAndShadow() + commandBar.backgroundColor = commandBarColor + + // Build declension cases array + let language = languagesAbbrDict[controllerLanguage] ?? "" + guard let cases = NavigationBuilder.getDeclensionCases(language: language) else { + return + } + + // Find starting index + let startingIndex = NavigationBuilder.findStartingCaseIndex( + prepForm: prepAnnotationForm, + language: language + ) + + let declensionVC = DynamicConjugationViewController( + linearCases: cases, + commandBar: commandBar, + startingIndex: startingIndex + ) + + addChild(declensionVC) + + declensionVC.view.frame = CGRect( + x: 0, + y: commandBar.frame.maxY, + width: view.bounds.width, + height: view.bounds.height - commandBar.frame.maxY + ) + + view.addSubview(declensionVC.view) + declensionVC.didMove(toParent: self) + } + /// Defines events that occur given multiple presses of a single key. /// /// - Parameters diff --git a/Keyboards/KeyboardsBase/NavigationStructure.swift b/Keyboards/KeyboardsBase/NavigationStructure.swift new file mode 100644 index 00000000..f5fa153a --- /dev/null +++ b/Keyboards/KeyboardsBase/NavigationStructure.swift @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +/** + * Recursive navigation structure for dynamic conjugation and declension views. + * Supports arbitrary depth navigation. + */ + +import Foundation + +/// Represents a single option in the navigation +enum NavigationNode { + case nextLevel(NavigationLevel, displayValue: String?) // Navigate deeper, with optional display value + case finalValue(String) // Terminal node - insert this text +} + +/// Represents a level in the navigation hierarchy +struct NavigationLevel { + let title: String // Title for command bar + let options: [(label: String, node: NavigationNode)] // Buttons to display +} + +/// Builds navigation trees for conjugations and declensions +struct NavigationBuilder { + + /// Builds conjugation navigation tree from ConjugationManager data + /// Returns array of tense levels for linear navigation + static func buildConjugationCases( + verb: String, + language: String + ) -> [NavigationLevel]? { + guard let conjugationData = ConjugationManager.shared.getConjugations( + verb: verb, + language: language + ) else { + return nil + } + + var tenseLevels: [NavigationLevel] = [] + + for (tenseTitle, conjugationTypes) in conjugationData { + if conjugationTypes.count == 1 { + // Single type: show forms directly + let (_, forms) = conjugationTypes[0] + let formOptions = forms.map { (pronoun, conjugatedForm) in + (label: pronoun, node: NavigationNode.finalValue(conjugatedForm)) + } + + tenseLevels.append(NavigationLevel( + title: "\(tenseTitle): \(verb)", + options: formOptions + )) + + } else { + // Multiple types: create type selection buttons with display values + var typeOptions: [(label: String, node: NavigationNode)] = [] + + for (typeTitle, forms) in conjugationTypes { + // Create display value from first 2-3 forms + let displayValue = forms.prefix(3).map { $0.1 }.joined(separator: "/") + + let formOptions = forms.map { (pronoun, conjugatedForm) in + (label: pronoun, node: NavigationNode.finalValue(conjugatedForm)) + } + let formLevel = NavigationLevel( + title: "\(tenseTitle) - \(typeTitle): \(verb)", + options: formOptions + ) + typeOptions.append((label: typeTitle, node: .nextLevel(formLevel, displayValue: displayValue))) + } + + tenseLevels.append(NavigationLevel( + title: "\(tenseTitle): \(verb)", + options: typeOptions + )) + } + } + + return tenseLevels + } + + /// Returns array of all declension cases for linear navigation + static func getDeclensionCases(language: String) -> [NavigationLevel]? { + return DeclensionManager.shared.loadDeclensions(language: language) + } + + /// Finds the starting index for a declension case based on prep form + static func findStartingCaseIndex(prepForm: String, language: String) -> Int { + if language == "de" { + if prepForm.contains("Acc") { + return 0 // Akkusativ Definitpronomen + } else if prepForm.contains("Dat") { + return 5 // Dativ Definitpronomen + } else { + return 10 // Genitiv Definitpronomen + } + } else if language == "ru" { + if prepForm.contains("Acc") { + return 0 + } else if prepForm.contains("Dat") { + return 1 + } else if prepForm.contains("Gen") { + return 2 + } else if prepForm.contains("Ins") { + return 3 + } else { + return 4 + } + } + return 0 + } +} diff --git a/Keyboards/KeyboardsBase/ScribeFunctionality/Annotate.swift b/Keyboards/KeyboardsBase/ScribeFunctionality/Annotate.swift index f6eaa869..b16a06d2 100644 --- a/Keyboards/KeyboardsBase/ScribeFunctionality/Annotate.swift +++ b/Keyboards/KeyboardsBase/ScribeFunctionality/Annotate.swift @@ -32,16 +32,70 @@ let prepAnnotationConversionDict = [ "Russian": ["Acc": "Вин", "Dat": "Дат", "Gen": "Род", "Loc": "Мес", "Pre": "Пре", "Ins": "Инс"] ] +// Converts full gender names to abbreviations (e.g., "feminine" → "F") +func convertFullGenderToAbbr(_ genderFull: String) -> String { + let genderMap: [String: String] = [ + "feminine": "F", + "masculine": "M", + "neuter": "N", + "common": "C", + "common of two genders": "C", + "PL": "PL" + ] + + return genderMap[genderFull.lowercased()] ?? genderFull +} + +// Converts full preposition to abbreviations +func convertFullPrepositionToAbbr(_ prepositionFull: String) -> String { + let prepositionMap: [String: String] = [ + "genitive case": "Gen", + "accusative case": "Acc", + "dative case": "Dat", + "locative case": "Loc", + "prepositional case": "Pre", + "instrumental case": "Ins" + ] + + return prepositionMap[prepositionFull.lowercased()] ?? prepositionFull +} + /// The base function for annotation that's accessed by `typedWordAnnotation`. /// /// - Parameters /// - wordToAnnotate: the word that an annotation should be created for. /// - KVC: the keyboard view controller. func wordAnnotation(wordToAnnotate: String, KVC: KeyboardViewController) { + var genderAnnotations: [String] = [] + var pluralAnnotation: String? + + // Get gender(s) let nounForm = LanguageDBManager.shared.queryNounForm(of: wordToAnnotate)[0] + if !nounForm.isEmpty { + // nounForm might already be "M/F" if multiple genders found + genderAnnotations = nounForm.components(separatedBy: "/") + } + + // Check if plural + if let pluralWords = pluralWords, pluralWords.contains(wordToAnnotate.lowercased()) { + pluralAnnotation = "PL" + } + + // Combine: gender(s) first, then PL if applicable + var allAnnotations = genderAnnotations + if let pl = pluralAnnotation, !allAnnotations.contains("PL") { + allAnnotations.append(pl) + } + + // Join back with "/" + let combinedNounForm = allAnnotations.joined(separator: "/") + prepAnnotationForm = LanguageDBManager.shared.queryPrepForm(of: wordToAnnotate.lowercased())[0] + if !prepAnnotationForm.isEmpty { + prepAnnotationForm = convertFullPrepositionToAbbr(prepAnnotationForm) + } - hasNounForm = !nounForm.isEmpty + hasNounForm = !combinedNounForm.isEmpty hasPrepForm = !prepAnnotationForm.isEmpty annotationsToAssign = [String]() @@ -83,10 +137,10 @@ func wordAnnotation(wordToAnnotate: String, KVC: KeyboardViewController) { ) } else { if hasNounForm { - if !nounForm.contains("/") { - annotationsToAssign.append(nounForm) + if !combinedNounForm.contains("/") { + annotationsToAssign.append(combinedNounForm) } else { - for a in nounForm.components(separatedBy: "/") { + for a in combinedNounForm.components(separatedBy: "/") { annotationsToAssign.append(a) } } @@ -115,6 +169,11 @@ func wordAnnotation(wordToAnnotate: String, KVC: KeyboardViewController) { var annotationSep = UIView() var annotationToDisplay: String = annotationsToAssign[i] + if ["feminine", "masculine", "neuter", "common"].contains(annotationToDisplay.lowercased()) { + annotationToDisplay = convertFullGenderToAbbr(annotationToDisplay) + annotationsToAssign[i] = annotationToDisplay // Update the array too + } + if nounFormToColorDict.keys.contains(annotationToDisplay) { if numAnnotations > 3 { annotationBtn.setAnnotationSize(width: annotationWidth, height: annotationHeight, fontSize: annotationHeight * 0.4) @@ -235,9 +294,29 @@ func typedWordAnnotation(KVC: KeyboardViewController) { /// - index: the auto action key index that the annotation should be set for. /// - KVC: the keyboard view controller. func autoActionAnnotation(autoActionWord: String, index: Int, KVC: KeyboardViewController) { + var genderAnnotations: [String] = [] + var pluralAnnotation: String? + + // Get gender(s) let nounForm = LanguageDBManager.shared.queryNounForm(of: autoActionWord)[0] + if !nounForm.isEmpty { + genderAnnotations = nounForm.components(separatedBy: "/") + } + + // Check if plural + if let pluralWords = pluralWords, pluralWords.contains(autoActionWord.lowercased()) { + pluralAnnotation = "PL" + } + + // Combine + var allAnnotations = genderAnnotations + if let pl = pluralAnnotation, !allAnnotations.contains("PL") { + allAnnotations.append(pl) + } - hasNounForm = !nounForm.isEmpty + let combinedNounForm = allAnnotations.joined(separator: "/") + + hasNounForm = !combinedNounForm.isEmpty newAutoActionAnnotationsToAssign = [String]() newAutoActionAnnotationBtns = [UIButton]() @@ -248,10 +327,10 @@ func autoActionAnnotation(autoActionWord: String, index: Int, KVC: KeyboardViewC let annotationHeight = KVC.scribeKey.frame.height * 0.1 if hasNounForm { - if !nounForm.contains("/") { - newAutoActionAnnotationsToAssign.append(nounForm) + if !combinedNounForm.contains("/") { + newAutoActionAnnotationsToAssign.append(combinedNounForm) } else { - for a in nounForm.components(separatedBy: "/") { + for a in combinedNounForm.components(separatedBy: "/") { newAutoActionAnnotationsToAssign.append(a) } } @@ -264,6 +343,12 @@ func autoActionAnnotation(autoActionWord: String, index: Int, KVC: KeyboardViewC for i in 0 ..< numAnnotations { let annotationBtn = Annotation() var annotationSep = UIView() + var annotationToDisplay = newAutoActionAnnotationsToAssign[i] + + if ["feminine", "masculine", "neuter", "common"].contains(annotationToDisplay.lowercased()) { + annotationToDisplay = convertFullGenderToAbbr(annotationToDisplay) + newAutoActionAnnotationsToAssign[i] = annotationToDisplay + } if numAnnotations > 3 { annotationBtn.setAnnotationSize( diff --git a/Keyboards/KeyboardsBase/ScribeFunctionality/Conjugate.swift b/Keyboards/KeyboardsBase/ScribeFunctionality/Conjugate.swift index d3eadf4b..09c71208 100644 --- a/Keyboards/KeyboardsBase/ScribeFunctionality/Conjugate.swift +++ b/Keyboards/KeyboardsBase/ScribeFunctionality/Conjugate.swift @@ -6,178 +6,6 @@ import UIKit -// Dictionary for accessing keyboard conjugation state. -let keyboardConjTitleDict: [String: Any] = [ - "English": enGetConjugationTitle, - "French": frGetConjugationTitle, - "German": deGetConjugationTitle, - "Italian": itGetConjugationTitle, - "Portuguese": ptGetConjugationTitle, - "Russian": ruGetConjugationTitle, - "Spanish": esGetConjugationTitle, - "Swedish": svGetConjugationTitle -] - -// Dictionary for accessing keyboard conjugation state. -let keyboardConjStateDict: [String: Any] = [ - "English": enGetConjugationState, - "French": frGetConjugationState, - "German": deGetConjugationState, - "Italian": itGetConjugationState, - "Portuguese": ptGetConjugationState, - "Russian": ruGetConjugationState, - "Spanish": esGetConjugationState, - "Swedish": svGetConjugationState -] - -// Dictionary for accessing keyboard conjugation state. -let keyboardConjLabelDict: [String: Any] = [ - "English": enSetConjugationLabels, - "French": frSetConjugationLabels, - "German": deSetConjugationLabels, - "Italian": itSetConjugationLabels, - "Portuguese": ptSetConjugationLabels, - "Russian": ruSetConjugationLabels, - "Spanish": esSetConjugationLabels, - "Swedish": svSetConjugationLabels -] - -/// Returns a declension once a user presses a key in the conjugateView. -/// -/// - Parameters -/// - keyPressed: the button pressed as sender. -/// - requestedForm: the form that is triggered by the given key. -func returnDeclension(keyPressed: UIButton) { - let wordPressed = keyPressed.titleLabel?.text ?? "" - - var keyName = "" - if let originalKeyValue = keyPressed.layer.value(forKey: "original") as? String { - keyName = originalKeyValue - } - - if !(wordPressed.contains("/") || wordPressed.contains("∗")) { - proxy.insertText(wordPressed + getOptionalSpace()) - deCaseVariantDeclensionState = .disabled - autoActionState = .suggest - commandState = .idle - } else if controllerLanguage == "Russian" { // pronoun selection paths not implemented for Russian - proxy.insertText(wordPressed + getOptionalSpace()) - deCaseVariantDeclensionState = .disabled - autoActionState = .suggest - commandState = .idle - } else { - // Change to a new form selection display. - if deCaseVariantDeclensionState == .disabled { - if deCaseDeclensionState == .accusativePersonal { - if keyName == "secondPersonSingular" { - deCaseVariantDeclensionState = .accusativePersonalSPS - } else if keyName == "thirdPersonSingular" { - deCaseVariantDeclensionState = .accusativePersonalTPS - } - } else if deCaseDeclensionState == .dativePersonal { - if keyName == "secondPersonSingular" { - deCaseVariantDeclensionState = .dativePersonalSPS - } else if keyName == "thirdPersonSingular" { - deCaseVariantDeclensionState = .dativePersonalTPS - } - } else if deCaseDeclensionState == .genitivePersonal { - if keyName == "secondPersonSingular" { - deCaseVariantDeclensionState = .genitivePersonalSPS - } else if keyName == "thirdPersonSingular" { - deCaseVariantDeclensionState = .genitivePersonalTPS - } - } else if deCaseDeclensionState == .accusativePossessive { - if keyName == "firstPersonSingular" { - deCaseVariantDeclensionState = .accusativePossessiveFPS - } else if keyName == "secondPersonSingular" { - deCaseVariantDeclensionState = .accusativePossessiveSPS - } else if keyName == "thirdPersonSingular" { - deCaseVariantDeclensionState = .accusativePossessiveTPS - } else if keyName == "firstPersonPlural" { - deCaseVariantDeclensionState = .accusativePossessiveFPP - } else if keyName == "secondPersonPlural" { - deCaseVariantDeclensionState = .accusativePossessiveSPP - } else if keyName == "thirdPersonPlural" { - deCaseVariantDeclensionState = .accusativePossessiveTPP - } - } else if deCaseDeclensionState == .dativePossessive { - if keyName == "firstPersonSingular" { - deCaseVariantDeclensionState = .dativePossessiveFPS - } else if keyName == "secondPersonSingular" { - deCaseVariantDeclensionState = .dativePossessiveSPS - } else if keyName == "thirdPersonSingular" { - deCaseVariantDeclensionState = .dativePossessiveTPS - } else if keyName == "firstPersonPlural" { - deCaseVariantDeclensionState = .dativePossessiveFPP - } else if keyName == "secondPersonPlural" { - deCaseVariantDeclensionState = .dativePossessiveSPP - } else if keyName == "thirdPersonPlural" { - deCaseVariantDeclensionState = .dativePossessiveTPP - } - } else if deCaseDeclensionState == .genitivePossessive { - if keyName == "firstPersonSingular" { - deCaseVariantDeclensionState = .genitivePossessiveFPS - } else if keyName == "secondPersonSingular" { - deCaseVariantDeclensionState = .genitivePossessiveSPS - } else if keyName == "thirdPersonSingular" { - deCaseVariantDeclensionState = .genitivePossessiveTPS - } else if keyName == "firstPersonPlural" { - deCaseVariantDeclensionState = .genitivePossessiveFPP - } else if keyName == "secondPersonPlural" { - deCaseVariantDeclensionState = .genitivePossessiveSPP - } else if keyName == "thirdPersonPlural" { - deCaseVariantDeclensionState = .genitivePossessiveTPP - } - } - } else { - if deCaseVariantDeclensionState == .accusativePossessiveSPS { - if keyName == "formLeft" { - deCaseVariantDeclensionState = .accusativePossessiveSPSInformal - } else if keyName == "formRight" { - deCaseVariantDeclensionState = .accusativePossessiveSPSFormal - } - } else if deCaseVariantDeclensionState == .accusativePossessiveTPS { - if keyName == "formTop" { - deCaseVariantDeclensionState = .accusativePossessiveTPSMasculine - } else if keyName == "formMiddle" { - deCaseVariantDeclensionState = .accusativePossessiveTPSFeminine - } else if keyName == "formBottom" { - deCaseVariantDeclensionState = .accusativePossessiveTPSNeutral - } - } else if deCaseVariantDeclensionState == .dativePossessiveSPS { - if keyName == "formLeft" { - deCaseVariantDeclensionState = .dativePossessiveSPSInformal - } else if keyName == "formRight" { - deCaseVariantDeclensionState = .dativePossessiveSPSFormal - } - } else if deCaseVariantDeclensionState == .dativePossessiveTPS { - if keyName == "formTop" { - deCaseVariantDeclensionState = .dativePossessiveTPSMasculine - } else if keyName == "formMiddle" { - deCaseVariantDeclensionState = .dativePossessiveTPSFeminine - } else if keyName == "formBottom" { - deCaseVariantDeclensionState = .dativePossessiveTPSNeutral - } - } else if deCaseVariantDeclensionState == .genitivePossessiveSPS { - if keyName == "formLeft" { - deCaseVariantDeclensionState = .genitivePossessiveSPSInformal - } else if keyName == "formRight" { - deCaseVariantDeclensionState = .genitivePossessiveSPSFormal - } - } else if deCaseVariantDeclensionState == .genitivePossessiveTPS { - if keyName == "formTop" { - deCaseVariantDeclensionState = .genitivePossessiveTPSMasculine - } else if keyName == "formMiddle" { - deCaseVariantDeclensionState = .genitivePossessiveTPSFeminine - } else if keyName == "formBottom" { - deCaseVariantDeclensionState = .genitivePossessiveTPSNeutral - } - } - } - commandState = .selectCaseDeclension - } -} - /// Triggers the display of the conjugation view for a valid verb in the command bar. /// /// - Parameters @@ -201,202 +29,13 @@ func triggerVerbConjugation(commandBar: UILabel) -> Bool { func isVerbInConjugationTable(queriedVerbToConjugate: String) -> Bool { verbToConjugate = String(queriedVerbToConjugate.trailingSpacesTrimmed) - // Check to see if the input was uppercase to return an uppercase conjugation. let firstLetter = verbToConjugate.substring(toIdx: 1) inputWordIsCapitalized = firstLetter.isUppercase verbToConjugate = verbToConjugate.lowercased() - let verbInTable = LanguageDBManager.shared.queryVerb(of: verbToConjugate)[0] - - return verbToConjugate == verbInTable -} - -/// Returns a conjugation once a user presses a key in the conjugateView or triggers a declension. -/// -/// - Parameters -/// - keyPressed: the button pressed as sender. -/// - requestedForm: the form that is triggered by the given key. -func returnConjugation(keyPressed: UIButton, requestedForm: String) { - let outputCols = [requestedForm] - - if commandState == .selectCaseDeclension { - returnDeclension(keyPressed: keyPressed) - return - } - - let wordPressed = keyPressed.titleLabel?.text ?? "" - var displayInfo = false - - // Select to change into a ToolTipView if the user selects a conjugation that is unavailable - if wordPressed == invalidCommandMsg { - displayInfo = true - } else if formsDisplayDimensions == .view3x2 { - wordToReturn = LanguageDBManager.shared.queryVerb(of: verbToConjugate, with: outputCols)[0] - potentialWordsToReturn = wordToReturn.components(separatedBy: " ") + // Try to query any conjugation form to verify verb exists + let columnName = (controllerLanguage == "Swedish") ? "verb" : "infinitive" + let results = LanguageDBManager.shared.queryVerb(of: verbToConjugate, with: [columnName]) - if inputWordIsCapitalized { - if controllerLanguage == "German", potentialWordsToReturn.count == 2 { - // Don't return a space as well as we have a perfect verb and the cursor will be between. - proxy.insertText(wordToReturn.capitalize()) - } else { - proxy.insertText(wordToReturn.capitalized + getOptionalSpace()) - } - } else { - proxy.insertText(wordToReturn + getOptionalSpace()) - } - } else if formsDisplayDimensions == .view3x1 { - wordToReturn = LanguageDBManager.shared.queryVerb(of: verbToConjugate, with: outputCols)[0] - potentialWordsToReturn = wordToReturn.components(separatedBy: getOptionalSpace()) - - if inputWordIsCapitalized { - if controllerLanguage == "English", potentialWordsToReturn.count > 1 { - // Don't return a space as well as we have a perfect verb and the cursor will be between. - proxy.insertText(wordToReturn.capitalize()) - } else { - proxy.insertText(wordToReturn.capitalized + getOptionalSpace()) - } - } else { - proxy.insertText(wordToReturn + getOptionalSpace()) - } - } else if formsDisplayDimensions == .view2x2 { - wordToReturn = LanguageDBManager.shared.queryVerb(of: verbToConjugate, with: outputCols)[0] - potentialWordsToReturn = wordToReturn.components(separatedBy: " ") - - if inputWordIsCapitalized { - if controllerLanguage == "English", potentialWordsToReturn.count > 1 { - // Don't return a space as well as we have a perfect verb and the cursor will be between. - proxy.insertText(wordToReturn.capitalize()) - } else { - proxy.insertText(wordToReturn.capitalized + getOptionalSpace()) - } - } else { - proxy.insertText(wordToReturn + getOptionalSpace()) - } - } else if formsDisplayDimensions == .view1x2 { - wordToReturn = LanguageDBManager.shared.queryVerb(of: verbToConjugate, with: outputCols)[0] - potentialWordsToReturn = wordToReturn.components(separatedBy: " ") - - if inputWordIsCapitalized { - if controllerLanguage == "English", potentialWordsToReturn.count > 1 { - // Don't return a space as well as we have a perfect verb and the cursor will be between. - proxy.insertText(wordToReturn.capitalize()) - } else { - proxy.insertText(wordToReturn.capitalized + getOptionalSpace()) - } - } else { - proxy.insertText(wordToReturn + getOptionalSpace()) - } - } - - if controllerLanguage == "German" { - if potentialWordsToReturn.count == 2 { - proxy.adjustTextPosition(byCharacterOffset: (potentialWordsToReturn[1].count) * -1) - } - } - - if displayInfo { - commandState = .displayInformation - } else { - autoActionState = .suggest - commandState = .idle - conjViewShiftButtonsState = .bothInactive - } -} - -/// Returns the conjugation state to its initial conjugation based on the keyboard language. -func resetVerbConjugationState() { - conjViewShiftButtonsState = .leftInactive - if controllerLanguage == "English" { - enConjugationState = .present - } else if controllerLanguage.prefix("French".count) == "French" { - frConjugationState = .indicativePresent - } else if controllerLanguage == "German" { - deConjugationState = .indicativePresent - } else if controllerLanguage == "Italian" { - itConjugationState = .present - } else if controllerLanguage == "Portuguese" { - ptConjugationState = .indicativePresent - } else if controllerLanguage == "Russian" { - ruConjugationState = .present - } else if controllerLanguage == "Spanish" { - esConjugationState = .indicativePresent - } else if controllerLanguage == "Swedish" { - svConjugationState = .active - } -} - -/// Returns the conjugation state to its initial conjugation based on the keyboard language. -func resetCaseDeclensionState() { - // The case conjugation display starts on the left most case. - if controllerLanguage == "German" { - if prepAnnotationForm.contains("Acc") { - conjViewShiftButtonsState = .leftInactive - deCaseDeclensionState = .accusativeDefinite - } else if prepAnnotationForm.contains("Dat") { - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativeDefinite - } else { - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .genitiveDefinite - } - } else if controllerLanguage == "Russian" { - if prepAnnotationForm.contains("Acc") { - conjViewShiftButtonsState = .leftInactive - ruCaseDeclensionState = .accusative - } else if prepAnnotationForm.contains("Dat") { - conjViewShiftButtonsState = .bothActive - ruCaseDeclensionState = .dative - } else if prepAnnotationForm.contains("Gen") { - conjViewShiftButtonsState = .bothActive - ruCaseDeclensionState = .genitive - } else if prepAnnotationForm.contains("Pre") { - conjViewShiftButtonsState = .rightInactive - ruCaseDeclensionState = .prepositional - } else { - conjViewShiftButtonsState = .bothActive - ruCaseDeclensionState = .instrumental - } - } -} - -/// Runs an action associated with the left view switch button of the conjugation state based on the keyboard language. -func conjugationStateLeft() { - if controllerLanguage == "English" { - enConjugationStateLeft() - } else if controllerLanguage.prefix("French".count) == "French" { - frConjugationStateLeft() - } else if controllerLanguage == "German" { - deConjugationStateLeft() - } else if controllerLanguage == "Italian" { - itConjugationStateLeft() - } else if controllerLanguage == "Portuguese" { - ptConjugationStateLeft() - } else if controllerLanguage == "Russian" { - ruConjugationStateLeft() - } else if controllerLanguage == "Spanish" { - esConjugationStateLeft() - } else if controllerLanguage == "Swedish" { - svConjugationStateLeft() - } -} - -/// Runs an action associated with the right view switch button of the conjugation state based on the keyboard language. -func conjugationStateRight() { - if controllerLanguage == "English" { - enConjugationStateRight() - } else if controllerLanguage.prefix("French".count) == "French" { - frConjugationStateRight() - } else if controllerLanguage == "German" { - deConjugationStateRight() - } else if controllerLanguage == "Italian" { - itConjugationStateRight() - } else if controllerLanguage == "Portuguese" { - ptConjugationStateRight() - } else if controllerLanguage == "Russian" { - ruConjugationStateRight() - } else if controllerLanguage == "Spanish" { - esConjugationStateRight() - } else if controllerLanguage == "Swedish" { - svConjugationStateRight() - } + return !results.isEmpty && !results[0].isEmpty } diff --git a/Keyboards/KeyboardsBase/ScribeFunctionality/Plural.swift b/Keyboards/KeyboardsBase/ScribeFunctionality/Plural.swift index f77b2e60..ad66cf80 100644 --- a/Keyboards/KeyboardsBase/ScribeFunctionality/Plural.swift +++ b/Keyboards/KeyboardsBase/ScribeFunctionality/Plural.swift @@ -13,7 +13,7 @@ import UIKit func queryPlural(commandBar: UILabel) { // Cancel via a return press. if let commandBarText = commandBar.text, - commandBarText == pluralPromptAndCursor || commandBarText == pluralPromptAndCursor { + commandBarText == pluralPromptAndCursor { return } @@ -37,25 +37,25 @@ func queryPluralNoun(queriedNoun: String) { noun = noun.lowercased() } - wordToReturn = LanguageDBManager.shared.queryNounPlural(of: noun)[0] + // Check if the word is already plural (always use lowercase for Set lookup). + let lowercaseNoun = noun.lowercased() + let isAlreadyPlural = pluralWords?.contains(lowercaseNoun) == true - guard !wordToReturn.isEmpty else { - commandState = .invalid - return + if isAlreadyPlural { + wordToReturn = noun // Use original capitalization. + commandState = .alreadyPlural + } else { + let result = LanguageDBManager.shared.queryNounPlural(of: noun) + guard !result.isEmpty, !result[0].isEmpty else { + commandState = .invalid + return + } + wordToReturn = result[0] } - if wordToReturn != "isPlural" { - if inputWordIsCapitalized { - proxy.insertText(wordToReturn.capitalized + getOptionalSpace()) - } else { - proxy.insertText(wordToReturn + getOptionalSpace()) - } + if inputWordIsCapitalized { + proxy.insertText(wordToReturn.capitalized + getOptionalSpace()) } else { - if inputWordIsCapitalized { - proxy.insertText(noun.capitalized + getOptionalSpace()) - } else { - proxy.insertText(noun + getOptionalSpace()) - } - commandState = .alreadyPlural + proxy.insertText(wordToReturn + getOptionalSpace()) } } diff --git a/Keyboards/LanguageKeyboards/Danish/DACommandVariables.swift b/Keyboards/LanguageKeyboards/Danish/DACommandVariables.swift deleted file mode 100644 index 2d4261d3..00000000 --- a/Keyboards/LanguageKeyboards/Danish/DACommandVariables.swift +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -/** - * Variables associated with commands for the Danish Scribe keyboard. - */ - -func daSetConjugationLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } -} - -/// What the conjugation state is for the conjugate feature. -enum DAConjugationState { - case present -} - -var daConjugationState: DAConjugationState = .present - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func daGetConjugationTitle() {} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func daGetConjugationState() {} - -/// Action associated with the left view switch button of the conjugation state. -func daConjugationStateLeft() {} - -/// Action associated with the right view switch button of the conjugation state. -func daConjugationStateRight() {} diff --git a/Keyboards/LanguageKeyboards/English/ENCommandVariables.swift b/Keyboards/LanguageKeyboards/English/ENCommandVariables.swift deleted file mode 100644 index 2058e4f4..00000000 --- a/Keyboards/LanguageKeyboards/English/ENCommandVariables.swift +++ /dev/null @@ -1,132 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -/** - * Variables associated with commands for the English Scribe keyboard. - */ - -func enSetConjugationLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } - - switch enConjugationState { - case .present, .past, .future, .conditional: - formLabelsDict["TL"] = "Simple" - formLabelsDict["TR"] = "Continuous" - formLabelsDict["BL"] = "Perfect" - formLabelsDict["BR"] = "Perfect Continuous" - case .presSimp, .presPerf, .presPerfCont: - formLabelsDict["Left"] = "I/you/plural" - formLabelsDict["Right"] = "he/she/it" - case .presCont: - formLabelsDict["TL"] = "Participle" - formLabelsDict["TR"] = "I" - formLabelsDict["BL"] = "you/plural" - formLabelsDict["BR"] = "he/she/it" - case .pastCont: - formLabelsDict["Top"] = "Participle" - formLabelsDict["Middle"] = "I/he/she/it" - formLabelsDict["Bottom"] = "you/plural" - } -} - -/// What the conjugation state is for the conjugate feature. -enum ENConjugationState { - case present - case presSimp - case presCont - case presPerf - case presPerfCont - case past - case pastCont - case future - case conditional -} - -var enConjugationState: ENConjugationState = .present - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func enGetConjugationTitle() -> String { - if inputWordIsCapitalized { - verbToDisplay = verbToConjugate.capitalized - } else { - verbToDisplay = verbToConjugate - } - switch enConjugationState { - case .present: - return commandPromptSpacing + "Present: " + verbToDisplay - case .presSimp: - return commandPromptSpacing + "Pr. Simple: " + verbToDisplay - case .presCont: - return commandPromptSpacing + "Pr. Continuous: " + verbToDisplay - case .presPerf: - return commandPromptSpacing + "Pr. Perfect: " + verbToDisplay - case .presPerfCont: - return commandPromptSpacing + "Pr. Perf. Continuous: " + verbToDisplay - case .past: - return commandPromptSpacing + "Past: " + verbToDisplay - case .pastCont: - return commandPromptSpacing + "Past Continuous: " + verbToDisplay - case .future: - return commandPromptSpacing + "Future: " + verbToDisplay - case .conditional: - return commandPromptSpacing + "Conditional: " + verbToDisplay - } -} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func enGetConjugationState() -> [String] { - switch enConjugationState { - case .present: - return ["presTPS", "presPart", "presPerfTPS", "presPerfTPSCont"] - case .presSimp: - return ["presSimp", "presTPS"] - case .presCont: - return ["presPart", "presFPSCont", "prePluralCont", "presTPSCont"] - case .presPerf: - return ["presPerfSimp", "presPerfTPS"] - case .presPerfCont: - return ["presPerfSimpCont", "presPerfTPSCont"] - case .past: - return ["pastSimp", "presPart", "pastPerf", "pastPerfCont"] - case .pastCont: - return ["presPart", "pastSimpCont", "pastSimpPluralCont"] - case .future: - return ["futSimp", "futCont", "futPerf", "futPerfCont"] - case .conditional: - return ["condSimp", "condCont", "condPerf", "condPerfCont"] - } -} - -/// Action associated with the left view switch button of the conjugation state. -func enConjugationStateLeft() { - switch enConjugationState { - case .present, .presSimp, .presCont, .presPerf, .presPerfCont, .pastCont: - break - case .past: - conjViewShiftButtonsState = .leftInactive - enConjugationState = .present - case .future: - enConjugationState = .past - case .conditional: - conjViewShiftButtonsState = .bothActive - enConjugationState = .future - } -} - -/// Action associated with the right view switch button of the conjugation state. -func enConjugationStateRight() { - switch enConjugationState { - case .presSimp, .presCont, .presPerf, .presPerfCont, .pastCont, .conditional: - break - case .present: - conjViewShiftButtonsState = .bothActive - enConjugationState = .past - case .past: - enConjugationState = .future - case .future: - conjViewShiftButtonsState = .rightInactive - enConjugationState = .conditional - } -} diff --git a/Keyboards/LanguageKeyboards/French/FRCommandVariables.swift b/Keyboards/LanguageKeyboards/French/FRCommandVariables.swift deleted file mode 100644 index 33d8f6a6..00000000 --- a/Keyboards/LanguageKeyboards/French/FRCommandVariables.swift +++ /dev/null @@ -1,96 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -/** - * Variables associated with commands for the French Scribe keyboard. - */ - -func frSetConjugationLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } - - formLabelsDict["FPS"] = "je" - formLabelsDict["SPS"] = "tu" - formLabelsDict["TPS"] = "il/elle" - formLabelsDict["FPP"] = "nous" - formLabelsDict["SPP"] = "vous" - formLabelsDict["TPP"] = "ils/elles" -} - -/// What the conjugation state is for the conjugate feature. -enum FRConjugationState { - case indicativePresent - case preterite - case imperfect - case future -} - -var frConjugationState: FRConjugationState = .indicativePresent - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func frGetConjugationTitle() -> String { - if inputWordIsCapitalized { - verbToDisplay = verbToConjugate.capitalized - } else { - verbToDisplay = verbToConjugate - } - switch frConjugationState { - case .indicativePresent: - return commandPromptSpacing + "Présent: " + verbToDisplay - case .preterite: - return commandPromptSpacing + "Passé simple: " + verbToDisplay - case .imperfect: - return commandPromptSpacing + "Imparfait: " + verbToDisplay - case .future: - return commandPromptSpacing + "Futur: " + verbToDisplay - } -} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func frGetConjugationState() -> String { - switch frConjugationState { - case .indicativePresent: - return "pres" - case .preterite: - return "pret" - case .imperfect: - return "imp" - case .future: - return "fut" - } -} - -/// Action associated with the left view switch button of the conjugation state. -func frConjugationStateLeft() { - switch frConjugationState { - case .indicativePresent: - break - case .preterite: - conjViewShiftButtonsState = .leftInactive - frConjugationState = .indicativePresent - case .imperfect: - conjViewShiftButtonsState = .bothActive - frConjugationState = .preterite - case .future: - conjViewShiftButtonsState = .bothActive - frConjugationState = .imperfect - } -} - -/// Action associated with the right view switch button of the conjugation state. -func frConjugationStateRight() { - switch frConjugationState { - case .indicativePresent: - conjViewShiftButtonsState = .bothActive - frConjugationState = .preterite - case .preterite: - conjViewShiftButtonsState = .bothActive - frConjugationState = .imperfect - case .imperfect: - conjViewShiftButtonsState = .rightInactive - frConjugationState = .future - case .future: - break - } -} diff --git a/Keyboards/LanguageKeyboards/French/FRLanguageData.sqlite b/Keyboards/LanguageKeyboards/French/FRLanguageData.sqlite deleted file mode 100644 index f9fc0056..00000000 Binary files a/Keyboards/LanguageKeyboards/French/FRLanguageData.sqlite and /dev/null differ diff --git a/Keyboards/LanguageKeyboards/German/DECommandVariables.swift b/Keyboards/LanguageKeyboards/German/DECommandVariables.swift deleted file mode 100644 index d7561c54..00000000 --- a/Keyboards/LanguageKeyboards/German/DECommandVariables.swift +++ /dev/null @@ -1,614 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -/** - * Variables associated with commands for the German Scribe keyboard. - */ - -func deSetConjugationLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } - - formLabelsDict["FPS"] = "ich" - formLabelsDict["SPS"] = "du" - formLabelsDict["TPS"] = "er/sie/es" - formLabelsDict["FPP"] = "wir" - formLabelsDict["SPP"] = "ihr" - formLabelsDict["TPP"] = "sie/Sie" -} - -func deSetCaseDeclensionLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } - if deCaseVariantDeclensionState == .disabled { - if [ - .accusativeDefinite, .accusativeIndefinite, .accusativeDemonstrative, - .dativeDefinite, .dativeIndefinite, .dativeDemonstrative, - .genitiveDefinite, .genitiveIndefinite, .genitiveDemonstrative - ].contains(deCaseDeclensionState) { - formLabelsDict["TL"] = "M" - formLabelsDict["TR"] = "F" - formLabelsDict["BL"] = "N" - formLabelsDict["BR"] = "PL" - } else { - formLabelsDict["FPS"] = "ich" - formLabelsDict["SPS"] = "du/Sie" - formLabelsDict["TPS"] = "er/sie/es" - formLabelsDict["FPP"] = "wir" - formLabelsDict["SPP"] = "ihr" - formLabelsDict["TPP"] = "sie" - } - } else { - switch deCaseVariantDeclensionState { - case .disabled: - break // placeholder - case .accusativePersonalSPS, .accusativePossessiveSPS, - .dativePersonalSPS, .dativePossessiveSPS, - .genitivePersonalSPS, .genitivePossessiveSPS: - formLabelsDict["Left"] = "informell" - formLabelsDict["Right"] = "formell" - case .accusativePersonalTPS, .accusativePossessiveTPS, - .dativePersonalTPS, .dativePossessiveTPS, - .genitivePersonalTPS, .genitivePossessiveTPS: - formLabelsDict["Top"] = "er" - formLabelsDict["Middle"] = "sie" - formLabelsDict["Bottom"] = "es" - case .accusativePossessiveFPS, .accusativePossessiveSPSInformal, .accusativePossessiveSPSFormal, - .accusativePossessiveTPSMasculine, .accusativePossessiveTPSFeminine, .accusativePossessiveTPSNeutral, - .accusativePossessiveFPP, .accusativePossessiveSPP, .accusativePossessiveTPP, - .dativePossessiveFPS, .dativePossessiveSPSInformal, .dativePossessiveSPSFormal, - .dativePossessiveTPSMasculine, .dativePossessiveTPSFeminine, .dativePossessiveTPSNeutral, - .dativePossessiveFPP, .dativePossessiveSPP, .dativePossessiveTPP, - .genitivePossessiveFPS, .genitivePossessiveSPSInformal, .genitivePossessiveSPSFormal, - .genitivePossessiveTPSMasculine, .genitivePossessiveTPSFeminine, .genitivePossessiveTPSNeutral, - .genitivePossessiveFPP, .genitivePossessiveSPP, .genitivePossessiveTPP: - formLabelsDict["TL"] = "M" - formLabelsDict["TR"] = "F" - formLabelsDict["BL"] = "N" - formLabelsDict["BR"] = "PL" - } - } -} - -/// What the conjugation state is for the conjugate feature. -enum DEConjugationState { - case indicativePresent - case indicativePreterite - case indicativePerfect -} - -/// What the conjugation state is for the case conjugate feature. -enum DECaseDeclensionState { - case accusativeDefinite - case accusativeIndefinite - case accusativePersonal - case accusativePossessive - case accusativeDemonstrative - case dativeDefinite - case dativeIndefinite - case dativePersonal - case dativePossessive - case dativeDemonstrative - case genitiveDefinite - case genitiveIndefinite - case genitivePersonal - case genitivePossessive - case genitiveDemonstrative -} - -/// Allows for switching the conjugation view to select from pronoun options based on noun genders. -enum DECaseVariantDeclensionState { - case disabled - case accusativePersonalSPS - case accusativePersonalTPS - case accusativePossessiveFPS - case accusativePossessiveSPS - case accusativePossessiveSPSInformal - case accusativePossessiveSPSFormal - case accusativePossessiveTPS - case accusativePossessiveTPSMasculine - case accusativePossessiveTPSFeminine - case accusativePossessiveTPSNeutral - case accusativePossessiveFPP - case accusativePossessiveSPP - case accusativePossessiveTPP - case dativePersonalSPS - case dativePersonalTPS - case dativePossessiveFPS - case dativePossessiveSPS - case dativePossessiveSPSInformal - case dativePossessiveSPSFormal - case dativePossessiveTPS - case dativePossessiveTPSMasculine - case dativePossessiveTPSFeminine - case dativePossessiveTPSNeutral - case dativePossessiveFPP - case dativePossessiveSPP - case dativePossessiveTPP - case genitivePersonalSPS - case genitivePersonalTPS - case genitivePossessiveFPS - case genitivePossessiveSPS - case genitivePossessiveSPSInformal - case genitivePossessiveSPSFormal - case genitivePossessiveTPS - case genitivePossessiveTPSMasculine - case genitivePossessiveTPSFeminine - case genitivePossessiveTPSNeutral - case genitivePossessiveFPP - case genitivePossessiveSPP - case genitivePossessiveTPP -} - -var deConjugationState: DEConjugationState = .indicativePresent -var deCaseDeclensionState: DECaseDeclensionState = .accusativeDefinite -var deCaseVariantDeclensionState: DECaseVariantDeclensionState = .disabled - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func deGetConjugationTitle() -> String { - if inputWordIsCapitalized { - verbToDisplay = verbToConjugate.capitalized - } else { - verbToDisplay = verbToConjugate - } - switch deConjugationState { - case .indicativePresent: - return commandPromptSpacing + "Präsens: " + verbToDisplay - case .indicativePreterite: - return commandPromptSpacing + "Präteritum: " + verbToDisplay - case .indicativePerfect: - return commandPromptSpacing + "Perfekt: " + verbToDisplay - } -} - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func deGetCaseDeclensionTitle() -> String { - if deCaseVariantDeclensionState == .disabled { - switch deCaseDeclensionState { - case .accusativeDefinite: - return commandPromptSpacing + "Akkusativ Definitpronomen" - case .accusativeIndefinite: - return commandPromptSpacing + "Akkusativ Indefinitpronomen" - case .accusativePersonal: - return commandPromptSpacing + "Akkusativ Personalpronomen" - case .accusativePossessive: - return commandPromptSpacing + "Akkusativ Possessivpronomen" - case .accusativeDemonstrative: - return commandPromptSpacing + "Akkusativ Demonstrativpronomen" - case .dativeDefinite: - return commandPromptSpacing + "Dativ Definitpronomen" - case .dativeIndefinite: - return commandPromptSpacing + "Dativ Indefinitpronomen" - case .dativePersonal: - return commandPromptSpacing + "Dativ Personalpronomen" - case .dativePossessive: - return commandPromptSpacing + "Dativ Possessivpronomen" - case .dativeDemonstrative: - return commandPromptSpacing + "Dativ Demonstrativpronomen" - case .genitiveDefinite: - return commandPromptSpacing + "Genitiv Definitpronomen" - case .genitiveIndefinite: - return commandPromptSpacing + "Genitiv Indefinitpronomen" - case .genitivePersonal: - return commandPromptSpacing + "Genitiv Personalpronomen" - case .genitivePossessive: - return commandPromptSpacing + "Genitiv Possessivpronomen" - case .genitiveDemonstrative: - return commandPromptSpacing + "Genitiv Demonstrativpronomen" - } - } else { - switch deCaseVariantDeclensionState { - case .disabled: - return "" // placeholder - case .accusativePersonalSPS, .accusativePossessiveSPS, - .dativePersonalSPS, .dativePossessiveSPS, - .genitivePersonalSPS, .genitivePossessiveSPS: - return commandPromptSpacing + "Formalität des Subjekts?" - case .accusativePersonalTPS, .accusativePossessiveTPS, - .dativePersonalTPS, .dativePossessiveTPS, - .genitivePersonalTPS, .genitivePossessiveTPS: - return commandPromptSpacing + "Geschlecht des Subjekts?" - case .accusativePossessiveFPS, .accusativePossessiveSPSInformal, .accusativePossessiveSPSFormal, - .accusativePossessiveTPSMasculine, .accusativePossessiveTPSFeminine, .accusativePossessiveTPSNeutral, - .accusativePossessiveFPP, .accusativePossessiveSPP, .accusativePossessiveTPP, - .dativePossessiveFPS, .dativePossessiveSPSInformal, .dativePossessiveSPSFormal, - .dativePossessiveTPSMasculine, .dativePossessiveTPSFeminine, .dativePossessiveTPSNeutral, - .dativePossessiveFPP, .dativePossessiveSPP, .dativePossessiveTPP, - .genitivePossessiveFPS, .genitivePossessiveSPSInformal, .genitivePossessiveSPSFormal, - .genitivePossessiveTPSMasculine, .genitivePossessiveTPSFeminine, .genitivePossessiveTPSNeutral, - .genitivePossessiveFPP, .genitivePossessiveSPP, .genitivePossessiveTPP: - return commandPromptSpacing + "Geschlecht des Objekts?" - } - } -} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func deGetConjugationState() -> String { - switch deConjugationState { - case .indicativePresent: - return "pres" - case .indicativePreterite: - return "pret" - case .indicativePerfect: - return "perf" - } -} - -/// Returns the appropriate pronoun options given the case. -func deSetCaseDeclensions() { - switch deCaseDeclensionState { - case .accusativeDefinite: - formTopLeft = "den" - formTopRight = "die" - formBottomLeft = "das" - formBottomRight = "die" - case .accusativeIndefinite: - formTopLeft = "einen" - formTopRight = "eine" - formBottomLeft = "ein" - formBottomRight = "" - case .accusativePersonal: - formFPS = "mich" - formSPS = "dich/Sie" - formTPS = "ihn/sie/es" - formFPP = "uns" - formSPP = "euch" - formTPP = "sie" - case .accusativeDemonstrative: - formTopLeft = "diesen" - formTopRight = "diese" - formBottomLeft = "dieses" - formBottomRight = "diese" - case .dativeDefinite: - formTopLeft = "dem" - formTopRight = "der" - formBottomLeft = "dem" - formBottomRight = "den" - case .dativeIndefinite: - formTopLeft = "einem" - formTopRight = "einer" - formBottomLeft = "einem" - formBottomRight = "" - case .dativePersonal: - formFPS = "mir" - formSPS = "dir/Ihnen" - formTPS = "ihm/ihr/ihm" - formFPP = "uns" - formSPP = "euch" - formTPP = "ihnen" - case .dativeDemonstrative: - formTopLeft = "diesem" - formTopRight = "dieser" - formBottomLeft = "diesem" - formBottomRight = "diesen" - case .genitiveDefinite: - formTopLeft = "des" - formTopRight = "der" - formBottomLeft = "des" - formBottomRight = "der" - case .genitiveIndefinite: - formTopLeft = "eines" - formTopRight = "einer" - formBottomLeft = "eines" - formBottomRight = "" - case .genitivePersonal: - formFPS = "meiner" - formSPS = "deiner/Ihrer" - formTPS = "seiner/ihrer/seiner" - formFPP = "unser" - formSPP = "euer" - formTPP = "ihrer" - case .genitiveDemonstrative: - formTopLeft = "dieses" - formTopRight = "dieser" - formBottomLeft = "dieses" - formBottomRight = "dieser" - case .accusativePossessive, .dativePossessive, .genitivePossessive: - formFPS = "mein∗" - formSPS = "dein∗/Ihr∗" - formTPS = "sein∗/ihr∗/sein∗" - formFPP = "unser∗" - formSPP = "euer∗" - formTPP = "ihr∗" - } -} - -/// Returns the appropriate options for a selection within the case conjugation table. -func deSetCaseVariantDeclensions() { - switch deCaseVariantDeclensionState { - case .disabled: - break - case .accusativePersonalSPS: - formLeft = "dich" - formRight = "Sie" - case .accusativePersonalTPS: - formTop = "ihn" - formMiddle = "sie" - formBottom = "es" - case .dativePersonalSPS: - formLeft = "dir" - formRight = "Ihnen" - case .dativePersonalTPS: - formTop = "ihm" - formMiddle = "ihr" - formBottom = "ihm" - case .genitivePersonalSPS: - formLeft = "deiner" - formRight = "Ihrer" - case .genitivePersonalTPS: - formTop = "seiner" - formMiddle = "ihrer" - formBottom = "seiner" - case .accusativePossessiveSPS, .dativePossessiveSPS, .genitivePossessiveSPS: - formLeft = "dein∗" - formRight = "Ihr∗" - case .accusativePossessiveTPS, .dativePossessiveTPS, .genitivePossessiveTPS: - formTop = "sein∗" - formMiddle = "ihr∗" - formBottom = "sein∗" - case .accusativePossessiveFPS: - formTopLeft = "meinen" - formTopRight = "meine" - formBottomLeft = "mein" - formBottomRight = "meine" - case .accusativePossessiveSPSInformal: - formTopLeft = "deinen" - formTopRight = "deine" - formBottomLeft = "dein" - formBottomRight = "deine" - case .accusativePossessiveSPSFormal: - formTopLeft = "Ihren" - formTopRight = "Ihre" - formBottomLeft = "Ihr" - formBottomRight = "Ihre" - case .accusativePossessiveTPSMasculine: - formTopLeft = "seinen" - formTopRight = "seine" - formBottomLeft = "sein" - formBottomRight = "seine" - case .accusativePossessiveTPSFeminine: - formTopLeft = "ihren" - formTopRight = "ihre" - formBottomLeft = "ihr" - formBottomRight = "ihre" - case .accusativePossessiveTPSNeutral: - formTopLeft = "seinen" - formTopRight = "seine" - formBottomLeft = "sein" - formBottomRight = "seine" - case .accusativePossessiveFPP: - formTopLeft = "unsren" - formTopRight = "unsre" - formBottomLeft = "unser" - formBottomRight = "unsre" - case .accusativePossessiveSPP: - formTopLeft = "euren" - formTopRight = "eure" - formBottomLeft = "euer" - formBottomRight = "eure" - case .accusativePossessiveTPP: - formTopLeft = "ihren" - formTopRight = "ihre" - formBottomLeft = "ihr" - formBottomRight = "ihre" - case .dativePossessiveFPS: - formTopLeft = "meinem" - formTopRight = "meiner" - formBottomLeft = "meinem" - formBottomRight = "meinen" - case .dativePossessiveSPSInformal: - formTopLeft = "deinem" - formTopRight = "deiner" - formBottomLeft = "deinem" - formBottomRight = "deinen" - case .dativePossessiveSPSFormal: - formTopLeft = "Ihrem" - formTopRight = "Ihrer" - formBottomLeft = "Ihrem" - formBottomRight = "Ihren" - case .dativePossessiveTPSMasculine: - formTopLeft = "seinem" - formTopRight = "seiner" - formBottomLeft = "seinem" - formBottomRight = "seinen" - case .dativePossessiveTPSFeminine: - formTopLeft = "ihrem" - formTopRight = "ihrer" - formBottomLeft = "ihrem" - formBottomRight = "ihren" - case .dativePossessiveTPSNeutral: - formTopLeft = "seinem" - formTopRight = "seiner" - formBottomLeft = "seinem" - formBottomRight = "seinen" - case .dativePossessiveFPP: - formTopLeft = "unsrem" - formTopRight = "unsrer" - formBottomLeft = "unsrem" - formBottomRight = "unsren" - case .dativePossessiveSPP: - formTopLeft = "eurem" - formTopRight = "eurer" - formBottomLeft = "eurem" - formBottomRight = "euren" - case .dativePossessiveTPP: - formTopLeft = "ihrem" - formTopRight = "ihrer" - formBottomLeft = "ihrem" - formBottomRight = "ihren" - case .genitivePossessiveFPS: - formTopLeft = "meines" - formTopRight = "meiner" - formBottomLeft = "meines" - formBottomRight = "meiner" - case .genitivePossessiveSPSInformal: - formTopLeft = "deines" - formTopRight = "deiner" - formBottomLeft = "deines" - formBottomRight = "deiner" - case .genitivePossessiveSPSFormal: - formTopLeft = "Ihres" - formTopRight = "Ihrer" - formBottomLeft = "Ihres" - formBottomRight = "Ihrer" - case .genitivePossessiveTPSMasculine: - formTopLeft = "seines" - formTopRight = "seiner" - formBottomLeft = "seines" - formBottomRight = "seiner" - case .genitivePossessiveTPSFeminine: - formTopLeft = "ihres" - formTopRight = "ihr" - formBottomLeft = "ihres" - formBottomRight = "ihr" - case .genitivePossessiveTPSNeutral: - formTopLeft = "seines" - formTopRight = "seiner" - formBottomLeft = "seines" - formBottomRight = "seiner" - case .genitivePossessiveFPP: - formTopLeft = "unsres" - formTopRight = "unsrer" - formBottomLeft = "unsres" - formBottomRight = "unsrer" - case .genitivePossessiveSPP: - formTopLeft = "eures" - formTopRight = "eurer" - formBottomLeft = "eures" - formBottomRight = "eurer" - case .genitivePossessiveTPP: - formTopLeft = "ihres" - formTopRight = "ihrer" - formBottomLeft = "ihres" - formBottomRight = "ihrer" - } -} - -/// Action associated with the left view switch button of the conjugation state. -func deConjugationStateLeft() { - if commandState == .selectCaseDeclension, deCaseVariantDeclensionState == .disabled { - switch deCaseDeclensionState { - case .accusativeDefinite: - break - case .accusativeIndefinite: - conjViewShiftButtonsState = .leftInactive - deCaseDeclensionState = .accusativeDefinite - case .accusativePersonal: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .accusativeIndefinite - case .accusativePossessive: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .accusativePersonal - case .accusativeDemonstrative: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .accusativePossessive - case .dativeDefinite: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .accusativeDemonstrative - case .dativeIndefinite: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativeDefinite - case .dativePersonal: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativeIndefinite - case .dativePossessive: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativePersonal - case .dativeDemonstrative: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativePossessive - case .genitiveDefinite: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativeDemonstrative - case .genitiveIndefinite: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .genitiveDefinite - case .genitivePersonal: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .genitiveIndefinite - case .genitivePossessive: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .genitivePersonal - case .genitiveDemonstrative: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .genitivePossessive - } - } else { - switch deConjugationState { - case .indicativePresent: - break - case .indicativePreterite: - conjViewShiftButtonsState = .leftInactive - deConjugationState = .indicativePresent - case .indicativePerfect: - conjViewShiftButtonsState = .bothActive - deConjugationState = .indicativePreterite - } - } -} - -/// Action associated with the right view switch button of the conjugation state. -func deConjugationStateRight() { - if commandState == .selectCaseDeclension, deCaseVariantDeclensionState == .disabled { - switch deCaseDeclensionState { - case .accusativeDefinite: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .accusativeIndefinite - case .accusativeIndefinite: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .accusativePersonal - case .accusativePersonal: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .accusativePossessive - case .accusativePossessive: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .accusativeDemonstrative - case .accusativeDemonstrative: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativeDefinite - case .dativeDefinite: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativeIndefinite - case .dativeIndefinite: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativePersonal - case .dativePersonal: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativePossessive - case .dativePossessive: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .dativeDemonstrative - case .dativeDemonstrative: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .genitiveDefinite - case .genitiveDefinite: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .genitiveIndefinite - case .genitiveIndefinite: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .genitivePersonal - case .genitivePersonal: - conjViewShiftButtonsState = .bothActive - deCaseDeclensionState = .genitivePossessive - case .genitivePossessive: - conjViewShiftButtonsState = .rightInactive - deCaseDeclensionState = .genitiveDemonstrative - case .genitiveDemonstrative: - break - } - } else { - switch deConjugationState { - case .indicativePresent: - conjViewShiftButtonsState = .bothActive - deConjugationState = .indicativePreterite - case .indicativePreterite: - conjViewShiftButtonsState = .rightInactive - deConjugationState = .indicativePerfect - case .indicativePerfect: - break - } - } -} diff --git a/Keyboards/LanguageKeyboards/German/DELanguageData.sqlite b/Keyboards/LanguageKeyboards/German/DELanguageData.sqlite deleted file mode 100644 index ddd63dfa..00000000 Binary files a/Keyboards/LanguageKeyboards/German/DELanguageData.sqlite and /dev/null differ diff --git a/Keyboards/LanguageKeyboards/Hebrew/HECommandVariables.swift b/Keyboards/LanguageKeyboards/Hebrew/HECommandVariables.swift deleted file mode 100644 index 822fdbf3..00000000 --- a/Keyboards/LanguageKeyboards/Hebrew/HECommandVariables.swift +++ /dev/null @@ -1,164 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -/** - * Variables associated with commands for the Hebrew Scribe keyboard. - */ - -func heSetConjugationLabels() { - // Reset all form labels prior to assignment. - for key in formLabelsDict.keys { - formLabelsDict[key] = "" - } - - switch heConjugationState { - case .present, .past, .future, .conditional: - formLabelsDict["TL"] = "פועל פשוט" // Poel Pashoot (Simple Verb) - formLabelsDict["TR"] = "פועל מתמשך" // Poel מתמשך (Continuous Verb) - formLabelsDict["BL"] = "פועל בתר" // (Past Perfect Verb) - formLabelsDict["BR"] = "פועל בתר מתמשך" // Poel Be'עבר מתמשך (Past Continuous Perfect Verb) - case .presSimp, .presPerf, .presPerfCont: - formLabelsDict["Left"] = "אני/אתה/את/אתם" // Ani/Ata/At/Atem (I/You/They) - formLabelsDict["Right"] = "הוא/היא" // Hu/Hi (He/She) - case .presCont: - formLabelsDict["TL"] = "הווה משתתף" // Hove משתתף (Present Participle) - formLabelsDict["TR"] = "אני" // Ani (I) - formLabelsDict["BL"] = "אתה/את/אתם" // Ata/At/Atem (You/They) - formLabelsDict["BR"] = "הוא/היא" // Hoo/Hi (He/She) - case .pastCont: - formLabelsDict["Top"] = "היה משתתף" // Haya משתתף (Past Participle) - formLabelsDict["Middle"] = "אני/הוא/היא" // Ani/Hu/Hi (I/He/She) - formLabelsDict["Bottom"] = "אתם/אתן" // Atem/Aten (You [plural, masculine/feminine]) - } -} - -/// What the conjugation state is for the conjugate feature. -enum HEConjugationState { - case present - case presSimp - case presCont - case presPerf - case presPerfCont - case past - case pastCont - case future - case conditional -} - -var heConjugationState: HEConjugationState = .present - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func heGetConjugationTitle() -> String { - if inputWordIsCapitalized { - verbToDisplay = verbToConjugate.capitalized - } else { - verbToDisplay = verbToConjugate - } - switch heConjugationState { - case .present: - return commandPromptSpacing + "הווה: " + verbToDisplay // Hove: (Present) - case .presSimp: - return commandPromptSpacing + "עבר פשוט: " + verbToDisplay // Avar Pashoot (Past Simple) - case .presCont: - return commandPromptSpacing + "הווה מתמשך: " + verbToDisplay // Hove מתמשך (Present Continuous) - case .presPerf: - return commandPromptSpacing + "הווה בתר: " + verbToDisplay // Hove Be'עבר (Present Perfect) - case .presPerfCont: - return commandPromptSpacing + "הווה בתר מתמשך: " + verbToDisplay // Hove Be'עבר מתמשך (Present Continuous Perfect) - case .past: - return commandPromptSpacing + "עבר: " + verbToDisplay // Avar (Past) - case .pastCont: - return commandPromptSpacing + "עבר מתמשך: " + verbToDisplay // Ovar מתמשך (Past Continuous) - case .future: - return commandPromptSpacing + "עתיד: " + verbToDisplay // Atid (Future) - case .conditional: - return commandPromptSpacing + "תנאי: " + verbToDisplay // Tnai (Conditional) - } -} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func heGetConjugationState() -> [String] { - switch heConjugationState { - case .present: - return ["presTPS", "presPart", "presPerfTPS", "presPerfTPSCont"] // - case .presSimp: - return ["presSimp", "presTPS"] - case .presCont: - return ["presPart", "presFPSCont", "prePluralCont", "presTPSCont"] - case .presPerf: - return ["presPerfSimp", "presPerfTPS"] - case .presPerfCont: - return ["presPerfSimpCont", "presPerfTPSCont"] - case .past: - return ["pastSimp", "presPart", "pastPerf", "pastPerfCont"] - case .pastCont: - return ["presPart", "pastSimpCont", "pastSimpPluralCont"] - case .future: - return ["futSimp", "futCont", "futPerf", "futPerfCont"] - case .conditional: - return ["condSimp", "condCont", "condPerf", "condPerfCont"] - } -} - -/// Action associated with the left view switch button of the conjugation state. -func heConjugationStateLeft() { - switch heConjugationState { - case .present: - break - case .presSimp: - conjViewShiftButtonsState = .leftInactive - heConjugationState = .present - case .presCont: - conjViewShiftButtonsState = .bothActive - heConjugationState = .presSimp - case .presPerf: - conjViewShiftButtonsState = .bothActive - heConjugationState = .presCont - case .presPerfCont: - conjViewShiftButtonsState = .bothActive - heConjugationState = .presPerf - case .past: - conjViewShiftButtonsState = .bothActive - heConjugationState = .presPerfCont - case .pastCont: - conjViewShiftButtonsState = .bothActive - heConjugationState = .past - case .future: - conjViewShiftButtonsState = .bothActive - heConjugationState = .pastCont - case .conditional: - conjViewShiftButtonsState = .bothActive - heConjugationState = .future - } -} - -/// Action associated with the right view switch button of the conjugation state. -func heConjugationStateRight() { - switch heConjugationState { - case .present: - conjViewShiftButtonsState = .bothActive - heConjugationState = .presSimp - case .presSimp: - conjViewShiftButtonsState = .bothActive - heConjugationState = .presCont - case .presCont: - conjViewShiftButtonsState = .bothActive - heConjugationState = .presPerf - case .presPerf: - conjViewShiftButtonsState = .bothActive - heConjugationState = .presPerfCont - case .presPerfCont: - conjViewShiftButtonsState = .bothActive - heConjugationState = .past - case .past: - conjViewShiftButtonsState = .bothActive - heConjugationState = .pastCont - case .pastCont: - conjViewShiftButtonsState = .bothActive - heConjugationState = .future - case .future: - conjViewShiftButtonsState = .rightInactive - heConjugationState = .conditional - case .conditional: - break - } -} diff --git a/Keyboards/LanguageKeyboards/Indonesian/IDCommandVariables.swift b/Keyboards/LanguageKeyboards/Indonesian/IDCommandVariables.swift deleted file mode 100644 index fca2d183..00000000 --- a/Keyboards/LanguageKeyboards/Indonesian/IDCommandVariables.swift +++ /dev/null @@ -1,5 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -/** - * Variables associated with commands for the Indonesian Scribe keyboard. - */ diff --git a/Keyboards/LanguageKeyboards/Italian/ITCommandVariables.swift b/Keyboards/LanguageKeyboards/Italian/ITCommandVariables.swift deleted file mode 100644 index cc8aff71..00000000 --- a/Keyboards/LanguageKeyboards/Italian/ITCommandVariables.swift +++ /dev/null @@ -1,85 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -/** - * Variables associated with commands for the Italian Scribe keyboard. - */ - -func itSetConjugationLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } - - formLabelsDict["FPS"] = "io" - formLabelsDict["SPS"] = "tu" - formLabelsDict["TPS"] = "lei/lui" - formLabelsDict["FPP"] = "noi" - formLabelsDict["SPP"] = "voi" - formLabelsDict["TPP"] = "loro" -} - -/// What the conjugation state is for the conjugate feature. -enum ITConjugationState { - case present - case preterite - case imperfect -} - -var itConjugationState: ITConjugationState = .present - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func itGetConjugationTitle() -> String { - if inputWordIsCapitalized { - verbToDisplay = verbToConjugate.capitalized - } else { - verbToDisplay = verbToConjugate - } - switch itConjugationState { - case .present: - return commandPromptSpacing + "Presente: " + verbToDisplay - case .preterite: - return commandPromptSpacing + "Preterito: " + verbToDisplay - case .imperfect: - return commandPromptSpacing + "Imperfetto: " + verbToDisplay - } -} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func itGetConjugationState() -> String { - switch itConjugationState { - case .present: - return "pres" - case .preterite: - return "pret" - case .imperfect: - return "imp" - } -} - -/// Action associated with the left view switch button of the conjugation state. -func itConjugationStateLeft() { - switch itConjugationState { - case .present: - break - case .preterite: - conjViewShiftButtonsState = .leftInactive - itConjugationState = .present - case .imperfect: - conjViewShiftButtonsState = .bothActive - itConjugationState = .preterite - } -} - -/// Action associated with the right view switch button of the conjugation state. -func itConjugationStateRight() { - switch itConjugationState { - case .present: - conjViewShiftButtonsState = .bothActive - itConjugationState = .preterite - case .preterite: - conjViewShiftButtonsState = .rightInactive - itConjugationState = .imperfect - case .imperfect: - break - } -} diff --git a/Keyboards/LanguageKeyboards/Italian/ITLanguageData.sqlite b/Keyboards/LanguageKeyboards/Italian/ITLanguageData.sqlite deleted file mode 100644 index 0557d092..00000000 Binary files a/Keyboards/LanguageKeyboards/Italian/ITLanguageData.sqlite and /dev/null differ diff --git a/Keyboards/LanguageKeyboards/Portuguese/PTCommandVariables.swift b/Keyboards/LanguageKeyboards/Portuguese/PTCommandVariables.swift deleted file mode 100644 index 4e20e23e..00000000 --- a/Keyboards/LanguageKeyboards/Portuguese/PTCommandVariables.swift +++ /dev/null @@ -1,96 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -/** - * Variables associated with commands for the Portuguese Scribe keyboard. - */ - -func ptSetConjugationLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } - - formLabelsDict["FPS"] = "eu" - formLabelsDict["SPS"] = "tu" - formLabelsDict["TPS"] = "ele/ela/você" - formLabelsDict["FPP"] = "nós" - formLabelsDict["SPP"] = "vós" - formLabelsDict["TPP"] = "eles/elas/vocês" -} - -/// What the conjugation state is for the conjugate feature. -enum PTConjugationState { - case indicativePresent - case pastPerfect - case pastImperfect - case futureSimple -} - -var ptConjugationState: PTConjugationState = .indicativePresent - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func ptGetConjugationTitle() -> String { - if inputWordIsCapitalized { - verbToDisplay = verbToConjugate.capitalized - } else { - verbToDisplay = verbToConjugate - } - switch ptConjugationState { - case .indicativePresent: - return commandPromptSpacing + "Presente: " + verbToDisplay - case .pastPerfect: - return commandPromptSpacing + "Pretérito Perfeito: " + verbToDisplay - case .pastImperfect: - return commandPromptSpacing + "Pretérito Imperfeito: " + verbToDisplay - case .futureSimple: - return commandPromptSpacing + "Futuro Simples: " + verbToDisplay - } -} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func ptGetConjugationState() -> String { - switch ptConjugationState { - case .indicativePresent: - return "pres" - case .pastPerfect: - return "perf" - case .pastImperfect: - return "imp" - case .futureSimple: - return "fSimp" - } -} - -/// Action associated with the left view switch button of the conjugation state. -func ptConjugationStateLeft() { - switch ptConjugationState { - case .indicativePresent: - break - case .pastPerfect: - conjViewShiftButtonsState = .leftInactive - ptConjugationState = .indicativePresent - case .pastImperfect: - conjViewShiftButtonsState = .bothActive - ptConjugationState = .pastPerfect - case .futureSimple: - conjViewShiftButtonsState = .bothActive - ptConjugationState = .pastImperfect - } -} - -/// Action associated with the right view switch button of the conjugation state. -func ptConjugationStateRight() { - switch ptConjugationState { - case .indicativePresent: - conjViewShiftButtonsState = .bothActive - ptConjugationState = .pastPerfect - case .pastPerfect: - conjViewShiftButtonsState = .bothActive - ptConjugationState = .pastImperfect - case .pastImperfect: - conjViewShiftButtonsState = .rightInactive - ptConjugationState = .futureSimple - case .futureSimple: - break - } -} diff --git a/Keyboards/LanguageKeyboards/Portuguese/PTLanguageData.sqlite b/Keyboards/LanguageKeyboards/Portuguese/PTLanguageData.sqlite deleted file mode 100644 index f801e5c5..00000000 Binary files a/Keyboards/LanguageKeyboards/Portuguese/PTLanguageData.sqlite and /dev/null differ diff --git a/Keyboards/LanguageKeyboards/Russian/RUCommandVariables.swift b/Keyboards/LanguageKeyboards/Russian/RUCommandVariables.swift deleted file mode 100644 index 4286b4dd..00000000 --- a/Keyboards/LanguageKeyboards/Russian/RUCommandVariables.swift +++ /dev/null @@ -1,201 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -/** - * Variables associated with commands for the Russian Scribe keyboard. - */ - -func ruSetConjugationLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } - - switch ruConjugationState { - case .present: - formLabelsDict["FPS"] = "я" - formLabelsDict["SPS"] = "ты" - formLabelsDict["TPS"] = "он/она/оно" - formLabelsDict["FPP"] = "мы" - formLabelsDict["SPP"] = "вы" - formLabelsDict["TPP"] = "они" - case .past: - formLabelsDict["TL"] = "я/ты/он" - formLabelsDict["TR"] = "я/ты/она" - formLabelsDict["BL"] = "оно" - formLabelsDict["BR"] = "мы/вы/они" - } -} - -func ruSetCaseDeclensionLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } - - formLabelsDict["FPS"] = "я" - formLabelsDict["SPS"] = "ты" - formLabelsDict["TPS"] = "он/она/оно" - formLabelsDict["FPP"] = "мы" - formLabelsDict["SPP"] = "вы" - formLabelsDict["TPP"] = "они" -} - -/// What the conjugation state is for the conjugate feature. -enum RUConjugationState { - case present - case past -} - -/// What the conjugation state is for the case conjugate feature. -enum RUCaseDeclensionState { - case accusative - case dative - case genitive - case instrumental - case prepositional -} - -var ruConjugationState: RUConjugationState = .present -var ruCaseDeclensionState: RUCaseDeclensionState = .accusative - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func ruGetConjugationTitle() -> String { - if inputWordIsCapitalized { - verbToDisplay = verbToConjugate.capitalized - } else { - verbToDisplay = verbToConjugate - } - switch ruConjugationState { - case .present: - return commandPromptSpacing + "Настоящее: " + verbToDisplay - case .past: - return commandPromptSpacing + "Прошедшее: " + verbToDisplay - } -} - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func ruGetCaseDeclensionTitle() -> String { - switch ruCaseDeclensionState { - case .accusative: - return commandPromptSpacing + "Винительные местоимения" - case .dative: - return commandPromptSpacing + "Дательные местоимения" - case .genitive: - return commandPromptSpacing + "Родительные местоимения" - case .instrumental: - return commandPromptSpacing + "Творительные местоимения" - case .prepositional: - return commandPromptSpacing + "Предложные местоимения" - } -} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func ruGetConjugationState() -> String { - switch ruConjugationState { - case .present: - return "pres" - case .past: - return "past" - } -} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func ruSetCaseDeclensions() { - switch ruCaseDeclensionState { - case .accusative: - formFPS = "меня" - formSPS = "тебя" - formTPS = "его/её/его" - formFPP = "нас" - formSPP = "вас" - formTPP = "их" - case .dative: - formFPS = "мне" - formSPS = "тебе" - formTPS = "ему/ей/ему" - formFPP = "нам" - formSPP = "вам" - formTPP = "им" - case .genitive: - formFPS = "меня" - formSPS = "тебя" - formTPS = "его/её/его" - formFPP = "нас" - formSPP = "вас" - formTPP = "их" - case .instrumental: - formFPS = "мной" - formSPS = "тобой" - formTPS = "им/ей/им" - formFPP = "нами" - formSPP = "вами" - formTPP = "ими" - case .prepositional: - formFPS = "мне" - formSPS = "тебе" - formTPS = "нём/ней/нём" - formFPP = "нас" - formSPP = "вас" - formTPP = "них" - } -} - -/// Action associated with the left view switch button of the conjugation state. -func ruConjugationStateLeft() { - if commandState == .selectCaseDeclension { - switch ruCaseDeclensionState { - case .accusative: - break - case .dative: - conjViewShiftButtonsState = .leftInactive - ruCaseDeclensionState = .accusative - case .genitive: - conjViewShiftButtonsState = .bothActive - ruCaseDeclensionState = .dative - case .instrumental: - conjViewShiftButtonsState = .bothActive - ruCaseDeclensionState = .genitive - case .prepositional: - conjViewShiftButtonsState = .bothActive - ruCaseDeclensionState = .instrumental - } - } else { - switch ruConjugationState { - case .present: - break - case .past: - conjViewShiftButtonsState = .leftInactive - ruConjugationState = .present - } - } -} - -/// Action associated with the right view switch button of the conjugation state. -func ruConjugationStateRight() { - if commandState == .selectCaseDeclension { - switch ruCaseDeclensionState { - case .accusative: - conjViewShiftButtonsState = .bothActive - ruCaseDeclensionState = .dative - case .dative: - conjViewShiftButtonsState = .bothActive - ruCaseDeclensionState = .genitive - case .genitive: - conjViewShiftButtonsState = .bothActive - ruCaseDeclensionState = .instrumental - case .instrumental: - conjViewShiftButtonsState = .rightInactive - ruCaseDeclensionState = .prepositional - case .prepositional: - break - } - } else { - switch ruConjugationState { - case .present: - conjViewShiftButtonsState = .rightInactive - ruConjugationState = .past - case .past: - break - } - } -} diff --git a/Keyboards/LanguageKeyboards/Russian/RULanguageData.sqlite b/Keyboards/LanguageKeyboards/Russian/RULanguageData.sqlite deleted file mode 100644 index 822d0bf2..00000000 Binary files a/Keyboards/LanguageKeyboards/Russian/RULanguageData.sqlite and /dev/null differ diff --git a/Keyboards/LanguageKeyboards/Spanish/ESCommandVariables.swift b/Keyboards/LanguageKeyboards/Spanish/ESCommandVariables.swift index 7ce56db1..d7044e2e 100644 --- a/Keyboards/LanguageKeyboards/Spanish/ESCommandVariables.swift +++ b/Keyboards/LanguageKeyboards/Spanish/ESCommandVariables.swift @@ -1,23 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -/** - * Variables associated with commands for the Spanish Scribe keyboard. - */ - -func esSetConjugationLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } - - formLabelsDict["FPS"] = "yo" - formLabelsDict["SPS"] = "tú" - formLabelsDict["TPS"] = "él/ella/Ud." - formLabelsDict["FPP"] = "nosotros" - formLabelsDict["SPP"] = "vosotros" - formLabelsDict["TPP"] = "ellos/ellas/Uds." -} - /// Returns the reflexive pronoun for a given pronoun. func getESReflexivePronoun(pronoun: String) -> String { if pronoun == "yo" { @@ -34,69 +16,3 @@ func getESReflexivePronoun(pronoun: String) -> String { return "" } } - -/// What the conjugation state is for the conjugate feature. -enum ESConjugationState { - case indicativePresent - case preterite - case imperfect -} - -var esConjugationState: ESConjugationState = .indicativePresent - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func esGetConjugationTitle() -> String { - if inputWordIsCapitalized { - verbToDisplay = verbToConjugate.capitalized - } else { - verbToDisplay = verbToConjugate - } - switch esConjugationState { - case .indicativePresent: - return commandPromptSpacing + "Presente: " + verbToDisplay - case .preterite: - return commandPromptSpacing + "Pretérito: " + verbToDisplay - case .imperfect: - return commandPromptSpacing + "Imperfecto: " + verbToDisplay - } -} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func esGetConjugationState() -> String { - switch esConjugationState { - case .indicativePresent: - return "pres" - case .preterite: - return "pret" - case .imperfect: - return "imp" - } -} - -/// Action associated with the left view switch button of the conjugation state. -func esConjugationStateLeft() { - switch esConjugationState { - case .indicativePresent: - break - case .preterite: - conjViewShiftButtonsState = .leftInactive - esConjugationState = .indicativePresent - case .imperfect: - conjViewShiftButtonsState = .bothActive - esConjugationState = .preterite - } -} - -/// Action associated with the right view switch button of the conjugation state. -func esConjugationStateRight() { - switch esConjugationState { - case .indicativePresent: - conjViewShiftButtonsState = .bothActive - esConjugationState = .preterite - case .preterite: - conjViewShiftButtonsState = .rightInactive - esConjugationState = .imperfect - case .imperfect: - break - } -} diff --git a/Keyboards/LanguageKeyboards/Spanish/ESLanguageData.sqlite b/Keyboards/LanguageKeyboards/Spanish/ESLanguageData.sqlite deleted file mode 100644 index cdc04f39..00000000 Binary files a/Keyboards/LanguageKeyboards/Spanish/ESLanguageData.sqlite and /dev/null differ diff --git a/Keyboards/LanguageKeyboards/Swedish/SVCommandVariables.swift b/Keyboards/LanguageKeyboards/Swedish/SVCommandVariables.swift deleted file mode 100644 index d1be6b4b..00000000 --- a/Keyboards/LanguageKeyboards/Swedish/SVCommandVariables.swift +++ /dev/null @@ -1,80 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -/** - * Variables associated with commands for the Swedish Scribe keyboard. - */ - -func svSetConjugationLabels() { - // Reset all form labels prior to assignment. - for k in formLabelsDict.keys { - formLabelsDict[k] = "" - } - - switch svConjugationState { - case .active: - formLabelsDict["TL"] = "imperativ" - formLabelsDict["TR"] = "liggande" - formLabelsDict["BL"] = "presens" - formLabelsDict["BR"] = "dåtid" - case .passive: - formLabelsDict["TL"] = "infinitiv" - formLabelsDict["TR"] = "liggande" - formLabelsDict["BL"] = "presens" - formLabelsDict["BR"] = "dåtid" - } -} - -/// What the conjugation state is for the conjugate feature. -enum SVConjugationState { - case active - case passive -} - -var svConjugationState: SVConjugationState = .active - -/// Sets the title of the command bar when the keyboard is in conjugate mode. -func svGetConjugationTitle() -> String { - if inputWordIsCapitalized { - verbToDisplay = verbToConjugate.capitalized - } else { - verbToDisplay = verbToConjugate - } - switch svConjugationState { - case .active: - return commandPromptSpacing + "Aktiv: " + verbToDisplay - case .passive: - return commandPromptSpacing + "Passiv: " + verbToDisplay - } -} - -/// Returns the appropriate key in the verbs dictionary to access conjugations. -func svGetConjugationState() -> [String] { - switch svConjugationState { - case .active: - return ["imperative", "activeSupine", "activePresent", "activePreterite"] - case .passive: - return ["passiveInfinitive", "passiveSupine", "passivePresent", "passivePreterite"] - } -} - -/// Action associated with the left view switch button of the conjugation state. -func svConjugationStateLeft() { - switch svConjugationState { - case .active: - break - case .passive: - conjViewShiftButtonsState = .leftInactive - svConjugationState = .active - } -} - -/// Action associated with the right view switch button of the conjugation state. -func svConjugationStateRight() { - switch svConjugationState { - case .active: - conjViewShiftButtonsState = .rightInactive - svConjugationState = .passive - case .passive: - break - } -} diff --git a/Keyboards/LanguageKeyboards/Swedish/SVLanguageData.sqlite b/Keyboards/LanguageKeyboards/Swedish/SVLanguageData.sqlite deleted file mode 100644 index 92b7d698..00000000 Binary files a/Keyboards/LanguageKeyboards/Swedish/SVLanguageData.sqlite and /dev/null differ diff --git a/Scribe.xcodeproj/project.pbxproj b/Scribe.xcodeproj/project.pbxproj index e63f54f0..70381697 100644 --- a/Scribe.xcodeproj/project.pbxproj +++ b/Scribe.xcodeproj/project.pbxproj @@ -123,91 +123,10 @@ 38BD214F22D592CA00C6795D /* DEKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38BD214E22D592CA00C6795D /* DEKeyboardViewController.swift */; }; 38BD215322D592CA00C6795D /* German.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 38BD214C22D592CA00C6795D /* German.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 38DD94F122D6A40000FF8845 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DD94F022D6A40000FF8845 /* Extensions.swift */; }; - 5A037FDA2C74D6C800D4AADD /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - 5A037FDB2C74D6C900D4AADD /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - 5A037FDC2C74D6CA00D4AADD /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - 5A037FDD2C74D6CA00D4AADD /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - 5A037FDE2C74D6CB00D4AADD /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - 5A037FDF2C74D6CC00D4AADD /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - 5A037FE02C74D6CD00D4AADD /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - 5A037FE12C74D6CD00D4AADD /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - 5A037FE22C74D6CE00D4AADD /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - 5A037FE32C74D6CE00D4AADD /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - 5A037FE42C74D6D400D4AADD /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - 5A037FE52C74D6D500D4AADD /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - 5A037FE62C74D6D500D4AADD /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - 5A037FE72C74D6D600D4AADD /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - 5A037FE82C74D6D800D4AADD /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - 5A037FE92C74D6D800D4AADD /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - 5A037FEA2C74D6D900D4AADD /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - 5A037FEB2C74D6DA00D4AADD /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - 5A037FEC2C74D6DA00D4AADD /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - 5A037FED2C74D6DB00D4AADD /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - 5A037FEE2C74D6E200D4AADD /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - 5A037FEF2C74D6E300D4AADD /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - 5A037FF02C74D6E500D4AADD /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - 5A037FF12C74D6E500D4AADD /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - 5A037FF22C74D6E600D4AADD /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - 5A037FF32C74D6E800D4AADD /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - 5A037FF42C74D6E800D4AADD /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - 5A037FF52C74D6E900D4AADD /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - 5A037FF62C74D6EA00D4AADD /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - 5A037FF72C74D6EA00D4AADD /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - 5A037FF82C74D6FF00D4AADD /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - 5A037FF92C74D70000D4AADD /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - 5A037FFA2C74D70100D4AADD /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - 5A037FFB2C74D70200D4AADD /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - 5A037FFC2C74D70300D4AADD /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - 5A037FFD2C74D70400D4AADD /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - 5A037FFE2C74D70400D4AADD /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - 5A037FFF2C74D70500D4AADD /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - 5A0380002C74D70600D4AADD /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - 5A0380012C74D70700D4AADD /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - 5A0380022C74D70B00D4AADD /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - 5A0380032C74D70C00D4AADD /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - 5A0380042C74D70D00D4AADD /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - 5A0380052C74D70D00D4AADD /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - 5A0380062C74D70E00D4AADD /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - 5A0380072C74D70F00D4AADD /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - 5A0380082C74D70F00D4AADD /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - 5A0380092C74D71100D4AADD /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - 5A03800A2C74D71300D4AADD /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - 5A03800B2C74D71400D4AADD /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - 5A03800C2C74D71900D4AADD /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - 5A03800D2C74D71A00D4AADD /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - 5A03800E2C74D71B00D4AADD /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - 5A03800F2C74D71C00D4AADD /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - 5A0380102C74D71D00D4AADD /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - 5A0380112C74D71F00D4AADD /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - 5A0380122C74D71F00D4AADD /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - 5A0380132C74D72000D4AADD /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - 5A0380142C74D72100D4AADD /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - 5A0380152C74D72200D4AADD /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - 5A0380162C74D72600D4AADD /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - 5A0380172C74D72700D4AADD /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - 5A0380182C74D72700D4AADD /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - 5A0380192C74D72800D4AADD /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - 5A03801A2C74D72900D4AADD /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - 5A03801B2C74D72B00D4AADD /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - 5A03801C2C74D72B00D4AADD /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - 5A03801D2C74D72C00D4AADD /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - 5A03801E2C74D72D00D4AADD /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - 5A03801F2C74D72E00D4AADD /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - 5A0380202C74D73100D4AADD /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; - 5A0380212C74D73100D4AADD /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; - 5A0380222C74D73200D4AADD /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; - 5A0380232C74D73300D4AADD /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; - 5A0380242C74D73400D4AADD /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; - 5A0380252C74D73400D4AADD /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; - 5A0380262C74D73500D4AADD /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; - 5A0380272C74D73600D4AADD /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; - 5A0380282C74D73600D4AADD /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; - 5A0380292C74D73700D4AADD /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; 5A68DA412CDE7B7A00897FAD /* RadioTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A68DA3D2CDE7B7900897FAD /* RadioTableViewCell.swift */; }; 5A68DA422CDE7B7A00897FAD /* RadioTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5A68DA3E2CDE7B7900897FAD /* RadioTableViewCell.xib */; }; 5A68DA432CDE7B7A00897FAD /* SelectionViewTemplateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A68DA3F2CDE7B7900897FAD /* SelectionViewTemplateViewController.swift */; }; 5A8FFB6B2C5A9D9C00F4B571 /* English.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D1AFDF3D29CA66D00033BF27 /* English.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 5A8FFB702C5E5A6F00F4B571 /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; 693150472C881DCE005F99E8 /* BaseTableViewControllerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 693150462C881DCE005F99E8 /* BaseTableViewControllerTest.swift */; }; 69B81EBC2BFB8C77008CAB85 /* TipCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69B81EBB2BFB8C77008CAB85 /* TipCardView.swift */; }; 84AF4D882C3575EA009AE0D2 /* UIDeviceExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84AF4D872C3575EA009AE0D2 /* UIDeviceExtensions.swift */; }; @@ -250,8 +169,6 @@ D109A230275B6A8C005E2271 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; D109A231275B6A8C005E2271 /* Keyboard.xib in Resources */ = {isa = PBXBuildFile; fileRef = D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */; }; D109A232275B6A8C005E2271 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; - D109A237275B6A99005E2271 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; - D109A238275B6A9A005E2271 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; D111E9A227AFE4F300746F92 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A127AFE4F300746F92 /* CommandBar.swift */; }; D111E9A327AFE4F300746F92 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A127AFE4F300746F92 /* CommandBar.swift */; }; D111E9A427AFE4F300746F92 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A127AFE4F300746F92 /* CommandBar.swift */; }; @@ -294,13 +211,6 @@ D12EB9C52C81C10900181765 /* HEInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D12EB9B92C81C0E700181765 /* HEInterfaceVariables.swift */; }; D1362A39274C106A00C00E48 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; D13E0DC92C86530E007F00AF /* TestExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D13E0DC82C86530E007F00AF /* TestExtensions.swift */; }; - D15E297F29E41B3B006B2C81 /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - D15E298229E41B56006B2C81 /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - D15E298429E41B74006B2C81 /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - D15E298629E41B8F006B2C81 /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - D15E298829E41BA1006B2C81 /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - D15E298A29E41BAD006B2C81 /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - D15E298C29E41BBE006B2C81 /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; D1608668270B6D3C00134D48 /* ESKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1608667270B6D3C00134D48 /* ESKeyboardViewController.swift */; }; D160866C270B6D3C00134D48 /* Spanish.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D1608665270B6D3C00134D48 /* Spanish.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; D16150FC2E9DBDC500131732 /* IDLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D16150FB2E9DBDC500131732 /* IDLanguageData.sqlite */; }; @@ -316,14 +226,6 @@ D16151062E9DBDED00131732 /* IDLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D16150FB2E9DBDC500131732 /* IDLanguageData.sqlite */; }; D16151072E9DBDED00131732 /* IDLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D16150FB2E9DBDC500131732 /* IDLanguageData.sqlite */; }; D16151082E9DBDED00131732 /* IDLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D16150FB2E9DBDC500131732 /* IDLanguageData.sqlite */; }; - D16151092E9DBE0400131732 /* DELanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298129E41B56006B2C81 /* DELanguageData.sqlite */; }; - D161510A2E9DBE1400131732 /* FRLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */; }; - D161510B2E9DBE1D00131732 /* ENLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */; }; - D161510C2E9DBE2B00131732 /* ITLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */; }; - D161510D2E9DBE3600131732 /* PTLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */; }; - D161510E2E9DBE3D00131732 /* RULanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */; }; - D161510F2E9DBE4500131732 /* ESLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */; }; - D16151102E9DBE4C00131732 /* SVLanguageData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */; }; D1671A67275A1E8700A7C118 /* Russian.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D1671A60275A1E8700A7C118 /* Russian.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; D1671A71275A1FA200A7C118 /* RUKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1671A70275A1FA200A7C118 /* RUKeyboardViewController.swift */; }; D1671A72275A1FC000A7C118 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DD94F022D6A40000FF8845 /* Extensions.swift */; }; @@ -332,7 +234,6 @@ D1671A75275A1FC000A7C118 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; D1671A76275A1FC000A7C118 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; D1671A77275A1FC000A7C118 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; - D1671A7A275A1FC900A7C118 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; D16D975429C75A4900E33F86 /* NBKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1AB5B1729C7554A00CCB0C1 /* NBKeyboardViewController.swift */; }; D16DD37029E7850600FB9022 /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = D16DD36F29E7850600FB9022 /* SwiftyJSON */; }; D16DD37329E7853800FB9022 /* GRDB in Frameworks */ = {isa = PBXBuildFile; productRef = D16DD37229E7853800FB9022 /* GRDB */; }; @@ -386,13 +287,6 @@ D17193E427AECAA60038660B /* RUInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */; }; D17193E527AECAA60038660B /* RUInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */; }; D17193E627AECAA60038660B /* RUInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */; }; - D17193E827AECAE60038660B /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; - D17193E927AECAE60038660B /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; - D17193EA27AECAE60038660B /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; - D17193EB27AECAE60038660B /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; - D17193EC27AECAE60038660B /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; - D17193ED27AECAE60038660B /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; - D17193EE27AECAE60038660B /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; D17193F027AECB350038660B /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; D17193F127AECB350038660B /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; D17193F227AECB350038660B /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; @@ -400,48 +294,6 @@ D17193F427AECB350038660B /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; D17193F527AECB350038660B /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; D17193F627AECB350038660B /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; - D17193F827AECC930038660B /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; - D17193F927AECC930038660B /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; - D17193FA27AECC930038660B /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; - D17193FB27AECC930038660B /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; - D17193FC27AECC930038660B /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; - D17193FD27AECC930038660B /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; - D17193FE27AECC930038660B /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; - D171940027AECCD10038660B /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; - D171940127AECCD10038660B /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; - D171940227AECCD10038660B /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; - D171940327AECCD10038660B /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; - D171940427AECCD10038660B /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; - D171940527AECCD10038660B /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; - D171940627AECCD10038660B /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; - D171940827AECCE50038660B /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; - D171940927AECCE50038660B /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; - D171940A27AECCE50038660B /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; - D171940B27AECCE50038660B /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; - D171940C27AECCE50038660B /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; - D171940D27AECCE50038660B /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; - D171940E27AECCE50038660B /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; - D171941027AECCF50038660B /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; - D171941127AECCF50038660B /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; - D171941227AECCF50038660B /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; - D171941327AECCF50038660B /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; - D171941427AECCF50038660B /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; - D171941527AECCF50038660B /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; - D171941627AECCF50038660B /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; - D171941827AECD070038660B /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D171941927AECD070038660B /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D171941A27AECD070038660B /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D171941B27AECD070038660B /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D171941C27AECD070038660B /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D171941D27AECD070038660B /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D171941E27AECD070038660B /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D171942027AECD170038660B /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; - D171942127AECD170038660B /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; - D171942227AECD170038660B /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; - D171942327AECD170038660B /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; - D171942427AECD170038660B /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; - D171942527AECD170038660B /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; - D171942627AECD170038660B /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; D171942727AECEA60038660B /* DEInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193CF27AEC9EC0038660B /* DEInterfaceVariables.swift */; }; D171942827AECEA70038660B /* DEInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193CF27AEC9EC0038660B /* DEInterfaceVariables.swift */; }; D171942927AECEA70038660B /* DEInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193CF27AEC9EC0038660B /* DEInterfaceVariables.swift */; }; @@ -463,7 +315,6 @@ D171943D27AEF0560038660B /* KeyboardStyling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171943727AEF0560038660B /* KeyboardStyling.swift */; }; D171943E27AEF0560038660B /* KeyboardStyling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171943727AEF0560038660B /* KeyboardStyling.swift */; }; D171944927AEF7290038660B /* KeyboardKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171942E27AEDE110038660B /* KeyboardKeys.swift */; }; - D171944A27AEFC620038660B /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; D171945427AF04E50038660B /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; D171945527AF05D40038660B /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DD94F022D6A40000FF8845 /* Extensions.swift */; }; D171945827AF237C0038660B /* ScribeKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171945727AF237C0038660B /* ScribeKey.swift */; }; @@ -516,7 +367,6 @@ D18EA8A72760D6F5001E1358 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; D18EA8A82760D6F5001E1358 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; D18EA8A92760D6F5001E1358 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DD94F022D6A40000FF8845 /* Extensions.swift */; }; - D18EA8AC2760D701001E1358 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; D190B242274056D400705659 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; D190B243274056D400705659 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; D190B2442740576600705659 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DD94F022D6A40000FF8845 /* Extensions.swift */; }; @@ -524,16 +374,12 @@ D190B2482741B24F00705659 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; D190B24A2741B31F00705659 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; D190B24B2741B31F00705659 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; - D190B24E2741B61000705659 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; - D190B24F2741B61000705659 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; D190B2582742525C00705659 /* Keyboard.xib in Resources */ = {isa = PBXBuildFile; fileRef = D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */; }; D190B26827426ACD00705659 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; D190B26927426ACD00705659 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; D1A2DCB127AD37BD0057A10D /* InstallScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A2DCB027AD37BD0057A10D /* InstallScreen.swift */; }; D1A2DCB427AD3EB50057A10D /* AppUISymbols.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A2DCB327AD3EB50057A10D /* AppUISymbols.swift */; }; - D1AB5B2629C757A100CCB0C1 /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; D1AB5B2729C757A100CCB0C1 /* InstallScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A2DCB027AD37BD0057A10D /* InstallScreen.swift */; }; - D1AB5B2829C757A100CCB0C1 /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; D1AB5B2929C757A100CCB0C1 /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; D1AB5B2A29C757A100CCB0C1 /* ScribeColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C228F5D7AC00E1CBC2 /* ScribeColor.swift */; }; D1AB5B2B29C757A100CCB0C1 /* ToolTipViewTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396E293B9DF2003AE55B /* ToolTipViewTheme.swift */; }; @@ -541,22 +387,16 @@ D1AB5B2D29C757A100CCB0C1 /* ITInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D5227BBBA360085FE5E /* ITInterfaceVariables.swift */; }; D1AB5B2E29C757A100CCB0C1 /* PTInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193D727AECA450038660B /* PTInterfaceVariables.swift */; }; D1AB5B2F29C757A100CCB0C1 /* ToolTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30489C1D2936DAB700B59393 /* ToolTipView.swift */; }; - D1AB5B3029C757A100CCB0C1 /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; D1AB5B3129C757A100CCB0C1 /* KeyAltChars.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B0719F27C6A1AA00FD7DBD /* KeyAltChars.swift */; }; - D1AB5B3229C757A100CCB0C1 /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; D1AB5B3329C757A100CCB0C1 /* FR-AZERTYInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D180EC0228FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift */; }; D1AB5B3429C757A100CCB0C1 /* KeyboardStyling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171943727AEF0560038660B /* KeyboardStyling.swift */; }; D1AB5B3529C757A100CCB0C1 /* ToolTipViewDatasource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396C293B9DDC003AE55B /* ToolTipViewDatasource.swift */; }; D1AB5B3629C757A100CCB0C1 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A127AFE4F300746F92 /* CommandBar.swift */; }; - D1AB5B3729C757A100CCB0C1 /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D1AB5B3829C757A100CCB0C1 /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; D1AB5B3929C757A100CCB0C1 /* KeyboardKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171942E27AEDE110038660B /* KeyboardKeys.swift */; }; D1AB5B3A29C757A100CCB0C1 /* Conjugate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171946427AF31770038660B /* Conjugate.swift */; }; - D1AB5B3B29C757A100CCB0C1 /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; D1AB5B3C29C757A100CCB0C1 /* DEInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193CF27AEC9EC0038660B /* DEInterfaceVariables.swift */; }; D1AB5B3D29C757A100CCB0C1 /* Annotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B927AFE7B200746F92 /* Annotate.swift */; }; D1AB5B3E29C757A100CCB0C1 /* InformationToolTipData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453963293B9D18003AE55B /* InformationToolTipData.swift */; }; - D1AB5B3F29C757A100CCB0C1 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; D1AB5B4029C757A100CCB0C1 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; D1AB5B4129C757A100CCB0C1 /* Translate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B127AFE79500746F92 /* Translate.swift */; }; D1AB5B4229C757A100CCB0C1 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; @@ -566,7 +406,6 @@ D1AB5B4629C757A100CCB0C1 /* ToolTipViewUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453968293B9DB4003AE55B /* ToolTipViewUpdatable.swift */; }; D1AB5B4829C757A100CCB0C1 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; D1AB5B4929C757A100CCB0C1 /* UIColor+ScribeColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C328F5D7AC00E1CBC2 /* UIColor+ScribeColors.swift */; }; - D1AB5B4A29C757A100CCB0C1 /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; D1AB5B4B29C757A100CCB0C1 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; D1AB5B4C29C757A100CCB0C1 /* FR-QWERTYInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17693DC28FC8CC300DF0FBB /* FR-QWERTYInterfaceVariables.swift */; }; D1AB5B4D29C757A100CCB0C1 /* RUInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */; }; @@ -575,9 +414,7 @@ D1AB5B5029C757A100CCB0C1 /* KeyAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B0719627C63C9100FD7DBD /* KeyAnimation.swift */; }; D1AB5B5629C757A100CCB0C1 /* Keyboard.xib in Resources */ = {isa = PBXBuildFile; fileRef = D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */; }; D1AB5B5929C757A100CCB0C1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 38BD213D22D5908100C6795D /* Assets.xcassets */; }; - D1AFDF0429CA66D00033BF27 /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; D1AFDF0529CA66D00033BF27 /* InstallScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A2DCB027AD37BD0057A10D /* InstallScreen.swift */; }; - D1AFDF0629CA66D00033BF27 /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; D1AFDF0729CA66D00033BF27 /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; D1AFDF0829CA66D00033BF27 /* ScribeColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C228F5D7AC00E1CBC2 /* ScribeColor.swift */; }; D1AFDF0929CA66D00033BF27 /* ToolTipViewTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396E293B9DF2003AE55B /* ToolTipViewTheme.swift */; }; @@ -585,22 +422,16 @@ D1AFDF0B29CA66D00033BF27 /* ITInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D5227BBBA360085FE5E /* ITInterfaceVariables.swift */; }; D1AFDF0C29CA66D00033BF27 /* PTInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193D727AECA450038660B /* PTInterfaceVariables.swift */; }; D1AFDF0D29CA66D00033BF27 /* ToolTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30489C1D2936DAB700B59393 /* ToolTipView.swift */; }; - D1AFDF0E29CA66D00033BF27 /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; D1AFDF0F29CA66D00033BF27 /* KeyAltChars.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B0719F27C6A1AA00FD7DBD /* KeyAltChars.swift */; }; - D1AFDF1029CA66D00033BF27 /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; D1AFDF1129CA66D00033BF27 /* FR-AZERTYInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D180EC0228FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift */; }; D1AFDF1229CA66D00033BF27 /* KeyboardStyling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171943727AEF0560038660B /* KeyboardStyling.swift */; }; D1AFDF1329CA66D00033BF27 /* ToolTipViewDatasource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396C293B9DDC003AE55B /* ToolTipViewDatasource.swift */; }; D1AFDF1429CA66D00033BF27 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A127AFE4F300746F92 /* CommandBar.swift */; }; - D1AFDF1529CA66D00033BF27 /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D1AFDF1629CA66D00033BF27 /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; D1AFDF1729CA66D00033BF27 /* KeyboardKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171942E27AEDE110038660B /* KeyboardKeys.swift */; }; D1AFDF1829CA66D00033BF27 /* Conjugate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171946427AF31770038660B /* Conjugate.swift */; }; - D1AFDF1929CA66D00033BF27 /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; D1AFDF1A29CA66D00033BF27 /* DEInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193CF27AEC9EC0038660B /* DEInterfaceVariables.swift */; }; D1AFDF1B29CA66D00033BF27 /* Annotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B927AFE7B200746F92 /* Annotate.swift */; }; D1AFDF1C29CA66D00033BF27 /* InformationToolTipData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453963293B9D18003AE55B /* InformationToolTipData.swift */; }; - D1AFDF1D29CA66D00033BF27 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; D1AFDF1E29CA66D00033BF27 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; D1AFDF1F29CA66D00033BF27 /* Translate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B127AFE79500746F92 /* Translate.swift */; }; D1AFDF2029CA66D00033BF27 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; @@ -610,7 +441,6 @@ D1AFDF2429CA66D00033BF27 /* ToolTipViewUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453968293B9DB4003AE55B /* ToolTipViewUpdatable.swift */; }; D1AFDF2629CA66D00033BF27 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; D1AFDF2729CA66D00033BF27 /* UIColor+ScribeColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C328F5D7AC00E1CBC2 /* UIColor+ScribeColors.swift */; }; - D1AFDF2829CA66D00033BF27 /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; D1AFDF2929CA66D00033BF27 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; D1AFDF2A29CA66D00033BF27 /* FR-QWERTYInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17693DC28FC8CC300DF0FBB /* FR-QWERTYInterfaceVariables.swift */; }; D1AFDF2B29CA66D00033BF27 /* RUInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */; }; @@ -619,9 +449,7 @@ D1AFDF2E29CA66D00033BF27 /* KeyAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B0719627C63C9100FD7DBD /* KeyAnimation.swift */; }; D1AFDF3429CA66D00033BF27 /* Keyboard.xib in Resources */ = {isa = PBXBuildFile; fileRef = D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */; }; D1AFDF3729CA66D00033BF27 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 38BD213D22D5908100C6795D /* Assets.xcassets */; }; - D1AFDF8129CA66F40033BF27 /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; D1AFDF8229CA66F40033BF27 /* InstallScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A2DCB027AD37BD0057A10D /* InstallScreen.swift */; }; - D1AFDF8329CA66F40033BF27 /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; D1AFDF8429CA66F40033BF27 /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; D1AFDF8529CA66F40033BF27 /* ScribeColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C228F5D7AC00E1CBC2 /* ScribeColor.swift */; }; D1AFDF8629CA66F40033BF27 /* ToolTipViewTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396E293B9DF2003AE55B /* ToolTipViewTheme.swift */; }; @@ -629,22 +457,16 @@ D1AFDF8829CA66F40033BF27 /* ITInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D5227BBBA360085FE5E /* ITInterfaceVariables.swift */; }; D1AFDF8929CA66F40033BF27 /* PTInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193D727AECA450038660B /* PTInterfaceVariables.swift */; }; D1AFDF8A29CA66F40033BF27 /* ToolTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30489C1D2936DAB700B59393 /* ToolTipView.swift */; }; - D1AFDF8B29CA66F40033BF27 /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; D1AFDF8C29CA66F40033BF27 /* KeyAltChars.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B0719F27C6A1AA00FD7DBD /* KeyAltChars.swift */; }; - D1AFDF8D29CA66F40033BF27 /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; D1AFDF8E29CA66F40033BF27 /* FR-AZERTYInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D180EC0228FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift */; }; D1AFDF8F29CA66F40033BF27 /* KeyboardStyling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171943727AEF0560038660B /* KeyboardStyling.swift */; }; D1AFDF9029CA66F40033BF27 /* ToolTipViewDatasource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396C293B9DDC003AE55B /* ToolTipViewDatasource.swift */; }; D1AFDF9129CA66F40033BF27 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A127AFE4F300746F92 /* CommandBar.swift */; }; - D1AFDF9229CA66F40033BF27 /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D1AFDF9329CA66F40033BF27 /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; D1AFDF9429CA66F40033BF27 /* KeyboardKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171942E27AEDE110038660B /* KeyboardKeys.swift */; }; D1AFDF9529CA66F40033BF27 /* Conjugate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171946427AF31770038660B /* Conjugate.swift */; }; - D1AFDF9629CA66F40033BF27 /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; D1AFDF9729CA66F40033BF27 /* DEInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193CF27AEC9EC0038660B /* DEInterfaceVariables.swift */; }; D1AFDF9829CA66F40033BF27 /* Annotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B927AFE7B200746F92 /* Annotate.swift */; }; D1AFDF9929CA66F40033BF27 /* InformationToolTipData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453963293B9D18003AE55B /* InformationToolTipData.swift */; }; - D1AFDF9A29CA66F40033BF27 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; D1AFDF9B29CA66F40033BF27 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; D1AFDF9C29CA66F40033BF27 /* Translate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B127AFE79500746F92 /* Translate.swift */; }; D1AFDF9D29CA66F40033BF27 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; @@ -654,7 +476,6 @@ D1AFDFA129CA66F40033BF27 /* ToolTipViewUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453968293B9DB4003AE55B /* ToolTipViewUpdatable.swift */; }; D1AFDFA329CA66F40033BF27 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; D1AFDFA429CA66F40033BF27 /* UIColor+ScribeColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C328F5D7AC00E1CBC2 /* UIColor+ScribeColors.swift */; }; - D1AFDFA529CA66F40033BF27 /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; D1AFDFA629CA66F40033BF27 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; D1AFDFA729CA66F40033BF27 /* FR-QWERTYInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17693DC28FC8CC300DF0FBB /* FR-QWERTYInterfaceVariables.swift */; }; D1AFDFA829CA66F40033BF27 /* RUInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */; }; @@ -665,9 +486,7 @@ D1AFDFB429CA66F40033BF27 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 38BD213D22D5908100C6795D /* Assets.xcassets */; }; D1AFDFBC29CA67EE0033BF27 /* DAKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1AFDE7929CA658B0033BF27 /* DAKeyboardViewController.swift */; }; D1AFDFBD29CA67F10033BF27 /* ENKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1AFDE6A29CA65740033BF27 /* ENKeyboardViewController.swift */; }; - D1AFDFD729CA6E900033BF27 /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; D1AFDFD829CA6E900033BF27 /* InstallScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A2DCB027AD37BD0057A10D /* InstallScreen.swift */; }; - D1AFDFD929CA6E900033BF27 /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; D1AFDFDA29CA6E900033BF27 /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; D1AFDFDB29CA6E900033BF27 /* ScribeColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C228F5D7AC00E1CBC2 /* ScribeColor.swift */; }; D1AFDFDC29CA6E900033BF27 /* ToolTipViewTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396E293B9DF2003AE55B /* ToolTipViewTheme.swift */; }; @@ -675,22 +494,16 @@ D1AFDFDE29CA6E900033BF27 /* ITInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D5227BBBA360085FE5E /* ITInterfaceVariables.swift */; }; D1AFDFDF29CA6E900033BF27 /* PTInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193D727AECA450038660B /* PTInterfaceVariables.swift */; }; D1AFDFE029CA6E900033BF27 /* ToolTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30489C1D2936DAB700B59393 /* ToolTipView.swift */; }; - D1AFDFE129CA6E900033BF27 /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; D1AFDFE229CA6E900033BF27 /* KeyAltChars.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B0719F27C6A1AA00FD7DBD /* KeyAltChars.swift */; }; - D1AFDFE329CA6E900033BF27 /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; D1AFDFE429CA6E900033BF27 /* FR-AZERTYInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D180EC0228FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift */; }; D1AFDFE529CA6E900033BF27 /* KeyboardStyling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171943727AEF0560038660B /* KeyboardStyling.swift */; }; D1AFDFE629CA6E900033BF27 /* ToolTipViewDatasource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396C293B9DDC003AE55B /* ToolTipViewDatasource.swift */; }; D1AFDFE729CA6E900033BF27 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A127AFE4F300746F92 /* CommandBar.swift */; }; - D1AFDFE829CA6E900033BF27 /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D1AFDFE929CA6E900033BF27 /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; D1AFDFEA29CA6E900033BF27 /* KeyboardKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171942E27AEDE110038660B /* KeyboardKeys.swift */; }; D1AFDFEB29CA6E900033BF27 /* Conjugate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171946427AF31770038660B /* Conjugate.swift */; }; - D1AFDFEC29CA6E900033BF27 /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; D1AFDFED29CA6E900033BF27 /* DEInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193CF27AEC9EC0038660B /* DEInterfaceVariables.swift */; }; D1AFDFEE29CA6E900033BF27 /* Annotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B927AFE7B200746F92 /* Annotate.swift */; }; D1AFDFEF29CA6E900033BF27 /* InformationToolTipData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453963293B9D18003AE55B /* InformationToolTipData.swift */; }; - D1AFDFF029CA6E900033BF27 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; D1AFDFF129CA6E900033BF27 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; D1AFDFF229CA6E900033BF27 /* Translate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B127AFE79500746F92 /* Translate.swift */; }; D1AFDFF329CA6E900033BF27 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; @@ -700,7 +513,6 @@ D1AFDFF729CA6E900033BF27 /* ToolTipViewUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453968293B9DB4003AE55B /* ToolTipViewUpdatable.swift */; }; D1AFDFF929CA6E900033BF27 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; D1AFDFFA29CA6E900033BF27 /* UIColor+ScribeColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C328F5D7AC00E1CBC2 /* UIColor+ScribeColors.swift */; }; - D1AFDFFB29CA6E900033BF27 /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; D1AFDFFC29CA6E900033BF27 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; D1AFDFFD29CA6E900033BF27 /* FR-QWERTYInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17693DC28FC8CC300DF0FBB /* FR-QWERTYInterfaceVariables.swift */; }; D1AFDFFE29CA6E900033BF27 /* RUInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */; }; @@ -728,16 +540,9 @@ D1B071A727C6A1AA00FD7DBD /* KeyAltChars.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B0719F27C6A1AA00FD7DBD /* KeyAltChars.swift */; }; D1B81D2227BBB5320085FE5E /* ITKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D2127BBB5320085FE5E /* ITKeyboardViewController.swift */; }; D1B81D2627BBB5320085FE5E /* Italian.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D1B81D1F27BBB5320085FE5E /* Italian.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - D1B81D2A27BBB6780085FE5E /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; D1B81D2B27BBB6830085FE5E /* DEInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193CF27AEC9EC0038660B /* DEInterfaceVariables.swift */; }; - D1B81D2D27BBB68B0085FE5E /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; - D1B81D2E27BBB69B0085FE5E /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; D1B81D2F27BBB69E0085FE5E /* PTInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193D727AECA450038660B /* PTInterfaceVariables.swift */; }; - D1B81D3027BBB6A30085FE5E /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; D1B81D3127BBB6A60085FE5E /* RUInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */; }; - D1B81D3227BBB6AA0085FE5E /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - D1B81D3327BBB6AD0085FE5E /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; - D1B81D3427BBB6B30085FE5E /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; D1B81D3527BBB6B50085FE5E /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; D1B81D3A27BBB6F90085FE5E /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; D1B81D3B27BBB6FC0085FE5E /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DD94F022D6A40000FF8845 /* Extensions.swift */; }; @@ -745,7 +550,6 @@ D1B81D3D27BBB7020085FE5E /* KeyboardKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171942E27AEDE110038660B /* KeyboardKeys.swift */; }; D1B81D3E27BBB7040085FE5E /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; D1B81D3F27BBB7070085FE5E /* KeyboardStyling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171943727AEF0560038660B /* KeyboardStyling.swift */; }; - D1B81D4027BBB70C0085FE5E /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; D1B81D4127BBB70E0085FE5E /* Keyboard.xib in Resources */ = {isa = PBXBuildFile; fileRef = D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */; }; D1B81D4227BBB71C0085FE5E /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; D1B81D4327BBB71C0085FE5E /* Annotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B927AFE7B200746F92 /* Annotate.swift */; }; @@ -754,14 +558,6 @@ D1B81D4627BBB71C0085FE5E /* ScribeKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171945727AF237C0038660B /* ScribeKey.swift */; }; D1B81D4727BBB71C0085FE5E /* Translate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B127AFE79500746F92 /* Translate.swift */; }; D1B81D4827BBB71C0085FE5E /* Plural.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A927AFE78600746F92 /* Plural.swift */; }; - D1B81D4A27BBBA200085FE5E /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; - D1B81D4B27BBBA200085FE5E /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; - D1B81D4C27BBBA200085FE5E /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; - D1B81D4D27BBBA200085FE5E /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; - D1B81D4E27BBBA200085FE5E /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; - D1B81D4F27BBBA200085FE5E /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; - D1B81D5027BBBA200085FE5E /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; - D1B81D5127BBBA200085FE5E /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; D1B81D5327BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D5227BBBA360085FE5E /* ITInterfaceVariables.swift */; }; D1B81D5427BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D5227BBBA360085FE5E /* ITInterfaceVariables.swift */; }; D1B81D5527BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D5227BBBA360085FE5E /* ITInterfaceVariables.swift */; }; @@ -772,23 +568,8 @@ D1B81D5A27BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D5227BBBA360085FE5E /* ITInterfaceVariables.swift */; }; D1C0ACDA2719E0AA001E11C3 /* Keyboard.xib in Resources */ = {isa = PBXBuildFile; fileRef = D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */; }; D1CDED752A859DDD00098546 /* DAInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED742A859DDD00098546 /* DAInterfaceVariables.swift */; }; - D1CDED772A859E4800098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED792A859FB600098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; D1CDED7B2A859FBF00098546 /* ENInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7A2A859FBF00098546 /* ENInterfaceVariables.swift */; }; - D1CDED7F2A85A05C00098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; D1CDED812A85A12400098546 /* NBInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED802A85A12400098546 /* NBInterfaceVariables.swift */; }; - D1CDED832A85A12C00098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDED842A85AE5800098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED852A85AE5900098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED862A85AE5A00098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED872A85AE5A00098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED882A85AE5B00098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED892A85AE5B00098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED8A2A85AE5C00098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED8B2A85AE5C00098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED8C2A85AE5D00098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED8D2A85AE5E00098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; - D1CDED8E2A85AE5E00098546 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; D1CDED8F2A85AE6100098546 /* DAInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED742A859DDD00098546 /* DAInterfaceVariables.swift */; }; D1CDED902A85AE6100098546 /* DAInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED742A859DDD00098546 /* DAInterfaceVariables.swift */; }; D1CDED912A85AE6200098546 /* DAInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED742A859DDD00098546 /* DAInterfaceVariables.swift */; }; @@ -800,17 +581,6 @@ D1CDED972A85AE6500098546 /* DAInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED742A859DDD00098546 /* DAInterfaceVariables.swift */; }; D1CDED982A85AE6500098546 /* DAInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED742A859DDD00098546 /* DAInterfaceVariables.swift */; }; D1CDED992A85AE6600098546 /* DAInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED742A859DDD00098546 /* DAInterfaceVariables.swift */; }; - D1CDED9A2A85AE6A00098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - D1CDED9B2A85AE6A00098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - D1CDED9C2A85AE6B00098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - D1CDED9D2A85AE6C00098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - D1CDED9E2A85AE6C00098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - D1CDED9F2A85AE6D00098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - D1CDEDA02A85AE6D00098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - D1CDEDA22A85AE6F00098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - D1CDEDA32A85AE7000098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - D1CDEDA42A85AE7000098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - D1CDEDA52A85AE7000098546 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; D1CDEDA62A85AE7400098546 /* ENInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7A2A859FBF00098546 /* ENInterfaceVariables.swift */; }; D1CDEDA72A85AE7400098546 /* ENInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7A2A859FBF00098546 /* ENInterfaceVariables.swift */; }; D1CDEDA82A85AE7500098546 /* ENInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7A2A859FBF00098546 /* ENInterfaceVariables.swift */; }; @@ -822,28 +592,6 @@ D1CDEDAE2A85AE7800098546 /* ENInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7A2A859FBF00098546 /* ENInterfaceVariables.swift */; }; D1CDEDAF2A85AE7800098546 /* ENInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7A2A859FBF00098546 /* ENInterfaceVariables.swift */; }; D1CDEDB02A85AE7900098546 /* ENInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7A2A859FBF00098546 /* ENInterfaceVariables.swift */; }; - D1CDEDB12A85AE7E00098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDB22A85AE7F00098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDB32A85AE8100098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDB42A85AE8100098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDB52A85AE8200098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDB62A85AE8200098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDB72A85AE8300098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDB82A85AE8300098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDB92A85AE8300098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDBA2A85AE8400098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDBB2A85AE8500098546 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; - D1CDEDC72A85AE9100098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDEDC82A85AE9100098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDEDC92A85AE9100098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDEDCA2A85AE9200098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDEDCB2A85AE9200098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDEDCC2A85AE9300098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDEDCD2A85AE9300098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDEDCE2A85AE9400098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDEDCF2A85AE9400098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDEDD02A85AE9400098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; - D1CDEDD12A85AE9500098546 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; D1CDEDD22A85AE9800098546 /* NBInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED802A85A12400098546 /* NBInterfaceVariables.swift */; }; D1CDEDD32A85AE9800098546 /* NBInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED802A85A12400098546 /* NBInterfaceVariables.swift */; }; D1CDEDD42A85AE9800098546 /* NBInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED802A85A12400098546 /* NBInterfaceVariables.swift */; }; @@ -855,24 +603,53 @@ D1CDEDDA2A85AE9C00098546 /* NBInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED802A85A12400098546 /* NBInterfaceVariables.swift */; }; D1CDEDDB2A85AE9D00098546 /* NBInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED802A85A12400098546 /* NBInterfaceVariables.swift */; }; D1CDEDDC2A85AE9D00098546 /* NBInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED802A85A12400098546 /* NBInterfaceVariables.swift */; }; - D1E385102C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E385112C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E385122C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E385132C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E385142C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E385152C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E385162C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E385172C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E385182C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E385192C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E3851A2C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; - D1E3851B2C977FD200DCE538 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; D1F0367227AAE12200CD7921 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; D1F0367327AAE1B400CD7921 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; + E91980BA2F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980BB2F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980BC2F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980BD2F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980BE2F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980BF2F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980C02F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980C12F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980C22F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980C32F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980C42F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980C52F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980C62F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; + E91980C72F2F540A00B5852F /* NavigationStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91980B92F2F540000B5852F /* NavigationStructure.swift */; }; E9202DF02F0FAA0C001590FC /* DownloadStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9202DEF2F0FAA0C001590FC /* DownloadStateManager.swift */; }; E93179A42F03AE78002ED334 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = E93179A32F03AE77002ED334 /* Localizable.xcstrings */; }; - E937C5CF2E9FF94E00F94F99 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; E96111482F04EC6B001E4F95 /* InstallationDownload.swift in Sources */ = {isa = PBXBuildFile; fileRef = E96111472F04EC62001E4F95 /* InstallationDownload.swift */; }; + E97E650A2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E650B2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E650C2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E650D2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E650E2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E650F2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E65102F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E65112F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E65122F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E65132F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E65142F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E65152F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E65162F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E65172F2CDD730070810A /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */; }; + E97E65192F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E651A2F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E651B2F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E651C2F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E651D2F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E651E2F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E651F2F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E65202F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E65212F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E65222F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E65232F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E65242F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E65252F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; + E97E65262F2CDEC50070810A /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97E65182F2CDEC50070810A /* ESCommandVariables.swift */; }; E996495A2E98A12100200F53 /* GRDB in Frameworks */ = {isa = PBXBuildFile; productRef = E99649592E98A12100200F53 /* GRDB */; }; E996495B2E98A31B00200F53 /* KeyboardProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 198369CB2C7980BA00C1B583 /* KeyboardProvider.swift */; }; E996495C2E98A32900200F53 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; @@ -888,22 +665,13 @@ E99649662E98A48200200F53 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; E99649672E98A4A900200F53 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; E99649682E98A4BF00200F53 /* ScribeColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C228F5D7AC00E1CBC2 /* ScribeColor.swift */; }; - E99649692E98A51000200F53 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; E996496A2E98A52A00200F53 /* KeyboardStyling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171943727AEF0560038660B /* KeyboardStyling.swift */; }; E996496B2E98A56500200F53 /* KeyboardKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171942E27AEDE110038660B /* KeyboardKeys.swift */; }; E996496C2E98A5AF00200F53 /* ToolTipViewTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396E293B9DF2003AE55B /* ToolTipViewTheme.swift */; }; E996496D2E98A5E400200F53 /* InformationToolTipData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453963293B9D18003AE55B /* InformationToolTipData.swift */; }; E996496E2E98A5FE00200F53 /* Conjugate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171946427AF31770038660B /* Conjugate.swift */; }; - E996496F2E98A61400200F53 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; - E99649702E98A61D00200F53 /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; E99649712E98A62C00200F53 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16DD3A429E78A1500FB9022 /* Utilities.swift */; }; E99649722E98A64700200F53 /* Annotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B927AFE7B200746F92 /* Annotate.swift */; }; - E99649732E98A6B800200F53 /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; - E99649742E98A6CF00200F53 /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; - E99649752E98A6D900200F53 /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; - E99649762E98A6E500200F53 /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; - E99649772E98A6F000200F53 /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - E99649782E98A70000200F53 /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; E99649792E98A7A600200F53 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A127AFE4F300746F92 /* CommandBar.swift */; }; E996497A2E98A7B600200F53 /* ScribeKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171945727AF237C0038660B /* ScribeKey.swift */; }; E996497B2E98A7E600200F53 /* ToolTipViewDatasourceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396A293B9DC9003AE55B /* ToolTipViewDatasourceable.swift */; }; @@ -913,13 +681,11 @@ E996497F2E98A82200200F53 /* PTInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193D727AECA450038660B /* PTInterfaceVariables.swift */; }; E99649802E98A83C00200F53 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DD94F022D6A40000FF8845 /* Extensions.swift */; }; E99649812E98A84700200F53 /* RUInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */; }; - E99649822E98A85100200F53 /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; E99649832E98A85D00200F53 /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; E99649842E98A93600200F53 /* UIColor+ScribeColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C328F5D7AC00E1CBC2 /* UIColor+ScribeColors.swift */; }; E99649852E98A9D400200F53 /* Plural.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A927AFE78600746F92 /* Plural.swift */; }; E99649862E98A9E000200F53 /* Translate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B127AFE79500746F92 /* Translate.swift */; }; E99649872E98A9FB00200F53 /* KeyAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B0719627C63C9100FD7DBD /* KeyAnimation.swift */; }; - E99649882E98AAB200200F53 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; E99649892E98AAC300200F53 /* NBInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED802A85A12400098546 /* NBInterfaceVariables.swift */; }; E996498A2E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FAC3892E9894F9008E00AC /* IDInterfaceVariables.swift */; }; E996498B2E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FAC3892E9894F9008E00AC /* IDInterfaceVariables.swift */; }; @@ -936,8 +702,21 @@ E99649962E98B03C00200F53 /* Keyboard.xib in Resources */ = {isa = PBXBuildFile; fileRef = D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */; }; E99649972E98B11100200F53 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 38BD213D22D5908100C6795D /* Assets.xcassets */; }; E9CE5EA82F063E230068A930 /* DownloadDataScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9CE5EA72F063D870068A930 /* DownloadDataScreen.swift */; }; + E9ED937D2F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED937E2F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED937F2F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED93802F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED93812F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED93822F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED93832F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED93842F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED93852F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED93862F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED93872F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED93882F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED93892F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; + E9ED938A2F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */; }; E9FAC39F2E98972D008E00AC /* IDInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FAC3892E9894F9008E00AC /* IDInterfaceVariables.swift */; }; - E9FAC3A02E98972D008E00AC /* IDCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FAC3882E9894F9008E00AC /* IDCommandVariables.swift */; }; E9FAC3A12E98972D008E00AC /* IDKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FAC38A2E9894F9008E00AC /* IDKeyboardViewController.swift */; }; E9FAC3A72E989A84008E00AC /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = E9FAC3A62E989A84008E00AC /* SwiftyJSON */; }; E9FEE6CB2EF14351003A9266 /* WrapperCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FEE6CA2EF1433E003A9266 /* WrapperCell.swift */; }; @@ -958,9 +737,8 @@ EDC364742AE409000001E456 /* InterfaceConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDC364682AE408F20001E456 /* InterfaceConstants.swift */; }; EDEE62252B2DE65A00A0B9C1 /* UIEdgeInsetsExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDEE62242B2DE65A00A0B9C1 /* UIEdgeInsetsExtensions.swift */; }; F740686D2F1FB28E00E8560B /* ConjugateAppScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F740686B2F1FB28E00E8560B /* ConjugateAppScreen.storyboard */; }; - F786BAD32F1E8F70003F7505 /* RUCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940F27AECCF50038660B /* RUCommandVariables.swift */; }; F786BAD42F1E8F70003F7505 /* ThirdPartyLicense.swift in Sources */ = {isa = PBXBuildFile; fileRef = 140158982A430DD000D14E52 /* ThirdPartyLicense.swift */; }; - F786BAD52F1E8F70003F7505 /* LanguageDBManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LanguageDBManager.swift */; }; + F786BAD52F1E8F70003F7505 /* (null) in Sources */ = {isa = PBXBuildFile; }; F786BAD62F1E8F70003F7505 /* AppTextStyling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193BF27AEA33A0038660B /* AppTextStyling.swift */; }; F786BAD72F1E8F70003F7505 /* ScribeColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C228F5D7AC00E1CBC2 /* ScribeColor.swift */; }; F786BAD82F1E8F70003F7505 /* Conjugate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171946427AF31770038660B /* Conjugate.swift */; }; @@ -968,15 +746,10 @@ F786BADA2F1E8F70003F7505 /* AboutTableData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1406B7862A2DFCDD001DF45B /* AboutTableData.swift */; }; F786BADB2F1E8F70003F7505 /* DownloadStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9202DEF2F0FAA0C001590FC /* DownloadStateManager.swift */; }; F786BADC2F1E8F70003F7505 /* IDInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FAC3892E9894F9008E00AC /* IDInterfaceVariables.swift */; }; - F786BADD2F1E8F70003F7505 /* PTCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171940727AECCE50038660B /* PTCommandVariables.swift */; }; F786BADE2F1E8F70003F7505 /* ToolTipViewDatasource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396C293B9DDC003AE55B /* ToolTipViewDatasource.swift */; }; F786BADF2F1E8F70003F7505 /* Translate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B127AFE79500746F92 /* Translate.swift */; }; - F786BAE02F1E8F70003F7505 /* ESCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941727AECD070038660B /* ESCommandVariables.swift */; }; - F786BAE12F1E8F70003F7505 /* DECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193FF27AECCD10038660B /* DECommandVariables.swift */; }; - F786BAE22F1E8F70003F7505 /* FRCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193F727AECC930038660B /* FRCommandVariables.swift */; }; F786BAE32F1E8F70003F7505 /* ScribeKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171945727AF237C0038660B /* ScribeKey.swift */; }; F786BAE42F1E8F70003F7505 /* AppExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1406B78B2A3209CF001DF45B /* AppExtensions.swift */; }; - F786BAE52F1E8F70003F7505 /* ITCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */; }; F786BAE62F1E8F70003F7505 /* FR-AZERTYInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D180EC0228FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift */; }; F786BAE72F1E8F70003F7505 /* ENInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7A2A859FBF00098546 /* ENInterfaceVariables.swift */; }; F786BAE82F1E8F70003F7505 /* InstallationVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38BD213522D5907F00C6795D /* InstallationVC.swift */; }; @@ -988,16 +761,14 @@ F786BAEE2F1E8F70003F7505 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; F786BAEF2F1E8F70003F7505 /* InstallationDownload.swift in Sources */ = {isa = PBXBuildFile; fileRef = E96111472F04EC62001E4F95 /* InstallationDownload.swift */; }; F786BAF02F1E8F70003F7505 /* UIEdgeInsetsExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDEE62242B2DE65A00A0B9C1 /* UIEdgeInsetsExtensions.swift */; }; - F786BAF12F1E8F70003F7505 /* DACommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED762A859E4800098546 /* DACommandVariables.swift */; }; + F786BAF12F1E8F70003F7505 /* (null) in Sources */ = {isa = PBXBuildFile; }; F786BAF22F1E8F70003F7505 /* KeyboardStyling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171943727AEF0560038660B /* KeyboardStyling.swift */; }; F786BAF32F1E8F70003F7505 /* Annotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9B927AFE7B200746F92 /* Annotate.swift */; }; F786BAF42F1E8F70003F7505 /* KeyboardBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19DC85F92C7772FC006E32FD /* KeyboardBuilder.swift */; }; F786BAF52F1E8F70003F7505 /* KeyboardProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 198369CB2C7980BA00C1B583 /* KeyboardProvider.swift */; }; F786BAF62F1E8F70003F7505 /* UIColor+ScribeColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1378C328F5D7AC00E1CBC2 /* UIColor+ScribeColors.swift */; }; F786BAF72F1E8F70003F7505 /* SVInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193EF27AECB350038660B /* SVInterfaceVariables.swift */; }; - F786BAF82F1E8F70003F7505 /* ENCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED782A859FB600098546 /* ENCommandVariables.swift */; }; F786BAF92F1E8F70003F7505 /* TableViewTemplateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 140158A12A4EDB2200D14E52 /* TableViewTemplateViewController.swift */; }; - F786BAFA2F1E8F70003F7505 /* HECommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */; }; F786BAFB2F1E8F70003F7505 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38BD213322D5907F00C6795D /* AppDelegate.swift */; }; F786BAFC2F1E8F70003F7505 /* ToolTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30489C1D2936DAB700B59393 /* ToolTipView.swift */; }; F786BAFD2F1E8F70003F7505 /* ToolTipViewTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3045396E293B9DF2003AE55B /* ToolTipViewTheme.swift */; }; @@ -1007,7 +778,6 @@ F786BB012F1E8F70003F7505 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16DD3A429E78A1500FB9022 /* Utilities.swift */; }; F786BB022F1E8F70003F7505 /* BaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDB460202B03B3E400BEA967 /* BaseTableViewController.swift */; }; F786BB032F1E8F70003F7505 /* DAInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED742A859DDD00098546 /* DAInterfaceVariables.swift */; }; - F786BB042F1E8F70003F7505 /* ESInterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17193E727AECAE60038660B /* ESInterfaceVariables.swift */; }; F786BB052F1E8F70003F7505 /* UIDeviceExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84AF4D872C3575EA009AE0D2 /* UIDeviceExtensions.swift */; }; F786BB062F1E8F70003F7505 /* TipCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69B81EBB2BFB8C77008CAB85 /* TipCardView.swift */; }; F786BB072F1E8F70003F7505 /* InformationToolTipData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453963293B9D18003AE55B /* InformationToolTipData.swift */; }; @@ -1020,13 +790,11 @@ F786BB0E2F1E8F70003F7505 /* Plural.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A927AFE78600746F92 /* Plural.swift */; }; F786BB0F2F1E8F70003F7505 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; F786BB102F1E8F70003F7505 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D111E9A127AFE4F300746F92 /* CommandBar.swift */; }; - F786BB112F1E8F70003F7505 /* SVCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171941F27AECD170038660B /* SVCommandVariables.swift */; }; F786BB122F1E8F70003F7505 /* ViewThemeable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30453966293B9D31003AE55B /* ViewThemeable.swift */; }; F786BB132F1E8F70003F7505 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; F786BB142F1E8F70003F7505 /* SelectionViewTemplateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A68DA3F2CDE7B7900897FAD /* SelectionViewTemplateViewController.swift */; }; F786BB152F1E8F70003F7505 /* AboutTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2486F12B0B4E8C0038AE6A /* AboutTableViewCell.swift */; }; F786BB162F1E8F70003F7505 /* InstallScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A2DCB027AD37BD0057A10D /* InstallScreen.swift */; }; - F786BB172F1E8F70003F7505 /* NBCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CDED822A85A12C00098546 /* NBCommandVariables.swift */; }; F786BB182F1E8F70003F7505 /* KeyboardKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = D171942E27AEDE110038660B /* KeyboardKeys.swift */; }; F786BB192F1E8F70003F7505 /* ParentTableCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 147797B22A2CD5AB0044A53E /* ParentTableCellModel.swift */; }; F786BB1A2F1E8F70003F7505 /* WrapperCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FEE6CA2EF1433E003A9266 /* WrapperCell.swift */; }; @@ -1049,7 +817,7 @@ F786BB2D2F1E8F70003F7505 /* InfoChildTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 147797AF2A2CD3370044A53E /* InfoChildTableViewCell.xib */; }; F786BB2E2F1E8F70003F7505 /* AboutTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = ED2486F22B0B4E8C0038AE6A /* AboutTableViewCell.xib */; }; F786BB2F2F1E8F70003F7505 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = E93179A32F03AE77002ED334 /* Localizable.xcstrings */; }; - F786BB302F1E8F70003F7505 /* TranslationData.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */; }; + F786BB302F1E8F70003F7505 /* (null) in Resources */ = {isa = PBXBuildFile; }; F786BB312F1E8F70003F7505 /* AppScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 38BD213722D5907F00C6795D /* AppScreen.storyboard */; }; F786BB322F1E8F70003F7505 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 38BD213D22D5908100C6795D /* Assets.xcassets */; }; F786BB342F1E8F70003F7505 /* Italian.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D1B81D1F27BBB5320085FE5E /* Italian.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -1317,7 +1085,6 @@ 5A68DA3D2CDE7B7900897FAD /* RadioTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadioTableViewCell.swift; sourceTree = ""; }; 5A68DA3E2CDE7B7900897FAD /* RadioTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RadioTableViewCell.xib; sourceTree = ""; }; 5A68DA3F2CDE7B7900897FAD /* SelectionViewTemplateViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectionViewTemplateViewController.swift; sourceTree = ""; }; - 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = ENLanguageData.sqlite; sourceTree = ""; }; 693150462C881DCE005F99E8 /* BaseTableViewControllerTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTableViewControllerTest.swift; sourceTree = ""; }; 69B81EBB2BFB8C77008CAB85 /* TipCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TipCardView.swift; sourceTree = ""; }; 84AF4D872C3575EA009AE0D2 /* UIDeviceExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIDeviceExtensions.swift; sourceTree = ""; }; @@ -1338,13 +1105,6 @@ D13E0DC62C86530E007F00AF /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; D13E0DC82C86530E007F00AF /* TestExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestExtensions.swift; sourceTree = ""; }; D155AD282BDC6CC20075B18C /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = ""; }; - D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = FRLanguageData.sqlite; sourceTree = ""; }; - D15E298129E41B56006B2C81 /* DELanguageData.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = DELanguageData.sqlite; sourceTree = ""; }; - D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = ITLanguageData.sqlite; sourceTree = ""; }; - D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = PTLanguageData.sqlite; sourceTree = ""; }; - D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = RULanguageData.sqlite; sourceTree = ""; }; - D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = ESLanguageData.sqlite; sourceTree = ""; }; - D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = SVLanguageData.sqlite; sourceTree = ""; }; D1608665270B6D3C00134D48 /* Spanish.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Spanish.appex; sourceTree = BUILT_PRODUCTS_DIR; }; D1608667270B6D3C00134D48 /* ESKeyboardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ESKeyboardViewController.swift; sourceTree = ""; }; D1608669270B6D3C00134D48 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -1358,14 +1118,7 @@ D17193CF27AEC9EC0038660B /* DEInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DEInterfaceVariables.swift; sourceTree = ""; }; D17193D727AECA450038660B /* PTInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PTInterfaceVariables.swift; sourceTree = ""; }; D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUInterfaceVariables.swift; sourceTree = ""; }; - D17193E727AECAE60038660B /* ESInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ESInterfaceVariables.swift; sourceTree = ""; }; D17193EF27AECB350038660B /* SVInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SVInterfaceVariables.swift; sourceTree = ""; }; - D17193F727AECC930038660B /* FRCommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FRCommandVariables.swift; sourceTree = ""; }; - D17193FF27AECCD10038660B /* DECommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DECommandVariables.swift; sourceTree = ""; }; - D171940727AECCE50038660B /* PTCommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PTCommandVariables.swift; sourceTree = ""; }; - D171940F27AECCF50038660B /* RUCommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUCommandVariables.swift; sourceTree = ""; }; - D171941727AECD070038660B /* ESCommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ESCommandVariables.swift; sourceTree = ""; }; - D171941F27AECD170038660B /* SVCommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SVCommandVariables.swift; sourceTree = ""; }; D171942E27AEDE110038660B /* KeyboardKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardKeys.swift; sourceTree = ""; }; D171943727AEF0560038660B /* KeyboardStyling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardStyling.swift; sourceTree = ""; }; D171945727AF237C0038660B /* ScribeKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScribeKey.swift; sourceTree = ""; }; @@ -1380,7 +1133,6 @@ D190B240274056D400705659 /* ColorVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorVariables.swift; sourceTree = ""; }; D190B2462741B24F00705659 /* CommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandVariables.swift; sourceTree = ""; }; D190B2492741B31F00705659 /* InterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceVariables.swift; sourceTree = ""; }; - D190B24D2741B61000705659 /* LanguageDBManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageDBManager.swift; sourceTree = ""; }; D190B2592742565500705659 /* KeyboardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardViewController.swift; sourceTree = ""; }; D190B28F27426F4900705659 /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE.txt; sourceTree = SOURCE_ROOT; }; D190B29027426F4900705659 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = SOURCE_ROOT; }; @@ -1403,16 +1155,11 @@ D1B81D1F27BBB5320085FE5E /* Italian.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Italian.appex; sourceTree = BUILT_PRODUCTS_DIR; }; D1B81D2127BBB5320085FE5E /* ITKeyboardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ITKeyboardViewController.swift; sourceTree = ""; }; D1B81D2327BBB5320085FE5E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ITCommandVariables.swift; sourceTree = ""; }; D1B81D5227BBBA360085FE5E /* ITInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ITInterfaceVariables.swift; sourceTree = ""; }; D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Keyboard.xib; sourceTree = ""; }; D1CDED742A859DDD00098546 /* DAInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DAInterfaceVariables.swift; sourceTree = ""; }; - D1CDED762A859E4800098546 /* DACommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DACommandVariables.swift; sourceTree = ""; }; - D1CDED782A859FB600098546 /* ENCommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ENCommandVariables.swift; sourceTree = ""; }; D1CDED7A2A859FBF00098546 /* ENInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ENInterfaceVariables.swift; sourceTree = ""; }; - D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HECommandVariables.swift; sourceTree = ""; }; D1CDED802A85A12400098546 /* NBInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NBInterfaceVariables.swift; sourceTree = ""; }; - D1CDED822A85A12C00098546 /* NBCommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NBCommandVariables.swift; sourceTree = ""; }; D1D8B2372AE4084D0070B817 /* Swedish.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Swedish.entitlements; sourceTree = ""; }; D1D8B2382AE408620070B817 /* Spanish.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Spanish.entitlements; sourceTree = ""; }; D1D8B2392AE408720070B817 /* Russian.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Russian.entitlements; sourceTree = ""; }; @@ -1420,13 +1167,15 @@ D1D8B23B2AE4089C0070B817 /* Italian.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Italian.entitlements; sourceTree = ""; }; D1D8B23C2AE408AC0070B817 /* German.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = German.entitlements; sourceTree = ""; }; D1D8B23D2AE408C50070B817 /* French.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = French.entitlements; sourceTree = ""; }; - D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = TranslationData.sqlite; sourceTree = ""; }; D1FF8ED12C6C282500EF50AC /* English.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = English.entitlements; sourceTree = ""; }; + E91980B92F2F540000B5852F /* NavigationStructure.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationStructure.swift; sourceTree = ""; }; E9202DEF2F0FAA0C001590FC /* DownloadStateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadStateManager.swift; sourceTree = ""; }; E93179A32F03AE77002ED334 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = Localizable.xcstrings; path = i18n/i18n/Localizable.xcstrings; sourceTree = ""; }; E96111472F04EC62001E4F95 /* InstallationDownload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstallationDownload.swift; sourceTree = ""; }; + E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ESInterfaceVariables.swift; sourceTree = ""; }; + E97E65182F2CDEC50070810A /* ESCommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ESCommandVariables.swift; sourceTree = ""; }; E9CE5EA72F063D870068A930 /* DownloadDataScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadDataScreen.swift; sourceTree = ""; }; - E9FAC3882E9894F9008E00AC /* IDCommandVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IDCommandVariables.swift; sourceTree = ""; }; + E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DynamicConjugationViewController.swift; sourceTree = ""; }; E9FAC3892E9894F9008E00AC /* IDInterfaceVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IDInterfaceVariables.swift; sourceTree = ""; }; E9FAC38A2E9894F9008E00AC /* IDKeyboardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IDKeyboardViewController.swift; sourceTree = ""; }; E9FAC38C2E9894F9008E00AC /* Indonesian.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Indonesian.entitlements; sourceTree = ""; }; @@ -1445,8 +1194,363 @@ F786BB422F1E8F70003F7505 /* ConjugateApp-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "ConjugateApp-Info.plist"; path = "/Users/gauthammohanraj/Developer/Scribe-iOS/ConjugateApp-Info.plist"; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + E98E74352F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = D1AFDF7D29CA66F40033BF27 /* Danish */; + }; + E98E74362F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = D1AFDF0029CA66D00033BF27 /* English */; + }; + E98E74372F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = D109A20A275B6888005E2271 /* French */; + }; + E98E74382F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = 38BD214B22D592CA00C6795D /* German */; + }; + E98E74392F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = D1AFDFD329CA6E900033BF27 /* Hebrew */; + }; + E98E743A2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = E9FAC3922E989712008E00AC /* Indonesian */; + }; + E98E743B2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = D1B81D1E27BBB5320085FE5E /* Italian */; + }; + E98E743C2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = D1AB5B2229C757A100CCB0C1 /* Norwegian */; + }; + E98E743D2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = D109A219275B68B3005E2271 /* Portuguese */; + }; + E98E743E2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = D1671A5F275A1E8700A7C118 /* Russian */; + }; + E98E743F2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = D1608664270B6D3C00134D48 /* Spanish */; + }; + E98E74402F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + DELanguageData.sqlite, + ENLanguageData.sqlite, + ESLanguageData.sqlite, + FRLanguageData.sqlite, + ITLanguageData.sqlite, + PTLanguageData.sqlite, + RULanguageData.sqlite, + SVLanguageData.sqlite, + TranslationData.sqlite, + ); + target = D18EA8982760D4A6001E1358 /* Swedish */; + }; + E9B89DCE2F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = 38BD212F22D5907E00C6795D /* Scribe */; + }; + E9B89DCF2F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = D1AFDF7D29CA66F40033BF27 /* Danish */; + }; + E9B89DD02F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = D1AFDF0029CA66D00033BF27 /* English */; + }; + E9B89DD12F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = D109A20A275B6888005E2271 /* French */; + }; + E9B89DD22F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = 38BD214B22D592CA00C6795D /* German */; + }; + E9B89DD32F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = D1AFDFD329CA6E900033BF27 /* Hebrew */; + }; + E9B89DD42F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = E9FAC3922E989712008E00AC /* Indonesian */; + }; + E9B89DD52F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = D1B81D1E27BBB5320085FE5E /* Italian */; + }; + E9B89DD62F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = D1AB5B2229C757A100CCB0C1 /* Norwegian */; + }; + E9B89DD72F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = D109A219275B68B3005E2271 /* Portuguese */; + }; + E9B89DD82F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = D1671A5F275A1E8700A7C118 /* Russian */; + }; + E9B89DD92F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = D1608664270B6D3C00134D48 /* Spanish */; + }; + E9B89DDA2F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ConjugationManager.swift, + ContractManager.swift, + DataContract.swift, + DeclensionManager.swift, + GenderManager.swift, + LanguageDBManager.swift, + PluralManager.swift, + ); + target = D18EA8982760D4A6001E1358 /* Swedish */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + /* Begin PBXFileSystemSynchronizedRootGroup section */ E943457E2F05638700DFDB20 /* Button */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Button; sourceTree = ""; }; + E98E73BE2F20D8AA005EEDA3 /* Data */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E98E74352F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E74362F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E74372F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E74382F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E74392F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E743A2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E743B2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E743C2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E743D2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E743E2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E743F2F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E98E74402F20EA5E005EEDA3 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Data; sourceTree = ""; }; + E98E73BF2F20D8C3005EEDA3 /* DataContracts */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = DataContracts; sourceTree = ""; }; + E9B89DCD2F226757003E396F /* DataManager */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E9B89DCE2F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DCF2F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DD02F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DD12F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DD22F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DD32F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DD42F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DD52F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DD62F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DD72F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DD82F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DD92F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, E9B89DDA2F22676B003E396F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = DataManager; sourceTree = ""; }; E9DADB332EF3CF9B00702783 /* ConfirmDialog */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = ConfirmDialog; sourceTree = ""; }; /* End PBXFileSystemSynchronizedRootGroup section */ @@ -1734,9 +1838,7 @@ 38BD214D22D592CA00C6795D /* German */ = { isa = PBXGroup; children = ( - D15E298129E41B56006B2C81 /* DELanguageData.sqlite */, D1D8B23C2AE408AC0070B817 /* German.entitlements */, - D17193FF27AECCD10038660B /* DECommandVariables.swift */, D17193CF27AEC9EC0038660B /* DEInterfaceVariables.swift */, 38BD214E22D592CA00C6795D /* DEKeyboardViewController.swift */, 38BD215022D592CA00C6795D /* Info.plist */, @@ -1800,9 +1902,7 @@ D109A20C275B6888005E2271 /* French */ = { isa = PBXGroup; children = ( - D15E297E29E41B3B006B2C81 /* FRLanguageData.sqlite */, D1D8B23D2AE408C50070B817 /* French.entitlements */, - D17193F727AECC930038660B /* FRCommandVariables.swift */, D17693DC28FC8CC300DF0FBB /* FR-QWERTYInterfaceVariables.swift */, D180EC0228FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift */, D109A20D275B6888005E2271 /* FRKeyboardViewController.swift */, @@ -1814,9 +1914,7 @@ D109A21B275B68B3005E2271 /* Portuguese */ = { isa = PBXGroup; children = ( - D15E298529E41B8F006B2C81 /* PTLanguageData.sqlite */, D1D8B23A2AE408850070B817 /* Portuguese.entitlements */, - D171940727AECCE50038660B /* PTCommandVariables.swift */, D17193D727AECA450038660B /* PTInterfaceVariables.swift */, D109A21C275B68B3005E2271 /* PTKeyboardViewController.swift */, D109A21E275B68B3005E2271 /* Info.plist */, @@ -1853,10 +1951,9 @@ D1608666270B6D3C00134D48 /* Spanish */ = { isa = PBXGroup; children = ( - D15E298929E41BAD006B2C81 /* ESLanguageData.sqlite */, D1D8B2382AE408620070B817 /* Spanish.entitlements */, - D171941727AECD070038660B /* ESCommandVariables.swift */, - D17193E727AECAE60038660B /* ESInterfaceVariables.swift */, + E97E65092F2CDD5B0070810A /* ESInterfaceVariables.swift */, + E97E65182F2CDEC50070810A /* ESCommandVariables.swift */, D1608667270B6D3C00134D48 /* ESKeyboardViewController.swift */, D1608669270B6D3C00134D48 /* Info.plist */, ); @@ -1866,9 +1963,7 @@ D1671A61275A1E8700A7C118 /* Russian */ = { isa = PBXGroup; children = ( - D15E298729E41BA1006B2C81 /* RULanguageData.sqlite */, D1D8B2392AE408720070B817 /* Russian.entitlements */, - D171940F27AECCF50038660B /* RUCommandVariables.swift */, D17193DF27AECAA60038660B /* RUInterfaceVariables.swift */, D1671A70275A1FA200A7C118 /* RUKeyboardViewController.swift */, D166FCF1275A197B0047E62B /* Info.plist */, @@ -1893,9 +1988,7 @@ D18EA89A2760D4A6001E1358 /* Swedish */ = { isa = PBXGroup; children = ( - D15E298B29E41BBE006B2C81 /* SVLanguageData.sqlite */, D1D8B2372AE4084D0070B817 /* Swedish.entitlements */, - D171941F27AECD170038660B /* SVCommandVariables.swift */, D17193EF27AECB350038660B /* SVInterfaceVariables.swift */, D18EA89B2760D4A6001E1358 /* SVKeyboardViewController.swift */, D18EA89D2760D4A6001E1358 /* Info.plist */, @@ -1915,7 +2008,8 @@ D1B0719627C63C9100FD7DBD /* KeyAnimation.swift */, D171942E27AEDE110038660B /* KeyboardKeys.swift */, D190B2592742565500705659 /* KeyboardViewController.swift */, - D190B24D2741B61000705659 /* LanguageDBManager.swift */, + E91980B92F2F540000B5852F /* NavigationStructure.swift */, + E9ED937C2F2A3C32008D7451 /* DynamicConjugationViewController.swift */, D16DD3A429E78A1500FB9022 /* Utilities.swift */, D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */, ); @@ -1952,7 +2046,6 @@ D1AB5B1629C7554A00CCB0C1 /* Norwegian */ = { isa = PBXGroup; children = ( - D1CDED822A85A12C00098546 /* NBCommandVariables.swift */, D1CDED802A85A12400098546 /* NBInterfaceVariables.swift */, D1AB5B1729C7554A00CCB0C1 /* NBKeyboardViewController.swift */, D1AB5B1929C7554A00CCB0C1 /* Info.plist */, @@ -1963,9 +2056,7 @@ D1AFDE6929CA65740033BF27 /* English */ = { isa = PBXGroup; children = ( - 5A8FFB6E2C5E575B00F4B571 /* ENLanguageData.sqlite */, D1FF8ED12C6C282500EF50AC /* English.entitlements */, - D1CDED782A859FB600098546 /* ENCommandVariables.swift */, D1CDED7A2A859FBF00098546 /* ENInterfaceVariables.swift */, D1AFDE6A29CA65740033BF27 /* ENKeyboardViewController.swift */, D1AFDE6C29CA65740033BF27 /* Info.plist */, @@ -1976,7 +2067,6 @@ D1AFDE7829CA658B0033BF27 /* Danish */ = { isa = PBXGroup; children = ( - D1CDED762A859E4800098546 /* DACommandVariables.swift */, D1CDED742A859DDD00098546 /* DAInterfaceVariables.swift */, D1AFDE7929CA658B0033BF27 /* DAKeyboardViewController.swift */, D1AFDE7B29CA658B0033BF27 /* Info.plist */, @@ -1987,7 +2077,6 @@ D1AFDFC929CA6BF60033BF27 /* Hebrew */ = { isa = PBXGroup; children = ( - D1CDED7E2A85A05C00098546 /* HECommandVariables.swift */, D12EB9B92C81C0E700181765 /* HEInterfaceVariables.swift */, D1AFDFCA29CA6BF60033BF27 /* HEKeyboardViewController.swift */, D1AFDFCC29CA6BF60033BF27 /* Info.plist */, @@ -1998,9 +2087,7 @@ D1B81D2027BBB5320085FE5E /* Italian */ = { isa = PBXGroup; children = ( - D15E298329E41B74006B2C81 /* ITLanguageData.sqlite */, D1D8B23B2AE4089C0070B817 /* Italian.entitlements */, - D1B81D4927BBBA200085FE5E /* ITCommandVariables.swift */, D1B81D5227BBBA360085FE5E /* ITInterfaceVariables.swift */, D1B81D2127BBB5320085FE5E /* ITKeyboardViewController.swift */, D1B81D2327BBB5320085FE5E /* Info.plist */, @@ -2023,7 +2110,6 @@ D1671A61275A1E8700A7C118 /* Russian */, D1608666270B6D3C00134D48 /* Spanish */, D18EA89A2760D4A6001E1358 /* Swedish */, - D1E3850F2C977FD100DCE538 /* TranslationData.sqlite */, ); path = LanguageKeyboards; sourceTree = ""; @@ -2036,6 +2122,9 @@ EDC364682AE408F20001E456 /* InterfaceConstants.swift */, 19DC85F92C7772FC006E32FD /* KeyboardBuilder.swift */, 198369CB2C7980BA00C1B583 /* KeyboardProvider.swift */, + E9B89DCD2F226757003E396F /* DataManager */, + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + E98E73BE2F20D8AA005EEDA3 /* Data */, ); path = Keyboards; sourceTree = ""; @@ -2045,7 +2134,6 @@ children = ( D16150FB2E9DBDC500131732 /* IDLanguageData.sqlite */, E9FAC38C2E9894F9008E00AC /* Indonesian.entitlements */, - E9FAC3882E9894F9008E00AC /* IDCommandVariables.swift */, E9FAC3892E9894F9008E00AC /* IDInterfaceVariables.swift */, E9FAC38A2E9894F9008E00AC /* IDKeyboardViewController.swift */, E9FAC38D2E9894F9008E00AC /* Info.plist */, @@ -2153,6 +2241,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = German; packageProductDependencies = ( D16DD37C29E785B100FB9022 /* SwiftyJSON */, @@ -2174,6 +2265,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = French; packageProductDependencies = ( D16DD37829E785A600FB9022 /* SwiftyJSON */, @@ -2195,6 +2289,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = Portuguese; packageProductDependencies = ( D16DD38429E785C300FB9022 /* SwiftyJSON */, @@ -2234,6 +2331,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = Spanish; packageProductDependencies = ( D16DD38829E785CE00FB9022 /* SwiftyJSON */, @@ -2255,6 +2355,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = Russian; packageProductDependencies = ( D16DD38629E785C900FB9022 /* SwiftyJSON */, @@ -2276,6 +2379,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = Swedish; packageProductDependencies = ( D16DD38A29E785D200FB9022 /* SwiftyJSON */, @@ -2297,6 +2403,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = Norwegian; packageProductDependencies = ( D16DD38229E785BE00FB9022 /* SwiftyJSON */, @@ -2318,6 +2427,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = English; packageProductDependencies = ( D16DD37629E785A100FB9022 /* SwiftyJSON */, @@ -2339,6 +2451,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = Danish; packageProductDependencies = ( D16DD37429E7859C00FB9022 /* SwiftyJSON */, @@ -2360,6 +2475,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = Hebrew; packageProductDependencies = ( D16DD37E29E785B500FB9022 /* SwiftyJSON */, @@ -2381,6 +2499,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = Italian; packageProductDependencies = ( D16DD38029E785BA00FB9022 /* SwiftyJSON */, @@ -2402,6 +2523,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E98E73BF2F20D8C3005EEDA3 /* DataContracts */, + ); name = Indonesian; packageProductDependencies = ( E9FAC3A62E989A84008E00AC /* SwiftyJSON */, @@ -2547,7 +2671,6 @@ 147797B12A2CD3370044A53E /* InfoChildTableViewCell.xib in Resources */, ED2486F42B0B4E8C0038AE6A /* AboutTableViewCell.xib in Resources */, E93179A42F03AE78002ED334 /* Localizable.xcstrings in Resources */, - D1E385102C977FD200DCE538 /* TranslationData.sqlite in Resources */, 38BD213922D5907F00C6795D /* AppScreen.storyboard in Resources */, 38BD213E22D5908100C6795D /* Assets.xcassets in Resources */, ); @@ -2559,17 +2682,8 @@ files = ( D1895BD62C1D816F009FBEB0 /* Settings.bundle in Resources */, CE2C606928FC4DB1005FDAA1 /* Assets.xcassets in Resources */, - 5A03800F2C74D71C00D4AADD /* RULanguageData.sqlite in Resources */, - D1E385142C977FD200DCE538 /* TranslationData.sqlite in Resources */, - D15E298229E41B56006B2C81 /* DELanguageData.sqlite in Resources */, D1C0ACDA2719E0AA001E11C3 /* Keyboard.xib in Resources */, - 5A037FE62C74D6D500D4AADD /* ENLanguageData.sqlite in Resources */, - 5A037FFB2C74D70200D4AADD /* ITLanguageData.sqlite in Resources */, - 5A0380232C74D73300D4AADD /* SVLanguageData.sqlite in Resources */, D16151012E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, - 5A037FF02C74D6E500D4AADD /* FRLanguageData.sqlite in Resources */, - 5A0380052C74D70D00D4AADD /* PTLanguageData.sqlite in Resources */, - 5A0380192C74D72800D4AADD /* ESLanguageData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2579,17 +2693,8 @@ files = ( D1895BD52C1D816F009FBEB0 /* Settings.bundle in Resources */, D109A22B275B6A8B005E2271 /* Keyboard.xib in Resources */, - 5A03800E2C74D71B00D4AADD /* RULanguageData.sqlite in Resources */, - D1E385132C977FD200DCE538 /* TranslationData.sqlite in Resources */, - 5A037FDC2C74D6CA00D4AADD /* DELanguageData.sqlite in Resources */, CE2C606828FC4DB0005FDAA1 /* Assets.xcassets in Resources */, - 5A037FE52C74D6D500D4AADD /* ENLanguageData.sqlite in Resources */, - 5A037FFA2C74D70100D4AADD /* ITLanguageData.sqlite in Resources */, - 5A0380222C74D73200D4AADD /* SVLanguageData.sqlite in Resources */, D16151002E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, - D15E297F29E41B3B006B2C81 /* FRLanguageData.sqlite in Resources */, - 5A0380042C74D70D00D4AADD /* PTLanguageData.sqlite in Resources */, - 5A0380182C74D72700D4AADD /* ESLanguageData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2597,19 +2702,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A037FFE2C74D70400D4AADD /* ITLanguageData.sqlite in Resources */, D1895BDA2C1D816F009FBEB0 /* Settings.bundle in Resources */, - 5A0380132C74D72000D4AADD /* RULanguageData.sqlite in Resources */, - D1E385182C977FD200DCE538 /* TranslationData.sqlite in Resources */, D109A231275B6A8C005E2271 /* Keyboard.xib in Resources */, - 5A037FE02C74D6CD00D4AADD /* DELanguageData.sqlite in Resources */, - D15E298629E41B8F006B2C81 /* PTLanguageData.sqlite in Resources */, - 5A037FF42C74D6E800D4AADD /* FRLanguageData.sqlite in Resources */, - 5A0380272C74D73600D4AADD /* SVLanguageData.sqlite in Resources */, D16151052E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, - 5A037FEA2C74D6D900D4AADD /* ENLanguageData.sqlite in Resources */, CE2C606B28FC4DB3005FDAA1 /* Assets.xcassets in Resources */, - 5A03801D2C74D72C00D4AADD /* ESLanguageData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2624,19 +2720,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A0380142C74D72100D4AADD /* RULanguageData.sqlite in Resources */, - 5A0380002C74D70600D4AADD /* ITLanguageData.sqlite in Resources */, D1895BDC2C1D816F009FBEB0 /* Settings.bundle in Resources */, - D1E3851A2C977FD200DCE538 /* TranslationData.sqlite in Resources */, CE2C606D28FC4DB4005FDAA1 /* Assets.xcassets in Resources */, - 5A037FE22C74D6CE00D4AADD /* DELanguageData.sqlite in Resources */, - 5A03800A2C74D71300D4AADD /* PTLanguageData.sqlite in Resources */, D190B2582742525C00705659 /* Keyboard.xib in Resources */, - 5A0380292C74D73700D4AADD /* SVLanguageData.sqlite in Resources */, D16151072E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, - 5A037FF62C74D6EA00D4AADD /* FRLanguageData.sqlite in Resources */, - 5A037FEC2C74D6DA00D4AADD /* ENLanguageData.sqlite in Resources */, - D15E298A29E41BAD006B2C81 /* ESLanguageData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2644,19 +2731,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A037FFF2C74D70500D4AADD /* ITLanguageData.sqlite in Resources */, D1895BDB2C1D816F009FBEB0 /* Settings.bundle in Resources */, - D15E298829E41BA1006B2C81 /* RULanguageData.sqlite in Resources */, - D1E385192C977FD200DCE538 /* TranslationData.sqlite in Resources */, - 5A037FE12C74D6CD00D4AADD /* DELanguageData.sqlite in Resources */, - 5A0380092C74D71100D4AADD /* PTLanguageData.sqlite in Resources */, D1671A74275A1FC000A7C118 /* Keyboard.xib in Resources */, - 5A037FF52C74D6E900D4AADD /* FRLanguageData.sqlite in Resources */, - 5A0380282C74D73600D4AADD /* SVLanguageData.sqlite in Resources */, D16151062E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, - 5A037FEB2C74D6DA00D4AADD /* ENLanguageData.sqlite in Resources */, CE2C606C28FC4DB3005FDAA1 /* Assets.xcassets in Resources */, - 5A03801E2C74D72D00D4AADD /* ESLanguageData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2664,18 +2742,9 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A0380152C74D72200D4AADD /* RULanguageData.sqlite in Resources */, - 5A0380012C74D70700D4AADD /* ITLanguageData.sqlite in Resources */, - 5A03801F2C74D72E00D4AADD /* ESLanguageData.sqlite in Resources */, - D1E3851B2C977FD200DCE538 /* TranslationData.sqlite in Resources */, D1895BDD2C1D816F009FBEB0 /* Settings.bundle in Resources */, - D15E298C29E41BBE006B2C81 /* SVLanguageData.sqlite in Resources */, - 5A037FE32C74D6CE00D4AADD /* DELanguageData.sqlite in Resources */, - 5A03800B2C74D71400D4AADD /* PTLanguageData.sqlite in Resources */, D18EA8A42760D6EE001E1358 /* Keyboard.xib in Resources */, D16151082E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, - 5A037FF72C74D6EA00D4AADD /* FRLanguageData.sqlite in Resources */, - 5A037FED2C74D6DB00D4AADD /* ENLanguageData.sqlite in Resources */, CE2C606E28FC4DB4005FDAA1 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2684,19 +2753,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A037FDF2C74D6CC00D4AADD /* DELanguageData.sqlite in Resources */, D1AB5B5629C757A100CCB0C1 /* Keyboard.xib in Resources */, - 5A0380122C74D71F00D4AADD /* RULanguageData.sqlite in Resources */, - D1E385172C977FD200DCE538 /* TranslationData.sqlite in Resources */, D1895BD92C1D816F009FBEB0 /* Settings.bundle in Resources */, D1AB5B5929C757A100CCB0C1 /* Assets.xcassets in Resources */, - 5A037FE92C74D6D800D4AADD /* ENLanguageData.sqlite in Resources */, - 5A037FFD2C74D70400D4AADD /* ITLanguageData.sqlite in Resources */, - 5A0380262C74D73500D4AADD /* SVLanguageData.sqlite in Resources */, D16151042E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, - 5A037FF32C74D6E800D4AADD /* FRLanguageData.sqlite in Resources */, - 5A0380082C74D70F00D4AADD /* PTLanguageData.sqlite in Resources */, - 5A03801C2C74D72B00D4AADD /* ESLanguageData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2706,17 +2766,8 @@ files = ( D1AFDF3429CA66D00033BF27 /* Keyboard.xib in Resources */, D1895BD42C1D816F009FBEB0 /* Settings.bundle in Resources */, - 5A03800D2C74D71A00D4AADD /* RULanguageData.sqlite in Resources */, - D1E385122C977FD200DCE538 /* TranslationData.sqlite in Resources */, - 5A037FDB2C74D6C900D4AADD /* DELanguageData.sqlite in Resources */, D1AFDF3729CA66D00033BF27 /* Assets.xcassets in Resources */, - 5A8FFB702C5E5A6F00F4B571 /* ENLanguageData.sqlite in Resources */, - 5A037FF92C74D70000D4AADD /* ITLanguageData.sqlite in Resources */, - 5A0380212C74D73100D4AADD /* SVLanguageData.sqlite in Resources */, D16150FF2E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, - 5A037FEF2C74D6E300D4AADD /* FRLanguageData.sqlite in Resources */, - 5A0380032C74D70C00D4AADD /* PTLanguageData.sqlite in Resources */, - 5A0380172C74D72700D4AADD /* ESLanguageData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2724,19 +2775,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A037FDA2C74D6C800D4AADD /* DELanguageData.sqlite in Resources */, D1AFDFB129CA66F40033BF27 /* Keyboard.xib in Resources */, - 5A03800C2C74D71900D4AADD /* RULanguageData.sqlite in Resources */, - D1E385112C977FD200DCE538 /* TranslationData.sqlite in Resources */, D1895BD32C1D816F009FBEB0 /* Settings.bundle in Resources */, D1AFDFB429CA66F40033BF27 /* Assets.xcassets in Resources */, - 5A037FE42C74D6D400D4AADD /* ENLanguageData.sqlite in Resources */, - 5A037FF82C74D6FF00D4AADD /* ITLanguageData.sqlite in Resources */, - 5A0380202C74D73100D4AADD /* SVLanguageData.sqlite in Resources */, D16150FE2E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, - 5A037FEE2C74D6E200D4AADD /* FRLanguageData.sqlite in Resources */, - 5A0380022C74D70B00D4AADD /* PTLanguageData.sqlite in Resources */, - 5A0380162C74D72600D4AADD /* ESLanguageData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2744,19 +2786,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A037FDD2C74D6CA00D4AADD /* DELanguageData.sqlite in Resources */, D1AFE00729CA6E900033BF27 /* Keyboard.xib in Resources */, - 5A0380102C74D71D00D4AADD /* RULanguageData.sqlite in Resources */, - D1E385152C977FD200DCE538 /* TranslationData.sqlite in Resources */, D1895BD72C1D816F009FBEB0 /* Settings.bundle in Resources */, D1AFE00A29CA6E900033BF27 /* Assets.xcassets in Resources */, - 5A037FE72C74D6D600D4AADD /* ENLanguageData.sqlite in Resources */, - 5A037FFC2C74D70300D4AADD /* ITLanguageData.sqlite in Resources */, - 5A0380242C74D73400D4AADD /* SVLanguageData.sqlite in Resources */, D16151022E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, - 5A037FF12C74D6E500D4AADD /* FRLanguageData.sqlite in Resources */, - 5A0380062C74D70E00D4AADD /* PTLanguageData.sqlite in Resources */, - 5A03801A2C74D72900D4AADD /* ESLanguageData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2766,17 +2799,8 @@ files = ( D1895BD82C1D816F009FBEB0 /* Settings.bundle in Resources */, D1B81D4127BBB70E0085FE5E /* Keyboard.xib in Resources */, - 5A0380112C74D71F00D4AADD /* RULanguageData.sqlite in Resources */, - D1E385162C977FD200DCE538 /* TranslationData.sqlite in Resources */, - 5A037FDE2C74D6CB00D4AADD /* DELanguageData.sqlite in Resources */, - D15E298429E41B74006B2C81 /* ITLanguageData.sqlite in Resources */, - 5A037FF22C74D6E600D4AADD /* FRLanguageData.sqlite in Resources */, - 5A037FE82C74D6D800D4AADD /* ENLanguageData.sqlite in Resources */, - 5A0380252C74D73400D4AADD /* SVLanguageData.sqlite in Resources */, D16151032E9DBDED00131732 /* IDLanguageData.sqlite in Resources */, CE2C606A28FC4DB2005FDAA1 /* Assets.xcassets in Resources */, - 5A0380072C74D70F00D4AADD /* PTLanguageData.sqlite in Resources */, - 5A03801B2C74D72B00D4AADD /* ESLanguageData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2784,18 +2808,9 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D16151092E9DBE0400131732 /* DELanguageData.sqlite in Resources */, - D161510A2E9DBE1400131732 /* FRLanguageData.sqlite in Resources */, - D161510E2E9DBE3D00131732 /* RULanguageData.sqlite in Resources */, D16150FC2E9DBDC500131732 /* IDLanguageData.sqlite in Resources */, E99649962E98B03C00200F53 /* Keyboard.xib in Resources */, - D161510B2E9DBE1D00131732 /* ENLanguageData.sqlite in Resources */, - D161510C2E9DBE2B00131732 /* ITLanguageData.sqlite in Resources */, - D16151102E9DBE4C00131732 /* SVLanguageData.sqlite in Resources */, E99649972E98B11100200F53 /* Assets.xcassets in Resources */, - D161510D2E9DBE3600131732 /* PTLanguageData.sqlite in Resources */, - D161510F2E9DBE4500131732 /* ESLanguageData.sqlite in Resources */, - E937C5CF2E9FF94E00F94F99 /* TranslationData.sqlite in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2811,7 +2826,7 @@ F786BB2D2F1E8F70003F7505 /* InfoChildTableViewCell.xib in Resources */, F786BB2E2F1E8F70003F7505 /* AboutTableViewCell.xib in Resources */, F786BB2F2F1E8F70003F7505 /* Localizable.xcstrings in Resources */, - F786BB302F1E8F70003F7505 /* TranslationData.sqlite in Resources */, + F786BB302F1E8F70003F7505 /* (null) in Resources */, F786BB312F1E8F70003F7505 /* AppScreen.storyboard in Resources */, F786BB322F1E8F70003F7505 /* Assets.xcassets in Resources */, ); @@ -2865,9 +2880,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D171941027AECCF50038660B /* RUCommandVariables.swift in Sources */, 140158992A430DD000D14E52 /* ThirdPartyLicense.swift in Sources */, - D171944A27AEFC620038660B /* LanguageDBManager.swift in Sources */, D17193C027AEA33A0038660B /* AppTextStyling.swift in Sources */, CE1378C428F5D7AC00E1CBC2 /* ScribeColor.swift in Sources */, D171946527AF31770038660B /* Conjugate.swift in Sources */, @@ -2875,15 +2888,10 @@ 1406B7872A2DFCDD001DF45B /* AboutTableData.swift in Sources */, E9202DF02F0FAA0C001590FC /* DownloadStateManager.swift in Sources */, E996498A2E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, - D171940827AECCE50038660B /* PTCommandVariables.swift in Sources */, 3045396D293B9DDC003AE55B /* ToolTipViewDatasource.swift in Sources */, D111E9B227AFE79500746F92 /* Translate.swift in Sources */, - D171941827AECD070038660B /* ESCommandVariables.swift in Sources */, - D171940027AECCD10038660B /* DECommandVariables.swift in Sources */, - D17193F827AECC930038660B /* FRCommandVariables.swift in Sources */, D171945827AF237C0038660B /* ScribeKey.swift in Sources */, 1406B78C2A3209CF001DF45B /* AppExtensions.swift in Sources */, - D1B81D4A27BBBA200085FE5E /* ITCommandVariables.swift in Sources */, D180EC0328FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift in Sources */, D1CDED7B2A859FBF00098546 /* ENInterfaceVariables.swift in Sources */, 38BD213622D5907F00C6795D /* InstallationVC.swift in Sources */, @@ -2895,16 +2903,13 @@ D171945427AF04E50038660B /* KeyboardViewController.swift in Sources */, E96111482F04EC6B001E4F95 /* InstallationDownload.swift in Sources */, EDEE62252B2DE65A00A0B9C1 /* UIEdgeInsetsExtensions.swift in Sources */, - D1CDED772A859E4800098546 /* DACommandVariables.swift in Sources */, D171943827AEF0560038660B /* KeyboardStyling.swift in Sources */, D111E9BA27AFE7B200746F92 /* Annotate.swift in Sources */, 19DC85FA2C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, 198369CC2C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, CE1378CC28F5D7AC00E1CBC2 /* UIColor+ScribeColors.swift in Sources */, D17193F027AECB350038660B /* SVInterfaceVariables.swift in Sources */, - D1CDED792A859FB600098546 /* ENCommandVariables.swift in Sources */, 140158A22A4EDB2200D14E52 /* TableViewTemplateViewController.swift in Sources */, - D1CDED7F2A85A05C00098546 /* HECommandVariables.swift in Sources */, 38BD213422D5907F00C6795D /* AppDelegate.swift in Sources */, 30489C1E2936DAB700B59393 /* ToolTipView.swift in Sources */, 3045396F293B9DF2003AE55B /* ToolTipViewTheme.swift in Sources */, @@ -2914,32 +2919,33 @@ D16DD3A529E78A1500FB9022 /* Utilities.swift in Sources */, EDB460212B03B3E400BEA967 /* BaseTableViewController.swift in Sources */, D1CDED752A859DDD00098546 /* DAInterfaceVariables.swift in Sources */, - D17193E827AECAE60038660B /* ESInterfaceVariables.swift in Sources */, 84AF4D882C3575EA009AE0D2 /* UIDeviceExtensions.swift in Sources */, 69B81EBC2BFB8C77008CAB85 /* TipCardView.swift in Sources */, 30453964293B9D18003AE55B /* InformationToolTipData.swift in Sources */, 30453969293B9DB4003AE55B /* ToolTipViewUpdatable.swift in Sources */, + E91980C42F2F540A00B5852F /* NavigationStructure.swift in Sources */, D17193E027AECAA60038660B /* RUInterfaceVariables.swift in Sources */, D1B81D5327BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */, D17193D827AECA450038660B /* PTInterfaceVariables.swift in Sources */, D12EB9C32C81C10900181765 /* HEInterfaceVariables.swift in Sources */, D17193C427AEAD7D0038660B /* AppStyling.swift in Sources */, D111E9AA27AFE78600746F92 /* Plural.swift in Sources */, + E97E65142F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, D1F0367227AAE12200CD7921 /* InterfaceVariables.swift in Sources */, + E9ED937F2F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, D111E9A227AFE4F300746F92 /* CommandBar.swift in Sources */, - D171942027AECD170038660B /* SVCommandVariables.swift in Sources */, 30453967293B9D31003AE55B /* ViewThemeable.swift in Sources */, D1362A39274C106A00C00E48 /* ColorVariables.swift in Sources */, 5A68DA432CDE7B7A00897FAD /* SelectionViewTemplateViewController.swift in Sources */, ED2486F32B0B4E8C0038AE6A /* AboutTableViewCell.swift in Sources */, D1A2DCB127AD37BD0057A10D /* InstallScreen.swift in Sources */, - D1CDED832A85A12C00098546 /* NBCommandVariables.swift in Sources */, D171944927AEF7290038660B /* KeyboardKeys.swift in Sources */, 147797B32A2CD5AB0044A53E /* ParentTableCellModel.swift in Sources */, E9FEE6CB2EF14351003A9266 /* WrapperCell.swift in Sources */, 1401589B2A45A07200D14E52 /* WikimediaAndScribe.swift in Sources */, 3045396B293B9DC9003AE55B /* ToolTipViewDatasourceable.swift in Sources */, D1B071A027C6A1AA00FD7DBD /* KeyAltChars.swift in Sources */, + E97E651C2F2CDEC50070810A /* ESCommandVariables.swift in Sources */, D1CDED812A85A12400098546 /* NBInterfaceVariables.swift in Sources */, D17693DE28FC8D6B00DF0FBB /* FR-QWERTYInterfaceVariables.swift in Sources */, D1B0719727C63C9100FD7DBD /* KeyAnimation.swift in Sources */, @@ -2965,49 +2971,40 @@ D1B81D5527BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */, D171943127AEDE110038660B /* KeyboardKeys.swift in Sources */, 30489C212936DAFF00B59393 /* ToolTipView.swift in Sources */, - D1CDED872A85AE5A00098546 /* DACommandVariables.swift in Sources */, D1CDED912A85AE6200098546 /* DAInterfaceVariables.swift in Sources */, - D171941A27AECD070038660B /* ESCommandVariables.swift in Sources */, D1B071A227C6A1AA00FD7DBD /* KeyAltChars.swift in Sources */, - D1CDED9C2A85AE6B00098546 /* ENCommandVariables.swift in Sources */, D190B26827426ACD00705659 /* KeyboardViewController.swift in Sources */, D180EC0628FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift in Sources */, - D171940227AECCD10038660B /* DECommandVariables.swift in Sources */, + E97E65212F2CDEC50070810A /* ESCommandVariables.swift in Sources */, 3045397A293B9E0B003AE55B /* ToolTipViewDatasource.swift in Sources */, D171945A27AF237C0038660B /* ScribeKey.swift in Sources */, D17193F227AECB350038660B /* SVInterfaceVariables.swift in Sources */, - D1B81D4C27BBBA200085FE5E /* ITCommandVariables.swift in Sources */, - D17193FA27AECC930038660B /* FRCommandVariables.swift in Sources */, D171946727AF31770038660B /* Conjugate.swift in Sources */, D111E9AC27AFE78600746F92 /* Plural.swift in Sources */, D190B242274056D400705659 /* ColorVariables.swift in Sources */, 198369D02C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, - D17193EA27AECAE60038660B /* ESInterfaceVariables.swift in Sources */, + E9ED93862F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, 30453984293B9E12003AE55B /* InformationToolTipData.swift in Sources */, D111E9B427AFE79500746F92 /* Translate.swift in Sources */, D17193E227AECAA60038660B /* RUInterfaceVariables.swift in Sources */, 19DC85FE2C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, D190B2472741B24F00705659 /* CommandVariables.swift in Sources */, D16DD3AA29E78A1500FB9022 /* Utilities.swift in Sources */, + E91980BB2F2F540A00B5852F /* NavigationStructure.swift in Sources */, E996498E2E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, - D171941227AECCF50038660B /* RUCommandVariables.swift in Sources */, D111E9BC27AFE7B200746F92 /* Annotate.swift in Sources */, + E97E650C2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, 38DD94F122D6A40000FF8845 /* Extensions.swift in Sources */, 3045399A293B9E22003AE55B /* ToolTipViewDatasourceable.swift in Sources */, 30453992293B9E1C003AE55B /* ToolTipViewUpdatable.swift in Sources */, D190B24A2741B31F00705659 /* InterfaceVariables.swift in Sources */, - D190B24E2741B61000705659 /* LanguageDBManager.swift in Sources */, CE1378CE28F5D7AC00E1CBC2 /* UIColor+ScribeColors.swift in Sources */, D111E9A427AFE4F300746F92 /* CommandBar.swift in Sources */, D17693E028FC8D6C00DF0FBB /* FR-QWERTYInterfaceVariables.swift in Sources */, D17193DA27AECA450038660B /* PTInterfaceVariables.swift in Sources */, D1CDEDA92A85AE7500098546 /* ENInterfaceVariables.swift in Sources */, 3045398A293B9E18003AE55B /* ViewThemeable.swift in Sources */, - D1CDEDCB2A85AE9200098546 /* NBCommandVariables.swift in Sources */, - D171942227AECD170038660B /* SVCommandVariables.swift in Sources */, D1B0719927C63CE600FD7DBD /* KeyAnimation.swift in Sources */, - D1CDEDB42A85AE8100098546 /* HECommandVariables.swift in Sources */, - D171940A27AECCE50038660B /* PTCommandVariables.swift in Sources */, EDC364722AE408FF0001E456 /* InterfaceConstants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -3019,7 +3016,6 @@ D171942727AECEA60038660B /* DEInterfaceVariables.swift in Sources */, 30453951293B9106003AE55B /* InstallScreen.swift in Sources */, D1CDEDD42A85AE9800098546 /* NBInterfaceVariables.swift in Sources */, - D171942127AECD170038660B /* SVCommandVariables.swift in Sources */, D171943927AEF0560038660B /* KeyboardStyling.swift in Sources */, CE1378C528F5D7AC00E1CBC2 /* ScribeColor.swift in Sources */, D12EB9C42C81C10900181765 /* HEInterfaceVariables.swift in Sources */, @@ -3028,35 +3024,30 @@ D1B81D5427BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */, D171943027AEDE110038660B /* KeyboardKeys.swift in Sources */, 30489C1F2936DAFE00B59393 /* ToolTipView.swift in Sources */, - D1CDED862A85AE5A00098546 /* DACommandVariables.swift in Sources */, D1CDED922A85AE6300098546 /* DAInterfaceVariables.swift in Sources */, - D17193F927AECC930038660B /* FRCommandVariables.swift in Sources */, D1B071A127C6A1AA00FD7DBD /* KeyAltChars.swift in Sources */, - D1CDED9D2A85AE6C00098546 /* ENCommandVariables.swift in Sources */, - D17193E927AECAE60038660B /* ESInterfaceVariables.swift in Sources */, D180EC0428FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift in Sources */, - D171941127AECCF50038660B /* RUCommandVariables.swift in Sources */, + E97E65252F2CDEC50070810A /* ESCommandVariables.swift in Sources */, 30453978293B9E0A003AE55B /* ToolTipViewDatasource.swift in Sources */, D171945927AF237C0038660B /* ScribeKey.swift in Sources */, D109A20E275B6888005E2271 /* FRKeyboardViewController.swift in Sources */, - D1B81D4B27BBBA200085FE5E /* ITCommandVariables.swift in Sources */, D171946627AF31770038660B /* Conjugate.swift in Sources */, D111E9AB27AFE78600746F92 /* Plural.swift in Sources */, - D109A237275B6A99005E2271 /* LanguageDBManager.swift in Sources */, D109A228275B6A8B005E2271 /* Extensions.swift in Sources */, 198369CF2C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, 30453982293B9E11003AE55B /* InformationToolTipData.swift in Sources */, + E9ED93812F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, D111E9B327AFE79500746F92 /* Translate.swift in Sources */, - D171940127AECCD10038660B /* DECommandVariables.swift in Sources */, - D171940927AECCE50038660B /* PTCommandVariables.swift in Sources */, 19DC85FD2C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, D16DD3A829E78A1500FB9022 /* Utilities.swift in Sources */, D17193D927AECA450038660B /* PTInterfaceVariables.swift in Sources */, E996498D2E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, D111E9BB27AFE7B200746F92 /* Annotate.swift in Sources */, + E91980C72F2F540A00B5852F /* NavigationStructure.swift in Sources */, D109A227275B6A8B005E2271 /* KeyboardViewController.swift in Sources */, 30453998293B9E20003AE55B /* ToolTipViewDatasourceable.swift in Sources */, 30453990293B9E1C003AE55B /* ToolTipViewUpdatable.swift in Sources */, + E97E650E2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, D17193E127AECAA60038660B /* RUInterfaceVariables.swift in Sources */, D17193F127AECB350038660B /* SVInterfaceVariables.swift in Sources */, CE1378CD28F5D7AC00E1CBC2 /* UIColor+ScribeColors.swift in Sources */, @@ -3066,11 +3057,8 @@ D109A22A275B6A8B005E2271 /* InterfaceVariables.swift in Sources */, D1CDEDA72A85AE7400098546 /* ENInterfaceVariables.swift in Sources */, 30453988293B9E17003AE55B /* ViewThemeable.swift in Sources */, - D1CDEDC92A85AE9100098546 /* NBCommandVariables.swift in Sources */, D109A229275B6A8B005E2271 /* ColorVariables.swift in Sources */, D1B0719827C63CE600FD7DBD /* KeyAnimation.swift in Sources */, - D1CDEDB32A85AE8100098546 /* HECommandVariables.swift in Sources */, - D171941927AECD070038660B /* ESCommandVariables.swift in Sources */, EDC364732AE409000001E456 /* InterfaceConstants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -3082,7 +3070,6 @@ D171942827AECEA70038660B /* DEInterfaceVariables.swift in Sources */, 30453956293B9108003AE55B /* InstallScreen.swift in Sources */, D1CDEDD92A85AE9B00098546 /* NBInterfaceVariables.swift in Sources */, - D171942327AECD170038660B /* SVCommandVariables.swift in Sources */, D171943B27AEF0560038660B /* KeyboardStyling.swift in Sources */, CE1378C828F5D7AC00E1CBC2 /* ScribeColor.swift in Sources */, D12EB9BA2C81C10900181765 /* HEInterfaceVariables.swift in Sources */, @@ -3091,35 +3078,30 @@ D1B81D5727BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */, D171943227AEDE110038660B /* KeyboardKeys.swift in Sources */, 30489C232936DB0100B59393 /* ToolTipView.swift in Sources */, - D1CDED8B2A85AE5C00098546 /* DACommandVariables.swift in Sources */, D1CDED962A85AE6400098546 /* DAInterfaceVariables.swift in Sources */, - D17193FB27AECC930038660B /* FRCommandVariables.swift in Sources */, D1B071A427C6A1AA00FD7DBD /* KeyAltChars.swift in Sources */, - D1CDEDA22A85AE6F00098546 /* ENCommandVariables.swift in Sources */, - D17193EB27AECAE60038660B /* ESInterfaceVariables.swift in Sources */, D180EC0828FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift in Sources */, - D171941327AECCF50038660B /* RUCommandVariables.swift in Sources */, + E97E65232F2CDEC50070810A /* ESCommandVariables.swift in Sources */, 3045397C293B9E0C003AE55B /* ToolTipViewDatasource.swift in Sources */, D171945B27AF237C0038660B /* ScribeKey.swift in Sources */, D109A21D275B68B3005E2271 /* PTKeyboardViewController.swift in Sources */, - D1B81D4E27BBBA200085FE5E /* ITCommandVariables.swift in Sources */, - D109A238275B6A9A005E2271 /* LanguageDBManager.swift in Sources */, D171946827AF31770038660B /* Conjugate.swift in Sources */, D111E9AD27AFE78600746F92 /* Plural.swift in Sources */, D109A22E275B6A8C005E2271 /* Extensions.swift in Sources */, 198369D42C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, D109A22D275B6A8C005E2271 /* KeyboardViewController.swift in Sources */, + E9ED93882F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, 30453986293B9E13003AE55B /* InformationToolTipData.swift in Sources */, D111E9B527AFE79500746F92 /* Translate.swift in Sources */, - D171940327AECCD10038660B /* DECommandVariables.swift in Sources */, 19DC86022C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, - D171940B27AECCE50038660B /* PTCommandVariables.swift in Sources */, D16DD3AE29E78A1500FB9022 /* Utilities.swift in Sources */, E99649922E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, D17193DB27AECA450038660B /* PTInterfaceVariables.swift in Sources */, + E91980BD2F2F540A00B5852F /* NavigationStructure.swift in Sources */, D111E9BD27AFE7B200746F92 /* Annotate.swift in Sources */, D109A232275B6A8C005E2271 /* CommandVariables.swift in Sources */, 3045399C293B9E22003AE55B /* ToolTipViewDatasourceable.swift in Sources */, + E97E650F2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, 30453994293B9E1D003AE55B /* ToolTipViewUpdatable.swift in Sources */, D17193E327AECAA60038660B /* RUInterfaceVariables.swift in Sources */, D17193F327AECB350038660B /* SVInterfaceVariables.swift in Sources */, @@ -3129,11 +3111,8 @@ D17693E228FC8D6D00DF0FBB /* FR-QWERTYInterfaceVariables.swift in Sources */, D1CDEDAC2A85AE7700098546 /* ENInterfaceVariables.swift in Sources */, D109A22F275B6A8C005E2271 /* ColorVariables.swift in Sources */, - D1CDEDCE2A85AE9400098546 /* NBCommandVariables.swift in Sources */, 3045398C293B9E18003AE55B /* ViewThemeable.swift in Sources */, D1B0719C27C63CE800FD7DBD /* KeyAnimation.swift in Sources */, - D1CDEDB82A85AE8300098546 /* HECommandVariables.swift in Sources */, - D171941B27AECD070038660B /* ESCommandVariables.swift in Sources */, EDC3646E2AE408FE0001E456 /* InterfaceConstants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -3155,7 +3134,6 @@ D171942B27AECEA80038660B /* DEInterfaceVariables.swift in Sources */, 30453957293B9109003AE55B /* InstallScreen.swift in Sources */, D1CDEDDB2A85AE9D00098546 /* NBInterfaceVariables.swift in Sources */, - D171942527AECD170038660B /* SVCommandVariables.swift in Sources */, D171943D27AEF0560038660B /* KeyboardStyling.swift in Sources */, CE1378CA28F5D7AC00E1CBC2 /* ScribeColor.swift in Sources */, D12EB9C52C81C10900181765 /* HEInterfaceVariables.swift in Sources */, @@ -3164,34 +3142,30 @@ D1B81D5927BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */, D171943427AEDE110038660B /* KeyboardKeys.swift in Sources */, 30489C252936DB0100B59393 /* ToolTipView.swift in Sources */, - D1CDED8D2A85AE5E00098546 /* DACommandVariables.swift in Sources */, D1CDED992A85AE6600098546 /* DAInterfaceVariables.swift in Sources */, - D17193FD27AECC930038660B /* FRCommandVariables.swift in Sources */, D1B071A627C6A1AA00FD7DBD /* KeyAltChars.swift in Sources */, - D1CDEDA42A85AE7000098546 /* ENCommandVariables.swift in Sources */, - D17193ED27AECAE60038660B /* ESInterfaceVariables.swift in Sources */, D180EC0A28FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift in Sources */, - D171941527AECCF50038660B /* RUCommandVariables.swift in Sources */, + E97E651D2F2CDEC50070810A /* ESCommandVariables.swift in Sources */, 3045397D293B9E0D003AE55B /* ToolTipViewDatasource.swift in Sources */, D171945D27AF237C0038660B /* ScribeKey.swift in Sources */, D1608668270B6D3C00134D48 /* ESKeyboardViewController.swift in Sources */, - D1B81D5027BBBA200085FE5E /* ITCommandVariables.swift in Sources */, D190B26927426ACD00705659 /* KeyboardViewController.swift in Sources */, D171946A27AF31770038660B /* Conjugate.swift in Sources */, D111E9AF27AFE78600746F92 /* Plural.swift in Sources */, D190B243274056D400705659 /* ColorVariables.swift in Sources */, 198369D62C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, + E9ED93822F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, D190B2482741B24F00705659 /* CommandVariables.swift in Sources */, 30453981293B9E11003AE55B /* InformationToolTipData.swift in Sources */, D111E9B727AFE79500746F92 /* Translate.swift in Sources */, - D171940527AECCD10038660B /* DECommandVariables.swift in Sources */, 19DC86042C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, - D171940D27AECCE50038660B /* PTCommandVariables.swift in Sources */, D16DD3B029E78A1500FB9022 /* Utilities.swift in Sources */, E99649942E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, + E91980C52F2F540A00B5852F /* NavigationStructure.swift in Sources */, D17193DD27AECA450038660B /* PTInterfaceVariables.swift in Sources */, D111E9BF27AFE7B200746F92 /* Annotate.swift in Sources */, D190B2442740576600705659 /* Extensions.swift in Sources */, + E97E65112F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, 3045399E293B9E23003AE55B /* ToolTipViewDatasourceable.swift in Sources */, 30453996293B9E1E003AE55B /* ToolTipViewUpdatable.swift in Sources */, D17193E527AECAA60038660B /* RUInterfaceVariables.swift in Sources */, @@ -3201,12 +3175,8 @@ D111E9A727AFE4F300746F92 /* CommandBar.swift in Sources */, D17693E428FC8D6E00DF0FBB /* FR-QWERTYInterfaceVariables.swift in Sources */, D1CDEDAF2A85AE7800098546 /* ENInterfaceVariables.swift in Sources */, - D190B24F2741B61000705659 /* LanguageDBManager.swift in Sources */, - D1CDEDD02A85AE9400098546 /* NBCommandVariables.swift in Sources */, 3045398E293B9E19003AE55B /* ViewThemeable.swift in Sources */, D1B0719D27C63CE800FD7DBD /* KeyAnimation.swift in Sources */, - D1CDEDB92A85AE8300098546 /* HECommandVariables.swift in Sources */, - D171941D27AECD070038660B /* ESCommandVariables.swift in Sources */, EDC3646B2AE408FC0001E456 /* InterfaceConstants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -3218,7 +3188,6 @@ D171942A27AECEA80038660B /* DEInterfaceVariables.swift in Sources */, 30453955293B9108003AE55B /* InstallScreen.swift in Sources */, D1CDEDDA2A85AE9C00098546 /* NBInterfaceVariables.swift in Sources */, - D171942427AECD170038660B /* SVCommandVariables.swift in Sources */, D171943C27AEF0560038660B /* KeyboardStyling.swift in Sources */, CE1378C928F5D7AC00E1CBC2 /* ScribeColor.swift in Sources */, D12EB9C02C81C10900181765 /* HEInterfaceVariables.swift in Sources */, @@ -3227,35 +3196,30 @@ D1B81D5827BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */, D171943327AEDE110038660B /* KeyboardKeys.swift in Sources */, 30489C242936DB0100B59393 /* ToolTipView.swift in Sources */, - D1CDED8C2A85AE5D00098546 /* DACommandVariables.swift in Sources */, D1CDED972A85AE6500098546 /* DAInterfaceVariables.swift in Sources */, - D17193FC27AECC930038660B /* FRCommandVariables.swift in Sources */, D1B071A527C6A1AA00FD7DBD /* KeyAltChars.swift in Sources */, - D1CDEDA32A85AE7000098546 /* ENCommandVariables.swift in Sources */, - D17193EC27AECAE60038660B /* ESInterfaceVariables.swift in Sources */, D180EC0928FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift in Sources */, - D171941427AECCF50038660B /* RUCommandVariables.swift in Sources */, + E97E651E2F2CDEC50070810A /* ESCommandVariables.swift in Sources */, 3045397E293B9E0D003AE55B /* ToolTipViewDatasource.swift in Sources */, D171945C27AF237C0038660B /* ScribeKey.swift in Sources */, D1671A71275A1FA200A7C118 /* RUKeyboardViewController.swift in Sources */, - D1B81D4F27BBBA200085FE5E /* ITCommandVariables.swift in Sources */, - D1671A7A275A1FC900A7C118 /* LanguageDBManager.swift in Sources */, D171946927AF31770038660B /* Conjugate.swift in Sources */, D111E9AE27AFE78600746F92 /* Plural.swift in Sources */, D1671A72275A1FC000A7C118 /* Extensions.swift in Sources */, 198369D52C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, D1671A73275A1FC000A7C118 /* InterfaceVariables.swift in Sources */, + E9ED93852F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, 30453987293B9E13003AE55B /* InformationToolTipData.swift in Sources */, D111E9B627AFE79500746F92 /* Translate.swift in Sources */, - D171940427AECCD10038660B /* DECommandVariables.swift in Sources */, 19DC86032C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, - D171940C27AECCE50038660B /* PTCommandVariables.swift in Sources */, D16DD3AF29E78A1500FB9022 /* Utilities.swift in Sources */, E99649932E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, D17193DC27AECA450038660B /* PTInterfaceVariables.swift in Sources */, + E91980BA2F2F540A00B5852F /* NavigationStructure.swift in Sources */, D111E9BE27AFE7B200746F92 /* Annotate.swift in Sources */, D1671A77275A1FC000A7C118 /* CommandVariables.swift in Sources */, 3045399D293B9E23003AE55B /* ToolTipViewDatasourceable.swift in Sources */, + E97E65132F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, 30453995293B9E1D003AE55B /* ToolTipViewUpdatable.swift in Sources */, D17193E427AECAA60038660B /* RUInterfaceVariables.swift in Sources */, D17193F427AECB350038660B /* SVInterfaceVariables.swift in Sources */, @@ -3265,11 +3229,8 @@ D17693E328FC8D6D00DF0FBB /* FR-QWERTYInterfaceVariables.swift in Sources */, D1CDEDAE2A85AE7800098546 /* ENInterfaceVariables.swift in Sources */, D1671A76275A1FC000A7C118 /* ColorVariables.swift in Sources */, - D1CDEDCF2A85AE9400098546 /* NBCommandVariables.swift in Sources */, 3045398D293B9E19003AE55B /* ViewThemeable.swift in Sources */, D1B0719B27C63CE700FD7DBD /* KeyAnimation.swift in Sources */, - D1CDEDBB2A85AE8500098546 /* HECommandVariables.swift in Sources */, - D171941C27AECD070038660B /* ESCommandVariables.swift in Sources */, EDC3646D2AE408FD0001E456 /* InterfaceConstants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -3281,7 +3242,6 @@ D171942C27AECEA90038660B /* DEInterfaceVariables.swift in Sources */, 30453958293B9109003AE55B /* InstallScreen.swift in Sources */, D1CDEDDC2A85AE9D00098546 /* NBInterfaceVariables.swift in Sources */, - D171942627AECD170038660B /* SVCommandVariables.swift in Sources */, D171943E27AEF0560038660B /* KeyboardStyling.swift in Sources */, CE1378CB28F5D7AC00E1CBC2 /* ScribeColor.swift in Sources */, D12EB9C22C81C10900181765 /* HEInterfaceVariables.swift in Sources */, @@ -3290,35 +3250,30 @@ D1B81D5A27BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */, D171943527AEDE110038660B /* KeyboardKeys.swift in Sources */, 30489C262936DB0200B59393 /* ToolTipView.swift in Sources */, - D1CDED8E2A85AE5E00098546 /* DACommandVariables.swift in Sources */, D1CDED982A85AE6500098546 /* DAInterfaceVariables.swift in Sources */, - D17193FE27AECC930038660B /* FRCommandVariables.swift in Sources */, D1B071A727C6A1AA00FD7DBD /* KeyAltChars.swift in Sources */, - D1CDEDA52A85AE7000098546 /* ENCommandVariables.swift in Sources */, - D17193EE27AECAE60038660B /* ESInterfaceVariables.swift in Sources */, D180EC0B28FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift in Sources */, - D171941627AECCF50038660B /* RUCommandVariables.swift in Sources */, + E97E651A2F2CDEC50070810A /* ESCommandVariables.swift in Sources */, 3045397F293B9E0E003AE55B /* ToolTipViewDatasource.swift in Sources */, D171945E27AF237C0038660B /* ScribeKey.swift in Sources */, D18EA8A62760D6F5001E1358 /* CommandVariables.swift in Sources */, - D1B81D5127BBBA200085FE5E /* ITCommandVariables.swift in Sources */, - D18EA8AC2760D701001E1358 /* LanguageDBManager.swift in Sources */, D171946B27AF31770038660B /* Conjugate.swift in Sources */, D111E9B027AFE78600746F92 /* Plural.swift in Sources */, D18EA8A92760D6F5001E1358 /* Extensions.swift in Sources */, 198369D72C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, D18EA89C2760D4A6001E1358 /* SVKeyboardViewController.swift in Sources */, + E9ED93802F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, 30453980293B9E10003AE55B /* InformationToolTipData.swift in Sources */, D111E9B827AFE79500746F92 /* Translate.swift in Sources */, - D171940627AECCD10038660B /* DECommandVariables.swift in Sources */, 19DC86052C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, - D171940E27AECCE50038660B /* PTCommandVariables.swift in Sources */, D16DD3B129E78A1500FB9022 /* Utilities.swift in Sources */, E99649952E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, D17193DE27AECA450038660B /* PTInterfaceVariables.swift in Sources */, + E91980BC2F2F540A00B5852F /* NavigationStructure.swift in Sources */, D111E9C027AFE7B200746F92 /* Annotate.swift in Sources */, D18EA8A52760D6F5001E1358 /* ColorVariables.swift in Sources */, 3045399F293B9E24003AE55B /* ToolTipViewDatasourceable.swift in Sources */, + E97E650D2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, 30453997293B9E1E003AE55B /* ToolTipViewUpdatable.swift in Sources */, D17193E627AECAA60038660B /* RUInterfaceVariables.swift in Sources */, D17193F627AECB350038660B /* SVInterfaceVariables.swift in Sources */, @@ -3328,11 +3283,8 @@ D17693E528FC8D6E00DF0FBB /* FR-QWERTYInterfaceVariables.swift in Sources */, D1CDEDB02A85AE7900098546 /* ENInterfaceVariables.swift in Sources */, D18EA8A72760D6F5001E1358 /* KeyboardViewController.swift in Sources */, - D1CDEDD12A85AE9500098546 /* NBCommandVariables.swift in Sources */, 3045398F293B9E1A003AE55B /* ViewThemeable.swift in Sources */, D1B0719E27C63CE900FD7DBD /* KeyAnimation.swift in Sources */, - D1CDEDBA2A85AE8400098546 /* HECommandVariables.swift in Sources */, - D171941E27AECD070038660B /* ESCommandVariables.swift in Sources */, EDC3646C2AE408FC0001E456 /* InterfaceConstants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -3341,10 +3293,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D1AB5B2629C757A100CCB0C1 /* SVCommandVariables.swift in Sources */, D1AB5B2729C757A100CCB0C1 /* InstallScreen.swift in Sources */, D1CDEDD82A85AE9A00098546 /* NBInterfaceVariables.swift in Sources */, - D1AB5B2829C757A100CCB0C1 /* ESInterfaceVariables.swift in Sources */, D1AB5B2929C757A100CCB0C1 /* SVInterfaceVariables.swift in Sources */, D1AB5B2A29C757A100CCB0C1 /* ScribeColor.swift in Sources */, D12EB9BC2C81C10900181765 /* HEInterfaceVariables.swift in Sources */, @@ -3353,48 +3303,41 @@ D1AB5B2D29C757A100CCB0C1 /* ITInterfaceVariables.swift in Sources */, D1AB5B2E29C757A100CCB0C1 /* PTInterfaceVariables.swift in Sources */, D1AB5B2F29C757A100CCB0C1 /* ToolTipView.swift in Sources */, - D1CDED8A2A85AE5C00098546 /* DACommandVariables.swift in Sources */, D1CDED952A85AE6400098546 /* DAInterfaceVariables.swift in Sources */, - D1AB5B3029C757A100CCB0C1 /* DECommandVariables.swift in Sources */, D1AB5B3129C757A100CCB0C1 /* KeyAltChars.swift in Sources */, - D1CDEDA02A85AE6D00098546 /* ENCommandVariables.swift in Sources */, - D1AB5B3229C757A100CCB0C1 /* RUCommandVariables.swift in Sources */, D1AB5B3329C757A100CCB0C1 /* FR-AZERTYInterfaceVariables.swift in Sources */, D1AB5B3429C757A100CCB0C1 /* KeyboardStyling.swift in Sources */, + E97E65262F2CDEC50070810A /* ESCommandVariables.swift in Sources */, D1AB5B3529C757A100CCB0C1 /* ToolTipViewDatasource.swift in Sources */, D1AB5B3629C757A100CCB0C1 /* CommandBar.swift in Sources */, - D1AB5B3729C757A100CCB0C1 /* ESCommandVariables.swift in Sources */, - D1AB5B3829C757A100CCB0C1 /* ITCommandVariables.swift in Sources */, D1AB5B3929C757A100CCB0C1 /* KeyboardKeys.swift in Sources */, D1AB5B3A29C757A100CCB0C1 /* Conjugate.swift in Sources */, - D1AB5B3B29C757A100CCB0C1 /* PTCommandVariables.swift in Sources */, D1AB5B3C29C757A100CCB0C1 /* DEInterfaceVariables.swift in Sources */, 198369D32C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, + E9ED93892F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, D1AB5B3D29C757A100CCB0C1 /* Annotate.swift in Sources */, D1AB5B3E29C757A100CCB0C1 /* InformationToolTipData.swift in Sources */, D16D975429C75A4900E33F86 /* NBKeyboardViewController.swift in Sources */, - D1AB5B3F29C757A100CCB0C1 /* LanguageDBManager.swift in Sources */, 19DC86012C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, D1AB5B4029C757A100CCB0C1 /* CommandVariables.swift in Sources */, D16DD3AD29E78A1500FB9022 /* Utilities.swift in Sources */, E99649912E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, D1AB5B4129C757A100CCB0C1 /* Translate.swift in Sources */, + E91980C22F2F540A00B5852F /* NavigationStructure.swift in Sources */, D1AB5B4229C757A100CCB0C1 /* ColorVariables.swift in Sources */, D1AB5B4329C757A100CCB0C1 /* Plural.swift in Sources */, D1AB5B4429C757A100CCB0C1 /* Extensions.swift in Sources */, + E97E65122F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, D1AB5B4529C757A100CCB0C1 /* ToolTipViewDatasourceable.swift in Sources */, D1AB5B4629C757A100CCB0C1 /* ToolTipViewUpdatable.swift in Sources */, D1AB5B4829C757A100CCB0C1 /* KeyboardViewController.swift in Sources */, D1AB5B4929C757A100CCB0C1 /* UIColor+ScribeColors.swift in Sources */, - D1AB5B4A29C757A100CCB0C1 /* FRCommandVariables.swift in Sources */, D1AB5B4B29C757A100CCB0C1 /* InterfaceVariables.swift in Sources */, D1AB5B4C29C757A100CCB0C1 /* FR-QWERTYInterfaceVariables.swift in Sources */, D1CDEDAD2A85AE7700098546 /* ENInterfaceVariables.swift in Sources */, D1AB5B4D29C757A100CCB0C1 /* RUInterfaceVariables.swift in Sources */, - D1CDEDCC2A85AE9300098546 /* NBCommandVariables.swift in Sources */, D1AB5B4E29C757A100CCB0C1 /* ViewThemeable.swift in Sources */, D1AB5B4F29C757A100CCB0C1 /* ScribeKey.swift in Sources */, - D1CDEDB72A85AE8300098546 /* HECommandVariables.swift in Sources */, D1AB5B5029C757A100CCB0C1 /* KeyAnimation.swift in Sources */, EDC3646F2AE408FE0001E456 /* InterfaceConstants.swift in Sources */, ); @@ -3404,10 +3347,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D1AFDF0429CA66D00033BF27 /* SVCommandVariables.swift in Sources */, D1AFDF0529CA66D00033BF27 /* InstallScreen.swift in Sources */, D1CDEDD32A85AE9800098546 /* NBInterfaceVariables.swift in Sources */, - D1AFDF0629CA66D00033BF27 /* ESInterfaceVariables.swift in Sources */, D1AFDF0729CA66D00033BF27 /* SVInterfaceVariables.swift in Sources */, D1AFDF0829CA66D00033BF27 /* ScribeColor.swift in Sources */, D12EB9BD2C81C10900181765 /* HEInterfaceVariables.swift in Sources */, @@ -3416,48 +3357,41 @@ D1AFDF0B29CA66D00033BF27 /* ITInterfaceVariables.swift in Sources */, D1AFDF0C29CA66D00033BF27 /* PTInterfaceVariables.swift in Sources */, D1AFDF0D29CA66D00033BF27 /* ToolTipView.swift in Sources */, - D1CDED852A85AE5900098546 /* DACommandVariables.swift in Sources */, D1CDED902A85AE6100098546 /* DAInterfaceVariables.swift in Sources */, - D1AFDF0E29CA66D00033BF27 /* DECommandVariables.swift in Sources */, D1AFDF0F29CA66D00033BF27 /* KeyAltChars.swift in Sources */, - D1CDED9B2A85AE6A00098546 /* ENCommandVariables.swift in Sources */, - D1AFDF1029CA66D00033BF27 /* RUCommandVariables.swift in Sources */, D1AFDF1129CA66D00033BF27 /* FR-AZERTYInterfaceVariables.swift in Sources */, D1AFDF1229CA66D00033BF27 /* KeyboardStyling.swift in Sources */, + E97E65202F2CDEC50070810A /* ESCommandVariables.swift in Sources */, D1AFDF1329CA66D00033BF27 /* ToolTipViewDatasource.swift in Sources */, D1AFDF1429CA66D00033BF27 /* CommandBar.swift in Sources */, - D1AFDF1529CA66D00033BF27 /* ESCommandVariables.swift in Sources */, - D1AFDF1629CA66D00033BF27 /* ITCommandVariables.swift in Sources */, D1AFDF1729CA66D00033BF27 /* KeyboardKeys.swift in Sources */, D1AFDF1829CA66D00033BF27 /* Conjugate.swift in Sources */, - D1AFDF1929CA66D00033BF27 /* PTCommandVariables.swift in Sources */, D1AFDF1A29CA66D00033BF27 /* DEInterfaceVariables.swift in Sources */, 198369CE2C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, + E9ED93872F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, D1AFDFBD29CA67F10033BF27 /* ENKeyboardViewController.swift in Sources */, D1AFDF1B29CA66D00033BF27 /* Annotate.swift in Sources */, D1AFDF1C29CA66D00033BF27 /* InformationToolTipData.swift in Sources */, - D1AFDF1D29CA66D00033BF27 /* LanguageDBManager.swift in Sources */, 19DC85FC2C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, D1AFDF1E29CA66D00033BF27 /* CommandVariables.swift in Sources */, D16DD3A729E78A1500FB9022 /* Utilities.swift in Sources */, E996498C2E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, D1AFDF1F29CA66D00033BF27 /* Translate.swift in Sources */, + E91980C02F2F540A00B5852F /* NavigationStructure.swift in Sources */, D1AFDF2029CA66D00033BF27 /* ColorVariables.swift in Sources */, D1AFDF2129CA66D00033BF27 /* Plural.swift in Sources */, D1AFDF2229CA66D00033BF27 /* Extensions.swift in Sources */, + E97E650B2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, D1AFDF2329CA66D00033BF27 /* ToolTipViewDatasourceable.swift in Sources */, D1AFDF2429CA66D00033BF27 /* ToolTipViewUpdatable.swift in Sources */, D1AFDF2629CA66D00033BF27 /* KeyboardViewController.swift in Sources */, D1AFDF2729CA66D00033BF27 /* UIColor+ScribeColors.swift in Sources */, - D1AFDF2829CA66D00033BF27 /* FRCommandVariables.swift in Sources */, D1AFDF2929CA66D00033BF27 /* InterfaceVariables.swift in Sources */, D1AFDF2A29CA66D00033BF27 /* FR-QWERTYInterfaceVariables.swift in Sources */, D1CDEDA82A85AE7500098546 /* ENInterfaceVariables.swift in Sources */, D1AFDF2B29CA66D00033BF27 /* RUInterfaceVariables.swift in Sources */, - D1CDEDC82A85AE9100098546 /* NBCommandVariables.swift in Sources */, D1AFDF2C29CA66D00033BF27 /* ViewThemeable.swift in Sources */, D1AFDF2D29CA66D00033BF27 /* ScribeKey.swift in Sources */, - D1CDEDB22A85AE7F00098546 /* HECommandVariables.swift in Sources */, D1AFDF2E29CA66D00033BF27 /* KeyAnimation.swift in Sources */, EDC364742AE409000001E456 /* InterfaceConstants.swift in Sources */, ); @@ -3467,10 +3401,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D1AFDF8129CA66F40033BF27 /* SVCommandVariables.swift in Sources */, D1AFDF8229CA66F40033BF27 /* InstallScreen.swift in Sources */, D1CDEDD22A85AE9800098546 /* NBInterfaceVariables.swift in Sources */, - D1AFDF8329CA66F40033BF27 /* ESInterfaceVariables.swift in Sources */, D1AFDF8429CA66F40033BF27 /* SVInterfaceVariables.swift in Sources */, D1AFDF8529CA66F40033BF27 /* ScribeColor.swift in Sources */, D12EB9BF2C81C10900181765 /* HEInterfaceVariables.swift in Sources */, @@ -3479,48 +3411,41 @@ D1AFDF8829CA66F40033BF27 /* ITInterfaceVariables.swift in Sources */, D1AFDF8929CA66F40033BF27 /* PTInterfaceVariables.swift in Sources */, D1AFDF8A29CA66F40033BF27 /* ToolTipView.swift in Sources */, - D1CDED842A85AE5800098546 /* DACommandVariables.swift in Sources */, D1CDED8F2A85AE6100098546 /* DAInterfaceVariables.swift in Sources */, - D1AFDF8B29CA66F40033BF27 /* DECommandVariables.swift in Sources */, D1AFDF8C29CA66F40033BF27 /* KeyAltChars.swift in Sources */, - D1CDED9A2A85AE6A00098546 /* ENCommandVariables.swift in Sources */, - D1AFDF8D29CA66F40033BF27 /* RUCommandVariables.swift in Sources */, D1AFDF8E29CA66F40033BF27 /* FR-AZERTYInterfaceVariables.swift in Sources */, D1AFDF8F29CA66F40033BF27 /* KeyboardStyling.swift in Sources */, + E97E65192F2CDEC50070810A /* ESCommandVariables.swift in Sources */, D1AFDF9029CA66F40033BF27 /* ToolTipViewDatasource.swift in Sources */, D1AFDF9129CA66F40033BF27 /* CommandBar.swift in Sources */, - D1AFDF9229CA66F40033BF27 /* ESCommandVariables.swift in Sources */, - D1AFDF9329CA66F40033BF27 /* ITCommandVariables.swift in Sources */, D1AFDF9429CA66F40033BF27 /* KeyboardKeys.swift in Sources */, D1AFDF9529CA66F40033BF27 /* Conjugate.swift in Sources */, - D1AFDF9629CA66F40033BF27 /* PTCommandVariables.swift in Sources */, D1AFDF9729CA66F40033BF27 /* DEInterfaceVariables.swift in Sources */, 198369CD2C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, + E9ED937D2F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, D1AFDF9829CA66F40033BF27 /* Annotate.swift in Sources */, D1AFDF9929CA66F40033BF27 /* InformationToolTipData.swift in Sources */, D1AFDFBC29CA67EE0033BF27 /* DAKeyboardViewController.swift in Sources */, - D1AFDF9A29CA66F40033BF27 /* LanguageDBManager.swift in Sources */, 19DC85FB2C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, D1AFDF9B29CA66F40033BF27 /* CommandVariables.swift in Sources */, D16DD3A629E78A1500FB9022 /* Utilities.swift in Sources */, E996498B2E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, D1AFDF9C29CA66F40033BF27 /* Translate.swift in Sources */, + E91980C12F2F540A00B5852F /* NavigationStructure.swift in Sources */, D1AFDF9D29CA66F40033BF27 /* ColorVariables.swift in Sources */, D1AFDF9E29CA66F40033BF27 /* Plural.swift in Sources */, D1AFDF9F29CA66F40033BF27 /* Extensions.swift in Sources */, + E97E650A2F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, D1AFDFA029CA66F40033BF27 /* ToolTipViewDatasourceable.swift in Sources */, D1AFDFA129CA66F40033BF27 /* ToolTipViewUpdatable.swift in Sources */, D1AFDFA329CA66F40033BF27 /* KeyboardViewController.swift in Sources */, D1AFDFA429CA66F40033BF27 /* UIColor+ScribeColors.swift in Sources */, - D1AFDFA529CA66F40033BF27 /* FRCommandVariables.swift in Sources */, D1AFDFA629CA66F40033BF27 /* InterfaceVariables.swift in Sources */, D1AFDFA729CA66F40033BF27 /* FR-QWERTYInterfaceVariables.swift in Sources */, D1CDEDA62A85AE7400098546 /* ENInterfaceVariables.swift in Sources */, D1AFDFA829CA66F40033BF27 /* RUInterfaceVariables.swift in Sources */, - D1CDEDC72A85AE9100098546 /* NBCommandVariables.swift in Sources */, D1AFDFA929CA66F40033BF27 /* ViewThemeable.swift in Sources */, D1AFDFAA29CA66F40033BF27 /* ScribeKey.swift in Sources */, - D1CDEDB12A85AE7E00098546 /* HECommandVariables.swift in Sources */, D1AFDFAB29CA66F40033BF27 /* KeyAnimation.swift in Sources */, EDC3646A2AE408FA0001E456 /* InterfaceConstants.swift in Sources */, ); @@ -3530,10 +3455,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D1AFDFD729CA6E900033BF27 /* SVCommandVariables.swift in Sources */, D1AFDFD829CA6E900033BF27 /* InstallScreen.swift in Sources */, D1CDEDD52A85AE9900098546 /* NBInterfaceVariables.swift in Sources */, - D1AFDFD929CA6E900033BF27 /* ESInterfaceVariables.swift in Sources */, D1AFDFDA29CA6E900033BF27 /* SVInterfaceVariables.swift in Sources */, D1AFDFDB29CA6E900033BF27 /* ScribeColor.swift in Sources */, D12EB9C12C81C10900181765 /* HEInterfaceVariables.swift in Sources */, @@ -3542,48 +3465,41 @@ D1AFDFDE29CA6E900033BF27 /* ITInterfaceVariables.swift in Sources */, D1AFDFDF29CA6E900033BF27 /* PTInterfaceVariables.swift in Sources */, D1AFDFE029CA6E900033BF27 /* ToolTipView.swift in Sources */, - D1CDED892A85AE5B00098546 /* DACommandVariables.swift in Sources */, D1CDED932A85AE6300098546 /* DAInterfaceVariables.swift in Sources */, - D1AFDFE129CA6E900033BF27 /* DECommandVariables.swift in Sources */, D1AFDFE229CA6E900033BF27 /* KeyAltChars.swift in Sources */, - D1CDED9E2A85AE6C00098546 /* ENCommandVariables.swift in Sources */, - D1AFDFE329CA6E900033BF27 /* RUCommandVariables.swift in Sources */, D1AFDFE429CA6E900033BF27 /* FR-AZERTYInterfaceVariables.swift in Sources */, D1AFDFE529CA6E900033BF27 /* KeyboardStyling.swift in Sources */, + E97E651F2F2CDEC50070810A /* ESCommandVariables.swift in Sources */, D1AFDFE629CA6E900033BF27 /* ToolTipViewDatasource.swift in Sources */, D1AFDFE729CA6E900033BF27 /* CommandBar.swift in Sources */, - D1AFDFE829CA6E900033BF27 /* ESCommandVariables.swift in Sources */, - D1AFDFE929CA6E900033BF27 /* ITCommandVariables.swift in Sources */, D1AFDFEA29CA6E900033BF27 /* KeyboardKeys.swift in Sources */, D1AFDFEB29CA6E900033BF27 /* Conjugate.swift in Sources */, - D1AFDFEC29CA6E900033BF27 /* PTCommandVariables.swift in Sources */, D1AFDFED29CA6E900033BF27 /* DEInterfaceVariables.swift in Sources */, 198369D12C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, + E9ED93842F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, D1AFDFEE29CA6E900033BF27 /* Annotate.swift in Sources */, D1AFDFEF29CA6E900033BF27 /* InformationToolTipData.swift in Sources */, - D1AFDFF029CA6E900033BF27 /* LanguageDBManager.swift in Sources */, D1AFDFF129CA6E900033BF27 /* CommandVariables.swift in Sources */, 19DC85FF2C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, D1AFE01229CA6F360033BF27 /* HEKeyboardViewController.swift in Sources */, D16DD3AB29E78A1500FB9022 /* Utilities.swift in Sources */, E996498F2E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, D1AFDFF229CA6E900033BF27 /* Translate.swift in Sources */, + E91980BF2F2F540A00B5852F /* NavigationStructure.swift in Sources */, D1AFDFF329CA6E900033BF27 /* ColorVariables.swift in Sources */, D1AFDFF429CA6E900033BF27 /* Plural.swift in Sources */, D1AFDFF529CA6E900033BF27 /* Extensions.swift in Sources */, + E97E65102F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, D1AFDFF629CA6E900033BF27 /* ToolTipViewDatasourceable.swift in Sources */, D1AFDFF729CA6E900033BF27 /* ToolTipViewUpdatable.swift in Sources */, D1AFDFF929CA6E900033BF27 /* KeyboardViewController.swift in Sources */, D1AFDFFA29CA6E900033BF27 /* UIColor+ScribeColors.swift in Sources */, - D1AFDFFB29CA6E900033BF27 /* FRCommandVariables.swift in Sources */, D1AFDFFC29CA6E900033BF27 /* InterfaceVariables.swift in Sources */, D1AFDFFD29CA6E900033BF27 /* FR-QWERTYInterfaceVariables.swift in Sources */, D1CDEDAB2A85AE7600098546 /* ENInterfaceVariables.swift in Sources */, D1AFDFFE29CA6E900033BF27 /* RUInterfaceVariables.swift in Sources */, - D1CDEDCA2A85AE9200098546 /* NBCommandVariables.swift in Sources */, D1AFDFFF29CA6E900033BF27 /* ViewThemeable.swift in Sources */, D1AFE00029CA6E900033BF27 /* ScribeKey.swift in Sources */, - D1CDEDB52A85AE8200098546 /* HECommandVariables.swift in Sources */, D1AFE00129CA6E900033BF27 /* KeyAnimation.swift in Sources */, EDC364712AE408FF0001E456 /* InterfaceConstants.swift in Sources */, ); @@ -3593,10 +3509,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D1B81D3427BBB6B30085FE5E /* SVCommandVariables.swift in Sources */, 30453954293B9107003AE55B /* InstallScreen.swift in Sources */, D1CDEDD72A85AE9A00098546 /* NBInterfaceVariables.swift in Sources */, - D1B81D3327BBB6AD0085FE5E /* ESInterfaceVariables.swift in Sources */, D1B81D3527BBB6B50085FE5E /* SVInterfaceVariables.swift in Sources */, CE1378C728F5D7AC00E1CBC2 /* ScribeColor.swift in Sources */, D12EB9BE2C81C10900181765 /* HEInterfaceVariables.swift in Sources */, @@ -3605,48 +3519,41 @@ D1B81D5627BBBA360085FE5E /* ITInterfaceVariables.swift in Sources */, D1B81D2F27BBB69E0085FE5E /* PTInterfaceVariables.swift in Sources */, 30489C222936DB0000B59393 /* ToolTipView.swift in Sources */, - D1CDED882A85AE5B00098546 /* DACommandVariables.swift in Sources */, D1CDED942A85AE6300098546 /* DAInterfaceVariables.swift in Sources */, - D1B81D2A27BBB6780085FE5E /* DECommandVariables.swift in Sources */, D1B071A327C6A1AA00FD7DBD /* KeyAltChars.swift in Sources */, - D1CDED9F2A85AE6D00098546 /* ENCommandVariables.swift in Sources */, - D1B81D3027BBB6A30085FE5E /* RUCommandVariables.swift in Sources */, D180EC0728FDFABF0018E29B /* FR-AZERTYInterfaceVariables.swift in Sources */, D1B81D3F27BBB7070085FE5E /* KeyboardStyling.swift in Sources */, + E97E65242F2CDEC50070810A /* ESCommandVariables.swift in Sources */, 3045397B293B9E0C003AE55B /* ToolTipViewDatasource.swift in Sources */, D1B81D4427BBB71C0085FE5E /* CommandBar.swift in Sources */, - D1B81D3227BBB6AA0085FE5E /* ESCommandVariables.swift in Sources */, - D1B81D4D27BBBA200085FE5E /* ITCommandVariables.swift in Sources */, D1B81D3D27BBB7020085FE5E /* KeyboardKeys.swift in Sources */, D1B81D4527BBB71C0085FE5E /* Conjugate.swift in Sources */, - D1B81D2E27BBB69B0085FE5E /* PTCommandVariables.swift in Sources */, D1B81D2B27BBB6830085FE5E /* DEInterfaceVariables.swift in Sources */, 198369D22C7980BA00C1B583 /* KeyboardProvider.swift in Sources */, + E9ED937E2F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, D1B81D4327BBB71C0085FE5E /* Annotate.swift in Sources */, 30453985293B9E12003AE55B /* InformationToolTipData.swift in Sources */, - D1B81D4027BBB70C0085FE5E /* LanguageDBManager.swift in Sources */, D1B81D4227BBB71C0085FE5E /* CommandVariables.swift in Sources */, 19DC86002C7772FC006E32FD /* KeyboardBuilder.swift in Sources */, D1B81D4727BBB71C0085FE5E /* Translate.swift in Sources */, D16DD3AC29E78A1500FB9022 /* Utilities.swift in Sources */, E99649902E98AC6000200F53 /* IDInterfaceVariables.swift in Sources */, D1B81D3A27BBB6F90085FE5E /* ColorVariables.swift in Sources */, + E91980C32F2F540A00B5852F /* NavigationStructure.swift in Sources */, D1B81D4827BBB71C0085FE5E /* Plural.swift in Sources */, D1B81D3B27BBB6FC0085FE5E /* Extensions.swift in Sources */, 3045399B293B9E22003AE55B /* ToolTipViewDatasourceable.swift in Sources */, + E97E65152F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, 30453993293B9E1D003AE55B /* ToolTipViewUpdatable.swift in Sources */, D1B81D2227BBB5320085FE5E /* ITKeyboardViewController.swift in Sources */, D1B81D3E27BBB7040085FE5E /* KeyboardViewController.swift in Sources */, CE1378CF28F5D7AC00E1CBC2 /* UIColor+ScribeColors.swift in Sources */, - D1B81D2D27BBB68B0085FE5E /* FRCommandVariables.swift in Sources */, D1B81D3C27BBB6FF0085FE5E /* InterfaceVariables.swift in Sources */, D17693E128FC8D6C00DF0FBB /* FR-QWERTYInterfaceVariables.swift in Sources */, D1CDEDAA2A85AE7500098546 /* ENInterfaceVariables.swift in Sources */, D1B81D3127BBB6A60085FE5E /* RUInterfaceVariables.swift in Sources */, - D1CDEDCD2A85AE9300098546 /* NBCommandVariables.swift in Sources */, 3045398B293B9E18003AE55B /* ViewThemeable.swift in Sources */, D1B81D4627BBB71C0085FE5E /* ScribeKey.swift in Sources */, - D1CDEDB62A85AE8200098546 /* HECommandVariables.swift in Sources */, D1B0719A27C63CE600FD7DBD /* KeyAnimation.swift in Sources */, EDC364702AE408FE0001E456 /* InterfaceConstants.swift in Sources */, ); @@ -3658,17 +3565,15 @@ files = ( E99649642E98A41A00200F53 /* ViewThemeable.swift in Sources */, E996495D2E98A34C00200F53 /* ToolTipView.swift in Sources */, - E99649702E98A61D00200F53 /* DECommandVariables.swift in Sources */, - E99649772E98A6F000200F53 /* ESCommandVariables.swift in Sources */, E99649832E98A85D00200F53 /* SVInterfaceVariables.swift in Sources */, E996496C2E98A5AF00200F53 /* ToolTipViewTheme.swift in Sources */, E99649712E98A62C00200F53 /* Utilities.swift in Sources */, + E97E651B2F2CDEC50070810A /* ESCommandVariables.swift in Sources */, E99649632E98A3C500200F53 /* ToolTipViewUpdatable.swift in Sources */, - E99649822E98A85100200F53 /* ESInterfaceVariables.swift in Sources */, E99649862E98A9E000200F53 /* Translate.swift in Sources */, E9FAC39F2E98972D008E00AC /* IDInterfaceVariables.swift in Sources */, - E99649752E98A6D900200F53 /* PTCommandVariables.swift in Sources */, E996495C2E98A32900200F53 /* KeyboardViewController.swift in Sources */, + E9ED93832F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, E99649812E98A84700200F53 /* RUInterfaceVariables.swift in Sources */, E996495B2E98A31B00200F53 /* KeyboardProvider.swift in Sources */, E996496A2E98A52A00200F53 /* KeyboardStyling.swift in Sources */, @@ -3678,34 +3583,28 @@ E99649722E98A64700200F53 /* Annotate.swift in Sources */, E996496D2E98A5E400200F53 /* InformationToolTipData.swift in Sources */, E996497B2E98A7E600200F53 /* ToolTipViewDatasourceable.swift in Sources */, - E99649762E98A6E500200F53 /* RUCommandVariables.swift in Sources */, - E99649882E98AAB200200F53 /* NBCommandVariables.swift in Sources */, E99649872E98A9FB00200F53 /* KeyAnimation.swift in Sources */, E99649682E98A4BF00200F53 /* ScribeColor.swift in Sources */, E996497F2E98A82200200F53 /* PTInterfaceVariables.swift in Sources */, E996497E2E98A81300200F53 /* ITInterfaceVariables.swift in Sources */, - E99649742E98A6CF00200F53 /* ITCommandVariables.swift in Sources */, - E99649692E98A51000200F53 /* LanguageDBManager.swift in Sources */, - E9FAC3A02E98972D008E00AC /* IDCommandVariables.swift in Sources */, E99649802E98A83C00200F53 /* Extensions.swift in Sources */, E99649672E98A4A900200F53 /* ColorVariables.swift in Sources */, - E996496F2E98A61400200F53 /* ENCommandVariables.swift in Sources */, E99649652E98A47200200F53 /* KeyAltChars.swift in Sources */, E996495F2E98A36700200F53 /* InterfaceVariables.swift in Sources */, E99649842E98A93600200F53 /* UIColor+ScribeColors.swift in Sources */, + E91980C62F2F540A00B5852F /* NavigationStructure.swift in Sources */, E99649662E98A48200200F53 /* CommandVariables.swift in Sources */, E996496B2E98A56500200F53 /* KeyboardKeys.swift in Sources */, E99649622E98A39D00200F53 /* FR-AZERTYInterfaceVariables.swift in Sources */, + E97E65162F2CDD5B0070810A /* ESInterfaceVariables.swift in Sources */, E99649792E98A7A600200F53 /* CommandBar.swift in Sources */, E996497A2E98A7B600200F53 /* ScribeKey.swift in Sources */, E99649612E98A39300200F53 /* ENInterfaceVariables.swift in Sources */, E99649852E98A9D400200F53 /* Plural.swift in Sources */, E996495E2E98A35700200F53 /* ToolTipViewDatasource.swift in Sources */, E9FAC3A12E98972D008E00AC /* IDKeyboardViewController.swift in Sources */, - E99649782E98A70000200F53 /* SVCommandVariables.swift in Sources */, E99649602E98A37500200F53 /* InterfaceConstants.swift in Sources */, E996497C2E98A7F400200F53 /* DEInterfaceVariables.swift in Sources */, - E99649732E98A6B800200F53 /* FRCommandVariables.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3713,25 +3612,22 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F786BAD32F1E8F70003F7505 /* RUCommandVariables.swift in Sources */, + E97E65172F2CDD730070810A /* ESInterfaceVariables.swift in Sources */, + E9ED938A2F2A3C45008D7451 /* DynamicConjugationViewController.swift in Sources */, F786BAD42F1E8F70003F7505 /* ThirdPartyLicense.swift in Sources */, - F786BAD52F1E8F70003F7505 /* LanguageDBManager.swift in Sources */, + F786BAD52F1E8F70003F7505 /* (null) in Sources */, F786BAD62F1E8F70003F7505 /* AppTextStyling.swift in Sources */, + E91980BE2F2F540A00B5852F /* NavigationStructure.swift in Sources */, F786BAD72F1E8F70003F7505 /* ScribeColor.swift in Sources */, F786BAD82F1E8F70003F7505 /* Conjugate.swift in Sources */, F786BAD92F1E8F70003F7505 /* SettingsViewController.swift in Sources */, F786BADA2F1E8F70003F7505 /* AboutTableData.swift in Sources */, F786BADB2F1E8F70003F7505 /* DownloadStateManager.swift in Sources */, F786BADC2F1E8F70003F7505 /* IDInterfaceVariables.swift in Sources */, - F786BADD2F1E8F70003F7505 /* PTCommandVariables.swift in Sources */, F786BADE2F1E8F70003F7505 /* ToolTipViewDatasource.swift in Sources */, F786BADF2F1E8F70003F7505 /* Translate.swift in Sources */, - F786BAE02F1E8F70003F7505 /* ESCommandVariables.swift in Sources */, - F786BAE12F1E8F70003F7505 /* DECommandVariables.swift in Sources */, - F786BAE22F1E8F70003F7505 /* FRCommandVariables.swift in Sources */, F786BAE32F1E8F70003F7505 /* ScribeKey.swift in Sources */, F786BAE42F1E8F70003F7505 /* AppExtensions.swift in Sources */, - F786BAE52F1E8F70003F7505 /* ITCommandVariables.swift in Sources */, F786BAE62F1E8F70003F7505 /* FR-AZERTYInterfaceVariables.swift in Sources */, F786BAE72F1E8F70003F7505 /* ENInterfaceVariables.swift in Sources */, F786BAE82F1E8F70003F7505 /* InstallationVC.swift in Sources */, @@ -3743,16 +3639,14 @@ F786BAEE2F1E8F70003F7505 /* KeyboardViewController.swift in Sources */, F786BAEF2F1E8F70003F7505 /* InstallationDownload.swift in Sources */, F786BAF02F1E8F70003F7505 /* UIEdgeInsetsExtensions.swift in Sources */, - F786BAF12F1E8F70003F7505 /* DACommandVariables.swift in Sources */, + F786BAF12F1E8F70003F7505 /* (null) in Sources */, F786BAF22F1E8F70003F7505 /* KeyboardStyling.swift in Sources */, F786BAF32F1E8F70003F7505 /* Annotate.swift in Sources */, F786BAF42F1E8F70003F7505 /* KeyboardBuilder.swift in Sources */, F786BAF52F1E8F70003F7505 /* KeyboardProvider.swift in Sources */, F786BAF62F1E8F70003F7505 /* UIColor+ScribeColors.swift in Sources */, F786BAF72F1E8F70003F7505 /* SVInterfaceVariables.swift in Sources */, - F786BAF82F1E8F70003F7505 /* ENCommandVariables.swift in Sources */, F786BAF92F1E8F70003F7505 /* TableViewTemplateViewController.swift in Sources */, - F786BAFA2F1E8F70003F7505 /* HECommandVariables.swift in Sources */, F786BAFB2F1E8F70003F7505 /* AppDelegate.swift in Sources */, F786BAFC2F1E8F70003F7505 /* ToolTipView.swift in Sources */, F786BAFD2F1E8F70003F7505 /* ToolTipViewTheme.swift in Sources */, @@ -3762,8 +3656,8 @@ F786BB012F1E8F70003F7505 /* Utilities.swift in Sources */, F786BB022F1E8F70003F7505 /* BaseTableViewController.swift in Sources */, F786BB032F1E8F70003F7505 /* DAInterfaceVariables.swift in Sources */, - F786BB042F1E8F70003F7505 /* ESInterfaceVariables.swift in Sources */, F786BB052F1E8F70003F7505 /* UIDeviceExtensions.swift in Sources */, + E97E65222F2CDEC50070810A /* ESCommandVariables.swift in Sources */, F786BB062F1E8F70003F7505 /* TipCardView.swift in Sources */, F786BB072F1E8F70003F7505 /* InformationToolTipData.swift in Sources */, F786BB082F1E8F70003F7505 /* ToolTipViewUpdatable.swift in Sources */, @@ -3775,13 +3669,11 @@ F786BB0E2F1E8F70003F7505 /* Plural.swift in Sources */, F786BB0F2F1E8F70003F7505 /* InterfaceVariables.swift in Sources */, F786BB102F1E8F70003F7505 /* CommandBar.swift in Sources */, - F786BB112F1E8F70003F7505 /* SVCommandVariables.swift in Sources */, F786BB122F1E8F70003F7505 /* ViewThemeable.swift in Sources */, F786BB132F1E8F70003F7505 /* ColorVariables.swift in Sources */, F786BB142F1E8F70003F7505 /* SelectionViewTemplateViewController.swift in Sources */, F786BB152F1E8F70003F7505 /* AboutTableViewCell.swift in Sources */, F786BB162F1E8F70003F7505 /* InstallScreen.swift in Sources */, - F786BB172F1E8F70003F7505 /* NBCommandVariables.swift in Sources */, F786BB182F1E8F70003F7505 /* KeyboardKeys.swift in Sources */, F786BB192F1E8F70003F7505 /* ParentTableCellModel.swift in Sources */, F786BB1A2F1E8F70003F7505 /* WrapperCell.swift in Sources */,