Module: AsciidoctorVaped::Parser

Defined in:
lib/asciidoctor_vaped/parser.rb,
lib/asciidoctor_vaped/parser/blocks.rb,
lib/asciidoctor_vaped/parser/inline.rb,
lib/asciidoctor_vaped/parser/context.rb,
lib/asciidoctor_vaped/parser/inlines/url.rb,
lib/asciidoctor_vaped/parser/inlines/link.rb,
lib/asciidoctor_vaped/parser/blocks/heading.rb,
lib/asciidoctor_vaped/parser/inlines/strong.rb,
lib/asciidoctor_vaped/parser/blocks/paragraph.rb,
lib/asciidoctor_vaped/parser/inlines/emphasis.rb,
lib/asciidoctor_vaped/parser/blocks/admonition.rb,
lib/asciidoctor_vaped/parser/inlines/monospace.rb,
lib/asciidoctor_vaped/parser/blocks/tables/table.rb,
lib/asciidoctor_vaped/parser/blocks/common/comment.rb,
lib/asciidoctor_vaped/parser/blocks/delimited/open.rb,
lib/asciidoctor_vaped/parser/blocks/delimited/quote.rb,
lib/asciidoctor_vaped/parser/blocks/lists/list_base.rb,
lib/asciidoctor_vaped/parser/blocks/lists/list_item.rb,
lib/asciidoctor_vaped/parser/blocks/common/base_node.rb,
lib/asciidoctor_vaped/parser/blocks/metadata/caption.rb,
lib/asciidoctor_vaped/parser/blocks/tables/table_row.rb,
lib/asciidoctor_vaped/parser/blocks/common/blank_line.rb,
lib/asciidoctor_vaped/parser/blocks/delimited/example.rb,
lib/asciidoctor_vaped/parser/blocks/delimited/listing.rb,
lib/asciidoctor_vaped/parser/blocks/delimited/literal.rb,
lib/asciidoctor_vaped/parser/blocks/delimited/sidebar.rb,
lib/asciidoctor_vaped/parser/blocks/tables/table_cell.rb,
lib/asciidoctor_vaped/parser/blocks/lists/ordered_list.rb,
lib/asciidoctor_vaped/parser/blocks/lists/unordered_list.rb,
lib/asciidoctor_vaped/parser/blocks/delimited/passthrough.rb,
lib/asciidoctor_vaped/parser/blocks/delimited/delimited_node.rb,
lib/asciidoctor_vaped/parser/blocks/metadata/document_attribute.rb,
lib/asciidoctor_vaped/parser/blocks/metadata/element_attributes.rb

Defined Under Namespace

Modules: Blocks, Inline, Inlines Classes: Context

Constant Summary collapse

NODE_HANDLERS =
[
  Blocks::BlankLine,
  Blocks::DocumentAttribute,
  Blocks::Caption,
  Blocks::ElementAttributes,
  Blocks::Comment,
  Blocks::Heading,
  Blocks::Listing,
  Blocks::Literal,
  Blocks::Example,
  Blocks::Quote,
  Blocks::Sidebar,
  Blocks::Open,
  Blocks::Passthrough,
  Blocks::Table,
  Blocks::Admonition,
  Blocks::UnorderedList,
  Blocks::OrderedList,
  Blocks::Paragraph
].freeze
NODE_CHAIN =
Blocks.chain(NODE_HANDLERS)

Class Method Summary collapse

Class Method Details

.parse(source, attributes: {}) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/asciidoctor_vaped/parser.rb', line 38

def parse(source, attributes: {})
  document = AST::Document.new(source.to_s, attributes:)
  context = Context.new(document, Reader.new(source))
  parse_header(context)
  parse_nodes(context)
  document
end

.parse_document_title(context) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/asciidoctor_vaped/parser.rb', line 63

def parse_document_title(context)
  title = context.reader.peek&.match(/\A=\s+(.+)\z/)
  return unless title

  context.document.doctitle = title[1]
  context.document.register_attribute("doctitle", title[1])
  context.reader.read
end

.parse_header(context) ⇒ Object



46
47
48
49
50
# File 'lib/asciidoctor_vaped/parser.rb', line 46

def parse_header(context)
  context.reader.skip_blank_lines
  parse_header_attributes(context)
  parse_document_title(context)
end

.parse_header_attributes(context) ⇒ Object



58
59
60
61
# File 'lib/asciidoctor_vaped/parser.rb', line 58

def parse_header_attributes(context)
  handler = Blocks::DocumentAttribute.new
  handler.handle(context) while handler.match?(context)
end

.parse_nodes(context) ⇒ Object



52
53
54
55
56
# File 'lib/asciidoctor_vaped/parser.rb', line 52

def parse_nodes(context)
  until context.reader.eof?
    NODE_CHAIN.handle(context)
  end
end