|
||
Editable text and plain text have content, but no formatting. This means they can be stored and manipulated, but cannot be viewed, because viewing needs format information — obviously, it needs a font and, more subtly, it also needs paragraph alignment, colour etc.
There are two types of format: character and paragraph formats
character format information includes font, colour, bold, italic, underline. Each character has an associated effective format which consists of any format attributes which have been applied directly to that character or applied via a character style, or inherited from the formatting of preceding text.
The TCharFormat
class contains all information necessary to specify a character format.
paragraph format information includes left, right and hanging indent, space before, between and after lines, tabs, shading and borders and bullet points. Every paragraph has an effective format. This consists of the format attributes which have either been explicitly applied to that paragraph or applied via a paragraph style, or inherited from the formatting of preceding text.
The CParaFormat
class contains all information necessary to specify a paragraph format.
Paragraph format is a C
class, rather than a T
, because the object owns potentially unbounded arrays, such as the tab stops. Also, the representation of border specification
is optimised to use minimum space if no borders are specified. So the paragraph format class needs a destructor, and it is
therefore a C
.
In order to economise on space, format specifications are built up in format layers CParaFormatLayer
and CCharFormatLayer
. Each layer specifies a number of attributes and their values. Functions are provided to manipulate and interrogate the
attributes and values in a layer, and to find out the effective format from all the layers applying to a region of the text
object. Format mask classes TParaFormatMask
and TCharFormatMask
play a key role in specifying which attributes are involved in these operations.
For global text, the same formatting applies to the entire text object. A character and paragraph format layer are specified for the global text object's constructor, and are used throughout the lifetime of the object. The effective format is taken by layering these over a default format which specifies values for all attributes.
For rich text, format layers may be overlaid, and may apply to any region of the text object. By this means, formatting for each character and paragraph may be controlled individually.
A paragraph style is a named format, represented by the CParagraphStyle
class, which may be applied to a paragraph. A style may either replace all attributes already set, or change only the attributes
specified in the layer. The paragraph style is a paragraph format layer with a name and, also, a character format layer which
sets character formatting in the paragraph.