Modül:ca-başlıkbaşı
Görünüm
Bu belgeleme Modül:ca-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:ca-başlıkbaşı/deneme tahtası sayfası kullanılabilir.
Bu Lua modülü, şu şablonların çıktısını vermektedir:
local m_com = require("Modül:ca-araçlar")
local export = {}
local pos_functions = {}
local lang = require("Modül:diller").getirKodaGore("ca")
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
PAGENAME = mw.title.getCurrentTitle().text
local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
local params = {
["baş"] = {list = true, default = ""},
["son"] = {type = "boolean"},
}
if pos_functions[poscat] then
for key, val in pairs(pos_functions[poscat].params) do
params[key] = val
end
end
local args = require("Modül:parameters").process(frame:getParent().args, params)
local veri = {dil = lang, soz_kategorisi = poscat, kategoriler = {}, baslar = args["baş"], cinsiyetler = {}, cekimler = {}}
if args["son"] then
veri.soz_kategorisi = "son ekler"
if poscat == "ön adlar" then
table.insert(veri.kategoriler, lang:getCanonicalName() .. " ön adlar yapan son ekler")
elseif poscat == "belirteçler" then
table.insert(veri.kategoriler, lang:getCanonicalName() .. " belirteç yapan son ekler")
elseif poscat == "adlar" then
table.insert(veri.kategoriler, lang:getCanonicalName() .. " ad yapan son ekler")
elseif poscat == "eylemler" then
table.insert(veri.kategoriler, lang:getCanonicalName() .. " eylem yapan son ekler")
else
error(poscat .. " söz türünü dönüştüren bir son ek mevcut değil.")
end
end
if pos_functions[poscat] then
pos_functions[poscat].func(args, veri)
end
return require("Modül:başlık başı").tam_baslikbasi(veri)
end
-- Display additional inflection information for an adjective
pos_functions["ön adlar"] = {
params = {
[1] = {},
["ç"] = {},
["ç2"] = {},
},
func = function(args, veri)
local feminine = args[1]
local masculine_plural
local masculine_plural2
local feminine_plural
-- Indeclinable/invariable adjectives
if feminine == "ind" or feminine == "inv" then
table.insert(veri.kategoriler, "Katalanca indeclinable adjectives")
table.insert(veri.cekimler, {etiket = "indeclinable"})
else
-- Adjectives with identical forms in the masculine and feminine singular
if feminine == "ed" or feminine == "fm" then
feminine = PAGENAME
table.insert(veri.kategoriler, "Katalanca epicene adjectives")
-- Adjectives ending in -ç or -x behave as mf-type in the singular, but
-- regular type in the plural.
if PAGENAME:find("[çx]$") then
masculine_plural = make_plural(PAGENAME, "e")
feminine_plural = make_plural(PAGENAME .. "a", "d")
else
masculine_plural = make_plural(PAGENAME, "e")
feminine_plural = masculine_plural
end
-- Has anyone provided forms to override the defaults?
masculine_plural = args["ç"] or masculine_plural
feminine_plural = args["ç"] or feminine_plural
masculine_plural2 = args["ç2"] or masculine_plural2
-- Adjectives with distinct masculine and feminine singular forms
-- (the majority)
else
feminine = feminine or make_feminine(PAGENAME)
feminine_plural = make_plural(feminine, "d")
-- If the feminine ends in -ssa, assume that the -ss- is also in the
-- masculine plural form
if feminine:find("ssa$") then
masculine_plural = feminine:gsub("a$", "os")
elseif feminine == PAGENAME .. "na" then
masculine_plural = PAGENAME .. "ns"
-- Adjectives in -ig have two masculine plural forms, one derived from
-- the m.sg. and the other derived from the f.sg.
elseif PAGENAME:find("ig$") then
masculine_plural = PAGENAME .. "s"
masculine_plural2 = feminine:gsub("ja$", "jos")
else
masculine_plural, masculine_plural2 = make_plural(PAGENAME, "e")
end
-- Has anyone provided forms to override the defaults?
masculine_plural = args["ç"] or masculine_plural
masculine_plural2 = args["ç2"] or masculine_plural2
end
-- Display the forms.
-- If masculine and feminine are identical, show m,f as the gender and
-- leave out the feminine.
if feminine ~= PAGENAME then
table.insert(veri.cekimler, {etiket = "feminine", accel = {form = "d|t"}, feminine})
end
-- If the plurals are identical, show only one form as well.
if masculine_plural == feminine_plural then
local infl_parts = {etiket = "masculine and feminine plural", accel = {form = "ç"}}
table.insert(infl_parts, masculine_plural)
if masculine_plural2 then
table.insert(infl_parts, masculine_plural2)
end
table.insert(veri.cekimler, infl_parts)
else
local infl_parts = {etiket = "eril çoğulu", accel = {form = "e|ç"}}
table.insert(infl_parts, masculine_plural)
if masculine_plural2 then
table.insert(infl_parts, masculine_plural2)
end
table.insert(veri.cekimler, infl_parts)
table.insert(veri.cekimler, {etiket = "dişil çoğulu", accel = {form = "d|ç"}, feminine_plural})
end
-- Check for missing forms
if feminine and not mw.title.new(feminine).exists then
table.insert(veri.kategoriler, "Katalanca kırmızı bağlantılı çekimi olan ön adlar")
elseif masculine_plural and not mw.title.new(masculine_plural).exists then
table.insert(veri.kategoriler, "Katalanca kırmızı bağlantılı çekimi olan ön adlar")
elseif masculine_plural2 and not mw.title.new(masculine_plural2).exists then
table.insert(veri.kategoriler, "Katalanca kırmızı bağlantılı çekimi olan ön adlar")
elseif feminine_plural and not mw.title.new(feminine_plural).exists then
table.insert(veri.kategoriler, "Katalanca kırmızı bağlantılı çekimi olan ön adlar")
end
end
end
}
-- Display information for a noun's gender
-- This is separate so that it can also be used for proper nouns
function noun_gender(args, veri)
local gender = args[1]
if gender == "m-p" or gender == "f-p" or gender == "e-ç" or gender == "d-ç" then
table.insert(veri.kategoriler, "Katalanca topluluk adları")
end
if gender == "ed" or gender == "mf" then
table.insert(veri.cinsiyetler, "e")
table.insert(veri.cinsiyetler, "d")
else
table.insert(veri.cinsiyetler, gender)
end
if #veri.cinsiyetler == 0 then
table.insert(veri.cinsiyetler, "?")
end
-- Is this a noun with an unexpected ending (for its gender)?
-- Only check if the term is one word (there are no spaces in the term).
if not PAGENAME:find(" ") then
if PAGENAME:find("a$") and (veri.cinsiyetler[1] == "e" or veri.cinsiyetler[1] == "m") then
table.insert(veri.kategoriler, "Katalanca masculine nouns ending in -a")
elseif not (PAGENAME:find("a$") or PAGENAME:find("ió$") or PAGENAME:find("tat$") or PAGENAME:find("tud$") or PAGENAME:find("[dt]riu$")) and (veri.cinsiyetler[1] == "f" or veri.cinsiyetler[1] == "d") then
table.insert(veri.kategoriler, "Katalanca feminine nouns with no feminine ending")
end
end
end
pos_functions["özel adlar"] = {
params = {
[1] = {},
["c2"] = {},
},
func = function(args, veri)
noun_gender(args, veri)
end
}
-- Display additional inflection information for a noun
pos_functions["adlar"] = {
params = {
[1] = {},
[2] = {},
["ç2"] = {},
["d"] = {},
["e"] = {},
},
func = function(args, veri)
noun_gender(args, veri)
-- Plural
if veri.cinsiyetler[1] == "m-p" or veri.cinsiyetler[1] == "f-p" then
table.insert(veri.cekimler, {etiket = "[[Appendix:Glossary#plural only|plural only]]"})
else
local plural = args[2]
if plural == "-" then
table.insert(veri.cekimler, {etiket = "[[Appendix:Glossary#uncountable|uncountable]]"})
table.insert(veri.kategoriler, "Katalanca uncountable nouns")
else
local infl_parts = {etiket = "çoğul", accel = {form = "p"}}
local plural2 = args["ç2"]
if not plural then
local p, p2 = make_plural(PAGENAME, veri.cinsiyetler[1])
plural = p
plural2 = plural2 or p2
end
table.insert(infl_parts, plural)
if plural2 then
table.insert(infl_parts, plural2)
if not mw.title.new(plural2).exists then
table.insert(veri.kategoriler, "Katalanca kırmızı bağlantılı çoğulu olan adlar")
end
end
if plural and not mw.title.new(plural).exists then
table.insert(veri.kategoriler, "Katalanca kırmızı bağlantılı çoğulu olan adlar")
end
table.insert(veri.cekimler, infl_parts)
end
end
-- Gendered forms
local feminine = args["d"]
local masculine = args["e"]
if feminine then
table.insert(veri.cekimler, {etiket = "feminine", feminine})
end
if masculine then
table.insert(veri.cekimler, {etiket = "masculine", masculine})
end
end
}
-- Display additional inflection information for a verb
pos_functions["eylemler"] = {
params = {
["pres_1_sg"] = {},
["past_part"] = {},
},
func = function(args, veri)
-- Does this verb end in a recognised verb ending (possibly reflexive)?
if not PAGENAME:find(" ") and (PAGENAME:find("re?$") or PAGENAME:find("r%-se$") or PAGENAME:find("re's$")) then
local base = PAGENAME:gsub("r%-se$", "r"):gsub("re's$", "re")
local pres_1_sg
local past_part
-- Generate inflected forms.
-- The 2nd conjugation is generally irregular
-- so generate nothing for that, explicit parameters are required.
-- 1st conjugation
if base:find("ar$") then
local stem = base:gsub("ar$", "")
pres_1_sg = stem .. "o"
past_part = stem .. "at"
-- 3rd conjugation (except -tenir/-venir)
elseif base:find("ir$") and not base:find("[tv]enir$") then
local stem = base:gsub("ir$", "")
pres_1_sg = stem .. "eixo"
if stem:find("[aeiou]$") and not stem:find("[gq]u$") then
past_part = stem .. "ït"
else
past_part = stem .. "it"
end
end
-- Overridden forms
pres_1_sg = {etiket = "first-person singular present", request = true, args["pres_1_sg"] or pres_1_sg}
past_part = {etiket = "past participle", request = true, args["past_part"] or past_part}
table.insert(veri.cekimler, pres_1_sg)
table.insert(veri.cekimler, past_part)
end
end
}
-- Display additional inflection information for a numeral
pos_functions["sayı adları"] = {
params = {
[1] = {},
[2] = {},
},
func = function(args, veri)
local feminine = args[1]
local noun_form = args[2]
if feminine then
table.insert(veri.cinsiyetler, "e")
table.insert(veri.cekimler, {etiket = "dişili", feminine})
if noun_form then
table.insert(veri.cekimler, {etiket = "ad biçimi", noun_form})
end
else
table.insert(veri.cinsiyetler, "e")
table.insert(veri.cinsiyetler, "d")
end
end
}
function make_feminine(base)
-- final vowel -> -a
if base:find("a$") then return base end
if base:find("o$") then return (base:gsub("o$", "a")) end
if base:find("e$") then return m_com.front_to_back(base:gsub("e$", "")) .. "a" end
-- -u -> -va
if base:find("[aeiou]u$") then return (base:gsub("u$", "v") .. "a") end
-- accented vowel -> -na
if mw.ustring.find(base, "[àèéíòóú]$") then return m_com.remove_accents(base) .. "na" end
-- accented vowel + -s -> -sa
if mw.ustring.find(base, "[àèéíòóú]s$") then return m_com.remove_accents(base) .. "a" end
return base .. "a"
end
function make_plural(base, gender)
-- a -> es
if base:find("a$") then return m_com.back_to_front(base:gsub("a$", "")) .. "es", nil end
-- accented vowel -> -ns
if mw.ustring.find(base, "[àèéíòóú]$") then
return m_com.remove_accents(base) .. "ns", nil
end
if gender == "m" or gender == "e" then
if mw.ustring.find(base, "[àèéíòóú]s$") then
return m_com.remove_accents(base) .. "os", nil
end
if base:find("s$") or base:find("ç$") or base:find("x$") or base:find("z$") then
return base .. "os", nil
end
if base:find("sc$") or base:find("st$") or base:find("xt$") then
return base .. "s", base .. "os"
end
end
if gender == "f" or gender == "d" then
if base:find("s$") then return base end
if base:find("sc$") or base:find("st$") or base:find("xt$") then return base .. "s", base .. "es" end
end
return base .. "s", nil
end
return export