Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
cdf1fd06
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cdf1fd06
编写于
7月 14, 2017
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[indic] Add infrastructure to disable ZWNJ-skipping in context-matching
Not used yet.
上级
3a73e0d5
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
39 addition
and
25 deletion
+39
-25
src/hb-ot-layout-gsubgpos-private.hh
src/hb-ot-layout-gsubgpos-private.hh
+25
-20
src/hb-ot-layout.cc
src/hb-ot-layout.cc
+1
-0
src/hb-ot-map-private.hh
src/hb-ot-map-private.hh
+7
-3
src/hb-ot-map.cc
src/hb-ot-map.cc
+6
-2
未找到文件。
src/hb-ot-layout-gsubgpos-private.hh
浏览文件 @
cdf1fd06
...
...
@@ -346,9 +346,9 @@ struct hb_apply_context_t :
matcher
.
set_match_func
(
NULL
,
NULL
);
matcher
.
set_lookup_props
(
c
->
lookup_props
);
/* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
matcher
.
set_ignore_zwnj
(
c
ontext_match
||
c
->
table_index
==
1
);
matcher
.
set_ignore_zwnj
(
c
->
table_index
==
1
||
(
context_match
&&
c
->
auto_zwnj
)
);
/* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if asked to. */
matcher
.
set_ignore_zwj
(
context_match
||
c
->
table_index
==
1
||
c
->
auto_zwj
);
matcher
.
set_ignore_zwj
(
c
->
table_index
==
1
||
(
context_match
||
c
->
auto_zwj
)
);
matcher
.
set_mask
(
context_match
?
-
1
:
c
->
lookup_mask
);
}
inline
void
set_lookup_props
(
unsigned
int
lookup_props
)
...
...
@@ -457,45 +457,50 @@ struct hb_apply_context_t :
return
ret
;
}
unsigned
int
table_index
;
/* GSUB/GPOS */
skipping_iterator_t
iter_input
,
iter_context
;
hb_font_t
*
font
;
hb_face_t
*
face
;
hb_buffer_t
*
buffer
;
hb_direction_t
direction
;
hb_mask_t
lookup_mask
;
bool
auto_zwj
;
recurse_func_t
recurse_func
;
unsigned
int
nesting_level_left
;
unsigned
int
lookup_props
;
const
GDEF
&
gdef
;
bool
has_glyph_classes
;
const
VariationStore
&
var_store
;
skipping_iterator_t
iter_input
,
iter_context
;
hb_direction_t
direction
;
hb_mask_t
lookup_mask
;
unsigned
int
table_index
;
/* GSUB/GPOS */
unsigned
int
lookup_index
;
unsigned
int
lookup_props
;
unsigned
int
nesting_level_left
;
unsigned
int
debug_depth
;
bool
auto_zwnj
;
bool
auto_zwj
;
bool
has_glyph_classes
;
hb_apply_context_t
(
unsigned
int
table_index_
,
hb_font_t
*
font_
,
hb_buffer_t
*
buffer_
)
:
table_index
(
table_index_
),
iter_input
(),
iter_context
(
),
font
(
font_
),
face
(
font
->
face
),
buffer
(
buffer_
),
direction
(
buffer_
->
props
.
direction
),
lookup_mask
(
1
),
auto_zwj
(
true
),
recurse_func
(
NULL
),
nesting_level_left
(
HB_MAX_NESTING_LEVEL
),
lookup_props
(
0
),
gdef
(
*
hb_ot_layout_from_face
(
face
)
->
gdef
),
has_glyph_classes
(
gdef
.
has_glyph_classes
()),
var_store
(
gdef
.
get_var_store
()),
iter_input
(),
iter_context
(),
direction
(
buffer_
->
props
.
direction
),
lookup_mask
(
1
),
table_index
(
table_index_
),
lookup_index
((
unsigned
int
)
-
1
),
debug_depth
(
0
)
{}
lookup_props
(
0
),
nesting_level_left
(
HB_MAX_NESTING_LEVEL
),
debug_depth
(
0
),
auto_zwnj
(
true
),
auto_zwj
(
true
),
has_glyph_classes
(
gdef
.
has_glyph_classes
())
{}
inline
void
set_lookup_mask
(
hb_mask_t
mask
)
{
lookup_mask
=
mask
;
}
inline
void
set_auto_zwj
(
bool
auto_zwj_
)
{
auto_zwj
=
auto_zwj_
;
}
inline
void
set_auto_zwnj
(
bool
auto_zwnj_
)
{
auto_zwnj
=
auto_zwnj_
;
}
inline
void
set_recurse_func
(
recurse_func_t
func
)
{
recurse_func
=
func
;
}
inline
void
set_lookup_index
(
unsigned
int
lookup_index_
)
{
lookup_index
=
lookup_index_
;
}
inline
void
set_lookup_props
(
unsigned
int
lookup_props_
)
...
...
src/hb-ot-layout.cc
浏览文件 @
cdf1fd06
...
...
@@ -1219,6 +1219,7 @@ inline void hb_ot_map_t::apply (const Proxy &proxy,
c
.
set_lookup_index
(
lookup_index
);
c
.
set_lookup_mask
(
lookups
[
table_index
][
i
].
mask
);
c
.
set_auto_zwj
(
lookups
[
table_index
][
i
].
auto_zwj
);
c
.
set_auto_zwnj
(
lookups
[
table_index
][
i
].
auto_zwnj
);
apply_string
<
Proxy
>
(
&
c
,
proxy
.
table
.
get_lookup
(
lookup_index
),
proxy
.
accels
[
lookup_index
]);
...
...
src/hb-ot-map-private.hh
浏览文件 @
cdf1fd06
...
...
@@ -50,6 +50,7 @@ struct hb_ot_map_t
hb_mask_t
mask
;
hb_mask_t
_1_mask
;
/* mask for value=1, for quick access */
unsigned
int
needs_fallback
:
1
;
unsigned
int
auto_zwnj
:
1
;
unsigned
int
auto_zwj
:
1
;
static
int
cmp
(
const
feature_map_t
*
a
,
const
feature_map_t
*
b
)
...
...
@@ -58,6 +59,7 @@ struct hb_ot_map_t
struct
lookup_map_t
{
unsigned
short
index
;
unsigned
short
auto_zwnj
:
1
;
unsigned
short
auto_zwj
:
1
;
hb_mask_t
mask
;
...
...
@@ -150,8 +152,9 @@ enum hb_ot_map_feature_flags_t {
F_NONE
=
0x0000u
,
F_GLOBAL
=
0x0001u
,
/* Feature applies to all characters; results in no mask allocated for it. */
F_HAS_FALLBACK
=
0x0002u
,
/* Has fallback implementation, so include mask bit even if feature not found. */
F_MANUAL_ZWJ
=
0x0004u
,
/* Don't skip over ZWJ when matching. */
F_GLOBAL_SEARCH
=
0x0008u
/* If feature not found in LangSys, look for it in global feature list and pick one. */
F_MANUAL_ZWNJ
=
0x0004u
,
/* Don't skip over ZWNJ when matching **context**. */
F_MANUAL_ZWJ
=
0x0008u
,
/* Don't skip over ZWJ when matching **input**. */
F_GLOBAL_SEARCH
=
0x0010u
/* If feature not found in LangSys, look for it in global feature list and pick one. */
};
HB_MARK_AS_FLAG_T
(
hb_ot_map_feature_flags_t
);
/* Macro version for where const is desired. */
...
...
@@ -196,7 +199,8 @@ struct hb_ot_map_builder_t
unsigned
int
feature_index
,
unsigned
int
variations_index
,
hb_mask_t
mask
,
bool
auto_zwj
);
bool
auto_zwnj
=
true
,
bool
auto_zwj
=
true
);
struct
feature_info_t
{
hb_tag_t
tag
;
...
...
src/hb-ot-map.cc
浏览文件 @
cdf1fd06
...
...
@@ -85,6 +85,7 @@ hb_ot_map_builder_t::add_lookups (hb_ot_map_t &m,
unsigned
int
feature_index
,
unsigned
int
variations_index
,
hb_mask_t
mask
,
bool
auto_zwnj
,
bool
auto_zwj
)
{
unsigned
int
lookup_indices
[
32
];
...
...
@@ -112,6 +113,7 @@ hb_ot_map_builder_t::add_lookups (hb_ot_map_t &m,
return
;
lookup
->
mask
=
mask
;
lookup
->
index
=
lookup_indices
[
i
];
lookup
->
auto_zwnj
=
auto_zwnj
;
lookup
->
auto_zwj
=
auto_zwj
;
}
...
...
@@ -243,6 +245,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
map
->
index
[
1
]
=
feature_index
[
1
];
map
->
stage
[
0
]
=
info
->
stage
[
0
];
map
->
stage
[
1
]
=
info
->
stage
[
1
];
map
->
auto_zwnj
=
!
(
info
->
flags
&
F_MANUAL_ZWNJ
);
map
->
auto_zwj
=
!
(
info
->
flags
&
F_MANUAL_ZWJ
);
if
((
info
->
flags
&
F_GLOBAL
)
&&
info
->
max_value
==
1
)
{
/* Uses the global bit */
...
...
@@ -284,8 +287,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
add_lookups
(
m
,
face
,
table_index
,
required_feature_index
[
table_index
],
variations_index
,
1
/* mask */
,
true
/* auto_zwj */
);
1
/* mask */
);
for
(
unsigned
i
=
0
;
i
<
m
.
features
.
len
;
i
++
)
if
(
m
.
features
[
i
].
stage
[
table_index
]
==
stage
)
...
...
@@ -293,6 +295,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
m
.
features
[
i
].
index
[
table_index
],
variations_index
,
m
.
features
[
i
].
mask
,
m
.
features
[
i
].
auto_zwnj
,
m
.
features
[
i
].
auto_zwj
);
/* Sort lookups and merge duplicates */
...
...
@@ -307,6 +310,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
else
{
m
.
lookups
[
table_index
][
j
].
mask
|=
m
.
lookups
[
table_index
][
i
].
mask
;
m
.
lookups
[
table_index
][
j
].
auto_zwnj
&=
m
.
lookups
[
table_index
][
i
].
auto_zwnj
;
m
.
lookups
[
table_index
][
j
].
auto_zwj
&=
m
.
lookups
[
table_index
][
i
].
auto_zwj
;
}
m
.
lookups
[
table_index
].
shrink
(
j
+
1
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录