Sha256: 389128d8fb1858680164ba428c1f6948a60c29fdc1bc13656a60f141fcc77392

Contents?: true

Size: 1.45 KB

Versions: 2

Compression:

Stored size: 1.45 KB

Contents

module CodeRay module Encoders

	class HTML
		class CSS

			DEFAULT_STYLESHEET_ID = :cycnus

			attr :stylesheet

			def CSS.load_stylesheet style = :default
				style = DEFAULT_STYLESHEET_ID if style == :default
				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
				raise 'Style not found: %p' % [styles] if $DEBUG and style.empty?
				return style
			end
			
		private
			
			CSS_CLASS_PATTERN = /
				( (?:                # $1 = classes
					\s* \. [-\w]+
				)+ )
				\s* \{ \s*
				( [^\}]+ )?          # $2 = style
				\s* \} \s*
			|
				( . )                # $3 = error
			/mx
			def parse stylesheet
				stylesheet.scan CSS_CLASS_PATTERN do |classes, style, error|
					raise "CSS parse error: '#{error.inspect}' not recognized" if error
					styles = classes.scan(/[-\w]+/)
					cl = styles.pop
					@classes[cl] ||= Hash.new
					@classes[cl][styles] = style.to_s.strip
				end
			end
			
		end
	end
	
end end

if $0 == __FILE__
	require 'pp'
	pp CodeRay::Encoders::HTML::CSS.new
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
coderay-0.5.0.115 ./lib/coderay/encoders/html/css.rb
coderay-0.5.0.121 ./lib/coderay/encoders/html/css.rb