Module:BibleQuote2: Difference between revisions
No edit summary Tag: Manual revert |
No edit summary |
||
(7 intermediate revisions by the same user not shown) | |||
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 | local function addDoubleSpace(separator) | ||
return (string.gsub( | return (string.gsub(separator, "^", "<br><br>")) | ||
end | end | ||
local function | local function addIndent(separator) | ||
return (string.gsub( | return (string.gsub(separator, "^", " ")) | ||
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 109: | Line 27: | ||
string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)") | string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)") | ||
end | end | ||
local function | 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 | 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 | ||
if showVerseNumber then | |||
wikiText = addVerseNumber(wikiText, chapter, verseNumber) | |||
end | end | ||
local function | return wikiText | ||
end | |||
local function renderConcat(indent) | |||
local separator = "" | |||
if indent then | |||
separator = addIndent(separator) | |||
end | 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 = {} | 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 | |||
local function convertStringToBoolean(booleanString) | |||
local stringToBoolean = { ["true"] = true, ["false"] = false } | |||
return stringToBoolean[booleanString] | |||
end | end | ||
function p. | function p.main(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
return renderVerseSpec( | |||
return | |||
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