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 = (JavaSourceStyleTable) obj;
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 = (String) iterator.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 = (String) iterator.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(255, 97, 0)));
092 table.put(SourceType.CODE, new JavaSourceStyleEntry(RGB.BLACK));
093 table.put(SourceType.KEYWORD, new JavaSourceStyleEntry(new RGB(0, 0, 192), true, false));
094 table.put(SourceType.CODE_TYPE, new JavaSourceStyleEntry(new RGB(192, 0, 0), true, false));
095 table.put(SourceType.STRING, new JavaSourceStyleEntry(new RGB(153, 0, 0))); //darker
096 // red
097 table.put(SourceType.COMMENT_LINE, new JavaSourceStyleEntry(new RGB(0, 128, 0))); //green
098 table.put(SourceType.COMMENT_BLOCK, new JavaSourceStyleEntry(new RGB(0, 128, 0))); //green
099 table.put(SourceType.JAVADOC, new JavaSourceStyleEntry(new RGB(0, 128, 0))); //green
100 table.put(SourceType.JAVADOC_KEYWORD, new JavaSourceStyleEntry(new RGB(0, 85, 0)));
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(255, 255, 255)));
105 table.put(SourceType.NUM_CONSTANT, new JavaSourceStyleEntry(new RGB(153, 0, 0)));
106 //dark red
107 table.put(SourceType.CHAR_CONSTANT, new JavaSourceStyleEntry(new RGB(153, 0, 0)));
108 //dark red
109 table.put(SourceType.PARENTHESIS, new JavaSourceStyleEntry(RGB.BLACK));
110 table.put(SourceType.JAVADOC_HTML_TAG, new JavaSourceStyleEntry(new RGB(0, 128, 0)));
111 table.put(SourceType.JAVADOC_LINKS, new JavaSourceStyleEntry(new RGB(0, 128, 0)));
112 table.put(SourceType.LINE_NUMBERS, new JavaSourceStyleEntry(new RGB(128, 128, 128)));
113 table.put(SourceType.ANNOTATION, new JavaSourceStyleEntry(new RGB(100, 100, 100)));
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(127, 0, 85), true, false));
121 table.put(SourceType.CODE_TYPE, new JavaSourceStyleEntry(new RGB(127, 0, 85), true, false));
122 table.put(SourceType.STRING, new JavaSourceStyleEntry(new RGB(42, 0, 255)));
123 table.put(SourceType.COMMENT_LINE, new JavaSourceStyleEntry(new RGB(63, 127, 95)));
124 table.put(SourceType.COMMENT_BLOCK, new JavaSourceStyleEntry(new RGB(63, 127, 95)));
125 table.put(SourceType.JAVADOC, new JavaSourceStyleEntry(new RGB(63, 95, 191)));
126 table.put(SourceType.JAVADOC_KEYWORD, new JavaSourceStyleEntry(new RGB(127, 159, 191)));
127 table.put(SourceType.NUM_CONSTANT, new JavaSourceStyleEntry(new RGB(153, 0, 0)));
128 table.put(SourceType.CHAR_CONSTANT, new JavaSourceStyleEntry(new RGB(153, 0, 0)));
129 table.put(SourceType.PARENTHESIS, new JavaSourceStyleEntry(new RGB(0, 0, 0)));
130 table.put(SourceType.JAVADOC_HTML_TAG, new JavaSourceStyleEntry(new RGB(127, 127, 159)));
131 table.put(SourceType.JAVADOC_LINKS, new JavaSourceStyleEntry(new RGB(63, 63, 191)));
132 table.put(SourceType.UNDEFINED, new JavaSourceStyleEntry(new RGB(255, 97, 0)));
133 table.put(SourceType.BACKGROUND, new JavaSourceStyleEntry(new RGB(255, 255, 255)));
134 table.put(SourceType.LINE_NUMBERS, new JavaSourceStyleEntry(new RGB(128, 128, 128)));
135 table.put(SourceType.ANNOTATION, new JavaSourceStyleEntry(new RGB(100, 100, 100)));
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 = (JavaSourceStyleEntry) table.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 }
|