The wiki has moved!

Visit the new wiki at stationeers-wiki.com The old wiki here at legacy.stationeers-wiki.com will sunset eventually.

Edits made after the 7th of March 6PM EST were NOT carried over to the new server as previously announced right here in this box.

 Actions

Module

Difference between revisions of "IC10"

From Unofficial Stationeers Wiki

(Trying to get syntax highlighting working)
 
m (replace mw.text.gsub with string.gsub)
Line 19: Line 19:
  
 
     -- comments
 
     -- comments
     line = mw.text.gsub(line, "(#.*)",
+
     line = string.gsub(line, "(#.*)",
 
         '<span style="color:#6a9955;font-style:italic;">%1</span>')
 
         '<span style="color:#6a9955;font-style:italic;">%1</span>')
  
 
     -- labels
 
     -- labels
     line = mw.text.gsub(line, "^(%w+:)",
+
     line = string.gsub(line, "^(%w+:)",
 
         '<span style="color:#dcdcaa;">%1</span>')
 
         '<span style="color:#dcdcaa;">%1</span>')
  
 
     -- registers r0–r15
 
     -- registers r0–r15
     line = mw.text.gsub(line, "%f[%w](r1?[0-5])%f[%W]",
+
     line = string.gsub(line, "%f[%w](r1?[0-5])%f[%W]",
 
         '<span style="color:#4fc1ff;">%1</span>')
 
         '<span style="color:#4fc1ff;">%1</span>')
  
 
     -- numbers hex
 
     -- numbers hex
     line = mw.text.gsub(line, "%f[%w](%-?0x%x+)%f[%W]",
+
     line = string.gsub(line, "%f[%w](%-?0x%x+)%f[%W]",
 
         '<span style="color:#b5cea8;">%1</span>')
 
         '<span style="color:#b5cea8;">%1</span>')
 
     -- numbers decimal
 
     -- numbers decimal
     line = mw.text.gsub(line, "%f[%w](%-?%d+)%f[%W]",
+
     line = string.gsub(line, "%f[%w](%-?%d+)%f[%W]",
 
         '<span style="color:#b5cea8;">%1</span>')
 
         '<span style="color:#b5cea8;">%1</span>')
  
 
     -- opcodes
 
     -- opcodes
 
     for op,_ in pairs(opcode_lookup) do
 
     for op,_ in pairs(opcode_lookup) do
         line = mw.text.gsub(line,
+
         line = string.gsub(line,
 
             "%f[%w]("..op..")%f[%W]",
 
             "%f[%w]("..op..")%f[%W]",
 
             '<span style="color:#c586c0;font-weight:bold;">%1</span>')
 
             '<span style="color:#c586c0;font-weight:bold;">%1</span>')

Revision as of 00:25, 20 February 2026

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"
}

-- 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](r1?[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