nilac 0.0.4.1.3 → 0.0.4.1.4
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/README.md +5 -1
- data/bin/nilac +392 -56
- data/lib/nilac/version.rb +1 -1
- data/shark/features/regular_while.feature +11 -0
- data/shark/test_files/correct_regular_if.js +3 -3
- data/shark/test_files/correct_regular_while.js +14 -0
- data/shark/test_files/correct_unless_until.js +8 -2
- data/shark/test_files/regular_while.nila +7 -0
- data/shark/test_files/unless_until.nila +9 -2
- data/src/nilac.rb +392 -56
- metadata +5 -2
data/README.md
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
# Nila
|
2
2
|
|
3
3
|
Nila is a dialect of Coffeescript with a Rubyspired syntax. Nilac is the official compiler for the Nila language. Nila language is
|
4
|
-
still in its infancy. The gems released are developmental releases not production releases. So use with caution.
|
4
|
+
still in its infancy. The gems released are developmental releases not production releases. So use with caution.
|
5
|
+
|
6
|
+
## Current Version
|
7
|
+
|
8
|
+
[](http://badge.fury.io/rb/nilac)
|
5
9
|
|
6
10
|
## Requirements
|
7
11
|
|
data/bin/nilac
CHANGED
@@ -122,7 +122,7 @@ def compile(input_file_path,*output_file_name)
|
|
122
122
|
|
123
123
|
multiline_comment = file_contents_as_string[start_of_multiline_comment..end_of_multiline_comment+3]
|
124
124
|
|
125
|
-
modified_file_contents = modified_file_contents.gsub(multiline_comment,"--multiline_comment[#{multiline_comment_counter}]")
|
125
|
+
modified_file_contents = modified_file_contents.gsub(multiline_comment,"--multiline_comment[#{multiline_comment_counter}]\n\n")
|
126
126
|
|
127
127
|
multiline_comment_counter += 1
|
128
128
|
|
@@ -265,7 +265,7 @@ def compile(input_file_path,*output_file_name)
|
|
265
265
|
|
266
266
|
single_line_comments << comment
|
267
267
|
|
268
|
-
current_row = current_row.gsub(comment,"--single_line_comment[#{singleline_comment_counter}]")
|
268
|
+
current_row = current_row.gsub(comment,"--single_line_comment[#{singleline_comment_counter}]\n\n")
|
269
269
|
|
270
270
|
singleline_comment_counter += 1
|
271
271
|
|
@@ -1321,8 +1321,11 @@ def compile(input_file_path,*output_file_name)
|
|
1321
1321
|
|
1322
1322
|
"puts" => "console.log",
|
1323
1323
|
|
1324
|
+
"p" => "console.log",
|
1325
|
+
|
1324
1326
|
"print" => "process.stdout.write"
|
1325
1327
|
|
1328
|
+
|
1326
1329
|
}
|
1327
1330
|
|
1328
1331
|
function_map = function_map_replacements.keys
|
@@ -1403,6 +1406,8 @@ def compile(input_file_path,*output_file_name)
|
|
1403
1406
|
|
1404
1407
|
modified_string = string.dup
|
1405
1408
|
|
1409
|
+
modified_string = modified_string.rstrip + modified_string.split(modified_string.rstrip)[1].gsub(" ","")
|
1410
|
+
|
1406
1411
|
modified_string = modified_string.sub(function+" ",function+"(")
|
1407
1412
|
|
1408
1413
|
modified_string = modified_string.sub("\n",")\n")
|
@@ -1435,9 +1440,41 @@ def compile(input_file_path,*output_file_name)
|
|
1435
1440
|
|
1436
1441
|
def compile_conditional_structures(input_file_contents,temporary_nila_file)
|
1437
1442
|
|
1438
|
-
|
1443
|
+
def replace_unless_until(input_file_contents)
|
1444
|
+
|
1445
|
+
modified_file_contents = input_file_contents.clone
|
1446
|
+
|
1447
|
+
possible_unless_commands = input_file_contents.reject {|element| !element.include?("unless")}
|
1448
|
+
|
1449
|
+
unless_commands = possible_unless_commands.reject {|element| !element.lstrip.split("unless")[0].empty?}
|
1450
|
+
|
1451
|
+
unless_commands.each do |command|
|
1452
|
+
|
1453
|
+
junk,condition = command.split("unless ")
|
1454
|
+
|
1455
|
+
replacement_string = "if !(#{condition.lstrip.rstrip})\n"
|
1456
|
+
|
1457
|
+
modified_file_contents[modified_file_contents.index(command)] = replacement_string
|
1458
|
+
|
1459
|
+
end
|
1439
1460
|
|
1440
|
-
|
1461
|
+
possible_until_commands = input_file_contents.reject {|element| !element.include?("until")}
|
1462
|
+
|
1463
|
+
until_commands = possible_until_commands.reject {|element| !element.lstrip.split("until")[0].empty?}
|
1464
|
+
|
1465
|
+
until_commands.each do |command|
|
1466
|
+
|
1467
|
+
junk,condition = command.split("until ")
|
1468
|
+
|
1469
|
+
replacement_string = "while !(#{condition.lstrip.rstrip})\n"
|
1470
|
+
|
1471
|
+
modified_file_contents[modified_file_contents.index(command)] = replacement_string
|
1472
|
+
|
1473
|
+
end
|
1474
|
+
|
1475
|
+
return modified_file_contents
|
1476
|
+
|
1477
|
+
end
|
1441
1478
|
|
1442
1479
|
def compile_inline_conditionals(input_file_contents,temporary_nila_file)
|
1443
1480
|
|
@@ -1697,7 +1734,7 @@ def compile(input_file_path,*output_file_name)
|
|
1697
1734
|
|
1698
1735
|
end
|
1699
1736
|
|
1700
|
-
if_statement_indexes = if_statement_indexes.flatten + [-1]
|
1737
|
+
if_statement_indexes = [0] + if_statement_indexes.flatten + [-1]
|
1701
1738
|
|
1702
1739
|
controlregexp = /(while |def )/
|
1703
1740
|
|
@@ -1787,65 +1824,285 @@ def compile(input_file_path,*output_file_name)
|
|
1787
1824
|
|
1788
1825
|
end
|
1789
1826
|
|
1790
|
-
|
1827
|
+
def compile_regular_while(input_file_contents,temporary_nila_file)
|
1791
1828
|
|
1792
|
-
|
1829
|
+
def convert_string_to_array(input_string,temporary_nila_file)
|
1793
1830
|
|
1794
|
-
|
1831
|
+
file_id = open(temporary_nila_file, 'w')
|
1795
1832
|
|
1796
|
-
|
1833
|
+
file_id.write(input_string)
|
1797
1834
|
|
1798
|
-
|
1835
|
+
file_id.close()
|
1799
1836
|
|
1800
|
-
|
1801
|
-
#handles both single line and multiline comments.
|
1837
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
1802
1838
|
|
1803
|
-
|
1839
|
+
return line_by_line_contents
|
1804
1840
|
|
1805
|
-
|
1841
|
+
end
|
1806
1842
|
|
1807
|
-
|
1843
|
+
def extract_while_blocks(while_statement_indexes,input_file_contents)
|
1808
1844
|
|
1809
|
-
|
1845
|
+
possible_while_blocks = []
|
1810
1846
|
|
1811
|
-
|
1847
|
+
while_block_counter = 0
|
1812
1848
|
|
1813
|
-
|
1849
|
+
extracted_blocks = []
|
1814
1850
|
|
1815
|
-
|
1851
|
+
controlregexp = /(if |while |def )/
|
1816
1852
|
|
1817
|
-
|
1853
|
+
rejectionregexp = /( if | while )/
|
1818
1854
|
|
1819
|
-
|
1855
|
+
for x in 0...while_statement_indexes.length-1
|
1820
1856
|
|
1821
|
-
|
1857
|
+
possible_while_blocks << input_file_contents[while_statement_indexes[x]..while_statement_indexes[x+1]]
|
1822
1858
|
|
1859
|
+
end
|
1823
1860
|
|
1824
|
-
|
1861
|
+
end_counter = 0
|
1825
1862
|
|
1826
|
-
|
1863
|
+
end_index = []
|
1827
1864
|
|
1828
|
-
|
1865
|
+
current_block = []
|
1829
1866
|
|
1830
|
-
|
1867
|
+
possible_while_blocks.each_with_index do |block|
|
1831
1868
|
|
1832
|
-
|
1869
|
+
current_block += block
|
1833
1870
|
|
1834
|
-
|
1871
|
+
current_block.each_with_index do |line,index|
|
1835
1872
|
|
1836
|
-
|
1873
|
+
if line.strip.eql? "end"
|
1874
|
+
|
1875
|
+
end_counter += 1
|
1876
|
+
|
1877
|
+
end_index << index
|
1878
|
+
|
1879
|
+
end
|
1880
|
+
|
1881
|
+
end
|
1882
|
+
|
1883
|
+
if end_counter > 0
|
1884
|
+
|
1885
|
+
until end_index.empty?
|
1886
|
+
|
1887
|
+
array_extract = current_block[0..end_index[0]].reverse
|
1888
|
+
|
1889
|
+
index_counter = 0
|
1890
|
+
|
1891
|
+
array_extract.each_with_index do |line|
|
1892
|
+
|
1893
|
+
break if (line.lstrip.index(controlregexp) != nil and line.lstrip.index(rejectionregexp).nil?)
|
1894
|
+
|
1895
|
+
index_counter += 1
|
1896
|
+
|
1897
|
+
end
|
1898
|
+
|
1899
|
+
block_extract = array_extract[0..index_counter].reverse
|
1900
|
+
|
1901
|
+
extracted_blocks << block_extract
|
1902
|
+
|
1903
|
+
block_start = current_block.index(block_extract[0])
|
1904
|
+
|
1905
|
+
block_end = current_block.index(block_extract[-1])
|
1906
|
+
|
1907
|
+
current_block[block_start..block_end] = "--whileblock#{while_block_counter}"
|
1908
|
+
|
1909
|
+
while_block_counter += 1
|
1910
|
+
|
1911
|
+
end_counter = 0
|
1912
|
+
|
1913
|
+
end_index = []
|
1914
|
+
|
1915
|
+
current_block.each_with_index do |line,index|
|
1916
|
+
|
1917
|
+
if line.strip.eql? "end"
|
1918
|
+
|
1919
|
+
end_counter += 1
|
1920
|
+
|
1921
|
+
end_index << index
|
1922
|
+
|
1923
|
+
end
|
1924
|
+
|
1925
|
+
end
|
1926
|
+
|
1927
|
+
end
|
1928
|
+
|
1929
|
+
end
|
1930
|
+
|
1931
|
+
end
|
1932
|
+
|
1933
|
+
return current_block,extracted_blocks
|
1934
|
+
|
1935
|
+
end
|
1936
|
+
|
1937
|
+
def compile_while_syntax(input_block)
|
1938
|
+
|
1939
|
+
strings = []
|
1940
|
+
|
1941
|
+
string_counter = 0
|
1942
|
+
|
1943
|
+
modified_input_block = input_block.dup
|
1944
|
+
|
1945
|
+
input_block.each_with_index do |line,index|
|
1946
|
+
|
1947
|
+
if line.include?("\"")
|
1948
|
+
|
1949
|
+
opening_quotes = line.index("\"")
|
1950
|
+
|
1951
|
+
string_extract = line[opening_quotes..line.index("\"",opening_quotes+1)]
|
1952
|
+
|
1953
|
+
strings << string_extract
|
1954
|
+
|
1955
|
+
modified_input_block[index] = modified_input_block[index].sub(string_extract,"--string{#{string_counter}}")
|
1956
|
+
|
1957
|
+
string_counter += 1
|
1958
|
+
|
1959
|
+
end
|
1960
|
+
|
1961
|
+
end
|
1962
|
+
|
1963
|
+
input_block = modified_input_block
|
1964
|
+
|
1965
|
+
starting_line = input_block[0]
|
1966
|
+
|
1967
|
+
starting_line = starting_line + "\n" if starting_line.lstrip == starting_line
|
1968
|
+
|
1969
|
+
junk,condition = starting_line.split("while")
|
1970
|
+
|
1971
|
+
input_block[0] = "whaaleskey (#{condition.lstrip.rstrip.gsub("?","")}) {\n"
|
1972
|
+
|
1973
|
+
input_block[-1] = input_block[-1].lstrip.sub("end","}")
|
1974
|
+
|
1975
|
+
modified_input_block = input_block.dup
|
1976
|
+
|
1977
|
+
input_block.each_with_index do |line,index|
|
1978
|
+
|
1979
|
+
if line.include?("--string{")
|
1980
|
+
|
1981
|
+
junk,remains = line.split("--string{")
|
1982
|
+
|
1983
|
+
string_index,junk = remains.split("}")
|
1984
|
+
|
1985
|
+
modified_input_block[index] = modified_input_block[index].sub("--string{#{string_index.strip}}",strings[string_index.strip.to_i])
|
1986
|
+
|
1987
|
+
end
|
1988
|
+
|
1989
|
+
end
|
1990
|
+
|
1991
|
+
return modified_input_block
|
1992
|
+
|
1993
|
+
end
|
1994
|
+
|
1995
|
+
possible_while_statements = input_file_contents.reject {|element| !element.include?("while")}
|
1996
|
+
|
1997
|
+
if !possible_while_statements.empty?
|
1998
|
+
|
1999
|
+
while_statement_indexes = []
|
2000
|
+
|
2001
|
+
possible_while_statements.each do |statement|
|
2002
|
+
|
2003
|
+
while_statement_indexes << input_file_contents.dup.each_index.select {|index| input_file_contents[index] == statement}
|
2004
|
+
|
2005
|
+
end
|
2006
|
+
|
2007
|
+
while_statement_indexes = [0] + while_statement_indexes.flatten + [-1]
|
2008
|
+
|
2009
|
+
controlregexp = /(if |def )/
|
2010
|
+
|
2011
|
+
modified_input_contents,extracted_statements = extract_while_blocks(while_statement_indexes,input_file_contents.clone)
|
2012
|
+
|
2013
|
+
joined_blocks = extracted_statements.collect {|element| element.join}
|
2014
|
+
|
2015
|
+
while_statements = joined_blocks.reject {|element| element.index(controlregexp) != nil}
|
2016
|
+
|
2017
|
+
rejected_elements = joined_blocks - while_statements
|
2018
|
+
|
2019
|
+
rejected_elements_index = []
|
2020
|
+
|
2021
|
+
rejected_elements.each do |element|
|
2022
|
+
|
2023
|
+
rejected_elements_index << joined_blocks.each_index.select {|index| joined_blocks[index] == element}
|
2024
|
+
|
2025
|
+
end
|
2026
|
+
|
2027
|
+
while_blocks_index = (0...extracted_statements.length).to_a
|
2028
|
+
|
2029
|
+
rejected_elements_index = rejected_elements_index.flatten
|
2030
|
+
|
2031
|
+
while_blocks_index -= rejected_elements_index
|
2032
|
+
|
2033
|
+
modified_while_statements = while_statements.collect {|string| convert_string_to_array(string,temporary_nila_file)}
|
2034
|
+
|
2035
|
+
modified_while_statements = modified_while_statements.collect {|block| compile_while_syntax(block)}.reverse
|
2036
|
+
|
2037
|
+
while_blocks_index = while_blocks_index.collect {|element| "--whileblock#{element}"}.reverse
|
2038
|
+
|
2039
|
+
rejected_elements_index = rejected_elements_index.collect {|element| "--whileblock#{element}"}.reverse
|
2040
|
+
|
2041
|
+
rejected_elements = rejected_elements.reverse
|
2042
|
+
|
2043
|
+
joined_file_contents = modified_input_contents.join
|
2044
|
+
|
2045
|
+
until while_blocks_index.empty? and rejected_elements_index.empty?
|
2046
|
+
|
2047
|
+
if !while_blocks_index.empty?
|
2048
|
+
|
2049
|
+
if joined_file_contents.include?(while_blocks_index[0])
|
2050
|
+
|
2051
|
+
joined_file_contents = joined_file_contents.sub(while_blocks_index[0],modified_while_statements[0].join)
|
2052
|
+
|
2053
|
+
while_blocks_index.delete_at(0)
|
2054
|
+
|
2055
|
+
modified_while_statements.delete_at(0)
|
2056
|
+
|
2057
|
+
else
|
2058
|
+
|
2059
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0])
|
2060
|
+
|
2061
|
+
rejected_elements_index.delete_at(0)
|
2062
|
+
|
2063
|
+
rejected_elements.delete_at(0)
|
2064
|
+
|
2065
|
+
end
|
2066
|
+
|
2067
|
+
else
|
2068
|
+
|
2069
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0])
|
2070
|
+
|
2071
|
+
rejected_elements_index.delete_at(0)
|
2072
|
+
|
2073
|
+
rejected_elements.delete_at(0)
|
2074
|
+
|
2075
|
+
end
|
2076
|
+
|
2077
|
+
end
|
2078
|
+
|
2079
|
+
else
|
2080
|
+
|
2081
|
+
joined_file_contents = input_file_contents.join
|
2082
|
+
|
2083
|
+
end
|
2084
|
+
|
2085
|
+
file_id = open(temporary_nila_file, 'w')
|
2086
|
+
|
2087
|
+
file_id.write(joined_file_contents)
|
2088
|
+
|
2089
|
+
file_id.close()
|
2090
|
+
|
2091
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
2092
|
+
|
2093
|
+
return line_by_line_contents
|
1837
2094
|
|
1838
2095
|
end
|
1839
2096
|
|
1840
|
-
|
2097
|
+
file_contents = replace_unless_until(input_file_contents)
|
1841
2098
|
|
1842
|
-
|
2099
|
+
file_contents = compile_regular_if(file_contents,temporary_nila_file)
|
1843
2100
|
|
1844
|
-
|
2101
|
+
file_contents = compile_regular_while(file_contents,temporary_nila_file)
|
1845
2102
|
|
1846
|
-
|
2103
|
+
file_contents = compile_inline_conditionals(file_contents,temporary_nila_file)
|
1847
2104
|
|
1848
|
-
|
2105
|
+
return file_contents
|
1849
2106
|
|
1850
2107
|
end
|
1851
2108
|
|
@@ -1869,7 +2126,7 @@ def compile(input_file_path,*output_file_name)
|
|
1869
2126
|
|
1870
2127
|
end
|
1871
2128
|
|
1872
|
-
reject_regexp = /(function |Euuf |if |else|elsuf|switch |case|while |for )/
|
2129
|
+
reject_regexp = /(function |Euuf |if |else|elsuf|switch |case|while |whaaleskey |for )/
|
1873
2130
|
|
1874
2131
|
modified_file_contents = []
|
1875
2132
|
|
@@ -1923,7 +2180,85 @@ def compile(input_file_path,*output_file_name)
|
|
1923
2180
|
|
1924
2181
|
end
|
1925
2182
|
|
1926
|
-
def
|
2183
|
+
def compile_comments(input_file_contents,comments,temporary_nila_file)
|
2184
|
+
|
2185
|
+
#This method converts Nila comments into pure Javascript comments. This method
|
2186
|
+
#handles both single line and multiline comments.
|
2187
|
+
|
2188
|
+
file_contents_as_string = input_file_contents.join
|
2189
|
+
|
2190
|
+
single_line_comments = comments[0]
|
2191
|
+
|
2192
|
+
multiline_comments = comments[1]
|
2193
|
+
|
2194
|
+
single_line_comment_counter = 1
|
2195
|
+
|
2196
|
+
multi_line_comment_counter = 1
|
2197
|
+
|
2198
|
+
ignorable_keywords = [/if/,/while/,/function/]
|
2199
|
+
|
2200
|
+
dummy_replacement_words = ["eeuuff","whaalesskkey","conffoolotion"]
|
2201
|
+
|
2202
|
+
for x in 0...single_line_comments.length
|
2203
|
+
|
2204
|
+
current_singleline_comment = "--single_line_comment[#{single_line_comment_counter}]"
|
2205
|
+
|
2206
|
+
replacement_singleline_string = single_line_comments[x].sub("#","//")
|
2207
|
+
|
2208
|
+
ignorable_keywords.each_with_index do |keyword,index|
|
2209
|
+
|
2210
|
+
if replacement_singleline_string.index(keyword) != nil
|
2211
|
+
|
2212
|
+
replacement_singleline_string = replacement_singleline_string.sub(keyword.inspect[1...-1],dummy_replacement_words[index])
|
2213
|
+
|
2214
|
+
end
|
2215
|
+
|
2216
|
+
end
|
2217
|
+
|
2218
|
+
file_contents_as_string = file_contents_as_string.sub(current_singleline_comment,replacement_singleline_string)
|
2219
|
+
|
2220
|
+
single_line_comment_counter += 1
|
2221
|
+
|
2222
|
+
|
2223
|
+
end
|
2224
|
+
|
2225
|
+
for y in 0...multiline_comments.length
|
2226
|
+
|
2227
|
+
current_multiline_comment = "--multiline_comment[#{multi_line_comment_counter}]"
|
2228
|
+
|
2229
|
+
replacement_multiline_string = multiline_comments[y].sub("=begin","/*\n")
|
2230
|
+
|
2231
|
+
replacement_multiline_string = replacement_multiline_string.sub("=end","\n*/")
|
2232
|
+
|
2233
|
+
ignorable_keywords.each_with_index do |keyword,index|
|
2234
|
+
|
2235
|
+
if replacement_multiline_string.index(keyword) != nil
|
2236
|
+
|
2237
|
+
replacement_multiline_string = replacement_multiline_string.sub(keyword.inspect[1...-1],dummy_replacement_words[index])
|
2238
|
+
|
2239
|
+
end
|
2240
|
+
|
2241
|
+
end
|
2242
|
+
|
2243
|
+
file_contents_as_string = file_contents_as_string.sub(current_multiline_comment,replacement_multiline_string)
|
2244
|
+
|
2245
|
+
multi_line_comment_counter += 1
|
2246
|
+
|
2247
|
+
end
|
2248
|
+
|
2249
|
+
file_id = open(temporary_nila_file, 'w')
|
2250
|
+
|
2251
|
+
file_id.write(file_contents_as_string)
|
2252
|
+
|
2253
|
+
file_id.close()
|
2254
|
+
|
2255
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
2256
|
+
|
2257
|
+
line_by_line_contents
|
2258
|
+
|
2259
|
+
end
|
2260
|
+
|
2261
|
+
def pretty_print_javascript(javascript_file_contents,temporary_nila_file,comments)
|
1927
2262
|
|
1928
2263
|
def reset_tabs(input_file_contents)
|
1929
2264
|
|
@@ -1983,22 +2318,6 @@ def compile(input_file_path,*output_file_name)
|
|
1983
2318
|
|
1984
2319
|
end
|
1985
2320
|
|
1986
|
-
def previous_formatting(input_string,tab_counter,temporary_nila_file)
|
1987
|
-
|
1988
|
-
string_as_array = convert_string_to_array(input_string,temporary_nila_file)
|
1989
|
-
|
1990
|
-
modified_array = []
|
1991
|
-
|
1992
|
-
string_as_array.each do |line|
|
1993
|
-
|
1994
|
-
modified_array << " "*tab_counter + line
|
1995
|
-
|
1996
|
-
end
|
1997
|
-
|
1998
|
-
return modified_array.join
|
1999
|
-
|
2000
|
-
end
|
2001
|
-
|
2002
2321
|
def fix_newlines(file_contents)
|
2003
2322
|
|
2004
2323
|
def extract_blocks(file_contents)
|
@@ -2218,10 +2537,28 @@ def compile(input_file_path,*output_file_name)
|
|
2218
2537
|
|
2219
2538
|
end
|
2220
2539
|
|
2540
|
+
def replace_ignored_words(input_string)
|
2541
|
+
|
2542
|
+
ignorable_keywords = [/if/,/while/,/function/]
|
2543
|
+
|
2544
|
+
dummy_replacement_words = ["eeuuff","whaalesskkey","conffoolotion"]
|
2545
|
+
|
2546
|
+
dummy_replacement_words.each_with_index do |word,index|
|
2547
|
+
|
2548
|
+
input_string = input_string.sub(word,ignorable_keywords[index].inspect[1...-1])
|
2549
|
+
|
2550
|
+
end
|
2551
|
+
|
2552
|
+
return input_string
|
2553
|
+
|
2554
|
+
end
|
2555
|
+
|
2221
2556
|
javascript_regexp = /(if |while |function |function\()/
|
2222
2557
|
|
2223
2558
|
javascript_file_contents = javascript_file_contents.collect {|element| element.sub("Euuf","if")}
|
2224
2559
|
|
2560
|
+
javascript_file_contents = javascript_file_contents.collect {|element| element.sub("whaaleskey","while")}
|
2561
|
+
|
2225
2562
|
javascript_file_contents = reset_tabs(javascript_file_contents)
|
2226
2563
|
|
2227
2564
|
starting_locations = []
|
@@ -2322,8 +2659,6 @@ def compile(input_file_path,*output_file_name)
|
|
2322
2659
|
|
2323
2660
|
end
|
2324
2661
|
|
2325
|
-
|
2326
|
-
|
2327
2662
|
remaining_file_contents = ["(function() {\n",remaining_file_contents,"\n}).call(this);"].flatten
|
2328
2663
|
|
2329
2664
|
joined_file_contents = remaining_file_contents.join
|
@@ -2344,7 +2679,6 @@ def compile(input_file_path,*output_file_name)
|
|
2344
2679
|
|
2345
2680
|
end
|
2346
2681
|
|
2347
|
-
|
2348
2682
|
file_id = open(temporary_nila_file, 'w')
|
2349
2683
|
|
2350
2684
|
file_id.write(joined_file_contents)
|
@@ -2357,6 +2691,8 @@ def compile(input_file_path,*output_file_name)
|
|
2357
2691
|
|
2358
2692
|
line_by_line_contents = fix_syntax_indentation(line_by_line_contents)
|
2359
2693
|
|
2694
|
+
line_by_line_contents = line_by_line_contents.collect {|element| replace_ignored_words(element)}
|
2695
|
+
|
2360
2696
|
return line_by_line_contents
|
2361
2697
|
|
2362
2698
|
end
|
@@ -2439,7 +2775,7 @@ def compile(input_file_path,*output_file_name)
|
|
2439
2775
|
|
2440
2776
|
file_contents = compile_comments(file_contents,comments,temp_file)
|
2441
2777
|
|
2442
|
-
file_contents = pretty_print_javascript(file_contents,temp_file)
|
2778
|
+
file_contents = pretty_print_javascript(file_contents,temp_file,comments)
|
2443
2779
|
|
2444
2780
|
file_contents = compile_operators(file_contents)
|
2445
2781
|
|
data/lib/nilac/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature bring Ruby's while statement to Nila.
|
2
|
+
Scenario: Input function with while statements
|
3
|
+
Given the input file "regular_while.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "regular_while.js"
|
6
|
+
The output file must equal "correct_regular_while.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => src/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --compile $file
|
@@ -1,10 +1,10 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
2
|
(function() {
|
3
|
-
if (visitor_present) {
|
3
|
+
if (visitor_present) {
|
4
4
|
//This file is for demonstration purpose. It doesn't really achieve anything
|
5
|
-
if (active || happy) {
|
5
|
+
if (active || happy) {
|
6
6
|
console.log("Hello Wonderful Visitor!");
|
7
|
-
} else if (idle && not_engaged) {
|
7
|
+
} else if (idle && not_engaged) {
|
8
8
|
console.log("Hello Visitor! It is time to engage!");
|
9
9
|
} else {
|
10
10
|
console.log("Hello user!");
|
@@ -0,0 +1,14 @@
|
|
1
|
+
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
+
(function() {
|
3
|
+
var counter;
|
4
|
+
|
5
|
+
// This file will demonstrate Nila's while loops
|
6
|
+
|
7
|
+
counter = 1;
|
8
|
+
|
9
|
+
while (counter < 11) {
|
10
|
+
console.log(counter);
|
11
|
+
counter = counter + 1;
|
12
|
+
}
|
13
|
+
|
14
|
+
}).call(this);
|
@@ -12,10 +12,16 @@
|
|
12
12
|
console.log("There's no such person");
|
13
13
|
}
|
14
14
|
|
15
|
-
|
15
|
+
if (!(person.present)) {
|
16
|
+
console.log("There's no such person");
|
17
|
+
}
|
18
|
+
|
19
|
+
i=1;
|
16
20
|
|
17
21
|
while (!(i > 10)) {
|
18
|
-
i
|
22
|
+
process.stdout.write("" + i + " ");
|
23
|
+
i+=1;
|
24
|
+
//redo if i > 10
|
19
25
|
}
|
20
26
|
|
21
27
|
}).call(this);
|
data/src/nilac.rb
CHANGED
@@ -120,7 +120,7 @@ def compile(input_file_path,*output_file_name)
|
|
120
120
|
|
121
121
|
multiline_comment = file_contents_as_string[start_of_multiline_comment..end_of_multiline_comment+3]
|
122
122
|
|
123
|
-
modified_file_contents = modified_file_contents.gsub(multiline_comment,"--multiline_comment[#{multiline_comment_counter}]")
|
123
|
+
modified_file_contents = modified_file_contents.gsub(multiline_comment,"--multiline_comment[#{multiline_comment_counter}]\n\n")
|
124
124
|
|
125
125
|
multiline_comment_counter += 1
|
126
126
|
|
@@ -263,7 +263,7 @@ def compile(input_file_path,*output_file_name)
|
|
263
263
|
|
264
264
|
single_line_comments << comment
|
265
265
|
|
266
|
-
current_row = current_row.gsub(comment,"--single_line_comment[#{singleline_comment_counter}]")
|
266
|
+
current_row = current_row.gsub(comment,"--single_line_comment[#{singleline_comment_counter}]\n\n")
|
267
267
|
|
268
268
|
singleline_comment_counter += 1
|
269
269
|
|
@@ -1319,8 +1319,11 @@ def compile(input_file_path,*output_file_name)
|
|
1319
1319
|
|
1320
1320
|
"puts" => "console.log",
|
1321
1321
|
|
1322
|
+
"p" => "console.log",
|
1323
|
+
|
1322
1324
|
"print" => "process.stdout.write"
|
1323
1325
|
|
1326
|
+
|
1324
1327
|
}
|
1325
1328
|
|
1326
1329
|
function_map = function_map_replacements.keys
|
@@ -1401,6 +1404,8 @@ def compile(input_file_path,*output_file_name)
|
|
1401
1404
|
|
1402
1405
|
modified_string = string.dup
|
1403
1406
|
|
1407
|
+
modified_string = modified_string.rstrip + modified_string.split(modified_string.rstrip)[1].gsub(" ","")
|
1408
|
+
|
1404
1409
|
modified_string = modified_string.sub(function+" ",function+"(")
|
1405
1410
|
|
1406
1411
|
modified_string = modified_string.sub("\n",")\n")
|
@@ -1433,9 +1438,41 @@ def compile(input_file_path,*output_file_name)
|
|
1433
1438
|
|
1434
1439
|
def compile_conditional_structures(input_file_contents,temporary_nila_file)
|
1435
1440
|
|
1436
|
-
|
1441
|
+
def replace_unless_until(input_file_contents)
|
1442
|
+
|
1443
|
+
modified_file_contents = input_file_contents.clone
|
1444
|
+
|
1445
|
+
possible_unless_commands = input_file_contents.reject {|element| !element.include?("unless")}
|
1446
|
+
|
1447
|
+
unless_commands = possible_unless_commands.reject {|element| !element.lstrip.split("unless")[0].empty?}
|
1448
|
+
|
1449
|
+
unless_commands.each do |command|
|
1450
|
+
|
1451
|
+
junk,condition = command.split("unless ")
|
1452
|
+
|
1453
|
+
replacement_string = "if !(#{condition.lstrip.rstrip})\n"
|
1454
|
+
|
1455
|
+
modified_file_contents[modified_file_contents.index(command)] = replacement_string
|
1456
|
+
|
1457
|
+
end
|
1437
1458
|
|
1438
|
-
|
1459
|
+
possible_until_commands = input_file_contents.reject {|element| !element.include?("until")}
|
1460
|
+
|
1461
|
+
until_commands = possible_until_commands.reject {|element| !element.lstrip.split("until")[0].empty?}
|
1462
|
+
|
1463
|
+
until_commands.each do |command|
|
1464
|
+
|
1465
|
+
junk,condition = command.split("until ")
|
1466
|
+
|
1467
|
+
replacement_string = "while !(#{condition.lstrip.rstrip})\n"
|
1468
|
+
|
1469
|
+
modified_file_contents[modified_file_contents.index(command)] = replacement_string
|
1470
|
+
|
1471
|
+
end
|
1472
|
+
|
1473
|
+
return modified_file_contents
|
1474
|
+
|
1475
|
+
end
|
1439
1476
|
|
1440
1477
|
def compile_inline_conditionals(input_file_contents,temporary_nila_file)
|
1441
1478
|
|
@@ -1695,7 +1732,7 @@ def compile(input_file_path,*output_file_name)
|
|
1695
1732
|
|
1696
1733
|
end
|
1697
1734
|
|
1698
|
-
if_statement_indexes = if_statement_indexes.flatten + [-1]
|
1735
|
+
if_statement_indexes = [0] + if_statement_indexes.flatten + [-1]
|
1699
1736
|
|
1700
1737
|
controlregexp = /(while |def )/
|
1701
1738
|
|
@@ -1785,65 +1822,285 @@ def compile(input_file_path,*output_file_name)
|
|
1785
1822
|
|
1786
1823
|
end
|
1787
1824
|
|
1788
|
-
|
1825
|
+
def compile_regular_while(input_file_contents,temporary_nila_file)
|
1789
1826
|
|
1790
|
-
|
1827
|
+
def convert_string_to_array(input_string,temporary_nila_file)
|
1791
1828
|
|
1792
|
-
|
1829
|
+
file_id = open(temporary_nila_file, 'w')
|
1793
1830
|
|
1794
|
-
|
1831
|
+
file_id.write(input_string)
|
1795
1832
|
|
1796
|
-
|
1833
|
+
file_id.close()
|
1797
1834
|
|
1798
|
-
|
1799
|
-
#handles both single line and multiline comments.
|
1835
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
1800
1836
|
|
1801
|
-
|
1837
|
+
return line_by_line_contents
|
1802
1838
|
|
1803
|
-
|
1839
|
+
end
|
1804
1840
|
|
1805
|
-
|
1841
|
+
def extract_while_blocks(while_statement_indexes,input_file_contents)
|
1806
1842
|
|
1807
|
-
|
1843
|
+
possible_while_blocks = []
|
1808
1844
|
|
1809
|
-
|
1845
|
+
while_block_counter = 0
|
1810
1846
|
|
1811
|
-
|
1847
|
+
extracted_blocks = []
|
1812
1848
|
|
1813
|
-
|
1849
|
+
controlregexp = /(if |while |def )/
|
1814
1850
|
|
1815
|
-
|
1851
|
+
rejectionregexp = /( if | while )/
|
1816
1852
|
|
1817
|
-
|
1853
|
+
for x in 0...while_statement_indexes.length-1
|
1818
1854
|
|
1819
|
-
|
1855
|
+
possible_while_blocks << input_file_contents[while_statement_indexes[x]..while_statement_indexes[x+1]]
|
1820
1856
|
|
1857
|
+
end
|
1821
1858
|
|
1822
|
-
|
1859
|
+
end_counter = 0
|
1823
1860
|
|
1824
|
-
|
1861
|
+
end_index = []
|
1825
1862
|
|
1826
|
-
|
1863
|
+
current_block = []
|
1827
1864
|
|
1828
|
-
|
1865
|
+
possible_while_blocks.each_with_index do |block|
|
1829
1866
|
|
1830
|
-
|
1867
|
+
current_block += block
|
1831
1868
|
|
1832
|
-
|
1869
|
+
current_block.each_with_index do |line,index|
|
1833
1870
|
|
1834
|
-
|
1871
|
+
if line.strip.eql? "end"
|
1872
|
+
|
1873
|
+
end_counter += 1
|
1874
|
+
|
1875
|
+
end_index << index
|
1876
|
+
|
1877
|
+
end
|
1878
|
+
|
1879
|
+
end
|
1880
|
+
|
1881
|
+
if end_counter > 0
|
1882
|
+
|
1883
|
+
until end_index.empty?
|
1884
|
+
|
1885
|
+
array_extract = current_block[0..end_index[0]].reverse
|
1886
|
+
|
1887
|
+
index_counter = 0
|
1888
|
+
|
1889
|
+
array_extract.each_with_index do |line|
|
1890
|
+
|
1891
|
+
break if (line.lstrip.index(controlregexp) != nil and line.lstrip.index(rejectionregexp).nil?)
|
1892
|
+
|
1893
|
+
index_counter += 1
|
1894
|
+
|
1895
|
+
end
|
1896
|
+
|
1897
|
+
block_extract = array_extract[0..index_counter].reverse
|
1898
|
+
|
1899
|
+
extracted_blocks << block_extract
|
1900
|
+
|
1901
|
+
block_start = current_block.index(block_extract[0])
|
1902
|
+
|
1903
|
+
block_end = current_block.index(block_extract[-1])
|
1904
|
+
|
1905
|
+
current_block[block_start..block_end] = "--whileblock#{while_block_counter}"
|
1906
|
+
|
1907
|
+
while_block_counter += 1
|
1908
|
+
|
1909
|
+
end_counter = 0
|
1910
|
+
|
1911
|
+
end_index = []
|
1912
|
+
|
1913
|
+
current_block.each_with_index do |line,index|
|
1914
|
+
|
1915
|
+
if line.strip.eql? "end"
|
1916
|
+
|
1917
|
+
end_counter += 1
|
1918
|
+
|
1919
|
+
end_index << index
|
1920
|
+
|
1921
|
+
end
|
1922
|
+
|
1923
|
+
end
|
1924
|
+
|
1925
|
+
end
|
1926
|
+
|
1927
|
+
end
|
1928
|
+
|
1929
|
+
end
|
1930
|
+
|
1931
|
+
return current_block,extracted_blocks
|
1932
|
+
|
1933
|
+
end
|
1934
|
+
|
1935
|
+
def compile_while_syntax(input_block)
|
1936
|
+
|
1937
|
+
strings = []
|
1938
|
+
|
1939
|
+
string_counter = 0
|
1940
|
+
|
1941
|
+
modified_input_block = input_block.dup
|
1942
|
+
|
1943
|
+
input_block.each_with_index do |line,index|
|
1944
|
+
|
1945
|
+
if line.include?("\"")
|
1946
|
+
|
1947
|
+
opening_quotes = line.index("\"")
|
1948
|
+
|
1949
|
+
string_extract = line[opening_quotes..line.index("\"",opening_quotes+1)]
|
1950
|
+
|
1951
|
+
strings << string_extract
|
1952
|
+
|
1953
|
+
modified_input_block[index] = modified_input_block[index].sub(string_extract,"--string{#{string_counter}}")
|
1954
|
+
|
1955
|
+
string_counter += 1
|
1956
|
+
|
1957
|
+
end
|
1958
|
+
|
1959
|
+
end
|
1960
|
+
|
1961
|
+
input_block = modified_input_block
|
1962
|
+
|
1963
|
+
starting_line = input_block[0]
|
1964
|
+
|
1965
|
+
starting_line = starting_line + "\n" if starting_line.lstrip == starting_line
|
1966
|
+
|
1967
|
+
junk,condition = starting_line.split("while")
|
1968
|
+
|
1969
|
+
input_block[0] = "whaaleskey (#{condition.lstrip.rstrip.gsub("?","")}) {\n"
|
1970
|
+
|
1971
|
+
input_block[-1] = input_block[-1].lstrip.sub("end","}")
|
1972
|
+
|
1973
|
+
modified_input_block = input_block.dup
|
1974
|
+
|
1975
|
+
input_block.each_with_index do |line,index|
|
1976
|
+
|
1977
|
+
if line.include?("--string{")
|
1978
|
+
|
1979
|
+
junk,remains = line.split("--string{")
|
1980
|
+
|
1981
|
+
string_index,junk = remains.split("}")
|
1982
|
+
|
1983
|
+
modified_input_block[index] = modified_input_block[index].sub("--string{#{string_index.strip}}",strings[string_index.strip.to_i])
|
1984
|
+
|
1985
|
+
end
|
1986
|
+
|
1987
|
+
end
|
1988
|
+
|
1989
|
+
return modified_input_block
|
1990
|
+
|
1991
|
+
end
|
1992
|
+
|
1993
|
+
possible_while_statements = input_file_contents.reject {|element| !element.include?("while")}
|
1994
|
+
|
1995
|
+
if !possible_while_statements.empty?
|
1996
|
+
|
1997
|
+
while_statement_indexes = []
|
1998
|
+
|
1999
|
+
possible_while_statements.each do |statement|
|
2000
|
+
|
2001
|
+
while_statement_indexes << input_file_contents.dup.each_index.select {|index| input_file_contents[index] == statement}
|
2002
|
+
|
2003
|
+
end
|
2004
|
+
|
2005
|
+
while_statement_indexes = [0] + while_statement_indexes.flatten + [-1]
|
2006
|
+
|
2007
|
+
controlregexp = /(if |def )/
|
2008
|
+
|
2009
|
+
modified_input_contents,extracted_statements = extract_while_blocks(while_statement_indexes,input_file_contents.clone)
|
2010
|
+
|
2011
|
+
joined_blocks = extracted_statements.collect {|element| element.join}
|
2012
|
+
|
2013
|
+
while_statements = joined_blocks.reject {|element| element.index(controlregexp) != nil}
|
2014
|
+
|
2015
|
+
rejected_elements = joined_blocks - while_statements
|
2016
|
+
|
2017
|
+
rejected_elements_index = []
|
2018
|
+
|
2019
|
+
rejected_elements.each do |element|
|
2020
|
+
|
2021
|
+
rejected_elements_index << joined_blocks.each_index.select {|index| joined_blocks[index] == element}
|
2022
|
+
|
2023
|
+
end
|
2024
|
+
|
2025
|
+
while_blocks_index = (0...extracted_statements.length).to_a
|
2026
|
+
|
2027
|
+
rejected_elements_index = rejected_elements_index.flatten
|
2028
|
+
|
2029
|
+
while_blocks_index -= rejected_elements_index
|
2030
|
+
|
2031
|
+
modified_while_statements = while_statements.collect {|string| convert_string_to_array(string,temporary_nila_file)}
|
2032
|
+
|
2033
|
+
modified_while_statements = modified_while_statements.collect {|block| compile_while_syntax(block)}.reverse
|
2034
|
+
|
2035
|
+
while_blocks_index = while_blocks_index.collect {|element| "--whileblock#{element}"}.reverse
|
2036
|
+
|
2037
|
+
rejected_elements_index = rejected_elements_index.collect {|element| "--whileblock#{element}"}.reverse
|
2038
|
+
|
2039
|
+
rejected_elements = rejected_elements.reverse
|
2040
|
+
|
2041
|
+
joined_file_contents = modified_input_contents.join
|
2042
|
+
|
2043
|
+
until while_blocks_index.empty? and rejected_elements_index.empty?
|
2044
|
+
|
2045
|
+
if !while_blocks_index.empty?
|
2046
|
+
|
2047
|
+
if joined_file_contents.include?(while_blocks_index[0])
|
2048
|
+
|
2049
|
+
joined_file_contents = joined_file_contents.sub(while_blocks_index[0],modified_while_statements[0].join)
|
2050
|
+
|
2051
|
+
while_blocks_index.delete_at(0)
|
2052
|
+
|
2053
|
+
modified_while_statements.delete_at(0)
|
2054
|
+
|
2055
|
+
else
|
2056
|
+
|
2057
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0])
|
2058
|
+
|
2059
|
+
rejected_elements_index.delete_at(0)
|
2060
|
+
|
2061
|
+
rejected_elements.delete_at(0)
|
2062
|
+
|
2063
|
+
end
|
2064
|
+
|
2065
|
+
else
|
2066
|
+
|
2067
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0],rejected_elements[0])
|
2068
|
+
|
2069
|
+
rejected_elements_index.delete_at(0)
|
2070
|
+
|
2071
|
+
rejected_elements.delete_at(0)
|
2072
|
+
|
2073
|
+
end
|
2074
|
+
|
2075
|
+
end
|
2076
|
+
|
2077
|
+
else
|
2078
|
+
|
2079
|
+
joined_file_contents = input_file_contents.join
|
2080
|
+
|
2081
|
+
end
|
2082
|
+
|
2083
|
+
file_id = open(temporary_nila_file, 'w')
|
2084
|
+
|
2085
|
+
file_id.write(joined_file_contents)
|
2086
|
+
|
2087
|
+
file_id.close()
|
2088
|
+
|
2089
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
2090
|
+
|
2091
|
+
return line_by_line_contents
|
1835
2092
|
|
1836
2093
|
end
|
1837
2094
|
|
1838
|
-
|
2095
|
+
file_contents = replace_unless_until(input_file_contents)
|
1839
2096
|
|
1840
|
-
|
2097
|
+
file_contents = compile_regular_if(file_contents,temporary_nila_file)
|
1841
2098
|
|
1842
|
-
|
2099
|
+
file_contents = compile_regular_while(file_contents,temporary_nila_file)
|
1843
2100
|
|
1844
|
-
|
2101
|
+
file_contents = compile_inline_conditionals(file_contents,temporary_nila_file)
|
1845
2102
|
|
1846
|
-
|
2103
|
+
return file_contents
|
1847
2104
|
|
1848
2105
|
end
|
1849
2106
|
|
@@ -1867,7 +2124,7 @@ def compile(input_file_path,*output_file_name)
|
|
1867
2124
|
|
1868
2125
|
end
|
1869
2126
|
|
1870
|
-
reject_regexp = /(function |Euuf |if |else|elsuf|switch |case|while |for )/
|
2127
|
+
reject_regexp = /(function |Euuf |if |else|elsuf|switch |case|while |whaaleskey |for )/
|
1871
2128
|
|
1872
2129
|
modified_file_contents = []
|
1873
2130
|
|
@@ -1921,7 +2178,85 @@ def compile(input_file_path,*output_file_name)
|
|
1921
2178
|
|
1922
2179
|
end
|
1923
2180
|
|
1924
|
-
def
|
2181
|
+
def compile_comments(input_file_contents,comments,temporary_nila_file)
|
2182
|
+
|
2183
|
+
#This method converts Nila comments into pure Javascript comments. This method
|
2184
|
+
#handles both single line and multiline comments.
|
2185
|
+
|
2186
|
+
file_contents_as_string = input_file_contents.join
|
2187
|
+
|
2188
|
+
single_line_comments = comments[0]
|
2189
|
+
|
2190
|
+
multiline_comments = comments[1]
|
2191
|
+
|
2192
|
+
single_line_comment_counter = 1
|
2193
|
+
|
2194
|
+
multi_line_comment_counter = 1
|
2195
|
+
|
2196
|
+
ignorable_keywords = [/if/,/while/,/function/]
|
2197
|
+
|
2198
|
+
dummy_replacement_words = ["eeuuff","whaalesskkey","conffoolotion"]
|
2199
|
+
|
2200
|
+
for x in 0...single_line_comments.length
|
2201
|
+
|
2202
|
+
current_singleline_comment = "--single_line_comment[#{single_line_comment_counter}]"
|
2203
|
+
|
2204
|
+
replacement_singleline_string = single_line_comments[x].sub("#","//")
|
2205
|
+
|
2206
|
+
ignorable_keywords.each_with_index do |keyword,index|
|
2207
|
+
|
2208
|
+
if replacement_singleline_string.index(keyword) != nil
|
2209
|
+
|
2210
|
+
replacement_singleline_string = replacement_singleline_string.sub(keyword.inspect[1...-1],dummy_replacement_words[index])
|
2211
|
+
|
2212
|
+
end
|
2213
|
+
|
2214
|
+
end
|
2215
|
+
|
2216
|
+
file_contents_as_string = file_contents_as_string.sub(current_singleline_comment,replacement_singleline_string)
|
2217
|
+
|
2218
|
+
single_line_comment_counter += 1
|
2219
|
+
|
2220
|
+
|
2221
|
+
end
|
2222
|
+
|
2223
|
+
for y in 0...multiline_comments.length
|
2224
|
+
|
2225
|
+
current_multiline_comment = "--multiline_comment[#{multi_line_comment_counter}]"
|
2226
|
+
|
2227
|
+
replacement_multiline_string = multiline_comments[y].sub("=begin","/*\n")
|
2228
|
+
|
2229
|
+
replacement_multiline_string = replacement_multiline_string.sub("=end","\n*/")
|
2230
|
+
|
2231
|
+
ignorable_keywords.each_with_index do |keyword,index|
|
2232
|
+
|
2233
|
+
if replacement_multiline_string.index(keyword) != nil
|
2234
|
+
|
2235
|
+
replacement_multiline_string = replacement_multiline_string.sub(keyword.inspect[1...-1],dummy_replacement_words[index])
|
2236
|
+
|
2237
|
+
end
|
2238
|
+
|
2239
|
+
end
|
2240
|
+
|
2241
|
+
file_contents_as_string = file_contents_as_string.sub(current_multiline_comment,replacement_multiline_string)
|
2242
|
+
|
2243
|
+
multi_line_comment_counter += 1
|
2244
|
+
|
2245
|
+
end
|
2246
|
+
|
2247
|
+
file_id = open(temporary_nila_file, 'w')
|
2248
|
+
|
2249
|
+
file_id.write(file_contents_as_string)
|
2250
|
+
|
2251
|
+
file_id.close()
|
2252
|
+
|
2253
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
2254
|
+
|
2255
|
+
line_by_line_contents
|
2256
|
+
|
2257
|
+
end
|
2258
|
+
|
2259
|
+
def pretty_print_javascript(javascript_file_contents,temporary_nila_file,comments)
|
1925
2260
|
|
1926
2261
|
def reset_tabs(input_file_contents)
|
1927
2262
|
|
@@ -1981,22 +2316,6 @@ def compile(input_file_path,*output_file_name)
|
|
1981
2316
|
|
1982
2317
|
end
|
1983
2318
|
|
1984
|
-
def previous_formatting(input_string,tab_counter,temporary_nila_file)
|
1985
|
-
|
1986
|
-
string_as_array = convert_string_to_array(input_string,temporary_nila_file)
|
1987
|
-
|
1988
|
-
modified_array = []
|
1989
|
-
|
1990
|
-
string_as_array.each do |line|
|
1991
|
-
|
1992
|
-
modified_array << " "*tab_counter + line
|
1993
|
-
|
1994
|
-
end
|
1995
|
-
|
1996
|
-
return modified_array.join
|
1997
|
-
|
1998
|
-
end
|
1999
|
-
|
2000
2319
|
def fix_newlines(file_contents)
|
2001
2320
|
|
2002
2321
|
def extract_blocks(file_contents)
|
@@ -2216,10 +2535,28 @@ def compile(input_file_path,*output_file_name)
|
|
2216
2535
|
|
2217
2536
|
end
|
2218
2537
|
|
2538
|
+
def replace_ignored_words(input_string)
|
2539
|
+
|
2540
|
+
ignorable_keywords = [/if/,/while/,/function/]
|
2541
|
+
|
2542
|
+
dummy_replacement_words = ["eeuuff","whaalesskkey","conffoolotion"]
|
2543
|
+
|
2544
|
+
dummy_replacement_words.each_with_index do |word,index|
|
2545
|
+
|
2546
|
+
input_string = input_string.sub(word,ignorable_keywords[index].inspect[1...-1])
|
2547
|
+
|
2548
|
+
end
|
2549
|
+
|
2550
|
+
return input_string
|
2551
|
+
|
2552
|
+
end
|
2553
|
+
|
2219
2554
|
javascript_regexp = /(if |while |function |function\()/
|
2220
2555
|
|
2221
2556
|
javascript_file_contents = javascript_file_contents.collect {|element| element.sub("Euuf","if")}
|
2222
2557
|
|
2558
|
+
javascript_file_contents = javascript_file_contents.collect {|element| element.sub("whaaleskey","while")}
|
2559
|
+
|
2223
2560
|
javascript_file_contents = reset_tabs(javascript_file_contents)
|
2224
2561
|
|
2225
2562
|
starting_locations = []
|
@@ -2320,8 +2657,6 @@ def compile(input_file_path,*output_file_name)
|
|
2320
2657
|
|
2321
2658
|
end
|
2322
2659
|
|
2323
|
-
|
2324
|
-
|
2325
2660
|
remaining_file_contents = ["(function() {\n",remaining_file_contents,"\n}).call(this);"].flatten
|
2326
2661
|
|
2327
2662
|
joined_file_contents = remaining_file_contents.join
|
@@ -2342,7 +2677,6 @@ def compile(input_file_path,*output_file_name)
|
|
2342
2677
|
|
2343
2678
|
end
|
2344
2679
|
|
2345
|
-
|
2346
2680
|
file_id = open(temporary_nila_file, 'w')
|
2347
2681
|
|
2348
2682
|
file_id.write(joined_file_contents)
|
@@ -2355,6 +2689,8 @@ def compile(input_file_path,*output_file_name)
|
|
2355
2689
|
|
2356
2690
|
line_by_line_contents = fix_syntax_indentation(line_by_line_contents)
|
2357
2691
|
|
2692
|
+
line_by_line_contents = line_by_line_contents.collect {|element| replace_ignored_words(element)}
|
2693
|
+
|
2358
2694
|
return line_by_line_contents
|
2359
2695
|
|
2360
2696
|
end
|
@@ -2437,7 +2773,7 @@ def compile(input_file_path,*output_file_name)
|
|
2437
2773
|
|
2438
2774
|
file_contents = compile_comments(file_contents,comments,temp_file)
|
2439
2775
|
|
2440
|
-
file_contents = pretty_print_javascript(file_contents,temp_file)
|
2776
|
+
file_contents = pretty_print_javascript(file_contents,temp_file,comments)
|
2441
2777
|
|
2442
2778
|
file_contents = compile_operators(file_contents)
|
2443
2779
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nilac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.4.1.
|
4
|
+
version: 0.0.4.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-07-
|
12
|
+
date: 2013-07-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: shark
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- shark/features/method_multiple_return.feature
|
69
69
|
- shark/features/multiple_variable_initialization.feature
|
70
70
|
- shark/features/regular_if.feature
|
71
|
+
- shark/features/regular_while.feature
|
71
72
|
- shark/features/unless_until.feature
|
72
73
|
- shark/test_files/array_string_indexing.nila
|
73
74
|
- shark/test_files/correct.js
|
@@ -76,6 +77,7 @@ files:
|
|
76
77
|
- shark/test_files/correct_initialization.js
|
77
78
|
- shark/test_files/correct_multiple_return.js
|
78
79
|
- shark/test_files/correct_regular_if.js
|
80
|
+
- shark/test_files/correct_regular_while.js
|
79
81
|
- shark/test_files/correct_return.js
|
80
82
|
- shark/test_files/correct_single_return.js
|
81
83
|
- shark/test_files/correct_unless_until.js
|
@@ -86,6 +88,7 @@ files:
|
|
86
88
|
- shark/test_files/no_return.nila
|
87
89
|
- shark/test_files/perfect.js
|
88
90
|
- shark/test_files/regular_if.nila
|
91
|
+
- shark/test_files/regular_while.nila
|
89
92
|
- shark/test_files/simple.nila
|
90
93
|
- shark/test_files/single_return.nila
|
91
94
|
- shark/test_files/unless_until.nila
|