review 1.0.0 → 1.1.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.
Files changed (100) hide show
  1. data/.travis.yml +1 -2
  2. data/ChangeLog +65 -0
  3. data/Gemfile +5 -0
  4. data/README.rdoc +6 -1
  5. data/Rakefile +14 -28
  6. data/bin/review-check +9 -21
  7. data/bin/review-compile +45 -12
  8. data/bin/review-epubmaker +477 -220
  9. data/bin/review-epubmaker-ng +5 -14
  10. data/bin/review-index +4 -2
  11. data/bin/review-init +94 -0
  12. data/bin/review-pdfmaker +70 -287
  13. data/bin/review-preproc +5 -2
  14. data/bin/review-vol +4 -11
  15. data/debian/changelog +3 -3
  16. data/debian/copyright +5 -3
  17. data/debian/docs +1 -0
  18. data/doc/format.rdoc +57 -11
  19. data/doc/quickstart.rdoc +4 -4
  20. data/doc/sample.yaml +11 -7
  21. data/lib/epubmaker.rb +1 -1
  22. data/lib/epubmaker/epubv2.rb +26 -27
  23. data/lib/epubmaker/epubv3.rb +13 -13
  24. data/lib/epubmaker/producer.rb +1 -1
  25. data/lib/review.rb +3 -4
  26. data/lib/review/book.rb +17 -581
  27. data/lib/review/book/base.rb +247 -0
  28. data/lib/review/book/chapter.rb +81 -0
  29. data/lib/review/book/compilable.rb +163 -0
  30. data/lib/review/book/index.rb +339 -0
  31. data/lib/review/book/page_metric.rb +38 -0
  32. data/lib/review/book/parameters.rb +97 -0
  33. data/lib/review/book/part.rb +44 -0
  34. data/lib/review/book/volume.rb +65 -0
  35. data/lib/review/builder.rb +34 -40
  36. data/lib/review/compiler.rb +32 -13
  37. data/lib/review/configure.rb +38 -0
  38. data/lib/review/ewbbuilder.rb +23 -21
  39. data/lib/review/extentions.rb +3 -0
  40. data/lib/review/extentions/object.rb +9 -0
  41. data/lib/review/{compat.rb → extentions/string.rb} +11 -0
  42. data/lib/review/htmlbuilder.rb +162 -74
  43. data/lib/review/htmlutils.rb +28 -1
  44. data/lib/review/i18n.yaml +11 -0
  45. data/lib/review/idgxmlbuilder.rb +119 -35
  46. data/lib/review/inaobuilder.rb +355 -0
  47. data/lib/review/latexbuilder.rb +133 -59
  48. data/lib/review/latexutils.rb +15 -6
  49. data/lib/review/makerhelper.rb +59 -0
  50. data/lib/review/markdownbuilder.rb +129 -0
  51. data/lib/review/preprocessor.rb +20 -7
  52. data/lib/review/review.tex.erb +250 -0
  53. data/lib/review/textutils.rb +28 -3
  54. data/lib/review/tocparser.rb +20 -12
  55. data/lib/review/tocprinter.rb +7 -3
  56. data/lib/review/topbuilder.rb +44 -27
  57. data/lib/review/version.rb +3 -0
  58. data/review.gemspec +20 -117
  59. data/test/book_test_helper.rb +35 -0
  60. data/test/sample-book/README.md +5 -0
  61. data/test/sample-book/src/CHAPS +2 -0
  62. data/test/sample-book/src/PREDEF +1 -0
  63. data/test/sample-book/src/Rakefile +26 -0
  64. data/test/sample-book/src/_cover.html +3 -0
  65. data/test/sample-book/src/ch01.re +71 -0
  66. data/test/sample-book/src/ch02.re +3 -0
  67. data/test/sample-book/src/config.yml +55 -0
  68. data/test/sample-book/src/images/ch01-imgsample.jpg +0 -0
  69. data/test/sample-book/src/images/cover.jpg +0 -0
  70. data/test/sample-book/src/main.css +251 -0
  71. data/test/sample-book/src/preface.re +15 -0
  72. data/test/sample-book/src/sty/jumoline.sty +310 -0
  73. data/test/sample-book/src/sty/samplemacro.sty +21 -0
  74. data/test/sample-book/src/vendor/jumoline/README +29 -0
  75. data/test/sample-book/src/vendor/jumoline/jumoline.dtx +2988 -0
  76. data/test/sample-book/src/vendor/jumoline/jumoline.ins +6 -0
  77. data/test/test_book.rb +26 -646
  78. data/test/test_book_chapter.rb +418 -0
  79. data/test/test_book_parameter.rb +42 -0
  80. data/test/test_book_part.rb +53 -0
  81. data/test/test_builder.rb +17 -10
  82. data/test/test_compiler.rb +46 -0
  83. data/test/test_epubmaker.rb +1 -1
  84. data/test/test_epubmaker_cmd.rb +36 -0
  85. data/test/test_helper.rb +17 -0
  86. data/test/test_htmlbuilder.rb +156 -24
  87. data/test/test_htmlutils.rb +4 -0
  88. data/test/test_i18n.rb +6 -2
  89. data/test/test_idgxmlbuilder.rb +33 -11
  90. data/test/test_inaobuilder.rb +247 -0
  91. data/test/test_index.rb +31 -0
  92. data/test/test_latexbuilder.rb +115 -35
  93. data/test/test_makerhelper.rb +50 -0
  94. data/test/test_pdfmaker_cmd.rb +36 -0
  95. data/test/test_preprocessor.rb +7 -7
  96. data/test/test_topbuilder.rb +6 -7
  97. data/test/test_uuid.rb +1 -0
  98. metadata +117 -12
  99. data/lib/review/index.rb +0 -323
  100. data/lib/review/volume.rb +0 -66
@@ -0,0 +1,53 @@
1
+ require 'book_test_helper'
2
+ class PartTest < Test::Unit::TestCase
3
+ include BookTestHelper
4
+
5
+ def test_initialize
6
+ part = Book::Part.new(nil, nil, nil)
7
+ assert_equal nil, part.number
8
+ assert_equal nil, part.chapters
9
+ assert_equal '', part.name
10
+
11
+ part = Book::Part.new(nil, 123, [], 'name')
12
+ assert_equal 123, part.number
13
+ assert_equal [], part.chapters
14
+ assert_equal 'name', part.name
15
+ end
16
+
17
+ def test_each_chapter
18
+ part = Book::Part.new(nil, nil, [1, 2, 3])
19
+
20
+ tmp = []
21
+ part.each_chapter do |ch|
22
+ tmp << ch
23
+ end
24
+ assert_equal [1, 2, 3], tmp
25
+ end
26
+
27
+ def test_volume
28
+ part = Book::Part.new(nil, nil, [])
29
+ assert part.volume
30
+ assert_equal 0, part.volume.bytes
31
+ assert_equal 0, part.volume.chars
32
+ assert_equal 0, part.volume.lines
33
+
34
+ chs = []
35
+ tfs = [] ## prevent from removing Tempfile
36
+ Tempfile.open('part_test') do |o|
37
+ o.print "12345"
38
+ chs << Book::Chapter.new(nil, nil, nil, o.path)
39
+ tfs << o
40
+ end
41
+ Tempfile.open('part_test') do |o|
42
+ o.print "67890"
43
+ chs << Book::Chapter.new(nil, nil, nil, o.path)
44
+ tfs << o
45
+ end
46
+
47
+ part = Book::Part.new(nil, nil, chs)
48
+ assert part.volume
49
+ assert part.volume.bytes > 0
50
+ assert part.volume.chars > 0
51
+ assert part.volume.lines > 0
52
+ end
53
+ end
@@ -98,7 +98,6 @@ class BuidlerTest < Test::Unit::TestCase
98
98
  :source_header, :source_body,
99
99
  :image_image, :image_dummy,
100
100
  :table_header, :table_begin, :tr, :th, :table_end,
101
- :nofunc_text,
102
101
  :compile_ruby, :compile_kw, :compile_href,
103
102
  :bibpaper_header, :bibpaper_bibpaper,
104
103
  :inline_hd_chap,
@@ -113,18 +112,26 @@ class BuidlerTest < Test::Unit::TestCase
113
112
  assert_equal [:text, text], @b.compile_inline(text)
114
113
  end
115
114
 
116
- def test_convert_outencoding_1arg
117
- ReVIEW.book.param = {'outencoding' => "UTF-8"}
118
- b = Builder.new
119
- ret = b.convert_outencoding("a")
120
- assert_equal "a", ret
115
+ def test_inline_ruby
116
+ def @b.compile_ruby(base,ruby)
117
+ [base,ruby]
118
+ end
119
+ str = @b.inline_ruby("foo,bar")
120
+ assert_equal str, ["foo","bar"]
121
+ str = @b.inline_ruby("foo\\,\\,,\\,bar,buz")
122
+ assert_equal str, ["foo,,",",bar,buz"]
121
123
  end
122
124
 
123
- def test_convert_outencoding_2arg
124
- ReVIEW.book.param = {'outencoding' => "UTF-8"}
125
+ def test_compile_inline_backslash
126
+ text = "abc\\d\\#a"
127
+ assert_equal [:text, text], @b.compile_inline(text)
128
+ end
129
+
130
+ def test_convert_outencoding
131
+ ReVIEW.book.param = {'outencoding' => "EUC"}
125
132
  b = Builder.new
126
- ret = b.convert_outencoding("a","b")
127
- assert_equal(["a","b"], ret)
133
+ ret = b.convert_outencoding("a", ReVIEW.book.param["outencoding"])
134
+ assert_equal "a", ret
128
135
  end
129
136
 
130
137
  class XBuilder < Builder
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test_helper'
4
+ require 'review/compiler'
5
+ require 'review/book'
6
+ require 'review/latexbuilder'
7
+
8
+ class CompilerTest < Test::Unit::TestCase
9
+ include ReVIEW
10
+
11
+ def setup
12
+ @builder = LATEXBuilder.new()
13
+ @c = Compiler.new(@builder)
14
+ end
15
+
16
+ def test_parse_args
17
+ args = @c.__send__(:parse_args, "[foo][bar]")
18
+ assert_equal ["foo","bar"], args
19
+ end
20
+
21
+ def test_parse_args_with_brace1
22
+ args = @c.__send__(:parse_args, "[fo[\\][\\]o][bar]")
23
+ assert_equal ["fo[][]o","bar"], args
24
+ end
25
+
26
+ def test_parse_args_with_brace2
27
+ args = @c.__send__(:parse_args, "[f\\]o\\]o][bar]")
28
+ assert_equal ["f]o]o","bar"], args
29
+ end
30
+
31
+ def test_parse_args_with_backslash
32
+ args = @c.__send__(:parse_args, "[foo][bar\\buz]")
33
+ assert_equal ["foo","bar\\buz"], args
34
+ end
35
+
36
+ def test_parse_args_with_backslash2
37
+ args = @c.__send__(:parse_args, "[foo][bar\\#\\[\\!]")
38
+ assert_equal ["foo","bar\\#\\[\\!"], args
39
+ end
40
+
41
+ def test_parse_args_with_backslash3
42
+ args = @c.__send__(:parse_args, "[foo][bar\\\\buz]")
43
+ assert_equal ["foo","bar\\buz"], args
44
+ end
45
+ end
46
+
@@ -35,7 +35,7 @@ class EPUBMakerTest < Test::Unit::TestCase
35
35
 
36
36
  def test_mimetype
37
37
  @producer.mimetype(@output)
38
- assert_equal %Q[application/epub+zip\n], @output.string
38
+ assert_equal %Q[application/epub+zip], @output.string
39
39
  end
40
40
 
41
41
  def test_container
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test_helper'
4
+ require 'tmpdir'
5
+ require 'fileutils'
6
+ require 'yaml'
7
+
8
+ REVIEW_EPUBMAKER = File.expand_path('../bin/review-epubmaker', File.dirname(__FILE__))
9
+
10
+ class EPUBMakerCmdTest < Test::Unit::TestCase
11
+ def setup
12
+ @tmpdir1 = Dir.mktmpdir
13
+ @tmpdir2 = Dir.mktmpdir
14
+
15
+ @old_rubylib = ENV['RUBYLIB']
16
+ ENV['RUBYLIB'] = File.expand_path('../lib', File.dirname(__FILE__))
17
+ end
18
+
19
+ def teardown
20
+ FileUtils.rm_rf @tmpdir1
21
+ FileUtils.rm_rf @tmpdir2
22
+ ENV['RUBYLIB'] = @old_rubylib
23
+ end
24
+
25
+ def test_epubmaker_cmd
26
+ config = prepare_samplebook(@tmpdir1)
27
+ builddir = @tmpdir1 + "/" + config['bookname'] + '-epub'
28
+ assert ! File.exists?(builddir)
29
+
30
+ Dir.chdir(@tmpdir1) do
31
+ system("#{REVIEW_EPUBMAKER} config.yml 1>/dev/null 2>/dev/null")
32
+ end
33
+
34
+ assert File.exists?(builddir)
35
+ end
36
+ end
@@ -8,3 +8,20 @@ def ul_helper(src, expect)
8
8
  assert_equal expect, @builder.raw_result
9
9
  end
10
10
 
11
+ def builder_helper(src, expect, method_sym)
12
+ io = StringIO.new(src)
13
+ li = LineInput.new(io)
14
+ @compiler.__send__(method_sym, li)
15
+ assert_equal expect, @builder.raw_result
16
+ end
17
+
18
+ def touch_file(path)
19
+ File.open(path, "w").close
20
+ path
21
+ end
22
+
23
+ def prepare_samplebook(srcdir)
24
+ samplebook_dir = File.expand_path("sample-book/src/", File.dirname(__FILE__))
25
+ FileUtils.cp_r(Dir.glob(samplebook_dir + "/*"), srcdir)
26
+ YAML.load(File.open(srcdir + "/config.yml"))
27
+ end
@@ -4,6 +4,7 @@ require 'test_helper'
4
4
  require 'review/compiler'
5
5
  require 'review/book'
6
6
  require 'review/htmlbuilder'
7
+ require 'review/i18n'
7
8
 
8
9
  class HTMLBuidlerTest < Test::Unit::TestCase
9
10
  include ReVIEW
@@ -19,46 +20,46 @@ class HTMLBuidlerTest < Test::Unit::TestCase
19
20
  }
20
21
  ReVIEW.book.param = @param
21
22
  @compiler = ReVIEW::Compiler.new(@builder)
22
- @chapter = Chapter.new(nil, 1, '-', nil, StringIO.new)
23
+ @chapter = Book::Chapter.new(Book::Base.new(nil), 1, '-', nil, StringIO.new)
23
24
  location = Location.new(nil, nil)
24
25
  @builder.bind(@compiler, @chapter, location)
25
26
  end
26
27
 
27
28
  def test_headline_level1
28
29
  @builder.headline(1,"test","this is test.")
29
- assert_equal %Q|<h1 id="test"><a id="h1" />第1章 this is test.</h1>\n|, @builder.raw_result
30
+ assert_equal %Q|<h1 id="test"><a id="h1"></a>第1章 this is test.</h1>\n|, @builder.raw_result
30
31
  end
31
32
 
32
33
  def test_headline_level1_without_secno
33
34
  @param["secnolevel"] = 0
34
35
  @builder.headline(1,"test","this is test.")
35
- assert_equal %Q|<h1 id="test"><a id="h1" />this is test.</h1>\n|, @builder.raw_result
36
+ assert_equal %Q|<h1 id="test"><a id="h1"></a>this is test.</h1>\n|, @builder.raw_result
36
37
  end
37
38
 
38
39
  def test_headline_level1_with_inlinetag
39
40
  @builder.headline(1,"test","this @<b>{is} test.<&\">")
40
- assert_equal %Q|<h1 id="test"><a id="h1" />第1章 this <b>is</b> test.&lt;&amp;&quot;&gt;</h1>\n|, @builder.raw_result
41
+ assert_equal %Q|<h1 id="test"><a id="h1"></a>第1章 this <b>is</b> test.&lt;&amp;&quot;&gt;</h1>\n|, @builder.raw_result
41
42
  end
42
43
 
43
44
  def test_headline_level2
44
45
  @builder.headline(2,"test","this is test.")
45
- assert_equal %Q|\n<h2 id="test"><a id="h1-1" />1.1 this is test.</h2>\n|, @builder.raw_result
46
+ assert_equal %Q|\n<h2 id="test"><a id="h1-1"></a>1.1 this is test.</h2>\n|, @builder.raw_result
46
47
  end
47
48
 
48
49
  def test_headline_level3
49
50
  @builder.headline(3,"test","this is test.")
50
- assert_equal %Q|\n<h3 id="test"><a id="h1-0-1" />this is test.</h3>\n|, @builder.raw_result
51
+ assert_equal %Q|\n<h3 id="test"><a id="h1-0-1"></a>this is test.</h3>\n|, @builder.raw_result
51
52
  end
52
53
 
53
54
  def test_headline_level3_with_secno
54
55
  @param["secnolevel"] = 3
55
56
  @builder.headline(3,"test","this is test.")
56
- assert_equal %Q|\n<h3 id="test"><a id="h1-0-1" />1.0.1 this is test.</h3>\n|, @builder.raw_result
57
+ assert_equal %Q|\n<h3 id="test"><a id="h1-0-1"></a>1.0.1 this is test.</h3>\n|, @builder.raw_result
57
58
  end
58
59
 
59
60
  def test_label
60
61
  @builder.label("label_test")
61
- assert_equal %Q|<a id="label_test" />\n|, @builder.raw_result
62
+ assert_equal %Q|<a id="label_test"></a>\n|, @builder.raw_result
62
63
  end
63
64
 
64
65
  def test_href
@@ -131,6 +132,21 @@ class HTMLBuidlerTest < Test::Unit::TestCase
131
132
  assert_equal %Q|test <tt><b>inline test</b></tt> test2|, ret
132
133
  end
133
134
 
135
+ def test_inline_hd_chap
136
+ def @chapter.headline_index
137
+ items = [Book::HeadlineIndex::Item.new("chap1|test", [1, 1], "te_st")]
138
+ Book::HeadlineIndex.new(items, self)
139
+ end
140
+
141
+ @param["secnolevel"] = 2
142
+ ret = @builder.compile_inline("test @<hd>{chap1|test} test2")
143
+ assert_equal %Q|test 「te_st」 test2|, ret
144
+
145
+ @param["secnolevel"] = 3
146
+ ret = @builder.compile_inline("test @<hd>{chap1|test} test2")
147
+ assert_equal %Q|test 「1.1.1 te_st」 test2|, ret
148
+ end
149
+
134
150
  def test_inline_uchar
135
151
  ret = @builder.compile_inline("test @<uchar>{2460} test2")
136
152
  assert_equal %Q|test &#x2460; test2|, ret
@@ -138,7 +154,17 @@ class HTMLBuidlerTest < Test::Unit::TestCase
138
154
 
139
155
  def test_inline_ruby
140
156
  ret = @builder.compile_inline("@<ruby>{粗雑,クルード}と思われているなら@<ruby>{繊細,テクニカル}にやり、繊細と思われているなら粗雑にやる。")
141
- assert_equal "<ruby><rb>粗雑</rb><rp>(</rp><rt>クルード</rt><rp>)</rp></ruby>と思われているなら<ruby><rb>繊細</rb><rp>(</rp><rt>テクニカル</rt><rp>)</rp></ruby>にやり、繊細と思われているなら粗雑にやる。", ret
157
+ assert_equal "<ruby><rb>粗雑</rb><rp>(</rp><rt>クルード</rt><rp>)</rp></ruby>と思われているなら<ruby><rb>繊細</rb><rp>(</rp><rt>テクニカル</rt><rp>)</rp></ruby>にやり、繊細と思われているなら粗雑にやる。", ret
158
+ end
159
+
160
+ def test_inline_ruby_comma
161
+ ret = @builder.compile_inline("@<ruby>{foo\\, bar\\, buz,フー・バー・バズ}")
162
+ assert_equal "<ruby><rb>foo, bar, buz</rb><rp>(</rp><rt>フー・バー・バズ</rt><rp>)</rp></ruby>", ret
163
+ end
164
+
165
+ def test_inline_ref
166
+ ret = @builder.compile_inline("@<ref>{外部参照<>&}")
167
+ assert_equal %Q|<a target='外部参照&lt;&gt;&amp;'>「●● 外部参照&lt;&gt;&amp;」</a>|, ret
142
168
  end
143
169
 
144
170
  def test_quote
@@ -164,9 +190,14 @@ class HTMLBuidlerTest < Test::Unit::TestCase
164
190
  assert_equal %Q|<p class="flushright">foobar</p>\n<p class="flushright">buz</p>\n|, @builder.raw_result
165
191
  end
166
192
 
193
+ def test_centering
194
+ @builder.centering(["foo", "bar", "", "buz"])
195
+ assert_equal %Q|<p class="center">foobar</p>\n<p class="center">buz</p>\n|, @builder.raw_result
196
+ end
197
+
167
198
  def test_image
168
199
  def @chapter.image(id)
169
- item = ImageIndex::Item.new("sampleimg",1)
200
+ item = Book::ImageIndex::Item.new("sampleimg",1)
170
201
  item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
171
202
  item
172
203
  end
@@ -177,7 +208,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
177
208
 
178
209
  def test_image_with_metric
179
210
  def @chapter.image(id)
180
- item = ImageIndex::Item.new("sampleimg",1)
211
+ item = Book::ImageIndex::Item.new("sampleimg",1)
181
212
  item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
182
213
  item
183
214
  end
@@ -188,7 +219,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
188
219
 
189
220
  def test_image_with_metric2
190
221
  def @chapter.image(id)
191
- item = ImageIndex::Item.new("sampleimg",1)
222
+ item = Book::ImageIndex::Item.new("sampleimg",1)
192
223
  item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
193
224
  item
194
225
  end
@@ -198,7 +229,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
198
229
 
199
230
  def test_indepimage
200
231
  def @chapter.image(id)
201
- item = ImageIndex::Item.new("sampleimg",1)
232
+ item = Book::ImageIndex::Item.new("sampleimg",1)
202
233
  item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
203
234
  item
204
235
  end
@@ -209,7 +240,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
209
240
 
210
241
  def test_indepimage_without_caption
211
242
  def @chapter.image(id)
212
- item = ImageIndex::Item.new("sampleimg",1)
243
+ item = Book::ImageIndex::Item.new("sampleimg",1)
213
244
  item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
214
245
  item
215
246
  end
@@ -220,7 +251,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
220
251
 
221
252
  def test_indepimage_with_metric
222
253
  def @chapter.image(id)
223
- item = ImageIndex::Item.new("sampleimg",1)
254
+ item = Book::ImageIndex::Item.new("sampleimg",1)
224
255
  item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
225
256
  item
226
257
  end
@@ -231,7 +262,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
231
262
 
232
263
  def test_indepimage_with_metric2
233
264
  def @chapter.image(id)
234
- item = ImageIndex::Item.new("sampleimg",1)
265
+ item = Book::ImageIndex::Item.new("sampleimg",1)
235
266
  item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
236
267
  item
237
268
  end
@@ -242,7 +273,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
242
273
 
243
274
  def test_indepimage_without_caption_but_with_metric
244
275
  def @chapter.image(id)
245
- item = ImageIndex::Item.new("sampleimg",1)
276
+ item = Book::ImageIndex::Item.new("sampleimg",1)
246
277
  item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
247
278
  item
248
279
  end
@@ -251,6 +282,20 @@ class HTMLBuidlerTest < Test::Unit::TestCase
251
282
  assert_equal %Q|<div class="image">\n<img src="images/chap1-sampleimg.png" alt="" width="120%" />\n</div>\n|, @builder.raw_result
252
283
  end
253
284
 
285
+ def test_list
286
+ def @chapter.list(id)
287
+ Book::ListIndex::Item.new("samplelist",1)
288
+ end
289
+ @builder.list(["test1", "test1.5", "", "test<i>2</i>"], "samplelist", "this is @<b>{test}<&>_")
290
+
291
+ begin # FIXME: Use params instead of exception handling
292
+ require 'pygments'
293
+ assert_equal %Q|<div class="caption-code">\n<p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n<pre class="list">test1\ntest1.5\n\ntest<span style="color: #666666">&lt;</span>i<span style="color: #666666">&gt;2&lt;/</span>i<span style="color: #666666">&gt;</span>\n</pre>\n</div>\n|, @builder.raw_result
294
+ rescue LoadError
295
+ assert_equal %Q|<div class="caption-code">\n<p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n<pre class="list">test1\ntest1.5\n\ntest<i>2</i>\n</pre>\n</div>\n|, @builder.raw_result
296
+ end
297
+ end
298
+
254
299
  def test_emlist
255
300
  @builder.emlist(["lineA","lineB"])
256
301
  assert_equal %Q|<div class="emlist-code">\n<pre class="emlist">lineA\nlineB\n</pre>\n</div>\n|, @builder.raw_result
@@ -261,6 +306,17 @@ class HTMLBuidlerTest < Test::Unit::TestCase
261
306
  assert_equal %Q|<div class="emlist-code">\n<p class="caption">cap1</p>\n<pre class="emlist">lineA\nlineB\n</pre>\n</div>\n|, @builder.raw_result
262
307
  end
263
308
 
309
+ def test_emlist_with_tab
310
+ @builder.emlist(["\tlineA","\t\tlineB","\tlineC"])
311
+ assert_equal %Q|<div class="emlist-code">\n<pre class="emlist"> lineA\n lineB\n lineC\n</pre>\n</div>\n|, @builder.raw_result
312
+ end
313
+
314
+ def test_emlist_with_4tab
315
+ @builder.instance_eval{@tabwidth=4}
316
+ @builder.emlist(["\tlineA","\t\tlineB","\tlineC"])
317
+ assert_equal %Q|<div class="emlist-code">\n<pre class="emlist"> lineA\n lineB\n lineC\n</pre>\n</div>\n|, @builder.raw_result
318
+ end
319
+
264
320
  def test_cmd
265
321
  @builder.cmd(["lineA","lineB"])
266
322
  assert_equal %Q|<div class="cmd-code">\n<pre class="cmd">lineA\nlineB\n</pre>\n</div>\n|, @builder.raw_result
@@ -273,7 +329,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
273
329
 
274
330
  def test_bib
275
331
  def @chapter.bibpaper(id)
276
- BibpaperIndex::Item.new("samplebib",1,"sample bib")
332
+ Book::BibpaperIndex::Item.new("samplebib",1,"sample bib")
277
333
  end
278
334
 
279
335
  assert_equal %Q|<a href="./bib.html#bib-samplebib">[1]</a>|, @builder.inline_bib("samplebib")
@@ -281,11 +337,20 @@ class HTMLBuidlerTest < Test::Unit::TestCase
281
337
 
282
338
  def test_bibpaper
283
339
  def @chapter.bibpaper(id)
284
- BibpaperIndex::Item.new("samplebib",1,"sample bib")
340
+ Book::BibpaperIndex::Item.new("samplebib",1,"sample bib")
285
341
  end
286
342
 
287
343
  @builder.bibpaper(["a", "b"], "samplebib", "sample bib @<b>{bold}")
288
- assert_equal %Q|<div>\n<a id=\"bib-samplebib\">\n[1] sample bib <b>bold</b>\n</a>\n<p>\na\nb\n</p>\n</div>\n|, @builder.raw_result
344
+ assert_equal %Q|<div class=\"bibpaper\">\n<a id=\"bib-samplebib\">[1]</a> sample bib <b>bold</b>\n<p>ab</p></div>\n|, @builder.raw_result
345
+ end
346
+
347
+ def test_bibpaper_with_anchor
348
+ def @chapter.bibpaper(id)
349
+ Book::BibpaperIndex::Item.new("samplebib",1,"sample bib")
350
+ end
351
+
352
+ @builder.bibpaper(["a", "b"], "samplebib", "sample bib @<href>{http://example.jp}")
353
+ assert_equal %Q|<div class=\"bibpaper\">\n<a id=\"bib-samplebib\">[1]</a> sample bib <a href=\"http://example.jp\" class=\"link\">http://example.jp</a>\n<p>ab</p></div>\n|, @builder.raw_result
289
354
  end
290
355
 
291
356
  def column_helper(review)
@@ -309,12 +374,12 @@ EOS
309
374
  expect =<<-EOS
310
375
  <div class="column">
311
376
 
312
- <h3><a id="h1-0-1" />prev column</h3>
377
+ <h3><a id="column-1"></a>prev column</h3>
313
378
  <p>inside prev column</p>
314
379
  </div>
315
380
  <div class="column">
316
381
 
317
- <h3><a id="h1-0-2" />test</h3>
382
+ <h3><a id="column-2"></a>test</h3>
318
383
  <p>inside column</p>
319
384
  </div>
320
385
  EOS
@@ -332,11 +397,11 @@ EOS
332
397
  expect =<<-EOS
333
398
  <div class="column">
334
399
 
335
- <h3><a id="h1-0-1" />test</h3>
400
+ <h3><a id="column-1"></a>test</h3>
336
401
  <p>inside column</p>
337
402
  </div>
338
403
 
339
- <h3><a id="h1-0-2" />next level</h3>
404
+ <h3><a id="h1-0-1"></a>next level</h3>
340
405
  EOS
341
406
 
342
407
  assert_equal expect, column_helper(review)
@@ -439,6 +504,63 @@ EOS
439
504
  ul_helper(src, expect)
440
505
  end
441
506
 
507
+ def test_ul_nest4
508
+ src =<<-EOS
509
+ * A
510
+ ** AA
511
+ *** AAA
512
+ * B
513
+ ** BB
514
+ EOS
515
+
516
+ expect =<<-EOS
517
+ <ul>
518
+ <li>A<ul>
519
+ <li>AA<ul>
520
+ <li>AAA</li>
521
+ </ul>
522
+ </li>
523
+ </ul>
524
+ </li>
525
+ <li>B<ul>
526
+ <li>BB</li>
527
+ </ul>
528
+ </li>
529
+ </ul>
530
+ EOS
531
+ ul_helper(src, expect)
532
+ end
533
+
534
+ def test_ul_nest5
535
+ src =<<-EOS
536
+ * A
537
+ ** AA
538
+ **** AAAA
539
+ * B
540
+ ** BB
541
+ EOS
542
+
543
+ expect =<<-EOS
544
+ <ul>
545
+ <li>A<ul>
546
+ <li>AA<ul>
547
+ <li><ul>
548
+ <li>AAAA</li>
549
+ </ul>
550
+ </li>
551
+ </ul>
552
+ </li>
553
+ </ul>
554
+ </li>
555
+ <li>B<ul>
556
+ <li>BB</li>
557
+ </ul>
558
+ </li>
559
+ </ul>
560
+ EOS
561
+ ul_helper(src, expect)
562
+ end
563
+
442
564
  def test_inline_raw0
443
565
  assert_equal "normal", @builder.inline_raw("normal")
444
566
  end
@@ -505,4 +627,14 @@ EOS
505
627
  EOS
506
628
  assert_equal expect.chomp, @builder.raw_result
507
629
  end
630
+
631
+ def test_inline_fn
632
+ fn = Book::FootnoteIndex.parse(['//footnote[foo][bar\\a\\$buz]'])
633
+ @chapter.instance_eval{@footnote_index=fn}
634
+ @builder.footnote("foo",'bar\\a\\$buz')
635
+ expect =<<-'EOS'
636
+ <div class="footnote"><p class="footnote">[<a id="fn-foo">*1</a>] bar\a\$buz</p></div>
637
+ EOS
638
+ assert_equal expect, @builder.raw_result
639
+ end
508
640
  end