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