From d2e9841f96ebff61d4a5c26a322484f6268115f1 Mon Sep 17 00:00:00 2001 From: StefanVukovic99 Date: Fri, 22 Mar 2024 15:27:35 +0100 Subject: expand deinflection format (#745) * abstract deinflections * undo redundant changes * remove cast * switch to js * MultiLanguageTransformer * comments * comments * fix test * suffixInflection * fix bench * substring instead of replace * without heuristic * suffixMap * add other language deinflections * wip * catch cycles * fix tests * uninflect to deinflect * use less regex * add suru masu stem deinflection --- ext/js/language/sq/albanian-transforms.js | 351 ++++++++++++++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 ext/js/language/sq/albanian-transforms.js (limited to 'ext/js/language/sq/albanian-transforms.js') diff --git a/ext/js/language/sq/albanian-transforms.js b/ext/js/language/sq/albanian-transforms.js new file mode 100644 index 00000000..16ce202d --- /dev/null +++ b/ext/js/language/sq/albanian-transforms.js @@ -0,0 +1,351 @@ +/* + * Copyright (C) 2024 Yomitan Authors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import {suffixInflection} from '../language-transforms.js'; + +/** + * @param {string} inflectedSuffix + * @param {string} deinflectedSuffix + * @param {string[]} conditionsIn + * @param {string[]} conditionsOut + * @returns {import('language-transformer').Rule} + */ +function conjugationIISuffixInflection(inflectedSuffix, deinflectedSuffix, conditionsIn, conditionsOut) { + return { + ...suffixInflection(inflectedSuffix, deinflectedSuffix, conditionsIn, conditionsOut), + type: 'other', + isInflected: new RegExp('.*[^j]' + inflectedSuffix + '$') + }; +} + +/** @type {import('language-transformer').LanguageTransformDescriptor} */ +export const albanianTransforms = { + language: 'sq', + conditions: { + v: { + name: 'Verb', + isDictionaryForm: true + }, + n: { + name: 'Noun', + isDictionaryForm: true, + subConditions: ['np', 'ns'] + }, + np: { + name: 'Noun plural', + isDictionaryForm: true + }, + ns: { + name: 'Noun singular', + isDictionaryForm: true + }, + adj: { + name: 'Adjective', + isDictionaryForm: true + }, + adv: { + name: 'Adverb', + isDictionaryForm: true + } + }, + transforms: [ + // Nouns + { + name: 'definite', + description: 'Definite form of a noun', + rules: [ + // Masculine + suffixInflection('ku', 'k', [], ['n']), + suffixInflection('gu', 'g', [], ['n']), + suffixInflection('hu', 'h', [], ['n']), + suffixInflection('au', 'a', [], ['n']), + suffixInflection('iu', 'i', [], ['n']), + suffixInflection('eu', 'e', [], ['n']), + suffixInflection('i', 'ë', [], ['n']), + suffixInflection('i', '', [], ['n']), + suffixInflection('ri', '', [], ['n']), + suffixInflection('oi', 'ua', [], ['n']), + // Feminine + suffixInflection('a', 'ë', [], ['n']), + suffixInflection('a', '', [], ['n']), + suffixInflection('ja', 'e', [], ['n']) + ] + }, + { + name: 'singular definite accusative', + description: 'Singular definite accusative form of a noun', + rules: [ + suffixInflection('n', '', [], ['n']) + ] + }, + { + name: 'plural', + description: 'Plural form of a noun', + rules: [ + suffixInflection('e', '', ['np'], ['ns']), + suffixInflection('t', '', ['np'], ['ns']) // Pijet + ] + }, + // Verbs + { + name: 'present indicative second-person singular', + description: 'Present indicative second-person singular form of a verb', + rules: [ + suffixInflection('on', 'oj', [], ['v']), + suffixInflection('uan', 'uaj', [], ['v']), + suffixInflection('n', 'j', [], ['v']), // Fshin + suffixInflection('hesh', 'hem', [], ['v']) + ] + }, + { + name: 'present indicative third-person singular', + description: 'Present indicative third-person singular form of a verb', + rules: [ + suffixInflection('on', 'oj', [], ['v']), + suffixInflection('uan', 'uaj', [], ['v']), + suffixInflection('n', 'j', [], ['v']), // Fshin + suffixInflection('het', 'hem', [], ['v']) + ] + }, + { + name: 'present indicative first-person plural', + description: 'Present indicative first-person plural form of a verb', + rules: [ + suffixInflection('më', '', [], ['v']), // Ndihmojmë, paguajmë, fshijmë + suffixInflection('im', '', [], ['v']), // Vendosim, hapim + suffixInflection('hemi', 'hem', [], ['v']) + ] + }, + { + name: 'present indicative second-person plural', + description: 'Present indicative second-person plural form of a verb', + rules: [ + suffixInflection('ni', 'j', [], ['v']), // Ndihmoni, paguani, fshini + suffixInflection('ni', '', [], ['v']), // Vendosni, hapni + suffixInflection('heni', 'hem', [], ['v']) + ] + }, + { + name: 'present indicative third-person plural', + description: 'Present indicative third-person plural form of a verb', + rules: [ + suffixInflection('në', '', [], ['v']), // Ndihmojnë, paguajnë, fshijnë + suffixInflection('in', '', [], ['v']), // Vendosin, hapin + suffixInflection('hen', 'hem', [], ['v']) + ] + }, + { + name: 'imperfect first-person singular indicative', + description: 'Imperfect first-person singular indicative form of a verb', + rules: [ + suffixInflection('ja', 'j', [], ['v']), // Ndihmoja, paguaja, fshija + suffixInflection('ja', '', [], ['v']), // Vendosja, hapja + suffixInflection('hesha', 'hem', [], ['v']) + ] + }, + { + name: 'imperfect second-person singular indicative', + description: 'Imperfect second-person singular indicative form of a verb', + rules: [ + suffixInflection('je', 'j', [], ['v']), // Ndihmoje, paguaje, fshije + suffixInflection('je', '', [], ['v']), // Vendosje, hapje + suffixInflection('heshe', 'hem', [], ['v']) + ] + }, + { + name: 'imperfect third-person singular indicative', + description: 'Imperfect third-person singular indicative form of a verb', + rules: [ + suffixInflection('nte', 'j', [], ['v']), // Ndihmonte, paguante, fshinte + suffixInflection('te', '', [], ['v']), // Vendoste, hapte + suffixInflection('hej', 'hem', [], ['v']) + ] + }, + { + name: 'imperfect first-person plural indicative', + description: 'Imperfect first-person plural indicative form of a verb', + rules: [ + suffixInflection('nim', 'j', [], ['v']), // Ndihmonim, paguanim, fshinim + suffixInflection('nim', '', [], ['v']), // Vendosnim, hapnim + suffixInflection('heshim', 'hem', [], ['v']) + ] + }, + { + name: 'imperfect second-person plural indicative', + description: 'Imperfect second-person plural indicative form of a verb', + rules: [ + suffixInflection('nit', 'j', [], ['v']), // Ndihmonit, paguanit, fshinit + suffixInflection('nit', '', [], ['v']), // Vendosnit, hapnit + suffixInflection('heshit', 'hem', [], ['v']) + ] + }, + { + name: 'imperfect third-person plural indicative', + description: 'Imperfect third-person plural indicative form of a verb', + rules: [ + suffixInflection('nin', 'j', [], ['v']), // Ndihmonin, paguanin, fshinin + suffixInflection('nin', '', [], ['v']), // Vendosnin, hapnin + suffixInflection('heshin', 'hem', [], ['v']) + ] + }, + { + name: 'aorist first-person singular indicative', + description: 'Aorist first-person singular indicative form of a verb', + rules: [ + suffixInflection('ova', 'uaj', [], ['v']), // Pagova + suffixInflection('va', 'j', [], ['v']), // Ndihmova, fshiva + conjugationIISuffixInflection('a', '', [], ['v']) // Vendosa, hapa + ] + }, + { + name: 'aorist second-person singular indicative', + description: 'Aorist second-person singular indicative form of a verb', + rules: [ + suffixInflection('ove', 'uaj', [], ['v']), // Pagove + suffixInflection('ve', 'j', [], ['v']), // Ndihmove, fshive + conjugationIISuffixInflection('e', '', [], ['v']) // Vendose, hape + ] + }, + { + name: 'aorist third-person singular indicative', + description: 'Aorist third-person singular indicative form of a verb', + rules: [ + suffixInflection('oi', 'oj', [], ['v']), // Ndihmoi + suffixInflection('oi', 'uaj', [], ['v']), // Pagoi + suffixInflection('u', 'j', [], ['v']), // Fshiu + conjugationIISuffixInflection('i', '', [], ['v']) // Vendosi, hapi + ] + }, + { + name: 'aorist first-person plural indicative', + description: 'Aorist first-person plural indicative form of a verb', + rules: [ + suffixInflection('uam', 'oj', [], ['v']), // Ndihmuam + suffixInflection('uam', 'uaj', [], ['v']), // Paguam + suffixInflection('më', 'j', [], ['v']), // Fshimë + conjugationIISuffixInflection('ëm', '', [], ['v']) // Vendosëm, hapëm + ] + }, + { + name: 'aorist second-person plural indicative', + description: 'Aorist second-person plural indicative form of a verb', + rules: [ + suffixInflection('uat', 'oj', [], ['v']), // Ndihmuat + suffixInflection('uat', 'uaj', [], ['v']), // Paguat + suffixInflection('të', 'j', [], ['v']), // Fshitë + conjugationIISuffixInflection('ët', '', [], ['v']) // Vendosët, hapët + ] + }, + { + name: 'aorist third-person plural indicative', + description: 'Aorist third-person plural indicative form of a verb', + rules: [ + suffixInflection('uan', 'oj', [], ['v']), // Ndihmuan + suffixInflection('uan', 'uaj', [], ['v']), // Paguan + suffixInflection('në', 'j', [], ['v']), // Fshinë + suffixInflection('ye', 'ej', [], ['v']), // U kthye ? + conjugationIISuffixInflection('ën', '', [], ['v']) // Vendosën, hapën + ] + }, + { + name: 'imperative second-person singular present', + description: 'Imperative second-person singular present form of a verb', + rules: [ + suffixInflection('o', 'oj', [], ['v']), + suffixInflection('hu', 'hem', [], ['v']) // Kujtohu + ] + }, + { + name: 'imperative second-person plural present', + description: 'Imperative second-person plural present form of a verb', + rules: [ + suffixInflection('ni', 'j', [], ['v']), // Ndihmoni, paguani, fshini + suffixInflection('ni', '', [], ['v']), // Vendosni, hapni + suffixInflection('huni', 'hem', [], ['v']) // Kujtohuni + ] + }, + { + name: 'participle', + description: 'Participle form of a verb', + rules: [ + suffixInflection('uar', 'oj', [], ['v']), + suffixInflection('ur', '', [], ['v']), + suffixInflection('rë', 'j', [], ['v']), // Fshirë, + suffixInflection('yer', 'ej', [], ['v']) // Shkëlqyer + ] + }, + { + name: 'mediopassive', + description: 'Mediopassive form of a verb', + rules: [ + suffixInflection('hem', 'h', ['v'], ['v']), + suffixInflection('hem', 'j', ['v'], ['v']) + ] + }, + { + name: 'optative first-person singular present', + description: 'Optative first-person singular present form of a verb', + rules: [ + suffixInflection('fsha', 'j', [], ['v']) // Ndihmofsha + ] + }, + { + name: 'optative second-person singular present', + description: 'Optative second-person singular present form of a verb', + rules: [ + suffixInflection('fsh', 'j', [], ['v']) // Ndihmofsh + ] + }, + { + name: 'optative third-person singular present', + description: 'Optative third-person singular present form of a verb', + rules: [ + suffixInflection('ftë', 'j', [], ['v']) // Ndihmoftë + ] + }, + { + name: 'optative first-person plural present', + description: 'Optative first-person plural present form of a verb', + rules: [ + suffixInflection('fshim', 'j', [], ['v']) // Ndihmofshim + ] + }, + { + name: 'optative second-person plural present', + description: 'Optative second-person plural present form of a verb', + rules: [ + suffixInflection('fshi', 'j', [], ['v']) // Ndihmofshi + ] + }, + { + name: 'optative third-person plural present', + description: 'Optative third-person plural present form of a verb', + rules: [ + suffixInflection('fshin', 'j', [], ['v']) // Ndihmofshin + ] + }, + { + name: 'noun', + description: 'Noun form of a verb', + rules: [ + suffixInflection('im', 'oj', [], ['v']), // Gëzim, zbulim + suffixInflection('im', 'ej', [], ['v']), // Përkthim + suffixInflection('je', '', [], ['v']) // Lëvizje + ] + } + ] +}; -- cgit v1.2.3