From b5dd1ba683fb9eb0a74ab0b1f54fd9977e0ed3be Mon Sep 17 00:00:00 2001 From: murphy Date: Sun, 27 Jun 2010 02:49:23 +0000 Subject: More speedups for HTML encoding (numbering, CSS styles, Ruby 1.9). --- lib/coderay/encoders/html.rb | 38 ++++++++++------------------------ lib/coderay/encoders/html/css.rb | 2 +- lib/coderay/encoders/html/numbering.rb | 10 ++++----- 3 files changed, 17 insertions(+), 33 deletions(-) (limited to 'lib/coderay/encoders') 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 - '' % [title] - else - '' % [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] + "" 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 - '' % [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] } + "" 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 "#{line}" 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/) { '' } + + gsub!(/<\/div>\n/, '') 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/] -- cgit v1.2.1