Module:BibleQuote2
Documentation for this module may be created at Module:BibleQuote2/doc
local p = {} --p stands for package
local getArgs = require('Module:Arguments').getArgs
local function getVerseNamespace()
return "VerseTemplate"
end
local function removePilcrow(verse)
return (string.gsub(verse, "^<span class=\"pilcrow\">¶</span>%s*", ""))
end
-- local function addSingleSpace(verse)
-- return (string.gsub(verse, "^", "<br>"))
-- end
local function addDoubleSpace(verse)
return (string.gsub(verse, "^", "<br><br>"))
end
local function addIndent(verse)
return (string.gsub(verse, "^", " "))
end
local function parseVerseSpec(verseSpec)
local book, chapter, startVerse, stopVerse
if string.find(verseSpec, "-") then
_, _, book, chapter, startVerse, stopVerse =
string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)-(%d+)")
else
_, _, book, chapter, startVerse =
string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)")
end
return book, chapter, startVerse, stopVerse
end
local function renderQuote(quote, spec, book, chapter, startVerse)
local formatString = [=[
<blockquote>%s
<div style="text-align: right">
<span class="navigation-not-searchable">[[%s#%s-%s|%s]]</span>
</div>
</blockquote>
]=]
return string.format(formatString, quote, book, chapter, startVerse, spec)
end
local function getWikiText(pageTitle)
return mw.title.new(pageTitle, getVerseNamespace()):getContent()
end
local function getPageTitle(book, chapter, verseNumber)
return string.format("%s %s:%s", book, chapter, verseNumber)
end
local function addVerseNumber(wikiText, chapter, verseNumber)
if verseNumber == 1 then
return (string.gsub(wikiText, "^", string.format("<big>'''%s'''</big> ", chapter)))
end
return (string.gsub(wikiText, "^", string.format("<sup>'''%s'''</sup> ", verseNumber)))
end
local function renderVerse(book, chapter, verseNumber, showPilcrow, showVerseNumber)
local pageTitle = getPageTitle(book, chapter, verseNumber)
local wikiText = getWikiText(pageTitle)
if not wikiText then
error("Invalid Verse Number: " .. pageTitle)
end
if not showPilcrow then
wikiText = removePilcrow(wikiText)
end
if showVerseNumber then
wikiText = addVerseNumber(wikiText, chapter, verseNumber)
end
return wikiText
end
local function renderConcat(indent)
local separator = ""
if indent then
separator = addIndent(separator)
end
separator = addDoubleSpace(separator)
return separator
end
local function renderVerses(verses, indent)
if indent then
return addIndent(table.concat(verses, renderConcat()))
end
return table.concat(verses, renderConcat())
end
local function renderVerseSpec(verseSpec, showVerseNumber, showPilcrow, singleSpace, doubleSpace, indent)
local book, chapter, startVerse, stopVerse = parseVerseSpec(verseSpec)
local verses = {}
for i = startVerse, (stopVerse and stopVerse or startVerse) do
table.insert(verses, renderVerse(book, chapter, i, showPilcrow, stopVerse))
end
return renderQuote(renderVerses(verses, indent), verseSpec, book, chapter, startVerse)
end
function p.main(frame)
local args = getArgs(frame)
local stringToBoolean = { ["true"] = true, ["false"] = false }
return renderVerseSpec(
args[1]
, stringToBoolean[args.showVerseNumber]
, stringToBoolean[args.showPilcrow]
, stringToBoolean[args.singleSpace]
, stringToBoolean[args.doubleSpace]
, stringToBoolean[args.indent]
)
end
return p