mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
9be1ed43c8
* lib/rss: #to_s used #tag. * test/rss/test_to_s.rb: added. * lib/rss/maker.rb (RSS::Maker.make): changed API. It's not received modules which is used as the second argument. * lib/rss/xml-stylesheet.rb (RSS::XMLStyleSheet#alternate): changed return value type which is not String but Boolean. * lib/rss/2.0.rb (RSS::Rss::Channel#ttl): changed return value type which is not String but Integer. * lib/rss/0.9.rb (RSS::Rss::Channel): <skipDays> has <day>s and <skipHours> has <hour>s. * lib/rss/maker/0.9.rb (RSS::Maker::RSS09::Channel): ditto. * lib/rss/0.9.rb (RSS::Rss::Channel::Item): <item> has <category>s. * lib/rss/maker/2.0.rb (RSS::Maker::Rss20::Channel::Item): ditto. * lib/rss/2.0.rb (RSS::Rss::Channel): <channel> has <category>s. * lib/rss/maker/2.0.rb (RSS::Maker::RSS20::Channel): ditto. * lib/rss/trackback.rb: parent element has <trackback:about>s. * lib/rss/maker/trackback.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
47 lines
1,009 B
Ruby
47 lines
1,009 B
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
|
|
|
|
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(version, encoding, standalone == "yes")
|
|
# Encoding is converted to UTF-8 when REXML parse XML.
|
|
@encoding = 'UTF-8'
|
|
end
|
|
|
|
alias_method(:cdata, :text)
|
|
end
|
|
|
|
end
|