Module:Citation/BCB: Difference between revisions
NeonWabbit (talk | contribs) 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..." |
NeonWabbit (talk | contribs) 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 | -- 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 | ||
end | end | ||
-- | -- 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 | ||
end | end | ||
local | -- Retrieve chapter data | ||
local | local chapters = p.getChaptersList() | ||
local chapter_title = chapters[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 | ||
-- 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