<?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%3ASandbox%2FBiggins%2FLDSverseWS</id>
	<title>Module:Sandbox/Biggins/LDSverseWS - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FBiggins%2FLDSverseWS"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Biggins/LDSverseWS&amp;action=history"/>
	<updated>2026-05-24T05:35:33Z</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:Sandbox/Biggins/LDSverseWS&amp;diff=145194&amp;oldid=prev</id>
		<title>imported&gt;Biggins: Remove extraneous comment</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Biggins/LDSverseWS&amp;diff=145194&amp;oldid=prev"/>
		<updated>2020-08-07T03:41:35Z</updated>

		<summary type="html">&lt;p&gt;Remove extraneous comment&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements the lion&amp;#039;s share of (what is currently called) Template:LDS/sandbox.&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- TODO:&lt;br /&gt;
--	Take out the assert statements and handle errors more gracefully?&lt;br /&gt;
--	Add support for links to BoM Title page and testimonies of 3/8 witnesses&lt;br /&gt;
--  Handle situations where the book name parameter is mistakenly left out (e.g., {{LDS/sandbox|Alma|7|11}}). If the &amp;quot;bookParam&amp;quot; evaluates to a number, shift all the parameters &amp;quot;down&amp;quot; one (i.e., bookParam-&amp;gt;chapterParam, chapterParam-&amp;gt;verseParam, etc.) and treat the display text (minus any period or other punctuation) is the bookParam.&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	First: define bomBooks, dcBooks, pogpBooks, and bibleBooks&lt;br /&gt;
	These tables (one for each Standard Work) are the heart of the module.&lt;br /&gt;
	They have the following structure:&lt;br /&gt;
		The key is the &amp;quot;correct&amp;quot; name of the book, defined as how it is titled&lt;br /&gt;
			on Wikisource&lt;br /&gt;
		The value for each book is an array of other names it might be known by.&lt;br /&gt;
			Some of these are standard abbreviations, some are common typos &lt;br /&gt;
			(e.g., &amp;quot;Revelations&amp;quot;), and some are included to ensure backwards &lt;br /&gt;
			compatibility with the original {{LDS}} template (e.g., 1_jn).&lt;br /&gt;
			NB: The values do not contain capitalization variants, as those will&lt;br /&gt;
			be tested for in the logic (since these tables are already huge).&lt;br /&gt;
	&lt;br /&gt;
	The four tables are then themselves stored in an array titled standardWorks&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local bomBooks = {&lt;br /&gt;
	[&amp;quot;1 Nephi&amp;quot;] = {&amp;quot;1-ne&amp;quot;, &amp;quot;1_ne&amp;quot;, &amp;quot;1ne&amp;quot;}, &lt;br /&gt;
	[&amp;quot;2 Nephi&amp;quot;] = {&amp;quot;2-ne&amp;quot;, &amp;quot;2_ne&amp;quot;, &amp;quot;2ne&amp;quot;}, &lt;br /&gt;
	[&amp;quot;Jacob&amp;quot;] = {&amp;quot;jac&amp;quot;}, &lt;br /&gt;
	[&amp;quot;Enos&amp;quot;] = {&amp;quot;en&amp;quot;}, &lt;br /&gt;
	[&amp;quot;Jarom&amp;quot;] = {&amp;quot;jar&amp;quot;},&lt;br /&gt;
	[&amp;quot;Omni&amp;quot;] = {&amp;quot;omn&amp;quot;}, &lt;br /&gt;
	[&amp;quot;Words of Mormon&amp;quot;] = {&amp;quot;w-of-m&amp;quot;, &amp;quot;wofm&amp;quot;, &amp;quot;w_of_m&amp;quot;}, &lt;br /&gt;
	[&amp;quot;Mosiah&amp;quot;] = {}, &lt;br /&gt;
	[&amp;quot;Alma&amp;quot;] = {}, &lt;br /&gt;
	[&amp;quot;Helaman&amp;quot;] = {&amp;quot;hel&amp;quot;}, &lt;br /&gt;
	[&amp;quot;3 Nephi&amp;quot;] = {&amp;quot;3-ne&amp;quot;, &amp;quot;3_ne&amp;quot;, &amp;quot;3ne&amp;quot;}, &lt;br /&gt;
	[&amp;quot;4 Nephi&amp;quot;] = {&amp;quot;4-ne&amp;quot;, &amp;quot;4_ne&amp;quot;, &amp;quot;4ne&amp;quot;}, &lt;br /&gt;
	[&amp;quot;Mormon&amp;quot;] = {&amp;quot;morm&amp;quot;, &amp;quot;mormon&amp;quot;}, &lt;br /&gt;
	[&amp;quot;Ether&amp;quot;] = {}, &lt;br /&gt;
	[&amp;quot;Moroni&amp;quot;] = {&amp;quot;moro&amp;quot;, &amp;quot;moroni&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local dcBooks = {&lt;br /&gt;
	[&amp;quot;The Doctrine and Covenants&amp;quot;] = {&amp;quot;dc&amp;quot;, &amp;quot;d-c&amp;quot;, &amp;quot;d&amp;amp;c&amp;quot;, &amp;quot;d &amp;amp; c&amp;quot;,&lt;br /&gt;
		&amp;quot;doctrine and covenants&amp;quot;},&lt;br /&gt;
	[&amp;quot;Official Declaration&amp;quot;] = {&amp;quot;od&amp;quot;, &amp;quot;official declaration&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local pogpBooks = {&lt;br /&gt;
	[&amp;quot;Moses&amp;quot;] = {},&lt;br /&gt;
	[&amp;quot;Abraham&amp;quot;] = {&amp;quot;abr&amp;quot;, &amp;quot;fac-1&amp;quot;, &amp;quot;fac1&amp;quot;, &amp;quot;fac-2&amp;quot;, &amp;quot;fac2&amp;quot;, &amp;quot;fac-3&amp;quot;, &amp;quot;fac3&amp;quot;},&lt;br /&gt;
	[&amp;quot;JST Matthew&amp;quot;] = {&amp;quot;js-m&amp;quot;, &amp;quot;jsm&amp;quot;, &amp;quot;joseph smith matthew&amp;quot;, &amp;quot;jst matt&amp;quot;,&lt;br /&gt;
		&amp;quot;jst-matt&amp;quot;, &amp;quot;jst-matthew&amp;quot;, &amp;quot;js matthew&amp;quot;}, -- NB: This is a special case!&lt;br /&gt;
	[&amp;quot;History&amp;quot;] = {&amp;quot;js-h&amp;quot;, &amp;quot;jsh&amp;quot;, &amp;quot;js history&amp;quot;, &amp;quot;joseph smith history&amp;quot;, &amp;quot;js-hist&amp;quot;},&lt;br /&gt;
	[&amp;quot;Articles of Faith&amp;quot;] = {&amp;quot;a-of-f&amp;quot;, &amp;quot;a_of_f&amp;quot;, &amp;quot;aoff&amp;quot;, &amp;quot;the articles of faith&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local bibleBooks = {						-- adapted from Module: Bibleverse&lt;br /&gt;
	[&amp;quot;Genesis&amp;quot;] = {&amp;quot;gen&amp;quot;, &amp;quot;gn&amp;quot;},			-- Old Testament/Tanakh&lt;br /&gt;
	[&amp;quot;Exodus&amp;quot;] = {&amp;quot;exod&amp;quot;, &amp;quot;ex&amp;quot;},&lt;br /&gt;
	[&amp;quot;Leviticus&amp;quot;] = {&amp;quot;lev&amp;quot;, &amp;quot;lv&amp;quot;},&lt;br /&gt;
	[&amp;quot;Numbers&amp;quot;] = {&amp;quot;num&amp;quot;, &amp;quot;nm&amp;quot;},&lt;br /&gt;
	[&amp;quot;Deuteronomy&amp;quot;] = {&amp;quot;deut&amp;quot;, &amp;quot;dt&amp;quot;},&lt;br /&gt;
	[&amp;quot;Joshua&amp;quot;] = {&amp;quot;josh&amp;quot; , &amp;quot;jo&amp;quot;},&lt;br /&gt;
	[&amp;quot;Judges&amp;quot;] = {&amp;quot;judg&amp;quot;, &amp;quot;jgs&amp;quot;},&lt;br /&gt;
	[&amp;quot;Ruth&amp;quot;] = {&amp;quot;ru&amp;quot;, &amp;quot;ruth&amp;quot;},&lt;br /&gt;
	[&amp;quot;1 Samuel&amp;quot;] = {&amp;quot;1sam&amp;quot;, &amp;quot;1sm&amp;quot;, &amp;quot;1_sam&amp;quot;, &amp;quot;1-sam&amp;quot;},&lt;br /&gt;
	[&amp;quot;2 Samuel&amp;quot;] = {&amp;quot;2sam&amp;quot;, &amp;quot;2sm&amp;quot;, &amp;quot;2_sam&amp;quot;, &amp;quot;2-sam&amp;quot;},&lt;br /&gt;
	[&amp;quot;1 Kings&amp;quot;] = {&amp;quot;1kgs&amp;quot;, &amp;quot;1-kgs&amp;quot;, &amp;quot;1_kgs&amp;quot;},&lt;br /&gt;
	[&amp;quot;2 Kings&amp;quot;] = {&amp;quot;2kgs&amp;quot;, &amp;quot;2-kgs&amp;quot;, &amp;quot;2_kgs&amp;quot;},&lt;br /&gt;
	[&amp;quot;1 Chronicles&amp;quot;] = {&amp;quot;1chron&amp;quot;, &amp;quot;1chr&amp;quot;, &amp;quot;1-chr&amp;quot;, &amp;quot;1_chr&amp;quot;},&lt;br /&gt;
	[&amp;quot;2 Chronicles&amp;quot;] = {&amp;quot;2chron&amp;quot;, &amp;quot;2chr&amp;quot;, &amp;quot;2-chr&amp;quot;, &amp;quot;2_chr&amp;quot;},&lt;br /&gt;
	[&amp;quot;Ezra&amp;quot;] = {},&lt;br /&gt;
	[&amp;quot;Nehemiah&amp;quot;] = {&amp;quot;neh&amp;quot;},&lt;br /&gt;
	[&amp;quot;Esther&amp;quot;] = {&amp;quot;est&amp;quot;, &amp;quot;esth&amp;quot;},&lt;br /&gt;
	[&amp;quot;Job&amp;quot;] = {&amp;quot;jb&amp;quot;},&lt;br /&gt;
	[&amp;quot;Psalms&amp;quot;] = {&amp;quot;ps&amp;quot;, &amp;quot;pss&amp;quot;, &amp;quot;psalm&amp;quot;},&lt;br /&gt;
	[&amp;quot;Proverbs&amp;quot;] = {&amp;quot;prov&amp;quot;, &amp;quot;prv&amp;quot;},&lt;br /&gt;
	[&amp;quot;Ecclesiastes&amp;quot;] = {&amp;quot;eccles&amp;quot;, &amp;quot;eccl&amp;quot;, &amp;quot;qoheleth&amp;quot;},&lt;br /&gt;
	[&amp;quot;Song of Solomon&amp;quot;] = {&amp;quot;songofsol&amp;quot;, &amp;quot;songofsongs&amp;quot;, &amp;quot;song&amp;quot;, &amp;quot;songs&amp;quot;, &amp;quot;sg&amp;quot;, &lt;br /&gt;
		&amp;quot;canticles&amp;quot;, &amp;quot;canticleofcanticles&amp;quot;, &amp;quot;songs of solomon&amp;quot;},	-- catch typos&lt;br /&gt;
	[&amp;quot;Isaiah&amp;quot;] = {&amp;quot;isa&amp;quot;, &amp;quot;is&amp;quot;},&lt;br /&gt;
	[&amp;quot;Jeremiah&amp;quot;] = {&amp;quot;jer&amp;quot;},&lt;br /&gt;
	[&amp;quot;Lamentations&amp;quot;] = {&amp;quot;lam&amp;quot;},&lt;br /&gt;
	[&amp;quot;Ezekiel&amp;quot;] = {&amp;quot;ezek&amp;quot;, &amp;quot;ez&amp;quot;},&lt;br /&gt;
	[&amp;quot;Daniel&amp;quot;] = {&amp;quot;dan&amp;quot;, &amp;quot;dn&amp;quot;},&lt;br /&gt;
	[&amp;quot;Hosea&amp;quot;] = {&amp;quot;hos&amp;quot;},&lt;br /&gt;
	[&amp;quot;Joel&amp;quot;] = {&amp;quot;jl&amp;quot;},&lt;br /&gt;
	[&amp;quot;Amos&amp;quot;] = {&amp;quot;am&amp;quot;},&lt;br /&gt;
	[&amp;quot;Obadiah&amp;quot;] = {&amp;quot;obad&amp;quot;, &amp;quot;ob&amp;quot;},&lt;br /&gt;
	[&amp;quot;Jonah&amp;quot;] = {&amp;quot;jon&amp;quot;},&lt;br /&gt;
	[&amp;quot;Micah&amp;quot;] = {&amp;quot;mic&amp;quot;, &amp;quot;mi&amp;quot;},&lt;br /&gt;
	[&amp;quot;Nahum&amp;quot;] = {&amp;quot;nah&amp;quot;, &amp;quot;na&amp;quot;},&lt;br /&gt;
	[&amp;quot;Habakkuk&amp;quot;] = {&amp;quot;hab&amp;quot;, &amp;quot;hb&amp;quot;},&lt;br /&gt;
	[&amp;quot;Zephaniah&amp;quot;] = {&amp;quot;zeph&amp;quot;, &amp;quot;zep&amp;quot;},&lt;br /&gt;
	[&amp;quot;Haggai&amp;quot;] = {&amp;quot;hag&amp;quot;, &amp;quot;hg&amp;quot;},&lt;br /&gt;
	[&amp;quot;Zechariah&amp;quot;] = {&amp;quot;zech&amp;quot;, &amp;quot;zec&amp;quot;, &amp;quot;zach&amp;quot;, &amp;quot;zac&amp;quot;},		-- catch typos&lt;br /&gt;
	[&amp;quot;Malachi&amp;quot;] = {&amp;quot;mal&amp;quot;},&lt;br /&gt;
	[&amp;quot;Matthew&amp;quot;] = {&amp;quot;matt&amp;quot;, &amp;quot;mt&amp;quot;},						-- New Testament&lt;br /&gt;
	[&amp;quot;Mark&amp;quot;] = {&amp;quot;mk&amp;quot;},&lt;br /&gt;
	[&amp;quot;Luke&amp;quot;] = {&amp;quot;lk&amp;quot;},&lt;br /&gt;
	[&amp;quot;John&amp;quot;] = {&amp;quot;jn&amp;quot;},&lt;br /&gt;
	[&amp;quot;Acts&amp;quot;] = {&amp;quot;actsoftheapostles&amp;quot;, &amp;quot;the acts&amp;quot;},&lt;br /&gt;
	[&amp;quot;Romans&amp;quot;] = {&amp;quot;rom&amp;quot;, &amp;quot;roman&amp;quot;},&lt;br /&gt;
	[&amp;quot;1 Corinthians&amp;quot;] = {&amp;quot;1cor&amp;quot;, &amp;quot;1-cor&amp;quot;, &amp;quot;1_cor&amp;quot;},&lt;br /&gt;
	[&amp;quot;2 Corinthians&amp;quot;] = {&amp;quot;2cor&amp;quot;, &amp;quot;2-cor&amp;quot;, &amp;quot;2_cor&amp;quot;},&lt;br /&gt;
	[&amp;quot;Galatians&amp;quot;] = {&amp;quot;gal&amp;quot;},&lt;br /&gt;
	[&amp;quot;Ephesians&amp;quot;] = {&amp;quot;eph&amp;quot;},&lt;br /&gt;
	[&amp;quot;Philippians&amp;quot;] = {&amp;quot;phil&amp;quot;, &amp;quot;philip&amp;quot;},&lt;br /&gt;
	[&amp;quot;Colossians&amp;quot;] = {&amp;quot;col&amp;quot;},&lt;br /&gt;
	[&amp;quot;1 Thessalonians&amp;quot;] = {&amp;quot;1thess&amp;quot;, &amp;quot;1thes&amp;quot;, &amp;quot;1-thes&amp;quot;, &lt;br /&gt;
		&amp;quot;1_thes&amp;quot;, &amp;quot;1-thess&amp;quot;, &amp;quot;1_thess&amp;quot;},					-- catch typos&lt;br /&gt;
	[&amp;quot;2 Thessalonians&amp;quot;] = {&amp;quot;2thess&amp;quot;, &amp;quot;2thes&amp;quot;, &amp;quot;2-thes&amp;quot;, &lt;br /&gt;
		&amp;quot;2_thes&amp;quot;, &amp;quot;2-thess&amp;quot;, &amp;quot;2_thess&amp;quot;},					-- catch typos&lt;br /&gt;
	[&amp;quot;1 Timothy&amp;quot;] = {&amp;quot;1tim&amp;quot;, &amp;quot;1tm&amp;quot;, &amp;quot;1-tim&amp;quot;, &amp;quot;1_tim&amp;quot;},&lt;br /&gt;
	[&amp;quot;2 Timothy&amp;quot;] = {&amp;quot;2tim&amp;quot;, &amp;quot;2tm&amp;quot;, &amp;quot;2-tim&amp;quot;, &amp;quot;2_tim&amp;quot;},&lt;br /&gt;
	[&amp;quot;Titus&amp;quot;] = {&amp;quot;ti&amp;quot;},&lt;br /&gt;
	[&amp;quot;Philemon&amp;quot;] = {&amp;quot;philem&amp;quot;, &amp;quot;phlm&amp;quot;},&lt;br /&gt;
	[&amp;quot;Hebrews&amp;quot;] = {&amp;quot;heb&amp;quot;, &amp;quot;hebrew&amp;quot;},						-- catch typos&lt;br /&gt;
	[&amp;quot;James&amp;quot;] = {&amp;quot;jas&amp;quot;},&lt;br /&gt;
	[&amp;quot;1 Peter&amp;quot;] = {&amp;quot;1pet&amp;quot;, &amp;quot;1pt&amp;quot;, &amp;quot;1-pet&amp;quot;, &amp;quot;1_pet&amp;quot;},&lt;br /&gt;
	[&amp;quot;2 Peter&amp;quot;] = {&amp;quot;2pet&amp;quot;, &amp;quot;2pt&amp;quot;, &amp;quot;2-pet&amp;quot;, &amp;quot;2_pet&amp;quot;},&lt;br /&gt;
	[&amp;quot;1 John&amp;quot;] = {&amp;quot;1jn&amp;quot;, &amp;quot;1-jn&amp;quot;, &amp;quot;1_jn&amp;quot;},&lt;br /&gt;
	[&amp;quot;2 John&amp;quot;] = {&amp;quot;2jn&amp;quot;, &amp;quot;2-jn&amp;quot;, &amp;quot;2_jn&amp;quot;},&lt;br /&gt;
	[&amp;quot;3 John&amp;quot;] = {&amp;quot;3jn&amp;quot;, &amp;quot;3-jn&amp;quot;, &amp;quot;3_jn&amp;quot;},&lt;br /&gt;
	[&amp;quot;Jude&amp;quot;] = {},&lt;br /&gt;
	[&amp;quot;Revelation&amp;quot;] = {&amp;quot;rev&amp;quot;, &amp;quot;apocalypse&amp;quot;, &amp;quot;apoc&amp;quot;, &amp;quot;rv&amp;quot;, &lt;br /&gt;
		&amp;quot;revelations&amp;quot;},										-- catch typos&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- This table holds the titles of the Standard Works themselves, as found on WS&lt;br /&gt;
local standardWorks = {&lt;br /&gt;
	[&amp;quot;Book of Mormon (1981)&amp;quot;] = bomBooks, &lt;br /&gt;
	[&amp;quot;The Doctrine and Covenants&amp;quot;] = dcBooks, &lt;br /&gt;
	[&amp;quot;The Pearl of Great Price (1913)&amp;quot;] = pogpBooks, &lt;br /&gt;
	[&amp;quot;Bible (King James)&amp;quot;] = bibleBooks&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local wsBaseURL = &amp;quot;[[s:&amp;quot;&lt;br /&gt;
local wsStandardWorks = &amp;quot;Portal:Mormonism#LDS_Standard_Works_(Scriptures)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	-- [=======[ ...oooOOOOOOOooo... ]=======] --&lt;br /&gt;
-- [===========[   HELPER FUNCTIONS  ]===========] --&lt;br /&gt;
	-- [=======[ ...oooOOOOOOOooo... ]=======] --&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	local function getFullBookName(bookParam)&lt;br /&gt;
	Returns the full name of a book of scripture based on the name/abbrev./alias provided&lt;br /&gt;
	NB: Because both Matthew in the NT and JST Matthew have just the title&lt;br /&gt;
		&amp;quot;Matthew&amp;quot; on Wikisource, this function returns &amp;quot;JST Matthew&amp;quot; as the full name&lt;br /&gt;
		of the latter, so that must be dealt with as a special case when constructing&lt;br /&gt;
		the actual link to Wikisource (i.e., you can&amp;#039;t just sub that &amp;quot;full name&amp;quot; in &lt;br /&gt;
		like you can for all other books!)&lt;br /&gt;
]]&lt;br /&gt;
local function getFullBookName(bookParam)&lt;br /&gt;
	assert(bookParam, &amp;quot;No book name provided&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	for title,bookList in pairs(standardWorks) do&lt;br /&gt;
		if bookList[bookParam] then &lt;br /&gt;
			return bookParam -- fully correct name provided already! Done!&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
-- OK so the correct full name wasn&amp;#039;t provided to begin with, so we search&lt;br /&gt;
--		in more depth. First we loop through all the Standard Works and pull out&lt;br /&gt;
--		the bookLists (e.g., bomBookList or bibleBookList)&lt;br /&gt;
	for title,bookList in pairs(standardWorks) do&lt;br /&gt;
		-- next we loop through the bookList and do a case-insensitive compare &lt;br /&gt;
		--		between the full name of each book and the book name provided&lt;br /&gt;
		for fullName,abbrevs in pairs(bookList) do&lt;br /&gt;
			if string.lower(fullName) == string.lower(bookParam) then&lt;br /&gt;
				-- great news, they passed in e.g. &amp;quot;job&amp;quot;, which matches &amp;quot;Job&amp;quot;! Done!&lt;br /&gt;
				return fullName&lt;br /&gt;
			end&lt;br /&gt;
			-- ok they didn&amp;#039;t just pass in a different-cased version of the full name&lt;br /&gt;
			--		so we have to do a case-insensitive compare between all the&lt;br /&gt;
			--		book abbreviations/aliases and the book name provided&lt;br /&gt;
			for i,abbrev in pairs(abbrevs) do&lt;br /&gt;
				-- In theory all the abbrev&amp;#039;s should be all lowercase anyway, &lt;br /&gt;
				--		but who knows if later people maintaining this code will&lt;br /&gt;
				--		keep that convention so we lower both strings.&lt;br /&gt;
				if string.lower(abbrev) == string.lower(bookParam) then&lt;br /&gt;
					-- found an abbreviation/alias that matches! Done!&lt;br /&gt;
					return fullName&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- At this point we&amp;#039;ve searched, without regard to case, creed, or color,&lt;br /&gt;
	--	for the alleged book of scripture they provided, but it ain&amp;#039;t here!&lt;br /&gt;
	assert(false, &amp;quot;Book &amp;lt;&amp;quot; .. bookParam .. &amp;quot;&amp;gt; not found in Standard Works&amp;quot;)&lt;br /&gt;
	return &amp;quot;&amp;quot;&lt;br /&gt;
end --function getFullBookName(bookParam)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	local function getStandardWork(bookParam)&lt;br /&gt;
	returns the Standard Work (as titled by Wikisource) that contains the book &lt;br /&gt;
		passed in.&lt;br /&gt;
]]&lt;br /&gt;
local function getStandardWork(bookParam)&lt;br /&gt;
	&lt;br /&gt;
	assert(bookParam, &amp;quot;No book name provided&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local book = getFullBookName(bookParam)&lt;br /&gt;
	assert(book, &amp;quot;Book &amp;lt;&amp;quot; .. bookParam .. &amp;quot;&amp;gt; not found in Standard Works&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- check the standardWorks table for any values that have a key with the &lt;br /&gt;
	-- full name of the book; if so, return the key (the title of the SW)&lt;br /&gt;
	for title,bookList in pairs(standardWorks) do&lt;br /&gt;
		if bookList[book] then return title end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	assert(false, &amp;quot;Book &amp;lt;&amp;quot; .. book .. &amp;quot;&amp;gt; is not a full book name found in Standard Works&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Preconditions: book, and chapter are non-nil&lt;br /&gt;
local function buildBookmark(book, chapter, verse)&lt;br /&gt;
	&lt;br /&gt;
	if string.find(book, &amp;quot;^Section&amp;quot;) then&lt;br /&gt;
		if verse then&lt;br /&gt;
			return &amp;quot;#&amp;quot; .. verse -- D&amp;amp;C sections just use the verse number&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;&amp;quot; -- if they&amp;#039;re just citing a Section then no bookmark needed at all&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if verse then&lt;br /&gt;
		return &amp;quot;#&amp;quot; .. chapter .. &amp;quot;:&amp;quot; .. verse&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;#chapter_&amp;quot; .. chapter&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function buildFinalDisplayText(displayText, chapter, verse, endVerse, endVerseFlag)&lt;br /&gt;
	local t = displayText&lt;br /&gt;
	if chapter then t =  t .. &amp;quot; &amp;quot; .. chapter end&lt;br /&gt;
	if verse then&lt;br /&gt;
		t = t .. &amp;quot;:&amp;quot; .. verse&lt;br /&gt;
		if endVerse then&lt;br /&gt;
			if endVerseFlag then&lt;br /&gt;
				t = t .. endVerse&lt;br /&gt;
			else&lt;br /&gt;
				t = t .. &amp;quot;–&amp;quot; .. endVerse&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function handleOD(displayTextParam, chapter)&lt;br /&gt;
	if chapter == &amp;quot;1&amp;quot; then&lt;br /&gt;
			return wsBaseURL .. &amp;quot;The_Doctrine_and_Covenants/Official_Declaration_1|&amp;quot; .. displayTextParam .. &amp;quot; 1]]&amp;quot;&lt;br /&gt;
		elseif chapter == &amp;quot;2&amp;quot; then&lt;br /&gt;
			return &amp;quot;[https://www.churchofjesuschrist.org/study/scriptures/dc-testament/od/2?lang=eng &amp;quot; .. displayTextParam .. &amp;quot; 2]&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			assert(false, &amp;quot;No such Official Declaration&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function handleFewParams(displayTextParam)&lt;br /&gt;
	if not displayTextParam then&lt;br /&gt;
		-- no parameters provided to the template at all&lt;br /&gt;
		return wsBaseURL .. wsStandardWorks .. &amp;quot;|LDS Standard Works]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- otherwise same link but displaying the text they provided&lt;br /&gt;
	return wsBaseURL .. wsStandardWorks .. &amp;quot;|&amp;quot; .. displayTextParam .. &amp;quot;]]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function trimSpaces(arg)&lt;br /&gt;
	if arg then&lt;br /&gt;
		return string.match(arg, &amp;quot;^%s*(.-)%s*$&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function extractParams(args)&lt;br /&gt;
	local displayTextParam = trimSpaces(args[1])&lt;br /&gt;
	local bookParam = trimSpaces(args[2])&lt;br /&gt;
	local chapterParam = trimSpaces(args[3])&lt;br /&gt;
	local verseParam = trimSpaces(args[4])&lt;br /&gt;
	local endVerseParam = trimSpaces(args[5])&lt;br /&gt;
	-- the 6th and 7th parameters, for footnotes and cross-references, have no&lt;br /&gt;
	--	use on Wikisource (and don&amp;#039;t seem to work even on CoCJ.org, but whatever)&lt;br /&gt;
	local endVerseFlag = trimSpaces(args[8])&lt;br /&gt;
	return displayTextParam, bookParam, chapterParam, verseParam, endVerseParam, endVerseFlag&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
	-- [=======[ ...oooOOOOOOOooo... ]=======] --&lt;br /&gt;
-- [===========[    MAIN FUNCTION    ]===========] --&lt;br /&gt;
	-- [=======[ ...oooOOOOOOOooo... ]=======] --&lt;br /&gt;
&lt;br /&gt;
-- function p.main(frame)&lt;br /&gt;
-- This function returns a wikitext link to the cited LDS scripture on Wikisource&lt;br /&gt;
--	(except for Official Declaration 2, which is copyrighted)&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame:getParent().args -- the args to the template that invokes this module&lt;br /&gt;
	local displayTextParam, bookParam, chapterParam, verseParam, endVerseParam, endVerseFlag = extractParams(args)&lt;br /&gt;
	&lt;br /&gt;
	local wikiText = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if not bookParam then --fewer than two parameters provided to the template&lt;br /&gt;
		return handleFewParams(displayTextParam)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local fullBookName = getFullBookName(bookParam)&lt;br /&gt;
	local standardWork = getStandardWork(fullBookName)&lt;br /&gt;
	&lt;br /&gt;
	if fullBookName == &amp;quot;Official Declaration&amp;quot; then&lt;br /&gt;
		return handleOD(displayTextParam, chapterParam)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	wikiText = wsBaseURL .. standardWork -- start of the wikilink text&lt;br /&gt;
	&lt;br /&gt;
	-- Special case for JST Matthew (safe to do since we&amp;#039;ve already determined &lt;br /&gt;
	--	which Standard Work we&amp;#039;re linking to)&lt;br /&gt;
	if fullBookName == &amp;quot;JST Matthew&amp;quot; then fullBookName = &amp;quot;Matthew&amp;quot; end&lt;br /&gt;
	&lt;br /&gt;
	-- Special case for sections of the Doctrine and Covenants&lt;br /&gt;
	if fullBookName == &amp;quot;The Doctrine and Covenants&amp;quot; then&lt;br /&gt;
		if chapterParam then&lt;br /&gt;
			fullBookName = &amp;quot;Section &amp;quot; .. chapterParam&lt;br /&gt;
		else&lt;br /&gt;
			fullBookName = nil		-- The user has not provided a chapter (section) so this is treated as wanting to cite the D&amp;amp;C generally&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if fullBookName then&lt;br /&gt;
		wikiText = wikiText .. &amp;quot;/&amp;quot; .. fullBookName&lt;br /&gt;
		if chapterParam then&lt;br /&gt;
			wikiText = wikiText .. buildBookmark(fullBookName, chapterParam, verseParam)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	wikiText = wikiText .. &amp;quot;|&amp;quot;&lt;br /&gt;
	wikiText = wikiText .. buildFinalDisplayText(displayTextParam, chapterParam, verseParam, endVerseParam, endVerseFlag)&lt;br /&gt;
	wikiText = wikiText .. &amp;quot;]]&amp;quot;		-- DON&amp;#039;T FORGET!!!&lt;br /&gt;
	return wikiText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Biggins</name></author>
	</entry>
</feed>