Module:Citation/BCB: Difference between revisions

From Candypedia
No edit summary
No edit summary
Line 6: Line 6:
     local listPage = mw.title.new('Template:ChapterList')
     local listPage = mw.title.new('Template:ChapterList')
     if not listPage then
     if not listPage then
         mw.log('Template:ChapterList not found') -- Log if template is not found
         mw.log('Template:ChapterList not found')
         return {}
         return {}
     end
     end
Line 12: Line 12:
     local content = listPage:getContent()
     local content = listPage:getContent()
     if not content then
     if not content then
         mw.log('Failed to get content from Template:ChapterList') -- Log if content retrieval fails
         mw.log('Failed to get content from Template:ChapterList')
         return {}
         return {}
     end
     end
Line 19: Line 19:
     -- Match raw `{{Chapter|number=...|title=...|date=...|pagecount=...}}` calls
     -- 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
     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 -- Store chapter title with number as the key
         chapters[number] = title
     end
     end


     mw.log('Chapters list parsed: ' .. mw.dumpObject(chapters)) -- Log the parsed chapters list
     mw.log('Chapters list parsed: ' .. mw.dumpObject(chapters))
     return chapters
     return chapters
end
end
Line 36: Line 36:
     end
     end


    -- Safely log the received URL
     mw.log('Received URL: ' .. (url or 'nil'))
     mw.log('Received URL: ' .. (url or 'nil'))


     if not url or type(url) ~= 'string' then
     if not url or type(url) ~= 'string' then
         mw.log('Invalid or missing URL') -- Log if URL is not valid
         mw.log('Invalid or missing URL')
         return nil -- Return nil if `url` is not valid
         return nil
     end
     end


Line 50: Line 49:
     end
     end
     if not chapter or not page then
     if not chapter or not page then
         mw.log('URL did not match expected pattern') -- Log if URL doesn't match
         mw.log('URL did not match expected pattern')
         return nil -- Return nil if the URL does not match
         return nil
     end
     end


Line 61: Line 60:


     if chapter_title then
     if chapter_title then
         local result = string.format("Chapter %s: %s, page %s", chapter, chapter_title, page)
         local result = string.format("[https://www.bittersweetcandybowl.com/c%s/p%s Chapter %s: %s, page %s]", chapter, page, chapter, chapter_title, page)
         mw.log('Generated Result: ' .. result)
         mw.log('Generated Result: ' .. result)
         return result
         return result
Line 67: Line 66:


     mw.log('No matching chapter found for Chapter: ' .. chapter)
     mw.log('No matching chapter found for Chapter: ' .. chapter)
     return string.format("Chapter %s: [Unknown Title], page %s", chapter, page) -- Fallback output
     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

Revision as of 15:29, 12 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
        mw.log('Template:ChapterList not found')
        return {}
    end

    local content = listPage:getContent()
    if not content then
        mw.log('Failed to get content from Template:ChapterList')
        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

    mw.log('Chapters list parsed: ' .. mw.dumpObject(chapters))
    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
        mw.log('Input is a table, extracting URL from args')
        url = input.args and input.args[1] or nil
    end

    mw.log('Received URL: ' .. (url or 'nil'))

    if not url or type(url) ~= 'string' then
        mw.log('Invalid or missing URL')
        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
        mw.log('URL did not match expected pattern')
        return nil
    end

    mw.log('Matched Chapter: ' .. chapter .. ', Page: ' .. page)

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

    if chapter_title then
        local result = string.format("[https://www.bittersweetcandybowl.com/c%s/p%s Chapter %s: %s, page %s]", chapter, page, chapter, chapter_title, page)
        mw.log('Generated Result: ' .. result)
        return result
    end

    mw.log('No matching chapter found for Chapter: ' .. chapter)
    return string.format("[https://www.bittersweetcandybowl.com/c%s/p%s Chapter %s: [Unknown Title], page %s]", chapter, page, chapter, page)
end

return p