Modül:alfabe araçları
Bu belgeleme Modül:alfabe araçları/belge (düzenle | geçmiş) sayfasından yansıtılmaktadır. Arayüz düzenleyicilerinin deney yapabilmeleri için ayrıca Modül:alfabe araçları/deneme tahtası sayfası kullanılabilir.
local cikart = {}
--[=[
Kullanılan modüller:
[[Modül:alfabe araçları/veri]]
[[Modül:alfabeler]]
[[Modül:diller]]
[[Modül:parameters]]
[[Modül:araçlar]]
[[Modül:debug]]
]=]
function cikart.Latin_alfabesi_mi(alf)
-- Latn, Latf, Latinx, nv-Latn, pjt-Latn
return alf:getirKod():find("Lat") and true or false
end
-- {{dil}} şablonu için
function cikart.dil_s(frame)
params = {
[1] = {},
[2] = { allow_empty = true, default = "" },
["ak"] = {},
["tip"] = {},
["sınıf"] = {},
}
local args = require("Modül:parameters").process(frame:getParent().args, params)
local NAMESPACE = mw.title.getCurrentTitle().nsText
local dil = args[1] or (NAMESPACE == "Şablon" and "und") or error("Dil kodu belirtilmedi. Lütfen 1 numaralı parametreye girin.")
dil = require("Modül:diller").getirKodaGore(dil) or require("Modül:diller").err(dil, 1)
local yazi = args[2]
local alf = args["ak"]
alf = (alf and (require("Modül:alfabeler").getirKodaGore(alf) or error("\"" .. alf .. "\" alfabe kodu geçersiz.")) or nil)
local tip = args["tip"]
return cikart.etiket_yazi(yazi, dil, alf, tip, sinif)
end
-- Ustring turns on the codepoint-aware string matching. The basic string function
-- should be used for simple sequences of characters, Ustring function for
-- sets – [].
local function takipetDuzen(yazi, duzen, takip, ustring)
local find = ustring and mw.ustring.find or string.find
if duzen and find(yazi, duzen) then
--require("Modül:debug").track("script/" .. takip)
end
end
local function takipet(yazi, dil, alf)
local U = mw.ustring.char
if dil and yazi then
local dilKodu = dil:getirKod()
-- [[Özel:SayfayaBağlantılar/Şablon:tracking/script/ang/acute]]
if dilKodu == "ang" then
local ayrik = mw.ustring.toNFD(yazi)
local akut = U(0x301)
takipetDuzen(ayrik, akut, "ang/acute")
--[=[
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Greek/wrong-phi]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Greek/wrong-theta]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Greek/wrong-kappa]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Greek/wrong-rho]]
ϑ, ϰ, ϱ, ϕ should generally be replaced with θ, κ, ρ, φ.
]=]
elseif dilKodu == "el" or dilKodu == "grc" then
takipetDuzen(yazi, "ϑ", "Greek/wrong-theta")
takipetDuzen(yazi, "ϰ", "Greek/wrong-kappa")
takipetDuzen(yazi, "ϱ", "Greek/wrong-rho")
takipetDuzen(yazi, "ϕ", "Greek/wrong-phi")
--[=[
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Ancient Greek/spacing-coronis]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Ancient Greek/spacing-smooth-breathing]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Ancient Greek/wrong-apostrophe]]
When spacing coronis and spacing smooth breathing are used as apostrophes,
they should be replaced with right single quotation marks (’).
]=]
if dilKodu == "grc" then
takipetDuzen(yazi, U(0x1FBD), "Ancient Greek/spacing-coronis")
takipetDuzen(yazi, U(0x1FBF), "Ancient Greek/spacing-smooth-breathing")
takipetDuzen(yazi, "[" .. U(0x1FBD) .. U(0x1FBF) .. "]", "Ancient Greek/wrong-apostrophe", true)
end
-- [[Özel:SayfayaBağlantılar/Şablon:tracking/script/Russian/grave-accent]]
elseif dilKodu == "ru" then
local ayrik = mw.ustring.toNFD(yazi)
takipetDuzen(ayrik, U(0x300), "Russian/grave-accent")
-- [[Özel:SayfayaBağlantılar/Şablon:tracking/script/Tibetan/trailing-punctuation]]
elseif dilKodu == "bo" then
takipetDuzen(yazi, "[་།]$", "Tibetan/trailing-punctuation", true)
takipetDuzen(yazi, "[་།]%]%]$", "Tibetan/trailing-punctuation", true)
--[=[
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Thai/broken-ae]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Thai/broken-am]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Thai/wrong-rue-lue]]
]=]
elseif dilKodu == "th" then
takipetDuzen(yazi, "เ".."เ", "Thai/broken-ae")
takipetDuzen(yazi, "ํ[่้๊๋]?า", "Thai/broken-am", true)
takipetDuzen(yazi, "[ฤฦ]า", "Thai/wrong-rue-lue", true)
--[=[
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Lao/broken-ae]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Lao/broken-am]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Lao/possible-broken-ho-no]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Lao/possible-broken-ho-mo]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Lao/possible-broken-ho-lo]]
]=]
elseif dilKodu == "lo" then
takipetDuzen(yazi, "ເ".."ເ", "Lao/broken-ae")
takipetDuzen(yazi, "ໍ[່້໊໋]?າ", "Lao/broken-am", true)
takipetDuzen(yazi, "ຫນ", "Lao/possible-broken-ho-no")
takipetDuzen(yazi, "ຫມ", "Lao/possible-broken-ho-mo")
takipetDuzen(yazi, "ຫລ", "Lao/possible-broken-ho-lo")
--[=[
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Lü/broken-ae]]
[[Özel:SayfayaBağlantılar/Şablon:tracking/script/Lü/possible-wrong-sequence]]
]=]
elseif dilKodu == "khb" then
takipetDuzen(yazi, "ᦵ".."ᦵ", "Lü/broken-ae")
takipetDuzen(yazi, "[ᦀ-ᦫ][ᦵᦶᦷᦺ]", "Lü/possible-wrong-sequence", true)
end
end
end
-- Yazının HTML etiketlerini uygun dil ve alfabe sınıflarıyla kapla.
function cikart.etiket_yazi(yazi, dil, alf, tip, sinif, id)
if not alf then
alf = require("Modül:alfabeler").bulEnIyiAlfabe(yazi, dil)
end
takipet(yazi, dil, alf)
-- Moğol alfabesindeki yazılarda boşluk karakterlerini satır başı ile değiştir, çünkü bu alfabe yukarıdan aşağı yazılmakta.
if alf and alf:getirYon() == "down" then
--[[ Önce, vikibağlantıları ve HTML etiketlerinin hedeflerinden kaçarak
boşluklarının satır aralarıyla değiştirilmediğinden emin ol
]]
local kacildi = {}
local i = 0
local kacis_bicimi = "$%d"
local function kacis(yazi, duzen, onek)
return yazi:gsub(
duzen,
function(item)
i = i + 1
kacildi[i] = item
return (onek or "") .. kacis_bicimi:format(i)
end)
end
yazi = kacis(yazi, "%[%[([^|]+|)", "[[")
yazi = kacis(yazi, "<[^>]+>")
yazi = yazi:gsub(" +", "<br>")
-- Eğer kaçınma başarılıysa bunu geri al.
yazi = yazi:gsub(
"$(%d)",
function(a)
a = tonumber(a)
return kacildi[a]
end
)
end
if alf:getirKod() == "Imag" then
tip = nil
end
local function sinif_ozell(siniflar)
table.insert(siniflar, 1, alf:getirKod())
if sinif and sinif ~= '' then
table.insert(siniflar, sinif)
end
return 'class="' .. table.concat(siniflar, ' ') .. '"'
end
local function etiket_ozell(...)
local cikti = {}
if id then
table.insert(cikti, 'id="' .. require("Modül:araçlar").make_id(dil, id) .. '"')
end
table.insert(cikti, sinif_ozell({...}) )
if dil then
table.insert(cikti, 'lang="' .. dil:getirKod() .. '"')
end
return table.concat(cikti, " ")
end
if tip == "varsayımsal" then
-- [[Özel:SayfayaBağlantılar/Şablon:tracking/script-utilities/face/hypothetical]]
--require("Modül:debug").track("script-utilities/face/hypothetical")
end
local veri = mw.loadData("Modül:alfabe araçları/veri").tipler[tip or "varsayılan"]
local sonrasi = ""
if alf:getirYon() == "rtl" and (tip == "çeviri" or mw.ustring.find(yazi, "%p$")) then
sonrasi = "‎"
end
-- Alfabe kaplayıcı ekle
if veri then
return ( veri.onek or "" ) .. '<' .. veri.etiket .. ' ' .. etiket_ozell(veri.sinif) .. '>' .. yazi .. '</' .. veri.etiket .. '>' .. sonrasi
else
error('"' .. tip .. '" geçersiz bir alfabe tipidir.')
end
end
function cikart.etiket_alfabecev(alfabecev, dil, tur, ozellikler, elle_eklenmis)
if type(dil) == "table" then
dil = dil.getirKod and dil:getirKod()
or error("etiket_alfabecev fonksiyonunun üçüncü parametresi bir dil kodu veya dil nesnesi olmalıdır.")
end
local veri = mw.loadData("Modül:alfabe araçları/veri").alfabecev[tur or "varsayılan"]
local acilis_etiketi = {}
table.insert(acilis_etiketi, veri.etiket)
if dil == "ja" then
table.insert(acilis_etiketi, 'class="' .. (veri.sinif and veri.sinif .. " " or "") .. (elle_eklenmis and "manual-tr " or "") .. 'tr"')
else
table.insert(acilis_etiketi, 'lang="' .. dil .. '-Latn"')
table.insert(acilis_etiketi, 'class="' .. (veri.sinif and veri.sinif .. " " or "") .. (elle_eklenmis and "manual-tr " or "") .. 'tr Latn"')
end
if veri.dir then
table.insert(acilis_etiketi, 'dir="' .. veri.dir .. '"')
end
table.insert(acilis_etiketi, ozellikler)
return "<" .. table.concat(acilis_etiketi, " ") .. ">" .. alfabecev .. "</" .. veri.etiket .. ">"
end
-- Bir sözcüğün anadil alfabesinin istenildiğini belirten bir uyarı ekle
function cikart.iste_alfabe(dil, alf, ornek, katyok, sira_anahtari)
local alfabeler = dil.getirAlfabeler and dil:getirAlfabeler() or error('"' .. dil:getirKod() .. '" dili getirAlfabeler metoduna sahip değil. Alfabesi belirtilmemiş olabilir.')
-- Varsayılan istek "anadil" alfabedir
local kat_alfabe = "anadil"
local gorun_alfabe = "alfabe"
-- Eğer alfabe belirtilmediyse ve dil tek bir alfabeye sahipse, onu kullan.
if not alf and #alfabeler == 1 then
alf = alfabeler[1]
end
-- Alfabe tanınınıyor mu?
if alf then
-- Eğer alfabe Latin ise, hiçbir şey çıkartma.
if cikart.Latin_alfabesi_mi(alf) then
return ""
end
if alf:getirKod() ~= alfabeler[1]:getirKod() then
gorun_alfabe = alf:getirAsilAd()
end
-- Eğer iki anlama gelme durumu varsa kategori alfabeye özel olmalı
-- Bu durum dil=und ise veya dil birden fazla alfabeye sahipse
-- meydana gelebilir.
if dil:getirKod() == "und" or alfabeler[2] then
kat_alfabe = alf:getirAsilAd()
end
else
-- Alfabe tanınmıyor ise.
-- Dil, listesinde en azından bir tane Latin olmayan harf içeriyor mu?
local varmi_Latinolmayan = false
for i, deger in ipairs(alfabeler) do
if not cikart.Latin_alfabesi_mi(deger) then
varmi_Latinolmayan = true
break
end
end
-- Eğer Latin olmayan harfler yoksa, hiçbir şey çıkartma.
if not varmi_Latinolmayan then
return ""
end
end
local kategori
if ornek then
kategori = dil:getirAsilAd() .. " kullanım örneklerinde " .. kat_alfabe .. " isteniyor"
else
kategori = dil:getirAsilAd() .. " söz türlerinde " .. kat_alfabe .. " isteniyor"
end
return "<small>[" .. gorun_alfabe .. " isteniyor]</small>" ..
(katyok and "" or require("Modül:araçlar").format_categories({kategori}, dil, sira_anahtari))
end
function cikart.rfalfabe_s(frame)
params = {
[1] = { required = true, default = "und" },
["ak"] = {},
["örnek"] = { type = "boolean" },
["katyok"] = { type = "boolean" },
["sıra"] = {},
}
local args = require("Modül:parameters").process(frame:getParent().args, params)
local dil = require("Modül:diller").getirKodaGore(args[1], 1)
local alf = args.ak and require("Modül:alfabeler").getirKodaGore(args.ak, true)
local tekrar = cikart.iste_alfabe(dil, alf, args["örnek"], args.katyok, args["sıra"])
if tekrar == "" then
error("Bu dil Latin alfabesini kullanmaktadır. Bir alfabe koduna ihtiyaç duymamaktadır.")
else
return tekrar
end
end
function cikart.kontroletAlfabe(yazi, alfKodu, sonuc)
local alfabeNesnesi = require("Modül:alfabeler").getirKodaGore(alfKodu)
if not alfabeNesnesi then
error('"' .. alfKodu .. '" alfabe kodu tanınmıyor.')
end
local asilYazi = yazi
-- Harf olmayan karakterleri kaldır.
yazi = mw.ustring.gsub(yazi, "[%A]", "")
-- Bahsi geçen alfabenin tüm karakterlerini kaldır.
yazi = mw.ustring.gsub(yazi, "[" .. alfabeNesnesi:getCharacters() .. "]", "")
if yazi ~= "" then
if type(sonuc) == "string" then
error(sonuc)
else
error('"' .. asilYazi .. '" yazısı "' .. alfabeNesnesi:getirKategoriAdi() .. " alfabesine ait olmayan " .. yazi .. '" karakterlerini içermekte.', 2)
end
end
end
return cikart