summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorRandy Morgan <[email protected]>2013-04-28 12:55:46 +0900
committerRandy Morgan <[email protected]>2013-04-28 12:55:46 +0900
commite49aee3e2f700569a519c5346746d239a05383cf (patch)
tree7f449191165a3fbdf05b34c4239dda6ec179d033 /lib
parenta120fdb2e787986ced4952b6ef3f4b70056960d9 (diff)
downloadcaxlsx-e49aee3e2f700569a519c5346746d239a05383cf.tar.gz
caxlsx-e49aee3e2f700569a519c5346746d239a05383cf.zip
Refactored and renamed space preservation
preserve_spaces has been moved to the workbook and renamed xml_space as that provides a good reference for people trying to figure out what it does, and let's the author specify space preservation for serializations using the shared strings table as well as the default inline serialization in cells.
Diffstat (limited to 'lib')
-rw-r--r--lib/axlsx/version.rb2
-rw-r--r--lib/axlsx/workbook/shared_strings_table.rb14
-rw-r--r--lib/axlsx/workbook/workbook.rb20
-rw-r--r--lib/axlsx/workbook/worksheet/worksheet.rb11
-rw-r--r--lib/schema/sml.xsd3
5 files changed, 41 insertions, 9 deletions
diff --git a/lib/axlsx/version.rb b/lib/axlsx/version.rb
index 546f601d..6c9907ab 100644
--- a/lib/axlsx/version.rb
+++ b/lib/axlsx/version.rb
@@ -1,5 +1,5 @@
module Axlsx
# The current version
- VERSION = "1.3.6"
+ VERSION = "1.3.7"
end
diff --git a/lib/axlsx/workbook/shared_strings_table.rb b/lib/axlsx/workbook/shared_strings_table.rb
index 43e8a1a8..f1bee3ae 100644
--- a/lib/axlsx/workbook/shared_strings_table.rb
+++ b/lib/axlsx/workbook/shared_strings_table.rb
@@ -26,10 +26,16 @@ module Axlsx
# @see Cell#sharable
attr_reader :unique_cells
+ # The xml:space attribute
+ # @see Workbook#xml_space
+ attr_reader :xml_space
+
# Creates a new Shared Strings Table agains an array of cells
# @param [Array] cells This is an array of all of the cells in the workbook
- def initialize(cells)
+ # @param [Symbol] xml_space The xml:space behavior for the shared string table.
+ def initialize(cells, xml_space=:preserve)
@index = 0
+ @xml_space = xml_space
@unique_cells = {}
@shared_xml_string = ""
shareable_cells = cells.flatten.select{ |cell| cell.plain_string? }
@@ -40,8 +46,10 @@ module Axlsx
# Serializes the object
# @param [String] str
# @return [String]
- def to_xml_string
- '<?xml version="1.0" encoding="UTF-8"?><sst xmlns="' << XML_NS << '" count="' << @count.to_s << '" uniqueCount="' << unique_count.to_s << '">' << @shared_xml_string << '</sst>'
+ def to_xml_string(str='')
+ str << '<?xml version="1.0" encoding="UTF-8"?><sst xmlns="' << XML_NS << '"'
+ str << ' count="' << @count.to_s << '" uniqueCount="' << unique_count.to_s << '"'
+ str << 'xml:space="' << xml_space.to_s << '>' << @shared_xml_string << '</sst>'
end
private
diff --git a/lib/axlsx/workbook/workbook.rb b/lib/axlsx/workbook/workbook.rb
index e329ae74..1397552a 100644
--- a/lib/axlsx/workbook/workbook.rb
+++ b/lib/axlsx/workbook/workbook.rb
@@ -285,7 +285,25 @@ require 'axlsx/workbook/worksheet/selection.rb'
# generates a shared string object against all cells in all worksheets.
# @return [SharedStringTable]
def shared_strings
- SharedStringsTable.new(worksheets.collect { |ws| ws.cells })
+ SharedStringsTable.new(worksheets.collect { |ws| ws.cells }, xml_space)
+ end
+
+ # The xml:space attribute for the worksheet.
+ # This determines how whitespace is handled withing the document.
+ # The most relevant part being whitespace in the cell text.
+ # allowed values are :preserve and :default. Axlsx uses :preserve unless
+ # you explicily set this to :default.
+ # @return Symbol
+ def xml_space
+ @xml_space ||= :preserve
+ end
+
+ # Sets the xml:space attribute for the worksheet
+ # @see Worksheet#xml_space
+ # @param [Symbol] space must be one of :preserve or :default
+ def xml_space=(space)
+ Axlsx::RestrictionValidator.validate(:xml_space, [:preserve, :default], space)
+ @xml_space = space;
end
# returns a range of cells in a worksheet
diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb
index 36031be7..32e616e2 100644
--- a/lib/axlsx/workbook/worksheet/worksheet.rb
+++ b/lib/axlsx/workbook/worksheet/worksheet.rb
@@ -37,9 +37,9 @@ module Axlsx
@page_setup = PageSetup.new options[:page_setup] if options[:page_setup]
@print_options = PrintOptions.new options[:print_options] if options[:print_options]
@header_footer = HeaderFooter.new options[:header_footer] if options[:header_footer]
- @preserve_spaces = options.fetch(:preserve_spaces, true)
end
+
# The name of the worksheet
# @return [String]
def name
@@ -634,6 +634,11 @@ module Axlsx
end
private
+
+ def xml_space
+ workbook.xml_space
+ end
+
def outline(collection, range, level = 1, collapsed = true)
range.each do |index|
unless (item = collection[index]).nil?
@@ -704,9 +709,7 @@ module Axlsx
# Helper method for parsingout the root node for worksheet
# @return [String]
def worksheet_node
- (@preserve_spaces ?
- "<worksheet xmlns=\"%s\" xmlns:r=\"%s\" xml:space=\"preserve\">" :
- "<worksheet xmlns=\"%s\" xmlns:r=\"%s\">") % [XML_NS, XML_NS_R]
+ "<worksheet xmlns=\"%s\" xmlns:r=\"%s\" xml:space=\"#{xml_space}\">" % [XML_NS, XML_NS_R]
end
def sheet_data
diff --git a/lib/schema/sml.xsd b/lib/schema/sml.xsd
index fa396e80..f3994e0a 100644
--- a/lib/schema/sml.xsd
+++ b/lib/schema/sml.xsd
@@ -13,6 +13,8 @@
<xsd:import
namespace="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"
schemaLocation="dml-spreadsheetDrawing.xsd"/>
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
+
<xsd:complexType name="CT_AutoFilter">
<xsd:sequence>
<xsd:element name="filterColumn" minOccurs="0" maxOccurs="unbounded" type="CT_FilterColumn"/>
@@ -2213,6 +2215,7 @@
<xsd:element name="tableParts" type="CT_TableParts" minOccurs="0" maxOccurs="1"/>
<xsd:element name="extLst" type="CT_ExtensionList" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
+ <xsd:attribute ref="xml:space"/>
</xsd:complexType>
<xsd:complexType name="CT_SheetData">
<xsd:sequence>