Rendering Functions to run the rendering pipeline The Pango rendering pipeline takes a string of Unicode characters and converts it into glyphs. The functions described in this section accomplish various steps of this process. The #PangoContext structure stores global information used to control the itemization process. The #PangoItem structure stores information about a segment of text. It contains the following fields: @offset: the offset of the segment from the beginning of the string in bytes. @length: the length of the segment in bytes. @num_chars: the length of the segment in characters. @analysis: the properties of the segment. The #PangoAnalysis structure stores information about the properties of a segment of text. It has the following fields: @shape_engine: the engine for doing rendering-system-dependent processing. @lang_engine: the engine for doing rendering-system-independent processing. @font: the font for this segment. @level: the bidirectional level for this segment. @gravity: the glyph orientation for this segment (A #PangoGravity). @flags: boolean flags for this segment (currently only one) (Since: 1.16). @script: the detected script for this segment (A #PangoScript) (Since: 1.18). @language: the detected language for this segment. @extra_attrs: extra attributes for this segment. Whether the segment should be shifted to center around the baseline. Used in vertical writing directions mostly. Since: 1.16 The #GObject type for #PangoDirection. @context: @text: @start_index: @length: @attrs: @cached_iter: @Returns: @context: @base_dir: @text: @start_index: @length: @attrs: @cached_iter: @Returns: @item: @item: @Returns: @Returns: @orig: @split_index: @split_offset: @Returns: @logical_items: @Returns: @Returns: @context: @font_map: @context: @Returns: @context: @Returns: @context: @desc: @context: @Returns: @context: @language: @context: @Returns: @context: @direction: @context: @Returns: @context: @gravity: @context: @Returns: @context: @Returns: @context: @hint: @context: @Returns: @context: @matrix: @context: @desc: @Returns: @context: @desc: @language: @Returns: @context: @desc: @language: @Returns: @context: @families: @n_families: @text: @length: @analysis: @attrs: @attrs_len: @text: @length: @level: @language: @log_attrs: @attrs_len: @text: @length: @paragraph_delimiter_index: @next_paragraph_start: @text: @length: @analysis: @attrs: @attrs_len: The #PangoLogAttr structure stores information about the attributes of a single character. @is_line_break: if set, can break line in front of character @is_mandatory_break: if set, must break line in front of character @is_char_break: if set, can break here when doing character wrapping @is_white: is whitespace character @is_cursor_position: if set, cursor can appear in front of character. i.e. this is a grapheme boundary, or the first character in the text. This flag implements Unicode's Grapheme Cluster Boundaries semantics. @is_word_start: is first character in a word @is_word_end: is first non-word char after a word Note that in degenerate cases, you could have both @is_word_start and @is_word_end set for some character. @is_sentence_boundary: is a sentence boundary. There are two ways to divide sentences. The first assigns all inter-sentence whitespace/control/format chars to some sentence, so all chars are in some sentence; @is_sentence_boundary denotes the boundaries there. The second way doesn't assign between-sentence spaces, etc. to any sentence, so @is_sentence_start/@is_sentence_end mark the boundaries of those sentences. @is_sentence_start: is first character in a sentence @is_sentence_end: is first char after a sentence. Note that in degenerate cases, you could have both @is_sentence_start and @is_sentence_end set for some character. (e.g. no space after a period, so the next sentence starts right away) @backspace_deletes_character: if set, backspace deletes one character rather than the entire grapheme cluster. This field is only meaningful on grapheme boundaries (where @is_cursor_position is set). In some languages, the full grapheme (e.g. letter + diacritics) is considered a unit, while in others, each decomposed character in the grapheme is a unit. In the default implementation of pango_break(), this bit is set on all grapheme boundaries except those following Latin, Cyrillic or Greek base characters. @is_expandable_space: is a whitespace character that can possibly be expanded for justification purposes. (Since: 1.18) @is_word_boundary: is a word boundary. More specifically, means that this is not a position in the middle of a word. For example, both sides of a punctuation mark are considered word boundaries. This flag is particularly useful when selecting text word-by-word. This flag implements Unicode's Word Boundaries semantics. (Since: 1.22) @text: @length: @analysis: @glyphs: