Module:BibleQuote2: Difference between revisions

From BibleVerseWiki
No edit summary
No edit summary
 
(11 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 41: 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
        local hyphenBook = string.gsub(book, "%s", "-")
end
        if startVerse == "1" then
 
            return hyphenBook .. "-" .. chapter
local function getWikiText(pageTitle)
        end
    return mw.title.new(pageTitle, getVerseNamespace()):getContent()
        return hyphenBook .. "-" .. chapter .. "-" .. startVerse
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
            "'''[[Bible#" .. contextLink .. "|" .. string.gsub(verse, "%s", "&nbsp;") ..
 
            "]]'''</div></blockquote>"
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 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
        table.insert(process, addDoubleSpace)
        if #process > 0 then return compose(unpack(process))("") end
        return " "
     end
     end
     local function renderQuote(verses)
     return wikiText
        if indent then return addIndent(table.concat(verses, renderConcat())) end
end
         return table.concat(verses, renderConcat())
 
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 .. " " .. 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