review 0.6.0 → 0.9.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 (68) hide show
  1. data/ChangeLog +441 -0
  2. data/README.rdoc +25 -0
  3. data/Rakefile +13 -1
  4. data/VERSION +1 -1
  5. data/bin/review-check +1 -1
  6. data/bin/review-compile +19 -10
  7. data/bin/review-epubmaker +114 -17
  8. data/bin/review-index +8 -1
  9. data/bin/review-pdfmaker +378 -0
  10. data/bin/review-preproc +2 -3
  11. data/bin/review-vol +1 -2
  12. data/debian/README.Debian +12 -0
  13. data/debian/README.source +5 -0
  14. data/debian/changelog +5 -0
  15. data/debian/compat +1 -0
  16. data/debian/control +22 -0
  17. data/debian/copyright +60 -0
  18. data/debian/docs +5 -0
  19. data/debian/manpage.1.ex +59 -0
  20. data/debian/patches/path.diff +91 -0
  21. data/debian/patches/series +1 -0
  22. data/debian/review.install +13 -0
  23. data/debian/review.links +4 -0
  24. data/debian/rules +13 -0
  25. data/debian/source/format +1 -0
  26. data/doc/format.rdoc +477 -0
  27. data/doc/format.re +19 -0
  28. data/doc/format_idg.rdoc +180 -0
  29. data/doc/ruby-uuid/README +11 -0
  30. data/doc/ruby-uuid/README.ja +34 -0
  31. data/doc/sample.css +17 -0
  32. data/doc/sample.yaml +8 -4
  33. data/lib/lineinput.rb +1 -1
  34. data/lib/review/book.rb +43 -36
  35. data/lib/review/builder.rb +78 -33
  36. data/lib/review/compiler.rb +45 -48
  37. data/lib/review/epubbuilder.rb +1 -675
  38. data/lib/review/exception.rb +1 -1
  39. data/lib/review/htmlbuilder.rb +627 -49
  40. data/lib/review/htmlutils.rb +5 -0
  41. data/lib/review/idgxmlbuilder.rb +239 -250
  42. data/lib/review/index.rb +84 -7
  43. data/lib/review/latexbuilder.rb +261 -42
  44. data/lib/review/latexutils.rb +15 -6
  45. data/lib/review/preprocessor.rb +40 -6
  46. data/lib/review/textutils.rb +22 -0
  47. data/lib/review/topbuilder.rb +4 -1
  48. data/lib/uuid.rb +312 -0
  49. data/review.gemspec +44 -12
  50. data/test/CHAPS +2 -0
  51. data/test/bib.re +13 -0
  52. data/test/test.re +43 -0
  53. data/test/test_book.rb +1191 -0
  54. data/test/test_builder.rb +147 -0
  55. data/test/test_htmlbuilder.rb +191 -10
  56. data/test/test_htmlutils.rb +24 -0
  57. data/test/test_idgxmlbuilder.rb +310 -0
  58. data/test/test_index.rb +15 -0
  59. data/test/test_latexbuilder.rb +217 -6
  60. data/test/test_lineinput.rb +198 -0
  61. data/test/test_textutils.rb +68 -0
  62. data/test/test_uuid.rb +156 -0
  63. metadata +43 -10
  64. data/doc/format.txt +0 -434
  65. data/doc/format_idg.txt +0 -194
  66. data/doc/format_sjis.txt +0 -313
  67. data/setup.rb +0 -1587
  68. data/test/test_epubbuilder.rb +0 -73
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test_helper'
4
+ require 'review/index'
5
+
6
+ class ListIndexTest < Test::Unit::TestCase
7
+ include ReVIEW
8
+
9
+ def setup
10
+ end
11
+
12
+ def test_index
13
+ # ReVIEW::ChapterIndex.parse("=Foo\nfoo\n=Foo2\nfoo2\n".split(/\n/))
14
+ end
15
+ end
@@ -15,12 +15,11 @@ class LATEXBuidlerTest < Test::Unit::TestCase
15
15
  "subdirmode" => nil,
16
16
  "stylesheet" => nil, # for EPUBBuilder
17
17
  }
18
- compiler = ReVIEW::Compiler.new(@builder)
19
- compiler.setParameter(@param)
20
- chapter = Chapter.new(nil, 1, '-', nil, StringIO.new)
21
- chapter.setParameter(@param)
18
+ ReVIEW.book.param = @param
19
+ @compiler = ReVIEW::Compiler.new(@builder)
20
+ @chapter = Chapter.new(nil, 1, 'chap1', nil, StringIO.new)
22
21
  location = Location.new(nil, nil)
23
- @builder.bind(compiler, chapter, location)
22
+ @builder.bind(@compiler, @chapter, location)
24
23
  end
25
24
 
26
25
  def test_headline_level1
@@ -34,6 +33,11 @@ class LATEXBuidlerTest < Test::Unit::TestCase
34
33
  assert_equal %Q|\\chapter*{this is test.}\n|, @builder.result
35
34
  end
36
35
 
36
+ def test_headline_level1_with_inlinetag
37
+ @builder.headline(1,"test","this @<b>{is} test.<&\"_>")
38
+ assert_equal %Q|\\chapter{this \\textbf{is} test.\\textless{}\\&"\\textunderscore{}\\textgreater{}}\n|, @builder.result
39
+ end
40
+
37
41
  def test_headline_level2
38
42
  @builder.headline(2,"test","this is test.")
39
43
  assert_equal %Q|\\section{this is test.}\n|, @builder.result
@@ -68,7 +72,214 @@ class LATEXBuidlerTest < Test::Unit::TestCase
68
72
 
69
73
  def test_href_with_underscore
70
74
  ret = @builder.compile_href("http://example.com/aaa/bbb", "AAA_BBB")
71
- assert_equal %Q|\\href{http://example.com/aaa/bbb}{AAA\\symbol{\"5F}BBB}|, ret
75
+ assert_equal %Q|\\href{http://example.com/aaa/bbb}{AAA\\textunderscore{}BBB}|, ret
76
+ end
77
+
78
+ def test_inline_br
79
+ ret = @builder.inline_br("")
80
+ assert_equal %Q|\\\\\n|, ret
81
+ end
82
+
83
+ def test_inline_br_with_other_strings
84
+ ret = @builder.compile_inline("abc@<br>{}def")
85
+ assert_equal %Q|abc\\\\\ndef|, ret
86
+ end
87
+
88
+ def test_inline_u
89
+ ret = @builder.compile_inline("abc@<u>{def}ghi")
90
+ assert_equal %Q|abc\\Underline{def}ghi|, ret
91
+ end
92
+
93
+ def test_inline_i
94
+ ret = @builder.compile_inline("abc@<i>{def}ghi")
95
+ assert_equal %Q|abc\\textit{def}ghi|, ret
96
+ end
97
+
98
+ def test_inline_i_and_escape
99
+ ret = @builder.compile_inline("test @<i>{inline<&;\\ test} test2")
100
+ assert_equal %Q|test \\textit{inline\\textless{}\\&;\\reviewbackslash{} test} test2|, ret
101
+ end
102
+
103
+ def test_inline_dtp
104
+ ret = @builder.compile_inline("abc@<dtp>{def}ghi")
105
+ assert_equal %Q|abcghi|, ret
106
+ end
107
+
108
+ def test_inline_code
109
+ ret = @builder.compile_inline("abc@<code>{def}ghi")
110
+ assert_equal %Q|abc\\texttt{def}ghi|, ret
111
+ end
112
+
113
+ def test_inline_raw
114
+ ret = @builder.compile_inline("@<raw>{@<tt>{inline!$%\\}}")
115
+ assert_equal %Q|@\\textless{}tt\\textgreater{}\\{inline!\\textdollar{}\\%\\}|, ret
116
+ end
117
+
118
+ def test_inline_sup
119
+ ret = @builder.compile_inline("abc@<sup>{def}")
120
+ assert_equal %Q|abc\\textsuperscript{def}|, ret
121
+ end
122
+
123
+ def test_inline_sub
124
+ ret = @builder.compile_inline("abc@<sub>{def}")
125
+ assert_equal %Q|abc\\textsubscript{def}|, ret
126
+ end
127
+
128
+ def test_inline_b
129
+ ret = @builder.compile_inline("abc@<b>{def}")
130
+ assert_equal %Q|abc\\textbf{def}|, ret
131
+ end
132
+
133
+ def test_inline_b_and_escape
134
+ ret = @builder.compile_inline("test @<b>{inline<&;\\ test} test2")
135
+ assert_equal %Q|test \\textbf{inline\\textless{}\\&;\\reviewbackslash{} test} test2|, ret
136
+ end
137
+ def test_inline_em
138
+ ret = @builder.compile_inline("abc@<em>{def}")
139
+ assert_equal %Q|abc\\textbf{def}|, ret
140
+ end
141
+
142
+ def test_inline_strong
143
+ ret = @builder.compile_inline("abc@<strong>{def}")
144
+ assert_equal %Q|abc\\textbf{def}|, ret
145
+ end
146
+
147
+ def test_inline_u
148
+ ret = @builder.compile_inline("abc@<u>{def}ghi")
149
+ assert_equal %Q|abc\\Underline{def}ghi|, ret
150
+ end
151
+
152
+ def test_inline_m
153
+ ret = @builder.compile_inline("abc@<m>{\\alpha^n = \inf < 2}ghi")
154
+ assert_equal "abc $\\alpha^n = inf < 2$ ghi", ret
155
+ end
156
+
157
+ def test_inline_tt
158
+ ret = @builder.compile_inline("test @<tt>{inline test} test2")
159
+ assert_equal %Q|test \\texttt{inline test} test2|, ret
160
+ end
161
+
162
+ def test_inline_tt_endash
163
+ ret = @builder.compile_inline("test @<tt>{in-line --test ---foo ----bar -----buz} --test2")
164
+ assert_equal %Q|test \\texttt{in-line {-}{-}test {-}{-}-foo {-}{-}{-}{-}bar {-}{-}{-}{-}-buz} --test2|, ret
165
+ end
166
+
167
+ def test_inline_tti
168
+ ret = @builder.compile_inline("test @<tti>{inline test} test2")
169
+ assert_equal %Q|test \\texttt{\\textit{inline test}} test2|, ret
170
+ end
171
+
172
+ def test_inline_ttb
173
+ ret = @builder.compile_inline("test @<ttb>{inline test} test2")
174
+ assert_equal %Q|test \\texttt{\\textbf{inline test}} test2|, ret
175
+ end
176
+
177
+ def test_inline_uchar
178
+ ret = @builder.compile_inline("test @<uchar>{2460} test2")
179
+ assert_equal %Q|test \\UTF{2460} test2|, ret
180
+ end
181
+
182
+ def test_headline_level1
183
+ @builder.headline(1,"test","this is test.")
184
+ assert_equal %Q|\\chapter{this is test.}\n|, @builder.result
185
+ end
186
+
187
+ def test_quote
188
+ lines = ["foo", "bar", "","buz"]
189
+ @builder.quote(lines)
190
+ assert_equal %Q|\n\\begin{quote}\nfoobar\n\nbuz\n\\end{quote}\n|, @builder.result
191
+ end
192
+
193
+ def test_memo
194
+ @builder.memo(["test1", "", "test<i>2</i>"], "this is @<b>{test}<&>_")
195
+ assert_equal %Q|\\begin{reviewminicolumn}\n\\reviewminicolumntitle{this is \\textbf{test}\\textless{}\\&\\textgreater{}\\textunderscore{}}\ntest1\n\ntest<i>2</i>\n\\end{reviewminicolumn}\n|, @builder.result
196
+ end
197
+
198
+ def test_flushright
199
+ @builder.flushright(["foo", "bar", "","buz"])
200
+ assert_equal %Q|\n\\begin{flushright}\nfoobar\n\nbuz\n\\end{flushright}\n|, @builder.raw_result
201
+ end
202
+
203
+ def test_noindent
204
+ @builder.noindent
205
+ @builder.paragraph(["foo", "bar"])
206
+ @builder.paragraph(["foo2", "bar2"])
207
+ assert_equal %Q|\\noindent\n\nfoo\nbar\n\nfoo2\nbar2\n|, @builder.raw_result
208
+ end
209
+
210
+ def test_raw
211
+ @builder.raw("<&>\\n")
212
+ assert_equal %Q|<&>\n|, @builder.result
213
+ end
214
+
215
+ def test_image
216
+ def @chapter.image(id)
217
+ item = ImageIndex::Item.new("sampleimg",1)
218
+ item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
219
+ item
220
+ end
221
+
222
+ @builder.image_image("sampleimg","sample photo",nil)
223
+ assert_equal %Q|\\begin{reviewimage}\n\\includegraphics{./images/chap1-sampleimg.png}\n\\label{image:chap1:sampleimg}\n\\caption{sample photo}\n\\end{reviewimage}\n|, @builder.raw_result
224
+ end
225
+
226
+ def test_image_with_metric
227
+ def @chapter.image(id)
228
+ item = ImageIndex::Item.new("sampleimg",1)
229
+ item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
230
+ item
231
+ end
232
+
233
+ @builder.image_image("sampleimg","sample photo","scale=1.2")
234
+ assert_equal %Q|\\begin{reviewimage}\n\\includegraphics[scale=1.2]{./images/chap1-sampleimg.png}\n\\label{image:chap1:sampleimg}\n\\caption{sample photo}\n\\end{reviewimage}\n|, @builder.raw_result
235
+ end
236
+
237
+ def test_indepimage
238
+ def @chapter.image(id)
239
+ item = ImageIndex::Item.new("sampleimg",1)
240
+ item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
241
+ item
242
+ end
243
+
244
+ # FIXME: indepimage's caption should not be with a counter.
245
+ @builder.indepimage("sampleimg","sample photo",nil)
246
+ assert_equal %Q|\\begin{reviewimage}\n\\includegraphics{./images/chap1-sampleimg.png}\n\\caption{sample photo}\n\\end{reviewimage}\n|, @builder.raw_result
247
+ end
248
+
249
+ def test_indepimage_without_caption
250
+ def @chapter.image(id)
251
+ item = ImageIndex::Item.new("sampleimg",1)
252
+ item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
253
+ item
254
+ end
255
+
256
+ # FIXME: indepimage's caption should not be with a counter.
257
+ @builder.indepimage("sampleimg",nil,nil)
258
+ assert_equal %Q|\\begin{reviewimage}\n\\includegraphics{./images/chap1-sampleimg.png}\n\\end{reviewimage}\n|, @builder.raw_result
259
+ end
260
+
261
+ def test_indepimage_with_metric
262
+ def @chapter.image(id)
263
+ item = ImageIndex::Item.new("sampleimg",1)
264
+ item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
265
+ item
266
+ end
267
+
268
+ # FIXME: indepimage's caption should not be with a counter.
269
+ @builder.indepimage("sampleimg","sample photo","scale=1.2")
270
+ assert_equal %Q|\\begin{reviewimage}\n\\includegraphics[scale=1.2]{./images/chap1-sampleimg.png}\n\\caption{sample photo}\n\\end{reviewimage}\n|, @builder.raw_result
271
+ end
272
+
273
+ def test_indepimage_without_caption_but_with_metric
274
+ def @chapter.image(id)
275
+ item = ImageIndex::Item.new("sampleimg",1)
276
+ item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
277
+ item
278
+ end
279
+
280
+ # FIXME: indepimage's caption should not be with a counter.
281
+ @builder.indepimage("sampleimg",nil,"scale=1.2")
282
+ assert_equal %Q|\\begin{reviewimage}\n\\includegraphics[scale=1.2]{./images/chap1-sampleimg.png}\n\\end{reviewimage}\n|, @builder.raw_result
72
283
  end
73
284
 
74
285
  end
@@ -0,0 +1,198 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test_helper'
4
+ require 'lineinput'
5
+ require 'tempfile'
6
+ require 'stringio'
7
+
8
+ class LineInputTest < Test::Unit::TestCase
9
+ def test_initialize
10
+ io = StringIO.new
11
+ li = LineInput.new(io)
12
+ assert_equal 0, li.lineno
13
+ assert !li.eof?
14
+ assert_equal "#<LineInput file=#{io.inspect} line=0>", li.inspect
15
+ end
16
+
17
+ def test_gets
18
+ content = "abc\ndef\r\nghi\rjkl"
19
+ do_test_gets(StringIO.new(content))
20
+ Tempfile.open("lineinput_test") do |io|
21
+ io.print content
22
+ io.rewind
23
+ do_test_gets(io)
24
+ end
25
+ end
26
+
27
+ def do_test_gets(io)
28
+ li = LineInput.new(io)
29
+
30
+ assert_equal "abc\n", li.gets
31
+ assert_equal "def\r\n", li.gets
32
+ assert_equal "ghi\rjkl", li.gets
33
+ assert_equal 3, li.lineno
34
+ assert !li.eof?
35
+
36
+ assert_equal nil, li.gets
37
+ assert_equal 4, li.lineno # XXX: OK?
38
+ assert li.eof?
39
+
40
+ assert_equal nil, li.gets
41
+ assert_equal 4, li.lineno
42
+ assert li.eof?
43
+ end
44
+
45
+ def test_ungets
46
+ io = StringIO.new('abc')
47
+ li = LineInput.new(io)
48
+
49
+ line = li.gets
50
+ assert_equal line, li.ungets(line)
51
+ assert_equal 0, li.lineno
52
+ assert_equal line, li.gets
53
+
54
+ li.ungets('xyz')
55
+ assert_equal 0, li.lineno
56
+ li.ungets('xyz')
57
+ assert_equal -1, li.lineno # XXX: OK?
58
+ end
59
+
60
+ def test_peek
61
+ li = LineInput.new(StringIO.new)
62
+ assert_equal nil, li.peek
63
+
64
+ li = LineInput.new(StringIO.new('abc'))
65
+ assert_equal 'abc', li.peek
66
+ end
67
+
68
+ def test_next?
69
+ li = LineInput.new(StringIO.new)
70
+ assert !li.next?
71
+
72
+ li = LineInput.new(StringIO.new('abc'))
73
+ assert li.next?
74
+ end
75
+
76
+ def test_skip_blank_lines
77
+ if "".respond_to?(:encode)
78
+ euc_jp_spc = " ".encode("EUC-JP")
79
+ else
80
+ euc_jp_spc = "\xa1\xa1" # EUC-JP 全角空白
81
+ end
82
+ [
83
+ ["", 0, nil],
84
+ ["\n \n \nabc", 3, 'abc'],
85
+ ["\t", 1, nil],
86
+ [euc_jp_spc, 0, euc_jp_spc],
87
+ ].each do |text, n, rest|
88
+ li = LineInput.new(StringIO.new(text))
89
+ assert_equal n, li.skip_blank_lines
90
+ assert_equal rest, li.gets
91
+ end
92
+ end
93
+
94
+ def test_gets_if
95
+ io = StringIO.new
96
+ li = LineInput.new(io)
97
+ assert_equal nil, li.gets_if(//)
98
+
99
+ io = StringIO.new("abc\ndef\nghi")
100
+ li = LineInput.new(io)
101
+
102
+ assert_equal "abc\n", li.gets_if(//)
103
+ assert_equal nil, li.gets_if(/^X/)
104
+ assert_equal nil, li.gets_if(/^g/)
105
+ assert_equal "def\n", li.gets_if(/^d/)
106
+ end
107
+
108
+ def test_gets_unless
109
+ io = StringIO.new
110
+ li = LineInput.new(io)
111
+ assert_equal nil, li.gets_unless(//)
112
+
113
+ io = StringIO.new("abc\ndef\nghi")
114
+ li = LineInput.new(io)
115
+
116
+ assert_equal nil, li.gets_unless(//)
117
+ assert_equal "abc\n", li.gets_unless(/^X/)
118
+ assert_equal nil, li.gets_unless(/^d/)
119
+ end
120
+
121
+ def test_each
122
+ content = "abc\ndef\nghi"
123
+ io = StringIO.new(content)
124
+ li = LineInput.new(io)
125
+
126
+ data = ''
127
+ li.each {|l| data << l }
128
+ assert_equal content, data
129
+ end
130
+
131
+ def test_while_match
132
+ io = StringIO.new("abc\ndef\nghi")
133
+ li = LineInput.new(io)
134
+
135
+ li.while_match(/^[ad]/) {}
136
+ assert_equal 2, li.lineno
137
+ assert_equal "ghi", li.gets
138
+ end
139
+
140
+ def test_getlines_while
141
+ io = StringIO.new("abc\ndef\nghi")
142
+ li = LineInput.new(io)
143
+
144
+ buf = li.getlines_while(/^[ad]/)
145
+ assert_equal ["abc\n", "def\n"], buf
146
+ assert_equal 2, li.lineno
147
+ assert_equal "ghi", li.gets
148
+ end
149
+
150
+ def test_until_match
151
+ io = StringIO.new("abc\ndef\nghi")
152
+ li = LineInput.new(io)
153
+
154
+ li.until_match(/^[^a]/) {}
155
+ assert_equal 1, li.lineno
156
+ assert_equal "def\n", li.gets
157
+ end
158
+
159
+ def test_getlines_until
160
+ io = StringIO.new("abc\ndef\nghi")
161
+ li = LineInput.new(io)
162
+
163
+ buf = li.getlines_until(/^[^a]/)
164
+ assert_equal ["abc\n"], buf
165
+ assert_equal 1, li.lineno
166
+ assert_equal "def\n", li.gets
167
+ end
168
+
169
+ def test_until_terminator
170
+ io = StringIO.new("abc\n//}\ndef\nghi\n//}\njkl\nmno")
171
+ li = LineInput.new(io)
172
+
173
+ data = ''
174
+ li.until_terminator(%r<\A//\}>) {|l| data << l }
175
+ assert_equal "abc\n", data
176
+ assert_equal 2, li.lineno
177
+
178
+ data = ''
179
+ li.until_terminator(%r<\A//\}>) {|l| data << l }
180
+ assert_equal "def\nghi\n", data
181
+ assert_equal 5, li.lineno
182
+
183
+ data = ''
184
+ li.until_terminator(%r<\A//\}>) {|l| data << l }
185
+ assert_equal "jkl\nmno", data
186
+ assert_equal 7, li.lineno
187
+ end
188
+
189
+ def test_until_terminator
190
+ io = StringIO.new("abc\ndef\n//}\nghi\n//}")
191
+ li = LineInput.new(io)
192
+
193
+ data = li.getblock(%r<\A//\}>)
194
+ assert_equal ["abc\n", "def\n"], data
195
+ assert_equal 3, li.lineno
196
+ end
197
+ end
198
+