nilac 0.0.4.2.6 → 0.0.4.2.8
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/nilac +238 -22
- data/lib/nilac/version.rb +1 -1
- data/shark/features/if_then_else.feature +11 -0
- data/shark/features/numbers.feature +11 -0
- data/shark/features/times.feature +11 -0
- data/shark/test_files/correct_default_parameters.js +7 -5
- data/shark/test_files/correct_hashes.js +3 -1
- data/shark/test_files/correct_if_then_else.js +7 -0
- data/shark/test_files/correct_initialization.js +3 -3
- data/shark/test_files/correct_loop.js +1 -1
- data/shark/test_files/correct_multiple_return.js +5 -5
- data/shark/test_files/correct_numbers.js +9 -0
- data/shark/test_files/correct_operators.js +1 -1
- data/shark/test_files/correct_regular_if.js +1 -1
- data/shark/test_files/correct_return.js +4 -2
- data/shark/test_files/correct_single_return.js +4 -2
- data/shark/test_files/correct_string_interpolation.js +2 -2
- data/shark/test_files/correct_times.js +23 -0
- data/shark/test_files/correct_unless_until.js +1 -1
- data/shark/test_files/correct_whitespace_delimiter.js +6 -4
- data/shark/test_files/hashes.nila +2 -0
- data/shark/test_files/if_then_else.nila +1 -0
- data/shark/test_files/numbers.nila +3 -0
- data/shark/test_files/perfect.js +4 -4
- data/shark/test_files/times.nila +5 -0
- data/src/nilac.rb +238 -22
- metadata +11 -2
data/bin/nilac
CHANGED
@@ -387,19 +387,19 @@ def compile(input_file_path, *output_file_name)
|
|
387
387
|
|
388
388
|
if string_split[1].eql?("\"\n")
|
389
389
|
|
390
|
-
replacement_string = "\" + " + interpol[2...-1]
|
390
|
+
replacement_string = "\" + " + "(#{interpol[2...-1]})"
|
391
391
|
|
392
392
|
modified_file_contents[index] = modified_file_contents[index].sub(interpol+"\"", replacement_string)
|
393
393
|
|
394
394
|
elsif string_split[1].eql?("\")\n")
|
395
395
|
|
396
|
-
replacement_string = "\" + " + interpol[2...-1]
|
396
|
+
replacement_string = "\" + " + "(#{interpol[2...-1]})"
|
397
397
|
|
398
|
-
modified_file_contents[index] = modified_file_contents[index].sub(interpol+"\"", replacement_string)
|
398
|
+
modified_file_contents[index] = modified_file_contents[index].sub(interpol + "\"", replacement_string)
|
399
399
|
|
400
400
|
else
|
401
401
|
|
402
|
-
replacement_string = "\" + " + interpol[2...-1] + " + \""
|
402
|
+
replacement_string = "\"" + " + " + "(#{interpol[2...-1]})" + " + \""
|
403
403
|
|
404
404
|
modified_file_contents[index] = modified_file_contents[index].sub(interpol, replacement_string)
|
405
405
|
|
@@ -686,7 +686,7 @@ def compile(input_file_path, *output_file_name)
|
|
686
686
|
|
687
687
|
replacement_parameters << param.lstrip.rstrip
|
688
688
|
|
689
|
-
replacement_string = replacement_string + "\n" + "if (#{param.lstrip.rstrip}
|
689
|
+
replacement_string = replacement_string + "\n" + "if (#{param.lstrip.rstrip} equequ null) {\n #{paramvalue.lstrip.rstrip}\n}\n" +"\n"
|
690
690
|
|
691
691
|
end
|
692
692
|
|
@@ -734,7 +734,7 @@ def compile(input_file_path, *output_file_name)
|
|
734
734
|
|
735
735
|
end
|
736
736
|
|
737
|
-
def get_variables(input_file_contents, temporary_nila_file)
|
737
|
+
def get_variables(input_file_contents, temporary_nila_file, *loop_variables)
|
738
738
|
|
739
739
|
variables = []
|
740
740
|
|
@@ -754,11 +754,13 @@ def compile(input_file_path, *output_file_name)
|
|
754
754
|
|
755
755
|
input_file_contents = input_file_contents.collect { |element| element.gsub("=~", "matchequal") }
|
756
756
|
|
757
|
+
javascript_regexp = /(if |while |for )/
|
758
|
+
|
757
759
|
for x in 0...input_file_contents.length
|
758
760
|
|
759
761
|
current_row = input_file_contents[x]
|
760
762
|
|
761
|
-
if current_row.include?("=") and
|
763
|
+
if current_row.include?("=") and current_row.index(javascript_regexp) == nil
|
762
764
|
|
763
765
|
current_row = current_row.rstrip + "\n"
|
764
766
|
|
@@ -796,6 +798,10 @@ def compile(input_file_path, *output_file_name)
|
|
796
798
|
|
797
799
|
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
798
800
|
|
801
|
+
variables += loop_variables
|
802
|
+
|
803
|
+
variables = variables.flatten
|
804
|
+
|
799
805
|
if variables.length > 0
|
800
806
|
|
801
807
|
variable_declaration_string = "var " + variables.uniq.sort.join(", ") + "\n\n"
|
@@ -1146,10 +1152,14 @@ def compile(input_file_path, *output_file_name)
|
|
1146
1152
|
|
1147
1153
|
def compile_multiline_hashes(input_file_contents,temporary_nila_file)
|
1148
1154
|
|
1155
|
+
javascript_regexp = /(if |while |for |function |function\()/
|
1156
|
+
|
1149
1157
|
possible_hashes = input_file_contents.reject { |element| !element.include?("{") }
|
1150
1158
|
|
1151
1159
|
possible_multiline_hashes = possible_hashes.reject { |element| element.include?("}") }
|
1152
1160
|
|
1161
|
+
possible_multiline_hashes = possible_multiline_hashes.reject {|element| element.index(javascript_regexp) != nil}
|
1162
|
+
|
1153
1163
|
multiline_hashes = []
|
1154
1164
|
|
1155
1165
|
possible_multiline_hashes.each do |starting_line|
|
@@ -1158,7 +1168,7 @@ def compile(input_file_path, *output_file_name)
|
|
1158
1168
|
|
1159
1169
|
line = starting_line
|
1160
1170
|
|
1161
|
-
until line.include?("}")
|
1171
|
+
until line.include?("}\n")
|
1162
1172
|
|
1163
1173
|
index += 1
|
1164
1174
|
|
@@ -1200,12 +1210,48 @@ def compile(input_file_path, *output_file_name)
|
|
1200
1210
|
|
1201
1211
|
def compile_inline_hashes(input_file_contents)
|
1202
1212
|
|
1203
|
-
|
1213
|
+
def replace_strings(input_string)
|
1214
|
+
|
1215
|
+
string_counter = 0
|
1216
|
+
|
1217
|
+
while input_string.include?("\"")
|
1218
|
+
|
1219
|
+
string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
|
1220
|
+
|
1221
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
1222
|
+
|
1223
|
+
string_counter += 1
|
1224
|
+
|
1225
|
+
end
|
1226
|
+
|
1227
|
+
while input_string.include?("'")
|
1228
|
+
|
1229
|
+
string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
|
1230
|
+
|
1231
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
1232
|
+
|
1233
|
+
string_counter += 1
|
1204
1234
|
|
1205
|
-
|
1235
|
+
end
|
1236
|
+
|
1237
|
+
return input_string
|
1238
|
+
|
1239
|
+
end
|
1240
|
+
|
1241
|
+
javascript_regexp = /(if |while |for |function |function\(|%[qQ]*\{)/
|
1242
|
+
|
1243
|
+
modified_file_contents = input_file_contents.clone.collect {|element| replace_strings(element)}
|
1244
|
+
|
1245
|
+
possible_inline_hashes = modified_file_contents.reject {|element| element.count("{") != 1}
|
1246
|
+
|
1247
|
+
possible_inline_hashes = possible_inline_hashes.reject {|element| element.count("}") != 1}
|
1248
|
+
|
1249
|
+
possible_inline_hashes = possible_inline_hashes.reject {|element| element.index(javascript_regexp) != nil}
|
1206
1250
|
|
1207
1251
|
possible_inline_hashes.each do |hash|
|
1208
1252
|
|
1253
|
+
hash = input_file_contents[modified_file_contents.index(hash)]
|
1254
|
+
|
1209
1255
|
hash_extract = hash[hash.index("{")..hash.index("}")]
|
1210
1256
|
|
1211
1257
|
contents = hash_extract[1...-1].split(",")
|
@@ -1390,6 +1436,30 @@ def compile(input_file_path, *output_file_name)
|
|
1390
1436
|
|
1391
1437
|
end
|
1392
1438
|
|
1439
|
+
def compile_integers(input_file_contents)
|
1440
|
+
|
1441
|
+
modified_file_contents = input_file_contents.clone
|
1442
|
+
|
1443
|
+
input_file_contents.each_with_index do |line,index|
|
1444
|
+
|
1445
|
+
matches = line.scan(/(([0-9]+_)+([0-9]+|$))/)
|
1446
|
+
|
1447
|
+
unless matches.empty?
|
1448
|
+
|
1449
|
+
matches.each do |match_arr|
|
1450
|
+
|
1451
|
+
modified_file_contents[index] = modified_file_contents[index].sub(match_arr[0],match_arr[0].gsub("_",""))
|
1452
|
+
|
1453
|
+
end
|
1454
|
+
|
1455
|
+
end
|
1456
|
+
|
1457
|
+
end
|
1458
|
+
|
1459
|
+
return modified_file_contents
|
1460
|
+
|
1461
|
+
end
|
1462
|
+
|
1393
1463
|
def compile_named_functions(input_file_contents, named_code_blocks, nested_functions, temporary_nila_file)
|
1394
1464
|
|
1395
1465
|
#This method compiles all the named Nila functions. Below is an example of what is meant
|
@@ -1403,11 +1473,11 @@ def compile(input_file_path, *output_file_name)
|
|
1403
1473
|
|
1404
1474
|
#The above function will compile to
|
1405
1475
|
|
1406
|
-
#function
|
1476
|
+
#square = function(input_number) {
|
1407
1477
|
#
|
1408
1478
|
# return input_number*input_number;
|
1409
1479
|
#
|
1410
|
-
#}
|
1480
|
+
#};
|
1411
1481
|
|
1412
1482
|
def is_parameterless?(input_function_block)
|
1413
1483
|
|
@@ -1658,6 +1728,16 @@ def compile(input_file_path, *output_file_name)
|
|
1658
1728
|
|
1659
1729
|
end
|
1660
1730
|
|
1731
|
+
def coffee_type_function(input_array)
|
1732
|
+
|
1733
|
+
function_name = input_array[0].split("function ")[1].split("(")[0].lstrip
|
1734
|
+
|
1735
|
+
input_array[0] = "#{function_name} = function(" + input_array[0].split("function ")[1].split("(")[1].lstrip
|
1736
|
+
|
1737
|
+
return input_array
|
1738
|
+
|
1739
|
+
end
|
1740
|
+
|
1661
1741
|
def compile_function(input_array, temporary_nila_file)
|
1662
1742
|
|
1663
1743
|
modified_input_array = input_array.dup
|
@@ -1718,7 +1798,7 @@ def compile(input_file_path, *output_file_name)
|
|
1718
1798
|
|
1719
1799
|
end
|
1720
1800
|
|
1721
|
-
modified_input_array[-1] = input_array[-1].sub "end", "}
|
1801
|
+
modified_input_array[-1] = input_array[-1].sub "end", "};\n"
|
1722
1802
|
|
1723
1803
|
modified_input_array = compile_parallel_assignment(modified_input_array, temporary_nila_file)
|
1724
1804
|
|
@@ -1738,6 +1818,8 @@ def compile(input_file_path, *output_file_name)
|
|
1738
1818
|
|
1739
1819
|
modified_input_array = compile_multiple_return(modified_input_array)
|
1740
1820
|
|
1821
|
+
modified_input_array = coffee_type_function(modified_input_array)
|
1822
|
+
|
1741
1823
|
return modified_input_array
|
1742
1824
|
|
1743
1825
|
end
|
@@ -1875,7 +1957,13 @@ def compile(input_file_path, *output_file_name)
|
|
1875
1957
|
|
1876
1958
|
extracted_string = input_string[location..-1]
|
1877
1959
|
|
1878
|
-
|
1960
|
+
string_extract = extracted_string[0..extracted_string.index(pattern_end)]
|
1961
|
+
|
1962
|
+
if !string_extract.include?(" = function(")
|
1963
|
+
|
1964
|
+
pattern << string_extract
|
1965
|
+
|
1966
|
+
end
|
1879
1967
|
|
1880
1968
|
end
|
1881
1969
|
|
@@ -2981,6 +3069,110 @@ def compile(input_file_path, *output_file_name)
|
|
2981
3069
|
|
2982
3070
|
end
|
2983
3071
|
|
3072
|
+
def compile_loops(input_file_contents,temporary_nila_file)
|
3073
|
+
|
3074
|
+
def compile_times_loop(input_file_contents,temporary_nila_file)
|
3075
|
+
|
3076
|
+
def compile_one_line_blocks(input_block)
|
3077
|
+
|
3078
|
+
block_parameters, block_contents = input_block[1...-1].split("|",2)[1].split("|",2)
|
3079
|
+
|
3080
|
+
compiled_block = "(function(#{block_parameters.lstrip.rstrip}) {\n\n #{block_contents} \n\n}(_i))_!;\n"
|
3081
|
+
|
3082
|
+
return compiled_block
|
3083
|
+
|
3084
|
+
end
|
3085
|
+
|
3086
|
+
modified_file_contents = input_file_contents.clone
|
3087
|
+
|
3088
|
+
possible_times_loop = input_file_contents.reject{ |element| !element.include?(".times")}
|
3089
|
+
|
3090
|
+
oneliner_times_loop = possible_times_loop.reject {|element| !element.include?("{") and !element.include?("}")}
|
3091
|
+
|
3092
|
+
#multiline_times_loop = possible_times_loop-oneliner_times_loop
|
3093
|
+
|
3094
|
+
#multiline_times_loop = multiline_times_loop.reject {|element| !element.include?(" do ")}
|
3095
|
+
|
3096
|
+
loop_variables = []
|
3097
|
+
|
3098
|
+
unless oneliner_times_loop.empty?
|
3099
|
+
|
3100
|
+
oneliner_times_loop.each do |loop|
|
3101
|
+
|
3102
|
+
original_loop = loop.clone
|
3103
|
+
|
3104
|
+
string_counter = 1
|
3105
|
+
|
3106
|
+
extracted_string = []
|
3107
|
+
|
3108
|
+
while loop.include?("\"")
|
3109
|
+
|
3110
|
+
string_extract = loop[loop.index("\"")..loop.index("\"",loop.index("\"")+1)]
|
3111
|
+
|
3112
|
+
extracted_string << string_extract
|
3113
|
+
|
3114
|
+
loop = loop.sub(string_extract,"--repstring#{string_counter}")
|
3115
|
+
|
3116
|
+
string_counter += 1
|
3117
|
+
|
3118
|
+
end
|
3119
|
+
|
3120
|
+
block_extract = loop[loop.index("{")..loop.index("}")]
|
3121
|
+
|
3122
|
+
compiled_block = ""
|
3123
|
+
|
3124
|
+
if block_extract.count("|") == 2
|
3125
|
+
|
3126
|
+
compiled_block = compile_one_line_blocks(block_extract)
|
3127
|
+
|
3128
|
+
extracted_string.each_with_index do |string,index|
|
3129
|
+
|
3130
|
+
compiled_block = compiled_block.sub("--repstring#{index+1}",string)
|
3131
|
+
|
3132
|
+
end
|
3133
|
+
|
3134
|
+
else
|
3135
|
+
|
3136
|
+
compiled_block = block_extract[1...-1].lstrip.rstrip
|
3137
|
+
|
3138
|
+
extracted_string.each_with_index do |string,index|
|
3139
|
+
|
3140
|
+
compiled_block = compiled_block.sub("--repstring#{index+1}",string)
|
3141
|
+
|
3142
|
+
end
|
3143
|
+
|
3144
|
+
end
|
3145
|
+
|
3146
|
+
times_counter = loop.split(".times")[0].lstrip
|
3147
|
+
|
3148
|
+
replacement_string = "for (_i = 0, _j = #{times_counter}; _i < _j; _i += 1) {\n\n#{compiled_block}\n\n}"
|
3149
|
+
|
3150
|
+
modified_file_contents[input_file_contents.index(original_loop)] = replacement_string
|
3151
|
+
|
3152
|
+
end
|
3153
|
+
|
3154
|
+
loop_variables = ["_i","_j"]
|
3155
|
+
|
3156
|
+
end
|
3157
|
+
|
3158
|
+
file_id = open(temporary_nila_file, 'w')
|
3159
|
+
|
3160
|
+
file_id.write(modified_file_contents.join)
|
3161
|
+
|
3162
|
+
file_id.close()
|
3163
|
+
|
3164
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
3165
|
+
|
3166
|
+
return line_by_line_contents,loop_variables
|
3167
|
+
|
3168
|
+
end
|
3169
|
+
|
3170
|
+
file_contents,loop_variables = compile_times_loop(input_file_contents,temporary_nila_file)
|
3171
|
+
|
3172
|
+
return file_contents,loop_variables
|
3173
|
+
|
3174
|
+
end
|
3175
|
+
|
2984
3176
|
def add_semicolons(input_file_contents)
|
2985
3177
|
|
2986
3178
|
def comment(input_string)
|
@@ -3282,7 +3474,7 @@ def compile(input_file_path, *output_file_name)
|
|
3282
3474
|
|
3283
3475
|
if !code_block_starting_locations.empty?
|
3284
3476
|
|
3285
|
-
controlregexp = /(if |while
|
3477
|
+
controlregexp = /(if |for |while |\(function\(|= function\(|((=|:)\s+\{))/
|
3286
3478
|
|
3287
3479
|
code_block_starting_locations = [0, code_block_starting_locations, -1].flatten
|
3288
3480
|
|
@@ -3296,6 +3488,12 @@ def compile(input_file_path, *output_file_name)
|
|
3296
3488
|
|
3297
3489
|
possible_blocks << input_file_contents[code_block_starting_locations[x]..code_block_starting_locations[x+1]]
|
3298
3490
|
|
3491
|
+
if possible_blocks.length > 1
|
3492
|
+
|
3493
|
+
possible_blocks[-1] = possible_blocks[-1][1..-1]
|
3494
|
+
|
3495
|
+
end
|
3496
|
+
|
3299
3497
|
end
|
3300
3498
|
|
3301
3499
|
end_counter = 0
|
@@ -3306,11 +3504,19 @@ def compile(input_file_path, *output_file_name)
|
|
3306
3504
|
|
3307
3505
|
possible_blocks.each_with_index do |block|
|
3308
3506
|
|
3309
|
-
|
3507
|
+
if !block[0].eql?(current_block[-1])
|
3508
|
+
|
3509
|
+
current_block += block
|
3510
|
+
|
3511
|
+
else
|
3512
|
+
|
3513
|
+
current_block += block[1..-1]
|
3514
|
+
|
3515
|
+
end
|
3310
3516
|
|
3311
3517
|
current_block.each_with_index do |line, index|
|
3312
3518
|
|
3313
|
-
if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n")
|
3519
|
+
if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n")
|
3314
3520
|
|
3315
3521
|
end_counter += 1
|
3316
3522
|
|
@@ -3354,7 +3560,7 @@ def compile(input_file_path, *output_file_name)
|
|
3354
3560
|
|
3355
3561
|
current_block.each_with_index do |line, index|
|
3356
3562
|
|
3357
|
-
if line.lstrip.eql? "}\n"
|
3563
|
+
if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n")
|
3358
3564
|
|
3359
3565
|
end_counter += 1
|
3360
3566
|
|
@@ -3412,7 +3618,7 @@ def compile(input_file_path, *output_file_name)
|
|
3412
3618
|
|
3413
3619
|
end
|
3414
3620
|
|
3415
|
-
javascript_regexp = /(if |while
|
3621
|
+
javascript_regexp = /(if |for |while |\(function\(|= function\(|((=|:)\s+\{))/
|
3416
3622
|
|
3417
3623
|
javascript_file_contents = javascript_file_contents.collect { |element| element.sub("Euuf", "if") }
|
3418
3624
|
|
@@ -3626,12 +3832,16 @@ def compile(input_file_path, *output_file_name)
|
|
3626
3832
|
|
3627
3833
|
input_file_contents = input_file_contents.collect { |element| element.sub("!=", "!==") }
|
3628
3834
|
|
3835
|
+
input_file_contents = input_file_contents.collect { |element| element.sub("equequ", "==") }
|
3836
|
+
|
3629
3837
|
input_file_contents = input_file_contents.collect { |element| element.sub("elsuf", "else if") }
|
3630
3838
|
|
3631
3839
|
input_file_contents = input_file_contents.collect { |element| compile_power_operator(element) }
|
3632
3840
|
|
3633
3841
|
input_file_contents = input_file_contents.collect {|element| compile_match_operator(element)}
|
3634
3842
|
|
3843
|
+
input_file_contents = input_file_contents.collect {|element| element.gsub("_!;",";")}
|
3844
|
+
|
3635
3845
|
return input_file_contents
|
3636
3846
|
|
3637
3847
|
end
|
@@ -3669,6 +3879,8 @@ def compile(input_file_path, *output_file_name)
|
|
3669
3879
|
|
3670
3880
|
file_contents = compile_heredocs(file_contents, temp_file)
|
3671
3881
|
|
3882
|
+
file_contents,loop_vars = compile_loops(file_contents,temp_file)
|
3883
|
+
|
3672
3884
|
file_contents = compile_interpolated_strings(file_contents)
|
3673
3885
|
|
3674
3886
|
file_contents = compile_hashes(file_contents,temp_file)
|
@@ -3679,6 +3891,8 @@ def compile(input_file_path, *output_file_name)
|
|
3679
3891
|
|
3680
3892
|
file_contents = compile_strings(file_contents)
|
3681
3893
|
|
3894
|
+
file_contents = compile_integers(file_contents)
|
3895
|
+
|
3682
3896
|
file_contents = compile_default_values(file_contents, temp_file)
|
3683
3897
|
|
3684
3898
|
file_contents, named_functions, nested_functions = replace_named_functions(file_contents, temp_file)
|
@@ -3687,14 +3901,16 @@ def compile(input_file_path, *output_file_name)
|
|
3687
3901
|
|
3688
3902
|
file_contents = compile_parallel_assignment(file_contents, temp_file)
|
3689
3903
|
|
3690
|
-
list_of_variables, file_contents = get_variables(file_contents, temp_file)
|
3691
|
-
|
3692
3904
|
file_contents, function_names = compile_named_functions(file_contents, named_functions, nested_functions, temp_file)
|
3693
3905
|
|
3906
|
+
list_of_variables, file_contents = get_variables(file_contents, temp_file,loop_vars)
|
3907
|
+
|
3694
3908
|
file_contents, ruby_functions = compile_custom_function_map(file_contents)
|
3695
3909
|
|
3696
3910
|
function_names << ruby_functions
|
3697
3911
|
|
3912
|
+
list_of_variables += loop_vars
|
3913
|
+
|
3698
3914
|
file_contents = compile_whitespace_delimited_functions(file_contents, function_names, temp_file)
|
3699
3915
|
|
3700
3916
|
file_contents = remove_question_marks(file_contents, list_of_variables, temp_file)
|
@@ -3773,7 +3989,7 @@ def find_file_path(input_path, file_extension)
|
|
3773
3989
|
|
3774
3990
|
end
|
3775
3991
|
|
3776
|
-
nilac_version = "0.0.4.2.
|
3992
|
+
nilac_version = "0.0.4.2.8"
|
3777
3993
|
|
3778
3994
|
opts = Slop.parse do
|
3779
3995
|
on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"
|
data/lib/nilac/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature brings single line if-then-else statement to Nila
|
2
|
+
Scenario: Input file with single line if-then-else statement.
|
3
|
+
Given the input file "if_then_else.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "if_then_else.js"
|
6
|
+
The output file must equal "correct_if_then_else.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 brings Ruby's number features to Nila
|
2
|
+
Scenario: Input file with Ruby's number features.
|
3
|
+
Given the input file "numbers.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "numbers.js"
|
6
|
+
The output file must equal "correct_numbers.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 brings Ruby's .times method to Nila
|
2
|
+
Scenario: Input file with Ruby's .times method
|
3
|
+
Given the input file "times.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "times.js"
|
6
|
+
The output file must equal "correct_times.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => src/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --compile $file
|
@@ -1,16 +1,18 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
2
|
(function() {
|
3
|
+
var container, fill, liquid;
|
4
|
+
|
3
5
|
// This is a demo of default parameters
|
4
6
|
|
5
|
-
function
|
6
|
-
if (container
|
7
|
+
fill = function(container,liquid) {
|
8
|
+
if (container == null) {
|
7
9
|
container = "cup";
|
8
10
|
}
|
9
|
-
if (liquid
|
11
|
+
if (liquid == null) {
|
10
12
|
liquid = "coffee";
|
11
13
|
}
|
12
|
-
return console.log("Filling " + container + " with " + liquid);
|
13
|
-
}
|
14
|
+
return console.log("Filling " + (container) + " with " + (liquid));
|
15
|
+
};
|
14
16
|
|
15
17
|
fill();
|
16
18
|
|
@@ -1,9 +1,11 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
2
|
(function() {
|
3
|
-
var inst_section, student_ages;
|
3
|
+
var inst_section, student_ages, variable;
|
4
4
|
|
5
5
|
// This file demonstrates several Hash features in Nila
|
6
6
|
|
7
|
+
variable = 5;
|
8
|
+
|
7
9
|
inst_section = {
|
8
10
|
cello: 'string',
|
9
11
|
clarinet: 'woodwind',
|
@@ -1,14 +1,14 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
2
|
(function() {
|
3
|
-
var _ref1, first_name, last_name;
|
3
|
+
var _ref1, first_name, last_name, name_split, parse_name;
|
4
4
|
|
5
5
|
// This file demonstrates multiple variable initialization
|
6
6
|
|
7
|
-
function
|
7
|
+
parse_name = function(input_name) {
|
8
8
|
var name_split;
|
9
9
|
name_split = input_name.split(" ");
|
10
10
|
return [name_split[0],name_split[1]];
|
11
|
-
}
|
11
|
+
};
|
12
12
|
|
13
13
|
_ref1 = parse_name("Adhithya Rajasekaran");
|
14
14
|
|
@@ -1,20 +1,20 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
2
|
(function() {
|
3
|
-
var parsed_name;
|
3
|
+
var _ref1, first_name, last_name, parse_name, parsed_name, test_method;
|
4
4
|
|
5
5
|
// This method demonstrates multiple return values
|
6
6
|
|
7
|
-
function
|
7
|
+
parse_name = function(input_name) {
|
8
8
|
var _ref1, first_name, last_name;
|
9
9
|
_ref1 = input_name.split(" ");
|
10
10
|
first_name = _ref1[0];
|
11
11
|
last_name = _ref1[1];
|
12
12
|
return [first_name,last_name];
|
13
|
-
}
|
13
|
+
};
|
14
14
|
|
15
|
-
function
|
15
|
+
test_method = function() {
|
16
16
|
return console.log("Hello, Adhithya");
|
17
|
-
}
|
17
|
+
};
|
18
18
|
|
19
19
|
parsed_name = parse_name("Adhithya Rajasekaran");
|
20
20
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
2
|
(function() {
|
3
3
|
if (visitor_present) {
|
4
|
-
|
4
|
+
//This file is for demonstration purpose. It doesn't really achieve anything
|
5
5
|
if (active || happy) {
|
6
6
|
console.log("Hello Wonderful Visitor!");
|
7
7
|
} else if (idle && not_engaged) {
|
@@ -4,11 +4,11 @@
|
|
4
4
|
|
5
5
|
//This file tests the limits of the string interpolation feature present in Nila
|
6
6
|
|
7
|
-
msg = "Hello " + "world. A lovely place." + "" + "Another " + "Lovely quote";
|
7
|
+
msg = "Hello " + ("world. A lovely place.") + "" + "Another " + ("Lovely quote");
|
8
8
|
|
9
9
|
console.log(msg);
|
10
10
|
|
11
|
-
console.log("Hello " + "world");
|
11
|
+
console.log("Hello " + ("world"));
|
12
12
|
|
13
13
|
console.log('Hello #{world}');
|
14
14
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
+
(function() {
|
3
|
+
var _i, _j, a;
|
4
|
+
|
5
|
+
a = 5;
|
6
|
+
|
7
|
+
for (_i = 0, _j = 10; _i < _j; _i += 1) {
|
8
|
+
|
9
|
+
(function(n) {
|
10
|
+
|
11
|
+
console.log("The number is " + (a+n) + "");
|
12
|
+
|
13
|
+
}(_i));
|
14
|
+
|
15
|
+
}
|
16
|
+
|
17
|
+
for (_i = 0, _j = 10; _i < _j; _i += 1) {
|
18
|
+
|
19
|
+
console.log("Hello");
|
20
|
+
|
21
|
+
}
|
22
|
+
|
23
|
+
}).call(this);
|
@@ -1,12 +1,14 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
2
|
(function() {
|
3
|
-
|
3
|
+
var return_number, square;
|
4
|
+
|
5
|
+
square = function(input_number) {
|
4
6
|
return input_number*input_number;
|
5
|
-
}
|
7
|
+
};
|
6
8
|
|
7
|
-
function
|
9
|
+
return_number = function(input_number) {
|
8
10
|
return input_number;
|
9
|
-
}
|
11
|
+
};
|
10
12
|
|
11
13
|
console.log(message);
|
12
14
|
|
@@ -0,0 +1 @@
|
|
1
|
+
date = if friday then sue else jill end
|
data/shark/test_files/perfect.js
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
2
|
(function() {
|
3
|
-
var goal_reached, hello, message, msg;
|
3
|
+
var goal_reached, hello, message, msg, square;
|
4
4
|
|
5
5
|
hello = "world";
|
6
6
|
|
7
7
|
msg = "nila";
|
8
8
|
|
9
|
-
message = "Welcome to " + msg;
|
9
|
+
message = "Welcome to " + (msg);
|
10
10
|
|
11
11
|
goal_reached = 72;
|
12
12
|
|
13
|
-
function
|
13
|
+
square = function(inputnumber) {
|
14
14
|
return inputnumber*inputnumber;
|
15
|
-
}
|
15
|
+
};
|
16
16
|
|
17
17
|
}).call(this);
|
data/src/nilac.rb
CHANGED
@@ -385,19 +385,19 @@ def compile(input_file_path, *output_file_name)
|
|
385
385
|
|
386
386
|
if string_split[1].eql?("\"\n")
|
387
387
|
|
388
|
-
replacement_string = "\" + " + interpol[2...-1]
|
388
|
+
replacement_string = "\" + " + "(#{interpol[2...-1]})"
|
389
389
|
|
390
390
|
modified_file_contents[index] = modified_file_contents[index].sub(interpol+"\"", replacement_string)
|
391
391
|
|
392
392
|
elsif string_split[1].eql?("\")\n")
|
393
393
|
|
394
|
-
replacement_string = "\" + " + interpol[2...-1]
|
394
|
+
replacement_string = "\" + " + "(#{interpol[2...-1]})"
|
395
395
|
|
396
|
-
modified_file_contents[index] = modified_file_contents[index].sub(interpol+"\"", replacement_string)
|
396
|
+
modified_file_contents[index] = modified_file_contents[index].sub(interpol + "\"", replacement_string)
|
397
397
|
|
398
398
|
else
|
399
399
|
|
400
|
-
replacement_string = "\" + " + interpol[2...-1] + " + \""
|
400
|
+
replacement_string = "\"" + " + " + "(#{interpol[2...-1]})" + " + \""
|
401
401
|
|
402
402
|
modified_file_contents[index] = modified_file_contents[index].sub(interpol, replacement_string)
|
403
403
|
|
@@ -684,7 +684,7 @@ def compile(input_file_path, *output_file_name)
|
|
684
684
|
|
685
685
|
replacement_parameters << param.lstrip.rstrip
|
686
686
|
|
687
|
-
replacement_string = replacement_string + "\n" + "if (#{param.lstrip.rstrip}
|
687
|
+
replacement_string = replacement_string + "\n" + "if (#{param.lstrip.rstrip} equequ null) {\n #{paramvalue.lstrip.rstrip}\n}\n" +"\n"
|
688
688
|
|
689
689
|
end
|
690
690
|
|
@@ -732,7 +732,7 @@ def compile(input_file_path, *output_file_name)
|
|
732
732
|
|
733
733
|
end
|
734
734
|
|
735
|
-
def get_variables(input_file_contents, temporary_nila_file)
|
735
|
+
def get_variables(input_file_contents, temporary_nila_file, *loop_variables)
|
736
736
|
|
737
737
|
variables = []
|
738
738
|
|
@@ -752,11 +752,13 @@ def compile(input_file_path, *output_file_name)
|
|
752
752
|
|
753
753
|
input_file_contents = input_file_contents.collect { |element| element.gsub("=~", "matchequal") }
|
754
754
|
|
755
|
+
javascript_regexp = /(if |while |for )/
|
756
|
+
|
755
757
|
for x in 0...input_file_contents.length
|
756
758
|
|
757
759
|
current_row = input_file_contents[x]
|
758
760
|
|
759
|
-
if current_row.include?("=") and
|
761
|
+
if current_row.include?("=") and current_row.index(javascript_regexp) == nil
|
760
762
|
|
761
763
|
current_row = current_row.rstrip + "\n"
|
762
764
|
|
@@ -794,6 +796,10 @@ def compile(input_file_path, *output_file_name)
|
|
794
796
|
|
795
797
|
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
796
798
|
|
799
|
+
variables += loop_variables
|
800
|
+
|
801
|
+
variables = variables.flatten
|
802
|
+
|
797
803
|
if variables.length > 0
|
798
804
|
|
799
805
|
variable_declaration_string = "var " + variables.uniq.sort.join(", ") + "\n\n"
|
@@ -1144,10 +1150,14 @@ def compile(input_file_path, *output_file_name)
|
|
1144
1150
|
|
1145
1151
|
def compile_multiline_hashes(input_file_contents,temporary_nila_file)
|
1146
1152
|
|
1153
|
+
javascript_regexp = /(if |while |for |function |function\()/
|
1154
|
+
|
1147
1155
|
possible_hashes = input_file_contents.reject { |element| !element.include?("{") }
|
1148
1156
|
|
1149
1157
|
possible_multiline_hashes = possible_hashes.reject { |element| element.include?("}") }
|
1150
1158
|
|
1159
|
+
possible_multiline_hashes = possible_multiline_hashes.reject {|element| element.index(javascript_regexp) != nil}
|
1160
|
+
|
1151
1161
|
multiline_hashes = []
|
1152
1162
|
|
1153
1163
|
possible_multiline_hashes.each do |starting_line|
|
@@ -1156,7 +1166,7 @@ def compile(input_file_path, *output_file_name)
|
|
1156
1166
|
|
1157
1167
|
line = starting_line
|
1158
1168
|
|
1159
|
-
until line.include?("}")
|
1169
|
+
until line.include?("}\n")
|
1160
1170
|
|
1161
1171
|
index += 1
|
1162
1172
|
|
@@ -1198,12 +1208,48 @@ def compile(input_file_path, *output_file_name)
|
|
1198
1208
|
|
1199
1209
|
def compile_inline_hashes(input_file_contents)
|
1200
1210
|
|
1201
|
-
|
1211
|
+
def replace_strings(input_string)
|
1212
|
+
|
1213
|
+
string_counter = 0
|
1214
|
+
|
1215
|
+
while input_string.include?("\"")
|
1216
|
+
|
1217
|
+
string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
|
1218
|
+
|
1219
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
1220
|
+
|
1221
|
+
string_counter += 1
|
1222
|
+
|
1223
|
+
end
|
1224
|
+
|
1225
|
+
while input_string.include?("'")
|
1226
|
+
|
1227
|
+
string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
|
1228
|
+
|
1229
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
1230
|
+
|
1231
|
+
string_counter += 1
|
1202
1232
|
|
1203
|
-
|
1233
|
+
end
|
1234
|
+
|
1235
|
+
return input_string
|
1236
|
+
|
1237
|
+
end
|
1238
|
+
|
1239
|
+
javascript_regexp = /(if |while |for |function |function\(|%[qQ]*\{)/
|
1240
|
+
|
1241
|
+
modified_file_contents = input_file_contents.clone.collect {|element| replace_strings(element)}
|
1242
|
+
|
1243
|
+
possible_inline_hashes = modified_file_contents.reject {|element| element.count("{") != 1}
|
1244
|
+
|
1245
|
+
possible_inline_hashes = possible_inline_hashes.reject {|element| element.count("}") != 1}
|
1246
|
+
|
1247
|
+
possible_inline_hashes = possible_inline_hashes.reject {|element| element.index(javascript_regexp) != nil}
|
1204
1248
|
|
1205
1249
|
possible_inline_hashes.each do |hash|
|
1206
1250
|
|
1251
|
+
hash = input_file_contents[modified_file_contents.index(hash)]
|
1252
|
+
|
1207
1253
|
hash_extract = hash[hash.index("{")..hash.index("}")]
|
1208
1254
|
|
1209
1255
|
contents = hash_extract[1...-1].split(",")
|
@@ -1388,6 +1434,30 @@ def compile(input_file_path, *output_file_name)
|
|
1388
1434
|
|
1389
1435
|
end
|
1390
1436
|
|
1437
|
+
def compile_integers(input_file_contents)
|
1438
|
+
|
1439
|
+
modified_file_contents = input_file_contents.clone
|
1440
|
+
|
1441
|
+
input_file_contents.each_with_index do |line,index|
|
1442
|
+
|
1443
|
+
matches = line.scan(/(([0-9]+_)+([0-9]+|$))/)
|
1444
|
+
|
1445
|
+
unless matches.empty?
|
1446
|
+
|
1447
|
+
matches.each do |match_arr|
|
1448
|
+
|
1449
|
+
modified_file_contents[index] = modified_file_contents[index].sub(match_arr[0],match_arr[0].gsub("_",""))
|
1450
|
+
|
1451
|
+
end
|
1452
|
+
|
1453
|
+
end
|
1454
|
+
|
1455
|
+
end
|
1456
|
+
|
1457
|
+
return modified_file_contents
|
1458
|
+
|
1459
|
+
end
|
1460
|
+
|
1391
1461
|
def compile_named_functions(input_file_contents, named_code_blocks, nested_functions, temporary_nila_file)
|
1392
1462
|
|
1393
1463
|
#This method compiles all the named Nila functions. Below is an example of what is meant
|
@@ -1401,11 +1471,11 @@ def compile(input_file_path, *output_file_name)
|
|
1401
1471
|
|
1402
1472
|
#The above function will compile to
|
1403
1473
|
|
1404
|
-
#function
|
1474
|
+
#square = function(input_number) {
|
1405
1475
|
#
|
1406
1476
|
# return input_number*input_number;
|
1407
1477
|
#
|
1408
|
-
#}
|
1478
|
+
#};
|
1409
1479
|
|
1410
1480
|
def is_parameterless?(input_function_block)
|
1411
1481
|
|
@@ -1656,6 +1726,16 @@ def compile(input_file_path, *output_file_name)
|
|
1656
1726
|
|
1657
1727
|
end
|
1658
1728
|
|
1729
|
+
def coffee_type_function(input_array)
|
1730
|
+
|
1731
|
+
function_name = input_array[0].split("function ")[1].split("(")[0].lstrip
|
1732
|
+
|
1733
|
+
input_array[0] = "#{function_name} = function(" + input_array[0].split("function ")[1].split("(")[1].lstrip
|
1734
|
+
|
1735
|
+
return input_array
|
1736
|
+
|
1737
|
+
end
|
1738
|
+
|
1659
1739
|
def compile_function(input_array, temporary_nila_file)
|
1660
1740
|
|
1661
1741
|
modified_input_array = input_array.dup
|
@@ -1716,7 +1796,7 @@ def compile(input_file_path, *output_file_name)
|
|
1716
1796
|
|
1717
1797
|
end
|
1718
1798
|
|
1719
|
-
modified_input_array[-1] = input_array[-1].sub "end", "}
|
1799
|
+
modified_input_array[-1] = input_array[-1].sub "end", "};\n"
|
1720
1800
|
|
1721
1801
|
modified_input_array = compile_parallel_assignment(modified_input_array, temporary_nila_file)
|
1722
1802
|
|
@@ -1736,6 +1816,8 @@ def compile(input_file_path, *output_file_name)
|
|
1736
1816
|
|
1737
1817
|
modified_input_array = compile_multiple_return(modified_input_array)
|
1738
1818
|
|
1819
|
+
modified_input_array = coffee_type_function(modified_input_array)
|
1820
|
+
|
1739
1821
|
return modified_input_array
|
1740
1822
|
|
1741
1823
|
end
|
@@ -1873,7 +1955,13 @@ def compile(input_file_path, *output_file_name)
|
|
1873
1955
|
|
1874
1956
|
extracted_string = input_string[location..-1]
|
1875
1957
|
|
1876
|
-
|
1958
|
+
string_extract = extracted_string[0..extracted_string.index(pattern_end)]
|
1959
|
+
|
1960
|
+
if !string_extract.include?(" = function(")
|
1961
|
+
|
1962
|
+
pattern << string_extract
|
1963
|
+
|
1964
|
+
end
|
1877
1965
|
|
1878
1966
|
end
|
1879
1967
|
|
@@ -2979,6 +3067,110 @@ def compile(input_file_path, *output_file_name)
|
|
2979
3067
|
|
2980
3068
|
end
|
2981
3069
|
|
3070
|
+
def compile_loops(input_file_contents,temporary_nila_file)
|
3071
|
+
|
3072
|
+
def compile_times_loop(input_file_contents,temporary_nila_file)
|
3073
|
+
|
3074
|
+
def compile_one_line_blocks(input_block)
|
3075
|
+
|
3076
|
+
block_parameters, block_contents = input_block[1...-1].split("|",2)[1].split("|",2)
|
3077
|
+
|
3078
|
+
compiled_block = "(function(#{block_parameters.lstrip.rstrip}) {\n\n #{block_contents} \n\n}(_i))_!;\n"
|
3079
|
+
|
3080
|
+
return compiled_block
|
3081
|
+
|
3082
|
+
end
|
3083
|
+
|
3084
|
+
modified_file_contents = input_file_contents.clone
|
3085
|
+
|
3086
|
+
possible_times_loop = input_file_contents.reject{ |element| !element.include?(".times")}
|
3087
|
+
|
3088
|
+
oneliner_times_loop = possible_times_loop.reject {|element| !element.include?("{") and !element.include?("}")}
|
3089
|
+
|
3090
|
+
#multiline_times_loop = possible_times_loop-oneliner_times_loop
|
3091
|
+
|
3092
|
+
#multiline_times_loop = multiline_times_loop.reject {|element| !element.include?(" do ")}
|
3093
|
+
|
3094
|
+
loop_variables = []
|
3095
|
+
|
3096
|
+
unless oneliner_times_loop.empty?
|
3097
|
+
|
3098
|
+
oneliner_times_loop.each do |loop|
|
3099
|
+
|
3100
|
+
original_loop = loop.clone
|
3101
|
+
|
3102
|
+
string_counter = 1
|
3103
|
+
|
3104
|
+
extracted_string = []
|
3105
|
+
|
3106
|
+
while loop.include?("\"")
|
3107
|
+
|
3108
|
+
string_extract = loop[loop.index("\"")..loop.index("\"",loop.index("\"")+1)]
|
3109
|
+
|
3110
|
+
extracted_string << string_extract
|
3111
|
+
|
3112
|
+
loop = loop.sub(string_extract,"--repstring#{string_counter}")
|
3113
|
+
|
3114
|
+
string_counter += 1
|
3115
|
+
|
3116
|
+
end
|
3117
|
+
|
3118
|
+
block_extract = loop[loop.index("{")..loop.index("}")]
|
3119
|
+
|
3120
|
+
compiled_block = ""
|
3121
|
+
|
3122
|
+
if block_extract.count("|") == 2
|
3123
|
+
|
3124
|
+
compiled_block = compile_one_line_blocks(block_extract)
|
3125
|
+
|
3126
|
+
extracted_string.each_with_index do |string,index|
|
3127
|
+
|
3128
|
+
compiled_block = compiled_block.sub("--repstring#{index+1}",string)
|
3129
|
+
|
3130
|
+
end
|
3131
|
+
|
3132
|
+
else
|
3133
|
+
|
3134
|
+
compiled_block = block_extract[1...-1].lstrip.rstrip
|
3135
|
+
|
3136
|
+
extracted_string.each_with_index do |string,index|
|
3137
|
+
|
3138
|
+
compiled_block = compiled_block.sub("--repstring#{index+1}",string)
|
3139
|
+
|
3140
|
+
end
|
3141
|
+
|
3142
|
+
end
|
3143
|
+
|
3144
|
+
times_counter = loop.split(".times")[0].lstrip
|
3145
|
+
|
3146
|
+
replacement_string = "for (_i = 0, _j = #{times_counter}; _i < _j; _i += 1) {\n\n#{compiled_block}\n\n}"
|
3147
|
+
|
3148
|
+
modified_file_contents[input_file_contents.index(original_loop)] = replacement_string
|
3149
|
+
|
3150
|
+
end
|
3151
|
+
|
3152
|
+
loop_variables = ["_i","_j"]
|
3153
|
+
|
3154
|
+
end
|
3155
|
+
|
3156
|
+
file_id = open(temporary_nila_file, 'w')
|
3157
|
+
|
3158
|
+
file_id.write(modified_file_contents.join)
|
3159
|
+
|
3160
|
+
file_id.close()
|
3161
|
+
|
3162
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
3163
|
+
|
3164
|
+
return line_by_line_contents,loop_variables
|
3165
|
+
|
3166
|
+
end
|
3167
|
+
|
3168
|
+
file_contents,loop_variables = compile_times_loop(input_file_contents,temporary_nila_file)
|
3169
|
+
|
3170
|
+
return file_contents,loop_variables
|
3171
|
+
|
3172
|
+
end
|
3173
|
+
|
2982
3174
|
def add_semicolons(input_file_contents)
|
2983
3175
|
|
2984
3176
|
def comment(input_string)
|
@@ -3280,7 +3472,7 @@ def compile(input_file_path, *output_file_name)
|
|
3280
3472
|
|
3281
3473
|
if !code_block_starting_locations.empty?
|
3282
3474
|
|
3283
|
-
controlregexp = /(if |while
|
3475
|
+
controlregexp = /(if |for |while |\(function\(|= function\(|((=|:)\s+\{))/
|
3284
3476
|
|
3285
3477
|
code_block_starting_locations = [0, code_block_starting_locations, -1].flatten
|
3286
3478
|
|
@@ -3294,6 +3486,12 @@ def compile(input_file_path, *output_file_name)
|
|
3294
3486
|
|
3295
3487
|
possible_blocks << input_file_contents[code_block_starting_locations[x]..code_block_starting_locations[x+1]]
|
3296
3488
|
|
3489
|
+
if possible_blocks.length > 1
|
3490
|
+
|
3491
|
+
possible_blocks[-1] = possible_blocks[-1][1..-1]
|
3492
|
+
|
3493
|
+
end
|
3494
|
+
|
3297
3495
|
end
|
3298
3496
|
|
3299
3497
|
end_counter = 0
|
@@ -3304,11 +3502,19 @@ def compile(input_file_path, *output_file_name)
|
|
3304
3502
|
|
3305
3503
|
possible_blocks.each_with_index do |block|
|
3306
3504
|
|
3307
|
-
|
3505
|
+
if !block[0].eql?(current_block[-1])
|
3506
|
+
|
3507
|
+
current_block += block
|
3508
|
+
|
3509
|
+
else
|
3510
|
+
|
3511
|
+
current_block += block[1..-1]
|
3512
|
+
|
3513
|
+
end
|
3308
3514
|
|
3309
3515
|
current_block.each_with_index do |line, index|
|
3310
3516
|
|
3311
|
-
if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n")
|
3517
|
+
if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n")
|
3312
3518
|
|
3313
3519
|
end_counter += 1
|
3314
3520
|
|
@@ -3352,7 +3558,7 @@ def compile(input_file_path, *output_file_name)
|
|
3352
3558
|
|
3353
3559
|
current_block.each_with_index do |line, index|
|
3354
3560
|
|
3355
|
-
if line.lstrip.eql? "}\n"
|
3561
|
+
if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n")
|
3356
3562
|
|
3357
3563
|
end_counter += 1
|
3358
3564
|
|
@@ -3410,7 +3616,7 @@ def compile(input_file_path, *output_file_name)
|
|
3410
3616
|
|
3411
3617
|
end
|
3412
3618
|
|
3413
|
-
javascript_regexp = /(if |while
|
3619
|
+
javascript_regexp = /(if |for |while |\(function\(|= function\(|((=|:)\s+\{))/
|
3414
3620
|
|
3415
3621
|
javascript_file_contents = javascript_file_contents.collect { |element| element.sub("Euuf", "if") }
|
3416
3622
|
|
@@ -3624,12 +3830,16 @@ def compile(input_file_path, *output_file_name)
|
|
3624
3830
|
|
3625
3831
|
input_file_contents = input_file_contents.collect { |element| element.sub("!=", "!==") }
|
3626
3832
|
|
3833
|
+
input_file_contents = input_file_contents.collect { |element| element.sub("equequ", "==") }
|
3834
|
+
|
3627
3835
|
input_file_contents = input_file_contents.collect { |element| element.sub("elsuf", "else if") }
|
3628
3836
|
|
3629
3837
|
input_file_contents = input_file_contents.collect { |element| compile_power_operator(element) }
|
3630
3838
|
|
3631
3839
|
input_file_contents = input_file_contents.collect {|element| compile_match_operator(element)}
|
3632
3840
|
|
3841
|
+
input_file_contents = input_file_contents.collect {|element| element.gsub("_!;",";")}
|
3842
|
+
|
3633
3843
|
return input_file_contents
|
3634
3844
|
|
3635
3845
|
end
|
@@ -3667,6 +3877,8 @@ def compile(input_file_path, *output_file_name)
|
|
3667
3877
|
|
3668
3878
|
file_contents = compile_heredocs(file_contents, temp_file)
|
3669
3879
|
|
3880
|
+
file_contents,loop_vars = compile_loops(file_contents,temp_file)
|
3881
|
+
|
3670
3882
|
file_contents = compile_interpolated_strings(file_contents)
|
3671
3883
|
|
3672
3884
|
file_contents = compile_hashes(file_contents,temp_file)
|
@@ -3677,6 +3889,8 @@ def compile(input_file_path, *output_file_name)
|
|
3677
3889
|
|
3678
3890
|
file_contents = compile_strings(file_contents)
|
3679
3891
|
|
3892
|
+
file_contents = compile_integers(file_contents)
|
3893
|
+
|
3680
3894
|
file_contents = compile_default_values(file_contents, temp_file)
|
3681
3895
|
|
3682
3896
|
file_contents, named_functions, nested_functions = replace_named_functions(file_contents, temp_file)
|
@@ -3685,14 +3899,16 @@ def compile(input_file_path, *output_file_name)
|
|
3685
3899
|
|
3686
3900
|
file_contents = compile_parallel_assignment(file_contents, temp_file)
|
3687
3901
|
|
3688
|
-
list_of_variables, file_contents = get_variables(file_contents, temp_file)
|
3689
|
-
|
3690
3902
|
file_contents, function_names = compile_named_functions(file_contents, named_functions, nested_functions, temp_file)
|
3691
3903
|
|
3904
|
+
list_of_variables, file_contents = get_variables(file_contents, temp_file,loop_vars)
|
3905
|
+
|
3692
3906
|
file_contents, ruby_functions = compile_custom_function_map(file_contents)
|
3693
3907
|
|
3694
3908
|
function_names << ruby_functions
|
3695
3909
|
|
3910
|
+
list_of_variables += loop_vars
|
3911
|
+
|
3696
3912
|
file_contents = compile_whitespace_delimited_functions(file_contents, function_names, temp_file)
|
3697
3913
|
|
3698
3914
|
file_contents = remove_question_marks(file_contents, list_of_variables, temp_file)
|
@@ -3771,7 +3987,7 @@ def find_file_path(input_path, file_extension)
|
|
3771
3987
|
|
3772
3988
|
end
|
3773
3989
|
|
3774
|
-
nilac_version = "0.0.4.2.
|
3990
|
+
nilac_version = "0.0.4.2.8"
|
3775
3991
|
|
3776
3992
|
opts = Slop.parse do
|
3777
3993
|
on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"
|
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.2.
|
4
|
+
version: 0.0.4.2.8
|
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-08-
|
12
|
+
date: 2013-08-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: shark
|
@@ -67,15 +67,18 @@ files:
|
|
67
67
|
- shark/features/fix_newlines.feature
|
68
68
|
- shark/features/hashes.feature
|
69
69
|
- shark/features/heredoc.feature
|
70
|
+
- shark/features/if_then_else.feature
|
70
71
|
- shark/features/loop.feature
|
71
72
|
- shark/features/method_multiple_return.feature
|
72
73
|
- shark/features/multiline_array.feature
|
73
74
|
- shark/features/multiple_variable_initialization.feature
|
75
|
+
- shark/features/numbers.feature
|
74
76
|
- shark/features/regular_if.feature
|
75
77
|
- shark/features/regular_while.feature
|
76
78
|
- shark/features/ruby_operators.feature
|
77
79
|
- shark/features/string_interpolation.feature
|
78
80
|
- shark/features/strings.feature
|
81
|
+
- shark/features/times.feature
|
79
82
|
- shark/features/unless_until.feature
|
80
83
|
- shark/features/whitespace_delimitation.feature
|
81
84
|
- shark/test_files/array_string_indexing.nila
|
@@ -83,11 +86,13 @@ files:
|
|
83
86
|
- shark/test_files/correct_default_parameters.js
|
84
87
|
- shark/test_files/correct_hashes.js
|
85
88
|
- shark/test_files/correct_heredoc.js
|
89
|
+
- shark/test_files/correct_if_then_else.js
|
86
90
|
- shark/test_files/correct_indexing.js
|
87
91
|
- shark/test_files/correct_initialization.js
|
88
92
|
- shark/test_files/correct_loop.js
|
89
93
|
- shark/test_files/correct_multiline_array.js
|
90
94
|
- shark/test_files/correct_multiple_return.js
|
95
|
+
- shark/test_files/correct_numbers.js
|
91
96
|
- shark/test_files/correct_operators.js
|
92
97
|
- shark/test_files/correct_regular_if.js
|
93
98
|
- shark/test_files/correct_regular_while.js
|
@@ -95,17 +100,20 @@ files:
|
|
95
100
|
- shark/test_files/correct_single_return.js
|
96
101
|
- shark/test_files/correct_string_interpolation.js
|
97
102
|
- shark/test_files/correct_string_operators.js
|
103
|
+
- shark/test_files/correct_times.js
|
98
104
|
- shark/test_files/correct_unless_until.js
|
99
105
|
- shark/test_files/correct_whitespace_delimiter.js
|
100
106
|
- shark/test_files/default_parameters.nila
|
101
107
|
- shark/test_files/erratic.nila
|
102
108
|
- shark/test_files/hashes.nila
|
103
109
|
- shark/test_files/heredoc.nila
|
110
|
+
- shark/test_files/if_then_else.nila
|
104
111
|
- shark/test_files/loop.nila
|
105
112
|
- shark/test_files/multiline_array.nila
|
106
113
|
- shark/test_files/multiple_initialization.nila
|
107
114
|
- shark/test_files/multiple_return.nila
|
108
115
|
- shark/test_files/no_return.nila
|
116
|
+
- shark/test_files/numbers.nila
|
109
117
|
- shark/test_files/operators.nila
|
110
118
|
- shark/test_files/perfect.js
|
111
119
|
- shark/test_files/regular_if.nila
|
@@ -114,6 +122,7 @@ files:
|
|
114
122
|
- shark/test_files/single_return.nila
|
115
123
|
- shark/test_files/string_interpolation.nila
|
116
124
|
- shark/test_files/string_operators.nila
|
125
|
+
- shark/test_files/times.nila
|
117
126
|
- shark/test_files/unless_until.nila
|
118
127
|
- shark/test_files/whitespace_delimiter.nila
|
119
128
|
- src/nilac.rb
|