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/lib/review/book.rb
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
3
|
-
#
|
|
4
|
-
# Copyright (c) 2002-2008 Minero Aoki
|
|
5
|
-
# 2009 Minero Aoki, Kenshi Muto
|
|
1
|
+
# Copyright (c) 2009-2017 Minero Aoki, Kenshi Muto
|
|
2
|
+
# 2002-2008 Minero Aoki
|
|
6
3
|
#
|
|
7
4
|
# This program is free software.
|
|
8
5
|
# You can distribute or modify this program under the terms of
|
|
@@ -22,7 +19,7 @@ require 'review/book/index'
|
|
|
22
19
|
module ReVIEW
|
|
23
20
|
@default_book = nil
|
|
24
21
|
|
|
25
|
-
def
|
|
22
|
+
def self.book
|
|
26
23
|
@default_book ||= Book::Base.load
|
|
27
24
|
end
|
|
28
25
|
|
data/lib/review/book/base.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
|
-
# Copyright (c)
|
|
3
|
-
#
|
|
2
|
+
# Copyright (c) 2009-2017 Minero Aoki, Kenshi Muto
|
|
3
|
+
# 2002-2008 Minero Aoki
|
|
4
4
|
#
|
|
5
5
|
# This program is free software.
|
|
6
6
|
# You can distribute or modify this program under the terms of
|
|
@@ -13,18 +13,17 @@ require 'review/catalog'
|
|
|
13
13
|
module ReVIEW
|
|
14
14
|
module Book
|
|
15
15
|
class Base
|
|
16
|
-
|
|
17
16
|
attr_writer :config
|
|
18
17
|
attr_writer :parts
|
|
19
18
|
attr_writer :catalog
|
|
20
19
|
attr_reader :basedir
|
|
21
20
|
|
|
22
21
|
def self.load_default
|
|
23
|
-
warn 'Book::Base.load_default() is obsoleted. Use Book::Base.load().'
|
|
24
|
-
load
|
|
22
|
+
ReVIEW.logger.warn 'Book::Base.load_default() is obsoleted. Use Book::Base.load().'
|
|
23
|
+
load
|
|
25
24
|
end
|
|
26
25
|
|
|
27
|
-
def self.load(dir =
|
|
26
|
+
def self.load(dir = '.')
|
|
28
27
|
update_rubyenv dir
|
|
29
28
|
new(dir)
|
|
30
29
|
end
|
|
@@ -34,8 +33,8 @@ module ReVIEW
|
|
|
34
33
|
def self.update_rubyenv(dir)
|
|
35
34
|
return if @basedir_seen.key?(dir)
|
|
36
35
|
if File.file?("#{dir}/review-ext.rb")
|
|
37
|
-
if ENV[
|
|
38
|
-
warn
|
|
36
|
+
if ENV['REVIEW_SAFE_MODE'].to_i & 2 > 0
|
|
37
|
+
ReVIEW.logger.warn 'review-ext.rb is prohibited in safe mode. ignored.'
|
|
39
38
|
else
|
|
40
39
|
Kernel.load File.expand_path("#{dir}/review-ext.rb")
|
|
41
40
|
end
|
|
@@ -58,59 +57,57 @@ module ReVIEW
|
|
|
58
57
|
end
|
|
59
58
|
|
|
60
59
|
def bib_file
|
|
61
|
-
config[
|
|
60
|
+
config['bib_file']
|
|
62
61
|
end
|
|
63
62
|
|
|
64
63
|
def reject_file
|
|
65
|
-
config[
|
|
64
|
+
config['reject_file']
|
|
66
65
|
end
|
|
67
66
|
|
|
68
67
|
def ext
|
|
69
|
-
config[
|
|
68
|
+
config['ext']
|
|
70
69
|
end
|
|
71
70
|
|
|
72
71
|
def image_dir
|
|
73
|
-
config[
|
|
72
|
+
config['image_dir']
|
|
74
73
|
end
|
|
75
74
|
|
|
76
75
|
def image_types
|
|
77
|
-
config[
|
|
76
|
+
config['image_types']
|
|
78
77
|
end
|
|
79
78
|
|
|
80
79
|
def image_types=(types)
|
|
81
|
-
config[
|
|
80
|
+
config['image_types'] = types
|
|
82
81
|
end
|
|
83
82
|
|
|
84
83
|
def page_metric
|
|
85
|
-
if config[
|
|
86
|
-
ReVIEW::Book::PageMetric.const_get(config[
|
|
87
|
-
elsif config[
|
|
88
|
-
ReVIEW::Book::PageMetric.new(*config[
|
|
84
|
+
if config['page_metric'].respond_to?(:downcase) && config['page_metric'].upcase =~ /\A[A-Z0-9_]+\Z/
|
|
85
|
+
ReVIEW::Book::PageMetric.const_get(config['page_metric'].upcase)
|
|
86
|
+
elsif config['page_metric'].is_a?(Array) && config['page_metric'].size == 5
|
|
87
|
+
ReVIEW::Book::PageMetric.new(*config['page_metric'])
|
|
89
88
|
else
|
|
90
|
-
config[
|
|
89
|
+
config['page_metric']
|
|
91
90
|
end
|
|
92
91
|
end
|
|
93
92
|
|
|
94
93
|
def htmlversion
|
|
95
|
-
if config[
|
|
94
|
+
if config['htmlversion'].blank?
|
|
96
95
|
nil
|
|
97
96
|
else
|
|
98
|
-
config[
|
|
97
|
+
config['htmlversion'].to_i
|
|
99
98
|
end
|
|
100
99
|
end
|
|
101
100
|
|
|
102
101
|
def parts
|
|
103
|
-
@parts ||= read_parts
|
|
102
|
+
@parts ||= read_parts
|
|
104
103
|
end
|
|
105
104
|
|
|
106
105
|
def parts_in_file
|
|
107
|
-
parts.find_all{|part|
|
|
108
|
-
part if part.present? and part.file?
|
|
109
|
-
}
|
|
106
|
+
parts.find_all { |part| part if part.present? and part.file? }
|
|
110
107
|
end
|
|
111
108
|
|
|
112
109
|
def part(n)
|
|
113
|
-
parts.detect {|part| part.number == n }
|
|
110
|
+
parts.detect { |part| part.number == n }
|
|
114
111
|
end
|
|
115
112
|
|
|
116
113
|
def each_part(&block)
|
|
@@ -127,7 +124,7 @@ module ReVIEW
|
|
|
127
124
|
end
|
|
128
125
|
|
|
129
126
|
def chapters
|
|
130
|
-
parts
|
|
127
|
+
parts.map(&:chapters).flatten
|
|
131
128
|
end
|
|
132
129
|
|
|
133
130
|
def each_chapter(&block)
|
|
@@ -141,17 +138,13 @@ module ReVIEW
|
|
|
141
138
|
def chapter_index
|
|
142
139
|
return @chapter_index if @chapter_index
|
|
143
140
|
|
|
144
|
-
contents = chapters
|
|
145
|
-
parts
|
|
146
|
-
if prt.id.present?
|
|
147
|
-
contents << prt
|
|
148
|
-
end
|
|
149
|
-
end
|
|
141
|
+
contents = chapters
|
|
142
|
+
parts.each { |prt| contents << prt if prt.id.present? }
|
|
150
143
|
@chapter_index = ChapterIndex.new(contents)
|
|
151
144
|
end
|
|
152
145
|
|
|
153
146
|
def chapter(id)
|
|
154
|
-
chapter_index
|
|
147
|
+
chapter_index[id]
|
|
155
148
|
end
|
|
156
149
|
|
|
157
150
|
def next_chapter(chapter)
|
|
@@ -173,7 +166,7 @@ module ReVIEW
|
|
|
173
166
|
end
|
|
174
167
|
|
|
175
168
|
def volume
|
|
176
|
-
vol = Volume.sum(chapters.map
|
|
169
|
+
vol = Volume.sum(chapters.map(&:volume))
|
|
177
170
|
vol.page_per_kbyte = page_metric.page_per_kbyte
|
|
178
171
|
vol
|
|
179
172
|
end
|
|
@@ -190,53 +183,50 @@ module ReVIEW
|
|
|
190
183
|
def catalog
|
|
191
184
|
return @catalog if @catalog.present?
|
|
192
185
|
|
|
193
|
-
catalogfile_path = "#{basedir}/#{config[
|
|
194
|
-
if File.file? catalogfile_path
|
|
195
|
-
@catalog = File.open(catalogfile_path){|f| Catalog.new(f) }
|
|
196
|
-
end
|
|
197
|
-
|
|
186
|
+
catalogfile_path = "#{basedir}/#{config['catalogfile']}"
|
|
187
|
+
@catalog = File.open(catalogfile_path) { |f| Catalog.new(f) } if File.file? catalogfile_path
|
|
198
188
|
@catalog
|
|
199
189
|
end
|
|
200
190
|
|
|
201
|
-
def
|
|
191
|
+
def read_chaps
|
|
202
192
|
if catalog
|
|
203
193
|
catalog.chaps
|
|
204
194
|
else
|
|
205
|
-
|
|
195
|
+
read_file(config['chapter_file'])
|
|
206
196
|
end
|
|
207
197
|
end
|
|
208
198
|
|
|
209
|
-
def
|
|
199
|
+
def read_predef
|
|
210
200
|
if catalog
|
|
211
201
|
catalog.predef
|
|
212
202
|
else
|
|
213
|
-
|
|
203
|
+
read_file(config['predef_file'])
|
|
214
204
|
end
|
|
215
205
|
end
|
|
216
206
|
|
|
217
|
-
def
|
|
207
|
+
def read_appendix
|
|
218
208
|
if catalog
|
|
219
209
|
catalog.appendix
|
|
220
210
|
else
|
|
221
|
-
|
|
211
|
+
read_file(config['postdef_file']) # for backward compatibility
|
|
222
212
|
end
|
|
223
213
|
end
|
|
224
214
|
|
|
225
|
-
def
|
|
215
|
+
def read_postdef
|
|
226
216
|
if catalog
|
|
227
217
|
catalog.postdef
|
|
228
218
|
else
|
|
229
|
-
|
|
219
|
+
''
|
|
230
220
|
end
|
|
231
221
|
end
|
|
232
222
|
|
|
233
|
-
def
|
|
223
|
+
def read_part
|
|
234
224
|
return @read_part if @read_part
|
|
235
225
|
|
|
236
226
|
if catalog
|
|
237
227
|
@read_part = catalog.parts
|
|
238
228
|
else
|
|
239
|
-
@read_part = File.read("#{@basedir}/#{config[
|
|
229
|
+
@read_part = File.read("#{@basedir}/#{config['part_file']}")
|
|
240
230
|
end
|
|
241
231
|
end
|
|
242
232
|
|
|
@@ -244,7 +234,7 @@ module ReVIEW
|
|
|
244
234
|
if catalog
|
|
245
235
|
catalog.parts.present?
|
|
246
236
|
else
|
|
247
|
-
File.exist?("#{@basedir}/#{config[
|
|
237
|
+
File.exist?("#{@basedir}/#{config['part_file']}")
|
|
248
238
|
end
|
|
249
239
|
end
|
|
250
240
|
|
|
@@ -257,47 +247,38 @@ module ReVIEW
|
|
|
257
247
|
end
|
|
258
248
|
|
|
259
249
|
def prefaces
|
|
260
|
-
if catalog
|
|
261
|
-
return mkpart_from_namelist(catalog.predef.split("\n"))
|
|
262
|
-
end
|
|
250
|
+
return mkpart_from_namelist(catalog.predef.split("\n")) if catalog
|
|
263
251
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
raise FileNotFound, "preface #{err.message}"
|
|
269
|
-
end
|
|
252
|
+
begin
|
|
253
|
+
mkpart_from_namelistfile("#{@basedir}/#{config['predef_file']}") if File.file?("#{@basedir}/#{config['predef_file']}")
|
|
254
|
+
rescue FileNotFound => err
|
|
255
|
+
raise FileNotFound, "preface #{err.message}"
|
|
270
256
|
end
|
|
271
257
|
end
|
|
272
258
|
|
|
273
259
|
def appendix
|
|
274
260
|
if catalog
|
|
275
261
|
names = catalog.appendix.split("\n")
|
|
276
|
-
chaps = names.each_with_index.map {|n, idx|
|
|
277
|
-
mkchap_ifexist(n, idx)
|
|
278
|
-
}.compact
|
|
262
|
+
chaps = names.each_with_index.map { |n, idx| mkchap_ifexist(n, idx) }.compact
|
|
279
263
|
return mkpart(chaps)
|
|
280
264
|
end
|
|
281
265
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
raise FileNotFound, "postscript #{err.message}"
|
|
287
|
-
end
|
|
266
|
+
begin
|
|
267
|
+
mkpart_from_namelistfile("#{@basedir}/#{config['postdef_file']}") if File.file?("#{@basedir}/#{config['postdef_file']}")
|
|
268
|
+
rescue FileNotFound => err
|
|
269
|
+
raise FileNotFound, "postscript #{err.message}"
|
|
288
270
|
end
|
|
289
271
|
end
|
|
290
272
|
|
|
291
273
|
def postscripts
|
|
292
|
-
if catalog
|
|
293
|
-
mkpart_from_namelist(catalog.postdef.split("\n"))
|
|
294
|
-
end
|
|
274
|
+
mkpart_from_namelist(catalog.postdef.split("\n")) if catalog
|
|
295
275
|
end
|
|
296
276
|
|
|
297
277
|
private
|
|
298
278
|
|
|
299
279
|
def read_parts
|
|
300
280
|
list = parse_chapters
|
|
281
|
+
# NOTE: keep this = style to work this logic.
|
|
301
282
|
if pre = prefaces
|
|
302
283
|
list.unshift pre
|
|
303
284
|
end
|
|
@@ -318,14 +299,14 @@ module ReVIEW
|
|
|
318
299
|
|
|
319
300
|
if catalog
|
|
320
301
|
return catalog.parts_with_chaps.map do |entry|
|
|
321
|
-
if entry.is_a?
|
|
302
|
+
if entry.is_a?(Hash)
|
|
322
303
|
chaps = entry.values.first.map do |chap|
|
|
323
|
-
chap = Chapter.new(self,
|
|
304
|
+
chap = Chapter.new(self, num += 1, chap, "#{@basedir}/#{chap}")
|
|
324
305
|
chap
|
|
325
306
|
end
|
|
326
|
-
Part.new(self,
|
|
307
|
+
Part.new(self, part += 1, chaps, read_part.split("\n")[part - 1])
|
|
327
308
|
else
|
|
328
|
-
chap = Chapter.new(self,
|
|
309
|
+
chap = Chapter.new(self, num += 1, entry, "#{@basedir}/#{entry}")
|
|
329
310
|
if chap.number
|
|
330
311
|
num = chap.number
|
|
331
312
|
else
|
|
@@ -336,24 +317,22 @@ module ReVIEW
|
|
|
336
317
|
end
|
|
337
318
|
end
|
|
338
319
|
|
|
339
|
-
chap =
|
|
340
|
-
strip.lines.map
|
|
341
|
-
map
|
|
342
|
-
chaps = part_chunk.split.map {|chapid|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
if part_exist? && read_PART.split("\n").size > part
|
|
346
|
-
Part.new(self, (part += 1), chaps, read_PART.split("\n")[part-1])
|
|
320
|
+
chap = read_chaps.
|
|
321
|
+
strip.lines.map(&:strip).join("\n").split(/\n{2,}/).
|
|
322
|
+
map do |part_chunk|
|
|
323
|
+
chaps = part_chunk.split.map { |chapid| Chapter.new(self, num += 1, chapid, "#{@basedir}/#{chapid}") }
|
|
324
|
+
if part_exist? && read_part.split("\n").size > part
|
|
325
|
+
Part.new(self, part += 1, chaps, read_part.split("\n")[part - 1])
|
|
347
326
|
else
|
|
348
327
|
Part.new(self, nil, chaps)
|
|
349
328
|
end
|
|
350
|
-
|
|
351
|
-
|
|
329
|
+
end
|
|
330
|
+
chap
|
|
352
331
|
end
|
|
353
332
|
|
|
354
333
|
def mkpart_from_namelistfile(path)
|
|
355
334
|
chaps = []
|
|
356
|
-
File.read(path, :
|
|
335
|
+
File.read(path, mode: 'r:BOM|utf-8').split.each_with_index do |name, idx|
|
|
357
336
|
if path =~ /PREDEF/
|
|
358
337
|
chaps << mkchap(name)
|
|
359
338
|
else
|
|
@@ -364,7 +343,7 @@ module ReVIEW
|
|
|
364
343
|
end
|
|
365
344
|
|
|
366
345
|
def mkpart_from_namelist(names)
|
|
367
|
-
mkpart(names.map {|n| mkchap_ifexist(n) }.compact)
|
|
346
|
+
mkpart(names.map { |n| mkchap_ifexist(n) }.compact)
|
|
368
347
|
end
|
|
369
348
|
|
|
370
349
|
def mkpart(chaps)
|
|
@@ -372,14 +351,14 @@ module ReVIEW
|
|
|
372
351
|
end
|
|
373
352
|
|
|
374
353
|
def mkchap(name, number = nil)
|
|
375
|
-
name += ext if File.extname(name)
|
|
354
|
+
name += ext if File.extname(name).empty?
|
|
376
355
|
path = "#{@basedir}/#{name}"
|
|
377
356
|
raise FileNotFound, "file not exist: #{path}" unless File.file?(path)
|
|
378
357
|
Chapter.new(self, number, name, path)
|
|
379
358
|
end
|
|
380
359
|
|
|
381
360
|
def mkchap_ifexist(name, idx = nil)
|
|
382
|
-
name += ext if File.extname(name)
|
|
361
|
+
name += ext if File.extname(name).empty?
|
|
383
362
|
path = "#{@basedir}/#{name}"
|
|
384
363
|
if File.file?(path)
|
|
385
364
|
idx += 1 if idx
|
|
@@ -387,28 +366,24 @@ module ReVIEW
|
|
|
387
366
|
end
|
|
388
367
|
end
|
|
389
368
|
|
|
390
|
-
def
|
|
391
|
-
|
|
369
|
+
def read_file(filename)
|
|
370
|
+
unless @warn_old_files[filename]
|
|
392
371
|
@warn_old_files[filename] = true
|
|
393
|
-
if caller
|
|
394
|
-
warn "!!! #{filename} is obsoleted. please use catalog.yml."
|
|
395
|
-
end
|
|
372
|
+
warn "!!! #{filename} is obsoleted. please use catalog.yml." if caller.none? { |item| item =~ %r{/review/test/test_} }
|
|
396
373
|
end
|
|
397
|
-
res =
|
|
374
|
+
res = ''
|
|
398
375
|
File.open("#{@basedir}/#{filename}", 'r:BOM|utf-8') do |f|
|
|
399
|
-
|
|
400
|
-
if /\A#/ =~ line
|
|
401
|
-
|
|
402
|
-
end
|
|
403
|
-
line.gsub!(/#.*$/, "")
|
|
376
|
+
f.each_line do |line|
|
|
377
|
+
next if /\A#/ =~ line
|
|
378
|
+
line.gsub!(/#.*\Z/, '')
|
|
404
379
|
res << line
|
|
405
380
|
end
|
|
406
381
|
end
|
|
407
382
|
res
|
|
408
383
|
rescue Errno::ENOENT
|
|
409
|
-
Dir.glob("#{@basedir}/*#{ext
|
|
384
|
+
Dir.glob("#{@basedir}/*#{ext}").sort.join("\n")
|
|
410
385
|
rescue Errno::EISDIR
|
|
411
|
-
|
|
386
|
+
''
|
|
412
387
|
end
|
|
413
388
|
end
|
|
414
389
|
end
|
data/lib/review/book/chapter.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
|
-
# Copyright (c)
|
|
3
|
-
#
|
|
2
|
+
# Copyright (c) 2009-2017 Minero Aoki, Kenshi Muto
|
|
3
|
+
# 2002-2008 Minero Aoki
|
|
4
4
|
#
|
|
5
5
|
# This program is free software.
|
|
6
6
|
# You can distribute or modify this program under the terms of
|
|
@@ -35,8 +35,8 @@ module ReVIEW
|
|
|
35
35
|
@content = nil
|
|
36
36
|
end
|
|
37
37
|
if !@content && @path && File.exist?(@path)
|
|
38
|
-
@content = File.read(@path, :
|
|
39
|
-
@number = nil if [
|
|
38
|
+
@content = File.read(@path, mode: 'r:BOM|utf-8')
|
|
39
|
+
@number = nil if %w[nonum nodisp notoc].include?(find_first_header_option)
|
|
40
40
|
end
|
|
41
41
|
@list_index = nil
|
|
42
42
|
@table_index = nil
|
|
@@ -57,11 +57,9 @@ module ReVIEW
|
|
|
57
57
|
when /\A=+[\[\s\{]/
|
|
58
58
|
m = /\A(=+)(?:\[(.+?)\])?(?:\{(.+?)\})?(.*)/.match(f.gets)
|
|
59
59
|
return m[2] # tag
|
|
60
|
-
when %r
|
|
60
|
+
when %r{/\A//[a-z]+/}
|
|
61
61
|
line = f.gets
|
|
62
|
-
if line.rstrip[-1,1] ==
|
|
63
|
-
f.until_match(%r<\A//\}>)
|
|
64
|
-
end
|
|
62
|
+
f.until_match(%r{\A//\}}) if line.rstrip[-1, 1] == '{'
|
|
65
63
|
end
|
|
66
64
|
f.gets
|
|
67
65
|
end
|
|
@@ -69,62 +67,60 @@ module ReVIEW
|
|
|
69
67
|
end
|
|
70
68
|
|
|
71
69
|
def inspect
|
|
72
|
-
"
|
|
70
|
+
"#<#{self.class} #{@number} #{@path}>"
|
|
73
71
|
end
|
|
74
72
|
|
|
75
73
|
def format_number(heading = true)
|
|
76
|
-
return
|
|
74
|
+
return '' unless @number
|
|
75
|
+
return @number.to_s if on_predef?
|
|
77
76
|
|
|
78
|
-
if
|
|
79
|
-
return
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if on_APPENDIX?
|
|
83
|
-
return "#{@number}" if @number < 1 || @number > 27
|
|
84
|
-
if @book.config["appendix_format"]
|
|
85
|
-
raise ReVIEW::ConfigError,
|
|
86
|
-
"'appendix_format:' in config.yml is obsoleted."
|
|
87
|
-
end
|
|
77
|
+
if on_appendix?
|
|
78
|
+
return @number.to_s if @number < 1 || @number > 27
|
|
79
|
+
raise ReVIEW::ConfigError, %Q('appendix_format:' in config.yml is obsoleted.) if @book.config['appendix_format']
|
|
88
80
|
|
|
89
|
-
i18n_appendix = I18n.get(
|
|
90
|
-
fmt = i18n_appendix.scan(/%\w{1,3}/).first ||
|
|
91
|
-
I18n.update(
|
|
81
|
+
i18n_appendix = I18n.get('appendix')
|
|
82
|
+
fmt = i18n_appendix.scan(/%\w{1,3}/).first || '%s'
|
|
83
|
+
I18n.update('appendix_without_heading' => fmt)
|
|
92
84
|
|
|
93
|
-
if heading
|
|
94
|
-
|
|
95
|
-
else
|
|
96
|
-
return I18n.t("appendix_without_heading", @number)
|
|
97
|
-
end
|
|
85
|
+
return I18n.t('appendix', @number) if heading
|
|
86
|
+
return I18n.t('appendix_without_heading', @number)
|
|
98
87
|
end
|
|
99
88
|
|
|
100
89
|
if heading
|
|
101
|
-
|
|
90
|
+
I18n.t('chapter', @number)
|
|
102
91
|
else
|
|
103
|
-
|
|
92
|
+
@number.to_s
|
|
104
93
|
end
|
|
105
94
|
end
|
|
106
95
|
|
|
107
|
-
def
|
|
108
|
-
|
|
96
|
+
def on_chaps?
|
|
97
|
+
on_file?(@book.read_chaps)
|
|
109
98
|
end
|
|
110
99
|
|
|
111
|
-
def
|
|
112
|
-
|
|
100
|
+
def on_predef?
|
|
101
|
+
on_file?(@book.read_predef)
|
|
113
102
|
end
|
|
114
103
|
|
|
115
|
-
def
|
|
116
|
-
|
|
104
|
+
def on_appendix?
|
|
105
|
+
on_file?(@book.read_appendix)
|
|
117
106
|
end
|
|
118
107
|
|
|
119
|
-
def
|
|
120
|
-
|
|
108
|
+
def on_postdef?
|
|
109
|
+
on_file?(@book.read_postdef)
|
|
121
110
|
end
|
|
122
111
|
|
|
123
112
|
private
|
|
124
113
|
|
|
125
|
-
def
|
|
126
|
-
contents.lines.map(&:strip).include?("#{id
|
|
114
|
+
def on_file?(contents)
|
|
115
|
+
contents.lines.map(&:strip).include?("#{id}#{@book.ext}")
|
|
127
116
|
end
|
|
117
|
+
|
|
118
|
+
# backward compatibility
|
|
119
|
+
alias_method :on_CHAPS?, :on_chaps?
|
|
120
|
+
alias_method :on_PREDEF?, :on_predef?
|
|
121
|
+
alias_method :on_APPENDIX?, :on_appendix?
|
|
122
|
+
alias_method :on_POSTDEF?, :on_postdef?
|
|
123
|
+
alias_method :on_FILE?, :on_file?
|
|
128
124
|
end
|
|
129
125
|
end
|
|
130
126
|
end
|