pull/402/head
Pete Matsyburka 2 weeks ago
parent c1a5c91299
commit fa1ef44b22

@ -212,7 +212,8 @@ module Templates
def build_page_nodes(page, fields, tail_node, attachment_uuid: nil) def build_page_nodes(page, fields, tail_node, attachment_uuid: nil)
field_nodes = [] field_nodes = []
y_theshold = 10.0 / page.height y_theshold = 4.0 / page.height
x_theshold = 30.0 / page.width
text_nodes = page.text_nodes text_nodes = page.text_nodes
@ -227,13 +228,45 @@ module Templates
break unless node break unless node
if node.content.in?(LINEBREAK)
next_node = text_nodes[index]
if next_node && (next_node.endy - node.endy) < y_theshold
index += 1
next
end
end
loop do loop do
break unless current_field break unless current_field
if ((current_field.endy - node.endy).abs < y_theshold && if ((current_field.endy - node.endy).abs < y_theshold &&
(current_field.x <= node.x || node.content.in?(LINEBREAK))) || (current_field.x <= node.x || node.content.in?(LINEBREAK))) ||
current_field.endy < node.y current_field.endy < node.y
if tail_node.elem.is_a?(Templates::ImageToFields::Field)
divider =
if (tail_node.elem.endy - current_field.endy).abs > y_theshold
"\n".b
elsif tail_node.elem.endx - current_field.x > x_theshold
"\t".b
else
' '.b
end
text_node = PageNode.new(prev: tail_node, elem: divider, page: page.page_index, attachment_uuid:)
tail_node.next = text_node
tail_node = text_node
elsif prev_node && (prev_node.endy - current_field.endy).abs > y_theshold
text_node = PageNode.new(prev: tail_node, elem: "\n".b, page: page.page_index, attachment_uuid:)
tail_node.next = text_node
tail_node = text_node
end
field_node = PageNode.new(prev: tail_node, elem: current_field, page: page.page_index, attachment_uuid:) field_node = PageNode.new(prev: tail_node, elem: current_field, page: page.page_index, attachment_uuid:)
tail_node.next = field_node tail_node.next = field_node
tail_node = field_node tail_node = field_node
field_nodes << tail_node field_nodes << tail_node
@ -245,14 +278,24 @@ module Templates
end end
if tail_node.elem.is_a?(Templates::ImageToFields::Field) if tail_node.elem.is_a?(Templates::ImageToFields::Field)
prev_field = tail_node.elem
text_node = PageNode.new(prev: tail_node, elem: ''.b, page: page.page_index, attachment_uuid:) text_node = PageNode.new(prev: tail_node, elem: ''.b, page: page.page_index, attachment_uuid:)
tail_node.next = text_node tail_node.next = text_node
tail_node = text_node tail_node = text_node
end
if prev_node && (node.endy - prev_node.endy) > y_theshold && LINEBREAK.exclude?(prev_node.content) if (node.endy - prev_field.endy).abs > y_theshold
tail_node.elem << "\n" tail_node.elem << "\n"
elsif (node.x - prev_field.endx) > x_theshold
tail_node.elem << "\t"
end
elsif prev_node
if (node.endy - prev_node.endy) > y_theshold && LINEBREAK.exclude?(prev_node.content)
tail_node.elem << "\n"
elsif (node.x - prev_node.endx) > x_theshold && !tail_node.elem.ends_with?("\t")
tail_node.elem << "\t"
end
end end
if node.content != '_' || !tail_node.elem.ends_with?('___') if node.content != '_' || !tail_node.elem.ends_with?('___')
@ -275,6 +318,15 @@ module Templates
current_field = fields.shift current_field = fields.shift
end end
if tail_node.elem.is_a?(Templates::ImageToFields::Field)
text_node = PageNode.new(prev: tail_node, elem: "\n".b, page: page.page_index, attachment_uuid:)
tail_node.next = text_node
tail_node = text_node
else
tail_node.elem << "\n"
end
[field_nodes, tail_node] [field_nodes, tail_node]
end end

Loading…
Cancel
Save