Module:BibleQuote2: Difference between revisions

From BibleVerseWiki
No edit summary
No edit summary
 
(6 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;"))
end
 
local function compose(...)
    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 27:
             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 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
     end
     local function blockquote(quote, verse, contextLink)
     if not showPilcrow then
         return "<blockquote>" .. quote .. "<div style=\"text-align: right\">" ..
         wikiText = removePilcrow(wikiText)
            "<span class=\"navigation-not-searchable\">'''[[Bible#" ..
            contextLink .. "|" .. string.gsub(verse, "%s", "&nbsp;") ..
            "]]'''</span></div></blockquote>"
     end
     end
     local function renderVerse(verseName, verseNumber)
     if showVerseNumber then
        local wikiText = mw.title.new(verseName, verseNamespace()):getContent()
         wikiText = addVerseNumber(wikiText, chapter, verseNumber)
        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()
     return wikiText
        local process = {}
end
        if indent then table.insert(process, addIndent) end
 
         table.insert(process, addDoubleSpace)
local function renderConcat(indent)
        if #process > 0 then return compose(unpack(process))("") end
    local separator = ""
        return " "
    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 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 .. " " .. 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
 
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 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]
     )
     )
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