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.
@@ -1,5 +1,33 @@
1
1
  module Harfbuzz
2
2
 
3
- VERSION = '0.2'
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
@@ -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
@@ -0,0 +1,15 @@
1
+ require_relative 'helpers'
2
+
3
+ module Harfbuzz
4
+
5
+ class TestBlob < Minitest::Test
6
+
7
+ include Setup
8
+
9
+ def test_length
10
+ assert { @blob.length > 0 }
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -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
@@ -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
@@ -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.2'
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: 2015-11-11 00:00:00.000000000 Z
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.5.0
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: