问题标签 [harfbuzz]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
text-rendering - 使用 Harfbuzz 正确组合字符位置
我正在尝试使用 Harfbuzz 和有符号距离场图集渲染文本。
代码基本上是这样的:
对于英语短语,文本的形状看起来正确,但是当我用变音符号对其进行测试时,它们看起来放错了位置。我正在用 aâa aâ̈a bb̂b bb̂̈b bb̧b bb͜b bb︠︡b 测试它。Unicode 字符串不包含预组合字符。Harfbuzz
使用预先组合的字符â,这使得这个看起来很好。大多数其他变音符号都关闭了。
当我将 x_offset 乘以 0.5 时,组合字符的位置会更好。重音和 cedilla 位于正确的 x 位置。重音不堆叠并且在 b 上太低。BBB (U+035C) 下的弧线应连接最后两个字母,而不是以第二个 b 为中心。
我还尝试在上一组 b 上使用 U+FE20 和 U+FE21。在我的测试中,U+FE21 在 2 号 b,但看起来它应该在 3 号。
用 glyphPos[i].x_offset * 0.5f 测试,更好但仍然错误
我尝试了几种字体,但在这些字体中,只有 NotoSansDisplay-Regular.ttf 具有组合字符。我没有设法让程序在我的 Debian 系统上按预期显示该字符串(使用 HarfBuzz 2.6.4-1 进行测试)。
使用 Windows,我得到了更好的结果。这就是我所期望的:重音是堆叠的,它下方的组合双短线在正确的位置,变音符号消失了。
我是在使用 HarfBuzz 做错了什么,还是正在测试 HarfBuzz 支持的小众案例?
编辑:
上面没有描述实际问题。我用 FreeType 加载了一个字体,然后用 hb_ft_font_createFT_New_Face
创建了一个字体。hb_font_t
对于每个绘制的字符串,我都会调用FT_Set_Pixel_Sizes
但保留它hb_font_t
。
opengl - 影响 HarfBuzz 的 GLFW 窗口创建选项
我正在使用 HarfBuzz 和 freetype 来呈现区域语言印地语。
如果我为创建窗口编写这三个选项,则字体不会呈现,我只会看到空白屏幕。
如果没有这三个选项,字体将正确呈现。
我很想知道这些选项在创建窗口时有何不同?
fonts - GSUB 表是否在 TrueType 字体中广泛使用?
长话短说,我在不使用 FreeType 或 HarfBuzz(出于各种原因)的情况下渲染字体,通过手动解析 TrueType 和衍生格式以提取元数据和字形信息,然后在运行时从其轮廓构建位图和距离字段。我关心的是必要的可靠字形替换,即必须根据语言规则将某些序列替换为另一个。
我不清楚的是通常可以假设 GSUB 表有多可靠。换句话说,例如,期望阿拉伯字体应该提供一个填充的 GSUB 表,其中包含阿拉伯文字所需的替换,这是否合理?或者,鉴于这是每个脚本,是否通常假设字体只会提供特殊的每个字体替换,而假设整形引擎将任何每个脚本替换作为全局规则处理?我不担心替换的字形可能不可用,因为在这种情况下系统会搜索回退,否则会恢复到原始序列。
显然,为每个脚本设置一个全局规则集作为后备是完全可靠的,但我希望尽可能地减少这一点。很抱歉,这不完全是一个经验性问题,但我很难找到有关这方面的大量信息,而不必实际检查各种字体的大量样本。该概述似乎表明将定义每个脚本的替换,但鉴于表是模块化的,当然不能保证甚至会有一个表,更不用说所需的定义了。如果做不到这一点,是否有任何已知的各种脚本替换数据库?
glyph - 为什么 harfbuzz 将 2 个单个字符变成一个字形?
我对skia和harfbuzz都是新手,我的项目依靠skia来呈现文本(Skia依靠harfbuzz来塑造文本。)。
因此,如果我尝试渲染文本“ff”或“fl”或“fi”(或者可能是其他一些组合 idk。),而不是渲染 2“f”,skia 将渲染一个由 2 个字符组成的字形(“ff " 或 "fl" 或 "fi"),如果我设置文本字母空间属性,它会变得更加明显。
通过跟踪断点,我跟踪并发现这都是 harfbuzz 整形结果的结果。如果文本是“ff”或“fl”或“fi”,Harfbuzz 将给出 1 个字形。
似乎通过对 harfbuzz 进行一些配置,我可以避免这种情况,但不知道如何,请给我一些提示。
PS:如果我使用不同的字体文件,形状结果会有所不同,所以这也与我使用的字体文件有关。
macos - 如何在介子中为 pango、harfbuzz、glib 等设置 MACOSX_DEPLOYMENT_TARGET
我正在尝试编译库以在 OS X 10.8 及更高版本上使用。当我构建示例libpng
库时,我正在使用此脚本并且它可以工作(生成的库与 OS X 10.8 和更高版本兼容)
它有效。
但问题就在这里。我无法让它适用于任何使用meson
构建系统的东西。例如pango
:
它失败ninja
并出现错误:
如何MACOSX_DEPLOYMENT_TARGET
在配置期间指定?
linux - CMake:如何获取 find_package 的 PATHS 变量?
这是一个如何指定PATHS
变量以使 cmake 能够找到库的示例:
cmake find_package 指定路径
但是如何PATHS
为特定库获取此变量?
例如,我已经安装apt-get install libharfbuzz-dev
并向dpkg -L libharfbuzz-dev
我展示了:
我应该使用哪条路径?
更新:
错误信息:
我试图通过CMAKE_PREFIX_PATH
like添加路径,cmake .. -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu
但它没有帮助。
text - 如何使用 FreeType / HarfBuzz 查找垂直文本的列宽
我目前正在使用 FreeType + Harfbuzz 渲染文本,现在正在尝试引入垂直文本渲染(主要用于东亚脚本)。
我面临的问题是我无法弄清楚一列文本应该有多宽。对于水平文本,我们可以用 找出行高ascent - descent
,但由于在垂直文本的情况下没有提供这些值('ascent' / 'descent' 分别是字形的左侧和右侧部分)我不知道如何我的文本栏应该很宽。
我尝试使用 bbox 宽度作为字体,但不同字体之间的盒子变化很大,没有提供好的信息。
visual-studio - 加载程序集时出错:/bin/iPhoneSimulator/Debug/libHarfBuzzSharp.dll
加载程序集时出错:/Users/admin/Library/Caches/Xamarin/mtbs/builds/project.iOS/6b01e66516e8420be8424059207235df/bin/iPhoneSimulator/Debug/libHarfBuzzSharp.dll。
我最近将 xamarin iOS 项目和 Visual Studio 中的软件包升级到 16.7.4 版本。现在我无法构建 iOS 项目。早些时候它构建良好并且能够部署到模拟器。
我已经选择了 bin、obj 并重建了解决方案,但错误仍然存在。
请帮我找出这个错误的根本原因。
harfbuzz - 为什么在我的 harfbuzz 整形示例中 y_offset 为 0?
我正在使用 harfbuzz 在我的程序中转换变音字符。我在字体“Bahnschrift.ttf”中有两个字符“C”unicode 0043 和一个变音符号̆ unicode 0306。我尝试获取 X 和 Y 偏移量。X 看起来不错,但 y_offset 没有意义。我将解释原因:两个角色都有的锚点称为“t.uni0308_02”。在“C”处,它的位置为 x:658;是的:1454。在变音符号处是 x:-367;是:1038。这是证明: FontLab 中的两个字符 hb_shape 的结果是: .\hb-shape.exe .\bahnschrift.ttf --output-format=json --unicodes="0043 0306"
[{"g":"C","cl":0,"dx":0,"dy":0,"ax":1267,"ay":0},{"g":"uni0306.case ","cl":0,"dx":-182,"dy":0,"ax":0,"ay":0}]
就像垂直方向没有偏移一样。但是当我用 hb_view 将这个组合绘制成字符时,它看起来是正确的。这里有什么意义?我错过了什么吗?