Moduł:odmiana-przymiotnik-czeski: Różnice pomiędzy wersjami

Z Wikisłownika – wolnego słownika wielojęzycznego
[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
oszczedniej
wymiana spolglosek w temacie przymiotnikow odmiany twardej (Specjalna:Diff/7503568)
Linia 33: Linia 33:
end
end


function appendHardDeclensionFormsTo( t, stem )
function appendHardDeclensionFormsTo( t, stem, stem2 )
appendHeaderTo( t, false )
appendHeaderTo( t, false )
Linia 41: Linia 41:
:tag( 'td' ):wikitext( stem .. 'á' ):done()
:tag( 'td' ):wikitext( stem .. 'á' ):done()
:tag( 'td' ):wikitext( stem .. 'é' ):done()
:tag( 'td' ):wikitext( stem .. 'é' ):done()
:tag( 'td' ):wikitext( stem .. 'í' ):done()
:tag( 'td' ):wikitext( stem2 .. 'í' ):done()
:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'é' ):done()
:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'é' ):done()
:tag( 'td' ):wikitext( stem .. 'á' ):done()
:tag( 'td' ):wikitext( stem .. 'á' ):done()
Linia 73: Linia 73:
:tag( 'td' ):wikitext( stem .. 'á' ):done()
:tag( 'td' ):wikitext( stem .. 'á' ):done()
:tag( 'td' ):wikitext( stem .. 'é' ):done()
:tag( 'td' ):wikitext( stem .. 'é' ):done()
:tag( 'td' ):wikitext( stem .. 'í' ):done()
:tag( 'td' ):wikitext( stem2 .. 'í' ):done()
:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'é' ):done()
:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'é' ):done()
:tag( 'td' ):wikitext( stem .. 'á' ):done()
:tag( 'td' ):wikitext( stem .. 'á' ):done()
Linia 195: Linia 195:
:tag( 'td' ):wikitext( stem .. 'ým' ):done()
:tag( 'td' ):wikitext( stem .. 'ým' ):done()
:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ými' ):done()
:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ými' ):done()
end

function makeMasculinePluralHardStem( stem )
local last1 = mw.ustring.sub( stem, -1 )
local last2 = mw.ustring.sub( stem, -2 )
if last2 == 'ch' then
return mw.ustring.sub( stem, 1, -3 ) .. 'š'
elseif last1 == 'h' then
return mw.ustring.sub( stem, 1, -2 ) .. 'z'
elseif last2 == 'ck' then
return mw.ustring.sub( stem, 1, -3 ) .. 'čt'
elseif last2 == 'sk' then
return mw.ustring.sub( stem, 1, -3 ) .. 'št'
elseif last1 == 'k' then
return mw.ustring.sub( stem, 1, -2 ) .. 'c'
elseif last1 == 'r' then
return mw.ustring.sub( stem, 1, -2 ) .. 'ř'
else
return stem
end
end
end


Linia 207: Linia 228:
if mw.ustring.sub( base, -1 ) == 'ý' then -- mlad/ý
if mw.ustring.sub( base, -1 ) == 'ý' then -- mlad/ý
local stem = mw.ustring.sub( base, 1, -2 )
local stem = mw.ustring.sub( base, 1, -2 )
local stem2 = makeMasculinePluralHardStem( stem )
appendHardDeclensionFormsTo( t, stem )
appendHardDeclensionFormsTo( t, stem, stem2 )
elseif mw.ustring.sub( base, -1 ) == 'í' then -- jarn/í
elseif mw.ustring.sub( base, -1 ) == 'í' then -- jarn/í
local stem = mw.ustring.sub( base, 1, -2 )
local stem = mw.ustring.sub( base, 1, -2 )

Wersja z 23:46, 17 gru 2020

Moduł wykorzystywany przez szablon {{odmiana-przymiotnik-czeski}}.


function appendHeaderTo( t, mergePlurals )
	local frame = mw.getCurrentFrame()
	local pluralAttrs
	
	if mergePlurals then
		pluralAttrs = { rowspan = 2 }
	else
		pluralAttrs = { colspan = 4 }
	end
	
	t:tag( 'tr' )
		:tag( 'th' ):attr( 'rowspan', 2 ):wikitext( '[[przypadek]]' ):done()
		:tag( 'th' ):attr( 'colspan', 4 ):wikitext( "''liczba pojedyncza''" ):done()
		:tag( 'th' ):attr( pluralAttrs ):wikitext( "''liczba mnoga''" )
	
	local addGenderColumns = function ( row )
		row:tag( 'td' ):addClass( 'forma' ):wikitext(
			frame:expandTemplate{ title = 'm' } .. ' ' .. frame:expandTemplate{ title = 'żw' }
		)
		row:tag( 'td' ):addClass( 'forma' ):wikitext(
			frame:expandTemplate{ title = 'm' } .. ' ' .. frame:expandTemplate{ title = 'nżw' }
		)
		row:tag( 'td' ):addClass( 'forma' ):wikitext( frame:expandTemplate{ title = 'ż' } )
		row:tag( 'td' ):addClass( 'forma' ):wikitext( frame:expandTemplate{ title = 'n' } )
	end
	
	local pluralRow = t:tag( 'tr' )
	addGenderColumns( pluralRow )
	
	if not mergePlurals then
		addGenderColumns( pluralRow )
	end
end

function appendHardDeclensionFormsTo( t, stem, stem2 )
	appendHeaderTo( t, false )
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[mianownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ý' ):done()
		:tag( 'td' ):wikitext( stem .. 'á' ):done()
		:tag( 'td' ):wikitext( stem .. 'é' ):done()
		:tag( 'td' ):wikitext( stem2 .. 'í' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'é' ):done()
		:tag( 'td' ):wikitext( stem .. 'á' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[dopełniacz]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ého' ):done()
		:tag( 'td' ):wikitext( stem .. 'é' ):done()
		:tag( 'td' ):wikitext( stem .. 'ého' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ých' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[celownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ému' ):done()
		:tag( 'td' ):wikitext( stem .. 'é' ):done()
		:tag( 'td' ):wikitext( stem .. 'ému' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ým' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[biernik]]' ):done()
		:tag( 'td' ):wikitext( stem .. 'ého' ):done()
		:tag( 'td' ):wikitext( stem .. 'ý' ):done()
		:tag( 'td' ):wikitext( stem .. 'ou' ):done()
		:tag( 'td' ):wikitext( stem .. 'é' ):done()
		:tag( 'td' ):attr( 'colspan', 3 ):wikitext( stem .. 'é' ):done()
		:tag( 'td' ):wikitext( stem .. 'á' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[wołacz]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ý' ):done()
		:tag( 'td' ):wikitext( stem .. 'á' ):done()
		:tag( 'td' ):wikitext( stem .. 'é' ):done()
		:tag( 'td' ):wikitext( stem2 .. 'í' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'é' ):done()
		:tag( 'td' ):wikitext( stem .. 'á' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[miejscownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ém' ):done()
		:tag( 'td' ):wikitext( stem .. 'é' ):done()
		:tag( 'td' ):wikitext( stem .. 'ém' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ých' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[narzędnik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ým' ):done()
		:tag( 'td' ):wikitext( stem .. 'ou' ):done()
		:tag( 'td' ):wikitext( stem .. 'ým' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ými' ):done()
end

function appendSoftDeclensionFormsTo( t, stem )
	appendHeaderTo( t, true )
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[mianownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'í' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'í' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[dopełniacz]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ího' ):done()
		:tag( 'td' ):wikitext( stem .. 'í' ):done()
		:tag( 'td' ):wikitext( stem .. 'ího' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ích' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[celownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ímu' ):done()
		:tag( 'td' ):wikitext( stem .. 'í' ):done()
		:tag( 'td' ):wikitext( stem .. 'ímu' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ím' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[biernik]]' ):done()
		:tag( 'td' ):wikitext( stem .. 'ího' ):done()
		:tag( 'td' ):attr( 'colspan', 3 ):wikitext( stem .. 'í' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'í' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[wołacz]]' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'í' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'í' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[miejscownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ím' ):done()
		:tag( 'td' ):wikitext( stem .. 'í' ):done()
		:tag( 'td' ):wikitext( stem .. 'ím' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ích' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[narzędnik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ím' ):done()
		:tag( 'td' ):wikitext( stem .. 'í' ):done()
		:tag( 'td' ):wikitext( stem .. 'ím' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ími' ):done()
end

function appendMixedDeclensionFormsTo( t, stem, base )
	appendHeaderTo( t, false )
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[mianownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( base or stem ):done()
		:tag( 'td' ):wikitext( stem .. 'a' ):done()
		:tag( 'td' ):wikitext( stem .. 'o' ):done()
		:tag( 'td' ):wikitext( stem .. 'i' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'y' ):done()
		:tag( 'td' ):wikitext( stem .. 'a' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[dopełniacz]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'a' ):done()
		:tag( 'td' ):wikitext( stem .. 'y' ):done()
		:tag( 'td' ):wikitext( stem .. 'a' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ých' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[celownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'u' ):done()
		:tag( 'td' ):wikitext( stem .. 'ě' ):done()
		:tag( 'td' ):wikitext( stem .. 'u' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ým' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[biernik]]' ):done()
		:tag( 'td' ):wikitext( stem .. 'a' ):done()
		:tag( 'td' ):wikitext( stem ):done()
		:tag( 'td' ):wikitext( stem .. 'u' ):done()
		:tag( 'td' ):wikitext( stem .. 'o' ):done()
		:tag( 'td' ):attr( 'colspan', 3 ):wikitext( stem .. 'y' ):done()
		:tag( 'td' ):wikitext( stem .. 'a' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[wołacz]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem ):done()
		:tag( 'td' ):wikitext( stem .. 'a' ):done()
		:tag( 'td' ):wikitext( stem .. 'o' ):done()
		:tag( 'td' ):wikitext( stem .. 'i' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'y' ):done()
		:tag( 'td' ):wikitext( stem .. 'a' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[miejscownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ě' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ých' ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[narzędnik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( stem .. 'ým' ):done()
		:tag( 'td' ):wikitext( stem .. 'ou' ):done()
		:tag( 'td' ):wikitext( stem .. 'ým' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( stem .. 'ými' ):done()
end

function makeMasculinePluralHardStem( stem )
	local last1 = mw.ustring.sub( stem, -1 )
	local last2 = mw.ustring.sub( stem, -2 )
	
	if last2 == 'ch' then
		return mw.ustring.sub( stem, 1, -3 ) .. 'š'
	elseif last1 == 'h' then
		return mw.ustring.sub( stem, 1, -2 ) .. 'z'
	elseif last2 == 'ck' then
		return mw.ustring.sub( stem, 1, -3 ) .. 'čt'
	elseif last2 == 'sk' then
		return mw.ustring.sub( stem, 1, -3 ) .. 'št'
	elseif last1 == 'k' then
		return mw.ustring.sub( stem, 1, -2 ) .. 'c'
	elseif last1 == 'r' then
		return mw.ustring.sub( stem, 1, -2 ) .. 'ř'
	else
		return stem
	end
end

function main( frame )
	local base = frame.args.base
	local comparative = frame.args.comparative
	
	local t = mw.html.create( 'table' )
	t:addClass( 'wikitable' ):addClass( 'odmiana' ):addClass( 'adj' )
	t:css( 'border', 'none' )
	
	if mw.ustring.sub( base, -1 ) == 'ý' then -- mlad/ý
		local stem = mw.ustring.sub( base, 1, -2 )
		local stem2 = makeMasculinePluralHardStem( stem )
		appendHardDeclensionFormsTo( t, stem, stem2 )
	elseif mw.ustring.sub( base, -1 ) == 'í' then -- jarn/í
		local stem = mw.ustring.sub( base, 1, -2 )
		appendSoftDeclensionFormsTo( t, stem )
	elseif mw.ustring.sub( base, -2 ) == 'ův' then -- otc/ův (otcov)
		local stem = mw.ustring.sub( base, 1, -3 ) .. 'ov'
		appendMixedDeclensionFormsTo( t, stem, base )
	elseif mw.ustring.sub( base, -2 ) == 'in' then -- matčin
		appendMixedDeclensionFormsTo( t, base )
	else
		error( 'nieobsługiwana końcówka przymiotnika', 0 )
	end
	
	if comparative == '' then
		-- no-op
	elseif comparative == 'brak' then
		local innerTable = mw.html.create( 'table' )
		innerTable:addClass( 'wikitable' ):addClass( 'odmiana' ):addClass( 'adj' )
		innerTable:css{ width = '100%', margin = '5px 0 0 0' }
		
		innerTable:tag( 'tr' )
			:tag( 'th' ):attr( 'colspan', 9 )
				:tag( 'strong' ):wikitext( 'nie stopniuje się' )
		
		t:tag( 'tr' )
			:tag( 'td' ):attr( 'colspan', 9 ):css{ padding = 0, border = 'none' }
			:node( innerTable )
	elseif mw.ustring.sub( comparative, -1 ) == 'í' then
		local compTable = mw.html.create( 'table' )
		compTable:addClass( 'wikitable' ):addClass( 'odmiana' ):addClass( 'adj' )
		compTable:addClass( 'collapsible' ):addClass( 'collapsed' )
		compTable:css{ width = '100%', margin = '5px 0 0 0' }
		
		local compLabel = '&nbsp;stopień wyższy <strong>' .. comparative .. '</strong>'
		
		compTable:tag( 'tr' )
			:tag( 'th' ):attr( 'colspan', 9 ):wikitext( compLabel )
		
		local compStem = mw.ustring.sub( comparative, 1, -2 )
		appendSoftDeclensionFormsTo( compTable, compStem )
		
		t:tag( 'tr' )
			:tag( 'td' ):attr( 'colspan', 9 ):css{ padding = 0, border = 'none' }
			:node( compTable )
		
		local supTable = mw.html.create( 'table' )
		supTable:addClass( 'wikitable' ):addClass( 'odmiana' ):addClass( 'adj' )
		supTable:addClass( 'collapsible' ):addClass( 'collapsed' )
		supTable:css{ width = '100%', margin = '5px 0 0 0' }
		
		local superlative = 'nej' .. comparative
		local supLabel = '&nbsp;stopień najwyższy <strong>' .. superlative .. '</strong>'
		
		supTable:tag( 'tr' )
			:tag( 'th' ):attr( 'colspan', 9 ):wikitext( supLabel )
		
		local supStem = mw.ustring.sub( superlative, 1, -2 )
		appendSoftDeclensionFormsTo( supTable, supStem )
		
		t:tag( 'tr' )
			:tag( 'td' ):attr( 'colspan', 9 ):css{ padding = 0, border = 'none' }
			:node( supTable )
	else
		error( 'nielegalny parametr stopnia wyższego', 0 )
	end
	
	local nav = mw.html.create( 'div' )
	nav:addClass( 'NavFrame' ):addClass( 'collapse-odmiana' )
	nav:css( 'display', 'inline' )
	
	nav:tag( 'div' ):addClass( 'NavHead' ):css{
		background = 'transparent',
		[ 'text-align' ] = 'left',
		[ 'padding-right' ] = '55px',
		display = 'inline'
	}
	
	nav:tag( 'div' ):addClass( 'NavContent' ):css{
		[ 'text-align' ] = 'left',
		display = 'inline'
	}:node( t )
	
	return nav
end

return { main = main }