Uwaga
Serwis Wedariusz jest portalem tematycznym prowadzonym przez Grupę Wedamedia. Aby zostać wedapedystą, czyli Użytkownikiem z prawem do tworzenia i edycji artykułów, wystarczy zarejestrować się na witrynie poprzez złożenie wniosku o utworzenie konta, co można zrobić tutaj. Liczymy na Waszą pomoc oraz wsparcie merytoryczne przy rozwoju także naszych innych serwisów tematycznych.

Moduł:odmiana-przymiotnik-czeski

Z Wedariusz, słownik
Przejdź do nawigacji Przejdź do wyszukiwania

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:odmiana-przymiotnik-czeski/opis

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, stem2 )
	function makeForm( ending )
		local form = stem .. ending
		
		if stem2 and stem2 ~= '' then
			form = form .. '<br>' .. stem2 .. ending
		end
		
		return form
	end
	
	appendHeaderTo( t, true )
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[mianownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( makeForm( 'í' ) ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( makeForm( 'í' ) ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[dopełniacz]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( makeForm( 'ího' ) ):done()
		:tag( 'td' ):wikitext( makeForm( 'í' ) ):done()
		:tag( 'td' ):wikitext( makeForm( 'ího' ) ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( makeForm( 'ích' ) ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[celownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( makeForm( 'ímu' ) ):done()
		:tag( 'td' ):wikitext( makeForm( 'í' ) ):done()
		:tag( 'td' ):wikitext( makeForm( 'ímu' ) ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( makeForm( 'ím' ) ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[biernik]]' ):done()
		:tag( 'td' ):wikitext( makeForm( 'ího' ) ):done()
		:tag( 'td' ):attr( 'colspan', 3 ):wikitext( makeForm( 'í' ) ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( makeForm( 'í' ) ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[wołacz]]' ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( makeForm( 'í' ) ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( makeForm( 'í' ) ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[miejscownik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( makeForm( 'ím' ) ):done()
		:tag( 'td' ):wikitext( makeForm( 'í' ) ):done()
		:tag( 'td' ):wikitext( makeForm( 'ím' ) ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( makeForm( 'ích' ) ):done()
	
	t:tag( 'tr' )
		:tag( 'td' ):addClass( 'forma' ):wikitext( '[[narzędnik]]' ):done()
		:tag( 'td' ):attr( 'colspan', 2 ):wikitext( makeForm( 'ím' ) ):done()
		:tag( 'td' ):wikitext( makeForm( 'í' ) ):done()
		:tag( 'td' ):wikitext( makeForm( 'ím' ) ):done()
		:tag( 'td' ):attr( 'colspan', 4 ):wikitext( makeForm( 'í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 comparative2 = frame.args.comparative2
	
	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>'
		
		if comparative2 ~= '' then
			compLabel = compLabel .. ' / <strong>' .. comparative2 .. '</strong>'
		end
		
		compTable:tag( 'tr' )
			:tag( 'th' ):attr( 'colspan', 9 ):wikitext( compLabel )
		
		local compStem = mw.ustring.sub( comparative, 1, -2 )
		local compStem2 = mw.ustring.sub( comparative2, 1, -2 )
		appendSoftDeclensionFormsTo( compTable, compStem, compStem2 )
		
		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>'
		
		if comparative2 ~= '' then
			supLabel = supLabel .. ' / <strong>nej' .. comparative2 .. '</strong>'
		end
		
		supTable:tag( 'tr' )
			:tag( 'th' ):attr( 'colspan', 9 ):wikitext( supLabel )
		
		local supStem = mw.ustring.sub( superlative, 1, -2 )
		local supStem2 = comparative2 ~= '' and 'nej' .. mw.ustring.sub( comparative2, 1, -2 ) or ''
		appendSoftDeclensionFormsTo( supTable, supStem, supStem2 )
		
		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 }