review 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +90 -66
- data/.travis.yml +1 -1
- data/Gemfile +0 -1
- data/NEWS.ja.md +82 -0
- data/NEWS.md +83 -0
- data/README.md +5 -3
- data/Rakefile +8 -8
- data/bin/review +1 -5
- data/bin/review-catalog-converter +22 -27
- data/bin/review-check +36 -43
- data/bin/review-checkdep +10 -15
- data/bin/review-compile +37 -55
- data/bin/review-epubmaker +4 -5
- data/bin/review-index +21 -29
- data/bin/review-init +26 -37
- data/bin/review-pdfmaker +0 -2
- data/bin/review-preproc +25 -45
- data/bin/review-validate +19 -18
- data/bin/review-vol +15 -27
- data/doc/config.yml.sample +5 -2
- data/doc/format.ja.md +20 -1
- data/doc/format.md +21 -5
- data/doc/images/review-generate.png +0 -0
- data/lib/epubmaker.rb +1 -3
- data/lib/epubmaker/content.rb +24 -27
- data/lib/epubmaker/epubcommon.rb +135 -148
- data/lib/epubmaker/epubv2.rb +39 -46
- data/lib/epubmaker/epubv3.rb +93 -103
- data/lib/epubmaker/producer.rb +138 -151
- data/lib/epubmaker/zip_exporter.rb +21 -26
- data/lib/review/book.rb +3 -6
- data/lib/review/book/base.rb +78 -103
- data/lib/review/book/chapter.rb +36 -40
- data/lib/review/book/compilable.rb +28 -31
- data/lib/review/book/image_finder.rb +6 -13
- data/lib/review/book/index.rb +100 -121
- data/lib/review/book/page_metric.rb +2 -7
- data/lib/review/book/part.rb +18 -20
- data/lib/review/book/volume.rb +9 -13
- data/lib/review/builder.rb +81 -116
- data/lib/review/catalog.rb +15 -19
- data/lib/review/compiler.rb +64 -83
- data/lib/review/configure.rb +87 -97
- data/lib/review/converter.rb +2 -7
- data/lib/review/epubbuilder.rb +1 -3
- data/lib/review/epubmaker.rb +213 -205
- data/lib/review/exception.rb +2 -4
- data/lib/review/extentions.rb +0 -1
- data/lib/review/extentions/hash.rb +2 -2
- data/lib/review/extentions/string.rb +5 -30
- data/lib/review/htmlbuilder.rb +320 -375
- data/lib/review/htmltoc.rb +4 -7
- data/lib/review/htmlutils.rb +29 -32
- data/lib/review/i18n.rb +33 -44
- data/lib/review/i18n.yml +3 -3
- data/lib/review/idgxmlbuilder.rb +309 -345
- data/lib/review/latexbuilder.rb +175 -212
- data/lib/review/latexindex.rb +2 -8
- data/lib/review/latexutils.rb +33 -43
- data/lib/review/lineinput.rb +1 -1
- data/lib/review/logger.rb +21 -0
- data/lib/review/makerhelper.rb +1 -4
- data/lib/review/markdownbuilder.rb +44 -53
- data/lib/review/md2inaobuilder.rb +6 -12
- data/lib/review/pdfmaker.rb +143 -173
- data/lib/review/preprocessor.rb +64 -101
- data/lib/review/rstbuilder.rb +126 -158
- data/lib/review/sec_counter.rb +18 -34
- data/lib/review/template.rb +4 -5
- data/lib/review/textbuilder.rb +2 -3
- data/lib/review/textutils.rb +7 -13
- data/lib/review/tocparser.rb +31 -56
- data/lib/review/tocprinter.rb +26 -52
- data/lib/review/topbuilder.rb +219 -247
- data/lib/review/unfold.rb +15 -24
- data/lib/review/version.rb +1 -1
- data/lib/review/webmaker.rb +75 -99
- data/lib/review/webtocprinter.rb +15 -20
- data/lib/review/yamlloader.rb +13 -15
- data/review.gemspec +20 -22
- data/templates/latex/layout.tex.erb +2 -2
- data/templates/opf/epubv2.opf.erb +7 -7
- data/templates/opf/epubv3.opf.erb +7 -7
- data/templates/web/html/layout-html5.html.erb +2 -2
- data/test/assets/black.eps +280 -0
- data/test/assets/fit.png +0 -0
- data/test/assets/large.gif +0 -0
- data/test/assets/large.jpg +0 -0
- data/test/assets/large.png +0 -0
- data/test/assets/large.svg +65 -0
- data/test/assets/test_template.tex +1 -1
- data/test/book_test_helper.rb +2 -2
- data/test/run_test.rb +4 -4
- data/test/sample-book/src/Rakefile +21 -22
- data/test/syntax-book/Gemfile +4 -0
- data/test/syntax-book/Rakefile +72 -0
- data/test/syntax-book/appA.re +22 -0
- data/test/syntax-book/bib.re +6 -0
- data/test/syntax-book/catalog.yml +15 -0
- data/test/syntax-book/ch01.re +136 -0
- data/test/syntax-book/ch02.re +351 -0
- data/test/syntax-book/ch03.re +82 -0
- data/test/syntax-book/config.yml +35 -0
- data/test/syntax-book/images/ball.png +0 -0
- data/test/syntax-book/images/cover.jpg +0 -0
- data/test/syntax-book/images/fractal.png +0 -0
- data/test/syntax-book/images/img3-1.png +0 -0
- data/test/syntax-book/images/inlineicon.jpg +0 -0
- data/test/syntax-book/images/logic.png +0 -0
- data/test/syntax-book/images/logic2.png +0 -0
- data/test/syntax-book/images/puzzle.jpg +0 -0
- data/test/syntax-book/images/table.jpg +0 -0
- data/test/syntax-book/part2.re +6 -0
- data/test/syntax-book/pre01.re +26 -0
- data/test/syntax-book/review-ext.rb +14 -0
- data/test/syntax-book/sty/jumoline.sty +310 -0
- data/test/syntax-book/sty/reviewmacro.sty +39 -0
- data/test/syntax-book/style.css +494 -0
- data/test/syntax-book/syntax.dic +2 -0
- data/test/test_book.rb +106 -111
- data/test/test_book_chapter.rb +21 -22
- data/test/test_book_part.rb +3 -5
- data/test/test_builder.rb +11 -22
- data/test/test_catalog.rb +17 -18
- data/test/test_catalog_converter_cmd.rb +5 -5
- data/test/test_compiler.rb +18 -16
- data/test/test_configure.rb +35 -38
- data/test/test_converter.rb +3 -4
- data/test/test_epub3maker.rb +136 -117
- data/test/test_epubmaker.rb +107 -114
- data/test/test_epubmaker_cmd.rb +2 -4
- data/test/test_extentions_hash.rb +32 -33
- data/test/test_helper.rb +9 -11
- data/test/test_htmlbuilder.rb +454 -420
- data/test/test_htmltoc.rb +8 -12
- data/test/test_htmlutils.rb +0 -2
- data/test/test_i18n.rb +159 -150
- data/test/test_idgxmlbuilder.rb +190 -197
- data/test/test_image_finder.rb +21 -22
- data/test/test_index.rb +24 -29
- data/test/test_latexbuilder.rb +274 -264
- data/test/test_lineinput.rb +7 -10
- data/test/test_location.rb +7 -7
- data/test/test_makerhelper.rb +13 -25
- data/test/test_markdownbuilder.rb +23 -26
- data/test/test_md2inaobuilder.rb +8 -11
- data/test/test_pdfmaker.rb +114 -123
- data/test/test_pdfmaker_cmd.rb +1 -3
- data/test/test_review_ext.rb +3 -5
- data/test/test_rstbuilder.rb +92 -97
- data/test/test_template.rb +3 -7
- data/test/test_textutils.rb +27 -27
- data/test/test_tocparser.rb +2 -2
- data/test/test_topbuilder.rb +98 -103
- data/test/test_webtocprinter.rb +5 -6
- data/test/test_yamlloader.rb +42 -42
- data/test/test_zip_exporter.rb +12 -18
- metadata +86 -9
- data/lib/review/ewbbuilder.rb +0 -382
data/bin/review-checkdep
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# Copyright (c) 1999-2007 Minero Aoki
|
|
3
|
+
# Copyright (c) 2007-2017 Minero Aoki, Kenshi Muto
|
|
4
|
+
# 1999-2007 Minero Aoki
|
|
6
5
|
#
|
|
7
6
|
# This program is free software.
|
|
8
7
|
# You can distribute or modify this program under the terms of
|
|
@@ -15,42 +14,38 @@ require 'pathname'
|
|
|
15
14
|
bindir = Pathname.new(__FILE__).realpath.dirname
|
|
16
15
|
$LOAD_PATH.unshift((bindir + '../lib').realpath)
|
|
17
16
|
|
|
18
|
-
PREDEF_FILE = 'PREDEF'
|
|
17
|
+
PREDEF_FILE = 'PREDEF'.freeze
|
|
19
18
|
|
|
20
19
|
def main
|
|
21
|
-
@provided = parse_predefined
|
|
20
|
+
@provided = parse_predefined
|
|
22
21
|
@unprovided = {}
|
|
23
22
|
ARGF.each do |line|
|
|
24
23
|
case line
|
|
25
24
|
when /\A\#@require\((.*)\)/
|
|
26
25
|
kw = $1
|
|
27
26
|
unless @provided.key?(kw)
|
|
28
|
-
puts "#{location
|
|
29
|
-
@unprovided[kw] = location
|
|
27
|
+
puts "#{location}: not provided: #{kw}"
|
|
28
|
+
@unprovided[kw] = location
|
|
30
29
|
end
|
|
31
30
|
when /\A\#@provide\((.*)\)/
|
|
32
31
|
provide $1
|
|
33
32
|
else
|
|
34
|
-
line.scan(/@<kw>\{(.*?)[,\}]/)
|
|
35
|
-
provide $1
|
|
36
|
-
end
|
|
33
|
+
line.scan(/@<kw>\{(.*?)[,\}]/) { provide $1 }
|
|
37
34
|
end
|
|
38
35
|
end
|
|
39
36
|
end
|
|
40
37
|
|
|
41
38
|
def provide(kw)
|
|
42
|
-
@provided[kw] ||= location
|
|
39
|
+
@provided[kw] ||= location
|
|
43
40
|
if @unprovided[kw]
|
|
44
41
|
reqpos = @unprovided.delete(kw)
|
|
45
|
-
puts "#{location
|
|
42
|
+
puts "#{location}: provided now: #{kw} (#{reqpos})"
|
|
46
43
|
end
|
|
47
44
|
end
|
|
48
45
|
|
|
49
46
|
def parse_predefined
|
|
50
47
|
result = {}
|
|
51
|
-
File.foreach(PREDEF_FILE)
|
|
52
|
-
result[line.strip] = '(predefined)'
|
|
53
|
-
end
|
|
48
|
+
File.foreach(PREDEF_FILE) { |line| result[line.strip] = '(predefined)' }
|
|
54
49
|
result
|
|
55
50
|
rescue Errno::ENOENT
|
|
56
51
|
return {}
|
data/bin/review-compile
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
#
|
|
3
|
-
# $Id: review-compile 4326 2010-01-12 14:10:17Z kmuto $
|
|
4
|
-
#
|
|
5
3
|
# Copyright (c) 2008-2017 Kenshi Muto, Masayoshi Takahashi, KADO Masanori, Minero Aoki
|
|
6
4
|
# Copyright (c) 1999-2007 Minero Aoki
|
|
7
5
|
#
|
|
@@ -21,7 +19,7 @@ require 'fileutils'
|
|
|
21
19
|
require 'optparse'
|
|
22
20
|
require 'yaml'
|
|
23
21
|
|
|
24
|
-
DEFAULT_CONFIG_FILENAME =
|
|
22
|
+
DEFAULT_CONFIG_FILENAME = 'config.yml'.freeze
|
|
25
23
|
|
|
26
24
|
def main
|
|
27
25
|
Signal.trap(:INT) { exit 1 }
|
|
@@ -34,10 +32,11 @@ rescue Errno::EPIPE
|
|
|
34
32
|
end
|
|
35
33
|
|
|
36
34
|
def _main
|
|
35
|
+
@logger = ReVIEW.logger
|
|
37
36
|
mode = :files
|
|
38
37
|
basedir = nil
|
|
39
|
-
if /\Areview2/ =~ File.basename($
|
|
40
|
-
target = File.basename($
|
|
38
|
+
if /\Areview2/ =~ File.basename($PROGRAM_NAME)
|
|
39
|
+
target = File.basename($PROGRAM_NAME, '.rb').sub('review2', '')
|
|
41
40
|
else
|
|
42
41
|
target = nil
|
|
43
42
|
end
|
|
@@ -48,90 +47,79 @@ def _main
|
|
|
48
47
|
|
|
49
48
|
opts = OptionParser.new
|
|
50
49
|
opts.version = ReVIEW::VERSION
|
|
51
|
-
opts.banner = "Usage: #{File.basename($
|
|
52
|
-
opts.on('--yaml=YAML', 'Read configurations from YAML file.') {|yaml| config[
|
|
50
|
+
opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [--target=FMT]"
|
|
51
|
+
opts.on('--yaml=YAML', 'Read configurations from YAML file.') { |yaml| config['yaml'] = yaml }
|
|
53
52
|
opts.on('-c', '--check', 'Check manuscript') { check_only = true }
|
|
54
|
-
opts.on('--level=LVL', 'Section level to append number.') {|lvl| config[
|
|
55
|
-
opts.on('--toclevel=LVL', 'Section level to append number.') {|lvl| config[
|
|
56
|
-
opts.on('--structuredxml', 'Produce XML with structured sections. (idgxml)') { config[
|
|
57
|
-
opts.on('--table=WIDTH', 'Default table width. (idgxml)') {|tbl| config[
|
|
58
|
-
opts.on('--listinfo', 'Append listinfo tag to lists to indicate begin/end. (idgxml)') { config[
|
|
59
|
-
opts.on('--chapref="before,middle,after"', 'Chapref decoration. (idgxml)') {|cdec| config[
|
|
60
|
-
opts.on('--chapterlink', 'make chapref hyperlink') { config[
|
|
61
|
-
opts.on('--stylesheet=file', 'Stylesheet file for HTML (comma separated)') {|files| config[
|
|
62
|
-
opts.on('--mathml', 'Use MathML for TeX equation in HTML')
|
|
63
|
-
config["mathml"] = true
|
|
64
|
-
end
|
|
53
|
+
opts.on('--level=LVL', 'Section level to append number.') { |lvl| config['secnolevel'] = lvl.to_i }
|
|
54
|
+
opts.on('--toclevel=LVL', 'Section level to append number.') { |lvl| config['toclevel'] = lvl.to_i }
|
|
55
|
+
opts.on('--structuredxml', 'Produce XML with structured sections. (idgxml)') { config['structuredxml'] = true }
|
|
56
|
+
opts.on('--table=WIDTH', 'Default table width. (idgxml)') { |tbl| config['tableopt'] = tbl }
|
|
57
|
+
opts.on('--listinfo', 'Append listinfo tag to lists to indicate begin/end. (idgxml)') { config['listinfo'] = true }
|
|
58
|
+
opts.on('--chapref="before,middle,after"', 'Chapref decoration. (idgxml)') { |cdec| config['chapref'] = cdec }
|
|
59
|
+
opts.on('--chapterlink', 'make chapref hyperlink') { config['chapterlink'] = true }
|
|
60
|
+
opts.on('--stylesheet=file', 'Stylesheet file for HTML (comma separated)') { |files| config['stylesheet'] = files.split(/\s*,\s*/) }
|
|
61
|
+
opts.on('--mathml', 'Use MathML for TeX equation in HTML') { config['mathml'] = true }
|
|
65
62
|
opts.on('--htmlversion=VERSION', 'HTML version.') do |v|
|
|
66
63
|
v = v.to_i
|
|
67
|
-
config[
|
|
64
|
+
config['htmlversion'] = v if [4, 5].include?(v)
|
|
68
65
|
end
|
|
69
66
|
opts.on('--epubversion=VERSION', 'EPUB version.') do |v|
|
|
70
67
|
v = v.to_i
|
|
71
|
-
config[
|
|
68
|
+
config['epubversion'] = v if [2, 3].include?(v)
|
|
72
69
|
end
|
|
73
|
-
opts.on('--target=FMT', 'Target format.') {|fmt| target = fmt } unless target
|
|
70
|
+
opts.on('--target=FMT', 'Target format.') { |fmt| target = fmt } unless target
|
|
74
71
|
opts.on('--footnotetext',
|
|
75
|
-
'Use footnotetext and footnotemark instead of footnote (latex)') {
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
opts.on('--draft', 'use draft mode(inline comment)') { config["draft"] = true }
|
|
72
|
+
'Use footnotetext and footnotemark instead of footnote (latex)') { config['footnotetext'] = true }
|
|
73
|
+
opts.on('--draft', 'use draft mode(inline comment)') { config['draft'] = true }
|
|
79
74
|
opts.on('--directory=DIR', 'Compile all chapters in DIR.') do |path|
|
|
80
75
|
mode = :dir
|
|
81
76
|
basedir = path
|
|
82
77
|
end
|
|
83
|
-
opts.on('--output-file=FILENAME', 'Write all results into file instead of stdout.')
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
opts.on('--tabwidth=WIDTH', 'tab width') {|width| config["tabwidth"] = width.to_i }
|
|
87
|
-
opts.on('--catalogfile=FILENAME', 'Set catalog file') do |catalogfile|
|
|
88
|
-
config["catalogfile"] = catalogfile
|
|
89
|
-
end
|
|
78
|
+
opts.on('--output-file=FILENAME', 'Write all results into file instead of stdout.') { |filename| output_filename = filename }
|
|
79
|
+
opts.on('--tabwidth=WIDTH', 'tab width') { |width| config['tabwidth'] = width.to_i }
|
|
80
|
+
opts.on('--catalogfile=FILENAME', 'Set catalog file') { |catalogfile| config['catalogfile'] = catalogfile }
|
|
90
81
|
opts.on('--help', 'Prints this message and quit.') do
|
|
91
82
|
puts opts.help
|
|
92
83
|
exit 0
|
|
93
84
|
end
|
|
94
85
|
begin
|
|
95
86
|
opts.parse!
|
|
87
|
+
|
|
96
88
|
unless target
|
|
97
89
|
if check_only
|
|
98
90
|
target = 'html'
|
|
99
91
|
else
|
|
100
|
-
raise OptionParser::ParseError,
|
|
92
|
+
raise OptionParser::ParseError, 'no target given'
|
|
101
93
|
end
|
|
102
94
|
end
|
|
103
95
|
rescue OptionParser::ParseError => err
|
|
104
|
-
error
|
|
96
|
+
@logger.error(err.message)
|
|
105
97
|
$stderr.puts opts.help
|
|
106
98
|
exit 1
|
|
107
99
|
end
|
|
108
100
|
|
|
109
101
|
begin
|
|
110
102
|
loader = ReVIEW::YAMLLoader.new
|
|
111
|
-
if config[
|
|
112
|
-
config.deep_merge!(loader.load_file(config[
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
config.deep_merge!(loader.load_file(DEFAULT_CONFIG_FILENAME))
|
|
116
|
-
end
|
|
103
|
+
if config['yaml']
|
|
104
|
+
config.deep_merge!(loader.load_file(config['yaml']))
|
|
105
|
+
elsif File.exist?(DEFAULT_CONFIG_FILENAME)
|
|
106
|
+
config.deep_merge!(loader.load_file(DEFAULT_CONFIG_FILENAME))
|
|
117
107
|
end
|
|
118
108
|
|
|
119
|
-
config[
|
|
120
|
-
ReVIEW::I18n.setup(config[
|
|
109
|
+
config['builder'] = target
|
|
110
|
+
ReVIEW::I18n.setup(config['language'])
|
|
121
111
|
begin
|
|
122
112
|
config.check_version(ReVIEW::VERSION)
|
|
123
113
|
rescue ReVIEW::ConfigError => e
|
|
124
|
-
warn e.message
|
|
114
|
+
@logger.warn e.message
|
|
125
115
|
end
|
|
126
116
|
|
|
127
|
-
if ARGV.blank?
|
|
128
|
-
mode = :dir
|
|
129
|
-
end
|
|
117
|
+
mode = :dir if ARGV.blank?
|
|
130
118
|
|
|
131
119
|
case mode
|
|
132
120
|
when :files
|
|
133
121
|
if ARGV.empty?
|
|
134
|
-
error
|
|
122
|
+
@logger.error('no input')
|
|
135
123
|
exit 1
|
|
136
124
|
end
|
|
137
125
|
|
|
@@ -167,24 +155,18 @@ def _main
|
|
|
167
155
|
end
|
|
168
156
|
rescue ReVIEW::ApplicationError => err
|
|
169
157
|
raise if $DEBUG
|
|
170
|
-
error
|
|
158
|
+
@logger.error(err.message)
|
|
171
159
|
exit 1
|
|
172
160
|
end
|
|
173
161
|
end
|
|
174
162
|
|
|
175
|
-
def error(msg)
|
|
176
|
-
$stderr.puts "#{File.basename($0, '.*')}: error: #{msg}"
|
|
177
|
-
end
|
|
178
|
-
|
|
179
163
|
def load_strategy_class(target, strict)
|
|
180
164
|
require "review/#{target}builder"
|
|
181
165
|
ReVIEW.const_get("#{target.upcase}Builder").new(strict)
|
|
182
166
|
end
|
|
183
167
|
|
|
184
168
|
def write(path, str)
|
|
185
|
-
File.open(path, 'w') {|f|
|
|
186
|
-
f.puts str
|
|
187
|
-
}
|
|
169
|
+
File.open(path, 'w') { |f| f.puts str }
|
|
188
170
|
end
|
|
189
171
|
|
|
190
172
|
main
|
data/bin/review-epubmaker
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
# encoding: utf-8
|
|
3
|
-
|
|
4
2
|
# Copyright (c) 2010-2017 Kenshi Muto and Masayoshi Takahashi
|
|
5
3
|
#
|
|
6
4
|
# This program is free software.
|
|
@@ -15,11 +13,13 @@ $LOAD_PATH.unshift((bindir + '../lib').realpath)
|
|
|
15
13
|
require 'review/epubmaker'
|
|
16
14
|
require 'review/version'
|
|
17
15
|
|
|
16
|
+
@logger = ReVIEW.logger
|
|
17
|
+
|
|
18
18
|
rv = ReVIEW::EPUBMaker.new
|
|
19
19
|
|
|
20
20
|
opts = OptionParser.new
|
|
21
21
|
opts.version = ReVIEW::VERSION
|
|
22
|
-
opts.banner = "Usage: #{File.basename($
|
|
22
|
+
opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [options] YAML_filename [export_filename]"
|
|
23
23
|
opts.on('--help', 'Prints this message and quit.') do
|
|
24
24
|
puts opts.help
|
|
25
25
|
exit 0
|
|
@@ -28,12 +28,11 @@ end
|
|
|
28
28
|
begin
|
|
29
29
|
opts.parse!
|
|
30
30
|
rescue OptionParser::ParseError => err
|
|
31
|
-
|
|
31
|
+
@logger.error err.message
|
|
32
32
|
$stderr.puts opts.help
|
|
33
33
|
exit 1
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
|
|
37
36
|
if ARGV.size < 1 || !File.exist?(ARGV[0])
|
|
38
37
|
puts opts.help
|
|
39
38
|
exit 1
|
data/bin/review-index
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# 2008-2014 Minero Aoki, Kenshi Muto
|
|
3
|
+
# Copyright (c) 2008-2017 Minero Aoki, Kenshi Muto
|
|
4
|
+
# 1999-2007 Minero Aoki
|
|
6
5
|
#
|
|
7
6
|
# This program is free software.
|
|
8
7
|
# You can distribute or modify this program under the terms of
|
|
@@ -22,6 +21,7 @@ require 'review/version'
|
|
|
22
21
|
require 'optparse'
|
|
23
22
|
|
|
24
23
|
def main
|
|
24
|
+
@logger = ReVIEW.logger
|
|
25
25
|
Signal.trap(:INT) { exit 1 }
|
|
26
26
|
if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
|
|
27
27
|
Signal.trap(:PIPE, 'IGNORE')
|
|
@@ -40,48 +40,40 @@ def _main
|
|
|
40
40
|
|
|
41
41
|
opts = OptionParser.new
|
|
42
42
|
opts.version = ReVIEW::VERSION
|
|
43
|
-
opts.on('-a', '--all', 'print all chapters.') {
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
opts.on('-p', '--part N', 'list only part N.') {|n|
|
|
43
|
+
opts.on('-a', '--all', 'print all chapters.') { source = book }
|
|
44
|
+
opts.on('-p', '--part N', 'list only part N.') do |n|
|
|
47
45
|
source = book.part(Integer(n)) or
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
opts.on('-c', '--chapter C', 'list only chapter C.')
|
|
46
|
+
error_exit "part #{n} does not exist in this book"
|
|
47
|
+
end
|
|
48
|
+
opts.on('-c', '--chapter C', 'list only chapter C.') do |c|
|
|
51
49
|
begin
|
|
52
50
|
source = ReVIEW::Book::Part.new(nil, 1, [book.chapter(c)])
|
|
53
51
|
rescue
|
|
54
52
|
error_exit "chapter #{c} does not exist in this book"
|
|
55
53
|
end
|
|
56
|
-
|
|
57
|
-
opts.on('-l', '--level N', 'list upto N level (1..4, default=4)')
|
|
54
|
+
end
|
|
55
|
+
opts.on('-l', '--level N', 'list upto N level (1..4, default=4)') do |n|
|
|
58
56
|
upper = Integer(n)
|
|
59
|
-
unless (0..4).
|
|
60
|
-
$stderr.puts
|
|
57
|
+
unless (0..4).cover?(upper) # 0 is hidden option
|
|
58
|
+
$stderr.puts '-l/--level option accepts only 1..4'
|
|
61
59
|
exit 1
|
|
62
60
|
end
|
|
63
|
-
|
|
64
|
-
opts.on('--text', 'output in plain text (default)') {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
opts.on('--html', 'output in HTML (deprecated)') {
|
|
68
|
-
printer_class = ReVIEW::HTMLTOCPrinter
|
|
69
|
-
}
|
|
70
|
-
opts.on('--help', 'print this message and quit.') {
|
|
61
|
+
end
|
|
62
|
+
opts.on('--text', 'output in plain text (default)') { printer_class = ReVIEW::TextTOCPrinter }
|
|
63
|
+
opts.on('--html', 'output in HTML (deprecated)') { printer_class = ReVIEW::HTMLTOCPrinter }
|
|
64
|
+
opts.on('--help', 'print this message and quit.') do
|
|
71
65
|
puts opts.help
|
|
72
66
|
exit 0
|
|
73
|
-
|
|
67
|
+
end
|
|
74
68
|
begin
|
|
75
69
|
opts.parse!
|
|
76
70
|
rescue OptionParser::ParseError => err
|
|
77
|
-
|
|
71
|
+
@logger.error err.message
|
|
78
72
|
$stderr.puts opts.help
|
|
79
73
|
exit 1
|
|
80
74
|
end
|
|
81
75
|
if source
|
|
82
|
-
unless ARGV.empty?
|
|
83
|
-
error_exit '-a/-s option and file arguments are exclusive'
|
|
84
|
-
end
|
|
76
|
+
error_exit '-a/-s option and file arguments are exclusive' unless ARGV.empty?
|
|
85
77
|
else
|
|
86
78
|
puts opts.help
|
|
87
79
|
exit 0
|
|
@@ -89,7 +81,7 @@ def _main
|
|
|
89
81
|
|
|
90
82
|
begin
|
|
91
83
|
printer = printer_class.new(upper, param)
|
|
92
|
-
if source.
|
|
84
|
+
if source.is_a?(ReVIEW::Book::Part)
|
|
93
85
|
printer.print_part source
|
|
94
86
|
else
|
|
95
87
|
printer.print_book source
|
|
@@ -101,7 +93,7 @@ def _main
|
|
|
101
93
|
end
|
|
102
94
|
|
|
103
95
|
def error_exit(msg)
|
|
104
|
-
|
|
96
|
+
@logger.error "#{File.basename($PROGRAM_NAME)}: #{msg}"
|
|
105
97
|
exit 1
|
|
106
98
|
end
|
|
107
99
|
|
data/bin/review-init
CHANGED
|
@@ -15,29 +15,24 @@ require 'pathname'
|
|
|
15
15
|
bindir = Pathname.new(__FILE__).realpath.dirname
|
|
16
16
|
$LOAD_PATH.unshift((bindir + '../lib').realpath)
|
|
17
17
|
|
|
18
|
-
require 'review
|
|
18
|
+
require 'review'
|
|
19
19
|
|
|
20
20
|
def main
|
|
21
|
+
@logger = ReVIEW.logger
|
|
21
22
|
opts = OptionParser.new
|
|
22
23
|
opts.version = ReVIEW::VERSION
|
|
23
|
-
opts.banner = "Usage: #{File.basename($
|
|
24
|
+
opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [option] dirname"
|
|
24
25
|
opts.on('-h', '--help', 'print this message and quit.') do
|
|
25
26
|
puts opts.help
|
|
26
27
|
exit 0
|
|
27
28
|
end
|
|
28
|
-
opts.on('-f', '--force', 'generate files (except *.re) if directory has already existed.')
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
opts.on('-l', '--locale', 'generate locale.yml file.') do
|
|
32
|
-
@locale = true
|
|
33
|
-
end
|
|
34
|
-
opts.on('', '--epub-version VERSION', 'define EPUB version') do |version|
|
|
35
|
-
@epub_version = version
|
|
36
|
-
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 }
|
|
37
32
|
begin
|
|
38
33
|
opts.parse!
|
|
39
34
|
rescue OptionParser::ParseError => err
|
|
40
|
-
|
|
35
|
+
@logger.error err.message
|
|
41
36
|
$stderr.puts opts.help
|
|
42
37
|
exit 1
|
|
43
38
|
end
|
|
@@ -48,7 +43,7 @@ def main
|
|
|
48
43
|
end
|
|
49
44
|
|
|
50
45
|
initdir = File.expand_path(ARGV.shift)
|
|
51
|
-
@review_dir = File.dirname(File.expand_path(__FILE__ +
|
|
46
|
+
@review_dir = File.dirname(File.expand_path(__FILE__ + './../'))
|
|
52
47
|
|
|
53
48
|
generate_dir(initdir) do |dir|
|
|
54
49
|
generate_catalog_file(dir)
|
|
@@ -67,7 +62,7 @@ end
|
|
|
67
62
|
|
|
68
63
|
def generate_dir(dir)
|
|
69
64
|
if File.exist?(dir) && !@force
|
|
70
|
-
|
|
65
|
+
@logger.error "#{dir} already exists."
|
|
71
66
|
exit
|
|
72
67
|
end
|
|
73
68
|
FileUtils.mkdir_p dir
|
|
@@ -75,11 +70,7 @@ def generate_dir(dir)
|
|
|
75
70
|
end
|
|
76
71
|
|
|
77
72
|
def generate_sample(dir)
|
|
78
|
-
|
|
79
|
-
File.open("#{dir}/#{File.basename(dir)}.re", "w") do |file|
|
|
80
|
-
file.write("= ")
|
|
81
|
-
end
|
|
82
|
-
end
|
|
73
|
+
File.open("#{dir}/#{File.basename(dir)}.re", 'w') { |file| file.write('= ') } unless @force
|
|
83
74
|
end
|
|
84
75
|
|
|
85
76
|
def generate_layout(dir)
|
|
@@ -87,7 +78,7 @@ def generate_layout(dir)
|
|
|
87
78
|
end
|
|
88
79
|
|
|
89
80
|
def generate_catalog_file(dir)
|
|
90
|
-
File.open(dir +
|
|
81
|
+
File.open(dir + '/catalog.yml', 'w') do |file|
|
|
91
82
|
file.write <<-EOS
|
|
92
83
|
PREDEF:
|
|
93
84
|
|
|
@@ -107,39 +98,39 @@ def generate_images_dir(dir)
|
|
|
107
98
|
end
|
|
108
99
|
|
|
109
100
|
def generate_cover_image(dir)
|
|
110
|
-
FileUtils.cp @review_dir +
|
|
101
|
+
FileUtils.cp @review_dir + '/test/sample-book/src/images/cover.jpg', dir + '/images/'
|
|
111
102
|
end
|
|
112
103
|
|
|
113
104
|
def generate_config(dir)
|
|
114
|
-
today = Time.now.strftime(
|
|
115
|
-
content = File.read(@review_dir +
|
|
105
|
+
today = Time.now.strftime('%Y-%m-%d')
|
|
106
|
+
content = File.read(@review_dir + '/doc/config.yml.sample', encoding: 'utf-8')
|
|
116
107
|
content.gsub!(/^#\s*coverimage:.*$/, 'coverimage: cover.jpg')
|
|
117
108
|
content.gsub!(/^#\s*date:.*$/, "date: #{today}")
|
|
118
|
-
content.gsub!(/^#\s*history:.*$/, %Q
|
|
119
|
-
content.gsub!(/^#\s*texstyle:.*$/,
|
|
120
|
-
content.gsub!(/^(#\s*)?stylesheet:.*$/, %Q
|
|
109
|
+
content.gsub!(/^#\s*history:.*$/, %Q(history: [["#{today}"]]))
|
|
110
|
+
content.gsub!(/^#\s*texstyle:.*$/, 'texstyle: reviewmacro')
|
|
111
|
+
content.gsub!(/^(#\s*)?stylesheet:.*$/, %Q(stylesheet: ["style.css"]))
|
|
121
112
|
if @epub_version.to_i == 2
|
|
122
|
-
content.gsub!(/^#.*epubversion:.*$/,'epubversion: 2')
|
|
123
|
-
content.gsub!(/^#.*htmlversion:.*$/,'htmlversion: 4')
|
|
113
|
+
content.gsub!(/^#.*epubversion:.*$/, 'epubversion: 2')
|
|
114
|
+
content.gsub!(/^#.*htmlversion:.*$/, 'htmlversion: 4')
|
|
124
115
|
end
|
|
125
|
-
File.open(File.join(dir,
|
|
116
|
+
File.open(File.join(dir, 'config.yml'), 'w') { |f| f.write(content) }
|
|
126
117
|
end
|
|
127
118
|
|
|
128
119
|
def generate_style(dir)
|
|
129
|
-
FileUtils.cp @review_dir +
|
|
120
|
+
FileUtils.cp @review_dir + '/test/sample-book/src/style.css', dir
|
|
130
121
|
end
|
|
131
122
|
|
|
132
123
|
def generate_texmacro(dir)
|
|
133
124
|
texmacrodir = dir + '/sty'
|
|
134
125
|
FileUtils.mkdir_p texmacrodir
|
|
135
126
|
FileUtils.cp [
|
|
136
|
-
@review_dir +
|
|
137
|
-
@review_dir +
|
|
127
|
+
@review_dir + '/test/sample-book/src/sty/reviewmacro.sty',
|
|
128
|
+
@review_dir + '/test/sample-book/src/sty/jumoline.sty'
|
|
138
129
|
], texmacrodir
|
|
139
130
|
end
|
|
140
131
|
|
|
141
132
|
def generate_rakefile(dir)
|
|
142
|
-
FileUtils.cp @review_dir +
|
|
133
|
+
FileUtils.cp @review_dir + '/test/sample-book/src/Rakefile', dir
|
|
143
134
|
end
|
|
144
135
|
|
|
145
136
|
def generate_locale(dir)
|
|
@@ -147,7 +138,7 @@ def generate_locale(dir)
|
|
|
147
138
|
end
|
|
148
139
|
|
|
149
140
|
def generate_gemfile(dir)
|
|
150
|
-
File.open(dir +
|
|
141
|
+
File.open(dir + '/Gemfile', 'w') do |file|
|
|
151
142
|
file.write <<-EOS
|
|
152
143
|
source 'https://rubygems.org'
|
|
153
144
|
|
|
@@ -157,6 +148,4 @@ EOS
|
|
|
157
148
|
end
|
|
158
149
|
end
|
|
159
150
|
|
|
160
|
-
if File.basename($
|
|
161
|
-
main()
|
|
162
|
-
end
|
|
151
|
+
main if File.basename($PROGRAM_NAME) == File.basename(__FILE__)
|