Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
f14bb7de
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看板
提交
f14bb7de
编写于
12月 31, 2013
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[ot] Separate out hebrew and tibetan shapers from default
Now default shaper is truly no-op.
上级
6300cd72
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
251 addition
and
162 deletion
+251
-162
src/Makefile.am
src/Makefile.am
+2
-0
src/hb-ot-shape-complex-default.cc
src/hb-ot-shape-complex-default.cc
+2
-159
src/hb-ot-shape-complex-hebrew.cc
src/hb-ot-shape-complex-hebrew.cc
+172
-0
src/hb-ot-shape-complex-private.hh
src/hb-ot-shape-complex-private.hh
+14
-3
src/hb-ot-shape-complex-tibetan.cc
src/hb-ot-shape-complex-tibetan.cc
+61
-0
未找到文件。
src/Makefile.am
浏览文件 @
f14bb7de
...
...
@@ -93,6 +93,7 @@ HBSOURCES += \
hb-ot-shape-complex-arabic-table.hh
\
hb-ot-shape-complex-default.cc
\
hb-ot-shape-complex-hangul.cc
\
hb-ot-shape-complex-hebrew.cc
\
hb-ot-shape-complex-indic.cc
\
hb-ot-shape-complex-indic-machine.hh
\
hb-ot-shape-complex-indic-private.hh
\
...
...
@@ -102,6 +103,7 @@ HBSOURCES += \
hb-ot-shape-complex-sea.cc
\
hb-ot-shape-complex-sea-machine.hh
\
hb-ot-shape-complex-thai.cc
\
hb-ot-shape-complex-tibetan.cc
\
hb-ot-shape-complex-private.hh
\
hb-ot-shape-normalize-private.hh
\
hb-ot-shape-normalize.cc
\
...
...
src/hb-ot-shape-complex-default.cc
浏览文件 @
f14bb7de
...
...
@@ -27,174 +27,17 @@
#include "hb-ot-shape-complex-private.hh"
/* TODO Add kana, and other small shapers here */
/* The default shaper *only* adds additional per-script features.*/
static
const
hb_tag_t
tibetan_features
[]
=
{
HB_TAG
(
'a'
,
'b'
,
'v'
,
's'
),
HB_TAG
(
'b'
,
'l'
,
'w'
,
's'
),
HB_TAG
(
'a'
,
'b'
,
'v'
,
'm'
),
HB_TAG
(
'b'
,
'l'
,
'w'
,
'm'
),
HB_TAG_NONE
};
static
void
collect_features_default
(
hb_ot_shape_planner_t
*
plan
)
{
const
hb_tag_t
*
script_features
=
NULL
;
switch
((
hb_tag_t
)
plan
->
props
.
script
)
{
/* Unicode-2.0 additions */
case
HB_SCRIPT_TIBETAN
:
script_features
=
tibetan_features
;
break
;
}
for
(;
script_features
&&
*
script_features
;
script_features
++
)
plan
->
map
.
add_global_bool_feature
(
*
script_features
);
}
static
bool
compose_default
(
const
hb_ot_shape_normalize_context_t
*
c
,
hb_codepoint_t
a
,
hb_codepoint_t
b
,
hb_codepoint_t
*
ab
)
{
/* Hebrew presentation-form shaping.
* https://bugzilla.mozilla.org/show_bug.cgi?id=728866
* Hebrew presentation forms with dagesh, for characters 0x05D0..0x05EA;
* Note that some letters do not have a dagesh presForm encoded.
*/
static
const
hb_codepoint_t
sDageshForms
[
0x05EA
-
0x05D0
+
1
]
=
{
0xFB30
,
/* ALEF */
0xFB31
,
/* BET */
0xFB32
,
/* GIMEL */
0xFB33
,
/* DALET */
0xFB34
,
/* HE */
0xFB35
,
/* VAV */
0xFB36
,
/* ZAYIN */
0x0000
,
/* HET */
0xFB38
,
/* TET */
0xFB39
,
/* YOD */
0xFB3A
,
/* FINAL KAF */
0xFB3B
,
/* KAF */
0xFB3C
,
/* LAMED */
0x0000
,
/* FINAL MEM */
0xFB3E
,
/* MEM */
0x0000
,
/* FINAL NUN */
0xFB40
,
/* NUN */
0xFB41
,
/* SAMEKH */
0x0000
,
/* AYIN */
0xFB43
,
/* FINAL PE */
0xFB44
,
/* PE */
0x0000
,
/* FINAL TSADI */
0xFB46
,
/* TSADI */
0xFB47
,
/* QOF */
0xFB48
,
/* RESH */
0xFB49
,
/* SHIN */
0xFB4A
/* TAV */
};
bool
found
=
c
->
unicode
->
compose
(
a
,
b
,
ab
);
if
(
!
found
&&
(
b
&
~
0x7F
)
==
0x0580
)
{
/* Special-case Hebrew presentation forms that are excluded from
* standard normalization, but wanted for old fonts. */
switch
(
b
)
{
case
0x05B4
:
/* HIRIQ */
if
(
a
==
0x05D9
)
{
/* YOD */
*
ab
=
0xFB1D
;
found
=
true
;
}
break
;
case
0x05B7
:
/* patah */
if
(
a
==
0x05F2
)
{
/* YIDDISH YOD YOD */
*
ab
=
0xFB1F
;
found
=
true
;
}
else
if
(
a
==
0x05D0
)
{
/* ALEF */
*
ab
=
0xFB2E
;
found
=
true
;
}
break
;
case
0x05B8
:
/* QAMATS */
if
(
a
==
0x05D0
)
{
/* ALEF */
*
ab
=
0xFB2F
;
found
=
true
;
}
break
;
case
0x05B9
:
/* HOLAM */
if
(
a
==
0x05D5
)
{
/* VAV */
*
ab
=
0xFB4B
;
found
=
true
;
}
break
;
case
0x05BC
:
/* DAGESH */
if
(
a
>=
0x05D0
&&
a
<=
0x05EA
)
{
*
ab
=
sDageshForms
[
a
-
0x05D0
];
found
=
(
*
ab
!=
0
);
}
else
if
(
a
==
0xFB2A
)
{
/* SHIN WITH SHIN DOT */
*
ab
=
0xFB2C
;
found
=
true
;
}
else
if
(
a
==
0xFB2B
)
{
/* SHIN WITH SIN DOT */
*
ab
=
0xFB2D
;
found
=
true
;
}
break
;
case
0x05BF
:
/* RAFE */
switch
(
a
)
{
case
0x05D1
:
/* BET */
*
ab
=
0xFB4C
;
found
=
true
;
break
;
case
0x05DB
:
/* KAF */
*
ab
=
0xFB4D
;
found
=
true
;
break
;
case
0x05E4
:
/* PE */
*
ab
=
0xFB4E
;
found
=
true
;
break
;
}
break
;
case
0x05C1
:
/* SHIN DOT */
if
(
a
==
0x05E9
)
{
/* SHIN */
*
ab
=
0xFB2A
;
found
=
true
;
}
else
if
(
a
==
0xFB49
)
{
/* SHIN WITH DAGESH */
*
ab
=
0xFB2C
;
found
=
true
;
}
break
;
case
0x05C2
:
/* SIN DOT */
if
(
a
==
0x05E9
)
{
/* SHIN */
*
ab
=
0xFB2B
;
found
=
true
;
}
else
if
(
a
==
0xFB49
)
{
/* SHIN WITH DAGESH */
*
ab
=
0xFB2D
;
found
=
true
;
}
break
;
}
}
return
found
;
}
const
hb_ot_complex_shaper_t
_hb_ot_complex_shaper_default
=
{
"default"
,
collect_features_default
,
NULL
,
/* collect_features */
NULL
,
/* override_features */
NULL
,
/* data_create */
NULL
,
/* data_destroy */
NULL
,
/* preprocess_text */
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT
,
NULL
,
/* decompose */
compose_default
,
NULL
,
/* compose */
NULL
,
/* setup_masks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT
,
true
,
/* fallback_position */
...
...
src/hb-ot-shape-complex-hebrew.cc
0 → 100644
浏览文件 @
f14bb7de
/*
* Copyright © 2010,2012 Google, Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* Google Author(s): Behdad Esfahbod
*/
#include "hb-ot-shape-complex-private.hh"
static
bool
compose_hebrew
(
const
hb_ot_shape_normalize_context_t
*
c
,
hb_codepoint_t
a
,
hb_codepoint_t
b
,
hb_codepoint_t
*
ab
)
{
/* Hebrew presentation-form shaping.
* https://bugzilla.mozilla.org/show_bug.cgi?id=728866
* Hebrew presentation forms with dagesh, for characters 0x05D0..0x05EA;
* Note that some letters do not have a dagesh presForm encoded.
*/
static
const
hb_codepoint_t
sDageshForms
[
0x05EA
-
0x05D0
+
1
]
=
{
0xFB30
,
/* ALEF */
0xFB31
,
/* BET */
0xFB32
,
/* GIMEL */
0xFB33
,
/* DALET */
0xFB34
,
/* HE */
0xFB35
,
/* VAV */
0xFB36
,
/* ZAYIN */
0x0000
,
/* HET */
0xFB38
,
/* TET */
0xFB39
,
/* YOD */
0xFB3A
,
/* FINAL KAF */
0xFB3B
,
/* KAF */
0xFB3C
,
/* LAMED */
0x0000
,
/* FINAL MEM */
0xFB3E
,
/* MEM */
0x0000
,
/* FINAL NUN */
0xFB40
,
/* NUN */
0xFB41
,
/* SAMEKH */
0x0000
,
/* AYIN */
0xFB43
,
/* FINAL PE */
0xFB44
,
/* PE */
0x0000
,
/* FINAL TSADI */
0xFB46
,
/* TSADI */
0xFB47
,
/* QOF */
0xFB48
,
/* RESH */
0xFB49
,
/* SHIN */
0xFB4A
/* TAV */
};
bool
found
=
c
->
unicode
->
compose
(
a
,
b
,
ab
);
if
(
!
found
)
{
/* Special-case Hebrew presentation forms that are excluded from
* standard normalization, but wanted for old fonts. */
switch
(
b
)
{
case
0x05B4
:
/* HIRIQ */
if
(
a
==
0x05D9
)
{
/* YOD */
*
ab
=
0xFB1D
;
found
=
true
;
}
break
;
case
0x05B7
:
/* patah */
if
(
a
==
0x05F2
)
{
/* YIDDISH YOD YOD */
*
ab
=
0xFB1F
;
found
=
true
;
}
else
if
(
a
==
0x05D0
)
{
/* ALEF */
*
ab
=
0xFB2E
;
found
=
true
;
}
break
;
case
0x05B8
:
/* QAMATS */
if
(
a
==
0x05D0
)
{
/* ALEF */
*
ab
=
0xFB2F
;
found
=
true
;
}
break
;
case
0x05B9
:
/* HOLAM */
if
(
a
==
0x05D5
)
{
/* VAV */
*
ab
=
0xFB4B
;
found
=
true
;
}
break
;
case
0x05BC
:
/* DAGESH */
if
(
a
>=
0x05D0
&&
a
<=
0x05EA
)
{
*
ab
=
sDageshForms
[
a
-
0x05D0
];
found
=
(
*
ab
!=
0
);
}
else
if
(
a
==
0xFB2A
)
{
/* SHIN WITH SHIN DOT */
*
ab
=
0xFB2C
;
found
=
true
;
}
else
if
(
a
==
0xFB2B
)
{
/* SHIN WITH SIN DOT */
*
ab
=
0xFB2D
;
found
=
true
;
}
break
;
case
0x05BF
:
/* RAFE */
switch
(
a
)
{
case
0x05D1
:
/* BET */
*
ab
=
0xFB4C
;
found
=
true
;
break
;
case
0x05DB
:
/* KAF */
*
ab
=
0xFB4D
;
found
=
true
;
break
;
case
0x05E4
:
/* PE */
*
ab
=
0xFB4E
;
found
=
true
;
break
;
}
break
;
case
0x05C1
:
/* SHIN DOT */
if
(
a
==
0x05E9
)
{
/* SHIN */
*
ab
=
0xFB2A
;
found
=
true
;
}
else
if
(
a
==
0xFB49
)
{
/* SHIN WITH DAGESH */
*
ab
=
0xFB2C
;
found
=
true
;
}
break
;
case
0x05C2
:
/* SIN DOT */
if
(
a
==
0x05E9
)
{
/* SHIN */
*
ab
=
0xFB2B
;
found
=
true
;
}
else
if
(
a
==
0xFB49
)
{
/* SHIN WITH DAGESH */
*
ab
=
0xFB2D
;
found
=
true
;
}
break
;
}
}
return
found
;
}
const
hb_ot_complex_shaper_t
_hb_ot_complex_shaper_hebrew
=
{
"hebrew"
,
NULL
,
/* collect_features */
NULL
,
/* override_features */
NULL
,
/* data_create */
NULL
,
/* data_destroy */
NULL
,
/* preprocess_text */
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT
,
NULL
,
/* decompose */
compose_hebrew
,
NULL
,
/* setup_masks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT
,
true
,
/* fallback_position */
};
src/hb-ot-shape-complex-private.hh
浏览文件 @
f14bb7de
...
...
@@ -55,10 +55,12 @@ enum hb_ot_shape_zero_width_marks_type_t {
HB_COMPLEX_SHAPER_IMPLEMENT (default)
/* should be first */
\
HB_COMPLEX_SHAPER_IMPLEMENT (arabic) \
HB_COMPLEX_SHAPER_IMPLEMENT (hangul) \
HB_COMPLEX_SHAPER_IMPLEMENT (hebrew) \
HB_COMPLEX_SHAPER_IMPLEMENT (indic) \
HB_COMPLEX_SHAPER_IMPLEMENT (myanmar) \
HB_COMPLEX_SHAPER_IMPLEMENT (sea) \
HB_COMPLEX_SHAPER_IMPLEMENT (thai) \
HB_COMPLEX_SHAPER_IMPLEMENT (tibetan) \
/* ^--- Add new shapers here */
...
...
@@ -193,6 +195,18 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
return
&
_hb_ot_complex_shaper_hangul
;
/* Unicode-2.0 additions */
case
HB_SCRIPT_TIBETAN
:
return
&
_hb_ot_complex_shaper_tibetan
;
/* Unicode-1.1 additions */
case
HB_SCRIPT_HEBREW
:
return
&
_hb_ot_complex_shaper_hebrew
;
/* ^--- Add new shapers here */
...
...
@@ -230,9 +244,6 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
case HB_SCRIPT_LAO:
case HB_SCRIPT_THAI:
/* Unicode-2.0 additions */
case HB_SCRIPT_TIBETAN:
/* Unicode-3.2 additions */
case HB_SCRIPT_TAGALOG:
case HB_SCRIPT_TAGBANWA:
...
...
src/hb-ot-shape-complex-tibetan.cc
0 → 100644
浏览文件 @
f14bb7de
/*
* Copyright © 2010,2012 Google, Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* Google Author(s): Behdad Esfahbod
*/
#include "hb-ot-shape-complex-private.hh"
static
const
hb_tag_t
tibetan_features
[]
=
{
HB_TAG
(
'a'
,
'b'
,
'v'
,
's'
),
HB_TAG
(
'b'
,
'l'
,
'w'
,
's'
),
HB_TAG
(
'a'
,
'b'
,
'v'
,
'm'
),
HB_TAG
(
'b'
,
'l'
,
'w'
,
'm'
),
HB_TAG_NONE
};
static
void
collect_features_tibetan
(
hb_ot_shape_planner_t
*
plan
)
{
for
(
const
hb_tag_t
*
script_features
=
tibetan_features
;
script_features
&&
*
script_features
;
script_features
++
)
plan
->
map
.
add_global_bool_feature
(
*
script_features
);
}
const
hb_ot_complex_shaper_t
_hb_ot_complex_shaper_tibetan
=
{
"default"
,
collect_features_tibetan
,
NULL
,
/* override_features */
NULL
,
/* data_create */
NULL
,
/* data_destroy */
NULL
,
/* preprocess_text */
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT
,
NULL
,
/* decompose */
NULL
,
/* compose */
NULL
,
/* setup_masks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT
,
true
,
/* fallback_position */
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录