Использование табуляции в Панго / Каире

Кто-нибудь может мне помочь с использованием табуляции в Панго / Каире? Я использую Pango и Cairo, чтобы сгенерировать простое изображение, а затем сохранить его в виде файла.png.

Правильно ли я считаю, что эти табуляции могут использоваться для разметки текста? Например, если у меня была следующая строка C/C++;

"<span background=\"black\" foreground=\"red\">\n"
"This is a test of Pango tab stops.\n"
"\n"
"----*----|----*----|----*----|----*----|----*----|\n"
"\tA\tB\tC\tD\n"
"</span>";

должна ли строка, содержащая;

\tA\tB\tC\tD

быть разнесены из-за использования вкладок, т.е. escape-последовательностей '\t'?

Я устанавливаю свои вкладки Pango, используя следующий код;

PangoTabArray* tabArray;


tabArray
=
pango_tab_array_new
(
 4,     // Setup array for 4 tab stops.
 FALSE  // Whether positions are in pixel units.
);

// Configure the 4 tab stops in the tab array which was just created.

pango_tab_array_set_tab
(
 tabArray,
 0,               // Configure Tab at index 0.
 PANGO_TAB_LEFT,  // Configure Tab to be left aligned.
 9                // Configure Tab location.
);

pango_tab_array_set_tab
(
 tabArray,
 1,               // Configure Tab at index 1.
 PANGO_TAB_LEFT,  // Configure Tab to be left aligned.
 19               // Configure Tab location.
);

pango_tab_array_set_tab
(
 tabArray,
 2,               // Configure Tab at index 2.
 PANGO_TAB_LEFT,  // Configure Tab to be left aligned.
 29               // Configure Tab location.
);

pango_tab_array_set_tab
(
 tabArray,
 3,               // Configure Tab at index 3.
 PANGO_TAB_LEFT,  // Configure Tab to be left aligned.
 39               // Configure Tab location.
);

Мой код удается скомпилировать и запустить. Однако, когда я запускаю его, я получаю следующее изображение;

Pango Tab останавливает пример

Это не то, что я ожидал. Я ожидал, что буквы будут выстроены под звездочками, то есть сразу после четырех табуляций, которые были установлены для мест 9, 19, 29 и 39 соответственно.

Я считаю, что мои табуляторы установлены правильно. Я использую следующий код, чтобы проверить их.

int             numTabStops = 0;

PangoTabAlign   alignment;

gint            location;


numTabStops = pango_tab_array_get_size(tabArray);

cout << "Number of Tab stops in the Tab array = " << numTabStops << endl;

pango_tab_array_get_tab
(
 tabArray,
 0,
 & alignment,
 & location
);

cout << "Tab stop at index 0 has location = " << location << endl;

Когда я запускаю свою программу из командной строки, она выводит следующее;

Number of Tab stops in the Tab array = 4
Tab stop at index 0 has location = 9

Код, который я использую, чтобы заставить Pango обрабатывать текст:

pango_layout_set_markup
(
 layout,
 testString.c_str(),  // This is the C/C++ string from above.
 -1
);

Полностью ли я неправильно понимаю использование этих табуляций или мне просто нужно вызвать другую функцию Pango или Cairo для их использования?

Заранее спасибо.

0 ответов

Другие вопросы по тегам