Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
41ca1fbe
T
Third Party Harfbuzz
项目概览
OpenHarmony
/
Third Party Harfbuzz
接近 2 年 前同步成功
通知
1
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看板
提交
41ca1fbe
编写于
5月 09, 2014
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[ot] Start implementing cmap table
上级
c7074b87
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
173 addition
and
0 deletion
+173
-0
src/Makefile.am
src/Makefile.am
+1
-0
src/hb-ot-cmap-table.hh
src/hb-ot-cmap-table.hh
+171
-0
src/hb-ot-font.cc
src/hb-ot-font.cc
+1
-0
未找到文件。
src/Makefile.am
浏览文件 @
41ca1fbe
...
@@ -35,6 +35,7 @@ HBSOURCES = \
...
@@ -35,6 +35,7 @@ HBSOURCES = \
hb-object-private.hh
\
hb-object-private.hh
\
hb-open-file-private.hh
\
hb-open-file-private.hh
\
hb-open-type-private.hh
\
hb-open-type-private.hh
\
hb-ot-cmap-table.hh
\
hb-ot-head-table.hh
\
hb-ot-head-table.hh
\
hb-ot-hhea-table.hh
\
hb-ot-hhea-table.hh
\
hb-ot-hmtx-table.hh
\
hb-ot-hmtx-table.hh
\
...
...
src/hb-ot-cmap-table.hh
0 → 100644
浏览文件 @
41ca1fbe
/*
* Copyright © 2014 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
*/
#ifndef HB_OT_CMAP_TABLE_HH
#define HB_OT_CMAP_TABLE_HH
#include "hb-open-type-private.hh"
namespace
OT
{
/*
* cmap -- Character To Glyph Index Mapping Table
*/
#define HB_OT_TAG_cmap HB_TAG('c','m','a','p')
struct
CmapSubtableFormat4
{
friend
struct
CmapSubtable
;
private:
inline
bool
get_glyph
(
hb_codepoint_t
codepoint
,
hb_codepoint_t
*
glyph
)
const
{
return
false
;
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
c
->
check_range
(
this
,
length
)
&&
16
+
4
*
(
unsigned
int
)
segCountX2
<
length
);
}
protected:
USHORT
format
;
/* Format number is set to 4. */
USHORT
length
;
/* This is the length in bytes of the
* subtable. */
USHORT
language
;
/* Ignore. */
USHORT
segCountX2
;
/* 2 x segCount. */
USHORT
searchRange
;
/* 2 * (2**floor(log2(segCount))) */
USHORT
entrySelector
;
/* log2(searchRange/2) */
USHORT
rangeShift
;
/* 2 x segCount - searchRange */
USHORT
values
[
VAR
];
#if 0
USHORT endCount[segCount]; /* End characterCode for each segment,
* last=0xFFFF. */
USHORT reservedPad; /* Set to 0. */
USHORT startCount[segCount]; /* Start character code for each segment. */
SHORT idDelta[segCount]; /* Delta for all character codes in segment. */
USHORT idRangeOffset[segCount];/* Offsets into glyphIdArray or 0 */
USHORT glyphIdArray[VAR]; /* Glyph index array (arbitrary length) */
#endif
public:
DEFINE_SIZE_ARRAY
(
14
,
values
);
};
struct
CmapSubtable
{
inline
bool
get_glyph
(
hb_codepoint_t
codepoint
,
hb_codepoint_t
*
glyph
)
const
{
switch
(
u
.
format
)
{
case
4
:
return
u
.
format4
.
get_glyph
(
codepoint
,
glyph
);
default:
return
false
;
}
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
(
this
);
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
);
switch
(
u
.
format
)
{
case
4
:
return
TRACE_RETURN
(
u
.
format4
.
sanitize
(
c
));
default:
return
TRACE_RETURN
(
true
);
}
}
protected:
union
{
USHORT
format
;
/* Format identifier */
CmapSubtableFormat4
format4
;
}
u
;
public:
DEFINE_SIZE_UNION
(
2
,
format
);
};
struct
EncodingRecord
{
int
cmp
(
const
EncodingRecord
&
other
)
const
{
int
ret
;
ret
=
other
.
platformID
.
cmp
(
platformID
);
if
(
ret
)
return
ret
;
ret
=
other
.
encodingID
.
cmp
(
encodingID
);
if
(
ret
)
return
ret
;
return
0
;
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
TRACE_SANITIZE
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
subtable
.
sanitize
(
c
,
base
));
}
USHORT
platformID
;
/* Platform ID. */
USHORT
encodingID
;
/* Platform-specific encoding ID. */
LongOffsetTo
<
CmapSubtable
>
subtable
;
/* Byte offset from beginning of table to the subtable for this encoding. */
public:
DEFINE_SIZE_STATIC
(
8
);
};
struct
cmap
{
static
const
hb_tag_t
tableTag
=
HB_OT_TAG_cmap
;
inline
unsigned
int
find_subtable
(
unsigned
int
platform_id
,
unsigned
int
encoding_id
)
const
{
EncodingRecord
key
;
key
.
platformID
.
set
(
platform_id
);
key
.
encodingID
.
set
(
encoding_id
);
return
encodingRecord
.
search
(
key
);
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
likely
(
version
==
0
)
&&
encodingRecord
.
sanitize
(
c
,
this
));
}
USHORT
version
;
/* Table version number (0). */
ArrayOf
<
EncodingRecord
>
encodingRecord
;
/* Encoding tables. */
public:
DEFINE_SIZE_ARRAY
(
4
,
encodingRecord
);
};
}
/* namespace OT */
#endif
/* HB_OT_CMAP_TABLE_HH */
src/hb-ot-font.cc
浏览文件 @
41ca1fbe
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
#include "hb-font-private.hh"
#include "hb-font-private.hh"
#include "hb-ot-cmap-table.hh"
#include "hb-ot-hhea-table.hh"
#include "hb-ot-hhea-table.hh"
#include "hb-ot-hmtx-table.hh"
#include "hb-ot-hmtx-table.hh"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录