Module:Wikitext

From Monoskop
Jump to navigation Jump to search

--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