Class: Coradoc::Html::HtmlConverter

Inherits:
Object
  • Object
show all
Defined in:
lib/coradoc/html/html_converter.rb

Class Method Summary collapse

Class Method Details

.prepare_plugin_instances(options) ⇒ Object



56
57
58
# File 'lib/coradoc/html/html_converter.rb', line 56

def self.prepare_plugin_instances(options)
  options[:plugin_instances] || Html.input_config.plugins.map(&:new)
end

.to_core_model(input, options = {}) ⇒ Object



6
7
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
# File 'lib/coradoc/html/html_converter.rb', line 6

def self.to_core_model(input, options = {})
  Html.input_config.with(options) do
    plugin_instances = prepare_plugin_instances(options)

    root = track_time 'Loading input HTML document' do
      case input
      when String
        Nokogiri::HTML(input).root
      when Nokogiri::XML::Document
        input.root
      when Nokogiri::XML::Node
        input
      end
    end

    return nil unless root

    plugin_instances.each do |plugin|
      plugin.html_tree = root
      track_time "Preprocessing document with #{plugin.name} plugin" do
        plugin.preprocess_html_tree
      end
      root = plugin.html_tree
    end

    coremodel = track_time 'Converting input document tree to CoreModel' do
      Converters.process_coradoc(
        root,
        plugin_instances: plugin_instances
      )
    end

    coremodel = track_time 'Post-process CoreModel tree' do
      Postprocessor.process(coremodel)
    end

    plugin_instances.each do |plugin|
      plugin.coremodel_tree = coremodel
      track_time "Postprocessing CoreModel tree with #{plugin.name} plugin" do
        plugin.postprocess_coremodel_tree
      end
      coremodel = plugin.coremodel_tree
    end

    options[:plugin_instances] = plugin_instances unless options.frozen?

    coremodel
  end
end

.track_time(task) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/coradoc/html/html_converter.rb', line 61

def self.track_time(task)
  if Html.input_config.track_time
    warn ('  ' * @track_time_indentation) + "* #{task} is starting..."
    @track_time_indentation += 1
    t0 = Time.now
    ret = yield
    time_elapsed = Time.now - t0
    @track_time_indentation -= 1
    warn ('  ' * @track_time_indentation) +
         "* #{task} took #{time_elapsed.round(3)} seconds"
    ret
  else
    yield
  end
end