The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Documentation for this module may be created at Module:Cite Talmud/doc

local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:yesno')

local function tidyVal(key, val)
	if type(val) == 'string' then
		val = val:gsub(" ", ' '):match('^%s*(.-)%s*$')
		if val == '' then
			return nil
		else
			return val
		end
	else
		return val
	end
end


local talmud = {}

talmud.jb_key = {b = "Babylonian", y = "Jerusalem"}

function talmud.generate_citation(frame)
	local args = getArgs(frame, { wrappers = 'Template:Cite Talmud', valueFunc = tidyVal })
	jb       = args[1] or 'b'
	if not talmud.jb_key[jb] then
		return require('Module:Error').error{ 'First argument must be either b for Babylonian Talmud or y for Jerusalem Talmud. (Given "' .. jb .. '")' }
	end
    tractate = args[2]
    daf      = args[4] or args[3] -- These are page or folio numbers as described at Talmud#Slavuta Talmud 1795 and Vilna Talmud 1835. Ranges are accepted, eg. 2b-4a
    url      = args.url
    nobook   = yesno(args[5] or args.nobook)
    if not url then
    	url = "https://www.sefaria.org/"
    	if(jb == 'y') then url = url .. 'Jerusalem_Talmud_' end 
    	url = url .. string.gsub(tractate, ' ', '_') .. '.' .. string.gsub(daf or '2a', ' ', '_')
    end
	str  = '[' .. url .. ' ' .. tractate .. ' ' .. ( daf or '' ) .. ']'
 	if not nobook then
		str = '[[Talmud]], <abbr title="' .. talmud.jb_key[jb] .. '">' .. jb .. '.</abbr> ' .. str
	end
	return str
end

return talmud