- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Pango 来排版梵文。考虑由梵文字母 U、梵文字母 MA、梵文符号 VIRAMA、梵文字母 KA、梵文字母 NA、梵文符号 VIRAMA、梵文字母 CHA、梵文元音符号 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;
最佳答案
您无法测量局部渲染。而是测量整个渲染并逐字遍历字符串以找到位置。另见:https://gankra.github.io/blah/text-hates-you/#style-can-change-mid-ligature
use strict;
use warnings;
use utf8;
use Cairo;
use Pango;
use List::Util qw(uniq);
use Encode qw(encode);
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);
my $phrase = 'उम्कन्छौ';
my @octets = split '', encode 'UTF-8', $phrase; # index_to_pos operates on octets
$layout->set_markup($phrase);
my ($x, $y) = (100, 100);
$cr->move_to($x, $y);
$cr->set_source_rgba(0, 0, 0, 1);
Pango::Cairo::show_layout($cr, $layout);
$cr->set_line_width(0.25);
my @offsets = uniq map { $layout->index_to_pos($_)->{x}/1024 } 0..$#octets;
# (0, 9.859375, 16.09375, 27.796875, 33.953125, 49.1875)
for my $offset (@offsets) {
$cr->move_to($x+$offset, $y-5);
$cr->line_to($x+$offset, $y+25);
$cr->stroke;
}
my @graphemes = $phrase =~ /\X/g; # qw(उ म् क न् छौ)
while (my ($idx, $g) = each @graphemes) {
if ($g =~ /^छ/) {
$cr->move_to($x+$offsets[$idx], $y-10);
$cr->line_to($x+$offsets[$idx], $y+50);
$cr->stroke;
last;
}
}
$cr->show_page;
关于perl - Pango:在梵文字符串中查找位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58395294/
我正在使用 Pango 来排版梵文。考虑由梵文字母 U、梵文字母 MA、梵文符号 VIRAMA、梵文字母 KA、梵文字母 NA、梵文符号 VIRAMA、梵文字母 CHA、梵文元音符号 AU 组成的字符
我正在尝试在使用 pango 构建的绘图中标记 y 轴。 我无法将文本定向为沿 y 轴垂直向上。 代码的相关部分是: #include Pango::FontDescription font;
我有一个代码使用Cairo和 Pango创建图像: #include #include #include #define IMAGE_WIDTH 650 #define IMAGE_HEIGHT 1
我有一个使用 pango 的文本框实现。如果我在从右到左的脚本中放置一个以单词开头的字符串,后跟一个空格,然后在从左到右的脚本中放置单词,则 pango 使用的自动换行会变得困惑(使用 PANGO_W
我想要一个左对齐标签,其中包含一些粗体文本,但使用以下代码(不返回错误)未设置对齐方式...有人知道吗? (python2.7、gtk2.24) label=gtk.Label(""+text+"")
我正在尝试将标签添加到 GTK3 窗口,然后设置标签的字体大小。这是我的尝试: #include static void add_label (GtkWidget* window, gchar *t
第一次海报; Stack Overflow 天使的长期崇拜者。 我在 Pango 控制的跨度文本中遇到颜色问题。 长版: 我正在更新一个旧的 UI 程序,它具有带有 GTK、XML(由 Glade 编
我正在使用 pangomm 渲染一些文本,但我使用的字体没有部分文本的字形(在这种情况下,有一些日语和英语混合在一起)。 Pango 似乎使用后备字体正确呈现文本。 如何确定将哪种字体用作备用字体?
我正在使用 GTK Sharp 为我的应用开发一些 GUI。 看看这段代码: Pango.FontDescription fontdesc = new Pango.FontDescription();
我觉得我可能会错过 Pango 的一些东西。 API 中的几乎所有内容似乎都适合显示静态文本,除了在特定位置绘制/移动光标的两个函数除外,这表明可能有一种内置的方式来实现编辑文本。 例如,要用鼠标标记
我的程序有一个 gtk.TreeView,它显示一个 gtk.ListStore。 gtk.ListStore 包含这样的字符串: ""+site_title+""+"\n"+URL URL 显然是一
Cabal 在尝试安装 pango 时失败,提示它找不到 pkg-config。 peauters:~ $ sudo cabal install pango -v Password: Reading
我正在尝试在 ubuntu 上构建 gtk+1.3,但在配置过程中出现错误, ld: cannot find -lpango 我尝试安装大量 pango 库,但仍未安装,所以我不确定该怎么做。我一直在
根据 this documentation , Pango 能够处理一些便利标签,如 粗体,或 为斜体。 但是,没有什么可以换行的,比如常用的 .有没有办法让 Pango 能够处理换行? 最佳答案 通
启动使用Pango库的任何内容时出现此错误。我正在使用Kubuntu 9.10。我已经在libgtk * libcairo * libpango *和fontconfig上完成了'sudo apt-g
我正在构建 firefox 的定制源代码。当我要构建 firefox 时,出现以下错误,提示“没有 pango 包错误”。我该如何解决这个错误。 最佳答案 如果您使用的是 Ubuntu 18.04 或
我正在使用 librsvg 将 SVG 文件渲染到开罗上下文。之后,我使用 Pango “手动”在顶部渲染一些文本。 渲染 SVG 时,我收到 Pango 警告,指出它无法加载字体: “无法加载字体“
我正在构建 firefox 的定制源代码。当我要构建 firefox 时,出现以下错误,提示“没有 pango 包错误”。我该如何解决这个错误。 最佳答案 如果您使用的是 Ubuntu 18.04 或
我在让 Pango Cairo 自动换行时遇到问题。下面是一些演示代码。我将布局的宽度设置为与红色矩形相同,因此我希望它环绕到红色矩形。实际上,它只是在每一行上放置一个单词,就好像宽度设置得很小一样。
我需要 pyCairo 做的是: 生成一个大小为 100x100 的图像,其中包含一些文本和来自文件系统的图像作为背景 文本应位于文本环绕大小为 20x20 且左下角位于 (40,40) 的框中。 保
我是一名优秀的程序员,十分优秀!