### Style Classes

This figure shows the basic architecture for the Unicode Text Framework style classes:

The framework currently supports two types of styles: character styles and paragraph styles. These styles derive from the abstract classes ICharacterStyle and IParagraphStyle, respectively, and are distinguished by how they propagate:

- Styles that propagate by character can be applied to any arbitrary range of characters, and maintain their association with those characters regardless of how the surrounding text changes. Character styles include point size and color.
- Styles that propagate by paragraph can be applied only to whole paragraphs--ranges of characters delimited by paragraph separator characters.

Paragraph styles include justification and indentation. For example, if you apply a paragraph style such as a justification style to a range of characters, IText automatically applies it to the entire paragraph (or multiple paragraphs) containing that range. Paragraph styles may be adjusted as text is edited, for example, if paragraph separator characters are added or deleted.

The framework includes fifteen concrete style classes:

When you create a style object, give it a meaningful value. For example, you might give the value "12" to an ITextPointSizeStyle object or the value IParagraphJustificationStyle::kCenter to an IParagraphJustificationStyle object. No default values are provided--if you don't specify a value when you create a style object, the style's value remains undefined.

Using an undefined style may be useful, for example, in situations where the value is unimportant (such as calling IText::removeStyles) or where you create the style object to pass it to another function that will fill in the value.

The style classes also provide the ITextStyleSet, which lets you group styles. For example, you could add several styles to a range of characters with a single call to IText. Any IText function that takes an ITextStyle parameter is overloaded to take an ITextStyleSet parameter as well.

This figure shows the methods for setting styles on IText:

### Character Style Classes

Character styles derive from ICharacterStyle. ICharacterStyle::propagates returns the value ITextStyle::kPropagateByCharacter. You can apply these character styles to any arbitrary range of characters, from a single character to all characters in an IText object.

This table describes the concrete character styles currently provided by the framework, along with the type of value each contains.

Class | Description | Value
--- | --- | ---
ITextTypefaceStyle | Specifies the typeface to use to display characters. | An IText object encapsulating the name of the typeface, for example, "Helvetica."
ITextPointSizeStyle | Specifies the point size in which to display characters. | A `float` representing the point size, for example, "14."
ITextBoldfaceStyle | Specifies whether characters are displayed in boldface, for example, SampleString. | A `bool`-`true` means the characters are displayed in boldface.
ITextItalicStyle | Specifies whether characters are displayed in italics, for example, SampleString. | A `bool`-`true` means the characters are displayed in italics.
ITextUnderlineStyle | Specifies whether characters are displayed underlined, for example, SampleString. | A `bool`-`true` means the characters are underlined.
ITextStrikethroughStyle | Specifies whether characters are displayed with a strikethrough line, for example, SampleString. | A `bool`-`true` means the characters are struckthrough.
ITextOutlineStyle | Specifies whether character are displayed in an outline typeface, for example, SampleString. | A `bool`-`true` means the characters are outlined.
ITextUneditableStyle | Specifies whether characters can be edited. This is currently the only style that is not related to text display. | A `bool`-`true` means the character cannot be edited.
ITextColorStyle | Specifies a color to use to display characters. | Three `unsigned char` values representing the red, green, and blue components of the color.
ITextSuperSubscriptStyle | Specifies a shift from the baseline, in points, for displaying characters as superscripts or subscripts. | A `float` representing the baseline shift. A negative value creates a subscript. A positive value create a superscript.

### Paragraph Style Classes

Paragraph styles derive from IParagraphStyle. IParagraphStyle::propagates returns the value ITextStyle::kPropagateByParagraph. You can apply paragraph styles only to whole paragraphs, that is, to ranges of characters delimited by UUnicodeSpecial::kParagraphSeparator characters.

If you apply paragraph styles to a range of characters that is less than a paragraph or that intersects multiple paragraphs, IText propagates the paragraph styles to all the relevant paragraphs. The styles also remain associated with the paragraph as the number of characters in the paragraphs changes during editing.

This table describes the concrete paragraph styles currently provided by the framework, along with the type of value each contains.

Class | Description | Value
--- | --- | ---
IParagraphJustificationStyle | Specifies the alignment of the paragraph. Alignment is specified relative to the directionality of the writing system. For example, starting-edge-aligned means on the left for left-to-right languages such as English. | EJustification enum, defining the possible values kStart, kCenter, and kEnd.
IParagraphSpreadStyle | Specifies whether no lines, all lines, or all but the last line of the paragraph are fully justified. | ESpread enum, defining the possible values kNone, kAll, and kNotLastLine.
IParagraphStartIndentStyle | Specifies an indent distance, in points, for the starting edge (the left edge in left-to-right writing systems) of the paragraph. | A `float` representing the indent distance in points.
IParagraphEndIndentStyle | Specifies an indent distance, in points, for the ending edge (the right edge in left-to-right writing systems) of the paragraph. | A `float` representing the indent distance in points.
IParagraphFirstIndentStyle | Specifies an indent distance, in points, for the starting edge of the first line of the paragraph. | A `float` representing the indent distance in points.

Currently the set of styles supported by the Unicode Text Framework is not extensible--that is, you cannot create your own subclasses of ITextStyle, ICharacterStyle, or IParagraphStyle. Future Open Class releases may support extending this style mechanism.

Style Propagation