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