imported>Biggins
mNo edit summary
 
(No difference)

Latest revision as of 12:32, 1 September 2020

Documentation for this module may be created at Module:Sandbox/Biggins/ErrorHandling/doc

local p = {};

-- Tables taken from the LDSverse module:
local bomBooks = {
	["Title Page"] = {"ttl", "ttlpg", "title", "title-page", "title_page"},
	["Testimony of Three Witnesses"] = {"three", "3witnesses"},
	["Testimony of Eight Witnesses"] = {"eight", "8witnesses"},
	["1 Nephi"] = {"1-ne", "1_ne", "1ne", "1 ne"}, 
	["2 Nephi"] = {"2-ne", "2_ne", "2ne", "2 ne"}, 
	["Jacob"] = {"jac"}, 
	["Enos"] = {"en"}, 
	["Jarom"] = {"jar"},
	["Omni"] = {"omn"}, 
	["Words of Mormon"] = {"w-of-m", "wofm", "w_of_m"}, 
	["Mosiah"] = {}, 
	["Alma"] = {}, 
	["Helaman"] = {"hel"}, 
	["3 Nephi"] = {"3-ne", "3_ne", "3ne", "3 ne"}, 
	["4 Nephi"] = {"4-ne", "4_ne", "4ne", "4 ne"}, 
	["Mormon"] = {"morm", "mormon"}, 
	["Ether"] = {}, 
	["Moroni"] = {"moro", "moroni"}
}

local dcBooks = {
	["The Doctrine and Covenants"] = {"dc", "d-c", "d&c", "d & c",
		"doctrine and covenants"},
	["Official Declaration"] = {"od", "official declaration"}
}

local lofBooks = {
	["Lectures on Faith"] = {"lof", "l-o-f", "l-of-f", "loff", "lectures"}
}

local pogpBooks = {
	["Moses"] = {},
	["Abraham"] = {"abr", "fac-1", "fac1", "fac-2", "fac2", "fac-3", "fac3"},
	["JST Matthew"] = {"js-m", "jsm", "joseph smith matthew", "jst matt",
		"jst-matt", "jst-matthew", "js matthew"}, -- NB: This is a special case!
	["History"] = {"js-h", "jsh", "js history", "joseph smith history", 
		"js-hist", "js hist"},
	["Articles of Faith"] = {"a-of-f", "a_of_f", "aoff", "the articles of faith"}
}

local bibleBooks = {
	["Genesis"] = {"gen", "gn"},
	["Exodus"] = {"exod", "ex"},
	["Leviticus"] = {"lev", "lv"},
	["Numbers"] = {"num", "nm"},
	["Deuteronomy"] = {"deut", "dt"},
	["Joshua"] = {"josh" , "jo"},
	["Judges"] = {"judg", "jgs"},
	["Ruth"] = {"ru", "ruth"},
	["1 Samuel"] = {"1sam", "1sm", "1_sam", "1-sam", "1 sam"},
	["2 Samuel"] = {"2sam", "2sm", "2_sam", "2-sam", "2 sam"},
	["1 Kings"] = {"1kgs", "1-kgs", "1_kgs", "1 kgs"},
	["2 Kings"] = {"2kgs", "2-kgs", "2_kgs", "2 kgs"},
	["1 Chronicles"] = {"1chron", "1chr", "1-chr", "1_chr", "1 chr"},
	["2 Chronicles"] = {"2chron", "2chr", "2-chr", "2_chr", "2 chr"},
	["Ezra"] = {},
	["Nehemiah"] = {"neh"},
	["Esther"] = {"est", "esth"},
	["Job"] = {"jb"},
	["Psalms"] = {"ps", "pss", "psalm"},
	["Proverbs"] = {"prov", "prv"},
	["Ecclesiastes"] = {"eccles", "eccl", "qoheleth"},
	["Song of Solomon"] = {"songofsol", "songofsongs", "song", "songs", "sg", 
		"canticles", "canticleofcanticles", "songs of solomon"},
	["Isaiah"] = {"isa", "is"},
	["Jeremiah"] = {"jer"},
	["Lamentations"] = {"lam"},
	["Ezekiel"] = {"ezek", "ez"},
	["Daniel"] = {"dan", "dn"},
	["Hosea"] = {"hos"},
	["Joel"] = {"jl"},
	["Amos"] = {"am"},
	["Obadiah"] = {"obad", "ob"},
	["Jonah"] = {"jon"},
	["Micah"] = {"mic", "mi"},
	["Nahum"] = {"nah", "na"},
	["Habakkuk"] = {"hab", "hb"},
	["Zephaniah"] = {"zeph", "zep"},
	["Haggai"] = {"hag", "hg"},
	["Zechariah"] = {"zech", "zec", "zach", "zac"},
	["Malachi"] = {"mal"},
	["Matthew"] = {"matt", "mt"},
	["Mark"] = {"mk"},
	["Luke"] = {"lk"},
	["John"] = {"jn"},
	["Acts"] = {"actsoftheapostles", "the acts", "acts of the apostles",
		"the acts of the apostles"},
	["Romans"] = {"rom", "roman"},
	["1 Corinthians"] = {"1cor", "1-cor", "1_cor", "1 cor"},
	["2 Corinthians"] = {"2cor", "2-cor", "2_cor", "2 cor"},
	["Galatians"] = {"gal"},
	["Ephesians"] = {"eph"},
	["Philippians"] = {"phil", "philip"},
	["Colossians"] = {"col"},
	["1 Thessalonians"] = {"1thess", "1thes", "1-thes", 
		"1_thes", "1-thess", "1_thess", "1 thess", "1 thes"},
	["2 Thessalonians"] = {"2thess", "2thes", "2-thes", 
		"2_thes", "2-thess", "2_thess", "2 thess", "2 thes"},
	["1 Timothy"] = {"1tim", "1tm", "1-tim", "1_tim", "1 tim"},
	["2 Timothy"] = {"2tim", "2tm", "2-tim", "2_tim", "2 tim"},
	["Titus"] = {"ti"},
	["Philemon"] = {"philem", "phlm"},
	["Hebrews"] = {"heb", "hebrew"},
	["James"] = {"jas"},
	["1 Peter"] = {"1pet", "1pt", "1-pet", "1_pet", "1 pet"},
	["2 Peter"] = {"2pet", "2pt", "2-pet", "2_pet", "2 pet"},
	["1 John"] = {"1jn", "1-jn", "1_jn", "1 jn"},
	["2 John"] = {"2jn", "2-jn", "2_jn", "2 jn"},
	["3 John"] = {"3jn", "3-jn", "3_jn", "3 jn"},
	["Jude"] = {},
	["Revelation"] = {"rev", "apocalypse", "apoc", "rv", "revelations"}
}

-- This table holds the titles of the Standard Works themselves, as found on WS
local standardWorks = {
	["Book of Mormon (1981)"] = bomBooks, 
	["The Doctrine and Covenants"] = dcBooks, 
	["The Pearl of Great Price (1913)"] = pogpBooks, 
	["Bible (King James)"] = bibleBooks,
	["Lectures on Faith"] = lofBooks
}

local function xpcallTest(param)
	if not param then param = "nil" end
	error("I deliberately threw an error in xpcallTest! (Lua v." .. _VERSION .. ") (ps param was " .. param .. ")")
	return "It's alll good! " .. param .. "<br>"
end

local function assertTest(param)
	--assert(false, "I deliberately asserted something I knew to be false!")
	
	assert(param, "Oh no: you passed 'false' to assertTest (or no parameter at all)!<br>")
	return "Assertion true; everything's a-ok!<br>"
end

local function errorTest(param)
	error("I deliberately threw an error in errorTest!<br>")
end

local function handler(message)
	return "Oh I handled it alright! (Message: " .. message .. ")<br>"
end

local function getAliasRows(t)
	local aliasRows = ""
	for k,v in pairs(t) do
		aliasRows = aliasRows .. "| " .. k .. "<br>| " .. table.concat(v, ", ") .. "<br>"
	end
	return aliasRows
end

local function countKeys(t)
	local i = 0
	for k,v in pairs(t) do i = i+1 end
	return i
end

function p.getBookAliasesWikiTable(standardWork)
	local wikiTable = [[{| class="wikitable sortable mw-collapsible mw-collapsed"
	|+ class="nowrap" |LDS Template Book Name Aliases
	! Standard Work !! Book !! Aliases
	]]
	for sw, bookList in pairs(standardWorks) do
		wikiTable = wikiTable .. '|-\n|rowspan="' .. countKeys(bookList) .. '"|' .. sw ..  "\n"
		for book, aliases in pairs(bookList) do
			wikiTable = wikiTable .. "| " .. book .. "\n| " .. table.concat(aliases, ", ") .. "\n|-\n"
		end
	end
	wikiTable = wikiTable .. "|}"
	return wikiTable
end

function p.main(frame)
	--local params = frame.args
	--local param = params[1]
	local r = ""
	
	local success, rVal
	success, rVal = xpcall(xpcallTest, handler, "test param")
	if (success) then
		return rVal
	end
	r = r .. rVal .. " "
	
	success, rVal = pcall(assertTest, param)
	if (success) then
		return rVal
	end
	
	r = r .. rVal .. " "
	
	success, rVal = pcall(errorTest, param)
	if (success) then
		return rVal
	end
	
	r = r .. rVal .. " "
	
	return "Sorry, bud, but something went wrong!<br>" .. r
end

return p