Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
c311d852
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看板
提交
c311d852
编写于
7月 23, 2011
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Keep Unicode props updated as we go so we avoid a scan later
上级
5389ff4d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
26 addition
and
28 deletion
+26
-28
src/hb-ot-shape-normalize.cc
src/hb-ot-shape-normalize.cc
+26
-28
未找到文件。
src/hb-ot-shape-normalize.cc
浏览文件 @
c311d852
...
@@ -63,6 +63,15 @@ HB_BEGIN_DECLS
...
@@ -63,6 +63,15 @@ HB_BEGIN_DECLS
* matra for the Indic shaper.
* matra for the Indic shaper.
*/
*/
static
void
output_glyph
(
hb_ot_shape_context_t
*
c
,
hb_codepoint_t
glyph
)
{
hb_buffer_t
*
buffer
=
c
->
buffer
;
buffer
->
output_glyph
(
glyph
);
hb_glyph_info_set_unicode_props
(
&
buffer
->
out_info
[
buffer
->
out_len
-
1
],
buffer
->
unicode
);
}
static
bool
static
bool
decompose
(
hb_ot_shape_context_t
*
c
,
decompose
(
hb_ot_shape_context_t
*
c
,
...
@@ -78,42 +87,39 @@ decompose (hb_ot_shape_context_t *c,
...
@@ -78,42 +87,39 @@ decompose (hb_ot_shape_context_t *c,
bool
has_a
=
hb_font_get_glyph
(
c
->
font
,
a
,
0
,
&
glyph
);
bool
has_a
=
hb_font_get_glyph
(
c
->
font
,
a
,
0
,
&
glyph
);
if
(
shortest
&&
has_a
)
{
if
(
shortest
&&
has_a
)
{
/* Output a and b */
/* Output a and b */
c
->
buffer
->
output_glyph
(
a
);
output_glyph
(
c
,
a
);
if
(
b
)
if
(
b
)
c
->
buffer
->
output_glyph
(
b
);
output_glyph
(
c
,
b
);
return
TRUE
;
return
TRUE
;
}
}
if
(
decompose
(
c
,
shortest
,
a
))
{
if
(
decompose
(
c
,
shortest
,
a
))
{
if
(
b
)
if
(
b
)
c
->
buffer
->
output_glyph
(
b
);
output_glyph
(
c
,
b
);
return
TRUE
;
return
TRUE
;
}
}
if
(
has_a
)
{
if
(
has_a
)
{
c
->
buffer
->
output_glyph
(
a
);
output_glyph
(
c
,
a
);
if
(
b
)
if
(
b
)
c
->
buffer
->
output_glyph
(
b
);
output_glyph
(
c
,
b
);
return
TRUE
;
return
TRUE
;
}
}
return
FALSE
;
return
FALSE
;
}
}
static
bool
static
void
decompose_current_glyph
(
hb_ot_shape_context_t
*
c
,
decompose_current_glyph
(
hb_ot_shape_context_t
*
c
,
bool
shortest
)
bool
shortest
)
{
{
if
(
decompose
(
c
,
shortest
,
c
->
buffer
->
info
[
c
->
buffer
->
idx
].
codepoint
))
{
if
(
decompose
(
c
,
shortest
,
c
->
buffer
->
info
[
c
->
buffer
->
idx
].
codepoint
))
c
->
buffer
->
skip_glyph
();
c
->
buffer
->
skip_glyph
();
return
TRUE
;
else
}
else
{
c
->
buffer
->
next_glyph
();
c
->
buffer
->
next_glyph
();
return
FALSE
;
}
}
}
static
bool
static
void
decompose_single_char_cluster
(
hb_ot_shape_context_t
*
c
,
decompose_single_char_cluster
(
hb_ot_shape_context_t
*
c
,
bool
will_recompose
)
bool
will_recompose
)
{
{
...
@@ -122,27 +128,23 @@ decompose_single_char_cluster (hb_ot_shape_context_t *c,
...
@@ -122,27 +128,23 @@ decompose_single_char_cluster (hb_ot_shape_context_t *c,
/* If recomposing and font supports this, we're good to go */
/* If recomposing and font supports this, we're good to go */
if
(
will_recompose
&&
hb_font_get_glyph
(
c
->
font
,
c
->
buffer
->
info
[
c
->
buffer
->
idx
].
codepoint
,
0
,
&
glyph
))
{
if
(
will_recompose
&&
hb_font_get_glyph
(
c
->
font
,
c
->
buffer
->
info
[
c
->
buffer
->
idx
].
codepoint
,
0
,
&
glyph
))
{
c
->
buffer
->
next_glyph
();
c
->
buffer
->
next_glyph
();
return
FALSE
;
return
;
}
}
return
decompose_current_glyph
(
c
,
will_recompose
);
decompose_current_glyph
(
c
,
will_recompose
);
}
}
static
bool
static
void
decompose_multi_char_cluster
(
hb_ot_shape_context_t
*
c
,
decompose_multi_char_cluster
(
hb_ot_shape_context_t
*
c
,
unsigned
int
end
)
unsigned
int
end
)
{
{
bool
changed
=
FALSE
;
/* TODO Currently if there's a variation-selector we give-up, it's just too hard. */
/* TODO Currently if there's a variation-selector we give-up, it's just too hard. */
for
(
unsigned
int
i
=
c
->
buffer
->
idx
;
i
<
end
;
i
++
)
for
(
unsigned
int
i
=
c
->
buffer
->
idx
;
i
<
end
;
i
++
)
if
(
unlikely
(
is_variation_selector
(
c
->
buffer
->
info
[
i
].
codepoint
)))
if
(
unlikely
(
is_variation_selector
(
c
->
buffer
->
info
[
i
].
codepoint
)))
return
changed
;
return
;
while
(
c
->
buffer
->
idx
<
end
)
while
(
c
->
buffer
->
idx
<
end
)
changed
|=
decompose_current_glyph
(
c
,
FALSE
);
decompose_current_glyph
(
c
,
FALSE
);
return
changed
;
}
}
void
void
...
@@ -150,11 +152,10 @@ _hb_ot_shape_normalize (hb_ot_shape_context_t *c)
...
@@ -150,11 +152,10 @@ _hb_ot_shape_normalize (hb_ot_shape_context_t *c)
{
{
hb_buffer_t
*
buffer
=
c
->
buffer
;
hb_buffer_t
*
buffer
=
c
->
buffer
;
bool
recompose
=
!
hb_ot_shape_complex_prefer_decomposed
(
c
->
plan
->
shaper
);
bool
recompose
=
!
hb_ot_shape_complex_prefer_decomposed
(
c
->
plan
->
shaper
);
bool
changed
=
FALSE
;
bool
has_multichar_clusters
=
FALSE
;
bool
has_multichar_clusters
=
FALSE
;
unsigned
int
count
;
unsigned
int
count
;
/* We do a fa
ri
ly straightforward yet custom normalization process in three
/* We do a fa
ir
ly straightforward yet custom normalization process in three
* separate rounds: decompose, reorder, recompose (if desired). Currently
* separate rounds: decompose, reorder, recompose (if desired). Currently
* this makes two buffer swaps. We can make it faster by moving the last
* this makes two buffer swaps. We can make it faster by moving the last
* two rounds into the inner loop for the first round, but it's more readable
* two rounds into the inner loop for the first round, but it's more readable
...
@@ -173,9 +174,9 @@ _hb_ot_shape_normalize (hb_ot_shape_context_t *c)
...
@@ -173,9 +174,9 @@ _hb_ot_shape_normalize (hb_ot_shape_context_t *c)
break
;
break
;
if
(
buffer
->
idx
+
1
==
end
)
if
(
buffer
->
idx
+
1
==
end
)
changed
|=
decompose_single_char_cluster
(
c
,
recompose
);
decompose_single_char_cluster
(
c
,
recompose
);
else
{
else
{
changed
|=
decompose_multi_char_cluster
(
c
,
end
);
decompose_multi_char_cluster
(
c
,
end
);
has_multichar_clusters
=
TRUE
;
has_multichar_clusters
=
TRUE
;
}
}
}
}
...
@@ -193,9 +194,6 @@ _hb_ot_shape_normalize (hb_ot_shape_context_t *c)
...
@@ -193,9 +194,6 @@ _hb_ot_shape_normalize (hb_ot_shape_context_t *c)
if
(
!
has_multichar_clusters
)
if
(
!
has_multichar_clusters
)
return
;
/* Done! */
return
;
/* Done! */
if
(
changed
)
_hb_set_unicode_props
(
c
->
buffer
);
/* BUFFER: Set general_category and combining_class in var1 */
/* Second round, reorder (inplace) */
/* Second round, reorder (inplace) */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录