<?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%3AAlhatorah</id>
	<title>Module:Alhatorah - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AAlhatorah"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Alhatorah&amp;action=history"/>
	<updated>2026-05-28T11:14:05Z</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:Alhatorah&amp;diff=135200&amp;oldid=prev</id>
		<title>imported&gt;Ar2332 at 19:06, 29 September 2022</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Alhatorah&amp;diff=135200&amp;oldid=prev"/>
		<updated>2022-09-29T19:06:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements Template:Alhatorah. Based on Template:Bibleverse&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
--possible book inputs, based on Chicago Manual&lt;br /&gt;
local book_aliases = {&lt;br /&gt;
	[&amp;#039;Bereshit&amp;#039;] = {&amp;#039;breishit&amp;#039;, &amp;#039;genesis&amp;#039;, &amp;#039;gen&amp;#039;, &amp;#039;gn&amp;#039;},&lt;br /&gt;
	[&amp;#039;Shemot&amp;#039;] = {&amp;#039;exodus&amp;#039;, &amp;#039;exod&amp;#039;, &amp;#039;ex&amp;#039;},&lt;br /&gt;
	[&amp;#039;Vayikra&amp;#039;] = {&amp;#039;leviticus&amp;#039;, &amp;#039;lev&amp;#039;, &amp;#039;lv&amp;#039;},&lt;br /&gt;
	[&amp;#039;Bemidbar&amp;#039;] = {&amp;#039;bamidbar&amp;#039;, &amp;#039;numbers&amp;#039;, &amp;#039;num&amp;#039;, &amp;#039;nm&amp;#039;},&lt;br /&gt;
	[&amp;#039;Devarim&amp;#039;] = {&amp;#039;deuteronomy&amp;#039;, &amp;#039;deut&amp;#039;, &amp;#039;dt&amp;#039;},&lt;br /&gt;
	[&amp;#039;Yehoshua&amp;#039;] = {&amp;#039;joshua&amp;#039;, &amp;#039;josh&amp;#039; , &amp;#039;jo&amp;#039;},&lt;br /&gt;
	[&amp;#039;Shofetim&amp;#039;] = {&amp;#039;shoftim&amp;#039;, &amp;#039;judges&amp;#039;, &amp;#039;judg&amp;#039;, &amp;#039;jgs&amp;#039;},&lt;br /&gt;
	[&amp;#039;Shemuel I&amp;#039;]  = {&amp;#039;shemueli&amp;#039;,  &amp;#039;shemuel1&amp;#039;, &amp;#039;shmueli&amp;#039;,  &amp;#039;shmuel1&amp;#039;, &amp;#039;shmueli&amp;#039;, &amp;#039;1shmuel&amp;#039;, &amp;#039;ishmuel&amp;#039;,  &amp;#039;1sam&amp;#039;, &amp;#039;1sm&amp;#039;, &amp;#039;isamuel&amp;#039;},&lt;br /&gt;
	[&amp;#039;Shemuel II&amp;#039;] = {&amp;#039;shemuelii&amp;#039;, &amp;#039;shemuel2&amp;#039;, &amp;#039;shmuelii&amp;#039;, &amp;#039;shmuel2&amp;#039;, &amp;#039;shmuelii&amp;#039;,&amp;#039;2shmuel&amp;#039;, &amp;#039;iishmuel&amp;#039;, &amp;#039;2sam&amp;#039;, &amp;#039;2sm&amp;#039;, &amp;#039;iisamuel&amp;#039;},&lt;br /&gt;
	[&amp;#039;Melakhim I&amp;#039;]  = {&amp;#039;melachim1&amp;#039;, &amp;#039;melachimi&amp;#039;,  &amp;#039;melakhim1&amp;#039;, &amp;#039;melakhimi&amp;#039;,  &amp;#039;1kings&amp;#039;, &amp;#039;imelachim&amp;#039;,  &amp;#039;1kgs&amp;#039;,&amp;#039;ikings&amp;#039;},&lt;br /&gt;
	[&amp;#039;Melakhim II&amp;#039;] = {&amp;#039;melachim2&amp;#039;, &amp;#039;melachimii&amp;#039;, &amp;#039;melakhim2&amp;#039;, &amp;#039;melakhimii&amp;#039;, &amp;#039;2kings&amp;#039;, &amp;#039;iimelachim&amp;#039;, &amp;#039;2kgs&amp;#039;,&amp;#039;iikings&amp;#039;},&lt;br /&gt;
	[&amp;#039;Yeshayahu&amp;#039;] = {&amp;#039;isaiah&amp;#039;, &amp;#039;isa&amp;#039;, &amp;#039;is&amp;#039;},&lt;br /&gt;
	[&amp;#039;Yirmeyahu&amp;#039;] = {&amp;#039;yirmiyahu&amp;#039;, &amp;#039;jeremiah&amp;#039;, &amp;#039;jer&amp;#039;},&lt;br /&gt;
	[&amp;#039;Yechezkel&amp;#039;] = {&amp;#039;ezekiel&amp;#039;, &amp;#039;ezek&amp;#039;, &amp;#039;ez&amp;#039;},&lt;br /&gt;
	[&amp;#039;Hoshea&amp;#039;] = {&amp;#039;hosea&amp;#039;, &amp;#039;hos&amp;#039;},&lt;br /&gt;
	[&amp;#039;Yoel&amp;#039;] = {&amp;#039;joel&amp;#039;, &amp;#039;jl&amp;#039;},&lt;br /&gt;
	[&amp;#039;Amos&amp;#039;] = {&amp;#039;amos&amp;#039;, &amp;#039;am&amp;#039;},&lt;br /&gt;
	[&amp;#039;Ovadyah&amp;#039;] = {&amp;#039;ovadiah&amp;#039;, &amp;#039;obadiah&amp;#039;, &amp;#039;obad&amp;#039;, &amp;#039;ob&amp;#039;},&lt;br /&gt;
	[&amp;#039;Yonah&amp;#039;] = {&amp;#039;jonah&amp;#039;, &amp;#039;jon&amp;#039;},&lt;br /&gt;
	[&amp;#039;Mikhah&amp;#039;] = {&amp;#039;michah&amp;#039;, &amp;#039;micah&amp;#039;, &amp;#039;mic&amp;#039;, &amp;#039;mi&amp;#039;},&lt;br /&gt;
	[&amp;#039;Nachum&amp;#039;] = {&amp;#039;nahum&amp;#039;, &amp;#039;nah&amp;#039;, &amp;#039;na&amp;#039;},&lt;br /&gt;
	[&amp;#039;Chavakkuk&amp;#039;] = {&amp;#039;habakkuk&amp;#039;, &amp;#039;hab&amp;#039;, &amp;#039;hb&amp;#039;},&lt;br /&gt;
	[&amp;#039;Zephanyah&amp;#039;] = {&amp;#039;tzefaniah&amp;#039;, &amp;#039;zephaniah&amp;#039;, &amp;#039;zeph&amp;#039;, &amp;#039;zep&amp;#039;},&lt;br /&gt;
	[&amp;#039;Chaggai&amp;#039;] = {&amp;#039;haggai&amp;#039;, &amp;#039;hag&amp;#039;, &amp;#039;hg&amp;#039;},&lt;br /&gt;
	[&amp;#039;Zekharyah&amp;#039;] = {&amp;#039;zechariah&amp;#039;, &amp;#039;zech&amp;#039;, &amp;#039;zec&amp;#039;},&lt;br /&gt;
	[&amp;#039;Malakhi&amp;#039;] = {&amp;#039;malachi&amp;#039;, &amp;#039;mal&amp;#039;},&lt;br /&gt;
	[&amp;#039;Tehillim&amp;#039;] = {&amp;#039;psalms&amp;#039;, &amp;#039;ps&amp;#039;, &amp;#039;pss&amp;#039;, &amp;#039;psalm&amp;#039;},&lt;br /&gt;
	[&amp;#039;Mishlei&amp;#039;] = {&amp;#039;proverbs&amp;#039;, &amp;#039;prov&amp;#039;, &amp;#039;prv&amp;#039;},&lt;br /&gt;
	[&amp;#039;Kohelet&amp;#039;] = {&amp;#039;ecclesiastes&amp;#039;, &amp;#039;eccles&amp;#039;, &amp;#039;eccl&amp;#039;, &amp;#039;qoheleth&amp;#039;},&lt;br /&gt;
	[&amp;#039;Shir HaShirim&amp;#039;] = {&amp;#039;shirhashirim&amp;#039;, &amp;#039;songofsolomon&amp;#039;, &amp;#039;songofsol&amp;#039;, &amp;#039;songofsongs&amp;#039;, &amp;#039;song&amp;#039;, &amp;#039;sg&amp;#039;, &amp;#039;canticles&amp;#039;, &amp;#039;canticleofcanticles&amp;#039;},&lt;br /&gt;
	[&amp;#039;Eikhah&amp;#039;] = {&amp;#039;lamentations&amp;#039;, &amp;#039;lam&amp;#039;},&lt;br /&gt;
	[&amp;#039;Rut&amp;#039;] = {&amp;#039;ruth&amp;#039;, &amp;#039;ru&amp;#039;},&lt;br /&gt;
	[&amp;#039;Esther&amp;#039;] = {&amp;#039;esther&amp;#039;, &amp;#039;est&amp;#039;},&lt;br /&gt;
	[&amp;#039;Iyyov&amp;#039;] = {&amp;#039;job&amp;#039;, &amp;#039;jb&amp;#039;},&lt;br /&gt;
	[&amp;#039;Daniel&amp;#039;] = {&amp;#039;daniel&amp;#039;, &amp;#039;dan&amp;#039;, &amp;#039;dn&amp;#039;},&lt;br /&gt;
	[&amp;#039;Divrei HaYamim I&amp;#039;]  = {&amp;#039;divreihayamimi&amp;#039;,  &amp;#039;divreihayamim1&amp;#039;, &amp;#039;ichronicles&amp;#039;,  &amp;#039;1chronicles&amp;#039;, &amp;#039;1chron&amp;#039;, &amp;#039;1chr&amp;#039;},&lt;br /&gt;
	[&amp;#039;Divrei HaYamim II&amp;#039;] = {&amp;#039;divreihayamimii&amp;#039;, &amp;#039;divreihayamim2&amp;#039;, &amp;#039;iichronicles&amp;#039;, &amp;#039;2chronicles&amp;#039;, &amp;#039;2chron&amp;#039;, &amp;#039;2chr&amp;#039;},&lt;br /&gt;
	[&amp;#039;Ezra&amp;#039;] = {&amp;#039;ezra&amp;#039;, &amp;#039;ezr&amp;#039;},&lt;br /&gt;
	[&amp;#039;Nechemyah&amp;#039;] = {&amp;#039;nechemiah&amp;#039;, &amp;#039;nehemiah&amp;#039;, &amp;#039;neh&amp;#039;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--these books only have one chapter, have to be handled differently&lt;br /&gt;
local no_chapters = {&lt;br /&gt;
	[&amp;#039;obadiah&amp;#039;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function trimArg(text)&lt;br /&gt;
	if type(text) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		text = text:match(&amp;#039;(%S.-)%s*$&amp;#039;)  --trimmed text or nil if empty&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function valueExists(tbl, value)&lt;br /&gt;
	for _, v in pairs(tbl) do&lt;br /&gt;
		if value == v then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local targs = frame:getParent().args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for _, param in ipairs({1, 2, 3, 4, 5, &amp;#039;nobook&amp;#039;}) do&lt;br /&gt;
		args[param] = trimArg(targs[param])&lt;br /&gt;
	end&lt;br /&gt;
	local input_book = &amp;#039;&amp;#039;&lt;br /&gt;
	local ref = &amp;#039;&amp;#039;&lt;br /&gt;
	local commentary = &amp;#039;&amp;#039;&lt;br /&gt;
	local text = &amp;#039;&amp;#039;&lt;br /&gt;
	local mainspace = mw.title.getCurrentTitle():inNamespaces(0)&lt;br /&gt;
	&lt;br /&gt;
	--analyze arguments&lt;br /&gt;
	if args[1] == nil or args[2] == nil or tonumber(args[1]) ~= nil then&lt;br /&gt;
		-- first argument is a numeric prefix and second is book name&lt;br /&gt;
		input_book = trimArg((args[1] or &amp;#039;&amp;#039;) .. &amp;#039; &amp;#039; .. (args[2] or &amp;#039;&amp;#039;)) or &amp;#039;&amp;#039;&lt;br /&gt;
		ref = args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
		commentary = args[4] or &amp;#039;&amp;#039;&lt;br /&gt;
		text = args[5] or trimArg((input_book .. &amp;#039; &amp;#039; .. ref))&lt;br /&gt;
	else&lt;br /&gt;
		-- first argument is the whole book name&lt;br /&gt;
		input_book = args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
		ref = args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
		commentary = args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
		text = args[4] or (input_book .. &amp;#039; &amp;#039; .. ref)&lt;br /&gt;
	end&lt;br /&gt;
	if args.nobook == &amp;#039;yes&amp;#039; then&lt;br /&gt;
		text = ref&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--analyze book (for URL)&lt;br /&gt;
	local book = input_book:gsub(&amp;#039;%p&amp;#039;, &amp;#039;&amp;#039;):gsub(&amp;#039; &amp;#039;, &amp;#039;_&amp;#039;)&lt;br /&gt;
	book_lower = mw.ustring.lower(book)&lt;br /&gt;
	book_lower = book_lower:gsub(&amp;#039;_&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	local book_found = false&lt;br /&gt;
	for full_book, aliases in pairs(book_aliases) do&lt;br /&gt;
		if book_lower == mw.ustring.lower(full_book:gsub(&amp;#039; &amp;#039;, &amp;#039;_&amp;#039;)) or valueExists(aliases, book_lower) then&lt;br /&gt;
			book = full_book:gsub(&amp;#039; &amp;#039;, &amp;#039;_&amp;#039;)&lt;br /&gt;
			book_found = true&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--analyze verse&lt;br /&gt;
	local split_ref = mw.text.split(ref, &amp;#039;[-–—]&amp;#039;)       --split the ref into the part before and after the dash/hyphen&lt;br /&gt;
	local s_ref = mw.text.split(split_ref[1], &amp;#039;%p&amp;#039;)     --any punctuation can be used to separate chapter from verse&lt;br /&gt;
	local e_ref = split_ref[2] or split_ref[1]&lt;br /&gt;
	e_ref = mw.text.split(e_ref, &amp;#039;%p&amp;#039;)&lt;br /&gt;
	for i, v in ipairs(s_ref) do s_ref[i] = v:gsub(&amp;#039;%D&amp;#039;, &amp;#039;&amp;#039;) end  --remove any non-numeric character (such as f)&lt;br /&gt;
	for i, v in ipairs(e_ref) do e_ref[i] = v:gsub(&amp;#039;%D&amp;#039;, &amp;#039;&amp;#039;) end&lt;br /&gt;
	local s_chap, s_vers&lt;br /&gt;
	local chapter_only = not s_ref[2]&lt;br /&gt;
	if no_chapters[book] then&lt;br /&gt;
		chapter_only = false&lt;br /&gt;
		s_chap = 1&lt;br /&gt;
		s_vers = s_ref[2] or s_ref[1] or 1   --verse 3 can be specified as &amp;quot;3&amp;quot; or &amp;quot;1:3&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		s_chap = s_ref[1] or 1&lt;br /&gt;
		s_vers = s_ref[2] or 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--build URL&lt;br /&gt;
	commentary = commentary:gsub(&amp;#039; &amp;#039;, &amp;#039;_&amp;#039;) --must be outside URL command&lt;br /&gt;
	local urlpat = &amp;#039;https://mg.alhatorah.org/Dual/_commentary/_book/_schap._svers#m7e3n7&amp;#039;&lt;br /&gt;
	local url = urlpat:gsub(&amp;#039;_%l+&amp;#039;, {  --get the components into the url&lt;br /&gt;
					_commentary = commentary,&lt;br /&gt;
					_book    = book,&lt;br /&gt;
					_schap   = s_chap,&lt;br /&gt;
					_svers   = s_vers,&lt;br /&gt;
				})&lt;br /&gt;
&lt;br /&gt;
	--build text&lt;br /&gt;
	text = text:gsub(&amp;#039;-&amp;#039;, &amp;#039;–&amp;#039;)  --change hyphens to en dashes (3:2-5 → 3:2–5)&lt;br /&gt;
	text = commentary:gsub(&amp;#039;_&amp;#039;, &amp;#039; &amp;#039;) .. &amp;#039;, &amp;#039; .. text&lt;br /&gt;
	&lt;br /&gt;
	local fulllink&lt;br /&gt;
	fulllink = &amp;#039;[&amp;#039; .. url .. &amp;#039; &amp;#039; .. text .. &amp;#039;]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if mainspace then&lt;br /&gt;
		if not book_found then&lt;br /&gt;
			table.insert(errors, &amp;#039;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Template:Bibleverse with invalid book&amp;lt;/span&amp;gt;[[Category:Pages with Bible book errors]]&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if version_num then&lt;br /&gt;
			table.insert(errors, &amp;#039;[[Category:Pages with numeric Bible version references]]&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return fulllink --.. table.concat(errors)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Ar2332</name></author>
	</entry>
</feed>