Module:BibleQuote2: Difference between revisions
No edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
local function | local function getVerseNamespace() | ||
return "VerseTemplate" | return "VerseTemplate" | ||
end | end | ||
Line 10: | Line 10: | ||
end | end | ||
local function addSingleSpace(verse) | -- local function addSingleSpace(verse) | ||
return (string.gsub(verse, "^", "<br>")) | -- return (string.gsub(verse, "^", "<br>")) | ||
end | -- end | ||
local function addDoubleSpace(verse) | local function addDoubleSpace(verse) | ||
Line 22: | Line 22: | ||
end | end | ||
local function | local function parseVerseSpec(verseSpec) | ||
local book, chapter, startVerse, stopVerse | local book, chapter, startVerse, stopVerse | ||
if string.find(verseSpec, "-") then | if string.find(verseSpec, "-") then | ||
Line 40: | Line 31: | ||
string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)") | string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)") | ||
end | end | ||
local function | return book, chapter, startVerse, stopVerse | ||
return book .. " | 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 | 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 | end | ||
if not showPilcrow then | |||
wikiText = removePilcrow(wikiText) | |||
end | end | ||
local function renderConcat() | 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 | end | ||
local function | separator = addDoubleSpace(separator) | ||
return separator | |||
end | |||
local function renderVerses(verses, indent) | |||
if indent then | |||
return addIndent(table.concat(verses, renderConcat())) | |||
end | 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 = {} | local verses = {} | ||
for i = startVerse, (stopVerse and stopVerse or startVerse) do | for i = startVerse, (stopVerse and stopVerse or startVerse) do | ||
table.insert(verses, renderVerse(book | table.insert(verses, renderVerse(book, chapter, i, showPilcrow, stopVerse)) | ||
end | end | ||
return | return renderQuote(renderVerses(verses, indent), verseSpec, book, chapter, startVerse) | ||
end | end | ||
function p. | function p.main(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local stringToBoolean = { ["true"] = true, ["false"] = false } | local stringToBoolean = { ["true"] = true, ["false"] = false } | ||
return | return renderVerseSpec( | ||
args[1] | args[1] | ||
, stringToBoolean[args.showVerseNumber] | , stringToBoolean[args.showVerseNumber] |
Revision as of 18:56, 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 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