class DragonflyHarfbuzz::FlattenSvgService
Attributes
ox_doc[RW]
svg[RW]
Public Class Methods
call(*args)
click to toggle source
# File lib/dragonfly_harfbuzz/flatten_svg_service.rb, line 8 def self.call(*args) new(*args).call end
new(svg)
click to toggle source
# File lib/dragonfly_harfbuzz/flatten_svg_service.rb, line 12 def initialize(svg) @svg = svg @ox_doc = Ox.parse(svg) end
Public Instance Methods
call()
click to toggle source
# File lib/dragonfly_harfbuzz/flatten_svg_service.rb, line 17 def call get_words.each do |word| characters_to_add = [] get_characters_from_word(word).each do |character| symbol = get_symbol_for_character(character) characters_to_add << build_character_svg(character, symbol) end word.nodes.clear characters_to_add.each { |char| word << char } end lines = ox_doc.locate('g/g').select { |g| g[:class] == 'line' } add_lines_to_doc(lines) Ox.dump(ox_doc) end
Private Instance Methods
add_lines_to_doc(lines)
click to toggle source
# File lib/dragonfly_harfbuzz/flatten_svg_service.rb, line 40 def add_lines_to_doc(lines) ox_doc.nodes.clear lines.each { |line| ox_doc << line } end
build_character_svg(character, symbol)
click to toggle source
# File lib/dragonfly_harfbuzz/flatten_svg_service.rb, line 63 def build_character_svg(character, symbol) character_svg = Ox::Element.new('svg').tap do |prop| prop[:character] = character[:character] prop[:class] = 'character' prop[:overflow] = 'visible' prop[:x] = character[:x] prop[:y] = character[:y] end symbol.nodes.each do |path| character_svg << path end character_svg end
get_characters_from_word(word)
click to toggle source
# File lib/dragonfly_harfbuzz/flatten_svg_service.rb, line 53 def get_characters_from_word(word) word.locate('use') end
get_symbol_for_character(character)
click to toggle source
# File lib/dragonfly_harfbuzz/flatten_svg_service.rb, line 57 def get_symbol_for_character(character) symbols = ox_doc.locate('defs/g/symbol') symbol_href = character.attributes[:"xlink:href"].delete('#') symbols.select { |s| s.attributes[:id] == symbol_href }.first end
get_symbols()
click to toggle source
# File lib/dragonfly_harfbuzz/flatten_svg_service.rb, line 45 def get_symbols ox_doc.locate('defs/g/symbol') end
get_words()
click to toggle source
# File lib/dragonfly_harfbuzz/flatten_svg_service.rb, line 49 def get_words ox_doc.locate('g/g/g') end