Modul:Vorlage:Taxobox
Bewirkt einen DISPLAYTITLE mit Kursivierung; aber nur unter Bedingungen:
- Nur im ANR, weil mit Namensraumpräfix (Entwicklung im BNR) ohnehin gaga.
- Nur zulässige Werte für DISPLAYTITLE, weil sonst Wartungskat ausgelöst wird.
- Nimmt den
WissName
inklusive Tags und kursiviert diesen. - Ohne
WissName
wird das Lemma genommen und der Teil abzüglich etwaiger Klammer kursiviert. - Auf Wunsch kann eine spezielle Wartungskat für inkompatible Anforderungen geworfen werden.
Demo:
- Taxus (Hecke)
- Taxameter
- Taxpayer (Milchkuh)
- Taxi (Rennschnecke) – keine Kursivierung; nicht deckungsgleich
Vorlage:Taxobox (Dummy)
--[[
Modul mit Hilfsfunktionen für Vorlage:Taxobox
]]
local p = { }
function p.createItalicDisplayTitle(frame)
--[[
Passenden Wert für Funktion DISPLAYTITLE erzeugen.
Parameter:
* wissenschaftlicher Name des Artikeltaxons (Taxon_WissName)
* Lemma (PAGENAME)
Voraussetzungen:
* Lemma entspr. WissName (Paramater Taxon_Name ist leer)
* Lemma und WissName korrespondieren (ggf. bis auf Formatierungs-Tags
beim WissName oder Klammerzusatz beim Lemma)
----------------------------------------------------------------------
NEU 2016-07-24
Aufruf ohne Parameter; einfach in der Infobox einbinden.
* Wenn in der Einbindung der Infobox Taxon_WissName= besetzt wurde,
wird intern der entsprechende Teil vor einem Klammerlemma kusiviert.
]]
local title = mw.title.getCurrentTitle()
if title.namespace == 0 then
local s = frame:getParent().args.Taxon_WissName
local show = title.text
local r, s1, s2
if s == "" then
s = false
end
if s then
local scientific = s:gsub( "'''(.+)'''", "%1" )
:gsub( "''(.+)''", "%1" )
:gsub( " ", " " )
s = scientific:gsub( "(</?%l[^>]*>)", "" )
if mw.ustring.match( s, "^%l" ) then
s1, s2 = mw.ustring.match( show, "^(.)(.+)$" )
show = mw.ustring.lower( s1 ) .. s2
end
if s == show then
r = string.format( "''%s''", scientific )
else
local n = mw.ustring.len( s )
if s == mw.ustring.sub( show, 1, n ) then
r = string.format( "''%s''%s",
scientific,
mw.ustring.sub( show, n + 1 ) )
end
end
else
if show:find( " (", 1, true ) then
s1, s2 = show:match( "^([^%(]+)( %(.*)$" )
if s1 then
r = string.format( "''%s''%s", s1, s2 )
end
else
r = string.format( "''%s''", show )
end
end
if r then
frame:preprocess( string.format( "{{DISPLAYTITLE:%s}}", r ) )
end
end
return ""
end
return p