dragonfly_harfbuzz 1.1.3 → 1.1.4
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/.travis.yml +2 -2
- data/CHANGELOG.md +8 -4
- data/README.md +9 -1
- data/dragonfly_harfbuzz.gemspec +1 -2
- data/lib/dragonfly_harfbuzz.rb +1 -0
- data/lib/dragonfly_harfbuzz/processors/hb_view.rb +6 -1
- data/lib/dragonfly_harfbuzz/translate_service.rb +36 -0
- data/lib/dragonfly_harfbuzz/version.rb +1 -1
- data/test/dragonfly_harfbuzz/processors/hb_view_test.rb +12 -0
- data/test/dragonfly_harfbuzz/translate_service_test.rb +14 -0
- metadata +19 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d960dc318684ef2b9f4796075ee08722cd391bfee77584ef024afd79f259ff64
|
4
|
+
data.tar.gz: db194504f7e53563c1d97198cd07eb15dc863e9e5b416774facb6f1050df787b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d10581a86c8f9f41e746a9ce5430b2960aa1bca6c52aad670a651cc9b665977703dedcabb0b3a01646906bd10d2787f3ecee7237336c9d55a35646b3c151b462
|
7
|
+
data.tar.gz: a990bb2433badf1f4a330d54c3f49a305f5feb5991a7340abf00f3c0cb2c66232acc939302a2aff76c8d74c600ebe6c1c35d42bc5892b49de3f240ecf10dbb73
|
data/.travis.yml
CHANGED
@@ -9,8 +9,8 @@ rvm:
|
|
9
9
|
before_install:
|
10
10
|
- gem update bundler
|
11
11
|
- sudo apt-get update
|
12
|
-
- wget --no-check-certificate http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-
|
13
|
-
- cd harfbuzz-
|
12
|
+
- wget --no-check-certificate http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-2.3.0.tar.bz2 && tar -xjf harfbuzz-2.3.0.tar.bz2 --no-same-owner
|
13
|
+
- cd harfbuzz-2.3.0 && sudo ./configure && sudo make && sudo make install && rm -rf harfbuzz*
|
14
14
|
|
15
15
|
notifications:
|
16
16
|
email:
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 1.1.4
|
4
|
+
|
5
|
+
* ADD: `translate` option that translates glyph positions by specified `x` and/or `y` offset
|
6
|
+
|
3
7
|
## 1.1.3
|
4
8
|
|
5
|
-
* make sure that `str` argument to `hb_view` is properly escaped
|
9
|
+
* FIX: make sure that `str` argument to `hb_view` is properly escaped
|
6
10
|
|
7
11
|
## 1.1.2
|
8
12
|
|
@@ -10,7 +14,7 @@
|
|
10
14
|
|
11
15
|
## 1.1.1
|
12
16
|
|
13
|
-
* minor fixes
|
17
|
+
* FIX: minor fixes
|
14
18
|
|
15
19
|
## 1.1.0
|
16
20
|
|
@@ -19,5 +23,5 @@
|
|
19
23
|
|
20
24
|
## 1.0.0
|
21
25
|
|
22
|
-
*
|
23
|
-
*
|
26
|
+
* ADD: `SUPPORTED_FORMATS` and `SUPPORTED_OUTPUT_FORMATS` and raise errors when formats are not matching
|
27
|
+
* ADD: more thorough tests for supported formats
|
data/README.md
CHANGED
@@ -56,7 +56,15 @@ DragonflyHarfbuzz::SUPPORTED_OUTPUT_FORMATS # => ["ansi", "png", "svg", "pdf", "
|
|
56
56
|
|
57
57
|
## Options
|
58
58
|
|
59
|
-
Additionally (for `<svg>` only) you can pass the following options: `markup_svg: Boolean`, `split_paths: Boolean` and `flatten_svg: Boolean`.
|
59
|
+
Additionally (for `<svg>` only) you can pass the following options: `translate: Hash[x: 0, y: 0]`, `markup_svg: Boolean`, `split_paths: Boolean` and `flatten_svg: Boolean`.
|
60
|
+
|
61
|
+
`translate` translates glyph positions by specified `x` and/or `y` offset.
|
62
|
+
|
63
|
+
`markup_svg` returns an `<svg>` that is organized into word and characters and marked up with additional data attributes.
|
64
|
+
|
65
|
+
`flatten_svg` uses the result of `markup_svg` and further cleans up the `<svg>`, replacing the `<symbol>`, `<use>` elements with nested `<svg>`s. This is handy if you want to do some more precise animation/manipulation of the resulting `<svg>`.
|
66
|
+
|
67
|
+
`split_paths` is a feature of the `markup_svg` and controls whether the paths of each character are split up into smaller components.
|
60
68
|
|
61
69
|
## Contributing
|
62
70
|
|
data/dragonfly_harfbuzz.gemspec
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
lib = File.expand_path('lib', __dir__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require 'dragonfly_harfbuzz/version'
|
@@ -23,9 +22,9 @@ Gem::Specification.new do |spec|
|
|
23
22
|
spec.add_dependency 'savage'
|
24
23
|
|
25
24
|
spec.add_development_dependency 'bundler', '~> 1.9'
|
26
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
27
25
|
spec.add_development_dependency 'guard'
|
28
26
|
spec.add_development_dependency 'guard-minitest'
|
29
27
|
spec.add_development_dependency 'minitest'
|
30
28
|
spec.add_development_dependency 'minitest-reporters'
|
29
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
31
30
|
end
|
data/lib/dragonfly_harfbuzz.rb
CHANGED
@@ -4,6 +4,7 @@ require 'active_support/core_ext/object/blank'
|
|
4
4
|
require 'dragonfly_harfbuzz/dom_attrs_service'
|
5
5
|
require 'dragonfly_harfbuzz/flatten_svg_service'
|
6
6
|
require 'dragonfly_harfbuzz/markup_svg_service'
|
7
|
+
require 'dragonfly_harfbuzz/translate_service'
|
7
8
|
|
8
9
|
require 'dragonfly_harfbuzz/plugin'
|
9
10
|
require 'dragonfly_harfbuzz/version'
|
@@ -14,6 +14,10 @@ module DragonflyHarfbuzz
|
|
14
14
|
|
15
15
|
raise UnsupportedOutputFormat unless SUPPORTED_OUTPUT_FORMATS.include?(format.downcase)
|
16
16
|
|
17
|
+
translate = options.fetch('translate', nil)
|
18
|
+
translate_hash = (translate || {}).each_with_object({}) { |(k, v), memo| memo[k.to_s] = v } # stringify keys
|
19
|
+
translate_x = translate_hash.fetch('x', nil)
|
20
|
+
translate_y = translate_hash.fetch('y', nil)
|
17
21
|
flatten_svg = options.fetch('flatten_svg', false)
|
18
22
|
markup_svg = options.fetch('markup_svg', flatten_svg)
|
19
23
|
split_paths = options.fetch('split_paths', false)
|
@@ -27,7 +31,7 @@ module DragonflyHarfbuzz
|
|
27
31
|
|
28
32
|
args << "--text=#{Shellwords.escape(str)}" unless options.key?('unicodes')
|
29
33
|
|
30
|
-
options.reject { |k, _| %w[format markup_svg flatten_svg split_paths].include?(k.to_s) }.each do |k, v|
|
34
|
+
options.reject { |k, _| %w[translate format markup_svg flatten_svg split_paths].include?(k.to_s) }.each do |k, v|
|
31
35
|
args << "--#{k.to_s.tr('_', '-')}=#{Shellwords.escape(v)}" if v.present?
|
32
36
|
end
|
33
37
|
|
@@ -38,6 +42,7 @@ module DragonflyHarfbuzz
|
|
38
42
|
content.ext = format
|
39
43
|
|
40
44
|
if format =~ /svg/i
|
45
|
+
content.update(TranslateService.call(content.data, x: translate_x, y: translate_y), 'name' => "temp.#{format}") if translate
|
41
46
|
content.update(MarkupSvgService.call((str || str_from_unicodes(unicodes)), content.data, split_paths: split_paths), 'name' => "temp.#{format}") if markup_svg
|
42
47
|
content.update(FlattenSvgService.call(content.data), 'name' => "temp.#{format}") if flatten_svg
|
43
48
|
content.update(DomAttrsService.call(content.data, options[:font_size], options[:margin]), 'name' => "temp.#{format}") if markup_svg
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'ox'
|
2
|
+
|
3
|
+
module DragonflyHarfbuzz
|
4
|
+
class TranslateService
|
5
|
+
attr_accessor :ox_doc
|
6
|
+
attr_accessor :svg
|
7
|
+
attr_accessor :x
|
8
|
+
attr_accessor :y
|
9
|
+
|
10
|
+
def self.call(*args)
|
11
|
+
new(*args).call
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(svg, x: 0, y: 0)
|
15
|
+
@svg = svg
|
16
|
+
@x = x.to_f
|
17
|
+
@y = y.to_f
|
18
|
+
@ox_doc = Ox.parse(svg)
|
19
|
+
end
|
20
|
+
|
21
|
+
def call
|
22
|
+
use_definitions.each do |use_definition|
|
23
|
+
use_definition[:x] = use_definition[:x].to_f + x
|
24
|
+
use_definition[:y] = use_definition[:y].to_f + y
|
25
|
+
end
|
26
|
+
|
27
|
+
Ox.dump(ox_doc)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def use_definitions
|
33
|
+
ox_doc.locate('svg/g/g/use[@xlink:href]')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -33,6 +33,18 @@ describe DragonflyHarfbuzz::Processors::HbView do
|
|
33
33
|
it { content.data.must_include 'fill:rgb(100%,0%,100%);' }
|
34
34
|
end
|
35
35
|
|
36
|
+
describe 'translate_x' do
|
37
|
+
let(:string) { 'A' }
|
38
|
+
before { processor.call(content, string, translate: { x: 100 }) }
|
39
|
+
it { content.data.must_include 'x="116.0"' }
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'translate_y' do
|
43
|
+
let(:string) { 'A' }
|
44
|
+
before { processor.call(content, string, translate: { y: 100 }) }
|
45
|
+
it { content.data.must_include 'y="329.5"' }
|
46
|
+
end
|
47
|
+
|
36
48
|
describe 'markup_svg' do
|
37
49
|
before { processor.call(content, string, markup_svg: true) }
|
38
50
|
it { content.data.must_include "word=\"#{string}\"" }
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe DragonflyHarfbuzz::TranslateService do
|
4
|
+
let(:app) { test_app.configure_with(:harfbuzz) }
|
5
|
+
let(:processor) { DragonflyHarfbuzz::Processors::HbView.new }
|
6
|
+
let(:content) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.otf')) }
|
7
|
+
let(:string) { 'A' }
|
8
|
+
let(:svg) { processor.call(content, string).data }
|
9
|
+
let(:font_info) { analyser.call(content) }
|
10
|
+
let(:result) { DragonflyHarfbuzz::TranslateService.call(svg, x: 100, y: 100) }
|
11
|
+
|
12
|
+
it { result.must_include 'x="116.0"' }
|
13
|
+
it { result.must_include 'y="329.5"' }
|
14
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dragonfly_harfbuzz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Celizna
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -81,21 +81,21 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.9'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: guard
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name: guard
|
98
|
+
name: guard-minitest
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: minitest
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name: minitest
|
126
|
+
name: minitest-reporters
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
@@ -137,19 +137,19 @@ dependencies:
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: rake
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "
|
143
|
+
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
145
|
+
version: '10.0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- - "
|
150
|
+
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
152
|
+
version: '10.0'
|
153
153
|
description:
|
154
154
|
email:
|
155
155
|
- tomas.celizna@gmail.com
|
@@ -172,6 +172,7 @@ files:
|
|
172
172
|
- lib/dragonfly_harfbuzz/markup_svg_service.rb
|
173
173
|
- lib/dragonfly_harfbuzz/plugin.rb
|
174
174
|
- lib/dragonfly_harfbuzz/processors/hb_view.rb
|
175
|
+
- lib/dragonfly_harfbuzz/translate_service.rb
|
175
176
|
- lib/dragonfly_harfbuzz/version.rb
|
176
177
|
- samples/sample.otf
|
177
178
|
- samples/sample.ttf
|
@@ -179,6 +180,7 @@ files:
|
|
179
180
|
- test/dragonfly_harfbuzz/markup_svg_service_test.rb
|
180
181
|
- test/dragonfly_harfbuzz/plugin_test.rb
|
181
182
|
- test/dragonfly_harfbuzz/processors/hb_view_test.rb
|
183
|
+
- test/dragonfly_harfbuzz/translate_service_test.rb
|
182
184
|
- test/test_helper.rb
|
183
185
|
homepage: https://github.com/tomasc/dragonfly_harfbuzz
|
184
186
|
licenses:
|
@@ -199,8 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
201
|
- !ruby/object:Gem::Version
|
200
202
|
version: '0'
|
201
203
|
requirements: []
|
202
|
-
|
203
|
-
rubygems_version: 2.7.6
|
204
|
+
rubygems_version: 3.0.1
|
204
205
|
signing_key:
|
205
206
|
specification_version: 4
|
206
207
|
summary: Harfbuzz renderer wrapped by Dragonfly processors.
|
@@ -209,4 +210,5 @@ test_files:
|
|
209
210
|
- test/dragonfly_harfbuzz/markup_svg_service_test.rb
|
210
211
|
- test/dragonfly_harfbuzz/plugin_test.rb
|
211
212
|
- test/dragonfly_harfbuzz/processors/hb_view_test.rb
|
213
|
+
- test/dragonfly_harfbuzz/translate_service_test.rb
|
212
214
|
- test/test_helper.rb
|