Modul:Genitiv: Forskjell mellom sideversjoner
Hopp til navigering
Hopp til søk
(nå dah...) |
m (26 sideversjoner ble importert) |
||
| (18 mellomliggende versjoner av 9 brukere er ikke vist) | |||
| Linje 2: | Linje 2: | ||
function p.genitiv(frame) |
function p.genitiv(frame) |
||
-- get the argument |
|||
| ⚫ | |||
local |
local ord = frame.args[1] |
||
ord = |
if ord == nil then |
||
| ⚫ | |||
end |
|||
-- check if an argument is found |
|||
if ord == nil then |
if ord == nil then |
||
return "<strong class='error'>Malen «genitiv» må ha ett argument</strong>" |
return "<strong class='error'>Malen «genitiv» må ha ett argument</strong>" |
||
else |
|||
| ⚫ | |||
return pcall(function(ord) str = p._genetiv(ord) end) and str or ord |
|||
end |
end |
||
-- get the determiner |
|||
local det = frame.args['det'] |
|||
if det == nil then |
|||
det = frame:getParent().args['det'] |
|||
end |
|||
-- try to rewrite, but note that this could fail |
|||
local status, str = pcall(function() return p._genitiv(ord, det) end) |
|||
-- rewrite is done, should happen in most cases |
|||
if status == true then |
|||
| ⚫ | |||
end |
|||
-- rewrite is not done, this is a fallback but is probably an error |
|||
| ⚫ | |||
end |
end |
||
function p._genitiv(ord) |
function p._genitiv(ord, det) |
||
sv = "sxzşŝșšśßžżź" |
|||
-- fallback for domain, use determinative for genitive |
|||
| ⚫ | |||
if mw.ustring.find( |
if mw.ustring.find(ord, '^%S%s%S$ ') -- any space |
||
or (det and mw.ustring.find(ord, '%s%l+$') )-- can be a full name |
|||
| ⚫ | |||
then |
|||
return ord .. " " .. (det or "sin") |
|||
end |
|||
-- various overrides where a determinative should be used for genitive |
|||
if mw.ustring.find(ord, '%A$') -- trailing non-letter |
|||
or (det and mw.ustring.find(ord, '%s%l+$') ) -- full name |
|||
or (not mw.ustring.find(ord, '%s') and mw.ustring.find(ord, '^%w+%.%a+$') ) -- url |
|||
then |
|||
return ord .. " " .. (det or "sin") |
|||
end |
end |
||
-- single word, prepare to rewrite special cases |
|||
local sv = "sxzşŝșšśßžżź" -- a few letters that needs special treatment |
|||
| ⚫ | |||
if mw.ustring.find(sv, sb, nil, true) then |
if mw.ustring.find(sv, sb, nil, true) then |
||
-- use modifier letter apostrophe as genitive marker |
|||
| ⚫ | |||
| ⚫ | |||
else |
else |
||
-- just add the 's' genitive marker |
|||
return ord .. "s" |
return ord .. "s" |
||
end |
end |
||
Siste sideversjon per 21. mar. 2024 kl. 21:05
Formål[rediger kilde]
Denne modulen returnerer et ord i riktig genitivsform, avhengig av hvilken bokstav ordet slutter på. Se Mal:Genitiv for nærmere dokumentasjon.
Funksjoner[rediger kilde]
genitiv: Brukes i {{genitiv}}_genitiv: For bruk i andre moduler.
Brukes av[rediger kilde]
local p = {}
function p.genitiv(frame)
-- get the argument
local ord = frame.args[1]
if ord == nil then
ord = frame:getParent().args[1]
end
-- check if an argument is found
if ord == nil then
return "<strong class='error'>Malen «genitiv» må ha ett argument</strong>"
end
-- get the determiner
local det = frame.args['det']
if det == nil then
det = frame:getParent().args['det']
end
-- try to rewrite, but note that this could fail
local status, str = pcall(function() return p._genitiv(ord, det) end)
-- rewrite is done, should happen in most cases
if status == true then
return str
end
-- rewrite is not done, this is a fallback but is probably an error
return ord
end
function p._genitiv(ord, det)
-- fallback for domain, use determinative for genitive
if mw.ustring.find(ord, '^%S%s%S$ ') -- any space
or (det and mw.ustring.find(ord, '%s%l+$') )-- can be a full name
then
return ord .. " " .. (det or "sin")
end
-- various overrides where a determinative should be used for genitive
if mw.ustring.find(ord, '%A$') -- trailing non-letter
or (det and mw.ustring.find(ord, '%s%l+$') ) -- full name
or (not mw.ustring.find(ord, '%s') and mw.ustring.find(ord, '^%w+%.%a+$') ) -- url
then
return ord .. " " .. (det or "sin")
end
-- single word, prepare to rewrite special cases
local sv = "sxzşŝșšśßžżź" -- a few letters that needs special treatment
local sb = mw.ustring.toNFC(mw.ustring.lower(mw.ustring.sub(ord, -1)))
if mw.ustring.find(sv, sb, nil, true) then
-- use modifier letter apostrophe as genitive marker
return ord .. "ʼ"
else
-- just add the 's' genitive marker
return ord .. "s"
end
end
return p