Changes

no edit summary
Line 234: Line 234:  
         end
 
         end
 
     end
 
     end
 +
end
 +
 +
function Utils.format(s, lookup)
 +
if not lookup then
 +
lookup = s
 +
s = lookup[1]
 +
table.remove(lookup, 1)
 +
end
 +
return (string.gsub(s, '${([^%.%!%:%}%[%]]+)%[?([^%.%!%:%}%]]*)%]?%.?([^%!%:%}]*)!?([^%:%}]?):?([^%}]*)}',
 +
function(name, element, attribute, conversion, format_spec)
 +
--local start_of_value, end_of_value, value = string.find(x, '^${(.-)[[.!:}]')
 +
--local start_of_access, end_of_access, access = string.find(x, '^${.-%[(.-)%][!:}]')
 +
--if not access then
 +
-- start_of_access, end_of_access, access = string.find(x, '^${[^:]-%.(.-)[!:}]')
 +
--end
 +
--local start_of_conversion, end_of_conversion, conversion = string.find(x, '^${.-!(.)[:}]')
 +
--local start_of_format_spec, end_of_format_spec, format_spec = string.find(x, ':(.*)}$')
 +
 +
local value = lookup[name]
 +
if string.len(element) > 0 then
 +
value = value[element]
 +
elseif string.len(attribute) > 0 then
 +
value = value[attribute]
 +
end
 +
 +
if string.len(conversion) > 0 then
 +
if conversion == 's' then
 +
value = tostring(value)
 +
end
 +
end
 +
 +
if string.len(format_spec) > 0 then
 +
local start_of_sign, end_of_sign, sign = string.find(format_spec, '([+%- ])')
 +
local start_of_width, end_of_width, width, comma, precision, option = string.find(format_spec, '(%d*)(,?)([.0-9]*)([bcdeEfFgGnosxX%%]?)$')
 +
precision = string.sub(precision, 2)
 +
local number = tonumber(value)
 +
if #width > 0 then
 +
if number then
 +
value = string.format(string.format(number % 1 ~= 0 and "%%0%s.%sf" or "%%0%sd", width, #precision > 0 and precision or 0), number)
 +
end
 +
value = string.format(string.format("%%0%ss", width), value)
 +
elseif #precision > 0 and number then
 +
value = string.format(string.format("%%0%s.%sf", width, precision), number)
 +
end
 +
if sign then
 +
if number and number > 0 then
 +
if sign == "+" then
 +
value = "+" .. value
 +
elseif sign == " " then
 +
value = " " .. value
 +
end
 +
end
 +
end
 +
end
 +
 +
return value
 +
end))
 +
end
 +
 +
function Utils.split(string, separator, max_split, plain)
 +
assert(separator ~= '')
 +
assert(max_split == nil or max_split >= 1)
 +
 +
local default_separator = false
 +
 +
local result = {}
 +
 +
if not separator or separator == '' then
 +
separator = '%s+'
 +
plain = false
 +
string = mw.text.trim(string)
 +
if string == '' then
 +
return result
 +
end
 +
end
 +
 +
max_split = max_split or -1
 +
 +
local item_index, start_index = 1, 1
 +
local separator_start, separator_end = mw.ustring.find(string, separator, start_index, plain)
 +
while separator_start and max_split ~= 0 do
 +
result[item_index] = mw.ustring.sub(string, start_index, separator_start - 1)
 +
item_index = item_index + 1
 +
start_index = separator_end + 1
 +
separator_start, separator_end = mw.ustring.find(string, separator, start_index, plain)
 +
max_split = max_split - 1
 +
end
 +
result[item_index] = mw.ustring.sub(string, start_index)
 +
 +
return result
 
end
 
end
    
return Utils
 
return Utils
cssedit, gkautomate
6,926

edits