coderay 0.7.4.215 → 0.8.260
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +421 -257
- data/README +24 -13
- data/bin/coderay +9 -4
- data/lib/coderay.rb +19 -17
- data/lib/coderay/duo.rb +67 -9
- data/lib/coderay/encoder.rb +18 -9
- data/lib/coderay/encoders/_map.rb +2 -1
- data/lib/coderay/encoders/debug.rb +14 -11
- data/lib/coderay/encoders/html.rb +44 -17
- data/lib/coderay/encoders/html/css.rb +13 -8
- data/lib/coderay/encoders/html/numerization.rb +8 -6
- data/lib/coderay/encoders/html/output.rb +3 -1
- data/lib/coderay/encoders/statistic.rb +2 -6
- data/lib/coderay/encoders/text.rb +2 -3
- data/lib/coderay/encoders/tokens.rb +3 -3
- data/lib/coderay/encoders/xml.rb +1 -2
- data/lib/coderay/for_redcloth.rb +72 -0
- data/lib/coderay/helpers/file_type.rb +38 -9
- data/lib/coderay/helpers/gzip_simple.rb +1 -0
- data/lib/coderay/helpers/plugin.rb +15 -8
- data/lib/coderay/helpers/word_list.rb +4 -0
- data/lib/coderay/scanner.rb +30 -13
- data/lib/coderay/scanners/_map.rb +1 -1
- data/lib/coderay/scanners/c.rb +3 -1
- data/lib/coderay/scanners/css.rb +181 -0
- data/lib/coderay/scanners/debug.rb +1 -0
- data/lib/coderay/scanners/delphi.rb +1 -0
- data/lib/coderay/scanners/diff.rb +104 -0
- data/lib/coderay/scanners/java.rb +179 -0
- data/lib/coderay/scanners/java/builtin_types.rb +419 -0
- data/lib/coderay/scanners/java_script.rb +187 -0
- data/lib/coderay/scanners/json.rb +106 -0
- data/lib/coderay/scanners/nitro_xhtml.rb +5 -4
- data/lib/coderay/scanners/plaintext.rb +2 -0
- data/lib/coderay/scanners/rhtml.rb +2 -2
- data/lib/coderay/scanners/ruby.rb +64 -50
- data/lib/coderay/scanners/ruby/patterns.rb +15 -19
- data/lib/coderay/scanners/scheme.rb +142 -0
- data/lib/coderay/scanners/sql.Keith.rb +143 -0
- data/lib/coderay/scanners/sql.rb +154 -0
- data/lib/coderay/scanners/xml.rb +1 -0
- data/lib/coderay/styles/cycnus.rb +30 -9
- data/lib/coderay/styles/murphy.rb +15 -2
- data/lib/coderay/{encoders/html/classes.rb → token_classes.rb} +14 -9
- data/lib/coderay/tokens.rb +33 -14
- data/lib/term/ansicolor.rb +220 -0
- metadata +62 -44
data/README
CHANGED
@@ -18,12 +18,12 @@ And with line numbers.
|
|
18
18
|
* is what everybody should have on their website
|
19
19
|
* solves all your problems and makes the girls run after you
|
20
20
|
|
21
|
-
Version: 0.
|
21
|
+
Version: 0.8.0
|
22
22
|
Author:: murphy (Kornelius Kalnbach)
|
23
23
|
Contact:: murphy rubychan de
|
24
24
|
Website:: coderay.rubychan.de[http://coderay.rubychan.de]
|
25
25
|
License:: GNU LGPL; see LICENSE file in the main directory.
|
26
|
-
Subversion:: $Id: README
|
26
|
+
Subversion:: $Id: README 247 2008-08-28 05:06:01Z murphy $
|
27
27
|
|
28
28
|
-----
|
29
29
|
|
@@ -40,8 +40,10 @@ Since CodeRay is still in beta stage, nightly buildy may be useful:
|
|
40
40
|
|
41
41
|
=== Dependencies
|
42
42
|
|
43
|
-
CodeRay needs Ruby 1.8 and the
|
44
|
-
|
43
|
+
CodeRay needs Ruby 1.8 and the
|
44
|
+
strscan[http://www.ruby-doc.org/stdlib/libdoc/strscan/rdoc/index.htm]
|
45
|
+
library (part of the standard library.) It should also run with Ruby 1.9 and
|
46
|
+
yarv.
|
45
47
|
|
46
48
|
|
47
49
|
== Example Usage
|
@@ -67,7 +69,8 @@ Please report errors in this documentation to <coderay cycnus de>.
|
|
67
69
|
|
68
70
|
=== Special Thanks to
|
69
71
|
|
70
|
-
* licenser (Heinz N. Gies) for ending my QBasic career, inventing the Coder
|
72
|
+
* licenser (Heinz N. Gies) for ending my QBasic career, inventing the Coder
|
73
|
+
project and the input/output plugin system.
|
71
74
|
CodeRay would not exist without him.
|
72
75
|
|
73
76
|
=== Thanks to
|
@@ -88,6 +91,8 @@ Please report errors in this documentation to <coderay cycnus de>.
|
|
88
91
|
* Daniel and Dethix from ruby-mine.de
|
89
92
|
* Dookie (who is no longer with us...) and Leonidas from
|
90
93
|
http://www.python-forum.de
|
94
|
+
* Andreas Schwarz for finding out that CaseIgnoringWordList was not case
|
95
|
+
ignoring! Such things really make you write tests.
|
91
96
|
* matz and all Ruby gods and gurus
|
92
97
|
* The inventors of: the computer, the internet, the true color display, HTML &
|
93
98
|
CSS, VIM, RUBY, pizza, microwaves, guitars, scouting, programming, anime,
|
@@ -97,21 +102,27 @@ Where would we be without all those people?
|
|
97
102
|
|
98
103
|
=== Created using
|
99
104
|
|
100
|
-
* Ruby[http://ruby-lang.org/
|
101
|
-
* Chihiro (my Sony VAIO laptop)
|
102
|
-
|
105
|
+
* Ruby[http://ruby-lang.org/]
|
106
|
+
* Chihiro (my Sony VAIO laptop), Henrietta (my new MacBook) and
|
107
|
+
Seras (my Athlon 2200+ tower)
|
108
|
+
* VIM[http://vim.org] and TextMate[http://macromates.com]
|
103
109
|
* RDE[http://homepage2.nifty.com/sakazuki/rde_e.html]
|
104
|
-
* Microsoft Windows (yes, I confess!)
|
105
|
-
* Firefox[http://www.mozilla.org/products/firefox/] and
|
110
|
+
* Microsoft Windows (yes, I confess!) and MacOS X
|
111
|
+
* Firefox[http://www.mozilla.org/products/firefox/] and
|
112
|
+
Thunderbird[http://www.mozilla.org/products/thunderbird/]
|
106
113
|
* Rake[http://rake.rubyforge.org/]
|
107
114
|
* RubyGems[http://docs.rubygems.org/]
|
108
|
-
* {Subversion/TortoiseSVN}[http://tortoisesvn.tigris.org/] using Apache via
|
115
|
+
* {Subversion/TortoiseSVN}[http://tortoisesvn.tigris.org/] using Apache via
|
116
|
+
XAMPP[http://www.apachefriends.org/en/xampp.html]
|
109
117
|
* RDoc (though I'm quite unsatisfied with it)
|
110
|
-
* GNUWin32, MinGW and some other tools to make the shell under windows a bit
|
118
|
+
* GNUWin32, MinGW and some other tools to make the shell under windows a bit
|
119
|
+
more useful
|
120
|
+
* Term::ANSIColor[http://term-ansicolor.rubyforge.org/]
|
111
121
|
|
112
122
|
---
|
113
123
|
|
114
124
|
* As you can see, CodeRay was created under heavy use of *free* software.
|
115
125
|
* So CodeRay is also *free*.
|
116
|
-
* If you use CodeRay to create software, think about making this software
|
126
|
+
* If you use CodeRay to create software, think about making this software
|
127
|
+
*free*, too.
|
117
128
|
* Thanks :)
|
data/bin/coderay
CHANGED
@@ -29,11 +29,11 @@ Example:
|
|
29
29
|
if first[/-(\w+)/] == first
|
30
30
|
lang = $1.to_sym
|
31
31
|
input = $stdin.read
|
32
|
-
tokens =
|
32
|
+
tokens = :scan
|
33
33
|
elsif first == '-'
|
34
34
|
lang = $1.to_sym
|
35
35
|
input = $stdin.read
|
36
|
-
tokens =
|
36
|
+
tokens = :scan
|
37
37
|
else
|
38
38
|
file = first
|
39
39
|
tokens = CodeRay.scan_file file
|
@@ -54,8 +54,13 @@ Example:
|
|
54
54
|
$stderr.puts 'No format given; setting to default (HTML Page)'
|
55
55
|
format = :page
|
56
56
|
end
|
57
|
-
|
58
|
-
|
57
|
+
|
58
|
+
# TODO: allow streaming
|
59
|
+
if tokens == :scan
|
60
|
+
output = CodeRay::Duo[lang => format].highlight input #, :stream => true
|
61
|
+
else
|
62
|
+
output = tokens.encode format
|
63
|
+
end
|
59
64
|
out = $stdout
|
60
65
|
if output_filename
|
61
66
|
output_filename += '.' + CodeRay::Encoders[format]::FILE_EXTENSION
|
data/lib/coderay.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# = CodeRay Library
|
2
2
|
#
|
3
|
-
# $Id: coderay.rb
|
3
|
+
# $Id: coderay.rb 260 2008-10-08 20:18:31Z murphy $
|
4
4
|
#
|
5
5
|
# CodeRay is a Ruby library for syntax highlighting.
|
6
6
|
#
|
@@ -24,8 +24,8 @@
|
|
24
24
|
#
|
25
25
|
# == Usage
|
26
26
|
#
|
27
|
-
# Remember you need RubyGems to use CodeRay. Run Ruby with
|
28
|
-
# if required.
|
27
|
+
# Remember you need RubyGems to use CodeRay, unless you have it in your load path. Run Ruby with
|
28
|
+
# -rubygems option if required.
|
29
29
|
#
|
30
30
|
# === Highlight Ruby code in a string as html
|
31
31
|
#
|
@@ -44,19 +44,15 @@
|
|
44
44
|
#
|
45
45
|
# You can include this div in your page. The used CSS styles can be printed with
|
46
46
|
#
|
47
|
-
# %
|
47
|
+
# % coderay_stylesheet
|
48
48
|
#
|
49
49
|
# === Highlight without typing too much
|
50
|
-
#
|
50
|
+
#
|
51
51
|
# If you are one of the hasty (or lazy, or extremely curious) people, just run this file:
|
52
|
-
#
|
53
|
-
# % ruby -rubygems coderay.rb
|
54
52
|
#
|
55
|
-
#
|
53
|
+
# % ruby -rubygems /path/to/coderay/coderay.rb > example.html
|
56
54
|
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
# and look at the file it created.
|
55
|
+
# and look at the file it created in your browser.
|
60
56
|
#
|
61
57
|
# = CodeRay Module
|
62
58
|
#
|
@@ -111,7 +107,7 @@
|
|
111
107
|
#
|
112
108
|
# CodeRay.scan_stream:: Scan in stream mode.
|
113
109
|
#
|
114
|
-
#
|
110
|
+
# == All-in-One Encoding
|
115
111
|
#
|
116
112
|
# CodeRay.encode:: Highlight a string with a given input and output format.
|
117
113
|
#
|
@@ -121,11 +117,16 @@
|
|
121
117
|
# for this Encoder must only be done once.
|
122
118
|
#
|
123
119
|
# CodeRay.encoder:: Create an Encoder instance with format and options.
|
120
|
+
# CodeRay.scanner:: Create an Scanner instance for lang, with '' as default code.
|
124
121
|
#
|
125
|
-
#
|
126
|
-
# on creation; you can't re-use them with another string.
|
122
|
+
# To make use of CodeRay.scanner, use CodeRay::Scanner::code=.
|
127
123
|
#
|
128
|
-
#
|
124
|
+
# The scanning methods provide more flexibility; we recommend to use these.
|
125
|
+
#
|
126
|
+
# == Reusing Scanners and Encoders
|
127
|
+
#
|
128
|
+
# If you want to re-use scanners and encoders (because that is faster), see
|
129
|
+
# CodeRay::Duo for the most convenient (and recommended) interface.
|
129
130
|
module CodeRay
|
130
131
|
|
131
132
|
# Version: Major.Minor.Teeny[.Revision]
|
@@ -133,7 +134,7 @@ module CodeRay
|
|
133
134
|
# Minor: odd for beta, even for stable
|
134
135
|
# Teeny: development state
|
135
136
|
# Revision: Subversion Revision number (generated on rake)
|
136
|
-
VERSION = '0.
|
137
|
+
VERSION = '0.8'
|
137
138
|
|
138
139
|
require 'coderay/tokens'
|
139
140
|
require 'coderay/scanner'
|
@@ -314,6 +315,7 @@ end
|
|
314
315
|
# Run a test script.
|
315
316
|
if $0 == __FILE__
|
316
317
|
$stderr.print 'Press key to print demo.'; gets
|
317
|
-
|
318
|
+
# Just use this file as an example of Ruby code.
|
319
|
+
code = File.read(__FILE__)[/module CodeRay.*/m]
|
318
320
|
print CodeRay.scan(code, :ruby).html
|
319
321
|
end
|
data/lib/coderay/duo.rb
CHANGED
@@ -4,26 +4,84 @@ module CodeRay
|
|
4
4
|
#
|
5
5
|
# $Id: scanner.rb 123 2006-03-21 14:46:34Z murphy $
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# A Duo is a convenient way to use CodeRay. You just create a Duo,
|
8
|
+
# giving it a lang (language of the input code) and a format (desired
|
9
|
+
# output format), and call Duo#highlight with the code.
|
10
|
+
#
|
11
|
+
# Duo makes it easy to re-use both scanner and encoder for a repetitive
|
12
|
+
# task. It also provides a very easy interface syntax:
|
13
|
+
#
|
14
|
+
# require 'coderay'
|
15
|
+
# CodeRay::Duo[:python, :div].highlight 'import this'
|
16
|
+
#
|
17
|
+
# Until you want to do uncommon things with CodeRay, I recommend to use
|
18
|
+
# this method, since it takes care of everything.
|
8
19
|
class Duo
|
9
20
|
|
10
|
-
attr_accessor :
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
21
|
+
attr_accessor :lang, :format, :options
|
22
|
+
|
23
|
+
# Create a new Duo, holding a lang and a format to highlight code.
|
24
|
+
#
|
25
|
+
# simple:
|
26
|
+
# CodeRay::Duo[:ruby, :page].highlight 'bla 42'
|
27
|
+
#
|
28
|
+
# streaming:
|
29
|
+
# CodeRay::Duo[:ruby, :page].highlight 'bar 23', :stream => true
|
30
|
+
#
|
31
|
+
# with options:
|
32
|
+
# CodeRay::Duo[:ruby, :html, :hint => :debug].highlight '????::??'
|
33
|
+
#
|
34
|
+
# alternative syntax without options:
|
35
|
+
# CodeRay::Duo[:ruby => :statistic].encode 'class << self; end'
|
36
|
+
#
|
37
|
+
# alternative syntax with options:
|
38
|
+
# CodeRay::Duo[{ :ruby => :statistic }, :do => :something].encode 'abc'
|
39
|
+
#
|
40
|
+
# The options are forwarded to scanner and encoder
|
41
|
+
# (see CodeRay.get_scanner_options).
|
42
|
+
def initialize lang = nil, format = nil, options = {}
|
43
|
+
if format == nil and lang.is_a? Hash and lang.size == 1
|
44
|
+
@lang = lang.keys.first
|
45
|
+
@format = lang[@lang]
|
46
|
+
else
|
47
|
+
@lang = lang
|
48
|
+
@format = format
|
49
|
+
end
|
50
|
+
@options = options
|
15
51
|
end
|
16
52
|
|
17
53
|
class << self
|
54
|
+
# To allow calls like Duo[:ruby, :html].highlight.
|
18
55
|
alias [] new
|
19
56
|
end
|
20
57
|
|
21
|
-
|
22
|
-
|
23
|
-
@
|
58
|
+
# The scanner of the duo. Only created once.
|
59
|
+
def scanner
|
60
|
+
@scanner ||= CodeRay.scanner @lang, CodeRay.get_scanner_options(@options)
|
61
|
+
end
|
62
|
+
|
63
|
+
# The encoder of the duo. Only created once.
|
64
|
+
def encoder
|
65
|
+
@encoder ||= CodeRay.encoder @format, @options
|
66
|
+
end
|
67
|
+
|
68
|
+
# Tokenize and highlight the code using +scanner+ and +encoder+.
|
69
|
+
#
|
70
|
+
# If the :stream option is set, the Duo will go into streaming mode,
|
71
|
+
# saving memory for the cost of time.
|
72
|
+
def encode code, options = { :stream => false }
|
73
|
+
stream = options.delete :stream
|
74
|
+
options = @options.merge options
|
75
|
+
if stream
|
76
|
+
encoder.encode_stream(code, @lang, options)
|
77
|
+
else
|
78
|
+
scanner.code = code
|
79
|
+
encoder.encode_tokens(scanner.tokenize, options)
|
80
|
+
end
|
24
81
|
end
|
25
82
|
alias highlight encode
|
26
83
|
|
27
84
|
end
|
28
85
|
|
29
86
|
end
|
87
|
+
|
data/lib/coderay/encoder.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "stringio"
|
2
|
+
|
1
3
|
module CodeRay
|
2
4
|
|
3
5
|
# This module holds the Encoder class and its subclasses.
|
@@ -40,7 +42,7 @@ module CodeRay
|
|
40
42
|
# downcase class name instead.
|
41
43
|
def const_missing sym
|
42
44
|
if sym == :FILE_EXTENSION
|
43
|
-
|
45
|
+
plugin_id
|
44
46
|
else
|
45
47
|
super
|
46
48
|
end
|
@@ -130,13 +132,15 @@ module CodeRay
|
|
130
132
|
# By default, it calls text_token or block_token, depending on
|
131
133
|
# whether +text+ is a String.
|
132
134
|
def token text, kind
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
135
|
+
out =
|
136
|
+
if text.is_a? ::String # Ruby 1.9: watch out, :open.is_a? String is true
|
137
|
+
text_token text, kind
|
138
|
+
elsif text.is_a? ::Symbol
|
139
|
+
block_token text, kind
|
140
|
+
else
|
141
|
+
raise 'Unknown token text type: %p' % text
|
142
|
+
end
|
143
|
+
@out << out if defined?(@out) && @out
|
140
144
|
end
|
141
145
|
|
142
146
|
def text_token text, kind
|
@@ -148,6 +152,10 @@ module CodeRay
|
|
148
152
|
open_token kind
|
149
153
|
when :close
|
150
154
|
close_token kind
|
155
|
+
when :begin_line
|
156
|
+
begin_line kind
|
157
|
+
when :end_line
|
158
|
+
end_line kind
|
151
159
|
else
|
152
160
|
raise 'unknown block action: %p' % action
|
153
161
|
end
|
@@ -164,7 +172,8 @@ module CodeRay
|
|
164
172
|
# The already created +tokens+ object must be used; it can be a
|
165
173
|
# TokenStream or a Tokens object.
|
166
174
|
def compile tokens, options
|
167
|
-
tokens.each
|
175
|
+
tokens.each { |text, kind| token text, kind } # FIXME for Ruby 1.9?
|
176
|
+
#tokens.each(&self)
|
168
177
|
end
|
169
178
|
|
170
179
|
end
|
@@ -19,17 +19,12 @@ module Encoders
|
|
19
19
|
|
20
20
|
protected
|
21
21
|
def text_token text, kind
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def block_token action, kind
|
32
|
-
@out << super
|
22
|
+
if kind == :space
|
23
|
+
text
|
24
|
+
else
|
25
|
+
text = text.gsub(/[)\\]/, '\\\\\0') # escape ) and \
|
26
|
+
"#{kind}(#{text})"
|
27
|
+
end
|
33
28
|
end
|
34
29
|
|
35
30
|
def open_token kind
|
@@ -40,6 +35,14 @@ module Encoders
|
|
40
35
|
">"
|
41
36
|
end
|
42
37
|
|
38
|
+
def begin_line kind
|
39
|
+
"#{kind}["
|
40
|
+
end
|
41
|
+
|
42
|
+
def end_line kind
|
43
|
+
"]"
|
44
|
+
end
|
45
|
+
|
43
46
|
end
|
44
47
|
|
45
48
|
end
|
@@ -86,7 +86,7 @@ module Encoders
|
|
86
86
|
:hint => false,
|
87
87
|
}
|
88
88
|
|
89
|
-
helper :
|
89
|
+
helper :output, :css
|
90
90
|
|
91
91
|
attr_reader :css
|
92
92
|
|
@@ -119,15 +119,14 @@ module Encoders
|
|
119
119
|
end
|
120
120
|
}
|
121
121
|
|
122
|
-
TRANSPARENT_TOKEN_KINDS =
|
122
|
+
TRANSPARENT_TOKEN_KINDS = [
|
123
123
|
:delimiter, :modifier, :content, :escape, :inline_delimiter,
|
124
|
-
]
|
124
|
+
].to_set
|
125
125
|
|
126
126
|
# Generate a hint about the given +classes+ in a +hint+ style.
|
127
127
|
#
|
128
128
|
# +hint+ may be :info, :info_long or :debug.
|
129
129
|
def self.token_path_to_hint hint, classes
|
130
|
-
return '' unless hint
|
131
130
|
title =
|
132
131
|
case hint
|
133
132
|
when :info
|
@@ -137,7 +136,7 @@ module Encoders
|
|
137
136
|
when :debug
|
138
137
|
classes.inspect
|
139
138
|
end
|
140
|
-
" title=\"#{title}\""
|
139
|
+
title ? " title=\"#{title}\"" : ''
|
141
140
|
end
|
142
141
|
|
143
142
|
def setup options
|
@@ -159,29 +158,32 @@ module Encoders
|
|
159
158
|
|
160
159
|
when :class
|
161
160
|
@css_style = Hash.new do |h, k|
|
162
|
-
|
163
|
-
type = k.first
|
164
|
-
else
|
165
|
-
type = k
|
166
|
-
end
|
167
|
-
c = ClassOfKind[type]
|
161
|
+
c = CodeRay::Tokens::ClassOfKind[k.first]
|
168
162
|
if c == :NO_HIGHLIGHT and not hint
|
169
|
-
h[k] = false
|
163
|
+
h[k.dup] = false
|
170
164
|
else
|
171
|
-
title =
|
172
|
-
|
165
|
+
title = if hint
|
166
|
+
HTML.token_path_to_hint(hint, k[1..-1] << k.first)
|
167
|
+
else
|
168
|
+
''
|
169
|
+
end
|
170
|
+
if c == :NO_HIGHLIGHT
|
171
|
+
h[k.dup] = '<span%s>' % [title]
|
172
|
+
else
|
173
|
+
h[k.dup] = '<span%s class="%s">' % [title, c]
|
174
|
+
end
|
173
175
|
end
|
174
176
|
end
|
175
177
|
|
176
178
|
when :style
|
177
179
|
@css_style = Hash.new do |h, k|
|
178
|
-
if k.is_a? Array
|
180
|
+
if k.is_a? ::Array
|
179
181
|
styles = k.dup
|
180
182
|
else
|
181
183
|
styles = [k]
|
182
184
|
end
|
183
185
|
type = styles.first
|
184
|
-
classes = styles.map { |c| ClassOfKind[c] }
|
186
|
+
classes = styles.map { |c| Tokens::ClassOfKind[c] }
|
185
187
|
if classes.first == :NO_HIGHLIGHT and not hint
|
186
188
|
h[k] = false
|
187
189
|
else
|
@@ -224,13 +226,16 @@ module Encoders
|
|
224
226
|
text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] }
|
225
227
|
end
|
226
228
|
@opened[0] = type
|
227
|
-
if style = @css_style[@opened]
|
229
|
+
if text != "\n" && style = @css_style[@opened]
|
228
230
|
@out << style << text << '</span>'
|
229
231
|
else
|
230
232
|
@out << text
|
231
233
|
end
|
232
234
|
else
|
235
|
+
|
233
236
|
case text
|
237
|
+
|
238
|
+
# token groups, eg. strings
|
234
239
|
when :open
|
235
240
|
@opened[0] = type
|
236
241
|
@out << (@css_style[@opened] || '<span>')
|
@@ -246,6 +251,28 @@ module Encoders
|
|
246
251
|
@out << '</span>'
|
247
252
|
@opened.pop
|
248
253
|
end
|
254
|
+
|
255
|
+
# whole lines to be highlighted, eg. a deleted line in a diff
|
256
|
+
when :begin_line
|
257
|
+
@opened[0] = type
|
258
|
+
if style = @css_style[@opened]
|
259
|
+
@out << style.sub('<span', '<div')
|
260
|
+
else
|
261
|
+
@out << '<div>'
|
262
|
+
end
|
263
|
+
@opened << type
|
264
|
+
when :end_line
|
265
|
+
if @opened.empty?
|
266
|
+
# nothing to close
|
267
|
+
else
|
268
|
+
if $DEBUG and (@opened.size == 1 or @opened.last != type)
|
269
|
+
raise 'Malformed token stream: Trying to close a line (%p) \
|
270
|
+
that is not open. Open are: %p.' % [type, @opened[1..-1]]
|
271
|
+
end
|
272
|
+
@out << '</div>'
|
273
|
+
@opened.pop
|
274
|
+
end
|
275
|
+
|
249
276
|
when nil
|
250
277
|
raise 'Token with nil as text was given: %p' % [[text, type]]
|
251
278
|
else
|