Module:BibleQuote2: Difference between revisions
No edit summary |
No edit summary |
||
Line 28: | Line 28: | ||
end | end | ||
return book, chapter, startVerse, stopVerse | return book, chapter, startVerse, stopVerse | ||
end | end | ||
Line 85: | Line 74: | ||
end | end | ||
return table.concat(verses, renderConcat()) | return table.concat(verses, renderConcat()) | ||
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 | end | ||
Line 94: | Line 94: | ||
end | end | ||
return renderQuote(renderVerses(verses, indent), verseSpec, book, chapter, startVerse) | return renderQuote(renderVerses(verses, indent), verseSpec, book, chapter, startVerse) | ||
end | |||
local function convertStringToBoolean(booleanString) | |||
local stringToBoolean = { ["true"] = true, ["false"] = false } | |||
return stringToBoolean[booleanString] | |||
end | end | ||
function p.main(frame) | function p.main(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
return renderVerseSpec( | return renderVerseSpec( | ||
args[1] | args[1] | ||
, | , convertStringToBoolean(args.showPilcrow) | ||
, | , convertStringToBoolean(args.indent) | ||
) | ) | ||
end | end | ||
return p | return p |
Latest revision as of 19:43, 23 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 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 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 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
local function convertStringToBoolean(booleanString)
local stringToBoolean = { ["true"] = true, ["false"] = false }
return stringToBoolean[booleanString]
end
function p.main(frame)
local args = getArgs(frame)
return renderVerseSpec(
args[1]
, convertStringToBoolean(args.showPilcrow)
, convertStringToBoolean(args.indent)
)
end
return p