Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
060e6b4a
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看板
提交
060e6b4a
编写于
6月 05, 2018
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update to Unicode 11.0.0
UCDN is not updated yet.
上级
105a3b5e
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
170 addition
and
84 deletion
+170
-84
src/gen-use-table.py
src/gen-use-table.py
+8
-5
src/hb-common.cc
src/hb-common.cc
+5
-0
src/hb-common.h
src/hb-common.h
+11
-0
src/hb-ot-shape-complex-arabic-table.hh
src/hb-ot-shape-complex-arabic-table.hh
+35
-8
src/hb-ot-shape-complex-indic-table.cc
src/hb-ot-shape-complex-indic-table.cc
+40
-37
src/hb-ot-shape-complex-private.hh
src/hb-ot-shape-complex-private.hh
+9
-0
src/hb-ot-shape-complex-use-machine.rl
src/hb-ot-shape-complex-use-machine.rl
+1
-1
src/hb-ot-shape-complex-use-table.cc
src/hb-ot-shape-complex-use-table.cc
+61
-33
未找到文件。
src/gen-use-table.py
浏览文件 @
060e6b4a
...
...
@@ -95,6 +95,7 @@ property_names = [
'Consonant_Medial'
,
'Consonant_Final'
,
'Consonant_Head_Letter'
,
'Consonant_Initial_Postfixed'
,
'Modifying_Letter'
,
'Tone_Letter'
,
'Tone_Mark'
,
...
...
@@ -154,7 +155,8 @@ globals().update(property_values)
def
is_BASE
(
U
,
UISC
,
UGC
):
return
(
UISC
in
[
Number
,
Consonant
,
Consonant_Head_Letter
,
# Consonant_Initial_Postfixed is new in Unicode 11; not in the spec.
return
(
UISC
in
[
Number
,
Consonant
,
Consonant_Initial_Postfixed
,
Consonant_Head_Letter
,
#SPEC-DRAFT Consonant_Placeholder,
Tone_Letter
,
Vowel_Independent
#SPEC-DRAFT
...
...
@@ -164,7 +166,7 @@ def is_BASE(U, UISC, UGC):
def
is_BASE_IND
(
U
,
UISC
,
UGC
):
#SPEC-DRAFT return (UISC in [Consonant_Dead, Modifying_Letter] or UGC == Po)
return
(
UISC
in
[
Consonant_Dead
,
Modifying_Letter
]
or
(
UGC
==
Po
and
not
U
in
[
0x104E
,
0x2022
,
0x11A3F
,
0x11A45
])
or
(
UGC
==
Po
and
not
U
in
[
0x104
B
,
0x104
E
,
0x2022
,
0x11A3F
,
0x11A45
])
or
False
# SPEC-DRAFT-OUTDATED! U == 0x002D
)
def
is_BASE_NUM
(
U
,
UISC
,
UGC
):
...
...
@@ -334,17 +336,18 @@ def map_to_use(data):
# TODO: These should die, but have UIPC in Unicode 8.0
if
U
in
[
0x953
,
0x954
]:
UIPC
=
Not_Applicable
# TODO: In USE's override list but not in Unicode
8
.0
# TODO: In USE's override list but not in Unicode
11
.0
if
U
==
0x103C
:
UIPC
=
Left
# TODO: These are not in USE's override list that we have, nor are they in Unicode
8
.0
# TODO: These are not in USE's override list that we have, nor are they in Unicode
11
.0
if
0xA926
<=
U
<=
0xA92A
:
UIPC
=
Top
if
U
==
0x111CA
:
UIPC
=
Bottom
if
U
==
0x11300
:
UIPC
=
Top
if
U
==
0x1133C
:
UIPC
=
Bottom
if
U
==
0x1171E
:
UIPC
=
Left
# Correct?!
if
0x1CF2
<=
U
<=
0x1CF3
:
UIPC
=
Right
if
0x1CF8
<=
U
<=
0x1CF9
:
UIPC
=
Top
# https://github.com/roozbehp/unicode-data/issues/8
if
U
==
0x0A51
:
UIPC
=
Bottom
assert
(
UIPC
in
[
Not_Applicable
,
Visual_Order_Left
]
or
USE
in
use_positions
),
"%s %s %s %s %s"
%
(
hex
(
U
),
UIPC
,
USE
,
UISC
,
UGC
)
...
...
src/hb-common.cc
浏览文件 @
060e6b4a
...
...
@@ -535,6 +535,11 @@ hb_script_get_horizontal_direction (hb_script_t script)
/* Unicode-9.0 additions */
case
HB_SCRIPT_ADLAM
:
/* Unicode-11.0 additions */
case
HB_SCRIPT_HANIFI_ROHINGYA
:
case
HB_SCRIPT_OLD_SOGDIAN
:
case
HB_SCRIPT_SOGDIAN
:
return
HB_DIRECTION_RTL
;
...
...
src/hb-common.h
浏览文件 @
060e6b4a
...
...
@@ -325,6 +325,17 @@ typedef enum
/*10.0*/
HB_SCRIPT_SOYOMBO
=
HB_TAG
(
'S'
,
'o'
,
'y'
,
'o'
),
/*10.0*/
HB_SCRIPT_ZANABAZAR_SQUARE
=
HB_TAG
(
'Z'
,
'a'
,
'n'
,
'b'
),
/*
* Since 1.8.0
*/
/*11.0*/
HB_SCRIPT_DOGRA
=
HB_TAG
(
'D'
,
'o'
,
'g'
,
'r'
),
/*11.0*/
HB_SCRIPT_GUNJALA_GONDI
=
HB_TAG
(
'G'
,
'o'
,
'n'
,
'g'
),
/*11.0*/
HB_SCRIPT_HANIFI_ROHINGYA
=
HB_TAG
(
'R'
,
'o'
,
'h'
,
'g'
),
/*11.0*/
HB_SCRIPT_MAKASAR
=
HB_TAG
(
'M'
,
'a'
,
'k'
,
'a'
),
/*11.0*/
HB_SCRIPT_MEDEFAIDRIN
=
HB_TAG
(
'M'
,
'e'
,
'd'
,
'f'
),
/*11.0*/
HB_SCRIPT_OLD_SOGDIAN
=
HB_TAG
(
'S'
,
'o'
,
'g'
,
'o'
),
/*11.0*/
HB_SCRIPT_SOGDIAN
=
HB_TAG
(
'S'
,
'o'
,
'g'
,
'd'
),
/* No script set. */
HB_SCRIPT_INVALID
=
HB_TAG_NONE
,
...
...
src/hb-ot-shape-complex-arabic-table.hh
浏览文件 @
060e6b4a
...
...
@@ -6,10 +6,10 @@
*
* on files with these headers:
*
* # ArabicShaping-1
0
.0.0.txt
* # Date: 201
7-02-16, 00:00:00 GMT [RP, KW
]
* # Blocks-1
0
.0.0.txt
* # Date: 2017-
04-12, 17:30
:00 GMT [KW]
* # ArabicShaping-1
1
.0.0.txt
* # Date: 201
8-02-21, 14:50:00 GMT [KW, RP
]
* # Blocks-1
1
.0.0.txt
* # Date: 2017-
10-16, 24:39
:00 GMT [KW]
* UnicodeData.txt does not have a header.
*/
...
...
@@ -45,7 +45,7 @@ static const uint8_t joining_table[] =
/* Syriac */
/* 0700 */
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
A
,
X
,
D
,
D
,
D
,
DR
,
DR
,
R
,
R
,
R
,
D
,
D
,
D
,
D
,
R
,
D
,
/* 0700 */
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
T
,
A
,
X
,
D
,
D
,
D
,
DR
,
DR
,
R
,
R
,
R
,
D
,
D
,
D
,
D
,
R
,
D
,
/* 0720 */
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
R
,
D
,
DR
,
D
,
R
,
D
,
D
,
DR
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
/* 0740 */
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
R
,
D
,
D
,
...
...
@@ -91,7 +91,7 @@ static const uint8_t joining_table[] =
/* 1800 */
U
,
D
,
X
,
X
,
C
,
X
,
X
,
X
,
U
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
/* 1820 */
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
/* 1840 */
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
/* 1860 */
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
/* 1860 */
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
/* 1880 */
U
,
U
,
U
,
U
,
U
,
T
,
T
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
/* 18A0 */
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
X
,
D
,
...
...
@@ -125,7 +125,28 @@ static const uint8_t joining_table[] =
/* 10B80 */
D
,
R
,
D
,
R
,
R
,
R
,
D
,
D
,
D
,
R
,
D
,
D
,
R
,
D
,
R
,
R
,
D
,
R
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
/* 10BA0 */
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
R
,
R
,
R
,
R
,
D
,
D
,
U
,
#define joining_offset_0x1e900u 1146
#define joining_offset_0x10d00u 1146
/* Hanifi Rohingya */
/* 10D00 */
L
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
/* 10D20 */
D
,
D
,
R
,
D
,
#define joining_offset_0x10f30u 1182
/* Sogdian */
/* 10F20 */
D
,
D
,
D
,
R
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
/* 10F40 */
D
,
D
,
D
,
D
,
D
,
U
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
D
,
D
,
D
,
R
,
#define joining_offset_0x110bdu 1219
/* Kaithi */
/* 110A0 */
U
,
X
,
X
,
/* 110C0 */
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
X
,
U
,
#define joining_offset_0x1e900u 1236
/* Adlam */
...
...
@@ -133,7 +154,7 @@ static const uint8_t joining_table[] =
/* 1E920 */
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
D
,
/* 1E940 */
D
,
D
,
D
,
D
,
};
/* Table items: 1
214; occupancy: 55
% */
};
/* Table items: 1
304; occupancy: 56
% */
static
unsigned
int
...
...
@@ -160,6 +181,12 @@ joining_type (hb_codepoint_t u)
case
0x10u
:
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x10AC0u
,
0x10AEFu
))
return
joining_table
[
u
-
0x10AC0u
+
joining_offset_0x10ac0u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x10B80u
,
0x10BAFu
))
return
joining_table
[
u
-
0x10B80u
+
joining_offset_0x10b80u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x10D00u
,
0x10D23u
))
return
joining_table
[
u
-
0x10D00u
+
joining_offset_0x10d00u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x10F30u
,
0x10F54u
))
return
joining_table
[
u
-
0x10F30u
+
joining_offset_0x10f30u
];
break
;
case
0x11u
:
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x110BDu
,
0x110CDu
))
return
joining_table
[
u
-
0x110BDu
+
joining_offset_0x110bdu
];
break
;
case
0x1Eu
:
...
...
src/hb-ot-shape-complex-indic-table.cc
浏览文件 @
060e6b4a
...
...
@@ -6,62 +6,63 @@
*
* on files with these headers:
*
* # IndicSyllabicCategory-1
0
.0.0.txt
* # Date: 201
7-05-31, 01:07
:00 GMT [KW, RP]
* # IndicPositionalCategory-1
0
.0.0.txt
* # Date: 201
7-05-31, 01:07:00 GMT [
RP]
* # Blocks-1
0
.0.0.txt
* # Date: 2017-
04-12, 17:30
:00 GMT [KW]
* # IndicSyllabicCategory-1
1
.0.0.txt
* # Date: 201
8-05-21, 18:33
:00 GMT [KW, RP]
* # IndicPositionalCategory-1
1
.0.0.txt
* # Date: 201
8-02-05, 16:21:00 GMT [KW,
RP]
* # Blocks-1
1
.0.0.txt
* # Date: 2017-
10-16, 24:39
:00 GMT [KW]
*/
#include "hb-ot-shape-complex-indic-private.hh"
#define ISC_A INDIC_SYLLABIC_CATEGORY_AVAGRAHA
/* 1
5
chars; Avagraha */
#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU
/* 8
0
chars; Bindu */
#define ISC_A INDIC_SYLLABIC_CATEGORY_AVAGRAHA
/* 1
6
chars; Avagraha */
#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU
/* 8
3
chars; Bindu */
#define ISC_BJN INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER
/* 20 chars; Brahmi_Joining_Number */
#define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK
/* 5
7
chars; Cantillation_Mark */
#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT
/* 2
024
chars; Consonant */
#define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK
/* 5
8
chars; Cantillation_Mark */
#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT
/* 2
110
chars; Consonant */
#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD
/* 10 chars; Consonant_Dead */
#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL
/* 6
8
chars; Consonant_Final */
#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL
/* 6
7
chars; Consonant_Final */
#define ISC_CHL INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER
/* 5 chars; Consonant_Head_Letter */
#define ISC_CIP INDIC_SYLLABIC_CATEGORY_CONSONANT_INITIAL_POSTFIXED
/* 1 chars; Consonant_Initial_Postfixed */
#define ISC_CK INDIC_SYLLABIC_CATEGORY_CONSONANT_KILLER
/* 2 chars; Consonant_Killer */
#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL
/* 2
7
chars; Consonant_Medial */
#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER
/*
18
chars; Consonant_Placeholder */
#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL
/* 2
8
chars; Consonant_Medial */
#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER
/*
21
chars; Consonant_Placeholder */
#define ISC_CPR INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA
/* 2 chars; Consonant_Preceding_Repha */
#define ISC_CPrf INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED
/* 7 chars; Consonant_Prefixed */
#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED
/* 95 chars; Consonant_Subjoined */
#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA
/*
5
chars; Consonant_Succeeding_Repha */
#define ISC_CWS INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER
/*
4
chars; Consonant_With_Stacker */
#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA
/*
4
chars; Consonant_Succeeding_Repha */
#define ISC_CWS INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER
/*
6
chars; Consonant_With_Stacker */
#define ISC_GM INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK
/* 3 chars; Gemination_Mark */
#define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER
/* 1
0
chars; Invisible_Stacker */
#define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER
/* 1
1
chars; Invisible_Stacker */
#define ISC_ZWJ INDIC_SYLLABIC_CATEGORY_JOINER
/* 1 chars; Joiner */
#define ISC_ML INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER
/* 1 chars; Modifying_Letter */
#define ISC_ZWNJ INDIC_SYLLABIC_CATEGORY_NON_JOINER
/* 1 chars; Non_Joiner */
#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA
/*
28
chars; Nukta */
#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER
/* 4
69
chars; Number */
#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA
/*
30
chars; Nukta */
#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER
/* 4
80
chars; Number */
#define ISC_NJ INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER
/* 1 chars; Number_Joiner */
#define ISC_x INDIC_SYLLABIC_CATEGORY_OTHER
/* 1 chars; Other */
#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER
/* 21 chars; Pure_Killer */
#define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER
/* 2 chars; Register_Shifter */
#define ISC_SM INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER
/* 2
2
chars; Syllable_Modifier */
#define ISC_SM INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER
/* 2
5
chars; Syllable_Modifier */
#define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER
/* 7 chars; Tone_Letter */
#define ISC_TM INDIC_SYLLABIC_CATEGORY_TONE_MARK
/* 42 chars; Tone_Mark */
#define ISC_V INDIC_SYLLABIC_CATEGORY_VIRAMA
/* 2
4
chars; Virama */
#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA
/* 3
4
chars; Visarga */
#define ISC_V INDIC_SYLLABIC_CATEGORY_VIRAMA
/* 2
5
chars; Virama */
#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA
/* 3
6
chars; Visarga */
#define ISC_Vo INDIC_SYLLABIC_CATEGORY_VOWEL
/* 30 chars; Vowel */
#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT
/* 6
33
chars; Vowel_Dependent */
#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT
/* 4
43
chars; Vowel_Independent */
#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT
/* 6
60
chars; Vowel_Dependent */
#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT
/* 4
64
chars; Vowel_Independent */
#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM
/* 3
3
0 chars; Bottom */
#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM
/* 3
4
0 chars; Bottom */
#define IMC_BL INDIC_MATRA_CATEGORY_BOTTOM_AND_LEFT
/* 1 chars; Bottom_And_Left */
#define IMC_BR INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT
/* 2 chars; Bottom_And_Right */
#define IMC_L INDIC_MATRA_CATEGORY_LEFT
/* 5
7
chars; Left */
#define IMC_L INDIC_MATRA_CATEGORY_LEFT
/* 5
9
chars; Left */
#define IMC_LR INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT
/* 21 chars; Left_And_Right */
#define IMC_x INDIC_MATRA_CATEGORY_NOT_APPLICABLE
/* 1 chars; Not_Applicable */
#define IMC_O INDIC_MATRA_CATEGORY_OVERSTRUCK
/* 10 chars; Overstruck */
#define IMC_R INDIC_MATRA_CATEGORY_RIGHT
/* 2
62
chars; Right */
#define IMC_T INDIC_MATRA_CATEGORY_TOP
/* 3
80
chars; Top */
#define IMC_R INDIC_MATRA_CATEGORY_RIGHT
/* 2
76
chars; Right */
#define IMC_T INDIC_MATRA_CATEGORY_TOP
/* 3
93
chars; Top */
#define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM
/* 10 chars; Top_And_Bottom */
#define IMC_TBR INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT
/* 1 chars; Top_And_Bottom_And_Right */
#define IMC_TL INDIC_MATRA_CATEGORY_TOP_AND_LEFT
/* 6 chars; Top_And_Left */
...
...
@@ -119,7 +120,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* Bengali */
/* 0980 */
_
(
x
,
x
),
_
(
Bi
,
T
),
_
(
Bi
,
R
),
_
(
Vs
,
R
),
_
(
x
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
/* 0980 */
_
(
CP
,
x
),
_
(
Bi
,
T
),
_
(
Bi
,
R
),
_
(
Vs
,
R
),
_
(
x
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
/* 0988 */
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
VI
,
x
),
/* 0990 */
_
(
VI
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
/* 0998 */
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
...
...
@@ -134,7 +135,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 09E0 */
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
M
,
B
),
_
(
M
,
B
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
/* 09E8 */
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
/* 09F0 */
_
(
C
,
x
),
_
(
C
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
/* 09F8 */
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
Bi
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
/* 09F8 */
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
Bi
,
x
),
_
(
x
,
x
),
_
(
SM
,
T
),
_
(
x
,
x
),
/* Gurmukhi */
...
...
@@ -148,7 +149,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0A38 */
_
(
C
,
x
),
_
(
C
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
N
,
B
),
_
(
x
,
x
),
_
(
M
,
R
),
_
(
M
,
L
),
/* 0A40 */
_
(
M
,
R
),
_
(
M
,
B
),
_
(
M
,
B
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
M
,
T
),
/* 0A48 */
_
(
M
,
T
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
M
,
T
),
_
(
M
,
T
),
_
(
V
,
B
),
_
(
x
,
x
),
_
(
x
,
x
),
/* 0A50 */
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
/* 0A50 */
_
(
x
,
x
),
_
(
Ca
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
/* 0A58 */
_
(
x
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
x
,
x
),
_
(
C
,
x
),
_
(
x
,
x
),
/* 0A60 */
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
/* 0A68 */
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
...
...
@@ -214,7 +215,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* Telugu */
/* 0C00 */
_
(
Bi
,
T
),
_
(
Bi
,
R
),
_
(
Bi
,
R
),
_
(
Vs
,
R
),
_
(
x
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
/* 0C00 */
_
(
Bi
,
T
),
_
(
Bi
,
R
),
_
(
Bi
,
R
),
_
(
Vs
,
R
),
_
(
Bi
,
T
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
/* 0C08 */
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
x
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
/* 0C10 */
_
(
VI
,
x
),
_
(
x
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
/* 0C18 */
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
...
...
@@ -301,7 +302,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1030 */
_
(
M
,
B
),
_
(
M
,
L
),
_
(
M
,
T
),
_
(
M
,
T
),
_
(
M
,
T
),
_
(
M
,
T
),
_
(
Bi
,
T
),
_
(
TM
,
B
),
/* 1038 */
_
(
Vs
,
R
),
_
(
IS
,
x
),
_
(
PK
,
T
),
_
(
CM
,
R
),
_
(
CM
,
x
),
_
(
CM
,
B
),
_
(
CM
,
B
),
_
(
C
,
x
),
/* 1040 */
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
/* 1048 */
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
CP
,
x
),
_
(
x
,
x
),
/* 1048 */
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
x
,
x
),
_
(
CP
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
CP
,
x
),
_
(
x
,
x
),
/* 1050 */
_
(
C
,
x
),
_
(
C
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
VI
,
x
),
_
(
M
,
R
),
_
(
M
,
R
),
/* 1058 */
_
(
M
,
B
),
_
(
M
,
B
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
CM
,
B
),
_
(
CM
,
B
),
/* 1060 */
_
(
CM
,
B
),
_
(
C
,
x
),
_
(
M
,
R
),
_
(
TM
,
R
),
_
(
TM
,
R
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
M
,
R
),
...
...
@@ -342,7 +343,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1CD8 */
_
(
Ca
,
B
),
_
(
Ca
,
B
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
B
),
_
(
Ca
,
B
),
_
(
Ca
,
B
),
_
(
Ca
,
B
),
/* 1CE0 */
_
(
Ca
,
T
),
_
(
Ca
,
R
),
_
(
x
,
O
),
_
(
x
,
O
),
_
(
x
,
O
),
_
(
x
,
O
),
_
(
x
,
O
),
_
(
x
,
O
),
/* 1CE8 */
_
(
x
,
O
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
B
),
_
(
x
,
x
),
_
(
x
,
x
),
/* 1CF0 */
_
(
x
,
x
),
_
(
x
,
x
),
_
(
Vs
,
x
),
_
(
Vs
,
x
),
_
(
Ca
,
T
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
Ca
,
R
),
/* 1CF0 */
_
(
x
,
x
),
_
(
x
,
x
),
_
(
Vs
,
x
),
_
(
Vs
,
x
),
_
(
Ca
,
T
),
_
(
CWS
,
x
),
_
(
CWS
,
x
),
_
(
Ca
,
R
),
/* 1CF8 */
_
(
Ca
,
x
),
_
(
Ca
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
#define indic_offset_0x2008u 1656
...
...
@@ -370,8 +371,9 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A8E0 */
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
/* A8E8 */
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Ca
,
T
),
/* A8F0 */
_
(
Ca
,
T
),
_
(
Ca
,
T
),
_
(
Bi
,
x
),
_
(
Bi
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
/* A8F8 */
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
x
,
x
),
_
(
VI
,
x
),
_
(
M
,
T
),
#define indic_offset_0xa9e0u 172
0
#define indic_offset_0xa9e0u 172
8
/* Myanmar Extended-B */
...
...
@@ -381,7 +383,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A9F0 */
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
Nd
,
x
),
/* A9F8 */
_
(
Nd
,
x
),
_
(
Nd
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
x
,
x
),
#define indic_offset_0xaa60u 17
52
#define indic_offset_0xaa60u 17
60
/* Myanmar Extended-A */
...
...
@@ -391,7 +393,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* AA70 */
_
(
x
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
C
,
x
),
_
(
CP
,
x
),
_
(
CP
,
x
),
_
(
CP
,
x
),
_
(
x
,
x
),
/* AA78 */
_
(
x
,
x
),
_
(
x
,
x
),
_
(
C
,
x
),
_
(
TM
,
R
),
_
(
TM
,
T
),
_
(
TM
,
R
),
_
(
C
,
x
),
_
(
C
,
x
),
};
/* Table items: 17
84
; occupancy: 70% */
};
/* Table items: 17
92
; occupancy: 70% */
INDIC_TABLE_ELEMENT_TYPE
hb_indic_get_categories
(
hb_codepoint_t
u
)
...
...
@@ -418,7 +420,7 @@ hb_indic_get_categories (hb_codepoint_t u)
break
;
case
0xAu
:
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0xA8E0u
,
0xA8F
7
u
))
return
indic_table
[
u
-
0xA8E0u
+
indic_offset_0xa8e0u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0xA8E0u
,
0xA8F
F
u
))
return
indic_table
[
u
-
0xA8E0u
+
indic_offset_0xa8e0u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0xA9E0u
,
0xA9FFu
))
return
indic_table
[
u
-
0xA9E0u
+
indic_offset_0xa9e0u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0xAA60u
,
0xAA7Fu
))
return
indic_table
[
u
-
0xAA60u
+
indic_offset_0xaa60u
];
break
;
...
...
@@ -438,6 +440,7 @@ hb_indic_get_categories (hb_codepoint_t u)
#undef ISC_CD
#undef ISC_CF
#undef ISC_CHL
#undef ISC_CIP
#undef ISC_CK
#undef ISC_CM
#undef ISC_CP
...
...
src/hb-ot-shape-complex-private.hh
浏览文件 @
060e6b4a
...
...
@@ -205,6 +205,10 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
/* Unicode-9.0 additions */
case
HB_SCRIPT_ADLAM
:
/* Unicode-11.0 additions */
case
HB_SCRIPT_HANIFI_ROHINGYA
:
case
HB_SCRIPT_SOGDIAN
:
/* For Arabic script, use the Arabic shaper even if no OT script tag was found.
* This is because we do fallback shaping for Arabic script (and not others).
* But note that Arabic shaping is applicable only to horizontal layout; for
...
...
@@ -380,6 +384,11 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
case
HB_SCRIPT_SOYOMBO
:
case
HB_SCRIPT_ZANABAZAR_SQUARE
:
/* Unicode-11.0 additions */
case
HB_SCRIPT_DOGRA
:
case
HB_SCRIPT_GUNJALA_GONDI
:
case
HB_SCRIPT_MAKASAR
:
/* If the designer designed the font for the 'DFLT' script,
* (or we ended up arbitrarily pick 'latn'), use the default shaper.
* Otherwise, use the specific shaper.
...
...
src/hb-ot-shape-complex-use-machine.rl
浏览文件 @
060e6b4a
...
...
@@ -89,7 +89,7 @@ SMBlw = 42; # SYM_MOD_BELOW
CS = 43; # CONS_WITH_STACKER
# Override: Ad
j
oc ZWJ placement. https://github.com/harfbuzz/harfbuzz/issues/542#issuecomment-353169729
# Override: Ad
h
oc ZWJ placement. https://github.com/harfbuzz/harfbuzz/issues/542#issuecomment-353169729
consonant_modifiers = CMAbv* CMBlw* ((ZWJ?.H.ZWJ? B | SUB) VS? CMAbv? CMBlw*)*;
# Override: Allow two MBlw. https://github.com/harfbuzz/harfbuzz/issues/376
medial_consonants = MPre? MAbv? MBlw?.MBlw? MPst?;
...
...
src/hb-ot-shape-complex-use-table.cc
浏览文件 @
060e6b4a
...
...
@@ -6,12 +6,12 @@
*
* on files with these headers:
*
* # IndicSyllabicCategory-1
0
.0.0.txt
* # Date: 201
7-05-31, 01:07
:00 GMT [KW, RP]
* # IndicPositionalCategory-1
0
.0.0.txt
* # Date: 201
7-05-31, 01:07:00 GMT [
RP]
* # Blocks-1
0
.0.0.txt
* # Date: 2017-
04-12, 17:30
:00 GMT [KW]
* # IndicSyllabicCategory-1
1
.0.0.txt
* # Date: 201
8-05-21, 18:33
:00 GMT [KW, RP]
* # IndicPositionalCategory-1
1
.0.0.txt
* # Date: 201
8-02-05, 16:21:00 GMT [KW,
RP]
* # Blocks-1
1
.0.0.txt
* # Date: 2017-
10-16, 24:39
:00 GMT [KW]
* UnicodeData.txt does not have a header.
*/
...
...
@@ -97,14 +97,14 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* Bengali */
/* 0980 */
O
,
VMAbv
,
VMPst
,
VMPst
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
B
,
/* 0980 */
GB
,
VMAbv
,
VMPst
,
VMPst
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
B
,
/* 0990 */
B
,
O
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 09A0 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 09B0 */
B
,
O
,
B
,
O
,
O
,
O
,
B
,
B
,
B
,
B
,
O
,
O
,
CMBlw
,
B
,
VPst
,
VPre
,
/* 09C0 */
VPst
,
VBlw
,
VBlw
,
VBlw
,
VBlw
,
O
,
O
,
VPre
,
VPre
,
O
,
O
,
VPre
,
VPre
,
H
,
IND
,
O
,
/* 09D0 */
O
,
O
,
O
,
O
,
O
,
O
,
O
,
VPst
,
O
,
O
,
O
,
O
,
B
,
B
,
O
,
B
,
/* 09E0 */
B
,
B
,
VBlw
,
VBlw
,
O
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 09F0 */
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
B
,
O
,
O
,
O
,
/* 09F0 */
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
B
,
O
,
FM
,
O
,
/* Gurmukhi */
...
...
@@ -113,7 +113,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 0A20 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 0A30 */
B
,
O
,
B
,
B
,
O
,
B
,
B
,
O
,
B
,
B
,
O
,
O
,
CMBlw
,
O
,
VPst
,
VPre
,
/* 0A40 */
VPst
,
VBlw
,
VBlw
,
O
,
O
,
O
,
O
,
VAbv
,
VAbv
,
O
,
O
,
VAbv
,
VAbv
,
H
,
O
,
O
,
/* 0A50 */
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
B
,
B
,
B
,
B
,
O
,
B
,
O
,
/* 0A50 */
O
,
VMBlw
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
B
,
B
,
B
,
B
,
O
,
B
,
O
,
/* 0A60 */
O
,
O
,
O
,
O
,
O
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 0A70 */
VMAbv
,
CMAbv
,
GB
,
GB
,
O
,
MBlw
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
...
...
@@ -152,7 +152,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* Telugu */
/* 0C00 */
VMAbv
,
VMPst
,
VMPst
,
VMPst
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
B
,
B
,
/* 0C00 */
VMAbv
,
VMPst
,
VMPst
,
VMPst
,
VMAbv
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
B
,
B
,
/* 0C10 */
B
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 0C20 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 0C30 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
B
,
VAbv
,
VAbv
,
...
...
@@ -203,7 +203,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1010 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 1020 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
VPst
,
VPst
,
VAbv
,
VAbv
,
VBlw
,
/* 1030 */
VBlw
,
VPre
,
VAbv
,
VAbv
,
VAbv
,
VAbv
,
VMAbv
,
VMBlw
,
VMPst
,
H
,
VAbv
,
MPst
,
MPre
,
MBlw
,
MBlw
,
B
,
/* 1040 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
GB
,
O
,
/* 1040 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
GB
,
O
,
O
,
GB
,
O
,
/* 1050 */
B
,
B
,
B
,
B
,
B
,
B
,
VPst
,
VPst
,
VBlw
,
VBlw
,
B
,
B
,
B
,
B
,
MBlw
,
MBlw
,
/* 1060 */
MBlw
,
B
,
VPst
,
VMPst
,
VMPst
,
B
,
B
,
VPst
,
VPst
,
VMPst
,
VMPst
,
VMPst
,
VMPst
,
VMPst
,
B
,
B
,
/* 1070 */
B
,
VAbv
,
VAbv
,
VAbv
,
VAbv
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
...
...
@@ -281,7 +281,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1A20 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 1A30 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 1A40 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 1A50 */
B
,
B
,
B
,
B
,
B
,
MPre
,
MBlw
,
SUB
,
FAbv
,
FAbv
,
FAbv
,
SUB
,
SUB
,
SUB
,
SUB
,
O
,
/* 1A50 */
B
,
B
,
B
,
B
,
B
,
MPre
,
MBlw
,
SUB
,
FAbv
,
FAbv
,
B
,
SUB
,
SUB
,
SUB
,
SUB
,
O
,
/* 1A60 */
H
,
VPst
,
VAbv
,
VPst
,
VPst
,
VAbv
,
VAbv
,
VAbv
,
VAbv
,
VBlw
,
VBlw
,
VAbv
,
VBlw
,
VPst
,
VPre
,
VPre
,
/* 1A70 */
VPre
,
VPre
,
VPre
,
VAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VAbv
,
FM
,
FM
,
O
,
O
,
FBlw
,
/* 1A80 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
...
...
@@ -330,7 +330,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1CD0 */
VMAbv
,
VMAbv
,
VMAbv
,
O
,
VMBlw
,
VMBlw
,
VMBlw
,
VMBlw
,
VMBlw
,
VMBlw
,
VMAbv
,
VMAbv
,
VMBlw
,
VMBlw
,
VMBlw
,
VMBlw
,
/* 1CE0 */
VMAbv
,
VMPst
,
VMBlw
,
VMBlw
,
VMBlw
,
VMBlw
,
VMBlw
,
VMBlw
,
VMBlw
,
O
,
O
,
O
,
O
,
VMBlw
,
O
,
O
,
/* 1CF0 */
O
,
O
,
VMPst
,
VMPst
,
VMAbv
,
O
,
O
,
VMPst
,
VMAbv
,
VMAbv
,
O
,
O
,
O
,
O
,
O
,
O
,
/* 1CF0 */
O
,
O
,
VMPst
,
VMPst
,
VMAbv
,
CS
,
CS
,
VMPst
,
VMAbv
,
VMAbv
,
O
,
O
,
O
,
O
,
O
,
O
,
#define use_offset_0x1df8u 2560
...
...
@@ -396,7 +396,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* Devanagari Extended */
/* A8E0 */
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
/* A8F0 */
VMAbv
,
VMAbv
,
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
/* A8F0 */
VMAbv
,
VMAbv
,
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
B
,
VAbv
,
/* Kayah Li */
...
...
@@ -479,10 +479,10 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 10A00 */
B
,
VBlw
,
VBlw
,
VBlw
,
O
,
VAbv
,
VBlw
,
O
,
O
,
O
,
O
,
O
,
VBlw
,
VBlw
,
VMBlw
,
VMAbv
,
/* 10A10 */
B
,
B
,
B
,
B
,
O
,
B
,
B
,
B
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 10A20 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 10A30 */
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
CMAbv
,
CMBlw
,
CMBlw
,
O
,
O
,
O
,
O
,
H
,
/* 10A40 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 10A30 */
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
CMAbv
,
CMBlw
,
CMBlw
,
O
,
O
,
O
,
O
,
H
,
/* 10A40 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
#define use_offset_0x11000u 35
52
#define use_offset_0x11000u 35
60
/* Brahmi */
...
...
@@ -503,7 +503,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 110A0 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 110B0 */
VPst
,
VPre
,
VPst
,
VBlw
,
VBlw
,
VAbv
,
VAbv
,
VPst
,
VPst
,
H
,
CMBlw
,
O
,
O
,
O
,
O
,
O
,
#define use_offset_0x11100u 37
44
#define use_offset_0x11100u 37
52
/* Chakma */
...
...
@@ -512,7 +512,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11110 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11120 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
VAbv
,
VAbv
,
VAbv
,
VBlw
,
VBlw
,
VPre
,
VAbv
,
VAbv
,
VAbv
,
/* 11130 */
VAbv
,
VBlw
,
VBlw
,
H
,
VAbv
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11140 */
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
/* 11140 */
O
,
O
,
O
,
O
,
B
,
VPst
,
VPst
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
/* Mahajani */
...
...
@@ -526,7 +526,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11190 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 111A0 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 111B0 */
B
,
B
,
B
,
VPst
,
VPre
,
VPst
,
VBlw
,
VBlw
,
VBlw
,
VBlw
,
VBlw
,
VBlw
,
VAbv
,
VAbv
,
VAbv
,
VAbv
,
/* 111C0 */
H
,
B
,
R
,
R
,
O
,
O
,
O
,
O
,
O
,
O
,
CMBlw
,
VAbv
,
VBlw
,
O
,
O
,
O
,
/* 111C0 */
H
,
B
,
R
,
R
,
O
,
O
,
O
,
O
,
O
,
FM
,
CMBlw
,
VAbv
,
VBlw
,
O
,
O
,
O
,
/* 111D0 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
/* Sinhala Archaic Numbers */
...
...
@@ -541,7 +541,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11220 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
VPst
,
VPst
,
VPst
,
VBlw
,
/* 11230 */
VAbv
,
VAbv
,
VAbv
,
VAbv
,
VMAbv
,
H
,
CMAbv
,
CMAbv
,
O
,
O
,
O
,
O
,
O
,
O
,
VMAbv
,
O
,
#define use_offset_0x11280u 40
64
#define use_offset_0x11280u 40
72
/* Multani */
...
...
@@ -563,13 +563,13 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11300 */
VMAbv
,
VMAbv
,
VMPst
,
VMPst
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
B
,
/* 11310 */
B
,
O
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11320 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11330 */
B
,
O
,
B
,
B
,
O
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
CMBlw
,
B
,
VPst
,
VPst
,
/* 11330 */
B
,
O
,
B
,
B
,
O
,
B
,
B
,
B
,
B
,
B
,
O
,
CMBlw
,
CMBlw
,
B
,
VPst
,
VPst
,
/* 11340 */
VAbv
,
VPst
,
VPst
,
VPst
,
VPst
,
O
,
O
,
VPre
,
VPre
,
O
,
O
,
VPre
,
VPre
,
H
,
O
,
O
,
/* 11350 */
O
,
O
,
O
,
O
,
O
,
O
,
O
,
VPst
,
O
,
O
,
O
,
O
,
O
,
O
,
B
,
B
,
/* 11360 */
B
,
B
,
VPst
,
VPst
,
O
,
O
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
O
,
O
,
O
,
/* 11370 */
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
VMAbv
,
O
,
O
,
O
,
#define use_offset_0x11400u 43
12
#define use_offset_0x11400u 43
20
/* Newa */
...
...
@@ -579,7 +579,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11420 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11430 */
B
,
B
,
B
,
B
,
B
,
VPst
,
VPre
,
VPst
,
VBlw
,
VBlw
,
VBlw
,
VBlw
,
VBlw
,
VBlw
,
VAbv
,
VAbv
,
/* 11440 */
VPst
,
VPst
,
H
,
VMAbv
,
VMAbv
,
VMPst
,
CMBlw
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
/* 11450 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
/* 11450 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
FM
,
O
,
/* 11460 */
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
/* 11470 */
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
...
...
@@ -592,7 +592,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 114C0 */
VMAbv
,
VMPst
,
H
,
CMBlw
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
/* 114D0 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
#define use_offset_0x11580u 45
36
#define use_offset_0x11580u 45
44
/* Siddham */
...
...
@@ -631,11 +631,21 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* Ahom */
/* 11700 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11710 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
MBlw
,
MPre
,
MAbv
,
/* 11710 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
MBlw
,
MPre
,
MAbv
,
/* 11720 */
VPst
,
VPst
,
VAbv
,
VAbv
,
VBlw
,
VBlw
,
VPre
,
VAbv
,
VBlw
,
VAbv
,
VAbv
,
VAbv
,
O
,
O
,
O
,
O
,
/* 11730 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
#define use_offset_0x11a00u 4984
#define use_offset_0x11800u 4992
/* Dogra */
/* 11800 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11810 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11820 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
VPst
,
VPre
,
VPst
,
VBlw
,
/* 11830 */
VBlw
,
VBlw
,
VBlw
,
VAbv
,
VAbv
,
VAbv
,
VAbv
,
VMAbv
,
VMPst
,
H
,
CMBlw
,
O
,
O
,
O
,
O
,
O
,
#define use_offset_0x11a00u 5056
/* Zanabazar Square */
...
...
@@ -652,9 +662,9 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11A60 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11A70 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11A80 */
B
,
B
,
B
,
B
,
O
,
O
,
R
,
R
,
R
,
R
,
FBlw
,
FBlw
,
FBlw
,
FBlw
,
FBlw
,
FBlw
,
/* 11A90 */
FBlw
,
FBlw
,
FBlw
,
FBlw
,
FBlw
,
FBlw
,
VMAbv
,
VMPst
,
CMAbv
,
H
,
O
,
O
,
O
,
O
,
O
,
O
,
/* 11A90 */
FBlw
,
FBlw
,
FBlw
,
FBlw
,
FBlw
,
FBlw
,
VMAbv
,
VMPst
,
CMAbv
,
H
,
O
,
O
,
O
,
B
,
O
,
O
,
#define use_offset_0x11c00u 5
144
#define use_offset_0x11c00u 5
216
/* Bhaiksuki */
...
...
@@ -675,7 +685,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11CA0 */
SUB
,
SUB
,
SUB
,
SUB
,
SUB
,
SUB
,
SUB
,
SUB
,
O
,
SUB
,
SUB
,
SUB
,
SUB
,
SUB
,
SUB
,
SUB
,
/* 11CB0 */
VBlw
,
VPre
,
VBlw
,
VAbv
,
VPst
,
VMAbv
,
VMAbv
,
O
,
#define use_offset_0x11d00u 5
328
#define use_offset_0x11d00u 5
400
/* Masaram Gondi */
...
...
@@ -687,7 +697,23 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11D40 */
VMAbv
,
VMAbv
,
CMBlw
,
VAbv
,
VBlw
,
H
,
R
,
MBlw
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
/* 11D50 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
};
/* Table items: 5424; occupancy: 73% */
/* Gunjala Gondi */
/* 11D60 */
B
,
B
,
B
,
B
,
B
,
B
,
O
,
B
,
B
,
O
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11D70 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11D80 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
VPst
,
VPst
,
VPst
,
VPst
,
VPst
,
O
,
/* 11D90 */
VAbv
,
VAbv
,
O
,
VPst
,
VPst
,
VMAbv
,
VMPst
,
H
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
O
,
/* 11DA0 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
O
,
O
,
O
,
O
,
O
,
O
,
#define use_offset_0x11ee0u 5576
/* Makasar */
/* 11EE0 */
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
B
,
/* 11EF0 */
B
,
B
,
GB
,
VAbv
,
VBlw
,
VPre
,
VPst
,
O
,
};
/* Table items: 5600; occupancy: 73% */
USE_TABLE_ELEMENT_TYPE
hb_use_get_category
(
hb_codepoint_t
u
)
...
...
@@ -727,7 +753,7 @@ hb_use_get_category (hb_codepoint_t u)
break
;
case
0x10u
:
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x10A00u
,
0x10A4
7
u
))
return
use_table
[
u
-
0x10A00u
+
use_offset_0x10a00u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x10A00u
,
0x10A4
F
u
))
return
use_table
[
u
-
0x10A00u
+
use_offset_0x10a00u
];
break
;
case
0x11u
:
...
...
@@ -736,9 +762,11 @@ hb_use_get_category (hb_codepoint_t u)
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x11280u
,
0x11377u
))
return
use_table
[
u
-
0x11280u
+
use_offset_0x11280u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x11400u
,
0x114DFu
))
return
use_table
[
u
-
0x11400u
+
use_offset_0x11400u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x11580u
,
0x1173Fu
))
return
use_table
[
u
-
0x11580u
+
use_offset_0x11580u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x11800u
,
0x1183Fu
))
return
use_table
[
u
-
0x11800u
+
use_offset_0x11800u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x11A00u
,
0x11A9Fu
))
return
use_table
[
u
-
0x11A00u
+
use_offset_0x11a00u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x11C00u
,
0x11CB7u
))
return
use_table
[
u
-
0x11C00u
+
use_offset_0x11c00u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x11D00u
,
0x11D5Fu
))
return
use_table
[
u
-
0x11D00u
+
use_offset_0x11d00u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x11D00u
,
0x11DAFu
))
return
use_table
[
u
-
0x11D00u
+
use_offset_0x11d00u
];
if
(
hb_in_range
<
hb_codepoint_t
>
(
u
,
0x11EE0u
,
0x11EF7u
))
return
use_table
[
u
-
0x11EE0u
+
use_offset_0x11ee0u
];
break
;
default:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录