review 1.7.2 → 2.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -43
  3. data/.travis.yml +0 -9
  4. data/ChangeLog +0 -16
  5. data/Gemfile +1 -0
  6. data/README.rdoc +1 -1
  7. data/Rakefile +12 -1
  8. data/bin/review-check +21 -8
  9. data/bin/review-compile +15 -9
  10. data/bin/review-epubmaker-legacy +6 -6
  11. data/bin/review-index +13 -2
  12. data/bin/review-init +18 -12
  13. data/bin/review-preproc +14 -1
  14. data/bin/review-validate +1 -1
  15. data/bin/review-vol +13 -1
  16. data/doc/quickstart.ja.md +1 -1
  17. data/doc/quickstart.md +1 -1
  18. data/lib/epubmaker/content.rb +3 -3
  19. data/lib/epubmaker/epubcommon.rb +108 -91
  20. data/lib/epubmaker/epubv2.rb +67 -14
  21. data/lib/epubmaker/epubv3.rb +59 -25
  22. data/lib/epubmaker/producer.rb +1 -13
  23. data/lib/lineinput.rb +0 -48
  24. data/lib/review/book/base.rb +4 -12
  25. data/lib/review/book/compilable.rb +3 -1
  26. data/lib/review/book/index.rb +4 -4
  27. data/lib/review/builder.rb +54 -47
  28. data/lib/review/compiler.rb +4662 -326
  29. data/lib/review/compiler/literals_1_8.kpeg +19 -0
  30. data/lib/review/compiler/literals_1_8.rb +432 -0
  31. data/lib/review/compiler/literals_1_9.kpeg +22 -0
  32. data/lib/review/compiler/literals_1_9.rb +435 -0
  33. data/lib/review/configure.rb +8 -20
  34. data/lib/review/epubbuilder.rb +1 -1
  35. data/lib/review/epubmaker.rb +122 -52
  36. data/lib/review/ewbbuilder.rb +4 -4
  37. data/lib/review/exception.rb +1 -1
  38. data/lib/review/extentions.rb +1 -0
  39. data/lib/review/extentions/array.rb +25 -0
  40. data/lib/review/htmlbuilder.rb +286 -275
  41. data/lib/review/htmllayout.rb +0 -2
  42. data/lib/review/htmlutils.rb +4 -4
  43. data/lib/review/i18n.rb +2 -6
  44. data/lib/review/i18n.yml +1 -1
  45. data/lib/review/idgxmlbuilder.rb +239 -204
  46. data/lib/review/inaobuilder.rb +75 -73
  47. data/lib/review/latexbuilder.rb +265 -219
  48. data/lib/review/latexutils.rb +6 -6
  49. data/lib/review/layout.tex.erb +1 -1
  50. data/lib/review/location.rb +24 -0
  51. data/lib/review/markdownbuilder.rb +124 -79
  52. data/lib/review/node.rb +267 -0
  53. data/lib/review/pdfmaker.rb +92 -92
  54. data/lib/review/preprocessor.rb +51 -14
  55. data/lib/review/review.kpeg +724 -0
  56. data/lib/review/textbuilder.rb +1 -1
  57. data/lib/review/textutils.rb +24 -18
  58. data/lib/review/tocparser.rb +3 -3
  59. data/lib/review/tocprinter.rb +31 -8
  60. data/lib/review/topbuilder.rb +119 -111
  61. data/lib/review/unfold.rb +2 -2
  62. data/lib/review/version.rb +1 -1
  63. data/review.gemspec +2 -2
  64. data/rubocop-todo.yml +456 -0
  65. data/test/assets/test_template.tex +1 -1
  66. data/test/sample-book/src/config.yml +0 -1
  67. data/test/test.re +1 -1
  68. data/test/test_book.rb +4 -4
  69. data/test/test_book_chapter.rb +70 -0
  70. data/test/test_book_part.rb +1 -1
  71. data/test/test_builder.rb +6 -28
  72. data/test/test_compiler.rb +59 -14
  73. data/test/test_helper.rb +47 -4
  74. data/test/test_htmlbuilder.rb +104 -73
  75. data/test/test_i18n.rb +5 -3
  76. data/test/test_idgxmlbuilder.rb +5 -2
  77. data/test/test_inaobuilder.rb +4 -2
  78. data/test/test_latexbuilder.rb +18 -37
  79. data/test/test_lineinput.rb +25 -4
  80. data/test/test_markdownbuilder.rb +4 -22
  81. data/test/test_pdfmaker.rb +12 -11
  82. data/test/test_textutils.rb +0 -36
  83. data/test/test_topbuilder.rb +2 -0
  84. metadata +14 -28
  85. data/.rubocop_todo.yml +0 -605
  86. data/Dockerfile +0 -22
  87. data/doc/NEWS.ja.md +0 -362
  88. data/doc/NEWS.md +0 -366
  89. data/lib/review/htmltoc.rb +0 -45
  90. data/lib/review/template.rb +0 -21
  91. data/templates/html/layout-html5.html.erb +0 -17
  92. data/templates/html/layout-xhtml1.html.erb +0 -20
  93. data/templates/ncx/epubv2.ncx.erb +0 -11
  94. data/templates/opf/epubv2.opf.erb +0 -21
  95. data/templates/opf/epubv3.opf.erb +0 -18
  96. data/templates/xml/container.xml.erb +0 -6
  97. data/test/assets/test.xml.erb +0 -3
  98. data/test/sample-book/src/config-epub2.yml +0 -186
  99. data/test/test_configure.rb +0 -50
  100. data/test/test_htmltoc.rb +0 -32
  101. data/test/test_template.rb +0 -26
@@ -205,7 +205,7 @@
205
205
 
206
206
  \end{tabular}\par}%
207
207
  \vfill
208
- {\large 2011-01-01 版\hspace{2zw} 発行\par}%
208
+ {\large 2011-01-01 version\hspace{2zw} 発行\par}%
209
209
  \vskip4zw\mbox{}
210
210
  \end{center}%
211
211
  \end{titlepage}
@@ -67,7 +67,6 @@ rights: (C) 2011 Masayoshi Takahashi
67
67
  # coverage: 内容の範囲や領域
68
68
 
69
69
  # htmlext: HTMLファイルの拡張子(省略した場合はhtml)
70
- htmlext: xhtml
71
70
  # CSSファイル(配列で複数指定可、yamlファイルおよびRe:VIEWファイルを置いたディレクトリにあること)
72
71
  stylesheet: ["style.css"]
73
72
 
data/test/test.re CHANGED
@@ -1,7 +1,7 @@
1
1
  = 見出し
2
2
  以下を実行
3
3
  //emlist{
4
- ./bin/review-compile --hdnumberingmode test.re --target=html
4
+ ./bin/review-compile --inencoding=UTF-8 --outencoding=UTF-8 --hdnumberingmode test.re --target=html
5
5
  }
6
6
  == 節1
7
7
 
data/test/test_book.rb CHANGED
@@ -158,14 +158,14 @@ class BookTest < Test::Unit::TestCase
158
158
  def test_setParameter
159
159
  book = Book::Base.new(File.dirname(__FILE__))
160
160
  book.param = :test
161
- assert_equal :test, book.param # old way
161
+ assert_equal :test, book.param # old way
162
162
  assert_equal :test, book.config # new way
163
163
  end
164
164
 
165
165
  def test_setConfig
166
166
  book = Book::Base.new(File.dirname(__FILE__))
167
167
  book.config = :test
168
- assert_equal :test, book.param # old way
168
+ assert_equal :test, book.param # old way
169
169
  assert_equal :test, book.config # new way
170
170
  end
171
171
 
@@ -391,7 +391,7 @@ EOC
391
391
  end
392
392
 
393
393
  mktmpbookdir 'catalog.yml' => "APPENDIX:\n - p01.re",
394
- 'p01.re' => '= appendix' do |dir, book, files|
394
+ 'p01.re' => '= appendix' do |dir, book, files|
395
395
  assert_equal 'appendix', book.appendix.chapters.first.title
396
396
  assert_equal 1, book.appendix.chapters.first.number
397
397
  end
@@ -399,7 +399,7 @@ EOC
399
399
 
400
400
  def test_postscripts
401
401
  mktmpbookdir 'catalog.yml' => "POSTDEF:\n - b01.re",
402
- 'b01.re' => '= back' do |dir, book, files|
402
+ 'b01.re' => '= back' do |dir, book, files|
403
403
  assert_kind_of Book::Part, book.postscripts
404
404
  assert_equal 1, book.postscripts.chapters.size
405
405
  assert_equal 'back', book.postscripts.chapters.first.title
@@ -3,6 +3,21 @@ require 'book_test_helper'
3
3
  class ChapterTest < Test::Unit::TestCase
4
4
  include BookTestHelper
5
5
 
6
+ def setup
7
+
8
+ if "".respond_to?(:encode)
9
+ @utf8_str = "あいうえお"
10
+ @eucjp_str = "あいうえお".encode("EUC-JP")
11
+ @sjis_str = "あいうえお".encode("Shift_JIS")
12
+ @jis_str = "あいうえお".encode("ISO-2022-JP")
13
+ else
14
+ @utf8_str = "\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a" # "あいうえお"
15
+ @eucjp_str = "\xa4\xa2\xa4\xa4\xa4\xa6\xa4\xa8\xa4\xaa"
16
+ @sjis_str = "\x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8"
17
+ @jis_str = "\x1b\x24\x42\x24\x22\x24\x24\x24\x26\x24\x28\x24\x2a\x1b\x28\x42"
18
+ end
19
+ end
20
+
6
21
  def test_initialize
7
22
  ch = Book::Chapter.new(:book, :number, :name, '/foo/bar', :io)
8
23
  assert_equal :book, ch.book
@@ -67,6 +82,60 @@ class ChapterTest < Test::Unit::TestCase
67
82
  io = StringIO.new("=1\n=2\n")
68
83
  ch = Book::Chapter.new(book, nil, nil, nil, io)
69
84
  assert_equal '1', ch.title
85
+
86
+
87
+ [
88
+ ['EUC', @eucjp_str],
89
+ ['SJIS', @sjis_str],
90
+ # ['JIS', @jis_str],
91
+ ['XYZ', @eucjp_str],
92
+ ].each do |enc, instr|
93
+ io = StringIO.new("= #{instr}\n")
94
+ ch = Book::Chapter.new(book, nil, nil, nil, io)
95
+ book.config['inencoding'] = enc
96
+ assert_equal @utf8_str, ch.title
97
+ assert_equal @utf8_str, ch.instance_eval { @title }
98
+ end
99
+ end
100
+
101
+ def test_content
102
+ [
103
+ ['EUC', @eucjp_str],
104
+ ['SJIS', @sjis_str],
105
+ ['JIS', @jis_str],
106
+ ['XYZ', @eucjp_str],
107
+ ].each do |enc, instr|
108
+ tf = Tempfile.new('chapter_test')
109
+ book = Book::Base.new(nil)
110
+ begin
111
+ tf.print instr
112
+ tf.close
113
+
114
+ ch = Book::Chapter.new(book, nil, nil, tf.path)
115
+ book.config['inencoding'] = enc
116
+ assert_equal @utf8_str, ch.content
117
+ assert_equal @utf8_str, ch.instance_eval { @content }
118
+ ensure
119
+ tf.close(true)
120
+ end
121
+
122
+ tf1 = Tempfile.new('chapter_test1')
123
+ tf2 = Tempfile.new('chapter_test2')
124
+ begin
125
+ tf1.puts instr
126
+ tf1.puts instr
127
+ tf1.close
128
+ tf2.puts instr
129
+ tf1.close
130
+
131
+ ch = Book::Chapter.new(book, nil, nil, tf1.path, tf2)
132
+ book.config['inencoding'] = enc
133
+ assert_equal "#{@utf8_str}\n#{@utf8_str}\n", ch.content # XXX: OK?
134
+ ensure
135
+ tf1.close(true)
136
+ tf2.close(true)
137
+ end
138
+ end
70
139
  end
71
140
 
72
141
  def test_lines
@@ -207,6 +276,7 @@ E
207
276
 
208
277
  def test_column_index
209
278
  book = Book::Base.new(nil)
279
+ book.config["inencoding"] = "utf-8"
210
280
  do_test_index(<<E, Book::ColumnIndex, :column_index, :column, :propagate => false)
211
281
  = dummy1
212
282
  ===[column]{abc} aaaa
@@ -33,7 +33,7 @@ class PartTest < Test::Unit::TestCase
33
33
  assert_equal 0, part.volume.lines
34
34
 
35
35
  chs = []
36
- tfs = [] ## prevent from removing Tempfile
36
+ tfs = [] ## prevent from removing Tempfile
37
37
  Tempfile.open('part_test') do |o|
38
38
  o.print "12345"
39
39
  chs << Book::Chapter.new(book, nil, nil, o.path)
data/test/test_builder.rb CHANGED
@@ -44,16 +44,6 @@ class BuidlerTest < Test::Unit::TestCase
44
44
  assert_equal '', b.result
45
45
  end
46
46
 
47
- def test_print_and_puts
48
- b = Builder.new
49
- assert_raises(NoMethodError) do # XXX: OK?
50
- b.print ""
51
- end
52
- assert_raises(NoMethodError) do # XXX: OK?
53
- b.puts ""
54
- end
55
- end
56
-
57
47
  def test_not_implemented_methods
58
48
  ex = NoMethodError # XXX: OK?
59
49
  [
@@ -70,24 +60,12 @@ class BuidlerTest < Test::Unit::TestCase
70
60
  end
71
61
  end
72
62
 
73
- def test_compile_inline
74
- text = "abc"
75
- assert_equal [:text, text], @b.compile_inline(text)
76
- end
77
-
78
- def test_inline_ruby
79
- def @b.compile_ruby(base,ruby)
80
- [base,ruby]
81
- end
82
- str = @b.inline_ruby("foo,bar")
83
- assert_equal str, ["foo","bar"]
84
- str = @b.inline_ruby("foo\\,\\,,\\,bar,buz")
85
- assert_equal str, ["foo,,",",bar,buz"]
86
- end
87
-
88
- def test_compile_inline_backslash
89
- text = "abc\\d\\#a"
90
- assert_equal [:text, text], @b.compile_inline(text)
63
+ def test_convert_outencoding
64
+ book = ReVIEW::Book::Base.new(nil)
65
+ book.config = {'outencoding' => "EUC"}
66
+ b = Builder.new
67
+ ret = b.convert_outencoding("a", book.config["outencoding"])
68
+ assert_equal "a", ret
91
69
  end
92
70
 
93
71
  class XBuilder < Builder
@@ -4,43 +4,88 @@ require 'test_helper'
4
4
  require 'review/compiler'
5
5
  require 'review/book'
6
6
  require 'review/latexbuilder'
7
+ require 'review/htmlbuilder'
7
8
 
8
9
  class CompilerTest < Test::Unit::TestCase
9
10
  include ReVIEW
10
11
 
11
12
  def setup
12
- @builder = LATEXBuilder.new()
13
- @c = Compiler.new(@builder)
13
+ @builder = HTMLBuilder.new()
14
+ @param = {
15
+ "secnolevel" => 2, # for IDGXMLBuilder, HTMLBuilder
16
+ "inencoding" => "UTF-8",
17
+ "outencoding" => "UTF-8",
18
+ "subdirmode" => nil,
19
+ "stylesheet" => nil, # for HTMLBuilder
20
+ }
21
+ ReVIEW.book.param = @param
22
+ @compiler = ReVIEW::Compiler.new(@builder)
23
+ @chapter = Book::Chapter.new(Book::Base.new(nil), 1, '-', nil, StringIO.new)
24
+ location = Location.new(nil, nil)
25
+ @builder.bind(@compiler, @chapter, location)
26
+
27
+ def @compiler.compile_command(name, args, lines, node)
28
+ args
29
+ end
30
+
14
31
  end
15
32
 
16
33
  def test_parse_args
17
- args = @c.__send__(:parse_args, "[foo][bar]")
18
- assert_equal ["foo","bar"], args
34
+ args = compile_blockelem("//dummy[foo][bar]\n", false)
35
+ assert_equal ["foo","bar"], args.parse_args(:doc,:doc)
19
36
  end
20
37
 
21
38
  def test_parse_args_with_brace1
22
- args = @c.__send__(:parse_args, "[fo[\\][\\]o][bar]")
23
- assert_equal ["fo[][]o","bar"], args
39
+ args = compile_blockelem("//dummy[fo[\\][\\]o][bar]", false)
40
+ assert_equal ["fo[][]o","bar"], args.parse_args(:doc, :doc)
24
41
  end
25
42
 
26
43
  def test_parse_args_with_brace2
27
- args = @c.__send__(:parse_args, "[f\\]o\\]o][bar]")
28
- assert_equal ["f]o]o","bar"], args
44
+ args = compile_blockelem("//dummy[f\\]o\\]o][bar]", false)
45
+ assert_equal ["f]o]o","bar"], args.parse_args(:doc, :doc)
29
46
  end
30
47
 
31
48
  def test_parse_args_with_backslash
32
- args = @c.__send__(:parse_args, "[foo][bar\\buz]")
33
- assert_equal ["foo","bar\\buz"], args
49
+ args = compile_blockelem("//dummy[foo][bar\\buz]", false)
50
+ assert_equal ["foo","bar\\buz"], args.parse_args(:doc, :doc)
34
51
  end
35
52
 
36
53
  def test_parse_args_with_backslash2
37
- args = @c.__send__(:parse_args, "[foo][bar\\#\\[\\!]")
38
- assert_equal ["foo","bar\\#\\[\\!"], args
54
+ args = compile_blockelem("//dummy[foo][bar\\#\\[\\!]", false)
55
+ assert_equal ["foo","bar\\#\\[\\!"], args.parse_args(:doc, :doc)
39
56
  end
40
57
 
41
58
  def test_parse_args_with_backslash3
42
- args = @c.__send__(:parse_args, "[foo][bar\\\\buz]")
43
- assert_equal ["foo","bar\\buz"], args
59
+ args = compile_blockelem("//dummy[foo][bar\\\\buz]", false)
60
+ assert_equal ["foo","bar\\buz"], args.parse_args(:doc, :doc)
61
+ end
62
+
63
+ def test_compile_inline
64
+ def @compiler.inline_ruby(*args)
65
+ return args
66
+ end
67
+ args = compile_inline("@<ruby>{abc}",false)
68
+ assert_equal "abc", args.content[0].content.to_doc
69
+ end
70
+
71
+ def test_inline_ruby
72
+ # def @compiler.inline_ruby(*args)
73
+ # return args
74
+ # end
75
+ args = compile_inline("@<ruby>{foo,bar}",false)
76
+ assert_equal "foo", args.content[0].content[0].to_doc
77
+ assert_equal "bar", args.content[0].content[1].to_doc
78
+ args = compile_inline("@<ruby>{foo\\,\\,,\\,bar\\,buz}", false)
79
+ assert_equal "foo,,", args.content[0].content[0].to_doc
80
+ assert_equal ",bar,buz", args.content[0].content[1].to_doc
81
+ end
82
+
83
+ def test_compile_inline_backslash
84
+ def @compiler.inline_dummy(*args)
85
+ return args
86
+ end
87
+ args = compile_inline("@<dummy>{abc\\d\\#a}", false)
88
+ assert_equal "abc\\d\\#a", args.content[0].content.to_doc
44
89
  end
45
90
  end
46
91
 
data/test/test_helper.rb CHANGED
@@ -1,6 +1,53 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib/')
2
2
  require 'test/unit'
3
3
 
4
+ def compile_document(str, force_to_s=true)
5
+ @compiler.setup_parser(str)
6
+ @compiler.parse("Document")
7
+ if force_to_s
8
+ @compiler.result.to_doc
9
+ else
10
+ @compiler.result
11
+ end
12
+ end
13
+
14
+ def compile_block(str, force_to_s=true)
15
+ @compiler.setup_parser(str)
16
+ @compiler.parse("Document")
17
+ if force_to_s
18
+ @compiler.result.to_doc
19
+ else
20
+ @compiler.result
21
+ end
22
+ end
23
+
24
+ def compile_inline(str, force_to_s=true)
25
+ @compiler.setup_parser(str)
26
+ @compiler.parse("Paragraph")
27
+ if force_to_s
28
+ ## @compiler.result.map(&:to_doc).join
29
+ @compiler.result.to_doc
30
+ else
31
+ @compiler.result
32
+ end
33
+ end
34
+
35
+ def compile_blockelem(str, force_to_s=true)
36
+ @compiler.setup_parser(str)
37
+ @compiler.parse("BlockElement")
38
+ if force_to_s
39
+ @compiler.result.to_doc
40
+ else
41
+ @compiler.result
42
+ end
43
+ end
44
+
45
+ def compile_headline(str)
46
+ @compiler.setup_parser(str)
47
+ @compiler.parse("Headline")
48
+ @compiler.result.to_doc
49
+ end
50
+
4
51
  def touch_file(path)
5
52
  File.open(path, "w").close
6
53
  path
@@ -16,10 +63,6 @@ def prepare_samplebook(srcdir)
16
63
  YAML.load(File.open(srcdir + "/config.yml"))
17
64
  end
18
65
 
19
- def compile_inline(text)
20
- @builder.compile_inline(text)
21
- end
22
-
23
66
  def compile_block(text)
24
67
  method_name = "compile_block_#{@builder.target_name}"
25
68
  if !self.respond_to?(method_name, true)
@@ -14,9 +14,10 @@ class HTMLBuidlerTest < Test::Unit::TestCase
14
14
  @builder = HTMLBuilder.new()
15
15
  @config = ReVIEW::Configure.values
16
16
  @config.merge!({
17
- "secnolevel" => 2, # for IDGXMLBuilder, HTMLBuilder
18
- "stylesheet" => nil, # for HTMLBuilder
19
- "htmlext" => "html",
17
+ "secnolevel" => 2, # for IDGXMLBuilder, HTMLBuilder
18
+ "inencoding" => "UTF-8",
19
+ "outencoding" => "UTF-8",
20
+ "stylesheet" => nil, # for HTMLBuilder
20
21
  })
21
22
  @book = Book::Base.new(".")
22
23
  @book.config = @config
@@ -58,7 +59,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
58
59
  end
59
60
  end
60
61
  actual = compile_block("=={test} this is test.\n")
61
- assert_equal %Q|\n<h2 id="test"><a id="h1-1"></a><span class="secno">1.1 </span>this is test.</h2>\n|, actual
62
+ assert_equal %Q|<h2 id="test"><a id="h1-1"></a><span class="secno">1.1 </span>this is test.</h2>\n|, actual
62
63
  end
63
64
 
64
65
  def test_headline_level1_postdef_roman
@@ -80,7 +81,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
80
81
  end
81
82
  end
82
83
  actual = compile_block("=={test} this is test.\n")
83
- assert_equal %Q|\n<h2 id="test"><a id="hI-1"></a><span class="secno">I.1 </span>this is test.</h2>\n|, actual
84
+ assert_equal %Q|<h2 id="test"><a id="hI-1"></a><span class="secno">I.1 </span>this is test.</h2>\n|, actual
84
85
  end
85
86
 
86
87
  def test_headline_level1_postdef_alpha
@@ -102,7 +103,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
102
103
  end
103
104
  end
104
105
  actual = compile_block("=={test} this is test.\n")
105
- assert_equal %Q|\n<h2 id="test"><a id="hA-1"></a><span class="secno">A.1 </span>this is test.</h2>\n|, actual
106
+ assert_equal %Q|<h2 id="test"><a id="hA-1"></a><span class="secno">A.1 </span>this is test.</h2>\n|, actual
106
107
  end
107
108
 
108
109
  def test_headline_level1_without_secno
@@ -123,18 +124,18 @@ class HTMLBuidlerTest < Test::Unit::TestCase
123
124
 
124
125
  def test_headline_level2
125
126
  actual = compile_block("=={test} this is test.\n")
126
- assert_equal %Q|\n<h2 id="test"><a id="h1-1"></a><span class="secno">1.1 </span>this is test.</h2>\n|, actual
127
+ assert_equal %Q|<h2 id="test"><a id="h1-1"></a><span class="secno">1.1 </span>this is test.</h2>\n|, actual
127
128
  end
128
129
 
129
130
  def test_headline_level3
130
131
  actual = compile_block("==={test} this is test.\n")
131
- assert_equal %Q|\n<h3 id="test"><a id="h1-0-1"></a>this is test.</h3>\n|, actual
132
+ assert_equal %Q|<h3 id="test"><a id="h1-0-1"></a>this is test.</h3>\n|, actual
132
133
  end
133
134
 
134
135
  def test_headline_level3_with_secno
135
136
  @book.config["secnolevel"] = 3
136
137
  actual = compile_block("==={test} this is test.\n")
137
- assert_equal %Q|\n<h3 id="test"><a id="h1-0-1"></a><span class="secno">1.0.1 </span>this is test.</h3>\n|, actual
138
+ assert_equal %Q|<h3 id="test"><a id="h1-0-1"></a><span class="secno">1.0.1 </span>this is test.</h3>\n|, actual
138
139
  end
139
140
 
140
141
  def test_label
@@ -319,7 +320,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
319
320
 
320
321
  def test_quote
321
322
  actual = compile_block("//quote{\nfoo\nbar\n\nbuz\n//}\n")
322
- assert_equal %Q|<blockquote><p>foobar</p>\n<p>buz</p></blockquote>\n|, actual
323
+ assert_equal %Q|<blockquote><p>foobar</p>\n<p>buz</p>\n</blockquote>\n|, actual
323
324
  end
324
325
 
325
326
  def test_memo
@@ -479,7 +480,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
479
480
  @book.config["pygments"] = true
480
481
  actual = compile_block("//list[samplelist][this is @<b>{test}<&>_]{\ntest1\ntest1.5\n\ntest@<i>{2}\n//}\n")
481
482
 
482
- 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
483
+ 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;</pre>\n</div>\n|, actual
483
484
  end
484
485
 
485
486
  def test_list_pygments_lang
@@ -499,7 +500,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
499
500
  %Q|<pre class=\"list\"><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| +
500
501
  %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| +
501
502
  %Q| <span style=\"color: #008000; font-weight: bold\">return</span> <span style=\"color: #008000\">true</span>\n| +
502
- %Q|<span style=\"color: #008000; font-weight: bold\">end</span>\n| +
503
+ %Q|<span style=\"color: #008000; font-weight: bold\">end</span>| +
503
504
  %Q|</pre>\n| +
504
505
  %Q|</div>\n|, actual
505
506
  end
@@ -517,36 +518,7 @@ class HTMLBuidlerTest < Test::Unit::TestCase
517
518
  @book.config["pygments"] = true
518
519
  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")
519
520
 
520
- 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
521
- end
522
-
523
- def test_listnum
524
- def @chapter.list(id)
525
- Book::ListIndex::Item.new("samplelist",1)
526
- end
527
-
528
- @book.config["highlight"] = false
529
- actual = compile_block(<<-EOS)
530
- //listnum[samplelist][this is @<b>{test}<&>_][ruby]{
531
- def foo(a1, a2=:test)
532
- (1..3).times{|i| a.include?(:foo)}
533
- return true
534
- end
535
- //}
536
- EOS
537
-
538
- expected =<<-EOS
539
- <div class="code">
540
- <p class="caption">リスト1.1: this is <b>test</b>&lt;&amp;&gt;_</p>
541
- <pre class="list"> 1: def foo(a1, a2=:test)
542
- 2: (1..3).times{|i| a.include?(:foo)}
543
- 3: return true
544
- 4: end
545
- </pre>
546
- </div>
547
- EOS
548
-
549
- assert_equal expected, actual
521
+ 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</pre>\n</div>\n", actual
550
522
  end
551
523
 
552
524
  def test_listnum_pygments_lang
@@ -562,7 +534,7 @@ EOS
562
534
  @book.config["pygments"] = true
563
535
  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")
564
536
 
565
- 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
537
+ 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></div>", actual
566
538
  end
567
539
 
568
540
  def test_listnum_pygments_lang_without_lang
@@ -580,7 +552,7 @@ EOS
580
552
  @book.config["highlight"]["lang"] = "ruby"
581
553
  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")
582
554
 
583
- 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
555
+ 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></div>", actual
584
556
  end
585
557
 
586
558
 
@@ -598,7 +570,7 @@ EOS
598
570
  end
599
571
  @book.config["pygments"] = true
600
572
  actual = compile_block("//emlist[][sql]{\nSELECT COUNT(*) FROM tests WHERE tests.no > 10 AND test.name LIKE 'ABC%'\n//}\n")
601
- assert_equal "<div class=\"emlist-code\">\n<pre class=\"emlist\"><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
573
+ assert_equal "<div class=\"emlist-code\">\n<pre class=\"emlist\"><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></pre>\n</div>\n", actual
602
574
  end
603
575
 
604
576
  def test_emlist_caption
@@ -611,19 +583,6 @@ EOS
611
583
  assert_equal %Q|<div class="emlist-code">\n<pre class="emlist"> lineA\n lineB\n lineC\n</pre>\n</div>\n|, actual
612
584
  end
613
585
 
614
- def test_emlistnum
615
- @book.config["highlight"] = false
616
- actual = compile_block("//emlistnum{\nlineA\nlineB\n//}\n")
617
- expected =<<-EOS
618
- <div class="emlistnum-code">
619
- <pre class="emlist"> 1: lineA
620
- 2: lineB
621
- </pre>
622
- </div>
623
- EOS
624
- assert_equal expected, actual
625
- end
626
-
627
586
  def test_emlist_with_4tab
628
587
  @config["tabwidth"] = 4
629
588
  actual = compile_block("//emlist{\n\tlineA\n\t\tlineB\n\tlineC\n//}\n")
@@ -643,7 +602,7 @@ EOS
643
602
  end
644
603
  @book.config["pygments"] = true
645
604
  actual = compile_block("//cmd{\nlineA\nlineB\n//}\n")
646
- assert_equal "<div class=\"cmd-code\">\n<pre class=\"cmd\"><span style=\"color: #888888\">lineA</span>\n<span style=\"color: #888888\">lineB</span>\n</pre>\n</div>\n", actual
605
+ assert_equal "<div class=\"cmd-code\">\n<pre class=\"cmd\"><span style=\"color: #888888\">lineA</span>\n<span style=\"color: #888888\">lineB</span></pre>\n</div>\n", actual
647
606
  end
648
607
 
649
608
  def test_cmd_caption
@@ -667,22 +626,13 @@ EOS
667
626
  assert_equal %Q|<a href="bib.html#bib-id_sample_3Dbib">[1]</a>|, compile_inline("@<bib>{sample=bib}")
668
627
  end
669
628
 
670
- def test_bib_htmlext
671
- def @chapter.bibpaper(id)
672
- Book::BibpaperIndex::Item.new("samplebib",1,"sample bib")
673
- end
674
-
675
- @config["htmlext"] = "xhtml"
676
- assert_equal %Q|<a href="bib.xhtml#bib-samplebib">[1]</a>|, compile_inline("@<bib>{samplebib}")
677
- end
678
-
679
629
  def test_bibpaper
680
630
  def @chapter.bibpaper(id)
681
631
  Book::BibpaperIndex::Item.new("samplebib",1,"sample bib")
682
632
  end
683
633
 
684
634
  actual = compile_block("//bibpaper[samplebib][sample bib @<b>{bold}]{\na\nb\n//}\n")
685
- assert_equal %Q|<div class=\"bibpaper\">\n<a id=\"bib-samplebib\">[1]</a> sample bib <b>bold</b>\n<p>ab</p></div>\n|, actual
635
+ assert_equal %Q|<div class=\"bibpaper\">\n<a id=\"bib-samplebib\">[1]</a> sample bib <b>bold</b>\n<p>ab</p>\n</div>\n|, actual
686
636
  end
687
637
 
688
638
  def test_bibpaper_normalized
@@ -691,7 +641,7 @@ EOS
691
641
  end
692
642
 
693
643
  actual = compile_block("//bibpaper[sample=bib][sample bib @<b>{bold}]{\na\nb\n//}\n")
694
- assert_equal %Q|<div class=\"bibpaper\">\n<a id=\"bib-id_sample_3Dbib\">[1]</a> sample bib <b>bold</b>\n<p>ab</p></div>\n|, actual
644
+ assert_equal %Q|<div class=\"bibpaper\">\n<a id=\"bib-id_sample_3Dbib\">[1]</a> sample bib <b>bold</b>\n<p>ab</p>\n</div>\n|, actual
695
645
  end
696
646
 
697
647
  def test_bibpaper_with_anchor
@@ -700,7 +650,7 @@ EOS
700
650
  end
701
651
 
702
652
  actual = compile_block("//bibpaper[samplebib][sample bib @<href>{http://example.jp}]{\na\nb\n//}\n")
703
- 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|, actual
653
+ 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>\n</div>\n|, actual
704
654
  end
705
655
 
706
656
  def column_helper(review)
@@ -748,7 +698,6 @@ EOS
748
698
  <h3><a id="column-1"></a>test</h3>
749
699
  <p>inside column</p>
750
700
  </div>
751
-
752
701
  <h3><a id="h1-0-1"></a>next level</h3>
753
702
  EOS
754
703
 
@@ -784,7 +733,6 @@ EOS
784
733
  <h3 id="foo"><a id="column-1"></a>test</h3>
785
734
  <p>inside column</p>
786
735
  </div>
787
-
788
736
  <h3><a id="h1-0-1"></a>next level</h3>
789
737
  <p>this is コラム「test」.</p>
790
738
  EOS
@@ -941,6 +889,70 @@ EOS
941
889
  assert_equal expected, actual
942
890
  end
943
891
 
892
+ def test_ul_in_note
893
+ src =<<-EOS
894
+ //note{
895
+
896
+ aaaa
897
+ bbb
898
+
899
+ * A
900
+ * B
901
+ //}
902
+ EOS
903
+
904
+ expected =<<-EOS
905
+ <div class=\"note\">
906
+ <p>aaaabbb</p>
907
+ <ul>
908
+ <li>A</li>
909
+ <li>B</li>
910
+ </ul>
911
+ </div>
912
+ EOS
913
+ actual = compile_block(src)
914
+ assert_equal expected, actual
915
+ end
916
+
917
+ def test_ul_in_note_and_emlist
918
+ src =<<-EOS
919
+ //note{
920
+
921
+ aaaa
922
+ bbb
923
+
924
+ //emlist{
925
+ abc
926
+ ddd
927
+ * A
928
+ * B
929
+ //}
930
+
931
+ * A
932
+ * B
933
+ //}
934
+ EOS
935
+
936
+ expected =<<-EOS
937
+ <div class=\"note\">
938
+ <p>aaaabbb</p>
939
+ <div class="emlist-code">
940
+ <pre class="emlist">abc
941
+ ddd
942
+ * A
943
+ * B
944
+ </pre>
945
+ </div>
946
+ <ul>
947
+ <li>A</li>
948
+ <li>B</li>
949
+ </ul>
950
+ </div>
951
+ EOS
952
+ actual = compile_block(src)
953
+ assert_equal expected, actual
954
+ end
955
+
944
956
  def test_ol
945
957
  src =<<-EOS
946
958
  3. AAA
@@ -1030,4 +1042,23 @@ EOS
1030
1042
  EOS
1031
1043
  assert_equal expected, actual
1032
1044
  end
1045
+
1046
+
1047
+ ## inline nesting tests
1048
+ def test_href_nest
1049
+ actual = compile_inline("@<href>{http://github.com,@<b>{G}itHub}")
1050
+ assert_equal %Q|<a href="http://github.com" class="link"><b>G</b>itHub</a>|, actual
1051
+ end
1052
+
1053
+ def test_inline_tti_nest
1054
+ actual = compile_inline("test @<tt>{aa@<i>{inline test}bb} test2")
1055
+ assert_equal %Q|test <tt>aa<i>inline test</i>bb</tt> test2|, actual
1056
+ end
1057
+
1058
+ def test_inline_ttib_nest
1059
+ actual = compile_inline("test @<tt>{aa@<i>{inline @<b>{te}st}bb} test2")
1060
+ assert_equal %Q|test <tt>aa<i>inline <b>te</b>st</i>bb</tt> test2|, actual
1061
+ end
1062
+
1063
+
1033
1064
  end