review 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.travis.yml +1 -0
  4. data/ChangeLog +87 -0
  5. data/bin/review-check +2 -2
  6. data/bin/review-compile +15 -30
  7. data/bin/review-index +1 -1
  8. data/bin/review-init +12 -7
  9. data/bin/review-vol +9 -1
  10. data/doc/catalog.ja.md +53 -0
  11. data/doc/catalog.md +52 -0
  12. data/doc/format.ja.md +734 -0
  13. data/doc/format.md +746 -0
  14. data/doc/format_idg.ja.md +203 -0
  15. data/doc/{quickstart.rdoc → quickstart.ja.md} +138 -104
  16. data/doc/quickstart.md +252 -0
  17. data/doc/sample.yml +216 -48
  18. data/lib/epubmaker.rb +0 -1
  19. data/lib/epubmaker/content.rb +2 -2
  20. data/lib/epubmaker/epubcommon.rb +440 -0
  21. data/lib/epubmaker/epubv2.rb +8 -418
  22. data/lib/epubmaker/epubv3.rb +67 -61
  23. data/lib/epubmaker/producer.rb +60 -19
  24. data/lib/review/book.rb +1 -3
  25. data/lib/review/book/base.rb +18 -11
  26. data/lib/review/book/chapter.rb +5 -24
  27. data/lib/review/book/compilable.rb +5 -1
  28. data/lib/review/book/index.rb +48 -17
  29. data/lib/review/book/page_metric.rb +17 -8
  30. data/lib/review/book/part.rb +12 -2
  31. data/lib/review/book/volume.rb +3 -2
  32. data/lib/review/builder.rb +30 -10
  33. data/lib/review/compiler.rb +6 -4
  34. data/lib/review/configure.rb +3 -3
  35. data/lib/review/epubmaker.rb +56 -26
  36. data/lib/review/htmlbuilder.rb +33 -42
  37. data/lib/review/htmlutils.rb +12 -7
  38. data/lib/review/i18n.rb +77 -17
  39. data/lib/review/i18n.yml +80 -4
  40. data/lib/review/idgxmlbuilder.rb +27 -57
  41. data/lib/review/inaobuilder.rb +3 -3
  42. data/lib/review/latexbuilder.rb +90 -67
  43. data/lib/review/layout.tex.erb +54 -7
  44. data/lib/review/markdownbuilder.rb +21 -3
  45. data/lib/review/pdfmaker.rb +67 -38
  46. data/lib/review/sec_counter.rb +1 -1
  47. data/lib/review/tocparser.rb +9 -5
  48. data/lib/review/topbuilder.rb +6 -6
  49. data/lib/review/version.rb +1 -1
  50. data/review.gemspec +3 -1
  51. data/test/book_test_helper.rb +1 -1
  52. data/test/sample-book/README.md +2 -0
  53. data/test/sample-book/src/Rakefile +31 -0
  54. data/test/sample-book/src/_cover.html +0 -0
  55. data/test/sample-book/src/catalog.yml +10 -0
  56. data/test/sample-book/src/ch01.re +0 -0
  57. data/test/sample-book/src/ch02.re +0 -0
  58. data/test/sample-book/src/config.yml +160 -32
  59. data/test/sample-book/src/images/ch01-imgsample.jpg +0 -0
  60. data/test/sample-book/src/images/cover.jpg +0 -0
  61. data/test/sample-book/src/preface.re +0 -0
  62. data/test/sample-book/src/sty/jumoline.sty +0 -0
  63. data/test/sample-book/src/sty/reviewmacro.sty +18 -0
  64. data/test/sample-book/src/style.css +0 -0
  65. data/test/test_book.rb +25 -27
  66. data/test/test_book_chapter.rb +4 -73
  67. data/test/test_book_part.rb +5 -4
  68. data/test/test_builder.rb +3 -3
  69. data/test/test_epub3maker.rb +527 -0
  70. data/test/test_epubmaker.rb +6 -6
  71. data/test/test_htmlbuilder.rb +143 -6
  72. data/test/test_i18n.rb +95 -10
  73. data/test/test_idgxmlbuilder.rb +28 -2
  74. data/test/test_index.rb +109 -1
  75. data/test/test_latexbuilder.rb +51 -0
  76. data/test/test_markdownbuilder.rb +54 -1
  77. data/test/test_pdfmaker.rb +7 -6
  78. data/test/test_review_ext.rb +31 -0
  79. data/test/test_topbuilder.rb +3 -1
  80. metadata +46 -13
  81. data/doc/catalog.rdoc +0 -49
  82. data/doc/format.rdoc +0 -618
  83. data/doc/format_idg.rdoc +0 -180
  84. data/doc/libepubmaker/config.yml +0 -207
  85. data/lib/epubmaker/resource.rb +0 -82
  86. data/test/sample-book/src/CHAPS +0 -2
  87. data/test/sample-book/src/PREDEF +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7003949429e45e08f404dd70af9d6cbe419d6b74
4
- data.tar.gz: 081d336549a9141b9172c1dd1f0cc673bce73bbf
3
+ metadata.gz: aaa0a3b0a265168c14172ed379cbf7410cdb7dc9
4
+ data.tar.gz: b598d3083be1ab3bc3380a9c5f27d258e4a66e4b
5
5
  SHA512:
6
- metadata.gz: 2b74a8d6ff2b7258b7fbcb51b27f2417f066734a96ec86cd75cc0a3d15d91c9d958630e4ed88519d3a0cde307309a08f124231cd0409b093ba337a7fab0c1544
7
- data.tar.gz: 2fa797cd9ff23cddc563440e07d03de0fd75a130ca73ea7b5192a03175e2e79135c7c6b75e33ae1413981f595b64e69029531f4e499a2119603e84d62f8596a8
6
+ metadata.gz: 18250a41bc4a1f1cf496dd882fd0acf2872488251200cb9b9188a0e371e3859725b446229d47896d6248f517368fd3da0df3062021465ab26d60f1a14a441541
7
+ data.tar.gz: 5c5f8250df19b7a18b2da44e2f030e8be7b2cd03fbfa15ac04b29dbb00067f8085dc9d26d7a3792726ae28ca7244b4c24bf6e83ea90dc87ef5f33d11911185e1
data/.gitignore CHANGED
@@ -25,7 +25,7 @@ build/
25
25
 
26
26
  # for a library or gem, you might want to ignore these files since the code is
27
27
  # intended to run in multiple environments; otherwise, check them in:
28
- # Gemfile.lock
28
+ Gemfile.lock
29
29
  # .ruby-version
30
30
  # .ruby-gemset
31
31
 
data/.travis.yml CHANGED
@@ -3,6 +3,7 @@ rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
5
  - 2.1.*
6
+ - 2.2.*
6
7
 
7
8
  branches:
8
9
  only:
data/ChangeLog CHANGED
@@ -1,3 +1,90 @@
1
+ Sat Feb 28 19:51:29 2015 KADO Masanori <kdmsnr@gmail.com>
2
+
3
+ * Release 1.5.0.
4
+
5
+ Sun Feb 1 20:17:22 2015 Kenshi Muto <kmuto@debian.org>
6
+
7
+ * bin/review-epubmaker:
8
+ Introduce structured YAML tree.
9
+
10
+ Some epubmaker-specific configurations are moved under "epubmaker:".
11
+ You can still keep to use parameters for compatibility,
12
+ but you'll get a 'deprecated' warning message.
13
+
14
+ epubmaker:
15
+ ncxindent: ...
16
+ flattoc: ...
17
+ flattocindent: ...
18
+ hook_beforeprocess: ...
19
+ hook_afterfrontmatter: ...
20
+ hook_afterbody: ...
21
+ hook_afterbackmatter: ...
22
+ hook_aftercopyimage] ...
23
+ hook_prepack] ...
24
+ rename_for_legacy: ...
25
+ zip_stage1: ...
26
+ zip_stage2: ...
27
+ zip_addpath: ...
28
+ verify_target_images: ...
29
+ force_include_images: ...
30
+ cover_linear: ...
31
+
32
+ * bin/review-pdfmaker:
33
+ Introduce structured YAML tree and new hooks.
34
+
35
+ pdfmaker:
36
+ hook_beforetexcompile: ... (before LaTeX compiling)
37
+ hook_aftertexcompile: ... (after all of LaTeX compiling)
38
+ hook_afterdvipdf: ... (after dvipdfm conversion)
39
+
40
+ These hooks get two arguments. $1 is temporary build directory.
41
+ $2 is the base directory (where you executed review-pdfmaker).
42
+
43
+ Mon Jan 26 20:29:30 2015 Masayoshi Takahashi <takahashimm@gmail.com>
44
+
45
+ * lib/review/i18n.rb:
46
+ To initialize after loading config.yml, modifiy API I18n.setup
47
+ and remove I18n.i18n.
48
+
49
+ Tue Jan 13 19:26:04 2015 Masayoshi Takahashi <takahashimm@gmail.com>
50
+
51
+ * lib/review/pdfmaker.rb:
52
+ review-pdfmaker removes a PDF file if already exists
53
+
54
+ As a PDF file can be re-generated from source files, review-pdfmaker
55
+ remove the file when the file exists rather than exiting with error.
56
+ review-epubmaker do the same way.
57
+
58
+ Tue Dec 9 15:25:38 2014 Masayoshi Takahashi <takahashimm@gmail.com>
59
+
60
+ * lib/review/configure.rb:
61
+ update default value of "toc" as nil.
62
+ If you need TOC page in body, you should add "toc: true" in config.yml (EPUB2/3, LaTeX).
63
+
64
+ Tue Dec 9 10:27:21 2014 Masayoshi Takahashi <takahashimm@gmail.com>
65
+
66
+ * bin/review-vol:
67
+ add --yaml option to specify config.yml
68
+ add a parameter `page_metric` in config.yml
69
+
70
+ Sun Dec 7 16:57:01 2014 Masayoshi Takahashi <takahashimm@gmail.com>
71
+
72
+ * lib/review/book/chapter.rb, test/test_book_chapter.rb:
73
+ remove Chapter.intern_pathes.
74
+ To get chapters, use Book::Base.load and Book::Base#chapter.
75
+
76
+ Mon Nov 17 09:28:21 2014 Kenshi Muto <kmuto@debian.org>
77
+
78
+ * lib/review/book/chapter.rb, lib/review/book/index.rb:
79
+ fix @<hd> to show appendix correctly with respecting
80
+ appendix_format yaml parameter.
81
+
82
+ Wed Nov 5 19:11:02 2014 Kenshi Muto <kmuto@debian.org>
83
+
84
+ * lib/review/idgxmlbuilder.rb, test/test_idgxmlbuilder.rb:
85
+ stop providing a index from @<ttb>.
86
+ That behavior just makes a confuse.
87
+
1
88
  Wed Oct 29 18:54:28 2014 KADO Masanori <kdmsnr@gmail.com>
2
89
 
3
90
  * Release 1.4.0.
data/bin/review-check CHANGED
@@ -37,7 +37,7 @@ def main
37
37
  "inencoding" => "UTF-8",
38
38
  "outencoding" => "UTF-8"
39
39
  })
40
- @book = ReVIEW::Book::Base.load_default
40
+ @book = ReVIEW::Book::Base.load
41
41
  @book.config = @config
42
42
 
43
43
  modes = nil
@@ -54,7 +54,7 @@ def main
54
54
  files = @book.chapters.map {|ent| ent.path }
55
55
  }
56
56
  opts.on('-s', '--section N', 'Check section N. (deprecated)') {|n|
57
- ents = ReVIEW.env.parts[Integer(n) - 1] or
57
+ ents = @book.parts[Integer(n) - 1] or
58
58
  raise ReVIEW::ApplicationError, "section #{n} not exist"
59
59
  files = ents.map {|ent| ent.path }
60
60
  }
data/bin/review-compile CHANGED
@@ -19,6 +19,7 @@ $LOAD_PATH.unshift((bindir + '../lib').realpath)
19
19
  require 'review'
20
20
  require 'review/compiler'
21
21
  require 'review/book'
22
+ require 'review/i18n'
22
23
  require 'fileutils'
23
24
  require 'optparse'
24
25
 
@@ -143,8 +144,8 @@ def _main
143
144
 
144
145
  begin
145
146
  config["builder"] = target
147
+ ReVIEW::I18n.setup(config["language"])
146
148
 
147
- compiler = ReVIEW::Compiler.new(load_strategy_class(target, check_only))
148
149
  case mode
149
150
  when :files
150
151
  if ARGV.empty?
@@ -152,37 +153,24 @@ def _main
152
153
  exit 1
153
154
  end
154
155
 
155
- begin
156
- ReVIEW::Book::Chapter.intern_pathes(ARGV).each do |chap|
157
- chap.book.config = config # needs only at the first time
158
- result = compiler.compile(chap)
159
- if output_filename
160
- write output_filename, result
161
- else
162
- puts result unless check_only
163
- end
164
- end
165
- rescue => e
166
- # PART
167
- book = ReVIEW::Book::Base.load_default
168
- book.config = config
169
- part = book.parts_in_file.select do |part_item|
170
- ARGV.map{|path| File.basename path}.include? part_item.path
171
- end
172
- if part.present?
173
- result = compiler.compile(part.first)
174
- if output_filename
175
- write output_filename, result
176
- else
177
- puts result unless check_only
178
- end
156
+ basedir = File.dirname(ARGV[0])
157
+ book = ReVIEW::Book::Base.load(basedir)
158
+ book.config = config # needs only at the first time
159
+ ARGV.each do |item|
160
+ chap_name = File.basename(item, '.*')
161
+ chap = book.chapter(chap_name)
162
+ compiler = ReVIEW::Compiler.new(load_strategy_class(target, check_only))
163
+ result = compiler.compile(chap)
164
+ if output_filename
165
+ write output_filename, result
179
166
  else
180
- raise e
167
+ puts result unless check_only
181
168
  end
182
169
  end
183
170
  when :dir
184
- book = basedir ? ReVIEW::Book.load(basedir) : ReVIEW::Book::Base.load_default
171
+ book = basedir ? ReVIEW::Book.load(basedir) : ReVIEW::Book::Base.load
185
172
  book.config = config
173
+ compiler = ReVIEW::Compiler.new(load_strategy_class(target, check_only))
186
174
  book.chapters.each do |chap|
187
175
  str = compiler.compile(chap)
188
176
  write "#{chap.name}#{compiler.strategy.extname}", str unless check_only
@@ -190,9 +178,6 @@ def _main
190
178
  # PART
191
179
  book.parts_in_file.each do |part|
192
180
  str = compiler.compile(part)
193
- if compiler.strategy.extname == ".tex"
194
- str.gsub!(/\A\\chapter\{/, '\part{') # FIXME: UGLY...
195
- end
196
181
  write "#{part.name}#{compiler.strategy.extname}", str unless check_only
197
182
  end
198
183
  else
data/bin/review-index CHANGED
@@ -41,7 +41,7 @@ def _main
41
41
  "inencoding" => "UTF-8",
42
42
  "outencoding" => "UTF-8"
43
43
  }
44
- book = ReVIEW::Book::Base.load_default
44
+ book = ReVIEW::Book::Base.load
45
45
 
46
46
  opts = OptionParser.new
47
47
  opts.version = ReVIEW::VERSION
data/bin/review-init CHANGED
@@ -20,11 +20,14 @@ require 'review/version'
20
20
  def main
21
21
  opts = OptionParser.new
22
22
  opts.version = ReVIEW::VERSION
23
- opts.banner = "Usage: #{File.basename($0)} dirname"
23
+ opts.banner = "Usage: #{File.basename($0)} [option] dirname"
24
24
  opts.on('-h', '--help', 'print this message and quit.') {
25
25
  puts opts.help
26
26
  exit 0
27
27
  }
28
+ opts.on('-f', '--force', 'generate files (except *.re) if directory has already existed.') {
29
+ @force = true
30
+ }
28
31
  begin
29
32
  opts.parse!
30
33
  rescue OptionParser::ParseError => err
@@ -55,7 +58,7 @@ def main
55
58
  end
56
59
 
57
60
  def generate_dir(dir)
58
- if File.exist? dir
61
+ if File.exist?(dir) && !@force
59
62
  puts "#{dir} already exists."
60
63
  exit
61
64
  end
@@ -64,13 +67,15 @@ def generate_dir(dir)
64
67
  end
65
68
 
66
69
  def generate_sample(dir)
67
- File.open("#{dir}/#{File.basename(dir)}.re", "w") do |file|
68
- file.write("= ")
70
+ if !@force
71
+ File.open("#{dir}/#{File.basename(dir)}.re", "w") do |file|
72
+ file.write("= ")
73
+ end
69
74
  end
70
75
  end
71
76
 
72
77
  def generate_layout(dir)
73
- Dir.mkdir dir + '/layouts'
78
+ FileUtils.mkdir_p dir + '/layouts'
74
79
  File.open("#{dir}/layouts/layout.html.erb", "w") do |file|
75
80
  file.write <<-EOS
76
81
  <?xml version="1.0" encoding="UTF-8"?>
@@ -108,7 +113,7 @@ EOS
108
113
  end
109
114
 
110
115
  def generate_images_dir(dir)
111
- Dir.mkdir dir + '/images'
116
+ FileUtils.mkdir_p dir + '/images'
112
117
  end
113
118
 
114
119
  def generate_cover_image(dir)
@@ -125,7 +130,7 @@ end
125
130
 
126
131
  def generate_texmacro(dir)
127
132
  texmacrodir = dir + '/sty'
128
- Dir.mkdir texmacrodir
133
+ FileUtils.mkdir_p texmacrodir
129
134
  FileUtils.cp @review_dir + "/test/sample-book/src/sty/reviewmacro.sty", texmacrodir
130
135
  end
131
136
 
data/bin/review-vol CHANGED
@@ -31,8 +31,12 @@ def main
31
31
 
32
32
  part_sensitive = false
33
33
  basedir = nil
34
+ yamlfile = nil
34
35
  opts = OptionParser.new
35
36
  opts.version = ReVIEW::VERSION
37
+ opts.on('--yaml=YAML', 'Read configurations from YAML file.') do |yaml|
38
+ yamlfile = yaml
39
+ end
36
40
  opts.on('-P', '--part-sensitive', 'Prints volume of each parts.') {
37
41
  part_sensitive = true
38
42
  }
@@ -57,8 +61,12 @@ def main
57
61
  exit 1
58
62
  end
59
63
 
60
- book = basedir ? ReVIEW::Book.load(basedir) : ReVIEW::Book::Base.load_default
64
+ book = basedir ? ReVIEW::Book.load(basedir) : ReVIEW::Book::Base.load
61
65
  book.config = @config
66
+ if yamlfile
67
+ book.load_config(yamlfile)
68
+ end
69
+
62
70
  if part_sensitive
63
71
  sep = ""
64
72
  book.each_part do |part|
data/doc/catalog.ja.md ADDED
@@ -0,0 +1,53 @@
1
+ # Re:VIEW カタログファイル ガイド
2
+
3
+ Re:VIEW のカタログファイル catalog.ymlについて説明します。
4
+
5
+ ## カタログファイルとは
6
+
7
+ Re:VIEW フォーマットで記述された各ファイルを特に一冊の本(例えばPDFやEPUB)にまとめる際に、どのようにそれらのファイルを構造化するかを指定するファイルです。
8
+ 現在はカタログファイルと言えばcatalog.ymlのことを指します。
9
+
10
+ ## catalog.ymlを用いた場合の設定方法
11
+
12
+ catalog.yml内で、`PREDEF`(前付け)、`CHAPS`(本編)、`APPENDIX`(付録、連番あり)、`POSTDEF`(後付け、連番なし)を記述します。CHAPSのみ必須です。
13
+
14
+ ```yaml
15
+ PREDEF:
16
+ - intro.re
17
+
18
+ CHAPS:
19
+ - ch01.re
20
+ - ch02.re
21
+
22
+ APPENDIX:
23
+ - appendix.re
24
+
25
+ POSTDEF:
26
+ - postscript.re
27
+ ```
28
+
29
+ 本編に対して、「部」構成を加えたい場合、`CHAPS`を段階的にして記述します。部の指定については、タイトル名でもファイル名でもどちらでも使えます。
30
+
31
+ ```yaml
32
+ CHAPS:
33
+ - ch01.re
34
+ - 第1部:
35
+ - ch02.re
36
+ - ch03.re
37
+ - pt02.re:
38
+ - ch04.re
39
+ ```
40
+
41
+ (旧バージョンの利用者の方へ: `PART`という項目はありません。`CHAPS`に記述してください)
42
+
43
+ ## バージョン 1.3以前について
44
+
45
+ `APPENDIX`は指定できません。`POSTDEF`を使ってください。
46
+
47
+ ## バージョン 1.2以前について
48
+
49
+ 1.2以前のRe:VIEWではカタログファイルとしてPREDEF, CHAPS, POSTDEF, PARTという独立した4つのファイルを使用していました。
50
+ そのため、当時のバージョンを利用する際にはcatalog.ymlではなくそちらを記述する必要があります。
51
+
52
+ 現在のRe:VIEWはcatalog.ymlを用いた方法と旧バージョンが使用していたCHAPS, PREDEF, POSTDEF, PARTを用いた方法と両方をサポートしています。
53
+ ただしcatalog.ymlが存在する場合、そちらが優先されます。
data/doc/catalog.md ADDED
@@ -0,0 +1,52 @@
1
+ # Re:VIEW catalog.yml Guide
2
+
3
+ This article describes Re:VIEW catalog file catalog.yml.
4
+
5
+ ## What's catalog.yml
6
+
7
+ Catalog file shows the structure of files to generate books (such as PDF or EPUB) in Re:VIEW format.
8
+ Now we use catalog.yml as catalog file.
9
+
10
+ ## How to write catalog.yml
11
+
12
+ In catalog.yaml, you can write `PREDEF`(frontmatter), `CHAPS`(bodymatter), `APPENDIX`(appendix) and `POSTDEF`(backmater). `CHAPS` is required.
13
+
14
+ ```yaml
15
+ PREDEF:
16
+ - intro.re
17
+
18
+ CHAPS:
19
+ - ch01.re
20
+ - ch02.re
21
+
22
+ APPENDIX:
23
+ - appendix.re
24
+
25
+ POSTDEF:
26
+ - postscript.re
27
+ ```
28
+
29
+ You can add parts in body to use `CHAPS` in a hierarchy. You can use both title name and file name to specify parts.
30
+
31
+ ```yaml
32
+ CHAPS:
33
+ - ch01.re
34
+ - TITLE_OF_PART1:
35
+ - ch02.re
36
+ - ch03.re
37
+ - pt02.re:
38
+ - ch04.re
39
+ ```
40
+
41
+ (For old version user: there is no `PART`. You write them in `CHAPS`.)
42
+
43
+ ## About version 1.3 or earlier
44
+
45
+ You can not use `APPENDIX`. Use `POSTDEF`.
46
+
47
+ ## About version 1.2 or earlier
48
+
49
+ Before version 1.2 or earlier, Re:VIEW use 4 files PREDEF, CHAPS, POSTDEF, PART as catalog files.
50
+ So you must use these files instead of catalog.yml when you use these versions of Re:VIEW.
51
+
52
+ Current Re:VIEW supports both catalog.yml and old catalog files. When there are both files, catalog.yml is used.
data/doc/format.ja.md ADDED
@@ -0,0 +1,734 @@
1
+ # Re:VIEW フォーマットガイド
2
+
3
+ Re:VIEW フォーマットの文法について解説します。Re:VIEW
4
+ フォーマットは ASCII の EWB を基本としながら、一部に
5
+ RD や各種 Wiki の文法をとりいれて簡素化しています。
6
+
7
+ ## 段落
8
+
9
+ 段落(本文)の間は英語の段落のように1行空けます。
10
+
11
+ 例:
12
+
13
+ ```
14
+ だんらくだんらく〜〜〜
15
+ この行も同じ段落
16
+
17
+ 次の段落〜〜〜
18
+ ```
19
+
20
+ 2行以上空いている場合も1行空きと同様に処理します。
21
+
22
+ ## 章・節・項・段(見出し)
23
+
24
+ 章・節・項・段など、見出しは「`=`」「`==`」「`===`」「`====`」「`=====`」です。6 レベル以上は使えません。
25
+
26
+ 例:
27
+
28
+ ```review
29
+ = 章のキャプション
30
+
31
+ == 節のキャプション
32
+
33
+ === 項のキャプション
34
+
35
+ ==== 段のキャプション
36
+
37
+ ===== 小段のキャプション
38
+ ```
39
+
40
+ 見出しは行の先頭から始める必要があります。行頭に空白が入ると、ただの本文とみなされます。
41
+
42
+ ## コラムなど
43
+
44
+ 節や項の見出しに `[column]` を追加するとコラムのキャプションになります。
45
+
46
+ 例:
47
+
48
+ ```review
49
+ ===[column] コンパイラコンパイラ
50
+ ```
51
+
52
+ このとき、「=」と「[column]」は間を開けず、必ず続けて書かなければ
53
+ なりません。空白があってもいけません。
54
+
55
+ 次の節や項を待たずにコラムを終了する場合は、「===[/column]」を記述します。
56
+
57
+ 例:
58
+
59
+ ```review
60
+ ===[column] コンパイラコンパイラ
61
+
62
+ コラムの内容
63
+
64
+ ===[/column]
65
+ ```
66
+
67
+ ## 箇条書き
68
+
69
+ 箇条書き (HTML で言う ul) は「` *`」で表現します。
70
+ ネストは「` **`」のように深さに応じて数を増やします。
71
+
72
+ 例:
73
+
74
+ ```
75
+ * 第一の項目
76
+ ** 第一の項目のネスト
77
+ * 第二の項目
78
+ ** 第二の項目のネスト
79
+ * 第三の項目
80
+ ```
81
+
82
+ 箇条書きを書くには、行頭に1つ以上の空白を必ず入れるようにします。
83
+ 行頭に空白を入れず「*」を書くと、ただのテキストとみなされます。
84
+
85
+ ## 番号付き箇条書き
86
+
87
+ 番号付きの箇条書き (HTML で言う ol) は「` 1. 〜`」「` 2. 〜`」
88
+ 「` 3. 〜`」で示します。ネストはしません。
89
+
90
+ 例:
91
+
92
+
93
+ ```
94
+ 1. 第一の条件
95
+ 2. 第二の条件
96
+ 3. 第三の条件
97
+ ```
98
+
99
+ 番号付き箇条書きも、ただの箇条書きと同様、行頭に1つ以上の空白が必要です。
100
+
101
+ ## 用語リスト
102
+
103
+ 用語リスト (HTML で言う dl) は「:」と、続く空白で始まる行を使って示します。
104
+
105
+ 例:
106
+
107
+ ```review
108
+ : Alpha
109
+ DEC の作っていた RISC CPU。
110
+ 浮動小数点数演算が速い。
111
+ : POWER
112
+ IBM とモトローラが共同製作した RISC CPU。
113
+ 派生として POWER PC がある。
114
+ : SPARC
115
+ Sun が作っている RISC CPU。
116
+ CPU 数を増やすのが得意。
117
+ ```
118
+
119
+ 頭の「`:`」それ自体はテキストではないので注意してください。
120
+ その後に続く文字列が用語名(HTMLではdt要素)になります。
121
+
122
+ 用語リストの「`:`」ではじまる行は、行頭に空白があってもなくてもかまいません。
123
+ そして、その行以降、空白で始まる行が用語内容(HTMLではdd要素)になります。
124
+
125
+ また、リスト内でも後述するインライン命令は有効です。
126
+
127
+ ## ソースコードなどのリスト
128
+
129
+ ソースコードなどのリストには`//list`を使います。連番をつけたくない場合は先頭に``em``(embeddedの略)、行番号をつける場合は末尾に``num``を付加します。まとめると以下の4種類になります。
130
+
131
+ * ``//list[識別子][キャプション][言語指定]{ 〜 //}``
132
+ * 通常のリスト。言語指定は省略できます。
133
+ * ``//listnum[識別子][キャプション][言語指定]{ 〜 //}``
134
+ * 通常のリストに行番号をつけたもの。言語指定は省略できます。
135
+ * ``//emlist[キャプション][言語指定]{ 〜 //}``
136
+ * 連番がないリスト。キャプションと言語指定は省略できます。
137
+ * ``//emlistnum[キャプション][言語指定]{ 〜 //}``
138
+ * 連番がないリストに行番号をつけたもの。キャプションと言語指定は省略できます。
139
+
140
+ 例:
141
+
142
+ ```review
143
+ //list[main][main()][c]{ ←「main」が識別子で「main()」がキャプション
144
+ int
145
+ main(int argc, char **argv)
146
+ {
147
+ puts("OK");
148
+ return 0;
149
+ }
150
+ //}
151
+ ```
152
+
153
+ 例:
154
+
155
+ ```review
156
+ //listnum[hello][ハローワールド][ruby]{
157
+ puts "hello world!"
158
+ //}
159
+ ```
160
+
161
+ 例:
162
+
163
+ ```review
164
+ //emlist[][ruby]{
165
+ printf("hello");
166
+ //}
167
+ ```
168
+
169
+ 例:
170
+
171
+ ```review
172
+ //emlistnum[][ruby]{
173
+ puts "hello world!"
174
+ //}
175
+ ```
176
+
177
+
178
+
179
+ ブロック内でも後述するインライン命令は有効です。
180
+
181
+ また本文中で「リスト X を見てください」のようにリストを指定
182
+ する場合は、`//list` で指定した識別子を使って「`@<list>{main}`」
183
+ と表記します。
184
+
185
+ ### ソースコード専用の引用
186
+
187
+ ソースコードを引用する場合、ファイル名が必要です。
188
+
189
+ 例:
190
+
191
+ ```review
192
+ //source[/hello/world.rb]{
193
+ puts "hello world!"
194
+ //}
195
+ ```
196
+
197
+ ソースコードの引用は、キャプションをつけた`//emlist`とあまり違いはありません。
198
+ が、HTMLのCSSなどでは区別した表現ができます。
199
+
200
+
201
+ 参照方法はlistと変わりません。
202
+
203
+ 例:
204
+
205
+ ```
206
+ ..は@<list>{hello}をみてください。
207
+ ```
208
+
209
+ ## 本文中でのソースコード引用
210
+
211
+ 本文中でソースコードを引用して記述します。
212
+
213
+ 例:
214
+
215
+ ```review
216
+ @<code>{p = obj.ref_cnt}
217
+ ```
218
+
219
+ ## コマンドラインのキャプチャ
220
+
221
+ コマンドラインの操作を示すときは `//cmd{ 〜 //}` を使います。
222
+
223
+ 例:
224
+
225
+ ```
226
+ //cmd{
227
+ $ ls /
228
+ //}
229
+ ```
230
+
231
+ ブロック内でも後述するインライン命令は有効です。
232
+
233
+ ## 図
234
+
235
+ 図は `//image{ 〜 //}` で指定します。執筆中はアスキーアートで
236
+ 代替しているため、ダミーのアスキーアートが入っていることがあり
237
+ ます。この部分は、組版時には単に無視してください。
238
+
239
+ 例:
240
+
241
+ ```
242
+ //image[unixhistory][UNIX系OSの簡単な系譜]{
243
+ System V 系列
244
+ +----------- SVr4 --> 各種商用UNIX(Solaris, AIX, HP-UX, ...)
245
+ V1 --> V6 --|
246
+ +--------- 4.4BSD --> FreeBSD, NetBSD, OpenBSD, ...
247
+ BSD 系列
248
+
249
+ --------------> Linux
250
+ //}
251
+ ```
252
+
253
+ 3番目の引数として、画像の倍率・大きさを指定することができます。
254
+ 今のところ「scale=X」で倍率(X倍)が指定できます。
255
+
256
+ また本文中で「図 X を見てください」のように図を指定する場合は、
257
+ `//image` で指定した識別子を用いて「`@<img>{unixhistory}`」と
258
+ 記述します。`//image` と `@<img>` でつづりが違うので注意してください。
259
+
260
+ なお、後述しますが、インラインで図を出力するには`@<icon>`を使用します。
261
+
262
+ 図として貼り込む画像ファイルは、次の順序で探索され、最初に発見されたものが利用されます。
263
+
264
+ ```
265
+ 1. <imgdir>/<builder>/<chapid>/<id>.<ext>
266
+ 2. <imgdir>/<builder>/<chapid>-<id>.<ext>
267
+ 3. <imgdir>/<builder>/<id>.<ext>
268
+ 4. <imgdir>/<chapid>/<id>.<ext>
269
+ 5. <imgdir>/<chapid>-<id>.<ext>
270
+ 6. <imgdir>/<id>.<ext>
271
+ ```
272
+
273
+ * ``<imgdir>`` はデフォルトでは images ディレクトリです。
274
+ * ``<builder>`` は利用しているビルダ名 (ターゲット名) で、たとえば ``--target=html`` としているのであれば、images/html ディレクトリとなります。
275
+ * ``<chapid>`` は re ファイルの名前に相当します。たとえば ch01.re という名前であれば「ch01」です。
276
+ * ``<id>`` は //image[〜] の最初に入れた「〜」のことです (つまり、ID に日本語や空白交じりの文字を使ってしまうと、後で画像ファイル名の名付けに苦労することになります!)。
277
+ * ``<ext>`` は Re:VIEW が自動で判別する拡張子です。ビルダによってサポートおよび優先する拡張子は異なります。
278
+
279
+ ## 番号が振られていない図
280
+
281
+ `//indepimage[ファイル名][キャプション]` で番号が振られていない画像ファイルを生成します。キャプションは省略できます。
282
+
283
+ 例:
284
+
285
+ ```
286
+ //indepimage[unixhistory2]
287
+ ```
288
+
289
+ 同様のことは、`//numberlessimage`でも使えます。
290
+
291
+ 例:
292
+
293
+ ```
294
+ //numberlessimage[door_image_path][扉絵]
295
+ ```
296
+
297
+ ※ただし、`//indepimage`と機能的にかぶっているので、将来は廃止され、`//indepimage`に統合される予定です。
298
+
299
+ ## グラフ表現ツールを使った図
300
+
301
+ `//graph[ファイル名][コマンド名][キャプション]` で各種グラフ表現ツールを使った画像ファイルの生成ができます。キャプションは省略できます。
302
+
303
+ 例: gnuplotの使用
304
+
305
+ ```
306
+ //graph[sin_x][gnuplot]{
307
+ plot sin(x)
308
+ //}
309
+ ```
310
+
311
+ コマンド名には、「`graphviz`」「`gnuplot`」「`blockdiag`」「`aafigure`」のいずれかを指定できます。ツールはそれぞれ別途インストールする必要があります。
312
+
313
+ ## 表
314
+
315
+ 表は `//table[識別子][キャプション]{ 〜 //}` です。ヘッダと内容を
316
+ 分ける罫線は「`------`」で書き込んであります。
317
+
318
+ カラム間は任意個数のタブで区切ります。また、カラム先頭の「`.`」は削除されるので、カラムの先頭文字が「`.`」の場合は「`.`」をもう一つ余計に付けてください。例えば「`.`」という内容のカラムは「`..`」と書きます。
319
+ また、空のカラムは「`.`」と書けます。
320
+
321
+ 例:
322
+
323
+ ```
324
+ //table[envvars][重要な環境変数]{
325
+ 名前 意味
326
+ -------------------------------------------------------------
327
+ PATH コマンドの存在するディレクトリ
328
+ TERM 使っている端末の種類。linux・kterm・vt100など
329
+ LANG ユーザのデフォルトロケール。日本語ならja_JP.eucJPやja_JP.utf8
330
+ LOGNAME ユーザのログイン名
331
+ TEMP 一時ファイルを置くディレクトリ。/tmpなど
332
+ PAGER manなどで起動するテキスト閲覧プログラム。lessなど
333
+ EDITOR デフォルトエディタ。viやemacsなど
334
+ MANPATH manのソースを置いているディレクトリ
335
+ DISPLAY X Window Systemのデフォルトディスプレイ
336
+ //}
337
+ ```
338
+
339
+ 本文中で「表 X を見てください」のように表を指定する場合は
340
+ `@<table>{envvars}` という表記を使います。
341
+
342
+ 表内でも後述するインライン命令は有効です。
343
+
344
+ ## 引用
345
+
346
+ 引用は「`//quote{ 〜 //}`」を使って記述します。
347
+
348
+ 例:
349
+
350
+ ```
351
+ //quote{
352
+ 百聞は一見に如かず。
353
+ //}
354
+ ```
355
+
356
+ 引用内でも後述するインライン命令は有効です。
357
+ また、いまのところ引用内で別のブロック構文を使うことはできません。
358
+
359
+ ## 脚注
360
+
361
+ 脚注は「`//footnote`」を使って記述します。
362
+
363
+ 例:
364
+
365
+ ```
366
+ パッケージは本書のサポートサイトから入手できます@<fn>{site}。
367
+ 各自ダウンロードしてインストールしておいてください。
368
+ //footnote[site][本書のサポートサイト: http://i.loveruby.net/ja/stdcompiler ]
369
+ ```
370
+
371
+ 本文中の「`@<fn>{site}`」は脚注番号に置換され、「本書のサポート
372
+ サイト……」という文は実際の脚注に変換されます。
373
+
374
+ 注意: PDFで、コラムや表など平文でないところで「`@<fn>{~}`」を使うには、`footnotetext`オプションを使う必要があります。
375
+
376
+ ### footnotetextオプション
377
+
378
+ `footnotetext`オプションを使うには、YAMLファイルの`params`に「`--footnotetext`」を追加します。
379
+
380
+ これでPDFのコラムや表のなかでも脚注が使えるようになります。
381
+
382
+ ただし、通常の脚注(footnote)ではなく、footnotemarkとfootnotetextを使うため、
383
+ 本文と脚注が別ページに分かれる可能性があるなど、いろいろな制約があります。
384
+ なお、採番が別々になるためfootnoteとfootnotemark/footnotetextを両立させることはできません。
385
+
386
+ ## 参考文献の定義
387
+
388
+ 参考文献は同一ディレクトリ内の bib.re に定義します。
389
+
390
+ ```
391
+ //bibpaper[cite][キャプション]{..コメント..}
392
+ ```
393
+
394
+ コメントが無い場合も定義可能です。
395
+
396
+ ```
397
+ //bibpaper[cite][キャプション]
398
+ ```
399
+
400
+ 例:
401
+
402
+ ```
403
+ //bibpaper[lins][Lins, 1991]{
404
+ Refael D. Lins. A shared memory architecture for parallel study of
405
+ algorithums for cyclic reference_counting. Technical Report 92,
406
+ Computing Laboratory, The University of Kent at Canterbury , August
407
+ 1991
408
+ //}
409
+ ```
410
+
411
+ 本文中で参考文献を参照したい場合は次のようにしてください。
412
+
413
+ 例:
414
+
415
+ ```
416
+ …という研究が知られています(@<bib>{lins})
417
+ ```
418
+
419
+ ## リード文
420
+
421
+ リード文は `//lead{ 〜 //}` で指定します。
422
+ 歴史的経緯により`//read{ 〜 //}` でも使えます。
423
+
424
+ 例:
425
+
426
+ ```
427
+ //lead{
428
+ 本章ではまずこの本の概要について話し、
429
+ 次にLinuxでプログラムを作る方法を説明していきます。
430
+ //}
431
+ ```
432
+
433
+ ## TeX式
434
+
435
+ LaTeX の式を挿入するには、`//texequation{ 〜 //}` を使います。
436
+
437
+ 例:
438
+
439
+ ```
440
+ //texequation{
441
+ \sum_{i=1}^nf_n(x)
442
+ //}
443
+ ```
444
+
445
+ ## 空白制御
446
+
447
+ 出力される空白を制御するタグとしては、`//noindent`があります。
448
+
449
+
450
+ * `//noindent` : その直後に来る段落冒頭のインデントをなくす(HTMLではnoindentクラスになる)
451
+
452
+
453
+ 以前あった「`//linebreak`」(改行)、「`//pagebreak`」(改ページ)は廃止になります。
454
+
455
+ ## コメント
456
+
457
+ 最終結果に出力されないコメントを記述したい場合は「`#@#`」を使ってください。
458
+
459
+ 例:
460
+
461
+ ```
462
+ #@# ここで 1 行あける
463
+ ```
464
+
465
+ また、修正が必要な警告的コメントには`#@warn(...)`を使ってください。
466
+
467
+ 例:
468
+
469
+ ```
470
+ #@warn(あとで書く)
471
+ ```
472
+
473
+ 最終結果に出力するコメントを記述したい場合は、`//comment`または`@<comment>`を使った上で、review-compileコマンドに`--draft`オプションを追加してください。
474
+
475
+ 例:
476
+
477
+ ```
478
+ @<comment>{あとで書く}
479
+ ```
480
+
481
+ ## 生データ行
482
+
483
+ Re:VIEW のタグ範囲を越えて何か特別な行を挿入したい場合、`//raw` を使います。
484
+
485
+ 例:
486
+
487
+ ```
488
+ //raw[|html|<div class="special">\nここは特別な行です。\n</div>]
489
+ ```
490
+
491
+ 「|ビルダ名|そのまま出力させる内容」という書式です。
492
+
493
+ ビルダ名には「`html`」「`latex`」「`idgxml`」「`top`」のいずれかが入り、(複数のビルダにまたがる指定が必要かは別として)「,」で区切って複数指定することも可能です。
494
+ 「バックスラッシュ+n」は改行に変換されます。
495
+ 該当のビルダを使用しているときのみ、内容が出力されます。
496
+
497
+ 例:
498
+
499
+ ```
500
+ (HTMLビルダの場合:)
501
+ <div class="special">
502
+ ここは特別な行です。
503
+ </div>
504
+
505
+ (ほかのビルダの場合は単に無視されて何も出力されない)
506
+ ```
507
+
508
+ `//raw` およびこの後に紹介する `@<raw>` インラインタグは、誤った内容を入れると
509
+ 構造化文書を容易に破壊し得ることに注意してください。
510
+
511
+ ## その他の文法
512
+
513
+ Re:VIEW は任意のブロックを追加可能なので、本によって専用ブロックを
514
+ 使う場合があります。これまでに使った例を以下に示します。
515
+
516
+ * `//prototype` : 関数プロトタイプ。『ふつうのLinuxプログラミング』で使用。
517
+ * `//type` : 関数の型宣言。『ふつうのHaskellプログラミング』で使用。
518
+
519
+ 拡張文法はreview-ext.rbというファイルで指定できます。
520
+ 例えば、
521
+
522
+ ```
523
+ # review-ext.rb
524
+ ReVIEW::Compiler.defblock :foo, 0..1
525
+ class ReVIEW::HTMLBuilder
526
+ def foo(lines, caption = nil)
527
+ puts lines.join(",")
528
+ end
529
+ end
530
+ ```
531
+
532
+ のようにすると、以下のような文法を追加できます。
533
+
534
+ ```
535
+ //foo{
536
+ A
537
+ B
538
+ C
539
+ //}
540
+ ```
541
+
542
+ ```
543
+ # 出力結果
544
+ A,B,C
545
+ ```
546
+
547
+ 詳しいことについては、ここでは触れません。
548
+
549
+
550
+ ## 段落中で使う文法 (インライン命令)
551
+
552
+ ```
553
+ @<list>{program}:: 「リスト1.5」のような文字列に置換される。
554
+ @<img>{unixhistory}:: 「図1.3」のような文字列に置換される。
555
+ @<table>{ascii}:: 「表1.2」のような文字列に置換される。
556
+ @<fn>{site}:: 脚注番号に置換される。
557
+ @<kw>{信任状, credential}:: キーワード。太字などにして強調してください。
558
+ @<chap>{advanced}:: 「第17章」のような、章番号を含むテキストに置換される。
559
+ @<title>{advanced}:: その章の章題に置換される。
560
+ @<chapref>{advanced}:: 『第17章「さらに進んだ話題」』のように、章番号とタイトルを含むテキストに置換される。
561
+ @<bou>{ふさわしい}:: 傍点。
562
+ @<ruby>{直截, ちょくせつ}:: ルビ。
563
+ @<ami>{重点ポイント}:: 文字に対するアミかけ。
564
+ @<b>{どうしても}:: 太字 (ボールド)。
565
+ @<i>{どうしても}:: イタリック。
566
+ @<strong>{どうしても}:: 強調。
567
+ @<em>{どうしても}:: 強調。
568
+ @<tt>{foo($bar)}:: テキストをテレタイプ文字(等幅フォント)で出力する。
569
+ @<tti>{FooClass}:: テキストをテレタイプ文字(等幅フォント)のイタリックで出力する。
570
+ @<ttb>{BarClass}:: テキストをテレタイプ文字(等幅フォント)の太字で出力する。
571
+ @<u>{下線}:: 下線。
572
+ @<br>{}:: 段落中改行。
573
+ @<m>{a + \alpha}:: TeXインライン式。
574
+ @<icon>{samplephoto}:: インライン画像。
575
+ @<uchar>{2460}:: Unicode文字の出力。引数は16進数で指定する。
576
+ @<href>{http://www.google.com/}:: リンク。URLで指定できる
577
+ @<raw>{|ビルダ名|<span>★</span>}:: そのまま出力する。「}」は「バックスラッシュ+}」でエスケープする。ビルダ名は「html」「latex」「idgxml」「top」のいずれかで、「,」で区切って複数指定することも可能。該当のビルダを使用時のみ、出力される。内容に「バックスラッシュ+n」を入れると改行に変換される。
578
+ ```
579
+
580
+ ## 著者用タグ (プリプロセッサ命令)
581
+
582
+ これまでに説明したタグはすべて最終段階まで残り、見ために
583
+ 影響を与えます。それに対して以下のタグは著者が使うための
584
+ 専用タグであり、最終段階ではすべて消されてしまいます。
585
+
586
+ ```
587
+ #@#:: コメント。この行には何を書いても無視される。
588
+ #@warn(...):: 警告メッセージ。プリプロセス時にメッセージが出力される。
589
+ #@require, #@provide:: キーワードの依存関係を宣言する。
590
+ #@mapfile(ファイル名) 〜 #@end:: ファイルの内容をその場に展開する。
591
+ #@maprange(ファイル名, 範囲名) 〜 #@end:: ファイル内の範囲をその場に展開する。
592
+ #@mapoutput(コマンド) 〜 #@end:: コマンドを実行して、その出力結果を展開する。
593
+ ```
594
+
595
+ ## HTMLのレイアウト機能
596
+
597
+ CHAPSファイルが置かれているディレクトリに layouts/layout.html.erb
598
+ を置くとその html を ERB で評価します。
599
+
600
+ 例:
601
+
602
+ ```
603
+ <html>
604
+ <head>
605
+ <title><%= title %></title>
606
+ </head>
607
+ <body>
608
+ <%= body %>
609
+ <hr/>
610
+ </body>
611
+ </html>
612
+ ```
613
+
614
+ ## 部タイトル取得(目次生成機能)
615
+
616
+ Version 1.2以前の場合、PART ファイルに定義してください。
617
+ PART ファイルは CHAPS の部わけと対応しています。
618
+
619
+ 例:
620
+
621
+ ```
622
+ CHAPS:
623
+ intro.re
624
+
625
+ start.re
626
+
627
+ end.re
628
+ ```
629
+
630
+ ```
631
+ PART:
632
+ (序章なので空行)
633
+ はじまりの部
634
+ おわりの部
635
+ ```
636
+
637
+ Version 1.3以降では、catalog.ymlが使えるようになりました。
638
+ catalog.ymlの使い方については「Re:VIEW カタログファイルガイド」を参照してください。
639
+
640
+ ## 見出し参照
641
+
642
+ 見出し番号と見出しを生成します。
643
+ 見出しの階層は"`|`"で区切って指定してください。
644
+
645
+ 例:
646
+
647
+ ```
648
+ @<hd>{はじめに|まずわ}
649
+ ```
650
+
651
+ 見出しを一意に特定できる場合は、"`|`"は不要です。
652
+
653
+ ```
654
+ @<hd>{まずわ}
655
+ ```
656
+
657
+ 他の章を参照したい場合は、先頭に章のidを指定してください。
658
+
659
+ 例:
660
+
661
+ ```
662
+ @<hd>{preface|はじめに|まずわ}
663
+ ```
664
+
665
+ 参照先にラベルが設定されている場合は、ラベルで参照します。
666
+
667
+ ```
668
+ =={hajimeni} はじめに
669
+ :
670
+ === まずわ
671
+ :
672
+ @<hd>{hajimeni|まずわ}
673
+ ```
674
+
675
+
676
+ ### コラム見出し参照
677
+
678
+ コラムの見出しの参照は、`@<column>`を使います。
679
+
680
+ 例:
681
+
682
+ ```
683
+ @<column>{Re:VIEWの用途いろいろ}
684
+ ```
685
+
686
+ ラベルでの参照もできます。
687
+
688
+ ```
689
+ ==[column]{review-application} Re:VIEWの応用
690
+ :
691
+ @<column>{review-application}
692
+ ```
693
+
694
+ ## リンク
695
+
696
+ Web ハイパーリンクを記述するには、リンクに `@<href>`、アンカーに `//label`
697
+ を使います。リンクの書式は `@<href>{URL, 文字表現}` で、「`, 文字表現`」を
698
+ 省略すると URL がそのまま使われます。URL 中に `,` を使いたいときには、`\,`
699
+ と表記してください。
700
+
701
+ 例:
702
+
703
+ ```
704
+ @<href>{http://github.com/, GitHub}
705
+ @<href>{http://www.google.com/}
706
+ @<href>{#point1, ドキュメント内ポイント}
707
+ @<href>{chap1.html#point1, ドキュメント内ポイント}
708
+ //label[point1]
709
+ ```
710
+
711
+ ## 国際化(i18n)
712
+
713
+ Re:VIEWが出力する文字列(「第◯章」「図」「表」など)を、指定した言語に
714
+ 合わせて出力することができます。デフォルトは日本語です。
715
+
716
+ CHAPS などと同じディレクトリに locale.yml というファイルを用意して、
717
+ 以下のように記述します(日本語の場合)。
718
+
719
+ 例:
720
+
721
+ ```
722
+ locale: ja
723
+ ```
724
+
725
+ 既存の表記を書き換えたい場合は、該当する項目を上書きします。
726
+ 既存の設定ファイルは lib/review/i18n.yml にあります。
727
+
728
+ 例:
729
+
730
+ ```
731
+ locale: ja
732
+ image: イメージ
733
+ table: テーブル
734
+ ```