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

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

Constant Summary collapse

ANCHOR_PATTERNS =
[
  /^\[\[(?<id>[^\]]*)\]\]\s*$/,
  /^\[[^#,]*#(?<id>[^,\]]*)[,\]]/,
  /^\[(?:.+,)?id=['"]?(?<id>[^,\]'"]*)['"]?[,\]]/,
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from PathResolver

#relative_file_path

Constructor Details

#initialize(document, input_lines) ⇒ SourceExtractor

Returns a new instance of SourceExtractor.



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

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

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

Class Method Details

.extract(document, input_lines) ⇒ Object



24
25
26
# File 'lib/metanorma/plugin/datastruct/source_extractor.rb', line 24

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

Instance Method Details

#extractObject



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

def extract
  lines = @input_lines.to_enum

  loop do
    line = lines.next

    if /^embed::|^include::/.match?(line.strip)
      file_lines = read(filename(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