review 0.9.0 → 1.0.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.
- data/.travis.yml +9 -0
- data/ChangeLog +326 -0
- data/Rakefile +3 -5
- data/VERSION +1 -1
- data/bin/review-compile +50 -50
- data/bin/review-epubmaker +62 -75
- data/bin/review-epubmaker-ng +185 -0
- data/bin/review-index +2 -1
- data/bin/review-pdfmaker +158 -101
- data/bin/review-vol +6 -2
- data/doc/format.rdoc +111 -46
- data/doc/libepubmaker/sample.yaml +90 -0
- data/doc/quickstart.rdoc +188 -0
- data/doc/sample.yaml +8 -0
- data/lib/epubmaker.rb +28 -0
- data/lib/epubmaker/content.rb +82 -0
- data/lib/epubmaker/epubv2.rb +419 -0
- data/lib/epubmaker/epubv3.rb +249 -0
- data/lib/epubmaker/producer.rb +204 -0
- data/lib/epubmaker/resource.rb +66 -0
- data/lib/review.rb +1 -1
- data/lib/review/book.rb +27 -4
- data/lib/review/builder.rb +153 -20
- data/lib/review/compiler.rb +61 -10
- data/lib/review/ewbbuilder.rb +3 -2
- data/lib/review/htmlbuilder.rb +174 -67
- data/lib/review/i18n.rb +30 -0
- data/lib/review/i18n.yaml +23 -0
- data/lib/review/idgxmlbuilder.rb +110 -63
- data/lib/review/index.rb +34 -12
- data/lib/review/latexbuilder.rb +128 -33
- data/lib/review/latexutils.rb +18 -1
- data/lib/review/textbuilder.rb +17 -0
- data/lib/review/tocparser.rb +3 -1
- data/lib/review/tocprinter.rb +1 -0
- data/lib/review/topbuilder.rb +397 -198
- data/review.gemspec +101 -100
- data/test/test_book.rb +27 -0
- data/test/test_epubmaker.rb +507 -0
- data/test/test_helper.rb +8 -0
- data/test/test_htmlbuilder.rb +295 -10
- data/test/test_i18n.rb +64 -0
- data/test/test_idgxmlbuilder.rb +268 -10
- data/test/test_latexbuilder.rb +316 -20
- data/test/test_preprocessor.rb +23 -0
- data/test/test_topbuilder.rb +246 -0
- metadata +46 -53
- data/doc/format.re +0 -505
- data/test/test_index.rb +0 -15
data/bin/review-index
CHANGED
data/bin/review-pdfmaker
CHANGED
@@ -45,86 +45,51 @@ def main
|
|
45
45
|
values = YAML.load_file(yamlfile)
|
46
46
|
check_book(values)
|
47
47
|
basedir = Dir.pwd
|
48
|
-
path = build_path(values)
|
48
|
+
@path = build_path(values)
|
49
49
|
bookname = values["bookname"]
|
50
|
-
Dir.mkdir(path)
|
50
|
+
Dir.mkdir(@path)
|
51
51
|
|
52
|
-
|
53
|
-
body = 0
|
54
|
-
post = 0
|
55
|
-
@pre_str = ""
|
56
|
-
@chap_str = ""
|
57
|
-
@post_str = ""
|
58
|
-
toccount = 2
|
52
|
+
@chaps_filenames = Hash.new{|h, key| h[key] = ""}
|
59
53
|
|
60
54
|
if File.exists?("PREDEF")
|
61
|
-
|
62
|
-
chaps.each_line {|l|
|
63
|
-
next if l =~ /^#/
|
64
|
-
pre = pre + 1
|
65
|
-
toccount = toccount + 1
|
66
|
-
fork {
|
67
|
-
STDOUT.reopen("#{path}/pre#{pre}.tex")
|
68
|
-
exec("review-compile --target=latex --level=1 #{values["params"]} #{l}")
|
69
|
-
}
|
70
|
-
Process.waitall
|
71
|
-
@pre_str << %Q|\\input{pre#{pre}.tex}\n|
|
72
|
-
}
|
73
|
-
}
|
55
|
+
output_chaps("PREDEF", values)
|
74
56
|
end
|
75
57
|
if File.exists?("CHAPS")
|
76
|
-
|
77
|
-
chaps.each_line {|l|
|
78
|
-
body = body + 1
|
79
|
-
toccount = toccount + 1
|
80
|
-
next if l =~ /^#/
|
81
|
-
fork {
|
82
|
-
STDOUT.reopen("#{path}/chap#{body}.tex")
|
83
|
-
exec("review-compile --target=latex --level=#{values["secnolevel"]} #{values["params"]} #{l}")
|
84
|
-
}
|
85
|
-
Process.waitall
|
86
|
-
@chap_str << %Q|\\input{chap#{body}.tex}\n|
|
87
|
-
}
|
88
|
-
}
|
58
|
+
output_chaps("CHAPS", values)
|
89
59
|
end
|
90
60
|
if File.exists?("POSTDEF")
|
91
|
-
|
92
|
-
chaps.each_line {|l|
|
93
|
-
next if l =~ /^#/
|
94
|
-
post = post + 1
|
95
|
-
toccount = toccount + 1
|
96
|
-
fork {
|
97
|
-
STDOUT.reopen("#{path}/post#{post}.tex")
|
98
|
-
exec("review-compile --target=latex --level=1 #{values["params"]} #{l}")
|
99
|
-
}
|
100
|
-
Process.waitall
|
101
|
-
@post_str << %Q|\\input{post#{post}.tex}\n|
|
102
|
-
}
|
103
|
-
}
|
61
|
+
output_chaps("POSTDEF", values)
|
104
62
|
end
|
105
|
-
values["pre_str"]
|
106
|
-
values["chap_str"] = @
|
107
|
-
values["post_str"] = @
|
63
|
+
values["pre_str"] = @chaps_filenames["PREDEF"]
|
64
|
+
values["chap_str"] = @chaps_filenames["CHAPS"]
|
65
|
+
values["post_str"] = @chaps_filenames["POSTDEF"]
|
108
66
|
|
109
67
|
values["usepackage"] = ""
|
110
68
|
if values["texstyle"]
|
111
69
|
values["usepackage"] = "\\usepackage{#{values['texstyle']}}"
|
112
70
|
end
|
113
71
|
|
114
|
-
copy_images("./images", "#{path}/images")
|
115
|
-
copyStyToDir(Dir.pwd + "/sty", path)
|
72
|
+
copy_images("./images", "#{@path}/images")
|
73
|
+
copyStyToDir(Dir.pwd + "/sty", @path)
|
74
|
+
copyStyToDir(Dir.pwd, @path, "tex")
|
116
75
|
|
117
|
-
Dir.chdir(path) {
|
76
|
+
Dir.chdir(@path) {
|
118
77
|
template = get_template(values)
|
119
78
|
File.open("./book.tex", "wb"){|f| f.write(template)}
|
120
79
|
|
121
80
|
## do compile
|
81
|
+
enc = values["params"].to_s.split(/\s+/).find{|i| i =~ /\A--outencoding=/ }
|
82
|
+
kanji = enc ? enc.split(/=/).last.gsub(/-/, '').downcase : 'utf8'
|
122
83
|
fork {
|
123
|
-
exec("platex book.tex")
|
84
|
+
exec("platex -kanji=#{kanji} book.tex")
|
124
85
|
}
|
125
86
|
Process.waitall
|
126
87
|
fork {
|
127
|
-
exec("platex book.tex")
|
88
|
+
exec("platex -kanji=#{kanji} book.tex")
|
89
|
+
}
|
90
|
+
Process.waitall
|
91
|
+
fork {
|
92
|
+
exec("platex -kanji=#{kanji} book.tex")
|
128
93
|
}
|
129
94
|
Process.waitall
|
130
95
|
fork {
|
@@ -132,8 +97,24 @@ def main
|
|
132
97
|
}
|
133
98
|
Process.waitall
|
134
99
|
}
|
135
|
-
FileUtils.cp("#{path}/book.pdf", "#{basedir}/#{bookname}.pdf")
|
100
|
+
FileUtils.cp("#{@path}/book.pdf", "#{basedir}/#{bookname}.pdf")
|
101
|
+
end
|
136
102
|
|
103
|
+
def output_chaps(chapsfile, values)
|
104
|
+
File.open(chapsfile) {|chaps|
|
105
|
+
chaps.each_line {|l|
|
106
|
+
next if l =~ /^#/
|
107
|
+
file_id = File.basename(l.chomp.strip,".*")
|
108
|
+
filename = "#{file_id}.tex"
|
109
|
+
fork {
|
110
|
+
STDOUT.reopen("#{@path}/#{filename}")
|
111
|
+
$stderr.puts "compiling #{l}"
|
112
|
+
exec("review-compile --target=latex --level=#{values["secnolevel"]} #{values["params"]} #{l}")
|
113
|
+
}
|
114
|
+
Process.waitall
|
115
|
+
@chaps_filenames[chapsfile] << %Q|\\input{#{filename}}\n|
|
116
|
+
}
|
117
|
+
}
|
137
118
|
end
|
138
119
|
|
139
120
|
def copy_images(from, to)
|
@@ -142,16 +123,89 @@ def copy_images(from, to)
|
|
142
123
|
copyImagesToDir(from, to)
|
143
124
|
Dir.chdir(to) {
|
144
125
|
fork {
|
145
|
-
|
126
|
+
begin
|
127
|
+
exec("extractbb *.png *.jpg */*.jpg */*.png;extractbb -m *.png *.jpg */*.jpg */*.png")
|
128
|
+
rescue
|
129
|
+
exec("ebb *.png *.jpg */*.jpg */*.png")
|
130
|
+
end
|
146
131
|
}
|
147
132
|
}
|
148
133
|
Process.waitall
|
149
134
|
end
|
150
135
|
end
|
151
136
|
|
137
|
+
def make_titlepage(values, authors)
|
138
|
+
coverfile = values["coverfile"]
|
139
|
+
if coverfile
|
140
|
+
coverfile_sty = coverfile.sub(/\.[^.]+$/, ".tex")
|
141
|
+
if File.exist?(coverfile_sty)
|
142
|
+
titlepage = File.read(coverfile_sty)
|
143
|
+
return titlepage
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
## use default titlepage template
|
148
|
+
titlepage = <<EOB
|
149
|
+
\\begin{titlepage}
|
150
|
+
EOB
|
151
|
+
if values["coverimage"]
|
152
|
+
titlepage += <<EOB
|
153
|
+
\\begin{center}
|
154
|
+
%%%\\mbox{}\\vskip5zw%
|
155
|
+
\\includegraphics[width=\\textwidth,height=\\textheight,keepaspectratio]{./images/#{values["coverimage"]}}
|
156
|
+
\\end{center}
|
157
|
+
\\clearpage
|
158
|
+
EOB
|
159
|
+
end
|
160
|
+
titlepage += <<EOB
|
161
|
+
\\thispagestyle{empty}
|
162
|
+
\\begin{center}%
|
163
|
+
\\mbox{} \\vskip5zw
|
164
|
+
\\reviewtitlefont%
|
165
|
+
{\\Huge #{values["booktitle"]} \\par}%
|
166
|
+
\\vskip 15em%
|
167
|
+
{\\huge
|
168
|
+
\\lineskip .75em
|
169
|
+
\\begin{tabular}[t]{c}%
|
170
|
+
#{authors}
|
171
|
+
\\end{tabular}\\par}%
|
172
|
+
\\vfill
|
173
|
+
{\\large #{values["date"]} 版\\hspace{2zw}#{values["prt"]} 発行\\par}%
|
174
|
+
\\vskip4zw\\mbox{}
|
175
|
+
\\end{center}%
|
176
|
+
\\end{titlepage}
|
177
|
+
EOB
|
178
|
+
|
179
|
+
return titlepage
|
180
|
+
end
|
181
|
+
|
152
182
|
def get_template(values)
|
183
|
+
dclass = values["texdocumentclass"] || []
|
184
|
+
documentclass = dclass[0] || "jsbook"
|
185
|
+
documentclassoption = dclass[1] || "oneside"
|
186
|
+
|
187
|
+
okuduke = ""
|
188
|
+
authors = ""
|
189
|
+
|
190
|
+
if values["aut"]
|
191
|
+
okuduke += "著 者 & #{values["aut"]} \\\\\n"
|
192
|
+
authors = values["aut"]+ "\\vspace*{1zh} 著"
|
193
|
+
end
|
194
|
+
if values["trl"]
|
195
|
+
authors += " \\\\\n"+values["trl"]+ "\\vspace*{1zh} 訳"
|
196
|
+
okuduke += "翻 訳 & #{values["trl"]} \\\\\n"
|
197
|
+
end
|
198
|
+
if values["edt"]
|
199
|
+
okuduke += "編集者 & #{values["edt"]} \\\\\n"
|
200
|
+
end
|
201
|
+
okuduke += <<EOB
|
202
|
+
発行所 & #{values["prt"]} \\\\
|
203
|
+
EOB
|
204
|
+
|
205
|
+
titlepage = make_titlepage(values, authors)
|
206
|
+
|
153
207
|
str = <<EOB
|
154
|
-
\\documentclass[
|
208
|
+
\\documentclass[#{documentclassoption}]{#{documentclass}}
|
155
209
|
\\usepackage[deluxe]{otf}
|
156
210
|
\\usepackage[dvipdfmx]{color}
|
157
211
|
\\usepackage[dvipdfmx]{graphicx}
|
@@ -182,17 +236,21 @@ def get_template(values)
|
|
182
236
|
\\newcommand{\\parasep}{\\vspace*{3zh}}
|
183
237
|
\\setlength{\\footskip}{30pt}
|
184
238
|
|
185
|
-
\\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,colorlinks=true,%
|
186
|
-
pdftitle={#{values["booktitle"]}},%
|
187
|
-
pdfauthor={#{values["aut"]}}]{hyperref}
|
188
|
-
|
189
239
|
%% Bookmarkの文字化け対策(日本語向け)
|
190
240
|
\\ifnum 46273=\\euc"B4C1 % 46273 == 0xB4C1 == 漢(EUC-JP)
|
191
|
-
\\
|
241
|
+
\\usepackage{atbegshi}%
|
242
|
+
\\AtBeginShipoutFirst{\\special{pdf:tounicode EUC-UCS2}}%
|
243
|
+
%%\\AtBeginDvi{\\special{pdf:tounicode EUC-UCS2}}%
|
192
244
|
\\else
|
193
|
-
\\
|
245
|
+
\\usepackage{atbegshi}%
|
246
|
+
\\AtBeginShipoutFirst{\\special{pdf:tounicode 90ms-RKSJ-UCS2}}%
|
247
|
+
%%\\AtBeginDvi{\\special{pdf:tounicode 90ms-RKSJ-UCS2}}%
|
194
248
|
\\fi
|
195
249
|
|
250
|
+
\\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,colorlinks=true,%
|
251
|
+
pdftitle={#{values["booktitle"]}},%
|
252
|
+
pdfauthor={#{values["aut"]}}]{hyperref}
|
253
|
+
|
196
254
|
\\newenvironment{reviewimage}{%
|
197
255
|
\\begin{figure}[H]
|
198
256
|
\\begin{center}}{%
|
@@ -241,6 +299,12 @@ def get_template(values)
|
|
241
299
|
\\newcommand{\\reviewlistcaption}[1]{%
|
242
300
|
\\medskip{\\small\\noindent #1}\\vspace*{-1.3zw}}
|
243
301
|
|
302
|
+
\\newcommand{\\reviewemlistcaption}[1]{%
|
303
|
+
\\medskip{\\small\\noindent #1}\\vspace*{-1.3zw}}
|
304
|
+
|
305
|
+
\\newcommand{\\reviewcmdcaption}[1]{%
|
306
|
+
\\medskip{\\small\\noindent #1}\\vspace*{-1.3zw}}
|
307
|
+
|
244
308
|
\\newcommand{\\reviewimageref}[1]{%
|
245
309
|
図 #1}
|
246
310
|
\\newcommand{\\reviewtableref}[1]{%
|
@@ -264,6 +328,22 @@ def get_template(values)
|
|
264
328
|
\\newcommand{\\reviewmainfont}[0]{%
|
265
329
|
}
|
266
330
|
|
331
|
+
\\newcommand{\\reviewcolophon}[0]{%
|
332
|
+
\\backmatter
|
333
|
+
\\clearpage}
|
334
|
+
\\newcommand{\\reviewappendix}[0]{%
|
335
|
+
\\appendix}
|
336
|
+
|
337
|
+
\\makeatletter
|
338
|
+
\\def\\maxwidth{%
|
339
|
+
\\ifdim\\Gin@nat@width>\\linewidth
|
340
|
+
\\linewidth
|
341
|
+
\\else
|
342
|
+
\\Gin@nat@width
|
343
|
+
\\fi
|
344
|
+
}
|
345
|
+
\\makeatother
|
346
|
+
|
267
347
|
#{values["usepackage"]}
|
268
348
|
|
269
349
|
\\usepackage[T1]{fontenc}
|
@@ -271,35 +351,10 @@ def get_template(values)
|
|
271
351
|
\\begin{document}
|
272
352
|
|
273
353
|
\\reviewmainfont
|
274
|
-
|
275
|
-
\\begin{titlepage}
|
276
354
|
EOB
|
277
|
-
|
278
|
-
|
279
|
-
\\begin{center}
|
280
|
-
\\mbox{}\\vskip5zw%
|
281
|
-
\\includegraphics[scale=1.0]{./images/#{values["coverimage"]}}
|
282
|
-
\\end{center}
|
283
|
-
\\clearpage
|
284
|
-
EOB
|
285
|
-
end
|
355
|
+
|
356
|
+
str += titlepage
|
286
357
|
str += <<EOB
|
287
|
-
\\thispagestyle{empty}
|
288
|
-
\\begin{center}%
|
289
|
-
\\mbox{} \\vskip5zw
|
290
|
-
\\reviewtitlefont%
|
291
|
-
{\\Huge #{values["booktitle"]} \\par}%
|
292
|
-
\\vskip 15em%
|
293
|
-
{\\huge
|
294
|
-
\\lineskip .75em
|
295
|
-
\\begin{tabular}[t]{c}%
|
296
|
-
#{values["aut"]}\\vspace*{1zh} 著
|
297
|
-
\\end{tabular}\\par}%
|
298
|
-
\\vfill
|
299
|
-
{\\large #{values["date"]} 版\\hspace{2zw}#{values["prt"]} 発行\\par}%
|
300
|
-
\\vskip4zw\\mbox{}
|
301
|
-
\\end{center}%
|
302
|
-
\\end{titlepage}
|
303
358
|
|
304
359
|
\\renewcommand{\\chaptermark}[1]{{}}
|
305
360
|
\\frontmatter
|
@@ -315,13 +370,12 @@ EOB
|
|
315
370
|
#{values["chap_str"]}
|
316
371
|
|
317
372
|
\\renewcommand{\\chaptermark}[1]{\\markboth{\\appendixname\\thechapter~#1}{}}
|
318
|
-
\\
|
373
|
+
\\reviewappendix
|
319
374
|
|
320
375
|
#{values["post_str"]}
|
321
376
|
|
322
377
|
%% okuduke
|
323
|
-
\\
|
324
|
-
\\clearpage
|
378
|
+
\\reviewcolophon
|
325
379
|
\\thispagestyle{empty}
|
326
380
|
|
327
381
|
\\vspace*{\\fill}
|
@@ -333,9 +387,7 @@ EOB
|
|
333
387
|
}
|
334
388
|
|
335
389
|
\\begin{tabular}{ll}
|
336
|
-
|
337
|
-
編集者 & #{values["edt"]} \\\\
|
338
|
-
発行所 & #{values["prt"]} \\\\
|
390
|
+
#{okuduke}
|
339
391
|
\\end{tabular}
|
340
392
|
\\\\
|
341
393
|
\\rule[0pt]{14cm}{1pt} \\\\
|
@@ -353,7 +405,7 @@ def copyImagesToDir(dirname, copybase)
|
|
353
405
|
if FileTest.directory?("#{dirname}/#{fname}")
|
354
406
|
copyImagesToDir("#{dirname}/#{fname}", "#{copybase}/#{fname}")
|
355
407
|
else
|
356
|
-
if fname =~ /\.(png|gif|jpg|jpeg|svg)$/i
|
408
|
+
if fname =~ /\.(png|gif|jpg|jpeg|svg|pdf)$/i
|
357
409
|
Dir.mkdir(copybase) unless File.exist?(copybase)
|
358
410
|
FileUtils.cp "#{dirname}/#{fname}", copybase
|
359
411
|
end
|
@@ -362,11 +414,16 @@ def copyImagesToDir(dirname, copybase)
|
|
362
414
|
}
|
363
415
|
end
|
364
416
|
|
365
|
-
def copyStyToDir(dirname, copybase)
|
417
|
+
def copyStyToDir(dirname, copybase, extname = "sty")
|
418
|
+
unless File.directory?(dirname)
|
419
|
+
$stderr.puts "No such directory - #{dirname}"
|
420
|
+
return
|
421
|
+
end
|
422
|
+
|
366
423
|
Dir.open(dirname) {|dir|
|
367
424
|
dir.each {|fname|
|
368
425
|
next if fname =~ /^\./
|
369
|
-
if fname =~ /\.(
|
426
|
+
if fname =~ /\.(#{extname})$/i
|
370
427
|
Dir.mkdir(copybase) unless File.exist?(copybase)
|
371
428
|
FileUtils.cp "#{dirname}/#{fname}", copybase
|
372
429
|
end
|
data/bin/review-vol
CHANGED
@@ -29,6 +29,7 @@ def main
|
|
29
29
|
}
|
30
30
|
|
31
31
|
part_sensitive = false
|
32
|
+
basedir = nil
|
32
33
|
parser = OptionParser.new
|
33
34
|
parser.on('-P', '--part-sensitive', 'Prints volume of each parts.') {
|
34
35
|
part_sensitive = true
|
@@ -39,6 +40,9 @@ def main
|
|
39
40
|
parser.on('--outencoding=ENCODING', 'Set output encoding. (UTF-8[default], EUC, JIS, and SJIS)') {|enc|
|
40
41
|
@param["outencoding"] = enc
|
41
42
|
}
|
43
|
+
parser.on('--directory=DIR', 'Compile all chapters in DIR.') {|path|
|
44
|
+
basedir = path
|
45
|
+
}
|
42
46
|
parser.on('--help', 'Print this message and quit') {
|
43
47
|
puts parser.help
|
44
48
|
exit 0
|
@@ -51,13 +55,13 @@ def main
|
|
51
55
|
exit 1
|
52
56
|
end
|
53
57
|
|
54
|
-
book = ReVIEW.book
|
58
|
+
book = basedir ? ReVIEW::Book.load(basedir) : ReVIEW.book
|
55
59
|
ReVIEW.book.param = @param
|
56
60
|
if part_sensitive
|
57
61
|
sep = ""
|
58
62
|
book.each_part do |part|
|
59
63
|
print sep; sep = "\n"
|
60
|
-
puts "Part #{part.number}" if part.number
|
64
|
+
puts "Part #{part.number} #{part.name}" if part.number
|
61
65
|
part.each_chapter do |chap|
|
62
66
|
print_chapter_volume chap
|
63
67
|
end
|
data/doc/format.rdoc
CHANGED
@@ -9,7 +9,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
9
9
|
段落(本文)の間は英語の段落のように1行空けます。ただし、組版に
|
10
10
|
まわすときは前処理して1段落を1行に変更してあります。
|
11
11
|
|
12
|
-
|
12
|
+
例:
|
13
13
|
|
14
14
|
だんらくだんらく〜〜〜
|
15
15
|
この行も同じ段落
|
@@ -22,7 +22,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
22
22
|
|
23
23
|
章・節・項・段など、見出しは「=」「==」「===」「====」「=====」です。6 レベル以上は使えません。
|
24
24
|
|
25
|
-
|
25
|
+
例:
|
26
26
|
|
27
27
|
= 章のキャプション
|
28
28
|
|
@@ -40,22 +40,34 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
40
40
|
|
41
41
|
節や項の見出しに [column] を追加するとコラムのキャプションになります。
|
42
42
|
|
43
|
-
|
43
|
+
例:
|
44
44
|
|
45
45
|
===[column] コンパイラコンパイラ
|
46
46
|
|
47
47
|
このとき、「=」と「[column]」は間を開けず、必ず続けて書かなければ
|
48
48
|
なりません。空白があってもいけません。
|
49
49
|
|
50
|
+
次の節や項を待たずにコラムを終了する場合は、「===[/column]」を記述します。
|
51
|
+
|
52
|
+
例:
|
53
|
+
|
54
|
+
===[column] コンパイラコンパイラ
|
55
|
+
|
56
|
+
コラムの内容
|
57
|
+
|
58
|
+
===[/column]
|
59
|
+
|
50
60
|
== 箇条書き
|
51
61
|
|
52
62
|
箇条書き (HTML で言う ul) は「*」で表現します。
|
53
|
-
|
63
|
+
ネストは「**」のように深さに応じて数を増やします。
|
54
64
|
|
55
|
-
|
65
|
+
例:
|
56
66
|
|
57
67
|
* 第一の項目
|
68
|
+
** 第一の項目のネスト
|
58
69
|
* 第二の項目
|
70
|
+
** 第二の項目のネスト
|
59
71
|
* 第三の項目
|
60
72
|
|
61
73
|
箇条書きを書くには、行頭に1つ以上の空白を必ず入れるようにします。
|
@@ -66,7 +78,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
66
78
|
番号付きの箇条書き (HTML で言う ol) は「1. 〜」「2. 〜」
|
67
79
|
「3. 〜」で示します。ネストはしません。
|
68
80
|
|
69
|
-
|
81
|
+
例:
|
70
82
|
|
71
83
|
1. 第一の条件
|
72
84
|
2. 第二の条件
|
@@ -78,7 +90,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
78
90
|
|
79
91
|
用語リスト (HTML で言う dl) は「:」と、続く空白で始まる行を使って示します。
|
80
92
|
|
81
|
-
|
93
|
+
例:
|
82
94
|
|
83
95
|
: Alpha
|
84
96
|
DEC の作っていた RISC CPU。
|
@@ -105,7 +117,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
105
117
|
連番なしリストは「//emlist[キャプション]{ 〜 //}」です。
|
106
118
|
//emlistのキャプションは省略できます。
|
107
119
|
|
108
|
-
|
120
|
+
例:
|
109
121
|
|
110
122
|
//list[main][main()]{ ←「main」が識別子で「main()」がキャプション
|
111
123
|
int
|
@@ -116,7 +128,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
116
128
|
}
|
117
129
|
//}
|
118
130
|
|
119
|
-
|
131
|
+
例:
|
120
132
|
|
121
133
|
//emlist{
|
122
134
|
printf("hello");
|
@@ -132,7 +144,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
132
144
|
|
133
145
|
ソースコードを引用する場合、ファイル名が必要です。
|
134
146
|
|
135
|
-
|
147
|
+
例:
|
136
148
|
|
137
149
|
//source[/hello/world.rb]{
|
138
150
|
puts "hello world!"
|
@@ -145,7 +157,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
145
157
|
|
146
158
|
連番ありのリスト(list)で自動的に行番号がつきます。
|
147
159
|
|
148
|
-
|
160
|
+
例:
|
149
161
|
|
150
162
|
//listnum[hello][ハローワールド]{
|
151
163
|
puts "hello world!"
|
@@ -153,7 +165,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
153
165
|
|
154
166
|
参照方法はlistと変わりません。
|
155
167
|
|
156
|
-
|
168
|
+
例:
|
157
169
|
|
158
170
|
..は@<list>{hello}をみてください。
|
159
171
|
|
@@ -161,7 +173,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
161
173
|
|
162
174
|
連番なしのリスト(emlist)で自動的に行番号がつきます。
|
163
175
|
|
164
|
-
|
176
|
+
例:
|
165
177
|
|
166
178
|
//emlistnum{
|
167
179
|
puts "hello world!"
|
@@ -171,7 +183,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
171
183
|
|
172
184
|
本文中でソースコードを引用して記述します。
|
173
185
|
|
174
|
-
|
186
|
+
例:
|
175
187
|
|
176
188
|
@<code>{p = obj.ref_cnt}
|
177
189
|
|
@@ -179,7 +191,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
179
191
|
|
180
192
|
コマンドラインの操作を示すときは //cmd{ 〜 //} を使います。
|
181
193
|
|
182
|
-
|
194
|
+
例:
|
183
195
|
|
184
196
|
//cmd{
|
185
197
|
$ ls /
|
@@ -193,16 +205,16 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
193
205
|
代替しているため、ダミーのアスキーアートが入っていることがあり
|
194
206
|
ます。この部分は、組版時には単に無視してください。
|
195
207
|
|
196
|
-
|
208
|
+
例:
|
197
209
|
|
198
210
|
//image[unixhistory][UNIX系OSの簡単な系譜]{
|
199
|
-
|
200
|
-
|
211
|
+
System V 系列
|
212
|
+
+----------- SVr4 --> 各種商用UNIX(Solaris, AIX, HP-UX, ...)
|
201
213
|
V1 --> V6 --|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
214
|
+
+--------- 4.4BSD --> FreeBSD, NetBSD, OpenBSD, ...
|
215
|
+
BSD 系列
|
216
|
+
|
217
|
+
--------------> Linux
|
206
218
|
//}
|
207
219
|
|
208
220
|
3番目の引数として、画像の倍率・大きさを指定することができます。
|
@@ -218,17 +230,29 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
218
230
|
|
219
231
|
//indepimage[ファイル名][キャプション] で番号が振られていない画像ファイルを生成します。キャプションは省略できます。
|
220
232
|
|
221
|
-
|
233
|
+
例:
|
222
234
|
|
223
235
|
//indepimage[unixhistory2]
|
224
236
|
|
225
237
|
同様のことは、//numberlessimageでも使えます。
|
226
238
|
|
227
|
-
|
239
|
+
例:
|
228
240
|
|
229
241
|
//numberlessimage[door_image_path][扉絵]
|
230
242
|
|
231
|
-
※ただし、//indepimageと機能的にかぶっているので、将来は廃止され、//
|
243
|
+
※ただし、//indepimageと機能的にかぶっているので、将来は廃止され、//indepimageに統合される予定です。
|
244
|
+
|
245
|
+
== グラフ表現ツールを使った図
|
246
|
+
|
247
|
+
//graph[ファイル名][コマンド名][キャプション] で各種グラフ表現ツールを使った画像ファイルの生成ができます。キャプションは省略できます。
|
248
|
+
|
249
|
+
例: gnuplotの使用
|
250
|
+
|
251
|
+
//graph[sin_x][gnuplot]{
|
252
|
+
plot sin(x)
|
253
|
+
//}
|
254
|
+
|
255
|
+
コマンド名には、「graphviz」「gnuplot」「blockdiag」「aafigure」のいずれかを指定できます。ツールはそれぞれ別途インストールする必要があります。
|
232
256
|
|
233
257
|
== 表
|
234
258
|
|
@@ -240,7 +264,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
240
264
|
付けてください。例えば「.」という内容のカラムは「..」と書きます。
|
241
265
|
また、空のカラムは「.」と書けます。
|
242
266
|
|
243
|
-
|
267
|
+
例:
|
244
268
|
|
245
269
|
//table[envvars][重要な環境変数]{
|
246
270
|
名前 意味
|
@@ -265,7 +289,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
265
289
|
|
266
290
|
引用は「//quote{ 〜 //}」を使って記述します。
|
267
291
|
|
268
|
-
|
292
|
+
例:
|
269
293
|
|
270
294
|
//quote{
|
271
295
|
百聞は一見に如かず。
|
@@ -278,7 +302,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
278
302
|
|
279
303
|
脚注は「//footnote」を使って記述します。
|
280
304
|
|
281
|
-
|
305
|
+
例:
|
282
306
|
|
283
307
|
パッケージは本書のサポートサイトから入手できます@<fn>{site}。
|
284
308
|
各自ダウンロードしてインストールしておいてください。
|
@@ -294,7 +318,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
294
318
|
コメントが無い場合も定義可能です。
|
295
319
|
//bibpaper[site][キャプション]
|
296
320
|
|
297
|
-
|
321
|
+
例:
|
298
322
|
|
299
323
|
//bibpaper[lins][Lins, 1991]{
|
300
324
|
Refael D. Lins. A shared memory architecture for parallel study of
|
@@ -305,7 +329,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
305
329
|
|
306
330
|
本文中で参考文献を参照したい場合は次のようにしてください。
|
307
331
|
|
308
|
-
|
332
|
+
例:
|
309
333
|
|
310
334
|
…という研究が知られています(@<bib>{lins})
|
311
335
|
|
@@ -314,7 +338,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
314
338
|
リード文は //lead{ 〜 //} で指定します。
|
315
339
|
歴史的経緯により//read{ 〜 //} でも使えます。
|
316
340
|
|
317
|
-
|
341
|
+
例:
|
318
342
|
|
319
343
|
//lead{
|
320
344
|
本章ではまずこの本の概要について話し、
|
@@ -325,7 +349,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
325
349
|
|
326
350
|
LaTeX の式を挿入するには、//texequation{ 〜 //} を使います。
|
327
351
|
|
328
|
-
|
352
|
+
例:
|
329
353
|
|
330
354
|
//texequation{
|
331
355
|
\sum_{i=1}^nf_n(x)
|
@@ -345,16 +369,42 @@ LaTeX の式を挿入するには、//texequation{ 〜 //} を使います。
|
|
345
369
|
|
346
370
|
最終結果に出力されないコメントを記述したい場合は「#@#」を使ってください。
|
347
371
|
|
348
|
-
|
372
|
+
例:
|
349
373
|
|
350
374
|
#@# ここで 1 行あける
|
351
375
|
|
352
376
|
また、修正が必要な警告的コメントには#@warn(...)を使ってください。
|
353
377
|
|
354
|
-
|
378
|
+
例:
|
355
379
|
|
356
380
|
#@warn(あとで書く)
|
357
381
|
|
382
|
+
== 生データ行
|
383
|
+
|
384
|
+
ReVIEW のタグ範囲を越えて何か特別な行を挿入したい場合、//raw を使います。
|
385
|
+
|
386
|
+
例:
|
387
|
+
|
388
|
+
//raw[|html|<div class="special">\nここは特別な行です。\n</div>]
|
389
|
+
|
390
|
+
「|ビルダ名|そのまま出力させる内容」という書式です。
|
391
|
+
|
392
|
+
ビルダ名には「html」「latex」「idgxml」「top」のいずれかが入り、(複数のビルダにまたがる指定が必要かは別として)「,」で区切って複数指定することも可能です。
|
393
|
+
「バックスラッシュ+n」は改行に変換されます。
|
394
|
+
該当のビルダを使用しているときのみ、内容が出力されます。
|
395
|
+
|
396
|
+
例:
|
397
|
+
|
398
|
+
(HTMLビルダの場合:)
|
399
|
+
<div class="special">
|
400
|
+
ここは特別な行です。
|
401
|
+
</div>
|
402
|
+
|
403
|
+
(ほかのビルダの場合は単に無視されて何も出力されない)
|
404
|
+
|
405
|
+
//raw およびこの後に紹介する @<raw> インラインタグは、誤った内容を入れると
|
406
|
+
構造化文書を容易に破壊し得ることに注意してください。
|
407
|
+
|
358
408
|
== その他の文法
|
359
409
|
|
360
410
|
ReVIEW は任意のブロックを追加可能なので、本によって専用ブロックを
|
@@ -389,7 +439,7 @@ ReVIEW は任意のブロックを追加可能なので、本によって専用
|
|
389
439
|
@<icon>{samplephoto}:: インライン画像。
|
390
440
|
@<uchar>{2460}:: Unicode文字の出力。引数は16進数で指定する。
|
391
441
|
@<href>{http://www.google.com/}:: リンク。URLで指定できる
|
392
|
-
@<raw>{
|
442
|
+
@<raw>{|ビルダ名|<span>★</span>}:: そのまま出力する。「}」は「バックスラッシュ+}」でエスケープする。ビルダ名は「html」「latex」「idgxml」「top」のいずれかで、「,」で区切って複数指定することも可能。該当のビルダを使用時のみ、出力される。内容に「バックスラッシュ+n」を入れると改行に変換される。
|
393
443
|
|
394
444
|
== 著者用タグ (プリプロセッサ命令)
|
395
445
|
|
@@ -409,13 +459,7 @@ ReVIEW は任意のブロックを追加可能なので、本によって専用
|
|
409
459
|
CHAPSファイルが置かれているディレクトリに layouts/layout.erb
|
410
460
|
を置くとその html を ERB で評価します。
|
411
461
|
|
412
|
-
|
413
|
-
|
414
|
-
<html>
|
415
|
-
<head>
|
416
|
-
<title><%= title %></title>
|
417
|
-
</head>
|
418
|
-
[例]
|
462
|
+
例:
|
419
463
|
|
420
464
|
<html>
|
421
465
|
<head>
|
@@ -432,7 +476,7 @@ CHAPSファイルが置かれているディレクトリに layouts/layout.erb
|
|
432
476
|
PART ファイルに定義してください。
|
433
477
|
PART ファイルは CHAPS の部わけと対応しています。
|
434
478
|
|
435
|
-
|
479
|
+
例:
|
436
480
|
|
437
481
|
CHAPS:
|
438
482
|
intro.re
|
@@ -451,13 +495,13 @@ PART:
|
|
451
495
|
見出し番号と見出しを生成します。
|
452
496
|
見出しの階層は"|"で区切って指定してください。
|
453
497
|
|
454
|
-
|
498
|
+
例:
|
455
499
|
|
456
500
|
@<hd>{はじめに|まずわ}
|
457
501
|
|
458
502
|
他の章を参照したい場合は、先頭に章のidを指定してください。
|
459
503
|
|
460
|
-
|
504
|
+
例:
|
461
505
|
|
462
506
|
@<hd>{preface|はじめに|まずわ}
|
463
507
|
|
@@ -468,10 +512,31 @@ Web ハイパーリンクを記述するには、リンクに @<href>、アン
|
|
468
512
|
省略すると URL がそのまま使われます。URL 中に , を使いたいときには、\,
|
469
513
|
と表記してください。
|
470
514
|
|
471
|
-
|
515
|
+
例:
|
472
516
|
|
473
517
|
@<href>{http://github.com/, GitHub}
|
474
518
|
@<href>{http://www.google.com/}
|
475
519
|
@<href>{#point1, ドキュメント内ポイント}
|
476
520
|
@<href>{chap1.html#point1, ドキュメント内ポイント}
|
477
521
|
//label[point1]
|
522
|
+
|
523
|
+
== 国際化(i18n)
|
524
|
+
|
525
|
+
ReVIEWが出力する文字列(「第◯章」「図」「表」など)を、指定した言語に
|
526
|
+
合わせて出力することができます。デフォルトは日本語です。
|
527
|
+
|
528
|
+
CHAPS などと同じディレクトリに locale.yaml というファイルを用意して、
|
529
|
+
以下のように記述します(日本語の場合)。
|
530
|
+
|
531
|
+
例:
|
532
|
+
|
533
|
+
locale: ja
|
534
|
+
|
535
|
+
既存の表記を書き換えたい場合は、該当する項目を上書きします。
|
536
|
+
既存の設定ファイルは lib/review/i18n.yaml にあります。
|
537
|
+
|
538
|
+
例:
|
539
|
+
|
540
|
+
locale: ja
|
541
|
+
image: イメージ
|
542
|
+
table: テーブル
|