Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
2014b8d1
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看板
提交
2014b8d1
编写于
12月 20, 2009
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Hook OpenType shaping up
Default features only for now.
上级
196610ba
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
206 addition
and
4 deletion
+206
-4
src/Makefile.am
src/Makefile.am
+2
-0
src/hb-ot-layout.cc
src/hb-ot-layout.cc
+28
-0
src/hb-ot-layout.h
src/hb-ot-layout.h
+7
-0
src/hb-ot-shape.c
src/hb-ot-shape.c
+165
-0
src/hb-shape.c
src/hb-shape.c
+4
-4
未找到文件。
src/Makefile.am
浏览文件 @
2014b8d1
...
...
@@ -43,6 +43,8 @@ HBSOURCES += \
hb-ot-layout-gsubgpos-private.hh
\
hb-ot-layout-gsub-private.hh
\
hb-ot-layout-private.h
\
hb-ot-shape.c
\
hb-ot-shape-private.h
\
hb-ot-tag.c
\
$(NULL)
HBHEADERS
+=
\
...
...
src/hb-ot-layout.cc
浏览文件 @
2014b8d1
...
...
@@ -377,6 +377,34 @@ hb_ot_layout_table_find_script (hb_face_t *face,
return
FALSE
;
}
hb_bool_t
hb_ot_layout_table_choose_script
(
hb_face_t
*
face
,
hb_tag_t
table_tag
,
const
hb_tag_t
*
script_tags
,
unsigned
int
*
script_index
)
{
ASSERT_STATIC
(
NO_INDEX
==
HB_OT_LAYOUT_NO_SCRIPT_INDEX
);
const
GSUBGPOS
&
g
=
get_gsubgpos_table
(
face
,
table_tag
);
while
(
*
script_tags
)
{
if
(
g
.
find_script_index
(
*
script_tags
,
script_index
))
return
TRUE
;
script_tags
++
;
}
/* try finding 'DFLT' */
if
(
g
.
find_script_index
(
HB_OT_TAG_DEFAULT_SCRIPT
,
script_index
))
return
FALSE
;
/* try with 'dflt'; MS site has had typos and many fonts use it now :( */
if
(
g
.
find_script_index
(
HB_OT_TAG_DEFAULT_LANGUAGE
,
script_index
))
return
FALSE
;
if
(
script_index
)
*
script_index
=
HB_OT_LAYOUT_NO_SCRIPT_INDEX
;
return
FALSE
;
}
unsigned
int
hb_ot_layout_table_get_feature_tags
(
hb_face_t
*
face
,
hb_tag_t
table_tag
,
...
...
src/hb-ot-layout.h
浏览文件 @
2014b8d1
...
...
@@ -113,6 +113,13 @@ hb_ot_layout_table_find_script (hb_face_t *face,
hb_tag_t
script_tag
,
unsigned
int
*
script_index
);
/* Like find_script, but takes zero-terminated array of scripts to test */
hb_bool_t
hb_ot_layout_table_choose_script
(
hb_face_t
*
face
,
hb_tag_t
table_tag
,
const
hb_tag_t
*
script_tags
,
unsigned
int
*
script_index
);
unsigned
int
hb_ot_layout_table_get_feature_tags
(
hb_face_t
*
face
,
hb_tag_t
table_tag
,
...
...
src/hb-ot-shape.c
0 → 100644
浏览文件 @
2014b8d1
/*
* Copyright (C) 2009 Red Hat, Inc.
*
* This is part of HarfBuzz, an OpenType Layout engine 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.
*
* Red Hat Author(s): Behdad Esfahbod
*/
#include "hb-ot-shape-private.h"
#include "hb-buffer-private.h"
#include "hb-ot-layout.h"
hb_tag_t
default_features
[]
=
{
/* GSUB */
HB_TAG
(
'c'
,
'c'
,
'm'
,
'p'
),
HB_TAG
(
'l'
,
'o'
,
'c'
,
'l'
),
HB_TAG
(
'l'
,
'i'
,
'g'
,
'a'
),
HB_TAG
(
'c'
,
'l'
,
'i'
,
'g'
),
/* GPOS */
HB_TAG
(
'k'
,
'e'
,
'r'
,
'n'
),
HB_TAG
(
'm'
,
'a'
,
'r'
,
'k'
),
HB_TAG
(
'm'
,
'k'
,
'm'
,
'k'
),
};
static
void
add_feature
(
hb_face_t
*
face
,
hb_tag_t
table_tag
,
unsigned
int
feature_index
,
unsigned
int
*
lookups
,
unsigned
int
*
num_lookups
,
unsigned
int
room_lookups
)
{
unsigned
int
i
=
room_lookups
-
*
num_lookups
;
hb_ot_layout_feature_get_lookup_indexes
(
face
,
table_tag
,
feature_index
,
0
,
&
i
,
lookups
+
*
num_lookups
);
*
num_lookups
+=
i
;
}
static
int
cmp_lookups
(
const
void
*
p1
,
const
void
*
p2
)
{
unsigned
int
a
=
*
(
const
unsigned
int
*
)
p1
;
unsigned
int
b
=
*
(
const
unsigned
int
*
)
p2
;
return
a
-
b
;
}
static
void
setup_lookups
(
hb_font_t
*
font
,
hb_face_t
*
face
,
hb_buffer_t
*
buffer
,
hb_feature_t
*
features
,
unsigned
int
num_features
,
hb_tag_t
table_tag
,
unsigned
int
*
lookups
,
unsigned
int
*
num_lookups
)
{
unsigned
int
i
,
j
,
script_index
,
language_index
,
feature_index
,
room_lookups
;
room_lookups
=
*
num_lookups
;
*
num_lookups
=
0
;
hb_ot_layout_table_choose_script
(
face
,
table_tag
,
hb_ot_tags_from_script
(
buffer
->
script
),
&
script_index
);
hb_ot_layout_script_find_language
(
face
,
table_tag
,
script_index
,
hb_ot_tag_from_language
(
buffer
->
language
),
&
language_index
);
if
(
hb_ot_layout_language_get_required_feature_index
(
face
,
table_tag
,
script_index
,
language_index
,
&
feature_index
))
add_feature
(
face
,
table_tag
,
feature_index
,
lookups
,
num_lookups
,
room_lookups
);
for
(
i
=
0
;
i
<
ARRAY_LENGTH
(
default_features
);
i
++
)
{
if
(
hb_ot_layout_language_find_feature
(
face
,
table_tag
,
script_index
,
language_index
,
default_features
[
i
],
&
feature_index
))
add_feature
(
face
,
table_tag
,
feature_index
,
lookups
,
num_lookups
,
room_lookups
);
}
qsort
(
lookups
,
*
num_lookups
,
sizeof
(
lookups
[
0
]),
cmp_lookups
);
if
(
*
num_lookups
)
{
for
(
i
=
1
,
j
=
0
;
i
<
*
num_lookups
;
i
++
)
if
(
lookups
[
i
]
!=
lookups
[
j
])
lookups
[
++
j
]
=
lookups
[
i
];
lookups
[
j
++
]
=
lookups
[
i
-
1
];
*
num_lookups
=
j
;
}
}
gboolean
_hb_ot_substitute_complex
(
hb_font_t
*
font
,
hb_face_t
*
face
,
hb_buffer_t
*
buffer
,
hb_feature_t
*
features
,
unsigned
int
num_features
)
{
unsigned
int
lookups
[
1000
];
unsigned
int
num_lookups
=
ARRAY_LENGTH
(
lookups
);
unsigned
int
i
;
if
(
!
hb_ot_layout_has_substitution
(
face
))
return
FALSE
;
setup_lookups
(
font
,
face
,
buffer
,
features
,
num_features
,
HB_OT_TAG_GSUB
,
lookups
,
&
num_lookups
);
for
(
i
=
0
;
i
<
num_lookups
;
i
++
)
hb_ot_layout_substitute_lookup
(
face
,
buffer
,
lookups
[
i
],
0xFFFF
);
return
TRUE
;
}
gboolean
_hb_ot_position_complex
(
hb_font_t
*
font
,
hb_face_t
*
face
,
hb_buffer_t
*
buffer
,
hb_feature_t
*
features
,
unsigned
int
num_features
)
{
unsigned
int
lookups
[
1000
];
unsigned
int
num_lookups
=
ARRAY_LENGTH
(
lookups
);
unsigned
int
i
;
if
(
!
hb_ot_layout_has_positioning
(
face
))
return
FALSE
;
setup_lookups
(
font
,
face
,
buffer
,
features
,
num_features
,
HB_OT_TAG_GPOS
,
lookups
,
&
num_lookups
);
for
(
i
=
0
;
i
<
num_lookups
;
i
++
)
hb_ot_layout_position_lookup
(
font
,
face
,
buffer
,
lookups
[
i
],
0xFFFF
);
hb_ot_layout_position_finish
(
font
,
face
,
buffer
);
return
TRUE
;
}
src/hb-shape.c
浏览文件 @
2014b8d1
...
...
@@ -30,6 +30,8 @@
#include "hb-buffer-private.h"
#include "hb-ot-shape-private.h"
/* Prepare */
...
...
@@ -125,8 +127,7 @@ hb_substitute_complex (hb_font_t *font,
hb_feature_t
*
features
,
unsigned
int
num_features
)
{
/* TODO GSUB */
return
FALSE
;
return
_hb_ot_substitute_complex
(
font
,
face
,
buffer
,
features
,
num_features
);
}
static
void
...
...
@@ -169,8 +170,7 @@ hb_position_complex (hb_font_t *font,
hb_feature_t
*
features
,
unsigned
int
num_features
)
{
/* TODO GPOS */
return
FALSE
;
return
_hb_ot_position_complex
(
font
,
face
,
buffer
,
features
,
num_features
);
}
static
void
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录