001 package de.java2html.options;
002 
003 import java.util.HashMap;
004 import java.util.Iterator;
005 import java.util.Map;
006 
007 import de.java2html.javasource.SourceType;
008 import de.java2html.util.RGB;
009 
010 /**
011  * Table containing style options (
012  {@link de.java2html.options.JavaSourceStyleEntry}) for different types of
013  * source code ({@link de.java2html.javasource.SourceType}).
014  
015  @author Markus Gebhard
016  */
017 public class JavaSourceStyleTable {
018   private final Map table = new HashMap();
019   private static final JavaSourceStyleEntry defaultColorEntry = new JavaSourceStyleEntry(RGB.BLACK);
020   private String name;
021 
022   private JavaSourceStyleTable(String name) {
023     setName(name);
024   }
025 
026   @Override
027   public boolean equals(Object obj) {
028     if (!(obj instanceof JavaSourceStyleTable)) {
029       return false;
030     }
031     final JavaSourceStyleTable other = (JavaSourceStyleTableobj;
032 
033     if (!name.equals(other.name)) {
034       return false;
035     }
036     if (other.table.size() != table.size()) {
037       return false;
038     }
039 
040     final Iterator iterator = table.keySet().iterator();
041     while (iterator.hasNext()) {
042       final String key = (Stringiterator.next();
043       final JavaSourceStyleEntry value = get(key);
044       if (!value.equals(other.table.get(key))) {
045         return false;
046       }
047     }
048     return true;
049   }
050 
051   public JavaSourceStyleTable getClone() {
052     final JavaSourceStyleTable clone = new JavaSourceStyleTable(getName());
053     final Iterator iterator = table.keySet().iterator();
054     while (iterator.hasNext()) {
055       final String key = (Stringiterator.next();
056       final JavaSourceStyleEntry value = get(key);
057       clone.table.put(key, value);
058     }
059     return clone;
060   }
061 
062   public static JavaSourceStyleTable[] getPredefinedTables() {
063     return new JavaSourceStyleTable[]{
064         createDefaultEclipseStyleTable(),
065         createDefaultKawaStyleTable(),
066         createDefaultMonochromeStyleTable()};
067   }
068 
069   /**
070    * Returns the style table with the given name or <code>null</code> if
071    * there is none having the give name.
072    
073    @throws IllegalArgumentException
074    *           if the name is null.
075    */
076   public static JavaSourceStyleTable getPredefinedTable(String name) {
077     if (name == null) {
078       throw new IllegalArgumentException("name is null.")//$NON-NLS-1$
079     }
080     final JavaSourceStyleTable[] tables = getPredefinedTables();
081     for (int i = 0; i < tables.length; ++i) {
082       if (tables[i].getName().equalsIgnoreCase(name)) {
083         return tables[i];
084       }
085     }
086     return null;
087   }
088 
089   private static JavaSourceStyleTable createDefaultKawaStyleTable() {
090     final JavaSourceStyleTable table = new JavaSourceStyleTable("Kawa")//$NON-NLS-1$
091     table.put(SourceType.UNDEFINED, new JavaSourceStyleEntry(new RGB(255970)));
092     table.put(SourceType.CODE, new JavaSourceStyleEntry(RGB.BLACK));
093     table.put(SourceType.KEYWORD, new JavaSourceStyleEntry(new RGB(00192), true, false));
094     table.put(SourceType.CODE_TYPE, new JavaSourceStyleEntry(new RGB(19200), true, false));
095     table.put(SourceType.STRING, new JavaSourceStyleEntry(new RGB(15300)))//darker
096     // red
097     table.put(SourceType.COMMENT_LINE, new JavaSourceStyleEntry(new RGB(01280)))//green
098     table.put(SourceType.COMMENT_BLOCK, new JavaSourceStyleEntry(new RGB(01280)))//green
099     table.put(SourceType.JAVADOC, new JavaSourceStyleEntry(new RGB(01280)))//green
100     table.put(SourceType.JAVADOC_KEYWORD, new JavaSourceStyleEntry(new RGB(0850)));
101     //dark green
102     //    set.put(JavaSourceType.BACKGROUND, new JavaSourceStyleEntry(new
103     // Color(255,251,240)));
104     table.put(SourceType.BACKGROUND, new JavaSourceStyleEntry(new RGB(255255255)));
105     table.put(SourceType.NUM_CONSTANT, new JavaSourceStyleEntry(new RGB(15300)));
106     //dark red
107     table.put(SourceType.CHAR_CONSTANT, new JavaSourceStyleEntry(new RGB(15300)));
108     //dark red
109     table.put(SourceType.PARENTHESIS, new JavaSourceStyleEntry(RGB.BLACK));
110     table.put(SourceType.JAVADOC_HTML_TAG, new JavaSourceStyleEntry(new RGB(01280)));
111     table.put(SourceType.JAVADOC_LINKS, new JavaSourceStyleEntry(new RGB(01280)));
112     table.put(SourceType.LINE_NUMBERS, new JavaSourceStyleEntry(new RGB(128128128)));
113     table.put(SourceType.ANNOTATION, new JavaSourceStyleEntry(new RGB(100100100)));
114     return table;
115   }
116 
117   private static JavaSourceStyleTable createDefaultEclipseStyleTable() {
118     final JavaSourceStyleTable table = new JavaSourceStyleTable("Eclipse")//$NON-NLS-1$
119     table.put(SourceType.CODE, new JavaSourceStyleEntry(RGB.BLACK));
120     table.put(SourceType.KEYWORD, new JavaSourceStyleEntry(new RGB(127085), true, false));
121     table.put(SourceType.CODE_TYPE, new JavaSourceStyleEntry(new RGB(127085), true, false));
122     table.put(SourceType.STRING, new JavaSourceStyleEntry(new RGB(420255)));
123     table.put(SourceType.COMMENT_LINE, new JavaSourceStyleEntry(new RGB(6312795)));
124     table.put(SourceType.COMMENT_BLOCK, new JavaSourceStyleEntry(new RGB(6312795)));
125     table.put(SourceType.JAVADOC, new JavaSourceStyleEntry(new RGB(6395191)));
126     table.put(SourceType.JAVADOC_KEYWORD, new JavaSourceStyleEntry(new RGB(127159191)));
127     table.put(SourceType.NUM_CONSTANT, new JavaSourceStyleEntry(new RGB(15300)));
128     table.put(SourceType.CHAR_CONSTANT, new JavaSourceStyleEntry(new RGB(15300)));
129     table.put(SourceType.PARENTHESIS, new JavaSourceStyleEntry(new RGB(000)));
130     table.put(SourceType.JAVADOC_HTML_TAG, new JavaSourceStyleEntry(new RGB(127127159)));
131     table.put(SourceType.JAVADOC_LINKS, new JavaSourceStyleEntry(new RGB(6363191)));
132     table.put(SourceType.UNDEFINED, new JavaSourceStyleEntry(new RGB(255970)));
133     table.put(SourceType.BACKGROUND, new JavaSourceStyleEntry(new RGB(255255255)));
134     table.put(SourceType.LINE_NUMBERS, new JavaSourceStyleEntry(new RGB(128128128)));
135     table.put(SourceType.ANNOTATION, new JavaSourceStyleEntry(new RGB(100100100)));
136     return table;
137   }
138 
139   private static JavaSourceStyleTable createDefaultMonochromeStyleTable() {
140     final JavaSourceStyleTable table = new JavaSourceStyleTable("Monochrome")//$NON-NLS-1$
141     table.put(SourceType.CODE, new JavaSourceStyleEntry(RGB.BLACK));
142     table.put(SourceType.KEYWORD, new JavaSourceStyleEntry(RGB.BLACK, true, false));
143     table.put(SourceType.CODE_TYPE, new JavaSourceStyleEntry(RGB.BLACK, true, false));
144     table.put(SourceType.STRING, new JavaSourceStyleEntry(RGB.BLACK));
145     table.put(SourceType.COMMENT_LINE, new JavaSourceStyleEntry(RGB.BLACK, false, true));
146     table.put(SourceType.COMMENT_BLOCK, new JavaSourceStyleEntry(RGB.BLACK, false, true));
147     table.put(SourceType.JAVADOC, new JavaSourceStyleEntry(RGB.BLACK, false, true));
148     table.put(SourceType.JAVADOC_KEYWORD, new JavaSourceStyleEntry(RGB.BLACK));
149     table.put(SourceType.NUM_CONSTANT, new JavaSourceStyleEntry(RGB.BLACK));
150     table.put(SourceType.CHAR_CONSTANT, new JavaSourceStyleEntry(RGB.BLACK));
151     table.put(SourceType.PARENTHESIS, new JavaSourceStyleEntry(RGB.BLACK));
152     table.put(SourceType.JAVADOC_HTML_TAG, new JavaSourceStyleEntry(RGB.BLACK));
153     table.put(SourceType.JAVADOC_LINKS, new JavaSourceStyleEntry(RGB.BLACK));
154     table.put(SourceType.UNDEFINED, new JavaSourceStyleEntry(RGB.BLACK));
155     table.put(SourceType.BACKGROUND, new JavaSourceStyleEntry(RGB.WHITE));
156     table.put(SourceType.LINE_NUMBERS, new JavaSourceStyleEntry(RGB.BLACK));
157     table.put(SourceType.ANNOTATION, new JavaSourceStyleEntry(RGB.BLACK));
158     return table;
159   }
160 
161   /**
162    * Sets the style for the given source type to the given style.
163    
164    @see #get(SourceType)
165    */
166   public void put(SourceType key, JavaSourceStyleEntry javaSourceStyleEntry) {
167     put(key.getName(), javaSourceStyleEntry);
168   }
169 
170   public void put(String key, JavaSourceStyleEntry javaSourceStyleEntry) {
171     table.put(key, javaSourceStyleEntry);
172   }
173 
174   /**
175    * Gets a default style table.
176    
177    @see #getDefaultEclipseStyleTable()
178    @see #getDefaultKawaStyleTable()
179    */
180   public static JavaSourceStyleTable getDefault() {
181     return createDefaultEclipseStyleTable();
182   }
183 
184   /**
185    * Gets a style table similar to the one from the Kawa IDE.
186    
187    @see #getDefault()
188    @see #getDefaultEclipseStyleTable()
189    @see #getDefaultMonochromeStyleTable()
190    */
191   public static JavaSourceStyleTable getDefaultKawaStyleTable() {
192     return createDefaultKawaStyleTable();
193   }
194 
195   /**
196    * Gets a style table similar to the one from the IBM Eclipse IDE.
197    
198    @see #getDefault()
199    @see #getDefaultKawaStyleTable()
200    @see #getDefaultMonochromeStyleTable()
201    */
202   public static JavaSourceStyleTable getDefaultEclipseStyleTable() {
203     return createDefaultEclipseStyleTable();
204   }
205 
206   /**
207    * Gets a style table for monochromatic output.
208    
209    @see #getDefault()
210    @see #getDefaultEclipseStyleTable()
211    @see #getDefaultKawaStyleTable()
212    */
213   public static JavaSourceStyleTable getDefaultMonochromeStyleTable() {
214     return createDefaultMonochromeStyleTable();
215   }
216 
217   /**
218    * Returns the style for the given source type defined by this styletable.
219    
220    @see #put(SourceType, JavaSourceStyleEntry)
221    @see #put(SourceType, JavaSourceStyleEntry)
222    */
223   public JavaSourceStyleEntry get(SourceType key) {
224     return get(key.getName());
225   }
226 
227   /** @deprecated As of Sep 12, 2004 (Markus Gebhard), replaced by {@link #get(SourceType)} */
228   @Deprecated
229   public JavaSourceStyleEntry get(String key) {
230     final JavaSourceStyleEntry e = (JavaSourceStyleEntrytable.get(key);
231     return e == null ? defaultColorEntry : e;
232   }
233 
234   public String getName() {
235     return name;
236   }
237 
238   /** @deprecated As of Jan 2, 2004 (Markus Gebhard): Changing the name of a style table is not intended */
239   @Deprecated
240   public void setName(String name) {
241     this.name = name;
242   }
243 }