local p = {}
-- Begin things that need localization
SCANNED_FILE_NAME = "Gesenius' Hebrew Grammar (1910 Kautzsch-Cowley edition).djvu"
-- See also:
-- * romanPages in p._page
-- * "Invalid book name"
-- End things that need localization
function p._pageCalc(number)
romanPages = {
i = 5,
ii = 6,
iii = 7,
iv = 8,
v = 9,
vi = 10,
vii = 11,
viii = 12,
ix = 13,
x = 14,
xi = 15,
xii = 16,
xiii = 17,
xiv = 18,
xv = 19,
xvi = 20,
xviii = 22,
xix = 23
}
if (romanPages[number]) then
return romanPages[number]
end
return(number + 24)
end
function p._page(number)
internalNumber = p._pageCalc(number)
return "[[Page:" .. SCANNED_FILE_NAME .. "/" .. internalNumber .. "|" .. number .. "]]"
end
function p.page(frame)
return p._page(frame.args[1])
end
function p.pages(frame)
section = frame.args["section"]
layout = frame:expandTemplate{
title = "Default layout",
args = { "Layout 2" }
}
pagesTag = frame:extensionTag{
name = "pages",
content = "",
args = {
index = SCANNED_FILE_NAME,
from = p._pageCalc(frame.args["from"]),
to = p._pageCalc(frame.args["to"]),
fromsection = section,
tosection = section
}
}
return layout .. pagesTag
end
-- Converts a number to a Hebrew ("Gematria") number.
-- This doesn't cover all the Hebrew numbers, but only what is needed for
-- Bible chapters and verses.
function toHebrewNumber(numberStr)
hebrewNumber = ""
numberNum = tonumber(numberStr, 10)
if (numberNum >= 100) then
hebrewNumber = hebrewNumber .. "ק"
end
modulo100 = numberNum % 100
if (modulo100 == 15) then
return hebrewNumber .. "טו"
end
if (modulo100 == 16) then
return hebrewNumber .. "טז"
end
onesNumber = numberNum % 10
tensNumber = math.floor(modulo100 / 10)
tensLetter = {
"י",
"כ",
"ל",
"מ",
"נ",
"ס",
"ע",
"פ",
"צ"
}
if (tensNumber ~= 0) then
hebrewNumber = hebrewNumber .. tensLetter[tensNumber]
end
onesLetter = {
"א",
"ב",
"ג",
"ד",
"ה",
"ו",
"ז",
"ח",
"ט"
}
if (onesNumber ~= 0) then
hebrewNumber = hebrewNumber .. onesLetter[onesNumber]
end
return hebrewNumber
end
-- Converts a number to a Greek numeral.
-- This doesn't cover all the Greek numbers, but only what is needed for
-- Bible chapters and verses.
function toGreekNumber(numberStr)
numberNum = tonumber(numberStr, 10)
greekNumber = ""
onesLetter = { "Α", "Β", "Γ", "Δ", "Ε", "ΣΤ", "Ζ", "Η", "Θ" }
tensLetter = { "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "ϟ" }
if (numberNum >= 10) then
tensNumber = math.floor(numberNum / 10)
greekNumber = greekNumber .. tensLetter[tensNumber]
end
onesNumber = numberNum % 10
if (onesNumber > 0) then
greekNumber = greekNumber .. onesLetter[onesNumber]
end
greekNumber = greekNumber .. "'"
return greekNumber
end
function verseLink(targetLanguage, linkTargetTitle, chapter, verseStr)
verseNum = string.match(verseStr, "[0-9]+")
verseLinkWikitext = "[[:" .. targetLanguage .. ":" .. linkTargetTitle
if (targetLanguage == "he") then
verseLinkWikitext = verseLinkWikitext .. " " .. toHebrewNumber(chapter) ..
" " .. toHebrewNumber(verseNum) .. "|" .. verseStr
if (string.match(verseStr, "f$")) then
verseLinkWikitext = verseLinkWikitext .. "."
end
verseLinkWikitext = verseLinkWikitext .. "]]"
else
-- Greek Wikisource doesn't support verses at the moment
end
return verseLinkWikitext
end
function verseLinks(targetLanguage, linkTargetTitle, chapter, versesStr)
-- Greek Wikisource and Hebrew Sirac don't support verses at the moment
if (targetLanguage == "el" or linkTargetTitle == "בן סירא") then
return versesStr
end
formattedLinks = {}
verseStrs = mw.text.split( versesStr, "%." )
for i, verse in ipairs(verseStrs) do
if (verse ~= "") then
formattedLinks[i] = verseLink(
targetLanguage,
linkTargetTitle,
chapter,
verse
)
end
end
wholeVersesString = table.concat(formattedLinks, ".")
-- Remove repeated periods (can appear after f./ff.)
wholeVersesString = mw.ustring.gsub( wholeVersesString, "%.%]%]%.", "]].", n )
-- Remove spaces in the beginning of links
wholeVersesString = mw.ustring.gsub( wholeVersesString, "%| ", "|", n )
wholeVersesString = mw.ustring.gsub( wholeVersesString, "f%]%]%.%[%[", "f]]. [[", n )
return wholeVersesString
end
function bibleRefContent(book, chapter, verse, hideBook, fullSizeVerse, actualBook, frame)
linkTargetBook = {
["Gn"] = "בראשית",
["Gen"] = "בראשית",
["Gn."] = "בראשית",
["Ex"] = "שמות",
["Lv"] = "ויקרא",
["Lev"] = "ויקרא",
["Lv."] = "ויקרא",
["Nu"] = "במדבר",
["Dt"] = "דברים",
["Dt."] = "דברים",
["Jos"] = "יהושע",
["Ju"] = "שופטים",
["Jud"] = "שופטים",
["Ju."] = "שופטים",
["1 S"] = "שמואל א",
["2 S"] = "שמואל ב",
["1 K"] = "מלכים א",
["2 K"] = "מלכים ב",
["Is"] = "ישעיהו",
["Is."] = "ישעיהו",
["Jer"] = "ירמיהו",
["Je"] = "ירמיהו",
["Jer."] = "ירמיהו",
["Ez"] = "יחזקאל",
["Ez."] = "יחזקאל",
["Eze"] = "יחזקאל",
["Hos"] = "הושע",
["Ho"] = "הושע",
["Jo"] = "יואל",
["Joel"] = "יואל",
["Am"] = "עמוס",
["Amos"] = "עמוס",
["Ob"] = "עובדיה",
["Jon"] = "יונה",
["Jn"] = "יונה",
["Mi"] = "מיכה",
["Mic"] = "מיכה",
["Na"] = "נחום",
["Nah"] = "נחום",
["Hb"] = "חבקוק",
["Hab"] = "חבקוק",
["Zp"] = "צפניה",
["Hag"] = "חגי",
["Zc"] = "זכריה",
["Mal"] = "מלאכי",
["Mal."] = "מלאכי",
["Ps"] = "תהלים",
["PsPs"] = "תהלים",
["Pr"] = "משלי",
["Jb"] = "איוב",
["Job"] = "איוב",
["Ct"] = "שיר השירים",
["Cant"] = "שיר השירים",
["Ru"] = "רות",
["La"] = "איכה",
["Lam"] = "איכה",
["Ec"] = "קהלת",
["Est"] = "אסתר",
["Dn"] = "דניאל",
["Ezr"] = "עזרא",
["Neh"] = "נחמיה",
["Ne"] = "נחמיה",
["1 Ch"] = "דברי הימים א",
["1 Chr"] = "דברי הימים א",
["2 Ch"] = "דברי הימים ב",
["2 Chr"] = "דברי הימים ב",
["3 Ezr"] = "Έσδρας_Α",
["1 Macc."] = "Μακκαβαίων_Α'",
-- The only reference that uses Ecclus is relevant for the Hebrew text
["Ecclus"] = "בן סירא",
["Sirac"] = "Σοφία_Σειράχ",
["St. Mark"] = "Κατά Μάρκον",
["John"] = "Κατά Ιωάννην",
["Acts"] = "Πράξεις των Αποστόλων",
["Rv"] = "Αποκάλυψις Ιωάννου"
}
if (
(not linkTargetBook[book]) or
(actualBook ~= "" and not linkTargetBook[actualBook])
) then
return "'''''[[Template:GHGbible-ref/invalid book|Invalid book name]]'''''"
end
greekBook = {
["3 Ezr"] = true,
["1 Macc."] = true,
["Sirac"] = true,
["Mark"] = true,
["St. Mark"] = true,
["John"] = true,
["Acts"] = true,
["Rv"] = true
}
-- At least one abbreviation is known to be ambiguous in the 1910 edition:
-- Jn may mean both Jonah and John (New Testament).
-- There may be others.
if (actualBook == "") then
linkTargetTitle = linkTargetBook[book]
else
linkTargetTitle = linkTargetBook[actualBook]
end
if (greekBook[book] or greekBook[actualBook]) then
targetLanguage = "el"
else
targetLanguage = "he"
end
linkBeginning = "[[:" .. targetLanguage .. ":"
linkEnding = "]]"
bibleRef = ""
if (hideBook ~= "completely") then
if (hideBook == "") then
if (book == "Ps") then
displayBook = "ψ"
elseif (book == "PsPs") then
displayBook = "ψψ"
else
displayBook = book
end
bibleRef = bibleRef .. displayBook .. " "
end
-- Obadiah has only one chapter, so the chapter number is not needed
-- and only the verse number is shown.
-- All the existing references to Obadiah have a verse.
if (book == "Ob") then
bibleRef = bibleRef .. linkBeginning .. linkTargetTitle .. " א " ..
toHebrewNumber(verse) .. "|" .. verse .. linkEnding
end
bibleRef = bibleRef .. linkBeginning .. linkTargetTitle
if (targetLanguage == "he") then
bibleRef = bibleRef .. " " .. toHebrewNumber(chapter)
else
-- This works only with some Greek books for now.
-- See el:Συζήτηση:Η_Αγία_Γραφή#Numbering_of_chapters
bibleRef = bibleRef .. "#Κεφάλαιον " .. toGreekNumber(chapter)
end
bibleRef = bibleRef .. "|"
if (string.match(hideBook, "^v")) then
bibleRef = bibleRef .. hideBook .. "."
else
bibleRef = bibleRef .. chapter
end
bibleRef = bibleRef .. linkEnding
end
if (verse ~= "") then
verseLinksContent = verseLinks(
targetLanguage,
linkTargetTitle,
chapter,
verse
)
if (fullSizeVerse == "") then
verseLinksContent = "<sup>" .. verseLinksContent .. "</sup>"
end
bibleRef = bibleRef .. verseLinksContent
end
return bibleRef
end
function p._bibleRef(book, chapter, verse, hideBook, fullSizeVerse, actualBook, frame)
content = bibleRefContent(
book,
chapter,
verse,
hideBook,
fullSizeVerse,
actualBook,
frame
)
formattedContent = frame:expandTemplate{
title = "nowrap",
args = { content }
}
return formattedContent
end
function p.bibleRef(frame)
book = frame.args["book"]
chapter = frame.args["chapter"]
verse = frame.args["verse"]
hideBook = frame.args["hidebook"]
fullSizeVerse = frame.args["fullsizeverse"]
actualBook = frame.args["actualbook"]
return p._bibleRef(book, chapter, verse, hideBook, fullSizeVerse, actualBook, frame)
end
function p._heb(text, translate, pron, ru, indexitem, frame)
tag = "span" -- Will probably also support <div> in the future
hebElement = mw.html.create( tag )
hebElement
:wikitext( text )
:attr( "lang", "hbo" )
:attr( "dir", "rtl" )
:addClass( "he_GHG" )
-- Calling HTML class "he_GHG" to render Hebrew text,
-- which is available at Template:GHGheb/styles.css.
if (indexitem) then
hebElement:addClass( "indexitem" )
end
hebText = tostring( hebElement )
if (pron ~= "") then
hebText = hebText .. " " .. p._pron(pron, frame)
end
if (translate ~= "") then
hebText = hebText .. " " .. p._translate(translate, en, "", frame)
end
return hebText
end
function p.heb(frame)
text = frame.args["text"]
translate = frame.args["translate"]
pron = frame.args["pron"]
ru = frame.args["ru"]
indexitem = ( frame.args["indexitem"] == "1" )
return p._heb(text, translate, pron, ru, indexitem, frame)
end
function p._pron(text, frame)
return frame:expandTemplate{
title = "nowrap",
args = { "''" .. text .. "''" }
}
end
function p.pron(frame)
text = frame.args[1]
return p._pron(text, frame)
end
function p._translate(text, en, lang, frame)
translation = "''" .. text .. "''"
if (ru ~= "") then
if ( lang == "" ) then
lang = "la"
end
translatedElement = mw.html.create( "span" )
translatedElement
:wikitext( translation )
:attr( "lang", lang )
:attr( "title", ru )
:css( "border-bottom", "1px dotted" )
translation = tostring(translatedElement)
end
return translation
end
function p.translate(frame)
text = frame.args[1]
ru = frame.args["ru"]
lang = frame.args["lang"]
return p._translate(text, en, lang, frame)
end
return p