:right-sidebar: True AttrList =================================================================== .. currentmodule:: gi.repository.Pango .. class:: AttrList(**kwargs) :no-contents-entry: A ``PangoAttrList`` represents a list of attributes that apply to a section of text. The attributes in a ``PangoAttrList`` are, in general, allowed to overlap in an arbitrary fashion. However, if the attributes are manipulated only through :obj:`~gi.repository.Pango.AttrList.change`\, the overlap between properties will meet stricter criteria. Since the ``PangoAttrList`` structure is stored as a linear list, it is not suitable for storing attributes for large amounts of text. In general, you should not use a single ``PangoAttrList`` for more than one paragraph of text. Constructors ------------ .. rst-class:: interim-class .. class:: AttrList :no-index: .. classmethod:: new() -> ~gi.repository.Pango.AttrList Create a new empty attribute list with a reference count of one. Methods ------- .. rst-class:: interim-class .. class:: AttrList :no-index: .. method:: change(attr: ~gi.repository.Pango.Attribute) -> None Insert the given attribute into the ``PangoAttrList``\. It will replace any attributes of the same type on that segment and be merged with any adjoining attributes that are identical. This function is slower than :obj:`~gi.repository.Pango.AttrList.insert` for creating an attribute list in order (potentially much slower for large lists). However, :obj:`~gi.repository.Pango.AttrList.insert` is not suitable for continually changing a set of attributes since it never removes or combines existing attributes. :param attr: the attribute to insert .. method:: equal(other_list: ~gi.repository.Pango.AttrList) -> bool Checks whether ``list`` and ``other_list`` contain the same attributes and whether those attributes apply to the same ranges. Beware that this will return wrong values if any list contains duplicates. .. versionadded:: 1.46 :param other_list: the other ``PangoAttrList`` .. method:: filter(func: ~typing.Callable[[~gi.repository.Pango.Attribute, ~typing.Any], bool], data: ~typing.Any = None) -> ~gi.repository.Pango.AttrList | None Given a ``PangoAttrList`` and callback function, removes any elements of ``list`` for which ``func`` returns :const:`True` and inserts them into a new list. .. versionadded:: 1.2 :param func: callback function; returns :const:`True` if an attribute should be filtered out :param data: Data to be passed to ``func`` .. classmethod:: from_string() -> ~gi.repository.Pango.AttrList | None Deserializes a ``PangoAttrList`` from a string. This is the counterpart to :obj:`~gi.repository.Pango.AttrList.to_string`\. See that functions for details about the format. .. versionadded:: 1.50 .. method:: get_attributes() -> list[~gi.repository.Pango.Attribute] Gets a list of all attributes in ``list``\. .. versionadded:: 1.44 .. method:: get_iterator() -> ~gi.repository.Pango.AttrIterator Create a iterator initialized to the beginning of the list. ``list`` must not be modified until this iterator is freed. .. method:: insert(attr: ~gi.repository.Pango.Attribute) -> None Insert the given attribute into the ``PangoAttrList``\. It will be inserted after all other attributes with a matching ``start_index``\. :param attr: the attribute to insert .. method:: insert_before(attr: ~gi.repository.Pango.Attribute) -> None Insert the given attribute into the ``PangoAttrList``\. It will be inserted before all other attributes with a matching ``start_index``\. :param attr: the attribute to insert .. method:: splice(other: ~gi.repository.Pango.AttrList, pos: int, len: int) -> None This function opens up a hole in ``list``\, fills it in with attributes from the left, and then merges ``other`` on top of the hole. This operation is equivalent to stretching every attribute that applies at position ``pos`` in ``list`` by an amount ``len``\, and then calling :obj:`~gi.repository.Pango.AttrList.change` with a copy of each attribute in ``other`` in sequence (offset in position by ``pos``\, and limited in length to ``len``\). This operation proves useful for, for instance, inserting a pre-edit string in the middle of an edit buffer. For backwards compatibility, the function behaves differently when ``len`` is 0. In this case, the attributes from ``other`` are not imited to ``len``\, and are just overlayed on top of ``list``\. This mode is useful for merging two lists of attributes together. :param other: another ``PangoAttrList`` :param pos: the position in ``list`` at which to insert ``other`` :param len: the length of the spliced segment. (Note that this must be specified since the attributes in ``other`` may only be present at some subsection of this range) .. method:: to_string() -> str Serializes a ``PangoAttrList`` to a string. In the resulting string, serialized attributes are separated by newlines or commas. Individual attributes are serialized to a string of the form START END TYPE VALUE Where START and END are the indices (with -1 being accepted in place of MAXUINT), TYPE is the nickname of the attribute value type, e.g. *weight* or *stretch*\, and the value is serialized according to its type: - enum values as nick or numeric value - boolean values as *true* or *false* - integers and floats as numbers - strings as string, optionally quoted - font features as quoted string - PangoLanguage as string - PangoFontDescription as serialized by :obj:`~gi.repository.Pango.FontDescription.to_string`\, quoted - PangoColor as serialized by :obj:`~gi.repository.Pango.Color.to_string` Examples: .. code-block:: :dedent: 0 10 foreground red, 5 15 weight bold, 0 200 font-desc "Sans 10" .. code-block:: :dedent: 0 -1 weight 700 0 100 family Times To parse the returned value, use :obj:`~gi.repository.Pango.AttrList.from_string`\. Note that shape attributes can not be serialized. .. versionadded:: 1.50 .. method:: update(pos: int, remove: int, add: int) -> None Update indices of attributes in ``list`` for a change in the text they refer to. The change that this function applies is removing ``remove`` bytes at position ``pos`` and inserting ``add`` bytes instead. Attributes that fall entirely in the (``pos``\, ``pos`` + ``remove``\) range are removed. Attributes that start or end inside the (``pos``\, ``pos`` + ``remove``\) range are shortened to reflect the removal. Attributes start and end positions are updated if they are behind ``pos`` + ``remove``\. .. versionadded:: 1.44 :param pos: the position of the change :param remove: the number of removed bytes :param add: the number of added bytes