Class: Metanorma::Html::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/metanorma/html/generator.rb

Class Method Summary collapse

Class Method Details

.generate(document, **options) ⇒ Object



22
23
24
25
# File 'lib/metanorma/html/generator.rb', line 22

def generate(document, **options)
  setup! unless @setup
  renderer_for(document).new.generate_full_document(document)
end

.register(model_class, renderer_class) ⇒ Object



11
12
13
# File 'lib/metanorma/html/generator.rb', line 11

def register(model_class, renderer_class)
  @renderers << [model_class, renderer_class]
end

.register_taste(model_class, publisher_abbrev, renderer_class) ⇒ Object

Register a taste: same document model, different renderer based on publisher. When the document’s first author publisher abbreviation matches, the taste renderer takes precedence over the model-based renderer.



18
19
20
# File 'lib/metanorma/html/generator.rb', line 18

def register_taste(model_class, publisher_abbrev, renderer_class)
  @tastes << [model_class, publisher_abbrev, renderer_class]
end

.renderer_for(document) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/metanorma/html/generator.rb', line 27

def renderer_for(document)
  setup! unless @setup

  # Check tastes first (publisher-based dispatch)
  taste_renderer = find_taste(document)
  return taste_renderer if taste_renderer

  # Fall back to model-based dispatch (most specific last)
  @renderers.reverse_each do |model_class, renderer_class|
    return renderer_class if document.is_a?(model_class)
  end
  BaseRenderer
end