Naar inhoud springen

Module:Kolommen2Var

Uit Wikibooks

Reden voor het schrijven van deze module

[bewerken]

Kolommen2 (variabel) werkt niet goed met figuren EN tekst in Kol2. Deze module moet dat ondervangen.

Aanroepen van de module

[bewerken]

De module wordt in een sjabloon opgenomen met behulp van onderstaande functie-call:

{{#Invoke:Kolommen2Var|kolom|<af te drukken tekst>|<scheidingscode>|<kolomnummer>|<layout>}}

De cursief weergegeven tekst moet vervangen worden door de te gebruiken tekst en parameters. Zie voor de betekenis van de verschillende parameters en legale waarden in de paragraaf velden.

Velden

[bewerken]
#invoke
Wikicode om aan te geven dat de code in een module op deze plek gebruikt moet worden. Verplichte tekst.
Kolommen2Var
De naam van de te gebruiken module. Verplichte tekst. De naam van de module wordt van het vorige veld gescheiden door een dubbele punt.
kolom
De (momenteel, 21 oktober 2022) enige functie in deze module. Verplichte tekst.
af te drukken tekst
De in de kolom te plaatsen tekst.
scheidingscode
Als de weer te geven tekst op specifieke plaatsen op een nieuwe regel moet beginnen wordt de hier opgegeven code als scheidingsteken gebruikt. De module is uitgetest met de (verouderde!) html-code "<br />".
kolomnummer
De linker en de rechterkolom in het sjabloon Kolommen2 (variabel) hebben verschillende defaultwaarden voor de uitvoer. Deze parameter stuurt deze waarden. Legale waarden zijn: "kol1" en "kol2". Andere waarden leveren geen fout op, maar zullen leiden tot weergave in standaard opmaak.
layout
De standaard waarden voor de lay-out van de kolommen wordt overschreven als deze parameter geladen is. Wordt deze parameter niet geladen dan worden de default-waarden gebruikt zoals die door de kolommen het sjabloon Kolommen2 (variabel) beschreven zijn. De parameter layout kan meerdere velden bevatten. De velden worden van elkaar gescheiden door een spatie. De volgende waarden hebben een betekenis:
left
De tekst wordt links uitgelijnd afgedrukt.
center
De tekst wordt op de regel gecentreerd.
right
De tekst wordt rechts uitgelijnd afgedrukt.
standaard
De tekst wordt met normaal tekengewicht rechtop afgedrukt.
cursief
De tekst wordt met normaal tekengewicht cursief weergegeven.
vet
De tekst wordt vet weergegeven.
vetcursief
De tekst wordt zowel vet als cursief afgedrukt.
De eerste drie opties sluiten elkaar wederzijds uit, evenals de laatste vier. Worden waarden uit dezelfde groep toch gecombineerd gebruikt dan zal de laatste waarde de uitvoer bepalen.



-- Kolommen2 (variable) werkt niet goed met figuren EN tekst in Kol2. Deze module 
-- moet dat ondervangen.
local p = {}

-- Takes one string parameter, and returns the string with all characters with special meaning for Lua patterns escaped with a preceding `%`.
function p.escape_pattern(text)
    -- Replaces each occurence of any of ().%+-*?[^$ with a `%` and then the character.
    local r = string.gsub(text, "[%(%)%.%%%+%-%*%?%[%^%$]", "%%%1")
    return r
end

function p.kolom(frame)
	local testecho = "" -- tracking voor programmaverloop
	local testbool = true
	local bron = tostring(frame.args[1])
	local zoek = tostring(frame.args[2])
	local kolomnr = tostring(frame.args[3])
	local layout = tostring(frame.args[4])
	local lengte_layout = 0
	local tel_layout = 0
	local lengte_zoek = string.len(zoek)
	local lengte_bron = string.len(bron)
--	if (lengte_bron < 1000) then
		local werk_regel  = ""
		local lengte_werk_regel = 0
		local controle = ""
		local lengte_controle = 0
		local bool_controle = false 
		local returnstring = ""
		local Current_teken = ""
		local teller
		local plaatsing =""
		local layout_start = ""
		local layout_einde = ""
		bron = bron .. zoek
		lengte_bron = string.len(bron)
		if kolomnr == "kol1" then -- defaultwaarden
			plaatsing = "left"
			layout_start = ""
			layput_einde = ""
		end	
		if kolomnr == "kol2" then -- defaultwaarden
			plaatsing = "right"
			layout_start = "<b>"
			layout_einde = "</b>"
		end
		if layout == nil then
			layout = ""
		end
		lengte_layout = string.len(layout)
		if lengte_layout > 0 then
			werk_regel  = ""
			layout = layout .. " "
			lengte_layout = string.len(layout)
			teller = 0
			testecho = ""
			while (teller < lengte_layout) do
				teller = teller + 1
				Current_teken = mw.ustring.sub( layout, teller,teller )
				if Current_teken == " " then
					if ((werk_regel == "left") or (werk_regel == "center") or (werk_regel == "right")) then
						plaatsing = werk_regel
						werk_regel = ""
					else
						if werk_regel == "standaard" then
							layout_start = ""
							layout_einde = ""
							werk_regel = ""
						end
						if werk_regel == "cursief" then
							layout_start = "<i>"
							layout_einde = "</i>"
							werk_regel = ""
						end
						if werk_regel == "vet" then
							layout_start = "<b>"
							layout_einde = "</b>"
							werk_regel = ""
						end
						if werk_regel == "vetcursief" then
							layout_start = "<b><i>"
							layout_einde = "</i></b>"
							werk_regel = ""
						end
					end
				else
					werk_regel = werk_regel .. Current_teken
				end
				testecho = testecho .. tostring(teller) .. ": @" .. werk_regel .. "@@" .. plaatsing .."@@" .. layout_start .. "; "
			end
		end
		teller = 0
		werk_regel  = ""
		while (teller < lengte_bron) do
			teller = teller + 1
			Current_teken = mw.ustring.sub( bron, teller,teller )
			if bool_controle then
				if Current_teken == mw.ustring.sub( zoek, lengte_controle+1,lengte_controle+1 ) then
					controle = controle .. Current_teken
					lengte_controle = lengte_controle + 1
					if lengte_controle == lengte_zoek then
						returnstring = returnstring .. "<div align=\"" -- backslash zorgt dat dubbelquote correct gaat
						returnstring = returnstring .. plaatsing
						returnstring = returnstring .. "\">"
						returnstring = returnstring .. layout_start
						returnstring = returnstring .. werk_regel
						returnstring = returnstring .. layout_einde .. "</div>"
						controle = ""
						werk_regel = ""
						lengte_controle = 0
						bool_controle = false
					end
				else -- Current_teken <> sub(zoek)
					werk_regel = werk_regel .. controle .. Current_teken -- verkeerde teken, dus geen regelsplitter
					controle = ""
					lengte_controle = 0
					bool_controle = false
				end
			else -- if bool_controle
				if Current_teken == mw.ustring.sub( zoek, 1, 1 ) then
					controle = Current_teken
					lengte_controle = 1
					bool_controle = true
				else
					werk_regel = werk_regel .. Current_teken
				end
			end
		end
--	else
--		returnstring = bron
--	end 		
	return returnstring -- echt werkende module moet hier returnstring hebben
end

return p
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.