package eg.syntax;

import eg.document.styledtext.Attributes;

/**
 * Syntax highlighting for Java
 */
public class JavaHighlighter implements Highlighter {

   private final static String[] JAVA_KEYWORDS = {
     "abstract", "assert",
     "break", "boolean", "Boolean", "byte",
     "catch", "case","const","continue", "class", "char",
     "default", "do", "double",
     "else", "enum", "extends",
     "false", "finally", "final", "float", "for",
     "if", "implements", "import", "instanceof", "int", "interface",
     "long",
     "native", "new", "null",
     "package", "private", "protected", "public",
     "return",
     "strictfp", "switch", "synchronized", "short", "static", "super",
     "String",
     "this", "throw", "throws", "transient", "true", "try",
     "void", "volatile",
     "while"
   };

   private final static String[] JAVA_ANNOTATIONS = {
      "@Override", "@Deprecated", "@SuppressWarnings", "@SafeVarargs",
      "@FunctionalInterface"
   };

   @Override
   public void highlight(SyntaxHighlighter.SyntaxSearcher s, Attributes attr) {
      if (!s.isInBlock(SyntaxConstants.SLASH_STAR, SyntaxConstants.STAR_SLASH, true)) {
         s.resetAttributes();
         s.keywords(JAVA_ANNOTATIONS, true, null, attr.bluePlain);
         s.keywords(JAVA_KEYWORDS, true, null, attr.redPlain);
         s.brackets();
         s.braces();
         s.quoteInLine();
         s.lineComments(SyntaxConstants.DOUBLE_SLASH);
     }
     s.block(SyntaxConstants.SLASH_STAR, SyntaxConstants.STAR_SLASH, true);
   }

   @Override
   public boolean isValid(String text, int pos, int length, int condition) {
      return true;
   }
}

@@ -523,24 +523,39 @@
     %22long%22,%0A
+     %22module%22,%0A
      %22native
@@ -626,16 +626,28 @@
 c%22,%0A    
+ %22requires%22,
  %22return

add java keywords