lib/asciidoctor/i18n/processor.rb in asciidoctor-i18n-0.1.0 vs lib/asciidoctor/i18n/processor.rb in asciidoctor-i18n-0.1.1
- old
+ new
@@ -27,15 +27,15 @@
return unless src.title
src.title = translator.translate(src.title)
end
def process_block(src, translator)
- src.lines = translator.translate(src.lines)
+ src.lines = translator.translate(concatenated_lines(src))
end
def process_table(src, translator)
- src.rows.body.each do |row|
+ (src.rows.head + src.rows.body).each do |row|
row.each do |cell|
process_table_cell(cell, translator)
end
end
end
@@ -48,9 +48,32 @@
if src.style != :asciidoc
src.text = translator.translate(src.instance_variable_get(:@text))
else
process_document(src.inner_document, translator)
end
+ end
+
+ # concat continuous lines if no hard line break exists
+ def concatenated_lines(src)
+ return src.lines if skip_concatenate?(src)
+ result = [src.lines.first]
+ src.lines.drop(1).each do |line|
+ if line_break?(src, result.last, line)
+ result.push(line)
+ else
+ result[-1] = result[-1] + " #{line}"
+ end
+ end
+ result
+ end
+
+ def skip_concatenate?(src)
+ src.lines.empty? || src.content_model != :simple
+ end
+
+ def line_break?(src, prev_line, next_line)
+ content = src.apply_subs([prev_line, next_line].join("\n"), src.subs)
+ content.include?('<br>') && !content.strip.end_with?('<br>')
end
end
end
end