Модул:Taxonomy/classification

Ҳуҷҷатгузорӣ
local p = {}local Taxonomy_latin = require("Module:Taxonomy/latin")local Rangs = { --классификация рангов    Osn = "/Домен/Реалм/Царство/Тип/Отдел/Класс/Отряд/Порядок/Семейство/Род/Вид/Ихнород/Ихновид/", --основные    Prom = "/Субреалм/Подцарство/Надтип/Надотдел/Подтип/Подотдел/Инфратип/Надкласс/Подкласс/Инфракласс/Надотряд/Надпорядок/Подотряд/Подпорядок/Инфраотряд/Надсемейство/Подсемейство/Надтриба/Триба/Подтриба/Раздел/Подраздел/Подрод/Надсекция/Секция/Подсекция/Ряд/Подряд/Комплекс видов/Подвид/Вариетет/Разновидность/Подразновидность/Форма/Подформа/Наддомен/", --промежуточные    Bez = "/Группа/Клада/Без ранга/",    Ich = "/Ихнород/Ихновид/", --ихнотаксоны    Err = "'''???'''", --в случае, если ранг не заполнен    Spec = "/Вид/Подвид/Вариетет/Разновидность/Подразновидность/Форма/Подформа/Ихновид/Штамм/Биовар/Биотип/Cеровар/Серотип/Изолят/" --вид и ниже}local RangColors = {Osn = "inherit", Prom = "#007878", Dop = "DarkRed", Bez = "#6F6F00", Ich = "DarkViolet", Err = "Red"}local regnumlocal function RangClass(rang) -- class=NavContent для сворачивания всех неосновных рангов    return (string.find(Rangs.Osn, "/" .. rang .. "/", 1, true) or (rang == Rangs.Err)) and "" or "class=NavContent"endlocal function RangColor(rang) -- эта функция возвращает цвет ранга (то же, что шаблон Rang/color)    local srang = "/" .. rang .. "/"    return (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.Dopendlocal function NameString(args, last) -- форматирует название таксона    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 last then        return "'''" .. name .. "'''"    elseif (args.monoaut == "") then        return "[[" .. latlink .. "|" .. name .. "]]"    else        local aut = (args.monoaut == "1") and "" or " " .. Taxonomy_latin.author {args = {args.monoaut}}        if args.name == "" then            return "'''" .. name .. "'''" .. aut        else            return "'''" .. name .. "'''" .. " (" .. latname .. aut .. ")"        end    endendlocal function TaxString(args, last) -- форматирует строку классификации вида "Ранг: Таксон" (то же что шаблон TaxString)args.rang = mw.ustring.gsub(args.rang, ".", mw.ustring.upper, 1) -- на всякий случай первую букву делаем прописнойlocal rang = (args.rang ~= "") and args.rang or Rangs.Errreturn "<div " .. (last and "" or RangClass(rang)) .. ">" ..    "<table width=100% cellpadding=0 cellspacing=0>" ..    "<tr>" ..        "<td class='ts-Taxonomy-rang-label' style='color:" .. RangColor(rang) .. "'>" .. rang .. ":</td>" ..        "<td class='ts-Taxonomy-rang-name'>" ..            ((args.ext ~= "") and "†&nbsp;" or "") ..            NameString(args, last) ..            (args.ref or "") ..        "</td>" ..    "</tr></table></div>"endlocal function NoTaxTempl(taxon)return '[[Шаблон:Таксон#Сомонаи новбарии орояшинохтӣ|шаблони орояшинохтӣ]] нест' ..    mw.getCurrentFrame():expandTemplate({title = 'RedTaxLink', args = {taxon}})endlocal function ErrorText(text)return '<div style="background-color:Gainsboro;font-size:85%;color:Dimgray">ХАТО: ' .. text .. '</div>\n' ..    ((mw.title.getCurrentTitle().namespace == 0) and "[[Гурӯҳ:Википедия:Мақолаҳои зистшинохтӣ бидуни таксошаблон]]" or "")endlocal function FormatOutput(text, ok)return '<div class="NavFrame' .. (ok and ' collapsed' or '') .. '" style="background-color: transparent; border:0;">' ..        (ok and string.find(text, "NavContent", 1, true)            and '<div class="NavHead nomobile" style="background-color: transparent; border:0;"><small style="display:block; margin-bottom:-15px;">рутбаҳои мобайнӣ</small></div>'            or ''        ) .. text .. '</div>'endlocal function getTaxPar(frame, taxon, parName)    return mw.text.trim(frame:expandTemplate({title = taxon, args = {parName}}))endfunction p.TaxRecursion(frame)    local i = 0    local args = {}    local res = ""    local taxon = frame.args["latin"] or ""    regnum = frame.args["regnum"]    if (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            if ((args.rang == "") or string.find(Rangs.Spec, "/" .. args.rang .. "/", 1, true)) then                res = ErrorText("Параметрҳои '''<big>parent</big>''' ва '''<big>rang</big>'''ро бояд пур кунед.")            else                res = ErrorText(NoTaxTempl(taxon) .. ". Параметрҳои '''<big>parent</big>''' ва '''<big>rang</big>'''ро пур кунед.")            end            return FormatOutput(res .. TaxString(args, "last"), false)        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(NoTaxTempl(taxon) .. ", который должен описывать систематическое положение таксона ''[[" .. taxon .. "]]''.") .. res            return FormatOutput(res, false)        end        if taxlist[parent] then -- error: loop            res = ErrorText("обнаружена петля — [[Шаблон:Таксон#Система таксономической навигации|таксономический шаблон]] {{[[Шаблон:" .. taxon .. "|" .. taxon .. "]]}} ссылается на свой подчинённый таксон.") .. res            return FormatOutput(res, false)        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 FormatOutput(res, ok)endreturn p
🔥 Top keywords: Саҳифаи аслӣПардаарӯсакКонститутсияи ТоҷикистонВижа:ҶустуҷӯИттиҳоди ШӯравӣКонвенсияи ҳуқуқи кудакАлюминийАтомҲуқуқ ва озодиҳои инсон ва шаҳрвандСозмони Милали МуттаҳидДавлати СомониёнТоҷикистонЭъломияҚоидаҳои имлои забони тоҷикӣКонститутсияи ҶШС ТоҷикистонРӯзи ваҳдати миллӣ (Тоҷикистон)Ҷумҳурии Шӯравии Сотсиалистии ТоҷикистонТаърихи ТоҷикистонАҳолии ТоҷикистонМаҷмаи Умумии Созмони Милали МуттаҳидҶумҳурии Мухтори Шӯравии Сотсиалистии ТоҷикистонЗаминВижа:Тағйироти охиринСаноати ТоҷикистонСадриддин АйнӣҶанги ҷаҳонии дувумИёлоти Муттаҳидаи АмрикоПрезиденти ТоҷикистонАлифбои тоҷикӣЗахираҳои табиъии ТоҷикистонФеъл (дастури забон)ФизикаНатурализатсияВикипедиа:Ошноӣ бо донишномаДавлатВилояти СуғдАбуҳанифа Нуъмон ибни СобитАгентии назорати давлатии молиявӣ ва мубориза бо коррупсияи Ҷумҳурии ТоҷикистонҲизбҳои сиёсии Тоҷикистон