review 2.3.0 → 2.4.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 (160) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +90 -66
  3. data/.travis.yml +1 -1
  4. data/Gemfile +0 -1
  5. data/NEWS.ja.md +82 -0
  6. data/NEWS.md +83 -0
  7. data/README.md +5 -3
  8. data/Rakefile +8 -8
  9. data/bin/review +1 -5
  10. data/bin/review-catalog-converter +22 -27
  11. data/bin/review-check +36 -43
  12. data/bin/review-checkdep +10 -15
  13. data/bin/review-compile +37 -55
  14. data/bin/review-epubmaker +4 -5
  15. data/bin/review-index +21 -29
  16. data/bin/review-init +26 -37
  17. data/bin/review-pdfmaker +0 -2
  18. data/bin/review-preproc +25 -45
  19. data/bin/review-validate +19 -18
  20. data/bin/review-vol +15 -27
  21. data/doc/config.yml.sample +5 -2
  22. data/doc/format.ja.md +20 -1
  23. data/doc/format.md +21 -5
  24. data/doc/images/review-generate.png +0 -0
  25. data/lib/epubmaker.rb +1 -3
  26. data/lib/epubmaker/content.rb +24 -27
  27. data/lib/epubmaker/epubcommon.rb +135 -148
  28. data/lib/epubmaker/epubv2.rb +39 -46
  29. data/lib/epubmaker/epubv3.rb +93 -103
  30. data/lib/epubmaker/producer.rb +138 -151
  31. data/lib/epubmaker/zip_exporter.rb +21 -26
  32. data/lib/review/book.rb +3 -6
  33. data/lib/review/book/base.rb +78 -103
  34. data/lib/review/book/chapter.rb +36 -40
  35. data/lib/review/book/compilable.rb +28 -31
  36. data/lib/review/book/image_finder.rb +6 -13
  37. data/lib/review/book/index.rb +100 -121
  38. data/lib/review/book/page_metric.rb +2 -7
  39. data/lib/review/book/part.rb +18 -20
  40. data/lib/review/book/volume.rb +9 -13
  41. data/lib/review/builder.rb +81 -116
  42. data/lib/review/catalog.rb +15 -19
  43. data/lib/review/compiler.rb +64 -83
  44. data/lib/review/configure.rb +87 -97
  45. data/lib/review/converter.rb +2 -7
  46. data/lib/review/epubbuilder.rb +1 -3
  47. data/lib/review/epubmaker.rb +213 -205
  48. data/lib/review/exception.rb +2 -4
  49. data/lib/review/extentions.rb +0 -1
  50. data/lib/review/extentions/hash.rb +2 -2
  51. data/lib/review/extentions/string.rb +5 -30
  52. data/lib/review/htmlbuilder.rb +320 -375
  53. data/lib/review/htmltoc.rb +4 -7
  54. data/lib/review/htmlutils.rb +29 -32
  55. data/lib/review/i18n.rb +33 -44
  56. data/lib/review/i18n.yml +3 -3
  57. data/lib/review/idgxmlbuilder.rb +309 -345
  58. data/lib/review/latexbuilder.rb +175 -212
  59. data/lib/review/latexindex.rb +2 -8
  60. data/lib/review/latexutils.rb +33 -43
  61. data/lib/review/lineinput.rb +1 -1
  62. data/lib/review/logger.rb +21 -0
  63. data/lib/review/makerhelper.rb +1 -4
  64. data/lib/review/markdownbuilder.rb +44 -53
  65. data/lib/review/md2inaobuilder.rb +6 -12
  66. data/lib/review/pdfmaker.rb +143 -173
  67. data/lib/review/preprocessor.rb +64 -101
  68. data/lib/review/rstbuilder.rb +126 -158
  69. data/lib/review/sec_counter.rb +18 -34
  70. data/lib/review/template.rb +4 -5
  71. data/lib/review/textbuilder.rb +2 -3
  72. data/lib/review/textutils.rb +7 -13
  73. data/lib/review/tocparser.rb +31 -56
  74. data/lib/review/tocprinter.rb +26 -52
  75. data/lib/review/topbuilder.rb +219 -247
  76. data/lib/review/unfold.rb +15 -24
  77. data/lib/review/version.rb +1 -1
  78. data/lib/review/webmaker.rb +75 -99
  79. data/lib/review/webtocprinter.rb +15 -20
  80. data/lib/review/yamlloader.rb +13 -15
  81. data/review.gemspec +20 -22
  82. data/templates/latex/layout.tex.erb +2 -2
  83. data/templates/opf/epubv2.opf.erb +7 -7
  84. data/templates/opf/epubv3.opf.erb +7 -7
  85. data/templates/web/html/layout-html5.html.erb +2 -2
  86. data/test/assets/black.eps +280 -0
  87. data/test/assets/fit.png +0 -0
  88. data/test/assets/large.gif +0 -0
  89. data/test/assets/large.jpg +0 -0
  90. data/test/assets/large.png +0 -0
  91. data/test/assets/large.svg +65 -0
  92. data/test/assets/test_template.tex +1 -1
  93. data/test/book_test_helper.rb +2 -2
  94. data/test/run_test.rb +4 -4
  95. data/test/sample-book/src/Rakefile +21 -22
  96. data/test/syntax-book/Gemfile +4 -0
  97. data/test/syntax-book/Rakefile +72 -0
  98. data/test/syntax-book/appA.re +22 -0
  99. data/test/syntax-book/bib.re +6 -0
  100. data/test/syntax-book/catalog.yml +15 -0
  101. data/test/syntax-book/ch01.re +136 -0
  102. data/test/syntax-book/ch02.re +351 -0
  103. data/test/syntax-book/ch03.re +82 -0
  104. data/test/syntax-book/config.yml +35 -0
  105. data/test/syntax-book/images/ball.png +0 -0
  106. data/test/syntax-book/images/cover.jpg +0 -0
  107. data/test/syntax-book/images/fractal.png +0 -0
  108. data/test/syntax-book/images/img3-1.png +0 -0
  109. data/test/syntax-book/images/inlineicon.jpg +0 -0
  110. data/test/syntax-book/images/logic.png +0 -0
  111. data/test/syntax-book/images/logic2.png +0 -0
  112. data/test/syntax-book/images/puzzle.jpg +0 -0
  113. data/test/syntax-book/images/table.jpg +0 -0
  114. data/test/syntax-book/part2.re +6 -0
  115. data/test/syntax-book/pre01.re +26 -0
  116. data/test/syntax-book/review-ext.rb +14 -0
  117. data/test/syntax-book/sty/jumoline.sty +310 -0
  118. data/test/syntax-book/sty/reviewmacro.sty +39 -0
  119. data/test/syntax-book/style.css +494 -0
  120. data/test/syntax-book/syntax.dic +2 -0
  121. data/test/test_book.rb +106 -111
  122. data/test/test_book_chapter.rb +21 -22
  123. data/test/test_book_part.rb +3 -5
  124. data/test/test_builder.rb +11 -22
  125. data/test/test_catalog.rb +17 -18
  126. data/test/test_catalog_converter_cmd.rb +5 -5
  127. data/test/test_compiler.rb +18 -16
  128. data/test/test_configure.rb +35 -38
  129. data/test/test_converter.rb +3 -4
  130. data/test/test_epub3maker.rb +136 -117
  131. data/test/test_epubmaker.rb +107 -114
  132. data/test/test_epubmaker_cmd.rb +2 -4
  133. data/test/test_extentions_hash.rb +32 -33
  134. data/test/test_helper.rb +9 -11
  135. data/test/test_htmlbuilder.rb +454 -420
  136. data/test/test_htmltoc.rb +8 -12
  137. data/test/test_htmlutils.rb +0 -2
  138. data/test/test_i18n.rb +159 -150
  139. data/test/test_idgxmlbuilder.rb +190 -197
  140. data/test/test_image_finder.rb +21 -22
  141. data/test/test_index.rb +24 -29
  142. data/test/test_latexbuilder.rb +274 -264
  143. data/test/test_lineinput.rb +7 -10
  144. data/test/test_location.rb +7 -7
  145. data/test/test_makerhelper.rb +13 -25
  146. data/test/test_markdownbuilder.rb +23 -26
  147. data/test/test_md2inaobuilder.rb +8 -11
  148. data/test/test_pdfmaker.rb +114 -123
  149. data/test/test_pdfmaker_cmd.rb +1 -3
  150. data/test/test_review_ext.rb +3 -5
  151. data/test/test_rstbuilder.rb +92 -97
  152. data/test/test_template.rb +3 -7
  153. data/test/test_textutils.rb +27 -27
  154. data/test/test_tocparser.rb +2 -2
  155. data/test/test_topbuilder.rb +98 -103
  156. data/test/test_webtocprinter.rb +5 -6
  157. data/test/test_yamlloader.rb +42 -42
  158. data/test/test_zip_exporter.rb +12 -18
  159. metadata +86 -9
  160. data/lib/review/ewbbuilder.rb +0 -382
@@ -1,382 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # $Id: ewbbuilder.rb 2195 2005-11-13 21:52:18Z aamine $
4
-
5
- require 'review/builder'
6
- require 'review/textutils'
7
- require 'review/exception'
8
-
9
- module ReVIEW
10
- class EWBBuilder < Builder
11
- include TextUtils
12
-
13
- def initialize(chap)
14
- super
15
- @footnote_buf = []
16
- @index_buffer = []
17
- end
18
-
19
- def generate_index
20
- @index_buffer.each_with_index do |str, n|
21
- printf "%d\t%s\n", index_number(n + 1), str
22
- end
23
- end
24
-
25
- def headline(level, caption)
26
- puts unless level == 1
27
- puts "//#{'i' * level} #{caption}"
28
- puts
29
- end
30
-
31
- # Compiler.defsyntax(:emlist, :block, 0..1) {|args|
32
- # if args[0] and not args[0] == 'noescape'
33
- # raise SyntaxError, "unknown //emlist option: #{args[0]}"
34
- # end
35
- # }
36
-
37
- def emlist(lines, caption = nil)
38
- # firstline = f.lineno
39
- puts
40
- puts caption
41
- puts '//lst1'
42
- lines.each do |line|
43
- if noescape
44
- puts detab(line)
45
- else
46
- puts escape(detab(line))
47
- end
48
- end
49
- puts '//}'
50
- puts
51
- end
52
-
53
- # Compiler.defsyntax(:cmd, :block, 0..1) {|args|
54
- # if args[0] and not args[0] == 'noescape'
55
- # raise SyntaxError, "unknown //cmd option: #{args[0]}"
56
- # end
57
- # }
58
-
59
- def cmd(lines, caption = nil)
60
- puts
61
- puts caption
62
- puts '//sc1{'
63
- lines.each do |line|
64
- if noescape
65
- puts detab(line)
66
- elsif /\AC:.*?>(.+)/ =~ line # DOS prompt hack
67
- prompt, cmd = *line.split('>', 2)
68
- puts "#{escape(prompt)}>//command{#{escape(cmd)}}//}"
69
- else
70
- puts escape(detab(line))
71
- end
72
- end
73
- puts '//}'
74
- puts
75
- end
76
-
77
- # Compiler.defsyntax(:list, :block, 0..1) {|args|
78
- # if args[0] and not args[0] == 'noescape'
79
- # raise SyntaxError, "unknown //list option: #{args[0]}"
80
- # end
81
- # }
82
-
83
- def list(lines, id, caption)
84
- puts
85
- puts "//l#{list_number(id)} " + caption
86
- puts '//lst2{'
87
- lines.each do |line|
88
- puts escape(detab(line))
89
- end
90
- puts '//}'
91
- puts
92
- end
93
-
94
- def image_header(file, caption)
95
- if /\.png\z/ =~ file and !FileTest.exist?('images/' + file)
96
- warn "image file not exist: #{file}"
97
- end
98
- id = file.sub(/\.\w+\z/, '')
99
- puts "//f#{figure_number(id)} #{text(caption)} file=#{file}" if id
100
- end
101
-
102
- def image_dummy
103
- puts '//lst1{'
104
- puts '---- dummy figure ----'
105
- print dummy
106
- puts '//}'
107
- puts
108
- end
109
-
110
- def table
111
- # %r<\A//table\[(\w+)\]>
112
- spec = $1
113
- buf = []
114
- while line = f.gets
115
- break if %r[\A//\}] === line
116
- buf.push(line.strip.split(/\t+/).map {|s| s == '.' ? '' : s })
117
- end
118
- table_type = 'tabm'
119
- output.puts "//#{table_type}[" + spec + ']{'
120
- buf.each_with_index do |col, idx|
121
- if /----/ === col[0]
122
- output.puts '//kb'
123
- else
124
- output.puts col.map {|s| text(s) }.join("\t")
125
- end
126
- end
127
- output.puts '//}'
128
- end
129
-
130
- LI = '●'
131
-
132
- def ul_begin
133
- puts
134
- puts '//k1{'
135
- end
136
-
137
- def ul_item(lines)
138
- puts "#{LI}//|" + lines.join('')
139
- end
140
-
141
- def ul_end
142
- puts '//}'
143
- end
144
-
145
- def ol_begin
146
- output.puts
147
- output.puts '//k2{'
148
- end
149
-
150
- def ol_item(num, lines)
151
- print "#{num}//|" + lines.join('')
152
- end
153
-
154
- def ol_end
155
- puts '//}'
156
- end
157
-
158
- def quote(lines)
159
- puts '//c1{'
160
- lines.each do |line|
161
- puts text(line)
162
- end
163
- puts '//}'
164
- end
165
-
166
- def vspace
167
- print %Q(
168
- //h)
169
- end
170
-
171
- def noindent
172
- @noindent = true
173
- end
174
-
175
- def refer(f)
176
- puts
177
- puts '//refer{'
178
- cascade f
179
- puts '//}'
180
- end
181
-
182
- def point(f)
183
- puts
184
- puts '//point{'
185
- cascade f
186
- puts '//}'
187
- end
188
-
189
- def note(f, caption)
190
- puts
191
- puts '//note{'
192
- puts "//cg{#{caption}//}"
193
- puts '//h'
194
- cascade f
195
- puts '//}'
196
- end
197
-
198
- def cascade(f)
199
- # FIXME
200
- end
201
-
202
- Z_SPACE = "\241\241" # zen-kaku space in EUC-JP
203
-
204
- def paragraph(lines)
205
- if @noindent
206
- @noindent = false
207
- else
208
- print Z_SPACE
209
- end
210
- prev = ''
211
- lines.each do |line|
212
- if /[a-zA-Z0-9]\z/ =~ prev and /\A[a-zA-Z0-9]/ =~ line
213
- print ' '
214
- end
215
- print line
216
- end
217
- puts
218
- end
219
-
220
- def figure_filename(key)
221
- if ext = key.slice(/\.\w+\z/)
222
- base = key.sub(/\.\w+\z/, '')
223
- else
224
- base = key
225
- ext = '.eps'
226
- end
227
- currname = "images/ch_#{chapter_id}_#{base}#{ext}"
228
- destname = "images/fig#{figure_number(base)}#{ext}"
229
- unless File.exist? currname
230
- # error "image file not exist: #{currname}"
231
- end
232
- destname
233
- end
234
-
235
- def image_label(str)
236
- "#{chapter_id}:#{str}"
237
- end
238
-
239
- def text(str)
240
- str = str.gsub(/\t/, ' ')
241
- str.gsub(/([^@^]+)|\^(.*?)\^|@<(\w+)>\{(.*?)\}|@\{(.*?)\}|([@^])/) do
242
- if normal = $1
243
- escape(normal)
244
- elsif tt = $2
245
- '//tt{' + escape(tt) + '//}'
246
- elsif inline = $3
247
- compile_inline(inline, $4)
248
- elsif index = $5
249
- error 'index not implemented'
250
- text(index) + index_command(index)
251
- elsif char = $6
252
- escape(char)
253
- else
254
- error "unknown inline: #{str.inspect}"
255
- end
256
- end
257
- rescue DocumentError => e
258
- error e.message
259
- return 'ERROR'
260
- end
261
-
262
- def inline_kw(arg)
263
- word, eng, abbr = arg.split(/,/).map {|s| s.strip }
264
- if abbr
265
- add_index(word) + "//g{#{word}//}" +
266
- add_index(abbr) + "(#{abbr}, " +
267
- add_index(eng) + "#{eng})"
268
- elsif eng
269
- add_index(word) + "//g{#{word}//}" +
270
- add_index(eng) + "(#{eng})"
271
- else
272
- add_index(word) + "//g{#{word}//}"
273
- end
274
- end
275
-
276
- def inline_keytop(arg)
277
- "//keytop{#{arg}//}"
278
- end
279
-
280
- def inline_chap(id)
281
- chapter_number(arg)
282
- end
283
-
284
- def inline_chapref(id)
285
- chapter_number(arg) + chapter_name(arg)
286
- end
287
-
288
- def inline_chapname(id)
289
- chapter_name(arg)
290
- end
291
-
292
- def inline_list(arg)
293
- '//l' + list_number(arg)
294
- end
295
-
296
- def inline_img(arg)
297
- error "wrong image label: #{arg}" if /[^a-zA-Z\d\-]/ =~ arg
298
- '//f' + figure_number(arg)
299
- end
300
-
301
- def inline_footnote(id)
302
- '//ky' + footnote_number(id)
303
- end
304
-
305
- def inline_ruby(arg)
306
- error 'wrong number of arg: @<ruby>' unless arg.count(',') == 1
307
- "//ruby{#{arg}//}"
308
- end
309
-
310
- NAKAGURO = '・'
311
-
312
- def inline_bou(str)
313
- "//ruby{#{escape(str)},#{NAKAGURO * char_length(str)}//}"
314
- end
315
-
316
- def char_length(str)
317
- str.gsub(/./, '.').length
318
- end
319
-
320
- def inline_em(str)
321
- "//g{#{arg}//}"
322
- end
323
-
324
- def inline_math(arg)
325
- "//LaTeX{ $#{arg}$ //}"
326
- end
327
-
328
- def chapter_id
329
- File.basename(@filename, '.rd')
330
- end
331
-
332
- def chapter_prefix
333
- sprintf('%02d', @chapter_table.number(chapter_id))
334
- end
335
-
336
- def chapter_number(key)
337
- curr = @chapter_table.number(chapter_id)
338
- dest = @chapter_table.number(key)
339
-
340
- case chapter_id
341
- when /\.ewb\z/, 'tmp', 'temp'
342
- return '第' + dest + '章'
343
- end
344
- if dest == curr + 1
345
- '次章'
346
- elsif dest == curr - 1
347
- '前章'
348
- else
349
- "第#{dest}章"
350
- end
351
- end
352
-
353
- def chapter_name(key)
354
- '『' + text(@chapter_table.title(key)) + '』'
355
- end
356
-
357
- def list_number(key)
358
- sprintf(chapter_prefix + '%02d0', @list_table.number(key))
359
- end
360
-
361
- def figure_number(key)
362
- sprintf(chapter_prefix + '%02d0', @figure_table.number(key))
363
- end
364
-
365
- def footnote_number(key)
366
- sprintf('%02d', @footnote_index.number(key) * 5)
367
- end
368
-
369
- def add_index(str)
370
- @index_buffer.push str
371
- "//in#{index_number(@index_buffer.size)}"
372
- end
373
-
374
- def index_number(n)
375
- 900_000 + @chapter_index.number(chapter_id) * 1000 + n
376
- end
377
-
378
- def escape(str)
379
- str.gsub(%r{//}, '////')
380
- end
381
- end
382
- end