UNPKG

mesdan

Version:

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

210 lines (209 loc) 10.6 kB
import { useEffect, useRef, useState } from "react"; import { harfBüyükMü } from "../aletler/harf-buyuk-mu"; import { tebdilAlemMevkisiniMenzilIle } from "../aletler/tebdil-alem-mevkisini"; import { hazırlaAlemMevkisini, hazırlaAlemMevkisiniMenzilli } from "../nev/alem-mevkisi"; import { TadiliMetinEmri } from "../nev/tadili-metin-emri"; import { Talimat_MetniTadilEt } from "../nuve/tadil-et-metni"; export const useMesdan = ({ ibtidaiMetin = "", tekSatırMı, latiniMi = false, aramaTalepEdilince, }) => { const [yenilemeİbresi, tebdilYenilemeİbresi] = useState(0); const [metin, tebdilMetin] = useState(ibtidaiMetin); const metinSahasıİması = useRef(null); const alemMevkisiİması = useRef(hazırlaAlemMevkisini(ibtidaiMetin.length)); // const harekeTuşlarıFaalMi = useRef<boolean>(false); const tebdilLatiniAramaMı = (_latiniMi) => { latiniMi = _latiniMi; }; useEffect(() => { if (latiniMi) return; let metinSahası = metinSahasıİması.current; if (!metinSahası) return; metinSahası.setAttribute("spellcheck", "false"); metinSahası.setAttribute("autocorrect", "off"); metinSahası.setAttribute("autocapitalize", "off"); metinSahası.setAttribute("autocomplete", "off"); if (tekSatırMı) { metinSahası.setAttribute("enterkeyhint", "done"); // metinSahası.setAttribute("type", "search"); } // Sahne hazır olduktan sonra alemin mevkilenmesi için tebdilAlemMevkisiniMenzilIle(metinSahası, alemMevkisiİması.current.başMevki, alemMevkisiİması.current.sonMevki, true); let alemMevkisiBaşı = metinSahası.selectionStart || 0; let alemMevkisiSonu = metinSahası.selectionEnd || 0; const tuşaBasılıncaFizikiMesdan = async (hadise) => { // console.log("tuşaBasılıncaFizikiMesdan > keydown"); hadise.preventDefault(); hadise.stopPropagation(); // console.log("Hadise> Key: -" + hadise.key + "-"); // console.log("Hadise> Code: -" + hadise.code + "-"); const metin = metinSahası.value; alemMevkisiBaşı = metinSahası.selectionStart || 0; alemMevkisiSonu = metinSahası.selectionEnd || 0; const alemMevkisi = hazırlaAlemMevkisiniMenzilli(alemMevkisiBaşı, alemMevkisiSonu); const mesHadisesi = { latiniHarf: hadise.key, shiftBasılıMı: hadise.shiftKey, altBasılıMı: hadise.altKey, capsLockBasılıMı: harfBüyükMü(hadise.key), }; // arama 1.2.0 kademesinde hazır değildi, sonradan hazırladım let tadiliMetinEmri = TadiliMetinEmri.EKLE; if (tekSatırMı && hadise.key === "Enter") { tadiliMetinEmri = TadiliMetinEmri.ARA; if (aramaTalepEdilince) { aramaTalepEdilince(); } return; } else if (!tekSatırMı && hadise.key === "Enter") { tadiliMetinEmri = TadiliMetinEmri.EKLE; mesHadisesi.latiniHarf = "\n"; } else if (hadise.key === "Delete") { tadiliMetinEmri = TadiliMetinEmri.SİL_AHİRDEN; } else if (hadise.key === "Backspace") { tadiliMetinEmri = TadiliMetinEmri.SİL_EVVELDEN; } else if (hadise.key === "ArrowRight") { tadiliMetinEmri = TadiliMetinEmri.ALEM_SAĞA; } else if (hadise.key === "ArrowLeft") { tadiliMetinEmri = TadiliMetinEmri.ALEM_SOLA; } else if (hadise.key === "ArrowUp") { tadiliMetinEmri = TadiliMetinEmri.ALEM_YUKARI; } else if (hadise.key === "ArrowDown") { tadiliMetinEmri = TadiliMetinEmri.ALEM_AŞAĞI; } else if (hadise.ctrlKey) { if (hadise.key.toLowerCase() === "c") { tadiliMetinEmri = TadiliMetinEmri.TENSİH; } else if (hadise.key.toLowerCase() === "x") { tadiliMetinEmri = TadiliMetinEmri.KES; } else if (hadise.key.toLowerCase() === "v") { tadiliMetinEmri = TadiliMetinEmri.YAPIŞTIR; } else { tadiliMetinEmri = TadiliMetinEmri.BOŞ; } } else if (hadise.key === "Shift") { tadiliMetinEmri = TadiliMetinEmri.BOŞ; } else if (hadise.key === "Alt") { tadiliMetinEmri = TadiliMetinEmri.BOŞ; } else if (hadise.key === "AltGraph") { tadiliMetinEmri = TadiliMetinEmri.BOŞ; } else if (hadise.key === "Meta") { tadiliMetinEmri = TadiliMetinEmri.BOŞ; } else if (hadise.key === "Tab") { tadiliMetinEmri = TadiliMetinEmri.BOŞ; } else if (hadise.key === "CapsLock") { tadiliMetinEmri = TadiliMetinEmri.BOŞ; } else if (hadise.key === "Dead") { tadiliMetinEmri = TadiliMetinEmri.BOŞ; } const netice = await Talimat_MetniTadilEt(metinSahası, metin, alemMevkisi, tadiliMetinEmri, mesHadisesi, true); // console.log("netice: " + JSON.stringify(netice)); alemMevkisiİması.current = netice.alemMevkisiTadilSonrası; tebdilMetin(netice.metinTadilSonrası); // Alemin sağa, sola, aşağı ve yukarı hareketi için lazım tebdilAlemMevkisiniMenzilIle(metinSahası, netice.alemMevkisiTadilSonrası.başMevki, netice.alemMevkisiTadilSonrası.sonMevki, true); if (netice.sahneYenidenÇizilsinMi) { tebdilYenilemeİbresi((ibre) => ibre + 1); } }; const tuşaBasılıncaSuniMesdan = async (hadise) => { // console.log("tuşaBasılıncaSuniMesdan > input"); hadise.preventDefault(); // Here event.preventDefault doesn't stop user from typing hadise.stopPropagation(); const metinHadisesi = hadise; let harf = ""; if (metinHadisesi.data !== null) { harf = metinHadisesi.data; } // console.log("Hadise> data: -" + harf + "- -" + harf.slice(-1) + "-"); // console.log("Hadise> inputType: -" + metinHadisesi.inputType + "-"); const mesHadisesi = { // latiniHarf: harf, latiniHarf: harf.replace(". ", " "), // latiniHarf: harf.slice(-1), shiftBasılıMı: false, altBasılıMı: false, capsLockBasılıMı: harfBüyükMü(harf), }; let tadiliMetinEmri = TadiliMetinEmri.EKLE; // insertText if (tekSatırMı && metinHadisesi.inputType === "Enter") { tadiliMetinEmri = TadiliMetinEmri.ARA; } else if (!tekSatırMı && metinHadisesi.inputType === "insertLineBreak") { mesHadisesi.latiniHarf = "\n"; tadiliMetinEmri = TadiliMetinEmri.EKLE; } else if (metinHadisesi.inputType === "deleteContentBackward") { tadiliMetinEmri = TadiliMetinEmri.SİL_EVVELDEN; } else if (metinHadisesi.inputType === "deleteByCut") { tadiliMetinEmri = TadiliMetinEmri.KES; } else if (metinHadisesi.inputType === "insertFromPaste") { tadiliMetinEmri = TadiliMetinEmri.YAPIŞTIR; } const metin = metinSahası.value; const alemMevkisi = hazırlaAlemMevkisiniMenzilli(alemMevkisiBaşı, alemMevkisiSonu); const netice = await Talimat_MetniTadilEt(metinSahası, metin, alemMevkisi, tadiliMetinEmri, mesHadisesi, false); alemMevkisiİması.current = netice.alemMevkisiTadilSonrası; tebdilMetin(netice.metinTadilSonrası); if (netice.sahneYenidenÇizilsinMi) { tebdilYenilemeİbresi((ibre) => ibre + 1); } }; const tuşaBasılıncaEvveliSuniMesdan = (hadise) => { // console.log("tuşaBasılıncaEvveliSuniMesdan > beforeinput"); alemMevkisiBaşı = metinSahası.selectionStart || 0; alemMevkisiSonu = metinSahası.selectionEnd || 0; }; const metinYapıştırmaTalebinde = async (hadise) => { hadise.preventDefault(); const mesHadisesi = { latiniHarf: "", shiftBasılıMı: false, altBasılıMı: false, capsLockBasılıMı: false, }; alemMevkisiBaşı = metinSahası.selectionStart || 0; alemMevkisiSonu = metinSahası.selectionEnd || 0; const metin = metinSahası.value; const alemMevkisi = hazırlaAlemMevkisiniMenzilli(alemMevkisiBaşı, alemMevkisiSonu); const tadiliMetinEmri = TadiliMetinEmri.YAPIŞTIR; const netice = await Talimat_MetniTadilEt(metinSahası, metin, alemMevkisi, tadiliMetinEmri, mesHadisesi, true); alemMevkisiİması.current = netice.alemMevkisiTadilSonrası; tebdilMetin(netice.metinTadilSonrası); }; if (window.matchMedia("(pointer: coarse)").matches) { metinSahası.addEventListener("beforeinput", tuşaBasılıncaEvveliSuniMesdan, false); metinSahası.addEventListener("input", tuşaBasılıncaSuniMesdan, false); } else { metinSahası.addEventListener("keydown", tuşaBasılıncaFizikiMesdan, false); metinSahası.addEventListener("paste", metinYapıştırmaTalebinde, false); } return () => { metinSahası.removeEventListener("keydown", tuşaBasılıncaFizikiMesdan); metinSahası.removeEventListener("beforeinput", tuşaBasılıncaEvveliSuniMesdan); metinSahası.removeEventListener("input", tuşaBasılıncaSuniMesdan); metinSahası.removeEventListener("paste", tuşaBasılıncaSuniMesdan); }; }, [metin, yenilemeİbresi, metinSahasıİması.current, latiniMi]); return [metin, metinSahasıİması, tebdilMetin, tebdilLatiniAramaMı]; };