asciidoctor 0.0.7 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of asciidoctor might be problematic. Click here for more details.
- data/Gemfile +2 -0
- data/README.asciidoc +35 -26
- data/Rakefile +9 -6
- data/asciidoctor.gemspec +27 -8
- data/bin/asciidoctor +1 -1
- data/lib/asciidoctor.rb +351 -63
- data/lib/asciidoctor/abstract_block.rb +218 -0
- data/lib/asciidoctor/abstract_node.rb +249 -0
- data/lib/asciidoctor/attribute_list.rb +211 -0
- data/lib/asciidoctor/backends/base_template.rb +99 -0
- data/lib/asciidoctor/backends/docbook45.rb +510 -0
- data/lib/asciidoctor/backends/html5.rb +585 -0
- data/lib/asciidoctor/block.rb +27 -254
- data/lib/asciidoctor/callouts.rb +117 -0
- data/lib/asciidoctor/debug.rb +7 -4
- data/lib/asciidoctor/document.rb +229 -77
- data/lib/asciidoctor/inline.rb +29 -0
- data/lib/asciidoctor/lexer.rb +1330 -502
- data/lib/asciidoctor/list_item.rb +33 -34
- data/lib/asciidoctor/reader.rb +305 -142
- data/lib/asciidoctor/renderer.rb +115 -19
- data/lib/asciidoctor/section.rb +100 -189
- data/lib/asciidoctor/substituters.rb +468 -0
- data/lib/asciidoctor/table.rb +499 -0
- data/lib/asciidoctor/version.rb +1 -1
- data/test/attributes_test.rb +301 -87
- data/test/blocks_test.rb +568 -0
- data/test/document_test.rb +221 -24
- data/test/fixtures/dot.gif +0 -0
- data/test/fixtures/encoding.asciidoc +1 -0
- data/test/fixtures/include-file.asciidoc +1 -0
- data/test/fixtures/tip.gif +0 -0
- data/test/headers_test.rb +411 -43
- data/test/lexer_test.rb +265 -45
- data/test/links_test.rb +144 -3
- data/test/lists_test.rb +2252 -74
- data/test/paragraphs_test.rb +21 -30
- data/test/preamble_test.rb +24 -0
- data/test/reader_test.rb +248 -12
- data/test/renderer_test.rb +22 -0
- data/test/substitutions_test.rb +414 -0
- data/test/tables_test.rb +484 -0
- data/test/test_helper.rb +70 -6
- data/test/text_test.rb +30 -6
- metadata +64 -10
- data/lib/asciidoctor/render_templates.rb +0 -317
- data/lib/asciidoctor/string.rb +0 -12
@@ -0,0 +1,585 @@
|
|
1
|
+
class Asciidoctor::BaseTemplate
|
2
|
+
|
3
|
+
# create template matter to insert a style class from the role attribute if specified
|
4
|
+
def style_class
|
5
|
+
attrvalue(:role)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module Asciidoctor::HTML5
|
10
|
+
class DocumentTemplate < ::Asciidoctor::BaseTemplate
|
11
|
+
def render_outline(node, to_depth = 2)
|
12
|
+
toc_level = nil
|
13
|
+
sections = node.sections
|
14
|
+
unless sections.empty?
|
15
|
+
toc_level, indent = ''
|
16
|
+
unless node.is_a?(::Asciidoctor::Document)
|
17
|
+
indent = ' ' * (node.document.doctype == 'book' ? node.level + 1 : node.level)
|
18
|
+
end
|
19
|
+
toc_level << "#{indent}<ol>\n"
|
20
|
+
sections.each do |section|
|
21
|
+
toc_level << "#{indent} <li><a href=\"##{section.id}\">#{section.sectnum} #{section.title}</a></li>\n"
|
22
|
+
if section.level < to_depth && (child_toc_level = render_outline(section, to_depth))
|
23
|
+
toc_level << "#{indent} <li>\n#{child_toc_level}\n#{indent} </li>\n"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
toc_level << "#{indent}</ol>"
|
27
|
+
end
|
28
|
+
toc_level
|
29
|
+
end
|
30
|
+
|
31
|
+
# Internal: Generate the default stylesheet for CodeRay
|
32
|
+
#
|
33
|
+
# returns the default CodeRay stylesheet as a String
|
34
|
+
def default_coderay_stylesheet
|
35
|
+
Asciidoctor.require_library 'coderay'
|
36
|
+
::CodeRay::Encoders[:html]::CSS.new(:default).stylesheet
|
37
|
+
end
|
38
|
+
|
39
|
+
def template
|
40
|
+
@template ||= @eruby.new <<-EOS
|
41
|
+
<%#encoding:UTF-8%>
|
42
|
+
<!DOCTYPE html>
|
43
|
+
<html lang="en">
|
44
|
+
<head>
|
45
|
+
<meta http-equiv="Content-Type" content="text/html; charset=<%= attr :encoding %>">
|
46
|
+
<meta name="generator" content="Asciidoctor <%= attr 'asciidoctor-version' %>">
|
47
|
+
<% if attr? :description %><meta name="description" content="<%= attr :description %>"><% end %>
|
48
|
+
<% if attr? :keywords %><meta name="keywords" content="<%= attr :keywords %>"><% end %>
|
49
|
+
<title><%= doctitle %></title>
|
50
|
+
<% if attr? :toc %>
|
51
|
+
<style>
|
52
|
+
#toc > ol { padding-left: 0; }
|
53
|
+
#toc ol { list-style-type: none; }
|
54
|
+
</style>
|
55
|
+
<% end %>
|
56
|
+
<% unless attr(:stylesheet, '').empty? %>
|
57
|
+
<link rel="stylesheet" href="<%= File.join((attr :stylesdir, '.'), (attr :stylesheet)) %>">
|
58
|
+
<% end %>
|
59
|
+
<%
|
60
|
+
case attr 'source-highlighter' %><%
|
61
|
+
when 'coderay' %>
|
62
|
+
<style>
|
63
|
+
pre.highlight { border: none; background-color: #F8F8F8; }
|
64
|
+
pre.highlight code, pre.highlight pre { color: #333; }
|
65
|
+
pre.highlight span.line-numbers { display: inline-block; margin-right: 4px; padding: 1px 4px; }
|
66
|
+
pre.highlight .line-numbers { background-color: #D5F6F6; color: gray; }
|
67
|
+
pre.highlight .line-numbers pre { color: gray; }
|
68
|
+
<% if (attr 'coderay-css', 'class') == 'class' %><%= template.default_coderay_stylesheet %><% end %>
|
69
|
+
</style><%
|
70
|
+
when 'highlightjs' %>
|
71
|
+
<link rel="stylesheet" href="<%= (attr :highlightjsdir, 'http://cdnjs.cloudflare.com/ajax/libs/highlight.js/7.3') %>/styles/<%= (attr 'highlightjs-theme', 'default') %>.min.css">
|
72
|
+
<style>
|
73
|
+
pre code { background-color: #F8F8F8; padding: 0; }
|
74
|
+
</style>
|
75
|
+
<script src="<%= (attr :highlightjsdir, 'http://cdnjs.cloudflare.com/ajax/libs/highlight.js/7.3') %>/highlight.min.js"></script>
|
76
|
+
<script>hljs.initHighlightingOnLoad();</script>
|
77
|
+
<% end %>
|
78
|
+
</head>
|
79
|
+
<body#{attribute('id', :'css-signature')} class="<%= doctype %>"<% if attr? 'max-width' %> style="max-width: <%= attr 'max-width' %>;"<% end %>>
|
80
|
+
<% unless noheader %>
|
81
|
+
<div id="header">
|
82
|
+
<% if has_header? %>
|
83
|
+
<% unless notitle %>
|
84
|
+
<h1><%= header.title %></h1>
|
85
|
+
<% end %>
|
86
|
+
<% if attr? :author %><span id="author"><%= attr :author %></span><br><% end %>
|
87
|
+
<% if attr? :email %><span id="email" class="monospaced"><<%= attr :email %>></span><br><% end %>
|
88
|
+
<% if attr? :revnumber %><span id="revnumber">version <%= attr :revnumber %><%= attr?(:revdate) ? ',' : '' %></span><% end %>
|
89
|
+
<% if attr? :revdate %><span id="revdate"><%= attr :revdate %></span><% end %>
|
90
|
+
<% if attr? :revremark %><br><span id="revremark"><%= attr :revremark %></span><% end %>
|
91
|
+
<% end %>
|
92
|
+
<% if attr? :toc %>
|
93
|
+
<div id="toc">
|
94
|
+
<div id="toctitle"><%= attr 'toc-title', 'Table of Contents' %></div>
|
95
|
+
<%= template.render_outline(self, (attr :toclevels, 2).to_i) %>
|
96
|
+
</div>
|
97
|
+
<% end %>
|
98
|
+
</div>
|
99
|
+
<% end %>
|
100
|
+
<div id="content">
|
101
|
+
<%= content %>
|
102
|
+
</div>
|
103
|
+
<div id="footer">
|
104
|
+
<div id="footer-text">
|
105
|
+
Last updated <%= attr :localdatetime %>
|
106
|
+
</div>
|
107
|
+
</div>
|
108
|
+
</body>
|
109
|
+
</html>
|
110
|
+
EOS
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
class EmbeddedTemplate < ::Asciidoctor::BaseTemplate
|
115
|
+
def template
|
116
|
+
@template ||= @eruby.new <<-EOS
|
117
|
+
<%#encoding:UTF-8%>
|
118
|
+
<%= content %>
|
119
|
+
EOS
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
class BlockPreambleTemplate < ::Asciidoctor::BaseTemplate
|
124
|
+
def template
|
125
|
+
@template ||= @eruby.new <<-EOS
|
126
|
+
<%#encoding:UTF-8%>
|
127
|
+
<div id="preamble">
|
128
|
+
<div class="sectionbody">
|
129
|
+
<%= content %>
|
130
|
+
</div>
|
131
|
+
</div>
|
132
|
+
EOS
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
class SectionTemplate < ::Asciidoctor::BaseTemplate
|
137
|
+
def template
|
138
|
+
@template ||= @eruby.new <<-EOS
|
139
|
+
<%#encoding:UTF-8%>
|
140
|
+
<% if level == 0 %>
|
141
|
+
<h1#{id}><%= title %></h1>
|
142
|
+
<%= content %>
|
143
|
+
<% else %>
|
144
|
+
<div class="sect<%= @level %>#{style_class}">
|
145
|
+
<h<%= @level + 1 %>#{id}><% if attr? :numbered %><%= sectnum %> <% end %><%= title %></h<%= @level + 1 %>>
|
146
|
+
<% if @level == 1 %>
|
147
|
+
<div class="sectionbody">
|
148
|
+
<%= content %>
|
149
|
+
</div>
|
150
|
+
<% else %>
|
151
|
+
<%= content %>
|
152
|
+
<% end %>
|
153
|
+
</div>
|
154
|
+
<% end %>
|
155
|
+
EOS
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
class BlockDlistTemplate < ::Asciidoctor::BaseTemplate
|
160
|
+
def template
|
161
|
+
@template ||= @eruby.new <<-EOS
|
162
|
+
<%#encoding:UTF-8%>
|
163
|
+
<div#{id} class="dlist#{style_class}">
|
164
|
+
<% if title %>
|
165
|
+
<div class="title"><%= title %></div>
|
166
|
+
<% end %>
|
167
|
+
<dl>
|
168
|
+
<% content.each do |dt, dd| %>
|
169
|
+
<dt class="hdlist1">
|
170
|
+
<%= dt.text %>
|
171
|
+
</dt>
|
172
|
+
<% unless dd.nil? %>
|
173
|
+
<dd>
|
174
|
+
<% if dd.text? %>
|
175
|
+
<p><%= dd.text %></p>
|
176
|
+
<% end %>
|
177
|
+
<% if dd.blocks? %>
|
178
|
+
<%= dd.content %>
|
179
|
+
<% end %>
|
180
|
+
</dd>
|
181
|
+
<% end %>
|
182
|
+
<% end %>
|
183
|
+
</dl>
|
184
|
+
</div>
|
185
|
+
EOS
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
class BlockListingTemplate < ::Asciidoctor::BaseTemplate
|
190
|
+
def template
|
191
|
+
@template ||= @eruby.new <<-EOS
|
192
|
+
<%#encoding:UTF-8%>
|
193
|
+
<div#{id} class="listingblock#{style_class}">
|
194
|
+
<% if title %>
|
195
|
+
<div class="title"><%= title %></div>
|
196
|
+
<% end %>
|
197
|
+
<div class="content monospaced">
|
198
|
+
<% if (attr :style) == 'source' %>
|
199
|
+
<pre class="highlight<% if attr('source-highlighter') == 'coderay' %> CodeRay<% end %>"><code#{attribute('class', :language)}><%= template.preserve_endlines(content, self) %></code></pre>
|
200
|
+
<% else %>
|
201
|
+
<pre><%= template.preserve_endlines(content, self) %></pre>
|
202
|
+
<% end %>
|
203
|
+
</div>
|
204
|
+
</div>
|
205
|
+
EOS
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
class BlockLiteralTemplate < ::Asciidoctor::BaseTemplate
|
210
|
+
def template
|
211
|
+
@template ||= @eruby.new <<-EOS
|
212
|
+
<%#encoding:UTF-8%>
|
213
|
+
<div#{id} class="literalblock#{style_class}">
|
214
|
+
<% if title %>
|
215
|
+
<div class="title"><%= title %></div>
|
216
|
+
<% end %>
|
217
|
+
<div class="content monospaced">
|
218
|
+
<pre><%= template.preserve_endlines(content, self) %></pre>
|
219
|
+
</div>
|
220
|
+
</div>
|
221
|
+
EOS
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
class BlockAdmonitionTemplate < ::Asciidoctor::BaseTemplate
|
226
|
+
def template
|
227
|
+
@template ||= @eruby.new <<-EOS
|
228
|
+
<%#encoding:UTF-8%>
|
229
|
+
<div#{id} class="admonitionblock#{style_class}">
|
230
|
+
<table>
|
231
|
+
<tr>
|
232
|
+
<td class="icon">
|
233
|
+
<% if attr? :icons %>
|
234
|
+
<img src="<%= icon_uri(attr :name) %>" alt="<%= attr :caption %>">
|
235
|
+
<% else %>
|
236
|
+
<div class="title"><%= attr :caption %></div>
|
237
|
+
<% end %>
|
238
|
+
</td>
|
239
|
+
<td class="content">
|
240
|
+
<% unless title.nil? %>
|
241
|
+
<div class="title"><%= title %></div>
|
242
|
+
<% end %>
|
243
|
+
<%= content %>
|
244
|
+
</td>
|
245
|
+
</tr>
|
246
|
+
</table>
|
247
|
+
</div>
|
248
|
+
EOS
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
class BlockParagraphTemplate < ::Asciidoctor::BaseTemplate
|
253
|
+
def template
|
254
|
+
@template ||= @eruby.new <<-EOS
|
255
|
+
<%#encoding:UTF-8%>
|
256
|
+
<div#{id} class="paragraph#{style_class}">
|
257
|
+
<% unless title.nil? %>
|
258
|
+
<div class="title"><%= title %></div>
|
259
|
+
<% end %>
|
260
|
+
<p><%= content %></p>
|
261
|
+
</div>
|
262
|
+
EOS
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
class BlockSidebarTemplate < ::Asciidoctor::BaseTemplate
|
267
|
+
def template
|
268
|
+
@template ||= @eruby.new <<-EOS
|
269
|
+
<%#encoding:UTF-8%>
|
270
|
+
<div#{id} class="sidebarblock#{style_class}">
|
271
|
+
<div class="content">
|
272
|
+
<% unless title.nil? %>
|
273
|
+
<div class="title"><%= title %></div>
|
274
|
+
<% end %>
|
275
|
+
<%= content %>
|
276
|
+
</div>
|
277
|
+
</div>
|
278
|
+
EOS
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
class BlockExampleTemplate < ::Asciidoctor::BaseTemplate
|
283
|
+
def template
|
284
|
+
@template ||= @eruby.new <<-EOS
|
285
|
+
<%#encoding:UTF-8%>
|
286
|
+
<div#{id} class="exampleblock#{style_class}">
|
287
|
+
<div class="content">
|
288
|
+
<% unless title.nil? %>
|
289
|
+
<div class="title"><%= title %></div>
|
290
|
+
<% end %>
|
291
|
+
<%= content %>
|
292
|
+
</div>
|
293
|
+
</div>
|
294
|
+
EOS
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
class BlockOpenTemplate < ::Asciidoctor::BaseTemplate
|
299
|
+
def template
|
300
|
+
@template ||= @eruby.new <<-EOS
|
301
|
+
<%#encoding:UTF-8%>
|
302
|
+
<div#{id} class="openblock#{style_class}">
|
303
|
+
<% unless title.nil? %>
|
304
|
+
<div class="title"><%= title %></div>
|
305
|
+
<% end %>
|
306
|
+
<div class="content">
|
307
|
+
<%= content %>
|
308
|
+
</div>
|
309
|
+
</div>
|
310
|
+
EOS
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
class BlockPassTemplate < ::Asciidoctor::BaseTemplate
|
315
|
+
def template
|
316
|
+
@template ||= @eruby.new <<-EOS
|
317
|
+
<%#encoding:UTF-8%>
|
318
|
+
<%= content %>
|
319
|
+
EOS
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
class BlockQuoteTemplate < ::Asciidoctor::BaseTemplate
|
324
|
+
def template
|
325
|
+
@template ||= @eruby.new <<-EOS
|
326
|
+
<%#encoding:UTF-8%>
|
327
|
+
<div#{id} class="quoteblock#{style_class}">
|
328
|
+
<% unless title.nil? %>
|
329
|
+
<div class="title"><%= title %></div>
|
330
|
+
<% end %>
|
331
|
+
<div class="content">
|
332
|
+
<%= content %>
|
333
|
+
</div>
|
334
|
+
<div class="attribution">
|
335
|
+
<% if attr? :citetitle %>
|
336
|
+
<em><%= attr :citetitle %></em>
|
337
|
+
<% end %>
|
338
|
+
<% if attr? :attribution %>
|
339
|
+
<% if attr? :citetitle %>
|
340
|
+
<br/>
|
341
|
+
<% end %>
|
342
|
+
<%= '— ' + attr(:attribution) %>
|
343
|
+
<% end %>
|
344
|
+
</div>
|
345
|
+
</div>
|
346
|
+
EOS
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
class BlockVerseTemplate < ::Asciidoctor::BaseTemplate
|
351
|
+
def template
|
352
|
+
@template ||= @eruby.new <<-EOS
|
353
|
+
<%#encoding:UTF-8%>
|
354
|
+
<div#{id} class="verseblock#{style_class}">
|
355
|
+
<% unless title.nil? %>
|
356
|
+
<div class="title"><%= title %></div>
|
357
|
+
<% end %>
|
358
|
+
<pre class="content"><%= template.preserve_endlines(content, self) %></pre>
|
359
|
+
<div class="attribution">
|
360
|
+
<% if attr? :citetitle %>
|
361
|
+
<em><%= attr :citetitle %></em>
|
362
|
+
<% end %>
|
363
|
+
<% if attr? :attribution %>
|
364
|
+
<% if attr? :citetitle %>
|
365
|
+
<br/>
|
366
|
+
<% end %>
|
367
|
+
<%= '— ' + attr(:attribution) %>
|
368
|
+
<% end %>
|
369
|
+
</div>
|
370
|
+
</div>
|
371
|
+
EOS
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
class BlockUlistTemplate < ::Asciidoctor::BaseTemplate
|
376
|
+
def template
|
377
|
+
@template ||= @eruby.new <<-EOS
|
378
|
+
<%#encoding:UTF-8%>
|
379
|
+
<div#{id} class="ulist#{attrvalue(:style)}#{style_class}">
|
380
|
+
<% unless title.nil? %>
|
381
|
+
<div class="title"><%= title %></div>
|
382
|
+
<% end %>
|
383
|
+
<ul>
|
384
|
+
<% content.each do |li| %>
|
385
|
+
<li>
|
386
|
+
<p><%= li.text %></p>
|
387
|
+
<% if li.blocks? %>
|
388
|
+
<%= li.content %>
|
389
|
+
<% end %>
|
390
|
+
</li>
|
391
|
+
<% end %>
|
392
|
+
</ul>
|
393
|
+
</div>
|
394
|
+
EOS
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
398
|
+
class BlockOlistTemplate < ::Asciidoctor::BaseTemplate
|
399
|
+
def template
|
400
|
+
@template ||= @eruby.new <<-EOS
|
401
|
+
<%#encoding:UTF-8%>
|
402
|
+
<div#{id} class="olist <%= attr :style %>#{style_class}">
|
403
|
+
<% unless title.nil? %>
|
404
|
+
<div class="title"><%= title %></div>
|
405
|
+
<% end %>
|
406
|
+
<ol class="<%= attr :style %>"#{attribute('start', :start)}>
|
407
|
+
<% content.each do |li| %>
|
408
|
+
<li>
|
409
|
+
<p><%= li.text %></p>
|
410
|
+
<% if li.blocks? %>
|
411
|
+
<%= li.content %>
|
412
|
+
<% end %>
|
413
|
+
</li>
|
414
|
+
<% end %>
|
415
|
+
</ol>
|
416
|
+
</div>
|
417
|
+
EOS
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
421
|
+
class BlockColistTemplate < ::Asciidoctor::BaseTemplate
|
422
|
+
def template
|
423
|
+
@template ||= @eruby.new <<-EOS
|
424
|
+
<%#encoding:UTF-8%>
|
425
|
+
<div#{id} class="colist <%= attr :style %>#{style_class}">
|
426
|
+
<% unless title.nil? %>
|
427
|
+
<div class="title"><%= title %></div>
|
428
|
+
<% end %>
|
429
|
+
<ol>
|
430
|
+
<% content.each do |li| %>
|
431
|
+
<li>
|
432
|
+
<p><%= li.text %></p>
|
433
|
+
</li>
|
434
|
+
<% end %>
|
435
|
+
</ol>
|
436
|
+
</div>
|
437
|
+
EOS
|
438
|
+
end
|
439
|
+
end
|
440
|
+
|
441
|
+
class BlockTableTemplate < ::Asciidoctor::BaseTemplate
|
442
|
+
def template
|
443
|
+
@template ||= @eruby.new <<-EOS
|
444
|
+
<%#encoding:UTF-8%>
|
445
|
+
<table#{id} class="tableblock frame-<%= attr :frame, 'all' %> grid-<%= attr :grid, 'all'%>#{style_class}" style="<%
|
446
|
+
if !(attr? 'autowidth-option') %>width: <%= attr :tablepcwidth %>%; <% end %><%
|
447
|
+
if attr? :float %>float: <%= attr :float %>; <% end %>">
|
448
|
+
<% if title? %>
|
449
|
+
<caption class="title"><%= title %></caption>
|
450
|
+
<% end %>
|
451
|
+
<% if (attr :rowcount) >= 0 %>
|
452
|
+
<colgroup>
|
453
|
+
<% if attr? 'autowidth-option' %>
|
454
|
+
<% @columns.each do |col| %>
|
455
|
+
<col>
|
456
|
+
<% end %>
|
457
|
+
<% else %>
|
458
|
+
<% @columns.each do |col| %>
|
459
|
+
<col style="width: <%= col.attr :colpcwidth %>%;">
|
460
|
+
<% end %>
|
461
|
+
<% end %>
|
462
|
+
</colgroup>
|
463
|
+
<% [:head, :foot, :body].select {|tsec| !rows[tsec].empty? }.each do |tsec| %>
|
464
|
+
<t<%= tsec %>>
|
465
|
+
<% @rows[tsec].each do |row| %>
|
466
|
+
<tr>
|
467
|
+
<% row.each do |cell| %>
|
468
|
+
<<%= tsec == :head ? 'th' : 'td' %> class="tableblock halign-<%= cell.attr :halign %> valign-<%= cell.attr :valign %>"#{attribute('colspan', 'cell.colspan')}#{attribute('rowspan', 'cell.rowspan')}><%
|
469
|
+
if tsec == :head %><%= cell.text %><% else %><%
|
470
|
+
case cell.attr(:style)
|
471
|
+
when :asciidoc %><div><%= cell.content %></div><%
|
472
|
+
when :verse %><div class="verse"><%= template.preserve_endlines(cell.text, self) %></div><%
|
473
|
+
when :literal %><div class="literal monospaced"><pre><%= template.preserve_endlines(cell.text, self) %></pre></div><%
|
474
|
+
when :header %><% cell.content.each do |text| %><p class="tableblock header"><%= text %></p><% end %><%
|
475
|
+
else %><% cell.content.each do |text| %><p class="tableblock"><%= text %></p><% end %><%
|
476
|
+
end %><% end %></<%= tsec == :head ? 'th' : 'td' %>>
|
477
|
+
<% end %>
|
478
|
+
</tr>
|
479
|
+
<% end %>
|
480
|
+
</t<%= tsec %>>
|
481
|
+
<% end %>
|
482
|
+
<% end %>
|
483
|
+
</table>
|
484
|
+
EOS
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
class BlockImageTemplate < ::Asciidoctor::BaseTemplate
|
489
|
+
def template
|
490
|
+
@template ||= @eruby.new <<-EOS
|
491
|
+
<%#encoding:UTF-8%>
|
492
|
+
<div#{id} class="imageblock#{style_class}">
|
493
|
+
<div class="content">
|
494
|
+
<% if attr :link %>
|
495
|
+
<a class="image" href="<%= attr :link %>"><img src="<%= image_uri(attr :target) %>" alt="<%= attr :alt %>"#{attribute('width', :width)}#{attribute('height', :height)}></a>
|
496
|
+
<% else %>
|
497
|
+
<img src="<%= image_uri(attr :target) %>" alt="<%= attr :alt %>"#{attribute('width', :width)}#{attribute('height', :height)}>
|
498
|
+
<% end %>
|
499
|
+
</div>
|
500
|
+
<% if title %>
|
501
|
+
<div class="title"><%= title %></div>
|
502
|
+
<% end %>
|
503
|
+
</div>
|
504
|
+
EOS
|
505
|
+
end
|
506
|
+
end
|
507
|
+
|
508
|
+
class BlockRulerTemplate < ::Asciidoctor::BaseTemplate
|
509
|
+
def template
|
510
|
+
@template ||= @eruby.new <<-EOS
|
511
|
+
<hr>
|
512
|
+
EOS
|
513
|
+
end
|
514
|
+
end
|
515
|
+
|
516
|
+
class InlineBreakTemplate < ::Asciidoctor::BaseTemplate
|
517
|
+
def template
|
518
|
+
@template ||= @eruby.new <<-EOS
|
519
|
+
<%= text %><br>
|
520
|
+
EOS
|
521
|
+
end
|
522
|
+
end
|
523
|
+
|
524
|
+
class InlineCalloutTemplate < ::Asciidoctor::BaseTemplate
|
525
|
+
def template
|
526
|
+
@template ||= @eruby.new <<-EOS
|
527
|
+
<b><%= text %></b>
|
528
|
+
EOS
|
529
|
+
end
|
530
|
+
end
|
531
|
+
|
532
|
+
class InlineQuotedTemplate < ::Asciidoctor::BaseTemplate
|
533
|
+
QUOTED_TAGS = {
|
534
|
+
:emphasis => ['<em>', '</em>'],
|
535
|
+
:strong => ['<strong>', '</strong>'],
|
536
|
+
:monospaced => ['<tt>', '</tt>'],
|
537
|
+
:superscript => ['<sup>', '</sup>'],
|
538
|
+
:subscript => ['<sub>', '</sub>'],
|
539
|
+
:double => [Asciidoctor::INTRINSICS['ldquo'], Asciidoctor::INTRINSICS['rdquo']],
|
540
|
+
:single => [Asciidoctor::INTRINSICS['lsquo'], Asciidoctor::INTRINSICS['rsquo']],
|
541
|
+
:none => ['', '']
|
542
|
+
}
|
543
|
+
|
544
|
+
def template
|
545
|
+
@template ||= @eruby.new <<-EOS
|
546
|
+
<% tags = template.class::QUOTED_TAGS[@type] %><%= tags.first %><%
|
547
|
+
if attr? :role %><span#{attribute('class', :role)}><%
|
548
|
+
end %><%= @text %><%
|
549
|
+
if attr? :role %></span><%
|
550
|
+
end %><%= tags.last %>
|
551
|
+
EOS
|
552
|
+
end
|
553
|
+
end
|
554
|
+
|
555
|
+
class InlineAnchorTemplate < ::Asciidoctor::BaseTemplate
|
556
|
+
def template
|
557
|
+
@template ||= @eruby.new <<-EOS
|
558
|
+
<%
|
559
|
+
if type == :xref
|
560
|
+
%><a href="#<%= @target %>"><%= @text || @document.references[:ids].fetch(@target, '[' + @target + ']') %></a><%
|
561
|
+
elsif @type == :ref
|
562
|
+
%><a id="<%= @target %>"></a><%
|
563
|
+
else
|
564
|
+
%><a href="<%= @target %>"><%= @text %></a><%
|
565
|
+
end
|
566
|
+
%>
|
567
|
+
EOS
|
568
|
+
end
|
569
|
+
end
|
570
|
+
|
571
|
+
class InlineImageTemplate < ::Asciidoctor::BaseTemplate
|
572
|
+
def template
|
573
|
+
# care is taken here to avoid a space inside the optional <a> tag
|
574
|
+
@template ||= @eruby.new <<-EOS
|
575
|
+
<span class="image#{style_class}">
|
576
|
+
<%
|
577
|
+
if attr :link %><a class="image" href="<%= attr :link %>"><%
|
578
|
+
end %><img src="<%= image_uri(target) %>" alt="<%= attr :alt %>"#{attribute('width', :width)}#{attribute('height', :height)}#{attribute('title', :title)}><%
|
579
|
+
if attr :link%></a><% end
|
580
|
+
%>
|
581
|
+
</span>
|
582
|
+
EOS
|
583
|
+
end
|
584
|
+
end
|
585
|
+
end
|