Class: Sourcerer::SourceSkim::Skimmer Private

Inherits:
Object
  • Object
show all
Defined in:
lib/sourcerer/source_skim/skimmer.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Traverses a parsed Asciidoctor document and produces a JSON-ready skim hash.

A new instance should be created per-document call; instance variables accumulate state during a single process pass.

This class is an internal implementation detail. External callers should use the Sourcerer::SourceSkim module-level methods rather than instantiating Skimmer directly.

Constant Summary collapse

INCLUDE_DIRECTIVE_PATTERN =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Scan listing/literal block source for include directives that remain as raw text (i.e., were not resolved by the parser).

/include::[^\[]+\[[^\]]*\]/

Instance Method Summary collapse

Instance Method Details

#process(document, config: Config.new) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/sourcerer/source_skim/skimmer.rb', line 19

def process document, config: Config.new
  @config = config
  @main_file = document.attr('docfile')
  @definition_lists = []
  @code_blocks       = []
  @literal_blocks    = []
  @examples          = []
  @sidebars          = []
  @tables            = []
  @admonitions       = []
  @quotes            = []
  @images            = []

  process_blocks(document.blocks, 0, nil)

  tree    = build_sections_tree(document.sections)
  doc_end = line_count_for(@main_file)
  assign_line_ends(tree, doc_end)

  result = {
    title: document.doctitle,
    lines: doc_end
  }

  if @config.include?(:attributes_custom)
    result[:attributes_custom] =
      Sourcerer::AsciiDoc::AttributesFilter.user_attributes(document)
  end
  if @config.include?(:attributes_builtin)
    result[:attributes_builtin] =
      Sourcerer::AsciiDoc::AttributesFilter.builtin_attributes(document)
  end

  result[:sections_tree] = tree if @config.tree?
  result[:sections_flat] = flatten_sections(tree) if @config.flat?

  result[:definition_lists] = @definition_lists if @config.include?(:definition_lists)
  result[:code_blocks]      = @code_blocks       if @config.include?(:code_blocks)
  result[:literal_blocks]   = @literal_blocks    if @config.include?(:literal_blocks)
  result[:examples]         = @examples          if @config.include?(:examples)
  result[:sidebars]         = @sidebars          if @config.include?(:sidebars)
  result[:tables]           = @tables            if @config.include?(:tables)
  result[:admonitions]      = @admonitions       if @config.include?(:admonitions)
  result[:quotes]           = @quotes            if @config.include?(:quotes)
  result[:images]           = @images            if @config.include?(:images)

  result
end