coderay 1.0.0.598.pre → 1.0.0.738.pre
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/bin/coderay +1 -1
- data/lib/coderay.rb +38 -32
- data/lib/coderay/duo.rb +1 -54
- data/lib/coderay/encoder.rb +31 -33
- data/lib/coderay/encoders/_map.rb +4 -2
- data/lib/coderay/encoders/comment_filter.rb +0 -61
- data/lib/coderay/encoders/count.rb +2 -23
- data/lib/coderay/encoders/debug.rb +11 -60
- data/lib/coderay/encoders/filter.rb +0 -46
- data/lib/coderay/encoders/html.rb +83 -91
- data/lib/coderay/encoders/html/css.rb +1 -6
- data/lib/coderay/encoders/html/numbering.rb +18 -21
- data/lib/coderay/encoders/html/output.rb +10 -52
- data/lib/coderay/encoders/json.rb +19 -39
- data/lib/coderay/encoders/lines_of_code.rb +7 -52
- data/lib/coderay/encoders/null.rb +6 -13
- data/lib/coderay/encoders/statistic.rb +30 -93
- data/lib/coderay/encoders/terminal.rb +3 -4
- data/lib/coderay/encoders/text.rb +1 -23
- data/lib/coderay/encoders/token_kind_filter.rb +0 -58
- data/lib/coderay/helpers/file_type.rb +119 -240
- data/lib/coderay/helpers/gzip.rb +41 -0
- data/lib/coderay/helpers/plugin.rb +237 -307
- data/lib/coderay/scanner.rb +112 -88
- data/lib/coderay/scanners/_map.rb +3 -3
- data/lib/coderay/scanners/c.rb +7 -7
- data/lib/coderay/scanners/clojure.rb +204 -0
- data/lib/coderay/scanners/css.rb +10 -20
- data/lib/coderay/scanners/debug.rb +9 -55
- data/lib/coderay/scanners/diff.rb +21 -4
- data/lib/coderay/scanners/html.rb +65 -18
- data/lib/coderay/scanners/java.rb +3 -2
- data/lib/coderay/scanners/java_script.rb +3 -3
- data/lib/coderay/scanners/json.rb +7 -6
- data/lib/coderay/scanners/php.rb +2 -1
- data/lib/coderay/scanners/rhtml.rb +6 -2
- data/lib/coderay/scanners/ruby.rb +193 -193
- data/lib/coderay/scanners/ruby/patterns.rb +15 -82
- data/lib/coderay/scanners/ruby/string_state.rb +71 -0
- data/lib/coderay/scanners/sql.rb +1 -1
- data/lib/coderay/scanners/yaml.rb +4 -2
- data/lib/coderay/styles/_map.rb +2 -2
- data/lib/coderay/styles/alpha.rb +48 -38
- data/lib/coderay/styles/cycnus.rb +2 -1
- data/lib/coderay/token_kinds.rb +88 -86
- data/lib/coderay/tokens.rb +88 -112
- data/test/functional/basic.rb +184 -5
- data/test/functional/examples.rb +4 -4
- data/test/functional/for_redcloth.rb +3 -2
- data/test/functional/suite.rb +7 -6
- metadata +11 -24
- data/lib/coderay/helpers/gzip_simple.rb +0 -123
- data/test/functional/load_plugin_scanner.rb +0 -11
- data/test/functional/vhdl.rb +0 -126
- data/test/functional/word_list.rb +0 -79
@@ -20,7 +20,7 @@ module Encoders
|
|
20
20
|
parse style::TOKEN_COLORS
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
23
|
+
def get_style styles
|
24
24
|
cl = @classes[styles.first]
|
25
25
|
return '' unless cl
|
26
26
|
style = ''
|
@@ -63,8 +63,3 @@ module Encoders
|
|
63
63
|
|
64
64
|
end
|
65
65
|
end
|
66
|
-
|
67
|
-
if $0 == __FILE__
|
68
|
-
require 'pp'
|
69
|
-
pp CodeRay::Encoders::HTML::CSS.new
|
70
|
-
end
|
@@ -3,9 +3,9 @@ module Encoders
|
|
3
3
|
|
4
4
|
class HTML
|
5
5
|
|
6
|
-
module
|
6
|
+
module Numbering # :nodoc:
|
7
7
|
|
8
|
-
def number! mode = :table, options = {}
|
8
|
+
def self.number! output, mode = :table, options = {}
|
9
9
|
return self unless mode
|
10
10
|
|
11
11
|
options = DEFAULT_OPTIONS.merge options
|
@@ -26,7 +26,7 @@ module Encoders
|
|
26
26
|
"<a href=\"##{anchor}\" name=\"#{anchor}\">#{line}</a>"
|
27
27
|
end
|
28
28
|
else
|
29
|
-
proc { |line| line.to_s }
|
29
|
+
proc { |line| line.to_s } # :to_s.to_proc in Ruby 1.8.7+
|
30
30
|
end
|
31
31
|
|
32
32
|
bold_every = options[:bold_every]
|
@@ -56,12 +56,20 @@ module Encoders
|
|
56
56
|
raise ArgumentError, 'Invalid value %p for :bolding; false or Integer expected.' % bold_every
|
57
57
|
end
|
58
58
|
|
59
|
+
line_count = output.count("\n")
|
60
|
+
position_of_last_newline = output.rindex(RUBY_VERSION >= '1.9' ? /\n/ : ?\n)
|
61
|
+
if position_of_last_newline
|
62
|
+
after_last_newline = output[position_of_last_newline + 1 .. -1]
|
63
|
+
ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/]
|
64
|
+
line_count += 1 if not ends_with_newline
|
65
|
+
end
|
66
|
+
|
59
67
|
case mode
|
60
68
|
when :inline
|
61
69
|
max_width = (start + line_count).to_s.size
|
62
70
|
line_number = start
|
63
71
|
opened_tags = []
|
64
|
-
gsub!(/^.*$\n?/) do |line|
|
72
|
+
output.gsub!(/^.*$\n?/) do |line|
|
65
73
|
line.chomp!
|
66
74
|
open = opened_tags.join
|
67
75
|
line.scan(%r!<(/)?span[^>]*>?!) do |close,|
|
@@ -80,13 +88,13 @@ module Encoders
|
|
80
88
|
end
|
81
89
|
|
82
90
|
when :table
|
83
|
-
line_numbers = (start ... start + line_count).
|
91
|
+
line_numbers = (start ... start + line_count).map(&bolding).join("\n")
|
84
92
|
line_numbers << "\n"
|
93
|
+
line_numbers_table_template = Output::TABLE.apply('LINE_NUMBERS', line_numbers)
|
85
94
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
@wrapped_in = :div
|
95
|
+
output.gsub!(/<\/div>\n/, '</div>')
|
96
|
+
output.wrap_in! line_numbers_table_template
|
97
|
+
output.wrapped_in = :div
|
90
98
|
|
91
99
|
when :list
|
92
100
|
raise NotImplementedError, 'The :list option is no longer available. Use :table.'
|
@@ -96,18 +104,7 @@ module Encoders
|
|
96
104
|
[mode, [:table, :inline]]
|
97
105
|
end
|
98
106
|
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
def line_count
|
103
|
-
line_count = count("\n")
|
104
|
-
position_of_last_newline = rindex(?\n)
|
105
|
-
if position_of_last_newline
|
106
|
-
after_last_newline = self[position_of_last_newline + 1 .. -1]
|
107
|
-
ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/]
|
108
|
-
line_count += 1 if not ends_with_newline
|
109
|
-
end
|
110
|
-
line_count
|
107
|
+
output
|
111
108
|
end
|
112
109
|
|
113
110
|
end
|
@@ -17,26 +17,13 @@ module Encoders
|
|
17
17
|
|
18
18
|
class << self
|
19
19
|
|
20
|
-
# This makes Output look like a class.
|
21
|
-
#
|
22
|
-
# Example:
|
23
|
-
#
|
24
|
-
# a = Output.new '<span class="co">Code</span>'
|
25
|
-
# a.wrap! :page
|
26
|
-
def new string, css = CSS.new, element = nil
|
27
|
-
output = string.clone.extend self
|
28
|
-
output.wrapped_in = element
|
29
|
-
output.css = css
|
30
|
-
output
|
31
|
-
end
|
32
|
-
|
33
20
|
# Raises an exception if an object that doesn't respond to to_str is extended by Output,
|
34
21
|
# to prevent users from misuse. Use Module#remove_method to disable.
|
35
|
-
def extended o
|
22
|
+
def extended o # :nodoc:
|
36
23
|
warn "The Output module is intended to extend instances of String, not #{o.class}." unless o.respond_to? :to_str
|
37
24
|
end
|
38
25
|
|
39
|
-
def make_stylesheet css, in_tag = false
|
26
|
+
def make_stylesheet css, in_tag = false # :nodoc:
|
40
27
|
sheet = css.stylesheet
|
41
28
|
sheet = <<-CSS if in_tag
|
42
29
|
<style type="text/css">
|
@@ -46,27 +33,13 @@ module Encoders
|
|
46
33
|
sheet
|
47
34
|
end
|
48
35
|
|
49
|
-
def page_template_for_css css
|
36
|
+
def page_template_for_css css # :nodoc:
|
50
37
|
sheet = make_stylesheet css
|
51
38
|
PAGE.apply 'CSS', sheet
|
52
39
|
end
|
53
40
|
|
54
|
-
# Define a new wrapper. This is meta programming.
|
55
|
-
def wrapper *wrappers
|
56
|
-
wrappers.each do |wrapper|
|
57
|
-
define_method wrapper do |*args|
|
58
|
-
wrap wrapper, *args
|
59
|
-
end
|
60
|
-
define_method "#{wrapper}!".to_sym do |*args|
|
61
|
-
wrap! wrapper, *args
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
41
|
end
|
67
42
|
|
68
|
-
wrapper :div, :span, :page
|
69
|
-
|
70
43
|
def wrapped_in? element
|
71
44
|
wrapped_in == element
|
72
45
|
end
|
@@ -76,16 +49,13 @@ module Encoders
|
|
76
49
|
end
|
77
50
|
attr_writer :wrapped_in
|
78
51
|
|
79
|
-
def wrap_in template
|
80
|
-
clone.wrap_in! template
|
81
|
-
end
|
82
|
-
|
83
52
|
def wrap_in! template
|
84
53
|
Template.wrap! self, template, 'CONTENT'
|
85
54
|
self
|
86
55
|
end
|
87
56
|
|
88
57
|
def apply_title! title
|
58
|
+
# FIXME: This may change the output!
|
89
59
|
self.sub!(/(<title>)(<\/title>)/) { $1 + title + $2 }
|
90
60
|
self
|
91
61
|
end
|
@@ -116,14 +86,12 @@ module Encoders
|
|
116
86
|
self
|
117
87
|
end
|
118
88
|
|
119
|
-
def wrap *args
|
120
|
-
clone.wrap!(*args)
|
121
|
-
end
|
122
|
-
|
123
89
|
def stylesheet in_tag = false
|
124
90
|
Output.make_stylesheet @css, in_tag
|
125
91
|
end
|
126
92
|
|
93
|
+
#-- don't include the templates in docu
|
94
|
+
|
127
95
|
class Template < String # :nodoc:
|
128
96
|
|
129
97
|
def self.wrap! str, template, target
|
@@ -145,34 +113,24 @@ module Encoders
|
|
145
113
|
end
|
146
114
|
end
|
147
115
|
|
148
|
-
module Simple # :nodoc:
|
149
|
-
def ` str #` <-- for stupid editors
|
150
|
-
Template.new str
|
151
|
-
end
|
152
|
-
end
|
153
116
|
end
|
154
117
|
|
155
|
-
|
156
|
-
|
157
|
-
#-- don't include the templates in docu
|
158
|
-
|
159
|
-
SPAN = `<span class="CodeRay"><%CONTENT%></span>`
|
118
|
+
SPAN = Template.new '<span class="CodeRay"><%CONTENT%></span>'
|
160
119
|
|
161
|
-
DIV =
|
120
|
+
DIV = Template.new <<-DIV
|
162
121
|
<div class="CodeRay">
|
163
122
|
<div class="code"><pre><%CONTENT%></pre></div>
|
164
123
|
</div>
|
165
124
|
DIV
|
166
125
|
|
167
|
-
TABLE =
|
126
|
+
TABLE = Template.new <<-TABLE
|
168
127
|
<table class="CodeRay"><tr>
|
169
128
|
<td class="line_numbers" title="double click to toggle" ondblclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre><%LINE_NUMBERS%></pre></td>
|
170
129
|
<td class="code"><pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"><%CONTENT%></pre></td>
|
171
130
|
</tr></table>
|
172
131
|
TABLE
|
173
|
-
# title="double click to expand"
|
174
132
|
|
175
|
-
PAGE =
|
133
|
+
PAGE = Template.new <<-PAGE
|
176
134
|
<!DOCTYPE html>
|
177
135
|
<html>
|
178
136
|
<head>
|
@@ -1,4 +1,3 @@
|
|
1
|
-
($:.unshift '../..'; require 'coderay') unless defined? CodeRay
|
2
1
|
module CodeRay
|
3
2
|
module Encoders
|
4
3
|
|
@@ -18,20 +17,33 @@ module Encoders
|
|
18
17
|
# ]
|
19
18
|
class JSON < Encoder
|
20
19
|
|
20
|
+
begin
|
21
|
+
require 'json'
|
22
|
+
rescue LoadError
|
23
|
+
begin
|
24
|
+
require 'rubygems'
|
25
|
+
gem "json#{'-jruby' if defined? JRUBY_VERSION}"
|
26
|
+
require 'json'
|
27
|
+
rescue LoadError
|
28
|
+
$stderr.puts "The JSON encoder needs the JSON library.\n" \
|
29
|
+
"Please gem install json."
|
30
|
+
raise
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
21
34
|
register_for :json
|
22
35
|
FILE_EXTENSION = 'json'
|
23
36
|
|
24
37
|
protected
|
25
38
|
def setup options
|
26
|
-
begin
|
27
|
-
require 'json'
|
28
|
-
rescue LoadError
|
29
|
-
require 'rubygems'
|
30
|
-
require 'json'
|
31
|
-
end
|
32
39
|
@out = []
|
33
40
|
end
|
34
41
|
|
42
|
+
def finish options
|
43
|
+
@out.to_json
|
44
|
+
end
|
45
|
+
|
46
|
+
public
|
35
47
|
def text_token text, kind
|
36
48
|
@out << { :type => 'text', :text => text, :kind => kind }
|
37
49
|
end
|
@@ -52,39 +64,7 @@ module Encoders
|
|
52
64
|
@out << { :type => 'block', :action => 'end_line', :kind => kind }
|
53
65
|
end
|
54
66
|
|
55
|
-
def finish options
|
56
|
-
@out.to_json
|
57
|
-
end
|
58
|
-
|
59
67
|
end
|
60
68
|
|
61
69
|
end
|
62
70
|
end
|
63
|
-
|
64
|
-
if $0 == __FILE__
|
65
|
-
$VERBOSE = true
|
66
|
-
$: << File.join(File.dirname(__FILE__), '..')
|
67
|
-
eval DATA.read, nil, $0, __LINE__ + 4
|
68
|
-
end
|
69
|
-
|
70
|
-
__END__
|
71
|
-
require 'test/unit'
|
72
|
-
$:.delete '.'
|
73
|
-
require 'rubygems' if RUBY_VERSION < '1.9'
|
74
|
-
|
75
|
-
class JSONEncoderTest < Test::Unit::TestCase
|
76
|
-
|
77
|
-
def test_json_output
|
78
|
-
json = CodeRay.scan('puts "Hello world!"', :ruby).json
|
79
|
-
assert_equal [
|
80
|
-
{"type"=>"text", "text"=>"puts", "kind"=>"ident"},
|
81
|
-
{"type"=>"text", "text"=>" ", "kind"=>"space"},
|
82
|
-
{"type"=>"block", "action"=>"open", "kind"=>"string"},
|
83
|
-
{"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
|
84
|
-
{"type"=>"text", "text"=>"Hello world!", "kind"=>"content"},
|
85
|
-
{"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
|
86
|
-
{"type"=>"block", "action"=>"close", "kind"=>"string"},
|
87
|
-
], JSON.load(json)
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
($:.unshift '../..'; require 'coderay') unless defined? CodeRay
|
2
1
|
module CodeRay
|
3
2
|
module Encoders
|
4
3
|
|
@@ -23,70 +22,26 @@ module Encoders
|
|
23
22
|
|
24
23
|
protected
|
25
24
|
|
25
|
+
def setup options
|
26
|
+
@out = 0
|
27
|
+
end
|
28
|
+
|
26
29
|
def compile tokens, options
|
27
30
|
if scanner = tokens.scanner
|
28
31
|
kinds_not_loc = scanner.class::KINDS_NOT_LOC
|
29
32
|
else
|
30
|
-
warn
|
33
|
+
warn "Tokens have no associated scanner, counting all nonempty lines." if $VERBOSE
|
31
34
|
kinds_not_loc = CodeRay::Scanners::Scanner::KINDS_NOT_LOC
|
32
35
|
end
|
33
36
|
code = tokens.token_kind_filter :exclude => kinds_not_loc
|
34
|
-
@
|
37
|
+
@out = code.to_s.scan(NON_EMPTY_LINE).size
|
35
38
|
end
|
36
39
|
|
37
40
|
def finish options
|
38
|
-
@
|
41
|
+
@out
|
39
42
|
end
|
40
43
|
|
41
44
|
end
|
42
45
|
|
43
46
|
end
|
44
47
|
end
|
45
|
-
|
46
|
-
if $0 == __FILE__
|
47
|
-
$VERBOSE = true
|
48
|
-
$: << File.join(File.dirname(__FILE__), '..')
|
49
|
-
eval DATA.read, nil, $0, __LINE__ + 4
|
50
|
-
end
|
51
|
-
|
52
|
-
__END__
|
53
|
-
require 'test/unit'
|
54
|
-
|
55
|
-
class LinesOfCodeTest < Test::Unit::TestCase
|
56
|
-
|
57
|
-
def test_creation
|
58
|
-
assert CodeRay::Encoders::LinesOfCode < CodeRay::Encoders::Encoder
|
59
|
-
filter = nil
|
60
|
-
assert_nothing_raised do
|
61
|
-
filter = CodeRay.encoder :loc
|
62
|
-
end
|
63
|
-
assert_kind_of CodeRay::Encoders::LinesOfCode, filter
|
64
|
-
assert_nothing_raised do
|
65
|
-
filter = CodeRay.encoder :lines_of_code
|
66
|
-
end
|
67
|
-
assert_kind_of CodeRay::Encoders::LinesOfCode, filter
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_lines_of_code
|
71
|
-
tokens = CodeRay.scan <<-RUBY, :ruby
|
72
|
-
#!/usr/bin/env ruby
|
73
|
-
|
74
|
-
# a minimal Ruby program
|
75
|
-
puts "Hello world!"
|
76
|
-
RUBY
|
77
|
-
assert_equal 1, CodeRay::Encoders::LinesOfCode.new.encode_tokens(tokens)
|
78
|
-
assert_equal 1, tokens.lines_of_code
|
79
|
-
assert_equal 1, tokens.loc
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_filtering_block_tokens
|
83
|
-
tokens = CodeRay::Tokens.new
|
84
|
-
tokens.concat ["Hello\n", :world]
|
85
|
-
tokens.concat ["Hello\n", :space]
|
86
|
-
tokens.concat ["Hello\n", :comment]
|
87
|
-
assert_equal 2, CodeRay::Encoders::LinesOfCode.new.encode_tokens(tokens)
|
88
|
-
assert_equal 2, tokens.lines_of_code
|
89
|
-
assert_equal 2, tokens.loc
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
@@ -1,25 +1,18 @@
|
|
1
1
|
module CodeRay
|
2
2
|
module Encoders
|
3
|
-
|
3
|
+
|
4
4
|
# = Null Encoder
|
5
5
|
#
|
6
6
|
# Does nothing and returns an empty string.
|
7
7
|
class Null < Encoder
|
8
|
-
|
8
|
+
|
9
9
|
register_for :null
|
10
|
-
|
11
|
-
|
12
|
-
def to_proc
|
13
|
-
proc {}
|
14
|
-
end
|
15
|
-
|
16
|
-
protected
|
17
|
-
|
18
|
-
def token(*)
|
10
|
+
|
11
|
+
def text_token text, kind
|
19
12
|
# do nothing
|
20
13
|
end
|
21
|
-
|
14
|
+
|
22
15
|
end
|
23
|
-
|
16
|
+
|
24
17
|
end
|
25
18
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
($:.unshift '../..'; require 'coderay') unless defined? CodeRay
|
2
1
|
module CodeRay
|
3
2
|
module Encoders
|
4
3
|
|
@@ -24,37 +23,7 @@ module Encoders
|
|
24
23
|
@tokens = tokens
|
25
24
|
super
|
26
25
|
end
|
27
|
-
|
28
|
-
def text_token text, kind
|
29
|
-
@real_token_count += 1 unless kind == :space
|
30
|
-
@type_stats[kind].count += 1
|
31
|
-
@type_stats[kind].size += text.size
|
32
|
-
@type_stats['TOTAL'].size += text.size
|
33
|
-
@type_stats['TOTAL'].count += 1
|
34
|
-
end
|
35
|
-
|
36
|
-
# TODO Hierarchy handling
|
37
|
-
def begin_group kind
|
38
|
-
block_token 'begin_group'
|
39
|
-
end
|
40
|
-
|
41
|
-
def end_group kind
|
42
|
-
block_token 'end_group'
|
43
|
-
end
|
44
|
-
|
45
|
-
def begin_line kind
|
46
|
-
block_token 'begin_line'
|
47
|
-
end
|
48
|
-
|
49
|
-
def end_line kind
|
50
|
-
block_token 'end_line'
|
51
|
-
end
|
52
|
-
|
53
|
-
def block_token action
|
54
|
-
@type_stats['TOTAL'].count += 1
|
55
|
-
@type_stats[action].count += 1
|
56
|
-
end
|
57
|
-
|
26
|
+
|
58
27
|
STATS = <<-STATS # :nodoc:
|
59
28
|
|
60
29
|
Code Statistics
|
@@ -89,71 +58,39 @@ Token Types (%d):
|
|
89
58
|
]
|
90
59
|
end
|
91
60
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
end
|
61
|
+
public
|
62
|
+
|
63
|
+
def text_token text, kind
|
64
|
+
@real_token_count += 1 unless kind == :space
|
65
|
+
@type_stats[kind].count += 1
|
66
|
+
@type_stats[kind].size += text.size
|
67
|
+
@type_stats['TOTAL'].size += text.size
|
68
|
+
@type_stats['TOTAL'].count += 1
|
69
|
+
end
|
102
70
|
|
103
|
-
|
104
|
-
|
71
|
+
# TODO Hierarchy handling
|
72
|
+
def begin_group kind
|
73
|
+
block_token 'begin_group'
|
74
|
+
end
|
105
75
|
|
106
|
-
|
107
|
-
|
108
|
-
def test_creation
|
109
|
-
assert CodeRay::Encoders::Statistic < CodeRay::Encoders::Encoder
|
110
|
-
stats = nil
|
111
|
-
assert_nothing_raised do
|
112
|
-
stats = CodeRay.encoder :statistic
|
76
|
+
def end_group kind
|
77
|
+
block_token 'end_group'
|
113
78
|
end
|
114
|
-
assert_kind_of CodeRay::Encoders::Encoder, stats
|
115
|
-
end
|
116
|
-
|
117
|
-
TEST_INPUT = CodeRay::Tokens[
|
118
|
-
['10', :integer],
|
119
|
-
['(\\)', :operator],
|
120
|
-
[:begin_group, :string],
|
121
|
-
['test', :content],
|
122
|
-
[:end_group, :string],
|
123
|
-
[:begin_line, :test],
|
124
|
-
["\n", :space],
|
125
|
-
["\n \t", :space],
|
126
|
-
[" \n", :space],
|
127
|
-
["[]", :method],
|
128
|
-
[:end_line, :test],
|
129
|
-
].flatten
|
130
|
-
TEST_OUTPUT = <<-'DEBUG'
|
131
79
|
|
132
|
-
|
80
|
+
def begin_line kind
|
81
|
+
block_token 'begin_line'
|
82
|
+
end
|
133
83
|
|
134
|
-
|
135
|
-
|
136
|
-
|
84
|
+
def end_line kind
|
85
|
+
block_token 'end_line'
|
86
|
+
end
|
87
|
+
|
88
|
+
def block_token action
|
89
|
+
@type_stats['TOTAL'].count += 1
|
90
|
+
@type_stats[action].count += 1
|
91
|
+
end
|
137
92
|
|
138
|
-
Token Types (5):
|
139
|
-
type count ratio size (average)
|
140
|
-
-------------------------------------------------------------
|
141
|
-
TOTAL 11 100.00 % 1.8
|
142
|
-
space 3 27.27 % 3.0
|
143
|
-
begin_group 1 9.09 % 0.0
|
144
|
-
begin_line 1 9.09 % 0.0
|
145
|
-
content 1 9.09 % 4.0
|
146
|
-
end_group 1 9.09 % 0.0
|
147
|
-
end_line 1 9.09 % 0.0
|
148
|
-
integer 1 9.09 % 2.0
|
149
|
-
method 1 9.09 % 2.0
|
150
|
-
operator 1 9.09 % 3.0
|
151
|
-
|
152
|
-
DEBUG
|
153
|
-
|
154
|
-
def test_filtering_text_tokens
|
155
|
-
assert_equal TEST_OUTPUT, CodeRay::Encoders::Statistic.new.encode_tokens(TEST_INPUT)
|
156
|
-
assert_equal TEST_OUTPUT, TEST_INPUT.statistic
|
157
93
|
end
|
158
|
-
|
159
|
-
end
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|