harfbuzz 0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -0
- data/Gemfile +3 -0
- data/README.md +6 -6
- data/Rakefile +9 -2
- data/examples/benchmark.rb +21 -0
- data/examples/example.rb +19 -7
- data/examples/words.txt +1 -0
- data/harfbuzz.gemspec +5 -10
- data/lib/harfbuzz.rb +4 -26
- data/lib/harfbuzz/blob.rb +1 -0
- data/lib/harfbuzz/buffer.rb +30 -2
- data/lib/harfbuzz/face.rb +2 -11
- data/lib/harfbuzz/font.rb +140 -1
- data/lib/harfbuzz/version.rb +29 -1
- data/test/helpers.rb +18 -0
- data/test/test_blob.rb +15 -0
- data/test/test_face.rb +23 -0
- data/test/test_font.rb +43 -0
- data/test/test_general.rb +17 -0
- data/test/test_shaper.rb +30 -0
- data/test/test_version.rb +27 -0
- metadata +50 -4
data/lib/harfbuzz/version.rb
CHANGED
@@ -1,5 +1,33 @@
|
|
1
1
|
module Harfbuzz
|
2
2
|
|
3
|
-
|
3
|
+
attach_function :hb_version_string, [], :string
|
4
|
+
attach_function :hb_version, [:pointer, :pointer, :pointer], :void
|
5
|
+
attach_function :hb_version_atleast, [:uint, :uint, :uint], :bool
|
6
|
+
|
7
|
+
def self.version_string
|
8
|
+
hb_version_string
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.version
|
12
|
+
major_ptr = FFI::MemoryPointer.new(:uint, 1)
|
13
|
+
minor_ptr = FFI::MemoryPointer.new(:uint, 1)
|
14
|
+
micro_ptr = FFI::MemoryPointer.new(:uint, 1)
|
15
|
+
hb_version(major_ptr, minor_ptr, micro_ptr)
|
16
|
+
[
|
17
|
+
major_ptr.read_uint,
|
18
|
+
minor_ptr.read_uint,
|
19
|
+
micro_ptr.read_uint,
|
20
|
+
]
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.version_at_least(major, minor, micro)
|
24
|
+
Harfbuzz.hb_version_atleast(major, minor, micro)
|
25
|
+
end
|
26
|
+
|
27
|
+
MinimumHarfbuzzVersion = [1, 0, 4]
|
28
|
+
|
29
|
+
unless version_at_least(*MinimumHarfbuzzVersion)
|
30
|
+
raise "Harfbuzz C library is version #{Harfbuzz.version_string}, but this gem requires version #{MinimumHarfbuzzVersion.join('.')} or later"
|
31
|
+
end
|
4
32
|
|
5
33
|
end
|
data/test/helpers.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'harfbuzz'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'minitest/power_assert'
|
4
|
+
|
5
|
+
module Harfbuzz
|
6
|
+
|
7
|
+
module Setup
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@data = File.open('/Library/Fonts/ACaslonPro-Regular.otf', 'rb')
|
11
|
+
@blob = Harfbuzz::Blob.new(@data)
|
12
|
+
@face = Harfbuzz::Face.new(@blob)
|
13
|
+
@font = Harfbuzz::Font.new(@face)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/test/test_blob.rb
ADDED
data/test/test_face.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative 'helpers'
|
2
|
+
|
3
|
+
module Harfbuzz
|
4
|
+
|
5
|
+
class TestFace < Minitest::Test
|
6
|
+
|
7
|
+
include Setup
|
8
|
+
|
9
|
+
def test_index
|
10
|
+
assert { @face.index == 0 }
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_upem
|
14
|
+
assert { @face.upem > 0 }
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_glyph_count
|
18
|
+
assert { @face.glyph_count > 0 }
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/test/test_font.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'helpers'
|
2
|
+
|
3
|
+
module Harfbuzz
|
4
|
+
|
5
|
+
class TestFont < Minitest::Test
|
6
|
+
|
7
|
+
include Setup
|
8
|
+
|
9
|
+
def test_scale
|
10
|
+
scale = @font.scale
|
11
|
+
assert { scale.kind_of?(Array) }
|
12
|
+
assert { scale.each { |v| v === Numeric && v > 0 } }
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_ppem
|
16
|
+
ppem = @font.ppem
|
17
|
+
assert { ppem.kind_of?(Array) }
|
18
|
+
assert { ppem.each { |v| v === Numeric && v > 0 } }
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_glyph_name
|
22
|
+
glyph_name = 'A'
|
23
|
+
glyph = @font.glyph_from_name(glyph_name)
|
24
|
+
refute { glyph.nil? }
|
25
|
+
name = @font.glyph_name(glyph)
|
26
|
+
assert { name == glyph_name }
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_extents
|
30
|
+
h_extents, v_extents = @font.extents
|
31
|
+
assert { h_extents.ascender > 0 }
|
32
|
+
assert { v_extents.ascender == 0 }
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_glyph_extents
|
36
|
+
extents = @font.glyph_extents(1)
|
37
|
+
assert { extents.width != 0 }
|
38
|
+
assert { extents.height != 0 }
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'helpers'
|
2
|
+
|
3
|
+
module Harfbuzz
|
4
|
+
|
5
|
+
class TestGeneral < Minitest::Test
|
6
|
+
|
7
|
+
include Setup
|
8
|
+
|
9
|
+
def test_shapers
|
10
|
+
shapers = Harfbuzz.shapers
|
11
|
+
assert { shapers.kind_of?(Array) }
|
12
|
+
assert { shapers.include?('fallback') }
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/test/test_shaper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative 'helpers'
|
2
|
+
|
3
|
+
module Harfbuzz
|
4
|
+
|
5
|
+
class TestShaper < Minitest::Test
|
6
|
+
|
7
|
+
include Setup
|
8
|
+
|
9
|
+
def test_shape
|
10
|
+
buffer = Harfbuzz::Buffer.new
|
11
|
+
buffer.add_utf8('fi')
|
12
|
+
buffer.guess_segment_properties
|
13
|
+
Harfbuzz.shape(@font, buffer, %w{+dlig +hlig})
|
14
|
+
buffer.normalize_glyphs
|
15
|
+
glyph_infos = buffer.get_glyph_infos
|
16
|
+
glyph_positions = buffer.get_glyph_positions
|
17
|
+
|
18
|
+
assert { buffer.length == 1 }
|
19
|
+
|
20
|
+
info, position = glyph_infos[0], glyph_positions[0]
|
21
|
+
glyph_name = @font.glyph_to_string(info.codepoint)
|
22
|
+
|
23
|
+
assert { info.codepoint == 320 }
|
24
|
+
assert { position.x_advance != 0 }
|
25
|
+
assert { glyph_name == 'f_i' }
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'helpers'
|
2
|
+
|
3
|
+
module Harfbuzz
|
4
|
+
|
5
|
+
class TestGeneral < Minitest::Test
|
6
|
+
|
7
|
+
include Setup
|
8
|
+
|
9
|
+
def test_version
|
10
|
+
version = Harfbuzz.version
|
11
|
+
assert { version.kind_of?(Array) }
|
12
|
+
assert { version.each { |v| v === Numeric } }
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_version_string
|
16
|
+
version = Harfbuzz.version_string
|
17
|
+
assert { version.kind_of?(String) }
|
18
|
+
assert { version =~ /^\d+\.\d+/ }
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_version_at_least
|
22
|
+
assert { Harfbuzz.version_at_least(1, 0, 0) }
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: harfbuzz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Labovitz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
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
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest-power_assert
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
description: "\n Harfbuzz is a Ruby interface to the Harfbuzz text shaping engine.\n
|
56
84
|
\ "
|
57
85
|
email: johnl@johnlabovitz.com
|
@@ -60,11 +88,14 @@ extensions: []
|
|
60
88
|
extra_rdoc_files: []
|
61
89
|
files:
|
62
90
|
- ".gitignore"
|
91
|
+
- CHANGELOG.md
|
63
92
|
- Gemfile
|
64
93
|
- LICENSE.txt
|
65
94
|
- README.md
|
66
95
|
- Rakefile
|
96
|
+
- examples/benchmark.rb
|
67
97
|
- examples/example.rb
|
98
|
+
- examples/words.txt
|
68
99
|
- harfbuzz.gemspec
|
69
100
|
- lib/harfbuzz.rb
|
70
101
|
- lib/harfbuzz/base.rb
|
@@ -75,6 +106,13 @@ files:
|
|
75
106
|
- lib/harfbuzz/font.rb
|
76
107
|
- lib/harfbuzz/shaping.rb
|
77
108
|
- lib/harfbuzz/version.rb
|
109
|
+
- test/helpers.rb
|
110
|
+
- test/test_blob.rb
|
111
|
+
- test/test_face.rb
|
112
|
+
- test/test_font.rb
|
113
|
+
- test/test_general.rb
|
114
|
+
- test/test_shaper.rb
|
115
|
+
- test/test_version.rb
|
78
116
|
homepage: http://github.com/jslabovitz/harfbuzz-gem
|
79
117
|
licenses: []
|
80
118
|
metadata: {}
|
@@ -94,8 +132,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
132
|
version: '0'
|
95
133
|
requirements: []
|
96
134
|
rubyforge_project:
|
97
|
-
rubygems_version: 2.
|
135
|
+
rubygems_version: 2.6.4
|
98
136
|
signing_key:
|
99
137
|
specification_version: 4
|
100
138
|
summary: Ruby interface to the Harfbuzz text shaping engine
|
101
|
-
test_files:
|
139
|
+
test_files:
|
140
|
+
- test/helpers.rb
|
141
|
+
- test/test_blob.rb
|
142
|
+
- test/test_face.rb
|
143
|
+
- test/test_font.rb
|
144
|
+
- test/test_general.rb
|
145
|
+
- test/test_shaper.rb
|
146
|
+
- test/test_version.rb
|
147
|
+
has_rdoc:
|