Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
cdb317bc
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看板
提交
cdb317bc
编写于
5月 06, 2009
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[GSUB] Towards Context subtitutes
上级
c9c6a78a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
108 addition
and
29 deletion
+108
-29
src/hb-ot-layout-gsub-private.h
src/hb-ot-layout-gsub-private.h
+108
-29
未找到文件。
src/hb-ot-layout-gsub-private.h
浏览文件 @
cdb317bc
...
...
@@ -578,24 +578,32 @@ struct SubstLookupRecord {
};
DEFINE_NULL_ASSERT_SIZE
(
SubstLookupRecord
,
4
);
struct
ContextSubstFormat1
{
/* TODO */
struct
SubRule
{
friend
struct
SubRuleSet
;
private:
USHORT
substFormat
;
/* Format identifier--format = 1 */
Offset
coverage
;
/* Offset to Coverage table--from
* beginning of Substitution table */
USHORT
subRuleSetCount
;
/* Number of SubRuleSet tables--must
* equal GlyphCount in Coverage table */
Offset
subRuleSet
[];
/* Array of offsets to SubRuleSet
* tables--from beginning of
* Substitution table--ordered by
* Coverage Index */
DEFINE_ARRAY_TYPE
(
GlyphID
,
input
,
(
glyphCount
?
glyphCount
-
1
:
0
));
/* XXX */
private:
USHORT
glyphCount
;
/* Total number of glyphs in input
* glyph sequence--includes the first
* glyph */
USHORT
substCount
;
/* Number of SubstLookupRecords */
GlyphID
input
[];
/* Array of input GlyphIDs--start with
* second glyph */
SubstLookupRecord
substLookupRecord
[];
/* Array of SubstLookupRecords--in
* design order */
};
ASSERT_SIZE
(
ContextSubstFormat1
,
6
);
DEFINE_NULL_ASSERT_SIZE
(
SubRule
,
4
);
struct
SubRuleSet
{
/* TODO */
friend
struct
ChainSubstFormat1
;
private:
DEFINE_OFFSET_ARRAY_TYPE
(
SubRule
,
subRule
,
subRuleCount
);
private:
USHORT
subRuleCount
;
/* Number of SubRule tables */
...
...
@@ -605,23 +613,52 @@ struct SubRuleSet {
};
DEFINE_NULL_ASSERT_SIZE
(
SubRuleSet
,
2
);
struct
SubRule
{
/* TODO */
struct
ContextSubstFormat1
{
friend
struct
ContextSubst
;
private:
USHORT
glyphCount
;
/* Total number of glyphs in input
* glyph sequence--includes the first
* glyph */
USHORT
substCount
;
/* Number of SubstLookupRecords */
GlyphID
input
[];
/* Array of input GlyphIDs--start with
* second glyph */
SubstLookupRecord
substLookupRecord
[];
/* Array of SubstLookupRecords--in
* design order */
/* SubRuleSet tables, in Coverage Index order */
DEFINE_OFFSET_ARRAY_TYPE
(
SubRuleSet
,
subRuleSet
,
subRuleSetCount
);
DEFINE_GET_ACCESSOR
(
Coverage
,
coverage
,
coverage
);
DEFINE_GET_GLYPH_COVERAGE
(
glyph_coverage
);
inline
bool
substitute
(
SUBTABLE_SUBSTITUTE_ARGS_DEF
)
const
{
unsigned
int
property
;
if
(
!
_hb_ot_layout_check_glyph_property
(
layout
,
IN_CURITEM
(),
lookup_flag
,
&
property
))
return
false
;
hb_codepoint_t
glyph_id
=
IN_CURGLYPH
();
unsigned
int
index
=
get_glyph_coverage
(
glyph_id
);
//const SubRuleSet &lig_set = (*this)[index];
//return lig_set.substitute_ligature (SUBTABLE_SUBSTITUTE_ARGS, first_is_mark);
}
private:
USHORT
substFormat
;
/* Format identifier--format = 1 */
Offset
coverage
;
/* Offset to Coverage table--from
* beginning of Substitution table */
USHORT
subRuleSetCount
;
/* Number of SubRuleSet tables--must
* equal GlyphCount in Coverage table */
Offset
subRuleSet
[];
/* Array of offsets to SubRuleSet
* tables--from beginning of
* Substitution table--ordered by
* Coverage Index */
};
DEFINE_NULL_ASSERT_SIZE
(
SubRule
,
4
);
ASSERT_SIZE
(
ContextSubstFormat1
,
6
);
struct
ContextSubstFormat2
{
/* TODO */
friend
struct
ContextSubst
;
private:
inline
bool
substitute
(
SUBTABLE_SUBSTITUTE_ARGS_DEF
)
const
{
return
false
;
}
private:
USHORT
substFormat
;
/* Format identifier--format = 2 */
...
...
@@ -665,7 +702,14 @@ struct SubClassRule {
DEFINE_NULL_ASSERT_SIZE
(
SubClassRule
,
4
);
struct
ContextSubstFormat3
{
/* TODO */
friend
struct
ContextSubst
;
private:
inline
bool
substitute
(
SUBTABLE_SUBSTITUTE_ARGS_DEF
)
const
{
return
false
;
}
private:
USHORT
substFormat
;
/* Format identifier--format = 3 */
...
...
@@ -681,6 +725,41 @@ struct ContextSubstFormat3 {
};
ASSERT_SIZE
(
ContextSubstFormat3
,
6
);
struct
ContextSubst
{
friend
struct
SubstLookupSubTable
;
private:
unsigned
int
get_size
(
void
)
const
{
switch
(
u
.
substFormat
)
{
case
1
:
return
sizeof
(
u
.
format1
);
case
2
:
return
sizeof
(
u
.
format2
);
case
3
:
return
sizeof
(
u
.
format3
);
default:
return
sizeof
(
u
.
substFormat
);
}
}
inline
bool
substitute
(
SUBTABLE_SUBSTITUTE_ARGS_DEF
)
const
{
switch
(
u
.
substFormat
)
{
case
1
:
return
u
.
format1
.
substitute
(
SUBTABLE_SUBSTITUTE_ARGS
);
case
2
:
return
u
.
format2
.
substitute
(
SUBTABLE_SUBSTITUTE_ARGS
);
case
3
:
return
u
.
format3
.
substitute
(
SUBTABLE_SUBSTITUTE_ARGS
);
default:
return
false
;
}
}
private:
union
{
USHORT
substFormat
;
/* Format identifier */
ContextSubstFormat1
format1
;
ContextSubstFormat2
format2
;
ContextSubstFormat3
format3
;
}
u
;
};
DEFINE_NULL
(
ContextSubst
,
2
);
struct
ChainContextSubstFormat1
{
/* TODO */
...
...
@@ -935,8 +1014,8 @@ struct SubstLookupSubTable {
case
GSUB_Multiple
:
return
u
.
multiple
.
get_size
();
case
GSUB_Alternate
:
return
u
.
alternate
.
get_size
();
case
GSUB_Ligature
:
return
u
.
ligature
.
get_size
();
/*
case
GSUB_Context
:
/*
case GSUB_ChainingContext:
*/
case
GSUB_Extension
:
return
u
.
extension
.
get_size
();
...
...
@@ -954,8 +1033,8 @@ struct SubstLookupSubTable {
case
GSUB_Multiple
:
return
u
.
multiple
.
substitute
(
SUBTABLE_SUBSTITUTE_ARGS
);
case
GSUB_Alternate
:
return
u
.
alternate
.
substitute
(
SUBTABLE_SUBSTITUTE_ARGS
);
case
GSUB_Ligature
:
return
u
.
ligature
.
substitute
(
SUBTABLE_SUBSTITUTE_ARGS
);
/*
case
GSUB_Context
:
return
u
.
context
.
substitute
(
SUBTABLE_SUBSTITUTE_ARGS
);
/*
case GSUB_ChainingContext: return u.chainingContext.substitute (SUBTABLE_SUBSTITUTE_ARGS);
*/
case
GSUB_Extension
:
return
u
.
extension
.
substitute
(
SUBTABLE_SUBSTITUTE_ARGS
);
...
...
@@ -973,8 +1052,8 @@ struct SubstLookupSubTable {
MultipleSubst
multiple
;
AlternateSubst
alternate
;
LigatureSubst
ligature
;
/*
ContextSubst
context
;
/*
ChainingContextSubst chainingContext;
*/
ExtensionSubst
extension
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录