Module:IC10: Difference between revisions
From Stationeers Wiki
More actions
m replace mw.text.gsub with string.gsub |
m adding a couple more opcodes |
||
| Line 6: | Line 6: | ||
"and","or","xor","not", | "and","or","xor","not", | ||
"beq","bne","j","jal", | "beq","bne","j","jal", | ||
"move","slt","sgt" | "move","slt","sgt", | ||
"l","lb", | |||
"s","sb", | |||
"yield" | |||
} | } | ||
Revision as of 05:34, 20 February 2026
local p = {}
-- List of IC10 opcodes (all strings) local opcodes = {
"add","sub","mul","div", "and","or","xor","not", "beq","bne","j","jal", "move","slt","sgt", "l","lb", "s","sb", "yield"
}
-- Build lookup table local opcode_lookup = {} for _, op in ipairs(opcodes) do
opcode_lookup[op] = true
end
local function highlight_line(line)
line = mw.text.nowiki(line)
-- comments
line = string.gsub(line, "(#.*)",
'%1')
-- labels
line = string.gsub(line, "^(%w+:)",
'%1')
-- registers r0–r15
line = string.gsub(line, "%f[%w](r1?[0-5])%f[%W]",
'%1')
-- numbers hex
line = string.gsub(line, "%f[%w](%-?0x%x+)%f[%W]",
'%1')
-- numbers decimal
line = string.gsub(line, "%f[%w](%-?%d+)%f[%W]",
'%1')
-- opcodes
for op,_ in pairs(opcode_lookup) do
line = string.gsub(line,
"%f[%w]("..op..")%f[%W]",
'%1')
end
return line
end
function p.highlight(frame)
local text = frame.args[1] or "" local lines = mw.text.split(text, "\n")
for i,line in ipairs(lines) do
lines[i] = highlight_line(line)
end
return '
'
.. table.concat(lines, "\n") ..
''
end
return p