Panda3D
Classes | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
TextAssembler Class Reference

This class is not normally used directly by user code, but is used by the TextNode to lay out a block of text and convert it into rows of Geoms according to the TextProperties. More...

#include "textAssembler.h"

Public Member Functions

 TextAssembler (TextEncoder *encoder)
 
 TextAssembler (const TextAssembler &copy)
 
int calc_c (int n) const
 Computes the column index of the nth character or graphic object in the text and returns it. More...
 
int calc_index (int r, int c) const
 Computes the character index of the character at the rth row and cth column position. More...
 
int calc_r (int n) const
 Computes the row index of the nth character or graphic object in the text and returns it. More...
 
bool calc_r_c (int &r, int &c, int n) const
 Computes the row and column index of the nth character or graphic object in the text. More...
 
void clear ()
 Reinitializes the contents of the TextAssembler. More...
 
wchar_t get_character (int n) const
 Returns the character at the indicated position in the pre-wordwrapped string. More...
 
wchar_t get_character (int r, int c) const
 Returns the character at the indicated position in the indicated row. More...
 
bool get_dynamic_merge () const
 
const TextGraphicget_graphic (int n) const
 Returns the graphic object at the indicated position in the pre-wordwrapped string. More...
 
const TextGraphicget_graphic (int r, int c) const
 Returns the graphic object at the indicated position in the indicated row. More...
 
const LVector2 & get_lr () const
 Returns the lower-right corner of the assembled text, in 2-d text coordinates. More...
 
int get_max_rows () const
 
bool get_multiline_mode () const
 
int get_num_characters () const
 Returns the number of characters of text, before wordwrapping. More...
 
int get_num_cols (int r) const
 Returns the number of characters and/or graphic objects in the nth row. More...
 
int get_num_rows () const
 Returns the number of rows of text after it has all been wordwrapped and assembled. More...
 
std::wstring get_plain_wtext () const
 Returns a wstring that represents the contents of the text, without any embedded properties characters. More...
 
const TextPropertiesget_properties () const
 
const TextPropertiesget_properties (int n) const
 
const TextPropertiesget_properties (int r, int c) const
 
const LVector2 & get_ul () const
 Returns the upper-left corner of the assembled text, in 2-d text coordinates. More...
 
Geom::UsageHint get_usage_hint () const
 
PN_stdfloat get_width (int n) const
 Returns the width of the character or object at the indicated position in the pre-wordwrapped string. More...
 
PN_stdfloat get_width (int r, int c) const
 Returns the width of the character or object at the indicated position in the indicated row. More...
 
std::wstring get_wordwrapped_plain_wtext () const
 Returns a wstring that represents the contents of the text, with newlines inserted according to the wordwrapping. More...
 
std::wstring get_wordwrapped_wtext () const
 Returns a wstring that represents the contents of the text, with newlines inserted according to the wordwrapping. More...
 
std::wstring get_wtext () const
 Returns a wstring that represents the contents of the text. More...
 
PN_stdfloat get_xpos (int r, int c) const
 Returns the x position of the origin of the character or graphic object at the indicated position in the indicated row. More...
 
PN_stdfloat get_ypos (int r, int c) const
 Returns the y position of the origin of all of the characters or graphic objects in the indicated row. More...
 
void operator= (const TextAssembler &copy)
 
 PT (PandaNode) assemble_text()
 
void set_dynamic_merge (bool dynamic_merge)
 
void set_max_rows (int max_rows)
 
void set_multiline_mode (bool flag)
 
void set_properties (const TextProperties &properties)
 
void set_usage_hint (Geom::UsageHint usage_hint)
 
bool set_wsubstr (const std::wstring &wtext, int start, int count)
 Replaces the 'count' characters from 'start' of the current text with the indicated replacement text. More...
 
bool set_wtext (const std::wstring &wtext)
 Accepts a new text string and associated properties structure, and precomputes the wordwrapping layout appropriately. More...
 

Static Public Member Functions

static PN_stdfloat calc_width (wchar_t character, const TextProperties &properties)
 Returns the width of a single character, according to its associated font. More...
 
static PN_stdfloat calc_width (const TextGraphic *graphic, const TextProperties &properties)
 Returns the width of a single TextGraphic image. More...
 
static bool has_character (wchar_t character, const TextProperties &properties)
 Returns true if the named character exists in the font or can be synthesized by Panda, false otherwise. More...
 
static bool has_exact_character (wchar_t character, const TextProperties &properties)
 Returns true if the named character exists in the font exactly as named, false otherwise. More...
 
static bool is_whitespace (wchar_t character, const TextProperties &properties)
 Returns true if the indicated character represents whitespace in the font, or false if anything visible will be rendered for it. More...
 

Public Attributes

 get_dynamic_merge
 Returns the dynamic_merge flag. More...
 
 get_max_rows
 If max_rows is greater than zero, no more than max_rows will be accepted. More...
 
 get_multiline_mode
 Returns the multline_mode flag. More...
 
 get_properties
 Returns the default TextProperties that are applied to the text in the absence of any nested property change sequences. More...
 
 get_usage_hint
 Returns the UsageHint that will be applied to generated geometry. More...
 
 set_dynamic_merge
 Sets the dynamic_merge flag. More...
 
 set_max_rows
 If max_rows is greater than zero, no more than max_rows will be accepted. More...
 
 set_multiline_mode
 Sets the multiline mode flag. More...
 
 set_properties
 Specifies the default TextProperties that are applied to the text in the absence of any nested property change sequences. More...
 
 set_usage_hint
 Specifies the UsageHint that will be applied to generated geometry. More...
 

Detailed Description

This class is not normally used directly by user code, but is used by the TextNode to lay out a block of text and convert it into rows of Geoms according to the TextProperties.

However, user code may take advantage of it, if desired, for very low-level text operations.

Definition at line 43 of file textAssembler.h.

Member Function Documentation

◆ calc_c()

int TextAssembler::calc_c ( int  n) const
inline

Computes the column index of the nth character or graphic object in the text and returns it.

If the nth character is not a normal printable character with a position in the wordwrapped string, returns -1 (for instance, a soft-hyphen character, or a newline character, may not have a corresponding position).

Definition at line 150 of file textAssembler.I.

References calc_r_c().

◆ calc_index()

int TextAssembler::calc_index ( int  r,
int  c 
) const

Computes the character index of the character at the rth row and cth column position.

This is the inverse of calc_r_c().

It is legal for c to exceed the index number of the last column by 1, and it is legal for r to exceed the index number of the last row by 1, if c is 0.

Definition at line 447 of file textAssembler.cxx.

◆ calc_r()

int TextAssembler::calc_r ( int  n) const
inline

Computes the row index of the nth character or graphic object in the text and returns it.

If the nth character is not a normal printable character with a position in the wordwrapped string, returns -1 (for instance, a soft-hyphen character, or a newline character, may not have a corresponding position).

Definition at line 133 of file textAssembler.I.

References calc_r_c().

◆ calc_r_c()

bool TextAssembler::calc_r_c ( int &  r,
int &  c,
int  n 
) const

Computes the row and column index of the nth character or graphic object in the text.

Fills r and c accordingly.

Returns true if the nth character is valid and has a corresponding r and c position, false otherwise (for instance, a soft-hyphen character, or a newline character, may not have a corresponding position). In either case, r and c will be filled in sensibly.

Definition at line 374 of file textAssembler.cxx.

Referenced by calc_c(), calc_r(), and PGEntry::keystroke().

◆ calc_width() [1/2]

PN_stdfloat TextAssembler::calc_width ( wchar_t  character,
const TextProperties properties 
)
static

Returns the width of a single character, according to its associated font.

This also correctly calculates the width of cheesy ligatures and accented characters, which may not exist in the font as such.

This does not take kerning into account, however.

Definition at line 626 of file textAssembler.cxx.

References TextProperties::get_font.

Referenced by TextNode::calc_width().

◆ calc_width() [2/2]

PN_stdfloat TextAssembler::calc_width ( const TextGraphic graphic,
const TextProperties properties 
)
static

Returns the width of a single TextGraphic image.

Definition at line 663 of file textAssembler.cxx.

References TextGraphic::get_frame, TextProperties::get_glyph_scale, and TextProperties::get_text_scale.

◆ clear()

void TextAssembler::clear ( )

Reinitializes the contents of the TextAssembler.

Definition at line 152 of file textAssembler.cxx.

Referenced by set_wtext().

◆ get_character() [1/2]

wchar_t TextAssembler::get_character ( int  n) const
inline

Returns the character at the indicated position in the pre-wordwrapped string.

If the object at this position is a graphic object instead of a character, returns 0.

Definition at line 172 of file textAssembler.I.

Referenced by PGEntry::get_character(), and PGEntry::keystroke().

◆ get_character() [2/2]

wchar_t TextAssembler::get_character ( int  r,
int  c 
) const
inline

Returns the character at the indicated position in the indicated row.

If the object at this position is a graphic object instead of a character, returns 0.

Definition at line 236 of file textAssembler.I.

◆ get_graphic() [1/2]

const TextGraphic * TextAssembler::get_graphic ( int  n) const
inline

Returns the graphic object at the indicated position in the pre-wordwrapped string.

If the object at this position is a character instead of a graphic object, returns NULL.

Definition at line 183 of file textAssembler.I.

Referenced by PGEntry::get_graphic().

◆ get_graphic() [2/2]

const TextGraphic * TextAssembler::get_graphic ( int  r,
int  c 
) const
inline

Returns the graphic object at the indicated position in the indicated row.

If the object at this position is a character instead of a graphic object, returns NULL.

Definition at line 248 of file textAssembler.I.

◆ get_lr()

const LVector2 & TextAssembler::get_lr ( ) const
inline

Returns the lower-right corner of the assembled text, in 2-d text coordinates.

Definition at line 120 of file textAssembler.I.

◆ get_num_characters()

int TextAssembler::get_num_characters ( ) const
inline

Returns the number of characters of text, before wordwrapping.

Definition at line 162 of file textAssembler.I.

Referenced by PGEntry::get_num_characters(), PGEntry::keystroke(), PGEntry::press(), and PGEntry::set_wtext().

◆ get_num_cols()

int TextAssembler::get_num_cols ( int  r) const
inline

Returns the number of characters and/or graphic objects in the nth row.

Definition at line 222 of file textAssembler.I.

Referenced by PGEntry::keystroke().

◆ get_num_rows()

int TextAssembler::get_num_rows ( ) const
inline

Returns the number of rows of text after it has all been wordwrapped and assembled.

Definition at line 214 of file textAssembler.I.

Referenced by PGEntry::keystroke().

◆ get_plain_wtext()

wstring TextAssembler::get_plain_wtext ( ) const

Returns a wstring that represents the contents of the text, without any embedded properties characters.

If there is an embedded graphic object, a zero value is inserted in that position.

This string has the same length as get_num_characters(), and the characters in this string correspond one-to-one with the characters returned by get_character(n).

Definition at line 236 of file textAssembler.cxx.

Referenced by PGEntry::get_plain_wtext().

◆ get_ul()

const LVector2 & TextAssembler::get_ul ( ) const
inline

Returns the upper-left corner of the assembled text, in 2-d text coordinates.

Definition at line 111 of file textAssembler.I.

◆ get_width() [1/2]

PN_stdfloat TextAssembler::get_width ( int  n) const
inline

Returns the width of the character or object at the indicated position in the pre-wordwrapped string.

Definition at line 203 of file textAssembler.I.

◆ get_width() [2/2]

PN_stdfloat TextAssembler::get_width ( int  r,
int  c 
) const
inline

Returns the width of the character or object at the indicated position in the indicated row.

Definition at line 270 of file textAssembler.I.

◆ get_wordwrapped_plain_wtext()

wstring TextAssembler::get_wordwrapped_plain_wtext ( ) const

Returns a wstring that represents the contents of the text, with newlines inserted according to the wordwrapping.

The string will contain no embedded properties characters. If there is an embedded graphic object, a zero value is inserted in that position.

This string has the same number of newline characters as get_num_rows(), and the characters in this string correspond one-to-one with the characters returned by get_character(r, c).

Definition at line 263 of file textAssembler.cxx.

◆ get_wordwrapped_wtext()

wstring TextAssembler::get_wordwrapped_wtext ( ) const

Returns a wstring that represents the contents of the text, with newlines inserted according to the wordwrapping.

The string will contain embedded properties characters, which may not exactly match the embedded properties characters of the original string, but it will encode the same way.

Embedded properties characters will be closed before every newline, then reopened (if necessary) on the subsequent character following the newline. This means it will be safe to divide the text up at the newline characters and treat each line as an independent piece.

Definition at line 331 of file textAssembler.cxx.

◆ get_wtext()

wstring TextAssembler::get_wtext ( ) const

Returns a wstring that represents the contents of the text.

The string will contain embedded properties characters, which may not exactly match the embedded properties characters of the original string, but it will encode the same way.

Definition at line 295 of file textAssembler.cxx.

Referenced by PGEntry::get_wtext().

◆ get_xpos()

PN_stdfloat TextAssembler::get_xpos ( int  r,
int  c 
) const

Returns the x position of the origin of the character or graphic object at the indicated position in the indicated row.

It is legal for c to exceed the index number of the last column by 1, and it is legal for r to exceed the index number of the last row by 1, if c is 0.

Definition at line 486 of file textAssembler.cxx.

Referenced by PGEntry::keystroke().

◆ get_ypos()

PN_stdfloat TextAssembler::get_ypos ( int  r,
int  c 
) const
inline

Returns the y position of the origin of all of the characters or graphic objects in the indicated row.

It is legal for r to exceed the index number of the last row by 1. The value of c is presently ignored.

Definition at line 285 of file textAssembler.I.

◆ has_character()

bool TextAssembler::has_character ( wchar_t  character,
const TextProperties properties 
)
static

Returns true if the named character exists in the font or can be synthesized by Panda, false otherwise.

(Panda can synthesize some accented characters by combining similar-looking glyphs from the font.)

This returns true for whitespace and Unicode whitespace characters (if they exist in the font), but returns false for characters that would render with the "invalid glyph".

Definition at line 705 of file textAssembler.cxx.

Referenced by TextNode::has_character().

◆ has_exact_character()

bool TextAssembler::has_exact_character ( wchar_t  character,
const TextProperties properties 
)
static

Returns true if the named character exists in the font exactly as named, false otherwise.

Note that because Panda can assemble glyphs together automatically using cheesy accent marks, this is not a reliable indicator of whether a suitable glyph can be rendered for the character. For that, use has_character() instead.

This returns true for whitespace and Unicode whitespace characters (if they exist in the font), but returns false for characters that would render with the "invalid glyph". It also returns false for characters that would be synthesized within Panda, but see has_character().

Definition at line 681 of file textAssembler.cxx.

References TextProperties::get_font.

Referenced by TextNode::has_exact_character().

◆ is_whitespace()

bool TextAssembler::is_whitespace ( wchar_t  character,
const TextProperties properties 
)
static

Returns true if the indicated character represents whitespace in the font, or false if anything visible will be rendered for it.

This returns true for whitespace and Unicode whitespace characters (if they exist in the font), and returns false for any other characters, including characters that do not exist in the font (these would be rendered with the "invalid glyph", which is visible).

Note that this function can be reliably used to identify Unicode whitespace characters only if the font has all of the whitespace characters defined. It will return false for any character not in the font, even if it is an official Unicode whitespace character.

Definition at line 740 of file textAssembler.cxx.

References TextProperties::get_font.

Referenced by TextNode::is_whitespace().

◆ set_wsubstr()

bool TextAssembler::set_wsubstr ( const std::wstring &  wtext,
int  start,
int  count 
)

Replaces the 'count' characters from 'start' of the current text with the indicated replacement text.

If the replacement text does not have count characters, the length of the string will be changed accordingly.

The substring may include nested formatting characters, but they must be self-contained and self-closed. The formatting characters are not literally saved in the internal string; they are parsed at the time of the set_wsubstr() call.

The return value is true if all the text is accepted, or false if some was truncated (see set_max_rows()).

Definition at line 205 of file textAssembler.cxx.

Referenced by PGEntry::keystroke(), and PGEntry::press().

◆ set_wtext()

bool TextAssembler::set_wtext ( const std::wstring &  wtext)

Accepts a new text string and associated properties structure, and precomputes the wordwrapping layout appropriately.

After this call, get_wordwrapped_wtext() and get_num_rows() can be called.

The return value is true if all the text is accepted, or false if some was truncated (see set_max_rows()).

Definition at line 170 of file textAssembler.cxx.

References clear().

Referenced by PGEntry::keystroke(), and PGEntry::set_wtext().

Member Data Documentation

◆ get_dynamic_merge

bool TextAssembler::get_dynamic_merge
inline

Returns the dynamic_merge flag.

See TextNode::set_flatten_flags().

Definition at line 110 of file textAssembler.h.

◆ get_max_rows

int TextAssembler::get_max_rows
inline

If max_rows is greater than zero, no more than max_rows will be accepted.

Text beyond that will be truncated.

Definition at line 109 of file textAssembler.h.

◆ get_multiline_mode

bool TextAssembler::get_multiline_mode
inline

Returns the multline_mode flag.

See TextNode::set_multiline_mode().

Definition at line 111 of file textAssembler.h.

◆ get_properties

const TextProperties & TextAssembler::get_properties
inline

Returns the default TextProperties that are applied to the text in the absence of any nested property change sequences.

Returns the TextProperties in effect for the object at the indicated position in the indicated row.

Returns the TextProperties in effect for the object at the indicated position in the pre-wordwrapped string.

Definition at line 112 of file textAssembler.h.

Referenced by PGEntry::get_properties().

◆ get_usage_hint

Geom::UsageHint TextAssembler::get_usage_hint
inline

Returns the UsageHint that will be applied to generated geometry.

See set_usage_hint().

Definition at line 108 of file textAssembler.h.

◆ set_dynamic_merge

void TextAssembler::set_dynamic_merge
inline

Sets the dynamic_merge flag.

See TextNode::set_flatten_flags().

Definition at line 110 of file textAssembler.h.

◆ set_max_rows

void TextAssembler::set_max_rows
inline

If max_rows is greater than zero, no more than max_rows will be accepted.

Text beyond that will be truncated.

Setting this will not truncate text immediately. You must follow this up with a call to set_wtext() to truncate the existing text.

Definition at line 109 of file textAssembler.h.

◆ set_multiline_mode

void TextAssembler::set_multiline_mode
inline

Sets the multiline mode flag.

Set the multiline mode to allow text to wrap. It defaults to true.

Definition at line 111 of file textAssembler.h.

◆ set_properties

void TextAssembler::set_properties
inline

Specifies the default TextProperties that are applied to the text in the absence of any nested property change sequences.

Definition at line 112 of file textAssembler.h.

◆ set_usage_hint

void TextAssembler::set_usage_hint
inline

Specifies the UsageHint that will be applied to generated geometry.

The default is UH_static, which is probably the right setting, but if you know the TextNode's geometry will have a short lifespan, it may be better to set it to UH_stream. See geomEnums.h.

Definition at line 108 of file textAssembler.h.


The documentation for this class was generated from the following files: