module Asciidoctor::RFC::V2::Blocks

Public Instance Methods

admonition(node) click to toggle source

Syntax:

= Title
Author
:HEADER

ABSTRACT

NOTE: note

[NOTE]
.Title (in preamble)
====
  Content
====

  [NOTE] (in preamble)
  [NOTE,source=name] (in body)
.Title
====
  Content
====

@note admonitions within preamble are notes. Elsewhere, they are comments.

# File lib/asciidoctor/rfc/v2/blocks.rb, line 112
      def admonition(node)
        result = []
        if node.parent.context == :preamble
          note_attributes = {
            # default title provided: title is mandatory
            title: (node.title.nil? ? "NOTE" : node.title),
          }

          note_contents = HTMLEntities.new.decode([paragraph1(node)].flatten.join("\n"))

          result << noko do |xml|
            xml.note **attr_code(note_attributes) do |xml_note|
              xml_note << note_contents
            end
          end
        else
          cref_attributes = {
            anchor: node.id,
            source: node.attr("source"),
          }

          # remove all formatting: cref content is pure text
          cref_contents = flatten_rawtext(node)
          cref_contents = [cref_contents].flatten.join("\n")
          warn <<~WARNING_MESSAGE if node.blocks?
            asciidoctor: WARNING (#{node.lineno}): comment can not contain blocks of text in XML RFC:\n #{node.content}
          WARNING_MESSAGE

          result << noko do |xml|
            if node.parent.context !~ /table|example|paragraph|section/
              xml.t do |xml_t|
                xml_t.cref **attr_code(cref_attributes) do |xml_cref|
                  xml_cref << cref_contents
                end
              end
            else
              xml.cref **attr_code(cref_attributes) do |xml_cref|
                xml_cref << cref_contents
              end
            end
          end
        end
        result
      end
example(node) click to toggle source

Syntax:

[[id]]
.Title
[align,alt,suppress-title]
====
Example
====
# File lib/asciidoctor/rfc/v2/blocks.rb, line 164
def example(node)
  figure_attributes = {
    anchor: node.id,
    align: node.attr("align"),
    alt: node.alt,
    title: node.title,
    'suppress-title': node.attr("suppress-title"),
    # TODO: is 'suppress-title' the correct attribute name?
  }
  # TODO iref
  seen_artwork = false
  noko do |xml|
    xml.figure **attr_code(figure_attributes) do |xml_figure|
      node.blocks.each do |b|
        case b.context
        when :listing, :image, :literal, :stem
          xml_figure << send(b.context, b).join("\n")
          seen_artwork = true
        else
          # we want to see the para text, not its <t> container
          if seen_artwork
            xml_figure.postamble do |postamble|
              postamble << b.content
            end
          else
            xml_figure.preamble do |preamble|
              preamble << b.content
            end
          end
        end
      end
    end
  end
end
floating_title(node) click to toggle source

Syntax:

discrete

Section

# File lib/asciidoctor/rfc/v2/blocks.rb, line 9
def floating_title(node)
  noko do |xml|
    xml.t do |xml_t|
      xml_t.spanx node.title, style: "strong"
    end
  end
end
listing(node) click to toggle source

Syntax:

.name
[source,type,src=uri] (src is mutually exclusive with listing content) (v3)
[source,type,src=uri,align,alt] (src is mutually exclusive with listing content) (v2)
----
code
----
# File lib/asciidoctor/rfc/v2/blocks.rb, line 206
def listing(node)
  sourcecode_attributes = {
    align: node.attr("align"),
    alt: node.alt,
    name: node.title,
    type: node.attr("language"),
    src: node.attr("src"),
  }

  # NOTE: html escaping is performed by Nokogiri
  sourcecode_content =
    sourcecode_attributes[:src].nil? ? "\n" + node.lines.join("\n") + "\n" : ""

  noko do |xml|
    if node.parent.context != :example
      figure_attributes = {
        anchor: node.id,
      }
      xml.figure **attr_code(figure_attributes) do |xml_figure|
        # xml_figure.artwork sourcecode_content, **attr_code(sourcecode_attributes)
        xml_figure.artwork **attr_code(sourcecode_attributes) do |a|
          a.cdata sourcecode_content
        end

      end
    else
      # xml.artwork sourcecode_content, **attr_code(sourcecode_attributes)
      xml.artwork **attr_code(sourcecode_attributes) do |a|
        a.cdata sourcecode_content
      end
    end
  end
end
literal(node) click to toggle source

Syntax:

[[id]]
.Name
[align=left|center|right,alt=alt_text,type] (optional)
....
  literal
....
# File lib/asciidoctor/rfc/v2/blocks.rb, line 24
def literal(node)
  artwork_attributes = {
    align: node.attr("align"),
    type: node.attr("type"),
    name: node.title,
    alt: node.attr("alt"),
  }

  # NOTE: html escaping is performed by Nokogiri
  artwork_content = "\n" +  node.lines.join("\n") + "\n"

  ret = noko do |xml|
    if node.parent.context != :example
      figure_attributes = {
        anchor: node.id,
      }
      xml.figure **attr_code(figure_attributes) do |xml_figure|
        # xml_figure.artwork artwork_content, **attr_code(artwork_attributes)
        xml_figure.artwork **attr_code(artwork_attributes) do |a|
          a.cdata artwork_content
        end
      end
    else
      # xml.artwork artwork_content, **attr_code(artwork_attributes)
      xml.artwork **attr_code(artwork_attributes) do |a|
        a.cdata artwork_content
      end
    end
  end
  ret
end
quote(node) click to toggle source
# File lib/asciidoctor/rfc/v2/blocks.rb, line 240
def quote(node)
  result = []
  if node.blocks?
    node.blocks.each do |b|
      result << send(b.context, b)
    end
  else
    result = paragraph(node)
  end
  if node.attr("citetitle") || node.attr("attribution")
    cite = node.attr("attribution") || ""
    cite += ", " if node.attr("citetitle") && node.attr("attribution")
    cite += (node.attr("citetitle") || "")
    cite = "-- " + cite
    result << "<t>#{cite}</t>"
  end
  result
end
stem(node) click to toggle source

stem is treated as literal, but with center alignment

# File lib/asciidoctor/rfc/v2/blocks.rb, line 57
def stem(node)
  artwork_attributes = {
    align: node.attr("align") || "center",
    type: node.attr("type"),
    name: node.title,
    alt: node.attr("alt"),
  }

  # NOTE: html escaping is performed by Nokogiri
  artwork_content = "\n" +  node.lines.join("\n") + "\n"

  ret = noko do |xml|
    if node.parent.context != :example
      figure_attributes = {
        anchor: node.id,
      }
      xml.figure **attr_code(figure_attributes) do |xml_figure|
        # xml_figure.artwork artwork_content, **attr_code(artwork_attributes)
        xml_figure.artwork **attr_code(artwork_attributes) do |a|
          a.cdata artwork_content
        end
      end
    else
      # xml.artwork artwork_content, **attr_code(artwork_attributes)
      xml.artwork **attr_code(artwork_attributes) do |a|
        a.cdata artwork_content
      end
    end
  end
  ret
end