Dokumentation för denna modul finns på /dok (redigera), /test


Syfte

Denna modul används endast av mallen {{avledning}}. Modulen producerar wikitext för definitionsraden i enlighet med {{avledning}}:s dokumentation. Texten börjar med ett blanksteg.

Användning

{{#invoke:avledning|getWikitext}}

Modulen läser av argumenten direkt från {{avledning}}-anropet på sidan med uppslaget.

Specifikation

Grundläggande wikitext som returneras: ''avledning till [[ord#Språk|ord]]''
1= språkkod (obligatorisk)
Språkkoden används för att:
  • lägga till en ankare i länken, t.ex. [[ursprungsordet#Svenska|ursprungsordet]]
  • ge extra funktionalitet för svenska partikelverb genom parametern partikel=
  • avlägsna dekorationer ovanför bokstäver för länken men inte i visad form för vissa språk (latin, ryska, men ej svenska)
2= ursprungsordet (obligatorisk, får innehålla dekorationer ovanför bokstäver)
3= kortformen av ursprungsordets ordklass (frivillig, ej tillsammans med "ordform=")
Ordklassen används i huvudsak för förtydligande, t.ex. om ursprungsordet delar stavning med det aktuella ordet, t.ex. substantivet resande som är en avledning till adjektivet resande. Enbart tre stycken är tillåtna: "adj", "verb", "subst"
ordform= det aktuella ordets form dvs relation till grundformen (frivillig, ej tillsammans med "3=")
Ändrar formuleringen: från "avledning till" till en mer specifik beskrivning. Giltiga värden:
prespart -> "presensparticip av" (också för "gerund" AKA "present participle" i engelskan)
perfpart -> "perfektparticip av"
Former som används i esperanto och ido:
aktpart (kreinta, kreanta, kreonta, kreinto, kreanto, kreonto)
passpart (kreita, kreata, kreota, kreito, kreato, kreoto)
Former som används i slaviska språk:
prespartakt -> "presensparticip aktiv av" (också finska)
prespartpass -> "presensparticip passiv av" (också finska)
pretpartakt -> "preteritumparticip aktiv av"
pretpartpass -> "preteritumparticip passiv av"
presger -> "presensgerundium"
pretger -> "preteritumgerundium"
Former som används i finska:
prespartakt -> presensparticip aktiv av (också slaviska)
prespartpass -> presensparticip passiv av (också slaviska)
perfpartakt -> perfektparticip aktiv av
perfpartpass -> perfektparticip passiv av
agentpart -> agentparticip av
agentpart1ps -> agentparticip (1:a person singular) av
agentpart2ps -> agentparticip (2:a person singular) av
agentpart1pp -> agentparticip (1:a person plural) av
agentpart2pp -> agentparticip (2:a person plural) av
agentpart3p -> agentparticip (3:je person) av
nekpart -> nekande particip av
partikel= partikel (endast svenska, endast partikelverb)
För partikelverb, t.ex. "slå upp" ska endast verbdelen anges på 2, dvs. 2=slå, och partikeln ska anges för partikel, dvs. partikel=upp. Detta ändrar i detta exempel formuleringen: från "perfektparticip/presensparticip av slå upp" till "perfektparticip/presensparticip av slå upp och uppslå".
När verbet i ett partikelverb (t.ex laga i laga till) börjar på samma bokstav som partikeln (till) slutar på (med dubbelkonsonant), så bildas när de byter plats och slås ihop en trippelkonsonant: laga + till > till + laga > tilllaga. I detta fall kompenseras detta och den överflödiga konsonanten plockas bort > tillaga.

Syntaxfel

  • ogiltiga parametrar
  • uppenbarligen ogiltig språkkod
  • okänd språkkod
  • 2= (grundform) saknas
  • okänt värde i 3= eller ordform=
  • både ordform= och 3= används
  • Kategori:Wiktionary:Syntaxfel/avledning (0)

Tester

All tests passed. (refresh)

Text Expected Actual
test01_basic:
Passed {{avledning|sv|snabb}} ''avledning till'' [[snabb#Svenska|snabb]] ''avledning till'' [[snabb#Svenska|snabb]]
Passed {{avledning|sv|snabb|adj}} ''avledning till adjektivet'' [[snabb#Svenska|snabb]] ''avledning till adjektivet'' [[snabb#Svenska|snabb]]
Passed {{avledning|en|glad}} ''avledning till'' [[glad#Engelska|glad]] ''avledning till'' [[glad#Engelska|glad]]
Passed {{avledning|--|glad}} ''avledning till'' [[glad#Tvärspråkligt|glad]] ''avledning till'' [[glad#Tvärspråkligt|glad]]
Text Expected Actual
test02_present_participle:
Passed {{avledning|sv|gå|ordform=prespart}} ''presensparticip av'' [[gå#Svenska|gå]] ''presensparticip av'' [[gå#Svenska|gå]]
Passed {{avledning|sv|gå|prespart}} ''presensparticip av'' [[gå#Svenska|gå]] ''presensparticip av'' [[gå#Svenska|gå]]
Passed {{avledning|en|walk|ordform=prespart}} ''presensparticip av'' [[walk#Engelska|walk]] ''presensparticip av'' [[walk#Engelska|walk]]
Passed {{avledning|en|walk|prespart}} ''presensparticip av'' [[walk#Engelska|walk]] ''presensparticip av'' [[walk#Engelska|walk]]
Text Expected Actual
test03_past_participle:
Passed {{avledning|sv|gå|ordform=perfpart}} ''perfektparticip av'' [[gå#Svenska|gå]] ''perfektparticip av'' [[gå#Svenska|gå]]
Passed {{avledning|en|do|ordform=perfpart}} ''perfektparticip av'' [[do#Engelska|do]] ''perfektparticip av'' [[do#Engelska|do]]
Text Expected Actual
test04_active_participle:
Passed {{avledning|io|dansar|ordform=aktpart}} ''aktivparticip av'' [[dansar#Ido|dansar]] ''aktivparticip av'' [[dansar#Ido|dansar]]
Passed {{avledning|eo|fari|ordform=aktpart}} ''aktivparticip av'' [[fari#Esperanto|fari]] ''aktivparticip av'' [[fari#Esperanto|fari]]
Text Expected Actual
test05_passive_participle:
Passed {{avledning|io|dansar|ordform=passpart}} ''passivparticip av'' [[dansar#Ido|dansar]] ''passivparticip av'' [[dansar#Ido|dansar]]
Passed {{avledning|eo|fari|ordform=passpart}} ''passivparticip av'' [[fari#Esperanto|fari]] ''passivparticip av'' [[fari#Esperanto|fari]]
Text Expected Actual
test06_swedish_phrasal_verb:
Passed {{avledning|sv|gå|ordform=prespart|partikel=upp}} ''presensparticip av'' [[gå upp#Svenska|gå upp]] ''och'' [[uppgå#Svenska|uppgå]] ''presensparticip av'' [[gå upp#Svenska|gå upp]] ''och'' [[uppgå#Svenska|uppgå]]
Passed {{avledning|sv|laga|ordform=perfpart|partikel=till}} ''perfektparticip av'' [[laga till#Svenska|laga till]] ''och'' [[tillaga#Svenska|tillaga]] ''perfektparticip av'' [[laga till#Svenska|laga till]] ''och'' [[tillaga#Svenska|tillaga]]
Text Expected Actual
test07_slavic_verbs:
Passed {{avledning|ru|читать|ordform=prespartakt}} ''presensparticip aktiv av'' [[читать#Ryska|читать]] ''presensparticip aktiv av'' [[читать#Ryska|читать]]
Passed {{avledning|ru|читать|ordform=prespartpass}} ''presensparticip passiv av'' [[читать#Ryska|читать]] ''presensparticip passiv av'' [[читать#Ryska|читать]]
Passed {{avledning|ru|читать|ordform=pretpartakt}} ''preteritumparticip aktiv av'' [[читать#Ryska|читать]] ''preteritumparticip aktiv av'' [[читать#Ryska|читать]]
Passed {{avledning|ru|читать|ordform=pretpartpass}} ''preteritumparticip passiv av'' [[читать#Ryska|читать]] ''preteritumparticip passiv av'' [[читать#Ryska|читать]]
Passed {{avledning|ru|читать|ordform=presger}} ''presensgerundium av'' [[читать#Ryska|читать]] ''presensgerundium av'' [[читать#Ryska|читать]]
Passed {{avledning|ru|читать|ordform=pretger}} ''preteritumgerundium av'' [[читать#Ryska|читать]] ''preteritumgerundium av'' [[читать#Ryska|читать]]
Text Expected Actual
test08_finish_verbs:
Passed {{avledning|fi|banaalistaa|ordform=nekpart}} ''nekande particip av'' [[banaalistaa#Finska|banaalistaa]] ''nekande particip av'' [[banaalistaa#Finska|banaalistaa]]
Passed {{avledning|fi|banaalistaa|nekpart}} ''nekande particip av'' [[banaalistaa#Finska|banaalistaa]] ''nekande particip av'' [[banaalistaa#Finska|banaalistaa]]
Text Expected Actual
test09_bad_syntax_unknown_language:
Passed {{avledning|xyz|snabb}} ''avledning till'' [[snabb#Okänt språk|snabb]][[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (4)]] ''avledning till'' [[snabb#Okänt språk|snabb]][[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (4)]]
Passed {{avledning|xx|snabb}} ''avledning till'' [[snabb#Okänt språk|snabb]][[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (4)]] ''avledning till'' [[snabb#Okänt språk|snabb]][[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (4)]]
Passed {{avledning|h-smi|snabb}} ''avledning till'' [[snabb#Okänt språk|snabb]][[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (4)]] ''avledning till'' [[snabb#Okänt språk|snabb]][[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (4)]]
Passed {{avledning|Sv|snabb}} ''avledning till'' [[snabb#Okänt språk|snabb]][[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (4)]] ''avledning till'' [[snabb#Okänt språk|snabb]][[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (4)]]
Text Expected Actual
test10_bad_syntax_empty_original_word:
Passed {{avledning|sv|ordform=prespart}} [[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (5)]] [[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (5)]]
Text Expected Actual
test11_bad_syntax_unknown_type_or_word_class:
Passed {{avledning|en|I|ordform=pronounenhancement}} [[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (6)]] [[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (6)]]
Passed {{avledning|en|I|pron}} [[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (6)]] [[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (6)]]
Text Expected Actual
test12_bad_syntax_both_word_class_and_type:
Passed {{avledning|en|I|pron|ordform=perfpart}} [[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (8)]] [[Kategori:Wiktionary:Syntaxfel/avledning]][[Kategori:Wiktionary:Syntaxfel/avledning (8)]]
Text Expected Actual
test13_link_to_language_specific_adjusted_entry_name:
Passed {{avledning|ru|избра́ть|ordform=pretpartpass}} ''preteritumparticip passiv av'' [[избрать#Ryska|избра́ть]] ''preteritumparticip passiv av'' [[избрать#Ryska|избра́ть]]


-- Error codes:
-- 1 internal
-- 2 unknown params (NOT yet)
-- 3 invalid lk (NOT yet)
-- 4 unknown lk
-- 5 base form empty
-- 6 unknown word class or unknown type in "3="" or "ordform="
-- 7 form not allowed for given langunage (NOT yet)
-- 8 both"3=" and "ordform=" fed in

local lang = require("Modul:lang")
local h3 = require("Modul:h3")

local export = {}

local function joinAndRemoveTrippleConsonant(part_1, part_2)
	local joined
	if part_1:sub(-2) ~= part_2:sub(1,1):rep(2) then
 		joined = part_1 .. part_2
 	else
 		joined = part_1:sub(1,-2) .. part_2 -- i.e. till + laga = tillaga (not tilllaga)
	end
	return joined
end

function export.getWikitext(frame)
	local error_code    = 0
	local parent        = frame:getParent()
	local title         = mw.title.getCurrentTitle()
	local is_test       = title.rootText == "avledning" and title.nsText == "Modul"
	local lang_code     = parent.args[1] or ""
	local original_word = parent.args[2] or ""
	local class_or_form = parent.args[3] or parent.args["ordform"] or "" -- word class or word form
	local particle      = parent.args["partikel"] or ""

	if (parent.args["ordform"] and parent.args[3]) then -- "ordform=" is deprecated
		error_code = 8
	end

	local default_descri = "avledning till"

	local word_classes = {["adj"]=true,["verb"]=true,["subst"]=true} -- "adj" much used, "verb" and "subst" very rarely

	local first_parts = {
		perfpart		= {"perfektparticip av"},
		prespart		= {"presensparticip av"},
		aktpart 		= {"aktivparticip av","P","eo","io"},
		passpart		= {"passivparticip av","P","eo","io"},
		prespartakt		= {"presensparticip aktiv av"}, -- slaviska + fi
		prespartpass	= {"presensparticip passiv av"}, -- slaviska + fi
		pretpartakt		= {"preteritumparticip aktiv av"}, -- slaviska
		pretpartpass	= {"preteritumparticip passiv av"}, -- slaviska
		presger			= {"presensgerundium av"}, -- slaviska
		pretger			= {"preteritumgerundium av"}, -- slaviska
		perfpartakt		= {"perfektparticip aktiv av","P","fi"},
		perfpartpass	= {"perfektparticip passiv av","P","fi"},
		agentpart       = {"agentparticip av","P","fi"},
		agentpart1ps    = {"agentparticip (1:a person singular) av","P","fi"},
		agentpart2ps    = {"agentparticip (2:a person singular) av","P","fi"},
		agentpart1pp    = {"agentparticip (1:a person plural) av","P","fi"},
		agentpart2pp    = {"agentparticip (2:a person plural) av","P","fi"},
		agentpart3p     = {"agentparticip (3:je person) av","P","fi"},
		nekpart         = {"nekande particip av","P","fi"}
	}

	local language = lang.getLanguageUCFirst(lang_code)

	if (error_code==0) and (not lang.hasLanguage(lang_code)) then
		error_code = 4
	end

	local first_part_tab = {}
	local word_form      = ''
	local first_part     = default_descri -- will get overidden if we get a word form
	local second_part    = ''
	local third_part     = ''
	local p_or_n         = ''
	local got_word_class = false
	local got_word_form  = false

	if (word_classes[class_or_form]) then -- got second part (first remains default)
		got_word_class = true
		second_part = h3.getLongDetSing(class_or_form) -- else keep it empty
	end--if

	first_part_tab = first_parts[class_or_form] -- change first part (later skip second part word class)
	if type(first_part_tab)=='table' then
		if type(first_part_tab[1])~='string' then
			error_code = 1
		else
			got_word_form = true
			first_part = first_part_tab[1]
			p_or_n = first_part_tab[2]
		end--if
	end--if

	if (error_code==0) and (class_or_form~='') and (not got_word_class) and (not got_word_form) then
		error_code = 6 -- unknown word class or unknown type of form
	end--if

	if particle ~= "" and lang_code == "sv" then
		local original_word_1 = mw.ustring.format("%s %s", original_word, particle)
		local original_word_2 = joinAndRemoveTrippleConsonant(particle, original_word)
		local entry_name_1 = original_word_1
		local entry_name_2 = original_word_2
		local third_part_1 = mw.ustring.format("[[%s#%s|%s]]", entry_name_1, language, original_word_1) 
		local third_part_2 = mw.ustring.format("[[%s#%s|%s]]", entry_name_2, language, original_word_2)
		third_part = mw.ustring.format("%s ''och'' %s", third_part_1, third_part_2)
	else
		local entry_name = lang.getEntryName(lang_code, original_word)
		third_part = mw.ustring.format("[[%s#%s|%s]]", entry_name, language, original_word)
	end
	
	local full_text
	if got_word_class then
		full_text = mw.ustring.format(" ''%s %s'' %s", first_part, second_part, third_part)
	else
		full_text = mw.ustring.format(" ''%s'' %s", first_part, third_part)
	end

	if (original_word=='') and (error_code==0) then
		error_code = 5
	end

	if (error_code~=0) and (error_code~=4) then
		full_text = ''
	end--if

	if title:inNamespace(0) or is_test then
		if (error_code~=0) then
			full_text = full_text .. "[[Kategori:Wiktionary:Syntaxfel/avledning]]" .. "[[Kategori:Wiktionary:Syntaxfel/avledning (" .. tostring(error_code) .. ")]]" 
		end
	end

	return full_text
end

return export