Moduł:odmiana-przymiotnik-niemiecki
Moduł wykorzystywany przez szablon {{odmiana-przymiotnik-niemiecki}}.
local mergeForms = function ( arr, ending )
local temp = {}
for i, v in ipairs( arr ) do
if v ~= nil then table.insert( temp, v .. ending ) end
end
return table.concat( temp, '/' )
end
function appendMainHeaderTo( t )
local frame = mw.getCurrentFrame()
local moreInfo = '(zob. [[b:Niemiecki/Gramatyka/Deklinacja_przymiotników|deklinacja przymiotnikowa]])'
t:tag( 'tr' )
:tag( 'th' ):attr( 'colspan', 2 )
:tag( 'small' ):wikitext( moreInfo ):done():done()
:tag( 'th' ):attr( 'colspan', 3 ):wikitext( '[[liczba pojedyncza#pl|liczba pojedyncza]]' ):done()
:tag( 'th' ):attr( 'colspan', 1 ):wikitext( '[[liczba mnoga#pl|liczba mnoga]]' ):done()
t:tag( 'tr' )
:tag( 'th' ):wikitext( '[[przypadek#pl|przypadek]]' ):done()
:tag( 'th' ):wikitext( '[[deklinacja#pl|deklinacja]]' ):done()
:tag( 'th' ):wikitext( frame:expandTemplate{ title = 'm' } ):done()
:tag( 'th' ):wikitext( frame:expandTemplate{ title = 'ż' } ):done()
:tag( 'th' ):wikitext( frame:expandTemplate{ title = 'n' } ):done()
:tag( 'th' ):wikitext(
frame:expandTemplate{ title = 'm' } .. ' ' ..
frame:expandTemplate{ title = 'ż' } .. ' ' ..
frame:expandTemplate{ title = 'n' }
):done()
end
function appendNestedHeaderTo( t, title )
local frame = mw.getCurrentFrame()
t:tag( 'tr' )
:tag( 'th' ):attr( 'colspan', 6 ):css( 'font-weight', 'normal' ):wikitext( ' ' .. title ):done()
t:tag( 'tr' )
:tag( 'th' ):attr( 'rowspan', 2 ):wikitext( '[[przypadek#pl|przypadek]]' ):done()
:tag( 'th' ):attr( 'rowspan', 2 ):wikitext( '[[deklinacja#pl|deklinacja]]' ):done()
:tag( 'th' ):attr( 'colspan', 3 ):wikitext( '[[liczba pojedyncza#pl|liczba pojedyncza]]' ):done()
:tag( 'th' ):attr( 'colspan', 1 ):wikitext( '[[liczba mnoga#pl|liczba mnoga]]' ):done()
t:tag( 'tr' )
:tag( 'th' ):wikitext( frame:expandTemplate{ title = 'm' } ):done()
:tag( 'th' ):wikitext( frame:expandTemplate{ title = 'ż' } ):done()
:tag( 'th' ):wikitext( frame:expandTemplate{ title = 'n' } ):done()
:tag( 'th' ):wikitext(
frame:expandTemplate{ title = 'm' } .. ' ' ..
frame:expandTemplate{ title = 'ż' } .. ' ' ..
frame:expandTemplate{ title = 'n' }
):done()
end
function appendDeclensionFormsTo( t, base, isInvariable )
local frame = mw.getCurrentFrame()
local merger = isInvariable and function ( _ ) return mergeForms( base, '' ) end or mergeForms
local makeCell = function ( articles, endings )
return articles[ 1 ] .. ' ' .. merger( base, endings[ 1 ] ) .. '<br>' ..
(#articles > 1 and articles[ 2 ] .. ' ' or '') .. merger( base, endings[ 2 ] ) .. '<br>' ..
merger( base, endings[ 3 ] )
end
local declCell = '[[deklinacja słaba#pl|słaba]]<br>[[deklinacja mieszana#pl|mieszana]]<br>[[deklinacja mocna#pl|mocna]]'
t:tag( 'tr' )
:tag( 'th' ):wikitext( frame:expandTemplate{ title = 'Nom' } ):done()
:tag( 'th' ):wikitext( declCell ):done()
:tag( 'td' ):wikitext( makeCell( { 'der', 'ein' }, { 'e', 'er', 'er' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'die', 'eine' }, { 'e', 'e', 'e' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'das', 'ein' }, { 'e', 'es', 'es' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'die' }, { 'en', 'en', 'e' } ) ):done()
t:tag( 'tr' )
:tag( 'th' ):wikitext( frame:expandTemplate{ title = 'Gen' } ):done()
:tag( 'th' ):wikitext( declCell ):done()
:tag( 'td' ):wikitext( makeCell( { 'des', 'eines' }, { 'en', 'en', 'en' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'der', 'einer' }, { 'en', 'en', 'er' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'des', 'eines' }, { 'en', 'en', 'en' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'der' }, { 'en', 'en', 'er' } ) ):done()
t:tag( 'tr' )
:tag( 'th' ):wikitext( frame:expandTemplate{ title = 'Dat' } ):done()
:tag( 'th' ):wikitext( declCell ):done()
:tag( 'td' ):wikitext( makeCell( { 'dem', 'einem' }, { 'en', 'en', 'em' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'der', 'einer' }, { 'en', 'en', 'er' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'dem', 'einem' }, { 'en', 'en', 'em' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'den' }, { 'en', 'en', 'en' } ) ):done()
t:tag( 'tr' )
:tag( 'th' ):wikitext( frame:expandTemplate{ title = 'Akk' } ):done()
:tag( 'th' ):wikitext( declCell ):done()
:tag( 'td' ):wikitext( makeCell( { 'den', 'einen' }, { 'en', 'en', 'en' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'die', 'eine' }, { 'e', 'e', 'e' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'das', 'ein' }, { 'e', 'es', 'es' } ) ):done()
:tag( 'td' ):wikitext( makeCell( { 'die' }, { 'en', 'en', 'e' } ) ):done()
return t
end
function main( frame )
local pargs = frame:getParent().args
local arg1 = mw.text.trim( pargs[ 1 ] or '' )
local arg2 = mw.text.trim( pargs[ 2 ] or '' )
local arg3 = mw.text.trim( pargs[ 3 ] or '' )
local pos, comp, sup
if arg1 ~= '' and arg2 ~= '' and arg3 ~= '' then -- {{...|pos|comp|sup}}
pos = arg1
comp = arg2
sup = arg3
elseif arg1 ~= '' and arg2 ~= '' and arg3 == '' then -- {{...|comp|sup}}
pos = mw.title.getCurrentTitle().text
comp = arg1
sup = arg2
elseif arg1 ~= '' and arg2 == '' and arg3 == '' then -- {{...|pos}}
pos = arg1
elseif arg1 == '' and arg2 == '' and arg3 == '' then -- {{...}}
pos = mw.title.getCurrentTitle().text
else
error( 'nieprawidłowa kombinacja parametrów stopnia prostego/wyższego/najwyższego', 0 )
end
if mw.ustring.sub( pos, -1 ) == 'e' then
pos = mw.ustring.sub( pos, 1, -2 ) -- trim trailing 'e', if present
end
local comp2, sup2 = pargs.comp2, pargs.sup2
local stopn, temat = pargs.stopn, pargs.temat
local nieodm = pargs.nieodm
local hasRegularCompSup = stopn == 'tak' or stopn == 'reg'
local hasNoCompSup = stopn == 'nie' or stopn == 'brak'
local isInvariable = nieodm == 'tak'
if not hasRegularCompSup and not hasNoCompSup and stopn ~= '' and stopn ~= nil then
error( 'nieprawidłowa wartość parametru "stopn"; obsługiwane: "tak"/"reg", "nie"/"brak"', 0 )
end
if ( comp or sup ) and ( hasRegularCompSup or hasNoCompSup ) then
error( 'nie używaj "stopn", jeżeli osobno wskazano formy stopnia (naj)wyższego', 0 )
end
if not isInvariable and nieodm ~= '' and nieodm ~= nil then
error( 'nieprawidłowa wartość parametru "nieodm"; obsługiwane: "tak"', 0 )
end
if hasRegularCompSup then
comp = ( temat or pos ) .. 'er'
sup = pos .. 'st'
end
local t = mw.html.create( 'table' ):addClass( 'wikitable odmiana adj' ):css{
[ 'text-align' ] = 'center',
border = 'none'
}
appendMainHeaderTo( t )
appendDeclensionFormsTo( t, { temat or pos }, isInvariable )
if hasNoCompSup then
local nested = mw.html.create( 'table' ):addClass( 'wikitable odmiana' ):css{
width = '100%',
margin = '5px 0 0 0',
}
nested:tag( 'tr' ):tag( 'th' ):attr( 'colspan', 6 ):wikitext( ' ' .. "'''nie stopniuje się'''" )
t:tag( 'tr' ):tag( 'td' ):attr( 'colspan', 6 ):css{ padding = 0, border = 'none' }:node( nested )
elseif comp and sup then
local compForms = mergeForms( { comp, comp2 }, '-' )
local compTitle = "stopień wyższy (''[[Komparativ#de|Komparativ]]'') '''" .. compForms .. "'''"
local compNested = mw.html.create( 'table' ):addClass( 'wikitable adj collapsible collapsed' ):css{
width = '100%',
margin = '5px 0 0 0'
}
appendNestedHeaderTo( compNested, compTitle )
appendDeclensionFormsTo( compNested, { comp, comp2 } )
t:tag( 'tr' ):tag( 'td' ):attr( 'colspan', 6 ):css{ padding = 0, border = 'none' }:node( compNested )
local supForms = mergeForms( { sup, sup2 }, '-' )
local supTitle = "stopień najwyższy (''[[Superlativ#de|Superlativ]]'') '''" .. supForms .. "'''"
local supNested = mw.html.create( 'table' ):addClass( 'wikitable adj collapsible collapsed' ):css{
width = '100%',
margin = '5px 0 0 0'
}
appendNestedHeaderTo( supNested, supTitle )
appendDeclensionFormsTo( supNested, { sup, sup2 } )
t:tag( 'tr' ):tag( 'td' ):attr( 'colspan', 6 ):css{ padding = 0, border = 'none' }:node( supNested )
end
local nav = mw.html.create( 'div' ):addClass( 'NavFrame collapse-odmiana' ):css( 'display', 'inline' )
nav:tag( 'div' ):addClass( 'NavHead' ):css{
background = 'transparent',
[ 'text-align' ] = 'left',
[ 'padding-left' ] = '60px',
display = 'inline'
}
nav:tag( 'div' ):addClass( 'NavContent' ):css{
[ 'text-align' ] = 'left',
display = 'inline'
}:node( t )
return nav
end
return { main = main }