Class: Utopia::Project::Renderer
- Inherits:
-
Markly::Renderer::HTML
- Object
- Markly::Renderer::HTML
- Utopia::Project::Renderer
- Defined in:
- lib/utopia/project/renderer.rb
Overview
Renders project Markdown with support for Mermaid code blocks.
Instance Method Summary collapse
-
#code(node) ⇒ Object
Render inline code, resolving language-prefixed references when possible.
-
#code_block(node) ⇒ Object
Render a fenced code block, including Mermaid diagrams.
-
#header(node) ⇒ Object
Render a heading and expose its title to Pagefind for sub-results.
-
#initialize(inline_code_resolver: nil, **options) ⇒ Renderer
constructor
Initialize the project renderer.
Constructor Details
#initialize(inline_code_resolver: nil, **options) ⇒ Renderer
Initialize the project renderer.
15 16 17 18 19 |
# File 'lib/utopia/project/renderer.rb', line 15 def initialize(inline_code_resolver: nil, **) @inline_code_resolver = inline_code_resolver super(**) end |
Instance Method Details
#code(node) ⇒ Object
Render inline code, resolving language-prefixed references when possible.
59 60 61 62 63 64 65 |
# File 'lib/utopia/project/renderer.rb', line 59 def code(node) if @inline_code_resolver && (language = node.code_language) out(@inline_code_resolver.call(node.string_content, language: language)) else super end end |
#code_block(node) ⇒ Object
Render a fenced code block, including Mermaid diagrams.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/utopia/project/renderer.rb', line 41 def code_block(node) language, _ = node.fence_info.split(/\s+/, 2) if language == "mermaid" block do out( "<div#{source_position(node)} class=\"mermaid\">", escape_html(node.string_content), "</div>" ) end else super end end |
#header(node) ⇒ Object
Render a heading and expose its title to Pagefind for sub-results.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/utopia/project/renderer.rb', line 23 def header(node) block do if @headings out("</section>") if @section @section = true out( "<section#{id_for(node)} data-pagefind-title=\"", escape_html(node.to_plaintext.chomp), "\">" ) end out("<h", node.header_level, "#{source_position(node)}>", :children, "</h", node.header_level, ">") end end |