Module:Wikitext

--require "mw.text" --require "string" --require "table"

local z = { mw = require "Module:mw" }

-- This splits a string of name="value" pairs into a table. -- The common use of this is to parse a single template argument that specifies HTML element attributes all in one lump. function z.SplitHTMLElementParams(s) local params = {} for name,value in string.gmatch(s, "([%w_]+)=\"([^\"]*)\"%s*") do       params[name] = value    end    return params end

-- This returns a string quoted using quotation marks, using HTML character entities for embedded quotation marks and ampersands. function z.quote(t) local chars = {} for i=1,#t do       local char = t:sub(i,i) local byte = char:byte if ( byte == 34 or byte == 38 ) then table.insert(chars, "&#" .. tostring(byte) .. ";") else table.insert(chars, char) end end return "\"" .. table.concat(chars) .. "\"" end

function z.CombineHTMLElementParams(params) local attrs = {} for n,v in pairs(params) do       table.insert(attrs, n .. "=" .. z.quote(v)) end return table.concat(attrs, " ") end

function RawOpenHTMLTag(name,params) local attr = z.CombineHTMLElementParams(params) return "<" .. name .. " " .. attr .. ">" end

function z.OpenHTMLTag(t) local name = t.name or "!-- --" if ( "nowiki" == name or "ref" == name or "pre" == name or "gallery" == name or "poem" == name or "references" == name ) then error(name .. ": OpenHTMLtag is for non-extension tags only.") end return RawOpenHTMLTag(name,t.params) end

-- This returns the canonical form of an editor-supplied time, for use in cleanup category names. function z.canonicalcleanuptime(t) return t -- FIXME: This isn't right. end

-- This returns a list formatted into a (intended to be human-readable) comma-separated form. function z.oxfordlist(args,separator,ampersand) local text = "" separator = separator or "," ampersand = ampersand or "and" for index,arg in ipairs(args) do       if (index < 2) then -- Add nothing before the first item. elseif (args[index + 1] ~= nil) then text = text .. separator .. " "        elseif (index > 2) then text = text .. separator .. " " .. ampersand .. " "       else text = text .. " " .. ampersand .. " "       end text = text .. arg end return text end

-- These return various CSS strings. function z.columncountstyle(n) return "-moz-column-count:" .. n .. "; -webkit-column-count:" .. n .. "; column-count:" .. n .. ";" end function z.columnwidthstyle(n) return "-moz-column-width:" .. n .. "; -webkit-column-width:" .. n .. "; column-width:" .. n .. ";" end function z.liststyle(n) return "list-style-type:" .. n .. ";" end

return z