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