aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rss/xml-stylesheet.rb
diff options
context:
space:
mode:
authorkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-03-21 09:20:47 +0000
committerkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-03-21 09:20:47 +0000
commit7ead69e5b3a2b09878037f11a7dda59ae402ccbf (patch)
treef7a422e5983f2c475c831e5d70987437eb77fa69 /lib/rss/xml-stylesheet.rb
parent2639d6dc809a3f78c96543c839d72d05e6e90ca7 (diff)
downloadruby-7ead69e5b3a2b09878037f11a7dda59ae402ccbf.tar.gz
* test/rss/test_xml-stylesheet.rb: added tests for xml-stylesheet.
* lib/rss/xml-stylesheet.rb: added xml-stylesheet parsing function. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5989 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rss/xml-stylesheet.rb')
-rw-r--r--lib/rss/xml-stylesheet.rb94
1 files changed, 94 insertions, 0 deletions
diff --git a/lib/rss/xml-stylesheet.rb b/lib/rss/xml-stylesheet.rb
new file mode 100644
index 0000000000..7862c4f278
--- /dev/null
+++ b/lib/rss/xml-stylesheet.rb
@@ -0,0 +1,94 @@
+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
+
+ private
+ def guess_type(filename)
+ /\.([^.]+)/ =~ filename
+ GUESS_TABLE[$1]
+ end
+
+ end
+end