Модуль:Biology
Поделись знанием:
Для документации этого модуля может быть создана страница Модуль:Biology/doc
--[[Функции, связанные с таксономией и всем таким прочим, что растёт и ползает]] local TaxInfo={'parent','latin','name','rang','m','aut','ref'} local function ParseTT(tt)-- Обрабатывает шаблон таксона без вызова парсера, tt — объект mw.title local t,r=tt:getContent(),{} for _,v in ipairs(TaxInfo) do r[v] = t:match('|%s*'..v..'%s*=%s*([^|]-)%s*[|}]') end return r end local function Rang(r)-- ≈ Шаблон:Rang return ("|Надцарство|Домен|Царство|Тип|Отдел|Класс|Отряд|Порядок|Семейство|Род|Вид|"):find('|'..r..'|',1,1) and 1 or string.find([[|Подцарство|Раздел|Подраздел|Надтип|Надотдел|Подтип|Инфратип|Подотдел| |Надкласс|Подкласс|Инфракласс|Надотряд|Надпорядок|Подотряд|Подпорядок|Инфраотряд| |Надсемейство|Подсемейство|Надтриба|Триба|Подтриба| |Подрод|Надсекция|Секция|Подсекция|Ряд|Подряд|Подвид| |Вариетет|Разновидность|Подразновидность|Форма|Подформа|]],'|'..r..'|',1,1) and '' or r~='' and '?' or nil end local function taxtable(f)--человеческая версия Шаблон:TaxRecursion и его окружения в Шаблон:Таксо-карточка local res, tf = {}, f.args['u'] and f:getParent() or f;-- с ключом u рассматривает параметры вызвавшего шаблона local a,hir,nolast,topt=tf.args,nil,1,mw.title.new(a['latin'],'Template'); -- Защиты от зацикливания нет, будет выдавать красную ошибку "время кончилось", но это редко if not ( topt and topt.exists ) then topt = mw.title.new(a['parent'],'Template') 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( [=[Нет [[Шаблон:Таксон/doc#Таксономические шаблоны|таксономического шаблона]] '''{{tl|%s }}''', который должен описывать положение [[таксон]]а ''[[%s]]'' в [[Биологическая классификация#Наименование и описание таксонов|биологической классификации]].]=], 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>[[Category:Википедия:Биологические статьи без таксошаблона]]' or '</div>' ) end end-- выбор верхнего таксошаблона topt --TaxRecursion + FirstRang local parent, q = nolast and a.latin or a.parent while parent ~= 'Null' do q = ParseTT(topt) table.insert(res,1,f:expandTemplate{title='TaxString',args=q}) parent = q.parent if Rang(q.rang)~='' then hir=1 end topt = mw.title.new(parent,'Template') end return ( hir and '<div class="NavHead" style="background-color: transparent; border:0"><small>промежуточные ранги</small></div>\n' or '' ) .. f:expandTemplate{title=nolast and 'LastRang' or 'TaxString', args=a} .. table.concat(res,"\n") end return { TaxInfo=TaxInfo, ParseTT=ParseTT, Rang=Rang, taxtable=taxtable }