lib/nilac/compile_interpolated_strings.rb in nilac-0.0.4.3.9.7.1 vs lib/nilac/compile_interpolated_strings.rb in nilac-0.0.4.3.9.8
- old
+ new
@@ -1,9 +1,76 @@
require_relative 'find_all_matching_indices'
+require_relative 'replace_strings'
+require_relative 'extract_strings'
+require_relative 'replace_comparison_operators'
def compile_interpolated_strings(input_file_contents)
+ def interpolation_variables(input_string)
+
+ interpolation_vars = []
+
+ modified_expressions = []
+
+ input_string = input_string[2..-1]
+
+ if replace_strings(input_string).include?(",")
+
+ replaced_string = replace_strings(input_string)
+
+ extracted_strings = extract_strings(input_string)
+
+ semicolon_seperated_expressions = replaced_string.split(",")
+
+ semicolon_seperated_expressions.each do |expr|
+
+ matched_strings = expr.scan(/--repstring\d+/).to_a
+
+ if matched_strings.empty?
+
+ modified_expressions << expr
+
+ else
+
+ matched_strings.each do |str|
+
+ junk,string_id = str.split("--repstring")
+
+ modified_expressions << expr.sub("--repstring#{string_id}",extracted_strings[string_id.to_i])
+
+ end
+
+ end
+
+ end
+
+ end
+
+ if modified_expressions.empty?
+
+ modified_expressions << input_string
+
+ end
+
+ modified_expressions.each do |expr|
+
+ if replace_strings(expr).include?("=")
+
+ replaced_string = replace_strings(expr)
+
+ string_split = replaced_string.split("=")
+
+ interpolation_vars << string_split[0].strip
+
+ end
+
+ end
+
+ return interpolation_vars
+
+ end
+
def replace_string_arrays(input_string)
def extract(input_string, pattern_start, pattern_end)
all_start_locations = find_all_matching_indices(input_string, pattern_start)
@@ -30,26 +97,36 @@
return input_string
end
+ interpolation_vars = []
+
modified_file_contents = input_file_contents.dup
single_quoted_strings = input_file_contents.reject { |element| !(element.count("'") >= 2) }
+ single_quoted_string_array = []
+
+ single_quote_counter = 0
+
single_quoted_strings.each do |str|
modified_string = str.dup
while modified_string.include?("'")
first_index = modified_string.index("'")
string_extract = modified_string[first_index..modified_string.index("'", first_index+1)]
- modified_string = modified_string.sub(string_extract, "--single_quoted")
+ single_quoted_string_array << string_extract
+ modified_string = modified_string.sub(string_extract, "--single_quoted#{single_quote_counter}")
+
+ single_quote_counter += 1
+
end
input_file_contents[input_file_contents.index(str)] = modified_string
end
@@ -58,10 +135,24 @@
if replace_string_arrays(line+"\n").include?("\#{")
modified_line = line.dup
+ possible_single_quoted_strings = modified_line.scan(/--single_quoted\d+/).to_a
+
+ unless possible_single_quoted_strings.empty?
+
+ possible_single_quoted_strings.each do |quoted_string|
+
+ junk,string_id = quoted_string.split("--single_quoted")
+
+ modified_line = modified_line.sub("--single_quoted#{string_id}",single_quoted_string_array[string_id.to_i])
+
+ end
+
+ end
+
interpol_starting_loc = find_all_matching_indices(modified_line, "\#{") + [-1]
interpolated_strings = []
until interpol_starting_loc.empty?
@@ -128,36 +219,124 @@
end
interpolated_strings.each do |interpol|
+ original_interpol = interpol.clone
+
string_split = line.split(interpol)
if string_split[1].eql?("\"\n")
+ if replace_strings(interpol).include?(";")
+
+ interpol = replace_strings(interpol)
+
+ string_extracts = extract_strings(interpol)
+
+ interpol = interpol.gsub(";",",")
+
+ string_extracts.each do |str|
+
+ matched_strings = str.scan(/--repstring/).to_a
+
+ matched_strings.each do |matched_string|
+
+ junk,string_id = matched_string.split("--repstring")
+
+ interpol = interpol.sub("--repstring#{string_id}",string_extracts[string_id.to_i])
+
+ end
+
+ end
+
+ interpol = replace_comparison_operators(interpol)
+
+ end
+
+ interpolation_variables(interpol)
+
replacement_string = "\" + " + "(#{interpol[2...-1]})"
- modified_file_contents[index] = modified_file_contents[index].sub(interpol+"\"", replacement_string)
+ modified_file_contents[index] = modified_file_contents[index].sub(original_interpol+"\"", replacement_string)
elsif string_split[1].eql?("\")\n")
+ if replace_strings(interpol).include?(";")
+
+ interpol = replace_strings(interpol)
+
+ string_extracts = extract_strings(interpol)
+
+ interpol = interpol.gsub(";",",")
+
+ string_extracts.each do |str|
+
+ matched_strings = str.scan(/--repstring/).to_a
+
+ matched_strings.each do |matched_string|
+
+ junk,string_id = matched_string.split("--repstring")
+
+ interpol = interpol.sub("--repstring#{string_id}",string_extracts[string_id.to_i])
+
+ end
+
+ end
+
+ interpol = replace_comparison_operators(interpol)
+
+ end
+
+ interpolation_variables(interpol)
+
replacement_string = "\" + " + "(#{interpol[2...-1]})"
- modified_file_contents[index] = modified_file_contents[index].sub(interpol + "\"", replacement_string)
+ modified_file_contents[index] = modified_file_contents[index].sub(original_interpol + "\"", replacement_string)
else
+ if replace_strings(interpol).include?(";")
+
+ interpol = replace_strings(interpol)
+
+ string_extracts = extract_strings(interpol)
+
+ interpol = interpol.gsub(";",",")
+
+ string_extracts.each do |str|
+
+ matched_strings = str.scan(/--repstring/).to_a
+
+ matched_strings.each do |matched_string|
+
+ junk,string_id = matched_string.split("--repstring")
+
+ interpol = interpol.sub("--repstring#{string_id}",string_extracts[string_id.to_i])
+
+ end
+
+ end
+
+ interpol = replace_comparison_operators(interpol)
+
+ end
+
+ interpolation_vars << interpolation_variables(interpol)
+
replacement_string = "\"" + " + " + "(#{interpol[2...-1]})" + " + \""
- modified_file_contents[index] = modified_file_contents[index].sub(interpol, replacement_string)
+ modified_file_contents[index] = modified_file_contents[index].sub(original_interpol, replacement_string)
end
end
end
end
- return modified_file_contents
+ interpolation_vars = interpolation_vars.flatten.uniq
+
+ return modified_file_contents, interpolation_vars
end
\ No newline at end of file