annotate vendor/gems/coderay-1.0.0/lib/coderay/encoders/html/css.rb @ 1171:b4558bc5837f bug_505

Close obsolete branch bug_505
author Chris Cannam
date Fri, 03 Aug 2012 19:40:23 +0100
parents cbb26bc654de
children
rev   line source
Chris@909 1 module CodeRay
Chris@909 2 module Encoders
Chris@909 3
Chris@909 4 class HTML
Chris@909 5 class CSS # :nodoc:
Chris@909 6
Chris@909 7 attr :stylesheet
Chris@909 8
Chris@909 9 def CSS.load_stylesheet style = nil
Chris@909 10 CodeRay::Styles[style]
Chris@909 11 end
Chris@909 12
Chris@909 13 def initialize style = :default
Chris@909 14 @classes = Hash.new
Chris@909 15 style = CSS.load_stylesheet style
Chris@909 16 @stylesheet = [
Chris@909 17 style::CSS_MAIN_STYLES,
Chris@909 18 style::TOKEN_COLORS.gsub(/^(?!$)/, '.CodeRay ')
Chris@909 19 ].join("\n")
Chris@909 20 parse style::TOKEN_COLORS
Chris@909 21 end
Chris@909 22
Chris@909 23 def get_style styles
Chris@909 24 cl = @classes[styles.first]
Chris@909 25 return '' unless cl
Chris@909 26 style = ''
Chris@909 27 1.upto styles.size do |offset|
Chris@909 28 break if style = cl[styles[offset .. -1]]
Chris@909 29 end
Chris@909 30 # warn 'Style not found: %p' % [styles] if style.empty?
Chris@909 31 return style
Chris@909 32 end
Chris@909 33
Chris@909 34 private
Chris@909 35
Chris@909 36 CSS_CLASS_PATTERN = /
Chris@909 37 ( # $1 = selectors
Chris@909 38 (?:
Chris@909 39 (?: \s* \. [-\w]+ )+
Chris@909 40 \s* ,?
Chris@909 41 )+
Chris@909 42 )
Chris@909 43 \s* \{ \s*
Chris@909 44 ( [^\}]+ )? # $2 = style
Chris@909 45 \s* \} \s*
Chris@909 46 |
Chris@909 47 ( [^\n]+ ) # $3 = error
Chris@909 48 /mx
Chris@909 49 def parse stylesheet
Chris@909 50 stylesheet.scan CSS_CLASS_PATTERN do |selectors, style, error|
Chris@909 51 raise "CSS parse error: '#{error.inspect}' not recognized" if error
Chris@909 52 for selector in selectors.split(',')
Chris@909 53 classes = selector.scan(/[-\w]+/)
Chris@909 54 cl = classes.pop
Chris@909 55 @classes[cl] ||= Hash.new
Chris@909 56 @classes[cl][classes] = style.to_s.strip.delete(' ').chomp(';')
Chris@909 57 end
Chris@909 58 end
Chris@909 59 end
Chris@909 60
Chris@909 61 end
Chris@909 62 end
Chris@909 63
Chris@909 64 end
Chris@909 65 end