summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRandy Morgan <[email protected]>2012-07-14 11:44:57 +0900
committerRandy Morgan <[email protected]>2012-07-14 11:44:57 +0900
commit113f23af51ceb7fa0aa174f73f185769ac40603b (patch)
tree6c57fb01e6f1642c57b8af5b1eefb0f95c62ebec
parentb1491f9b55b897be115abf86710289beb7be1378 (diff)
downloadcaxlsx-113f23af51ceb7fa0aa174f73f185769ac40603b.tar.gz
caxlsx-113f23af51ceb7fa0aa174f73f185769ac40603b.zip
fix for #112 - encode html entities
-rw-r--r--axlsx.gemspec2
-rw-r--r--lib/axlsx.rb7
-rw-r--r--lib/axlsx/workbook/worksheet/worksheet.rb2
-rw-r--r--test/workbook/worksheet/tc_worksheet.rb5
4 files changed, 14 insertions, 2 deletions
diff --git a/axlsx.gemspec b/axlsx.gemspec
index 569c7590..00ccf36c 100644
--- a/axlsx.gemspec
+++ b/axlsx.gemspec
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
s.add_runtime_dependency 'nokogiri', '>= 1.4.1'
s.add_runtime_dependency 'rubyzip', '>= 0.9.5'
-
+ s.add_runtime_dependency "htmlentities", "~> 4.3.1"
# REQUIRED by Travis-ci please do not alter these lines
s.add_runtime_dependency 'rake', '0.8.7' if RUBY_VERSION == "1.9.2"
s.add_runtime_dependency 'rake', '>= 0.8.7' unless RUBY_VERSION == "1.9.2"
diff --git a/lib/axlsx.rb b/lib/axlsx.rb
index 8f5b4540..b3ba0b52 100644
--- a/lib/axlsx.rb
+++ b/lib/axlsx.rb
@@ -1,4 +1,5 @@
# encoding: UTF-8
+require 'htmlentities'
require 'axlsx/version.rb'
require 'axlsx/util/simple_typed_list.rb'
@@ -47,6 +48,12 @@ module Axlsx
ref
end
+ #global reference html entity encoding
+ # @return [HtmlEntities]
+ def self.coder
+ @@coder ||= ::HTMLEntities.new
+ end
+
# returns the x, y position of a cell
def self.name_to_indices(name)
raise ArgumentError, 'invalid cell name' unless name.size > 1
diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb
index 70762c96..9c87be15 100644
--- a/lib/axlsx/workbook/worksheet/worksheet.rb
+++ b/lib/axlsx/workbook/worksheet/worksheet.rb
@@ -322,6 +322,7 @@ module Axlsx
def name=(v)
DataTypeValidator.validate "Worksheet.name", String, v
raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % v) if v.size > 31
+ v = Axlsx::coder.encode(v)
sheet_names = @workbook.worksheets.map { |s| s.name }
raise ArgumentError, (ERR_DUPLICATE_SHEET_NAME % v) if sheet_names.include?(v)
@name=v
@@ -527,7 +528,6 @@ module Axlsx
# This intentionally does not use nokogiri for performance reasons
# @return [String]
def to_xml_string
- rels = relationships
str = '<?xml version="1.0" encoding="UTF-8"?>'
str << worksheet_node
str << sheet_pr_node
diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb
index c930d06b..37054529 100644
--- a/test/workbook/worksheet/tc_worksheet.rb
+++ b/test/workbook/worksheet/tc_worksheet.rb
@@ -14,6 +14,11 @@ class TestWorksheet < Test::Unit::TestCase
assert_equal(ws.pn, "worksheets/sheet2.xml")
end
+ def test_name_is_html_encoded
+ @ws.name = '<foo> & <bar>'
+ assert_equal(@ws.name, '&lt;foo&gt; &amp; &lt;bar%gt;')
+ end
+
def test_page_margins
assert(@ws.page_margins.is_a? Axlsx::PageMargins)
end