Zum Inhalt springen

Modul:Vorlage:GRIN

Aus Wikipedia

Die Dokumentation für dieses Modul kann unter Modul:Vorlage:GRIN/Doku erstellt werden

--[[
Modul für Hilfsfunktionen für Vorlage:GRIN
]]
TAG_ITALIC_START = '<span style="font-style:italic;">'
TAG_ITALIC_END = '</span>'

local p = { }

function p.formatScientificName(frame)
--[[
    Formatierung der wissenschaftlichen Namen für Taxa, die bei GRIN geführt werden. Dabei werden die pseudolateinischen Bestandteile für Ränge <= Gattung kursiv gesetzt.
    Parameter:
    * Rang (mögliche Ausprägungen siehe Vorlagendok.)
    * Unfomrmatierter wissenschaftlicher Name wie auf der GRIN-Seite angegeben, allerdings ohne Autorenangaben
]]
    local rank = mw.ustring.lower(frame.args[1])
    local sciname_pure = mw.ustring.gsub(frame.args[2], "''", "") -- Eventuelle Eigenformatierungen sicherheitshalber entfernen

    local sciname_parts = mw.text.split(sciname_pure, "%s")

    --  Nicht kursivzusetzende Ränge
    local tab_ranks_regular = {["family"] = true
                             , ["subfamily"] = true
                             , ["tribe"] = true
                             , ["subtribe"] = true
                             }

    local hybrid_prefix = "×" -- Kennzeichnung von Hybriden. Das Hybridzeichen sollte nicht Kursiv gesetzt werden. 
                              -- Die Abhandlung ist allerdings Placebo, da die Darstellung kursiv gesetzter Malzeichen sich nicht von regulären unterscheidet.

    if tab_ranks_regular[rank] then
        return sciname_pure -- keine Kursivsetzung
    end

    for key, part in ipairs(sciname_parts) do
        local first_char = mw.ustring.sub(part, 1, 1)
        if first_char == hybrid_prefix then 
            part = mw.ustring.sub(part, 2)
        end

        if mw.ustring.match(part, "%W") == nil then -- kein Nicht-Alpha-Zeichen im String (i.d.R. abschießender Punkt)
            part = TAG_ITALIC_START .. part .. TAG_ITALIC_END
            if first_char ==  hybrid_prefix then
                part = first_char .. part -- Hybridzeichen wieder davor
            end
            sciname_parts[key]=part
        end
    end

    local sciname_formatted = table.concat(sciname_parts, " ") -- wieder zusammensetzen

    return sciname_formatted
end

return p