lib/goldendocx/documents/styles.rb in goldendocx-0.2.2 vs lib/goldendocx/documents/styles.rb in goldendocx-0.2.3

- old
+ new

@@ -4,46 +4,26 @@ module Documents class Styles include Goldendocx::Document XML_PATH = 'word/styles.xml' + TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles' + CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml' tag :styles namespace :w concern_namespaces :mc, :r, :w, :w14, :w15 ignore_namespaces :w14, :w15 - attr_reader :styles, :doc_defaults, :latent_styles + embeds_one :defaults, class_name: 'Goldendocx::Documents::Properties::DefaultStyleProperty', auto_build: true + embeds_one :latentStyles, class_name: 'Goldendocx::Documents::LatentStyles' + embeds_many :styles, class_name: 'Goldendocx::Documents::Style' - def initialize - @styles = [] - end - def size styles.size end - def read_from(docx_file) - @styles = Goldendocx.xml_serializer.parse(docx_file.read(XML_PATH), %w[w:styles w:style]).map do |node| - Goldendocx::Documents::Style.new(node) - end - @doc_defaults = Goldendocx.xml_serializer.parse(docx_file.read(XML_PATH), %w[w:styles w:docDefaults]).map do |node| - Goldendocx::Documents::UnparsedStyle.new(node) - end - @latent_styles = Goldendocx.xml_serializer.parse(docx_file.read(XML_PATH), %w[w:styles w:latentStyles]).map do |node| - Goldendocx::Documents::UnparsedStyle.new(node) - end - end - - def to_document_xml - super do |xml| - @doc_defaults&.each { |element| xml << element } - @latent_styles&.each { |element| xml << element } - styles.each { |style| xml << style } - end - end - def write_to(zos) zos.put_next_entry XML_PATH zos.write to_document_xml end @@ -58,17 +38,13 @@ styles.find { |s| s.type == 'table' && s.name == style_name } end def add_style(fragment) - # FIXME: Not a good implementation for Nokogiri compatibility - raise NotImplementedError unless Goldendocx.config.xml_serializer == :ox - - style_id = (@styles.size + 1).to_s - style = Goldendocx.xml_serializer.parse(fragment) - style['w:styleId'] = style_id if style['w:styleId'].nil? || style['w:styleId'].empty? - @styles << Goldendocx::Documents::Style.new(style) - style_id + style = Goldendocx::Documents::Style.parse(fragment) + style.id = (styles.size + 1).to_s # Rearrange id to prevent duplicates + styles << style + style.id end end end end