review 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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