Actions

Module

IC10

From Unofficial Stationeers Wiki

Revision as of 23:43, 19 February 2026 by TK421 (talk | contribs) (added device highlighting and fixed r6-r9)

Documentation for this module may be created at Module:IC10/doc

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, "(#.*)",
        '<span style="color:#6a9955;font-style:italic;">%1</span>')

    -- labels
    line = string.gsub(line, "^(%w+:)",
        '<span style="color:#dcdcaa;">%1</span>')

    -- registers r0–r15
    line = string.gsub(line, "%f[%w](r([0-9]|1[0-5]))%f[%W]",
        '<span style="color:#4fc1ff;">%1</span>')

    -- devices d0–d5
    line = string.gsub(line, "%f[%w](d[0-5])%f[%W]",
        '<span style="color:#4fc1ff;">%1</span>')


    -- numbers hex
    line = string.gsub(line, "%f[%w](%-?0x%x+)%f[%W]",
        '<span style="color:#b5cea8;">%1</span>')
    -- numbers decimal
    line = string.gsub(line, "%f[%w](%-?%d+)%f[%W]",
        '<span style="color:#b5cea8;">%1</span>')

    -- opcodes
    for op,_ in pairs(opcode_lookup) do
        line = string.gsub(line,
            "%f[%w]("..op..")%f[%W]",
            '<span style="color:#c586c0;font-weight:bold;">%1</span>')
    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 '<pre style="font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;">'
        .. table.concat(lines, "\n") ..
        '</pre>'
end

return p