1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/rss/rexmlparser.rb
kou 93402a2f17 * lib/rss/parser.rb: added entity handling type predicate.
* lib/rss/rexmlparser.rb: ditto.
* lib/rss/xmlparser.rb: ditto.
* lib/rss/xmlscanner.rb: ditto.

* lib/rss/xmlscanner.rb: more robust entity handling.

* test/rss/test_parser.rb: added an entity handling test.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9602 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-11-23 13:35:11 +00:00

54 lines
1.1 KiB
Ruby

require "rexml/document"
require "rexml/streamlistener"
/\A(\d+)\.(\d+)(?:\.\d+)+\z/ =~ REXML::Version
if ([$1.to_i, $2.to_i] <=> [2, 5]) < 0
raise LoadError, "needs REXML 2.5 or later (#{REXML::Version})"
end
module RSS
class REXMLParser < BaseParser
class << self
def listener
REXMLListener
end
end
private
def _parse
begin
REXML::Document.parse_stream(@rss, @listener)
rescue RuntimeError => e
raise NotWellFormedError.new{e.message}
rescue REXML::ParseException => e
context = e.context
line = context[0] if context
raise NotWellFormedError.new(line){e.message}
end
end
end
class REXMLListener < BaseListener
include REXML::StreamListener
include ListenerMixin
class << self
def raise_for_undefined_entity?
false
end
end
def xmldecl(version, encoding, standalone)
super(version, encoding, standalone == "yes")
# Encoding is converted to UTF-8 when REXML parse XML.
@encoding = 'UTF-8'
end
alias_method(:cdata, :text)
end
end