Module:Alhatorah and Module:Alhatorah/sandbox: Difference between pages
(Difference between pages)
imported>Ar2332 No edit summary |
imported>Ar2332 No edit summary |
||
| Line 4: | Line 4: | ||
--possible book inputs, based on Chicago Manual | --possible book inputs, based on Chicago Manual | ||
local book_aliases = { | local book_aliases = { | ||
['Bereshit'] = { | ['Bereshit'] = {'genesis', 'gen', 'gn'}, | ||
['Shemot'] = {'exodus', 'exod', 'ex'}, | ['Shemot'] = {'exodus', 'exod', 'ex'}, | ||
['Vayikra'] = {'leviticus', 'lev', 'lv'}, | ['Vayikra'] = {'leviticus', 'lev', 'lv'}, | ||
['Bemidbar'] = { | ['Bemidbar'] = {'numbers', 'num', 'nm'}, | ||
['Devarim'] = {'deuteronomy', 'deut', 'dt'}, | ['Devarim'] = {'deuteronomy', 'deut', 'dt'}, | ||
['Yehoshua'] = {'joshua', 'josh' , 'jo'}, | ['Yehoshua'] = {'joshua', 'josh' , 'jo'}, | ||
['Shofetim'] = { | ['Shofetim'] = {'judges', 'judg', 'jgs'}, | ||
['Shemuel I'] | ['Shemuel I'] = {'1_samuel', '1sam', '1sm', 'I_samuel'}, | ||
['Shemuel II'] = {' | ['Shemuel II'] = {'2_samuel', '2sam', '2sm', 'II_samuel'}, | ||
['Melakhim I'] | ['Melakhim I'] = {'1_kings', '1kgs', 'I_kings'}, | ||
['Melakhim II'] = {' | ['Melakhim II'] = {'2_kings', '2kgs', 'II_kings'}, | ||
['Yeshayahu'] = {'isaiah', 'isa', 'is'}, | ['Yeshayahu'] = {'isaiah', 'isa', 'is'}, | ||
['Yirmeyahu'] = { | ['Yirmeyahu'] = {'jeremiah', 'jer'}, | ||
['Yechezkel'] = {'ezekiel', 'ezek', 'ez'}, | ['Yechezkel'] = {'ezekiel', 'ezek', 'ez'}, | ||
['Hoshea'] = {'hosea', 'hos'}, | ['Hoshea'] = {'hosea', 'hos'}, | ||
['Yoel'] = {'joel', 'jl'}, | ['Yoel'] = {'joel', 'jl'}, | ||
['Amos'] = {'amos', 'am'}, | ['Amos'] = {'amos', 'am'}, | ||
['Ovadyah'] = { | ['Ovadyah'] = {'obadiah', 'obad', 'ob'}, | ||
['Yonah'] = {'jonah', 'jon'}, | ['Yonah'] = {'jonah', 'jon'}, | ||
['Mikhah'] = { | ['Mikhah'] = {'micah', 'mic', 'mi'}, | ||
['Nachum'] = {'nahum', 'nah', 'na'}, | ['Nachum'] = {'nahum', 'nah', 'na'}, | ||
['Chavakkuk'] = {'habakkuk', 'hab', 'hb'}, | ['Chavakkuk'] = {'habakkuk', 'hab', 'hb'}, | ||
['Zephanyah'] = { | ['Zephanyah'] = {'zephaniah', 'zeph', 'zep'}, | ||
['Chaggai'] = {'haggai', 'hag', 'hg'}, | ['Chaggai'] = {'haggai', 'hag', 'hg'}, | ||
['Zekharyah'] = {'zechariah', 'zech', 'zec'}, | ['Zekharyah'] = {'zechariah', 'zech', 'zec'}, | ||
| Line 33: | Line 33: | ||
['Mishlei'] = {'proverbs', 'prov', 'prv'}, | ['Mishlei'] = {'proverbs', 'prov', 'prv'}, | ||
['Kohelet'] = {'ecclesiastes', 'eccles', 'eccl', 'qoheleth'}, | ['Kohelet'] = {'ecclesiastes', 'eccles', 'eccl', 'qoheleth'}, | ||
['Shir HaShirim'] = {' | ['Shir HaShirim'] = {'song_of_solomon', 'songofsol', 'songofsongs', 'song', 'sg', 'canticles', 'canticleofcanticles'}, | ||
['Eikhah'] = {'lamentations', 'lam'}, | ['Eikhah'] = {'lamentations', 'lam'}, | ||
['Rut'] = {'ruth', 'ru'}, | ['Rut'] = {'ruth', 'ru'}, | ||
| Line 39: | Line 39: | ||
['Iyyov'] = {'job', 'jb'}, | ['Iyyov'] = {'job', 'jb'}, | ||
['Daniel'] = {'daniel', 'dan', 'dn'}, | ['Daniel'] = {'daniel', 'dan', 'dn'}, | ||
['Divrei HaYamim I'] | ['Divrei HaYamim I'] = {'1_chronicles', '1chron', '1chr', 'I_chronicles'}, | ||
['Divrei HaYamim II'] = {' | ['Divrei HaYamim II'] = {'2_chronicles', '2chron', '2chr', 'II_chronicles'}, | ||
['Ezra'] = {'ezra', 'ezr'}, | ['Ezra'] = {'ezra', 'ezr'}, | ||
['Nechemyah'] = { | ['Nechemyah'] = {'nehemiah', 'neh'}, | ||
} | } | ||
| Line 48: | Line 48: | ||
local no_chapters = { | local no_chapters = { | ||
['obadiah'] = true, | ['obadiah'] = true, | ||
} | |||
--changes to the version name to be used in urls, only if necessary | |||
local site_version_tbl = { | |||
mechon_mamre = { | |||
he = 'p/pt/pt', | |||
jps = 'e/et/et', | |||
}, | |||
} | } | ||
| Line 64: | Line 72: | ||
end | end | ||
return false | return false | ||
end | |||
local function titlecase(arg) | |||
-- http://grammar.yourdictionary.com/capitalization/rules-for-capitalization-in-titles.html | |||
-- recommended by The U.S. Government Printing Office Style Manual: | |||
-- 'Capitalize all words in titles of publications and documents, | |||
-- except a, an, the, at, by, for, in, of, on, to, up, and, as, but, or, and nor.' | |||
local alwayslower = { | |||
['a'] = true, ['an'] = true, ['the'] = true, | |||
['and'] = true, ['but'] = true, ['or'] = true, ['for'] = true, | |||
['nor'] = true, ['on'] = true, ['in'] = true, ['at'] = true, ['to'] = true, | |||
['from'] = true, ['by'] = true, ['of'] = true, ['up'] = true, | |||
} | |||
local words = mw.text.split(mw.text.trim(arg or ''), '_') | |||
for i, s in ipairs(words) do | |||
s = string.lower(s) | |||
if i > 1 then | |||
if not alwayslower[s] then | |||
s = mw.getContentLanguage():ucfirst(s) | |||
end | |||
else | |||
s = mw.getContentLanguage():ucfirst(s) | |||
end | |||
words[i] = s | |||
end | |||
return table.concat(words, '_') | |||
end | end | ||
| Line 72: | Line 106: | ||
args[param] = trimArg(targs[param]) | args[param] = trimArg(targs[param]) | ||
end | end | ||
local default_version = 'nrsv' | |||
local input_book = '' | local input_book = '' | ||
local ref = '' | local ref = '' | ||
| Line 77: | Line 112: | ||
local text = '' | local text = '' | ||
local mainspace = mw.title.getCurrentTitle():inNamespaces(0) | local mainspace = mw.title.getCurrentTitle():inNamespaces(0) | ||
if args[1] == nil or args[2] == nil or tonumber(args[1]) ~= nil then | 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 | -- first argument is a numeric prefix and second is book name | ||
| Line 84: | Line 117: | ||
ref = args[3] or '' | ref = args[3] or '' | ||
commentary = args[4] or '' | commentary = args[4] or '' | ||
text = args[5] or trimArg((input_book .. ' ' .. ref)) | text = args[5] or trimArg((commentary .. ' to ' .. input_book .. ' ' .. ref)) | ||
else | else | ||
-- first argument is the whole book name | -- first argument is the whole book name | ||
| Line 90: | Line 123: | ||
ref = args[2] or '' | ref = args[2] or '' | ||
commentary = args[3] or '' | commentary = args[3] or '' | ||
text = args[4] or (input_book .. ' ' .. ref) | text = args[4] or (commentary .. ' to ' .. input_book .. ' ' .. ref) | ||
end | end | ||
if args.nobook == 'yes' then | if args.nobook == 'yes' then | ||
text = ref | text = ref | ||
end | end | ||
text = text:gsub('-', '–') --change hyphens to en dashes (3:2-5 → 3:2–5) | |||
local book = input_book:gsub('%p', ''):gsub(' ', '_') | local book = input_book:gsub('%p', ''):gsub(' ', '_') | ||
book = mw.ustring.lower(book) | |||
local book_found = false | local book_found = false | ||
local standard = book:gsub('_', '') | |||
for full_book, aliases in pairs(book_aliases) do | for full_book, aliases in pairs(book_aliases) do | ||
if | if standard == full_book:gsub('_', '') or valueExists(aliases, standard) then | ||
book = full_book | book = full_book | ||
book_found = true | book_found = true | ||
break | break | ||
| Line 109: | Line 143: | ||
end | end | ||
local urlpat = 'https://mg.alhatorah.org/Dual/_commentary/_book/_schap._svers#m7e3n7' | |||
local split_ref = mw.text.split(ref, '[-–—]') --split the ref into the part before and after the dash/hyphen | 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 s_ref = mw.text.split(split_ref[1], '%p') --any punctuation can be used to separate chapter from verse | ||
| Line 116: | Line 151: | ||
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(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 | for i, v in ipairs(e_ref) do e_ref[i] = v:gsub('%D', '') end | ||
local s_chap, s_vers | |||
local e_chap, e_vers, s_chap, s_vers | |||
local chapter_only = not s_ref[2] | local chapter_only = not s_ref[2] | ||
if no_chapters[book] then | if no_chapters[book] then | ||
| Line 122: | Line 158: | ||
s_chap = 1 | s_chap = 1 | ||
s_vers = s_ref[2] or s_ref[1] or 1 --verse 3 can be specified as "3" or "1:3" | s_vers = s_ref[2] or s_ref[1] or 1 --verse 3 can be specified as "3" or "1:3" | ||
e_chap = 1 | |||
e_vers = e_ref[2] or e_ref[1] or 1 | |||
else | else | ||
s_chap = s_ref[1] or 1 | s_chap = s_ref[1] or 1 | ||
s_vers = s_ref[2] 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 | |||
book = titlecase(book) --title case looks better at oremus where they display the input | |||
local v_range | |||
if chapter_only then | |||
if e_chap == s_chap then | |||
v_range = s_chap | |||
else | |||
v_range = s_chap .. '–' .. e_chap | |||
end | |||
else | |||
if e_chap == s_chap and e_vers == s_vers then | |||
v_range = s_chap ..':' .. s_vers | |||
elseif e_chap == s_chap then | |||
v_range = s_chap .. ':' .. s_vers .. '–' .. e_vers | |||
else | |||
v_range = s_chap .. ':' .. s_vers .. '–' .. e_chap .. ':' .. e_vers | |||
end | |||
end | end | ||
local url = urlpat:gsub('_%l+', { --get the components into the url | local url = urlpat:gsub('_%l+', { --get the components into the url | ||
_book = book, | _book = book, | ||
_schap = s_chap, | _schap = s_chap, | ||
_svers = s_vers, | _svers = s_vers, | ||
_echap = e_chap, | |||
_evers = e_vers, | |||
_vrange = v_range, | |||
_commentary = commentary, | |||
}) | }) | ||
local fulllink | local fulllink | ||
fulllink = '[' .. url .. ' ' .. text .. ']' | fulllink = '[' .. url .. ' ' .. text .. ']' | ||
if mainspace then | if mainspace then | ||
if not book_found then | if not book_found then | ||
| Line 152: | Line 211: | ||
end | end | ||
end | end | ||
return fulllink --.. table.concat(errors) | return fulllink --.. table.concat(errors) | ||
end | end | ||
return p | return p | ||