harfbuzz 0.5 → 0.6
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/README.md +1 -1
- data/Rakefile +1 -9
- data/harfbuzz.gemspec +5 -4
- data/lib/harfbuzz/buffer.rb +8 -2
- data/lib/harfbuzz/face.rb +61 -0
- data/lib/harfbuzz/font.rb +1 -1
- data/lib/harfbuzz/language.rb +37 -0
- data/lib/harfbuzz.rb +3 -1
- data/test/{test_face.rb → face_test.rb} +6 -0
- data/test/general_test.rb +30 -0
- metadata +41 -30
- data/Gemfile +0 -3
- data/test/test_general.rb +0 -17
- /data/test/{test_blob.rb → blob_test.rb} +0 -0
- /data/test/{test_font.rb → font_test.rb} +0 -0
- /data/test/{test_shaper.rb → shaper_test.rb} +0 -0
- /data/test/{test_version.rb → version_test.rb} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 33191ebc2a0aed32b09e1ab47cc80518a812d7f0b8f804e102dcebf9566247c0
|
|
4
|
+
data.tar.gz: 91cf7a6db5eb787fb5915e1e692f5aa4d646215f42775e403caba72da24bbd3f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 934962978e00ab939e1ebfaf279c9551a52f4115032f177075f1d3fc2dffbb56317bae5272e84d70a520de9bd229c05458049d5aeaed8a3138aab46f6d9936ec
|
|
7
|
+
data.tar.gz: fc1b54ae57f40f52171118b4addb1127ab832a6ab30d5ca91cb697793fb59d37b5966214286f6b0f1fe625b1c011c7a02a9ee39854d1f43ab409326347286c71
|
data/README.md
CHANGED
|
@@ -28,7 +28,7 @@ The Harfbuzz gem is composed of two layers: a low-level direct interface to Harf
|
|
|
28
28
|
|
|
29
29
|
The low-level interface is a one-to-one mapping of Harfbuzz C functions to Ruby methods, implemented using the [FFI](https://github.com/ffi/ffi) library. For example, the Harfbuzz C function `hb_version_string()` is available in Ruby as `Harfbuzz.hb_version_string`. However, as the low-level methods return C pointers wrapped in FFI objects, this layer is generally not useful to a Ruby programmer.
|
|
30
30
|
|
|
31
|
-
The high-level interface abstracts the C functions, structures, and pointers into Ruby objects. For example,
|
|
31
|
+
The high-level interface abstracts the C functions, structures, and pointers into Ruby objects. For example, `hb_version_string()` function is more usefully available via `Harfbuzz.version_string`, which returns a Ruby string containing with the version of the Harfbuzz library.
|
|
32
32
|
|
|
33
33
|
Where appropriate, Ruby classes have been constructed to map to the concepts in Harfbuzz. Hence:
|
|
34
34
|
|
data/Rakefile
CHANGED
data/harfbuzz.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = 'harfbuzz'
|
|
3
|
-
s.version = '0.
|
|
3
|
+
s.version = '0.6'
|
|
4
4
|
s.summary = 'Ruby interface to the Harfbuzz text shaping engine'
|
|
5
5
|
s.author = 'John Labovitz'
|
|
6
6
|
s.email = 'johnl@johnlabovitz.com'
|
|
@@ -14,9 +14,10 @@ Gem::Specification.new do |s|
|
|
|
14
14
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
|
15
15
|
s.require_path = 'lib'
|
|
16
16
|
|
|
17
|
-
s.add_dependency 'ffi', '~> 1.
|
|
17
|
+
s.add_dependency 'ffi', '~> 1.17'
|
|
18
18
|
|
|
19
|
-
s.add_development_dependency '
|
|
20
|
-
s.add_development_dependency 'minitest', '~> 5.16'
|
|
19
|
+
s.add_development_dependency 'minitest', '~> 6.0'
|
|
21
20
|
s.add_development_dependency 'minitest-power_assert', '~> 0.3'
|
|
21
|
+
s.add_development_dependency 'rake', '~> 13.4'
|
|
22
|
+
s.add_development_dependency 'simple-rake-tasks', '~> 0.1'
|
|
22
23
|
end
|
data/lib/harfbuzz/buffer.rb
CHANGED
|
@@ -12,6 +12,12 @@ module Harfbuzz
|
|
|
12
12
|
:var1, :uint32, # private
|
|
13
13
|
:var2, :uint32 # private
|
|
14
14
|
|
|
15
|
+
def inspect
|
|
16
|
+
"<#{self} codepoint = 0x%04x, mask = 0b%032b, cluster = %d>" % [
|
|
17
|
+
codepoint, mask, cluster,
|
|
18
|
+
]
|
|
19
|
+
end
|
|
20
|
+
|
|
15
21
|
def codepoint
|
|
16
22
|
self[:codepoint]
|
|
17
23
|
end
|
|
@@ -37,8 +43,8 @@ module Harfbuzz
|
|
|
37
43
|
|
|
38
44
|
def inspect
|
|
39
45
|
"<#{self} %s>" % [
|
|
40
|
-
%
|
|
41
|
-
"#{k} = #{self[k
|
|
46
|
+
%i{x_advance y_advance x_offset y_offset}.map { |k|
|
|
47
|
+
"#{k} = #{self[k].inspect}"
|
|
42
48
|
}.join(', ')
|
|
43
49
|
]
|
|
44
50
|
end
|
data/lib/harfbuzz/face.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module Harfbuzz
|
|
2
2
|
|
|
3
3
|
typedef :pointer, :hb_face_t
|
|
4
|
+
typedef :uint, :hb_ot_name_id_t
|
|
4
5
|
|
|
5
6
|
attach_function :hb_face_create, [
|
|
6
7
|
:hb_blob_t, # blob
|
|
@@ -10,6 +11,39 @@ module Harfbuzz
|
|
|
10
11
|
attach_function :hb_face_get_index, [:hb_face_t], :uint
|
|
11
12
|
attach_function :hb_face_get_upem, [:hb_face_t], :uint
|
|
12
13
|
attach_function :hb_face_get_glyph_count, [:hb_face_t], :uint
|
|
14
|
+
attach_function :hb_ot_name_get_utf8, [
|
|
15
|
+
:hb_face_t, # face
|
|
16
|
+
:hb_ot_name_id_t, # name_id
|
|
17
|
+
:hb_language_t, # language
|
|
18
|
+
:pointer, # text_size (uint *)
|
|
19
|
+
:pointer, # text (char *)
|
|
20
|
+
], :uint
|
|
21
|
+
|
|
22
|
+
HB_OT_NAME_ID_COPYRIGHT = 0
|
|
23
|
+
HB_OT_NAME_ID_FONT_FAMILY = 1
|
|
24
|
+
HB_OT_NAME_ID_FONT_SUBFAMILY = 2
|
|
25
|
+
HB_OT_NAME_ID_UNIQUE_ID = 3
|
|
26
|
+
HB_OT_NAME_ID_FULL_NAME = 4
|
|
27
|
+
HB_OT_NAME_ID_VERSION_STRING = 5
|
|
28
|
+
HB_OT_NAME_ID_POSTSCRIPT_NAME = 6
|
|
29
|
+
HB_OT_NAME_ID_TRADEMARK = 7
|
|
30
|
+
HB_OT_NAME_ID_MANUFACTURER = 8
|
|
31
|
+
HB_OT_NAME_ID_DESIGNER = 9
|
|
32
|
+
HB_OT_NAME_ID_DESCRIPTION = 10
|
|
33
|
+
HB_OT_NAME_ID_VENDOR_URL = 11
|
|
34
|
+
HB_OT_NAME_ID_DESIGNER_URL = 12
|
|
35
|
+
HB_OT_NAME_ID_LICENSE = 13
|
|
36
|
+
HB_OT_NAME_ID_LICENSE_URL = 14
|
|
37
|
+
HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY = 16
|
|
38
|
+
HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY = 17
|
|
39
|
+
HB_OT_NAME_ID_MAC_FULL_NAME = 18
|
|
40
|
+
HB_OT_NAME_ID_SAMPLE_TEXT = 19
|
|
41
|
+
HB_OT_NAME_ID_CID_FINDFONT_NAME = 20
|
|
42
|
+
HB_OT_NAME_ID_WWS_FAMILY = 21
|
|
43
|
+
HB_OT_NAME_ID_WWS_SUBFAMILY = 22
|
|
44
|
+
HB_OT_NAME_ID_LIGHT_BACKGROUND = 23
|
|
45
|
+
HB_OT_NAME_ID_DARK_BACKGROUND = 24
|
|
46
|
+
HB_OT_NAME_ID_VARIATIONS_PS_PREFIX = 25
|
|
13
47
|
|
|
14
48
|
class Face < Base
|
|
15
49
|
|
|
@@ -33,6 +67,33 @@ module Harfbuzz
|
|
|
33
67
|
Harfbuzz.hb_face_get_glyph_count(@hb_face)
|
|
34
68
|
end
|
|
35
69
|
|
|
70
|
+
MAX_NAME_LEN = 200
|
|
71
|
+
|
|
72
|
+
def name(name_id, language=nil)
|
|
73
|
+
text_size_ptr = FFI::MemoryPointer.new(:uint, 1)
|
|
74
|
+
text_size_ptr.write_uint(MAX_NAME_LEN)
|
|
75
|
+
text_ptr = FFI::MemoryPointer.new(:char, MAX_NAME_LEN) #FIXME: ?
|
|
76
|
+
#FIXME: check result
|
|
77
|
+
Harfbuzz.hb_ot_name_get_utf8(@hb_face, name_id, language, text_size_ptr, text_ptr)
|
|
78
|
+
text_ptr.get_string(0, MAX_NAME_LEN)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def font_family_name(language=nil)
|
|
82
|
+
name(HB_OT_NAME_ID_FONT_FAMILY, language)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def font_subfamily_name(language=nil)
|
|
86
|
+
name(HB_OT_NAME_ID_FONT_SUBFAMILY, language)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def full_name(language=nil)
|
|
90
|
+
name(HB_OT_NAME_ID_FULL_NAME, language)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def postscript_name(language=nil)
|
|
94
|
+
name(HB_OT_NAME_ID_POSTSCRIPT_NAME, language)
|
|
95
|
+
end
|
|
96
|
+
|
|
36
97
|
end
|
|
37
98
|
|
|
38
99
|
end
|
data/lib/harfbuzz/font.rb
CHANGED
|
@@ -138,7 +138,7 @@ module Harfbuzz
|
|
|
138
138
|
|
|
139
139
|
def initialize(face, size=nil)
|
|
140
140
|
@hb_font = Harfbuzz.hb_font_create(face.hb_face)
|
|
141
|
-
|
|
141
|
+
Harfbuzz.hb_font_set_scale(@hb_font, face.upem, face.upem)
|
|
142
142
|
Harfbuzz.hb_font_set_ptem(@hb_font, size) if size
|
|
143
143
|
Harfbuzz.hb_ft_font_set_funcs(@hb_font)
|
|
144
144
|
define_finalizer(:hb_font_destroy, @hb_font)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module Harfbuzz
|
|
2
|
+
|
|
3
|
+
class Language < FFI::Struct
|
|
4
|
+
|
|
5
|
+
layout :code, :char
|
|
6
|
+
|
|
7
|
+
def code
|
|
8
|
+
self[:code]
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def inspect
|
|
12
|
+
"<#{self} code = %d>" % code
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
typedef Language.by_ref, :hb_language_t
|
|
18
|
+
|
|
19
|
+
attach_function :hb_language_get_default, [], :hb_language_t
|
|
20
|
+
attach_function :hb_language_from_string, [:string, :int], :hb_language_t
|
|
21
|
+
attach_function :hb_language_to_string, [:hb_language_t], :string
|
|
22
|
+
attach_function :hb_language_matches, [:hb_language_t, :hb_language_t], :hb_bool_t
|
|
23
|
+
|
|
24
|
+
def self.language_default
|
|
25
|
+
Harfbuzz.hb_language_get_default
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.language_from_string(string)
|
|
29
|
+
Harfbuzz.hb_language_from_string(string, -1)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.language_to_string(language)
|
|
33
|
+
Harfbuzz.hb_language_to_string(language)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
end
|
data/lib/harfbuzz.rb
CHANGED
|
@@ -49,7 +49,9 @@ end
|
|
|
49
49
|
require 'harfbuzz/version'
|
|
50
50
|
require 'harfbuzz/base'
|
|
51
51
|
require 'harfbuzz/blob'
|
|
52
|
+
require 'harfbuzz/buffer'
|
|
53
|
+
require 'harfbuzz/language'
|
|
54
|
+
|
|
52
55
|
require 'harfbuzz/face'
|
|
53
56
|
require 'harfbuzz/font'
|
|
54
|
-
require 'harfbuzz/buffer'
|
|
55
57
|
require 'harfbuzz/shaping'
|
|
@@ -18,6 +18,12 @@ module Harfbuzz
|
|
|
18
18
|
assert { @face.glyph_count > 0 }
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
def test_names
|
|
22
|
+
assert { @face.font_family_name == 'Adobe Caslon Pro' }
|
|
23
|
+
assert { @face.font_subfamily_name == 'Regular' }
|
|
24
|
+
assert { @face.postscript_name == 'ACaslonPro-Regular' }
|
|
25
|
+
end
|
|
26
|
+
|
|
21
27
|
end
|
|
22
28
|
|
|
23
29
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
def test_language_default
|
|
16
|
+
assert { Harfbuzz.language_default.code == 101 }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_language_from_string
|
|
20
|
+
assert { Harfbuzz.language_from_string('en').code == 101 }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_language_to_string
|
|
24
|
+
en = Harfbuzz.language_from_string('en')
|
|
25
|
+
assert { Harfbuzz.language_to_string(en) == 'en' }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: harfbuzz
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.6'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- John Labovitz
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: ffi
|
|
@@ -16,56 +15,70 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1.
|
|
18
|
+
version: '1.17'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - "~>"
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1.
|
|
25
|
+
version: '1.17'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
27
|
+
name: minitest
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
30
|
- - "~>"
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
32
|
+
version: '6.0'
|
|
34
33
|
type: :development
|
|
35
34
|
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
37
|
- - "~>"
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
39
|
+
version: '6.0'
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: minitest
|
|
41
|
+
name: minitest-power_assert
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
44
43
|
requirements:
|
|
45
44
|
- - "~>"
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
46
|
+
version: '0.3'
|
|
48
47
|
type: :development
|
|
49
48
|
prerelease: false
|
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
51
|
- - "~>"
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
53
|
+
version: '0.3'
|
|
55
54
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
55
|
+
name: rake
|
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
|
58
57
|
requirements:
|
|
59
58
|
- - "~>"
|
|
60
59
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
60
|
+
version: '13.4'
|
|
62
61
|
type: :development
|
|
63
62
|
prerelease: false
|
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
64
|
requirements:
|
|
66
65
|
- - "~>"
|
|
67
66
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
67
|
+
version: '13.4'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: simple-rake-tasks
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0.1'
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0.1'
|
|
69
82
|
description: "\n Harfbuzz is a Ruby interface to the Harfbuzz text shaping engine.\n
|
|
70
83
|
\ "
|
|
71
84
|
email: johnl@johnlabovitz.com
|
|
@@ -75,7 +88,6 @@ extra_rdoc_files: []
|
|
|
75
88
|
files:
|
|
76
89
|
- ".gitignore"
|
|
77
90
|
- CHANGELOG.md
|
|
78
|
-
- Gemfile
|
|
79
91
|
- LICENSE.txt
|
|
80
92
|
- README.md
|
|
81
93
|
- Rakefile
|
|
@@ -90,20 +102,20 @@ files:
|
|
|
90
102
|
- lib/harfbuzz/face.rb
|
|
91
103
|
- lib/harfbuzz/ffi_additions.rb
|
|
92
104
|
- lib/harfbuzz/font.rb
|
|
105
|
+
- lib/harfbuzz/language.rb
|
|
93
106
|
- lib/harfbuzz/shaping.rb
|
|
94
107
|
- lib/harfbuzz/version.rb
|
|
108
|
+
- test/blob_test.rb
|
|
109
|
+
- test/face_test.rb
|
|
110
|
+
- test/font_test.rb
|
|
111
|
+
- test/general_test.rb
|
|
95
112
|
- test/helpers.rb
|
|
96
|
-
- test/
|
|
97
|
-
- test/
|
|
98
|
-
- test/test_font.rb
|
|
99
|
-
- test/test_general.rb
|
|
100
|
-
- test/test_shaper.rb
|
|
101
|
-
- test/test_version.rb
|
|
113
|
+
- test/shaper_test.rb
|
|
114
|
+
- test/version_test.rb
|
|
102
115
|
homepage: http://github.com/jslabovitz/harfbuzz-gem
|
|
103
116
|
licenses:
|
|
104
117
|
- MIT
|
|
105
118
|
metadata: {}
|
|
106
|
-
post_install_message:
|
|
107
119
|
rdoc_options: []
|
|
108
120
|
require_paths:
|
|
109
121
|
- lib
|
|
@@ -118,15 +130,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
118
130
|
- !ruby/object:Gem::Version
|
|
119
131
|
version: '0'
|
|
120
132
|
requirements: []
|
|
121
|
-
rubygems_version:
|
|
122
|
-
signing_key:
|
|
133
|
+
rubygems_version: 4.0.11
|
|
123
134
|
specification_version: 4
|
|
124
135
|
summary: Ruby interface to the Harfbuzz text shaping engine
|
|
125
136
|
test_files:
|
|
137
|
+
- test/blob_test.rb
|
|
138
|
+
- test/face_test.rb
|
|
139
|
+
- test/font_test.rb
|
|
140
|
+
- test/general_test.rb
|
|
126
141
|
- test/helpers.rb
|
|
127
|
-
- test/
|
|
128
|
-
- test/
|
|
129
|
-
- test/test_font.rb
|
|
130
|
-
- test/test_general.rb
|
|
131
|
-
- test/test_shaper.rb
|
|
132
|
-
- test/test_version.rb
|
|
142
|
+
- test/shaper_test.rb
|
|
143
|
+
- test/version_test.rb
|
data/Gemfile
DELETED
data/test/test_general.rb
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|