review 4.2.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby-win.yml +11 -5
- data/.rubocop.yml +113 -24
- data/NEWS.ja.md +94 -0
- data/NEWS.md +94 -0
- data/bin/review-catalog-converter +1 -1
- data/bin/review-check +2 -4
- data/bin/review-checkdep +1 -1
- data/bin/review-compile +8 -14
- data/bin/review-validate +1 -1
- data/doc/config.yml.sample +4 -1
- data/doc/config.yml.sample-simple +1 -1
- data/doc/format.ja.md +83 -4
- data/doc/format.md +84 -7
- data/doc/makeindex.ja.md +2 -2
- data/doc/quickstart.ja.md +3 -3
- data/doc/quickstart.md +2 -2
- data/lib/epubmaker/content.rb +3 -2
- data/lib/epubmaker/epubcommon.rb +33 -25
- data/lib/epubmaker/epubv2.rb +5 -6
- data/lib/epubmaker/epubv3.rb +20 -18
- data/lib/review/book.rb +2 -2
- data/lib/review/book/base.rb +61 -25
- data/lib/review/book/bib.rb +21 -0
- data/lib/review/book/book_unit.rb +155 -0
- data/lib/review/book/chapter.rb +30 -26
- data/lib/review/book/index.rb +23 -185
- data/lib/review/book/index/item.rb +7 -1
- data/lib/review/book/part.rb +21 -9
- data/lib/review/book/volume.rb +1 -1
- data/lib/review/builder.rb +68 -13
- data/lib/review/catalog.rb +2 -2
- data/lib/review/compiler.rb +159 -73
- data/lib/review/configure.rb +22 -1
- data/lib/review/converter.rb +1 -1
- data/lib/review/epub2html.rb +6 -1
- data/lib/review/epubmaker.rb +12 -23
- data/lib/review/htmlbuilder.rb +36 -7
- data/lib/review/htmlutils.rb +7 -10
- data/lib/review/i18n.rb +1 -1
- data/lib/review/idgxmlbuilder.rb +51 -6
- data/lib/review/idgxmlmaker.rb +9 -14
- data/lib/review/index_builder.rb +653 -0
- data/lib/review/init.rb +5 -13
- data/lib/review/latexbuilder.rb +65 -4
- data/lib/review/logger.rb +2 -2
- data/lib/review/makerhelper.rb +11 -0
- data/lib/review/markdownbuilder.rb +19 -1
- data/lib/review/pdfmaker.rb +17 -36
- data/lib/review/plaintextbuilder.rb +48 -2
- data/lib/review/preprocessor.rb +5 -5
- data/lib/review/rstbuilder.rb +25 -6
- data/lib/review/sec_counter.rb +13 -0
- data/lib/review/textmaker.rb +4 -12
- data/lib/review/tocprinter.rb +2 -3
- data/lib/review/topbuilder.rb +26 -0
- data/lib/review/update.rb +7 -7
- data/lib/review/version.rb +1 -1
- data/lib/review/volumeprinter.rb +2 -3
- data/lib/review/webmaker.rb +9 -20
- data/review.gemspec +2 -2
- data/samples/sample-book/src/config.yml +1 -1
- data/samples/syntax-book/Gemfile +1 -1
- data/samples/syntax-book/config.yml +1 -1
- data/templates/latex/config.erb +27 -23
- data/templates/latex/review-jlreq/README.md +3 -1
- data/templates/latex/review-jlreq/review-base.sty +31 -15
- data/templates/latex/review-jlreq/review-jlreq.cls +8 -24
- data/templates/latex/review-jsbook/README.md +7 -5
- data/templates/latex/review-jsbook/review-base.sty +34 -16
- data/templates/latex/review-jsbook/review-jsbook.cls +4 -2
- data/templates/web/html/layout-html5.html.erb +1 -1
- data/test/assets/test_template.tex +3 -3
- data/test/assets/test_template_backmatter.tex +3 -3
- data/test/book_test_helper.rb +11 -5
- data/test/test_book.rb +54 -63
- data/test/test_book_chapter.rb +93 -52
- data/test/test_builder.rb +24 -15
- data/test/test_converter.rb +1 -0
- data/test/test_epub3maker.rb +2 -2
- data/test/test_epubmaker.rb +8 -0
- data/test/test_helper.rb +4 -1
- data/test/test_htmlbuilder.rb +627 -56
- data/test/test_htmlutils.rb +0 -12
- data/test/test_i18n.rb +33 -33
- data/test/test_idgxmlbuilder.rb +358 -11
- data/test/test_idgxmlmaker_cmd.rb +1 -1
- data/test/test_index.rb +62 -52
- data/test/test_indexbuilder.rb +52 -0
- data/test/test_latexbuilder.rb +547 -10
- data/test/test_latexbuilder_v2.rb +43 -5
- data/test/test_logger.rb +7 -7
- data/test/test_makerhelper.rb +0 -12
- data/test/test_markdownbuilder.rb +3 -0
- data/test/test_pdfmaker.rb +13 -12
- data/test/test_pdfmaker_cmd.rb +1 -1
- data/test/test_plaintextbuilder.rb +422 -7
- data/test/test_review_ext.rb +2 -1
- data/test/test_rstbuilder.rb +25 -1
- data/test/test_sec_counter.rb +156 -0
- data/test/test_textmaker_cmd.rb +1 -1
- data/test/test_topbuilder.rb +187 -10
- data/test/test_update.rb +10 -10
- data/test/test_webtocprinter.rb +12 -12
- data/vendor/gentombow/LICENSE +1 -1
- data/vendor/gentombow/Makefile +0 -1
- data/vendor/gentombow/bounddvi-en.pdf +0 -0
- data/vendor/gentombow/bounddvi-en.tex +1 -0
- data/vendor/gentombow/bounddvi.pdf +0 -0
- data/vendor/gentombow/bounddvi.sty +30 -7
- data/vendor/gentombow/bounddvi.tex +1 -0
- data/vendor/gentombow/create_archive.sh +1 -0
- data/vendor/gentombow/gentombow-ja.pdf +0 -0
- data/vendor/gentombow/gentombow-ja.tex +9 -0
- data/vendor/gentombow/gentombow.pdf +0 -0
- data/vendor/gentombow/gentombow.sty +32 -10
- data/vendor/gentombow/gentombow.tex +8 -0
- data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
- data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
- data/vendor/jsclasses/Makefile +3 -2
- data/vendor/jsclasses/create_archive.sh +5 -5
- data/vendor/jsclasses/jis/Makefile +3 -2
- data/vendor/jsclasses/jis/jsarticle.cls +22 -18
- data/vendor/jsclasses/jis/jsbook.cls +22 -18
- data/vendor/jsclasses/jis/jsclasses.dtx +94 -13
- data/vendor/jsclasses/jis/jsclasses.ins +15 -5
- data/vendor/jsclasses/jis/jslogo.ins +9 -0
- data/vendor/jsclasses/jis/jslogo.sty +1 -13
- data/vendor/jsclasses/jis/jspf.cls +22 -18
- data/vendor/jsclasses/jis/jsreport.cls +22 -18
- data/vendor/jsclasses/jis/jsverb.ins +9 -0
- data/vendor/jsclasses/jis/jsverb.sty +1 -13
- data/vendor/jsclasses/jis/kiyou.cls +22 -18
- data/vendor/jsclasses/jis/minijs.sty +65 -22
- data/vendor/jsclasses/jis/okumacro.ins +9 -0
- data/vendor/jsclasses/jis/okumacro.sty +1 -13
- data/vendor/jsclasses/jis/okuverb.ins +9 -0
- data/vendor/jsclasses/jis/okuverb.sty +1 -13
- data/vendor/jsclasses/jis/winjis.sty +23 -19
- data/vendor/jsclasses/jsarticle.cls +22 -18
- data/vendor/jsclasses/jsbook.cls +22 -18
- data/vendor/jsclasses/jsclasses.dtx +94 -13
- data/vendor/jsclasses/jsclasses.ins +15 -5
- data/vendor/jsclasses/jsclasses.pdf +0 -0
- data/vendor/jsclasses/jslogo.ins +9 -0
- data/vendor/jsclasses/jslogo.pdf +0 -0
- data/vendor/jsclasses/jslogo.sty +1 -13
- data/vendor/jsclasses/jspf.cls +22 -18
- data/vendor/jsclasses/jsreport.cls +22 -18
- data/vendor/jsclasses/jsverb.ins +9 -0
- data/vendor/jsclasses/jsverb.pdf +0 -0
- data/vendor/jsclasses/jsverb.sty +1 -13
- data/vendor/jsclasses/kiyou.cls +22 -18
- data/vendor/jsclasses/minijs.sty +68 -22
- data/vendor/jsclasses/okumacro.ins +9 -0
- data/vendor/jsclasses/okumacro.pdf +0 -0
- data/vendor/jsclasses/okumacro.sty +1 -13
- data/vendor/jsclasses/okuverb.ins +9 -0
- data/vendor/jsclasses/okuverb.pdf +0 -0
- data/vendor/jsclasses/okuverb.sty +1 -13
- data/vendor/jsclasses/tests/relfont.tex +10 -0
- data/vendor/jsclasses/winjis.sty +23 -19
- metadata +14 -6
- data/.rubocop_todo.yml +0 -7
- data/lib/review/book/compilable.rb +0 -174
data/test/test_book_chapter.rb
CHANGED
|
@@ -2,6 +2,10 @@ require 'book_test_helper'
|
|
|
2
2
|
class ChapterTest < Test::Unit::TestCase
|
|
3
3
|
include BookTestHelper
|
|
4
4
|
|
|
5
|
+
def setup
|
|
6
|
+
I18n.setup
|
|
7
|
+
end
|
|
8
|
+
|
|
5
9
|
def test_initialize
|
|
6
10
|
ch = Book::Chapter.new(:book, :number, :name, '/foo/bar', :io)
|
|
7
11
|
assert_equal :book, ch.book
|
|
@@ -66,6 +70,7 @@ class ChapterTest < Test::Unit::TestCase
|
|
|
66
70
|
|
|
67
71
|
book = Book::Base.new
|
|
68
72
|
ch = Book::Chapter.new(book, nil, nil, tf.path)
|
|
73
|
+
ch.generate_indexes
|
|
69
74
|
assert_equal lines, ch.lines
|
|
70
75
|
|
|
71
76
|
lines = ["1\n", "2\n", '3']
|
|
@@ -78,6 +83,7 @@ class ChapterTest < Test::Unit::TestCase
|
|
|
78
83
|
tf2.close
|
|
79
84
|
|
|
80
85
|
ch = Book::Chapter.new(book, nil, nil, tf1.path, tf2.path)
|
|
86
|
+
ch.generate_indexes
|
|
81
87
|
assert_equal lines, ch.lines # XXX: OK?
|
|
82
88
|
end
|
|
83
89
|
|
|
@@ -103,19 +109,19 @@ class ChapterTest < Test::Unit::TestCase
|
|
|
103
109
|
end
|
|
104
110
|
|
|
105
111
|
def test_on_chaps?
|
|
106
|
-
mktmpbookdir
|
|
107
|
-
'chapter1.re' => '12345', 'preface.re' => 'abcde' do |dir, book, files|
|
|
112
|
+
mktmpbookdir('CHAPS' => "chapter1.re\nchapter2.re",
|
|
113
|
+
'chapter1.re' => '12345', 'preface.re' => 'abcde') do |dir, book, files|
|
|
108
114
|
ch1 = Book::Chapter.new(book, 1, 'chapter1', files['chapter1.re'])
|
|
109
115
|
pre = Book::Chapter.new(book, nil, 'preface', files['preface.re'])
|
|
110
116
|
|
|
111
117
|
assert ch1.on_chaps?
|
|
112
118
|
assert !pre.on_chaps?
|
|
113
119
|
|
|
114
|
-
ch2_path = File.join(dir, 'chapter2.
|
|
120
|
+
ch2_path = File.join(dir, 'chapter2.re')
|
|
115
121
|
File.open(ch2_path, 'w') {}
|
|
116
122
|
ch2 = Book::Chapter.new(book, 2, 'chapter2', ch2_path)
|
|
117
123
|
|
|
118
|
-
ch3_path = File.join(dir, 'chapter3.
|
|
124
|
+
ch3_path = File.join(dir, 'chapter3.re')
|
|
119
125
|
File.open(ch3_path, 'w') {}
|
|
120
126
|
ch3 = Book::Chapter.new(book, 3, 'chapter3', ch3_path)
|
|
121
127
|
|
|
@@ -124,50 +130,70 @@ class ChapterTest < Test::Unit::TestCase
|
|
|
124
130
|
end
|
|
125
131
|
end
|
|
126
132
|
|
|
133
|
+
def test_invalid_encoding
|
|
134
|
+
mktmpbookdir('CHAPS' => 'chapter1.re',
|
|
135
|
+
'chapter1.re' => "= 日本語UTF-8\n") do |_dir, book, files|
|
|
136
|
+
assert Book::Chapter.new(book, 1, 'chapter1', files['chapter1.re'])
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# UTF-16LE UTF-16BE UTF-32LE UTF-32BE cause error on Windows
|
|
140
|
+
%w[CP932 SHIFT_JIS EUC-JP].each do |enc|
|
|
141
|
+
mktmpbookdir('CHAPS' => 'chapter1.re',
|
|
142
|
+
'chapter1.re' => "= 日本語UTF-8\n".encode(enc)) do |_dir, book, files|
|
|
143
|
+
e = assert_raises(ReVIEW::CompileError) { Book::Chapter.new(book, 1, 'chapter1', files['chapter1.re']) }
|
|
144
|
+
assert_equal 'chapter1: invalid byte sequence in UTF-8', e.message
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
127
149
|
def test_list_index
|
|
128
150
|
do_test_index(<<E, Book::ListIndex, :list_index, :list)
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
//list
|
|
132
|
-
//
|
|
133
|
-
//table
|
|
151
|
+
//listnum[abc][abc-listnum]{
|
|
152
|
+
//}
|
|
153
|
+
//list[def][def-list]{
|
|
154
|
+
//}
|
|
155
|
+
//table[def]{
|
|
156
|
+
//}
|
|
157
|
+
//table[others]{
|
|
158
|
+
//}
|
|
134
159
|
E
|
|
135
160
|
end
|
|
136
161
|
|
|
137
162
|
def test_table_index
|
|
138
163
|
do_test_index(<<E, Book::TableIndex, :table_index, :table)
|
|
139
|
-
//table
|
|
140
|
-
//
|
|
141
|
-
//table
|
|
142
|
-
//
|
|
143
|
-
//list
|
|
164
|
+
//table[abc]{
|
|
165
|
+
//}
|
|
166
|
+
//table[def]{
|
|
167
|
+
//}
|
|
168
|
+
//list[def][def-list]{
|
|
169
|
+
//}
|
|
170
|
+
//list[others][other-list]{
|
|
171
|
+
//}
|
|
144
172
|
E
|
|
145
173
|
end
|
|
146
174
|
|
|
147
175
|
def test_footnote_index
|
|
148
176
|
content = <<E
|
|
149
|
-
//footnote
|
|
150
|
-
//footnote
|
|
151
|
-
//footnote
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
//list
|
|
177
|
+
//footnote[abc][textabc...]
|
|
178
|
+
//footnote[def][textdef...]
|
|
179
|
+
//footnote[xyz][textxyz...]
|
|
180
|
+
//list[def][def-list]{
|
|
181
|
+
//}
|
|
182
|
+
//list[others][others-list]{
|
|
183
|
+
//}
|
|
155
184
|
E
|
|
156
185
|
do_test_index(content, Book::FootnoteIndex, :footnote_index, :footnote) do |ch|
|
|
157
186
|
assert_raises ReVIEW::KeyError do
|
|
158
|
-
ch.footnote('
|
|
187
|
+
ch.footnote('xyz2')
|
|
159
188
|
end
|
|
160
189
|
end
|
|
161
190
|
end
|
|
162
191
|
|
|
163
192
|
def test_bibpaper
|
|
164
193
|
do_test_index(<<E, Book::BibpaperIndex, :bibpaper_index, :bibpaper, filename: 'bib.re')
|
|
165
|
-
//bibpaper
|
|
166
|
-
//bibpaper
|
|
167
|
-
//bibpaper
|
|
168
|
-
//bibpaper [xyz]
|
|
169
|
-
//list [def]
|
|
170
|
-
//list [others]
|
|
194
|
+
//bibpaper[abc][text...]
|
|
195
|
+
//bibpaper[def][text...]
|
|
196
|
+
//bibpaper[xyz][text...]
|
|
171
197
|
E
|
|
172
198
|
assert_raises FileNotFound do
|
|
173
199
|
do_test_index('', Book::BibpaperIndex, :bibpaper_index, :bibpaper, filename: 'bib')
|
|
@@ -176,11 +202,12 @@ E
|
|
|
176
202
|
|
|
177
203
|
def test_headline_index
|
|
178
204
|
do_test_index(<<E, Book::HeadlineIndex, :headline_index, :headline, propagate: false)
|
|
179
|
-
==
|
|
205
|
+
== x
|
|
180
206
|
== abc
|
|
181
207
|
== def
|
|
182
208
|
=== def
|
|
183
|
-
//table
|
|
209
|
+
//table[others]{
|
|
210
|
+
//}
|
|
184
211
|
E
|
|
185
212
|
end
|
|
186
213
|
|
|
@@ -204,35 +231,47 @@ E
|
|
|
204
231
|
|
|
205
232
|
def test_image
|
|
206
233
|
do_test_index(<<E, Book::ImageIndex, :image_index, :image)
|
|
207
|
-
//image
|
|
208
|
-
//
|
|
209
|
-
//image
|
|
210
|
-
//
|
|
211
|
-
//list
|
|
234
|
+
//image[abc][abc-image]{
|
|
235
|
+
//}
|
|
236
|
+
//image[def][abc-image]{
|
|
237
|
+
//}
|
|
238
|
+
//list[def][def-list]{
|
|
239
|
+
//}
|
|
240
|
+
//list[others][others-list]{
|
|
241
|
+
//}
|
|
212
242
|
E
|
|
213
243
|
|
|
214
244
|
do_test_index(<<E, Book::NumberlessImageIndex, :numberless_image_index, :image, propagate: false)
|
|
215
|
-
//numberlessimage
|
|
216
|
-
//
|
|
217
|
-
//numberlessimage
|
|
218
|
-
//
|
|
219
|
-
//list
|
|
245
|
+
//numberlessimage[abc]{
|
|
246
|
+
//}
|
|
247
|
+
//numberlessimage[def]{
|
|
248
|
+
//}
|
|
249
|
+
//list[def][def-list]{
|
|
250
|
+
//}
|
|
251
|
+
//list[others][others-list]{
|
|
252
|
+
//}
|
|
220
253
|
E
|
|
221
254
|
|
|
222
255
|
do_test_index(<<E, Book::ImageIndex, :image_index, :image)
|
|
223
|
-
//
|
|
224
|
-
//
|
|
225
|
-
//image
|
|
226
|
-
//
|
|
227
|
-
//list
|
|
256
|
+
//numberlessimage[abc]{
|
|
257
|
+
//}
|
|
258
|
+
//image[def][def-image]{
|
|
259
|
+
//}
|
|
260
|
+
//list[def][def-list]{
|
|
261
|
+
//}
|
|
262
|
+
//list[others][others-list]{
|
|
263
|
+
//}
|
|
228
264
|
E
|
|
229
265
|
|
|
230
266
|
do_test_index(<<E, Book::NumberlessImageIndex, :numberless_image_index, :image, propagate: false)
|
|
231
|
-
//
|
|
232
|
-
//
|
|
233
|
-
//image
|
|
234
|
-
//
|
|
235
|
-
//list
|
|
267
|
+
//numberlessimage[abc]{
|
|
268
|
+
//}
|
|
269
|
+
//image[def][def-image]{
|
|
270
|
+
//}
|
|
271
|
+
//list[def][def-list]{
|
|
272
|
+
//}
|
|
273
|
+
//list[others][others-list]{
|
|
274
|
+
//}
|
|
236
275
|
E
|
|
237
276
|
end
|
|
238
277
|
|
|
@@ -240,13 +279,15 @@ E
|
|
|
240
279
|
Dir.mktmpdir do |dir|
|
|
241
280
|
path = File.join(dir, opts[:filename] || 'chapter.re')
|
|
242
281
|
|
|
243
|
-
book = Book::Base.new(dir)
|
|
244
|
-
|
|
245
282
|
File.open(path, 'w') do |o|
|
|
246
283
|
o.print content
|
|
247
284
|
end
|
|
248
|
-
ch = Book::Chapter.new(book, 1, 'chapter', path)
|
|
249
285
|
|
|
286
|
+
book = Book::Base.new(dir)
|
|
287
|
+
|
|
288
|
+
ch = Book::Chapter.new(book, 1, 'chapter', path)
|
|
289
|
+
book.generate_indexes
|
|
290
|
+
ch.generate_indexes
|
|
250
291
|
assert ch.__send__(ref_method, 'abc')
|
|
251
292
|
assert ch.__send__(ref_method, 'def')
|
|
252
293
|
assert_raises ReVIEW::KeyError do
|
data/test/test_builder.rb
CHANGED
|
@@ -24,7 +24,7 @@ class BuidlerTest < Test::Unit::TestCase
|
|
|
24
24
|
|
|
25
25
|
def test_bind
|
|
26
26
|
b = Builder.new
|
|
27
|
-
chap = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.
|
|
27
|
+
chap = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.new, nil, '-', nil)
|
|
28
28
|
assert_nothing_raised do
|
|
29
29
|
b.bind(nil, chap, nil)
|
|
30
30
|
end
|
|
@@ -37,7 +37,7 @@ class BuidlerTest < Test::Unit::TestCase
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
b = Builder.new
|
|
40
|
-
chapter = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.
|
|
40
|
+
chapter = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.new, nil, '-', nil)
|
|
41
41
|
b.bind(nil, chapter, nil)
|
|
42
42
|
assert_equal '', b.result
|
|
43
43
|
end
|
|
@@ -82,7 +82,7 @@ class BuidlerTest < Test::Unit::TestCase
|
|
|
82
82
|
|
|
83
83
|
def test_inline_missing_ref
|
|
84
84
|
b = Builder.new
|
|
85
|
-
chapter = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.
|
|
85
|
+
chapter = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.new, 1, 'chap1', nil, StringIO.new)
|
|
86
86
|
b.bind(nil, chapter, nil)
|
|
87
87
|
e = assert_raises(ReVIEW::ApplicationError) { b.inline_list('unknown|list1') }
|
|
88
88
|
assert_equal ': error: unknown list: unknown|list1', e.message
|
|
@@ -96,20 +96,29 @@ class BuidlerTest < Test::Unit::TestCase
|
|
|
96
96
|
assert_equal ': error: unknown footnote: unknown|footnote1', e.message
|
|
97
97
|
end
|
|
98
98
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
99
|
+
def test_nest_error
|
|
100
|
+
b = XBuilder.new
|
|
101
|
+
b.children = nil
|
|
102
|
+
assert_equal '', b.solve_nest('')
|
|
103
|
+
b.children = ['dl']
|
|
104
|
+
e = assert_raises(ReVIEW::ApplicationError) { b.solve_nest('') }
|
|
105
|
+
assert_equal ': error: //beginchild of dl misses //endchild', e.message
|
|
106
|
+
b.children = ['ul', 'dl', 'ol']
|
|
107
|
+
e = assert_raises(ReVIEW::ApplicationError) { b.solve_nest('') }
|
|
108
|
+
assert_equal ': error: //beginchild of ol,dl,ul misses //endchild', e.message
|
|
109
|
+
|
|
110
|
+
assert_equal "\u0001→/ol←\u0001", b.endchild
|
|
111
|
+
assert_equal "\u0001→/dl←\u0001", b.endchild
|
|
112
|
+
assert_equal "\u0001→/ul←\u0001", b.endchild
|
|
113
|
+
e = assert_raises(ReVIEW::ApplicationError) { b.endchild }
|
|
114
|
+
assert_equal ": error: //endchild is shown, but any opened //beginchild doesn't exist", e.message
|
|
115
|
+
end
|
|
108
116
|
|
|
109
|
-
|
|
110
|
-
|
|
117
|
+
class XBuilder < Builder
|
|
118
|
+
attr_accessor :children
|
|
111
119
|
|
|
112
|
-
def
|
|
120
|
+
def puts(s)
|
|
121
|
+
s
|
|
113
122
|
end
|
|
114
123
|
end
|
|
115
124
|
end
|
data/test/test_converter.rb
CHANGED
data/test/test_epub3maker.rb
CHANGED
|
@@ -631,7 +631,7 @@ EOT
|
|
|
631
631
|
</body>
|
|
632
632
|
</html>
|
|
633
633
|
EOT
|
|
634
|
-
File.
|
|
634
|
+
File.write(path, html)
|
|
635
635
|
assert_equal ['mathml'], epubmaker.detect_properties(path)
|
|
636
636
|
end
|
|
637
637
|
end
|
|
@@ -656,7 +656,7 @@ EOT
|
|
|
656
656
|
</body>
|
|
657
657
|
</html>
|
|
658
658
|
EOT
|
|
659
|
-
File.
|
|
659
|
+
File.write(path, html)
|
|
660
660
|
assert_equal ['mathml'], epubmaker.detect_properties(path)
|
|
661
661
|
end
|
|
662
662
|
end
|
data/test/test_epubmaker.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'test_helper'
|
|
2
2
|
require 'epubmaker'
|
|
3
|
+
require 'review/epubmaker'
|
|
3
4
|
|
|
4
5
|
class EPUBMakerTest < Test::Unit::TestCase
|
|
5
6
|
include EPUBMaker
|
|
@@ -818,4 +819,11 @@ EOT
|
|
|
818
819
|
EOT
|
|
819
820
|
assert_equal expect, @output.string
|
|
820
821
|
end
|
|
822
|
+
|
|
823
|
+
def test_epub_unsafe_id
|
|
824
|
+
content = Content.new({ 'file' => 'sample.png' })
|
|
825
|
+
assert_equal 'sample-png', content.id
|
|
826
|
+
content = Content.new({ 'file' => 'sample-&()-=+@:,漢字.png' })
|
|
827
|
+
assert_equal 'sample-_25_26_25_28_25_29-_25_3D_25_2B_25_40_25_3A_25_2C_25_E6_25_BC_25_A2_25_E5_25_AD_25_97-png', content.id
|
|
828
|
+
end
|
|
821
829
|
end
|
data/test/test_helper.rb
CHANGED
|
@@ -16,7 +16,7 @@ def prepare_samplebook(srcdir, bookdir, latextemplatedir, configfile)
|
|
|
16
16
|
samplebook_dir = File.expand_path("../samples/#{bookdir}/", File.dirname(__FILE__))
|
|
17
17
|
files = Dir.glob(File.join(samplebook_dir, '*'))
|
|
18
18
|
# ignore temporary built files
|
|
19
|
-
files.delete_if { |file| file =~
|
|
19
|
+
files.delete_if { |file| file =~ /.*-(pdf|epub|text)/ || file == 'webroot' }
|
|
20
20
|
FileUtils.cp_r(files, srcdir)
|
|
21
21
|
if latextemplatedir
|
|
22
22
|
# copy from review-jsbook or review-jlreq
|
|
@@ -39,11 +39,13 @@ end
|
|
|
39
39
|
|
|
40
40
|
def compile_block_default(text)
|
|
41
41
|
@chapter.content = text
|
|
42
|
+
@chapter.execute_indexer(force: true)
|
|
42
43
|
@compiler.compile(@chapter)
|
|
43
44
|
end
|
|
44
45
|
|
|
45
46
|
def compile_block_html(text)
|
|
46
47
|
@chapter.content = text
|
|
48
|
+
@chapter.execute_indexer(force: true)
|
|
47
49
|
matched = @compiler.compile(@chapter).match(Regexp.new(%Q(<body>\n(.+)</body>), Regexp::MULTILINE))
|
|
48
50
|
if matched && matched.size > 1
|
|
49
51
|
matched[1]
|
|
@@ -54,5 +56,6 @@ end
|
|
|
54
56
|
|
|
55
57
|
def compile_block_idgxml(text)
|
|
56
58
|
@chapter.content = text
|
|
59
|
+
@chapter.execute_indexer(force: true)
|
|
57
60
|
@compiler.compile(@chapter).gsub(Regexp.new(%Q(.*<doc xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/">), Regexp::MULTILINE), '').gsub("</doc>\n", '')
|
|
58
61
|
end
|
data/test/test_htmlbuilder.rb
CHANGED
|
@@ -61,7 +61,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
|
|
|
61
61
|
Dir.mktmpdir do |dir|
|
|
62
62
|
Dir.chdir(dir) do
|
|
63
63
|
file = File.join(dir, 'locale.yml')
|
|
64
|
-
File.
|
|
64
|
+
File.write(file, "locale: ja\nappendix: 付録%pR")
|
|
65
65
|
I18n.setup('ja')
|
|
66
66
|
@chapter.instance_eval do
|
|
67
67
|
def on_appendix?
|
|
@@ -82,7 +82,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
|
|
|
82
82
|
Dir.mktmpdir do |dir|
|
|
83
83
|
Dir.chdir(dir) do
|
|
84
84
|
file = File.join(dir, 'locale.yml')
|
|
85
|
-
File.
|
|
85
|
+
File.write(file, "locale: ja\nappendix: 付録%pA")
|
|
86
86
|
I18n.setup('ja')
|
|
87
87
|
@chapter.instance_eval do
|
|
88
88
|
def on_appendix?
|
|
@@ -106,8 +106,8 @@ class HTMLBuidlerTest < Test::Unit::TestCase
|
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
def test_headline_level1_with_tricky_id
|
|
109
|
-
actual = compile_block("={123
|
|
110
|
-
assert_equal %Q(<h1 id="
|
|
109
|
+
actual = compile_block("={123あ_} this is test.\n")
|
|
110
|
+
assert_equal %Q(<h1 id="id_123_E3_81_82__"><a id="h1"></a><span class="secno">第1章 </span>this is test.</h1>\n), actual
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
def test_headline_level1_with_inlinetag
|
|
@@ -137,8 +137,8 @@ class HTMLBuidlerTest < Test::Unit::TestCase
|
|
|
137
137
|
end
|
|
138
138
|
|
|
139
139
|
def test_label_with_tricky_id
|
|
140
|
-
actual = compile_block("//label[123
|
|
141
|
-
assert_equal %Q(<a id="
|
|
140
|
+
actual = compile_block("//label[123あ_]\n")
|
|
141
|
+
assert_equal %Q(<a id="id_123_E3_81_82__"></a>\n), actual
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
def test_href
|
|
@@ -250,6 +250,15 @@ EOS
|
|
|
250
250
|
idx
|
|
251
251
|
end
|
|
252
252
|
|
|
253
|
+
@config['secnolevel'] = 2
|
|
254
|
+
actual = compile_inline('test @<hd>{chap1|test} test2')
|
|
255
|
+
assert_equal 'test <a href="-.html#h1-1-1">「te_st」</a> test2', actual
|
|
256
|
+
|
|
257
|
+
@config['secnolevel'] = 3
|
|
258
|
+
actual = compile_inline('test @<hd>{chap1|test} test2')
|
|
259
|
+
assert_equal 'test <a href="-.html#h1-1-1">「1.1.1 te_st」</a> test2', actual
|
|
260
|
+
|
|
261
|
+
@config['chapterlink'] = nil
|
|
253
262
|
@config['secnolevel'] = 2
|
|
254
263
|
actual = compile_inline('test @<hd>{chap1|test} test2')
|
|
255
264
|
assert_equal 'test 「te_st」 test2', actual
|
|
@@ -263,7 +272,7 @@ EOS
|
|
|
263
272
|
Dir.mktmpdir do |dir|
|
|
264
273
|
Dir.chdir(dir) do
|
|
265
274
|
file = File.join(dir, 'locale.yml')
|
|
266
|
-
File.
|
|
275
|
+
File.write(file, "locale: ja\nappendix: 付録%pR")
|
|
267
276
|
I18n.setup('ja')
|
|
268
277
|
@chapter.instance_eval do
|
|
269
278
|
def on_appendix?
|
|
@@ -278,6 +287,10 @@ EOS
|
|
|
278
287
|
idx
|
|
279
288
|
end
|
|
280
289
|
|
|
290
|
+
actual = compile_inline('test @<hd>{test} test2')
|
|
291
|
+
assert_equal 'test <a href="-.html#hI-1">「I.1 te_st」</a> test2', actual
|
|
292
|
+
|
|
293
|
+
@config['chapterlink'] = nil
|
|
281
294
|
actual = compile_inline('test @<hd>{test} test2')
|
|
282
295
|
assert_equal 'test 「I.1 te_st」 test2', actual
|
|
283
296
|
end
|
|
@@ -288,7 +301,7 @@ EOS
|
|
|
288
301
|
Dir.mktmpdir do |dir|
|
|
289
302
|
Dir.chdir(dir) do
|
|
290
303
|
file = File.join(dir, 'locale.yml')
|
|
291
|
-
File.
|
|
304
|
+
File.write(file, "locale: ja\nappendix: 付録%pA")
|
|
292
305
|
I18n.setup('ja')
|
|
293
306
|
@chapter.instance_eval do
|
|
294
307
|
def on_appendix?
|
|
@@ -303,6 +316,10 @@ EOS
|
|
|
303
316
|
idx
|
|
304
317
|
end
|
|
305
318
|
|
|
319
|
+
actual = compile_inline('test @<hd>{test} test2')
|
|
320
|
+
assert_equal 'test <a href="-.html#hA-1">「A.1 te_st」</a> test2', actual
|
|
321
|
+
|
|
322
|
+
@config['chapterlink'] = nil
|
|
306
323
|
actual = compile_inline('test @<hd>{test} test2')
|
|
307
324
|
assert_equal 'test 「A.1 te_st」 test2', actual
|
|
308
325
|
end
|
|
@@ -354,6 +371,11 @@ EOS
|
|
|
354
371
|
item
|
|
355
372
|
end
|
|
356
373
|
|
|
374
|
+
actual = compile_block("@<img>{sampleimg}\n")
|
|
375
|
+
expected = %Q(<p><span class="imgref"><a href="./-.html#sampleimg">図1.1</a></span></p>\n)
|
|
376
|
+
assert_equal expected, actual
|
|
377
|
+
|
|
378
|
+
@config['chapterlink'] = nil
|
|
357
379
|
actual = compile_block("@<img>{sampleimg}\n")
|
|
358
380
|
expected = %Q(<p><span class="imgref">図1.1</span></p>\n)
|
|
359
381
|
assert_equal expected, actual
|
|
@@ -366,6 +388,11 @@ EOS
|
|
|
366
388
|
item
|
|
367
389
|
end
|
|
368
390
|
|
|
391
|
+
actual = compile_block("@<imgref>{sampleimg}\n")
|
|
392
|
+
expected = %Q(<p><span class="imgref"><a href="./-.html#sampleimg">図1.1</a></span>「sample photo」</p>\n)
|
|
393
|
+
assert_equal expected, actual
|
|
394
|
+
|
|
395
|
+
@config['chapterlink'] = nil
|
|
369
396
|
actual = compile_block("@<imgref>{sampleimg}\n")
|
|
370
397
|
expected = %Q(<p><span class="imgref">図1.1</span>「sample photo」</p>\n)
|
|
371
398
|
assert_equal expected, actual
|
|
@@ -378,6 +405,11 @@ EOS
|
|
|
378
405
|
item
|
|
379
406
|
end
|
|
380
407
|
|
|
408
|
+
actual = compile_block("@<imgref>{sampleimg}\n")
|
|
409
|
+
expected = %Q(<p><span class="imgref"><a href="./-.html#sampleimg">図1.1</a></span></p>\n)
|
|
410
|
+
assert_equal expected, actual
|
|
411
|
+
|
|
412
|
+
@config['chapterlink'] = nil
|
|
381
413
|
actual = compile_block("@<imgref>{sampleimg}\n")
|
|
382
414
|
expected = %Q(<p><span class="imgref">図1.1</span></p>\n)
|
|
383
415
|
assert_equal expected, actual
|
|
@@ -389,20 +421,24 @@ EOS
|
|
|
389
421
|
file1 = File.join(dir, 'images', 'img1.png')
|
|
390
422
|
filet1 = File.join(dir, 'images', 'tbl1.png')
|
|
391
423
|
file2 = File.join(dir, 'images', 'img2.png')
|
|
424
|
+
file3 = File.join(dir, 'images', 'icon3.png')
|
|
392
425
|
re1 = File.join(dir, 'sample1.re')
|
|
393
426
|
cat = File.join(dir, 'catalog.yml')
|
|
394
427
|
FileUtils.mkdir_p(File.join(dir, 'images'))
|
|
395
|
-
File.
|
|
396
|
-
File.
|
|
397
|
-
File.
|
|
398
|
-
File.
|
|
399
|
-
File.
|
|
428
|
+
File.write(file1, '')
|
|
429
|
+
File.write(filet1, '')
|
|
430
|
+
File.write(file2, '')
|
|
431
|
+
File.write(file3, '')
|
|
432
|
+
File.write(cat, "CHAPS:\n - sample1.re\n")
|
|
433
|
+
File.write(re1, <<-EOF)
|
|
400
434
|
= test
|
|
401
435
|
|
|
402
436
|
tbl1 is @<table>{tbl1}.
|
|
403
437
|
|
|
404
438
|
img2 is @<img>{img2}.
|
|
405
439
|
|
|
440
|
+
icon3 is @<icon>{icon3}.
|
|
441
|
+
|
|
406
442
|
//image[img1][image 1]{
|
|
407
443
|
//}
|
|
408
444
|
|
|
@@ -417,8 +453,37 @@ EOF
|
|
|
417
453
|
|
|
418
454
|
expected = <<-EOS
|
|
419
455
|
<h1><a id="h1"></a><span class="secno">第1章 </span>test</h1>
|
|
456
|
+
<p>tbl1 is <span class="tableref"><a href="./-.html#tbl1">表1.1</a></span>.</p>
|
|
457
|
+
<p>img2 is <span class="imgref"><a href="./-.html#img2">図1.2</a></span>.</p>
|
|
458
|
+
<p>icon3 is <img src="images/icon3.png" alt="[icon3]" />.</p>
|
|
459
|
+
<div id="img1" class="image">
|
|
460
|
+
<img src="images/img1.png" alt="image 1" />
|
|
461
|
+
<p class="caption">
|
|
462
|
+
図1.1: image 1
|
|
463
|
+
</p>
|
|
464
|
+
</div>
|
|
465
|
+
<div id="tbl1" class="imgtable image">
|
|
466
|
+
<p class="caption">表1.1: table 1</p>
|
|
467
|
+
<img src="images/tbl1.png" alt="table 1" />
|
|
468
|
+
</div>
|
|
469
|
+
<div id="img2" class="image">
|
|
470
|
+
<img src="images/img2.png" alt="image 2" />
|
|
471
|
+
<p class="caption">
|
|
472
|
+
図1.2: image 2
|
|
473
|
+
</p>
|
|
474
|
+
</div>
|
|
475
|
+
EOS
|
|
476
|
+
|
|
477
|
+
assert_equal expected, actual
|
|
478
|
+
|
|
479
|
+
@config['chapterlink'] = nil
|
|
480
|
+
actual = compile_block(content)
|
|
481
|
+
|
|
482
|
+
expected = <<-EOS
|
|
483
|
+
<h1><a id="h1"></a><span class="secno">第1章 </span>test</h1>
|
|
420
484
|
<p>tbl1 is <span class="tableref">表1.1</span>.</p>
|
|
421
485
|
<p>img2 is <span class="imgref">図1.2</span>.</p>
|
|
486
|
+
<p>icon3 is <img src="images/icon3.png" alt="[icon3]" />.</p>
|
|
422
487
|
<div id="img1" class="image">
|
|
423
488
|
<img src="images/img1.png" alt="image 1" />
|
|
424
489
|
<p class="caption">
|
|
@@ -600,21 +665,22 @@ EOS
|
|
|
600
665
|
assert_equal expected, actual
|
|
601
666
|
end
|
|
602
667
|
|
|
603
|
-
def
|
|
668
|
+
def test_image_with_tricky_id_kana
|
|
604
669
|
def @chapter.image(_id)
|
|
605
|
-
item = Book::Index::Item.new('123
|
|
606
|
-
item.instance_eval { @path = './images/
|
|
670
|
+
item = Book::Index::Item.new('123あいう', 1)
|
|
671
|
+
item.instance_eval { @path = './images/123あいう.png' }
|
|
607
672
|
item
|
|
608
673
|
end
|
|
609
|
-
|
|
610
|
-
actual = compile_block("//image[123
|
|
674
|
+
@chapter.instance_eval { @name = 'ch01' }
|
|
675
|
+
actual = compile_block("//image[123あいう][sample photo]{\n//}\nimg: @<img>{123あいう}\n")
|
|
611
676
|
expected = <<-EOS
|
|
612
|
-
<div id="
|
|
613
|
-
<img src="images/
|
|
677
|
+
<div id="id_123_E3_81_82_E3_81_84_E3_81_86" class="image">
|
|
678
|
+
<img src="images/123あいう.png" alt="sample photo" />
|
|
614
679
|
<p class="caption">
|
|
615
680
|
図1.1: sample photo
|
|
616
681
|
</p>
|
|
617
682
|
</div>
|
|
683
|
+
<p>img: <span class="imgref"><a href="./ch01.html#id_123_E3_81_82_E3_81_84_E3_81_86">図1.1</a></span></p>
|
|
618
684
|
EOS
|
|
619
685
|
assert_equal expected, actual
|
|
620
686
|
end
|
|
@@ -803,11 +869,10 @@ EOS
|
|
|
803
869
|
end
|
|
804
870
|
|
|
805
871
|
def test_dt_inline
|
|
806
|
-
|
|
807
|
-
@chapter.instance_eval { @footnote_index = fn }
|
|
808
|
-
actual = compile_block(" : foo@<fn>{bar}[]<>&@<m>$\\alpha[]$\n")
|
|
872
|
+
actual = compile_block("//footnote[bar][bar]\n\n : foo@<fn>{bar}[]<>&@<m>$\\alpha[]$\n")
|
|
809
873
|
|
|
810
874
|
expected = <<-EOS
|
|
875
|
+
<div class="footnote" epub:type="footnote" id="fn-bar"><p class="footnote">[*1] bar</p></div>
|
|
811
876
|
<dl>
|
|
812
877
|
<dt>foo<a id="fnb-bar" href="#fn-bar" class="noteref" epub:type="noteref">*1</a>[]<>&<span class="equation">\\alpha[]</span></dt>
|
|
813
878
|
<dd></dd>
|
|
@@ -852,22 +917,28 @@ EOS
|
|
|
852
917
|
def @chapter.list(_id)
|
|
853
918
|
Book::Index::Item.new('samplelist', 1)
|
|
854
919
|
end
|
|
855
|
-
actual = compile_block("@<list>{
|
|
920
|
+
actual = compile_block("@<list>{samplelist}\n")
|
|
921
|
+
assert_equal %Q(<p><span class="listref"><a href="./-.html#samplelist">リスト1.1</a></span></p>\n), actual
|
|
922
|
+
|
|
923
|
+
@config['chapterlink'] = nil
|
|
924
|
+
actual = compile_block("@<list>{samplelist}\n")
|
|
856
925
|
assert_equal %Q(<p><span class="listref">リスト1.1</span></p>\n), actual
|
|
857
926
|
end
|
|
858
927
|
|
|
859
928
|
def test_inline_list_href
|
|
860
|
-
book = ReVIEW::Book::Base.
|
|
929
|
+
book = ReVIEW::Book::Base.new
|
|
861
930
|
book.config['chapterlink'] = true
|
|
862
931
|
book.catalog = ReVIEW::Catalog.new('CHAPS' => %w[ch1.re ch2.re])
|
|
863
|
-
io1 = StringIO.new("//list[sampletest]{\nfoo\n//}\n")
|
|
932
|
+
io1 = StringIO.new("//list[sampletest][a]{\nfoo\n//}\n")
|
|
864
933
|
io2 = StringIO.new("= BAR\n")
|
|
865
934
|
chap1 = ReVIEW::Book::Chapter.new(book, 1, 'ch1', 'ch1.re', io1)
|
|
866
935
|
chap2 = ReVIEW::Book::Chapter.new(book, 2, 'ch2', 'ch2.re', io2)
|
|
867
|
-
book.parts = [ReVIEW::Book::Part.new(
|
|
936
|
+
book.parts = [ReVIEW::Book::Part.new(book, nil, [chap1, chap2])]
|
|
868
937
|
builder = ReVIEW::HTMLBuilder.new
|
|
869
938
|
comp = ReVIEW::Compiler.new(builder)
|
|
870
939
|
builder.bind(comp, chap2, nil)
|
|
940
|
+
|
|
941
|
+
chap1.generate_indexes
|
|
871
942
|
actual = builder.inline_list('ch1|sampletest')
|
|
872
943
|
assert_equal %Q(<span class="listref"><a href="./ch1.html#sampletest">リスト1.1</a></span>), actual
|
|
873
944
|
end
|
|
@@ -1771,6 +1842,20 @@ EOS
|
|
|
1771
1842
|
<p>inside column</p>
|
|
1772
1843
|
</div>
|
|
1773
1844
|
|
|
1845
|
+
<h3><a id="h1-0-1"></a>next level</h3>
|
|
1846
|
+
<p>this is <a href="-.html#column-1" class="columnref">コラム「test」</a>.</p>
|
|
1847
|
+
EOS
|
|
1848
|
+
|
|
1849
|
+
assert_equal expected, column_helper(review)
|
|
1850
|
+
|
|
1851
|
+
@config['chapterlink'] = nil
|
|
1852
|
+
expected = <<-EOS
|
|
1853
|
+
<div class="column">
|
|
1854
|
+
|
|
1855
|
+
<h3 id="foo"><a id="column-1"></a>test</h3>
|
|
1856
|
+
<p>inside column</p>
|
|
1857
|
+
</div>
|
|
1858
|
+
|
|
1774
1859
|
<h3><a id="h1-0-1"></a>next level</h3>
|
|
1775
1860
|
<p>this is コラム「test」.</p>
|
|
1776
1861
|
EOS
|
|
@@ -1786,6 +1871,11 @@ EOS
|
|
|
1786
1871
|
idx
|
|
1787
1872
|
end
|
|
1788
1873
|
|
|
1874
|
+
actual = compile_inline('test @<column>{chap1|column} test2')
|
|
1875
|
+
expected = 'test <a href="-.html#column-1" class="columnref">コラム「column_cap」</a> test2'
|
|
1876
|
+
assert_equal expected, actual
|
|
1877
|
+
|
|
1878
|
+
@config['chapterlink'] = nil
|
|
1789
1879
|
actual = compile_inline('test @<column>{chap1|column} test2')
|
|
1790
1880
|
expected = 'test コラム「column_cap」 test2'
|
|
1791
1881
|
assert_equal expected, actual
|
|
@@ -2083,8 +2173,6 @@ EOS
|
|
|
2083
2173
|
end
|
|
2084
2174
|
|
|
2085
2175
|
def test_footnote
|
|
2086
|
-
fn = Book::FootnoteIndex.parse(['//footnote[foo][bar\\a\\$buz]'])
|
|
2087
|
-
@chapter.instance_eval { @footnote_index = fn }
|
|
2088
2176
|
actual = compile_block("//footnote[foo][bar\\a\\$buz]\n")
|
|
2089
2177
|
expected = <<-'EOS'
|
|
2090
2178
|
<div class="footnote" epub:type="footnote" id="fn-foo"><p class="footnote">[*1] bar\a\$buz</p></div>
|
|
@@ -2109,58 +2197,69 @@ EOS
|
|
|
2109
2197
|
end
|
|
2110
2198
|
|
|
2111
2199
|
def test_footnote_with_tricky_id
|
|
2112
|
-
|
|
2113
|
-
@chapter.instance_eval { @footnote_index = fn }
|
|
2114
|
-
actual = compile_block("//footnote[123 あ_;][bar\\a\\$buz]\n")
|
|
2200
|
+
actual = compile_block("//footnote[123あ_;][bar\\a\\$buz]\n")
|
|
2115
2201
|
expected = <<-'EOS'
|
|
2116
|
-
<div class="footnote" epub:type="footnote" id="fn-
|
|
2202
|
+
<div class="footnote" epub:type="footnote" id="fn-id_123_E3_81_82___3B"><p class="footnote">[*1] bar\a\$buz</p></div>
|
|
2117
2203
|
EOS
|
|
2118
2204
|
assert_equal expected, actual
|
|
2119
2205
|
end
|
|
2120
2206
|
|
|
2121
2207
|
def test_inline_fn
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
comp = ReVIEW::Compiler.new(builder)
|
|
2129
|
-
builder.bind(comp, chap1, nil)
|
|
2130
|
-
fn = builder.inline_fn('foo')
|
|
2131
|
-
assert_equal '<a id="fnb-foo" href="#fn-foo" class="noteref" epub:type="noteref">*1</a>', fn
|
|
2208
|
+
fn = compile_block("//footnote[foo][bar]\n\n@<fn>{foo}\n")
|
|
2209
|
+
expected = <<-EOS
|
|
2210
|
+
<div class=\"footnote\" epub:type=\"footnote\" id=\"fn-foo\"><p class=\"footnote\">[*1] bar</p></div>
|
|
2211
|
+
<p><a id="fnb-foo" href="#fn-foo" class="noteref" epub:type="noteref">*1</a></p>
|
|
2212
|
+
EOS
|
|
2213
|
+
assert_equal expected, fn
|
|
2132
2214
|
I18n.set('html_footnote_refmark', '+%s')
|
|
2133
|
-
fn =
|
|
2134
|
-
|
|
2215
|
+
fn = compile_block("//footnote[foo][bar]\n\n@<fn>{foo}\n")
|
|
2216
|
+
expected = <<-EOS
|
|
2217
|
+
<div class=\"footnote\" epub:type=\"footnote\" id=\"fn-foo\"><p class=\"footnote\">[*1] bar</p></div>
|
|
2218
|
+
<p><a id="fnb-foo" href="#fn-foo" class="noteref" epub:type="noteref">+1</a></p>
|
|
2219
|
+
EOS
|
|
2220
|
+
assert_equal expected, fn
|
|
2135
2221
|
end
|
|
2136
2222
|
|
|
2137
2223
|
def test_inline_hd
|
|
2138
|
-
book = ReVIEW::Book::Base.
|
|
2224
|
+
book = ReVIEW::Book::Base.new
|
|
2139
2225
|
book.catalog = ReVIEW::Catalog.new('CHAPS' => %w[ch1.re ch2.re])
|
|
2140
2226
|
io1 = StringIO.new("= test1\n\nfoo\n\n== test1-1\n\nbar\n\n== test1-2\n\nbar\n\n")
|
|
2141
2227
|
io2 = StringIO.new("= test2\n\nfoo\n\n== test2-1\n\nbar\n\n== test2-2\n\nbar\n\n")
|
|
2142
2228
|
chap1 = ReVIEW::Book::Chapter.new(book, 1, 'ch1', 'ch1.re', io1)
|
|
2143
2229
|
chap2 = ReVIEW::Book::Chapter.new(book, 2, 'ch2', 'ch2.re', io2)
|
|
2144
|
-
book.parts = [ReVIEW::Book::Part.new(
|
|
2230
|
+
book.parts = [ReVIEW::Book::Part.new(book, nil, [chap1, chap2])]
|
|
2145
2231
|
builder = ReVIEW::HTMLBuilder.new
|
|
2146
2232
|
comp = ReVIEW::Compiler.new(builder)
|
|
2147
2233
|
builder.bind(comp, chap2, nil)
|
|
2234
|
+
|
|
2235
|
+
chap1.generate_indexes
|
|
2236
|
+
chap2.generate_indexes
|
|
2237
|
+
hd = builder.inline_hd('ch1|test1-1')
|
|
2238
|
+
assert_equal '<a href="ch1.html#h1-1">「1.1 test1-1」</a>', hd
|
|
2239
|
+
|
|
2240
|
+
builder.instance_eval { @book.config['chapterlink'] = nil }
|
|
2148
2241
|
hd = builder.inline_hd('ch1|test1-1')
|
|
2149
2242
|
assert_equal '「1.1 test1-1」', hd
|
|
2150
2243
|
end
|
|
2151
2244
|
|
|
2152
2245
|
def test_inline_hd_for_part
|
|
2153
|
-
book = ReVIEW::Book::Base.
|
|
2246
|
+
book = ReVIEW::Book::Base.new
|
|
2154
2247
|
book.catalog = ReVIEW::Catalog.new('CHAPS' => %w[ch1.re ch2.re])
|
|
2155
2248
|
io1 = StringIO.new("= test1\n\nfoo\n\n== test1-1\n\nbar\n\n== test1-2\n\nbar\n\n")
|
|
2156
2249
|
io2 = StringIO.new("= test2\n\nfoo\n\n== test2-1\n\nbar\n\n== test2-2\n\nbar\n\n")
|
|
2157
2250
|
io_p1 = StringIO.new("= part1\n\nfoo\n\n== part1-1\n\nbar\n\n== part1-2\n\nbar\n\n")
|
|
2158
2251
|
chap1 = ReVIEW::Book::Chapter.new(book, 1, 'ch1', 'ch1.re', io1)
|
|
2159
2252
|
chap2 = ReVIEW::Book::Chapter.new(book, 2, 'ch2', 'ch2.re', io2)
|
|
2160
|
-
book.parts = [ReVIEW::Book::Part.new(
|
|
2253
|
+
book.parts = [ReVIEW::Book::Part.new(book, 1, [chap1, chap2], 'part1.re', io_p1)]
|
|
2161
2254
|
builder = ReVIEW::HTMLBuilder.new
|
|
2162
2255
|
comp = ReVIEW::Compiler.new(builder)
|
|
2163
2256
|
builder.bind(comp, chap2, nil)
|
|
2257
|
+
book.generate_indexes
|
|
2258
|
+
|
|
2259
|
+
hd = builder.inline_hd('part1|part1-1')
|
|
2260
|
+
assert_equal '<a href="part1.html#h1-1">「1.1 part1-1」</a>', hd
|
|
2261
|
+
|
|
2262
|
+
builder.instance_eval { @book.config['chapterlink'] = nil }
|
|
2164
2263
|
hd = builder.inline_hd('part1|part1-1')
|
|
2165
2264
|
assert_equal '「1.1 part1-1」', hd
|
|
2166
2265
|
end
|
|
@@ -2171,7 +2270,12 @@ EOS
|
|
|
2171
2270
|
location = Location.new(nil, nil)
|
|
2172
2271
|
@builder.bind(@compiler, chap1, location)
|
|
2173
2272
|
hd = @builder.inline_hd('foo')
|
|
2273
|
+
assert_equal '<a href="-.html#h1-1">「1.1 foo」</a>', hd
|
|
2274
|
+
|
|
2275
|
+
@config['chapterlink'] = nil
|
|
2276
|
+
hd = @builder.inline_hd('foo')
|
|
2174
2277
|
assert_equal '「1.1 foo」', hd
|
|
2278
|
+
|
|
2175
2279
|
hd = @builder.inline_hd('bar')
|
|
2176
2280
|
assert_equal '「1.2 bar」', hd
|
|
2177
2281
|
end
|
|
@@ -2215,10 +2319,10 @@ EOS
|
|
|
2215
2319
|
end
|
|
2216
2320
|
|
|
2217
2321
|
def test_empty_table
|
|
2218
|
-
e = assert_raises(ReVIEW::ApplicationError) { compile_block
|
|
2322
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block("//table{\n//}\n") }
|
|
2219
2323
|
assert_equal ':2: error: no rows in the table', e.message
|
|
2220
2324
|
|
|
2221
|
-
e = assert_raises(ReVIEW::ApplicationError) { compile_block
|
|
2325
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block("//table{\n------------\n//}\n") }
|
|
2222
2326
|
assert_equal ':3: error: no rows in the table', e.message
|
|
2223
2327
|
end
|
|
2224
2328
|
|
|
@@ -2227,6 +2331,10 @@ EOS
|
|
|
2227
2331
|
Book::Index::Item.new('sampletable', 1)
|
|
2228
2332
|
end
|
|
2229
2333
|
actual = compile_block("@<table>{sampletest}\n")
|
|
2334
|
+
assert_equal %Q(<p><span class="tableref"><a href="./-.html#sampletest">表1.1</a></span></p>\n), actual
|
|
2335
|
+
|
|
2336
|
+
@config['chapterlink'] = nil
|
|
2337
|
+
actual = compile_block("@<table>{sampletest}\n")
|
|
2230
2338
|
assert_equal %Q(<p><span class="tableref">表1.1</span></p>\n), actual
|
|
2231
2339
|
end
|
|
2232
2340
|
|
|
@@ -2452,6 +2560,163 @@ EOS
|
|
|
2452
2560
|
assert_equal expected, actual
|
|
2453
2561
|
end
|
|
2454
2562
|
|
|
2563
|
+
def test_minicolumn_blocks
|
|
2564
|
+
%w[note memo tip info warning important caution notice].each do |type|
|
|
2565
|
+
src = <<-EOS
|
|
2566
|
+
//#{type}[#{type}1]{
|
|
2567
|
+
|
|
2568
|
+
//}
|
|
2569
|
+
|
|
2570
|
+
//#{type}[#{type}2]{
|
|
2571
|
+
//}
|
|
2572
|
+
EOS
|
|
2573
|
+
|
|
2574
|
+
expected = <<-EOS
|
|
2575
|
+
<div class="#{type}">
|
|
2576
|
+
<p class="caption">#{type}1</p>
|
|
2577
|
+
</div>
|
|
2578
|
+
<div class="#{type}">
|
|
2579
|
+
<p class="caption">#{type}2</p>
|
|
2580
|
+
</div>
|
|
2581
|
+
EOS
|
|
2582
|
+
assert_equal expected, compile_block(src)
|
|
2583
|
+
|
|
2584
|
+
src = <<-EOS
|
|
2585
|
+
//#{type}[#{type}2]{
|
|
2586
|
+
|
|
2587
|
+
//}
|
|
2588
|
+
|
|
2589
|
+
//#{type}[#{type}3]{
|
|
2590
|
+
|
|
2591
|
+
//}
|
|
2592
|
+
|
|
2593
|
+
//#{type}[#{type}4]{
|
|
2594
|
+
|
|
2595
|
+
//}
|
|
2596
|
+
|
|
2597
|
+
//#{type}[#{type}5]{
|
|
2598
|
+
|
|
2599
|
+
//}
|
|
2600
|
+
|
|
2601
|
+
//#{type}[#{type}6]{
|
|
2602
|
+
|
|
2603
|
+
//}
|
|
2604
|
+
EOS
|
|
2605
|
+
|
|
2606
|
+
expected = <<-EOS
|
|
2607
|
+
<div class="#{type}">
|
|
2608
|
+
<p class="caption">#{type}2</p>
|
|
2609
|
+
</div>
|
|
2610
|
+
<div class="#{type}">
|
|
2611
|
+
<p class="caption">#{type}3</p>
|
|
2612
|
+
</div>
|
|
2613
|
+
<div class="#{type}">
|
|
2614
|
+
<p class="caption">#{type}4</p>
|
|
2615
|
+
</div>
|
|
2616
|
+
<div class="#{type}">
|
|
2617
|
+
<p class="caption">#{type}5</p>
|
|
2618
|
+
</div>
|
|
2619
|
+
<div class="#{type}">
|
|
2620
|
+
<p class="caption">#{type}6</p>
|
|
2621
|
+
</div>
|
|
2622
|
+
EOS
|
|
2623
|
+
assert_equal expected, compile_block(src)
|
|
2624
|
+
|
|
2625
|
+
src = <<-EOS
|
|
2626
|
+
//#{type}{
|
|
2627
|
+
|
|
2628
|
+
* A
|
|
2629
|
+
|
|
2630
|
+
1. B
|
|
2631
|
+
|
|
2632
|
+
//}
|
|
2633
|
+
|
|
2634
|
+
//#{type}[OMITEND1]{
|
|
2635
|
+
|
|
2636
|
+
//emlist{
|
|
2637
|
+
LIST
|
|
2638
|
+
//}
|
|
2639
|
+
|
|
2640
|
+
//}
|
|
2641
|
+
|
|
2642
|
+
//#{type}[OMITEND2]{
|
|
2643
|
+
//}
|
|
2644
|
+
EOS
|
|
2645
|
+
|
|
2646
|
+
expected = <<-EOS
|
|
2647
|
+
<div class="#{type}">
|
|
2648
|
+
<ul>
|
|
2649
|
+
<li>A</li>
|
|
2650
|
+
</ul>
|
|
2651
|
+
<ol>
|
|
2652
|
+
<li>B</li>
|
|
2653
|
+
</ol>
|
|
2654
|
+
</div>
|
|
2655
|
+
<div class="#{type}">
|
|
2656
|
+
<p class="caption">OMITEND1</p>
|
|
2657
|
+
<div class="emlist-code">
|
|
2658
|
+
<pre class="emlist">LIST
|
|
2659
|
+
</pre>
|
|
2660
|
+
</div>
|
|
2661
|
+
</div>
|
|
2662
|
+
<div class="#{type}">
|
|
2663
|
+
<p class="caption">OMITEND2</p>
|
|
2664
|
+
</div>
|
|
2665
|
+
EOS
|
|
2666
|
+
assert_equal expected, compile_block(src)
|
|
2667
|
+
end
|
|
2668
|
+
end
|
|
2669
|
+
|
|
2670
|
+
def test_minicolumn_blocks_nest_error1
|
|
2671
|
+
%w[note memo tip info warning important caution notice].each do |type|
|
|
2672
|
+
@builder.doc_status.clear
|
|
2673
|
+
src = <<-EOS
|
|
2674
|
+
//#{type}{
|
|
2675
|
+
|
|
2676
|
+
//#{type}{
|
|
2677
|
+
//}
|
|
2678
|
+
|
|
2679
|
+
//}
|
|
2680
|
+
EOS
|
|
2681
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
|
|
2682
|
+
assert_match(/minicolumn cannot be nested:/, e.message)
|
|
2683
|
+
end
|
|
2684
|
+
end
|
|
2685
|
+
|
|
2686
|
+
def test_minicolumn_blocks_nest_error2
|
|
2687
|
+
%w[note memo tip info warning important caution notice].each do |type|
|
|
2688
|
+
@builder.doc_status.clear
|
|
2689
|
+
src = <<-EOS
|
|
2690
|
+
//#{type}{
|
|
2691
|
+
|
|
2692
|
+
//#{type}{
|
|
2693
|
+
|
|
2694
|
+
//}
|
|
2695
|
+
|
|
2696
|
+
//}
|
|
2697
|
+
EOS
|
|
2698
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
|
|
2699
|
+
assert_match(/minicolumn cannot be nested:/, e.message)
|
|
2700
|
+
end
|
|
2701
|
+
end
|
|
2702
|
+
|
|
2703
|
+
def test_minicolumn_blocks_nest_error3
|
|
2704
|
+
%w[memo tip info warning important caution notice].each do |type|
|
|
2705
|
+
@builder.doc_status.clear
|
|
2706
|
+
src = <<-EOS
|
|
2707
|
+
//#{type}{
|
|
2708
|
+
|
|
2709
|
+
//note{
|
|
2710
|
+
|
|
2711
|
+
//}
|
|
2712
|
+
|
|
2713
|
+
//}
|
|
2714
|
+
EOS
|
|
2715
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
|
|
2716
|
+
assert_match(/minicolumn cannot be nested:/, e.message)
|
|
2717
|
+
end
|
|
2718
|
+
end
|
|
2719
|
+
|
|
2455
2720
|
def test_comment
|
|
2456
2721
|
actual = compile_block('//comment[コメント]')
|
|
2457
2722
|
assert_equal '', actual
|
|
@@ -2499,18 +2764,18 @@ EOB
|
|
|
2499
2764
|
end
|
|
2500
2765
|
|
|
2501
2766
|
def test_inline_unknown
|
|
2502
|
-
e = assert_raises(ReVIEW::ApplicationError) { compile_block
|
|
2767
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<img>{n}\n") }
|
|
2503
2768
|
assert_equal ':1: error: unknown image: n', e.message
|
|
2504
|
-
e = assert_raises(ReVIEW::ApplicationError) { compile_block
|
|
2769
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<fn>{n}\n") }
|
|
2505
2770
|
assert_equal ':1: error: unknown footnote: n', e.message
|
|
2506
|
-
e = assert_raises(ReVIEW::ApplicationError) { compile_block
|
|
2771
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<hd>{n}\n") }
|
|
2507
2772
|
assert_equal ':1: error: unknown headline: n', e.message
|
|
2508
2773
|
%w[list table column].each do |name|
|
|
2509
|
-
e = assert_raises(ReVIEW::ApplicationError) { compile_block
|
|
2774
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<#{name}>{n}\n") }
|
|
2510
2775
|
assert_equal ":1: error: unknown #{name}: n", e.message
|
|
2511
2776
|
end
|
|
2512
2777
|
%w[chap chapref title].each do |name|
|
|
2513
|
-
e = assert_raises(ReVIEW::ApplicationError) { compile_block
|
|
2778
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<#{name}>{n}\n") }
|
|
2514
2779
|
assert_equal ':1: error: key not found: "n"', e.message
|
|
2515
2780
|
end
|
|
2516
2781
|
end
|
|
@@ -2540,6 +2805,20 @@ e=mc^2
|
|
|
2540
2805
|
//}
|
|
2541
2806
|
EOS
|
|
2542
2807
|
expected = <<-EOS
|
|
2808
|
+
<p><span class="eqref"><a href="./-.html#emc2">式1.1</a></span></p>
|
|
2809
|
+
<div id="emc2" class="caption-equation">
|
|
2810
|
+
<p class="caption">式1.1: The Equivalence of Mass <i>and</i> Energy</p>
|
|
2811
|
+
<div class="equation">
|
|
2812
|
+
<pre>e=mc^2
|
|
2813
|
+
</pre>
|
|
2814
|
+
</div>
|
|
2815
|
+
</div>
|
|
2816
|
+
EOS
|
|
2817
|
+
actual = compile_block(src)
|
|
2818
|
+
assert_equal expected, actual
|
|
2819
|
+
|
|
2820
|
+
@config['chapterlink'] = nil
|
|
2821
|
+
expected = <<-EOS
|
|
2543
2822
|
<p><span class="eqref">式1.1</span></p>
|
|
2544
2823
|
<div id="emc2" class="caption-equation">
|
|
2545
2824
|
<p class="caption">式1.1: The Equivalence of Mass <i>and</i> Energy</p>
|
|
@@ -2566,4 +2845,296 @@ EOS
|
|
|
2566
2845
|
actual = compile_block(src)
|
|
2567
2846
|
assert_equal expected, actual
|
|
2568
2847
|
end
|
|
2848
|
+
|
|
2849
|
+
def test_nest_error_close1
|
|
2850
|
+
src = <<-EOS
|
|
2851
|
+
//beginchild
|
|
2852
|
+
EOS
|
|
2853
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
|
|
2854
|
+
assert_equal ":1: error: //beginchild is shown, but previous element isn't ul, ol, or dl", e.message
|
|
2855
|
+
end
|
|
2856
|
+
|
|
2857
|
+
def test_nest_error_close2
|
|
2858
|
+
src = <<-EOS
|
|
2859
|
+
* foo
|
|
2860
|
+
|
|
2861
|
+
//beginchild
|
|
2862
|
+
|
|
2863
|
+
1. foo
|
|
2864
|
+
|
|
2865
|
+
//beginchild
|
|
2866
|
+
|
|
2867
|
+
: foo
|
|
2868
|
+
|
|
2869
|
+
//beginchild
|
|
2870
|
+
EOS
|
|
2871
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
|
|
2872
|
+
assert_equal ':12: error: //beginchild of dl,ol,ul misses //endchild', e.message
|
|
2873
|
+
end
|
|
2874
|
+
|
|
2875
|
+
def test_nest_error_close3
|
|
2876
|
+
src = <<-EOS
|
|
2877
|
+
* foo
|
|
2878
|
+
|
|
2879
|
+
//beginchild
|
|
2880
|
+
|
|
2881
|
+
1. foo
|
|
2882
|
+
|
|
2883
|
+
//beginchild
|
|
2884
|
+
|
|
2885
|
+
: foo
|
|
2886
|
+
|
|
2887
|
+
//beginchild
|
|
2888
|
+
|
|
2889
|
+
//endchild
|
|
2890
|
+
EOS
|
|
2891
|
+
e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
|
|
2892
|
+
assert_equal ':14: error: //beginchild of ol,ul misses //endchild', e.message
|
|
2893
|
+
end
|
|
2894
|
+
|
|
2895
|
+
def test_nest_ul
|
|
2896
|
+
src = <<-EOS
|
|
2897
|
+
* UL1
|
|
2898
|
+
|
|
2899
|
+
//beginchild
|
|
2900
|
+
|
|
2901
|
+
1. UL1-OL1
|
|
2902
|
+
2. UL1-OL2
|
|
2903
|
+
|
|
2904
|
+
* UL1-UL1
|
|
2905
|
+
* UL1-UL2
|
|
2906
|
+
|
|
2907
|
+
: UL1-DL1
|
|
2908
|
+
UL1-DD1
|
|
2909
|
+
: UL1-DL2
|
|
2910
|
+
UL1-DD2
|
|
2911
|
+
|
|
2912
|
+
//endchild
|
|
2913
|
+
|
|
2914
|
+
* UL2
|
|
2915
|
+
|
|
2916
|
+
//beginchild
|
|
2917
|
+
|
|
2918
|
+
UL2-PARA
|
|
2919
|
+
|
|
2920
|
+
//endchild
|
|
2921
|
+
EOS
|
|
2922
|
+
|
|
2923
|
+
expected = <<-EOS
|
|
2924
|
+
<ul>
|
|
2925
|
+
<li>UL1
|
|
2926
|
+
<ol>
|
|
2927
|
+
<li>UL1-OL1</li>
|
|
2928
|
+
<li>UL1-OL2</li>
|
|
2929
|
+
</ol>
|
|
2930
|
+
<ul>
|
|
2931
|
+
<li>UL1-UL1</li>
|
|
2932
|
+
<li>UL1-UL2</li>
|
|
2933
|
+
</ul>
|
|
2934
|
+
<dl>
|
|
2935
|
+
<dt>UL1-DL1</dt>
|
|
2936
|
+
<dd>UL1-DD1</dd>
|
|
2937
|
+
<dt>UL1-DL2</dt>
|
|
2938
|
+
<dd>UL1-DD2</dd>
|
|
2939
|
+
</dl>
|
|
2940
|
+
</li>
|
|
2941
|
+
|
|
2942
|
+
<li>UL2
|
|
2943
|
+
<p>UL2-PARA</p>
|
|
2944
|
+
</li>
|
|
2945
|
+
</ul>
|
|
2946
|
+
EOS
|
|
2947
|
+
|
|
2948
|
+
actual = compile_block(src)
|
|
2949
|
+
assert_equal expected, actual
|
|
2950
|
+
end
|
|
2951
|
+
|
|
2952
|
+
def test_nest_ol
|
|
2953
|
+
src = <<-EOS
|
|
2954
|
+
1. OL1
|
|
2955
|
+
|
|
2956
|
+
//beginchild
|
|
2957
|
+
|
|
2958
|
+
1. OL1-OL1
|
|
2959
|
+
2. OL1-OL2
|
|
2960
|
+
|
|
2961
|
+
* OL1-UL1
|
|
2962
|
+
* OL1-UL2
|
|
2963
|
+
|
|
2964
|
+
: OL1-DL1
|
|
2965
|
+
OL1-DD1
|
|
2966
|
+
: OL1-DL2
|
|
2967
|
+
OL1-DD2
|
|
2968
|
+
|
|
2969
|
+
//endchild
|
|
2970
|
+
|
|
2971
|
+
2. OL2
|
|
2972
|
+
|
|
2973
|
+
//beginchild
|
|
2974
|
+
|
|
2975
|
+
OL2-PARA
|
|
2976
|
+
|
|
2977
|
+
//endchild
|
|
2978
|
+
EOS
|
|
2979
|
+
|
|
2980
|
+
expected = <<-EOS
|
|
2981
|
+
<ol>
|
|
2982
|
+
<li>OL1
|
|
2983
|
+
<ol>
|
|
2984
|
+
<li>OL1-OL1</li>
|
|
2985
|
+
<li>OL1-OL2</li>
|
|
2986
|
+
</ol>
|
|
2987
|
+
<ul>
|
|
2988
|
+
<li>OL1-UL1</li>
|
|
2989
|
+
<li>OL1-UL2</li>
|
|
2990
|
+
</ul>
|
|
2991
|
+
<dl>
|
|
2992
|
+
<dt>OL1-DL1</dt>
|
|
2993
|
+
<dd>OL1-DD1</dd>
|
|
2994
|
+
<dt>OL1-DL2</dt>
|
|
2995
|
+
<dd>OL1-DD2</dd>
|
|
2996
|
+
</dl>
|
|
2997
|
+
</li>
|
|
2998
|
+
|
|
2999
|
+
<li>OL2
|
|
3000
|
+
<p>OL2-PARA</p>
|
|
3001
|
+
</li>
|
|
3002
|
+
</ol>
|
|
3003
|
+
EOS
|
|
3004
|
+
|
|
3005
|
+
actual = compile_block(src)
|
|
3006
|
+
assert_equal expected, actual
|
|
3007
|
+
end
|
|
3008
|
+
|
|
3009
|
+
def test_nest_dl
|
|
3010
|
+
src = <<-EOS
|
|
3011
|
+
: DL1
|
|
3012
|
+
|
|
3013
|
+
//beginchild
|
|
3014
|
+
|
|
3015
|
+
1. DL1-OL1
|
|
3016
|
+
2. DL1-OL2
|
|
3017
|
+
|
|
3018
|
+
* DL1-UL1
|
|
3019
|
+
* DL1-UL2
|
|
3020
|
+
|
|
3021
|
+
: DL1-DL1
|
|
3022
|
+
DL1-DD1
|
|
3023
|
+
: DL1-DL2
|
|
3024
|
+
DL1-DD2
|
|
3025
|
+
|
|
3026
|
+
//endchild
|
|
3027
|
+
|
|
3028
|
+
: DL2
|
|
3029
|
+
DD2
|
|
3030
|
+
|
|
3031
|
+
//beginchild
|
|
3032
|
+
|
|
3033
|
+
* DD2-UL1
|
|
3034
|
+
* DD2-UL2
|
|
3035
|
+
|
|
3036
|
+
DD2-PARA
|
|
3037
|
+
|
|
3038
|
+
//endchild
|
|
3039
|
+
EOS
|
|
3040
|
+
|
|
3041
|
+
expected = <<-EOS
|
|
3042
|
+
<dl>
|
|
3043
|
+
<dt>DL1</dt>
|
|
3044
|
+
<dd>
|
|
3045
|
+
<ol>
|
|
3046
|
+
<li>DL1-OL1</li>
|
|
3047
|
+
<li>DL1-OL2</li>
|
|
3048
|
+
</ol>
|
|
3049
|
+
<ul>
|
|
3050
|
+
<li>DL1-UL1</li>
|
|
3051
|
+
<li>DL1-UL2</li>
|
|
3052
|
+
</ul>
|
|
3053
|
+
<dl>
|
|
3054
|
+
<dt>DL1-DL1</dt>
|
|
3055
|
+
<dd>DL1-DD1</dd>
|
|
3056
|
+
<dt>DL1-DL2</dt>
|
|
3057
|
+
<dd>DL1-DD2</dd>
|
|
3058
|
+
</dl>
|
|
3059
|
+
</dd>
|
|
3060
|
+
|
|
3061
|
+
<dt>DL2</dt>
|
|
3062
|
+
<dd>DD2
|
|
3063
|
+
<ul>
|
|
3064
|
+
<li>DD2-UL1</li>
|
|
3065
|
+
<li>DD2-UL2</li>
|
|
3066
|
+
</ul>
|
|
3067
|
+
<p>DD2-PARA</p>
|
|
3068
|
+
</dd>
|
|
3069
|
+
</dl>
|
|
3070
|
+
EOS
|
|
3071
|
+
|
|
3072
|
+
actual = compile_block(src)
|
|
3073
|
+
assert_equal expected, actual
|
|
3074
|
+
end
|
|
3075
|
+
|
|
3076
|
+
def test_nest_multi
|
|
3077
|
+
src = <<-EOS
|
|
3078
|
+
1. OL1
|
|
3079
|
+
|
|
3080
|
+
//beginchild
|
|
3081
|
+
|
|
3082
|
+
1. OL1-OL1
|
|
3083
|
+
|
|
3084
|
+
//beginchild
|
|
3085
|
+
|
|
3086
|
+
* OL1-OL1-UL1
|
|
3087
|
+
|
|
3088
|
+
OL1-OL1-PARA
|
|
3089
|
+
|
|
3090
|
+
//endchild
|
|
3091
|
+
|
|
3092
|
+
2. OL1-OL2
|
|
3093
|
+
|
|
3094
|
+
* OL1-UL1
|
|
3095
|
+
|
|
3096
|
+
//beginchild
|
|
3097
|
+
|
|
3098
|
+
: OL1-UL1-DL1
|
|
3099
|
+
OL1-UL1-DD1
|
|
3100
|
+
|
|
3101
|
+
OL1-UL1-PARA
|
|
3102
|
+
|
|
3103
|
+
//endchild
|
|
3104
|
+
|
|
3105
|
+
* OL1-UL2
|
|
3106
|
+
|
|
3107
|
+
//endchild
|
|
3108
|
+
EOS
|
|
3109
|
+
expected = <<-EOS
|
|
3110
|
+
<ol>
|
|
3111
|
+
<li>OL1
|
|
3112
|
+
<ol>
|
|
3113
|
+
<li>OL1-OL1
|
|
3114
|
+
<ul>
|
|
3115
|
+
<li>OL1-OL1-UL1</li>
|
|
3116
|
+
</ul>
|
|
3117
|
+
<p>OL1-OL1-PARA</p>
|
|
3118
|
+
</li>
|
|
3119
|
+
|
|
3120
|
+
<li>OL1-OL2</li>
|
|
3121
|
+
</ol>
|
|
3122
|
+
<ul>
|
|
3123
|
+
<li>OL1-UL1
|
|
3124
|
+
<dl>
|
|
3125
|
+
<dt>OL1-UL1-DL1</dt>
|
|
3126
|
+
<dd>OL1-UL1-DD1</dd>
|
|
3127
|
+
</dl>
|
|
3128
|
+
<p>OL1-UL1-PARA</p>
|
|
3129
|
+
</li>
|
|
3130
|
+
|
|
3131
|
+
<li>OL1-UL2</li>
|
|
3132
|
+
</ul>
|
|
3133
|
+
</li>
|
|
3134
|
+
</ol>
|
|
3135
|
+
EOS
|
|
3136
|
+
|
|
3137
|
+
actual = compile_block(src)
|
|
3138
|
+
assert_equal expected, actual
|
|
3139
|
+
end
|
|
2569
3140
|
end
|