Modul:Vorlage:Taxobox

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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:

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