Doel van de module

bewerken

De module Legallink is vooral bedoeld om de tekst van kopjes om te zetten in een vorm die bruikbaar is voor een link. De module is een bewerking van de module "Replace_All". Voor het omzetten van een kop naar een link zijn (in principe) meerdere vervangingen nodig. Deze module regelt de vervanging van blokhaken en de opmaakcodes <sub> en <sup> in één call.

NOTA BENE

bewerken

Soms wordt een opmaakcode niet vervangen. Het helpt vaak om op de plek waar deze code opgegeven wordt, de hele code te wissen en vervolgens opnieuw in te typen. In de editor die met kleuren werkt is dit soms ook te zien: de code wordt niet in groen aangegeven.

{{#Invoke:Legallink|legal|Te controleren tekst}}

Voorbeeld: Bereken pOH uit [OH-]

bewerken

De koptekst 'Bereken pOH uit [OH-]' is een compleet legale constructie in een kopje. Als je vanuit een andere pagina "paginanaam", of de eigen pagina, naar deze koptekst toe wilt gaan met behulp van een wikilink, krijg je geen link.

[[Paginanaam#Bereken pOH uit [OH<sup>-</sup>]|zoekkop]] geeft: [[Paginanaam#Bereken pOH uit [OH-]|zoekkop]].

Na verwijderen van de opmaakcodes (<sup> en </sup>) krijg je: [[Paginanaam#Bereken pOH uit [OH-]|zoekkop]] resulteert in: [[Paginanaam#Bereken pOH uit [OH-]|zoekkop]].

Pas na vervangen van de blokhaken door gewone haken krijg je het verwachte resultaat:
[[Paginanaam#Bereken pOH uit (OH-)|zoekkop]] geeft: zoekkop



-- Module for creating a legal link. HTML markup codes are removed, "[" is replaced by "(", "]" is replaced by ")"."
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

-- Returns the first parameter, with all occurences of the second parameter replaced with the third parameter.
-- All special characters are ignored: {{#invoke:String2|replace_all|test.a%1$foo|%1|bar}} results in `test.abarfoo`.
function p.legal(frame)
    local r = frame.args[1]
    local r = string.gsub(r, p.escape_pattern("["), p.escape_pattern("("))
    r = string.gsub(r, p.escape_pattern("]"), p.escape_pattern(")"))
    r = string.gsub(r, p.escape_pattern("<sup>"), p.escape_pattern(""))
    r = string.gsub(r, p.escape_pattern("</sup>"), p.escape_pattern(""))
    r = string.gsub(r, p.escape_pattern("<sub>"), p.escape_pattern(""))
    r = string.gsub(r, p.escape_pattern("</sub>"), p.escape_pattern(""))
    return r
end

p['encode wiki page name'] = function( frame )
	local x = mw.ustring.gsub( 
		frame.args[1] or '', 
		'[\'"&_]', 
		{ 
			["'"] = '&#39;', 
			['"'] = '&#34;', 
			['&'] = '&#38;', 
			['_'] = ' ', 
		} 
	)
	return mw.text.trim( x )
end

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