dragonfly_harfbuzz 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/dragonfly_harfbuzz/flatten_svg_service.rb +11 -8
- data/lib/dragonfly_harfbuzz/markup_svg_service.rb +5 -2
- data/lib/dragonfly_harfbuzz/processors/hb_view.rb +8 -2
- data/lib/dragonfly_harfbuzz/version.rb +1 -1
- data/test/dragonfly_harfbuzz/flatten_svg_service_test.rb +21 -25
- data/test/dragonfly_harfbuzz/markup_svg_service_test.rb +28 -0
- data/test/dragonfly_harfbuzz/processors/hb_view_test.rb +6 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1980ad4ccc7ad9114e7c1bf7dcedac662c745ca8e6c2b572f224accbd34f26e2
|
4
|
+
data.tar.gz: ce232fa77f208f0a94caed4e019aa5a3d1f5dadc0801b2d26c8d07b38140f447
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7a80f5f1fed5e05abdeb0902ec1e922cf31981ef3b440b68c53e8e46c3d7a7d5ba506d378ae79eb59d26bfbb1d327a4585eebf90b1ae02fbf351f89dd1b68a7
|
7
|
+
data.tar.gz: 3e57c32feba7772d6478e9ea2f6a3e8036f04cc8fb51822169b7762080779f7658e297c7c391c9a942d825fade17b2bad8ac3cd1443d8241b9fe6561aa9eecb3
|
data/CHANGELOG.md
CHANGED
@@ -2,13 +2,16 @@ require 'ox'
|
|
2
2
|
|
3
3
|
module DragonflyHarfbuzz
|
4
4
|
class FlattenSvgService
|
5
|
+
attr_accessor :ox_doc
|
6
|
+
attr_accessor :svg
|
7
|
+
|
5
8
|
def self.call(*args)
|
6
9
|
new(*args).call
|
7
10
|
end
|
8
11
|
|
9
12
|
def initialize(svg)
|
10
13
|
@svg = svg
|
11
|
-
@ox_doc = Ox.parse(
|
14
|
+
@ox_doc = Ox.parse(svg)
|
12
15
|
end
|
13
16
|
|
14
17
|
def call
|
@@ -25,26 +28,26 @@ module DragonflyHarfbuzz
|
|
25
28
|
characters_to_add.each { |char| word << char }
|
26
29
|
end
|
27
30
|
|
28
|
-
lines =
|
31
|
+
lines = ox_doc.locate('g/g').select { |g| g[:class] == 'line' }
|
29
32
|
|
30
33
|
add_lines_to_doc(lines)
|
31
34
|
|
32
|
-
Ox.dump(
|
35
|
+
Ox.dump(ox_doc)
|
33
36
|
end
|
34
37
|
|
35
38
|
private
|
36
39
|
|
37
40
|
def add_lines_to_doc(lines)
|
38
|
-
|
39
|
-
lines.each { |line|
|
41
|
+
ox_doc.nodes.clear
|
42
|
+
lines.each { |line| ox_doc << line }
|
40
43
|
end
|
41
44
|
|
42
45
|
def get_symbols
|
43
|
-
|
46
|
+
ox_doc.locate('defs/g/symbol')
|
44
47
|
end
|
45
48
|
|
46
49
|
def get_words
|
47
|
-
|
50
|
+
ox_doc.locate('g/g/g')
|
48
51
|
end
|
49
52
|
|
50
53
|
def get_characters_from_word(word)
|
@@ -52,7 +55,7 @@ module DragonflyHarfbuzz
|
|
52
55
|
end
|
53
56
|
|
54
57
|
def get_symbol_for_character(character)
|
55
|
-
symbols =
|
58
|
+
symbols = ox_doc.locate('defs/g/symbol')
|
56
59
|
symbol_href = character.attributes[:"xlink:href"].delete('#')
|
57
60
|
symbols.select { |s| s.attributes[:id] == symbol_href }.first
|
58
61
|
end
|
@@ -5,6 +5,9 @@ module DragonflyHarfbuzz
|
|
5
5
|
class MarkupSvgService
|
6
6
|
attr_accessor :ox_doc
|
7
7
|
attr_accessor :text
|
8
|
+
attr_accessor :unicodes
|
9
|
+
attr_accessor :options
|
10
|
+
attr_accessor :svg
|
8
11
|
|
9
12
|
def self.call(*args)
|
10
13
|
new(*args).call
|
@@ -13,7 +16,7 @@ module DragonflyHarfbuzz
|
|
13
16
|
def initialize(text, svg, options = {})
|
14
17
|
@text = text
|
15
18
|
@svg = svg
|
16
|
-
@ox_doc = Ox.parse(
|
19
|
+
@ox_doc = Ox.parse(svg)
|
17
20
|
@options = options
|
18
21
|
end
|
19
22
|
|
@@ -50,7 +53,7 @@ module DragonflyHarfbuzz
|
|
50
53
|
end
|
51
54
|
|
52
55
|
def split_paths?
|
53
|
-
|
56
|
+
options.fetch(:split_paths, true)
|
54
57
|
end
|
55
58
|
|
56
59
|
# FIXME: fix issues with negative paths ('O', 'd', etc.)
|
@@ -39,8 +39,10 @@ module DragonflyHarfbuzz
|
|
39
39
|
if format =~ /svg/i
|
40
40
|
content.update(MarkupSvgService.call((str || str_from_unicodes(unicodes)), content.data, split_paths: split_paths), 'name' => "temp.#{format}") if markup_svg
|
41
41
|
content.update(FlattenSvgService.call(content.data), 'name' => "temp.#{format}") if flatten_svg
|
42
|
-
content.update(DomAttrsService.call(content.data, options[:font_size], options[:margin]), 'name' => "temp.#{format}")
|
42
|
+
content.update(DomAttrsService.call(content.data, options[:font_size], options[:margin]), 'name' => "temp.#{format}") if markup_svg
|
43
43
|
end
|
44
|
+
|
45
|
+
content
|
44
46
|
end
|
45
47
|
|
46
48
|
def update_url(attrs, str = '', options = {})
|
@@ -52,7 +54,11 @@ module DragonflyHarfbuzz
|
|
52
54
|
|
53
55
|
def str_from_unicodes(unicodes)
|
54
56
|
unicodes.split(",").map do |hexstring|
|
55
|
-
|
57
|
+
begin
|
58
|
+
Array(hexstring).pack("H*").force_encoding('utf-16be').encode('utf-8')
|
59
|
+
rescue
|
60
|
+
" "
|
61
|
+
end
|
56
62
|
end.join
|
57
63
|
end
|
58
64
|
|
@@ -1,32 +1,28 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
let(:call) { DragonflyHarfbuzz::FlattenSvgService.call(string, svg) }
|
3
|
+
describe DragonflyHarfbuzz::FlattenSvgService 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) { 'ABC def' }
|
8
|
+
let(:svg) { processor.call(content, string, markup_svg: true, flatten_svg: false).data }
|
9
|
+
let(:result) { DragonflyHarfbuzz::FlattenSvgService.call(svg) }
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
it { content.data.must_include "line=\"#{string}\" class=\"line\"" }
|
16
|
-
end
|
11
|
+
describe 'lines' do
|
12
|
+
it { result.must_include "line=\"#{string}\" class=\"line\"" }
|
13
|
+
end
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
describe 'words' do
|
16
|
+
it { result.must_include '<g word="ABC" class="word">' }
|
17
|
+
it { result.must_include '<g word="def" class="word">' }
|
18
|
+
end
|
22
19
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
20
|
+
describe 'characters' do
|
21
|
+
it { result.must_include '<svg character="A" class="character"' }
|
22
|
+
it { result.must_include '<svg character="B" class="character"' }
|
23
|
+
it { result.must_include '<svg character="C" class="character"' }
|
24
|
+
it { result.must_include '<svg character="d" class="character"' }
|
25
|
+
it { result.must_include '<svg character="e" class="character"' }
|
26
|
+
it { result.must_include '<svg character="f" class="character"' }
|
31
27
|
end
|
32
28
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe DragonflyHarfbuzz::MarkupSvgService 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) { 'ABC def' }
|
8
|
+
let(:svg) { processor.call(content, string).data }
|
9
|
+
let(:result) { DragonflyHarfbuzz::MarkupSvgService.call(string, svg) }
|
10
|
+
|
11
|
+
describe 'lines' do
|
12
|
+
it { result.must_include "line=\"#{string}\" class=\"line\"" }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'words' do
|
16
|
+
it { result.must_include "word=\"ABC\" class=\"word\"" }
|
17
|
+
it { result.must_include "word=\"def\" class=\"word\"" }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'characters' do
|
21
|
+
it { result.must_include "character=\"A\" class=\"character\"" }
|
22
|
+
it { result.must_include "character=\"B\" class=\"character\"" }
|
23
|
+
it { result.must_include "character=\"C\" class=\"character\"" }
|
24
|
+
it { result.must_include "character=\"d\" class=\"character\"" }
|
25
|
+
it { result.must_include "character=\"e\" class=\"character\"" }
|
26
|
+
it { result.must_include "character=\"f\" class=\"character\"" }
|
27
|
+
end
|
28
|
+
end
|
@@ -47,4 +47,10 @@ describe DragonflyHarfbuzz::Processors::HbView do
|
|
47
47
|
before { processor.call(content, string, flatten_svg: true) }
|
48
48
|
it { content.data.wont_include '#glyph0-1' }
|
49
49
|
end
|
50
|
+
|
51
|
+
describe 'str as unicodes' do
|
52
|
+
before { processor.call(content, nil, unicodes: "0042,0043", flatten_svg: true) }
|
53
|
+
it { content.data.must_include "<svg character=\"B\" class=\"character\"" }
|
54
|
+
it { content.data.must_include "<svg character=\"C\" class=\"character\"" }
|
55
|
+
end
|
50
56
|
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.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Celizna
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -176,6 +176,7 @@ files:
|
|
176
176
|
- samples/sample.otf
|
177
177
|
- samples/sample.ttf
|
178
178
|
- test/dragonfly_harfbuzz/flatten_svg_service_test.rb
|
179
|
+
- test/dragonfly_harfbuzz/markup_svg_service_test.rb
|
179
180
|
- test/dragonfly_harfbuzz/plugin_test.rb
|
180
181
|
- test/dragonfly_harfbuzz/processors/hb_view_test.rb
|
181
182
|
- test/test_helper.rb
|
@@ -205,6 +206,7 @@ specification_version: 4
|
|
205
206
|
summary: Harfbuzz renderer wrapped by Dragonfly processors.
|
206
207
|
test_files:
|
207
208
|
- test/dragonfly_harfbuzz/flatten_svg_service_test.rb
|
209
|
+
- test/dragonfly_harfbuzz/markup_svg_service_test.rb
|
208
210
|
- test/dragonfly_harfbuzz/plugin_test.rb
|
209
211
|
- test/dragonfly_harfbuzz/processors/hb_view_test.rb
|
210
212
|
- test/test_helper.rb
|