Module:BibleQuote: Difference between revisions

From BibleVerseWiki
m (Protected "Module:BibleQuote" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)))
No edit summary
Line 20: Line 20:
local function addIndent(verse)
local function addIndent(verse)
     return (string.gsub(verse, "^", "    "))
     return (string.gsub(verse, "^", "    "))
end
local function blockquote(quote, verse)
    return "<blockquote>" .. quote .. "<div style=\"text-align: right\">" ..
        "'''" .. string.gsub(verse, "%s", "&nbsp;") .. "'''</div></blockquote>"
end
end


Line 35: Line 30:
     return function(...) return recurse(1, ...) end
     return function(...) return recurse(1, ...) end
end
end


local function renderVerses(verseSpec, showVerseNumber, showPilcrow, singleSpace, doubleSpace, indent)
local function renderVerses(verseSpec, showVerseNumber, showPilcrow, singleSpace, doubleSpace, indent)
Line 45: Line 41:
             string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)")
             string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)")
     end
     end
     local verses = {}
     local function contextLink()
        return string.gsub(book, "%s", "-") .. "-" .. chapter .. "-" .. startVerse
    end
    local function blockquote(quote, verse, contextLink)
        return "<blockquote>" .. quote .. "<div style=\"text-align: right\">" ..
            "'''[[Bible#" .. contextLink .. "|" .. string.gsub(verse, "%s", "&nbsp;") ..
            "]]'''</div></blockquote>"
    end
     local function renderVerse(verseName, verseNumber)
     local function renderVerse(verseName, verseNumber)
         local wikiText = mw.title.new(verseName, verseNamespace()):getContent()
         local wikiText = mw.title.new(verseName, verseNamespace()):getContent()
Line 68: Line 71:
         return " "
         return " "
     end
     end
    local function renderQuote(verses)
        if indent then return addIndent(table.concat(verses, renderConcat())) end
        return table.concat(verses, renderConcat())
    end
    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, i))
     end
     end
     if indent then return addIndent(table.concat(verses, renderConcat())) end
     return blockquote(renderQuote(verses), verseSpec, contextLink())
    return table.concat(verses, renderConcat())
end
end


Line 78: Line 85:
     local args = getArgs(frame)
     local args = getArgs(frame)
     local stringToBoolean = { ["true"] = true, ["false"] = false }
     local stringToBoolean = { ["true"] = true, ["false"] = false }
     return blockquote(renderVerses(
     return renderVerses(
         args[1]
         args[1]
         , stringToBoolean[args.showVerseNumber]
         , stringToBoolean[args.showVerseNumber]
Line 85: Line 92:
         , stringToBoolean[args.doubleSpace]
         , stringToBoolean[args.doubleSpace]
         , stringToBoolean[args.indent]
         , stringToBoolean[args.indent]
     ), args[1])
     )
end
end


return p
return p

Revision as of 02:40, 2 January 2024

Documentation for this module may be created at Module:BibleQuote/doc

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(verse)
    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
    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
    local function contextLink()
        return string.gsub(book, "%s", "-") .. "-" .. chapter .. "-" .. startVerse
    end
    local function blockquote(quote, verse, contextLink)
        return "<blockquote>" .. quote .. "<div style=\"text-align: right\">" ..
            "'''[[Bible#" .. contextLink .. "|" .. string.gsub(verse, "%s", "&nbsp;") ..
            "]]'''</div></blockquote>"
    end
    local function renderVerse(verseName, verseNumber)
        local wikiText = mw.title.new(verseName, verseNamespace()):getContent()
        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
    local function renderConcat()
        local process = {}
        if indent then table.insert(process, addIndent) end
        table.insert(process, addDoubleSpace)
        if #process > 0 then return compose(unpack(process))("") end
        return " "
    end
    local function renderQuote(verses)
        if indent then return addIndent(table.concat(verses, renderConcat())) end
        return table.concat(verses, renderConcat())
    end
    local verses = {}
    for i = startVerse, (stopVerse and stopVerse or startVerse) do
        table.insert(verses, renderVerse(book .. " " .. chapter .. ":" .. i, i))
    end
    return blockquote(renderQuote(verses), verseSpec, contextLink())
end

function p.standard(frame)
    local args = getArgs(frame)
    local stringToBoolean = { ["true"] = true, ["false"] = false }
    return renderVerses(
        args[1]
        , stringToBoolean[args.showVerseNumber]
        , stringToBoolean[args.showPilcrow]
        , stringToBoolean[args.singleSpace]
        , stringToBoolean[args.doubleSpace]
        , stringToBoolean[args.indent]
    )
end

return p