Module:BibleQuote2: Difference between revisions

From BibleVerseWiki
(Created page with "local p = {} --p stands for package local getArgs = require('Module:Arguments').getArgs local function verseNamespace() 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(v...")
 
No edit summary
 
(15 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 verseNamespace()
local function getVerseNamespace()
     return "VerseTemplate"
     return "VerseTemplate"
end
end
Line 10: Line 10:
end
end


local function addSingleSpace(verse)
local function addDoubleSpace(separator)
     return (string.gsub(verse, "^", "<br>"))
     return (string.gsub(separator, "^", "<br><br>"))
end
end


local function addDoubleSpace(verse)
local function addIndent(separator)
     return (string.gsub(verse, "^", "<br><br>"))
     return (string.gsub(separator, "^", "&nbsp;&nbsp;&nbsp;&nbsp;"))
end
end


local function addIndent(verse)
local function parseVerseSpec(verseSpec)
     return (string.gsub(verse, "^", "&nbsp;&nbsp;&nbsp;&nbsp;"))
     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
end


local function blockquote(quote, verse)
local function getPageTitle(book, chapter, verseNumber)
     return "<blockquote>" .. quote .. "<div style=\"text-align: right\">" ..
     return string.format("%s %s:%s", book, chapter, verseNumber)
        "'''" .. string.gsub(verse, "%s", "&nbsp;") .. "'''</div></blockquote>"
end
end


local function compose(...)
local function addVerseNumber(wikiText, chapter, verseNumber)
     local chain = { ... }
     if verseNumber == 1 then
    local function recurse(i, ...)
        return (string.gsub(wikiText, "^", string.format("<big>'''%s'''</big> ", chapter)))
        if i == #chain then return chain[i](...) end
        return recurse(i + 1, chain[i](...))
     end
     end
     return function(...) return recurse(1, ...) end
     return (string.gsub(wikiText, "^", string.format("<sup>'''%s'''</sup> ", verseNumber)))
end
end


local function renderVerses(verseSpec, showVerseNumber, showPilcrow, singleSpace, doubleSpace, indent)
local function renderVerse(book, chapter, verseNumber, showPilcrow, showVerseNumber)
     local book, chapter, startVerse, stopVerse
     local pageTitle = getPageTitle(book, chapter, verseNumber)
     if string.find(verseSpec, "-") then
    local wikiText = getWikiText(pageTitle)
         _, _, book, chapter, startVerse, stopVerse =
     if not wikiText then
            string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)-(%d+)")
        error("Invalid Verse Number: " .. pageTitle)
     else
    end
         _, _, book, chapter, startVerse =
    if not showPilcrow then
            string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)")
         wikiText = removePilcrow(wikiText)
     end
    if showVerseNumber then
         wikiText = addVerseNumber(wikiText, chapter, verseNumber)
     end
     end
     local verses = {}
     return wikiText
    local function renderVerse(verseName, verseNumber)
end
        local wikiText = mw.title.new(verseName, verseNamespace()):getContent()
 
        if not wikiText then error("Invalid Verse Number: " .. verseSpec) end
local function renderConcat(indent)
        local function addVerseNumber(wikiText)
    local separator = ""
            if verseNumber == 1 then
    if indent then
                return (string.gsub(wikiText, "^", "<big>'''" .. chapter .. "'''</big> "))
         separator = addIndent(separator)
            end
            return (string.gsub(wikiText, "^", "<sup>'''" .. verseNumber .. "'''</sup> "))
        end
        local process = {}
        if not showPilcrow then table.insert(process, removePilcrow) end
         if stopVerse then table.insert(process, addVerseNumber) end
        if #process > 0 then return compose(unpack(process))(wikiText) end
        return wikiText
     end
     end
     local function renderConcat()
     separator = addDoubleSpace(separator)
        local process = {}
    return separator
        if indent then table.insert(process, addIndent) end
end
         table.insert(process, addDoubleSpace)
 
        if #process > 0 then return compose(unpack(process))("") end
local function renderVerses(verses, indent)
        return " "
    if indent then
         return addIndent(table.concat(verses, renderConcat()))
     end
     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
     for i = startVerse, (stopVerse and stopVerse or startVerse) do
         table.insert(verses, renderVerse(book .. " " .. chapter .. ":" .. i, i))
         table.insert(verses, renderVerse(book, chapter, i, showPilcrow, stopVerse))
     end
     end
     if indent then return addIndent(table.concat(verses, renderConcat())) end
     return renderQuote(renderVerses(verses, indent), verseSpec, book, chapter, startVerse)
     return table.concat(verses, renderConcat())
end
 
local function convertStringToBoolean(booleanString)
    local stringToBoolean = { ["true"] = true, ["false"] = false }
     return stringToBoolean[booleanString]
end
end


function p.standard(frame)
function p.main(frame)
     local args = getArgs(frame)
     local args = getArgs(frame)
    local stringToBoolean = { ["true"] = true, ["false"] = false }
     return renderVerseSpec(
     return blockquote(renderVerses(
         args[1]
         args[1]
         , stringToBoolean[args.showVerseNumber]
         , convertStringToBoolean(args.showPilcrow)
        , stringToBoolean[args.showPilcrow]
         , convertStringToBoolean(args.indent)
        , stringToBoolean[args.singleSpace]
     )
        , stringToBoolean[args.doubleSpace]
         , stringToBoolean[args.indent]
     ), args[1])
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, "^", "&nbsp;&nbsp;&nbsp;&nbsp;"))
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