From fb64737038ca13b4047219c429560b97b98fe22b Mon Sep 17 00:00:00 2001 From: murphy Date: Sat, 29 Oct 2005 04:55:15 +0000 Subject: encoder.rb: Added Encoder#file_extension plugin.rb: #load_plugin --> #load; no more debug messages encoders/html.rb: Documentation; hint system; moved NUMERIZABLE_WRAPPINGS to html_output.rb encoders/helpers/html_output.rb: made stylesheet a method; disabled code cell hint; fixed inline numerizing encoders/debug.rb: changed extension to 'raydebug' etc folder added included etc/raydebug.vim for cool vim highlighting --- lib/coderay/encoders/debug.rb | 2 +- lib/coderay/encoders/helpers/html_output.rb | 20 ++++++-- lib/coderay/encoders/html.rb | 75 +++++++++++++++++++++++------ 3 files changed, 78 insertions(+), 19 deletions(-) (limited to 'lib/coderay/encoders') diff --git a/lib/coderay/encoders/debug.rb b/lib/coderay/encoders/debug.rb index b084733..7358e8b 100644 --- a/lib/coderay/encoders/debug.rb +++ b/lib/coderay/encoders/debug.rb @@ -7,7 +7,7 @@ module CodeRay include Streamable register_for :debug - FILE_EXTENSION = 'debug' + FILE_EXTENSION = 'raydebug' protected def text_token text, kind diff --git a/lib/coderay/encoders/helpers/html_output.rb b/lib/coderay/encoders/helpers/html_output.rb index 849fe1a..2ff5c19 100644 --- a/lib/coderay/encoders/helpers/html_output.rb +++ b/lib/coderay/encoders/helpers/html_output.rb @@ -35,8 +35,12 @@ module CodeRay warn "The Output module is intended to extend instances of String, not #{o.class}." unless o.respond_to? :to_str end + def stylesheet + CSS::DEFAULT_STYLESHEET + end + def page_template_for_css css = :default - css = CSS::DEFAULT_STYLESHEET if css == :default + css = stylesheet if css == :default PAGE.apply 'CSS', css end @@ -94,6 +98,12 @@ module CodeRay clone.wrap!(*args) end + NUMERIZABLE_WRAPPINGS = { + :table => [:div, :page], + :inline => :all, + nil => :all + } + def numerize! mode = :table, options = {} return self unless mode @@ -104,7 +114,8 @@ module CodeRay raise ArgumentError, "Invalid value %p for :line_number_start; Integer expected." % start end - unless NUMERIZABLE_WRAPPINGS.include? options[:wrap] + allowed_wrappings = NUMERIZABLE_WRAPPINGS[mode] + unless allowed_wrappings == :all or allowed_wrappings.include? options[:wrap] raise ArgumentError, "Can't numerize, :wrap must be in %p, but is %p" % [NUMERIZABLE_WRAPPINGS, options[:wrap]] end @@ -136,7 +147,7 @@ module CodeRay line += 1 "#{ line_number.rjust(max_width) } " end - wrap! :div + #wrap! :div when :table # This is really ugly. @@ -206,9 +217,10 @@ module CodeRay DIV_TABLE = <<-`DIV_TABLE` - +
<%LINE_NUMBERS%>
<%CONTENT%>
<%CONTENT%>
DIV_TABLE + # title="double click to expand" PAGE = <<-`PAGE` a HTML page + # puts CodeRay.scan('Some /code/', :ruby).html(:wrap => :span) #-> Some /code/ + # puts CodeRay.scan('Some /code/', :ruby).span #-> the same + # + # puts CodeRay.scan('Some code', :ruby).html( + # :wrap => nil, + # :line_numbers => :inline, + # :css => :style + # ) + # #-> 1 Some code + # + # == Options + # + # :tab_width:: Convert \t characters to +n+ spaces (a number.) + # Default: 8 + # :css:: How to include the styles; can be :class or :style. + # Default: :class + # :wrap:: Wrap in :page, :div, :span or nil. + # Default: :page + # You can also use Encoders::Div and Encoders::Span. + # :line_numbers:: Include line numbers in :table, :inline or nil (no line numbers) + # Default: nil + # :line_number_start: Where to start with line number counting. + # Default: 1 + # :bold_every:: Make every +n+-th number appear bold. + # Default: 10 + # :hint:: Include some information into the output using the title attribute. + # Can be :info (show token type on mouse-over) or :debug. + # Default: false class HTML < Encoder include Streamable @@ -19,8 +56,9 @@ module Encoders :line_numbers => nil, :line_number_start => 1, :bold_every => 10, + + :hint => false, } - NUMERIZABLE_WRAPPINGS = [:div, :page] require 'coderay/encoders/helpers/html_helper' require 'coderay/encoders/helpers/html_output' @@ -50,9 +88,6 @@ module Encoders HTML_ESCAPE_PATTERN = /[&"><\0-\x8\xB-\x1f\x7f-\xff]/ def setup options - if options[:line_numbers] and not NUMERIZABLE_WRAPPINGS.include? options[:wrap] - warn ':line_numbers wanted, but :wrap is %p' % options[:wrap] - end super return if options == @last_options @last_options = options @@ -63,6 +98,9 @@ module Encoders @opened = [nil] @css = CSS.new + hint = options[:hint] + raise ArgumentError if hint and not [:debug, :info].include? hint + case options[:css] when :class @@ -73,15 +111,19 @@ module Encoders type = k end c = ClassOfKind[type] - if c == :NO_HIGHLIGHT + if c == :NO_HIGHLIGHT and not hint h[k] = false else - if options[:debug] - debug_info = ' title="%p"' % [ k ] + title = if hint + if hint == :debug + ' title="%p"' % [ k ] + elsif hint == :info and k.size == 1 + " title=\"#{type.to_s.gsub(/_/, " ").capitalize}\"" + end else - debug_info = '' + '' end - h[k] = '' % [debug_info, c] + h[k] = '' % [title, c] end end @@ -92,19 +134,24 @@ module Encoders else styles = [k] end + type = styles.first styles.map! { |c| ClassOfKind[c] } - if styles.first == :NO_HIGHLIGHT + if styles.first == :NO_HIGHLIGHT and not hint h[k] = false else - if options[:debug] - debug_info = ' title="%s"' % [ styles.inspect.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] } ] + title = if hint + if hint == :debug + ' title="%p"' % [ styles ] + elsif hint == :info and styles.size == 1 + " title=\"#{type.to_s.gsub(/_/, " ").capitalize}\"" + end else - debug_info = '' + '' end style = @css[*styles] h[k] = if style - '' % [debug_info, style] + '' % [title, style] else false end -- cgit v1.2.1