nilac 0.0.4.2.0 → 0.0.4.2.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/lib/nilac/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nilac
2
- VERSION = "0.0.4.2.0"
2
+ VERSION = "0.0.4.2.1"
3
3
  end
@@ -0,0 +1,11 @@
1
+ Feature: This feature brings Ruby style Hashes to Nila
2
+ Scenario: Input file with hashes.
3
+ Given the input file "hashes.nila"
4
+ When the ~compiler is run
5
+ The output file must be "hashes.js"
6
+ The output file must equal "correct_hashes.js"
7
+
8
+ Configurations:
9
+
10
+ ~compiler => src/nilac.rb
11
+ :v $cliusage => ruby :v --compile $file
@@ -0,0 +1,11 @@
1
+ Feature: This feature brings loop keyword to Nila
2
+ Scenario: Input file with loop keyword.
3
+ Given the input file "loop.nila"
4
+ When the ~compiler is run
5
+ The output file must be "loop.js"
6
+ The output file must equal "correct_loop.js"
7
+
8
+ Configurations:
9
+
10
+ ~compiler => src/nilac.rb
11
+ :v $cliusage => ruby :v --compile $file
@@ -0,0 +1,31 @@
1
+ //Written using Nila. Visit http://adhithyan15.github.io/nila
2
+ (function() {
3
+ var inst_section, student_ages;
4
+
5
+ // This file demonstrates several Hash features in Nila
6
+
7
+ inst_section = {
8
+ cello: 'string',
9
+ clarinet: 'woodwind',
10
+ drum: 'percussion',
11
+ oboe: 'woodwind',
12
+ trumpet: 'brass',
13
+ violin: 'string',
14
+ guitar: 'string',
15
+ };
16
+
17
+ if (variable === 10) {
18
+ process.stdout.write("Variable is 10");
19
+ } else if (variable === 20) {
20
+ process.stdout.write("Variable is 20");
21
+ } else {
22
+ process.stdout.write("Variable is something else")
23
+ }
24
+
25
+ student_ages = {
26
+ Jack: 10,
27
+ Jill: 12,
28
+ Bob: 14,
29
+ };
30
+
31
+ }).call(this);
@@ -0,0 +1,15 @@
1
+ //Written using Nila. Visit http://adhithyan15.github.io/nila
2
+ (function() {
3
+ var i;
4
+
5
+ i=0;
6
+
7
+ while (true) {
8
+ i+=1;
9
+ process.stdout.write("" + i + " ");
10
+ if (i===10) {
11
+ break;
12
+ }
13
+ }
14
+
15
+ }).call(this);
@@ -1,6 +1,6 @@
1
1
  //Written using Nila. Visit http://adhithyan15.github.io/nila
2
2
  (function() {
3
- var a;
3
+ var a, line;
4
4
 
5
5
  a = Math.pow(2,3);
6
6
 
@@ -8,4 +8,10 @@
8
8
  console.log("Correct Calculation!");
9
9
  }
10
10
 
11
+ line = "My favorite language is Ruby!";
12
+
13
+ if (line = line.match(/Ruby|Python/)) {
14
+ console.log("Scripting language mentioned: " + line);
15
+ }
16
+
11
17
  }).call(this);
@@ -2,9 +2,9 @@
2
2
  (function() {
3
3
  var i;
4
4
 
5
- // This file demonstrates unless && until statements.
5
+ // This file demonstrates unless and until statements.
6
6
 
7
- // Examples are from http://www.skorks.com/2009/09/a-wealth-of-ruby-loops-and-iterators/ &&
7
+ // Examples are from http://www.skorks.com/2009/09/a-wealth-of-ruby-loops-and-iterators/ and
8
8
 
9
9
  // http://37signals.com/svn/posts/2699-making-sense-with-rubys-unless
10
10
 
@@ -0,0 +1,21 @@
1
+ # This file demonstrates several Hash features in Nila
2
+
3
+ inst_section = {
4
+ 'cello' => 'string',
5
+ 'clarinet' => 'woodwind',
6
+ 'drum': 'percussion',
7
+ 'oboe' : 'woodwind',
8
+ 'trumpet' => 'brass',
9
+ 'violin' => 'string',
10
+ :guitar => 'string'
11
+ }
12
+
13
+ if variable == 10
14
+ print "Variable is 10"
15
+ elsif variable == 20
16
+ print "Variable is 20"
17
+ else
18
+ print "Variable is something else"
19
+ end
20
+
21
+ student_ages = {"Jack" => 10,"Jill" => 12,"Bob" => 14}
@@ -0,0 +1,6 @@
1
+ i=0
2
+ loop do
3
+ i+=1
4
+ print "#{i} "
5
+ break if i==10
6
+ end
@@ -1,3 +1,9 @@
1
1
  a = 2**3
2
2
 
3
- puts "Correct Calculation!" if a == 8
3
+ puts "Correct Calculation!" if a == 8
4
+
5
+ line = "My favorite language is Ruby!"
6
+
7
+ if line =~ /Ruby|Python/
8
+ puts "Scripting language mentioned: #{line}"
9
+ end
data/src/nilac.rb CHANGED
@@ -750,6 +750,8 @@ def compile(input_file_path, *output_file_name)
750
750
 
751
751
  input_file_contents = input_file_contents.collect { |element| element.gsub("%=", "modequal") }
752
752
 
753
+ input_file_contents = input_file_contents.collect { |element| element.gsub("=~", "matchequal") }
754
+
753
755
  for x in 0...input_file_contents.length
754
756
 
755
757
  current_row = input_file_contents[x]
@@ -814,6 +816,8 @@ def compile(input_file_path, *output_file_name)
814
816
 
815
817
  line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("notequal", "!=") }
816
818
 
819
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("matchequal", "=~") }
820
+
817
821
  return variables.uniq, line_by_line_contents
818
822
 
819
823
  end
@@ -1136,6 +1140,108 @@ def compile(input_file_path, *output_file_name)
1136
1140
 
1137
1141
  end
1138
1142
 
1143
+ def compile_hashes(input_file_contents,temporary_nila_file)
1144
+
1145
+ def compile_multiline_hashes(input_file_contents,temporary_nila_file)
1146
+
1147
+ possible_hashes = input_file_contents.reject { |element| !element.include?("{") }
1148
+
1149
+ possible_multiline_hashes = possible_hashes.reject { |element| element.include?("}") }
1150
+
1151
+ multiline_hashes = []
1152
+
1153
+ possible_multiline_hashes.each do |starting_line|
1154
+
1155
+ index = input_file_contents.index(starting_line)
1156
+
1157
+ line = starting_line
1158
+
1159
+ until line.include?("}")
1160
+
1161
+ index += 1
1162
+
1163
+ line = input_file_contents[index]
1164
+
1165
+ end
1166
+
1167
+ multiline_hashes << input_file_contents[input_file_contents.index(starting_line)..index]
1168
+
1169
+ end
1170
+
1171
+ joined_file_contents = input_file_contents.join
1172
+
1173
+ multiline_hashes.each do |hash|
1174
+
1175
+ modified_hash = hash.join
1176
+
1177
+ hash_extract = modified_hash[modified_hash.index("{")..modified_hash.index("}")]
1178
+
1179
+ hash_contents = hash_extract.split("{")[1].split("}")[0].lstrip.rstrip.split(",").collect { |element| element.lstrip.rstrip }
1180
+
1181
+ hash_contents = "{" + hash_contents.join(",") + "}"
1182
+
1183
+ joined_file_contents = joined_file_contents.sub(hash_extract, hash_contents)
1184
+
1185
+ end
1186
+
1187
+ file_id = open(temporary_nila_file, 'w')
1188
+
1189
+ file_id.write(joined_file_contents)
1190
+
1191
+ file_id.close()
1192
+
1193
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
1194
+
1195
+ return line_by_line_contents
1196
+
1197
+ end
1198
+
1199
+ def compile_inline_hashes(input_file_contents)
1200
+
1201
+ modified_file_contents = input_file_contents.clone.collect {|element| element.gsub(/(#|%)\w?\{/,"innerrii0opol115")}
1202
+
1203
+ possible_inline_hashes = modified_file_contents.reject {|element| !element.include?("{")}
1204
+
1205
+ possible_inline_hashes.each do |hash|
1206
+
1207
+ hash_extract = hash[hash.index("{")..hash.index("}")]
1208
+
1209
+ contents = hash_extract[1...-1].split(",")
1210
+
1211
+ hash_contents = []
1212
+
1213
+ contents.each do |items|
1214
+
1215
+ items = items.lstrip.sub(":","") if items.lstrip[0] == ":"
1216
+
1217
+ key, value = items.split("=>").collect {|element| element.lstrip.rstrip} if items.include?("=>")
1218
+
1219
+ key, value = items.split(":").collect {|element| element.lstrip.rstrip} if items.include?(":")
1220
+
1221
+ key = key.gsub("'","").gsub("\"","")
1222
+
1223
+ hash_contents << " #{key}: #{value},"
1224
+
1225
+ end
1226
+
1227
+ replacement_string = "{\n" + hash_contents.join("\n") + "\n};\n"
1228
+
1229
+ input_file_contents[input_file_contents.index(hash)] = input_file_contents[input_file_contents.index(hash)].sub(hash_extract,replacement_string)
1230
+
1231
+ end
1232
+
1233
+ return input_file_contents
1234
+
1235
+ end
1236
+
1237
+ file_contents = compile_multiline_hashes(input_file_contents,temporary_nila_file)
1238
+
1239
+ file_contents = compile_inline_hashes(file_contents)
1240
+
1241
+ return file_contents
1242
+
1243
+ end
1244
+
1139
1245
  def compile_strings(input_file_contents)
1140
1246
 
1141
1247
  def compile_small_q_syntax(input_file_contents)
@@ -1837,6 +1943,8 @@ def compile(input_file_path, *output_file_name)
1837
1943
 
1838
1944
  junk, condition = command.split("unless ")
1839
1945
 
1946
+ condition = condition.gsub(" and "," && ").gsub(" or "," || ").gsub(" not "," !")
1947
+
1840
1948
  replacement_string = "if !(#{condition.lstrip.rstrip})\n"
1841
1949
 
1842
1950
  modified_file_contents[modified_file_contents.index(command)] = replacement_string
@@ -1851,6 +1959,8 @@ def compile(input_file_path, *output_file_name)
1851
1959
 
1852
1960
  junk, condition = command.split("until ")
1853
1961
 
1962
+ condition = condition.gsub(" and "," && ").gsub(" or "," || ").gsub(" not "," !")
1963
+
1854
1964
  replacement_string = "while !(#{condition.lstrip.rstrip})\n"
1855
1965
 
1856
1966
  modified_file_contents[modified_file_contents.index(command)] = replacement_string
@@ -1879,21 +1989,25 @@ def compile(input_file_path, *output_file_name)
1879
1989
 
1880
1990
  line_split = line.split(plain_conditionals[index])
1881
1991
 
1992
+ condition = line_split[1]
1993
+
1994
+ condition = condition.gsub(" and "," && ").gsub(" or "," || ").gsub(" not "," !")
1995
+
1882
1996
  if index == 0
1883
1997
 
1884
- output_statement = "if (#{line_split[1].lstrip.rstrip.gsub("?", "")}) {\n\n#{line_split[0]}\n}\n"
1998
+ output_statement = "if (#{condition.lstrip.rstrip.gsub("?", "")}) {\n\n#{line_split[0]}\n}\n"
1885
1999
 
1886
2000
  elsif index == 1
1887
2001
 
1888
- output_statement = "while (#{line_split[1].lstrip.rstrip.gsub("?", "")}) {\n\n#{line_split[0]}\n}\n"
2002
+ output_statement = "while (#{condition.lstrip.rstrip.gsub("?", "")}) {\n\n#{line_split[0]}\n}\n"
1889
2003
 
1890
2004
  elsif index == 2
1891
2005
 
1892
- output_statement = "if (!(#{line_split[1].lstrip.rstrip.gsub("?", "")})) {\n\n#{line_split[0]}\n}\n"
2006
+ output_statement = "if (!(#{condition.lstrip.rstrip.gsub("?", "")})) {\n\n#{line_split[0]}\n}\n"
1893
2007
 
1894
2008
  elsif index == 3
1895
2009
 
1896
- output_statement = "while (!(#{line_split[1].lstrip.rstrip.gsub("?", "")})) {\n\n#{line_split[0]}\n}\n"
2010
+ output_statement = "while (!(#{condition.lstrip.rstrip.gsub("?", "")})) {\n\n#{line_split[0]}\n}\n"
1897
2011
 
1898
2012
  end
1899
2013
 
@@ -2059,6 +2173,8 @@ def compile(input_file_path, *output_file_name)
2059
2173
 
2060
2174
  junk, condition = starting_line.split("if")
2061
2175
 
2176
+ condition = condition.gsub(" and "," && ").gsub(" or "," || ").gsub(" not "," !")
2177
+
2062
2178
  input_block[0] = "Euuf (#{condition.lstrip.rstrip.gsub("?", "")}) {\n"
2063
2179
 
2064
2180
  input_block[-1] = input_block[-1].lstrip.sub("end", "}")
@@ -2069,6 +2185,8 @@ def compile(input_file_path, *output_file_name)
2069
2185
 
2070
2186
  junk, condition = statement.split("elsuf")
2071
2187
 
2188
+ condition = condition.gsub(" and "," && ").gsub(" or "," || ").gsub(" not "," !")
2189
+
2072
2190
  input_block[input_block.index(statement)] = "} elsuf (#{condition.lstrip.rstrip.gsub("?", "")}) {\n"
2073
2191
 
2074
2192
  end
@@ -2479,6 +2597,274 @@ def compile(input_file_path, *output_file_name)
2479
2597
 
2480
2598
  end
2481
2599
 
2600
+ def compile_loop_keyword(input_file_contents,temporary_nila_file)
2601
+
2602
+ def convert_string_to_array(input_string, temporary_nila_file)
2603
+
2604
+ file_id = open(temporary_nila_file, 'w')
2605
+
2606
+ file_id.write(input_string)
2607
+
2608
+ file_id.close()
2609
+
2610
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
2611
+
2612
+ return line_by_line_contents
2613
+
2614
+ end
2615
+
2616
+ def extract_loop_blocks(loop_statement_indexes, input_file_contents)
2617
+
2618
+ possible_loop_blocks = []
2619
+
2620
+ loop_block_counter = 0
2621
+
2622
+ extracted_blocks = []
2623
+
2624
+ controlregexp = /(if |while |def |loop )/
2625
+
2626
+ rejectionregexp = /( if | while )/
2627
+
2628
+ for x in 0...loop_statement_indexes.length-1
2629
+
2630
+ possible_loop_blocks << input_file_contents[loop_statement_indexes[x]..loop_statement_indexes[x+1]]
2631
+
2632
+ end
2633
+
2634
+ end_counter = 0
2635
+
2636
+ end_index = []
2637
+
2638
+ current_block = []
2639
+
2640
+ possible_loop_blocks.each_with_index do |block|
2641
+
2642
+ current_block += block
2643
+
2644
+ current_block.each_with_index do |line, index|
2645
+
2646
+ if line.strip.eql? "end"
2647
+
2648
+ end_counter += 1
2649
+
2650
+ end_index << index
2651
+
2652
+ end
2653
+
2654
+ end
2655
+
2656
+ if end_counter > 0
2657
+
2658
+ until end_index.empty?
2659
+
2660
+ array_extract = current_block[0..end_index[0]].reverse
2661
+
2662
+ index_counter = 0
2663
+
2664
+ array_extract.each_with_index do |line|
2665
+
2666
+ break if (line.lstrip.index(controlregexp) != nil and line.lstrip.index(rejectionregexp).nil?)
2667
+
2668
+ index_counter += 1
2669
+
2670
+ end
2671
+
2672
+ block_extract = array_extract[0..index_counter].reverse
2673
+
2674
+ extracted_blocks << block_extract
2675
+
2676
+ block_start = current_block.index(block_extract[0])
2677
+
2678
+ block_end = current_block.index(block_extract[-1])
2679
+
2680
+ current_block[block_start..block_end] = "--loopblock#{loop_block_counter}"
2681
+
2682
+ loop_block_counter += 1
2683
+
2684
+ end_counter = 0
2685
+
2686
+ end_index = []
2687
+
2688
+ current_block.each_with_index do |line, index|
2689
+
2690
+ if line.strip.eql? "end"
2691
+
2692
+ end_counter += 1
2693
+
2694
+ end_index << index
2695
+
2696
+ end
2697
+
2698
+ end
2699
+
2700
+ end
2701
+
2702
+ end
2703
+
2704
+ end
2705
+
2706
+ return current_block, extracted_blocks
2707
+
2708
+ end
2709
+
2710
+ def compile_loop_syntax(input_block)
2711
+
2712
+ modified_input_block = input_block.dup
2713
+
2714
+ strings = []
2715
+
2716
+ string_counter = 0
2717
+
2718
+ input_block.each_with_index do |line, index|
2719
+
2720
+ if line.include?("\"")
2721
+
2722
+ opening_quotes = line.index("\"")
2723
+
2724
+ string_extract = line[opening_quotes..line.index("\"", opening_quotes+1)]
2725
+
2726
+ strings << string_extract
2727
+
2728
+ modified_input_block[index] = modified_input_block[index].sub(string_extract, "--string{#{string_counter}}")
2729
+
2730
+ string_counter += 1
2731
+
2732
+ end
2733
+
2734
+ end
2735
+
2736
+ input_block = modified_input_block
2737
+
2738
+ starting_line = input_block[0]
2739
+
2740
+ starting_line = starting_line + "\n" if starting_line.lstrip == starting_line
2741
+
2742
+ input_block[0] = "whaaleskey (true) {\n"
2743
+
2744
+ input_block[-1] = input_block[-1].lstrip.sub("end", "}")
2745
+
2746
+ modified_input_block = input_block.dup
2747
+
2748
+ input_block.each_with_index do |line, index|
2749
+
2750
+ if line.include?("--string{")
2751
+
2752
+ junk, remains = line.split("--string{")
2753
+
2754
+ string_index, junk = remains.split("}")
2755
+
2756
+ modified_input_block[index] = modified_input_block[index].sub("--string{#{string_index.strip}}", strings[string_index.strip.to_i])
2757
+
2758
+ end
2759
+
2760
+ end
2761
+
2762
+ return modified_input_block
2763
+
2764
+ end
2765
+
2766
+ possible_loop_statements = input_file_contents.reject { |element| !element.include?("loop") }
2767
+
2768
+ if !possible_loop_statements.empty?
2769
+
2770
+ loop_statement_indexes = []
2771
+
2772
+ possible_loop_statements.each do |statement|
2773
+
2774
+ loop_statement_indexes << input_file_contents.dup.each_index.select { |index| input_file_contents[index] == statement }
2775
+
2776
+ end
2777
+
2778
+ loop_statement_indexes = [0] + loop_statement_indexes.flatten + [-1]
2779
+
2780
+ controlregexp = /(if |def )/
2781
+
2782
+ modified_input_contents, extracted_statements = extract_loop_blocks(loop_statement_indexes, input_file_contents.clone)
2783
+
2784
+ joined_blocks = extracted_statements.collect { |element| element.join }
2785
+
2786
+ loop_statements = joined_blocks.reject { |element| element.index(controlregexp) != nil }
2787
+
2788
+ rejected_elements = joined_blocks - loop_statements
2789
+
2790
+ rejected_elements_index = []
2791
+
2792
+ rejected_elements.each do |element|
2793
+
2794
+ rejected_elements_index << joined_blocks.each_index.select { |index| joined_blocks[index] == element }
2795
+
2796
+ end
2797
+
2798
+ loop_blocks_index = (0...extracted_statements.length).to_a
2799
+
2800
+ rejected_elements_index = rejected_elements_index.flatten
2801
+
2802
+ loop_blocks_index -= rejected_elements_index
2803
+
2804
+ modified_loop_statements = loop_statements.collect { |string| convert_string_to_array(string, temporary_nila_file) }
2805
+
2806
+ modified_loop_statements = modified_loop_statements.collect { |block| compile_loop_syntax(block) }.reverse
2807
+
2808
+ loop_blocks_index = loop_blocks_index.collect { |element| "--loopblock#{element}" }.reverse
2809
+
2810
+ rejected_elements_index = rejected_elements_index.collect { |element| "--loopblock#{element}" }.reverse
2811
+
2812
+ rejected_elements = rejected_elements.reverse
2813
+
2814
+ joined_file_contents = modified_input_contents.join
2815
+
2816
+ until loop_blocks_index.empty? and rejected_elements_index.empty?
2817
+
2818
+ if !loop_blocks_index.empty?
2819
+
2820
+ if joined_file_contents.include?(loop_blocks_index[0])
2821
+
2822
+ joined_file_contents = joined_file_contents.sub(loop_blocks_index[0], modified_loop_statements[0].join)
2823
+
2824
+ loop_blocks_index.delete_at(0)
2825
+
2826
+ modified_loop_statements.delete_at(0)
2827
+
2828
+ else
2829
+
2830
+ joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
2831
+
2832
+ rejected_elements_index.delete_at(0)
2833
+
2834
+ rejected_elements.delete_at(0)
2835
+
2836
+ end
2837
+
2838
+ else
2839
+
2840
+ joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
2841
+
2842
+ rejected_elements_index.delete_at(0)
2843
+
2844
+ rejected_elements.delete_at(0)
2845
+
2846
+ end
2847
+
2848
+ end
2849
+
2850
+ else
2851
+
2852
+ joined_file_contents = input_file_contents.join
2853
+
2854
+ end
2855
+
2856
+ file_id = open(temporary_nila_file, 'w')
2857
+
2858
+ file_id.write(joined_file_contents)
2859
+
2860
+ file_id.close()
2861
+
2862
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
2863
+
2864
+ return line_by_line_contents
2865
+
2866
+ end
2867
+
2482
2868
  def ignore_statement_modifiers(input_block)
2483
2869
 
2484
2870
  modified_input_block = input_block.dup
@@ -2555,6 +2941,8 @@ def compile(input_file_path, *output_file_name)
2555
2941
 
2556
2942
  file_contents = compile_regular_while(file_contents, temporary_nila_file)
2557
2943
 
2944
+ file_contents = compile_loop_keyword(file_contents,temporary_nila_file)
2945
+
2558
2946
  file_contents = replace_statement_modifiers(file_contents, rejected_lines)
2559
2947
 
2560
2948
  file_contents = compile_inline_conditionals(file_contents, temporary_nila_file)
@@ -2585,9 +2973,9 @@ def compile(input_file_path, *output_file_name)
2585
2973
 
2586
2974
  reject_regexp = /(function |Euuf |if |else|elsuf|switch |case|while |whaaleskey |for )/
2587
2975
 
2588
- modified_file_contents = []
2976
+ modified_file_contents = input_file_contents.dup
2589
2977
 
2590
- input_file_contents.each do |line|
2978
+ input_file_contents.each_with_index do |line,index|
2591
2979
 
2592
2980
  if line.index(reject_regexp) == nil
2593
2981
 
@@ -2599,36 +2987,20 @@ def compile(input_file_path, *output_file_name)
2599
2987
 
2600
2988
  if !line.lstrip.eql?("}\n\n")
2601
2989
 
2602
- modified_file_contents << line.rstrip + ";\n\n"
2990
+ if line.rstrip[-1] != "[" and line.rstrip[-1] != "{" and line.rstrip[-1] != "," and line.rstrip[-1] != ";"
2603
2991
 
2604
- else
2992
+ modified_file_contents[index] = line.rstrip + ";\n\n"
2605
2993
 
2606
- modified_file_contents << line
2994
+ end
2607
2995
 
2608
2996
  end
2609
2997
 
2610
- else
2611
-
2612
- modified_file_contents << line
2613
-
2614
2998
  end
2615
2999
 
2616
- else
2617
-
2618
- modified_file_contents << line
2619
-
2620
3000
  end
2621
3001
 
2622
- else
2623
-
2624
- modified_file_contents << line
2625
-
2626
3002
  end
2627
3003
 
2628
- else
2629
-
2630
- modified_file_contents << line
2631
-
2632
3004
  end
2633
3005
 
2634
3006
  end
@@ -2779,7 +3151,7 @@ def compile(input_file_path, *output_file_name)
2779
3151
 
2780
3152
  def extract_blocks(file_contents)
2781
3153
 
2782
- javascript_regexp = /(if |while |function |function\()/
3154
+ javascript_regexp = /(if |while |function |function\(|((=|:)\s+\{))/
2783
3155
 
2784
3156
  block_starting_lines = file_contents.dup.reject { |element| element.index(javascript_regexp).nil? }[1..-1]
2785
3157
 
@@ -2795,7 +3167,7 @@ def compile(input_file_path, *output_file_name)
2795
3167
 
2796
3168
  end
2797
3169
 
2798
- block_ending_lines = file_contents.dup.each_index.select { |index| file_contents[index].eql? " }\n" }
3170
+ block_ending_lines = file_contents.dup.each_index.select { |index| (file_contents[index].eql? " }\n" or file_contents[index].eql? " };\n")}
2799
3171
 
2800
3172
  modified_file_contents = file_contents.dup
2801
3173
 
@@ -2825,7 +3197,7 @@ def compile(input_file_path, *output_file_name)
2825
3197
 
2826
3198
  end
2827
3199
 
2828
- block_ending_lines = modified_file_contents.dup.each_index.select { |index| modified_file_contents[index].eql? " }\n" }
3200
+ block_ending_lines = modified_file_contents.dup.each_index.select { |index| (modified_file_contents[index].eql? " }\n" or modified_file_contents[index].eql? " };\n") }
2829
3201
 
2830
3202
  starting_index = starting_line_indices[0]
2831
3203
 
@@ -2880,7 +3252,7 @@ def compile(input_file_path, *output_file_name)
2880
3252
 
2881
3253
  if !code_block_starting_locations.empty?
2882
3254
 
2883
- controlregexp = /(if |while |function |function\()/
3255
+ controlregexp = /(if |while |function |function\(|((=|:)\s+\{))/
2884
3256
 
2885
3257
  code_block_starting_locations = [0, code_block_starting_locations, -1].flatten
2886
3258
 
@@ -2908,7 +3280,7 @@ def compile(input_file_path, *output_file_name)
2908
3280
 
2909
3281
  current_block.each_with_index do |line, index|
2910
3282
 
2911
- if line.lstrip.eql? "}\n"
3283
+ if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n")
2912
3284
 
2913
3285
  end_counter += 1
2914
3286
 
@@ -3010,7 +3382,7 @@ def compile(input_file_path, *output_file_name)
3010
3382
 
3011
3383
  end
3012
3384
 
3013
- javascript_regexp = /(if |while |function |function\()/
3385
+ javascript_regexp = /(if |while |function |function\(|((=|:)\s+\{))/
3014
3386
 
3015
3387
  javascript_file_contents = javascript_file_contents.collect { |element| element.sub("Euuf", "if") }
3016
3388
 
@@ -3176,9 +3548,49 @@ def compile(input_file_path, *output_file_name)
3176
3548
 
3177
3549
  end
3178
3550
 
3179
- input_file_contents = input_file_contents.collect { |element| element.sub(" and ", " && ") }
3551
+ def compile_match_operator(input_string)
3552
+
3553
+ rejection_exp = /( aannddy | orriioo |nnoottyy )/
3554
+
3555
+ if input_string.include?("=~")
3556
+
3557
+ input_string = input_string.gsub(" && "," aannddy ").gsub(" || "," orriioo ").gsub("!","nnoottyy")
3558
+
3559
+ left, right = input_string.split("=~")
3560
+
3561
+ if left.index(rejection_exp) != nil
3180
3562
 
3181
- input_file_contents = input_file_contents.collect { |element| element.sub(" or ", " || ") }
3563
+ left = left[left.index(rejection_exp)..-1]
3564
+
3565
+ elsif left.index(/\(/)
3566
+
3567
+ left = left[left.index(/\(/)+1..-1]
3568
+
3569
+ end
3570
+
3571
+ if right.index(rejection_exp) != nil
3572
+
3573
+ right = right[0...right.index(rejection_exp)]
3574
+
3575
+ elsif right.index(/\)/)
3576
+
3577
+ right = right[0...right.index(/\)/)]
3578
+
3579
+ end
3580
+
3581
+ original_string = "#{left}=~#{right}"
3582
+
3583
+ replacement_string = "#{left.rstrip} = #{left.rstrip}.match(#{right.lstrip.rstrip})"
3584
+
3585
+ input_string = input_string.sub(original_string,replacement_string)
3586
+
3587
+ input_string = input_string.gsub(" aannddy "," && ").gsub(" orriioo "," || ").gsub("nnoottyy","!")
3588
+
3589
+ end
3590
+
3591
+ return input_string
3592
+
3593
+ end
3182
3594
 
3183
3595
  input_file_contents = input_file_contents.collect { |element| element.sub("==", "===") }
3184
3596
 
@@ -3188,6 +3600,8 @@ def compile(input_file_path, *output_file_name)
3188
3600
 
3189
3601
  input_file_contents = input_file_contents.collect { |element| compile_power_operator(element) }
3190
3602
 
3603
+ input_file_contents = input_file_contents.collect {|element| compile_match_operator(element)}
3604
+
3191
3605
  return input_file_contents
3192
3606
 
3193
3607
  end
@@ -3227,6 +3641,8 @@ def compile(input_file_path, *output_file_name)
3227
3641
 
3228
3642
  file_contents = compile_interpolated_strings(file_contents)
3229
3643
 
3644
+ file_contents = compile_hashes(file_contents,temp_file)
3645
+
3230
3646
  file_contents = compile_conditional_structures(file_contents, temp_file)
3231
3647
 
3232
3648
  file_contents = compile_arrays(file_contents, temp_file)
@@ -3327,7 +3743,7 @@ def find_file_path(input_path, file_extension)
3327
3743
 
3328
3744
  end
3329
3745
 
3330
- nilac_version = "0.0.4.2.0"
3746
+ nilac_version = "0.0.4.2.1"
3331
3747
 
3332
3748
  opts = Slop.parse do
3333
3749
  on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nilac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4.2.0
4
+ version: 0.0.4.2.1
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-26 00:00:00.000000000 Z
12
+ date: 2013-08-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shark
@@ -65,7 +65,9 @@ files:
65
65
  - shark/features/barebones_compilation.feature
66
66
  - shark/features/default_method_parameters.feature
67
67
  - shark/features/fix_newlines.feature
68
+ - shark/features/hashes.feature
68
69
  - shark/features/heredoc.feature
70
+ - shark/features/loop.feature
69
71
  - shark/features/method_multiple_return.feature
70
72
  - shark/features/multiline_array.feature
71
73
  - shark/features/multiple_variable_initialization.feature
@@ -79,9 +81,11 @@ files:
79
81
  - shark/test_files/array_string_indexing.nila
80
82
  - shark/test_files/correct.js
81
83
  - shark/test_files/correct_default_parameters.js
84
+ - shark/test_files/correct_hashes.js
82
85
  - shark/test_files/correct_heredoc.js
83
86
  - shark/test_files/correct_indexing.js
84
87
  - shark/test_files/correct_initialization.js
88
+ - shark/test_files/correct_loop.js
85
89
  - shark/test_files/correct_multiline_array.js
86
90
  - shark/test_files/correct_multiple_return.js
87
91
  - shark/test_files/correct_operators.js
@@ -95,7 +99,9 @@ files:
95
99
  - shark/test_files/correct_whitespace_delimiter.js
96
100
  - shark/test_files/default_parameters.nila
97
101
  - shark/test_files/erratic.nila
102
+ - shark/test_files/hashes.nila
98
103
  - shark/test_files/heredoc.nila
104
+ - shark/test_files/loop.nila
99
105
  - shark/test_files/multiline_array.nila
100
106
  - shark/test_files/multiple_initialization.nila
101
107
  - shark/test_files/multiple_return.nila