Description="Java"

Categories = {"source"}

-- identifier including the minus sign (needed for Java's "non-sealed")
Identifiers=[[ [a-zA-Z_][\w\-]* ]]

Keywords={
  { Id=1,
    List={
      -- reserved Java keywords (Java Lang Spec 21)
      "abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const",
      "continue", "default", "do", "double", "else", "enum", "extends", "final", "finally",
      "float", "for", "goto", "if", "implements", "import", "instanceof", "int", "interface",
      "long", "native", "new", "package", "private", "protected", "public", "return", "short",
      "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws",
      "transient", "try", "void", "volatile", "while", "_", "@interface",

      -- contextual Java keywords
      "exports", "module", "non-sealed", "open", "opens", "permits", "provides", "record",
      "requires", "sealed", "to", "transitive", "uses",  "var", "when", "with", "yield",

      -- reserved Groovy words. Added here for convenience
      "def", "default", "threadsafe",

      -- contextual Groovy keywords
      "as", "in", "trait"
    }
  },
  { Id=2,
    List={"false", "true", "null"},
  },
  { Id=3,
    Regex=[[@\s*\w+]],
  },
  { Id=4,
    Regex=[[(\w+)\s*\(]],
  },
}

Strings={
  Delimiter=[["""|"|']],
  Escape = [[ \\u\d{4}|\\x?\d{3}|\\\w|\\[\'\\\"] ]]
}

IgnoreCase=false

Comments={
  { Block=false,
    Delimiter= { [[\/\/]] },
  },
  { Block=true,
    Nested=false,
    Delimiter= { [[\/\*]],[[\*\/]],}
  }
}

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

Digits=[[ (?:0x|0X|0b)[0-9a-fA-F_]+|\d*[\.\_]?\d+(?:[eE][\-\+]?\d+)?[fFlLuU]? ]]

EnableIndentation=true
