nilac 0.0.4.3.9.2 → 0.0.4.3.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/bin/nilac +9 -5748
  4. data/examples/StringMagic.nila +23 -0
  5. data/examples/countdown.nila +31 -0
  6. data/examples/decBin.nila +3 -3
  7. data/examples/marky.js +30 -0
  8. data/examples/marky.nila +23 -0
  9. data/lib/nilac/ErrorDeclarations.rb +11 -0
  10. data/lib/nilac/add_semicolons.rb +57 -0
  11. data/lib/nilac/compile_arrays.rb +266 -0
  12. data/lib/nilac/compile_blocks.rb +137 -0
  13. data/lib/nilac/compile_case_statement.rb +168 -0
  14. data/lib/nilac/compile_classes.rb +18 -0
  15. data/lib/nilac/compile_comments.rb +79 -0
  16. data/lib/nilac/compile_conditional_structures.rb +1378 -0
  17. data/lib/nilac/compile_custom_function_map.rb +45 -0
  18. data/lib/nilac/compile_default_values.rb +160 -0
  19. data/lib/nilac/compile_hashes.rb +123 -0
  20. data/lib/nilac/compile_heredocs.rb +62 -0
  21. data/lib/nilac/compile_integers.rb +23 -0
  22. data/lib/nilac/compile_interpolated_strings.rb +133 -0
  23. data/lib/nilac/compile_loops.rb +211 -0
  24. data/lib/nilac/compile_named_functions.rb +690 -0
  25. data/lib/nilac/compile_operators.rb +83 -0
  26. data/lib/nilac/compile_parallel_assignment.rb +103 -0
  27. data/lib/nilac/compile_ruby_methods.rb +58 -0
  28. data/lib/nilac/compile_special_keywords.rb +44 -0
  29. data/lib/nilac/compile_strings.rb +145 -0
  30. data/lib/nilac/compile_whitespace_delimited_functions.rb +97 -0
  31. data/lib/nilac/create_mac_executable.rb +25 -0
  32. data/lib/nilac/extract_parsable_file.rb +23 -0
  33. data/lib/nilac/find_all_matching_indices.rb +18 -0
  34. data/lib/nilac/find_file_name.rb +13 -0
  35. data/lib/nilac/find_file_path.rb +13 -0
  36. data/lib/nilac/get_variables.rb +123 -0
  37. data/lib/nilac/output_javascript.rb +13 -0
  38. data/lib/nilac/parse_arguments.rb +41 -0
  39. data/lib/nilac/pretty_print_javascript.rb +457 -0
  40. data/lib/nilac/read_file_line_by_line.rb +11 -0
  41. data/lib/nilac/remove_question_marks.rb +46 -0
  42. data/lib/nilac/replace_multiline_comments.rb +92 -0
  43. data/lib/nilac/replace_named_functions.rb +154 -0
  44. data/lib/nilac/replace_singleline_comments.rb +45 -0
  45. data/lib/nilac/replace_strings.rb +35 -0
  46. data/lib/nilac/split_semicolon_seperated_expressions.rb +39 -0
  47. data/lib/nilac/strToArray.rb +15 -0
  48. data/lib/nilac/version.rb +1 -1
  49. data/lib/nilac.rb +324 -1
  50. data/nilac.gemspec +0 -1
  51. data/shark/features/add_auto_return_statement.feature +1 -1
  52. data/shark/features/array_and_string_indexing.feature +1 -1
  53. data/shark/features/barebones_compilation.feature +1 -1
  54. data/shark/features/case_when.feature +1 -1
  55. data/shark/features/default_method_parameters.feature +1 -1
  56. data/shark/features/fix_newlines.feature +1 -1
  57. data/shark/features/hashes.feature +1 -1
  58. data/shark/features/heredoc.feature +1 -1
  59. data/shark/features/if_then_else.feature +1 -1
  60. data/shark/features/loop.feature +1 -1
  61. data/shark/features/method_multiple_return.feature +1 -1
  62. data/shark/features/multiline_array.feature +1 -1
  63. data/shark/features/multiple_variable_initialization.feature +1 -1
  64. data/shark/features/numbers.feature +1 -1
  65. data/shark/features/regular_for.feature +1 -1
  66. data/shark/features/regular_if.feature +1 -1
  67. data/shark/features/regular_while.feature +1 -1
  68. data/shark/features/ruby_methods.feature +1 -1
  69. data/shark/features/ruby_operators.feature +1 -1
  70. data/shark/features/splats.feature +1 -1
  71. data/shark/features/string_interpolation.feature +1 -1
  72. data/shark/features/strings.feature +1 -1
  73. data/shark/features/times.feature +1 -1
  74. data/shark/features/unless_until.feature +1 -1
  75. data/shark/features/whitespace_delimitation.feature +1 -1
  76. metadata +46 -18
  77. data/src/nilac.rb +0 -5753
@@ -0,0 +1,123 @@
1
+ require_relative 'replace_strings'
2
+
3
+ require_relative 'read_file_line_by_line'
4
+
5
+ def get_variables(input_file_contents, temporary_nila_file, *loop_variables)
6
+
7
+ variables = []
8
+
9
+ input_file_contents = input_file_contents.collect { |element| element.gsub("==", "equalequal") }
10
+
11
+ input_file_contents = input_file_contents.collect { |element| element.gsub("!=", "notequal") }
12
+
13
+ input_file_contents = input_file_contents.collect { |element| element.gsub("+=", "plusequal") }
14
+
15
+ input_file_contents = input_file_contents.collect { |element| element.gsub("-=", "minusequal") }
16
+
17
+ input_file_contents = input_file_contents.collect { |element| element.gsub("*=", "multiequal") }
18
+
19
+ input_file_contents = input_file_contents.collect { |element| element.gsub("/=", "divequal") }
20
+
21
+ input_file_contents = input_file_contents.collect { |element| element.gsub("%=", "modequal") }
22
+
23
+ input_file_contents = input_file_contents.collect { |element| element.gsub("=~", "matchequal") }
24
+
25
+ input_file_contents = input_file_contents.collect { |element| element.gsub(">=", "greatequal") }
26
+
27
+ input_file_contents = input_file_contents.collect { |element| element.gsub("<=", "lessyequal") }
28
+
29
+ modified_file_contents = input_file_contents.clone
30
+
31
+ input_file_contents = input_file_contents.collect {|element| replace_strings(element)}
32
+
33
+ javascript_regexp = /(if |while |for )/
34
+
35
+ for x in 0...input_file_contents.length
36
+
37
+ current_row = input_file_contents[x]
38
+
39
+ if current_row.include?("=") and current_row.index(javascript_regexp) == nil
40
+
41
+ current_row = current_row.rstrip + "\n"
42
+
43
+ current_row_split = current_row.split("=")
44
+
45
+ for y in 0...current_row_split.length
46
+
47
+ current_row_split[y] = current_row_split[y].strip
48
+
49
+
50
+ end
51
+
52
+ if current_row_split[0].include?("[") or current_row_split[0].include?("(")
53
+
54
+ current_row_split[0] = current_row_split[0][0...current_row_split[0].index("[")]
55
+
56
+ end
57
+
58
+ current_row_split[0] = current_row_split[0].split(".",2)[0].strip if current_row_split[0].include?(".")
59
+
60
+ variables << current_row_split[0]
61
+
62
+
63
+ end
64
+
65
+ input_file_contents[x] = current_row
66
+
67
+ end
68
+
69
+ file_contents_as_string = modified_file_contents.join
70
+
71
+ file_id = open(temporary_nila_file, 'w')
72
+
73
+ file_id.write(file_contents_as_string)
74
+
75
+ file_id.close()
76
+
77
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
78
+
79
+ for_loop_variables = []
80
+
81
+ for_loop_statements = line_by_line_contents.reject {|line| !line.include?("for")}
82
+
83
+ for_loop_statements = for_loop_statements.reject {|line| line.include?("forEach")}
84
+
85
+ for_loop_statements.each do |statement|
86
+
87
+ varis = statement.split("for (")[1].split(";",2)[0].split(",")
88
+
89
+ for_loop_variables << varis.collect {|vari| vari.strip.split("=")[0].strip}
90
+
91
+ for_loop_variables = for_loop_variables.flatten
92
+
93
+ end
94
+
95
+ variables += loop_variables
96
+
97
+ variables += for_loop_variables
98
+
99
+ variables = variables.flatten
100
+
101
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("plusequal", "+=") }
102
+
103
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("minusequal", "-=") }
104
+
105
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("multiequal", "*=") }
106
+
107
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("divequal", "/=") }
108
+
109
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("modequal", "%=") }
110
+
111
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("equalequal", "==") }
112
+
113
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("notequal", "!=") }
114
+
115
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("matchequal", "=~") }
116
+
117
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("greatequal", ">=") }
118
+
119
+ line_by_line_contents = line_by_line_contents.collect { |element| element.gsub("lessyequal", "<=") }
120
+
121
+ return variables.uniq, line_by_line_contents
122
+
123
+ end
@@ -0,0 +1,13 @@
1
+ def output_javascript(file_contents, output_file, temporary_nila_file)
2
+
3
+ file_id = open(output_file, 'w')
4
+
5
+ File.delete(temporary_nila_file)
6
+
7
+ file_id.write("//Written using Nila. Visit http://adhithyan15.github.io/nila\n")
8
+
9
+ file_id.write(file_contents.join)
10
+
11
+ file_id.close()
12
+
13
+ end
@@ -0,0 +1,41 @@
1
+ def parse_arguments(input_argv)
2
+
3
+ argument_map = {
4
+
5
+ %w{c compile} => "compile",
6
+
7
+ %w{r run} => "run",
8
+
9
+ %w{h help} => "help",
10
+
11
+ %w{v version} => "version",
12
+
13
+ %w{b build} => "build",
14
+
15
+ %w{u update} => "update",
16
+
17
+ %w{re release} => "release",
18
+
19
+ }
20
+
21
+ output_hash = {}
22
+
23
+ argument_map.each do |key,val|
24
+
25
+ if input_argv.include?("-#{key[0]}") or input_argv.include?("--#{key[1]}")
26
+
27
+ output_hash[val.to_sym] = input_argv.reject {|element| element.include?("-#{key[0]}")} if input_argv.include?("-#{key[0]}")
28
+
29
+ output_hash[val.to_sym] = input_argv.reject {|element| element.include?("--#{key[1]}")} if input_argv.include?("--#{key[1]}")
30
+
31
+ else
32
+
33
+ output_hash[val.to_sym] = nil
34
+
35
+ end
36
+
37
+ end
38
+
39
+ return output_hash
40
+
41
+ end
@@ -0,0 +1,457 @@
1
+ require_relative 'find_all_matching_indices'
2
+
3
+ require_relative 'read_file_line_by_line'
4
+
5
+ def pretty_print_javascript(javascript_file_contents, temporary_nila_file,declarable_variables)
6
+
7
+ def reset_tabs(input_file_contents)
8
+
9
+ #This method removes all the predefined tabs to avoid problems in
10
+ #later parts of the beautifying process.
11
+
12
+ for x in 0...input_file_contents.length
13
+
14
+ current_row = input_file_contents[x]
15
+
16
+ if !current_row.eql?("\n")
17
+
18
+ current_row = current_row.lstrip
19
+
20
+ end
21
+
22
+ input_file_contents[x] = current_row
23
+
24
+
25
+ end
26
+
27
+ return input_file_contents
28
+
29
+ end
30
+
31
+ def convert_string_to_array(input_string, temporary_nila_file)
32
+
33
+ file_id = open(temporary_nila_file, 'w')
34
+
35
+ file_id.write(input_string)
36
+
37
+ file_id.close()
38
+
39
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
40
+
41
+ return line_by_line_contents
42
+
43
+ end
44
+
45
+ def fix_newlines(file_contents)
46
+
47
+ def extract_blocks(file_contents)
48
+
49
+ javascript_regexp = /(if |while |for |case |default:|switch\(|function\(|((=|:)\s+\{))/
50
+
51
+ block_starting_lines = file_contents.dup.reject { |element| element.index(javascript_regexp).nil? }[1..-1]
52
+
53
+ block_starting_lines = block_starting_lines.reject { |element| element.include?(" ") }
54
+
55
+ initial_starting_lines = block_starting_lines.dup
56
+
57
+ starting_line_indices = []
58
+
59
+ block_starting_lines.each do |line|
60
+
61
+ starting_line_indices << file_contents.index(line)
62
+
63
+ end
64
+
65
+ block_ending_lines = file_contents.dup.each_index.select { |index| (file_contents[index].eql? " }\n" or file_contents[index].eql? " };\n" or file_contents[index].lstrip.eql?("});\n"))}
66
+
67
+ modified_file_contents = file_contents.dup
68
+
69
+ code_blocks = []
70
+
71
+ starting_index = starting_line_indices[0]
72
+
73
+ begin
74
+
75
+ for x in 0...initial_starting_lines.length
76
+
77
+ code_blocks << modified_file_contents[starting_index..block_ending_lines[0]]
78
+
79
+ modified_file_contents[starting_index..block_ending_lines[0]] = []
80
+
81
+ modified_file_contents.insert(starting_index, " *****")
82
+
83
+ block_starting_lines = modified_file_contents.dup.reject { |element| element.index(javascript_regexp).nil? }[1..-1]
84
+
85
+ block_starting_lines = block_starting_lines.reject { |element| element.include?(" ") }
86
+
87
+ starting_line_indices = []
88
+
89
+ block_starting_lines.each do |line|
90
+
91
+ starting_line_indices << modified_file_contents.index(line)
92
+
93
+ end
94
+
95
+ block_ending_lines = modified_file_contents.dup.each_index.select { |index| (modified_file_contents[index].eql? " }\n" or modified_file_contents[index].eql? " };\n" or modified_file_contents[index].lstrip.eql?("});\n")) }
96
+
97
+ starting_index = starting_line_indices[0]
98
+
99
+ end
100
+
101
+ rescue TypeError
102
+ #
103
+ puts "Whitespace was left unfixed!"
104
+ #
105
+ rescue ArgumentError
106
+ #
107
+ puts "Whitespace was left unfixed!"
108
+
109
+ end
110
+
111
+ return modified_file_contents, code_blocks
112
+
113
+ end
114
+
115
+ compact_contents = file_contents.reject { |element| element.lstrip.eql? "" }
116
+
117
+ compact_contents, code_blocks = extract_blocks(compact_contents)
118
+
119
+ processed_contents = compact_contents[1...-1].collect { |line| line+"\n" }
120
+
121
+ compact_contents = [compact_contents[0]] + processed_contents + [compact_contents[-1]]
122
+
123
+ code_block_locations = compact_contents.each_index.select { |index| compact_contents[index].eql? " *****\n" }
124
+
125
+ initial_locations = code_block_locations.dup
126
+
127
+ starting_index = code_block_locations[0]
128
+
129
+ for x in 0...initial_locations.length
130
+
131
+ code_blocks[x][-1] = code_blocks[x][-1] + "\n"
132
+
133
+ compact_contents = compact_contents[0...starting_index] + code_blocks[x] + compact_contents[starting_index+1..-1]
134
+
135
+ code_block_locations = compact_contents.each_index.select { |index| compact_contents[index].eql? " *****\n" }
136
+
137
+ starting_index = code_block_locations[0]
138
+
139
+ end
140
+
141
+ return compact_contents
142
+
143
+ end
144
+
145
+ def roll_blocks(input_file_contents, code_block_starting_locations)
146
+
147
+ if !code_block_starting_locations.empty?
148
+
149
+ controlregexp = /(if |for |while |case |default:|switch\(|,function\(|\(function\(|= function\(|((=|:)\s+\{))/
150
+
151
+ code_block_starting_locations = [0, code_block_starting_locations, -1].flatten
152
+
153
+ possible_blocks = []
154
+
155
+ block_counter = 0
156
+
157
+ extracted_blocks = []
158
+
159
+ for x in 0...code_block_starting_locations.length-1
160
+
161
+ possible_blocks << input_file_contents[code_block_starting_locations[x]..code_block_starting_locations[x+1]]
162
+
163
+ if possible_blocks.length > 1
164
+
165
+ possible_blocks[-1] = possible_blocks[-1][1..-1]
166
+
167
+ end
168
+
169
+ end
170
+
171
+ end_counter = 0
172
+
173
+ end_index = []
174
+
175
+ current_block = []
176
+
177
+ possible_blocks.each_with_index do |block|
178
+
179
+ if !block[0].eql?(current_block[-1])
180
+
181
+ current_block += block
182
+
183
+ else
184
+
185
+ current_block += block[1..-1]
186
+
187
+ end
188
+
189
+ current_block.each_with_index do |line, index|
190
+
191
+ if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n") or line.lstrip.include?("});\n")
192
+
193
+ end_counter += 1
194
+
195
+ end_index << index
196
+
197
+ end
198
+
199
+ end
200
+
201
+ if end_counter > 0
202
+
203
+ until end_index.empty?
204
+
205
+ array_extract = current_block[0..end_index[0]].reverse
206
+
207
+ index_counter = 0
208
+
209
+ array_extract.each_with_index do |line|
210
+
211
+ break if line.index(controlregexp) != nil
212
+
213
+ index_counter += 1
214
+
215
+ end
216
+
217
+ block_extract = array_extract[0..index_counter].reverse
218
+
219
+ extracted_blocks << block_extract
220
+
221
+ block_start = current_block.index(block_extract[0])
222
+
223
+ block_end = current_block.index(block_extract[-1])
224
+
225
+ current_block[block_start..block_end] = "--block#{block_counter}\n"
226
+
227
+ block_counter += 1
228
+
229
+ end_counter = 0
230
+
231
+ end_index = []
232
+
233
+ current_block.each_with_index do |line, index|
234
+
235
+ if line.lstrip.eql? "}\n" or line.lstrip.eql?("};\n") or line.lstrip.include?("_!;\n") or line.lstrip.include?("});\n")
236
+
237
+ end_counter += 1
238
+
239
+ end_index << index
240
+
241
+ end
242
+
243
+ end
244
+
245
+ end
246
+
247
+ end
248
+
249
+ end
250
+
251
+ return current_block, extracted_blocks
252
+
253
+ else
254
+
255
+ return input_file_contents, []
256
+
257
+ end
258
+
259
+ end
260
+
261
+ def fix_syntax_indentation(input_file_contents)
262
+
263
+ fixableregexp = /(else |elsuf )/
264
+
265
+ need_fixes = input_file_contents.reject { |line| line.index(fixableregexp).nil? }
266
+
267
+ need_fixes.each do |fix|
268
+
269
+ input_file_contents[input_file_contents.index(fix)] = input_file_contents[input_file_contents.index(fix)].sub(" ", "")
270
+
271
+ end
272
+
273
+ return input_file_contents
274
+
275
+ end
276
+
277
+ def replace_ignored_words(input_string)
278
+
279
+ ignorable_keywords = [/if/, /while/, /function/,/function/]
280
+
281
+ dummy_replacement_words = ["eeuuff", "whaalesskkey", "conffoolotion"]
282
+
283
+ dummy_replacement_words.each_with_index do |word, index|
284
+
285
+ input_string = input_string.sub(word, ignorable_keywords[index].inspect[1...-1])
286
+
287
+ end
288
+
289
+ return input_string
290
+
291
+ end
292
+
293
+ javascript_regexp = /(if |for |while |case |default:|switch\(|\(function\(|= function\(|((=|:)\s+\{))/
294
+
295
+ if declarable_variables.length > 0
296
+
297
+ declaration_string = "var " + declarable_variables.flatten.uniq.sort.join(", ") + ";\n\n"
298
+
299
+ javascript_file_contents = [declaration_string,javascript_file_contents].flatten
300
+
301
+ end
302
+
303
+ javascript_file_contents = javascript_file_contents.collect { |element| element.sub("Euuf", "if") }
304
+
305
+ javascript_file_contents = javascript_file_contents.collect { |element| element.sub("whaaleskey", "while") }
306
+
307
+ javascript_file_contents = reset_tabs(javascript_file_contents)
308
+
309
+ starting_locations = []
310
+
311
+ javascript_file_contents.each_with_index do |line, index|
312
+
313
+ if line.index(javascript_regexp) != nil
314
+
315
+ starting_locations << index
316
+
317
+ end
318
+
319
+ end
320
+
321
+ remaining_file_contents, blocks = roll_blocks(javascript_file_contents, starting_locations)
322
+
323
+ joined_file_contents = ""
324
+
325
+ if !blocks.empty?
326
+
327
+ remaining_file_contents = remaining_file_contents.collect { |element| " " + element }
328
+
329
+ main_blocks = remaining_file_contents.reject { |element| !element.include?("--block") }
330
+
331
+ main_block_numbers = main_blocks.collect { |element| element.split("--block")[1] }
332
+
333
+ modified_blocks = main_blocks.dup
334
+
335
+ soft_tabs = " "
336
+
337
+ for x in (0...main_blocks.length)
338
+
339
+ soft_tabs_counter = 1
340
+
341
+ current_block = blocks[main_block_numbers[x].to_i]
342
+
343
+ current_block = [soft_tabs + current_block[0]] + current_block[1...-1] + [soft_tabs*(soft_tabs_counter)+current_block[-1]]
344
+
345
+ soft_tabs_counter += 1
346
+
347
+ current_block = [current_block[0]] + current_block[1...-1].collect { |element| soft_tabs*(soft_tabs_counter)+element } + [current_block[-1]]
348
+
349
+ nested_block = current_block.clone.reject { |row| !row.include?("--block") }
350
+
351
+ nested_block = nested_block.collect { |element| element.split("--block")[1] }
352
+
353
+ nested_block = nested_block.collect { |element| element.rstrip.to_i }
354
+
355
+ modified_nested_block = nested_block.clone
356
+
357
+ current_block = current_block.join("\n")
358
+
359
+ until modified_nested_block.empty?
360
+
361
+ nested_block.each do |block_index|
362
+
363
+ nested_block_contents = blocks[block_index]
364
+
365
+ nested_block_contents = nested_block_contents[0...-1] + [soft_tabs*(soft_tabs_counter)+nested_block_contents[-1]]
366
+
367
+ soft_tabs_counter += 1
368
+
369
+ nested_block_contents = [nested_block_contents[0]] + nested_block_contents[1...-1].collect { |element| soft_tabs*(soft_tabs_counter)+element } + [nested_block_contents[-1]]
370
+
371
+ nested_block_contents = nested_block_contents.reject { |element| element.gsub(" ", "").eql?("") }
372
+
373
+ current_block = current_block.sub("--block#{block_index}", nested_block_contents.join)
374
+
375
+ blocks[block_index] = nested_block_contents
376
+
377
+ modified_nested_block.delete_at(0)
378
+
379
+ soft_tabs_counter -= 1
380
+
381
+ end
382
+
383
+ current_block = convert_string_to_array(current_block, temporary_nila_file)
384
+
385
+ nested_block = current_block.reject { |element| !element.include?("--block") }
386
+
387
+ nested_block = nested_block.collect { |element| element.split("--block")[1] }
388
+
389
+ nested_block = nested_block.collect { |element| element.rstrip.to_i }
390
+
391
+ modified_nested_block = nested_block.clone
392
+
393
+ current_block = current_block.join
394
+
395
+ if !nested_block.empty?
396
+
397
+ soft_tabs_counter += 1
398
+
399
+ end
400
+
401
+ end
402
+
403
+ modified_blocks[x] = current_block
404
+
405
+ end
406
+
407
+ remaining_file_contents = ["(function() {\n", remaining_file_contents, "\n}).call(this);"].flatten
408
+
409
+ joined_file_contents = remaining_file_contents.join
410
+
411
+ main_blocks.each_with_index do |block_id, index|
412
+
413
+ joined_file_contents = joined_file_contents.sub(block_id, modified_blocks[index])
414
+
415
+ end
416
+
417
+ else
418
+
419
+ remaining_file_contents = remaining_file_contents.collect { |element| " " + element }
420
+
421
+ remaining_file_contents = ["(function() {\n", remaining_file_contents, "\n}).call(this);"].flatten
422
+
423
+ joined_file_contents = remaining_file_contents.join
424
+
425
+ end
426
+
427
+ file_id = open(temporary_nila_file, 'w')
428
+
429
+ file_id.write(joined_file_contents)
430
+
431
+ file_id.close()
432
+
433
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
434
+
435
+ line_by_line_contents = line_by_line_contents.collect {|element| element.gsub("%$%$ {","")}
436
+
437
+ line_by_line_contents = fix_newlines(line_by_line_contents)
438
+
439
+ removable_indices = line_by_line_contents.each_index.select {|index| line_by_line_contents[index].strip == "%$%$;" }
440
+
441
+ while line_by_line_contents.join.include?("%$%$;")
442
+
443
+ line_by_line_contents.delete_at(removable_indices[0])
444
+
445
+ line_by_line_contents.delete_at(removable_indices[0])
446
+
447
+ removable_indices = line_by_line_contents.each_index.select {|index| line_by_line_contents[index].strip == "%$%$;" }
448
+
449
+ end
450
+
451
+ line_by_line_contents = fix_syntax_indentation(line_by_line_contents)
452
+
453
+ line_by_line_contents = line_by_line_contents.collect { |element| replace_ignored_words(element) }
454
+
455
+ return line_by_line_contents
456
+
457
+ end
@@ -0,0 +1,11 @@
1
+ def read_file_line_by_line(input_path)
2
+
3
+ file_id = open(input_path)
4
+
5
+ file_line_by_line = file_id.readlines()
6
+
7
+ file_id.close
8
+
9
+ return file_line_by_line
10
+
11
+ end
@@ -0,0 +1,46 @@
1
+ require_relative 'read_file_line_by_line'
2
+
3
+ def remove_question_marks(input_file_contents, variable_list, temporary_nila_file)
4
+
5
+ #A method to remove question marks from global variable names. Local variables are dealt
6
+ #with in their appropriate scope.
7
+
8
+ #Params:
9
+ #input_file_contents => An array containing the contents of the input nila file
10
+ #variable_list => An array containing all the global variables declared in the file
11
+ #temporary_nila_file => A file object used to write temporary contents
12
+
13
+ #Example:
14
+
15
+ #Nila
16
+ #isprime? = false
17
+
18
+ #Javascript Output
19
+ #var isprime;
20
+ #isprime = false;
21
+
22
+ #Returns a modified input_file_contents with all the question marks removed
23
+
24
+ joined_file_contents = input_file_contents.join
25
+
26
+ variable_list.each do |var|
27
+
28
+ if var.include? "?"
29
+
30
+ joined_file_contents = joined_file_contents.gsub(var, var[0...-1])
31
+
32
+ end
33
+
34
+ end
35
+
36
+ file_id = open(temporary_nila_file, 'w')
37
+
38
+ file_id.write(joined_file_contents)
39
+
40
+ file_id.close()
41
+
42
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
43
+
44
+ return line_by_line_contents
45
+
46
+ end