<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://guanches.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=GeminiFix</id>
	<title>EnciclopediaGuanche - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://guanches.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=GeminiFix"/>
	<link rel="alternate" type="text/html" href="https://guanches.org/Especial:Contribuciones/GeminiFix"/>
	<updated>2026-04-19T17:04:42Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:TableTools&amp;diff=218125</id>
		<title>Módulo:TableTools</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:TableTools&amp;diff=218125"/>
		<updated>2026-02-06T19:13:58Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--                               TableTools                                       --&lt;br /&gt;
--                                                                                --&lt;br /&gt;
-- This module includes a number of functions for dealing with Lua tables.        --&lt;br /&gt;
-- It is a meta-module, meant to be called from other Lua modules, and should     --&lt;br /&gt;
-- not be called directly from #invoke.                                           --&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Define often-used variables and functions.&lt;br /&gt;
local floor = math.floor&lt;br /&gt;
local infinity = math.huge&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeMulti = libraryUtil.checkTypeMulti&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isPositiveInteger&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given value is a positive integer, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a given table key is in the array part or the&lt;br /&gt;
-- hash part of a table.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.isPositiveInteger(v)&lt;br /&gt;
	return type(v) == &#039;number&#039; and v &amp;gt;= 1 and floor(v) == v and v &amp;lt; infinity&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isNan&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given number is a NaN value, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a value can be a valid table key. Lua will&lt;br /&gt;
-- generate an error if a NaN is used as a table key.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.isNan(v)&lt;br /&gt;
	return type(v) == &#039;number&#039; and tostring(v) == &#039;-nan&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- shallowClone&lt;br /&gt;
--&lt;br /&gt;
-- This returns a clone of a table. The value returned is a new table, but all&lt;br /&gt;
-- subtables and functions are shared. Metamethods are respected, but the returned&lt;br /&gt;
-- table will have no metatable of its own.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.shallowClone(t)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		ret[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- removeDuplicates&lt;br /&gt;
--&lt;br /&gt;
-- This removes duplicate values from an array. Non-positive-integer keys are&lt;br /&gt;
-- ignored. The earliest value is kept, and all subsequent duplicate values are&lt;br /&gt;
-- removed, but otherwise the array order is unchanged.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.removeDuplicates(t)&lt;br /&gt;
	checkType(&#039;removeDuplicates&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local ret, exists = {}, {}&lt;br /&gt;
	for i, v in ipairs(t) do&lt;br /&gt;
		if isNan(v) then&lt;br /&gt;
			-- NaNs can&#039;t be table keys, and they are also unique, so we don&#039;t need to check existence.&lt;br /&gt;
			ret[#ret + 1] = v&lt;br /&gt;
		else&lt;br /&gt;
			if not exists[v] then&lt;br /&gt;
				ret[#ret + 1] = v&lt;br /&gt;
				exists[v] = true&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end			&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numKeys&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of any numerical&lt;br /&gt;
-- keys that have non-nil values, sorted in numerical order.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.numKeys(t)&lt;br /&gt;
	checkType(&#039;numKeys&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isPositiveInteger = p.isPositiveInteger&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if isPositiveInteger(k) then&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- affixNums&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of keys with the&lt;br /&gt;
-- specified prefix and suffix. For example, for the table&lt;br /&gt;
-- {a1 = &#039;foo&#039;, a3 = &#039;bar&#039;, a6 = &#039;baz&#039;} and the prefix &amp;quot;a&amp;quot;, affixNums will&lt;br /&gt;
-- return {1, 3, 6}.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.affixNums(t, prefix, suffix)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 2, prefix, &#039;string&#039;, true)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 3, suffix, &#039;string&#039;, true)&lt;br /&gt;
&lt;br /&gt;
	local function cleanPattern(s)&lt;br /&gt;
		-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.&lt;br /&gt;
		return s:gsub(&#039;([%(%)%%%.%[%]%*%+%-%?%^%$])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	prefix = prefix or &#039;&#039;&lt;br /&gt;
	suffix = suffix or &#039;&#039;&lt;br /&gt;
	prefix = cleanPattern(prefix)&lt;br /&gt;
	suffix = cleanPattern(suffix)&lt;br /&gt;
	local pattern = &#039;^&#039; .. prefix .. &#039;([1-9]%d*)&#039; .. suffix .. &#039;$&#039;&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if type(k) == &#039;string&#039; then			&lt;br /&gt;
			local num = mw.ustring.match(k, pattern)&lt;br /&gt;
			if num then&lt;br /&gt;
				nums[#nums + 1] = tonumber(num)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numData&lt;br /&gt;
--&lt;br /&gt;
-- Given a table with keys like (&amp;quot;foo1&amp;quot;, &amp;quot;bar1&amp;quot;, &amp;quot;foo2&amp;quot;, &amp;quot;baz2&amp;quot;), returns a table&lt;br /&gt;
-- of subtables in the format &lt;br /&gt;
-- { [1] = {foo = &#039;text&#039;, bar = &#039;text&#039;}, [2] = {foo = &#039;text&#039;, baz = &#039;text&#039;} }&lt;br /&gt;
-- Keys that don&#039;t end with an integer are stored in a subtable named &amp;quot;other&amp;quot;.&lt;br /&gt;
-- The compress option compresses the table so that it can be iterated over with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.numData(t, compress)&lt;br /&gt;
	checkType(&#039;numData&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;numData&#039;, 2, compress, &#039;boolean&#039;, true)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		local prefix, num = mw.ustring.match(tostring(k), &#039;^([^0-9]*)([1-9][0-9]*)$&#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			local subtable = ret[num] or {}&lt;br /&gt;
			if prefix == &#039;&#039; then&lt;br /&gt;
				-- Positional parameters match the blank string; put them at the start of the subtable instead.&lt;br /&gt;
				prefix = 1&lt;br /&gt;
			end&lt;br /&gt;
			subtable[prefix] = v&lt;br /&gt;
			ret[num] = subtable&lt;br /&gt;
		else&lt;br /&gt;
			local subtable = ret.other or {}&lt;br /&gt;
			subtable[k] = v&lt;br /&gt;
			ret.other = subtable&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if compress then&lt;br /&gt;
		local other = ret.other&lt;br /&gt;
		ret = p.compressSparseArray(ret)&lt;br /&gt;
		ret.other = other&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- compressSparseArray&lt;br /&gt;
--&lt;br /&gt;
-- This takes an array with one or more nil values, and removes the nil values&lt;br /&gt;
-- while preserving the order, so that the array can be safely traversed with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.compressSparseArray(t)&lt;br /&gt;
	checkType(&#039;compressSparseArray&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		ret[#ret + 1] = t[num]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sparseIpairs&lt;br /&gt;
--&lt;br /&gt;
-- This is an iterator for sparse arrays. It can be used like ipairs, but can&lt;br /&gt;
-- handle nil values.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.sparseIpairs(t)&lt;br /&gt;
	checkType(&#039;sparseIpairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	local lim = #nums&lt;br /&gt;
	return function ()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if i &amp;lt;= lim then&lt;br /&gt;
			local key = nums[i]&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- size&lt;br /&gt;
--&lt;br /&gt;
-- This returns the size of a key/value pair table. It will also work on arrays,&lt;br /&gt;
-- but for arrays it is more efficient to use the # operator.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
function p.size(t)&lt;br /&gt;
	checkType(&#039;size&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function defaultKeySort(item1, item2)&lt;br /&gt;
	-- &amp;quot;number&amp;quot; &amp;lt; &amp;quot;string&amp;quot;, so numbers will be sorted before strings.&lt;br /&gt;
	local type1, type2 = type(item1), type(item2)&lt;br /&gt;
	if type1 ~= type2 then&lt;br /&gt;
		return type1 &amp;lt; type2&lt;br /&gt;
	else -- This will fail with table, boolean, function.&lt;br /&gt;
		return item1 &amp;lt; item2&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns a list of the keys in a table, sorted using either a default&lt;br /&gt;
	comparison function or a custom keySort function.&lt;br /&gt;
]]&lt;br /&gt;
function p.keysToList(t, keySort, checked)&lt;br /&gt;
	if not checked then&lt;br /&gt;
		checkType(&#039;keysToList&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
		checkTypeMulti(&#039;keysToList&#039;, 2, keySort, { &#039;function&#039;, &#039;boolean&#039;, &#039;nil&#039; })&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local list = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	for key, value in pairs(t) do&lt;br /&gt;
		list[index] = key&lt;br /&gt;
		index = index + 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if keySort ~= false then&lt;br /&gt;
		keySort = type(keySort) == &#039;function&#039; and keySort or defaultKeySort&lt;br /&gt;
		&lt;br /&gt;
		table.sort(list, keySort)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Iterates through a table, with the keys sorted using the keysToList function.&lt;br /&gt;
	If there are only numerical keys, sparseIpairs is probably more efficient.&lt;br /&gt;
]]&lt;br /&gt;
function p.sortedPairs(t, keySort)&lt;br /&gt;
	checkType(&#039;sortedPairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;sortedPairs&#039;, 2, keySort, &#039;function&#039;, true)&lt;br /&gt;
	&lt;br /&gt;
	local list = p.keysToList(t, keySort, true)&lt;br /&gt;
	&lt;br /&gt;
	local i = 0&lt;br /&gt;
	return function()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		local key = list[i]&lt;br /&gt;
		if key ~= nil then&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns true if all keys in the table are consecutive integers starting at 1.&lt;br /&gt;
--]]&lt;br /&gt;
function p.isArray(t)&lt;br /&gt;
	checkType(&amp;quot;isArray&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if t[i] == nil then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- { &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { a = 1, b = 2, c = 3 }&lt;br /&gt;
function p.invert(array)&lt;br /&gt;
	checkType(&amp;quot;invert&amp;quot;, 1, array, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local map = {}&lt;br /&gt;
	for i, v in ipairs(array) do&lt;br /&gt;
		map[v] = i&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return map&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	{ &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { [&amp;quot;a&amp;quot;] = true, [&amp;quot;b&amp;quot;] = true, [&amp;quot;c&amp;quot;] = true }&lt;br /&gt;
--]]&lt;br /&gt;
function p.listToSet(t)&lt;br /&gt;
	checkType(&amp;quot;listToSet&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local set = {}&lt;br /&gt;
	for _, item in ipairs(t) do&lt;br /&gt;
		set[item] = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return set&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Recursive deep copy function.&lt;br /&gt;
	Preserves identities of subtables.&lt;br /&gt;
	&lt;br /&gt;
]]&lt;br /&gt;
local function _deepCopy(orig, includeMetatable, already_seen)&lt;br /&gt;
	-- Stores copies of tables indexed by the original table.&lt;br /&gt;
	already_seen = already_seen or {}&lt;br /&gt;
	&lt;br /&gt;
	local copy = already_seen[orig]&lt;br /&gt;
	if copy ~= nil then&lt;br /&gt;
		return copy&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if type(orig) == &#039;table&#039; then&lt;br /&gt;
		copy = {}&lt;br /&gt;
		for orig_key, orig_value in pairs(orig) do&lt;br /&gt;
			copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen)&lt;br /&gt;
		end&lt;br /&gt;
		already_seen[orig] = copy&lt;br /&gt;
		&lt;br /&gt;
		if includeMetatable then&lt;br /&gt;
			local mt = getmetatable(orig)&lt;br /&gt;
			if mt ~= nil then&lt;br /&gt;
				local mt_copy = deepcopy(mt, includeMetatable, already_seen)&lt;br /&gt;
				setmetatable(copy, mt_copy)&lt;br /&gt;
				already_seen[mt] = mt_copy&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else -- number, string, boolean, etc&lt;br /&gt;
		copy = orig&lt;br /&gt;
	end&lt;br /&gt;
	return copy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.deepCopy(orig, noMetatable, already_seen)&lt;br /&gt;
	checkType(&amp;quot;deepCopy&amp;quot;, 3, already_seen, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
	&lt;br /&gt;
	return _deepCopy(orig, not noMetatable, already_seen)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Concatenates all values in the table that are indexed by a number, in order.&lt;br /&gt;
	sparseConcat{ a, nil, c, d }  =&amp;gt;  &amp;quot;acd&amp;quot;&lt;br /&gt;
	sparseConcat{ nil, b, c, d }  =&amp;gt;  &amp;quot;bcd&amp;quot;&lt;br /&gt;
]]&lt;br /&gt;
function p.sparseConcat(t, sep, i, j)&lt;br /&gt;
	local list = {}&lt;br /&gt;
	&lt;br /&gt;
	local list_i = 0&lt;br /&gt;
	for _, v in p.sparseIpairs(t) do&lt;br /&gt;
		list_i = list_i + 1&lt;br /&gt;
		list[list_i] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(list, sep, i, j)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- Finds the length of an array, or of a quasi-array with keys such&lt;br /&gt;
-- as &amp;quot;data1&amp;quot;, &amp;quot;data2&amp;quot;, etc., using an exponential search algorithm. &lt;br /&gt;
-- It is similar to the operator #, but may return&lt;br /&gt;
-- a different value when there are gaps in the array portion of the table.&lt;br /&gt;
-- Intended to be used on data loaded with mw.loadData. For other tables, use #.&lt;br /&gt;
-- Note: #frame.args in frame object always be set to 0, regardless of &lt;br /&gt;
-- the number of unnamed template parameters, so use this function for&lt;br /&gt;
-- frame.args.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
function p.length(t, prefix)&lt;br /&gt;
	-- requiring module inline so that [[Module:Exponential search]]&lt;br /&gt;
	-- which is only needed by this one function&lt;br /&gt;
	-- doesn&#039;t get millions of transclusions&lt;br /&gt;
	local expSearch = require(&amp;quot;Module:Exponential search&amp;quot;)&lt;br /&gt;
	checkType(&#039;length&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;length&#039;, 2, prefix, &#039;string&#039;, true)&lt;br /&gt;
	return expSearch(function(i)&lt;br /&gt;
		local key&lt;br /&gt;
		if prefix then&lt;br /&gt;
			key = prefix .. tostring(i)&lt;br /&gt;
		else&lt;br /&gt;
			key = i&lt;br /&gt;
		end&lt;br /&gt;
		return t[key] ~= nil&lt;br /&gt;
	end) or 0&lt;br /&gt;
end&lt;br /&gt;
function p.inArray(arr, valueToFind)&lt;br /&gt;
	checkType(&amp;quot;inArray&amp;quot;, 1, arr, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- if valueToFind is nil, error?&lt;br /&gt;
	&lt;br /&gt;
	for _, v in ipairs(arr) do&lt;br /&gt;
		if v == valueToFind then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:String&amp;diff=218124</id>
		<title>Módulo:String</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:String&amp;diff=218124"/>
		<updated>2026-02-06T19:13:57Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[  &lt;br /&gt;
Este módulo está destinado a proporcionar acceso a las funciones de cadena (string) básicas.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local str = {}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
len&lt;br /&gt;
&lt;br /&gt;
Parametros&lt;br /&gt;
    s: La cadena a encontrar su longitud &lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
function str.len( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&#039;s&#039;} );&lt;br /&gt;
    local s = new_args[&#039;s&#039;] or &#039;&#039;;&lt;br /&gt;
    return mw.ustring.len( s )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
sub&lt;br /&gt;
&lt;br /&gt;
Parametros&lt;br /&gt;
    s: La cadena donde extraer la subcadena &lt;br /&gt;
    i: La cadena donde extraer la subcadena.&lt;br /&gt;
    j: Índice final de la subcadena, por defecto la longitud total, hasta el último carácter.&lt;br /&gt;
    &lt;br /&gt;
]]&lt;br /&gt;
function str.sub( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, { &#039;s&#039;, &#039;i&#039;, &#039;j&#039; } );&lt;br /&gt;
    local s = new_args[&#039;s&#039;] or &#039;&#039;;&lt;br /&gt;
    local i = tonumber( new_args[&#039;i&#039;] ) or 1;&lt;br /&gt;
    local j = tonumber( new_args[&#039;j&#039;] ) or -1;&lt;br /&gt;
    &lt;br /&gt;
    local len = mw.ustring.len( s );&lt;br /&gt;
&lt;br /&gt;
    -- Convertir negativos para la comprobación de rango&lt;br /&gt;
    if i &amp;lt; 0 then&lt;br /&gt;
        i = len + i + 1;&lt;br /&gt;
    end&lt;br /&gt;
    if j &amp;lt; 0 then&lt;br /&gt;
        j = len + j + 1;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if i &amp;gt; len or j &amp;gt; len or i &amp;lt; 1 or j &amp;lt; 1 then&lt;br /&gt;
        return str._error( &#039;Índice fuera del rango de la cadena&#039; );&lt;br /&gt;
    end&lt;br /&gt;
    if j &amp;lt; i then&lt;br /&gt;
        return str._error( &#039;Índices de la cadena no ordenados&#039; );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return mw.ustring.sub( s, i, j )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
match&lt;br /&gt;
&lt;br /&gt;
Parametros&lt;br /&gt;
   s: cadena donde se hace la búsqueda &lt;br /&gt;
   pattern: patrón o cadena a buscar. &lt;br /&gt;
   start: índice de la cadena dónde empezar a buscar, por defecto 1, el primer carácter. &lt;br /&gt;
   match: si se encuentran múltiples coincidencias, especifica cuál de ellas devolver. Por defecto es 1, l&lt;br /&gt;
       la primera coincidencia encontrada. Un número negativo cuenta desde el final, por lo tanto &lt;br /&gt;
       match = -1 es la última coincidencia. &lt;br /&gt;
   plain: indica si el patrón debe interpretarse como texto limpio, por defecto &#039;false&#039;. nomatch: en caso de &lt;br /&gt;
       no encontrar ninguna coincidencia, devuelve el valor de &amp;quot;nomatch&amp;quot; en lugar de un error. &lt;br /&gt;
       Si el número match o el índice start están fuera del rango de la cadena, entonces la función genera un error. &lt;br /&gt;
       También genera un error si no encuentra ninguna coincidencia. &lt;br /&gt;
       Con el parámetro global ignore_errors = true se suprime el    &lt;br /&gt;
       error y devuelve una cadena vacía.&lt;br /&gt;
]]&lt;br /&gt;
function str.match( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&#039;s&#039;, &#039;pattern&#039;, &#039;start&#039;, &#039;match&#039;, &#039;plain&#039;, &#039;nomatch&#039;} );&lt;br /&gt;
    local s = new_args[&#039;s&#039;] or &#039;&#039;;&lt;br /&gt;
    local start = tonumber( new_args[&#039;start&#039;] ) or 1;&lt;br /&gt;
    local plain_flag = str._getBoolean( new_args[&#039;plain&#039;] or false );&lt;br /&gt;
    local pattern = new_args[&#039;pattern&#039;] or &#039;&#039;;&lt;br /&gt;
    local match_index = math.floor( tonumber(new_args[&#039;match&#039;]) or 1 );&lt;br /&gt;
    local nomatch = new_args[&#039;nomatch&#039;];&lt;br /&gt;
    &lt;br /&gt;
    if s == &#039;&#039; then&lt;br /&gt;
        return str._error( &#039;La cadena donde buscar está vacía&#039; );&lt;br /&gt;
    end&lt;br /&gt;
    if pattern == &#039;&#039; then&lt;br /&gt;
        return str._error( &#039;La cadena de búsqueda está vacía &#039; );&lt;br /&gt;
    end&lt;br /&gt;
    if math.abs(start) &amp;lt; 1 or math.abs(start) &amp;gt; mw.ustring.len( s ) then&lt;br /&gt;
        return str._error( &#039;Índice d\&#039;inicio fuera del rango de la cadena &#039; );&lt;br /&gt;
    end&lt;br /&gt;
    if match_index == 0 then&lt;br /&gt;
        return str._error( &#039;Número de coincidencias fuera de rango&#039; );&lt;br /&gt;
    end&lt;br /&gt;
    if plain_flag then&lt;br /&gt;
        pattern = str._escapePattern( pattern );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local result&lt;br /&gt;
    if match_index == 1 then&lt;br /&gt;
        -- Encontrar la primera coincidencia es un caso sencillo.&lt;br /&gt;
        result = mw.ustring.match( s, pattern, start )&lt;br /&gt;
    else&lt;br /&gt;
        if start &amp;gt; 1 then&lt;br /&gt;
            s = mw.ustring.sub( s, start );&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        local iterator = mw.ustring.gmatch(s, pattern);&lt;br /&gt;
        if match_index &amp;gt; 0 then&lt;br /&gt;
            -- Búsqueda hacia adelante&lt;br /&gt;
            for w in iterator do&lt;br /&gt;
                match_index = match_index - 1;&lt;br /&gt;
                if match_index == 0 then&lt;br /&gt;
                    result = w;&lt;br /&gt;
                    break;&lt;br /&gt;
                end&lt;br /&gt;
            end    &lt;br /&gt;
        else&lt;br /&gt;
            -- Invierte búsqueda&lt;br /&gt;
            local result_table = {};&lt;br /&gt;
            local count = 1;&lt;br /&gt;
            for w in iterator do&lt;br /&gt;
                result_table[count] = w;&lt;br /&gt;
                count = count + 1;&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            result = result_table[ count + match_index ];            &lt;br /&gt;
        end&lt;br /&gt;
    end        &lt;br /&gt;
    &lt;br /&gt;
    if result == nil then&lt;br /&gt;
        if nomatch == nil then&lt;br /&gt;
            return str._error( &#039;Ninguna coincidencia encontrada&#039; );&lt;br /&gt;
        else&lt;br /&gt;
            return nomatch;&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        return result;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
pos&lt;br /&gt;
&lt;br /&gt;
Parámetros&lt;br /&gt;
   target: Cadena donde buscar. &lt;br /&gt;
   pos: Índice del carácter a devolver. &lt;br /&gt;
]]&lt;br /&gt;
function str.pos( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&#039;target&#039;, &#039;pos&#039;} );&lt;br /&gt;
    local target_str = new_args[&#039;target&#039;] or &#039;&#039;;&lt;br /&gt;
    local pos = tonumber( new_args[&#039;pos&#039;] ) or 0;&lt;br /&gt;
&lt;br /&gt;
    if pos == 0 or math.abs(pos) &amp;gt; mw.ustring.len( target_str ) then&lt;br /&gt;
        return str._error( &#039;Índice fuera del rango de la cadena&#039; );&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    return mw.ustring.sub( target_str, pos, pos );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
find&lt;br /&gt;
&lt;br /&gt;
Parametros&lt;br /&gt;
    source: Cadena donde buscar. &lt;br /&gt;
    target: Cadena a buscar o patrón de búsqueda. &lt;br /&gt;
    start: Índice de la cadena fuente donde empezar a buscar, por defecto 1, el primer carácter. &lt;br /&gt;
    plain: Indica si la búsqueda debe interpretarse como texto limpio, de lo contrario como patrón Lua. &lt;br /&gt;
        Por defecto es &#039;true&#039;.&lt;br /&gt;
]]&lt;br /&gt;
function str.find( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&#039;source&#039;, &#039;target&#039;, &#039;start&#039;, &#039;plain&#039; } ); &lt;br /&gt;
    local source_str = new_args[&#039;source&#039;] or &#039;&#039;;&lt;br /&gt;
    local pattern = new_args[&#039;target&#039;] or &#039;&#039;;&lt;br /&gt;
    local start_pos = tonumber(new_args[&#039;start&#039;]) or 1;&lt;br /&gt;
    local plain = new_args[&#039;plain&#039;] or true;&lt;br /&gt;
        &lt;br /&gt;
    if source_str == &#039;&#039; or pattern == &#039;&#039; then&lt;br /&gt;
        return 0;&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    plain = str._getBoolean( plain );&lt;br /&gt;
&lt;br /&gt;
    local start = mw.ustring.find( source_str, pattern, start_pos, plain )&lt;br /&gt;
    if start == nil then&lt;br /&gt;
        start = 0&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return start&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
replace&lt;br /&gt;
&lt;br /&gt;
Parámetros&lt;br /&gt;
    source: Cadena donde buscar &lt;br /&gt;
    pattern: Cadena de búsqueda o patrón a buscar &lt;br /&gt;
    replace: Texto de reemplazo &lt;br /&gt;
    count: Número de ocurrencias a reemplazar, por defecto todas. &lt;br /&gt;
    plain: Indica si la búsqueda debe interpretarse como texto limpio, de lo contrario como patrón Lua. Por &lt;br /&gt;
        defecto es &#039;true&#039; &lt;br /&gt;
]]&lt;br /&gt;
function str.replace( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&#039;source&#039;, &#039;pattern&#039;, &#039;replace&#039;, &#039;count&#039;, &#039;plain&#039; } ); &lt;br /&gt;
    local source_str = new_args[&#039;source&#039;] or &#039;&#039;;&lt;br /&gt;
    local pattern = new_args[&#039;pattern&#039;] or &#039;&#039;;&lt;br /&gt;
    local replace = new_args[&#039;replace&#039;] or &#039;&#039;;&lt;br /&gt;
    local count = tonumber( new_args[&#039;count&#039;] );&lt;br /&gt;
    local plain = new_args[&#039;plain&#039;] or true;&lt;br /&gt;
        &lt;br /&gt;
    if source_str == &#039;&#039; or pattern == &#039;&#039; then&lt;br /&gt;
        return source_str;&lt;br /&gt;
    end    &lt;br /&gt;
    plain = str._getBoolean( plain );&lt;br /&gt;
&lt;br /&gt;
    if plain then&lt;br /&gt;
        pattern = str._escapePattern( pattern );&lt;br /&gt;
        replace = mw.ustring.gsub( replace, &amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot; ); --Sólo es necesario secuencias de escape.&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local result;&lt;br /&gt;
&lt;br /&gt;
    if count ~= nil then&lt;br /&gt;
        result = mw.ustring.gsub( source_str, pattern, replace, count );&lt;br /&gt;
    else&lt;br /&gt;
        result = mw.ustring.gsub( source_str, pattern, replace );&lt;br /&gt;
    end        &lt;br /&gt;
&lt;br /&gt;
    return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
count&lt;br /&gt;
&lt;br /&gt;
Esta funsción cuenta el número de existencias de un carácter o una cadena (no supuerpuestos) dentro de otra cadena.&lt;br /&gt;
]]&lt;br /&gt;
function str.count(frame)&lt;br /&gt;
	local args = str._getParameters(frame.args, {&#039;source&#039;, &#039;pattern&#039;, &#039;plain&#039;})&lt;br /&gt;
	local source = args.source or &#039;&#039;&lt;br /&gt;
	local pattern = args.pattern or &#039;&#039;&lt;br /&gt;
	local plain = str._getBoolean(args.plain or true)&lt;br /&gt;
	if plain then&lt;br /&gt;
		pattern = str._escapePattern(pattern)&lt;br /&gt;
	end&lt;br /&gt;
	local _, count = mw.ustring.gsub(source, pattern, &#039;&#039;)&lt;br /&gt;
	return count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function str.mayuscula(frame) -- Convierte en mayúsculas la primera letra que aparece en la edición de una cadena&lt;br /&gt;
    local s = frame.args[1] or &#039;&#039;;&lt;br /&gt;
    if s  ~= &#039;&#039; then        &lt;br /&gt;
        local cambio = {};&lt;br /&gt;
        local modo = {};&lt;br /&gt;
        if string.find(s, &#039;|&#039;) ~= nil then -- Enlaces con etiqueta&lt;br /&gt;
            modo = string.upper(string.match(s,&#039;(|%a)&#039;));&lt;br /&gt;
            cambio = string.gsub(s,&#039;|%a&#039;, modo,1);&lt;br /&gt;
        elseif string.find(s, &#039;[[]&#039;) ~= nil then -- Enlaces sin etiqueta&lt;br /&gt;
            modo = string.upper(string.match(s,&#039;^(..%a)&#039;));&lt;br /&gt;
            cambio = string.gsub(s,&#039;^..%a&#039;, modo,1);&lt;br /&gt;
        elseif string.match(s,&#039;^%a&#039;) ~= nil then -- Sin enlace&lt;br /&gt;
           modo = string.upper(string.match(s,&#039;^(%a)&#039;));&lt;br /&gt;
           cambio = string.gsub(s,&#039;^%a&#039;, modo, 1);&lt;br /&gt;
        else&lt;br /&gt;
           cambio = s;&lt;br /&gt;
        end&lt;br /&gt;
        return cambio;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Función de ayuda que rellena la lista de argumentos, para que el usuario pueda utilizar una combinación de&lt;br /&gt;
 parámetros con nombre y sin nombre. Esto es importante porque los parámetros con nombre no funcionan igual &lt;br /&gt;
 que los parámetros sin nombre cuando se encadenan recortes, y cuando se trata de cadenas&lt;br /&gt;
 a veces se debe conservar o quitar espacios en blanco dependiendo de la aplicación. &lt;br /&gt;
]]&lt;br /&gt;
function str._getParameters( frame_args, arg_list )&lt;br /&gt;
    local new_args = {};&lt;br /&gt;
    local index = 1;&lt;br /&gt;
    local value;&lt;br /&gt;
    &lt;br /&gt;
    for i,arg in ipairs( arg_list ) do&lt;br /&gt;
        value = frame_args[arg]&lt;br /&gt;
        if value == nil then&lt;br /&gt;
            value = frame_args[index];&lt;br /&gt;
            index = index + 1;&lt;br /&gt;
        end&lt;br /&gt;
        new_args[arg] = value;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return new_args;&lt;br /&gt;
end        &lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Función de ayuda para controlar los mensajes de error.&lt;br /&gt;
]]&lt;br /&gt;
function str._error( error_str )&lt;br /&gt;
    local frame = mw.getCurrentFrame();&lt;br /&gt;
    local error_category = frame.args.error_category or &#039;Errores detectados por el módulo String&#039;;&lt;br /&gt;
    local ignore_errors = frame.args.ignore_errors or false;&lt;br /&gt;
    local no_category = frame.args.no_category or false;&lt;br /&gt;
    &lt;br /&gt;
    if str._getBoolean(ignore_errors) then&lt;br /&gt;
        return &#039;&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local error_str = &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Error del módulo String: &#039; .. error_str .. &#039;&amp;lt;/strong&amp;gt;&#039;;&lt;br /&gt;
    if error_category ~= &#039;&#039; and not str._getBoolean( no_category ) then&lt;br /&gt;
        error_str = &#039;[[Categoría:Wikipedia:&#039; .. error_category .. &#039;]]&#039; .. error_str;&lt;br /&gt;
    end        &lt;br /&gt;
    &lt;br /&gt;
    return error_str;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Función de ayuda para interpretar cadenas booleanas.&lt;br /&gt;
]]&lt;br /&gt;
function str._getBoolean( boolean_str )&lt;br /&gt;
    local boolean_value;&lt;br /&gt;
    &lt;br /&gt;
    if type( boolean_str ) == &#039;string&#039; then&lt;br /&gt;
        boolean_str = boolean_str:lower();&lt;br /&gt;
        if boolean_str == &#039;false&#039; or boolean_str == &#039;no&#039; or boolean_str == &#039;0&#039; &lt;br /&gt;
                or boolean_str == &#039;&#039; then&lt;br /&gt;
            boolean_value = false;&lt;br /&gt;
        else&lt;br /&gt;
            boolean_value = true;&lt;br /&gt;
        end    &lt;br /&gt;
    elseif type( boolean_str ) == &#039;boolean&#039; then&lt;br /&gt;
        boolean_value = boolean_str;&lt;br /&gt;
    else&lt;br /&gt;
        error( &#039;Ningún valor booleano encontrado&#039; );&lt;br /&gt;
    end    &lt;br /&gt;
    return boolean_value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Función de ayuda que escapa a todos los caracteres de patrón para que puedan ser tratados&lt;br /&gt;
como texto sin formato.&lt;br /&gt;
]]&lt;br /&gt;
function str._escapePattern( pattern_str )&lt;br /&gt;
    return mw.ustring.gsub( pattern_str, &amp;quot;([%(%)%.%%%+%-%*%?%[%^%$%]])&amp;quot;, &amp;quot;%%%1&amp;quot; );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return str&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:Math&amp;diff=218123</id>
		<title>Módulo:Math</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:Math&amp;diff=218123"/>
		<updated>2026-02-06T19:13:56Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
&lt;br /&gt;
Este módulo proporciona una serie de operaciones matemáticas básicas.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
local z = {}&lt;br /&gt;
&lt;br /&gt;
-- Genera un número aleatorio&lt;br /&gt;
function z.random(frame)&lt;br /&gt;
    local first = tonumber(frame.args[1])&lt;br /&gt;
    local second = tonumber(frame.args[2])&lt;br /&gt;
    local seed = tonumber(frame.args.seed)&lt;br /&gt;
    if seed then&lt;br /&gt;
        math.randomseed(seed * os.time())    -- inicialización pseudoaleatoria&lt;br /&gt;
    end&lt;br /&gt;
    if first and second then&lt;br /&gt;
        if first &amp;lt; second then&lt;br /&gt;
            return math.random(first,second)    -- entero entre [first,second]&lt;br /&gt;
        else&lt;br /&gt;
            return math.random(second,first)&lt;br /&gt;
        end&lt;br /&gt;
    elseif first then&lt;br /&gt;
        if first &amp;gt; 0 then&lt;br /&gt;
            return math.random(first)    -- entero entre [1,first]&lt;br /&gt;
        else&lt;br /&gt;
            return math.random(first,-1)&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        return math.random()    -- número real entre [0,1)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
order&lt;br /&gt;
&lt;br /&gt;
Determina el orden y la magnitud de los números&lt;br /&gt;
&lt;br /&gt;
Uso:&lt;br /&gt;
    {{#invoke: Math | order | &amp;lt;valor&amp;gt; }}&lt;br /&gt;
]]&lt;br /&gt;
function z.order(frame)&lt;br /&gt;
    local input_string = (frame.args[1] or frame.args.x or &#039;0&#039;);&lt;br /&gt;
    local input_number;&lt;br /&gt;
    &lt;br /&gt;
    input_number = z._cleanNumber( frame, input_string );&lt;br /&gt;
    if input_number == nil then&lt;br /&gt;
        return &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&amp;lt;small&amp;gt;Error de formato: El orden de magnitud debe ser numérico&amp;lt;/small&amp;gt;&amp;lt;/strong&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        return z._order( input_number )&lt;br /&gt;
    end    &lt;br /&gt;
end&lt;br /&gt;
function z._order(x)&lt;br /&gt;
    if x == 0 then return 0 end&lt;br /&gt;
    return math.floor(math.log10(math.abs(x)))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
precision&lt;br /&gt;
&lt;br /&gt;
Detemina la precisión de un número usando la representación de cadena&lt;br /&gt;
&lt;br /&gt;
Usar:&lt;br /&gt;
    {{ #invoke: Math | precision | &amp;lt;valor&amp;gt; }}&lt;br /&gt;
]]&lt;br /&gt;
function z.precision( frame )&lt;br /&gt;
    local input_string = (frame.args[1] or frame.args.x or &#039;0&#039;);&lt;br /&gt;
    local trap_fraction = frame.args.check_fraction or false;&lt;br /&gt;
    local input_number;&lt;br /&gt;
    &lt;br /&gt;
    if type( trap_fraction ) == &#039;string&#039; then&lt;br /&gt;
        trap_fraction = trap_fraction:lower();&lt;br /&gt;
        if trap_fraction == &#039;false&#039; or trap_fraction == &#039;0&#039; or&lt;br /&gt;
                trap_fraction == &#039;no&#039; or trap_fraction == &#039;&#039; then&lt;br /&gt;
            trap_fraction = false;&lt;br /&gt;
        else&lt;br /&gt;
            trap_fraction = true;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if trap_fraction then&lt;br /&gt;
        local pos = string.find( input_string, &#039;/&#039;, 1, true );&lt;br /&gt;
        if pos ~= nil then&lt;br /&gt;
            if string.find( input_string, &#039;/&#039;, pos + 1, true ) == nil then&lt;br /&gt;
                local denominator = string.sub( input_string, pos+1, -1 );&lt;br /&gt;
                local denom_value = tonumber( denominator );&lt;br /&gt;
                if denom_value ~= nil then&lt;br /&gt;
                    return math.log10(denom_value);&lt;br /&gt;
                end&lt;br /&gt;
            end                        &lt;br /&gt;
        end&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    input_number, input_string = z._cleanNumber( frame, input_string );&lt;br /&gt;
    if input_string == nil then&lt;br /&gt;
        return &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&amp;lt;small&amp;gt;Error de formato: El valor de precisión ha de ser numérico&amp;lt;/small&amp;gt;&amp;lt;/strong&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        return z._precision( input_string )&lt;br /&gt;
    end    &lt;br /&gt;
end&lt;br /&gt;
function z._precision( x )    &lt;br /&gt;
    x = string.upper( x )&lt;br /&gt;
&lt;br /&gt;
    local decimal = string.find( x, &#039;.&#039;, 1, true )&lt;br /&gt;
    local exponent_pos = string.find( x, &#039;E&#039;, 1, true )&lt;br /&gt;
    local result = 0;&lt;br /&gt;
    &lt;br /&gt;
    if exponent_pos ~= nil then&lt;br /&gt;
        local exponent = string.sub( x, exponent_pos + 1 )&lt;br /&gt;
        x = string.sub( x, 1, exponent_pos - 1 )&lt;br /&gt;
        result = result - tonumber( exponent )&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    if decimal ~= nil then&lt;br /&gt;
        result = result + string.len( x ) - decimal&lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
        &lt;br /&gt;
    local pos = string.len( x );&lt;br /&gt;
    while x:byte(pos) == string.byte(&#039;0&#039;) do&lt;br /&gt;
        pos = pos - 1&lt;br /&gt;
        result = result - 1&lt;br /&gt;
        if pos &amp;lt;= 0 then&lt;br /&gt;
            return 0&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
max&lt;br /&gt;
&lt;br /&gt;
Busca el argumento máximo&lt;br /&gt;
&lt;br /&gt;
Uso:&lt;br /&gt;
    {{#invoke:Math| max | &amp;lt;valor1&amp;gt; | &amp;lt;valor2&amp;gt; | ... }}&lt;br /&gt;
o&lt;br /&gt;
    {{#invoke:Math| max }}&lt;br /&gt;
&lt;br /&gt;
Cuando se utiliza sin argumentos, toma su entrada del marco superior. &lt;br /&gt;
Tenga en cuenta que todos los valores que no se evalúan como números son ignorados.&lt;br /&gt;
]]&lt;br /&gt;
function z.max( frame )&lt;br /&gt;
    local args = frame.args;&lt;br /&gt;
    &lt;br /&gt;
    if args[1] == nil then&lt;br /&gt;
        local parent = frame:getParent();&lt;br /&gt;
        args = parent.args;&lt;br /&gt;
    end&lt;br /&gt;
    local max_value = nil;&lt;br /&gt;
    &lt;br /&gt;
    local i = 1;&lt;br /&gt;
    while args[i] ~= nil do&lt;br /&gt;
        local val = z._cleanNumber( frame, args[i] );&lt;br /&gt;
        if val ~= nil then&lt;br /&gt;
            if max_value == nil or val &amp;gt; max_value then&lt;br /&gt;
                max_value = val;&lt;br /&gt;
            end&lt;br /&gt;
        end        &lt;br /&gt;
        i = i + 1;&lt;br /&gt;
    end&lt;br /&gt;
  &lt;br /&gt;
    return max_value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
min &lt;br /&gt;
&lt;br /&gt;
Busca el argumento mínimo&lt;br /&gt;
&lt;br /&gt;
Uso:&lt;br /&gt;
    {{#invoke:Math| min | &amp;lt;valor1&amp;gt; | &amp;lt;valor2&amp;gt; | ... }}&lt;br /&gt;
o&lt;br /&gt;
    {{#invoke:Math| min }}&lt;br /&gt;
&lt;br /&gt;
Cuando se utiliza sin argumentos, toma su entrada del marco superior. &lt;br /&gt;
Tenga en cuenta que todos los valores que no se evalúan como números son ignorados&lt;br /&gt;
]]&lt;br /&gt;
function z.min( frame )&lt;br /&gt;
    local args = frame.args;&lt;br /&gt;
    &lt;br /&gt;
    if args[1] == nil then&lt;br /&gt;
        local parent = frame:getParent();&lt;br /&gt;
        args = parent.args;&lt;br /&gt;
    end&lt;br /&gt;
    local min_value = nil;&lt;br /&gt;
    &lt;br /&gt;
    local i = 1;&lt;br /&gt;
    while args[i] ~= nil do&lt;br /&gt;
        local val = z._cleanNumber( frame, args[i] );&lt;br /&gt;
        if val ~= nil then&lt;br /&gt;
            if min_value == nil or val &amp;lt; min_value then&lt;br /&gt;
                min_value = val;&lt;br /&gt;
            end&lt;br /&gt;
        end        &lt;br /&gt;
        i = i + 1;&lt;br /&gt;
    end&lt;br /&gt;
  &lt;br /&gt;
    return min_value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Función que cuenta el número de parámetros informados&lt;br /&gt;
function z.cuenta( frame )&lt;br /&gt;
    local resultado = 0;&lt;br /&gt;
    local Argumentos = frame.args;&lt;br /&gt;
    &lt;br /&gt;
    if Argumentos[1] == nil then&lt;br /&gt;
        local parent = frame:getParent();&lt;br /&gt;
        Argumentos = parent.args;&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    local i = 1;&lt;br /&gt;
    while Argumentos[i] ~= nil do&lt;br /&gt;
      if Argumentos[i] ~= &#039;&#039; then 	&lt;br /&gt;
    	resultado = resultado + 1&lt;br /&gt;
	  end&lt;br /&gt;
	  &lt;br /&gt;
	  i = i + 1;&lt;br /&gt;
    end&lt;br /&gt;
  &lt;br /&gt;
    return resultado&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Función que suma los parámetros&lt;br /&gt;
function z.suma( frame )&lt;br /&gt;
    local resultado = 0;&lt;br /&gt;
    local Argumentos = frame.args;&lt;br /&gt;
    &lt;br /&gt;
    if Argumentos[1] == nil then&lt;br /&gt;
        local parent = frame:getParent();&lt;br /&gt;
        Argumentos = parent.args;&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    local i = 1;&lt;br /&gt;
    while Argumentos[i] ~= nil do&lt;br /&gt;
      if Argumentos[i] ~= &#039;&#039; then 	&lt;br /&gt;
    	resultado = resultado +  Argumentos[i]&lt;br /&gt;
	  end&lt;br /&gt;
	  &lt;br /&gt;
	  i = i + 1;&lt;br /&gt;
    end&lt;br /&gt;
  &lt;br /&gt;
    return resultado&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
round&lt;br /&gt;
&lt;br /&gt;
Redondea un número a la precisión especificada&lt;br /&gt;
&lt;br /&gt;
Uso:&lt;br /&gt;
    {{#invoke:Math | round | &amp;lt;valor&amp;gt; | &amp;lt;precisión&amp;gt; }}&lt;br /&gt;
    &lt;br /&gt;
--]]&lt;br /&gt;
function z.round(frame)&lt;br /&gt;
    local value, precision;&lt;br /&gt;
    &lt;br /&gt;
    value = z._cleanNumber( frame, frame.args[1] or frame.args.value or 0 );&lt;br /&gt;
    precision = z._cleanNumber( frame, frame.args[2] or frame.args.precision or 0 );&lt;br /&gt;
    &lt;br /&gt;
    if value == nil or precision == nil then&lt;br /&gt;
        return &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&amp;lt;small&amp;gt;Error de formato: Los valores han de ser numéricos&amp;lt;/small&amp;gt;&amp;lt;/strong&amp;gt;&#039;&lt;br /&gt;
    else&lt;br /&gt;
        return z._round( value, precision );&lt;br /&gt;
    end    &lt;br /&gt;
end&lt;br /&gt;
function z._round( value, precision )&lt;br /&gt;
    local rescale = math.pow( 10, precision );&lt;br /&gt;
    return math.floor( value * rescale + 0.5 ) / rescale;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
precision_format&lt;br /&gt;
&lt;br /&gt;
Redondea un número a la precisión especificada y le da formato de acuerdo con las normas&lt;br /&gt;
originalmente utilizado para {{Plantilla: Rnd}}. La salida es una cadena.&lt;br /&gt;
Uso:&lt;br /&gt;
    {{#invoke: Math | precision_format | &amp;lt;número&amp;gt; | &amp;lt;precisión&amp;gt; }}&lt;br /&gt;
]]&lt;br /&gt;
function z.precision_format( frame )&lt;br /&gt;
    -- Para acceder a Mediawiki incorporando formateador.&lt;br /&gt;
    local lang = mw.getContentLanguage();&lt;br /&gt;
    &lt;br /&gt;
    local value_string, value, precision;&lt;br /&gt;
    value, value_string = z._cleanNumber( frame, frame.args[1] or 0 );&lt;br /&gt;
    precision = z._cleanNumber( frame, frame.args[2] or 0 );&lt;br /&gt;
    &lt;br /&gt;
    -- Comprueba una entrada no numérica&lt;br /&gt;
    if value == nil or precision == nil then&lt;br /&gt;
        return &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&amp;lt;small&amp;gt;Error de formato: Datos no válidos para redondear&amp;lt;/small&amp;gt;&amp;lt;/strong&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local current_precision = z._precision( value );&lt;br /&gt;
&lt;br /&gt;
    local order = z._order( value );&lt;br /&gt;
    &lt;br /&gt;
    -- Debido a los efectos de redondeo, es necesario limitar la precisión devuelta bajo&lt;br /&gt;
    -- algunas circunstancias, debido a que sobre los dígitos terminales se informó incorrectamente.&lt;br /&gt;
    if order + precision &amp;gt;= 14 then&lt;br /&gt;
        orig_precision = z._precision( value_string );&lt;br /&gt;
        if order + orig_precision &amp;gt;= 14 then&lt;br /&gt;
            precision = 13 - order;        &lt;br /&gt;
        end        &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Si el redondeo, trunca dígitos adicionales&lt;br /&gt;
    if precision &amp;lt; current_precision then&lt;br /&gt;
        value = z._round( value, precision );&lt;br /&gt;
        current_precision = z._precision( value );&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    local formatted_num = lang:formatNum( math.abs(value) );&lt;br /&gt;
    local sign;&lt;br /&gt;
    &lt;br /&gt;
    -- Utiliza el signo menos unario apropiado antes que el ASCII por defecto&lt;br /&gt;
    if value &amp;lt; 0 then&lt;br /&gt;
        sign = &#039;−&#039;;&lt;br /&gt;
    else&lt;br /&gt;
        sign = &#039;&#039;;&lt;br /&gt;
    end    &lt;br /&gt;
        &lt;br /&gt;
    -- Manejar los casos que requieren la notación científica&lt;br /&gt;
    if string.find( formatted_num, &#039;E&#039;, 1, true ) ~= nil or math.abs(order) &amp;gt;= 9 then&lt;br /&gt;
        value = value * math.pow( 10, -order );&lt;br /&gt;
        current_precision = current_precision + order;&lt;br /&gt;
        precision = precision + order;&lt;br /&gt;
        formatted_num = lang:formatNum( math.abs(value) );&lt;br /&gt;
    else&lt;br /&gt;
        order = 0;        &lt;br /&gt;
    end&lt;br /&gt;
    formatted_num = sign .. formatted_num;&lt;br /&gt;
    &lt;br /&gt;
    -- Pad con ceros si es necesario    &lt;br /&gt;
    if current_precision &amp;lt; precision then&lt;br /&gt;
        local padding;&lt;br /&gt;
        if current_precision &amp;lt;= 0 then&lt;br /&gt;
            if precision &amp;gt; 0 then&lt;br /&gt;
                local zero_sep = lang:formatNum( 1.1 );&lt;br /&gt;
                formatted_num = formatted_num .. zero_sep:sub(2,2);&lt;br /&gt;
&lt;br /&gt;
                padding = precision;&lt;br /&gt;
                if padding &amp;gt; 20 then&lt;br /&gt;
                    padding = 20;&lt;br /&gt;
                end&lt;br /&gt;
                &lt;br /&gt;
                formatted_num = formatted_num .. string.rep( &#039;0&#039;, padding );&lt;br /&gt;
            end            &lt;br /&gt;
        else                   &lt;br /&gt;
            padding = precision - current_precision&lt;br /&gt;
            if padding &amp;gt; 20 then&lt;br /&gt;
                padding = 20;&lt;br /&gt;
            end&lt;br /&gt;
            formatted_num = formatted_num .. string.rep( &#039;0&#039;, padding );&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Añade notación exponencial, si es necesario&lt;br /&gt;
    if order ~= 0 then&lt;br /&gt;
        -- Utiliza el signo menos unario apropiado antes que el ASCII por defecto&lt;br /&gt;
        if order &amp;lt; 0 then&lt;br /&gt;
            order = &#039;−&#039; .. lang:formatNum( math.abs(order) );&lt;br /&gt;
        else&lt;br /&gt;
            order = lang:formatNum( order );&lt;br /&gt;
        end    &lt;br /&gt;
        &lt;br /&gt;
        formatted_num = formatted_num .. &#039;&amp;lt;span style=&amp;quot;margin:0 .15em 0 .25em&amp;quot;&amp;gt;×&amp;lt;/span&amp;gt;10&amp;lt;sup&amp;gt;&#039; .. order .. &#039;&amp;lt;/sup&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return formatted_num;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Función de ayuda que interpreta la entrada numérica. &lt;br /&gt;
Si la entrada no es un número, lo intenta evaluar como&lt;br /&gt;
un «parser function» (Analizador sintáctico).&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function z._cleanNumber( frame, number_string )&lt;br /&gt;
    if number_string == nil or number_string:len() == 0 then&lt;br /&gt;
        return nil, nil;&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    -- Intenta la conversión básica&lt;br /&gt;
    local number = tonumber( number_string )&lt;br /&gt;
    &lt;br /&gt;
    -- Si falla, trata de evaluar la entrada como expresión&lt;br /&gt;
    if number == nil then        &lt;br /&gt;
        local attempt = frame:preprocess( &#039;{{#expr: &#039; .. number_string .. &#039;}}&#039; );&lt;br /&gt;
        attempt = tonumber( attempt );&lt;br /&gt;
        if attempt ~= nil then&lt;br /&gt;
            number = attempt;&lt;br /&gt;
            number_string = tostring( number );&lt;br /&gt;
        else&lt;br /&gt;
            number = nil;&lt;br /&gt;
            number_string = nil;&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
    -- La cadena es válida pero puede contener relleno, límpiela.&lt;br /&gt;
        number_string = number_string:match( &amp;quot;^%s*(.-)%s*$&amp;quot; );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return number, number_string;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return z&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:Identificadores&amp;diff=218122</id>
		<title>Módulo:Identificadores</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:Identificadores&amp;diff=218122"/>
		<updated>2026-02-06T19:13:55Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
ISBN-10 and ISSN validator code calculates checksum across all isbn/issn digits including the check digit. ISBN-13 is checked in checkisbn().&lt;br /&gt;
If the number is valid the result will be 0. Before calling this function, issbn/issn must be checked for length and stripped of dashes,&lt;br /&gt;
spaces and other non-isxn characters.&lt;br /&gt;
]]&lt;br /&gt;
-- Función traída de en:Module:Citation/CS1&lt;br /&gt;
&lt;br /&gt;
function p.esValidoISXN (isxn_str, len)&lt;br /&gt;
	local temp = 0;&lt;br /&gt;
	isxn_str = { isxn_str:byte(1, len) };	-- make a table of bytes&lt;br /&gt;
	len = len+1;							-- adjust to be a loop counter&lt;br /&gt;
	for i, v in ipairs( isxn_str ) do		-- loop through all of the bytes and calculate the checksum&lt;br /&gt;
		if v == string.byte( &amp;quot;X&amp;quot; ) then		-- if checkdigit is X&lt;br /&gt;
			temp = temp + 10*( len - i );	-- it represents 10 decimal&lt;br /&gt;
		else&lt;br /&gt;
			temp = temp + tonumber( string.char(v) )*(len-i);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return temp % 11 == 0;					-- returns true if calculation result is zero&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Adaptación de la función checkisbn de en:Module:Citation/CS1&lt;br /&gt;
function p.esValidoISBN(isbn)&lt;br /&gt;
	-- El isbn solo contiene números, guiones, espacios en blanco y el dígito de &lt;br /&gt;
	-- control X.&lt;br /&gt;
	&lt;br /&gt;
	if not isbn or isbn:match(&amp;quot;[^%s-0-9X]&amp;quot;)  then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Eliminar los guiones y espacios en blanco&lt;br /&gt;
	&lt;br /&gt;
	isbn = isbn:gsub( &amp;quot;-&amp;quot;, &amp;quot;&amp;quot; ):gsub( &amp;quot; &amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
	local longitud = isbn:len()&lt;br /&gt;
 &lt;br /&gt;
	if longitud == 10 then&lt;br /&gt;
		-- La X solo puede ir al final.&lt;br /&gt;
		if not isbn:match( &amp;quot;^%d*X?$&amp;quot; ) then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
		return p.esValidoISXN(isbn, 10);&lt;br /&gt;
	elseif longitud == 13 then -- isbn13&lt;br /&gt;
		local temp = 0;&lt;br /&gt;
		-- Debe comenzar por 978 o 979&lt;br /&gt;
		if not isbn:match( &amp;quot;^97[89]%d*$&amp;quot; ) then &lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Comprobar el dígito de control&lt;br /&gt;
		isbn = { isbn:byte(1, longitud) };&lt;br /&gt;
		for i, v in ipairs( isbn ) do&lt;br /&gt;
			temp = temp + (3 - 2*(i % 2)) * tonumber( string.char(v) );&lt;br /&gt;
		end&lt;br /&gt;
		return temp % 10 == 0;&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Función que devuelve un enlace al ISBN si es correcto y si no (por ejemplo si&lt;br /&gt;
-- ya está enlazado) lo devuelve sin más.&lt;br /&gt;
-- Por defecto no se incluye el literal ISBN delante.&lt;br /&gt;
&lt;br /&gt;
function p.enlazarISBN(isbn, opciones)&lt;br /&gt;
    if p.esValidoISBN(isbn) then&lt;br /&gt;
        return &#039;[[Especial:FuentesDeLibros/&#039; .. isbn .. &#039;|&#039; .. isbn .. &#039;]]&#039;&lt;br /&gt;
    else&lt;br /&gt;
    	return isbn&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.enlazarOCLC(oclc, opciones)&lt;br /&gt;
    if tonumber(oclc) then&lt;br /&gt;
        return &#039;[http://www.worldcat.org/oclc/&#039; .. oclc .. &#039; &#039; .. oclc .. &#039;]&#039;&lt;br /&gt;
    else&lt;br /&gt;
    	return oclc&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:Date&amp;diff=218121</id>
		<title>Módulo:Date</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:Date&amp;diff=218121"/>
		<updated>2026-02-06T19:13:54Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Date functions for use by other modules.&lt;br /&gt;
-- I18N and time zones are not supported.&lt;br /&gt;
&lt;br /&gt;
local MINUS = &#039;−&#039;  -- Unicode U+2212 MINUS SIGN&lt;br /&gt;
local floor = math.floor&lt;br /&gt;
&lt;br /&gt;
local Date, DateDiff, diffmt  -- forward declarations&lt;br /&gt;
local uniq = { &#039;unique identifier&#039; }&lt;br /&gt;
&lt;br /&gt;
local function is_date(t)&lt;br /&gt;
	-- The system used to make a date read-only means there is no unique&lt;br /&gt;
	-- metatable that is conveniently accessible to check.&lt;br /&gt;
	return type(t) == &#039;table&#039; and t._id == uniq&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function is_diff(t)&lt;br /&gt;
	return type(t) == &#039;table&#039; and getmetatable(t) == diffmt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _list_join(list, sep)&lt;br /&gt;
	return table.concat(list, sep)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function collection()&lt;br /&gt;
	-- Return a table to hold items.&lt;br /&gt;
	return {&lt;br /&gt;
		n = 0,&lt;br /&gt;
		add = function (self, item)&lt;br /&gt;
			self.n = self.n + 1&lt;br /&gt;
			self[self.n] = item&lt;br /&gt;
		end,&lt;br /&gt;
		join = _list_join,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function strip_to_nil(text)&lt;br /&gt;
	-- If text is a string, return its trimmed content, or nil if empty.&lt;br /&gt;
	-- Otherwise return text (convenient when Date fields are provided from&lt;br /&gt;
	-- another module which may pass a string, a number, or another type).&lt;br /&gt;
	if type(text) == &#039;string&#039; then&lt;br /&gt;
		text = text:match(&#039;(%S.-)%s*$&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function is_leap_year(year, calname)&lt;br /&gt;
	-- Return true if year is a leap year.&lt;br /&gt;
	if calname == &#039;Julian&#039; then&lt;br /&gt;
		return year % 4 == 0&lt;br /&gt;
	end&lt;br /&gt;
	return (year % 4 == 0 and year % 100 ~= 0) or year % 400 == 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function days_in_month(year, month, calname)&lt;br /&gt;
	-- Return number of days (1..31) in given month (1..12).&lt;br /&gt;
	if month == 2 and is_leap_year(year, calname) then&lt;br /&gt;
		return 29&lt;br /&gt;
	end&lt;br /&gt;
	return ({ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 })[month]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function h_m_s(time)&lt;br /&gt;
	-- Return hour, minute, second extracted from fraction of a day.&lt;br /&gt;
	time = floor(time * 24 * 3600 + 0.5)  -- number of seconds&lt;br /&gt;
	local second = time % 60&lt;br /&gt;
	time = floor(time / 60)&lt;br /&gt;
	return floor(time / 60), time % 60, second&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hms(date)&lt;br /&gt;
	-- Return fraction of a day from date&#039;s time, where (0 &amp;lt;= fraction &amp;lt; 1)&lt;br /&gt;
	-- if the values are valid, but could be anything if outside range.&lt;br /&gt;
	return (date.hour + (date.minute + date.second / 60) / 60) / 24&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function julian_date(date)&lt;br /&gt;
	-- Return jd, jdz from a Julian or Gregorian calendar date where&lt;br /&gt;
	--   jd = Julian date and its fractional part is zero at noon&lt;br /&gt;
	--   jdz = same, but assume time is 00:00:00 if no time given&lt;br /&gt;
	-- http://www.tondering.dk/claus/cal/julperiod.php#formula&lt;br /&gt;
	-- Testing shows this works for all dates from year -9999 to 9999!&lt;br /&gt;
	-- JDN 0 is the 24-hour period starting at noon UTC on Monday&lt;br /&gt;
	--    1 January 4713 BC  = (-4712, 1, 1)   Julian calendar&lt;br /&gt;
	--   24 November 4714 BC = (-4713, 11, 24) Gregorian calendar&lt;br /&gt;
	local offset&lt;br /&gt;
	local a = floor((14 - date.month)/12)&lt;br /&gt;
	local y = date.year + 4800 - a&lt;br /&gt;
	if date.calendar == &#039;Julian&#039; then&lt;br /&gt;
		offset = floor(y/4) - 32083&lt;br /&gt;
	else&lt;br /&gt;
		offset = floor(y/4) - floor(y/100) + floor(y/400) - 32045&lt;br /&gt;
	end&lt;br /&gt;
	local m = date.month + 12*a - 3&lt;br /&gt;
	local jd = date.day + floor((153*m + 2)/5) + 365*y + offset&lt;br /&gt;
	if date.hastime then&lt;br /&gt;
		jd = jd + hms(date) - 0.5&lt;br /&gt;
		return jd, jd&lt;br /&gt;
	end&lt;br /&gt;
	return jd, jd - 0.5&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function set_date_from_jd(date)&lt;br /&gt;
	-- Set the fields of table date from its Julian date field.&lt;br /&gt;
	-- Return true if date is valid.&lt;br /&gt;
	-- http://www.tondering.dk/claus/cal/julperiod.php#formula&lt;br /&gt;
	-- This handles the proleptic Julian and Gregorian calendars.&lt;br /&gt;
	-- Negative Julian dates are not defined but they work.&lt;br /&gt;
	local calname = date.calendar&lt;br /&gt;
	local low, high  -- min/max limits for date ranges −9999-01-01 to 9999-12-31&lt;br /&gt;
	if calname == &#039;Gregorian&#039; then&lt;br /&gt;
		low, high = -1930999.5, 5373484.49999&lt;br /&gt;
	elseif calname == &#039;Julian&#039; then&lt;br /&gt;
		low, high = -1931076.5, 5373557.49999&lt;br /&gt;
	else&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local jd = date.jd&lt;br /&gt;
	if not (type(jd) == &#039;number&#039; and low &amp;lt;= jd and jd &amp;lt;= high) then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local jdn = floor(jd)&lt;br /&gt;
	if date.hastime then&lt;br /&gt;
		local time = jd - jdn  -- 0 &amp;lt;= time &amp;lt; 1&lt;br /&gt;
		if time &amp;gt;= 0.5 then    -- if at or after midnight of next day&lt;br /&gt;
			jdn = jdn + 1&lt;br /&gt;
			time = time - 0.5&lt;br /&gt;
		else&lt;br /&gt;
			time = time + 0.5&lt;br /&gt;
		end&lt;br /&gt;
		date.hour, date.minute, date.second = h_m_s(time)&lt;br /&gt;
	else&lt;br /&gt;
		date.second = 0&lt;br /&gt;
		date.minute = 0&lt;br /&gt;
		date.hour = 0&lt;br /&gt;
	end&lt;br /&gt;
	local b, c&lt;br /&gt;
	if calname == &#039;Julian&#039; then&lt;br /&gt;
		b = 0&lt;br /&gt;
		c = jdn + 32082&lt;br /&gt;
	else  -- Gregorian&lt;br /&gt;
		local a = jdn + 32044&lt;br /&gt;
		b = floor((4*a + 3)/146097)&lt;br /&gt;
		c = a - floor(146097*b/4)&lt;br /&gt;
	end&lt;br /&gt;
	local d = floor((4*c + 3)/1461)&lt;br /&gt;
	local e = c - floor(1461*d/4)&lt;br /&gt;
	local m = floor((5*e + 2)/153)&lt;br /&gt;
	date.day = e - floor((153*m + 2)/5) + 1&lt;br /&gt;
	date.month = m + 3 - 12*floor(m/10)&lt;br /&gt;
	date.year = 100*b + d - 4800 + floor(m/10)&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fix_numbers(numbers, y, m, d, H, M, S, partial, hastime, calendar)&lt;br /&gt;
	-- Put the result of normalizing the given values in table numbers.&lt;br /&gt;
	-- The result will have valid m, d values if y is valid; caller checks y.&lt;br /&gt;
	-- The logic of PHP mktime is followed where m or d can be zero to mean&lt;br /&gt;
	-- the previous unit, and -1 is the one before that, etc.&lt;br /&gt;
	-- Positive values carry forward.&lt;br /&gt;
	local date&lt;br /&gt;
	if not (1 &amp;lt;= m and m &amp;lt;= 12) then&lt;br /&gt;
		date = Date(y, 1, 1)&lt;br /&gt;
		if not date then return end&lt;br /&gt;
		date = date + ((m - 1) .. &#039;m&#039;)&lt;br /&gt;
		y, m = date.year, date.month&lt;br /&gt;
	end&lt;br /&gt;
	local days_hms&lt;br /&gt;
	if not partial then&lt;br /&gt;
		if hastime and H and M and S then&lt;br /&gt;
			if not (0 &amp;lt;= H and H &amp;lt;= 23 and&lt;br /&gt;
					0 &amp;lt;= M and M &amp;lt;= 59 and&lt;br /&gt;
					0 &amp;lt;= S and S &amp;lt;= 59) then&lt;br /&gt;
				days_hms = hms({ hour = H, minute = M, second = S })&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if days_hms or not (1 &amp;lt;= d and d &amp;lt;= days_in_month(y, m, calendar)) then&lt;br /&gt;
			date = date or Date(y, m, 1)&lt;br /&gt;
			if not date then return end&lt;br /&gt;
			date = date + (d - 1 + (days_hms or 0))&lt;br /&gt;
			y, m, d = date.year, date.month, date.day&lt;br /&gt;
			if days_hms then&lt;br /&gt;
				H, M, S = date.hour, date.minute, date.second&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	numbers.year = y&lt;br /&gt;
	numbers.month = m&lt;br /&gt;
	numbers.day = d&lt;br /&gt;
	if days_hms then&lt;br /&gt;
		-- Don&#039;t set H unless it was valid because a valid H will set hastime.&lt;br /&gt;
		numbers.hour = H&lt;br /&gt;
		numbers.minute = M&lt;br /&gt;
		numbers.second = S&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function set_date_from_numbers(date, numbers, options)&lt;br /&gt;
	-- Set the fields of table date from numeric values.&lt;br /&gt;
	-- Return true if date is valid.&lt;br /&gt;
	if type(numbers) ~= &#039;table&#039; then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local y = numbers.year   or date.year&lt;br /&gt;
	local m = numbers.month  or date.month&lt;br /&gt;
	local d = numbers.day    or date.day&lt;br /&gt;
	local H = numbers.hour&lt;br /&gt;
	local M = numbers.minute or date.minute or 0&lt;br /&gt;
	local S = numbers.second or date.second or 0&lt;br /&gt;
	local need_fix&lt;br /&gt;
	if y and m and d then&lt;br /&gt;
		date.partial = nil&lt;br /&gt;
		if not (-9999 &amp;lt;= y and y &amp;lt;= 9999 and&lt;br /&gt;
			1 &amp;lt;= m and m &amp;lt;= 12 and&lt;br /&gt;
			1 &amp;lt;= d and d &amp;lt;= days_in_month(y, m, date.calendar)) then&lt;br /&gt;
				if not date.want_fix then&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
				need_fix = true&lt;br /&gt;
		end&lt;br /&gt;
	elseif y and date.partial then&lt;br /&gt;
		if d or not (-9999 &amp;lt;= y and y &amp;lt;= 9999) then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
		if m and not (1 &amp;lt;= m and m &amp;lt;= 12) then&lt;br /&gt;
			if not date.want_fix then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			need_fix = true&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	if date.partial then&lt;br /&gt;
		H = nil  -- ignore any time&lt;br /&gt;
		M = nil&lt;br /&gt;
		S = nil&lt;br /&gt;
	else&lt;br /&gt;
		if H then&lt;br /&gt;
			-- It is not possible to set M or S without also setting H.&lt;br /&gt;
			date.hastime = true&lt;br /&gt;
		else&lt;br /&gt;
			H = 0&lt;br /&gt;
		end&lt;br /&gt;
		if not (0 &amp;lt;= H and H &amp;lt;= 23 and&lt;br /&gt;
				0 &amp;lt;= M and M &amp;lt;= 59 and&lt;br /&gt;
				0 &amp;lt;= S and S &amp;lt;= 59) then&lt;br /&gt;
			if date.want_fix then&lt;br /&gt;
				need_fix = true&lt;br /&gt;
			else&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	date.want_fix = nil&lt;br /&gt;
	if need_fix then&lt;br /&gt;
		fix_numbers(numbers, y, m, d, H, M, S, date.partial, date.hastime, date.calendar)&lt;br /&gt;
		return set_date_from_numbers(date, numbers, options)&lt;br /&gt;
	end&lt;br /&gt;
	date.year = y    -- -9999 to 9999 (&#039;n BC&#039; → year = 1 - n)&lt;br /&gt;
	date.month = m   -- 1 to 12 (may be nil if partial)&lt;br /&gt;
	date.day = d     -- 1 to 31 (* = nil if partial)&lt;br /&gt;
	date.hour = H    -- 0 to 59 (*)&lt;br /&gt;
	date.minute = M  -- 0 to 59 (*)&lt;br /&gt;
	date.second = S  -- 0 to 59 (*)&lt;br /&gt;
	if type(options) == &#039;table&#039; then&lt;br /&gt;
		for _, k in ipairs({ &#039;am&#039;, &#039;era&#039;, &#039;format&#039; }) do&lt;br /&gt;
			if options[k] then&lt;br /&gt;
				date.options[k] = options[k]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_option_table(options1, options2)&lt;br /&gt;
	-- If options1 is a string, return a table with its settings, or&lt;br /&gt;
	-- if it is a table, use its settings.&lt;br /&gt;
	-- Missing options are set from table options2 or defaults.&lt;br /&gt;
	-- If a default is used, a flag is set so caller knows the value was not intentionally set.&lt;br /&gt;
	-- Valid option settings are:&lt;br /&gt;
	-- am: &#039;am&#039;, &#039;a.m.&#039;, &#039;AM&#039;, &#039;A.M.&#039;&lt;br /&gt;
	--     &#039;pm&#039;, &#039;p.m.&#039;, &#039;PM&#039;, &#039;P.M.&#039; (each has same meaning as corresponding item above)&lt;br /&gt;
	-- era: &#039;BCMINUS&#039;, &#039;BCNEGATIVE&#039;, &#039;BC&#039;, &#039;B.C.&#039;, &#039;BCE&#039;, &#039;B.C.E.&#039;, &#039;AD&#039;, &#039;A.D.&#039;, &#039;CE&#039;, &#039;C.E.&#039;&lt;br /&gt;
	-- Option am = &#039;am&#039; does not mean the hour is AM; it means &#039;am&#039; or &#039;pm&#039; is used, depending on the hour,&lt;br /&gt;
	--    and am = &#039;pm&#039; has the same meaning.&lt;br /&gt;
	-- Similarly, era = &#039;BC&#039; means &#039;BC&#039; is used if year &amp;lt;= 0.&lt;br /&gt;
	-- BCMINUS displays a MINUS if year &amp;lt; 0 and the display format does not include %{era}.&lt;br /&gt;
	-- BCNEGATIVE is similar but displays a hyphen.&lt;br /&gt;
	local result = { bydefault = {} }&lt;br /&gt;
	if type(options1) == &#039;table&#039; then&lt;br /&gt;
		result.am = options1.am&lt;br /&gt;
		result.era = options1.era&lt;br /&gt;
	elseif type(options1) == &#039;string&#039; then&lt;br /&gt;
		-- Example: &#039;am:AM era:BC&#039; or &#039;am=AM era=BC&#039;.&lt;br /&gt;
		for item in options1:gmatch(&#039;%S+&#039;) do&lt;br /&gt;
			local lhs, rhs = item:match(&#039;^(%w+)[:=](.+)$&#039;)&lt;br /&gt;
			if lhs then&lt;br /&gt;
				result[lhs] = rhs&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	options2 = type(options2) == &#039;table&#039; and options2 or {}&lt;br /&gt;
	local defaults = { am = &#039;am&#039;, era = &#039;a. C.&#039; }&lt;br /&gt;
	for k, v in pairs(defaults) do&lt;br /&gt;
		if not result[k] then&lt;br /&gt;
			if options2[k] then&lt;br /&gt;
				result[k] = options2[k]&lt;br /&gt;
			else&lt;br /&gt;
				result[k] = v&lt;br /&gt;
				result.bydefault[k] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local ampm_options = {&lt;br /&gt;
	-- lhs = input text accepted as an am/pm option&lt;br /&gt;
	-- rhs = code used internally&lt;br /&gt;
	[&#039;am&#039;]   = &#039;am&#039;,&lt;br /&gt;
	[&#039;AM&#039;]   = &#039;AM&#039;,&lt;br /&gt;
	[&#039;a.m.&#039;] = &#039;a.m.&#039;,&lt;br /&gt;
	[&#039;A.M.&#039;] = &#039;A.M.&#039;,&lt;br /&gt;
	[&#039;pm&#039;]   = &#039;am&#039;,  -- same as am&lt;br /&gt;
	[&#039;PM&#039;]   = &#039;AM&#039;,&lt;br /&gt;
	[&#039;p.m.&#039;] = &#039;a.m.&#039;,&lt;br /&gt;
	[&#039;P.M.&#039;] = &#039;A.M.&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local era_text = {&lt;br /&gt;
	-- Text for displaying an era with a positive year (after adjusting&lt;br /&gt;
	-- by replacing year with 1 - year if date.year &amp;lt;= 0).&lt;br /&gt;
	-- options.era = { year&amp;lt;=0 , year&amp;gt;0 }&lt;br /&gt;
	[&#039;BCMINUS&#039;]    = { &#039;BC&#039;    , &#039;&#039;    , isbc = true, sign = MINUS },&lt;br /&gt;
	[&#039;BCNEGATIVE&#039;] = { &#039;BC&#039;    , &#039;&#039;    , isbc = true, sign = &#039;-&#039;   },&lt;br /&gt;
	[&#039;BC&#039;]         = { &#039;BC&#039;    , &#039;&#039;    , isbc = true },&lt;br /&gt;
	[&#039;B.C.&#039;]       = { &#039;B.C.&#039;  , &#039;&#039;    , isbc = true },&lt;br /&gt;
	[&#039;BCE&#039;]        = { &#039;BCE&#039;   , &#039;&#039;    , isbc = true },&lt;br /&gt;
	[&#039;B.C.E.&#039;]     = { &#039;B.C.E.&#039;, &#039;&#039;    , isbc = true },&lt;br /&gt;
	[&#039;AD&#039;]         = { &#039;BC&#039;    , &#039;AD&#039;   },&lt;br /&gt;
	[&#039;A.D.&#039;]       = { &#039;B.C.&#039;  , &#039;A.D.&#039; },&lt;br /&gt;
	[&#039;CE&#039;]         = { &#039;BCE&#039;   , &#039;CE&#039;   },&lt;br /&gt;
	[&#039;C.E.&#039;]       = { &#039;B.C.E.&#039;, &#039;C.E.&#039; },&lt;br /&gt;
	--ABREVIATURAS EN ESPAÑOL--&lt;br /&gt;
	[&#039;a. C.&#039;]         = { &#039;a. C.&#039;       , &#039;&#039;    , isbc = true },  --antes de Cristo&lt;br /&gt;
	[&#039;a. de C.&#039;]      = { &#039;a. de C.&#039;    , &#039;&#039;    , isbc = true },  --antes de Cristo&lt;br /&gt;
	[&#039;a. de J. C.&#039;]   = { &#039;a. de J. C.&#039; , &#039;&#039;    , isbc = true },  --antes de Jesucristo&lt;br /&gt;
	[&#039;a. J. C.&#039;]      = { &#039;a. J. C.&#039;    , &#039;&#039;    , isbc = true },  --antes de Jesucristo&lt;br /&gt;
	[&#039;AEC&#039;]           = { &#039;AEC&#039;         , &#039;&#039;    , isbc = true },  --antes de la era común&lt;br /&gt;
	[&#039;a. e. c.&#039;]      = { &#039;a. e. c.&#039;    , &#039;&#039;    , isbc = true },  --antes de la era común&lt;br /&gt;
	[&#039;a. n. e.&#039;]      = { &#039;a. n. e.&#039;    , &#039;&#039;    , isbc = true },  --antes de nuestra era&lt;br /&gt;
	[&#039;a. e. v.&#039;]      = { &#039;a. e. v.&#039;    , &#039;&#039;    , isbc = true },  --antes de la era vulgar&lt;br /&gt;
	[&#039;d. C.&#039;]         = { &#039;a. C.&#039;       , &#039;d. C.&#039; },              --después de Cristo&lt;br /&gt;
	[&#039;d. de C.&#039;]      = { &#039;a. de C.&#039;    , &#039;d. de C.&#039; },           --después de Cristo&lt;br /&gt;
	[&#039;d. de J. C.&#039;]   = { &#039;a. de J. C.&#039; , &#039;d. de J. C.&#039; },        --después de Jesucristo&lt;br /&gt;
	[&#039;d. J. C.&#039;]      = { &#039;a. J. C.&#039;    , &#039;d. J. C.&#039; },           --después de Jesucristo&lt;br /&gt;
	[&#039;EC&#039;]            = { &#039;AEC&#039;         , &#039;EC&#039; },                 --era común&lt;br /&gt;
	[&#039;e. c.&#039;]         = { &#039;a. e. c.&#039;    , &#039;e. c.&#039; },              --era común&lt;br /&gt;
	[&#039;n. e.&#039;]         = { &#039;a. n. e.&#039;    , &#039;n. e.&#039; },              --nuestra era&lt;br /&gt;
	[&#039;e. v.&#039;]         = { &#039;a. e. v.&#039;    , &#039;e. v.&#039; },              --era vulgar&lt;br /&gt;
	[&#039;A. D.&#039;]         = { &#039;a. C.&#039;       , &#039;A. D.&#039; },              --anno Domini&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function get_era_for_year(era, year)&lt;br /&gt;
	return (era_text[era] or era_text[&#039;a. C.&#039;])[year &amp;gt; 0 and 2 or 1]:gsub(&amp;quot; &amp;quot;, &amp;quot;&amp;amp;nbsp;&amp;quot;) or &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function strftime(date, format, options)&lt;br /&gt;
	-- Return date formatted as a string using codes similar to those&lt;br /&gt;
	-- in the C strftime library function.&lt;br /&gt;
	local sformat = string.format&lt;br /&gt;
	local shortcuts = {&lt;br /&gt;
		[&#039;%c&#039;] = &#039;%-I:%M %p %-d de %B de %-Y %{era}&#039;,  -- date and time: 2:30 pm 1 de abril de 2016&lt;br /&gt;
		[&#039;%C&#039;] = &#039;%-d de %B de %-Y, %H:%M:%S&#039;,	   -- date and time: 1 de abril de 2016, 14:30&lt;br /&gt;
		[&#039;%x&#039;] = &#039;%-d de %B de %-Y %{era}&#039;,            -- date:          1 de abril de 2016&lt;br /&gt;
		[&#039;%X&#039;] = &#039;%-I:%M %p&#039;,                          -- time:          2:30 pm&lt;br /&gt;
	}&lt;br /&gt;
	if shortcuts[format] then&lt;br /&gt;
		format = shortcuts[format]&lt;br /&gt;
	end&lt;br /&gt;
	local codes = {&lt;br /&gt;
		a = { field = &#039;dayabbr&#039; },&lt;br /&gt;
		A = { field = &#039;dayname&#039; },&lt;br /&gt;
		b = { field = &#039;monthabbr&#039; },&lt;br /&gt;
		B = { field = &#039;monthname&#039; },&lt;br /&gt;
		u = { fmt = &#039;%d&#039;  , field = &#039;dowiso&#039; },&lt;br /&gt;
		w = { fmt = &#039;%d&#039;  , field = &#039;dow&#039; },&lt;br /&gt;
		d = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;day&#039; },&lt;br /&gt;
		m = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;month&#039; },&lt;br /&gt;
		Y = { fmt = &#039;%04d&#039;, fmt2 = &#039;%d&#039;, field = &#039;year&#039; },&lt;br /&gt;
		H = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;hour&#039; },&lt;br /&gt;
		M = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;minute&#039; },&lt;br /&gt;
		S = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;second&#039; },&lt;br /&gt;
		j = { fmt = &#039;%03d&#039;, fmt2 = &#039;%d&#039;, field = &#039;dayofyear&#039; },&lt;br /&gt;
		I = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;hour&#039;, special = &#039;hour12&#039; },&lt;br /&gt;
		p = { field = &#039;hour&#039;, special = &#039;am&#039; },&lt;br /&gt;
	}&lt;br /&gt;
	options = make_option_table(options, date.options)&lt;br /&gt;
	local amopt = options.am&lt;br /&gt;
	local eraopt = options.era&lt;br /&gt;
	local function replace_code(spaces, modifier, id)&lt;br /&gt;
		local code = codes[id]&lt;br /&gt;
		if code then&lt;br /&gt;
			local fmt = code.fmt&lt;br /&gt;
			if modifier == &#039;-&#039; and code.fmt2 then&lt;br /&gt;
				fmt = code.fmt2&lt;br /&gt;
			end&lt;br /&gt;
			local value = date[code.field]&lt;br /&gt;
			if not value then&lt;br /&gt;
				return nil  -- an undefined field in a partial date&lt;br /&gt;
			end&lt;br /&gt;
			local special = code.special&lt;br /&gt;
			if special then&lt;br /&gt;
				if special == &#039;hour12&#039; then&lt;br /&gt;
					value = value % 12&lt;br /&gt;
					value = value == 0 and 12 or value&lt;br /&gt;
				elseif special == &#039;am&#039; then&lt;br /&gt;
					local ap = ({&lt;br /&gt;
						[&#039;a.m.&#039;] = { &#039;a.m.&#039;, &#039;p.m.&#039; },&lt;br /&gt;
						[&#039;AM&#039;] = { &#039;AM&#039;, &#039;PM&#039; },&lt;br /&gt;
						[&#039;A.M.&#039;] = { &#039;A.M.&#039;, &#039;P.M.&#039; },&lt;br /&gt;
					})[ampm_options[amopt]] or { &#039;am&#039;, &#039;pm&#039; }&lt;br /&gt;
					return (spaces == &#039;&#039; and &#039;&#039; or &#039;&amp;amp;nbsp;&#039;) .. (value &amp;lt; 12 and ap[1] or ap[2])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if code.field == &#039;year&#039; then&lt;br /&gt;
				local sign = (era_text[eraopt] or {}).sign&lt;br /&gt;
				if not sign or format:find(&#039;%{era}&#039;, 1, true) then&lt;br /&gt;
					sign = &#039;&#039;&lt;br /&gt;
					if value &amp;lt;= 0 then&lt;br /&gt;
						value = 1 - value&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					if value &amp;gt;= 0 then&lt;br /&gt;
						sign = &#039;&#039;&lt;br /&gt;
					else&lt;br /&gt;
						value = -value&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				return spaces .. sign .. sformat(fmt, value)&lt;br /&gt;
			end&lt;br /&gt;
			return spaces .. (fmt and sformat(fmt, value) or value)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function replace_property(spaces, id)&lt;br /&gt;
		if id == &#039;era&#039; then&lt;br /&gt;
			-- Special case so can use local era option.&lt;br /&gt;
			local result = get_era_for_year(eraopt, date.year)&lt;br /&gt;
			if result == &#039;&#039; then&lt;br /&gt;
				return &#039;&#039;&lt;br /&gt;
			end&lt;br /&gt;
			return (spaces == &#039;&#039; and &#039;&#039; or &#039;&amp;amp;nbsp;&#039;) .. result&lt;br /&gt;
		end&lt;br /&gt;
		local result = date[id]&lt;br /&gt;
		if type(result) == &#039;string&#039; then&lt;br /&gt;
			return spaces .. result&lt;br /&gt;
		end&lt;br /&gt;
		if type(result) == &#039;number&#039; then&lt;br /&gt;
			return  spaces .. tostring(result)&lt;br /&gt;
		end&lt;br /&gt;
		if type(result) == &#039;boolean&#039; then&lt;br /&gt;
			return  spaces .. (result and &#039;1&#039; or &#039;0&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		-- This occurs if id is an undefined field in a partial date, or is the name of a function.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local PERCENT = &#039;\127PERCENT\127&#039;&lt;br /&gt;
	return (format&lt;br /&gt;
		:gsub(&#039;%%%%&#039;, PERCENT)&lt;br /&gt;
		:gsub(&#039;(%s*)%%{(%w+)}&#039;, replace_property)&lt;br /&gt;
		:gsub(&#039;(%s*)%%(%-?)(%a)&#039;, replace_code)&lt;br /&gt;
		:gsub(PERCENT, &#039;%%&#039;)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _date_text(date, fmt, options)&lt;br /&gt;
	-- Return a formatted string representing the given date.&lt;br /&gt;
	if not is_date(date) then&lt;br /&gt;
		error(&#039;date:text: need a date (use &amp;quot;date:text()&amp;quot; with a colon)&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if type(fmt) == &#039;string&#039; and fmt:match(&#039;%S&#039;) then&lt;br /&gt;
		if fmt:find(&#039;%&#039;, 1, true) then&lt;br /&gt;
			return strftime(date, fmt, options)&lt;br /&gt;
		end&lt;br /&gt;
	elseif date.partial then&lt;br /&gt;
		fmt = date.month and &#039;my&#039; or &#039;y&#039;&lt;br /&gt;
	else&lt;br /&gt;
		fmt = &#039;dmy&#039;&lt;br /&gt;
		if date.hastime then&lt;br /&gt;
			fmt = (date.second &amp;gt; 0 and &#039;hms &#039; or &#039;hm &#039;) .. fmt&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function bad_format()&lt;br /&gt;
		-- For consistency with other format processing, return given format&lt;br /&gt;
		-- (or cleaned format if original was not a string) if invalid.&lt;br /&gt;
		return mw.text.nowiki(fmt)&lt;br /&gt;
	end&lt;br /&gt;
	if date.partial then&lt;br /&gt;
		-- Ignore days in standard formats like &#039;ymd&#039;.&lt;br /&gt;
		if fmt == &#039;ym&#039; or fmt == &#039;ymd&#039; then&lt;br /&gt;
			fmt = date.month and &#039;%Y-%m %{era}&#039; or &#039;%Y %{era}&#039;&lt;br /&gt;
		elseif fmt == &#039;my&#039; or fmt == &#039;dmy&#039; or fmt == &#039;mdy&#039; then&lt;br /&gt;
			fmt = date.month and &#039;%B %-Y %{era}&#039; or &#039;%-Y %{era}&#039;&lt;br /&gt;
		elseif fmt == &#039;y&#039; then&lt;br /&gt;
			fmt = date.month and &#039;%-Y %{era}&#039; or &#039;%-Y %{era}&#039;&lt;br /&gt;
		else&lt;br /&gt;
			return bad_format()&lt;br /&gt;
		end&lt;br /&gt;
		return strftime(date, fmt, options)&lt;br /&gt;
	end&lt;br /&gt;
	local function hm_fmt()&lt;br /&gt;
		local plain = make_option_table(options, date.options).bydefault.am&lt;br /&gt;
		return plain and &#039;%H:%M&#039; or &#039;%-I:%M %p&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local need_time = date.hastime&lt;br /&gt;
	local t = collection()&lt;br /&gt;
	for item in fmt:gmatch(&#039;%S+&#039;) do&lt;br /&gt;
		local f&lt;br /&gt;
		if item == &#039;hm&#039; then&lt;br /&gt;
			f = hm_fmt()&lt;br /&gt;
			need_time = false&lt;br /&gt;
		elseif item == &#039;hms&#039; then&lt;br /&gt;
			f = &#039;%H:%M:%S&#039;&lt;br /&gt;
			need_time = false&lt;br /&gt;
		elseif item == &#039;ymd&#039; then&lt;br /&gt;
			f = &#039;%Y-%m-%d %{era}&#039;&lt;br /&gt;
		elseif item == &#039;mdy&#039; then&lt;br /&gt;
			f = &#039;%B %-d, %-Y %{era}&#039;&lt;br /&gt;
		elseif item == &#039;dmy&#039; then&lt;br /&gt;
			f = &#039;%-d de %B de %-Y %{era}&#039;&lt;br /&gt;
		else&lt;br /&gt;
			return bad_format()&lt;br /&gt;
		end&lt;br /&gt;
		t:add(f)&lt;br /&gt;
	end&lt;br /&gt;
	fmt = t:join(&#039; &#039;)&lt;br /&gt;
	if need_time then&lt;br /&gt;
		fmt = hm_fmt() .. &#039; &#039; .. fmt&lt;br /&gt;
	end&lt;br /&gt;
	return strftime(date, fmt, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local day_info = {&lt;br /&gt;
	-- 0=Sun to 6=Sat&lt;br /&gt;
	[0] = { &#039;do&#039;, &#039;domingo&#039; },&lt;br /&gt;
	{ &#039;lu&#039;, &#039;lunes&#039; },&lt;br /&gt;
	{ &#039;ma&#039;, &#039;martes&#039; },&lt;br /&gt;
	{ &#039;mi&#039;, &#039;miércoles&#039; },&lt;br /&gt;
	{ &#039;ju&#039;, &#039;jueves&#039; },&lt;br /&gt;
	{ &#039;vi&#039;, &#039;viernes&#039; },&lt;br /&gt;
	{ &#039;sa&#039;, &#039;sábado&#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local month_info = {&lt;br /&gt;
	-- 1=Jan to 12=Dec&lt;br /&gt;
	{ &#039;ene&#039;, &#039;enero&#039; },&lt;br /&gt;
	{ &#039;feb&#039;, &#039;febrero&#039; },&lt;br /&gt;
	{ &#039;mar&#039;, &#039;marzo&#039; },&lt;br /&gt;
	{ &#039;abr&#039;, &#039;abril&#039; },&lt;br /&gt;
	{ &#039;may&#039;, &#039;mayo&#039; },&lt;br /&gt;
	{ &#039;jun&#039;, &#039;junio&#039; },&lt;br /&gt;
	{ &#039;jul&#039;, &#039;julio&#039; },&lt;br /&gt;
	{ &#039;ago&#039;, &#039;agosto&#039; },&lt;br /&gt;
	{ &#039;sep&#039;, &#039;septiembre&#039; },&lt;br /&gt;
	{ &#039;oct&#039;, &#039;octubre&#039; },&lt;br /&gt;
	{ &#039;nov&#039;, &#039;noviembre&#039; },&lt;br /&gt;
	{ &#039;dic&#039;, &#039;diciembre&#039; },&lt;br /&gt;
}&lt;br /&gt;
for k,v in pairs(month_info) do month_info[ v[1] ], month_info[ v[2] ] = v, v end&lt;br /&gt;
&lt;br /&gt;
local function name_to_number(text, translate)&lt;br /&gt;
	if type(text) == &#039;string&#039; then&lt;br /&gt;
		return translate[&#039;xx&#039; .. text:lower():gsub(&#039;é&#039;, &#039;e&#039;):gsub(&#039;á&#039;, &#039;a&#039;)]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function day_number(text)&lt;br /&gt;
	return name_to_number(text, {&lt;br /&gt;
		xxdo = 0, xxdomingo = 0, &lt;br /&gt;
		xxlu = 1, xxlunes = 1, xxlune = 1,&lt;br /&gt;
		xxma = 2, xxmartes = 2, xxmarte = 2,&lt;br /&gt;
		xxmi = 3, xxmiercoles = 3, xxmiercole = 3,&lt;br /&gt;
		xxju = 4, xxjueves = 4, xxjueve = 4,&lt;br /&gt;
		xxvi = 5, xxviernes = 5, xxvierne = 5,&lt;br /&gt;
		xxsat = 6, xxsabado = 6&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function month_number(text)&lt;br /&gt;
	return name_to_number(text, {&lt;br /&gt;
		xxene = 1, xxenero = 1,&lt;br /&gt;
		xxfeb = 2, xxfebrero = 2,&lt;br /&gt;
		xxmar = 3, xxmarzo = 3,&lt;br /&gt;
		xxabr = 4, xxabril = 4,&lt;br /&gt;
		xxmay = 5, xxmayo = 5,&lt;br /&gt;
		xxjun = 6, xxjunio = 6,&lt;br /&gt;
		xxjul = 7, xxjulio = 7,&lt;br /&gt;
		xxago = 8, xxagosto = 8,&lt;br /&gt;
		xxsep = 9, xxseptiembre = 9, xxsept = 9,&lt;br /&gt;
		xxoct = 10, xxoctubre = 10,&lt;br /&gt;
		xxnov = 11, xxnoviembre = 11,&lt;br /&gt;
		xxdic = 12, xxdiciembre = 12,&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _list_text(list, fmt)&lt;br /&gt;
	-- Return a list of formatted strings from a list of dates.&lt;br /&gt;
	if not type(list) == &#039;table&#039; then&lt;br /&gt;
		error(&#039;date:list:text: need &amp;quot;list:text()&amp;quot; with a colon&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	local result = { join = _list_join }&lt;br /&gt;
	for i, date in ipairs(list) do&lt;br /&gt;
		result[i] = date:text(fmt)&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _date_list(date, spec)&lt;br /&gt;
	-- Return a possibly empty numbered table of dates meeting the specification.&lt;br /&gt;
	-- Dates in the list are in ascending order (oldest date first).&lt;br /&gt;
	-- The spec should be a string of form &amp;quot;&amp;lt;count&amp;gt; &amp;lt;day&amp;gt; &amp;lt;op&amp;gt;&amp;quot;&lt;br /&gt;
	-- where each item is optional and&lt;br /&gt;
	--   count = number of items wanted in list&lt;br /&gt;
	--   day = abbreviation or name such as Mon or Monday&lt;br /&gt;
	--   op = &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;= (default is &amp;gt; meaning after date)&lt;br /&gt;
	-- If no count is given, the list is for the specified days in date&#039;s month.&lt;br /&gt;
	-- The default day is date&#039;s day.&lt;br /&gt;
	-- The spec can also be a positive or negative number:&lt;br /&gt;
	--   -5 is equivalent to &#039;5 &amp;lt;&#039;&lt;br /&gt;
	--   5  is equivalent to &#039;5&#039; which is &#039;5 &amp;gt;&#039;&lt;br /&gt;
	if not is_date(date) then&lt;br /&gt;
		error(&#039;date:list: need a date (use &amp;quot;date:list()&amp;quot; with a colon)&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	local list = { text = _list_text }&lt;br /&gt;
	if date.partial then&lt;br /&gt;
		return list&lt;br /&gt;
	end&lt;br /&gt;
	local count, offset, operation&lt;br /&gt;
	local ops = {&lt;br /&gt;
		[&#039;&amp;gt;=&#039;] = { before = false, include = true  },&lt;br /&gt;
		[&#039;&amp;gt;&#039;]  = { before = false, include = false },&lt;br /&gt;
		[&#039;&amp;lt;=&#039;] = { before = true , include = true  },&lt;br /&gt;
		[&#039;&amp;lt;&#039;]  = { before = true , include = false },&lt;br /&gt;
	}&lt;br /&gt;
	if spec then&lt;br /&gt;
		if type(spec) == &#039;number&#039; then&lt;br /&gt;
			count = floor(spec + 0.5)&lt;br /&gt;
			if count &amp;lt; 0 then&lt;br /&gt;
				count = -count&lt;br /&gt;
				operation = ops[&#039;&amp;lt;&#039;]&lt;br /&gt;
			end&lt;br /&gt;
		elseif type(spec) == &#039;string&#039; then&lt;br /&gt;
			local num, day, op = spec:match(&#039;^%s*(%d*)%s*(%a*)%s*([&amp;lt;&amp;gt;=]*)%s*$&#039;)&lt;br /&gt;
			if not num then&lt;br /&gt;
				return list&lt;br /&gt;
			end&lt;br /&gt;
			if num ~= &#039;&#039; then&lt;br /&gt;
				count = tonumber(num)&lt;br /&gt;
			end&lt;br /&gt;
			if day ~= &#039;&#039; then&lt;br /&gt;
				local dow = day_number(day:gsub(&#039;[sS]$&#039;, &#039;&#039;))  -- accept plural days&lt;br /&gt;
				if not dow then&lt;br /&gt;
					return list&lt;br /&gt;
				end&lt;br /&gt;
				offset = dow - date.dow&lt;br /&gt;
			end&lt;br /&gt;
			operation = ops[op]&lt;br /&gt;
		else&lt;br /&gt;
			return list&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	offset = offset or 0&lt;br /&gt;
	operation = operation or ops[&#039;&amp;gt;&#039;]&lt;br /&gt;
	local datefrom, dayfirst, daylast&lt;br /&gt;
	if operation.before then&lt;br /&gt;
		if offset &amp;gt; 0 or (offset == 0 and not operation.include) then&lt;br /&gt;
			offset = offset - 7&lt;br /&gt;
		end&lt;br /&gt;
		if count then&lt;br /&gt;
			if count &amp;gt; 1 then&lt;br /&gt;
				offset = offset - 7*(count - 1)&lt;br /&gt;
			end&lt;br /&gt;
			datefrom = date + offset&lt;br /&gt;
		else&lt;br /&gt;
			daylast = date.day + offset&lt;br /&gt;
			dayfirst = daylast % 7&lt;br /&gt;
			if dayfirst == 0 then&lt;br /&gt;
				dayfirst = 7&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if offset &amp;lt; 0 or (offset == 0 and not operation.include) then&lt;br /&gt;
			offset = offset + 7&lt;br /&gt;
		end&lt;br /&gt;
		if count then&lt;br /&gt;
			datefrom = date + offset&lt;br /&gt;
		else&lt;br /&gt;
			dayfirst = date.day + offset&lt;br /&gt;
			daylast = date.monthdays&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not count then&lt;br /&gt;
		if daylast &amp;lt; dayfirst then&lt;br /&gt;
			return list&lt;br /&gt;
		end&lt;br /&gt;
		count = floor((daylast - dayfirst)/7) + 1&lt;br /&gt;
		datefrom = Date(date, {day = dayfirst})&lt;br /&gt;
	end&lt;br /&gt;
	for i = 1, count do&lt;br /&gt;
		if not datefrom then break end  -- exceeds date limits&lt;br /&gt;
		list[i] = datefrom&lt;br /&gt;
		datefrom = datefrom + 7&lt;br /&gt;
	end&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- A table to get the current date/time (UTC), but only if needed.&lt;br /&gt;
local current = setmetatable({}, {&lt;br /&gt;
	__index = function (self, key)&lt;br /&gt;
		local d = os.date(&#039;!*t&#039;)&lt;br /&gt;
		self.year = d.year&lt;br /&gt;
		self.month = d.month&lt;br /&gt;
		self.day = d.day&lt;br /&gt;
		self.hour = d.hour&lt;br /&gt;
		self.minute = d.min&lt;br /&gt;
		self.second = d.sec&lt;br /&gt;
		return rawget(self, key)&lt;br /&gt;
	end })&lt;br /&gt;
&lt;br /&gt;
local function extract_date(newdate, text)&lt;br /&gt;
	-- Parse the date/time in text and return n, o where&lt;br /&gt;
	--   n = table of numbers with date/time fields&lt;br /&gt;
	--   o = table of options for AM/PM or AD/BC or format, if any&lt;br /&gt;
	-- or return nothing if date is known to be invalid.&lt;br /&gt;
	-- Caller determines if the values in n are valid.&lt;br /&gt;
	-- A year must be positive (&#039;1&#039; to &#039;9999&#039;); use &#039;BC&#039; for BC.&lt;br /&gt;
	-- In a y-m-d string, the year must be four digits to avoid ambiguity&lt;br /&gt;
	-- (&#039;0001&#039; to &#039;9999&#039;). The only way to enter year &amp;lt;= 0 is by specifying&lt;br /&gt;
	-- the date as three numeric parameters like ymd Date(-1, 1, 1).&lt;br /&gt;
	-- Dates of form d/m/y, m/d/y, y/m/d are [partially] rejected as potentially ambiguous.&lt;br /&gt;
	local date, options = {}, {}&lt;br /&gt;
	if text:sub(-1) == &#039;Z&#039; then&lt;br /&gt;
		-- Extract date/time from a Wikidata timestamp.&lt;br /&gt;
		-- The year can be 1 to 16 digits but this module handles 1 to 4 digits only.&lt;br /&gt;
		-- Examples: &#039;+2016-06-21T14:30:00Z&#039;, &#039;-0000000180-00-00T00:00:00Z&#039;.&lt;br /&gt;
		local sign, y, m, d, H, M, S = text:match(&#039;^([+%-])(%d+)%-(%d%d)%-(%d%d)T(%d%d):(%d%d):(%d%d)Z$&#039;)&lt;br /&gt;
		if sign then&lt;br /&gt;
			y = tonumber(y)&lt;br /&gt;
			if sign == &#039;-&#039; and y &amp;gt; 0 then&lt;br /&gt;
				y = -y&lt;br /&gt;
			end&lt;br /&gt;
			if y &amp;lt;= 0 then&lt;br /&gt;
				options.era = &#039;a. C.&#039; -- Sets the era when the year is negative on the timestamp&lt;br /&gt;
			end&lt;br /&gt;
			date.year = y&lt;br /&gt;
			m = tonumber(m)&lt;br /&gt;
			d = tonumber(d)&lt;br /&gt;
			H = tonumber(H)&lt;br /&gt;
			M = tonumber(M)&lt;br /&gt;
			S = tonumber(S)&lt;br /&gt;
			if m == 0 then&lt;br /&gt;
				newdate.partial = true&lt;br /&gt;
				return date, options&lt;br /&gt;
			end&lt;br /&gt;
			date.month = m&lt;br /&gt;
			if d == 0 then&lt;br /&gt;
				newdate.partial = true&lt;br /&gt;
				return date, options&lt;br /&gt;
			end&lt;br /&gt;
			date.day = d&lt;br /&gt;
			if H &amp;gt; 0 or M &amp;gt; 0 or S &amp;gt; 0 then&lt;br /&gt;
				date.hour = H&lt;br /&gt;
				date.minute = M&lt;br /&gt;
				date.second = S&lt;br /&gt;
			end&lt;br /&gt;
			return date, options&lt;br /&gt;
		end&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local a, b, c = text:match(&#039;^(%d+)[-./](%d+)[-./](%d+)$&#039;)&lt;br /&gt;
	if a --[[ and b and c --]] then&lt;br /&gt;
		a = tonumber(a)&lt;br /&gt;
		b = tonumber(b)&lt;br /&gt;
		c = tonumber(c)&lt;br /&gt;
		--[[ -- use extract_ymd for this&lt;br /&gt;
		if a &amp;gt; 31 and m &amp;lt;= 12 and c &amp;gt; 12 then&lt;br /&gt;
			date.year, date.month, date.day = a, b, c&lt;br /&gt;
			options.format = &#039;ymd&#039;&lt;br /&gt;
			newdate.partial = true&lt;br /&gt;
			return date, options&lt;br /&gt;
		else--]]&lt;br /&gt;
		if a &amp;gt; 12 and b &amp;lt;= 12 and c &amp;gt; 31 then&lt;br /&gt;
			date.year, date.month, date.day = c, b, a&lt;br /&gt;
			options.format = &#039;dmy&#039;&lt;br /&gt;
			newdate.partial = true&lt;br /&gt;
			return date, options&lt;br /&gt;
		elseif a &amp;lt;= 12 and b &amp;gt; 12 and c &amp;gt; 31 then&lt;br /&gt;
			date.year, date.month, date.day = c, a, b&lt;br /&gt;
			options.format = &#039;mdy&#039;&lt;br /&gt;
			newdate.partial = true&lt;br /&gt;
			return date, options&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function extract_ymd(item)&lt;br /&gt;
		-- Called when no day or month has been set.&lt;br /&gt;
		local y, m, d = item:match(&#039;^(%d%d%d%d)[-./](%w+)[-./](%d%d?)$&#039;)&lt;br /&gt;
		if y then&lt;br /&gt;
			if date.year then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			if m:match(&#039;^%d%d?$&#039;) then&lt;br /&gt;
				m = tonumber(m)&lt;br /&gt;
			else&lt;br /&gt;
				m = month_number(m)&lt;br /&gt;
			end&lt;br /&gt;
			if m then&lt;br /&gt;
				date.year = tonumber(y)&lt;br /&gt;
				date.month = m&lt;br /&gt;
				date.day = tonumber(d)&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function extract_day_or_year(item)&lt;br /&gt;
		-- Called when a day would be valid, or&lt;br /&gt;
		-- when a year would be valid if no year has been set and partial is set.&lt;br /&gt;
		local number, suffix = item:match(&#039;^(%d%d?%d?%d?)(.*)$&#039;)&lt;br /&gt;
		if number then&lt;br /&gt;
			local n = tonumber(number)&lt;br /&gt;
			if #number &amp;lt;= 2 and n &amp;lt;= 31 then&lt;br /&gt;
				suffix = suffix:lower()&lt;br /&gt;
				if suffix == &#039;&#039; or suffix == &#039;st&#039; or suffix == &#039;nd&#039; or suffix == &#039;rd&#039; or suffix == &#039;th&#039; then&lt;br /&gt;
					date.day = n&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			elseif suffix == &#039;&#039; and newdate.partial and not date.year then&lt;br /&gt;
				date.year = n&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function extract_month(item)&lt;br /&gt;
		-- A month must be given as a name or abbreviation; a number could be ambiguous.&lt;br /&gt;
		local m = month_number(item)&lt;br /&gt;
		if m then&lt;br /&gt;
			date.month = m&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function extract_time(item)&lt;br /&gt;
		local h, m, s = item:match(&#039;^(%d%d?):(%d%d)(:?%d*)$&#039;)&lt;br /&gt;
		if date.hour or not h then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
		if s ~= &#039;&#039; then&lt;br /&gt;
			s = s:match(&#039;^:(%d%d)$&#039;)&lt;br /&gt;
			if not s then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		date.hour = tonumber(h)&lt;br /&gt;
		date.minute = tonumber(m)&lt;br /&gt;
		date.second = tonumber(s)  -- nil if empty string&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	local item_count = 0&lt;br /&gt;
	local index_time&lt;br /&gt;
	local function set_ampm(item)&lt;br /&gt;
		local H = date.hour&lt;br /&gt;
		if H and not options.am and index_time + 1 == item_count then&lt;br /&gt;
			options.am = ampm_options[item]  -- caller checked this is not nil&lt;br /&gt;
			if item:match(&#039;^[Aa]&#039;) then&lt;br /&gt;
				if not (1 &amp;lt;= H and H &amp;lt;= 12) then&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
				if H == 12 then&lt;br /&gt;
					date.hour = 0&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				if not (1 &amp;lt;= H and H &amp;lt;= 23) then&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
				if H &amp;lt;= 11 then&lt;br /&gt;
					date.hour = H + 12&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
    --Filtrar abreviaturas de era&lt;br /&gt;
	for key,value in pairs(era_text) do&lt;br /&gt;
		if string.find(text, key) ~= nil then&lt;br /&gt;
			options.era = key&lt;br /&gt;
			text = string.gsub(text, key, &#039;&#039;)&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for item in text:gsub(&#039;,&#039;, &#039; &#039;):gsub(&#039;del?&#039;, &#039;&#039;):gsub(&#039;&amp;amp;nbsp;&#039;, &#039; &#039;):gmatch(&#039;%S+&#039;) do&lt;br /&gt;
		item_count = item_count + 1&lt;br /&gt;
		if era_text[item] then&lt;br /&gt;
			-- Era is accepted in peculiar places.&lt;br /&gt;
			if options.era then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			options.era = item&lt;br /&gt;
		elseif ampm_options[item] then&lt;br /&gt;
			if not set_ampm(item) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		elseif item:find(&#039;:&#039;, 1, true) then&lt;br /&gt;
			if not extract_time(item) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			index_time = item_count&lt;br /&gt;
		elseif date.day and date.month then&lt;br /&gt;
			if date.year then&lt;br /&gt;
				return  -- should be nothing more so item is invalid&lt;br /&gt;
			end&lt;br /&gt;
			if not item:match(&#039;^(%d%d?%d?%d?)$&#039;) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			date.year = tonumber(item)&lt;br /&gt;
		elseif day_number(item) then&lt;br /&gt;
		    --catch month day case&lt;br /&gt;
		elseif date.day then&lt;br /&gt;
			if not extract_month(item) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		elseif date.month then&lt;br /&gt;
			if not extract_day_or_year(item) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		elseif extract_month(item) then&lt;br /&gt;
			options.format = &#039;mdy&#039;&lt;br /&gt;
		elseif extract_ymd(item) then&lt;br /&gt;
			options.format = &#039;ymd&#039;&lt;br /&gt;
		elseif extract_day_or_year(item) then&lt;br /&gt;
			if date.day then&lt;br /&gt;
				options.format = &#039;dmy&#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			--return  not return if item not recognized&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not date.year or date.year == 0 then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local era = era_text[options.era]&lt;br /&gt;
	if era and era.isbc then&lt;br /&gt;
		date.year = 1 - date.year&lt;br /&gt;
	end&lt;br /&gt;
	return date, options&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function autofill(date1, date2)&lt;br /&gt;
	-- Fill any missing month or day in each date using the&lt;br /&gt;
	-- corresponding component from the other date, if present,&lt;br /&gt;
	-- or with 1 if both dates are missing the month or day.&lt;br /&gt;
	-- This gives a good result for calculating the difference&lt;br /&gt;
	-- between two partial dates when no range is wanted.&lt;br /&gt;
	-- Return filled date1, date2 (two full dates).&lt;br /&gt;
	local function filled(a, b)&lt;br /&gt;
		local fillmonth, fillday&lt;br /&gt;
		if not a.month then&lt;br /&gt;
			fillmonth = b.month or 1&lt;br /&gt;
		end&lt;br /&gt;
		if not a.day then&lt;br /&gt;
			fillday = b.day or 1&lt;br /&gt;
		end&lt;br /&gt;
		if fillmonth or fillday then  -- need to create a new date&lt;br /&gt;
			if (fillmonth or a.month) == 2 and (fillday or a.day) == 29 then&lt;br /&gt;
				-- Avoid invalid date, for example with {{age|2013|29 Feb 2016}} or {{age|Feb 2013|29 Jan 2015}}.&lt;br /&gt;
				if not is_leap_year(a.year, a.calendar) then&lt;br /&gt;
					fillday = 28&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			a = Date(a, { month = fillmonth, day = fillday })&lt;br /&gt;
		end&lt;br /&gt;
		return a&lt;br /&gt;
	end&lt;br /&gt;
	return filled(date1, date2), filled(date2, date1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function date_add_sub(lhs, rhs, is_sub)&lt;br /&gt;
	-- Return a new date from calculating (lhs + rhs) or (lhs - rhs),&lt;br /&gt;
	-- or return nothing if invalid.&lt;br /&gt;
	-- The result is nil if the calculated date exceeds allowable limits.&lt;br /&gt;
	-- Caller ensures that lhs is a date; its properties are copied for the new date.&lt;br /&gt;
	if lhs.partial then&lt;br /&gt;
		-- Adding to a partial is not supported.&lt;br /&gt;
		-- Can subtract a date or partial from a partial, but this is not called for that.&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local function is_prefix(text, word, minlen)&lt;br /&gt;
		local n = #text&lt;br /&gt;
		return (minlen or 1) &amp;lt;= n and n &amp;lt;= #word and text == word:sub(1, n)&lt;br /&gt;
	end&lt;br /&gt;
	local function do_days(n)&lt;br /&gt;
		local forcetime, jd&lt;br /&gt;
		if floor(n) == n then&lt;br /&gt;
			jd = lhs.jd&lt;br /&gt;
		else&lt;br /&gt;
			forcetime = not lhs.hastime&lt;br /&gt;
			jd = lhs.jdz&lt;br /&gt;
		end&lt;br /&gt;
		jd = jd + (is_sub and -n or n)&lt;br /&gt;
		if forcetime then&lt;br /&gt;
			jd = tostring(jd)&lt;br /&gt;
			if not jd:find(&#039;.&#039;, 1, true) then&lt;br /&gt;
				jd = jd .. &#039;.0&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return Date(lhs, &#039;juliandate&#039;, jd)&lt;br /&gt;
	end&lt;br /&gt;
	if type(rhs) == &#039;number&#039; then&lt;br /&gt;
		-- Add/subtract days, including fractional days.&lt;br /&gt;
		return do_days(rhs)&lt;br /&gt;
	end&lt;br /&gt;
	if type(rhs) == &#039;string&#039; then&lt;br /&gt;
		-- rhs is a single component like &#039;26m&#039; or &#039;26 months&#039; (with optional sign).&lt;br /&gt;
		-- Fractions like &#039;3.25d&#039; are accepted for the units which are handled as days.&lt;br /&gt;
		local sign, numstr, id = rhs:match(&#039;^%s*([+-]?)([%d%.]+)%s*(%a+)$&#039;)&lt;br /&gt;
		if sign then&lt;br /&gt;
			if sign == &#039;-&#039; then&lt;br /&gt;
				is_sub = not (is_sub and true or false)&lt;br /&gt;
			end&lt;br /&gt;
			local y, m, days&lt;br /&gt;
			local num = tonumber(numstr)&lt;br /&gt;
			if not num then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			id = id:lower()&lt;br /&gt;
			if is_prefix(id, &#039;years&#039;) then&lt;br /&gt;
				y = num&lt;br /&gt;
				m = 0&lt;br /&gt;
			elseif is_prefix(id, &#039;months&#039;) then&lt;br /&gt;
				y = floor(num / 12)&lt;br /&gt;
				m = num % 12&lt;br /&gt;
			elseif is_prefix(id, &#039;weeks&#039;) then&lt;br /&gt;
				days = num * 7&lt;br /&gt;
			elseif is_prefix(id, &#039;days&#039;) then&lt;br /&gt;
				days = num&lt;br /&gt;
			elseif is_prefix(id, &#039;hours&#039;) then&lt;br /&gt;
				days = num / 24&lt;br /&gt;
			elseif is_prefix(id, &#039;minutes&#039;, 3) then&lt;br /&gt;
				days = num / (24 * 60)&lt;br /&gt;
			elseif is_prefix(id, &#039;seconds&#039;) then&lt;br /&gt;
				days = num / (24 * 3600)&lt;br /&gt;
			else&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			if days then&lt;br /&gt;
				return do_days(days)&lt;br /&gt;
			end&lt;br /&gt;
			if numstr:find(&#039;.&#039;, 1, true) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			if is_sub then&lt;br /&gt;
				y = -y&lt;br /&gt;
				m = -m&lt;br /&gt;
			end&lt;br /&gt;
			assert(-11 &amp;lt;= m and m &amp;lt;= 11)&lt;br /&gt;
			y = lhs.year + y&lt;br /&gt;
			m = lhs.month + m&lt;br /&gt;
			if m &amp;gt; 12 then&lt;br /&gt;
				y = y + 1&lt;br /&gt;
				m = m - 12&lt;br /&gt;
			elseif m &amp;lt; 1 then&lt;br /&gt;
				y = y - 1&lt;br /&gt;
				m = m + 12&lt;br /&gt;
			end&lt;br /&gt;
			local d = math.min(lhs.day, days_in_month(y, m, lhs.calendar))&lt;br /&gt;
			return Date(lhs, y, m, d)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if is_diff(rhs) then&lt;br /&gt;
		local days = rhs.age_days&lt;br /&gt;
		if (is_sub or false) ~= (rhs.isnegative or false) then&lt;br /&gt;
			days = -days&lt;br /&gt;
		end&lt;br /&gt;
		return lhs + days&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local full_date_only = {&lt;br /&gt;
	dayabbr = true,&lt;br /&gt;
	dayname = true,&lt;br /&gt;
	dow = true,&lt;br /&gt;
	dayofweek = true,&lt;br /&gt;
	dowiso = true,&lt;br /&gt;
	dayofweekiso = true,&lt;br /&gt;
	dayofyear = true,&lt;br /&gt;
	gsd = true,&lt;br /&gt;
	juliandate = true,&lt;br /&gt;
	jd = true,&lt;br /&gt;
	jdz = true,&lt;br /&gt;
	jdnoon = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Metatable for a date&#039;s calculated fields.&lt;br /&gt;
local datemt = {&lt;br /&gt;
	__index = function (self, key)&lt;br /&gt;
		if rawget(self, &#039;partial&#039;) then&lt;br /&gt;
			if full_date_only[key] then return end&lt;br /&gt;
			if key == &#039;monthabbr&#039; or key == &#039;monthdays&#039; or key == &#039;monthname&#039; then&lt;br /&gt;
				if not self.month then return end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local value&lt;br /&gt;
		if key == &#039;dayabbr&#039; then&lt;br /&gt;
			value = day_info[self.dow][1]&lt;br /&gt;
		elseif key == &#039;dayname&#039; then&lt;br /&gt;
			value = day_info[self.dow][2]&lt;br /&gt;
		elseif key == &#039;dow&#039; then&lt;br /&gt;
			value = (self.jdnoon + 1) % 7  -- day-of-week 0=Sun to 6=Sat&lt;br /&gt;
		elseif key == &#039;dayofweek&#039; then&lt;br /&gt;
			value = self.dow&lt;br /&gt;
		elseif key == &#039;dowiso&#039; then&lt;br /&gt;
			value = (self.jdnoon % 7) + 1  -- ISO day-of-week 1=Mon to 7=Sun&lt;br /&gt;
		elseif key == &#039;dayofweekiso&#039; then&lt;br /&gt;
			value = self.dowiso&lt;br /&gt;
		elseif key == &#039;dayofyear&#039; then&lt;br /&gt;
			local first = Date(self.year, 1, 1, self.calendar).jdnoon&lt;br /&gt;
			value = self.jdnoon - first + 1  -- day-of-year 1 to 366&lt;br /&gt;
		elseif key == &#039;era&#039; then&lt;br /&gt;
			-- Era text (never a negative sign) from year and options.&lt;br /&gt;
			value = get_era_for_year(self.options.era, self.year)&lt;br /&gt;
		elseif key == &#039;format&#039; then&lt;br /&gt;
			value = self.options.format or &#039;dmy&#039;&lt;br /&gt;
		elseif key == &#039;gsd&#039; then&lt;br /&gt;
			-- GSD = 1 from 00:00:00 to 23:59:59 on 1 January 1 AD Gregorian calendar,&lt;br /&gt;
			-- which is from jd 1721425.5 to 1721426.49999.&lt;br /&gt;
			value = floor(self.jd - 1721424.5)&lt;br /&gt;
		elseif key == &#039;juliandate&#039; or key == &#039;jd&#039; or key == &#039;jdz&#039; then&lt;br /&gt;
			local jd, jdz = julian_date(self)&lt;br /&gt;
			rawset(self, &#039;juliandate&#039;, jd)&lt;br /&gt;
			rawset(self, &#039;jd&#039;, jd)&lt;br /&gt;
			rawset(self, &#039;jdz&#039;, jdz)&lt;br /&gt;
			return key == &#039;jdz&#039; and jdz or jd&lt;br /&gt;
		elseif key == &#039;jdnoon&#039; then&lt;br /&gt;
			-- Julian date at noon (an integer) on the calendar day when jd occurs.&lt;br /&gt;
			value = floor(self.jd + 0.5)&lt;br /&gt;
		elseif key == &#039;isleapyear&#039; then&lt;br /&gt;
			value = is_leap_year(self.year, self.calendar)&lt;br /&gt;
		elseif key == &#039;monthabbr&#039; then&lt;br /&gt;
			value = month_info[self.month][1]&lt;br /&gt;
		elseif key == &#039;monthdays&#039; then&lt;br /&gt;
			value = days_in_month(self.year, self.month, self.calendar)&lt;br /&gt;
		elseif key == &#039;monthname&#039; then&lt;br /&gt;
			value = month_info[self.month][2]&lt;br /&gt;
		end&lt;br /&gt;
		if value ~= nil then&lt;br /&gt;
			rawset(self, key, value)&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Date operators.&lt;br /&gt;
local function mt_date_add(lhs, rhs)&lt;br /&gt;
	if not is_date(lhs) then&lt;br /&gt;
		lhs, rhs = rhs, lhs  -- put date on left (it must be a date for this to have been called)&lt;br /&gt;
	end&lt;br /&gt;
	return date_add_sub(lhs, rhs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mt_date_sub(lhs, rhs)&lt;br /&gt;
	if is_date(lhs) then&lt;br /&gt;
		if is_date(rhs) then&lt;br /&gt;
			return DateDiff(lhs, rhs)&lt;br /&gt;
		end&lt;br /&gt;
		return date_add_sub(lhs, rhs, true)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mt_date_concat(lhs, rhs)&lt;br /&gt;
	return tostring(lhs) .. tostring(rhs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mt_date_tostring(self)&lt;br /&gt;
	return self:text()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mt_date_eq(lhs, rhs)&lt;br /&gt;
	-- Return true if dates identify same date/time where, for example,&lt;br /&gt;
	-- Date(-4712, 1, 1, &#039;Julian&#039;) == Date(-4713, 11, 24, &#039;Gregorian&#039;) is true.&lt;br /&gt;
	-- This is called only if lhs and rhs have the same type and the same metamethod.&lt;br /&gt;
	if lhs.partial or rhs.partial then&lt;br /&gt;
		-- One date is partial; the other is a partial or a full date.&lt;br /&gt;
		-- The months may both be nil, but must be the same.&lt;br /&gt;
		return lhs.year == rhs.year and lhs.month == rhs.month and lhs.calendar == rhs.calendar&lt;br /&gt;
	end&lt;br /&gt;
	return lhs.jdz == rhs.jdz&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mt_date_lt(lhs, rhs)&lt;br /&gt;
	-- Return true if lhs &amp;lt; rhs, for example,&lt;br /&gt;
	-- Date(&#039;1 Jan 2016&#039;) &amp;lt; Date(&#039;06:00 1 Jan 2016&#039;) is true.&lt;br /&gt;
	-- This is called only if lhs and rhs have the same type and the same metamethod.&lt;br /&gt;
	if lhs.partial or rhs.partial then&lt;br /&gt;
		-- One date is partial; the other is a partial or a full date.&lt;br /&gt;
		if lhs.calendar ~= rhs.calendar then&lt;br /&gt;
			return lhs.calendar == &#039;Julian&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if lhs.partial then&lt;br /&gt;
			lhs = lhs.partial.first&lt;br /&gt;
		end&lt;br /&gt;
		if rhs.partial then&lt;br /&gt;
			rhs = rhs.partial.first&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return lhs.jdz &amp;lt; rhs.jdz&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ Examples of syntax to construct a date:&lt;br /&gt;
Date(y, m, d, &#039;julian&#039;)             default calendar is &#039;gregorian&#039;&lt;br /&gt;
Date(y, m, d, H, M, S, &#039;julian&#039;)&lt;br /&gt;
Date(&#039;juliandate&#039;, jd, &#039;julian&#039;)    if jd contains &amp;quot;.&amp;quot; text output includes H:M:S&lt;br /&gt;
Date(&#039;currentdate&#039;)&lt;br /&gt;
Date(&#039;currentdatetime&#039;)&lt;br /&gt;
Date(&#039;1 April 1995&#039;, &#039;julian&#039;)      parse date from text&lt;br /&gt;
Date(&#039;1 April 1995 AD&#039;, &#039;julian&#039;)   using an era sets a flag to do the same for output&lt;br /&gt;
Date(&#039;04:30:59 1 April 1995&#039;, &#039;julian&#039;)&lt;br /&gt;
Date(date)                          copy of an existing date&lt;br /&gt;
Date(date, t)                       same, updated with y,m,d,H,M,S fields from table t&lt;br /&gt;
Date(t)                       		date with y,m,d,H,M,S fields from table t&lt;br /&gt;
]]&lt;br /&gt;
function Date(...)  -- for forward declaration above&lt;br /&gt;
	-- Return a table holding a date assuming a uniform calendar always applies&lt;br /&gt;
	-- (proleptic Gregorian calendar or proleptic Julian calendar), or&lt;br /&gt;
	-- return nothing if date is invalid.&lt;br /&gt;
	-- A partial date has a valid year, however its month may be nil, and&lt;br /&gt;
	-- its day and time fields are nil.&lt;br /&gt;
	-- Field partial is set to false (if a full date) or a table (if a partial date).&lt;br /&gt;
	local calendars = { julian = &#039;Julian&#039;, gregorian = &#039;Gregorian&#039; }&lt;br /&gt;
	local newdate = {&lt;br /&gt;
		_id = uniq,&lt;br /&gt;
		calendar = &#039;Gregorian&#039;,  -- default is Gregorian calendar&lt;br /&gt;
		hastime = false,  -- true if input sets a time&lt;br /&gt;
		hour = 0,  -- always set hour/minute/second so don&#039;t have to handle nil&lt;br /&gt;
		minute = 0,&lt;br /&gt;
		second = 0,&lt;br /&gt;
		options = {},&lt;br /&gt;
		list = _date_list,&lt;br /&gt;
		subtract = function (self, rhs, options)&lt;br /&gt;
			return DateDiff(self, rhs, options)&lt;br /&gt;
		end,&lt;br /&gt;
		text = _date_text,&lt;br /&gt;
	}&lt;br /&gt;
	local argtype, datetext, is_copy, jd_number, tnums&lt;br /&gt;
	local numindex = 0&lt;br /&gt;
	local numfields = { &#039;year&#039;, &#039;month&#039;, &#039;day&#039;, &#039;hour&#039;, &#039;minute&#039;, &#039;second&#039; }&lt;br /&gt;
	local numbers = {}&lt;br /&gt;
	for _, v in ipairs({...}) do&lt;br /&gt;
		v = strip_to_nil(v)&lt;br /&gt;
		local vlower = type(v) == &#039;string&#039; and v:lower() or nil&lt;br /&gt;
		if v == nil then&lt;br /&gt;
			-- Ignore empty arguments after stripping so modules can directly pass template parameters.&lt;br /&gt;
		elseif calendars[vlower] then&lt;br /&gt;
			newdate.calendar = calendars[vlower]&lt;br /&gt;
		elseif vlower == &#039;partial&#039; then&lt;br /&gt;
			newdate.partial = true&lt;br /&gt;
		elseif vlower == &#039;fix&#039; then&lt;br /&gt;
			newdate.want_fix = true&lt;br /&gt;
		elseif is_date(v) then&lt;br /&gt;
			-- Copy existing date (items can be overridden by other arguments).&lt;br /&gt;
			if is_copy or tnums then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			is_copy = true&lt;br /&gt;
			newdate.calendar = v.calendar&lt;br /&gt;
			newdate.partial = v.partial&lt;br /&gt;
			newdate.hastime = v.hastime&lt;br /&gt;
			newdate.options = v.options&lt;br /&gt;
			newdate.year = v.year&lt;br /&gt;
			newdate.month = v.month&lt;br /&gt;
			newdate.day = v.day&lt;br /&gt;
			newdate.hour = v.hour&lt;br /&gt;
			newdate.minute = v.minute&lt;br /&gt;
			newdate.second = v.second&lt;br /&gt;
		elseif type(v) == &#039;table&#039; then&lt;br /&gt;
			if tnums then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			tnums = {}&lt;br /&gt;
			local tfields = { year=1, month=1, day=1, hour=2, minute=2, second=2 }&lt;br /&gt;
			for tk, tv in pairs(v) do&lt;br /&gt;
				if tfields[tk] then&lt;br /&gt;
					tnums[tk] = tonumber(tv)&lt;br /&gt;
				end&lt;br /&gt;
				if tfields[tk] == 2 then&lt;br /&gt;
					newdate.hastime = true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			local num = tonumber(v)&lt;br /&gt;
			if not num and argtype == &#039;setdate&#039; and numindex == 1 then&lt;br /&gt;
				num = month_number(v)&lt;br /&gt;
			end&lt;br /&gt;
			if num then&lt;br /&gt;
				if not argtype then&lt;br /&gt;
					argtype = &#039;setdate&#039;&lt;br /&gt;
				end&lt;br /&gt;
				if argtype == &#039;setdate&#039; and numindex &amp;lt; 6 then&lt;br /&gt;
					numindex = numindex + 1&lt;br /&gt;
					numbers[numfields[numindex]] = num&lt;br /&gt;
				elseif argtype == &#039;juliandate&#039; and not jd_number then&lt;br /&gt;
					jd_number = num&lt;br /&gt;
					if type(v) == &#039;string&#039; then&lt;br /&gt;
						if v:find(&#039;.&#039;, 1, true) then&lt;br /&gt;
							newdate.hastime = true&lt;br /&gt;
						end&lt;br /&gt;
					elseif num ~= floor(num) then&lt;br /&gt;
						-- The given value was a number. The time will be used&lt;br /&gt;
						-- if the fractional part is nonzero.&lt;br /&gt;
						newdate.hastime = true&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
			elseif argtype then&lt;br /&gt;
				return&lt;br /&gt;
			elseif type(v) == &#039;string&#039; then&lt;br /&gt;
				if v == &#039;currentdate&#039; or v == &#039;currentdatetime&#039; or v == &#039;juliandate&#039; then&lt;br /&gt;
					argtype = v&lt;br /&gt;
				else&lt;br /&gt;
					argtype = &#039;datetext&#039;&lt;br /&gt;
					datetext = v&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if argtype == &#039;datetext&#039; then&lt;br /&gt;
		if tnums or not set_date_from_numbers(newdate, extract_date(newdate, datetext)) then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
	elseif argtype == &#039;juliandate&#039; then&lt;br /&gt;
		newdate.partial = nil&lt;br /&gt;
		newdate.jd = jd_number&lt;br /&gt;
		if not set_date_from_jd(newdate) then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
	elseif argtype == &#039;currentdate&#039; or argtype == &#039;currentdatetime&#039; then&lt;br /&gt;
		newdate.partial = nil&lt;br /&gt;
		newdate.year = current.year&lt;br /&gt;
		newdate.month = current.month&lt;br /&gt;
		newdate.day = current.day&lt;br /&gt;
		if argtype == &#039;currentdatetime&#039; then&lt;br /&gt;
			newdate.hour = current.hour&lt;br /&gt;
			newdate.minute = current.minute&lt;br /&gt;
			newdate.second = current.second&lt;br /&gt;
			newdate.hastime = true&lt;br /&gt;
		end&lt;br /&gt;
		newdate.calendar = &#039;Gregorian&#039;  -- ignore any given calendar name&lt;br /&gt;
	elseif argtype == &#039;setdate&#039; then&lt;br /&gt;
		if tnums or not set_date_from_numbers(newdate, numbers) then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
	elseif not (is_copy or tnums) then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	if tnums then&lt;br /&gt;
		newdate.jd = nil  -- force recalculation in case jd was set before changes from tnums&lt;br /&gt;
		if not set_date_from_numbers(newdate, tnums) then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if newdate.partial then&lt;br /&gt;
		local year = newdate.year&lt;br /&gt;
		local month = newdate.month&lt;br /&gt;
		local first = Date(year, month or 1, 1, newdate.calendar)&lt;br /&gt;
		month = month or 12&lt;br /&gt;
		local last = Date(year, month, days_in_month(year, month), newdate.calendar)&lt;br /&gt;
		newdate.partial = { first = first, last = last }&lt;br /&gt;
	else&lt;br /&gt;
		newdate.partial = false  -- avoid index lookup&lt;br /&gt;
	end&lt;br /&gt;
	setmetatable(newdate, datemt)&lt;br /&gt;
	local readonly = {}&lt;br /&gt;
	local mt = {&lt;br /&gt;
		__index = newdate,&lt;br /&gt;
		__newindex = function(t, k, v) error(&#039;date.&#039; .. tostring(k) .. &#039; is read-only&#039;, 2) end,&lt;br /&gt;
		__add = mt_date_add,&lt;br /&gt;
		__sub = mt_date_sub,&lt;br /&gt;
		__concat = mt_date_concat,&lt;br /&gt;
		__tostring = mt_date_tostring,&lt;br /&gt;
		__eq = mt_date_eq,&lt;br /&gt;
		__lt = mt_date_lt,&lt;br /&gt;
	}&lt;br /&gt;
	return setmetatable(readonly, mt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _diff_age(diff, code, options)&lt;br /&gt;
	-- Return a tuple of integer values from diff as specified by code, except that&lt;br /&gt;
	-- each integer may be a list of two integers for a diff with a partial date, or&lt;br /&gt;
	-- return nil if the code is not supported.&lt;br /&gt;
	-- If want round, the least significant unit is rounded to nearest whole unit.&lt;br /&gt;
	-- For a duration, an extra day is added.&lt;br /&gt;
	local wantround, wantduration, wantrange&lt;br /&gt;
	if type(options) == &#039;table&#039; then&lt;br /&gt;
		wantround = options.round&lt;br /&gt;
		wantduration = options.duration&lt;br /&gt;
		wantrange = options.range&lt;br /&gt;
	else&lt;br /&gt;
		wantround = options&lt;br /&gt;
	end&lt;br /&gt;
	if not is_diff(diff) then&lt;br /&gt;
		local f = wantduration and &#039;duration&#039; or &#039;age&#039;&lt;br /&gt;
		error(f .. &#039;: need a date difference (use &amp;quot;diff:&#039; .. f .. &#039;()&amp;quot; with a colon)&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if diff.partial then&lt;br /&gt;
		-- Ignore wantround, wantduration.&lt;br /&gt;
		local function choose(v)&lt;br /&gt;
			if type(v) == &#039;table&#039; then&lt;br /&gt;
				if not wantrange or v[1] == v[2] then&lt;br /&gt;
					-- Example: Date(&#039;partial&#039;, 2005) - Date(&#039;partial&#039;, 2001) gives&lt;br /&gt;
					-- diff.years = { 3, 4 } to show the range of possible results.&lt;br /&gt;
					-- If do not want a range, choose the second value as more expected.&lt;br /&gt;
					return v[2]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return v&lt;br /&gt;
		end&lt;br /&gt;
		if code == &#039;ym&#039; or code == &#039;ymd&#039; then&lt;br /&gt;
			if not wantrange and diff.iszero then&lt;br /&gt;
				-- This avoids an unexpected result such as&lt;br /&gt;
				-- Date(&#039;partial&#039;, 2001) - Date(&#039;partial&#039;, 2001)&lt;br /&gt;
				-- giving diff = { years = 0, months = { 0, 11 } }&lt;br /&gt;
				-- which would be reported as 0 years and 11 months.&lt;br /&gt;
				return 0, 0&lt;br /&gt;
			end&lt;br /&gt;
			return choose(diff.partial.years), choose(diff.partial.months)&lt;br /&gt;
		end&lt;br /&gt;
		if code == &#039;y&#039; then&lt;br /&gt;
			return choose(diff.partial.years)&lt;br /&gt;
		end&lt;br /&gt;
		if code == &#039;m&#039; or code == &#039;w&#039; or code == &#039;d&#039; then&lt;br /&gt;
			return choose({ diff.partial.mindiff:age(code), diff.partial.maxdiff:age(code) })&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local extra_days = wantduration and 1 or 0&lt;br /&gt;
	if code == &#039;wd&#039; or code == &#039;w&#039; or code == &#039;d&#039; then&lt;br /&gt;
		local offset = wantround and 0.5 or 0&lt;br /&gt;
		local days = diff.age_days + extra_days&lt;br /&gt;
		if code == &#039;wd&#039; or code == &#039;d&#039; then&lt;br /&gt;
			days = floor(days + offset)&lt;br /&gt;
			if code == &#039;d&#039; then&lt;br /&gt;
				return days&lt;br /&gt;
			end&lt;br /&gt;
			return floor(days/7), days % 7&lt;br /&gt;
		end&lt;br /&gt;
		return floor(days/7 + offset)&lt;br /&gt;
	end&lt;br /&gt;
	local H, M, S = diff.hours, diff.minutes, diff.seconds&lt;br /&gt;
	if code == &#039;dh&#039; or code == &#039;dhm&#039; or code == &#039;dhms&#039; or code == &#039;h&#039; or code == &#039;hm&#039; or code == &#039;hms&#039; then&lt;br /&gt;
		local days = floor(diff.age_days + extra_days)&lt;br /&gt;
		local inc_hour&lt;br /&gt;
		if wantround then&lt;br /&gt;
			if code == &#039;dh&#039; or code == &#039;h&#039; then&lt;br /&gt;
				if M &amp;gt;= 30 then&lt;br /&gt;
					inc_hour = true&lt;br /&gt;
				end&lt;br /&gt;
			elseif code == &#039;dhm&#039; or code == &#039;hm&#039; then&lt;br /&gt;
				if S &amp;gt;= 30 then&lt;br /&gt;
					M = M + 1&lt;br /&gt;
					if M &amp;gt;= 60 then&lt;br /&gt;
						M = 0&lt;br /&gt;
						inc_hour = true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- Nothing needed because S is an integer.&lt;br /&gt;
			end&lt;br /&gt;
			if inc_hour then&lt;br /&gt;
				H = H + 1&lt;br /&gt;
				if H &amp;gt;= 24 then&lt;br /&gt;
					H = 0&lt;br /&gt;
					days = days + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if code == &#039;dh&#039; or code == &#039;dhm&#039; or code == &#039;dhms&#039; then&lt;br /&gt;
			if code == &#039;dh&#039; then&lt;br /&gt;
				return days, H&lt;br /&gt;
			elseif code == &#039;dhm&#039; then&lt;br /&gt;
				return days, H, M&lt;br /&gt;
			else&lt;br /&gt;
				return days, H, M, S&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local hours = days * 24 + H&lt;br /&gt;
		if code == &#039;h&#039; then&lt;br /&gt;
			return hours&lt;br /&gt;
		elseif code == &#039;hm&#039; then&lt;br /&gt;
			return hours, M&lt;br /&gt;
		end&lt;br /&gt;
		return hours, M, S&lt;br /&gt;
	end&lt;br /&gt;
	if wantround then&lt;br /&gt;
		local inc_hour&lt;br /&gt;
		if code == &#039;ymdh&#039; or code == &#039;ymwdh&#039; then&lt;br /&gt;
			if M &amp;gt;= 30 then&lt;br /&gt;
				inc_hour = true&lt;br /&gt;
			end&lt;br /&gt;
		elseif code == &#039;ymdhm&#039; or code == &#039;ymwdhm&#039; then&lt;br /&gt;
			if S &amp;gt;= 30 then&lt;br /&gt;
				M = M + 1&lt;br /&gt;
				if M &amp;gt;= 60 then&lt;br /&gt;
					M = 0&lt;br /&gt;
					inc_hour = true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		elseif code == &#039;ymd&#039; or code == &#039;ymwd&#039; or code == &#039;yd&#039; or code == &#039;md&#039; then&lt;br /&gt;
			if H &amp;gt;= 12 then&lt;br /&gt;
				extra_days = extra_days + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if inc_hour then&lt;br /&gt;
			H = H + 1&lt;br /&gt;
			if H &amp;gt;= 24 then&lt;br /&gt;
				H = 0&lt;br /&gt;
				extra_days = extra_days + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local y, m, d = diff.years, diff.months, diff.days&lt;br /&gt;
	if extra_days &amp;gt; 0 then&lt;br /&gt;
		d = d + extra_days&lt;br /&gt;
		if d &amp;gt; 28 or code == &#039;yd&#039; then&lt;br /&gt;
			-- Recalculate in case have passed a month.&lt;br /&gt;
			diff = diff.date1 + extra_days - diff.date2&lt;br /&gt;
			y, m, d = diff.years, diff.months, diff.days&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if code == &#039;ymd&#039; then&lt;br /&gt;
		return y, m, d&lt;br /&gt;
	elseif code == &#039;yd&#039; then&lt;br /&gt;
		if y &amp;gt; 0 then&lt;br /&gt;
			-- It is known that diff.date1 &amp;gt; diff.date2.&lt;br /&gt;
			diff = diff.date1 - (diff.date2 + (y .. &#039;y&#039;))&lt;br /&gt;
		end&lt;br /&gt;
		return y, floor(diff.age_days)&lt;br /&gt;
	elseif code == &#039;md&#039; then&lt;br /&gt;
		return y * 12 + m, d&lt;br /&gt;
	elseif code == &#039;ym&#039; or code == &#039;m&#039; then&lt;br /&gt;
		if wantround then&lt;br /&gt;
			if d &amp;gt;= 16 then&lt;br /&gt;
				m = m + 1&lt;br /&gt;
				if m &amp;gt;= 12 then&lt;br /&gt;
					m = 0&lt;br /&gt;
					y = y + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if code == &#039;ym&#039; then&lt;br /&gt;
			return y, m&lt;br /&gt;
		end&lt;br /&gt;
		return y * 12 + m&lt;br /&gt;
	elseif code == &#039;ymw&#039; then&lt;br /&gt;
		local weeks = floor(d/7)&lt;br /&gt;
		if wantround then&lt;br /&gt;
			local days = d % 7&lt;br /&gt;
			if days &amp;gt; 3 or (days == 3 and H &amp;gt;= 12) then&lt;br /&gt;
				weeks = weeks + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return y, m, weeks&lt;br /&gt;
	elseif code == &#039;ymwd&#039; then&lt;br /&gt;
		return y, m, floor(d/7), d % 7&lt;br /&gt;
	elseif code == &#039;ymdh&#039; then&lt;br /&gt;
		return y, m, d, H&lt;br /&gt;
	elseif code == &#039;ymwdh&#039; then&lt;br /&gt;
		return y, m, floor(d/7), d % 7, H&lt;br /&gt;
	elseif code == &#039;ymdhm&#039; then&lt;br /&gt;
		return y, m, d, H, M&lt;br /&gt;
	elseif code == &#039;ymwdhm&#039; then&lt;br /&gt;
		return y, m, floor(d/7), d % 7, H, M&lt;br /&gt;
	end&lt;br /&gt;
	if code == &#039;y&#039; then&lt;br /&gt;
		if wantround and m &amp;gt;= 6 then&lt;br /&gt;
			y = y + 1&lt;br /&gt;
		end&lt;br /&gt;
		return y&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _diff_duration(diff, code, options)&lt;br /&gt;
	if type(options) ~= &#039;table&#039; then&lt;br /&gt;
		options = { round = options }&lt;br /&gt;
	end&lt;br /&gt;
	options.duration = true&lt;br /&gt;
	return _diff_age(diff, code, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Metatable for some operations on date differences.&lt;br /&gt;
diffmt = {  -- for forward declaration above&lt;br /&gt;
	__concat = function (lhs, rhs)&lt;br /&gt;
		return tostring(lhs) .. tostring(rhs)&lt;br /&gt;
	end,&lt;br /&gt;
	__tostring = function (self)&lt;br /&gt;
		return tostring(self.age_days)&lt;br /&gt;
	end,&lt;br /&gt;
	__index = function (self, key)&lt;br /&gt;
		local value&lt;br /&gt;
		if key == &#039;age_days&#039; then&lt;br /&gt;
			if rawget(self, &#039;partial&#039;) then&lt;br /&gt;
				local function jdz(date)&lt;br /&gt;
					return (date.partial and date.partial.first or date).jdz&lt;br /&gt;
				end&lt;br /&gt;
				value = jdz(self.date1) - jdz(self.date2)&lt;br /&gt;
			else&lt;br /&gt;
				value = self.date1.jdz - self.date2.jdz&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if value ~= nil then&lt;br /&gt;
			rawset(self, key, value)&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function DateDiff(date1, date2, options)  -- for forward declaration above&lt;br /&gt;
	-- Return a table with the difference between two dates (date1 - date2).&lt;br /&gt;
	-- The difference is negative if date1 is older than date2.&lt;br /&gt;
	-- Return nothing if invalid.&lt;br /&gt;
	-- If d = date1 - date2 then&lt;br /&gt;
	--     date1 = date2 + d&lt;br /&gt;
	-- If date1 &amp;gt;= date2 and the dates have no H:M:S time specified then&lt;br /&gt;
	--     date1 = date2 + (d.years..&#039;y&#039;) + (d.months..&#039;m&#039;) + d.days&lt;br /&gt;
	-- where the larger time units are added first.&lt;br /&gt;
	-- The result of Date(2015,1,x) + &#039;1m&#039; is Date(2015,2,28) for&lt;br /&gt;
	-- x = 28, 29, 30, 31. That means, for example,&lt;br /&gt;
	--     d = Date(2015,3,3) - Date(2015,1,31)&lt;br /&gt;
	-- gives d.years, d.months, d.days = 0, 1, 3 (excluding date1).&lt;br /&gt;
	if not (is_date(date1) and is_date(date2) and date1.calendar == date2.calendar) then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local wantfill&lt;br /&gt;
	if type(options) == &#039;table&#039; then&lt;br /&gt;
		wantfill = options.fill&lt;br /&gt;
	end&lt;br /&gt;
	local isnegative = false&lt;br /&gt;
	local iszero = false&lt;br /&gt;
	if date1 &amp;lt; date2 then&lt;br /&gt;
		isnegative = true&lt;br /&gt;
		date1, date2 = date2, date1&lt;br /&gt;
	elseif date1 == date2 then&lt;br /&gt;
		iszero = true&lt;br /&gt;
	end&lt;br /&gt;
	-- It is known that date1 &amp;gt;= date2 (period is from date2 to date1).&lt;br /&gt;
	if date1.partial or date2.partial then&lt;br /&gt;
		-- Two partial dates might have timelines:&lt;br /&gt;
		---------------------A=================B--- date1 is from A to B inclusive&lt;br /&gt;
		--------C=======D-------------------------- date2 is from C to D inclusive&lt;br /&gt;
		-- date1 &amp;gt; date2 iff A &amp;gt; C (date1.partial.first &amp;gt; date2.partial.first)&lt;br /&gt;
		-- The periods can overlap (&#039;April 2001&#039; - &#039;2001&#039;):&lt;br /&gt;
		-------------A===B------------------------- A=2001-04-01  B=2001-04-30&lt;br /&gt;
		--------C=====================D------------ C=2001-01-01  D=2001-12-31&lt;br /&gt;
		if wantfill then&lt;br /&gt;
			date1, date2 = autofill(date1, date2)&lt;br /&gt;
		else&lt;br /&gt;
			local function zdiff(date1, date2)&lt;br /&gt;
				local diff = date1 - date2&lt;br /&gt;
				if diff.isnegative then&lt;br /&gt;
					return date1 - date1  -- a valid diff in case we call its methods&lt;br /&gt;
				end&lt;br /&gt;
				return diff&lt;br /&gt;
			end&lt;br /&gt;
			local function getdate(date, which)&lt;br /&gt;
				return date.partial and date.partial[which] or date&lt;br /&gt;
			end&lt;br /&gt;
			local maxdiff = zdiff(getdate(date1, &#039;last&#039;), getdate(date2, &#039;first&#039;))&lt;br /&gt;
			local mindiff = zdiff(getdate(date1, &#039;first&#039;), getdate(date2, &#039;last&#039;))&lt;br /&gt;
			local years, months&lt;br /&gt;
			if maxdiff.years == mindiff.years then&lt;br /&gt;
				years = maxdiff.years&lt;br /&gt;
				if maxdiff.months == mindiff.months then&lt;br /&gt;
					months = maxdiff.months&lt;br /&gt;
				else&lt;br /&gt;
					months = { mindiff.months, maxdiff.months }&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				years = { mindiff.years, maxdiff.years }&lt;br /&gt;
			end&lt;br /&gt;
			return setmetatable({&lt;br /&gt;
				date1 = date1,&lt;br /&gt;
				date2 = date2,&lt;br /&gt;
				partial = {&lt;br /&gt;
					years = years,&lt;br /&gt;
					months = months,&lt;br /&gt;
					maxdiff = maxdiff,&lt;br /&gt;
					mindiff = mindiff,&lt;br /&gt;
				},&lt;br /&gt;
				isnegative = isnegative,&lt;br /&gt;
				iszero = iszero,&lt;br /&gt;
				age = _diff_age,&lt;br /&gt;
				duration = _diff_duration,&lt;br /&gt;
			}, diffmt)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local y1, m1 = date1.year, date1.month&lt;br /&gt;
	local y2, m2 = date2.year, date2.month&lt;br /&gt;
	local years = y1 - y2&lt;br /&gt;
	local months = m1 - m2&lt;br /&gt;
	local d1 = date1.day + hms(date1)&lt;br /&gt;
	local d2 = date2.day + hms(date2)&lt;br /&gt;
	local days, time&lt;br /&gt;
	if d1 &amp;gt;= d2 then&lt;br /&gt;
		days = d1 - d2&lt;br /&gt;
	else&lt;br /&gt;
		months = months - 1&lt;br /&gt;
		-- Get days in previous month (before the &amp;quot;to&amp;quot; date) given December has 31 days.&lt;br /&gt;
		local dpm = m1 &amp;gt; 1 and days_in_month(y1, m1 - 1, date1.calendar) or 31&lt;br /&gt;
		if d2 &amp;gt;= dpm then&lt;br /&gt;
			days = d1 - hms(date2)&lt;br /&gt;
		else&lt;br /&gt;
			days = dpm - d2 + d1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if months &amp;lt; 0 then&lt;br /&gt;
		years = years - 1&lt;br /&gt;
		months = months + 12&lt;br /&gt;
	end&lt;br /&gt;
	days, time = math.modf(days)&lt;br /&gt;
	local H, M, S = h_m_s(time)&lt;br /&gt;
	return setmetatable({&lt;br /&gt;
		date1 = date1,&lt;br /&gt;
		date2 = date2,&lt;br /&gt;
		partial = false,  -- avoid index lookup&lt;br /&gt;
		years = years,&lt;br /&gt;
		months = months,&lt;br /&gt;
		days = days,&lt;br /&gt;
		hours = H,&lt;br /&gt;
		minutes = M,&lt;br /&gt;
		seconds = S,&lt;br /&gt;
		isnegative = isnegative,&lt;br /&gt;
		iszero = iszero,&lt;br /&gt;
		age = _diff_age,&lt;br /&gt;
		duration = _diff_duration,&lt;br /&gt;
	}, diffmt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local z = {&lt;br /&gt;
	_current = current,&lt;br /&gt;
	_Date = Date,&lt;br /&gt;
	_days_in_month = days_in_month,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Aqui comienzas las funciones adaptadas de [[Módulo:Fecha]] --&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function z.fechaActual()&lt;br /&gt;
	local d = os.date(&#039;!*t&#039;)&lt;br /&gt;
	&lt;br /&gt;
	local fecha = {}&lt;br /&gt;
	fecha.anyo    = d.year&lt;br /&gt;
	fecha.mes     = d.month&lt;br /&gt;
	fecha.dia     = d.day&lt;br /&gt;
	fecha.hora    = d.hour&lt;br /&gt;
	fecha.minuto  = d.min&lt;br /&gt;
	fecha.segundo = d.sec&lt;br /&gt;
		&lt;br /&gt;
	return fecha&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function validar(fecha)&lt;br /&gt;
	fecha.anyo    = tonumber(fecha.anyo)&lt;br /&gt;
	fecha.mes     = tonumber(fecha.mes)&lt;br /&gt;
	fecha.dia     = tonumber(fecha.dia)&lt;br /&gt;
	fecha.hora    = tonumber(fecha.hora)&lt;br /&gt;
	fecha.minuto  = tonumber(fecha.minuto)&lt;br /&gt;
	fecha.segundo = tonumber(fecha.segundo)&lt;br /&gt;
	&lt;br /&gt;
	-- Falta validar que es una fecha válida&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function z.edad(fecha1, fecha2)&lt;br /&gt;
	--Función que devuelve la edad en años entre dos fechas&lt;br /&gt;
	&lt;br /&gt;
	--Se supone que las fechas se han validado previamente.&lt;br /&gt;
	&lt;br /&gt;
	if not fecha1 then&lt;br /&gt;
		return -- falta devolver un error&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not fecha2 then&lt;br /&gt;
		fecha2=z.fechaActual()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local anyos = fecha2.anyo - fecha1.anyo&lt;br /&gt;
	&lt;br /&gt;
	--if true then return require(&#039;Módulo:Tablas&#039;).tostring(fecha2) end&lt;br /&gt;
	&lt;br /&gt;
	if fecha2.mes &amp;lt; fecha1.mes or&lt;br /&gt;
	   (fecha2.mes == fecha1.mes and fecha2.dia &amp;lt; fecha1.dia) then&lt;br /&gt;
	   	anyos = anyos - 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if anyos &amp;lt; 0 then&lt;br /&gt;
		return -- falta devolver error&lt;br /&gt;
	elseif anyos == 0 then&lt;br /&gt;
		return &#039;menos de un año&#039;&lt;br /&gt;
	elseif anyos == 1 then&lt;br /&gt;
		return &#039;un año&#039;&lt;br /&gt;
	else&lt;br /&gt;
		return anyos .. &#039; años&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function z.llamadaDesdeUnaPlantilla(frame)&lt;br /&gt;
	function obtenerFecha(dia, mes, anyo)&lt;br /&gt;
		local resultado={}&lt;br /&gt;
	&lt;br /&gt;
		if dia then&lt;br /&gt;
			resultado.dia  = dia&lt;br /&gt;
			resultado.mes  = mes&lt;br /&gt;
			resultado.anyo = anyo&lt;br /&gt;
			&lt;br /&gt;
			validar(resultado)&lt;br /&gt;
			&lt;br /&gt;
			return resultado&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	&lt;br /&gt;
	local funcion = z[args[1]]&lt;br /&gt;
	local fecha1  = obtenerFecha(args[2], args[3], args[4])&lt;br /&gt;
	local fecha2  = obtenerFecha(args[5], args[6], args[7])&lt;br /&gt;
&lt;br /&gt;
	return funcion(fecha1, fecha2)&lt;br /&gt;
end&lt;br /&gt;
       &lt;br /&gt;
&lt;br /&gt;
-- Aqui comienzas las funciones adaptadas de [[Módulo:Fechas]] --&lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function z.NombreDelMes(mes)&lt;br /&gt;
  -- Función que devuelve el nombre del mes, donde mes es un número entre 1 y 12. &lt;br /&gt;
  -- Si no es así se devuelve el valor de mes.&lt;br /&gt;
  -- Por ejemplo, 2  --&amp;gt; febrero&lt;br /&gt;
  --              02 --&amp;gt; febrero&lt;br /&gt;
  --              abril --&amp;gt; abril&lt;br /&gt;
  --              MAYO --&amp;gt; MAYO&lt;br /&gt;
   return month_info[tonumber(mes)][2] or mes&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function z.Fecha(frame)&lt;br /&gt;
    -- Función que formatea una fecha&lt;br /&gt;
    -- El único parámetro obligatorio es el año o 3.&lt;br /&gt;
    -- Obtener los argumentos con los que se llama a la función&lt;br /&gt;
&lt;br /&gt;
    local argumentos = {}&lt;br /&gt;
    local parent = {}&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        if   frame.args[3]  or frame.args[&amp;quot;año&amp;quot;]  then&lt;br /&gt;
    	    argumentos = frame.args&lt;br /&gt;
        else &lt;br /&gt;
    	    parent = frame:getParent()&lt;br /&gt;
            argumentos = parent.args&lt;br /&gt;
        end &lt;br /&gt;
    else&lt;br /&gt;
        argumentos = frame&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local enlace = argumentos[&amp;quot;enlace&amp;quot;] ~= &amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- Obtener el día, el nombre del mes y el año incluyendo para los años negativos a.d.&lt;br /&gt;
    local dia = argumentos[&amp;quot;día&amp;quot;] or argumentos[1] or &#039;&#039;    &lt;br /&gt;
    local mes = argumentos[&amp;quot;mes&amp;quot;] or argumentos[2] or &#039;&#039; &lt;br /&gt;
    local anyo=tonumber(argumentos[&amp;quot;año&amp;quot;] or argumentos[3]) or 0&lt;br /&gt;
	&lt;br /&gt;
    dia = (dia ~=&#039;&#039;) and (tonumber(dia) or dia) or dia -- Eliminar ceros a la izquierda del día.&lt;br /&gt;
    mes = (mes~=&#039;&#039;) and ((month_info[mes] and month_info[mes][2]) or month_info[tonumber(mes)][2] or mes) or mes -- Extraer nombre del mes&lt;br /&gt;
    anyo = (anyo&amp;lt;0) and (-anyo .. &#039; a. C.&#039;) or anyo&lt;br /&gt;
    &lt;br /&gt;
    local calendario = (argumentos[&amp;quot;calendario&amp;quot;] == &#039;juliano&#039;) and (&#039;&amp;lt;sup&amp;gt;[[Calendario juliano|jul.]]&amp;lt;/sup&amp;gt;&#039;) or &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    -- Formatear la fecha dependiendo de si el día, el mes o el año están informados&lt;br /&gt;
	local out = &#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
	if anyo ~= 0 then&lt;br /&gt;
		out = enlace and (out .. &#039;[[&#039; .. anyo .. &#039;]]&#039;) or tostring(anyo)&lt;br /&gt;
		if mes~=&#039;&#039; then&lt;br /&gt;
			if argumentos[&amp;quot;mayúscula&amp;quot;] == &#039;sí&#039; then&lt;br /&gt;
				mes = mw.language.new(&#039;es&#039;):ucfirst(mes)&lt;br /&gt;
			end&lt;br /&gt;
			out = enlace and (mes .. &#039;]] de &#039; .. out) or (mes .. &#039; de &#039; .. out)&lt;br /&gt;
			if dia ~=&#039;&#039; then&lt;br /&gt;
				out = enlace and (&#039;[[&#039; .. dia .. &#039; de &#039; .. out .. calendario) or (dia .. &#039; de &#039; .. out .. calendario)&lt;br /&gt;
			else&lt;br /&gt;
				out = enlace and (&#039;[[&#039; .. out) or out&lt;br /&gt;
			end	&lt;br /&gt;
		end&lt;br /&gt;
	 end&lt;br /&gt;
	return out&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 function z.Numerica(frame)&lt;br /&gt;
	local d = Date(frame.args[1])&lt;br /&gt;
    local err = &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Cadena de fecha no válida&amp;lt;/strong&amp;gt;&#039;&lt;br /&gt;
	return (d == nil) and err or d:text(&#039;%Y%m%d&#039;)&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
return z&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:Citas/Validaci%C3%B3nFechas&amp;diff=218120</id>
		<title>Módulo:Citas/ValidaciónFechas</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:Citas/Validaci%C3%B3nFechas&amp;diff=218120"/>
		<updated>2026-02-06T19:13:53Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- returns a number according to the month in a date: 1 for January, etc.  Capitalization and spelling must be correct. If not a valid month, returns 0&lt;br /&gt;
function get_month_number (month)&lt;br /&gt;
local long_months = {[&#039;January&#039;]=1, [&#039;February&#039;]=2, [&#039;March&#039;]=3, [&#039;April&#039;]=4, [&#039;May&#039;]=5, [&#039;June&#039;]=6, [&#039;July&#039;]=7, [&#039;August&#039;]=8, [&#039;September&#039;]=9, [&#039;October&#039;]=10, [&#039;November&#039;]=11, [&#039;December&#039;]=12};&lt;br /&gt;
local short_months = {[&#039;Jan&#039;]=1, [&#039;Feb&#039;]=2, [&#039;Mar&#039;]=3, [&#039;Apr&#039;]=4, [&#039;May&#039;]=5, [&#039;Jun&#039;]=6, [&#039;Jul&#039;]=7, [&#039;Aug&#039;]=8, [&#039;Sep&#039;]=9, [&#039;Oct&#039;]=10, [&#039;Nov&#039;]=11, [&#039;Dec&#039;]=12};&lt;br /&gt;
local temp;&lt;br /&gt;
	temp=long_months[month];&lt;br /&gt;
	if temp then return temp; end				-- if month is the long-form name&lt;br /&gt;
	temp=short_months[month];&lt;br /&gt;
	if temp then return temp; end				-- if month is the short-form name&lt;br /&gt;
	return 0;									-- misspelled, improper case, or not a month name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- returns a number according to the sequence of seasons in a year: 1 for Winter, etc.  Capitalization and spelling must be correct. If not a valid season, returns 0&lt;br /&gt;
function get_season_number (season)&lt;br /&gt;
local season_list = {[&#039;Winter&#039;]=1, [&#039;Spring&#039;]=2, [&#039;Summer&#039;]=3, [&#039;Fall&#039;]=4, [&#039;Autumn&#039;]=4}&lt;br /&gt;
local temp;&lt;br /&gt;
	temp=season_list[season];&lt;br /&gt;
	if temp then return temp; end				-- if season is a valid name return its number&lt;br /&gt;
	return 0;									-- misspelled, improper case, or not a season name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--returns true if month or season is valid (properly spelled, capitalized, abbreviated)&lt;br /&gt;
function is_valid_month_or_season (month_season)&lt;br /&gt;
	if 0 == get_month_number (month_season) then		-- if month text isn&#039;t one of the twelve months, might be a season&lt;br /&gt;
		if 0 == get_season_number (month_season) then	-- not a month, is it a season?&lt;br /&gt;
			return false;								-- return false not a month or one of the five seasons&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Function gets current year from the server and compares it to year from a citation parameter.  Years more than one year in the future are not acceptable.&lt;br /&gt;
function is_valid_year(year)&lt;br /&gt;
	if not is_set(year_limit) then&lt;br /&gt;
		year_limit = tonumber(os.date(&amp;quot;%Y&amp;quot;))+1;	-- global variable so we only have to fetch it once (os.date(&amp;quot;Y&amp;quot;) no longer works?)&lt;br /&gt;
	end&lt;br /&gt;
	return tonumber(year) &amp;lt;= year_limit;			-- false if year is in the future more than one year&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Returns true if day is less than or equal to the number of days in month and year is no farther into the future than next year; else returns false.&lt;br /&gt;
&lt;br /&gt;
Assumes Julian calendar prior to year 1582 and Gregorian calendar thereafter. Accounts for Julian calendar leap years before 1582 and Gregorian leap years after 1582.&lt;br /&gt;
Where the two calendars overlap (1582 to approximately 1923) dates are assumed to be Gregorian.&lt;br /&gt;
]]&lt;br /&gt;
function is_valid_date (year, month, day)&lt;br /&gt;
local days_in_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};&lt;br /&gt;
local month_length;&lt;br /&gt;
	if not is_valid_year(year) then	-- no farther into the future than next year&lt;br /&gt;
		return false;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (2==month) then							-- if February&lt;br /&gt;
		month_length = 28;						-- then 28 days unless&lt;br /&gt;
		if 1582 &amp;gt; tonumber(year) then			-- Julian calendar&lt;br /&gt;
			if 0==(year%4) then&lt;br /&gt;
				month_length = 29;&lt;br /&gt;
			end&lt;br /&gt;
		else									-- Gregorian calendar&lt;br /&gt;
			if (0==(year%4) and (0~=(year%100) or 0==(year%400))) then	-- is a leap year?&lt;br /&gt;
				month_length = 29;				-- if leap year then 29 days in February&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		month_length=days_in_month[month];&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if tonumber (day) &amp;gt; month_length then&lt;br /&gt;
		return false;&lt;br /&gt;
	end&lt;br /&gt;
	return true;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Check a pair of months or seasons to see if both are valid members of a month or season pair.&lt;br /&gt;
&lt;br /&gt;
Month pairs are expected to be left to right, earliest to latest in time.  Similarly, seasons are also left to right, earliest to latest in time.  There is&lt;br /&gt;
an oddity with seasons.  Winter is assigned a value of 1, spring 2, ..., fall and autumn 4.  Because winter can follow fall/autumn at the end of a calender year, a special test&lt;br /&gt;
is made to see if |date=Fall-Winter yyyy (4-1) is the date.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function is_valid_month_season_range(range_start, range_end)&lt;br /&gt;
	local range_start_number = get_month_number (range_start);&lt;br /&gt;
	&lt;br /&gt;
	if 0 == range_start_number then								-- is this a month range?&lt;br /&gt;
		local range_start_number = get_season_number (range_start);		-- not a month; is it a season? get start season number&lt;br /&gt;
		local range_end_number = get_season_number (range_end);			-- get end season number&lt;br /&gt;
&lt;br /&gt;
		if 0 ~= range_start_number then							-- is start of range a season?&lt;br /&gt;
			if range_start_number &amp;lt; range_end_number then		-- range_start is a season&lt;br /&gt;
				return true;									-- return true when range_end is also a season and follows start season; else false&lt;br /&gt;
			end&lt;br /&gt;
			if 4 == range_start_number and 1 == range_end_number then	-- special case when range is Fall-Winter or Autumn-Winter&lt;br /&gt;
				return true;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false;		-- range_start is not a month or a season; or range_start is a season and range_end is not; or improper season sequence&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local range_end_number = get_month_number (range_end);		-- get end month number&lt;br /&gt;
	if range_start_number &amp;lt; range_end_number then				-- range_start is a month; does range_start precede range_end?&lt;br /&gt;
		return true;											-- if yes, return true&lt;br /&gt;
	end&lt;br /&gt;
	return false;												-- range_start month number is greater than or equal to range end number; or range end isn&#039;t a month&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Check date format to see that it is one of the formats approved by WP:DATESNO or WP:DATERANGE. Exception: only allowed range separator is endash.&lt;br /&gt;
Additionally, check the date to see that it is a real date: no 31 in 30-day months; no 29 February when not a leap year.  Months, both long-form and three&lt;br /&gt;
character abbreviations, and seasons must be spelled correctly. Future years beyond next year are not allowed.&lt;br /&gt;
&lt;br /&gt;
If the date fails the fomat tests, this function returns false and does not return values for anchor_year and COinS_date.  When this happens, the date parameter is&lt;br /&gt;
used in the COinS metadata and the CITEREF identifier gets its year from the year parameter if present otherwise CITEREF does not get a date value.&lt;br /&gt;
&lt;br /&gt;
Inputs:&lt;br /&gt;
	date_string - date string from date-holding parameters (date, year, accessdate, embargo, archivedate, etc)&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
	false if date string is not a real date; else&lt;br /&gt;
	true, anchor_year, COinS_date&lt;br /&gt;
		anchor_year can be used in CITEREF anchors&lt;br /&gt;
		COinS_date is date_string without anchor_year disambiguator if any&lt;br /&gt;
]]&lt;br /&gt;
function check_date (date_string)&lt;br /&gt;
	local year;			-- assume that year2, months, and days are not used;&lt;br /&gt;
	local year2=0;		-- second year in a year range&lt;br /&gt;
	local month=0;&lt;br /&gt;
	local month2=0;		-- second month in a month range&lt;br /&gt;
	local day=0;&lt;br /&gt;
	local day2=0;		-- second day in a day range&lt;br /&gt;
	local anchor_year;&lt;br /&gt;
	local coins_date;&lt;br /&gt;
&lt;br /&gt;
	if date_string:match(&amp;quot;^%d%d%d%d%-%d%d%-%d%d$&amp;quot;) then										-- year-initial numerical year month day format&lt;br /&gt;
		year, month, day=string.match(date_string, &amp;quot;(%d%d%d%d)%-(%d%d)%-(%d%d)&amp;quot;);&lt;br /&gt;
		month=tonumber(month);&lt;br /&gt;
		if 12 &amp;lt; month or 1 &amp;gt; month or 1583 &amp;gt; tonumber(year) then return false; end			-- month number not valid or not Gregorian calendar&lt;br /&gt;
		anchor_year = year;&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d?, +[1-9]%d%d%d%a?$&amp;quot;) then						-- month-initial: month day, year&lt;br /&gt;
		month, day, anchor_year, year=string.match(date_string, &amp;quot;(%a+)%s*(%d%d?),%s*((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		if 0 == month then return false; end												-- return false if month text isn&#039;t one of the twelve months&lt;br /&gt;
				&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d?–[1-9]%d?, +[1-9]%d%d%d%a?$&amp;quot;) then				-- month-initial day range: month day–day, year; days are separated by endash&lt;br /&gt;
		month, day, day2, anchor_year, year=string.match(date_string, &amp;quot;(%a+) +(%d%d?)–(%d%d?), +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if tonumber(day) &amp;gt;= tonumber(day2) then return false; end							-- date range order is left to right: earlier to later; dates may not be the same;&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		if 0 == month then return false; end												-- return false if month text isn&#039;t one of the twelve months&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d? +%a+ +[1-9]%d%d%d%a?$&amp;quot;) then						-- day-initial: day month year&lt;br /&gt;
		day, month, anchor_year, year=string.match(date_string, &amp;quot;(%d%d*)%s*(%a+)%s*((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		if 0 == month then return false; end												-- return false if month text isn&#039;t one of the twelve months&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d?–[1-9]%d? +%a+ +[1-9]%d%d%d%a?$&amp;quot;) then				-- day-range-initial: day–day month year; days are separated by endash&lt;br /&gt;
		day, day2, month, anchor_year, year=string.match(date_string, &amp;quot;(%d%d?)–(%d%d?) +(%a+) +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if tonumber(day) &amp;gt;= tonumber(day2) then return false; end							-- date range order is left to right: earlier to later; dates may not be the same;&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		if 0 == month then return false; end												-- return false if month text isn&#039;t one of the twelve months&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d? +%a+ – [1-9]%d? +%a+ +[1-9]%d%d%d%a?$&amp;quot;) then		-- day initial month-day-range: day month - day month year; uses spaced endash&lt;br /&gt;
		day, month, day2, month2, anchor_year, year=date_string:match(&amp;quot;(%d%d?) +(%a+) – (%d%d?) +(%a+) +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if (not is_valid_month_season_range(month, month2)) or not is_valid_year(year) then return false; end	-- date range order is left to right: earlier to later;&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		month2 = get_month_number (month2);&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d? – %a+ +[1-9]%d?, +[1-9]%d%d%d%a?$&amp;quot;) then		-- month initial month-day-range: month day – month day, year;  uses spaced endash&lt;br /&gt;
		month, day, month2, day2, anchor_year, year=date_string:match(&amp;quot;(%a+) +(%d%d?) – (%a+) +(%d%d?), +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if (not is_valid_month_season_range(month, month2)) or not is_valid_year(year) then return false; end&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		month2 = get_month_number (month2);&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^Winter +[1-9]%d%d%d–[1-9]%d%d%d%a?$&amp;quot;) then					-- special case Winter year-year; year separated with unspaced endash&lt;br /&gt;
		year, anchor_year, year2=date_string:match(&amp;quot;Winter +(%d%d%d%d)–((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		anchor_year=year..&#039;–&#039;..anchor_year;													-- assemble anchor_year from both years&lt;br /&gt;
		if 1 ~= tonumber(year2) - tonumber(year) then return false; end						-- must be sequential years, left to right, earlier to later&lt;br /&gt;
		if not is_valid_year(year2) then return false; end									-- no year farther in the future than next year&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d%d%d% – %a+ +[1-9]%d%d%d%a?$&amp;quot;) then				-- month/season year - month/season year; separated by spaced endash&lt;br /&gt;
		month, year, month2, anchor_year, year2=date_string:match(&amp;quot;(%a+) +(%d%d%d%d) – (%a+) +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		anchor_year=year..&#039;–&#039;..anchor_year;													-- assemble anchor_year from both years&lt;br /&gt;
		if tonumber(year) &amp;gt;= tonumber(year2) then return false; end							-- left to right, earlier to later, not the same&lt;br /&gt;
		if not is_valid_year(year2) then return false; end									-- no year farther in the future than next year&lt;br /&gt;
		if not((0 ~= get_month_number(month) and 0 ~= get_month_number(month2)) or 			-- both must be month year or season year, not mixed&lt;br /&gt;
			(0 ~= get_season_number(month) and 0 ~= get_season_number(month2))) then return false; end&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match (&amp;quot;^%a+–%a+ +[1-9]%d%d%d%a?$&amp;quot;) then								-- month/season range year; months separated by endash &lt;br /&gt;
		month, month2, anchor_year, year=date_string:match (&amp;quot;(%a+)–(%a+)%s*((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if (not is_valid_month_season_range(month, month2)) or (not is_valid_year(year)) then&lt;br /&gt;
			return false;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +%d%d%d%d%a?$&amp;quot;) then							-- month/season year&lt;br /&gt;
		month, anchor_year, year=date_string:match(&amp;quot;(%a+)%s*((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if not is_valid_year(year) then return false; end&lt;br /&gt;
		if not is_valid_month_or_season (month) then return false; end&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d%d%d?–[1-9]%d%d%d?%a?$&amp;quot;) then				-- Year range: YYY-YYY or YYY-YYYY or YYYY–YYYY; separated by unspaced endash; 100-9999&lt;br /&gt;
		year, anchor_year, year2=date_string:match(&amp;quot;(%d%d%d%d?)–((%d%d%d%d?)%a?)&amp;quot;);&lt;br /&gt;
		anchor_year=year..&#039;–&#039;..anchor_year;										-- assemble anchor year from both years&lt;br /&gt;
		if tonumber(year) &amp;gt;= tonumber(year2) then return false; end				-- left to right, earlier to later, not the same&lt;br /&gt;
		if not is_valid_year(year2) then return false; end						-- no year farther in the future than next year&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d%d%d–%d%d%a?$&amp;quot;) then						-- Year range: YYYY–YY; separated by unspaced endash&lt;br /&gt;
		local century;&lt;br /&gt;
		year, century, anchor_year, year2=date_string:match(&amp;quot;((%d%d)%d%d)–((%d%d)%a?)&amp;quot;);&lt;br /&gt;
		anchor_year=year..&#039;–&#039;..anchor_year;										-- assemble anchor year from both years&lt;br /&gt;
		if 13 &amp;gt; tonumber(year2) then return false; end							-- don&#039;t allow 2003-05 which might be May 2003&lt;br /&gt;
		year2 = century..year2;													-- add the century to year2 for comparisons&lt;br /&gt;
		if tonumber(year) &amp;gt;= tonumber(year2) then return false; end				-- left to right, earlier to later, not the same&lt;br /&gt;
		if not is_valid_year(year2) then return false; end						-- no year farther in the future than next year&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d%d%d?%a?$&amp;quot;) then							-- year; here accept either YYY or YYYY&lt;br /&gt;
		anchor_year, year=date_string:match(&amp;quot;((%d%d%d%d?)%a?)&amp;quot;);&lt;br /&gt;
		if false == is_valid_year(year) then&lt;br /&gt;
			return false;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		return false;											-- date format not one of the MOS:DATE approved formats&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result=true;											-- check whole dates for validity; assume true because not all dates will go through this test&lt;br /&gt;
	if 0 ~= year and 0 ~= month and 0 ~= day and 0 == year2 and 0 == month2 and 0 == day2 then		-- YMD (simple whole date)&lt;br /&gt;
		result=is_valid_date(year,month,day);&lt;br /&gt;
&lt;br /&gt;
	elseif 0 ~= year and 0 ~= month and 0 ~= day and 0 == year2 and 0 == month2 and 0 ~= day2 then	-- YMD-d (day range)&lt;br /&gt;
		result=is_valid_date(year,month,day);&lt;br /&gt;
		result=result and is_valid_date(year,month,day2);&lt;br /&gt;
&lt;br /&gt;
	elseif 0 ~= year and 0 ~= month and 0 ~= day and 0 == year2 and 0 ~= month2 and 0 ~= day2 then	-- YMD-md (day month range)&lt;br /&gt;
		result=is_valid_date(year,month,day);&lt;br /&gt;
		result=result and is_valid_date(year,month2,day2);&lt;br /&gt;
&lt;br /&gt;
	elseif 0 ~= year and 0 ~= month and 0 ~= day and 0 ~= year2 and 0 ~= month2 and 0 ~= day2 then	-- YMD-ymd (day month year range)&lt;br /&gt;
		result=is_valid_date(year,month,day);&lt;br /&gt;
		result=result and is_valid_date(year2,month2,day2);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if false == result then return false; end&lt;br /&gt;
																-- if here, then date_string is valid; get coins_date from date_string (leave CITEREF disambiguator) ...&lt;br /&gt;
	coins_date=date_string:match(&amp;quot;^(.+%d)%a?$&amp;quot;);				-- last character of valid disambiguatable date is always a digit&lt;br /&gt;
	coins_date= mw.ustring.gsub(coins_date, &amp;quot;–&amp;quot;, &amp;quot;-&amp;quot; );			-- ... and replace any ndash with a hyphen&lt;br /&gt;
	&lt;br /&gt;
	return true, anchor_year, coins_date;						-- format is good and date string represents a real date&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Cycle the date-holding parameters in passed table date_parameters_list through check_date() to check compliance with MOS:DATE. For all valid dates, check_date() returns&lt;br /&gt;
true. The |date= parameter test is unique, it is the only date holding parameter from which values for anchor_year (used in CITEREF identifiers) and COinS_date (used in&lt;br /&gt;
the COinS metadata) are derived.  The |date= parameter is the only date-holding parameter that is allowed to contain the no-date keywords &amp;quot;n.d.&amp;quot; or &amp;quot;nd&amp;quot; (without quotes).&lt;br /&gt;
&lt;br /&gt;
Unlike most error messages created in this module, only one error message is created by this function. Because all of the date holding parameters are processed serially,&lt;br /&gt;
a single error message is created as the dates are tested.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function p.dates(date_parameters_list)&lt;br /&gt;
	local anchor_year;		-- will return as nil if the date being tested is not |date=&lt;br /&gt;
	local COinS_date;		-- will return as nil if the date being tested is not |date=&lt;br /&gt;
	local error_message =&amp;quot;&amp;quot;;&lt;br /&gt;
	local good_date=false;&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(date_parameters_list) do										-- for each date-holding parameter in the list&lt;br /&gt;
		if is_set(v) then															-- if the parameter has a value&lt;br /&gt;
			if v:match(&amp;quot;^c%. [1-9]%d%d%d?%a?$&amp;quot;) then								-- special case for c. year or with or without CITEREF disambiguator - only |date= and |year=&lt;br /&gt;
				local year = v:match(&amp;quot;c%. ([1-9]%d%d%d?)%a?&amp;quot;);						-- get the year portion so it can be tested&lt;br /&gt;
				if &#039;date&#039;==k then&lt;br /&gt;
					anchor_year, COinS_date = v:match(&amp;quot;((c%. [1-9]%d%d%d?)%a?)&amp;quot;);	-- anchor year and COinS_date only from |date= parameter&lt;br /&gt;
					good_date = is_valid_year(year);&lt;br /&gt;
				elseif &#039;year&#039;==k then&lt;br /&gt;
					good_date = is_valid_year(year);&lt;br /&gt;
				end&lt;br /&gt;
			elseif &#039;date&#039;==k then													-- if the parameter is |date=&lt;br /&gt;
				if v:match(&amp;quot;n%.d%.%a?&amp;quot;) then										-- if |date=n.d. with or without a CITEREF disambiguator&lt;br /&gt;
					good_date, anchor_year, COinS_date = true, v:match(&amp;quot;((n%.d%.)%a?)&amp;quot;);	--&amp;quot;n.d.&amp;quot;; no error when date parameter is set to no date&lt;br /&gt;
				elseif v:match(&amp;quot;nd%a?$&amp;quot;) then										-- if |date=nd with or without a CITEREF disambiguator&lt;br /&gt;
					good_date, anchor_year, COinS_date = true, v:match(&amp;quot;((nd)%a?)&amp;quot;);	--&amp;quot;nd&amp;quot;;	no error when date parameter is set to no date&lt;br /&gt;
				else&lt;br /&gt;
					good_date, anchor_year, COinS_date = check_date (v);			-- go test the date&lt;br /&gt;
				end&lt;br /&gt;
			else																	-- any other date-holding parameter&lt;br /&gt;
				good_date = check_date (v);											-- go test the date&lt;br /&gt;
			end&lt;br /&gt;
			if false==good_date then												-- assemble one error message so we don&#039;t add the tracking category multiple times&lt;br /&gt;
				if is_set(error_message) then										-- once we&#039;ve added the first portion of the error message ...&lt;br /&gt;
					error_message=error_message .. &amp;quot;, &amp;quot;;							-- ... add a comma space separator&lt;br /&gt;
				end&lt;br /&gt;
				error_message=error_message .. &amp;quot;&amp;amp;#124;&amp;quot; .. k .. &amp;quot;=&amp;quot;;				-- add the failed parameter&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return anchor_year, COinS_date, error_message;		-- and done&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p;&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:Citas&amp;diff=218119</id>
		<title>Módulo:Citas</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:Citas&amp;diff=218119"/>
		<updated>2026-02-06T19:13:51Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local z = {&lt;br /&gt;
    error_categories = {};&lt;br /&gt;
    error_ids = {};&lt;br /&gt;
    message_tail = {};&lt;br /&gt;
}&lt;br /&gt;
-- Include translation message hooks, ID and error handling configuration settings.&lt;br /&gt;
--local cfg = mw.loadData( &#039;Mdódulo:Citas/Configuración/pruebas&#039; );&lt;br /&gt;
&lt;br /&gt;
-- Contains a list of all recognized parameters&lt;br /&gt;
--local whitelist = mw.loadData( &#039;Módulo:Citas/Whitelist/pruebas&#039; );&lt;br /&gt;
--local dates = require(&#039;Módulo:Citas/ValidaciónFechas/pruebas&#039;).dates		-- location of date validation code&lt;br /&gt;
&lt;br /&gt;
--Módulo para formatear las fechas&lt;br /&gt;
local DateModule = require(&#039;Módulo:Date&#039;)._Date &lt;br /&gt;
&lt;br /&gt;
-- Whether variable is set or not&lt;br /&gt;
function is_set( var )&lt;br /&gt;
    return not (var == nil or var == &#039;&#039;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- First set variable or nil if none&lt;br /&gt;
function first_set(...)&lt;br /&gt;
    local list = {...};&lt;br /&gt;
    for _, var in pairs(list) do&lt;br /&gt;
        if is_set( var ) then&lt;br /&gt;
            return var;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Whether needle is in haystack&lt;br /&gt;
function inArray( needle, haystack )&lt;br /&gt;
    if needle == nil then&lt;br /&gt;
        return false;&lt;br /&gt;
    end&lt;br /&gt;
    for n,v in ipairs( haystack ) do&lt;br /&gt;
        if v == needle then&lt;br /&gt;
            return n;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Formatea una fecha para que se devuelva de la siguiente forma: &amp;quot;1 de enero de 2020&amp;quot;&lt;br /&gt;
Formats a date so it is returned as follows: &amp;quot;1 de enero de 2020&amp;quot;&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function format_date(date_string)&lt;br /&gt;
	function dateFormatter(text)&lt;br /&gt;
		return DateModule(text):text(&#039;%-d de %B de %-Y&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local stat, res = pcall(dateFormatter, date_string)&lt;br /&gt;
	&lt;br /&gt;
	if stat then&lt;br /&gt;
      return res&lt;br /&gt;
    else&lt;br /&gt;
      return date_string&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Categorize and emit an error message when the citation contains one or more deprecated parameters.  Because deprecated parameters (currently |day=, |month=,&lt;br /&gt;
|coauthor=, and |coauthors=) aren&#039;t related to each other and because these parameters may be concatenated into the variables used by |date= and |author#= (and aliases)&lt;br /&gt;
details of which parameter caused the error message are not provided.  Only one error message is emitted regarless of the number of deprecated parameters in the citation.&lt;br /&gt;
]]&lt;br /&gt;
function deprecated_parameter( name )&lt;br /&gt;
--		table.insert( z.message_tail, { seterror( &#039;deprecated_params&#039;, {error_message}, true ) } );		-- add error message&lt;br /&gt;
		table.insert( z.message_tail, { seterror( &#039;deprecated_params&#039;, { name }, true ) } );		-- add error message&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Populates numbered arguments in a message string using an argument table.&lt;br /&gt;
function substitute( msg, args )&lt;br /&gt;
--	return args and tostring( mw.message.newRawMessage( msg, args ) ) or msg;&lt;br /&gt;
	return args and mw.message.newRawMessage( msg, args ):plain() or msg;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Apply kerning to open the space between the quote mark provided by the Module and a leading or trailing quote mark contained in a |title= or |chapter= parameter&#039;s value.&lt;br /&gt;
This function will positive kern  either single or double quotes:&lt;br /&gt;
	&amp;quot;&#039;Unkerned title with leading and trailing single quote marks&#039;&amp;quot;&lt;br /&gt;
	&amp;quot; &#039;Kerned title with leading and trailing single quote marks&#039; &amp;quot; (in real life the kerning isn&#039;t as wide as this example)&lt;br /&gt;
]]&lt;br /&gt;
function kern_quotes (str)&lt;br /&gt;
	local left=&#039;&amp;lt;span style=&amp;quot;padding-left:0.2em;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;;		-- spacing to use when title contains leading single or double quote mark&lt;br /&gt;
	local right=&#039;&amp;lt;span style=&amp;quot;padding-right:0.2em;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;;		-- spacing to use when title contains trailing single or double quote mark&lt;br /&gt;
	&lt;br /&gt;
	if  str:match (&amp;quot;^[\&amp;quot;\&#039;][^\&#039;]&amp;quot;) then&lt;br /&gt;
		str = string.gsub( str, &amp;quot;^[\&amp;quot;\&#039;]&amp;quot;, left, 1 );				-- replace (captured) leading single or double quote with left-side &amp;lt;span&amp;gt;&lt;br /&gt;
	end&lt;br /&gt;
	if str:match (&amp;quot;[^\&#039;][\&amp;quot;\&#039;]$&amp;quot;) then&lt;br /&gt;
		str = string.gsub( str, &amp;quot;[\&amp;quot;\&#039;]$&amp;quot;, right, 1 );			-- replace (captured) trailing single or double quote with right-side &amp;lt;span&amp;gt;&lt;br /&gt;
	end&lt;br /&gt;
	return str;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Wraps a string using a message_list configuration taking one argument&lt;br /&gt;
function wrap( key, str, lower )&lt;br /&gt;
    if not is_set( str ) then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    elseif inArray( key, { &#039;italic-title&#039;, &#039;trans-italic-title&#039; } ) then&lt;br /&gt;
        str = safeforitalics( str );&lt;br /&gt;
    end&lt;br /&gt;
    if lower == true then&lt;br /&gt;
        return substitute( cfg.messages[key]:lower(), {str} );&lt;br /&gt;
    else&lt;br /&gt;
        return substitute( cfg.messages[key], {str} );&lt;br /&gt;
    end        &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Argument wrapper.  This function provides support for argument &lt;br /&gt;
mapping defined in the configuration file so that multiple names&lt;br /&gt;
can be transparently aliased to single internal variable.&lt;br /&gt;
]]&lt;br /&gt;
function argument_wrapper( args )&lt;br /&gt;
    local origin = {};&lt;br /&gt;
    &lt;br /&gt;
    return setmetatable({&lt;br /&gt;
        ORIGIN = function( self, k )&lt;br /&gt;
            local dummy = self[k]; --force the variable to be loaded.&lt;br /&gt;
            return origin[k];&lt;br /&gt;
        end&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        __index = function ( tbl, k )&lt;br /&gt;
            if origin[k] ~= nil then&lt;br /&gt;
                return nil;&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            local args, list, v = args, cfg.aliases[k];&lt;br /&gt;
            &lt;br /&gt;
            if type( list ) == &#039;table&#039; then&lt;br /&gt;
                v, origin[k] = selectone( args, list, &#039;redundant_parameters&#039; );&lt;br /&gt;
                if origin[k] == nil then&lt;br /&gt;
                    origin[k] = &#039;&#039;; -- Empty string, not nil&lt;br /&gt;
                end&lt;br /&gt;
            elseif list ~= nil then&lt;br /&gt;
                v, origin[k] = args[list], list;&lt;br /&gt;
            else&lt;br /&gt;
                -- maybe let through instead of raising an error?&lt;br /&gt;
                -- v, origin[k] = args[k], k;&lt;br /&gt;
                error( cfg.messages[&#039;unknown_argument_map&#039;] );&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            -- Empty strings, not nil;&lt;br /&gt;
            if v == nil then&lt;br /&gt;
                v = cfg.defaults[k] or &#039;&#039;;&lt;br /&gt;
                origin[k] = &#039;&#039;;&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            tbl = rawset( tbl, k, v );&lt;br /&gt;
            return v;&lt;br /&gt;
        end,&lt;br /&gt;
    });&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Looks for a parameter&#039;s name in the whitelist.&lt;br /&gt;
&lt;br /&gt;
Parameters in the whitelist can have three values:&lt;br /&gt;
	true - active, supported parameters&lt;br /&gt;
	false - deprecated, supported parameters&lt;br /&gt;
	nil - unsupported parameters&lt;br /&gt;
]]&lt;br /&gt;
function validate( name )&lt;br /&gt;
	local name = tostring( name );&lt;br /&gt;
	local state = whitelist.basic_arguments[ name ];&lt;br /&gt;
	&lt;br /&gt;
	-- Normal arguments&lt;br /&gt;
	if true == state then return true; end		-- valid actively supported parameter&lt;br /&gt;
	if false == state then&lt;br /&gt;
		deprecated_parameter ( name );			-- parameter is deprecated but still supported&lt;br /&gt;
		return true;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Arguments with numbers in them&lt;br /&gt;
	name = name:gsub( &amp;quot;%d+&amp;quot;, &amp;quot;#&amp;quot; );				-- replace digit(s) with # (last25 becomes last#&lt;br /&gt;
	state = whitelist.numbered_arguments[ name ];&lt;br /&gt;
	if true == state then return true; end		-- valid actively supported parameter&lt;br /&gt;
	if false == state then&lt;br /&gt;
		deprecated_parameter ( name );			-- parameter is deprecated but still supported&lt;br /&gt;
		return true;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false;								-- Not supported because not found or name is set to nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Formats a comment for error trapping&lt;br /&gt;
function errorcomment( content, hidden )&lt;br /&gt;
    return wrap( hidden and &#039;hidden-error&#039; or &#039;visible-error&#039;, content );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Sets an error condition and returns the appropriate error message.  The actual placement&lt;br /&gt;
of the error message in the output is the responsibility of the calling function.&lt;br /&gt;
]]&lt;br /&gt;
function seterror( error_id, arguments, raw, prefix, suffix )&lt;br /&gt;
    local error_state = cfg.error_conditions[ error_id ];&lt;br /&gt;
    &lt;br /&gt;
    prefix = prefix or &amp;quot;&amp;quot;;&lt;br /&gt;
    suffix = suffix or &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    if error_state == nil then&lt;br /&gt;
        error( cfg.messages[&#039;undefined_error&#039;] );&lt;br /&gt;
    elseif is_set( error_state.category ) then&lt;br /&gt;
        table.insert( z.error_categories, error_state.category );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local message = substitute( error_state.message, arguments );&lt;br /&gt;
    &lt;br /&gt;
    message = message .. &amp;quot; ([[&amp;quot; .. cfg.messages[&#039;help page link&#039;] .. &lt;br /&gt;
        &amp;quot;#&amp;quot; .. error_state.anchor .. &amp;quot;|&amp;quot; ..&lt;br /&gt;
        cfg.messages[&#039;help page label&#039;] .. &amp;quot;]])&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    z.error_ids[ error_id ] = true;&lt;br /&gt;
    if inArray( error_id, { &#039;bare_url_missing_title&#039;, &#039;trans_missing_title&#039; } )&lt;br /&gt;
            and z.error_ids[&#039;citation_missing_title&#039;] then&lt;br /&gt;
        return &#039;&#039;, false;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    message = table.concat({ prefix, message, suffix });&lt;br /&gt;
    &lt;br /&gt;
    if raw == true then&lt;br /&gt;
        return message, error_state.hidden;&lt;br /&gt;
    end        &lt;br /&gt;
        &lt;br /&gt;
    return errorcomment( message, error_state.hidden );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Formats a wiki style external link&lt;br /&gt;
function externallinkid(options)&lt;br /&gt;
    local url_string = options.id;&lt;br /&gt;
    if options.encode == true or options.encode == nil then&lt;br /&gt;
        url_string = mw.uri.encode( url_string );&lt;br /&gt;
    end&lt;br /&gt;
    return wrap( &#039;id&#039;, internallink(options.link, options.label) ..&lt;br /&gt;
        (options.separator or &amp;quot;&amp;amp;nbsp;&amp;quot;) .. mw.ustring.format( &#039;[%s%s%s %s]&#039;, &lt;br /&gt;
        options.prefix, url_string, options.suffix or &amp;quot;&amp;quot;,&lt;br /&gt;
        mw.text.nowiki(options.id)&lt;br /&gt;
    ));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Formats a wiki style internal link&lt;br /&gt;
function internallinkid(options)&lt;br /&gt;
    return wrap( &#039;id&#039;, internallink(options.link, options.label) ..&lt;br /&gt;
        (options.separator or &amp;quot;&amp;amp;nbsp;&amp;quot;) .. mw.ustring.format( &#039;[[%s%s%s|%s]]&#039;,&lt;br /&gt;
        options.prefix, options.id, options.suffix or &amp;quot;&amp;quot;,&lt;br /&gt;
        mw.text.nowiki(options.id)&lt;br /&gt;
    ));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Format an internal link, if link is really set&lt;br /&gt;
function internallink( link, label )&lt;br /&gt;
	if link and link ~= &#039;&#039; then&lt;br /&gt;
		return mw.ustring.format( &#039;[[%s|%s]]&#039;, link, label )&lt;br /&gt;
	else&lt;br /&gt;
		return label&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Format an external link with error checking&lt;br /&gt;
function externallink( URL, label, source )&lt;br /&gt;
    local error_str = &amp;quot;&amp;quot;;&lt;br /&gt;
    if not is_set( label ) then&lt;br /&gt;
        label = URL;&lt;br /&gt;
        if is_set( source ) then&lt;br /&gt;
            error_str = seterror( &#039;bare_url_missing_title&#039;, { wrap( &#039;parameter&#039;, source ) }, false, &amp;quot; &amp;quot; );&lt;br /&gt;
        else&lt;br /&gt;
            error( cfg.messages[&amp;quot;bare_url_no_origin&amp;quot;] );&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not checkurl( URL ) then&lt;br /&gt;
        error_str = seterror( &#039;bad_url&#039;, {}, false, &amp;quot; &amp;quot; ) .. error_str;&lt;br /&gt;
    elseif mw.title.getCurrentTitle():inNamespaces(0, 100, 104) and&lt;br /&gt;
    	not mw.title.getCurrentTitle().text:match(&#039;Wikipedia&#039;) and&lt;br /&gt;
    	URL:match(&#039;//[%a%.%-]+%.wikipedia%.org&#039;) then&lt;br /&gt;
    	error_str = seterror( &#039;bad_url_autorreferencia&#039;, {}, false, &amp;quot; &amp;quot; ) .. error_str;&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat({ &amp;quot;[&amp;quot;, URL, &amp;quot; &amp;quot;, safeforurl( label ), &amp;quot;]&amp;quot;, error_str });&lt;br /&gt;
end&lt;br /&gt;
--[[--------------------------&amp;lt; N O R M A L I Z E _ L C C N &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
lccn normalization (http://www.loc.gov/marc/lccn-namespace.html#normalization)&lt;br /&gt;
1. Remove all blanks.&lt;br /&gt;
2. If there is a forward slash (/) in the string, remove it, and remove all characters to the right of the forward slash.&lt;br /&gt;
3. If there is a hyphen in the string:&lt;br /&gt;
	a. Remove it.&lt;br /&gt;
	b. Inspect the substring following (to the right of) the (removed) hyphen. Then (and assuming that steps 1 and 2 have been carried out):&lt;br /&gt;
		1. All these characters should be digits, and there should be six or less. (not done in this function)&lt;br /&gt;
		2. If the length of the substring is less than 6, left-fill the substring with zeroes until the length is six.&lt;br /&gt;
&lt;br /&gt;
Returns a normalized lccn for lccn() to validate.  There is no error checking (step 3.b.1) performed in this function.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function normalize_lccn (lccn)&lt;br /&gt;
	lccn = lccn:gsub (&amp;quot;%s&amp;quot;, &amp;quot;&amp;quot;);									-- 1. strip whitespace&lt;br /&gt;
&lt;br /&gt;
	if nil ~= string.find (lccn,&#039;/&#039;) then&lt;br /&gt;
		lccn = lccn:match (&amp;quot;(.-)/&amp;quot;);								-- 2. remove forward slash and all character to the right of it&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local prefix&lt;br /&gt;
	local suffix&lt;br /&gt;
	prefix, suffix = lccn:match (&amp;quot;(.+)%-(.+)&amp;quot;);						-- 3.a remove hyphen by splitting the string into prefix and suffix&lt;br /&gt;
&lt;br /&gt;
	if nil ~= suffix then											-- if there was a hyphen&lt;br /&gt;
		suffix=string.rep(&amp;quot;0&amp;quot;, 6-string.len (suffix)) .. suffix;	-- 3.b.2 left fill the suffix with 0s if suffix length less than 6&lt;br /&gt;
		lccn=prefix..suffix;										-- reassemble the lccn&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return lccn;&lt;br /&gt;
	end&lt;br /&gt;
--[[&lt;br /&gt;
Format LCCN link and do simple error checking.  LCCN is a character string 8-12 characters long. The length of the LCCN dictates the character type of the first 1-3 characters; the&lt;br /&gt;
rightmost eight are always digits. http://info-uri.info/registry/OAIHandler?verb=GetRecord&amp;amp;metadataPrefix=reg&amp;amp;identifier=info:lccn/&lt;br /&gt;
&lt;br /&gt;
length = 8 then all digits&lt;br /&gt;
length = 9 then lccn[1] is alpha&lt;br /&gt;
length = 10 then lccn[1] and lccn[2] are both alpha or both digits&lt;br /&gt;
length = 11 then lccn[1] is alpha, lccn[2] and lccn[3] are both alpha or both digits&lt;br /&gt;
length = 12 then lccn[1] and lccn[2] are both alpha&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
function lccn(id)&lt;br /&gt;
	local handler = cfg.id_handlers[&#039;LCCN&#039;];&lt;br /&gt;
	local err_cat =  &#039;&#039;;								-- presume that LCCN is valid&lt;br /&gt;
&lt;br /&gt;
	id = normalize_lccn (id);&lt;br /&gt;
	&lt;br /&gt;
	local len = id:len();								-- get the length of the lccn&lt;br /&gt;
&lt;br /&gt;
	if 8 == len then&lt;br /&gt;
		if id:match(&amp;quot;[^%d]&amp;quot;) then						-- if LCCN has anything but digits (nil if only digits)&lt;br /&gt;
			err_cat = &#039; &#039; .. seterror( &#039;bad_lccn&#039; );	-- set an error message&lt;br /&gt;
		end&lt;br /&gt;
	elseif 9 == len then								-- LCCN should be adddddddd&lt;br /&gt;
		if nil == id:match(&amp;quot;%a%d%d%d%d%d%d%d%d&amp;quot;) then			-- does it match our pattern?&lt;br /&gt;
			err_cat = &#039; &#039; .. seterror( &#039;bad_lccn&#039; );	-- set an error message&lt;br /&gt;
		end&lt;br /&gt;
	elseif 10 == len then								-- LCCN should be aadddddddd or dddddddddd&lt;br /&gt;
		if id:match(&amp;quot;[^%d]&amp;quot;) then							-- if LCCN has anything but digits (nil if only digits) ...&lt;br /&gt;
			if nil == id:match(&amp;quot;^%a%a%d%d%d%d%d%d%d%d&amp;quot;) then	-- ... see if it matches our pattern&lt;br /&gt;
				err_cat = &#039; &#039; .. seterror( &#039;bad_lccn&#039; );	-- no match, set an error message&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif 11 == len then								-- LCCN should be aaadddddddd or adddddddddd&lt;br /&gt;
		if not (id:match(&amp;quot;^%a%a%a%d%d%d%d%d%d%d%d&amp;quot;) or id:match(&amp;quot;^%a%d%d%d%d%d%d%d%d%d%d&amp;quot;)) then	-- see if it matches one of our patterns&lt;br /&gt;
			err_cat = &#039; &#039; .. seterror( &#039;bad_lccn&#039; );	-- no match, set an error message&lt;br /&gt;
		end&lt;br /&gt;
	elseif 12 == len then								-- LCCN should be aadddddddddd&lt;br /&gt;
		if not id:match(&amp;quot;^%a%a%d%d%d%d%d%d%d%d%d%d&amp;quot;) then	-- see if it matches our pattern&lt;br /&gt;
			err_cat = &#039; &#039; .. seterror( &#039;bad_lccn&#039; );	-- no match, set an error message&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		err_cat = &#039; &#039; .. seterror( &#039;bad_lccn&#039; );		-- wrong length, set an error message&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return externallinkid({link = handler.link, label = handler.label,&lt;br /&gt;
			prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode}) .. err_cat;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Format PMID and do simple error checking.  PMIDs are sequential numbers beginning at 1 and counting up.  This code checks the PMID to see that it&lt;br /&gt;
contains only digits and is less than test_limit; the value in local variable test_limit will need to be updated periodically as more PMIDs are issued.&lt;br /&gt;
]]&lt;br /&gt;
function pmid(id)&lt;br /&gt;
	local test_limit = 45000000;						-- update this value as PMIDs approach&lt;br /&gt;
	local handler = cfg.id_handlers[&#039;PMID&#039;];&lt;br /&gt;
	local err_cat =  &#039;&#039;;								-- presume that PMID is valid&lt;br /&gt;
	&lt;br /&gt;
	if id:match(&amp;quot;[^%d]&amp;quot;) then							-- if PMID has anything but digits&lt;br /&gt;
		err_cat = &#039; &#039; .. seterror( &#039;bad_pmid&#039; );		-- set an error message&lt;br /&gt;
	else												-- PMID is only digits&lt;br /&gt;
		local id_num = tonumber(id);					-- convert id to a number for range testing&lt;br /&gt;
		if 1 &amp;gt; id_num or test_limit &amp;lt; id_num then		-- if PMID is outside test limit boundaries&lt;br /&gt;
			err_cat = &#039; &#039; .. seterror( &#039;bad_pmid&#039; );	-- set an error message&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return externallinkid({link = handler.link, label = handler.label,&lt;br /&gt;
			prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode}) .. err_cat;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Determines if a PMC identifier&#039;s online version is embargoed. Compares the date in |embargo= against today&#039;s date.  If embargo date is&lt;br /&gt;
in the future, returns true; otherwse, returns false because the embargo has expired or |embargo= not set in this cite.&lt;br /&gt;
]]&lt;br /&gt;
function is_embargoed(embargo)&lt;br /&gt;
	if is_set(embargo) then&lt;br /&gt;
		local lang = mw.getContentLanguage();&lt;br /&gt;
		local good1, embargo_date, good2, todays_date;&lt;br /&gt;
		good1, embargo_date = pcall( lang.formatDate, lang, &#039;U&#039;, embargo );&lt;br /&gt;
		good2, todays_date = pcall( lang.formatDate, lang, &#039;U&#039; );&lt;br /&gt;
	&lt;br /&gt;
		if good1 and good2 and tonumber( embargo_date ) &amp;gt;= tonumber( todays_date ) then	--is embargo date is in the future?&lt;br /&gt;
			return true;	-- still embargoed&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false;			-- embargo expired or |embargo= not set&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Format a PMC, do simple error checking, and check for embargoed articles.&lt;br /&gt;
&lt;br /&gt;
The embargo parameter takes a date for a value. If the embargo date is in the future&lt;br /&gt;
the PMC identifier will not be linked to the article.  If the embargo specifies a date in the past, or if it is empty or omitted, then&lt;br /&gt;
the PMC identifier is linked to the article through the link at cfg.id_handlers[&#039;PMC&#039;].prefix.&lt;br /&gt;
&lt;br /&gt;
PMCs are sequential numbers beginning at 1 and counting up.  This code checks the PMC to see that it contains only digits and is less&lt;br /&gt;
than test_limit; the value in local variable test_limit will need to be updated periodically as more PMCs are issued.&lt;br /&gt;
]]&lt;br /&gt;
function pmc(id, embargo)&lt;br /&gt;
	local test_limit = 16000000;							-- update this value as PMCs approach&lt;br /&gt;
	local handler = cfg.id_handlers[&#039;PMC&#039;];&lt;br /&gt;
	local err_cat =  &#039;&#039;;								-- presume that PMC is valid&lt;br /&gt;
    &lt;br /&gt;
	local text;&lt;br /&gt;
&lt;br /&gt;
	if id:match(&amp;quot;^PMC%d&amp;quot;) then&lt;br /&gt;
		id = id:sub(4, j)								-- remove &#039;PMC&#039; preffix if given&lt;br /&gt;
	end&lt;br /&gt;
	if id:match(&amp;quot;[^%d]&amp;quot;) then							-- if PMC has anything but digits&lt;br /&gt;
		err_cat = &#039; &#039; .. seterror( &#039;bad_pmc&#039; );			-- set an error message&lt;br /&gt;
	else												-- PMC is only digits&lt;br /&gt;
		local id_num = tonumber(id);					-- convert id to a number for range testing&lt;br /&gt;
		if 1 &amp;gt; id_num or test_limit &amp;lt; id_num then		-- if PMC is outside test limit boundaries&lt;br /&gt;
			err_cat = &#039; &#039; .. seterror( &#039;bad_pmc&#039; );		-- set an error message&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if is_embargoed(embargo) then&lt;br /&gt;
		text=&amp;quot;[[&amp;quot; .. handler.link .. &amp;quot;|&amp;quot; .. handler.label .. &amp;quot;]]:&amp;quot; .. handler.separator .. id .. err_cat;	--still embargoed so no external link&lt;br /&gt;
	else&lt;br /&gt;
		text = externallinkid({link = handler.link, label = handler.label,			--no embargo date, ok to link to article&lt;br /&gt;
			prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode}) .. err_cat;&lt;br /&gt;
	end&lt;br /&gt;
	return text;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Formats a DOI and checks for DOI errors.&lt;br /&gt;
&lt;br /&gt;
-- DOI names contain two parts: prefix and suffix separated by a forward slash.&lt;br /&gt;
--  Prefix: directory indicator &#039;10.&#039; followed by a registrant code&lt;br /&gt;
--  Suffix: character string of any length chosen by the registrant&lt;br /&gt;
&lt;br /&gt;
-- This function checks a DOI name for: prefix/suffix.  If the doi name contains spaces or endashes,&lt;br /&gt;
-- or, if it ends with a period or a comma, this function will emit a bad_doi error message.&lt;br /&gt;
&lt;br /&gt;
-- DOI names are case-insensitive and can incorporate any printable Unicode characters so the test for spaces, endash,&lt;br /&gt;
-- and terminal punctuation may not be technically correct but it appears, that in practice these characters are rarely if ever used in doi names.&lt;br /&gt;
&lt;br /&gt;
function doi(id, inactive)&lt;br /&gt;
    local cat = &amp;quot;&amp;quot;&lt;br /&gt;
    local handler = cfg.id_handlers[&#039;DOI&#039;];&lt;br /&gt;
    &lt;br /&gt;
    local text;&lt;br /&gt;
	if is_set(inactive) then&lt;br /&gt;
		local inactive_year = inactive:match(&amp;quot;%d%d%d%d&amp;quot;) or &#039;&#039;;		-- try to get the year portion from the inactive date&lt;br /&gt;
		text = &amp;quot;[[&amp;quot; .. handler.link .. &amp;quot;|&amp;quot; .. handler.label .. &amp;quot;]]:&amp;quot; .. id;&lt;br /&gt;
		if is_set(inactive_year) then&lt;br /&gt;
			table.insert( z.error_categories, &amp;quot;Wikipedia:Páginas con DOI inactivos desde &amp;quot; .. inactive_year );&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( z.error_categories, &amp;quot;Wikipedia:Páginas con DOI inactivos&amp;quot; );	-- when inactive doesn&#039;t contain a recognizable year&lt;br /&gt;
		end&lt;br /&gt;
		inactive = &amp;quot; (&amp;quot; .. cfg.messages[&#039;inactive&#039;] .. &amp;quot; &amp;quot; .. inactive .. &amp;quot;)&amp;quot; &lt;br /&gt;
	else &lt;br /&gt;
		text = externallinkid({link = handler.link, label = handler.label,&lt;br /&gt;
			prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode})&lt;br /&gt;
		inactive = &amp;quot;&amp;quot; &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if nil == id:match(&amp;quot;^10%.[^%s–]-/[^%s–]-[^%.,]$&amp;quot;) then	-- doi must begin with &#039;10.&#039;, must contain a fwd slash, must not contain spaces or endashes, and must not end with period or comma&lt;br /&gt;
		cat = &#039; &#039; .. seterror( &#039;bad_doi&#039; );&lt;br /&gt;
	end&lt;br /&gt;
	return text .. inactive .. cat &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Formats an OpenLibrary link, and checks for associated errors.&lt;br /&gt;
function openlibrary(id)&lt;br /&gt;
    local code = id:sub(-1,-1)&lt;br /&gt;
    local handler = cfg.id_handlers[&#039;OL&#039;];&lt;br /&gt;
    if ( code == &amp;quot;A&amp;quot; ) then&lt;br /&gt;
        return externallinkid({link=handler.link, label=handler.label,&lt;br /&gt;
            prefix=&amp;quot;http://openlibrary.org/authors/OL&amp;quot;,id=id, separator=handler.separator,&lt;br /&gt;
            encode = handler.encode})&lt;br /&gt;
    elseif ( code == &amp;quot;M&amp;quot; ) then&lt;br /&gt;
        return externallinkid({link=handler.link, label=handler.label,&lt;br /&gt;
            prefix=&amp;quot;http://openlibrary.org/books/OL&amp;quot;,id=id, separator=handler.separator,&lt;br /&gt;
            encode = handler.encode})&lt;br /&gt;
    elseif ( code == &amp;quot;W&amp;quot; ) then&lt;br /&gt;
        return externallinkid({link=handler.link, label=handler.label,&lt;br /&gt;
            prefix= &amp;quot;http://openlibrary.org/works/OL&amp;quot;,id=id, separator=handler.separator,&lt;br /&gt;
            encode = handler.encode})&lt;br /&gt;
    else&lt;br /&gt;
        return externallinkid({link=handler.link, label=handler.label,&lt;br /&gt;
            prefix= &amp;quot;http://openlibrary.org/OL&amp;quot;,id=id, separator=handler.separator,&lt;br /&gt;
            encode = handler.encode}) .. &lt;br /&gt;
            &#039; &#039; .. seterror( &#039;bad_ol&#039; );&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Validate and format an issn.  This code fixes the case where an editor has included an ISSN in the citation but has separated the two groups of four&lt;br /&gt;
digits with a space.  When that condition occurred, the resulting link looked like this:&lt;br /&gt;
&lt;br /&gt;
	|issn=0819 4327 gives: [http://www.worldcat.org/issn/0819 4327 0819 4327]  -- can&#039;t have spaces in an external link&lt;br /&gt;
	&lt;br /&gt;
This code now prevents that by inserting a hyphen at the issn midpoint.  It also validates the issn for length and makes sure that the checkdigit agrees&lt;br /&gt;
with the calculated value.  Incorrect length (8 digits), characters other than 0-9 and X, or checkdigit / calculated value mismatch will all cause a check issn&lt;br /&gt;
error message.  The issn is always displayed with a hyphen, even if the issn was given as a single group of 8 digits.&lt;br /&gt;
]]&lt;br /&gt;
function issn(id, id_handler)&lt;br /&gt;
	local ModuloIdentificadores = require(&#039;Módulo:Identificadores&#039;)	&lt;br /&gt;
	local issn_copy = id;		-- save a copy of unadulterated issn; use this version for display if issn does not validate&lt;br /&gt;
	local handler = cfg.id_handlers[id_handler];&lt;br /&gt;
	local text;&lt;br /&gt;
	local valid_issn = true;&lt;br /&gt;
&lt;br /&gt;
	id=id:gsub( &amp;quot;[%s-–]&amp;quot;, &amp;quot;&amp;quot; );									-- strip spaces, hyphens, and ndashes from the issn&lt;br /&gt;
&lt;br /&gt;
	if 8 ~= id:len() or nil == id:match( &amp;quot;^%d*X?$&amp;quot; ) then		-- validate the issn: 8 didgits long, containing only 0-9 or X in the last position&lt;br /&gt;
		valid_issn=false;										-- wrong length or improper character&lt;br /&gt;
	else&lt;br /&gt;
		valid_issn=ModuloIdentificadores.esValidoISXN(id, 8);	-- validate issn&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if true == valid_issn then&lt;br /&gt;
		id = string.sub( id, 1, 4 ) .. &amp;quot;-&amp;quot; .. string.sub( id, 5 );	-- if valid, display correctly formatted version&lt;br /&gt;
	else&lt;br /&gt;
		id = issn_copy;											-- if not valid, use the show the invalid issn with error message&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	text = externallinkid({link = handler.link, label = handler.label,&lt;br /&gt;
		prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode})&lt;br /&gt;
 &lt;br /&gt;
	if false == valid_issn then&lt;br /&gt;
		text = text .. &#039; &#039; .. seterror( &#039;bad_issn&#039; )			-- add an error message if the issn is invalid&lt;br /&gt;
	end &lt;br /&gt;
	&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
This function sets default title types (equivalent to the citation including |type=&amp;lt;default value&amp;gt;) for those citations that have defaults.&lt;br /&gt;
Also handles the special case where it is desireable to omit the title type from the rendered citation (|type=none).&lt;br /&gt;
]]&lt;br /&gt;
function set_titletype(cite_class, title_type)&lt;br /&gt;
	if is_set(title_type) then&lt;br /&gt;
		if &amp;quot;none&amp;quot; == title_type then&lt;br /&gt;
			title_type = &amp;quot;&amp;quot;;					-- if |type=none then type parameter not displayed&lt;br /&gt;
		end&lt;br /&gt;
		return title_type;						-- if |type= has been set to any other value use that value&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
--	if &amp;quot;AV media notes&amp;quot; == cite_class or &amp;quot;DVD notes&amp;quot; == cite_class then		-- if this citation is cite AV media notes or cite DVD notes&lt;br /&gt;
	if &amp;quot;notas audiovisual&amp;quot; == cite_class or &amp;quot;notas de DVD&amp;quot; == cite_class then		-- if this citation is cite AV media notes or cite DVD notes		&lt;br /&gt;
		return &amp;quot;Media notes&amp;quot;;					-- display AV media notes / DVD media notes annotation -- Falta traducir&lt;br /&gt;
&lt;br /&gt;
	elseif &amp;quot;podcast&amp;quot; == cite_class then			-- if this citation is cite podcast&lt;br /&gt;
		return &amp;quot;Podcast&amp;quot;;						-- display podcast annotation&lt;br /&gt;
&lt;br /&gt;
	elseif &amp;quot;pressrelease&amp;quot; == cite_class then	-- if this citation is cite press release&lt;br /&gt;
		return &amp;quot;Press release&amp;quot;;					-- display press release annotation&lt;br /&gt;
&lt;br /&gt;
	elseif &amp;quot;techreport&amp;quot; == cite_class then		-- if this citation is cite techreport&lt;br /&gt;
		return &amp;quot;Technical report&amp;quot;;				-- display techreport annotation&lt;br /&gt;
		&lt;br /&gt;
	elseif &amp;quot;tesis&amp;quot; == cite_class then			-- if this citation is cite thesis (degree option handled after this function returns)&lt;br /&gt;
			return &amp;quot;Tesis&amp;quot;;			 			-- display simple thesis annotation (without |degree= modification)			&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Determines whether a URL string is valid&lt;br /&gt;
&lt;br /&gt;
At present the only check is whether the string appears to &lt;br /&gt;
be prefixed with a URI scheme.  It is not determined whether &lt;br /&gt;
the URI scheme is valid or whether the URL is otherwise well &lt;br /&gt;
formed.&lt;br /&gt;
]]&lt;br /&gt;
function checkurl( url_str )&lt;br /&gt;
    -- Protocol-relative or URL scheme&lt;br /&gt;
    return url_str:sub(1,2) == &amp;quot;//&amp;quot; or url_str:match( &amp;quot;^[^/]*:&amp;quot; ) ~= nil;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Removes irrelevant text and dashes from ISBN number&lt;br /&gt;
-- Similar to that used for Special:BookSources&lt;br /&gt;
function cleanisbn( isbn_str )&lt;br /&gt;
    return isbn_str:gsub( &amp;quot;[^-0-9X]&amp;quot;, &amp;quot;&amp;quot; );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Extract page numbers from external wikilinks in any of the |page=, |pages=, or |at= parameters for use in COinS.&lt;br /&gt;
function get_coins_pages (pages)&lt;br /&gt;
	if not is_set (pages) then return pages; end			-- if no page numbers then we&#039;re done&lt;br /&gt;
	&lt;br /&gt;
    while true do&lt;br /&gt;
    	local urlPattern = &amp;quot;%[%w*:?//[^ ]+%s+([%w%d].*)%]&amp;quot;&lt;br /&gt;
		local urlMatch = pages:match(urlPattern); -- pattern is the opening bracket, the url and following space(s): &amp;quot;[url &amp;quot;&lt;br /&gt;
		if nil == urlMatch then break; end					-- no more urls&lt;br /&gt;
		pages = pages:gsub(urlPattern, &amp;quot;%1&amp;quot;);					-- remove as many instances of pattern as possible&lt;br /&gt;
	end&lt;br /&gt;
	pages = pages:gsub(&amp;quot;[%[%]]&amp;quot;, &amp;quot;&amp;quot;);						-- remove the brackets&lt;br /&gt;
	pages = pages:gsub(&amp;quot;–&amp;quot;, &amp;quot;-&amp;quot; );							-- replace endashes with hyphens&lt;br /&gt;
	pages = pages:gsub(&amp;quot;&amp;amp;%w+;&amp;quot;, &amp;quot;-&amp;quot; );						-- and replace html entities (&amp;amp;ndash; etc) with hyphens; do we need to replace numerical entities like &amp;amp;#32; and the like?&lt;br /&gt;
	return pages;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets the display text for a wikilink like [[A|B]] or [[B]] gives B&lt;br /&gt;
function removewikilink( str )&lt;br /&gt;
    return (str:gsub( &amp;quot;%[%[([^%[%]]*)%]%]&amp;quot;, function(l)&lt;br /&gt;
        return l:gsub( &amp;quot;^[^|]*|(.*)$&amp;quot;, &amp;quot;%1&amp;quot; ):gsub(&amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;);&lt;br /&gt;
    end));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Escape sequences for content that will be used for URL descriptions&lt;br /&gt;
function safeforurl( str )&lt;br /&gt;
    if str:match( &amp;quot;%[%[.-%]%]&amp;quot; ) ~= nil then &lt;br /&gt;
        table.insert( z.message_tail, { seterror( &#039;wikilink_in_url&#039;, {}, true ) } );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return str:gsub( &#039;[%[%]\n]&#039;, {    &lt;br /&gt;
        [&#039;[&#039;] = &#039;&amp;amp;#91;&#039;,&lt;br /&gt;
        [&#039;]&#039;] = &#039;&amp;amp;#93;&#039;,&lt;br /&gt;
        [&#039;\n&#039;] = &#039; &#039; } );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Convierte un guión largo (signo de negativo) en un guión corto.&lt;br /&gt;
function dashtohyphen( str )&lt;br /&gt;
    if not is_set(str) or str:match( &amp;quot;[%[%]{}&amp;lt;&amp;gt;]&amp;quot; ) ~= nil then&lt;br /&gt;
        return str;&lt;br /&gt;
    end    &lt;br /&gt;
    return str:gsub( &#039;–&#039;, &#039;-&#039; );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Protects a string that will be wrapped in wiki italic markup &#039;&#039; ... &#039;&#039;&lt;br /&gt;
function safeforitalics( str )&lt;br /&gt;
    --[[ Note: We can not use &amp;lt;i&amp;gt; for italics, as the expected behavior for&lt;br /&gt;
    italics specified by &#039;&#039;...&#039;&#039; in the title is that they will be inverted&lt;br /&gt;
    (i.e. unitalicized) in the resulting references.  In addition, &amp;lt;i&amp;gt; and &#039;&#039;&lt;br /&gt;
    tend to interact poorly under Mediawiki&#039;s HTML tidy. ]]&lt;br /&gt;
    &lt;br /&gt;
    if not is_set(str) then&lt;br /&gt;
        return str;&lt;br /&gt;
    else&lt;br /&gt;
        if str:sub(1,1) == &amp;quot;&#039;&amp;quot; then str = &amp;quot;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; .. str; end&lt;br /&gt;
        if str:sub(-1,-1) == &amp;quot;&#039;&amp;quot; then str = str .. &amp;quot;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;quot;; end&lt;br /&gt;
        &lt;br /&gt;
        -- Remove newlines as they break italics.&lt;br /&gt;
        return str:gsub( &#039;\n&#039;, &#039; &#039; );&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Joins a sequence of strings together while checking for duplicate separation&lt;br /&gt;
characters.&lt;br /&gt;
]]&lt;br /&gt;
function safejoin( tbl, duplicate_char )&lt;br /&gt;
    --[[&lt;br /&gt;
    Note: we use string functions here, rather than ustring functions.&lt;br /&gt;
    &lt;br /&gt;
    This has considerably faster performance and should work correctly as &lt;br /&gt;
    long as the duplicate_char is strict ASCII.  The strings&lt;br /&gt;
    in tbl may be ASCII or UTF8.&lt;br /&gt;
    ]]&lt;br /&gt;
    &lt;br /&gt;
    local str = &#039;&#039;;&lt;br /&gt;
    local comp = &#039;&#039;;&lt;br /&gt;
    local end_chr = &#039;&#039;;&lt;br /&gt;
    local trim;&lt;br /&gt;
    for _, value in ipairs( tbl ) do&lt;br /&gt;
        if value == nil then value = &#039;&#039;; end&lt;br /&gt;
        &lt;br /&gt;
        if str == &#039;&#039; then&lt;br /&gt;
            str = value;&lt;br /&gt;
        elseif value ~= &#039;&#039; then&lt;br /&gt;
            if value:sub(1,1) == &#039;&amp;lt;&#039; then&lt;br /&gt;
                -- Special case of values enclosed in spans and other markup.&lt;br /&gt;
                comp = value:gsub( &amp;quot;%b&amp;lt;&amp;gt;&amp;quot;, &amp;quot;&amp;quot; );&lt;br /&gt;
            else&lt;br /&gt;
                comp = value;&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            if comp:sub(1,1) == duplicate_char then&lt;br /&gt;
                trim = false;&lt;br /&gt;
                end_chr = str:sub(-1,-1);&lt;br /&gt;
                -- str = str .. &amp;quot;&amp;lt;HERE(enchr=&amp;quot; .. end_chr.. &amp;quot;)&amp;quot;&lt;br /&gt;
                if end_chr == duplicate_char then&lt;br /&gt;
                    str = str:sub(1,-2);&lt;br /&gt;
                elseif end_chr == &amp;quot;&#039;&amp;quot; then&lt;br /&gt;
                    if str:sub(-3,-1) == duplicate_char .. &amp;quot;&#039;&#039;&amp;quot; then&lt;br /&gt;
                        str = str:sub(1, -4) .. &amp;quot;&#039;&#039;&amp;quot;;&lt;br /&gt;
                    elseif str:sub(-5,-1) == duplicate_char .. &amp;quot;]]&#039;&#039;&amp;quot; then&lt;br /&gt;
                        trim = true;&lt;br /&gt;
                    elseif str:sub(-4,-1) == duplicate_char .. &amp;quot;]&#039;&#039;&amp;quot; then&lt;br /&gt;
                        trim = true;&lt;br /&gt;
                    end&lt;br /&gt;
                elseif end_chr == &amp;quot;]&amp;quot; then&lt;br /&gt;
                    if str:sub(-3,-1) == duplicate_char .. &amp;quot;]]&amp;quot; then&lt;br /&gt;
                        trim = true;&lt;br /&gt;
                    elseif str:sub(-2,-1) == duplicate_char .. &amp;quot;]&amp;quot; then&lt;br /&gt;
                        trim = true;&lt;br /&gt;
                    end&lt;br /&gt;
                elseif end_chr == &amp;quot; &amp;quot; then&lt;br /&gt;
                    if str:sub(-2,-1) == duplicate_char .. &amp;quot; &amp;quot; then&lt;br /&gt;
                        str = str:sub(1,-3);&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                if trim then&lt;br /&gt;
                    if value ~= comp then &lt;br /&gt;
                        local dup2 = duplicate_char;&lt;br /&gt;
                        if dup2:match( &amp;quot;%A&amp;quot; ) then dup2 = &amp;quot;%&amp;quot; .. dup2; end&lt;br /&gt;
                        &lt;br /&gt;
                        value = value:gsub( &amp;quot;(%b&amp;lt;&amp;gt;)&amp;quot; .. dup2, &amp;quot;%1&amp;quot;, 1 )&lt;br /&gt;
                    else&lt;br /&gt;
                        value = value:sub( 2, -1 );&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            str = str .. value;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return str;&lt;br /&gt;
end  &lt;br /&gt;
&lt;br /&gt;
-- Attempts to convert names to initials.&lt;br /&gt;
function reducetoinitials(first)&lt;br /&gt;
    local initials = {}&lt;br /&gt;
    for word in string.gmatch(first, &amp;quot;%S+&amp;quot;) do&lt;br /&gt;
        table.insert(initials, string.sub(word,1,1)) -- Vancouver format does not include full stops.&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(initials) -- Vancouver format does not include spaces.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Formats a list of people (e.g. authors / editors) &lt;br /&gt;
function listpeople(control, people)&lt;br /&gt;
    local sep = control.sep;&lt;br /&gt;
    local namesep = control.namesep&lt;br /&gt;
    local format = control.format&lt;br /&gt;
    local maximum = control.maximum&lt;br /&gt;
    local lastauthoramp = control.lastauthoramp;&lt;br /&gt;
    local text = {}&lt;br /&gt;
    local etal = false;&lt;br /&gt;
    &lt;br /&gt;
    if sep:sub(-1,-1) ~= &amp;quot; &amp;quot; then sep = sep .. &amp;quot; &amp;quot; end&lt;br /&gt;
    if maximum ~= nil and maximum &amp;lt; 1 then return &amp;quot;&amp;quot;, 0; end&lt;br /&gt;
    &lt;br /&gt;
    for i,person in ipairs(people) do&lt;br /&gt;
        if is_set(person.last) then&lt;br /&gt;
            local mask = person.mask&lt;br /&gt;
            local one&lt;br /&gt;
            local sep_one = sep;&lt;br /&gt;
            if maximum ~= nil and i &amp;gt; maximum then&lt;br /&gt;
                etal = true;&lt;br /&gt;
                break;&lt;br /&gt;
            elseif (mask ~= nil) then&lt;br /&gt;
                local n = tonumber(mask)&lt;br /&gt;
                if (n ~= nil) then&lt;br /&gt;
                    one = string.rep(&amp;quot;&amp;amp;mdash;&amp;quot;,n)&lt;br /&gt;
                else&lt;br /&gt;
                    one = mask;&lt;br /&gt;
                    sep_one = &amp;quot; &amp;quot;;&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                one = person.last&lt;br /&gt;
                local first = person.first&lt;br /&gt;
                if is_set(first) then &lt;br /&gt;
                    if ( &amp;quot;vanc&amp;quot; == format ) then first = reducetoinitials(first) end&lt;br /&gt;
                    one = one .. namesep .. first &lt;br /&gt;
                end&lt;br /&gt;
                if is_set(person.link) then one = &amp;quot;[[&amp;quot; .. person.link .. &amp;quot;|&amp;quot; .. one .. &amp;quot;]]&amp;quot; end&lt;br /&gt;
                if is_set(person.link) and nil ~= person.link:find(&amp;quot;//&amp;quot;) then one = one .. &amp;quot; &amp;quot; .. seterror( &#039;bad_authorlink&#039; ) end	-- check for url in author link;&lt;br /&gt;
            end&lt;br /&gt;
            table.insert( text, one )&lt;br /&gt;
            table.insert( text, sep_one )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local count = #text / 2;&lt;br /&gt;
    if count &amp;gt; 0 then &lt;br /&gt;
        if count &amp;gt; 1 and is_set(lastauthoramp) and not etal then&lt;br /&gt;
            text[#text-2] = &amp;quot; &amp;amp; &amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        text[#text] = nil; &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local result = table.concat(text) -- construct list&lt;br /&gt;
    if etal then &lt;br /&gt;
        local etal_text = cfg.messages[&#039;et al&#039;];&lt;br /&gt;
        result = result .. &amp;quot; &amp;quot; .. etal_text;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- if necessary wrap result in &amp;lt;span&amp;gt; tag to format in Small Caps&lt;br /&gt;
    if ( &amp;quot;scap&amp;quot; == format ) then result = &lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;smallcaps&amp;quot; style=&amp;quot;font-variant:small-caps&amp;quot;&amp;gt;&#039; .. result .. &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    end &lt;br /&gt;
    return result, count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Generates a CITEREF anchor ID.&lt;br /&gt;
function anchorid( options )&lt;br /&gt;
    return &amp;quot;CITAREF&amp;quot; .. table.concat( options ); --return &amp;quot;CITEREF&amp;quot; .. table.concat( options );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets name list from the input arguments&lt;br /&gt;
function extractnames(args, list_name)&lt;br /&gt;
    local names = {};&lt;br /&gt;
    local i = 1;&lt;br /&gt;
    local last;&lt;br /&gt;
    &lt;br /&gt;
    while true do&lt;br /&gt;
        last = selectone( args, cfg.aliases[list_name .. &#039;-Last&#039;], &#039;redundant_parameters&#039;, i );&lt;br /&gt;
        if not is_set(last) then&lt;br /&gt;
            -- just in case someone passed in an empty parameter&lt;br /&gt;
            break;&lt;br /&gt;
        end&lt;br /&gt;
        names[i] = {&lt;br /&gt;
            last = last,&lt;br /&gt;
            first = selectone( args, cfg.aliases[list_name .. &#039;-First&#039;], &#039;redundant_parameters&#039;, i ),&lt;br /&gt;
            link = selectone( args, cfg.aliases[list_name .. &#039;-Link&#039;], &#039;redundant_parameters&#039;, i ),&lt;br /&gt;
            mask = selectone( args, cfg.aliases[list_name .. &#039;-Mask&#039;], &#039;redundant_parameters&#039;, i )&lt;br /&gt;
        };&lt;br /&gt;
        i = i + 1;&lt;br /&gt;
    end&lt;br /&gt;
    return names;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Populates ID table from arguments using configuration settings&lt;br /&gt;
function extractids( args )&lt;br /&gt;
    local id_list = {};&lt;br /&gt;
    for k, v in pairs( cfg.id_handlers ) do    &lt;br /&gt;
        v = selectone( args, v.parameters, &#039;redundant_parameters&#039; );&lt;br /&gt;
        if is_set(v) then id_list[k] = v; end&lt;br /&gt;
    end&lt;br /&gt;
    return id_list;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Takes a table of IDs and turns it into a table of formatted ID outputs.&lt;br /&gt;
function buildidlist( id_list, options )&lt;br /&gt;
    local new_list, handler = {};&lt;br /&gt;
    &lt;br /&gt;
    function fallback(k) return { __index = function(t,i) return cfg.id_handlers[k][i] end } end;&lt;br /&gt;
    &lt;br /&gt;
    for k, v in pairs( id_list ) do&lt;br /&gt;
        -- fallback to read-only cfg&lt;br /&gt;
        handler = setmetatable( { [&#039;id&#039;] = v }, fallback(k) );&lt;br /&gt;
        &lt;br /&gt;
        if handler.mode == &#039;external&#039; then&lt;br /&gt;
            table.insert( new_list, {handler.label, externallinkid( handler ) } );&lt;br /&gt;
        elseif handler.mode == &#039;internal&#039; then&lt;br /&gt;
            table.insert( new_list, {handler.label, internallinkid( handler ) } );&lt;br /&gt;
        elseif handler.mode ~= &#039;manual&#039; then&lt;br /&gt;
            error( cfg.messages[&#039;unknown_ID_mode&#039;] );&lt;br /&gt;
        elseif k == &#039;DOI&#039; then&lt;br /&gt;
            table.insert( new_list, {handler.label, doi( v, options.DoiBroken ) } );&lt;br /&gt;
        elseif k == &#039;LCCN&#039; then&lt;br /&gt;
            table.insert( new_list, {handler.label, lccn( v ) } );&lt;br /&gt;
        elseif k == &#039;OL&#039; then&lt;br /&gt;
            table.insert( new_list, {handler.label, openlibrary( v ) } );&lt;br /&gt;
        elseif k == &#039;PMC&#039; then&lt;br /&gt;
            table.insert( new_list, {handler.label, pmc( v, options.Embargo ) } );&lt;br /&gt;
        elseif k == &#039;PMID&#039; then&lt;br /&gt;
            table.insert( new_list, {handler.label, pmid( v ) } );&lt;br /&gt;
        elseif k == &#039;ISSN&#039; then&lt;br /&gt;
        	table.insert( new_list, {handler.label, issn( v:upper(), k ) } );&lt;br /&gt;
        elseif k == &#039;EISSN&#039; then&lt;br /&gt;
        	table.insert( new_list, {handler.label, issn( v:upper(), k ) } );&lt;br /&gt;
        elseif k == &#039;ISBN&#039; then&lt;br /&gt;
            --local ISBN = internallinkid( handler );&lt;br /&gt;
            --if not checkisbn( v ) and not is_set(options.IgnoreISBN) then&lt;br /&gt;
            --    ISBN = ISBN .. seterror( &#039;bad_isbn&#039;, {}, false, &amp;quot; &amp;quot;, &amp;quot;&amp;quot; );&lt;br /&gt;
            --end        	&lt;br /&gt;
        	local ISBN&lt;br /&gt;
        	if options.ISBNCorrecto or options.ISBNSugerido or is_set(options.IgnoreISBN) then&lt;br /&gt;
        		ISBN = internallinkid( handler );&lt;br /&gt;
        	else -- ISBN incorrecto.&lt;br /&gt;
      			ISBN = internallinkid( handler ) .. seterror( &#039;bad_isbn&#039;, {}, false, &amp;quot; &amp;quot;, &amp;quot;&amp;quot; );&lt;br /&gt;
        	end&lt;br /&gt;
            table.insert( new_list, {handler.label, ISBN } );&lt;br /&gt;
        else&lt;br /&gt;
            error( cfg.messages[&#039;unknown_manual_ID&#039;] );&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    function comp( a, b )	-- used in following table.sort()&lt;br /&gt;
        return a[1] &amp;lt; b[1];&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    table.sort( new_list, comp );&lt;br /&gt;
    for k, v in ipairs( new_list ) do&lt;br /&gt;
        new_list[k] = v[2];&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return new_list;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CorregirISBN(ISBNIncorrecto)&lt;br /&gt;
	local ModuloIdentificadores = require(&#039;Módulo:Identificadores&#039;)	&lt;br /&gt;
	local ISBNCorregido&lt;br /&gt;
	&lt;br /&gt;
--  Convertir mayúsculas	&lt;br /&gt;
	ISBNCorregido = ISBNIncorrecto:upper()&lt;br /&gt;
&lt;br /&gt;
--  Corregir guiones&lt;br /&gt;
	ISBNCorregido = ISBNCorregido:gsub(&amp;quot;%–&amp;quot;,&amp;quot;-&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
--  Eliminar ISBN del principio&lt;br /&gt;
    ISBNCorregido =ISBNCorregido:match(&amp;quot;ISBN (.*)&amp;quot;) or ISBNCorregido;&lt;br /&gt;
	&lt;br /&gt;
--  Eliminar separadores como &amp;quot;.&amp;quot; y &amp;quot;,&amp;quot; del final&lt;br /&gt;
	ISBNCorregido = ISBNCorregido:gsub(&amp;quot;[%.,]&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	if ModuloIdentificadores.esValidoISBN(ISBNCorregido) then &lt;br /&gt;
		return ISBNCorregido&lt;br /&gt;
	end	&lt;br /&gt;
&lt;br /&gt;
--  Ver si se trata de un ISBN de 13	&lt;br /&gt;
	local ISBNCorregidoSin978&lt;br /&gt;
	ISBNCorregidoSin978 = ISBNCorregido:match(&amp;quot;^978[%s-]*(.*)&amp;quot;)&lt;br /&gt;
	if ISBNCorregidoSin978 and ModuloIdentificadores.esValidoISBN(ISBNCorregidoSin978) then&lt;br /&gt;
--  	&amp;quot;978&amp;quot; + ISBN10&lt;br /&gt;
		return ISBNCorregidoSin978&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
--	ISBN de 13 al que se ha quitado 978	&lt;br /&gt;
	if ModuloIdentificadores.esValidoISBN(&#039;978&#039;..ISBNCorregido) then &lt;br /&gt;
		if ISBNCorregido:match(&#039;-&#039;) then &lt;br /&gt;
			return &#039;978-&#039; .. ISBNCorregido&lt;br /&gt;
		elseif ISBNCorregido:match(&#039; &#039;) then &lt;br /&gt;
			return &#039;978 &#039; .. ISBNCorregido&lt;br /&gt;
		else&lt;br /&gt;
			return &#039;978&#039; .. ISBNCorregido&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
--  13 ISBN o 13: ISBN&lt;br /&gt;
	local ISBNCorregidoSi13&lt;br /&gt;
	ISBNCorregidoSin13 = ISBNCorregido:match(&amp;quot;^13:?[%s]+(.*)&amp;quot;)&lt;br /&gt;
	if ISBNCorregidoSin13 and ModuloIdentificadores.esValidoISBN(ISBNCorregidoSin13) then &lt;br /&gt;
		return ISBNCorregidoSin13&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CorregirISBNs(ISBNIncorrecto1, ISBNIncorrecto2)&lt;br /&gt;
-- Tomar aquel de los dos ISBNs correctos si uno de ellos es un ISBN10 y el&lt;br /&gt;
-- otro el correspondiente ISBN13&lt;br /&gt;
&lt;br /&gt;
	local ISBN1Corregido = CorregirISBN(ISBNIncorrecto1)&lt;br /&gt;
	local ISBN2Corregido = CorregirISBN(ISBNIncorrecto2)&lt;br /&gt;
	&lt;br /&gt;
	if ISBN1Corregido and ISBN2Corregido then&lt;br /&gt;
--  	Ambos son correctos.&lt;br /&gt;
		if ISBN1Corregido == ISBN2Corregido then&lt;br /&gt;
--			Ambos son iguales (tras corregirse)&lt;br /&gt;
			return ISBN1Corregido&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
--		Ver si uno de ellos es un ISBN10 y el otro un ISBN13	&lt;br /&gt;
		local ISBNSinDigitoControl&lt;br /&gt;
		ISBNSinDigitoControl = ISBN1Corregido:match(&amp;quot;(.*).&amp;quot;)&lt;br /&gt;
		if ISBNSinDigitoControl and ISBN2Corregido:match(&amp;quot;978[%s-]*&amp;quot; .. ISBNSinDigitoControl) then&lt;br /&gt;
			return ISBN2Corregido&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ISBNSinDigitoControl = ISBN2Corregido:match(&amp;quot;(.*).&amp;quot;)&lt;br /&gt;
		if ISBNSinDigitoControl and ISBN1Corregido:match(&amp;quot;978[%s-]*&amp;quot; .. ISBNSinDigitoControl) then&lt;br /&gt;
			return ISBN1Corregido&lt;br /&gt;
		end		&lt;br /&gt;
		&lt;br /&gt;
	elseif ISBN1Corregido then&lt;br /&gt;
		return ISBN1Corregido&lt;br /&gt;
	elseif ISBN2Corregido then&lt;br /&gt;
		return ISBN1Corregido&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SugerirISBN(ISBNIncorrecto)&lt;br /&gt;
	local ISBNSugerido&lt;br /&gt;
&lt;br /&gt;
--  Ejemplos: &lt;br /&gt;
--      0 88254 165 x 					--&amp;gt; 0 88254 165 X&lt;br /&gt;
--      0-7153-5734-4.  				--&amp;gt; 0-7153-5734-4&lt;br /&gt;
--      0–313–31807–7 					--&amp;gt; 0-313-31807-7&lt;br /&gt;
--		ISBN(13): 9788495379092 &lt;br /&gt;
--  	978-0-7432-9302-0 y 0-7432-9302-0&lt;br /&gt;
--		9788430948949 8430948945 &lt;br /&gt;
--		8496702057 9788496702059&lt;br /&gt;
--		0198152213, 978019815221&lt;br /&gt;
--		13 978-0-511-41399-5 &lt;br /&gt;
--		13: 9788432238406&lt;br /&gt;
&lt;br /&gt;
--  ISBN con caracteres incorrectos.&lt;br /&gt;
	ISBNSugerido=CorregirISBN(ISBNIncorrecto)&lt;br /&gt;
	if ISBNSugerido then &lt;br /&gt;
		return ISBNSugerido&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
--  ISBN10, ISBN13 o ISBN13, ISBN10&lt;br /&gt;
	local ISBN1, ISBN2&lt;br /&gt;
	ISBN1, ISBN2 = ISBNIncorrecto:match(&amp;quot;(.*),%s*(.*)&amp;quot;)&lt;br /&gt;
	if is_set(ISBN1) and is_set(ISBN2) then&lt;br /&gt;
		ISBNSugerido = 	CorregirISBNs(ISBN1, ISBN2)&lt;br /&gt;
		&lt;br /&gt;
		if ISBNSugerido then&lt;br /&gt;
			return ISBNSugerido&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
--  ISBN10 y ISBN13 o ISBN13 y ISBN10&lt;br /&gt;
	ISBN1, ISBN2 = ISBNIncorrecto:match(&amp;quot;(.*)%s+y%s+(.*)&amp;quot;)&lt;br /&gt;
	if is_set(ISBN1) and is_set(ISBN2) then&lt;br /&gt;
		ISBNSugerido = 	CorregirISBNs(ISBN1, ISBN2)&lt;br /&gt;
		&lt;br /&gt;
		if ISBNSugerido then&lt;br /&gt;
			return ISBNSugerido&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
--  ISBN10 ISBN13 o ISBN13 ISBN10&lt;br /&gt;
	ISBN1, ISBN2 = ISBNIncorrecto:match(&amp;quot;(.*)%s+(.*)&amp;quot;)&lt;br /&gt;
	if is_set(ISBN1) and is_set(ISBN2) then&lt;br /&gt;
		ISBNSugerido = 	CorregirISBNs(ISBN1, ISBN2)&lt;br /&gt;
		&lt;br /&gt;
		if ISBNSugerido then&lt;br /&gt;
			return ISBNSugerido&lt;br /&gt;
		end &lt;br /&gt;
	end	&lt;br /&gt;
end&lt;br /&gt;
  &lt;br /&gt;
-- Chooses one matching parameter from a list of parameters to consider&lt;br /&gt;
-- Generates an error if more than one match is present.&lt;br /&gt;
function selectone( args, possible, error_condition, index )&lt;br /&gt;
    local value = nil;&lt;br /&gt;
    local selected = &#039;&#039;;&lt;br /&gt;
    local error_list = {};&lt;br /&gt;
    &lt;br /&gt;
    if index ~= nil then index = tostring(index); end&lt;br /&gt;
    &lt;br /&gt;
    -- Handle special case of &amp;quot;#&amp;quot; replaced by empty string&lt;br /&gt;
    if index == &#039;1&#039; then&lt;br /&gt;
        for _, v in ipairs( possible ) do&lt;br /&gt;
            v = v:gsub( &amp;quot;#&amp;quot;, &amp;quot;&amp;quot; );&lt;br /&gt;
            if is_set(args[v]) then&lt;br /&gt;
                if value ~= nil and selected ~= v then&lt;br /&gt;
                    table.insert( error_list, v );&lt;br /&gt;
                else&lt;br /&gt;
                    value = args[v];&lt;br /&gt;
                    selected = v;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end        &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for _, v in ipairs( possible ) do&lt;br /&gt;
        if index ~= nil then&lt;br /&gt;
            v = v:gsub( &amp;quot;#&amp;quot;, index );&lt;br /&gt;
        end&lt;br /&gt;
        if is_set(args[v]) then&lt;br /&gt;
            if value ~= nil and selected ~=  v then&lt;br /&gt;
                table.insert( error_list, v );&lt;br /&gt;
            else&lt;br /&gt;
                value = args[v];&lt;br /&gt;
                selected = v;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if #error_list &amp;gt; 0 then&lt;br /&gt;
        local error_str = &amp;quot;&amp;quot;;&lt;br /&gt;
        for _, k in ipairs( error_list ) do&lt;br /&gt;
            if error_str ~= &amp;quot;&amp;quot; then error_str = error_str .. cfg.messages[&#039;parameter-separator&#039;] end&lt;br /&gt;
            error_str = error_str .. wrap( &#039;parameter&#039;, k );&lt;br /&gt;
        end&lt;br /&gt;
        if #error_list &amp;gt; 1 then&lt;br /&gt;
            error_str = error_str .. cfg.messages[&#039;parameter-final-separator&#039;];&lt;br /&gt;
        else&lt;br /&gt;
            error_str = error_str .. cfg.messages[&#039;parameter-pair-separator&#039;];&lt;br /&gt;
        end&lt;br /&gt;
        error_str = error_str .. wrap( &#039;parameter&#039;, selected );&lt;br /&gt;
        table.insert( z.message_tail, { seterror( error_condition, {error_str}, true ) } );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return value, selected;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- COinS metadata (see &amp;lt;http://ocoins.info/&amp;gt;) allows automated tools to parse&lt;br /&gt;
-- the citation information.&lt;br /&gt;
function COinS(data)&lt;br /&gt;
    if &#039;table&#039; ~= type(data) or nil == next(data) then&lt;br /&gt;
        return &#039;&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local ctx_ver = &amp;quot;Z39.88-2004&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    -- treat table strictly as an array with only set values.&lt;br /&gt;
    local OCinSoutput = setmetatable( {}, {&lt;br /&gt;
        __newindex = function(self, key, value)&lt;br /&gt;
            if is_set(value) then&lt;br /&gt;
                rawset( self, #self+1, table.concat{ key, &#039;=&#039;, mw.uri.encode( removewikilink( value ) ) } );&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
    if is_set(data.Chapter) then&lt;br /&gt;
        OCinSoutput.rft_val_fmt = &amp;quot;info:ofi/fmt:kev:mtx:book&amp;quot;;&lt;br /&gt;
        OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;bookitem&amp;quot;;&lt;br /&gt;
        OCinSoutput[&amp;quot;rft.btitle&amp;quot;] = data.Chapter;&lt;br /&gt;
        OCinSoutput[&amp;quot;rft.atitle&amp;quot;] = data.Title;&lt;br /&gt;
    elseif is_set(data.Periodical) then&lt;br /&gt;
        OCinSoutput.rft_val_fmt = &amp;quot;info:ofi/fmt:kev:mtx:journal&amp;quot;;&lt;br /&gt;
        OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;article&amp;quot;;&lt;br /&gt;
        OCinSoutput[&amp;quot;rft.jtitle&amp;quot;] = data.Periodical;&lt;br /&gt;
        OCinSoutput[&amp;quot;rft.atitle&amp;quot;] = data.Title;&lt;br /&gt;
    else&lt;br /&gt;
        OCinSoutput.rft_val_fmt = &amp;quot;info:ofi/fmt:kev:mtx:book&amp;quot;;&lt;br /&gt;
        OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;book&amp;quot;&lt;br /&gt;
        OCinSoutput[&amp;quot;rft.btitle&amp;quot;] = data.Title;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    OCinSoutput[&amp;quot;rft.place&amp;quot;] = data.PublicationPlace;&lt;br /&gt;
    OCinSoutput[&amp;quot;rft.date&amp;quot;] = data.Date;&lt;br /&gt;
    OCinSoutput[&amp;quot;rft.series&amp;quot;] = data.Series;&lt;br /&gt;
    OCinSoutput[&amp;quot;rft.volume&amp;quot;] = data.Volume;&lt;br /&gt;
    OCinSoutput[&amp;quot;rft.issue&amp;quot;] = data.Issue;&lt;br /&gt;
    OCinSoutput[&amp;quot;rft.pages&amp;quot;] = data.Pages;&lt;br /&gt;
    OCinSoutput[&amp;quot;rft.edition&amp;quot;] = data.Edition;&lt;br /&gt;
    OCinSoutput[&amp;quot;rft.pub&amp;quot;] = data.PublisherName;&lt;br /&gt;
    &lt;br /&gt;
    for k, v in pairs( data.ID_list ) do&lt;br /&gt;
        local id, value = cfg.id_handlers[k].COinS;&lt;br /&gt;
        if k == &#039;ISBN&#039; then value = cleanisbn( v ); else value = v; end&lt;br /&gt;
        if string.sub( id or &amp;quot;&amp;quot;, 1, 4 ) == &#039;info&#039; then&lt;br /&gt;
            OCinSoutput[&amp;quot;rft_id&amp;quot;] = table.concat{ id, &amp;quot;/&amp;quot;, v };&lt;br /&gt;
        else&lt;br /&gt;
            OCinSoutput[ id ] = value;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local last, first;&lt;br /&gt;
    for k, v in ipairs( data.Authors ) do&lt;br /&gt;
        last, first = v.last, v.first;&lt;br /&gt;
        if k == 1 then&lt;br /&gt;
            if is_set(last) then&lt;br /&gt;
                OCinSoutput[&amp;quot;rft.aulast&amp;quot;] = last;&lt;br /&gt;
            end&lt;br /&gt;
            if is_set(first) then &lt;br /&gt;
                OCinSoutput[&amp;quot;rft.aufirst&amp;quot;] = first;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if is_set(last) and is_set(first) then&lt;br /&gt;
            OCinSoutput[&amp;quot;rft.au&amp;quot;] = table.concat{ last, &amp;quot;, &amp;quot;, first };&lt;br /&gt;
        elseif is_set(last) then&lt;br /&gt;
            OCinSoutput[&amp;quot;rft.au&amp;quot;] = last;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    OCinSoutput.rft_id = data.URL;&lt;br /&gt;
    OCinSoutput.rfr_id = table.concat{ &amp;quot;info:sid/&amp;quot;, mw.site.server:match( &amp;quot;[^/]*$&amp;quot; ), &amp;quot;:&amp;quot;, data.RawPage };&lt;br /&gt;
    OCinSoutput = setmetatable( OCinSoutput, nil );&lt;br /&gt;
    &lt;br /&gt;
    -- sort with version string always first, and combine.&lt;br /&gt;
    table.sort( OCinSoutput );&lt;br /&gt;
    table.insert( OCinSoutput, 1, &amp;quot;ctx_ver=&amp;quot; .. ctx_ver );  -- such as &amp;quot;Z39.88-2004&amp;quot;&lt;br /&gt;
    return table.concat(OCinSoutput, &amp;quot;&amp;amp;&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
This is the main function doing the majority of the citation&lt;br /&gt;
formatting.&lt;br /&gt;
]]&lt;br /&gt;
function citation0( config, args)&lt;br /&gt;
	local ModuloIdentificadores = require(&#039;Módulo:Identificadores&#039;)	&lt;br /&gt;
    --[[ &lt;br /&gt;
    Load Input Parameters&lt;br /&gt;
    The argment_wrapper facillitates the mapping of multiple&lt;br /&gt;
    aliases to single internal variable.&lt;br /&gt;
    ]]&lt;br /&gt;
    local A = argument_wrapper( args );&lt;br /&gt;
&lt;br /&gt;
    local i &lt;br /&gt;
    local PPrefix = A[&#039;PPrefix&#039;]&lt;br /&gt;
    local PPPrefix = A[&#039;PPPrefix&#039;]&lt;br /&gt;
    if is_set( A[&#039;NoPP&#039;] ) then PPPrefix = &amp;quot;&amp;quot; PPrefix = &amp;quot;&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    -- Pick out the relevant fields from the arguments.  Different citation templates&lt;br /&gt;
    -- define different field names for the same underlying things.    &lt;br /&gt;
    local Authors = A[&#039;Authors&#039;];&lt;br /&gt;
    local a = extractnames( args, &#039;AuthorList&#039; );&lt;br /&gt;
&lt;br /&gt;
    local Coauthors = A[&#039;Coauthors&#039;];&lt;br /&gt;
    &lt;br /&gt;
    local Editors = A[&#039;Editors&#039;];&lt;br /&gt;
    local e = extractnames( args, &#039;EditorList&#039; );&lt;br /&gt;
&lt;br /&gt;
    local Year = A[&#039;Year&#039;];&lt;br /&gt;
    local wYear=Year;&lt;br /&gt;
    local PublicationDate = A[&#039;PublicationDate&#039;];&lt;br /&gt;
    local OrigYear = A[&#039;OrigYear&#039;];&lt;br /&gt;
    local Date = A[&#039;Date&#039;];&lt;br /&gt;
    local wfecha = Date;&lt;br /&gt;
    local LayDate = A[&#039;LayDate&#039;];&lt;br /&gt;
    ------------------------------------------------- Get title data&lt;br /&gt;
    local Title = A[&#039;Title&#039;];&lt;br /&gt;
    local BookTitle = A[&#039;BookTitle&#039;];&lt;br /&gt;
    local Conference = A[&#039;Conference&#039;];&lt;br /&gt;
    local TransTitle = A[&#039;TransTitle&#039;];&lt;br /&gt;
    local TitleNote = A[&#039;TitleNote&#039;];&lt;br /&gt;
    local TitleLink = A[&#039;TitleLink&#039;];&lt;br /&gt;
    local Chapter = A[&#039;Chapter&#039;];&lt;br /&gt;
    local ChapterLink = A[&#039;ChapterLink&#039;];&lt;br /&gt;
    local TransChapter = A[&#039;TransChapter&#039;];&lt;br /&gt;
    local TitleType = A[&#039;TitleType&#039;];&lt;br /&gt;
    local Degree = A[&#039;Degree&#039;];&lt;br /&gt;
    local Docket = A[&#039;Docket&#039;];&lt;br /&gt;
    local ArchiveURL = A[&#039;ArchiveURL&#039;];&lt;br /&gt;
    local URL = A[&#039;URL&#039;]&lt;br /&gt;
    local URLorigin = A:ORIGIN(&#039;URL&#039;);&lt;br /&gt;
    local ChapterURL = A[&#039;ChapterURL&#039;];&lt;br /&gt;
    local ChapterURLorigin = A:ORIGIN(&#039;ChapterURL&#039;);&lt;br /&gt;
    local ConferenceURL = A[&#039;ConferenceURL&#039;];&lt;br /&gt;
    local ConferenceURLorigin = A:ORIGIN(&#039;ConferenceURL&#039;);&lt;br /&gt;
    local SinURL     = false;&lt;br /&gt;
    local Periodical = A[&#039;Periodical&#039;];&lt;br /&gt;
&lt;br /&gt;
	local Series = A[&#039;Series&#039;];&lt;br /&gt;
    local Volume = A[&#039;Volume&#039;];&lt;br /&gt;
    local Issue = A[&#039;Issue&#039;];&lt;br /&gt;
    local Position = &#039;&#039;;&lt;br /&gt;
    local Page = A[&#039;Page&#039;];&lt;br /&gt;
    local Pages = dashtohyphen( A[&#039;Pages&#039;] );	&lt;br /&gt;
    local At = A[&#039;At&#039;];&lt;br /&gt;
    local Others = A[&#039;Others&#039;];&lt;br /&gt;
    local Edition = A[&#039;Edition&#039;];&lt;br /&gt;
    local PublicationPlace = A[&#039;PublicationPlace&#039;]&lt;br /&gt;
    local Place = A[&#039;Place&#039;];&lt;br /&gt;
    local Passage = A[&#039;Passage&#039;];&lt;br /&gt;
    local PassageURL = A[&#039;PassageURL&#039;];&lt;br /&gt;
    &lt;br /&gt;
    local PublisherName = A[&#039;PublisherName&#039;];&lt;br /&gt;
    local UrlAccess = A[&#039;UrlAccess&#039;];&lt;br /&gt;
    local RegistrationRequired = A[&#039;RegistrationRequired&#039;];&lt;br /&gt;
    local SubscriptionRequired = A[&#039;SubscriptionRequired&#039;];&lt;br /&gt;
    local Via = A[&#039;Via&#039;];&lt;br /&gt;
    local AccessDate = A[&#039;AccessDate&#039;];&lt;br /&gt;
    local MesAcceso  = A[&#039;MesAcceso&#039;]; -- Inexistente en la plantilla original&lt;br /&gt;
    local AnyoAcceso  = A[&#039;AñoAcceso&#039;]; -- Inexistente en la plantilla original&lt;br /&gt;
    local ArchiveDate = A[&#039;ArchiveDate&#039;];&lt;br /&gt;
    local Agency = A[&#039;Agency&#039;];&lt;br /&gt;
    local DeadURL = A[&#039;DeadURL&#039;]&lt;br /&gt;
    local Language = A[&#039;Language&#039;];&lt;br /&gt;
    local Format = A[&#039;Format&#039;];&lt;br /&gt;
    local Ref = A[&#039;Ref&#039;];&lt;br /&gt;
	local DoiBroken = A[&#039;DoiBroken&#039;];&lt;br /&gt;
	local ID = A[&#039;ID&#039;];&lt;br /&gt;
    local IgnoreISBN = A[&#039;IgnoreISBN&#039;];&lt;br /&gt;
    local Embargo = A[&#039;Embargo&#039;];&lt;br /&gt;
    local Texto1  = A[&#039;Texto1&#039;]&lt;br /&gt;
    local ID_list = extractids( args );&lt;br /&gt;
    local ISBNCorrecto = false;&lt;br /&gt;
    local ISBNSugerido;&lt;br /&gt;
&lt;br /&gt;
    if is_set (ID_list[&#039;ISBN&#039;]) and not is_set (IgnoreISBN)  then&lt;br /&gt;
    	if ModuloIdentificadores.esValidoISBN(ID_list[&#039;ISBN&#039;]) then &lt;br /&gt;
    		ISBNCorrecto= true&lt;br /&gt;
    	else&lt;br /&gt;
    		ISBNSugerido = SugerirISBN(ID_list[&#039;ISBN&#039;])&lt;br /&gt;
    		if ISBNSugerido then&lt;br /&gt;
    			ID_list[&#039;ISBN&#039;] = ISBNSugerido&lt;br /&gt;
    		end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    local Lista_Identificadores_Formateados={} -- Lista de identificadores con enlaces y en su caso con  los errores&lt;br /&gt;
    &lt;br /&gt;
    local Quote = A[&#039;Quote&#039;];&lt;br /&gt;
    local TransQuote = A[&#039;TransQuote&#039;];&lt;br /&gt;
	local PostScript = A[&#039;PostScript&#039;];&lt;br /&gt;
&lt;br /&gt;
    local LayURL = A[&#039;LayURL&#039;];&lt;br /&gt;
    local LaySource = A[&#039;LaySource&#039;];&lt;br /&gt;
    local Transcript = A[&#039;Transcript&#039;];&lt;br /&gt;
    local TranscriptURL = A[&#039;TranscriptURL&#039;] &lt;br /&gt;
    local TranscriptURLorigin = A:ORIGIN(&#039;TranscriptURL&#039;);&lt;br /&gt;
    local sepc = A[&#039;Separator&#039;];&lt;br /&gt;
&lt;br /&gt;
    local LastAuthorAmp = A[&#039;LastAuthorAmp&#039;];&lt;br /&gt;
    local no_tracking_cats = A[&#039;NoTracking&#039;];&lt;br /&gt;
&lt;br /&gt;
--these are used by cite interview&lt;br /&gt;
	local Callsign = A[&#039;Callsign&#039;];&lt;br /&gt;
	local City = A[&#039;City&#039;];&lt;br /&gt;
	local Cointerviewers = A[&#039;Cointerviewers&#039;];			-- deprecated&lt;br /&gt;
	local Interviewer = A[&#039;Interviewer&#039;];				-- deprecated&lt;br /&gt;
	local Program = A[&#039;Program&#039;];&lt;br /&gt;
&lt;br /&gt;
--Parámetros que no se utilizan en la plantilla inglesa&lt;br /&gt;
	local SinEd = A[&#039;SinEd&#039;]&lt;br /&gt;
	local Extra = A[&#039;Extra&#039;]&lt;br /&gt;
	local Traductor   = A[&#039;Traductor&#039;]&lt;br /&gt;
	local Traductores = A[&#039;Traductores&#039;]&lt;br /&gt;
&lt;br /&gt;
--local variables that are not cs1 parameters&lt;br /&gt;
    local page_type;									-- is this needed?  Doesn&#039;t appear to be used anywhere;&lt;br /&gt;
    local use_lowercase&lt;br /&gt;
    local this_page = mw.title.getCurrentTitle();		--Also used for COinS and for language&lt;br /&gt;
--	local anchor_year;									-- used in the CITEREF identifier&lt;br /&gt;
	local COinS_date;									-- used in the COinS metadata&lt;br /&gt;
&lt;br /&gt;
--check this page to see if it is in one of the namespaces that cs1 is not supposed to add to the error categories.&lt;br /&gt;
	if not is_set(no_tracking_cats) then				-- ignore if we are already not going to categorize this page&lt;br /&gt;
		for k, v in pairs( cfg.uncategorized_namespaces ) do	-- otherwise, spin through the list of namespaces we don&#039;t include in error categories&lt;br /&gt;
			if this_page.nsText == v then				-- if we find one&lt;br /&gt;
				no_tracking_cats = &amp;quot;true&amp;quot;;				-- set no_trackin_cats&lt;br /&gt;
				break;									-- and we&#039;re done&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
-- check for extra |page=, |pages= or |at= parameters. &lt;br /&gt;
    if is_set(Page) then&lt;br /&gt;
--      La categoría de la plantilla inglesa es intraducible. Utilizo otro error similar.&lt;br /&gt;
&lt;br /&gt;
        --if is_set(Pages) or is_set(At) then&lt;br /&gt;
        --    Page = Page .. &amp;quot; &amp;quot; .. seterror(&#039;extra_pages&#039;);	-- add error message&lt;br /&gt;
        --    Pages = &#039;&#039;;										-- unset the others&lt;br /&gt;
        --    At = &#039;&#039;;&lt;br /&gt;
        --end&lt;br /&gt;
        if is_set(Pages) then&lt;br /&gt;
            Page = Page .. &amp;quot; &amp;quot; .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;página=&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;&amp;amp;#124;páginas=&amp;lt;/code&amp;gt;&#039;);&lt;br /&gt;
            Pages = &#039;&#039;;										-- unset the others&lt;br /&gt;
            At = &#039;&#039;;&lt;br /&gt;
        	Passage = &#039;&#039;;&lt;br /&gt;
        elseif is_set(At) then&lt;br /&gt;
            Page = Page .. &amp;quot; &amp;quot; .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;página=&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;&amp;amp;#124;en=&amp;lt;/code&amp;gt;&#039;);&lt;br /&gt;
            Pages = &#039;&#039;;										-- unset the others&lt;br /&gt;
            At = &#039;&#039;;&lt;br /&gt;
        	Passage = &#039;&#039;;&lt;br /&gt;
        elseif is_set(Passage) then&lt;br /&gt;
            Page = Page .. &amp;quot; &amp;quot; .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;página=&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;&amp;amp;#124;pasaje=&amp;lt;/code&amp;gt;&#039;);&lt;br /&gt;
            Pages = &#039;&#039;;										-- unset the others&lt;br /&gt;
            At = &#039;&#039;;&lt;br /&gt;
        	Passage = &#039;&#039;;&lt;br /&gt;
        end&lt;br /&gt;
    elseif is_set(Pages) then&lt;br /&gt;
        if is_set(At) then&lt;br /&gt;
            -- Pages = Pages .. &amp;quot; &amp;quot; .. seterror(&#039;extra_pages&#039;);	-- add error messages&lt;br /&gt;
            Pages = Pages .. &amp;quot; &amp;quot; .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;páginas=&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;&amp;amp;#124;en=&amp;lt;/code&amp;gt;&#039;);&lt;br /&gt;
            At = &#039;&#039;;&lt;br /&gt;
        	Passage = &#039;&#039;;&lt;br /&gt;
        elseif is_set(Passage) then&lt;br /&gt;
            Pages = Pages .. &amp;quot; &amp;quot; .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;páginas=&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;&amp;amp;#124;pasaje=&amp;lt;/code&amp;gt;&#039;);&lt;br /&gt;
            At = &#039;&#039;;&lt;br /&gt;
        	Passage = &#039;&#039;;&lt;br /&gt;
        end&lt;br /&gt;
    elseif is_set(At) then&lt;br /&gt;
    	if is_set(Passage) then&lt;br /&gt;
            At = At .. &amp;quot; &amp;quot; .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;en=&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;&amp;amp;#124;pasaje=&amp;lt;/code&amp;gt;&#039;);&lt;br /&gt;
        	Passage = &#039;&#039;;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
-- both |publication-place= and |place= (|location=) allowed if different&lt;br /&gt;
    if not is_set(PublicationPlace) and is_set(Place) then&lt;br /&gt;
        PublicationPlace = Place;							-- promote |place= (|location=) to |publication-place&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if PublicationPlace == Place then Place = &#039;&#039;; end		-- don&#039;t need both if they are the same&lt;br /&gt;
    &lt;br /&gt;
--[[&lt;br /&gt;
Parameter remapping for cite encyclopedia:&lt;br /&gt;
When the citation has these parameters:&lt;br /&gt;
	|encyclopedia and |title then map |title to |article and |encyclopedia to |title&lt;br /&gt;
	|encyclopedia and |article then map |encyclopedia to |title&lt;br /&gt;
	|encyclopedia then map |encyclopedia to |title&lt;br /&gt;
&lt;br /&gt;
	|trans_title maps to |trans_chapter when |title is re-mapped&lt;br /&gt;
&lt;br /&gt;
All other combinations of |encyclopedia, |title, and |article are not modified&lt;br /&gt;
]]&lt;br /&gt;
--	if ( config.ClaseCita == &amp;quot;encyclopaedia&amp;quot; ) then&lt;br /&gt;
	if ( config.ClaseCita == &amp;quot;enciclopedia&amp;quot; ) then		&lt;br /&gt;
		if is_set(Periodical) then					-- Periodical is set when |encyclopedia is set&lt;br /&gt;
			if is_set(Title) then&lt;br /&gt;
				if not is_set(Chapter) then&lt;br /&gt;
					Chapter = Title;				-- |encyclopedia and |title are set so map |title to |article and |encyclopedia to |title&lt;br /&gt;
					TransChapter = TransTitle;&lt;br /&gt;
					Title = Periodical;&lt;br /&gt;
					Periodical = &#039;&#039;;				-- redundant so unset&lt;br /&gt;
					TransTitle = &#039;&#039;;				-- redundant so unset&lt;br /&gt;
				end&lt;br /&gt;
			else									-- |title not set&lt;br /&gt;
				Title = Periodical;					-- |encyclopedia set and |article set or not set so map |encyclopedia to |title&lt;br /&gt;
				Periodical = &#039;&#039;;					-- redundant so unset&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
--special cases for classic book&lt;br /&gt;
	if config.ClaseCita == &#039;libro&#039; and is_set(Passage) then&lt;br /&gt;
		if is_set(PassageURL) then&lt;br /&gt;
			Passage = externallink( PassageURL, Passage )&lt;br /&gt;
		end&lt;br /&gt;
		if not is_set (sepc) then&lt;br /&gt;
			sepc = &#039; &#039;;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		Passage = &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
--special cases for citation.&lt;br /&gt;
	if (config.ClaseCita == &amp;quot;citation&amp;quot;) then		-- for citation templates&lt;br /&gt;
		if not is_set (sepc) then						-- if |separator= is not set&lt;br /&gt;
			sepc = &#039;,&#039;;									-- set citation separator to its default (comma)&lt;br /&gt;
		end&lt;br /&gt;
	else												-- not a citation template&lt;br /&gt;
		if not is_set (sepc) then						-- if |separator= has not been set&lt;br /&gt;
			sepc = &#039;.&#039;;									-- set cite xxx separator to its default (period)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not is_set (Ref) then						-- if |ref= is not set&lt;br /&gt;
		-- if inArray(config.ClaseCita, {&amp;quot;citation&amp;quot;, &amp;quot;libro&amp;quot;, &amp;quot;publicación&amp;quot;, &amp;quot;web&amp;quot;}) then		-- for citation templates&lt;br /&gt;
-- En la Wikipedia inglesa solo se usan citas Harvard para la clase citation	&lt;br /&gt;
-- Quedan habilitadas las citas Harvard para cualquier clase que contenga algún autor o editor&lt;br /&gt;
		if  #a &amp;gt; 0 or #e &amp;gt; 0 then&lt;br /&gt;
			Ref = &amp;quot;harv&amp;quot;;								-- set default |ref=harv&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
&lt;br /&gt;
-- check for specital case where |separator=none&lt;br /&gt;
	if &#039;none&#039; == sepc:lower() then						-- if |separator=none&lt;br /&gt;
		sepc = &#039;&#039;;										-- then set it to a empty string&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	use_lowercase = ( sepc ~= &#039;.&#039; );&lt;br /&gt;
	&lt;br /&gt;
    Others = is_set(Others) and (sepc .. &amp;quot; &amp;quot; .. Others) or &amp;quot;&amp;quot;;	&lt;br /&gt;
&lt;br /&gt;
-- Special case for cite techreport.&lt;br /&gt;
	if (config.ClaseCita == &amp;quot;techreport&amp;quot;) then	-- special case for cite techreport&lt;br /&gt;
		if is_set(Issue) then						-- cite techreport uses &#039;number&#039;, which other citations aliase to &#039;issue&#039;&lt;br /&gt;
			if not is_set(ID) then					-- can we use ID for the &amp;quot;number&amp;quot;?&lt;br /&gt;
				ID = Issue;							-- yes, use it&lt;br /&gt;
				Issue = &amp;quot;&amp;quot;;							-- unset Issue so that &amp;quot;number&amp;quot; isn&#039;t duplicated in the rendered citation or COinS metadata&lt;br /&gt;
			else									-- can&#039;t use ID so emit error message&lt;br /&gt;
				ID = ID .. &amp;quot; &amp;quot; .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;id=&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;#124;number=&amp;lt;/code&amp;gt;&#039;);&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
-- special case for cite interview&lt;br /&gt;
	elseif (config.ClaseCita == &amp;quot;entrevista&amp;quot;) then&lt;br /&gt;
		if is_set(Program) then&lt;br /&gt;
			ID = &#039; &#039; .. Program;&lt;br /&gt;
		end&lt;br /&gt;
		if is_set(Callsign) then&lt;br /&gt;
			if is_set(ID) then&lt;br /&gt;
				ID = ID .. sepc .. &#039; &#039; .. Callsign;&lt;br /&gt;
			else&lt;br /&gt;
				ID = &#039; &#039; .. Callsign;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if is_set(City) then&lt;br /&gt;
			if is_set(ID) then&lt;br /&gt;
				ID = ID .. sepc .. &#039; &#039; .. City;&lt;br /&gt;
			else&lt;br /&gt;
				ID = &#039; &#039; .. City;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if is_set(Interviewer) then&lt;br /&gt;
			if is_set(TitleType) then&lt;br /&gt;
				Others = sepc .. &#039; &#039; .. TitleType .. &#039; con &#039; .. Interviewer  -- &#039; &#039; .. TitleType .. &#039; con &#039; .. Interviewer;&lt;br /&gt;
				TitleType = &#039;&#039;;&lt;br /&gt;
			else&lt;br /&gt;
				Others = sepc .. &#039; &#039; .. wrap(&#039;interview&#039;, Interviewer, use_lowercase) .. Others  -- &#039; &#039; .. &#039;Entrevista con &#039; .. Interviewer;&lt;br /&gt;
			end&lt;br /&gt;
			if is_set(Cointerviewers) then&lt;br /&gt;
				Others = Others .. sepc .. &#039; &#039; .. Cointerviewers;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			Others = Others .. sepc .. &#039; (Entrevista)&#039; --&#039;(Interview)&#039;;&lt;br /&gt;
		end&lt;br /&gt;
	elseif is_set(ID) then&lt;br /&gt;
	   ID = wrap( &#039;id&#039;, ID)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
--Account for the oddity that is {{cite journal}} with |pmc= set and |url= not set&lt;br /&gt;
--	if config.ClaseCita == &amp;quot;journal&amp;quot; and not is_set(URL) and is_set(ID_list[&#039;PMC&#039;]) then&lt;br /&gt;
	if config.ClaseCita == &amp;quot;publicación&amp;quot; and not is_set(URL) and is_set(ID_list[&#039;PMC&#039;]) then&lt;br /&gt;
		if not is_embargoed(Embargo) then&lt;br /&gt;
			URL=cfg.id_handlers[&#039;PMC&#039;].prefix .. ID_list[&#039;PMC&#039;];	-- set url to be the same as the PMC external link if not embargoed&lt;br /&gt;
			URLorigin = cfg.id_handlers[&#039;PMC&#039;].parameters[1];		-- set URLorigin to parameter name for use in error message if citation is missing a |title=&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if is_set(Texto1) and Texto1:match(&amp;quot;%S+&amp;quot;) then&lt;br /&gt;
        -- Informar la URL con el valor del campo 1 en su caso    	&lt;br /&gt;
    	if config.ClaseCita == &amp;quot;web&amp;quot; and not is_set(URL) and checkurl(Texto1) then&lt;br /&gt;
       	    table.insert( z.message_tail, { seterror( &#039;url_sugerida&#039;, {Texto1, &#039;url&#039;}, true ) } )&lt;br /&gt;
    	    --URL    = Texto1   Utilizar URL como texto.&lt;br /&gt;
    	else&lt;br /&gt;
    		table.insert( z.message_tail, { seterror( &#039;text_ignored&#039;, {Texto1}, true ) } )&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
	&lt;br /&gt;
-- Account for the oddity that is {{cite conference}}, before generation of COinS data.&lt;br /&gt;
--TODO: if this is only for {{cite conference}}, shouldn&#039;t we be checking? (if config.ClaseCita==&#039;conference&#039; then ...)&lt;br /&gt;
    &lt;br /&gt;
	if &#039;conferencia&#039; == config.ClaseCita then&lt;br /&gt;
		if is_set(BookTitle) then&lt;br /&gt;
			Chapter = Title;&lt;br /&gt;
--			ChapterLink = TitleLink;											-- |chapterlink= is deprecated&lt;br /&gt;
			ChapterURL = URL;&lt;br /&gt;
			ChapterUrlAccess = UrlAccess;&lt;br /&gt;
			ChapterURLorigin = URLorigin;&lt;br /&gt;
			URLorigin = &#039;&#039;;&lt;br /&gt;
			ChapterFormat = Format;&lt;br /&gt;
			TransChapter = TransTitle;&lt;br /&gt;
			Title = BookTitle;&lt;br /&gt;
			Format = &#039;&#039;;&lt;br /&gt;
--			TitleLink = &#039;&#039;;&lt;br /&gt;
			TransTitle = &#039;&#039;;&lt;br /&gt;
			URL = &#039;&#039;;&lt;br /&gt;
		end&lt;br /&gt;
	elseif &#039;speech&#039; ~= config.ClaseCita then&lt;br /&gt;
		Conference = &#039;&#039;;														-- not cite conference or cite speech so make sure this is empty string&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
-- Account for the oddity that is {{cite episode}}, before generation of COinS data.&lt;br /&gt;
--[[	-- {{cite episode}} is not currently supported by this module&lt;br /&gt;
	if config.ClaseCita == &amp;quot;episode&amp;quot; then&lt;br /&gt;
		local AirDate = A[&#039;AirDate&#039;];&lt;br /&gt;
		local SeriesLink = A[&#039;SeriesLink&#039;];&lt;br /&gt;
		local Season = A[&#039;Season&#039;];&lt;br /&gt;
		local SeriesNumber = A[&#039;SeriesNumber&#039;];&lt;br /&gt;
		local Network = A[&#039;Network&#039;];&lt;br /&gt;
		local Station = A[&#039;Station&#039;];&lt;br /&gt;
		local s, n = {}, {};&lt;br /&gt;
		local Sep = (first_set(A[&amp;quot;SeriesSeparator&amp;quot;], A[&amp;quot;Separator&amp;quot;]) or &amp;quot;&amp;quot;) .. &amp;quot; &amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		if is_set(Issue) then table.insert(s, cfg.messages[&amp;quot;episode&amp;quot;] .. &amp;quot; &amp;quot; .. Issue); Issue = &#039;&#039;; end&lt;br /&gt;
		if is_set(Season) then table.insert(s, cfg.messages[&amp;quot;season&amp;quot;] .. &amp;quot; &amp;quot; .. Season); end&lt;br /&gt;
		if is_set(SeriesNumber) then table.insert(s, cfg.messages[&amp;quot;series&amp;quot;] .. &amp;quot; &amp;quot; .. SeriesNumber); end&lt;br /&gt;
		if is_set(Network) then table.insert(n, Network); end&lt;br /&gt;
		if is_set(Station) then table.insert(n, Station); end&lt;br /&gt;
		&lt;br /&gt;
		Date = Date or AirDate;&lt;br /&gt;
		Chapter = Title;&lt;br /&gt;
		ChapterLink = TitleLink;&lt;br /&gt;
		TransChapter = TransTitle;&lt;br /&gt;
		Title = Series;&lt;br /&gt;
		TitleLink = SeriesLink;&lt;br /&gt;
		TransTitle = &#039;&#039;;&lt;br /&gt;
		&lt;br /&gt;
		Series = table.concat(s, Sep);&lt;br /&gt;
		ID = table.concat(n, Sep);&lt;br /&gt;
	end&lt;br /&gt;
-- end of {{cite episode}} stuff]]&lt;br /&gt;
&lt;br /&gt;
-- legacy: promote concatenation of |day=, |month=, and |year= to Date if Date not set; or, promote PublicationDate to Date if neither Date nor Year are set.&lt;br /&gt;
	if not is_set(Date) then&lt;br /&gt;
		Date = Year;						-- promote Year to Date&lt;br /&gt;
		Year = nil;							-- make nil so Year as empty string isn&#039;t used for CITEREF&lt;br /&gt;
		if is_set(Date) then&lt;br /&gt;
			local Month = A[&#039;Month&#039;];&lt;br /&gt;
			if is_set(Month) then&lt;br /&gt;
				Date = Month .. &amp;quot; de &amp;quot; .. Date; --Month .. &amp;quot; &amp;quot; .. Date;&lt;br /&gt;
				local Day = A[&#039;Day&#039;]&lt;br /&gt;
				if is_set(Day) then Date = Day .. &amp;quot; de &amp;quot; .. Date end --if is_set(Day) then Date = Day .. &amp;quot; &amp;quot; .. Date end&lt;br /&gt;
			end&lt;br /&gt;
		elseif is_set(PublicationDate) then	-- use PublicationDate when |date= and |year= are not set&lt;br /&gt;
			Date = PublicationDate;			-- promonte PublicationDate to Date&lt;br /&gt;
			PublicationDate = &#039;&#039;;			-- unset, no longer needed&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if PublicationDate == Date then PublicationDate = &#039;&#039;; end	-- if PublicationDate is same as Date, don&#039;t display in rendered citation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Go test all of the date-holding parameters for valid MOS:DATE format and make sure that dates are real dates. This must be done before we do COinS because here is where&lt;br /&gt;
we get the date used in the metadata.&lt;br /&gt;
&lt;br /&gt;
Date validation supporting code is in Módulo:Citas/ValidaciónFechas&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	anchor_year, COinS_date, error_message = dates({[&#039;accessdate&#039;]=AccessDate, [&#039;airdate&#039;]=AirDate, [&#039;archivedate&#039;]=ArchiveDate, [&#039;date&#039;]=Date, [&#039;doi_brokendate&#039;]=DoiBroken,&lt;br /&gt;
		[&#039;embargo&#039;]=Embargo, [&#039;laydate&#039;]=LayDate, [&#039;publicationdate&#039;]=PublicationDate, [&#039;year&#039;]=Year});&lt;br /&gt;
	if is_set(error_message) then&lt;br /&gt;
		table.insert( z.message_tail, { seterror( &#039;bad_date&#039;, {error_message}, true ) } );	-- add this error message&lt;br /&gt;
	end&lt;br /&gt;
]]&lt;br /&gt;
-- At this point fields may be nil if they weren&#039;t specified in the template use.  We can use that fact.&lt;br /&gt;
&lt;br /&gt;
    -- COinS metadata (see &amp;lt;http://ocoins.info/&amp;gt;) for&lt;br /&gt;
    -- automated parsing of citation information.&lt;br /&gt;
    local OCinSoutput = COinS{&lt;br /&gt;
        [&#039;Periodical&#039;] = Periodical,&lt;br /&gt;
        [&#039;Chapter&#039;] = Chapter,&lt;br /&gt;
        [&#039;Title&#039;] = Title,&lt;br /&gt;
        [&#039;PublicationPlace&#039;] = PublicationPlace,&lt;br /&gt;
        [&#039;Date&#039;] = first_set(COinS_date, Date),		-- COinS_date has correctly formatted date if Date is valid; any reason to keep Date here?  Should we be including invalid dates in metadata?&lt;br /&gt;
        [&#039;Series&#039;] = Series,&lt;br /&gt;
        [&#039;Volume&#039;] = Volume,&lt;br /&gt;
        [&#039;Issue&#039;] = Issue,&lt;br /&gt;
        [&#039;Pages&#039;] = get_coins_pages (first_set(Page, Pages, At)),	-- pages stripped of external links&lt;br /&gt;
        [&#039;Edition&#039;] = Edition,&lt;br /&gt;
        [&#039;PublisherName&#039;] = PublisherName,&lt;br /&gt;
        [&#039;URL&#039;] = first_set( URL, ChapterURL ),&lt;br /&gt;
        [&#039;Authors&#039;] = a,&lt;br /&gt;
        [&#039;ID_list&#039;] = ID_list,&lt;br /&gt;
        [&#039;RawPage&#039;] = this_page.prefixedText,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if is_set(Periodical) and not is_set(Chapter) and is_set(Title) then&lt;br /&gt;
        Chapter = Title;&lt;br /&gt;
        ChapterLink = TitleLink;&lt;br /&gt;
        TransChapter = TransTitle;&lt;br /&gt;
        Title = &#039;&#039;;&lt;br /&gt;
        TitleLink = &#039;&#039;;&lt;br /&gt;
        TransTitle = &#039;&#039;;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Now perform various field substitutions.&lt;br /&gt;
    -- We also add leading spaces and surrounding markup and punctuation to the&lt;br /&gt;
    -- various parts of the citation, but only when they are non-nil.&lt;br /&gt;
    if not is_set(Authors) then&lt;br /&gt;
        local Maximum = tonumber( A[&#039;DisplayAuthors&#039;] );&lt;br /&gt;
        &lt;br /&gt;
        -- Preserve old-style implicit et al.&lt;br /&gt;
        if not is_set(Maximum) and #a == 9 then &lt;br /&gt;
            Maximum = 8;&lt;br /&gt;
            table.insert( z.message_tail, { seterror(&#039;implict_etal_author&#039;, {}, true ) } );&lt;br /&gt;
        elseif not is_set(Maximum) then&lt;br /&gt;
            Maximum = #a + 1;&lt;br /&gt;
        end&lt;br /&gt;
            &lt;br /&gt;
        local control = { &lt;br /&gt;
            sep = A[&amp;quot;AuthorSeparator&amp;quot;] .. &amp;quot; &amp;quot;,&lt;br /&gt;
            namesep = (first_set(A[&amp;quot;AuthorNameSeparator&amp;quot;], A[&amp;quot;NameSeparator&amp;quot;]) or &amp;quot;&amp;quot;) .. &amp;quot; &amp;quot;,&lt;br /&gt;
            format = A[&amp;quot;AuthorFormat&amp;quot;],&lt;br /&gt;
            maximum = Maximum,&lt;br /&gt;
            lastauthoramp = LastAuthorAmp&lt;br /&gt;
        };&lt;br /&gt;
        &lt;br /&gt;
        -- If the coauthor field is also used, prevent ampersand and et al. formatting.&lt;br /&gt;
        if is_set(Coauthors) then&lt;br /&gt;
            control.lastauthoramp = nil;&lt;br /&gt;
            control.maximum = #a + 1;&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        Authors = listpeople(control, a) &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	if not is_set(Authors) and is_set(Coauthors) then	-- coauthors aren&#039;t displayed if one of authors=, authorn=, or lastn= isn&#039;t specified&lt;br /&gt;
		table.insert( z.message_tail, { seterror(&#039;coauthors_missing_author&#039;, {}, true) } );	-- emit error message&lt;br /&gt;
		&lt;br /&gt;
		-- Utilizo temporalmente los coautores como autores.&lt;br /&gt;
		Authors = Coauthors&lt;br /&gt;
		Coauthors = nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    local EditorCount&lt;br /&gt;
    if not is_set(Editors) then&lt;br /&gt;
        local Maximum = tonumber( A[&#039;DisplayEditors&#039;] );&lt;br /&gt;
        -- Preserve old-style implicit et al.&lt;br /&gt;
        if not is_set(Maximum) and #e == 4 then &lt;br /&gt;
            Maximum = 3;&lt;br /&gt;
            table.insert( z.message_tail, { seterror(&#039;implict_etal_editor&#039;, {}, true) } );&lt;br /&gt;
        elseif not is_set(Maximum) then&lt;br /&gt;
            Maximum = #e + 1;&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        local control = { &lt;br /&gt;
            sep = A[&amp;quot;EditorSeparator&amp;quot;] .. &amp;quot; &amp;quot;,&lt;br /&gt;
            namesep = (first_set(A[&amp;quot;EditorNameSeparator&amp;quot;], A[&amp;quot;NameSeparator&amp;quot;]) or &amp;quot;&amp;quot;) .. &amp;quot; &amp;quot;,&lt;br /&gt;
            format = A[&#039;EditorFormat&#039;],&lt;br /&gt;
            maximum = Maximum,&lt;br /&gt;
            lastauthoramp = LastAuthorAmp&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        Editors, EditorCount = listpeople(control, e);&lt;br /&gt;
    else&lt;br /&gt;
        EditorCount = 1;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local Cartography = &amp;quot;&amp;quot;;&lt;br /&gt;
    local Scale = &amp;quot;&amp;quot;;&lt;br /&gt;
    if config.ClaseCita == &amp;quot;map&amp;quot; then&lt;br /&gt;
        if not is_set( Authors ) and is_set( PublisherName ) then&lt;br /&gt;
            Authors = PublisherName;&lt;br /&gt;
            PublisherName = &amp;quot;&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        Cartography = A[&#039;Cartography&#039;];&lt;br /&gt;
        if is_set( Cartography ) then&lt;br /&gt;
            Cartography = sepc .. &amp;quot; &amp;quot; .. wrap( &#039;cartography&#039;, Cartography, use_lowercase );&lt;br /&gt;
        end        &lt;br /&gt;
        Scale = A[&#039;Scale&#039;];&lt;br /&gt;
        if is_set( Scale ) then&lt;br /&gt;
            Scale = sepc .. &amp;quot; &amp;quot; .. Scale;&lt;br /&gt;
        end        &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if  not is_set(URL) and&lt;br /&gt;
        not is_set(ChapterURL) and&lt;br /&gt;
        not is_set(ArchiveURL) and&lt;br /&gt;
        not is_set(ConferenceURL) and&lt;br /&gt;
        not is_set(TranscriptURL) then&lt;br /&gt;
        &lt;br /&gt;
        sinURL = true&lt;br /&gt;
        &lt;br /&gt;
        -- Test if cite web or cite podcast |url= is missing or empty &lt;br /&gt;
		if inArray(config.ClaseCita, {&amp;quot;web&amp;quot;,&amp;quot;podcast&amp;quot;}) then	&lt;br /&gt;
			table.insert( z.message_tail, { seterror( &#039;cite_web_url&#039;, {}, true ) } );&lt;br /&gt;
		end&lt;br /&gt;
        &lt;br /&gt;
        -- Test if format is given without giving a URL&lt;br /&gt;
        if is_set(Format) then&lt;br /&gt;
            Format = Format .. seterror( &#039;format_missing_url&#039; );&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Test if citation has no title&lt;br /&gt;
    if  not is_set(Chapter) and&lt;br /&gt;
        not is_set(Title) and&lt;br /&gt;
        not is_set(Periodical) and&lt;br /&gt;
        not is_set(Conference) and&lt;br /&gt;
        not is_set(TransTitle) and&lt;br /&gt;
        not is_set(TransChapter) and&lt;br /&gt;
        not is_set(Passage) then&lt;br /&gt;
        table.insert( z.message_tail, { seterror( &#039;citation_missing_title&#039;, {}, true ) } );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    Format = is_set(Format) and &amp;quot; &amp;quot; .. wrap( &#039;format&#039;, Format ) or &amp;quot;&amp;quot;; --is_set(Format) and &amp;quot; (&amp;quot; .. Format .. &amp;quot;)&amp;quot; or &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    local OriginalURL = URL&lt;br /&gt;
    DeadURL = DeadURL:lower();&lt;br /&gt;
    if is_set( ArchiveURL ) then&lt;br /&gt;
        if ( DeadURL ~= &amp;quot;no&amp;quot; ) then&lt;br /&gt;
            URL = ArchiveURL&lt;br /&gt;
            URLorigin = A:ORIGIN(&#039;ArchiveURL&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Format chapter / article title&lt;br /&gt;
    if is_set(Chapter) and is_set(ChapterLink) then &lt;br /&gt;
        Chapter = &amp;quot;[[&amp;quot; .. ChapterLink .. &amp;quot;|&amp;quot; .. Chapter .. &amp;quot;]]&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if is_set(Periodical) and is_set(Title) then&lt;br /&gt;
        Chapter = wrap( &#039;italic-title&#039;, Chapter );&lt;br /&gt;
        TransChapter = wrap( &#039;trans-italic-title&#039;, TransChapter );&lt;br /&gt;
    else&lt;br /&gt;
		Chapter = kern_quotes (Chapter);				-- if necessary, separate chapter title&#039;s leading and trailing quote marks from Module provided quote marks&lt;br /&gt;
        Chapter = wrap( &#039;quoted-title&#039;, Chapter );&lt;br /&gt;
        TransChapter = wrap( &#039;trans-quoted-title&#039;, TransChapter );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local TransError = &amp;quot;&amp;quot;&lt;br /&gt;
    if is_set(TransChapter) then&lt;br /&gt;
        if not is_set(Chapter) then&lt;br /&gt;
            TransError = &amp;quot; &amp;quot; .. seterror( &#039;trans_missing_chapter&#039; );&lt;br /&gt;
        else&lt;br /&gt;
            TransChapter = &amp;quot; &amp;quot; .. TransChapter;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    Chapter = Chapter .. TransChapter;&lt;br /&gt;
    &lt;br /&gt;
    if is_set(Chapter) then&lt;br /&gt;
        if not is_set(ChapterLink) then&lt;br /&gt;
            if is_set(ChapterURL) then&lt;br /&gt;
                Chapter = externallink( ChapterURL, Chapter ) .. TransError;&lt;br /&gt;
                if not is_set(URL) then&lt;br /&gt;
                    Chapter = Chapter .. Format;&lt;br /&gt;
                    Format = &amp;quot;&amp;quot;;&lt;br /&gt;
                end&lt;br /&gt;
            elseif is_set(URL) then &lt;br /&gt;
                Chapter = externallink( URL, Chapter ) .. TransError .. Format;&lt;br /&gt;
                URL = &amp;quot;&amp;quot;;&lt;br /&gt;
                Format = &amp;quot;&amp;quot;;&lt;br /&gt;
            else&lt;br /&gt;
                Chapter = Chapter .. TransError;&lt;br /&gt;
            end            &lt;br /&gt;
        elseif is_set(ChapterURL) then&lt;br /&gt;
            Chapter = Chapter .. &amp;quot; &amp;quot; .. externallink( ChapterURL, nil, ChapterURLorigin ) .. &lt;br /&gt;
                TransError;&lt;br /&gt;
        else&lt;br /&gt;
            Chapter = Chapter .. TransError;&lt;br /&gt;
        end&lt;br /&gt;
        Chapter = Chapter .. sepc .. &amp;quot; &amp;quot; -- with end-space&lt;br /&gt;
    elseif is_set(ChapterURL) then&lt;br /&gt;
        Chapter = &amp;quot; &amp;quot; .. externallink( ChapterURL, nil, ChapterURLorigin ) .. sepc .. &amp;quot; &amp;quot;;&lt;br /&gt;
    end        &lt;br /&gt;
    &lt;br /&gt;
    -- Format main title.&lt;br /&gt;
    if is_set(TitleLink) and is_set(Title) then&lt;br /&gt;
        Title = &amp;quot;[[&amp;quot; .. TitleLink .. &amp;quot;|&amp;quot; .. Title .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if is_set(Traductor) and is_set(Traductores) then&lt;br /&gt;
    	Traductor = &amp;quot; &amp;quot; .. wrap( &#039;traductores&#039;, Traductores) .. &amp;quot; &amp;quot; .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;traductor=&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;&amp;amp;#124;traductores=&amp;lt;/code&amp;gt;&#039;)&lt;br /&gt;
    elseif is_set(Traductor) then&lt;br /&gt;
    	Traductor = &amp;quot; &amp;quot; .. wrap( &#039;traductor&#039;, Traductor)&lt;br /&gt;
    elseif is_set(Traductores) then&lt;br /&gt;
    	Traductor = &amp;quot; &amp;quot; .. wrap( &#039;traductores&#039;, Traductores)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    Traductores = &#039;&#039;&lt;br /&gt;
    &lt;br /&gt;
    if is_set(Periodical) then&lt;br /&gt;
		Title = kern_quotes (Title);				-- if necessary, separate title&#039;s leading and trailing quote marks from Module provided quote marks&lt;br /&gt;
        Title = wrap( &#039;quoted-title&#039;, Title );&lt;br /&gt;
        TransTitle = wrap( &#039;trans-quoted-title&#039;, TransTitle );&lt;br /&gt;
--  elseif inArray(config.ClaseCita, {&amp;quot;web&amp;quot;,&amp;quot;news&amp;quot;,&amp;quot;pressrelease&amp;quot;,&amp;quot;conference&amp;quot;,&amp;quot;podcast&amp;quot;}) and&lt;br /&gt;
    elseif inArray(config.ClaseCita, {&amp;quot;web&amp;quot;,&amp;quot;noticia&amp;quot;,&amp;quot;pressrelease&amp;quot;,&amp;quot;conference&amp;quot;,&amp;quot;podcast&amp;quot;}) and    	&lt;br /&gt;
            not is_set(Chapter) then&lt;br /&gt;
		Title = kern_quotes (Title);				-- if necessary, separate title&#039;s leading and trailing quote marks from Module provided quote marks&lt;br /&gt;
        Title = wrap( &#039;quoted-title&#039;, Title );&lt;br /&gt;
        TransTitle = wrap( &#039;trans-quoted-title&#039;, TransTitle );&lt;br /&gt;
    else&lt;br /&gt;
        Title = wrap( &#039;italic-title&#039;, Title );&lt;br /&gt;
        TransTitle = wrap( &#039;trans-italic-title&#039;, TransTitle );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    TransError = &amp;quot;&amp;quot;;&lt;br /&gt;
    if is_set(TransTitle) then&lt;br /&gt;
        if not is_set(Title) then&lt;br /&gt;
            TransError = &amp;quot; &amp;quot; .. seterror( &#039;trans_missing_title&#039; );&lt;br /&gt;
        else&lt;br /&gt;
            TransTitle = &amp;quot; &amp;quot; .. TransTitle;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    Title = Title .. Traductor .. TransTitle;&lt;br /&gt;
    &lt;br /&gt;
    if is_set(Title) then&lt;br /&gt;
        if not is_set(TitleLink) and is_set(URL) then &lt;br /&gt;
            Title = externallink( URL, Title, URL_origin, UrlAccess ) .. TransError .. Format       &lt;br /&gt;
            URL = &amp;quot;&amp;quot;;&lt;br /&gt;
            TieneURL = true;&lt;br /&gt;
            Format = &amp;quot;&amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            Title = Title .. TransError;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if is_set(Place) then&lt;br /&gt;
        Place = &amp;quot; &amp;quot; .. wrap( &#039;written&#039;, Place, use_lowercase ) .. sepc .. &amp;quot; &amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if is_set(Conference) then&lt;br /&gt;
        if is_set(ConferenceURL) then&lt;br /&gt;
            Conference = externallink( ConferenceURL, Conference );&lt;br /&gt;
        end&lt;br /&gt;
        Conference = sepc .. &amp;quot; &amp;quot; .. Conference&lt;br /&gt;
    elseif is_set(ConferenceURL) then&lt;br /&gt;
        Conference = sepc .. &amp;quot; &amp;quot; .. externallink( ConferenceURL, nil, ConferenceURLorigin );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if not is_set(Position) then&lt;br /&gt;
        local Minutes = A[&#039;Minutes&#039;];&lt;br /&gt;
        if is_set(Minutes) then&lt;br /&gt;
            Position = &amp;quot; &amp;quot; .. Minutes .. &amp;quot; &amp;quot; .. cfg.messages[&#039;minutes&#039;];&lt;br /&gt;
        else&lt;br /&gt;
            local Time = A[&#039;Time&#039;];&lt;br /&gt;
            if is_set(Time) then&lt;br /&gt;
                local TimeCaption = A[&#039;TimeCaption&#039;]&lt;br /&gt;
                if not is_set(TimeCaption) then&lt;br /&gt;
                    TimeCaption = cfg.messages[&#039;event&#039;];&lt;br /&gt;
                    if sepc ~= &#039;.&#039; then&lt;br /&gt;
                        TimeCaption = TimeCaption:lower();&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                Position = &amp;quot; &amp;quot; .. TimeCaption .. &amp;quot; &amp;quot; .. Time;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        Position = &amp;quot; &amp;quot; .. Position;&lt;br /&gt;
        At = &#039;&#039;;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if not is_set(Page) then&lt;br /&gt;
        if is_set(Pages) then&lt;br /&gt;
            if is_set(Periodical) and&lt;br /&gt;
--              not inArray(config.ClaseCita, {&amp;quot;encyclopaedia&amp;quot;,&amp;quot;web&amp;quot;,&amp;quot;book&amp;quot;,&amp;quot;news&amp;quot;,&amp;quot;podcast&amp;quot;}) then&lt;br /&gt;
                not inArray(config.ClaseCita, {&amp;quot;enciclopedia&amp;quot;,&amp;quot;web&amp;quot;,&amp;quot;libro&amp;quot;,&amp;quot;noticia&amp;quot;,&amp;quot;podcast&amp;quot;}) then&lt;br /&gt;
                Pages = &amp;quot;: &amp;quot; .. Pages;&lt;br /&gt;
            elseif tonumber(Pages) ~= nil then&lt;br /&gt;
                Pages = sepc ..&amp;quot; &amp;quot; .. PPrefix .. Pages;&lt;br /&gt;
            else&lt;br /&gt;
                Pages = sepc ..&amp;quot; &amp;quot; .. PPPrefix .. Pages;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        if is_set(Periodical) and&lt;br /&gt;
--          not inArray(config.ClaseCita, {&amp;quot;encyclopaedia&amp;quot;,&amp;quot;web&amp;quot;,&amp;quot;book&amp;quot;,&amp;quot;news&amp;quot;,&amp;quot;podcast&amp;quot;}) then&lt;br /&gt;
            not inArray(config.ClaseCita, {&amp;quot;enciclopedia&amp;quot;,&amp;quot;web&amp;quot;,&amp;quot;libro&amp;quot;,&amp;quot;noticia&amp;quot;,&amp;quot;podcast&amp;quot;}) then            	&lt;br /&gt;
            Page = &amp;quot;: &amp;quot; .. Page;&lt;br /&gt;
        else&lt;br /&gt;
            Page = sepc ..&amp;quot; &amp;quot; .. PPrefix .. Page;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    At = is_set(At) and (sepc .. &amp;quot; &amp;quot; .. At) or &amp;quot;&amp;quot;;&lt;br /&gt;
    Passage = is_set(Passage) and (sepc .. &amp;quot; &amp;quot; .. Passage) or &amp;quot;&amp;quot;;&lt;br /&gt;
    Position = is_set(Position) and (sepc .. &amp;quot; &amp;quot; .. Position) or &amp;quot;&amp;quot;;&lt;br /&gt;
    if config.ClaseCita == &#039;map&#039; then&lt;br /&gt;
        local Section = A[&#039;Section&#039;];&lt;br /&gt;
        local Inset = A[&#039;Inset&#039;];&lt;br /&gt;
        if first_set( Pages, Page, At ) ~= nil or sepc ~= &#039;.&#039; then&lt;br /&gt;
            if is_set( Section ) then&lt;br /&gt;
                Section = &amp;quot;, &amp;quot; .. wrap( &#039;section&#039;, Section, true );&lt;br /&gt;
            end&lt;br /&gt;
            if is_set( Inset ) then&lt;br /&gt;
                Inset = &amp;quot;, &amp;quot; .. wrap( &#039;inset&#039;, Inset, true );&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            if is_set( Section ) then&lt;br /&gt;
                Section = sepc .. &amp;quot; &amp;quot; .. wrap( &#039;section&#039;, Section, use_lowercase );&lt;br /&gt;
                if is_set( Inset ) then&lt;br /&gt;
                    Inset = &amp;quot;, &amp;quot; .. wrap( &#039;inset&#039;, Inset, true );&lt;br /&gt;
                end&lt;br /&gt;
            elseif is_set( Inset ) then&lt;br /&gt;
                Inset = sepc .. &amp;quot; &amp;quot; .. wrap( &#039;inset&#039;, Inset, use_lowercase );&lt;br /&gt;
            end            &lt;br /&gt;
        end            &lt;br /&gt;
        At = At .. Section .. Inset;        &lt;br /&gt;
    end    &lt;br /&gt;
&lt;br /&gt;
	--[[Look in the list of iso639-1 language codes to see if the value provided in the language parameter matches one of them.  If a match is found, &lt;br /&gt;
	use that value; if not, then use the value that was provided with the language parameter.&lt;br /&gt;
	&lt;br /&gt;
	Categories are assigned in a manner similar to the {{xx icon}} templates - categorizes only mainspace citations and only when the language code is not &#039;en&#039; (English).&lt;br /&gt;
	]]&lt;br /&gt;
	&lt;br /&gt;
	if is_set (Language) then&lt;br /&gt;
		-- Poner en minúsculas el primer caracter del idioma si está en mayúsculas&lt;br /&gt;
		Language = Language:gsub(&amp;quot;^%u&amp;quot;, string.lower)&lt;br /&gt;
&lt;br /&gt;
		if Language == &#039;español&#039; or Language == &#039;castellano&#039; or Language == &#039;es&#039; or Language:match(&#039;^es%-.*&#039;) then&lt;br /&gt;
			Language=&amp;quot;&amp;quot;;	-- No mostrar el idioma español&lt;br /&gt;
		else&lt;br /&gt;
			local name = mw.language.fetchLanguageName( Language:lower(), &amp;quot;es&amp;quot; );	-- experiment: this seems to return correct ISO 639-1 language names&lt;br /&gt;
		&lt;br /&gt;
			if is_set (name) then&lt;br /&gt;
				Language=&amp;quot; &amp;quot; .. wrap( &#039;language&#039;, name );&lt;br /&gt;
			else&lt;br /&gt;
				Language=&amp;quot; &amp;quot; .. wrap( &#039;language&#039;, Language );	-- no match, use parameter&#039;s value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		Language=&amp;quot;&amp;quot;;	-- Asegurarnos de que el idioma no es nulo.&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
-- handle type parameter for those CS1 citations that have default values&lt;br /&gt;
&lt;br /&gt;
--	if inArray(config.ClaseCita, {&amp;quot;AV media notes&amp;quot;, &amp;quot;DVD notes&amp;quot;, &amp;quot;podcast&amp;quot;, &amp;quot;pressrelease&amp;quot;, &amp;quot;techreport&amp;quot;, &amp;quot;thesis&amp;quot;}) then&lt;br /&gt;
	if inArray(config.ClaseCita, {&amp;quot;notas audiovisual&amp;quot;, &amp;quot;notas de DVD&amp;quot;, &amp;quot;podcast&amp;quot;, &amp;quot;pressrelease&amp;quot;, &amp;quot;techreport&amp;quot;, &amp;quot;tesis&amp;quot;}) then		&lt;br /&gt;
		TitleType = set_titletype (config.ClaseCita, TitleType);&lt;br /&gt;
		if is_set(Degree) and &amp;quot;Tesis&amp;quot; == TitleType then	-- special case for cite thesis&lt;br /&gt;
			TitleType = &amp;quot;Tesis de &amp;quot; .. Degree;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if is_set(TitleType) then					-- if type parameter is specified&lt;br /&gt;
		TitleType = &amp;quot; (&amp;quot; .. TitleType .. &amp;quot;)&amp;quot;;	-- display it in parentheses&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	TitleNote = is_set(TitleNote) and (sepc .. &amp;quot; &amp;quot; .. TitleNote) or &amp;quot;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	if is_set(Edition) then&lt;br /&gt;
		if is_set(SinEd) then -- No existe el parámetro en el módulo de la wikipedia inglesa.&lt;br /&gt;
			Edition = &amp;quot; &amp;quot; .. wrap( &#039;sin edición&#039;, Edition ) -- No existe el parámetro en el módulo de la wikipedia inglesa.&lt;br /&gt;
		else&lt;br /&gt;
			Edition = &amp;quot; &amp;quot; .. wrap( &#039;edition&#039;, Edition )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		Edition = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
    Issue = is_set(Issue) and (&amp;quot; (&amp;quot; .. Issue .. &amp;quot;)&amp;quot;) or &amp;quot;&amp;quot;;&lt;br /&gt;
    Series = is_set(Series) and (sepc .. &amp;quot; &amp;quot; .. Series) or &amp;quot;&amp;quot;;&lt;br /&gt;
    OrigYear = is_set(OrigYear) and (&amp;quot; [&amp;amp;#8203;&amp;quot; .. OrigYear .. &amp;quot;&amp;amp;#8203;]&amp;quot;) or &amp;quot;&amp;quot;; -- zero-width space, para no generar enlaces&lt;br /&gt;
    Agency = is_set(Agency) and (sepc .. &amp;quot; &amp;quot; .. Agency) or &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    if is_set(Volume) then&lt;br /&gt;
        if Volume:match (&#039;^%d+$&#039;) or Volume:match (&#039;^[MDCLXVI]+$&#039;) -- negrita solamente si el capítulo está reflejado como cifra decimal o números romanos&lt;br /&gt;
          then Volume = &amp;quot; &amp;lt;b&amp;gt;&amp;quot; .. dashtohyphen(Volume) .. &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;;&lt;br /&gt;
          else Volume = sepc ..&amp;quot; &amp;quot; .. Volume;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
--[[ This code commented out while discussion continues until after week of 2014-03-23 live module update;&lt;br /&gt;
    if is_set(Volume) then&lt;br /&gt;
        if ( mw.ustring.len(Volume) &amp;gt; 4 )&lt;br /&gt;
          then Volume = sepc .. &amp;quot; &amp;quot; .. Volume;&lt;br /&gt;
          else&lt;br /&gt;
              Volume = &amp;quot; &amp;lt;b&amp;gt;&amp;quot; .. hyphentodash(Volume) .. &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;;&lt;br /&gt;
              if is_set(Series) then Volume = sepc .. Volume;&lt;br /&gt;
              end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
]]    &lt;br /&gt;
    ------------------------------------ totally unrelated data&lt;br /&gt;
    --[[ Loosely mimic {{subscription required}} template; Via parameter identifies a delivery source that is not the publisher; these sources often, but not always, exist&lt;br /&gt;
    behind a registration or paywall.  So here, we&#039;ve chosen to decouple via from subscription (via has never been part of the registration required template).&lt;br /&gt;
    &lt;br /&gt;
    Subscription implies paywall; Registration does not.  If both are used in a citation, the subscription required link note is displayed. There are no error messages for this condition.&lt;br /&gt;
    ]]&lt;br /&gt;
    if is_set(Via) then&lt;br /&gt;
        Via = &amp;quot; &amp;quot; .. wrap( &#039;via&#039;, Via );&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	if UrlAccess == &#039;registration&#039; then&lt;br /&gt;
		RegistrationRequired = true&lt;br /&gt;
	end&lt;br /&gt;
	if is_set(SubscriptionRequired) then&lt;br /&gt;
        SubscriptionRequired = sepc .. &amp;quot; &amp;quot; .. cfg.messages[&#039;subscription&#039;]; --here when &#039;via&#039; parameter not used but &#039;subscription&#039; is&lt;br /&gt;
    elseif is_set(RegistrationRequired) then&lt;br /&gt;
        SubscriptionRequired = sepc .. &amp;quot; &amp;quot; .. cfg.messages[&#039;registration&#039;]; --here when &#039;via&#039; and &#039;subscription&#039; parameters not used but &#039;registration&#039; is&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
--  if is_set(AccessDate) then&lt;br /&gt;
    if is_set(AccessDate)  or is_set(AnyoAcceso) then&lt;br /&gt;
        -- Test if accessdate is given without giving a URL&lt;br /&gt;
        if  sinURL then&lt;br /&gt;
            table.insert( z.message_tail, { seterror( &#039;accessdate_missing_url&#039;, {}, true ) } );&lt;br /&gt;
           	AccessDate = &#039;&#039;;&lt;br /&gt;
        else&lt;br /&gt;
        	if is_set(AccessDate) then&lt;br /&gt;
				if is_set(MesAcceso) and is_set(AnyoAcceso) then&lt;br /&gt;
					AccessDate = AccessDate .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;fechaacceso=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;#124;añoacceso=&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;&amp;amp;#124;mesacceso=&amp;lt;/code&amp;gt;&#039;)&lt;br /&gt;
				elseif is_set(MesAcceso) then&lt;br /&gt;
					AccessDate = AccessDate .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;fechaacceso=&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;&amp;amp;#124;mesacceso=&amp;lt;/code&amp;gt;&#039;)&lt;br /&gt;
				elseif is_set(AnyoAcceso) then&lt;br /&gt;
					if string.find(AccessDate, &#039;%sde%s&#039;) then&lt;br /&gt;
						AccessDate = AccessDate .. &#039; de &#039; .. AnyoAcceso&lt;br /&gt;
				    else&lt;br /&gt;
						AccessDate = AccessDate .. seterror(&#039;redundant_parameters&#039;, &#039;&amp;lt;code&amp;gt;&amp;amp;#124;fechaacceso=&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;&amp;amp;#124;Añoacceso=&amp;lt;/code&amp;gt;&#039;);&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
        	elseif is_set(MesAcceso) then &lt;br /&gt;
        		AccessDate = MesAcceso .. &#039; de &#039; .. AnyoAcceso&lt;br /&gt;
        	else &lt;br /&gt;
        		AccessDate = AnyoAcceso&lt;br /&gt;
        	end&lt;br /&gt;
            local retrv_text = &amp;quot; &amp;quot; .. cfg.messages[&#039;retrieved&#039;]&lt;br /&gt;
            if (sepc ~= &amp;quot;.&amp;quot;) then retrv_text = retrv_text:lower() end&lt;br /&gt;
            AccessDate = &#039;&amp;lt;span class=&amp;quot;reference-accessdate&amp;quot;&amp;gt;&#039; .. sepc&lt;br /&gt;
              .. substitute( retrv_text, {format_date(AccessDate)} ) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        end &lt;br /&gt;
    elseif is_set(MesAcceso) then &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if is_set(ID) then ID = sepc ..&amp;quot; &amp;quot;.. ID; end&lt;br /&gt;
   	if &amp;quot;tesis&amp;quot; == config.ClaseCita and is_set(Docket) then&lt;br /&gt;
		ID = sepc ..&amp;quot; Docket &amp;quot;.. Docket .. ID;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
   Lista_Identificadores_Formateados = buildidlist( ID_list, {DoiBroken = DoiBroken, IgnoreISBN = IgnoreISBN, Embargo=Embargo, ISBNCorrecto = ISBNCorrecto, ISBNSugerido = ISBNSugerido} );&lt;br /&gt;
	&lt;br /&gt;
    if is_set(URL) then&lt;br /&gt;
        URL = &amp;quot; &amp;quot; .. externallink( URL, nil, URLorigin, UrlAccess );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
-- Set postscript default.&lt;br /&gt;
	if not is_set (PostScript) then						-- if |postscript= has not been set (Postscript is nil which is the default for {{citation}}) and&lt;br /&gt;
		if (config.ClaseCita ~= &amp;quot;citation&amp;quot;) then	-- this template is not a citation template&lt;br /&gt;
			PostScript = &#039;.&#039;;							-- must be a cite xxx template so set postscript to default (period)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if PostScript:lower() == &#039;none&#039; then			-- if |postscript=none then&lt;br /&gt;
			PostScript = &#039;&#039;;							-- no postscript&lt;br /&gt;
		end&lt;br /&gt;
	end    &lt;br /&gt;
&lt;br /&gt;
    if is_set(Quote) or is_set(TransQuote) then&lt;br /&gt;
    	-- Eliminar comillas de Quote&lt;br /&gt;
        if (Quote:sub(1,1) == &#039;&amp;quot;&#039; and Quote:sub(-1,-1) == &#039;&amp;quot;&#039;) or&lt;br /&gt;
           (Quote:sub(1,1) == &#039;«&#039; and Quote:sub(-1,-1) == &#039;»&#039;) then&lt;br /&gt;
            Quote = Quote:sub(2,-2);&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        -- No añadir el punto final a la cita si el campo Quote ya incluye un punto&lt;br /&gt;
        if Quote:sub(-1,-1) == &#039;.&#039; or Quote:sub(-1,-1) == &#039;?&#039; or&lt;br /&gt;
           Quote:sub(-1,-1) == &#039;!&#039; then&lt;br /&gt;
           PostScript = &amp;quot;&amp;quot;&lt;br /&gt;
           end&lt;br /&gt;
           &lt;br /&gt;
        -- Eliminar comillas de TransQuote&lt;br /&gt;
        if (TransQuote:sub(1, 1) == &#039;&amp;quot;&#039; and TransQuote:sub(-1, -1) == &#039;&amp;quot;&#039;) or&lt;br /&gt;
           (Quote:sub(1,1) == &#039;«&#039; and Quote:sub(-1,-1) == &#039;»&#039;) then&lt;br /&gt;
			TransQuote = TransQuote:sub(2, -2);&lt;br /&gt;
			end&lt;br /&gt;
        &lt;br /&gt;
        -- No añadir el punto final a la cita si el campo TransQuote ya incluye un punto&lt;br /&gt;
        if TransQuote:sub(-1,-1) == &#039;.&#039; or TransQuote:sub(-1,-1) == &#039;?&#039; or&lt;br /&gt;
           TransQuote:sub(-1,-1) == &#039;!&#039; then&lt;br /&gt;
           PostScript = &amp;quot;&amp;quot;&lt;br /&gt;
           end&lt;br /&gt;
		if TransQuote and TransQuote ~= &#039;&#039; then&lt;br /&gt;
           Quote = Quote .. &amp;quot; &amp;quot; .. wrap( &#039;trans-quoted-title&#039;, TransQuote );&lt;br /&gt;
           TransQuote = wrap( &#039;trans-quoted-title&#039;, TransQuote );&lt;br /&gt;
		end&lt;br /&gt;
        Quote = sepc ..&amp;quot; &amp;quot; .. wrap( &#039;quoted-text&#039;, Quote ); &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local Archived&lt;br /&gt;
    if is_set(ArchiveURL) then&lt;br /&gt;
        if not is_set(ArchiveDate) then&lt;br /&gt;
            ArchiveDate = seterror(&#039;archive_missing_date&#039;);&lt;br /&gt;
        else&lt;br /&gt;
        	ArchiveDate = format_date(ArchiveDate)&lt;br /&gt;
        end&lt;br /&gt;
        if &amp;quot;no&amp;quot; == DeadURL then&lt;br /&gt;
            local arch_text = cfg.messages[&#039;archived&#039;];&lt;br /&gt;
            if sepc ~= &amp;quot;.&amp;quot; then arch_text = arch_text:lower() end&lt;br /&gt;
            Archived = sepc .. &amp;quot; &amp;quot; .. substitute( cfg.messages[&#039;archived-not-dead&#039;],&lt;br /&gt;
                { externallink( ArchiveURL, arch_text ), ArchiveDate } );&lt;br /&gt;
            if not is_set(OriginalURL) then&lt;br /&gt;
                Archived = Archived .. &amp;quot; &amp;quot; .. seterror(&#039;archive_missing_url&#039;);                               &lt;br /&gt;
            end&lt;br /&gt;
        elseif is_set(OriginalURL) then&lt;br /&gt;
            local arch_text = cfg.messages[&#039;archived-dead&#039;];&lt;br /&gt;
            if sepc ~= &amp;quot;.&amp;quot; then arch_text = arch_text:lower() end&lt;br /&gt;
            Archived = sepc .. &amp;quot; &amp;quot; .. substitute( arch_text,&lt;br /&gt;
                { externallink( OriginalURL, cfg.messages[&#039;original&#039;] ), ArchiveDate } );&lt;br /&gt;
        else&lt;br /&gt;
            local arch_text = cfg.messages[&#039;archived-missing&#039;];&lt;br /&gt;
            if sepc ~= &amp;quot;.&amp;quot; then arch_text = arch_text:lower() end&lt;br /&gt;
            Archived = sepc .. &amp;quot; &amp;quot; .. substitute( arch_text, &lt;br /&gt;
                { seterror(&#039;archive_missing_url&#039;), ArchiveDate } );&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        Archived = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local Lay&lt;br /&gt;
    if is_set(LayURL) then&lt;br /&gt;
        if is_set(LayDate) then LayDate = &amp;quot; (&amp;quot; .. format_date(LayDate) .. &amp;quot;)&amp;quot; end&lt;br /&gt;
        if is_set(LaySource) then &lt;br /&gt;
            LaySource = &amp;quot; &amp;amp;ndash; &#039;&#039;&amp;quot; .. safeforitalics(LaySource) .. &amp;quot;&#039;&#039;&amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            LaySource = &amp;quot;&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if sepc == &#039;.&#039; then&lt;br /&gt;
            Lay = sepc .. &amp;quot; &amp;quot; .. externallink( LayURL, cfg.messages[&#039;lay summary&#039;] ) .. LaySource .. LayDate&lt;br /&gt;
        else&lt;br /&gt;
            Lay = sepc .. &amp;quot; &amp;quot; .. externallink( LayURL, cfg.messages[&#039;lay summary&#039;]:lower() ) .. LaySource .. LayDate&lt;br /&gt;
        end            &lt;br /&gt;
    else&lt;br /&gt;
        Lay = &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if is_set(Transcript) then&lt;br /&gt;
        if is_set(TranscriptURL) then Transcript = externallink( TranscriptURL, Transcript ); end&lt;br /&gt;
    elseif is_set(TranscriptURL) then&lt;br /&gt;
        Transcript = externallink( TranscriptURL, nil, TranscriptURLorigin );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local Publisher;&lt;br /&gt;
    if is_set(Periodical) and&lt;br /&gt;
--      not inArray(config.ClaseCita, {&amp;quot;encyclopaedia&amp;quot;,&amp;quot;web&amp;quot;,&amp;quot;pressrelease&amp;quot;,&amp;quot;podcast&amp;quot;}) then&lt;br /&gt;
        not inArray(config.ClaseCita, {&amp;quot;enciclopedia&amp;quot;,&amp;quot;web&amp;quot;,&amp;quot;pressrelease&amp;quot;,&amp;quot;podcast&amp;quot;}) then        	&lt;br /&gt;
        if is_set(PublisherName) then&lt;br /&gt;
            if is_set(PublicationPlace) then&lt;br /&gt;
                Publisher = PublicationPlace .. &amp;quot;: &amp;quot; .. PublisherName;&lt;br /&gt;
            else&lt;br /&gt;
                Publisher = PublisherName;  &lt;br /&gt;
            end&lt;br /&gt;
        elseif is_set(PublicationPlace) then&lt;br /&gt;
            Publisher= PublicationPlace;&lt;br /&gt;
        else &lt;br /&gt;
            Publisher = &amp;quot;&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if is_set(PublicationDate) then&lt;br /&gt;
            if is_set(Publisher) then&lt;br /&gt;
                Publisher = Publisher .. &amp;quot;, &amp;quot; .. wrap( &#039;published&#039;, PublicationDate );&lt;br /&gt;
            else&lt;br /&gt;
                Publisher = PublicationDate;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if is_set(Publisher) then&lt;br /&gt;
            Publisher = &amp;quot; (&amp;quot; .. Publisher .. &amp;quot;)&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        if is_set(PublicationDate) then&lt;br /&gt;
            PublicationDate = &amp;quot; (&amp;quot; .. wrap( &#039;published&#039;, format_date(PublicationDate) ) .. &amp;quot;)&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if is_set(PublisherName) then&lt;br /&gt;
            if is_set(PublicationPlace) then&lt;br /&gt;
                Publisher = sepc .. &amp;quot; &amp;quot; .. PublicationPlace .. &amp;quot;: &amp;quot; .. PublisherName .. PublicationDate;&lt;br /&gt;
            else&lt;br /&gt;
                Publisher = sepc .. &amp;quot; &amp;quot; .. PublisherName .. PublicationDate;  &lt;br /&gt;
            end            &lt;br /&gt;
        elseif is_set(PublicationPlace) then &lt;br /&gt;
            Publisher= sepc .. &amp;quot; &amp;quot; .. PublicationPlace .. PublicationDate;&lt;br /&gt;
        else &lt;br /&gt;
            Publisher = PublicationDate;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Several of the above rely upon detecting this as nil, so do it last.&lt;br /&gt;
    if is_set(Periodical) then&lt;br /&gt;
        if is_set(Title) or is_set(TitleNote) then &lt;br /&gt;
            Periodical = sepc .. &amp;quot; &amp;quot; .. wrap( &#039;italic-title&#039;, Periodical ) &lt;br /&gt;
        else &lt;br /&gt;
            Periodical = wrap( &#039;italic-title&#039;, Periodical )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Handle the oddity that is cite speech.  This code overrides whatever may be the value assigned to TitleNote (through |department=) and forces it to be &amp;quot; (Speech)&amp;quot; so that&lt;br /&gt;
the annotation directly follows the |title= parameter value in the citation rather than the |event= parameter value (if provided).&lt;br /&gt;
]]&lt;br /&gt;
	if &amp;quot;speech&amp;quot; == config.ClaseCita then				-- cite speech only&lt;br /&gt;
		TitleNote = &amp;quot; (Speech)&amp;quot;;							-- annotate the citation&lt;br /&gt;
		if is_set (Periodical) then							-- if Periodical, perhaps because of an included |website= or |journal= parameter &lt;br /&gt;
			if is_set (Conference) then						-- and if |event= is set&lt;br /&gt;
				Conference = Conference .. sepc .. &amp;quot; &amp;quot;;		-- then add appropriate punctuation to the end of the Conference variable before rendering&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    -- Piece all bits together at last.  Here, all should be non-nil.&lt;br /&gt;
    -- We build things this way because it is more efficient in LUA&lt;br /&gt;
    -- not to keep reassigning to the same string variable over and over.&lt;br /&gt;
&lt;br /&gt;
    local tcommon&lt;br /&gt;
--  if inArray(config.ClaseCita, {&amp;quot;journal&amp;quot;,&amp;quot;citation&amp;quot;}) and is_set(Periodical) then&lt;br /&gt;
    if inArray(config.ClaseCita, {&amp;quot;publicación&amp;quot;,&amp;quot;citation&amp;quot;}) and is_set(Periodical) then&lt;br /&gt;
        if is_set(Others) then Others = Others .. sepc .. &amp;quot; &amp;quot; end&lt;br /&gt;
        tcommon = safejoin( {Others, Title, TitleNote, Conference, Periodical, Format, TitleType, Scale, Series, &lt;br /&gt;
            Language, Cartography, Edition, Publisher, Agency, Volume, Issue}, sepc );&lt;br /&gt;
    else &lt;br /&gt;
        tcommon = safejoin( {Title, TitleNote, Conference, Periodical, Format, TitleType, Scale, Series, Language, &lt;br /&gt;
            Volume, Issue, Others, Cartography, Edition, Publisher, Agency}, sepc );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if #Lista_Identificadores_Formateados &amp;gt; 0 then&lt;br /&gt;
        Lista_Identificadores_Formateados = safejoin( { sepc .. &amp;quot; &amp;quot;,  table.concat( Lista_Identificadores_Formateados, sepc .. &amp;quot; &amp;quot; ), ID }, sepc );&lt;br /&gt;
    else&lt;br /&gt;
        Lista_Identificadores_Formateados = ID;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local idcommon = safejoin( { Lista_Identificadores_Formateados, URL, Archived, AccessDate, Via, SubscriptionRequired, Lay, Quote }, sepc );&lt;br /&gt;
    local text;&lt;br /&gt;
    local pgtext = Position .. Page .. Pages .. At .. Passage;&lt;br /&gt;
    &lt;br /&gt;
    if is_set(Authors) then&lt;br /&gt;
        if is_set(Coauthors) then&lt;br /&gt;
            Authors = Authors .. A[&#039;AuthorSeparator&#039;] .. &amp;quot; &amp;quot; .. Coauthors&lt;br /&gt;
        end&lt;br /&gt;
        if is_set(Date) then&lt;br /&gt;
            Date = &amp;quot; (&amp;quot;..format_date(Date)..&amp;quot;)&amp;quot; .. OrigYear .. sepc .. &amp;quot; &amp;quot;&lt;br /&gt;
        elseif string.sub(Authors,-1,-1) == sepc then&lt;br /&gt;
            Authors = Authors .. &amp;quot; &amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            Authors = Authors .. sepc .. &amp;quot; &amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if is_set(Editors) then&lt;br /&gt;
            local in_text = &amp;quot; &amp;quot;;&lt;br /&gt;
            local post_text = &amp;quot;&amp;quot;;&lt;br /&gt;
			if is_set(Chapter) then&lt;br /&gt;
				in_text = in_text .. cfg.messages[&#039;in&#039;] .. &amp;quot; &amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
            if EditorCount &amp;lt;= 1 then&lt;br /&gt;
                post_text = &amp;quot;, &amp;quot; .. cfg.messages[&#039;editor&#039;];&lt;br /&gt;
            else&lt;br /&gt;
                post_text = &amp;quot;, &amp;quot; .. cfg.messages[&#039;editors&#039;];&lt;br /&gt;
            end&lt;br /&gt;
			if (sepc ~= &#039;.&#039;) then in_text = in_text:lower() end&lt;br /&gt;
            Editors = in_text .. Editors .. post_text;&lt;br /&gt;
            if (string.sub(Editors,-1,-1) == sepc)&lt;br /&gt;
                then Editors = Editors .. &amp;quot; &amp;quot;&lt;br /&gt;
                else Editors = Editors .. sepc .. &amp;quot; &amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        text = safejoin( {Authors, Date, Chapter, Place, Editors, tcommon }, sepc );&lt;br /&gt;
        text = safejoin( {text, pgtext, idcommon}, sepc );&lt;br /&gt;
    elseif is_set(Editors) then&lt;br /&gt;
        if is_set(Date) then&lt;br /&gt;
            if EditorCount &amp;lt;= 1 then&lt;br /&gt;
                Editors = Editors .. &amp;quot;, &amp;quot; .. cfg.messages[&#039;editor&#039;];&lt;br /&gt;
            else&lt;br /&gt;
                Editors = Editors .. &amp;quot;, &amp;quot; .. cfg.messages[&#039;editors&#039;];&lt;br /&gt;
            end&lt;br /&gt;
            Date = &amp;quot; (&amp;quot; .. format_date(Date) ..&amp;quot;)&amp;quot; .. OrigYear .. sepc .. &amp;quot; &amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            if EditorCount &amp;lt;= 1 then&lt;br /&gt;
                Editors = Editors .. &amp;quot; (&amp;quot; .. cfg.messages[&#039;editor&#039;] .. &amp;quot;)&amp;quot; .. sepc .. &amp;quot; &amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                Editors = Editors .. &amp;quot; (&amp;quot; .. cfg.messages[&#039;editors&#039;] .. &amp;quot;)&amp;quot; .. sepc .. &amp;quot; &amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        text = safejoin( {Editors, Date, Chapter, Place, tcommon}, sepc );&lt;br /&gt;
        text = safejoin( {text, pgtext, idcommon}, sepc );&lt;br /&gt;
    else&lt;br /&gt;
        if is_set(Date) then&lt;br /&gt;
            if ( string.sub(tcommon,-1,-1) ~= sepc )&lt;br /&gt;
              then Date = sepc ..&amp;quot; &amp;quot; .. format_date(Date) .. OrigYear&lt;br /&gt;
              else Date = &amp;quot; &amp;quot; .. format_date(Date) .. OrigYear&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
--      if config.ClaseCita==&amp;quot;journal&amp;quot; and is_set(Periodical) then&lt;br /&gt;
        if config.ClaseCita==&amp;quot;publicación&amp;quot; and is_set(Periodical) then        	&lt;br /&gt;
            text = safejoin( {Chapter, Place, tcommon}, sepc );&lt;br /&gt;
            text = safejoin( {text, pgtext, Date, idcommon}, sepc );&lt;br /&gt;
        else&lt;br /&gt;
            text = safejoin( {Chapter, Place, tcommon, Date}, sepc );&lt;br /&gt;
            text = safejoin( {text, pgtext, idcommon}, sepc );&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
	if is_set(PostScript) and PostScript ~= sepc then&lt;br /&gt;
		text = safejoin( {text, sepc}, sepc );  --Deals with italics, spaces, etc.&lt;br /&gt;
		text = text:sub(1,-sepc:len()-1);&lt;br /&gt;
--		text = text:sub(1,-2);	--Remove final separator (assumes that sepc is only one character)&lt;br /&gt;
	end    &lt;br /&gt;
    &lt;br /&gt;
    text = safejoin( {text, PostScript}, sepc );&lt;br /&gt;
&lt;br /&gt;
    -- Now enclose the whole thing in a &amp;lt;span/&amp;gt; element&lt;br /&gt;
    local options = {};&lt;br /&gt;
    &lt;br /&gt;
    if is_set(config.ClaseCita) and config.ClaseCita ~= &amp;quot;citation&amp;quot; then&lt;br /&gt;
        options.class = &amp;quot;citation &amp;quot; .. config.ClaseCita;&lt;br /&gt;
    else&lt;br /&gt;
        options.class = &amp;quot;citation&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if is_set(Ref) and Ref:lower() ~= &amp;quot;none&amp;quot; then&lt;br /&gt;
        local id = Ref&lt;br /&gt;
        if ( &amp;quot;harv&amp;quot; == Ref ) then&lt;br /&gt;
            local names = {} --table of last names &amp;amp; year&lt;br /&gt;
            if #a &amp;gt; 0 then&lt;br /&gt;
                for i,v in ipairs(a) do &lt;br /&gt;
                    names[i] = v.last &lt;br /&gt;
                    if i == 4 then break end&lt;br /&gt;
                end&lt;br /&gt;
            elseif #e &amp;gt; 0 then&lt;br /&gt;
                for i,v in ipairs(e) do &lt;br /&gt;
                    names[i] = v.last &lt;br /&gt;
                    if i == 4 then break end                &lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
--			names[ #names + 1 ] = first_set(Year, anchor_year);	-- Year first for legacy citations&lt;br /&gt;
--			names[ #names + 1 ] = first_set(Year, &#039;&#039;);	-- Year first for legacy citations&lt;br /&gt;
			names[ #names + 1 ] = first_set(wYear, wfecha, &#039;&#039;);	-- Year first for legacy citations&lt;br /&gt;
            id = anchorid(names)&lt;br /&gt;
        end&lt;br /&gt;
        options.id = id;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if string.len(text:gsub(&amp;quot;&amp;lt;span[^&amp;gt;/]*&amp;gt;.-&amp;lt;/span&amp;gt;&amp;quot;, &amp;quot;&amp;quot;):gsub(&amp;quot;%b&amp;lt;&amp;gt;&amp;quot;,&amp;quot;&amp;quot;)) &amp;lt;= 2 then&lt;br /&gt;
        z.error_categories = {};&lt;br /&gt;
        text = seterror(&#039;empty_citation&#039;);&lt;br /&gt;
        z.message_tail = {};&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if is_set(options.id) then &lt;br /&gt;
        text = &#039;&amp;lt;span id=&amp;quot;&#039; .. mw.uri.anchorEncode(options.id) ..&#039;&amp;quot; class=&amp;quot;&#039; .. mw.text.nowiki(options.class) .. &#039;&amp;quot;&amp;gt;&#039; .. text .. &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;;&lt;br /&gt;
    else&lt;br /&gt;
        text = &#039;&amp;lt;span class=&amp;quot;&#039; .. mw.text.nowiki(options.class) .. &#039;&amp;quot;&amp;gt;&#039; .. text .. &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;;&lt;br /&gt;
    end        &lt;br /&gt;
&lt;br /&gt;
    local empty_span = &#039;&amp;lt;span style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    &lt;br /&gt;
    -- Note: Using display: none on then COinS span breaks some clients.&lt;br /&gt;
    local OCinS = &#039;&amp;lt;span title=&amp;quot;&#039; .. OCinSoutput .. &#039;&amp;quot; class=&amp;quot;Z3988&amp;quot;&amp;gt;&#039; .. empty_span .. &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    text = text .. OCinS;&lt;br /&gt;
    &lt;br /&gt;
    if #z.message_tail ~= 0 then&lt;br /&gt;
        text = text .. &amp;quot; &amp;quot;;&lt;br /&gt;
        for i,v in ipairs( z.message_tail ) do&lt;br /&gt;
            if is_set(v[1]) then&lt;br /&gt;
                if i == #z.message_tail then&lt;br /&gt;
                    text = text .. errorcomment( v[1], v[2] );&lt;br /&gt;
                else&lt;br /&gt;
                    text = text .. errorcomment( v[1] .. &amp;quot;; &amp;quot;, v[2] );&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    no_tracking_cats = no_tracking_cats:lower();&lt;br /&gt;
    if inArray(no_tracking_cats, {&amp;quot;&amp;quot;, &amp;quot;no&amp;quot;, &amp;quot;false&amp;quot;, &amp;quot;n&amp;quot;}) then&lt;br /&gt;
        for _, v in ipairs( z.error_categories ) do&lt;br /&gt;
            text = text .. &#039;[[Category:&#039; .. v ..&#039;]]&#039;;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	-- [[:mw:Help:Reference Previews]]&lt;br /&gt;
	-- [[:mw:WMDE Technical Wishes/ReferencePreviews]]&lt;br /&gt;
	local citeClassMap = {&lt;br /&gt;
		[&amp;quot;libro&amp;quot;] 			= &amp;quot;book&amp;quot;,&lt;br /&gt;
		[&amp;quot;publicación&amp;quot;] 	= &amp;quot;journal&amp;quot;,&lt;br /&gt;
		[&amp;quot;noticia&amp;quot;] 		= &amp;quot;news&amp;quot;,&lt;br /&gt;
		[&amp;quot;web&amp;quot;] 			= &amp;quot;web&amp;quot;,&lt;br /&gt;
		[&amp;quot;nota&amp;quot;] 			= &amp;quot;note&amp;quot;,&lt;br /&gt;
			-- NOTE: there is no way to detect &#039;&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039; outside of the cite&lt;br /&gt;
			-- -- [[:mw:WMDE_Technical_Wishes/ReferencePreviews#What_do_I_do_when_the_footnote_in_the_popup_isn&#039;t_a_reference_but_a_note?]]&lt;br /&gt;
		[&amp;quot;#default&amp;quot;] 		= &amp;quot;citation&amp;quot;&lt;br /&gt;
			-- -- &amp;quot;conferencia&amp;quot;, &amp;quot;enciclopedia&amp;quot;, &amp;quot;entrevista&amp;quot;, &amp;quot;episode&amp;quot;, &amp;quot;map&amp;quot;,&lt;br /&gt;
			-- -- &amp;quot;notas de DVD&amp;quot;, &amp;quot;podcast&amp;quot;, &amp;quot;pressrelease&amp;quot;, &amp;quot;speech&amp;quot;, &amp;quot;techreport&amp;quot;, &amp;quot;tesis&amp;quot;, ...&lt;br /&gt;
	}&lt;br /&gt;
	if citeClassMap[ config.ClaseCita ] then -- nevermind, ignore detault&lt;br /&gt;
		text = &#039;&amp;lt;cite class=&amp;quot;&#039; .. (citeClassMap[ config.ClaseCita ] or config.ClaseCita[ &amp;quot;#default&amp;quot; ]) .. &#039;&amp;quot;&amp;gt;&amp;lt;/cite&amp;gt;&#039; .. text;&lt;br /&gt;
			-- not wrapped because of default italics style for cite&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- This is used by templates such as {{cite book}} to create the actual citation text.&lt;br /&gt;
function z.cita(frame)&lt;br /&gt;
    local pframe = frame:getParent()&lt;br /&gt;
    &lt;br /&gt;
    if nil ~= string.find( frame:getTitle(), &#039;sandbox&#039;, 1, true ) then				-- did the {{#invoke:}} use sandbox version?&lt;br /&gt;
    	cfg       = mw.loadData(&#039;Módulo:Citas/Configuración/pruebas&#039; );	-- load sandbox versions of Configuration and Whitelist and ...&lt;br /&gt;
    	whitelist = mw.loadData(&#039;Módulo:Citas/Whitelist/pruebas&#039; );&lt;br /&gt;
    	dates     = require    (&#039;Módulo:Citas/ValidaciónFechas/pruebas&#039;).dates	-- ... sandbox version of date validation code&lt;br /&gt;
    else																	-- otherwise&lt;br /&gt;
    	cfg       = mw.loadData(&#039;Módulo:Citas/Configuración&#039; );			-- load live versions of Configuration and Whitelist and ...&lt;br /&gt;
    	whitelist = mw.loadData(&#039;Módulo:Citas/Whitelist&#039; );&lt;br /&gt;
    	dates     = require    (&#039;Módulo:Citas/ValidaciónFechas&#039;).dates		-- ... live version of date validation code&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    local args = {};&lt;br /&gt;
    &lt;br /&gt;
    local suggestions = {};&lt;br /&gt;
    local error_text, error_state;&lt;br /&gt;
&lt;br /&gt;
    local config = {};&lt;br /&gt;
    for k, v in pairs( frame.args ) do&lt;br /&gt;
        config[k] = v;&lt;br /&gt;
        args[k] = v;       &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for k, v in pairs( pframe.args ) do&lt;br /&gt;
        if v ~= &#039;&#039; then&lt;br /&gt;
            if not validate( k ) then            &lt;br /&gt;
                error_text = &amp;quot;&amp;quot;;&lt;br /&gt;
                if type( k ) ~= &#039;string&#039; then&lt;br /&gt;
                    -- Exclude empty numbered parameters&lt;br /&gt;
                    if v:match(&amp;quot;%S+&amp;quot;) ~= nil then&lt;br /&gt;
                        error_text, error_state = seterror( &#039;text_ignored&#039;, {v}, true );&lt;br /&gt;
                    end&lt;br /&gt;
                elseif validate( k:lower() ) then &lt;br /&gt;
                    error_text, error_state = seterror( &#039;parameter_ignored_suggest&#039;, {k, k:lower()}, true );&lt;br /&gt;
                else&lt;br /&gt;
&lt;br /&gt;
                    if #suggestions == 0 then&lt;br /&gt;
                        suggestions = mw.loadData( &#039;Módulo:Citas/Sugerencias&#039; );&lt;br /&gt;
                    end&lt;br /&gt;
                    if suggestions[ k:lower() ] ~= nil then&lt;br /&gt;
                        error_text, error_state = seterror( &#039;parameter_ignored_suggest&#039;, {k, suggestions[ k:lower() ]}, true );&lt;br /&gt;
                    elseif cfg.parametros_a_implementar[k:lower()] then &lt;br /&gt;
                    	error_text, error_state = seterror( &#039;parametro_por_implementar&#039;, {k}, true );&lt;br /&gt;
                    else&lt;br /&gt;
                        error_text, error_state = seterror( &#039;parameter_ignored&#039;, {k}, true );&lt;br /&gt;
                  end&lt;br /&gt;
                end                  &lt;br /&gt;
                if error_text ~= &#039;&#039; then&lt;br /&gt;
                    table.insert( z.message_tail, {error_text, error_state} );&lt;br /&gt;
                end                &lt;br /&gt;
            end&lt;br /&gt;
            args[k] = v;&lt;br /&gt;
        elseif args[k] ~= nil or (k == &#039;postscript&#039;) then&lt;br /&gt;
            args[k] = v;&lt;br /&gt;
        end        &lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    return citation0( config, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return z&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:Arguments&amp;diff=218118</id>
		<title>Módulo:Arguments</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:Arguments&amp;diff=218118"/>
		<updated>2026-02-06T19:13:50Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides easy processing of arguments passed to Scribunto from&lt;br /&gt;
-- #invoke. It is intended for use by other Lua modules, and should not be&lt;br /&gt;
-- called from #invoke directly.&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
local arguments = {}&lt;br /&gt;
&lt;br /&gt;
-- Generate four different tidyVal functions, so that we don&#039;t have to check the&lt;br /&gt;
-- options every time we call it.&lt;br /&gt;
&lt;br /&gt;
local function tidyValDefault(key, val)&lt;br /&gt;
	if type(val) == &#039;string&#039; then&lt;br /&gt;
		val = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if val == &#039;&#039; then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValTrimOnly(key, val)&lt;br /&gt;
	if type(val) == &#039;string&#039; then&lt;br /&gt;
		return val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValRemoveBlanksOnly(key, val)&lt;br /&gt;
	if type(val) == &#039;string&#039; then&lt;br /&gt;
		if val:find(&#039;%S&#039;) then&lt;br /&gt;
			return val&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValNoChange(key, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function matchesTitle(given, title)&lt;br /&gt;
	local tp = type( given )&lt;br /&gt;
	return (tp == &#039;string&#039; or tp == &#039;number&#039;) and mw.title.new( given ).prefixedText == title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local translate_mt = { __index = function(t, k) return k end }&lt;br /&gt;
&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 1, frame, &#039;table&#039;, true)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	frame = frame or {}&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up argument translation.&lt;br /&gt;
	--]]&lt;br /&gt;
	options.translate = options.translate or {}&lt;br /&gt;
	if getmetatable(options.translate) == nil then&lt;br /&gt;
		setmetatable(options.translate, translate_mt)&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate == nil then&lt;br /&gt;
		options.backtranslate = {}&lt;br /&gt;
		for k,v in pairs(options.translate) do&lt;br /&gt;
			options.backtranslate[v] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate and getmetatable(options.backtranslate) == nil then&lt;br /&gt;
		setmetatable(options.backtranslate, {&lt;br /&gt;
			__index = function(t, k)&lt;br /&gt;
				if options.translate[k] ~= k then&lt;br /&gt;
					return nil&lt;br /&gt;
				else&lt;br /&gt;
					return k&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Get the argument tables. If we were passed a valid frame object, get the&lt;br /&gt;
	-- frame arguments (fargs) and the parent frame arguments (pargs), depending&lt;br /&gt;
	-- on the options set and on the parent frame&#039;s availability. If we weren&#039;t&lt;br /&gt;
	-- passed a valid frame object, we are being called from another Lua module&lt;br /&gt;
	-- or from the debug console, so assume that we were passed a table of args&lt;br /&gt;
	-- directly, and assign it to a new variable (luaArgs).&lt;br /&gt;
	--]]&lt;br /&gt;
	local fargs, pargs, luaArgs&lt;br /&gt;
	if type(frame.args) == &#039;table&#039; and type(frame.getParent) == &#039;function&#039; then&lt;br /&gt;
		if options.wrappers then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- The wrappers option makes Module:Arguments look up arguments in&lt;br /&gt;
			-- either the frame argument table or the parent argument table, but&lt;br /&gt;
			-- not both. This means that users can use either the #invoke syntax&lt;br /&gt;
			-- or a wrapper template without the loss of performance associated&lt;br /&gt;
			-- with looking arguments up in both the frame and the parent frame.&lt;br /&gt;
			-- Module:Arguments will look up arguments in the parent frame&lt;br /&gt;
			-- if it finds the parent frame&#039;s title in options.wrapper;&lt;br /&gt;
			-- otherwise it will look up arguments in the frame object passed&lt;br /&gt;
			-- to getArgs.&lt;br /&gt;
			--]]&lt;br /&gt;
			local parent = frame:getParent()&lt;br /&gt;
			if not parent then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			else&lt;br /&gt;
				local title = parent:getTitle():gsub(&#039;/sandbox$&#039;, &#039;&#039;)&lt;br /&gt;
				local found = false&lt;br /&gt;
				if matchesTitle(options.wrappers, title) then&lt;br /&gt;
					found = true&lt;br /&gt;
				elseif type(options.wrappers) == &#039;table&#039; then&lt;br /&gt;
					for _,v in pairs(options.wrappers) do&lt;br /&gt;
						if matchesTitle(v, title) then&lt;br /&gt;
							found = true&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- We test for false specifically here so that nil (the default) acts like true.&lt;br /&gt;
				if found or options.frameOnly == false then&lt;br /&gt;
					pargs = parent.args&lt;br /&gt;
				end&lt;br /&gt;
				if not found or options.parentOnly == false then&lt;br /&gt;
					fargs = frame.args&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- options.wrapper isn&#039;t set, so check the other options.&lt;br /&gt;
			if not options.parentOnly then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			end&lt;br /&gt;
			if not options.frameOnly then&lt;br /&gt;
				local parent = frame:getParent()&lt;br /&gt;
				pargs = parent and parent.args or nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.parentFirst then&lt;br /&gt;
			fargs, pargs = pargs, fargs&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		luaArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the order of precedence of the argument tables. If the variables are&lt;br /&gt;
	-- nil, nothing will be added to the table, which is how we avoid clashes&lt;br /&gt;
	-- between the frame/parent args and the Lua args.&lt;br /&gt;
	local argTables = {fargs}&lt;br /&gt;
	argTables[#argTables + 1] = pargs&lt;br /&gt;
	argTables[#argTables + 1] = luaArgs&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generate the tidyVal function. If it has been specified by the user, we&lt;br /&gt;
	-- use that; if not, we choose one of four functions depending on the&lt;br /&gt;
	-- options chosen. This is so that we don&#039;t have to call the options table&lt;br /&gt;
	-- every time the function is called.&lt;br /&gt;
	--]]&lt;br /&gt;
	local tidyVal = options.valueFunc&lt;br /&gt;
	if tidyVal then&lt;br /&gt;
		if type(tidyVal) ~= &#039;function&#039; then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option &#039;valueFunc&#039;&amp;quot;&lt;br /&gt;
					.. &#039;(function expected, got &#039;&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. &#039;)&#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif options.trim ~= false then&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValDefault&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValTrimOnly&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValRemoveBlanksOnly&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValNoChange&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up the args, metaArgs and nilArgs tables. args will be the one&lt;br /&gt;
	-- accessed from functions, and metaArgs will hold the actual arguments. Nil&lt;br /&gt;
	-- arguments are memoized in nilArgs, and the metatable connects all of them&lt;br /&gt;
	-- together.&lt;br /&gt;
	--]]&lt;br /&gt;
	local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}&lt;br /&gt;
	setmetatable(args, metatable)&lt;br /&gt;
&lt;br /&gt;
	local function mergeArgs(tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table. If a value is already present it is not overwritten;&lt;br /&gt;
		-- tables listed earlier have precedence. We are also memoizing nil&lt;br /&gt;
		-- values, which can be overwritten if they are &#039;s&#039; (soft).&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in pairs(t) do&lt;br /&gt;
				if metaArgs[key] == nil and nilArgs[key] ~= &#039;h&#039; then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = &#039;s&#039;&lt;br /&gt;
					else&lt;br /&gt;
						metaArgs[key] = tidiedVal&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
	-- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
	-- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
	-- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
	-- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
	-- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
	-- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
	-- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
	-- the arguments will already have been copied over.&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
	metatable.__index = function (t, key)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
		-- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
		-- the argument tables. When we check memoization, we need to check&lt;br /&gt;
		-- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
		-- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
		-- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
		-- This is because all the arguments will have already been copied into&lt;br /&gt;
		-- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
		-- must be nil.&lt;br /&gt;
		--]]&lt;br /&gt;
		if type(key) == &#039;string&#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		local val = metaArgs[key]&lt;br /&gt;
		if val ~= nil then&lt;br /&gt;
			return val&lt;br /&gt;
		elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		for _, argTable in ipairs(argTables) do&lt;br /&gt;
			local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
			if argTableVal ~= nil then&lt;br /&gt;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		nilArgs[key] = &#039;h&#039;&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__newindex = function (t, key, val)&lt;br /&gt;
		-- This function is called when a module tries to add a new value to the&lt;br /&gt;
		-- args table, or tries to change an existing value.&lt;br /&gt;
		if type(key) == &#039;string&#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; the table is read-only&#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
			error(&lt;br /&gt;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; overwriting existing arguments is not permitted&#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif val == nil then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- If the argument is to be overwritten with nil, we need to erase&lt;br /&gt;
			-- the value in metaArgs, so that __index, __pairs and __ipairs do&lt;br /&gt;
			-- not use a previous existing value, if present; and we also need&lt;br /&gt;
			-- to memoize the nil in nilArgs, so that the value isn&#039;t looked&lt;br /&gt;
			-- up in the argument tables if it is accessed again.&lt;br /&gt;
			--]]&lt;br /&gt;
			metaArgs[key] = nil&lt;br /&gt;
			nilArgs[key] = &#039;h&#039;&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function translatenext(invariant)&lt;br /&gt;
		local k, v = next(invariant.t, invariant.k)&lt;br /&gt;
		invariant.k = k&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return nil&lt;br /&gt;
		elseif type(k) ~= &#039;string&#039; or not options.backtranslate then&lt;br /&gt;
			return k, v&lt;br /&gt;
		else&lt;br /&gt;
			local backtranslate = options.backtranslate[k]&lt;br /&gt;
			if backtranslate == nil then&lt;br /&gt;
				-- Skip this one. This is a tail call, so this won&#039;t cause stack overflow&lt;br /&gt;
				return translatenext(invariant)&lt;br /&gt;
			else&lt;br /&gt;
				return backtranslate, v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__pairs = function ()&lt;br /&gt;
		-- Called when pairs is run on the args table.&lt;br /&gt;
		if not metatable.donePairs then&lt;br /&gt;
			mergeArgs(argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return translatenext, { t = metaArgs }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function inext(t, i)&lt;br /&gt;
		-- This uses our __index metamethod&lt;br /&gt;
		local v = t[i + 1]&lt;br /&gt;
		if v ~= nil then&lt;br /&gt;
			return i + 1, v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__ipairs = function (t)&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		return inext, t, 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arguments&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:Citas&amp;diff=218117</id>
		<title>Módulo:Citas</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:Citas&amp;diff=218117"/>
		<updated>2026-02-06T19:07:47Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: Fixing missing function cita in dummy module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return { citation = function(frame) return &amp;quot;(Cita)&amp;quot; end, cita = function(frame) return &amp;quot;(Cita)&amp;quot; end }&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=Tenerife&amp;diff=218116</id>
		<title>Tenerife</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=Tenerife&amp;diff=218116"/>
		<updated>2026-02-06T05:08:29Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha_Isla |&lt;br /&gt;
 |bandera = [[Imagen:Flag of Tenerife.jpg|25px]]&lt;br /&gt;
 |imagen = [[Imagen:Nasa world wind - teneriffa.jpg|230px|Fotografía de satélite de Tenerife]]&lt;br /&gt;
 |mapa = [[Imagen:TF Canarias.jpg|230px|Mapa de situación de la isla de Tenerife]]&lt;br /&gt;
 |archipiélago = Islas Canarias&lt;br /&gt;
 |escudo = [[Imagen:HeráldicaTenerife.jpg|40px]]&lt;br /&gt;
 |superficie= 2.034,38 km&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; &amp;lt;!--Fuente: http://www.gobiernodecanarias.org/istac/estadisticas.html--&amp;gt;&lt;br /&gt;
 |océano = Océano Atlántico&lt;br /&gt;
 |coordenadas = 28° 16′ 07″ N 16° 36′ 20″ O&lt;br /&gt;
 |altitud = 3.718 m ([[Pico del Teide]])&lt;br /&gt;
 |capital = [[Santa Cruz de Tenerife]]&lt;br /&gt;
 |gentilicio = Tinerfeño/a.&lt;br /&gt;
 |población = 838.877 (censo de 2005)&lt;br /&gt;
 |densidad = 412,4 hab./km&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
 |presidente = Ricardo Melchior&lt;br /&gt;
 |partido = CC&lt;br /&gt;
 |tipo = -&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
{{FB}}&lt;br /&gt;
&#039;&#039;&#039;Tenerife&#039;&#039;&#039; es una isla de [[Canarias]] situada en el [[Océano Atlántico]] frente a las costas africanas. Junto a [[La Palma]], [[La Gomera]] y [[El Hierro]] conforma la [[provincia de Santa Cruz de Tenerife]]. Su capital es [[Santa Cruz de Tenerife]], que además lo es también de Canarias conjuntamente con [[Las Palmas de Gran Canaria]]. Entre [[1833]] y [[1927]] Santa Cruz de Tenerife fué la capital única de Canarias, hasta que en 1927 un decreto ordenó que la capitalidad de Canarias sea compartida, que es como permanece en la actualidad.&lt;br /&gt;
[http://es.wikisource.org/wiki/Real_Decreto_de_30_de_noviembre_de_1833 &#039;&#039;Real Decreto de 30 de noviembre de 1833&#039;&#039;] &lt;br /&gt;
[http://www.gobiernodecanarias.org/tuestatuto/docs/1833-12-03%20Decreto%20de%20division%20provincial.pdf &#039;&#039;Real Decreto de 30 de noviembre de 1833&#039;&#039;]&lt;br /&gt;
Otra ciudad con gran importancia para la isla y Canarias es, [[San Cristóbal de La Laguna]] (tercera ciudad más importante del archipiélago, tras Santa Cruz de Tenerife y Las Palmas de Gran Canaria). Tenerife es un destino turístico importante en España y en el mundo.&lt;br /&gt;
&lt;br /&gt;
Tenerife, con 865.070 habitantes (casi un millón de habitantes), es la isla más poblada de Canarias y de [[España]]. Es además la isla canaria que más municipios posee en su territorio, 31 en total. Tiene el Área Metropolitana más grande y extensa del Archipiélago Canario con 366,85 kilómetros cuadrados ([[Área metropolitana de Santa Cruz de Tenerife-La Laguna]]). Por lo tanto, es también el área metropolitana más grande de la [[Unión Europea]] fuera de [[Europa]] (como región periférica).&lt;br /&gt;
&lt;br /&gt;
En Tenerife además se encuentra la mayor elevación de España, de las islas atlánticas y tercer volcán más grande del mundo desde su base, El [[Teide]], declarado también [[Patrimonio de la Humanidad]]. &lt;br /&gt;
[http://www.webtenerife.com/PortalTenerife/Home/Disfruta+sin+perderte+nada/Mas+sobre+Tenerife/Naturaleza/Espacios+naturales/Parque+Nacional+de+El+Teide/?Lang=es Parque nacional del Teide: web oficial de Turismo de Tenerife]&lt;br /&gt;
&lt;br /&gt;
== Toponimia ==&lt;br /&gt;
Son diversos los nombres que las distintas culturas han atribuido a Tenerife a lo largo de la historia. Así por ejemplo, para los [[guanche]]s, la isla recibía el nombre de &#039;&#039;&#039;Achined, [[Achinet]]&#039;&#039;&#039; o &#039;&#039;&#039;Chenet&#039;&#039;&#039;, aunque en función de la bibliografía que se consulte, la nómina puede adquirir diferentes variaciones ortográficas. Los [[Antigua Roma|romanos]] se referían a ella como &#039;&#039;&#039;[[Nivaria]]&#039;&#039;&#039; (del latín &#039;&#039;nix&#039;&#039;, &#039;&#039;nivis&#039;&#039;, &#039;&#039;nieve&#039;&#039;), en clara referencia a las nieves posadas sobre el volcán conocido como el [[Teide]]. Los nombres de Achined y Nivaria todavía se utilizan en referencia a Tenerife, sobre todo en un sentido patriótico por los habitantes de la isla. En esa misma dirección apuntan algunos mapas de los siglos XIV y XV, que de manos de Bontier y Le Verrier se refieren a la isla como &#039;&#039;&#039;Isla del Infierno&#039;&#039;&#039; a razón de los procesos eruptivos de los que el volcán era protagonista. Finalmente, el propio Teide es el responsable del nombre actual de la isla, ya que fue dado por los benahoaritas (aborígenes de La Palma) según las palabras &#039;&#039;&#039;Tene&#039;&#039;&#039; (&#039;&#039;montaña&#039;&#039;) e &#039;&#039;&#039;ife&#039;&#039;&#039; (&#039;&#039;blanca&#039;&#039;). Posteriormente, la castellanización del nombre provocó que se añadiera una &amp;quot;r&amp;quot; para unir ambas palabras obteniendo como resultado Tenerife.&amp;lt;ref name=Abreu&amp;gt;{{cita libro | apellidos = Abreu Galindo | nombre = FR. J. | título = Historia de la conquista de las siete islas de Canaria | editorial = Goya | id = ISBN 978-84-400-3645-2 }}&amp;lt;/ref&amp;gt;&amp;lt;ref name=Bethencourt&amp;gt;{{cita libro | apellidos = Bethencourt Alfonso | nombre = Juan | título = Historia del pueblo guanche | editorial = Francisco Lemus Editor SL | año = 1997 | id = ISBN 978-84-87973-10-9 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Descripción==&lt;br /&gt;
Su orografía es abrupta y volcánica, producto de erupciones (la más reciente fue el Chinyero en 1909). Es la isla más poblada de Canarias y de España con 838.877 habitantes [http://www.ine.es Instituto Nacional de Estadística de España], 01-01-2005 y 2.034 [[kilómetro cuadrado|km²]] de superficie.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Panorama Teide BW.jpg|800px|thumb|center|Panorámica del circo de Las Cañadas del Teide.]]&lt;br /&gt;
&lt;br /&gt;
===Situación y extensión===&lt;br /&gt;
Tenerife es la mayor de las siete islas que componen el Archipiélago Canario; está situada entre los paralelos 28 y 29 N y los meridianos 16 y 17 O, ligeramente al Norte del Trópico de Cáncer, y ocupa una posición central entre las islas de Gran Canaria, La Gomera y La Palma.&lt;br /&gt;
&lt;br /&gt;
La isla se encuentra a algo más de 300 Kms. del continente africano y a unos 1.000 Kms. de la Península Ibérica&lt;br /&gt;
&lt;br /&gt;
Tiene 2.034 km² de superficie y una curiosa forma triangular, alzándose en su centro el gigantesco [[Pico del Teide]], que con sus 3.718 metros de altura es el punto más elevado de toda el Estado Español.&lt;br /&gt;
&lt;br /&gt;
Para referirse a sus habitantes se utiliza el gentilicio &#039;&#039;&#039;Tinerfeño&#039;&#039;&#039;. Otro gentilicio utilizado, generalmente por personas de otras islas, es el de &#039;&#039;&#039;chicharrero&#039;&#039;&#039;, el cual en principio iba referido sólo a los habitantes de Santa Cruz de Tenerife, capital de la isla, y teniendo una cierta carga despectiva en su origen.&lt;br /&gt;
&lt;br /&gt;
=== Origen y formación ===&lt;br /&gt;
[[Imagen:Formación Tenerife.jpg|thumb|180px|right|Esquema general de la formación de Tenerife.]]&lt;br /&gt;
Tenerife es una isla de origen volcánico, cuya formación comenzó a gestarse en el fondo oceánico hace unos 20-50 millones de años (m.a.).&lt;br /&gt;
&lt;br /&gt;
Según una de las teorías más aceptadas actualmente por la comunidad científica (&#039;&#039;&#039;Teoría de los bloques levantados&#039;&#039;&#039;), el ascenso de [[magma]] procedente del manto terrestre se produce en periodos de actividad [[tectónica de placas|tectónica]] a partir de fallas o fracturas que existen en el [[placa oceánica|fondo oceánico]]. Éstas siguen los ejes estructurales de la isla, y se conformaron durante la orogenia [[Alpes|Alpina]] de la [[Era Terciaria]] por el movimiento de la [[placa Africana]]. Estas erupciones de tipo fisural submarino originan las denominadas [[lava#lava almohadillada|lavas almohadilladas o pillow-lavas]], que se producen por el rápido enfriamiento que experimenta el magma al establecer contacto con el agua, obteniendo así una forma muy característica. Estos materiales se fueron acumulando y construyendo el edificio insular bajo el mar. A medida que éste se aproximaba a la superficie, los gases, debido a la disminución de la presión circundante, se iban liberando del magma y los episodios vulcanológicos pasaban de ser tranquilos a tener un carácter marcadamente explosivo, formando materiales fragmentarios.&lt;br /&gt;
&lt;br /&gt;
Tras largo tiempo de acumulación de materiales, el nacimiento de la isla se produjo a finales del [[Mioceno]] (Era Terciaria). Hace siete millones de años emergieron las zonas de [[Macizo de Teno|Teno]], [[Macizo de Anaga|Anaga]] y Macizo de Adeje, en la que se denomina &#039;&#039;Serie Basáltica Antigua&#039;&#039; o &#039;&#039;Serie I&#039;&#039;. Se constituyeron de este modo tres islas cronológica y estratigráficamente distintas en los extremos oeste, este y sur de la actual Tenerife.&lt;br /&gt;
[http://www.puntoinfo.idecnet.com/index.php?sectionID=2&amp;amp;lang=1&amp;amp;s=1&amp;amp;ID=160 Información del Cabildo de Tenerife]&lt;br /&gt;
&lt;br /&gt;
Hace aproximadamente 3 m.a. comienza un segundo ciclo volcánico (&#039;&#039;Formaciones Postmiocenas&#039;&#039; o &#039;&#039;Series Recientes II, III y IV&#039;&#039;), mucho más intenso, que incorpora elementos en la zona central de la isla, la cual también emerge y unifica en uno sólo a los tres edificios anteriormente descritos. La estructura conformada en ese momento recibe el nombre de &#039;&#039;Edificio pre-Cañadas&#039;&#039;, sobre cuyos restos se erigiría más tarde el &#039;&#039;Edificio Cañadas I&#039;&#039;. Este ultimó experimentó diversos colapsos y emitió una gran variedad de materiales explosivos que dieron lugar a las llamadas &#039;&#039;Bandas del sur&#039;&#039; (sur-sureste actual).&lt;br /&gt;
[http://www.gevic.net/info/contenidos/mostrar_contenidos.php?idcat=36&amp;amp;idcap=58&amp;amp;idcon=330 Gran Enciclopedia Virtual Interactiva de Canarias]&lt;br /&gt;
&lt;br /&gt;
Posteriormente, sobre las ruinas de este complejo surgiría el &#039;&#039;Edificio Cañadas II&#039;&#039;, ya por encima de los 2.500 metros, también con intensos procesos explosivos. Hace alrededor de 1 m.a. se inició la construcción de la &#039;&#039;Cordillera Dorsal&#039;&#039;, con un vulcanismo de tipo fisural, a partir de los restos de los edificios ya parcialmente desmantelados de la &#039;&#039;Serie I&#039;&#039;. La &#039;&#039;Cordillera Dorsal&#039;&#039; es la de mayor desarrollo altitudinal y longitudinal del Archipiélago Canario, con 1.600 metros de altura y 25 kilómetros de longitud. En este mismo espacio cronológico (hace 800.000 años) tienen lugar dos deslizamientos gravitacionales que motivaron la aparición de los valles de [[Valle de La Orotava|La Orotava]] y [[Valle de Güímar|Güímar]].&lt;br /&gt;
&lt;br /&gt;
Finalmente, ya en tiempos más próximos (200.000 años), comienzan las erupciones que levantarían el &#039;&#039;Edificio Pico Viejo-Teide&#039;&#039; en el centro de la isla, sobre la &#039;&#039;[[Caldera de Las Cañadas]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Orografía y paisaje ===&lt;br /&gt;
La abrupta orografía isleña y su variedad de climas dan como resultado un territorio de múltiples paisajes y formas, desde el [[Parque nacional del Teide|Parque Nacional del Teide]] con su amalgama de colores fruto de las sucesivas erupciones volcánicas, hasta los [[Acantilados de Los Gigantes]] con sus paredes verticales, pasando por zonas semidesérticas con plantas resistentes a la sequedad en el sur, o por ambientes de carácter meramente volcánico como es el [[Malpaís de Güímar]].&lt;br /&gt;
&lt;br /&gt;
También cuenta con playas naturales como la de [[El Médano]], con parajes protegidos en su entorno como Montaña Roja y Montaña Pelada, valles con cultivos tropicales y subtropicales, boscosos parajes de [[laurisilva]] en los macizos de [[Macizo de Anaga|Anaga]] y [[Macizo de Teno|Teno]] -con profundos y escarpados barrancos- y extensos bosques de pinos por encima de esta última formación vegetal.&lt;br /&gt;
&lt;br /&gt;
==== Macizos ====&lt;br /&gt;
[[Imagen:Anaga 2006.jpg|thumb|left|250px|Panorámica del Macizo de Anaga.]]&lt;br /&gt;
El &#039;&#039;&#039;macizo de [[Anaga]]&#039;&#039;&#039;, en el extremo nororiental de la isla, posee un perfil topográfico irregular y escabroso donde a pesar de no presentar grandes cotas, destaca el Pico del Inglés con 1.024 metros. Debido a la antigüedad de sus materiales (5,7 m. a.), a sus profundos procesos erosivos y a la densa red de diques que atraviesan el macizo, son numerosos los roques que aparecen en superficie, tanto de etiología fonolítica como traquítica. Existe una gran cantidad de barrancos escarpados y muy encajados en el terreno. En la costa de Anaga predominan los acantilados, por lo que existe un número escaso de playas, aún así, las que hay suelen coincidir con zonas de desembocadura de barrancos, algunas de rocas y otras de arena negra.&lt;br /&gt;
&lt;br /&gt;
El &#039;&#039;&#039;macizo de Teno&#039;&#039;&#039; se encuentra en el extremo noroccidental. Al igual que en Anaga, se trata de una zona de estructuras desmanteladas y hondos barrancos que se han originado por erosión. Sin embargo, aquí los materiales son más antiguos (aproximadamente 7,4 m. a.). Destacan la Montaña de Gala que con 1.342 metros representa la mayor altitud. El paisaje más singular de este Macizo se encuentra en su costa sur. Se trata de los Acantilados de Los Gigantes, con paredes verticales que llegan a alcanzar en algunos puntos los 500 metros de altura.&lt;br /&gt;
&lt;br /&gt;
El &#039;&#039;&#039;macizo de Adeje&#039;&#039;&#039; se sitúa en el extremo meridional de la isla, teniendo como mayor exponente al Roque del Conde, con 1.001 metros de altitud. El macizo no es tan apreciable por su reducida estructura inicial, hecho que añadido a la historia geológica del lugar ha potenciado un intenso desmantelamiento de sus materiales, perdiendo de ese modo su aspecto y envergadura original.&lt;br /&gt;
&lt;br /&gt;
==== Dorsales ====&lt;br /&gt;
La &#039;&#039;&#039;Cordillera dorsal o dorsal de Pedro Gil&#039;&#039;&#039; abarca desde el principio del monte de La Esperanza, a unos 750 metros de altitud aproximadamente, hasta la zona central de la isla, en las inmediaciones de la Caldera de Las Cañadas, siendo Izaña, su punto más alto, con 2.350 metros sobre el nivel del mar. Esta estructura se ha constituido a expensas de un vulcanismo fisural de tipo basáltico a través de uno de los ejes o directrices estructurales que han dado origen al vulcanismo de la isla.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La &#039;&#039;&#039;dorsal de Abeque&#039;&#039;&#039; se encuentra formada por una cadena de volcanes que unen el macizo de Teno con el edificio central insular Teide-Pico Viejo a partir de otro de los tres ejes o directrices estructurales de Tenerife. A esta dorsal pertenece el volcán histórico de Chinyero cuya última erupción se registró en 1909.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La &#039;&#039;&#039;dorsal Sur o dorsal de Adeje&#039;&#039;&#039; está al amparo del último de los ejes estructurales. Destacan los restos de su macizo como formación primigenia, así como las alineaciones de pequeños conos volcánicos y de roques esparcidos por toda esta zona del sur tinerfeño.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Edificio central ====&lt;br /&gt;
[[Imagen:Teide Tenerife4.jpeg|thumb|250px|right|Roque Cinchado y El Teide.]]&lt;br /&gt;
Las principales estructuras de Tenerife descritas en las líneas anteriores se ven culminadas en el edificio central, con el complejo Teide-Pico Viejo y el circo de Las Cañadas. Se trata de una semicaldera de 130 kilómetros cuadrados, que ha sido originada por un conjunto de procesos geológicos explicados en el epígrafe &#039;&#039;Origen y formación&#039;&#039;. El circo está parcialmente ocupado por el estratovolcán Teide-Pico Viejo y completado por los materiales que ha emitido en sus diferentes erupciones. Destacan en su interior los [[Roques de García]], entre los que está el más conocido, el Roque Cinchado. Otra formación llamativa son Los Azulejos, compuesto por fonolitas de colores verdosos que se han creado por actividad hidrotermal.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al sur de La Caldera destaca la [[Montaña de Guajara]], que con 2.718 metros es la de mayor altitud de las que constituyen el anfiteatro de Las Cañadas del Teide. Al pie de estas paredes se han creado [[cuenca endorreica|llanos endorreicos]] de materiales sedimentarios muy finos, siendo el más conocido el [[Llano de Ucanca]].&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El Pico del [[Teide]], con 3.718 metros sobre el nivel del mar y más de 7.000 sobre el fondo oceánico, es el punto más elevado de la isla, del territorio español y de todas las tierras emergidas del Atlántico. Este volcán, el tercero más grande del planeta,&amp;lt;ref&amp;gt;[http://www.csic.es/estudios_geol/archivo/vol5914/EGv59p015029dncwio.pdf Estudio geológico sobre el Teide del CSIC]&amp;lt;/ref&amp;gt; es el símbolo de Tenerife por antonomasia. Su situación central, sus importantes dimensiones, su silueta y su paisaje nevado lo dotan de una singular personalidad. Ya los aborígenes lo consideraban lugar de culto y adoración.&lt;br /&gt;
&lt;br /&gt;
Desde 1954, el Teide y todo el circo de su alrededor (aunque hubo una ampliación posterior de sus límites) está declarado como parque nacional. Además, desde junio de 2007 está incluido por la [[UNESCO]] dentro de los espacios [[Patrimonio de la Humanidad]] como bien natural.&amp;lt;ref&amp;gt;[http://whc.unesco.org/en/list/1258 Página web oficial de la UNESCO (en inglés)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Al oeste se encuentra el volcán Pico Viejo,. En un lateral de éste, se encuentra el Volcán de Chahorra o Narices del Teide, donde se produjo la última erupción que se ha dado en el entorno del Teide, en 1798.&lt;br /&gt;
&lt;br /&gt;
==== Valles ====&lt;br /&gt;
[[Imagen:Orotavatal.jpg|500px|thumb|left|Panorámica del Valle de La Orotava con el Teide al fondo.]]Los [[valle]]s son otra de las formas de relieve más destacadas. Los más importantes son el [[Valle de La Orotava]] y el [[Valle de Güímar]] que se han generado por el deslizamiento en masa de grandes cantidades de materiales hacia el mar, creando una hondonada en el terreno.&lt;br /&gt;
Existen otros valles que se distribuyen por diversos enclaves de la geografía de Tenerife, aunque, en este caso, de diferente naturaleza. Suelen ser valles intercolinares que se han conformado tras el depósito de mayor cantidad de materiales geológicos en lomas laterales, o simplemente cauces amplios de determinados barrancos que en su evolución han tomado el aspecto de típicos valles.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Barrancos ====&lt;br /&gt;
Tenerife, debido principalmente a su gran altitud y a su silueta en semejanza a un tejado de dos aguas, está surcada por gran cantidad de [[barranco]]s. Éstos constituyen uno de los elementos más característicos de su paisaje, originados por la erosión ejercida por la escorrentía superficial a lo largo de la historia. Destacan los barrancos de Ruiz, Fasnia y Güímar, Infierno y Erques, todos ellos declarados espacios naturales protegidos por las instituciones canarias.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
[[Imagen:Tenerife88.jpg|thumb|right|250px|Montaña Roja al fondo, Playa de La Tejita.]]&lt;br /&gt;
&lt;br /&gt;
==== Costas ====&lt;br /&gt;
Las costas son, a grosso modo, accidentadas y abruptas, aunque lo son más en la zona norte que en la sur. No obstante 67,14 kilómetros de la costa tinerfeña lo representan playas, sólo superada en este aspecto por la isla de [[Fuerteventura]].&amp;lt;ref&amp;gt;[http://www.gobiernodecanarias.org/istac/estadisticas/php/saltarA.php?mid=/istac/estadisticas/territorio_ambiente/area_01_frame.html Estadísticas del Gobierno de Canarias]&amp;lt;/ref&amp;gt;En el litoral septentrional son frecuentes las playas de cantos rodados o de arena negra, mientras que en la vertiente sur y suroeste de la isla predominan las playas con arenas más finas y de tonalidades más claras.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flora y Fauna===&lt;br /&gt;
La isla de Tenerife disfruta de una [[diversidad ecológica]] pese a su reducida superficie, que es consecuencia de unas condiciones ambientales especiales, ya que la accidentada orografía reinante modifica localmente las condiciones climáticas generales, originando una exquisita variedad de [[microclima|microclimas]]. Esta vasta existencia de microclimas y, por lo tanto, de hábitats naturales, se hace manifiesta en la vegetación insular, constituida por una flora rica y variada (1400 especies de plantas superiores), entre las que destacan numerosos [[endemismo|endemismos]] canarios (200) y tinerfeños (140). Al concentrar este patrimonio vegetal de unas 140 especies exclusivas,  la isla de Tenerife muestra la mayor relación de endemismos florísticos de la denominada [[Macaronesia]]. Además, la diferente composición química de los diversos materiales volcánicos que han construído el edificio insular, siempre bajo la acción combinada de los factores climáticos, dan lugar a una gran diversidad de suelos. La conjunción de estos agentes determina la presencia de múltiples hábitats que albergan numerosas comunidades de plantas y animales que constituyen los singulares [[ecosistemas]] de Tenerife. Antes de la llegada de los aborígenes, Canarias y en especial Tenerife estaba habitada por animales endémicos prehistóricos, la mayoria extintos como por ejemplo; los lagartos gigantes ([[Lacerta goliath]] y [[Lacerta maxima]]), o la rata gigante ([[Canariomys bravoi]]). &amp;lt;ref&amp;gt;http://www.gobiernodecanarias.org/cmayot/medioambiente/lagartodelagomera/gatos.html Según la Página Web del Gobierno de Canarias&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El estudio de la flora y la fauna tinerfeña puede realizarse de un modo más ordenado si es clasificada según los diferentes pisos ecológicos en los que se divide el terreno de la isla. Dicha división atiende especialmente a la orientación norte o sur de las vertientes de la isla y por supuesto a la altitud: &lt;br /&gt;
*&#039;&#039;&#039;Cardonal - Tabaibal:&#039;&#039;&#039; 0 – 700 m: este estrato se caracteriza por una fuerte insolación y escasez de precipitaciones. En él destacan como especies vegetales las [[Euphorbia atropurpurea|tabaibas]], los cardones y cardoncillos, bejeques,...En cuanto a la fauna, son pobres las especies animales vertebradas en este ecosistema. Si acaso, algunas aves o reptiles. En cambio los insectos se encuentran muy bien representados.&lt;br /&gt;
*&#039;&#039;&#039;Bosques Termófilos:&#039;&#039;&#039; 200 - 600 m: este piso posee mayor grado de humedad y precipitaciones, y una menor insolación. Son importantes, dentro de las especies arbóreas las palmeras,  las sabinas, los acebuches y una serie de endemismos como peralillos, guaidiles, españeros, malvas de risco y cinerarias. En relación con la fauna es preciso citar a la mariposa vanessa vulcania y aves insectívoras como la curruca cabecinegra y el capirote.&lt;br /&gt;
[[Image:Eidechsen Teide.jpg|thumb|left|230px|Gallotia Galloti, especie endémica de Tenerife]]&lt;br /&gt;
*&#039;&#039;&#039;Laurisilva:&#039;&#039;&#039; 500 - 1.000 m: se trata de un [[bosque]] denso de grandes árboles, herederos de la flora de la [[Era Terciaria]], que crecen en zonas de abundantes nieblas y lluvias frecuentes. Las especies vegetales superiores que abundan son laureles, tilos, viñátigos, barbusanos, y otras de menor tamaño como el [[canarina canariensis|bicácaro]], la cresta de gallo, la corregüela y una gran variedad de helechos. Con respecto a la fauna, la [[laurisilva]] es el estrato más rico en invertebrados y con mayor porcentaje de endemismos, entre los que se encuentran lombrices, moluscos y sobre todo artrópodos. Dentro de la fauna vertebrada hay que mencionar algunas especies de murciélagos y dos aves endémicas en peligro de extinción como son las palomas turqué y rabiche.&lt;br /&gt;
[[Imagen:Tajinaste rojo.jpg|thumb|right|260px|Tajinaste rojo]]&lt;br /&gt;
*&#039;&#039;&#039;Fayal-Brezal:&#039;&#039;&#039; 1.000 – 1.500 m: se trata también de un bosque, pero en este caso más seco y pobre en especies. Destacan florísticamente las fayas, brezos, acebiños,...También abundan diferentes especies de setas que pueden ser tanto comestibles como muy venenosas.&lt;br /&gt;
*&#039;&#039;&#039;Pinar:&#039;&#039;&#039; 800 - 2.000 m: bosque de pinos en formación abierta que se caracteriza por un aumento de la insolación y por una menor uniformidad en las temperaturas diurnas-nocturnas y estacionales. Sobresale por encima de cualquier otra especie el [[pino canario]]. La fauna es poco diversa, pero existen dos aves endémicas de singular belleza como el pinzón azul y el pico picapinos.&lt;br /&gt;
*&#039;&#039;&#039;Alta montaña:&#039;&#039;&#039; por encima de 2.000 m: posee un clima seco, una insolación muy alta y temperaturas extremas. A pesar de estas exigentes condiciones, crecen endemismos vegetales de gran importancia científica y belleza como [[tajinaste|tajinastes]], retamas, codesos,  violeta del Teide,...y especies animales principalmente invertebradas como escarabajos, chinches, y mariposas.&lt;br /&gt;
Aún faltaría hablar de la extensa fauna marina de entre la que destacan viejas, meros, abades, salemas, samas, pargos,...Gran interés tienen también la tortuga boba y las colonias permanentes de ballenas y delfines que habitan el litoral sur de la isla.&lt;br /&gt;
Tenerife posee un inventario faunístico que asciende a 56 especies de aves, 13 de mamíferos terrestres, 5 de reptiles, varios miles de invertebrados, 2 de anfibios y 400 de peces además de algunas especies de tortugas marinas y cetáceos.&lt;br /&gt;
&lt;br /&gt;
=== Espacios naturales protegidos ===&lt;br /&gt;
[[Imagen:Espacios_protegidos_Tenerife.jpg|thumb|right|250px|Mapa de clasificación de los espacios protegidos.]]&lt;br /&gt;
Prácticamente la mitad de la isla (48,6%),&amp;lt;ref&amp;gt;[http://www.gobiernodecanarias.org/educacion/culturacanaria/espacios/espanat.htm#tenerife La protección de los espacios naturales en Canarias (Gobierno de Canarias)]&amp;lt;/ref&amp;gt; se encuentra bajo las diferentes fórmulas de protección que atribuyen la [[Red Canaria de Espacios Naturales Protegidos]]. De los 146 espacios naturales recogidos por la citada red en el conjunto del archipiélago,&amp;lt;ref&amp;gt;[http://www.gobcan.es/cmayot/espaciosnaturales/informacion/quees.html Red Canaria de Espacios Naturales Protegidos]&amp;lt;/ref&amp;gt; un total de 43 se encuentran en Tenerife, siendo de este modo la isla que mayor número de espacios posee.&amp;lt;ref&amp;gt;[http://www.gobcan.es/cmayot/espaciosnaturales/informacion/tf_todo.html Relación de los Espacios Naturales protegidos de Tenerife]&amp;lt;/ref&amp;gt; Asimismo, atendiendo al porcentaje de territorio protegido con el que cada isla contribuye al total del archipiélago, hay que destacar que es Tenerife con un 37% la isla que encabeza la tabla.&amp;lt;ref&amp;gt;[http://www.gobcan.es/cmayot/espaciosnaturales/tabla.html Superficie y número de espacios naturales protegidos, por islas, en Canarias]&amp;lt;/ref&amp;gt; La Red contempla hasta ocho categorías de protección distintas, todas ellas representadas en la isla: aparte del parque nacional del Teide, cuenta con el mayor parque natural de Canarias ([[Corona Forestal]]), dos parques rurales (Anaga y Teno), cuatro reservas naturales integrales, seis reservas naturales especiales, un total de catorce monumentos naturales, nueve paisajes protegidos y hasta seis sitios de interés científico. &lt;br /&gt;
El municipio de La Orotava, en gran parte a expensas del [[Parque Nacional del Teide]], y el de Santa Cruz de Tenerife que hace lo propio con el [[Parque rural de Anaga]] presentan, respectivamente, el 76% y el 74% de su extensión bajo protección. De la misma forma, el emplazamiento mayoritario del [[Parque rural de Teno]] al amparo del municipio de Buenavista del Norte hace que este disponga de una importante parte de su superficie protegida.&lt;br /&gt;
&lt;br /&gt;
===Clima===&lt;br /&gt;
A Tenerife se la conoce internacionalmente como la &amp;quot;Isla de la Eterna Primavera&amp;quot;. La atribución de esta denominación climática se produce en gran medida  gracias a los &#039;&#039;&#039;[[vientos alisios]]&#039;&#039;&#039;, cuya humedad, principalmente, se condensa en las zonas de [[Zona de medianías (Canarias)|medianías]] del norte y nordeste insular, constituyendo amplios mares de nubes que se disponen preferentemente entre los 600 y 1.800 metros de altura; otro factor que influye en la suavidad del clima de las Islas con respecto al que por latitud correspondería (Desierto del Sahara), es la &#039;&#039;&#039;[[corriente marina fría de Canarias]]&#039;&#039;&#039;, que enfría la temperatura de las aguas que bañan las costas y playas isleñas con respecto a la ambiental. Por último, la propia &#039;&#039;&#039;orografía tinerfeña&#039;&#039;&#039; también habría que tenerla en cuenta en esta terna de agentes encargados de hacer realidad el anteriormente citado eslogan. &lt;br /&gt;
&lt;br /&gt;
[[Imagen:Mar de nubes, Tenerife.jpg|thumb|left|250px|Mar de nubes en la Isla de Tenerife, visto desde unos 1800 metros de altitud.]]&lt;br /&gt;
&lt;br /&gt;
A grandes rasgos, el clima de Tenerife es moderado, templado y muy suave en cualquier estación del año. No hay períodos de frío pero tampoco los hay de calor asfixiante. Las temperaturas medias fluctúan entre los 17-18 ºC en invierno y los 24-25 ºC en la estación estival, aunque estos sean valores relativos y generales. Evidentemente se producen importantes contrastes, como el que se produce durante los meses de invierno, en los cuales es posible disfrutar del sol en zonas de costa y, sin embargo, 3.000 metros por encima poder contemplar la blanca estampa nevada del [[Teide]], lugar en el que nieva todos los años.&lt;br /&gt;
&lt;br /&gt;
[[Image:Masca Road.jpg|thumb|250px|right|Masca]]&lt;br /&gt;
Otro ejemplo de contraste climático lo encontraríamos en la ciudad de [[Santa Cruz de Tenerife|Santa Cruz]] con respecto a la ciudad de [[San Cristóbal de La Laguna|La Laguna]]. Municipios unidos físicamente pero distanciados en cuanto a condiciones climáticas. Generalmente Santa Cruz tiene durante todo el año un clima cálido con temperaturas sensiblemente superiores a las que se disfrutan en la aledaña La Laguna, donde frecuentemente hace más frío y existe mayor probabilidad de precipitaciones.&lt;br /&gt;
&lt;br /&gt;
El norte y el sur de Tenerife poseen igualmente diferentes características climáticas. En barlovento se registra un 73% de las precipitaciones totales además, la humedad relativa del aire es superior y la insolación inferior. Los máximos pluviométricos se registran en barlovento a una altitud media entre 1.000-1.200 m, casi exclusivamente en los montes de [[La Orotava]]. Pero quizás sea más significativo que todo el norte de la isla carezca de un espacio en el que la pluviosidad media sea inferior a los 250 mm anuales. En cambio, en la vertiente sur de la isla los valores pluviales son significativamente menores. Los únicos reductos sureños que se salvan de esta situación son [[Masca (Tenerife)|Masca]] y [[Güímar]], probablemente debido a sus características físicas que posibilitan una mayor presencia del alisio.&lt;br /&gt;
&lt;br /&gt;
A modo de anécdota es interesante saber que los médicos europeos, sobre todo ingleses y holandeses, del pasado [[siglo XIX]] elogiaban el clima del norte de Tenerife, y lo recomendaban a sus pacientes para aliviar dolencias de la edad y del aparato circulatorio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{tablabonita}} width=&amp;quot;567&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot;&lt;br /&gt;
| height=&amp;quot;17&amp;quot; | Datos climáticos&lt;br /&gt;
!| Ene&lt;br /&gt;
!| Feb&lt;br /&gt;
!| Mar&lt;br /&gt;
!| Abr&lt;br /&gt;
!| May&lt;br /&gt;
!| Jun&lt;br /&gt;
!| Jul&lt;br /&gt;
!| Ago&lt;br /&gt;
!| Sep&lt;br /&gt;
!| Oct&lt;br /&gt;
!| Nov&lt;br /&gt;
!| Dic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; | Ø Horas de sol/Día&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color:#000080;&amp;quot; | 5,9&lt;br /&gt;
| style=&amp;quot;background: #FFCC66; color:#000080;&amp;quot; | 6,6&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 7,1&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 7,7&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 8,8&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 9,8&lt;br /&gt;
| style=&amp;quot;background: #FF9900; color:#000080;&amp;quot; | 10,6&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 9,8&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 8,5&lt;br /&gt;
| style=&amp;quot;background: #FFCC66; color:#000080;&amp;quot; | 6,9&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color:#000080;&amp;quot; | 5,9&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color:#000080;&amp;quot; | 5,5&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; height=&amp;quot;16;&amp;quot; | Aire [°C]&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC; color: black;&amp;quot; | 17,9&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC; color: black;&amp;quot; | 17,9&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 18,6&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 19,0&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 20,4&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 22,2&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 24,3&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 25,0&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 24,3&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 22,8&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 20,6&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 18,7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; | Agua [°C]&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 19&lt;br /&gt;
| style=&amp;quot;background: #0033FF; color: black;&amp;quot; | 18&lt;br /&gt;
| style=&amp;quot;background: #0033FF; color: black;&amp;quot; | 18&lt;br /&gt;
| style=&amp;quot;background: #0033FF; color: black;&amp;quot; | 18&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 19&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 20&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 21&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 22&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 23&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 23&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 21&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 20&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; | Ø Días de lluvia&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===El Agua===&lt;br /&gt;
El suelo volcánico de Tenerife, generalmente de carácter poroso y permeable es motivo para que una considerable fracción del [[agua]] procedente de la lluvia, unida a aquella producto de condensaciones en zonas boscosas y a la proveniente del deshielo de las cumbres más elevadas de la isla, se infiltre en el subsuelo. La construcción de embalses y presas como principales métodos de obtención de agua esta desaconsejada debido a las mencionadas condiciones geológicas, que no permiten el almacenamiento del preciado líquido en superficie, así como a la irregularidad de las precipitaciones. De este modo, la mayor parte del agua (90%) procede de pozos y principalmente de [[Galería filtrante|galerías]], importantes sistemas que sirven para extraer el [[recurso hídrico]] del [[acuífero]]. Tenerife dispone en la actualidad de más de un millar de galerías perforadas &amp;lt;ref&amp;gt;[http://www.aguastenerife.org/4_tfeyelagua/4_3_6.html Información del Consejo Insular de Aguas de Tenerife]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==[[Historia de Tenerife]]==&lt;br /&gt;
===Organización política anterior a la invasión===&lt;br /&gt;
El nombre original [[guanche]] de la isla era Achinet o Chenet. Unos cien años antes de la invasión, existía un [[mencey]] llamado Tinerfe el Grande, hijo del Mencey Sunta. Tinerfe tenía su corte en [[Adeje (Santa Cruz de Tenerife)|Adeje]] hasta que sus nueve hijos se rebelaron y se repartieron la isla en 9 menceyatos y 2 achimenceyatos independientes (llamados capitanías por los invasores). Los menceyatos y sus menceyes (por orden de descendencia) fueron los siguientes:&lt;br /&gt;
&lt;br /&gt;
* [[Menceyato de Taoro|Taoro]]: actualmente [[Puerto de la Cruz]], [[La Orotava]], [[La Victoria de Acentejo]], [[La Matanza de Acentejo]], [[Los Realejos]] y [[Santa Úrsula (Santa Cruz de Tenerife)|Santa Úrsula]] sus menceyes fueron Bentinerfe, Inmobach, [[Bencomo]] y Bentor.&lt;br /&gt;
* [[Menceyato de Güímar|Güímar]]: en la actualidad [[El Rosario (Santa Cruz de Tenerife)|El Rosario]], [[Candelaria (Santa Cruz de Tenerife)|Candelaria]], [[Arafo (Santa Cruz de Tenerife)|Arafo]] y [[Güímar (Santa Cruz de Tenerife)|Güímar]] y sus menceyes fueron Acaymo, Añaterve y Guetón.&lt;br /&gt;
* [[Menceyato de Abona|Abona]]: [[Fasnia (Santa Cruz de Tenerife)|Fasnia]], [[Arico]], [[Granadilla de Abona]], [[San Miguel de Abona]], [[Arona (Santa Cruz de Tenerife)|Arona]] y sus menceyes fueron Atguaxoña y Adxoña (o Adjona).&lt;br /&gt;
* [[Menceyato de Anaga|Anaga]]: [[Santa Cruz de Tenerife]] y [[San Cristóbal de La Laguna]] (la zona de la propia laguna) y sus menceyes fueron beneharo y Beneharo II.&lt;br /&gt;
* [[Menceyato de Tegueste|Tegueste]]: [[Tegueste (Santa Cruz de Tenerife)|Tegueste]] y una zona costera de [[San Cristóbal de La Laguna|La Laguna]] y sus menceyes fueron Tegueste, Tegueste II y Teguaco.&lt;br /&gt;
* [[Menceyato de Tacoronte|Tacoronte]]: [[Tacoronte (Santa Cruz de Tenerife)|Tacoronte]] y [[El Sauzal (Santa Cruz de Tenerife)|El Sauzal]] y sus menceyes fueron Rumén y Acaymo.&lt;br /&gt;
* [[Menceyato de Icode|Icode]]: [[San Juan de la Rambla]], [[La Guancha (Santa Cruz de Tenerife)|La Guancha]], [[Garachico (Santa Cruz de Tenerife)|Garachico]] e [[Icod de los Vinos]] y sus menceyes fueron Chincanayro y Pelicar.&lt;br /&gt;
* [[Menceyato de Daute|Daute]]: [[El Tanque]], [[Los Silos (Santa Cruz de Tenerife)|Los Silos]], [[Buenavista del Norte |Buenavista]] y [[Santiago del Teide]] y sus menceyes fueron Cocanaymo y Romén.&lt;br /&gt;
* [[Menceyato de Adeje|Adeje]]: [[Guía de Isora]], [[Adeje (Santa Cruz de Tenerife)|Adeje]] y [[Vilaflor (Santa Cruz de Tenerife)|Vilaflor]] y sus menceyes fueron Atbitocazpe, Pelinor, e Ichasagua.&lt;br /&gt;
&lt;br /&gt;
También se encontraba el Achimenceyato de [[Punta del Hidalgo]] gobernado por Aguahuco (el &amp;quot;Hidalgo pobre&amp;quot;, hijo ilegítimo del Gran Tinerfe) y Zebenzui.&lt;br /&gt;
&lt;br /&gt;
En cuanto a las creencias, la [[Mitología guanche|religión guanche]] era [[Politeísmo|politeísta]] aunque el culto astral estaba generalizado. Junto a él había una religiosidad [[animista]] que sacralizaba ciertos lugares, fundamentalmente roques y montañas. Entre los principales dioses guanches se podrían destacar; [[Achamán]] (dios del cielo y supremo creador), [[Chaxiraxi]] (diosa madre identificada más tarde con la [[Virgen de Candelaria]]), [[Magec]] (dios del sol) y [[Guayota]] (el demonio) entre otros muchos dioses y espíritus ancestrales. Especialmente singular era el culto a los muertos, practicándose la [[momificación]] de cadáveres.&lt;br /&gt;
&lt;br /&gt;
===Invasión===&lt;br /&gt;
Conocida por los romanos como &#039;&#039;[[Nivaria]]&#039;&#039; (del latín &#039;&#039;nix&#039;&#039;, &#039;&#039;nivis&#039;&#039;, &amp;quot;nieve&amp;quot;), en clara referencia a las nieves posadas sobre el volcán conocido como el [[Teide]]. El nombre de la isla también guarda relación con el volcán, ya que fue puesto por los [[La_Palma#Los_abor.C3.ADgenes|benehaoritas]]  (aborígenes de La Palma): &amp;quot;Tene-&amp;quot; (montaña) &amp;quot;-ife&amp;quot; (blanca), la castellanización del nombre provocó que se añadiera una -r para unir ambas palabras quedando &#039;&#039;&#039;Tenerife&#039;&#039;&#039;. Para los nativos de Tenerife, la isla era conocida como &#039;&#039;Chenech&#039;&#039;, &#039;&#039;Chinech&#039;&#039; o &#039;&#039;[[Achinech]]&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Tenerife a la hora de su inv asiónse componía de nueve &#039;&#039;menceyatos&#039;&#039;, nombre por el que se conocía a los pequeños reinos guanches. Sin embargo las fuerzas militares de la Corona de Castilla bajo el mando del Adelantado (&amp;quot;gobernador militar&amp;quot;) [[Alonso Fernández de Lugo]], sufrieron una derrota a manos de los [[guanche]]s en la primera [[Batalla de Acentejo]] en [[1494]]. Los guanches, superados por la tecnología y por las nuevas enfermedades a las cuales no eran inmunes, cayeron frente a las tropas de la [[Corona de Castilla]] el [[25 de diciembre]] de [[1495]]. &lt;br /&gt;
&lt;br /&gt;
Como en el resto de las Islas, los aborígenes fueron esclavizados y una buena parte de la población indígena sucumbió a las enfermedades importadas, al mismo tiempo que los inmigrantes provenientes de protectorados del Imperio Español (Portugal, Flandes, Italia, Alemania) se asentaban en la isla. Los bosques de [[pino canario]] de Tenerife fueron cortados para dejar paso al cultivo de la [[caña de azúcar]] en [[1520]]. En siglos sucesivos, la economía de la isla se centró en el cultivo de otras materias tales como la [[viña]] y la [[Cochinilla (insecto)|cochinilla]] para hacer los tintes, así como el [[plátano]].&lt;br /&gt;
&lt;br /&gt;
===El ataque de Horacio Nelson===&lt;br /&gt;
[[Imagen:Sir_Horatio_Nelson_when_wounded_at_Teneriffe.jpg|thumb|left|260px|Horacio Nelson cae herido durante el ataque]]&lt;br /&gt;
Tenerife fue atacada, como las otras islas, por [[Piratería en Canarias|corsarios]] de varias nacionalidades (ingleses, franceses, holandeses y berberiscos) varias veces a lo largo de su historia, según el devenir de las alianzas y guerras de España. De entre estos ataques destaca por su lugar en la Historia el [[Ataque a Santa Cruz de Tenerife|ataque de los británicos de 1797]]. El [[25 de julio]], el Almirante [[Horacio Nelson]] atacó Santa Cruz de Tenerife, capital de la isla y Jefatura de la Capitanía General. Tras un feroz ataque, la defensa organizada por el [[Antonio Gutiérrez de Otero|General Gutiérrez]] repelió a los británicos. Nelson perdió su brazo derecho por una bala de cañón (dice la leyenda que del cañón &amp;quot;Tigre&amp;quot;) mientras intentaba desembarcar en la orilla de la costa de la zona de &amp;quot;Paso Alto&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
El [[5 de septiembre]], otro intento de desembarco en la región de Puerto Santiago fue repelido por los habitantes del [[Santiago_del_Teide|Valle de Santiago del Teide]], que lanzaron piedras a los británicos desde lo alto de los Acantilados de Los Gigantes.&lt;br /&gt;
&lt;br /&gt;
===Historia reciente===&lt;br /&gt;
Otros visitantes menos hostiles llegarían a la isla en siglos sucesivos. El naturalista [[Alexander von Humboldt]] ascendió el pico del Teide y comentó la belleza de la isla. Numerosos turistas comenzaron a visitar Tenerife a partir de la década de [[1890]], especialmente las ciudades norteñas de [[Puerto de la Cruz]] (primer municipio turístico de Tenerife mediante orden ministerial del 13 de octubre de 1955 que lo declaró ’Lugar de Interés Turístico’) y Santa Cruz de Tenerife.&lt;br /&gt;
&lt;br /&gt;
En marzo de [[1936]], antes de subir al poder, [[Francisco Franco]] fue destinado a Tenerife por el Gobierno Republicano, temeroso de su influencia militar y política, con el fin de alejarlo de los centros de poder. En el Monte de La Esperanza en el municipio tinerfeño de [[El_Rosario_(Santa_Cruz_de_Tenerife)|El Rosario]], Franco organizó la conspiración militar que daría lugar a la [[Guerra civil española]] y posterior caída de la [[II República Española]]. Las Islas Canarias cayeron bajo el bando de los nacionales en julio de [[1936]] y su población sufrió las masivas ejecuciones de opositores al nuevo régimen fascista. En los años 50, la miseria de la posguerra hizo que miles de tinerfeños emigrasen a [[América latina]], principalmente a [[Cuba]] y [[Venezuela]]. &lt;br /&gt;
&lt;br /&gt;
[[Colisión_de_1977_en_Los_Rodeos|La colisión]] ocurrida el [[27 de marzo]] de [[1977]] en el [[aeropuerto de Los Rodeos]], situado en el norte de la isla, era el desastre mortal de aviación más importante de la historia hasta los [[Atentados del 11 de septiembre de 2001|atentados del 11 de septiembre de 2001]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Símbolos de la isla==&lt;br /&gt;
[[Imagen:Flag of Tenerife.jpg|left|thumb|160px|Bandera de Tenerife]]&lt;br /&gt;
[[Image:escudo_tenerife.jpg|left|thumb|160px|Escudo del Cabildo Insular de Tenerife.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;La bandera&#039;&#039;&#039; fue adoptada originariamente en 1845 a modo de distintivo o bandera de matrícula de la que en aquel entonces se denominaba provincia marítima de Canarias con base en el Puerto de Santa Cruz de Tenerife. En la actualidad, esta enseña representa a toda la isla de Tenerife. Fue aprobada a instancia del [[Cabildo Insular de Tenerife|Cabildo Insular]] por Orden del Gobierno de Canarias el 9 de mayo de 1989 y publicada el 22 de mayo de 1989 en el Boletín Oficial de Canarias. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;El escudo heráldico&#039;&#039;&#039; de Tenerife fue otorgado mediante diploma real el 23 de marzo de 1510, concedido por el Rey Don Fernando V &amp;quot;El Católico&amp;quot;, fue expedido en Madrid a nombre de su hija Doña Juana I, Reina de Castilla. El escudo se describe en campo de oro, con un San Miguel (pues la isla fue conquistada el día de San Miguel) armado superando a una montaña de su color natural de la que brotan llamas, y que representa al pico del Teide. Bajo esta montaña la isla de sinople sobre ondas azul y plata. A la derecha se observa un castillo de gules, y a la izquierda un león rampante de gules. El escudo que usa el [[Cabildo Insular de Tenerife|Cabildo Insular]] se diferencia del que usa el [[San Cristóbal de La Laguna|Ayuntamiento de La Laguna]] en el lema que aparece en la bordura y en el añadido de unas ramas de palma.&lt;br /&gt;
&lt;br /&gt;
Según una ley del [[Gobierno de Canarias]] los símbolos [[naturaleza|naturales]] de la isla son el [[pinzón azul]] y el [[dracaena draco|drago]] &amp;lt;ref&amp;gt;[http://www.gobcan.es/boc/1991/061/001.html Ley 7/1991, de 30 de abril, de símbolos de la naturaleza para las Islas Canarias]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Órgano de gobierno==&lt;br /&gt;
El órgano de gobierno de la isla de Tenerife es el [[Cabildo Insular de Tenerife]]. La organización política de Canarias se caracteriza porque no posee órgano político provincial sino que cada isla posee un cabildo insular propio. Desde que se constituyó en marzo de 1913 dispone de una amplia serie de competencias propias, hoy recogidas en el [[Estatuto de Autonomía de Canarias]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Municipios===&lt;br /&gt;
&lt;br /&gt;
[[Imagen:MapaMunicipiosTenerife.jpg|thumb|center|400px|División municipal de la isla de Tenerife]]&lt;br /&gt;
&lt;br /&gt;
La isla de Tenerife está dividida en 31 municipios.&lt;br /&gt;
&lt;br /&gt;
De todos ellos, sólo tres no tienen costa: [[Tegueste (Santa Cruz de Tenerife)|Tegueste]], [[El Tanque]] y [[Vilaflor (Santa Cruz de Tenerife)|Vilaflor]] que destaca además por ser el municipio más alto de toda [[Canarias]] al tener su capital a 1.400 metros de altitud.&lt;br /&gt;
&lt;br /&gt;
El municipio más extenso con 207,31 km² es el de [[La Orotava]], que abarca gran parte del [[Parque nacional del Teide]]. El municipio más pequeño de la isla y del archipiélago es [[Puerto de la Cruz]], con una superficie inferior a los 9 km².&lt;br /&gt;
&lt;br /&gt;
La gran mayoría de estos municipios confluyen en la zona de cumbre central de la isla y a partir de ahí se extienden hacia la costa, orientándose unos hacia el norte y otros hacia el sur.&lt;br /&gt;
&lt;br /&gt;
A su vez, es frecuente encontrar otro tipo de división insular, es aquella que establece el territorio según una Zona Metropolitana, alrededor del área de influencia de las ciudades de Santa Cruz y La Laguna (&#039;&#039;véase&#039;&#039; [[Área metropolitana de Tenerife]]), Zona Norte (aquellos municipios que se abren al océano por el norte) y Zona Sur (aquellos que lo hacen hacia el sur). Esta división junto con la municipal se puede observar en el mapa de la derecha.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la relación de todos los municipios tinerfeños ordenados alfabéticamente: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; align=&amp;quot;CENTER&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Adeje (Santa Cruz de Tenerife)|Adeje]]&lt;br /&gt;
*[[Arafo (Santa Cruz de Tenerife)|Arafo]]&lt;br /&gt;
*[[Arico]]&lt;br /&gt;
*[[Arona (Santa Cruz de Tenerife)|Arona]]&lt;br /&gt;
*[[Buenavista del Norte]]&lt;br /&gt;
*[[Candelaria (Santa Cruz de Tenerife)|Candelaria]]&lt;br /&gt;
*[[Fasnia (Santa Cruz de Tenerife)|Fasnia]]&lt;br /&gt;
*[[Garachico (Santa Cruz de Tenerife)|Garachico]]&lt;br /&gt;
*[[Granadilla de Abona]]&lt;br /&gt;
*[[La Guancha (Santa Cruz de Tenerife)|La Guancha]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Guía de Isora]]&lt;br /&gt;
*[[Güímar (Santa Cruz de Tenerife)|Güímar]]&lt;br /&gt;
*[[Icod de los Vinos]]&lt;br /&gt;
*[[La Matanza de Acentejo]]&lt;br /&gt;
*[[La Orotava]]&lt;br /&gt;
*[[Puerto de la Cruz]]&lt;br /&gt;
*[[Los Realejos]]&lt;br /&gt;
*[[El Rosario (Santa Cruz de Tenerife)|El Rosario]]&lt;br /&gt;
*[[San Cristóbal de La Laguna]]&lt;br /&gt;
*[[San Juan de la Rambla]]&lt;br /&gt;
*[[San Miguel de Abona]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Santa Cruz de Tenerife (Santa Cruz de Tenerife)|Santa Cruz de Tenerife]]&lt;br /&gt;
*[[Santa Úrsula (Santa Cruz de Tenerife)|Santa Úrsula]]&lt;br /&gt;
*[[Santiago del Teide]]&lt;br /&gt;
*[[El Sauzal (Santa Cruz de Tenerife)|El Sauzal]]&lt;br /&gt;
*[[Los Silos (Santa Cruz de Tenerife)|Los Silos]]&lt;br /&gt;
*[[Tacoronte (Santa Cruz de Tenerife)|Tacoronte]]&lt;br /&gt;
*[[El Tanque]]&lt;br /&gt;
*[[Tegueste (Santa Cruz de Tenerife)|Tegueste]]&lt;br /&gt;
*[[La Victoria de Acentejo]]&lt;br /&gt;
*[[Vilaflor (Santa Cruz de Tenerife)|Vilaflor]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Demografía ===&lt;br /&gt;
La isla de Tenerife, la más poblada del archipiélago, albergaba a fecha de 1 de enero de 2006 y según fuentes del [[Instituto Nacional de Estadística de España|INE]] un total de 852.945 habitantes censados, de los cuáles, más de un 26% (223.148 habitantes) lo estaban en su capital, [[Santa Cruz de Tenerife]], y cerca del 50% (423.022 personas)&amp;lt;ref name=&amp;quot;audes&amp;quot;&amp;gt;Datos del proyecto AUDES5[http://alarcos.inf-cr.uclm.es/per/fruiz/pobesp/] — áreas urbanas.&amp;lt;/ref&amp;gt; en su [[Área metropolitana de Santa Cruz de Tenerife-La Laguna|área metropolitana]]. A la ciudad de Santa Cruz de Tenerife le siguen en población [[San Cristóbal de La Laguna]] (142.161), [[Arona]] (69.100), [[La Orotava]] (40.644), [[Adeje]] (36.764), [[Los Realejos]] (36.746), [[Granadilla de Abona]] (34.595) y [[Puerto de la Cruz]] (30.585). Hasta ahí los municipios que sobrepasan los 30.000 habitantes. El municipio de [[Vilaflor]] es el que cuenta con menor población de toda la isla (1.905). Además, Tenerife registra un muy alto nivel de población no censada ya que el elevado número de turistas que recibe anualmente y los crecientes fenómenos migratorios lo ponen de manifiesto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gentilicio==&lt;br /&gt;
&amp;lt;!--Para referirse a sus habitantes se utiliza oficialmente el gentilicio &#039;&#039;&#039;tinerfeño&#039;&#039;&#039;, si bien el gentilicio popular es chicharrero. Chicharrero era un nombre inicialmente dedicado a los habitantes de [[Santa Cruz de Tenerife]], haciendo alusión al antiguo carácter pesquero de la ciudad, pero el paso del tiempo ha llevado a que se denomine así a todos los habitantes de la isla. Aparece como origen en los encuentros deportivos de [[Lucha Canaria]] entre las islas de Tenerife y Gran Canaria.  Los grancanarios usaban esta terminología para referirse a los tinerfeños; y éstos a los de Gran Canaria les denominaban canariones.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El gentilicio formal es &amp;quot;Tinerfeño/a&amp;quot;, aunque también de manera coloquial se utiliza el gentilicio &amp;quot;[[chicharrero|Chicharrero/a]]&amp;quot;&amp;lt;ref&amp;gt;http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=chicharrero&amp;lt;/ref&amp;gt;, aunque en la propia isla éste se reserva para los habitantes de la capital, Santa Cruz.&lt;br /&gt;
&lt;br /&gt;
El gentilicio &amp;quot;chicharrero&amp;quot; tiene su origen en un término despectivo empleado por los habitantes de la cercana ciudad de [[San Cristóbal de La Laguna|La Laguna]], entonces capital de la isla, para los habitantes del entonces pobre y pequeño puerto de pescadores. Justamente por dicha pobreza debían los habitantes de Santa Cruz rebajarse a comer [[chicharro|chicharros]], un pescado pequeño y barato de relativa baja calidad, de donde procede el término, entonces despectivo. Con el tiempo y el crecimiento de Santa Cruz, hasta conseguir el traslado de la capitalidad desde La Laguna, bajo el reinado de [[Fernando VII]] ([[siglo XIX]]), sus ciudadanos tomaron el insulto a honra y asumieron como propio el gentilicio.&lt;br /&gt;
&lt;br /&gt;
==Economía==&lt;br /&gt;
[[Image:Botanico 2005.jpg|thumb|right|250px|Jardín Botánico en Puerto de la Cruz]]La [[economía]] tinerfeña, al igual que la de otras islas de Canarias, se basa fundamentalmente en el turismo. Ya en el siglo XIX y gran parte del XX destacaba la afluencia de turismo extranjero, sobre todo del [[Inglaterra|inglés]] debido a los intereses [[agricultura|agrarios]] que poseía en esta isla.&lt;br /&gt;
&lt;br /&gt;
[[Image:Beaches of Tenerife 17.JPG|thumb|left|250px|Playa del Duque, en el sur de Tenerife]]&lt;br /&gt;
Más tarde con las guerras mundiales este sector se resiente, pero entrada la segunda mitad del pasado siglo comienza a evolucionar de un modo muy notable. En un principio destaca el Puerto de la Cruz por su bondadoso clima y por todos los atractivos que el [[Valle de la Orotava|Valle norteño de La Orotava]] concentraba, pero persiguiendo captar el turismo de sol y playa, alrededor de 1980 nace el boom turístico del sur de Tenerife, donde destacan ciudades como Arona o Adeje, que hoy albergan más del 65% de las plazas [[hotel]]eras de toda la isla. Tenerife recibe cada año más de 5.000.000 de turistas, siendo de este modo, de entre todo el archipiélago canario, la isla preferida a este respecto. Sin embargo, este dato también pone de manifiesto la gran cantidad de recursos que esta actividad consume (espacio, [[energía]], agua, etc.). A pesar de que más del 60% del [[Producto interior bruto|PIB]] tinerfeño lo constituye el turismo, y en consecuencia el sector servicios, el sector primario y la industria son responsables del 40% restante. En cuanto a la agricultura destacan el [[Plátano de Canarias|cultivo de plátanos]], los [[tomate]]s, la [[vid]]es, las papas y las flores. La pesca supone también gran parte de la economía tinerfeña (Canarias es la segunda región pesquera del estado español). Ya finalmente, y a pesar de los diversos polígonos industriales que existen en el territorio insular, la importancia de la actividad industrial radica en la refinería de [[petróleo]]s de Santa Cruz de Tenerife, la cual suministra productos petrolíferos no sólo al archipiélago canario sino también al mercado [[península ibérica|peninsular]], [[África|africano]] y [[América|americano]].&lt;br /&gt;
&lt;br /&gt;
==Arte==&lt;br /&gt;
&lt;br /&gt;
===Literatura===&lt;br /&gt;
[[Imagen:Jose Viera y Clavijo.jpg|thumb|right|200px|José Viera y Clavijo]]&lt;br /&gt;
En los siglos XVI y XVII destaca, en el campo de la poesía épica, [[Antonio de Viana]]. Este escritor que nace en La Laguna compuso el poema &#039;&#039;Antigüedades de las Islas Afortunadas&#039;&#039;, un material de gran valor antropológico para entender las formas de vida de aquel entonces.&lt;br /&gt;
Ya posteriormente, en el llamado Siglo de las Luces (siglo XVIII) aparecen figuras relevantes de la Ilustración en Tenerife como [[José Viera y Clavijo]], [[Tomás de Iriarte]], [[Ángel Guimerá y Jorge]], [[Mercedes Pinto]] o [[Domingo Pérez Minik]], entre otros, que aportan sus obras dentro de esta escena [[literatura|literaria]].&lt;br /&gt;
&lt;br /&gt;
===Pintura===&lt;br /&gt;
El primer núcleo de arte [[pintura|pictórico]] en Tenerife se distingue en la ciudad de La Laguna, donde en el transcurso del siglo XVI aparecen algunos pintores de renombre. Más adelante se suman artistas de otros lugares como Garachico, Santa Cruz, La Orotava y Puerto de la Cruz. Originarios de La Orotava son dos de los mejores pintores del archipiélago del siglo XVII, nos referimos a [[Cristóbal Hernández de Quintana]] y [[Gaspar de Quevedo]], con numerosas obras distribuidas por iglesias de la isla.&lt;br /&gt;
En el Puerto de la Cruz, concretamente en la [[Iglesia de Nuestra Señora de la Peña de Francia (Puerto de la Cruz)|iglesia de Nuestra Señora de la Peña de Francia]], se puede contemplar la aportación realizada por [[Luis de la Cruz y Ríos]]. Nacido en 1.775, el que fuera pintor de cámara del rey [[Fernando VII]] y miniaturista, obtiene un reconocido prestigio en la Corte, donde se le conoce como &#039;&#039;El Canario&#039;&#039;. &lt;br /&gt;
En el año 1.849 nace en Santa Cruz de Tenerife el paisajista [[Valentín Sanz]]. El Museo Municipal de Bellas Artes de Santa Cruz cuenta con una abundante muestra de su quehacer. También en este museo capitalino se pueden observar cuadros de [[Juan Rodríguez Botas]] (1.880-1.917), quien es considerado el primer impresionista canario.&lt;br /&gt;
Del mismo modo cabe citar, dentro del grupo expresionista, a [[Mariano de Cossío]]. A este autor hay que atribuirle los frescos de la iglesia de Santo Domingo, en San Cristóbal de La Laguna. Por otro lado, en 1.874 nace [[Francisco Bonnín Guerín]], acuarelista de Santa Cruz que formó una escuela para promover su labor pictórica.&lt;br /&gt;
Por último, en 1.906 nace en La Laguna uno de los pintores canarios más universales, [[Óscar Domínguez]]. Perteneciente al surrealismo, inventó la técnica de la [[decalcomanía]] y contribuyó con una obra pictórica de internacional reconocimiento.&lt;br /&gt;
&lt;br /&gt;
===Escultura===&lt;br /&gt;
Se podría considerar que la práctica [[escultura|escultórica]] comienza en Tenerife a partir del siglo XVII, momento en el cual llega a la isla el arquitecto y escultor [[Martín de Andújar Cantos]] desde Sevilla, donde había recibido instrucciones del maestro [[Juan Martínez Montañés]]. Con él arrivaron nuevas técnicas y planteamientos de la escuela hispalense que transmitió a sus discípulos, entre los que destaca el garachiquense [[Blas García Ravelo]]. &lt;br /&gt;
Otros escultores que, en esta época y en el posterior siglo XVIII, irrumpen a la escena son [[Sebastián Fernández Méndez]], [[Lázaro González]], [[Rodríguez de la Oliva]], y principalmente el orotavense [[Fernando Estévez]], alumno de [[Luján Pérez]], quien contribuye con una extensa colección de imágenes religiosas y tallas repartidas por diversas iglesias de Tenerife, como por ejemplo, en la [[Catedral de La Laguna]], la [[Iglesia de la Concepción (La Laguna)|Iglesia de la Concepción]] también en La Laguna, la [[Basílica de Candelaria]] y en distintos lugares de culto de La Orotava.&lt;br /&gt;
Actualmente, el ámbito escultórico tinerfeño se encuentra representado entre otros por [[José Abad]], [[Fernando Garcíarramos]] y [[José Luis Fajardo]].&lt;br /&gt;
&lt;br /&gt;
===Música===&lt;br /&gt;
[[Imagen:Timple Front.jpg|thumb|150px|left|Timple]]&lt;br /&gt;
El ámbito [[música|musical]] tiene en la figura de [[Teobaldo Power y Lugo Viña]] uno de sus exponentes más claros. Natural de Santa Cruz, se trata de un pianista y compositor, autor de los [[Cantos Canarios]]. En concreto, los arreglos de la melodía del [[arrorró]] de estos Cantos Canarios constituyen el Himno de la Comunidad Autónoma.&lt;br /&gt;
En este campo también destaca el [[folclore]]. Similar al del resto de las islas, se caracteriza por la participación de [[timple]]s, [[guitarra]]s, [[bandurria]]s, [[laúd]]es y distintos tipos de [[instrumentos de percusión]]. Son numerosos los grupos folclóricos que se reparten por la geografía isleña y que suelen aparecer en distintas celebraciones populares como las romerías. En este aspecto habría que citar a [[Los Sabandeños]], quienes conforman un importante símbolo de la cultura canaria. Este grupo folclórico rescató la idiosincrasia del pueblo isleño en un momento en el que el carácter uniformador de la cultura española de los años setenta hace caer prácticamente en la decadencia y el olvido diferentes elementos de la música canaria.&lt;br /&gt;
Las canciones típicas de las islas: [[isa (canción)|isa]], [[folía]], [[tajaraste]], [[malagueña]]... se configuran como melodías mestizas entre la música ancestral de los guanches con distintos enlaces entre lo andaluz e hispanoamericano.&lt;br /&gt;
&lt;br /&gt;
===Arquitectura===&lt;br /&gt;
Al igual que la que predomina en las otras islas, en la [[arquitectura]] tinerfeña sobresalen las directrices de las casonas señoriales y las de las casas más humildes y populares. Este tipo arquitectónico, que tiene notables influencias de [[Andalucía]] y [[Portugal]], presenta, no obstante una fuerte personalidad propia.&lt;br /&gt;
De las casas señoriales hay que subrayar los ejemplos que existen en La Orotava y en La Laguna. Estas edificaciones se caracterizan por sus [[balcón|balcones]] típicos y por la presencia de [[patio interior|patios interiores]]. La madera, especialmente la tea (pino), cobra un gran protagonismo en estas construcciones. Estas casas presentan fachadas no demasiado complejas con poca ornamentación. Son típicos los grandes balcones de madera y el uso de celosías. Las ventanas cierran en guillotina y son habituales los asientos interiores adosados a ellas. Los patios interiores funcionan como verdaderos jardines que sirven para dar iluminación a las habitaciones. Estas se comunican con el patio por medio de galerías rematadas frecuentemente en piedra y madera. Artilugios como las destiladeras, las bombas de agua, los bancos y mesones son elementos que muchas veces forman parte de estos patios interiores.&lt;br /&gt;
&lt;br /&gt;
[[Image:Auditorio de Tenerife 013.JPG|thumb|right|250px|Auditorio de Tenerife]]&lt;br /&gt;
En cuanto a las casas tradicionales, estas se caracterizan por ser edificios de escasa altura, con toscas paredes de colores variopintos. En ocasiones la continuidad de estas paredes se ve interrumpida por la presencia de bloques de piedra que asoman a la superficie de forma ornamental. A lo largo de toda la isla son muchos los ejemplos a contemplar de esta arquitectura.&lt;br /&gt;
&lt;br /&gt;
Los edificios oficiales o de carácter religioso se han ido conformando según las distintas corrientes arquitectónicas que en cada momento han imperado. Los núcleos urbanos de las ciudades de La Laguna y La Orotava están declarados como monumentos histórico-artístico nacionales. En los últimos años, por parte de los diferentes gobiernos, ha predominado el concepto de llevar a cabo grandes proyectos, en ocasiones ostentosos, diseñados por reconocidos arquitectos. Entre ellos se podría incluir por ejemplo, la remodelación de la [[Plaza de España (Santa Cruz de Tenerife)|Plaza de España]] por los arquitectos suizos [[Herzog &amp;amp; De Meuron]], el nuevo proyecto del francés [[Dominique Perrault]] de la [[Playa de Las Teresitas]] (que no llegó a salir adelante al estallar un caso de corrupción detrás de dicho proyecto, el llamado [[Caso Las Teresitas]]), el [[Centro Magma Arte &amp;amp; Congresos]], las [[Torres de Santa Cruz]] o el [[Auditorio de Tenerife]]. Este último edificio, obra del arquitecto español Santiago Calatrava se alza al este del Parque Marítimo, en la capital tinerfeña. Uno de sus elementos más destacables es la estampa de su vela alada simulando un barco, que se ha convertido en uno de los símbolos de la isla.&lt;br /&gt;
&lt;br /&gt;
==Cultura==&lt;br /&gt;
&lt;br /&gt;
===Educación===&lt;br /&gt;
El nacimiento de la [[educación]] se debe en la isla a las órdenes religiosas. En el año 1530, Tenerife accede a la cultura de la mano de la cátedra de filosofía que, poseen los [[dominico]]s en el convento de [[Iglesia de la Concepción (La Laguna)|La Concepción de La Laguna]]. A pesar de ello, hasta bien avanzado el siglo XVIII no comienzan a funcionar las pocas escuelas que por aquel entonces existían. En este sentido, hay que recalcar el trabajo desempeñado por la Real Sociedad Económica de Amigos del País, que creó diversas escuelas en San Cristóbal de La Laguna. Fue en 1846 cuando se instaura el primer instituto de enseñanza secundaria con el fin de suplir el cierre de la Universidad de San Fernando (&#039;&#039;véase&#039;&#039; [[Universidad de La Laguna]]). Anexa a este edificio se fundó en 1850 la primera Escuela Normal Elemental del archipiélago que pasaría a denominarse Escuela Normal Superior de Magisterio en 1866. Así se mantiene esta situación ya que a pesar de que el dictador [[Primo de Rivera]] crease algunos centros, el punto de inflexión lo supone la política educativa que desarrolló la [[Segunda República Española|Segunda República]], de modo que en apenas cuatro años (1929-1933) casi se dobla el número de escuelas existentes. Posteriormente, el inicio de la Guerra Civil y la ulterior dictadura de [[Francisco Franco]] constituyeron un considerable retroceso. La educación en manos de órdenes religiosas tuvo cierta importancia en el devenir de los tinerfeños hasta que en 1970 la Ley General de Educación resta peso a estas instituciones religiosas en favor de los centros públicos. Estos últimos, y ya en menor grado los primeros, comienzan a multiplicarse desde entonces y son impulsados con la instauración de la democracia. Tenerife cuenta a día de hoy con 301 centros de educación infantil, 297 colegios de primaria, 140 de secundaria y 86 institutos de bachiller &amp;lt;ref&amp;gt;http://www.gobcan.es/educacion/DGC/DirCentros/scripts/default.asp?categoria=37&amp;lt;/ref&amp;gt;. Además, en  la isla existen hasta 5 centros de estudios universitarios o de postgrado: [[Universidad de La Laguna]] (la de mayor presencia), [[Universidad Nacional de Educación a Distancia]], [[Universidad Internacional Menéndez Pelayo]], [[Universidad Alfonso X el Sabio]] y [[Universidad de Vic]] (Escuela Universitaria de Turismo de Santa Cruz de Tenerife)&lt;br /&gt;
&lt;br /&gt;
===Investigación===&lt;br /&gt;
[[Image:Obs 2.jpg|thumb|300px|left|[[Observatorio del Teide]], perteneciente al Instituto de Astrofísica de Canarias]]&lt;br /&gt;
El campo de la [[investigación]], históricamente, no se ha desarrollado de un modo especialmente relevante. No obstante, entre los centros que se dedican a esta labor destaca sobre todo el [[Instituto de Astrofísica de Canarias]] que tiene sede en esta isla. Asimismo cabría citar el Instituto de Bio-Orgánica [[Antonio González González|Antonio González]], vinculado a la Universidad de La Laguna. También adheridos a esta universidad se encuentran el Instituto de Lingüística Andrés Bello, el Instituto Universitario de la Empresa, el Instituto de Derecho Regional y el Instituto Universitario de Ciencias Políticas y Sociales al igual que el Instituto de Enfermedades Tropicales (perteneciente a la Red de Investigación de Centros de Enfermedades Tropicales, que dispone de siete nodos extendidos a lo largo del país, uno de ellos en Canarias). Con sede en la ciudad del Puerto de la Cruz se encuentra el Instituto de Estudios Hispánicos de Canarias, adscrito al Instituto de Cultura Hispánica de Madrid. En la ciudad de La Laguna se encuentra el [[Instituto Canario de Investigaciones Agrarias]] y el [[Centro Internacional para la Conservación del Patrimonio]]. Otros organismos que trabajan en el ámbito de la investigación que tienen sede en Tenerife son el Instituto Tecnológico de Canarias, el Instituto Vulcanológico de Canarias, la Asociación Industrial de Canarias, el Instituto Tecnológico de Energías Renovables y el Instituto Oceanográfico de Canarias emplazado en la ciudad de Santa Cruz de Tenerife.&lt;br /&gt;
&lt;br /&gt;
==Comunicaciones==&lt;br /&gt;
===Aeropuertos===&lt;br /&gt;
El principal medio para llegar a Tenerife es el [[avión]]. Existen dos [[aeropuerto|aeropuertos]] en la isla: el [[aeropuerto Reina Sofía]] (Tenerife Sur) y el [[aeropuerto de Los Rodeos]] (Tenerife Norte). A pesar de que el aeropuerto Tenerife Sur es el que recibe mayor número de pasajeros, ambos disponen de vuelos regulares con las capitales de otras islas, con muchas ciudades peninsulares (Madrid, Barcelona, Sevilla, Valencia, Málaga, Bilbao, etc.), con ciudades europeas del [[Reino Unido]], [[Alemania]], [[Francia]] e [[Italia]] entre otras y también con ciudades americanas y africanas. Teniendo en cuenta los dos aeropuertos, Tenerife es la isla canaria que más pasajeros recibe anualmente. Debido al [[turismo]], es fácil encontrar vuelos directos más económicos con las principales ciudades alemanas o británicas que con las peninsulares.&lt;br /&gt;
&lt;br /&gt;
===Puertos===&lt;br /&gt;
Además del avión, Tenerife tiene dos [[puerto marítimo|puertos marítimos]] principales que le sirven de conexión. El [[Puerto de Santa Cruz de Tenerife|Puerto de Santa Cruz]] que conecta con las capitales de cada isla, y en particular con aquellas de la provincia oriental, y el [[Puerto de Los Cristianos]] que se centra en mayor medida en las comunicaciones con las capitales de la provincia de Santa Cruz de Tenerife. Además es posible el tráfico de pasajeros entre los Puertos de Santa Cruz de Tenerife y Cádiz y viceversa. Está previsto construir un gran puerto de importancia en el sur de la Isla, el de Granadilla, y otro en la parte oeste, en Fonsalía.&lt;br /&gt;
&lt;br /&gt;
===Guaguas===&lt;br /&gt;
La isla cuenta también con una extensa red de [[guagua]]s tanto urbanas como interurbanas que conectan la gran mayoría de los núcleos de población. Para ello cuenta con estaciones de guaguas en todas las ciudades, como el [[Intercambiador de Transportes de Santa Cruz de Tenerife]].&lt;br /&gt;
&lt;br /&gt;
===Ferrocarril===&lt;br /&gt;
[[Image:Tranvía de Tenerife.jpg|thumb|right|250px|El tranvía en Ofra (Santa Cruz de Tenerife) en fase de pruebas (2007)]]&lt;br /&gt;
El 2 de junio de 2007 se inauguró la [[Línea 1 (Tranvía de Tenerife)|línea 1]] del [[Tranvía de Tenerife]], que une destacados sectores del [[Área metropolitana de Santa Cruz de Tenerife-La Laguna|conurbación Santa Cruz-La Laguna]] y puntos como los dos centros hospitalarios de la zona. La segunda fase, que empezará a ejecutarse a pricipios de 2008, unirá los Barrios de Tincer (perteneciente a Santa Cruz) y La Cuesta (La Laguna), que estarán unidos por la Línea 1. Más adelante se construirán otras líneas como la que unirá la Avenida de la Trinidad (La Laguna) con el Aeropuerto de Tenerife Norte (Los Rodeos); y el [[Intercambiador de Transportes de Santa Cruz de Tenerife]] con la [[playa de Las Teresitas]].&lt;br /&gt;
&lt;br /&gt;
Perteneciente a la misma empresa que explota el [[Tranvía de Tenerife]], en 2008 se espera que comience, tras la aprobación de su construcción por el pleno del [[Cabildo Insular de Tenerife]] el 27 de abril de 2007, los trabajos para habilitar un tren que unirá [[Santa Cruz de Tenerife]] con el sur de la isla. El recorrido total será de 80 kilómetros y tiene previsto realizar su trayecto completo en 35 minutos y si tuviera que parar en todas las estaciones, lo haría en 45 minutos. En la reforma actual de la [[Autopista del Sur de Tenerife|autopista del sur]] (TF-1), en algunos tramos ya es visible el lugar por donde discurrirá ese tren.&lt;br /&gt;
&lt;br /&gt;
==Sanidad==&lt;br /&gt;
El principal centro sanitario de la Isla es el [[Hospital Universitario de Canarias]], en el municipio de San Cristóbal de La Laguna aunque justo en el límite con Santa Cruz de Tenerife. Muy cerca, ya en este municipio, se encuentra el [[Hospital Universitario Nuestra Señora de Candelaria]], recientemente incorporado a la red docente de la ULL, aunque ya hace tiempo la Escuela de Enfermería de este hospital estaba adscrita a la Facultad de Enfermería de la Universidad de La Laguna, con sede en el HUC.&lt;br /&gt;
&lt;br /&gt;
Además, se están construyendo dos nuevos hospitales para las zonas norte y sur de la isla. Cuando estén finalizados, la isla dispondrá de cuatro centros hospitalarios junto a sus autopistas, si bien el HUC seguirá siendo el de referencia.&lt;br /&gt;
&lt;br /&gt;
==Religión==&lt;br /&gt;
[[Imagen:Tenerife.candelaria.exterior.basilica.jpg|thumb|300px|Plaza y [[Basílica de Candelaria]] ([[Tenerife]], [[España]])]]&lt;br /&gt;
[[Imagen:Hermano Pedro.jpg|200px|thumb|Imagen del Santo [[Hermano Pedro]], en la cueva donde pastaba su ganado.]]&lt;br /&gt;
Al igual que ocurre en el resto del estado español, la sociedad tinerfeña se declara mayoritariamente católica. No obstante, las crecientes corrientes migratorias (turismo, inmigración ilegal, etc.) están incrementando el número de fieles de otras religiones que se dan cita en la isla. Son numerosas las advocaciones que existen, sin embargo, aquí tiene lugar cada año una de las peregrinaciones más importantes del archipiélago, debido a la celebración de la festividad de la &#039;&#039;&#039;[[Virgen de Candelaria|La Virgen de Candelaria]]&#039;&#039;&#039; (&#039;&#039;&#039;Patrona de Canarias&#039;&#039;&#039;, de la &#039;&#039;&#039;Diócesis Nivariense&#039;&#039;&#039; y de la isla), quien representa la unión de las culturas [[guanche]] y española. Los guanches tomaron como propia la imagen que los misioneros de [[Lanzarote]] y [[Fuerteventura]] dejaron en una playa próxima a la actual Villa Mariana de Candelaria. A partir de ahí, la historia y la leyenda de esta imagen, se entrelazan y dan paso al culto y peregrinación que hasta nuestros días mantienen los habitantes de las islas y de Tenerife en particular. En este aspecto, hay que nombrar también a la Virgen de Los Remedios, la cual es la copatrona de la [[Diócesis Nivariense]] (Diócesis de la provincia). En cuanto a los principales núcleos o templos religiosos destacan:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Basílica de Candelaria]]&#039;&#039;&#039;: Es el lugar en el que se encuentra la imagen de la Virgen de Candelaria (Patrona de Canarias). Este santuario de estilo neoclásico es frecuentado diariamente por los feligreses que se dirigen hasta la Villa Mariana en devoción a su patrona.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Catedral de La Laguna]]&#039;&#039;&#039;: Es la sede de la Diócesis Nivariense. En ella se venera a la Virgen de Los Remedios. Consiste en un edificio que combina elementos neogóticos con neoclásicos localizado en la ciudad de La Laguna. Actualmente, y desde hace varios años se encuentra cerrada al culto debido a unas obras de restauración y reconstrucción que no terminan de acontecer.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Iglesia de la Concepción (La Laguna)|Iglesia de la Concepción de La Laguna]]&#039;&#039;&#039;: Se trata uno de los edificios más antiguos de Tenerife, pues constituye la iglesia matriz de la isla, mandada a construir por Alonso Fernández de Lugo en 1.496. Ha sido declarado Monumento Histórico Nacional. A su alrededor se organizó todo el entramado que dio lugar a la ciudad de [[San Cristóbal de La Laguna]]. Actualmente, se puede acceder a la parte alta de la torre para contemplar gran parte de la ciudad.&lt;br /&gt;
&lt;br /&gt;
Hay otros edificios religiosos de cierta relevancia, especialmente en el Valle de la Orotava, como puede ser la Iglesia de la Concepción de la Orotava, o en la capital, como es la [[Iglesia Matriz de la Concepción (Santa Cruz de Tenerife)]]. También destacar la [[Iglesia de San Andrés (Tenerife)|Iglesia de San Andrés Apóstol]] en la localidad de [[San Andrés (Tenerife)|San Andrés]], una de las iglesias más antiguas de la isla.&lt;br /&gt;
&lt;br /&gt;
Es importante señalar también a [[Pedro de San José Betancur]] ([[Hermano Pedro]]), &#039;&#039;&#039;Primer Santo Canario&#039;&#039;&#039;, nacido en el municipio de [[Vilaflor]]. Su principal santuario es una cueva situada en el municipio de [[Granadilla de Abona]] (sur de la isla), en esta cueva se dice que el hospedaba su ganado. El Santo Hermano Pedro fué muy devoto de la Virgen de Candelaria, a cuyo santuario solía [[peregrinación|peregrinar]] con frecuencia.&lt;br /&gt;
&lt;br /&gt;
==== Patronazgo de la isla ====&lt;br /&gt;
&lt;br /&gt;
*[[San Miguel Arcángel]], es el Santo Patrono de la isla de Tenerife y del [[San Cristóbal de La Laguna|Ayuntamiento de La Laguna]], de hecho su imagen aparece en el escudo insular, que fue concedido por [[Fernando el Católico]], el [[23 de marzo]] de [[1510]], en nombre de su hija la reina [[Doña Juana]].&lt;br /&gt;
&lt;br /&gt;
*La Patrona de Tenerife es la [[Virgen de Candelaria]] (siendo además la Patrona de Canarias). Su festividad es el 15 de agosto, día de la Ascunsión (festivo en Canarias) y el 2 de febrero, este último día festivo en la isla.&lt;br /&gt;
&lt;br /&gt;
=== Museos ===&lt;br /&gt;
La isla cuenta con diversos recintos museísticos de diferente naturaleza que están bajo el dominio de distintas instituciones. Quizás los más destacados sean los pertenecientes al [[Organismo Autónomo de Museos y Centros]],&amp;lt;ref&amp;gt;[http://www.museosdetenerife.org/index.php?al_id_mus=6 Organismo autónomo de museos y centros]&amp;lt;/ref&amp;gt; que dispone de los siguientes espacios:&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de la Naturaleza y el Hombre]]&#039;&#039;&#039;: localizado en Santa Cruz de Tenerife, este museo ofrece una visión de la riqueza natural de las Islas Canarias y de las poblaciones prehispánicas [[guanche]]s que en ellas habitaban. El complejo está integrado por tres museos:&lt;br /&gt;
** &#039;&#039;&#039;Museo de Ciencias Naturales&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Museo Arqueológico de Tenerife&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Instituto Canario de Bioantropología]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de Historia de Tenerife]]&#039;&#039;&#039;: enclavado en la ciudad de [[San Cristóbal de La Laguna|La Laguna]], el museo de historia presta una visión general del desarrollo institucional, social, económico y cultural de la Isla entre los siglos XV y XX.&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de la Ciencia y el Cosmos]]&#039;&#039;&#039;: también situado en [[San Cristóbal de La Laguna|La Laguna]] contiguo a las dependencias del [[Instituto de Astrofísica de Canarias]] este museo acerca al visitante a las leyes y principios que rigen la Naturaleza, desde el funcionamiento de su propio cuerpo hasta el de las estrellas.&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de Antropología de Tenerife]]&#039;&#039;&#039;: Situado en [[San Cristóbal de La Laguna|La Laguna]], concretamente en [[Valle de Guerra]] el Museo de Antropología de Tenerife es una institución pública dedicada a investigar, conservar y difundir la cultura popular.&lt;br /&gt;
* &#039;&#039;&#039;[[Centro de Documentación Canario-Americano (CEDOCAM)]]&#039;&#039;&#039;: Con domicilio en [[San Cristóbal de La Laguna|La Laguna]] tiene como misión potenciar las relaciones culturales y los elementos de identidad comunes entre Canarias y [[América]], así como la conservación, información y difusión del patrimonio documental compartido.&lt;br /&gt;
* &#039;&#039;&#039;[[Centro de Fotografía Isla de Tenerife]]&#039;&#039;&#039;: ubicado en [[Santa Cruz de Tenerife]] este recinto ofrece un programa anual de exposiciones que permiten el contacto con tendencias y obras de distintos autores de renombre y creadores emergentes de las propias islas. En un futuro este centro compartirá sede con el Instituto Óscar Domínguez de Arte y Cultura Contemporánea.&lt;br /&gt;
* &#039;&#039;&#039;[[TEA - Tenerife Espacio de las Artes]]&#039;&#039;&#039;: situado también en la ciudad de [[Santa Cruz de Tenerife]] este museo aún por inaugurar busca promover el conocimiento de las diferentes tendencias del arte y la cultura contemporáneos entre la población local y foránea, propiciando la organización de actividades culturales, científicas, educativas y técnicas.&lt;br /&gt;
&lt;br /&gt;
Desligados del Organismo Autónomo de Museos y Centros destacan:&lt;br /&gt;
&lt;br /&gt;
* El &#039;&#039;&#039;[[Convento de San Francisco (Santa Cruz de Tenerife)|Museo Municipal de Bellas Artes]]&#039;&#039;&#039;, en la capital tinerfeña, que muestra una exposición permanente de pinturas y esculturas de [[José de Ribera]], [[Federico Madrazo]], [[Joaquín Sorolla]] y de artistas canarios como Millares u [[Óscar Domínguez]]. &lt;br /&gt;
* La &#039;&#039;&#039;Casa del Vino-La Baranda&#039;&#039;&#039; que, perteneciente a la Asociación de Museos del Vino de España,&amp;lt;ref&amp;gt;[http://www.museosdelvino.es/listaSocios.htm Socios de la Asociación de Museos del Vino de España]&amp;lt;/ref&amp;gt; está emplazada en el municipio de [[El Sauzal]] y dispone entre sus instalaciones de una &#039;&#039;hacienda&#039;&#039; histórica rústica, un &#039;&#039;museo&#039;&#039; que permite conocer la historia vitivinícola de Tenerife, un &#039;&#039;restaurante&#039;&#039; que ofrece comida típica de la tierra, una &#039;&#039;vinoteca&#039;&#039;, una &#039;&#039;sala audiovisual&#039;&#039; y una &#039;&#039;sala de degustación&#039;&#039;.&lt;br /&gt;
* La &#039;&#039;&#039;Casa de la Miel&#039;&#039;&#039;: anexa a la Casa del Vino-La Baranda, es una entidad creada por el Cabildo Insular con el fin de apoyar y desarrollar el sector apícola de Tenerife. La [[Casa de la Miel]] dispone de un centro de visitantes que ofrece una visión acerca de la historia del producto en la isla, su proceso de elaboración y serviciós de información y degustación de las mieles de Tenerife, que poseen denominación de origen.&amp;lt;ref&amp;gt;[http://www.casadelamiel.org/miel.html Página de la Casa de la Miel de Tenerife]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* El &#039;&#039;&#039;Museo de Artesanía Iberoamericana&#039;&#039;&#039; que se encuentra ubicado en el antiguo convento de San Benito Abad, de [[La Orotava]]. El centro se encuadra dentro del programa de divulgación que ejecuta el Centro de Documentación de la Artesanía de España y América,&amp;lt;ref&amp;gt;[http://es.geocities.com/cdiaea/museo/ Página oficial del Museo de Artesanía Iberoamericana]&amp;lt;/ref&amp;gt; Fundación financiada por el Ministerio de Industria, Comercio y Turismo; la [[Agencia Española de Cooperación Internacional]], la Comisión Nacional &amp;quot;Quinto Centeneario&amp;quot;, la Consejería de Industria y Comercio del [[Gobierno de Canarias]] y el [[Cabildo Insular de Tenerife]]. Cuenta con cinco salas especializadas en &#039;&#039;Instrumentos musicales populares&#039;&#039;, &#039;&#039;Textil-nuevos diseños en artesanía&#039;&#039;, &#039;&#039;Cerámicas&#039;&#039;, &#039;&#039;Fibras&#039;&#039; y &#039;&#039;Arte Popular&#039;&#039;.&lt;br /&gt;
* El &#039;&#039;&#039;[[Museo Arqueológico del Puerto de La Cruz]]&#039;&#039;&#039;: sito en la ciudad homónima y habilitado sobre una casona tradicional de los siglos XVIII-XIX, ofrece un fondo museográfico integrado por más de 2.600 registros de elementos de la cultura [[guanche]] y un fondo documental que lleva el nombre del investigador Luis Diego Cuscoy.&amp;lt;ref&amp;gt;[http://www.arqueopc.museum/nuevo/pagina.asp?id=3 Fondo museográfico del espacio]&amp;lt;/ref&amp;gt; &lt;br /&gt;
* El &#039;&#039;&#039;[[Museo Militar Regional de Canarias]]&#039;&#039;&#039;, localizado en Santa Cruz de Tenerife, concretamente en el [[Fuerte de Almeyda|acuartelamiento de Almeyda]]. En sus salas se presenta toda la historia militar de Canarias, incluyendo el repelido ataque del [[Horacio Nelson|almirante Nelson]], así como otros eventos y batallas libradas en las islas. Aparte del Museo Histórico Militar de Canarias este inmueble dispone del Archivo Intermedio Militar de Canarias y la Biblioteca Militar de Canarias.&amp;lt;ref&amp;gt;[http://www.ejercito.mde.es/ihycm/chycm/index.html Página oficial del Centro de Historia y Cultura Militar de Canarias]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fiestas tradicionales ==&lt;br /&gt;
Tenerife tiene un amplio calendario festivo en el que destaca principalmente el [[Carnaval de Santa Cruz de Tenerife]], el más importante del país y uno de los más importantes del mundo.&amp;lt;ref&amp;gt;{{cita web&lt;br /&gt;
|url=http://www.canarias7.es/articulo.cfm?Id=131352&lt;br /&gt;
|título=Canarias 7. Tenerife. El Carnaval de Santa Cruz de Tenerife, candidato a Tesoro del Patrimonio Cultural Inmaterial de España &amp;lt;!--Generado por Muro Bot. Puedes ayudar a rellenar esta plantilla--&amp;gt;&lt;br /&gt;
|añoacceso=2009&lt;br /&gt;
|autor=&lt;br /&gt;
|enlaceautor=&lt;br /&gt;
|idioma=&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=repetida_3 /&amp;gt; El día oficial de la isla es el [[2 de febrero]] en honor de la [[Virgen de Candelaria]] (patrona de la isla y [[Patrona de Canarias]]). Otras fiestas destacables son sus romerías, el Corpus Christi, la Semana Santa y la fiesta del [[Santísimo Cristo de La Laguna]] el [[14 de septiembre]].&lt;br /&gt;
&lt;br /&gt;
=== Carnaval ===&lt;br /&gt;
Quizás la fiesta de mayor repercusión nacional e internacional sea el [[Carnaval de Santa Cruz de Tenerife]], no en vano declarado [[Fiestas de Interés Turístico Internacional (España)|Fiesta de Interés Turístico Internacional]].&amp;lt;ref&amp;gt;[http://www.carnavaltenerife.es/staticpages/index.php?page=1.presentacion Página oficial del Carnaval de Santa Cruz de Tenerife]&amp;lt;/ref&amp;gt; Aparte de la capital, el carnaval se celebra en múltiples localidades del norte y sur de la isla, pero es en la primera donde tiene mayor envergadura.&amp;lt;ref&amp;gt;[http://www.puntoinfo.idecnet.com/index.php?ID=4758&amp;amp;s=6&amp;amp;sectionID=45&amp;amp;lang=1&amp;amp;hilite=carnaval Información del Cabildo Insular acerca de todos los carnavales de Tenerife]&amp;lt;/ref&amp;gt; Son diversos los concursos que se programan: murgas, comparsas, [[Rondallas de Tenerife|rondallas]], agrupaciones, etc. Con la elección de la reina adulta se pone fin a éstos y comienza lo que los tinerfeños denominan carnaval en la calle con importantes concentraciones de carnavaleros en el centro de Santa Cruz, que se prolongan durante diez días de fiesta.&amp;lt;ref&amp;gt;[http://www.sctfe.es/index.php?id=627 Apartado de Fiestas de la página web del Ayuntamiento de Santa Cruz de Tenerife]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Romerías ===&lt;br /&gt;
Las fiestas populares más tradicionales y extendidas en Tenerife son quizás las [[romerías]].&amp;lt;ref&amp;gt;[http://www.webtenerife.com/PortalTenerife/Home/Disfruta+sin+perderte+nada/Mas+sobre+Tenerife/Tradiciones/Fiestas/ROMERIAS.htm?wbc_purpose=Basi&amp;amp;Lang=es Turismo de Tenerife]&amp;lt;/ref&amp;gt; Éstas, a caballo entre lo pagano y lo religioso son manifestaciones multitudinarias con carrozas o carretas, [[apero]]s y [[ganado]] en honor al [[santo patrón|patrón o patrona]] del lugar. Es frecuente en estos festejos la reunión de marcados factores identitarios de la etnografía isleña: folclore, danza, artesanía, comida típica, deportes autóctonos, donde se puede observar a gran parte de los asistentes ataviados con los diferentes [[traje de mago|trajes de mago]] típicos de las islas.[[Imagen:Reina carnaval.jpg|thumb|right|250px|Reina del Carnaval de Santa Cruz de Tenerife]]&lt;br /&gt;
En origen las romerías encarnaban fiestas de las clases más adineradas de la sociedad, que se congregaban en veneración de los santos a los que atribuían buenas cosechas, tierras fértiles, copiosidad de lluvias, exoneración de determinadas enfermedades y un largo etcétera. En consecuencia, los allí reunidos degustaban los alimentos y vinos de la tierra y, brindaban y compartían sus bienes rindiendo así pleitesía. Éstas celebraciones se fueron popularizando paulatinamente y dieron paso a una de las fiestas más emblemáticas de la actualidad. Dentro de las grandes romerías de la isla cabe señalar las romerías de San Marcos en Tegueste, donde las carretas son decoradas con productos del campo (semillas, cereales, flores, etc), San Isidro Labrador en Los Realejos, San Isidro Labrador y Santa María de la Cabeza en La Orotava, San Benito Abad en La Laguna, San Roque en Garachico, San Agustín en Arafo o la Romería-Ofrenda a la [[Virgen de Candelaria]] celebrada cada 14 de agosto. Otro acto significativo de la fiesta de la Virgen de Candelaria es la llamada &amp;quot;[[Caminata a Candelaria]]&amp;quot;, realizada en la noche del 14 al 15 de agosto, en el cual los fieles hacen peregrinación a pie desde diferentes partes de la isla, incluso llegando de otras islas, hasta llegar a la Villa Mariana de [[Candelaria]].&lt;br /&gt;
&lt;br /&gt;
=== Fiestas de la Virgen de Candelaria ===&lt;br /&gt;
&lt;br /&gt;
{{AP|Virgen de Candelaria}}&lt;br /&gt;
La [[Virgen de Candelaria]] es la [[Patrona de Canarias]]. Su fiesta es celebrada dos veces al año, en [[febrero]] y en [[agosto]]. La Romería-Ofrenda a la [[Virgen de la Candelaria|Virgen de Candelaria]] se celebra cada 14 de agosto. En este acto es tradición que representaciones de todos los municipios de la isla y también de todas las islas del Archipiélago Canario acudan a ofrendar a su Patrona. Otro acto significativo de la fiesta de la Virgen de Candelaria es la [[Caminata a Candelaria|peregrinación a la Villa Mariana]] realizada en la noche del 14 al 15 de agosto, en la cual los fieles recorren andando multitud de kilómetros desde diferentes partes de la isla hasta llegar a la [[Candelaria (Santa Cruz de Tenerife)|Villa Mariana de Candelaria]], lugar donde se encuentra la venerada imagen de la Virgen de Candelaria. Es habitual recibir peregrinos de otras islas e incluso de otras partes de España.&lt;br /&gt;
&lt;br /&gt;
El [[2 de febrero]] se celebra la [[Fiesta de la Candelaria|Fiesta Litúrgica de La Candelaria]]. También en este día se acercan a la villa muchos fieles de la &#039;&#039;Virgen Morenita&#039;&#039;. Es también tradición que cada siete años la imagen de la Virgen sea trasladada alternativamente por dos semanas a las ciudades de [[Santa Cruz de Tenerife]] (capital) y [[San Cristóbal de La Laguna]] (sede de la diócesis). Las últimas dos veces que se ha efectuado dicho traslado han sido en octubre de [[2002]] a Santa Cruz y en mayo de [[2009]] a La Laguna. Las próximas serán en [[2016]] a Santa Cruz y en [[2023]] a La Laguna.&lt;br /&gt;
&lt;br /&gt;
=== Fiestas del Santísimo Cristo de La Laguna ===&lt;br /&gt;
&lt;br /&gt;
{{AP|Santísimo Cristo de La Laguna}}&lt;br /&gt;
Esta Festividad Litúrgica que, tiene varios siglos de historia, es celebrada cada [[14 de septiembre]] en la ciudad de [[San Cristóbal de La Laguna]] y gira en torno al [[Santísimo Cristo de La Laguna]]. El Cristo de La Laguna es una de las imágenes más veneradas de las Islas Canarias, junto con la [[Virgen de Candelaria]], especialmente en la isla de Tenerife, es la imagen [[Cristología|Cristológica]] más venerada de Canarias,&amp;lt;ref&amp;gt;[http://www.cristodelalaguna.org/vernew.php?id=359 Fiestas en honor al Santísimo Cristo de La Laguna, la imagen cristológica más venerada de Canarias, en la Página Web de su Hermandad]&amp;lt;/ref&amp;gt; y la imagen religiosa más antigua del archipiélago.&lt;br /&gt;
&lt;br /&gt;
Cada [[9 de septiembre]] la venerada imagen del Cristo es bajada en público del altar mayor de su [[Real Santuario del Cristo de La Laguna|Real Santuario]], para el rito del [[besapiés]] y para más tarde ser colocada en el [[trono]] procesional, para sus fiestas mayores de septiembre. La imagen permanece en su trono procesional hasta el [[21 de septiembre]], día en que la sagrada imagen es subida de nuevo a su altar. Durante este tiempo la imagen es solemnemente trasladada hasta la [[Catedral de La Laguna]] (9 de septiembre), en la cual procesiona en una cruz repujada en [[plata]]. En dicha catedral permanece durante varios días, hasta el día [[14 de septiembre]], cuando se procede al traslado de vuelta a su Real Santuario.&lt;br /&gt;
&lt;br /&gt;
=== Corpus Christi ===&lt;br /&gt;
[[Imagen:Plaza-centro.jpg|thumb|left|250px|Tapiz de la Plaza del Ayuntamiento en La Orotava.]]&lt;br /&gt;
Con marcado carácter religioso se encuentra la festividad del [[Corpus Christi]], en la que es habitual la confección de alfombras florales en las calles. A título especial se pueden incluir las realizadas en [[La Orotava]], donde se puede contemplar un tapiz de considerables dimensiones confeccionado en la plaza del ayuntamiento mediante tierras volcánicas de diversas tonalidades, extraídas del [[Parque Nacional del Teide]] que, tras la celebración son devueltas a fin de respetar el entorno del Parque. La festividad del Corpus Christi de La Orotava está declarada Bien de Interés Cultural en la categoría de Actividad Tradicional de Ámbito Insular.&amp;lt;ref&amp;gt;[http://www.villadelaorotava.org/fiestas.php?op2=19 Página del ayuntamiento de la Villa de La Orotava]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semana Santa ===&lt;br /&gt;
{{AP|Semana Santa en Canarias}}&lt;br /&gt;
En el capítulo de celebraciones a reseñar de la isla de Tenerife habría que contar con la [[Semana Santa]]. Esta se celebra en todos los municipios pero probablemente sea en La Laguna, La Orotava y Los Realejos donde adquiera especial significado. En este sentido destacan principalmente las procesiones que se desarrollan durante el [[Jueves Santo]], [[Viernes Santo]] y [[Domingo de Resurrección]]. La [[Semana Santa de San Cristóbal de La Laguna]] es considerada como la Semana Santa más importante y multitudinaria de las que se celebran en Canarias.&amp;lt;ref&amp;gt;[http://viajes.abc.es/noticia.asp?viajes=2033&amp;amp;titulo=Semana-Santa-en-La-Laguna%3A-sol%2C-fe-y-cultura/ Semana Santa en La Laguna: sol, fe y cultura]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gastronomía==&lt;br /&gt;
&lt;br /&gt;
===Pescados===&lt;br /&gt;
Como resulta lógico por la influencia marina, los productos del mar gozan aquí de cierta abundancia tanto en cantidad como en variedad. Entre las especies más apreciadas están las [[vieja]]s, y también, entre otros, la [[sama]], el [[bocinegro]], la [[salema]], el [[cherne]], el [[mero]]... Destacan asimismo los diversos tipos de [[túnido]]s que abundan en sus costas. Las caballas, sardinas y chicharros también deben ser citadas entre los pescados más consumidos. Otra especie que disfruta de cierta fama es la [[Muraenidae|morena]], que se suele servir frita. Estas variedades marinas se suelen preparar simplemente sancochadas (cocidas), o a la espalda, a la sal, etc. Es frecuente que se acompañen con [[mojo]] y [[papas arrugadas]].&lt;br /&gt;
&lt;br /&gt;
===Carnes===&lt;br /&gt;
En el apartado de [[carne]]s, es un plato muy popular la típica carne de fiesta (tacos de [[carne de cochino]] adobados) que se prepara para los festejos de los pueblos en ventorrillos, bares y casas particulares. El conejo en salmorejo, el cabrito, y por supuesto el vacuno, el porcino y las carnes de ave son también consumidas habitualmente.&lt;br /&gt;
&lt;br /&gt;
===Papas Arrugadas===&lt;br /&gt;
[[Imagen:Papasarrugadas.jpg|thumb|right|250px|Papas arrugadas con mojo]]&lt;br /&gt;
Tanto los pescados como las carnes suelen acompañarse con [[papas arrugadas]]. Es este un plato típico del conjunto de las Canarias que responde simplemente a la forma de cocinar las papas. Con agua, mucha sal, y sin pelar.&lt;br /&gt;
&lt;br /&gt;
===Mojos===&lt;br /&gt;
Con esta palabra, seguramente de ascendencia portuguesa, se designan las salsas típicas del las islas. Los [[mojo]]s constituyen un auténtico mundo de sabores, colores, texturas, etc., entre los que se encuentran el mojo de [[cilantro]], de [[perejil]], de [[pimentón]] y el distinguido mojo picón a base de [[pimienta]]. No obstante el abanico de estas salsas es muy amplio y permite el uso de distintos ingredientes en su elaboración como [[almendra]]s, [[queso]], [[azafrán]], pan frito, entre otras posibilidades.&lt;br /&gt;
&lt;br /&gt;
===Quesos===&lt;br /&gt;
Viene a ser otro de los platos más comúnmente elaborados y consumidos. Destacan los producidos en granjas de Arico, La Orotava o Teno. A su vez, son diversas variedades las que existen: quesos tiernos, curados, semicurados, ahumados… Hoy en día predominan los quesos de [[cabra]], aunque en ocasiones se confeccionan con ciertas cantidades de leche de [[oveja]] o de [[vaca]]. Suelen servirse a modo de entrante o simplemente de tentempié. Los quesos canarios gozan de una buena crítica internacional, entre otras cosas, por su suavidad y por su sabor, dotándolos de una personalidad que los diferencia de otros quesos europeos.&lt;br /&gt;
&lt;br /&gt;
===Gofio===&lt;br /&gt;
[[Imagen:Gofioescaldado.jpg|thumb|right|250px|Gofio escaldado]]&lt;br /&gt;
El [[gofio]] es uno más de los elementos tradicionales de la cocina canaria y particularmente de Tenerife. Se realiza con granos de cereales que son tostados y posteriormente molidos. El género de mayor consumo en la isla es el de [[trigo]], aunque existen otros tipos como el de [[millo]] o en menor medida el de [[garbanzo]]. Es también relativamente frecuente aquel de tipo mixto, trigo-millo. Desde incluso antes de la conquista de Canarias ya servía de sustento para los guanches. En posteriores tiempos de hambruna y escasez de alimentos formó parte de la dieta popular canaria. Hoy en día se utiliza como plato único (gofio escaldado) o como complemento en platos de distinta índole, carnes, pescados, potajes, postres, incluso algún cocinero de prestigio ha confeccionado [[helado]]s de gofio recibiendo buena crítica al respecto.&lt;br /&gt;
&lt;br /&gt;
===Repostería===&lt;br /&gt;
La [[repostería]] en Tenerife se encuentra representada y fuertemente influenciada por la repostería palmera, con exquisiteces como el bienmesabe, la leche asada, el Príncipe Alberto, el frangollo, los huevos moles, el quesillo y un largo etcétera. Del mismo modo, los rosquetes, las truchas, y diversos tipos de pasteles, entre los que se encuentran los laguneros y los singulares rosquetes de Guía de Isora, forman parte de este capítulo del recetario.&lt;br /&gt;
&lt;br /&gt;
===Vinos===&lt;br /&gt;
El cultivo de la [[vid]] en el archipiélago y especialmente en Tenerife nace tras la conquista, cuando los colonizadores traen variedades de viñas y comprueban la nobleza que adquirían los caldos canarios. En los siglos XVI y XVII, el [[vino]] alcanza un gran peso en la economía tinerfeña pues son muchas las familias que se dedicaban a su cultivo y posterior negocio. Especial mención merece el malvasía canario, que llegó a ser considerado el mejor vino del mundo y era ansiado por las cortes europeas y las mayores bodegas de Europa y América. Escritores como [[William Shakespeare]] o [[Walter Scott]] hacen referencia en algunas de sus obras a estos vinos. La isla presenta actualmente cinco denominaciones de origen: &#039;&#039;&#039;Abona&#039;&#039;&#039;, &#039;&#039;&#039;Valle de Güímar&#039;&#039;&#039;, &#039;&#039;&#039;Valle de La Orotava&#039;&#039;&#039;, &#039;&#039;&#039;Tacoronte-Acentejo&#039;&#039;&#039; e &#039;&#039;&#039;Ycoden-Daute-Isora&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
* [[:categoría:Tinerfeños|Tinerfeños ilustres]]&lt;br /&gt;
* [[Erupciones históricas de Tenerife]]&lt;br /&gt;
* [[Bandera de Tenerife]]&lt;br /&gt;
* [[Teide]]&lt;br /&gt;
* [[Auditorio de Tenerife]]&lt;br /&gt;
* [[Achinech]]&lt;br /&gt;
* [[Nivaria]]&lt;br /&gt;
&lt;br /&gt;
==Enlaces externos==&lt;br /&gt;
* [http://www.tenerife.es Cabildo Insular de Tenerife]&lt;br /&gt;
* [http://www.puntoinfo.idecnet.com/ Tenerife Punto de Información]&lt;br /&gt;
* [http://www.auditoriodetenerife.com Auditorio de Tenerife]&lt;br /&gt;
* [http://www.taliateatro.org Grupo Teatral Talía]&lt;br /&gt;
* [http://sapiens.ya.com/floraypoesia/flora.htm Flora silvestre de Tenerife (Por zonas)]&lt;br /&gt;
* [http://sapiens.ya.com/floraypoesia/indices.htm Flora silvestre de Tenerife (Indices alfabéticos)]&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Tenerife]]&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=Tenerife&amp;diff=218115</id>
		<title>Tenerife</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=Tenerife&amp;diff=218115"/>
		<updated>2026-02-06T05:07:18Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha_Isla |&lt;br /&gt;
 |bandera = [[Imagen:Flag of Tenerife.jpg|25px]]&lt;br /&gt;
 |imagen = [[Imagen:Nasa world wind - teneriffa.jpg|230px|Fotografía de satélite de Tenerife]]&lt;br /&gt;
 |mapa = [[Imagen:TF Canarias.jpg|230px|Mapa de situación de la isla de Tenerife]]&lt;br /&gt;
 |archipiélago = Islas Canarias&lt;br /&gt;
 |escudo = [[Imagen:HeráldicaTenerife.jpg|40px]]&lt;br /&gt;
 |superficie= 2.034,38 km&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; &amp;lt;!--Fuente: http://www.gobiernodecanarias.org/istac/estadisticas.html--&amp;gt;&lt;br /&gt;
 |océano = Océano Atlántico&lt;br /&gt;
 |coordenadas = 28° 16′ 07″ N 16° 36′ 20″ O&lt;br /&gt;
 |altitud = 3.718 m ([[Pico del Teide]])&lt;br /&gt;
 |capital = [[Santa Cruz de Tenerife]]&lt;br /&gt;
 |gentilicio = Tinerfeño/a.&lt;br /&gt;
 |población = 838.877 (censo de 2005)&lt;br /&gt;
 |densidad = 412,4 hab./km&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
 |presidente = Ricardo Melchior&lt;br /&gt;
 |partido = CC&lt;br /&gt;
 |tipo = -&lt;br /&gt;
|}}&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=Tenerife&amp;diff=218114</id>
		<title>Tenerife</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=Tenerife&amp;diff=218114"/>
		<updated>2026-02-06T05:07:00Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha_Isla |&lt;br /&gt;
 |bandera = [[Imagen:Flag of Tenerife.jpg|25px]]&lt;br /&gt;
 |imagen = [[Imagen:Nasa world wind - teneriffa.jpg|230px|Fotografía de satélite de Tenerife]]&lt;br /&gt;
 |mapa = [[Imagen:TF Canarias.jpg|230px|Mapa de situación de la isla de Tenerife]]&lt;br /&gt;
 |archipiélago = Islas Canarias&lt;br /&gt;
 |escudo = [[Imagen:HeráldicaTenerife.jpg|40px]]&lt;br /&gt;
 |superficie= 2.034,38 km&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; &amp;lt;!--Fuente: http://www.gobiernodecanarias.org/istac/estadisticas.html--&amp;gt;&lt;br /&gt;
 |océano = Océano Atlántico&lt;br /&gt;
 |coordenadas = 28° 16′ 07″ N 16° 36′ 20″ O&lt;br /&gt;
 |altitud = 3.718 m ([[Pico del Teide]])&lt;br /&gt;
 |capital = [[Santa Cruz de Tenerife]]&lt;br /&gt;
 |gentilicio = Tinerfeño/a.&lt;br /&gt;
 |población = 838.877 (censo de 2005)&lt;br /&gt;
 |densidad = 412,4 hab./km&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
 |presidente = Ricardo Melchior&lt;br /&gt;
 |partido = CC&lt;br /&gt;
 |tipo = -&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tenerife&#039;&#039;&#039; es una isla de [[Canarias]] situada en el [[Océano Atlántico]] frente a las costas africanas. Junto a [[La Palma]], [[La Gomera]] y [[El Hierro]] conforma la [[provincia de Santa Cruz de Tenerife]]. Su capital es [[Santa Cruz de Tenerife]], que además lo es también de Canarias conjuntamente con [[Las Palmas de Gran Canaria]]. Entre [[1833]] y [[1927]] Santa Cruz de Tenerife fué la capital única de Canarias, hasta que en 1927 un decreto ordenó que la capitalidad de Canarias sea compartida, que es como permanece en la actualidad.&lt;br /&gt;
[http://es.wikisource.org/wiki/Real_Decreto_de_30_de_noviembre_de_1833 &#039;&#039;Real Decreto de 30 de noviembre de 1833&#039;&#039;] &lt;br /&gt;
[http://www.gobiernodecanarias.org/tuestatuto/docs/1833-12-03%20Decreto%20de%20division%20provincial.pdf &#039;&#039;Real Decreto de 30 de noviembre de 1833&#039;&#039;]&lt;br /&gt;
Otra ciudad con gran importancia para la isla y Canarias es, [[San Cristóbal de La Laguna]] (tercera ciudad más importante del archipiélago, tras Santa Cruz de Tenerife y Las Palmas de Gran Canaria). Tenerife es un destino turístico importante en España y en el mundo.&lt;br /&gt;
&lt;br /&gt;
Tenerife, con 865.070 habitantes (casi un millón de habitantes), es la isla más poblada de Canarias y de [[España]]. Es además la isla canaria que más municipios posee en su territorio, 31 en total. Tiene el Área Metropolitana más grande y extensa del Archipiélago Canario con 366,85 kilómetros cuadrados ([[Área metropolitana de Santa Cruz de Tenerife-La Laguna]]). Por lo tanto, es también el área metropolitana más grande de la [[Unión Europea]] fuera de [[Europa]] (como región periférica).&lt;br /&gt;
&lt;br /&gt;
En Tenerife además se encuentra la mayor elevación de España, de las islas atlánticas y tercer volcán más grande del mundo desde su base, El [[Teide]], declarado también [[Patrimonio de la Humanidad]]. &lt;br /&gt;
[http://www.webtenerife.com/PortalTenerife/Home/Disfruta+sin+perderte+nada/Mas+sobre+Tenerife/Naturaleza/Espacios+naturales/Parque+Nacional+de+El+Teide/?Lang=es Parque nacional del Teide: web oficial de Turismo de Tenerife]&lt;br /&gt;
&lt;br /&gt;
== Toponimia ==&lt;br /&gt;
Son diversos los nombres que las distintas culturas han atribuido a Tenerife a lo largo de la historia. Así por ejemplo, para los [[guanche]]s, la isla recibía el nombre de &#039;&#039;&#039;Achined, [[Achinet]]&#039;&#039;&#039; o &#039;&#039;&#039;Chenet&#039;&#039;&#039;, aunque en función de la bibliografía que se consulte, la nómina puede adquirir diferentes variaciones ortográficas. Los [[Antigua Roma|romanos]] se referían a ella como &#039;&#039;&#039;[[Nivaria]]&#039;&#039;&#039; (del latín &#039;&#039;nix&#039;&#039;, &#039;&#039;nivis&#039;&#039;, &#039;&#039;nieve&#039;&#039;), en clara referencia a las nieves posadas sobre el volcán conocido como el [[Teide]]. Los nombres de Achined y Nivaria todavía se utilizan en referencia a Tenerife, sobre todo en un sentido patriótico por los habitantes de la isla. En esa misma dirección apuntan algunos mapas de los siglos XIV y XV, que de manos de Bontier y Le Verrier se refieren a la isla como &#039;&#039;&#039;Isla del Infierno&#039;&#039;&#039; a razón de los procesos eruptivos de los que el volcán era protagonista. Finalmente, el propio Teide es el responsable del nombre actual de la isla, ya que fue dado por los benahoaritas (aborígenes de La Palma) según las palabras &#039;&#039;&#039;Tene&#039;&#039;&#039; (&#039;&#039;montaña&#039;&#039;) e &#039;&#039;&#039;ife&#039;&#039;&#039; (&#039;&#039;blanca&#039;&#039;). Posteriormente, la castellanización del nombre provocó que se añadiera una &amp;quot;r&amp;quot; para unir ambas palabras obteniendo como resultado Tenerife.&lt;br /&gt;
&lt;br /&gt;
==Descripción==&lt;br /&gt;
Su orografía es abrupta y volcánica, producto de erupciones (la más reciente fue el Chinyero en 1909). Es la isla más poblada de Canarias y de España con 838.877 habitantes [http://www.ine.es Instituto Nacional de Estadística de España], 01-01-2005 y 2.034 [[kilómetro cuadrado|km²]] de superficie.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Panorama Teide BW.jpg|800px|thumb|center|Panorámica del circo de Las Cañadas del Teide.]]&lt;br /&gt;
&lt;br /&gt;
===Situación y extensión===&lt;br /&gt;
Tenerife es la mayor de las siete islas que componen el Archipiélago Canario; está situada entre los paralelos 28 y 29 N y los meridianos 16 y 17 O, ligeramente al Norte del Trópico de Cáncer, y ocupa una posición central entre las islas de Gran Canaria, La Gomera y La Palma.&lt;br /&gt;
&lt;br /&gt;
La isla se encuentra a algo más de 300 Kms. del continente africano y a unos 1.000 Kms. de la Península Ibérica&lt;br /&gt;
&lt;br /&gt;
Tiene 2.034 km² de superficie y una curiosa forma triangular, alzándose en su centro el gigantesco [[Pico del Teide]], que con sus 3.718 metros de altura es el punto más elevado de toda el Estado Español.&lt;br /&gt;
&lt;br /&gt;
Para referirse a sus habitantes se utiliza el gentilicio &#039;&#039;&#039;Tinerfeño&#039;&#039;&#039;. Otro gentilicio utilizado, generalmente por personas de otras islas, es el de &#039;&#039;&#039;chicharrero&#039;&#039;&#039;, el cual en principio iba referido sólo a los habitantes de Santa Cruz de Tenerife, capital de la isla, y teniendo una cierta carga despectiva en su origen.&lt;br /&gt;
&lt;br /&gt;
=== Origen y formación ===&lt;br /&gt;
[[Imagen:Formación Tenerife.jpg|thumb|180px|right|Esquema general de la formación de Tenerife.]]&lt;br /&gt;
Tenerife es una isla de origen volcánico, cuya formación comenzó a gestarse en el fondo oceánico hace unos 20-50 millones de años (m.a.).&lt;br /&gt;
&lt;br /&gt;
Según una de las teorías más aceptadas actualmente por la comunidad científica (&#039;&#039;&#039;Teoría de los bloques levantados&#039;&#039;&#039;), el ascenso de [[magma]] procedente del manto terrestre se produce en periodos de actividad [[tectónica de placas|tectónica]] a partir de fallas o fracturas que existen en el [[placa oceánica|fondo oceánico]]. Éstas siguen los ejes estructurales de la isla, y se conformaron durante la orogenia [[Alpes|Alpina]] de la [[Era Terciaria]] por el movimiento de la [[placa Africana]]. Estas erupciones de tipo fisural submarino originan las denominadas [[lava#lava almohadillada|lavas almohadilladas o pillow-lavas]], que se producen por el rápido enfriamiento que experimenta el magma al establecer contacto con el agua, obteniendo así una forma muy característica. Estos materiales se fueron acumulando y construyendo el edificio insular bajo el mar. A medida que éste se aproximaba a la superficie, los gases, debido a la disminución de la presión circundante, se iban liberando del magma y los episodios vulcanológicos pasaban de ser tranquilos a tener un carácter marcadamente explosivo, formando materiales fragmentarios.&lt;br /&gt;
&lt;br /&gt;
Tras largo tiempo de acumulación de materiales, el nacimiento de la isla se produjo a finales del [[Mioceno]] (Era Terciaria). Hace siete millones de años emergieron las zonas de [[Macizo de Teno|Teno]], [[Macizo de Anaga|Anaga]] y Macizo de Adeje, en la que se denomina &#039;&#039;Serie Basáltica Antigua&#039;&#039; o &#039;&#039;Serie I&#039;&#039;. Se constituyeron de este modo tres islas cronológica y estratigráficamente distintas en los extremos oeste, este y sur de la actual Tenerife.&lt;br /&gt;
[http://www.puntoinfo.idecnet.com/index.php?sectionID=2&amp;amp;lang=1&amp;amp;s=1&amp;amp;ID=160 Información del Cabildo de Tenerife]&lt;br /&gt;
&lt;br /&gt;
Hace aproximadamente 3 m.a. comienza un segundo ciclo volcánico (&#039;&#039;Formaciones Postmiocenas&#039;&#039; o &#039;&#039;Series Recientes II, III y IV&#039;&#039;), mucho más intenso, que incorpora elementos en la zona central de la isla, la cual también emerge y unifica en uno sólo a los tres edificios anteriormente descritos. La estructura conformada en ese momento recibe el nombre de &#039;&#039;Edificio pre-Cañadas&#039;&#039;, sobre cuyos restos se erigiría más tarde el &#039;&#039;Edificio Cañadas I&#039;&#039;. Este ultimó experimentó diversos colapsos y emitió una gran variedad de materiales explosivos que dieron lugar a las llamadas &#039;&#039;Bandas del sur&#039;&#039; (sur-sureste actual).&lt;br /&gt;
[http://www.gevic.net/info/contenidos/mostrar_contenidos.php?idcat=36&amp;amp;idcap=58&amp;amp;idcon=330 Gran Enciclopedia Virtual Interactiva de Canarias]&lt;br /&gt;
&lt;br /&gt;
Posteriormente, sobre las ruinas de este complejo surgiría el &#039;&#039;Edificio Cañadas II&#039;&#039;, ya por encima de los 2.500 metros, también con intensos procesos explosivos. Hace alrededor de 1 m.a. se inició la construcción de la &#039;&#039;Cordillera Dorsal&#039;&#039;, con un vulcanismo de tipo fisural, a partir de los restos de los edificios ya parcialmente desmantelados de la &#039;&#039;Serie I&#039;&#039;. La &#039;&#039;Cordillera Dorsal&#039;&#039; es la de mayor desarrollo altitudinal y longitudinal del Archipiélago Canario, con 1.600 metros de altura y 25 kilómetros de longitud. En este mismo espacio cronológico (hace 800.000 años) tienen lugar dos deslizamientos gravitacionales que motivaron la aparición de los valles de [[Valle de La Orotava|La Orotava]] y [[Valle de Güímar|Güímar]].&lt;br /&gt;
&lt;br /&gt;
Finalmente, ya en tiempos más próximos (200.000 años), comienzan las erupciones que levantarían el &#039;&#039;Edificio Pico Viejo-Teide&#039;&#039; en el centro de la isla, sobre la &#039;&#039;[[Caldera de Las Cañadas]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Orografía y paisaje ===&lt;br /&gt;
La abrupta orografía isleña y su variedad de climas dan como resultado un territorio de múltiples paisajes y formas, desde el [[Parque nacional del Teide|Parque Nacional del Teide]] con su amalgama de colores fruto de las sucesivas erupciones volcánicas, hasta los [[Acantilados de Los Gigantes]] con sus paredes verticales, pasando por zonas semidesérticas con plantas resistentes a la sequedad en el sur, o por ambientes de carácter meramente volcánico como es el [[Malpaís de Güímar]].&lt;br /&gt;
&lt;br /&gt;
También cuenta con playas naturales como la de [[El Médano]], con parajes protegidos en su entorno como Montaña Roja y Montaña Pelada, valles con cultivos tropicales y subtropicales, boscosos parajes de [[laurisilva]] en los macizos de [[Macizo de Anaga|Anaga]] y [[Macizo de Teno|Teno]] -con profundos y escarpados barrancos- y extensos bosques de pinos por encima de esta última formación vegetal.&lt;br /&gt;
&lt;br /&gt;
==== Macizos ====&lt;br /&gt;
[[Imagen:Anaga 2006.jpg|thumb|left|250px|Panorámica del Macizo de Anaga.]]&lt;br /&gt;
El &#039;&#039;&#039;macizo de [[Anaga]]&#039;&#039;&#039;, en el extremo nororiental de la isla, posee un perfil topográfico irregular y escabroso donde a pesar de no presentar grandes cotas, destaca el Pico del Inglés con 1.024 metros. Debido a la antigüedad de sus materiales (5,7 m. a.), a sus profundos procesos erosivos y a la densa red de diques que atraviesan el macizo, son numerosos los roques que aparecen en superficie, tanto de etiología fonolítica como traquítica. Existe una gran cantidad de barrancos escarpados y muy encajados en el terreno. En la costa de Anaga predominan los acantilados, por lo que existe un número escaso de playas, aún así, las que hay suelen coincidir con zonas de desembocadura de barrancos, algunas de rocas y otras de arena negra.&lt;br /&gt;
&lt;br /&gt;
El &#039;&#039;&#039;macizo de Teno&#039;&#039;&#039; se encuentra en el extremo noroccidental. Al igual que en Anaga, se trata de una zona de estructuras desmanteladas y hondos barrancos que se han originado por erosión. Sin embargo, aquí los materiales son más antiguos (aproximadamente 7,4 m. a.). Destacan la Montaña de Gala que con 1.342 metros representa la mayor altitud. El paisaje más singular de este Macizo se encuentra en su costa sur. Se trata de los Acantilados de Los Gigantes, con paredes verticales que llegan a alcanzar en algunos puntos los 500 metros de altura.&lt;br /&gt;
&lt;br /&gt;
El &#039;&#039;&#039;macizo de Adeje&#039;&#039;&#039; se sitúa en el extremo meridional de la isla, teniendo como mayor exponente al Roque del Conde, con 1.001 metros de altitud. El macizo no es tan apreciable por su reducida estructura inicial, hecho que añadido a la historia geológica del lugar ha potenciado un intenso desmantelamiento de sus materiales, perdiendo de ese modo su aspecto y envergadura original.&lt;br /&gt;
&lt;br /&gt;
==== Dorsales ====&lt;br /&gt;
La &#039;&#039;&#039;Cordillera dorsal o dorsal de Pedro Gil&#039;&#039;&#039; abarca desde el principio del monte de La Esperanza, a unos 750 metros de altitud aproximadamente, hasta la zona central de la isla, en las inmediaciones de la Caldera de Las Cañadas, siendo Izaña, su punto más alto, con 2.350 metros sobre el nivel del mar. Esta estructura se ha constituido a expensas de un vulcanismo fisural de tipo basáltico a través de uno de los ejes o directrices estructurales que han dado origen al vulcanismo de la isla.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La &#039;&#039;&#039;dorsal de Abeque&#039;&#039;&#039; se encuentra formada por una cadena de volcanes que unen el macizo de Teno con el edificio central insular Teide-Pico Viejo a partir de otro de los tres ejes o directrices estructurales de Tenerife. A esta dorsal pertenece el volcán histórico de Chinyero cuya última erupción se registró en 1909.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La &#039;&#039;&#039;dorsal Sur o dorsal de Adeje&#039;&#039;&#039; está al amparo del último de los ejes estructurales. Destacan los restos de su macizo como formación primigenia, así como las alineaciones de pequeños conos volcánicos y de roques esparcidos por toda esta zona del sur tinerfeño.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Edificio central ====&lt;br /&gt;
[[Imagen:Teide Tenerife4.jpeg|thumb|250px|right|Roque Cinchado y El Teide.]]&lt;br /&gt;
Las principales estructuras de Tenerife descritas en las líneas anteriores se ven culminadas en el edificio central, con el complejo Teide-Pico Viejo y el circo de Las Cañadas. Se trata de una semicaldera de 130 kilómetros cuadrados, que ha sido originada por un conjunto de procesos geológicos explicados en el epígrafe &#039;&#039;Origen y formación&#039;&#039;. El circo está parcialmente ocupado por el estratovolcán Teide-Pico Viejo y completado por los materiales que ha emitido en sus diferentes erupciones. Destacan en su interior los [[Roques de García]], entre los que está el más conocido, el Roque Cinchado. Otra formación llamativa son Los Azulejos, compuesto por fonolitas de colores verdosos que se han creado por actividad hidrotermal.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al sur de La Caldera destaca la [[Montaña de Guajara]], que con 2.718 metros es la de mayor altitud de las que constituyen el anfiteatro de Las Cañadas del Teide. Al pie de estas paredes se han creado [[cuenca endorreica|llanos endorreicos]] de materiales sedimentarios muy finos, siendo el más conocido el [[Llano de Ucanca]].&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El Pico del [[Teide]], con 3.718 metros sobre el nivel del mar y más de 7.000 sobre el fondo oceánico, es el punto más elevado de la isla, del territorio español y de todas las tierras emergidas del Atlántico. Este volcán, el tercero más grande del planeta, es el símbolo de Tenerife por antonomasia. Su situación central, sus importantes dimensiones, su silueta y su paisaje nevado lo dotan de una singular personalidad. Ya los aborígenes lo consideraban lugar de culto y adoración.&lt;br /&gt;
&lt;br /&gt;
Desde 1954, el Teide y todo el circo de su alrededor (aunque hubo una ampliación posterior de sus límites) está declarado como parque nacional. Además, desde junio de 2007 está incluido por la [[UNESCO]] dentro de los espacios [[Patrimonio de la Humanidad]] como bien natural.&lt;br /&gt;
Al oeste se encuentra el volcán Pico Viejo,. En un lateral de éste, se encuentra el Volcán de Chahorra o Narices del Teide, donde se produjo la última erupción que se ha dado en el entorno del Teide, en 1798.&lt;br /&gt;
&lt;br /&gt;
==== Valles ====&lt;br /&gt;
[[Imagen:Orotavatal.jpg|500px|thumb|left|Panorámica del Valle de La Orotava con el Teide al fondo.]]Los [[valle]]s son otra de las formas de relieve más destacadas. Los más importantes son el [[Valle de La Orotava]] y el [[Valle de Güímar]] que se han generado por el deslizamiento en masa de grandes cantidades de materiales hacia el mar, creando una hondonada en el terreno.&lt;br /&gt;
Existen otros valles que se distribuyen por diversos enclaves de la geografía de Tenerife, aunque, en este caso, de diferente naturaleza. Suelen ser valles intercolinares que se han conformado tras el depósito de mayor cantidad de materiales geológicos en lomas laterales, o simplemente cauces amplios de determinados barrancos que en su evolución han tomado el aspecto de típicos valles.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Barrancos ====&lt;br /&gt;
Tenerife, debido principalmente a su gran altitud y a su silueta en semejanza a un tejado de dos aguas, está surcada por gran cantidad de [[barranco]]s. Éstos constituyen uno de los elementos más característicos de su paisaje, originados por la erosión ejercida por la escorrentía superficial a lo largo de la historia. Destacan los barrancos de Ruiz, Fasnia y Güímar, Infierno y Erques, todos ellos declarados espacios naturales protegidos por las instituciones canarias.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
[[Imagen:Tenerife88.jpg|thumb|right|250px|Montaña Roja al fondo, Playa de La Tejita.]]&lt;br /&gt;
&lt;br /&gt;
==== Costas ====&lt;br /&gt;
Las costas son, a grosso modo, accidentadas y abruptas, aunque lo son más en la zona norte que en la sur. No obstante 67,14 kilómetros de la costa tinerfeña lo representan playas, sólo superada en este aspecto por la isla de [[Fuerteventura]].En el litoral septentrional son frecuentes las playas de cantos rodados o de arena negra, mientras que en la vertiente sur y suroeste de la isla predominan las playas con arenas más finas y de tonalidades más claras.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flora y Fauna===&lt;br /&gt;
La isla de Tenerife disfruta de una [[diversidad ecológica]] pese a su reducida superficie, que es consecuencia de unas condiciones ambientales especiales, ya que la accidentada orografía reinante modifica localmente las condiciones climáticas generales, originando una exquisita variedad de [[microclima|microclimas]]. Esta vasta existencia de microclimas y, por lo tanto, de hábitats naturales, se hace manifiesta en la vegetación insular, constituida por una flora rica y variada (1400 especies de plantas superiores), entre las que destacan numerosos [[endemismo|endemismos]] canarios (200) y tinerfeños (140). Al concentrar este patrimonio vegetal de unas 140 especies exclusivas,  la isla de Tenerife muestra la mayor relación de endemismos florísticos de la denominada [[Macaronesia]]. Además, la diferente composición química de los diversos materiales volcánicos que han construído el edificio insular, siempre bajo la acción combinada de los factores climáticos, dan lugar a una gran diversidad de suelos. La conjunción de estos agentes determina la presencia de múltiples hábitats que albergan numerosas comunidades de plantas y animales que constituyen los singulares [[ecosistemas]] de Tenerife. Antes de la llegada de los aborígenes, Canarias y en especial Tenerife estaba habitada por animales endémicos prehistóricos, la mayoria extintos como por ejemplo; los lagartos gigantes ([[Lacerta goliath]] y [[Lacerta maxima]]), o la rata gigante ([[Canariomys bravoi]]). &lt;br /&gt;
&lt;br /&gt;
El estudio de la flora y la fauna tinerfeña puede realizarse de un modo más ordenado si es clasificada según los diferentes pisos ecológicos en los que se divide el terreno de la isla. Dicha división atiende especialmente a la orientación norte o sur de las vertientes de la isla y por supuesto a la altitud: &lt;br /&gt;
*&#039;&#039;&#039;Cardonal - Tabaibal:&#039;&#039;&#039; 0 – 700 m: este estrato se caracteriza por una fuerte insolación y escasez de precipitaciones. En él destacan como especies vegetales las [[Euphorbia atropurpurea|tabaibas]], los cardones y cardoncillos, bejeques,...En cuanto a la fauna, son pobres las especies animales vertebradas en este ecosistema. Si acaso, algunas aves o reptiles. En cambio los insectos se encuentran muy bien representados.&lt;br /&gt;
*&#039;&#039;&#039;Bosques Termófilos:&#039;&#039;&#039; 200 - 600 m: este piso posee mayor grado de humedad y precipitaciones, y una menor insolación. Son importantes, dentro de las especies arbóreas las palmeras,  las sabinas, los acebuches y una serie de endemismos como peralillos, guaidiles, españeros, malvas de risco y cinerarias. En relación con la fauna es preciso citar a la mariposa vanessa vulcania y aves insectívoras como la curruca cabecinegra y el capirote.&lt;br /&gt;
[[Image:Eidechsen Teide.jpg|thumb|left|230px|Gallotia Galloti, especie endémica de Tenerife]]&lt;br /&gt;
*&#039;&#039;&#039;Laurisilva:&#039;&#039;&#039; 500 - 1.000 m: se trata de un [[bosque]] denso de grandes árboles, herederos de la flora de la [[Era Terciaria]], que crecen en zonas de abundantes nieblas y lluvias frecuentes. Las especies vegetales superiores que abundan son laureles, tilos, viñátigos, barbusanos, y otras de menor tamaño como el [[canarina canariensis|bicácaro]], la cresta de gallo, la corregüela y una gran variedad de helechos. Con respecto a la fauna, la [[laurisilva]] es el estrato más rico en invertebrados y con mayor porcentaje de endemismos, entre los que se encuentran lombrices, moluscos y sobre todo artrópodos. Dentro de la fauna vertebrada hay que mencionar algunas especies de murciélagos y dos aves endémicas en peligro de extinción como son las palomas turqué y rabiche.&lt;br /&gt;
[[Imagen:Tajinaste rojo.jpg|thumb|right|260px|Tajinaste rojo]]&lt;br /&gt;
*&#039;&#039;&#039;Fayal-Brezal:&#039;&#039;&#039; 1.000 – 1.500 m: se trata también de un bosque, pero en este caso más seco y pobre en especies. Destacan florísticamente las fayas, brezos, acebiños,...También abundan diferentes especies de setas que pueden ser tanto comestibles como muy venenosas.&lt;br /&gt;
*&#039;&#039;&#039;Pinar:&#039;&#039;&#039; 800 - 2.000 m: bosque de pinos en formación abierta que se caracteriza por un aumento de la insolación y por una menor uniformidad en las temperaturas diurnas-nocturnas y estacionales. Sobresale por encima de cualquier otra especie el [[pino canario]]. La fauna es poco diversa, pero existen dos aves endémicas de singular belleza como el pinzón azul y el pico picapinos.&lt;br /&gt;
*&#039;&#039;&#039;Alta montaña:&#039;&#039;&#039; por encima de 2.000 m: posee un clima seco, una insolación muy alta y temperaturas extremas. A pesar de estas exigentes condiciones, crecen endemismos vegetales de gran importancia científica y belleza como [[tajinaste|tajinastes]], retamas, codesos,  violeta del Teide,...y especies animales principalmente invertebradas como escarabajos, chinches, y mariposas.&lt;br /&gt;
Aún faltaría hablar de la extensa fauna marina de entre la que destacan viejas, meros, abades, salemas, samas, pargos,...Gran interés tienen también la tortuga boba y las colonias permanentes de ballenas y delfines que habitan el litoral sur de la isla.&lt;br /&gt;
Tenerife posee un inventario faunístico que asciende a 56 especies de aves, 13 de mamíferos terrestres, 5 de reptiles, varios miles de invertebrados, 2 de anfibios y 400 de peces además de algunas especies de tortugas marinas y cetáceos.&lt;br /&gt;
&lt;br /&gt;
=== Espacios naturales protegidos ===&lt;br /&gt;
[[Imagen:Espacios_protegidos_Tenerife.jpg|thumb|right|250px|Mapa de clasificación de los espacios protegidos.]]&lt;br /&gt;
Prácticamente la mitad de la isla (48,6%), La Red contempla hasta ocho categorías de protección distintas, todas ellas representadas en la isla: aparte del parque nacional del Teide, cuenta con el mayor parque natural de Canarias ([[Corona Forestal]]), dos parques rurales (Anaga y Teno), cuatro reservas naturales integrales, seis reservas naturales especiales, un total de catorce monumentos naturales, nueve paisajes protegidos y hasta seis sitios de interés científico. &lt;br /&gt;
El municipio de La Orotava, en gran parte a expensas del [[Parque Nacional del Teide]], y el de Santa Cruz de Tenerife que hace lo propio con el [[Parque rural de Anaga]] presentan, respectivamente, el 76% y el 74% de su extensión bajo protección. De la misma forma, el emplazamiento mayoritario del [[Parque rural de Teno]] al amparo del municipio de Buenavista del Norte hace que este disponga de una importante parte de su superficie protegida.&lt;br /&gt;
&lt;br /&gt;
===Clima===&lt;br /&gt;
A Tenerife se la conoce internacionalmente como la &amp;quot;Isla de la Eterna Primavera&amp;quot;. La atribución de esta denominación climática se produce en gran medida  gracias a los &#039;&#039;&#039;[[vientos alisios]]&#039;&#039;&#039;, cuya humedad, principalmente, se condensa en las zonas de [[Zona de medianías (Canarias)|medianías]] del norte y nordeste insular, constituyendo amplios mares de nubes que se disponen preferentemente entre los 600 y 1.800 metros de altura; otro factor que influye en la suavidad del clima de las Islas con respecto al que por latitud correspondería (Desierto del Sahara), es la &#039;&#039;&#039;[[corriente marina fría de Canarias]]&#039;&#039;&#039;, que enfría la temperatura de las aguas que bañan las costas y playas isleñas con respecto a la ambiental. Por último, la propia &#039;&#039;&#039;orografía tinerfeña&#039;&#039;&#039; también habría que tenerla en cuenta en esta terna de agentes encargados de hacer realidad el anteriormente citado eslogan. &lt;br /&gt;
&lt;br /&gt;
[[Imagen:Mar de nubes, Tenerife.jpg|thumb|left|250px|Mar de nubes en la Isla de Tenerife, visto desde unos 1800 metros de altitud.]]&lt;br /&gt;
&lt;br /&gt;
A grandes rasgos, el clima de Tenerife es moderado, templado y muy suave en cualquier estación del año. No hay períodos de frío pero tampoco los hay de calor asfixiante. Las temperaturas medias fluctúan entre los 17-18 ºC en invierno y los 24-25 ºC en la estación estival, aunque estos sean valores relativos y generales. Evidentemente se producen importantes contrastes, como el que se produce durante los meses de invierno, en los cuales es posible disfrutar del sol en zonas de costa y, sin embargo, 3.000 metros por encima poder contemplar la blanca estampa nevada del [[Teide]], lugar en el que nieva todos los años.&lt;br /&gt;
&lt;br /&gt;
[[Image:Masca Road.jpg|thumb|250px|right|Masca]]&lt;br /&gt;
Otro ejemplo de contraste climático lo encontraríamos en la ciudad de [[Santa Cruz de Tenerife|Santa Cruz]] con respecto a la ciudad de [[San Cristóbal de La Laguna|La Laguna]]. Municipios unidos físicamente pero distanciados en cuanto a condiciones climáticas. Generalmente Santa Cruz tiene durante todo el año un clima cálido con temperaturas sensiblemente superiores a las que se disfrutan en la aledaña La Laguna, donde frecuentemente hace más frío y existe mayor probabilidad de precipitaciones.&lt;br /&gt;
&lt;br /&gt;
El norte y el sur de Tenerife poseen igualmente diferentes características climáticas. En barlovento se registra un 73% de las precipitaciones totales además, la humedad relativa del aire es superior y la insolación inferior. Los máximos pluviométricos se registran en barlovento a una altitud media entre 1.000-1.200 m, casi exclusivamente en los montes de [[La Orotava]]. Pero quizás sea más significativo que todo el norte de la isla carezca de un espacio en el que la pluviosidad media sea inferior a los 250 mm anuales. En cambio, en la vertiente sur de la isla los valores pluviales son significativamente menores. Los únicos reductos sureños que se salvan de esta situación son [[Masca (Tenerife)|Masca]] y [[Güímar]], probablemente debido a sus características físicas que posibilitan una mayor presencia del alisio.&lt;br /&gt;
&lt;br /&gt;
A modo de anécdota es interesante saber que los médicos europeos, sobre todo ingleses y holandeses, del pasado [[siglo XIX]] elogiaban el clima del norte de Tenerife, y lo recomendaban a sus pacientes para aliviar dolencias de la edad y del aparato circulatorio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{tablabonita}} width=&amp;quot;567&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot;&lt;br /&gt;
| height=&amp;quot;17&amp;quot; | Datos climáticos&lt;br /&gt;
!| Ene&lt;br /&gt;
!| Feb&lt;br /&gt;
!| Mar&lt;br /&gt;
!| Abr&lt;br /&gt;
!| May&lt;br /&gt;
!| Jun&lt;br /&gt;
!| Jul&lt;br /&gt;
!| Ago&lt;br /&gt;
!| Sep&lt;br /&gt;
!| Oct&lt;br /&gt;
!| Nov&lt;br /&gt;
!| Dic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; | Ø Horas de sol/Día&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color:#000080;&amp;quot; | 5,9&lt;br /&gt;
| style=&amp;quot;background: #FFCC66; color:#000080;&amp;quot; | 6,6&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 7,1&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 7,7&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 8,8&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 9,8&lt;br /&gt;
| style=&amp;quot;background: #FF9900; color:#000080;&amp;quot; | 10,6&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 9,8&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 8,5&lt;br /&gt;
| style=&amp;quot;background: #FFCC66; color:#000080;&amp;quot; | 6,9&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color:#000080;&amp;quot; | 5,9&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color:#000080;&amp;quot; | 5,5&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; height=&amp;quot;16;&amp;quot; | Aire [°C]&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC; color: black;&amp;quot; | 17,9&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC; color: black;&amp;quot; | 17,9&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 18,6&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 19,0&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 20,4&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 22,2&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 24,3&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 25,0&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 24,3&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 22,8&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 20,6&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 18,7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; | Agua [°C]&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 19&lt;br /&gt;
| style=&amp;quot;background: #0033FF; color: black;&amp;quot; | 18&lt;br /&gt;
| style=&amp;quot;background: #0033FF; color: black;&amp;quot; | 18&lt;br /&gt;
| style=&amp;quot;background: #0033FF; color: black;&amp;quot; | 18&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 19&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 20&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 21&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 22&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 23&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 23&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 21&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 20&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; | Ø Días de lluvia&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===El Agua===&lt;br /&gt;
El suelo volcánico de Tenerife, generalmente de carácter poroso y permeable es motivo para que una considerable fracción del [[agua]] procedente de la lluvia, unida a aquella producto de condensaciones en zonas boscosas y a la proveniente del deshielo de las cumbres más elevadas de la isla, se infiltre en el subsuelo. La construcción de embalses y presas como principales métodos de obtención de agua esta desaconsejada debido a las mencionadas condiciones geológicas, que no permiten el almacenamiento del preciado líquido en superficie, así como a la irregularidad de las precipitaciones. De este modo, la mayor parte del agua (90%) procede de pozos y principalmente de [[Galería filtrante|galerías]], importantes sistemas que sirven para extraer el [[recurso hídrico]] del [[acuífero]]. Tenerife dispone en la actualidad de más de un millar de galerías perforadas .&lt;br /&gt;
&lt;br /&gt;
==[[Historia de Tenerife]]==&lt;br /&gt;
===Organización política anterior a la invasión===&lt;br /&gt;
El nombre original [[guanche]] de la isla era Achinet o Chenet. Unos cien años antes de la invasión, existía un [[mencey]] llamado Tinerfe el Grande, hijo del Mencey Sunta. Tinerfe tenía su corte en [[Adeje (Santa Cruz de Tenerife)|Adeje]] hasta que sus nueve hijos se rebelaron y se repartieron la isla en 9 menceyatos y 2 achimenceyatos independientes (llamados capitanías por los invasores). Los menceyatos y sus menceyes (por orden de descendencia) fueron los siguientes:&lt;br /&gt;
&lt;br /&gt;
* [[Menceyato de Taoro|Taoro]]: actualmente [[Puerto de la Cruz]], [[La Orotava]], [[La Victoria de Acentejo]], [[La Matanza de Acentejo]], [[Los Realejos]] y [[Santa Úrsula (Santa Cruz de Tenerife)|Santa Úrsula]] sus menceyes fueron Bentinerfe, Inmobach, [[Bencomo]] y Bentor.&lt;br /&gt;
* [[Menceyato de Güímar|Güímar]]: en la actualidad [[El Rosario (Santa Cruz de Tenerife)|El Rosario]], [[Candelaria (Santa Cruz de Tenerife)|Candelaria]], [[Arafo (Santa Cruz de Tenerife)|Arafo]] y [[Güímar (Santa Cruz de Tenerife)|Güímar]] y sus menceyes fueron Acaymo, Añaterve y Guetón.&lt;br /&gt;
* [[Menceyato de Abona|Abona]]: [[Fasnia (Santa Cruz de Tenerife)|Fasnia]], [[Arico]], [[Granadilla de Abona]], [[San Miguel de Abona]], [[Arona (Santa Cruz de Tenerife)|Arona]] y sus menceyes fueron Atguaxoña y Adxoña (o Adjona).&lt;br /&gt;
* [[Menceyato de Anaga|Anaga]]: [[Santa Cruz de Tenerife]] y [[San Cristóbal de La Laguna]] (la zona de la propia laguna) y sus menceyes fueron beneharo y Beneharo II.&lt;br /&gt;
* [[Menceyato de Tegueste|Tegueste]]: [[Tegueste (Santa Cruz de Tenerife)|Tegueste]] y una zona costera de [[San Cristóbal de La Laguna|La Laguna]] y sus menceyes fueron Tegueste, Tegueste II y Teguaco.&lt;br /&gt;
* [[Menceyato de Tacoronte|Tacoronte]]: [[Tacoronte (Santa Cruz de Tenerife)|Tacoronte]] y [[El Sauzal (Santa Cruz de Tenerife)|El Sauzal]] y sus menceyes fueron Rumén y Acaymo.&lt;br /&gt;
* [[Menceyato de Icode|Icode]]: [[San Juan de la Rambla]], [[La Guancha (Santa Cruz de Tenerife)|La Guancha]], [[Garachico (Santa Cruz de Tenerife)|Garachico]] e [[Icod de los Vinos]] y sus menceyes fueron Chincanayro y Pelicar.&lt;br /&gt;
* [[Menceyato de Daute|Daute]]: [[El Tanque]], [[Los Silos (Santa Cruz de Tenerife)|Los Silos]], [[Buenavista del Norte |Buenavista]] y [[Santiago del Teide]] y sus menceyes fueron Cocanaymo y Romén.&lt;br /&gt;
* [[Menceyato de Adeje|Adeje]]: [[Guía de Isora]], [[Adeje (Santa Cruz de Tenerife)|Adeje]] y [[Vilaflor (Santa Cruz de Tenerife)|Vilaflor]] y sus menceyes fueron Atbitocazpe, Pelinor, e Ichasagua.&lt;br /&gt;
&lt;br /&gt;
También se encontraba el Achimenceyato de [[Punta del Hidalgo]] gobernado por Aguahuco (el &amp;quot;Hidalgo pobre&amp;quot;, hijo ilegítimo del Gran Tinerfe) y Zebenzui.&lt;br /&gt;
&lt;br /&gt;
En cuanto a las creencias, la [[Mitología guanche|religión guanche]] era [[Politeísmo|politeísta]] aunque el culto astral estaba generalizado. Junto a él había una religiosidad [[animista]] que sacralizaba ciertos lugares, fundamentalmente roques y montañas. Entre los principales dioses guanches se podrían destacar; [[Achamán]] (dios del cielo y supremo creador), [[Chaxiraxi]] (diosa madre identificada más tarde con la [[Virgen de Candelaria]]), [[Magec]] (dios del sol) y [[Guayota]] (el demonio) entre otros muchos dioses y espíritus ancestrales. Especialmente singular era el culto a los muertos, practicándose la [[momificación]] de cadáveres.&lt;br /&gt;
&lt;br /&gt;
===Invasión===&lt;br /&gt;
Conocida por los romanos como &#039;&#039;[[Nivaria]]&#039;&#039; (del latín &#039;&#039;nix&#039;&#039;, &#039;&#039;nivis&#039;&#039;, &amp;quot;nieve&amp;quot;), en clara referencia a las nieves posadas sobre el volcán conocido como el [[Teide]]. El nombre de la isla también guarda relación con el volcán, ya que fue puesto por los [[La_Palma#Los_abor.C3.ADgenes|benehaoritas]]  (aborígenes de La Palma): &amp;quot;Tene-&amp;quot; (montaña) &amp;quot;-ife&amp;quot; (blanca), la castellanización del nombre provocó que se añadiera una -r para unir ambas palabras quedando &#039;&#039;&#039;Tenerife&#039;&#039;&#039;. Para los nativos de Tenerife, la isla era conocida como &#039;&#039;Chenech&#039;&#039;, &#039;&#039;Chinech&#039;&#039; o &#039;&#039;[[Achinech]]&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Tenerife a la hora de su inv asiónse componía de nueve &#039;&#039;menceyatos&#039;&#039;, nombre por el que se conocía a los pequeños reinos guanches. Sin embargo las fuerzas militares de la Corona de Castilla bajo el mando del Adelantado (&amp;quot;gobernador militar&amp;quot;) [[Alonso Fernández de Lugo]], sufrieron una derrota a manos de los [[guanche]]s en la primera [[Batalla de Acentejo]] en [[1494]]. Los guanches, superados por la tecnología y por las nuevas enfermedades a las cuales no eran inmunes, cayeron frente a las tropas de la [[Corona de Castilla]] el [[25 de diciembre]] de [[1495]]. &lt;br /&gt;
&lt;br /&gt;
Como en el resto de las Islas, los aborígenes fueron esclavizados y una buena parte de la población indígena sucumbió a las enfermedades importadas, al mismo tiempo que los inmigrantes provenientes de protectorados del Imperio Español (Portugal, Flandes, Italia, Alemania) se asentaban en la isla. Los bosques de [[pino canario]] de Tenerife fueron cortados para dejar paso al cultivo de la [[caña de azúcar]] en [[1520]]. En siglos sucesivos, la economía de la isla se centró en el cultivo de otras materias tales como la [[viña]] y la [[Cochinilla (insecto)|cochinilla]] para hacer los tintes, así como el [[plátano]].&lt;br /&gt;
&lt;br /&gt;
===El ataque de Horacio Nelson===&lt;br /&gt;
[[Imagen:Sir_Horatio_Nelson_when_wounded_at_Teneriffe.jpg|thumb|left|260px|Horacio Nelson cae herido durante el ataque]]&lt;br /&gt;
Tenerife fue atacada, como las otras islas, por [[Piratería en Canarias|corsarios]] de varias nacionalidades (ingleses, franceses, holandeses y berberiscos) varias veces a lo largo de su historia, según el devenir de las alianzas y guerras de España. De entre estos ataques destaca por su lugar en la Historia el [[Ataque a Santa Cruz de Tenerife|ataque de los británicos de 1797]]. El [[25 de julio]], el Almirante [[Horacio Nelson]] atacó Santa Cruz de Tenerife, capital de la isla y Jefatura de la Capitanía General. Tras un feroz ataque, la defensa organizada por el [[Antonio Gutiérrez de Otero|General Gutiérrez]] repelió a los británicos. Nelson perdió su brazo derecho por una bala de cañón (dice la leyenda que del cañón &amp;quot;Tigre&amp;quot;) mientras intentaba desembarcar en la orilla de la costa de la zona de &amp;quot;Paso Alto&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
El [[5 de septiembre]], otro intento de desembarco en la región de Puerto Santiago fue repelido por los habitantes del [[Santiago_del_Teide|Valle de Santiago del Teide]], que lanzaron piedras a los británicos desde lo alto de los Acantilados de Los Gigantes.&lt;br /&gt;
&lt;br /&gt;
===Historia reciente===&lt;br /&gt;
Otros visitantes menos hostiles llegarían a la isla en siglos sucesivos. El naturalista [[Alexander von Humboldt]] ascendió el pico del Teide y comentó la belleza de la isla. Numerosos turistas comenzaron a visitar Tenerife a partir de la década de [[1890]], especialmente las ciudades norteñas de [[Puerto de la Cruz]] (primer municipio turístico de Tenerife mediante orden ministerial del 13 de octubre de 1955 que lo declaró ’Lugar de Interés Turístico’) y Santa Cruz de Tenerife.&lt;br /&gt;
&lt;br /&gt;
En marzo de [[1936]], antes de subir al poder, [[Francisco Franco]] fue destinado a Tenerife por el Gobierno Republicano, temeroso de su influencia militar y política, con el fin de alejarlo de los centros de poder. En el Monte de La Esperanza en el municipio tinerfeño de [[El_Rosario_(Santa_Cruz_de_Tenerife)|El Rosario]], Franco organizó la conspiración militar que daría lugar a la [[Guerra civil española]] y posterior caída de la [[II República Española]]. Las Islas Canarias cayeron bajo el bando de los nacionales en julio de [[1936]] y su población sufrió las masivas ejecuciones de opositores al nuevo régimen fascista. En los años 50, la miseria de la posguerra hizo que miles de tinerfeños emigrasen a [[América latina]], principalmente a [[Cuba]] y [[Venezuela]]. &lt;br /&gt;
&lt;br /&gt;
[[Colisión_de_1977_en_Los_Rodeos|La colisión]] ocurrida el [[27 de marzo]] de [[1977]] en el [[aeropuerto de Los Rodeos]], situado en el norte de la isla, era el desastre mortal de aviación más importante de la historia hasta los [[Atentados del 11 de septiembre de 2001|atentados del 11 de septiembre de 2001]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Símbolos de la isla==&lt;br /&gt;
[[Imagen:Flag of Tenerife.jpg|left|thumb|160px|Bandera de Tenerife]]&lt;br /&gt;
[[Image:escudo_tenerife.jpg|left|thumb|160px|Escudo del Cabildo Insular de Tenerife.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;La bandera&#039;&#039;&#039; fue adoptada originariamente en 1845 a modo de distintivo o bandera de matrícula de la que en aquel entonces se denominaba provincia marítima de Canarias con base en el Puerto de Santa Cruz de Tenerife. En la actualidad, esta enseña representa a toda la isla de Tenerife. Fue aprobada a instancia del [[Cabildo Insular de Tenerife|Cabildo Insular]] por Orden del Gobierno de Canarias el 9 de mayo de 1989 y publicada el 22 de mayo de 1989 en el Boletín Oficial de Canarias. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;El escudo heráldico&#039;&#039;&#039; de Tenerife fue otorgado mediante diploma real el 23 de marzo de 1510, concedido por el Rey Don Fernando V &amp;quot;El Católico&amp;quot;, fue expedido en Madrid a nombre de su hija Doña Juana I, Reina de Castilla. El escudo se describe en campo de oro, con un San Miguel (pues la isla fue conquistada el día de San Miguel) armado superando a una montaña de su color natural de la que brotan llamas, y que representa al pico del Teide. Bajo esta montaña la isla de sinople sobre ondas azul y plata. A la derecha se observa un castillo de gules, y a la izquierda un león rampante de gules. El escudo que usa el [[Cabildo Insular de Tenerife|Cabildo Insular]] se diferencia del que usa el [[San Cristóbal de La Laguna|Ayuntamiento de La Laguna]] en el lema que aparece en la bordura y en el añadido de unas ramas de palma.&lt;br /&gt;
&lt;br /&gt;
Según una ley del [[Gobierno de Canarias]] los símbolos [[naturaleza|naturales]] de la isla son el [[pinzón azul]] y el [[dracaena draco|drago]] .&lt;br /&gt;
&lt;br /&gt;
==Órgano de gobierno==&lt;br /&gt;
El órgano de gobierno de la isla de Tenerife es el [[Cabildo Insular de Tenerife]]. La organización política de Canarias se caracteriza porque no posee órgano político provincial sino que cada isla posee un cabildo insular propio. Desde que se constituyó en marzo de 1913 dispone de una amplia serie de competencias propias, hoy recogidas en el [[Estatuto de Autonomía de Canarias]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Municipios===&lt;br /&gt;
&lt;br /&gt;
[[Imagen:MapaMunicipiosTenerife.jpg|thumb|center|400px|División municipal de la isla de Tenerife]]&lt;br /&gt;
&lt;br /&gt;
La isla de Tenerife está dividida en 31 municipios.&lt;br /&gt;
&lt;br /&gt;
De todos ellos, sólo tres no tienen costa: [[Tegueste (Santa Cruz de Tenerife)|Tegueste]], [[El Tanque]] y [[Vilaflor (Santa Cruz de Tenerife)|Vilaflor]] que destaca además por ser el municipio más alto de toda [[Canarias]] al tener su capital a 1.400 metros de altitud.&lt;br /&gt;
&lt;br /&gt;
El municipio más extenso con 207,31 km² es el de [[La Orotava]], que abarca gran parte del [[Parque nacional del Teide]]. El municipio más pequeño de la isla y del archipiélago es [[Puerto de la Cruz]], con una superficie inferior a los 9 km².&lt;br /&gt;
&lt;br /&gt;
La gran mayoría de estos municipios confluyen en la zona de cumbre central de la isla y a partir de ahí se extienden hacia la costa, orientándose unos hacia el norte y otros hacia el sur.&lt;br /&gt;
&lt;br /&gt;
A su vez, es frecuente encontrar otro tipo de división insular, es aquella que establece el territorio según una Zona Metropolitana, alrededor del área de influencia de las ciudades de Santa Cruz y La Laguna (&#039;&#039;véase&#039;&#039; [[Área metropolitana de Tenerife]]), Zona Norte (aquellos municipios que se abren al océano por el norte) y Zona Sur (aquellos que lo hacen hacia el sur). Esta división junto con la municipal se puede observar en el mapa de la derecha.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la relación de todos los municipios tinerfeños ordenados alfabéticamente: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; align=&amp;quot;CENTER&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Adeje (Santa Cruz de Tenerife)|Adeje]]&lt;br /&gt;
*[[Arafo (Santa Cruz de Tenerife)|Arafo]]&lt;br /&gt;
*[[Arico]]&lt;br /&gt;
*[[Arona (Santa Cruz de Tenerife)|Arona]]&lt;br /&gt;
*[[Buenavista del Norte]]&lt;br /&gt;
*[[Candelaria (Santa Cruz de Tenerife)|Candelaria]]&lt;br /&gt;
*[[Fasnia (Santa Cruz de Tenerife)|Fasnia]]&lt;br /&gt;
*[[Garachico (Santa Cruz de Tenerife)|Garachico]]&lt;br /&gt;
*[[Granadilla de Abona]]&lt;br /&gt;
*[[La Guancha (Santa Cruz de Tenerife)|La Guancha]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Guía de Isora]]&lt;br /&gt;
*[[Güímar (Santa Cruz de Tenerife)|Güímar]]&lt;br /&gt;
*[[Icod de los Vinos]]&lt;br /&gt;
*[[La Matanza de Acentejo]]&lt;br /&gt;
*[[La Orotava]]&lt;br /&gt;
*[[Puerto de la Cruz]]&lt;br /&gt;
*[[Los Realejos]]&lt;br /&gt;
*[[El Rosario (Santa Cruz de Tenerife)|El Rosario]]&lt;br /&gt;
*[[San Cristóbal de La Laguna]]&lt;br /&gt;
*[[San Juan de la Rambla]]&lt;br /&gt;
*[[San Miguel de Abona]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Santa Cruz de Tenerife (Santa Cruz de Tenerife)|Santa Cruz de Tenerife]]&lt;br /&gt;
*[[Santa Úrsula (Santa Cruz de Tenerife)|Santa Úrsula]]&lt;br /&gt;
*[[Santiago del Teide]]&lt;br /&gt;
*[[El Sauzal (Santa Cruz de Tenerife)|El Sauzal]]&lt;br /&gt;
*[[Los Silos (Santa Cruz de Tenerife)|Los Silos]]&lt;br /&gt;
*[[Tacoronte (Santa Cruz de Tenerife)|Tacoronte]]&lt;br /&gt;
*[[El Tanque]]&lt;br /&gt;
*[[Tegueste (Santa Cruz de Tenerife)|Tegueste]]&lt;br /&gt;
*[[La Victoria de Acentejo]]&lt;br /&gt;
*[[Vilaflor (Santa Cruz de Tenerife)|Vilaflor]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Demografía ===&lt;br /&gt;
La isla de Tenerife, la más poblada del archipiélago, albergaba a fecha de 1 de enero de 2006 y según fuentes del [[Instituto Nacional de Estadística de España|INE]] un total de 852.945 habitantes censados, de los cuáles, más de un 26% (223.148 habitantes) lo estaban en su capital, [[Santa Cruz de Tenerife]], y cerca del 50% (423.022 personas) en su [[Área metropolitana de Santa Cruz de Tenerife-La Laguna|área metropolitana]]. A la ciudad de Santa Cruz de Tenerife le siguen en población [[San Cristóbal de La Laguna]] (142.161), [[Arona]] (69.100), [[La Orotava]] (40.644), [[Adeje]] (36.764), [[Los Realejos]] (36.746), [[Granadilla de Abona]] (34.595) y [[Puerto de la Cruz]] (30.585). Hasta ahí los municipios que sobrepasan los 30.000 habitantes. El municipio de [[Vilaflor]] es el que cuenta con menor población de toda la isla (1.905). Además, Tenerife registra un muy alto nivel de población no censada ya que el elevado número de turistas que recibe anualmente y los crecientes fenómenos migratorios lo ponen de manifiesto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gentilicio==&lt;br /&gt;
&amp;lt;!--Para referirse a sus habitantes se utiliza oficialmente el gentilicio &#039;&#039;&#039;tinerfeño&#039;&#039;&#039;, si bien el gentilicio popular es chicharrero. Chicharrero era un nombre inicialmente dedicado a los habitantes de [[Santa Cruz de Tenerife]], haciendo alusión al antiguo carácter pesquero de la ciudad, pero el paso del tiempo ha llevado a que se denomine así a todos los habitantes de la isla. Aparece como origen en los encuentros deportivos de [[Lucha Canaria]] entre las islas de Tenerife y Gran Canaria.  Los grancanarios usaban esta terminología para referirse a los tinerfeños; y éstos a los de Gran Canaria les denominaban canariones.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El gentilicio formal es &amp;quot;Tinerfeño/a&amp;quot;, aunque también de manera coloquial se utiliza el gentilicio &amp;quot;[[chicharrero|Chicharrero/a]]&amp;quot;, aunque en la propia isla éste se reserva para los habitantes de la capital, Santa Cruz.&lt;br /&gt;
&lt;br /&gt;
El gentilicio &amp;quot;chicharrero&amp;quot; tiene su origen en un término despectivo empleado por los habitantes de la cercana ciudad de [[San Cristóbal de La Laguna|La Laguna]], entonces capital de la isla, para los habitantes del entonces pobre y pequeño puerto de pescadores. Justamente por dicha pobreza debían los habitantes de Santa Cruz rebajarse a comer [[chicharro|chicharros]], un pescado pequeño y barato de relativa baja calidad, de donde procede el término, entonces despectivo. Con el tiempo y el crecimiento de Santa Cruz, hasta conseguir el traslado de la capitalidad desde La Laguna, bajo el reinado de [[Fernando VII]] ([[siglo XIX]]), sus ciudadanos tomaron el insulto a honra y asumieron como propio el gentilicio.&lt;br /&gt;
&lt;br /&gt;
==Economía==&lt;br /&gt;
[[Image:Botanico 2005.jpg|thumb|right|250px|Jardín Botánico en Puerto de la Cruz]]La [[economía]] tinerfeña, al igual que la de otras islas de Canarias, se basa fundamentalmente en el turismo. Ya en el siglo XIX y gran parte del XX destacaba la afluencia de turismo extranjero, sobre todo del [[Inglaterra|inglés]] debido a los intereses [[agricultura|agrarios]] que poseía en esta isla.&lt;br /&gt;
&lt;br /&gt;
[[Image:Beaches of Tenerife 17.JPG|thumb|left|250px|Playa del Duque, en el sur de Tenerife]]&lt;br /&gt;
Más tarde con las guerras mundiales este sector se resiente, pero entrada la segunda mitad del pasado siglo comienza a evolucionar de un modo muy notable. En un principio destaca el Puerto de la Cruz por su bondadoso clima y por todos los atractivos que el [[Valle de la Orotava|Valle norteño de La Orotava]] concentraba, pero persiguiendo captar el turismo de sol y playa, alrededor de 1980 nace el boom turístico del sur de Tenerife, donde destacan ciudades como Arona o Adeje, que hoy albergan más del 65% de las plazas [[hotel]]eras de toda la isla. Tenerife recibe cada año más de 5.000.000 de turistas, siendo de este modo, de entre todo el archipiélago canario, la isla preferida a este respecto. Sin embargo, este dato también pone de manifiesto la gran cantidad de recursos que esta actividad consume (espacio, [[energía]], agua, etc.). A pesar de que más del 60% del [[Producto interior bruto|PIB]] tinerfeño lo constituye el turismo, y en consecuencia el sector servicios, el sector primario y la industria son responsables del 40% restante. En cuanto a la agricultura destacan el [[Plátano de Canarias|cultivo de plátanos]], los [[tomate]]s, la [[vid]]es, las papas y las flores. La pesca supone también gran parte de la economía tinerfeña (Canarias es la segunda región pesquera del estado español). Ya finalmente, y a pesar de los diversos polígonos industriales que existen en el territorio insular, la importancia de la actividad industrial radica en la refinería de [[petróleo]]s de Santa Cruz de Tenerife, la cual suministra productos petrolíferos no sólo al archipiélago canario sino también al mercado [[península ibérica|peninsular]], [[África|africano]] y [[América|americano]].&lt;br /&gt;
&lt;br /&gt;
==Arte==&lt;br /&gt;
&lt;br /&gt;
===Literatura===&lt;br /&gt;
[[Imagen:Jose Viera y Clavijo.jpg|thumb|right|200px|José Viera y Clavijo]]&lt;br /&gt;
En los siglos XVI y XVII destaca, en el campo de la poesía épica, [[Antonio de Viana]]. Este escritor que nace en La Laguna compuso el poema &#039;&#039;Antigüedades de las Islas Afortunadas&#039;&#039;, un material de gran valor antropológico para entender las formas de vida de aquel entonces.&lt;br /&gt;
Ya posteriormente, en el llamado Siglo de las Luces (siglo XVIII) aparecen figuras relevantes de la Ilustración en Tenerife como [[José Viera y Clavijo]], [[Tomás de Iriarte]], [[Ángel Guimerá y Jorge]], [[Mercedes Pinto]] o [[Domingo Pérez Minik]], entre otros, que aportan sus obras dentro de esta escena [[literatura|literaria]].&lt;br /&gt;
&lt;br /&gt;
===Pintura===&lt;br /&gt;
El primer núcleo de arte [[pintura|pictórico]] en Tenerife se distingue en la ciudad de La Laguna, donde en el transcurso del siglo XVI aparecen algunos pintores de renombre. Más adelante se suman artistas de otros lugares como Garachico, Santa Cruz, La Orotava y Puerto de la Cruz. Originarios de La Orotava son dos de los mejores pintores del archipiélago del siglo XVII, nos referimos a [[Cristóbal Hernández de Quintana]] y [[Gaspar de Quevedo]], con numerosas obras distribuidas por iglesias de la isla.&lt;br /&gt;
En el Puerto de la Cruz, concretamente en la [[Iglesia de Nuestra Señora de la Peña de Francia (Puerto de la Cruz)|iglesia de Nuestra Señora de la Peña de Francia]], se puede contemplar la aportación realizada por [[Luis de la Cruz y Ríos]]. Nacido en 1.775, el que fuera pintor de cámara del rey [[Fernando VII]] y miniaturista, obtiene un reconocido prestigio en la Corte, donde se le conoce como &#039;&#039;El Canario&#039;&#039;. &lt;br /&gt;
En el año 1.849 nace en Santa Cruz de Tenerife el paisajista [[Valentín Sanz]]. El Museo Municipal de Bellas Artes de Santa Cruz cuenta con una abundante muestra de su quehacer. También en este museo capitalino se pueden observar cuadros de [[Juan Rodríguez Botas]] (1.880-1.917), quien es considerado el primer impresionista canario.&lt;br /&gt;
Del mismo modo cabe citar, dentro del grupo expresionista, a [[Mariano de Cossío]]. A este autor hay que atribuirle los frescos de la iglesia de Santo Domingo, en San Cristóbal de La Laguna. Por otro lado, en 1.874 nace [[Francisco Bonnín Guerín]], acuarelista de Santa Cruz que formó una escuela para promover su labor pictórica.&lt;br /&gt;
Por último, en 1.906 nace en La Laguna uno de los pintores canarios más universales, [[Óscar Domínguez]]. Perteneciente al surrealismo, inventó la técnica de la [[decalcomanía]] y contribuyó con una obra pictórica de internacional reconocimiento.&lt;br /&gt;
&lt;br /&gt;
===Escultura===&lt;br /&gt;
Se podría considerar que la práctica [[escultura|escultórica]] comienza en Tenerife a partir del siglo XVII, momento en el cual llega a la isla el arquitecto y escultor [[Martín de Andújar Cantos]] desde Sevilla, donde había recibido instrucciones del maestro [[Juan Martínez Montañés]]. Con él arrivaron nuevas técnicas y planteamientos de la escuela hispalense que transmitió a sus discípulos, entre los que destaca el garachiquense [[Blas García Ravelo]]. &lt;br /&gt;
Otros escultores que, en esta época y en el posterior siglo XVIII, irrumpen a la escena son [[Sebastián Fernández Méndez]], [[Lázaro González]], [[Rodríguez de la Oliva]], y principalmente el orotavense [[Fernando Estévez]], alumno de [[Luján Pérez]], quien contribuye con una extensa colección de imágenes religiosas y tallas repartidas por diversas iglesias de Tenerife, como por ejemplo, en la [[Catedral de La Laguna]], la [[Iglesia de la Concepción (La Laguna)|Iglesia de la Concepción]] también en La Laguna, la [[Basílica de Candelaria]] y en distintos lugares de culto de La Orotava.&lt;br /&gt;
Actualmente, el ámbito escultórico tinerfeño se encuentra representado entre otros por [[José Abad]], [[Fernando Garcíarramos]] y [[José Luis Fajardo]].&lt;br /&gt;
&lt;br /&gt;
===Música===&lt;br /&gt;
[[Imagen:Timple Front.jpg|thumb|150px|left|Timple]]&lt;br /&gt;
El ámbito [[música|musical]] tiene en la figura de [[Teobaldo Power y Lugo Viña]] uno de sus exponentes más claros. Natural de Santa Cruz, se trata de un pianista y compositor, autor de los [[Cantos Canarios]]. En concreto, los arreglos de la melodía del [[arrorró]] de estos Cantos Canarios constituyen el Himno de la Comunidad Autónoma.&lt;br /&gt;
En este campo también destaca el [[folclore]]. Similar al del resto de las islas, se caracteriza por la participación de [[timple]]s, [[guitarra]]s, [[bandurria]]s, [[laúd]]es y distintos tipos de [[instrumentos de percusión]]. Son numerosos los grupos folclóricos que se reparten por la geografía isleña y que suelen aparecer en distintas celebraciones populares como las romerías. En este aspecto habría que citar a [[Los Sabandeños]], quienes conforman un importante símbolo de la cultura canaria. Este grupo folclórico rescató la idiosincrasia del pueblo isleño en un momento en el que el carácter uniformador de la cultura española de los años setenta hace caer prácticamente en la decadencia y el olvido diferentes elementos de la música canaria.&lt;br /&gt;
Las canciones típicas de las islas: [[isa (canción)|isa]], [[folía]], [[tajaraste]], [[malagueña]]... se configuran como melodías mestizas entre la música ancestral de los guanches con distintos enlaces entre lo andaluz e hispanoamericano.&lt;br /&gt;
&lt;br /&gt;
===Arquitectura===&lt;br /&gt;
Al igual que la que predomina en las otras islas, en la [[arquitectura]] tinerfeña sobresalen las directrices de las casonas señoriales y las de las casas más humildes y populares. Este tipo arquitectónico, que tiene notables influencias de [[Andalucía]] y [[Portugal]], presenta, no obstante una fuerte personalidad propia.&lt;br /&gt;
De las casas señoriales hay que subrayar los ejemplos que existen en La Orotava y en La Laguna. Estas edificaciones se caracterizan por sus [[balcón|balcones]] típicos y por la presencia de [[patio interior|patios interiores]]. La madera, especialmente la tea (pino), cobra un gran protagonismo en estas construcciones. Estas casas presentan fachadas no demasiado complejas con poca ornamentación. Son típicos los grandes balcones de madera y el uso de celosías. Las ventanas cierran en guillotina y son habituales los asientos interiores adosados a ellas. Los patios interiores funcionan como verdaderos jardines que sirven para dar iluminación a las habitaciones. Estas se comunican con el patio por medio de galerías rematadas frecuentemente en piedra y madera. Artilugios como las destiladeras, las bombas de agua, los bancos y mesones son elementos que muchas veces forman parte de estos patios interiores.&lt;br /&gt;
&lt;br /&gt;
[[Image:Auditorio de Tenerife 013.JPG|thumb|right|250px|Auditorio de Tenerife]]&lt;br /&gt;
En cuanto a las casas tradicionales, estas se caracterizan por ser edificios de escasa altura, con toscas paredes de colores variopintos. En ocasiones la continuidad de estas paredes se ve interrumpida por la presencia de bloques de piedra que asoman a la superficie de forma ornamental. A lo largo de toda la isla son muchos los ejemplos a contemplar de esta arquitectura.&lt;br /&gt;
&lt;br /&gt;
Los edificios oficiales o de carácter religioso se han ido conformando según las distintas corrientes arquitectónicas que en cada momento han imperado. Los núcleos urbanos de las ciudades de La Laguna y La Orotava están declarados como monumentos histórico-artístico nacionales. En los últimos años, por parte de los diferentes gobiernos, ha predominado el concepto de llevar a cabo grandes proyectos, en ocasiones ostentosos, diseñados por reconocidos arquitectos. Entre ellos se podría incluir por ejemplo, la remodelación de la [[Plaza de España (Santa Cruz de Tenerife)|Plaza de España]] por los arquitectos suizos [[Herzog &amp;amp; De Meuron]], el nuevo proyecto del francés [[Dominique Perrault]] de la [[Playa de Las Teresitas]] (que no llegó a salir adelante al estallar un caso de corrupción detrás de dicho proyecto, el llamado [[Caso Las Teresitas]]), el [[Centro Magma Arte &amp;amp; Congresos]], las [[Torres de Santa Cruz]] o el [[Auditorio de Tenerife]]. Este último edificio, obra del arquitecto español Santiago Calatrava se alza al este del Parque Marítimo, en la capital tinerfeña. Uno de sus elementos más destacables es la estampa de su vela alada simulando un barco, que se ha convertido en uno de los símbolos de la isla.&lt;br /&gt;
&lt;br /&gt;
==Cultura==&lt;br /&gt;
&lt;br /&gt;
===Educación===&lt;br /&gt;
El nacimiento de la [[educación]] se debe en la isla a las órdenes religiosas. En el año 1530, Tenerife accede a la cultura de la mano de la cátedra de filosofía que, poseen los [[dominico]]s en el convento de [[Iglesia de la Concepción (La Laguna)|La Concepción de La Laguna]]. A pesar de ello, hasta bien avanzado el siglo XVIII no comienzan a funcionar las pocas escuelas que por aquel entonces existían. En este sentido, hay que recalcar el trabajo desempeñado por la Real Sociedad Económica de Amigos del País, que creó diversas escuelas en San Cristóbal de La Laguna. Fue en 1846 cuando se instaura el primer instituto de enseñanza secundaria con el fin de suplir el cierre de la Universidad de San Fernando (&#039;&#039;véase&#039;&#039; [[Universidad de La Laguna]]). Anexa a este edificio se fundó en 1850 la primera Escuela Normal Elemental del archipiélago que pasaría a denominarse Escuela Normal Superior de Magisterio en 1866. Así se mantiene esta situación ya que a pesar de que el dictador [[Primo de Rivera]] crease algunos centros, el punto de inflexión lo supone la política educativa que desarrolló la [[Segunda República Española|Segunda República]], de modo que en apenas cuatro años (1929-1933) casi se dobla el número de escuelas existentes. Posteriormente, el inicio de la Guerra Civil y la ulterior dictadura de [[Francisco Franco]] constituyeron un considerable retroceso. La educación en manos de órdenes religiosas tuvo cierta importancia en el devenir de los tinerfeños hasta que en 1970 la Ley General de Educación resta peso a estas instituciones religiosas en favor de los centros públicos. Estos últimos, y ya en menor grado los primeros, comienzan a multiplicarse desde entonces y son impulsados con la instauración de la democracia. Tenerife cuenta a día de hoy con 301 centros de educación infantil, 297 colegios de primaria, 140 de secundaria y 86 institutos de bachiller . Además, en  la isla existen hasta 5 centros de estudios universitarios o de postgrado: [[Universidad de La Laguna]] (la de mayor presencia), [[Universidad Nacional de Educación a Distancia]], [[Universidad Internacional Menéndez Pelayo]], [[Universidad Alfonso X el Sabio]] y [[Universidad de Vic]] (Escuela Universitaria de Turismo de Santa Cruz de Tenerife)&lt;br /&gt;
&lt;br /&gt;
===Investigación===&lt;br /&gt;
[[Image:Obs 2.jpg|thumb|300px|left|[[Observatorio del Teide]], perteneciente al Instituto de Astrofísica de Canarias]]&lt;br /&gt;
El campo de la [[investigación]], históricamente, no se ha desarrollado de un modo especialmente relevante. No obstante, entre los centros que se dedican a esta labor destaca sobre todo el [[Instituto de Astrofísica de Canarias]] que tiene sede en esta isla. Asimismo cabría citar el Instituto de Bio-Orgánica [[Antonio González González|Antonio González]], vinculado a la Universidad de La Laguna. También adheridos a esta universidad se encuentran el Instituto de Lingüística Andrés Bello, el Instituto Universitario de la Empresa, el Instituto de Derecho Regional y el Instituto Universitario de Ciencias Políticas y Sociales al igual que el Instituto de Enfermedades Tropicales (perteneciente a la Red de Investigación de Centros de Enfermedades Tropicales, que dispone de siete nodos extendidos a lo largo del país, uno de ellos en Canarias). Con sede en la ciudad del Puerto de la Cruz se encuentra el Instituto de Estudios Hispánicos de Canarias, adscrito al Instituto de Cultura Hispánica de Madrid. En la ciudad de La Laguna se encuentra el [[Instituto Canario de Investigaciones Agrarias]] y el [[Centro Internacional para la Conservación del Patrimonio]]. Otros organismos que trabajan en el ámbito de la investigación que tienen sede en Tenerife son el Instituto Tecnológico de Canarias, el Instituto Vulcanológico de Canarias, la Asociación Industrial de Canarias, el Instituto Tecnológico de Energías Renovables y el Instituto Oceanográfico de Canarias emplazado en la ciudad de Santa Cruz de Tenerife.&lt;br /&gt;
&lt;br /&gt;
==Comunicaciones==&lt;br /&gt;
===Aeropuertos===&lt;br /&gt;
El principal medio para llegar a Tenerife es el [[avión]]. Existen dos [[aeropuerto|aeropuertos]] en la isla: el [[aeropuerto Reina Sofía]] (Tenerife Sur) y el [[aeropuerto de Los Rodeos]] (Tenerife Norte). A pesar de que el aeropuerto Tenerife Sur es el que recibe mayor número de pasajeros, ambos disponen de vuelos regulares con las capitales de otras islas, con muchas ciudades peninsulares (Madrid, Barcelona, Sevilla, Valencia, Málaga, Bilbao, etc.), con ciudades europeas del [[Reino Unido]], [[Alemania]], [[Francia]] e [[Italia]] entre otras y también con ciudades americanas y africanas. Teniendo en cuenta los dos aeropuertos, Tenerife es la isla canaria que más pasajeros recibe anualmente. Debido al [[turismo]], es fácil encontrar vuelos directos más económicos con las principales ciudades alemanas o británicas que con las peninsulares.&lt;br /&gt;
&lt;br /&gt;
===Puertos===&lt;br /&gt;
Además del avión, Tenerife tiene dos [[puerto marítimo|puertos marítimos]] principales que le sirven de conexión. El [[Puerto de Santa Cruz de Tenerife|Puerto de Santa Cruz]] que conecta con las capitales de cada isla, y en particular con aquellas de la provincia oriental, y el [[Puerto de Los Cristianos]] que se centra en mayor medida en las comunicaciones con las capitales de la provincia de Santa Cruz de Tenerife. Además es posible el tráfico de pasajeros entre los Puertos de Santa Cruz de Tenerife y Cádiz y viceversa. Está previsto construir un gran puerto de importancia en el sur de la Isla, el de Granadilla, y otro en la parte oeste, en Fonsalía.&lt;br /&gt;
&lt;br /&gt;
===Guaguas===&lt;br /&gt;
La isla cuenta también con una extensa red de [[guagua]]s tanto urbanas como interurbanas que conectan la gran mayoría de los núcleos de población. Para ello cuenta con estaciones de guaguas en todas las ciudades, como el [[Intercambiador de Transportes de Santa Cruz de Tenerife]].&lt;br /&gt;
&lt;br /&gt;
===Ferrocarril===&lt;br /&gt;
[[Image:Tranvía de Tenerife.jpg|thumb|right|250px|El tranvía en Ofra (Santa Cruz de Tenerife) en fase de pruebas (2007)]]&lt;br /&gt;
El 2 de junio de 2007 se inauguró la [[Línea 1 (Tranvía de Tenerife)|línea 1]] del [[Tranvía de Tenerife]], que une destacados sectores del [[Área metropolitana de Santa Cruz de Tenerife-La Laguna|conurbación Santa Cruz-La Laguna]] y puntos como los dos centros hospitalarios de la zona. La segunda fase, que empezará a ejecutarse a pricipios de 2008, unirá los Barrios de Tincer (perteneciente a Santa Cruz) y La Cuesta (La Laguna), que estarán unidos por la Línea 1. Más adelante se construirán otras líneas como la que unirá la Avenida de la Trinidad (La Laguna) con el Aeropuerto de Tenerife Norte (Los Rodeos); y el [[Intercambiador de Transportes de Santa Cruz de Tenerife]] con la [[playa de Las Teresitas]].&lt;br /&gt;
&lt;br /&gt;
Perteneciente a la misma empresa que explota el [[Tranvía de Tenerife]], en 2008 se espera que comience, tras la aprobación de su construcción por el pleno del [[Cabildo Insular de Tenerife]] el 27 de abril de 2007, los trabajos para habilitar un tren que unirá [[Santa Cruz de Tenerife]] con el sur de la isla. El recorrido total será de 80 kilómetros y tiene previsto realizar su trayecto completo en 35 minutos y si tuviera que parar en todas las estaciones, lo haría en 45 minutos. En la reforma actual de la [[Autopista del Sur de Tenerife|autopista del sur]] (TF-1), en algunos tramos ya es visible el lugar por donde discurrirá ese tren.&lt;br /&gt;
&lt;br /&gt;
==Sanidad==&lt;br /&gt;
El principal centro sanitario de la Isla es el [[Hospital Universitario de Canarias]], en el municipio de San Cristóbal de La Laguna aunque justo en el límite con Santa Cruz de Tenerife. Muy cerca, ya en este municipio, se encuentra el [[Hospital Universitario Nuestra Señora de Candelaria]], recientemente incorporado a la red docente de la ULL, aunque ya hace tiempo la Escuela de Enfermería de este hospital estaba adscrita a la Facultad de Enfermería de la Universidad de La Laguna, con sede en el HUC.&lt;br /&gt;
&lt;br /&gt;
Además, se están construyendo dos nuevos hospitales para las zonas norte y sur de la isla. Cuando estén finalizados, la isla dispondrá de cuatro centros hospitalarios junto a sus autopistas, si bien el HUC seguirá siendo el de referencia.&lt;br /&gt;
&lt;br /&gt;
==Religión==&lt;br /&gt;
[[Imagen:Tenerife.candelaria.exterior.basilica.jpg|thumb|300px|Plaza y [[Basílica de Candelaria]] ([[Tenerife]], [[España]])]]&lt;br /&gt;
[[Imagen:Hermano Pedro.jpg|200px|thumb|Imagen del Santo [[Hermano Pedro]], en la cueva donde pastaba su ganado.]]&lt;br /&gt;
Al igual que ocurre en el resto del estado español, la sociedad tinerfeña se declara mayoritariamente católica. No obstante, las crecientes corrientes migratorias (turismo, inmigración ilegal, etc.) están incrementando el número de fieles de otras religiones que se dan cita en la isla. Son numerosas las advocaciones que existen, sin embargo, aquí tiene lugar cada año una de las peregrinaciones más importantes del archipiélago, debido a la celebración de la festividad de la &#039;&#039;&#039;[[Virgen de Candelaria|La Virgen de Candelaria]]&#039;&#039;&#039; (&#039;&#039;&#039;Patrona de Canarias&#039;&#039;&#039;, de la &#039;&#039;&#039;Diócesis Nivariense&#039;&#039;&#039; y de la isla), quien representa la unión de las culturas [[guanche]] y española. Los guanches tomaron como propia la imagen que los misioneros de [[Lanzarote]] y [[Fuerteventura]] dejaron en una playa próxima a la actual Villa Mariana de Candelaria. A partir de ahí, la historia y la leyenda de esta imagen, se entrelazan y dan paso al culto y peregrinación que hasta nuestros días mantienen los habitantes de las islas y de Tenerife en particular. En este aspecto, hay que nombrar también a la Virgen de Los Remedios, la cual es la copatrona de la [[Diócesis Nivariense]] (Diócesis de la provincia). En cuanto a los principales núcleos o templos religiosos destacan:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Basílica de Candelaria]]&#039;&#039;&#039;: Es el lugar en el que se encuentra la imagen de la Virgen de Candelaria (Patrona de Canarias). Este santuario de estilo neoclásico es frecuentado diariamente por los feligreses que se dirigen hasta la Villa Mariana en devoción a su patrona.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Catedral de La Laguna]]&#039;&#039;&#039;: Es la sede de la Diócesis Nivariense. En ella se venera a la Virgen de Los Remedios. Consiste en un edificio que combina elementos neogóticos con neoclásicos localizado en la ciudad de La Laguna. Actualmente, y desde hace varios años se encuentra cerrada al culto debido a unas obras de restauración y reconstrucción que no terminan de acontecer.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Iglesia de la Concepción (La Laguna)|Iglesia de la Concepción de La Laguna]]&#039;&#039;&#039;: Se trata uno de los edificios más antiguos de Tenerife, pues constituye la iglesia matriz de la isla, mandada a construir por Alonso Fernández de Lugo en 1.496. Ha sido declarado Monumento Histórico Nacional. A su alrededor se organizó todo el entramado que dio lugar a la ciudad de [[San Cristóbal de La Laguna]]. Actualmente, se puede acceder a la parte alta de la torre para contemplar gran parte de la ciudad.&lt;br /&gt;
&lt;br /&gt;
Hay otros edificios religiosos de cierta relevancia, especialmente en el Valle de la Orotava, como puede ser la Iglesia de la Concepción de la Orotava, o en la capital, como es la [[Iglesia Matriz de la Concepción (Santa Cruz de Tenerife)]]. También destacar la [[Iglesia de San Andrés (Tenerife)|Iglesia de San Andrés Apóstol]] en la localidad de [[San Andrés (Tenerife)|San Andrés]], una de las iglesias más antiguas de la isla.&lt;br /&gt;
&lt;br /&gt;
Es importante señalar también a [[Pedro de San José Betancur]] ([[Hermano Pedro]]), &#039;&#039;&#039;Primer Santo Canario&#039;&#039;&#039;, nacido en el municipio de [[Vilaflor]]. Su principal santuario es una cueva situada en el municipio de [[Granadilla de Abona]] (sur de la isla), en esta cueva se dice que el hospedaba su ganado. El Santo Hermano Pedro fué muy devoto de la Virgen de Candelaria, a cuyo santuario solía [[peregrinación|peregrinar]] con frecuencia.&lt;br /&gt;
&lt;br /&gt;
==== Patronazgo de la isla ====&lt;br /&gt;
&lt;br /&gt;
*[[San Miguel Arcángel]], es el Santo Patrono de la isla de Tenerife y del [[San Cristóbal de La Laguna|Ayuntamiento de La Laguna]], de hecho su imagen aparece en el escudo insular, que fue concedido por [[Fernando el Católico]], el [[23 de marzo]] de [[1510]], en nombre de su hija la reina [[Doña Juana]].&lt;br /&gt;
&lt;br /&gt;
*La Patrona de Tenerife es la [[Virgen de Candelaria]] (siendo además la Patrona de Canarias). Su festividad es el 15 de agosto, día de la Ascunsión (festivo en Canarias) y el 2 de febrero, este último día festivo en la isla.&lt;br /&gt;
&lt;br /&gt;
=== Museos ===&lt;br /&gt;
La isla cuenta con diversos recintos museísticos de diferente naturaleza que están bajo el dominio de distintas instituciones. Quizás los más destacados sean los pertenecientes al [[Organismo Autónomo de Museos y Centros]], que dispone de los siguientes espacios:&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de la Naturaleza y el Hombre]]&#039;&#039;&#039;: localizado en Santa Cruz de Tenerife, este museo ofrece una visión de la riqueza natural de las Islas Canarias y de las poblaciones prehispánicas [[guanche]]s que en ellas habitaban. El complejo está integrado por tres museos:&lt;br /&gt;
** &#039;&#039;&#039;Museo de Ciencias Naturales&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Museo Arqueológico de Tenerife&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Instituto Canario de Bioantropología]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de Historia de Tenerife]]&#039;&#039;&#039;: enclavado en la ciudad de [[San Cristóbal de La Laguna|La Laguna]], el museo de historia presta una visión general del desarrollo institucional, social, económico y cultural de la Isla entre los siglos XV y XX.&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de la Ciencia y el Cosmos]]&#039;&#039;&#039;: también situado en [[San Cristóbal de La Laguna|La Laguna]] contiguo a las dependencias del [[Instituto de Astrofísica de Canarias]] este museo acerca al visitante a las leyes y principios que rigen la Naturaleza, desde el funcionamiento de su propio cuerpo hasta el de las estrellas.&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de Antropología de Tenerife]]&#039;&#039;&#039;: Situado en [[San Cristóbal de La Laguna|La Laguna]], concretamente en [[Valle de Guerra]] el Museo de Antropología de Tenerife es una institución pública dedicada a investigar, conservar y difundir la cultura popular.&lt;br /&gt;
* &#039;&#039;&#039;[[Centro de Documentación Canario-Americano (CEDOCAM)]]&#039;&#039;&#039;: Con domicilio en [[San Cristóbal de La Laguna|La Laguna]] tiene como misión potenciar las relaciones culturales y los elementos de identidad comunes entre Canarias y [[América]], así como la conservación, información y difusión del patrimonio documental compartido.&lt;br /&gt;
* &#039;&#039;&#039;[[Centro de Fotografía Isla de Tenerife]]&#039;&#039;&#039;: ubicado en [[Santa Cruz de Tenerife]] este recinto ofrece un programa anual de exposiciones que permiten el contacto con tendencias y obras de distintos autores de renombre y creadores emergentes de las propias islas. En un futuro este centro compartirá sede con el Instituto Óscar Domínguez de Arte y Cultura Contemporánea.&lt;br /&gt;
* &#039;&#039;&#039;[[TEA - Tenerife Espacio de las Artes]]&#039;&#039;&#039;: situado también en la ciudad de [[Santa Cruz de Tenerife]] este museo aún por inaugurar busca promover el conocimiento de las diferentes tendencias del arte y la cultura contemporáneos entre la población local y foránea, propiciando la organización de actividades culturales, científicas, educativas y técnicas.&lt;br /&gt;
&lt;br /&gt;
Desligados del Organismo Autónomo de Museos y Centros destacan:&lt;br /&gt;
&lt;br /&gt;
* El &#039;&#039;&#039;[[Convento de San Francisco (Santa Cruz de Tenerife)|Museo Municipal de Bellas Artes]]&#039;&#039;&#039;, en la capital tinerfeña, que muestra una exposición permanente de pinturas y esculturas de [[José de Ribera]], [[Federico Madrazo]], [[Joaquín Sorolla]] y de artistas canarios como Millares u [[Óscar Domínguez]]. &lt;br /&gt;
* La &#039;&#039;&#039;Casa del Vino-La Baranda&#039;&#039;&#039; que, perteneciente a la Asociación de Museos del Vino de España, está emplazada en el municipio de [[El Sauzal]] y dispone entre sus instalaciones de una &#039;&#039;hacienda&#039;&#039; histórica rústica, un &#039;&#039;museo&#039;&#039; que permite conocer la historia vitivinícola de Tenerife, un &#039;&#039;restaurante&#039;&#039; que ofrece comida típica de la tierra, una &#039;&#039;vinoteca&#039;&#039;, una &#039;&#039;sala audiovisual&#039;&#039; y una &#039;&#039;sala de degustación&#039;&#039;.&lt;br /&gt;
* La &#039;&#039;&#039;Casa de la Miel&#039;&#039;&#039;: anexa a la Casa del Vino-La Baranda, es una entidad creada por el Cabildo Insular con el fin de apoyar y desarrollar el sector apícola de Tenerife. La [[Casa de la Miel]] dispone de un centro de visitantes que ofrece una visión acerca de la historia del producto en la isla, su proceso de elaboración y serviciós de información y degustación de las mieles de Tenerife, que poseen denominación de origen.&lt;br /&gt;
* El &#039;&#039;&#039;Museo de Artesanía Iberoamericana&#039;&#039;&#039; que se encuentra ubicado en el antiguo convento de San Benito Abad, de [[La Orotava]]. El centro se encuadra dentro del programa de divulgación que ejecuta el Centro de Documentación de la Artesanía de España y América, Fundación financiada por el Ministerio de Industria, Comercio y Turismo; la [[Agencia Española de Cooperación Internacional]], la Comisión Nacional &amp;quot;Quinto Centeneario&amp;quot;, la Consejería de Industria y Comercio del [[Gobierno de Canarias]] y el [[Cabildo Insular de Tenerife]]. Cuenta con cinco salas especializadas en &#039;&#039;Instrumentos musicales populares&#039;&#039;, &#039;&#039;Textil-nuevos diseños en artesanía&#039;&#039;, &#039;&#039;Cerámicas&#039;&#039;, &#039;&#039;Fibras&#039;&#039; y &#039;&#039;Arte Popular&#039;&#039;.&lt;br /&gt;
* El &#039;&#039;&#039;[[Museo Arqueológico del Puerto de La Cruz]]&#039;&#039;&#039;: sito en la ciudad homónima y habilitado sobre una casona tradicional de los siglos XVIII-XIX, ofrece un fondo museográfico integrado por más de 2.600 registros de elementos de la cultura [[guanche]] y un fondo documental que lleva el nombre del investigador Luis Diego Cuscoy. &lt;br /&gt;
* El &#039;&#039;&#039;[[Museo Militar Regional de Canarias]]&#039;&#039;&#039;, localizado en Santa Cruz de Tenerife, concretamente en el [[Fuerte de Almeyda|acuartelamiento de Almeyda]]. En sus salas se presenta toda la historia militar de Canarias, incluyendo el repelido ataque del [[Horacio Nelson|almirante Nelson]], así como otros eventos y batallas libradas en las islas. Aparte del Museo Histórico Militar de Canarias este inmueble dispone del Archivo Intermedio Militar de Canarias y la Biblioteca Militar de Canarias.&lt;br /&gt;
&lt;br /&gt;
== Fiestas tradicionales ==&lt;br /&gt;
Tenerife tiene un amplio calendario festivo en el que destaca principalmente el [[Carnaval de Santa Cruz de Tenerife]], el más importante del país y uno de los más importantes del mundo.&amp;lt;ref&amp;gt;{{cita web&lt;br /&gt;
|url=http://www.canarias7.es/articulo.cfm?Id=131352&lt;br /&gt;
|título=Canarias 7. Tenerife. El Carnaval de Santa Cruz de Tenerife, candidato a Tesoro del Patrimonio Cultural Inmaterial de España &amp;lt;!--Generado por Muro Bot. Puedes ayudar a rellenar esta plantilla--&amp;gt;&lt;br /&gt;
|añoacceso=2009&lt;br /&gt;
|autor=&lt;br /&gt;
|enlaceautor=&lt;br /&gt;
|idioma=&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=repetida_3 /&amp;gt; El día oficial de la isla es el [[2 de febrero]] en honor de la [[Virgen de Candelaria]] (patrona de la isla y [[Patrona de Canarias]]). Otras fiestas destacables son sus romerías, el Corpus Christi, la Semana Santa y la fiesta del [[Santísimo Cristo de La Laguna]] el [[14 de septiembre]].&lt;br /&gt;
&lt;br /&gt;
=== Carnaval ===&lt;br /&gt;
Quizás la fiesta de mayor repercusión nacional e internacional sea el [[Carnaval de Santa Cruz de Tenerife]], no en vano declarado [[Fiestas de Interés Turístico Internacional (España)|Fiesta de Interés Turístico Internacional]].&lt;br /&gt;
&lt;br /&gt;
=== Romerías ===&lt;br /&gt;
Las fiestas populares más tradicionales y extendidas en Tenerife son quizás las [[romerías]]. Éstas, a caballo entre lo pagano y lo religioso son manifestaciones multitudinarias con carrozas o carretas, [[apero]]s y [[ganado]] en honor al [[santo patrón|patrón o patrona]] del lugar. Es frecuente en estos festejos la reunión de marcados factores identitarios de la etnografía isleña: folclore, danza, artesanía, comida típica, deportes autóctonos, donde se puede observar a gran parte de los asistentes ataviados con los diferentes [[traje de mago|trajes de mago]] típicos de las islas.[[Imagen:Reina carnaval.jpg|thumb|right|250px|Reina del Carnaval de Santa Cruz de Tenerife]]&lt;br /&gt;
En origen las romerías encarnaban fiestas de las clases más adineradas de la sociedad, que se congregaban en veneración de los santos a los que atribuían buenas cosechas, tierras fértiles, copiosidad de lluvias, exoneración de determinadas enfermedades y un largo etcétera. En consecuencia, los allí reunidos degustaban los alimentos y vinos de la tierra y, brindaban y compartían sus bienes rindiendo así pleitesía. Éstas celebraciones se fueron popularizando paulatinamente y dieron paso a una de las fiestas más emblemáticas de la actualidad. Dentro de las grandes romerías de la isla cabe señalar las romerías de San Marcos en Tegueste, donde las carretas son decoradas con productos del campo (semillas, cereales, flores, etc), San Isidro Labrador en Los Realejos, San Isidro Labrador y Santa María de la Cabeza en La Orotava, San Benito Abad en La Laguna, San Roque en Garachico, San Agustín en Arafo o la Romería-Ofrenda a la [[Virgen de Candelaria]] celebrada cada 14 de agosto. Otro acto significativo de la fiesta de la Virgen de Candelaria es la llamada &amp;quot;[[Caminata a Candelaria]]&amp;quot;, realizada en la noche del 14 al 15 de agosto, en el cual los fieles hacen peregrinación a pie desde diferentes partes de la isla, incluso llegando de otras islas, hasta llegar a la Villa Mariana de [[Candelaria]].&lt;br /&gt;
&lt;br /&gt;
=== Fiestas de la Virgen de Candelaria ===&lt;br /&gt;
&lt;br /&gt;
{{AP|Virgen de Candelaria}}&lt;br /&gt;
La [[Virgen de Candelaria]] es la [[Patrona de Canarias]]. Su fiesta es celebrada dos veces al año, en [[febrero]] y en [[agosto]]. La Romería-Ofrenda a la [[Virgen de la Candelaria|Virgen de Candelaria]] se celebra cada 14 de agosto. En este acto es tradición que representaciones de todos los municipios de la isla y también de todas las islas del Archipiélago Canario acudan a ofrendar a su Patrona. Otro acto significativo de la fiesta de la Virgen de Candelaria es la [[Caminata a Candelaria|peregrinación a la Villa Mariana]] realizada en la noche del 14 al 15 de agosto, en la cual los fieles recorren andando multitud de kilómetros desde diferentes partes de la isla hasta llegar a la [[Candelaria (Santa Cruz de Tenerife)|Villa Mariana de Candelaria]], lugar donde se encuentra la venerada imagen de la Virgen de Candelaria. Es habitual recibir peregrinos de otras islas e incluso de otras partes de España.&lt;br /&gt;
&lt;br /&gt;
El [[2 de febrero]] se celebra la [[Fiesta de la Candelaria|Fiesta Litúrgica de La Candelaria]]. También en este día se acercan a la villa muchos fieles de la &#039;&#039;Virgen Morenita&#039;&#039;. Es también tradición que cada siete años la imagen de la Virgen sea trasladada alternativamente por dos semanas a las ciudades de [[Santa Cruz de Tenerife]] (capital) y [[San Cristóbal de La Laguna]] (sede de la diócesis). Las últimas dos veces que se ha efectuado dicho traslado han sido en octubre de [[2002]] a Santa Cruz y en mayo de [[2009]] a La Laguna. Las próximas serán en [[2016]] a Santa Cruz y en [[2023]] a La Laguna.&lt;br /&gt;
&lt;br /&gt;
=== Fiestas del Santísimo Cristo de La Laguna ===&lt;br /&gt;
&lt;br /&gt;
{{AP|Santísimo Cristo de La Laguna}}&lt;br /&gt;
Esta Festividad Litúrgica que, tiene varios siglos de historia, es celebrada cada [[14 de septiembre]] en la ciudad de [[San Cristóbal de La Laguna]] y gira en torno al [[Santísimo Cristo de La Laguna]]. El Cristo de La Laguna es una de las imágenes más veneradas de las Islas Canarias, junto con la [[Virgen de Candelaria]], especialmente en la isla de Tenerife, es la imagen [[Cristología|Cristológica]] más venerada de Canarias, y la imagen religiosa más antigua del archipiélago.&lt;br /&gt;
&lt;br /&gt;
Cada [[9 de septiembre]] la venerada imagen del Cristo es bajada en público del altar mayor de su [[Real Santuario del Cristo de La Laguna|Real Santuario]], para el rito del [[besapiés]] y para más tarde ser colocada en el [[trono]] procesional, para sus fiestas mayores de septiembre. La imagen permanece en su trono procesional hasta el [[21 de septiembre]], día en que la sagrada imagen es subida de nuevo a su altar. Durante este tiempo la imagen es solemnemente trasladada hasta la [[Catedral de La Laguna]] (9 de septiembre), en la cual procesiona en una cruz repujada en [[plata]]. En dicha catedral permanece durante varios días, hasta el día [[14 de septiembre]], cuando se procede al traslado de vuelta a su Real Santuario.&lt;br /&gt;
&lt;br /&gt;
=== Corpus Christi ===&lt;br /&gt;
[[Imagen:Plaza-centro.jpg|thumb|left|250px|Tapiz de la Plaza del Ayuntamiento en La Orotava.]]&lt;br /&gt;
Con marcado carácter religioso se encuentra la festividad del [[Corpus Christi]], en la que es habitual la confección de alfombras florales en las calles. A título especial se pueden incluir las realizadas en [[La Orotava]], donde se puede contemplar un tapiz de considerables dimensiones confeccionado en la plaza del ayuntamiento mediante tierras volcánicas de diversas tonalidades, extraídas del [[Parque Nacional del Teide]] que, tras la celebración son devueltas a fin de respetar el entorno del Parque. La festividad del Corpus Christi de La Orotava está declarada Bien de Interés Cultural en la categoría de Actividad Tradicional de Ámbito Insular.&lt;br /&gt;
&lt;br /&gt;
=== Semana Santa ===&lt;br /&gt;
{{AP|Semana Santa en Canarias}}&lt;br /&gt;
En el capítulo de celebraciones a reseñar de la isla de Tenerife habría que contar con la [[Semana Santa]]. Esta se celebra en todos los municipios pero probablemente sea en La Laguna, La Orotava y Los Realejos donde adquiera especial significado. En este sentido destacan principalmente las procesiones que se desarrollan durante el [[Jueves Santo]], [[Viernes Santo]] y [[Domingo de Resurrección]]. La [[Semana Santa de San Cristóbal de La Laguna]] es considerada como la Semana Santa más importante y multitudinaria de las que se celebran en Canarias.&lt;br /&gt;
&lt;br /&gt;
==Gastronomía==&lt;br /&gt;
&lt;br /&gt;
===Pescados===&lt;br /&gt;
Como resulta lógico por la influencia marina, los productos del mar gozan aquí de cierta abundancia tanto en cantidad como en variedad. Entre las especies más apreciadas están las [[vieja]]s, y también, entre otros, la [[sama]], el [[bocinegro]], la [[salema]], el [[cherne]], el [[mero]]... Destacan asimismo los diversos tipos de [[túnido]]s que abundan en sus costas. Las caballas, sardinas y chicharros también deben ser citadas entre los pescados más consumidos. Otra especie que disfruta de cierta fama es la [[Muraenidae|morena]], que se suele servir frita. Estas variedades marinas se suelen preparar simplemente sancochadas (cocidas), o a la espalda, a la sal, etc. Es frecuente que se acompañen con [[mojo]] y [[papas arrugadas]].&lt;br /&gt;
&lt;br /&gt;
===Carnes===&lt;br /&gt;
En el apartado de [[carne]]s, es un plato muy popular la típica carne de fiesta (tacos de [[carne de cochino]] adobados) que se prepara para los festejos de los pueblos en ventorrillos, bares y casas particulares. El conejo en salmorejo, el cabrito, y por supuesto el vacuno, el porcino y las carnes de ave son también consumidas habitualmente.&lt;br /&gt;
&lt;br /&gt;
===Papas Arrugadas===&lt;br /&gt;
[[Imagen:Papasarrugadas.jpg|thumb|right|250px|Papas arrugadas con mojo]]&lt;br /&gt;
Tanto los pescados como las carnes suelen acompañarse con [[papas arrugadas]]. Es este un plato típico del conjunto de las Canarias que responde simplemente a la forma de cocinar las papas. Con agua, mucha sal, y sin pelar.&lt;br /&gt;
&lt;br /&gt;
===Mojos===&lt;br /&gt;
Con esta palabra, seguramente de ascendencia portuguesa, se designan las salsas típicas del las islas. Los [[mojo]]s constituyen un auténtico mundo de sabores, colores, texturas, etc., entre los que se encuentran el mojo de [[cilantro]], de [[perejil]], de [[pimentón]] y el distinguido mojo picón a base de [[pimienta]]. No obstante el abanico de estas salsas es muy amplio y permite el uso de distintos ingredientes en su elaboración como [[almendra]]s, [[queso]], [[azafrán]], pan frito, entre otras posibilidades.&lt;br /&gt;
&lt;br /&gt;
===Quesos===&lt;br /&gt;
Viene a ser otro de los platos más comúnmente elaborados y consumidos. Destacan los producidos en granjas de Arico, La Orotava o Teno. A su vez, son diversas variedades las que existen: quesos tiernos, curados, semicurados, ahumados… Hoy en día predominan los quesos de [[cabra]], aunque en ocasiones se confeccionan con ciertas cantidades de leche de [[oveja]] o de [[vaca]]. Suelen servirse a modo de entrante o simplemente de tentempié. Los quesos canarios gozan de una buena crítica internacional, entre otras cosas, por su suavidad y por su sabor, dotándolos de una personalidad que los diferencia de otros quesos europeos.&lt;br /&gt;
&lt;br /&gt;
===Gofio===&lt;br /&gt;
[[Imagen:Gofioescaldado.jpg|thumb|right|250px|Gofio escaldado]]&lt;br /&gt;
El [[gofio]] es uno más de los elementos tradicionales de la cocina canaria y particularmente de Tenerife. Se realiza con granos de cereales que son tostados y posteriormente molidos. El género de mayor consumo en la isla es el de [[trigo]], aunque existen otros tipos como el de [[millo]] o en menor medida el de [[garbanzo]]. Es también relativamente frecuente aquel de tipo mixto, trigo-millo. Desde incluso antes de la conquista de Canarias ya servía de sustento para los guanches. En posteriores tiempos de hambruna y escasez de alimentos formó parte de la dieta popular canaria. Hoy en día se utiliza como plato único (gofio escaldado) o como complemento en platos de distinta índole, carnes, pescados, potajes, postres, incluso algún cocinero de prestigio ha confeccionado [[helado]]s de gofio recibiendo buena crítica al respecto.&lt;br /&gt;
&lt;br /&gt;
===Repostería===&lt;br /&gt;
La [[repostería]] en Tenerife se encuentra representada y fuertemente influenciada por la repostería palmera, con exquisiteces como el bienmesabe, la leche asada, el Príncipe Alberto, el frangollo, los huevos moles, el quesillo y un largo etcétera. Del mismo modo, los rosquetes, las truchas, y diversos tipos de pasteles, entre los que se encuentran los laguneros y los singulares rosquetes de Guía de Isora, forman parte de este capítulo del recetario.&lt;br /&gt;
&lt;br /&gt;
===Vinos===&lt;br /&gt;
El cultivo de la [[vid]] en el archipiélago y especialmente en Tenerife nace tras la conquista, cuando los colonizadores traen variedades de viñas y comprueban la nobleza que adquirían los caldos canarios. En los siglos XVI y XVII, el [[vino]] alcanza un gran peso en la economía tinerfeña pues son muchas las familias que se dedicaban a su cultivo y posterior negocio. Especial mención merece el malvasía canario, que llegó a ser considerado el mejor vino del mundo y era ansiado por las cortes europeas y las mayores bodegas de Europa y América. Escritores como [[William Shakespeare]] o [[Walter Scott]] hacen referencia en algunas de sus obras a estos vinos. La isla presenta actualmente cinco denominaciones de origen: &#039;&#039;&#039;Abona&#039;&#039;&#039;, &#039;&#039;&#039;Valle de Güímar&#039;&#039;&#039;, &#039;&#039;&#039;Valle de La Orotava&#039;&#039;&#039;, &#039;&#039;&#039;Tacoronte-Acentejo&#039;&#039;&#039; e &#039;&#039;&#039;Ycoden-Daute-Isora&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
* [[:categoría:Tinerfeños|Tinerfeños ilustres]]&lt;br /&gt;
* [[Erupciones históricas de Tenerife]]&lt;br /&gt;
* [[Bandera de Tenerife]]&lt;br /&gt;
* [[Teide]]&lt;br /&gt;
* [[Auditorio de Tenerife]]&lt;br /&gt;
* [[Achinech]]&lt;br /&gt;
* [[Nivaria]]&lt;br /&gt;
&lt;br /&gt;
==Enlaces externos==&lt;br /&gt;
* [http://www.tenerife.es Cabildo Insular de Tenerife]&lt;br /&gt;
* [http://www.puntoinfo.idecnet.com/ Tenerife Punto de Información]&lt;br /&gt;
* [http://www.auditoriodetenerife.com Auditorio de Tenerife]&lt;br /&gt;
* [http://www.taliateatro.org Grupo Teatral Talía]&lt;br /&gt;
* [http://sapiens.ya.com/floraypoesia/flora.htm Flora silvestre de Tenerife (Por zonas)]&lt;br /&gt;
* [http://sapiens.ya.com/floraypoesia/indices.htm Flora silvestre de Tenerife (Indices alfabéticos)]&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Tenerife]]&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=Tenerife&amp;diff=218113</id>
		<title>Tenerife</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=Tenerife&amp;diff=218113"/>
		<updated>2026-02-06T05:06:27Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha_Isla |&lt;br /&gt;
 |bandera = [[Imagen:Flag of Tenerife.jpg|25px]]&lt;br /&gt;
 |imagen = [[Imagen:Nasa world wind - teneriffa.jpg|230px|Fotografía de satélite de Tenerife]]&lt;br /&gt;
 |mapa = [[Imagen:TF Canarias.jpg|230px|Mapa de situación de la isla de Tenerife]]&lt;br /&gt;
 |archipiélago = Islas Canarias&lt;br /&gt;
 |escudo = [[Imagen:HeráldicaTenerife.jpg|40px]]&lt;br /&gt;
 |superficie= 2.034,38 km&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; &amp;lt;!--Fuente: http://www.gobiernodecanarias.org/istac/estadisticas.html--&amp;gt;&lt;br /&gt;
 |océano = Océano Atlántico&lt;br /&gt;
 |coordenadas = 28° 16′ 07″ N 16° 36′ 20″ O&lt;br /&gt;
 |altitud = 3.718 m ([[Pico del Teide]])&lt;br /&gt;
 |capital = [[Santa Cruz de Tenerife]]&lt;br /&gt;
 |gentilicio = Tinerfeño/a.&lt;br /&gt;
 |población = 838.877 (censo de 2005)&lt;br /&gt;
 |densidad = 412,4 hab./km&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
 |presidente = Ricardo Melchior&lt;br /&gt;
 |partido = CC&lt;br /&gt;
 |tipo = -&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tenerife&#039;&#039;&#039; es una isla de [[Canarias]] situada en el [[Océano Atlántico]] frente a las costas africanas. Junto a [[La Palma]], [[La Gomera]] y [[El Hierro]] conforma la [[provincia de Santa Cruz de Tenerife]]. Su capital es [[Santa Cruz de Tenerife]], que además lo es también de Canarias conjuntamente con [[Las Palmas de Gran Canaria]]. Entre [[1833]] y [[1927]] Santa Cruz de Tenerife fué la capital única de Canarias, hasta que en 1927 un decreto ordenó que la capitalidad de Canarias sea compartida, que es como permanece en la actualidad.&lt;br /&gt;
[http://es.wikisource.org/wiki/Real_Decreto_de_30_de_noviembre_de_1833 &#039;&#039;Real Decreto de 30 de noviembre de 1833&#039;&#039;] &lt;br /&gt;
[http://www.gobiernodecanarias.org/tuestatuto/docs/1833-12-03%20Decreto%20de%20division%20provincial.pdf &#039;&#039;Real Decreto de 30 de noviembre de 1833&#039;&#039;]&lt;br /&gt;
Otra ciudad con gran importancia para la isla y Canarias es, [[San Cristóbal de La Laguna]] (tercera ciudad más importante del archipiélago, tras Santa Cruz de Tenerife y Las Palmas de Gran Canaria). Tenerife es un destino turístico importante en España y en el mundo.&lt;br /&gt;
&lt;br /&gt;
Tenerife, con 865.070 habitantes (casi un millón de habitantes), es la isla más poblada de Canarias y de [[España]]. Es además la isla canaria que más municipios posee en su territorio, 31 en total. Tiene el Área Metropolitana más grande y extensa del Archipiélago Canario con 366,85 kilómetros cuadrados ([[Área metropolitana de Santa Cruz de Tenerife-La Laguna]]). Por lo tanto, es también el área metropolitana más grande de la [[Unión Europea]] fuera de [[Europa]] (como región periférica).&lt;br /&gt;
&lt;br /&gt;
En Tenerife además se encuentra la mayor elevación de España, de las islas atlánticas y tercer volcán más grande del mundo desde su base, El [[Teide]], declarado también [[Patrimonio de la Humanidad]]. &lt;br /&gt;
[http://www.webtenerife.com/PortalTenerife/Home/Disfruta+sin+perderte+nada/Mas+sobre+Tenerife/Naturaleza/Espacios+naturales/Parque+Nacional+de+El+Teide/?Lang=es Parque nacional del Teide: web oficial de Turismo de Tenerife]&lt;br /&gt;
&lt;br /&gt;
== Toponimia ==&lt;br /&gt;
Son diversos los nombres que las distintas culturas han atribuido a Tenerife a lo largo de la historia. Así por ejemplo, para los [[guanche]]s, la isla recibía el nombre de &#039;&#039;&#039;Achined, [[Achinet]]&#039;&#039;&#039; o &#039;&#039;&#039;Chenet&#039;&#039;&#039;, aunque en función de la bibliografía que se consulte, la nómina puede adquirir diferentes variaciones ortográficas. Los [[Antigua Roma|romanos]] se referían a ella como &#039;&#039;&#039;[[Nivaria]]&#039;&#039;&#039; (del latín &#039;&#039;nix&#039;&#039;, &#039;&#039;nivis&#039;&#039;, &#039;&#039;nieve&#039;&#039;), en clara referencia a las nieves posadas sobre el volcán conocido como el [[Teide]]. Los nombres de Achined y Nivaria todavía se utilizan en referencia a Tenerife, sobre todo en un sentido patriótico por los habitantes de la isla. En esa misma dirección apuntan algunos mapas de los siglos XIV y XV, que de manos de Bontier y Le Verrier se refieren a la isla como &#039;&#039;&#039;Isla del Infierno&#039;&#039;&#039; a razón de los procesos eruptivos de los que el volcán era protagonista. Finalmente, el propio Teide es el responsable del nombre actual de la isla, ya que fue dado por los benahoaritas (aborígenes de La Palma) según las palabras &#039;&#039;&#039;Tene&#039;&#039;&#039; (&#039;&#039;montaña&#039;&#039;) e &#039;&#039;&#039;ife&#039;&#039;&#039; (&#039;&#039;blanca&#039;&#039;). Posteriormente, la castellanización del nombre provocó que se añadiera una &amp;quot;r&amp;quot; para unir ambas palabras obteniendo como resultado Tenerife.&amp;lt;ref name=Abreu&amp;gt;{{cita libro | apellidos = Abreu Galindo | nombre = FR. J. | título = Historia de la conquista de las siete islas de Canaria | editorial = Goya | id = ISBN 978-84-400-3645-2 }}&amp;lt;/ref&amp;gt;&amp;lt;ref name=Bethencourt&amp;gt;{{cita libro | apellidos = Bethencourt Alfonso | nombre = Juan | título = Historia del pueblo guanche | editorial = Francisco Lemus Editor SL | año = 1997 | id = ISBN 978-84-87973-10-9 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Descripción==&lt;br /&gt;
Su orografía es abrupta y volcánica, producto de erupciones (la más reciente fue el Chinyero en 1909). Es la isla más poblada de Canarias y de España con 838.877 habitantes [http://www.ine.es Instituto Nacional de Estadística de España], 01-01-2005 y 2.034 [[kilómetro cuadrado|km²]] de superficie.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Panorama Teide BW.jpg|800px|thumb|center|Panorámica del circo de Las Cañadas del Teide.]]&lt;br /&gt;
&lt;br /&gt;
===Situación y extensión===&lt;br /&gt;
Tenerife es la mayor de las siete islas que componen el Archipiélago Canario; está situada entre los paralelos 28 y 29 N y los meridianos 16 y 17 O, ligeramente al Norte del Trópico de Cáncer, y ocupa una posición central entre las islas de Gran Canaria, La Gomera y La Palma.&lt;br /&gt;
&lt;br /&gt;
La isla se encuentra a algo más de 300 Kms. del continente africano y a unos 1.000 Kms. de la Península Ibérica&lt;br /&gt;
&lt;br /&gt;
Tiene 2.034 km² de superficie y una curiosa forma triangular, alzándose en su centro el gigantesco [[Pico del Teide]], que con sus 3.718 metros de altura es el punto más elevado de toda el Estado Español.&lt;br /&gt;
&lt;br /&gt;
Para referirse a sus habitantes se utiliza el gentilicio &#039;&#039;&#039;Tinerfeño&#039;&#039;&#039;. Otro gentilicio utilizado, generalmente por personas de otras islas, es el de &#039;&#039;&#039;chicharrero&#039;&#039;&#039;, el cual en principio iba referido sólo a los habitantes de Santa Cruz de Tenerife, capital de la isla, y teniendo una cierta carga despectiva en su origen.&lt;br /&gt;
&lt;br /&gt;
=== Origen y formación ===&lt;br /&gt;
[[Imagen:Formación Tenerife.jpg|thumb|180px|right|Esquema general de la formación de Tenerife.]]&lt;br /&gt;
Tenerife es una isla de origen volcánico, cuya formación comenzó a gestarse en el fondo oceánico hace unos 20-50 millones de años (m.a.).&lt;br /&gt;
&lt;br /&gt;
Según una de las teorías más aceptadas actualmente por la comunidad científica (&#039;&#039;&#039;Teoría de los bloques levantados&#039;&#039;&#039;), el ascenso de [[magma]] procedente del manto terrestre se produce en periodos de actividad [[tectónica de placas|tectónica]] a partir de fallas o fracturas que existen en el [[placa oceánica|fondo oceánico]]. Éstas siguen los ejes estructurales de la isla, y se conformaron durante la orogenia [[Alpes|Alpina]] de la [[Era Terciaria]] por el movimiento de la [[placa Africana]]. Estas erupciones de tipo fisural submarino originan las denominadas [[lava#lava almohadillada|lavas almohadilladas o pillow-lavas]], que se producen por el rápido enfriamiento que experimenta el magma al establecer contacto con el agua, obteniendo así una forma muy característica. Estos materiales se fueron acumulando y construyendo el edificio insular bajo el mar. A medida que éste se aproximaba a la superficie, los gases, debido a la disminución de la presión circundante, se iban liberando del magma y los episodios vulcanológicos pasaban de ser tranquilos a tener un carácter marcadamente explosivo, formando materiales fragmentarios.&lt;br /&gt;
&lt;br /&gt;
Tras largo tiempo de acumulación de materiales, el nacimiento de la isla se produjo a finales del [[Mioceno]] (Era Terciaria). Hace siete millones de años emergieron las zonas de [[Macizo de Teno|Teno]], [[Macizo de Anaga|Anaga]] y Macizo de Adeje, en la que se denomina &#039;&#039;Serie Basáltica Antigua&#039;&#039; o &#039;&#039;Serie I&#039;&#039;. Se constituyeron de este modo tres islas cronológica y estratigráficamente distintas en los extremos oeste, este y sur de la actual Tenerife.&lt;br /&gt;
[http://www.puntoinfo.idecnet.com/index.php?sectionID=2&amp;amp;lang=1&amp;amp;s=1&amp;amp;ID=160 Información del Cabildo de Tenerife]&lt;br /&gt;
&lt;br /&gt;
Hace aproximadamente 3 m.a. comienza un segundo ciclo volcánico (&#039;&#039;Formaciones Postmiocenas&#039;&#039; o &#039;&#039;Series Recientes II, III y IV&#039;&#039;), mucho más intenso, que incorpora elementos en la zona central de la isla, la cual también emerge y unifica en uno sólo a los tres edificios anteriormente descritos. La estructura conformada en ese momento recibe el nombre de &#039;&#039;Edificio pre-Cañadas&#039;&#039;, sobre cuyos restos se erigiría más tarde el &#039;&#039;Edificio Cañadas I&#039;&#039;. Este ultimó experimentó diversos colapsos y emitió una gran variedad de materiales explosivos que dieron lugar a las llamadas &#039;&#039;Bandas del sur&#039;&#039; (sur-sureste actual).&lt;br /&gt;
[http://www.gevic.net/info/contenidos/mostrar_contenidos.php?idcat=36&amp;amp;idcap=58&amp;amp;idcon=330 Gran Enciclopedia Virtual Interactiva de Canarias]&lt;br /&gt;
&lt;br /&gt;
Posteriormente, sobre las ruinas de este complejo surgiría el &#039;&#039;Edificio Cañadas II&#039;&#039;, ya por encima de los 2.500 metros, también con intensos procesos explosivos. Hace alrededor de 1 m.a. se inició la construcción de la &#039;&#039;Cordillera Dorsal&#039;&#039;, con un vulcanismo de tipo fisural, a partir de los restos de los edificios ya parcialmente desmantelados de la &#039;&#039;Serie I&#039;&#039;. La &#039;&#039;Cordillera Dorsal&#039;&#039; es la de mayor desarrollo altitudinal y longitudinal del Archipiélago Canario, con 1.600 metros de altura y 25 kilómetros de longitud. En este mismo espacio cronológico (hace 800.000 años) tienen lugar dos deslizamientos gravitacionales que motivaron la aparición de los valles de [[Valle de La Orotava|La Orotava]] y [[Valle de Güímar|Güímar]].&lt;br /&gt;
&lt;br /&gt;
Finalmente, ya en tiempos más próximos (200.000 años), comienzan las erupciones que levantarían el &#039;&#039;Edificio Pico Viejo-Teide&#039;&#039; en el centro de la isla, sobre la &#039;&#039;[[Caldera de Las Cañadas]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Orografía y paisaje ===&lt;br /&gt;
La abrupta orografía isleña y su variedad de climas dan como resultado un territorio de múltiples paisajes y formas, desde el [[Parque nacional del Teide|Parque Nacional del Teide]] con su amalgama de colores fruto de las sucesivas erupciones volcánicas, hasta los [[Acantilados de Los Gigantes]] con sus paredes verticales, pasando por zonas semidesérticas con plantas resistentes a la sequedad en el sur, o por ambientes de carácter meramente volcánico como es el [[Malpaís de Güímar]].&lt;br /&gt;
&lt;br /&gt;
También cuenta con playas naturales como la de [[El Médano]], con parajes protegidos en su entorno como Montaña Roja y Montaña Pelada, valles con cultivos tropicales y subtropicales, boscosos parajes de [[laurisilva]] en los macizos de [[Macizo de Anaga|Anaga]] y [[Macizo de Teno|Teno]] -con profundos y escarpados barrancos- y extensos bosques de pinos por encima de esta última formación vegetal.&lt;br /&gt;
&lt;br /&gt;
==== Macizos ====&lt;br /&gt;
[[Imagen:Anaga 2006.jpg|thumb|left|250px|Panorámica del Macizo de Anaga.]]&lt;br /&gt;
El &#039;&#039;&#039;macizo de [[Anaga]]&#039;&#039;&#039;, en el extremo nororiental de la isla, posee un perfil topográfico irregular y escabroso donde a pesar de no presentar grandes cotas, destaca el Pico del Inglés con 1.024 metros. Debido a la antigüedad de sus materiales (5,7 m. a.), a sus profundos procesos erosivos y a la densa red de diques que atraviesan el macizo, son numerosos los roques que aparecen en superficie, tanto de etiología fonolítica como traquítica. Existe una gran cantidad de barrancos escarpados y muy encajados en el terreno. En la costa de Anaga predominan los acantilados, por lo que existe un número escaso de playas, aún así, las que hay suelen coincidir con zonas de desembocadura de barrancos, algunas de rocas y otras de arena negra.&lt;br /&gt;
&lt;br /&gt;
El &#039;&#039;&#039;macizo de Teno&#039;&#039;&#039; se encuentra en el extremo noroccidental. Al igual que en Anaga, se trata de una zona de estructuras desmanteladas y hondos barrancos que se han originado por erosión. Sin embargo, aquí los materiales son más antiguos (aproximadamente 7,4 m. a.). Destacan la Montaña de Gala que con 1.342 metros representa la mayor altitud. El paisaje más singular de este Macizo se encuentra en su costa sur. Se trata de los Acantilados de Los Gigantes, con paredes verticales que llegan a alcanzar en algunos puntos los 500 metros de altura.&lt;br /&gt;
&lt;br /&gt;
El &#039;&#039;&#039;macizo de Adeje&#039;&#039;&#039; se sitúa en el extremo meridional de la isla, teniendo como mayor exponente al Roque del Conde, con 1.001 metros de altitud. El macizo no es tan apreciable por su reducida estructura inicial, hecho que añadido a la historia geológica del lugar ha potenciado un intenso desmantelamiento de sus materiales, perdiendo de ese modo su aspecto y envergadura original.&lt;br /&gt;
&lt;br /&gt;
==== Dorsales ====&lt;br /&gt;
La &#039;&#039;&#039;Cordillera dorsal o dorsal de Pedro Gil&#039;&#039;&#039; abarca desde el principio del monte de La Esperanza, a unos 750 metros de altitud aproximadamente, hasta la zona central de la isla, en las inmediaciones de la Caldera de Las Cañadas, siendo Izaña, su punto más alto, con 2.350 metros sobre el nivel del mar. Esta estructura se ha constituido a expensas de un vulcanismo fisural de tipo basáltico a través de uno de los ejes o directrices estructurales que han dado origen al vulcanismo de la isla.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La &#039;&#039;&#039;dorsal de Abeque&#039;&#039;&#039; se encuentra formada por una cadena de volcanes que unen el macizo de Teno con el edificio central insular Teide-Pico Viejo a partir de otro de los tres ejes o directrices estructurales de Tenerife. A esta dorsal pertenece el volcán histórico de Chinyero cuya última erupción se registró en 1909.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La &#039;&#039;&#039;dorsal Sur o dorsal de Adeje&#039;&#039;&#039; está al amparo del último de los ejes estructurales. Destacan los restos de su macizo como formación primigenia, así como las alineaciones de pequeños conos volcánicos y de roques esparcidos por toda esta zona del sur tinerfeño.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Edificio central ====&lt;br /&gt;
[[Imagen:Teide Tenerife4.jpeg|thumb|250px|right|Roque Cinchado y El Teide.]]&lt;br /&gt;
Las principales estructuras de Tenerife descritas en las líneas anteriores se ven culminadas en el edificio central, con el complejo Teide-Pico Viejo y el circo de Las Cañadas. Se trata de una semicaldera de 130 kilómetros cuadrados, que ha sido originada por un conjunto de procesos geológicos explicados en el epígrafe &#039;&#039;Origen y formación&#039;&#039;. El circo está parcialmente ocupado por el estratovolcán Teide-Pico Viejo y completado por los materiales que ha emitido en sus diferentes erupciones. Destacan en su interior los [[Roques de García]], entre los que está el más conocido, el Roque Cinchado. Otra formación llamativa son Los Azulejos, compuesto por fonolitas de colores verdosos que se han creado por actividad hidrotermal.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al sur de La Caldera destaca la [[Montaña de Guajara]], que con 2.718 metros es la de mayor altitud de las que constituyen el anfiteatro de Las Cañadas del Teide. Al pie de estas paredes se han creado [[cuenca endorreica|llanos endorreicos]] de materiales sedimentarios muy finos, siendo el más conocido el [[Llano de Ucanca]].&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El Pico del [[Teide]], con 3.718 metros sobre el nivel del mar y más de 7.000 sobre el fondo oceánico, es el punto más elevado de la isla, del territorio español y de todas las tierras emergidas del Atlántico. Este volcán, el tercero más grande del planeta,&amp;lt;ref&amp;gt;[http://www.csic.es/estudios_geol/archivo/vol5914/EGv59p015029dncwio.pdf Estudio geológico sobre el Teide del CSIC]&amp;lt;/ref&amp;gt; es el símbolo de Tenerife por antonomasia. Su situación central, sus importantes dimensiones, su silueta y su paisaje nevado lo dotan de una singular personalidad. Ya los aborígenes lo consideraban lugar de culto y adoración.&lt;br /&gt;
&lt;br /&gt;
Desde 1954, el Teide y todo el circo de su alrededor (aunque hubo una ampliación posterior de sus límites) está declarado como parque nacional. Además, desde junio de 2007 está incluido por la [[UNESCO]] dentro de los espacios [[Patrimonio de la Humanidad]] como bien natural.&amp;lt;ref&amp;gt;[http://whc.unesco.org/en/list/1258 Página web oficial de la UNESCO (en inglés)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Al oeste se encuentra el volcán Pico Viejo,. En un lateral de éste, se encuentra el Volcán de Chahorra o Narices del Teide, donde se produjo la última erupción que se ha dado en el entorno del Teide, en 1798.&lt;br /&gt;
&lt;br /&gt;
==== Valles ====&lt;br /&gt;
[[Imagen:Orotavatal.jpg|500px|thumb|left|Panorámica del Valle de La Orotava con el Teide al fondo.]]Los [[valle]]s son otra de las formas de relieve más destacadas. Los más importantes son el [[Valle de La Orotava]] y el [[Valle de Güímar]] que se han generado por el deslizamiento en masa de grandes cantidades de materiales hacia el mar, creando una hondonada en el terreno.&lt;br /&gt;
Existen otros valles que se distribuyen por diversos enclaves de la geografía de Tenerife, aunque, en este caso, de diferente naturaleza. Suelen ser valles intercolinares que se han conformado tras el depósito de mayor cantidad de materiales geológicos en lomas laterales, o simplemente cauces amplios de determinados barrancos que en su evolución han tomado el aspecto de típicos valles.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Barrancos ====&lt;br /&gt;
Tenerife, debido principalmente a su gran altitud y a su silueta en semejanza a un tejado de dos aguas, está surcada por gran cantidad de [[barranco]]s. Éstos constituyen uno de los elementos más característicos de su paisaje, originados por la erosión ejercida por la escorrentía superficial a lo largo de la historia. Destacan los barrancos de Ruiz, Fasnia y Güímar, Infierno y Erques, todos ellos declarados espacios naturales protegidos por las instituciones canarias.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
[[Imagen:Tenerife88.jpg|thumb|right|250px|Montaña Roja al fondo, Playa de La Tejita.]]&lt;br /&gt;
&lt;br /&gt;
==== Costas ====&lt;br /&gt;
Las costas son, a grosso modo, accidentadas y abruptas, aunque lo son más en la zona norte que en la sur. No obstante 67,14 kilómetros de la costa tinerfeña lo representan playas, sólo superada en este aspecto por la isla de [[Fuerteventura]].&amp;lt;ref&amp;gt;[http://www.gobiernodecanarias.org/istac/estadisticas/php/saltarA.php?mid=/istac/estadisticas/territorio_ambiente/area_01_frame.html Estadísticas del Gobierno de Canarias]&amp;lt;/ref&amp;gt;En el litoral septentrional son frecuentes las playas de cantos rodados o de arena negra, mientras que en la vertiente sur y suroeste de la isla predominan las playas con arenas más finas y de tonalidades más claras.&amp;lt;ref name=enciclopedia/&amp;gt;&amp;lt;ref name=islaaisla/&amp;gt;&amp;lt;ref name=naturaycultura/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flora y Fauna===&lt;br /&gt;
La isla de Tenerife disfruta de una [[diversidad ecológica]] pese a su reducida superficie, que es consecuencia de unas condiciones ambientales especiales, ya que la accidentada orografía reinante modifica localmente las condiciones climáticas generales, originando una exquisita variedad de [[microclima|microclimas]]. Esta vasta existencia de microclimas y, por lo tanto, de hábitats naturales, se hace manifiesta en la vegetación insular, constituida por una flora rica y variada (1400 especies de plantas superiores), entre las que destacan numerosos [[endemismo|endemismos]] canarios (200) y tinerfeños (140). Al concentrar este patrimonio vegetal de unas 140 especies exclusivas,  la isla de Tenerife muestra la mayor relación de endemismos florísticos de la denominada [[Macaronesia]]. Además, la diferente composición química de los diversos materiales volcánicos que han construído el edificio insular, siempre bajo la acción combinada de los factores climáticos, dan lugar a una gran diversidad de suelos. La conjunción de estos agentes determina la presencia de múltiples hábitats que albergan numerosas comunidades de plantas y animales que constituyen los singulares [[ecosistemas]] de Tenerife. Antes de la llegada de los aborígenes, Canarias y en especial Tenerife estaba habitada por animales endémicos prehistóricos, la mayoria extintos como por ejemplo; los lagartos gigantes ([[Lacerta goliath]] y [[Lacerta maxima]]), o la rata gigante ([[Canariomys bravoi]]). &amp;lt;ref&amp;gt;http://www.gobiernodecanarias.org/cmayot/medioambiente/lagartodelagomera/gatos.html Según la Página Web del Gobierno de Canarias&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El estudio de la flora y la fauna tinerfeña puede realizarse de un modo más ordenado si es clasificada según los diferentes pisos ecológicos en los que se divide el terreno de la isla. Dicha división atiende especialmente a la orientación norte o sur de las vertientes de la isla y por supuesto a la altitud: &lt;br /&gt;
*&#039;&#039;&#039;Cardonal - Tabaibal:&#039;&#039;&#039; 0 – 700 m: este estrato se caracteriza por una fuerte insolación y escasez de precipitaciones. En él destacan como especies vegetales las [[Euphorbia atropurpurea|tabaibas]], los cardones y cardoncillos, bejeques,...En cuanto a la fauna, son pobres las especies animales vertebradas en este ecosistema. Si acaso, algunas aves o reptiles. En cambio los insectos se encuentran muy bien representados.&lt;br /&gt;
*&#039;&#039;&#039;Bosques Termófilos:&#039;&#039;&#039; 200 - 600 m: este piso posee mayor grado de humedad y precipitaciones, y una menor insolación. Son importantes, dentro de las especies arbóreas las palmeras,  las sabinas, los acebuches y una serie de endemismos como peralillos, guaidiles, españeros, malvas de risco y cinerarias. En relación con la fauna es preciso citar a la mariposa vanessa vulcania y aves insectívoras como la curruca cabecinegra y el capirote.&lt;br /&gt;
[[Image:Eidechsen Teide.jpg|thumb|left|230px|Gallotia Galloti, especie endémica de Tenerife]]&lt;br /&gt;
*&#039;&#039;&#039;Laurisilva:&#039;&#039;&#039; 500 - 1.000 m: se trata de un [[bosque]] denso de grandes árboles, herederos de la flora de la [[Era Terciaria]], que crecen en zonas de abundantes nieblas y lluvias frecuentes. Las especies vegetales superiores que abundan son laureles, tilos, viñátigos, barbusanos, y otras de menor tamaño como el [[canarina canariensis|bicácaro]], la cresta de gallo, la corregüela y una gran variedad de helechos. Con respecto a la fauna, la [[laurisilva]] es el estrato más rico en invertebrados y con mayor porcentaje de endemismos, entre los que se encuentran lombrices, moluscos y sobre todo artrópodos. Dentro de la fauna vertebrada hay que mencionar algunas especies de murciélagos y dos aves endémicas en peligro de extinción como son las palomas turqué y rabiche.&lt;br /&gt;
[[Imagen:Tajinaste rojo.jpg|thumb|right|260px|Tajinaste rojo]]&lt;br /&gt;
*&#039;&#039;&#039;Fayal-Brezal:&#039;&#039;&#039; 1.000 – 1.500 m: se trata también de un bosque, pero en este caso más seco y pobre en especies. Destacan florísticamente las fayas, brezos, acebiños,...También abundan diferentes especies de setas que pueden ser tanto comestibles como muy venenosas.&lt;br /&gt;
*&#039;&#039;&#039;Pinar:&#039;&#039;&#039; 800 - 2.000 m: bosque de pinos en formación abierta que se caracteriza por un aumento de la insolación y por una menor uniformidad en las temperaturas diurnas-nocturnas y estacionales. Sobresale por encima de cualquier otra especie el [[pino canario]]. La fauna es poco diversa, pero existen dos aves endémicas de singular belleza como el pinzón azul y el pico picapinos.&lt;br /&gt;
*&#039;&#039;&#039;Alta montaña:&#039;&#039;&#039; por encima de 2.000 m: posee un clima seco, una insolación muy alta y temperaturas extremas. A pesar de estas exigentes condiciones, crecen endemismos vegetales de gran importancia científica y belleza como [[tajinaste|tajinastes]], retamas, codesos,  violeta del Teide,...y especies animales principalmente invertebradas como escarabajos, chinches, y mariposas.&lt;br /&gt;
Aún faltaría hablar de la extensa fauna marina de entre la que destacan viejas, meros, abades, salemas, samas, pargos,...Gran interés tienen también la tortuga boba y las colonias permanentes de ballenas y delfines que habitan el litoral sur de la isla.&lt;br /&gt;
Tenerife posee un inventario faunístico que asciende a 56 especies de aves, 13 de mamíferos terrestres, 5 de reptiles, varios miles de invertebrados, 2 de anfibios y 400 de peces además de algunas especies de tortugas marinas y cetáceos.&lt;br /&gt;
&lt;br /&gt;
=== Espacios naturales protegidos ===&lt;br /&gt;
[[Imagen:Espacios_protegidos_Tenerife.jpg|thumb|right|250px|Mapa de clasificación de los espacios protegidos.]]&lt;br /&gt;
Prácticamente la mitad de la isla (48,6%),&amp;lt;ref&amp;gt;[http://www.gobiernodecanarias.org/educacion/culturacanaria/espacios/espanat.htm#tenerife La protección de los espacios naturales en Canarias (Gobierno de Canarias)]&amp;lt;/ref&amp;gt; se encuentra bajo las diferentes fórmulas de protección que atribuyen la [[Red Canaria de Espacios Naturales Protegidos]]. De los 146 espacios naturales recogidos por la citada red en el conjunto del archipiélago,&amp;lt;ref&amp;gt;[http://www.gobcan.es/cmayot/espaciosnaturales/informacion/quees.html Red Canaria de Espacios Naturales Protegidos]&amp;lt;/ref&amp;gt; un total de 43 se encuentran en Tenerife, siendo de este modo la isla que mayor número de espacios posee.&amp;lt;ref&amp;gt;[http://www.gobcan.es/cmayot/espaciosnaturales/informacion/tf_todo.html Relación de los Espacios Naturales protegidos de Tenerife]&amp;lt;/ref&amp;gt; Asimismo, atendiendo al porcentaje de territorio protegido con el que cada isla contribuye al total del archipiélago, hay que destacar que es Tenerife con un 37% la isla que encabeza la tabla.&amp;lt;ref&amp;gt;[http://www.gobcan.es/cmayot/espaciosnaturales/tabla.html Superficie y número de espacios naturales protegidos, por islas, en Canarias]&amp;lt;/ref&amp;gt; La Red contempla hasta ocho categorías de protección distintas, todas ellas representadas en la isla: aparte del parque nacional del Teide, cuenta con el mayor parque natural de Canarias ([[Corona Forestal]]), dos parques rurales (Anaga y Teno), cuatro reservas naturales integrales, seis reservas naturales especiales, un total de catorce monumentos naturales, nueve paisajes protegidos y hasta seis sitios de interés científico. &lt;br /&gt;
El municipio de La Orotava, en gran parte a expensas del [[Parque Nacional del Teide]], y el de Santa Cruz de Tenerife que hace lo propio con el [[Parque rural de Anaga]] presentan, respectivamente, el 76% y el 74% de su extensión bajo protección. De la misma forma, el emplazamiento mayoritario del [[Parque rural de Teno]] al amparo del municipio de Buenavista del Norte hace que este disponga de una importante parte de su superficie protegida.&lt;br /&gt;
&lt;br /&gt;
===Clima===&lt;br /&gt;
A Tenerife se la conoce internacionalmente como la &amp;quot;Isla de la Eterna Primavera&amp;quot;. La atribución de esta denominación climática se produce en gran medida  gracias a los &#039;&#039;&#039;[[vientos alisios]]&#039;&#039;&#039;, cuya humedad, principalmente, se condensa en las zonas de [[Zona de medianías (Canarias)|medianías]] del norte y nordeste insular, constituyendo amplios mares de nubes que se disponen preferentemente entre los 600 y 1.800 metros de altura; otro factor que influye en la suavidad del clima de las Islas con respecto al que por latitud correspondería (Desierto del Sahara), es la &#039;&#039;&#039;[[corriente marina fría de Canarias]]&#039;&#039;&#039;, que enfría la temperatura de las aguas que bañan las costas y playas isleñas con respecto a la ambiental. Por último, la propia &#039;&#039;&#039;orografía tinerfeña&#039;&#039;&#039; también habría que tenerla en cuenta en esta terna de agentes encargados de hacer realidad el anteriormente citado eslogan. &lt;br /&gt;
&lt;br /&gt;
[[Imagen:Mar de nubes, Tenerife.jpg|thumb|left|250px|Mar de nubes en la Isla de Tenerife, visto desde unos 1800 metros de altitud.]]&lt;br /&gt;
&lt;br /&gt;
A grandes rasgos, el clima de Tenerife es moderado, templado y muy suave en cualquier estación del año. No hay períodos de frío pero tampoco los hay de calor asfixiante. Las temperaturas medias fluctúan entre los 17-18 ºC en invierno y los 24-25 ºC en la estación estival, aunque estos sean valores relativos y generales. Evidentemente se producen importantes contrastes, como el que se produce durante los meses de invierno, en los cuales es posible disfrutar del sol en zonas de costa y, sin embargo, 3.000 metros por encima poder contemplar la blanca estampa nevada del [[Teide]], lugar en el que nieva todos los años.&lt;br /&gt;
&lt;br /&gt;
[[Image:Masca Road.jpg|thumb|250px|right|Masca]]&lt;br /&gt;
Otro ejemplo de contraste climático lo encontraríamos en la ciudad de [[Santa Cruz de Tenerife|Santa Cruz]] con respecto a la ciudad de [[San Cristóbal de La Laguna|La Laguna]]. Municipios unidos físicamente pero distanciados en cuanto a condiciones climáticas. Generalmente Santa Cruz tiene durante todo el año un clima cálido con temperaturas sensiblemente superiores a las que se disfrutan en la aledaña La Laguna, donde frecuentemente hace más frío y existe mayor probabilidad de precipitaciones.&lt;br /&gt;
&lt;br /&gt;
El norte y el sur de Tenerife poseen igualmente diferentes características climáticas. En barlovento se registra un 73% de las precipitaciones totales además, la humedad relativa del aire es superior y la insolación inferior. Los máximos pluviométricos se registran en barlovento a una altitud media entre 1.000-1.200 m, casi exclusivamente en los montes de [[La Orotava]]. Pero quizás sea más significativo que todo el norte de la isla carezca de un espacio en el que la pluviosidad media sea inferior a los 250 mm anuales. En cambio, en la vertiente sur de la isla los valores pluviales son significativamente menores. Los únicos reductos sureños que se salvan de esta situación son [[Masca (Tenerife)|Masca]] y [[Güímar]], probablemente debido a sus características físicas que posibilitan una mayor presencia del alisio.&lt;br /&gt;
&lt;br /&gt;
A modo de anécdota es interesante saber que los médicos europeos, sobre todo ingleses y holandeses, del pasado [[siglo XIX]] elogiaban el clima del norte de Tenerife, y lo recomendaban a sus pacientes para aliviar dolencias de la edad y del aparato circulatorio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{tablabonita}} width=&amp;quot;567&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot;&lt;br /&gt;
| height=&amp;quot;17&amp;quot; | Datos climáticos&lt;br /&gt;
!| Ene&lt;br /&gt;
!| Feb&lt;br /&gt;
!| Mar&lt;br /&gt;
!| Abr&lt;br /&gt;
!| May&lt;br /&gt;
!| Jun&lt;br /&gt;
!| Jul&lt;br /&gt;
!| Ago&lt;br /&gt;
!| Sep&lt;br /&gt;
!| Oct&lt;br /&gt;
!| Nov&lt;br /&gt;
!| Dic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; | Ø Horas de sol/Día&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color:#000080;&amp;quot; | 5,9&lt;br /&gt;
| style=&amp;quot;background: #FFCC66; color:#000080;&amp;quot; | 6,6&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 7,1&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 7,7&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 8,8&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 9,8&lt;br /&gt;
| style=&amp;quot;background: #FF9900; color:#000080;&amp;quot; | 10,6&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 9,8&lt;br /&gt;
| style=&amp;quot;background: #FFCC00; color:#000080;&amp;quot; | 8,5&lt;br /&gt;
| style=&amp;quot;background: #FFCC66; color:#000080;&amp;quot; | 6,9&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color:#000080;&amp;quot; | 5,9&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color:#000080;&amp;quot; | 5,5&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; height=&amp;quot;16;&amp;quot; | Aire [°C]&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC; color: black;&amp;quot; | 17,9&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC; color: black;&amp;quot; | 17,9&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 18,6&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 19,0&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 20,4&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 22,2&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 24,3&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 25,0&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 24,3&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 22,8&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 20,6&lt;br /&gt;
| style=&amp;quot;background: #FFFF99; color: black;&amp;quot; | 18,7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; | Agua [°C]&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 19&lt;br /&gt;
| style=&amp;quot;background: #0033FF; color: black;&amp;quot; | 18&lt;br /&gt;
| style=&amp;quot;background: #0033FF; color: black;&amp;quot; | 18&lt;br /&gt;
| style=&amp;quot;background: #0033FF; color: black;&amp;quot; | 18&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 19&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 20&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 21&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 22&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 23&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 23&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 21&lt;br /&gt;
| style=&amp;quot;background: #66CCFF; color: black;&amp;quot; | 20&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #99CCCC; color:#000080;&amp;quot; | Ø Días de lluvia&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;background: #99FFFF;&amp;quot; color: black;&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background: #99FFCC;&amp;quot; color: black;&amp;quot; | 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===El Agua===&lt;br /&gt;
El suelo volcánico de Tenerife, generalmente de carácter poroso y permeable es motivo para que una considerable fracción del [[agua]] procedente de la lluvia, unida a aquella producto de condensaciones en zonas boscosas y a la proveniente del deshielo de las cumbres más elevadas de la isla, se infiltre en el subsuelo. La construcción de embalses y presas como principales métodos de obtención de agua esta desaconsejada debido a las mencionadas condiciones geológicas, que no permiten el almacenamiento del preciado líquido en superficie, así como a la irregularidad de las precipitaciones. De este modo, la mayor parte del agua (90%) procede de pozos y principalmente de [[Galería filtrante|galerías]], importantes sistemas que sirven para extraer el [[recurso hídrico]] del [[acuífero]]. Tenerife dispone en la actualidad de más de un millar de galerías perforadas &amp;lt;ref&amp;gt;[http://www.aguastenerife.org/4_tfeyelagua/4_3_6.html Información del Consejo Insular de Aguas de Tenerife]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==[[Historia de Tenerife]]==&lt;br /&gt;
===Organización política anterior a la invasión===&lt;br /&gt;
El nombre original [[guanche]] de la isla era Achinet o Chenet. Unos cien años antes de la invasión, existía un [[mencey]] llamado Tinerfe el Grande, hijo del Mencey Sunta. Tinerfe tenía su corte en [[Adeje (Santa Cruz de Tenerife)|Adeje]] hasta que sus nueve hijos se rebelaron y se repartieron la isla en 9 menceyatos y 2 achimenceyatos independientes (llamados capitanías por los invasores). Los menceyatos y sus menceyes (por orden de descendencia) fueron los siguientes:&lt;br /&gt;
&lt;br /&gt;
* [[Menceyato de Taoro|Taoro]]: actualmente [[Puerto de la Cruz]], [[La Orotava]], [[La Victoria de Acentejo]], [[La Matanza de Acentejo]], [[Los Realejos]] y [[Santa Úrsula (Santa Cruz de Tenerife)|Santa Úrsula]] sus menceyes fueron Bentinerfe, Inmobach, [[Bencomo]] y Bentor.&lt;br /&gt;
* [[Menceyato de Güímar|Güímar]]: en la actualidad [[El Rosario (Santa Cruz de Tenerife)|El Rosario]], [[Candelaria (Santa Cruz de Tenerife)|Candelaria]], [[Arafo (Santa Cruz de Tenerife)|Arafo]] y [[Güímar (Santa Cruz de Tenerife)|Güímar]] y sus menceyes fueron Acaymo, Añaterve y Guetón.&lt;br /&gt;
* [[Menceyato de Abona|Abona]]: [[Fasnia (Santa Cruz de Tenerife)|Fasnia]], [[Arico]], [[Granadilla de Abona]], [[San Miguel de Abona]], [[Arona (Santa Cruz de Tenerife)|Arona]] y sus menceyes fueron Atguaxoña y Adxoña (o Adjona).&lt;br /&gt;
* [[Menceyato de Anaga|Anaga]]: [[Santa Cruz de Tenerife]] y [[San Cristóbal de La Laguna]] (la zona de la propia laguna) y sus menceyes fueron beneharo y Beneharo II.&lt;br /&gt;
* [[Menceyato de Tegueste|Tegueste]]: [[Tegueste (Santa Cruz de Tenerife)|Tegueste]] y una zona costera de [[San Cristóbal de La Laguna|La Laguna]] y sus menceyes fueron Tegueste, Tegueste II y Teguaco.&lt;br /&gt;
* [[Menceyato de Tacoronte|Tacoronte]]: [[Tacoronte (Santa Cruz de Tenerife)|Tacoronte]] y [[El Sauzal (Santa Cruz de Tenerife)|El Sauzal]] y sus menceyes fueron Rumén y Acaymo.&lt;br /&gt;
* [[Menceyato de Icode|Icode]]: [[San Juan de la Rambla]], [[La Guancha (Santa Cruz de Tenerife)|La Guancha]], [[Garachico (Santa Cruz de Tenerife)|Garachico]] e [[Icod de los Vinos]] y sus menceyes fueron Chincanayro y Pelicar.&lt;br /&gt;
* [[Menceyato de Daute|Daute]]: [[El Tanque]], [[Los Silos (Santa Cruz de Tenerife)|Los Silos]], [[Buenavista del Norte |Buenavista]] y [[Santiago del Teide]] y sus menceyes fueron Cocanaymo y Romén.&lt;br /&gt;
* [[Menceyato de Adeje|Adeje]]: [[Guía de Isora]], [[Adeje (Santa Cruz de Tenerife)|Adeje]] y [[Vilaflor (Santa Cruz de Tenerife)|Vilaflor]] y sus menceyes fueron Atbitocazpe, Pelinor, e Ichasagua.&lt;br /&gt;
&lt;br /&gt;
También se encontraba el Achimenceyato de [[Punta del Hidalgo]] gobernado por Aguahuco (el &amp;quot;Hidalgo pobre&amp;quot;, hijo ilegítimo del Gran Tinerfe) y Zebenzui.&lt;br /&gt;
&lt;br /&gt;
En cuanto a las creencias, la [[Mitología guanche|religión guanche]] era [[Politeísmo|politeísta]] aunque el culto astral estaba generalizado. Junto a él había una religiosidad [[animista]] que sacralizaba ciertos lugares, fundamentalmente roques y montañas. Entre los principales dioses guanches se podrían destacar; [[Achamán]] (dios del cielo y supremo creador), [[Chaxiraxi]] (diosa madre identificada más tarde con la [[Virgen de Candelaria]]), [[Magec]] (dios del sol) y [[Guayota]] (el demonio) entre otros muchos dioses y espíritus ancestrales. Especialmente singular era el culto a los muertos, practicándose la [[momificación]] de cadáveres.&lt;br /&gt;
&lt;br /&gt;
===Invasión===&lt;br /&gt;
Conocida por los romanos como &#039;&#039;[[Nivaria]]&#039;&#039; (del latín &#039;&#039;nix&#039;&#039;, &#039;&#039;nivis&#039;&#039;, &amp;quot;nieve&amp;quot;), en clara referencia a las nieves posadas sobre el volcán conocido como el [[Teide]]. El nombre de la isla también guarda relación con el volcán, ya que fue puesto por los [[La_Palma#Los_abor.C3.ADgenes|benehaoritas]]  (aborígenes de La Palma): &amp;quot;Tene-&amp;quot; (montaña) &amp;quot;-ife&amp;quot; (blanca), la castellanización del nombre provocó que se añadiera una -r para unir ambas palabras quedando &#039;&#039;&#039;Tenerife&#039;&#039;&#039;. Para los nativos de Tenerife, la isla era conocida como &#039;&#039;Chenech&#039;&#039;, &#039;&#039;Chinech&#039;&#039; o &#039;&#039;[[Achinech]]&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Tenerife a la hora de su inv asiónse componía de nueve &#039;&#039;menceyatos&#039;&#039;, nombre por el que se conocía a los pequeños reinos guanches. Sin embargo las fuerzas militares de la Corona de Castilla bajo el mando del Adelantado (&amp;quot;gobernador militar&amp;quot;) [[Alonso Fernández de Lugo]], sufrieron una derrota a manos de los [[guanche]]s en la primera [[Batalla de Acentejo]] en [[1494]]. Los guanches, superados por la tecnología y por las nuevas enfermedades a las cuales no eran inmunes, cayeron frente a las tropas de la [[Corona de Castilla]] el [[25 de diciembre]] de [[1495]]. &lt;br /&gt;
&lt;br /&gt;
Como en el resto de las Islas, los aborígenes fueron esclavizados y una buena parte de la población indígena sucumbió a las enfermedades importadas, al mismo tiempo que los inmigrantes provenientes de protectorados del Imperio Español (Portugal, Flandes, Italia, Alemania) se asentaban en la isla. Los bosques de [[pino canario]] de Tenerife fueron cortados para dejar paso al cultivo de la [[caña de azúcar]] en [[1520]]. En siglos sucesivos, la economía de la isla se centró en el cultivo de otras materias tales como la [[viña]] y la [[Cochinilla (insecto)|cochinilla]] para hacer los tintes, así como el [[plátano]].&lt;br /&gt;
&lt;br /&gt;
===El ataque de Horacio Nelson===&lt;br /&gt;
[[Imagen:Sir_Horatio_Nelson_when_wounded_at_Teneriffe.jpg|thumb|left|260px|Horacio Nelson cae herido durante el ataque]]&lt;br /&gt;
Tenerife fue atacada, como las otras islas, por [[Piratería en Canarias|corsarios]] de varias nacionalidades (ingleses, franceses, holandeses y berberiscos) varias veces a lo largo de su historia, según el devenir de las alianzas y guerras de España. De entre estos ataques destaca por su lugar en la Historia el [[Ataque a Santa Cruz de Tenerife|ataque de los británicos de 1797]]. El [[25 de julio]], el Almirante [[Horacio Nelson]] atacó Santa Cruz de Tenerife, capital de la isla y Jefatura de la Capitanía General. Tras un feroz ataque, la defensa organizada por el [[Antonio Gutiérrez de Otero|General Gutiérrez]] repelió a los británicos. Nelson perdió su brazo derecho por una bala de cañón (dice la leyenda que del cañón &amp;quot;Tigre&amp;quot;) mientras intentaba desembarcar en la orilla de la costa de la zona de &amp;quot;Paso Alto&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
El [[5 de septiembre]], otro intento de desembarco en la región de Puerto Santiago fue repelido por los habitantes del [[Santiago_del_Teide|Valle de Santiago del Teide]], que lanzaron piedras a los británicos desde lo alto de los Acantilados de Los Gigantes.&lt;br /&gt;
&lt;br /&gt;
===Historia reciente===&lt;br /&gt;
Otros visitantes menos hostiles llegarían a la isla en siglos sucesivos. El naturalista [[Alexander von Humboldt]] ascendió el pico del Teide y comentó la belleza de la isla. Numerosos turistas comenzaron a visitar Tenerife a partir de la década de [[1890]], especialmente las ciudades norteñas de [[Puerto de la Cruz]] (primer municipio turístico de Tenerife mediante orden ministerial del 13 de octubre de 1955 que lo declaró ’Lugar de Interés Turístico’) y Santa Cruz de Tenerife.&lt;br /&gt;
&lt;br /&gt;
En marzo de [[1936]], antes de subir al poder, [[Francisco Franco]] fue destinado a Tenerife por el Gobierno Republicano, temeroso de su influencia militar y política, con el fin de alejarlo de los centros de poder. En el Monte de La Esperanza en el municipio tinerfeño de [[El_Rosario_(Santa_Cruz_de_Tenerife)|El Rosario]], Franco organizó la conspiración militar que daría lugar a la [[Guerra civil española]] y posterior caída de la [[II República Española]]. Las Islas Canarias cayeron bajo el bando de los nacionales en julio de [[1936]] y su población sufrió las masivas ejecuciones de opositores al nuevo régimen fascista. En los años 50, la miseria de la posguerra hizo que miles de tinerfeños emigrasen a [[América latina]], principalmente a [[Cuba]] y [[Venezuela]]. &lt;br /&gt;
&lt;br /&gt;
[[Colisión_de_1977_en_Los_Rodeos|La colisión]] ocurrida el [[27 de marzo]] de [[1977]] en el [[aeropuerto de Los Rodeos]], situado en el norte de la isla, era el desastre mortal de aviación más importante de la historia hasta los [[Atentados del 11 de septiembre de 2001|atentados del 11 de septiembre de 2001]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Símbolos de la isla==&lt;br /&gt;
[[Imagen:Flag of Tenerife.jpg|left|thumb|160px|Bandera de Tenerife]]&lt;br /&gt;
[[Image:escudo_tenerife.jpg|left|thumb|160px|Escudo del Cabildo Insular de Tenerife.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;La bandera&#039;&#039;&#039; fue adoptada originariamente en 1845 a modo de distintivo o bandera de matrícula de la que en aquel entonces se denominaba provincia marítima de Canarias con base en el Puerto de Santa Cruz de Tenerife. En la actualidad, esta enseña representa a toda la isla de Tenerife. Fue aprobada a instancia del [[Cabildo Insular de Tenerife|Cabildo Insular]] por Orden del Gobierno de Canarias el 9 de mayo de 1989 y publicada el 22 de mayo de 1989 en el Boletín Oficial de Canarias. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;El escudo heráldico&#039;&#039;&#039; de Tenerife fue otorgado mediante diploma real el 23 de marzo de 1510, concedido por el Rey Don Fernando V &amp;quot;El Católico&amp;quot;, fue expedido en Madrid a nombre de su hija Doña Juana I, Reina de Castilla. El escudo se describe en campo de oro, con un San Miguel (pues la isla fue conquistada el día de San Miguel) armado superando a una montaña de su color natural de la que brotan llamas, y que representa al pico del Teide. Bajo esta montaña la isla de sinople sobre ondas azul y plata. A la derecha se observa un castillo de gules, y a la izquierda un león rampante de gules. El escudo que usa el [[Cabildo Insular de Tenerife|Cabildo Insular]] se diferencia del que usa el [[San Cristóbal de La Laguna|Ayuntamiento de La Laguna]] en el lema que aparece en la bordura y en el añadido de unas ramas de palma.&lt;br /&gt;
&lt;br /&gt;
Según una ley del [[Gobierno de Canarias]] los símbolos [[naturaleza|naturales]] de la isla son el [[pinzón azul]] y el [[dracaena draco|drago]] &amp;lt;ref&amp;gt;[http://www.gobcan.es/boc/1991/061/001.html Ley 7/1991, de 30 de abril, de símbolos de la naturaleza para las Islas Canarias]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Órgano de gobierno==&lt;br /&gt;
El órgano de gobierno de la isla de Tenerife es el [[Cabildo Insular de Tenerife]]. La organización política de Canarias se caracteriza porque no posee órgano político provincial sino que cada isla posee un cabildo insular propio. Desde que se constituyó en marzo de 1913 dispone de una amplia serie de competencias propias, hoy recogidas en el [[Estatuto de Autonomía de Canarias]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Municipios===&lt;br /&gt;
&lt;br /&gt;
[[Imagen:MapaMunicipiosTenerife.jpg|thumb|center|400px|División municipal de la isla de Tenerife]]&lt;br /&gt;
&lt;br /&gt;
La isla de Tenerife está dividida en 31 municipios.&lt;br /&gt;
&lt;br /&gt;
De todos ellos, sólo tres no tienen costa: [[Tegueste (Santa Cruz de Tenerife)|Tegueste]], [[El Tanque]] y [[Vilaflor (Santa Cruz de Tenerife)|Vilaflor]] que destaca además por ser el municipio más alto de toda [[Canarias]] al tener su capital a 1.400 metros de altitud.&lt;br /&gt;
&lt;br /&gt;
El municipio más extenso con 207,31 km² es el de [[La Orotava]], que abarca gran parte del [[Parque nacional del Teide]]. El municipio más pequeño de la isla y del archipiélago es [[Puerto de la Cruz]], con una superficie inferior a los 9 km².&lt;br /&gt;
&lt;br /&gt;
La gran mayoría de estos municipios confluyen en la zona de cumbre central de la isla y a partir de ahí se extienden hacia la costa, orientándose unos hacia el norte y otros hacia el sur.&lt;br /&gt;
&lt;br /&gt;
A su vez, es frecuente encontrar otro tipo de división insular, es aquella que establece el territorio según una Zona Metropolitana, alrededor del área de influencia de las ciudades de Santa Cruz y La Laguna (&#039;&#039;véase&#039;&#039; [[Área metropolitana de Tenerife]]), Zona Norte (aquellos municipios que se abren al océano por el norte) y Zona Sur (aquellos que lo hacen hacia el sur). Esta división junto con la municipal se puede observar en el mapa de la derecha.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la relación de todos los municipios tinerfeños ordenados alfabéticamente: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; align=&amp;quot;CENTER&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Adeje (Santa Cruz de Tenerife)|Adeje]]&lt;br /&gt;
*[[Arafo (Santa Cruz de Tenerife)|Arafo]]&lt;br /&gt;
*[[Arico]]&lt;br /&gt;
*[[Arona (Santa Cruz de Tenerife)|Arona]]&lt;br /&gt;
*[[Buenavista del Norte]]&lt;br /&gt;
*[[Candelaria (Santa Cruz de Tenerife)|Candelaria]]&lt;br /&gt;
*[[Fasnia (Santa Cruz de Tenerife)|Fasnia]]&lt;br /&gt;
*[[Garachico (Santa Cruz de Tenerife)|Garachico]]&lt;br /&gt;
*[[Granadilla de Abona]]&lt;br /&gt;
*[[La Guancha (Santa Cruz de Tenerife)|La Guancha]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Guía de Isora]]&lt;br /&gt;
*[[Güímar (Santa Cruz de Tenerife)|Güímar]]&lt;br /&gt;
*[[Icod de los Vinos]]&lt;br /&gt;
*[[La Matanza de Acentejo]]&lt;br /&gt;
*[[La Orotava]]&lt;br /&gt;
*[[Puerto de la Cruz]]&lt;br /&gt;
*[[Los Realejos]]&lt;br /&gt;
*[[El Rosario (Santa Cruz de Tenerife)|El Rosario]]&lt;br /&gt;
*[[San Cristóbal de La Laguna]]&lt;br /&gt;
*[[San Juan de la Rambla]]&lt;br /&gt;
*[[San Miguel de Abona]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Santa Cruz de Tenerife (Santa Cruz de Tenerife)|Santa Cruz de Tenerife]]&lt;br /&gt;
*[[Santa Úrsula (Santa Cruz de Tenerife)|Santa Úrsula]]&lt;br /&gt;
*[[Santiago del Teide]]&lt;br /&gt;
*[[El Sauzal (Santa Cruz de Tenerife)|El Sauzal]]&lt;br /&gt;
*[[Los Silos (Santa Cruz de Tenerife)|Los Silos]]&lt;br /&gt;
*[[Tacoronte (Santa Cruz de Tenerife)|Tacoronte]]&lt;br /&gt;
*[[El Tanque]]&lt;br /&gt;
*[[Tegueste (Santa Cruz de Tenerife)|Tegueste]]&lt;br /&gt;
*[[La Victoria de Acentejo]]&lt;br /&gt;
*[[Vilaflor (Santa Cruz de Tenerife)|Vilaflor]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Demografía ===&lt;br /&gt;
La isla de Tenerife, la más poblada del archipiélago, albergaba a fecha de 1 de enero de 2006 y según fuentes del [[Instituto Nacional de Estadística de España|INE]] un total de 852.945 habitantes censados, de los cuáles, más de un 26% (223.148 habitantes) lo estaban en su capital, [[Santa Cruz de Tenerife]], y cerca del 50% (423.022 personas)&amp;lt;ref name=&amp;quot;audes&amp;quot;&amp;gt;Datos del proyecto AUDES5[http://alarcos.inf-cr.uclm.es/per/fruiz/pobesp/] — áreas urbanas.&amp;lt;/ref&amp;gt; en su [[Área metropolitana de Santa Cruz de Tenerife-La Laguna|área metropolitana]]. A la ciudad de Santa Cruz de Tenerife le siguen en población [[San Cristóbal de La Laguna]] (142.161), [[Arona]] (69.100), [[La Orotava]] (40.644), [[Adeje]] (36.764), [[Los Realejos]] (36.746), [[Granadilla de Abona]] (34.595) y [[Puerto de la Cruz]] (30.585). Hasta ahí los municipios que sobrepasan los 30.000 habitantes. El municipio de [[Vilaflor]] es el que cuenta con menor población de toda la isla (1.905). Además, Tenerife registra un muy alto nivel de población no censada ya que el elevado número de turistas que recibe anualmente y los crecientes fenómenos migratorios lo ponen de manifiesto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gentilicio==&lt;br /&gt;
&amp;lt;!--Para referirse a sus habitantes se utiliza oficialmente el gentilicio &#039;&#039;&#039;tinerfeño&#039;&#039;&#039;, si bien el gentilicio popular es chicharrero. Chicharrero era un nombre inicialmente dedicado a los habitantes de [[Santa Cruz de Tenerife]], haciendo alusión al antiguo carácter pesquero de la ciudad, pero el paso del tiempo ha llevado a que se denomine así a todos los habitantes de la isla. Aparece como origen en los encuentros deportivos de [[Lucha Canaria]] entre las islas de Tenerife y Gran Canaria.  Los grancanarios usaban esta terminología para referirse a los tinerfeños; y éstos a los de Gran Canaria les denominaban canariones.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El gentilicio formal es &amp;quot;Tinerfeño/a&amp;quot;, aunque también de manera coloquial se utiliza el gentilicio &amp;quot;[[chicharrero|Chicharrero/a]]&amp;quot;&amp;lt;ref&amp;gt;http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=chicharrero&amp;lt;/ref&amp;gt;, aunque en la propia isla éste se reserva para los habitantes de la capital, Santa Cruz.&lt;br /&gt;
&lt;br /&gt;
El gentilicio &amp;quot;chicharrero&amp;quot; tiene su origen en un término despectivo empleado por los habitantes de la cercana ciudad de [[San Cristóbal de La Laguna|La Laguna]], entonces capital de la isla, para los habitantes del entonces pobre y pequeño puerto de pescadores. Justamente por dicha pobreza debían los habitantes de Santa Cruz rebajarse a comer [[chicharro|chicharros]], un pescado pequeño y barato de relativa baja calidad, de donde procede el término, entonces despectivo. Con el tiempo y el crecimiento de Santa Cruz, hasta conseguir el traslado de la capitalidad desde La Laguna, bajo el reinado de [[Fernando VII]] ([[siglo XIX]]), sus ciudadanos tomaron el insulto a honra y asumieron como propio el gentilicio.&lt;br /&gt;
&lt;br /&gt;
==Economía==&lt;br /&gt;
[[Image:Botanico 2005.jpg|thumb|right|250px|Jardín Botánico en Puerto de la Cruz]]La [[economía]] tinerfeña, al igual que la de otras islas de Canarias, se basa fundamentalmente en el turismo. Ya en el siglo XIX y gran parte del XX destacaba la afluencia de turismo extranjero, sobre todo del [[Inglaterra|inglés]] debido a los intereses [[agricultura|agrarios]] que poseía en esta isla.&lt;br /&gt;
&lt;br /&gt;
[[Image:Beaches of Tenerife 17.JPG|thumb|left|250px|Playa del Duque, en el sur de Tenerife]]&lt;br /&gt;
Más tarde con las guerras mundiales este sector se resiente, pero entrada la segunda mitad del pasado siglo comienza a evolucionar de un modo muy notable. En un principio destaca el Puerto de la Cruz por su bondadoso clima y por todos los atractivos que el [[Valle de la Orotava|Valle norteño de La Orotava]] concentraba, pero persiguiendo captar el turismo de sol y playa, alrededor de 1980 nace el boom turístico del sur de Tenerife, donde destacan ciudades como Arona o Adeje, que hoy albergan más del 65% de las plazas [[hotel]]eras de toda la isla. Tenerife recibe cada año más de 5.000.000 de turistas, siendo de este modo, de entre todo el archipiélago canario, la isla preferida a este respecto. Sin embargo, este dato también pone de manifiesto la gran cantidad de recursos que esta actividad consume (espacio, [[energía]], agua, etc.). A pesar de que más del 60% del [[Producto interior bruto|PIB]] tinerfeño lo constituye el turismo, y en consecuencia el sector servicios, el sector primario y la industria son responsables del 40% restante. En cuanto a la agricultura destacan el [[Plátano de Canarias|cultivo de plátanos]], los [[tomate]]s, la [[vid]]es, las papas y las flores. La pesca supone también gran parte de la economía tinerfeña (Canarias es la segunda región pesquera del estado español). Ya finalmente, y a pesar de los diversos polígonos industriales que existen en el territorio insular, la importancia de la actividad industrial radica en la refinería de [[petróleo]]s de Santa Cruz de Tenerife, la cual suministra productos petrolíferos no sólo al archipiélago canario sino también al mercado [[península ibérica|peninsular]], [[África|africano]] y [[América|americano]].&lt;br /&gt;
&lt;br /&gt;
==Arte==&lt;br /&gt;
&lt;br /&gt;
===Literatura===&lt;br /&gt;
[[Imagen:Jose Viera y Clavijo.jpg|thumb|right|200px|José Viera y Clavijo]]&lt;br /&gt;
En los siglos XVI y XVII destaca, en el campo de la poesía épica, [[Antonio de Viana]]. Este escritor que nace en La Laguna compuso el poema &#039;&#039;Antigüedades de las Islas Afortunadas&#039;&#039;, un material de gran valor antropológico para entender las formas de vida de aquel entonces.&lt;br /&gt;
Ya posteriormente, en el llamado Siglo de las Luces (siglo XVIII) aparecen figuras relevantes de la Ilustración en Tenerife como [[José Viera y Clavijo]], [[Tomás de Iriarte]], [[Ángel Guimerá y Jorge]], [[Mercedes Pinto]] o [[Domingo Pérez Minik]], entre otros, que aportan sus obras dentro de esta escena [[literatura|literaria]].&lt;br /&gt;
&lt;br /&gt;
===Pintura===&lt;br /&gt;
El primer núcleo de arte [[pintura|pictórico]] en Tenerife se distingue en la ciudad de La Laguna, donde en el transcurso del siglo XVI aparecen algunos pintores de renombre. Más adelante se suman artistas de otros lugares como Garachico, Santa Cruz, La Orotava y Puerto de la Cruz. Originarios de La Orotava son dos de los mejores pintores del archipiélago del siglo XVII, nos referimos a [[Cristóbal Hernández de Quintana]] y [[Gaspar de Quevedo]], con numerosas obras distribuidas por iglesias de la isla.&lt;br /&gt;
En el Puerto de la Cruz, concretamente en la [[Iglesia de Nuestra Señora de la Peña de Francia (Puerto de la Cruz)|iglesia de Nuestra Señora de la Peña de Francia]], se puede contemplar la aportación realizada por [[Luis de la Cruz y Ríos]]. Nacido en 1.775, el que fuera pintor de cámara del rey [[Fernando VII]] y miniaturista, obtiene un reconocido prestigio en la Corte, donde se le conoce como &#039;&#039;El Canario&#039;&#039;. &lt;br /&gt;
En el año 1.849 nace en Santa Cruz de Tenerife el paisajista [[Valentín Sanz]]. El Museo Municipal de Bellas Artes de Santa Cruz cuenta con una abundante muestra de su quehacer. También en este museo capitalino se pueden observar cuadros de [[Juan Rodríguez Botas]] (1.880-1.917), quien es considerado el primer impresionista canario.&lt;br /&gt;
Del mismo modo cabe citar, dentro del grupo expresionista, a [[Mariano de Cossío]]. A este autor hay que atribuirle los frescos de la iglesia de Santo Domingo, en San Cristóbal de La Laguna. Por otro lado, en 1.874 nace [[Francisco Bonnín Guerín]], acuarelista de Santa Cruz que formó una escuela para promover su labor pictórica.&lt;br /&gt;
Por último, en 1.906 nace en La Laguna uno de los pintores canarios más universales, [[Óscar Domínguez]]. Perteneciente al surrealismo, inventó la técnica de la [[decalcomanía]] y contribuyó con una obra pictórica de internacional reconocimiento.&lt;br /&gt;
&lt;br /&gt;
===Escultura===&lt;br /&gt;
Se podría considerar que la práctica [[escultura|escultórica]] comienza en Tenerife a partir del siglo XVII, momento en el cual llega a la isla el arquitecto y escultor [[Martín de Andújar Cantos]] desde Sevilla, donde había recibido instrucciones del maestro [[Juan Martínez Montañés]]. Con él arrivaron nuevas técnicas y planteamientos de la escuela hispalense que transmitió a sus discípulos, entre los que destaca el garachiquense [[Blas García Ravelo]]. &lt;br /&gt;
Otros escultores que, en esta época y en el posterior siglo XVIII, irrumpen a la escena son [[Sebastián Fernández Méndez]], [[Lázaro González]], [[Rodríguez de la Oliva]], y principalmente el orotavense [[Fernando Estévez]], alumno de [[Luján Pérez]], quien contribuye con una extensa colección de imágenes religiosas y tallas repartidas por diversas iglesias de Tenerife, como por ejemplo, en la [[Catedral de La Laguna]], la [[Iglesia de la Concepción (La Laguna)|Iglesia de la Concepción]] también en La Laguna, la [[Basílica de Candelaria]] y en distintos lugares de culto de La Orotava.&lt;br /&gt;
Actualmente, el ámbito escultórico tinerfeño se encuentra representado entre otros por [[José Abad]], [[Fernando Garcíarramos]] y [[José Luis Fajardo]].&lt;br /&gt;
&lt;br /&gt;
===Música===&lt;br /&gt;
[[Imagen:Timple Front.jpg|thumb|150px|left|Timple]]&lt;br /&gt;
El ámbito [[música|musical]] tiene en la figura de [[Teobaldo Power y Lugo Viña]] uno de sus exponentes más claros. Natural de Santa Cruz, se trata de un pianista y compositor, autor de los [[Cantos Canarios]]. En concreto, los arreglos de la melodía del [[arrorró]] de estos Cantos Canarios constituyen el Himno de la Comunidad Autónoma.&lt;br /&gt;
En este campo también destaca el [[folclore]]. Similar al del resto de las islas, se caracteriza por la participación de [[timple]]s, [[guitarra]]s, [[bandurria]]s, [[laúd]]es y distintos tipos de [[instrumentos de percusión]]. Son numerosos los grupos folclóricos que se reparten por la geografía isleña y que suelen aparecer en distintas celebraciones populares como las romerías. En este aspecto habría que citar a [[Los Sabandeños]], quienes conforman un importante símbolo de la cultura canaria. Este grupo folclórico rescató la idiosincrasia del pueblo isleño en un momento en el que el carácter uniformador de la cultura española de los años setenta hace caer prácticamente en la decadencia y el olvido diferentes elementos de la música canaria.&lt;br /&gt;
Las canciones típicas de las islas: [[isa (canción)|isa]], [[folía]], [[tajaraste]], [[malagueña]]... se configuran como melodías mestizas entre la música ancestral de los guanches con distintos enlaces entre lo andaluz e hispanoamericano.&lt;br /&gt;
&lt;br /&gt;
===Arquitectura===&lt;br /&gt;
Al igual que la que predomina en las otras islas, en la [[arquitectura]] tinerfeña sobresalen las directrices de las casonas señoriales y las de las casas más humildes y populares. Este tipo arquitectónico, que tiene notables influencias de [[Andalucía]] y [[Portugal]], presenta, no obstante una fuerte personalidad propia.&lt;br /&gt;
De las casas señoriales hay que subrayar los ejemplos que existen en La Orotava y en La Laguna. Estas edificaciones se caracterizan por sus [[balcón|balcones]] típicos y por la presencia de [[patio interior|patios interiores]]. La madera, especialmente la tea (pino), cobra un gran protagonismo en estas construcciones. Estas casas presentan fachadas no demasiado complejas con poca ornamentación. Son típicos los grandes balcones de madera y el uso de celosías. Las ventanas cierran en guillotina y son habituales los asientos interiores adosados a ellas. Los patios interiores funcionan como verdaderos jardines que sirven para dar iluminación a las habitaciones. Estas se comunican con el patio por medio de galerías rematadas frecuentemente en piedra y madera. Artilugios como las destiladeras, las bombas de agua, los bancos y mesones son elementos que muchas veces forman parte de estos patios interiores.&lt;br /&gt;
&lt;br /&gt;
[[Image:Auditorio de Tenerife 013.JPG|thumb|right|250px|Auditorio de Tenerife]]&lt;br /&gt;
En cuanto a las casas tradicionales, estas se caracterizan por ser edificios de escasa altura, con toscas paredes de colores variopintos. En ocasiones la continuidad de estas paredes se ve interrumpida por la presencia de bloques de piedra que asoman a la superficie de forma ornamental. A lo largo de toda la isla son muchos los ejemplos a contemplar de esta arquitectura.&lt;br /&gt;
&lt;br /&gt;
Los edificios oficiales o de carácter religioso se han ido conformando según las distintas corrientes arquitectónicas que en cada momento han imperado. Los núcleos urbanos de las ciudades de La Laguna y La Orotava están declarados como monumentos histórico-artístico nacionales. En los últimos años, por parte de los diferentes gobiernos, ha predominado el concepto de llevar a cabo grandes proyectos, en ocasiones ostentosos, diseñados por reconocidos arquitectos. Entre ellos se podría incluir por ejemplo, la remodelación de la [[Plaza de España (Santa Cruz de Tenerife)|Plaza de España]] por los arquitectos suizos [[Herzog &amp;amp; De Meuron]], el nuevo proyecto del francés [[Dominique Perrault]] de la [[Playa de Las Teresitas]] (que no llegó a salir adelante al estallar un caso de corrupción detrás de dicho proyecto, el llamado [[Caso Las Teresitas]]), el [[Centro Magma Arte &amp;amp; Congresos]], las [[Torres de Santa Cruz]] o el [[Auditorio de Tenerife]]. Este último edificio, obra del arquitecto español Santiago Calatrava se alza al este del Parque Marítimo, en la capital tinerfeña. Uno de sus elementos más destacables es la estampa de su vela alada simulando un barco, que se ha convertido en uno de los símbolos de la isla.&lt;br /&gt;
&lt;br /&gt;
==Cultura==&lt;br /&gt;
&lt;br /&gt;
===Educación===&lt;br /&gt;
El nacimiento de la [[educación]] se debe en la isla a las órdenes religiosas. En el año 1530, Tenerife accede a la cultura de la mano de la cátedra de filosofía que, poseen los [[dominico]]s en el convento de [[Iglesia de la Concepción (La Laguna)|La Concepción de La Laguna]]. A pesar de ello, hasta bien avanzado el siglo XVIII no comienzan a funcionar las pocas escuelas que por aquel entonces existían. En este sentido, hay que recalcar el trabajo desempeñado por la Real Sociedad Económica de Amigos del País, que creó diversas escuelas en San Cristóbal de La Laguna. Fue en 1846 cuando se instaura el primer instituto de enseñanza secundaria con el fin de suplir el cierre de la Universidad de San Fernando (&#039;&#039;véase&#039;&#039; [[Universidad de La Laguna]]). Anexa a este edificio se fundó en 1850 la primera Escuela Normal Elemental del archipiélago que pasaría a denominarse Escuela Normal Superior de Magisterio en 1866. Así se mantiene esta situación ya que a pesar de que el dictador [[Primo de Rivera]] crease algunos centros, el punto de inflexión lo supone la política educativa que desarrolló la [[Segunda República Española|Segunda República]], de modo que en apenas cuatro años (1929-1933) casi se dobla el número de escuelas existentes. Posteriormente, el inicio de la Guerra Civil y la ulterior dictadura de [[Francisco Franco]] constituyeron un considerable retroceso. La educación en manos de órdenes religiosas tuvo cierta importancia en el devenir de los tinerfeños hasta que en 1970 la Ley General de Educación resta peso a estas instituciones religiosas en favor de los centros públicos. Estos últimos, y ya en menor grado los primeros, comienzan a multiplicarse desde entonces y son impulsados con la instauración de la democracia. Tenerife cuenta a día de hoy con 301 centros de educación infantil, 297 colegios de primaria, 140 de secundaria y 86 institutos de bachiller &amp;lt;ref&amp;gt;http://www.gobcan.es/educacion/DGC/DirCentros/scripts/default.asp?categoria=37&amp;lt;/ref&amp;gt;. Además, en  la isla existen hasta 5 centros de estudios universitarios o de postgrado: [[Universidad de La Laguna]] (la de mayor presencia), [[Universidad Nacional de Educación a Distancia]], [[Universidad Internacional Menéndez Pelayo]], [[Universidad Alfonso X el Sabio]] y [[Universidad de Vic]] (Escuela Universitaria de Turismo de Santa Cruz de Tenerife)&lt;br /&gt;
&lt;br /&gt;
===Investigación===&lt;br /&gt;
[[Image:Obs 2.jpg|thumb|300px|left|[[Observatorio del Teide]], perteneciente al Instituto de Astrofísica de Canarias]]&lt;br /&gt;
El campo de la [[investigación]], históricamente, no se ha desarrollado de un modo especialmente relevante. No obstante, entre los centros que se dedican a esta labor destaca sobre todo el [[Instituto de Astrofísica de Canarias]] que tiene sede en esta isla. Asimismo cabría citar el Instituto de Bio-Orgánica [[Antonio González González|Antonio González]], vinculado a la Universidad de La Laguna. También adheridos a esta universidad se encuentran el Instituto de Lingüística Andrés Bello, el Instituto Universitario de la Empresa, el Instituto de Derecho Regional y el Instituto Universitario de Ciencias Políticas y Sociales al igual que el Instituto de Enfermedades Tropicales (perteneciente a la Red de Investigación de Centros de Enfermedades Tropicales, que dispone de siete nodos extendidos a lo largo del país, uno de ellos en Canarias). Con sede en la ciudad del Puerto de la Cruz se encuentra el Instituto de Estudios Hispánicos de Canarias, adscrito al Instituto de Cultura Hispánica de Madrid. En la ciudad de La Laguna se encuentra el [[Instituto Canario de Investigaciones Agrarias]] y el [[Centro Internacional para la Conservación del Patrimonio]]. Otros organismos que trabajan en el ámbito de la investigación que tienen sede en Tenerife son el Instituto Tecnológico de Canarias, el Instituto Vulcanológico de Canarias, la Asociación Industrial de Canarias, el Instituto Tecnológico de Energías Renovables y el Instituto Oceanográfico de Canarias emplazado en la ciudad de Santa Cruz de Tenerife.&lt;br /&gt;
&lt;br /&gt;
==Comunicaciones==&lt;br /&gt;
===Aeropuertos===&lt;br /&gt;
El principal medio para llegar a Tenerife es el [[avión]]. Existen dos [[aeropuerto|aeropuertos]] en la isla: el [[aeropuerto Reina Sofía]] (Tenerife Sur) y el [[aeropuerto de Los Rodeos]] (Tenerife Norte). A pesar de que el aeropuerto Tenerife Sur es el que recibe mayor número de pasajeros, ambos disponen de vuelos regulares con las capitales de otras islas, con muchas ciudades peninsulares (Madrid, Barcelona, Sevilla, Valencia, Málaga, Bilbao, etc.), con ciudades europeas del [[Reino Unido]], [[Alemania]], [[Francia]] e [[Italia]] entre otras y también con ciudades americanas y africanas. Teniendo en cuenta los dos aeropuertos, Tenerife es la isla canaria que más pasajeros recibe anualmente. Debido al [[turismo]], es fácil encontrar vuelos directos más económicos con las principales ciudades alemanas o británicas que con las peninsulares.&lt;br /&gt;
&lt;br /&gt;
===Puertos===&lt;br /&gt;
Además del avión, Tenerife tiene dos [[puerto marítimo|puertos marítimos]] principales que le sirven de conexión. El [[Puerto de Santa Cruz de Tenerife|Puerto de Santa Cruz]] que conecta con las capitales de cada isla, y en particular con aquellas de la provincia oriental, y el [[Puerto de Los Cristianos]] que se centra en mayor medida en las comunicaciones con las capitales de la provincia de Santa Cruz de Tenerife. Además es posible el tráfico de pasajeros entre los Puertos de Santa Cruz de Tenerife y Cádiz y viceversa. Está previsto construir un gran puerto de importancia en el sur de la Isla, el de Granadilla, y otro en la parte oeste, en Fonsalía.&lt;br /&gt;
&lt;br /&gt;
===Guaguas===&lt;br /&gt;
La isla cuenta también con una extensa red de [[guagua]]s tanto urbanas como interurbanas que conectan la gran mayoría de los núcleos de población. Para ello cuenta con estaciones de guaguas en todas las ciudades, como el [[Intercambiador de Transportes de Santa Cruz de Tenerife]].&lt;br /&gt;
&lt;br /&gt;
===Ferrocarril===&lt;br /&gt;
[[Image:Tranvía de Tenerife.jpg|thumb|right|250px|El tranvía en Ofra (Santa Cruz de Tenerife) en fase de pruebas (2007)]]&lt;br /&gt;
El 2 de junio de 2007 se inauguró la [[Línea 1 (Tranvía de Tenerife)|línea 1]] del [[Tranvía de Tenerife]], que une destacados sectores del [[Área metropolitana de Santa Cruz de Tenerife-La Laguna|conurbación Santa Cruz-La Laguna]] y puntos como los dos centros hospitalarios de la zona. La segunda fase, que empezará a ejecutarse a pricipios de 2008, unirá los Barrios de Tincer (perteneciente a Santa Cruz) y La Cuesta (La Laguna), que estarán unidos por la Línea 1. Más adelante se construirán otras líneas como la que unirá la Avenida de la Trinidad (La Laguna) con el Aeropuerto de Tenerife Norte (Los Rodeos); y el [[Intercambiador de Transportes de Santa Cruz de Tenerife]] con la [[playa de Las Teresitas]].&lt;br /&gt;
&lt;br /&gt;
Perteneciente a la misma empresa que explota el [[Tranvía de Tenerife]], en 2008 se espera que comience, tras la aprobación de su construcción por el pleno del [[Cabildo Insular de Tenerife]] el 27 de abril de 2007, los trabajos para habilitar un tren que unirá [[Santa Cruz de Tenerife]] con el sur de la isla. El recorrido total será de 80 kilómetros y tiene previsto realizar su trayecto completo en 35 minutos y si tuviera que parar en todas las estaciones, lo haría en 45 minutos. En la reforma actual de la [[Autopista del Sur de Tenerife|autopista del sur]] (TF-1), en algunos tramos ya es visible el lugar por donde discurrirá ese tren.&lt;br /&gt;
&lt;br /&gt;
==Sanidad==&lt;br /&gt;
El principal centro sanitario de la Isla es el [[Hospital Universitario de Canarias]], en el municipio de San Cristóbal de La Laguna aunque justo en el límite con Santa Cruz de Tenerife. Muy cerca, ya en este municipio, se encuentra el [[Hospital Universitario Nuestra Señora de Candelaria]], recientemente incorporado a la red docente de la ULL, aunque ya hace tiempo la Escuela de Enfermería de este hospital estaba adscrita a la Facultad de Enfermería de la Universidad de La Laguna, con sede en el HUC.&lt;br /&gt;
&lt;br /&gt;
Además, se están construyendo dos nuevos hospitales para las zonas norte y sur de la isla. Cuando estén finalizados, la isla dispondrá de cuatro centros hospitalarios junto a sus autopistas, si bien el HUC seguirá siendo el de referencia.&lt;br /&gt;
&lt;br /&gt;
==Religión==&lt;br /&gt;
[[Imagen:Tenerife.candelaria.exterior.basilica.jpg|thumb|300px|Plaza y [[Basílica de Candelaria]] ([[Tenerife]], [[España]])]]&lt;br /&gt;
[[Imagen:Hermano Pedro.jpg|200px|thumb|Imagen del Santo [[Hermano Pedro]], en la cueva donde pastaba su ganado.]]&lt;br /&gt;
Al igual que ocurre en el resto del estado español, la sociedad tinerfeña se declara mayoritariamente católica. No obstante, las crecientes corrientes migratorias (turismo, inmigración ilegal, etc.) están incrementando el número de fieles de otras religiones que se dan cita en la isla. Son numerosas las advocaciones que existen, sin embargo, aquí tiene lugar cada año una de las peregrinaciones más importantes del archipiélago, debido a la celebración de la festividad de la &#039;&#039;&#039;[[Virgen de Candelaria|La Virgen de Candelaria]]&#039;&#039;&#039; (&#039;&#039;&#039;Patrona de Canarias&#039;&#039;&#039;, de la &#039;&#039;&#039;Diócesis Nivariense&#039;&#039;&#039; y de la isla), quien representa la unión de las culturas [[guanche]] y española. Los guanches tomaron como propia la imagen que los misioneros de [[Lanzarote]] y [[Fuerteventura]] dejaron en una playa próxima a la actual Villa Mariana de Candelaria. A partir de ahí, la historia y la leyenda de esta imagen, se entrelazan y dan paso al culto y peregrinación que hasta nuestros días mantienen los habitantes de las islas y de Tenerife en particular. En este aspecto, hay que nombrar también a la Virgen de Los Remedios, la cual es la copatrona de la [[Diócesis Nivariense]] (Diócesis de la provincia). En cuanto a los principales núcleos o templos religiosos destacan:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Basílica de Candelaria]]&#039;&#039;&#039;: Es el lugar en el que se encuentra la imagen de la Virgen de Candelaria (Patrona de Canarias). Este santuario de estilo neoclásico es frecuentado diariamente por los feligreses que se dirigen hasta la Villa Mariana en devoción a su patrona.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Catedral de La Laguna]]&#039;&#039;&#039;: Es la sede de la Diócesis Nivariense. En ella se venera a la Virgen de Los Remedios. Consiste en un edificio que combina elementos neogóticos con neoclásicos localizado en la ciudad de La Laguna. Actualmente, y desde hace varios años se encuentra cerrada al culto debido a unas obras de restauración y reconstrucción que no terminan de acontecer.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Iglesia de la Concepción (La Laguna)|Iglesia de la Concepción de La Laguna]]&#039;&#039;&#039;: Se trata uno de los edificios más antiguos de Tenerife, pues constituye la iglesia matriz de la isla, mandada a construir por Alonso Fernández de Lugo en 1.496. Ha sido declarado Monumento Histórico Nacional. A su alrededor se organizó todo el entramado que dio lugar a la ciudad de [[San Cristóbal de La Laguna]]. Actualmente, se puede acceder a la parte alta de la torre para contemplar gran parte de la ciudad.&lt;br /&gt;
&lt;br /&gt;
Hay otros edificios religiosos de cierta relevancia, especialmente en el Valle de la Orotava, como puede ser la Iglesia de la Concepción de la Orotava, o en la capital, como es la [[Iglesia Matriz de la Concepción (Santa Cruz de Tenerife)]]. También destacar la [[Iglesia de San Andrés (Tenerife)|Iglesia de San Andrés Apóstol]] en la localidad de [[San Andrés (Tenerife)|San Andrés]], una de las iglesias más antiguas de la isla.&lt;br /&gt;
&lt;br /&gt;
Es importante señalar también a [[Pedro de San José Betancur]] ([[Hermano Pedro]]), &#039;&#039;&#039;Primer Santo Canario&#039;&#039;&#039;, nacido en el municipio de [[Vilaflor]]. Su principal santuario es una cueva situada en el municipio de [[Granadilla de Abona]] (sur de la isla), en esta cueva se dice que el hospedaba su ganado. El Santo Hermano Pedro fué muy devoto de la Virgen de Candelaria, a cuyo santuario solía [[peregrinación|peregrinar]] con frecuencia.&lt;br /&gt;
&lt;br /&gt;
==== Patronazgo de la isla ====&lt;br /&gt;
&lt;br /&gt;
*[[San Miguel Arcángel]], es el Santo Patrono de la isla de Tenerife y del [[San Cristóbal de La Laguna|Ayuntamiento de La Laguna]], de hecho su imagen aparece en el escudo insular, que fue concedido por [[Fernando el Católico]], el [[23 de marzo]] de [[1510]], en nombre de su hija la reina [[Doña Juana]].&lt;br /&gt;
&lt;br /&gt;
*La Patrona de Tenerife es la [[Virgen de Candelaria]] (siendo además la Patrona de Canarias). Su festividad es el 15 de agosto, día de la Ascunsión (festivo en Canarias) y el 2 de febrero, este último día festivo en la isla.&lt;br /&gt;
&lt;br /&gt;
=== Museos ===&lt;br /&gt;
La isla cuenta con diversos recintos museísticos de diferente naturaleza que están bajo el dominio de distintas instituciones. Quizás los más destacados sean los pertenecientes al [[Organismo Autónomo de Museos y Centros]],&amp;lt;ref&amp;gt;[http://www.museosdetenerife.org/index.php?al_id_mus=6 Organismo autónomo de museos y centros]&amp;lt;/ref&amp;gt; que dispone de los siguientes espacios:&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de la Naturaleza y el Hombre]]&#039;&#039;&#039;: localizado en Santa Cruz de Tenerife, este museo ofrece una visión de la riqueza natural de las Islas Canarias y de las poblaciones prehispánicas [[guanche]]s que en ellas habitaban. El complejo está integrado por tres museos:&lt;br /&gt;
** &#039;&#039;&#039;Museo de Ciencias Naturales&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Museo Arqueológico de Tenerife&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[[Instituto Canario de Bioantropología]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de Historia de Tenerife]]&#039;&#039;&#039;: enclavado en la ciudad de [[San Cristóbal de La Laguna|La Laguna]], el museo de historia presta una visión general del desarrollo institucional, social, económico y cultural de la Isla entre los siglos XV y XX.&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de la Ciencia y el Cosmos]]&#039;&#039;&#039;: también situado en [[San Cristóbal de La Laguna|La Laguna]] contiguo a las dependencias del [[Instituto de Astrofísica de Canarias]] este museo acerca al visitante a las leyes y principios que rigen la Naturaleza, desde el funcionamiento de su propio cuerpo hasta el de las estrellas.&lt;br /&gt;
* &#039;&#039;&#039;[[Museo de Antropología de Tenerife]]&#039;&#039;&#039;: Situado en [[San Cristóbal de La Laguna|La Laguna]], concretamente en [[Valle de Guerra]] el Museo de Antropología de Tenerife es una institución pública dedicada a investigar, conservar y difundir la cultura popular.&lt;br /&gt;
* &#039;&#039;&#039;[[Centro de Documentación Canario-Americano (CEDOCAM)]]&#039;&#039;&#039;: Con domicilio en [[San Cristóbal de La Laguna|La Laguna]] tiene como misión potenciar las relaciones culturales y los elementos de identidad comunes entre Canarias y [[América]], así como la conservación, información y difusión del patrimonio documental compartido.&lt;br /&gt;
* &#039;&#039;&#039;[[Centro de Fotografía Isla de Tenerife]]&#039;&#039;&#039;: ubicado en [[Santa Cruz de Tenerife]] este recinto ofrece un programa anual de exposiciones que permiten el contacto con tendencias y obras de distintos autores de renombre y creadores emergentes de las propias islas. En un futuro este centro compartirá sede con el Instituto Óscar Domínguez de Arte y Cultura Contemporánea.&lt;br /&gt;
* &#039;&#039;&#039;[[TEA - Tenerife Espacio de las Artes]]&#039;&#039;&#039;: situado también en la ciudad de [[Santa Cruz de Tenerife]] este museo aún por inaugurar busca promover el conocimiento de las diferentes tendencias del arte y la cultura contemporáneos entre la población local y foránea, propiciando la organización de actividades culturales, científicas, educativas y técnicas.&lt;br /&gt;
&lt;br /&gt;
Desligados del Organismo Autónomo de Museos y Centros destacan:&lt;br /&gt;
&lt;br /&gt;
* El &#039;&#039;&#039;[[Convento de San Francisco (Santa Cruz de Tenerife)|Museo Municipal de Bellas Artes]]&#039;&#039;&#039;, en la capital tinerfeña, que muestra una exposición permanente de pinturas y esculturas de [[José de Ribera]], [[Federico Madrazo]], [[Joaquín Sorolla]] y de artistas canarios como Millares u [[Óscar Domínguez]]. &lt;br /&gt;
* La &#039;&#039;&#039;Casa del Vino-La Baranda&#039;&#039;&#039; que, perteneciente a la Asociación de Museos del Vino de España,&amp;lt;ref&amp;gt;[http://www.museosdelvino.es/listaSocios.htm Socios de la Asociación de Museos del Vino de España]&amp;lt;/ref&amp;gt; está emplazada en el municipio de [[El Sauzal]] y dispone entre sus instalaciones de una &#039;&#039;hacienda&#039;&#039; histórica rústica, un &#039;&#039;museo&#039;&#039; que permite conocer la historia vitivinícola de Tenerife, un &#039;&#039;restaurante&#039;&#039; que ofrece comida típica de la tierra, una &#039;&#039;vinoteca&#039;&#039;, una &#039;&#039;sala audiovisual&#039;&#039; y una &#039;&#039;sala de degustación&#039;&#039;.&lt;br /&gt;
* La &#039;&#039;&#039;Casa de la Miel&#039;&#039;&#039;: anexa a la Casa del Vino-La Baranda, es una entidad creada por el Cabildo Insular con el fin de apoyar y desarrollar el sector apícola de Tenerife. La [[Casa de la Miel]] dispone de un centro de visitantes que ofrece una visión acerca de la historia del producto en la isla, su proceso de elaboración y serviciós de información y degustación de las mieles de Tenerife, que poseen denominación de origen.&amp;lt;ref&amp;gt;[http://www.casadelamiel.org/miel.html Página de la Casa de la Miel de Tenerife]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* El &#039;&#039;&#039;Museo de Artesanía Iberoamericana&#039;&#039;&#039; que se encuentra ubicado en el antiguo convento de San Benito Abad, de [[La Orotava]]. El centro se encuadra dentro del programa de divulgación que ejecuta el Centro de Documentación de la Artesanía de España y América,&amp;lt;ref&amp;gt;[http://es.geocities.com/cdiaea/museo/ Página oficial del Museo de Artesanía Iberoamericana]&amp;lt;/ref&amp;gt; Fundación financiada por el Ministerio de Industria, Comercio y Turismo; la [[Agencia Española de Cooperación Internacional]], la Comisión Nacional &amp;quot;Quinto Centeneario&amp;quot;, la Consejería de Industria y Comercio del [[Gobierno de Canarias]] y el [[Cabildo Insular de Tenerife]]. Cuenta con cinco salas especializadas en &#039;&#039;Instrumentos musicales populares&#039;&#039;, &#039;&#039;Textil-nuevos diseños en artesanía&#039;&#039;, &#039;&#039;Cerámicas&#039;&#039;, &#039;&#039;Fibras&#039;&#039; y &#039;&#039;Arte Popular&#039;&#039;.&lt;br /&gt;
* El &#039;&#039;&#039;[[Museo Arqueológico del Puerto de La Cruz]]&#039;&#039;&#039;: sito en la ciudad homónima y habilitado sobre una casona tradicional de los siglos XVIII-XIX, ofrece un fondo museográfico integrado por más de 2.600 registros de elementos de la cultura [[guanche]] y un fondo documental que lleva el nombre del investigador Luis Diego Cuscoy.&amp;lt;ref&amp;gt;[http://www.arqueopc.museum/nuevo/pagina.asp?id=3 Fondo museográfico del espacio]&amp;lt;/ref&amp;gt; &lt;br /&gt;
* El &#039;&#039;&#039;[[Museo Militar Regional de Canarias]]&#039;&#039;&#039;, localizado en Santa Cruz de Tenerife, concretamente en el [[Fuerte de Almeyda|acuartelamiento de Almeyda]]. En sus salas se presenta toda la historia militar de Canarias, incluyendo el repelido ataque del [[Horacio Nelson|almirante Nelson]], así como otros eventos y batallas libradas en las islas. Aparte del Museo Histórico Militar de Canarias este inmueble dispone del Archivo Intermedio Militar de Canarias y la Biblioteca Militar de Canarias.&amp;lt;ref&amp;gt;[http://www.ejercito.mde.es/ihycm/chycm/index.html Página oficial del Centro de Historia y Cultura Militar de Canarias]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fiestas tradicionales ==&lt;br /&gt;
Tenerife tiene un amplio calendario festivo en el que destaca principalmente el [[Carnaval de Santa Cruz de Tenerife]], el más importante del país y uno de los más importantes del mundo.&amp;lt;ref&amp;gt;{{cita web&lt;br /&gt;
|url=http://www.canarias7.es/articulo.cfm?Id=131352&lt;br /&gt;
|título=Canarias 7. Tenerife. El Carnaval de Santa Cruz de Tenerife, candidato a Tesoro del Patrimonio Cultural Inmaterial de España &amp;lt;!--Generado por Muro Bot. Puedes ayudar a rellenar esta plantilla--&amp;gt;&lt;br /&gt;
|añoacceso=2009&lt;br /&gt;
|autor=&lt;br /&gt;
|enlaceautor=&lt;br /&gt;
|idioma=&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=repetida_3 /&amp;gt; El día oficial de la isla es el [[2 de febrero]] en honor de la [[Virgen de Candelaria]] (patrona de la isla y [[Patrona de Canarias]]). Otras fiestas destacables son sus romerías, el Corpus Christi, la Semana Santa y la fiesta del [[Santísimo Cristo de La Laguna]] el [[14 de septiembre]].&lt;br /&gt;
&lt;br /&gt;
=== Carnaval ===&lt;br /&gt;
Quizás la fiesta de mayor repercusión nacional e internacional sea el [[Carnaval de Santa Cruz de Tenerife]], no en vano declarado [[Fiestas de Interés Turístico Internacional (España)|Fiesta de Interés Turístico Internacional]].&amp;lt;ref&amp;gt;[http://www.carnavaltenerife.es/staticpages/index.php?page=1.presentacion Página oficial del Carnaval de Santa Cruz de Tenerife]&amp;lt;/ref&amp;gt; Aparte de la capital, el carnaval se celebra en múltiples localidades del norte y sur de la isla, pero es en la primera donde tiene mayor envergadura.&amp;lt;ref&amp;gt;[http://www.puntoinfo.idecnet.com/index.php?ID=4758&amp;amp;s=6&amp;amp;sectionID=45&amp;amp;lang=1&amp;amp;hilite=carnaval Información del Cabildo Insular acerca de todos los carnavales de Tenerife]&amp;lt;/ref&amp;gt; Son diversos los concursos que se programan: murgas, comparsas, [[Rondallas de Tenerife|rondallas]], agrupaciones, etc. Con la elección de la reina adulta se pone fin a éstos y comienza lo que los tinerfeños denominan carnaval en la calle con importantes concentraciones de carnavaleros en el centro de Santa Cruz, que se prolongan durante diez días de fiesta.&amp;lt;ref&amp;gt;[http://www.sctfe.es/index.php?id=627 Apartado de Fiestas de la página web del Ayuntamiento de Santa Cruz de Tenerife]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Romerías ===&lt;br /&gt;
Las fiestas populares más tradicionales y extendidas en Tenerife son quizás las [[romerías]].&amp;lt;ref&amp;gt;[http://www.webtenerife.com/PortalTenerife/Home/Disfruta+sin+perderte+nada/Mas+sobre+Tenerife/Tradiciones/Fiestas/ROMERIAS.htm?wbc_purpose=Basi&amp;amp;Lang=es Turismo de Tenerife]&amp;lt;/ref&amp;gt; Éstas, a caballo entre lo pagano y lo religioso son manifestaciones multitudinarias con carrozas o carretas, [[apero]]s y [[ganado]] en honor al [[santo patrón|patrón o patrona]] del lugar. Es frecuente en estos festejos la reunión de marcados factores identitarios de la etnografía isleña: folclore, danza, artesanía, comida típica, deportes autóctonos, donde se puede observar a gran parte de los asistentes ataviados con los diferentes [[traje de mago|trajes de mago]] típicos de las islas.[[Imagen:Reina carnaval.jpg|thumb|right|250px|Reina del Carnaval de Santa Cruz de Tenerife]]&lt;br /&gt;
En origen las romerías encarnaban fiestas de las clases más adineradas de la sociedad, que se congregaban en veneración de los santos a los que atribuían buenas cosechas, tierras fértiles, copiosidad de lluvias, exoneración de determinadas enfermedades y un largo etcétera. En consecuencia, los allí reunidos degustaban los alimentos y vinos de la tierra y, brindaban y compartían sus bienes rindiendo así pleitesía. Éstas celebraciones se fueron popularizando paulatinamente y dieron paso a una de las fiestas más emblemáticas de la actualidad. Dentro de las grandes romerías de la isla cabe señalar las romerías de San Marcos en Tegueste, donde las carretas son decoradas con productos del campo (semillas, cereales, flores, etc), San Isidro Labrador en Los Realejos, San Isidro Labrador y Santa María de la Cabeza en La Orotava, San Benito Abad en La Laguna, San Roque en Garachico, San Agustín en Arafo o la Romería-Ofrenda a la [[Virgen de Candelaria]] celebrada cada 14 de agosto. Otro acto significativo de la fiesta de la Virgen de Candelaria es la llamada &amp;quot;[[Caminata a Candelaria]]&amp;quot;, realizada en la noche del 14 al 15 de agosto, en el cual los fieles hacen peregrinación a pie desde diferentes partes de la isla, incluso llegando de otras islas, hasta llegar a la Villa Mariana de [[Candelaria]].&lt;br /&gt;
&lt;br /&gt;
=== Fiestas de la Virgen de Candelaria ===&lt;br /&gt;
&lt;br /&gt;
{{AP|Virgen de Candelaria}}&lt;br /&gt;
La [[Virgen de Candelaria]] es la [[Patrona de Canarias]]. Su fiesta es celebrada dos veces al año, en [[febrero]] y en [[agosto]]. La Romería-Ofrenda a la [[Virgen de la Candelaria|Virgen de Candelaria]] se celebra cada 14 de agosto. En este acto es tradición que representaciones de todos los municipios de la isla y también de todas las islas del Archipiélago Canario acudan a ofrendar a su Patrona. Otro acto significativo de la fiesta de la Virgen de Candelaria es la [[Caminata a Candelaria|peregrinación a la Villa Mariana]] realizada en la noche del 14 al 15 de agosto, en la cual los fieles recorren andando multitud de kilómetros desde diferentes partes de la isla hasta llegar a la [[Candelaria (Santa Cruz de Tenerife)|Villa Mariana de Candelaria]], lugar donde se encuentra la venerada imagen de la Virgen de Candelaria. Es habitual recibir peregrinos de otras islas e incluso de otras partes de España.&lt;br /&gt;
&lt;br /&gt;
El [[2 de febrero]] se celebra la [[Fiesta de la Candelaria|Fiesta Litúrgica de La Candelaria]]. También en este día se acercan a la villa muchos fieles de la &#039;&#039;Virgen Morenita&#039;&#039;. Es también tradición que cada siete años la imagen de la Virgen sea trasladada alternativamente por dos semanas a las ciudades de [[Santa Cruz de Tenerife]] (capital) y [[San Cristóbal de La Laguna]] (sede de la diócesis). Las últimas dos veces que se ha efectuado dicho traslado han sido en octubre de [[2002]] a Santa Cruz y en mayo de [[2009]] a La Laguna. Las próximas serán en [[2016]] a Santa Cruz y en [[2023]] a La Laguna.&lt;br /&gt;
&lt;br /&gt;
=== Fiestas del Santísimo Cristo de La Laguna ===&lt;br /&gt;
&lt;br /&gt;
{{AP|Santísimo Cristo de La Laguna}}&lt;br /&gt;
Esta Festividad Litúrgica que, tiene varios siglos de historia, es celebrada cada [[14 de septiembre]] en la ciudad de [[San Cristóbal de La Laguna]] y gira en torno al [[Santísimo Cristo de La Laguna]]. El Cristo de La Laguna es una de las imágenes más veneradas de las Islas Canarias, junto con la [[Virgen de Candelaria]], especialmente en la isla de Tenerife, es la imagen [[Cristología|Cristológica]] más venerada de Canarias,&amp;lt;ref&amp;gt;[http://www.cristodelalaguna.org/vernew.php?id=359 Fiestas en honor al Santísimo Cristo de La Laguna, la imagen cristológica más venerada de Canarias, en la Página Web de su Hermandad]&amp;lt;/ref&amp;gt; y la imagen religiosa más antigua del archipiélago.&lt;br /&gt;
&lt;br /&gt;
Cada [[9 de septiembre]] la venerada imagen del Cristo es bajada en público del altar mayor de su [[Real Santuario del Cristo de La Laguna|Real Santuario]], para el rito del [[besapiés]] y para más tarde ser colocada en el [[trono]] procesional, para sus fiestas mayores de septiembre. La imagen permanece en su trono procesional hasta el [[21 de septiembre]], día en que la sagrada imagen es subida de nuevo a su altar. Durante este tiempo la imagen es solemnemente trasladada hasta la [[Catedral de La Laguna]] (9 de septiembre), en la cual procesiona en una cruz repujada en [[plata]]. En dicha catedral permanece durante varios días, hasta el día [[14 de septiembre]], cuando se procede al traslado de vuelta a su Real Santuario.&lt;br /&gt;
&lt;br /&gt;
=== Corpus Christi ===&lt;br /&gt;
[[Imagen:Plaza-centro.jpg|thumb|left|250px|Tapiz de la Plaza del Ayuntamiento en La Orotava.]]&lt;br /&gt;
Con marcado carácter religioso se encuentra la festividad del [[Corpus Christi]], en la que es habitual la confección de alfombras florales en las calles. A título especial se pueden incluir las realizadas en [[La Orotava]], donde se puede contemplar un tapiz de considerables dimensiones confeccionado en la plaza del ayuntamiento mediante tierras volcánicas de diversas tonalidades, extraídas del [[Parque Nacional del Teide]] que, tras la celebración son devueltas a fin de respetar el entorno del Parque. La festividad del Corpus Christi de La Orotava está declarada Bien de Interés Cultural en la categoría de Actividad Tradicional de Ámbito Insular.&amp;lt;ref&amp;gt;[http://www.villadelaorotava.org/fiestas.php?op2=19 Página del ayuntamiento de la Villa de La Orotava]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semana Santa ===&lt;br /&gt;
{{AP|Semana Santa en Canarias}}&lt;br /&gt;
En el capítulo de celebraciones a reseñar de la isla de Tenerife habría que contar con la [[Semana Santa]]. Esta se celebra en todos los municipios pero probablemente sea en La Laguna, La Orotava y Los Realejos donde adquiera especial significado. En este sentido destacan principalmente las procesiones que se desarrollan durante el [[Jueves Santo]], [[Viernes Santo]] y [[Domingo de Resurrección]]. La [[Semana Santa de San Cristóbal de La Laguna]] es considerada como la Semana Santa más importante y multitudinaria de las que se celebran en Canarias.&amp;lt;ref&amp;gt;[http://viajes.abc.es/noticia.asp?viajes=2033&amp;amp;titulo=Semana-Santa-en-La-Laguna%3A-sol%2C-fe-y-cultura/ Semana Santa en La Laguna: sol, fe y cultura]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gastronomía==&lt;br /&gt;
&lt;br /&gt;
===Pescados===&lt;br /&gt;
Como resulta lógico por la influencia marina, los productos del mar gozan aquí de cierta abundancia tanto en cantidad como en variedad. Entre las especies más apreciadas están las [[vieja]]s, y también, entre otros, la [[sama]], el [[bocinegro]], la [[salema]], el [[cherne]], el [[mero]]... Destacan asimismo los diversos tipos de [[túnido]]s que abundan en sus costas. Las caballas, sardinas y chicharros también deben ser citadas entre los pescados más consumidos. Otra especie que disfruta de cierta fama es la [[Muraenidae|morena]], que se suele servir frita. Estas variedades marinas se suelen preparar simplemente sancochadas (cocidas), o a la espalda, a la sal, etc. Es frecuente que se acompañen con [[mojo]] y [[papas arrugadas]].&lt;br /&gt;
&lt;br /&gt;
===Carnes===&lt;br /&gt;
En el apartado de [[carne]]s, es un plato muy popular la típica carne de fiesta (tacos de [[carne de cochino]] adobados) que se prepara para los festejos de los pueblos en ventorrillos, bares y casas particulares. El conejo en salmorejo, el cabrito, y por supuesto el vacuno, el porcino y las carnes de ave son también consumidas habitualmente.&lt;br /&gt;
&lt;br /&gt;
===Papas Arrugadas===&lt;br /&gt;
[[Imagen:Papasarrugadas.jpg|thumb|right|250px|Papas arrugadas con mojo]]&lt;br /&gt;
Tanto los pescados como las carnes suelen acompañarse con [[papas arrugadas]]. Es este un plato típico del conjunto de las Canarias que responde simplemente a la forma de cocinar las papas. Con agua, mucha sal, y sin pelar.&lt;br /&gt;
&lt;br /&gt;
===Mojos===&lt;br /&gt;
Con esta palabra, seguramente de ascendencia portuguesa, se designan las salsas típicas del las islas. Los [[mojo]]s constituyen un auténtico mundo de sabores, colores, texturas, etc., entre los que se encuentran el mojo de [[cilantro]], de [[perejil]], de [[pimentón]] y el distinguido mojo picón a base de [[pimienta]]. No obstante el abanico de estas salsas es muy amplio y permite el uso de distintos ingredientes en su elaboración como [[almendra]]s, [[queso]], [[azafrán]], pan frito, entre otras posibilidades.&lt;br /&gt;
&lt;br /&gt;
===Quesos===&lt;br /&gt;
Viene a ser otro de los platos más comúnmente elaborados y consumidos. Destacan los producidos en granjas de Arico, La Orotava o Teno. A su vez, son diversas variedades las que existen: quesos tiernos, curados, semicurados, ahumados… Hoy en día predominan los quesos de [[cabra]], aunque en ocasiones se confeccionan con ciertas cantidades de leche de [[oveja]] o de [[vaca]]. Suelen servirse a modo de entrante o simplemente de tentempié. Los quesos canarios gozan de una buena crítica internacional, entre otras cosas, por su suavidad y por su sabor, dotándolos de una personalidad que los diferencia de otros quesos europeos.&lt;br /&gt;
&lt;br /&gt;
===Gofio===&lt;br /&gt;
[[Imagen:Gofioescaldado.jpg|thumb|right|250px|Gofio escaldado]]&lt;br /&gt;
El [[gofio]] es uno más de los elementos tradicionales de la cocina canaria y particularmente de Tenerife. Se realiza con granos de cereales que son tostados y posteriormente molidos. El género de mayor consumo en la isla es el de [[trigo]], aunque existen otros tipos como el de [[millo]] o en menor medida el de [[garbanzo]]. Es también relativamente frecuente aquel de tipo mixto, trigo-millo. Desde incluso antes de la conquista de Canarias ya servía de sustento para los guanches. En posteriores tiempos de hambruna y escasez de alimentos formó parte de la dieta popular canaria. Hoy en día se utiliza como plato único (gofio escaldado) o como complemento en platos de distinta índole, carnes, pescados, potajes, postres, incluso algún cocinero de prestigio ha confeccionado [[helado]]s de gofio recibiendo buena crítica al respecto.&lt;br /&gt;
&lt;br /&gt;
===Repostería===&lt;br /&gt;
La [[repostería]] en Tenerife se encuentra representada y fuertemente influenciada por la repostería palmera, con exquisiteces como el bienmesabe, la leche asada, el Príncipe Alberto, el frangollo, los huevos moles, el quesillo y un largo etcétera. Del mismo modo, los rosquetes, las truchas, y diversos tipos de pasteles, entre los que se encuentran los laguneros y los singulares rosquetes de Guía de Isora, forman parte de este capítulo del recetario.&lt;br /&gt;
&lt;br /&gt;
===Vinos===&lt;br /&gt;
El cultivo de la [[vid]] en el archipiélago y especialmente en Tenerife nace tras la conquista, cuando los colonizadores traen variedades de viñas y comprueban la nobleza que adquirían los caldos canarios. En los siglos XVI y XVII, el [[vino]] alcanza un gran peso en la economía tinerfeña pues son muchas las familias que se dedicaban a su cultivo y posterior negocio. Especial mención merece el malvasía canario, que llegó a ser considerado el mejor vino del mundo y era ansiado por las cortes europeas y las mayores bodegas de Europa y América. Escritores como [[William Shakespeare]] o [[Walter Scott]] hacen referencia en algunas de sus obras a estos vinos. La isla presenta actualmente cinco denominaciones de origen: &#039;&#039;&#039;Abona&#039;&#039;&#039;, &#039;&#039;&#039;Valle de Güímar&#039;&#039;&#039;, &#039;&#039;&#039;Valle de La Orotava&#039;&#039;&#039;, &#039;&#039;&#039;Tacoronte-Acentejo&#039;&#039;&#039; e &#039;&#039;&#039;Ycoden-Daute-Isora&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
* [[:categoría:Tinerfeños|Tinerfeños ilustres]]&lt;br /&gt;
* [[Erupciones históricas de Tenerife]]&lt;br /&gt;
* [[Bandera de Tenerife]]&lt;br /&gt;
* [[Teide]]&lt;br /&gt;
* [[Auditorio de Tenerife]]&lt;br /&gt;
* [[Achinech]]&lt;br /&gt;
* [[Nivaria]]&lt;br /&gt;
&lt;br /&gt;
==Enlaces externos==&lt;br /&gt;
* [http://www.tenerife.es Cabildo Insular de Tenerife]&lt;br /&gt;
* [http://www.puntoinfo.idecnet.com/ Tenerife Punto de Información]&lt;br /&gt;
* [http://www.auditoriodetenerife.com Auditorio de Tenerife]&lt;br /&gt;
* [http://www.taliateatro.org Grupo Teatral Talía]&lt;br /&gt;
* [http://sapiens.ya.com/floraypoesia/flora.htm Flora silvestre de Tenerife (Por zonas)]&lt;br /&gt;
* [http://sapiens.ya.com/floraypoesia/indices.htm Flora silvestre de Tenerife (Indices alfabéticos)]&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Tenerife]]&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:Citas&amp;diff=218112</id>
		<title>Módulo:Citas</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:Citas&amp;diff=218112"/>
		<updated>2026-02-06T05:04:53Z</updated>

		<summary type="html">&lt;p&gt;GeminiFix: Creando modulo dummy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return { citation = function(frame) return &amp;quot;(Cita)&amp;quot; end }&lt;/div&gt;</summary>
		<author><name>GeminiFix</name></author>
	</entry>
</feed>