Merge commit '77d3a60869e7a780c6ae069e51530e1eacece5e2'
[fanfix.git] / src / jexer / teditor / Highlighter.java
index 4a1ae903a33e0447d5694619a088829f4c6d14f2..23ee90014e863bc0568a3526f4e086a793b6465c 100644 (file)
@@ -3,7 +3,7 @@
  *
  * The MIT License (MIT)
  *
- * Copyright (C) 2017 Kevin Lamonte
+ * Copyright (C) 2019 Kevin Lamonte
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -56,24 +56,49 @@ public class Highlighter {
      * Public constructor sets the theme to the default.
      */
     public Highlighter() {
-        colors = new TreeMap<String, CellAttributes>();
+        // NOP
     }
 
     // ------------------------------------------------------------------------
     // Highlighter ------------------------------------------------------------
     // ------------------------------------------------------------------------
 
+    /**
+     * Set keyword highlighting.
+     *
+     * @param enabled if true, enable keyword highlighting
+     */
+    public void setEnabled(final boolean enabled) {
+        if (enabled) {
+            setJavaColors();
+        } else {
+            colors = null;
+        }
+    }
+
+    /**
+     * Set my field values to that's field.
+     *
+     * @param rhs an instance of Highlighter
+     */
+    public void setTo(final Highlighter rhs) {
+        colors = new TreeMap<String, CellAttributes>();
+        colors.putAll(rhs.colors);
+    }
+
     /**
      * See if this is a character that should split a word.
      *
      * @param ch the character
      * @return true if the word should be split
      */
-    public boolean shouldSplit(final char ch) {
+    public boolean shouldSplit(final int ch) {
         // For now, split on punctuation
         String punctuation = "'\"\\<>{}[]!@#$%^&*();:.,-+/*?";
-        if (punctuation.indexOf(ch) != -1) {
-            return true;
+        if (ch < 0x100) {
+            if (punctuation.indexOf((char) ch) != -1) {
+                return true;
+            }
         }
         return false;
     }
@@ -85,7 +110,10 @@ public class Highlighter {
      * @return color associated with name, e.g. bold yellow on blue
      */
     public CellAttributes getColor(final String name) {
-        CellAttributes attr = (CellAttributes) colors.get(name);
+        if (colors == null) {
+            return null;
+        }
+        CellAttributes attr = colors.get(name);
         return attr;
     }
 
@@ -93,19 +121,41 @@ public class Highlighter {
      * Sets to defaults that resemble the Borland IDE colors.
      */
     public void setJavaColors() {
+        colors = new TreeMap<String, CellAttributes>();
+
         CellAttributes color;
 
-        String [] keywords = {
+        String [] types = {
             "boolean", "byte", "short", "int", "long", "char", "float",
-            "double", "void", "new",
-            "static", "final", "volatile", "synchronized", "abstract",
-            "public", "private", "protected",
-            "class", "interface", "extends", "implements",
+            "double", "void",
+        };
+        color = new CellAttributes();
+        color.setForeColor(Color.GREEN);
+        color.setBackColor(Color.BLUE);
+        color.setBold(true);
+        for (String str: types) {
+            colors.put(str, color);
+        }
+
+        String [] modifiers = {
+            "abstract", "final", "native", "private", "protected", "public",
+            "static", "strictfp", "synchronized", "transient", "volatile",
+        };
+        color = new CellAttributes();
+        color.setForeColor(Color.WHITE);
+        color.setBackColor(Color.BLUE);
+        color.setBold(true);
+        for (String str: modifiers) {
+            colors.put(str, color);
+        }
+
+        String [] keywords = {
+            "new", "class", "interface", "extends", "implements",
             "if", "else", "do", "while", "for", "break", "continue",
             "switch", "case", "default",
         };
         color = new CellAttributes();
-        color.setForeColor(Color.WHITE);
+        color.setForeColor(Color.YELLOW);
         color.setBackColor(Color.BLUE);
         color.setBold(true);
         for (String str: keywords) {