|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ ジュール : [じゅーる] 【名詞】 1. joule 2. (n) joule ・ ー : [ちょうおん] (n) long vowel mark (usually only used in katakana)
local p= function pick(a,n) return a end function loadColorSet(page) if not(page) then page="" end if mw.ustring.sub(page,1,7) ~= "Module:" then page="Module:Plotter/DefaultColors" end local ct=mw.loadData(page) if not ct then ct=mw.loadData("Module:Plotter/DefaultColors") end local x=0 local color= local name= repeat x=x+1 local n=ct local c=ct if not (n and c) then break end table.insert(color,c) table.insert(name,n) until false return color, name end function piechartslice(color,percent,radius,link) radius=radius or 100 local quadrant=math.floor(percent/25) local sin=math.floor(radius *math.sin(percent *math.pi/50)) local cos=math.floor(radius *math.cos(percent *math.pi/50)) local tan25=math.floor(-1 *radius *math.cos(percent *math.pi/50)/math.sin(percent *math.pi/50)) local output,lr,lrv,tv,bw1,bw2,bw3,bw4,bd,lrB,bw2B local a= -- throwaway array to make value matrix more apparent -- quadrant 1 is upper left, quadrant 2 is lower left lr=pick(,quadrant) lrv=pick(,quadrant) tv=pick(,quadrant) -- border width:bw1 (top) bw2 (right) bw3 (bottom) bw4 (left) bw1=pick(,quadrant) bw2=pick(,quadrant) bw3=pick(,quadrant) bw4=pick(,quadrant) bd=pick(,quadrant) lrB=pick(,quadrant) -- right border for second div (the bottom border is radius and others are zero) bw2B=pick(,quadrant) local output='' if quadrant==1 or quadrant==2 or quadrant==3 then output=output..'' if quadrant==3 then output=output.. '' end end return output end function p.piechart(frame) local parent=frame.getParent(frame) or local color=loadColorSet(frame.args.colorset or parent.args.colorset) or local value= local label= local link= local slicecount=0 local thumb,nowiki,radius if parent.args then thumb=parent.args.thumb nowik=parent.args.nowiki radius=parent.args.radius end thumb=frame.args.thumb or thumb nowiki=frame.args.nowiki or nowiki radius=frame.args.radius or radius or 100 radius=tonumber(radius) if radius<1 then radius=100 end if not(thumb) then thumb="right" end if not(mw.ustring.match(thumb,"%S")) then thumb="right" end for i,j in pairs(parent.args or ) do -- I should look up if there's a way to union parent.args AND frame.args local k=tonumber(mw.ustring.match(i,"color(%d *)")) if k then color=j else k=tonumber(mw.ustring.match(i,"value(%d *)")) if k then value=tonumber(j) if k>slicecount then slicecount=k end -- not using #value to avoid randomness if some values are left out else k=tonumber(mw.ustring.match(i,"label(%d *)")) if k then label=j end end end end --- innermost absolute div around circle, then a second thumbcaption div around legend. Note (/div)(div) at core between circle and legend. The rest are accreted around this center. output=' ' for i,j in pairs(frame.args or ) do -- supersede parent.args values local k=tonumber(mw.ustring.match(i,"color(%d *)")) if k then color=j or "" else k=tonumber(mw.ustring.match(i,"value(%d *)")) if k then value=tonumber(j) if k>slicecount then slicecount=k end -- not using #value to avoid randomness if some values are left out else k=tonumber(mw.ustring.match(i,"label(%d *)")) if k then label=j or "" else k=tonumber(mw.ustring.match(i,"link(%d *)")) if k then link=j or "" end end end end end local valuesum=0 -- sum of all slices local imgmap="" -- beginning of a polygon specification for for slice=1,slicecount do if value then if link then -- center of the circle, NOTE coords are relative to 600 px image before scaling NOT the radius imgmap=imgmap.."poly 300 300" for x=valuesum,valuesum+value do local sin=math.floor(300 *math.sin(x *math.pi/50)) local cos=math.floor(300 *math.cos(x *math.pi/50)) imgmap=imgmap.." "..300+cos.." "..300-sin end imgmap=imgmap.." .."" TITLE=""..link.."">"..link.."\n" end valuesum=valuesum+value output=piechartslice(color,valuesum,radius)..output.."" end end --- imagemap has its own absolute div to position with a separate transparent image imgmap=' \n '*radius..'px\n'..imgmap..'desc none\n if #link==0 then imgmap="" end -- make sure imgmap is blank if no links --- outer thumb tleft/tright is float/clear left or right --- thumbinner encapsulates the graph --- third relative div container ends in the middle of ..output.. --- next third div style "thumbcaption" begins in ..output.. --- all three end at end output=' output=mw.ustring.gsub(output," if nowiki then return frame.preprocess(frame," ") else return frame.preprocess(frame,output) end end function p.main(frame) local args=frame.args local parent=frame.getParent(frame) local pargs=parent.args or local icon=args.icon or pargs.icon local iconradius=args.iconradius or pargs.iconradius or 10 local lineicon=args.lineicon or pargs.lineicon or "•" local lineiconradius=args.lineiconradius or pargs.lineiconradius or 5 local linefix=iconradius-lineiconradius local plotsizex = args.plotsizex or pargs.plotsizex or 100 local plotsizey = args.plotsizey or pargs.plotsizey or 100 local plotstep = args.plotstep or pargs.plotstep or 10 local output = px;height: .. plotsizey+(2 "*iconradius) .. " TITLE="px;">">px;"> if (args or pargs) ~= nil then local x=(args or pargs)+0 local y=(args or pargs)+0 local xmin = x local xmax = x local ymin = y local ymax = y local index = 3 while (args or pargs) ~= nil do local x=(args+0 or pargs+0) local y=(args+0 or pargs+0) if (x < xmin) then xmin = x end if (x > xmax) then xmax = x end if (y < ymin) then ymin = y end if (y > ymax) then ymax = y end index = index + 2 end local lastx=0 local lasty=0 if args ~= nil then local x=(args or pargs)+0 local y=(args or pargs)+0 local plotx=math.floor(plotsizex *(x-xmin)/(xmax-xmin)) local ploty=math.floor((plotsizey-plotsizey *(y-ymin)/(ymax-ymin))) output = output .. px; top: .. ploty .. " TITLE="px;">">px;"> .. icon .. "" lastx = plotx lasty = ploty end index = 3 while (args or pargs) ~= nil do local x=(args or pargs)+0 local y=(args or pargs)+0 local plotx=math.floor(plotsizex *(x-xmin)/(xmax-xmin)) local ploty=math.floor((plotsizey-plotsizey *(y-ymin)/(ymax-ymin))) if plotstep+0 ~= 0 then local delx=plotx-lastx local dely=ploty-lasty plotdist=math.sqrt(delx *delx+dely *dely) plotparm=plotdist-iconradius-plotstep/2 while plotparm>iconradius+lineiconradius+plotstep/2 do output = output .. px; top: .. lasty+linefix+math.floor(dely *(plotparm/plotdist)) .. " TITLE="px;">">px;"> .. lineicon .. "" plotparm = plotparm - plotstep end lastx = plotx lasty = ploty end output = output .. px; top: .. ploty .. " TITLE="px;">">px;"> .. icon .. "" index = index + 2 end else output = "error" end output = output .. " return output end -- data structure is -- data.value -- maxyval -- data.color -- data.legend -- data.legend function p.bar(frame) local debuglog="" local args=frame.args local parent=frame.getParent(frame) local pargs=parent.args or local delimiter = args.delimiter or pargs.delimiter or "," local width = args.width or pargs.width or 200 local height = args.height or pargs.height or 200 ---- Set up the table of "norms". Series 1 to N normalize to (%d+) local normalize = args.normalize or pargs.normalize or "" local prowl=mw.ustring.gmatch(normalize,"(%d+)") norm= local ngroup= -- ngroup identifies an index for ymax local nngroup=0 -- the current maximum ngroup assigned repeat local t=prowl() if not(t) then break end t=tonumber(t) table.insert(norm,t) until false --- import the actual data in group1 .. groupN local yseries=0;local x=0 local data= -- main data storage array local maxy=0;local maxx=0; local maxyval=; local minyval= -- keeping these out of the data array after being driven half mad giving them cutesy names in the array! repeat yseries=yseries+1 data= --- pull in the "groupN" data (delimited) --> text local text=args -- each _group_ is a group of x-values in a y-series if not (text) then maxy=yseries-1 break end ---- pull in the originN=some number data.origin=args or 0 data.origin=tonumber(data.origin) data.max=data.origin;data.min=data.origin debuglog=debuglog.."I"..yseries..tostring(norm) --- set ngroup to whatever its norm points at, or new if norm then if ngroup=ngroup=nngroup end else ngroup=1 -- if no norm specified, just dump to the first series group end ---- pull in the actual values prowl=mw.ustring.gmatch(text,"(.. delimiter .. " +)") x=0 repeat x=x+1 data= data.value=prowl() debuglog=debuglog.."V"..x..yseries..tostring(data.value) if not(data.value) then if x>maxx then maxx = x-1 end; break end data.value=tonumber(data.value) if data.max then if data.value>data.max then data.max=data.value end else data.max=data.value end if data.min then if data.value.min then data.min=data.value end else data.min=data.value end until false ---- pull in the colorN="whatever" data.color=args or "" -- one color for yseries group; can be nil if data.color=="" then data.color="black" end until false --- import the xlegends for each group prowl=mw.ustring.gmatch(args.xlegend,".. delimiter .. " +") x=0 data.legend= -- for x legends, y="legend" repeat x=x+1 data.legend=prowl() if not (data.legend) then break end data.legend=data.legend until false --- import the ylegends for each group prowl=mw.ustring.gmatch(args.ylegend,".. delimiter .. " +") yseries=0 repeat yseries=yseries+1 data.legend=prowl() until not (data.legend) -- set the maxval.max) then break end debuglog=debuglog..tostring(yseries)..":"..tostring(ngroup) .. ">"..tostring(data.max) if maxyval.max>maxyval]=data.max end else maxyval.max;debuglog=debuglog.."A"..tostring(data.max)..tostring(data.min) end if minyval.min end else minyval.min;debuglog=debuglog.."A"..tostring(data.min) end until false --- Draw the output local output = px;height: .. height .. " TITLE="px;">">px;"> \n"local output=' ' 'local topreserve=20 *(maxy) local bottomreserve=20 local leftreserve=20 local rightreserve=20 local reducedheight=height-topreserve-bottomreserve local reducedwidth=width-leftreserve-rightreserve local ew=math.floor(reducedwidth/((maxx) *(maxy+1))) for y = 1,maxy do for x = 1, maxx do debuglog=debuglog..y..x..tostring(ngroup)..tostring(data) .. tostring(maxyval]) if data and maxyval.value-data.origin)/(maxyval]) -- proportion of value to the max value for that y-series local po=(data.origin-minyval]-minyval.color .. ';width:' .. ew .. 'px;height:' .. eh .. 'px;top:' .. et .. 'px;left:' .. el .. 'px;"> end -- if data and maxval..'' end for y = 1,maxy do output=output .. '.color .. ';top:' .. (y-1) *20 .. 'px;left:'.. (leftreserve+10) ..'px;">'.. (data.legend or "") ..'' local point= for i,j in ipairs(point) do local po=(j-minyval]-minyval if tonumber(ngroup)==1 then debuglog=debuglog.."left";output=output .. '.color .. ';'..data.color .. ';text-align:right;top:' .. et-10 .. 'px;width:'..leftreserve..'px;left:0px;">'.. j .. '' else debuglog=debuglog.."right";output=output .. '.color .. ';'..data.color .. ';text-align:left;top:' .. et-10 .. 'px;width:'..rightreserve..'px;left:'..leftreserve+reducedwidth..'px;">'.. j .. '' end end end debuglog=debuglog..tostring(maxyval)..tostring(maxyval)..tostring(maxyval)..tostring(data.max)..tostring(data.max)..tostring(data.max)..tostring(minyval)..tostring(minyval)..tostring(minyval)..tostring(data.min)..tostring(data.min)..tostring(data.min)..data.legend..data.legend..data.legend output = output .. " if (args.debug or pargs.debug) then output=output..debuglog end return output end return p 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「モジュール:Plotter」の詳細全文を読む スポンサード リンク
|