nilac 0.0.4.1.4 → 0.0.4.1.5
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/bin/nilac +197 -12
- data/lib/nilac/version.rb +1 -1
- data/shark/features/ruby_operators.feature +11 -0
- data/shark/features/strings.feature +11 -0
- data/shark/test_files/correct_operators.js +11 -0
- data/shark/test_files/correct_string_operators.js +19 -0
- data/shark/test_files/correct_unless_until.js +3 -1
- data/shark/test_files/operators.nila +3 -0
- data/shark/test_files/string_operators.nila +13 -0
- data/shark/test_files/unless_until.nila +1 -1
- data/src/nilac.rb +197 -12
- metadata +8 -2
data/bin/nilac
CHANGED
@@ -696,7 +696,6 @@ def compile(input_file_path,*output_file_name)
|
|
696
696
|
#Currently the following kinds of array constructs are compilable
|
697
697
|
|
698
698
|
# 1. %w{} syntax
|
699
|
-
# 2. Range - Coming soon!
|
700
699
|
|
701
700
|
def compile_w_arrays(input_file_contents)
|
702
701
|
|
@@ -895,6 +894,98 @@ def compile(input_file_path,*output_file_name)
|
|
895
894
|
|
896
895
|
end
|
897
896
|
|
897
|
+
def compile_strings(input_file_contents)
|
898
|
+
|
899
|
+
# This method will compile %q, %Q and %{} syntax. Heredocs support will be added in the future
|
900
|
+
|
901
|
+
def compile_small_q_syntax(input_file_contents)
|
902
|
+
|
903
|
+
possible_syntax_usage = input_file_contents.reject {|element| !element.include?("%q")}
|
904
|
+
|
905
|
+
possible_syntax_usage.each do |line|
|
906
|
+
|
907
|
+
modified_line = line.dup
|
908
|
+
|
909
|
+
line_split = line.split("+").collect {|element| element.lstrip.rstrip}
|
910
|
+
|
911
|
+
line_split.each do |str|
|
912
|
+
|
913
|
+
delimiter = str[str.index("%q")+2]
|
914
|
+
|
915
|
+
string_extract = str[str.index("%q")..-1]
|
916
|
+
|
917
|
+
delimiter = "}" if delimiter.eql?("{")
|
918
|
+
|
919
|
+
if string_extract[-1].eql?(delimiter)
|
920
|
+
|
921
|
+
input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"'#{string_extract[3...-1]}'")
|
922
|
+
|
923
|
+
modified_line = modified_line.sub(string_extract,"'#{string_extract[3...-1]}'")
|
924
|
+
|
925
|
+
elsif delimiter.eql?(" ")
|
926
|
+
|
927
|
+
input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"'#{string_extract[3..-1]}'")
|
928
|
+
|
929
|
+
modified_line = modified_line.sub(string_extract,"'#{string_extract[3..-1]}'")
|
930
|
+
|
931
|
+
end
|
932
|
+
|
933
|
+
end
|
934
|
+
|
935
|
+
end
|
936
|
+
|
937
|
+
return input_file_contents
|
938
|
+
|
939
|
+
end
|
940
|
+
|
941
|
+
def compile_big_q_syntax(input_file_contents)
|
942
|
+
|
943
|
+
possible_syntax_usage = input_file_contents.reject {|element| !element.include?("%Q")}
|
944
|
+
|
945
|
+
possible_syntax_usage.each do |line|
|
946
|
+
|
947
|
+
modified_line = line.dup
|
948
|
+
|
949
|
+
line_split = line.split("+").collect {|element| element.lstrip.rstrip}
|
950
|
+
|
951
|
+
line_split.each do |str|
|
952
|
+
|
953
|
+
delimiter = str[str.index("%Q")+2]
|
954
|
+
|
955
|
+
string_extract = str[str.index("%Q")..-1]
|
956
|
+
|
957
|
+
delimiter = "}" if delimiter.eql?("{")
|
958
|
+
|
959
|
+
if string_extract[-1].eql?(delimiter)
|
960
|
+
|
961
|
+
input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"\"#{string_extract[3...-1]}\"")
|
962
|
+
|
963
|
+
modified_line = modified_line.sub(string_extract,"\"#{string_extract[3...-1]}\"")
|
964
|
+
|
965
|
+
elsif delimiter.eql?(" ")
|
966
|
+
|
967
|
+
input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"\"#{string_extract[3..-1]}\"")
|
968
|
+
|
969
|
+
modified_line = modified_line.sub(string_extract,"\"#{string_extract[3..-1]}\"")
|
970
|
+
|
971
|
+
end
|
972
|
+
|
973
|
+
end
|
974
|
+
|
975
|
+
end
|
976
|
+
|
977
|
+
return input_file_contents
|
978
|
+
|
979
|
+
end
|
980
|
+
|
981
|
+
file_contents = compile_small_q_syntax(input_file_contents)
|
982
|
+
|
983
|
+
file_contents = compile_big_q_syntax(input_file_contents)
|
984
|
+
|
985
|
+
return file_contents
|
986
|
+
|
987
|
+
end
|
988
|
+
|
898
989
|
def compile_named_functions(input_file_contents,named_code_blocks,nested_functions,temporary_nila_file)
|
899
990
|
|
900
991
|
#This method compiles all the named Nila functions. Below is an example of what is meant
|
@@ -1324,8 +1415,6 @@ def compile(input_file_path,*output_file_name)
|
|
1324
1415
|
"p" => "console.log",
|
1325
1416
|
|
1326
1417
|
"print" => "process.stdout.write"
|
1327
|
-
|
1328
|
-
|
1329
1418
|
}
|
1330
1419
|
|
1331
1420
|
function_map = function_map_replacements.keys
|
@@ -1936,12 +2025,12 @@ def compile(input_file_path,*output_file_name)
|
|
1936
2025
|
|
1937
2026
|
def compile_while_syntax(input_block)
|
1938
2027
|
|
2028
|
+
modified_input_block = input_block.dup
|
2029
|
+
|
1939
2030
|
strings = []
|
1940
2031
|
|
1941
2032
|
string_counter = 0
|
1942
2033
|
|
1943
|
-
modified_input_block = input_block.dup
|
1944
|
-
|
1945
2034
|
input_block.each_with_index do |line,index|
|
1946
2035
|
|
1947
2036
|
if line.include?("\"")
|
@@ -2056,7 +2145,7 @@ def compile(input_file_path,*output_file_name)
|
|
2056
2145
|
|
2057
2146
|
else
|
2058
2147
|
|
2059
|
-
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0])
|
2148
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0].join)
|
2060
2149
|
|
2061
2150
|
rejected_elements_index.delete_at(0)
|
2062
2151
|
|
@@ -2066,7 +2155,7 @@ def compile(input_file_path,*output_file_name)
|
|
2066
2155
|
|
2067
2156
|
else
|
2068
2157
|
|
2069
|
-
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0])
|
2158
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0].join)
|
2070
2159
|
|
2071
2160
|
rejected_elements_index.delete_at(0)
|
2072
2161
|
|
@@ -2094,12 +2183,84 @@ def compile(input_file_path,*output_file_name)
|
|
2094
2183
|
|
2095
2184
|
end
|
2096
2185
|
|
2097
|
-
|
2186
|
+
def ignore_statement_modifiers(input_block)
|
2187
|
+
|
2188
|
+
modified_input_block = input_block.dup
|
2189
|
+
|
2190
|
+
rejectionregexp = /( if | while )/
|
2191
|
+
|
2192
|
+
rejected_lines = {}
|
2193
|
+
|
2194
|
+
rejected_line_counter = 0
|
2195
|
+
|
2196
|
+
input_block.each_with_index do |line,index|
|
2197
|
+
|
2198
|
+
if line.lstrip.index(rejectionregexp) != nil
|
2199
|
+
|
2200
|
+
rejected_lines["--rejected{#{rejected_line_counter}}\n\n"] = line
|
2201
|
+
|
2202
|
+
modified_input_block[index] = "--rejected{#{rejected_line_counter}}\n\n"
|
2203
|
+
|
2204
|
+
rejected_line_counter += 1
|
2205
|
+
|
2206
|
+
end
|
2207
|
+
|
2208
|
+
end
|
2209
|
+
|
2210
|
+
return modified_input_block,rejected_lines
|
2211
|
+
|
2212
|
+
end
|
2213
|
+
|
2214
|
+
def replace_statement_modifiers(input_block,rejected_lines)
|
2215
|
+
|
2216
|
+
unless rejected_lines.empty?
|
2217
|
+
|
2218
|
+
rejected_replacements = rejected_lines.keys
|
2219
|
+
|
2220
|
+
loc = 0
|
2221
|
+
|
2222
|
+
indices = []
|
2223
|
+
|
2224
|
+
index_counter = 0
|
2225
|
+
|
2226
|
+
rejected_replacements.each do |replacement_string|
|
2227
|
+
|
2228
|
+
input_block.each_with_index do |line,index|
|
2229
|
+
|
2230
|
+
break if line.include?(replacement_string.rstrip)
|
2231
|
+
|
2232
|
+
index_counter += 1
|
2233
|
+
|
2234
|
+
end
|
2235
|
+
|
2236
|
+
indices << index_counter
|
2237
|
+
|
2238
|
+
index_counter = 0
|
2239
|
+
|
2240
|
+
end
|
2241
|
+
|
2242
|
+
indices.each_with_index do |location,index|
|
2243
|
+
|
2244
|
+
input_block[location] = rejected_lines.values[index] + "\n\n"
|
2245
|
+
|
2246
|
+
end
|
2247
|
+
|
2248
|
+
end
|
2249
|
+
|
2250
|
+
return input_block
|
2251
|
+
|
2252
|
+
end
|
2253
|
+
|
2254
|
+
file_contents,rejected_lines = ignore_statement_modifiers(input_file_contents)
|
2255
|
+
|
2256
|
+
file_contents = replace_unless_until(file_contents)
|
2098
2257
|
|
2099
2258
|
file_contents = compile_regular_if(file_contents,temporary_nila_file)
|
2100
2259
|
|
2101
2260
|
file_contents = compile_regular_while(file_contents,temporary_nila_file)
|
2102
2261
|
|
2262
|
+
file_contents = replace_statement_modifiers(file_contents,rejected_lines)
|
2263
|
+
|
2103
2264
|
file_contents = compile_inline_conditionals(file_contents,temporary_nila_file)
|
2104
2265
|
|
2105
2266
|
return file_contents
|
@@ -2258,7 +2419,7 @@ def compile(input_file_path,*output_file_name)
|
|
2258
2419
|
|
2259
2420
|
end
|
2260
2421
|
|
2261
|
-
def pretty_print_javascript(javascript_file_contents,temporary_nila_file
|
2422
|
+
def pretty_print_javascript(javascript_file_contents,temporary_nila_file)
|
2262
2423
|
|
2263
2424
|
def reset_tabs(input_file_contents)
|
2264
2425
|
|
@@ -2699,6 +2860,26 @@ def compile(input_file_path,*output_file_name)
|
|
2699
2860
|
|
2700
2861
|
def compile_operators(input_file_contents)
|
2701
2862
|
|
2863
|
+
def compile_power_operator(input_string)
|
2864
|
+
|
2865
|
+
matches = input_string.scan(/(\w{1,}\*\*\w{1,})/).to_a.flatten
|
2866
|
+
|
2867
|
+
unless matches.empty?
|
2868
|
+
|
2869
|
+
matches.each do |match|
|
2870
|
+
|
2871
|
+
left,right = match.split("**")
|
2872
|
+
|
2873
|
+
input_string = input_string.sub(match,"Math.pow(#{left},#{right})")
|
2874
|
+
|
2875
|
+
end
|
2876
|
+
|
2877
|
+
end
|
2878
|
+
|
2879
|
+
return input_string
|
2880
|
+
|
2881
|
+
end
|
2882
|
+
|
2702
2883
|
input_file_contents = input_file_contents.collect {|element| element.sub(" and "," && ")}
|
2703
2884
|
|
2704
2885
|
input_file_contents = input_file_contents.collect {|element| element.sub(" or "," || ")}
|
@@ -2709,13 +2890,15 @@ def compile(input_file_path,*output_file_name)
|
|
2709
2890
|
|
2710
2891
|
input_file_contents = input_file_contents.collect {|element| element.sub("elsuf","else if")}
|
2711
2892
|
|
2893
|
+
input_file_contents = input_file_contents.collect {|element| compile_power_operator(element)}
|
2894
|
+
|
2712
2895
|
return input_file_contents
|
2713
2896
|
|
2714
2897
|
end
|
2715
2898
|
|
2716
|
-
def pretty_print_nila(input_file_contents)
|
2899
|
+
def pretty_print_nila(input_file_contents,temporary_nila_file)
|
2900
|
+
|
2717
2901
|
|
2718
|
-
#Implementation is pending
|
2719
2902
|
|
2720
2903
|
end
|
2721
2904
|
|
@@ -2751,6 +2934,8 @@ def compile(input_file_path,*output_file_name)
|
|
2751
2934
|
|
2752
2935
|
file_contents = compile_arrays(file_contents)
|
2753
2936
|
|
2937
|
+
file_contents = compile_strings(file_contents)
|
2938
|
+
|
2754
2939
|
file_contents = compile_default_values(file_contents,temp_file)
|
2755
2940
|
|
2756
2941
|
file_contents,named_functions,nested_functions = replace_named_functions(file_contents,temp_file)
|
@@ -2775,7 +2960,7 @@ def compile(input_file_path,*output_file_name)
|
|
2775
2960
|
|
2776
2961
|
file_contents = compile_comments(file_contents,comments,temp_file)
|
2777
2962
|
|
2778
|
-
file_contents = pretty_print_javascript(file_contents,temp_file
|
2963
|
+
file_contents = pretty_print_javascript(file_contents,temp_file)
|
2779
2964
|
|
2780
2965
|
file_contents = compile_operators(file_contents)
|
2781
2966
|
|
data/lib/nilac/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature bring Ruby style operators to Nila
|
2
|
+
Scenario: Input file with different operators
|
3
|
+
Given the input file "operators.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "operators.js"
|
6
|
+
The output file must equal "correct_operators.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => src/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --compile $file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature bring Ruby's string features to Nila
|
2
|
+
Scenario: Input file with different operators
|
3
|
+
Given the input file "string_operators.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "string_operators.js"
|
6
|
+
The output file must equal "correct_string_operators.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => src/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --compile $file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
+
(function() {
|
3
|
+
var str;
|
4
|
+
|
5
|
+
// This file demonstrates different ways to declare a string
|
6
|
+
|
7
|
+
str = 'this is a wonderful string';
|
8
|
+
|
9
|
+
str = 'this is a wonderful string';
|
10
|
+
|
11
|
+
str = 'this is a wonderful string' + 'this is another wonderful string';
|
12
|
+
|
13
|
+
str = "this is a wonderful string";
|
14
|
+
|
15
|
+
str = "this is a wonderful string";
|
16
|
+
|
17
|
+
str = "this is a wonderful string" + "this is another wonderful string";
|
18
|
+
|
19
|
+
}).call(this);
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# This file demonstrates different ways to declare a string
|
2
|
+
|
3
|
+
str = %q{this is a wonderful string}
|
4
|
+
|
5
|
+
str = %q!this is a wonderful string!
|
6
|
+
|
7
|
+
str = %q this is a wonderful string + %q this is another wonderful string
|
8
|
+
|
9
|
+
str = %Q{this is a wonderful string}
|
10
|
+
|
11
|
+
str = %Q!this is a wonderful string!
|
12
|
+
|
13
|
+
str = %Q this is a wonderful string + %Q this is another wonderful string
|
data/src/nilac.rb
CHANGED
@@ -694,7 +694,6 @@ def compile(input_file_path,*output_file_name)
|
|
694
694
|
#Currently the following kinds of array constructs are compilable
|
695
695
|
|
696
696
|
# 1. %w{} syntax
|
697
|
-
# 2. Range - Coming soon!
|
698
697
|
|
699
698
|
def compile_w_arrays(input_file_contents)
|
700
699
|
|
@@ -893,6 +892,98 @@ def compile(input_file_path,*output_file_name)
|
|
893
892
|
|
894
893
|
end
|
895
894
|
|
895
|
+
def compile_strings(input_file_contents)
|
896
|
+
|
897
|
+
# This method will compile %q, %Q and %{} syntax. Heredocs support will be added in the future
|
898
|
+
|
899
|
+
def compile_small_q_syntax(input_file_contents)
|
900
|
+
|
901
|
+
possible_syntax_usage = input_file_contents.reject {|element| !element.include?("%q")}
|
902
|
+
|
903
|
+
possible_syntax_usage.each do |line|
|
904
|
+
|
905
|
+
modified_line = line.dup
|
906
|
+
|
907
|
+
line_split = line.split("+").collect {|element| element.lstrip.rstrip}
|
908
|
+
|
909
|
+
line_split.each do |str|
|
910
|
+
|
911
|
+
delimiter = str[str.index("%q")+2]
|
912
|
+
|
913
|
+
string_extract = str[str.index("%q")..-1]
|
914
|
+
|
915
|
+
delimiter = "}" if delimiter.eql?("{")
|
916
|
+
|
917
|
+
if string_extract[-1].eql?(delimiter)
|
918
|
+
|
919
|
+
input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"'#{string_extract[3...-1]}'")
|
920
|
+
|
921
|
+
modified_line = modified_line.sub(string_extract,"'#{string_extract[3...-1]}'")
|
922
|
+
|
923
|
+
elsif delimiter.eql?(" ")
|
924
|
+
|
925
|
+
input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"'#{string_extract[3..-1]}'")
|
926
|
+
|
927
|
+
modified_line = modified_line.sub(string_extract,"'#{string_extract[3..-1]}'")
|
928
|
+
|
929
|
+
end
|
930
|
+
|
931
|
+
end
|
932
|
+
|
933
|
+
end
|
934
|
+
|
935
|
+
return input_file_contents
|
936
|
+
|
937
|
+
end
|
938
|
+
|
939
|
+
def compile_big_q_syntax(input_file_contents)
|
940
|
+
|
941
|
+
possible_syntax_usage = input_file_contents.reject {|element| !element.include?("%Q")}
|
942
|
+
|
943
|
+
possible_syntax_usage.each do |line|
|
944
|
+
|
945
|
+
modified_line = line.dup
|
946
|
+
|
947
|
+
line_split = line.split("+").collect {|element| element.lstrip.rstrip}
|
948
|
+
|
949
|
+
line_split.each do |str|
|
950
|
+
|
951
|
+
delimiter = str[str.index("%Q")+2]
|
952
|
+
|
953
|
+
string_extract = str[str.index("%Q")..-1]
|
954
|
+
|
955
|
+
delimiter = "}" if delimiter.eql?("{")
|
956
|
+
|
957
|
+
if string_extract[-1].eql?(delimiter)
|
958
|
+
|
959
|
+
input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"\"#{string_extract[3...-1]}\"")
|
960
|
+
|
961
|
+
modified_line = modified_line.sub(string_extract,"\"#{string_extract[3...-1]}\"")
|
962
|
+
|
963
|
+
elsif delimiter.eql?(" ")
|
964
|
+
|
965
|
+
input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"\"#{string_extract[3..-1]}\"")
|
966
|
+
|
967
|
+
modified_line = modified_line.sub(string_extract,"\"#{string_extract[3..-1]}\"")
|
968
|
+
|
969
|
+
end
|
970
|
+
|
971
|
+
end
|
972
|
+
|
973
|
+
end
|
974
|
+
|
975
|
+
return input_file_contents
|
976
|
+
|
977
|
+
end
|
978
|
+
|
979
|
+
file_contents = compile_small_q_syntax(input_file_contents)
|
980
|
+
|
981
|
+
file_contents = compile_big_q_syntax(input_file_contents)
|
982
|
+
|
983
|
+
return file_contents
|
984
|
+
|
985
|
+
end
|
986
|
+
|
896
987
|
def compile_named_functions(input_file_contents,named_code_blocks,nested_functions,temporary_nila_file)
|
897
988
|
|
898
989
|
#This method compiles all the named Nila functions. Below is an example of what is meant
|
@@ -1322,8 +1413,6 @@ def compile(input_file_path,*output_file_name)
|
|
1322
1413
|
"p" => "console.log",
|
1323
1414
|
|
1324
1415
|
"print" => "process.stdout.write"
|
1325
|
-
|
1326
|
-
|
1327
1416
|
}
|
1328
1417
|
|
1329
1418
|
function_map = function_map_replacements.keys
|
@@ -1934,12 +2023,12 @@ def compile(input_file_path,*output_file_name)
|
|
1934
2023
|
|
1935
2024
|
def compile_while_syntax(input_block)
|
1936
2025
|
|
2026
|
+
modified_input_block = input_block.dup
|
2027
|
+
|
1937
2028
|
strings = []
|
1938
2029
|
|
1939
2030
|
string_counter = 0
|
1940
2031
|
|
1941
|
-
modified_input_block = input_block.dup
|
1942
|
-
|
1943
2032
|
input_block.each_with_index do |line,index|
|
1944
2033
|
|
1945
2034
|
if line.include?("\"")
|
@@ -2054,7 +2143,7 @@ def compile(input_file_path,*output_file_name)
|
|
2054
2143
|
|
2055
2144
|
else
|
2056
2145
|
|
2057
|
-
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0])
|
2146
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0].join)
|
2058
2147
|
|
2059
2148
|
rejected_elements_index.delete_at(0)
|
2060
2149
|
|
@@ -2064,7 +2153,7 @@ def compile(input_file_path,*output_file_name)
|
|
2064
2153
|
|
2065
2154
|
else
|
2066
2155
|
|
2067
|
-
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0])
|
2156
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0].join)
|
2068
2157
|
|
2069
2158
|
rejected_elements_index.delete_at(0)
|
2070
2159
|
|
@@ -2092,12 +2181,84 @@ def compile(input_file_path,*output_file_name)
|
|
2092
2181
|
|
2093
2182
|
end
|
2094
2183
|
|
2095
|
-
|
2184
|
+
def ignore_statement_modifiers(input_block)
|
2185
|
+
|
2186
|
+
modified_input_block = input_block.dup
|
2187
|
+
|
2188
|
+
rejectionregexp = /( if | while )/
|
2189
|
+
|
2190
|
+
rejected_lines = {}
|
2191
|
+
|
2192
|
+
rejected_line_counter = 0
|
2193
|
+
|
2194
|
+
input_block.each_with_index do |line,index|
|
2195
|
+
|
2196
|
+
if line.lstrip.index(rejectionregexp) != nil
|
2197
|
+
|
2198
|
+
rejected_lines["--rejected{#{rejected_line_counter}}\n\n"] = line
|
2199
|
+
|
2200
|
+
modified_input_block[index] = "--rejected{#{rejected_line_counter}}\n\n"
|
2201
|
+
|
2202
|
+
rejected_line_counter += 1
|
2203
|
+
|
2204
|
+
end
|
2205
|
+
|
2206
|
+
end
|
2207
|
+
|
2208
|
+
return modified_input_block,rejected_lines
|
2209
|
+
|
2210
|
+
end
|
2211
|
+
|
2212
|
+
def replace_statement_modifiers(input_block,rejected_lines)
|
2213
|
+
|
2214
|
+
unless rejected_lines.empty?
|
2215
|
+
|
2216
|
+
rejected_replacements = rejected_lines.keys
|
2217
|
+
|
2218
|
+
loc = 0
|
2219
|
+
|
2220
|
+
indices = []
|
2221
|
+
|
2222
|
+
index_counter = 0
|
2223
|
+
|
2224
|
+
rejected_replacements.each do |replacement_string|
|
2225
|
+
|
2226
|
+
input_block.each_with_index do |line,index|
|
2227
|
+
|
2228
|
+
break if line.include?(replacement_string.rstrip)
|
2229
|
+
|
2230
|
+
index_counter += 1
|
2231
|
+
|
2232
|
+
end
|
2233
|
+
|
2234
|
+
indices << index_counter
|
2235
|
+
|
2236
|
+
index_counter = 0
|
2237
|
+
|
2238
|
+
end
|
2239
|
+
|
2240
|
+
indices.each_with_index do |location,index|
|
2241
|
+
|
2242
|
+
input_block[location] = rejected_lines.values[index] + "\n\n"
|
2243
|
+
|
2244
|
+
end
|
2245
|
+
|
2246
|
+
end
|
2247
|
+
|
2248
|
+
return input_block
|
2249
|
+
|
2250
|
+
end
|
2251
|
+
|
2252
|
+
file_contents,rejected_lines = ignore_statement_modifiers(input_file_contents)
|
2253
|
+
|
2254
|
+
file_contents = replace_unless_until(file_contents)
|
2096
2255
|
|
2097
2256
|
file_contents = compile_regular_if(file_contents,temporary_nila_file)
|
2098
2257
|
|
2099
2258
|
file_contents = compile_regular_while(file_contents,temporary_nila_file)
|
2100
2259
|
|
2260
|
+
file_contents = replace_statement_modifiers(file_contents,rejected_lines)
|
2261
|
+
|
2101
2262
|
file_contents = compile_inline_conditionals(file_contents,temporary_nila_file)
|
2102
2263
|
|
2103
2264
|
return file_contents
|
@@ -2256,7 +2417,7 @@ def compile(input_file_path,*output_file_name)
|
|
2256
2417
|
|
2257
2418
|
end
|
2258
2419
|
|
2259
|
-
def pretty_print_javascript(javascript_file_contents,temporary_nila_file
|
2420
|
+
def pretty_print_javascript(javascript_file_contents,temporary_nila_file)
|
2260
2421
|
|
2261
2422
|
def reset_tabs(input_file_contents)
|
2262
2423
|
|
@@ -2697,6 +2858,26 @@ def compile(input_file_path,*output_file_name)
|
|
2697
2858
|
|
2698
2859
|
def compile_operators(input_file_contents)
|
2699
2860
|
|
2861
|
+
def compile_power_operator(input_string)
|
2862
|
+
|
2863
|
+
matches = input_string.scan(/(\w{1,}\*\*\w{1,})/).to_a.flatten
|
2864
|
+
|
2865
|
+
unless matches.empty?
|
2866
|
+
|
2867
|
+
matches.each do |match|
|
2868
|
+
|
2869
|
+
left,right = match.split("**")
|
2870
|
+
|
2871
|
+
input_string = input_string.sub(match,"Math.pow(#{left},#{right})")
|
2872
|
+
|
2873
|
+
end
|
2874
|
+
|
2875
|
+
end
|
2876
|
+
|
2877
|
+
return input_string
|
2878
|
+
|
2879
|
+
end
|
2880
|
+
|
2700
2881
|
input_file_contents = input_file_contents.collect {|element| element.sub(" and "," && ")}
|
2701
2882
|
|
2702
2883
|
input_file_contents = input_file_contents.collect {|element| element.sub(" or "," || ")}
|
@@ -2707,13 +2888,15 @@ def compile(input_file_path,*output_file_name)
|
|
2707
2888
|
|
2708
2889
|
input_file_contents = input_file_contents.collect {|element| element.sub("elsuf","else if")}
|
2709
2890
|
|
2891
|
+
input_file_contents = input_file_contents.collect {|element| compile_power_operator(element)}
|
2892
|
+
|
2710
2893
|
return input_file_contents
|
2711
2894
|
|
2712
2895
|
end
|
2713
2896
|
|
2714
|
-
def pretty_print_nila(input_file_contents)
|
2897
|
+
def pretty_print_nila(input_file_contents,temporary_nila_file)
|
2898
|
+
|
2715
2899
|
|
2716
|
-
#Implementation is pending
|
2717
2900
|
|
2718
2901
|
end
|
2719
2902
|
|
@@ -2749,6 +2932,8 @@ def compile(input_file_path,*output_file_name)
|
|
2749
2932
|
|
2750
2933
|
file_contents = compile_arrays(file_contents)
|
2751
2934
|
|
2935
|
+
file_contents = compile_strings(file_contents)
|
2936
|
+
|
2752
2937
|
file_contents = compile_default_values(file_contents,temp_file)
|
2753
2938
|
|
2754
2939
|
file_contents,named_functions,nested_functions = replace_named_functions(file_contents,temp_file)
|
@@ -2773,7 +2958,7 @@ def compile(input_file_path,*output_file_name)
|
|
2773
2958
|
|
2774
2959
|
file_contents = compile_comments(file_contents,comments,temp_file)
|
2775
2960
|
|
2776
|
-
file_contents = pretty_print_javascript(file_contents,temp_file
|
2961
|
+
file_contents = pretty_print_javascript(file_contents,temp_file)
|
2777
2962
|
|
2778
2963
|
file_contents = compile_operators(file_contents)
|
2779
2964
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nilac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.4.1.
|
4
|
+
version: 0.0.4.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-07-
|
12
|
+
date: 2013-07-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: shark
|
@@ -69,6 +69,8 @@ files:
|
|
69
69
|
- shark/features/multiple_variable_initialization.feature
|
70
70
|
- shark/features/regular_if.feature
|
71
71
|
- shark/features/regular_while.feature
|
72
|
+
- shark/features/ruby_operators.feature
|
73
|
+
- shark/features/strings.feature
|
72
74
|
- shark/features/unless_until.feature
|
73
75
|
- shark/test_files/array_string_indexing.nila
|
74
76
|
- shark/test_files/correct.js
|
@@ -76,21 +78,25 @@ files:
|
|
76
78
|
- shark/test_files/correct_indexing.js
|
77
79
|
- shark/test_files/correct_initialization.js
|
78
80
|
- shark/test_files/correct_multiple_return.js
|
81
|
+
- shark/test_files/correct_operators.js
|
79
82
|
- shark/test_files/correct_regular_if.js
|
80
83
|
- shark/test_files/correct_regular_while.js
|
81
84
|
- shark/test_files/correct_return.js
|
82
85
|
- shark/test_files/correct_single_return.js
|
86
|
+
- shark/test_files/correct_string_operators.js
|
83
87
|
- shark/test_files/correct_unless_until.js
|
84
88
|
- shark/test_files/default_parameters.nila
|
85
89
|
- shark/test_files/erratic.nila
|
86
90
|
- shark/test_files/multiple_initialization.nila
|
87
91
|
- shark/test_files/multiple_return.nila
|
88
92
|
- shark/test_files/no_return.nila
|
93
|
+
- shark/test_files/operators.nila
|
89
94
|
- shark/test_files/perfect.js
|
90
95
|
- shark/test_files/regular_if.nila
|
91
96
|
- shark/test_files/regular_while.nila
|
92
97
|
- shark/test_files/simple.nila
|
93
98
|
- shark/test_files/single_return.nila
|
99
|
+
- shark/test_files/string_operators.nila
|
94
100
|
- shark/test_files/unless_until.nila
|
95
101
|
- src/nilac.rb
|
96
102
|
homepage: http://adhithyan15.github.com/nila
|