antlr3 1.8.0 → 1.8.2
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/History.txt +35 -0
- data/Manifest.txt +73 -0
- data/README.txt +6 -13
- data/java/RubyTarget.java +43 -19
- data/java/antlr-full-3.2.1.jar +0 -0
- data/lib/antlr3/debug.rb +2 -0
- data/lib/antlr3/debug/event-hub.rb +55 -55
- data/lib/antlr3/debug/record-event-listener.rb +2 -2
- data/lib/antlr3/debug/rule-tracer.rb +14 -14
- data/lib/antlr3/debug/socket.rb +47 -47
- data/lib/antlr3/debug/trace-event-listener.rb +8 -8
- data/lib/antlr3/main.rb +29 -9
- data/lib/antlr3/modes/ast-builder.rb +7 -7
- data/lib/antlr3/modes/filter.rb +19 -17
- data/lib/antlr3/profile.rb +34 -6
- data/lib/antlr3/recognizers.rb +50 -1
- data/lib/antlr3/streams.rb +19 -15
- data/lib/antlr3/streams/rewrite.rb +241 -229
- data/lib/antlr3/template/group-file-lexer.rb +6 -8
- data/lib/antlr3/template/group-file-parser.rb +16 -16
- data/lib/antlr3/template/group-file.rb +1 -1
- data/lib/antlr3/test/call-stack.rb +13 -13
- data/lib/antlr3/test/core-extensions.rb +69 -69
- data/lib/antlr3/test/functional.rb +0 -4
- data/lib/antlr3/test/grammar.rb +70 -70
- data/lib/antlr3/token.rb +41 -17
- data/lib/antlr3/tree.rb +11 -14
- data/lib/antlr3/tree/debug.rb +53 -53
- data/lib/antlr3/tree/visitor.rb +11 -11
- data/lib/antlr3/tree/wizard.rb +35 -35
- data/lib/antlr3/util.rb +18 -0
- data/lib/antlr3/version.rb +1 -1
- data/rakefile +1 -0
- data/samples/ANTLRv3Grammar.g +3 -3
- data/samples/JavaScript.g +702 -0
- data/samples/standard/C/C.g +543 -0
- data/samples/standard/C/C.tokens +175 -0
- data/samples/standard/C/C__testrig.st +0 -0
- data/samples/standard/C/c.rb +12 -0
- data/samples/standard/C/input +3479 -0
- data/samples/standard/C/output +171 -0
- data/samples/standard/LL-star/LLStar.g +101 -0
- data/samples/standard/LL-star/input +12 -0
- data/samples/standard/LL-star/ll-star.rb +12 -0
- data/samples/standard/LL-star/output +2 -0
- data/samples/standard/calc/Calculator.g +47 -0
- data/samples/standard/calc/Calculator.py +16 -0
- data/samples/standard/calc/Calculator.rb +28 -0
- data/samples/standard/cminus/CMinus.g +141 -0
- data/samples/standard/cminus/bytecode.group +80 -0
- data/samples/standard/cminus/cminus.rb +16 -0
- data/samples/standard/cminus/input +9 -0
- data/samples/standard/cminus/java.group +91 -0
- data/samples/standard/cminus/output +11 -0
- data/samples/standard/cminus/python.group +48 -0
- data/samples/standard/dynamic-scope/DynamicScopes.g +50 -0
- data/samples/standard/dynamic-scope/dynamic-scopes.rb +12 -0
- data/samples/standard/dynamic-scope/input +7 -0
- data/samples/standard/dynamic-scope/output +4 -0
- data/samples/standard/fuzzy/FuzzyJava.g +89 -0
- data/samples/standard/fuzzy/fuzzy.py +11 -0
- data/samples/standard/fuzzy/fuzzy.rb +9 -0
- data/samples/standard/fuzzy/input +13 -0
- data/samples/standard/fuzzy/output +12 -0
- data/samples/standard/hoisted-predicates/HoistedPredicates.g +40 -0
- data/samples/standard/hoisted-predicates/hoisted-predicates.rb +13 -0
- data/samples/standard/hoisted-predicates/input +1 -0
- data/samples/standard/hoisted-predicates/output +1 -0
- data/samples/standard/island-grammar/Javadoc.g +46 -0
- data/samples/standard/island-grammar/Simple.g +104 -0
- data/samples/standard/island-grammar/input +11 -0
- data/samples/standard/island-grammar/island.rb +12 -0
- data/samples/standard/island-grammar/output +16 -0
- data/samples/standard/java/Java.g +827 -0
- data/samples/standard/java/input +80 -0
- data/samples/standard/java/java.rb +13 -0
- data/samples/standard/java/output +1 -0
- data/samples/standard/python/Python.g +718 -0
- data/samples/standard/python/PythonTokenSource.rb +107 -0
- data/samples/standard/python/input +210 -0
- data/samples/standard/python/output +24 -0
- data/samples/standard/python/python.rb +14 -0
- data/samples/standard/rakefile +18 -0
- data/samples/standard/scopes/SymbolTable.g +66 -0
- data/samples/standard/scopes/input +12 -0
- data/samples/standard/scopes/output +3 -0
- data/samples/standard/scopes/scopes.rb +12 -0
- data/samples/standard/simplecTreeParser/SimpleC.g +113 -0
- data/samples/standard/simplecTreeParser/SimpleCWalker.g +64 -0
- data/samples/standard/simplecTreeParser/input +12 -0
- data/samples/standard/simplecTreeParser/output +1 -0
- data/samples/standard/simplecTreeParser/simplec.rb +18 -0
- data/samples/standard/treeparser/Lang.g +24 -0
- data/samples/standard/treeparser/LangDumpDecl.g +17 -0
- data/samples/standard/treeparser/input +1 -0
- data/samples/standard/treeparser/output +2 -0
- data/samples/standard/treeparser/treeparser.rb +18 -0
- data/samples/standard/tweak/Tweak.g +68 -0
- data/samples/standard/tweak/input +9 -0
- data/samples/standard/tweak/output +16 -0
- data/samples/standard/tweak/tweak.rb +13 -0
- data/samples/standard/xml/README +16 -0
- data/samples/standard/xml/XML.g +123 -0
- data/samples/standard/xml/input +21 -0
- data/samples/standard/xml/output +39 -0
- data/samples/standard/xml/xml.rb +9 -0
- data/templates/Ruby.stg +4 -4
- data/test/functional/ast-output/auto-ast.rb +0 -5
- data/test/functional/ast-output/rewrites.rb +4 -4
- data/test/unit/test-scope.rb +45 -0
- metadata +96 -8
|
@@ -374,7 +374,7 @@ module GroupFile
|
|
|
374
374
|
case alt_1
|
|
375
375
|
when 1
|
|
376
376
|
# at line
|
|
377
|
-
if @input.peek( 1 ).between?( 0x30, 0x39 ) || @input.peek( 1 ).between?( 0x41, 0x5a ) || @input.peek(1) == 0x5f || @input.peek( 1 ).between?( 0x61, 0x7a )
|
|
377
|
+
if @input.peek( 1 ).between?( 0x30, 0x39 ) || @input.peek( 1 ).between?( 0x41, 0x5a ) || @input.peek( 1 ) == 0x5f || @input.peek( 1 ).between?( 0x61, 0x7a )
|
|
378
378
|
@input.consume
|
|
379
379
|
else
|
|
380
380
|
mse = MismatchedSet( nil )
|
|
@@ -411,7 +411,7 @@ module GroupFile
|
|
|
411
411
|
|
|
412
412
|
# - - - - main rule block - - - -
|
|
413
413
|
# at line 129:5: ( 'a' .. 'z' | '_' ) ( 'a' .. 'z' | '_' | 'A' .. 'Z' | '0' .. '9' )*
|
|
414
|
-
if @input.peek(1) == 0x5f || @input.peek( 1 ).between?( 0x61, 0x7a )
|
|
414
|
+
if @input.peek( 1 ) == 0x5f || @input.peek( 1 ).between?( 0x61, 0x7a )
|
|
415
415
|
@input.consume
|
|
416
416
|
else
|
|
417
417
|
mse = MismatchedSet( nil )
|
|
@@ -432,7 +432,7 @@ module GroupFile
|
|
|
432
432
|
case alt_2
|
|
433
433
|
when 1
|
|
434
434
|
# at line
|
|
435
|
-
if @input.peek( 1 ).between?( 0x30, 0x39 ) || @input.peek( 1 ).between?( 0x41, 0x5a ) || @input.peek(1) == 0x5f || @input.peek( 1 ).between?( 0x61, 0x7a )
|
|
435
|
+
if @input.peek( 1 ).between?( 0x30, 0x39 ) || @input.peek( 1 ).between?( 0x41, 0x5a ) || @input.peek( 1 ) == 0x5f || @input.peek( 1 ).between?( 0x61, 0x7a )
|
|
436
436
|
@input.consume
|
|
437
437
|
else
|
|
438
438
|
mse = MismatchedSet( nil )
|
|
@@ -793,7 +793,7 @@ module GroupFile
|
|
|
793
793
|
case alt_11
|
|
794
794
|
when 1
|
|
795
795
|
# at line
|
|
796
|
-
if @input.peek( 1 ).between?( 0x9, 0xa ) || @input.peek( 1 ).between?( 0xc, 0xd ) || @input.peek(1) == 0x20
|
|
796
|
+
if @input.peek( 1 ).between?( 0x9, 0xa ) || @input.peek( 1 ).between?( 0xc, 0xd ) || @input.peek( 1 ) == 0x20
|
|
797
797
|
@input.consume
|
|
798
798
|
else
|
|
799
799
|
mse = MismatchedSet( nil )
|
|
@@ -805,7 +805,7 @@ module GroupFile
|
|
|
805
805
|
|
|
806
806
|
else
|
|
807
807
|
match_count_11 > 0 and break
|
|
808
|
-
eee = EarlyExit(11)
|
|
808
|
+
eee = EarlyExit( 11 )
|
|
809
809
|
|
|
810
810
|
|
|
811
811
|
raise eee
|
|
@@ -920,7 +920,7 @@ module GroupFile
|
|
|
920
920
|
1, 11, 1, 12, 1, 13, 1, 14, 1, 15, 1, 16, 3, -1,
|
|
921
921
|
1, 4, 1, 2, 2, -1, 1, 1 )
|
|
922
922
|
SPECIAL = unpack( 24, -1 )
|
|
923
|
-
TRANSITION = [
|
|
923
|
+
TRANSITION = [
|
|
924
924
|
unpack( 2, 15, 1, -1, 2, 15, 18, -1, 1, 15, 1, -1, 1, 13, 1, 14,
|
|
925
925
|
2, -1, 1, 8, 1, 13, 1, 4, 1, 5, 1, 7, 1, -1, 1, 6, 2, -1,
|
|
926
926
|
1, 14, 10, -1, 1, 2, 1, 3, 1, 12, 1, 9, 3, -1, 26, 10, 4,
|
|
@@ -986,5 +986,3 @@ end # module Template
|
|
|
986
986
|
end # module ANTLR3
|
|
987
987
|
|
|
988
988
|
# - - - - - - end action @lexer::footer - - - - - - -
|
|
989
|
-
|
|
990
|
-
|
|
@@ -130,7 +130,7 @@ module GroupFile
|
|
|
130
130
|
def unescape( text )
|
|
131
131
|
text.gsub( /\\(?:([abefnrstv])|([0-7]{3})|x([0-9a-fA-F]{2})|(.))/ ) do
|
|
132
132
|
if $1
|
|
133
|
-
case $1[0]
|
|
133
|
+
case $1[ 0 ]
|
|
134
134
|
when ?a then "\a"
|
|
135
135
|
when ?b then "\b"
|
|
136
136
|
when ?e then "\e"
|
|
@@ -153,7 +153,7 @@ module GroupFile
|
|
|
153
153
|
when TEMPLATE
|
|
154
154
|
token.text.gsub( /\A<<<\r?\n?|\r?\n?>>>\Z/, '' )
|
|
155
155
|
when STRING
|
|
156
|
-
unescape( token.text[1...-1] )
|
|
156
|
+
unescape( token.text[ 1...-1 ] )
|
|
157
157
|
end
|
|
158
158
|
end
|
|
159
159
|
|
|
@@ -227,8 +227,8 @@ module GroupFile
|
|
|
227
227
|
end # loop for decision 2
|
|
228
228
|
|
|
229
229
|
rescue ANTLR3::Error::RecognitionError => re
|
|
230
|
-
report_error(re)
|
|
231
|
-
recover(re)
|
|
230
|
+
report_error( re )
|
|
231
|
+
recover( re )
|
|
232
232
|
|
|
233
233
|
ensure
|
|
234
234
|
# -> uncomment the next line to manually enable rule tracing
|
|
@@ -302,8 +302,8 @@ module GroupFile
|
|
|
302
302
|
end
|
|
303
303
|
|
|
304
304
|
rescue ANTLR3::Error::RecognitionError => re
|
|
305
|
-
report_error(re)
|
|
306
|
-
recover(re)
|
|
305
|
+
report_error( re )
|
|
306
|
+
recover( re )
|
|
307
307
|
|
|
308
308
|
ensure
|
|
309
309
|
# -> uncomment the next line to manually enable rule tracing
|
|
@@ -388,8 +388,8 @@ module GroupFile
|
|
|
388
388
|
end
|
|
389
389
|
|
|
390
390
|
rescue ANTLR3::Error::RecognitionError => re
|
|
391
|
-
report_error(re)
|
|
392
|
-
recover(re)
|
|
391
|
+
report_error( re )
|
|
392
|
+
recover( re )
|
|
393
393
|
|
|
394
394
|
ensure
|
|
395
395
|
# -> uncomment the next line to manually enable rule tracing
|
|
@@ -463,8 +463,8 @@ module GroupFile
|
|
|
463
463
|
|
|
464
464
|
end
|
|
465
465
|
rescue ANTLR3::Error::RecognitionError => re
|
|
466
|
-
report_error(re)
|
|
467
|
-
recover(re)
|
|
466
|
+
report_error( re )
|
|
467
|
+
recover( re )
|
|
468
468
|
|
|
469
469
|
ensure
|
|
470
470
|
# -> uncomment the next line to manually enable rule tracing
|
|
@@ -517,8 +517,8 @@ module GroupFile
|
|
|
517
517
|
end # loop for decision 9
|
|
518
518
|
|
|
519
519
|
rescue ANTLR3::Error::RecognitionError => re
|
|
520
|
-
report_error(re)
|
|
521
|
-
recover(re)
|
|
520
|
+
report_error( re )
|
|
521
|
+
recover( re )
|
|
522
522
|
|
|
523
523
|
ensure
|
|
524
524
|
# -> uncomment the next line to manually enable rule tracing
|
|
@@ -598,8 +598,8 @@ module GroupFile
|
|
|
598
598
|
|
|
599
599
|
end
|
|
600
600
|
rescue ANTLR3::Error::RecognitionError => re
|
|
601
|
-
report_error(re)
|
|
602
|
-
recover(re)
|
|
601
|
+
report_error( re )
|
|
602
|
+
recover( re )
|
|
603
603
|
|
|
604
604
|
ensure
|
|
605
605
|
# -> uncomment the next line to manually enable rule tracing
|
|
@@ -658,9 +658,9 @@ if __FILE__ == $0 and ARGV.first != '--'
|
|
|
658
658
|
# GroupFile.g
|
|
659
659
|
|
|
660
660
|
|
|
661
|
-
defined?(ANTLR3::Template::GroupFile::Lexer) or require 'antlr3/template/group-file'
|
|
661
|
+
defined?( ANTLR3::Template::GroupFile::Lexer ) or require 'antlr3/template/group-file'
|
|
662
662
|
ANTLR3::Template::GroupFile::Parser.main( ARGV )
|
|
663
663
|
|
|
664
664
|
# - - - - - - end action @parser::main - - - - - - -
|
|
665
665
|
|
|
666
|
-
end
|
|
666
|
+
end
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
unless defined? Call
|
|
4
4
|
|
|
5
|
-
Call = Struct.new(:file, :line, :method)
|
|
5
|
+
Call = Struct.new( :file, :line, :method )
|
|
6
6
|
class Call
|
|
7
7
|
|
|
8
|
-
def self.parse(call_string)
|
|
9
|
-
parts = call_string.split(':', 3)
|
|
8
|
+
def self.parse( call_string )
|
|
9
|
+
parts = call_string.split( ':', 3 )
|
|
10
10
|
file = parts.shift
|
|
11
11
|
line = parts.shift.to_i
|
|
12
12
|
if parts.empty?
|
|
13
|
-
return Call.new(file, line)
|
|
13
|
+
return Call.new( file, line )
|
|
14
14
|
else
|
|
15
15
|
mstring = parts.shift
|
|
16
|
-
match = mstring.match(/`(.+)'/)
|
|
17
|
-
method = match ? match[1] : nil
|
|
18
|
-
return Call.new(file, line, method)
|
|
16
|
+
match = mstring.match( /`(.+)'/ )
|
|
17
|
+
method = match ? match[ 1 ] : nil
|
|
18
|
+
return Call.new( file, line, method )
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
@@ -32,9 +32,9 @@ class Call
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def to_s
|
|
35
|
-
string = '%s:%i' % [file, line]
|
|
35
|
+
string = '%s:%i' % [ file, line ]
|
|
36
36
|
method and string << ":in `%s'" % method
|
|
37
|
-
return(string)
|
|
37
|
+
return( string )
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def inspect
|
|
@@ -43,15 +43,15 @@ class Call
|
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
module Kernel
|
|
46
|
-
def call_stack(depth = 1)
|
|
47
|
-
Call.convert_backtrace(caller(depth + 1))
|
|
46
|
+
def call_stack( depth = 1 )
|
|
47
|
+
Call.convert_backtrace( caller( depth + 1 ) )
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
class Exception
|
|
52
52
|
def backtrace!
|
|
53
|
-
Call.convert_backtrace(backtrace)
|
|
53
|
+
Call.convert_backtrace( backtrace )
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
end # unless defined? Call
|
|
57
|
+
end # unless defined? Call
|
|
@@ -2,28 +2,28 @@
|
|
|
2
2
|
# encoding: utf-8
|
|
3
3
|
|
|
4
4
|
class String
|
|
5
|
-
def /(subpath)
|
|
6
|
-
File.join(self, subpath.to_s)
|
|
5
|
+
def /( subpath )
|
|
6
|
+
File.join( self, subpath.to_s )
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
def here_indent(chr = '| ')
|
|
10
|
-
dup.here_indent!(chr)
|
|
9
|
+
def here_indent( chr = '| ' )
|
|
10
|
+
dup.here_indent!( chr )
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def here_indent!(chr = '| ')
|
|
14
|
-
chr = Regexp.escape(chr)
|
|
15
|
-
exp = Regexp.new("^ *#{chr}")
|
|
16
|
-
self.gsub!(exp,'')
|
|
13
|
+
def here_indent!( chr = '| ' )
|
|
14
|
+
chr = Regexp.escape( chr )
|
|
15
|
+
exp = Regexp.new( "^ *#{ chr }" )
|
|
16
|
+
self.gsub!( exp,'' )
|
|
17
17
|
return self
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
def here_flow(chr = '| ')
|
|
21
|
-
dup.here_flow!(chr)
|
|
20
|
+
def here_flow( chr = '| ' )
|
|
21
|
+
dup.here_flow!( chr )
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
def here_flow!(chr = '| ')
|
|
25
|
-
here_indent!(chr).gsub!(/\n\s+/,' ')
|
|
26
|
-
return(self)
|
|
24
|
+
def here_flow!( chr = '| ' )
|
|
25
|
+
here_indent!( chr ).gsub!( /\n\s+/,' ' )
|
|
26
|
+
return( self )
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# Indent left or right by n spaces.
|
|
@@ -32,11 +32,11 @@ class String
|
|
|
32
32
|
# CREDIT: Gavin Sinclair
|
|
33
33
|
# CREDIT: Trans
|
|
34
34
|
|
|
35
|
-
def indent(n)
|
|
35
|
+
def indent( n )
|
|
36
36
|
if n >= 0
|
|
37
|
-
gsub(/^/, ' ' * n)
|
|
37
|
+
gsub( /^/, ' ' * n )
|
|
38
38
|
else
|
|
39
|
-
gsub(/^ {0,#{-n}}/, "")
|
|
39
|
+
gsub( /^ {0,#{ -n }}/, "" )
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
@@ -44,8 +44,8 @@ class String
|
|
|
44
44
|
#
|
|
45
45
|
# CREDIT: Noah Gibbs
|
|
46
46
|
|
|
47
|
-
def outdent(n)
|
|
48
|
-
indent(-n)
|
|
47
|
+
def outdent( n )
|
|
48
|
+
indent( -n )
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
# Returns the shortest length of leading whitespace for all non-blank lines
|
|
@@ -57,11 +57,11 @@ class String
|
|
|
57
57
|
#
|
|
58
58
|
# CREDIT: Kyle Yetter
|
|
59
59
|
def level_of_indent
|
|
60
|
-
self.scan(/^ *(?=\S)/).map { |space| space.length }.min || 0
|
|
60
|
+
self.scan( /^ *(?=\S)/ ).map { |space| space.length }.min || 0
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
def fixed_indent(n)
|
|
64
|
-
self.outdent(self.level_of_indent).indent(n)
|
|
63
|
+
def fixed_indent( n )
|
|
64
|
+
self.outdent( self.level_of_indent ).indent( n )
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
# Provides a margin controlled string.
|
|
@@ -77,16 +77,16 @@ class String
|
|
|
77
77
|
#
|
|
78
78
|
# CREDIT: Trans
|
|
79
79
|
|
|
80
|
-
def margin(n=0)
|
|
80
|
+
def margin( n=0 )
|
|
81
81
|
#d = /\A.*\n\s*(.)/.match( self )[1]
|
|
82
82
|
#d = /\A\s*(.)/.match( self)[1] unless d
|
|
83
|
-
d = ((/\A.*\n\s*(.)/.match(self)) ||
|
|
84
|
-
(/\A\s*(.)/.match(self)))[1]
|
|
83
|
+
d = ( ( /\A.*\n\s*(.)/.match( self ) ) ||
|
|
84
|
+
( /\A\s*(.)/.match( self ) ) )[ 1 ]
|
|
85
85
|
return '' unless d
|
|
86
86
|
if n == 0
|
|
87
|
-
gsub(/\n\s*\Z/,'').gsub(/^\s*[#{d}]/, '')
|
|
87
|
+
gsub( /\n\s*\Z/,'' ).gsub( /^\s*[#{ d }]/, '' )
|
|
88
88
|
else
|
|
89
|
-
gsub(/\n\s*\Z/,'').gsub(/^\s*[#{d}]/, ' ' * n)
|
|
89
|
+
gsub( /\n\s*\Z/,'' ).gsub( /^\s*[#{ d }]/, ' ' * n )
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
92
|
|
|
@@ -99,16 +99,16 @@ class String
|
|
|
99
99
|
# CREDIT: Noah Gibbs
|
|
100
100
|
# CREDIT: GGaramuno
|
|
101
101
|
|
|
102
|
-
def expand_tabs(n=8)
|
|
102
|
+
def expand_tabs( n=8 )
|
|
103
103
|
n = n.to_int
|
|
104
104
|
raise ArgumentError, "n must be >= 0" if n < 0
|
|
105
|
-
return gsub(/\t/, "") if n == 0
|
|
106
|
-
return gsub(/\t/, " ") if n == 1
|
|
105
|
+
return gsub( /\t/, "" ) if n == 0
|
|
106
|
+
return gsub( /\t/, " " ) if n == 1
|
|
107
107
|
str = self.dup
|
|
108
108
|
while
|
|
109
|
-
str.gsub!(/^([^\t\n]*)(\t+)/) { |f|
|
|
110
|
-
val = ( n * $2.size - ($1.size % n) )
|
|
111
|
-
$1 << (' ' * val)
|
|
109
|
+
str.gsub!( /^([^\t\n]*)(\t+)/ ) { |f|
|
|
110
|
+
val = ( n * $2.size - ( $1.size % n ) )
|
|
111
|
+
$1 << ( ' ' * val )
|
|
112
112
|
}
|
|
113
113
|
end
|
|
114
114
|
str
|
|
@@ -125,10 +125,10 @@ class String
|
|
|
125
125
|
# "SnakeCase::Errors".underscore #=> "snake_case/errors"
|
|
126
126
|
|
|
127
127
|
def snakecase
|
|
128
|
-
gsub(/::/, '/'). # NOT SO SURE ABOUT THIS -T
|
|
129
|
-
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
|
130
|
-
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
|
131
|
-
tr("-", "_").
|
|
128
|
+
gsub( /::/, '/' ). # NOT SO SURE ABOUT THIS -T
|
|
129
|
+
gsub( /([A-Z]+)([A-Z][a-z])/,'\1_\2' ).
|
|
130
|
+
gsub( /([a-z\d])([A-Z])/,'\1_\2' ).
|
|
131
|
+
tr( "-", "_" ).
|
|
132
132
|
downcase
|
|
133
133
|
end
|
|
134
134
|
|
|
@@ -150,26 +150,26 @@ class Module
|
|
|
150
150
|
# CREDIT: Trans
|
|
151
151
|
|
|
152
152
|
def modspace
|
|
153
|
-
space = name[ 0...(name.rindex( '::' ) || 0)]
|
|
154
|
-
space.empty? ? Object : eval(space)
|
|
153
|
+
space = name[ 0...( name.rindex( '::' ) || 0 ) ]
|
|
154
|
+
space.empty? ? Object : eval( space )
|
|
155
155
|
end
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
module Kernel
|
|
159
159
|
autoload :Tempfile, 'tempfile'
|
|
160
160
|
|
|
161
|
-
def screen_width(out=STDERR)
|
|
162
|
-
default_width = ENV['COLUMNS'] || 80
|
|
161
|
+
def screen_width( out=STDERR )
|
|
162
|
+
default_width = ENV[ 'COLUMNS' ] || 80
|
|
163
163
|
tiocgwinsz = 0x5413
|
|
164
|
-
data = [0, 0, 0, 0].pack("SSSS")
|
|
165
|
-
if out.ioctl(tiocgwinsz, data) >= 0 then
|
|
166
|
-
rows, cols, xpixels, ypixels = data.unpack("SSSS")
|
|
164
|
+
data = [ 0, 0, 0, 0 ].pack( "SSSS" )
|
|
165
|
+
if out.ioctl( tiocgwinsz, data ) >= 0 then
|
|
166
|
+
rows, cols, xpixels, ypixels = data.unpack( "SSSS" )
|
|
167
167
|
if cols >= 0 then cols else default_width end
|
|
168
168
|
else
|
|
169
169
|
default_width
|
|
170
170
|
end
|
|
171
171
|
rescue Exception => e
|
|
172
|
-
default_width rescue (raise e)
|
|
172
|
+
default_width rescue ( raise e )
|
|
173
173
|
end
|
|
174
174
|
end
|
|
175
175
|
|
|
@@ -184,11 +184,11 @@ class File
|
|
|
184
184
|
# File.relative_path('rel/path') # => './rel/path'
|
|
185
185
|
# File.relative_path('/some/abs/path', '/some') # => './abs/path'
|
|
186
186
|
# File.relative_path('/some/file.txt', '/some/abs/path') # => '../../file.txt'
|
|
187
|
-
def self.relative_path(target, reference = Dir.pwd)
|
|
188
|
-
pair = [target, reference].map! do |path|
|
|
189
|
-
File.expand_path(path.to_s).split(File::Separator).tap do |list|
|
|
190
|
-
if list.empty? then list << String.new(File::Separator)
|
|
191
|
-
elsif list.first.empty? then list.first.replace(File::Separator)
|
|
187
|
+
def self.relative_path( target, reference = Dir.pwd )
|
|
188
|
+
pair = [ target, reference ].map! do |path|
|
|
189
|
+
File.expand_path( path.to_s ).split( File::Separator ).tap do |list|
|
|
190
|
+
if list.empty? then list << String.new( File::Separator )
|
|
191
|
+
elsif list.first.empty? then list.first.replace( File::Separator )
|
|
192
192
|
end
|
|
193
193
|
end
|
|
194
194
|
end
|
|
@@ -199,30 +199,30 @@ class File
|
|
|
199
199
|
reference_list.shift or break
|
|
200
200
|
end
|
|
201
201
|
|
|
202
|
-
relative_list = Array.new(reference_list.length, '..')
|
|
202
|
+
relative_list = Array.new( reference_list.length, '..' )
|
|
203
203
|
relative_list.empty? and relative_list << '.'
|
|
204
|
-
relative_list.concat(target_list).compact!
|
|
205
|
-
return relative_list.join(File::Separator)
|
|
204
|
+
relative_list.concat( target_list ).compact!
|
|
205
|
+
return relative_list.join( File::Separator )
|
|
206
206
|
end
|
|
207
207
|
|
|
208
208
|
end
|
|
209
209
|
|
|
210
210
|
class Dir
|
|
211
|
-
defined?(DOTS) or DOTS = %w(. ..).freeze
|
|
212
|
-
def self.children(directory)
|
|
213
|
-
entries = Dir.entries(directory) - DOTS
|
|
211
|
+
defined?( DOTS ) or DOTS = %w(. ..).freeze
|
|
212
|
+
def self.children( directory )
|
|
213
|
+
entries = Dir.entries( directory ) - DOTS
|
|
214
214
|
entries.map! do |entry|
|
|
215
|
-
File.join(directory, entry)
|
|
215
|
+
File.join( directory, entry )
|
|
216
216
|
end
|
|
217
217
|
end
|
|
218
218
|
|
|
219
|
-
def self.mkpath(path)
|
|
220
|
-
$VERBOSE and $stderr.puts("INFO: Dir.mkpath(%p)" % path)
|
|
221
|
-
test(?d, path) and return(path)
|
|
222
|
-
parent = File.dirname(path)
|
|
223
|
-
test(?d, parent) or mkpath(parent)
|
|
224
|
-
Dir.mkdir(path)
|
|
225
|
-
return(path)
|
|
219
|
+
def self.mkpath( path )
|
|
220
|
+
$VERBOSE and $stderr.puts( "INFO: Dir.mkpath(%p)" % path )
|
|
221
|
+
test( ?d, path ) and return( path )
|
|
222
|
+
parent = File.dirname( path )
|
|
223
|
+
test( ?d, parent ) or mkpath( parent )
|
|
224
|
+
Dir.mkdir( path )
|
|
225
|
+
return( path )
|
|
226
226
|
end
|
|
227
227
|
|
|
228
228
|
end
|
|
@@ -240,12 +240,12 @@ class Array
|
|
|
240
240
|
#
|
|
241
241
|
# CREDIT: Richard Laugesen
|
|
242
242
|
|
|
243
|
-
def pad(len, val=nil)
|
|
243
|
+
def pad( len, val=nil )
|
|
244
244
|
return dup if self.size >= len.abs
|
|
245
245
|
if len < 0
|
|
246
|
-
Array.new((len+size).abs,val) + self
|
|
246
|
+
Array.new( ( len+size ).abs,val ) + self
|
|
247
247
|
else
|
|
248
|
-
self + Array.new(len-size,val)
|
|
248
|
+
self + Array.new( len-size,val )
|
|
249
249
|
end
|
|
250
250
|
end
|
|
251
251
|
|
|
@@ -257,12 +257,12 @@ class Array
|
|
|
257
257
|
#
|
|
258
258
|
# CREDIT: Richard Laugesen
|
|
259
259
|
|
|
260
|
-
def pad!(len, val=nil)
|
|
260
|
+
def pad!( len, val=nil )
|
|
261
261
|
return self if self.size >= len.abs
|
|
262
262
|
if len < 0
|
|
263
|
-
replace Array.new((len+size).abs,val) + self
|
|
263
|
+
replace Array.new( ( len+size ).abs,val ) + self
|
|
264
264
|
else
|
|
265
|
-
concat Array.new(len-size,val)
|
|
265
|
+
concat Array.new( len-size,val )
|
|
266
266
|
end
|
|
267
267
|
end
|
|
268
268
|
|