Module: Coradoc::AsciiDoc::Transformer::BlockRules

Defined in:
lib/coradoc/asciidoc/transformer/block_rules.rb

Overview

Module containing block element transformation rules

Class Method Summary collapse

Class Method Details

.apply(transformer_class) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
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
# File 'lib/coradoc/asciidoc/transformer/block_rules.rb', line 8

def self.apply(transformer_class)
  transformer_class.class_eval do
    # Generic block
    rule(block: subtree(:block)) do
      id = block[:id]
      title = block[:title]
      attribute_list = AttributeListNormalizer.coerce(block[:attribute_list])
      delimiter = block[:delimiter].to_s
      lines = block[:lines]
      ordering = block.keys.select do |k|
        %i[id title attribute_list].include?(k)
      end

      opts = {
        id: id,
        title: title,
        delimiter_len: delimiter.size,
        lines: lines,
        ordering: ordering
      }
      BlockTypeClassifier.classify(delimiter, opts, attribute_list)
    end

    # Example
    rule(example: sequence(:example)) do
      Model::Block::Example.new(title: '', lines: example)
    end

    # Admonition
    rule(
      admonition_type: simple(:admonition_type),
      content: sequence(:content)
    ) do
      Model::Admonition.new(content: content, type: admonition_type.to_s)
    end

    # Block image
    rule(block_image: subtree(:block_image)) do
      id = block_image[:id]
      title = block_image[:title]
      path = block_image[:path]
      attrs = AttributeListNormalizer.coerce(block_image[:attribute_list])
      Model::Image::BlockImage.new(
        title: title,
        id: id,
        src: path,
        attributes: attrs,
        line_break: "\n"
      )
    end
  end
end