1 /* TextAttribute.java -- 2 Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. 3 4 This file is part of GNU Classpath. 5 6 GNU Classpath is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 GNU Classpath is distributed in the hope that it will be useful, but 12 WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GNU Classpath; see the file COPYING. If not, write to the 18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 02110-1301 USA. 20 21 Linking this library statically or dynamically with other modules is 22 making a combined work based on this library. Thus, the terms and 23 conditions of the GNU General Public License cover the whole 24 combination. 25 26 As a special exception, the copyright holders of this library give you 27 permission to link this library with independent modules to produce an 28 executable, regardless of the license terms of these independent 29 modules, and to copy and distribute the resulting executable under 30 terms of your choice, provided that you also meet, for each linked 31 independent module, the terms and conditions of the license of that 32 module. An independent module is a module which is not derived from 33 or based on this library. If you modify this library, you may extend 34 this exception to your version of the library, but you are not 35 obligated to do so. If you do not wish to do so, delete this 36 exception statement from your version. */ 37 38 39 package java.awt.font; 40 41 import java.io.InvalidObjectException; 42 import java.text.AttributedCharacterIterator; 43 44 /** 45 * Attributes (and associated values) that can be used to define an 46 * {@link java.text.AttributedString}. 47 */ 48 public final class TextAttribute extends AttributedCharacterIterator.Attribute 49 { 50 private static final long serialVersionUID = 7744112784117861702L; 51 52 /** A key for the background paint attribute. */ 53 public static final TextAttribute BACKGROUND = 54 new TextAttribute("background"); 55 56 /** A key for the BIDI_EMBEDDING attribute. */ 57 public static final TextAttribute BIDI_EMBEDDING = 58 new TextAttribute("bidi_embedding"); 59 60 /** A key for the CHAR_REPLACEMENT attribute. */ 61 public static final TextAttribute CHAR_REPLACEMENT = 62 new TextAttribute("char_replacement"); 63 64 /** A key for the FAMILY attribute. */ 65 public static final TextAttribute FAMILY = new TextAttribute("family"); 66 67 /** A key for the font attribute. */ 68 public static final TextAttribute FONT = new TextAttribute("font"); 69 70 /** A key for the foreground paint attribute. */ 71 public static final TextAttribute FOREGROUND = 72 new TextAttribute("foreground"); 73 74 /** A key for the INPUT_METHOD_HIGHLIGHT attribute. */ 75 public static final TextAttribute INPUT_METHOD_HIGHLIGHT = 76 new TextAttribute("input method highlight"); 77 78 /** A key for the INPUT_METHOD_UNDERLINE attribute. */ 79 public static final TextAttribute INPUT_METHOD_UNDERLINE = 80 new TextAttribute("input method underline"); 81 82 /** A key for the text justification attribute. */ 83 public static final TextAttribute JUSTIFICATION = 84 new TextAttribute("justification"); 85 86 /** 87 * A value that can be used with the {@link #JUSTIFICATION} attribute to 88 * indicate full justification of the text. 89 */ 90 public static final Float JUSTIFICATION_FULL = new Float(1.0); 91 92 /** 93 * A value that can be used with the {@link #JUSTIFICATION} attribute to 94 * indicate no justification of the text. 95 */ 96 public static final Float JUSTIFICATION_NONE = new Float(0.0); 97 98 /** A key for the NUMERIC_SHAPING attribute. */ 99 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 */ TextAttribute(String name)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 */ readResolve()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 } 310