
Description="Nim"

Digits=[[ (?:0[xXbBcCo])[0-9a-fA-F]+|\d+'?[iufd]\d*|\d*[\.\_]?\d+(?:[iu]\d+)?[lLuU]? ]]

Keywords={
  {  Id=1,
   List={"addr", "and", "as", "asm", "atomic", "bind", "block", "break", "case", 
        "cast", "concept", "const", "continue", "converter", "defer", "discard", 
        "distinct", "div", "do", "elif", "else", "end", "enum", "except", "export", 
        "finally", "for", "from", "func", "generic", "if", "import", "in", "include", 
        "interface", "is", "isnot", "iterator", "let", "macro", "method", "mixin", 
        "mod", "nil", "not", "notin", "object", "of", "or", "out", "proc", "ptr", 
        "raise", "ref", "return", "shl", "shr", "static", "template", "try", "tuple", 
        "type", "using", "var", "when", "while", "with", "without", "xor", "yield"
        }
  },
  { Id=2,
    List= {"int", "int8", "int16", "int32", "int64", "uint", "uint8", "uint16", "uint32", "uint64", 
           "float", "float32", "float64", "char", "string", "pointer"}
  },
  { Id=3,
    List= {}
  },
  { Id=4,
    Regex=[[(\w+)\s*\(]]
  }
}

Strings = {
  Delimiter=[["""|"|'|`]],
  RawPrefix="r",
  Escape=[=[\\[ntvbrfa\\\?'"]|\\\d{3}|\\x[[:xdigit:]]{2}]=],
}

--allow #, ##, #[..]#, ##[..]##
Comments = {
  { Block=false,
    Delimiter= { [=[ ##(?!\[)|#(?![\[#]) ]=] },
  },
   { Block=true,
     Nested=true,
     Delimiter = { [[ ##?\[ ]], [[ \]##? ]] }
   }

}

IgnoreCase=false

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

