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
@@ -0,0 +1,143 @@
|
|
1
|
+
# by Keith Pitt
|
2
|
+
module CodeRay
|
3
|
+
module Scanners
|
4
|
+
|
5
|
+
class SQL < Scanner
|
6
|
+
|
7
|
+
register_for :sql
|
8
|
+
|
9
|
+
include Streamable
|
10
|
+
|
11
|
+
RESERVED_WORDS = %w(
|
12
|
+
all alter and any as asc at authid avg begin between
|
13
|
+
body bulk by case char check close cluster coalesce
|
14
|
+
collect comment commit compress connect constant create
|
15
|
+
current currval cursor day declare default delete
|
16
|
+
desc distinct do drop else elsif end exception exclusive
|
17
|
+
execute exists exit extends extract fetch for forall
|
18
|
+
from function goto group having heap hour if immediate in
|
19
|
+
index indicator insert interface intersect
|
20
|
+
interval into is isolation java level like limited lock
|
21
|
+
loop max min minus minute mlslabel mod mode month natural
|
22
|
+
naturaln new nextval nocopy not nowait null nullif
|
23
|
+
number_base ocirowid of on opaque open operator option or
|
24
|
+
order organization others out package partition pctfree
|
25
|
+
pls_integer positive positiven pragma prior private procedure
|
26
|
+
public raise range raw real record ref release return reverse
|
27
|
+
rollback row rowid rownum rowtype savepoint second select
|
28
|
+
separate set share space sql sqlcode sqlerrm start
|
29
|
+
stddev subtype successful sum synonym sysdate table then
|
30
|
+
timezone_region timezone_abbr timezone_minute
|
31
|
+
to trigger true type uid union unique update
|
32
|
+
use user validate values variance view when
|
33
|
+
whenever where while with work write year zone
|
34
|
+
)
|
35
|
+
|
36
|
+
PREDEFINED_TYPES = %w(
|
37
|
+
array bigint bit binary blob boolean binary_integer char
|
38
|
+
character clob date decimal double float char_base
|
39
|
+
int integer nchar nclob smallint timestamp long number
|
40
|
+
timestamp_hour timestamp_minute varchar varying smallint
|
41
|
+
varchar2 nvarchar money time
|
42
|
+
)
|
43
|
+
|
44
|
+
PREDEFINED_CONSTANTS = %w(
|
45
|
+
NULL true false
|
46
|
+
)
|
47
|
+
|
48
|
+
IDENT_KIND = CaseIgnoringWordList.new(:ident).
|
49
|
+
add(RESERVED_WORDS, :reserved).
|
50
|
+
add(PREDEFINED_TYPES, :pre_type).
|
51
|
+
add(PREDEFINED_CONSTANTS, :pre_constant)
|
52
|
+
|
53
|
+
def scan_tokens tokens, options
|
54
|
+
|
55
|
+
state = :initial
|
56
|
+
|
57
|
+
until eos?
|
58
|
+
|
59
|
+
kind = nil
|
60
|
+
match = nil
|
61
|
+
|
62
|
+
case state
|
63
|
+
|
64
|
+
when :initial
|
65
|
+
|
66
|
+
if scan(/ \s+ | \\\n /x)
|
67
|
+
kind = :space
|
68
|
+
|
69
|
+
elsif scan(%r! -- [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
|
70
|
+
kind = :comment
|
71
|
+
|
72
|
+
elsif scan(/ [-+*\/=<>?:;,!&^|()~%]+ | \.(?!\d) /x)
|
73
|
+
kind = :operator
|
74
|
+
|
75
|
+
elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
|
76
|
+
kind = IDENT_KIND[match]
|
77
|
+
if kind == :ident and check(/:(?!:)/)
|
78
|
+
match << scan(/:/)
|
79
|
+
kind = :label
|
80
|
+
end
|
81
|
+
|
82
|
+
elsif match = scan(/'/)
|
83
|
+
tokens << [:open, :string]
|
84
|
+
state = :string
|
85
|
+
kind = :delimiter
|
86
|
+
|
87
|
+
elsif scan(/(?:\d+)(?![.eEfF])/)
|
88
|
+
kind = :integer
|
89
|
+
|
90
|
+
elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
|
91
|
+
kind = :float
|
92
|
+
|
93
|
+
else
|
94
|
+
getch
|
95
|
+
kind = :error
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
when :string
|
100
|
+
if scan(/[^\\\n']+/)
|
101
|
+
kind = :content
|
102
|
+
elsif scan(/'/)
|
103
|
+
tokens << ["'", :delimiter]
|
104
|
+
tokens << [:close, :string]
|
105
|
+
state = :initial
|
106
|
+
next
|
107
|
+
elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
|
108
|
+
kind = :char
|
109
|
+
elsif scan(/ \\ | $ /x)
|
110
|
+
tokens << [:close, :string]
|
111
|
+
kind = :error
|
112
|
+
state = :initial
|
113
|
+
else
|
114
|
+
raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
|
115
|
+
end
|
116
|
+
|
117
|
+
else
|
118
|
+
raise_inspect 'Unknown state', tokens
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
match ||= matched
|
123
|
+
if $DEBUG and not kind
|
124
|
+
raise_inspect 'Error token %p in line %d' %
|
125
|
+
[[match, kind], line], tokens
|
126
|
+
end
|
127
|
+
raise_inspect 'Empty token', tokens unless match
|
128
|
+
|
129
|
+
tokens << [match, kind]
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
if state == :string
|
134
|
+
tokens << [:close, :string]
|
135
|
+
end
|
136
|
+
|
137
|
+
tokens
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
# by Josh Goebel
|
2
|
+
module CodeRay module Scanners
|
3
|
+
|
4
|
+
class SQL < Scanner
|
5
|
+
|
6
|
+
register_for :sql
|
7
|
+
|
8
|
+
RESERVED_WORDS = %w(
|
9
|
+
create table index trigger drop primary key set select
|
10
|
+
insert update delete replace into
|
11
|
+
on from values before and or if exists case when
|
12
|
+
then else as group order by avg where
|
13
|
+
join inner outer union engine not
|
14
|
+
like
|
15
|
+
)
|
16
|
+
|
17
|
+
PREDEFINED_TYPES = %w(
|
18
|
+
char varchar enum binary text tinytext mediumtext
|
19
|
+
longtext blob tinyblob mediumblob longblob timestamp
|
20
|
+
date time datetime year double decimal float int
|
21
|
+
integer tinyint mediumint bigint smallint unsigned bit
|
22
|
+
bool boolean
|
23
|
+
)
|
24
|
+
|
25
|
+
PREDEFINED_FUNCTIONS = %w( sum cast abs pi count min max avg )
|
26
|
+
|
27
|
+
DIRECTIVES = %w( auto_increment unique default charset )
|
28
|
+
|
29
|
+
PREDEFINED_CONSTANTS = %w( null true false )
|
30
|
+
|
31
|
+
IDENT_KIND = CaseIgnoringWordList.new(:ident).
|
32
|
+
add(RESERVED_WORDS, :reserved).
|
33
|
+
add(PREDEFINED_TYPES, :pre_type).
|
34
|
+
add(PREDEFINED_CONSTANTS, :pre_constant).
|
35
|
+
add(PREDEFINED_FUNCTIONS, :predefined).
|
36
|
+
add(DIRECTIVES, :directive)
|
37
|
+
|
38
|
+
ESCAPE = / [rbfnrtv\n\\\/'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
|
39
|
+
UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
|
40
|
+
|
41
|
+
def scan_tokens tokens, options
|
42
|
+
|
43
|
+
state = :initial
|
44
|
+
string_type = nil
|
45
|
+
string_content = ''
|
46
|
+
|
47
|
+
until eos?
|
48
|
+
|
49
|
+
kind = nil
|
50
|
+
match = nil
|
51
|
+
|
52
|
+
if state == :initial
|
53
|
+
|
54
|
+
if scan(/ \s+ | \\\n /x)
|
55
|
+
kind = :space
|
56
|
+
|
57
|
+
elsif scan(/^(?:--\s|#).*/)
|
58
|
+
kind = :comment
|
59
|
+
|
60
|
+
elsif scan(%r! /\* (?: .*? \*/ | .* ) !mx)
|
61
|
+
kind = :comment
|
62
|
+
|
63
|
+
elsif scan(/ [-+*\/=<>;,!&^|()\[\]{}~%] | \.(?!\d) /x)
|
64
|
+
kind = :operator
|
65
|
+
|
66
|
+
elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
|
67
|
+
kind = IDENT_KIND[match.downcase]
|
68
|
+
|
69
|
+
elsif match = scan(/[`"']/)
|
70
|
+
tokens << [:open, :string]
|
71
|
+
string_type = matched
|
72
|
+
state = :string
|
73
|
+
kind = :delimiter
|
74
|
+
|
75
|
+
elsif scan(/0[xX][0-9A-Fa-f]+/)
|
76
|
+
kind = :hex
|
77
|
+
|
78
|
+
elsif scan(/0[0-7]+(?![89.eEfF])/)
|
79
|
+
kind = :oct
|
80
|
+
|
81
|
+
elsif scan(/\d+(?![.eEfF])/)
|
82
|
+
kind = :integer
|
83
|
+
|
84
|
+
elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
|
85
|
+
kind = :float
|
86
|
+
|
87
|
+
else
|
88
|
+
getch
|
89
|
+
kind = :error
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
elsif state == :string
|
94
|
+
if match = scan(/[^\\"'`]+/)
|
95
|
+
string_content << match
|
96
|
+
next
|
97
|
+
elsif match = scan(/["'`]/)
|
98
|
+
if string_type == match
|
99
|
+
if peek(1) == string_type # doubling means escape
|
100
|
+
string_content << string_type << getch
|
101
|
+
next
|
102
|
+
end
|
103
|
+
unless string_content.empty?
|
104
|
+
tokens << [string_content, :content]
|
105
|
+
string_content = ''
|
106
|
+
end
|
107
|
+
tokens << [matched, :delimiter]
|
108
|
+
tokens << [:close, :string]
|
109
|
+
state = :initial
|
110
|
+
string_type = nil
|
111
|
+
next
|
112
|
+
else
|
113
|
+
string_content << match
|
114
|
+
end
|
115
|
+
next
|
116
|
+
elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
|
117
|
+
unless string_content.empty?
|
118
|
+
tokens << [string_content, :content]
|
119
|
+
string_content = ''
|
120
|
+
end
|
121
|
+
kind = :char
|
122
|
+
elsif match = scan(/ \\ . /mox)
|
123
|
+
string_content << match
|
124
|
+
next
|
125
|
+
elsif scan(/ \\ | $ /x)
|
126
|
+
unless string_content.empty?
|
127
|
+
tokens << [string_content, :content]
|
128
|
+
string_content = ''
|
129
|
+
end
|
130
|
+
kind = :error
|
131
|
+
state = :initial
|
132
|
+
else
|
133
|
+
raise "else case \" reached; %p not handled." % peek(1), tokens
|
134
|
+
end
|
135
|
+
|
136
|
+
else
|
137
|
+
raise 'else-case reached', tokens
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
match ||= matched
|
142
|
+
# raise [match, kind], tokens if kind == :error
|
143
|
+
|
144
|
+
tokens << [match, kind]
|
145
|
+
|
146
|
+
end
|
147
|
+
# RAILS_DEFAULT_LOGGER.info tokens.inspect
|
148
|
+
tokens
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
end end
|
data/lib/coderay/scanners/xml.rb
CHANGED
@@ -42,12 +42,15 @@ ol.CodeRay li { white-space: pre }
|
|
42
42
|
MAIN
|
43
43
|
|
44
44
|
TOKEN_COLORS = <<-'TOKENS'
|
45
|
+
.debug { color:white ! important; background:blue ! important; }
|
46
|
+
|
45
47
|
.af { color:#00C }
|
46
48
|
.an { color:#007 }
|
49
|
+
.at { color:#f08 }
|
47
50
|
.av { color:#700 }
|
48
51
|
.aw { color:#C00 }
|
49
52
|
.bi { color:#509; font-weight:bold }
|
50
|
-
.c { color:#
|
53
|
+
.c { color:#666; }
|
51
54
|
|
52
55
|
.ch { color:#04D }
|
53
56
|
.ch .k { color:#04D }
|
@@ -78,18 +81,25 @@ ol.CodeRay li { white-space: pre }
|
|
78
81
|
.il .il .il { background: #ccc }
|
79
82
|
.il .idl { font-weight: bold; color: #888 }
|
80
83
|
|
84
|
+
.im { color:#f00; }
|
81
85
|
.in { color:#B2B; font-weight:bold }
|
82
86
|
.iv { color:#33B }
|
83
87
|
.la { color:#970; font-weight:bold }
|
84
88
|
.lv { color:#963 }
|
85
89
|
.oc { color:#40E; font-weight:bold }
|
86
|
-
.
|
90
|
+
.of { color:#000; font-weight:bold }
|
87
91
|
.op { }
|
88
92
|
.pc { color:#038; font-weight:bold }
|
89
93
|
.pd { color:#369; font-weight:bold }
|
90
|
-
.pp { color:#579 }
|
94
|
+
.pp { color:#579; }
|
95
|
+
.ps { color:#00C; font-weight: bold; }
|
91
96
|
.pt { color:#339; font-weight:bold }
|
92
|
-
.r { color:#080; font-weight:bold }
|
97
|
+
.r, .kw { color:#080; font-weight:bold }
|
98
|
+
|
99
|
+
.ke { color: #808; }
|
100
|
+
.ke .dl { color: #606; }
|
101
|
+
.ke .ch { color: #80f; }
|
102
|
+
.vl { color: #088; }
|
93
103
|
|
94
104
|
.rx { background-color:#fff0ff }
|
95
105
|
.rx .k { color:#808 }
|
@@ -97,11 +107,12 @@ ol.CodeRay li { white-space: pre }
|
|
97
107
|
.rx .mod { color:#C2C }
|
98
108
|
.rx .fu { color:#404; font-weight: bold }
|
99
109
|
|
100
|
-
.s
|
101
|
-
.s
|
102
|
-
.s
|
103
|
-
.s
|
104
|
-
.s
|
110
|
+
.s { background-color:#fff0f0 }
|
111
|
+
.s .s { background-color:#ffe0e0 }
|
112
|
+
.s .s .s { background-color:#ffd0d0 }
|
113
|
+
.s .k { color: #D20; }
|
114
|
+
.s .ch { color: #b0b; }
|
115
|
+
.s .dl { color: #710; }
|
105
116
|
|
106
117
|
.sh { background-color:#f0fff0 }
|
107
118
|
.sh .k { color:#2B2 }
|
@@ -117,6 +128,16 @@ ol.CodeRay li { white-space: pre }
|
|
117
128
|
.ty { color:#339; font-weight:bold }
|
118
129
|
.v { color:#036 }
|
119
130
|
.xt { color:#444 }
|
131
|
+
|
132
|
+
.ins { background: #afa; }
|
133
|
+
.del { background: #faa; }
|
134
|
+
.chg { color: #aaf; background: #007; }
|
135
|
+
.head { color: #f8f; background: #505 }
|
136
|
+
|
137
|
+
.ins .ins { color: #080; font-weight:bold }
|
138
|
+
.del .del { color: #800; font-weight:bold }
|
139
|
+
.chg .chg { color: #66f; }
|
140
|
+
.head .head { color: #f4f; }
|
120
141
|
TOKENS
|
121
142
|
|
122
143
|
end
|
@@ -47,7 +47,7 @@ ol.CodeRay li { white-space: pre; }
|
|
47
47
|
.av { color:#700; }
|
48
48
|
.aw { color:#C00; }
|
49
49
|
.bi { color:#509; font-weight:bold; }
|
50
|
-
.c { color:#
|
50
|
+
.c { color:#555; background-color: black; }
|
51
51
|
|
52
52
|
.ch { color:#88F; }
|
53
53
|
.ch .k { color:#04D; }
|
@@ -77,13 +77,16 @@ ol.CodeRay li { white-space: pre; }
|
|
77
77
|
.la { color:#970; font-weight:bold; }
|
78
78
|
.lv { color:#963; }
|
79
79
|
.oc { color:#40E; font-weight:bold; }
|
80
|
-
.
|
80
|
+
.of { color:#000; font-weight:bold; }
|
81
81
|
.op { }
|
82
82
|
.pc { color:#08f; font-weight:bold; }
|
83
83
|
.pd { color:#369; font-weight:bold; }
|
84
84
|
.pp { color:#579; }
|
85
85
|
.pt { color:#66f; font-weight:bold; }
|
86
86
|
.r { color:#5de; font-weight:bold; }
|
87
|
+
.r, .kw { color:#5de; font-weight:bold }
|
88
|
+
|
89
|
+
.ke { color: #808; }
|
87
90
|
|
88
91
|
.rx { background-color:#221133; }
|
89
92
|
.rx .k { color:#f8f; }
|
@@ -111,6 +114,16 @@ ol.CodeRay li { white-space: pre; }
|
|
111
114
|
.ty { color:#339; font-weight:bold; }
|
112
115
|
.v { color:#036; }
|
113
116
|
.xt { color:#444; }
|
117
|
+
|
118
|
+
.ins { background: #afa; }
|
119
|
+
.del { background: #faa; }
|
120
|
+
.chg { color: #aaf; background: #007; }
|
121
|
+
.head { color: #f8f; background: #505 }
|
122
|
+
|
123
|
+
.ins .ins { color: #080; font-weight:bold }
|
124
|
+
.del .del { color: #800; font-weight:bold }
|
125
|
+
.chg .chg { color: #66f; }
|
126
|
+
.head .head { color: #f4f; }
|
114
127
|
TOKENS
|
115
128
|
|
116
129
|
end
|
@@ -1,12 +1,10 @@
|
|
1
1
|
module CodeRay
|
2
|
-
|
3
|
-
|
4
|
-
class HTML
|
5
|
-
|
2
|
+
class Tokens
|
6
3
|
ClassOfKind = Hash.new do |h, k|
|
7
4
|
h[k] = k.to_s
|
8
5
|
end
|
9
6
|
ClassOfKind.update with = {
|
7
|
+
:annotation => 'at',
|
10
8
|
:attribute_name => 'an',
|
11
9
|
:attribute_name_fat => 'af',
|
12
10
|
:attribute_value => 'av',
|
@@ -32,21 +30,25 @@ module Encoders
|
|
32
30
|
:function => 'fu',
|
33
31
|
:global_variable => 'gv',
|
34
32
|
:hex => 'hx',
|
33
|
+
:important => 'im',
|
35
34
|
:include => 'ic',
|
36
35
|
:inline => 'il',
|
37
36
|
:inline_delimiter => 'idl',
|
38
37
|
:instance_variable => 'iv',
|
39
38
|
:integer => 'i',
|
40
39
|
:interpreted => 'in',
|
40
|
+
:keyword => 'kw',
|
41
|
+
:key => 'ke',
|
41
42
|
:label => 'la',
|
42
43
|
:local_variable => 'lv',
|
43
44
|
:modifier => 'mod',
|
44
45
|
:oct => 'oc',
|
45
|
-
:
|
46
|
+
:operator_fat => 'of',
|
46
47
|
:pre_constant => 'pc',
|
47
48
|
:pre_type => 'pt',
|
48
49
|
:predefined => 'pd',
|
49
50
|
:preprocessor => 'pp',
|
51
|
+
:pseudo_class => 'ps',
|
50
52
|
:regexp => 'rx',
|
51
53
|
:reserved => 'r',
|
52
54
|
:shell => 'sh',
|
@@ -57,7 +59,13 @@ module Encoders
|
|
57
59
|
:tag_special => 'ts',
|
58
60
|
:type => 'ty',
|
59
61
|
:variable => 'v',
|
62
|
+
:value => 'vl',
|
60
63
|
:xml_text => 'xt',
|
64
|
+
|
65
|
+
:insert => 'ins',
|
66
|
+
:delete => 'del',
|
67
|
+
:change => 'chg',
|
68
|
+
:head => 'head',
|
61
69
|
|
62
70
|
:ident => :NO_HIGHLIGHT, # 'id'
|
63
71
|
#:operator => 'op',
|
@@ -70,8 +78,5 @@ module Encoders
|
|
70
78
|
ClassOfKind[:nesting_delimiter] = ClassOfKind[:delimiter]
|
71
79
|
ClassOfKind[:escape] = ClassOfKind[:delimiter]
|
72
80
|
#ClassOfKind.default = ClassOfKind[:error] or raise 'no class found for :error!'
|
73
|
-
|
74
81
|
end
|
75
|
-
|
76
|
-
end
|
77
|
-
end
|
82
|
+
end
|