Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
94a23aae
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,发现更多精彩内容 >>
提交
94a23aae
编写于
5月 05, 2010
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move buffer into apply_context
上级
63493f95
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
106 addition
and
82 deletion
+106
-82
src/hb-buffer-private.h
src/hb-buffer-private.h
+17
-13
src/hb-ot-layout-gpos-private.hh
src/hb-ot-layout-gpos-private.hh
+36
-28
src/hb-ot-layout-gsub-private.hh
src/hb-ot-layout-gsub-private.hh
+26
-19
src/hb-ot-layout-gsubgpos-private.hh
src/hb-ot-layout-gsubgpos-private.hh
+27
-22
未找到文件。
src/hb-buffer-private.h
浏览文件 @
94a23aae
...
...
@@ -132,20 +132,24 @@ HB_INTERNAL unsigned short
_hb_buffer_allocate_lig_id
(
hb_buffer_t
*
buffer
);
#ifndef BUFFER
#define BUFFER buffer
#endif
/* convenience macros */
#define IN_GLYPH(pos) (
buffer
->in_string[(pos)].codepoint)
#define IN_INFO(pos) (&
buffer
->in_string[(pos)])
#define IN_CURGLYPH() (
buffer->in_string[buffer
->in_pos].codepoint)
#define IN_NEXTGLYPH() (
buffer->in_string[buffer
->in_pos + 1].codepoint)
#define IN_CURINFO() (&
buffer->in_string[buffer
->in_pos])
#define IN_MASK(pos) (
buffer
->in_string[(pos)].mask)
#define IN_CLUSTER(pos) (
buffer
->in_string[(pos)].cluster)
#define IN_LIGID(pos) (
buffer
->in_string[(pos)].lig_id)
#define IN_COMPONENT(pos) (
buffer
->in_string[(pos)].component)
#define POSITION(pos) (&
buffer
->positions[(pos)])
#define CURPOSITION() (&
buffer->positions[buffer
->in_pos])
#define OUT_GLYPH(pos) (
buffer
->out_string[(pos)].codepoint)
#define OUT_INFO(pos) (&
buffer
->out_string[(pos)])
#define IN_GLYPH(pos) (
BUFFER
->in_string[(pos)].codepoint)
#define IN_INFO(pos) (&
BUFFER
->in_string[(pos)])
#define IN_CURGLYPH() (
BUFFER->in_string[BUFFER
->in_pos].codepoint)
#define IN_NEXTGLYPH() (
BUFFER->in_string[BUFFER
->in_pos + 1].codepoint)
#define IN_CURINFO() (&
BUFFER->in_string[BUFFER
->in_pos])
#define IN_MASK(pos) (
BUFFER
->in_string[(pos)].mask)
#define IN_CLUSTER(pos) (
BUFFER
->in_string[(pos)].cluster)
#define IN_LIGID(pos) (
BUFFER
->in_string[(pos)].lig_id)
#define IN_COMPONENT(pos) (
BUFFER
->in_string[(pos)].component)
#define POSITION(pos) (&
BUFFER
->positions[(pos)])
#define CURPOSITION() (&
BUFFER->positions[BUFFER
->in_pos])
#define OUT_GLYPH(pos) (
BUFFER
->out_string[(pos)].codepoint)
#define OUT_INFO(pos) (&
BUFFER
->out_string[(pos)])
HB_END_DECLS
...
...
src/hb-ot-layout-gpos-private.hh
浏览文件 @
94a23aae
...
...
@@ -29,6 +29,11 @@
#include "hb-ot-layout-gsubgpos-private.hh"
#undef BUFFER
#define BUFFER context->buffer
#define HB_OT_LAYOUT_GPOS_NO_LAST ((unsigned int) -1)
/* Shared Tables: ValueRecord, Anchor Table, and MarkArray */
...
...
@@ -391,14 +396,14 @@ struct MarkArray
mark_anchor
.
get_anchor
(
context
->
layout
,
IN_CURGLYPH
(),
&
mark_x
,
&
mark_y
);
glyph_anchor
.
get_anchor
(
context
->
layout
,
IN_GLYPH
(
glyph_pos
),
&
base_x
,
&
base_y
);
hb_internal_glyph_position_t
*
o
=
POSITION
(
buffer
->
in_pos
);
hb_internal_glyph_position_t
*
o
=
POSITION
(
context
->
buffer
->
in_pos
);
o
->
x_advance
=
0
;
o
->
y_advance
=
0
;
o
->
x_offset
=
base_x
-
mark_x
;
o
->
y_offset
=
base_y
-
mark_y
;
o
->
back
=
buffer
->
in_pos
-
glyph_pos
;
o
->
back
=
context
->
buffer
->
in_pos
-
glyph_pos
;
buffer
->
in_pos
++
;
context
->
buffer
->
in_pos
++
;
return
true
;
}
...
...
@@ -430,7 +435,7 @@ struct SinglePosFormat1
valueFormat
.
apply_value
(
context
->
layout
,
CharP
(
this
),
values
,
CURPOSITION
());
buffer
->
in_pos
++
;
context
->
buffer
->
in_pos
++
;
return
true
;
}
...
...
@@ -473,7 +478,7 @@ struct SinglePosFormat2
&
values
[
index
*
valueFormat
.
get_len
()],
CURPOSITION
());
buffer
->
in_pos
++
;
context
->
buffer
->
in_pos
++
;
return
true
;
}
...
...
@@ -572,15 +577,15 @@ struct PairPosFormat1
inline
bool
apply
(
APPLY_ARG_DEF
)
const
{
TRACE_APPLY
();
unsigned
int
end
=
MIN
(
buffer
->
in_length
,
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
buffer
->
in_pos
+
2
>
end
))
unsigned
int
end
=
MIN
(
context
->
buffer
->
in_length
,
context
->
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
context
->
buffer
->
in_pos
+
2
>
end
))
return
false
;
unsigned
int
index
=
(
this
+
coverage
)
(
IN_CURGLYPH
());
if
(
likely
(
index
==
NOT_COVERED
))
return
false
;
unsigned
int
j
=
buffer
->
in_pos
+
1
;
unsigned
int
j
=
context
->
buffer
->
in_pos
+
1
;
while
(
_hb_ot_layout_skip_mark
(
context
->
layout
->
face
,
IN_INFO
(
j
),
context
->
lookup_flag
,
NULL
))
{
if
(
unlikely
(
j
==
end
))
...
...
@@ -603,7 +608,7 @@ struct PairPosFormat1
valueFormat2
.
apply_value
(
context
->
layout
,
CharP
(
this
),
&
record
->
values
[
len1
],
POSITION
(
j
));
if
(
len2
)
j
++
;
buffer
->
in_pos
=
j
;
context
->
buffer
->
in_pos
=
j
;
return
true
;
}
record
=
&
StructAtOffset
<
PairValueRecord
>
(
*
record
,
record_size
);
...
...
@@ -665,15 +670,15 @@ struct PairPosFormat2
inline
bool
apply
(
APPLY_ARG_DEF
)
const
{
TRACE_APPLY
();
unsigned
int
end
=
MIN
(
buffer
->
in_length
,
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
buffer
->
in_pos
+
2
>
end
))
unsigned
int
end
=
MIN
(
context
->
buffer
->
in_length
,
context
->
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
context
->
buffer
->
in_pos
+
2
>
end
))
return
false
;
unsigned
int
index
=
(
this
+
coverage
)
(
IN_CURGLYPH
());
if
(
likely
(
index
==
NOT_COVERED
))
return
false
;
unsigned
int
j
=
buffer
->
in_pos
+
1
;
unsigned
int
j
=
context
->
buffer
->
in_pos
+
1
;
while
(
_hb_ot_layout_skip_mark
(
context
->
layout
->
face
,
IN_INFO
(
j
),
context
->
lookup_flag
,
NULL
))
{
if
(
unlikely
(
j
==
end
))
...
...
@@ -696,7 +701,7 @@ struct PairPosFormat2
if
(
len2
)
j
++
;
buffer
->
in_pos
=
j
;
context
->
buffer
->
in_pos
=
j
;
return
true
;
}
...
...
@@ -949,10 +954,10 @@ struct CursivePosFormat1
/* TODO vertical */
if
(
buffer
->
direction
==
HB_DIRECTION_RTL
)
if
(
context
->
buffer
->
direction
==
HB_DIRECTION_RTL
)
{
/* advance is absolute, not relative */
POSITION
(
buffer
->
in_pos
)
->
x_advance
=
entry_x
-
gpi
->
anchor_x
;
POSITION
(
context
->
buffer
->
in_pos
)
->
x_advance
=
entry_x
-
gpi
->
anchor_x
;
}
else
{
...
...
@@ -962,23 +967,23 @@ struct CursivePosFormat1
if
(
context
->
lookup_flag
&
LookupFlag
::
RightToLeft
)
{
POSITION
(
last_pos
)
->
cursive_chain
=
last_pos
-
buffer
->
in_pos
;
POSITION
(
last_pos
)
->
cursive_chain
=
last_pos
-
context
->
buffer
->
in_pos
;
POSITION
(
last_pos
)
->
y_offset
=
entry_y
-
gpi
->
anchor_y
;
}
else
{
POSITION
(
buffer
->
in_pos
)
->
cursive_chain
=
buffer
->
in_pos
-
last_pos
;
POSITION
(
buffer
->
in_pos
)
->
y_offset
=
gpi
->
anchor_y
-
entry_y
;
POSITION
(
context
->
buffer
->
in_pos
)
->
cursive_chain
=
context
->
buffer
->
in_pos
-
last_pos
;
POSITION
(
context
->
buffer
->
in_pos
)
->
y_offset
=
gpi
->
anchor_y
-
entry_y
;
}
end:
if
(
record
.
exitAnchor
)
{
gpi
->
last
=
buffer
->
in_pos
;
gpi
->
last
=
context
->
buffer
->
in_pos
;
(
this
+
record
.
exitAnchor
).
get_anchor
(
context
->
layout
,
IN_CURGLYPH
(),
&
gpi
->
anchor_x
,
&
gpi
->
anchor_y
);
}
buffer
->
in_pos
++
;
context
->
buffer
->
in_pos
++
;
return
true
;
}
...
...
@@ -1049,7 +1054,7 @@ struct MarkBasePosFormat1
/* now we search backwards for a non-mark glyph */
unsigned
int
property
;
unsigned
int
j
=
buffer
->
in_pos
;
unsigned
int
j
=
context
->
buffer
->
in_pos
;
do
{
if
(
unlikely
(
!
j
))
...
...
@@ -1152,7 +1157,7 @@ struct MarkLigPosFormat1
/* now we search backwards for a non-mark glyph */
unsigned
int
property
;
unsigned
int
j
=
buffer
->
in_pos
;
unsigned
int
j
=
context
->
buffer
->
in_pos
;
do
{
if
(
unlikely
(
!
j
))
...
...
@@ -1182,9 +1187,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
(
IN_LIGID
(
j
)
&&
IN_LIGID
(
j
)
==
IN_LIGID
(
buffer
->
in_pos
)
&&
IN_COMPONENT
(
buffer
->
in_pos
))
if
(
IN_LIGID
(
j
)
&&
IN_LIGID
(
j
)
==
IN_LIGID
(
context
->
buffer
->
in_pos
)
&&
IN_COMPONENT
(
context
->
buffer
->
in_pos
))
{
comp_index
=
IN_COMPONENT
(
buffer
->
in_pos
)
-
1
;
comp_index
=
IN_COMPONENT
(
context
->
buffer
->
in_pos
)
-
1
;
if
(
comp_index
>=
comp_count
)
comp_index
=
comp_count
-
1
;
}
...
...
@@ -1272,7 +1277,7 @@ struct MarkMarkPosFormat1
/* now we search backwards for a suitable mark glyph until a non-mark glyph */
unsigned
int
property
;
unsigned
int
j
=
buffer
->
in_pos
;
unsigned
int
j
=
context
->
buffer
->
in_pos
;
do
{
if
(
unlikely
(
!
j
))
...
...
@@ -1286,8 +1291,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
((
IN_COMPONENT
(
j
)
!=
IN_COMPONENT
(
buffer
->
in_pos
))
||
(
IN_COMPONENT
(
j
)
&&
IN_LIGID
(
j
)
!=
IN_LIGID
(
buffer
->
in_pos
)))
if
((
IN_COMPONENT
(
j
)
!=
IN_COMPONENT
(
context
->
buffer
->
in_pos
))
||
(
IN_COMPONENT
(
j
)
&&
IN_LIGID
(
j
)
!=
IN_LIGID
(
context
->
buffer
->
in_pos
)))
return
false
;
unsigned
int
mark2_index
=
(
this
+
mark2Coverage
)
(
IN_GLYPH
(
j
));
...
...
@@ -1489,6 +1494,7 @@ struct PosLookup : Lookup
hb_apply_context_t
context
[
1
];
context
->
layout
=
layout
;
context
->
buffer
=
buffer
;
context
->
nesting_level_left
=
nesting_level_left
;
context
->
lookup_flag
=
get_flag
();
...
...
@@ -1506,6 +1512,8 @@ struct PosLookup : Lookup
hb_buffer_t
*
buffer
,
hb_mask_t
mask
)
const
{
#undef BUFFER
#define BUFFER buffer
bool
ret
=
false
;
if
(
unlikely
(
!
buffer
->
in_length
))
...
...
@@ -1603,7 +1611,7 @@ static inline bool position_lookup (APPLY_ARG_DEF, unsigned int lookup_index)
if
(
unlikely
(
context_length
<
1
))
return
false
;
return
l
.
apply_once
(
context
->
layout
,
buffer
,
context_length
,
context
->
nesting_level_left
-
1
,
apply_depth
+
1
);
return
l
.
apply_once
(
context
->
layout
,
context
->
buffer
,
context_length
,
context
->
nesting_level_left
-
1
,
apply_depth
+
1
);
}
...
...
src/hb-ot-layout-gsub-private.hh
浏览文件 @
94a23aae
...
...
@@ -30,6 +30,10 @@
#include "hb-ot-layout-gsubgpos-private.hh"
#undef BUFFER
#define BUFFER context->buffer
struct
SingleSubstFormat1
{
friend
struct
SingleSubst
;
...
...
@@ -45,7 +49,7 @@ struct SingleSubstFormat1
return
false
;
glyph_id
+=
deltaGlyphID
;
_hb_buffer_replace_glyph
(
buffer
,
glyph_id
);
_hb_buffer_replace_glyph
(
context
->
buffer
,
glyph_id
);
/* We inherit the old glyph class to the substituted glyph */
if
(
_hb_ot_layout_has_new_glyph_classes
(
context
->
layout
->
face
))
...
...
@@ -88,7 +92,7 @@ struct SingleSubstFormat2
return
false
;
glyph_id
=
substitute
[
index
];
_hb_buffer_replace_glyph
(
buffer
,
glyph_id
);
_hb_buffer_replace_glyph
(
context
->
buffer
,
glyph_id
);
/* We inherit the old glyph class to the substituted glyph */
if
(
_hb_ot_layout_has_new_glyph_classes
(
context
->
layout
->
face
))
...
...
@@ -160,7 +164,7 @@ struct Sequence
if
(
unlikely
(
!
substitute
.
len
))
return
false
;
_hb_buffer_add_output_glyphs_be16
(
buffer
,
1
,
_hb_buffer_add_output_glyphs_be16
(
context
->
buffer
,
1
,
substitute
.
len
,
(
const
uint16_t
*
)
substitute
.
array
(),
0xFFFF
,
0xFFFF
);
...
...
@@ -285,8 +289,8 @@ struct AlternateSubstFormat1
/* XXX callback to user to choose alternate
if (context->layout->face->altfunc)
alt_index = (context->layout->face->altfunc)(context->layout->layout, buffer,
buffer->out_pos, glyph_id,
alt_index = (context->layout->face->altfunc)(context->layout->layout,
context->
buffer,
context->
buffer->out_pos, glyph_id,
alt_set.len, alt_set.array);
*/
...
...
@@ -295,7 +299,7 @@ struct AlternateSubstFormat1
glyph_id
=
alt_set
[
alt_index
];
_hb_buffer_replace_glyph
(
buffer
,
glyph_id
);
_hb_buffer_replace_glyph
(
context
->
buffer
,
glyph_id
);
/* We inherit the old glyph class to the substituted glyph */
if
(
_hb_ot_layout_has_new_glyph_classes
(
context
->
layout
->
face
))
...
...
@@ -363,11 +367,11 @@ struct Ligature
TRACE_APPLY
();
unsigned
int
i
,
j
;
unsigned
int
count
=
component
.
len
;
unsigned
int
end
=
MIN
(
buffer
->
in_length
,
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
buffer
->
in_pos
+
count
>
end
))
unsigned
int
end
=
MIN
(
context
->
buffer
->
in_length
,
context
->
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
context
->
buffer
->
in_pos
+
count
>
end
))
return
false
;
for
(
i
=
1
,
j
=
buffer
->
in_pos
+
1
;
i
<
count
;
i
++
,
j
++
)
for
(
i
=
1
,
j
=
context
->
buffer
->
in_pos
+
1
;
i
<
count
;
i
++
,
j
++
)
{
unsigned
int
property
;
while
(
_hb_ot_layout_skip_mark
(
context
->
layout
->
face
,
IN_INFO
(
j
),
context
->
lookup_flag
,
&
property
))
...
...
@@ -389,18 +393,18 @@ struct Ligature
is_mark
?
HB_OT_LAYOUT_GLYPH_CLASS_MARK
:
HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE
);
if
(
j
==
buffer
->
in_pos
+
i
)
/* No input glyphs skipped */
if
(
j
==
context
->
buffer
->
in_pos
+
i
)
/* No input glyphs skipped */
/* We don't use a new ligature ID if there are no skipped
glyphs and the ligature already has an ID. */
_hb_buffer_add_output_glyphs_be16
(
buffer
,
i
,
_hb_buffer_add_output_glyphs_be16
(
context
->
buffer
,
i
,
1
,
(
const
uint16_t
*
)
&
ligGlyph
,
0
,
IN_LIGID
(
buffer
->
in_pos
)
&&
!
IN_COMPONENT
(
buffer
->
in_pos
)
?
0xFFFF
:
_hb_buffer_allocate_lig_id
(
buffer
));
IN_LIGID
(
context
->
buffer
->
in_pos
)
&&
!
IN_COMPONENT
(
context
->
buffer
->
in_pos
)
?
0xFFFF
:
_hb_buffer_allocate_lig_id
(
context
->
buffer
));
else
{
unsigned
int
lig_id
=
_hb_buffer_allocate_lig_id
(
buffer
);
_hb_buffer_add_output_glyph
(
buffer
,
ligGlyph
,
0xFFFF
,
lig_id
);
unsigned
int
lig_id
=
_hb_buffer_allocate_lig_id
(
context
->
buffer
);
_hb_buffer_add_output_glyph
(
context
->
buffer
,
ligGlyph
,
0xFFFF
,
lig_id
);
/* Now we must do a second loop to copy the skipped glyphs to
`out' and assign component values to it. We start with the
...
...
@@ -412,9 +416,9 @@ struct Ligature
for
(
i
=
1
;
i
<
count
;
i
++
)
{
while
(
_hb_ot_layout_skip_mark
(
context
->
layout
->
face
,
IN_CURINFO
(),
context
->
lookup_flag
,
NULL
))
_hb_buffer_add_output_glyph
(
buffer
,
IN_CURGLYPH
(),
i
,
lig_id
);
_hb_buffer_add_output_glyph
(
context
->
buffer
,
IN_CURGLYPH
(),
i
,
lig_id
);
(
buffer
->
in_pos
)
++
;
(
context
->
buffer
->
in_pos
)
++
;
}
}
...
...
@@ -612,7 +616,7 @@ struct ReverseChainSingleSubstFormat1
1
))
{
IN_CURGLYPH
()
=
substitute
[
index
];
buffer
->
in_pos
--
;
/* Reverse! */
context
->
buffer
->
in_pos
--
;
/* Reverse! */
return
true
;
}
...
...
@@ -775,6 +779,7 @@ struct SubstLookup : Lookup
hb_apply_context_t
context
[
1
];
context
->
layout
=
layout
;
context
->
buffer
=
buffer
;
context
->
nesting_level_left
=
nesting_level_left
;
context
->
lookup_flag
=
get_flag
();
...
...
@@ -807,6 +812,8 @@ struct SubstLookup : Lookup
hb_buffer_t
*
buffer
,
hb_mask_t
mask
)
const
{
#undef BUFFER
#define BUFFER buffer
bool
ret
=
false
;
if
(
unlikely
(
!
buffer
->
in_length
))
...
...
@@ -923,7 +930,7 @@ static inline bool substitute_lookup (APPLY_ARG_DEF, unsigned int lookup_index)
if
(
unlikely
(
context_length
<
1
))
return
false
;
return
l
.
apply_once
(
context
->
layout
,
buffer
,
context_length
,
context
->
nesting_level_left
-
1
,
apply_depth
+
1
);
return
l
.
apply_once
(
context
->
layout
,
context
->
buffer
,
context_length
,
context
->
nesting_level_left
-
1
,
apply_depth
+
1
);
}
...
...
src/hb-ot-layout-gsubgpos-private.hh
浏览文件 @
94a23aae
...
...
@@ -44,24 +44,29 @@
#define APPLY_ARG_DEF \
hb_apply_context_t *context, \
hb_buffer_t *buffer, \
unsigned int context_length HB_UNUSED, \
unsigned int apply_depth HB_UNUSED
#define APPLY_ARG \
context, \
buffer, \
context_length, \
(HB_DEBUG_APPLY ? apply_depth + 1 : 0)
struct
hb_apply_context_t
{
hb_ot_layout_context_t
*
layout
;
hb_buffer_t
*
buffer
;
unsigned
int
nesting_level_left
;
unsigned
int
lookup_flag
;
unsigned
int
property
;
/* propety of first glyph (TODO remove) */
};
#undef BUFFER
#define BUFFER context->buffer
typedef
bool
(
*
match_func_t
)
(
hb_codepoint_t
glyph_id
,
const
USHORT
&
value
,
const
char
*
data
);
typedef
bool
(
*
apply_lookup_func_t
)
(
APPLY_ARG_DEF
,
unsigned
int
lookup_index
);
...
...
@@ -98,11 +103,11 @@ static inline bool match_input (APPLY_ARG_DEF,
unsigned
int
*
context_length_out
)
{
unsigned
int
i
,
j
;
unsigned
int
end
=
MIN
(
buffer
->
in_length
,
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
buffer
->
in_pos
+
count
>
end
))
unsigned
int
end
=
MIN
(
context
->
buffer
->
in_length
,
context
->
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
context
->
buffer
->
in_pos
+
count
>
end
))
return
false
;
for
(
i
=
1
,
j
=
buffer
->
in_pos
+
1
;
i
<
count
;
i
++
,
j
++
)
for
(
i
=
1
,
j
=
context
->
buffer
->
in_pos
+
1
;
i
<
count
;
i
++
,
j
++
)
{
while
(
_hb_ot_layout_skip_mark
(
context
->
layout
->
face
,
IN_INFO
(
j
),
context
->
lookup_flag
,
NULL
))
{
...
...
@@ -115,7 +120,7 @@ static inline bool match_input (APPLY_ARG_DEF,
return
false
;
}
*
context_length_out
=
j
-
buffer
->
in_pos
;
*
context_length_out
=
j
-
context
->
buffer
->
in_pos
;
return
true
;
}
...
...
@@ -126,10 +131,10 @@ static inline bool match_backtrack (APPLY_ARG_DEF,
match_func_t
match_func
,
const
char
*
match_data
)
{
if
(
unlikely
(
buffer
->
out_pos
<
count
))
if
(
unlikely
(
context
->
buffer
->
out_pos
<
count
))
return
false
;
for
(
unsigned
int
i
=
0
,
j
=
buffer
->
out_pos
-
1
;
i
<
count
;
i
++
,
j
--
)
for
(
unsigned
int
i
=
0
,
j
=
context
->
buffer
->
out_pos
-
1
;
i
<
count
;
i
++
,
j
--
)
{
while
(
_hb_ot_layout_skip_mark
(
context
->
layout
->
face
,
OUT_INFO
(
j
),
context
->
lookup_flag
,
NULL
))
{
...
...
@@ -153,11 +158,11 @@ static inline bool match_lookahead (APPLY_ARG_DEF,
unsigned
int
offset
)
{
unsigned
int
i
,
j
;
unsigned
int
end
=
MIN
(
buffer
->
in_length
,
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
buffer
->
in_pos
+
offset
+
count
>
end
))
unsigned
int
end
=
MIN
(
context
->
buffer
->
in_length
,
context
->
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
context
->
buffer
->
in_pos
+
offset
+
count
>
end
))
return
false
;
for
(
i
=
0
,
j
=
buffer
->
in_pos
+
offset
;
i
<
count
;
i
++
,
j
++
)
for
(
i
=
0
,
j
=
context
->
buffer
->
in_pos
+
offset
;
i
<
count
;
i
++
,
j
++
)
{
while
(
_hb_ot_layout_skip_mark
(
context
->
layout
->
face
,
OUT_INFO
(
j
),
context
->
lookup_flag
,
NULL
))
{
...
...
@@ -196,8 +201,8 @@ static inline bool apply_lookup (APPLY_ARG_DEF,
const
LookupRecord
lookupRecord
[],
/* Array of LookupRecords--in design order */
apply_lookup_func_t
apply_func
)
{
unsigned
int
end
=
MIN
(
buffer
->
in_length
,
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
buffer
->
in_pos
+
count
>
end
))
unsigned
int
end
=
MIN
(
context
->
buffer
->
in_length
,
context
->
buffer
->
in_pos
+
context_length
);
if
(
unlikely
(
context
->
buffer
->
in_pos
+
count
>
end
))
return
false
;
/* TODO We don't support lookupRecord arrays that are not increasing:
...
...
@@ -211,15 +216,15 @@ static inline bool apply_lookup (APPLY_ARG_DEF,
{
while
(
_hb_ot_layout_skip_mark
(
context
->
layout
->
face
,
IN_CURINFO
(),
context
->
lookup_flag
,
NULL
))
{
if
(
unlikely
(
buffer
->
in_pos
==
end
))
if
(
unlikely
(
context
->
buffer
->
in_pos
==
end
))
return
true
;
/* No lookup applied for this index */
_hb_buffer_next_glyph
(
buffer
);
_hb_buffer_next_glyph
(
context
->
buffer
);
}
if
(
lookupCount
&&
i
==
lookupRecord
->
sequenceIndex
)
{
unsigned
int
old_pos
=
buffer
->
in_pos
;
unsigned
int
old_pos
=
context
->
buffer
->
in_pos
;
/* Apply a lookup */
bool
done
=
apply_func
(
APPLY_ARG
,
lookupRecord
->
lookupListIndex
);
...
...
@@ -227,8 +232,8 @@ static inline bool apply_lookup (APPLY_ARG_DEF,
lookupRecord
++
;
lookupCount
--
;
/* Err, this is wrong if the lookup jumped over some glyphs */
i
+=
buffer
->
in_pos
-
old_pos
;
if
(
unlikely
(
buffer
->
in_pos
==
end
))
i
+=
context
->
buffer
->
in_pos
-
old_pos
;
if
(
unlikely
(
context
->
buffer
->
in_pos
==
end
))
return
true
;
if
(
!
done
)
...
...
@@ -238,7 +243,7 @@ static inline bool apply_lookup (APPLY_ARG_DEF,
{
not_applied:
/* No lookup applied for this index */
_hb_buffer_next_glyph
(
buffer
);
_hb_buffer_next_glyph
(
context
->
buffer
);
i
++
;
}
}
...
...
@@ -522,9 +527,9 @@ static inline bool chain_context_lookup (APPLY_ARG_DEF,
ChainContextLookupContext
&
lookup_context
)
{
/* First guess */
if
(
unlikely
(
buffer
->
out_pos
<
backtrackCount
||
buffer
->
in_pos
+
inputCount
+
lookaheadCount
>
buffer
->
in_length
||
inputCount
+
lookaheadCount
>
context_length
))
if
(
unlikely
(
context
->
buffer
->
out_pos
<
backtrackCount
||
context
->
buffer
->
in_pos
+
inputCount
+
lookaheadCount
>
context
->
buffer
->
in_length
||
inputCount
+
lookaheadCount
>
context_length
))
return
false
;
unsigned
int
offset
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录