diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2009-11-07 09:08:13 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2009-11-07 09:08:13 +0000 |
commit | be41f7f473070d00302d1a485819248f3b114fc4 (patch) | |
tree | d51d116cc1e3b06f3ea67768470f7728af5e4952 /vendor/plugins/coderay-0.9.0/lib/coderay/encoders/html/css.rb | |
parent | 3b9d8c2a72f64b451db700e2d3dba6bb46e070af (diff) | |
download | redmine-be41f7f473070d00302d1a485819248f3b114fc4.tar.gz redmine-be41f7f473070d00302d1a485819248f3b114fc4.zip |
Upgrade Coderay to 0.9.0.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3014 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'vendor/plugins/coderay-0.9.0/lib/coderay/encoders/html/css.rb')
-rw-r--r-- | vendor/plugins/coderay-0.9.0/lib/coderay/encoders/html/css.rb | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/vendor/plugins/coderay-0.9.0/lib/coderay/encoders/html/css.rb b/vendor/plugins/coderay-0.9.0/lib/coderay/encoders/html/css.rb new file mode 100644 index 000000000..03c26346b --- /dev/null +++ b/vendor/plugins/coderay-0.9.0/lib/coderay/encoders/html/css.rb @@ -0,0 +1,70 @@ +module CodeRay +module Encoders + + class HTML + class CSS + + attr :stylesheet + + def CSS.load_stylesheet style = nil + CodeRay::Styles[style] + end + + def initialize style = :default + @classes = Hash.new + style = CSS.load_stylesheet style + @stylesheet = [ + style::CSS_MAIN_STYLES, + style::TOKEN_COLORS.gsub(/^(?!$)/, '.CodeRay ') + ].join("\n") + parse style::TOKEN_COLORS + end + + def [] *styles + cl = @classes[styles.first] + return '' unless cl + style = '' + 1.upto(styles.size) do |offset| + break if style = cl[styles[offset .. -1]] + end + $stderr.puts 'Style not found: %p' % [styles] if $DEBUG and style.empty? + return style + end + + private + + CSS_CLASS_PATTERN = / + ( # $1 = selectors + (?: + (?: \s* \. [-\w]+ )+ + \s* ,? + )+ + ) + \s* \{ \s* + ( [^\}]+ )? # $2 = style + \s* \} \s* + | + ( . ) # $3 = error + /mx + def parse stylesheet + stylesheet.scan CSS_CLASS_PATTERN do |selectors, style, error| + raise "CSS parse error: '#{error.inspect}' not recognized" if error + for selector in selectors.split(',') + classes = selector.scan(/[-\w]+/) + cl = classes.pop + @classes[cl] ||= Hash.new + @classes[cl][classes] = style.to_s.strip.delete(' ').chomp(';') + end + end + end + + end + end + +end +end + +if $0 == __FILE__ + require 'pp' + pp CodeRay::Encoders::HTML::CSS.new +end |