UNPKG

mesdan

Version:

Latinî mesdan ile Osmanî metin yazmak için hazırlanmış bir alettir.

114 lines (113 loc) 5.33 kB
import { gayriİşaretlerdenMi, harekeMi, kesekMi, tenvinMi, şeddeMi } from '../../aletler/harf-tedkiki-kume'; import { harfLatinidenOsmaniye } from '../lexical/harf-latiniden-osmaniye'; export function ekleOsmaniMetneHarf(mevcutMetin, alemMevkisi, mesHadisesi) { let metin = mevcutMetin; const niyetHarekeMi = mesHadisesi.capsLockBasılıMı; if (metin.length < 1) { metin = harfLatinidenOsmaniye(mesHadisesi.latiniHarf, '', mesHadisesi.shiftBasılıMı, mesHadisesi.altBasılıMı).replace('\u200C', ''); return { metinOsmani: metin, alemBaşMevkisi: metin.length }; } let alemBaşrası = metin.slice(0, alemMevkisi.başMevki); const alemSonrası = metin.slice(alemMevkisi.sonMevki); let alemBaşrasındakiHarf = alemBaşrası.slice(-1); const ilave = harfLatinidenOsmaniye(mesHadisesi.latiniHarf, alemBaşrasındakiHarf, mesHadisesi.shiftBasılıMı, mesHadisesi.altBasılıMı); // --- Harekeleri/İşaretleri Değiştirme (Replacement) Mantığı --- const isaretRegex = /^[\u064B-\u0656\u0670]+$/; if (isaretRegex.test(ilave)) { const match = alemBaşrası.match(/[\u064B-\u0656\u0670]+$/); if (match) { // Eğer öncesinde hareke varsa, silip yenisini koymak için alemBaşrası'nı kırpıyoruz. alemBaşrası = alemBaşrası.slice(0, -match[0].length); alemBaşrasındakiHarf = alemBaşrası.slice(-1); } } // -------------------------------------------------------------- const alemBaşrasındakiİkiHarf = alemBaşrası.slice(-2); metin = alemBaşrası + ilave + alemSonrası; let alemHareketMiktarı = ilave.length; if (niyetHarekeMi) { const alemBaşrasıHarekeMi = harekeMi(alemBaşrasındakiHarf); const alemBaşrasıTenvinMi = tenvinMi(alemBaşrasındakiHarf); const alemBaşrasıGayriİşaretlerdenMi = gayriİşaretlerdenMi(alemBaşrasındakiHarf); const alemBaşrasıŞeddeMi = şeddeMi(alemBaşrasındakiİkiHarf); const ilaveŞeddeMi = şeddeMi(ilave); const alemBaşrasıKesmeMi = kesekMi(alemBaşrasındakiHarf); const ilaveKesmeMi = kesekMi(ilave); const alemBaşrasıŞeddeHariciMi = alemBaşrasıHarekeMi || alemBaşrasıTenvinMi || alemBaşrasıGayriİşaretlerdenMi; // Kesme Evveli const kesekEvvelindekiHarf = alemBaşrası.slice(0, alemBaşrası.length - 1).slice(-1); const kesekEvvelindekiİkiHarf = alemBaşrası.slice(0, alemBaşrası.length - 1).slice(-2); const kesekEvveliHarekeMi = harekeMi(kesekEvvelindekiHarf); const kesekEvveliTenvinMi = tenvinMi(kesekEvvelindekiHarf); const kesekEvveliGayriİşaretlerdenMi = gayriİşaretlerdenMi(kesekEvvelindekiHarf); const kesekEvveliŞeddeHariciMi = kesekEvveliHarekeMi || kesekEvveliTenvinMi || kesekEvveliGayriİşaretlerdenMi; const kesekEvveliŞeddeMi = şeddeMi(kesekEvvelindekiİkiHarf); if (alemBaşrasıKesmeMi) { if (ilaveKesmeMi) { metin = alemBaşrası + alemSonrası; // Mevcut metne dön (ilaveyi yoksay) } else { if (kesekEvveliŞeddeMi) { metin = alemBaşrası.slice(0, alemBaşrası.length - 3) + ilave + '\u200C' + alemSonrası; } else if (kesekEvveliŞeddeHariciMi) { metin = alemBaşrası.slice(0, alemBaşrası.length - 2) + ilave + '\u200C' + alemSonrası; } else { metin = alemBaşrası.slice(0, alemBaşrası.length - 1) + ilave + '\u200C' + alemSonrası; } } } else if (alemBaşrasıŞeddeMi) { metin = alemBaşrası.slice(0, alemBaşrası.length - 2) + ilave + alemSonrası; } else if (alemBaşrasıŞeddeHariciMi) { metin = alemBaşrası.slice(0, alemBaşrası.length - 1) + ilave + alemSonrası; } if (alemBaşrasıKesmeMi) { if (ilaveKesmeMi) { alemHareketMiktarı = 0; } else if (kesekEvveliŞeddeHariciMi) { if (ilaveŞeddeMi) { alemHareketMiktarı = 1; } else { alemHareketMiktarı = 0; } } else if (kesekEvveliŞeddeMi) { if (ilaveŞeddeMi) { alemHareketMiktarı = 0; } else { alemHareketMiktarı = -1; } } } else if (alemBaşrasıŞeddeMi) { if (ilaveŞeddeMi) { alemHareketMiktarı = 0; } else { alemHareketMiktarı = -1; } } else if (alemBaşrasıŞeddeHariciMi) { if (ilaveŞeddeMi) { alemHareketMiktarı = 1; } else { alemHareketMiktarı = 0; } } } else if (alemBaşrası.endsWith('ا') && ilave === 'ا') { metin = alemBaşrası.slice(0, -1) + 'آ' + alemSonrası; alemHareketMiktarı = 0; } return { metinOsmani: metin, alemBaşMevkisi: alemBaşrası.length + alemHareketMiktarı, }; }