coderay 0.7.1.147 → 0.7.2.165
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/coderay +54 -56
- data/demo/suite.rb +54 -54
- data/lib/coderay.rb +187 -187
- data/lib/coderay/duo.rb +29 -29
- data/lib/coderay/encoder.rb +173 -173
- data/lib/coderay/encoders/_map.rb +8 -8
- data/lib/coderay/encoders/count.rb +21 -21
- data/lib/coderay/encoders/debug.rb +46 -46
- data/lib/coderay/encoders/div.rb +20 -20
- data/lib/coderay/encoders/html.rb +249 -245
- data/lib/coderay/encoders/html/classes.rb +73 -73
- data/lib/coderay/encoders/html/css.rb +65 -65
- data/lib/coderay/encoders/html/numerization.rb +122 -122
- data/lib/coderay/encoders/html/output.rb +195 -195
- data/lib/coderay/encoders/null.rb +26 -26
- data/lib/coderay/encoders/page.rb +21 -21
- data/lib/coderay/encoders/span.rb +20 -20
- data/lib/coderay/encoders/statistic.rb +81 -81
- data/lib/coderay/encoders/text.rb +33 -33
- data/lib/coderay/encoders/tokens.rb +44 -44
- data/lib/coderay/encoders/xml.rb +71 -71
- data/lib/coderay/encoders/yaml.rb +22 -22
- data/lib/coderay/helpers/filetype.rb +152 -153
- data/lib/coderay/helpers/gzip_simple.rb +67 -68
- data/lib/coderay/helpers/plugin.rb +297 -297
- data/lib/coderay/helpers/word_list.rb +46 -47
- data/lib/coderay/scanner.rb +238 -238
- data/lib/coderay/scanners/_map.rb +15 -14
- data/lib/coderay/scanners/c.rb +163 -155
- data/lib/coderay/scanners/delphi.rb +131 -129
- data/lib/coderay/scanners/html.rb +174 -167
- data/lib/coderay/scanners/nitro_xhtml.rb +130 -0
- data/lib/coderay/scanners/plaintext.rb +15 -15
- data/lib/coderay/scanners/rhtml.rb +73 -65
- data/lib/coderay/scanners/ruby.rb +404 -397
- data/lib/coderay/scanners/ruby/patterns.rb +216 -216
- data/lib/coderay/scanners/xml.rb +18 -18
- data/lib/coderay/style.rb +20 -20
- data/lib/coderay/styles/_map.rb +3 -3
- data/lib/coderay/styles/cycnus.rb +18 -18
- data/lib/coderay/styles/murphy.rb +18 -18
- data/lib/coderay/tokens.rb +322 -322
- metadata +86 -86
- data/lib/coderay/scanners/nitro_html.rb +0 -125
- data/lib/coderay/scanners/yaml.rb +0 -85
@@ -1,73 +1,73 @@
|
|
1
|
-
module CodeRay
|
2
|
-
module Encoders
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
73
|
-
end
|
1
|
+
module CodeRay
|
2
|
+
module Encoders
|
3
|
+
|
4
|
+
class HTML
|
5
|
+
|
6
|
+
ClassOfKind = {
|
7
|
+
:attribute_name => 'an',
|
8
|
+
:attribute_name_fat => 'af',
|
9
|
+
:attribute_value => 'av',
|
10
|
+
:attribute_value_fat => 'aw',
|
11
|
+
:bin => 'bi',
|
12
|
+
:char => 'ch',
|
13
|
+
:class => 'cl',
|
14
|
+
:class_variable => 'cv',
|
15
|
+
:color => 'cr',
|
16
|
+
:comment => 'c',
|
17
|
+
:constant => 'co',
|
18
|
+
:content => 'k',
|
19
|
+
:definition => 'df',
|
20
|
+
:delimiter => 'dl',
|
21
|
+
:directive => 'di',
|
22
|
+
:doc => 'do',
|
23
|
+
:doc_string => 'ds',
|
24
|
+
:entity => 'en',
|
25
|
+
:error => 'er',
|
26
|
+
:escape => 'e',
|
27
|
+
:exception => 'ex',
|
28
|
+
:float => 'fl',
|
29
|
+
:function => 'fu',
|
30
|
+
:global_variable => 'gv',
|
31
|
+
:hex => 'hx',
|
32
|
+
:include => 'ic',
|
33
|
+
:inline => 'il',
|
34
|
+
:instance_variable => 'iv',
|
35
|
+
:integer => 'i',
|
36
|
+
:interpreted => 'in',
|
37
|
+
:label => 'la',
|
38
|
+
:local_variable => 'lv',
|
39
|
+
:modifier => 'mod',
|
40
|
+
:oct => 'oc',
|
41
|
+
:operator_name => 'on',
|
42
|
+
:pre_constant => 'pc',
|
43
|
+
:pre_type => 'pt',
|
44
|
+
:predefined => 'pd',
|
45
|
+
:preprocessor => 'pp',
|
46
|
+
:regexp => 'rx',
|
47
|
+
:reserved => 'r',
|
48
|
+
:shell => 'sh',
|
49
|
+
:string => 's',
|
50
|
+
:symbol => 'sy',
|
51
|
+
:tag => 'ta',
|
52
|
+
:tag_fat => 'tf',
|
53
|
+
:tag_special => 'ts',
|
54
|
+
:type => 'ty',
|
55
|
+
:variable => 'v',
|
56
|
+
:xml_text => 'xt',
|
57
|
+
|
58
|
+
:ident => :NO_HIGHLIGHT, # 'id'
|
59
|
+
#:operator => 'op',
|
60
|
+
:operator => :NO_HIGHLIGHT, # 'op'
|
61
|
+
:space => :NO_HIGHLIGHT, # 'sp'
|
62
|
+
:plain => :NO_HIGHLIGHT,
|
63
|
+
}
|
64
|
+
ClassOfKind[:procedure] = ClassOfKind[:method] = ClassOfKind[:function]
|
65
|
+
ClassOfKind[:open] = ClassOfKind[:close] = ClassOfKind[:delimiter]
|
66
|
+
ClassOfKind[:nesting_delimiter] = ClassOfKind[:delimiter]
|
67
|
+
ClassOfKind[:escape] = ClassOfKind[:delimiter]
|
68
|
+
ClassOfKind.default = ClassOfKind[:error] or raise 'no class found for :error!'
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
@@ -1,65 +1,65 @@
|
|
1
|
-
module CodeRay
|
2
|
-
module Encoders
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
if $0 == __FILE__
|
63
|
-
|
64
|
-
|
65
|
-
end
|
1
|
+
module CodeRay
|
2
|
+
module Encoders
|
3
|
+
|
4
|
+
class HTML
|
5
|
+
class CSS
|
6
|
+
|
7
|
+
attr :stylesheet
|
8
|
+
|
9
|
+
def CSS.load_stylesheet style = nil
|
10
|
+
CodeRay::Styles[style]
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize style = :default
|
14
|
+
@classes = Hash.new
|
15
|
+
style = CSS.load_stylesheet style
|
16
|
+
@stylesheet = [
|
17
|
+
style::CSS_MAIN_STYLES,
|
18
|
+
style::TOKEN_COLORS.gsub(/^(?!$)/, '.CodeRay ')
|
19
|
+
].join("\n")
|
20
|
+
parse style::TOKEN_COLORS
|
21
|
+
end
|
22
|
+
|
23
|
+
def [] *styles
|
24
|
+
cl = @classes[styles.first]
|
25
|
+
return '' unless cl
|
26
|
+
style = ''
|
27
|
+
1.upto(styles.size) do |offset|
|
28
|
+
break if style = cl[styles[offset .. -1]]
|
29
|
+
end
|
30
|
+
raise 'Style not found: %p' % [styles] if $DEBUG and style.empty?
|
31
|
+
return style
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
CSS_CLASS_PATTERN = /
|
37
|
+
( (?: # $1 = classes
|
38
|
+
\s* \. [-\w]+
|
39
|
+
)+ )
|
40
|
+
\s* \{ \s*
|
41
|
+
( [^\}]+ )? # $2 = style
|
42
|
+
\s* \} \s*
|
43
|
+
|
|
44
|
+
( . ) # $3 = error
|
45
|
+
/mx
|
46
|
+
def parse stylesheet
|
47
|
+
stylesheet.scan CSS_CLASS_PATTERN do |classes, style, error|
|
48
|
+
raise "CSS parse error: '#{error.inspect}' not recognized" if error
|
49
|
+
styles = classes.scan(/[-\w]+/)
|
50
|
+
cl = styles.pop
|
51
|
+
@classes[cl] ||= Hash.new
|
52
|
+
@classes[cl][styles] = style.to_s.strip
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
if $0 == __FILE__
|
63
|
+
require 'pp'
|
64
|
+
pp CodeRay::Encoders::HTML::CSS.new
|
65
|
+
end
|
@@ -1,122 +1,122 @@
|
|
1
|
-
module CodeRay
|
2
|
-
module Encoders
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
=begin
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
=end
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
end
|
122
|
-
end
|
1
|
+
module CodeRay
|
2
|
+
module Encoders
|
3
|
+
|
4
|
+
class HTML
|
5
|
+
|
6
|
+
module Output
|
7
|
+
|
8
|
+
def numerize *args
|
9
|
+
clone.numerize!(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
=begin NUMERIZABLE_WRAPPINGS = {
|
13
|
+
:table => [:div, :page, nil],
|
14
|
+
:inline => :all,
|
15
|
+
:list => [:div, :page, nil]
|
16
|
+
}
|
17
|
+
NUMERIZABLE_WRAPPINGS.default = :all
|
18
|
+
=end
|
19
|
+
def numerize! mode = :table, options = {}
|
20
|
+
return self unless mode
|
21
|
+
|
22
|
+
options = DEFAULT_OPTIONS.merge options
|
23
|
+
|
24
|
+
start = options[:line_number_start]
|
25
|
+
unless start.is_a? Integer
|
26
|
+
raise ArgumentError, "Invalid value %p for :line_number_start; Integer expected." % start
|
27
|
+
end
|
28
|
+
|
29
|
+
#allowed_wrappings = NUMERIZABLE_WRAPPINGS[mode]
|
30
|
+
#unless allowed_wrappings == :all or allowed_wrappings.include? options[:wrap]
|
31
|
+
# raise ArgumentError, "Can't numerize, :wrap must be in %p, but is %p" % [NUMERIZABLE_WRAPPINGS, options[:wrap]]
|
32
|
+
#end
|
33
|
+
|
34
|
+
bold_every = options[:bold_every]
|
35
|
+
bolding =
|
36
|
+
if bold_every == false
|
37
|
+
proc { |line| line.to_s }
|
38
|
+
elsif bold_every.is_a? Integer
|
39
|
+
raise ArgumentError, ":bolding can't be 0." if bold_every == 0
|
40
|
+
proc do |line|
|
41
|
+
if line % bold_every == 0
|
42
|
+
"<strong>#{line}</strong>" # every bold_every-th number in bold
|
43
|
+
else
|
44
|
+
line.to_s
|
45
|
+
end
|
46
|
+
end
|
47
|
+
else
|
48
|
+
raise ArgumentError, 'Invalid value %p for :bolding; false or Integer expected.' % bold_every
|
49
|
+
end
|
50
|
+
|
51
|
+
case mode
|
52
|
+
when :inline
|
53
|
+
max_width = (start + line_count).to_s.size
|
54
|
+
line = start
|
55
|
+
gsub!(/^/) do
|
56
|
+
line_number = bolding.call line
|
57
|
+
indent = ' ' * (max_width - line.to_s.size)
|
58
|
+
res = "<span class=\"no\">#{indent}#{line_number}</span> "
|
59
|
+
line += 1
|
60
|
+
res
|
61
|
+
end
|
62
|
+
|
63
|
+
when :table
|
64
|
+
# This is really ugly.
|
65
|
+
# Because even monospace fonts seem to have different heights when bold,
|
66
|
+
# I make the newline bold, both in the code and the line numbers.
|
67
|
+
# FIXME Still not working perfect for Mr. Internet Exploder
|
68
|
+
# FIXME Firefox struggles with very long codes (> 200 lines)
|
69
|
+
line_numbers = (start ... start + line_count).to_a.map(&bolding).join("\n")
|
70
|
+
line_numbers << "\n" # also for Mr. MS Internet Exploder :-/
|
71
|
+
line_numbers.gsub!(/\n/) { "<tt>\n</tt>" }
|
72
|
+
|
73
|
+
line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers)
|
74
|
+
gsub!(/\n/) { "<tt>\n</tt>" }
|
75
|
+
wrap_in! line_numbers_table_tpl
|
76
|
+
@wrapped_in = :div
|
77
|
+
|
78
|
+
when :list
|
79
|
+
opened_tags = []
|
80
|
+
gsub!(/^.*$\n?/) do |line|
|
81
|
+
line.chomp!
|
82
|
+
|
83
|
+
open = opened_tags.join
|
84
|
+
line.scan(%r!<(/)?span[^>]*>?!) do |close,|
|
85
|
+
if close
|
86
|
+
opened_tags.pop
|
87
|
+
else
|
88
|
+
opened_tags << $&
|
89
|
+
end
|
90
|
+
end
|
91
|
+
close = '</span>' * opened_tags.size
|
92
|
+
|
93
|
+
"<li>#{open}#{line}#{close}</li>"
|
94
|
+
end
|
95
|
+
wrap_in! LIST
|
96
|
+
@wrapped_in = :div
|
97
|
+
|
98
|
+
else
|
99
|
+
raise ArgumentError, 'Unknown value %p for mode: expected one of %p' %
|
100
|
+
[mode, [:table, :list, :inline]]
|
101
|
+
end
|
102
|
+
|
103
|
+
self
|
104
|
+
end
|
105
|
+
|
106
|
+
def line_count
|
107
|
+
line_count = count("\n")
|
108
|
+
position_of_last_newline = rindex(?\n)
|
109
|
+
if position_of_last_newline
|
110
|
+
after_last_newline = self[position_of_last_newline + 1 .. -1]
|
111
|
+
ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/]
|
112
|
+
line_count += 1 if not ends_with_newline
|
113
|
+
end
|
114
|
+
line_count
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
end
|