Module:HighlightWikicode
From Soyjak Wiki, the free ensoyclopedia
Jump to navigationJump to search
| This module is rated as deprecated and should no longer be used. |
local p = {}
local colors = {
heading = "#0077aa",
bold = "#000000",
italic = "#000000",
link = "#0645ad",
template = "#dd1144",
parameter = "#aa7700",
tag = "#008800",
comment = "#888888",
variable = "#bb00bb",
table = "#cc6600",
list = "#0077aa"
}
local function escapeHTML(t)
return t:gsub("&", "&"):gsub("<", "<"):gsub(">", ">")
end
function p.highlight(frame)
local code = frame.args[1] or ""
code = escapeHTML(code)
local spans = {}
local function mark(html)
table.insert(spans, html)
return "\x00SPAN" .. #spans .. "\x00"
end
-- HTML comments
code = code:gsub("(<!%-%-.-%-%-%gt;)", function(c)
return mark('<span style="color:'..colors.comment..';">'..c..'</span>')
end)
-- HTML/MediaWiki tags
code = code:gsub("(</?[%a][%w:]*.->)", function(c)
return mark('<span style="color:'..colors.tag..';">'..c..'</span>')
end)
-- Headings
code = code:gsub("(==+.-==+)", function(c)
return mark('<span style="color:'..colors.heading..'; font-weight:bold;">'..c..'</span>')
end)
-- Templates and parser functions
code = code:gsub("({{.-}})", function(c)
-- Highlight parameters inside templates
local highlighted = c:gsub("(%|[%s]*[%w_]+[%s]*=)", function(p)
return mark('<span style="color:'..colors.parameter..';">'..p..'</span>')
end)
return mark('<span style="color:'..colors.template..'; font-weight:bold;">'..highlighted..'</span>')
end)
-- Variables (magic words)
code = code:gsub("({{{{.-}}}})", function(c)
return mark('<span style="color:'..colors.variable..'; font-weight:bold;">'..c..'</span>')
end)
-- Internal links
code = code:gsub("(%[%[.-%]%])", function(c)
return mark('<span style="color:'..colors.link..'; font-weight:bold;">'..c..'</span>')
end)
-- External links
code = code:gsub("(%[http.-%])", function(c)
return mark('<span style="color:'..colors.link..';">'..c..'</span>')
end)
-- Table syntax
code = code:gsub("({%|.-%|})", function(c)
return mark('<span style="color:'..colors.table..';">'..c..'</span>')
end)
code = code:gsub("^(%|%-)", function(c)
return mark('<span style="color:'..colors.table..';">'..c..'</span>')
end)
code = code:gsub("(\n%|%-)", function(c)
return "\n" .. mark('<span style="color:'..colors.table..';">'..c:sub(2)..'</span>')
end)
code = code:gsub("^(%|)", function(c)
return mark('<span style="color:'..colors.table..';">'..c..'</span>')
end)
code = code:gsub("(\n%|)", function(c)
return "\n" .. mark('<span style="color:'..colors.table..';">'..c:sub(2)..'</span>')
end)
code = code:gsub("^(!)", function(c)
return mark('<span style="color:'..colors.table..'; font-weight:bold;">'..c..'</span>')
end)
code = code:gsub("(\n!)", function(c)
return "\n" .. mark('<span style="color:'..colors.table..'; font-weight:bold;">'..c:sub(2)..'</span>')
end)
-- Lists
code = code:gsub("^([*#:;]+)", function(c)
return mark('<span style="color:'..colors.list..'; font-weight:bold;">'..c..'</span>')
end)
code = code:gsub("(\n[*#:;]+)", function(c)
return "\n" .. mark('<span style="color:'..colors.list..'; font-weight:bold;">'..c:sub(2)..'</span>')
end)
-- Bold text (after other patterns to avoid conflicts)
code = code:gsub("('''.-''')", function(c)
return mark('<span style="font-weight:bold;">'..c..'</span>')
end)
-- Italic text
code = code:gsub("(''.-'')", function(c)
return mark('<span style="font-style:italic;">'..c..'</span>')
end)
-- Replace placeholders
code = code:gsub("\x00SPAN(%d+)\x00", function(i) return spans[tonumber(i)] or "" end)
return '<pre style="background:#f8f8f8; padding:0.5em; border:1px solid #ddd; overflow-x:auto; white-space:pre-wrap;">'
.. code ..
'</pre>'
end
return p