coderay 1.0.0.738.pre → 1.0.0.778.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/{lib/README → README.rdoc} +0 -0
- data/Rakefile +5 -5
- data/lib/coderay.rb +2 -2
- data/lib/coderay/encoder.rb +4 -4
- data/lib/coderay/encoders/_map.rb +3 -1
- data/lib/coderay/encoders/html.rb +9 -17
- data/lib/coderay/encoders/html/numbering.rb +5 -5
- data/lib/coderay/encoders/html/output.rb +3 -3
- data/lib/coderay/encoders/lines_of_code.rb +6 -9
- data/lib/coderay/encoders/statistic.rb +26 -25
- data/lib/coderay/encoders/terminal.rb +2 -2
- data/lib/coderay/encoders/text.rb +9 -9
- data/lib/coderay/encoders/xml.rb +8 -8
- data/lib/coderay/encoders/yaml.rb +5 -6
- data/lib/coderay/for_redcloth.rb +1 -1
- data/lib/coderay/helpers/file_type.rb +44 -42
- data/lib/coderay/helpers/plugin.rb +9 -17
- data/lib/coderay/helpers/word_list.rb +65 -126
- data/lib/coderay/scanner.rb +13 -5
- data/lib/coderay/scanners/_map.rb +3 -2
- data/lib/coderay/scanners/c.rb +5 -5
- data/lib/coderay/scanners/clojure.rb +27 -14
- data/lib/coderay/scanners/cpp.rb +5 -5
- data/lib/coderay/scanners/css.rb +1 -1
- data/lib/coderay/scanners/html.rb +60 -29
- data/lib/coderay/scanners/java.rb +2 -2
- data/lib/coderay/scanners/java_script.rb +1 -1
- data/lib/coderay/scanners/nitro_xhtml.rb +1 -1
- data/lib/coderay/scanners/php.rb +4 -4
- data/lib/coderay/scanners/python.rb +2 -2
- data/lib/coderay/scanners/rhtml.rb +1 -1
- data/lib/coderay/scanners/ruby.rb +4 -11
- data/lib/coderay/scanners/ruby/patterns.rb +1 -1
- data/lib/coderay/scanners/scheme.rb +2 -2
- data/lib/coderay/scanners/sql.rb +26 -19
- data/lib/coderay/scanners/text.rb +26 -0
- data/lib/coderay/styles/alpha.rb +7 -6
- data/lib/coderay/token_kinds.rb +5 -5
- data/test/functional/basic.rb +1 -1
- data/test/functional/examples.rb +5 -3
- metadata +85 -85
- data/lib/coderay/scanners/plaintext.rb +0 -26
data/{lib/README → README.rdoc}
RENAMED
File without changes
|
data/Rakefile
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
$:.unshift File.dirname(__FILE__) unless $:.include? '.'
|
2
|
-
require 'rake/rdoctask'
|
3
2
|
|
4
3
|
ROOT = '.'
|
5
4
|
LIB_ROOT = File.join ROOT, 'lib'
|
6
|
-
EXTRA_RDOC_FILES = %w(
|
5
|
+
EXTRA_RDOC_FILES = %w(README.rdoc FOLDERS)
|
7
6
|
|
8
7
|
task :default => :test
|
9
8
|
|
@@ -23,13 +22,14 @@ else
|
|
23
22
|
ruby './test/functional/for_redcloth.rb'
|
24
23
|
end
|
25
24
|
|
25
|
+
gem 'rdoc' if defined? gem
|
26
|
+
require 'rdoc/task'
|
26
27
|
desc 'Generate documentation for CodeRay'
|
27
28
|
Rake::RDocTask.new :doc do |rd|
|
28
29
|
rd.title = 'CodeRay Documentation'
|
29
|
-
rd.main = '
|
30
|
+
rd.main = 'README.rdoc'
|
30
31
|
rd.rdoc_files.add Dir['lib']
|
31
|
-
rd.rdoc_files.add '
|
32
|
-
rd.rdoc_files.add 'FOLDERS'
|
32
|
+
rd.rdoc_files.add 'README.rdoc'
|
33
33
|
rd.rdoc_dir = 'doc'
|
34
34
|
end
|
35
35
|
|
data/lib/coderay.rb
CHANGED
@@ -168,7 +168,7 @@ module CodeRay
|
|
168
168
|
#
|
169
169
|
# If +lang+ is :auto or omitted, the CodeRay::FileType module is used to
|
170
170
|
# determine it. If it cannot find out what type it is, it uses
|
171
|
-
# CodeRay::Scanners::
|
171
|
+
# CodeRay::Scanners::Text.
|
172
172
|
#
|
173
173
|
# Calls CodeRay.scan.
|
174
174
|
#
|
@@ -179,7 +179,7 @@ module CodeRay
|
|
179
179
|
file = IO.read filename
|
180
180
|
if lang == :auto
|
181
181
|
require 'coderay/helpers/file_type'
|
182
|
-
lang = FileType.fetch filename, :
|
182
|
+
lang = FileType.fetch filename, :text, true
|
183
183
|
end
|
184
184
|
scan file, lang, options = {}, &block
|
185
185
|
end
|
data/lib/coderay/encoder.rb
CHANGED
@@ -46,7 +46,7 @@ module CodeRay
|
|
46
46
|
DEFAULT_OPTIONS = { }
|
47
47
|
|
48
48
|
# The options you gave the Encoder at creating.
|
49
|
-
attr_accessor :options
|
49
|
+
attr_accessor :options, :scanner
|
50
50
|
|
51
51
|
# Creates a new Encoder.
|
52
52
|
# +options+ is saved and used for all encode operations, as long
|
@@ -66,6 +66,7 @@ module CodeRay
|
|
66
66
|
# Encode a Tokens object.
|
67
67
|
def encode_tokens tokens, options = {}
|
68
68
|
options = @options.merge options
|
69
|
+
@scanner = tokens.scanner if tokens.respond_to? :scanner
|
69
70
|
setup options
|
70
71
|
compile tokens, options
|
71
72
|
finish options
|
@@ -74,10 +75,9 @@ module CodeRay
|
|
74
75
|
# Encode the given +code+ using the Scanner for +lang+.
|
75
76
|
def encode code, lang, options = {}
|
76
77
|
options = @options.merge options
|
78
|
+
@scanner = Scanners[lang].new code, CodeRay.get_scanner_options(options).update(:tokens => self)
|
77
79
|
setup options
|
78
|
-
|
79
|
-
scanner_options[:tokens] = self
|
80
|
-
CodeRay.scan code, lang, scanner_options
|
80
|
+
@scanner.tokenize
|
81
81
|
finish options
|
82
82
|
end
|
83
83
|
|
@@ -2,9 +2,11 @@ module CodeRay
|
|
2
2
|
module Encoders
|
3
3
|
|
4
4
|
map \
|
5
|
-
:loc
|
5
|
+
:loc => :lines_of_code,
|
6
6
|
:term => :terminal,
|
7
|
+
:tty => :terminal,
|
7
8
|
:plain => :text,
|
9
|
+
:plaintext => :text,
|
8
10
|
:remove_comments => :comment_filter,
|
9
11
|
:stats => :statistic,
|
10
12
|
:tex => :latex
|
@@ -136,13 +136,7 @@ module Encoders
|
|
136
136
|
HTML_ESCAPE_PATTERN = /[\t"&><\0-\x8\xB-\x1f]/
|
137
137
|
|
138
138
|
TOKEN_KIND_TO_INFO = Hash.new do |h, kind|
|
139
|
-
h[kind] =
|
140
|
-
case kind
|
141
|
-
when :pre_constant # FIXME: rename to :predefined_constant
|
142
|
-
'Predefined constant'
|
143
|
-
else
|
144
|
-
kind.to_s.gsub(/_/, ' ').gsub(/\b\w/) { $&.capitalize }
|
145
|
-
end
|
139
|
+
h[kind] = kind.to_s.gsub(/_/, ' ').gsub(/\b\w/) { $&.capitalize }
|
146
140
|
end
|
147
141
|
|
148
142
|
TRANSPARENT_TOKEN_KINDS = Set[
|
@@ -153,18 +147,14 @@ module Encoders
|
|
153
147
|
#
|
154
148
|
# +hint+ may be :info, :info_long or :debug.
|
155
149
|
def self.token_path_to_hint hint, kinds
|
156
|
-
|
157
|
-
# if TRANSPARENT_TOKEN_KINDS.include? kinds.first
|
158
|
-
# kinds = kinds[1..-1]
|
159
|
-
# else
|
160
|
-
# kinds = kinds[1..-1] + kinds.first
|
161
|
-
# end
|
150
|
+
kinds = Array kinds
|
162
151
|
title =
|
163
152
|
case hint
|
164
153
|
when :info
|
165
|
-
|
154
|
+
kinds = kinds[1..-1] if TRANSPARENT_TOKEN_KINDS.include? kinds.first
|
155
|
+
TOKEN_KIND_TO_INFO[kinds.first]
|
166
156
|
when :info_long
|
167
|
-
kinds.map { |kind| TOKEN_KIND_TO_INFO[kind] }.join('/')
|
157
|
+
kinds.reverse.map { |kind| TOKEN_KIND_TO_INFO[kind] }.join('/')
|
168
158
|
when :debug
|
169
159
|
kinds.inspect
|
170
160
|
end
|
@@ -184,7 +174,7 @@ module Encoders
|
|
184
174
|
hint = options[:hint]
|
185
175
|
if hint && ![:debug, :info, :info_long].include?(hint)
|
186
176
|
raise ArgumentError, "Unknown value %p for :hint; \
|
187
|
-
expected :info, :debug, false, or nil." % hint
|
177
|
+
expected :info, :info_long, :debug, false, or nil." % hint
|
188
178
|
end
|
189
179
|
|
190
180
|
css_classes = TokenKinds
|
@@ -218,6 +208,8 @@ module Encoders
|
|
218
208
|
else
|
219
209
|
raise ArgumentError, "Unknown value %p for :css." % options[:css]
|
220
210
|
end
|
211
|
+
|
212
|
+
@set_last_opened = options[:hint] || options[:css] == :style
|
221
213
|
end
|
222
214
|
|
223
215
|
def finish options
|
@@ -255,7 +247,7 @@ module Encoders
|
|
255
247
|
def begin_group kind
|
256
248
|
@out << (@span_for_kind[@last_opened ? [kind, *@opened] : kind] || '<span>')
|
257
249
|
@opened << kind
|
258
|
-
@last_opened = kind if @
|
250
|
+
@last_opened = kind if @set_last_opened
|
259
251
|
end
|
260
252
|
|
261
253
|
def end_group kind
|
@@ -68,18 +68,18 @@ module Encoders
|
|
68
68
|
when :inline
|
69
69
|
max_width = (start + line_count).to_s.size
|
70
70
|
line_number = start
|
71
|
-
|
71
|
+
nesting = []
|
72
72
|
output.gsub!(/^.*$\n?/) do |line|
|
73
73
|
line.chomp!
|
74
|
-
open =
|
74
|
+
open = nesting.join
|
75
75
|
line.scan(%r!<(/)?span[^>]*>?!) do |close,|
|
76
76
|
if close
|
77
|
-
|
77
|
+
nesting.pop
|
78
78
|
else
|
79
|
-
|
79
|
+
nesting << $&
|
80
80
|
end
|
81
81
|
end
|
82
|
-
close = '</span>' *
|
82
|
+
close = '</span>' * nesting.size
|
83
83
|
|
84
84
|
line_number_text = bolding.call line_number
|
85
85
|
indent = ' ' * (max_width - line_number.to_s.size) # TODO: Optimize (10^x)
|
@@ -3,14 +3,14 @@ module Encoders
|
|
3
3
|
|
4
4
|
class HTML
|
5
5
|
|
6
|
-
# This module is included in the output String
|
6
|
+
# This module is included in the output String of the HTML Encoder.
|
7
7
|
#
|
8
8
|
# It provides methods like wrap, div, page etc.
|
9
9
|
#
|
10
10
|
# Remember to use #clone instead of #dup to keep the modules the object was
|
11
11
|
# extended with.
|
12
12
|
#
|
13
|
-
# TODO:
|
13
|
+
# TODO: Rewrite this without monkey patching.
|
14
14
|
module Output
|
15
15
|
|
16
16
|
attr_accessor :css
|
@@ -25,7 +25,7 @@ module Encoders
|
|
25
25
|
|
26
26
|
def make_stylesheet css, in_tag = false # :nodoc:
|
27
27
|
sheet = css.stylesheet
|
28
|
-
sheet = <<-CSS if in_tag
|
28
|
+
sheet = <<-'CSS' if in_tag
|
29
29
|
<style type="text/css">
|
30
30
|
#{sheet}
|
31
31
|
</style>
|
@@ -14,7 +14,7 @@ module Encoders
|
|
14
14
|
#
|
15
15
|
# A Scanner class should define the token kinds that are not code in the
|
16
16
|
# KINDS_NOT_LOC constant, which defaults to [:comment, :doctype].
|
17
|
-
class LinesOfCode <
|
17
|
+
class LinesOfCode < TokenKindFilter
|
18
18
|
|
19
19
|
register_for :lines_of_code
|
20
20
|
|
@@ -23,22 +23,19 @@ module Encoders
|
|
23
23
|
protected
|
24
24
|
|
25
25
|
def setup options
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
def compile tokens, options
|
30
|
-
if scanner = tokens.scanner
|
26
|
+
if scanner
|
31
27
|
kinds_not_loc = scanner.class::KINDS_NOT_LOC
|
32
28
|
else
|
33
29
|
warn "Tokens have no associated scanner, counting all nonempty lines." if $VERBOSE
|
34
30
|
kinds_not_loc = CodeRay::Scanners::Scanner::KINDS_NOT_LOC
|
35
31
|
end
|
36
|
-
|
37
|
-
|
32
|
+
|
33
|
+
options[:exclude] = kinds_not_loc
|
34
|
+
super options
|
38
35
|
end
|
39
36
|
|
40
37
|
def finish options
|
41
|
-
@out
|
38
|
+
@out.to_s.scan(NON_EMPTY_LINE).size
|
42
39
|
end
|
43
40
|
|
44
41
|
end
|
@@ -1,29 +1,29 @@
|
|
1
1
|
module CodeRay
|
2
2
|
module Encoders
|
3
|
-
|
3
|
+
|
4
4
|
# Makes a statistic for the given tokens.
|
5
5
|
#
|
6
6
|
# Alias: +stats+
|
7
7
|
class Statistic < Encoder
|
8
|
-
|
9
|
-
register_for :
|
10
|
-
|
8
|
+
|
9
|
+
register_for :statistic
|
10
|
+
|
11
11
|
attr_reader :type_stats, :real_token_count # :nodoc:
|
12
|
-
|
12
|
+
|
13
13
|
TypeStats = Struct.new :count, :size # :nodoc:
|
14
|
-
|
14
|
+
|
15
15
|
protected
|
16
|
-
|
16
|
+
|
17
17
|
def setup options
|
18
18
|
@type_stats = Hash.new { |h, k| h[k] = TypeStats.new 0, 0 }
|
19
19
|
@real_token_count = 0
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def generate tokens, options
|
23
23
|
@tokens = tokens
|
24
24
|
super
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
STATS = <<-STATS # :nodoc:
|
28
28
|
|
29
29
|
Code Statistics
|
@@ -36,12 +36,12 @@ Token Types (%d):
|
|
36
36
|
type count ratio size (average)
|
37
37
|
-------------------------------------------------------------
|
38
38
|
%s
|
39
|
-
|
40
|
-
|
39
|
+
STATS
|
40
|
+
|
41
41
|
TOKEN_TYPES_ROW = <<-TKR # :nodoc:
|
42
42
|
%-20s %8d %6.2f %% %5.1f
|
43
|
-
|
44
|
-
|
43
|
+
TKR
|
44
|
+
|
45
45
|
def finish options
|
46
46
|
all = @type_stats['TOTAL']
|
47
47
|
all_count, all_size = all.count, all.size
|
@@ -57,7 +57,7 @@ Token Types (%d):
|
|
57
57
|
types_stats
|
58
58
|
]
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
public
|
62
62
|
|
63
63
|
def text_token text, kind
|
@@ -67,30 +67,31 @@ Token Types (%d):
|
|
67
67
|
@type_stats['TOTAL'].size += text.size
|
68
68
|
@type_stats['TOTAL'].count += 1
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
# TODO Hierarchy handling
|
72
72
|
def begin_group kind
|
73
|
-
block_token 'begin_group'
|
73
|
+
block_token ':begin_group', kind
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
def end_group kind
|
77
|
-
block_token 'end_group'
|
77
|
+
block_token ':end_group', kind
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
def begin_line kind
|
81
|
-
block_token 'begin_line'
|
81
|
+
block_token ':begin_line', kind
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
def end_line kind
|
85
|
-
block_token 'end_line'
|
85
|
+
block_token ':end_line', kind
|
86
86
|
end
|
87
87
|
|
88
|
-
def block_token action
|
88
|
+
def block_token action, kind
|
89
89
|
@type_stats['TOTAL'].count += 1
|
90
90
|
@type_stats[action].count += 1
|
91
|
+
@type_stats[kind].count += 1
|
91
92
|
end
|
92
|
-
|
93
|
+
|
93
94
|
end
|
94
|
-
|
95
|
+
|
95
96
|
end
|
96
97
|
end
|
@@ -53,8 +53,8 @@ module CodeRay
|
|
53
53
|
:local_variable => '33',
|
54
54
|
:oct => '1;35',
|
55
55
|
:operator_name => '1;29',
|
56
|
-
:
|
57
|
-
:
|
56
|
+
:predefined_constant => '1;36',
|
57
|
+
:predefined_type => '1;30',
|
58
58
|
:predefined => ['4', '1;34'],
|
59
59
|
:preprocessor => '36',
|
60
60
|
:pseudo_class => '34',
|
@@ -4,7 +4,7 @@ module Encoders
|
|
4
4
|
# Concats the tokens into a single string, resulting in the original
|
5
5
|
# code string if no tokens were removed.
|
6
6
|
#
|
7
|
-
# Alias: +plain+
|
7
|
+
# Alias: +plain+, +plaintext+
|
8
8
|
#
|
9
9
|
# == Options
|
10
10
|
#
|
@@ -13,31 +13,31 @@ module Encoders
|
|
13
13
|
#
|
14
14
|
# Default: empty String
|
15
15
|
class Text < Encoder
|
16
|
-
|
16
|
+
|
17
17
|
register_for :text
|
18
|
-
|
18
|
+
|
19
19
|
FILE_EXTENSION = 'txt'
|
20
|
-
|
20
|
+
|
21
21
|
DEFAULT_OPTIONS = {
|
22
22
|
:separator => nil
|
23
23
|
}
|
24
|
-
|
24
|
+
|
25
25
|
def text_token text, kind
|
26
26
|
super
|
27
27
|
@out << @sep if @sep
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
protected
|
31
31
|
def setup options
|
32
32
|
super
|
33
33
|
@sep = options[:separator]
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def finish options
|
37
37
|
super.chomp @sep
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
end
|
43
43
|
end
|
data/lib/coderay/encoders/xml.rb
CHANGED
@@ -1,38 +1,38 @@
|
|
1
1
|
module CodeRay
|
2
2
|
module Encoders
|
3
|
-
|
3
|
+
|
4
4
|
# = XML Encoder
|
5
5
|
#
|
6
6
|
# Uses REXML. Very slow.
|
7
7
|
class XML < Encoder
|
8
|
-
|
8
|
+
|
9
9
|
register_for :xml
|
10
|
-
|
10
|
+
|
11
11
|
FILE_EXTENSION = 'xml'
|
12
|
-
|
12
|
+
|
13
13
|
require 'rexml/document'
|
14
|
-
|
14
|
+
|
15
15
|
DEFAULT_OPTIONS = {
|
16
16
|
:tab_width => 8,
|
17
17
|
:pretty => -1,
|
18
18
|
:transitive => false,
|
19
19
|
}
|
20
|
-
|
20
|
+
|
21
21
|
protected
|
22
|
-
|
23
22
|
def setup options
|
24
23
|
@doc = REXML::Document.new
|
25
24
|
@doc << REXML::XMLDecl.new
|
26
25
|
@tab_width = options[:tab_width]
|
27
26
|
@root = @node = @doc.add_element('coderay-tokens')
|
28
27
|
end
|
29
|
-
|
28
|
+
|
30
29
|
def finish options
|
31
30
|
@out = ''
|
32
31
|
@doc.write @out, options[:pretty], options[:transitive], true
|
33
32
|
@out
|
34
33
|
end
|
35
34
|
|
35
|
+
public
|
36
36
|
def text_token text, kind
|
37
37
|
if kind == :space
|
38
38
|
token = @node
|