Documentation for this module may be created at Module:MarkdownToWikitext/doc
local p = {}
-- Utility: unescape common HTML entities
local function htmlUnescape(s)
s = s:gsub("\\u003C", "<")
s = s:gsub("\\u003E", ">")
s = s:gsub("<", "<")
s = s:gsub(">", ">")
s = s:gsub("&", "&")
s = s:gsub(""", '"')
s = s:gsub("'", "'")
return s
end
-- Utility: strip inline HTML tags (like iframe, br, strong, etc)
local function stripHTML(s)
-- Remove <iframe ...>...</iframe>
s = s:gsub("<iframe.-</iframe>", "")
-- Remove all remaining HTML tags
s = s:gsub("<.->", "")
return s
end
-- Main converter
function p.convertMarkdownToWikitext(markdown)
if not markdown then return "(No content)" end
-- Decode escapes
markdown = htmlUnescape(markdown)
markdown = markdown:gsub("\\n", "\n") -- convert escaped newlines
markdown = markdown:gsub("\\%-", "β") -- hyphen escape
markdown = markdown:gsub("\\!", "!") -- unescape exclamation
markdown = markdown:gsub("\\_", "_") -- keep underscores
markdown = markdown:gsub("\\+", "+") -- unescape pluses
markdown = markdown:gsub("\\*", "*") -- unescape asterisks
markdown = markdown:gsub("\\\\", "\\") -- backslashes
-- Strip inline HTML
markdown = stripHTML(markdown)
-- Headings
markdown = markdown:gsub("\n###### (.-)\n", "\n====== %1 ======\n")
markdown = markdown:gsub("\n##### (.-)\n", "\n===== %1 =====\n")
markdown = markdown:gsub("\n#### (.-)\n", "\n==== %1 ====\n")
markdown = markdown:gsub("\n### (.-)\n", "\n=== %1 ===\n")
markdown = markdown:gsub("\n## (.-)\n", "\n== %1 ==\n")
markdown = markdown:gsub("\n# (.-)\n", "\n= %1 =\n")
-- Bold/Italic
markdown = markdown:gsub("%*%*%*(.-)%*%*%*", "'''''%1'''''")
markdown = markdown:gsub("%*%*(.-)%*%*", "'''%1'''")
markdown = markdown:gsub("%*(.-)%*", "''%1''")
-- Lists (preserve nested indenting)
markdown = markdown:gsub("\n[ \t]*%- ", "\n* ")
-- Links: [text](url)
markdown = markdown:gsub("%[(.-)%]%((.-)%)", "[%2 %1]")
-- Clean up excess line breaks
markdown = markdown:gsub("\r", "")
markdown = markdown:gsub("\n\n\n+", "\n\n")
return markdown
end
-- Pull markdown from API via ExternalData
function p.renderFromAPI(frame)
local data = mw.ext.externalData.getData{
url = 'https://api.vaulthunters.gg/patch-notes?limit=1',
data = { markdown = 'text' }
}
local markdown = data[1] and data[1].markdown or '(No data)'
return p.convertMarkdownToWikitext(markdown)
end
return p