Bu Lua modülü, şu şablonların çıktısını vermektedir:
-- Yazarlar: Benwing, CodeCat
local ar_translit = require("Modül:ar-alfabeçeviri")
local dil = require("Modül:diller").getirKodaGore("ar")
local cikart = {}
local soz_fonksiyonlari = {}
-- diacritics
local u = mw.ustring.char
local A = u(0x064E) -- fetḥa
local AN = u(0x064B) -- fetḥatān (fetḥa tenvīn)
local U = u(0x064F) -- ḍamme
local UN = u(0x064C) -- ḍammetān (ḍamme tenvīn)
local I = u(0x0650) -- kesre
local IN = u(0x064D) -- kesretān (kesre tenvīn)
local SK = u(0x0652) -- sükūn = sessiz
local SH = u(0x0651) -- şedde = ünsüzleri ikizleştirir
local DAGGER_ALIF = u(0x0670)
local DIACRITIC_ANY_BUT_SH = ""
-- bazı harfler ve işaretler
local TAM = u(0x0629) -- tāʾ-i merbūṭa = ة
-- common combinations
local UNU = ""
------------------------
-- Araç fonksiyonları --
------------------------
-- Eğer boş değilse
local function ebd(arg)
if arg == "" then
return nil
else
return arg
end
end
local function listeden_ayarla(list)
local set = {}
for _, item in ipairs(list) do
set = true
end
return set
end
-- version of mw.ustring.gsub() that discards all but the first return value
function rsub(term, foo, bar)
local retval = mw.ustring.gsub(term, foo, bar)
return retval
end
local rfind = mw.ustring.find
function remove_links(text)
text = rsub(text, "%]*|", "")
text = rsub(text, "%[%[", "")
text = rsub(text, "%]%]", "")
return text
end
function reorder_shadda(text)
-- shadda+short-vowel (including tanwīn vowels, i.e. -an -in -un) gets
-- replaced with short-vowel+shadda during NFC normalisation, which
-- MediaWiki does for all Unicode strings; however, it makes the
-- detection process inconvenient, so undo it. (For example, the tracking
-- code below would fail to detect the -un in سِتٌّ because the shadda
-- would come after the -un.)
text = rsub(text, "(" .. DIACRITIC_ANY_BUT_SH .. ")" .. SH, SH .. "%1")
return text
end
-- The main entry point.
function cikart.show(frame)
local sozkat = frame.args or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
local params = {
= {list = "head", allow_holes = true, default = ""},
= {default = ""},
= {list = true, allow_holes = true},
}
local args = frame:getParent().args -- YAPILACAK: Burada ] kullan
-- Parametreleri topla
local veri = {dil = dil, soz_kategorisi = sozkat, kategoriler = {}, baslar = {}, alfabecevler = {}, cinsiyetler = {}, cekimler = { etkin_oto_alfabecev = true }}
local bas = args or args or ""
local translit = ebd(args)
local i = 1
local irreg_translit = false
while bas do
table.insert(veri.baslar, bas)
veri.alfabecevler = translit
if ar_translit.irregular_translit(bas, translit) then
irreg_translit = true
end
i = i + 1
bas = ebd(args)
translit = ebd(args)
end
if irreg_translit then
table.insert(veri.kategoriler, dil:getirAsilAd() .. " terms with irregular pronunciations")
end
if soz_fonksiyonlari then
soz_fonksiyonlari.func(args, veri)
end
return require("Modül:başlık başı").tam_baslikbasi(veri)
end
-- Get a list of inflections. See handle_infl() for meaning of ARGS, ARGPREF
-- and DEFGENDER.
local function getargs(args, argpref, defgender)
-- Gather parameters
local forms = {}
local form = ebd(args)
local translit = ebd(args)
local cinsiyet = ebd(args)
local cinsiyet2 = ebd(args)
local i = 1
while form do
local genderlist = (cinsiyet or cinsiyet2) and {cinsiyet, cinsiyet2} or defgender and {defgender} or nil
table.insert(forms, {sozcuk = form, alfabecev = translit, cinsiyetler = genderlist})
i = i + 1
form = ebd(args)
translit = ebd(args)
cinsiyet = ebd(args)
cinsiyet2 = ebd(args)
end
return forms
end
-- Get a list of inflections from the arguments in ARGS based on argument
-- prefix ARGPREF (e.g. "pl" to snarf arguments called "pl", "pl2", etc.,
-- along with "pltr", "pl2tr", etc. and optional gender(s) "plg", "plg2",
-- "pl2g", "pl2g2", "pl3g", "pl3g2", etc.). Label with LABEL (e.g. "plural"),
-- which will appear in the headword. Insert into inflections list
-- INFLS. Optional DEFGENDER is default gender to insert if gender
-- isn't given; otherwise, no gender is inserted. (This is used for
-- singulative forms of collective nouns, and collective forms of singulative
-- nouns, which have different gender from the base form(s).)
local function handle_infl(args, veri, argpref, etiket, defgender)
local newinfls = getargs(args, argpref, defgender)
newinfls.etiket = etiket
if #newinfls > 0 then
table.insert(veri.cekimler, newinfls)
end
end
-- Handle a basic inflection (e.g. plural, feminine) along with the construct,
-- definite and oblique variants of this inflection. Can also handle the base
-- construct/definite/oblique variants if both ARGPREF and LABEL are given
-- as blank strings. If NOBASE or ARGPREF is blank, skip the base inflection.
local function handle_all_infl(args, veri, argpref, etiket, nobase)
if not nobase and argpref ~= "" then
handle_infl(args, veri, argpref, etiket)
end
local etiketvm = etiket == "" and "" or etiket .. " "
handle_infl(args, veri, argpref .. "cons", etiketvm .. "tamlanan hâli")
handle_infl(args, veri, argpref .. "def", etiketvm .. "definite state")
handle_infl(args, veri, argpref .. "obl", etiketvm .. "oblique")
handle_infl(args, veri, argpref .. "inf", etiketvm .. "informal")
end
-- Handle the case where pl=-, indicating an uncountable noun.
local function handle_noun_plural(args, veri)
if args == "-" then
table.insert(veri.cekimler, {etiket = "usually ]"})
table.insert(veri.kategoriler, dil:getirAsilAd() .. " sayılamayan adlar")
else
handle_infl(args, veri, "pl", "çoğul")
handle_infl(args, veri, "ç", "çoğul")
end
end
local valid_genders = listeden_ayarla(
{"m", "m-s", "m-pr", "m-s-pr", "m-np", "m-s-np",
"e", "e-t", "e-pr", "e-t-pr", "e-np", "e-t-np",
"f", "f-s", "f-pr", "f-s-pr", "f-np", "f-s-np",
"d", "d-t", "d-pr", "d-t-pr", "d-np", "d-t-np",
"m-du", "m-du-pr", "m-du-np",
"e-i", "e-i-pr", "e-i-np",
"f-du", "f-du-pr", "f-du-np",
"d-i", "d-i-pr", "d-i-np",
"m-p", "m-p-pr", "m-p-np",
"e-ç", "e-ç-pr", "e-ç-np",
"f-p", "f-p-pr", "f-p-np",
"d-ç", "d-ç-pr", "d-ç-np",
"i", "du",
"i-ç", "du-p",
"p", "p-pr", "p-np",
"ç", "ç-pr", "ç-np",
"pr", "np"
})
local function is_masc_sg(g)
return g == "m" or g == "m-pr" or g == "m-np" or g == "e" or g == "e-pr" or g == "e-np"
end
local function is_fem_sg(g)
return g == "f" or g == "f-pr" or g == "f-np" or g == "d" or g == "d-pr" or g == "d-np"
end
-- Handle gender in unnamed param 2 and a second gender in param g2,
-- inserting into the list of genders in GENDER. Also insert categories
-- into CATS if the gender is unexpected for the form of the noun
-- or if multiple genders occur. If gender unspecified, default to
-- DEFAULT, which may be omitted.
local function handle_gender(args, veri, default)
local g = ebd(args) or default
local g2 = ebd(args)
local function process_gender(g)
if not g then
table.insert(veri.cinsiyetler, "?")
elseif valid_genders then
table.insert(veri.cinsiyetler, g)
else
error("Unrecognized gender: " .. g)
end
end
process_gender(g)
if g2 then
process_gender(g2)
end
if g and g2 then
table.insert(veri.kategoriler, dil:getirAsilAd() .. " birden fazla cinsiyeti olan sözcükler")
elseif is_masc_sg(g) or is_fem_sg(g) then
if is_masc_sg(g) then
table.insert(veri.kategoriler, dil:getirAsilAd() .. " eril adlar")
elseif is_fem_sg(g) then
table.insert(veri.kategoriler, dil:getirAsilAd() .. " dişil adlar")
end
local bas = ebd(args) or ebd(args)
if bas then
bas = rsub(reorder_shadda(remove_links(bas)), UNU .. "?$", "")
local ends_with_tam = rfind(bas, "^*" .. TAM .. "$") or
rfind(bas, "^*" .. TAM .. " ")
if is_masc_sg(g) and ends_with_tam then
table.insert(veri.kategoriler, dil:getirAsilAd() .. " dişil bitişe sahip eril sözcükler")
elseif is_fem_sg(g) and not ends_with_tam then
table.insert(veri.kategoriler, dil:getirAsilAd() .. " dişil bitişe sahip olmayan dişil sözcükler")
end
end
end
end
-- Part-of-speech functions
soz_fonksiyonlari = {
func = function(args, veri)
handle_all_infl(args, veri, "", "") -- handle cons, def, obl, inf
handle_all_infl(args, veri, "f", "dişil")
handle_all_infl(args, veri, "d", "dişil")
handle_all_infl(args, veri, "i", "ikil")
handle_all_infl(args, veri, "cpl", "genel çoğul")
handle_all_infl(args, veri, "gç", "genel çoğul")
handle_all_infl(args, veri, "pl", "eril çoğulu")
handle_all_infl(args, veri, "ç", "eril çoğulu")
handle_all_infl(args, veri, "fpl", "dişil çoğulu")
handle_all_infl(args, veri, "dç", "dişil çoğulu")
handle_infl(args, veri, "el", "üstünlük")
end
}
function handle_sing_coll_noun_infls(args, veri)
handle_all_infl(args, veri, "", "") -- handle cons, def, obl, inf
handle_all_infl(args, veri, "d", "ikil")
handle_all_infl(args, veri, "pauc", "paucal")
handle_noun_plural(args, veri)
handle_all_infl(args, veri, "pl", "çoğul", "nobase")
handle_all_infl(args, veri, "ç", "çoğul", "nobase")
end
soz_fonksiyonlari = {
func = function(args, veri)
veri.soz_kategorisi = "adlar"
table.insert(veri.kategoriler, dil:getirAsilAd() .. " collective nouns")
table.insert(veri.cekimler, {etiket = "collective"})
handle_gender(args, veri, "m")
-- Handle sing= (the corresponding singulative noun) and singg= (its gender)
handle_infl(args, veri, "sing", "singulative", "f")
handle_sing_coll_noun_infls(args, veri)
end
}
soz_fonksiyonlari = {
func = function(args, veri)
veri.soz_kategorisi = "adlar"
table.insert(veri.kategoriler, dil:getirAsilAd() .. " singulative nouns")
table.insert(veri.cekimler, {etiket = "singulative"})
handle_gender(args, veri, "f")
-- Handle coll= (the corresponding collective noun) and collg= (its gender)
handle_infl(args, veri, "coll", "collective", "m")
handle_sing_coll_noun_infls(args, veri)
end
}
function handle_noun_infls(args, veri, singonly)
handle_all_infl(args, veri, "", "") -- handle cons, def, obl, inf
if not singonly then
handle_all_infl(args, veri, "du", "ikil")
handle_all_infl(args, veri, "i", "ikil")
handle_noun_plural(args, veri)
handle_all_infl(args, veri, "pl", "çoğul", "nobase")
handle_all_infl(args, veri, "ç", "çoğul", "nobase")
end
handle_all_infl(args, veri, "f", "dişil")
handle_all_infl(args, veri, "d", "dişil")
handle_all_infl(args, veri, "m", "eril")
handle_all_infl(args, veri, "e", "eril")
end
soz_fonksiyonlari = {
func = function(args, veri)
handle_gender(args, veri)
handle_noun_infls(args, veri)
end
}
soz_fonksiyonlari = {
func = function(args, veri)
table.insert(veri.kategoriler, dil:getirAsilAd() .. " cardinal numbers")
handle_gender(args, veri)
handle_noun_infls(args, veri)
end
}
soz_fonksiyonlari = {
func = function(args, veri)
handle_gender(args, veri)
handle_noun_infls(args, veri, "singular only")
end
}
soz_fonksiyonlari = {
params = {
= {},
= {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
},
func = function(args, veri)
handle_gender(args, veri)
handle_all_infl(args, veri, "f", "dişil")
end
}
soz_fonksiyonlari = {
params = {
= {},
= {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
= {}, = {}, = {}, = {},
},
func = function(args, veri)
veri.soz_kategorisi = "çekimli adlar"
handle_gender(args, veri, "p")
handle_all_infl(args, veri, "", "") -- handle cons, def, obl, inf
end
}
soz_fonksiyonlari = {
params = {
= {},
= {},
= {},
= { type = boolean },
},
func = function(args, veri)
veri.soz_kategorisi = "adjective forms"
handle_noun_plural(args, veri)
handle_gender(args, veri, "f")
end
}
soz_fonksiyonlari = {
params = {
= {},
= {},
},
func = function(args, veri)
veri.soz_kategorisi = "çekimli adlar"
handle_gender(args, veri, "m-d")
end
}
soz_fonksiyonlari = {
params = {
= {},
= {},
},
func = function(args, veri)
veri.soz_kategorisi = "adjective forms"
handle_gender(args, veri, "m-p")
end
}
soz_fonksiyonlari = {
params = {
= {},
= {},
},
func = function(args, veri)
veri.soz_kategorisi = "adjective forms"
handle_gender(args, veri, "m-d")
end
}
soz_fonksiyonlari = {
params = {
= {},
= {},
},
func = function(args, veri)
handle_gender(args, veri)
end
}
local valid_forms = listeden_ayarla(
{"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII",
"XIII", "XIV", "XV", "Iq", "IIq", "IIIq", "IVq"})
local function handle_conj_form(args, veri)
local form = ebd(args)
if form then
if not valid_forms then
error("Invalid verb conjugation form " .. form)
end
table.insert(veri.cekimler, {etiket = ']'})
end
end
soz_fonksiyonlari = {
params = {
= {},
},
func = function(args, veri)
handle_conj_form(args, veri)
end
}
soz_fonksiyonlari = {
params = {
= {},
},
func = function(args, veri)
veri.soz_kategorisi = "participles"
table.insert(veri.kategoriler, dil:getirAsilAd() .. " active participles")
handle_conj_form(args, veri)
end
}
soz_fonksiyonlari = {
params = {
= {},
},
func = function(args, veri)
veri.soz_kategorisi = "participles"
table.insert(veri.kategoriler, dil:getirAsilAd() .. " passive participles")
handle_conj_form(args, veri)
end
}
return cikart
-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet: