summaryrefslogtreecommitdiff
path: root/lib/coderay/encoders
diff options
context:
space:
mode:
authormurphy <murphy@rubychan.de>2010-06-27 02:49:23 +0000
committermurphy <murphy@rubychan.de>2010-06-27 02:49:23 +0000
commitb5dd1ba683fb9eb0a74ab0b1f54fd9977e0ed3be (patch)
tree07620834114bf7b7ec19acfb8f86647c3d0f88b1 /lib/coderay/encoders
parent1a3a0670c82a6e7d75c2ada82dd50a78d8b5de36 (diff)
downloadcoderay-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.rb38
-rw-r--r--lib/coderay/encoders/html/css.rb2
-rw-r--r--lib/coderay/encoders/html/numbering.rb10
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/]