review 2.1.0 → 2.2.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 (88) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -0
  3. data/.rubocop.yml +293 -6
  4. data/.rubocop_todo.yml +3 -608
  5. data/.travis.yml +6 -13
  6. data/README.md +5 -3
  7. data/Rakefile +6 -6
  8. data/bin/review-catalog-converter +2 -2
  9. data/bin/review-check +1 -1
  10. data/bin/review-compile +1 -2
  11. data/bin/review-init +6 -3
  12. data/bin/review-validate +3 -3
  13. data/bin/review-vol +2 -1
  14. data/doc/NEWS.ja.md +138 -25
  15. data/doc/NEWS.md +137 -25
  16. data/doc/config.yml.sample +2 -2
  17. data/doc/config.yml.sample-simple +1 -1
  18. data/doc/format.ja.md +86 -5
  19. data/doc/format.md +67 -2
  20. data/doc/makeindex.ja.md +95 -0
  21. data/doc/makeindex.md +97 -0
  22. data/doc/sample.css +214 -0
  23. data/lib/epubmaker.rb +6 -6
  24. data/lib/epubmaker/epubcommon.rb +19 -47
  25. data/lib/epubmaker/epubv2.rb +3 -1
  26. data/lib/epubmaker/epubv3.rb +4 -26
  27. data/lib/epubmaker/producer.rb +46 -46
  28. data/lib/epubmaker/zip_exporter.rb +86 -0
  29. data/lib/review/book/base.rb +13 -15
  30. data/lib/review/book/chapter.rb +2 -1
  31. data/lib/review/book/compilable.rb +9 -9
  32. data/lib/review/book/image_finder.rb +13 -13
  33. data/lib/review/book/index.rb +2 -2
  34. data/lib/review/book/volume.rb +2 -2
  35. data/lib/review/builder.rb +57 -1
  36. data/lib/review/catalog.rb +2 -2
  37. data/lib/review/compiler.rb +15 -7
  38. data/lib/review/configure.rb +11 -0
  39. data/lib/review/epubmaker.rb +403 -401
  40. data/lib/review/ewbbuilder.rb +16 -16
  41. data/lib/review/htmlbuilder.rb +42 -58
  42. data/lib/review/htmltoc.rb +1 -1
  43. data/lib/review/htmlutils.rb +50 -4
  44. data/lib/review/i18n.rb +2 -2
  45. data/lib/review/idgxmlbuilder.rb +30 -47
  46. data/lib/review/latexbuilder.rb +86 -41
  47. data/lib/review/latexutils.rb +19 -19
  48. data/lib/review/markdownbuilder.rb +16 -4
  49. data/lib/review/md2inaobuilder.rb +0 -9
  50. data/lib/review/pdfmaker.rb +91 -48
  51. data/lib/review/preprocessor.rb +1 -1
  52. data/lib/review/rstbuilder.rb +763 -0
  53. data/lib/review/sec_counter.rb +7 -9
  54. data/lib/review/tocparser.rb +3 -3
  55. data/lib/review/tocprinter.rb +5 -5
  56. data/lib/review/topbuilder.rb +48 -56
  57. data/lib/review/version.rb +1 -1
  58. data/lib/review/webmaker.rb +6 -7
  59. data/review.gemspec +1 -0
  60. data/templates/latex/layout.tex.erb +27 -2
  61. data/test/assets/test_template.tex +10 -1
  62. data/test/book_test_helper.rb +1 -2
  63. data/test/run_test.rb +10 -0
  64. data/test/sample-book/src/style.css +215 -0
  65. data/test/sample-book/src/vendor/jumoline/lppl.txt +416 -0
  66. data/test/test_book.rb +0 -1
  67. data/test/test_catalog.rb +1 -0
  68. data/test/test_converter.rb +1 -1
  69. data/test/test_epub3maker.rb +44 -51
  70. data/test/test_epubmaker.rb +82 -38
  71. data/test/test_epubmaker_cmd.rb +1 -1
  72. data/test/test_extentions_hash.rb +8 -1
  73. data/test/test_htmlbuilder.rb +411 -18
  74. data/test/test_i18n.rb +17 -0
  75. data/test/test_idgxmlbuilder.rb +88 -3
  76. data/test/test_image_finder.rb +18 -0
  77. data/test/test_index.rb +2 -0
  78. data/test/test_latexbuilder.rb +96 -8
  79. data/test/test_makerhelper.rb +2 -2
  80. data/test/test_markdownbuilder.rb +22 -1
  81. data/test/test_md2inaobuilder.rb +0 -5
  82. data/test/test_pdfmaker.rb +54 -36
  83. data/test/test_pdfmaker_cmd.rb +1 -1
  84. data/test/test_rstbuilder.rb +356 -0
  85. data/test/test_textutils.rb +14 -4
  86. data/test/test_topbuilder.rb +23 -4
  87. data/test/test_zip_exporter.rb +113 -0
  88. metadata +28 -2
data/test/test_book.rb CHANGED
@@ -506,7 +506,6 @@ EOC
506
506
  end
507
507
 
508
508
  mktmpbookdir 'preface.re' => '12345' do |dir, book, files|
509
-
510
509
  Dir.chdir(dir) do
511
510
  book2 = Book::Base.new('.')
512
511
  assert book2.volume
data/test/test_catalog.rb CHANGED
@@ -92,6 +92,7 @@ ch02.re
92
92
 
93
93
 
94
94
  private
95
+
95
96
  def yaml
96
97
  StringIO.new <<-EOS
97
98
 
@@ -17,5 +17,5 @@ class ConverterTest < Test::Unit::TestCase
17
17
  assert_equal "latex", @book.config["builder"]
18
18
  end
19
19
  end
20
-
20
+
21
21
  end
@@ -10,14 +10,14 @@ class EPUB3MakerTest < Test::Unit::TestCase
10
10
  def setup
11
11
  @producer = Producer.new
12
12
  @producer.merge_params({
13
- "bookname" => "sample",
14
- "title" => "Sample Book",
15
- "epubversion" => 3,
16
- "urnid" => "http://example.jp/",
17
- "date" => "2011-01-01",
18
- "language" => "en",
19
- "modified" => "2014-12-13T14:15:16Z"
20
- })
13
+ "bookname" => "sample",
14
+ "title" => "Sample Book",
15
+ "epubversion" => 3,
16
+ "urnid" => "http://example.jp/",
17
+ "date" => "2011-01-01",
18
+ "language" => "en",
19
+ "modified" => "2014-12-13T14:15:16Z"
20
+ })
21
21
  @output = StringIO.new
22
22
  end
23
23
 
@@ -157,7 +157,7 @@ EOT
157
157
 
158
158
  def test_stage1_ncx
159
159
  @producer.ncx(@output)
160
- expect = <<EOT
160
+ expect = <<EOT
161
161
  <?xml version="1.0" encoding="UTF-8"?>
162
162
  <!DOCTYPE html>
163
163
  <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="en">
@@ -226,7 +226,7 @@ EOT
226
226
  def test_stage2_ncx
227
227
  stage2
228
228
  @producer.ncx(@output)
229
- expect = <<EOT
229
+ expect = <<EOT
230
230
  <?xml version="1.0" encoding="UTF-8"?>
231
231
  <!DOCTYPE html>
232
232
  <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="en">
@@ -273,26 +273,26 @@ EOT
273
273
  def test_stage3_add_various_items
274
274
  stage3
275
275
  expect = [
276
- Content.new("ch01.html", "ch01-html", "application/xhtml+xml", "CH01<>&\"", 1),
277
- Content.new("ch02.html", "ch02-html", "application/xhtml+xml", "CH02", 1),
278
- Content.new("ch02.html#S1", "ch02-html#S1","html#s1","CH02.1", 2),
279
- Content.new("ch02.html#S1.1", "ch02-html#S1-1", "1", "CH02.1.1", 3),
280
- Content.new("ch02.html#S1.1.1", "ch02-html#S1-1-1","1", "CH02.1.1.1", 4),
281
- Content.new("ch02.html#S1.1.1.1", "ch02-html#S1-1-1-1", "1","CH02.1.1.1.1", 5),
282
- Content.new("ch02.html#S1.1.2", "ch02-html#S1-1-2", "2", "CH02.1.1.2", 4),
283
- Content.new("ch02.html#S2", "ch02-html#S2", "html#s2", "CH02.2", 2),
284
- Content.new("ch02.html#S2.1", "ch02-html#S2-1", "1", "CH02.2.1", 3),
285
- Content.new("ch03.html", "ch03-html", "application/xhtml+xml", "CH03", 1, nil, ["mathml"]),
286
- Content.new("ch03.html#S1", "ch03-html#S1", "html#s1", "CH03.1", 2),
287
- Content.new("ch03.html#S1.1", "ch03-html#S1-1", "1", "CH03.1.1", 3),
288
- Content.new("ch04.html", "ch04-html", "application/xhtml+xml", "CH04", 1),
289
- Content.new("sample.png", "sample-png", "image/png"),
290
- Content.new("sample.jpg", "sample-jpg", "image/jpeg"),
291
- Content.new("sample.JPEG", "sample-JPEG", "image/jpeg"),
292
- Content.new("sample.SvG", "sample-SvG", "image/svg+xml"),
293
- Content.new("sample.GIF", "sample-GIF", "image/gif"),
294
- Content.new("sample.css", "sample-css", "text/css")
295
- ]
276
+ Content.new("ch01.html", "ch01-html", "application/xhtml+xml", "CH01<>&\"", 1),
277
+ Content.new("ch02.html", "ch02-html", "application/xhtml+xml", "CH02", 1),
278
+ Content.new("ch02.html#S1", "ch02-html#S1","html#s1","CH02.1", 2),
279
+ Content.new("ch02.html#S1.1", "ch02-html#S1-1", "1", "CH02.1.1", 3),
280
+ Content.new("ch02.html#S1.1.1", "ch02-html#S1-1-1","1", "CH02.1.1.1", 4),
281
+ Content.new("ch02.html#S1.1.1.1", "ch02-html#S1-1-1-1", "1","CH02.1.1.1.1", 5),
282
+ Content.new("ch02.html#S1.1.2", "ch02-html#S1-1-2", "2", "CH02.1.1.2", 4),
283
+ Content.new("ch02.html#S2", "ch02-html#S2", "html#s2", "CH02.2", 2),
284
+ Content.new("ch02.html#S2.1", "ch02-html#S2-1", "1", "CH02.2.1", 3),
285
+ Content.new("ch03.html", "ch03-html", "application/xhtml+xml", "CH03", 1, nil, ["mathml"]),
286
+ Content.new("ch03.html#S1", "ch03-html#S1", "html#s1", "CH03.1", 2),
287
+ Content.new("ch03.html#S1.1", "ch03-html#S1-1", "1", "CH03.1.1", 3),
288
+ Content.new("ch04.html", "ch04-html", "application/xhtml+xml", "CH04", 1),
289
+ Content.new("sample.png", "sample-png", "image/png"),
290
+ Content.new("sample.jpg", "sample-jpg", "image/jpeg"),
291
+ Content.new("sample.JPEG", "sample-JPEG", "image/jpeg"),
292
+ Content.new("sample.SvG", "sample-SvG", "image/svg+xml"),
293
+ Content.new("sample.GIF", "sample-GIF", "image/gif"),
294
+ Content.new("sample.css", "sample-css", "text/css")
295
+ ]
296
296
 
297
297
  assert_equal expect, @producer.contents
298
298
  end
@@ -343,7 +343,7 @@ EOT
343
343
  def test_stage3_ncx
344
344
  stage3
345
345
  @producer.ncx(@output)
346
- expect = <<EOT
346
+ expect = <<EOT
347
347
  <?xml version="1.0" encoding="UTF-8"?>
348
348
  <!DOCTYPE html>
349
349
  <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="en">
@@ -557,9 +557,9 @@ EOT
557
557
  @producer.params["pht"] = ["Mrs.Smith"]
558
558
  @producer.merge_params({"language" => "ja",
559
559
  "history" => [[
560
- "2011-08-03 v1.0.0版発行",
561
- "2012-02-15 v1.1.0版発行",
562
- ]] })
560
+ "2011-08-03 v1.0.0版発行",
561
+ "2012-02-15 v1.1.0版発行",
562
+ ]] })
563
563
  history = @producer.instance_eval{ @epub.colophon_history }
564
564
  expect = <<EOT
565
565
  <div class="pubhistory">
@@ -576,9 +576,9 @@ EOT
576
576
  @producer.params["pht"] = ["Mrs.Smith"]
577
577
  @producer.merge_params({"language" => "ja",
578
578
  "history" => [[
579
- "2011-08-03",
580
- "2012-02-15",
581
- ]] })
579
+ "2011-08-03",
580
+ "2012-02-15",
581
+ ]] })
582
582
  history = @producer.instance_eval{ @epub.colophon_history }
583
583
  expect = <<EOT
584
584
  <div class="pubhistory">
@@ -595,13 +595,13 @@ EOT
595
595
  @producer.params["pht"] = ["Mrs.Smith"]
596
596
  @producer.merge_params({"language" => "ja",
597
597
  "history" => [[
598
- "2011-08-03",
599
- "2012-02-15",
600
- ],[
601
- "2012-10-01",
602
- ],[
603
- "2013-03-01",
604
- ]] })
598
+ "2011-08-03",
599
+ "2012-02-15",
600
+ ],[
601
+ "2012-10-01",
602
+ ],[
603
+ "2013-03-01",
604
+ ]] })
605
605
  history = @producer.instance_eval{ @epub.colophon_history }
606
606
  expect = <<EOT
607
607
  <div class="pubhistory">
@@ -615,13 +615,6 @@ EOT
615
615
  end
616
616
 
617
617
 
618
- # def test_duplicate_id
619
- # stage3
620
- # assert_raise(Error) do
621
- # @producer.contents << Content.new({"file" => "ch02.html#S1", "title" => "CH02.1", "level" => 2})
622
- # end
623
- # end
624
-
625
618
  def test_detect_mathml
626
619
  Dir.mktmpdir do |dir|
627
620
  epubmaker = ReVIEW::EPUBMaker.new
@@ -9,13 +9,13 @@ class EPUBMakerTest < Test::Unit::TestCase
9
9
  def setup
10
10
  @producer = Producer.new
11
11
  @producer.merge_params({
12
- "bookname" => "sample",
13
- "title" => "Sample Book",
14
- "epubversion" => 2,
15
- "urnid" => "http://example.jp/",
16
- "date" => "2011-01-01",
17
- "language" => "en",
18
- })
12
+ "bookname" => "sample",
13
+ "title" => "Sample Book",
14
+ "epubversion" => 2,
15
+ "urnid" => "http://example.jp/",
16
+ "date" => "2011-01-01",
17
+ "language" => "en",
18
+ })
19
19
  @output = StringIO.new
20
20
  end
21
21
 
@@ -106,7 +106,7 @@ EOT
106
106
 
107
107
  def test_stage1_ncx
108
108
  @producer.ncx(@output)
109
- expect = <<EOT
109
+ expect = <<EOT
110
110
  <?xml version="1.0" encoding="UTF-8"?>
111
111
  <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
112
112
  <head>
@@ -137,7 +137,7 @@ EOT
137
137
  def test_stage1_ncx_escape
138
138
  @producer.params["title"] = "Sample<>Book"
139
139
  @producer.ncx(@output)
140
- expect = <<EOT
140
+ expect = <<EOT
141
141
  <?xml version="1.0" encoding="UTF-8"?>
142
142
  <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
143
143
  <head>
@@ -212,7 +212,7 @@ EOT
212
212
  def test_stage2_ncx
213
213
  stage2
214
214
  @producer.ncx(@output)
215
- expect = <<EOT
215
+ expect = <<EOT
216
216
  <?xml version="1.0" encoding="UTF-8"?>
217
217
  <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
218
218
  <head>
@@ -272,26 +272,26 @@ EOT
272
272
  def test_stage3_add_various_items
273
273
  stage3
274
274
  expect = [
275
- Content.new("ch01.html", "ch01-html", "application/xhtml+xml", "CH01<>&\"", 1),
276
- Content.new("ch02.html", "ch02-html", "application/xhtml+xml", "CH02", 1),
277
- Content.new("ch02.html#S1", "ch02-html#S1","html#s1","CH02.1", 2),
278
- Content.new("ch02.html#S1.1", "ch02-html#S1-1", "1", "CH02.1.1", 3),
279
- Content.new("ch02.html#S1.1.1", "ch02-html#S1-1-1","1", "CH02.1.1.1", 4),
280
- Content.new("ch02.html#S1.1.1.1", "ch02-html#S1-1-1-1", "1","CH02.1.1.1.1", 5),
281
- Content.new("ch02.html#S1.1.2", "ch02-html#S1-1-2", "2", "CH02.1.1.2", 4),
282
- Content.new("ch02.html#S2", "ch02-html#S2", "html#s2", "CH02.2", 2),
283
- Content.new("ch02.html#S2.1", "ch02-html#S2-1", "1", "CH02.2.1", 3),
284
- Content.new("ch03.html", "ch03-html", "application/xhtml+xml", "CH03", 1),
285
- Content.new("ch03.html#S1", "ch03-html#S1", "html#s1", "CH03.1", 2),
286
- Content.new("ch03.html#S1.1", "ch03-html#S1-1", "1", "CH03.1.1", 3),
287
- Content.new("ch04.html", "ch04-html", "application/xhtml+xml", "CH04", 1),
288
- Content.new("sample.png", "sample-png", "image/png"),
289
- Content.new("sample.jpg", "sample-jpg", "image/jpeg"),
290
- Content.new("sample.JPEG", "sample-JPEG", "image/jpeg"),
291
- Content.new("sample.SvG", "sample-SvG", "image/svg+xml"),
292
- Content.new("sample.GIF", "sample-GIF", "image/gif"),
293
- Content.new("sample.css", "sample-css", "text/css")
294
- ]
275
+ Content.new("ch01.html", "ch01-html", "application/xhtml+xml", "CH01<>&\"", 1),
276
+ Content.new("ch02.html", "ch02-html", "application/xhtml+xml", "CH02", 1),
277
+ Content.new("ch02.html#S1", "ch02-html#S1","html#s1","CH02.1", 2),
278
+ Content.new("ch02.html#S1.1", "ch02-html#S1-1", "1", "CH02.1.1", 3),
279
+ Content.new("ch02.html#S1.1.1", "ch02-html#S1-1-1","1", "CH02.1.1.1", 4),
280
+ Content.new("ch02.html#S1.1.1.1", "ch02-html#S1-1-1-1", "1","CH02.1.1.1.1", 5),
281
+ Content.new("ch02.html#S1.1.2", "ch02-html#S1-1-2", "2", "CH02.1.1.2", 4),
282
+ Content.new("ch02.html#S2", "ch02-html#S2", "html#s2", "CH02.2", 2),
283
+ Content.new("ch02.html#S2.1", "ch02-html#S2-1", "1", "CH02.2.1", 3),
284
+ Content.new("ch03.html", "ch03-html", "application/xhtml+xml", "CH03", 1),
285
+ Content.new("ch03.html#S1", "ch03-html#S1", "html#s1", "CH03.1", 2),
286
+ Content.new("ch03.html#S1.1", "ch03-html#S1-1", "1", "CH03.1.1", 3),
287
+ Content.new("ch04.html", "ch04-html", "application/xhtml+xml", "CH04", 1),
288
+ Content.new("sample.png", "sample-png", "image/png"),
289
+ Content.new("sample.jpg", "sample-jpg", "image/jpeg"),
290
+ Content.new("sample.JPEG", "sample-JPEG", "image/jpeg"),
291
+ Content.new("sample.SvG", "sample-SvG", "image/svg+xml"),
292
+ Content.new("sample.GIF", "sample-GIF", "image/gif"),
293
+ Content.new("sample.css", "sample-css", "text/css")
294
+ ]
295
295
 
296
296
  assert_equal expect, @producer.contents
297
297
  end
@@ -340,7 +340,7 @@ EOT
340
340
  def test_stage3_ncx
341
341
  stage3
342
342
  @producer.ncx(@output)
343
- expect = <<EOT
343
+ expect = <<EOT
344
344
  <?xml version="1.0" encoding="UTF-8"?>
345
345
  <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
346
346
  <head>
@@ -662,6 +662,57 @@ EOT
662
662
  assert_equal expect, @output.string
663
663
  end
664
664
 
665
+ def test_colophon_history
666
+ @producer.params["aut"] = ["Mr.Smith"]
667
+ @producer.params["pbl"] = ["BLUEPRINT"]
668
+ @producer.params["pht"] = ["Mrs.Smith"]
669
+ @producer.merge_params({"language" => "ja"})
670
+ @producer.params["history"] = [[
671
+ "2011-08-03",
672
+ "2012-02-15",
673
+ ],[
674
+ "2012-10-01",
675
+ ],[
676
+ "2013-03-01",
677
+ ]]
678
+ epub = @producer.instance_eval{@epub}
679
+ result = epub.colophon_history
680
+ expect = <<-EOT
681
+ <div class=\"pubhistory\">
682
+ <p>2011年8月3日 初版第1刷 発行</p>
683
+ <p>2012年2月15日 初版第2刷 発行</p>
684
+ <p>2012年10月1日 第2版第1刷 発行</p>
685
+ <p>2013年3月1日 第3版第1刷 発行</p>
686
+ </div>
687
+ EOT
688
+ assert_equal expect, result
689
+ end
690
+
691
+ def test_colophon_history_freeformat
692
+ @producer.params["aut"] = ["Mr.Smith"]
693
+ @producer.params["pbl"] = ["BLUEPRINT"]
694
+ @producer.params["pht"] = ["Mrs.Smith"]
695
+ @producer.merge_params({"language" => "ja"})
696
+ @producer.params["history"] = [[
697
+ "2011年8月3日 ver 1.1.0発行",
698
+ ],[
699
+ "2011年10月12日 ver 1.2.0発行",
700
+ ],[
701
+ "2012年1月31日 ver 1.2.1発行",
702
+ ]]
703
+
704
+ epub = @producer.instance_eval{@epub}
705
+ result = epub.colophon_history
706
+ expect = <<-EOT
707
+ <div class=\"pubhistory\">
708
+ <p>2011年8月3日 ver 1.1.0発行</p>
709
+ <p>2011年10月12日 ver 1.2.0発行</p>
710
+ <p>2012年1月31日 ver 1.2.1発行</p>
711
+ </div>
712
+ EOT
713
+ assert_equal expect, result
714
+ end
715
+
665
716
  def test_colophon_pht
666
717
  @producer.params["aut"] = ["Mr.Smith"]
667
718
  @producer.params["pbl"] = ["BLUEPRINT"]
@@ -709,13 +760,6 @@ EOT
709
760
  assert_equal nil, @producer.isbn_hyphen
710
761
  end
711
762
 
712
- # def test_duplicate_id
713
- # stage3
714
- # assert_raise(Error) do
715
- # @producer.contents << Content.new({"file" => "ch02.html#S1", "title" => "CH02.1", "level" => 2})
716
- # end
717
- # end
718
-
719
763
  def test_title
720
764
  @producer.params["aut"] = ["Mr.Smith"]
721
765
  @producer.params["pbl"] = ["BLUEPRINT"]
@@ -27,7 +27,7 @@ class EPUBMakerCmdTest < Test::Unit::TestCase
27
27
  if /mswin|mingw|cygwin/ !~ RUBY_PLATFORM
28
28
  config = prepare_samplebook(@tmpdir1)
29
29
  builddir = @tmpdir1 + "/" + config['bookname'] + '-epub'
30
- assert ! File.exist?(builddir)
30
+ assert !File.exist?(builddir)
31
31
 
32
32
  ruby_cmd = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name']) + RbConfig::CONFIG["EXEEXT"]
33
33
  Dir.chdir(@tmpdir1) do
@@ -6,22 +6,26 @@ class TestExtentionsHash < Test::Unit::TestCase
6
6
  assert_equal({:a => 1, :b => 3, :c => 4},
7
7
  {:a => 1, :b => 2}.deep_merge({:b => 3, :c => 4}))
8
8
  end
9
+
9
10
  def test_deep_empty_r
10
11
  assert_equal({:b => 3, :c => 4},
11
12
  {}.deep_merge({:b => 3, :c => 4}))
12
13
  end
14
+
13
15
  def test_deep_empty_l
14
16
  assert_equal({:a => 1, :b => 2},
15
17
  {:a => 1, :b => 2}.deep_merge({}))
16
18
  end
19
+
17
20
  def test_deep_merge_nested
18
21
  assert_equal({:a => {:aa => 1, :ab => 2},
19
22
  :b => {:ba => 5, :bb => 4, :bc => 6},
20
23
  :c => {:ca => 1}},
21
24
  {:a => {:aa => 1, :ab => 2},
22
25
  :b => {:ba => 3, :bb => 4}}.deep_merge({:b => {:ba => 5, :bc => 6},
23
- :c => {:ca => 1}}))
26
+ :c => {:ca => 1}}))
24
27
  end
28
+
25
29
  def test_deep_merge_with_array
26
30
  assert_equal({:a => "string", :b => ["BA"],
27
31
  :c => {:ca => [:cab => "CAB"], :cb => 3}},
@@ -37,16 +41,19 @@ class TestExtentionsHash < Test::Unit::TestCase
37
41
  a.deep_merge!({:b => 3, :c => 4})
38
42
  assert_equal({:a => 1, :b => 3, :c => 4}, a)
39
43
  end
44
+
40
45
  def test_deep_b_empty_r
41
46
  a = {}
42
47
  a.deep_merge!({:b => 3, :c => 4})
43
48
  assert_equal({:b => 3, :c => 4}, a)
44
49
  end
50
+
45
51
  def test_deep_b_empty_l
46
52
  a = {:a => 1, :b => 2}
47
53
  a.deep_merge!({})
48
54
  assert_equal({:a => 1, :b => 2}, a)
49
55
  end
56
+
50
57
  def test_deep_merge_b_nested
51
58
  a = {:a => {:aa => 1, :ab => 2},
52
59
  :b => {:ba => 3, :bb => 4}}
@@ -11,10 +11,10 @@ class HTMLBuidlerTest < Test::Unit::TestCase
11
11
  @builder = HTMLBuilder.new()
12
12
  @config = ReVIEW::Configure.values
13
13
  @config.merge!({
14
- "secnolevel" => 2, # for IDGXMLBuilder, HTMLBuilder
15
- "stylesheet" => nil, # for HTMLBuilder
16
- "htmlext" => "html",
17
- })
14
+ "secnolevel" => 2, # for IDGXMLBuilder, HTMLBuilder
15
+ "stylesheet" => nil, # for HTMLBuilder
16
+ "htmlext" => "html",
17
+ })
18
18
  @book = Book::Base.new(".")
19
19
  @book.config = @config
20
20
  @compiler = ReVIEW::Compiler.new(@builder)
@@ -75,7 +75,6 @@ class HTMLBuidlerTest < Test::Unit::TestCase
75
75
 
76
76
  actual = compile_block("=={test} this is test.\n")
77
77
  assert_equal %Q|\n<h2 id="test"><a id="hI-1"></a><span class="secno">I.1 </span>this is test.</h2>\n|, actual
78
-
79
78
  end
80
79
  end
81
80
  end
@@ -330,6 +329,18 @@ class HTMLBuidlerTest < Test::Unit::TestCase
330
329
  assert_equal "<span class=\"equation\"><math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mfrac><mrow><mo stretchy='false'>-</mo><mi>b</mi><mo stretchy='false'>&#xb1;</mo><msqrt><mrow><msup><mi>b</mi><mn>2</mn></msup><mo stretchy='false'>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></mrow></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></math></span>", actual
331
330
  end
332
331
 
332
+ def test_inline_img
333
+ def @chapter.image(id)
334
+ item = Book::ImageIndex::Item.new("sampleimg", 1, 'sample photo')
335
+ item.instance_eval{@path="./images/chap1-sampleimg.png"}
336
+ item
337
+ end
338
+
339
+ actual = compile_block "@<img>{sampleimg}\n"
340
+ expected = %Q|<p><span class="imgref">図1.1</span></p>\n|
341
+ assert_equal expected, actual
342
+ end
343
+
333
344
  def test_inline_imgref
334
345
  def @chapter.image(id)
335
346
  item = Book::ImageIndex::Item.new("sampleimg", 1, 'sample photo')
@@ -338,7 +349,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
338
349
  end
339
350
 
340
351
  actual = compile_block "@<imgref>{sampleimg}\n"
341
- expected = "<p>図1.1sample photo」</p>\n"
352
+ expected = %Q|<p><span class="imgref">図1.1</span>「sample photo」</p>\n|
342
353
  assert_equal expected, actual
343
354
  end
344
355
 
@@ -350,7 +361,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
350
361
  end
351
362
 
352
363
  actual = compile_block "@<imgref>{sampleimg}\n"
353
- expected = "<p>図1.1</p>\n"
364
+ expected = %Q|<p><span class="imgref">図1.1</span></p>\n|
354
365
  assert_equal expected, actual
355
366
  end
356
367
 
@@ -501,7 +512,31 @@ class HTMLBuidlerTest < Test::Unit::TestCase
501
512
  Book::ListIndex::Item.new("samplelist",1)
502
513
  end
503
514
  actual = compile_block("//list[samplelist][this is @<b>{test}<&>_]{\ntest1\ntest1.5\n\ntest@<i>{2}\n//}\n")
504
- 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|, actual
515
+ assert_equal %Q|<div id="samplelist" 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|, actual
516
+ end
517
+
518
+ def test_inline_list
519
+ def @chapter.list(id)
520
+ Book::ListIndex::Item.new("samplelist",1)
521
+ end
522
+ actual = compile_block("@<list>{sampletest}\n")
523
+ assert_equal %Q|<p><span class="listref">リスト1.1</span></p>\n|, actual
524
+ end
525
+
526
+ def test_inline_list_href
527
+ book = ReVIEW::Book::Base.load
528
+ book.config["chapterlink"] = true
529
+ book.catalog = ReVIEW::Catalog.new({"CHAPS"=>%w(ch1.re ch2.re)})
530
+ io1 = StringIO.new("//list[sampletest]{\nfoo\n//}\n")
531
+ io2 = StringIO.new("= BAR\n")
532
+ chap1 = ReVIEW::Book::Chapter.new(book, 1, 'ch1', 'ch1.re', io1)
533
+ chap2 = ReVIEW::Book::Chapter.new(book, 2, 'ch2', 'ch2.re', io2)
534
+ book.parts = [ReVIEW::Book::Part.new(self, nil, [chap1, chap2])]
535
+ builder = ReVIEW::HTMLBuilder.new
536
+ comp = ReVIEW::Compiler.new(builder)
537
+ builder.bind(comp, chap2, nil)
538
+ actual = builder.inline_list("ch1|sampletest")
539
+ assert_equal %Q|<span class="listref"><a href="./ch1.html#sampletest">リスト1.1</a></span>|, actual
505
540
  end
506
541
 
507
542
  def test_list_pygments
@@ -518,7 +553,17 @@ class HTMLBuidlerTest < Test::Unit::TestCase
518
553
  @book.config["highlight"]["html"] = "pygments"
519
554
  actual = compile_block("//list[samplelist][this is @<b>{test}<&>_]{\ntest1\ntest1.5\n\ntest@<i>{2}\n//}\n")
520
555
 
521
- 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&lt;i&gt;2&lt;/i&gt;\n</pre>\n</div>\n|, actual
556
+ expected = <<-EOS
557
+ <div id="samplelist" class="caption-code">
558
+ <p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>
559
+ <pre class="list highlight">test1
560
+ test1.5
561
+
562
+ test&lt;i&gt;2&lt;/i&gt;
563
+ </pre>
564
+ </div>
565
+ EOS
566
+ assert_equal expected, actual
522
567
  end
523
568
 
524
569
  def test_list_pygments_lang
@@ -535,9 +580,10 @@ class HTMLBuidlerTest < Test::Unit::TestCase
535
580
  @book.config["highlight"]["html"] = "pygments"
536
581
  actual = compile_block("//list[samplelist][this is @<b>{test}<&>_][ruby]{\ndef foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n\n//}\n")
537
582
 
538
- assert_equal %Q|<div class=\"caption-code\">\n<p class=\"caption\">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n| +
539
- %Q|<pre class=\"list language-ruby\"><span style=\"color: #008000; font-weight: bold\">def</span> <span style=\"color: #0000FF\">foo</span>(a1, a2<span style=\"color: #666666\">=</span><span style=\"color: #19177C\">:test</span>)\n| +
540
- %Q| (<span style=\"color: #666666\">1.</span>.<span style=\"color: #666666\">3</span>)<span style=\"color: #666666\">.</span>times{<span style=\"color: #666666\">\|</span>i<span style=\"color: #666666\">\|</span> a<span style=\"color: #666666\">.</span>include?(<span style=\"color: #19177C\">:foo</span>)}\n| +
583
+ assert_equal %Q|<div id="samplelist" class=\"caption-code\">\n| +
584
+ %Q|<p class=\"caption\">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n| +
585
+ %Q|<pre class=\"list language-ruby highlight\"><span style=\"color: #008000; font-weight: bold\">def</span> <span style=\"color: #0000FF\">foo</span>(a1, a2<span style=\"color: #666666\">=</span><span style=\"color: #19177C\">:test</span>)\n| +
586
+ %Q| (<span style=\"color: #666666\">1..3</span>)<span style=\"color: #666666\">.</span>times{<span style=\"color: #666666\">\|</span>i<span style=\"color: #666666\">\|</span> a<span style=\"color: #666666\">.</span>include?(<span style=\"color: #19177C\">:foo</span>)}\n| +
541
587
  %Q| <span style=\"color: #008000; font-weight: bold\">return</span> <span style=\"color: #008000\">true</span>\n| +
542
588
  %Q|<span style=\"color: #008000; font-weight: bold\">end</span>\n| +
543
589
  %Q|</pre>\n| +
@@ -558,7 +604,78 @@ class HTMLBuidlerTest < Test::Unit::TestCase
558
604
  @book.config["highlight"]["html"] = "pygments"
559
605
  actual = compile_block("//list[samplelist][this is @<b>{test}<&>_][]{\ndef foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n\n//}\n")
560
606
 
561
- assert_equal "<div class=\"caption-code\">\n<p class=\"caption\">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n<pre class=\"list\">def foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n</pre>\n</div>\n", actual
607
+ expected = <<-EOS
608
+ <div id="samplelist" class=\"caption-code\">
609
+ <p class=\"caption\">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>
610
+ <pre class=\"list highlight\">def foo(a1, a2=:test)
611
+ (1..3).times{|i| a.include?(:foo)}
612
+ return true
613
+ end
614
+ </pre>
615
+ </div>
616
+ EOS
617
+ assert_equal expected, actual
618
+ end
619
+
620
+ def test_list_rouge
621
+ begin
622
+ require 'rouge'
623
+ rescue LoadError
624
+ $stderr.puts "skip test_list_rouge (cannot find Rouge)"
625
+ return true
626
+ end
627
+ def @chapter.list(id)
628
+ Book::ListIndex::Item.new("samplelist",1)
629
+ end
630
+ @book.config["highlight"] = {}
631
+ @book.config["highlight"]["html"] = "rouge"
632
+ actual = compile_block("//list[samplelist][this is @<b>{test}<&>_]{\ntest1\ntest1.5\n\ntest@<i>{2}\n//}\n")
633
+
634
+ assert_equal %Q|<div id="samplelist" class="caption-code">\n<p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n<pre class="list highlight">test1\ntest1.5\n\ntest&lt;i&gt;2&lt;/i&gt;\n</pre>\n</div>\n|, actual
635
+ end
636
+
637
+ def test_list_rouge_lang
638
+ begin
639
+ require 'rouge'
640
+ rescue LoadError
641
+ $stderr.puts "skip test_list_rouge_lang (cannot find Rouge)"
642
+ return true
643
+ end
644
+ def @chapter.list(id)
645
+ Book::ListIndex::Item.new("samplelist",1)
646
+ end
647
+ @book.config["highlight"] = {}
648
+ @book.config["highlight"]["html"] = "rouge"
649
+ actual = compile_block("//list[samplelist][this is @<b>{test}<&>_][ruby]{\ndef foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n\n//}\n")
650
+
651
+ expected = "<div id=\"samplelist\" class=\"caption-code\">\n" +
652
+ "<p class=\"caption\">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n" +
653
+ "<pre class=\"list language-ruby highlight\"><span class=\"k\">def</span> <span class=\"nf\">foo</span><span class=\"p\">(</span><span class=\"n\">a1</span><span class=\"p\">,</span> <span class=\"n\">a2</span><span class=\"o\">=</span><span class=\"ss\">:test</span><span class=\"p\">)</span>\n" +
654
+ " <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">.</span><span class=\"nf\">.</span><span class=\"mi\">3</span><span class=\"p\">).</span><span class=\"nf\">times</span><span class=\"p\">{</span><span class=\"o\">|</span><span class=\"n\">i</span><span class=\"o\">|</span> <span class=\"n\">a</span><span class=\"p\">.</span><span class=\"nf\">include?</span><span class=\"p\">(</span><span class=\"ss\">:foo</span><span class=\"p\">)}</span>\n" +
655
+ " <span class=\"k\">return</span> <span class=\"kp\">true</span>\n" +
656
+ "<span class=\"k\">end</span>\n" +
657
+ "\n" +
658
+ "</pre>\n" +
659
+ "</div>\n"
660
+
661
+ assert_equal expected, actual
662
+ end
663
+
664
+ def test_list_rouge_nulllang
665
+ begin
666
+ require 'rouge'
667
+ rescue LoadError
668
+ $stderr.puts "skip test_list_rouge_nulllang (cannot find Rouge)"
669
+ return true
670
+ end
671
+ def @chapter.list(id)
672
+ Book::ListIndex::Item.new("samplelist",1)
673
+ end
674
+ @book.config["highlight"] = {}
675
+ @book.config["highlight"]["html"] = "rouge"
676
+ actual = compile_block("//list[samplelist][this is @<b>{test}<&>_][]{\ndef foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n\n//}\n")
677
+
678
+ assert_equal "<div id=\"samplelist\" class=\"caption-code\">\n<p class=\"caption\">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n<pre class=\"list highlight\">def foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n\n</pre>\n</div>\n", actual
562
679
  end
563
680
 
564
681
  def test_list_ext
@@ -566,7 +683,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
566
683
  Book::ListIndex::Item.new("samplelist.rb",1)
567
684
  end
568
685
  actual = compile_block("//list[samplelist.rb][this is @<b>{test}<&>_]{\ntest1\ntest1.5\n\ntest@<i>{2}\n//}\n")
569
- 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 language-rb">test1\ntest1.5\n\ntest<i>2</i>\n</pre>\n</div>\n|, actual
686
+ assert_equal %Q|<div id="samplelist.rb" class="caption-code">\n<p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n<pre class="list language-rb">test1\ntest1.5\n\ntest<i>2</i>\n</pre>\n</div>\n|, actual
570
687
  end
571
688
 
572
689
  def test_listnum
@@ -585,7 +702,7 @@ end
585
702
  EOS
586
703
 
587
704
  expected =<<-EOS
588
- <div class="code">
705
+ <div id="samplelist" class="code">
589
706
  <p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>
590
707
  <pre class="list language-ruby"> 1: def foo(a1, a2=:test)
591
708
  2: (1..3).times{|i| a.include?(:foo)}
@@ -598,6 +715,36 @@ EOS
598
715
  assert_equal expected, actual
599
716
  end
600
717
 
718
+ def test_listnum_linenum
719
+ def @chapter.list(id)
720
+ Book::ListIndex::Item.new("samplelist",1)
721
+ end
722
+
723
+ @book.config["highlight"] = false
724
+ actual = compile_block(<<-EOS)
725
+ //firstlinenum[100]
726
+ //listnum[samplelist][this is @<b>{test}<&>_][ruby]{
727
+ def foo(a1, a2=:test)
728
+ (1..3).times{|i| a.include?(:foo)}
729
+ return true
730
+ end
731
+ //}
732
+ EOS
733
+
734
+ expected =<<-EOS
735
+ <div id="samplelist" class="code">
736
+ <p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>
737
+ <pre class="list language-ruby">100: def foo(a1, a2=:test)
738
+ 101: (1..3).times{|i| a.include?(:foo)}
739
+ 102: return true
740
+ 103: end
741
+ </pre>
742
+ </div>
743
+ EOS
744
+
745
+ assert_equal expected, actual
746
+ end
747
+
601
748
  def test_listnum_pygments_lang
602
749
  def @chapter.list(id)
603
750
  Book::ListIndex::Item.new("samplelist",1)
@@ -612,7 +759,45 @@ EOS
612
759
  @book.config["highlight"]["html"] = "pygments"
613
760
  actual = compile_block("//listnum[samplelist][this is @<b>{test}<&>_][ruby]{\ndef foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n\n//}\n")
614
761
 
615
- assert_equal "<div class=\"code\">\n<p class=\"caption\">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n<div class=\"highlight\" style=\"background: #f8f8f8\"><pre style=\"line-height: 125%\"><span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">1</span> <span style=\"color: #008000; font-weight: bold\">def</span> <span style=\"color: #0000FF\">foo</span>(a1, a2<span style=\"color: #666666\">=</span><span style=\"color: #19177C\">:test</span>)\n<span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">2</span> (<span style=\"color: #666666\">1.</span>.<span style=\"color: #666666\">3</span>)<span style=\"color: #666666\">.</span>times{<span style=\"color: #666666\">|</span>i<span style=\"color: #666666\">|</span> a<span style=\"color: #666666\">.</span>include?(<span style=\"color: #19177C\">:foo</span>)}\n<span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">3</span> <span style=\"color: #008000; font-weight: bold\">return</span> <span style=\"color: #008000\">true</span>\n<span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">4</span> <span style=\"color: #008000; font-weight: bold\">end</span>\n</pre></div>\n</div>\n", actual
762
+ expected = <<-EOS
763
+ <div id="samplelist" class="code">
764
+ <p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>
765
+ <div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%"><span></span><span style="background-color: #f0f0f0; padding: 0 5px 0 5px">1 </span><span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">foo</span>(a1, a2<span style="color: #666666">=</span><span style="color: #19177C">:test</span>)
766
+ <span style="background-color: #f0f0f0; padding: 0 5px 0 5px">2 </span> (<span style="color: #666666">1..3</span>)<span style="color: #666666">.</span>times{<span style="color: #666666">|</span>i<span style="color: #666666">|</span> a<span style="color: #666666">.</span>include?(<span style="color: #19177C">:foo</span>)}
767
+ <span style="background-color: #f0f0f0; padding: 0 5px 0 5px">3 </span> <span style="color: #008000; font-weight: bold">return</span> <span style="color: #008000">true</span>
768
+ <span style="background-color: #f0f0f0; padding: 0 5px 0 5px">4 </span><span style="color: #008000; font-weight: bold">end</span>
769
+ </pre></div>
770
+ </div>
771
+ EOS
772
+ assert_equal expected, actual
773
+ end
774
+
775
+ def test_listnum_pygments_lang_linenum
776
+ def @chapter.list(id)
777
+ Book::ListIndex::Item.new("samplelist",1)
778
+ end
779
+ begin
780
+ require 'pygments'
781
+ rescue LoadError
782
+ $stderr.puts "skip test_listnum_pygments_lang (cannot find pygments.rb)"
783
+ return true
784
+ end
785
+ @book.config["highlight"] = {}
786
+ @book.config["highlight"]["html"] = "pygments"
787
+ actual = compile_block("//firstlinenum[100]\n//listnum[samplelist][this is @<b>{test}<&>_][ruby]{\ndef foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n\n//}\n")
788
+
789
+ expected = <<-EOB
790
+ <div id=\"samplelist\" class=\"code\">
791
+ <p class=\"caption\">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>
792
+ <div class=\"highlight\" style=\"background: #f8f8f8\"><pre style=\"line-height: 125%\"><span></span><span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">100 </span><span style=\"color: #008000; font-weight: bold\">def</span> <span style=\"color: #0000FF\">foo</span>(a1, a2<span style=\"color: #666666\">=</span><span style=\"color: #19177C\">:test</span>)
793
+ <span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">101 </span> (<span style=\"color: #666666\">1..3</span>)<span style=\"color: #666666\">.</span>times{<span style=\"color: #666666\">|</span>i<span style=\"color: #666666\">|</span> a<span style=\"color: #666666\">.</span>include?(<span style=\"color: #19177C\">:foo</span>)}
794
+ <span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">102 </span> <span style=\"color: #008000; font-weight: bold\">return</span> <span style=\"color: #008000\">true</span>
795
+ <span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">103 </span><span style=\"color: #008000; font-weight: bold\">end</span>
796
+ </pre></div>
797
+ </div>
798
+ EOB
799
+
800
+ assert_equal expected, actual
616
801
  end
617
802
 
618
803
  def test_listnum_pygments_lang_without_lang
@@ -630,9 +815,69 @@ EOS
630
815
  @book.config["highlight"]["lang"] = "ruby"
631
816
  actual = compile_block("//listnum[samplelist][this is @<b>{test}<&>_]{\ndef foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n\n//}\n")
632
817
 
633
- assert_equal "<div class=\"code\">\n<p class=\"caption\">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n<div class=\"highlight\" style=\"background: #f8f8f8\"><pre style=\"line-height: 125%\"><span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">1</span> <span style=\"color: #008000; font-weight: bold\">def</span> <span style=\"color: #0000FF\">foo</span>(a1, a2<span style=\"color: #666666\">=</span><span style=\"color: #19177C\">:test</span>)\n<span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">2</span> (<span style=\"color: #666666\">1.</span>.<span style=\"color: #666666\">3</span>)<span style=\"color: #666666\">.</span>times{<span style=\"color: #666666\">|</span>i<span style=\"color: #666666\">|</span> a<span style=\"color: #666666\">.</span>include?(<span style=\"color: #19177C\">:foo</span>)}\n<span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">3</span> <span style=\"color: #008000; font-weight: bold\">return</span> <span style=\"color: #008000\">true</span>\n<span style=\"background-color: #f0f0f0; padding: 0 5px 0 5px\">4</span> <span style=\"color: #008000; font-weight: bold\">end</span>\n</pre></div>\n</div>\n", actual
818
+ expected = <<-EOS
819
+ <div id="samplelist" class="code">
820
+ <p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>
821
+ <div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%"><span></span><span style="background-color: #f0f0f0; padding: 0 5px 0 5px">1 </span><span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">foo</span>(a1, a2<span style="color: #666666">=</span><span style="color: #19177C">:test</span>)
822
+ <span style="background-color: #f0f0f0; padding: 0 5px 0 5px">2 </span> (<span style="color: #666666">1..3</span>)<span style="color: #666666">.</span>times{<span style="color: #666666">|</span>i<span style="color: #666666">|</span> a<span style="color: #666666">.</span>include?(<span style="color: #19177C">:foo</span>)}
823
+ <span style="background-color: #f0f0f0; padding: 0 5px 0 5px">3 </span> <span style="color: #008000; font-weight: bold">return</span> <span style="color: #008000">true</span>
824
+ <span style="background-color: #f0f0f0; padding: 0 5px 0 5px">4 </span><span style="color: #008000; font-weight: bold">end</span>
825
+ </pre></div>
826
+ </div>
827
+ EOS
828
+ assert_equal expected, actual
634
829
  end
635
830
 
831
+ def test_listnum_rouge_lang
832
+ begin
833
+ require 'rouge'
834
+ rescue LoadError
835
+ $stderr.puts "skip test_listnum_rouge_lang (cannot find Rouge)"
836
+ return true
837
+ end
838
+ def @chapter.list(id)
839
+ Book::ListIndex::Item.new("samplelist",1)
840
+ end
841
+ @book.config["highlight"] = {}
842
+ @book.config["highlight"]["html"] = "rouge"
843
+ actual = compile_block("//listnum[samplelist][this is @<b>{test}<&>_][ruby]{\ndef foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n\n//}\n")
844
+
845
+ assert_equal "<div id=\"samplelist\" class=\"code\">\n<p class=\"caption\">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>\n<table class=\"highlight rouge-table\"><tbody><tr><td class=\"rouge-gutter gl\"><pre class=\"lineno\">1\n2\n3\n4\n5\n</pre></td><td class=\"rouge-code\"><pre><span class=\"k\">def</span> <span class=\"nf\">foo</span><span class=\"p\">(</span><span class=\"n\">a1</span><span class=\"p\">,</span> <span class=\"n\">a2</span><span class=\"o\">=</span><span class=\"ss\">:test</span><span class=\"p\">)</span>\n <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">.</span><span class=\"nf\">.</span><span class=\"mi\">3</span><span class=\"p\">).</span><span class=\"nf\">times</span><span class=\"p\">{</span><span class=\"o\">|</span><span class=\"n\">i</span><span class=\"o\">|</span> <span class=\"n\">a</span><span class=\"p\">.</span><span class=\"nf\">include?</span><span class=\"p\">(</span><span class=\"ss\">:foo</span><span class=\"p\">)}</span>\n <span class=\"k\">return</span> <span class=\"kp\">true</span>\n<span class=\"k\">end</span>\n\n</pre></td></tr></tbody></table>\n</div>\n", actual
846
+ end
847
+
848
+ def test_listnum_rouge_lang_linenum
849
+ begin
850
+ require 'rouge'
851
+ rescue LoadError
852
+ $stderr.puts "skip test_listnum_rouge_lang_linenum (cannot find Rouge)"
853
+ return true
854
+ end
855
+ def @chapter.list(id)
856
+ Book::ListIndex::Item.new("samplelist",1)
857
+ end
858
+ @book.config["highlight"] = {}
859
+ @book.config["highlight"]["html"] = "rouge"
860
+ actual = compile_block("//firstlinenum[100]\n//listnum[samplelist][this is @<b>{test}<&>_][ruby]{\ndef foo(a1, a2=:test)\n (1..3).times{|i| a.include?(:foo)}\n return true\nend\n\n//}\n")
861
+
862
+ expected = <<-EOB
863
+ <div id="samplelist" class="code">
864
+ <p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>
865
+ <table class="highlight rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">100
866
+ 101
867
+ 102
868
+ 103
869
+ 104
870
+ </pre></td><td class="rouge-code"><pre><span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="n">a1</span><span class="p">,</span> <span class="n">a2</span><span class="o">=</span><span class="ss">:test</span><span class="p">)</span>
871
+ <span class="p">(</span><span class="mi">1</span><span class="p">.</span><span class="nf">.</span><span class="mi">3</span><span class="p">).</span><span class="nf">times</span><span class="p">{</span><span class="o">|</span><span class="n">i</span><span class="o">|</span> <span class="n">a</span><span class="p">.</span><span class="nf">include?</span><span class="p">(</span><span class="ss">:foo</span><span class="p">)}</span>
872
+ <span class="k">return</span> <span class="kp">true</span>
873
+ <span class="k">end</span>
874
+
875
+ </pre></td></tr></tbody></table>
876
+ </div>
877
+ EOB
878
+
879
+ assert_equal expected, actual
880
+ end
636
881
 
637
882
  def test_emlist
638
883
  actual = compile_block("//emlist{\nlineA\nlineB\n//}\n")
@@ -649,7 +894,13 @@ EOS
649
894
  @book.config["highlight"] = {}
650
895
  @book.config["highlight"]["html"] = "pygments"
651
896
  actual = compile_block("//emlist[][sql]{\nSELECT COUNT(*) FROM tests WHERE tests.no > 10 AND test.name LIKE 'ABC%'\n//}\n")
652
- assert_equal "<div class=\"emlist-code\">\n<pre class=\"emlist language-sql\"><span style=\"color: #008000; font-weight: bold\">SELECT</span> <span style=\"color: #008000; font-weight: bold\">COUNT</span>(<span style=\"color: #666666\">*</span>) <span style=\"color: #008000; font-weight: bold\">FROM</span> tests <span style=\"color: #008000; font-weight: bold\">WHERE</span> tests.<span style=\"color: #008000; font-weight: bold\">no</span> <span style=\"color: #666666\">&gt;</span> <span style=\"color: #666666\">10</span> <span style=\"color: #008000; font-weight: bold\">AND</span> test.name <span style=\"color: #008000; font-weight: bold\">LIKE</span> <span style=\"color: #BA2121\">&#39;ABC%&#39;</span>\n</pre>\n</div>\n", actual
897
+ expected = <<-EOS
898
+ <div class="emlist-code">
899
+ <pre class="emlist language-sql highlight"><span style="color: #008000; font-weight: bold">SELECT</span> <span style="color: #008000; font-weight: bold">COUNT</span>(<span style="color: #666666">*</span>) <span style="color: #008000; font-weight: bold">FROM</span> tests <span style="color: #008000; font-weight: bold">WHERE</span> tests.<span style="color: #008000; font-weight: bold">no</span> <span style="color: #666666">&gt;</span> <span style="color: #666666">10</span> <span style="color: #008000; font-weight: bold">AND</span> test.name <span style="color: #008000; font-weight: bold">LIKE</span> <span style="color: #BA2121">&#39;ABC%&#39;</span>
900
+ </pre>
901
+ </div>
902
+ EOS
903
+ assert_equal expected, actual
653
904
  end
654
905
 
655
906
  def test_emlist_caption
@@ -689,6 +940,20 @@ EOS
689
940
  assert_equal expected, actual
690
941
  end
691
942
 
943
+ def test_emlistnum_lang_linenum
944
+ @book.config["highlight"] = false
945
+ actual = compile_block("//firstlinenum[1000]\n//emlistnum[cap][text]{\nlineA\nlineB\n//}\n")
946
+ expected =<<-EOS
947
+ <div class="emlistnum-code">
948
+ <p class="caption">cap</p>
949
+ <pre class="emlist language-text">1000: lineA
950
+ 1001: lineB
951
+ </pre>
952
+ </div>
953
+ EOS
954
+ assert_equal expected, actual
955
+ end
956
+
692
957
  def test_emlist_with_4tab
693
958
  @config["tabwidth"] = 4
694
959
  actual = compile_block("//emlist{\n\tlineA\n\t\tlineB\n\tlineC\n//}\n")
@@ -1057,6 +1322,63 @@ EOS
1057
1322
  assert_equal "nor\nmal", compile_inline("@<raw>{|html|nor\\nmal}")
1058
1323
  end
1059
1324
 
1325
+ def test_inline_embed0
1326
+ assert_equal "normal", compile_inline("@<embed>{normal}")
1327
+ end
1328
+
1329
+ def test_inline_embed1
1330
+ assert_equal "body", compile_inline("@<embed>{|html|body}")
1331
+ end
1332
+
1333
+ def test_inline_embed3
1334
+ assert_equal "", compile_inline("@<embed>{|idgxml, latex|body}")
1335
+ end
1336
+
1337
+ def test_inline_embed5
1338
+ assert_equal 'nor\\nmal', compile_inline("@<embed>{|html|nor\\nmal}")
1339
+ end
1340
+
1341
+ def test_inline_embed_math1
1342
+ assert_equal '\[ \frac{\partial f}{\partial x} =x^2+xy \]', compile_inline('@<embed>{\[ \frac{\partial f\}{\partial x\} =x^2+xy \]}')
1343
+ end
1344
+
1345
+ def test_inline_embed_math1a
1346
+ assert_equal '\[ \frac{\partial f}{\partial x} =x^2+xy \]', compile_inline('@<embed>{\\[ \\frac{\\partial f\}{\\partial x\} =x^2+xy \\]}')
1347
+ end
1348
+
1349
+ def test_inline_embed_math1b
1350
+ assert_equal '\[ \frac{\partial f}{\partial x} =x^2+xy \]', compile_inline('@<embed>{\\\\[ \\\\frac{\\\\partial f\}{\\\\partial x\} =x^2+xy \\\\]}')
1351
+ end
1352
+
1353
+ def test_inline_embed_math1c
1354
+ assert_equal '\\[ \\frac{}{} \\]',
1355
+ compile_inline('@<embed>{\[ \\frac{\}{\} \\]}')
1356
+ end
1357
+
1358
+ def test_inline_embed_n1
1359
+ assert_equal '\\n', compile_inline('@<embed>{\\n}')
1360
+ end
1361
+
1362
+ def test_inline_embed_n2
1363
+ assert_equal '\\n', compile_inline('@<embed>{\\\\n}')
1364
+ end
1365
+
1366
+ def test_inline_embed_brace_right0
1367
+ assert_equal '}', compile_inline('@<embed>{\\}}')
1368
+ end
1369
+
1370
+ def test_inline_embed_brace_right1
1371
+ assert_equal '\\}', compile_inline('@<embed>{\\\\}}')
1372
+ end
1373
+
1374
+ def test_inline_embed_brace_right2
1375
+ assert_equal '\\}', compile_inline('@<embed>{\\\\\\}}')
1376
+ end
1377
+
1378
+ def test_inline_embed_brace_right3
1379
+ assert_equal '\\\\}', compile_inline('@<embed>{\\\\\\\\}}')
1380
+ end
1381
+
1060
1382
  def test_block_raw0
1061
1383
  actual = compile_block("//raw[<>!\"\\n& ]\n")
1062
1384
  expected = %Q(<>!\"\n& )
@@ -1087,6 +1409,48 @@ EOS
1087
1409
  assert_equal expected, actual
1088
1410
  end
1089
1411
 
1412
+ def test_embed0
1413
+ lines = '//embed{' + "\n" +
1414
+ ' <>!\\"\\\\n& ' + "\n" +
1415
+ '//}' + "\n"
1416
+ actual = compile_block(lines)
1417
+ expected = ' <>!\\"\\\\n& ' + "\n"
1418
+ assert_equal expected, actual
1419
+ end
1420
+
1421
+ def test_embed1
1422
+ actual = compile_block("//embed[|html|]{\n" +
1423
+ "<>!\\\"\\\\n& \n" +
1424
+ "//}\n")
1425
+ expected = %Q(<>!\\\"\\\\n& \n)
1426
+ assert_equal expected, actual
1427
+ end
1428
+
1429
+ def test_embed2
1430
+ actual = compile_block("//embed[html, latex]{\n" +
1431
+ "<>!\\\"\\\\n& \n" +
1432
+ "//}\n")
1433
+ expected = %Q(<>!\\\"\\\\n& \n)
1434
+ assert_equal expected, actual
1435
+ end
1436
+
1437
+ def test_embed2a
1438
+ actual = compile_block("//embed[|html, latex|]{\n" +
1439
+ "<>!\\\"\\\\n& \n" +
1440
+ "//}\n")
1441
+ expected = %Q(<>!\\\"\\\\n& \n)
1442
+ assert_equal expected, actual
1443
+ end
1444
+
1445
+ def test_embed2b
1446
+ actual = compile_block("//embed[html, latex]{\n" +
1447
+ '#@# comments are not ignored in //embed block' + "\n" +
1448
+ "<>!\\\"\\\\n& \n" +
1449
+ "//}\n")
1450
+ expected = '#@# comments are not ignored in //embed block' + "\n" + %Q(<>!\\\"\\\\n& \n)
1451
+ assert_equal expected, actual
1452
+ end
1453
+
1090
1454
  def test_inline_fn
1091
1455
  fn = Book::FootnoteIndex.parse(['//footnote[foo][bar\\a\\$buz]'])
1092
1456
  @chapter.instance_eval{@footnote_index=fn}
@@ -1144,6 +1508,14 @@ EOS
1144
1508
  actual
1145
1509
  end
1146
1510
 
1511
+ def test_inline_table
1512
+ def @chapter.table(id)
1513
+ Book::TableIndex::Item.new("sampletable",1)
1514
+ end
1515
+ actual = compile_block("@<table>{sampletest}\n")
1516
+ assert_equal %Q|<p><span class="tableref">表1.1</span></p>\n|, actual
1517
+ end
1518
+
1147
1519
  def test_imgtable
1148
1520
  def @chapter.image(id)
1149
1521
  item = Book::ImageIndex::Item.new("sampleimg",1, 'sample img')
@@ -1190,4 +1562,25 @@ EOS
1190
1562
  assert_equal expected, actual
1191
1563
  end
1192
1564
 
1565
+ def test_comment
1566
+ actual = compile_block("//comment[コメント]")
1567
+ assert_equal %Q||, actual
1568
+ end
1569
+
1570
+ def test_comment_for_draft
1571
+ @config["draft"] = true
1572
+ actual = compile_block("//comment[コメント]")
1573
+ assert_equal %Q|<div class="draft-comment">コメント</div>\n|, actual
1574
+ end
1575
+
1576
+ def test_inline_comment
1577
+ actual = compile_inline("test @<comment>{コメント} test2")
1578
+ assert_equal %Q|test test2|, actual
1579
+ end
1580
+
1581
+ def test_inline_comment_for_draft
1582
+ @config["draft"] = true
1583
+ actual = compile_inline("test @<comment>{コメント} test2")
1584
+ assert_equal %Q|test <span class="draft-comment">コメント</span> test2|, actual
1585
+ end
1193
1586
  end