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/xmlscanner.rb
kou 9be1ed43c8 * lib/rss/rss.rb (RSS::VERSION): 0.1.0 -> 0.1.1.
* 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
2004-11-19 08:25:25 +00:00

102 lines
1.7 KiB
Ruby

require 'xmlscan/scanner'
module RSS
class XMLScanParser < BaseParser
private
def listener
XMLScanListener
end
def _parse
begin
XMLScan::XMLScanner.new(@listener).parse(@rss)
rescue XMLScan::Error => e
raise NotWellFormedError.new(e.lineno){e.message}
end
end
end
class XMLScanListener < BaseListener
include XMLScan::Visitor
include ListenerMixin
ENTITIES = {
'lt' => '<',
'gt' => '>',
'amp' => '&',
'quot' => '"',
'apos' => '\''
}
def on_xmldecl_version(str)
@version = str
end
def on_xmldecl_encoding(str)
@encoding = str
end
def on_xmldecl_standalone(str)
@standalone = str
end
def on_xmldecl_end
xmldecl(@version, @encoding, @standalone == "yes")
end
alias_method(:on_pi, :instruction)
alias_method(:on_chardata, :text)
alias_method(:on_cdata, :text)
def on_etag(name)
tag_end(name)
end
def on_entityref(ref)
text(ENTITIES[ref])
end
def on_charref(code)
text([code].pack('U'))
end
alias_method(:on_charref_hex, :on_charref)
def on_stag(name)
@attrs = {}
end
def on_attribute(name)
@attrs[name] = @current_attr = ''
end
def on_attr_value(str)
@current_attr << str
end
def on_attr_entityref(ref)
@current_attr << ENTITIES[ref]
end
def on_attr_charref(code)
@current_attr << [code].pack('U')
end
alias_method(:on_attr_charref_hex, :on_attr_charref)
def on_stag_end(name)
tag_start(name, @attrs)
end
def on_stag_end_empty(name)
tag_start(name, @attrs)
tag_end(name)
end
end
end