<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AAlhatorah%2Fsandbox</id>
	<title>Module:Alhatorah/sandbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AAlhatorah%2Fsandbox"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Alhatorah/sandbox&amp;action=history"/>
	<updated>2026-07-27T07:28:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:Alhatorah/sandbox&amp;diff=470956&amp;oldid=prev</id>
		<title>Zoran: Moved page from wikipedia:en:Module:Alhatorah/sandbox</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Alhatorah/sandbox&amp;diff=470956&amp;oldid=prev"/>
		<updated>2021-07-08T19:16:37Z</updated>

		<summary type="html">&lt;p&gt;Moved page from &lt;a href=&quot;/index.php?title=Wikipedia:en:Module:Alhatorah/sandbox&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Wikipedia:en:Module:Alhatorah/sandbox (page does not exist)&quot;&gt;wikipedia:en:Module:Alhatorah/sandbox&lt;/a&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;
	['Bereshit'] = {'genesis', 'gen', 'gn'},&lt;br /&gt;
	['Shemot'] = {'exodus', 'exod', 'ex'},&lt;br /&gt;
	['Vayikra'] = {'leviticus', 'lev', 'lv'},&lt;br /&gt;
	['Bemidbar'] = {'numbers', 'num', 'nm'},&lt;br /&gt;
	['Devarim'] = {'deuteronomy', 'deut', 'dt'},&lt;br /&gt;
	['Yehoshua'] = {'joshua', 'josh' , 'jo'},&lt;br /&gt;
	['Shofetim'] = {'judges', 'judg', 'jgs'},&lt;br /&gt;
	['Shemuel I'] = {'1_samuel', '1sam', '1sm', 'I_samuel'},&lt;br /&gt;
	['Shemuel II'] = {'2_samuel', '2sam', '2sm', 'II_samuel'},&lt;br /&gt;
	['Melakhim I'] = {'1_kings', '1kgs', 'I_kings'},&lt;br /&gt;
	['Melakhim II'] = {'2_kings', '2kgs', 'II_kings'},&lt;br /&gt;
	['Yeshayahu'] = {'isaiah', 'isa', 'is'},&lt;br /&gt;
	['Yirmeyahu'] = {'jeremiah', 'jer'},&lt;br /&gt;
	['Yechezkel'] = {'ezekiel', 'ezek', 'ez'},&lt;br /&gt;
	['Hoshea'] = {'hosea', 'hos'},&lt;br /&gt;
	['Yoel'] = {'joel', 'jl'},&lt;br /&gt;
	['Amos'] = {'amos', 'am'},&lt;br /&gt;
	['Ovadyah'] = {'obadiah', 'obad', 'ob'},&lt;br /&gt;
	['Yonah'] = {'jonah', 'jon'},&lt;br /&gt;
	['Mikhah'] = {'micah', 'mic', 'mi'},&lt;br /&gt;
	['Nachum'] = {'nahum', 'nah', 'na'},&lt;br /&gt;
	['Chavakkuk'] = {'habakkuk', 'hab', 'hb'},&lt;br /&gt;
	['Zephanyah'] = {'zephaniah', 'zeph', 'zep'},&lt;br /&gt;
	['Chaggai'] = {'haggai', 'hag', 'hg'},&lt;br /&gt;
	['Zekharyah'] = {'zechariah', 'zech', 'zec'},&lt;br /&gt;
	['Malakhi'] = {'malachi', 'mal'},&lt;br /&gt;
	['Tehillim'] = {'psalms', 'ps', 'pss', 'psalm'},&lt;br /&gt;
	['Mishlei'] = {'proverbs', 'prov', 'prv'},&lt;br /&gt;
	['Kohelet'] = {'ecclesiastes', 'eccles', 'eccl', 'qoheleth'},&lt;br /&gt;
	['Shir HaShirim'] = {'song_of_solomon', 'songofsol', 'songofsongs', 'song', 'sg', 'canticles', 'canticleofcanticles'},&lt;br /&gt;
	['Eikhah'] = {'lamentations', 'lam'},&lt;br /&gt;
	['Rut'] = {'ruth', 'ru'},&lt;br /&gt;
	['Esther'] = {'esther', 'est'},&lt;br /&gt;
	['Iyyov'] = {'job', 'jb'},&lt;br /&gt;
	['Daniel'] = {'daniel', 'dan', 'dn'},&lt;br /&gt;
	['Divrei HaYamim I'] = {'1_chronicles', '1chron', '1chr', 'I_chronicles'},&lt;br /&gt;
	['Divrei HaYamim II'] = {'2_chronicles', '2chron', '2chr', 'II_chronicles'},&lt;br /&gt;
	['Ezra'] = {'ezra', 'ezr'},&lt;br /&gt;
	['Nechemyah'] = {'nehemiah', 'neh'},&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;
	['obadiah'] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--changes to the version name to be used in urls, only if necessary&lt;br /&gt;
local site_version_tbl = {&lt;br /&gt;
	mechon_mamre = {&lt;br /&gt;
		he = 'p/pt/pt',&lt;br /&gt;
		jps = 'e/et/et',&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function trimArg(text)&lt;br /&gt;
	if type(text) == 'string' then&lt;br /&gt;
		text = text:match('(%S.-)%s*$')  --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;
local function titlecase(arg)&lt;br /&gt;
	-- http://grammar.yourdictionary.com/capitalization/rules-for-capitalization-in-titles.html&lt;br /&gt;
	-- recommended by The U.S. Government Printing Office Style Manual:&lt;br /&gt;
	-- 'Capitalize all words in titles of publications and documents,&lt;br /&gt;
	-- except a, an, the, at, by, for, in, of, on, to, up, and, as, but, or, and nor.'&lt;br /&gt;
	local alwayslower = {&lt;br /&gt;
		['a'] = true, ['an'] = true, ['the'] = true,&lt;br /&gt;
		['and'] = true, ['but'] = true, ['or'] = true, ['for'] = true,&lt;br /&gt;
		['nor'] = true, ['on'] = true, ['in'] = true, ['at'] = true, ['to'] = true,&lt;br /&gt;
		['from'] = true, ['by'] = true, ['of'] = true, ['up'] = true,&lt;br /&gt;
	}&lt;br /&gt;
	local words = mw.text.split(mw.text.trim(arg or ''), '_')&lt;br /&gt;
	for i, s in ipairs(words) do&lt;br /&gt;
		s = string.lower(s)&lt;br /&gt;
		if i &amp;gt; 1 then&lt;br /&gt;
			if not alwayslower[s] then&lt;br /&gt;
				s = mw.getContentLanguage():ucfirst(s)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			s = mw.getContentLanguage():ucfirst(s)&lt;br /&gt;
		end&lt;br /&gt;
		words[i] = s&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(words, '_')&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, 'nobook'}) do&lt;br /&gt;
		args[param] = trimArg(targs[param])&lt;br /&gt;
	end&lt;br /&gt;
	local default_version = 'nrsv'&lt;br /&gt;
	local input_book = ''&lt;br /&gt;
	local ref = ''&lt;br /&gt;
	local commentary = ''&lt;br /&gt;
	local text = ''&lt;br /&gt;
	local mainspace = mw.title.getCurrentTitle():inNamespaces(0)&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 '') .. ' ' .. (args[2] or '')) or ''&lt;br /&gt;
		ref = args[3] or ''&lt;br /&gt;
		commentary = args[4] or ''&lt;br /&gt;
		text = args[5] or trimArg((commentary .. ' to ' .. input_book .. ' ' .. ref))&lt;br /&gt;
	else&lt;br /&gt;
		-- first argument is the whole book name&lt;br /&gt;
		input_book = args[1] or ''&lt;br /&gt;
		ref = args[2] or ''&lt;br /&gt;
		commentary = args[3] or ''&lt;br /&gt;
		text = args[4] or (commentary .. ' to ' .. input_book .. ' ' .. ref)&lt;br /&gt;
	end&lt;br /&gt;
	if args.nobook == 'yes' then&lt;br /&gt;
		text = ref&lt;br /&gt;
	end&lt;br /&gt;
	text = text:gsub('-', '–')  --change hyphens to en dashes (3:2-5 → 3:2–5)&lt;br /&gt;
&lt;br /&gt;
	local book = input_book:gsub('%p', ''):gsub(' ', '_')&lt;br /&gt;
	book = mw.ustring.lower(book)&lt;br /&gt;
&lt;br /&gt;
	local book_found = false&lt;br /&gt;
	local standard = book:gsub('_', '')&lt;br /&gt;
	for full_book, aliases in pairs(book_aliases) do&lt;br /&gt;
		if standard == full_book:gsub('_', '') or valueExists(aliases, standard) then&lt;br /&gt;
			book = full_book&lt;br /&gt;
			book_found = true&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local urlpat = 'https://mg.alhatorah.org/Dual/_commentary/_book/_schap._svers#m7e3n7'&lt;br /&gt;
&lt;br /&gt;
	local split_ref = mw.text.split(ref, '[-–—]')       --split the ref into the part before and after the dash/hyphen&lt;br /&gt;
	local s_ref = mw.text.split(split_ref[1], '%p')     --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, '%p')&lt;br /&gt;
	for i, v in ipairs(s_ref) do s_ref[i] = v:gsub('%D', '') 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('%D', '') end&lt;br /&gt;
&lt;br /&gt;
	local e_chap, e_vers, 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;
		e_chap = 1&lt;br /&gt;
		e_vers = e_ref[2] or e_ref[1] or 1&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;
		if e_ref[2] or not s_ref[2] then     --chapter-chapter or chapter(:verse)?-chapter:verse&lt;br /&gt;
			e_chap = e_ref[1] or s_chap&lt;br /&gt;
		else                                 --chapter:verse-verse&lt;br /&gt;
			e_chap = s_chap&lt;br /&gt;
		end&lt;br /&gt;
		e_vers = e_ref[2] or e_ref[1] or s_vers&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	book = titlecase(book)  --title case looks better at oremus where they display the input&lt;br /&gt;
&lt;br /&gt;
	local v_range&lt;br /&gt;
	if chapter_only then&lt;br /&gt;
		if e_chap == s_chap then&lt;br /&gt;
			v_range = s_chap&lt;br /&gt;
		else&lt;br /&gt;
			v_range = s_chap .. '–' .. e_chap&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if e_chap == s_chap and e_vers == s_vers then&lt;br /&gt;
			v_range = s_chap ..':' .. s_vers&lt;br /&gt;
		elseif e_chap == s_chap then&lt;br /&gt;
			v_range = s_chap .. ':' .. s_vers .. '–' .. e_vers&lt;br /&gt;
		else&lt;br /&gt;
			v_range = s_chap .. ':' .. s_vers .. '–' .. e_chap .. ':' .. e_vers&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local url = urlpat:gsub('_%l+', {  --get the components into the url&lt;br /&gt;
					_book    = book,&lt;br /&gt;
					_schap   = s_chap,&lt;br /&gt;
					_svers   = s_vers,&lt;br /&gt;
					_echap   = e_chap,&lt;br /&gt;
					_evers   = e_vers,&lt;br /&gt;
					_vrange  = v_range,&lt;br /&gt;
					_commentary = commentary,&lt;br /&gt;
				})&lt;br /&gt;
&lt;br /&gt;
	local fulllink&lt;br /&gt;
	fulllink = '[' .. url .. ' ' .. text .. ']'&lt;br /&gt;
	&lt;br /&gt;
	if mainspace then&lt;br /&gt;
		if not book_found then&lt;br /&gt;
			table.insert(errors, '&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]]')&lt;br /&gt;
		end&lt;br /&gt;
		if version_num then&lt;br /&gt;
			table.insert(errors, '[[Category:Pages with numeric Bible version references]]')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&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>Zoran</name></author>
	</entry>
</feed>