nilac 0.0.4.1.8 → 0.0.4.1.9
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/bin/nilac +105 -6
- data/lib/nilac/version.rb +1 -1
- data/shark/features/heredoc.feature +11 -0
- data/shark/test_files/correct_heredoc.js +11 -0
- data/shark/test_files/{correct_interpolation.js → correct_string_interpolation.js} +4 -0
- data/shark/test_files/correct_string_operators.js +6 -0
- data/shark/test_files/default_parameters.js +21 -0
- data/shark/test_files/heredoc.nila +14 -0
- data/shark/test_files/multiline_array.nila +1 -1
- data/shark/test_files/string_interpolation.js +17 -0
- data/shark/test_files/string_interpolation.nila +4 -0
- data/src/nilac.rb +105 -6
- metadata +8 -3
data/bin/nilac
CHANGED
@@ -202,6 +202,67 @@ def compile(input_file_path,*output_file_name)
|
|
202
202
|
|
203
203
|
end
|
204
204
|
|
205
|
+
def compile_heredocs(input_file_contents,temporary_nila_file)
|
206
|
+
|
207
|
+
joined_file_contents = input_file_contents.join
|
208
|
+
|
209
|
+
possible_heredocs = input_file_contents.reject{|element| !element.include?("<<-")}
|
210
|
+
|
211
|
+
possible_heredocs = possible_heredocs.collect {|element| element.match(/<<-(.*|\w*)/).to_a[0]}
|
212
|
+
|
213
|
+
possible_heredocs.each do |heredoc|
|
214
|
+
|
215
|
+
delimiter = heredoc[3..-1]
|
216
|
+
|
217
|
+
quote = 2
|
218
|
+
|
219
|
+
if delimiter.include?("'")
|
220
|
+
|
221
|
+
quote = 1
|
222
|
+
|
223
|
+
end
|
224
|
+
|
225
|
+
delimiter = delimiter.gsub("\"","") if quote == 2
|
226
|
+
|
227
|
+
delimiter = delimiter.gsub("'","") if quote == 1
|
228
|
+
|
229
|
+
string_split = joined_file_contents.split(heredoc,2)
|
230
|
+
|
231
|
+
string_extract = string_split[1]
|
232
|
+
|
233
|
+
heredoc_extract = string_extract[0...string_extract.index(delimiter)]
|
234
|
+
|
235
|
+
replacement_string = ""
|
236
|
+
|
237
|
+
if quote == 1
|
238
|
+
|
239
|
+
replacement_string = "'#{heredoc_extract.delete("\"")}'".lstrip.inspect
|
240
|
+
|
241
|
+
replacement_string = replacement_string[1..-2]
|
242
|
+
|
243
|
+
elsif quote == 2
|
244
|
+
|
245
|
+
replacement_string = heredoc_extract.lstrip.inspect
|
246
|
+
|
247
|
+
end
|
248
|
+
|
249
|
+
joined_file_contents = joined_file_contents.sub(heredoc + heredoc_extract + delimiter,replacement_string)
|
250
|
+
|
251
|
+
end
|
252
|
+
|
253
|
+
file_id = open(temporary_nila_file, 'w')
|
254
|
+
|
255
|
+
file_id.write(joined_file_contents)
|
256
|
+
|
257
|
+
file_id.close()
|
258
|
+
|
259
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
260
|
+
|
261
|
+
return line_by_line_contents
|
262
|
+
|
263
|
+
|
264
|
+
end
|
265
|
+
|
205
266
|
def compile_interpolated_strings(input_file_contents)
|
206
267
|
|
207
268
|
def find_all_matching_indices(input_string,pattern)
|
@@ -226,6 +287,26 @@ def compile(input_file_path,*output_file_name)
|
|
226
287
|
|
227
288
|
modified_file_contents = input_file_contents.dup
|
228
289
|
|
290
|
+
single_quoted_strings = input_file_contents.reject {|element| !element.include?("'")}
|
291
|
+
|
292
|
+
single_quoted_strings.each do |str|
|
293
|
+
|
294
|
+
modified_string = str.dup
|
295
|
+
|
296
|
+
while modified_string.include?("'")
|
297
|
+
|
298
|
+
first_index = modified_string.index("'")
|
299
|
+
|
300
|
+
string_extract = modified_string[first_index..modified_string.index("'",first_index+1)]
|
301
|
+
|
302
|
+
modified_string = modified_string.sub(string_extract,"--single_quoted")
|
303
|
+
|
304
|
+
end
|
305
|
+
|
306
|
+
input_file_contents[input_file_contents.index(str)] = modified_string
|
307
|
+
|
308
|
+
end
|
309
|
+
|
229
310
|
input_file_contents.each_with_index do |line,index|
|
230
311
|
|
231
312
|
if line.include?("\#{")
|
@@ -786,10 +867,6 @@ def compile(input_file_path,*output_file_name)
|
|
786
867
|
|
787
868
|
def compile_arrays(input_file_contents,temporary_nila_file)
|
788
869
|
|
789
|
-
#Currently the following kinds of array constructs are compilable
|
790
|
-
|
791
|
-
# 1. %w{} syntax
|
792
|
-
|
793
870
|
def compile_w_arrays(input_file_contents)
|
794
871
|
|
795
872
|
def extract(input_string,pattern_start,pattern_end)
|
@@ -1032,12 +1109,30 @@ def compile(input_file_path,*output_file_name)
|
|
1032
1109
|
|
1033
1110
|
end
|
1034
1111
|
|
1112
|
+
def compile_operators(input_file_contents)
|
1113
|
+
|
1114
|
+
possible_operator_usage = input_file_contents.reject {|element| !element.include?("<<")}
|
1115
|
+
|
1116
|
+
possible_operator_usage.each do |usage|
|
1117
|
+
|
1118
|
+
left,right = usage.split("<<")
|
1119
|
+
|
1120
|
+
input_file_contents[input_file_contents.index(usage)] = left.rstrip + ".push(#{right.lstrip})"
|
1121
|
+
|
1122
|
+
end
|
1123
|
+
|
1124
|
+
return input_file_contents
|
1125
|
+
|
1126
|
+
end
|
1127
|
+
|
1035
1128
|
input_file_contents = compile_w_arrays(input_file_contents)
|
1036
1129
|
|
1037
1130
|
input_file_contents = compile_array_indexing(input_file_contents)
|
1038
1131
|
|
1039
1132
|
input_file_contents = compile_multiline(input_file_contents,temporary_nila_file)
|
1040
1133
|
|
1134
|
+
input_file_contents = compile_operators(input_file_contents)
|
1135
|
+
|
1041
1136
|
return input_file_contents
|
1042
1137
|
|
1043
1138
|
|
@@ -3133,6 +3228,8 @@ def compile(input_file_path,*output_file_name)
|
|
3133
3228
|
|
3134
3229
|
file_contents = split_semicolon_seperated_expressions(file_contents)
|
3135
3230
|
|
3231
|
+
file_contents = compile_heredocs(file_contents,temp_file)
|
3232
|
+
|
3136
3233
|
file_contents = compile_interpolated_strings(file_contents)
|
3137
3234
|
|
3138
3235
|
file_contents = compile_conditional_structures(file_contents,temp_file)
|
@@ -3235,7 +3332,7 @@ def find_file_path(input_path,file_extension)
|
|
3235
3332
|
|
3236
3333
|
end
|
3237
3334
|
|
3238
|
-
nilac_version = "0.0.4.1.
|
3335
|
+
nilac_version = "0.0.4.1.9"
|
3239
3336
|
|
3240
3337
|
opts = Slop.parse do
|
3241
3338
|
on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"
|
@@ -3249,6 +3346,8 @@ opts = Slop.parse do
|
|
3249
3346
|
|
3250
3347
|
puts " nilac -v/--version\n"
|
3251
3348
|
|
3349
|
+
puts " nilac -u/--update => Update Checker\n"
|
3350
|
+
|
3252
3351
|
puts " nilac [command] [file_options]\n\n"
|
3253
3352
|
|
3254
3353
|
puts " Available Commands:\n\n"
|
@@ -3265,7 +3364,7 @@ opts = Slop.parse do
|
|
3265
3364
|
|
3266
3365
|
puts " Further Information:\n\n"
|
3267
3366
|
|
3268
|
-
puts " Visit http://adhithyan15.github.io/nila to know more about the project
|
3367
|
+
puts " Visit http://adhithyan15.github.io/nila to know more about the project.\n\n"
|
3269
3368
|
|
3270
3369
|
end
|
3271
3370
|
on :v, :version, 'Output Nilac Version No' do
|
data/lib/nilac/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature brings heredocs to Nila
|
2
|
+
Scenario: Input file with heredocs.
|
3
|
+
Given the input file "heredoc.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "heredoc.js"
|
6
|
+
The output file must equal "correct_heredoc.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => src/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --compile $file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
+
(function() {
|
3
|
+
var numbers;
|
4
|
+
|
5
|
+
console.log("Grocery list\n----\n1. Salad mix.\n2. Strawberries.*\n3. Cereal.\n4. Milk.*\n \n* Organic\n");
|
6
|
+
|
7
|
+
numbers = [1,2,3,4,5,6,7];
|
8
|
+
|
9
|
+
numbers.push(7);
|
10
|
+
|
11
|
+
}).call(this);
|
@@ -16,4 +16,10 @@
|
|
16
16
|
|
17
17
|
str = "this is a wonderful string" + "this is another wonderful string";
|
18
18
|
|
19
|
+
str = "this is a wonderful string";
|
20
|
+
|
21
|
+
str = "this is a wonderful string";
|
22
|
+
|
23
|
+
str = "this is a wonderful string" + "this is another wonderful string";
|
24
|
+
|
19
25
|
}).call(this);
|
@@ -0,0 +1,21 @@
|
|
1
|
+
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
+
(function() {
|
3
|
+
// This is a demo of default parameters
|
4
|
+
|
5
|
+
function fill(container,liquid) {
|
6
|
+
if (container === null) {
|
7
|
+
container = "cup";
|
8
|
+
}
|
9
|
+
if (liquid === null) {
|
10
|
+
liquid = "coffee";
|
11
|
+
}
|
12
|
+
return console.log("Filling " + container + " with " + liquid);
|
13
|
+
}
|
14
|
+
|
15
|
+
fill();
|
16
|
+
|
17
|
+
fill("cup");
|
18
|
+
|
19
|
+
fill("bowl","soup");
|
20
|
+
|
21
|
+
}).call(this);
|
@@ -0,0 +1,17 @@
|
|
1
|
+
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
+
(function() {
|
3
|
+
var msg;
|
4
|
+
|
5
|
+
//This file tests the limits of the string interpolation feature present in Nila
|
6
|
+
|
7
|
+
msg = "Hello " + "world. A lovely place." + "" + "Another " + "Lovely quote";
|
8
|
+
|
9
|
+
console.log(msg);
|
10
|
+
|
11
|
+
console.log("Hello " + "world");
|
12
|
+
|
13
|
+
console.log('Hello #{world}');
|
14
|
+
|
15
|
+
console.log('Hello');
|
16
|
+
|
17
|
+
}).call(this);
|
data/src/nilac.rb
CHANGED
@@ -200,6 +200,67 @@ def compile(input_file_path,*output_file_name)
|
|
200
200
|
|
201
201
|
end
|
202
202
|
|
203
|
+
def compile_heredocs(input_file_contents,temporary_nila_file)
|
204
|
+
|
205
|
+
joined_file_contents = input_file_contents.join
|
206
|
+
|
207
|
+
possible_heredocs = input_file_contents.reject{|element| !element.include?("<<-")}
|
208
|
+
|
209
|
+
possible_heredocs = possible_heredocs.collect {|element| element.match(/<<-(.*|\w*)/).to_a[0]}
|
210
|
+
|
211
|
+
possible_heredocs.each do |heredoc|
|
212
|
+
|
213
|
+
delimiter = heredoc[3..-1]
|
214
|
+
|
215
|
+
quote = 2
|
216
|
+
|
217
|
+
if delimiter.include?("'")
|
218
|
+
|
219
|
+
quote = 1
|
220
|
+
|
221
|
+
end
|
222
|
+
|
223
|
+
delimiter = delimiter.gsub("\"","") if quote == 2
|
224
|
+
|
225
|
+
delimiter = delimiter.gsub("'","") if quote == 1
|
226
|
+
|
227
|
+
string_split = joined_file_contents.split(heredoc,2)
|
228
|
+
|
229
|
+
string_extract = string_split[1]
|
230
|
+
|
231
|
+
heredoc_extract = string_extract[0...string_extract.index(delimiter)]
|
232
|
+
|
233
|
+
replacement_string = ""
|
234
|
+
|
235
|
+
if quote == 1
|
236
|
+
|
237
|
+
replacement_string = "'#{heredoc_extract.delete("\"")}'".lstrip.inspect
|
238
|
+
|
239
|
+
replacement_string = replacement_string[1..-2]
|
240
|
+
|
241
|
+
elsif quote == 2
|
242
|
+
|
243
|
+
replacement_string = heredoc_extract.lstrip.inspect
|
244
|
+
|
245
|
+
end
|
246
|
+
|
247
|
+
joined_file_contents = joined_file_contents.sub(heredoc + heredoc_extract + delimiter,replacement_string)
|
248
|
+
|
249
|
+
end
|
250
|
+
|
251
|
+
file_id = open(temporary_nila_file, 'w')
|
252
|
+
|
253
|
+
file_id.write(joined_file_contents)
|
254
|
+
|
255
|
+
file_id.close()
|
256
|
+
|
257
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
258
|
+
|
259
|
+
return line_by_line_contents
|
260
|
+
|
261
|
+
|
262
|
+
end
|
263
|
+
|
203
264
|
def compile_interpolated_strings(input_file_contents)
|
204
265
|
|
205
266
|
def find_all_matching_indices(input_string,pattern)
|
@@ -224,6 +285,26 @@ def compile(input_file_path,*output_file_name)
|
|
224
285
|
|
225
286
|
modified_file_contents = input_file_contents.dup
|
226
287
|
|
288
|
+
single_quoted_strings = input_file_contents.reject {|element| !(element.count("'") >= 2)}
|
289
|
+
|
290
|
+
single_quoted_strings.each do |str|
|
291
|
+
|
292
|
+
modified_string = str.dup
|
293
|
+
|
294
|
+
while modified_string.include?("'")
|
295
|
+
|
296
|
+
first_index = modified_string.index("'")
|
297
|
+
|
298
|
+
string_extract = modified_string[first_index..modified_string.index("'",first_index+1)]
|
299
|
+
|
300
|
+
modified_string = modified_string.sub(string_extract,"--single_quoted")
|
301
|
+
|
302
|
+
end
|
303
|
+
|
304
|
+
input_file_contents[input_file_contents.index(str)] = modified_string
|
305
|
+
|
306
|
+
end
|
307
|
+
|
227
308
|
input_file_contents.each_with_index do |line,index|
|
228
309
|
|
229
310
|
if line.include?("\#{")
|
@@ -784,10 +865,6 @@ def compile(input_file_path,*output_file_name)
|
|
784
865
|
|
785
866
|
def compile_arrays(input_file_contents,temporary_nila_file)
|
786
867
|
|
787
|
-
#Currently the following kinds of array constructs are compilable
|
788
|
-
|
789
|
-
# 1. %w{} syntax
|
790
|
-
|
791
868
|
def compile_w_arrays(input_file_contents)
|
792
869
|
|
793
870
|
def extract(input_string,pattern_start,pattern_end)
|
@@ -1030,12 +1107,30 @@ def compile(input_file_path,*output_file_name)
|
|
1030
1107
|
|
1031
1108
|
end
|
1032
1109
|
|
1110
|
+
def compile_array_operators(input_file_contents)
|
1111
|
+
|
1112
|
+
possible_operator_usage = input_file_contents.reject {|element| !element.include?("<<")}
|
1113
|
+
|
1114
|
+
possible_operator_usage.each do |usage|
|
1115
|
+
|
1116
|
+
left,right = usage.split("<<")
|
1117
|
+
|
1118
|
+
input_file_contents[input_file_contents.index(usage)] = left.rstrip + ".push(#{right.lstrip})"
|
1119
|
+
|
1120
|
+
end
|
1121
|
+
|
1122
|
+
return input_file_contents
|
1123
|
+
|
1124
|
+
end
|
1125
|
+
|
1033
1126
|
input_file_contents = compile_w_arrays(input_file_contents)
|
1034
1127
|
|
1035
1128
|
input_file_contents = compile_array_indexing(input_file_contents)
|
1036
1129
|
|
1037
1130
|
input_file_contents = compile_multiline(input_file_contents,temporary_nila_file)
|
1038
1131
|
|
1132
|
+
input_file_contents = compile_array_operators(input_file_contents)
|
1133
|
+
|
1039
1134
|
return input_file_contents
|
1040
1135
|
|
1041
1136
|
|
@@ -3131,6 +3226,8 @@ def compile(input_file_path,*output_file_name)
|
|
3131
3226
|
|
3132
3227
|
file_contents = split_semicolon_seperated_expressions(file_contents)
|
3133
3228
|
|
3229
|
+
file_contents = compile_heredocs(file_contents,temp_file)
|
3230
|
+
|
3134
3231
|
file_contents = compile_interpolated_strings(file_contents)
|
3135
3232
|
|
3136
3233
|
file_contents = compile_conditional_structures(file_contents,temp_file)
|
@@ -3233,7 +3330,7 @@ def find_file_path(input_path,file_extension)
|
|
3233
3330
|
|
3234
3331
|
end
|
3235
3332
|
|
3236
|
-
nilac_version = "0.0.4.1.
|
3333
|
+
nilac_version = "0.0.4.1.9"
|
3237
3334
|
|
3238
3335
|
opts = Slop.parse do
|
3239
3336
|
on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"
|
@@ -3247,6 +3344,8 @@ opts = Slop.parse do
|
|
3247
3344
|
|
3248
3345
|
puts " nilac -v/--version\n"
|
3249
3346
|
|
3347
|
+
puts " nilac -u/--update => Update Checker\n"
|
3348
|
+
|
3250
3349
|
puts " nilac [command] [file_options]\n\n"
|
3251
3350
|
|
3252
3351
|
puts " Available Commands:\n\n"
|
@@ -3263,7 +3362,7 @@ opts = Slop.parse do
|
|
3263
3362
|
|
3264
3363
|
puts " Further Information:\n\n"
|
3265
3364
|
|
3266
|
-
puts " Visit http://adhithyan15.github.io/nila to know more about the project
|
3365
|
+
puts " Visit http://adhithyan15.github.io/nila to know more about the project.\n\n"
|
3267
3366
|
|
3268
3367
|
end
|
3269
3368
|
on :v, :version, 'Output Nilac Version No' do
|
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.9
|
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-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: shark
|
@@ -65,6 +65,7 @@ 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/heredoc.feature
|
68
69
|
- shark/features/method_multiple_return.feature
|
69
70
|
- shark/features/multiline_array.feature
|
70
71
|
- shark/features/multiple_variable_initialization.feature
|
@@ -78,9 +79,9 @@ files:
|
|
78
79
|
- shark/test_files/array_string_indexing.nila
|
79
80
|
- shark/test_files/correct.js
|
80
81
|
- shark/test_files/correct_default_parameters.js
|
82
|
+
- shark/test_files/correct_heredoc.js
|
81
83
|
- shark/test_files/correct_indexing.js
|
82
84
|
- shark/test_files/correct_initialization.js
|
83
|
-
- shark/test_files/correct_interpolation.js
|
84
85
|
- shark/test_files/correct_multiline_array.js
|
85
86
|
- shark/test_files/correct_multiple_return.js
|
86
87
|
- shark/test_files/correct_operators.js
|
@@ -88,11 +89,14 @@ files:
|
|
88
89
|
- shark/test_files/correct_regular_while.js
|
89
90
|
- shark/test_files/correct_return.js
|
90
91
|
- shark/test_files/correct_single_return.js
|
92
|
+
- shark/test_files/correct_string_interpolation.js
|
91
93
|
- shark/test_files/correct_string_operators.js
|
92
94
|
- shark/test_files/correct_unless_until.js
|
93
95
|
- shark/test_files/correct_whitespace_delimiter.js
|
96
|
+
- shark/test_files/default_parameters.js
|
94
97
|
- shark/test_files/default_parameters.nila
|
95
98
|
- shark/test_files/erratic.nila
|
99
|
+
- shark/test_files/heredoc.nila
|
96
100
|
- shark/test_files/multiline_array.nila
|
97
101
|
- shark/test_files/multiple_initialization.nila
|
98
102
|
- shark/test_files/multiple_return.nila
|
@@ -103,6 +107,7 @@ files:
|
|
103
107
|
- shark/test_files/regular_while.nila
|
104
108
|
- shark/test_files/simple.nila
|
105
109
|
- shark/test_files/single_return.nila
|
110
|
+
- shark/test_files/string_interpolation.js
|
106
111
|
- shark/test_files/string_interpolation.nila
|
107
112
|
- shark/test_files/string_operators.nila
|
108
113
|
- shark/test_files/unless_until.nila
|