From 0cf40fa6e5dbea85c024248a7d8ca6c306a77fe0 Mon Sep 17 00:00:00 2001 From: "Chen, Chien-ting" Date: Sun, 10 Jan 2021 18:20:05 +0800 Subject: [PATCH] initial commit --- conj.ts | 263 ++++++++++++++++++++++++++++++++++++++++++++++++++ index.html | 214 ++++++++++++++++++++++++++++++++++++++++ tsconfig.json | 7 ++ 3 files changed, 484 insertions(+) create mode 100644 conj.ts create mode 100644 index.html create mode 100644 tsconfig.json diff --git a/conj.ts b/conj.ts new file mode 100644 index 0000000..5d2f8da --- /dev/null +++ b/conj.ts @@ -0,0 +1,263 @@ +var conjNoList = ( document.getElementById('conj-no')); +var conjOptDiv = document.getElementById('conj1-opt-div'); +var startConj = document.getElementById('start-conjugate'); +var original = ( document.getElementById('original')); +var conjStem = ( document.getElementById('conj-stem')); + +var conj_no = parseInt(conjNoList.value); +var type_of_conj1 = null; + +var typesOfConj1Rads = document.getElementsByName("types-of-conj1"); + +for(var i = 0; i < typesOfConj1Rads.length; i++) { + let radValue = ( typesOfConj1Rads[i]).value; + typesOfConj1Rads[i].addEventListener('change', () => { + type_of_conj1 = radValue; + }) +} + +conjNoList.addEventListener('change', (event) => { + conj_no = parseInt(conjNoList.value); + if (conj_no == 2) { + conjOptDiv.style.display = "none"; + } else { + conjOptDiv.style.display = "block"; + } +}) + +function emptyString(str : string){ + var isContainedSpace = str.match(/^[  \t\n\r]+$/); + var isReallyEmpty = (str == ""); + return isReallyEmpty || isContainedSpace; +} + +startConj.addEventListener('click', (event) => { + var original_text = original.value; + var conjstem_text = conjStem.value; + if (emptyString(original_text) && emptyString(conjstem_text)){ + alert("您輸入的是空字串,請重新輸入。") + } + else{ + if (emptyString(conjstem_text)){ + conjstem_text = original_text; + }; + generateConj(original_text, conjstem_text, conj_no); +}}); + +function checkedIfBroadEnd(str_array : string[]){ + for (var i = str_array.length - 1; i >=0; i--){ + + if (str_array[i].match(/[aouáóúAOUÁÓÚ]/)){ + return true; + } + else if (str_array[i].match(/[eiéíEIÉÍ]/)){ + return false; + } + } + return true; +} + +let first_conj = +{ "broad" : + { + "pres" : ["aim", "air", "ann", "aimíd", "ann sibh", "aid", null, "tar"], + "past" : ["as", "ais", null, "amair", "abhair", "adar", null, "adh"], + "pa_ha" : ["ainn", "tá", "adh", "aimís", "adh sibh", "aidís", "taí"], + "futu" : ["fad", "fair", "faidh", "faimíd", "faidh sibh", "faid", "far"], + "cond" : ["fainn", "fá", "fadh", "faimís", "fadh sibh", "faidís", "faí"], + "pr_su" : ["ad", "air", "aidh", "aimíd", "aidh sibh", "aid", null], + "impe" : ["aim", null, "adh", "aimís", "aidh", "aidís", null], + }, + "slender" : + { + "pres" : ["im", "ir", "eann", "imíd", "eann sibh", "id", null, "tear"], + "past" : ["eas", "is", null, "eamair", "eabhair", "eadar", null, "eadh"], + "pa_ha" : ["inn", "teá", "eadh", "imís", "eadh sibh", "idís", "tí"], + "futu" : ["fead", "fir", "fidh", "fimíd", "fidh sibh", "fid", "fear"], + "cond" : ["finn", "feá", "feadh", "fimís", "feadh sibh", "fidís", "fí"], + "pr_su" : ["ead", "ir", "idh", "imíd", "idh sibh", "id", null], + "impe" : ["im", null, "eadh", "imís", "idh", "idís", null], + } +} + +let second_conj = +{ "broad" : + { + "pres" : ["ím", "ír", "íonn", "aimíd", "ann sibh", "aid", null, "tar"], + "past" : ["as", "ais", null, "amair", "abhair", "adar", null, "adh"], + "pa_ha" : ["ainn", "tá", "adh", "aimís", "adh sibh", "aidís", "taí"], + "futu" : ["fad", "fair", "faidh", "faimíd", "faidh sibh", "faid", "far"], + "cond" : ["fainn", "fá", "fadh", "faimís", "fadh sibh", "faidís", "faí"], + "pr_su" : ["ad", "air", "aidh", "aimíd", "aidh sibh", "aid", null], + "impe" : ["aim", null, "adh", "aimís", "aidh", "aidís", null], + }, + "slender" : + { + "pres" : ["ím", "ír", "íonn", "ímíd", "íonn sibh", "íd", null, "ítear"], + "pa_ha" : ["ínn", "íteá", "íodh", "ímís", "íodh sibh", "ídís", "ití"], + "futu" : ["eod", "eoir", "eoidh", "eoimíd", "eoidh sibh", "eoid", "eofar"], + "cond" : ["eoinn", "eofá", "eodh", "eoimís", "eodh sibh", "eoidís", "eofaí"], + "pr_su" : ["íod", "ír", "ídh", "ímíd", "ídh sibh", "íd", null], + "impe" : ["ím", null, "íodh", "ímís", "ídh", "ídís", null], + } +} + +var ighType; + +// values for ighType +let shortVowelEnd = 0; +let longBroadEnd = 1; +let longSlenderEnd = 2; + +let firstConjIgh = +{ 0 : // shortVowelEnd + { + "pres" : ["ím", "ír", "íonn", "ímíd", "íonn sibh", "íd", null, "itear"], + "past" : ["íos", "ís", null, "íomair", "íobhair", "íodar", null, "íodh"], + "pa_ha" : ["ínn", "iteá", "íodh", "ímís", "íodh sibh", "ídís", "ití"], + "futu" : ["ífead", "ífir", "ífidh", "ífimíd", "ífidh sibh", "ífid", "ífear"], + "cond" : ["ífinn", "ífeá", "ífeadh", "ífimís", "ífeadh sibh", "ífidís", "ífí"], + "pr_su" : ["íod", "ír", "ídh", "ímíd", "ídh sibh", "íd", null], + "impe" : ["ím", null, "íodh", "ímís", "ídh", "ídís", null], + }, + 1 : // longBroadEnd + { + "pres" : ["im", "ir", "nn", "imíd", "nn sibh", "id", null, "tar"], + "past" : ["s", "is", null, "mair", "bhair", "dar", null, "dh"], + "pa_ha" : ["inn", "iteá", "dh", "imís", "dh sibh", "idís", "ití"], + "futu" : ["fad", "fair", "faidh", "faimíd", "faidh sibh", "faid", "far"], + "cond" : ["fainn", "fá", "fadh", "faimís", "fadh sibh", "faidís", "faí"], + "pr_su" : ["d", "ir", "idh", "imíd", "idh sibh", "id", null], + "impe" : ["im", null, "dh", "imís", "idh", "idís", null], + }, + 2 : // longSlenderEnd + { + "pres" : ["im", "ir", "ann", "imíd", "ann sibh", "id", null, "tear"], + "past" : ["as", "is", null, "amair", "abhair", "adar", null, "adh"], + "pa_ha" : ["inn", "iteá", "adh", "imís", "adh sibh", "idís", "tí"], + "futu" : ["ifead", "ifir", "ifidh", "ifimíd", "ifidh sibh", "ifid", "ifear"], + "cond" : ["ifinn", "ifeá", "ifeadh", "ifimís", "ifeadh sibh", "ifidís", "ifí"], + "pr_su" : ["ad", "ir", "idh", "imíd", "idh sibh", "id", null], + "impe" : ["im", null, "adh", "imís", "idh", "idís", null], + } +} + +function generateConj(orig_txt : string, stem_txt : string, conj_no : Number){ + var impe_ls = document.getElementById("impe"); + var past_ls = document.getElementById("past"); + var _2sgimpe = impe_ls.getElementsByTagName("td")[2]; + var _3sgpast = past_ls.getElementsByTagName("td")[3]; + _2sgimpe.innerHTML = orig_txt; + _3sgpast.innerHTML = orig_txt; + + + // Gael => ['G', 'ae', 'l']; ithim => [i, th] + var stem_txt_splitted = stem_txt.split(/([aA][eE]|[bcdfgmpstBCDFGMPST][hH]|[A-Za-z])/).filter(text => text); + var isBroadEnd = checkedIfBroadEnd(stem_txt_splitted); + if (conj_no == 1){ + + if (type_of_conj1 == "igh"){ + if (!orig_txt.match('[iI][gG][hH]$')){ + alert("原來的詞不以 -igh 結尾。"); + } + + if (stem_txt.match('([áóúÁÓÚ]|[eE][oO]|[uU][aA])$')){ + ighType = longBroadEnd; + } + else if (stem_txt.match('[éÉ]$')){ + ighType = longSlenderEnd; + }else{ + ighType = shortVowelEnd; + } + + + var suffixTable = firstConjIgh[ighType]; + + fillTablesInner(suffixTable); + + + + + + } + else if (type_of_conj1 == "ail"){ + + if (!orig_txt.match('[áÁ][iI][lL]$')){ + alert("原來的詞不以 -áil 結尾。"); + } + + firstConjFillTheArray(); + + + // convert stem -ál to -áil + var stemAilLeft = stem_txt.substring(0, stem_txt.length-1); + var stemAil; + if (stemAilLeft.substring(stemAilLeft.length-1) == 'á'){ + stemAil = stemAilLeft + 'i' + stem_txt.substring(stem_txt.length-1); + } + else{ + stemAil = stemAilLeft + 'I' + stem_txt.substring(stem_txt.length-1); + } + + var autoPres = document.getElementById("pres").getElementsByTagName("td")[8]; + var _2SgPaHa = document.getElementById("pa_ha").getElementsByTagName("td")[2]; + var autoPaHa = document.getElementById("pa_ha").getElementsByTagName("td")[7]; + + var suffixTable = first_conj["slender"]; + var autoPresSuffix = suffixTable["pres"][7]; + var _2sgPaHaSuffix = suffixTable["pa_ha"][1]; + var autoPaHaSuffix = suffixTable["pa_ha"][6]; + + autoPres.innerHTML = stemAil + autoPresSuffix; + _2SgPaHa.innerHTML = stemAil + _2sgPaHaSuffix; + autoPaHa.innerHTML = stemAil + autoPaHaSuffix; + + } + + else{ + + // general 1st vonj verbs + firstConjFillTheArray(); + + // irreagularity of the pres. auto. form of lean + if (stem_txt == "lean"){ + var relPres = document.getElementById("pres").getElementsByTagName("td")[7]; + relPres.innerHTML = "leanas"; + } + } + + // general 1st vonj verbs + function firstConjFillTheArray() { + var suffixTable; + if (isBroadEnd) { + suffixTable = first_conj["broad"]; + } else { + suffixTable = first_conj["slender"]; + } + + fillTablesInner(suffixTable); + + } + + + function fillTablesInner(suffixTable : any) { + var suffixTableKeys = Object.keys(suffixTable); + + for (var i = 0; i < suffixTableKeys.length; i++) { + var currentSuffixTableKey = suffixTableKeys[i]; + var personalArray = document.getElementById(currentSuffixTableKey); + + for (var j = 0; j < suffixTable[currentSuffixTableKey].length; j++) { + var item = personalArray.getElementsByTagName("td")[1 + j]; + var currentSuffix = suffixTable[currentSuffixTableKey][j]; + + if (currentSuffix != null) { + item.innerHTML = stem_txt + currentSuffix; + } + + } + + } + } + } +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..52a985d --- /dev/null +++ b/index.html @@ -0,0 +1,214 @@ + + + + Irish Conjugator + +
+
+

愛爾蘭語動詞變化產生器

+

Gineadóir Réimniú na Gaeilge

+
+

+
+
詞彙原形:
+

+
+
拿來變化的詞根:
+

+
+
(註:如 imir 拿來變化的詞根是 imr,留空白代表同原形。第一類變化的 -igh 型去掉詞尾 igh,比如:nigh 寫成 n;dóigh 寫成 dó;-áil 型詞尾的 áil 改成 ál)
+

+
+
詞彙變化編號: + +
+

+
+
第一類變化選項:
+
+

一般型態

+

-igh型態

+

-áil型態

+
+
+ +

動詞變化表

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
式(態) \ 主詞 1 單 2 單 3 單
+ (分析式)5
1 複 2 複 3 複 肯定直接關係式6
+
無人稱7
現在式
+

+

+

+

+

+

+
同分析式
+

+
過去式2
+

+

+

+

+

+

+
+
同分析式
+
+

+
過去習慣式2
+

+

+

+

+

+

+
未來式
+

+

+

+

+

+

+

+
條件態2,3
+

+

+

+

+

+

+

+
現在假設態4
+

+

+

+

+

+

+
N/A
+
同現在式 (但子音交替法不同)
過去假設態3 同過去習慣式(但子音交替法不同)
+
同過去習慣式
+ (但子音交替法不同)
命令態
+

+

+

+

+

+

+
同現在式 
過去分詞
+
+

註:

+
    +
  1. 以上動詞變化以凱里 (Ciarraí) 和科克 (Corcaigh) 的芒斯特方言 (Gaelainn na Mumhan, Munster Irish) 為準。參考資料:Cork Irish、reimnigh.net。
  2. +
  3. 前面接 do/d',接 do/d' 時動詞要軟音化 (seimhiıú, lenition)(無人稱除外)。d' 接在母音和 fh(軟音化後)前面;do 接在子音前面。
  4. +
  5. 前接連接詞 dá 時,動詞要暗音化 (urú, eclipsis)。
  6. +
  7. 前接連接詞 go 時,動詞要暗音化。
  8. +
  9. 分析式後面接主詞或代名詞比如說第三人稱單數代詞 sé/sí,以表達文意。
  10. +
  11. 用於肯定式直接關係子句內。
  12. +
  13. 「無人稱」(automous/impersonal),指不特定對象當主詞的情況,可以翻譯為「某某+動詞」。接 do/d' 這個詞不可以讓動詞軟音化。
  14. +
+

+ + + diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e17379c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "sourceMap": true + } +}