aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/vendor
diff options
context:
space:
mode:
authorJamis Buck <jamis@37signals.com>2005-11-21 20:43:35 +0000
committerJamis Buck <jamis@37signals.com>2005-11-21 20:43:35 +0000
commitf9b199040c55c26dcd19e4d8077255a24d55b658 (patch)
treef24feeb8a4f5f115b8ec01ad29a6ecff529dc240 /actionpack/lib/action_controller/vendor
parentf1a184fe880c4ff0db1b003f8f4562728809e1bd (diff)
downloadrails-f9b199040c55c26dcd19e4d8077255a24d55b658.tar.gz
rails-f9b199040c55c26dcd19e4d8077255a24d55b658.tar.bz2
rails-f9b199040c55c26dcd19e4d8077255a24d55b658.zip
Update html-scanner to handle CDATA sections better. Closes #2970. [Jamis Buck]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3153 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/lib/action_controller/vendor')
-rw-r--r--actionpack/lib/action_controller/vendor/html-scanner/html/node.rb13
-rw-r--r--actionpack/lib/action_controller/vendor/html-scanner/html/tokenizer.rb3
2 files changed, 16 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/vendor/html-scanner/html/node.rb b/actionpack/lib/action_controller/vendor/html-scanner/html/node.rb
index 4f02e2d421..fb961570c4 100644
--- a/actionpack/lib/action_controller/vendor/html-scanner/html/node.rb
+++ b/actionpack/lib/action_controller/vendor/html-scanner/html/node.rb
@@ -150,6 +150,11 @@ module HTML #:nodoc:
end
end
+ if scanner.skip(/!\[CDATA\[/)
+ scanner.scan_until(/\]\]>/)
+ return CDATA.new(parent, line, pos, scanner.pre_match)
+ end
+
closing = ( scanner.scan(/\//) ? :close : nil )
return Text.new(parent, line, pos, content) unless name = scanner.scan(/[\w:]+/)
name.downcase!
@@ -256,6 +261,14 @@ module HTML #:nodoc:
content == node.content
end
end
+
+ # A CDATA node is simply a text node with a specialized way of displaying
+ # itself.
+ class CDATA < Text
+ def to_s
+ "<![CDATA[#{super}]>"
+ end
+ end
# A Tag is any node that represents markup. It may be an opening tag, a
# closing tag, or a self-closing tag. It has a name, and may have a hash of
diff --git a/actionpack/lib/action_controller/vendor/html-scanner/html/tokenizer.rb b/actionpack/lib/action_controller/vendor/html-scanner/html/tokenizer.rb
index ce9d3b2800..b950e84628 100644
--- a/actionpack/lib/action_controller/vendor/html-scanner/html/tokenizer.rb
+++ b/actionpack/lib/action_controller/vendor/html-scanner/html/tokenizer.rb
@@ -52,6 +52,9 @@ module HTML #:nodoc:
if @scanner.scan(/!--/) # comment
tag << @scanner.matched
tag << (@scanner.scan_until(/--\s*>/) || @scanner.scan_until(/\Z/))
+ elsif @scanner.scan(/!\[CDATA\[/)
+ tag << @scanner.matched
+ tag << @scanner.scan_until(/\]\]>/)
elsif @scanner.scan(/!/) # doctype
tag << @scanner.matched
tag << consume_quoted_regions