모듈:TaxonItalics

--=====================================================================**
Italicize a taxon name appropriately by invoking italicizeTaxonName.
The algorithm used is:- If the name has italic markup at the start or the end, do nothing.- Else- Remove (internal) italic markup.- If the name is made up of four words and the third word is a
botanical connecting term, de-italicize the connecting term and add italic
markup to the outside of the name.- Else if the name is made up of three words and the second word is a
botanical connecting term or a variant of "cf.", de-italicize the
connecting term and add italic markup to the outside of the name. - Else just add italic markup to the outside of the name.

**=====================================================================**
local p = {}
local cTerms3 = {
	subspecies = "subsp.",
	"subsp." = "subsp.",
	subsp = "subsp.",
	"ssp." = "subsp.",
	ssp = "subsp.",
	varietas = "var.",
	"var." = "var.",
	var = "var.",
	subvarietas = "subvar.",
	"subvar." = "subvar.",
	subvar = "subvar.",
	forma = "f.",
	"f." = "f.",
	f = "f.",
	subforma = "subf.",
	"subf." = "subf.",
	subf = "subf."
	}
local cTerms2 = {
	subgenus = "subg.",
	"subg." = "subg.",
	subg = "subg.",
	section = "sect.",
	"sect." = "sect.",
	"cf." = "cf.",
	cf = "cf.",
	"c.f." = "cf."
	}
--=====================================================================**
Italicize a taxon name appropriately.

**=====================================================================**
function p.main(frame)
	local name = frame.args1 or 
	local linked = frame.args'linked' == 'yes'
	return p.italicizeTaxonName(name, linked)
end
function p.italicizeTaxonName(name, linked)
	local italMarker = ""
	-- trim the name and replace any use of the HTML italic tags by Wikimedia markup
	name = string.gsub(string.gsub(mw.text.trim(name), "", italMarker), "", italMarker)
	local result = name
	if name ~=  then
		if string.sub(name, 1, 2) == "" or string.sub(name, -2) == "" then
			-- do nothing if the name already has italic markers at the start or end
		else
			name = string.gsub(name, "", "") -- first remove internal italics
			local words = mw.text.split(name, " ", true)
			local deitalicized = false
			if #words == 4 then
				-- test for the third word of a four word name being a connecting term
				if cTerms3words3 then
					-- de-italicize the connecting term by adding internal italic markup
					result = words1 .. " " .. words2 .. italMarker .. " " .. cTerms3words3 .. italMarker .. " " .. words4
					deitalicized = true
				end
			elseif #words == 3 then
				-- test for the second word of a three word name being a connecting term
				if cTerms2words2 then
					-- de-italicize the connecting term by adding internal italic markup
					result = words1 .. " " .. italMarker .. cTerms2words2 .. italMarker .. " " .. words3
					deitalicized = true
				end
			else
				-- do nothing
				result = name
			end
			-- add outside markup
			if linked then
				if deitalicized then
					result = "" .. italMarker .. result .. italMarker .. ""
				else
					result = italMarker .. "" .. name .. "" .. italMarker
				end
			else
				result = italMarker .. result .. italMarker
			end
		end
	end
	return result
end
return p