Модуль:Biology

Википеди материал

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

--[[Функции, связанные с таксономией и всем таким прочим, что растёт и ползает]]

local mRedirect = require('Module:Redirect')

local p = {}

local function getTT(title)
	local page = mw.title.new(title,'Template')
	if page and page.exists and page.isRedirect then
		return mw.title.new(mRedirect.getTarget(page))
	else
		return page
	end
end

local function ParseTT(tt)-- Обрабатывает шаблон таксона без вызова парсера, tt — объект mw.title
	local TaxInfo={'parent','latin','name','rang','monoaut','ext'}
    local t,r=tt:getContent(),{}
    for _,v in ipairs(TaxInfo) do 
    	r[v] = t:match('|%s*'..v..'%s*=%s*([^|]-)%s*[|}]') 
    end
    r['ref'] = t:match('|%s*ref%s*=%s*([^}]-)%s*}') 
    return r
end

local function Rang(r)-- ≈ Ло:Rang
    return ("|ТӀехдоалаче|ЦӀа|Доалаче|Тайпа|Ралс|Класс|Тоаба|АргӀа|Дезал|Ваьр|Кеп|"):find('|'..r..'|',1,1) and 1 or nil
end

function p.taxtable(f)--человеческая версия Ло:TaxRecursion и его окружения в Ло:Таксо-карточка
    local res, a = {}, f:getParent().args;-- с ключом u рассматривает параметры вызвавшего шаблона
    local hir,nolast,topt=nil,1,getTT(a['latin']);
    -- Защиты от зацикливания нет, будет выдавать красную ошибку "время кончилось", но это редко
    if not ( topt and topt.exists ) then
        topt = getTT(a['parent'])
        if topt and topt.exists then
        	nolast=nil
        else
            return '<div style="background-color:Gainsboro;font-size:85%;color:Dimgray">ГӀАЛАТ ХИЛАРАХ БОЛА ХОАМ<br />'..
            ( (a['parent'] or a['latin']) and string.format(
[=[Болаш бац [[Биологическая классификация#Наименование и описание таксонов|биологе классификаце чу]] ''[[%s]]'' яхача [[таксон]]а моттига сурт оттадеш бола [[Ло:Таксон/doc#Таксономе лераш|таксономе ло]] '''{{[[T:%s|%s]]}}'''.]=],
              a['parent'] or a['latin'], a['parent'] or a['latin'], a['parent'] or a['latin'])
              or "<br />Параметраш '''<big>latin</big>''' а '''<big>parent</big>''' а яьсса я."
            )..( (mw.title.getCurrentTitle().namespace==0) and '</div>[[ОагӀат:Википеди:Таксо-ло боаца биологе статьяш]]' or '</div>' )
        end
    end-- выбор верхнего таксошаблона topt
    --TaxRecursion + FirstRang
    local parent, q = nolast and a.latin or a.parent
    while parent ~= nil do
    	topt = getTT(parent)
        if topt and topt.exists then 
        	q = ParseTT(topt)
        else
        	break
        end
        if q['ext'] and q['ext'] ~= '' then
        	q['Вымер'] = q['ext']
        end
        table.insert(res,1,f:expandTemplate{title='TaxString',args=q})
        mw.log('Loaded Template:' .. topt.text)
        parent = q.parent
        if Rang(q.rang) == nil then 
        	hir = 1
        end
    end
    return ( hir and
        '<div class="NavHead nomobile" style="background-color: transparent; border:0"><small>юкъ-юкъера рангаш</small></div>\n'
        or '' ) .. table.concat(res,"\n") .. f:expandTemplate{title=nolast and 'TaxString' or 'LastRang', args=a}
end

return p