local cikart = {}
local Alfabe = {}
function Alfabe:getirKod()
return self._kod
end
function Alfabe:getirAsilAd()
return self._rawData.asilAd
end
function Alfabe:getirDigerAdlari(sadeceDigerAdlari)
return require("Modül:dil-benzeri").getirDigerAdlari(self, sadeceDigerAdlari)
end
function Alfabe:getirDigerleri()
return self._rawData.digerleri or {}
end
function Alfabe:getirCesitleri(flatten)
return require("Modül:dil-benzeri").getirCesitleri(self, flatten)
end
function Alfabe:getirEbeveyn()
return self._rawData.ebeveyn and self._rawData.ebeveyn
end
function Alfabe:getirEbeveynler()
return {"tüm alfabeler"}
end
function Alfabe:getirSistem()
if not self._sistemNesneleri then
local m_sistemler = require("Modül:yazı sistemleri")
self._sistemNesneleri = {}
for _, sys in ipairs(self._rawData.sistemler or {}) do
table.insert(self._sistemNesneleri, m_sistemler.getirKodaGore(sys))
end
end
return self._sistemNesneleri
end
--function Alfabe:getirTumAdlar()
-- return self._rawData.adlar
--end
function Alfabe:getirTip()
return "alfabe"
end
function Alfabe:getirKategoriAdi()
local ad = self._rawData.asilAd
-- If the name already has "code" or "semaphore" in it, don't add it.
-- No names contain "script".
if ad:find("ode$") or ad:find("emaphore$") or ad:find("lfabesi") then
return ad
else
return ad .. " alfabesi"
end
end
function Alfabe:getirVikipediMaddesi()
return self._rawData.vikipedi_maddesi or self:getirKategoriAdi()
end
function Alfabe:getirKarakterler()
if self._rawData.karakterler then
return self._rawData.karakterler
else
return nil
end
end
function Alfabe:sayKarakterler(yazi)
if not self._rawData.karakterler then
return 0
else
local _, num = mw.ustring.gsub(yazi, "", "")
return num
end
end
function Alfabe:getirYon()
local yon = self._rawData.yon
if not yon then
return nil
else
return yon
end
end
function Alfabe:getRawData()
return self._rawData
end
function Alfabe:toJSON()
local ret = {
asilAd = self:getirAsilAd(),
kategoriAdi = self:getirKategoriAdi(),
kod = self._kod,
digerAdlari = self:getirDigerAdlari(),
tip = self:getirTip(),
}
return require("Modül:JSON").toJSON(ret)
end
Alfabe.__index = Alfabe
function cikart.yapNesne(kod, veri)
return veri and setmetatable({ _rawData = veri, _kod = kod }, Alfabe) or nil
end
function cikart.getirKodaGore(kod)
if kod == "IPAchar" then
--require("Modül:debug").track("IPAchar")
end
return cikart.yapNesne(kod, mw.loadData("Modül:alfabeler/veri"))
end
function cikart.getirAsilAdaGore(ad)
local kod = mw.loadData("Modül:alfabeler/ada göre")
if not kod then
return nil
end
return cikart.yapNesne(kod, mw.loadData("Modül:alfabeler/veri"))
end
-- Find the best script to use, based on the characters of a string.
function cikart.bulEnIyiAlfabe(yazi, dil)
if not yazi or not dil or not dil.getirAlfabeler then
return cikart.getirKodaGore("None")
end
local alfabeler = dil:getirAlfabeler()
if not alfabeler then
return alfabeler
end
--[=[
Remove any HTML entities; catfix function in ]
adds tagging to a no-break space ( ), which contains Latin characters;
hence Latin was returned as the script if "Latn" is one of the language's scripts.
]=]
yazi = string.gsub(yazi, "&+;", "")
-- Try to match every script against the text,
-- and return the one with the most matching characters.
local eniyisay = 0
local eniyialfabe = nil
-- Get length of text minus any spacing or punctuation characters.
-- Counting instances of UTF-8 character pattern is faster than mw.ustring.len.
local _, length = string.gsub(mw.ustring.gsub(yazi, "+", ""), "*", "")
if length == 0 then
return cikart.getirKodaGore("None")
end
for i, alfabe in ipairs(alfabeler) do
local say = alfabe:sayKarakterler(yazi)
if say >= length then
return alfabe
end
if say > eniyisay then
eniyisay = say
eniyialfabe = alfabe
end
end
if eniyialfabe then
return eniyialfabe
end
-- No matching script was found. Return "None".
return cikart.getirKodaGore("None")
end
function cikart.kodaDonustur(frame)
alfabe = frame.args
if cikart.getirAsilAdaGore(alfabe) then
return cikart.getirAsilAdaGore(alfabe):getirKod()
elseif cikart.getirKodaGore(alfabe) then
return cikart.getirKodaGore(alfabe):getirAsilAd()
end
end
function cikart.alfbul(frame)
local args = frame:getParent().args
local dil = require("Modül:diller").getirKodaGore(args)
local yazi = args
return cikart.bulEnIyiAlfabe(yazi, dil):getirAsilAd()
end
return cikart