Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
b4c7fab7
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看板
提交
b4c7fab7
编写于
4月 29, 2010
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Rename
上级
1376fb7b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
78 addition
and
78 deletion
+78
-78
src/hb-ot-layout-gpos-private.hh
src/hb-ot-layout-gpos-private.hh
+49
-49
src/hb-ot-layout-gsub-private.hh
src/hb-ot-layout-gsub-private.hh
+23
-23
src/hb-ot-layout-gsubgpos-private.hh
src/hb-ot-layout-gsubgpos-private.hh
+6
-6
未找到文件。
src/hb-ot-layout-gpos-private.hh
浏览文件 @
b4c7fab7
...
...
@@ -87,7 +87,7 @@ struct ValueFormat : USHORT
inline
unsigned
int
get_size
()
const
{
return
get_len
()
*
Value
::
get_size
();
}
void
apply_value
(
hb_ot_layout_context_t
*
context
,
void
apply_value
(
hb_ot_layout_context_t
*
layout_
context
,
const
char
*
base
,
const
Value
*
values
,
hb_internal_glyph_position_t
*
glyph_pos
)
const
...
...
@@ -98,16 +98,16 @@ struct ValueFormat : USHORT
if
(
!
format
)
return
;
x_scale
=
context
->
font
->
x_scale
;
y_scale
=
context
->
font
->
y_scale
;
x_scale
=
layout_
context
->
font
->
x_scale
;
y_scale
=
layout_
context
->
font
->
y_scale
;
/* design units -> fractional pixel */
if
(
format
&
xPlacement
)
glyph_pos
->
x_offset
+=
_hb_16dot16_mul_round
(
x_scale
,
*
(
SHORT
*
)
values
++
);
if
(
format
&
yPlacement
)
glyph_pos
->
y_offset
+=
_hb_16dot16_mul_round
(
y_scale
,
*
(
SHORT
*
)
values
++
);
if
(
format
&
xAdvance
)
glyph_pos
->
x_advance
+=
_hb_16dot16_mul_round
(
x_scale
,
*
(
SHORT
*
)
values
++
);
if
(
format
&
yAdvance
)
glyph_pos
->
y_advance
+=
_hb_16dot16_mul_round
(
y_scale
,
*
(
SHORT
*
)
values
++
);
x_ppem
=
context
->
font
->
x_ppem
;
y_ppem
=
context
->
font
->
y_ppem
;
x_ppem
=
layout_
context
->
font
->
x_ppem
;
y_ppem
=
layout_
context
->
font
->
y_ppem
;
/* pixel -> fractional pixel */
if
(
format
&
xPlaDevice
)
{
if
(
x_ppem
)
glyph_pos
->
x_offset
+=
(
base
+*
(
OffsetTo
<
Device
>*
)
values
++
).
get_delta
(
x_ppem
)
<<
16
;
else
values
++
;
...
...
@@ -194,11 +194,11 @@ struct AnchorFormat1
friend
struct
Anchor
;
private:
inline
void
get_anchor
(
hb_ot_layout_context_t
*
context
,
hb_codepoint_t
glyph_id
HB_GNUC_UNUSED
,
inline
void
get_anchor
(
hb_ot_layout_context_t
*
layout_
context
,
hb_codepoint_t
glyph_id
HB_GNUC_UNUSED
,
hb_position_t
*
x
,
hb_position_t
*
y
)
const
{
*
x
=
_hb_16dot16_mul_round
(
context
->
font
->
x_scale
,
xCoordinate
);
*
y
=
_hb_16dot16_mul_round
(
context
->
font
->
y_scale
,
yCoordinate
);
*
x
=
_hb_16dot16_mul_round
(
layout_
context
->
font
->
x_scale
,
xCoordinate
);
*
y
=
_hb_16dot16_mul_round
(
layout_
context
->
font
->
y_scale
,
yCoordinate
);
}
inline
bool
sanitize
(
SANITIZE_ARG_DEF
)
{
...
...
@@ -218,13 +218,13 @@ struct AnchorFormat2
friend
struct
Anchor
;
private:
inline
void
get_anchor
(
hb_ot_layout_context_t
*
context
,
hb_codepoint_t
glyph_id
,
inline
void
get_anchor
(
hb_ot_layout_context_t
*
layout_
context
,
hb_codepoint_t
glyph_id
,
hb_position_t
*
x
,
hb_position_t
*
y
)
const
{
/* TODO Contour
* NOTE only adjust directions with nonzero ppem */
*
x
=
_hb_16dot16_mul_round
(
context
->
font
->
x_scale
,
xCoordinate
);
*
y
=
_hb_16dot16_mul_round
(
context
->
font
->
y_scale
,
yCoordinate
);
*
x
=
_hb_16dot16_mul_round
(
layout_
context
->
font
->
x_scale
,
xCoordinate
);
*
y
=
_hb_16dot16_mul_round
(
layout_
context
->
font
->
y_scale
,
yCoordinate
);
}
inline
bool
sanitize
(
SANITIZE_ARG_DEF
)
{
...
...
@@ -245,17 +245,17 @@ struct AnchorFormat3
friend
struct
Anchor
;
private:
inline
void
get_anchor
(
hb_ot_layout_context_t
*
context
,
hb_codepoint_t
glyph_id
HB_GNUC_UNUSED
,
inline
void
get_anchor
(
hb_ot_layout_context_t
*
layout_
context
,
hb_codepoint_t
glyph_id
HB_GNUC_UNUSED
,
hb_position_t
*
x
,
hb_position_t
*
y
)
const
{
*
x
=
_hb_16dot16_mul_round
(
context
->
font
->
x_scale
,
xCoordinate
);
*
y
=
_hb_16dot16_mul_round
(
context
->
font
->
y_scale
,
yCoordinate
);
*
x
=
_hb_16dot16_mul_round
(
layout_
context
->
font
->
x_scale
,
xCoordinate
);
*
y
=
_hb_16dot16_mul_round
(
layout_
context
->
font
->
y_scale
,
yCoordinate
);
/* pixel -> fractional pixel */
if
(
context
->
font
->
x_ppem
)
*
x
+=
(
this
+
xDeviceTable
).
get_delta
(
context
->
font
->
x_ppem
)
<<
16
;
if
(
context
->
font
->
y_ppem
)
*
y
+=
(
this
+
yDeviceTable
).
get_delta
(
context
->
font
->
y_ppem
)
<<
16
;
if
(
layout_
context
->
font
->
x_ppem
)
*
x
+=
(
this
+
xDeviceTable
).
get_delta
(
layout_
context
->
font
->
x_ppem
)
<<
16
;
if
(
layout_
context
->
font
->
y_ppem
)
*
y
+=
(
this
+
yDeviceTable
).
get_delta
(
layout_
context
->
font
->
y_ppem
)
<<
16
;
}
inline
bool
sanitize
(
SANITIZE_ARG_DEF
)
{
...
...
@@ -280,15 +280,15 @@ ASSERT_SIZE (AnchorFormat3, 10);
struct
Anchor
{
inline
void
get_anchor
(
hb_ot_layout_context_t
*
context
,
hb_codepoint_t
glyph_id
,
inline
void
get_anchor
(
hb_ot_layout_context_t
*
layout_
context
,
hb_codepoint_t
glyph_id
,
hb_position_t
*
x
,
hb_position_t
*
y
)
const
{
*
x
=
*
y
=
0
;
switch
(
u
.
format
)
{
case
1
:
u
.
format1
->
get_anchor
(
context
,
glyph_id
,
x
,
y
);
return
;
case
2
:
u
.
format2
->
get_anchor
(
context
,
glyph_id
,
x
,
y
);
return
;
case
3
:
u
.
format3
->
get_anchor
(
context
,
glyph_id
,
x
,
y
);
return
;
default:
return
;
case
1
:
u
.
format1
->
get_anchor
(
layout_
context
,
glyph_id
,
x
,
y
);
return
;
case
2
:
u
.
format2
->
get_anchor
(
layout_
context
,
glyph_id
,
x
,
y
);
return
;
case
3
:
u
.
format3
->
get_anchor
(
layout_
context
,
glyph_id
,
x
,
y
);
return
;
default:
return
;
}
}
...
...
@@ -375,8 +375,8 @@ struct MarkArray
hb_position_t
mark_x
,
mark_y
,
base_x
,
base_y
;
mark_anchor
.
get_anchor
(
context
,
IN_CURGLYPH
(),
&
mark_x
,
&
mark_y
);
glyph_anchor
.
get_anchor
(
context
,
IN_GLYPH
(
glyph_pos
),
&
base_x
,
&
base_y
);
mark_anchor
.
get_anchor
(
layout_
context
,
IN_CURGLYPH
(),
&
mark_x
,
&
mark_y
);
glyph_anchor
.
get_anchor
(
layout_
context
,
IN_GLYPH
(
glyph_pos
),
&
base_x
,
&
base_y
);
hb_internal_glyph_position_t
*
o
=
POSITION
(
buffer
->
in_pos
);
o
->
x_advance
=
0
;
...
...
@@ -415,7 +415,7 @@ struct SinglePosFormat1
if
(
HB_LIKELY
(
index
==
NOT_COVERED
))
return
false
;
valueFormat
.
apply_value
(
context
,
CharP
(
this
),
values
,
CURPOSITION
());
valueFormat
.
apply_value
(
layout_
context
,
CharP
(
this
),
values
,
CURPOSITION
());
buffer
->
in_pos
++
;
return
true
;
...
...
@@ -455,7 +455,7 @@ struct SinglePosFormat2
if
(
HB_LIKELY
(
index
>=
valueCount
))
return
false
;
valueFormat
.
apply_value
(
context
,
CharP
(
this
),
valueFormat
.
apply_value
(
layout_
context
,
CharP
(
this
),
&
values
[
index
*
valueFormat
.
get_len
()],
CURPOSITION
());
...
...
@@ -566,7 +566,7 @@ struct PairPosFormat1
return
false
;
unsigned
int
j
=
buffer
->
in_pos
+
1
;
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
IN_INFO
(
j
),
apply_context
->
lookup_flag
,
NULL
))
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
IN_INFO
(
j
),
apply_context
->
lookup_flag
,
NULL
))
{
if
(
HB_UNLIKELY
(
j
==
end
))
return
false
;
...
...
@@ -584,8 +584,8 @@ struct PairPosFormat1
{
if
(
IN_GLYPH
(
j
)
==
record
->
secondGlyph
)
{
valueFormat1
.
apply_value
(
context
,
CharP
(
this
),
&
record
->
values
[
0
],
CURPOSITION
());
valueFormat2
.
apply_value
(
context
,
CharP
(
this
),
&
record
->
values
[
len1
],
POSITION
(
j
));
valueFormat1
.
apply_value
(
layout_
context
,
CharP
(
this
),
&
record
->
values
[
0
],
CURPOSITION
());
valueFormat2
.
apply_value
(
layout_
context
,
CharP
(
this
),
&
record
->
values
[
len1
],
POSITION
(
j
));
if
(
len2
)
j
++
;
buffer
->
in_pos
=
j
;
...
...
@@ -658,7 +658,7 @@ struct PairPosFormat2
return
false
;
unsigned
int
j
=
buffer
->
in_pos
+
1
;
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
IN_INFO
(
j
),
apply_context
->
lookup_flag
,
NULL
))
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
IN_INFO
(
j
),
apply_context
->
lookup_flag
,
NULL
))
{
if
(
HB_UNLIKELY
(
j
==
end
))
return
false
;
...
...
@@ -675,8 +675,8 @@ struct PairPosFormat2
return
false
;
const
Value
*
v
=
&
values
[
record_len
*
(
klass1
*
class2Count
+
klass2
)];
valueFormat1
.
apply_value
(
context
,
CharP
(
this
),
v
,
CURPOSITION
());
valueFormat2
.
apply_value
(
context
,
CharP
(
this
),
v
+
len1
,
POSITION
(
j
));
valueFormat1
.
apply_value
(
layout_
context
,
CharP
(
this
),
v
,
CURPOSITION
());
valueFormat2
.
apply_value
(
layout_
context
,
CharP
(
this
),
v
+
len1
,
POSITION
(
j
));
if
(
len2
)
j
++
;
...
...
@@ -908,7 +908,7 @@ struct CursivePosFormat1
Since horizontal advance widths or vertical advance heights
can be used alone but not together, no ambiguity occurs. */
struct
hb_ot_layout_context_t
::
info_t
::
gpos_t
*
gpi
=
&
context
->
info
.
gpos
;
struct
hb_ot_layout_context_t
::
info_t
::
gpos_t
*
gpi
=
&
layout_
context
->
info
.
gpos
;
hb_codepoint_t
last_pos
=
gpi
->
last
;
gpi
->
last
=
HB_OT_LAYOUT_GPOS_NO_LAST
;
...
...
@@ -926,7 +926,7 @@ struct CursivePosFormat1
goto
end
;
hb_position_t
entry_x
,
entry_y
;
(
this
+
record
.
entryAnchor
).
get_anchor
(
context
,
IN_CURGLYPH
(),
&
entry_x
,
&
entry_y
);
(
this
+
record
.
entryAnchor
).
get_anchor
(
layout_
context
,
IN_CURGLYPH
(),
&
entry_x
,
&
entry_y
);
/* TODO vertical */
...
...
@@ -956,7 +956,7 @@ struct CursivePosFormat1
if
(
record
.
exitAnchor
)
{
gpi
->
last
=
buffer
->
in_pos
;
(
this
+
record
.
exitAnchor
).
get_anchor
(
context
,
IN_CURGLYPH
(),
&
gpi
->
anchor_x
,
&
gpi
->
anchor_y
);
(
this
+
record
.
exitAnchor
).
get_anchor
(
layout_
context
,
IN_CURGLYPH
(),
&
gpi
->
anchor_x
,
&
gpi
->
anchor_y
);
}
buffer
->
in_pos
++
;
...
...
@@ -1035,7 +1035,7 @@ struct MarkBasePosFormat1
if
(
HB_UNLIKELY
(
!
j
))
return
false
;
j
--
;
}
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
IN_INFO
(
j
),
LookupFlag
::
IgnoreMarks
,
&
property
));
}
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
IN_INFO
(
j
),
LookupFlag
::
IgnoreMarks
,
&
property
));
#if 0
/* The following assertion is too strong. */
...
...
@@ -1135,7 +1135,7 @@ struct MarkLigPosFormat1
if
(
HB_UNLIKELY
(
!
j
))
return
false
;
j
--
;
}
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
IN_INFO
(
j
),
LookupFlag
::
IgnoreMarks
,
&
property
));
}
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
IN_INFO
(
j
),
LookupFlag
::
IgnoreMarks
,
&
property
));
#if 0
/* The following assertion is too strong. */
...
...
@@ -1252,7 +1252,7 @@ struct MarkMarkPosFormat1
if
(
HB_UNLIKELY
(
!
j
))
return
false
;
j
--
;
}
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
IN_INFO
(
j
),
apply_context
->
lookup_flag
,
&
property
));
}
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
IN_INFO
(
j
),
apply_context
->
lookup_flag
,
&
property
));
if
(
!
(
property
&
HB_OT_LAYOUT_GLYPH_CLASS_MARK
))
return
false
;
...
...
@@ -1450,7 +1450,7 @@ struct PosLookup : Lookup
inline
const
PosLookupSubTable
&
get_subtable
(
unsigned
int
i
)
const
{
return
this
+
CastR
<
OffsetArrayOf
<
PosLookupSubTable
>
>
(
subTable
)[
i
];
}
inline
bool
apply_once
(
hb_ot_layout_context_t
*
context
,
inline
bool
apply_once
(
hb_ot_layout_context_t
*
layout_
context
,
hb_buffer_t
*
buffer
,
unsigned
int
context_length
,
unsigned
int
nesting_level_left
,
...
...
@@ -1462,7 +1462,7 @@ struct PosLookup : Lookup
apply_context
->
nesting_level_left
=
nesting_level_left
;
apply_context
->
lookup_flag
=
get_flag
();
if
(
!
_hb_ot_layout_check_glyph_property
(
context
->
face
,
IN_CURINFO
(),
apply_context
->
lookup_flag
,
&
apply_context
->
property
))
if
(
!
_hb_ot_layout_check_glyph_property
(
layout_
context
->
face
,
IN_CURINFO
(),
apply_context
->
lookup_flag
,
&
apply_context
->
property
))
return
false
;
for
(
unsigned
int
i
=
0
;
i
<
get_subtable_count
();
i
++
)
...
...
@@ -1472,7 +1472,7 @@ struct PosLookup : Lookup
return
false
;
}
inline
bool
apply_string
(
hb_ot_layout_context_t
*
context
,
inline
bool
apply_string
(
hb_ot_layout_context_t
*
layout_
context
,
hb_buffer_t
*
buffer
,
hb_mask_t
mask
)
const
{
...
...
@@ -1481,7 +1481,7 @@ struct PosLookup : Lookup
if
(
HB_UNLIKELY
(
!
buffer
->
in_length
))
return
false
;
context
->
info
.
gpos
.
last
=
HB_OT_LAYOUT_GPOS_NO_LAST
;
/* no last valid glyph for cursive pos. */
layout_
context
->
info
.
gpos
.
last
=
HB_OT_LAYOUT_GPOS_NO_LAST
;
/* no last valid glyph for cursive pos. */
buffer
->
in_pos
=
0
;
while
(
buffer
->
in_pos
<
buffer
->
in_length
)
...
...
@@ -1489,7 +1489,7 @@ struct PosLookup : Lookup
bool
done
;
if
(
~
IN_MASK
(
buffer
->
in_pos
)
&
mask
)
{
done
=
apply_once
(
context
,
buffer
,
NO_CONTEXT
,
MAX_NESTING_LEVEL
,
0
);
done
=
apply_once
(
layout_
context
,
buffer
,
NO_CONTEXT
,
MAX_NESTING_LEVEL
,
0
);
ret
|=
done
;
}
else
...
...
@@ -1497,7 +1497,7 @@ struct PosLookup : Lookup
done
=
false
;
/* Contrary to properties defined in GDEF, user-defined properties
will always stop a possible cursive positioning. */
context
->
info
.
gpos
.
last
=
HB_OT_LAYOUT_GPOS_NO_LAST
;
layout_
context
->
info
.
gpos
.
last
=
HB_OT_LAYOUT_GPOS_NO_LAST
;
}
if
(
!
done
)
...
...
@@ -1529,11 +1529,11 @@ struct GPOS : GSUBGPOS
inline
const
PosLookup
&
get_lookup
(
unsigned
int
i
)
const
{
return
CastR
<
PosLookup
>
(
GSUBGPOS
::
get_lookup
(
i
));
}
inline
bool
position_lookup
(
hb_ot_layout_context_t
*
context
,
inline
bool
position_lookup
(
hb_ot_layout_context_t
*
layout_
context
,
hb_buffer_t
*
buffer
,
unsigned
int
lookup_index
,
hb_mask_t
mask
)
const
{
return
get_lookup
(
lookup_index
).
apply_string
(
context
,
buffer
,
mask
);
}
{
return
get_lookup
(
lookup_index
).
apply_string
(
layout_
context
,
buffer
,
mask
);
}
inline
bool
sanitize
(
SANITIZE_ARG_DEF
)
{
TRACE_SANITIZE
();
...
...
@@ -1564,7 +1564,7 @@ inline bool ExtensionPos::sanitize (SANITIZE_ARG_DEF)
static
inline
bool
position_lookup
(
APPLY_ARG_DEF
,
unsigned
int
lookup_index
)
{
const
GPOS
&
gpos
=
*
(
context
->
face
->
ot_layout
.
gpos
);
const
GPOS
&
gpos
=
*
(
layout_
context
->
face
->
ot_layout
.
gpos
);
const
PosLookup
&
l
=
gpos
.
get_lookup
(
lookup_index
);
if
(
HB_UNLIKELY
(
apply_context
->
nesting_level_left
==
0
))
...
...
@@ -1573,7 +1573,7 @@ static inline bool position_lookup (APPLY_ARG_DEF, unsigned int lookup_index)
if
(
HB_UNLIKELY
(
context_length
<
1
))
return
false
;
return
l
.
apply_once
(
context
,
buffer
,
context_length
,
apply_context
->
nesting_level_left
-
1
,
apply_depth
+
1
);
return
l
.
apply_once
(
layout_
context
,
buffer
,
context_length
,
apply_context
->
nesting_level_left
-
1
,
apply_depth
+
1
);
}
...
...
src/hb-ot-layout-gsub-private.hh
浏览文件 @
b4c7fab7
...
...
@@ -48,8 +48,8 @@ struct SingleSubstFormat1
_hb_buffer_replace_glyph
(
buffer
,
glyph_id
);
/* We inherit the old glyph class to the substituted glyph */
if
(
_hb_ot_layout_has_new_glyph_classes
(
context
->
face
))
_hb_ot_layout_set_glyph_property
(
context
->
face
,
glyph_id
,
apply_context
->
property
);
if
(
_hb_ot_layout_has_new_glyph_classes
(
layout_
context
->
face
))
_hb_ot_layout_set_glyph_property
(
layout_
context
->
face
,
glyph_id
,
apply_context
->
property
);
return
true
;
}
...
...
@@ -90,8 +90,8 @@ struct SingleSubstFormat2
_hb_buffer_replace_glyph
(
buffer
,
glyph_id
);
/* We inherit the old glyph class to the substituted glyph */
if
(
_hb_ot_layout_has_new_glyph_classes
(
context
->
face
))
_hb_ot_layout_set_glyph_property
(
context
->
face
,
glyph_id
,
apply_context
->
property
);
if
(
_hb_ot_layout_has_new_glyph_classes
(
layout_
context
->
face
))
_hb_ot_layout_set_glyph_property
(
layout_
context
->
face
,
glyph_id
,
apply_context
->
property
);
return
true
;
}
...
...
@@ -163,7 +163,7 @@ struct Sequence
0xFFFF
,
0xFFFF
);
/* This is a guess only ... */
if
(
_hb_ot_layout_has_new_glyph_classes
(
context
->
face
))
if
(
_hb_ot_layout_has_new_glyph_classes
(
layout_
context
->
face
))
{
unsigned
int
property
=
apply_context
->
property
;
if
(
property
==
HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE
)
...
...
@@ -171,7 +171,7 @@ struct Sequence
unsigned
int
count
=
substitute
.
len
;
for
(
unsigned
int
n
=
0
;
n
<
count
;
n
++
)
_hb_ot_layout_set_glyph_property
(
context
->
face
,
substitute
[
n
],
property
);
_hb_ot_layout_set_glyph_property
(
layout_
context
->
face
,
substitute
[
n
],
property
);
}
return
true
;
...
...
@@ -281,8 +281,8 @@ struct AlternateSubstFormat1
unsigned
int
alt_index
=
0
;
/* XXX callback to user to choose alternate
if (context->face->altfunc)
alt_index = (
context->face->altfunc)(
context->layout, buffer,
if (
layout_
context->face->altfunc)
alt_index = (
layout_context->face->altfunc)(layout_
context->layout, buffer,
buffer->out_pos, glyph_id,
alt_set.len, alt_set.array);
*/
...
...
@@ -295,8 +295,8 @@ struct AlternateSubstFormat1
_hb_buffer_replace_glyph
(
buffer
,
glyph_id
);
/* We inherit the old glyph class to the substituted glyph */
if
(
_hb_ot_layout_has_new_glyph_classes
(
context
->
face
))
_hb_ot_layout_set_glyph_property
(
context
->
face
,
glyph_id
,
apply_context
->
property
);
if
(
_hb_ot_layout_has_new_glyph_classes
(
layout_
context
->
face
))
_hb_ot_layout_set_glyph_property
(
layout_
context
->
face
,
glyph_id
,
apply_context
->
property
);
return
true
;
}
...
...
@@ -366,7 +366,7 @@ struct Ligature
for
(
i
=
1
,
j
=
buffer
->
in_pos
+
1
;
i
<
count
;
i
++
,
j
++
)
{
unsigned
int
property
;
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
IN_INFO
(
j
),
apply_context
->
lookup_flag
,
&
property
))
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
IN_INFO
(
j
),
apply_context
->
lookup_flag
,
&
property
))
{
if
(
HB_UNLIKELY
(
j
+
count
-
i
==
end
))
return
false
;
...
...
@@ -380,8 +380,8 @@ struct Ligature
return
false
;
}
/* This is just a guess ... */
if
(
_hb_ot_layout_has_new_glyph_classes
(
context
->
face
))
_hb_ot_layout_set_glyph_class
(
context
->
face
,
ligGlyph
,
if
(
_hb_ot_layout_has_new_glyph_classes
(
layout_
context
->
face
))
_hb_ot_layout_set_glyph_class
(
layout_
context
->
face
,
ligGlyph
,
is_mark
?
HB_OT_LAYOUT_GLYPH_CLASS_MARK
:
HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE
);
...
...
@@ -407,7 +407,7 @@ struct Ligature
for
(
i
=
1
;
i
<
count
;
i
++
)
{
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
IN_CURINFO
(),
apply_context
->
lookup_flag
,
NULL
))
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
IN_CURINFO
(),
apply_context
->
lookup_flag
,
NULL
))
_hb_buffer_add_output_glyph
(
buffer
,
IN_CURGLYPH
(),
i
,
lig_id
);
(
buffer
->
in_pos
)
++
;
...
...
@@ -759,7 +759,7 @@ struct SubstLookup : Lookup
}
inline
bool
apply_once
(
hb_ot_layout_context_t
*
context
,
inline
bool
apply_once
(
hb_ot_layout_context_t
*
layout_
context
,
hb_buffer_t
*
buffer
,
unsigned
int
context_length
,
unsigned
int
nesting_level_left
,
...
...
@@ -771,7 +771,7 @@ struct SubstLookup : Lookup
apply_context
->
nesting_level_left
=
nesting_level_left
;
apply_context
->
lookup_flag
=
get_flag
();
if
(
!
_hb_ot_layout_check_glyph_property
(
context
->
face
,
IN_CURINFO
(),
apply_context
->
lookup_flag
,
&
apply_context
->
property
))
if
(
!
_hb_ot_layout_check_glyph_property
(
layout_
context
->
face
,
IN_CURINFO
(),
apply_context
->
lookup_flag
,
&
apply_context
->
property
))
return
false
;
if
(
HB_UNLIKELY
(
lookup_type
==
SubstLookupSubTable
::
Extension
))
...
...
@@ -796,7 +796,7 @@ struct SubstLookup : Lookup
return
false
;
}
inline
bool
apply_string
(
hb_ot_layout_context_t
*
context
,
inline
bool
apply_string
(
hb_ot_layout_context_t
*
layout_
context
,
hb_buffer_t
*
buffer
,
hb_mask_t
mask
)
const
{
...
...
@@ -813,7 +813,7 @@ struct SubstLookup : Lookup
while
(
buffer
->
in_pos
<
buffer
->
in_length
)
{
if
((
~
IN_MASK
(
buffer
->
in_pos
)
&
mask
)
&&
apply_once
(
context
,
buffer
,
NO_CONTEXT
,
MAX_NESTING_LEVEL
,
0
))
apply_once
(
layout_
context
,
buffer
,
NO_CONTEXT
,
MAX_NESTING_LEVEL
,
0
))
ret
=
true
;
else
_hb_buffer_next_glyph
(
buffer
);
...
...
@@ -829,7 +829,7 @@ struct SubstLookup : Lookup
do
{
if
((
~
IN_MASK
(
buffer
->
in_pos
)
&
mask
)
&&
apply_once
(
context
,
buffer
,
NO_CONTEXT
,
MAX_NESTING_LEVEL
,
0
))
apply_once
(
layout_
context
,
buffer
,
NO_CONTEXT
,
MAX_NESTING_LEVEL
,
0
))
ret
=
true
;
else
buffer
->
in_pos
--
;
...
...
@@ -863,11 +863,11 @@ struct GSUB : GSUBGPOS
inline
const
SubstLookup
&
get_lookup
(
unsigned
int
i
)
const
{
return
CastR
<
SubstLookup
>
(
GSUBGPOS
::
get_lookup
(
i
));
}
inline
bool
substitute_lookup
(
hb_ot_layout_context_t
*
context
,
inline
bool
substitute_lookup
(
hb_ot_layout_context_t
*
layout_
context
,
hb_buffer_t
*
buffer
,
unsigned
int
lookup_index
,
hb_mask_t
mask
)
const
{
return
get_lookup
(
lookup_index
).
apply_string
(
context
,
buffer
,
mask
);
}
{
return
get_lookup
(
lookup_index
).
apply_string
(
layout_
context
,
buffer
,
mask
);
}
inline
bool
sanitize
(
SANITIZE_ARG_DEF
)
{
...
...
@@ -907,7 +907,7 @@ inline bool ExtensionSubst::is_reverse (void) const
static
inline
bool
substitute_lookup
(
APPLY_ARG_DEF
,
unsigned
int
lookup_index
)
{
const
GSUB
&
gsub
=
*
(
context
->
face
->
ot_layout
.
gsub
);
const
GSUB
&
gsub
=
*
(
layout_
context
->
face
->
ot_layout
.
gsub
);
const
SubstLookup
&
l
=
gsub
.
get_lookup
(
lookup_index
);
if
(
HB_UNLIKELY
(
apply_context
->
nesting_level_left
==
0
))
...
...
@@ -916,7 +916,7 @@ static inline bool substitute_lookup (APPLY_ARG_DEF, unsigned int lookup_index)
if
(
HB_UNLIKELY
(
context_length
<
1
))
return
false
;
return
l
.
apply_once
(
context
,
buffer
,
context_length
,
apply_context
->
nesting_level_left
-
1
,
apply_depth
+
1
);
return
l
.
apply_once
(
layout_
context
,
buffer
,
context_length
,
apply_context
->
nesting_level_left
-
1
,
apply_depth
+
1
);
}
...
...
src/hb-ot-layout-gsubgpos-private.hh
浏览文件 @
b4c7fab7
...
...
@@ -44,13 +44,13 @@
#define APPLY_ARG_DEF \
hb_apply_context_t *apply_context, \
hb_ot_layout_context_t *context, \
hb_ot_layout_context_t *
layout_
context, \
hb_buffer_t *buffer, \
unsigned int context_length HB_GNUC_UNUSED, \
unsigned int apply_depth HB_GNUC_UNUSED
#define APPLY_ARG \
apply_context, \
context, \
layout_
context, \
buffer, \
context_length, \
(HB_DEBUG_APPLY ? apply_depth + 1 : 0)
...
...
@@ -105,7 +105,7 @@ static inline bool match_input (APPLY_ARG_DEF,
for
(
i
=
1
,
j
=
buffer
->
in_pos
+
1
;
i
<
count
;
i
++
,
j
++
)
{
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
IN_INFO
(
j
),
apply_context
->
lookup_flag
,
NULL
))
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
IN_INFO
(
j
),
apply_context
->
lookup_flag
,
NULL
))
{
if
(
HB_UNLIKELY
(
j
+
count
-
i
==
end
))
return
false
;
...
...
@@ -132,7 +132,7 @@ static inline bool match_backtrack (APPLY_ARG_DEF,
for
(
unsigned
int
i
=
0
,
j
=
buffer
->
out_pos
-
1
;
i
<
count
;
i
++
,
j
--
)
{
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
OUT_INFO
(
j
),
apply_context
->
lookup_flag
,
NULL
))
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
OUT_INFO
(
j
),
apply_context
->
lookup_flag
,
NULL
))
{
if
(
HB_UNLIKELY
(
j
+
1
==
count
-
i
))
return
false
;
...
...
@@ -160,7 +160,7 @@ static inline bool match_lookahead (APPLY_ARG_DEF,
for
(
i
=
0
,
j
=
buffer
->
in_pos
+
offset
;
i
<
count
;
i
++
,
j
++
)
{
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
OUT_INFO
(
j
),
apply_context
->
lookup_flag
,
NULL
))
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
OUT_INFO
(
j
),
apply_context
->
lookup_flag
,
NULL
))
{
if
(
HB_UNLIKELY
(
j
+
count
-
i
==
end
))
return
false
;
...
...
@@ -210,7 +210,7 @@ static inline bool apply_lookup (APPLY_ARG_DEF,
*/
for
(
unsigned
int
i
=
0
;
i
<
count
;
/* NOP */
)
{
while
(
_hb_ot_layout_skip_mark
(
context
->
face
,
IN_CURINFO
(),
apply_context
->
lookup_flag
,
NULL
))
while
(
_hb_ot_layout_skip_mark
(
layout_
context
->
face
,
IN_CURINFO
(),
apply_context
->
lookup_flag
,
NULL
))
{
if
(
HB_UNLIKELY
(
buffer
->
in_pos
==
end
))
return
true
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录