模組:CDD
外观
本模組是為了要實現考克斯特計號顯示用的{{CDD}}模板,即Template:CDD的顯示所建立的。原始版本之支援最多50個記號,現在則可以引用超過50個記號。
使用方法:
{{#invoke:CDD|CDD}}
though the parameter is ignored; instead it uses the parameters passed to the template. See the template documentation for how that is used.
For using this from other Lua modules, first load the module.
local CDD = require('Module:CDD')._CDD
You can then use it with the following syntax.
CDD{"node", "3", "node"}
See the template documentation for possible inputs.
-- module to turn a parameter list into a list of [[Coxeter–Dynkin diagram]] images.
-- See the template documentation or any example for how it is used and works.
local p = {}
local origArgs
local lib_arg={}
function p.CDD(frame)
-- For calling from #invoke.
if frame == mw.getCurrentFrame() then
if lib_arg.getArgs == nil then lib_arg = require('Module:Arguments') end
origArgs = lib_arg.getArgs(frame, {parentFirst=true}) --frame
else
origArgs = frame
end
local pframe = frame:getParent()
local args = pframe.args
if (origArgs['FileType'] and origArgs['FileType'] ~= '') then
filet=origArgs['FileType']
else
filet="png"
end
if (origArgs['CDDtype'] and origArgs['CDDtype'] ~= '') then
cddt=origArgs['CDDtype'] .. (origArgs['delimiter'] or "_")
else
cddt="CDel_"
end
if (origArgs['Size'] and origArgs['Size'] ~= '') then
if (origArgs['Size'] ~= '') then
cddSize=tonumber(origArgs['Size'])
else
cddSize=0
end
else
cddSize=0
end
return p._CDD_(args,filet,cddt,cddSize,origArgs['css_class'])
end
function p._CDD(args)
return p._CDD_(args,"png","CDel_",0)
end
function p._CDD_(args,ft,ct,dSize,css_class)
-- For calling from other Lua modules.
local body ='<span '.. ((css_class~=nil) and ('class="' .. css_class ..'"') or '')
..' style="display:inline-block;'..(args.style or '')..'">' -- create and start the output string
local filetype = ft
local CDDtype = ct
local alt_name = function(name, tail)return mw.ustring.format("|alt=%s%s", name ,tail and '' or ' ') end
for v, x in ipairs(args) do -- process params, ignoring any names
pgname="." .. filetype
cpgname=CDDtype
lasts = "|link=|class=skin-invert]]"
if (dSize > 1) then
lasts = "|x" .. dSize .. "px|link=|class=skin-invert]]"
end
if (x ~= '') then -- check for null/empty names
d = tonumber(x)
if (d ~= nil) then --is a number
if (d > 20) then --多位數字拆開來
local xlen = string.len(x)
for i = 1,xlen do
tmpstr = string.sub(x,i,i)
if ((tonumber(tmpstr) or 10) > 3) then
body = body .. "[[File:".. cpgname .. string.sub(x,i,i) .. pgname
.. alt_name(string.sub(x,i,i), i~=xlen) .. lasts
else
body = body .. "[[File:".. cpgname .. string.sub(x,i,i) .. "x" .. pgname
.. alt_name(string.sub(x,i,i), i~=xlen) .. lasts
end
end
else --單位數字直接顯示
body = body .. "[[File:".. cpgname .. x .. pgname .. alt_name(x) .. lasts
end
elseif mw.text.trim(x) == '' then --一串空白
for i = 1,string.len(x) do
body = body .. "[[File:CDel_2.png|alt=" .. lasts
end
else --一般字串
body = body .. "[[File:".. cpgname .. x .. pgname .. alt_name(x) .. lasts
end
end
end
body = body .. "</span>" -- finish output string
return body -- return result
end
return p