Module:BibleQuote2: Difference between revisions

From BibleVerseWiki
No edit summary
No edit summary
 
Line 28: Line 28:
     end
     end
     return book, chapter, startVerse, stopVerse
     return book, chapter, startVerse, stopVerse
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
end


Line 85: Line 74:
     end
     end
     return table.concat(verses, renderConcat())
     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
end


Line 94: Line 94:
     end
     end
     return renderQuote(renderVerses(verses, indent), verseSpec, book, chapter, startVerse)
     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.main(frame)
function p.main(frame)
     local args = getArgs(frame)
     local args = getArgs(frame)
    local stringToBoolean = { ["true"] = true, ["false"] = false }
     return renderVerseSpec(
     return renderVerseSpec(
         args[1]
         args[1]
         , stringToBoolean[args.showPilcrow]
         , convertStringToBoolean(args.showPilcrow)
         , stringToBoolean[args.indent]
         , convertStringToBoolean(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