nilac 0.0.4.3.9.7.1 → 0.0.4.3.9.8
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.
- 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);
|