nilac 0.0.4.3.7 → 0.0.4.3.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/nilac +227 -6
- data/lib/nilac/version.rb +1 -1
- data/shark/features/case_when.feature +11 -0
- data/shark/test_files/case.nila +23 -0
- data/shark/test_files/correct_case.js +35 -0
- data/src/nilac.rb +227 -6
- metadata +5 -13
- data/.idea/.name +0 -1
- data/.idea/.rakeTasks +0 -7
- data/.idea/encodings.xml +0 -5
- data/.idea/libraries/Generated_files.xml +0 -13
- data/.idea/misc.xml +0 -5
- data/.idea/modules.xml +0 -9
- data/.idea/nila.iml +0 -21
- data/.idea/scopes/scope_settings.xml +0 -5
- data/.idea/vcs.xml +0 -7
- data/.idea/watcherTasks.xml +0 -26
- data/.idea/workspace.xml +0 -495
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 946479712b870511a2fa2aacd1d0eae1b2f71576
|
4
|
+
data.tar.gz: 1f3329086656b7245311c9b333ddaea3038e3d04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d2b2ce198fbcb2336e378f5a992136044f11b28ed98068d315c77c4d7d6b0b540886c7934f33ed14bed62427c0490091d42ffc2f1a635b8ac39ae0cbdd5d910
|
7
|
+
data.tar.gz: 5ea3b07089d657c3772df5105e63ca25646777356f4fe30a2003e4f4e8fa98d88e4c8c93b725f63d4ecfc1215d8a626b4d684b7e94815882cb1c93ae2dac400c
|
data/bin/nilac
CHANGED
@@ -1490,7 +1490,7 @@ def compile(input_file_path, *output_file_name)
|
|
1490
1490
|
|
1491
1491
|
end
|
1492
1492
|
|
1493
|
-
javascript_regexp = /(if |while |for |function |function\(|%[
|
1493
|
+
javascript_regexp = /(if |while |for |function |function\(|%[qQw]*\{)/
|
1494
1494
|
|
1495
1495
|
modified_file_contents = input_file_contents.clone.collect {|element| replace_strings(element)}
|
1496
1496
|
|
@@ -2265,6 +2265,10 @@ def compile(input_file_path, *output_file_name)
|
|
2265
2265
|
|
2266
2266
|
".empty?" => ".length == 0",
|
2267
2267
|
|
2268
|
+
".upcase" => ".toUpperCase()",
|
2269
|
+
|
2270
|
+
".downcase" => ".toLowerCase()",
|
2271
|
+
|
2268
2272
|
}
|
2269
2273
|
|
2270
2274
|
method_map = method_map_replacement.keys
|
@@ -2342,7 +2346,7 @@ def compile(input_file_path, *output_file_name)
|
|
2342
2346
|
|
2343
2347
|
"nil" => "null",
|
2344
2348
|
|
2345
|
-
"Array.new" => "Array()"
|
2349
|
+
"Array.new" => "new Array()"
|
2346
2350
|
|
2347
2351
|
}
|
2348
2352
|
|
@@ -3847,6 +3851,207 @@ def compile(input_file_path, *output_file_name)
|
|
3847
3851
|
|
3848
3852
|
end
|
3849
3853
|
|
3854
|
+
def compile_case_statement(input_file_contents,temporary_nila_file)
|
3855
|
+
|
3856
|
+
# This method compiles simple Ruby style case statements to Javascript
|
3857
|
+
# equivalent switch case statements
|
3858
|
+
|
3859
|
+
# For an example, look at shark/test_files/case.nila
|
3860
|
+
|
3861
|
+
def replace_strings(input_string)
|
3862
|
+
|
3863
|
+
string_counter = 0
|
3864
|
+
|
3865
|
+
if input_string.count("\"") % 2 == 0
|
3866
|
+
|
3867
|
+
while input_string.include?("\"")
|
3868
|
+
|
3869
|
+
string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
|
3870
|
+
|
3871
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
3872
|
+
|
3873
|
+
string_counter += 1
|
3874
|
+
|
3875
|
+
end
|
3876
|
+
|
3877
|
+
end
|
3878
|
+
|
3879
|
+
if input_string.count("'") % 2 == 0
|
3880
|
+
|
3881
|
+
while input_string.include?("'")
|
3882
|
+
|
3883
|
+
string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
|
3884
|
+
|
3885
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
3886
|
+
|
3887
|
+
string_counter += 1
|
3888
|
+
|
3889
|
+
end
|
3890
|
+
|
3891
|
+
end
|
3892
|
+
|
3893
|
+
return input_string
|
3894
|
+
|
3895
|
+
end
|
3896
|
+
|
3897
|
+
def compile_when_statement(input_block)
|
3898
|
+
|
3899
|
+
condition,body = input_block[0],input_block[1..-1]
|
3900
|
+
|
3901
|
+
if replace_strings(condition.split("when ")[1]).include?(",")
|
3902
|
+
|
3903
|
+
condition_cases = condition.split("when ")[1].split(",").collect {|element| element.strip}
|
3904
|
+
|
3905
|
+
case_replacement = []
|
3906
|
+
|
3907
|
+
condition_cases.each do |ccase|
|
3908
|
+
|
3909
|
+
case_replacement << "case #{ccase}:%$%$ {\n\n"
|
3910
|
+
|
3911
|
+
case_replacement << body.collect {|element| " " + element.strip + "\n\n"}
|
3912
|
+
|
3913
|
+
case_replacement << " break\n%$%$\n}\n"
|
3914
|
+
|
3915
|
+
end
|
3916
|
+
|
3917
|
+
else
|
3918
|
+
|
3919
|
+
case_replacement = []
|
3920
|
+
|
3921
|
+
condition_case = condition.split("when ")[1].strip
|
3922
|
+
|
3923
|
+
case_replacement << "case #{condition_case}:%$%$ {\n\n"
|
3924
|
+
|
3925
|
+
case_replacement << body.collect {|element| " " + element.strip + "\n\n"}
|
3926
|
+
|
3927
|
+
case_replacement << " break\n%$%$\n}\n"
|
3928
|
+
|
3929
|
+
end
|
3930
|
+
|
3931
|
+
return case_replacement.join
|
3932
|
+
|
3933
|
+
end
|
3934
|
+
|
3935
|
+
modified_file_contents = input_file_contents.clone
|
3936
|
+
|
3937
|
+
possible_case_statements = input_file_contents.reject {|element| !element.include?("case ")}
|
3938
|
+
|
3939
|
+
case_statements = []
|
3940
|
+
|
3941
|
+
possible_case_statements.each do |statement|
|
3942
|
+
|
3943
|
+
starting_index = input_file_contents.index(statement)
|
3944
|
+
|
3945
|
+
index = starting_index
|
3946
|
+
|
3947
|
+
until input_file_contents[index].strip.eql?("end")
|
3948
|
+
|
3949
|
+
index += 1
|
3950
|
+
|
3951
|
+
end
|
3952
|
+
|
3953
|
+
case_statements << input_file_contents[starting_index..index].collect {|element| element.clone}.clone
|
3954
|
+
|
3955
|
+
end
|
3956
|
+
|
3957
|
+
legacy = case_statements.collect {|element| element.clone}
|
3958
|
+
|
3959
|
+
replacement_strings = []
|
3960
|
+
|
3961
|
+
case_statements.each do |statement_block|
|
3962
|
+
|
3963
|
+
condition = statement_block[0].split("case")[1].strip
|
3964
|
+
|
3965
|
+
statement_block[0] = "switch(#{condition}) {\n\n"
|
3966
|
+
|
3967
|
+
when_statements = statement_block.reject {|element| !replace_strings(element).include?("when")}
|
3968
|
+
|
3969
|
+
when_statements_index = []
|
3970
|
+
|
3971
|
+
when_statements.each do |statement|
|
3972
|
+
|
3973
|
+
when_statements_index << statement_block.each_index.select{|index| statement_block[index] == statement}
|
3974
|
+
|
3975
|
+
end
|
3976
|
+
|
3977
|
+
when_statements_index = when_statements_index.flatten
|
3978
|
+
|
3979
|
+
if replace_strings(statement_block.join).include?("else\n")
|
3980
|
+
|
3981
|
+
else_statement = statement_block.reject {|element| !replace_strings(element).strip.eql?("else")}
|
3982
|
+
|
3983
|
+
else_block = statement_block[statement_block.index(else_statement[0])+1...-1]
|
3984
|
+
|
3985
|
+
when_statements_index = when_statements_index + statement_block.each_index.select {|index| statement_block[index] == else_statement[0] }.to_a
|
3986
|
+
|
3987
|
+
when_statements_index = when_statements_index.flatten
|
3988
|
+
|
3989
|
+
statement_block[statement_block.index(else_statement[0])..-1] = ["default: %$%$ {\n\n",else_block.collect{|element| " " + element.strip + "\n\n"},"%$%$\n}\n\n}\n\n"].flatten
|
3990
|
+
|
3991
|
+
when_statement_blocks = []
|
3992
|
+
|
3993
|
+
when_statements.each_with_index do |statement,ind|
|
3994
|
+
|
3995
|
+
when_block = statement_block[when_statements_index[ind]...when_statements_index[ind+1]]
|
3996
|
+
|
3997
|
+
when_statement_blocks << when_block
|
3998
|
+
|
3999
|
+
end
|
4000
|
+
|
4001
|
+
replacement_blocks = when_statement_blocks.collect {|element| compile_when_statement(element)}
|
4002
|
+
|
4003
|
+
else
|
4004
|
+
|
4005
|
+
statement_block[-1] = "}\n\n" if statement_block[-1].strip.eql?("end")
|
4006
|
+
|
4007
|
+
when_statement_blocks = []
|
4008
|
+
|
4009
|
+
when_statements_index << -1
|
4010
|
+
|
4011
|
+
when_statements.each_with_index do |statement,ind|
|
4012
|
+
|
4013
|
+
when_block = statement_block[when_statements_index[ind]...when_statements_index[ind+1]]
|
4014
|
+
|
4015
|
+
when_statement_blocks << when_block
|
4016
|
+
|
4017
|
+
end
|
4018
|
+
|
4019
|
+
replacement_blocks = when_statement_blocks.collect {|element| compile_when_statement(element)}
|
4020
|
+
|
4021
|
+
end
|
4022
|
+
|
4023
|
+
statement_block = statement_block.join
|
4024
|
+
|
4025
|
+
when_statement_blocks.each_with_index do |blck,index|
|
4026
|
+
|
4027
|
+
statement_block = statement_block.sub(blck.join,replacement_blocks[index])
|
4028
|
+
|
4029
|
+
end
|
4030
|
+
|
4031
|
+
replacement_strings << statement_block
|
4032
|
+
|
4033
|
+
end
|
4034
|
+
|
4035
|
+
joined_file_contents = modified_file_contents.join
|
4036
|
+
|
4037
|
+
legacy.each_with_index do |statement,index|
|
4038
|
+
|
4039
|
+
joined_file_contents = joined_file_contents.sub(statement.join,replacement_strings[index])
|
4040
|
+
|
4041
|
+
end
|
4042
|
+
|
4043
|
+
file_id = open(temporary_nila_file, 'w')
|
4044
|
+
|
4045
|
+
file_id.write(joined_file_contents)
|
4046
|
+
|
4047
|
+
file_id.close()
|
4048
|
+
|
4049
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
4050
|
+
|
4051
|
+
return line_by_line_contents
|
4052
|
+
|
4053
|
+
end
|
4054
|
+
|
3850
4055
|
def compile_loops(input_file_contents,temporary_nila_file)
|
3851
4056
|
|
3852
4057
|
def compile_times_loop(input_file_contents,temporary_nila_file)
|
@@ -4393,7 +4598,7 @@ def compile(input_file_path, *output_file_name)
|
|
4393
4598
|
|
4394
4599
|
def extract_blocks(file_contents)
|
4395
4600
|
|
4396
|
-
javascript_regexp = /(if |while |for |function\(|((=|:)\s+\{))/
|
4601
|
+
javascript_regexp = /(if |while |for |case |default:|switch\(|function\(|((=|:)\s+\{))/
|
4397
4602
|
|
4398
4603
|
block_starting_lines = file_contents.dup.reject { |element| element.index(javascript_regexp).nil? }[1..-1]
|
4399
4604
|
|
@@ -4493,7 +4698,7 @@ def compile(input_file_path, *output_file_name)
|
|
4493
4698
|
|
4494
4699
|
if !code_block_starting_locations.empty?
|
4495
4700
|
|
4496
|
-
controlregexp = /(if |for |while |,function\(|\(function\(|= function\(|((=|:)\s+\{))/
|
4701
|
+
controlregexp = /(if |for |while |case |default:|switch\(|,function\(|\(function\(|= function\(|((=|:)\s+\{))/
|
4497
4702
|
|
4498
4703
|
code_block_starting_locations = [0, code_block_starting_locations, -1].flatten
|
4499
4704
|
|
@@ -4637,7 +4842,7 @@ def compile(input_file_path, *output_file_name)
|
|
4637
4842
|
|
4638
4843
|
end
|
4639
4844
|
|
4640
|
-
javascript_regexp = /(if |for |while |\(function\(|= function\(|((=|:)\s+\{))/
|
4845
|
+
javascript_regexp = /(if |for |while |case |default:|switch\(|\(function\(|= function\(|((=|:)\s+\{))/
|
4641
4846
|
|
4642
4847
|
if declarable_variables.length > 0
|
4643
4848
|
|
@@ -4779,8 +4984,22 @@ def compile(input_file_path, *output_file_name)
|
|
4779
4984
|
|
4780
4985
|
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
4781
4986
|
|
4987
|
+
line_by_line_contents = line_by_line_contents.collect {|element| element.gsub("%$%$ {","")}
|
4988
|
+
|
4782
4989
|
line_by_line_contents = fix_newlines(line_by_line_contents)
|
4783
4990
|
|
4991
|
+
removable_indices = line_by_line_contents.each_index.select {|index| line_by_line_contents[index].strip == "%$%$;" }
|
4992
|
+
|
4993
|
+
while line_by_line_contents.join.include?("%$%$;")
|
4994
|
+
|
4995
|
+
line_by_line_contents.delete_at(removable_indices[0])
|
4996
|
+
|
4997
|
+
line_by_line_contents.delete_at(removable_indices[0])
|
4998
|
+
|
4999
|
+
removable_indices = line_by_line_contents.each_index.select {|index| line_by_line_contents[index].strip == "%$%$;" }
|
5000
|
+
|
5001
|
+
end
|
5002
|
+
|
4784
5003
|
line_by_line_contents = fix_syntax_indentation(line_by_line_contents)
|
4785
5004
|
|
4786
5005
|
line_by_line_contents = line_by_line_contents.collect { |element| replace_ignored_words(element) }
|
@@ -4912,6 +5131,8 @@ def compile(input_file_path, *output_file_name)
|
|
4912
5131
|
|
4913
5132
|
file_contents = compile_hashes(file_contents,temp_file)
|
4914
5133
|
|
5134
|
+
file_contents = compile_case_statement(file_contents,temp_file)
|
5135
|
+
|
4915
5136
|
file_contents = compile_conditional_structures(file_contents, temp_file)
|
4916
5137
|
|
4917
5138
|
file_contents = compile_blocks(file_contents,temp_file)
|
@@ -5024,7 +5245,7 @@ def find_file_path(input_path, file_extension)
|
|
5024
5245
|
|
5025
5246
|
end
|
5026
5247
|
|
5027
|
-
nilac_version = "0.0.4.3.
|
5248
|
+
nilac_version = "0.0.4.3.8"
|
5028
5249
|
|
5029
5250
|
opts = Slop.parse do
|
5030
5251
|
on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"
|
data/lib/nilac/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature bring Ruby's case when structure to Nila
|
2
|
+
Scenario: Input file with multiple case when structures
|
3
|
+
Given the input file "case.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "case.js"
|
6
|
+
The output file must equal "correct_case.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => src/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --compile $file
|
@@ -0,0 +1,23 @@
|
|
1
|
+
grades = %w{A B A C D F}
|
2
|
+
|
3
|
+
for grade in grades
|
4
|
+
|
5
|
+
case grade
|
6
|
+
when "A", "B"
|
7
|
+
puts 'You are pretty smart!'
|
8
|
+
when "C"
|
9
|
+
puts 'You are intelligent!'
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
num = 5
|
15
|
+
|
16
|
+
case num
|
17
|
+
when 1
|
18
|
+
puts 'Your input was 1'
|
19
|
+
when 2
|
20
|
+
puts 'Your input was 2'
|
21
|
+
else
|
22
|
+
puts "Your input was greater than 2"
|
23
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
+
(function() {
|
3
|
+
var _i, _j, grade, grades, num;
|
4
|
+
|
5
|
+
grades = ["A", "B", "A", "C", "D", "F"];
|
6
|
+
|
7
|
+
for (_i = 0, _j = grades.length; _i < _j; _i += 1) {
|
8
|
+
grade = grades[_i];
|
9
|
+
switch(grade) {
|
10
|
+
case "A":
|
11
|
+
console.log('You are pretty smart!');
|
12
|
+
break;
|
13
|
+
case "B":
|
14
|
+
console.log('You are pretty smart!');
|
15
|
+
break;
|
16
|
+
case "C":
|
17
|
+
console.log('You are intelligent!');
|
18
|
+
break;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
num = 5;
|
23
|
+
|
24
|
+
switch(num) {
|
25
|
+
case 1:
|
26
|
+
console.log('Your input was 1');
|
27
|
+
break;
|
28
|
+
case 2:
|
29
|
+
console.log('Your input was 2');
|
30
|
+
break;
|
31
|
+
default:
|
32
|
+
console.log("Your input was greater than 2");
|
33
|
+
}
|
34
|
+
|
35
|
+
}).call(this);
|
data/src/nilac.rb
CHANGED
@@ -1488,7 +1488,7 @@ def compile(input_file_path, *output_file_name)
|
|
1488
1488
|
|
1489
1489
|
end
|
1490
1490
|
|
1491
|
-
javascript_regexp = /(if |while |for |function |function\(|%[
|
1491
|
+
javascript_regexp = /(if |while |for |function |function\(|%[qQw]*\{)/
|
1492
1492
|
|
1493
1493
|
modified_file_contents = input_file_contents.clone.collect {|element| replace_strings(element)}
|
1494
1494
|
|
@@ -2263,6 +2263,10 @@ def compile(input_file_path, *output_file_name)
|
|
2263
2263
|
|
2264
2264
|
".empty?" => ".length == 0",
|
2265
2265
|
|
2266
|
+
".upcase" => ".toUpperCase()",
|
2267
|
+
|
2268
|
+
".downcase" => ".toLowerCase()",
|
2269
|
+
|
2266
2270
|
}
|
2267
2271
|
|
2268
2272
|
method_map = method_map_replacement.keys
|
@@ -2340,7 +2344,7 @@ def compile(input_file_path, *output_file_name)
|
|
2340
2344
|
|
2341
2345
|
"nil" => "null",
|
2342
2346
|
|
2343
|
-
"Array.new" => "Array()"
|
2347
|
+
"Array.new" => "new Array()"
|
2344
2348
|
|
2345
2349
|
}
|
2346
2350
|
|
@@ -3845,6 +3849,207 @@ def compile(input_file_path, *output_file_name)
|
|
3845
3849
|
|
3846
3850
|
end
|
3847
3851
|
|
3852
|
+
def compile_case_statement(input_file_contents,temporary_nila_file)
|
3853
|
+
|
3854
|
+
# This method compiles simple Ruby style case statements to Javascript
|
3855
|
+
# equivalent switch case statements
|
3856
|
+
|
3857
|
+
# For an example, look at shark/test_files/case.nila
|
3858
|
+
|
3859
|
+
def replace_strings(input_string)
|
3860
|
+
|
3861
|
+
string_counter = 0
|
3862
|
+
|
3863
|
+
if input_string.count("\"") % 2 == 0
|
3864
|
+
|
3865
|
+
while input_string.include?("\"")
|
3866
|
+
|
3867
|
+
string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
|
3868
|
+
|
3869
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
3870
|
+
|
3871
|
+
string_counter += 1
|
3872
|
+
|
3873
|
+
end
|
3874
|
+
|
3875
|
+
end
|
3876
|
+
|
3877
|
+
if input_string.count("'") % 2 == 0
|
3878
|
+
|
3879
|
+
while input_string.include?("'")
|
3880
|
+
|
3881
|
+
string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
|
3882
|
+
|
3883
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
3884
|
+
|
3885
|
+
string_counter += 1
|
3886
|
+
|
3887
|
+
end
|
3888
|
+
|
3889
|
+
end
|
3890
|
+
|
3891
|
+
return input_string
|
3892
|
+
|
3893
|
+
end
|
3894
|
+
|
3895
|
+
def compile_when_statement(input_block)
|
3896
|
+
|
3897
|
+
condition,body = input_block[0],input_block[1..-1]
|
3898
|
+
|
3899
|
+
if replace_strings(condition.split("when ")[1]).include?(",")
|
3900
|
+
|
3901
|
+
condition_cases = condition.split("when ")[1].split(",").collect {|element| element.strip}
|
3902
|
+
|
3903
|
+
case_replacement = []
|
3904
|
+
|
3905
|
+
condition_cases.each do |ccase|
|
3906
|
+
|
3907
|
+
case_replacement << "case #{ccase}:%$%$ {\n\n"
|
3908
|
+
|
3909
|
+
case_replacement << body.collect {|element| " " + element.strip + "\n\n"}
|
3910
|
+
|
3911
|
+
case_replacement << " break\n%$%$\n}\n"
|
3912
|
+
|
3913
|
+
end
|
3914
|
+
|
3915
|
+
else
|
3916
|
+
|
3917
|
+
case_replacement = []
|
3918
|
+
|
3919
|
+
condition_case = condition.split("when ")[1].strip
|
3920
|
+
|
3921
|
+
case_replacement << "case #{condition_case}:%$%$ {\n\n"
|
3922
|
+
|
3923
|
+
case_replacement << body.collect {|element| " " + element.strip + "\n\n"}
|
3924
|
+
|
3925
|
+
case_replacement << " break\n%$%$\n}\n"
|
3926
|
+
|
3927
|
+
end
|
3928
|
+
|
3929
|
+
return case_replacement.join
|
3930
|
+
|
3931
|
+
end
|
3932
|
+
|
3933
|
+
modified_file_contents = input_file_contents.clone
|
3934
|
+
|
3935
|
+
possible_case_statements = input_file_contents.reject {|element| !element.include?("case ")}
|
3936
|
+
|
3937
|
+
case_statements = []
|
3938
|
+
|
3939
|
+
possible_case_statements.each do |statement|
|
3940
|
+
|
3941
|
+
starting_index = input_file_contents.index(statement)
|
3942
|
+
|
3943
|
+
index = starting_index
|
3944
|
+
|
3945
|
+
until input_file_contents[index].strip.eql?("end")
|
3946
|
+
|
3947
|
+
index += 1
|
3948
|
+
|
3949
|
+
end
|
3950
|
+
|
3951
|
+
case_statements << input_file_contents[starting_index..index].collect {|element| element.clone}.clone
|
3952
|
+
|
3953
|
+
end
|
3954
|
+
|
3955
|
+
legacy = case_statements.collect {|element| element.clone}
|
3956
|
+
|
3957
|
+
replacement_strings = []
|
3958
|
+
|
3959
|
+
case_statements.each do |statement_block|
|
3960
|
+
|
3961
|
+
condition = statement_block[0].split("case")[1].strip
|
3962
|
+
|
3963
|
+
statement_block[0] = "switch(#{condition}) {\n\n"
|
3964
|
+
|
3965
|
+
when_statements = statement_block.reject {|element| !replace_strings(element).include?("when")}
|
3966
|
+
|
3967
|
+
when_statements_index = []
|
3968
|
+
|
3969
|
+
when_statements.each do |statement|
|
3970
|
+
|
3971
|
+
when_statements_index << statement_block.each_index.select{|index| statement_block[index] == statement}
|
3972
|
+
|
3973
|
+
end
|
3974
|
+
|
3975
|
+
when_statements_index = when_statements_index.flatten
|
3976
|
+
|
3977
|
+
if replace_strings(statement_block.join).include?("else\n")
|
3978
|
+
|
3979
|
+
else_statement = statement_block.reject {|element| !replace_strings(element).strip.eql?("else")}
|
3980
|
+
|
3981
|
+
else_block = statement_block[statement_block.index(else_statement[0])+1...-1]
|
3982
|
+
|
3983
|
+
when_statements_index = when_statements_index + statement_block.each_index.select {|index| statement_block[index] == else_statement[0] }.to_a
|
3984
|
+
|
3985
|
+
when_statements_index = when_statements_index.flatten
|
3986
|
+
|
3987
|
+
statement_block[statement_block.index(else_statement[0])..-1] = ["default: %$%$ {\n\n",else_block.collect{|element| " " + element.strip + "\n\n"},"%$%$\n}\n\n}\n\n"].flatten
|
3988
|
+
|
3989
|
+
when_statement_blocks = []
|
3990
|
+
|
3991
|
+
when_statements.each_with_index do |statement,ind|
|
3992
|
+
|
3993
|
+
when_block = statement_block[when_statements_index[ind]...when_statements_index[ind+1]]
|
3994
|
+
|
3995
|
+
when_statement_blocks << when_block
|
3996
|
+
|
3997
|
+
end
|
3998
|
+
|
3999
|
+
replacement_blocks = when_statement_blocks.collect {|element| compile_when_statement(element)}
|
4000
|
+
|
4001
|
+
else
|
4002
|
+
|
4003
|
+
statement_block[-1] = "}\n\n" if statement_block[-1].strip.eql?("end")
|
4004
|
+
|
4005
|
+
when_statement_blocks = []
|
4006
|
+
|
4007
|
+
when_statements_index << -1
|
4008
|
+
|
4009
|
+
when_statements.each_with_index do |statement,ind|
|
4010
|
+
|
4011
|
+
when_block = statement_block[when_statements_index[ind]...when_statements_index[ind+1]]
|
4012
|
+
|
4013
|
+
when_statement_blocks << when_block
|
4014
|
+
|
4015
|
+
end
|
4016
|
+
|
4017
|
+
replacement_blocks = when_statement_blocks.collect {|element| compile_when_statement(element)}
|
4018
|
+
|
4019
|
+
end
|
4020
|
+
|
4021
|
+
statement_block = statement_block.join
|
4022
|
+
|
4023
|
+
when_statement_blocks.each_with_index do |blck,index|
|
4024
|
+
|
4025
|
+
statement_block = statement_block.sub(blck.join,replacement_blocks[index])
|
4026
|
+
|
4027
|
+
end
|
4028
|
+
|
4029
|
+
replacement_strings << statement_block
|
4030
|
+
|
4031
|
+
end
|
4032
|
+
|
4033
|
+
joined_file_contents = modified_file_contents.join
|
4034
|
+
|
4035
|
+
legacy.each_with_index do |statement,index|
|
4036
|
+
|
4037
|
+
joined_file_contents = joined_file_contents.sub(statement.join,replacement_strings[index])
|
4038
|
+
|
4039
|
+
end
|
4040
|
+
|
4041
|
+
file_id = open(temporary_nila_file, 'w')
|
4042
|
+
|
4043
|
+
file_id.write(joined_file_contents)
|
4044
|
+
|
4045
|
+
file_id.close()
|
4046
|
+
|
4047
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
4048
|
+
|
4049
|
+
return line_by_line_contents
|
4050
|
+
|
4051
|
+
end
|
4052
|
+
|
3848
4053
|
def compile_loops(input_file_contents,temporary_nila_file)
|
3849
4054
|
|
3850
4055
|
def compile_times_loop(input_file_contents,temporary_nila_file)
|
@@ -4391,7 +4596,7 @@ def compile(input_file_path, *output_file_name)
|
|
4391
4596
|
|
4392
4597
|
def extract_blocks(file_contents)
|
4393
4598
|
|
4394
|
-
javascript_regexp = /(if |while |for |function\(|((=|:)\s+\{))/
|
4599
|
+
javascript_regexp = /(if |while |for |case |default:|switch\(|function\(|((=|:)\s+\{))/
|
4395
4600
|
|
4396
4601
|
block_starting_lines = file_contents.dup.reject { |element| element.index(javascript_regexp).nil? }[1..-1]
|
4397
4602
|
|
@@ -4491,7 +4696,7 @@ def compile(input_file_path, *output_file_name)
|
|
4491
4696
|
|
4492
4697
|
if !code_block_starting_locations.empty?
|
4493
4698
|
|
4494
|
-
controlregexp = /(if |for |while |,function\(|\(function\(|= function\(|((=|:)\s+\{))/
|
4699
|
+
controlregexp = /(if |for |while |case |default:|switch\(|,function\(|\(function\(|= function\(|((=|:)\s+\{))/
|
4495
4700
|
|
4496
4701
|
code_block_starting_locations = [0, code_block_starting_locations, -1].flatten
|
4497
4702
|
|
@@ -4635,7 +4840,7 @@ def compile(input_file_path, *output_file_name)
|
|
4635
4840
|
|
4636
4841
|
end
|
4637
4842
|
|
4638
|
-
javascript_regexp = /(if |for |while |\(function\(|= function\(|((=|:)\s+\{))/
|
4843
|
+
javascript_regexp = /(if |for |while |case |default:|switch\(|\(function\(|= function\(|((=|:)\s+\{))/
|
4639
4844
|
|
4640
4845
|
if declarable_variables.length > 0
|
4641
4846
|
|
@@ -4777,8 +4982,22 @@ def compile(input_file_path, *output_file_name)
|
|
4777
4982
|
|
4778
4983
|
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
4779
4984
|
|
4985
|
+
line_by_line_contents = line_by_line_contents.collect {|element| element.gsub("%$%$ {","")}
|
4986
|
+
|
4780
4987
|
line_by_line_contents = fix_newlines(line_by_line_contents)
|
4781
4988
|
|
4989
|
+
removable_indices = line_by_line_contents.each_index.select {|index| line_by_line_contents[index].strip == "%$%$;" }
|
4990
|
+
|
4991
|
+
while line_by_line_contents.join.include?("%$%$;")
|
4992
|
+
|
4993
|
+
line_by_line_contents.delete_at(removable_indices[0])
|
4994
|
+
|
4995
|
+
line_by_line_contents.delete_at(removable_indices[0])
|
4996
|
+
|
4997
|
+
removable_indices = line_by_line_contents.each_index.select {|index| line_by_line_contents[index].strip == "%$%$;" }
|
4998
|
+
|
4999
|
+
end
|
5000
|
+
|
4782
5001
|
line_by_line_contents = fix_syntax_indentation(line_by_line_contents)
|
4783
5002
|
|
4784
5003
|
line_by_line_contents = line_by_line_contents.collect { |element| replace_ignored_words(element) }
|
@@ -4910,6 +5129,8 @@ def compile(input_file_path, *output_file_name)
|
|
4910
5129
|
|
4911
5130
|
file_contents = compile_hashes(file_contents,temp_file)
|
4912
5131
|
|
5132
|
+
file_contents = compile_case_statement(file_contents,temp_file)
|
5133
|
+
|
4913
5134
|
file_contents = compile_conditional_structures(file_contents, temp_file)
|
4914
5135
|
|
4915
5136
|
file_contents = compile_blocks(file_contents,temp_file)
|
@@ -5022,7 +5243,7 @@ def find_file_path(input_path, file_extension)
|
|
5022
5243
|
|
5023
5244
|
end
|
5024
5245
|
|
5025
|
-
nilac_version = "0.0.4.3.
|
5246
|
+
nilac_version = "0.0.4.3.8"
|
5026
5247
|
|
5027
5248
|
opts = Slop.parse do
|
5028
5249
|
on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"
|