001 /* TextAttribute.java --
002 Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
003
004 This file is part of GNU Classpath.
005
006 GNU Classpath is free software; you can redistribute it and/or modify
007 it under the terms of the GNU General Public License as published by
008 the Free Software Foundation; either version 2, or (at your option)
009 any later version.
010
011 GNU Classpath is distributed in the hope that it will be useful, but
012 WITHOUT ANY WARRANTY; without even the implied warranty of
013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 General Public License for more details.
015
016 You should have received a copy of the GNU General Public License
017 along with GNU Classpath; see the file COPYING. If not, write to the
018 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
019 02110-1301 USA.
020
021 Linking this library statically or dynamically with other modules is
022 making a combined work based on this library. Thus, the terms and
023 conditions of the GNU General Public License cover the whole
024 combination.
025
026 As a special exception, the copyright holders of this library give you
027 permission to link this library with independent modules to produce an
028 executable, regardless of the license terms of these independent
029 modules, and to copy and distribute the resulting executable under
030 terms of your choice, provided that you also meet, for each linked
031 independent module, the terms and conditions of the license of that
032 module. An independent module is a module which is not derived from
033 or based on this library. If you modify this library, you may extend
034 this exception to your version of the library, but you are not
035 obligated to do so. If you do not wish to do so, delete this
036 exception statement from your version. */
037
038
039 package java.awt.font;
040
041 import java.io.InvalidObjectException;
042 import java.text.AttributedCharacterIterator;
043
044 /**
045 * Attributes (and associated values) that can be used to define an
046 * {@link java.text.AttributedString}.
047 */
048 public final class TextAttribute extends AttributedCharacterIterator.Attribute
049 {
050 private static final long serialVersionUID = 7744112784117861702L;
051
052 /** A key for the background paint attribute. */
053 public static final TextAttribute BACKGROUND =
054 new TextAttribute("background");
055
056 /** A key for the BIDI_EMBEDDING attribute. */
057 public static final TextAttribute BIDI_EMBEDDING =
058 new TextAttribute("bidi_embedding");
059
060 /** A key for the CHAR_REPLACEMENT attribute. */
061 public static final TextAttribute CHAR_REPLACEMENT =
062 new TextAttribute("char_replacement");
063
064 /** A key for the FAMILY attribute. */
065 public static final TextAttribute FAMILY = new TextAttribute("family");
066
067 /** A key for the font attribute. */
068 public static final TextAttribute FONT = new TextAttribute("font");
069
070 /** A key for the foreground paint attribute. */
071 public static final TextAttribute FOREGROUND =
072 new TextAttribute("foreground");
073
074 /** A key for the INPUT_METHOD_HIGHLIGHT attribute. */
075 public static final TextAttribute INPUT_METHOD_HIGHLIGHT =
076 new TextAttribute("input method highlight");
077
078 /** A key for the INPUT_METHOD_UNDERLINE attribute. */
079 public static final TextAttribute INPUT_METHOD_UNDERLINE =
080 new TextAttribute("input method underline");
081
082 /** A key for the text justification attribute. */
083 public static final TextAttribute JUSTIFICATION =
084 new TextAttribute("justification");
085
086 /**
087 * A value that can be used with the {@link #JUSTIFICATION} attribute to
088 * indicate full justification of the text.
089 */
090 public static final Float JUSTIFICATION_FULL = new Float(1.0);
091
092 /**
093 * A value that can be used with the {@link #JUSTIFICATION} attribute to
094 * indicate no justification of the text.
095 */
096 public static final Float JUSTIFICATION_NONE = new Float(0.0);
097
098 /** A key for the NUMERIC_SHAPING attribute. */
099 public static final TextAttribute NUMERIC_SHAPING =
100 new TextAttribute("numeric_shaping");
101
102 /** A key for the POSTURE attribute. */
103 public static final TextAttribute POSTURE = new TextAttribute("posture");
104
105 /** A value that can be used with the {@link #POSTURE} attribute. */
106 public static final Float POSTURE_OBLIQUE = new Float(0.2);
107
108 /** A value that can be used with the {@link #POSTURE} attribute. */
109 public static final Float POSTURE_REGULAR = new Float(0.0);
110
111 /** A key for the RUN_DIRECTION attribute. */
112 public static final TextAttribute RUN_DIRECTION =
113 new TextAttribute("run_direction");
114
115 /** A value that can be used with the {@link #RUN_DIRECTION} attribute. */
116 public static final Boolean RUN_DIRECTION_LTR = Boolean.FALSE;
117
118 /** A value that can be used with the {@link #RUN_DIRECTION} attribute. */
119 public static final Boolean RUN_DIRECTION_RTL = Boolean.TRUE;
120
121 /** A key for the text size attribute. */
122 public static final TextAttribute SIZE = new TextAttribute("size");
123
124 /** A key for the STRIKETHROUGH attribute. */
125 public static final TextAttribute STRIKETHROUGH =
126 new TextAttribute("strikethrough");
127
128 /** A value that can be used with the {@link #STRIKETHROUGH} attribute. */
129 public static final Boolean STRIKETHROUGH_ON = Boolean.TRUE;
130
131 /** A key for the SUPERSCRIPT attribute. */
132 public static final TextAttribute SUPERSCRIPT =
133 new TextAttribute("superscript");
134
135 /** A value that can be used with the {@link #SUPERSCRIPT} attribute. */
136 public static final Integer SUPERSCRIPT_SUB = new Integer(-1);
137
138 /** A value that can be used with the {@link #SUPERSCRIPT} attribute. */
139 public static final Integer SUPERSCRIPT_SUPER = new Integer(1);
140
141 /** A key for the SWAP_COLORS attribute. */
142 public static final TextAttribute SWAP_COLORS =
143 new TextAttribute("swap_colors");
144
145 /** A value that can be used with the {@link #SWAP_COLORS} attribute. */
146 public static final Boolean SWAP_COLORS_ON = Boolean.TRUE;
147
148 /** A key for the TRANFORM attribute. */
149 public static final TextAttribute TRANSFORM = new TextAttribute("transform");
150
151 /** A key for the UNDERLINE attribute. */
152 public static final TextAttribute UNDERLINE = new TextAttribute("underline");
153
154 /** A value that can be used with the {@link #UNDERLINE} attribute. */
155 public static final Integer UNDERLINE_LOW_DASHED = new Integer(5);
156
157 /** A value that can be used with the {@link #UNDERLINE} attribute. */
158 public static final Integer UNDERLINE_LOW_DOTTED = new Integer(3);
159
160 /** A value that can be used with the {@link #UNDERLINE} attribute. */
161 public static final Integer UNDERLINE_LOW_GRAY = new Integer(4);
162
163 /** A value that can be used with the {@link #UNDERLINE} attribute. */
164 public static final Integer UNDERLINE_LOW_ONE_PIXEL = new Integer(1);
165
166 /** A value that can be used with the {@link #UNDERLINE} attribute. */
167 public static final Integer UNDERLINE_LOW_TWO_PIXEL = new Integer(2);
168
169 /** A value that can be used with the {@link #UNDERLINE} attribute. */
170 public static final Integer UNDERLINE_ON = new Integer(0);
171
172 /** A key for the WEIGHT attribute. */
173 public static final TextAttribute WEIGHT = new TextAttribute("weight");
174
175 /** A value that can be used with the {@link #WEIGHT} attribute. */
176 public static final Float WEIGHT_BOLD = new Float(2.0);
177
178 /** A value that can be used with the {@link #WEIGHT} attribute. */
179 public static final Float WEIGHT_DEMIBOLD = new Float(1.75);
180
181 /** A value that can be used with the {@link #WEIGHT} attribute. */
182 public static final Float WEIGHT_DEMILIGHT = new Float(0.875);
183
184 /** A value that can be used with the {@link #WEIGHT} attribute. */
185 public static final Float WEIGHT_EXTRA_LIGHT = new Float(0.5);
186
187 /** A value that can be used with the {@link #WEIGHT} attribute. */
188 public static final Float WEIGHT_EXTRABOLD = new Float(2.5);
189
190 /** A value that can be used with the {@link #WEIGHT} attribute. */
191 public static final Float WEIGHT_HEAVY = new Float(2.25);
192
193 /** A value that can be used with the {@link #WEIGHT} attribute. */
194 public static final Float WEIGHT_LIGHT = new Float(0.75);
195
196 /** A value that can be used with the {@link #WEIGHT} attribute. */
197 public static final Float WEIGHT_MEDIUM = new Float(1.5);
198
199 /** A value that can be used with the {@link #WEIGHT} attribute. */
200 public static final Float WEIGHT_REGULAR = new Float(1.0);
201
202 /** A value that can be used with the {@link #WEIGHT} attribute. */
203 public static final Float WEIGHT_SEMIBOLD = new Float(1.25);
204
205 /** A value that can be used with the {@link #WEIGHT} attribute. */
206 public static final Float WEIGHT_ULTRABOLD = new Float(2.75);
207
208 /** A key for the WIDTH attribute. */
209 public static final TextAttribute WIDTH = new TextAttribute("width");
210
211 /** A value that can be used with the {@link #WIDTH} attribute. */
212 public static final Float WIDTH_CONDENSED = new Float(0.75);
213
214 /** A value that can be used with the {@link #WIDTH} attribute. */
215 public static final Float WIDTH_EXTENDED = new Float(1.5);
216
217 /** A value that can be used with the {@link #WIDTH} attribute. */
218 public static final Float WIDTH_REGULAR = new Float(1.0);
219
220 /** A value that can be used with the {@link #WIDTH} attribute. */
221 public static final Float WIDTH_SEMI_CONDENSED = new Float(0.875);
222
223 /** A value that can be used with the {@link #WIDTH} attribute. */
224 public static final Float WIDTH_SEMI_EXTENDED = new Float(1.25);
225
226 /**
227 * Creates a new attribute.
228 *
229 * @param name the name.
230 */
231 protected TextAttribute(String name)
232 {
233 super(name);
234 }
235
236 /**
237 * After deserialization, this method ensures that only one instance of
238 * each attribute is used.
239 *
240 * @return The (single) attribute instance.
241 *
242 * @throws InvalidObjectException if the attribute is not recognised.
243 */
244 protected Object readResolve()
245 throws InvalidObjectException
246 {
247 if (this.getName().equals("background"))
248 return BACKGROUND;
249
250 if (this.getName().equals("bidi_embedding"))
251 return BIDI_EMBEDDING;
252
253 if (this.getName().equals("char_replacement"))
254 return CHAR_REPLACEMENT;
255
256 if (this.getName().equals("family"))
257 return FAMILY;
258
259 if (this.getName().equals("font"))
260 return FONT;
261
262 if (this.getName().equals("foreground"))
263 return FOREGROUND;
264
265 if (this.getName().equals("input method highlight"))
266 return INPUT_METHOD_HIGHLIGHT;
267
268 if (this.getName().equals("input method underline"))
269 return INPUT_METHOD_UNDERLINE;
270
271 if (this.getName().equals("justification"))
272 return JUSTIFICATION;
273
274 if (this.getName().equals("numeric_shaping"))
275 return NUMERIC_SHAPING;
276
277 if (this.getName().equals("posture"))
278 return POSTURE;
279
280 if (this.getName().equals("run_direction"))
281 return RUN_DIRECTION;
282
283 if (this.getName().equals("size"))
284 return SIZE;
285
286 if (this.getName().equals("strikethrough"))
287 return STRIKETHROUGH;
288
289 if (this.getName().equals("superscript"))
290 return SUPERSCRIPT;
291
292 if (this.getName().equals("swap_colors"))
293 return SWAP_COLORS;
294
295 if (this.getName().equals("transform"))
296 return TRANSFORM;
297
298 if (this.getName().equals("underline"))
299 return UNDERLINE;
300
301 if (this.getName().equals("weight"))
302 return WEIGHT;
303
304 if (this.getName().equals("width"))
305 return WIDTH;
306
307 throw new InvalidObjectException("Can't resolve Attribute: " + getName());
308 }
309 }