harfbuzz 0.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: