lib/nilac/rollblocks.rb in nilac-0.0.4.3.9.6 vs lib/nilac/rollblocks.rb in nilac-0.0.4.3.9.7
- old
+ new
@@ -1,28 +1,48 @@
-def extract_blocks(statement_indexes, input_file_contents)
+require_relative 'replace_strings'
- possible_if_blocks = []
+def extract_blocks(statement_indexes, input_file_contents,options = [])
- if_block_counter = 0
+ possible_blocks = []
+ block_counter = 0
+
extracted_blocks = []
- controlregexp = /(if |while |def | do )/
+ input_file_contents = input_file_contents.collect {|element| element.gsub("}#@$","\n\t\nend\n\t\n")}
- for x in 0...if_statement_indexes.length-1
+ input_file_contents = input_file_contents.collect {|element| element.gsub("};","\t\t}\n\t")} if options.length.eql?(5)
- possible_if_blocks << input_file_contents[if_statement_indexes[x]..if_statement_indexes[x+1]]
+ controlregexp = /(if |Euuf |while |for |def | do |class )/ if options.empty?
+ controlregexp = /(if |while |class |= function)/ if options.length.eql?(1)
+
+ controlregexp = /(if |while |def | do |class )/ if options.length.eql?(2)
+
+ controlregexp = /(Euuf |while |for | do |function )/ if options.length.eql?(5)
+
+ endexpr = "end" if options.empty?
+
+ endexpr = "};" if options.length.eql?(1)
+
+ endexpr = "end" if options.length.eql?(2)
+
+ endexpr = "}" if options.length.eql?(5)
+
+ for x in 0...statement_indexes.length-1
+
+ possible_blocks << input_file_contents[statement_indexes[x]..statement_indexes[x+1]]
+
end
end_counter = 0
end_index = []
current_block = []
- possible_if_blocks.each_with_index do |block|
+ possible_blocks.each_with_index do |block|
unless current_block[-1] == block[0]
current_block += block
@@ -30,14 +50,13 @@
current_block += block[1..-1]
end
-
current_block.each_with_index do |line, index|
- if line.strip.eql? "end"
+ if line.strip.eql? endexpr
end_counter += 1
end_index << index
@@ -53,11 +72,11 @@
index_counter = 0
array_extract.each_with_index do |line|
- break if (line.lstrip.index(controlregexp) != nil and line.lstrip.index(rejectionregexp).nil?)
+ break if (line.lstrip.index(controlregexp) != nil)
index_counter += 1
end
@@ -67,21 +86,21 @@
block_start = current_block.index(block_extract[0])
block_end = current_block.index(block_extract[-1])
- current_block[block_start..block_end] = "--ifblock#{if_block_counter}"
+ current_block[block_start..block_end] = "--block#{block_counter}"
- if_block_counter += 1
+ block_counter += 1
end_counter = 0
end_index = []
current_block.each_with_index do |line, index|
- if line.strip.eql? "end"
+ if line.strip.eql? endexpr
end_counter += 1
end_index << index
@@ -93,8 +112,62 @@
end
end
+ modified_blocks = extracted_blocks.clone
+
+ modified_blocks.each_with_index do |block,index|
+
+ extracted_blocks[index] = block.collect {|element| element.gsub("\n\t\nend\n\t\n","}#@$")}
+
+ extracted_blocks[index] = block.collect {|element| element.gsub("\t\t}\n\t","};")}
+
+ end
+
+ if options.length == 5
+
+ output_blocks = extracted_blocks
+
+ main_block = extracted_blocks.reject {|element| !replace_strings(element[0]).index(/function /)}
+
+ return main_block.flatten,output_blocks
+
+ else
+
+ modified_rolled_blocks = []
+
+ rolled_blocks = extracted_blocks.reject {|element| !replace_strings(element.join).include?("--block")}
+
+ rolled_blocks.each do |block|
+
+ included_blocks = block.reject {|element| !replace_strings(element).include?("--block")}
+
+ matching_blocks = included_blocks.collect {|element| element.split("--block")[1].to_i}
+
+ while block.join.include?("--block")
+
+ block[block.index(included_blocks[0])] = extracted_blocks[matching_blocks[0]]
+
+ included_blocks.delete_at(0)
+
+ matching_blocks.delete_at(0)
+
+ end
+
+ modified_rolled_blocks << block
+
+ end
+
+ rolled_blocks.each_with_index do |block,index|
+
+ extracted_blocks[extracted_blocks.index(block)] = modified_rolled_blocks[index]
+
+ end
+
+ extracted_blocks = extracted_blocks.collect {|element| element.flatten}
+
return current_block, extracted_blocks
+
+ end
end
\ No newline at end of file