Module:Kolommen2Var
Uiterlijk
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>}}
- {{#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