lib/asciidoctor/iso/blocks.rb in asciidoctor-iso-0.6.0 vs lib/asciidoctor/iso/blocks.rb in asciidoctor-iso-0.6.1
- old
+ new
@@ -2,18 +2,33 @@
require "uri"
module Asciidoctor
module ISO
module Blocks
+
def id_attr(node = nil)
{ id: Utils::anchor_or_uuid(node) }
end
+ def open(node)
+ # open block is a container of multiple blocks,
+ # treated as a single block.
+ # We append each contained block to its parent
+ result = []
+ if node.blocks?
+ node.blocks.each do |b|
+ result << send(b.context, b)
+ end
+ else
+ result = paragraph(node)
+ end
+ result
+ end
+
def stem(node)
# NOTE: html escaping is performed by Nokogiri
stem_content = node.lines.join("\n")
-
noko do |xml|
xml.formula **id_attr(node) do |s|
s.stem stem_content, **{ type: "AsciiMath" }
style(node, stem_content)
end
@@ -25,42 +40,38 @@
date += "T0000" unless /T/.match? date
{
reviewer: node.attr("reviewer") || node.attr("source") || "(Unknown)",
id: Utils::anchor_or_uuid(node),
date: date.gsub(/[:-]/, ""),
+ from: node.attr("from"),
+ to: node.attr("to") || node.attr("from"),
}
end
def sidebar(node)
return unless is_draft
content = Utils::flatten_rawtext(node.content).join("\n")
noko do |xml|
xml.review **attr_code(sidebar_attrs(node)) do |r|
- r << content
+ wrap_in_para(node, r)
end
end
end
def termnote(n)
noko do |xml|
xml.termnote **id_attr(n) do |ex|
- if n.blocks? then ex << n.content
- else
- ex.p {|p| p << n.content }
- end
+ wrap_in_para(n, ex)
style(n, Utils::flatten_rawtext(n.content).join("\n"))
end
end.join("\n")
end
def note(n)
noko do |xml|
xml.note **id_attr(n) do |c|
- if n.blocks? then c << n.content
- else
- c.p { |p| p << n.content }
- end
+ wrap_in_para(n, c)
text = Utils::flatten_rawtext(n.content).join("\n")
note_style(n, text)
end
end.join("\n")
end
@@ -77,26 +88,20 @@
def admonition(node)
return termnote(node) if in_terms
return note(node) if node.attr("name") == "note"
noko do |xml|
xml.admonition **admonition_attrs(node) do |a|
- if node.blocks? then a << node.content
- else
- a.p { |p| p << node.content }
- end
+ wrap_in_para(node, a)
end
end.join("\n")
end
def term_example(node)
noko do |xml|
xml.termexample **id_attr(node) do |ex|
c = node.content
- if node.blocks? then ex << c
- else
- ex.p {|p| p << c }
- end
+ wrap_in_para(node, ex)
text = Utils::flatten_rawtext(c).join("\n")
termexample_style(node, text)
end
end.join("\n")
end
@@ -105,19 +110,17 @@
return term_example(node) if in_terms
noko do |xml|
xml.example **id_attr(node) do |ex|
content = node.content
ex << content
- text = Utils::flatten_rawtext(content).join("\n")
- termexample_style(node, text)
end
end.join("\n")
end
def preamble(node)
noko do |xml|
- xml.content do |xml_abstract|
+ xml.foreword do |xml_abstract|
xml_abstract.title { |t| t << "Foreword" }
content = node.content
xml_abstract << content
text = Utils::flatten_rawtext(content).join("\n")
foreword_style(node, text)
@@ -142,46 +145,51 @@
f.image **attr_code(image_attributes(node))
end
end
end
+ def paragraph(node)
+ return termsource(node) if node.role == "source"
+ attrs = { align: node.attr("align"),
+ id: Utils::anchor_or_uuid(node) }
+ noko do |xml|
+ xml.p **attr_code(attrs) do |xml_t|
+ xml_t << node.content
+ style(node, Utils::flatten_rawtext(node).join(" "))
+ end
+ end.join("\n")
+ end
+
def quote_attrs(node)
- {
- id: Utils::anchor_or_uuid(node),
- align: node.attr("align"),
- }
+ { id: Utils::anchor_or_uuid(node), align: node.attr("align") }
end
def quote_attribution(node, out)
- if node.attr("attribution")
- out.fullname do |f|
- f.surname { |s| s << node.attr("attribution") }
- # TODO: will break up into name components
- end
- end
if node.attr("citetitle")
- # TODO: eref
+ m = /^(?<cite>[^,]+)(,(?<text>.*$))?$/.match node.attr("citetitle")
+ out.source m[:text],
+ **attr_code(target: m[:cite], type: "inline")
end
+ if node.attr("attribution")
+ out.author { |a| a << node.attr("attribution") }
+ end
end
def quote(node)
noko do |xml|
xml.quote **attr_code(quote_attrs(node)) do |q|
- quote_attribution(node, out)
- if node.blocks? then q << node.content
- else
- q.p { |p| p << node.content }
- end
+ quote_attribution(node, q)
+ wrap_in_para(node, q)
end
end
end
def listing(node)
# NOTE: html escaping is performed by Nokogiri
noko do |xml|
if node.parent.context != :example
- xml.figure do |xml_figure|
- xml_figure.sourcecode **id_attr(node) do |s|
+ xml.example **id_attr(node) do |e|
+ e.sourcecode **id_attr(node) do |s|
s << node.content
end
end
else
xml.sourcecode **id_attr(node) do |s|