Editing Module:Data to Table
From The Petit Planet Wiki
More actions
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
| Latest revision | Your text | ||
| Line 14: | Line 14: | ||
-- Escape characters | -- Escape characters | ||
local function clean(txt) | local function clean(txt) | ||
return txt | return txt | ||
:gsub('\\', '\\\\') | :gsub('\\', '\\\\') | ||
:gsub('\'', '\\\'') | :gsub('\'', '\\\'') | ||
end | end | ||
| Line 148: | Line 26: | ||
local dataKeys = {} | local dataKeys = {} | ||
local rawKeys = {} | local rawKeys = {} | ||
-- Parse DPL data | -- Parse DPL data | ||
if frame.args.info then | if frame.args.info then | ||
if ne(frame.args.cleanTT) then | |||
frame.args.info = CleanTT(frame.args.info) | |||
end | |||
info = | info = lib.parseTemplateFormat( | ||
frame.args.info, | |||
';;', | |||
'$$$', | |||
'==' | |||
) | |||
else | else | ||
return '' | return '' | ||
end | end | ||
-- Parse keys | -- Parse keys | ||
| Line 237: | Line 47: | ||
dataKeys = p.ParseKeys(frame.args.keys) | dataKeys = p.ParseKeys(frame.args.keys) | ||
end | end | ||
-- Parse unquoted/raw keys | -- Parse unquoted/raw keys | ||
| Line 243: | Line 52: | ||
rawKeys = p.ParseKeys(frame.args.unquoted) | rawKeys = p.ParseKeys(frame.args.unquoted) | ||
end | end | ||
-- Block formatting | -- Block formatting | ||
| Line 249: | Line 57: | ||
block = true | block = true | ||
end | end | ||
local sortkey = frame.args.sortkey or 'page' | local sortkey = frame.args.sortkey or 'page' | ||
local subtable = frame.args.subtable | local subtable = frame.args.subtable | ||
-- Check whether a key should be output as raw Lua | -- Check whether a key should be output as raw Lua | ||
local function isUnquotedKey(key) | local function isUnquotedKey(key) | ||
for _, rawKey in ipairs(rawKeys) do | for _, rawKey in ipairs(rawKeys) do | ||
if rawKey == key then | if rawKey == key then | ||
return true | return true | ||
end | end | ||
end | end | ||
| Line 297: | Line 82: | ||
info, | info, | ||
function(tVal, a, b) | function(tVal, a, b) | ||
if sortkey == 'INPUT' then | if sortkey == 'INPUT' then | ||
return a < b | return a < b | ||
else | else | ||
return (tVal[a][sortkey] or '') < | return (tVal[a][sortkey] or '') < (tVal[b][sortkey] or '') | ||
end | end | ||
end | end | ||
) do | ) do | ||
if ne(entry.page) then | if ne(entry.page) then | ||
entry.page = clean(entry.page) | entry.page = clean(entry.page) | ||
-- No data keys: output page as a simple string | |||
if #dataKeys == 0 then | |||
-- Single-value mode: ['Page'] = 'value' | |||
if ne(frame.args.singlevalue) then | |||
local value = entry[frame.args.singlevalue] or '' | |||
result:wikitext( | |||
'\t[\'', | |||
entry.page, | |||
'\'] = \'', | |||
clean(value), | |||
'\',\n' | |||
) | |||
else | else | ||
result:wikitext( | |||
'\t\'', | |||
entry.page, | |||
'\',\n' | |||
) | |||
end | |||
else | else | ||
| Line 363: | Line 127: | ||
local valid = false | local valid = false | ||
local values = mw.html.create() | local values = mw.html.create() | ||
-- Entry name | -- Entry name | ||
| Line 371: | Line 134: | ||
'\'] = {' | '\'] = {' | ||
) | ) | ||
-- Build entry | -- Build entry | ||
local function parseLevels(K, level) | local function parseLevels(K, level) | ||
level = level or 1 | level = level or 1 | ||
| Line 393: | Line 154: | ||
) | ) | ||
) | ) | ||
elseif type(K) == 'table' then | elseif type(K) == 'table' then | ||
| Line 408: | Line 168: | ||
'},' | '},' | ||
) | ) | ||
end | end | ||
end | end | ||
parseLevels(dataKeys, 1) | parseLevels(dataKeys, 1) | ||
-- Return table if there is valid data | -- Return table if there is valid data | ||
if valid then | if valid then | ||
values:wikitext('\n') | values:wikitext('\n') | ||
result:node(values) | result:node(values) | ||
else | else | ||
result:wikitext( | result:wikitext( | ||
'\t\'', | '\t\'', | ||
| Line 429: | Line 183: | ||
'\',\n' | '\',\n' | ||
) | ) | ||
end | end | ||
end | end | ||
end | end | ||
end | end | ||
result:wikitext('}') | result:wikitext('}') | ||
-- | -- Wrap output in syntaxhighlight | ||
local luaText = tostring(result) | local luaText = tostring(result) | ||
-- Decode HTML entities introduced by mw.html | -- Decode HTML entities introduced by mw.html | ||
luaText = mw.text.decode(luaText) | luaText = mw.text.decode(luaText) | ||
local output = frame:extensionTag( | local output = frame:extensionTag( | ||
'syntaxhighlight', | 'syntaxhighlight', | ||
| Line 456: | Line 204: | ||
copy = '' | copy = '' | ||
} | } | ||
) | |||
-- | -- Copy button | ||
if frame.args.copy then | if frame.args.copy then | ||
output = require('Module:CopyText')._main({ | output = require('Module:CopyText')._main({ | ||
output, | output, | ||
| Line 471: | Line 214: | ||
'Copy Table' | 'Copy Table' | ||
}) | }) | ||
end | end | ||
return output | return output | ||
| Line 479: | Line 220: | ||
-- | -- Format data | ||
function p.BuildEntry(value, key, level, subtable, unquoted) | function p.BuildEntry(value, key, level, subtable, unquoted) | ||
level = level or 1 | level = level or 1 | ||
local container = mw.html.create() | local container = mw.html.create() | ||
-- Default missing values | -- Default missing values | ||
| Line 494: | Line 230: | ||
if key == 'number' then | if key == 'number' then | ||
value = '0' | value = '0' | ||
unquoted = true | unquoted = true | ||
else | else | ||
value = '' | value = '' | ||
unquoted = false | unquoted = false | ||
end | end | ||
end | end | ||
| Line 518: | Line 250: | ||
table.concat(value, '\', \'') .. | table.concat(value, '\', \'') .. | ||
' }' | ' }' | ||
elseif unquoted and value ~= '' then | elseif unquoted and value ~= '' then | ||
| Line 524: | Line 255: | ||
-- Raw Lua value | -- Raw Lua value | ||
value = clean(value) | value = clean(value) | ||
else | else | ||
| Line 554: | Line 284: | ||
first[level] = false | first[level] = false | ||
if level > 2 then | if level > 2 then | ||
first[2] = false | first[2] = false | ||
end | end | ||
if level > 1 then | if level > 1 then | ||
| Line 581: | Line 309: | ||
end | end | ||
return container | return container | ||
| Line 587: | Line 314: | ||
-- | -- Parse data keys into specified levels | ||
function p.ParseKeys(keys) | function p.ParseKeys(keys) | ||
keys = lib.split(keys, ';;') | keys = lib.split(keys, ';;') | ||