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.
Files changed (49) hide show
  1. data/.travis.yml +9 -0
  2. data/ChangeLog +326 -0
  3. data/Rakefile +3 -5
  4. data/VERSION +1 -1
  5. data/bin/review-compile +50 -50
  6. data/bin/review-epubmaker +62 -75
  7. data/bin/review-epubmaker-ng +185 -0
  8. data/bin/review-index +2 -1
  9. data/bin/review-pdfmaker +158 -101
  10. data/bin/review-vol +6 -2
  11. data/doc/format.rdoc +111 -46
  12. data/doc/libepubmaker/sample.yaml +90 -0
  13. data/doc/quickstart.rdoc +188 -0
  14. data/doc/sample.yaml +8 -0
  15. data/lib/epubmaker.rb +28 -0
  16. data/lib/epubmaker/content.rb +82 -0
  17. data/lib/epubmaker/epubv2.rb +419 -0
  18. data/lib/epubmaker/epubv3.rb +249 -0
  19. data/lib/epubmaker/producer.rb +204 -0
  20. data/lib/epubmaker/resource.rb +66 -0
  21. data/lib/review.rb +1 -1
  22. data/lib/review/book.rb +27 -4
  23. data/lib/review/builder.rb +153 -20
  24. data/lib/review/compiler.rb +61 -10
  25. data/lib/review/ewbbuilder.rb +3 -2
  26. data/lib/review/htmlbuilder.rb +174 -67
  27. data/lib/review/i18n.rb +30 -0
  28. data/lib/review/i18n.yaml +23 -0
  29. data/lib/review/idgxmlbuilder.rb +110 -63
  30. data/lib/review/index.rb +34 -12
  31. data/lib/review/latexbuilder.rb +128 -33
  32. data/lib/review/latexutils.rb +18 -1
  33. data/lib/review/textbuilder.rb +17 -0
  34. data/lib/review/tocparser.rb +3 -1
  35. data/lib/review/tocprinter.rb +1 -0
  36. data/lib/review/topbuilder.rb +397 -198
  37. data/review.gemspec +101 -100
  38. data/test/test_book.rb +27 -0
  39. data/test/test_epubmaker.rb +507 -0
  40. data/test/test_helper.rb +8 -0
  41. data/test/test_htmlbuilder.rb +295 -10
  42. data/test/test_i18n.rb +64 -0
  43. data/test/test_idgxmlbuilder.rb +268 -10
  44. data/test/test_latexbuilder.rb +316 -20
  45. data/test/test_preprocessor.rb +23 -0
  46. data/test/test_topbuilder.rb +246 -0
  47. metadata +46 -53
  48. data/doc/format.re +0 -505
  49. data/test/test_index.rb +0 -15
data/bin/review-index CHANGED
@@ -96,7 +96,8 @@ def _main
96
96
  error_exit '-a/-s option and file arguments are exclusive'
97
97
  end
98
98
  else
99
- source = ReVIEW::ChapterSet.for_argv
99
+ puts parser.help
100
+ exit 0
100
101
  end
101
102
 
102
103
  begin
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
- pre = 0
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
- File.open("PREDEF") {|chaps|
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
- File.open("CHAPS") {|chaps|
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
- File.open("POSTDEF") {|chaps|
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"] = @pre_str
106
- values["chap_str"] = @chap_str
107
- values["post_str"] = @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
- exec("ebb *.png *.jpg")
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[oneside]{jsbook}
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
- \\AtBeginDvi{\\special{pdf:tounicode EUC-UCS2}}%
241
+ \\usepackage{atbegshi}%
242
+ \\AtBeginShipoutFirst{\\special{pdf:tounicode EUC-UCS2}}%
243
+ %%\\AtBeginDvi{\\special{pdf:tounicode EUC-UCS2}}%
192
244
  \\else
193
- \\AtBeginDvi{\\special{pdf:tounicode 90ms-RKSJ-UCS2}}%
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
- if values["coverimage"]
278
- str += <<EOB
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
- \\appendix
373
+ \\reviewappendix
319
374
 
320
375
  #{values["post_str"]}
321
376
 
322
377
  %% okuduke
323
- \\backmatter
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
- 著 者 & #{values["aut"]} \\\\
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 =~ /\.(sty)$/i
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
- System V 系列
200
- +----------- SVr4 --> 各種商用UNIX(Solaris, AIX, HP-UX, ...)
211
+ System V 系列
212
+ +----------- SVr4 --> 各種商用UNIX(Solaris, AIX, HP-UX, ...)
201
213
  V1 --> V6 --|
202
- +--------- 4.4BSD --> FreeBSD, NetBSD, OpenBSD, ...
203
- BSD 系列
204
-
205
- --------------> Linux
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と機能的にかぶっているので、将来は廃止され、//indexpimageに統合される予定です。
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>{@<foo>{bar\}}:: そのまま出力する。「}」は「\」でエスケープする。
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: テーブル