def self.parse_compositions(composition_text, active_agents_string = "")
active_agents = active_agents_string ? active_agents_string.delete("[").downcase.split(/,\s+/) : []
key = [composition_text, active_agents]
saved_value = @@saved_parsed[key]
if saved_value
@@nr_saved_parsed_used += 1
return saved_value
end
comps = []
lines = composition_text.gsub(/\r\n?/u, "\n").split(/\n/u)
lines.select do |line|
composition = ParseComposition.from_string(line)
if composition.is_a?(ParseComposition)
composition.substances.each do |substance_item|
active_substance_name = substance_item.name.downcase.sub(/^cum\s/, "")
substance_item.is_active_agent = !active_agents.find { |x|
/#{x.downcase
.gsub('(', '\(')
.gsub(')', '\)')
.gsub('[', '\[')
.gsub(']', '\]')
}($|\s)/
.match(active_substance_name)
}.nil?
substance_item.is_active_agent = true if substance_item.chemical_substance && active_agents.find { |x| x.downcase.eql?(substance_item.chemical_substance.name.downcase) }
end
comps << composition
end
end
comps << ParseComposition.new(composition_text.split(/,|:|\(/)[0]) if comps.size == 0
@@saved_parsed[key] = comps
comps
rescue => error
puts "error #{error}"
raise error
end