nilac 0.0.4.2.6 → 0.0.4.2.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.
- 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
|