#!/usr/bin/env lua
-- Lua syntax highlighting test file

-- Constants
PI = 3.14159
MAX_COUNT = 100

-- Variables
local counter = 0
local name = "Lua"

-- Built-in variable
print(self)

-- Functions
local function greet(user)
  print("Hello, " .. user)
end

local function add(a, b)
  return a + b
end

-- Method definitions
local obj = {}
function obj:sayHi()
  print("Hi from method!")
end

obj.sayHello = function()
  print("Hello from field function!")
end

-- Arrow-style anonymous function (LuaJIT/CFFI style)
local arrow = function(x)
  return x * 2
end

-- Table constructors
local t = {
  foo = 123,
  bar = function()
    return "bar"
  end,
  nested = {
    a = 1,
    b = 2,
  },
}

-- Loops
for i = 1, MAX_COUNT do
  counter = counter + i
end

while counter > 0 do
  counter = counter - 1
end

repeat
  counter = counter + 1
until counter == 10

-- Conditionals
if counter > 5 then
  print("Big number")
elseif counter == 5 then
  print("Exactly five")
else
  print("Small number")
end

-- Operators
local x, y = 10, 20
local z = x + y * 2 - (x / y) ^ 2
local ok = x == y or x ~= y and not false

-- Function calls
greet("World")
obj:sayHi()
obj.sayHello()
add(5, 10)

-- Built-in function calls
assert(x > 0)
pcall(function()
  print("safe")
end)
tonumber("123")

-- CFFI injection example
local ffi = require("ffi")
ffi.cdef([[
    int printf(const char *fmt, ...);
    typedef struct { int x; int y; } point;
]])

-- Boolean and nil
local flag = true
local nothing = nil

-- Comments
-- Single line
--[[
  Multi-line
  comment
]]

-- Strings
local s1 = "Hello\nWorld"
local s2 = [[Long
multi-line
string]]

-- Template strings (LuaJIT-style)
local tpl = `Value: ${counter}`

-- Regex-like string (for testing injection highlighting)
local re = "/^%a+$/"
