Modulo:eFloras

Manipud iti Wikipedia, ti nawaya nga ensiklopedia
Darsen a mapan iti pagdaliasatan Darsen a mapan agbiruk
Dokumentasion ti modulo[kitaen] [urnosen] [pakasaritaan] [purgaen]

Panagusar[urnosen ti taudan]

Agaramid dayoy a modulo iti obra para iti Plantilia:eFloras. Ti umuna nga obra ket ti panagala ti flora_id ken ti nagan ti pamilia (wenno tribu ti Asteraceae) ken pagbaliwen isuda kadagiti maitunos a bilang ti tomo para iti Floras ti Amianan nga Amerika, Tsina, ken Chile. Ti maikadua ket ti panagala ti flora_id manipud iti URL ken mangisubli ti maituos a flora wenno listaan a nagan. Ti datos a mausar para kadagitoy dua nga obra ket adda iti Modulo:eFloras/data. Ti maikatlo ket ti panagduktal no ania a kita ti sientipiko a nagan ti adda iti maikatlo aparametro ti plantilia, ken ipakat ti husto a pannakaitalisado. Para iti daytoy apanggep, ikkaten ti modulo ti umuna ken maudi a whitespace, ken ti ania man nga italisasion wenno panagpapuskol.

{{#invoke:EFloras|volume|1|family=Rosaceae}} wenno {{#invoke:EFloras|volume|1|Rosaceae}}
{{#invoke:EFloras|resource|1}}
{{#invoke:eFloras|volumeDate|1||Rosaceae}}
{{#invoke:eFloras|volumeDate|1|9|}}
{{#invoke:eFloras|volumeName|1||Rosaceae}}
{{#invoke:eFloras|volumeName|1|9|}}
  • 9
  • Flora of North America North of Mexico (FNA)
  • 2014
  • 2014
  • Magnoliophyta: Picramniaceae to Rosaceae
  • Magnoliophyta: Picramniaceae to Rosaceae


  • {{#invoke:eFloras|name|Asteraceae}}
Asteraceae
  • {{#invoke:eFloras|name|Aster}}
Aster
  • {{#invoke:eFloras|name|Aster ericoides}}
Aster ericoides
  • {{#invoke:eFloras|name|Aster ericoides var. ericoides}}
Aster ericoides var. ericoides
  • {{#invoke:eFloras|name|Aster ericoides'' var. ''ericoides}}
Aster ericoides var. ericoides
  • {{#invoke:eFloras|name|Acer tataricum subsp. ginnala}}
Acer tataricum subsp. ginnala

require('Modulo:No globals')

local p = {}

local data -- Load [[Module:eFloras/data]] if needed and assign to this variable.

local function getResource(floraID)
	data = data or mw.loadData("Modulo:eFloras/data")
	return data.resources[floraID] or data.resources[tonumber(floraID)]
end

function p.resource(frame)
	local floraID = string.match(frame.args[1], "%d+")
	if floraID == nil then
		return "<span style=\"color: red;\">Pangngaasi a mangited iti maysa a bilang ti rekurso (<code>flora_id</code>). Kitaen ti listaan ti nasuportaran a bilbilang ti rekurso iti [[Modulo:eFloras/dok]]</span>"
	else
		local familyToVolume = getResource(floraID)
		if familyToVolume == nil then
			return "<span style=\"color: red;\">Ti bilang ti rekurso ti (<code>flora_id</code>) <code>" .. floraID .. "</code> ket saan a mabigbigan. Kitaen ti listaan ti nasuportaran a bilbilang ti rekurso iti [[Modulo:eFloras/dok]]</span>[[Kategoria:Pampanid nga agus-usar iti plantilia eFloras nga agraman kadagiti di nasuportaran a pateg ti parametro]]"
		else
			return familyToVolume
		end
	end
end

function p._volumeName(floraID, volume, family)
	floraID = tonumber(floraID)
	
	if not floraID then -- floraID is not a number.
		return
	end
	
	data = data or mw.loadData("Modulo:eFloras/data")
	
	if not volume then
		local familyToVolume = data.volumeTable[floraID]
		if not familyToVolume then
			return
		end
		
		volume = tonumber(familyToVolume[family])
	
		if not volume then
			return
		end
	end
	
	local floraVolumeNames = data.volumeNames and data.volumeNames[floraID]
	if floraVolumeNames and volume then
		return floraVolumeNames[volume]
	end
end

function p.volumeName(frame)
	if not (frame.args[1] and (frame.args[2] or frame.args[3] or frame.args.family)) then
		return
	end
	
	local floraID = string.match(frame.args[1], "%d+")
	local volume = tonumber(frame.args[2])
	local family = frame.args[3] or frame.args.family
	
	if not (floraID and (volume or family)) then
		return
	end
	
	return p._volumeName(floraID, volume, family)
end

function p._volumeDate(floraID, volume, family)
	floraID = tonumber(floraID)
	
	if not floraID then -- floraID is not a number.
		return
	end
	
	data = data or mw.loadData("Modulo:eFloras/data")
	
	if not volume then
		local familyToVolume = data.volumeTable[floraID]
		if not familyToVolume then
			return
		end
		
		volume = tonumber(familyToVolume[family])
	
		if not volume then
			return
		end
	end
	
	local floraVolumeDates = data.volumeDates and data.volumeDates[floraID]
	if floraVolumeDates then
		if volume and floraVolumeDates[volume] then
			return floraVolumeDates[volume]
		else
			return floraVolumeDates.default
		end
	end
end

function p.volumeDate(frame)
	if not (frame.args[1] and (frame.args[2] or frame.args[3] or frame.args.family)) then
		return
	end
	
	local floraID = string.match(frame.args[1], "%d+")
	local volume = tonumber(frame.args[2])
	local family = frame.args[3] or frame.args.family
	
	if not (floraID and (volume or family)) then
		return
	end
	
	return p._volumeDate(floraID, volume, family)
end

function p.volume(frame)
	local floraID = string.match(frame.args[1], "%d+")
	local family = frame.args[2] or frame.args.family
	data = data or mw.loadData("Modulo:eFloras/data")
	local familyToVolume = data.volumeTable[floraID] or data.volumeTable[tonumber(floraID)]
	if familyToVolume == nil then
		return ""
	else
		local volume = familyToVolume[family]
		if volume == "error" then
			return "19&ndash;21 [[Kategoria:Pampanid nga agus-usar iti plantilia eFloras nga agraman kadagiti di nasuportaran a pateg ti parametro]]"
		elseif volume == nil then
			return ""
		else
			return volume
		end
	end
end

-- Italicize if name requires it.
function p.italicize(name)
	local orig = name
	name = string.gsub(name, "^%s*(.-)%s*$", "%1")
	
	local count
	name, count = string.gsub(name, "\'\'\'?", "")
	
	if count > 0 then
		-- A tracking method used on Wiktionary: [[wikt:Module:debug]].
		-- To see the results:
		-- [[Special:WhatLinksHere/Template:tracking/eFloras/italics or bolding]]
		local frame = mw.getCurrentFrame()
		pcall(frame.expandTemplate, frame, { title = 'tracking/eFloras/italics or bolding' })
		mw.log("Ikabil ti italiko iti tapno maaiyitaliko  ti annong iti Modulo:eFloras:", orig)
	end
	
	local rank
	local lowerName = name:lower()
	if name == "" or name == nil then
		return
	elseif string.find(name, "^%u%l+ae$") then
		if string.find(name, "eae$") then
			if string.find(name, "aceae$") then
				rank = "family"
			elseif string.find(name, "oideae$") then
				rank = "subfamily"
			else
				rank = "tribe"
			end
		elseif string.find(name, "inae$") then
			rank = "subtribe"
		end
	elseif string.find(lowerName, "subsp.", 1, true) then
		rank = "subspecies"
	elseif string.find(lowerName, "subg.", 1, true) then
		rank = "subgenus"
	elseif string.find(lowerName, "var.", 1, true) then
		rank = "variety"
	elseif string.find(lowerName, "sect.", 1, true) then
		rank = "section"
	elseif string.find(name, "^%a+%s[%a-]+$") or string.find(name, "^%a+%s×%s[%a-]+$") then
		rank = "species"
	elseif string.find(name, "^%u%a+$") -- No one-letter genera, probably.
			and not string.find(name, ".%u") then -- Uppercase letters can only appear at beginning of taxonomic name.
		rank = "genus"
	end
	
	if not rank then
		mw.log("Saan a maammuan ti Modulo:eFloras ti taksonomiko a ranngo para iti naawatan a naikabil: " .. name)
		return orig
	end
	
	if rank == "genus" or rank == "subgenus" or rank == "species"
			or rank == "subspecies" or rank == "variety" or rank == "section" then
		
		name = "<i>" .. name .. "</i>"
		local hybrid = "×"
		
		if name:find(".", 1, true) then
			local abbreviations = {
				["subsp."] = true, ["ssp."] = true, ["var."] = true, ["f."] = true,
				["sect."] = true, ["subsect."] = true, ["subg."] = true,
			}
			
			local unrecognized
			name = name:gsub(
				"%s+(%S+%.)%s+",
				function (abbreviation)
					mw.log(name, abbreviation, abbreviation:lower(), abbreviations[abbreviation:lower()])
					if abbreviations[abbreviation:lower()] then
						return "</i> " .. abbreviation .. " <i>"
					else
						unrecognized = unrecognized or {}
						table.insert(unrecognized, abbreviation)
					end
				end)
			
			if unrecognized then
				mw.log(string.format("Saan a mabigbigan ti pangyababaan ti%s %s %s.",
					unrecognized[2] and "s" or "",
					table.concat(
						unrecognized,
						", "),
					unrecognized[2] and "are" or "is"))
				return orig
			end
		end
		
		name = name:gsub("%s+" .. hybrid .. "%s+", "</i> " .. hybrid .. " <i>")
	end -- Else do not modify name.
	
	return name
end

function p.name(frame)
	local name = frame.args[1]
	return p.italicize(name)
end 

p.get_volume = p.volume

return p