nilac 0.0.4.3.9.2 → 0.0.4.3.9.3

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.
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,92 @@
1
+ require_relative "find_file_name"
2
+
3
+ require_relative "find_file_path"
4
+
5
+ require_relative "read_file_line_by_line"
6
+
7
+ def replace_multiline_comments(input_file_contents, nila_file_path, *output_js_file_path)
8
+
9
+ #This method will replace both the single and multiline comments
10
+ #
11
+ #Single line comment will be replaced by => --single_line_comment[n]
12
+ #
13
+ #Multiline comment will be replaced by => --multiline_comment[n]
14
+
15
+ def find_all_matching_indices(input_string, pattern)
16
+
17
+ locations = []
18
+
19
+ index = input_string.index(pattern)
20
+
21
+ while index != nil
22
+
23
+ locations << index
24
+
25
+ index = input_string.index(pattern, index+1)
26
+
27
+
28
+ end
29
+
30
+ return locations
31
+
32
+
33
+ end
34
+
35
+ multiline_comments = []
36
+
37
+ file_contents_as_string = input_file_contents.join
38
+
39
+ modified_file_contents = file_contents_as_string.dup
40
+
41
+ multiline_comment_counter = 1
42
+
43
+ multiline_comments_start = find_all_matching_indices(file_contents_as_string, "=begin")
44
+
45
+ multiline_comments_end = find_all_matching_indices(file_contents_as_string, "=end")
46
+
47
+ for y in 0...multiline_comments_start.length
48
+
49
+ start_of_multiline_comment = multiline_comments_start[y]
50
+
51
+ end_of_multiline_comment = multiline_comments_end[y]
52
+
53
+ multiline_comment = file_contents_as_string[start_of_multiline_comment..end_of_multiline_comment+3]
54
+
55
+ modified_file_contents = modified_file_contents.gsub(multiline_comment, "--multiline_comment[#{multiline_comment_counter}]\n\n")
56
+
57
+ multiline_comment_counter += 1
58
+
59
+ multiline_comments << multiline_comment
60
+
61
+
62
+ end
63
+
64
+ temporary_nila_file = find_file_path(nila_file_path, ".nila") + "temp_nila.nila"
65
+
66
+ if output_js_file_path.empty?
67
+
68
+ output_js_file = find_file_path(nila_file_path, ".nila") + find_file_name(nila_file_path, ".nila") + ".js"
69
+
70
+ else
71
+
72
+ output_js_file = output_js_file_path[0]
73
+
74
+ end
75
+
76
+ file_id = open(temporary_nila_file, 'w')
77
+
78
+ file_id2 = open(output_js_file, 'w')
79
+
80
+ file_id.write(modified_file_contents)
81
+
82
+ file_id.close()
83
+
84
+ file_id2.close()
85
+
86
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
87
+
88
+ comments = multiline_comments.dup
89
+
90
+ return line_by_line_contents, comments, temporary_nila_file, output_js_file
91
+
92
+ end
@@ -0,0 +1,154 @@
1
+ require_relative 'read_file_line_by_line'
2
+
3
+ def replace_named_functions(nila_file_contents, temporary_nila_file)
4
+
5
+ def extract_array(input_array, start_index, end_index)
6
+
7
+ return input_array[start_index..end_index]
8
+
9
+ end
10
+
11
+ end_locations = []
12
+
13
+ key_word_locations = []
14
+
15
+ start_blocks = []
16
+
17
+ end_blocks = []
18
+
19
+ nila_regexp = /(def )/
20
+
21
+ named_code_blocks = []
22
+
23
+ for x in 0...nila_file_contents.length
24
+
25
+ current_row = nila_file_contents[x]
26
+
27
+ if current_row.index(nila_regexp) != nil
28
+
29
+ key_word_locations << x
30
+
31
+ elsif current_row.lstrip.eql?("end\n") || current_row.strip.eql?("end")
32
+
33
+ end_locations << x
34
+
35
+
36
+ end
37
+
38
+
39
+ end
40
+
41
+ unless key_word_locations.empty?
42
+
43
+ modified_file_contents = nila_file_contents.dup
44
+
45
+ for y in 0...end_locations.length
46
+
47
+ current_location = end_locations[y]
48
+
49
+ current_string = modified_file_contents[current_location]
50
+
51
+ finder_location = current_location
52
+
53
+ begin
54
+
55
+ while current_string.index(nila_regexp) == nil
56
+
57
+ finder_location -= 1
58
+
59
+ current_string = modified_file_contents[finder_location]
60
+
61
+ end
62
+
63
+ code_block_begin = finder_location
64
+
65
+ code_block_end = current_location
66
+
67
+ start_blocks << code_block_begin
68
+
69
+ end_blocks << code_block_end
70
+
71
+ code_block_begin_string_split = modified_file_contents[code_block_begin].split(" ")
72
+
73
+ code_block_begin_string_split[0] = code_block_begin_string_split[0].reverse
74
+
75
+ code_block_begin_string = code_block_begin_string_split.join(" ")
76
+
77
+ modified_file_contents[code_block_begin] = code_block_begin_string
78
+
79
+ rescue NoMethodError
80
+
81
+ puts "Function compilation failed!"
82
+
83
+ end
84
+
85
+ end
86
+
87
+ final_modified_file_contents = nila_file_contents.dup
88
+
89
+ joined_file_contents = final_modified_file_contents.join
90
+
91
+ while start_blocks.length != 0
92
+
93
+ top_most_level = start_blocks.min
94
+
95
+ top_most_level_index = start_blocks.index(top_most_level)
96
+
97
+ matching_level = end_blocks[top_most_level_index]
98
+
99
+ named_code_blocks << extract_array(final_modified_file_contents, top_most_level, matching_level)
100
+
101
+ start_blocks.delete_at(top_most_level_index)
102
+
103
+ end_blocks.delete(matching_level)
104
+
105
+ end
106
+
107
+ codeblock_counter = 1
108
+
109
+ named_functions = named_code_blocks.dup
110
+
111
+ nested_functions = []
112
+
113
+ named_code_blocks.each do |codeblock|
114
+
115
+ if joined_file_contents.include?(codeblock.join)
116
+
117
+ joined_file_contents = joined_file_contents.sub(codeblock.join, "--named_function[#{codeblock_counter}]\n")
118
+
119
+ codeblock_counter += 1
120
+
121
+ nested_functions = nested_functions + [[]]
122
+
123
+ else
124
+
125
+ nested_functions[codeblock_counter-2] << codeblock
126
+
127
+ named_functions.delete(codeblock)
128
+
129
+ end
130
+
131
+ end
132
+
133
+ else
134
+
135
+ joined_file_contents = nila_file_contents.join
136
+
137
+ named_functions = []
138
+
139
+ nested_functions = []
140
+
141
+ end
142
+
143
+ file_id = open(temporary_nila_file, 'w')
144
+
145
+ file_id.write(joined_file_contents)
146
+
147
+ file_id.close()
148
+
149
+ line_by_line_contents = read_file_line_by_line(temporary_nila_file)
150
+
151
+ return line_by_line_contents, named_functions, nested_functions
152
+
153
+
154
+ end
@@ -0,0 +1,45 @@
1
+ require_relative 'replace_strings'
2
+
3
+ def replace_singleline_comments(input_file_contents)
4
+
5
+ single_line_comments = []
6
+
7
+ singleline_comment_counter = 1
8
+
9
+ modified_file_contents = input_file_contents.clone
10
+
11
+ for x in 0...input_file_contents.length
12
+
13
+ current_row = replace_strings(input_file_contents[x])
14
+
15
+ if current_row.include?("#")
16
+
17
+ current_row = modified_file_contents[x]
18
+
19
+ comment_start = current_row.index("#")
20
+
21
+ if current_row[comment_start+1] != "{"
22
+
23
+ comment = current_row[comment_start..-1]
24
+
25
+ single_line_comments << comment
26
+
27
+ current_row = current_row.gsub(comment, "--single_line_comment[#{singleline_comment_counter}]\n\n")
28
+
29
+ singleline_comment_counter += 1
30
+
31
+ end
32
+
33
+ else
34
+
35
+ current_row = modified_file_contents[x]
36
+
37
+ end
38
+
39
+ modified_file_contents[x] = current_row
40
+
41
+ end
42
+
43
+ return modified_file_contents, single_line_comments
44
+
45
+ end
@@ -0,0 +1,35 @@
1
+ def replace_strings(input_string)
2
+
3
+ string_counter = 0
4
+
5
+ if input_string.count("\"") % 2 == 0
6
+
7
+ while input_string.include?("\"")
8
+
9
+ string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
10
+
11
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
12
+
13
+ string_counter += 1
14
+
15
+ end
16
+
17
+ end
18
+
19
+ if input_string.count("'") % 2 == 0
20
+
21
+ while input_string.include?("'")
22
+
23
+ string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
24
+
25
+ input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
26
+
27
+ string_counter += 1
28
+
29
+ end
30
+
31
+ end
32
+
33
+ return input_string
34
+
35
+ end
@@ -0,0 +1,39 @@
1
+ def split_semicolon_seperated_expressions(input_file_contents)
2
+
3
+ modified_file_contents = input_file_contents.dup
4
+
5
+ input_file_contents.each_with_index do |line, index|
6
+
7
+ if line.include?("\"")
8
+
9
+ first_index = line.index("\"")
10
+
11
+ modified_line = line.sub(line[first_index..line.index("\"", first_index+1)], "--string")
12
+
13
+ elsif line.include?("'")
14
+
15
+ first_index = line.index("'")
16
+
17
+ modified_line = line.sub(line[first_index..line.index("'", first_index+1)], "--string")
18
+
19
+ else
20
+
21
+ modified_line = line
22
+
23
+ end
24
+
25
+ if modified_line.include?(";")
26
+
27
+ replacement_line = modified_file_contents[index]
28
+
29
+ replacement_line = replacement_line.split(";").join("\n\n") + "\n"
30
+
31
+ modified_file_contents[index] = replacement_line
32
+
33
+ end
34
+
35
+ end
36
+
37
+ return modified_file_contents
38
+
39
+ end
@@ -0,0 +1,15 @@
1
+ def strToArray(input_string)
2
+
3
+ file_id = File.new('hello.nila','w')
4
+
5
+ file_id.write(input_string)
6
+
7
+ file_id.close()
8
+
9
+ line_by_line_contents = read_file_line_by_line('hello.nila')
10
+
11
+ File.delete(file_id)
12
+
13
+ return line_by_line_contents
14
+
15
+ end
data/lib/nilac/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nilac
2
- VERSION = "0.0.4.3.9.2"
2
+ VERSION = "0.0.4.3.9.3"
3
3
  end