summaryrefslogtreecommitdiff
path: root/lib/rss
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rss')
-rw-r--r--lib/rss/0.9.rb661
-rw-r--r--lib/rss/1.0.rb650
-rw-r--r--lib/rss/2.0.rb167
-rw-r--r--lib/rss/content.rb52
-rw-r--r--lib/rss/converter.rb155
-rw-r--r--lib/rss/dublincore.rb64
-rw-r--r--lib/rss/maker.rb35
-rw-r--r--lib/rss/maker/0.9.rb224
-rw-r--r--lib/rss/maker/1.0.rb202
-rw-r--r--lib/rss/maker/2.0.rb168
-rw-r--r--lib/rss/maker/base.rb522
-rw-r--r--lib/rss/maker/content.rb29
-rw-r--r--lib/rss/maker/dublincore.rb47
-rw-r--r--lib/rss/maker/syndication.rb27
-rw-r--r--lib/rss/maker/trackback.rb126
-rw-r--r--lib/rss/parser.rb402
-rw-r--r--lib/rss/rexmlparser.rb47
-rw-r--r--lib/rss/rss.rb858
-rw-r--r--lib/rss/syndication.rb85
-rw-r--r--lib/rss/taxonomy.rb32
-rw-r--r--lib/rss/trackback.rb298
-rw-r--r--lib/rss/utils.rb17
-rw-r--r--lib/rss/xml-stylesheet.rb101
-rw-r--r--lib/rss/xmlparser.rb91
-rw-r--r--lib/rss/xmlscanner.rb102
25 files changed, 0 insertions, 5162 deletions
diff --git a/lib/rss/0.9.rb b/lib/rss/0.9.rb
deleted file mode 100644
index 797a46ca3b..0000000000
--- a/lib/rss/0.9.rb
+++ /dev/null
@@ -1,661 +0,0 @@
-require "rss/parser"
-
-module RSS
-
- module RSS09
- NSPOOL = {}
- ELEMENTS = []
-
- def self.append_features(klass)
- super
-
- klass.install_must_call_validator('', nil)
- end
- end
-
- class Rss < Element
-
- include RSS09
- include RootElementMixin
- include XMLStyleSheetMixin
-
- [
- ["channel", nil],
- ].each do |tag, occurs|
- install_model(tag, occurs)
- end
-
- %w(channel).each do |x|
- install_have_child_element(x)
- end
-
- attr_accessor :rss_version, :version, :encoding, :standalone
-
- def initialize(rss_version, version=nil, encoding=nil, standalone=nil)
- super
- end
-
- def items
- if @channel
- @channel.items
- else
- []
- end
- end
-
- def image
- if @channel
- @channel.image
- else
- nil
- end
- end
-
- def textinput
- if @channel
- @channel.textInput
- else
- nil
- end
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent, ns_declarations) do |next_indent|
- [
- channel_element(false, next_indent),
- other_element(false, next_indent),
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def children
- [@channel]
- end
-
- def _tags
- [
- [nil, 'channel'],
- ].delete_if {|x| send(x[1]).nil?}
- end
-
- def _attrs
- [
- ["version", true, "rss_version"],
- ]
- end
-
- class Channel < Element
-
- include RSS09
-
- [
- ["title", nil],
- ["link", nil],
- ["description", nil],
- ["language", nil],
- ["copyright", "?"],
- ["managingEditor", "?"],
- ["webMaster", "?"],
- ["rating", "?"],
- ["docs", "?"],
- ].each do |x, occurs|
- install_text_element(x)
- install_model(x, occurs)
- end
-
- [
- ["pubDate", "?"],
- ["lastBuildDate", "?"],
- ].each do |x, occurs|
- install_date_element(x, 'rfc822')
- install_model(x, occurs)
- end
-
- [
- ["skipDays", "?"],
- ["skipHours", "?"],
- ["image", nil],
- ["textInput", "?"],
- ].each do |x, occurs|
- install_have_child_element(x)
- install_model(x, occurs)
- end
-
- [
- ["cloud", "?"]
- ].each do |x, occurs|
- install_have_attribute_element(x)
- install_model(x, occurs)
- end
-
- [
- ["item", "*"]
- ].each do |x, occurs|
- install_have_children_element(x)
- install_model(x, occurs)
- end
-
- def initialize()
- super()
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- title_element(false, next_indent),
- link_element(false, next_indent),
- description_element(false, next_indent),
- language_element(false, next_indent),
- copyright_element(false, next_indent),
- managingEditor_element(false, next_indent),
- webMaster_element(false, next_indent),
- rating_element(false, next_indent),
- pubDate_element(false, next_indent),
- lastBuildDate_element(false, next_indent),
- docs_element(false, next_indent),
- cloud_element(false, next_indent),
- skipDays_element(false, next_indent),
- skipHours_element(false, next_indent),
- image_element(false, next_indent),
- item_elements(false, next_indent),
- textInput_element(false, next_indent),
- other_element(false, next_indent),
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def children
- [@skipDays, @skipHours, @image, @textInput, @cloud, *@item]
- end
-
- def _tags
- rv = [
- "title",
- "link",
- "description",
- "language",
- "copyright",
- "managingEditor",
- "webMaster",
- "rating",
- "docs",
- "skipDays",
- "skipHours",
- "image",
- "textInput",
- "cloud",
- ].delete_if do |x|
- send(x).nil?
- end.collect do |elem|
- [nil, elem]
- end
-
- @item.each do
- rv << [nil, "item"]
- end
-
- rv
- end
-
- def maker_target(maker)
- maker.channel
- end
-
- def setup_maker_elements(channel)
- super
- [
- [skipDays, "day"],
- [skipHours, "hour"],
- ].each do |skip, key|
- if skip
- skip.__send__("#{key}s").each do |val|
- target_skips = channel.__send__("skip#{key.capitalize}s")
- new_target = target_skips.__send__("new_#{key}")
- new_target.content = val.content
- end
- end
- end
- end
-
- class SkipDays < Element
- include RSS09
-
- [
- ["day", "*"]
- ].each do |x, occurs|
- install_have_children_element(x)
- install_model(x, occurs)
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- day_elements(false, next_indent)
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def children
- @day
- end
-
- def _tags
- @day.compact.collect do
- [nil, "day"]
- end
- end
-
- class Day < Element
- include RSS09
-
- content_setup
-
- def initialize(content=nil)
- super()
- @content = content
- end
-
- end
-
- end
-
- class SkipHours < Element
- include RSS09
-
- [
- ["hour", "*"]
- ].each do |x, occurs|
- install_have_children_element(x)
- install_model(x, occurs)
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- hour_elements(false, next_indent)
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def children
- @hour
- end
-
- def _tags
- @hour.compact.collect do
- [nil, "hour"]
- end
- end
-
- class Hour < Element
- include RSS09
-
- content_setup
-
- def initialize(content=nil)
- super()
- @content = content
- end
-
- remove_method :content=
- def content=(value)
- @content = value.to_i
- end
-
- end
-
- end
-
- class Image < Element
-
- include RSS09
-
- %w(url title link).each do |x|
- install_text_element(x)
- install_model(x, nil)
- end
- %w(width height description).each do |x|
- install_text_element(x)
- install_model(x, "?")
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- url_element(false, next_indent),
- title_element(false, next_indent),
- link_element(false, next_indent),
- width_element(false, next_indent),
- height_element(false, next_indent),
- description_element(false, next_indent),
- other_element(false, next_indent),
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _tags
- %w(url title link width height description).delete_if do |x|
- send(x).nil?
- end.collect do |elem|
- [nil, elem]
- end
- end
-
- def maker_target(maker)
- maker.image
- end
- end
-
- class Cloud < Element
-
- include RSS09
-
- [
- ["domain", nil, true],
- ["port", nil, true],
- ["path", nil, true],
- ["registerProcedure", nil, true],
- ["protocol", nil ,true],
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- def initialize(domain=nil, port=nil, path=nil, rp=nil, protocol=nil)
- super()
- @domain = domain
- @port = port
- @path = path
- @registerProcedure = rp
- @protocol = protocol
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent)
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _attrs
- %w(domain port path registerProcedure protocol).collect do |attr|
- [attr, true]
- end
- end
-
- end
-
- class Item < Element
-
- include RSS09
-
- %w(title link description).each do |x|
- install_text_element(x)
- end
-
- %w(source enclosure).each do |x|
- install_have_child_element(x)
- end
-
- [
- %w(category categories),
- ].each do |name, plural_name|
- install_have_children_element(name, plural_name)
- end
-
- [
- ["title", '?'],
- ["link", '?'],
- ["description", '?'],
- ["category", '*'],
- ["source", '?'],
- ["enclosure", '?'],
- ].each do |tag, occurs|
- install_model(tag, occurs)
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- title_element(false, next_indent),
- link_element(false, next_indent),
- description_element(false, next_indent),
- category_elements(false, next_indent),
- source_element(false, next_indent),
- enclosure_element(false, next_indent),
- other_element(false, next_indent),
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def children
- [@source, @enclosure, *@category].compact
- end
-
- def _tags
- rv = %w(title link description author comments
- source enclosure).delete_if do |x|
- send(x).nil?
- end.collect do |x|
- [nil, x]
- end
-
- @category.each do
- rv << [nil, "category"]
- end
-
- rv
- end
-
- def maker_target(maker)
- maker.items.new_item
- end
-
- def setup_maker_element(item)
- super
- @enclosure.setup_maker(item) if @enclosure
- @source.setup_maker(item) if @source
- end
-
- class Source < Element
-
- include RSS09
-
- [
- ["url", nil, true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- content_setup
-
- def initialize(url=nil, content=nil)
- super()
- @url = url
- @content = content
- end
-
- private
- def _tags
- []
- end
-
- def _attrs
- [
- ["url", true]
- ]
- end
-
-
- def maker_target(item)
- item.source
- end
-
- def setup_maker_attributes(source)
- source.url = url
- source.content = content
- end
- end
-
- class Enclosure < Element
-
- include RSS09
-
- [
- ["url", nil, true],
- ["length", nil, true],
- ["type", nil, true],
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- def initialize(url=nil, length=nil, type=nil)
- super()
- @url = url
- @length = length
- @type = type
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent)
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _attrs
- [
- ["url", true],
- ["length", true],
- ["type", true],
- ]
- end
-
- def maker_target(item)
- item.enclosure
- end
-
- def setup_maker_attributes(enclosure)
- enclosure.url = url
- enclosure.length = length
- enclosure.type = type
- end
- end
-
- class Category < Element
-
- include RSS09
-
- [
- ["domain", nil, true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- content_setup
-
- def initialize(domain=nil, content=nil)
- super()
- @domain = domain
- @content = content
- end
-
- private
- def _attrs
- [
- ["domain", true]
- ]
- end
-
- def maker_target(item)
- item.new_category
- end
-
- def setup_maker_attributes(category)
- category.domain = domain
- category.content = content
- end
-
- end
-
- end
-
- class TextInput < Element
-
- include RSS09
-
- %w(title description name link).each do |x|
- install_text_element(x)
- install_model(x, nil)
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- title_element(false, next_indent),
- description_element(false, next_indent),
- name_element(false, next_indent),
- link_element(false, next_indent),
- other_element(false, next_indent),
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _tags
- %w(title description name link).each do |x|
- send(x).nil?
- end.collect do |elem|
- [nil, elem]
- end
- end
-
- def maker_target(maker)
- maker.textinput
- end
- end
-
- end
-
- end
-
- RSS09::ELEMENTS.each do |x|
- BaseListener.install_get_text_element(x, nil, "#{x}=")
- end
-
- module ListenerMixin
- private
- def start_rss(tag_name, prefix, attrs, ns)
- check_ns(tag_name, prefix, ns, nil)
-
- @rss = Rss.new(attrs['version'], @version, @encoding, @standalone)
- @rss.do_validate = @do_validate
- @rss.xml_stylesheets = @xml_stylesheets
- @last_element = @rss
- @proc_stack.push Proc.new { |text, tags|
- @rss.validate_for_stream(tags) if @do_validate
- }
- end
-
- end
-
-end
diff --git a/lib/rss/1.0.rb b/lib/rss/1.0.rb
deleted file mode 100644
index 0e3e66ea95..0000000000
--- a/lib/rss/1.0.rb
+++ /dev/null
@@ -1,650 +0,0 @@
-require "rss/parser"
-
-module RSS
-
- module RSS10
- NSPOOL = {}
- ELEMENTS = []
-
- def self.append_features(klass)
- super
-
- klass.install_must_call_validator('', ::RSS::URI)
- end
-
- end
-
- class RDF < Element
-
- include RSS10
- include RootElementMixin
-
- class << self
-
- def required_uri
- URI
- end
-
- end
-
- @tag_name = 'RDF'
-
- PREFIX = 'rdf'
- URI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-
- install_ns('', ::RSS::URI)
- install_ns(PREFIX, URI)
-
- [
- ["channel", nil],
- ["image", "?"],
- ["item", "+"],
- ["textinput", "?"],
- ].each do |tag, occurs|
- install_model(tag, occurs)
- end
-
- %w(channel image textinput).each do |x|
- install_have_child_element(x)
- end
-
- install_have_children_element("item")
-
- attr_accessor :rss_version, :version, :encoding, :standalone
-
- def initialize(version=nil, encoding=nil, standalone=nil)
- super('1.0', version, encoding, standalone)
- end
-
- def full_name
- tag_name_with_prefix(PREFIX)
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent, ns_declarations) do |next_indent|
- [
- channel_element(false, next_indent),
- image_element(false, next_indent),
- item_elements(false, next_indent),
- textinput_element(false, next_indent),
- other_element(false, next_indent),
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def rdf_validate(tags)
- _validate(tags, [])
- end
-
- def children
- [@channel, @image, @textinput, *@item]
- end
-
- def _tags
- rv = [
- [::RSS::URI, "channel"],
- [::RSS::URI, "image"],
- ].delete_if {|x| send(x[1]).nil?}
- @item.each do |x|
- rv << [::RSS::URI, "item"]
- end
- rv << [::RSS::URI, "textinput"] if @textinput
- rv
- end
-
- class Seq < Element
-
- include RSS10
-
- class << self
-
- def required_uri
- URI
- end
-
- end
-
- @tag_name = 'Seq'
-
- install_have_children_element("li")
-
- install_must_call_validator('rdf', ::RSS::RDF::URI)
-
- def initialize(li=[])
- super()
- @li = li
- end
-
- def to_s(convert=true, indent=calc_indent)
- tag(indent) do |next_indent|
- [
- li_elements(convert, next_indent),
- other_element(convert, next_indent),
- ]
- end
- end
-
- def full_name
- tag_name_with_prefix(PREFIX)
- end
-
- private
- def children
- @li
- end
-
- def rdf_validate(tags)
- _validate(tags, [["li", '*']])
- end
-
- def _tags
- rv = []
- @li.each do |x|
- rv << [URI, "li"]
- end
- rv
- end
-
- end
-
- class Li < Element
-
- include RSS10
-
- class << self
-
- def required_uri
- URI
- end
-
- end
-
- [
- ["resource", [URI, nil], true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- def initialize(resource=nil)
- super()
- @resource = resource
- end
-
- def full_name
- tag_name_with_prefix(PREFIX)
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent)
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _attrs
- [
- ["resource", true]
- ]
- end
-
- end
-
- class Channel < Element
-
- include RSS10
-
- class << self
-
- def required_uri
- ::RSS::URI
- end
-
- end
-
- [
- ["about", URI, true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- %w(title link description).each do |x|
- install_text_element(x)
- end
-
- %w(image items textinput).each do |x|
- install_have_child_element(x)
- end
-
- [
- ['title', nil],
- ['link', nil],
- ['description', nil],
- ['image', '?'],
- ['items', nil],
- ['textinput', '?'],
- ].each do |tag, occurs|
- install_model(tag, occurs)
- end
-
- def initialize(about=nil)
- super()
- @about = about
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- title_element(false, next_indent),
- link_element(false, next_indent),
- description_element(false, next_indent),
- image_element(false, next_indent),
- items_element(false, next_indent),
- textinput_element(false, next_indent),
- other_element(false, next_indent),
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def children
- [@image, @items, @textinput]
- end
-
- def _tags
- [
- [::RSS::URI, 'title'],
- [::RSS::URI, 'link'],
- [::RSS::URI, 'description'],
- [::RSS::URI, 'image'],
- [::RSS::URI, 'items'],
- [::RSS::URI, 'textinput'],
- ].delete_if do |x|
- send(x[1]).nil?
- end
- end
-
- def _attrs
- [
- ["#{PREFIX}:about", true, "about"]
- ]
- end
-
- def maker_target(maker)
- maker.channel
- end
-
- def setup_maker_attributes(channel)
- channel.about = self.about
- end
-
- class Image < Element
-
- include RSS10
-
- class << self
-
- def required_uri
- ::RSS::URI
- end
-
- end
-
- [
- ["resource", URI, true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- def initialize(resource=nil)
- super()
- @resource = resource
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent)
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _attrs
- [
- ["#{PREFIX}:resource", true, "resource"]
- ]
- end
- end
-
- class Textinput < Element
-
- include RSS10
-
- class << self
-
- def required_uri
- ::RSS::URI
- end
-
- end
-
- [
- ["resource", URI, true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- def initialize(resource=nil)
- super()
- @resource = resource
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent)
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _attrs
- [
- ["#{PREFIX}:resource", true, "resource"]
- ]
- end
- end
-
- class Items < Element
-
- include RSS10
-
- Seq = ::RSS::RDF::Seq
- class Seq
- unless const_defined?(:Li)
- Li = ::RSS::RDF::Li
- end
- end
-
- class << self
-
- def required_uri
- ::RSS::URI
- end
-
- end
-
- install_have_child_element("Seq")
-
- install_must_call_validator('rdf', ::RSS::RDF::URI)
-
- def initialize(seq=Seq.new)
- super()
- @Seq = seq
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- Seq_element(convert, next_indent),
- other_element(convert, next_indent),
- ]
- end
- end
-
- private
- def children
- [@Seq]
- end
-
- private
- def _tags
- rv = []
- rv << [URI, 'Seq'] unless @Seq.nil?
- rv
- end
-
- def rdf_validate(tags)
- _validate(tags, [["Seq", nil]])
- end
-
- end
-
- end
-
- class Image < Element
-
- include RSS10
-
- class << self
-
- def required_uri
- ::RSS::URI
- end
-
- end
-
- [
- ["about", URI, true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- %w(title url link).each do |x|
- install_text_element(x)
- end
-
- [
- ['title', nil],
- ['url', nil],
- ['link', nil],
- ].each do |tag, occurs|
- install_model(tag, occurs)
- end
-
- def initialize(about=nil)
- super()
- @about = about
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- title_element(false, next_indent),
- url_element(false, next_indent),
- link_element(false, next_indent),
- other_element(false, next_indent),
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _tags
- [
- [::RSS::URI, 'title'],
- [::RSS::URI, 'url'],
- [::RSS::URI, 'link'],
- ].delete_if do |x|
- send(x[1]).nil?
- end
- end
-
- def _attrs
- [
- ["#{PREFIX}:about", true, "about"]
- ]
- end
-
- def maker_target(maker)
- maker.image
- end
- end
-
- class Item < Element
-
- include RSS10
-
- class << self
-
- def required_uri
- ::RSS::URI
- end
-
- end
-
- [
- ["about", URI, true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- %w(title link description).each do |x|
- install_text_element(x)
- end
-
- [
- ["title", nil],
- ["link", nil],
- ["description", "?"],
- ].each do |tag, occurs|
- install_model(tag, occurs)
- end
-
- def initialize(about=nil)
- super()
- @about = about
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- title_element(false, next_indent),
- link_element(false, next_indent),
- description_element(false, next_indent),
- other_element(false, next_indent),
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _tags
- [
- [::RSS::URI, 'title'],
- [::RSS::URI, 'link'],
- [::RSS::URI, 'description'],
- ].delete_if do |x|
- send(x[1]).nil?
- end
- end
-
- def _attrs
- [
- ["#{PREFIX}:about", true, "about"]
- ]
- end
-
- def maker_target(maker)
- maker.items.new_item
- end
- end
-
- class Textinput < Element
-
- include RSS10
-
- class << self
-
- def required_uri
- ::RSS::URI
- end
-
- end
-
- [
- ["about", URI, true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- %w(title description name link).each do |x|
- install_text_element(x)
- end
-
- [
- ["title", nil],
- ["description", nil],
- ["name", nil],
- ["link", nil],
- ].each do |tag, occurs|
- install_model(tag, occurs)
- end
-
- def initialize(about=nil)
- super()
- @about = about
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent) do |next_indent|
- [
- title_element(false, next_indent),
- description_element(false, next_indent),
- name_element(false, next_indent),
- link_element(false, next_indent),
- other_element(false, next_indent),
- ]
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _tags
- [
- [::RSS::URI, 'title'],
- [::RSS::URI, 'description'],
- [::RSS::URI, 'name'],
- [::RSS::URI, 'link'],
- ].delete_if do |x|
- send(x[1]).nil?
- end
- end
-
- def _attrs
- [
- ["#{PREFIX}:about", true, "about"]
- ]
- end
-
- def maker_target(maker)
- maker.textinput
- end
- end
-
- end
-
- RSS10::ELEMENTS.each do |x|
- BaseListener.install_get_text_element(x, URI, "#{x}=")
- end
-
- module ListenerMixin
- private
- def start_RDF(tag_name, prefix, attrs, ns)
- check_ns(tag_name, prefix, ns, RDF::URI)
-
- @rss = RDF.new(@version, @encoding, @standalone)
- @rss.do_validate = @do_validate
- @rss.xml_stylesheets = @xml_stylesheets
- @last_element = @rss
- @proc_stack.push Proc.new { |text, tags|
- @rss.validate_for_stream(tags) if @do_validate
- }
- end
- end
-
-end
diff --git a/lib/rss/2.0.rb b/lib/rss/2.0.rb
deleted file mode 100644
index 19cb487d79..0000000000
--- a/lib/rss/2.0.rb
+++ /dev/null
@@ -1,167 +0,0 @@
-require "rss/0.9"
-
-module RSS
-
- class Rss
-
- class Channel
-
- %w(generator ttl).each do |x|
- install_text_element(x)
- install_model(x, '?')
- end
-
- remove_method :ttl=
- def ttl=(value)
- @ttl = value.to_i
- end
-
- [
- %w(category categories),
- ].each do |name, plural_name|
- install_have_children_element(name, plural_name)
- install_model(name, '*')
- end
-
- [
- ["image", "?"],
- ["language", "?"],
- ].each do |x, occurs|
- install_model(x, occurs)
- end
-
- def other_element(convert, indent)
- rv = <<-EOT
-#{category_elements(convert, indent)}
-#{generator_element(convert, indent)}
-#{ttl_element(convert, indent)}
-EOT
- rv << super
- end
-
- private
- alias children09 children
- def children
- children09 + @category.compact
- end
-
- alias _tags09 _tags
- def _tags
- rv = %w(generator ttl).delete_if do |x|
- send(x).nil?
- end.collect do |elem|
- [nil, elem]
- end + _tags09
-
- @category.each do
- rv << [nil, "category"]
- end
-
- rv
- end
-
- Category = Item::Category
-
- class Item
-
- [
- ["comments", "?"],
- ["author", "?"],
- ].each do |x, occurs|
- install_text_element(x)
- install_model(x, occurs)
- end
-
- [
- ["pubDate", '?'],
- ].each do |x, occurs|
- install_date_element(x, 'rfc822')
- install_model(x, occurs)
- end
-
- [
- ["guid", '?'],
- ].each do |x, occurs|
- install_have_child_element(x)
- install_model(x, occurs)
- end
-
- def other_element(convert, indent)
- rv = [
- super,
- *%w(author comments pubDate guid).collect do |name|
- __send__("#{name}_element", false, indent)
- end
- ].reject do |value|
- /\A\s*\z/.match(value)
- end
- rv.join("\n")
- end
-
- private
- alias children09 children
- def children
- children09 + [@guid].compact
- end
-
- alias _tags09 _tags
- def _tags
- %w(comments author pubDate guid).delete_if do |x|
- send(x).nil?
- end.collect do |elem|
- [nil, elem]
- end + _tags09
- end
-
- alias _setup_maker_element setup_maker_element
- def setup_maker_element(item)
- _setup_maker_element(item)
- @guid.setup_maker(item) if @guid
- end
-
- class Guid < Element
-
- include RSS09
-
- [
- ["isPermaLink", nil, false]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- content_setup
-
- def initialize(isPermaLink=nil, content=nil)
- super()
- @isPermaLink = isPermaLink
- @content = content
- end
-
- private
- def _attrs
- [
- ["isPermaLink", false]
- ]
- end
-
- def maker_target(item)
- item.guid
- end
-
- def setup_maker_attributes(guid)
- guid.isPermaLink = isPermaLink
- guid.content = content
- end
- end
-
- end
-
- end
-
- end
-
- RSS09::ELEMENTS.each do |x|
- BaseListener.install_get_text_element(x, nil, "#{x}=")
- end
-
-end
diff --git a/lib/rss/content.rb b/lib/rss/content.rb
deleted file mode 100644
index 280bbb8d6b..0000000000
--- a/lib/rss/content.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-require "rss/1.0"
-
-module RSS
-
- CONTENT_PREFIX = 'content'
- CONTENT_URI = "http://purl.org/rss/1.0/modules/content/"
-
- RDF.install_ns(CONTENT_PREFIX, CONTENT_URI)
-
- module ContentModel
-
- extend BaseModel
-
- ELEMENTS = []
-
- def self.append_features(klass)
- super
-
- klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1))
- %w(encoded).each do |x|
- install_text_element("\#{CONTENT_PREFIX}_\#{x}")
- end
- EOC
- end
-
- def content_validate(tags)
- counter = {}
- ELEMENTS.each do |x|
- counter[x] = 0
- end
-
- tags.each do |tag|
- key = "#{CONTENT_PREFIX}_#{tag}"
- raise UnknownTagError.new(tag, CONTENT_URI) unless counter.has_key?(key)
- counter[key] += 1
- raise TooMuchTagError.new(tag, tag_name) if counter[key] > 1
- end
- end
-
- end
-
- class RDF
- class Item; include ContentModel; end
- end
-
- prefix_size = CONTENT_PREFIX.size + 1
- ContentModel::ELEMENTS.uniq!
- ContentModel::ELEMENTS.each do |x|
- BaseListener.install_get_text_element(x[prefix_size..-1], CONTENT_URI, "#{x}=")
- end
-
-end
diff --git a/lib/rss/converter.rb b/lib/rss/converter.rb
deleted file mode 100644
index 7ad79db318..0000000000
--- a/lib/rss/converter.rb
+++ /dev/null
@@ -1,155 +0,0 @@
-require "rss/utils"
-
-module RSS
-
- class Converter
-
- include Utils
-
- def initialize(to_enc, from_enc=nil)
- normalized_to_enc = to_enc.downcase.gsub(/-/, '_')
- from_enc ||= 'utf-8'
- normalized_from_enc = from_enc.downcase.gsub(/-/, '_')
- if normalized_to_enc == normalized_from_enc
- def_same_enc()
- else
- def_diff_enc = "def_to_#{normalized_to_enc}_from_#{normalized_from_enc}"
- if respond_to?(def_diff_enc)
- __send__(def_diff_enc)
- else
- def_else_enc(to_enc, from_enc)
- end
- end
- end
-
- def convert(value)
- value
- end
-
- def def_convert(depth=0)
- instance_eval(<<-EOC, *get_file_and_line_from_caller(depth))
- def convert(value)
- if value.kind_of?(String)
- #{yield('value')}
- else
- value
- end
- end
- EOC
- end
-
- def def_iconv_convert(to_enc, from_enc, depth=0)
- begin
- require "iconv"
- @iconv = Iconv.new(to_enc, from_enc)
- def_convert(depth+1) do |value|
- <<-EOC
- begin
- @iconv.iconv(#{value})
- rescue Iconv::Failure
- raise ConversionError.new(#{value}, "#{to_enc}", "#{from_enc}")
- end
- EOC
- end
- rescue LoadError, ArgumentError, SystemCallError
- raise UnknownConversionMethodError.new(to_enc, from_enc)
- end
- end
-
- def def_else_enc(to_enc, from_enc)
- def_iconv_convert(to_enc, from_enc, 0)
- end
-
- def def_same_enc()
- def_convert do |value|
- value
- end
- end
-
- def def_uconv_convert_if_can(meth, to_enc, from_enc)
- begin
- require "uconv"
- def_convert(1) do |value|
- <<-EOC
- begin
- Uconv.#{meth}(#{value})
- rescue Uconv::Error
- raise ConversionError.new(#{value}, "#{to_enc}", "#{from_enc}")
- end
- EOC
- end
- rescue LoadError
- def_iconv_convert(to_enc, from_enc, 1)
- end
- end
-
- def def_to_euc_jp_from_utf_8
- def_uconv_convert_if_can('u8toeuc', 'EUC-JP', 'UTF-8')
- end
-
- def def_to_utf_8_from_euc_jp
- def_uconv_convert_if_can('euctou8', 'UTF-8', 'EUC-JP')
- end
-
- def def_to_shift_jis_from_utf_8
- def_uconv_convert_if_can('u8tosjis', 'Shift_JIS', 'UTF-8')
- end
-
- def def_to_utf_8_from_shift_jis
- def_uconv_convert_if_can('sjistou8', 'UTF-8', 'Shift_JIS')
- end
-
- def def_to_euc_jp_from_shift_jis
- require "nkf"
- def_convert do |value|
- "NKF.nkf('-Se', #{value})"
- end
- end
-
- def def_to_shift_jis_from_euc_jp
- require "nkf"
- def_convert do |value|
- "NKF.nkf('-Es', #{value})"
- end
- end
-
- def def_to_euc_jp_from_iso_2022_jp
- require "nkf"
- def_convert do |value|
- "NKF.nkf('-Je', #{value})"
- end
- end
-
- def def_to_iso_2022_jp_from_euc_jp
- require "nkf"
- def_convert do |value|
- "NKF.nkf('-Ej', #{value})"
- end
- end
-
- def def_to_utf_8_from_iso_8859_1
- def_convert do |value|
- "#{value}.unpack('C*').pack('U*')"
- end
- end
-
- def def_to_iso_8859_1_from_utf_8
- def_convert do |value|
- <<-EOC
- array_utf8 = #{value}.unpack('U*')
- array_enc = []
- array_utf8.each do |num|
- if num <= 0xFF
- array_enc << num
- else
- array_enc.concat "&\#\#{num};".unpack('C*')
- end
- end
- array_enc.pack('C*')
- EOC
- end
- end
-
- end
-
-end
diff --git a/lib/rss/dublincore.rb b/lib/rss/dublincore.rb
deleted file mode 100644
index 7ea9cf31dd..0000000000
--- a/lib/rss/dublincore.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-require "rss/1.0"
-
-module RSS
-
- DC_PREFIX = 'dc'
- DC_URI = "http://purl.org/dc/elements/1.1/"
-
- RDF.install_ns(DC_PREFIX, DC_URI)
-
- module DublinCoreModel
-
- extend BaseModel
-
- ELEMENTS = []
-
- def self.append_features(klass)
- super
-
- klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1))
- %w(title description creator subject publisher
- contributor type format identifier source
- language relation coverage rights).each do |x|
- install_text_element("\#{DC_PREFIX}_\#{x}")
- end
-
- %w(date).each do |x|
- install_date_element("\#{DC_PREFIX}_\#{x}", 'w3cdtf', x)
- end
- EOC
- end
-
- def dc_validate(tags)
- counter = {}
- ELEMENTS.each do |x|
- counter[x] = 0
- end
-
- tags.each do |tag|
- key = "#{DC_PREFIX}_#{tag}"
- raise UnknownTagError.new(tag, DC_URI) unless counter.has_key?(key)
- counter[key] += 1
- raise TooMuchTagError.new(tag, tag_name) if counter[key] > 1
- end
- end
-
- end
-
- # For backward compatibility
- DublincoreModel = DublinCoreModel
-
- class RDF
- class Channel; include DublinCoreModel; end
- class Image; include DublinCoreModel; end
- class Item; include DublinCoreModel; end
- class Textinput; include DublinCoreModel; end
- end
-
- prefix_size = DC_PREFIX.size + 1
- DublinCoreModel::ELEMENTS.uniq!
- DublinCoreModel::ELEMENTS.each do |x|
- BaseListener.install_get_text_element(x[prefix_size..-1], DC_URI, "#{x}=")
- end
-
-end
diff --git a/lib/rss/maker.rb b/lib/rss/maker.rb
deleted file mode 100644
index 66c3bc2928..0000000000
--- a/lib/rss/maker.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require "rss/rss"
-
-module RSS
-
- module Maker
-
- MAKERS = {}
-
- class << self
- def make(version, &block)
- maker(version).make(&block)
- end
-
- def maker(version)
- MAKERS[version]
- end
-
- def add_maker(version, maker)
- MAKERS[version] = maker
- end
-
- def filename_to_version(filename)
- File.basename(filename, ".*")
- end
- end
- end
-
-end
-
-require "rss/maker/1.0"
-require "rss/maker/2.0"
-require "rss/maker/content"
-require "rss/maker/dublincore"
-require "rss/maker/syndication"
-require "rss/maker/trackback"
diff --git a/lib/rss/maker/0.9.rb b/lib/rss/maker/0.9.rb
deleted file mode 100644
index b82585fb96..0000000000
--- a/lib/rss/maker/0.9.rb
+++ /dev/null
@@ -1,224 +0,0 @@
-require "rss/0.9"
-
-require "rss/maker/base"
-
-module RSS
- module Maker
-
- class RSS09 < RSSBase
-
- def initialize(rss_version="0.91")
- super
- end
-
- private
- def make_rss
- Rss.new(@rss_version, @version, @encoding, @standalone)
- end
-
- def setup_elements(rss)
- setup_channel(rss)
- end
-
- class Channel < ChannelBase
-
- def to_rss(rss)
- channel = Rss::Channel.new
- set = setup_values(channel)
- if set
- rss.channel = channel
- setup_items(rss)
- setup_image(rss)
- setup_textinput(rss)
- setup_other_elements(rss)
- if rss.channel.image
- rss
- else
- nil
- end
- elsif variable_is_set?
- raise NotSetError.new("maker.channel", not_set_required_variables)
- end
- end
-
- def have_required_values?
- @title and @link and @description and @language
- end
-
- private
- def setup_items(rss)
- @maker.items.to_rss(rss)
- end
-
- def setup_image(rss)
- @maker.image.to_rss(rss)
- end
-
- def setup_textinput(rss)
- @maker.textinput.to_rss(rss)
- end
-
- def variables
- super + ["pubDate"]
- end
-
- def required_variable_names
- %w(title link description language)
- end
-
- class SkipDays < SkipDaysBase
- def to_rss(rss, channel)
- unless @days.empty?
- skipDays = Rss::Channel::SkipDays.new
- channel.skipDays = skipDays
- @days.each do |day|
- day.to_rss(rss, skipDays.days)
- end
- end
- end
-
- class Day < DayBase
- def to_rss(rss, days)
- day = Rss::Channel::SkipDays::Day.new
- set = setup_values(day)
- if set
- days << day
- setup_other_elements(rss)
- end
- end
-
- def have_required_values?
- @content
- end
- end
- end
-
- class SkipHours < SkipHoursBase
- def to_rss(rss, channel)
- unless @hours.empty?
- skipHours = Rss::Channel::SkipHours.new
- channel.skipHours = skipHours
- @hours.each do |hour|
- hour.to_rss(rss, skipHours.hours)
- end
- end
- end
-
- class Hour < HourBase
- def to_rss(rss, hours)
- hour = Rss::Channel::SkipHours::Hour.new
- set = setup_values(hour)
- if set
- hours << hour
- setup_other_elements(rss)
- end
- end
-
- def have_required_values?
- @content
- end
- end
- end
-
- class Cloud < CloudBase
- def to_rss(*args)
- end
- end
-
- class Categories < CategoriesBase
- def to_rss(*args)
- end
-
- class Category < CategoryBase
- end
- end
- end
-
- class Image < ImageBase
- def to_rss(rss)
- image = Rss::Channel::Image.new
- set = setup_values(image)
- if set
- image.link = link
- rss.channel.image = image
- setup_other_elements(rss)
- end
- end
-
- def have_required_values?
- @url and @title and link
- end
- end
-
- class Items < ItemsBase
- def to_rss(rss)
- if rss.channel
- normalize.each do |item|
- item.to_rss(rss)
- end
- setup_other_elements(rss)
- end
- end
-
- class Item < ItemBase
- def to_rss(rss)
- item = Rss::Channel::Item.new
- set = setup_values(item)
- if set
- rss.items << item
- setup_other_elements(rss)
- end
- end
-
- private
- def have_required_values?
- @title and @link
- end
-
- class Guid < GuidBase
- def to_rss(*args)
- end
- end
-
- class Enclosure < EnclosureBase
- def to_rss(*args)
- end
- end
-
- class Source < SourceBase
- def to_rss(*args)
- end
- end
-
- class Categories < CategoriesBase
- def to_rss(*args)
- end
-
- class Category < CategoryBase
- end
- end
-
- end
- end
-
- class Textinput < TextinputBase
- def to_rss(rss)
- textInput = Rss::Channel::TextInput.new
- set = setup_values(textInput)
- if set
- rss.channel.textInput = textInput
- setup_other_elements(rss)
- end
- end
-
- private
- def have_required_values?
- @title and @description and @name and @link
- end
- end
- end
-
- add_maker(filename_to_version(__FILE__), RSS09)
- add_maker(filename_to_version(__FILE__) + "1", RSS09)
- end
-end
diff --git a/lib/rss/maker/1.0.rb b/lib/rss/maker/1.0.rb
deleted file mode 100644
index e38a2f89e0..0000000000
--- a/lib/rss/maker/1.0.rb
+++ /dev/null
@@ -1,202 +0,0 @@
-require "rss/1.0"
-
-require "rss/maker/base"
-
-module RSS
- module Maker
-
- class RSS10 < RSSBase
-
- def initialize
- super("1.0")
- end
-
- private
- def make_rss
- RDF.new(@version, @encoding, @standalone)
- end
-
- def setup_elements(rss)
- setup_channel(rss)
- setup_image(rss)
- setup_items(rss)
- setup_textinput(rss)
- end
-
- class Channel < ChannelBase
-
- def to_rss(rss)
- set = false
- if @about
- channel = RDF::Channel.new(@about)
- set = setup_values(channel)
- if set
- rss.channel = channel
- setup_items(rss)
- setup_image(rss)
- setup_textinput(rss)
- setup_other_elements(rss)
- end
- end
-
- if (!@about or !set) and variable_is_set?
- raise NotSetError.new("maker.channel", not_set_required_variables)
- end
- end
-
- def have_required_values?
- @about and @title and @link and @description
- end
-
- private
- def setup_items(rss)
- items = RDF::Channel::Items.new
- seq = items.Seq
- @maker.items.normalize.each do |item|
- seq.lis << RDF::Channel::Items::Seq::Li.new(item.link)
- end
- rss.channel.items = items
- end
-
- def setup_image(rss)
- if @maker.image.have_required_values?
- rss.channel.image = RDF::Channel::Image.new(@maker.image.url)
- end
- end
-
- def setup_textinput(rss)
- if @maker.textinput.have_required_values?
- textinput = RDF::Channel::Textinput.new(@maker.textinput.link)
- rss.channel.textinput = textinput
- end
- end
-
- def required_variable_names
- %w(about title link description)
- end
-
- class SkipDays < SkipDaysBase
- def to_rss(*args)
- end
-
- class Day < DayBase
- end
- end
-
- class SkipHours < SkipHoursBase
- def to_rss(*args)
- end
-
- class Hour < HourBase
- end
- end
-
- class Cloud < CloudBase
- def to_rss(*args)
- end
- end
-
- class Categories < CategoriesBase
- def to_rss(*args)
- end
-
- class Category < CategoryBase
- end
- end
- end
-
- class Image < ImageBase
- def to_rss(rss)
- if @url
- image = RDF::Image.new(@url)
- set = setup_values(image)
- if set
- rss.image = image
- setup_other_elements(rss)
- end
- end
- end
-
- def have_required_values?
- @url and @title and link and @maker.channel.have_required_values?
- end
-
- private
- def variables
- super + ["link"]
- end
- end
-
- class Items < ItemsBase
- def to_rss(rss)
- if rss.channel
- normalize.each do |item|
- item.to_rss(rss)
- end
- setup_other_elements(rss)
- end
- end
-
- class Item < ItemBase
- def to_rss(rss)
- if @link
- item = RDF::Item.new(@link)
- set = setup_values(item)
- if set
- rss.items << item
- setup_other_elements(rss)
- end
- end
- end
-
- def have_required_values?
- @title and @link
- end
-
- class Guid < GuidBase
- def to_rss(*args)
- end
- end
-
- class Enclosure < EnclosureBase
- def to_rss(*args)
- end
- end
-
- class Source < SourceBase
- def to_rss(*args)
- end
- end
-
- class Categories < CategoriesBase
- def to_rss(*args)
- end
-
- class Category < CategoryBase
- end
- end
- end
- end
-
- class Textinput < TextinputBase
- def to_rss(rss)
- if @link
- textinput = RDF::Textinput.new(@link)
- set = setup_values(textinput)
- if set
- rss.textinput = textinput
- setup_other_elements(rss)
- end
- end
- end
-
- def have_required_values?
- @title and @description and @name and @link and
- @maker.channel.have_required_values?
- end
- end
- end
-
- add_maker(filename_to_version(__FILE__), RSS10)
- end
-end
diff --git a/lib/rss/maker/2.0.rb b/lib/rss/maker/2.0.rb
deleted file mode 100644
index a958661614..0000000000
--- a/lib/rss/maker/2.0.rb
+++ /dev/null
@@ -1,168 +0,0 @@
-require "rss/2.0"
-
-require "rss/maker/0.9"
-
-module RSS
- module Maker
-
- class RSS20 < RSS09
-
- def initialize(rss_version="2.0")
- super
- end
-
- class Channel < RSS09::Channel
-
- def have_required_values?
- @title and @link and @description
- end
-
- def required_variable_names
- %w(title link description)
- end
-
- class SkipDays < RSS09::Channel::SkipDays
- class Day < RSS09::Channel::SkipDays::Day
- end
- end
-
- class SkipHours < RSS09::Channel::SkipHours
- class Hour < RSS09::Channel::SkipHours::Hour
- end
- end
-
- class Cloud < RSS09::Channel::Cloud
- def to_rss(rss, channel)
- cloud = Rss::Channel::Cloud.new
- set = setup_values(cloud)
- if set
- channel.cloud = cloud
- setup_other_elements(rss)
- end
- end
-
- def have_required_values?
- @domain and @port and @path and
- @registerProcedure and @protocol
- end
- end
-
- class Categories < RSS09::Channel::Categories
- def to_rss(rss, channel)
- @categories.each do |category|
- category.to_rss(rss, channel)
- end
- end
-
- class Category < RSS09::Channel::Categories::Category
- def to_rss(rss, channel)
- category = Rss::Channel::Category.new
- set = setup_values(category)
- if set
- channel.categories << category
- setup_other_elements(rss)
- end
- end
-
- def have_required_values?
- @content
- end
- end
- end
-
- end
-
- class Image < RSS09::Image
- end
-
- class Items < RSS09::Items
-
- class Item < RSS09::Items::Item
-
- def have_required_values?
- @title or @description
- end
-
- private
- def variables
- super + ["pubDate"]
- end
-
- class Guid < RSS09::Items::Item::Guid
- def to_rss(rss, item)
- guid = Rss::Channel::Item::Guid.new
- set = setup_values(guid)
- if set
- item.guid = guid
- setup_other_elements(rss)
- end
- end
-
- def have_required_values?
- @content
- end
- end
-
- class Enclosure < RSS09::Items::Item::Enclosure
- def to_rss(rss, item)
- enclosure = Rss::Channel::Item::Enclosure.new
- set = setup_values(enclosure)
- if set
- item.enclosure = enclosure
- setup_other_elements(rss)
- end
- end
-
- def have_required_values?
- @url and @length and @type
- end
- end
-
- class Source < RSS09::Items::Item::Source
- def to_rss(rss, item)
- source = Rss::Channel::Item::Source.new
- set = setup_values(source)
- if set
- item.source = source
- setup_other_elements(rss)
- end
- end
-
- def have_required_values?
- @url and @content
- end
- end
-
- class Categories < RSS09::Items::Item::Categories
- def to_rss(rss, item)
- @categories.each do |category|
- category.to_rss(rss, item)
- end
- end
-
- class Category < RSS09::Items::Item::Categories::Category
- def to_rss(rss, item)
- category = Rss::Channel::Item::Category.new
- set = setup_values(category)
- if set
- item.categories << category
- setup_other_elements(rss)
- end
- end
-
- def have_required_values?
- @content
- end
- end
- end
- end
-
- end
-
- class Textinput < RSS09::Textinput
- end
- end
-
- add_maker(filename_to_version(__FILE__), RSS20)
- end
-end
diff --git a/lib/rss/maker/base.rb b/lib/rss/maker/base.rb
deleted file mode 100644
index 93f668beff..0000000000
--- a/lib/rss/maker/base.rb
+++ /dev/null
@@ -1,522 +0,0 @@
-require 'forwardable'
-
-require 'rss/rss'
-
-module RSS
- module Maker
-
- module Base
-
- def self.append_features(klass)
- super
-
- klass.module_eval(<<-EOC, __FILE__, __LINE__)
-
- OTHER_ELEMENTS = []
- NEED_INITIALIZE_VARIABLES = []
-
- def self.inherited(subclass)
- subclass.const_set("OTHER_ELEMENTS", [])
- subclass.const_set("NEED_INITIALIZE_VARIABLES", [])
-
- subclass.module_eval(<<-EOEOC, __FILE__, __LINE__)
- def self.other_elements
- const_get("OTHER_ELEMENTS") + super
- end
-
- def self.need_initialize_variables
- const_get("NEED_INITIALIZE_VARIABLES") + super
- end
- EOEOC
- end
-
- def self.add_other_element(variable_name)
- const_get("OTHER_ELEMENTS") << variable_name
- end
-
- def self.other_elements
- OTHER_ELEMENTS
- end
-
- def self.add_need_initialize_variable(variable_name, init_value="nil")
- const_get("NEED_INITIALIZE_VARIABLES") << [variable_name, init_value]
- end
-
- def self.need_initialize_variables
- NEED_INITIALIZE_VARIABLES
- end
-
- def self.def_array_element(name)
- include Enumerable
- extend Forwardable
-
- def_delegators("@\#{name}", :<<, :[], :[]=, :first, :last)
- def_delegators("@\#{name}", :push, :pop, :shift, :unshift)
- def_delegators("@\#{name}", :each)
-
- add_need_initialize_variable(name, "[]")
- end
- EOC
- end
-
- def initialize(maker)
- @maker = maker
- initialize_variables
- end
-
- def have_required_values?
- true
- end
-
- private
- def initialize_variables
- self.class.need_initialize_variables.each do |variable_name, init_value|
- instance_eval("@#{variable_name} = #{init_value}", __FILE__, __LINE__)
- end
- end
-
- def setup_other_elements(rss)
- self.class.other_elements.each do |element|
- __send__("setup_#{element}", rss, current_element(rss))
- end
- end
-
- def setup_values(target)
- set = false
- if have_required_values?
- variables.each do |var|
- setter = "#{var}="
- if target.respond_to?(setter)
- value = self.__send__(var)
- if value
- target.__send__(setter, value)
- set = true
- end
- end
- end
- end
- set
- end
-
- def variables
- self.class.need_initialize_variables.find_all do |name, init|
- "nil" == init
- end.collect do |name, init|
- name
- end
- end
-
- def variable_is_set?
- variables.find {|var| !__send__(var).nil?}
- end
-
- def not_set_required_variables
- required_variable_names.find_all do |var|
- __send__(var).nil?
- end
- end
-
- def required_variables_are_set?
- required_variable_names.each do |var|
- return false if __send__(var).nil?
- end
- true
- end
-
- end
-
- class RSSBase
- include Base
-
- class << self
- def make(&block)
- new.make(&block)
- end
- end
-
- %w(xml_stylesheets channel image items textinput).each do |element|
- attr_reader element
- add_need_initialize_variable(element, "make_#{element}")
- module_eval(<<-EOC, __FILE__, __LINE__)
- private
- def setup_#{element}(rss)
- @#{element}.to_rss(rss)
- end
-
- def make_#{element}
- self.class::#{element[0,1].upcase}#{element[1..-1]}.new(self)
- end
-EOC
- end
-
- attr_reader :rss_version
- attr_accessor :version, :encoding, :standalone
-
- def initialize(rss_version)
- super(self)
- @rss_version = rss_version
- @version = "1.0"
- @encoding = "UTF-8"
- @standalone = nil
- end
-
- def make
- if block_given?
- yield(self)
- to_rss
- else
- nil
- end
- end
-
- def to_rss
- rss = make_rss
- setup_xml_stylesheets(rss)
- setup_elements(rss)
- setup_other_elements(rss)
- if rss.channel
- rss
- else
- nil
- end
- end
-
- def current_element(rss)
- rss
- end
-
- private
- remove_method :make_xml_stylesheets
- def make_xml_stylesheets
- XMLStyleSheets.new(self)
- end
-
- end
-
- class XMLStyleSheets
- include Base
-
- def_array_element("xml_stylesheets")
-
- def to_rss(rss)
- @xml_stylesheets.each do |xss|
- xss.to_rss(rss)
- end
- end
-
- def new_xml_stylesheet
- xss = XMLStyleSheet.new(@maker)
- @xml_stylesheets << xss
- xss
- end
-
- class XMLStyleSheet
- include Base
-
- ::RSS::XMLStyleSheet::ATTRIBUTES.each do |attribute|
- attr_accessor attribute
- add_need_initialize_variable(attribute)
- end
-
- def to_rss(rss)
- xss = ::RSS::XMLStyleSheet.new
- guess_type_if_need(xss)
- set = setup_values(xss)
- if set
- rss.xml_stylesheets << xss
- end
- end
-
- def have_required_values?
- @href and @type
- end
-
- private
- def guess_type_if_need(xss)
- if @type.nil?
- xss.href = @href
- @type = xss.type
- end
- end
- end
- end
-
- class ChannelBase
- include Base
-
- %w(cloud categories skipDays skipHours).each do |element|
- attr_reader element
- add_other_element(element)
- add_need_initialize_variable(element, "make_#{element}")
- module_eval(<<-EOC, __FILE__, __LINE__)
- private
- def setup_#{element}(rss, current)
- @#{element}.to_rss(rss, current)
- end
-
- def make_#{element}
- self.class::#{element[0,1].upcase}#{element[1..-1]}.new(@maker)
- end
-EOC
- end
-
- %w(about title link description language copyright
- managingEditor webMaster rating docs date
- lastBuildDate generator ttl).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
-
- alias_method(:pubDate, :date)
- alias_method(:pubDate=, :date=)
-
- def current_element(rss)
- rss.channel
- end
-
- class SkipDaysBase
- include Base
-
- def_array_element("days")
-
- def new_day
- day = self.class::Day.new(@maker)
- @days << day
- day
- end
-
- def current_element(rss)
- rss.channel.skipDays
- end
-
- class DayBase
- include Base
-
- %w(content).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
-
- def current_element(rss)
- rss.channel.skipDays.last
- end
-
- end
- end
-
- class SkipHoursBase
- include Base
-
- def_array_element("hours")
-
- def new_hour
- hour = self.class::Hour.new(@maker)
- @hours << hour
- hour
- end
-
- def current_element(rss)
- rss.channel.skipHours
- end
-
- class HourBase
- include Base
-
- %w(content).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
-
- def current_element(rss)
- rss.channel.skipHours.last
- end
-
- end
- end
-
- class CloudBase
- include Base
-
- %w(domain port path registerProcedure protocol).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
-
- def current_element(rss)
- rss.channel.cloud
- end
-
- end
-
- class CategoriesBase
- include Base
-
- def_array_element("categories")
-
- def new_category
- category = self.class::Category.new(@maker)
- @categories << category
- category
- end
-
- class CategoryBase
- include Base
-
- %w(domain content).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
- end
- end
- end
-
- class ImageBase
- include Base
-
- %w(title url width height description).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
-
- def link
- @maker.channel.link
- end
-
- def current_element(rss)
- rss.image
- end
- end
-
- class ItemsBase
- include Base
-
- def_array_element("items")
-
- attr_accessor :do_sort, :max_size
-
- def initialize(maker)
- super
- @do_sort = false
- @max_size = -1
- end
-
- def normalize
- sort_if_need[0..@max_size]
- end
-
- def current_element(rss)
- rss.items
- end
-
- def new_item
- item = self.class::Item.new(@maker)
- @items << item
- item
- end
-
- private
- def sort_if_need
- if @do_sort.respond_to?(:call)
- @items.sort do |x, y|
- @do_sort.call(x, y)
- end
- elsif @do_sort
- @items.sort do |x, y|
- y <=> x
- end
- else
- @items
- end
- end
-
- class ItemBase
- include Base
-
- %w(guid enclosure source categories).each do |element|
- attr_reader element
- add_other_element(element)
- add_need_initialize_variable(element, "make_#{element}")
- module_eval(<<-EOC, __FILE__, __LINE__)
- private
- def setup_#{element}(rss, current)
- @#{element}.to_rss(rss, current)
- end
-
- def make_#{element}
- self.class::#{element[0,1].upcase}#{element[1..-1]}.new(@maker)
- end
-EOC
- end
-
- %w(title link description date author comments).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
-
- alias_method(:pubDate, :date)
- alias_method(:pubDate=, :date=)
-
- def <=>(other)
- if @date and other.date
- @date <=> other.date
- elsif @date
- 1
- elsif other.date
- -1
- else
- 0
- end
- end
-
- def current_element(rss)
- rss.items.last
- end
-
- class GuidBase
- include Base
-
- %w(isPermaLink content).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
- end
-
- class EnclosureBase
- include Base
-
- %w(url length type).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
- end
-
- class SourceBase
- include Base
-
- %w(url content).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
- end
-
- CategoriesBase = ChannelBase::CategoriesBase
-
- end
- end
-
- class TextinputBase
- include Base
-
- %w(title description name link).each do |element|
- attr_accessor element
- add_need_initialize_variable(element)
- end
-
- def current_element(rss)
- rss.textinput
- end
-
- end
-
- end
-end
diff --git a/lib/rss/maker/content.rb b/lib/rss/maker/content.rb
deleted file mode 100644
index 96f3ccb6d9..0000000000
--- a/lib/rss/maker/content.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-require 'rss/content'
-require 'rss/maker/1.0'
-
-module RSS
- module Maker
- module ContentModel
- def self.append_features(klass)
- super
-
- ::RSS::ContentModel::ELEMENTS.each do |element|
- klass.add_need_initialize_variable(element)
- klass.add_other_element(element)
- klass.__send__(:attr_accessor, element)
- klass.module_eval(<<-EOC, __FILE__, __LINE__)
- def setup_#{element}(rss, current)
- if #{element} and current.respond_to?(:#{element}=)
- current.#{element} = @#{element} if @#{element}
- end
- end
- EOC
- end
- end
- end
-
- class ItemsBase
- class ItemBase; include ContentModel; end
- end
- end
-end
diff --git a/lib/rss/maker/dublincore.rb b/lib/rss/maker/dublincore.rb
deleted file mode 100644
index a9b8d58715..0000000000
--- a/lib/rss/maker/dublincore.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-require 'rss/dublincore'
-require 'rss/maker/1.0'
-
-module RSS
- module Maker
- module DublinCoreModel
- def self.append_features(klass)
- super
-
- ::RSS::DublinCoreModel::ELEMENTS.each do |element|
- klass.add_need_initialize_variable(element)
- klass.add_other_element(element)
- klass.__send__(:attr_accessor, element)
- klass.module_eval(<<-EOC, __FILE__, __LINE__)
- def setup_#{element}(rss, current)
- if #{element} and current.respond_to?(:#{element}=)
- current.#{element} = #{element}
- end
- end
-EOC
- end
- end
- end
-
- class ChannelBase
- include DublinCoreModel
-
- undef_method(:dc_date)
- undef_method(:dc_date=)
- alias_method(:dc_date, :date)
- alias_method(:dc_date=, :date=)
- end
-
- class ImageBase; include DublinCoreModel; end
- class ItemsBase
- class ItemBase
- include DublinCoreModel
-
- undef_method(:dc_date)
- undef_method(:dc_date=)
- alias_method(:dc_date, :date)
- alias_method(:dc_date=, :date=)
- end
- end
- class TextinputBase; include DublinCoreModel; end
- end
-end
diff --git a/lib/rss/maker/syndication.rb b/lib/rss/maker/syndication.rb
deleted file mode 100644
index 72d00c63ea..0000000000
--- a/lib/rss/maker/syndication.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require 'rss/syndication'
-require 'rss/maker/1.0'
-
-module RSS
- module Maker
- module SyndicationModel
- def self.append_features(klass)
- super
-
- ::RSS::SyndicationModel::ELEMENTS.each do |element|
- klass.add_need_initialize_variable(element)
- klass.add_other_element(element)
- klass.__send__(:attr_accessor, element)
- klass.module_eval(<<-EOC, __FILE__, __LINE__)
- def setup_#{element}(rss, current)
- if #{element} and current.respond_to?(:#{element}=)
- current.#{element} = @#{element} if @#{element}
- end
- end
- EOC
- end
- end
- end
-
- class ChannelBase; include SyndicationModel; end
- end
-end
diff --git a/lib/rss/maker/trackback.rb b/lib/rss/maker/trackback.rb
deleted file mode 100644
index ef78bf2f20..0000000000
--- a/lib/rss/maker/trackback.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-require 'rss/trackback'
-require 'rss/maker/1.0'
-require 'rss/maker/2.0'
-
-module RSS
- module Maker
- module TrackBackModel
- def self.append_features(klass)
- super
-
- name = "#{RSS::TRACKBACK_PREFIX}_ping"
- klass.add_need_initialize_variable(name)
- klass.add_other_element(name)
- klass.__send__(:attr_accessor, name)
- klass.module_eval(<<-EOC, __FILE__, __LINE__)
- def setup_#{name}(rss, current)
- if #{name} and current.respond_to?(:#{name}=)
- current.#{name} = #{name}
- end
- end
- EOC
-
- name = "#{RSS::TRACKBACK_PREFIX}_abouts"
- klass.add_need_initialize_variable(name, "make_#{name}")
- klass.add_other_element(name)
- klass.__send__(:attr_accessor, name)
- klass.module_eval(<<-EOC, __FILE__, __LINE__)
- def make_#{name}
- self.class::TrackBackAbouts.new(self)
- end
-
- def setup_#{name}(rss, current)
- @#{name}.to_rss(rss, current)
- end
- EOC
- end
-
- class TrackBackAboutsBase
- include Base
-
- def_array_element("abouts")
-
- def new_about
- about = self.class::About.new(@maker)
- @abouts << about
- about
- end
-
- def to_rss(rss, current)
- @abouts.each do |about|
- about.to_rss(rss, current)
- end
- end
-
- class AboutBase
- include Base
-
- attr_accessor :value
- add_need_initialize_variable(:value)
-
- alias_method(:resource, :value)
- alias_method(:resource=, :value=)
- alias_method(:content, :value)
- alias_method(:content=, :value=)
-
- def have_required_values?
- @value
- end
-
- end
- end
- end
-
- class ItemsBase
- class ItemBase; include TrackBackModel; end
- end
-
- class RSS10
- class Items
- class Item
- class TrackBackAbouts < TrackBackAboutsBase
- class About < AboutBase
- def to_rss(rss, current)
- if resource
- about = ::RSS::TrackBackModel10::About.new(resource)
- current.trackback_abouts << about
- end
- end
- end
- end
- end
- end
- end
-
- class RSS09
- class Items
- class Item
- class TrackBackAbouts < TrackBackAboutsBase
- def to_rss(*args)
- end
- class About < AboutBase
- end
- end
- end
- end
- end
-
- class RSS20
- class Items
- class Item
- class TrackBackAbouts < TrackBackAboutsBase
- class About < AboutBase
- def to_rss(rss, current)
- if content
- about = ::RSS::TrackBackModel20::About.new(content)
- current.trackback_abouts << about
- end
- end
- end
- end
- end
- end
- end
-
- end
-end
diff --git a/lib/rss/parser.rb b/lib/rss/parser.rb
deleted file mode 100644
index 1030c8f5d4..0000000000
--- a/lib/rss/parser.rb
+++ /dev/null
@@ -1,402 +0,0 @@
-require "forwardable"
-
-require "rss/rss"
-
-module RSS
-
- class NotWellFormedError < Error
- attr_reader :line, :element
- def initialize(line=nil, element=nil)
- message = "This is not well formed XML"
- if element or line
- message << "\nerror occurred"
- message << " in #{element}" if element
- message << " at about #{line} line" if line
- end
- message << "\n#{yield}" if block_given?
- super(message)
- end
- end
-
- class XMLParserNotFound < Error
- def initialize
- super("available XML parser does not found in " <<
- "#{AVAILABLE_PARSER_LIBRARIES.inspect}.")
- end
- end
-
- class NotValidXMLParser < Error
- def initialize(parser)
- super("#{parser} is not available XML parser. " <<
- "available XML parser is " <<
- "#{AVAILABLE_PARSERS.inspect}.")
- end
- end
-
- class NSError < InvalidRSSError
- attr_reader :tag, :prefix, :uri
- def initialize(tag, prefix, require_uri)
- @tag, @prefix, @uri = tag, prefix, require_uri
- super("prefix <#{prefix}> doesn't associate uri " <<
- "<#{require_uri}> in tag <#{tag}>")
- end
- end
-
- class Parser
-
- extend Forwardable
-
- class << self
-
- @@default_parser = nil
-
- def default_parser
- @@default_parser || AVAILABLE_PARSERS.first
- end
-
- def default_parser=(new_value)
- if AVAILABLE_PARSERS.include?(new_value)
- @@default_parser = new_value
- else
- raise NotValidXMLParser.new(new_value)
- end
- end
-
- def parse(rss, do_validate=true, ignore_unknown_element=true, parser_class=default_parser)
- parser = new(rss, parser_class)
- parser.do_validate = do_validate
- parser.ignore_unknown_element = ignore_unknown_element
- parser.parse
- end
-
- end
-
- def_delegators(:@parser, :parse, :rss,
- :ignore_unknown_element,
- :ignore_unknown_element=, :do_validate,
- :do_validate=)
-
- def initialize(rss, parser_class=self.class.default_parser)
- @parser = parser_class.new(rss)
- end
- end
-
- class BaseParser
-
- def initialize(rss)
- @listener = listener.new
- @rss = rss
- end
-
- def rss
- @listener.rss
- end
-
- def ignore_unknown_element
- @listener.ignore_unknown_element
- end
-
- def ignore_unknown_element=(new_value)
- @listener.ignore_unknown_element = new_value
- end
-
- def do_validate
- @listener.do_validate
- end
-
- def do_validate=(new_value)
- @listener.do_validate = new_value
- end
-
- def parse
- if @listener.rss.nil?
- _parse
- end
- @listener.rss
- end
-
- end
-
- class BaseListener
-
- extend Utils
-
- class << self
-
- @@setter = {}
- @@registered_uris = {}
-
- def install_setter(uri, tag_name, setter)
- @@setter[uri] = {} unless @@setter.has_key?(uri)
- @@setter[uri][tag_name] = setter
- end
-
- def register_uri(name, uri)
- @@registered_uris[name] = {} unless @@registered_uris.has_key?(name)
- @@registered_uris[name][uri] = nil
- end
-
- def uri_registered?(name, uri)
- @@registered_uris[name].has_key?(uri)
- end
-
- def setter(uri, tag_name)
- begin
- @@setter[uri][tag_name]
- rescue NameError
- nil
- end
- end
-
- def available_tags(uri)
- begin
- @@setter[uri].keys
- rescue NameError
- []
- end
- end
-
- def install_get_text_element(name, uri, setter)
- install_setter(uri, name, setter)
- def_get_text_element(uri, name, *get_file_and_line_from_caller(1))
- end
-
- private
-
- def def_get_text_element(uri, name, file, line)
- register_uri(name, uri)
- unless private_instance_methods(false).include?("start_#{name}")
- module_eval(<<-EOT, file, line)
- def start_#{name}(name, prefix, attrs, ns)
- uri = ns[prefix]
- if self.class.uri_registered?(#{name.inspect}, uri)
- if @do_validate
- tags = self.class.available_tags(uri)
- unless tags.include?(name)
- raise UnknownTagError.new(name, uri)
- end
- end
- start_get_text_element(name, prefix, ns, uri)
- else
- start_else_element(name, prefix, attrs, ns)
- end
- end
- EOT
- send("private", "start_#{name}")
- end
- end
-
- end
-
- end
-
- module ListenerMixin
-
- attr_reader :rss
-
- attr_accessor :ignore_unknown_element
- attr_accessor :do_validate
-
- def initialize
- @rss = nil
- @ignore_unknown_element = true
- @do_validate = true
- @ns_stack = [{}]
- @tag_stack = [[]]
- @text_stack = ['']
- @proc_stack = []
- @last_element = nil
- @version = @encoding = @standalone = nil
- @xml_stylesheets = []
- end
-
- def xmldecl(version, encoding, standalone)
- @version, @encoding, @standalone = version, encoding, standalone
- end
-
- def instruction(name, content)
- if name == "xml-stylesheet"
- params = parse_pi_content(content)
- if params.has_key?("href")
- @xml_stylesheets << XMLStyleSheet.new(*params)
- end
- end
- end
-
- def tag_start(name, attributes)
- @text_stack.push('')
-
- ns = @ns_stack.last.dup
- attrs = {}
- attributes.each do |n, v|
- if n =~ /\Axmlns:?/
- ns[$POSTMATCH] = v
- else
- attrs[n] = v
- end
- end
- @ns_stack.push(ns)
-
- prefix, local = split_name(name)
- @tag_stack.last.push([ns[prefix], local])
- @tag_stack.push([])
- if respond_to?("start_#{local}", true)
- send("start_#{local}", local, prefix, attrs, ns.dup)
- else
- start_else_element(local, prefix, attrs, ns.dup)
- end
- end
-
- def tag_end(name)
- if DEBUG
- p "end tag #{name}"
- p @tag_stack
- end
- text = @text_stack.pop
- tags = @tag_stack.pop
- pr = @proc_stack.pop
- pr.call(text, tags) unless pr.nil?
- end
-
- def text(data)
- @text_stack.last << data
- end
-
- private
-
- CONTENT_PATTERN = /\s*([^=]+)=(["'])([^\2]+?)\2/
- def parse_pi_content(content)
- params = {}
- content.scan(CONTENT_PATTERN) do |name, quote, value|
- params[name] = value
- end
- params
- end
-
- def start_else_element(local, prefix, attrs, ns)
- class_name = local[0,1].upcase << local[1..-1]
- current_class = @last_element.class
-# begin
- if current_class.constants.include?(class_name)
- next_class = current_class.const_get(class_name)
- start_have_something_element(local, prefix, attrs, ns, next_class)
-# rescue NameError
- else
- if @ignore_unknown_element
- @proc_stack.push(nil)
- else
- parent = "ROOT ELEMENT???"
- if current_class.tag_name
- parent = current_class.tag_name
- end
- raise NotExceptedTagError.new(local, parent)
- end
- end
- end
-
- NAMESPLIT = /^(?:([\w:][-\w\d.]*):)?([\w:][-\w\d.]*)/
- def split_name(name)
- name =~ NAMESPLIT
- [$1 || '', $2]
- end
-
- def check_ns(tag_name, prefix, ns, require_uri)
- if @do_validate
- if ns[prefix] == require_uri
- #ns.delete(prefix)
- else
- raise NSError.new(tag_name, prefix, require_uri)
- end
- end
- end
-
- def start_get_text_element(tag_name, prefix, ns, required_uri)
- @proc_stack.push Proc.new {|text, tags|
- setter = self.class.setter(required_uri, tag_name)
- setter ||= "#{tag_name}="
- if @last_element.respond_to?(setter)
- @last_element.send(setter, text.to_s)
- else
- if @do_validate and not @ignore_unknown_element
- raise NotExceptedTagError.new(tag_name, @last_element.tag_name)
- end
- end
- }
- end
-
- def start_have_something_element(tag_name, prefix, attrs, ns, klass)
-
- check_ns(tag_name, prefix, ns, klass.required_uri)
-
- args = []
-
- klass.get_attributes.each do |a_name, a_uri, required|
-
- if a_uri.is_a?(String) or !a_uri.respond_to?(:include?)
- a_uri = [a_uri]
- end
- unless a_uri == [nil]
- for prefix, uri in ns
- if a_uri.include?(uri)
- val = attrs["#{prefix}:#{a_name}"]
- break if val
- end
- end
- end
- if val.nil? and a_uri.include?(nil)
- val = attrs[a_name]
- end
-
- if @do_validate and required and val.nil?
- unless a_uri.include?(nil)
- for prefix, uri in ns
- if a_uri.include?(uri)
- a_name = "#{prefix}:#{a_name}"
- end
- end
- end
- raise MissingAttributeError.new(tag_name, a_name)
- end
-
- args << val
- end
-
- previous = @last_element
- next_element = klass.send(:new, *args)
- next_element.do_validate = @do_validate
- prefix = ""
- prefix << "#{klass.required_prefix}_" if klass.required_prefix
- previous.__send__(:set_next_element, prefix, tag_name, next_element)
- @last_element = next_element
- @proc_stack.push Proc.new { |text, tags|
- p(@last_element.class) if DEBUG
- @last_element.content = text if klass.have_content?
- @last_element.validate_for_stream(tags) if @do_validate
- @last_element = previous
- }
- end
-
- end
-
- unless const_defined? :AVAILABLE_PARSER_LIBRARIES
- AVAILABLE_PARSER_LIBRARIES = [
- ["rss/xmlparser", :XMLParserParser],
- ["rss/xmlscanner", :XMLScanParser],
- ["rss/rexmlparser", :REXMLParser],
- ]
- end
-
- AVAILABLE_PARSERS = []
-
- AVAILABLE_PARSER_LIBRARIES.each do |lib, parser|
- begin
- require lib
- AVAILABLE_PARSERS.push(const_get(parser))
- rescue LoadError
- end
- end
-
- if AVAILABLE_PARSERS.empty?
- raise XMLParserNotFound
- end
-end
diff --git a/lib/rss/rexmlparser.rb b/lib/rss/rexmlparser.rb
deleted file mode 100644
index 73e352a731..0000000000
--- a/lib/rss/rexmlparser.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-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
diff --git a/lib/rss/rss.rb b/lib/rss/rss.rb
deleted file mode 100644
index 11fe6d6dd1..0000000000
--- a/lib/rss/rss.rb
+++ /dev/null
@@ -1,858 +0,0 @@
-# Copyright (c) 2003-2004 Kouhei Sutou. You can redistribute it and/or
-# modify it under the same terms as Ruby.
-#
-# Author:: Kouhei Sutou <kou@cozmixng.org>
-# Tutorial:: http://www.cozmixng.org/~rwiki/?cmd=view;name=RSS+Parser%3A%3ATutorial.en
-
-
-require "time"
-
-class Time
- class << self
- unless respond_to?(:w3cdtf)
- def w3cdtf(date)
- if /\A\s*
- (-?\d+)-(\d\d)-(\d\d)
- (?:T
- (\d\d):(\d\d)(?::(\d\d))?
- (\.\d+)?
- (Z|[+-]\d\d:\d\d)?)?
- \s*\z/ix =~ date and (($5 and $8) or (!$5 and !$8))
- datetime = [$1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i]
- datetime << $7.to_f * 1000000 if $7
- if $8
- Time.utc(*datetime) - zone_offset($8)
- else
- Time.local(*datetime)
- end
- else
- raise ArgumentError.new("invalid date: #{date.inspect}")
- end
- end
- end
- end
-
- unless instance_methods.include?("w3cdtf")
- alias w3cdtf iso8601
- end
-end
-
-module Enumerable
- unless instance_methods.include?("sort_by")
- def sort_by
- collect do |x|
- [yield(x), x]
- end.sort do |x, y|
- x[0] <=> y[0]
- end.collect! do |x|
- x[1]
- end
- end
- end
-end
-
-require "English"
-require "rss/utils"
-require "rss/converter"
-require "rss/xml-stylesheet"
-
-module RSS
-
- VERSION = "0.1.2"
-
- URI = "http://purl.org/rss/1.0/"
-
- DEBUG = false
-
- class Error < StandardError; end
-
- class OverlappedPrefixError < Error
- attr_reader :prefix
- def initialize(prefix)
- @prefix = prefix
- end
- end
-
- class InvalidRSSError < Error; end
-
- class MissingTagError < InvalidRSSError
- attr_reader :tag, :parent
- def initialize(tag, parent)
- @tag, @parent = tag, parent
- super("tag <#{tag}> is missing in tag <#{parent}>")
- end
- end
-
- class TooMuchTagError < InvalidRSSError
- attr_reader :tag, :parent
- def initialize(tag, parent)
- @tag, @parent = tag, parent
- super("tag <#{tag}> is too much in tag <#{parent}>")
- end
- end
-
- class MissingAttributeError < InvalidRSSError
- attr_reader :tag, :attribute
- def initialize(tag, attribute)
- @tag, @attribute = tag, attribute
- super("attribute <#{attribute}> is missing in tag <#{tag}>")
- end
- end
-
- class UnknownTagError < InvalidRSSError
- attr_reader :tag, :uri
- def initialize(tag, uri)
- @tag, @uri = tag, uri
- super("tag <#{tag}> is unknown in namespace specified by uri <#{uri}>")
- end
- end
-
- class NotExceptedTagError < InvalidRSSError
- attr_reader :tag, :parent
- def initialize(tag, parent)
- @tag, @parent = tag, parent
- super("tag <#{tag}> is not expected in tag <#{parent}>")
- end
- end
-
- class NotAvailableValueError < InvalidRSSError
- attr_reader :tag, :value
- def initialize(tag, value)
- @tag, @value = tag, value
- super("value <#{value}> of tag <#{tag}> is not available.")
- end
- end
-
- class UnknownConversionMethodError < Error
- attr_reader :to, :from
- def initialize(to, from)
- @to = to
- @from = from
- super("can't convert to #{to} from #{from}.")
- end
- end
- # for backward compatibility
- UnknownConvertMethod = UnknownConversionMethodError
-
- class ConversionError < Error
- attr_reader :string, :to, :from
- def initialize(string, to, from)
- @string = string
- @to = to
- @from = from
- super("can't convert #{@string} to #{to} from #{from}.")
- end
- end
-
- class NotSetError < Error
- attr_reader :name, :variables
- def initialize(name, variables)
- @name = name
- @variables = variables
- super("required variables of #{@name} are not set: #{@variables.join(', ')}")
- end
- end
-
- module BaseModel
-
- include Utils
-
- def install_have_child_element(name)
- add_need_initialize_variable(name)
-
- attr_accessor name
- install_element(name) do |n, elem_name|
- <<-EOC
- if @#{n}
- "\#{@#{n}.to_s(convert, indent)}"
- else
- ''
- end
-EOC
- end
- end
- alias_method(:install_have_attribute_element, :install_have_child_element)
-
- def install_have_children_element(name, plural_name=nil)
- plural_name ||= "#{name}s"
- add_have_children_element(name, plural_name)
- add_plural_form(name, plural_name)
-
- def_children_accessor(name, plural_name)
- install_element(name, "s") do |n, elem_name|
- <<-EOC
- rv = []
- @#{n}.each do |x|
- value = "\#{x.to_s(convert, indent)}"
- rv << value if /\\A\\s*\\z/ !~ value
- end
- rv.join("\n")
-EOC
- end
- end
-
- def install_text_element(name)
- self::ELEMENTS << name
- add_need_initialize_variable(name)
-
- attr_writer name
- convert_attr_reader name
- install_element(name) do |n, elem_name|
- <<-EOC
- if @#{n}
- rv = "\#{indent}<#{elem_name}>"
- value = html_escape(@#{n})
- if convert and @converter
- rv << @converter.convert(value)
- else
- rv << value
- end
- rv << "</#{elem_name}>"
- rv
- else
- ''
- end
-EOC
- end
- end
-
- def install_date_element(name, type, disp_name=name)
- self::ELEMENTS << name
- add_need_initialize_variable(name)
-
- # accessor
- convert_attr_reader name
- module_eval(<<-EOC, *get_file_and_line_from_caller(2))
- def #{name}=(new_value)
- if new_value.kind_of?(Time)
- @#{name} = new_value
- else
- if @do_validate
- begin
- @#{name} = Time.send('#{type}', new_value)
- rescue ArgumentError
- raise NotAvailableValueError.new('#{disp_name}', new_value)
- end
- else
- @#{name} = nil
- if /\\A\\s*\\z/ !~ new_value.to_s
- begin
- @#{name} = Time.parse(new_value)
- rescue ArgumentError
- end
- end
- end
- end
-
- # Is it need?
- if @#{name}
- class << @#{name}
- undef_method(:to_s)
- alias_method(:to_s, :#{type})
- end
- end
-
- end
-EOC
-
- install_element(name) do |n, elem_name|
- <<-EOC
- if @#{n}
- rv = "\#{indent}<#{elem_name}>"
- value = html_escape(@#{n}.#{type})
- if convert and @converter
- rv << @converter.convert(value)
- else
- rv << value
- end
- rv << "</#{elem_name}>"
- rv
- else
- ''
- end
-EOC
- end
-
- end
-
- private
- def install_element(name, postfix="")
- elem_name = name.sub('_', ':')
- module_eval(<<-EOC, *get_file_and_line_from_caller(2))
- def #{name}_element#{postfix}(convert=true, indent='')
- #{yield(name, elem_name)}
- end
- private :#{name}_element#{postfix}
-EOC
- end
-
- def convert_attr_reader(*attrs)
- attrs.each do |attr|
- attr = attr.id2name if attr.kind_of?(Integer)
- module_eval(<<-EOC, *get_file_and_line_from_caller(2))
- def #{attr}
- if @converter
- @converter.convert(@#{attr})
- else
- @#{attr}
- end
- end
-EOC
- end
- end
-
- def def_children_accessor(accessor_name, plural_name)
- module_eval(<<-EOC, *get_file_and_line_from_caller(2))
- def #{plural_name}
- @#{accessor_name}
- end
-
- def #{accessor_name}(*args)
- if args.empty?
- @#{accessor_name}.first
- else
- @#{accessor_name}.send("[]", *args)
- end
- end
-
- def #{accessor_name}=(*args)
- warn("Warning:\#{caller.first.sub(/:in `.*'\z/, '')}: " \
- "Don't use `#{accessor_name} = XXX'/`set_#{accessor_name}(XXX)'. " \
- "Those APIs are not sense of Ruby. " \
- "Use `#{plural_name} << XXX' instead of them.")
- if args.size == 1
- @#{accessor_name}.push(args[0])
- else
- @#{accessor_name}.send("[]=", *args)
- end
- end
- alias_method(:set_#{accessor_name}, :#{accessor_name}=)
-EOC
- end
-
- def def_content_only_to_s
- module_eval(<<-EOC, *get_file_and_line_from_caller(2))
- def to_s(convert=true, indent=calc_indent)
- if @content
- rv = tag(indent) do |next_indent|
- h(@content)
- end
- rv = @converter.convert(rv) if convert and @converter
- rv
- else
- ""
- end
- end
-EOC
- end
-
- end
-
- class Element
-
- extend BaseModel
- include Utils
-
- INDENT = " "
-
- class << self
-
- def inherited(klass)
- klass.module_eval(<<-EOC)
- public
-
- @tag_name = name.split(/::/).last
- @tag_name[0,1] = @tag_name[0,1].downcase
- @indent_size = name.split(/::/).size - 2
-
- @@must_call_validators = {}
-
- def self.must_call_validators
- @@must_call_validators
- end
-
- def self.install_must_call_validator(prefix, uri)
- @@must_call_validators[uri] = prefix
- end
-
- @@model = []
-
- def self.model
- @@model
- end
-
- def self.install_model(tag, occurs=nil)
- if m = @@model.find {|t, o| t == tag}
- m[1] = occurs
- else
- @@model << [tag, occurs]
- end
- end
-
- @@get_attributes = []
-
- def self.get_attributes()
- @@get_attributes
- end
-
- def self.install_get_attribute(name, uri, required=true)
- attr_writer name
- convert_attr_reader name
- @@get_attributes << [name, uri, required]
- end
-
- @@have_content = false
-
- def self.content_setup
- attr_writer :content
- convert_attr_reader :content
- def_content_only_to_s
- @@have_content = true
- end
-
- def self.have_content?
- @@have_content
- end
-
- @@have_children_elements = []
-
- def self.have_children_elements
- @@have_children_elements
- end
-
- def self.add_have_children_element(variable_name, plural_name)
- @@have_children_elements << [variable_name, plural_name]
- end
-
- @@need_initialize_variables = []
-
- def self.add_need_initialize_variable(variable_name)
- @@need_initialize_variables << variable_name
- end
-
- def self.need_initialize_variables
- @@need_initialize_variables
- end
-
- @@plural_forms = {}
-
- def self.add_plural_form(singular, plural)
- @@plural_forms[singular] = plural
- end
-
- def self.plural_forms
- @@plural_forms
- end
-
- EOC
- end
-
- def required_prefix
- nil
- end
-
- def required_uri
- nil
- end
-
- def install_ns(prefix, uri)
- if self::NSPOOL.has_key?(prefix)
- raise OverlappedPrefixError.new(prefix)
- end
- self::NSPOOL[prefix] = uri
- end
-
- def tag_name
- @tag_name
- end
-
- def indent_size
- @indent_size
- end
-
- end
-
- attr_accessor :do_validate
-
- def initialize(do_validate=true)
- @converter = nil
- @do_validate = do_validate
- initialize_variables
- end
-
- def tag_name
- self.class.tag_name
- end
-
- def full_name
- tag_name
- end
-
- def indent_size
- self.class.indent_size
- end
-
- def converter=(converter)
- @converter = converter
- children.each do |child|
- child.converter = converter unless child.nil?
- end
- end
-
- def validate
- validate_attribute
- __validate
- end
-
- def validate_for_stream(tags)
- validate_attribute
- __validate(tags, false)
- end
-
- def setup_maker(maker)
- target = maker_target(maker)
- unless target.nil?
- setup_maker_attributes(target)
- setup_maker_element(target)
- setup_maker_elements(target)
- end
- end
-
- private
- def initialize_variables
- self.class.need_initialize_variables.each do |variable_name|
- instance_eval("@#{variable_name} = nil")
- end
- initialize_have_children_elements
- @content = "" if self.class.have_content?
- end
-
- def initialize_have_children_elements
- self.class.have_children_elements.each do |variable_name, plural_name|
- instance_eval("@#{variable_name} = []")
- end
- end
-
- def tag(indent, additional_attrs=[], &block)
- next_indent = indent + INDENT
-
- attrs = collect_attrs
- return "" if attrs.nil?
-
- attrs += additional_attrs
- start_tag = make_start_tag(indent, next_indent, attrs)
-
- if block
- content = block.call(next_indent)
- else
- content = []
- end
-
- if content.is_a?(String)
- content = [content]
- start_tag << ">"
- end_tag = "</#{full_name}>"
- else
- content = content.reject{|x| x.empty?}
- if content.empty?
- end_tag = "/>"
- else
- start_tag << ">\n"
- end_tag = "\n#{indent}</#{full_name}>"
- end
- end
-
- start_tag + content.join("\n") + end_tag
- end
-
- def make_start_tag(indent, next_indent, attrs)
- start_tag = ["#{indent}<#{full_name}"]
- unless attrs.empty?
- start_tag << attrs.collect do |key, value|
- %Q[#{h key}="#{h value}"]
- end.join("\n#{next_indent}")
- end
- start_tag.join(" ")
- end
-
- def collect_attrs
- _attrs.collect do |name, required, alias_name|
- value = __send__(alias_name || name)
- return nil if required and value.nil?
- [name, value]
- end.reject do |name, value|
- value.nil?
- end
- end
-
- def tag_name_with_prefix(prefix)
- "#{prefix}:#{tag_name}"
- end
-
- def calc_indent
- INDENT * (self.class.indent_size)
- end
-
- def maker_target(maker)
- nil
- end
-
- def setup_maker_attributes(target)
- end
-
- def setup_maker_element(target)
- self.class.need_initialize_variables.each do |var|
- setter = "#{var}="
- if target.respond_to?(setter)
- target.__send__(setter, __send__(var))
- end
- end
- end
-
- def setup_maker_elements(parent)
- self.class.have_children_elements.each do |name, plural_name|
- real_name = name.sub(/^[^_]+_/, '')
- if parent.respond_to?(plural_name)
- target = parent.__send__(plural_name)
- __send__(plural_name).each do |elem|
- elem.__send__("setup_maker", target)
- end
- end
- end
- end
-
- def set_next_element(prefix, tag_name, next_element)
- klass = next_element.class
- prefix = ""
- prefix << "#{klass.required_prefix}_" if klass.required_prefix
- if self.class.plural_forms.has_key?(tag_name)
- ary = __send__("#{prefix}#{self.class.plural_forms[tag_name]}")
- ary << next_element
- else
- __send__("#{prefix}#{tag_name}=", next_element)
- end
- end
-
- # not String class children.
- def children
- []
- end
-
- # default #validate() argument.
- def _tags
- []
- end
-
- def _attrs
- []
- end
-
- def __validate(tags=_tags, recursive=true)
- if recursive
- children.compact.each do |child|
- child.validate
- end
- end
- must_call_validators = self.class.must_call_validators
- tags = tag_filter(tags.dup)
- p tags if DEBUG
- self.class::NSPOOL.each do |prefix, uri|
- if tags.has_key?(uri) and !must_call_validators.has_key?(uri)
- meth = "#{prefix}_validate"
- send(meth, tags[uri]) if respond_to?(meth, true)
- end
- end
- must_call_validators.each do |uri, prefix|
- send("#{prefix}_validate", tags[uri])
- end
- end
-
- def validate_attribute
- _attrs.each do |a_name, required, alias_name|
- if required and __send__(alias_name || a_name).nil?
- raise MissingAttributeError.new(tag_name, a_name)
- end
- end
- end
-
- def other_element(convert, indent='')
- rv = []
- private_methods.each do |meth|
- if /\A([^_]+)_[^_]+_elements?\z/ =~ meth and
- self.class::NSPOOL.has_key?($1)
- res = __send__(meth, convert)
- rv << "#{indent}#{res}" if /\A\s*\z/ !~ res
- end
- end
- rv.join("\n")
- end
-
- def _validate(tags, model=self.class.model)
- count = 1
- do_redo = false
- not_shift = false
- tag = nil
- element_names = model.collect {|elem| elem[0]}
- if tags
- tags_size = tags.size
- tags = tags.sort_by {|x| element_names.index(x) || tags_size}
- end
-
- model.each_with_index do |elem, i|
-
- if DEBUG
- p "before"
- p tags
- p elem
- end
-
- if not_shift
- not_shift = false
- elsif tags
- tag = tags.shift
- end
-
- if DEBUG
- p "mid"
- p count
- end
-
- case elem[1]
- when '?'
- if count > 2
- raise TooMuchTagError.new(elem[0], tag_name)
- else
- if elem[0] == tag
- do_redo = true
- else
- not_shift = true
- end
- end
- when '*'
- if elem[0] == tag
- do_redo = true
- else
- not_shift = true
- end
- when '+'
- if elem[0] == tag
- do_redo = true
- else
- if count > 1
- not_shift = true
- else
- raise MissingTagError.new(elem[0], tag_name)
- end
- end
- else
- if elem[0] == tag
- if model[i+1] and model[i+1][0] != elem[0] and
- tags and tags.first == elem[0]
- raise TooMuchTagError.new(elem[0], tag_name)
- end
- else
- raise MissingTagError.new(elem[0], tag_name)
- end
- end
-
- if DEBUG
- p "after"
- p not_shift
- p do_redo
- p tag
- end
-
- if do_redo
- do_redo = false
- count += 1
- redo
- else
- count = 1
- end
-
- end
-
- if !tags.nil? and !tags.empty?
- raise NotExceptedTagError.new(tag, tag_name)
- end
-
- end
-
- def tag_filter(tags)
- rv = {}
- tags.each do |tag|
- rv[tag[0]] = [] unless rv.has_key?(tag[0])
- rv[tag[0]].push(tag[1])
- end
- rv
- end
-
- end
-
- module RootElementMixin
-
- include XMLStyleSheetMixin
-
- attr_reader :output_encoding
-
- def initialize(rss_version, version=nil, encoding=nil, standalone=nil)
- super()
- @rss_version = rss_version
- @version = version || '1.0'
- @encoding = encoding
- @standalone = standalone
- @output_encoding = nil
- end
-
- def output_encoding=(enc)
- @output_encoding = enc
- self.converter = Converter.new(@output_encoding, @encoding)
- end
-
- def setup_maker(maker)
- maker.version = version
- maker.encoding = encoding
- maker.standalone = standalone
-
- xml_stylesheets.each do |xss|
- xss.setup_maker(maker)
- end
-
- setup_maker_elements(maker)
- end
-
- private
- def tag(indent, attrs, &block)
- rv = xmldecl + xml_stylesheet_pi
- rv << super(indent, attrs, &block)
- rv
- end
-
- def xmldecl
- rv = %Q[<?xml version="#{@version}"]
- if @output_encoding or @encoding
- rv << %Q[ encoding="#{@output_encoding or @encoding}"]
- end
- rv << %Q[ standalone="yes"] if @standalone
- rv << "?>\n"
- rv
- end
-
- def ns_declarations
- self.class::NSPOOL.collect do |prefix, uri|
- prefix = ":#{prefix}" unless prefix.empty?
- ["xmlns#{prefix}", uri]
- end
- end
-
- def setup_maker_elements(maker)
- channel.setup_maker(maker) if channel
- image.setup_maker(maker) if image
- textinput.setup_maker(maker) if textinput
- items.each do |item|
- item.setup_maker(maker)
- end
- end
- end
-
-end
diff --git a/lib/rss/syndication.rb b/lib/rss/syndication.rb
deleted file mode 100644
index c274ff8c82..0000000000
--- a/lib/rss/syndication.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-require "rss/1.0"
-
-module RSS
-
- SY_PREFIX = 'sy'
- SY_URI = "http://purl.org/rss/1.0/modules/syndication/"
-
- RDF.install_ns(SY_PREFIX, SY_URI)
-
- module SyndicationModel
-
- extend BaseModel
-
- ELEMENTS = []
-
- def self.append_features(klass)
- super
-
- klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1))
- %w(updatePeriod updateFrequency).each do |x|
- install_text_element("\#{SY_PREFIX}_\#{x}")
- end
-
- %w(updateBase).each do |x|
- install_date_element("\#{SY_PREFIX}_\#{x}", 'w3cdtf', x)
- end
-
- alias_method(:_sy_updatePeriod=, :sy_updatePeriod=)
- def sy_updatePeriod=(new_value)
- new_value = new_value.strip
- validate_sy_updatePeriod(new_value) if @do_validate
- self._sy_updatePeriod = new_value
- end
-
- alias_method(:_sy_updateFrequency=, :sy_updateFrequency=)
- def sy_updateFrequency=(new_value)
- validate_sy_updateFrequency(new_value) if @do_validate
- self._sy_updateFrequency = new_value.to_i
- end
- EOC
- end
-
- def sy_validate(tags)
- counter = {}
- ELEMENTS.each do |x|
- counter[x] = 0
- end
-
- tags.each do |tag|
- key = "#{SY_PREFIX}_#{tag}"
- raise UnknownTagError.new(tag, SY_URI) unless counter.has_key?(key)
- counter[key] += 1
- raise TooMuchTagError.new(tag, tag_name) if counter[key] > 1
- end
- end
-
- private
- SY_UPDATEPERIOD_AVAILABLE_VALUES = %w(hourly daily weekly monthly yearly)
- def validate_sy_updatePeriod(value)
- unless SY_UPDATEPERIOD_AVAILABLE_VALUES.include?(value)
- raise NotAvailableValueError.new("updatePeriod", value)
- end
- end
-
- SY_UPDATEFREQUENCY_AVAILABLE_RE = /\A\s*\+?\d+\s*\z/
- def validate_sy_updateFrequency(value)
- value = value.to_s.strip
- if SY_UPDATEFREQUENCY_AVAILABLE_RE !~ value
- raise NotAvailableValueError.new("updateFrequency", value)
- end
- end
-
- end
-
- class RDF
- class Channel; include SyndicationModel; end
- end
-
- prefix_size = SY_PREFIX.size + 1
- SyndicationModel::ELEMENTS.uniq!
- SyndicationModel::ELEMENTS.each do |x|
- BaseListener.install_get_text_element(x[prefix_size..-1], SY_URI, "#{x}=")
- end
-
-end
diff --git a/lib/rss/taxonomy.rb b/lib/rss/taxonomy.rb
deleted file mode 100644
index bec6ea3c17..0000000000
--- a/lib/rss/taxonomy.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# Experimental
-
-require "rss/1.0"
-
-module RSS
-
- TAXO_PREFIX = "taxo"
- TAXO_NS = "http://purl.org/rss/1.0/modules/taxonomy/"
-
- Element.install_ns(TAXO_PREFIX, TAXO_NS)
-
- TAXO_ELEMENTS = []
-
- %w(link).each do |x|
- if const_defined? :Listener
- Listener.install_get_text_element(x, TAXO_NS, "#{TAXO_PREFIX}_#{x}=")
- end
- TAXO_ELEMENTS << "#{TAXO_PREFIX}_#{x}"
- end
-
- module TaxonomyModel
- attr_writer(*%w(title description creator subject publisher
- contributor date format identifier source
- language relation coverage rights).collect{|x| "#{TAXO_PREFIX}_#{x}"})
- end
-
- class Channel; extend TaxonomyModel; end
- class Item; extend TaxonomyModel; end
- class Image; extend TaxonomyModel; end
- class TextInput; extend TaxonomyModel; end
-
-end
diff --git a/lib/rss/trackback.rb b/lib/rss/trackback.rb
deleted file mode 100644
index 8bc1ee5ad5..0000000000
--- a/lib/rss/trackback.rb
+++ /dev/null
@@ -1,298 +0,0 @@
-require 'rss/1.0'
-require 'rss/2.0'
-
-module RSS
-
- TRACKBACK_PREFIX = 'trackback'
- TRACKBACK_URI = 'http://madskills.com/public/xml/rss/module/trackback/'
-
- RDF.install_ns(TRACKBACK_PREFIX, TRACKBACK_URI)
- Rss.install_ns(TRACKBACK_PREFIX, TRACKBACK_URI)
-
- module TrackBackUtils
- private
- def new_with_value_if_need(klass, value)
- if value.is_a?(klass)
- value
- else
- klass.new(value)
- end
- end
-
- def trackback_validate(tags)
- counter = {}
- %w(ping about).each do |x|
- counter["#{TRACKBACK_PREFIX}_#{x}"] = 0
- end
-
- tags.each do |tag|
- key = "#{TRACKBACK_PREFIX}_#{tag}"
- raise UnknownTagError.new(tag, TRACKBACK_URI) unless counter.has_key?(key)
- counter[key] += 1
- if tag != "about" and counter[key] > 1
- raise TooMuchTagError.new(tag, tag_name)
- end
- end
-
- if counter["#{TRACKBACK_PREFIX}_ping"].zero? and
- counter["#{TRACKBACK_PREFIX}_about"].nonzero?
- raise MissingTagError.new("#{TRACKBACK_PREFIX}:ping", tag_name)
- end
- end
- end
-
- module BaseTrackBackModel
- def append_features(klass)
- super
-
- unless klass.class == Module
- klass.__send__(:include, TrackBackUtils)
-
- %w(ping).each do |x|
- var_name = "#{TRACKBACK_PREFIX}_#{x}"
- klass_name = x.capitalize
- klass.install_have_child_element(var_name)
- klass.module_eval(<<-EOC, __FILE__, __LINE__)
- remove_method :#{var_name}
- def #{var_name}
- @#{var_name} and @#{var_name}.value
- end
-
- remove_method :#{var_name}=
- def #{var_name}=(value)
- @#{var_name} = new_with_value_if_need(#{klass_name}, value)
- end
- EOC
- end
-
- [%w(about s)].each do |name, postfix|
- var_name = "#{TRACKBACK_PREFIX}_#{name}"
- klass_name = name.capitalize
- klass.install_have_children_element(var_name)
- klass.module_eval(<<-EOC, __FILE__, __LINE__)
- remove_method :#{var_name}
- def #{var_name}(*args)
- if args.empty?
- @#{var_name}.first and @#{var_name}.first.value
- else
- ret = @#{var_name}.send("[]", *args)
- if ret.is_a?(Array)
- ret.collect {|x| x.value}
- else
- ret.value
- end
- end
- end
-
- remove_method :#{var_name}=
- remove_method :set_#{var_name}
- def #{var_name}=(*args)
- if args.size == 1
- item = new_with_value_if_need(#{klass_name}, args[0])
- @#{var_name}.push(item)
- else
- new_val = args.last
- if new_val.is_a?(Array)
- new_val = new_value.collect do |val|
- new_with_value_if_need(#{klass_name}, val)
- end
- else
- new_val = new_with_value_if_need(#{klass_name}, new_val)
- end
- @#{var_name}.send("[]=", *(args[0..-2] + [new_val]))
- end
- end
- alias set_#{var_name} #{var_name}=
- EOC
- end
- end
- end
- end
-
- module TrackBackModel10
- extend BaseModel
- extend BaseTrackBackModel
-
- class Ping < Element
- include RSS10
-
- class << self
-
- def required_prefix
- TRACKBACK_PREFIX
- end
-
- def required_uri
- TRACKBACK_URI
- end
-
- end
-
- [
- ["resource", ::RSS::RDF::URI, true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- alias_method(:value, :resource)
- alias_method(:value=, :resource=)
-
- def initialize(resource=nil)
- super()
- @resource = resource
- end
-
- def full_name
- tag_name_with_prefix(TRACKBACK_PREFIX)
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent)
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _attrs
- [
- ["#{::RSS::RDF::PREFIX}:resource", true, "resource"],
- ]
- end
-
- end
-
- class About < Element
- include RSS10
-
- class << self
-
- def required_prefix
- TRACKBACK_PREFIX
- end
-
- def required_uri
- TRACKBACK_URI
- end
-
- end
-
- [
- ["resource", ::RSS::RDF::URI, true]
- ].each do |name, uri, required|
- install_get_attribute(name, uri, required)
- end
-
- alias_method(:value, :resource)
- alias_method(:value=, :resource=)
-
- def initialize(resource=nil)
- super()
- @resource = resource
- end
-
- def full_name
- tag_name_with_prefix(TRACKBACK_PREFIX)
- end
-
- def to_s(convert=true, indent=calc_indent)
- rv = tag(indent)
- rv = @converter.convert(rv) if convert and @converter
- rv
- end
-
- private
- def _attrs
- [
- ["#{::RSS::RDF::PREFIX}:resource", true, "resource"],
- ]
- end
-
- def maker_target(abouts)
- abouts.new_about
- end
-
- def setup_maker_attributes(about)
- about.resource = self.resource
- end
-
- end
- end
-
- module TrackBackModel20
- extend BaseModel
- extend BaseTrackBackModel
-
- class Ping < Element
- include RSS09
-
- content_setup
-
- class << self
-
- def required_prefix
- TRACKBACK_PREFIX
- end
-
- def required_uri
- TRACKBACK_URI
- end
-
- end
-
- alias_method(:value, :content)
- alias_method(:value=, :content=)
-
- def initialize(content=nil)
- super()
- @content = content
- end
-
- def full_name
- tag_name_with_prefix(TRACKBACK_PREFIX)
- end
-
- end
-
- class About < Element
- include RSS09
-
- content_setup
-
- class << self
-
- def required_prefix
- TRACKBACK_PREFIX
- end
-
- def required_uri
- TRACKBACK_URI
- end
-
- end
-
- alias_method(:value, :content)
- alias_method(:value=, :content=)
-
- def initialize(content=nil)
- super()
- @content = content
- end
-
- def full_name
- tag_name_with_prefix(TRACKBACK_PREFIX)
- end
-
- end
- end
-
- class RDF
- class Item; include TrackBackModel10; end
- end
-
- class Rss
- class Channel
- class Item; include TrackBackModel20; end
- end
- end
-
-end
diff --git a/lib/rss/utils.rb b/lib/rss/utils.rb
deleted file mode 100644
index 1c30ae74bc..0000000000
--- a/lib/rss/utils.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-module RSS
-
- module Utils
-
- def get_file_and_line_from_caller(i=0)
- file, line, = caller[i].split(':')
- [file, line.to_i]
- end
-
- def html_escape(s)
- s.to_s.gsub(/&/, "&amp;").gsub(/\"/, "&quot;").gsub(/>/, "&gt;").gsub(/</, "&lt;")
- end
- alias h html_escape
-
- end
-
-end
diff --git a/lib/rss/xml-stylesheet.rb b/lib/rss/xml-stylesheet.rb
deleted file mode 100644
index 05602eee9b..0000000000
--- a/lib/rss/xml-stylesheet.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-require "rss/utils"
-
-module RSS
-
- module XMLStyleSheetMixin
- attr_accessor :xml_stylesheets
- def initialize(*args)
- super
- @xml_stylesheets = []
- end
-
- private
- def xml_stylesheet_pi
- xsss = @xml_stylesheets.collect do |xss|
- pi = xss.to_s
- pi = nil if /\A\s*\z/ =~ pi
- pi
- end.compact
- xsss.push("") unless xsss.empty?
- xsss.join("\n")
- end
- end
-
- class XMLStyleSheet
-
- include Utils
-
- ATTRIBUTES = %w(href type title media charset alternate)
-
- GUESS_TABLE = {
- "xsl" => "text/xsl",
- "css" => "text/css",
- }
-
- attr_accessor(*ATTRIBUTES)
- attr_accessor(:do_validate)
- def initialize(*attrs)
- @do_validate = true
- ATTRIBUTES.each do |attr|
- self.send("#{attr}=", nil)
- end
- vars = ATTRIBUTES.dup
- vars.unshift(:do_validate)
- attrs.each do |name, value|
- if vars.include?(name.to_s)
- self.send("#{name}=", value)
- end
- end
- end
-
- def to_s
- rv = ""
- if @href
- rv << %Q[<?xml-stylesheet]
- ATTRIBUTES.each do |name|
- if self.send(name)
- rv << %Q[ #{name}="#{h self.send(name)}"]
- end
- end
- rv << %Q[?>]
- end
- rv
- end
-
- remove_method(:href=)
- def href=(value)
- @href = value
- if @href and @type.nil?
- @type = guess_type(@href)
- end
- @href
- end
-
- remove_method(:alternate=)
- def alternate=(value)
- if value.nil? or /\A(?:yes|no)\z/ =~ value
- @alternate = value
- else
- if @do_validate
- args = ["?xml-stylesheet?", %Q[alternate="#{value}"]]
- raise NotAvailableValueError.new(*args)
- end
- end
- @alternate
- end
-
- def setup_maker(maker)
- xss = maker.xml_stylesheets.new_xml_stylesheet
- ATTRIBUTES.each do |attr|
- xss.__send__("#{attr}=", __send__(attr))
- end
- end
-
- private
- def guess_type(filename)
- /\.([^.]+)$/ =~ filename
- GUESS_TABLE[$1]
- end
-
- end
-end
diff --git a/lib/rss/xmlparser.rb b/lib/rss/xmlparser.rb
deleted file mode 100644
index 64737b821b..0000000000
--- a/lib/rss/xmlparser.rb
+++ /dev/null
@@ -1,91 +0,0 @@
-begin
- require "xml/parser"
-rescue LoadError
- require "xmlparser"
-end
-
-begin
- require "xml/encoding-ja"
-rescue LoadError
- require "xmlencoding-ja"
- if defined?(Kconv)
- module XMLEncoding_ja
- class SJISHandler
- include Kconv
- end
- end
- end
-end
-
-module XML
- class Parser
- unless defined?(Error)
- Error = ::XMLParserError
- end
- end
-end
-
-module RSS
-
- class REXMLLikeXMLParser < ::XML::Parser
-
- include ::XML::Encoding_ja
-
- def listener=(listener)
- @listener = listener
- end
-
- def startElement(name, attrs)
- @listener.tag_start(name, attrs)
- end
-
- def endElement(name)
- @listener.tag_end(name)
- end
-
- def character(data)
- @listener.text(data)
- end
-
- def xmlDecl(version, encoding, standalone)
- @listener.xmldecl(version, encoding, standalone == 1)
- end
-
- def processingInstruction(target, content)
- @listener.instruction(target, content)
- end
-
- end
-
- class XMLParserParser < BaseParser
-
- private
- def listener
- XMLParserListener
- end
-
- def _parse
- begin
- parser = REXMLLikeXMLParser.new
- parser.listener = @listener
- parser.parse(@rss)
- rescue ::XML::Parser::Error => e
- raise NotWellFormedError.new(parser.line){e.message}
- end
- end
-
- end
-
- class XMLParserListener < BaseListener
-
- include ListenerMixin
-
- def xmldecl(version, encoding, standalone)
- super
- # Encoding is converted to UTF-8 when XMLParser parses XML.
- @encoding = 'UTF-8'
- end
-
- end
-
-end
diff --git a/lib/rss/xmlscanner.rb b/lib/rss/xmlscanner.rb
deleted file mode 100644
index c5a11bad18..0000000000
--- a/lib/rss/xmlscanner.rb
+++ /dev/null
@@ -1,102 +0,0 @@
-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