Module:BibleQuote: Difference between revisions

From BibleVerseWiki
No edit summary
No edit summary
 
(30 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {} --p stands for package
local p = {} --p stands for package
local getArgs = require('Module:Arguments').getArgs


local function verseNamespace()
local function verseNamespace()
     return "Template"
     return "VerseTemplate"
end
end


local function removePilcrow(verse)
local function removePilcrow(verse)
     return (string.gsub(verse, "^<span class=\"pilcrow\">¶</span>%W-%w", "P"))
     return (string.gsub(verse, "^<span class=\"pilcrow\">¶</span>%s*", ""))
end
end


Line 19: Line 20:
local function addIndent(verse)
local function addIndent(verse)
     return (string.gsub(verse, "^", "&nbsp;&nbsp;&nbsp;&nbsp;"))
     return (string.gsub(verse, "^", "&nbsp;&nbsp;&nbsp;&nbsp;"))
end
-- local function expandTemplate(title, ...)
--    return mw.getCurrentFrame():expandTemplate { title = title };
-- end
local function preProcess(text)
    return mw.getCurrentFrame():preprocess(text);
end
end


Line 38: Line 32:


local function renderVerses(verseSpec, showVerseNumber, showPilcrow, singleSpace, doubleSpace, indent)
local function renderVerses(verseSpec, showVerseNumber, showPilcrow, singleSpace, doubleSpace, indent)
     local _, _, book, chapter, startVerse, stopVerse =
     local book, chapter, startVerse, stopVerse
        string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)-(%d+)")
    if string.find(verseSpec, "-") then
     local verses = {}
        _, _, 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 book .. "#" .. chapter .. "-" .. startVerse
    end
     local function blockquote(quote, verse, contextLink)
        return "<blockquote>" .. quote .. "<div style=\"text-align: right\">" ..
            "<span class=\"navigation-not-searchable\">'''[[" ..
            contextLink .. "|" .. string.gsub(verse, "%s", "&nbsp;") ..
            "]]'''</span></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()
        if not wikiText then error("Invalid Verse Number: " .. verseSpec) end
         local function addVerseNumber(wikiText)
         local function addVerseNumber(wikiText)
            if verseNumber == 1 then
                return (string.gsub(wikiText, "^", "<big>'''" .. chapter .. "'''</big> "))
            end
             return (string.gsub(wikiText, "^", "<sup>'''" .. verseNumber .. "'''</sup> "))
             return (string.gsub(wikiText, "^", "<sup>'''" .. verseNumber .. "'''</sup> "))
         end
         end
         local process = {}
         local process = {}
         if not showPilcrow then table.insert(process, removePilcrow) end
         if not showPilcrow then table.insert(process, removePilcrow) end
         if showVerseNumber then table.insert(process, addVerseNumber) end
         if stopVerse then table.insert(process, addVerseNumber) end
         if #process > 0 then return compose(unpack(process))(wikiText) end
         if #process > 0 then return compose(unpack(process))(wikiText) end
         return wikiText
         return wikiText
Line 55: Line 67:
         local process = {}
         local process = {}
         if indent then table.insert(process, addIndent) end
         if indent then table.insert(process, addIndent) end
         if doubleSpace then
         table.insert(process, addDoubleSpace)
            table.insert(process, addDoubleSpace)
        elseif singleSpace then
            table.insert(process, addSingleSpace)
        end
         if #process > 0 then return compose(unpack(process))("") end
         if #process > 0 then return compose(unpack(process))("") end
         return " "
         return " "
     end
     end
     if stopVerse == nil then return renderVerse(verseSpec, startVerse) end
     local function renderQuote(verses)
     for i = startVerse, stopVerse, 1 do
        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))
         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
 
local function addChapterNumber(verse, number)
    return (string.gsub(verse, "^", ""))
end
end


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


return p
return p

Latest revision as of 20:24, 5 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 book .. "#" .. chapter .. "-" .. startVerse
    end
    local function blockquote(quote, verse, contextLink)
        return "<blockquote>" .. quote .. "<div style=\"text-align: right\">" ..
            "<span class=\"navigation-not-searchable\">'''[[" ..
            contextLink .. "|" .. string.gsub(verse, "%s", "&nbsp;") ..
            "]]'''</span></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