Module:RSRange
跳到导航
跳到搜索
The module was created for showing the crash range of Rolling Sky barriers.
You can use the template {{RSRange}} to show it.
Don't rewrite this model unless you are sure that it can work after rewriting.
More information can be got here: Template:RSRange(Template Page) and Template:RSRange/doc(Template Information Document).
-- This is an attempt to create a simpler way to build Rolling Sky barriers' crash range. -- It requires one string input to describe the mapping of the range. -- It generates a CSS grid instance for graphical output. -- Crappy code originally by One-Six(U:公的驱逐舰) first use for Arknights -- And then rewritten by AsanoKanadeko in order to use it for RS. -- However, I don't know whether it can use or not after my rewrite. It sounds stupid. local p = {} -- Interpret input string and break it into a 2D array local function interpret ( s ) local dataTable = {} local i = 1 local j = 1 dataTable[1] = {} -- Ignore newline at end of description string, -- then break string into individual char. for c in string.gmatch(s:gsub("n+$",""),".") do -- 'e' marks end of center row for symmetrical ranges. -- Generate the mirror and then break. if (c == 'e') then local iBar = i while (i > 1) do iBar = iBar + 1 i = i - 1 dataTable[iBar] = dataTable[i] end break -- 'r' marks end of center line which is below current line for symmetrical ranges. -- Generate the mirror and then break. elseif (c == 'r') then local iBar = i i = i + 1 while (i > 1) do iBar = iBar + 1 i = i - 1 dataTable[iBar] = dataTable[i] end break -- 'n' marks end of row. Create the next row. elseif (c == 'n') then i = i + 1 j = 1 dataTable[i] = {} -- Not control char; add char to array and point to next var. else dataTable[i][j] = c j = j + 1 end end j = nil -- Check for longest row. -- If rows are not all of the same length, mark for space padding. i = 1 local maxWidth = table.getn(dataTable[1]) local needSpacePadding = false while (dataTable[i] ~= nil) do if (table.getn(dataTable[i]) > maxWidth) then maxWidth = table.getn(dataTable[i]) needSpacePadding = true elseif (table.getn(dataTable[i]) < maxWidth) then needSpacePadding = true end i = i + 1 end -- Space padding. i = 1 while (needSpacePadding and dataTable[i] ~= nil) do local length = table.getn(dataTable[i]) for j = table.getn(dataTable[i]) + 1, maxWidth do dataTable[i][j] = 'o' end i = i + 1 end return dataTable end -- Generate grid from parsed data table local function genGrid ( dataTable ) -- prep output string with <div> head. local outputString = '<div style="display:grid;grid-gap:2px;margin:5px; box-sizing:content-box;width:'..(17 * table.getn(dataTable[1]) - 2)..'px;height:'..(17 * table.getn(dataTable) - 2)..'px;">' for i = 1, table.getn(dataTable) do for j = 1, table.getn(dataTable[i]) do -- 3height: solid box if (dataTable[i][j] == 's') then outputString = outputString..'<div style="width:15px;height:15px;background-color:#808080;grid-area:'..i..'/'..j..'/'..(i + 1)..'/'..(j + 1)..'"></div>' -- floor: hollow box with solid border elseif (dataTable[i][j] == 'x') then outputString = outputString..'<div style="width:11px;height:11px;border:2px solid #808080;grid-area:'..i..'/'..j..'/'..(i + 1)..'/'..(j + 1)..'"></div>' -- sky: hollow box with dotted border elseif (dataTable[i][j] == 'k') then outputString = outputString..'<div style="width:11px;height:11px;border:2px dotted #808080;grid-area:'..i..'/'..j..'/'..(i + 1)..'/'..(j + 1)..'"></div>' -- space: placeholder box elseif (dataTable[i][j] == 'o') then outputString = outputString..'<div style="width:15px;height:15px;grid-area:'..i..'/'..j..'/'..(i + 1)..'/'..(j + 1)..'"></div>' -- binary bridge elseif (dataTable[i][j] == 'b') then outputString = outputString..'<div style="width:11px;height:11px;border:2px solid #808080;grid-area:'..i..'/'..j..'/'..(i + 1)..'/'..(j + 1)..';background-color:#444444"></div>' -- illegal input: warning box else outputString = outputString..'<div title="Warning from Module:RSRange> Illegal value ('..dataTable[i][j]..') was found in the format string. Location: (R'..i..',C'..j..')." style="width:15px;height:15px;background-color:#FFCCCC;grid-area:'..i..'/'..j..'/'..(i + 1)..'/'..(j + 1)..'"><sup><span style="text-align:center;color:#F00">×</span></sup></div>' end end end --return output (after closing the <div>) return outputString.."</div>" end -- Get and return grid from from raw description string function p.main ( frame ) return genGrid( interpret( frame.args[1] ) ) end -- Return all legal chars in description string in string form function p.legalChar ( frame ) return 'oxskner' end return p