Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
6f287782
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
6f287782
编写于
5月 22, 2014
作者:
P
prr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8041540: Better use of pages in font processing
Reviewed-by: srl, bae, mschoene
上级
ccc284e5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
46 addition
and
6 deletion
+46
-6
src/share/native/sun/font/layout/ContextualSubstSubtables.cpp
...share/native/sun/font/layout/ContextualSubstSubtables.cpp
+46
-6
未找到文件。
src/share/native/sun/font/layout/ContextualSubstSubtables.cpp
浏览文件 @
6f287782
...
...
@@ -243,12 +243,22 @@ le_uint32 ContextualSubstitutionFormat1Subtable::process(const LETableReference
le_uint16
srSetCount
=
SWAPW
(
subRuleSetCount
);
if
(
coverageIndex
<
srSetCount
)
{
LEReferenceToArrayOf
<
Offset
>
subRuleSetTableOffsetArrayRef
(
base
,
success
,
&
subRuleSetTableOffsetArray
[
coverageIndex
],
1
);
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
Offset
subRuleSetTableOffset
=
SWAPW
(
subRuleSetTableOffsetArray
[
coverageIndex
]);
LEReferenceTo
<
SubRuleSetTable
>
subRuleSetTable
(
base
,
success
,
(
const
SubRuleSetTable
*
)
((
char
*
)
this
+
subRuleSetTableOffset
));
le_uint16
subRuleCount
=
SWAPW
(
subRuleSetTable
->
subRuleCount
);
le_int32
position
=
glyphIterator
->
getCurrStreamPosition
();
LEReferenceToArrayOf
<
Offset
>
subRuleTableOffsetArrayRef
(
base
,
success
,
subRuleSetTable
->
subRuleTableOffsetArray
,
subRuleCount
);
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
for
(
le_uint16
subRule
=
0
;
subRule
<
subRuleCount
;
subRule
+=
1
)
{
Offset
subRuleTableOffset
=
SWAPW
(
subRuleSetTable
->
subRuleTableOffsetArray
[
subRule
]);
...
...
@@ -301,13 +311,22 @@ le_uint32 ContextualSubstitutionFormat2Subtable::process(const LETableReference
glyphIterator
->
getCurrGlyphID
(),
success
);
if
(
setClass
<
scSetCount
&&
subClassSetTableOffsetArray
[
setClass
]
!=
0
)
{
if
(
setClass
<
scSetCount
)
{
LEReferenceToArrayOf
<
Offset
>
subClassSetTableOffsetArrayRef
(
base
,
success
,
subClassSetTableOffsetArray
,
setClass
);
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
if
(
subClassSetTableOffsetArray
[
setClass
]
!=
0
)
{
Offset
subClassSetTableOffset
=
SWAPW
(
subClassSetTableOffsetArray
[
setClass
]);
LEReferenceTo
<
SubClassSetTable
>
subClassSetTable
(
base
,
success
,
(
const
SubClassSetTable
*
)
((
char
*
)
this
+
subClassSetTableOffset
));
le_uint16
subClassRuleCount
=
SWAPW
(
subClassSetTable
->
subClassRuleCount
);
le_int32
position
=
glyphIterator
->
getCurrStreamPosition
();
LEReferenceToArrayOf
<
Offset
>
subClassRuleTableOffsetArrayRef
(
base
,
success
,
subClassSetTable
->
subClassRuleTableOffsetArray
,
subClassRuleCount
);
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
for
(
le_uint16
scRule
=
0
;
scRule
<
subClassRuleCount
;
scRule
+=
1
)
{
Offset
subClassRuleTableOffset
=
SWAPW
(
subClassSetTable
->
subClassRuleTableOffsetArray
[
scRule
]);
...
...
@@ -331,6 +350,7 @@ le_uint32 ContextualSubstitutionFormat2Subtable::process(const LETableReference
glyphIterator
->
setCurrStreamPosition
(
position
);
}
}
}
// XXX If we get here, the table is mal-formed...
}
...
...
@@ -442,13 +462,22 @@ le_uint32 ChainingContextualSubstitutionFormat1Subtable::process(const LETableRe
le_uint16
srSetCount
=
SWAPW
(
chainSubRuleSetCount
);
if
(
coverageIndex
<
srSetCount
)
{
LEReferenceToArrayOf
<
Offset
>
chainSubRuleSetTableOffsetArrayRef
(
base
,
success
,
chainSubRuleSetTableOffsetArray
,
coverageIndex
);
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
Offset
chainSubRuleSetTableOffset
=
SWAPW
(
chainSubRuleSetTableOffsetArray
[
coverageIndex
]);
LEReferenceTo
<
ChainSubRuleSetTable
>
chainSubRuleSetTable
(
base
,
success
,
(
const
ChainSubRuleSetTable
*
)
((
char
*
)
this
+
chainSubRuleSetTableOffset
));
le_uint16
chainSubRuleCount
=
SWAPW
(
chainSubRuleSetTable
->
chainSubRuleCount
);
le_int32
position
=
glyphIterator
->
getCurrStreamPosition
();
GlyphIterator
tempIterator
(
*
glyphIterator
,
emptyFeatureList
);
LEReferenceToArrayOf
<
Offset
>
chainSubRuleTableOffsetArrayRef
(
base
,
success
,
chainSubRuleSetTable
->
chainSubRuleTableOffsetArray
,
chainSubRuleCount
);
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
for
(
le_uint16
subRule
=
0
;
subRule
<
chainSubRuleCount
;
subRule
+=
1
)
{
Offset
chainSubRuleTableOffset
=
SWAPW
(
chainSubRuleSetTable
->
chainSubRuleTableOffsetArray
[
subRule
]);
...
...
@@ -530,6 +559,11 @@ le_uint32 ChainingContextualSubstitutionFormat2Subtable::process(const LETableRe
le_int32
setClass
=
inputClassDefinitionTable
->
getGlyphClass
(
inputClassDefinitionTable
,
glyphIterator
->
getCurrGlyphID
(),
success
);
LEReferenceToArrayOf
<
Offset
>
chainSubClassSetTableOffsetArrayRef
(
base
,
success
,
chainSubClassSetTableOffsetArray
,
setClass
);
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
if
(
setClass
<
scSetCount
&&
chainSubClassSetTableOffsetArray
[
setClass
]
!=
0
)
{
Offset
chainSubClassSetTableOffset
=
SWAPW
(
chainSubClassSetTableOffsetArray
[
setClass
]);
...
...
@@ -538,7 +572,11 @@ le_uint32 ChainingContextualSubstitutionFormat2Subtable::process(const LETableRe
le_uint16
chainSubClassRuleCount
=
SWAPW
(
chainSubClassSetTable
->
chainSubClassRuleCount
);
le_int32
position
=
glyphIterator
->
getCurrStreamPosition
();
GlyphIterator
tempIterator
(
*
glyphIterator
,
emptyFeatureList
);
LEReferenceToArrayOf
<
Offset
>
chainSubClassRuleTableOffsetArrayRef
(
base
,
success
,
chainSubClassSetTable
->
chainSubClassRuleTableOffsetArray
,
chainSubClassRuleCount
);
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
for
(
le_uint16
scRule
=
0
;
scRule
<
chainSubClassRuleCount
;
scRule
+=
1
)
{
Offset
chainSubClassRuleTableOffset
=
SWAPW
(
chainSubClassSetTable
->
chainSubClassRuleTableOffsetArray
[
scRule
]);
...
...
@@ -603,12 +641,14 @@ le_uint32 ChainingContextualSubstitutionFormat3Subtable::process(const LETableRe
}
le_uint16
backtrkGlyphCount
=
SWAPW
(
backtrackGlyphCount
);
LEReferenceToArrayOf
<
Offset
>
backtrackGlyphArrayRef
(
base
,
success
,
backtrackCoverageTableOffsetArray
,
backtrkGlyphCount
);
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
le_uint16
inputGlyphCount
=
(
le_uint16
)
SWAPW
(
backtrackCoverageTableOffsetArray
[
backtrkGlyphCount
]);
LEReferenceToArrayOf
<
Offset
>
inputCoverageTableOffsetArray
(
base
,
success
,
&
backtrackCoverageTableOffsetArray
[
backtrkGlyphCount
+
1
],
inputGlyphCount
+
2
);
// offset
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
const
le_uint16
lookaheadGlyphCount
=
(
le_uint16
)
SWAPW
(
inputCoverageTableOffsetArray
[
inputGlyphCount
]);
if
(
LE_FAILURE
(
success
))
{
return
0
;
}
LEReferenceToArrayOf
<
Offset
>
lookaheadCoverageTableOffsetArray
(
base
,
success
,
inputCoverageTableOffsetArray
.
getAlias
(
inputGlyphCount
+
1
,
success
),
lookaheadGlyphCount
+
2
);
if
(
LE_FAILURE
(
success
)
)
{
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录