input_book = trimArg((args[1] or *) .. ' ' .. (trimArg(args[2]) or *)) or ''
ref = trimArg(args[3]) or ''
version = mw.ustring.lower(trimArg(args[4]) or default_version)
text = trimArg(args[5]) or trimArg((input_book .. ' ' .. ref))
else
-- first argument is the whole book name
input_book = trimArg(args[1]) or ''
ref = trimArg(args[2]) or ''
version = mw.ustring.lower(trimArg(args[3]) or default_version)
text = trimArg(args[4]) or (input_book .. ' ' .. ref)
end  
if trimArg(args.nobook) == 'yes' then
text = ref
end  
if tonumber(version) ~= nil then
version = tonumber(version)
version_num = true
end  
version = version_num_cds[version] or version  
local errors = {}
if version == 'jpr' or version == 'jp' then --chabad doesn't work so reroute
version = 'he'
if mainspace then
table.insert(errors, '')
end
end  
local book = mw.ustring.gsub(input_book, '%p', '')
book = mw.ustring.gsub(book, ' ', '_')
book = mw.ustring.lower(book)  
local book_found = false
for full_books, alias_tbls in pairs(book_aliases) do
if mw.ustring.gsub(book, '_', *) == mw.ustring.gsub(full_books, '_', *) then --is the book already standardized?
book_found = true
elseif valueExists(book_aliases[full_books], mw.ustring.gsub(book, '_', '')) then --check to see if it exists as a value in each table
book = full_books
book_found = true
end
end  
local site = site_tbl[version] or 'biblegateway' --fall back on biblegateway for unrecognized version because it has so many versions  
if valueExists(apoc, book) and version == 'nrsv' and site == 'oremus' then --oremus's nrsv doesn't have the apocrypha
version = 'nrsvae'
end --the anglicized version does  
local urlpat = urlpat_tbl[site]  
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]
local e_ref = mw.text.split(e_ref, '%p')
for i, v in ipairs(s_ref) do s_ref[i] = mw.ustring.gsub(v, '%D', '') end --remove any non-numeric character (such as f)
for i, v in ipairs(e_ref) do e_ref[i] = mw.ustring.gsub(v, '%D', '') end  
local e_chap, e_vers, s_chap, s_vers
if valueExists(no_chaps, book) then
s_chap = 1
s_vers = s_ref[1] or s_ref[2] or 1
e_chap = 1
e_vers = e_ref[2] or e_ref[1] or 1
else
s_chap = s_ref[1] or 1
s_vers = s_ref[2] or 1
if e_ref[2] or not s_ref[2] then --chapter-chapter or chapter(:verse)?-chapter:verse
e_chap = e_ref[1] or s_chap
else --chapter:verse-verse
e_chap = s_chap
end
e_vers = e_ref[2] or e_ref[1] or s_vers
end  
if type(site_book_tbl[site]) == 'table' then
book = site_book_tbl[site][book] or book
end  
book = titlecase(book) --put book in title case, only because it looks better at oremus where they display the input  
if site == 'mechon_mamre' then --special case handling of aspects of the components of the url
s_chap = string.format( '%x', s_chap/10 ) .. string.sub(string.format('%02d', s_chap), -1)
elseif (site == 'oremus') or (site == 'esv_bible') then
book = mw.ustring.gsub(book, '_', '+')
elseif site == 'bible_hub' then
book = string.lower(book)
elseif site == 'usccb' then
book = mw.ustring.gsub(book, '_', '')
end  
if type(site_version_tbl[site]) == 'table' then
version = site_version_tbl[site][version]
end  
local v_range
if s_ref[2] == nil then --case of chapter range only
v_range = s_chap ..'–' .. e_chap
else
v_range = s_chap ..':' .. s_vers ..'–' .. e_chap ..':' .. e_vers --case of chapter and verse range
end  
local url = mw.ustring.gsub(urlpat, '_book', book) --get the components into the urls
url = mw.ustring.gsub(url, 's_chap', s_chap)
url = mw.ustring.gsub(url, 's_vers', s_vers)
url = mw.ustring.gsub(url, 'e_chap', e_chap)
url = mw.ustring.gsub(url, 'e_vers', e_vers)
url = mw.ustring.gsub(url, 'v_range', v_range)
url = mw.ustring.gsub(url, '_version', version)  
local fulllink
if site == 'wikisource' then --interwikilink
fulllink = * .. text .. *
else
fulllink = '[' .. url .. ' ' .. text .. ']'
end  
if not book_found and mainspace == true then
table.insert(errors, '')
end
if version_num and mainspace == true then
table.insert(errors, '')
end  
return fulllink .. (table.concat(errors) or '')
end  
return p