asciidoctor 0.0.7 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/Gemfile +2 -0
  2. data/README.asciidoc +35 -26
  3. data/Rakefile +9 -6
  4. data/asciidoctor.gemspec +27 -8
  5. data/bin/asciidoctor +1 -1
  6. data/lib/asciidoctor.rb +351 -63
  7. data/lib/asciidoctor/abstract_block.rb +218 -0
  8. data/lib/asciidoctor/abstract_node.rb +249 -0
  9. data/lib/asciidoctor/attribute_list.rb +211 -0
  10. data/lib/asciidoctor/backends/base_template.rb +99 -0
  11. data/lib/asciidoctor/backends/docbook45.rb +510 -0
  12. data/lib/asciidoctor/backends/html5.rb +585 -0
  13. data/lib/asciidoctor/block.rb +27 -254
  14. data/lib/asciidoctor/callouts.rb +117 -0
  15. data/lib/asciidoctor/debug.rb +7 -4
  16. data/lib/asciidoctor/document.rb +229 -77
  17. data/lib/asciidoctor/inline.rb +29 -0
  18. data/lib/asciidoctor/lexer.rb +1330 -502
  19. data/lib/asciidoctor/list_item.rb +33 -34
  20. data/lib/asciidoctor/reader.rb +305 -142
  21. data/lib/asciidoctor/renderer.rb +115 -19
  22. data/lib/asciidoctor/section.rb +100 -189
  23. data/lib/asciidoctor/substituters.rb +468 -0
  24. data/lib/asciidoctor/table.rb +499 -0
  25. data/lib/asciidoctor/version.rb +1 -1
  26. data/test/attributes_test.rb +301 -87
  27. data/test/blocks_test.rb +568 -0
  28. data/test/document_test.rb +221 -24
  29. data/test/fixtures/dot.gif +0 -0
  30. data/test/fixtures/encoding.asciidoc +1 -0
  31. data/test/fixtures/include-file.asciidoc +1 -0
  32. data/test/fixtures/tip.gif +0 -0
  33. data/test/headers_test.rb +411 -43
  34. data/test/lexer_test.rb +265 -45
  35. data/test/links_test.rb +144 -3
  36. data/test/lists_test.rb +2252 -74
  37. data/test/paragraphs_test.rb +21 -30
  38. data/test/preamble_test.rb +24 -0
  39. data/test/reader_test.rb +248 -12
  40. data/test/renderer_test.rb +22 -0
  41. data/test/substitutions_test.rb +414 -0
  42. data/test/tables_test.rb +484 -0
  43. data/test/test_helper.rb +70 -6
  44. data/test/text_test.rb +30 -6
  45. metadata +64 -10
  46. data/lib/asciidoctor/render_templates.rb +0 -317
  47. data/lib/asciidoctor/string.rb +0 -12
@@ -3,7 +3,11 @@ require 'test/unit'
3
3
 
4
4
  require "#{File.expand_path(File.dirname(__FILE__))}/../lib/asciidoctor.rb"
5
5
 
6
- require 'mocha/setup'
6
+ begin
7
+ require 'mocha/setup'
8
+ rescue LoadError
9
+ require 'mocha'
10
+ end
7
11
  require 'htmlentities'
8
12
  require 'nokogiri'
9
13
  require 'pending'
@@ -49,26 +53,86 @@ class Test::Unit::TestCase
49
53
  end
50
54
  end
51
55
 
52
- def assert_xpath(xpath, html, count = nil)
53
- doc = (html =~ /\s*<!DOCTYPE/) ? Nokogiri::HTML::Document.parse(html) : Nokogiri::HTML::DocumentFragment.parse(html)
54
- results = doc.xpath("#{xpath.sub('/', './')}")
56
+ def xmlnodes_at_css(css, content, count = nil)
57
+ xmlnodes_at_path(:css, css, content)
58
+ end
59
+
60
+ def xmlnodes_at_xpath(css, content, count = nil)
61
+ xmlnodes_at_path(:xpath, css, content)
62
+ end
63
+
64
+ def xmlnodes_at_path(type, path, content, count = nil)
65
+ doc = xmldoc_from_string content
66
+ case type
67
+ when :xpath
68
+ results = doc.xpath("#{path.sub('/', './')}")
69
+ when :css
70
+ results = doc.css(path)
71
+ end
72
+ count == 1 ? results.first : results
73
+ end
74
+
75
+ def assert_css(css, content, count = nil)
76
+ assert_path(:css, css, content, count)
77
+ end
78
+
79
+ def assert_xpath(xpath, content, count = nil)
80
+ assert_path(:xpath, xpath, content, count)
81
+ end
82
+
83
+ def assert_path(type, path, content, count = nil)
84
+ case type
85
+ when :xpath
86
+ type_name = 'XPath'
87
+ when :css
88
+ type_name = 'CSS'
89
+ end
90
+
91
+ results = xmlnodes_at_path type, path, content
55
92
 
56
93
  if (count && results.length != count)
57
- flunk "XPath #{xpath} yielded #{results.length} elements rather than #{count} for:\n#{html}"
94
+ flunk "#{type_name} #{path} yielded #{results.length} elements rather than #{count} for:\n#{content}"
58
95
  elsif (count.nil? && results.empty?)
59
- flunk "XPath #{xpath} not found in:\n#{html}"
96
+ flunk "#{type_name} #{path} not found in:\n#{content}"
60
97
  else
61
98
  assert true
62
99
  end
63
100
  end
64
101
 
102
+ def xmldoc_from_string(content)
103
+ match = content.match(/\s*<!DOCTYPE (.*)/)
104
+ if !match
105
+ doc = Nokogiri::HTML::DocumentFragment.parse(content)
106
+ elsif match[1].start_with? 'html'
107
+ doc = Nokogiri::HTML::Document.parse(content)
108
+ else
109
+ doc = Nokogiri::XML::Document.parse(content)
110
+ end
111
+ end
112
+
65
113
  def document_from_string(src, opts = {})
66
114
  Asciidoctor::Document.new(src.lines.entries, opts)
67
115
  end
68
116
 
117
+ def block_from_string(src, opts = {})
118
+ opts[:header_footer] = false
119
+ doc = Asciidoctor::Document.new(src.lines.entries, opts)
120
+ doc.blocks.first
121
+ end
122
+
69
123
  def render_string(src, opts = {})
70
124
  document_from_string(src, opts).render
71
125
  end
126
+
127
+ def render_embedded_string(src, opts = {})
128
+ opts[:header_footer] = false
129
+ document_from_string(src, opts).render
130
+ end
131
+
132
+ def parse_header_metadata(source)
133
+ reader = Asciidoctor::Reader.new source.lines.entries
134
+ [Asciidoctor::Lexer.parse_header_metadata(reader), reader]
135
+ end
72
136
  end
73
137
 
74
138
  ###
@@ -1,8 +1,28 @@
1
1
  require 'test_helper'
2
2
 
3
3
  context "Text" do
4
+ test "proper encoding to handle utf8 characters in document" do
5
+ assert_xpath "//p", example_document(:encoding).render, 1
6
+ end
7
+
8
+ test "proper encoding to handle utf8 characters in embedded document" do
9
+ assert_xpath "//p", example_document(:encoding).render(:header_footer => false), 1
10
+ end
11
+
12
+ # NOTE this test ensures we have the encoding line on block templates too
13
+ test "proper encoding to handle utf8 characters in arbitrary block" do
14
+ input = []
15
+ input << "[verse]\n"
16
+ input.concat(File.readlines(sample_doc_path(:encoding)))
17
+ doc = Asciidoctor::Document.new
18
+ reader = Asciidoctor::Reader.new input
19
+ block = Asciidoctor::Lexer.next_block(reader, doc)
20
+ assert_xpath '//pre', block.render.gsub(/^\s*\n/, ''), 1
21
+ end
22
+
4
23
  test 'escaped text markup' do
5
- pending "Not done yet"
24
+ assert_match(/All your &lt;em&gt;inline&lt;\/em&gt; markup belongs to &lt;strong&gt;us&lt;\/strong&gt;!/,
25
+ render_string('All your <em>inline</em> markup belongs to <strong>us</strong>!'))
6
26
  end
7
27
 
8
28
  test "line breaks" do
@@ -11,8 +31,8 @@ context "Text" do
11
31
 
12
32
  test "single- and double-quoted text" do
13
33
  rendered = render_string("``Where?,'' she said, flipping through her copy of `The New Yorker.'")
14
- assert_match /&ldquo;Where\?,&rdquo;/, rendered
15
- assert_match /&lsquo;The New Yorker.&rsquo;/, rendered
34
+ assert_match(/&#8220;Where\?,&#8221;/, rendered)
35
+ assert_match(/&#8216;The New Yorker.&#8217;/, rendered)
16
36
  end
17
37
 
18
38
  test "separator" do
@@ -24,11 +44,15 @@ context "Text" do
24
44
  assert_xpath "//em", render_string("An 'emphatic' no")
25
45
  end
26
46
 
47
+ test "emphasized text with single quote" do
48
+ assert_xpath "//em[text()=\"Johnny#{[8217].pack('U*')}s\"]", render_string("It's 'Johnny's' phone")
49
+ end
50
+
27
51
  test "emphasized text with escaped single quote" do
28
52
  assert_xpath "//em[text()=\"Johnny's\"]", render_string("It's 'Johnny\\'s' phone")
29
53
  end
30
54
 
31
- test "escaped single quote is restore as single quote" do
55
+ test "escaped single quote is restored as single quote" do
32
56
  assert_xpath "//p[contains(text(), \"Let's do it!\")]", render_string("Let\\'s do it!")
33
57
  end
34
58
 
@@ -45,11 +69,11 @@ context "Text" do
45
69
  end
46
70
 
47
71
  test "unquoted text" do
48
- assert_no_match /#/, render_string("An #unquoted# word")
72
+ assert_no_match(/#/, render_string("An #unquoted# word"))
49
73
  end
50
74
 
51
75
  test "backtick-escaped text followed by single-quoted text" do
52
- assert_match /<tt>foo<\/tt>/, render_string(%Q(run `foo` 'dog'))
76
+ assert_match(/<tt>foo<\/tt>/, render_string(%Q(run `foo` 'dog')))
53
77
  end
54
78
 
55
79
  context "basic styling" do
metadata CHANGED
@@ -1,26 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ryan Waldron
9
+ - Dan Allen
9
10
  - Jeremy McAnally
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2012-12-17 00:00:00.000000000 Z
14
+ date: 2013-01-16 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
- name: json
17
+ name: coderay
17
18
  requirement: !ruby/object:Gem::Requirement
18
19
  none: false
19
20
  requirements:
20
21
  - - ! '>='
21
22
  - !ruby/object:Gem::Version
22
23
  version: '0'
23
- type: :runtime
24
+ type: :development
24
25
  prerelease: false
25
26
  version_requirements: !ruby/object:Gem::Requirement
26
27
  none: false
@@ -29,14 +30,30 @@ dependencies:
29
30
  - !ruby/object:Gem::Version
30
31
  version: '0'
31
32
  - !ruby/object:Gem::Dependency
32
- name: tilt
33
+ name: erubis
33
34
  requirement: !ruby/object:Gem::Requirement
34
35
  none: false
35
36
  requirements:
36
37
  - - ! '>='
37
38
  - !ruby/object:Gem::Version
38
39
  version: '0'
39
- type: :runtime
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ - !ruby/object:Gem::Dependency
49
+ name: htmlentities
50
+ requirement: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
40
57
  prerelease: false
41
58
  version_requirements: !ruby/object:Gem::Requirement
42
59
  none: false
@@ -77,7 +94,7 @@ dependencies:
77
94
  - !ruby/object:Gem::Version
78
95
  version: '0'
79
96
  - !ruby/object:Gem::Dependency
80
- name: htmlentities
97
+ name: pending
81
98
  requirement: !ruby/object:Gem::Requirement
82
99
  none: false
83
100
  requirements:
@@ -93,7 +110,23 @@ dependencies:
93
110
  - !ruby/object:Gem::Version
94
111
  version: '0'
95
112
  - !ruby/object:Gem::Dependency
96
- name: pending
113
+ name: rake
114
+ requirement: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ - !ruby/object:Gem::Dependency
129
+ name: tilt
97
130
  requirement: !ruby/object:Gem::Requirement
98
131
  none: false
99
132
  requirements:
@@ -117,31 +150,45 @@ extensions: []
117
150
  extra_rdoc_files:
118
151
  - LICENSE
119
152
  files:
153
+ - Gemfile
120
154
  - LICENSE
121
155
  - README.asciidoc
122
156
  - Rakefile
123
157
  - asciidoctor.gemspec
124
158
  - bin/asciidoctor
125
159
  - lib/asciidoctor.rb
160
+ - lib/asciidoctor/abstract_block.rb
161
+ - lib/asciidoctor/abstract_node.rb
162
+ - lib/asciidoctor/attribute_list.rb
163
+ - lib/asciidoctor/backends/base_template.rb
164
+ - lib/asciidoctor/backends/docbook45.rb
165
+ - lib/asciidoctor/backends/html5.rb
126
166
  - lib/asciidoctor/block.rb
167
+ - lib/asciidoctor/callouts.rb
127
168
  - lib/asciidoctor/debug.rb
128
169
  - lib/asciidoctor/document.rb
129
170
  - lib/asciidoctor/errors.rb
171
+ - lib/asciidoctor/inline.rb
130
172
  - lib/asciidoctor/lexer.rb
131
173
  - lib/asciidoctor/list_item.rb
132
174
  - lib/asciidoctor/reader.rb
133
- - lib/asciidoctor/render_templates.rb
134
175
  - lib/asciidoctor/renderer.rb
135
176
  - lib/asciidoctor/section.rb
136
- - lib/asciidoctor/string.rb
177
+ - lib/asciidoctor/substituters.rb
178
+ - lib/asciidoctor/table.rb
137
179
  - lib/asciidoctor/version.rb
138
180
  - noof.rb
139
181
  - test/attributes_test.rb
182
+ - test/blocks_test.rb
140
183
  - test/document_test.rb
141
184
  - test/fixtures/asciidoc.txt
142
185
  - test/fixtures/asciidoc_index.txt
143
186
  - test/fixtures/ascshort.txt
187
+ - test/fixtures/dot.gif
188
+ - test/fixtures/encoding.asciidoc
189
+ - test/fixtures/include-file.asciidoc
144
190
  - test/fixtures/list_elements.asciidoc
191
+ - test/fixtures/tip.gif
145
192
  - test/headers_test.rb
146
193
  - test/lexer_test.rb
147
194
  - test/links_test.rb
@@ -149,6 +196,9 @@ files:
149
196
  - test/paragraphs_test.rb
150
197
  - test/preamble_test.rb
151
198
  - test/reader_test.rb
199
+ - test/renderer_test.rb
200
+ - test/substitutions_test.rb
201
+ - test/tables_test.rb
152
202
  - test/test_helper.rb
153
203
  - test/text_test.rb
154
204
  homepage: http://github.com/erebor/asciidoctor
@@ -178,6 +228,7 @@ specification_version: 2
178
228
  summary: Pure Ruby Asciidoc to HTML rendering.
179
229
  test_files:
180
230
  - test/attributes_test.rb
231
+ - test/blocks_test.rb
181
232
  - test/document_test.rb
182
233
  - test/headers_test.rb
183
234
  - test/lexer_test.rb
@@ -186,4 +237,7 @@ test_files:
186
237
  - test/paragraphs_test.rb
187
238
  - test/preamble_test.rb
188
239
  - test/reader_test.rb
240
+ - test/renderer_test.rb
241
+ - test/substitutions_test.rb
242
+ - test/tables_test.rb
189
243
  - test/text_test.rb
@@ -1,317 +0,0 @@
1
- class BaseTemplate
2
- def initialize
3
- end
4
-
5
- def self.inherited(klass)
6
- @template_classes ||= []
7
- @template_classes << klass
8
- end
9
-
10
- def self.template_classes
11
- @template_classes
12
- end
13
-
14
- # We're ignoring locals for now. Shut up.
15
- def render(obj = Object.new, locals = {})
16
- output = template.result(obj.instance_eval {binding})
17
- end
18
-
19
- def template
20
- raise "You chilluns need to make your own template"
21
- end
22
- end
23
-
24
- class DocumentTemplate < BaseTemplate
25
- def template
26
- @template ||= ::ERB.new <<-EOF
27
- <!DOCTYPE html>
28
- <html lang='en'>
29
- <head>
30
- <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
31
- <meta name='generator' content='Asciidoctor <%= attr "asciidoctor-version" %>'>
32
- <title><%= title ? title : (doctitle ? doctitle : '') %></title>
33
- </head>
34
- <body class='<%= attr :doctype %>'>
35
- <div id='header'>
36
- <% if doctitle %>
37
- <h1><%= doctitle %></h1>
38
- <% end %>
39
- </div>
40
- <div id='content'>
41
- <%= content %>
42
- </div>
43
- <div id='footer'>
44
- <div id='footer-text'>
45
- Last updated <%= attr :localdatetime %>
46
- </div>
47
- </div>
48
- </body>
49
- </html>
50
- EOF
51
- end
52
- end
53
-
54
- class SectionPreambleTemplate < BaseTemplate
55
- def template
56
- @template ||= ::ERB.new <<-EOF
57
- <div id='preamble'>
58
- <div class='sectionbody'>
59
- <%= content %>
60
- </div>
61
- </div>
62
- EOF
63
- end
64
- end
65
-
66
- class SectionTemplate < BaseTemplate
67
- def template
68
- @template ||= ERB.new <<-EOF
69
- <div class='sect<%= level %>'>
70
- <% if !anchor.nil? %>
71
- <a name='<%= anchor %>'></a>
72
- <% end %>
73
- <h<%= level + 1 %> id='<%= section_id %>'><%= name %></h<%= level + 1 %>>
74
- <% if level == 1 %>
75
- <div class='sectionbody'><%= content %></div>
76
- <% else %>
77
- <%= content %>
78
- <% end %>
79
- </div>
80
- EOF
81
- end
82
- end
83
-
84
- class SectionAnchorTemplate < BaseTemplate
85
- def template
86
- @template ||= ERB.new <<-EOF
87
- <a name='<%= content %>'></a>
88
- EOF
89
- end
90
- end
91
-
92
- class SectionDlistTemplate < BaseTemplate
93
- def template
94
- @template ||= ERB.new <<-EOF
95
- <div class='dlist'>
96
- <dl>
97
- <% content.each do |dt, dd| %>
98
- <dt class='hdlist1'>
99
- <% if !dt.anchor.nil? and !dt.anchor.empty? %>
100
- <a id='<%= dt.anchor %>'></a>
101
- <% end %>
102
- <%= dt.text %>
103
- </dt>
104
- <% unless dd.nil? %>
105
- <dd>
106
- <p><%= dd.text %></p>
107
- <% if !dd.blocks.empty? %>
108
- <%= dd.content %>
109
- <% end %>
110
- </dd>
111
- <% end %>
112
- <% end %>
113
- </dl>
114
- </div>
115
- EOF
116
- end
117
- end
118
-
119
- class SectionListingTemplate < BaseTemplate
120
- def template
121
- @template ||= ERB.new <<-EOF
122
- <div class='listingblock'>
123
- <div class='content'>
124
- <div class='highlight'>
125
- <pre><%= content %></pre>
126
- </div>
127
- </div>
128
- </div>
129
- EOF
130
- end
131
- end
132
-
133
- class SectionLiteralTemplate < BaseTemplate
134
- def template
135
- @template ||= ERB.new <<-EOF
136
- <div class='literalblock'>
137
- <div class='content'>
138
- <pre><tt><%= content %></tt></pre>
139
- </div>
140
- </div>
141
- EOF
142
- end
143
- end
144
-
145
- class SectionAdmonitionTemplate < BaseTemplate
146
- def template
147
- @template ||= ERB.new <<-EOF
148
- <div class='admonitionblock'>
149
- <table>
150
- <tr>
151
- <td class='icon'>
152
- <% if attr? :caption %>
153
- <div class='title'><%= attr :caption %></div>
154
- <% end %>
155
- </td>
156
- <td class='content'>
157
- <% if !title.nil? %>
158
- <div class='title'><%= title %></div>
159
- <% end %>
160
- <%= content %>
161
- </td>
162
- </tr>
163
- </table>
164
- </div>
165
- EOF
166
- end
167
- end
168
-
169
- class SectionParagraphTemplate < BaseTemplate
170
- def template
171
- @template ||= ERB.new <<-EOF
172
- <div class='paragraph'>
173
- <% if !title.nil? %>
174
- <div class='title'><%= title %></div>
175
- <% end %>
176
- <p><%= content %></p>
177
- </div>
178
- EOF
179
- end
180
- end
181
-
182
- class SectionSidebarTemplate < BaseTemplate
183
- def template
184
- @template ||= ERB.new <<-EOF
185
- <div class='sidebarblock'>
186
- <div class='content'>
187
- <% if !title.nil? %>
188
- <div class='title'><%= title %></div>
189
- <% end %>
190
- <%= content %>
191
- </div>
192
- </div>
193
- EOF
194
- end
195
- end
196
-
197
- class SectionExampleTemplate < BaseTemplate
198
- def template
199
- @template ||= ERB.new <<-EOF
200
- <div class='exampleblock'>
201
- <div class='content'>
202
- <% if !title.nil? %>
203
- <div class='title'><%= title %></div>
204
- <% end %>
205
- <%= content %>
206
- </div>
207
- </div>
208
- EOF
209
- end
210
- end
211
-
212
- class SectionQuoteTemplate < BaseTemplate
213
- def template
214
- @template ||= ERB.new <<-EOF
215
- <div class='quoteblock'>
216
- <% if !title.nil? %>
217
- <div class='title'><%= title %></div>
218
- <% end %>
219
- <div class='content'>
220
- <%= content %>
221
- </div>
222
- <div class='attribution'>
223
- <% if attr? :citetitle %>
224
- <em><%= attr :citetitle %></em>
225
- <% end %>
226
- <% if attr? :attribution %>
227
- <% if attr? :citetitle %>
228
- <br/>
229
- <% end %>
230
- <%= "&#8212; " + attr(:attribution) %>
231
- <% end %>
232
- </div>
233
- </div>
234
- EOF
235
- end
236
- end
237
-
238
- class SectionVerseTemplate < BaseTemplate
239
- def template
240
- @template ||= ERB.new <<-EOF
241
- <div class='verseblock'>
242
- <% if !title.nil? %>
243
- <div class='title'><%= title %></div>
244
- <% end %>
245
- <pre class='content'><%= content %></pre>
246
- <div class='attribution'>
247
- <% if attr? :citetitle %>
248
- <em><%= attr :citetitle %></em>
249
- <% end %>
250
- <% if attr? :attribution %>
251
- <% if attr? :citetitle %>
252
- <br/>
253
- <% end %>
254
- <%= "&#8212; " + attr(:attribution) %>
255
- <% end %>
256
- </div>
257
- </div>
258
- EOF
259
- end
260
- end
261
-
262
- class SectionUlistTemplate < BaseTemplate
263
- def template
264
- @template ||= ERB.new <<-EOF
265
- <div class='ulist'>
266
- <ul>
267
- <% content.each do |li| %>
268
- <li>
269
- <p><%= li.text %></p>
270
- <% if !li.blocks.empty? %>
271
- <%= li.content %>
272
- <% end %>
273
- </li>
274
- <% end %>
275
- </ul>
276
- </div>
277
- EOF
278
- end
279
- end
280
-
281
- class SectionOlistTemplate < BaseTemplate
282
- def template
283
- @template ||= ERB.new <<-EOF
284
- <div class='olist arabic'>
285
- <ol class='arabic'>
286
- <% content.each do |li| %>
287
- <li>
288
- <p><%= li.text %></p>
289
- <% if !li.blocks.empty? %>
290
- <%= li.content %>
291
- <% end %>
292
- </li>
293
- <% end %>
294
- </ol>
295
- </div>
296
- EOF
297
- end
298
- end
299
-
300
- class SectionImageTemplate < BaseTemplate
301
- def template
302
- @template ||= ERB.new <<-EOF
303
- <div class='imageblock'>
304
- <div class='content'>
305
- <% if attr :link %>
306
- <a class='image' href='<%= attr :link%>'><img src='<%= attr :target %>' alt='<%= attr :alt %>'/></a>
307
- <% else %>
308
- <img src='<%= attr :target %>' alt='<%= attr :alt %>'/>
309
- <% end %>
310
- </div>
311
- <% if title %>
312
- <div class='title'><%= title %></div>
313
- <% end %>
314
- </div>
315
- EOF
316
- end
317
- end