Module:Debug
local export = {}
local escape
do
local escapes = {
["\a"] = "a", ["\b"] = "b", ["\f"] = "f", ["\n"] = "n", ["\r"] = "r",
["\t"] = "t", ["\v"] = "v", ["\\"] = "\\", ["\""] = '"', ["'"] = "'",
}
local function helper(char)
return escapes[char] and "\\" .. escapes[char]
or ("\\%03d"):format(char:byte())
end
-- Escape control characters, backslash, double quote, and bytes that aren't
-- used in UTF-8.
-- Escape stuff that can't be saved in a MediaWiki page, like invalid UTF-8
-- and NFD character sequences? Hard.
-- Similar to string.format("%q", str), which does not use C-like simple
-- escapes and does not escape bytes that are not used in UTF-8.
escape = function (str)
return (str:gsub("[%z\1-\31\\\"\127\192\193\245-\255]", helper))
end
end
export.escape = escape
-- Convert a value to a string
function export.dump(value, prefix, tsort)
local t = type(value)
prefix = prefix or ""
if t == "string" then
return '"' .. escape(value) .. '"'
elseif t == "table" then
local str_table = {}
table.insert(str_table, " {")
for key, val in require("Module:table").sortedPairs(value, tsort) do
table.insert(str_table, " " .. prefix .. "\t[" .. export.dump(key, prefix .. "\t") .. "] = " .. export.dump(val, prefix .. "\t"):gsub("^ ", "") .. ",")
end
table.insert(str_table, " " .. prefix .. "}")
return table.concat(str_table, "\n")
else
return tostring(value)
end
end
function export.highlight_dump(value, prefix, tsort, options)
options = options or {}
local func = options.modified and "modified_dump" or "dump"
local dump = export[func](value, prefix, tsort)
-- Remove spaces at beginnings of lines (which are simply to force a <pre></pre> tag).
dump = dump:gsub("^ ", "")
dump = dump:gsub("\n ", "\n")
return export.highlight(dump)
end
-- Returns true if table contains a table as one of its values
local function containsTable(t)
for key, value in pairs(t) do
if type(value) == "table" then
return true
end
end
return false
end
local function containsTablesWithSize(t, size)
for key, value in pairs(t) do
if type(value) == "table" and require("Module:table").size(value) ~= size then
return false
end
end
return true
end
--[=[
Convert a value to a string.
Like dump below, but if a table has consecutive numbered keys and does not
have a table as one of its values, it will be placed on a single line.
Used by [[Module:User:Erutuon/script recognition]].
]=]
function export.modified_dump(value, prefix, tsort)
local t = type(value)
prefix = prefix or ""
if t == "string" then
return '"' .. value .. '"'
elseif t == "table" then
local str_table = {}
local containsTable = containsTable(value)
local consecutive = require("Module:table").isArray(value)
if consecutive and not containsTable or containsTable and containsTablesWithSize(value, 3) then
table.insert(str_table, "{")
for key, val in require("Module:table").sortedPairs(value, tsort) do
if containsTable then
table.insert(str_table, "\n\t" .. prefix)
else
table.insert(str_table, " ")
end
if type(key) == "string" then
table.insert(str_table, "[" .. export.modified_dump(key) .. "] = ")
end
table.insert(str_table, type(key) == "number" and type(val) == "number" and string.format("0x%05X", val) or export.modified_dump(val))
if not (consecutive and #value == 3) or type(key) == "number" and value[key + 1] then
table.insert(str_table, ",")
end
end
if containsTable then
table.insert(str_table, "\n" .. prefix)
else
table.insert(str_table, " ")
end
table.insert(str_table, "}")
return table.concat(str_table)
end
table.insert(str_table, " {")
for key, val in require("Module:table").sortedPairs(value, tsort) do
table.insert(str_table, " " .. prefix .. "\t[" .. export.modified_dump(key, prefix .. "\t") .. "] = " .. export.modified_dump(val, prefix .. "\t"):gsub("^ ", "") .. ",")
end
table.insert(str_table, " " .. prefix .. "}")
return table.concat(str_table, "\n")
elseif t == "number" and value > 46 then
return string.format("0x%05X", value)
else
return tostring(value)
end
end
function export.track(key)
local frame = mw.getCurrentFrame()
if key then
if type(key) ~= "table" then
key = { key }
end
for i, value in pairs(key) do
pcall(frame.expandTemplate, frame, { title = 'tracking/' .. value })
end
else
error('No tracking key supplied to the function "' .. track .. '".')
end
end
-- Trigger a script error from a template
function export.error(frame)
error(frame.args[1] or "(no message specified)")
end
--[[
Convenience function for generating syntaxhighlight tags.
Display defaults to block.
Options is a table. To display inline text with HTML highlighting:
{ inline = true, lang = "html" }
]]
function export.highlight(content, options)
if type(content) == "table" then
options = content
options = {
lang = options.lang or "lua",
inline = options.inline and true
}
return function(content)
return mw.getCurrentFrame():extensionTag{
name = "syntaxhighlight",
content = content,
args = options
}
end
else
return mw.getCurrentFrame():extensionTag{
name = "syntaxhighlight",
content = content,
args = {
lang = options and options.lang or "lua",
inline = options and options.inline and true or nil
}
}
end
end
function export.track_unrecognized_args(args, template_name)
local function track(code)
export.track(template_name .. "/" .. code)
end
track("unrecognized arg")
local arg_list = {}
for arg, value in pairs(args) do
track("unrecognized arg/" .. arg)
table.insert(arg_list, ("|%s=%s"):format(arg, value))
end
mw.log(
("Unrecognized parameter%s in {{%s}}: %s."):format(
arg_list[2] and "s" or "",
template_name,
table.concat(arg_list, ", ")))
end
return export
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.