diff options
author | Jamis Buck <jamis@37signals.com> | 2005-11-21 20:43:35 +0000 |
---|---|---|
committer | Jamis Buck <jamis@37signals.com> | 2005-11-21 20:43:35 +0000 |
commit | f9b199040c55c26dcd19e4d8077255a24d55b658 (patch) | |
tree | f24feeb8a4f5f115b8ec01ad29a6ecff529dc240 /actionpack/lib/action_controller/vendor | |
parent | f1a184fe880c4ff0db1b003f8f4562728809e1bd (diff) | |
download | rails-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.rb | 13 | ||||
-rw-r--r-- | actionpack/lib/action_controller/vendor/html-scanner/html/tokenizer.rb | 3 |
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 |