Class: Docbook::Output::HtmlRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/docbook/output/html_renderer.rb

Overview

Renders a DocbookMirror guide hash as semantic HTML.

Produces the same HTML structure and CSS classes as the Vue MirrorRenderer, enabling server-side rendering for SEO and split-page output.

Usage: guide = Pipeline.new(xml_path: "book.xml").process html = HtmlRenderer.new(guide).render

Constant Summary collapse

SECTION_TYPES =
%w[
  chapter section appendix part preface dedication
  acknowledgements colophon reference refentry
].freeze
SECTION_HEADING_LEVELS =
{
  "part" => 1, "chapter" => 2, "section" => 3,
  "appendix" => 2, "preface" => 2, "dedication" => 2,
  "reference" => 1, "refentry" => 2, "refsection" => 3,
  "acknowledgements" => 2, "colophon" => 2,
  "article" => 1, "topic" => 2, "set" => 1
}.freeze
ADMONITION_TITLES =
{
  "note" => "Note", "warning" => "Warning",
  "tip" => "Tip", "caution" => "Caution",
  "important" => "Important", "danger" => "Danger"
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(guide) ⇒ HtmlRenderer

Returns a new instance of HtmlRenderer.



59
60
61
62
63
# File 'lib/docbook/output/html_renderer.rb', line 59

def initialize(guide)
  @guide = guide
  @content = guide["content"] || []
  @numbering = guide.dig("toc", "numbering") || {}
end

Class Method Details

.custom_mark_renderersObject



50
51
52
# File 'lib/docbook/output/html_renderer.rb', line 50

def custom_mark_renderers
  @custom_mark_renderers ||= {}
end

.custom_node_renderersObject



42
43
44
# File 'lib/docbook/output/html_renderer.rb', line 42

def custom_node_renderers
  @custom_node_renderers ||= {}
end

.register_mark_renderer(mark_type, handler) ⇒ Object



54
55
56
# File 'lib/docbook/output/html_renderer.rb', line 54

def register_mark_renderer(mark_type, handler)
  custom_mark_renderers[mark_type] = handler
end

.register_node_renderer(type, handler) ⇒ Object



46
47
48
# File 'lib/docbook/output/html_renderer.rb', line 46

def register_node_renderer(type, handler)
  custom_node_renderers[type] = handler
end

Instance Method Details

#renderObject

Render the full document content as HTML



66
67
68
# File 'lib/docbook/output/html_renderer.rb', line 66

def render
  render_nodes(@content)
end

#render_nodes(nodes) ⇒ Object

Render a subset of content nodes



71
72
73
# File 'lib/docbook/output/html_renderer.rb', line 71

def render_nodes(nodes)
  nodes.map { |node| render_node(node) }.join("\n")
end