我正在使用 Pango 排版梵文。考虑由 DEVANAGARI LETTER U、DEVANAGARI LETTER MA、DEVANAGARI SIGN VIRAMA、DEVANAGARI LETTER KA、DEVANAGARI LETTER NA、DEVANAGARI SIGN VIRAMA、DEVANAGARI LETTER CHA、DEVANAGARI VOWEL SIGN AU 组成的字符串 उम्कन्छौ。在排版这个字符串时,我想知道छ(CHA)的起始点来放置一个视觉标记。
对于普通字符串,我会取前面部分的长度,उम्कन्,但这在这里不起作用,因为你可以看到 न्(半个 न)与 छ 结合,所以结果略有偏差。
当涉及组合时,有没有办法获得正确的字母起点?
我尝试使用 index_to_pos() 查询 Pango 布局,但这似乎适用于字节级别(而不是字符)。
这个小的 Perl 程序显示了这个问题。垂直线在右侧。
use strict;
use warnings;
use utf8;
use Cairo;
use Pango;
my $surface = Cairo::PdfSurface->create ("out.pdf", 595, 842);
my $cr = Cairo::Context->create ($surface);
my $layout = Pango::Cairo::create_layout($cr);
my $font = Pango::FontDescription->from_string('Lohit Devanagari');
$layout->set_font_description($font);
# Two parts of the phrase. Phrase1 ends in न् (half न).
my $phrase1 = 'उम्कन्';
my $phrase2 = 'छौ';
# Set the first part of the phrase, and get its width.
$layout->set_markup($phrase1);
my $w = ($layout->get_size)[0]/1024;
# Set the complete phrase.
$layout->set_markup($phrase1.$phrase2);
my ($x, $y ) = ( 100, 100 );
# Show phrase.
$cr->move_to( $x, $y );
$cr->set_source_rgba( 0, 0, 0, 1 );
Pango::Cairo::show_layout($cr, $layout);
# Show marker at width.
$cr->set_line_width(0.25);
$cr->move_to( $x + $w, $y-10 );
$cr->line_to( $x + $w, $y+50 );
$cr->stroke;
$cr->show_page;