Module:BibleQuote2: Difference between revisions
No edit summary |
No edit summary |
||
Line 10: | Line 10: | ||
end | end | ||
local function addDoubleSpace(separator) | |||
return (string.gsub(separator, "^", "<br><br>")) | |||
local function addDoubleSpace( | |||
return (string.gsub( | |||
end | end | ||
local function addIndent( | local function addIndent(separator) | ||
return (string.gsub( | return (string.gsub(separator, "^", " ")) | ||
end | end | ||
Line 91: | Line 87: | ||
end | end | ||
local function renderVerseSpec(verseSpec | local function renderVerseSpec(verseSpec, showPilcrow, indent) | ||
local book, chapter, startVerse, stopVerse = parseVerseSpec(verseSpec) | local book, chapter, startVerse, stopVerse = parseVerseSpec(verseSpec) | ||
local verses = {} | local verses = {} | ||
Line 105: | Line 101: | ||
return renderVerseSpec( | return renderVerseSpec( | ||
args[1] | args[1] | ||
, stringToBoolean[args.showPilcrow] | , stringToBoolean[args.showPilcrow] | ||
, stringToBoolean[args.indent] | , stringToBoolean[args.indent] | ||
) | ) |
Revision as of 19:14, 22 May 2024
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 addDoubleSpace(separator)
return (string.gsub(separator, "^", "<br><br>"))
end
local function addIndent(separator)
return (string.gsub(separator, "^", " "))
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, showPilcrow, 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.showPilcrow]
, stringToBoolean[args.indent]
)
end
return p