mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
This commit was manufactured by cvs2svn to create branch 'ruby_1_8'.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@5754 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3b72c2d8d9
commit
3e88efe3df
8 changed files with 900 additions and 0 deletions
47
lib/rss/rexmlparser.rb
Normal file
47
lib/rss/rexmlparser.rb
Normal file
|
@ -0,0 +1,47 @@
|
|||
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
|
||||
|
||||
private
|
||||
|
||||
def listener
|
||||
REXMLListener
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
def xmldecl(version, encoding, standalone)
|
||||
super
|
||||
# Encoding is converted to UTF-8 when REXML parse XML.
|
||||
@encoding = 'UTF-8'
|
||||
end
|
||||
|
||||
alias_method(:cdata, :text)
|
||||
end
|
||||
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue