Module:BibleQuote: Difference between revisions

From BibleVerseWiki
No edit summary
No edit summary
Line 1: Line 1:
local p = {} --p stands for package
local p = {} --p stands for package
local getArgs = require('Module:Arguments').getArgs


local function removePilcrow(verse)  
local function removePilcrow(verse)
     return (string.gsub(verse, "¶%W-", ""))
     return (string.gsub(verse, "¶.+", ""))
end
end


local function expandTemplate(title, ...)
local function expandTemplate(title, ...)
     return mw.getCurrentFrame():expandTemplate{title = title};
     return mw.getCurrentFrame():expandTemplate { title = title };
end
end


local function compose(...)  
local function compose(...)
     chain = {...}
     local chain = { ... }
     local function recurse(i, ...)
     local function recurse(i, ...)
      if i == #chain then return chain[i](...) end
        if i == #chain then return chain[i](...) end
      return recurse(i + 1, chain[i](...))
        return recurse(i + 1, chain[i](...))
     end
     end
     return function(...) return recurse(1, ...) end
     return function(...) return recurse(1, ...) end
Line 20: Line 19:


local function renderVerses(verseSpec, showVerseNumber, showPilcrow)
local function renderVerses(verseSpec, showVerseNumber, showPilcrow)
     local _, _, book, chapter, startVerse, stopVerse =  
     local _, _, book, chapter, startVerse, stopVerse =
         string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)-(%d+)")
         string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)-(%d+)")
     local verses = {}
     local verses = {}
Line 26: Line 25:
         local verse = expandTemplate(verseName)
         local verse = expandTemplate(verseName)
         local function addVerseNumber(verse)
         local function addVerseNumber(verse)
             return (string.gsub(verse, "^", "<sup>"..verseNumber.."</sup>"))
             return (string.gsub(verse, "^", "<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 showVerseNumber then table.insert(process, addVerseNumber) end
         if #process > 0 then return compose(unpack(process))(verse) end
         if #process > 0 then return compose(unpack(process))(verse) end
         return verse      
         return verse
     end
     end
     if stopVerse == nil then return renderVerse(verseSpec, startVerse) end  
     if stopVerse == nil then return renderVerse(verseSpec, startVerse) end
     for i = startVerse, stopVerse, 1 do
     for i = startVerse, stopVerse, 1 do
         table.insert(verses, renderVerse(book.." "..chapter..":"..i, i))      
         table.insert(verses, renderVerse(book .. " " .. chapter .. ":" .. i, i))
     end
     end
     return table.concat(verses, " ")  
     return table.concat(verses, " ")
end
end


local function addChapterNumber(verse, number)
local function addChapterNumber(verse, number)
Line 47: Line 44:
end
end


function p.standard(frame)      
function p.standard(frame)
     local args = getArgs(frame)
     local stringToBoolean = { ["true"] = true, ["false"] = false }
    stringtoboolean={ ["true"]=true, ["false"]=false }
     return renderVerses(
    if stringtoboolean[args.showVerseNumber] then return "true" else return "false" end
        frame.args[1]
     --return renderVerses(  
        , stringToBoolean[frame.args.showVerseNumber]
      --args[1]
        , stringToBoolean[frame.args.showPilcrow]
    --, args.showVerseNumber
     )
    --, args.showPilcrow
     --)      
end
end


return p
return p

Revision as of 05:56, 9 December 2023

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

local p = {} --p stands for package

local function removePilcrow(verse)
    return (string.gsub(verse, "¶.+", ""))
end

local function expandTemplate(title, ...)
    return mw.getCurrentFrame():expandTemplate { title = title };
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)
    local _, _, book, chapter, startVerse, stopVerse =
        string.find(verseSpec, "%s-(.+)%s+(%d+):(%d+)-(%d+)")
    local verses = {}
    local function renderVerse(verseName, verseNumber)
        local verse = expandTemplate(verseName)
        local function addVerseNumber(verse)
            return (string.gsub(verse, "^", "<sup>" .. verseNumber .. "</sup> "))
        end
        local process = {}
        if not showPilcrow then table.insert(process, removePilcrow) end
        if showVerseNumber then table.insert(process, addVerseNumber) end
        if #process > 0 then return compose(unpack(process))(verse) end
        return verse
    end
    if stopVerse == nil then return renderVerse(verseSpec, startVerse) end
    for i = startVerse, stopVerse, 1 do
        table.insert(verses, renderVerse(book .. " " .. chapter .. ":" .. i, i))
    end
    return table.concat(verses, " ")
end

local function addChapterNumber(verse, number)
    return (string.gsub(verse, "^", ""))
end

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

return p