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.
- checksums.yaml +4 -4
- data/.rubocop.yml +28 -10
- data/.travis.yml +11 -2
- data/NEWS.ja.md +89 -17
- data/NEWS.md +92 -0
- data/README.md +1 -1
- data/Rakefile +0 -13
- data/bin/review-catalog-converter +83 -37
- data/bin/review-check +17 -5
- data/bin/review-compile +1 -1
- data/bin/review-index +6 -0
- data/bin/review-init +3 -155
- data/bin/review-preproc +0 -5
- data/bin/review-validate +21 -7
- data/bin/review-vol +13 -5
- data/doc/config.yml.sample +12 -7
- data/doc/config.yml.sample-simple +1 -1
- data/doc/format.ja.md +39 -3
- data/doc/format.md +39 -3
- data/doc/format_idg.ja.md +0 -4
- data/doc/pdfmaker.ja.md +1 -1
- data/doc/pdfmaker.md +1 -1
- data/doc/sample.css +7 -0
- data/lib/epubmaker/content.rb +31 -12
- data/lib/epubmaker/epubcommon.rb +10 -3
- data/lib/epubmaker/epubv2.rb +11 -3
- data/lib/epubmaker/epubv3.rb +11 -3
- data/lib/epubmaker/producer.rb +55 -20
- data/lib/review/book/base.rb +63 -48
- data/lib/review/book/chapter.rb +19 -7
- data/lib/review/book/compilable.rb +5 -20
- data/lib/review/book/image_finder.rb +10 -3
- data/lib/review/book/index.rb +30 -9
- data/lib/review/book/part.rb +9 -6
- data/lib/review/book.rb +0 -14
- data/lib/review/builder.rb +110 -18
- data/lib/review/catalog.rb +24 -4
- data/lib/review/compiler.rb +3 -1
- data/lib/review/configure.rb +43 -9
- data/lib/review/epubmaker/reviewheaderlistener.rb +57 -0
- data/lib/review/epubmaker.rb +129 -85
- data/lib/review/htmlbuilder.rb +76 -58
- data/lib/review/htmlutils.rb +20 -13
- data/lib/review/i18n.rb +6 -2
- data/lib/review/idgxmlbuilder.rb +52 -41
- data/lib/review/init.rb +194 -0
- data/lib/review/latexbuilder.rb +118 -34
- data/lib/review/latexutils.rb +5 -5
- data/lib/review/logger.rb +2 -1
- data/lib/review/makerhelper.rb +1 -1
- data/lib/review/markdownbuilder.rb +66 -6
- data/lib/review/md2inaobuilder.rb +2 -2
- data/lib/review/pdfmaker.rb +74 -22
- data/lib/review/plaintextbuilder.rb +8 -4
- data/lib/review/preprocessor.rb +14 -17
- data/lib/review/sec_counter.rb +8 -2
- data/lib/review/textmaker.rb +2 -2
- data/lib/review/textutils.rb +9 -2
- data/lib/review/tocparser.rb +7 -4
- data/lib/review/tocprinter.rb +3 -1
- data/lib/review/version.rb +1 -1
- data/lib/review/webmaker.rb +19 -7
- data/lib/review/webtocprinter.rb +8 -4
- data/review.gemspec +4 -3
- data/templates/latex/config.erb +84 -0
- data/templates/latex/layout.tex.erb +76 -361
- data/templates/latex/review-jlreq/README.md +22 -0
- data/templates/latex/review-jlreq/review-base.sty +178 -0
- data/templates/latex/review-jlreq/review-custom.sty +1 -0
- data/templates/latex/review-jlreq/review-jlreq.cls +141 -0
- data/templates/latex/review-jlreq/review-style.sty +149 -0
- data/templates/latex/review-jlreq/reviewmacro.sty +8 -0
- data/templates/latex/review-jsbook/jumoline.sty +310 -0
- data/templates/latex/review-jsbook/plistings.sty +326 -0
- data/templates/latex/review-jsbook/review-base.sty +405 -0
- data/templates/latex/review-jsbook/review-custom.sty +1 -0
- data/templates/latex/review-jsbook/review-style.sty +38 -0
- data/templates/latex/review-jsbook/reviewmacro.sty +8 -0
- data/templates/latex-compat2/layout.tex.erb +387 -0
- data/test/assets/test_template.tex +105 -235
- data/test/assets/test_template_backmatter.tex +133 -14
- data/test/book_test_helper.rb +1 -1
- data/test/run_test.rb +2 -0
- data/test/sample-book/src/Rakefile +11 -6
- data/test/sample-book/src/config.yml +2 -2
- data/test/sample-book/src/sty/reviewmacro.sty +1 -39
- data/test/sample-book/src/style.css +6 -0
- data/test/syntax-book/config.yml +1 -1
- data/test/test_book.rb +13 -16
- data/test/test_book_chapter.rb +4 -10
- data/test/test_book_part.rb +4 -3
- data/test/test_catalog.rb +15 -4
- data/test/test_helper.rb +2 -2
- data/test/test_htmlbuilder.rb +78 -10
- data/test/test_htmlutils.rb +12 -5
- data/test/test_idgxmlbuilder.rb +1 -1
- data/test/test_latexbuilder.rb +94 -49
- data/test/test_latexbuilder_v2.rb +1077 -0
- data/test/test_logger.rb +20 -0
- data/test/test_markdownbuilder.rb +10 -0
- data/test/test_pdfmaker.rb +6 -7
- data/test/test_plaintextbuilder.rb +1 -1
- data/test/test_review_ext.rb +0 -1
- data/test/test_rstbuilder.rb +1 -1
- data/test/test_topbuilder.rb +19 -7
- data/test/test_webtocprinter.rb +14 -14
- data/{test/sample-book/src/vendor → vendor}/jumoline/README +0 -0
- data/{test/sample-book/src/vendor → vendor}/jumoline/jumoline.dtx +0 -0
- data/{test/sample-book/src/vendor → vendor}/jumoline/jumoline.ins +0 -0
- data/{test/sample-book/src/vendor → vendor}/jumoline/lppl.txt +0 -0
- data/vendor/plistings/.gitignore +9 -0
- data/vendor/plistings/LICENSE +21 -0
- data/vendor/plistings/README.md +18 -0
- data/vendor/plistings/plistings.sty +326 -0
- data/vendor/plistings/test1.tex +174 -0
- data/vendor/plistings/test2.tex +54 -0
- metadata +48 -19
- data/lib/review/unfold.rb +0 -129
- data/test/CHAPS +0 -2
- data/test/bib.re +0 -13
- 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
|
-
|
103
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
50
|
-
|
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 =
|
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
|
-
|
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
|
-
|
56
|
-
|
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
|
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}"
|
data/doc/config.yml.sample
CHANGED
@@ -5,8 +5,7 @@
|
|
5
5
|
# このファイルはUTF-8エンコーディングで記述してください。
|
6
6
|
|
7
7
|
# この設定ファイルでサポートするRe:VIEWのバージョン番号。
|
8
|
-
|
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
|
-
#
|
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
|
-
#
|
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:
|
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:
|
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
|
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
|
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
data/doc/pdfmaker.md
CHANGED
data/doc/sample.css
CHANGED
data/lib/epubmaker/content.rb
CHANGED
@@ -72,20 +72,39 @@ module EPUBMaker
|
|
72
72
|
|
73
73
|
# Complement other parameters by using file parameter.
|
74
74
|
def complement
|
75
|
-
|
76
|
-
|
77
|
-
|
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
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
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
|
-
|
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
|
data/lib/epubmaker/epubcommon.rb
CHANGED
@@ -36,13 +36,18 @@ module EPUBMaker
|
|
36
36
|
if @producer.config['coverimage']
|
37
37
|
file = nil
|
38
38
|
@producer.contents.each do |item|
|
39
|
-
|
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
|
-
|
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
|
-
|
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']
|
data/lib/epubmaker/epubv2.rb
CHANGED
@@ -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
|
-
|
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')
|
128
|
-
|
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)
|