review 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +90 -66
- data/.travis.yml +1 -1
- data/Gemfile +0 -1
- data/NEWS.ja.md +82 -0
- data/NEWS.md +83 -0
- data/README.md +5 -3
- data/Rakefile +8 -8
- data/bin/review +1 -5
- data/bin/review-catalog-converter +22 -27
- data/bin/review-check +36 -43
- data/bin/review-checkdep +10 -15
- data/bin/review-compile +37 -55
- data/bin/review-epubmaker +4 -5
- data/bin/review-index +21 -29
- data/bin/review-init +26 -37
- data/bin/review-pdfmaker +0 -2
- data/bin/review-preproc +25 -45
- data/bin/review-validate +19 -18
- data/bin/review-vol +15 -27
- data/doc/config.yml.sample +5 -2
- data/doc/format.ja.md +20 -1
- data/doc/format.md +21 -5
- data/doc/images/review-generate.png +0 -0
- data/lib/epubmaker.rb +1 -3
- data/lib/epubmaker/content.rb +24 -27
- data/lib/epubmaker/epubcommon.rb +135 -148
- data/lib/epubmaker/epubv2.rb +39 -46
- data/lib/epubmaker/epubv3.rb +93 -103
- data/lib/epubmaker/producer.rb +138 -151
- data/lib/epubmaker/zip_exporter.rb +21 -26
- data/lib/review/book.rb +3 -6
- data/lib/review/book/base.rb +78 -103
- data/lib/review/book/chapter.rb +36 -40
- data/lib/review/book/compilable.rb +28 -31
- data/lib/review/book/image_finder.rb +6 -13
- data/lib/review/book/index.rb +100 -121
- data/lib/review/book/page_metric.rb +2 -7
- data/lib/review/book/part.rb +18 -20
- data/lib/review/book/volume.rb +9 -13
- data/lib/review/builder.rb +81 -116
- data/lib/review/catalog.rb +15 -19
- data/lib/review/compiler.rb +64 -83
- data/lib/review/configure.rb +87 -97
- data/lib/review/converter.rb +2 -7
- data/lib/review/epubbuilder.rb +1 -3
- data/lib/review/epubmaker.rb +213 -205
- data/lib/review/exception.rb +2 -4
- data/lib/review/extentions.rb +0 -1
- data/lib/review/extentions/hash.rb +2 -2
- data/lib/review/extentions/string.rb +5 -30
- data/lib/review/htmlbuilder.rb +320 -375
- data/lib/review/htmltoc.rb +4 -7
- data/lib/review/htmlutils.rb +29 -32
- data/lib/review/i18n.rb +33 -44
- data/lib/review/i18n.yml +3 -3
- data/lib/review/idgxmlbuilder.rb +309 -345
- data/lib/review/latexbuilder.rb +175 -212
- data/lib/review/latexindex.rb +2 -8
- data/lib/review/latexutils.rb +33 -43
- data/lib/review/lineinput.rb +1 -1
- data/lib/review/logger.rb +21 -0
- data/lib/review/makerhelper.rb +1 -4
- data/lib/review/markdownbuilder.rb +44 -53
- data/lib/review/md2inaobuilder.rb +6 -12
- data/lib/review/pdfmaker.rb +143 -173
- data/lib/review/preprocessor.rb +64 -101
- data/lib/review/rstbuilder.rb +126 -158
- data/lib/review/sec_counter.rb +18 -34
- data/lib/review/template.rb +4 -5
- data/lib/review/textbuilder.rb +2 -3
- data/lib/review/textutils.rb +7 -13
- data/lib/review/tocparser.rb +31 -56
- data/lib/review/tocprinter.rb +26 -52
- data/lib/review/topbuilder.rb +219 -247
- data/lib/review/unfold.rb +15 -24
- data/lib/review/version.rb +1 -1
- data/lib/review/webmaker.rb +75 -99
- data/lib/review/webtocprinter.rb +15 -20
- data/lib/review/yamlloader.rb +13 -15
- data/review.gemspec +20 -22
- data/templates/latex/layout.tex.erb +2 -2
- data/templates/opf/epubv2.opf.erb +7 -7
- data/templates/opf/epubv3.opf.erb +7 -7
- data/templates/web/html/layout-html5.html.erb +2 -2
- data/test/assets/black.eps +280 -0
- data/test/assets/fit.png +0 -0
- data/test/assets/large.gif +0 -0
- data/test/assets/large.jpg +0 -0
- data/test/assets/large.png +0 -0
- data/test/assets/large.svg +65 -0
- data/test/assets/test_template.tex +1 -1
- data/test/book_test_helper.rb +2 -2
- data/test/run_test.rb +4 -4
- data/test/sample-book/src/Rakefile +21 -22
- data/test/syntax-book/Gemfile +4 -0
- data/test/syntax-book/Rakefile +72 -0
- data/test/syntax-book/appA.re +22 -0
- data/test/syntax-book/bib.re +6 -0
- data/test/syntax-book/catalog.yml +15 -0
- data/test/syntax-book/ch01.re +136 -0
- data/test/syntax-book/ch02.re +351 -0
- data/test/syntax-book/ch03.re +82 -0
- data/test/syntax-book/config.yml +35 -0
- data/test/syntax-book/images/ball.png +0 -0
- data/test/syntax-book/images/cover.jpg +0 -0
- data/test/syntax-book/images/fractal.png +0 -0
- data/test/syntax-book/images/img3-1.png +0 -0
- data/test/syntax-book/images/inlineicon.jpg +0 -0
- data/test/syntax-book/images/logic.png +0 -0
- data/test/syntax-book/images/logic2.png +0 -0
- data/test/syntax-book/images/puzzle.jpg +0 -0
- data/test/syntax-book/images/table.jpg +0 -0
- data/test/syntax-book/part2.re +6 -0
- data/test/syntax-book/pre01.re +26 -0
- data/test/syntax-book/review-ext.rb +14 -0
- data/test/syntax-book/sty/jumoline.sty +310 -0
- data/test/syntax-book/sty/reviewmacro.sty +39 -0
- data/test/syntax-book/style.css +494 -0
- data/test/syntax-book/syntax.dic +2 -0
- data/test/test_book.rb +106 -111
- data/test/test_book_chapter.rb +21 -22
- data/test/test_book_part.rb +3 -5
- data/test/test_builder.rb +11 -22
- data/test/test_catalog.rb +17 -18
- data/test/test_catalog_converter_cmd.rb +5 -5
- data/test/test_compiler.rb +18 -16
- data/test/test_configure.rb +35 -38
- data/test/test_converter.rb +3 -4
- data/test/test_epub3maker.rb +136 -117
- data/test/test_epubmaker.rb +107 -114
- data/test/test_epubmaker_cmd.rb +2 -4
- data/test/test_extentions_hash.rb +32 -33
- data/test/test_helper.rb +9 -11
- data/test/test_htmlbuilder.rb +454 -420
- data/test/test_htmltoc.rb +8 -12
- data/test/test_htmlutils.rb +0 -2
- data/test/test_i18n.rb +159 -150
- data/test/test_idgxmlbuilder.rb +190 -197
- data/test/test_image_finder.rb +21 -22
- data/test/test_index.rb +24 -29
- data/test/test_latexbuilder.rb +274 -264
- data/test/test_lineinput.rb +7 -10
- data/test/test_location.rb +7 -7
- data/test/test_makerhelper.rb +13 -25
- data/test/test_markdownbuilder.rb +23 -26
- data/test/test_md2inaobuilder.rb +8 -11
- data/test/test_pdfmaker.rb +114 -123
- data/test/test_pdfmaker_cmd.rb +1 -3
- data/test/test_review_ext.rb +3 -5
- data/test/test_rstbuilder.rb +92 -97
- data/test/test_template.rb +3 -7
- data/test/test_textutils.rb +27 -27
- data/test/test_tocparser.rb +2 -2
- data/test/test_topbuilder.rb +98 -103
- data/test/test_webtocprinter.rb +5 -6
- data/test/test_yamlloader.rb +42 -42
- data/test/test_zip_exporter.rb +12 -18
- metadata +86 -9
- data/lib/review/ewbbuilder.rb +0 -382
data/lib/review/ewbbuilder.rb
DELETED
@@ -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
|