review 2.5.0 → 3.0.0.preview1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +28 -10
  3. data/.travis.yml +11 -2
  4. data/NEWS.ja.md +89 -17
  5. data/NEWS.md +92 -0
  6. data/README.md +1 -1
  7. data/Rakefile +0 -13
  8. data/bin/review-catalog-converter +83 -37
  9. data/bin/review-check +17 -5
  10. data/bin/review-compile +1 -1
  11. data/bin/review-index +6 -0
  12. data/bin/review-init +3 -155
  13. data/bin/review-preproc +0 -5
  14. data/bin/review-validate +21 -7
  15. data/bin/review-vol +13 -5
  16. data/doc/config.yml.sample +12 -7
  17. data/doc/config.yml.sample-simple +1 -1
  18. data/doc/format.ja.md +39 -3
  19. data/doc/format.md +39 -3
  20. data/doc/format_idg.ja.md +0 -4
  21. data/doc/pdfmaker.ja.md +1 -1
  22. data/doc/pdfmaker.md +1 -1
  23. data/doc/sample.css +7 -0
  24. data/lib/epubmaker/content.rb +31 -12
  25. data/lib/epubmaker/epubcommon.rb +10 -3
  26. data/lib/epubmaker/epubv2.rb +11 -3
  27. data/lib/epubmaker/epubv3.rb +11 -3
  28. data/lib/epubmaker/producer.rb +55 -20
  29. data/lib/review/book/base.rb +63 -48
  30. data/lib/review/book/chapter.rb +19 -7
  31. data/lib/review/book/compilable.rb +5 -20
  32. data/lib/review/book/image_finder.rb +10 -3
  33. data/lib/review/book/index.rb +30 -9
  34. data/lib/review/book/part.rb +9 -6
  35. data/lib/review/book.rb +0 -14
  36. data/lib/review/builder.rb +110 -18
  37. data/lib/review/catalog.rb +24 -4
  38. data/lib/review/compiler.rb +3 -1
  39. data/lib/review/configure.rb +43 -9
  40. data/lib/review/epubmaker/reviewheaderlistener.rb +57 -0
  41. data/lib/review/epubmaker.rb +129 -85
  42. data/lib/review/htmlbuilder.rb +76 -58
  43. data/lib/review/htmlutils.rb +20 -13
  44. data/lib/review/i18n.rb +6 -2
  45. data/lib/review/idgxmlbuilder.rb +52 -41
  46. data/lib/review/init.rb +194 -0
  47. data/lib/review/latexbuilder.rb +118 -34
  48. data/lib/review/latexutils.rb +5 -5
  49. data/lib/review/logger.rb +2 -1
  50. data/lib/review/makerhelper.rb +1 -1
  51. data/lib/review/markdownbuilder.rb +66 -6
  52. data/lib/review/md2inaobuilder.rb +2 -2
  53. data/lib/review/pdfmaker.rb +74 -22
  54. data/lib/review/plaintextbuilder.rb +8 -4
  55. data/lib/review/preprocessor.rb +14 -17
  56. data/lib/review/sec_counter.rb +8 -2
  57. data/lib/review/textmaker.rb +2 -2
  58. data/lib/review/textutils.rb +9 -2
  59. data/lib/review/tocparser.rb +7 -4
  60. data/lib/review/tocprinter.rb +3 -1
  61. data/lib/review/version.rb +1 -1
  62. data/lib/review/webmaker.rb +19 -7
  63. data/lib/review/webtocprinter.rb +8 -4
  64. data/review.gemspec +4 -3
  65. data/templates/latex/config.erb +84 -0
  66. data/templates/latex/layout.tex.erb +76 -361
  67. data/templates/latex/review-jlreq/README.md +22 -0
  68. data/templates/latex/review-jlreq/review-base.sty +178 -0
  69. data/templates/latex/review-jlreq/review-custom.sty +1 -0
  70. data/templates/latex/review-jlreq/review-jlreq.cls +141 -0
  71. data/templates/latex/review-jlreq/review-style.sty +149 -0
  72. data/templates/latex/review-jlreq/reviewmacro.sty +8 -0
  73. data/templates/latex/review-jsbook/jumoline.sty +310 -0
  74. data/templates/latex/review-jsbook/plistings.sty +326 -0
  75. data/templates/latex/review-jsbook/review-base.sty +405 -0
  76. data/templates/latex/review-jsbook/review-custom.sty +1 -0
  77. data/templates/latex/review-jsbook/review-style.sty +38 -0
  78. data/templates/latex/review-jsbook/reviewmacro.sty +8 -0
  79. data/templates/latex-compat2/layout.tex.erb +387 -0
  80. data/test/assets/test_template.tex +105 -235
  81. data/test/assets/test_template_backmatter.tex +133 -14
  82. data/test/book_test_helper.rb +1 -1
  83. data/test/run_test.rb +2 -0
  84. data/test/sample-book/src/Rakefile +11 -6
  85. data/test/sample-book/src/config.yml +2 -2
  86. data/test/sample-book/src/sty/reviewmacro.sty +1 -39
  87. data/test/sample-book/src/style.css +6 -0
  88. data/test/syntax-book/config.yml +1 -1
  89. data/test/test_book.rb +13 -16
  90. data/test/test_book_chapter.rb +4 -10
  91. data/test/test_book_part.rb +4 -3
  92. data/test/test_catalog.rb +15 -4
  93. data/test/test_helper.rb +2 -2
  94. data/test/test_htmlbuilder.rb +78 -10
  95. data/test/test_htmlutils.rb +12 -5
  96. data/test/test_idgxmlbuilder.rb +1 -1
  97. data/test/test_latexbuilder.rb +94 -49
  98. data/test/test_latexbuilder_v2.rb +1077 -0
  99. data/test/test_logger.rb +20 -0
  100. data/test/test_markdownbuilder.rb +10 -0
  101. data/test/test_pdfmaker.rb +6 -7
  102. data/test/test_plaintextbuilder.rb +1 -1
  103. data/test/test_review_ext.rb +0 -1
  104. data/test/test_rstbuilder.rb +1 -1
  105. data/test/test_topbuilder.rb +19 -7
  106. data/test/test_webtocprinter.rb +14 -14
  107. data/{test/sample-book/src/vendor → vendor}/jumoline/README +0 -0
  108. data/{test/sample-book/src/vendor → vendor}/jumoline/jumoline.dtx +0 -0
  109. data/{test/sample-book/src/vendor → vendor}/jumoline/jumoline.ins +0 -0
  110. data/{test/sample-book/src/vendor → vendor}/jumoline/lppl.txt +0 -0
  111. data/vendor/plistings/.gitignore +9 -0
  112. data/vendor/plistings/LICENSE +21 -0
  113. data/vendor/plistings/README.md +18 -0
  114. data/vendor/plistings/plistings.sty +326 -0
  115. data/vendor/plistings/test1.tex +174 -0
  116. data/vendor/plistings/test2.tex +54 -0
  117. metadata +48 -19
  118. data/lib/review/unfold.rb +0 -129
  119. data/test/CHAPS +0 -2
  120. data/test/bib.re +0 -13
  121. data/test/test.re +0 -43
data/bin/review-init CHANGED
@@ -7,165 +7,13 @@
7
7
  # the GNU LGPL, Lesser General Public License version 2.1.
8
8
  # For details of the GNU LGPL, see the file "COPYING".
9
9
 
10
- require 'fileutils'
11
- require 'optparse'
12
-
13
10
  require 'pathname'
14
11
 
15
12
  bindir = Pathname.new(__FILE__).realpath.dirname
16
13
  $LOAD_PATH.unshift((bindir + '../lib').realpath)
17
14
 
18
- require 'review'
19
-
20
- def main
21
- @logger = ReVIEW.logger
22
- opts = OptionParser.new
23
- opts.version = ReVIEW::VERSION
24
- opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [option] dirname"
25
- opts.on('-h', '--help', 'print this message and quit.') do
26
- puts opts.help
27
- exit 0
28
- end
29
- opts.on('-f', '--force', 'generate files (except *.re) if directory has already existed.') { @force = true }
30
- opts.on('-l', '--locale', 'generate locale.yml file.') { @locale = true }
31
- opts.on('', '--epub-version VERSION', 'define EPUB version') { |version| @epub_version = version }
32
- opts.on('', '--without-doc', "don't generate doc files") { @without_doc = true }
33
- begin
34
- opts.parse!
35
- rescue OptionParser::ParseError => err
36
- @logger.error err.message
37
- $stderr.puts opts.help
38
- exit 1
39
- end
40
-
41
- if ARGV.empty?
42
- $stderr.puts opts.help
43
- exit 1
44
- end
45
-
46
- initdir = File.expand_path(ARGV.shift)
47
- @review_dir = File.dirname(File.expand_path(__FILE__ + './../'))
48
-
49
- generate_dir(initdir) do |dir|
50
- generate_catalog_file(dir)
51
- generate_sample(dir)
52
- generate_images_dir(dir)
53
- generate_cover_image(dir)
54
- generate_layout(dir)
55
- generate_style(dir)
56
- generate_texmacro(dir)
57
- generate_config(dir)
58
- generate_locale(dir) if @locale
59
- generate_rakefile(dir)
60
- generate_gemfile(dir)
61
- generate_doc(dir) unless @without_doc
62
- end
63
- end
64
-
65
- def generate_dir(dir)
66
- if File.exist?(dir) && !@force
67
- @logger.error "#{dir} already exists."
68
- exit
69
- end
70
- FileUtils.mkdir_p dir
71
- yield dir
72
- end
73
-
74
- def generate_sample(dir)
75
- File.open("#{dir}/#{File.basename(dir)}.re", 'w') { |file| file.write('= ') } unless @force
76
- end
77
-
78
- def generate_layout(dir)
79
- FileUtils.mkdir_p dir + '/layouts'
80
- end
81
-
82
- def generate_catalog_file(dir)
83
- File.open(dir + '/catalog.yml', 'w') do |file|
84
- file.write <<-EOS
85
- PREDEF:
86
-
87
- CHAPS:
88
- - #{File.basename(dir)}.re
89
-
90
- APPENDIX:
91
-
92
- POSTDEF:
93
-
94
- EOS
95
- end
96
- end
97
-
98
- def generate_images_dir(dir)
99
- FileUtils.mkdir_p dir + '/images'
100
- end
15
+ require 'review/init'
101
16
 
102
- def generate_cover_image(dir)
103
- FileUtils.cp @review_dir + '/test/sample-book/src/images/cover.jpg', dir + '/images/'
17
+ if File.basename($PROGRAM_NAME) == File.basename(__FILE__)
18
+ ReVIEW::Init.execute(*ARGV)
104
19
  end
105
-
106
- def generate_config(dir)
107
- today = Time.now.strftime('%Y-%m-%d')
108
- content = File.read(@review_dir + '/doc/config.yml.sample', encoding: 'utf-8')
109
- content.gsub!(/^#\s*coverimage:.*$/, 'coverimage: cover.jpg')
110
- content.gsub!(/^#\s*date:.*$/, "date: #{today}")
111
- content.gsub!(/^#\s*history:.*$/, %Q(history: [["#{today}"]]))
112
- content.gsub!(/^#\s*texstyle:.*$/, 'texstyle: reviewmacro')
113
- content.gsub!(/^(#\s*)?stylesheet:.*$/, %Q(stylesheet: ["style.css"]))
114
- if @epub_version.to_i == 2
115
- content.gsub!(/^#.*epubversion:.*$/, 'epubversion: 2')
116
- content.gsub!(/^#.*htmlversion:.*$/, 'htmlversion: 4')
117
- end
118
- File.open(File.join(dir, 'config.yml'), 'w') { |f| f.write(content) }
119
- end
120
-
121
- def generate_style(dir)
122
- FileUtils.cp @review_dir + '/test/sample-book/src/style.css', dir
123
- end
124
-
125
- def generate_texmacro(dir)
126
- texmacrodir = dir + '/sty'
127
- FileUtils.mkdir_p texmacrodir
128
- FileUtils.cp [
129
- @review_dir + '/test/sample-book/src/sty/reviewmacro.sty',
130
- @review_dir + '/test/sample-book/src/sty/jumoline.sty'
131
- ], texmacrodir
132
- end
133
-
134
- def generate_rakefile(dir)
135
- FileUtils.mkdir_p dir + '/lib/tasks'
136
-
137
- File.open(dir + '/Rakefile', 'w') do |file|
138
- file.write <<-EOS
139
- Dir.glob('lib/tasks/*.rake').each do |file|
140
- load(file)
141
- end
142
- EOS
143
- end
144
-
145
- FileUtils.cp @review_dir + '/test/sample-book/src/Rakefile',
146
- dir + '/lib/tasks/review.rake'
147
- end
148
-
149
- def generate_locale(dir)
150
- FileUtils.cp @review_dir + '/lib/review/i18n.yml', dir + '/locale.yml'
151
- end
152
-
153
- def generate_gemfile(dir)
154
- File.open(dir + '/Gemfile', 'w') do |file|
155
- file.write <<-EOS
156
- source 'https://rubygems.org'
157
-
158
- gem 'rake'
159
- gem 'review', '#{ReVIEW::VERSION}'
160
- EOS
161
- end
162
- end
163
-
164
- def generate_doc(dir)
165
- docdir = dir + '/doc'
166
- FileUtils.mkdir_p docdir
167
- md_files = Dir.glob(@review_dir + '/doc/*.md').map.to_a
168
- FileUtils.cp md_files, docdir
169
- end
170
-
171
- main if File.basename($PROGRAM_NAME) == File.basename(__FILE__)
data/bin/review-preproc CHANGED
@@ -15,7 +15,6 @@ bindir = Pathname.new(__FILE__).realpath.dirname
15
15
  $LOAD_PATH.unshift((bindir + '../lib').realpath)
16
16
 
17
17
  require 'review/preprocessor'
18
- require 'review/unfold'
19
18
  require 'review/version'
20
19
  require 'review/extentions'
21
20
  require 'review/logger'
@@ -54,7 +53,6 @@ def main
54
53
  opts.on('-d', '--diff', 'Show diff from current file.') { mode = :diff }
55
54
  opts.on('--replace', 'Replace file by preprocessed one.') { mode = :replace }
56
55
  opts.on('-s', '--strip', 'Strip preprocessor tags.') { mode = :strip }
57
- opts.on('--final', 'Unfold text and strip preprocessor tags. (deprecated)') { mode = :final }
58
56
  opts.on('--tabwidth=WIDTH', "Replace tabs with space characters. (0: don't replace)") { |width| param['tabwidth'] = width.to_i }
59
57
  opts.on('--help', 'Print this message and quit.') do
60
58
  puts opts.help
@@ -94,9 +92,6 @@ def main
94
92
  File.open(path) do |f|
95
93
  ReVIEW::Preprocessor::Strip.new(f).each { |line| puts line }
96
94
  end
97
- when :final
98
- u = ReVIEW::Unfold.new
99
- File.open(path) { |f| u.unfold ReVIEW::Preprocessor::Strip.new(f), $stdout }
100
95
  else
101
96
  raise "must not happen: #{mode}"
102
97
  end
data/bin/review-validate CHANGED
@@ -26,28 +26,42 @@ ARGF.each do |line|
26
26
  if line =~ %r{\A//([a-z]+)\{\s*\Z} || line =~ %r{\A//([a-z]+)\[.+?\{\s*\Z}
27
27
  # block
28
28
  new_block = $1
29
- @logger.warn "#{ln}: block #{new_block} started, but previous block #{block} didn't close yet." if block
29
+ if block
30
+ @logger.warn "#{ln}: block #{new_block} started, but previous block #{block} didn't close yet."
31
+ end
30
32
  block = new_block
31
33
  elsif line =~ %r{\A//\}}
32
- @logger.warn "#{ln}: block ended, but not opened." if block.nil?
34
+ if block.nil?
35
+ @logger.warn "#{ln}: block ended, but not opened."
36
+ end
33
37
  block = nil
34
38
  maxcolcount = 0
35
39
  colcount = 0
36
40
  elsif line =~ /\A(\d+\.)\s+/
37
41
  # number
38
- @logger.warn "#{ln}: found '#{$1}' without the head space. Is it correct?" unless %w[list emlist listnum emlistnum cmd image table].include?(block)
42
+ unless %w[list emlist listnum emlistnum cmd image table].include?(block)
43
+ @logger.warn "#{ln}: found '#{$1}' without the head space. Is it correct?"
44
+ end
39
45
  elsif line =~ /\A\*\s+/
40
46
  # itemize
41
- @logger.warn "#{ln}: found '*' without the head space. Is it correct?" unless %w[list emlist listnum emlistnum cmd image table].include?(block)
47
+ unless %w[list emlist listnum emlistnum cmd image table].include?(block)
48
+ @logger.warn "#{ln}: found '*' without the head space. Is it correct?"
49
+ end
42
50
  elsif line =~ /\A\s+(\d+\.)\s+/ && line =~ /\A\s+\*\s+/
43
- @logger.warn "#{ln}: found itemized list or numbered list in #{block}. Is it correct?" unless Tw[list emlist listnum emlistnum cmd image table].include?(block)
51
+ unless Tw[list emlist listnum emlistnum cmd image table].include?(block)
52
+ @logger.warn "#{ln}: found itemized list or numbered list in #{block}. Is it correct?"
53
+ end
44
54
  elsif block == 'table'
45
55
  next if line.start_with?('#@')
46
56
  if line !~ /\A\-\-\-\-\-/
47
57
  # table
48
58
  colcount = line.split("\t").size
49
- maxcolcount = colcount if maxcolcount == 0
50
- @logger.warn "#{ln}: the number of table columns seems mismatch. (#{maxcolcount} != #{colcount})" if colcount != maxcolcount
59
+ if maxcolcount == 0
60
+ maxcolcount = colcount
61
+ end
62
+ if colcount != maxcolcount
63
+ @logger.warn "#{ln}: the number of table columns seems mismatch. (#{maxcolcount} != #{colcount})"
64
+ end
51
65
  end
52
66
  end
53
67
  end
data/bin/review-vol CHANGED
@@ -25,7 +25,7 @@ def main
25
25
 
26
26
  part_sensitive = false
27
27
  basedir = nil
28
- yamlfile = nil
28
+ yamlfile = 'config.yml'
29
29
  opts = OptionParser.new
30
30
  opts.version = ReVIEW::VERSION
31
31
  opts.on('--yaml=YAML', 'Read configurations from YAML file.') { |yaml| yamlfile = yaml }
@@ -45,20 +45,28 @@ def main
45
45
 
46
46
  book = basedir ? ReVIEW::Book.load(basedir) : ReVIEW::Book::Base.load
47
47
  book.config = @config
48
- book.load_config(yamlfile) if yamlfile
48
+ if yamlfile
49
+ book.load_config(yamlfile)
50
+ end
49
51
 
50
52
  if part_sensitive
51
53
  sep = ''
52
54
  book.each_part do |part|
53
55
  print sep
54
56
  sep = "\n"
55
- puts "Part #{part.number} #{part.name}" if part.number
56
- part.each_chapter { |chap| print_chapter_volume chap }
57
+ if part.number
58
+ puts "Part #{part.number} #{part.name}"
59
+ end
60
+ part.each_chapter do |chap|
61
+ print_chapter_volume chap
62
+ end
57
63
  puts ' --------------------'
58
64
  print_volume part.volume
59
65
  end
60
66
  else
61
- book.each_chapter { |chap| print_chapter_volume chap }
67
+ book.each_chapter do |chap|
68
+ print_chapter_volume chap
69
+ end
62
70
  end
63
71
  puts '============================='
64
72
  print_volume book.volume # puts "Total #{book.volume}"
@@ -5,8 +5,7 @@
5
5
  # このファイルはUTF-8エンコーディングで記述してください。
6
6
 
7
7
  # この設定ファイルでサポートするRe:VIEWのバージョン番号。
8
- # major versionが違うときにはエラーを出す。
9
- review_version: 2.0
8
+ review_version: 3.0
10
9
 
11
10
  # ほかの設定ファイルの継承を指定できる。同じパラメータに異なる値がある場合は、
12
11
  # 呼び出し元の値が優先される。
@@ -128,7 +127,7 @@ secnolevel: 2
128
127
  # ePUB3においてはこの設定によらず必ず作成される
129
128
  # mytoc: true
130
129
 
131
- # 表紙にするHTMLファイル。ファイル名を指定すると表紙として入る
130
+ # 表紙にするファイル。ファイル名を指定すると表紙として入る (PDFMaker向けにはLaTeXソース断片、EPUBMaker向けにはHTMLファイル)
132
131
  # cover: null
133
132
  #
134
133
  # 表紙に配置し、書籍の影絵にも利用する画像ファイル。省略した場合はnull (画像を使わない)。画像ディレクトリ内に置いてもディレクトリ名は不要(例: cover.jpg)
@@ -140,7 +139,7 @@ secnolevel: 2
140
139
  # 自動生成される大扉ページを上書きするファイル。ファイル名を指定すると大扉として入る (PDFMaker向けにはLaTeXソース断片、EPUBMaker向けにはHTMLファイル)
141
140
  # titlefile: null
142
141
  #
143
- # 原書大扉ページにするHTMLファイル。ファイル名を指定すると原書大扉として入る (PDFMaker向けにはLaTeXソース断片、EPUBMaker向けにはHTMLファイル)
142
+ # 原書大扉ページにするファイル。ファイル名を指定すると原書大扉として入る (PDFMaker向けにはLaTeXソース断片、EPUBMaker向けにはHTMLファイル)
144
143
  # originaltitlefile: null
145
144
  #
146
145
  # 権利表記ページファイル。ファイル名を指定すると権利表記として入る (PDFMaker向けにはLaTeXソース断片、EPUBMaker向けにはHTMLファイル)
@@ -180,6 +179,12 @@ secnolevel: 2
180
179
  # カタログファイル名を指定する
181
180
  # catalogfile: catalog.yml
182
181
 
182
+ # reファイルを格納するディレクトリ。省略した場合は以下 (. はカレントディレクトリを示す)
183
+ # contentdir: .
184
+
185
+ # @<w>命令で使用する単語ファイルのパス
186
+ # words_file: words.csv
187
+
183
188
  # 1ページの行数文字数と1kbごとのページ数を用紙サイズで指定する(A5 or B5)。
184
189
  # page_metric: A5
185
190
  #
@@ -285,13 +290,13 @@ epubmaker:
285
290
  # texcommand: "uplatex"
286
291
  #
287
292
  # LaTeXのコマンドに渡すオプションを指定する
288
- # texoptions: null
293
+ # texoptions: "-interaction=nonstopmode -file-line-error"
289
294
  #
290
295
  # LaTeX用のdvi変換コマンドを指定する(dvipdfmx)
291
296
  # dvicommand: "dvipdfmx"
292
297
  #
293
- # LaTeX用のdvi変換コマンドのオプションを指定する
294
- # dvioptions: "-d 5"
298
+ # LaTeX用のdvi変換コマンドのオプションを指定する。変換が遅い場合は`-d 5 -z 3`等にする
299
+ # dvioptions: "-d 5 -z 9"
295
300
 
296
301
  # 以下のパラメータを有効にするときには、
297
302
  # pdfmaker:
@@ -1,5 +1,5 @@
1
1
  # simple sample of config.yml
2
- review_version: 2.0
2
+ review_version: 3.0
3
3
 
4
4
  debug: true
5
5
 
data/doc/format.ja.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Re:VIEW フォーマットの文法について解説します。Re:VIEW フォーマットはアスキー社(現カドカワ)の EWB を基本としながら、一部に RD や各種 Wiki の文法を取り入れて簡素化しています。
4
4
 
5
- このドキュメントは、Re:VIEW 2.0 に基づいています。
5
+ このドキュメントは、Re:VIEW 3.0 に基づいています。
6
6
 
7
7
  ## 段落
8
8
 
@@ -372,12 +372,18 @@ V1 --> V6 --|
372
372
  例: gnuplotの使用
373
373
 
374
374
  ```
375
- //graph[sin_x][gnuplot]{
375
+ //graph[sin_x][gnuplot][Gnuplotの使用]{
376
376
  plot sin(x)
377
377
  //}
378
378
  ```
379
379
 
380
- コマンド名には、「`graphviz`」「`gnuplot`」「`blockdiag`」「`aafigure`」のいずれかを指定できます。ツールはそれぞれ別途インストールする必要があります。
380
+ コマンド名には、「`graphviz`」「`gnuplot`」「`blockdiag`」「`aafigure`」「`plantuml`」のいずれかを指定できます。ツールはそれぞれ別途インストールし、インストール先のフォルダ名を指定することなく実行できる (パスを通す) 必要があります。
381
+
382
+ * Graphviz ( https://www.graphviz.org/ ) : `dot` コマンドへのパスを OS に設定すること
383
+ * Gnuplot ( http://www.gnuplot.info/ ) : `gnuplot` コマンドへのパスを OS に設定すること
384
+ * Blockdiag ( http://blockdiag.com/ ) : `blockdiag` コマンドへのパスを OS に設定すること。PDF を生成する場合は ReportLab もインストールすること
385
+ * aafigure ( https://launchpad.net/aafigure ) : `aafigure` コマンドへのパスを OS に設定すること
386
+ * PlantUML ( http://plantuml.com/ ) : `java` コマンドへのパスを OS に設定し、`plantuml.jar` が作業フォルダにあること
381
387
 
382
388
  ## 表
383
389
 
@@ -657,6 +663,33 @@ Web ハイパーリンクを記述するには、リンクに `@<href>`、アン
657
663
  //label[point1]
658
664
  ```
659
665
 
666
+ ## 単語ファイルの展開
667
+
668
+ キーと値のペアを持つ単語ファイルを用意しておき、キーが指定されたら対応するその値を展開するようにできます。`@<w>{キー}` あるいは `@<wb>{キー}` インライン命令を使います。後者は太字にします。
669
+
670
+ 現在、単語ファイルは CSV(コンマ区切り)形式で拡張子 .csv のものに限定されます。1列目にキー、2列目に値を指定して列挙します。
671
+
672
+ ```
673
+ "LGPL","Lesser General Public License"
674
+ "i18n","""i""nternationalizatio""n"""
675
+ ```
676
+
677
+ 単語ファイルのファイルパスは、`config.yml` に `words_file: ファイルパス` で指定します。
678
+
679
+ 例:
680
+
681
+ ```review
682
+ @<w>{LGPL}, @<wb>{i18n}
683
+ ```
684
+
685
+ テキストビルダを使用している場合:
686
+
687
+ ```
688
+ Lesser General Public License, ★"i"nternationalizatio"n"☆
689
+ ```
690
+
691
+ 展開されるときには、ビルダごとに決められたエスケープが行われます。インライン命令を含めるといったことはできません。
692
+
660
693
  ## コメント
661
694
 
662
695
  最終結果に出力されないコメントを記述するには、「`#@#`」を使います。行末までがコメントとして無視されます。
@@ -791,10 +824,13 @@ LaTeXビルダを使用している場合:
791
824
  * `@<href>{URL}`, `@<href>{URL, 文字表現}` : ハイパーリンクを作成します(後述)。
792
825
  * `@<icon>{識別子}` : インラインの画像を出力します。
793
826
  * `@<m>{数式}` : インラインの数式を出力します。
827
+ * `@<w>{キー}` : キー文字列に対応する、単語ファイル内の値文字列を展開します。
828
+ * `@<wb>{キー}` : キー文字列に対応する、単語ファイル内の値文字列を展開し、太字にします。
794
829
  * `@<raw>{|ビルダ|〜}` : 生の文字列を出力します。`\}`は`}`に、`\\`は`\`に、`\n`は改行に置き換えられます。
795
830
  * `@<embed>{|ビルダ|〜}` : 生の文字列を埋め込みます。`\}`は`}`に、`\\`は`\`に置き換えられます(`\n`はそのままです)。
796
831
  * `@<idx>{文字列}` : 文字列を出力するとともに、索引として登録します。索引の使い方については、makeindex.ja.md を参照してください。
797
832
  * `@<hidx>{文字列}` : 索引として登録します (idx と異なり、紙面内に出力はしません)。`親索引文字列<<>>子索引文字列` のように親子関係にある索引も定義できます。
833
+ * `@<balloon>{〜}` : コードブロック (emlist など) 内などでのいわゆる吹き出しを作成します。たとえば「`@<balloon>{ABC}`」とすると、「`←ABC`」となります。デフォルトの挙動および表現は簡素なので、より装飾されたものにするにはスタイルシートを改変するか、`review-ext.rb` を使って挙動を書き換える必要があります。
798
834
 
799
835
  ## 著者用タグ(プリプロセッサ命令)
800
836
 
data/doc/format.md CHANGED
@@ -4,7 +4,7 @@ The document is a brief guide for Re:VIEW markup syntax.
4
4
 
5
5
  Re:VIEW is based on EWB of ASCII (now KADOKAWA), influenced RD and other Wiki system's syntax.
6
6
 
7
- This document explains about the format of Re:VIEW 2.0.
7
+ This document explains about the format of Re:VIEW 3.0.
8
8
 
9
9
 
10
10
  ## Paragraph
@@ -416,8 +416,14 @@ plot sin(x)
416
416
  //}
417
417
  ```
418
418
 
419
- You can use `graphviz`, `gnuplot`, `blockdiag`, `aafigure` as the command name.
420
- Before using these tools, you should installed them.
419
+ You can use `graphviz`, `gnuplot`, `blockdiag`, `aafigure`, and `plantuml` as the command name.
420
+ Before using these tools, you should installed them and configured path appropriately.
421
+
422
+ * Graphviz ( https://www.graphviz.org/ ) : set path to `dot` command
423
+ * Gnuplot ( http://www.gnuplot.info/ ) : set path to `gnuplot` command
424
+ * Blockdiag ( http://blockdiag.com/ ) : set path to `blockdiag` command. Install ReportLab also to make a PDF
425
+ * aafigure ( https://launchpad.net/aafigure ) : set path to `aafigure` command
426
+ * PlantUML ( http://plantuml.com/ ) : set path to `java` command. place `plantuml.jar` on working folder
421
427
 
422
428
  ## Tables
423
429
 
@@ -712,6 +718,33 @@ Usage:
712
718
  //label[point1]
713
719
  ```
714
720
 
721
+ ## Words file
722
+
723
+ By creating a word file with key / value pair, `@<w>{key}` or `@<wb>{key}` will be expanded the key to the corresponding value. `@<wb>` means bold style.
724
+
725
+ This word file is a CSV file with extension .csv. This first columns is the key, the second row is the value.
726
+
727
+ ```
728
+ "LGPL","Lesser General Public License"
729
+ "i18n","""i""nternationalizatio""n"""
730
+ ```
731
+
732
+ Specify the word file path in `words_file` parameter of `config.yml`.
733
+
734
+ Usage:
735
+
736
+ ```review
737
+ @<w>{LGPL}, @<wb>{i18n}
738
+ ```
739
+
740
+ (In HTML:)
741
+
742
+ ```
743
+ Lesser General Public License, ★"i"nternationalizatio"n"☆
744
+ ```
745
+
746
+ Values are escaped by the builder. It is not possible to include inline commands in the value.
747
+
715
748
  ## Comments
716
749
 
717
750
  If you want to write some comments that do not output in the document, you can use comment notation `#@#`.
@@ -844,10 +877,13 @@ this is a special line.
844
877
  @<href>{http://www.google.com/, google}:: hyper link(URL)
845
878
  @<icon>{samplephoto}:: inline image
846
879
  @<m>{a + \alpha}:: TeX inline equation
880
+ @<w>{key}:: expand the value corresponding to the key.
881
+ @<wb>{key}:: expand the value corresponding to the key with bold style.
847
882
  @<raw>{|html|<span>ABC</span>}:: inline raw data inline. `\}` is `}`, `\\` is `\`, and `\n` is newline.
848
883
  @<embed>{|html|<span>ABC</span>}:: inline raw data inline. `\}` is `}` and `\\` is `\`.
849
884
  @<idx>{string}:: output a string and register it as an index. See makeindex.md.
850
885
  @<hidx>{string}:: register a string as an index. A leveled index is expressed like `parent<<>>child`
886
+ @<balloon>{abc}:: inline balloon in code block. For example, `@<balloon>{ABC}` produces `←ABC`. This may seem too simple. To decorate it, modify the style sheet file or override a function by `review-ext.rb`
851
887
  ```
852
888
 
853
889
  ## Commands for Authors (pre-processor commands)
data/doc/format_idg.ja.md CHANGED
@@ -37,10 +37,6 @@ Re:VIEW フォーマットから、Adobe 社の DTP ソフトウェア「InDesig
37
37
 
38
38
  `@<keytop>{キー文字}` でキーボードマークを出力します(実際のフォントとの割り当て処理はフィルタや review-ext.rb で調整します)。
39
39
 
40
- ## 吹き出し
41
-
42
- `@<balloon>{〜}` でコード内などでの吹き出しを作成します。通常、吹き出しは右に寄せられ、記入した箇所から吹き出しまで線が引かれます。
43
-
44
40
  ## DTP 命令指定
45
41
 
46
42
  `@<dtp>{ 〜 }` で「`<? dtp 〜 ?>`」という XML インストラクションを埋め込みます。処理系に渡す任意の文字列を指定できますが、次のような文字列を特殊文字指定できます。
data/doc/pdfmaker.ja.md CHANGED
@@ -21,7 +21,7 @@ LaTeX コンパイラコマンドおよびオプションについて、Re:VIEW
21
21
 
22
22
  ```yaml
23
23
  texcommand: uplatex
24
- texoptions: null
24
+ texoptions: "-interaction=nonstopmode -file-line-error"
25
25
  texdocumentclass: ["jsbook", "uplatex,oneside"]
26
26
  dvicommand: dvipdfmx
27
27
  dvioptions: "-d 5"
data/doc/pdfmaker.md CHANGED
@@ -21,7 +21,7 @@ Default settings of Re:VIEW is below:
21
21
 
22
22
  ```yaml
23
23
  texcommand: uplatex
24
- texoptions: null
24
+ texoptions: "-interaction=nonstopmode -file-line-error"
25
25
  texdocumentclass: ["jsbook", "uplatex,oneside"]
26
26
  dvicommand: dvipdfmx
27
27
  dvioptions: "-d 5"
data/doc/sample.css CHANGED
@@ -75,6 +75,13 @@ span.kw {
75
75
  font-weight: bold;
76
76
  }
77
77
 
78
+ span.balloon {
79
+ font-size: 0.9em;
80
+ }
81
+ span.balloon:before {
82
+ content: "←";
83
+ }
84
+
78
85
  div.column {
79
86
  padding: 0.5em;
80
87
  background: #ffd0d0;
@@ -72,20 +72,39 @@ module EPUBMaker
72
72
 
73
73
  # Complement other parameters by using file parameter.
74
74
  def complement
75
- @id = @file.gsub(%r{[\\/\. ]}, '-') if @id.nil?
76
- @id = "rv-#{@id}" if @id =~ /\A[^a-z]/i
77
- @media = @file.sub(/.+\./, '').downcase if !@file.nil? && @media.nil?
75
+ if @id.nil?
76
+ @id = @file.gsub(%r{[\\/\. ]}, '-')
77
+ end
78
+ if @id =~ /\A[^a-z]/i
79
+ @id = "rv-#{@id}"
80
+ end
81
+
82
+ if !@file.nil? && @media.nil?
83
+ @media = @file.sub(/.+\./, '').downcase
84
+ end
78
85
 
79
- @media = 'application/xhtml+xml' if @media == 'xhtml' || @media == 'xml' || @media == 'html'
80
- @media = 'text/css' if @media == 'css'
81
- @media = 'image/jpeg' if @media == 'jpg' || @media == 'jpeg' || @media == 'image/jpg'
82
- @media = 'image/png' if @media == 'png'
83
- @media = 'image/gif' if @media == 'gif'
84
- @media = 'image/svg+xml' if @media == 'svg' || @media == 'image/svg'
85
- @media = 'application/vnd.ms-opentype' if @media == 'ttf' || @media == 'otf'
86
- @media = 'application/font-woff' if @media == 'woff'
86
+ case @media
87
+ when 'xhtml', 'xml', 'html'
88
+ @media = 'application/xhtml+xml'
89
+ when 'css'
90
+ @media = 'text/css'
91
+ when 'jpg', 'jpeg', 'image/jpg'
92
+ @media = 'image/jpeg'
93
+ when 'png'
94
+ @media = 'image/png'
95
+ when 'gif'
96
+ @media = 'image/gif'
97
+ when 'svg', 'image/svg'
98
+ @media = 'image/svg+xml'
99
+ when 'ttf', 'otf'
100
+ @media = 'application/vnd.ms-opentype'
101
+ when 'woff'
102
+ @media = 'application/font-woff'
103
+ end
87
104
 
88
- raise "Type error: #{id}, #{file}, #{media}, #{title}, #{notoc}" if @id.nil? || @file.nil? || @media.nil?
105
+ if @id.nil? || @file.nil? || @media.nil?
106
+ raise "Type error: #{id}, #{file}, #{media}, #{title}, #{notoc}"
107
+ end
89
108
  end
90
109
  end
91
110
  end
@@ -36,13 +36,18 @@ module EPUBMaker
36
36
  if @producer.config['coverimage']
37
37
  file = nil
38
38
  @producer.contents.each do |item|
39
- next if !item.media.start_with?('image') || item.file !~ /#{@producer.config["coverimage"]}\Z/
39
+ if !item.media.start_with?('image') || item.file !~ /#{@producer.config["coverimage"]}\Z/
40
+ next
41
+ end
40
42
 
41
43
  s << %Q( <meta name="cover" content="#{item.id}"/>\n)
42
44
  file = item.file
43
45
  break
44
46
  end
45
- raise "coverimage #{@producer.config['coverimage']} not found. Abort." if file.nil?
47
+
48
+ if file.nil?
49
+ raise "coverimage #{@producer.config['coverimage']} not found. Abort."
50
+ end
46
51
  end
47
52
  s
48
53
  end
@@ -233,7 +238,9 @@ EOT
233
238
 
234
239
  @body << %Q( <tr><th>ISBN</th><td>#{@producer.isbn_hyphen}</td></tr>\n) if @producer.isbn_hyphen
235
240
  @body << %Q( </table>\n)
236
- @body << %Q( <p class="copyright">#{join_with_separator(@producer.config.names_of('rights').map { |m| CGI.escapeHTML(m) }, '<br />')}</p>\n) if @producer.config['rights'] && !@producer.config['rights'].empty?
241
+ if @producer.config['rights'] && !@producer.config['rights'].empty?
242
+ @body << %Q( <p class="copyright">#{join_with_separator(@producer.config.names_of('rights').map { |m| CGI.escapeHTML(m) }, '<br />')}</p>\n)
243
+ end
237
244
  @body << %Q( </div>\n)
238
245
 
239
246
  @language = @producer.config['language']
@@ -63,7 +63,9 @@ module EPUBMaker
63
63
  next unless @producer.config[role]
64
64
  @producer.config.names_of(role).each do |v|
65
65
  s << %Q( <dc:contributor opf:role="#{role}">#{CGI.escapeHTML(v)}</dc:contributor>\n)
66
- s << %Q( <dc:publisher>#{v}</dc:publisher>\n) if role == 'prt'
66
+ if role == 'prt'
67
+ s << %Q( <dc:publisher>#{v}</dc:publisher>\n)
68
+ end
67
69
  end
68
70
  end
69
71
 
@@ -124,8 +126,14 @@ EOT
124
126
  def produce(epubfile, basedir, tmpdir)
125
127
  produce_write_common(basedir, tmpdir)
126
128
 
127
- File.open("#{tmpdir}/OEBPS/#{@producer.config['bookname']}.ncx", 'w') { |f| @producer.ncx(f, @producer.config['epubmaker']['ncxindent']) }
128
- File.open("#{tmpdir}/OEBPS/#{@producer.config['bookname']}-toc.#{@producer.config['htmlext']}", 'w') { |f| @producer.mytoc(f) } if @producer.config['mytoc']
129
+ File.open("#{tmpdir}/OEBPS/#{@producer.config['bookname']}.ncx", 'w') do |f|
130
+ @producer.ncx(f, @producer.config['epubmaker']['ncxindent'])
131
+ end
132
+ if @producer.config['mytoc']
133
+ File.open("#{tmpdir}/OEBPS/#{@producer.config['bookname']}-toc.#{@producer.config['htmlext']}", 'w') do |f|
134
+ @producer.mytoc(f)
135
+ end
136
+ end
129
137
 
130
138
  @producer.call_hook(@producer.config['epubmaker']['hook_prepack'], tmpdir)
131
139
  expoter = EPUBMaker::ZipExporter.new(tmpdir, @producer.config)