nilac 0.0.4.3.4 → 0.0.4.3.6

Sign up to get free protection for your applications and to get access to all the features.
data/bin/nilac CHANGED
@@ -333,8 +333,6 @@ def compile(input_file_path, *output_file_name)
333
333
 
334
334
  test_string = string_extract[0..closed_curly_brace_index[0]]
335
335
 
336
- puts test_string
337
-
338
336
  original_string = test_string.dup
339
337
 
340
338
  if test_string.include?("{")
@@ -419,16 +417,48 @@ def compile(input_file_path, *output_file_name)
419
417
 
420
418
  def replace_singleline_comments(input_file_contents)
421
419
 
420
+ def replace_strings(input_string)
421
+
422
+ string_counter = 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
+ while input_string.include?("'")
435
+
436
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
437
+
438
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
439
+
440
+ string_counter += 1
441
+
442
+ end
443
+
444
+ return input_string
445
+
446
+ end
447
+
422
448
  single_line_comments = []
423
449
 
424
450
  singleline_comment_counter = 1
425
451
 
452
+ modified_file_contents = input_file_contents.clone
453
+
426
454
  for x in 0...input_file_contents.length
427
455
 
428
- current_row = input_file_contents[x]
456
+ current_row = replace_strings(input_file_contents[x])
429
457
 
430
458
  if current_row.include?("#")
431
459
 
460
+ current_row = modified_file_contents[x]
461
+
432
462
  comment_start = current_row.index("#")
433
463
 
434
464
  if current_row[comment_start+1] != "{"
@@ -443,13 +473,17 @@ def compile(input_file_path, *output_file_name)
443
473
 
444
474
  end
445
475
 
476
+ else
477
+
478
+ current_row = modified_file_contents[x]
479
+
446
480
  end
447
481
 
448
- input_file_contents[x] = current_row
482
+ modified_file_contents[x] = current_row
449
483
 
450
484
  end
451
485
 
452
- return input_file_contents, single_line_comments
486
+ return modified_file_contents, single_line_comments
453
487
 
454
488
  end
455
489
 
@@ -481,7 +515,7 @@ def compile(input_file_path, *output_file_name)
481
515
 
482
516
  key_word_locations << x
483
517
 
484
- elsif current_row.lstrip.include?("end\n") || current_row.include?("end")
518
+ elsif current_row.lstrip.eql?("end\n") || current_row.strip.eql?("end")
485
519
 
486
520
  end_locations << x
487
521
 
@@ -529,9 +563,9 @@ def compile(input_file_path, *output_file_name)
529
563
 
530
564
  modified_file_contents[code_block_begin] = code_block_begin_string
531
565
 
532
- rescue NoMethodError
533
-
534
- puts "Function compilation failed!"
566
+ #rescue NoMethodError
567
+ #
568
+ # puts "Function compilation failed!"
535
569
 
536
570
  end
537
571
 
@@ -610,12 +644,42 @@ def compile(input_file_path, *output_file_name)
610
644
 
611
645
  def arrayify_right_side(input_string)
612
646
 
647
+ def replace_strings(input_string)
648
+
649
+ string_counter = 0
650
+
651
+ while input_string.include?("\"")
652
+
653
+ string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
654
+
655
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
656
+
657
+ string_counter += 1
658
+
659
+ end
660
+
661
+ while input_string.include?("'")
662
+
663
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
664
+
665
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
666
+
667
+ string_counter += 1
668
+
669
+ end
670
+
671
+ return input_string
672
+
673
+ end
674
+
675
+ modified_input_string = input_string.dup
676
+
677
+ input_string = replace_strings(input_string)
678
+
613
679
  javascript_regexp = /(if |while |for |function |function\()/
614
680
 
615
681
  if input_string.include?("=") and input_string.index(javascript_regexp) == nil and input_string.strip[0..3] != "_ref" and !input_string.split("=")[1].include?("[")
616
682
 
617
- modified_input_string = input_string.dup
618
-
619
683
  right_side = input_string.split("=")[1]
620
684
 
621
685
  if right_side.include?(",")
@@ -640,19 +704,19 @@ def compile(input_file_path, *output_file_name)
640
704
 
641
705
  replacement_string = " [#{replacement_string.join(",").strip}]\n"
642
706
 
643
- input_string = input_string.sub(right_side,replacement_string)
707
+ modified_input_string = modified_input_string.sub(right_side,replacement_string)
644
708
 
645
709
  end
646
710
 
647
711
  end
648
712
 
649
- return input_string
713
+ return modified_input_string
650
714
 
651
715
  end
652
716
 
653
717
  input_file_contents = input_file_contents.collect {|element| arrayify_right_side(element)}
654
718
 
655
- possible_variable_lines = input_file_contents.reject { |element| !element.include? "=" }
719
+ possible_variable_lines = input_file_contents.clone.reject { |element| !element.include? "=" }
656
720
 
657
721
  possible_parallel_assignment = possible_variable_lines.reject { |element| !element.split("=")[0].include? "," }
658
722
 
@@ -740,10 +804,30 @@ def compile(input_file_path, *output_file_name)
740
804
 
741
805
  end
742
806
 
743
- possible_default_values = input_file_contents.dup.reject { |element| !element.include?("def") }
807
+ reject_regexp = /(function |Euuf |if |else|elsuf|switch |case|while |whaaleskey |for )/
808
+
809
+ input_file_contents = input_file_contents.collect { |element| element.gsub("==", "equalequal") }
810
+
811
+ input_file_contents = input_file_contents.collect { |element| element.gsub("!=", "notequal") }
812
+
813
+ input_file_contents = input_file_contents.collect { |element| element.gsub("+=", "plusequal") }
814
+
815
+ input_file_contents = input_file_contents.collect { |element| element.gsub("-=", "minusequal") }
816
+
817
+ input_file_contents = input_file_contents.collect { |element| element.gsub("*=", "multiequal") }
818
+
819
+ input_file_contents = input_file_contents.collect { |element| element.gsub("/=", "divequal") }
820
+
821
+ input_file_contents = input_file_contents.collect { |element| element.gsub("%=", "modequal") }
822
+
823
+ input_file_contents = input_file_contents.collect { |element| element.gsub("=~", "matchequal") }
824
+
825
+ possible_default_values = input_file_contents.dup.reject { |element| (!element.include?("def")) }
744
826
 
745
827
  possible_default_values = possible_default_values.reject { |element| !element.include?("=") }
746
828
 
829
+ possible_default_values = possible_default_values.reject {|element| !element.index(reject_regexp) == nil}
830
+
747
831
  if !possible_default_values.empty?
748
832
 
749
833
  possible_default_values.each do |line|
@@ -776,12 +860,56 @@ def compile(input_file_path, *output_file_name)
776
860
 
777
861
  line_by_line_contents = read_file_line_by_line(temporary_nila_file)
778
862
 
863
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("plusequal", "+=") }
864
+
865
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("minusequal", "-=") }
866
+
867
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("multiequal", "*=") }
868
+
869
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("divequal", "/=") }
870
+
871
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("modequal", "%=") }
872
+
873
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("equalequal", "==") }
874
+
875
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("notequal", "!=") }
876
+
877
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("matchequal", "=~") }
878
+
779
879
  return line_by_line_contents
780
880
 
781
881
  end
782
882
 
783
883
  def get_variables(input_file_contents, temporary_nila_file, *loop_variables)
784
884
 
885
+ def replace_strings(input_string)
886
+
887
+ string_counter = 0
888
+
889
+ while input_string.include?("\"")
890
+
891
+ string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
892
+
893
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
894
+
895
+ string_counter += 1
896
+
897
+ end
898
+
899
+ while input_string.include?("'")
900
+
901
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
902
+
903
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
904
+
905
+ string_counter += 1
906
+
907
+ end
908
+
909
+ return input_string
910
+
911
+ end
912
+
785
913
  variables = []
786
914
 
787
915
  input_file_contents = input_file_contents.collect { |element| element.gsub("==", "equalequal") }
@@ -800,6 +928,10 @@ def compile(input_file_path, *output_file_name)
800
928
 
801
929
  input_file_contents = input_file_contents.collect { |element| element.gsub("=~", "matchequal") }
802
930
 
931
+ modified_file_contents = input_file_contents.clone
932
+
933
+ input_file_contents = input_file_contents.collect {|element| replace_strings(element)}
934
+
803
935
  javascript_regexp = /(if |while |for )/
804
936
 
805
937
  for x in 0...input_file_contents.length
@@ -825,8 +957,9 @@ def compile(input_file_path, *output_file_name)
825
957
 
826
958
  end
827
959
 
828
- variables << current_row_split[0]
960
+ current_row_split[0] = current_row_split[0].split(".",2)[0].strip if current_row_split[0].include?(".")
829
961
 
962
+ variables << current_row_split[0]
830
963
 
831
964
  end
832
965
 
@@ -834,7 +967,7 @@ def compile(input_file_path, *output_file_name)
834
967
 
835
968
  end
836
969
 
837
- file_contents_as_string = input_file_contents.join
970
+ file_contents_as_string = modified_file_contents.join
838
971
 
839
972
  file_id = open(temporary_nila_file, 'w')
840
973
 
@@ -937,7 +1070,7 @@ def compile(input_file_path, *output_file_name)
937
1070
 
938
1071
  end
939
1072
 
940
- def compile_arrays(input_file_contents, temporary_nila_file)
1073
+ def compile_arrays(input_file_contents, named_functions, temporary_nila_file)
941
1074
 
942
1075
  def compile_w_arrays(input_file_contents)
943
1076
 
@@ -1189,7 +1322,7 @@ def compile(input_file_path, *output_file_name)
1189
1322
 
1190
1323
  left, right = usage.split("<<")
1191
1324
 
1192
- input_file_contents[input_file_contents.index(usage)] = left.rstrip + ".push(#{right.lstrip})"
1325
+ input_file_contents[input_file_contents.index(usage)] = left.rstrip + ".push(#{right.strip})\n\n"
1193
1326
 
1194
1327
  end
1195
1328
 
@@ -1205,7 +1338,15 @@ def compile(input_file_path, *output_file_name)
1205
1338
 
1206
1339
  input_file_contents = compile_array_operators(input_file_contents)
1207
1340
 
1208
- return input_file_contents
1341
+ named_functions = named_functions.collect {|func| compile_w_arrays(func)}
1342
+
1343
+ named_functions = named_functions.collect { |func| compile_array_indexing(func)}
1344
+
1345
+ named_functions = named_functions.collect {|func| compile_multiline(func, temporary_nila_file)}
1346
+
1347
+ named_functions = named_functions.collect {|func| compile_array_operators(func)}
1348
+
1349
+ return input_file_contents, named_functions
1209
1350
 
1210
1351
 
1211
1352
  end
@@ -1214,8 +1355,40 @@ def compile(input_file_path, *output_file_name)
1214
1355
 
1215
1356
  def compile_multiline_hashes(input_file_contents,temporary_nila_file)
1216
1357
 
1358
+ def replace_strings(input_string)
1359
+
1360
+ string_counter = 0
1361
+
1362
+ while input_string.include?("\"")
1363
+
1364
+ string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
1365
+
1366
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
1367
+
1368
+ string_counter += 1
1369
+
1370
+ end
1371
+
1372
+ while input_string.include?("'")
1373
+
1374
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
1375
+
1376
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
1377
+
1378
+ string_counter += 1
1379
+
1380
+ end
1381
+
1382
+ return input_string
1383
+
1384
+ end
1385
+
1217
1386
  javascript_regexp = /(if |while |for |function |function\()/
1218
1387
 
1388
+ modified_file_contents = input_file_contents.clone
1389
+
1390
+ input_file_contents = input_file_contents.collect {|line| replace_strings(line)}
1391
+
1219
1392
  possible_hashes = input_file_contents.reject { |element| !element.include?("{") }
1220
1393
 
1221
1394
  possible_multiline_hashes = possible_hashes.reject { |element| element.include?("}") }
@@ -1228,21 +1401,21 @@ def compile(input_file_path, *output_file_name)
1228
1401
 
1229
1402
  index = input_file_contents.index(starting_line)
1230
1403
 
1231
- line = starting_line
1404
+ line = modified_file_contents[index]
1232
1405
 
1233
1406
  until line.include?("}\n")
1234
1407
 
1235
1408
  index += 1
1236
1409
 
1237
- line = input_file_contents[index]
1410
+ line = modified_file_contents[index]
1238
1411
 
1239
1412
  end
1240
1413
 
1241
- multiline_hashes << input_file_contents[input_file_contents.index(starting_line)..index]
1414
+ multiline_hashes << modified_file_contents[input_file_contents.index(starting_line)..index]
1242
1415
 
1243
1416
  end
1244
1417
 
1245
- joined_file_contents = input_file_contents.join
1418
+ joined_file_contents = modified_file_contents.join
1246
1419
 
1247
1420
  multiline_hashes.each do |hash|
1248
1421
 
@@ -1310,6 +1483,8 @@ def compile(input_file_path, *output_file_name)
1310
1483
 
1311
1484
  possible_inline_hashes = possible_inline_hashes.reject {|element| element.index(javascript_regexp) != nil}
1312
1485
 
1486
+ possible_inline_hashes = possible_inline_hashes.reject {|element| element.include?("{}")}
1487
+
1313
1488
  possible_inline_hashes.each do |hash|
1314
1489
 
1315
1490
  hash = input_file_contents[modified_file_contents.index(hash)]
@@ -1560,7 +1735,37 @@ def compile(input_file_path, *output_file_name)
1560
1735
  #This method will pickup and declare all the variables inside a function block. In future, this method will be
1561
1736
  #merged with the get variables method
1562
1737
 
1563
- controlregexp = /(if |while |def |function |function\()/
1738
+ def replace_strings(input_string)
1739
+
1740
+ string_counter = 0
1741
+
1742
+ while input_string.include?("\"")
1743
+
1744
+ string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
1745
+
1746
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
1747
+
1748
+ string_counter += 1
1749
+
1750
+ end
1751
+
1752
+ while input_string.include?("'")
1753
+
1754
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
1755
+
1756
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
1757
+
1758
+ string_counter += 1
1759
+
1760
+ end
1761
+
1762
+ return input_string
1763
+
1764
+ end
1765
+
1766
+ input_function_block = input_function_block.collect {|element| replace_strings(element)}
1767
+
1768
+ controlregexp = /(if |Euuf |while |def |function |function\()/
1564
1769
 
1565
1770
  variables = []
1566
1771
 
@@ -1644,7 +1849,7 @@ def compile(input_file_path, *output_file_name)
1644
1849
 
1645
1850
  if !rejected_array[0].strip.eql?("}")
1646
1851
 
1647
- if !rejected_array[0].strip.eql?("end")
1852
+ if !rejected_array[0].strip.eql?("end") and !rejected_array[0].strip.include?("--single_line_comment")
1648
1853
 
1649
1854
  last_statement = rejected_array[0]
1650
1855
 
@@ -1970,13 +2175,25 @@ def compile(input_file_path, *output_file_name)
1970
2175
 
1971
2176
  modified_file_contents = input_file_contents.dup
1972
2177
 
2178
+ javascript_regexp = /(if |for |while |\(function\(|= function\(|((=|:)\s+\{))/
2179
+
1973
2180
  input_file_contents.each_with_index do |line, index|
1974
2181
 
1975
2182
  function_map.each do |function|
1976
2183
 
1977
- if line.include?(function+"(") or line.include?(function+" ")
2184
+ if line.include?(function+"(") or line.include?(function+" ") and line.index(javascript_regexp) == nil
2185
+
2186
+ testsplit = line.split(function)
2187
+
2188
+ testsplit = testsplit.collect {|element| element.strip}
2189
+
2190
+ testsplit[0] = " " if testsplit[0].eql?("")
1978
2191
 
1979
- modified_file_contents[index] = line.sub(function, function_map_replacements[function])
2192
+ if testsplit[0][-1].eql?(" ") or testsplit[0].eql?("return")
2193
+
2194
+ modified_file_contents[index] = line.sub(function, function_map_replacements[function])
2195
+
2196
+ end
1980
2197
 
1981
2198
  end
1982
2199
 
@@ -1997,11 +2214,14 @@ def compile(input_file_path, *output_file_name)
1997
2214
 
1998
2215
  ".split" => ".split(\" \")",
1999
2216
 
2000
- ".strip" => ".replace(/^\s+|\s+$/g,'')",
2217
+ ".join" => ".join()",
2218
+
2219
+ ".strip" => ".replace(/^\\s+|\\s+$/g,'')",
2220
+
2221
+ ".lstrip" => ".replace(/^\\s+/g,\"\")",
2001
2222
 
2002
- ".lstrip" => ".replace(/^\s+/g,\"\")",
2223
+ ".rstrip" => ".replace(/\\s+$/g,\"\")"
2003
2224
 
2004
- ".rstrip" => ".replace(/\s+$/g,\"\")"
2005
2225
  }
2006
2226
 
2007
2227
  method_map = method_map_replacement.keys
@@ -2016,16 +2236,22 @@ def compile(input_file_path, *output_file_name)
2016
2236
 
2017
2237
  if line.match(method_map_regex)
2018
2238
 
2019
- unless method_match.include?(line+"(")
2239
+ method_match = line.match(method_map_regex).to_a[0]
2020
2240
 
2021
- puts line
2241
+ unless line.include?(method_match + "(")
2242
+
2243
+ line = line.sub(method_match,method_map_replacement[method_match])
2022
2244
 
2023
2245
  end
2024
2246
 
2025
2247
  end
2026
2248
 
2249
+ modified_file_contents[index] = line
2250
+
2027
2251
  end
2028
2252
 
2253
+ return modified_file_contents
2254
+
2029
2255
  end
2030
2256
 
2031
2257
  def compile_whitespace_delimited_functions(input_file_contents, function_names, temporary_nila_file)
@@ -2272,7 +2498,7 @@ def compile(input_file_path, *output_file_name)
2272
2498
 
2273
2499
  extracted_blocks = []
2274
2500
 
2275
- controlregexp = /(if |while |def )/
2501
+ controlregexp = /(if |while |def | do )/
2276
2502
 
2277
2503
  rejectionregexp = /( if | while )/
2278
2504
 
@@ -2290,7 +2516,16 @@ def compile(input_file_path, *output_file_name)
2290
2516
 
2291
2517
  possible_if_blocks.each_with_index do |block|
2292
2518
 
2293
- current_block += block
2519
+ unless current_block[-1] == block[0]
2520
+
2521
+ current_block += block
2522
+
2523
+ else
2524
+
2525
+ current_block += block[1..-1]
2526
+
2527
+ end
2528
+
2294
2529
 
2295
2530
  current_block.each_with_index do |line, index|
2296
2531
 
@@ -2458,7 +2693,7 @@ def compile(input_file_path, *output_file_name)
2458
2693
 
2459
2694
  if_statement_indexes = [0] + if_statement_indexes.flatten + [-1]
2460
2695
 
2461
- controlregexp = /(while |def )/
2696
+ controlregexp = /(while |def | do )/
2462
2697
 
2463
2698
  modified_input_contents, extracted_statements = extract_if_blocks(if_statement_indexes, input_file_contents.clone)
2464
2699
 
@@ -2570,7 +2805,7 @@ def compile(input_file_path, *output_file_name)
2570
2805
 
2571
2806
  extracted_blocks = []
2572
2807
 
2573
- controlregexp = /(if |while |def )/
2808
+ controlregexp = /(if |while |def | do )/
2574
2809
 
2575
2810
  rejectionregexp = /( if | while )/
2576
2811
 
@@ -2728,7 +2963,7 @@ def compile(input_file_path, *output_file_name)
2728
2963
 
2729
2964
  while_statement_indexes = [0] + while_statement_indexes.flatten + [-1]
2730
2965
 
2731
- controlregexp = /(if |def )/
2966
+ controlregexp = /(if |def | do )/
2732
2967
 
2733
2968
  modified_input_contents, extracted_statements = extract_while_blocks(while_statement_indexes, input_file_contents.clone)
2734
2969
 
@@ -2778,7 +3013,7 @@ def compile(input_file_path, *output_file_name)
2778
3013
 
2779
3014
  else
2780
3015
 
2781
- joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
3016
+ joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0])
2782
3017
 
2783
3018
  rejected_elements_index.delete_at(0)
2784
3019
 
@@ -2788,7 +3023,7 @@ def compile(input_file_path, *output_file_name)
2788
3023
 
2789
3024
  else
2790
3025
 
2791
- joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
3026
+ joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0])
2792
3027
 
2793
3028
  rejected_elements_index.delete_at(0)
2794
3029
 
@@ -2840,7 +3075,7 @@ def compile(input_file_path, *output_file_name)
2840
3075
 
2841
3076
  extracted_blocks = []
2842
3077
 
2843
- controlregexp = /(if |while |def |for )/
3078
+ controlregexp = /(if |while |def |for | do )/
2844
3079
 
2845
3080
  rejectionregexp = /( if | while )/
2846
3081
 
@@ -3044,7 +3279,7 @@ def compile(input_file_path, *output_file_name)
3044
3279
 
3045
3280
  for_statement_indexes = [0] + for_statement_indexes.flatten + [-1]
3046
3281
 
3047
- controlregexp = /(if |def |while )/
3282
+ controlregexp = /(if |def |while | do )/
3048
3283
 
3049
3284
  modified_input_contents, extracted_statements = extract_for_blocks(for_statement_indexes, input_file_contents.clone)
3050
3285
 
@@ -3104,7 +3339,7 @@ def compile(input_file_path, *output_file_name)
3104
3339
 
3105
3340
  else
3106
3341
 
3107
- joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
3342
+ joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0])
3108
3343
 
3109
3344
  rejected_elements_index.delete_at(0)
3110
3345
 
@@ -3470,8 +3705,6 @@ def compile(input_file_path, *output_file_name)
3470
3705
 
3471
3706
  file_contents = compile_ternary_if(input_file_contents)
3472
3707
 
3473
- puts file_contents
3474
-
3475
3708
  file_contents, rejected_lines = ignore_statement_modifiers(file_contents)
3476
3709
 
3477
3710
  file_contents = replace_unless_until(file_contents)
@@ -3696,6 +3929,130 @@ def compile(input_file_path, *output_file_name)
3696
3929
 
3697
3930
  end
3698
3931
 
3932
+ def compile_blocks(input_file_contents,temporary_nila_file)
3933
+
3934
+ def compile_one_line_blocks(input_block)
3935
+
3936
+ block_parameters, block_contents = input_block[1...-1].split("|",2)[1].split("|",2)
3937
+
3938
+ compiled_block = "function(#{block_parameters.lstrip.rstrip}) {\n\n #{block_contents.strip} \n\n}"
3939
+
3940
+ return compiled_block
3941
+
3942
+ end
3943
+
3944
+ input_file_contents = input_file_contents.collect {|element| element.gsub("append","appand")}
3945
+
3946
+ possible_blocks = input_file_contents.reject {|line| !line.include?(" do ")}
3947
+
3948
+ unless possible_blocks.empty?
3949
+
3950
+ possible_blocks.each do |starting_line|
3951
+
3952
+ index_counter = starting_counter = input_file_contents.index(starting_line)
3953
+
3954
+ line = starting_line
3955
+
3956
+ until line.strip.eql?("end")
3957
+
3958
+ index_counter += 1
3959
+
3960
+ line = input_file_contents[index_counter]
3961
+
3962
+ end
3963
+
3964
+ loop_extract = input_file_contents[starting_counter..index_counter]
3965
+
3966
+ loop_condition, block = loop_extract.join.split(" do ")
3967
+
3968
+ block = block.split("end")[0]
3969
+
3970
+ replacement_string = "#{loop_condition.rstrip} blockky {#{block.strip}}_!"
3971
+
3972
+ input_file_contents[starting_counter..index_counter] = replacement_string
3973
+
3974
+ end
3975
+
3976
+ end
3977
+
3978
+ possible_blocks = input_file_contents.reject{ |element| !element.include?(" blockky ")}
3979
+
3980
+ possible_blocks = possible_blocks.reject {|element| !element.include?("{") and !element.include?("}")}
3981
+
3982
+ modified_file_contents = input_file_contents.clone
3983
+
3984
+ unless possible_blocks.empty?
3985
+
3986
+ possible_blocks.each do |loop|
3987
+
3988
+ original_loop = loop.clone
3989
+
3990
+ string_counter = 1
3991
+
3992
+ extracted_string = []
3993
+
3994
+ while loop.include?("\"")
3995
+
3996
+ string_extract = loop[loop.index("\"")..loop.index("\"",loop.index("\"")+1)]
3997
+
3998
+ extracted_string << string_extract
3999
+
4000
+ loop = loop.sub(string_extract,"--repstring#{string_counter}")
4001
+
4002
+ string_counter += 1
4003
+
4004
+ end
4005
+
4006
+ block_extract = loop[loop.index("{")..loop.index("}_!")]
4007
+
4008
+ compiled_block = ""
4009
+
4010
+ if block_extract.count("|") == 2
4011
+
4012
+ compiled_block = compile_one_line_blocks(block_extract)
4013
+
4014
+ extracted_string.each_with_index do |string,index|
4015
+
4016
+ compiled_block = compiled_block.sub("--repstring#{index+1}",string)
4017
+
4018
+ end
4019
+
4020
+ else
4021
+
4022
+ compiled_block = block_extract[1...-1].lstrip.rstrip
4023
+
4024
+ extracted_string.each_with_index do |string,index|
4025
+
4026
+ compiled_block = compiled_block.sub("--repstring#{index+1}",string)
4027
+
4028
+ end
4029
+
4030
+ end
4031
+
4032
+ caller_func = loop.split(" blockky ")[0]
4033
+
4034
+ replacement_string = "#{caller_func.rstrip}(#{compiled_block.lstrip})"
4035
+
4036
+ modified_file_contents[input_file_contents.index(original_loop)] = replacement_string
4037
+
4038
+ end
4039
+
4040
+ end
4041
+
4042
+ modified_file_contents = modified_file_contents.collect {|element| element.gsub("appand","append")}
4043
+
4044
+ file_id = open(temporary_nila_file, 'w')
4045
+
4046
+ file_id.write(modified_file_contents.join)
4047
+
4048
+ file_id.close()
4049
+
4050
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
4051
+
4052
+ return line_by_line_contents
4053
+
4054
+ end
4055
+
3699
4056
  def add_semicolons(input_file_contents)
3700
4057
 
3701
4058
  def comment(input_string)
@@ -3912,7 +4269,7 @@ def compile(input_file_path, *output_file_name)
3912
4269
 
3913
4270
  end
3914
4271
 
3915
- block_ending_lines = file_contents.dup.each_index.select { |index| (file_contents[index].eql? " }\n" or file_contents[index].eql? " };\n")}
4272
+ 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"))}
3916
4273
 
3917
4274
  modified_file_contents = file_contents.dup
3918
4275
 
@@ -3942,19 +4299,19 @@ def compile(input_file_path, *output_file_name)
3942
4299
 
3943
4300
  end
3944
4301
 
3945
- block_ending_lines = modified_file_contents.dup.each_index.select { |index| (modified_file_contents[index].eql? " }\n" or modified_file_contents[index].eql? " };\n") }
4302
+ 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")) }
3946
4303
 
3947
4304
  starting_index = starting_line_indices[0]
3948
4305
 
3949
4306
  end
3950
4307
 
3951
- rescue TypeError
3952
-
3953
- puts "Whitespace was left unfixed!"
3954
-
3955
- rescue ArgumentError
3956
-
3957
- puts "Whitespace was left unfixed!"
4308
+ #rescue TypeError
4309
+ #
4310
+ # puts "Whitespace was left unfixed!"
4311
+ #
4312
+ #rescue ArgumentError
4313
+ #
4314
+ # puts "Whitespace was left unfixed!"
3958
4315
 
3959
4316
  end
3960
4317
 
@@ -3986,7 +4343,6 @@ def compile(input_file_path, *output_file_name)
3986
4343
 
3987
4344
  starting_index = code_block_locations[0]
3988
4345
 
3989
-
3990
4346
  end
3991
4347
 
3992
4348
  return compact_contents
@@ -4039,7 +4395,7 @@ def compile(input_file_path, *output_file_name)
4039
4395
 
4040
4396
  current_block.each_with_index do |line, index|
4041
4397
 
4042
- if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n")
4398
+ if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n") or line.lstrip.include?("});\n")
4043
4399
 
4044
4400
  end_counter += 1
4045
4401
 
@@ -4073,7 +4429,7 @@ def compile(input_file_path, *output_file_name)
4073
4429
 
4074
4430
  block_end = current_block.index(block_extract[-1])
4075
4431
 
4076
- current_block[block_start..block_end] = "--block#{block_counter}"
4432
+ current_block[block_start..block_end] = "--block#{block_counter}\n"
4077
4433
 
4078
4434
  block_counter += 1
4079
4435
 
@@ -4083,7 +4439,7 @@ def compile(input_file_path, *output_file_name)
4083
4439
 
4084
4440
  current_block.each_with_index do |line, index|
4085
4441
 
4086
- if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n")
4442
+ if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n") or line.lstrip.include?("});\n")
4087
4443
 
4088
4444
  end_counter += 1
4089
4445
 
@@ -4189,7 +4545,7 @@ def compile(input_file_path, *output_file_name)
4189
4545
 
4190
4546
  current_block = [current_block[0]] + current_block[1...-1].collect { |element| soft_tabs*(soft_tabs_counter)+element } + [current_block[-1]]
4191
4547
 
4192
- nested_block = current_block.reject { |row| !row.include?("--block") }
4548
+ nested_block = current_block.clone.reject { |row| !row.include?("--block") }
4193
4549
 
4194
4550
  nested_block = nested_block.collect { |element| element.split("--block")[1] }
4195
4551
 
@@ -4197,7 +4553,7 @@ def compile(input_file_path, *output_file_name)
4197
4553
 
4198
4554
  modified_nested_block = nested_block.clone
4199
4555
 
4200
- current_block = current_block.join
4556
+ current_block = current_block.join("\n")
4201
4557
 
4202
4558
  until modified_nested_block.empty?
4203
4559
 
@@ -4410,6 +4766,8 @@ def compile(input_file_path, *output_file_name)
4410
4766
 
4411
4767
  file_contents = compile_conditional_structures(file_contents, temp_file)
4412
4768
 
4769
+ file_contents = compile_blocks(file_contents,temp_file)
4770
+
4413
4771
  file_contents = compile_integers(file_contents)
4414
4772
 
4415
4773
  file_contents = compile_default_values(file_contents, temp_file)
@@ -4420,17 +4778,17 @@ def compile(input_file_path, *output_file_name)
4420
4778
 
4421
4779
  file_contents = compile_parallel_assignment(file_contents, temp_file)
4422
4780
 
4423
- file_contents = compile_arrays(file_contents, temp_file)
4781
+ file_contents,named_functions = compile_arrays(file_contents, named_functions, temp_file)
4424
4782
 
4425
4783
  file_contents = compile_strings(file_contents)
4426
4784
 
4427
4785
  file_contents, function_names = compile_named_functions(file_contents, named_functions, nested_functions, temp_file)
4428
4786
 
4429
- list_of_variables, file_contents = get_variables(file_contents, temp_file,loop_vars)
4787
+ list_of_variables, file_contents = get_variables(file_contents, temp_file,loop_vars+function_names)
4430
4788
 
4431
4789
  file_contents, ruby_functions = compile_custom_function_map(file_contents)
4432
4790
 
4433
- #compile_ruby_methods(file_contents)
4791
+ file_contents = compile_ruby_methods(file_contents)
4434
4792
 
4435
4793
  function_names << ruby_functions
4436
4794
 
@@ -4514,7 +4872,7 @@ def find_file_path(input_path, file_extension)
4514
4872
 
4515
4873
  end
4516
4874
 
4517
- nilac_version = "0.0.4.3.3"
4875
+ nilac_version = "0.0.4.3.4"
4518
4876
 
4519
4877
  opts = Slop.parse do
4520
4878
  on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"