Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小雨青年
freetype
提交
20ce6ab4
F
freetype
项目概览
小雨青年
/
freetype
通知
14
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
freetype
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
20ce6ab4
编写于
7月 11, 2012
作者:
N
Nigel Tao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
freetype/truetype: variable sized bytecode interpreter stack/store.
R=bsiegert CC=golang-dev
http://codereview.appspot.com/6343091
上级
2bf22ccf
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
24 addition
and
5 deletion
+24
-5
freetype/truetype/hint.go
freetype/truetype/hint.go
+14
-5
freetype/truetype/hint_test.go
freetype/truetype/hint_test.go
+4
-0
freetype/truetype/truetype.go
freetype/truetype/truetype.go
+6
-0
未找到文件。
freetype/truetype/hint.go
浏览文件 @
20ce6ab4
...
...
@@ -13,11 +13,7 @@ import (
)
type
hinter
struct
{
// TODO: variable sized stack and store slices based on the maxp section?
// Should the arrays for the stack and store be combined? For now, fixed
// maximum sizes seem to work in practice.
stack
[
800
]
int32
store
[
128
]
int32
stack
,
store
[]
int32
// The fields below constitue the graphics state, which is described at
// https://developer.apple.com/fonts/TTRefMan/RM04/Chap4.html
...
...
@@ -32,6 +28,19 @@ type hinter struct {
roundPeriod
,
roundPhase
,
roundThreshold
f26dot6
}
func
(
h
*
hinter
)
init
(
f
*
Font
)
{
if
x
:=
int
(
f
.
maxStackElements
);
x
>
len
(
h
.
stack
)
{
x
+=
255
x
&^=
255
h
.
stack
=
make
([]
int32
,
x
)
}
if
x
:=
int
(
f
.
maxStorage
);
x
>
len
(
h
.
store
)
{
x
+=
15
x
&^=
15
h
.
store
=
make
([]
int32
,
x
)
}
}
func
(
h
*
hinter
)
run
(
program
[]
byte
)
error
{
// The default vectors are along the X axis.
h
.
pv
=
[
2
]
f2dot14
{
0x4000
,
0
}
...
...
freetype/truetype/hint_test.go
浏览文件 @
20ce6ab4
...
...
@@ -489,6 +489,10 @@ func TestBytecode(t *testing.T) {
for
_
,
tc
:=
range
testCases
{
h
:=
&
hinter
{}
h
.
init
(
&
Font
{
maxStorage
:
32
,
maxStackElements
:
100
,
})
err
,
errStr
:=
h
.
run
(
tc
.
prog
),
""
if
err
!=
nil
{
errStr
=
err
.
Error
()
...
...
freetype/truetype/truetype.go
浏览文件 @
20ce6ab4
...
...
@@ -98,6 +98,8 @@ type Font struct {
nGlyph
,
nHMetric
,
nKern
int
unitsPerEm
int
bounds
Bounds
// Values from the maxp section.
maxTwilightPoints
,
maxStorage
,
maxFunctionDefs
,
maxStackElements
uint16
}
func
(
f
*
Font
)
parseCmap
()
error
{
...
...
@@ -254,6 +256,10 @@ func (f *Font) parseMaxp() error {
return
FormatError
(
fmt
.
Sprintf
(
"bad maxp length: %d"
,
len
(
f
.
maxp
)))
}
f
.
nGlyph
=
int
(
u16
(
f
.
maxp
,
4
))
f
.
maxTwilightPoints
=
u16
(
f
.
maxp
,
16
)
f
.
maxStorage
=
u16
(
f
.
maxp
,
18
)
f
.
maxFunctionDefs
=
u16
(
f
.
maxp
,
20
)
f
.
maxStackElements
=
u16
(
f
.
maxp
,
24
)
return
nil
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录