API Overview API Index Package Overview Direct link to this page
JDK 1.6
  java.awt.font. TextAttribute View Javadoc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099

/*
 * @(#)TextAttribute.java	1.52 06/04/07
 *
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

/*
 * (C) Copyright Taligent, Inc. 1996 - 1997, All Rights Reserved
 * (C) Copyright IBM Corp. 1996 - 1998, All Rights Reserved
 *
 * The original version of this source code and documentation is
 * copyrighted and owned by Taligent, Inc., a wholly-owned subsidiary
 * of IBM. These materials are provided under terms of a License
 * Agreement between Taligent and Sun. This technology is protected
 * by multiple US and International patents.
 *
 * This notice and attribution to Taligent may not be removed.
 * Taligent is a registered trademark of Taligent, Inc.
 *
 */

package java.awt.font;

import java.io.InvalidObjectException;
import java.text.AttributedCharacterIterator.Attribute;
import java.util.Map;
import java.util.HashMap;

/**
 * The <code>TextAttribute</code> class defines attribute keys and
 * attribute values used for text rendering. 
 * <p>
 * <code>TextAttribute</code> instances are used as attribute keys to
 * identify attributes in 
 * {@link java.awt.Font Font},
 * {@link java.awt.font.TextLayout TextLayout},
 * {@link java.text.AttributedCharacterIterator AttributedCharacterIterator}, 
 * and other classes handling text attributes. Other constants defined
 * in this class can be used as attribute values.
 * <p>
 * For each text attribute, the documentation provides:
 * <UL>
 *   <LI>the type of its value,
 *   <LI>the relevant predefined constants, if any
 *   <LI>the default effect if the attribute is absent
 *   <LI>the valid values if there are limitations
 *   <LI>a description of the effect.
 * </UL>
 * <p>
 * <H4>Values</H4>
 * <UL>
 *   <LI>The values of attributes must always be immutable.
 *   <LI>Where value limitations are given, any value outside of that
 *   set is reserved for future use; the value will be treated as
 *   the default.
 *   <LI>The value <code>null</code> is treated the same as the
 *   default value and results in the default behavior.
 *   <li>If the value is not of the proper type, the attribute
 *   will be ignored.
 *   <li>The identity of the value does not matter, only the actual
 *   value.  For example, <code>TextAttribute.WEIGHT_BOLD</code> and 
 *   <code>new Float(2.0)</code>
 *   indicate the same <code>WEIGHT</code>.
 *   <li>Attribute values of type <code>Number</code> (used for
 *   <code>WEIGHT</code>, <code>WIDTH</code>, <code>POSTURE</code>,
 *   <code>SIZE</code>, <code>JUSTIFICATION</code>, and
 *   <code>TRACKING</code>) can vary along their natural range and are
 *   not restricted to the predefined constants.
 *   <code>Number.floatValue()</code> is used to get the actual value
 *   from the <code>Number</code>.
 *   <li>The values for <code>WEIGHT</code>, <code>WIDTH</code>, and
 *   <code>POSTURE</code> are interpolated by the system, which
 *   can select the 'nearest available' font or use other techniques to
 *   approximate the user's request.
 *
 * </UL>
 * 
 * <h4>Summary of attributes</h4>
 * <p>
 * <font size="-1">
 * <table align="center" border="0" cellspacing="0" cellpadding="2" width="%95"
 *     summary="Key, value type, principal constants, and default value
 *     behavior of all TextAttributes">
 * <tr bgcolor="#ccccff">
 * <th valign="TOP" align="CENTER">Key</th>
 * <th valign="TOP" align="CENTER">Value Type</th>
 * <th valign="TOP" align="CENTER">Principal Constants</th>
 * <th valign="TOP" align="CENTER">Default Value</th>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #FAMILY}</td>
 * <td valign="TOP">String</td>
 * <td valign="TOP">See Font {@link java.awt.Font#DIALOG DIALOG},
{@link java.awt.Font#DIALOG_INPUT DIALOG_INPUT},<br> {@link java.awt.Font#SERIF SERIF},
{@link java.awt.Font#SANS_SERIF SANS_SERIF}, and {@link java.awt.Font#MONOSPACED MONOSPACED}.
</td>
 * <td valign="TOP">"Default" (use platform default)</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #WEIGHT}</td>
 * <td valign="TOP">Number</td>
 * <td valign="TOP">WEIGHT_REGULAR, WEIGHT_BOLD</td>
 * <td valign="TOP">WEIGHT_REGULAR</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #WIDTH}</td>
 * <td valign="TOP">Number</td>
 * <td valign="TOP">WIDTH_CONDENSED, WIDTH_REGULAR,<br>WIDTH_EXTENDED</td>
 * <td valign="TOP">WIDTH_REGULAR</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #POSTURE}</td>
 * <td valign="TOP">Number</td>
 * <td valign="TOP">POSTURE_REGULAR, POSTURE_OBLIQUE</td>
 * <td valign="TOP">POSTURE_REGULAR</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #SIZE}</td>
 * <td valign="TOP">Number</td>
 * <td valign="TOP">none</td>
 * <td valign="TOP">12.0</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #TRANSFORM}</td>
 * <td valign="TOP">{@link TransformAttribute}</td>
 * <td valign="TOP">See TransformAttribute {@link TransformAttribute#IDENTITY IDENTITY}</td>
 * <td valign="TOP">TransformAttribute.IDENTITY</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #SUPERSCRIPT}</td>
 * <td valign="TOP">Integer</td>
 * <td valign="TOP">SUPERSCRIPT_SUPER, SUPERSCRIPT_SUB</td>
 * <td valign="TOP">0 (use the standard glyphs and metrics)</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #FONT}</td>
 * <td valign="TOP">{@link java.awt.Font}</td>
 * <td valign="TOP">none</td>
 * <td valign="TOP">null (do not override font resolution)</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #CHAR_REPLACEMENT}</td>
 * <td valign="TOP">{@link GraphicAttribute}</td>
 * <td valign="TOP">none</td>
 * <td valign="TOP">null (draw text using font glyphs)</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #FOREGROUND}</td>
 * <td valign="TOP">{@link java.awt.Paint}</td>
 * <td valign="TOP">none</td>
 * <td valign="TOP">null (use current graphics paint)</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #BACKGROUND}</td>
 * <td valign="TOP">{@link java.awt.Paint}</td>
 * <td valign="TOP">none</td>
 * <td valign="TOP">null (do not render background)</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #UNDERLINE}</td>
 * <td valign="TOP">Integer</td>
 * <td valign="TOP">UNDERLINE_ON</td>
 * <td valign="TOP">-1 (do not render underline)</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #STRIKETHROUGH}</td>
 * <td valign="TOP">Boolean</td>
 * <td valign="TOP">STRIKETHROUGH_ON</td>
 * <td valign="TOP">false (do not render strikethrough)</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #RUN_DIRECTION}</td>
 * <td valign="TOP">Boolean</td>
 * <td valign="TOP">RUN_DIRECTION_LTR<br>RUN_DIRECTION_RTL</td>
 * <td valign="TOP">null (use {@link java.text.Bidi} standard default)</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #BIDI_EMBEDDING}</td>
 * <td valign="TOP">Integer</td>
 * <td valign="TOP">none</td>
 * <td valign="TOP">0 (use base line direction)</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #JUSTIFICATION}</td>
 * <td valign="TOP">Number</td>
 * <td valign="TOP">JUSTIFICATION_FULL</td>
 * <td valign="TOP">JUSTIFICATION_FULL</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #INPUT_METHOD_HIGHLIGHT}</td>
 * <td valign="TOP">{@link java.awt.im.InputMethodHighlight},<br>{@link java.text.Annotation}</td>
 * <td valign="TOP">(see class)</td>
 * <td valign="TOP">null (do not apply input highlighting)</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #INPUT_METHOD_UNDERLINE}</td>
 * <td valign="TOP">Integer</td>
 * <td valign="TOP">UNDERLINE_LOW_ONE_PIXEL,<br>UNDERLINE_LOW_TWO_PIXEL</td>
 * <td valign="TOP">-1 (do not render underline)</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #SWAP_COLORS}</td>
 * <td valign="TOP">Boolean</td>
 * <td valign="TOP">SWAP_COLORS_ON</td>
 * <td valign="TOP">false (do not swap colors)</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #NUMERIC_SHAPING}</td>
 * <td valign="TOP">{@link java.awt.font.NumericShaper}</td>
 * <td valign="TOP">none</td>
 * <td valign="TOP">null (do not shape digits)</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #KERNING}</td>
 * <td valign="TOP">Integer</td>
 * <td valign="TOP">KERNING_ON</td>
 * <td valign="TOP">0 (do not request kerning)</td>
 * </tr>
 * <tr bgcolor="#eeeeff">
 * <td valign="TOP">{@link #LIGATURES}</td>
 * <td valign="TOP">Integer</td>
 * <td valign="TOP">LIGATURES_ON</td>
 * <td valign="TOP">0 (do not form optional ligatures)</td>
 * </tr>
 * <tr>
 * <td valign="TOP">{@link #TRACKING}</td>
 * <td valign="TOP">Number</td>
 * <td valign="TOP">TRACKING_LOOSE, TRACKING_TIGHT</td>
 * <td valign="TOP">0 (do not add tracking)</td>
 * </tr>
 * </table>
 * </font>
 *
 * @see java.awt.Font 
 * @see java.awt.font.TextLayout
 * @see java.text.AttributedCharacterIterator 
 */
public final class TextAttribute extends Attribute {

    // table of all instances in this class, used by readResolve
    private static final Map instanceMap = new HashMap(29);

    /**
     * Constructs a <code>TextAttribute</code> with the specified name.
     * @param name the attribute name to assign to this 
     * <code>TextAttribute</code>
     */
    protected TextAttribute(String name) {
        super(name);
        if (this.getClass() == TextAttribute.class) {
            instanceMap.put(name, this);
        }
    }

    /**
     * Resolves instances being deserialized to the predefined constants.
     */
    protected Object readResolve() throws InvalidObjectException {
        if (this.getClass() != TextAttribute.class) {
            throw new InvalidObjectException(
		"subclass didn't correctly implement readResolve");
        }
        
        TextAttribute instance = (TextAttribute) instanceMap.get(getName());
        if (instance != null) {
            return instance;
        } else {
            throw new InvalidObjectException("unknown attribute name");
        }
    }
    
    // Serialization compatibility with Java 2 platform v1.2.
    // 1.2 will throw an InvalidObjectException if ever asked to 
    // deserialize INPUT_METHOD_UNDERLINE.
    // This shouldn't happen in real life.
    static final long serialVersionUID = 7744112784117861702L;

    // 
    // For use with Font.
    //

    /**
     * Attribute key for the font name.  Values are instances of
     * <b><code>String</code></b>.  The default value is
     * <code>"Default"</code>, which causes the platform default font
     * family to be used.
     * 
     * <p> The <code>Font</code> class defines constants for the logical
     * font names 
     * {@link java.awt.Font#DIALOG DIALOG}, 
     * {@link java.awt.Font#DIALOG_INPUT DIALOG_INPUT}, 
     * {@link java.awt.Font#SANS_SERIF SANS_SERIF}, 
     * {@link java.awt.Font#SERIF SERIF}, and 
     * {@link java.awt.Font#MONOSPACED MONOSPACED}.
     * 
     * <p>This defines the value passed as <code>name</code> to the 
     * <code>Font</code> constructor.  Both logical and physical
     * font names are allowed. If a font with the requested name
     * is not found, the default font is used.
     * 
     * <p><em>Note:</em> This attribute is unfortunately misnamed, as
     * it specifies the face name and not just the family.  Thus
     * values such as "Lucida Sans Bold" will select that face if it
     * exists.  Note, though, that if the requested face does not
     * exist, the default will be used with <em>regular</em> weight.
     * The "Bold" in the name is part of the face name, not a separate
     * request that the font's weight be bold.</p> 
     */
    public static final TextAttribute FAMILY = 
	new TextAttribute("family");

    /**
     * Attribute key for the weight of a font.  Values are instances
     * of <b><code>Number</code></b>.  The default value is
     * <code>WEIGHT_REGULAR</code>.
     * 
     * <p>Several constant values are provided, see {@link
     * #WEIGHT_EXTRA_LIGHT}, {@link #WEIGHT_LIGHT}, {@link
     * #WEIGHT_DEMILIGHT}, {@link #WEIGHT_REGULAR}, {@link
     * #WEIGHT_SEMIBOLD}, {@link #WEIGHT_MEDIUM}, {@link
     * #WEIGHT_DEMIBOLD}, {@link #WEIGHT_BOLD}, {@link #WEIGHT_HEAVY},
     * {@link #WEIGHT_EXTRABOLD}, and {@link #WEIGHT_ULTRABOLD}.  The
     * value <code>WEIGHT_BOLD</code> corresponds to the
     * style value <code>Font.BOLD</code> as passed to the
     * <code>Font</code> constructor.
     * 
     * <p>The value is roughly the ratio of the stem width to that of
     * the regular weight.
     *
     * <p>The system can interpolate the provided value.
     */
    public static final TextAttribute WEIGHT = 
	new TextAttribute("weight");

    /**
     * The lightest predefined weight.
     * @see #WEIGHT
     */
    public static final Float WEIGHT_EXTRA_LIGHT = 
	Float.valueOf(0.5f);

    /**
     * The standard light weight.
     * @see #WEIGHT
     */
    public static final Float WEIGHT_LIGHT = 
	Float.valueOf(0.75f);

    /**
     * An intermediate weight between <code>WEIGHT_LIGHT</code> and
     * <code>WEIGHT_STANDARD</code>.
     * @see #WEIGHT 
     */
    public static final Float WEIGHT_DEMILIGHT = 
	Float.valueOf(0.875f);

    /**
     * The standard weight. This is the default value for <code>WEIGHT</code>.
     * @see #WEIGHT
     */
    public static final Float WEIGHT_REGULAR = 
	Float.valueOf(1.0f);

    /**
     * A moderately heavier weight than <code>WEIGHT_REGULAR</code>.
     * @see #WEIGHT
     */
    public static final Float WEIGHT_SEMIBOLD = 
	Float.valueOf(1.25f);

    /**
     * An intermediate weight between <code>WEIGHT_REGULAR</code> and
     * <code>WEIGHT_BOLD</code>.
     * @see #WEIGHT 
     */
    public static final Float WEIGHT_MEDIUM = 
	Float.valueOf(1.5f);

    /**
     * A moderately lighter weight than <code>WEIGHT_BOLD</code>.
     * @see #WEIGHT
     */
    public static final Float WEIGHT_DEMIBOLD = 
	Float.valueOf(1.75f);

    /**
     * The standard bold weight.
     * @see #WEIGHT
     */
    public static final Float WEIGHT_BOLD = 
	Float.valueOf(2.0f);

    /**
     * A moderately heavier weight than <code>WEIGHT_BOLD</code>.
     * @see #WEIGHT
     */
    public static final Float WEIGHT_HEAVY = 
	Float.valueOf(2.25f);

    /**
     * An extra heavy weight.
     * @see #WEIGHT
     */
    public static final Float WEIGHT_EXTRABOLD = 
	Float.valueOf(2.5f);

    /**
     * The heaviest predefined weight.
     * @see #WEIGHT
     */
    public static final Float WEIGHT_ULTRABOLD = 
	Float.valueOf(2.75f);

    /**
     * Attribute key for the width of a font.  Values are instances of
     * <b><code>Number</code></b>.  The default value is
     * <code>WIDTH_REGULAR</code>.
     * 
     * <p>Several constant values are provided, see {@link
     * #WIDTH_CONDENSED}, {@link #WIDTH_SEMI_CONDENSED}, {@link
     * #WIDTH_REGULAR}, {@link #WIDTH_SEMI_EXTENDED}, {@link
     * #WIDTH_EXTENDED}.
     * 
     * <p>The value is roughly the ratio of the advance width to that
     * of the regular width.
     *
     * <p>The system can interpolate the provided value.
     */
    public static final TextAttribute WIDTH = 
	new TextAttribute("width");

    /**
     * The most condensed predefined width.
     * @see #WIDTH
     */
    public static final Float WIDTH_CONDENSED = 
	Float.valueOf(0.75f);

    /**
     * A moderately condensed width.
     * @see #WIDTH
     */
    public static final Float WIDTH_SEMI_CONDENSED = 
	Float.valueOf(0.875f);

    /**
     * The standard width. This is the default value for
     * <code>WIDTH</code>.
     * @see #WIDTH 
     */
    public static final Float WIDTH_REGULAR =
	Float.valueOf(1.0f);

    /**
     * A moderately extended width.
     * @see #WIDTH
     */
    public static final Float WIDTH_SEMI_EXTENDED = 
	Float.valueOf(1.25f);

    /**
     * The most extended predefined width.
     * @see #WIDTH
     */
    public static final Float WIDTH_EXTENDED = 
	Float.valueOf(1.5f);

    /**
     * Attribute key for the posture of a font.  Values are instances
     * of <b><code>Number</code></b>. The default value is
     * <code>POSTURE_REGULAR</code>.
     *
     * <p>Two constant values are provided, {@link #POSTURE_REGULAR}
     * and {@link #POSTURE_OBLIQUE}. The value
     * <code>POSTURE_OBLIQUE</code> corresponds to the style value
     * <code>Font.ITALIC</code> as passed to the <code>Font</code>
     * constructor.
     *
     * <p>The value is roughly the slope of the stems of the font,
     * expressed as the run over the rise.  Positive values lean right.
     *
     * <p>The system can interpolate the provided value.
     *
     * <p>This will affect the font's italic angle as returned by
     * <code>Font.getItalicAngle</code>.
     *
     * @see java.awt.Font#getItalicAngle() 
     */
    public static final TextAttribute POSTURE = 
	new TextAttribute("posture");

    /**
     * The standard posture, upright.  This is the default value for
     * <code>POSTURE</code>.
     * @see #POSTURE 
     */
    public static final Float POSTURE_REGULAR = 
	Float.valueOf(0.0f);

    /**
     * The standard italic posture.
     * @see #POSTURE
     */
    public static final Float POSTURE_OBLIQUE = 
	Float.valueOf(0.20f);

    /**
     * Attribute key for the font size.  Values are instances of
     * <b><code>Number</code></b>.  The default value is 12pt.
     * 
     * <p>This corresponds to the <code>size</code> parameter to the 
     * <code>Font</code> constructor.  
     * 
     * <p>Very large or small sizes will impact rendering performance,
     * and the rendering system might not render text at these sizes.
     * Negative sizes are illegal and result in the default size.
     * 
     * <p>Note that the appearance and metrics of a 12pt font with a
     * 2x transform might be different than that of a 24 point font
     * with no transform.  
     */
    public static final TextAttribute SIZE = 
	new TextAttribute("size");

    /**
     * Attribute key for the transform of a font.  Values are
     * instances of <b><code>TransformAttribute</code></b>.  The
     * default value is <code>TransformAttribute.IDENTITY</code>.
     * 
     * <p>The <code>TransformAttribute</code> class defines the
     * constant {@link TransformAttribute#IDENTITY IDENTITY}.
     * 
     * <p>This corresponds to the transform passed to
     * <code>Font.deriveFont(AffineTransform)</code>.  Since that
     * transform is mutable and <code>TextAttribute</code> values must
     * not be, the <code>TransformAttribute</code> wrapper class is
     * used.
     * 
     * <p>The primary intent is to support scaling and skewing, though
     * other effects are possible.</p>
     *
     * <p>Some transforms will cause the baseline to be rotated and/or
     * shifted.  The text and the baseline are transformed together so
     * that the text follows the new baseline.  For example, with text
     * on a horizontal baseline, the new baseline follows the
     * direction of the unit x vector passed through the
     * transform. Text metrics are measured against this new baseline.
     * So, for example, with other things being equal, text rendered
     * with a rotated TRANSFORM and an unrotated TRANSFORM will measure as
     * having the same ascent, descent, and advance.</p>
     *
     * <p>In styled text, the baselines for each such run are aligned
     * one after the other to potentially create a non-linear baseline
     * for the entire run of text. For more information, see {@link
     * TextLayout#getLayoutPath}.</p>
     *
     * @see TransformAttribute
     * @see java.awt.geom.AffineTransform 
     */
     public static final TextAttribute TRANSFORM = 
	new TextAttribute("transform");

    /**
     * Attribute key for superscripting and subscripting.  Values are
     * instances of <b><code>Integer</code></b>.  The default value is
     * 0, which means that no superscript or subscript is used.
     * 
     * <p>Two constant values are provided, see {@link
     * #SUPERSCRIPT_SUPER} and {@link #SUPERSCRIPT_SUB}.  These have
     * the values 1 and -1 respectively.  Values of
     * greater magnitude define greater levels of superscript or
     * subscripting, for example, 2 corresponds to super-superscript,
     * 3 to super-super-superscript, and similarly for negative values
     * and subscript, up to a level of 7 (or -7).  Values beyond this
     * range are reserved; behavior is platform-dependent.
     * 
     * <p><code>SUPERSCRIPT</code> can
     * impact the ascent and descent of a font.  The ascent
     * and descent can never become negative, however.
     */
    public static final TextAttribute SUPERSCRIPT = 
	new TextAttribute("superscript");

    /**
     * Standard superscript.
     * @see #SUPERSCRIPT
     */
    public static final Integer SUPERSCRIPT_SUPER = 
	Integer.valueOf(1);

    /**
     * Standard subscript.
     * @see #SUPERSCRIPT
     */
    public static final Integer SUPERSCRIPT_SUB = 
	Integer.valueOf(-1);

    /**
     * Attribute key used to provide the font to use to render text.
     * Values are instances of {@link java.awt.Font}.  The default
     * value is null, indicating that normal resolution of a
     * <code>Font</code> from attributes should be performed.
     * 
     * <p><code>TextLayout</code> and
     * <code>AttributedCharacterIterator</code> work in terms of
     * <code>Maps</code> of <code>TextAttributes</code>.  Normally,
     * all the attributes are examined and used to select and
     * configure a <code>Font</code> instance.  If a <code>FONT</code>
     * attribute is present, though, its associated <code>Font</code>
     * will be used.  This provides a way for users to override the
     * resolution of font attributes into a <code>Font</code>, or
     * force use of a particular <code>Font</code> instance.  This
     * also allows users to specify subclasses of <code>Font</code> in
     * cases where a <code>Font</code> can be subclassed.
     *
     * <p><code>FONT</code> is used for special situations where
     * clients already have a <code>Font</code> instance but still
     * need to use <code>Map</code>-based APIs.  Typically, there will
     * be no other attributes in the <code>Map</code> except the
     * <code>FONT</code> attribute.  With <code>Map</code>-based APIs
     * the common case is to specify all attributes individually, so
     * <code>FONT</code> is not needed or desireable.
     *
     * <p>However, if both <code>FONT</code> and other attributes are
     * present in the <code>Map</code>, the rendering system will
     * merge the attributes defined in the <code>Font</code> with the
     * additional attributes.  This merging process classifies
     * <code>TextAttributes</code> into two groups.  One group, the
     * 'primary' group, is considered fundamental to the selection and
     * metric behavior of a font.  These attributes are
     * <code>FAMILY</code>, <code>WEIGHT</code>, <code>WIDTH</code>,
     * <code>POSTURE</code>, <code>SIZE</code>,
     * <code>TRANSFORM</code>, <code>SUPERSCRIPT</code>, and
     * <code>TRACKING</code>. The other group, the 'secondary' group,
     * consists of all other defined attributes, with the exception of
     * <code>FONT</code> itself.
     * 
     * <p>To generate the new <code>Map</code>, first the
     * <code>Font</code> is obtained from the <code>FONT</code>
     * attribute, and <em>all</em> of its attributes extracted into a
     * new <code>Map</code>.  Then only the <em>secondary</em>
     * attributes from the original <code>Map</code> are added to
     * those in the new <code>Map</code>.  Thus the values of primary
     * attributes come solely from the <code>Font</code>, and the
     * values of secondary attributes originate with the
     * <code>Font</code> but can be overridden by other values in the
     * <code>Map</code>.
     * 
     * <p><em>Note:</em><code>Font's</code> <code>Map</code>-based
     * constructor and <code>deriveFont</code> methods do not process
     * the <code>FONT</code> attribute, as these are used to create
     * new <code>Font</code> objects.  Instead, {@link
     * java.awt.Font#getFont(Map) Font.getFont(Map)} should be used to
     * handle the <code>FONT</code> attribute.
     *
     * @see java.awt.Font 
     */
    public static final TextAttribute FONT = 
	new TextAttribute("font");

    /**
     * Attribute key for a user-defined glyph to display in lieu 
     * of the font's standard glyph for a character.  Values are
     * intances of GraphicAttribute.  The default value is null,
     * indicating that the standard glyphs provided by the font
     * should be used.
     * 
     * <p>This attribute is used to reserve space for a graphic or
     * other component embedded in a line of text.  It is required for
     * correct positioning of 'inline' components within a line when
     * bidirectional reordering (see {@link java.text.Bidi}) is
     * performed.  Each character (Unicode code point) will be
     * rendered using the provided GraphicAttribute. Typically, the
     * characters to which this attribute is applied should be
     * <code>&#92;uFFFC</code>.
     * 
     * <p>The GraphicAttribute determines the logical and visual
     * bounds of the text; the actual Font values are ignored.
     *
     * @see GraphicAttribute 
     */
    public static final TextAttribute CHAR_REPLACEMENT = 
	new TextAttribute("char_replacement");

    //
    // Adornments added to text.
    //

    /**
     * Attribute key for the paint used to render the text.  Values are
     * instances of <b><code>Paint</code></b>.  The default value is
     * null, indicating that the <code>Paint</code> set on the
     * <code>Graphics2D</code> at the time of rendering is used.
     * 
     * <p>Glyphs will be rendered using this
     * <code>Paint</code> regardless of the <code>Paint</code> value
     * set on the <code>Graphics</code> (but see {@link #SWAP_COLORS}).
     *
     * @see java.awt.Paint
     * @see #SWAP_COLORS 
     */
    public static final TextAttribute FOREGROUND = 
	new TextAttribute("foreground");

    /**
     * Attribute key for the paint used to render the background of
     * the text.  Values are instances of <b><code>Paint</code></b>.
     * The default value is null, indicating that the background
     * should not be rendered.
     * 
     * <p>The logical bounds of the text will be filled using this
     * <code>Paint</code>, and then the text will be rendered on top
     * of it (but see {@link #SWAP_COLORS}).
     * 
     * <p>The visual bounds of the text is extended to include the
     * logical bounds, if necessary.  The outline is not affected.
     *
     * @see java.awt.Paint
     * @see #SWAP_COLORS 
     */
    public static final TextAttribute BACKGROUND = 
	new TextAttribute("background");

    /**
     * Attribute key for underline.  Values are instances of
     * <b><code>Integer</code></b>.  The default value is -1, which
     * means no underline.
     * 
     * <p>The constant value {@link #UNDERLINE_ON} is provided.
     * 
     * <p>The underline affects both the visual bounds and the outline
     * of the text.  
     */
    public static final TextAttribute UNDERLINE = 
	new TextAttribute("underline");

    /**
     * Standard underline.
     *
     * @see #UNDERLINE
     */
    public static final Integer UNDERLINE_ON = 
	Integer.valueOf(0);

    /**
     * Attribute key for strikethrough.  Values are instances of
     * <b><code>Boolean</code></b>.  The default value is
     * <code>false</code>, which means no strikethrough.
     * 
     * <p>The constant value {@link #STRIKETHROUGH_ON} is provided.
     * 
     * <p>The strikethrough affects both the visual bounds and the
     * outline of the text.
     */
    public static final TextAttribute STRIKETHROUGH = 
	new TextAttribute("strikethrough");

    /**
     * A single strikethrough.
     *
     * @see #STRIKETHROUGH
     */
    public static final Boolean STRIKETHROUGH_ON = 
	Boolean.TRUE;

    //
    // Attributes use to control layout of text on a line.
    //

    /**
     * Attribute key for the run direction of the line.  Values are
     * instances of <b><code>Boolean</code></b>.  The default value is
     * null, which indicates that the standard Bidi algorithm for
     * determining run direction should be used with the value {@link
     * java.text.Bidi#DIRECTION_DEFAULT_LEFT_TO_RIGHT}.
     * 
     * <p>The constants {@link #RUN_DIRECTION_RTL} and {@link
     * #RUN_DIRECTION_LTR} are provided.
     * 
     * <p>This determines the value passed to the {@link
     * java.text.Bidi} constructor to select the primary direction of
     * the text in the paragraph.
     * 
     * <p><em>Note:</em> This attribute should have the same value for
     * all the text in a paragraph, otherwise the behavior is
     * undetermined.
     *
     * @see java.text.Bidi 
     */
    public static final TextAttribute RUN_DIRECTION = 
	new TextAttribute("run_direction");

    /**
     * Left-to-right run direction.
     * @see #RUN_DIRECTION
     */
    public static final Boolean RUN_DIRECTION_LTR = 
	Boolean.FALSE;

    /**
     * Right-to-left run direction.
     * @see #RUN_DIRECTION
     */
    public static final Boolean RUN_DIRECTION_RTL = 
	Boolean.TRUE;

    /**
     * Attribute key for the embedding level of the text.  Values are
     * instances of <b><code>Integer</code></b>.  The default value is
     * <code>null</code>, indicating that the the Bidirectional
     * algorithm should run without explicit embeddings.
     * 
     * <p>Positive values 1 through 61 are <em>embedding</em> levels,
     * negative values -1 through -61 are <em>override</em> levels.
     * The value 0 means that the base line direction is used.  These
     * levels are passed in the embedding levels array to the {@link
     * java.text.Bidi} constructor.
     * 
     * <p><em>Note:</em> When this attribute is present anywhere in
     * a paragraph, then any Unicode bidi control characters (RLO,
     * LRO, RLE, LRE, and PDF) in the paragraph are
     * disregarded, and runs of text where this attribute is not
     * present are treated as though it were present and had the value
     * 0.
     *
     * @see java.text.Bidi 
     */
    public static final TextAttribute BIDI_EMBEDDING = 
	new TextAttribute("bidi_embedding");

    /**
     * Attribute key for the justification of a paragraph.  Values are
     * instances of <b><code>Number</code></b>.  The default value is
     * 1, indicating that justification should use the full width
     * provided.  Values are pinned to the range [0..1].
     * 
     * <p>The constants {@link #JUSTIFICATION_FULL} and {@link
     * #JUSTIFICATION_NONE} are provided.
     * 
     * <p>Specifies the fraction of the extra space to use when
     * justification is requested on a <code>TextLayout</code>. For
     * example, if the line is 50 points wide and it is requested to
     * justify to 70 points, a value of 0.75 will pad to use
     * three-quarters of the remaining space, or 15 points, so that
     * the resulting line will be 65 points in length.
     * 
     * <p><em>Note:</em> This should have the same value for all the
     * text in a paragraph, otherwise the behavior is undetermined.
     *
     * @see TextLayout#getJustifiedLayout 
     */
    public static final TextAttribute JUSTIFICATION =
	new TextAttribute("justification");

    /**
     * Justify the line to the full requested width.  This is the
     * default value for <code>JUSTIFICATION</code>.
     * @see #JUSTIFICATION 
     */
    public static final Float JUSTIFICATION_FULL = 
	Float.valueOf(1.0f);

    /**
     * Do not allow the line to be justified.
     * @see #JUSTIFICATION
     */
    public static final Float JUSTIFICATION_NONE = 
	Float.valueOf(0.0f);

    //
    // For use by input method.
    //

    /**
     * Attribute key for input method highlight styles.
     * 
     * <p>Values are instances of {@link
     * java.awt.im.InputMethodHighlight} or {@link
     * java.text.Annotation}.  The default value is <code>null</code>,
     * which means that input method styles should not be applied
     * before rendering.
     * 
     * <p>If adjacent runs of text with the same
     * <code>InputMethodHighlight</code> need to be rendered
     * separately, the <code>InputMethodHighlights</code> should be
     * wrapped in <code>Annotation</code> instances.
     * 
     * <p>Input method highlights are used while text is being
     * composed by an input method. Text editing components should
     * retain them even if they generally only deal with unstyled
     * text, and make them available to the drawing routines.
     * 
     * @see java.awt.Font
     * @see java.awt.im.InputMethodHighlight
     * @see java.text.Annotation 
     */
    public static final TextAttribute INPUT_METHOD_HIGHLIGHT = 
	new TextAttribute("input method highlight");

    /**
     * Attribute key for input method underlines.  Values
     * are instances of <b><code>Integer</code></b>.  The default
     * value is <code>-1</code>, which means no underline.
     * 
     * <p>Several constant values are provided, see {@link
     * #UNDERLINE_LOW_ONE_PIXEL}, {@link #UNDERLINE_LOW_TWO_PIXEL},
     * {@link #UNDERLINE_LOW_DOTTED}, {@link #UNDERLINE_LOW_GRAY}, and
     * {@link #UNDERLINE_LOW_DASHED}.
     * 
     * <p>This may be used in conjunction with {@link #UNDERLINE} if
     * desired.  The primary purpose is for use by input methods.
     * Other use of these underlines for simple ornamentation might
     * confuse users.
     *
     * <p>The input method underline affects both the visual bounds and
     * the outline of the text.
     *
     * @since 1.3 
     */
    public static final TextAttribute INPUT_METHOD_UNDERLINE =
	new TextAttribute("input method underline");

    /**
     * Single pixel solid low underline.
     * @see #INPUT_METHOD_UNDERLINE
     * @since 1.3
     */
    public static final Integer UNDERLINE_LOW_ONE_PIXEL = 
	Integer.valueOf(1);

    /**
     * Double pixel solid low underline.
     * @see #INPUT_METHOD_UNDERLINE
     * @since 1.3
     */
    public static final Integer UNDERLINE_LOW_TWO_PIXEL = 
	Integer.valueOf(2);

    /**
     * Single pixel dotted low underline.
     * @see #INPUT_METHOD_UNDERLINE
     * @since 1.3
     */
    public static final Integer UNDERLINE_LOW_DOTTED = 
	Integer.valueOf(3);

    /**
     * Double pixel gray low underline.
     * @see #INPUT_METHOD_UNDERLINE
     * @since 1.3
     */
    public static final Integer UNDERLINE_LOW_GRAY = 
	Integer.valueOf(4);

    /**
     * Single pixel dashed low underline.
     * @see #INPUT_METHOD_UNDERLINE
     * @since 1.3
     */
    public static final Integer UNDERLINE_LOW_DASHED = 
	Integer.valueOf(5);

    /**
     * Attribute key for swapping foreground and background
     * <code>Paints</code>.  Values are instances of
     * <b><code>Boolean</code></b>.  The default value is
     * <code>false</code>, which means do not swap colors.
     * 
     * <p>The constant value {@link #SWAP_COLORS_ON} is defined.
     * 
     * <p>If the {@link #FOREGROUND} attribute is set, its
     * <code>Paint</code> will be used as the background, otherwise
     * the <code>Paint</code> currently on the <code>Graphics</code>
     * will be used.  If the {@link #BACKGROUND} attribute is set, its
     * <code>Paint</code> will be used as the foreground, otherwise
     * the system will find a contrasting color to the
     * (resolved) background so that the text will be visible.
     *
     * @see #FOREGROUND
     * @see #BACKGROUND 
     */
    public static final TextAttribute SWAP_COLORS = 
	new TextAttribute("swap_colors");

    /** 
     * Swap foreground and background. 
     * @see #SWAP_COLORS
     * @since 1.3
     */
    public static final Boolean SWAP_COLORS_ON = 
	Boolean.TRUE;

    /**
     * Attribute key for converting ASCII decimal digits to other
     * decimal ranges.  Values are instances of {@link NumericShaper}.
     * The default is <code>null</code>, which means do not perform
     * numeric shaping.
     * 
     * <p>When a numeric shaper is defined, the text is first
     * processed by the shaper before any other analysis of the text
     * is performed.
     * 
     * <p><em>Note:</em> This should have the same value for all the
     * text in the paragraph, otherwise the behavior is undetermined.
     *
     * @see NumericShaper
     * @since 1.4 
     */
    public static final TextAttribute NUMERIC_SHAPING = 
	new TextAttribute("numeric_shaping");

    /**
     * Attribute key to request kerning. Values are instances of
     * <b><code>Integer</code></b>.  The default value is
     * <code>0</code>, which does not request kerning.
     * 
     * <p>The constant value {@link #KERNING_ON} is provided.
     * 
     * <p>The default advances of single characters are not
     * appropriate for some character sequences, for example "To" or
     * "AWAY".  Without kerning the adjacent characters appear to be
     * separated by too much space.  Kerning causes selected sequences
     * of characters to be spaced differently for a more pleasing
     * visual appearance.
     * 
     * @since 1.6 
     */
    public static final TextAttribute KERNING = 
	new TextAttribute("kerning");

    /**
     * Request standard kerning.
     * @see #KERNING
     * @since 1.6
     */
    public static final Integer KERNING_ON = 
	Integer.valueOf(1);


    /**
     * Attribute key for enabling optional ligatures. Values are
     * instances of <b><code>Integer</code></b>.  The default value is
     * <code>0</code>, which means do not use optional ligatures.
     * 
     * <p>The constant value {@link #LIGATURES_ON} is defined.
     * 
     * <p>Ligatures required by the writing system are always enabled.
     *
     * @since 1.6 
     */
    public static final TextAttribute LIGATURES = 
	new TextAttribute("ligatures");

    /**
     * Request standard optional ligatures.
     * @see #LIGATURES
     * @since 1.6
     */
    public static final Integer LIGATURES_ON = 
	Integer.valueOf(1);
    
    /**
     * Attribute key to control tracking.  Values are instances of
     * <b><code>Number</code></b>.  The default value is
     * <code>0</code>, which means no additional tracking.
     * 
     * <p>The constant values {@link #TRACKING_TIGHT} and {@link
     * #TRACKING_LOOSE} are provided.
     * 
     * <p>The tracking value is multiplied by the font point size and
     * passed through the font transform to determine an additional
     * amount to add to the advance of each glyph cluster.  Positive
     * tracking values will inhibit formation of optional ligatures.
     * Tracking values are typically between <code>-0.1</code> and
     * <code>0.3</code>; values outside this range are generally not
     * desireable.
     *
     * @since 1.6 
     */
    public static final TextAttribute TRACKING = 
	new TextAttribute("tracking");

    /**
     * Perform tight tracking.
     * @see #TRACKING
     * @since 1.6
     */
    public static final Float TRACKING_TIGHT = 
	Float.valueOf(-.04f);

    /**
     * Perform loose tracking.
     * @see #TRACKING
     * @since 1.6
     */
    public static final Float TRACKING_LOOSE = 
	Float.valueOf(.04f);
}

Generated By: JavaOnTracks Doclet 0.1.4     ©Thibaut Colar