/home/jfernan6/NetBeansProjects/CSX/src/synesthesia/GraphemeToColorSynesthesia.java
  1  /*
  2   * Program to simulate the phenomenon known as grapheme to color synesthesia.
  3   * This program is written as an interpreter that recognizes and responds to:
  4   * -exit|terminate the program
  5   * -remap|redefine the mapping from letters to colors
  6   * -WORD OR PHRASE| simply show the word or phrase in synesthetic color
  7   */
  8   package synesthesia;
  9    
 10   import java.awt.Color;
 11   import java.awt.Point;
 12   import javax.swing.JOptionPane;
 13   import javax.swing.SwingUtilities;
 14   import painter.SPainter;
 15   
 16   /**
 17    *
 18    * @author jfernan6
 19    */
 20   public class GraphemeToColorSynesthesia {
 21   
 22       private static final int fontsize = 30;
 23       private static final String theLetters = "ABCBDEFGHIJKLMNOPQRSTUVWXYZ";
 24       private static String[] letters;
 25       private static Color[] colors;
 26   
 27       private void paintingCode() {
 28                     // INITIALIZATION
 29           SPainter miro = new SPainter(1200, 220);
 30           miro.setScreenLocation(30, 30);
 31           miro.setFontSize(fontsize);
 32           initializeColorMap(theLetters);
 33                   // INTERPRETATION
 34           while (true) {
 35               String input = JOptionPane.showInputDialog(null, "Please enter a word, or a few words ...");
 36               if (input == null) {
 37                   input = "EXIT";
 38               }
 39               input = input.toUpperCase();
 40               if (input.equals("EXIT")) {
 41                   break;
 42               } else if (input.equals("REMAP")) {
 43                   initializeColorMap(theLetters);
 44                   showLetters(miro, theLetters);
 45               } else {
 46                   showLetters(miro, input.toUpperCase());
 47               }
 48           }
 49           miro.end();
 50       }
 51   
 52       private static void showLetters(SPainter miro, String input) {
 53                         // READY
 54           eraseWhiteBoard(miro);
 55                         // SET
 56           miro.moveTo(new Point.Double(100, 100));
 57                        // GO
 58           for (int i = 0; i < input.length(); i = i
 59                   + 1) {
 60               String letter = input.substring(i, i + 1);
 61               Color color = getLetterColor(letter);
 62               miro.setColor(color);
 63               miro.draw(letter);
 64               miro.mrt(fontsize);
 65           }
 66       }
 67   
 68       private static void initializeColorMap(String specialLetters) {
 69           letters = new String[specialLetters.length()];
 70           colors = new Color[specialLetters.length()];
 71           for (int i = 0; i < specialLetters.length(); i
 72                   = i + 1) {
 73               letters[i] = specialLetters.substring(i, i + 1);
 74               colors[i] = randomColor();
 75           }
 76       }
 77   
 78       private static Color getLetterColor(String letter) {
 79           for (int i = 0; i < letters.length; i
 80                   = i + 1) {
 81               if (letter.equalsIgnoreCase(letters[i])) {
 82                   return colors[i];
 83               }
 84           }
 85           return Color.BLACK;
 86       }
 87   
 88       private static Color randomColor() {
 89           int rv = (int) (Math.random() * 256);
 90           int gv = (int) (Math.random() * 256);
 91           int bv = (int) (Math.random() * 256);
 92           return new Color(rv, gv, bv);
 93       }
 94   
 95       private static void eraseWhiteBoard(SPainter miro) {
 96           miro.setColor(Color.WHITE);
 97           miro.wash();
 98           miro.paintFrame(Color.black, 5);
 99       }
100        // INFRASTRUCTURE FOR SOME SIMPLE PAINTING
101  
102      public GraphemeToColorSynesthesia() {
103          paintingCode();
104      }
105  
106      public static void main(String[] args) {
107          SwingUtilities.invokeLater(new Runnable() {
108              public void run() {
109                  new GraphemeToColorSynesthesia();
110              }
111          });
112      }
113  }
114