Documentation icon دستاویز [تخلیق]
-- This module implements [[template:تصنيف كائن/تصنيف علمي ويكي بيانات]].

local p = {}
local colors = {
	['Q808'] = '#EE82EE',	 -- وائرس
	['Q10872'] = '#ECD2D2',	-- قدیم جراثیم
	['Q10876'] = '#D3D3D3',	-- بیکٹیریا 
	['Q10892'] = '#F0E68C',	-- یک خلوی عضویہ
	['Q862296'] = '#ADEE3F',  -- أسناخ 
	['Q756'] = '#90EE90',	-- نبات
	['Q764'] = '#ADD8E6', -- فطر
	['Q729'] = '#D3D3A4', -- حيوان
	['Q855740'] = '#E1CCFC',	--جذراوات
	['Q1205126'] = '#E0D0B0',	-- قمعيات 
	['Q473809'] = '#FFC8A0',	--متموريات
	--[''] = '#FAF0E6',	  -- غير محدد	
	[''] = '',
}

function foo(iid,formatting,p)
	if not iid or iid =='' 
		then return nil
	end
	----------------
	st = formatStatements( {property =p or 'P171' , entityId = iid, enlabelcate='t', noref ='t', enbarten ='true',formatting=formatting})
	if st and st ~= '' 
		then 
			--return addTrackingCategory(st ,{property=p or 'P171', entityId = iid,noicon='t'}) 
			return st
		else
			return nil 
	end
	----------------
end

function GetP171id(id, formatting)
	if not id or id =='' 
		then return nil
	end
	----------------
	st = formatStatements( {property ='P171' , entityId = id,rank='best', noref ='t', enbarten ='true',formatting=formatting})
	----------------
	return st
end

function p.taxcolour( datavalue ,datatype , options)

	local P1id	=	GetP171id(datavalue.value.id,'raw') 
	local P2id	=	GetP171id(P1id,'raw')
	local P3id	=	GetP171id(P2id,'raw') 
	local P4id	=	GetP171id(P3id,'raw') 
	local P5id	=	GetP171id(P4id,'raw') 
	local P6id	=	GetP171id(P5id,'raw') 
	local P7id	=	GetP171id(P6id,'raw') 
	local P8id	=	GetP171id(P7id,'raw') 
	local P9id	=	GetP171id(P8id,'raw') 
	local P10id	=	GetP171id(P9id,'raw') 
	local P11id	=	GetP171id(P10id,'raw') 
	local P12id	=	GetP171id(P11id,'raw') 
	local P13id	=	GetP171id(P12id,'raw') 
	local P14id	=	GetP171id(P13id,'raw') 
	local P15id	=	GetP171id(P14id,'raw') 
	local P16id	=	GetP171id(P15id,'raw') 
	local P17id	=	GetP171id(P16id,'raw') 
	local P18id	=	GetP171id(P17id,'raw') 
	local P19id	=	GetP171id(P18id,'raw') 
	local P20id	=	GetP171id(P19id,'raw') 
	local P21id	=	GetP171id(P20id,'raw')
	local P22id	=	GetP171id(P21id,'raw')
	local P23id	=	GetP171id(P22id,'raw')
	---------------------------
	local taxon1 = 
		{P23id or "", P22id or "", P21id or "", P20id or ""
			, P19id or "", P18id or "", P17id or "", P16id or ""
			, P15id or "", P14id or "", P13id or "", P12id or ""
			, P11id or "", P10id or "", P9id or "", P8id or ""
			, P7id or "", P6id or "", P5id or "", P4id or ""
			, P3id or "", P2id or "", P1id or "", P0id or ""}
	---------------------------
	local q = {}
	for i,j in ipairs( taxon1 ) do
		e = foo(j,'raw','P105')
		if e and e ~= '' 
			--then	table.insert( q,e ..j )
			then 
				if e == 'Q36732' 
					then
						for k, v in pairs(colors) do
							if j == k 
								then 
									table.insert( q, v )
							end
						end
					else
				end
		end
	end
	---------------------------
	taxon = table.concat( q,'\n')
	if taxon 
		then
			return taxon
	else 
			return '' 
	end
	---------------------------
end

local taxP105= {
	['Q7432'] = 'نوع',
	['Q34740'] = '[[جنس]]',
	['Q68947'] = 'ذیلی نوع',
	['Q35409'] = '[[خاندان (حیاتیات)|خاندان]]',
	['Q767728'] = 'تنوع',
	['Q2455704'] = '[[خاندان (حیاتیات)|ذیلی خاندان]]',
	['Q227936'] = '[[قبیلہ (حیاتیات)|قبیلہ]]',
	['Q3238261'] = 'ذیلی جنس',
	['Q3181348'] = 'جزو',
	['Q36602'] = '[[طبقہ (حیاتیات)|طبقہ]]',
	['Q2136103'] = '[[اعلی خاندان (حیاتیات)|اعلی خاندان]]',
	['Q3965313'] = 'ذیلی قبیلہ',
	['Q5867959'] = '[[طبقہ (حیاتیات)|ذیلی طبقہ]]',
	['Q37517'] = '[[جماعت (حیاتیات)|جماعت]]',
	['Q279749'] = 'شكل',
	['Q3025161'] = 'سلسلہ',
	['Q5998839'] = 'ذیلی جزو',
	['Q5867051'] = '[[جماعت (حیاتیات)|ذیلی جماعت]]',
	['Q2889003'] = '[[ذیلی طبقہ (حیاتیات)|ذیلی طبقہ]]',
	['Q5868144'] = '[[اعلی طبقہ (حیاتیات)|اعلی طبقہا]]',
	['Q4886'] = 'قابل کاشت',
	['Q38348'] = '[[شعبة (تصنيف)|شعبة]]',
	['Q3825509'] = 'شكل خاص',
	['Q1153785'] = '[[شعيبة (تصنيف)|شعيبة]]',
	['Q334460'] = 'تحتی گروہ',
	['Q4150646'] = 'گروہ',
	['Q2007442'] = 'صُنيف فرعي',
	['Q14817220'] = 'قبيلة عليا',
	['Q10861426'] = 'قسم',
	['Q3504061'] = 'عمارة',
	['Q3491997'] = 'ذیلی تقسیم',
	['Q855769'] = 'ہم نسل',
	['Q3978005'] = '[[اعلی نسل (حیاتیات)|اعلی نسل]]',
	['Q2752679'] = 'ذیلی مملکت',
	['Q6311258'] = 'رتبة صغرى',
	['Q13198444'] = 'السلسلية',
	['Q36732'] = '[[مملکت (حیاتیات)|مملکت]]',
	['Q21559275'] = 'اعلی جزو',
	['Q2361851'] = 'شعبة فرعية',
	['Q2981883'] = '[[أترابية (تصنيف)|أترابية]]',
	['Q10861375'] = 'قسيم',
	['Q3150876'] = 'ذیلی مملکت',
	['Q630771'] = 'ضُريب',
	['Q6541077'] = '[[أباشة (تصنيف)|أباشة]]',
	['Q21074316'] = 'رتبة متوسطة',
	['Q6054425'] = 'أترابية عليا',
	['Q42621'] = 'تهجين الأحياء',
	['Q6054237'] = 'رتبة ضخمة',
	['Q6462265'] = 'رتبۂ اعلی',
	['Q7506274'] = 'رتبۂ متوسطہ',
	['Q10296147'] = 'بالا خاندان',
	['Q19858692'] = 'عالم اعلی',
	['Q4226087'] = 'أترابية فرعية',
	['Q26857882'] = 'عالم صغیر',
	['Q3798630'] = 'ذیلی قبیلہ',
	['Q3491996'] = 'ذیلی ڈومین',
 }
 
function taxonrank(iid)
	vvv = nil
	------------------------
	if not iid or iid =='' 
		then return nil
	end
	------------------------
	straw = formatStatements( {property ='P105' , entityId = iid, enlabelcate='t', noref ='t', enbarten ='true',formatting='raw'})
	if straw and straw ~= ''  
	then
		for k, v in pairs(taxP105) do
			if k == straw
				then 
					vvv = addTrackingCategory(v ,{property='P105', entityId = iid,noicon='t'}) 
			end
		end
	end
	------------------------
	st = formatStatements( {property ='P105' , entityId = iid, enlabelcate='t', noref ='t', enbarten ='true',formatting=''})
	if not vvv then
			if st and st ~= '' 
				then  
					vvv = addTrackingCategory(st .. '' ,{property='P105', entityId = iid,noicon='t'}) 
				else
			end
	end
	------------------------
	return vvv
end

function dd(id, taxo)
	-- taxo : الكائن
	-- d : المرتبة التصنيفية
	if id and id ~= '' 
		then 
		--	taxo = formatEntityId( id, options ).value
			d = taxonrank(id)		   -- المرتبة التصنيفية
			--d = foo(id,'','P105')
			----------------
			if not d or d == '' 
				-- d =foo(id,'','P31')
				then return nil --'' -- nil 
			end
			----------------
			if taxo and taxo ~= '' 
				then
				if d and d ~= '' 
					then 
						return	 d .. '||'..  taxo
					else 
						return taxo 
				end
			end
			----------------
		else
			--return '' 
	end
end

function p.tax( datavalue ,datatype , options)
	----------------
	function pro1(id,options)
		if not id or id =='' then return nil end
			st = formatStatements( {property ='P171' , entityId = id,enlabelcate='t',noref ='e', enbarten ='true'}) -- options.noref
			return st
	end
	----------------
	local value =   datavalue.value			P0	=	dd(value.id,formatEntityId( value.id, options ).value )	
	local P1id	=	GetP171id(value.id,'raw')		P1	=	dd(P1id, pro1(value.id, options))
	local P2id	=	GetP171id(P1id,'raw')			P2	=	dd(P2id, pro1(P1id, options))
	local P3id	=	GetP171id(P2id,'raw')			P3	=	dd(P3id, pro1(P2id, options))
	local P4id	=	GetP171id(P3id,'raw')			P4	=	dd(P4id, pro1(P3id, options))
	local P5id	=	GetP171id(P4id,'raw')			P5	=	dd(P5id, pro1(P4id, options))
	local P6id	=	GetP171id(P5id,'raw')			P6	=	dd(P6id, pro1(P5id, options))
	local P7id	=	GetP171id(P6id,'raw')			P7	=	dd(P7id, pro1(P6id, options))
	local P8id	=	GetP171id(P7id,'raw')			P8	=	dd(P8id, pro1(P7id, options))
	local P9id	=	GetP171id(P8id,'raw')			P9	=	dd(P9id, pro1(P8id, options))
	local P10id	=	GetP171id(P9id,'raw')			P10	=	dd(P10id, pro1(P9id, options))
	local P11id	=	GetP171id(P10id,'raw')		P11	=	dd(P11id, pro1(P10id, options))
	local P12id	=	GetP171id(P11id,'raw')		P12	=	dd(P12id, pro1(P11id, options))
	local P13id	=	GetP171id(P12id,'raw')		P13	=	dd(P13id, pro1(P12id, options))
	local P14id	=	GetP171id(P13id,'raw')		P14	=	dd(P14id, pro1(P13id, options))
	local P15id	=	GetP171id(P14id,'raw')		P15	=	dd(P15id, pro1(P14id, options))
	local P16id	=	GetP171id(P15id,'raw')		P16	=	dd(P16id, pro1(P15id, options))
	local P17id	=	GetP171id(P16id,'raw')		P17	=	dd(P17id, pro1(P16id, options))
	local P18id	=	GetP171id(P17id,'raw')		P18	=	dd(P18id, pro1(P17id, options))
	local P19id	=	GetP171id(P18id,'raw')		P19	=	dd(P19id, pro1(P18id, options))
	local P20id	=	GetP171id(P19id,'raw')		P20	=	dd(P20id, pro1(P19id, options))
	local P21id	=	GetP171id(P20id,'raw')		P21	=	dd(P21id, pro1(P20id, options))
	local P22id	=	GetP171id(P21id,'raw')		P22	=	dd(P22id, pro1(P21id, options))
	local P23id	=	GetP171id(P22id,'raw')		P23	=	dd(P23id, pro1(P22id, options))
	------------------------
	--[[
	local P24id	=	GetP171id(P23id,'raw')		P24	=	dd(P24id, pro1(P23id, options))
	local P25id	=	GetP171id(P24id,'raw')		P25	=	dd(P25id, pro1(P24id, options))
	local P26id	=	GetP171id(P25id,'raw')		P26	=	dd(P26id, pro1(P25id, options))
	local P27id	=	GetP171id(P26id,'raw')		P27	=	dd(P27id, pro1(P26id, options))
	local P28id	=	GetP171id(P27id,'raw')		P28	=	dd(P28id, pro1(P27id, options))
	local P29id	=	GetP171id(P28id,'raw')		P29	=	dd(P29id, pro1(P28id, options))
	local P30id	=	GetP171id(P29id,'raw')		P30	=	dd(P23id, pro1(P29id, options))
	--]]
	----------------
	if not coo or coo =='' 
	then 
		coo = p.taxcolour( datavalue ,datatype , options) 
	end
	----------------
	ti =  '[[جماعت بندی]]'
	title =	 'colspan=\"2\" style=\"text-align: center;background-color:' ..coo..';" | ' .. addTrackingCategory(ti ,options)
	
	head = '{| class="infobox biota" style="text-align: right; width: 200px; font-size: 100%%"'
	End = '}'
	local taxon2 = {P23 or "", P22 or "" , P21 or "" , P20 or ""
		, P19 or "", P18 or "", P17 or "", P16 or ""
		, P15 or "", P14 or "", P13 or "", P12 or ""
		, P11 or "", P10 or "", P9 or "", P8 or ""
		, P7 or "", P6 or "", P5 or "", P4 or ""
		, P3 or "", P2 or "", P1 or "", P0 or ""
		}
	----------------
	local taxon1 = {
		--P30  or "" ,  P29  or "" ,  P28  or "" ,  
		--P27  or "" ,  P26  or "" ,  P25  or "" ,  P24  or "" ,  
		P23  or "" ,  P22  or "" ,  P21  or "" ,  P20  or "" ,  
		P19  or "" ,  P18  or "" ,  P17  or "" ,  P16  or "" ,  
		P15  or "" ,  P14  or "" ,  P13  or "" ,  P12  or "" ,  
		P11  or "" ,  P10  or "" ,  P9  or "" ,  P8  or "" ,  
		P7  or "" ,  P6  or "" ,  P5  or "" ,  P4  or "" ,  
		P3  or "" ,  P2  or "" ,  P1  or "" ,  P0  or "" ,  
		}
	----------------
	local q = {}
	--table.insert( q,head	) 
	table.insert( q, title	)
	for i,j in ipairs( taxon1 ) do
		e = i..j
		if j and j ~= '' 
			then table.insert( q,j ) 
		end
	end	 
	----------------
	--table.insert( q,End	) 
	taxonSections = table.concat( q, "\n|-\n|")
	result = string.format([[%s
|-
!%s
|-
|%s
%s]], head, title, taxonSections, End )
	----------------

	return taxonSections --result
end

return p