Sha256: 973a3fbcd4ffc3a9ca4dcd8bd83b2aafbde695ea23c924d292c4c517f94845b9

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

# frozen_string_literal: true

module ChemScanner
  module ChemDraw
    # CDX Graphic parser
    class FontTable < BaseNode
      attr_reader :table

      def initialize(parser_type, data)
        @parser_type = parser_type
        @data = data
      end

      def read
        @parser_type == "cdx" ? read_cdx : read_cdxml
      end

      def read_cdx
        @table = []
        run_count = read_int(@data[2, 2], true)

        iter = 4
        (1..run_count).each do
          font, length = read_cdx_font_attribute(iter)
          @table.push(font)
          iter += 6 + length
        end

        @table
      end

      def read_cdx_font_attribute(iter)
        id = read_int(@data[iter, 2], true)
        charset = read_int(@data[iter + 2, 2], true)
        length = read_int(@data[iter + 4, 2], true)
        name = @data[iter + 6, length]

        [{ id: id, charset: charset, name: name }, length]
      end

      def read_cdxml
        @table = @data.element_children.each_with_object([]) do |font, table|
          next if font.name != "font"

          id = font.attr("id").to_i
          charset = font.attr("charset")
          name = font.attr("name")

          table.push(id: id, charset: charset, name: name)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
chem_scanner-0.1.3 lib/chem_scanner/chem_draw/node/font_table.rb