Class: Metanorma::Plugin::Datastruct::SourceExtractor

Inherits:
Object
  • Object
show all
Defined in:
lib/metanorma/plugin/datastruct/source_extractor.rb

Constant Summary collapse

ANCHOR_REGEX_1 =

example:

- [[abc]]
/^\[\[(?<id>[^\]]*)\]\]\s*$/.freeze
ANCHOR_REGEX_2 =

examples:

- [#abc]
- [source#abc,ruby]
/^\[[^#,]*#(?<id>[^,\]]*)[,\]]/.freeze
ANCHOR_REGEX_3 =

examples:

- [id=abc]
- [source,id="abc"]
/^\[(?:.+,)?id=['"]?(?<id>[^,\]'"]*)['"]?[,\]]/.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(document, input_lines) ⇒ SourceExtractor

Returns a new instance of SourceExtractor.



19
20
21
22
23
24
# File 'lib/metanorma/plugin/datastruct/source_extractor.rb', line 19

def initialize(document, input_lines)
  @document = document
  @input_lines = input_lines

  @document.attributes["source_blocks"] ||= {}
end

Class Method Details

.extract(document, input_lines) ⇒ Object



26
27
28
# File 'lib/metanorma/plugin/datastruct/source_extractor.rb', line 26

def self.extract(document, input_lines)
  new(document, input_lines).extract
end

Instance Method Details

#extractObject

rubocop:disable Metrics/AbcSize



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/metanorma/plugin/datastruct/source_extractor.rb', line 30

def extract # rubocop:disable Metrics/AbcSize
  lines = @input_lines.to_enum

  loop do
    line = lines.next

    if /^embed::|^include::/.match?(line.strip)
      file_lines = read(filename(@document, line)) or next
      SourceExtractor.extract(@document, file_lines)
    elsif m = match_anchor(line)
      @document.attributes["source_blocks"][m[:id]] = read_section lines
    end
  end
end