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 }