Class: Elisp2any::HTMLRenderer

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/elisp2any/html_renderer.rb

Instance Method Summary collapse

Constructor Details

#initialize(file, css: nil, mode:) ⇒ HTMLRenderer

Returns a new instance of HTMLRenderer.



11
12
13
14
15
# File 'lib/elisp2any/html_renderer.rb', line 11

def initialize(file, css: nil, mode:)
  @file = file
  @css = css || "https://unpkg.com/mvp.css"
  @mode = mode
end

Instance Method Details

#render(node = nil) ⇒ Object

Write gradually?



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
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/elisp2any/html_renderer.rb', line 18

def render(node = nil)
  if node
    case node
    in Paragraph
      par = node.sum(+"") { |line| render(line) }
      "<p>#{par}</p>"
    in Line
      begin
        node.sum(+"") { |chunk| render(chunk) }
      rescue => e
        warn node.inspect
        raise e
      end
    in String
      h(node)
    in [] # huh?  nop.
    in Section
      result = render(node.heading)
      node.blocks.each { |blo| result << render(blo) }
      node.sections.each { |sec| result << render(sec) }
      result
    in Heading[level:, content:]
      lev = level + 2
      "<h#{lev}>#{render(content)}</h#{lev}>"
    in Codeblock
      "<pre><code>#{h(node.source.chomp)}</code></pre>"
    in { code: }
      "<code>#{h(code)}</code>"
    in Hash
      result = node.sum(+"<dl>") do |key, value|
        "<dt>#{render(key)}</dt><dd>#{render(value)}</dd>"
      end
      "#{result}</dl>"
    in Expression
      "<code>#{h(node.source)}</code>"
    in Text
      node.sum(+"") { |ele| render(ele) }
    else
      raise Error, node.inspect
    end
  else
    case @mode
    in :old
      erb_render('index.html.erb')
    in :new
      source = ::File.read(::File.join(__dir__, 'html_renderer.erb'))
      ERB.new(source).result(binding)
    end
  end
end