Module:Gadgets/sandbox explained

local p =

p.parse = function local text = mw.title.new('MediaWiki:Gadgets-definition'):getContent local lines = mw.text.split(text, '\n', false) local repo = for _, line in ipairs(lines) do if line:sub(1, 1)

'*' then local name, options, pages = p.parse_line(line) if name and #pages ~= 0 then repo[name] = end end end return repoend

p.parse_line = function(def) local pattern = "^%*%s*(.+)%s*(%b[])%s*(.-)$" local name, opts, pageList = string.match(def, pattern) name = mw.text.trim(name)

-- Process options string into a Lua table local options = if opts then -- Extracting the options without square brackets and trimming spaces opts = opts:sub(2, -2):gsub("%s+", "") for pair in opts:gmatch("%s*([^|]+)%s*|?") do local key, value = pair:match("%s*([^=]+)%s*=%s*([^=|]+)%s*") if key and value then options[key:match("%s*(.-)%s*$")] = value:match("^%s*(.-)%s*$") else key = pair:match("%s*(.-)%s*$") options[key] = true end end end

-- Process page list into an array local pages = if pageList then for page in pageList:gmatch("[^|]+") do table.insert(pages, mw.text.trim(page)) end end return name, options, pagesend

p.get_type = function(def) if def.options.type

'general' or def.options.type

'styles' then return def.options.type end if def.options.dependencies ~= nil then return 'general' end for _, page in ipairs(def.pages) do if not string.match(page, '%.css$') then return 'general' end end return 'styles'end

p.get_usage = function(name) -- escape name for use in pattern name = name:gsub("[%-%.%+%[%]%(%)%$%^%%%?%*]", "%%%1"):gsub("_", " ")

-- rely on until is implemented local _, _, count = mw.title.new('Wikipedia:GUS2Wiki'):getContent:find('\n'..name..',(%S+)\n') return tonumber(count) or -1end

return p