nilac 0.0.4.0.1 → 0.0.4.1

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
@@ -327,29 +327,37 @@ def compile(input_file_path,*output_file_name)
327
327
 
328
328
  finder_location = current_location
329
329
 
330
- while current_string.index(nila_regexp) == nil
330
+ begin
331
331
 
332
- finder_location -= 1
332
+ while current_string.index(nila_regexp) == nil
333
333
 
334
- current_string = modified_file_contents[finder_location]
334
+ finder_location -= 1
335
335
 
336
- end
336
+ current_string = modified_file_contents[finder_location]
337
+
338
+ end
339
+
340
+ code_block_begin = finder_location
337
341
 
338
- code_block_begin = finder_location
342
+ code_block_end = current_location
339
343
 
340
- code_block_end = current_location
344
+ start_blocks << code_block_begin
341
345
 
342
- start_blocks << code_block_begin
346
+ end_blocks << code_block_end
343
347
 
344
- end_blocks << code_block_end
348
+ code_block_begin_string_split = modified_file_contents[code_block_begin].split(" ")
345
349
 
346
- code_block_begin_string_split = modified_file_contents[code_block_begin].split(" ")
350
+ code_block_begin_string_split[0] = code_block_begin_string_split[0].reverse
347
351
 
348
- code_block_begin_string_split[0] = code_block_begin_string_split[0].reverse
352
+ code_block_begin_string = code_block_begin_string_split.join(" ")
349
353
 
350
- code_block_begin_string = code_block_begin_string_split.join(" ")
354
+ modified_file_contents[code_block_begin] = code_block_begin_string
351
355
 
352
- modified_file_contents[code_block_begin] = code_block_begin_string
356
+ rescue NoMethodError
357
+
358
+ puts "Function compilation failed!"
359
+
360
+ end
353
361
 
354
362
  end
355
363
 
@@ -399,6 +407,7 @@ def compile(input_file_path,*output_file_name)
399
407
 
400
408
  end
401
409
 
410
+
402
411
  file_id = open(temporary_nila_file, 'w')
403
412
 
404
413
  file_id.write(joined_file_contents)
@@ -476,8 +485,6 @@ def compile(input_file_path,*output_file_name)
476
485
 
477
486
  def parse_default_values(input_function_definition)
478
487
 
479
- puts input_function_definition
480
-
481
488
  split1,split2 = input_function_definition.split("(")
482
489
 
483
490
  split2,split3 = split2.split(")")
@@ -546,13 +553,17 @@ def compile(input_file_path,*output_file_name)
546
553
 
547
554
  def get_variables(input_file_contents,temporary_nila_file)
548
555
 
549
- #This method is solely focused on getting a list of variables to be declared.
550
- #Since Javascript is a dynamic language, Nila doesn't have to worry about following up on those variables.
556
+ variables = []
551
557
 
552
- #Semicolons are required in Javascript for successful compilation. So this method adds semicolons at the end of each
553
- #variable usage statements.
558
+ input_file_contents = input_file_contents.collect {|element| element.gsub("+=","plusequal")}
554
559
 
555
- variables = []
560
+ input_file_contents = input_file_contents.collect {|element| element.gsub("-=","minusequal")}
561
+
562
+ input_file_contents = input_file_contents.collect {|element| element.gsub("*=","multiequal")}
563
+
564
+ input_file_contents = input_file_contents.collect {|element| element.gsub("/=","divequal")}
565
+
566
+ input_file_contents = input_file_contents.collect {|element| element.gsub("%=","modequal")}
556
567
 
557
568
  for x in 0...input_file_contents.length
558
569
 
@@ -600,6 +611,16 @@ def compile(input_file_path,*output_file_name)
600
611
 
601
612
  end
602
613
 
614
+ line_by_line_contents = line_by_line_contents.collect {|element| element.gsub("plusequal","+=")}
615
+
616
+ line_by_line_contents = line_by_line_contents.collect {|element| element.gsub("minusequal","-=")}
617
+
618
+ line_by_line_contents = line_by_line_contents.collect {|element| element.gsub("multiequal","*=")}
619
+
620
+ line_by_line_contents = line_by_line_contents.collect {|element| element.gsub("divequal","/=")}
621
+
622
+ line_by_line_contents = line_by_line_contents.collect {|element| element.gsub("modequal","%=")}
623
+
603
624
  return variables.uniq,line_by_line_contents
604
625
 
605
626
  end
@@ -730,13 +751,6 @@ def compile(input_file_path,*output_file_name)
730
751
 
731
752
  def compile_array_indexing(input_file_contents)
732
753
 
733
- #Nila allows two different kinds of indexing operations on arrays and strings. They are
734
-
735
- #1. Using Ranges => numbers[0...5]
736
- #2. Using Start and End Indexes => numbers[0,5]
737
-
738
- #This method implements this Nila feature
739
-
740
754
  possible_indexing_operation = input_file_contents.dup.reject {|element| !element.include?"[" and !element.include?"]"}
741
755
 
742
756
  possible_range_indexing = possible_indexing_operation.reject {|element| !element.include?".."}
@@ -978,13 +992,21 @@ def compile(input_file_path,*output_file_name)
978
992
 
979
993
  rejected_array = reversed_input_array.reject {|content| content.lstrip.eql?("")}
980
994
 
981
- rejected_array = rejected_array.reject {|content| content.strip.eql? "}"}
995
+ rejected_array = rejected_array[1..-1]
996
+
997
+ if !rejected_array[0].strip.eql?("}")
982
998
 
983
- last_statement = rejected_array[0]
999
+ if !rejected_array[0].strip.eql?("end")
984
1000
 
985
- replacement_string = "return #{last_statement.lstrip}"
1001
+ last_statement = rejected_array[0]
986
1002
 
987
- input_array[input_array.index(last_statement)] = replacement_string
1003
+ replacement_string = "return #{last_statement.lstrip}"
1004
+
1005
+ input_array[input_array.index(last_statement)] = replacement_string
1006
+
1007
+ end
1008
+
1009
+ end
988
1010
 
989
1011
  end
990
1012
 
@@ -1270,7 +1292,7 @@ def compile(input_file_path,*output_file_name)
1270
1292
 
1271
1293
  "puts" => "console.log",
1272
1294
 
1273
- "print" => "console.log"
1295
+ "print" => "process.stdout.write"
1274
1296
 
1275
1297
  }
1276
1298
 
@@ -1336,30 +1358,38 @@ def compile(input_file_path,*output_file_name)
1336
1358
 
1337
1359
  end
1338
1360
 
1339
- input_file_contents[-1] = input_file_contents[-1] + "\n" if !input_file_contents[-1].include?("\n")
1361
+ begin
1340
1362
 
1341
- joined_file_contents = input_file_contents.join
1363
+ input_file_contents[-1] = input_file_contents[-1] + "\n" if !input_file_contents[-1].include?("\n")
1364
+
1365
+ joined_file_contents = input_file_contents.join
1342
1366
 
1343
- function_names.each do |list_of_functions|
1367
+ function_names.each do |list_of_functions|
1344
1368
 
1345
- list_of_functions.each do |function|
1369
+ list_of_functions.each do |function|
1346
1370
 
1347
- matching_strings = extract(joined_file_contents,function+" ","\n")
1371
+ matching_strings = extract(joined_file_contents,function+" ","\n")
1348
1372
 
1349
- matching_strings.each do |string|
1373
+ matching_strings.each do |string|
1350
1374
 
1351
- modified_string = string.dup
1375
+ modified_string = string.dup
1352
1376
 
1353
- modified_string = modified_string.sub(function+" ",function+"(")
1377
+ modified_string = modified_string.sub(function+" ",function+"(")
1354
1378
 
1355
- modified_string = modified_string.sub("\n",")\n")
1379
+ modified_string = modified_string.sub("\n",")\n")
1356
1380
 
1357
- joined_file_contents = joined_file_contents.sub(string,modified_string)
1381
+ joined_file_contents = joined_file_contents.sub(string,modified_string)
1382
+
1383
+ end
1358
1384
 
1359
1385
  end
1360
1386
 
1361
1387
  end
1362
1388
 
1389
+ rescue NoMethodError
1390
+
1391
+ puts "Whitespace delimitation exited with errors!"
1392
+
1363
1393
  end
1364
1394
 
1365
1395
  file_id = open(temporary_nila_file, 'w')
@@ -1382,9 +1412,9 @@ def compile(input_file_path,*output_file_name)
1382
1412
 
1383
1413
  def compile_inline_conditionals(input_file_contents,temporary_nila_file)
1384
1414
 
1385
- conditionals = [/( if )/,/( while )/]
1415
+ conditionals = [/( if )/,/( while )/,/( unless )/,/( until )/]
1386
1416
 
1387
- plain_conditionals = [" if "," while "]
1417
+ plain_conditionals = [" if "," while "," unless "," until "]
1388
1418
 
1389
1419
  joined_file_contents = input_file_contents.join
1390
1420
 
@@ -1392,7 +1422,7 @@ def compile(input_file_path,*output_file_name)
1392
1422
 
1393
1423
  conditionals.each_with_index do |regex,index|
1394
1424
 
1395
- matching_lines = input_file_contents.reject {|content| !content.index(regex)}
1425
+ matching_lines = input_file_contents.reject {|content| content.index(regex).nil?}
1396
1426
 
1397
1427
  matching_lines.each do |line|
1398
1428
 
@@ -1400,11 +1430,19 @@ def compile(input_file_path,*output_file_name)
1400
1430
 
1401
1431
  if index == 0
1402
1432
 
1403
- output_statement = "if (#{line_split[1].lstrip.rstrip}) {\n\n#{line_split[0]}\n}\n"
1433
+ output_statement = "if (#{line_split[1].lstrip.rstrip.gsub("?","")}) {\n\n#{line_split[0]}\n}\n"
1404
1434
 
1405
1435
  elsif index == 1
1406
1436
 
1407
- output_statement = "while (#{line_split[1].lstrip.rstrip}) {\n\n#{line_split[0]}\n}\n"
1437
+ output_statement = "while (#{line_split[1].lstrip.rstrip.gsub("?","")}) {\n\n#{line_split[0]}\n}\n"
1438
+
1439
+ elsif index == 2
1440
+
1441
+ output_statement = "if (!(#{line_split[1].lstrip.rstrip.gsub("?","")})) {\n\n#{line_split[0]}\n}\n"
1442
+
1443
+ elsif index == 3
1444
+
1445
+ output_statement = "while (!(#{line_split[1].lstrip.rstrip.gsub("?","")})) {\n\n#{line_split[0]}\n}\n"
1408
1446
 
1409
1447
  end
1410
1448
 
@@ -1426,7 +1464,263 @@ def compile(input_file_path,*output_file_name)
1426
1464
 
1427
1465
  end
1428
1466
 
1429
- line_by_line_contents = compile_inline_conditionals(input_file_contents,temporary_nila_file)
1467
+ def compile_regular_if(input_file_contents,temporary_nila_file)
1468
+
1469
+ def convert_string_to_array(input_string,temporary_nila_file)
1470
+
1471
+ file_id = open(temporary_nila_file, 'w')
1472
+
1473
+ file_id.write(input_string)
1474
+
1475
+ file_id.close()
1476
+
1477
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
1478
+
1479
+ return line_by_line_contents
1480
+
1481
+ end
1482
+
1483
+ def extract_if_blocks(if_statement_indexes,input_file_contents)
1484
+
1485
+ possible_if_blocks = []
1486
+
1487
+ if_block_counter = 0
1488
+
1489
+ extracted_blocks = []
1490
+
1491
+ controlregexp = /(if |while |def )/
1492
+
1493
+ rejectionregexp = /( if | while )/
1494
+
1495
+ for x in 0...if_statement_indexes.length-1
1496
+
1497
+ possible_if_blocks << input_file_contents[if_statement_indexes[x]..if_statement_indexes[x+1]]
1498
+
1499
+ end
1500
+
1501
+ end_counter = 0
1502
+
1503
+ end_index = []
1504
+
1505
+ current_block = []
1506
+
1507
+ possible_if_blocks.each_with_index do |block|
1508
+
1509
+ current_block += block
1510
+
1511
+ current_block.each_with_index do |line,index|
1512
+
1513
+ if line.lstrip.eql? "end\n"
1514
+
1515
+ end_counter += 1
1516
+
1517
+ end_index << index
1518
+
1519
+ end
1520
+
1521
+ end
1522
+
1523
+ if end_counter > 0
1524
+
1525
+ until end_index.empty?
1526
+
1527
+ array_extract = current_block[0..end_index[0]].reverse
1528
+
1529
+ index_counter = 0
1530
+
1531
+ array_extract.each_with_index do |line|
1532
+
1533
+ break if (line.lstrip.index(controlregexp) != nil and line.lstrip.index(rejectionregexp).nil?)
1534
+
1535
+ index_counter += 1
1536
+
1537
+ end
1538
+
1539
+ block_extract = array_extract[0..index_counter].reverse
1540
+
1541
+ extracted_blocks << block_extract
1542
+
1543
+ block_start = current_block.index(block_extract[0])
1544
+
1545
+ block_end = current_block.index(block_extract[-1])
1546
+
1547
+ current_block[block_start..block_end] = "--ifblock#{if_block_counter}"
1548
+
1549
+ if_block_counter += 1
1550
+
1551
+ end_counter = 0
1552
+
1553
+ end_index = []
1554
+
1555
+ current_block.each_with_index do |line,index|
1556
+
1557
+ if line.lstrip.eql? "end\n"
1558
+
1559
+ end_counter += 1
1560
+
1561
+ end_index << index
1562
+
1563
+ end
1564
+
1565
+ end
1566
+
1567
+ end
1568
+
1569
+ end
1570
+
1571
+ end
1572
+
1573
+ return current_block,extracted_blocks
1574
+
1575
+ end
1576
+
1577
+ def compile_if_syntax(input_block)
1578
+
1579
+ starting_line = input_block[0]
1580
+
1581
+ starting_line = starting_line + "\n" if starting_line.lstrip == starting_line
1582
+
1583
+ junk,condition = starting_line.split("if")
1584
+
1585
+ input_block[0] = "Euuf (#{condition.lstrip.rstrip.gsub("?","")}) {\n"
1586
+
1587
+ input_block[-1] = input_block[-1].lstrip.sub("end","}")
1588
+
1589
+ elsif_statements = input_block.reject {|element| !element.include?("elsuf")}
1590
+
1591
+ elsif_statements.each do |statement|
1592
+
1593
+ junk,condition = statement.split("elsuf")
1594
+
1595
+ input_block[input_block.index(statement)] = "} elsuf (#{condition.lstrip.rstrip.gsub("?","")}) {\n"
1596
+
1597
+ end
1598
+
1599
+ else_statements = input_block.reject {|element| !element.include?("else")}
1600
+
1601
+ else_statements.each do |statement|
1602
+
1603
+ input_block[input_block.index(statement)] = "} else {\n"
1604
+
1605
+ end
1606
+
1607
+ return input_block
1608
+
1609
+ end
1610
+
1611
+ input_file_contents = input_file_contents.collect {|element| element.sub("elsif","elsuf")}
1612
+
1613
+ possible_if_statements = input_file_contents.reject {|element| !element.include?("if")}
1614
+
1615
+ possible_if_statements = possible_if_statements.reject {|element| element.include?("else")}
1616
+
1617
+ possible_if_statements = possible_if_statements.reject {|element| element.lstrip.include?(" if ")}
1618
+
1619
+ if !possible_if_statements.empty?
1620
+
1621
+ if_statement_indexes = []
1622
+
1623
+ possible_if_statements.each do |statement|
1624
+
1625
+ if_statement_indexes << input_file_contents.dup.each_index.select {|index| input_file_contents[index] == statement}
1626
+
1627
+ end
1628
+
1629
+ if_statement_indexes = if_statement_indexes.flatten + [-1]
1630
+
1631
+ controlregexp = /(while |def )/
1632
+
1633
+ modified_input_contents,extracted_statements = extract_if_blocks(if_statement_indexes,input_file_contents.clone)
1634
+
1635
+ joined_blocks = extracted_statements.collect {|element| element.join}
1636
+
1637
+ if_statements = joined_blocks.reject {|element| element.index(controlregexp) != nil}
1638
+
1639
+ rejected_elements = joined_blocks - if_statements
1640
+
1641
+ rejected_elements_index = []
1642
+
1643
+ rejected_elements.each do |element|
1644
+
1645
+ rejected_elements_index << joined_blocks.each_index.select {|index| joined_blocks[index] == element}
1646
+
1647
+ end
1648
+
1649
+ if_blocks_index = (0...extracted_statements.length).to_a
1650
+
1651
+ rejected_elements_index = rejected_elements_index.flatten
1652
+
1653
+ if_blocks_index -= rejected_elements_index
1654
+
1655
+ modified_if_statements = if_statements.collect {|string| convert_string_to_array(string,temporary_nila_file)}
1656
+
1657
+ modified_if_statements = modified_if_statements.collect {|block| compile_if_syntax(block)}.reverse
1658
+
1659
+ if_blocks_index = if_blocks_index.collect {|element| "--ifblock#{element}"}.reverse
1660
+
1661
+ rejected_elements_index = rejected_elements_index.collect {|element| "--ifblock#{element}"}.reverse
1662
+
1663
+ rejected_elements = rejected_elements.reverse
1664
+
1665
+ joined_file_contents = modified_input_contents.join
1666
+
1667
+ until if_blocks_index.empty? and rejected_elements_index.empty?
1668
+
1669
+ if !if_blocks_index.empty?
1670
+
1671
+ if joined_file_contents.include?(if_blocks_index[0])
1672
+
1673
+ joined_file_contents = joined_file_contents.sub(if_blocks_index[0],modified_if_statements[0].join)
1674
+
1675
+ if_blocks_index.delete_at(0)
1676
+
1677
+ modified_if_statements.delete_at(0)
1678
+
1679
+ else
1680
+
1681
+ joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0])
1682
+
1683
+ rejected_elements_index.delete_at(0)
1684
+
1685
+ rejected_elements.delete_at(0)
1686
+
1687
+ end
1688
+
1689
+ else
1690
+
1691
+ joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0])
1692
+
1693
+ rejected_elements_index.delete_at(0)
1694
+
1695
+ rejected_elements.delete_at(0)
1696
+
1697
+ end
1698
+
1699
+ end
1700
+
1701
+ else
1702
+
1703
+ joined_file_contents = input_file_contents.join
1704
+
1705
+ end
1706
+
1707
+ file_id = open(temporary_nila_file, 'w')
1708
+
1709
+ file_id.write(joined_file_contents)
1710
+
1711
+ file_id.close()
1712
+
1713
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
1714
+
1715
+ return line_by_line_contents
1716
+
1717
+ end
1718
+
1719
+ file_contents = compile_regular_if(input_file_contents,temporary_nila_file)
1720
+
1721
+ file_contents = compile_inline_conditionals(file_contents,temporary_nila_file)
1722
+
1723
+ return file_contents
1430
1724
 
1431
1725
  end
1432
1726
 
@@ -1694,6 +1988,10 @@ def compile(input_file_path,*output_file_name)
1694
1988
 
1695
1989
  puts "Whitespace was left unfixed!"
1696
1990
 
1991
+ rescue ArgumentError
1992
+
1993
+ puts "Whitespace was left unfixed!"
1994
+
1697
1995
  end
1698
1996
 
1699
1997
  return modified_file_contents,code_blocks
@@ -1731,141 +2029,254 @@ def compile(input_file_path,*output_file_name)
1731
2029
 
1732
2030
  end
1733
2031
 
1734
- javascript_regexp = /(if |while |function |function\()/
2032
+ def roll_blocks(input_file_contents,code_block_starting_locations)
1735
2033
 
1736
- locations = []
2034
+ if !code_block_starting_locations.empty?
1737
2035
 
1738
- javascript_file_contents = reset_tabs(javascript_file_contents)
2036
+ controlregexp = /(if |while |function |function\()/
1739
2037
 
1740
- joined_file_contents = javascript_file_contents.join
2038
+ code_block_starting_locations = [0,code_block_starting_locations,-1].flatten
1741
2039
 
1742
- code_block_starting_locations = find_all_matching_indices(joined_file_contents,javascript_regexp)
2040
+ possible_blocks = []
1743
2041
 
1744
- code_block_ending_locations = find_all_matching_indices(joined_file_contents,"}")
2042
+ block_counter = 0
1745
2043
 
1746
- combined_location = [code_block_starting_locations,code_block_ending_locations.dup].flatten.sort
2044
+ extracted_blocks = []
1747
2045
 
1748
- self_invoking_function_extract = joined_file_contents[code_block_starting_locations[0]..code_block_ending_locations[-1]]
2046
+ for x in 0...code_block_starting_locations.length-1
1749
2047
 
1750
- self_invoking_function_array = convert_string_to_array(self_invoking_function_extract,temporary_nila_file)
2048
+ possible_blocks << input_file_contents[code_block_starting_locations[x]..code_block_starting_locations[x+1]]
1751
2049
 
1752
- combined_location.delete_at(0); combined_location.delete_at(-1); code_block_ending_locations.delete_at(-1); code_block_starting_locations.delete_at(0)
2050
+ end
1753
2051
 
1754
- modified_self_invoking_array = self_invoking_function_array.dup
2052
+ end_counter = 0
1755
2053
 
1756
- for x in 1...self_invoking_function_array.length-1
2054
+ end_index = []
1757
2055
 
1758
- modified_self_invoking_array[x] = " " + self_invoking_function_array[x]
2056
+ current_block = []
1759
2057
 
1760
- end
2058
+ possible_blocks.each_with_index do |block|
1761
2059
 
1762
- modified_self_invoking_array[-1] = "\n\n" + modified_self_invoking_array[-1]
2060
+ current_block += block
1763
2061
 
1764
- nested_elements = []
2062
+ current_block.each_with_index do |line,index|
1765
2063
 
1766
- nested_indices = []
2064
+ if line.lstrip.eql? "}\n"
1767
2065
 
1768
- modified_starting_locations = code_block_starting_locations.dup
2066
+ end_counter += 1
1769
2067
 
1770
- while code_block_ending_locations.length > 0
2068
+ end_index << index
1771
2069
 
1772
- matching_location = combined_location[combined_location.index(code_block_ending_locations[0])-1]
2070
+ end
1773
2071
 
1774
- combined_location.delete(matching_location)
2072
+ end
1775
2073
 
1776
- location_among_start_locations = code_block_starting_locations.index(matching_location)
2074
+ if end_counter > 0
1777
2075
 
1778
- if location_among_start_locations == 0
2076
+ until end_index.empty?
1779
2077
 
1780
- locations << [[matching_location,combined_location[combined_location.index(code_block_ending_locations[0])]]]
2078
+ array_extract = current_block[0..end_index[0]].reverse
1781
2079
 
1782
- else
2080
+ index_counter = 0
1783
2081
 
1784
- nested_elements << [matching_location,combined_location[combined_location.index(code_block_ending_locations[0])]]
2082
+ array_extract.each_with_index do |line|
1785
2083
 
1786
- nested_indices << modified_starting_locations.index(matching_location)
2084
+ break if line.index(controlregexp) != nil
1787
2085
 
1788
- end
2086
+ index_counter += 1
1789
2087
 
1790
- combined_location.delete(code_block_ending_locations[0])
2088
+ end
1791
2089
 
1792
- code_block_ending_locations.delete_at(0)
2090
+ block_extract = array_extract[0..index_counter].reverse
1793
2091
 
1794
- code_block_starting_locations.delete(matching_location)
2092
+ extracted_blocks << block_extract
1795
2093
 
1796
- end
2094
+ block_start = current_block.index(block_extract[0])
1797
2095
 
1798
- nested_indices.each_with_index do |loc,index|
2096
+ block_end = current_block.index(block_extract[-1])
1799
2097
 
1800
- begin
2098
+ current_block[block_start..block_end] = "--block#{block_counter}"
1801
2099
 
1802
- locations[loc-1] << nested_elements[index]
2100
+ block_counter += 1
1803
2101
 
1804
- rescue NoMethodError
2102
+ end_counter = 0
1805
2103
 
1806
- puts "The pretty printing process exited with errors!"
2104
+ end_index = []
2105
+
2106
+ current_block.each_with_index do |line,index|
2107
+
2108
+ if line.lstrip.eql? "}\n"
2109
+
2110
+ end_counter += 1
2111
+
2112
+ end_index << index
2113
+
2114
+ end
2115
+
2116
+ end
2117
+
2118
+ end
2119
+
2120
+ end
2121
+
2122
+ end
2123
+
2124
+ return current_block,extracted_blocks
2125
+
2126
+ else
2127
+
2128
+ return input_file_contents,[]
1807
2129
 
1808
2130
  end
1809
2131
 
2132
+ end
2133
+
2134
+ def fix_syntax_indentation(input_file_contents)
1810
2135
 
2136
+ fixableregexp = /(else |elsuf )/
2137
+
2138
+ need_fixes = input_file_contents.reject {|line| line.index(fixableregexp).nil?}
2139
+
2140
+ need_fixes.each do |fix|
2141
+
2142
+ input_file_contents[input_file_contents.index(fix)] = input_file_contents[input_file_contents.index(fix)].sub(" ","")
2143
+
2144
+ end
2145
+
2146
+ return input_file_contents
1811
2147
 
1812
2148
  end
1813
2149
 
1814
- modified_locations = []
2150
+ javascript_regexp = /(if |while |function |function\()/
1815
2151
 
1816
- locations.each do |loc|
2152
+ javascript_file_contents = javascript_file_contents.collect {|element| element.sub("Euuf","if")}
2153
+
2154
+ javascript_file_contents = reset_tabs(javascript_file_contents)
1817
2155
 
1818
- modified_locations << loc.sort
2156
+ starting_locations = []
2157
+
2158
+ javascript_file_contents.each_with_index do |line,index|
2159
+
2160
+ if line.index(javascript_regexp) != nil
2161
+
2162
+ starting_locations << index
2163
+
2164
+ end
1819
2165
 
1820
2166
  end
1821
2167
 
1822
- modified_joined_file_contents = joined_file_contents.dup
2168
+ remaining_file_contents,blocks = roll_blocks(javascript_file_contents,starting_locations)
1823
2169
 
1824
- modified_joined_file_contents = modified_joined_file_contents.sub(self_invoking_function_extract,modified_self_invoking_array.join)
2170
+ joined_file_contents = ""
1825
2171
 
1826
- modified_locations.each do |location|
2172
+ if !blocks.empty?
1827
2173
 
1828
- soft_tabs_counter = 2
2174
+ remaining_file_contents = remaining_file_contents.collect {|element| " " + element}
1829
2175
 
1830
- location.each do |sublocation|
2176
+ main_blocks = remaining_file_contents.reject {|element| !element.include?("--block")}
1831
2177
 
1832
- string_extract = joined_file_contents[sublocation[0]..sublocation[1]]
2178
+ main_block_numbers = main_blocks.collect {|element| element.split("--block")[1]}
1833
2179
 
1834
- string_extract_array = convert_string_to_array(string_extract,temporary_nila_file)
2180
+ modified_blocks = main_blocks.dup
1835
2181
 
1836
- if soft_tabs_counter > 1
2182
+ soft_tabs = " "
1837
2183
 
1838
- string_extract_array[0] = " "*(soft_tabs_counter-1) + string_extract_array[0]
2184
+ for x in (0...main_blocks.length)
1839
2185
 
1840
- string_extract_array[-1] = " "*(soft_tabs_counter-1) + string_extract_array[-1]
2186
+ soft_tabs_counter = 1
1841
2187
 
1842
- end
2188
+ current_block = blocks[main_block_numbers[x].to_i]
1843
2189
 
1844
- for x in 1...string_extract_array.length-1
2190
+ current_block = [soft_tabs + current_block[0]] + current_block[1...-1] + [soft_tabs*(soft_tabs_counter)+current_block[-1]]
1845
2191
 
1846
- string_extract_array[x] = " "*soft_tabs_counter + string_extract_array[x]
2192
+ soft_tabs_counter += 1
1847
2193
 
1848
- end
2194
+ current_block = [current_block[0]] + current_block[1...-1].collect {|element| soft_tabs*(soft_tabs_counter)+element} + [current_block[-1]]
1849
2195
 
1850
- if soft_tabs_counter > 1
2196
+ nested_block = current_block.reject {|row| !row.include?("--block")}
1851
2197
 
1852
- modified_joined_file_contents = modified_joined_file_contents.sub(previous_formatting(string_extract,soft_tabs_counter-1,temporary_nila_file),string_extract_array.join)
2198
+ nested_block = nested_block.collect {|element| element.split("--block")[1]}
1853
2199
 
1854
- else
2200
+ nested_block = nested_block.collect {|element| element.rstrip.to_i}
2201
+
2202
+ modified_nested_block = nested_block.clone
2203
+
2204
+ current_block = current_block.join
2205
+
2206
+ until modified_nested_block.empty?
2207
+
2208
+ nested_block.each do |block_index|
2209
+
2210
+ nested_block_contents = blocks[block_index]
2211
+
2212
+ nested_block_contents = nested_block_contents[0...-1] + [soft_tabs*(soft_tabs_counter)+nested_block_contents[-1]]
2213
+
2214
+ soft_tabs_counter += 1
2215
+
2216
+ nested_block_contents = [nested_block_contents[0]] + nested_block_contents[1...-1].collect {|element| soft_tabs*(soft_tabs_counter)+element} + [nested_block_contents[-1]]
2217
+
2218
+ nested_block_contents = nested_block_contents.reject {|element| element.gsub(" ","").eql?("")}
2219
+
2220
+ current_block = current_block.sub("--block#{block_index}",nested_block_contents.join)
2221
+
2222
+ blocks[block_index] = nested_block_contents
2223
+
2224
+ modified_nested_block.delete_at(0)
2225
+
2226
+ soft_tabs_counter -= 1
2227
+
2228
+ end
2229
+
2230
+ current_block = convert_string_to_array(current_block,temporary_nila_file)
2231
+
2232
+ nested_block = current_block.reject {|element| !element.include?("--block")}
2233
+
2234
+ nested_block = nested_block.collect {|element| element.split("--block")[1]}
2235
+
2236
+ nested_block = nested_block.collect {|element| element.rstrip.to_i}
1855
2237
 
1856
- modified_joined_file_contents = modified_joined_file_contents.sub(string_extract,string_extract_array.join)
2238
+ modified_nested_block = nested_block.clone
2239
+
2240
+ current_block = current_block.join
2241
+
2242
+ if !nested_block.empty?
2243
+
2244
+ soft_tabs_counter += 1
2245
+
2246
+ end
1857
2247
 
1858
2248
  end
1859
2249
 
1860
- soft_tabs_counter += 1
2250
+ modified_blocks[x] = current_block
1861
2251
 
1862
2252
  end
1863
2253
 
2254
+
2255
+
2256
+ remaining_file_contents = ["(function() {\n",remaining_file_contents,"\n}).call(this);"].flatten
2257
+
2258
+ joined_file_contents = remaining_file_contents.join
2259
+
2260
+ main_blocks.each_with_index do |block_id,index|
2261
+
2262
+ joined_file_contents = joined_file_contents.sub(block_id,modified_blocks[index])
2263
+
2264
+ end
2265
+
2266
+ else
2267
+
2268
+ remaining_file_contents = remaining_file_contents.collect {|element| " " + element}
2269
+
2270
+ remaining_file_contents = ["(function() {\n",remaining_file_contents,"\n}).call(this);"].flatten
2271
+
2272
+ joined_file_contents = remaining_file_contents.join
2273
+
1864
2274
  end
1865
2275
 
2276
+
1866
2277
  file_id = open(temporary_nila_file, 'w')
1867
2278
 
1868
- file_id.write(modified_joined_file_contents)
2279
+ file_id.write(joined_file_contents)
1869
2280
 
1870
2281
  file_id.close()
1871
2282
 
@@ -1873,30 +2284,31 @@ def compile(input_file_path,*output_file_name)
1873
2284
 
1874
2285
  line_by_line_contents = fix_newlines(line_by_line_contents)
1875
2286
 
2287
+ line_by_line_contents = fix_syntax_indentation(line_by_line_contents)
2288
+
1876
2289
  return line_by_line_contents
1877
2290
 
1878
2291
  end
1879
2292
 
1880
- def pretty_print_nila(input_file_contents)
2293
+ def compile_operators(input_file_contents)
1881
2294
 
1882
- #Implementation is pending
2295
+ input_file_contents = input_file_contents.collect {|element| element.sub(" and "," && ")}
1883
2296
 
1884
- end
2297
+ input_file_contents = input_file_contents.collect {|element| element.sub(" or "," || ")}
1885
2298
 
1886
- def static_analysis(input_file_contents)
2299
+ input_file_contents = input_file_contents.collect {|element| element.sub("==","===")}
1887
2300
 
1888
- #Implementation is pending
2301
+ input_file_contents = input_file_contents.collect {|element| element.sub("!=","!==")}
1889
2302
 
1890
- end
2303
+ input_file_contents = input_file_contents.collect {|element| element.sub("elsuf","else if")}
1891
2304
 
1892
- def create_self_invoking_function(input_file_contents)
2305
+ return input_file_contents
1893
2306
 
1894
- # A feature imported from Coffeescript. This makes all the function private by default
1895
- # and prevents global variables from leaking.
2307
+ end
1896
2308
 
1897
- modified_file_contents = ["(function() {\n",input_file_contents,"\n}).call(this);"].flatten
2309
+ def pretty_print_nila(input_file_contents)
1898
2310
 
1899
- return modified_file_contents
2311
+ #Implementation is pending
1900
2312
 
1901
2313
  end
1902
2314
 
@@ -1928,6 +2340,8 @@ def compile(input_file_path,*output_file_name)
1928
2340
 
1929
2341
  file_contents = compile_interpolated_strings(file_contents)
1930
2342
 
2343
+ file_contents = compile_conditional_structures(file_contents,temp_file)
2344
+
1931
2345
  file_contents = compile_arrays(file_contents)
1932
2346
 
1933
2347
  file_contents = compile_default_values(file_contents,temp_file)
@@ -1940,8 +2354,6 @@ def compile(input_file_path,*output_file_name)
1940
2354
 
1941
2355
  list_of_variables,file_contents = get_variables(file_contents,temp_file)
1942
2356
 
1943
- file_contents = compile_conditional_structures(file_contents,temp_file)
1944
-
1945
2357
  file_contents, function_names = compile_named_functions(file_contents,named_functions,nested_functions,temp_file)
1946
2358
 
1947
2359
  file_contents, ruby_functions = compile_custom_function_map(file_contents)
@@ -1956,10 +2368,10 @@ def compile(input_file_path,*output_file_name)
1956
2368
 
1957
2369
  file_contents = compile_comments(file_contents,comments,temp_file)
1958
2370
 
1959
- file_contents = create_self_invoking_function(file_contents)
1960
-
1961
2371
  file_contents = pretty_print_javascript(file_contents,temp_file)
1962
2372
 
2373
+ file_contents = compile_operators(file_contents)
2374
+
1963
2375
  output_javascript(file_contents,output_js_file,temp_file)
1964
2376
 
1965
2377
  puts "Compilation is successful!"
@@ -2026,7 +2438,7 @@ def find_file_path(input_path,file_extension)
2026
2438
 
2027
2439
  end
2028
2440
 
2029
- nilac_version = "0.0.4.0"
2441
+ nilac_version = "0.0.4.1"
2030
2442
 
2031
2443
  opts = Slop.parse do
2032
2444
  on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"