review 2.5.0 → 3.0.0.preview1
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.
- 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)
|