Class: CommonMarker::HtmlRenderer

Inherits:
Renderer
  • Object
show all
Defined in:
lib/commonmarker/renderer/html_renderer.rb

Instance Attribute Summary

Attributes inherited from Renderer

#in_plain, #in_tight, #warnings

Instance Method Summary collapse

Methods inherited from Renderer

#block, #blocksep, #container, #containersep, #cr, #document, #initialize, #out, #plain, #reference_def

Constructor Details

This class inherits a constructor from CommonMarker::Renderer

Instance Method Details

#blockquote(node) ⇒ Object



58
59
60
61
62
63
64
# File 'lib/commonmarker/renderer/html_renderer.rb', line 58

def blockquote(node)
  block do
    container("<blockquote#{sourcepos(node)}>\n", '</blockquote>') do
      out(:children)
    end
  end
end

#code(node) ⇒ Object



142
143
144
145
146
# File 'lib/commonmarker/renderer/html_renderer.rb', line 142

def code(node)
  out('<code>')
  out(escape_html(node.string_content))
  out('</code>')
end

#code_block(node) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/commonmarker/renderer/html_renderer.rb', line 72

def code_block(node)
  block do
    if option_enabled?(:GITHUB_PRE_LANG)
      out("<pre#{sourcepos(node)}")
      if node.fence_info && !node.fence_info.empty?
        out(' lang="', node.fence_info.split(/\s+/)[0], '"')
      end
      out('><code>')
    else
      out("<pre#{sourcepos(node)}><code")
      if node.fence_info && !node.fence_info.empty?
        out(' class="language-', node.fence_info.split(/\s+/)[0], '">')
      else
        out('>')
      end
    end
    out(escape_html(node.string_content))
    out('</code></pre>')
  end
end

#emph(_) ⇒ Object



111
112
113
# File 'lib/commonmarker/renderer/html_renderer.rb', line 111

def emph(_)
  out('<em>', :children, '</em>')
end

#header(node) ⇒ Object



7
8
9
10
11
12
# File 'lib/commonmarker/renderer/html_renderer.rb', line 7

def header(node)
  block do
    out('<h', node.header_level, "#{sourcepos(node)}>", :children,
        '</h', node.header_level, '>')
  end
end

#hrule(node) ⇒ Object



66
67
68
69
70
# File 'lib/commonmarker/renderer/html_renderer.rb', line 66

def hrule(node)
  block do
    out("<hr#{sourcepos(node)} />")
  end
end

#html(node) ⇒ Object



93
94
95
96
97
98
99
100
101
# File 'lib/commonmarker/renderer/html_renderer.rb', line 93

def html(node)
  block do
    if option_enabled?(:SAFE)
      out('<!-- raw HTML omitted -->')
    else
      out(tagfilter(node.string_content))
    end
  end
end

#image(node) ⇒ Object



127
128
129
130
131
132
133
134
135
136
# File 'lib/commonmarker/renderer/html_renderer.rb', line 127

def image(node)
  out('<img src="', escape_href(node.url), '"')
  plain do
    out(' alt="', :children, '"')
  end
  if node.title && !node.title.empty?
    out(' title="', escape_html(node.title), '"')
  end
  out(' />')
end

#inline_html(node) ⇒ Object



103
104
105
106
107
108
109
# File 'lib/commonmarker/renderer/html_renderer.rb', line 103

def inline_html(node)
  if option_enabled?(:SAFE)
    out('<!-- raw HTML omitted -->')
  else
    out(tagfilter(node.string_content))
  end
end

#linebreak(node) ⇒ Object



148
149
150
# File 'lib/commonmarker/renderer/html_renderer.rb', line 148

def linebreak(node)
  out("<br />\n")
end


119
120
121
122
123
124
125
# File 'lib/commonmarker/renderer/html_renderer.rb', line 119

def link(node)
  out('<a href="', node.url.nil? ? '' : escape_href(node.url), '"')
  if node.title && !node.title.empty?
    out(' title="', escape_html(node.title), '"')
  end
  out('>', :children, '</a>')
end

#list(node) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/commonmarker/renderer/html_renderer.rb', line 26

def list(node)
  old_in_tight = @in_tight
  @in_tight = node.list_tight

  block do
    if node.list_type == :bullet_list
      container("<ul#{sourcepos(node)}>\n", '</ul>') do
        out(:children)
      end
    else
      start = if node.list_start == 1
                "<ol#{sourcepos(node)}>\n"
              else
                "<ol start=\"#{node.list_start}\"#{sourcepos(node)}>\n"
              end
      container(start, '</ol>') do
        out(:children)
      end
    end
  end

  @in_tight = old_in_tight
end

#list_item(node) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/commonmarker/renderer/html_renderer.rb', line 50

def list_item(node)
  block do
    container("<li#{sourcepos(node)}>", '</li>') do
      out(:children)
    end
  end
end

#paragraph(node) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/commonmarker/renderer/html_renderer.rb', line 14

def paragraph(node)
  if @in_tight && node.parent.type != :blockquote
    out(:children)
  else
    block do
      container("<p#{sourcepos(node)}>", '</p>') do
        out(:children)
      end
    end
  end
end

#render(node) ⇒ Object



3
4
5
# File 'lib/commonmarker/renderer/html_renderer.rb', line 3

def render(node)
  super(node)
end

#softbreak(_) ⇒ Object



152
153
154
155
156
157
158
159
160
# File 'lib/commonmarker/renderer/html_renderer.rb', line 152

def softbreak(_)
  if option_enabled?(:HARDBREAKS)
    out("<br />\n")
  elsif option_enabled?(:NOBREAKS)
    out(' ')
  else
    out("\n")
  end
end

#strikethrough(_) ⇒ Object



191
192
193
# File 'lib/commonmarker/renderer/html_renderer.rb', line 191

def strikethrough(_)
  out('<del>', :children, '</del>')
end

#strong(_) ⇒ Object



115
116
117
# File 'lib/commonmarker/renderer/html_renderer.rb', line 115

def strong(_)
  out('<strong>', :children, '</strong>')
end

#table(node) ⇒ Object



162
163
164
165
# File 'lib/commonmarker/renderer/html_renderer.rb', line 162

def table(node)
  @alignments = node.table_alignments
  out("<table#{sourcepos(node)}>\n", :children, "</tbody></table>\n")
end

#table_cell(node) ⇒ Object



180
181
182
183
184
185
186
187
188
189
# File 'lib/commonmarker/renderer/html_renderer.rb', line 180

def table_cell(node)
  align = case @alignments[@column_index]
          when :left; ' align="left"'
          when :right; ' align="right"'
          when :center; ' align="center"'
          else; ''
          end
  out(@in_header ? "\n<th#{align}#{sourcepos(node)}>" : "\n<td#{align}#{sourcepos(node)}>", :children, @in_header ? "</th>" : "</td>")
  @column_index += 1
end

#table_header(node) ⇒ Object



167
168
169
170
171
172
173
# File 'lib/commonmarker/renderer/html_renderer.rb', line 167

def table_header(node)
  @column_index = 0

  @in_header = true
  out("<thead>\n<tr#{sourcepos(node)}>", :children, "\n</tr>\n</thead>\n<tbody>")
  @in_header = false
end

#table_row(node) ⇒ Object



175
176
177
178
# File 'lib/commonmarker/renderer/html_renderer.rb', line 175

def table_row(node)
  @column_index = 0
  out("\n<tr#{sourcepos(node)}>", :children, "\n</tr>")
end

#text(node) ⇒ Object



138
139
140
# File 'lib/commonmarker/renderer/html_renderer.rb', line 138

def text(node)
  out(escape_html(node.string_content))
end