Module:Alhatorah

-- This module implements Template:Alhatorah. Based on Template:Bibleverse
local p = {}

--possible book inputs, based on Chicago Manual
local book_aliases = {
	['Bereshit'] = {'breishit', 'genesis', 'gen', 'gn'},
	['Shemot'] = {'exodus', 'exod', 'ex'},
	['Vayikra'] = {'leviticus', 'lev', 'lv'},
	['Bemidbar'] = {'bamidbar', 'numbers', 'num', 'nm'},
	['Devarim'] = {'deuteronomy', 'deut', 'dt'},
	['Yehoshua'] = {'joshua', 'josh' , 'jo'},
	['Shofetim'] = {'shoftim', 'judges', 'judg', 'jgs'},
	['Shemuel I']  = {'shemueli',  'shemuel1', 'shmueli',  'shmuel1', 'shmueli', '1shmuel', 'ishmuel',  '1sam', '1sm', 'isamuel'},
	['Shemuel II'] = {'shemuelii', 'shemuel2', 'shmuelii', 'shmuel2', 'shmuelii','2shmuel', 'iishmuel', '2sam', '2sm', 'iisamuel'},
	['Melakhim I']  = {'melachim1', 'melachimi',  'melakhim1', 'melakhimi',  '1kings', 'imelachim',  '1kgs','ikings'},
	['Melakhim II'] = {'melachim2', 'melachimii', 'melakhim2', 'melakhimii', '2kings', 'iimelachim', '2kgs','iikings'},
	['Yeshayahu'] = {'isaiah', 'isa', 'is'},
	['Yirmeyahu'] = {'yirmiyahu', 'jeremiah', 'jer'},
	['Yechezkel'] = {'ezekiel', 'ezek', 'ez'},
	['Hoshea'] = {'hosea', 'hos'},
	['Yoel'] = {'joel', 'jl'},
	['Amos'] = {'amos', 'am'},
	['Ovadyah'] = {'ovadiah', 'obadiah', 'obad', 'ob'},
	['Yonah'] = {'jonah', 'jon'},
	['Mikhah'] = {'michah', 'micah', 'mic', 'mi'},
	['Nachum'] = {'nahum', 'nah', 'na'},
	['Chavakkuk'] = {'habakkuk', 'hab', 'hb'},
	['Zephanyah'] = {'tzefaniah', 'zephaniah', 'zeph', 'zep'},
	['Chaggai'] = {'haggai', 'hag', 'hg'},
	['Zekharyah'] = {'zechariah', 'zech', 'zec'},
	['Malakhi'] = {'malachi', 'mal'},
	['Tehillim'] = {'psalms', 'ps', 'pss', 'psalm'},
	['Mishlei'] = {'proverbs', 'prov', 'prv'},
	['Kohelet'] = {'ecclesiastes', 'eccles', 'eccl', 'qoheleth'},
	['Shir HaShirim'] = {'shirhashirim', 'songofsolomon', 'songofsol', 'songofsongs', 'song', 'sg', 'canticles', 'canticleofcanticles'},
	['Eikhah'] = {'lamentations', 'lam'},
	['Rut'] = {'ruth', 'ru'},
	['Esther'] = {'esther', 'est'},
	['Iyyov'] = {'job', 'jb'},
	['Daniel'] = {'daniel', 'dan', 'dn'},
	['Divrei HaYamim I']  = {'divreihayamimi',  'divreihayamim1', 'ichronicles',  '1chronicles', '1chron', '1chr'},
	['Divrei HaYamim II'] = {'divreihayamimii', 'divreihayamim2', 'iichronicles', '2chronicles', '2chron', '2chr'},
	['Ezra'] = {'ezra', 'ezr'},
	['Nechemyah'] = {'nechemiah', 'nehemiah', 'neh'},
}

--these books only have one chapter, have to be handled differently
local no_chapters = {
	['obadiah'] = true,
}

local function trimArg(text)
	if type(text) == 'string' then
		text = text:match('(%S.-)%s*$')  --trimmed text or nil if empty
	end
	return text
end

local function valueExists(tbl, value)
	for _, v in pairs(tbl) do
		if value == v then
			return true
		end
	end
	return false
end

function p.main(frame)
	local targs = frame:getParent().args
	local args = {}
	for _, param in ipairs({1, 2, 3, 4, 5, 'nobook'}) do
		args[param] = trimArg(targs[param])
	end
	local input_book = ''
	local ref = ''
	local commentary = ''
	local text = ''
	local mainspace = mw.title.getCurrentTitle():inNamespaces(0)
	
	--analyze arguments
	if args[1] == nil or args[2] == nil or tonumber(args[1]) ~= nil then
		-- first argument is a numeric prefix and second is book name
		input_book = trimArg((args[1] or '') .. ' ' .. (args[2] or '')) or ''
		ref = args[3] or ''
		commentary = args[4] or ''
		text = args[5] or trimArg((input_book .. ' ' .. ref))
	else
		-- first argument is the whole book name
		input_book = args[1] or ''
		ref = args[2] or ''
		commentary = args[3] or ''
		text = args[4] or (input_book .. ' ' .. ref)
	end
	if args.nobook == 'yes' then
		text = ref
	end
	
	--analyze book (for URL)
	local book = input_book:gsub('%p', ''):gsub(' ', '_')
	book_lower = mw.ustring.lower(book)
	book_lower = book_lower:gsub('_', '')
	local book_found = false
	for full_book, aliases in pairs(book_aliases) do
		if book_lower == mw.ustring.lower(full_book:gsub(' ', '_')) or valueExists(aliases, book_lower) then
			book = full_book:gsub(' ', '_')
			book_found = true
			break
		end
	end

	--analyze verse
	local split_ref = mw.text.split(ref, '[-–—]')       --split the ref into the part before and after the dash/hyphen
	local s_ref = mw.text.split(split_ref[1], '%p')     --any punctuation can be used to separate chapter from verse
	local e_ref = split_ref[2] or split_ref[1]
	e_ref = mw.text.split(e_ref, '%p')
	for i, v in ipairs(s_ref) do s_ref[i] = v:gsub('%D', '') end  --remove any non-numeric character (such as f)
	for i, v in ipairs(e_ref) do e_ref[i] = v:gsub('%D', '') end
	local s_chap, s_vers
	local chapter_only = not s_ref[2]
	if no_chapters[book] then
		chapter_only = false
		s_chap = 1
		s_vers = s_ref[2] or s_ref[1] or 1   --verse 3 can be specified as "3" or "1:3"
	else
		s_chap = s_ref[1] or 1
		s_vers = s_ref[2] or 1
	end

	--build URL
	commentary = commentary:gsub(' ', '_') --must be outside URL command
	local urlpat = 'https://mg.alhatorah.org/Dual/_commentary/_book/_schap._svers#m7e3n7'
	local url = urlpat:gsub('_%l+', {  --get the components into the url
					_commentary = commentary,
					_book    = book,
					_schap   = s_chap,
					_svers   = s_vers,
				})

	--build text
	text = text:gsub('-', '–')  --change hyphens to en dashes (3:2-5 → 3:2–5)
	text = commentary:gsub('_', ' ') .. ', ' .. text
	
	local fulllink
	fulllink = '[' .. url .. ' ' .. text .. ']'

	if mainspace then
		if not book_found then
			table.insert(errors, '<span style="color:red">Template:Bibleverse with invalid book</span>[[Category:Pages with Bible book errors]]')
		end
		if version_num then
			table.insert(errors, '[[Category:Pages with numeric Bible version references]]')
		end
	end
	return fulllink --.. table.concat(errors)
end

return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.