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>"