nilac 0.0.4.1.7 → 0.0.4.1.8

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 CHANGED
@@ -204,13 +204,101 @@ def compile(input_file_path,*output_file_name)
204
204
 
205
205
  def compile_interpolated_strings(input_file_contents)
206
206
 
207
+ def find_all_matching_indices(input_string,pattern)
208
+
209
+ locations = []
210
+
211
+ index = input_string.index(pattern)
212
+
213
+ while index != nil
214
+
215
+ locations << index
216
+
217
+ index = input_string.index(pattern,index+1)
218
+
219
+
220
+ end
221
+
222
+ return locations
223
+
224
+
225
+ end
226
+
207
227
  modified_file_contents = input_file_contents.dup
208
228
 
209
229
  input_file_contents.each_with_index do |line,index|
210
230
 
211
231
  if line.include?("\#{")
212
232
 
213
- interpolated_strings = line.scan(/\#{\S{1,}}/)
233
+ modified_line = line.dup
234
+
235
+ interpol_starting_loc = find_all_matching_indices(modified_line,"\#{") + [-1]
236
+
237
+ interpolated_strings = []
238
+
239
+ until interpol_starting_loc.empty?
240
+
241
+ interpol_starting_loc[1] = -2 if interpol_starting_loc[1] == -1
242
+
243
+ string_extract = modified_line[interpol_starting_loc[0]+1..interpol_starting_loc[1]+1]
244
+
245
+ closed_curly_brace_index = find_all_matching_indices(string_extract,"}")
246
+
247
+ index_counter = 0
248
+
249
+ test_string = ""
250
+
251
+ until closed_curly_brace_index.empty?
252
+
253
+ test_string = string_extract[0..closed_curly_brace_index[0]]
254
+
255
+ original_string = test_string.dup
256
+
257
+ if test_string.include?("{")
258
+
259
+ test_string = test_string.reverse.sub("{","$#{index_counter}$").reverse
260
+
261
+ test_string[-1] = "@#{index_counter}@"
262
+
263
+ end
264
+
265
+ string_extract = string_extract.sub(original_string,test_string)
266
+
267
+ closed_curly_brace_index = find_all_matching_indices(string_extract,"}")
268
+
269
+ index_counter += 1
270
+
271
+ end
272
+
273
+ string_extract = string_extract[0..string_extract.length-string_extract.reverse.index(/@\d@/)]
274
+
275
+ interpolated_string = "\#{" + string_extract.split("@#{index_counter-1}@")[0].split("$#{index_counter-1}$")[1] + "}"
276
+
277
+ to_be_replaced = interpolated_string.scan(/\$\d\$/)
278
+
279
+ closing_brace_rep = interpolated_string.scan(/@\d@/)
280
+
281
+ to_be_replaced.each_with_index do |rep,index|
282
+
283
+ interpolated_string = interpolated_string.sub(rep,"{").sub(closing_brace_rep[index],"}")
284
+
285
+ end
286
+
287
+ interpolated_strings << interpolated_string
288
+
289
+ modified_line = modified_line.sub(interpolated_string,"--interpolate")
290
+
291
+ if find_all_matching_indices(modified_line,"\#{").empty?
292
+
293
+ interpol_starting_loc = []
294
+
295
+ else
296
+
297
+ interpol_starting_loc = find_all_matching_indices(modified_line,"\#{") + [-1]
298
+
299
+ end
300
+
301
+ end
214
302
 
215
303
  interpolated_strings.each do |interpol|
216
304
 
@@ -977,6 +1065,10 @@ def compile(input_file_path,*output_file_name)
977
1065
 
978
1066
  delimiter = "}" if delimiter.eql?("{")
979
1067
 
1068
+ delimiter = ")" if delimiter.eql?("(")
1069
+
1070
+ delimiter = ">" if delimiter.eql?("<")
1071
+
980
1072
  if string_extract[-1].eql?(delimiter)
981
1073
 
982
1074
  input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"'#{string_extract[3...-1]}'")
@@ -1017,6 +1109,10 @@ def compile(input_file_path,*output_file_name)
1017
1109
 
1018
1110
  delimiter = "}" if delimiter.eql?("{")
1019
1111
 
1112
+ delimiter = ")" if delimiter.eql?("(")
1113
+
1114
+ delimiter = ">" if delimiter.eql?("<")
1115
+
1020
1116
  if string_extract[-1].eql?(delimiter)
1021
1117
 
1022
1118
  input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"\"#{string_extract[3...-1]}\"")
@@ -1059,6 +1155,10 @@ def compile(input_file_path,*output_file_name)
1059
1155
 
1060
1156
  delimiter = "}" if delimiter.eql?("{")
1061
1157
 
1158
+ delimiter = ")" if delimiter.eql?("(")
1159
+
1160
+ delimiter = ">" if delimiter.eql?("<")
1161
+
1062
1162
  if string_extract[-1].eql?(delimiter)
1063
1163
 
1064
1164
  input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"\"#{string_extract[2...-1]}\"")
@@ -3135,7 +3235,7 @@ def find_file_path(input_path,file_extension)
3135
3235
 
3136
3236
  end
3137
3237
 
3138
- nilac_version = "0.0.4.1.7"
3238
+ nilac_version = "0.0.4.1.8"
3139
3239
 
3140
3240
  opts = Slop.parse do
3141
3241
  on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"
data/lib/nilac/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nilac
2
- VERSION = "0.0.4.1.7"
2
+ VERSION = "0.0.4.1.8"
3
3
  end
@@ -0,0 +1,11 @@
1
+ Feature: This feature bring Ruby style string interpolation to Nila
2
+ Scenario: Input file with string interpolation
3
+ Given the input file "string_interpolation.nila"
4
+ When the ~compiler is run
5
+ The output file must be "string_interpolation.js"
6
+ The output file must equal "correct_string_interpolation.js"
7
+
8
+ Configurations:
9
+
10
+ ~compiler => src/nilac.rb
11
+ :v $cliusage => ruby :v --compile $file
@@ -0,0 +1,13 @@
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
+ }).call(this);
@@ -0,0 +1,13 @@
1
+ //Written using Nila. Visit http://adhithyan15.github.io/nila
2
+ (function() {
3
+ var myarray, name, numbers;
4
+
5
+ numbers = [1,2,3,4,5,6,7,8,9,10];
6
+
7
+ myarray = ["string 1","string 2","string 3"];
8
+
9
+ name = "Adhithya";
10
+
11
+ name[5] = "t";
12
+
13
+ }).call(this);
@@ -0,0 +1,7 @@
1
+ #This file tests the limits of the string interpolation feature present in Nila
2
+
3
+ msg = "Hello #{"world. A lovely place."}" + "Another #{"Lovely quote"}"
4
+
5
+ puts msg
6
+
7
+ puts "Hello #{"world"}"
data/src/nilac.rb CHANGED
@@ -202,13 +202,101 @@ def compile(input_file_path,*output_file_name)
202
202
 
203
203
  def compile_interpolated_strings(input_file_contents)
204
204
 
205
+ def find_all_matching_indices(input_string,pattern)
206
+
207
+ locations = []
208
+
209
+ index = input_string.index(pattern)
210
+
211
+ while index != nil
212
+
213
+ locations << index
214
+
215
+ index = input_string.index(pattern,index+1)
216
+
217
+
218
+ end
219
+
220
+ return locations
221
+
222
+
223
+ end
224
+
205
225
  modified_file_contents = input_file_contents.dup
206
226
 
207
227
  input_file_contents.each_with_index do |line,index|
208
228
 
209
229
  if line.include?("\#{")
210
230
 
211
- interpolated_strings = line.scan(/\#{\S{1,}}/)
231
+ modified_line = line.dup
232
+
233
+ interpol_starting_loc = find_all_matching_indices(modified_line,"\#{") + [-1]
234
+
235
+ interpolated_strings = []
236
+
237
+ until interpol_starting_loc.empty?
238
+
239
+ interpol_starting_loc[1] = -2 if interpol_starting_loc[1] == -1
240
+
241
+ string_extract = modified_line[interpol_starting_loc[0]+1..interpol_starting_loc[1]+1]
242
+
243
+ closed_curly_brace_index = find_all_matching_indices(string_extract,"}")
244
+
245
+ index_counter = 0
246
+
247
+ test_string = ""
248
+
249
+ until closed_curly_brace_index.empty?
250
+
251
+ test_string = string_extract[0..closed_curly_brace_index[0]]
252
+
253
+ original_string = test_string.dup
254
+
255
+ if test_string.include?("{")
256
+
257
+ test_string = test_string.reverse.sub("{","$#{index_counter}$").reverse
258
+
259
+ test_string[-1] = "@#{index_counter}@"
260
+
261
+ end
262
+
263
+ string_extract = string_extract.sub(original_string,test_string)
264
+
265
+ closed_curly_brace_index = find_all_matching_indices(string_extract,"}")
266
+
267
+ index_counter += 1
268
+
269
+ end
270
+
271
+ string_extract = string_extract[0..string_extract.length-string_extract.reverse.index(/@\d@/)]
272
+
273
+ interpolated_string = "\#{" + string_extract.split("@#{index_counter-1}@")[0].split("$#{index_counter-1}$")[1] + "}"
274
+
275
+ to_be_replaced = interpolated_string.scan(/\$\d\$/)
276
+
277
+ closing_brace_rep = interpolated_string.scan(/@\d@/)
278
+
279
+ to_be_replaced.each_with_index do |rep,index|
280
+
281
+ interpolated_string = interpolated_string.sub(rep,"{").sub(closing_brace_rep[index],"}")
282
+
283
+ end
284
+
285
+ interpolated_strings << interpolated_string
286
+
287
+ modified_line = modified_line.sub(interpolated_string,"--interpolate")
288
+
289
+ if find_all_matching_indices(modified_line,"\#{").empty?
290
+
291
+ interpol_starting_loc = []
292
+
293
+ else
294
+
295
+ interpol_starting_loc = find_all_matching_indices(modified_line,"\#{") + [-1]
296
+
297
+ end
298
+
299
+ end
212
300
 
213
301
  interpolated_strings.each do |interpol|
214
302
 
@@ -975,6 +1063,10 @@ def compile(input_file_path,*output_file_name)
975
1063
 
976
1064
  delimiter = "}" if delimiter.eql?("{")
977
1065
 
1066
+ delimiter = ")" if delimiter.eql?("(")
1067
+
1068
+ delimiter = ">" if delimiter.eql?("<")
1069
+
978
1070
  if string_extract[-1].eql?(delimiter)
979
1071
 
980
1072
  input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"'#{string_extract[3...-1]}'")
@@ -1015,6 +1107,10 @@ def compile(input_file_path,*output_file_name)
1015
1107
 
1016
1108
  delimiter = "}" if delimiter.eql?("{")
1017
1109
 
1110
+ delimiter = ")" if delimiter.eql?("(")
1111
+
1112
+ delimiter = ">" if delimiter.eql?("<")
1113
+
1018
1114
  if string_extract[-1].eql?(delimiter)
1019
1115
 
1020
1116
  input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"\"#{string_extract[3...-1]}\"")
@@ -1057,6 +1153,10 @@ def compile(input_file_path,*output_file_name)
1057
1153
 
1058
1154
  delimiter = "}" if delimiter.eql?("{")
1059
1155
 
1156
+ delimiter = ")" if delimiter.eql?("(")
1157
+
1158
+ delimiter = ">" if delimiter.eql?("<")
1159
+
1060
1160
  if string_extract[-1].eql?(delimiter)
1061
1161
 
1062
1162
  input_file_contents[input_file_contents.index(modified_line)] = input_file_contents[input_file_contents.index(modified_line)].sub(string_extract,"\"#{string_extract[2...-1]}\"")
@@ -3133,7 +3233,7 @@ def find_file_path(input_path,file_extension)
3133
3233
 
3134
3234
  end
3135
3235
 
3136
- nilac_version = "0.0.4.1.7"
3236
+ nilac_version = "0.0.4.1.8"
3137
3237
 
3138
3238
  opts = Slop.parse do
3139
3239
  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.1.7
4
+ version: 0.0.4.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -71,6 +71,7 @@ files:
71
71
  - shark/features/regular_if.feature
72
72
  - shark/features/regular_while.feature
73
73
  - shark/features/ruby_operators.feature
74
+ - shark/features/string_interpolation.feature
74
75
  - shark/features/strings.feature
75
76
  - shark/features/unless_until.feature
76
77
  - shark/features/whitespace_delimitation.feature
@@ -79,7 +80,8 @@ files:
79
80
  - shark/test_files/correct_default_parameters.js
80
81
  - shark/test_files/correct_indexing.js
81
82
  - shark/test_files/correct_initialization.js
82
- - shark/test_files/correct_multiline_array.nila
83
+ - shark/test_files/correct_interpolation.js
84
+ - shark/test_files/correct_multiline_array.js
83
85
  - shark/test_files/correct_multiple_return.js
84
86
  - shark/test_files/correct_operators.js
85
87
  - shark/test_files/correct_regular_if.js
@@ -101,6 +103,7 @@ files:
101
103
  - shark/test_files/regular_while.nila
102
104
  - shark/test_files/simple.nila
103
105
  - shark/test_files/single_return.nila
106
+ - shark/test_files/string_interpolation.nila
104
107
  - shark/test_files/string_operators.nila
105
108
  - shark/test_files/unless_until.nila
106
109
  - shark/test_files/whitespace_delimiter.nila
File without changes