harfbuzz 0.2 → 0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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:
|