freetype 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +9 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +121 -0
- data/Rakefile +7 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/data/Prida01.otf +0 -0
- data/data/Starjedi.ttf +0 -0
- data/freetype.gemspec +26 -0
- data/lib/freetype.rb +5 -0
- data/lib/freetype/api.rb +296 -0
- data/lib/freetype/api_test.rb +149 -0
- data/lib/freetype/c.rb +243 -0
- data/lib/freetype/c_test.rb +173 -0
- data/lib/freetype/error.rb +118 -0
- data/lib/freetype/error_test.rb +21 -0
- data/lib/freetype/version.rb +3 -0
- data/lib/freetype_test.rb +1 -0
- metadata +121 -0
@@ -0,0 +1,118 @@
|
|
1
|
+
module FreeType
|
2
|
+
# Error collection defined by freetype error
|
3
|
+
class Error < StandardError
|
4
|
+
attr_reader :code, :message
|
5
|
+
def initialize(code, message)
|
6
|
+
@code = code
|
7
|
+
@message = message
|
8
|
+
end
|
9
|
+
|
10
|
+
class << self
|
11
|
+
# err = FT_Init_FreeType(library)
|
12
|
+
# raise Error.find(err) unless err == 0
|
13
|
+
def find(code)
|
14
|
+
klass, code, message = ERRORS[code]
|
15
|
+
if klass
|
16
|
+
klass.new(code, message)
|
17
|
+
else
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# $ cat /usr/local/Cellar/freetype/2.6_1/include/freetype2/fterrdef.h | ruby -e 'print $stdin.read.gsub(/,\n|[,()]/m, "")'| grep ERRORDEF | awk '{print $3 " => [("$2 " = Class.new(Error)), " $3 ", " $4" "$5" "$6" "$7" "$8" "$9 " "$10" "$11" "$12"],"}' | pbcopy
|
24
|
+
ERRORS = {
|
25
|
+
0x00 => [(Ok = Class.new(Error)), 0x00, 'no error'],
|
26
|
+
0x01 => [(Cannot_Open_Resource = Class.new(Error)), 0x01, 'cannot open resource'],
|
27
|
+
0x02 => [(Unknown_File_Format = Class.new(Error)), 0x02, 'unknown file format'],
|
28
|
+
0x03 => [(Invalid_File_Format = Class.new(Error)), 0x03, 'broken file'],
|
29
|
+
0x04 => [(Invalid_Version = Class.new(Error)), 0x04, 'invalid FreeType version'],
|
30
|
+
0x05 => [(Lower_Module_Version = Class.new(Error)), 0x05, 'module version is too low'],
|
31
|
+
0x06 => [(Invalid_Argument = Class.new(Error)), 0x06, 'invalid argument'],
|
32
|
+
0x07 => [(Unimplemented_Feature = Class.new(Error)), 0x07, 'unimplemented feature'],
|
33
|
+
0x08 => [(Invalid_Table = Class.new(Error)), 0x08, 'broken table'],
|
34
|
+
0x09 => [(Invalid_Offset = Class.new(Error)), 0x09, 'broken offset within table'],
|
35
|
+
0x0A => [(Array_Too_Large = Class.new(Error)), 0x0A, 'array allocation size too large'],
|
36
|
+
0x0B => [(Missing_Module = Class.new(Error)), 0x0B, 'missing module'],
|
37
|
+
0x0C => [(Missing_Property = Class.new(Error)), 0x0C, 'missing property'],
|
38
|
+
0x10 => [(Invalid_Glyph_Index = Class.new(Error)), 0x10, 'invalid glyph index'],
|
39
|
+
0x11 => [(Invalid_Character_Code = Class.new(Error)), 0x11, 'invalid character code'],
|
40
|
+
0x12 => [(Invalid_Glyph_Format = Class.new(Error)), 0x12, 'unsupported glyph image format'],
|
41
|
+
0x13 => [(Cannot_Render_Glyph = Class.new(Error)), 0x13, 'cannot render this glyph format'],
|
42
|
+
0x14 => [(Invalid_Outline = Class.new(Error)), 0x14, 'invalid outline'],
|
43
|
+
0x15 => [(Invalid_Composite = Class.new(Error)), 0x15, 'invalid composite glyph'],
|
44
|
+
0x16 => [(Too_Many_Hints = Class.new(Error)), 0x16, 'too many hints'],
|
45
|
+
0x17 => [(Invalid_Pixel_Size = Class.new(Error)), 0x17, 'invalid pixel size'],
|
46
|
+
0x20 => [(Invalid_Handle = Class.new(Error)), 0x20, 'invalid object handle'],
|
47
|
+
0x21 => [(Invalid_Library_Handle = Class.new(Error)), 0x21, 'invalid library handle'],
|
48
|
+
0x22 => [(Invalid_Driver_Handle = Class.new(Error)), 0x22, 'invalid module handle'],
|
49
|
+
0x23 => [(Invalid_Face_Handle = Class.new(Error)), 0x23, 'invalid face handle'],
|
50
|
+
0x24 => [(Invalid_Size_Handle = Class.new(Error)), 0x24, 'invalid size handle'],
|
51
|
+
0x25 => [(Invalid_Slot_Handle = Class.new(Error)), 0x25, 'invalid glyph slot handle'],
|
52
|
+
0x26 => [(Invalid_CharMap_Handle = Class.new(Error)), 0x26, 'invalid charmap handle'],
|
53
|
+
0x27 => [(Invalid_Cache_Handle = Class.new(Error)), 0x27, 'invalid cache manager handle'],
|
54
|
+
0x28 => [(Invalid_Stream_Handle = Class.new(Error)), 0x28, 'invalid stream handle'],
|
55
|
+
0x30 => [(Too_Many_Drivers = Class.new(Error)), 0x30, 'too many modules'],
|
56
|
+
0x31 => [(Too_Many_Extensions = Class.new(Error)), 0x31, 'too many extensions'],
|
57
|
+
0x40 => [(Out_Of_Memory = Class.new(Error)), 0x40, 'out of memory'],
|
58
|
+
0x41 => [(Unlisted_Object = Class.new(Error)), 0x41, 'unlisted object'],
|
59
|
+
0x51 => [(Cannot_Open_Stream = Class.new(Error)), 0x51, 'cannot open stream'],
|
60
|
+
0x52 => [(Invalid_Stream_Seek = Class.new(Error)), 0x52, 'invalid stream seek'],
|
61
|
+
0x53 => [(Invalid_Stream_Skip = Class.new(Error)), 0x53, 'invalid stream skip'],
|
62
|
+
0x54 => [(Invalid_Stream_Read = Class.new(Error)), 0x54, 'invalid stream read'],
|
63
|
+
0x55 => [(Invalid_Stream_Operation = Class.new(Error)), 0x55, 'invalid stream operation'],
|
64
|
+
0x56 => [(Invalid_Frame_Operation = Class.new(Error)), 0x56, 'invalid frame operation'],
|
65
|
+
0x57 => [(Nested_Frame_Access = Class.new(Error)), 0x57, 'nested frame access'],
|
66
|
+
0x58 => [(Invalid_Frame_Read = Class.new(Error)), 0x58, 'invalid frame read'],
|
67
|
+
0x60 => [(Raster_Uninitialized = Class.new(Error)), 0x60, 'raster uninitialized'],
|
68
|
+
0x61 => [(Raster_Corrupted = Class.new(Error)), 0x61, 'raster corrupted'],
|
69
|
+
0x62 => [(Raster_Overflow = Class.new(Error)), 0x62, 'raster overflow'],
|
70
|
+
0x63 => [(Raster_Negative_Height = Class.new(Error)), 0x63, 'negative height while rastering'],
|
71
|
+
0x70 => [(Too_Many_Caches = Class.new(Error)), 0x70, 'too many registered caches'],
|
72
|
+
0x80 => [(Invalid_Opcode = Class.new(Error)), 0x80, 'invalid opcode'],
|
73
|
+
0x81 => [(Too_Few_Arguments = Class.new(Error)), 0x81, 'too few arguments'],
|
74
|
+
0x82 => [(Stack_Overflow = Class.new(Error)), 0x82, 'stack overflow'],
|
75
|
+
0x83 => [(Code_Overflow = Class.new(Error)), 0x83, 'code overflow'],
|
76
|
+
0x84 => [(Bad_Argument = Class.new(Error)), 0x84, 'bad argument'],
|
77
|
+
0x85 => [(Divide_By_Zero = Class.new(Error)), 0x85, 'division by zero'],
|
78
|
+
0x86 => [(Invalid_Reference = Class.new(Error)), 0x86, 'invalid reference'],
|
79
|
+
0x87 => [(Debug_OpCode = Class.new(Error)), 0x87, 'found debug opcode'],
|
80
|
+
0x88 => [(ENDF_In_Exec_Stream = Class.new(Error)), 0x88, 'found ENDF opcode in execution stream'],
|
81
|
+
0x89 => [(Nested_DEFS = Class.new(Error)), 0x89, 'nested DEFS'],
|
82
|
+
0x8A => [(Invalid_CodeRange = Class.new(Error)), 0x8A, 'invalid code range'],
|
83
|
+
0x8B => [(Execution_Too_Long = Class.new(Error)), 0x8B, 'execution context too long'],
|
84
|
+
0x8C => [(Too_Many_Function_Defs = Class.new(Error)), 0x8C, 'too many function definitions'],
|
85
|
+
0x8D => [(Too_Many_Instruction_Defs = Class.new(Error)), 0x8D, 'too many instruction definitions'],
|
86
|
+
0x8E => [(Table_Missing = Class.new(Error)), 0x8E, 'SFNT font table missing'],
|
87
|
+
0x8F => [(Horiz_Header_Missing = Class.new(Error)), 0x8F, 'horizontal header hhea table missing'],
|
88
|
+
0x90 => [(Locations_Missing = Class.new(Error)), 0x90, 'locations loca table missing'],
|
89
|
+
0x91 => [(Name_Table_Missing = Class.new(Error)), 0x91, 'name table missing'],
|
90
|
+
0x92 => [(CMap_Table_Missing = Class.new(Error)), 0x92, 'character map cmap table missing'],
|
91
|
+
0x93 => [(Hmtx_Table_Missing = Class.new(Error)), 0x93, 'horizontal metrics hmtx table missing'],
|
92
|
+
0x94 => [(Post_Table_Missing = Class.new(Error)), 0x94, 'PostScript post table missing'],
|
93
|
+
0x95 => [(Invalid_Horiz_Metrics = Class.new(Error)), 0x95, 'invalid horizontal metrics'],
|
94
|
+
0x96 => [(Invalid_CharMap_Format = Class.new(Error)), 0x96, 'invalid character map cmap format'],
|
95
|
+
0x97 => [(Invalid_PPem = Class.new(Error)), 0x97, 'invalid ppem value'],
|
96
|
+
0x98 => [(Invalid_Vert_Metrics = Class.new(Error)), 0x98, 'invalid vertical metrics'],
|
97
|
+
0x99 => [(Could_Not_Find_Context = Class.new(Error)), 0x99, 'could not find context'],
|
98
|
+
0x9A => [(Invalid_Post_Table_Format = Class.new(Error)), 0x9A, 'invalid PostScript post table format'],
|
99
|
+
0x9B => [(Invalid_Post_Table = Class.new(Error)), 0x9B, 'invalid PostScript post table'],
|
100
|
+
0xA0 => [(Syntax_Error = Class.new(Error)), 0xA0, 'opcode syntax error'],
|
101
|
+
0xA1 => [(Stack_Underflow = Class.new(Error)), 0xA1, 'argument stack underflow'],
|
102
|
+
0xA2 => [(Ignore = Class.new(Error)), 0xA2, 'ignore'],
|
103
|
+
0xA3 => [(No_Unicode_Glyph_Name = Class.new(Error)), 0xA3, 'no Unicode glyph name found'],
|
104
|
+
0xA4 => [(Glyph_Too_Big = Class.new(Error)), 0xA4, 'glyph to big for hinting'],
|
105
|
+
0xB0 => [(Missing_Startfont_Field = Class.new(Error)), 0xB0, "`STARTFONT' field missing"],
|
106
|
+
0xB1 => [(Missing_Font_Field = Class.new(Error)), 0xB1, "`FONT' field missing"],
|
107
|
+
0xB2 => [(Missing_Size_Field = Class.new(Error)), 0xB2, "`SIZE' field missing"],
|
108
|
+
0xB3 => [(Missing_Fontboundingbox_Field = Class.new(Error)), 0xB3, "`FONTBOUNDINGBOX' field missing"],
|
109
|
+
0xB4 => [(Missing_Chars_Field = Class.new(Error)), 0xB4, "`CHARS' field missing"],
|
110
|
+
0xB5 => [(Missing_Startchar_Field = Class.new(Error)), 0xB5, "`STARTCHAR' field missing"],
|
111
|
+
0xB6 => [(Missing_Encoding_Field = Class.new(Error)), 0xB6, "`ENCODING' field missing"],
|
112
|
+
0xB7 => [(Missing_Bbx_Field = Class.new(Error)), 0xB7, "`BBX' field missing"],
|
113
|
+
0xB8 => [(Bbx_Too_Big = Class.new(Error)), 0xB8, "`BBX' too big"],
|
114
|
+
0xB9 => [(Corrupted_Font_Header = Class.new(Error)), 0xB9, 'Font header corrupted or missing fields'],
|
115
|
+
0xBA => [(Corrupted_Font_Glyphs = Class.new(Error)), 0xBA, 'Font glyphs corrupted or missing fields'],
|
116
|
+
}
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'freetype/error'
|
2
|
+
|
3
|
+
module FreeTypeErrorTest
|
4
|
+
def test_all(t)
|
5
|
+
FreeType::Error::ERRORS.each do |code, (klass, _code, message)|
|
6
|
+
err = FreeType::Error.find(code)
|
7
|
+
unless FreeType::Error === err
|
8
|
+
t.error('Error code miss generate')
|
9
|
+
end
|
10
|
+
unless err.class == klass
|
11
|
+
t.error('Error.find return object miss')
|
12
|
+
end
|
13
|
+
unless err.code == _code
|
14
|
+
t.error('Error.find return object miss')
|
15
|
+
end
|
16
|
+
unless err.message == message
|
17
|
+
t.error('Error.find return object miss')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'freetype'
|
metadata
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: freetype
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ksss
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ffi
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.10'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rgot
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: FreeType binding by ffi
|
70
|
+
email:
|
71
|
+
- co000ri@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
78
|
+
- CODE_OF_CONDUCT.md
|
79
|
+
- Gemfile
|
80
|
+
- LICENSE.txt
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- bin/console
|
84
|
+
- bin/setup
|
85
|
+
- data/Prida01.otf
|
86
|
+
- data/Starjedi.ttf
|
87
|
+
- freetype.gemspec
|
88
|
+
- lib/freetype.rb
|
89
|
+
- lib/freetype/api.rb
|
90
|
+
- lib/freetype/api_test.rb
|
91
|
+
- lib/freetype/c.rb
|
92
|
+
- lib/freetype/c_test.rb
|
93
|
+
- lib/freetype/error.rb
|
94
|
+
- lib/freetype/error_test.rb
|
95
|
+
- lib/freetype/version.rb
|
96
|
+
- lib/freetype_test.rb
|
97
|
+
homepage: https://github.com/ksss/freetype
|
98
|
+
licenses:
|
99
|
+
- MIT
|
100
|
+
metadata: {}
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 2.5.0
|
118
|
+
signing_key:
|
119
|
+
specification_version: 4
|
120
|
+
summary: FreeType binding by ffi
|
121
|
+
test_files: []
|