Module:BibleQuote2: Difference between revisions

From BibleVerseWiki
No edit summary
No edit summary
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 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 compose(...)
local function parseVerseSpec(verseSpec)
    local chain = { ... }
    local function recurse(i, ...)
        if i == #chain then return chain[i](...) end
        return recurse(i + 1, chain[i](...))
    end
    return function(...) return recurse(1, ...) end
end
 
local function renderVerses(verseSpec, showVerseNumber, showPilcrow, singleSpace, doubleSpace, indent)
     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 contextLink()
     return book, chapter, startVerse, stopVerse
         return book .. "#" .. chapter .. "-" .. startVerse
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
     local function blockquote(quote, verse, contextLink)
     return (string.gsub(wikiText, "^", string.format("<sup>'''%s'''</sup> ", verseNumber)))
        return "<blockquote>" .. quote .. "<div style=\"text-align: right\">" ..
end
            "<span class=\"navigation-not-searchable\">'''[[" ..
 
            contextLink .. "|" .. string.gsub(verse, "%s", "&nbsp;") ..
local function renderVerse(book, chapter, verseNumber, showPilcrow, showVerseNumber)
            "]]'''</span></div></blockquote>"
    local pageTitle = getPageTitle(book, chapter, verseNumber)
    local wikiText = getWikiText(pageTitle)
    if not wikiText then
        error("Invalid Verse Number: " .. pageTitle)
     end
     end
     local function renderVerse(verseName, verseNumber)
     if not showPilcrow then
        local wikiText = mw.title.new(verseName, verseNamespace()):getContent()
         wikiText = removePilcrow(wikiText)
        if not wikiText then error("Invalid Verse Number: " .. verseSpec) end
         local function addVerseNumber(wikiText)
            if verseNumber == 1 then
                return (string.gsub(wikiText, "^", "<big>'''" .. chapter .. "'''</big> "))
            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()
     if showVerseNumber then
        local process = {}
        wikiText = addVerseNumber(wikiText, chapter, verseNumber)
        if indent then table.insert(process, addIndent) end
    end
         table.insert(process, addDoubleSpace)
    return wikiText
        if #process > 0 then return compose(unpack(process))("") end
end
        return " "
 
local function renderConcat(indent)
    local separator = ""
    if indent then
         separator = addIndent(separator)
     end
     end
     local function renderQuote(verses)
     separator = addDoubleSpace(separator)
        if indent then return addIndent(table.concat(verses, renderConcat())) end
    return separator
        return table.concat(verses, renderConcat())
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 .. " " .. chapter .. ":" .. i, i))
         table.insert(verses, renderVerse(book, chapter, i, showPilcrow, stopVerse))
     end
     end
     return blockquote(renderQuote(verses), verseSpec, contextLink())
     return renderQuote(renderVerses(verses, indent), verseSpec, book, chapter, startVerse)
end
end


function p.standard(frame)
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 renderVerses(
     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, "^", "&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 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