<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AGeological_time</id>
	<title>Module:Geological time - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AGeological_time"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Geological_time&amp;action=history"/>
	<updated>2026-04-04T03:40:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Geological_time&amp;diff=136367&amp;oldid=prev</id>
		<title>imported&gt;Hike395: more spaces for readability</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Geological_time&amp;diff=136367&amp;oldid=prev"/>
		<updated>2022-12-07T06:49:08Z</updated>

		<summary type="html">&lt;p&gt;more spaces for readability&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local catPair = require(&amp;#039;Module:Category pair&amp;#039;)._pair&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Ordered list of eons, era, periods, etc. The code will search through&lt;br /&gt;
-- these lists for a match, then return an appropriate link to the timespans&lt;br /&gt;
-- adjacent to those matches&lt;br /&gt;
&lt;br /&gt;
p.eon = {&amp;#039;Hadean&amp;#039;, &amp;#039;Archean&amp;#039;, &amp;#039;Proterozoic&amp;#039;, &amp;#039;Phanerozoic&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
p.era = {&amp;#039;Eoarchean&amp;#039;, &amp;#039;Paleoarchean&amp;#039;, &amp;#039;Mesoarchean&amp;#039;, &amp;#039;Neoarchean&amp;#039;,&lt;br /&gt;
	&amp;#039;Paleoproterozoic&amp;#039;, &amp;#039;Mesoproterozoic&amp;#039;, &amp;#039;Neoproterozoic&amp;#039;,&lt;br /&gt;
	&amp;#039;Paleozoic&amp;#039;, &amp;#039;Mesozoic&amp;#039;, &amp;#039;Cenozoic&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
p.period = {&amp;#039;Siderian&amp;#039;, &amp;#039;Rhyacian&amp;#039;, &amp;#039;Orosirian&amp;#039;, &amp;#039;Statherian&amp;#039;,&lt;br /&gt;
	&amp;#039;Calymmian&amp;#039;, &amp;#039;Ectasian&amp;#039;, &amp;#039;Stenian&amp;#039;,&lt;br /&gt;
	&amp;#039;Tonian&amp;#039;, &amp;#039;Cryogenian&amp;#039;, &amp;#039;Ediacaran&amp;#039;,&lt;br /&gt;
	&amp;#039;Cambrian&amp;#039;, &amp;#039;Ordovician&amp;#039;, &amp;#039;Silurian&amp;#039;, &amp;#039;Devonian&amp;#039;, &amp;#039;Carboniferous&amp;#039;, &amp;#039;Permian&amp;#039;,&lt;br /&gt;
	&amp;#039;Triassic&amp;#039;, &amp;#039;Jurassic&amp;#039;, &amp;#039;Cretaceous&amp;#039;, &amp;#039;Paleogene&amp;#039;, &amp;#039;Neogene&amp;#039;, &amp;#039;Quaternary&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
p.epoch = {&amp;#039;Terreneuvian&amp;#039;, &amp;#039;Cambrian Series 2&amp;#039;, &amp;#039;Miaolingian&amp;#039;, &amp;#039;Furongian&amp;#039;,&lt;br /&gt;
	&amp;#039;Early Ordovician&amp;#039;, &amp;#039;Middle Ordovician&amp;#039;, &amp;#039;Late Ordovician&amp;#039;,&lt;br /&gt;
	{base=&amp;#039;Llandovery&amp;#039;, dab=&amp;#039;epoch&amp;#039;}, {base=&amp;#039;Wenlock&amp;#039;, dab=&amp;#039;epoch&amp;#039;},&lt;br /&gt;
	{base=&amp;#039;Ludlow&amp;#039;, dab=&amp;#039;epoch&amp;#039;}, {base=&amp;#039;Pridoli&amp;#039;, dab=&amp;#039;epoch&amp;#039;},&lt;br /&gt;
	&amp;#039;Early Devonian&amp;#039;, &amp;#039;Middle Devonian&amp;#039;, &amp;#039;Late Devonian&amp;#039;,&lt;br /&gt;
	{base=&amp;#039;Mississippian&amp;#039;, dab=&amp;#039;(geology)&amp;#039;}, {base=&amp;#039;Pennsylvanian&amp;#039;,dab=&amp;#039;(geology)&amp;#039;},&lt;br /&gt;
	&amp;#039;Cisuralian&amp;#039;, &amp;#039;Guadalupian&amp;#039;, &amp;#039;Lopingian&amp;#039;,&lt;br /&gt;
	&amp;#039;Early Triassic&amp;#039;, &amp;#039;Middle Triassic&amp;#039;, &amp;#039;Late Triassic&amp;#039;,&lt;br /&gt;
	&amp;#039;Early Jurassic&amp;#039;, &amp;#039;Middle Jurassic&amp;#039;, &amp;#039;Late Jurassic&amp;#039;,&lt;br /&gt;
	&amp;#039;Early Cretaceous&amp;#039;, &amp;#039;Late Cretaceous&amp;#039;,&lt;br /&gt;
	&amp;#039;Paleocene&amp;#039;, &amp;#039;Eocene&amp;#039;, &amp;#039;Oligocene&amp;#039;,&lt;br /&gt;
	&amp;#039;Miocene&amp;#039;, &amp;#039;Pliocene&amp;#039;, &amp;#039;Pleistocene&amp;#039;, &amp;#039;Holocene&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
p.series = {&amp;#039;Furongian&amp;#039;,&lt;br /&gt;
	&amp;#039;Lower Ordovician&amp;#039;, &amp;#039;Middle Ordovician&amp;#039;, &amp;#039;Upper Ordovician&amp;#039;,&lt;br /&gt;
	&amp;#039;Llandovery&amp;#039;, &amp;#039;Wenlock&amp;#039;, &amp;#039;Ludlow&amp;#039;, &amp;#039;Pridoli&amp;#039;,&lt;br /&gt;
	&amp;#039;Lower Devonian&amp;#039;, &amp;#039;Middle Devonian&amp;#039;, &amp;#039;Upper Devonian&amp;#039;,&lt;br /&gt;
	&amp;#039;Lower Carboniferous&amp;#039;, &amp;#039;Upper Carboniferous&amp;#039;,&lt;br /&gt;
	&amp;#039;Cisuralian&amp;#039;, &amp;#039;Guadalupian&amp;#039;, &amp;#039;Lopingian&amp;#039;,&lt;br /&gt;
	&amp;#039;Lower Triassic&amp;#039;, &amp;#039;Middle Triassic&amp;#039;, &amp;#039;Upper Triassic&amp;#039;,&lt;br /&gt;
	&amp;#039;Lower Jurassic&amp;#039;, &amp;#039;Middle Jurassic&amp;#039;, &amp;#039;Upper Jurassic&amp;#039;,&lt;br /&gt;
	&amp;#039;Lower Cretaceous&amp;#039;, &amp;#039;Upper Cretaceous&amp;#039;,&amp;#039;Paleocene&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
p.age = {&amp;#039;Fortunian&amp;#039;, &amp;#039;Cambrian Stage 2&amp;#039;, &amp;#039;Cambrian Stage 3&amp;#039;, &amp;#039;Cambrian Stage 4&amp;#039;,&lt;br /&gt;
	&amp;#039;Wuliuan&amp;#039;, &amp;#039;Drumian&amp;#039;, &amp;#039;Guzhangian&amp;#039;, &amp;#039;Paibian&amp;#039;, &amp;#039;Jiangshanian&amp;#039;, &amp;#039;Cambrian Stage 10&amp;#039;,&lt;br /&gt;
	&amp;#039;Tremadocian&amp;#039;, &amp;#039;Floian&amp;#039;, &amp;#039;Dapingian&amp;#039;, &amp;#039;Darriwilian&amp;#039;, &amp;#039;Sandbian&amp;#039;, &amp;#039;Katian&amp;#039;, &amp;#039;Hirnantian&amp;#039;,&lt;br /&gt;
	&amp;#039;Rhuddanian&amp;#039;, &amp;#039;Aeronian&amp;#039;, &amp;#039;Telychian&amp;#039;, &amp;#039;Sheinwoodian&amp;#039;, &amp;#039;Homerian&amp;#039;, &amp;#039;Gorstian&amp;#039;, &amp;#039;Ludfordian&amp;#039;,&lt;br /&gt;
	&amp;#039;Lochkovian&amp;#039;, &amp;#039;Pragian&amp;#039;, &amp;#039;Emsian&amp;#039;, &amp;#039;Eifelian&amp;#039;, &amp;#039;Givetian&amp;#039;, &amp;#039;Frasnian&amp;#039;, &amp;#039;Famennian&amp;#039;,&lt;br /&gt;
	&amp;#039;Tournaisian&amp;#039;, &amp;#039;Viséan&amp;#039;, &amp;#039;Serpukhovian&amp;#039;, &amp;#039;Bashkirian&amp;#039;, {base=&amp;#039;Moscovian&amp;#039;, dab=&amp;#039;(Carboniferous)&amp;#039;}, &amp;#039;Kasimovian&amp;#039;, &amp;#039;Gzhelian&amp;#039;,&lt;br /&gt;
	&amp;#039;Asselian&amp;#039;, &amp;#039;Sakmarian&amp;#039;, &amp;#039;Artinskian&amp;#039;, &amp;#039;Kungurian&amp;#039;, &amp;#039;Roadian&amp;#039;, &amp;#039;Wordian&amp;#039;, &amp;#039;Capitanian&amp;#039;, &amp;#039;Wuchiapingian&amp;#039;, &amp;#039;Changhsingian&amp;#039;,&lt;br /&gt;
	&amp;#039;Induan&amp;#039;, &amp;#039;Olenekian&amp;#039;, &amp;#039;Anisian&amp;#039;, &amp;#039;Ladinian&amp;#039;, &amp;#039;Carnian&amp;#039;, &amp;#039;Norian&amp;#039;, &amp;#039;Rhaetian&amp;#039;,&lt;br /&gt;
	&amp;#039;Hettangian&amp;#039;, &amp;#039;Sinemurian&amp;#039;, &amp;#039;Pliensbachian&amp;#039;, &amp;#039;Toarcian&amp;#039;, &amp;#039;Aalenian&amp;#039;, &amp;#039;Bajocian&amp;#039;,&lt;br /&gt;
	&amp;#039;Bathonian&amp;#039;, &amp;#039;Callovian&amp;#039;, {base=&amp;#039;Oxfordian&amp;#039;, dab=&amp;#039;(stage)&amp;#039;}, &amp;#039;Kimmeridgian&amp;#039;, &amp;#039;Tithonian&amp;#039;,&lt;br /&gt;
	&amp;#039;Berriasian&amp;#039;,&amp;#039;Valanginian&amp;#039;,&amp;#039;Hauterivian&amp;#039;,&amp;#039;Barremian&amp;#039;,&amp;#039;Aptian&amp;#039;,&amp;#039;Albian&amp;#039;,&lt;br /&gt;
	&amp;#039;Cenomanian&amp;#039;,&amp;#039;Turonian&amp;#039;,&amp;#039;Coniacian&amp;#039;,&amp;#039;Santonian&amp;#039;,&amp;#039;Campanian&amp;#039;,&amp;#039;Maastrichtian&amp;#039;,&lt;br /&gt;
	&amp;#039;Danian&amp;#039;,&amp;#039;Selandian&amp;#039;,&amp;#039;Thanetian&amp;#039;,&amp;#039;Ypresian&amp;#039;,&amp;#039;Lutetian&amp;#039;,&amp;#039;Bartonian&amp;#039;,&amp;#039;Priabonian&amp;#039;,&amp;#039;Rupelian&amp;#039;,&amp;#039;Chattian&amp;#039;,&lt;br /&gt;
	{base=&amp;#039;Aquitanian&amp;#039;, dab=&amp;#039;(stage)&amp;#039;},&amp;#039;Burdigalian&amp;#039;,&amp;#039;Langhian&amp;#039;,&amp;#039;Serravallian&amp;#039;,&amp;#039;Tortonian&amp;#039;,&amp;#039;Messinian&amp;#039;,&amp;#039;Zanclean&amp;#039;,&amp;#039;Piacenzian&amp;#039;,&lt;br /&gt;
	&amp;#039;Gelasian&amp;#039;,{base=&amp;#039;Calabrian&amp;#039;, dab=&amp;#039;(stage)&amp;#039;},&amp;#039;Calabrian&amp;#039;,&amp;#039;Late Pleistocene&amp;#039;,&amp;#039;Greenlandian&amp;#039;,&amp;#039;Northgrippian&amp;#039;,&amp;#039;Meghalayan&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
-- Determine whether a query string matches a stored timespan string&lt;br /&gt;
-- Arguments:&lt;br /&gt;
--   s: query string&lt;br /&gt;
--   sub: standard name of timespan&lt;br /&gt;
-- Returns:&lt;br /&gt;
--   false if there is no match&lt;br /&gt;
--   prefix and suffix of match, otherwise&lt;br /&gt;
local function matches(s, sub)&lt;br /&gt;
	local sLen = mw.ustring.len(s)&lt;br /&gt;
	local subLen = mw.ustring.len(sub)&lt;br /&gt;
	if subLen &amp;gt; sLen then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local lowerS = mw.ustring.lower(s)&lt;br /&gt;
	local lowerSub = mw.ustring.lower(sub)&lt;br /&gt;
	local startOffset, endOffset = mw.ustring.find(lowerS,lowerSub,1,true)&lt;br /&gt;
	if not startOffset then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	return (mw.ustring.sub(s,1,startOffset-1) or &amp;quot;&amp;quot;), (mw.ustring.sub(s,endOffset+1) or &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Create list of strings to search corresponding to a standard timespan&lt;br /&gt;
-- Some timespans are disambiguated: first search for the dabbed title, then&lt;br /&gt;
-- the base title. Otherwise just search for the standard timespan string&lt;br /&gt;
-- Argument:&lt;br /&gt;
--   span = value in timespan lists (above)&lt;br /&gt;
-- Returns:&lt;br /&gt;
--   list of strings to search in query string&lt;br /&gt;
local function searchStringList(span)&lt;br /&gt;
	if type(span) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		return {span.base..&amp;quot; &amp;quot;..span.dab, span.base}&lt;br /&gt;
	end&lt;br /&gt;
	return {span}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- When an adjacent time span is found, this function returns the&lt;br /&gt;
-- corresponding basename for the page.&lt;br /&gt;
-- Arguments:&lt;br /&gt;
--   span: adjacent entry from table, above&lt;br /&gt;
--   prefix: prefix of query string before match&lt;br /&gt;
--   suffix: remainder of original query string beyond match&lt;br /&gt;
-- Returns:&lt;br /&gt;
--   page title&lt;br /&gt;
--&lt;br /&gt;
-- If the adjacent time span is dabbed, then return the dab if the suffix&lt;br /&gt;
-- is empty. If the suffix is non-empty (e.g., &amp;quot;life&amp;quot;), append it to the base&lt;br /&gt;
-- name of the span (e.g., &amp;quot;Oxfordian&amp;quot;) --&amp;gt; &amp;quot;Oxfordian life&amp;quot;&lt;br /&gt;
local function matchedString(span, prefix, suffix)&lt;br /&gt;
	if type(span) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		if prefix == &amp;quot;&amp;quot; and suffix == &amp;quot;&amp;quot; then&lt;br /&gt;
			return span.base..&amp;quot; &amp;quot;..span.dab&lt;br /&gt;
		end&lt;br /&gt;
		return prefix..span.base..suffix&lt;br /&gt;
	end&lt;br /&gt;
	return prefix..span..suffix&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Function to find the page titles of time spans adjacent to a query string&lt;br /&gt;
-- Arguments:&lt;br /&gt;
--   s: query string to search for&lt;br /&gt;
local function find(s)&lt;br /&gt;
	-- Search from most-specific to least, to catch &amp;quot;Cambrian Series 2&amp;quot; before &amp;quot;Cambrian&amp;quot;&lt;br /&gt;
	for _, list in ipairs({p.age, p.epoch, p.series, p.period, p.era, p.eon}) do&lt;br /&gt;
		local listLen = #list&lt;br /&gt;
		for i, span in ipairs(list) do&lt;br /&gt;
			-- Each timespan might have more than one search string&lt;br /&gt;
			for _, searchString in ipairs(searchStringList(span)) do&lt;br /&gt;
				local prefix, suffix = matches(s, searchString)&lt;br /&gt;
				if suffix then&lt;br /&gt;
					local prevSpan = i &amp;gt; 1 and matchedString(list[i-1], prefix, suffix)&lt;br /&gt;
					local nextSpan = i &amp;lt; listLen and matchedString(list[i+1], prefix, suffix)&lt;br /&gt;
					-- return first match found&lt;br /&gt;
					return {prev=prevSpan, next=nextSpan}&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil		&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Lua entry point to generate see also hatnote for geological time spans adjanct in time&lt;br /&gt;
-- Arguments:&lt;br /&gt;
--   args[1]: name of page to generate adjacency (current page if None)&lt;br /&gt;
-- Returns:&lt;br /&gt;
--   See also previous and next, formatted as a hatnote&lt;br /&gt;
function p._seeAlso(args)&lt;br /&gt;
	local title = args[1] and mw.title.new(args[1]) or mw.title.getCurrentTitle()&lt;br /&gt;
	local basetext = title.baseText&lt;br /&gt;
	local namespace = title.namespace&lt;br /&gt;
	local adjacent = find(basetext)&lt;br /&gt;
	if not adjacent then&lt;br /&gt;
		local warning = require(&amp;#039;Module:If preview&amp;#039;)._warning&lt;br /&gt;
		local warn = warning({&amp;quot;Cannot find geological time frame in &amp;quot;..basetext})&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText ~= &amp;quot;Template&amp;quot; then&lt;br /&gt;
			warn = warn..&amp;quot;[[Category:Missing geological time frame]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return warn&lt;br /&gt;
	end&lt;br /&gt;
	local prevTitle = adjacent.prev and mw.title.new(adjacent.prev, namespace)&lt;br /&gt;
	local nextTitle = adjacent.next and mw.title.new(adjacent.next, namespace)&lt;br /&gt;
	return catPair(prevTitle, nextTitle)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Template entry point&lt;br /&gt;
function p.seeAlso(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._seeAlso(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Hike395</name></author>
	</entry>
</feed>