Module:ClassMatrix
Documentation for this module may be created at Module:ClassMatrix/doc
local getArgs = require('Module:Arguments').getArgs;
local defArgs = require('Module:Arguments').defaultArgs;
local classMatrix = {};
function classMatrix.XAxis( frame )
local args = defArgs(getArgs(frame), 3, "", "", "");
local arg1 = args[1];
local arg2 = args[2];
local arg3 = args[3];
local text = "";
local H = {};
local T = {};
for id in arg1:gmatch("%S+") do
str = string.sub(id,arg2,arg3);
if (H[str] == nil)
then H[str] = 1; table.insert(T, str);
else H[str] = H[str] + 1;
end
end
table.sort(T);
for i=1,table.getn(T) do
local k = T[i];
text = text .. k .. " " .. H[k] .. " ";
end
return text
end
function classMatrix.YAxis( frame )
local args = defArgs(getArgs(frame), 3, "", "", "");
local arg1 = args[1];
local arg2 = args[2];
local arg3 = args[3];
local text = "";
local H = {};
local T = {};
for id in arg1:gmatch("%S+") do
str = string.sub(id,arg2,arg3);
if (H[str] == nil)
then H[str] = 1; table.insert(T, str);
else H[str] = H[str] + 1;
end
end
table.sort(T);
for i=1,table.getn(T) do
local k = T[i];
text = text .. k .. " " .. H[k] .. "\n";
end
return text
end
function classMatrix.Matr( frame )
local args = defArgs(getArgs(frame), 6, "", "", "", "", "", "");
local arg = args[1];
local arg1 = args[2];
local arg2 = tonumber(args[3]);
local arg3 = tonumber(args[4]);
local arg4 = tonumber(args[5]);
local arg5 = tonumber(args[6]);
local text = "";
local input = arg:match(".+");
local xaxis, yaxis, all = string.match(input, "([^&]+)&&([^&]+)&&(.+)");
local M = {};
for id in string.gmatch(all,"(%S+)") do
x = string.sub(id, arg2, arg3);
y = string.sub(id, arg4, arg5);
if (M[x] == nil) then M[x] = {}; end
if (M[x][y] == nil)
then M[x][y] = 1;
else M[x][y] = M[x][y] + 1;
end
end
--- arg2arg3がarg4arg5より後ろの場合も考慮 ---
if (arg3 <= arg4)
then
strFst = string.sub(arg1, 1, arg2-1);
strSnd = string.sub(arg1, arg3+1, arg4-1);
strTrd = string.sub(arg1, arg5+1, string.len(arg1));
else
strFst = string.sub(arg1, 1, arg4-1);
strSnd = string.sub(arg1, arg5+1, arg2-1);
strTrd = string.sub(arg1, arg3+1, string.len(arg1));
end
for x,v in string.gmatch(xaxis, "(%S+) (%S+)") do
str = x .. " <small>(" .. v .. ")</small>&&";
for y,v in string.gmatch(yaxis, "(%S+) (%S+)") do
if (M[x][y] == nil)
then str = str .. " 0 dummy";
else if (arg3 <= arg4)
then str = str .. " " .. M[x][y] .. " " .. strFst .. x .. strSnd .. y .. strTrd;
else str = str .. " " .. M[x][y] .. " " .. strFst .. y .. strSnd .. x .. strTrd;
end
end
end
text = text .. str .. "\n";
end
return text
end
return classMatrix;