diff options
author | murphy <murphy@rubychan.de> | 2010-06-27 02:49:23 +0000 |
---|---|---|
committer | murphy <murphy@rubychan.de> | 2010-06-27 02:49:23 +0000 |
commit | b5dd1ba683fb9eb0a74ab0b1f54fd9977e0ed3be (patch) | |
tree | 07620834114bf7b7ec19acfb8f86647c3d0f88b1 /lib/coderay/encoders | |
parent | 1a3a0670c82a6e7d75c2ada82dd50a78d8b5de36 (diff) | |
download | coderay-b5dd1ba683fb9eb0a74ab0b1f54fd9977e0ed3be.tar.gz |
More speedups for HTML encoding (numbering, CSS styles, Ruby 1.9).
Diffstat (limited to 'lib/coderay/encoders')
-rw-r--r-- | lib/coderay/encoders/html.rb | 38 | ||||
-rw-r--r-- | lib/coderay/encoders/html/css.rb | 2 | ||||
-rw-r--r-- | lib/coderay/encoders/html/numbering.rb | 10 |
3 files changed, 17 insertions, 33 deletions
diff --git a/lib/coderay/encoders/html.rb b/lib/coderay/encoders/html.rb index 9d1671d..bd48a72 100644 --- a/lib/coderay/encoders/html.rb +++ b/lib/coderay/encoders/html.rb @@ -185,45 +185,29 @@ module Encoders raise ArgumentError, "Unknown value %p for :hint; \ expected :info, :debug, false, or nil." % hint end - + + css_classes = Tokens::AbbreviationForKind case options[:css] when :class @css_style = Hash.new do |h, k| kind = k.is_a?(Symbol) ? k : k.first - c = Tokens::AbbreviationForKind[kind] h[k.is_a?(Symbol) ? k : k.dup] = - if c != :NO_HIGHLIGHT or (hint && kind != :space) - if hint - title = HTML.token_path_to_hint hint, k - end - if c == :NO_HIGHLIGHT - '<span%s>' % [title] - else - '<span%s class="%s">' % [title, c] - end + if kind != :space && (hint || css_classes[kind]) + title = HTML.token_path_to_hint hint, k if hint + css_class = css_classes[k] + "<span#{title}#{" class=\"#{css_class}\"" if css_class}>" end end when :style @css_style = Hash.new do |h, k| - if k.is_a?(Symbol) - kind = k - ks = [kind] - else - kind = k.first - ks = k - end - classes = ks.map { |c| Tokens::AbbreviationForKind[c] } + kind = k.is_a?(Symbol) ? k : k.first h[k.is_a?(Symbol) ? k : k.dup] = - if classes.first != :NO_HIGHLIGHT or (hint && kind != :space) - if hint - title = HTML.token_path_to_hint hint, k - end - style = @css[*classes] - if style - '<span%s style="%s">' % [title, style] - end + if kind != :space && (hint || css_classes[kind]) + title = HTML.token_path_to_hint hint, k if hint + style = @css.get_style Array(k).map { |c| css_classes[c] } + "<span#{title}#{" style=\"#{style}\"" if style}>" end end diff --git a/lib/coderay/encoders/html/css.rb b/lib/coderay/encoders/html/css.rb index 05e4fa4..10e89fc 100644 --- a/lib/coderay/encoders/html/css.rb +++ b/lib/coderay/encoders/html/css.rb @@ -20,7 +20,7 @@ module Encoders parse style::TOKEN_COLORS end - def [] *styles + def get_style styles cl = @classes[styles.first] return '' unless cl style = '' diff --git a/lib/coderay/encoders/html/numbering.rb b/lib/coderay/encoders/html/numbering.rb index 3a7edce..ec6d569 100644 --- a/lib/coderay/encoders/html/numbering.rb +++ b/lib/coderay/encoders/html/numbering.rb @@ -26,7 +26,7 @@ module Encoders "<a href=\"##{anchor}\" name=\"#{anchor}\">#{line}</a>" end else - proc { |line| line.to_s } + proc { |line| line.to_s } # :to_s.to_proc in Ruby 1.8.7+ end bold_every = options[:bold_every] @@ -80,11 +80,11 @@ module Encoders end when :table - line_numbers = (start ... start + line_count).to_a.map(&bolding).join("\n") + line_numbers = (start ... start + line_count).map(&bolding).join("\n") line_numbers << "\n" - line_numbers_table_template = TABLE.apply('LINE_NUMBERS', line_numbers) - gsub!(/<\/div>\n/) { '</div>' } + + gsub!(/<\/div>\n/, '</div>') wrap_in! line_numbers_table_template @wrapped_in = :div @@ -101,7 +101,7 @@ module Encoders def line_count line_count = count("\n") - position_of_last_newline = rindex(?\n) + position_of_last_newline = rindex(RUBY_VERSION >= '1.9' ? /\n/ : ?\n) if position_of_last_newline after_last_newline = self[position_of_last_newline + 1 .. -1] ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/] |