Re: How to create attributes in Pango



Hello,
sorry for the delay and thank your for your answer.

1.) What I do -- I am working on CLI a script
    that renders several rectangle objects with corresponding
    text strings into the cairo's SVGSurface.

    So first, I use cairo to paint some rectangles and then I utilize pango
    to add a corresponding text string into the middle of every rectangle.

    So, no I dont use widgets. I use cairo (v 1.10.0), Pango (v 1.40.4) and PangoCairo.
    I know that there are some ways to utilize CSS, but
    not in Pango (as far as I know).

2.) So it looks like equivalents to functions like "pango_attr_family_new()"
    are not available in Python3.

    I currently use "Pango.parse_markup()" method for this. I suggest
    adding a third column (named something like "Python alternative") into the
    "Symbol Mapping" table (https://lazka.github.io/pgi-docs/Pango-1.0/mapping.html).

    So that for the "pango_attr_family_new()" and similar attr functions,
    there would be an alternative value "Pango.parse_markup()", "Pango.Layout.set_markup()"
    and "Pango.Layout.set_markup_with_accel()" (or just the first one).

3.) However, the problem with these "markup" functions is that they are not able to crunch
    even a simple unicode string.

    This example fails with the Glib.Error for me:

    markup_text = "<span foreground=\"#ffffff\">" + "saké" + "</span>"
    ret, attrs, text, accel_char = Pango.parse_markup(markup_text, len(markup_text), "\u0000")

    GLib.Error: g-markup-error-quark: Error on line 1 char 48: '/' is not a valid character following the 
close element name 'span<'; the allowed character is '>' (2)

    The workaround exists -- I compute the length of my text (len("saké"))
    and pass only an ascii version of the string.

    Fortunately "Pango.Layout.set_text()" works with an UTF strings.
    This bug of course makes "set_markup()" and "set_markup_with_accel()"
    methods de facto unusable.

Thanks, S. Vlcek.


On 05/05/2017 06:59 PM, infirit wrote:
Op 05/05/2017 om 05:32 PM schreef Slavomir Vlcek:
1.) Please could anyone tell me how to replace the c-based function
     "pango_attr_family_new()"? This is one of many functions
     that does not seem to have a python equivalent
     (according to http://lazka.github.io/pgi-docs/#Pango-1.0/mapping.html).

There is an open bug on this [1]. There is however a alternative (better?) way to style widgets in Gtk3, it 
is CSS. I recently modified a  script  to show how it is done, see [2]. If you are not styling widgets 
please elaborate what you are actually trying to do.
2.) By the way when I pass (unitialized) Pango.Attribute() instance
     to the insert() method, my script ends with SIGFAULT.

     attrs = Pango.AttrList()
     attr = Pango.Attribute()
     attrs.insert(attr)

     I guess that is not the correct behavior.

Have not used Pango but reading the bug [1] it may be related to it.

~infirit

[1] https://bugzilla.gnome.org/show_bug.cgi?id=646788
[2] https://gist.github.com/infirit/cf4f531e03136b641471b079b8370ead


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]