dragonfly_harfbuzz 0.0.3 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 938040a9d11a528c6791eacac7035203cc7712e3
4
- data.tar.gz: ab57cbc3008940618ff9ff1141ffbce2b6b60d87
3
+ metadata.gz: 12a1a1d9e43896d972f04db0af8fba629ff01c9a
4
+ data.tar.gz: 57713f254cdf739f93cd407d6662aaef451df471
5
5
  SHA512:
6
- metadata.gz: f5e469b360cdf3fb2cb6b7ae4af1cb61f7625703d4c35a2da08b6349f538df34df29bb1fcd647e1ca40ce339e8a09edeee21619674262f844ad470f1a96b5486
7
- data.tar.gz: cf8ba966b396fc2033ad690f84d26e26ae21bbef39cb9a77ed3f9b7912b1d52ec0fed357d3205016a7a4e10376c44de485ae5880df3203671d12a6543427487c
6
+ metadata.gz: 24c63ab26bbced5fb03be3071c8f0be576573852e2c95780e30068087dfead89dd74c57a1afa4b453cc3f3ddb44b2c2b4cd9e841fd1ebf1ae4aeef3131af668a
7
+ data.tar.gz: e37a54bb7666077687d6f2bb2e0b9e9ead42f6af984a5c62f4c57c453f3f809711d1af2d4869705786460e9e2799a6950727d608e665e562c8440fc2e18080a4
data/README.md CHANGED
@@ -16,7 +16,7 @@ Or install it yourself as:
16
16
 
17
17
  $ gem install dragonfly_harfbuzz
18
18
 
19
- You will also need Harfbuzz installed.
19
+ You will also need Harfbuzz installed.
20
20
 
21
21
  Using [Homebrew](http://brew.sh):
22
22
 
@@ -45,7 +45,7 @@ See tests and `hb-view --help-all` for more details on options.
45
45
 
46
46
  ## Options
47
47
 
48
- Additionally (for `<svg>` only) you can pass two options: `markup_svg: Boolean` and `flatten_svg: Boolean`. `markup_svg` returns an `<svg>` that is organized into word and characters and marked up with additional data attributes. `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>`.
48
+ Additionally (for `<svg>` only) you can pass the following options: `markup_svg: Boolean`, `split_paths: Boolean` and `flatten_svg: Boolean`. `markup_svg` returns an `<svg>` that is organized into word and characters and marked up with additional data attributes. `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>`. `split_paths` is a feature of the `markup_svg` and controls whether the paths of each character are split up into smaller components.
49
49
 
50
50
  ## Contributing
51
51
 
@@ -1,14 +1,12 @@
1
1
  require 'ox'
2
- require 'savage'
3
2
 
4
3
  module DragonflyHarfbuzz
5
4
  class FlattenSvgService
6
-
7
- def self.call *args
8
- self.new(*args).call
5
+ def self.call(*args)
6
+ new(*args).call
9
7
  end
10
8
 
11
- def initialize svg
9
+ def initialize(svg)
12
10
  @svg = svg
13
11
  @ox_doc = Ox.parse(@svg)
14
12
  end
@@ -24,10 +22,10 @@ module DragonflyHarfbuzz
24
22
 
25
23
  word.nodes.clear
26
24
 
27
- characters_to_add.each{ |char| word << char }
25
+ characters_to_add.each { |char| word << char }
28
26
  end
29
27
 
30
- lines = @ox_doc.locate('g/g').select{ |g| g[:class] == 'line' }
28
+ lines = @ox_doc.locate('g/g').select { |g| g[:class] == 'line' }
31
29
 
32
30
  add_lines_to_doc(lines)
33
31
 
@@ -36,44 +34,43 @@ module DragonflyHarfbuzz
36
34
 
37
35
  private # =============================================================
38
36
 
39
- def add_lines_to_doc lines
37
+ def add_lines_to_doc(lines)
40
38
  @ox_doc.nodes.clear
41
-
42
- lines.each{ |line| @ox_doc << line }
39
+ lines.each { |line| @ox_doc << line }
43
40
  end
44
41
 
45
42
  def get_symbols
46
- @ox_doc.locate("defs/g/symbol")
43
+ @ox_doc.locate('defs/g/symbol')
47
44
  end
48
45
 
49
46
  def get_words
50
- @ox_doc.locate("g/g/g")
47
+ @ox_doc.locate('g/g/g')
51
48
  end
52
49
 
53
- def get_characters_from_word word
54
- word.locate("use")
50
+ def get_characters_from_word(word)
51
+ word.locate('use')
55
52
  end
56
53
 
57
- def get_symbol_for_character character
58
- symbols = @ox_doc.locate("defs/g/symbol")
59
- symbol_href = character.attributes[:"xlink:href"].gsub(/\#/, '')
60
-
61
- symbols.select{ |s| s.attributes[:id] == symbol_href }.first
54
+ def get_symbol_for_character(character)
55
+ symbols = @ox_doc.locate('defs/g/symbol')
56
+ symbol_href = character.attributes[:"xlink:href"].delete('#')
57
+ symbols.select { |s| s.attributes[:id] == symbol_href }.first
62
58
  end
63
59
 
64
- def build_character_svg character, symbol
60
+ def build_character_svg(character, symbol)
65
61
  character_svg = Ox::Element.new('svg').tap do |prop|
66
62
  prop[:character] = character[:character]
67
- prop[:class] = "character"
68
- prop[:overflow] = "visible"
63
+ prop[:class] = 'character'
64
+ prop[:overflow] = 'visible'
69
65
  prop[:x] = character[:x]
70
66
  prop[:y] = character[:y]
71
67
  end
72
68
 
73
- symbol.nodes.each{ |path| character_svg << path }
69
+ symbol.nodes.each do |path|
70
+ character_svg << path
71
+ end
74
72
 
75
73
  character_svg
76
74
  end
77
-
78
75
  end
79
76
  end
@@ -3,31 +3,31 @@ require 'savage'
3
3
 
4
4
  module DragonflyHarfbuzz
5
5
  class MarkupSvgService
6
-
7
6
  attr_accessor :ox_doc
8
7
  attr_accessor :text
9
8
 
10
9
  # =====================================================================
11
10
 
12
- def self.call *args
13
- self.new(*args).call
11
+ def self.call(*args)
12
+ new(*args).call
14
13
  end
15
14
 
16
15
  # =====================================================================
17
16
 
18
- def initialize text, svg
17
+ def initialize(text, svg, options = {})
19
18
  @text = text
20
19
  @svg = svg
21
20
  @ox_doc = Ox.parse(@svg)
21
+ @options = options
22
22
  end
23
23
 
24
24
  def call
25
- split_paths
25
+ split_paths if split_paths?
26
26
 
27
27
  lines.each_with_index do |line, index|
28
28
  line_group = ox_doc.locate("svg/g/g[#{index}]").first
29
29
  line_group[:line] = line
30
- line_group[:class] = "line"
30
+ line_group[:class] = 'line'
31
31
 
32
32
  word_groups = []
33
33
  words_in_line(line).each_with_index do |word, word_index|
@@ -46,18 +46,22 @@ module DragonflyHarfbuzz
46
46
  private # =============================================================
47
47
 
48
48
  def lines
49
- text.split /\n+/
49
+ text.split(/\n+/)
50
+ end
51
+
52
+ def words_in_line(line)
53
+ line.split(/(\s+)/)
50
54
  end
51
55
 
52
- def words_in_line line
53
- line.split /(\s+)/
56
+ def split_paths?
57
+ @options.fetch(:split_paths, true)
54
58
  end
55
59
 
56
60
  # ---------------------------------------------------------------------
57
61
 
58
62
  # FIXME: fix issues with negative paths ('O', 'd', etc.)
59
63
  def split_paths
60
- symbols = ox_doc.locate("svg/defs/g/symbol")
64
+ symbols = ox_doc.locate('svg/defs/g/symbol')
61
65
  symbols.each do |symbol|
62
66
  path = symbol.nodes.first
63
67
  parsed_path = Savage::Parser.parse(path[:d])
@@ -69,16 +73,16 @@ module DragonflyHarfbuzz
69
73
  end
70
74
 
71
75
  symbol.nodes.clear
72
- subpath_elements.each { |path| symbol << path }
76
+ subpath_elements.each { |pth| symbol << pth }
73
77
  end
74
78
  end
75
79
 
76
80
  # ---------------------------------------------------------------------
77
81
 
78
- def marked_up_word word, word_index, line, line_group
82
+ def marked_up_word(word, word_index, line, line_group)
79
83
  word_group = Ox::Element.new('g').tap do |prop|
80
84
  prop[:word] = word
81
- prop[:class] = "word"
85
+ prop[:class] = 'word'
82
86
  end
83
87
 
84
88
  previous_words = words_in_line(line)[0...word_index]
@@ -87,7 +91,7 @@ module DragonflyHarfbuzz
87
91
  index_of_first_character = index_offset + 0
88
92
  index_of_last_character = index_offset + word.length - 1
89
93
 
90
- characters = line_group.locate("use")[index_of_first_character..index_of_last_character]
94
+ characters = line_group.locate('use')[index_of_first_character..index_of_last_character]
91
95
 
92
96
  marked_up_characters(characters, word).each do |char|
93
97
  word_group << char
@@ -96,13 +100,12 @@ module DragonflyHarfbuzz
96
100
  word_group
97
101
  end
98
102
 
99
- def marked_up_characters characters, word
103
+ def marked_up_characters(characters, word)
100
104
  characters.each do |character|
101
105
  index = characters.index(character)
102
106
  character[:character] = word[index]
103
- character[:class] = "character"
107
+ character[:class] = 'character'
104
108
  end
105
109
  end
106
-
107
110
  end
108
111
  end
@@ -3,11 +3,11 @@ require 'shellwords'
3
3
  module DragonflyHarfbuzz
4
4
  module Processors
5
5
  class HbView
6
-
7
- def call content, str, opts={}
6
+ def call(content, str, opts = {})
8
7
  format = opts.fetch(:format, :svg)
9
8
  flatten_svg = opts.fetch(:flatten_svg, false)
10
9
  markup_svg = opts.fetch(:markup_svg, flatten_svg)
10
+ split_paths = opts.fetch(:split_paths, true)
11
11
 
12
12
  content.shell_update(ext: format) do |old_path, new_path|
13
13
  args = %W(
@@ -16,8 +16,8 @@ module DragonflyHarfbuzz
16
16
  --output-format=#{format}
17
17
  )
18
18
 
19
- opts.reject{ |k,v| %w(format markup_svg flatten_svg).include?(k.to_s) }.each do |k, v|
20
- args << "--#{k.to_s.gsub('_', '-')}=#{Shellwords.escape(v)}"
19
+ opts.reject { |k, _v| %w(format markup_svg flatten_svg split_paths).include?(k.to_s) }.each do |k, v|
20
+ args << "--#{k.to_s.tr('_', '-')}=#{Shellwords.escape(v)}"
21
21
  end
22
22
 
23
23
  "hb-view #{Shellwords.escape(str)} #{args.join(' ')}"
@@ -29,9 +29,9 @@ module DragonflyHarfbuzz
29
29
  end
30
30
 
31
31
  if format.to_s =~ /svg/i
32
- content.update( DragonflyHarfbuzz::MarkupSvgService.call(str, content.data) ) if markup_svg
33
- content.update( DragonflyHarfbuzz::FlattenSvgService.call(content.data) ) if flatten_svg
34
- content.update( DragonflyHarfbuzz::DomAttrsService.call(content.data, opts[:font_size], opts[:margin]) )
32
+ content.update(DragonflyHarfbuzz::MarkupSvgService.call(str, content.data, split_paths: split_paths)) if markup_svg
33
+ content.update(DragonflyHarfbuzz::FlattenSvgService.call(content.data)) if flatten_svg
34
+ content.update(DragonflyHarfbuzz::DomAttrsService.call(content.data, opts[:font_size], opts[:margin]))
35
35
  end
36
36
 
37
37
  content
@@ -39,11 +39,10 @@ module DragonflyHarfbuzz
39
39
 
40
40
  # ---------------------------------------------------------------------
41
41
 
42
- def update_url(attrs, args='', opts={})
42
+ def update_url(attrs, _args = '', opts = {})
43
43
  format = opts['format']
44
44
  attrs.ext = format if format
45
45
  end
46
-
47
46
  end
48
47
  end
49
48
  end
@@ -1,3 +1,3 @@
1
1
  module DragonflyHarfbuzz
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -2,7 +2,6 @@ require 'minitest_helper'
2
2
 
3
3
  module DragonflyHarfbuzz
4
4
  describe FlattenSvgService do
5
-
6
5
  let(:app) { test_app.configure_with(:harfbuzz) }
7
6
  let(:processor) { DragonflyHarfbuzz::Processors::HbView.new }
8
7
  let(:font) { Dragonfly::Content.new(app, SAMPLES_DIR.join('Inconsolata.otf')) }
@@ -10,12 +9,11 @@ module DragonflyHarfbuzz
10
9
  let(:svg) { processor.call(font, string) }
11
10
  let(:call) { DragonflyHarfbuzz::FlattenSvgService.call(string, svg) }
12
11
 
13
- let(:f_markup) { "<svg character=\"f\" class=\"character\" overflow=\"visible\" x=\"1552\" y=\"229.504\">" }
12
+ let(:f_markup) { '<svg character="f" class="character" overflow="visible" x="1552" y="229.504">' }
14
13
 
15
14
  it 'supports :flatten_svg' do
16
- processor.call(font, string, { flatten_svg: true })
15
+ processor.call(font, string, flatten_svg: true)
17
16
  font.data.sub(f_markup, '').wont_include f_markup
18
17
  end
19
-
20
18
  end
21
19
  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: 0.0.3
4
+ version: 0.0.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: 2015-11-04 00:00:00.000000000 Z
11
+ date: 2016-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dragonfly
@@ -168,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
168
  version: '0'
169
169
  requirements: []
170
170
  rubyforge_project:
171
- rubygems_version: 2.4.8
171
+ rubygems_version: 2.4.5.1
172
172
  signing_key:
173
173
  specification_version: 4
174
174
  summary: Harfbuzz renderer wrapped by Dragonfly processors.