Modül:ar-başlıkbaşı
Görünüm
Bu belgeleme Modül:ar-başlıkbaşı/belge (düzenle | geçmiş) sayfasından yansıtılmaktadır. Arayüz düzenleyicilerinin deney yapabilmeleri için ayrıca Modül:ar-başlıkbaşı/deneme tahtası sayfası kullanılabilir.
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 = "[" .. A .. I .. U .. AN .. IN .. UN .. SK .. DAGGER_ALIF .. "]"
-- bazı harfler ve işaretler
local TAM = u(0x0629) -- tāʾ-i merbūṭa = ة
-- common combinations
local UNU = "[" .. UN .. U .. "]"
------------------------
-- 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[item] = 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[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
local params = {
[1] = {list = "head", allow_holes = true, default = ""},
["head"] = {default = ""},
["tr"] = {list = true, allow_holes = true},
}
local args = frame:getParent().args -- YAPILACAK: Burada [[Modül:parameters]] kullan
-- Parametreleri topla
local veri = {dil = dil, soz_kategorisi = sozkat, kategoriler = {}, baslar = {}, alfabecevler = {}, cinsiyetler = {}, cekimler = { etkin_oto_alfabecev = true }}
local bas = args["head"] or args[1] or ""
local translit = ebd(args["tr"])
local i = 1
local irreg_translit = false
while bas do
table.insert(veri.baslar, bas)
veri.alfabecevler[#veri.baslar] = translit
if ar_translit.irregular_translit(bas, translit) then
irreg_translit = true
end
i = i + 1
bas = ebd(args["head" .. i])
translit = ebd(args["tr" .. i])
end
if irreg_translit then
table.insert(veri.kategoriler, dil:getirAsilAd() .. " terms with irregular pronunciations")
end
if soz_fonksiyonlari[sozkat] then
soz_fonksiyonlari[sozkat].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[argpref])
local translit = ebd(args[argpref .. "ç"])
local cinsiyet = ebd(args[argpref .. "c"])
local cinsiyet2 = ebd(args[argpref .. "c2"])
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[argpref .. i])
translit = ebd(args[argpref .. i .. "ç"])
cinsiyet = ebd(args[argpref .. i .. "c"])
cinsiyet2 = ebd(args[argpref .. i .. "c2"])
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["pl"] == "-" then
table.insert(veri.cekimler, {etiket = "usually [[Appendix:Glossary#uncountable|uncountable]]"})
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[2]) or default
local g2 = ebd(args["g2"])
local function process_gender(g)
if not g then
table.insert(veri.cinsiyetler, "?")
elseif valid_genders[g] 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["head"]) or ebd(args[1])
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["ön adlar"] = {
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["ortak adlar"] = {
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["tekil adlar"] = {
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["adlar"] = {
func = function(args, veri)
handle_gender(args, veri)
handle_noun_infls(args, veri)
end
}
soz_fonksiyonlari["sayılar"] = {
func = function(args, veri)
table.insert(veri.kategoriler, dil:getirAsilAd() .. " cardinal numbers")
handle_gender(args, veri)
handle_noun_infls(args, veri)
end
}
soz_fonksiyonlari["özel adlar"] = {
func = function(args, veri)
handle_gender(args, veri)
handle_noun_infls(args, veri, "singular only")
end
}
soz_fonksiyonlari["adıllar"] = {
params = {
["g"] = {},
["g2"] = {},
["f"] = {}, ["ftr"] = {}, ["fg"] = {}, ["fg2"] = {},
["fcons"] = {}, ["fconstr"] = {}, ["fconsg"] = {}, ["fconsg2"] = {},
["fcons2"] = {}, ["fcons2tr"] = {}, ["fcons2g"] = {}, ["fcons2g2"] = {},
["fcons3"] = {}, ["fcons3tr"] = {}, ["fcons3g"] = {}, ["fcons3g2"] = {},
["fcons4"] = {}, ["fcons4tr"] = {}, ["fcons4g"] = {}, ["fcons4g2"] = {},
["fdef"] = {}, ["fdeftr"] = {}, ["fdefg"] = {}, ["fdefg2"] = {},
["fdef2"] = {}, ["fdef2tr"] = {}, ["fdef2g"] = {}, ["fdef2g2"] = {},
["fdef3"] = {}, ["fdef3tr"] = {}, ["fdef3g"] = {}, ["fdef3g2"] = {},
["fdef4"] = {}, ["fdef4tr"] = {}, ["fdef4g"] = {}, ["fdef4g2"] = {},
["fobl"] = {}, ["fobltr"] = {}, ["foblg"] = {}, ["foblg2"] = {},
["fobl2"] = {}, ["fobl2tr"] = {}, ["fobl2g"] = {}, ["fobl2g2"] = {},
["fobl3"] = {}, ["fobl3tr"] = {}, ["fobl3g"] = {}, ["fobl3g2"] = {},
["fobl4"] = {}, ["fobl4tr"] = {}, ["fobl4g"] = {}, ["fobl4g2"] = {},
["finf"] = {}, ["finftr"] = {}, ["finfg"] = {}, ["finfg2"] = {},
["finf2"] = {}, ["finf2tr"] = {}, ["finf2g"] = {}, ["finf2g2"] = {},
["finf3"] = {}, ["finf3tr"] = {}, ["finf3g"] = {}, ["finf3g2"] = {},
["finf4"] = {}, ["finf4tr"] = {}, ["finf4g"] = {}, ["finf4g2"] = {},
},
func = function(args, veri)
handle_gender(args, veri)
handle_all_infl(args, veri, "f", "dişil")
end
}
soz_fonksiyonlari["çoğul ad formları"] = {
params = {
["g"] = {},
["g2"] = {},
["cons"] = {}, ["constr"] = {}, ["consg"] = {}, ["consg2"] = {},
["cons2"] = {}, ["cons2tr"] = {}, ["cons2g"] = {}, ["cons2g2"] = {},
["cons3"] = {}, ["cons3tr"] = {}, ["cons3g"] = {}, ["cons3g2"] = {},
["cons4"] = {}, ["cons4tr"] = {}, ["cons4g"] = {}, ["cons4g2"] = {},
["def"] = {}, ["deftr"] = {}, ["defg"] = {}, ["defg2"] = {},
["def2"] = {}, ["def2tr"] = {}, ["def2g"] = {}, ["def2g2"] = {},
["def3"] = {}, ["def3tr"] = {}, ["def3g"] = {}, ["def3g2"] = {},
["def4"] = {}, ["def4tr"] = {}, ["def4g"] = {}, ["def4g2"] = {},
["obl"] = {}, ["obltr"] = {}, ["oblg"] = {}, ["oblg2"] = {},
["obl2"] = {}, ["obl2tr"] = {}, ["obl2g"] = {}, ["obl2g2"] = {},
["obl3"] = {}, ["obl3tr"] = {}, ["obl3g"] = {}, ["obl3g2"] = {},
["obl4"] = {}, ["obl4tr"] = {}, ["obl4g"] = {}, ["obl4g2"] = {},
["inf"] = {}, ["inftr"] = {}, ["infg"] = {}, ["infg2"] = {},
["inf2"] = {}, ["inf2tr"] = {}, ["inf2g"] = {}, ["inf2g2"] = {},
["inf3"] = {}, ["inf3tr"] = {}, ["inf3g"] = {}, ["inf3g2"] = {},
["inf4"] = {}, ["inf4tr"] = {}, ["inf4g"] = {}, ["inf4g2"] = {},
},
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["dişil ön ad formları"] = {
params = {
["g"] = {},
["g2"] = {},
["pl"] = {},
["islemma"] = { type = boolean },
},
func = function(args, veri)
veri.soz_kategorisi = "adjective forms"
handle_noun_plural(args, veri)
handle_gender(args, veri, "f")
end
}
soz_fonksiyonlari["ikil ad formları"] = {
params = {
["g"] = {},
["g2"] = {},
},
func = function(args, veri)
veri.soz_kategorisi = "çekimli adlar"
handle_gender(args, veri, "m-d")
end
}
soz_fonksiyonlari["çoğul ön ad formları"] = {
params = {
["g"] = {},
["g2"] = {},
},
func = function(args, veri)
veri.soz_kategorisi = "adjective forms"
handle_gender(args, veri, "m-p")
end
}
soz_fonksiyonlari["ikil ön ad formları"] = {
params = {
["g"] = {},
["g2"] = {},
},
func = function(args, veri)
veri.soz_kategorisi = "adjective forms"
handle_gender(args, veri, "m-d")
end
}
soz_fonksiyonlari["çekimli adlar"] = {
params = {
["g"] = {},
["g2"] = {},
},
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[2])
if form then
if not valid_forms[form] then
error("Invalid verb conjugation form " .. form)
end
table.insert(veri.cekimler, {etiket = '[[Appendix:Arabic verbs#Form ' .. form .. '|form ' .. form .. ']]'})
end
end
soz_fonksiyonlari["eylem formları"] = {
params = {
[2] = {},
},
func = function(args, veri)
handle_conj_form(args, veri)
end
}
soz_fonksiyonlari["ism-i failler"] = {
params = {
[2] = {},
},
func = function(args, veri)
veri.soz_kategorisi = "participles"
table.insert(veri.kategoriler, dil:getirAsilAd() .. " active participles")
handle_conj_form(args, veri)
end
}
soz_fonksiyonlari["ism-i mefuller"] = {
params = {
[2] = {},
},
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: