nilac 0.0.4.3.4 → 0.0.4.3.6

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/src/nilac.rb CHANGED
@@ -415,16 +415,56 @@ def compile(input_file_path, *output_file_name)
415
415
 
416
416
  def replace_singleline_comments(input_file_contents)
417
417
 
418
+ def replace_strings(input_string)
419
+
420
+ string_counter = 0
421
+
422
+ if input_string.count("\"") % 2 == 0
423
+
424
+ while input_string.include?("\"")
425
+
426
+ string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
427
+
428
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
429
+
430
+ string_counter += 1
431
+
432
+ end
433
+
434
+ end
435
+
436
+ if input_string.count("'") % 2 == 0
437
+
438
+ while input_string.include?("'")
439
+
440
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
441
+
442
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
443
+
444
+ string_counter += 1
445
+
446
+ end
447
+
448
+ end
449
+
450
+ return input_string
451
+
452
+ end
453
+
418
454
  single_line_comments = []
419
455
 
420
456
  singleline_comment_counter = 1
421
457
 
458
+ modified_file_contents = input_file_contents.clone
459
+
422
460
  for x in 0...input_file_contents.length
423
461
 
424
- current_row = input_file_contents[x]
462
+ current_row = replace_strings(input_file_contents[x])
425
463
 
426
464
  if current_row.include?("#")
427
465
 
466
+ current_row = modified_file_contents[x]
467
+
428
468
  comment_start = current_row.index("#")
429
469
 
430
470
  if current_row[comment_start+1] != "{"
@@ -439,13 +479,17 @@ def compile(input_file_path, *output_file_name)
439
479
 
440
480
  end
441
481
 
482
+ else
483
+
484
+ current_row = modified_file_contents[x]
485
+
442
486
  end
443
487
 
444
- input_file_contents[x] = current_row
488
+ modified_file_contents[x] = current_row
445
489
 
446
490
  end
447
491
 
448
- return input_file_contents, single_line_comments
492
+ return modified_file_contents, single_line_comments
449
493
 
450
494
  end
451
495
 
@@ -477,7 +521,7 @@ def compile(input_file_path, *output_file_name)
477
521
 
478
522
  key_word_locations << x
479
523
 
480
- elsif current_row.lstrip.include?("end\n") || current_row.include?("end")
524
+ elsif current_row.lstrip.eql?("end\n") || current_row.strip.eql?("end")
481
525
 
482
526
  end_locations << x
483
527
 
@@ -525,9 +569,9 @@ def compile(input_file_path, *output_file_name)
525
569
 
526
570
  modified_file_contents[code_block_begin] = code_block_begin_string
527
571
 
528
- rescue NoMethodError
529
-
530
- puts "Function compilation failed!"
572
+ #rescue NoMethodError
573
+ #
574
+ # puts "Function compilation failed!"
531
575
 
532
576
  end
533
577
 
@@ -678,7 +722,7 @@ def compile(input_file_path, *output_file_name)
678
722
 
679
723
  input_file_contents = input_file_contents.collect {|element| arrayify_right_side(element)}
680
724
 
681
- possible_variable_lines = input_file_contents.reject { |element| !element.include? "=" }
725
+ possible_variable_lines = input_file_contents.clone.reject { |element| !element.include? "=" }
682
726
 
683
727
  possible_parallel_assignment = possible_variable_lines.reject { |element| !element.split("=")[0].include? "," }
684
728
 
@@ -766,10 +810,34 @@ def compile(input_file_path, *output_file_name)
766
810
 
767
811
  end
768
812
 
769
- possible_default_values = input_file_contents.dup.reject { |element| !element.include?("def") }
813
+ reject_regexp = /(function |Euuf |if |else|elsuf|switch |case|while |whaaleskey |for )/
814
+
815
+ input_file_contents = input_file_contents.collect { |element| element.gsub("==", "equalequal") }
816
+
817
+ input_file_contents = input_file_contents.collect { |element| element.gsub("!=", "notequal") }
818
+
819
+ input_file_contents = input_file_contents.collect { |element| element.gsub("+=", "plusequal") }
820
+
821
+ input_file_contents = input_file_contents.collect { |element| element.gsub("-=", "minusequal") }
822
+
823
+ input_file_contents = input_file_contents.collect { |element| element.gsub("*=", "multiequal") }
824
+
825
+ input_file_contents = input_file_contents.collect { |element| element.gsub("/=", "divequal") }
826
+
827
+ input_file_contents = input_file_contents.collect { |element| element.gsub("%=", "modequal") }
828
+
829
+ input_file_contents = input_file_contents.collect { |element| element.gsub("=~", "matchequal") }
830
+
831
+ input_file_contents = input_file_contents.collect { |element| element.gsub(">=", "greatequal") }
832
+
833
+ input_file_contents = input_file_contents.collect { |element| element.gsub("<=", "lessyequal") }
834
+
835
+ possible_default_values = input_file_contents.dup.reject { |element| (!element.include?("def")) }
770
836
 
771
837
  possible_default_values = possible_default_values.reject { |element| !element.include?("=") }
772
838
 
839
+ possible_default_values = possible_default_values.reject {|element| !element.index(reject_regexp) == nil}
840
+
773
841
  if !possible_default_values.empty?
774
842
 
775
843
  possible_default_values.each do |line|
@@ -802,12 +870,60 @@ def compile(input_file_path, *output_file_name)
802
870
 
803
871
  line_by_line_contents = read_file_line_by_line(temporary_nila_file)
804
872
 
873
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("plusequal", "+=") }
874
+
875
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("minusequal", "-=") }
876
+
877
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("multiequal", "*=") }
878
+
879
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("divequal", "/=") }
880
+
881
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("modequal", "%=") }
882
+
883
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("equalequal", "==") }
884
+
885
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("notequal", "!=") }
886
+
887
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("matchequal", "=~") }
888
+
889
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("greatequal", ">=") }
890
+
891
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("lessyequal", "<=") }
892
+
805
893
  return line_by_line_contents
806
894
 
807
895
  end
808
896
 
809
897
  def get_variables(input_file_contents, temporary_nila_file, *loop_variables)
810
898
 
899
+ def replace_strings(input_string)
900
+
901
+ string_counter = 0
902
+
903
+ while input_string.include?("\"")
904
+
905
+ string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
906
+
907
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
908
+
909
+ string_counter += 1
910
+
911
+ end
912
+
913
+ while input_string.include?("'")
914
+
915
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
916
+
917
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
918
+
919
+ string_counter += 1
920
+
921
+ end
922
+
923
+ return input_string
924
+
925
+ end
926
+
811
927
  variables = []
812
928
 
813
929
  input_file_contents = input_file_contents.collect { |element| element.gsub("==", "equalequal") }
@@ -826,6 +942,14 @@ def compile(input_file_path, *output_file_name)
826
942
 
827
943
  input_file_contents = input_file_contents.collect { |element| element.gsub("=~", "matchequal") }
828
944
 
945
+ input_file_contents = input_file_contents.collect { |element| element.gsub(">=", "greatequal") }
946
+
947
+ input_file_contents = input_file_contents.collect { |element| element.gsub("<=", "lessyequal") }
948
+
949
+ modified_file_contents = input_file_contents.clone
950
+
951
+ input_file_contents = input_file_contents.collect {|element| replace_strings(element)}
952
+
829
953
  javascript_regexp = /(if |while |for )/
830
954
 
831
955
  for x in 0...input_file_contents.length
@@ -851,6 +975,8 @@ def compile(input_file_path, *output_file_name)
851
975
 
852
976
  end
853
977
 
978
+ current_row_split[0] = current_row_split[0].split(".",2)[0].strip if current_row_split[0].include?(".")
979
+
854
980
  variables << current_row_split[0]
855
981
 
856
982
 
@@ -860,7 +986,7 @@ def compile(input_file_path, *output_file_name)
860
986
 
861
987
  end
862
988
 
863
- file_contents_as_string = input_file_contents.join
989
+ file_contents_as_string = modified_file_contents.join
864
990
 
865
991
  file_id = open(temporary_nila_file, 'w')
866
992
 
@@ -890,14 +1016,6 @@ def compile(input_file_path, *output_file_name)
890
1016
 
891
1017
  variables = variables.flatten
892
1018
 
893
- if variables.length > 0
894
-
895
- variable_declaration_string = "var " + variables.uniq.sort.join(", ") + "\n\n"
896
-
897
- line_by_line_contents = [variable_declaration_string, line_by_line_contents].flatten
898
-
899
- end
900
-
901
1019
  line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("plusequal", "+=") }
902
1020
 
903
1021
  line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("minusequal", "-=") }
@@ -914,6 +1032,10 @@ def compile(input_file_path, *output_file_name)
914
1032
 
915
1033
  line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("matchequal", "=~") }
916
1034
 
1035
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("greatequal", ">=") }
1036
+
1037
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("lessyequal", "<=") }
1038
+
917
1039
  return variables.uniq, line_by_line_contents
918
1040
 
919
1041
  end
@@ -963,7 +1085,7 @@ def compile(input_file_path, *output_file_name)
963
1085
 
964
1086
  end
965
1087
 
966
- def compile_arrays(input_file_contents, temporary_nila_file)
1088
+ def compile_arrays(input_file_contents, named_functions, temporary_nila_file)
967
1089
 
968
1090
  def compile_w_arrays(input_file_contents)
969
1091
 
@@ -1065,7 +1187,7 @@ def compile(input_file_path, *output_file_name)
1065
1187
 
1066
1188
  replacement_string = nil
1067
1189
 
1068
- if index_end.strip == "end"
1190
+ if index_end.strip == "last"
1069
1191
 
1070
1192
  replacement_string = split1 + ".slice(#{index_start},#{split}.length)\n"
1071
1193
 
@@ -1109,9 +1231,9 @@ def compile(input_file_path, *output_file_name)
1109
1231
 
1110
1232
  replacement_string = nil
1111
1233
 
1112
- if index_end.strip == "end"
1234
+ if index_end.strip == "last"
1113
1235
 
1114
- replacement_string = split1 + ".slice(#{index_start})\n"
1236
+ replacement_string = split1 + ".slice(#{index_start})" + split3.strip + "\n\n"
1115
1237
 
1116
1238
  elsif index_end.strip == "" and index_start.strip == ""
1117
1239
 
@@ -1215,7 +1337,7 @@ def compile(input_file_path, *output_file_name)
1215
1337
 
1216
1338
  left, right = usage.split("<<")
1217
1339
 
1218
- input_file_contents[input_file_contents.index(usage)] = left.rstrip + ".push(#{right.lstrip})"
1340
+ input_file_contents[input_file_contents.index(usage)] = left.rstrip + ".push(#{right.strip})\n\n"
1219
1341
 
1220
1342
  end
1221
1343
 
@@ -1231,7 +1353,15 @@ def compile(input_file_path, *output_file_name)
1231
1353
 
1232
1354
  input_file_contents = compile_array_operators(input_file_contents)
1233
1355
 
1234
- return input_file_contents
1356
+ named_functions = named_functions.collect {|func| compile_w_arrays(func)}
1357
+
1358
+ named_functions = named_functions.collect { |func| compile_array_indexing(func)}
1359
+
1360
+ named_functions = named_functions.collect {|func| compile_multiline(func, temporary_nila_file)}
1361
+
1362
+ named_functions = named_functions.collect {|func| compile_array_operators(func)}
1363
+
1364
+ return input_file_contents, named_functions
1235
1365
 
1236
1366
 
1237
1367
  end
@@ -1240,8 +1370,40 @@ def compile(input_file_path, *output_file_name)
1240
1370
 
1241
1371
  def compile_multiline_hashes(input_file_contents,temporary_nila_file)
1242
1372
 
1373
+ def replace_strings(input_string)
1374
+
1375
+ string_counter = 0
1376
+
1377
+ while input_string.include?("\"")
1378
+
1379
+ string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
1380
+
1381
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
1382
+
1383
+ string_counter += 1
1384
+
1385
+ end
1386
+
1387
+ while input_string.include?("'")
1388
+
1389
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
1390
+
1391
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
1392
+
1393
+ string_counter += 1
1394
+
1395
+ end
1396
+
1397
+ return input_string
1398
+
1399
+ end
1400
+
1243
1401
  javascript_regexp = /(if |while |for |function |function\()/
1244
1402
 
1403
+ modified_file_contents = input_file_contents.clone
1404
+
1405
+ input_file_contents = input_file_contents.collect {|line| replace_strings(line)}
1406
+
1245
1407
  possible_hashes = input_file_contents.reject { |element| !element.include?("{") }
1246
1408
 
1247
1409
  possible_multiline_hashes = possible_hashes.reject { |element| element.include?("}") }
@@ -1254,21 +1416,21 @@ def compile(input_file_path, *output_file_name)
1254
1416
 
1255
1417
  index = input_file_contents.index(starting_line)
1256
1418
 
1257
- line = starting_line
1419
+ line = modified_file_contents[index]
1258
1420
 
1259
1421
  until line.include?("}\n")
1260
1422
 
1261
1423
  index += 1
1262
1424
 
1263
- line = input_file_contents[index]
1425
+ line = modified_file_contents[index]
1264
1426
 
1265
1427
  end
1266
1428
 
1267
- multiline_hashes << input_file_contents[input_file_contents.index(starting_line)..index]
1429
+ multiline_hashes << modified_file_contents[input_file_contents.index(starting_line)..index]
1268
1430
 
1269
1431
  end
1270
1432
 
1271
- joined_file_contents = input_file_contents.join
1433
+ joined_file_contents = modified_file_contents.join
1272
1434
 
1273
1435
  multiline_hashes.each do |hash|
1274
1436
 
@@ -1336,6 +1498,8 @@ def compile(input_file_path, *output_file_name)
1336
1498
 
1337
1499
  possible_inline_hashes = possible_inline_hashes.reject {|element| element.index(javascript_regexp) != nil}
1338
1500
 
1501
+ possible_inline_hashes = possible_inline_hashes.reject {|element| element.include?("{}")}
1502
+
1339
1503
  possible_inline_hashes.each do |hash|
1340
1504
 
1341
1505
  hash = input_file_contents[modified_file_contents.index(hash)]
@@ -1586,7 +1750,57 @@ def compile(input_file_path, *output_file_name)
1586
1750
  #This method will pickup and declare all the variables inside a function block. In future, this method will be
1587
1751
  #merged with the get variables method
1588
1752
 
1589
- controlregexp = /(if |while |def |function |function\()/
1753
+ def replace_strings(input_string)
1754
+
1755
+ element = input_string.gsub("==", "equalequal")
1756
+
1757
+ element = element.gsub("!=", "notequal")
1758
+
1759
+ element = element.gsub("+=", "plusequal")
1760
+
1761
+ element = element.gsub("-=", "minusequal")
1762
+
1763
+ element = element.gsub("*=", "multiequal")
1764
+
1765
+ element = element.gsub("/=", "divequal")
1766
+
1767
+ element = element.gsub("%=", "modequal")
1768
+
1769
+ element = element.gsub("=~", "matchequal")
1770
+
1771
+ element = element.gsub(">=", "greatequal")
1772
+
1773
+ input_string = element.gsub("<=", "lessyequal")
1774
+
1775
+ string_counter = 0
1776
+
1777
+ while input_string.include?("\"")
1778
+
1779
+ string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
1780
+
1781
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
1782
+
1783
+ string_counter += 1
1784
+
1785
+ end
1786
+
1787
+ while input_string.include?("'")
1788
+
1789
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
1790
+
1791
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
1792
+
1793
+ string_counter += 1
1794
+
1795
+ end
1796
+
1797
+ return input_string
1798
+
1799
+ end
1800
+
1801
+ input_function_block = input_function_block.collect {|element| replace_strings(element)}
1802
+
1803
+ controlregexp = /(if |Euuf |for |while |def |function |function\()/
1590
1804
 
1591
1805
  variables = []
1592
1806
 
@@ -1670,7 +1884,7 @@ def compile(input_file_path, *output_file_name)
1670
1884
 
1671
1885
  if !rejected_array[0].strip.eql?("}")
1672
1886
 
1673
- if !rejected_array[0].strip.eql?("end")
1887
+ if !rejected_array[0].strip.eql?("end") and !rejected_array[0].strip.include?("--single_line_comment")
1674
1888
 
1675
1889
  last_statement = rejected_array[0]
1676
1890
 
@@ -1996,13 +2210,25 @@ def compile(input_file_path, *output_file_name)
1996
2210
 
1997
2211
  modified_file_contents = input_file_contents.dup
1998
2212
 
2213
+ javascript_regexp = /(if |for |while |\(function\(|= function\(|((=|:)\s+\{))/
2214
+
1999
2215
  input_file_contents.each_with_index do |line, index|
2000
2216
 
2001
2217
  function_map.each do |function|
2002
2218
 
2003
- if line.include?(function+"(") or line.include?(function+" ")
2219
+ if line.include?(function+"(") or line.include?(function+" ") and line.index(javascript_regexp) == nil
2220
+
2221
+ testsplit = line.split(function)
2222
+
2223
+ testsplit = testsplit.collect {|element| element.strip}
2224
+
2225
+ testsplit[0] = " " if testsplit[0].eql?("")
2004
2226
 
2005
- modified_file_contents[index] = line.sub(function, function_map_replacements[function])
2227
+ if testsplit[0][-1].eql?(" ") or testsplit[0].eql?("return")
2228
+
2229
+ modified_file_contents[index] = line.sub(function, function_map_replacements[function])
2230
+
2231
+ end
2006
2232
 
2007
2233
  end
2008
2234
 
@@ -2029,7 +2255,14 @@ def compile(input_file_path, *output_file_name)
2029
2255
 
2030
2256
  ".lstrip" => ".replace(/^\\s+/g,\"\")",
2031
2257
 
2032
- ".rstrip" => ".replace(/\\s+$/g,\"\")"
2258
+ ".rstrip" => ".replace(/\\s+$/g,\"\")",
2259
+
2260
+ ".to_s" => ".toString()",
2261
+
2262
+ ".reverse" => ".reverse()",
2263
+
2264
+ ".empty?" => ".length == 0",
2265
+
2033
2266
  }
2034
2267
 
2035
2268
  method_map = method_map_replacement.keys
@@ -2062,6 +2295,85 @@ def compile(input_file_path, *output_file_name)
2062
2295
 
2063
2296
  end
2064
2297
 
2298
+ def compile_special_keywords(input_file_contents)
2299
+
2300
+ # This method compiles some Ruby specific keywords to Javascript to make it easy to port
2301
+ # Ruby code into Javascript
2302
+
2303
+ def replace_strings(input_string)
2304
+
2305
+ string_counter = 0
2306
+
2307
+ if input_string.count("\"") % 2 == 0
2308
+
2309
+ while input_string.include?("\"")
2310
+
2311
+ string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
2312
+
2313
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
2314
+
2315
+ string_counter += 1
2316
+
2317
+ end
2318
+
2319
+ end
2320
+
2321
+ if input_string.count("'") % 2 == 0
2322
+
2323
+ while input_string.include?("'")
2324
+
2325
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
2326
+
2327
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
2328
+
2329
+ string_counter += 1
2330
+
2331
+ end
2332
+
2333
+ end
2334
+
2335
+ return input_string
2336
+
2337
+ end
2338
+
2339
+ keyword_replacement_map = {
2340
+
2341
+ "nil" => "null",
2342
+
2343
+ "Array.new" => "Array()"
2344
+
2345
+ }
2346
+
2347
+ special_keywords = keyword_replacement_map.keys
2348
+
2349
+ keyword_map_regex = special_keywords.collect {|name| name.gsub(".","\\.")}
2350
+
2351
+ keyword_map_regex = Regexp.new(keyword_map_regex.join("|"))
2352
+
2353
+ modified_file_contents = input_file_contents.clone
2354
+
2355
+ input_file_contents.each_with_index do |line, index|
2356
+
2357
+ if replace_strings(line).match(keyword_map_regex)
2358
+
2359
+ method_match = line.match(keyword_map_regex).to_a[0]
2360
+
2361
+ if line.split(keyword_map_regex)[0].include?("=")
2362
+
2363
+ line = line.sub(method_match,keyword_replacement_map[method_match])
2364
+
2365
+ end
2366
+
2367
+ end
2368
+
2369
+ modified_file_contents[index] = line
2370
+
2371
+ end
2372
+
2373
+ return modified_file_contents
2374
+
2375
+ end
2376
+
2065
2377
  def compile_whitespace_delimited_functions(input_file_contents, function_names, temporary_nila_file)
2066
2378
 
2067
2379
  def extract(input_string, pattern_start, pattern_end)
@@ -2306,7 +2618,7 @@ def compile(input_file_path, *output_file_name)
2306
2618
 
2307
2619
  extracted_blocks = []
2308
2620
 
2309
- controlregexp = /(if |while |def )/
2621
+ controlregexp = /(if |while |def | do )/
2310
2622
 
2311
2623
  rejectionregexp = /( if | while )/
2312
2624
 
@@ -2324,7 +2636,16 @@ def compile(input_file_path, *output_file_name)
2324
2636
 
2325
2637
  possible_if_blocks.each_with_index do |block|
2326
2638
 
2327
- current_block += block
2639
+ unless current_block[-1] == block[0]
2640
+
2641
+ current_block += block
2642
+
2643
+ else
2644
+
2645
+ current_block += block[1..-1]
2646
+
2647
+ end
2648
+
2328
2649
 
2329
2650
  current_block.each_with_index do |line, index|
2330
2651
 
@@ -2492,7 +2813,7 @@ def compile(input_file_path, *output_file_name)
2492
2813
 
2493
2814
  if_statement_indexes = [0] + if_statement_indexes.flatten + [-1]
2494
2815
 
2495
- controlregexp = /(while |def )/
2816
+ controlregexp = /(while |def | do )/
2496
2817
 
2497
2818
  modified_input_contents, extracted_statements = extract_if_blocks(if_statement_indexes, input_file_contents.clone)
2498
2819
 
@@ -2604,7 +2925,7 @@ def compile(input_file_path, *output_file_name)
2604
2925
 
2605
2926
  extracted_blocks = []
2606
2927
 
2607
- controlregexp = /(if |while |def )/
2928
+ controlregexp = /(if |while |def | do )/
2608
2929
 
2609
2930
  rejectionregexp = /( if | while )/
2610
2931
 
@@ -2762,7 +3083,7 @@ def compile(input_file_path, *output_file_name)
2762
3083
 
2763
3084
  while_statement_indexes = [0] + while_statement_indexes.flatten + [-1]
2764
3085
 
2765
- controlregexp = /(if |def )/
3086
+ controlregexp = /(if |def | do )/
2766
3087
 
2767
3088
  modified_input_contents, extracted_statements = extract_while_blocks(while_statement_indexes, input_file_contents.clone)
2768
3089
 
@@ -2812,7 +3133,7 @@ def compile(input_file_path, *output_file_name)
2812
3133
 
2813
3134
  else
2814
3135
 
2815
- joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
3136
+ joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0])
2816
3137
 
2817
3138
  rejected_elements_index.delete_at(0)
2818
3139
 
@@ -2822,7 +3143,7 @@ def compile(input_file_path, *output_file_name)
2822
3143
 
2823
3144
  else
2824
3145
 
2825
- joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
3146
+ joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0])
2826
3147
 
2827
3148
  rejected_elements_index.delete_at(0)
2828
3149
 
@@ -2874,7 +3195,7 @@ def compile(input_file_path, *output_file_name)
2874
3195
 
2875
3196
  extracted_blocks = []
2876
3197
 
2877
- controlregexp = /(if |while |def |for )/
3198
+ controlregexp = /(if |while |def |for | do )/
2878
3199
 
2879
3200
  rejectionregexp = /( if | while )/
2880
3201
 
@@ -3078,7 +3399,7 @@ def compile(input_file_path, *output_file_name)
3078
3399
 
3079
3400
  for_statement_indexes = [0] + for_statement_indexes.flatten + [-1]
3080
3401
 
3081
- controlregexp = /(if |def |while )/
3402
+ controlregexp = /(if |def |while | do )/
3082
3403
 
3083
3404
  modified_input_contents, extracted_statements = extract_for_blocks(for_statement_indexes, input_file_contents.clone)
3084
3405
 
@@ -3138,7 +3459,7 @@ def compile(input_file_path, *output_file_name)
3138
3459
 
3139
3460
  else
3140
3461
 
3141
- joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
3462
+ joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0])
3142
3463
 
3143
3464
  rejected_elements_index.delete_at(0)
3144
3465
 
@@ -3558,6 +3879,10 @@ def compile(input_file_path, *output_file_name)
3558
3879
 
3559
3880
  input_file_contents = input_file_contents.collect { |element| element.gsub("=~", "matchequal") }
3560
3881
 
3882
+ input_file_contents = input_file_contents.collect { |element| element.gsub(">=", "greatequal") }
3883
+
3884
+ input_file_contents = input_file_contents.collect { |element| element.gsub("<=", "lessyequal") }
3885
+
3561
3886
  javascript_regexp = /(if |while |for )/
3562
3887
 
3563
3888
  for x in 0...input_file_contents.length
@@ -3700,6 +4025,8 @@ def compile(input_file_path, *output_file_name)
3700
4025
 
3701
4026
  times_counter = loop.split(".times")[0].lstrip
3702
4027
 
4028
+ times_counter = times_counter[1...-1] if times_counter.include?("(") and times_counter.include?(")")
4029
+
3703
4030
  replacement_string = "for (_i = 0, _j = #{times_counter}; _i < _j; _i += 1) {\n\n#{compiled_block}\n\n}"
3704
4031
 
3705
4032
  modified_file_contents[input_file_contents.index(original_loop)] = replacement_string
@@ -3728,6 +4055,142 @@ def compile(input_file_path, *output_file_name)
3728
4055
 
3729
4056
  end
3730
4057
 
4058
+ def compile_blocks(input_file_contents,temporary_nila_file)
4059
+
4060
+ def compile_one_line_blocks(input_block)
4061
+
4062
+ block_parameters, block_contents = input_block[1...-1].split("|",2)[1].split("|",2)
4063
+
4064
+ compiled_block = "function(#{block_parameters.lstrip.rstrip}) {\n\n #{block_contents.strip} \n\n}"
4065
+
4066
+ return compiled_block
4067
+
4068
+ end
4069
+
4070
+ input_file_contents = input_file_contents.collect {|element| element.gsub("append","appand")}
4071
+
4072
+ possible_blocks = input_file_contents.reject {|line| !line.include?(" do ")}
4073
+
4074
+ unless possible_blocks.empty?
4075
+
4076
+ possible_blocks.each do |starting_line|
4077
+
4078
+ index_counter = starting_counter = input_file_contents.index(starting_line)
4079
+
4080
+ line = starting_line
4081
+
4082
+ until line.strip.eql?("end") or line.strip.eql?("end)")
4083
+
4084
+ index_counter += 1
4085
+
4086
+ line = input_file_contents[index_counter]
4087
+
4088
+ end
4089
+
4090
+ loop_extract = input_file_contents[starting_counter..index_counter]
4091
+
4092
+ loop_condition, block = loop_extract.join.split(" do ")
4093
+
4094
+ block = block.split("end")[0]
4095
+
4096
+ replacement_string = "#{loop_condition.rstrip} blockky {#{block.strip}}_!"
4097
+
4098
+ input_file_contents[starting_counter..index_counter] = replacement_string
4099
+
4100
+ end
4101
+
4102
+ end
4103
+
4104
+ possible_blocks = input_file_contents.reject{ |element| !element.include?(" blockky ")}
4105
+
4106
+ possible_blocks = possible_blocks.reject {|element| !element.include?("{") and !element.include?("}")}
4107
+
4108
+ modified_file_contents = input_file_contents.clone
4109
+
4110
+ unless possible_blocks.empty?
4111
+
4112
+ possible_blocks.each do |loop|
4113
+
4114
+ original_loop = loop.clone
4115
+
4116
+ string_counter = 1
4117
+
4118
+ extracted_string = []
4119
+
4120
+ while loop.include?("\"")
4121
+
4122
+ string_extract = loop[loop.index("\"")..loop.index("\"",loop.index("\"")+1)]
4123
+
4124
+ extracted_string << string_extract
4125
+
4126
+ loop = loop.sub(string_extract,"--repstring#{string_counter}")
4127
+
4128
+ string_counter += 1
4129
+
4130
+ end
4131
+
4132
+ block_extract = loop[loop.index("{")..loop.index("}_!")]
4133
+
4134
+ compiled_block = ""
4135
+
4136
+ if block_extract.count("|") == 2
4137
+
4138
+ compiled_block = compile_one_line_blocks(block_extract)
4139
+
4140
+ extracted_string.each_with_index do |string,index|
4141
+
4142
+ compiled_block = compiled_block.sub("--repstring#{index+1}",string)
4143
+
4144
+ end
4145
+
4146
+ else
4147
+
4148
+ compiled_block = block_extract[1...-1].lstrip.rstrip
4149
+
4150
+ extracted_string.each_with_index do |string,index|
4151
+
4152
+ compiled_block = compiled_block.sub("--repstring#{index+1}",string)
4153
+
4154
+ end
4155
+
4156
+ end
4157
+
4158
+ caller_func = loop.split(" blockky ")[0]
4159
+
4160
+ unless caller_func.rstrip[-1] == ","
4161
+
4162
+ replacement_string = "#{caller_func.rstrip}(#{compiled_block.lstrip})"
4163
+
4164
+ else
4165
+
4166
+ caller_func_split = caller_func.split("(") if caller_func.include?("(")
4167
+
4168
+ caller_func_split = caller_func.split(" ",2) if caller_func.include?(" ")
4169
+
4170
+ replacement_string = "#{caller_func_split[0]}(#{caller_func_split[1].strip + compiled_block.lstrip})"
4171
+
4172
+ end
4173
+
4174
+ modified_file_contents[input_file_contents.index(original_loop)] = replacement_string
4175
+
4176
+ end
4177
+
4178
+ end
4179
+
4180
+ modified_file_contents = modified_file_contents.collect {|element| element.gsub("appand","append")}
4181
+
4182
+ file_id = open(temporary_nila_file, 'w')
4183
+
4184
+ file_id.write(modified_file_contents.join)
4185
+
4186
+ file_id.close()
4187
+
4188
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
4189
+
4190
+ return line_by_line_contents
4191
+
4192
+ end
4193
+
3731
4194
  def add_semicolons(input_file_contents)
3732
4195
 
3733
4196
  def comment(input_string)
@@ -3864,7 +4327,7 @@ def compile(input_file_path, *output_file_name)
3864
4327
 
3865
4328
  end
3866
4329
 
3867
- def pretty_print_javascript(javascript_file_contents, temporary_nila_file)
4330
+ def pretty_print_javascript(javascript_file_contents, temporary_nila_file,declarable_variables)
3868
4331
 
3869
4332
  def reset_tabs(input_file_contents)
3870
4333
 
@@ -3944,7 +4407,7 @@ def compile(input_file_path, *output_file_name)
3944
4407
 
3945
4408
  end
3946
4409
 
3947
- block_ending_lines = file_contents.dup.each_index.select { |index| (file_contents[index].eql? " }\n" or file_contents[index].eql? " };\n")}
4410
+ block_ending_lines = file_contents.dup.each_index.select { |index| (file_contents[index].eql? " }\n" or file_contents[index].eql? " };\n" or file_contents[index].lstrip.eql?("});\n"))}
3948
4411
 
3949
4412
  modified_file_contents = file_contents.dup
3950
4413
 
@@ -3974,19 +4437,19 @@ def compile(input_file_path, *output_file_name)
3974
4437
 
3975
4438
  end
3976
4439
 
3977
- block_ending_lines = modified_file_contents.dup.each_index.select { |index| (modified_file_contents[index].eql? " }\n" or modified_file_contents[index].eql? " };\n") }
4440
+ block_ending_lines = modified_file_contents.dup.each_index.select { |index| (modified_file_contents[index].eql? " }\n" or modified_file_contents[index].eql? " };\n" or modified_file_contents[index].lstrip.eql?("});\n")) }
3978
4441
 
3979
4442
  starting_index = starting_line_indices[0]
3980
4443
 
3981
4444
  end
3982
4445
 
3983
- rescue TypeError
3984
-
3985
- puts "Whitespace was left unfixed!"
3986
-
3987
- rescue ArgumentError
3988
-
3989
- puts "Whitespace was left unfixed!"
4446
+ #rescue TypeError
4447
+ #
4448
+ # puts "Whitespace was left unfixed!"
4449
+ #
4450
+ #rescue ArgumentError
4451
+ #
4452
+ # puts "Whitespace was left unfixed!"
3990
4453
 
3991
4454
  end
3992
4455
 
@@ -4018,7 +4481,6 @@ def compile(input_file_path, *output_file_name)
4018
4481
 
4019
4482
  starting_index = code_block_locations[0]
4020
4483
 
4021
-
4022
4484
  end
4023
4485
 
4024
4486
  return compact_contents
@@ -4029,7 +4491,7 @@ def compile(input_file_path, *output_file_name)
4029
4491
 
4030
4492
  if !code_block_starting_locations.empty?
4031
4493
 
4032
- controlregexp = /(if |for |while |\(function\(|= function\(|((=|:)\s+\{))/
4494
+ controlregexp = /(if |for |while |,function\(|\(function\(|= function\(|((=|:)\s+\{))/
4033
4495
 
4034
4496
  code_block_starting_locations = [0, code_block_starting_locations, -1].flatten
4035
4497
 
@@ -4071,7 +4533,7 @@ def compile(input_file_path, *output_file_name)
4071
4533
 
4072
4534
  current_block.each_with_index do |line, index|
4073
4535
 
4074
- if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n")
4536
+ if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n") or line.lstrip.include?("});\n")
4075
4537
 
4076
4538
  end_counter += 1
4077
4539
 
@@ -4105,7 +4567,7 @@ def compile(input_file_path, *output_file_name)
4105
4567
 
4106
4568
  block_end = current_block.index(block_extract[-1])
4107
4569
 
4108
- current_block[block_start..block_end] = "--block#{block_counter}"
4570
+ current_block[block_start..block_end] = "--block#{block_counter}\n"
4109
4571
 
4110
4572
  block_counter += 1
4111
4573
 
@@ -4115,7 +4577,7 @@ def compile(input_file_path, *output_file_name)
4115
4577
 
4116
4578
  current_block.each_with_index do |line, index|
4117
4579
 
4118
- if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n")
4580
+ if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n") or line.lstrip.include?("});\n")
4119
4581
 
4120
4582
  end_counter += 1
4121
4583
 
@@ -4159,7 +4621,7 @@ def compile(input_file_path, *output_file_name)
4159
4621
 
4160
4622
  def replace_ignored_words(input_string)
4161
4623
 
4162
- ignorable_keywords = [/if/, /while/, /function/]
4624
+ ignorable_keywords = [/if/, /while/, /function/,/function/]
4163
4625
 
4164
4626
  dummy_replacement_words = ["eeuuff", "whaalesskkey", "conffoolotion"]
4165
4627
 
@@ -4175,6 +4637,14 @@ def compile(input_file_path, *output_file_name)
4175
4637
 
4176
4638
  javascript_regexp = /(if |for |while |\(function\(|= function\(|((=|:)\s+\{))/
4177
4639
 
4640
+ if declarable_variables.length > 0
4641
+
4642
+ declaration_string = "var " + declarable_variables.flatten.uniq.sort.join(", ") + ";\n\n"
4643
+
4644
+ javascript_file_contents = [declaration_string,javascript_file_contents].flatten
4645
+
4646
+ end
4647
+
4178
4648
  javascript_file_contents = javascript_file_contents.collect { |element| element.sub("Euuf", "if") }
4179
4649
 
4180
4650
  javascript_file_contents = javascript_file_contents.collect { |element| element.sub("whaaleskey", "while") }
@@ -4221,7 +4691,7 @@ def compile(input_file_path, *output_file_name)
4221
4691
 
4222
4692
  current_block = [current_block[0]] + current_block[1...-1].collect { |element| soft_tabs*(soft_tabs_counter)+element } + [current_block[-1]]
4223
4693
 
4224
- nested_block = current_block.reject { |row| !row.include?("--block") }
4694
+ nested_block = current_block.clone.reject { |row| !row.include?("--block") }
4225
4695
 
4226
4696
  nested_block = nested_block.collect { |element| element.split("--block")[1] }
4227
4697
 
@@ -4229,7 +4699,7 @@ def compile(input_file_path, *output_file_name)
4229
4699
 
4230
4700
  modified_nested_block = nested_block.clone
4231
4701
 
4232
- current_block = current_block.join
4702
+ current_block = current_block.join("\n")
4233
4703
 
4234
4704
  until modified_nested_block.empty?
4235
4705
 
@@ -4442,6 +4912,8 @@ def compile(input_file_path, *output_file_name)
4442
4912
 
4443
4913
  file_contents = compile_conditional_structures(file_contents, temp_file)
4444
4914
 
4915
+ file_contents = compile_blocks(file_contents,temp_file)
4916
+
4445
4917
  file_contents = compile_integers(file_contents)
4446
4918
 
4447
4919
  file_contents = compile_default_values(file_contents, temp_file)
@@ -4452,18 +4924,22 @@ def compile(input_file_path, *output_file_name)
4452
4924
 
4453
4925
  file_contents = compile_parallel_assignment(file_contents, temp_file)
4454
4926
 
4455
- file_contents = compile_arrays(file_contents, temp_file)
4927
+ file_contents,named_functions = compile_arrays(file_contents, named_functions, temp_file)
4456
4928
 
4457
4929
  file_contents = compile_strings(file_contents)
4458
4930
 
4931
+ list_of_variables, file_contents = get_variables(file_contents, temp_file,loop_vars)
4932
+
4459
4933
  file_contents, function_names = compile_named_functions(file_contents, named_functions, nested_functions, temp_file)
4460
4934
 
4461
- list_of_variables, file_contents = get_variables(file_contents, temp_file,loop_vars)
4935
+ func_names = function_names.dup
4462
4936
 
4463
4937
  file_contents, ruby_functions = compile_custom_function_map(file_contents)
4464
4938
 
4465
4939
  file_contents = compile_ruby_methods(file_contents)
4466
4940
 
4941
+ file_contents = compile_special_keywords(file_contents)
4942
+
4467
4943
  function_names << ruby_functions
4468
4944
 
4469
4945
  list_of_variables += loop_vars
@@ -4476,7 +4952,7 @@ def compile(input_file_path, *output_file_name)
4476
4952
 
4477
4953
  file_contents = compile_comments(file_contents, comments, temp_file)
4478
4954
 
4479
- file_contents = pretty_print_javascript(file_contents, temp_file)
4955
+ file_contents = pretty_print_javascript(file_contents, temp_file,list_of_variables+func_names)
4480
4956
 
4481
4957
  file_contents = compile_operators(file_contents)
4482
4958