Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
621c49cb
T
Third Party Harfbuzz
项目概览
OpenHarmony
/
Third Party Harfbuzz
1 年多 前同步成功
通知
0
Star
18
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Harfbuzz
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
621c49cb
编写于
10月 04, 2017
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Improve performance of ligature component matching
This O(N^2) was introduced in
8b2c94c4
. Make it O(N).
上级
ab8d70ec
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
24 addition
and
13 deletion
+24
-13
src/hb-ot-layout-gsubgpos-private.hh
src/hb-ot-layout-gsubgpos-private.hh
+24
-13
未找到文件。
src/hb-ot-layout-gsubgpos-private.hh
浏览文件 @
621c49cb
...
...
@@ -764,6 +764,12 @@ static inline bool match_input (hb_apply_context_t *c,
unsigned
int
first_lig_id
=
_hb_glyph_info_get_lig_id
(
&
buffer
->
cur
());
unsigned
int
first_lig_comp
=
_hb_glyph_info_get_lig_comp
(
&
buffer
->
cur
());
enum
{
LIGBASE_NOT_CHECKED
,
LIGBASE_MAY_NOT_SKIP
,
LIGBASE_MAY_SKIP
}
ligbase
=
LIGBASE_NOT_CHECKED
;
match_positions
[
0
]
=
buffer
->
idx
;
for
(
unsigned
int
i
=
1
;
i
<
count
;
i
++
)
{
...
...
@@ -783,29 +789,34 @@ static inline bool match_input (hb_apply_context_t *c,
{
/* ...unless, we are attached to a base ligature and that base
* ligature is ignorable. */
bool
found
=
false
;
const
hb_glyph_info_t
*
out
=
buffer
->
out_info
;
unsigned
int
j
=
buffer
->
out_len
;
while
(
j
&&
_hb_glyph_info_get_lig_id
(
&
out
[
j
-
1
])
==
first_lig_id
)
if
(
ligbase
==
LIGBASE_NOT_CHECKED
)
{
if
(
_hb_glyph_info_get_lig_comp
(
&
out
[
j
-
1
])
==
0
)
bool
found
=
false
;
const
hb_glyph_info_t
*
out
=
buffer
->
out_info
;
unsigned
int
j
=
buffer
->
out_len
;
while
(
j
&&
_hb_glyph_info_get_lig_id
(
&
out
[
j
-
1
])
==
first_lig_id
)
{
if
(
_hb_glyph_info_get_lig_comp
(
&
out
[
j
-
1
])
==
0
)
{
j
--
;
found
=
true
;
break
;
}
j
--
;
found
=
true
;
break
;
}
j
--
;
}
if
(
!
found
)
return_trace
(
false
);
if
(
found
&&
skippy_iter
.
may_skip
(
c
,
out
[
j
])
==
hb_apply_context_t
::
matcher_t
::
SKIP_YES
)
ligbase
=
LIGBASE_MAY_SKIP
;
else
ligbase
=
LIGBASE_MAY_NOT_SKIP
;
}
if
(
skippy_iter
.
may_skip
(
c
,
out
[
j
])
!=
hb_apply_context_t
::
matcher_t
::
SKIP_YES
)
if
(
ligbase
==
LIGBASE_MAY_NOT_SKIP
)
return_trace
(
false
);
}
}
else
{
{
/* If first component was NOT attached to a previous ligature component,
* all subsequent components should also NOT be attached to any ligature
* component, unless they are attached to the first component itself! */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录