Я использую Python для взаимодействия с Pan go и PangoCairo. При извлечении атрибутов (PangoLogAttr) из объекта макета кажется, что экземпляры PangoLogAttr не инициализированы должным образом или что средства доступа к полю не работают. Вот пример кода в Python, который создает фиктивные значения:
import gi
gi.require_version('Pango', '1.0')
gi.require_version('PangoCairo', '1.0')
from gi.repository import Pango, PangoCairo
text = "hello.123 world"
ctx = Pango.FontMap.create_context(PangoCairo.FontMap.get_default())
layout = Pango.Layout(ctx)
desc = Pango.font_description_from_string("Monospace 16")
layout.set_font_description(desc)
layout.set_text(text, -1)
attrs = layout.get_log_attrs_readonly()
for i in range(0, len(attrs)-1):
print(text[i], attrs[i].is_word_start)
Вывод:
h 4180
e 81
l 0
...
Соответствующий код C работает нормально:
#include <gdk/gdk.h>
const char* text = "hello.123 world";
void main() {
PangoFontMap* map = pango_cairo_font_map_get_default();
PangoContext* context = pango_font_map_create_context(map);
PangoFontDescription* desc = pango_font_description_from_string("Monospace 16");
PangoLayout* layout = pango_layout_new(context);
pango_layout_set_font_description(layout, desc);
pango_layout_set_text(layout, text, -1);
gint num_attrs;
const PangoLogAttr* attrs = pango_layout_get_log_attrs_readonly(layout, &num_attrs);
for (int i=0; i < strlen(text); i++) {
printf("%c %d\n", text[i], attrs[i].is_word_start);
}
}
Есть ли у кого-нибудь еще такая проблема? Как я могу отследить ошибку?