Class: Markly::Renderer::HTML
Instance Attribute Summary
Attributes inherited from Generic
#in_plain, #in_tight
Instance Method Summary
collapse
Methods inherited from Generic
#block, #blocksep, #container, #containersep, #cr, #out, #plain, #reference_def, #render
Constructor Details
#initialize(ids: false, tight: false, **options) ⇒ HTML
Returns a new instance of HTML.
17
18
19
20
21
22
23
24
25
|
# File 'lib/markly/renderer/html.rb', line 17
def initialize(ids: false, tight: false, **options)
super(**options)
@ids = ids
@section = nil
@tight = tight
= {}
end
|
Instance Method Details
#blockquote(node) ⇒ Object
115
116
117
118
119
120
121
|
# File 'lib/markly/renderer/html.rb', line 115
def blockquote(node)
block do
container("<blockquote#{source_position(node)}>\n", '</blockquote>') do
out(:children)
end
end
end
|
#code(node) ⇒ Object
197
198
199
200
201
|
# File 'lib/markly/renderer/html.rb', line 197
def code(node)
out('<code>')
out(escape_html(node.string_content))
out('</code>')
end
|
#code_block(node) ⇒ Object
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
# File 'lib/markly/renderer/html.rb', line 129
def code_block(node)
block do
if flag_enabled?(GITHUB_PRE_LANG)
out("<pre#{source_position(node)}")
out(' lang="', node.fence_info.split(/\s+/)[0], '"') if node.fence_info && !node.fence_info.empty?
out('><code>')
else
out("<pre#{source_position(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
|
#document(_) ⇒ Object
27
28
29
30
31
32
|
# File 'lib/markly/renderer/html.rb', line 27
def document(_)
@section = false
super
out("</ol>\n</section>\n") if
out("</section>") if @section
end
|
#emph(node) ⇒ Object
166
167
168
|
# File 'lib/markly/renderer/html.rb', line 166
def emph(node)
out('<em>', :children, '</em>')
end
|
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
|
# File 'lib/markly/renderer/html.rb', line 264
def (node)
unless
out("<section class=\"footnotes\" data-footnotes>\n<ol>\n")
= 0
end
+= 1
label = node.string_content
[] = label
out("<li id=\"fn-#{label}\">\n", :children)
out("\n") if
out("</li>\n")
end
|
257
258
259
260
261
262
|
# File 'lib/markly/renderer/html.rb', line 257
def (node)
label = node..string_content
out("<sup class=\"footnote-ref\"><a href=\"#fn-#{label}\" id=\"fnref-#{label}\" data-footnote-ref>#{node.string_content}</a></sup>")
end
|
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/markly/renderer/html.rb', line 42
def (node)
block do
if @ids
out('</section>') if @section
@section = true
out("<section#{id_for(node)}>")
end
out('<h', node., "#{source_position(node)}>", :children,
'</h', node., '>')
end
end
|
#hrule(node) ⇒ Object
123
124
125
126
127
|
# File 'lib/markly/renderer/html.rb', line 123
def hrule(node)
block do
out("<hr#{source_position(node)} />")
end
end
|
#html(node) ⇒ Object
148
149
150
151
152
153
154
155
156
|
# File 'lib/markly/renderer/html.rb', line 148
def html(node)
block do
if flag_enabled?(UNSAFE)
out(tagfilter(node.string_content))
else
out('<!-- raw HTML omitted -->')
end
end
end
|
#id_for(node) ⇒ Object
34
35
36
37
38
39
40
|
# File 'lib/markly/renderer/html.rb', line 34
def id_for(node)
if @ids
id = node.to_plaintext.chomp.downcase.gsub(/\s+/, '-')
return " id=\"#{CGI.escape_html id}\""
end
end
|
#image(node) ⇒ Object
184
185
186
187
188
189
190
191
|
# File 'lib/markly/renderer/html.rb', line 184
def image(node)
out('<img src="', escape_href(node.url), '"')
plain do
out(' alt="', :children, '"')
end
out(' title="', escape_html(node.title), '"') if node.title && !node.title.empty?
out(' />')
end
|
#inline_html(node) ⇒ Object
158
159
160
161
162
163
164
|
# File 'lib/markly/renderer/html.rb', line 158
def inline_html(node)
if flag_enabled?(UNSAFE)
out(tagfilter(node.string_content))
else
out('<!-- raw HTML omitted -->')
end
end
|
#linebreak(_node) ⇒ Object
203
204
205
|
# File 'lib/markly/renderer/html.rb', line 203
def linebreak(_node)
out("<br />\n")
end
|
#link(node) ⇒ Object
178
179
180
181
182
|
# File 'lib/markly/renderer/html.rb', line 178
def link(node)
out('<a href="', node.url.nil? ? '' : escape_href(node.url), '"')
out(' title="', escape_html(node.title), '"') if node.title && !node.title.empty?
out('>', :children, '</a>')
end
|
#list(node) ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/markly/renderer/html.rb', line 71
def list(node)
old_tight = @tight
@tight = node.list_tight
block do
if node.list_type == :bullet_list
container("<ul#{source_position(node)}>\n", '</ul>') do
out(:children)
end
else
start = if node.list_start == 1
"<ol#{source_position(node)}>\n"
else
"<ol start=\"#{node.list_start}\"#{source_position(node)}>\n"
end
container(start, '</ol>') do
out(:children)
end
end
end
@tight = old_tight
end
|
#list_item(node) ⇒ Object
95
96
97
98
99
100
101
102
|
# File 'lib/markly/renderer/html.rb', line 95
def list_item(node)
block do
tasklist_data = tasklist(node)
container("<li#{source_position(node)}#{tasklist_data}>#{' ' if tasklist?(node)}", '</li>') do
out(:children)
end
end
end
|
#paragraph(node) ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/markly/renderer/html.rb', line 55
def paragraph(node)
if @tight && node.parent.type != :blockquote
out(:children)
else
block do
container("<p#{source_position(node)}>", '</p>') do
out(:children)
if node.parent.type == :footnote_definition && node.next.nil?
out(' ')
end
end
end
end
end
|
#softbreak(_) ⇒ Object
207
208
209
210
211
212
213
214
215
|
# File 'lib/markly/renderer/html.rb', line 207
def softbreak(_)
if flag_enabled?(HARD_BREAKS)
out("<br />\n")
elsif flag_enabled?(NO_BREAKS)
out(' ')
else
out("\n")
end
end
|
#strikethrough(_) ⇒ Object
253
254
255
|
# File 'lib/markly/renderer/html.rb', line 253
def strikethrough(_)
out('<del>', :children, '</del>')
end
|
#strong(node) ⇒ Object
170
171
172
173
174
175
176
|
# File 'lib/markly/renderer/html.rb', line 170
def strong(node)
if node.parent.nil? || node.parent.type == node.type
out(:children)
else
out('<strong>', :children, '</strong>')
end
end
|
#table(node) ⇒ Object
217
218
219
220
221
222
223
|
# File 'lib/markly/renderer/html.rb', line 217
def table(node)
@alignments = node.table_alignments
@needs_close_tbody = false
out("<table#{source_position(node)}>\n", :children)
out("</tbody>\n") if @needs_close_tbody
out("</table>\n")
end
|
#table_cell(node) ⇒ Object
242
243
244
245
246
247
248
249
250
251
|
# File 'lib/markly/renderer/html.rb', line 242
def table_cell(node)
align = case @alignments[@column_index]
when :left then ' align="left"'
when :right then ' align="right"'
when :center then ' align="center"'
else; ''
end
out( ? "<th#{align}#{source_position(node)}>" : "<td#{align}#{source_position(node)}>", :children, ? "</th>\n" : "</td>\n")
@column_index += 1
end
|
225
226
227
228
229
230
231
|
# File 'lib/markly/renderer/html.rb', line 225
def (node)
@column_index = 0
= true
out("<thead>\n<tr#{source_position(node)}>\n", :children, "</tr>\n</thead>\n")
= false
end
|
#table_row(node) ⇒ Object
233
234
235
236
237
238
239
240
|
# File 'lib/markly/renderer/html.rb', line 233
def table_row(node)
@column_index = 0
if ! && !@needs_close_tbody
@needs_close_tbody = true
out("<tbody>\n")
end
out("<tr#{source_position(node)}>\n", :children, "</tr>\n")
end
|
#tasklist(node) ⇒ Object
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/markly/renderer/html.rb', line 104
def tasklist(node)
return '' unless tasklist?(node)
state = if checked?(node)
'checked="" disabled=""'
else
'disabled=""'
end
"><input type=\"checkbox\" #{state} /"
end
|
#text(node) ⇒ Object
193
194
195
|
# File 'lib/markly/renderer/html.rb', line 193
def text(node)
out(escape_html(node.string_content))
end
|