Module:Citation/BCB: Difference between revisions

From Candypedia
Created page with "local p = {} local mw = require('mw') -- Function to fetch and parse chapter data from the `Template:ChapterList` function p.formatBCBReference(url) if not url or type(url) ~= 'string' then return nil -- Return nil if `url` is not valid end -- Check if the URL matches the expected pattern local chapter, page = url:match("^https://www%.bittersweetcandybowl%.com/c(%d+)/p(%d+)") if not chapter then chapter, page = url:match("^https://bc..."
 
No edit summary
 
(8 intermediate revisions by the same user not shown)
Line 2: Line 2:
local mw = require('mw')
local mw = require('mw')


-- Function to fetch and parse chapter data from the `Template:ChapterList`
-- Function to retrieve chapter list from `Template:ChapterList`
function p.formatBCBReference(url)
function p.getChaptersList()
    local listPage = mw.title.new('Template:ChapterList')
    if not listPage then
        return {}
    end
 
    local content = listPage:getContent()
    if not content then
        return {}
    end
 
    local chapters = {}
    -- Match raw `{{Chapter|number=...|title=...|date=...|pagecount=...}}` calls
    for number, title, date, pagecount in string.gmatch(content, "{{%s*Chapter%s*|%s*number%s*=%s*([%d%.]+)%s*|%s*title%s*=%s*([^|]+)%s*|%s*date%s*=%s*([^|]+)%s*|%s*pagecount%s*=%s*(%d+)%s*}}") do
        chapters[number] = title
    end
 
    return chapters
end
 
-- Function to format the BCB reference
function p.formatBCBReference(input)
    local url = input
 
    -- Handle if input is a table (e.g., frame object from a template call)
    if type(input) == 'table' then
        url = input.args and input.args[1] or nil
    end
 
     if not url or type(url) ~= 'string' then
     if not url or type(url) ~= 'string' then
         return nil -- Return nil if `url` is not valid
         return nil
     end
     end


     -- Check if the URL matches the expected pattern
     -- Match the URL pattern to extract chapter and page
     local chapter, page = url:match("^https://www%.bittersweetcandybowl%.com/c(%d+)/p(%d+)")
     local chapter, page = url:match("^https://www%.bittersweetcandybowl%.com/c([%d%.]+)/p(%d+)")
     if not chapter then
     if not chapter then
         chapter, page = url:match("^https://bcb%.cat/c(%d+)/p(%d+)")
         chapter, page = url:match("^https://bcb%.cat/c([%d%.]+)/p(%d+)")
     end
     end
     if not chapter or not page then
     if not chapter or not page then
         return nil -- Return nil if the URL does not match
         return nil
    end
 
    -- Retrieve the chapter data
    local title = mw.title.new('Template:ChapterList')
    if not title or not title.exists then
        return nil -- Return nil if the template does not exist
     end
     end


     local content = title:getContent()
    -- Retrieve chapter data
     local chapter_data = {}
     local chapters = p.getChaptersList()
    for number, chapterTitle in content:gmatch('{{Chapter|number=([^|]+)|title=([^|]+)|date=[^|]+|pagecount=%d+}}') do
     local chapter_title = chapters[chapter]
        chapter_data[number] = chapterTitle
    end


    local chapter_title = chapter_data[chapter]
     if chapter_title then
     if chapter_title then
         return string.format("Chapter %s: %s, page %s", chapter, chapter_title, page)
         -- Check if the chapter number contains a decimal (indicating an intermission)
        if string.match(chapter, "%d+%.%d+") then
            -- Format without "Chapter [number]:"
            return string.format("[https://www.bittersweetcandybowl.com/c%s/p%s %s, page %s]", chapter, page, chapter_title, page)
        else
            -- Format with "Chapter [number]:"
            return string.format("[https://www.bittersweetcandybowl.com/c%s/p%s Chapter %s: %s, page %s]", chapter, page, chapter, chapter_title, page)
        end
     end
     end


     return nil -- Return nil if no matching chapter is found
     -- Fallback if no matching chapter is found
    return string.format("[https://www.bittersweetcandybowl.com/c%s/p%s Chapter %s: [Unknown Title], page %s]", chapter, page, chapter, page)
end
end


return p
return p

Latest revision as of 06:18, 14 November 2024

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

local p = {}
local mw = require('mw')

-- Function to retrieve chapter list from `Template:ChapterList`
function p.getChaptersList()
    local listPage = mw.title.new('Template:ChapterList')
    if not listPage then
        return {}
    end

    local content = listPage:getContent()
    if not content then
        return {}
    end

    local chapters = {}
    -- Match raw `{{Chapter|number=...|title=...|date=...|pagecount=...}}` calls
    for number, title, date, pagecount in string.gmatch(content, "{{%s*Chapter%s*|%s*number%s*=%s*([%d%.]+)%s*|%s*title%s*=%s*([^|]+)%s*|%s*date%s*=%s*([^|]+)%s*|%s*pagecount%s*=%s*(%d+)%s*}}") do
        chapters[number] = title
    end

    return chapters
end

-- Function to format the BCB reference
function p.formatBCBReference(input)
    local url = input

    -- Handle if input is a table (e.g., frame object from a template call)
    if type(input) == 'table' then
        url = input.args and input.args[1] or nil
    end

    if not url or type(url) ~= 'string' then
        return nil
    end

    -- Match the URL pattern to extract chapter and page
    local chapter, page = url:match("^https://www%.bittersweetcandybowl%.com/c([%d%.]+)/p(%d+)")
    if not chapter then
        chapter, page = url:match("^https://bcb%.cat/c([%d%.]+)/p(%d+)")
    end
    if not chapter or not page then
        return nil
    end

    -- Retrieve chapter data
    local chapters = p.getChaptersList()
    local chapter_title = chapters[chapter]

    if chapter_title then
        -- Check if the chapter number contains a decimal (indicating an intermission)
        if string.match(chapter, "%d+%.%d+") then
            -- Format without "Chapter [number]:"
            return string.format("[https://www.bittersweetcandybowl.com/c%s/p%s %s, page %s]", chapter, page, chapter_title, page)
        else
            -- Format with "Chapter [number]:"
            return string.format("[https://www.bittersweetcandybowl.com/c%s/p%s Chapter %s: %s, page %s]", chapter, page, chapter, chapter_title, page)
        end
    end

    -- Fallback if no matching chapter is found
    return string.format("[https://www.bittersweetcandybowl.com/c%s/p%s Chapter %s: [Unknown Title], page %s]", chapter, page, chapter, page)
end

return p