custom command line terminal window, blinking in color theme, scrolling region resize
[fanfix.git] / src / jexer / bits / ColorTheme.java
index d3a468f416dd3d2986282f7b53653d097ffc4a90..e55398a8235f38b4677f2dc9cd81edf514cdf735 100644 (file)
@@ -3,7 +3,7 @@
  *
  * The MIT License (MIT)
  *
- * Copyright (C) 2016 Kevin Lamonte
+ * Copyright (C) 2017 Kevin Lamonte
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -32,6 +32,7 @@ import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.Reader;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -114,31 +115,54 @@ public final class ColorTheme {
      * @throws IOException if the I/O fails
      */
     public void load(final String filename) throws IOException {
-        BufferedReader reader = new BufferedReader(new FileReader(filename));
-        String line = reader.readLine();
-        for (; line != null; line = reader.readLine()) {
+        load(new FileReader(filename));
+    }
+
+    /**
+     * Read color theme mappings from a Reader.  The reader is closed at the
+     * end.
+     *
+     * @param reader the reader to read from
+     * @throws IOException if the I/O fails
+     */
+    public void load(final Reader reader) throws IOException {
+        BufferedReader bufferedReader = new BufferedReader(reader);
+        String line = bufferedReader.readLine();
+        for (; line != null; line = bufferedReader.readLine()) {
             String key;
-            String bold;
+            boolean bold = false;
+            boolean blink = false;
             String foreColor;
             String backColor;
+            String token;
 
             // Look for lines that resemble:
             //     "key = blah on blah"
             //     "key = bold blah on blah"
+            //     "key = blink bold blah on blah"
+            //     "key = bold blink blah on blah"
+            //     "key = blink blah on blah"
             StringTokenizer tokenizer = new StringTokenizer(line);
             key = tokenizer.nextToken();
             if (!tokenizer.nextToken().equals("=")) {
                 // Skip this line
                 continue;
             }
-            bold = tokenizer.nextToken();
-            if (!bold.toLowerCase().equals("bold")) {
-                // "key = blah on blah"
-                foreColor = bold;
-            } else {
-                // "key = bold blah on blah"
-                foreColor = tokenizer.nextToken().toLowerCase();
+            token = tokenizer.nextToken();
+            while (token.equals("bold") || token.equals("blink")) {
+                if (token.equals("bold")) {
+                    bold = true;
+                    token = tokenizer.nextToken();
+                }
+                if (token.equals("blink")) {
+                    blink = true;
+                    token = tokenizer.nextToken();
+                }
             }
+
+            // What's left is "blah on blah" or "blah"
+            foreColor = token.toLowerCase();
+
             if (!tokenizer.nextToken().toLowerCase().equals("on")) {
                 // Skip this line
                 continue;
@@ -146,15 +170,18 @@ public final class ColorTheme {
             backColor = tokenizer.nextToken().toLowerCase();
 
             CellAttributes color = new CellAttributes();
-            if (bold.equals("bold")) {
+            if (bold) {
                 color.setBold(true);
             }
+            if (blink) {
+                color.setBlink(true);
+            }
             color.setForeColor(Color.getColor(foreColor));
             color.setBackColor(Color.getColor(backColor));
             colors.put(key, color);
         }
         // All done.
-        reader.close();
+        bufferedReader.close();
     }
 
     /**
@@ -240,12 +267,12 @@ public final class ColorTheme {
         color.setBold(false);
         colors.put("twindow.background.windowmove", color);
 
-        // TApplication background
+        // TDesktop background
         color = new CellAttributes();
         color.setForeColor(Color.BLUE);
         color.setBackColor(Color.WHITE);
         color.setBold(false);
-        colors.put("tapplication.background", color);
+        colors.put("tdesktop.background", color);
 
         // TButton text
         color = new CellAttributes();
@@ -284,7 +311,7 @@ public final class ColorTheme {
         // TText text
         color = new CellAttributes();
         color.setForeColor(Color.WHITE);
-        color.setBackColor(Color.BLACK);
+        color.setBackColor(Color.BLUE);
         color.setBold(false);
         colors.put("ttext", color);
 
@@ -457,7 +484,7 @@ public final class ColorTheme {
         // TEditor
         color = new CellAttributes();
         color.setForeColor(Color.WHITE);
-        color.setBackColor(Color.BLACK);
+        color.setBackColor(Color.BLUE);
         color.setBold(false);
         colors.put("teditor", color);