nilac 0.0.4.3.9.7.1 → 0.0.4.3.9.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -2
- data/Rakefile +1 -1
- data/cookbook/case_insensitive_compare.js +13 -0
- data/cookbook/case_insensitive_compare.nila +7 -0
- data/cookbook/compare_strings.js +13 -0
- data/cookbook/compare_strings.nila +7 -0
- data/cookbook/concat11.js +13 -0
- data/cookbook/concat11.nila +4 -0
- data/cookbook/concat12.js +23 -0
- data/cookbook/concat12.nila +15 -0
- data/cookbook/find_substring.js +15 -0
- data/cookbook/find_substring.nila +5 -0
- data/cookbook/string_interpolation.js +7 -0
- data/cookbook/string_interpolation.nila +1 -0
- data/cookbook/substring_extract.js +21 -0
- data/cookbook/substring_extract.nila +8 -0
- data/examples/my_file.js +5 -0
- data/examples/repl.js +0 -33
- data/examples/repl.nila +36 -8
- data/examples/temp_nila.nila +63 -0
- data/lib/nilac.rb +83 -68
- data/lib/nilac/add_line_numbers.rb +17 -0
- data/lib/nilac/add_semicolons.rb +13 -3
- data/lib/nilac/compile_arrays.rb +38 -5
- data/lib/nilac/compile_blocks.rb +87 -25
- data/lib/nilac/compile_case_statement.rb +4 -0
- data/lib/nilac/compile_chained_comparison.rb +35 -0
- data/lib/nilac/compile_comments.rb +9 -0
- data/lib/nilac/compile_conditional_structures.rb +26 -3
- data/lib/nilac/compile_custom_function_map.rb +24 -2
- data/lib/nilac/compile_hashes.rb +3 -1
- data/lib/nilac/compile_heredocs.rb +2 -0
- data/lib/nilac/compile_inline_for.rb +13 -0
- data/lib/nilac/compile_interpolated_strings.rb +184 -5
- data/lib/nilac/compile_lambdas.rb +24 -8
- data/lib/nilac/compile_new_keyword.rb +37 -0
- data/lib/nilac/compile_nilac_options.rb +79 -0
- data/lib/nilac/compile_parallel_assignment.rb +3 -1
- data/lib/nilac/compile_ranges.rb +60 -0
- data/lib/nilac/compile_require_statements.rb +4 -2
- data/lib/nilac/compile_ruby_math.rb +20 -0
- data/lib/nilac/compile_ruby_methods.rb +49 -0
- data/lib/nilac/compile_whitespace_delimited_functions.rb +15 -1
- data/lib/nilac/extract_paranthesis_contents.rb +37 -0
- data/lib/nilac/extract_strings.rb +63 -0
- data/lib/nilac/fix_javascript_traps.rb +89 -0
- data/lib/nilac/friendly_errors.rb +128 -0
- data/lib/nilac/get_variables.rb +48 -14
- data/lib/nilac/lexical_scoped_function_variables.rb +1 -3
- data/lib/nilac/optimizer.rb +13 -0
- data/lib/nilac/paranthesis_compactor.rb +3 -1
- data/lib/nilac/parse_arguments.rb +21 -7
- data/lib/nilac/pretty_print_javascript.rb +152 -18
- data/lib/nilac/pretty_print_nila.rb +17 -0
- data/lib/nilac/replace_comparison_operators.rb +25 -0
- data/lib/nilac/replace_multiline_comments.rb +4 -0
- data/lib/nilac/replace_singleline_comments.rb +23 -0
- data/lib/nilac/replace_strings.rb +3 -3
- data/lib/nilac/rollblocks.rb +7 -3
- data/lib/nilac/split_semicolon_seperated_expressions.rb +3 -17
- data/lib/nilac/square_brackets_compactor.rb +37 -0
- data/lib/nilac/version.rb +1 -1
- data/shark/features/arrays.feature +11 -0
- data/shark/features/builtin_new.feature +11 -0
- data/shark/features/comments.feature +11 -0
- data/shark/features/fix_newlines.feature +1 -1
- data/shark/features/variables.feature +11 -0
- data/shark/test_files/array_string_indexing.nila +5 -1
- data/shark/test_files/arrays.nila +3 -0
- data/shark/test_files/blocks.nila +10 -0
- data/shark/test_files/builtin_new.nila +3 -0
- data/shark/test_files/case.nila +8 -0
- data/shark/test_files/chained_comparison.nila +19 -0
- data/shark/test_files/comments.nila +15 -0
- data/shark/test_files/correct.js +1 -1
- data/shark/test_files/correct_arrays.js +7 -0
- data/shark/test_files/correct_blocks.js +14 -1
- data/shark/test_files/correct_builtin_new.js +9 -0
- data/shark/test_files/correct_case.js +10 -2
- data/shark/test_files/correct_comments.js +19 -0
- data/shark/test_files/correct_conditional_assignment.js +1 -1
- data/shark/test_files/correct_default_parameters.js +1 -1
- data/shark/test_files/correct_for.js +1 -1
- data/shark/test_files/correct_hashes.js +1 -1
- data/shark/test_files/correct_heredoc.js +6 -2
- data/shark/test_files/correct_if_then_else.js +5 -1
- data/shark/test_files/correct_indexing.js +7 -3
- data/shark/test_files/correct_initialization.js +1 -1
- data/shark/test_files/correct_javascript_methods.js +1 -1
- data/shark/test_files/correct_loop.js +1 -1
- data/shark/test_files/correct_monkey_patch.js +1 -1
- data/shark/test_files/correct_multiline_array.js +1 -1
- data/shark/test_files/correct_multiple_return.js +1 -1
- data/shark/test_files/correct_numbers.js +1 -1
- data/shark/test_files/correct_operators.js +1 -1
- data/shark/test_files/correct_regular_if.js +1 -1
- data/shark/test_files/correct_regular_while.js +1 -1
- data/shark/test_files/correct_required_module.js +1 -1
- data/shark/test_files/correct_return.js +1 -1
- data/shark/test_files/correct_ruby_methods.js +1 -1
- data/shark/test_files/correct_single_return.js +1 -1
- data/shark/test_files/{perfect.js → correct_spacing.js} +1 -1
- data/shark/test_files/correct_splats.js +1 -2
- data/shark/test_files/correct_string_interpolation.js +8 -2
- data/shark/test_files/correct_string_operators.js +1 -1
- data/shark/test_files/correct_times.js +1 -1
- data/shark/test_files/correct_unless_until.js +2 -4
- data/shark/test_files/correct_variables.js +13 -0
- data/shark/test_files/correct_whitespace_delimiter.js +1 -1
- data/shark/test_files/existential_operators.nila +7 -0
- data/shark/test_files/expression.nila +6 -0
- data/shark/test_files/global_variables_client.nila +5 -0
- data/shark/test_files/heredoc.nila +11 -1
- data/shark/test_files/if_then_else.nila +3 -1
- data/shark/test_files/inline_for.nila +5 -0
- data/shark/test_files/no_return.js +11 -0
- data/shark/test_files/parseInt_trap.nila +3 -0
- data/shark/test_files/single_return.js +11 -0
- data/shark/test_files/string_interpolation.nila +7 -1
- data/shark/test_files/variables.nila +7 -0
- metadata +54 -3
@@ -0,0 +1,17 @@
|
|
1
|
+
# This method will be used to pretty print the input nila source code.
|
2
|
+
|
3
|
+
# Why is pretty printing important?
|
4
|
+
|
5
|
+
# 1. The source code can be easily checked for errors if it correctly formatted
|
6
|
+
# 2. It will be make the code more readable.
|
7
|
+
|
8
|
+
# The work began on this module on June 1, 2014 and it might take a really long time
|
9
|
+
# for the work to be completed.
|
10
|
+
|
11
|
+
# All the formatting done this method is based on the Ruby Style Guide for all the Ruby derived features
|
12
|
+
# Python Style Guide for Python derived features and Scala Style Guide for Scala derived features.
|
13
|
+
|
14
|
+
def pretty_print_nila(input_file_contents)
|
15
|
+
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
def replace_comparison_operators(input_string)
|
2
|
+
|
3
|
+
element = input_string.gsub("equalequal","==")
|
4
|
+
|
5
|
+
element = element.gsub("notequal", "!=")
|
6
|
+
|
7
|
+
element = element.gsub("plusequal","+=")
|
8
|
+
|
9
|
+
element = element.gsub("minusequal","-=")
|
10
|
+
|
11
|
+
element = element.gsub("multiequal","*=")
|
12
|
+
|
13
|
+
element = element.gsub("divequal","/=")
|
14
|
+
|
15
|
+
element = element.gsub("modequal","%=")
|
16
|
+
|
17
|
+
element = element.gsub("matchequal","=~")
|
18
|
+
|
19
|
+
element = element.gsub("greatequal",">=")
|
20
|
+
|
21
|
+
input_string = element.gsub("lessyequal","<=")
|
22
|
+
|
23
|
+
return input_string
|
24
|
+
|
25
|
+
end
|
@@ -32,6 +32,10 @@
|
|
32
32
|
|
33
33
|
multiline_comments = []
|
34
34
|
|
35
|
+
input_file_contents = input_file_contents.collect {|element| element.gsub(/=\s+begin\n/,"=begin")}
|
36
|
+
|
37
|
+
input_file_contents = input_file_contents.collect {|element| element.gsub(/=\s+end\n/,"=end")}
|
38
|
+
|
35
39
|
file_contents_as_string = input_file_contents.join
|
36
40
|
|
37
41
|
modified_file_contents = file_contents_as_string.dup
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative 'replace_strings'
|
2
|
+
require_relative 'extract_strings'
|
2
3
|
|
3
4
|
def replace_singleline_comments(input_file_contents)
|
4
5
|
|
@@ -16,14 +17,36 @@
|
|
16
17
|
|
17
18
|
current_row = modified_file_contents[x]
|
18
19
|
|
20
|
+
current_row_strings = extract_strings(current_row)
|
21
|
+
|
22
|
+
current_row = replace_strings(current_row)
|
23
|
+
|
19
24
|
comment_start = current_row.index("#")
|
20
25
|
|
21
26
|
if current_row[comment_start+1] != "{"
|
22
27
|
|
23
28
|
comment = current_row[comment_start..-1]
|
24
29
|
|
30
|
+
if comment.include?("--repstring")
|
31
|
+
|
32
|
+
comment,string_id = comment.split("--repstring")
|
33
|
+
|
34
|
+
comment = comment + current_row_strings[string_id.to_i]
|
35
|
+
|
36
|
+
end
|
37
|
+
|
25
38
|
single_line_comments << comment
|
26
39
|
|
40
|
+
current_row_matches = current_row.scan(/--repstring\d+/).to_a
|
41
|
+
|
42
|
+
current_row_matches.each_with_index do |element,index|
|
43
|
+
|
44
|
+
junk,string_id = element.split("--repstring")
|
45
|
+
|
46
|
+
current_row = current_row.gsub("--repstring#{string_id}",current_row_strings[index])
|
47
|
+
|
48
|
+
end
|
49
|
+
|
27
50
|
current_row = current_row.gsub(comment, "--single_line_comment[#{singleline_comment_counter}]\n\n")
|
28
51
|
|
29
52
|
singleline_comment_counter += 1
|
@@ -29,11 +29,11 @@ def replace_strings(input_string)
|
|
29
29
|
|
30
30
|
while input_string.include?("\"")
|
31
31
|
|
32
|
-
|
32
|
+
string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
|
33
33
|
|
34
|
-
|
34
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
35
35
|
|
36
|
-
|
36
|
+
string_counter += 1
|
37
37
|
|
38
38
|
end
|
39
39
|
|
data/lib/nilac/rollblocks.rb
CHANGED
@@ -18,6 +18,8 @@ def extract_blocks(statement_indexes, input_file_contents,options = [])
|
|
18
18
|
|
19
19
|
controlregexp = /(if |while |def | do |class )/ if options.length.eql?(2)
|
20
20
|
|
21
|
+
controlregexp = /(if |Euuf |while |for |def | do )/ if options.length.eql?(4)
|
22
|
+
|
21
23
|
controlregexp = /(Euuf |while |for | do |function )/ if options.length.eql?(5)
|
22
24
|
|
23
25
|
endexpr = "end" if options.empty?
|
@@ -26,6 +28,8 @@ def extract_blocks(statement_indexes, input_file_contents,options = [])
|
|
26
28
|
|
27
29
|
endexpr = "end" if options.length.eql?(2)
|
28
30
|
|
31
|
+
endexpr = "end" if options.length.eql?(4)
|
32
|
+
|
29
33
|
endexpr = "}" if options.length.eql?(5)
|
30
34
|
|
31
35
|
for x in 0...statement_indexes.length-1
|
@@ -54,7 +58,7 @@ def extract_blocks(statement_indexes, input_file_contents,options = [])
|
|
54
58
|
|
55
59
|
current_block.each_with_index do |line, index|
|
56
60
|
|
57
|
-
if line.strip.eql? endexpr
|
61
|
+
if replace_strings(line).strip.eql? endexpr
|
58
62
|
|
59
63
|
end_counter += 1
|
60
64
|
|
@@ -74,7 +78,7 @@ def extract_blocks(statement_indexes, input_file_contents,options = [])
|
|
74
78
|
|
75
79
|
array_extract.each_with_index do |line|
|
76
80
|
|
77
|
-
break if (line.lstrip.index(controlregexp) != nil)
|
81
|
+
break if (replace_strings(line).lstrip.index(controlregexp) != nil)
|
78
82
|
|
79
83
|
index_counter += 1
|
80
84
|
|
@@ -98,7 +102,7 @@ def extract_blocks(statement_indexes, input_file_contents,options = [])
|
|
98
102
|
|
99
103
|
current_block.each_with_index do |line, index|
|
100
104
|
|
101
|
-
if line.strip.eql? endexpr
|
105
|
+
if replace_strings(line).strip.eql? endexpr
|
102
106
|
|
103
107
|
end_counter += 1
|
104
108
|
|
@@ -1,26 +1,12 @@
|
|
1
|
+
require_relative 'replace_strings'
|
2
|
+
|
1
3
|
def split_semicolon_seperated_expressions(input_file_contents)
|
2
4
|
|
3
5
|
modified_file_contents = input_file_contents.dup
|
4
6
|
|
5
7
|
input_file_contents.each_with_index do |line, index|
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
first_index = line.index("\"")
|
10
|
-
|
11
|
-
modified_line = line.sub(line[first_index..line.index("\"", first_index+1)], "--string")
|
12
|
-
|
13
|
-
elsif line.include?("'")
|
14
|
-
|
15
|
-
first_index = line.index("'")
|
16
|
-
|
17
|
-
modified_line = line.sub(line[first_index..line.index("'", first_index+1)], "--string")
|
18
|
-
|
19
|
-
else
|
20
|
-
|
21
|
-
modified_line = line
|
22
|
-
|
23
|
-
end
|
9
|
+
modified_line = replace_strings(line)
|
24
10
|
|
25
11
|
if modified_line.include?(";")
|
26
12
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
def compact_square_brackets(input_string)
|
2
|
+
|
3
|
+
string_extract = input_string.reverse
|
4
|
+
|
5
|
+
paranthesis_extract = [""]
|
6
|
+
|
7
|
+
two_paranthesis = ""
|
8
|
+
|
9
|
+
open_paran_index = nil
|
10
|
+
|
11
|
+
offset_value = nil
|
12
|
+
|
13
|
+
while string_extract.include?("[")
|
14
|
+
|
15
|
+
open_paran_index = string_extract.index("[")
|
16
|
+
|
17
|
+
test_extract = string_extract[0..open_paran_index].reverse
|
18
|
+
|
19
|
+
two_paranthesis = test_extract[0..test_extract.index("]")]
|
20
|
+
|
21
|
+
previous_value = paranthesis_extract[-1]
|
22
|
+
|
23
|
+
if previous_value.length > two_paranthesis.length-(two_paranthesis.count("$@"))/2
|
24
|
+
|
25
|
+
offset_value = previous_value
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
paranthesis_extract << two_paranthesis.sub("$@"*previous_value.length,previous_value)
|
30
|
+
|
31
|
+
string_extract = string_extract.sub(two_paranthesis.reverse,"@$"*paranthesis_extract[-1].length)
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
return string_extract.reverse
|
36
|
+
|
37
|
+
end
|
data/lib/nilac/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature bring Ruby's Different Array features to Nila
|
2
|
+
Scenario: Input file with multiple Ruby style arrays
|
3
|
+
Given the input file "arrays.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "arrays.js"
|
6
|
+
The output file must equal "correct_arrays.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => lib/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --test --compile $file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature bring Ruby's builtin class's new method to Javascript
|
2
|
+
Scenario: Input file with multiple built class intialization by calling new method
|
3
|
+
Given the input file "builtin_new.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "builtin_new.js"
|
6
|
+
The output file must equal "correct_builtin_new.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => lib/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --test --compile $file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature bring Ruby's style comments to Nila
|
2
|
+
Scenario: Input file with multiple versions of comments
|
3
|
+
Given the input file "comments.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "comments.js"
|
6
|
+
The output file must equal "correct_comments.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => lib/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --test --compile $file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature brings various Ruby variable declaration features to Nila
|
2
|
+
Scenario: Input file with different variable declarations
|
3
|
+
Given the input file "variables.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "variables.js"
|
6
|
+
The output file must equal "correct_variables.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => lib/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --test --compile $file
|
@@ -2,8 +2,12 @@ numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
|
2
2
|
|
3
3
|
start = numbers[0..2]
|
4
4
|
|
5
|
+
start = numbers[0 to 2]
|
6
|
+
|
5
7
|
middle = numbers[3...6]
|
6
8
|
|
9
|
+
middle = numbers[3 until 6]
|
10
|
+
|
7
11
|
last = numbers[6..last]
|
8
12
|
|
9
13
|
copy = numbers.dup
|
@@ -18,4 +22,4 @@ second_name = name[9..last]
|
|
18
22
|
|
19
23
|
name_copy = name.dup
|
20
24
|
|
21
|
-
name_copy = name[..]
|
25
|
+
name_copy = name[..]
|
@@ -15,4 +15,14 @@ end
|
|
15
15
|
|
16
16
|
process.argv.forEach do |val,index,array|
|
17
17
|
commandline_args << val
|
18
|
+
end
|
19
|
+
|
20
|
+
read.on 'close', do
|
21
|
+
stream.end()
|
22
|
+
fs.unlink file_name, do |err|
|
23
|
+
puts "REPL Session Successfully concluded!"
|
24
|
+
end
|
25
|
+
puts "\n\nThanks for trying out Nila!\n"
|
26
|
+
puts "You can learn more about Nila at http://adhithyan15.github.io/nila\n"
|
27
|
+
process.exit(0)
|
18
28
|
end
|
data/shark/test_files/case.nila
CHANGED
data/shark/test_files/correct.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
-
(function() {
|
2
|
+
(function () {
|
3
3
|
var read;
|
4
4
|
|
5
5
|
read = rl.on('line',function(line) {
|
@@ -22,4 +22,17 @@
|
|
22
22
|
commandline_args.push(val);
|
23
23
|
});
|
24
24
|
|
25
|
+
read.on('close',function() {
|
26
|
+
stream.end();
|
27
|
+
fs.unlink(file_name,function(err) {
|
28
|
+
if (err) {
|
29
|
+
console.log(err);
|
30
|
+
}
|
31
|
+
console.log("REPL Session Successfully concluded!");
|
32
|
+
});
|
33
|
+
console.log("\n\nThanks for trying out Nila!\n")
|
34
|
+
console.log("You can learn more about Nila at http://adhithyan15.github.io/nila\n");
|
35
|
+
process.exit(0);
|
36
|
+
});
|
37
|
+
|
25
38
|
}).call(this);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
-
(function() {
|
3
|
-
var _i, _j, grade, grades, num;
|
2
|
+
(function () {
|
3
|
+
var _i, _j, grade, grades, input_name, num;
|
4
4
|
|
5
5
|
grades = ["A", "B", "A", "C", "D", "F"];
|
6
6
|
|
@@ -32,4 +32,12 @@
|
|
32
32
|
console.log("Your input was greater than 2");
|
33
33
|
}
|
34
34
|
|
35
|
+
input_name = prompt("What is your name?");
|
36
|
+
|
37
|
+
if (input_name.toLowerCase() === "Jim".toLowerCase()) {
|
38
|
+
alert("Hey Jim!");
|
39
|
+
} else {
|
40
|
+
alert("Hey " + (input_name));
|
41
|
+
}
|
42
|
+
|
35
43
|
}).call(this);
|