Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
88474c6f
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看板
提交
88474c6f
编写于
10月 27, 2010
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Get rid of the OpenType-specific internal buffer representation
Add variant integers to buffer item types. More cleanup coming.
上级
6cb8c349
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
79 addition
and
99 deletion
+79
-99
TODO
TODO
+0
-2
src/hb-buffer-private.hh
src/hb-buffer-private.hh
+9
-26
src/hb-buffer.cc
src/hb-buffer.cc
+31
-31
src/hb-buffer.h
src/hb-buffer.h
+1
-1
src/hb-ot-layout-gpos-private.hh
src/hb-ot-layout-gpos-private.hh
+12
-12
src/hb-ot-layout-gsub-private.hh
src/hb-ot-layout-gsub-private.hh
+1
-1
src/hb-ot-layout-private.hh
src/hb-ot-layout-private.hh
+2
-2
src/hb-ot-layout.cc
src/hb-ot-layout.cc
+19
-20
src/hb-ot-shape-complex-arabic.cc
src/hb-ot-shape-complex-arabic.cc
+4
-4
未找到文件。
TODO
浏览文件 @
88474c6f
...
...
@@ -3,8 +3,6 @@ General fixes:
- Fix tt kern on/off
- Remove hb_internal_glyph_info_t, etc
- Remove synthesized GDEF
- Remove fixed-size feature/lookup arrays in hb-ot-map
...
...
src/hb-buffer-private.hh
浏览文件 @
88474c6f
...
...
@@ -36,30 +36,13 @@ HB_BEGIN_DECLS
#define HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN 0xFFFF
#define component() var1.u16[0]
#define lig_id() var1.u16[1]
#define gproperty() var2.u32
#define back() var.u16[0]
/* number of glyphs to go back for drawing current glyph */
#define cursive_chain() var.i16[1]
/* character to which this connects, may be positive or negative */
typedef
struct
_hb_internal_glyph_info_t
{
hb_codepoint_t
codepoint
;
hb_mask_t
mask
;
uint32_t
cluster
;
uint16_t
component
;
uint16_t
lig_id
;
uint32_t
gproperty
;
}
hb_internal_glyph_info_t
;
typedef
struct
_hb_internal_glyph_position_t
{
hb_position_t
x_advance
;
hb_position_t
y_advance
;
hb_position_t
x_offset
;
hb_position_t
y_offset
;
uint32_t
back
:
16
;
/* number of glyphs to go back
for drawing current glyph */
int32_t
cursive_chain
:
16
;
/* character to which this connects,
may be positive or negative */
}
hb_internal_glyph_position_t
;
ASSERT_STATIC
(
sizeof
(
hb_glyph_info_t
)
==
sizeof
(
hb_internal_glyph_info_t
));
ASSERT_STATIC
(
sizeof
(
hb_glyph_position_t
)
==
sizeof
(
hb_internal_glyph_position_t
));
ASSERT_STATIC
(
sizeof
(
hb_glyph_info_t
)
==
20
);
ASSERT_STATIC
(
sizeof
(
hb_glyph_info_t
)
==
sizeof
(
hb_glyph_position_t
));
typedef
struct
_hb_segment_properties_t
{
...
...
@@ -137,9 +120,9 @@ struct _hb_buffer_t {
unsigned
int
len
;
/* Length of ->info and ->pos arrays */
unsigned
int
out_len
;
/* Length of ->out array */
hb_
internal_
glyph_info_t
*
info
;
hb_
internal_
glyph_info_t
*
out_info
;
hb_
internal_
glyph_position_t
*
pos
;
hb_glyph_info_t
*
info
;
hb_glyph_info_t
*
out_info
;
hb_glyph_position_t
*
pos
;
/* Other stuff */
...
...
src/hb-buffer.cc
浏览文件 @
88474c6f
...
...
@@ -64,8 +64,8 @@ _hb_buffer_enlarge (hb_buffer_t *buffer, unsigned int size)
return
FALSE
;
unsigned
int
new_allocated
=
buffer
->
allocated
;
hb_
internal_
glyph_position_t
*
new_pos
;
hb_
internal_
glyph_info_t
*
new_info
;
hb_glyph_position_t
*
new_pos
;
hb_glyph_info_t
*
new_info
;
bool
separate_out
;
separate_out
=
buffer
->
out_info
!=
buffer
->
info
;
...
...
@@ -73,8 +73,8 @@ _hb_buffer_enlarge (hb_buffer_t *buffer, unsigned int size)
while
(
size
>
new_allocated
)
new_allocated
+=
(
new_allocated
>>
1
)
+
8
;
new_pos
=
(
hb_
internal_
glyph_position_t
*
)
realloc
(
buffer
->
pos
,
new_allocated
*
sizeof
(
buffer
->
pos
[
0
]));
new_info
=
(
hb_
internal_
glyph_info_t
*
)
realloc
(
buffer
->
info
,
new_allocated
*
sizeof
(
buffer
->
info
[
0
]));
new_pos
=
(
hb_glyph_position_t
*
)
realloc
(
buffer
->
pos
,
new_allocated
*
sizeof
(
buffer
->
pos
[
0
]));
new_info
=
(
hb_glyph_info_t
*
)
realloc
(
buffer
->
info
,
new_allocated
*
sizeof
(
buffer
->
info
[
0
]));
if
(
unlikely
(
!
new_pos
||
!
new_info
))
buffer
->
in_error
=
TRUE
;
...
...
@@ -85,7 +85,7 @@ _hb_buffer_enlarge (hb_buffer_t *buffer, unsigned int size)
if
(
likely
(
new_info
))
buffer
->
info
=
new_info
;
buffer
->
out_info
=
separate_out
?
(
hb_
internal_
glyph_info_t
*
)
buffer
->
pos
:
buffer
->
info
;
buffer
->
out_info
=
separate_out
?
(
hb_glyph_info_t
*
)
buffer
->
pos
:
buffer
->
info
;
if
(
likely
(
!
buffer
->
in_error
))
buffer
->
allocated
=
new_allocated
;
...
...
@@ -107,7 +107,7 @@ _hb_buffer_ensure_separate (hb_buffer_t *buffer, unsigned int size)
{
assert
(
buffer
->
have_output
);
buffer
->
out_info
=
(
hb_
internal_
glyph_info_t
*
)
buffer
->
pos
;
buffer
->
out_info
=
(
hb_glyph_info_t
*
)
buffer
->
pos
;
memcpy
(
buffer
->
out_info
,
buffer
->
info
,
buffer
->
out_len
*
sizeof
(
buffer
->
out_info
[
0
]));
}
...
...
@@ -243,7 +243,7 @@ hb_buffer_add_glyph (hb_buffer_t *buffer,
hb_mask_t
mask
,
unsigned
int
cluster
)
{
hb_
internal_
glyph_info_t
*
glyph
;
hb_glyph_info_t
*
glyph
;
if
(
unlikely
(
!
_hb_buffer_ensure
(
buffer
,
buffer
->
len
+
1
)))
return
;
...
...
@@ -251,9 +251,9 @@ hb_buffer_add_glyph (hb_buffer_t *buffer,
glyph
->
codepoint
=
codepoint
;
glyph
->
mask
=
mask
;
glyph
->
cluster
=
cluster
;
glyph
->
component
=
0
;
glyph
->
lig_id
=
0
;
glyph
->
gproperty
=
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
;
glyph
->
component
()
=
0
;
glyph
->
lig_id
()
=
0
;
glyph
->
gproperty
()
=
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
;
buffer
->
len
++
;
}
...
...
@@ -267,7 +267,7 @@ hb_buffer_clear_positions (hb_buffer_t *buffer)
if
(
unlikely
(
!
buffer
->
pos
))
{
buffer
->
pos
=
(
hb_
internal_
glyph_position_t
*
)
calloc
(
buffer
->
allocated
,
sizeof
(
buffer
->
pos
[
0
]));
buffer
->
pos
=
(
hb_glyph_position_t
*
)
calloc
(
buffer
->
allocated
,
sizeof
(
buffer
->
pos
[
0
]));
return
;
}
...
...
@@ -296,11 +296,11 @@ _hb_buffer_swap (hb_buffer_t *buffer)
if
(
buffer
->
out_info
!=
buffer
->
info
)
{
hb_
internal_
glyph_info_t
*
tmp_string
;
hb_glyph_info_t
*
tmp_string
;
tmp_string
=
buffer
->
info
;
buffer
->
info
=
buffer
->
out_info
;
buffer
->
out_info
=
tmp_string
;
buffer
->
pos
=
(
hb_
internal_
glyph_position_t
*
)
buffer
->
out_info
;
buffer
->
pos
=
(
hb_glyph_position_t
*
)
buffer
->
out_info
;
}
tmp
=
buffer
->
len
;
...
...
@@ -352,19 +352,19 @@ _hb_buffer_add_output_glyphs (hb_buffer_t *buffer,
mask
=
buffer
->
info
[
buffer
->
i
].
mask
;
cluster
=
buffer
->
info
[
buffer
->
i
].
cluster
;
if
(
component
==
0xFFFF
)
component
=
buffer
->
info
[
buffer
->
i
].
component
;
component
=
buffer
->
info
[
buffer
->
i
].
component
()
;
if
(
lig_id
==
0xFFFF
)
lig_id
=
buffer
->
info
[
buffer
->
i
].
lig_id
;
lig_id
=
buffer
->
info
[
buffer
->
i
].
lig_id
()
;
for
(
i
=
0
;
i
<
num_out
;
i
++
)
{
hb_
internal_
glyph_info_t
*
info
=
&
buffer
->
out_info
[
buffer
->
out_len
+
i
];
hb_glyph_info_t
*
info
=
&
buffer
->
out_info
[
buffer
->
out_len
+
i
];
info
->
codepoint
=
glyph_data
[
i
];
info
->
mask
=
mask
;
info
->
cluster
=
cluster
;
info
->
component
=
component
;
info
->
lig_id
=
lig_id
;
info
->
gproperty
=
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
;
info
->
component
()
=
component
;
info
->
lig_id
()
=
lig_id
;
info
->
gproperty
()
=
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
;
}
buffer
->
i
+=
num_in
;
...
...
@@ -393,19 +393,19 @@ _hb_buffer_add_output_glyphs_be16 (hb_buffer_t *buffer,
mask
=
buffer
->
info
[
buffer
->
i
].
mask
;
cluster
=
buffer
->
info
[
buffer
->
i
].
cluster
;
if
(
component
==
0xFFFF
)
component
=
buffer
->
info
[
buffer
->
i
].
component
;
component
=
buffer
->
info
[
buffer
->
i
].
component
()
;
if
(
lig_id
==
0xFFFF
)
lig_id
=
buffer
->
info
[
buffer
->
i
].
lig_id
;
lig_id
=
buffer
->
info
[
buffer
->
i
].
lig_id
()
;
for
(
i
=
0
;
i
<
num_out
;
i
++
)
{
hb_
internal_
glyph_info_t
*
info
=
&
buffer
->
out_info
[
buffer
->
out_len
+
i
];
hb_glyph_info_t
*
info
=
&
buffer
->
out_info
[
buffer
->
out_len
+
i
];
info
->
codepoint
=
hb_be_uint16
(
glyph_data_be
[
i
]);
info
->
mask
=
mask
;
info
->
cluster
=
cluster
;
info
->
component
=
component
;
info
->
lig_id
=
lig_id
;
info
->
gproperty
=
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
;
info
->
component
()
=
component
;
info
->
lig_id
()
=
lig_id
;
info
->
gproperty
()
=
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
;
}
buffer
->
i
+=
num_in
;
...
...
@@ -418,7 +418,7 @@ _hb_buffer_add_output_glyph (hb_buffer_t *buffer,
unsigned
short
component
,
unsigned
short
lig_id
)
{
hb_
internal_
glyph_info_t
*
info
;
hb_glyph_info_t
*
info
;
if
(
buffer
->
out_info
!=
buffer
->
info
)
{
...
...
@@ -431,10 +431,10 @@ _hb_buffer_add_output_glyph (hb_buffer_t *buffer,
info
=
&
buffer
->
out_info
[
buffer
->
out_len
];
info
->
codepoint
=
glyph_index
;
if
(
component
!=
0xFFFF
)
info
->
component
=
component
;
info
->
component
()
=
component
;
if
(
lig_id
!=
0xFFFF
)
info
->
lig_id
=
lig_id
;
info
->
gproperty
=
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
;
info
->
lig_id
()
=
lig_id
;
info
->
gproperty
()
=
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
;
buffer
->
i
++
;
buffer
->
out_len
++
;
...
...
@@ -548,7 +548,7 @@ reverse_range (hb_buffer_t *buffer,
unsigned
int
i
,
j
;
for
(
i
=
start
,
j
=
end
-
1
;
i
<
j
;
i
++
,
j
--
)
{
hb_
internal_
glyph_info_t
t
;
hb_glyph_info_t
t
;
t
=
buffer
->
info
[
i
];
buffer
->
info
[
i
]
=
buffer
->
info
[
j
];
...
...
@@ -557,7 +557,7 @@ reverse_range (hb_buffer_t *buffer,
if
(
buffer
->
pos
)
{
for
(
i
=
0
,
j
=
end
-
1
;
i
<
j
;
i
++
,
j
--
)
{
hb_
internal_
glyph_position_t
t
;
hb_glyph_position_t
t
;
t
=
buffer
->
pos
[
i
];
buffer
->
pos
[
i
]
=
buffer
->
pos
[
j
];
...
...
src/hb-buffer.h
浏览文件 @
88474c6f
...
...
@@ -50,7 +50,7 @@ typedef struct _hb_glyph_position_t {
hb_position_t
y_advance
;
hb_position_t
x_offset
;
hb_position_t
y_offset
;
hb_var_int_t
var
1
;
hb_var_int_t
var
;
}
hb_glyph_position_t
;
...
...
src/hb-ot-layout-gpos-private.hh
浏览文件 @
88474c6f
...
...
@@ -87,10 +87,10 @@ struct ValueFormat : USHORT
inline
unsigned
int
get_size
(
void
)
const
{
return
get_len
()
*
Value
::
static_size
;
}
void
apply_value
(
hb_ot_layout_context_t
*
layout
,
const
void
*
base
,
const
Value
*
values
,
hb_
internal_glyph_position_t
&
glyph_pos
)
const
void
apply_value
(
hb_ot_layout_context_t
*
layout
,
const
void
*
base
,
const
Value
*
values
,
hb_
glyph_position_t
&
glyph_pos
)
const
{
unsigned
int
x_ppem
,
y_ppem
;
unsigned
int
format
=
*
this
;
...
...
@@ -399,10 +399,10 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde
mark_anchor
.
get_anchor
(
c
->
layout
,
c
->
buffer
->
info
[
c
->
buffer
->
i
].
codepoint
,
&
mark_x
,
&
mark_y
);
glyph_anchor
.
get_anchor
(
c
->
layout
,
c
->
buffer
->
info
[
glyph_pos
].
codepoint
,
&
base_x
,
&
base_y
);
hb_
internal_
glyph_position_t
&
o
=
c
->
buffer
->
pos
[
c
->
buffer
->
i
];
hb_glyph_position_t
&
o
=
c
->
buffer
->
pos
[
c
->
buffer
->
i
];
o
.
x_offset
=
base_x
-
mark_x
;
o
.
y_offset
=
base_y
-
mark_y
;
o
.
back
=
c
->
buffer
->
i
-
glyph_pos
;
o
.
back
()
=
c
->
buffer
->
i
-
glyph_pos
;
c
->
buffer
->
i
++
;
return
true
;
...
...
@@ -876,7 +876,7 @@ struct CursivePosFormat1
if
(
c
->
lookup_flag
&
LookupFlag
::
RightToLeft
)
{
c
->
buffer
->
pos
[
i
].
cursive_chain
=
j
-
i
;
c
->
buffer
->
pos
[
i
].
cursive_chain
()
=
j
-
i
;
if
(
likely
(
HB_DIRECTION_IS_HORIZONTAL
(
direction
)))
c
->
buffer
->
pos
[
i
].
y_offset
=
entry_y
-
exit_y
;
else
...
...
@@ -884,7 +884,7 @@ struct CursivePosFormat1
}
else
{
c
->
buffer
->
pos
[
j
].
cursive_chain
=
i
-
j
;
c
->
buffer
->
pos
[
j
].
cursive_chain
()
=
i
-
j
;
if
(
likely
(
HB_DIRECTION_IS_HORIZONTAL
(
direction
)))
c
->
buffer
->
pos
[
j
].
y_offset
=
exit_y
-
entry_y
;
else
...
...
@@ -1093,9 +1093,9 @@ struct MarkLigPosFormat1
* is identical to the ligature ID of the found ligature. If yes, we
* can directly use the component index. If not, we attach the mark
* glyph to the last component of the ligature. */
if
(
c
->
buffer
->
info
[
j
].
lig_id
&&
c
->
buffer
->
info
[
j
].
lig_id
==
c
->
buffer
->
info
[
c
->
buffer
->
i
].
lig_id
&&
c
->
buffer
->
info
[
c
->
buffer
->
i
].
component
)
if
(
c
->
buffer
->
info
[
j
].
lig_id
()
&&
c
->
buffer
->
info
[
j
].
lig_id
()
==
c
->
buffer
->
info
[
c
->
buffer
->
i
].
lig_id
()
&&
c
->
buffer
->
info
[
c
->
buffer
->
i
].
component
()
)
{
comp_index
=
c
->
buffer
->
info
[
c
->
buffer
->
i
].
component
-
1
;
comp_index
=
c
->
buffer
->
info
[
c
->
buffer
->
i
].
component
()
-
1
;
if
(
comp_index
>=
comp_count
)
comp_index
=
comp_count
-
1
;
}
...
...
@@ -1198,8 +1198,8 @@ struct MarkMarkPosFormat1
/* Two marks match only if they belong to the same base, or same component
* of the same ligature. That is, the component numbers must match, and
* if those are non-zero, the ligid number should also match. */
if
((
c
->
buffer
->
info
[
j
].
component
!=
c
->
buffer
->
info
[
c
->
buffer
->
i
].
component
)
||
(
c
->
buffer
->
info
[
j
].
component
&&
c
->
buffer
->
info
[
j
].
lig_id
!=
c
->
buffer
->
info
[
c
->
buffer
->
i
].
lig_id
))
if
((
c
->
buffer
->
info
[
j
].
component
()
!=
c
->
buffer
->
info
[
c
->
buffer
->
i
].
component
()
)
||
(
c
->
buffer
->
info
[
j
].
component
()
&&
c
->
buffer
->
info
[
j
].
lig_id
()
!=
c
->
buffer
->
info
[
c
->
buffer
->
i
].
lig_id
()
))
return
false
;
unsigned
int
mark2_index
=
(
this
+
mark2Coverage
)
(
c
->
buffer
->
info
[
j
].
codepoint
);
...
...
src/hb-ot-layout-gsub-private.hh
浏览文件 @
88474c6f
...
...
@@ -398,7 +398,7 @@ struct Ligature
c
->
buffer
->
add_output_glyphs_be16
(
i
,
1
,
(
const
uint16_t
*
)
&
ligGlyph
,
0
,
c
->
buffer
->
info
[
c
->
buffer
->
i
].
lig_id
&&
!
c
->
buffer
->
info
[
c
->
buffer
->
i
].
component
?
c
->
buffer
->
info
[
c
->
buffer
->
i
].
lig_id
()
&&
!
c
->
buffer
->
info
[
c
->
buffer
->
i
].
component
()
?
0xFFFF
:
c
->
buffer
->
allocate_lig_id
());
else
{
...
...
src/hb-ot-layout-private.hh
浏览文件 @
88474c6f
...
...
@@ -101,13 +101,13 @@ _hb_ot_layout_set_glyph_class (hb_face_t *face,
HB_INTERNAL
hb_bool_t
_hb_ot_layout_check_glyph_property
(
hb_face_t
*
face
,
hb_
internal_
glyph_info_t
*
ginfo
,
hb_glyph_info_t
*
ginfo
,
unsigned
int
lookup_flags
,
unsigned
int
*
property
);
HB_INTERNAL
hb_bool_t
_hb_ot_layout_skip_mark
(
hb_face_t
*
face
,
hb_
internal_
glyph_info_t
*
ginfo
,
hb_glyph_info_t
*
ginfo
,
unsigned
int
lookup_flags
,
unsigned
int
*
property
);
...
...
src/hb-ot-layout.cc
浏览文件 @
88474c6f
...
...
@@ -138,15 +138,15 @@ _hb_ot_layout_get_glyph_property (hb_face_t *face,
hb_bool_t
_hb_ot_layout_check_glyph_property
(
hb_face_t
*
face
,
hb_
internal_
glyph_info_t
*
ginfo
,
hb_glyph_info_t
*
ginfo
,
unsigned
int
lookup_flags
,
unsigned
int
*
property_out
)
{
unsigned
int
property
;
if
(
ginfo
->
gproperty
==
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
)
ginfo
->
gproperty
=
_hb_ot_layout_get_glyph_property
(
face
,
ginfo
->
codepoint
);
property
=
ginfo
->
gproperty
;
if
(
ginfo
->
gproperty
()
==
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
)
ginfo
->
gproperty
()
=
_hb_ot_layout_get_glyph_property
(
face
,
ginfo
->
codepoint
);
property
=
ginfo
->
gproperty
()
;
if
(
property_out
)
*
property_out
=
property
;
...
...
@@ -177,15 +177,15 @@ _hb_ot_layout_check_glyph_property (hb_face_t *face,
hb_bool_t
_hb_ot_layout_skip_mark
(
hb_face_t
*
face
,
hb_
internal_
glyph_info_t
*
ginfo
,
hb_glyph_info_t
*
ginfo
,
unsigned
int
lookup_flags
,
unsigned
int
*
property_out
)
{
unsigned
int
property
;
if
(
ginfo
->
gproperty
==
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
)
ginfo
->
gproperty
=
_hb_ot_layout_get_glyph_property
(
face
,
ginfo
->
codepoint
);
property
=
ginfo
->
gproperty
;
if
(
ginfo
->
gproperty
()
==
HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN
)
ginfo
->
gproperty
()
=
_hb_ot_layout_get_glyph_property
(
face
,
ginfo
->
codepoint
);
property
=
ginfo
->
gproperty
()
;
if
(
property_out
)
*
property_out
=
property
;
...
...
@@ -606,7 +606,7 @@ hb_ot_layout_position_finish (hb_font_t *font HB_UNUSED,
{
unsigned
int
i
,
j
;
unsigned
int
len
=
hb_buffer_get_length
(
buffer
);
hb_
internal_glyph_position_t
*
pos
=
(
hb_internal_glyph_position_t
*
)
hb_buffer_get_glyph_positions
(
buffer
);
hb_
glyph_position_t
*
pos
=
hb_buffer_get_glyph_positions
(
buffer
);
hb_direction_t
direction
=
buffer
->
props
.
direction
;
/* TODO: Vertical */
...
...
@@ -616,35 +616,34 @@ hb_ot_layout_position_finish (hb_font_t *font HB_UNUSED,
if
(
likely
(
HB_DIRECTION_IS_HORIZONTAL
(
direction
)))
{
for
(
j
=
0
;
j
<
len
;
j
++
)
{
if
(
pos
[
j
].
cursive_chain
<
0
)
pos
[
j
].
y_offset
+=
pos
[
j
+
pos
[
j
].
cursive_chain
].
y_offset
;
if
(
pos
[
j
].
cursive_chain
()
<
0
)
pos
[
j
].
y_offset
+=
pos
[
j
+
pos
[
j
].
cursive_chain
()
].
y_offset
;
}
for
(
i
=
len
;
i
>
0
;
i
--
)
{
j
=
i
-
1
;
if
(
pos
[
j
].
cursive_chain
>
0
)
pos
[
j
].
y_offset
+=
pos
[
j
+
pos
[
j
].
cursive_chain
].
y_offset
;
if
(
pos
[
j
].
cursive_chain
()
>
0
)
pos
[
j
].
y_offset
+=
pos
[
j
+
pos
[
j
].
cursive_chain
()
].
y_offset
;
}
}
else
{
for
(
j
=
0
;
j
<
len
;
j
++
)
{
if
(
pos
[
j
].
cursive_chain
<
0
)
pos
[
j
].
x_offset
+=
pos
[
j
+
pos
[
j
].
cursive_chain
].
x_offset
;
if
(
pos
[
j
].
cursive_chain
()
<
0
)
pos
[
j
].
x_offset
+=
pos
[
j
+
pos
[
j
].
cursive_chain
()
].
x_offset
;
}
for
(
i
=
len
;
i
>
0
;
i
--
)
{
j
=
i
-
1
;
if
(
pos
[
j
].
cursive_chain
>
0
)
pos
[
j
].
x_offset
+=
pos
[
j
+
pos
[
j
].
cursive_chain
].
x_offset
;
if
(
pos
[
j
].
cursive_chain
()
>
0
)
pos
[
j
].
x_offset
+=
pos
[
j
+
pos
[
j
].
cursive_chain
()
].
x_offset
;
}
}
/* Handle attachments */
for
(
i
=
0
;
i
<
len
;
i
++
)
if
(
pos
[
i
].
back
)
if
(
pos
[
i
].
back
()
)
{
unsigned
int
back
=
i
-
pos
[
i
].
back
;
pos
[
i
].
back
=
0
;
unsigned
int
back
=
i
-
pos
[
i
].
back
();
pos
[
i
].
x_offset
+=
pos
[
back
].
x_offset
;
pos
[
i
].
y_offset
+=
pos
[
back
].
y_offset
;
...
...
src/hb-ot-shape-complex-arabic.cc
浏览文件 @
88474c6f
...
...
@@ -690,16 +690,16 @@ _hb_ot_shape_complex_setup_masks_arabic (hb_ot_shape_context_t *c)
unsigned
int
this_type
=
get_joining_type
(
c
->
buffer
->
info
[
i
].
codepoint
,
c
->
buffer
->
unicode
->
v
.
get_general_category
(
c
->
buffer
->
info
[
i
].
codepoint
));
if
(
unlikely
(
this_type
==
JOINING_TYPE_T
))
{
c
->
buffer
->
info
[
i
].
gproperty
=
NONE
;
c
->
buffer
->
info
[
i
].
var2
.
u32
=
NONE
;
continue
;
}
const
arabic_state_table_entry
*
entry
=
&
arabic_state_table
[
state
][
this_type
];
if
(
entry
->
prev_action
!=
NONE
)
c
->
buffer
->
info
[
prev
].
gproperty
=
entry
->
prev_action
;
c
->
buffer
->
info
[
prev
].
var2
.
u32
=
entry
->
prev_action
;
c
->
buffer
->
info
[
i
].
gproperty
=
entry
->
curr_action
;
c
->
buffer
->
info
[
i
].
var2
.
u32
=
entry
->
curr_action
;
prev
=
i
;
state
=
entry
->
next_state
;
...
...
@@ -711,7 +711,7 @@ _hb_ot_shape_complex_setup_masks_arabic (hb_ot_shape_context_t *c)
mask_array
[
i
]
=
c
->
plan
->
map
.
get_1_mask
(
arabic_syriac_features
[
i
]);
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
c
->
buffer
->
info
[
i
].
mask
|=
mask_array
[
c
->
buffer
->
info
[
i
].
gproperty
];
c
->
buffer
->
info
[
i
].
mask
|=
mask_array
[
c
->
buffer
->
info
[
i
].
var2
.
u32
];
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录