naksh 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. data/AUTHORS +1 -0
  2. data/COPYING +674 -0
  3. data/COPYING-DOCS +15 -0
  4. data/README.md +45 -0
  5. data/Rakefile +129 -0
  6. data/TODO +19 -0
  7. data/bin/naksh +2 -0
  8. data/data/default.mo +0 -0
  9. data/data/default.po +16 -0
  10. data/data/default2.mo +0 -0
  11. data/data/default2.po +27 -0
  12. data/data/starter.pot +29 -0
  13. data/docs/bash_flow.dia +0 -0
  14. data/docs/gtk_manual.txt +13 -0
  15. data/docs/master_plan.dia +0 -0
  16. data/docs/master_plan.png +0 -0
  17. data/docs/master_plan.svg +74 -0
  18. data/docs/master_plan.svgz +0 -0
  19. data/docs/userguide/en/about.xml +42 -0
  20. data/docs/userguide/en/gnu-fdl-1.2.xml +543 -0
  21. data/docs/userguide/en/naksh.xml +881 -0
  22. data/docs/userguide/en/naksh_start_window.png +0 -0
  23. data/docs/userguide/en/old_naksh.xml +180 -0
  24. data/docs/userguide/en/userguide-en.omf +37 -0
  25. data/lib/naksh.rb +165 -0
  26. data/lib/naksh/buffer.rb +153 -0
  27. data/lib/naksh/command_handling.rb +117 -0
  28. data/lib/naksh/commands/bash/README +2 -0
  29. data/lib/naksh/commands/bash/echo.nkc.rb +50 -0
  30. data/lib/naksh/commands/bsd.rb +25 -0
  31. data/lib/naksh/commands/dos.rb +25 -0
  32. data/lib/naksh/commands/fuse.rb +25 -0
  33. data/lib/naksh/commands/gnu.rb +30 -0
  34. data/lib/naksh/commands/gnu/README +2 -0
  35. data/lib/naksh/commands/gnu/cat.nkc.rb +50 -0
  36. data/lib/naksh/commands/gnu/cd.nkc.rb +11 -0
  37. data/lib/naksh/commands/gnu/echo.documentation.json +57 -0
  38. data/lib/naksh/commands/gnu/echo.documentation.rb +60 -0
  39. data/lib/naksh/commands/gnu/echo.nkc.rb +52 -0
  40. data/lib/naksh/commands/gnu/ls.nkc.rb +11 -0
  41. data/lib/naksh/commands/gnu/mv.nkc.rb +15 -0
  42. data/lib/naksh/commands/gnu/pwd.nkc.rb +11 -0
  43. data/lib/naksh/commands/naksh/addpath.nkc.rb +15 -0
  44. data/lib/naksh/commands/naksh/broken.nkc.rb +10 -0
  45. data/lib/naksh/commands/naksh/empty.nkc.rb +4 -0
  46. data/lib/naksh/commands/naksh/exit.nkc.rb +10 -0
  47. data/lib/naksh/commands/naksh/help.nkc.rb +21 -0
  48. data/lib/naksh/commands/naksh/man.nkc.rb +8 -0
  49. data/lib/naksh/commands/ruby.rb +31 -0
  50. data/lib/naksh/commands/unix.rb +131 -0
  51. data/lib/naksh/configuration/gconf.rb +51 -0
  52. data/lib/naksh/configuration/hash.rb +38 -0
  53. data/lib/naksh/defaults.rb +40 -0
  54. data/lib/naksh/history.rb +85 -0
  55. data/lib/naksh/interfaces.rb +59 -0
  56. data/lib/naksh/interfaces/fox.rb +49 -0
  57. data/lib/naksh/interfaces/gtk.rb +103 -0
  58. data/lib/naksh/interfaces/gtk/abtwin.rb +53 -0
  59. data/lib/naksh/interfaces/gtk/gnomeapp.rb +31 -0
  60. data/lib/naksh/interfaces/gtk/helpwin.rb +70 -0
  61. data/lib/naksh/interfaces/gtk/io.rb +94 -0
  62. data/lib/naksh/interfaces/gtk/mainwin.rb +56 -0
  63. data/lib/naksh/interfaces/gtk/mainwin/console.rb +121 -0
  64. data/lib/naksh/interfaces/gtk/mainwin/main_menu.rb +143 -0
  65. data/lib/naksh/interfaces/gtk/optwin.rb +78 -0
  66. data/lib/naksh/interfaces/tab.rb +58 -0
  67. data/lib/naksh/interfaces/wxw.rb +75 -0
  68. data/lib/naksh/interfaces/wxw/abtwin.rb +38 -0
  69. data/lib/naksh/interfaces/wxw/helpwin.rb +40 -0
  70. data/lib/naksh/interfaces/wxw/io.rb +61 -0
  71. data/lib/naksh/interfaces/wxw/mainwin.rb +42 -0
  72. data/lib/naksh/interfaces/wxw/mainwin/main_menu.rb +126 -0
  73. data/lib/naksh/interfaces/wxw/mainwin/sessions.rb +49 -0
  74. data/lib/naksh/interfaces/wxw/optwin.rb +37 -0
  75. data/lib/naksh/path_entry.rb +101 -0
  76. data/lib/naksh/regexp.rb +31 -0
  77. data/lib/naksh/session.rb +72 -0
  78. data/lib/naksh/stdlibext.rb +48 -0
  79. data/lib/naksh/syntax.rb +57 -0
  80. data/lib/naksh/syntax/bash.rb +219 -0
  81. data/lib/naksh/syntax/bash/antlr/bottomup.g +24 -0
  82. data/lib/naksh/syntax/bash/antlr/topdown.g +52 -0
  83. data/lib/naksh/syntax/bash/dhaka/evaluator.rb +353 -0
  84. data/lib/naksh/syntax/bash/dhaka/grammar.rb +71 -0
  85. data/lib/naksh/syntax/bash/dhaka/lexer.rb +52 -0
  86. data/lib/naksh/syntax/bash/treetop/bash.treetop +17 -0
  87. data/lib/old/abbr_call.rb +39 -0
  88. data/lib/old/autocomplete.rb +29 -0
  89. data/lib/old/command.rb +106 -0
  90. data/lib/old/command_holder.rb +75 -0
  91. data/lib/old/commands.rb +24 -0
  92. data/lib/old/old_executor.rb +95 -0
  93. data/lib/old/options.rb +31 -0
  94. data/lib/old/rush.rb +113 -0
  95. data/lib/old/sortissimo.rb +205 -0
  96. data/lib/old/systems.rb +25 -0
  97. data/lib/old/systems/ruby.rb +26 -0
  98. data/lib/old/un.rb +240 -0
  99. data/lib/rust/Rakefile +6 -0
  100. data/lib/rust/commands/builtins.rb +46 -0
  101. data/lib/rust/commands/builtins/cd.rb +17 -0
  102. data/lib/rust/commands/builtins/exit.rb +13 -0
  103. data/lib/rust/commands/builtins/help.rb +14 -0
  104. data/lib/rust/commands/builtins/parser.rb +13 -0
  105. data/lib/rust/commands/builtins/pwd.rb +13 -0
  106. data/lib/rust/commands/builtins/type.rb +13 -0
  107. data/lib/rust/commands/commands/ls.rb +13 -0
  108. data/lib/rust/commands/commands/read.rb +13 -0
  109. data/lib/rust/commands/commands/rm.rb +14 -0
  110. data/lib/rust/commands/commands/test.rb +20 -0
  111. data/lib/rust/helpers/array.rb +10 -0
  112. data/lib/rust/helpers/command_center.rb +78 -0
  113. data/lib/rust/helpers/constants.rb +58 -0
  114. data/lib/rust/helpers/io.rb +132 -0
  115. data/lib/rust/helpers/parser.rb +45 -0
  116. data/lib/rust/helpers/rush_control.rb +40 -0
  117. data/lib/rust/helpers/string.rb +50 -0
  118. data/lib/rust/helpers/trollop.rb +475 -0
  119. data/lib/rust/parsers/bash.rb +220 -0
  120. data/lib/rust/parsers/bash/stdlibext.rb +32 -0
  121. data/lib/rust/parsers/ren.rb +57 -0
  122. data/lib/rust/rust.rb +75 -0
  123. data/lib/rust/syntax/command.rb +23 -0
  124. data/lib/rust/syntax/paths.rb +31 -0
  125. data/lib/rust/syntax/pipes.rb +148 -0
  126. data/naksh.gemspec +55 -0
  127. data/test/naksh/arg_parser.rspec.rb +27 -0
  128. data/test/naksh/commands/bash/echo.rspec.rb +32 -0
  129. data/test/naksh/commands/sortlist +127 -0
  130. data/test/naksh/external_command.rspec.rb +46 -0
  131. data/test/naksh/send_error.rspec.rb +60 -0
  132. data/test/naksh/suggest.rspec.rb +38 -0
  133. data/test/naksh/syntax/bash.rspec.rb +69 -0
  134. data/test/naksh/syntax/bash/execute.rspec.rb +51 -0
  135. data/test/naksh/syntax/rspec.rb +63 -0
  136. data/test/run_rspecs.rb +20 -0
  137. metadata +217 -0
data/naksh.gemspec ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/local/bin/ruby
2
+ # 2011 Mahmut Bulut
3
+
4
+ # This file is part of Naksh.
5
+ #
6
+ # Naksh is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Naksh is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Naksh. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require 'rubygems'
20
+ require 'rake'
21
+
22
+ $spec=Gem::Specification.new do |s|
23
+ s.name = 'naksh'
24
+ s.version = '0.2.0'
25
+ s.add_dependency 'gettext'
26
+ s.author = 'Mahmut Bulut'
27
+ s.autorequire = 'lib/naksh.rb'
28
+ s.default_executable = 'bin/naksh'
29
+ =begin
30
+ s.desciption = <<EOS
31
+ Naksh is an interactive shell
32
+ with Bash syntax emulation,
33
+ interfaces in GTK and Wx,
34
+ but so far only a small set of commands.
35
+ However, the project is under active development.
36
+ EOS
37
+ =end
38
+ s.bindir = 'bin'
39
+ s.email = 'scienceblock@gmail.com'
40
+ s.executables = FileList['binc/**']
41
+ s.extra_rdoc_files = %w[ README.md ]
42
+ s.files = FileList["**/*"].exclude('.svn').exclude('pkg').to_a
43
+ s.has_rdoc = true
44
+ s.homepage = 'http://github.com/regularlambda/naksh'
45
+ #s.platform = Gem::Platform::RUBY
46
+ s.rdoc_options << '--title' << 'Naksh' <<
47
+ '--main' << 'README.md' <<
48
+ '--line-numbers'
49
+ s.require_path = 'lib'
50
+ #s.required_ruby_version ANYONE FEEL LIKE TRYING AN OLD VERSION OF RUBY?
51
+ #s.requirements = ' ENTER A STUPID BUT FRIENDLY REMARK HERE '
52
+ s.rubyforge_project = 'naksh'
53
+ s.summary = 'Nodal Associative Knowledge Shell'
54
+ s.test_file = 'test/run_rspecs.rb'
55
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/local/bin/ruby
2
+ # 2011 Mahmut Bulut
3
+
4
+ # This file is part of Naksh.
5
+ #
6
+ # Naksh is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Naksh is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Naksh. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require 'spec'
20
+
21
+ describe "the argument parser for commands" do
22
+ it "must remove options before mapping them"
23
+ #options are removed if unknown_opts==:args or not unknown_opts and opt_map
24
+ #in Ruby:
25
+ #['-a','-b','something']#=>['-b','something'],options=[:b] if opt_map={:a=>:b} and unknown_opts=:args
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ #!/usr/local/bin/ruby
2
+ # 2011 Mahmut Bulut
3
+ # GPLv3
4
+ # This file is part of Naksh.
5
+
6
+ require 'spec'
7
+ require 'naksh.rb'
8
+
9
+ describe 'bash/echo.nkc.rb' do
10
+ before :all do
11
+ location=File.join(__FILE__,'../../../../lib/naksh/commands/bash/echo.nkc.rb')
12
+ Naksh.buffer.out=Object.new
13
+ class<<Naksh.buffer.out
14
+ def print(*a)
15
+ @test_str<<a.join('')
16
+ end
17
+ def pp(*a)
18
+ $stderr.puts 'pp not implemented'
19
+ end
20
+ attr_reader :test_str
21
+ end
22
+ end
23
+
24
+ it 'should skip the new line if the -n flag is present' do
25
+ args={['hey']=>'hey',['hey you']=>'hey you',['hey','you']=>'hey you'}
26
+ args.each_pair do |key,value|
27
+ Naksh.run_nkc(location,key)
28
+ Naksh.buffer.out.test_str.should ==value
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,127 @@
1
+ ´´
2
+ `
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
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+ ¼
87
+ ½
88
+ ¾
89
+ 00
90
+ 1
91
+ ¹
92
+ 11
93
+ 111
94
+ 2
95
+ 22
96
+ ²²
97
+ 222
98
+ 33
99
+ ³³
100
+ 9
101
+ a
102
+ Á
103
+ À
104
+ Â
105
+ Å
106
+ Ä
107
+ Ã
108
+ aa
109
+ AA
110
+ ªª
111
+ aaa
112
+ æ
113
+ Æ
114
+ b
115
+ B
116
+ n
117
+ N
118
+ o
119
+ O
120
+ º
121
+ r
122
+ s
123
+ S
124
+ ß
125
+ t
126
+ z
127
+ Z
@@ -0,0 +1,46 @@
1
+ #!/usr/local/bin/ruby
2
+ # 2011 Mahmut Bulut
3
+
4
+ # This file is part of Naksh.
5
+ #
6
+ # Naksh is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Naksh is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Naksh. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require 'spec'
20
+
21
+ describe Naksh::ExternalCommand do
22
+ #should it accept Pathname?
23
+ it 'should provide access to its path and name' do
24
+ path_str='/usr/local/bin/some_program'
25
+ name_str='random_name'
26
+ ec=Naksh::ExternalCommand.new(path_str,name_str)
27
+ ec.path.should ==path_str
28
+ ec.name.should ==name_str
29
+ end
30
+ it 'should be able to pick a name if one isn\'t provided' do
31
+ Naksh::Options.drop_extensions?=false
32
+ ec1=Naksh::ExternalCommand.new('/usr/bin/sample_program1.sh')
33
+ ec1.name.should =='sample_program1.sh'
34
+ Naksh::Options.drop_extensions?=true
35
+ ec2=Naksh::ExternalCommand.new('/usr/bin/sample_program2.sh')
36
+ ec2.name.should =='sample_program2'
37
+ ec3=Naksh::ExternalCommand.new('/usr/bin/sample.program3.bash.sh')
38
+ ec3.name.should =='sample.program3.bash'
39
+ end
40
+ it 'should not respond to changes in Options.drop_extensions? after it has been created' do
41
+ Naksh::Options.drop_extensions?=false
42
+ ec1=Naksh::ExternalCommand.new('/usr/bin/sample_program1.sh')
43
+ Naksh::Options.drop_extensions?=true
44
+ ec1.name.should =='sample_program1.sh'
45
+ end
46
+ end
@@ -0,0 +1,60 @@
1
+ #!/usr/local/bin/ruby
2
+ # 2011 Mahmut Bulut
3
+
4
+ # This file is part of Naksh.
5
+ #
6
+ # Naksh is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Naksh is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Naksh. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require 'spec'
20
+ require 'naksh.rb'
21
+ require 'stringio'
22
+
23
+ describe Naksh.method(:send_error) do
24
+ before :all do
25
+ sio=Object.new
26
+ def sio.to_s
27
+ @to_s
28
+ end
29
+ def sio.pp(arg)
30
+ @to_s=arg
31
+ end
32
+ def sio.print(str)
33
+ @to_s=str
34
+ end
35
+ Naksh.buffer.out=sio
36
+ str="a reasonable error"
37
+ end
38
+ it "should output to Naksh.buffer.out" do
39
+ Naksh.send_error(str)
40
+ sio.to_s.chop.should ==str
41
+ end
42
+ it "should raise an error unless its argument can't be converted to a string" do
43
+ Naksh.buffer.out=
44
+ o=Object.new
45
+ class<<o
46
+ undef_method :to_s,:to_str,:inspect
47
+ end
48
+ begin
49
+ Naksh.send_error(o)
50
+ worked=true
51
+ rescue
52
+ worked=false
53
+ end
54
+ worked.should be_false
55
+ end
56
+ it "should stop further processing" do
57
+ Naksh.send_error("Naksh: a reasonable error")
58
+ Naksh.stopped?.should be_true
59
+ end
60
+ end
@@ -0,0 +1,38 @@
1
+ #!/usr/local/bin/ruby
2
+ # 2011 Mahmut Bulut
3
+
4
+ # This file is part of Naksh.
5
+ #
6
+ # Naksh is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Naksh is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Naksh. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require 'spec'
20
+ describe Naksh do
21
+
22
+
23
+ describe Naksh.method(:suggestions) do
24
+ it 'should use a spell checker' do
25
+ #Naksh.suggestions('xml-cpy-editor')#=>'xml-copy-editor'
26
+ end
27
+ it 'should use autocomplete if the entry it short or not found' do
28
+ #autocomplete is the next best thing
29
+ end
30
+
31
+ end
32
+
33
+ describe Naksh.method(:complete) do
34
+ it 'should be fast'
35
+ it 'should include all available commands'
36
+ end
37
+
38
+ end
@@ -0,0 +1,69 @@
1
+ #!/usr/local/bin/ruby
2
+ # 2011 Mahmut Bulut
3
+
4
+ # This file is part of Naksh.
5
+ #
6
+ # Naksh is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Naksh is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Naksh. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require 'spec'
20
+
21
+ #this is really testing Bash.find_unescaped_nonstring
22
+ describe Naksh::Syntax::Bash.method(:remove_comments) do
23
+
24
+
25
+ it 'should return unmodified an uncommented script' do
26
+ ["abc -gf --fake|great 'wonderful';cool\nawesome"].each do |s|
27
+ Naksh::Syntax::Bash.remove_comments(s).should eql?(s)
28
+ end
29
+ end
30
+
31
+
32
+ it 'should ignore escaped comment symbols' do
33
+ [
34
+ "echo The \\\# here does not begin a comment.",
35
+ "abc -gf --fake \\\#|great 'wonderful';cool\\\\\\\#\nawesome"].each do |s|
36
+ Naksh::Syntax::Bash.remove_comments(s).should eql?(s)
37
+ end
38
+ end
39
+
40
+
41
+ it 'should ignore comment symbols in strings' do
42
+ [
43
+ "echo \"The # here does not begin a comment.\"",
44
+ "echo 'The # here does not begin a comment.'",
45
+ "abc -gf --fake '#'|great 'wonderful';cool \"\\\\\#\n\"\nawesome"].each do |s|
46
+ Naksh::Syntax::Bash.remove_comments(s).should eql?(s)
47
+ end
48
+ end
49
+
50
+
51
+ it 'should remove unescaped comments which aren\'t in strings' do
52
+ {
53
+ "echo The \# here begins a comment."=>"echo The "
54
+ "abc -gf --fake '#'|great 'wonderful'#really wonderful\n;cool \"\\\\\#\n\"#\nawesome"=>"abc -gf --fake '#'|great 'wonderful'\n;cool \"\\\\\#\n\"\nawesome"}.each_pair do |i,o|
55
+ Naksh::Syntax::Bash.remove_comments(i).should eql?(o)
56
+ end
57
+ end
58
+
59
+
60
+ it 'should be able to handle any random combination of escaping, strings, and comments' do
61
+ {"\#a\nbc\\nde\\'f\#g\n\\\\\"hi;\#j;\\\"\"kl;\n\#mn\#\nop\\\#qrs#"=>/\A\n?bc\\nde\\'f\n\\\\\"hi;\#j;\\\"\"kl;\n\n?op\\\#qrs\z/}.each_pair do |i,re|
62
+ Naksh::Syntax::Bash.remove_comments(i).should match?(re)
63
+ end
64
+ end
65
+
66
+ # echo ${PATH#*:} # Parameter substitution, not a comment.
67
+ # echo $(( 2#101011 )) # Base conversion, not a comment.
68
+
69
+ end