Модуль:Taxonomy/classification

Википедия — эркенаб энциклопедия сайталдасан материал

Для документации этого модуля может быть создана страница Модуль:Taxonomy/classification/doc

local p = {}
local Taxonomy_latin = require("Module:Taxonomy/latin")

local Rangs = {
    Osn = "/Домен/Реалм/Пачалъи/Тайпа/БутӀа/Класс/Къокъа/Тартиб/Хъизан/Тухум/НавгӀ/Ихнотухум/ИхнонавгӀ/",
    Prom = "/Субреалм/ГъоркьпачахӀлъи/ТӀадтайпа/ТӀадбутӀа/Гъоркьтайпа/ГъоркьбутӀа/Инфратайпа/ТӀадкласс/Гъоркькласс/Инфракласс/ТӀадкъокъа/ТӀадтартиб/Гъоркькъокъа/Гъоркьтартиб/Инфракъокъа/ТӀадхъизан/Гъоркьхъизан/ТӀадтриба/Триба/Гъоркьтриба/КъотӀел/ГъоркькъотӀел/Гъоркьтухум/ТӀадсекция/Секция/Гъоркьсекция/Кьер/Гъоркь-кьер/НавгӀазул комплекс/ГъоркьнавгӀ/Вариетет/БатӀанавгӀ/ГъоркьбатӀанавгӀ/Форма/Гъоркьформа/ТӀад-домен/",
    Bez = "/Группа/Клада/Ранг гьечӀого/",
    Ich = "/Ихнотухум/ИхнонавгӀ/",
    Err = "'''???'''"
}

local RangColors = {Osn = "inherit", Prom = "#007878", Dop = "DarkRed", Bez = "#6F6F00", Ich = "DarkViolet", Err = "Red"}

local regnum

local function RangClass(rang) -- class=NavContent для сворачивания всех неосновных рангов
    return string.find(Rangs.Osn, "/" .. rang .. "/", 1, true) and "" or "class=NavContent"
end

local function RangString(rang) -- эта функция раскрашивает ранги (то же, что шаблон Rang/color)
    rang = (rang ~= "") and rang or Rangs.Err
    local srang = "/" .. rang .. "/"
    local color = (string.find(Rangs.Ich, srang, 1, true) and RangColors.Ich)
            or (string.find(Rangs.Osn, srang, 1, true) and RangColors.Osn)
            or (string.find(Rangs.Prom, srang, 1, true) and RangColors.Prom)
            or (string.find(Rangs.Bez, srang, 1, true) and RangColors.Bez)
            or ((rang == Rangs.Err) and RangColors.Err)
            or RangColors.Dop
    return '<span style="color:' .. color .. ';">' .. rang .. '</span>'
end

local function NameString(args) -- форматирует название таксона
    local latlink = string.gsub(args.latin, " *|.*", "", 1)
    local latname = string.gsub(args.latin, ".*| *", "", 1)

    latname = "''" .. latname .. "''"

    local name = (args.name ~= "") and args.name or latname
    if (args.monoaut == "") then
        return "[[" .. latlink .. "|" .. name .. "]]"
    else
        local aut = ((args.monoaut == "1") and "")
                    or ((args.name == "") and " " .. Taxonomy_latin.author {args = {args.monoaut}})
                    or " (" .. latname .. " " .. Taxonomy_latin.author {args = {args.monoaut}} .. ")"
        return "'''" .. name .. "'''" .. aut
    end
end

local function TaxString(args, last) -- форматирует строку классификации вида "Ранг: Таксон" (то же что шаблон TaxString)
args.rang = mw.ustring.gsub(args.rang, ".", mw.ustring.upper, 1) -- на всякий случай первую букву делаем прописной
args.monoaut = last and "1" or args.monoaut
return "<div " .. (last and "" or RangClass(args.rang)) .. ">" ..
    "<table width=100% cellpadding=0 cellspacing=0>" ..
    "<tr>" ..
        "<td style='width:40%; text-align:right; vertical-align:top; padding-right:0.3em'>" .. RangString(args.rang) .. ":</td>" ..
        "<td style='width:60%; text-align:left; vertical-align:bottom'>" ..
            ((args.ext ~= "") and "†&nbsp;" or "") ..
            NameString(args) ..
            (args.ref or "") ..
        "</td>" ..
    "</tr></table></div>"
end

local function ErrorText(s)
return '<div style="background-color:Gainsboro;font-size:85%;color:Dimgray">ОШИБКА: ' .. s .. '</div>\n' ..
    ((mw.title.getCurrentTitle().namespace == 0) and "[[Категория:Википедия:Биологияъулал макъалаби таксо-шаблонал гьечӀого]]" or "")
end

local function getTaxPar(frame, taxon, parName)
    return mw.text.trim(frame:expandTemplate({title = taxon, args = {parName}}))
end

function p.TaxRecursion(frame)
    local i = 0
    local args = {}
    local res = ""
    local taxon = frame.args["latin"]
    regnum = frame.args["regnum"]

    if not taxon or (taxon == "") then
        return ErrorText("цӀун гьечӀо параметр '''<big>latin</big>'''.")
    end

    local ok, parent
    local lastTemplate = mw.title.new("Халип:" .. taxon)
    if lastTemplate and lastTemplate.exists then
        ok, parent = pcall(getTaxPar, frame, taxon, "parent")
    end

    if ok then -- есть шаблон {{{latin}}}, берём оттуда
        args = { latin = getTaxPar(frame, taxon, "latin"),
                  rang = getTaxPar(frame, taxon, "rang"),                 
                   ext = getTaxPar(frame, taxon, "ext"),
                  name = getTaxPar(frame, taxon, "name"),
               }
    else -- нет шаблона {{{latin}}}, берём из параметров
        parent = frame.args["parent"] or ""
        args = { latin = frame.args["latin"],
                  rang = frame.args["rang"] or "",
                   ext = frame.args["Хвана"] or "",
                  name = frame.args["name"] or "",
               }
        if (parent == "") then
            return ErrorText("гьечӀо [[Халип:Таксон#Таксономияб навигациялъул система|таксономияб шаблоналъул]] {{[[Халип:" .. taxon .. "|" .. taxon .. "]]}}. ЦӀезаре параметрал '''<big>parent</big>''' и '''<big>rang</big>'''.")
        end
    end

    res = TaxString(args, "last")

    local taxlist = {}
    while (parent ~= "Null") and (i < 100) do
        i = i + 1
        taxon = parent
        taxlist[taxon] = true
        ok, parent = pcall(getTaxPar, frame, taxon, "parent")
        if not ok then -- error: no template
            res = ErrorText("гьечӀо [[Халип:Таксон#Таксономияб навигациялъул система|таксономияб шаблоналъул]] {{[[Халип:" .. taxon .. "|" .. taxon .. "]]}}, жинца таксоналъул систематикиб бакӀалъе сипат-сурат гьабулеб ''[[" .. taxon .. "]]''.") .. res
            break
        end
        if taxlist[parent] then -- error: loop
            res = ErrorText("батанаа петля — [[Халип:Таксон#Таксономияб навигациялъул система|таксономияб шаблоналъул]] {{[[Халип:" .. taxon .. "|" .. taxon .. "]]}} регӀел гьабулеб буго жидаго гъоркь бугеб таксоналде.") .. res
            ok = false
            break
        end
        args = {   latin = getTaxPar(frame, taxon, "latin"),
                    rang = getTaxPar(frame, taxon, "rang"),
                     ext = getTaxPar(frame, taxon, "ext"),
                    name = getTaxPar(frame, taxon, "name"),
                 monoaut = getTaxPar(frame, taxon, "monoaut"),
                     ref = getTaxPar(frame, taxon, "ref"),
               }
        args.ref = (args.ref ~= "") and frame:extensionTag {name = "ref", content = args.ref}
        res = TaxString(args) .. res
    end

    return '<div class="NavFrame' .. (ok and ' collapsed' or '') .. '" style="background-color: transparent; border:0;">' ..
        (ok and string.find(res, "NavContent", 1, true)
            and '<div class="NavHead nomobile" style="background-color: transparent; border:0;"><small style="display:block; margin-bottom:-15px;">гъоркьохъел рангал</small></div>'
            or ''
        ) .. res .. '</div>'
end

return p