mesdan
Version:
Latinî mesdan ile Osmanî metin yazmak için hazırlanmış bir alettir.
114 lines (113 loc) • 5.33 kB
JavaScript
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ı,
};
}