-- Language definition generated by lang2to3

Description="DOS Batch"

Keywords={
  { Id=1,
    List={"do", "else", "end", "errorlevel", "exist", "exit", "for", "goto", "if", "not", 
          "pause", "return", "say", "select", "then", "neq", "when"},
  },
  { Id=2,
    List={"ansi", "append", "assign", "attrib", "autofail", "backup", "basedev", 
	  "boot", "break", "buffers", "cache", "call", "cd", "chcp", "chdir", "chkdsk", 
	  "choice", "cls", "cmd", "codepage", "command", "comp", "copy", "country", 
	  "date", "ddinstal", "debug", "del", "detach", "device", "devicehigh", "devinfo", 
	  "dir", "diskcoache", "diskcomp", "diskcopy", "doskey", "dpath", "dumpprocess", 
	  "eautil", "endlocal", "erase", "exit_vdm", "extproc", "fcbs", "fdisk", 
	  "fdiskpm", "files", "find", "format", "fsaccess", "fsfilter", "graftabl", 
	  "iopl", "join", "keyb", "keys", "label", "lastdrive", "libpath", "lh", 
	  "loadhigh", "makeini", "maxwait", "md", "mem", "memman", "mkdir", "mode", 
	  "move", "net", "patch", "path", "pauseonerror", "picview", "pmrexx", "print", 
	  "printmonbufsize", "priority", "priority_disk_io", "prompt", "protectonly", 
	  "protshell", "pstat", "rd", "recover", "reipl", "ren", "rename", "replace", 
	  "restore", "rmdir", "rmsize", "run", "set", "setboot", "setlocal", "shell", 
	  "shift", "sort", "spool", "start", 
	  "subst", "suppresspopups", "swappath", "syslevel", "syslog", "threads", "time", 
	  "timeslice", "trace", "tracebuf", "tracefmt", "trapdump", "tree", "type", 
	  "undelete", "unpack", "use", "ver", "verify", "view", "vmdisk", "vol", "xcopy", 
	  "xcopy32", "xdfcopy", "echo"},
  },
  { Id=3,
    Regex=[[%\w+%]],
  },
  { Id=4,
    Regex=[[:\w+]],
  },
}

Strings={
  Delimiter=[["|']],
  Interpolation=[[ %\w+% ]],
}

IgnoreCase=true

Comments={
  { Block=false,
    Delimiter= { [[^(rem|Rem|REM).*]] },
  },
}

Operators=[[\(|\)|\[|\]|\{|\}|\,|\;|\:|\&|<|>|\!|\=|\/|\*|\%|\+|\-]]

-- fix recognition of $
function OnStateChange(oldState, newState, token)
   
   if string.match(token, "%%.*%%") ~= nil and oldState==HL_STRING and newState==HL_KEYWORD then
      return HL_INTERPOLATION
   end
   
   return newState
end
