模組:CDD

维基百科,自由的百科全书
文档图示 模块文档[查看] [编辑] [历史] [清除缓存]

本模組是為了要實現考克斯特計號英语Coxeter–Dynkin diagram顯示用的{{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 '&nbsp;') end
	for v, x in ipairs(args) do                                -- process params, ignoring any names
		pgname="." .. filetype
		cpgname=CDDtype
        lasts = "|link=]]"
        if (dSize > 1) then
        	lasts = "|x" .. dSize .. "px|link=]]"
        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