lib/stepmod/utils/stepmod_file_annotator.rb in stepmod-utils-0.3.30 vs lib/stepmod/utils/stepmod_file_annotator.rb in stepmod-utils-0.3.31

- old
+ new

@@ -19,23 +19,24 @@ def initialize(express_file:, stepmod_dir: nil) @express_file = express_file @resource_docs_cache = resource_docs_schemas(stepmod_dir) @stepmod_dir = stepmod_dir || Dir.pwd @added_bibdata = {} + @images_references = {} @schema_name = Expressir::Express::Parser.from_file(express_file) .schemas .first .id end def resource_docs_schemas(stepmod_dir) - filepath = File.join(stepmod_dir, "data/resource_docs/*/resource.xml") + filepath = File.join(stepmod_dir, "data", "resource_docs", "*", "resource.xml") schemas = {} Dir.glob(filepath).each do |resource_docs_file| - match = resource_docs_file.match("data/resource_docs/([^/]+)/resource.xml") + match = resource_docs_file.match("data[/\]resource_docs[/\]([^/\]+)[/\]resource.xml") resource_docs_dir = match.captures[0] resource_docs = Nokogiri::XML(File.read(resource_docs_file)).root resource_docs.xpath("schema").each do |schema| schemas[schema["name"]] = resource_docs_dir @@ -53,10 +54,11 @@ descriptions_base) output_express = File.read(express_file) converted_description = "" base_linked = "" + processed_images_cache = {} if File.exist?(descriptions_file) descriptions = Nokogiri::XML(File.read(descriptions_file)).root added_resource_descriptions = {} @@ -80,10 +82,14 @@ if description.text.strip.length.positive? && resource_docs_dir.nil? converted_description << convert_from_description_text( descriptions_file, description ) end + + schema_base_dir = resource_docs_cache[base_linked] + add_images_references(converted_description, schema_base_dir, processed_images_cache) + # Add converted description from exact linked path if resource_docs_dir && added_resource_descriptions[description["linkend"]].nil? output_express << convert_from_resource_file(resource_docs_dir, stepmod_dir, description["linkend"], descriptions_file) added_resource_descriptions[description["linkend"]] = true @@ -110,19 +116,41 @@ ) else converted_description end - sanitize(output_express) + { + annotated_text: sanitize(output_express), + images_references: @images_references, + } rescue StandardError => e puts "[ERROR]!!! #{e.message}" puts e.backtrace end private def sanitize(file_content) file_content.gsub("(*)", "(`*`)") + end + + def add_images_references(description, schema_base_dir, processed_images_cache) + referenced_images = description.scan(/image::(.*?)\[\]/).flatten + + referenced_images.each do |referenced_image| + next unless schema_base_dir + + image_file_path = File.join("resource_docs", schema_base_dir, referenced_image) + new_image_file_path = referenced_image + + if processed_images_cache[new_image_file_path] + processed_images_cache[new_image_file_path] = true + next + end + + processed_images_cache[new_image_file_path] = true + @images_references[image_file_path] = new_image_file_path + end end def convert_from_description_text(descriptions_file, description) Dir.chdir(File.dirname(descriptions_file)) do wrapper = "<ext_descriptions>#{description}</ext_descriptions>"