review 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +36 -0
- data/.rubocop.yml +1 -0
- data/ChangeLog +102 -0
- data/README.rdoc +2 -2
- data/bin/review-check +18 -16
- data/bin/review-compile +49 -42
- data/bin/review-epubmaker +23 -993
- data/bin/review-epubmaker-legacy +1024 -0
- data/bin/review-index +17 -15
- data/bin/review-init +39 -9
- data/bin/review-pdfmaker +124 -89
- data/bin/review-preproc +16 -14
- data/bin/review-vol +17 -15
- data/debian/docs +1 -1
- data/doc/catalog.rdoc +34 -0
- data/doc/format.rdoc +16 -2
- data/doc/libepubmaker/{config.yaml → config.yml} +63 -19
- data/doc/quickstart.rdoc +1 -1
- data/doc/{sample.yaml → sample.yml} +0 -0
- data/lib/epubmaker.rb +1 -1
- data/lib/epubmaker/content.rb +9 -1
- data/lib/epubmaker/epubv2.rb +59 -7
- data/lib/epubmaker/epubv3.rb +14 -9
- data/lib/epubmaker/producer.rb +68 -27
- data/lib/epubmaker/resource.rb +3 -1
- data/lib/lineinput.rb +2 -2
- data/lib/review/book/base.rb +125 -24
- data/lib/review/book/chapter.rb +42 -0
- data/lib/review/book/compilable.rb +23 -4
- data/lib/review/book/image_finder.rb +64 -0
- data/lib/review/book/index.rb +64 -50
- data/lib/review/book/page_metric.rb +1 -1
- data/lib/review/builder.rb +19 -12
- data/lib/review/catalog.rb +47 -0
- data/lib/review/compiler.rb +3 -2
- data/lib/review/configure.rb +5 -3
- data/lib/review/epubmaker.rb +130 -46
- data/lib/review/ewbbuilder.rb +27 -31
- data/lib/review/extentions/string.rb +4 -4
- data/lib/review/htmlbuilder.rb +140 -79
- data/lib/review/htmllayout.rb +26 -4
- data/lib/review/htmlutils.rb +20 -1
- data/lib/review/i18n.rb +5 -2
- data/lib/review/{i18n.yaml → i18n.yml} +4 -2
- data/lib/review/idgxmlbuilder.rb +65 -39
- data/lib/review/latexbuilder.rb +72 -24
- data/lib/review/latexutils.rb +3 -1
- data/lib/review/makerhelper.rb +8 -2
- data/lib/review/preprocessor.rb +20 -20
- data/lib/review/review.tex.erb +4 -0
- data/lib/review/sec_counter.rb +9 -11
- data/lib/review/tocparser.rb +2 -2
- data/lib/review/tocprinter.rb +12 -12
- data/lib/review/topbuilder.rb +15 -15
- data/lib/review/version.rb +1 -1
- data/lib/uuid.rb +7 -7
- data/review.gemspec +2 -2
- data/rubocop-todo.yml +443 -0
- data/test/sample-book/src/config.yml +2 -2
- data/test/sample-book/src/{main.css → style.css} +0 -0
- data/test/test_book.rb +46 -48
- data/test/test_book_chapter.rb +25 -13
- data/test/test_builder.rb +3 -3
- data/test/test_catalog.rb +107 -0
- data/test/test_epubmaker.rb +6 -6
- data/test/test_htmlbuilder.rb +160 -39
- data/test/test_htmlutils.rb +22 -0
- data/test/test_i18n.rb +2 -2
- data/test/test_idgxmlbuilder.rb +33 -47
- data/test/test_image_finder.rb +82 -0
- data/test/test_inaobuilder.rb +1 -1
- data/test/test_latexbuilder.rb +35 -39
- data/test/test_lineinput.rb +2 -2
- data/test/test_markdownbuilder.rb +2 -2
- data/test/test_topbuilder.rb +39 -23
- metadata +23 -14
- data/bin/review-epubmaker-ng +0 -23
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module ReVIEW
|
4
|
+
class Catalog
|
5
|
+
def initialize(file)
|
6
|
+
@yaml = YAML.load(file.read)
|
7
|
+
@yaml ||= {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def predef
|
11
|
+
return "" unless @yaml["PREDEF"]
|
12
|
+
@yaml["PREDEF"].join("\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
def chaps
|
16
|
+
return "" unless @yaml["CHAPS"]
|
17
|
+
|
18
|
+
@yaml["CHAPS"].map {|entry|
|
19
|
+
if entry.is_a? String
|
20
|
+
entry
|
21
|
+
elsif entry.is_a? Hash
|
22
|
+
entry.values # chaps in a part
|
23
|
+
end
|
24
|
+
}.flatten.join("\n")
|
25
|
+
end
|
26
|
+
|
27
|
+
def parts
|
28
|
+
return "" unless @yaml["CHAPS"]
|
29
|
+
|
30
|
+
@yaml["CHAPS"].map {|entry|
|
31
|
+
if entry.is_a? Hash
|
32
|
+
entry.keys
|
33
|
+
end
|
34
|
+
}.flatten.reject{|entry| entry.nil?}.join("\n")
|
35
|
+
end
|
36
|
+
|
37
|
+
def parts_with_chaps
|
38
|
+
return "" unless @yaml["CHAPS"]
|
39
|
+
@yaml["CHAPS"].flatten.reject{|entry| entry.nil?}
|
40
|
+
end
|
41
|
+
|
42
|
+
def postdef
|
43
|
+
return "" unless @yaml["POSTDEF"]
|
44
|
+
@yaml["POSTDEF"].join("\n")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/review/compiler.rb
CHANGED
@@ -35,7 +35,7 @@ module ReVIEW
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
|
38
|
+
alias_method :to_s, :string
|
39
39
|
end
|
40
40
|
|
41
41
|
|
@@ -187,6 +187,7 @@ module ReVIEW
|
|
187
187
|
definline :hd
|
188
188
|
definline :href
|
189
189
|
definline :recipe
|
190
|
+
definline :column
|
190
191
|
|
191
192
|
definline :abbr
|
192
193
|
definline :acronym
|
@@ -293,7 +294,7 @@ module ReVIEW
|
|
293
294
|
@headline_indexs[index] = 0 if @headline_indexs[index].nil?
|
294
295
|
@headline_indexs[index] += 1
|
295
296
|
close_current_tagged_section(level)
|
296
|
-
if ReVIEW.book.
|
297
|
+
if ReVIEW.book.config["hdnumberingmode"]
|
297
298
|
caption = @chapter.on_CHAPS? ? "#{@headline_indexs.join('.')} #{caption}" : caption
|
298
299
|
warn "--hdnumberingmode is deprecated. use --level option."
|
299
300
|
end
|
data/lib/review/configure.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
module ReVIEW
|
3
|
-
class Configure
|
3
|
+
class Configure < Hash
|
4
4
|
def self.values
|
5
|
-
|
5
|
+
Configure[
|
6
|
+
# These parameters can be overridden by YAML file.
|
6
7
|
"bookname"=> "example", # it defines epub file name also
|
7
8
|
"booktitle" => "Re:VIEW EPUBサンプル",
|
8
9
|
"title" => nil,
|
@@ -32,7 +33,8 @@ module ReVIEW
|
|
32
33
|
"toc" => true, # Use table of contents
|
33
34
|
"colophon" => nil, # Use colophon
|
34
35
|
"debug" => nil, # debug flag
|
35
|
-
|
36
|
+
"catalogfile" => 'catalog.yml',
|
37
|
+
]
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
data/lib/review/epubmaker.rb
CHANGED
@@ -20,6 +20,7 @@ module ReVIEW
|
|
20
20
|
def initialize
|
21
21
|
@epub = nil
|
22
22
|
@tochtmltxt = "toc-html.txt"
|
23
|
+
@buildlogtxt = "build-log.txt"
|
23
24
|
end
|
24
25
|
|
25
26
|
def log(s)
|
@@ -36,11 +37,13 @@ module ReVIEW
|
|
36
37
|
def produce(yamlfile, bookname=nil)
|
37
38
|
load_yaml(yamlfile)
|
38
39
|
bookname = @params["bookname"] if bookname.nil?
|
40
|
+
booktmpname = "#{bookname}-epub"
|
41
|
+
|
39
42
|
log("Loaded yaml file (#{yamlfile}). I will produce #{bookname}.epub.")
|
40
43
|
|
41
44
|
File.unlink("#{bookname}.epub") if File.exist?("#{bookname}.epub")
|
42
|
-
FileUtils.rm_rf(
|
43
|
-
|
45
|
+
FileUtils.rm_rf(booktmpname) if @params["debug"] && File.exist?(booktmpname)
|
46
|
+
|
44
47
|
Dir.mktmpdir(bookname, Dir.pwd) do |basetmpdir|
|
45
48
|
log("Created first temporary directory as #{basetmpdir}.")
|
46
49
|
|
@@ -63,18 +66,25 @@ module ReVIEW
|
|
63
66
|
|
64
67
|
push_contents(basetmpdir)
|
65
68
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
69
|
+
if !@params["verify_target_images"].nil?
|
70
|
+
verify_target_images(basetmpdir)
|
71
|
+
copy_images(@params["imagedir"], basetmpdir)
|
72
|
+
else
|
73
|
+
copy_images(@params["imagedir"], "#{basetmpdir}/images")
|
74
|
+
end
|
75
|
+
|
76
|
+
copy_resources("covers", "#{basetmpdir}/images")
|
77
|
+
copy_resources("adv", "#{basetmpdir}/images")
|
78
|
+
copy_resources(@params["fontdir"], "#{basetmpdir}/fonts", @params["font_ext"])
|
79
|
+
|
70
80
|
log("Call hook_aftercopyimage. (#{@params["hook_aftercopyimage"]})")
|
71
81
|
call_hook(@params["hook_aftercopyimage"], basetmpdir)
|
72
82
|
|
73
83
|
@epub.import_imageinfo("#{basetmpdir}/images", basetmpdir)
|
74
84
|
@epub.import_imageinfo("#{basetmpdir}/fonts", basetmpdir, @params["font_ext"])
|
75
85
|
|
76
|
-
epubtmpdir = @params["debug"].nil? ? nil : "#{Dir.pwd}/#{
|
77
|
-
Dir.mkdir(
|
86
|
+
epubtmpdir = @params["debug"].nil? ? nil : "#{Dir.pwd}/#{booktmpname}"
|
87
|
+
Dir.mkdir(booktmpname) unless @params["debug"].nil?
|
78
88
|
log("Call ePUB producer.")
|
79
89
|
@epub.produce("#{bookname}.epub", basetmpdir, epubtmpdir)
|
80
90
|
log("Finished.")
|
@@ -84,28 +94,77 @@ module ReVIEW
|
|
84
94
|
|
85
95
|
def call_hook(filename, *params)
|
86
96
|
if !filename.nil? && File.exist?(filename) && FileTest.executable?(filename)
|
87
|
-
|
97
|
+
if ENV["REVIEW_SAFE_MODE"].to_i & 1 > 0
|
98
|
+
warn "hook is prohibited in safe mode. ignored."
|
99
|
+
else
|
100
|
+
system(filename, *params)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def verify_target_images(basetmpdir)
|
106
|
+
@epub.contents.each do |content|
|
107
|
+
if content.media == "application/xhtml+xml"
|
108
|
+
|
109
|
+
File.open("#{basetmpdir}/#{content.file}") do |f|
|
110
|
+
Document.new(File.new(f)).each_element("//img") do |e|
|
111
|
+
@params["force_include_images"].push(e.attributes["src"])
|
112
|
+
if e.attributes["src"] =~ /svg\Z/i
|
113
|
+
content.properties.push("svg")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
elsif content.media == "text/css"
|
118
|
+
File.open("#{basetmpdir}/#{content.file}") do |f|
|
119
|
+
f.each_line do |l|
|
120
|
+
l.scan(/url\((.+?)\)/) do |m|
|
121
|
+
@params["force_include_images"].push($1.strip)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
@params["force_include_images"] = @params["force_include_images"].sort.uniq
|
128
|
+
end
|
129
|
+
|
130
|
+
def copy_images(resdir, destdir, allow_exts=nil)
|
131
|
+
return nil unless File.exist?(resdir)
|
132
|
+
allow_exts = @params["image_ext"] if allow_exts.nil?
|
133
|
+
FileUtils.mkdir_p(destdir) unless FileTest.directory?(destdir)
|
134
|
+
if !@params["verify_target_images"].nil?
|
135
|
+
@params["force_include_images"].each do |file|
|
136
|
+
unless File.exist?(file)
|
137
|
+
warn "#{file} is not found, skip." if file !~ /\Ahttp[s]?:/
|
138
|
+
next
|
139
|
+
end
|
140
|
+
basedir = File.dirname(file)
|
141
|
+
FileUtils.mkdir_p("#{destdir}/#{basedir}") unless FileTest.directory?("#{destdir}/#{basedir}")
|
142
|
+
log("Copy #{file} to the temporary directory.")
|
143
|
+
FileUtils.cp(file, "#{destdir}/#{basedir}")
|
144
|
+
end
|
145
|
+
else
|
146
|
+
recursive_copy_files(resdir, destdir, allow_exts)
|
88
147
|
end
|
89
148
|
end
|
90
149
|
|
91
|
-
def
|
92
|
-
return nil unless File.exist?(
|
150
|
+
def copy_resources(resdir, destdir, allow_exts=nil)
|
151
|
+
return nil unless File.exist?(resdir)
|
93
152
|
allow_exts = @params["image_ext"] if allow_exts.nil?
|
94
153
|
FileUtils.mkdir_p(destdir) unless FileTest.directory?(destdir)
|
95
|
-
|
154
|
+
recursive_copy_files(resdir, destdir, allow_exts)
|
96
155
|
end
|
97
156
|
|
98
|
-
def
|
99
|
-
Dir.open(
|
157
|
+
def recursive_copy_files(resdir, destdir, allow_exts)
|
158
|
+
Dir.open(resdir) do |dir|
|
100
159
|
dir.each do |fname|
|
101
160
|
next if fname =~ /\A\./
|
102
|
-
if FileTest.directory?("#{
|
103
|
-
|
161
|
+
if FileTest.directory?("#{resdir}/#{fname}")
|
162
|
+
recursive_copy_files("#{resdir}/#{fname}", "#{destdir}/#{fname}", allow_exts)
|
104
163
|
else
|
105
164
|
if fname =~ /\.(#{allow_exts.join("|")})\Z/i
|
106
165
|
Dir.mkdir(destdir) unless File.exist?(destdir)
|
107
|
-
log("Copy #{
|
108
|
-
FileUtils.cp("#{
|
166
|
+
log("Copy #{resdir}/#{fname} to the temporary directory.")
|
167
|
+
FileUtils.cp("#{resdir}/#{fname}", destdir)
|
109
168
|
end
|
110
169
|
end
|
111
170
|
end
|
@@ -134,14 +193,15 @@ module ReVIEW
|
|
134
193
|
build_part(part, basetmpdir, htmlfile)
|
135
194
|
title = ReVIEW::I18n.t("part", part.number)
|
136
195
|
title += ReVIEW::I18n.t("chapter_postfix") + part.name.strip if part.name.strip.present?
|
137
|
-
write_tochtmltxt(basetmpdir, "0\t#{htmlfile}\t#{title}")
|
196
|
+
write_tochtmltxt(basetmpdir, "0\t#{htmlfile}\t#{title}\tchaptype=part")
|
197
|
+
write_buildlogtxt(basetmpdir, htmlfile, "")
|
138
198
|
end
|
139
199
|
end
|
140
200
|
|
141
201
|
part.chapters.each do |chap|
|
142
202
|
build_chap(chap, base_path, basetmpdir, yamlfile, nil)
|
143
203
|
end
|
144
|
-
|
204
|
+
|
145
205
|
end
|
146
206
|
end
|
147
207
|
|
@@ -158,7 +218,7 @@ EOT
|
|
158
218
|
<h2 class="part-title">#{part.name.strip}</h2>
|
159
219
|
EOT
|
160
220
|
end
|
161
|
-
|
221
|
+
|
162
222
|
f.puts <<EOT
|
163
223
|
</div>
|
164
224
|
EOT
|
@@ -168,6 +228,12 @@ EOT
|
|
168
228
|
|
169
229
|
def build_chap(chap, base_path, basetmpdir, yamlfile, ispart=nil)
|
170
230
|
filename = ""
|
231
|
+
|
232
|
+
chaptype = "body"
|
233
|
+
chaptype = "part" unless ispart.nil?
|
234
|
+
chaptype = "pre" if chap.on_PREDEF?
|
235
|
+
chaptype = "post" if chap.on_POSTDEF?
|
236
|
+
|
171
237
|
if !ispart.nil?
|
172
238
|
filename = chap.path
|
173
239
|
else
|
@@ -189,28 +255,32 @@ EOT
|
|
189
255
|
end
|
190
256
|
|
191
257
|
htmlfile = "#{id}.#{@params["htmlext"]}"
|
258
|
+
write_buildlogtxt(basetmpdir, htmlfile, filename)
|
192
259
|
log("Create #{htmlfile} from #{filename}.")
|
193
260
|
|
194
261
|
level = @params["secnolevel"]
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
level = @params["
|
201
|
-
|
262
|
+
|
263
|
+
# TODO: It would be nice if we can modify level in PART, PREDEF, or POSTDEF.
|
264
|
+
# But we have to care about section number reference (@<hd>) also.
|
265
|
+
#
|
266
|
+
# if !ispart.nil?
|
267
|
+
# level = @params["part_secnolevel"]
|
268
|
+
# else
|
269
|
+
# level = @params["pre_secnolevel"] if chap.on_PREDEF?
|
270
|
+
# level = @params["post_secnolevel"] if chap.on_POSTDEF?
|
271
|
+
# end
|
202
272
|
|
203
273
|
stylesheet = ""
|
204
274
|
if @params["stylesheet"].size > 0
|
205
275
|
stylesheet = "--stylesheet=#{@params["stylesheet"].join(",")}"
|
206
276
|
end
|
207
277
|
|
208
|
-
system("review-compile --yaml=#{yamlfile} --target=html --level=#{level} --htmlversion=#{@params["htmlversion"]} --epubversion=#{@params["epubversion"]} #{stylesheet} #{@params["params"]} #{filename} > \"#{basetmpdir}/#{htmlfile}\"")
|
278
|
+
system("#{ReVIEW::MakerHelper.bindir}/review-compile --yaml=#{yamlfile} --target=html --level=#{level} --htmlversion=#{@params["htmlversion"]} --epubversion=#{@params["epubversion"]} #{stylesheet} #{@params["params"]} #{filename} > \"#{basetmpdir}/#{htmlfile}\"")
|
209
279
|
|
210
|
-
write_info_body(basetmpdir, id, htmlfile, ispart)
|
280
|
+
write_info_body(basetmpdir, id, htmlfile, ispart, chaptype)
|
211
281
|
end
|
212
282
|
|
213
|
-
def write_info_body(basetmpdir, id, filename, ispart=nil)
|
283
|
+
def write_info_body(basetmpdir, id, filename, ispart=nil, chaptype=nil)
|
214
284
|
headlines = []
|
215
285
|
# FIXME:nonumを修正する必要あり
|
216
286
|
Document.parse_stream(File.new("#{basetmpdir}/#{filename}"), ReVIEWHeaderListener.new(headlines))
|
@@ -218,9 +288,9 @@ EOT
|
|
218
288
|
headlines.each do |headline|
|
219
289
|
headline["level"] = 0 if !ispart.nil? && headline["level"] == 1
|
220
290
|
if first.nil?
|
221
|
-
write_tochtmltxt(basetmpdir, "#{headline["level"]}\t#{filename}##{headline["id"]}\t#{headline["title"]}")
|
291
|
+
write_tochtmltxt(basetmpdir, "#{headline["level"]}\t#{filename}##{headline["id"]}\t#{headline["title"]}\tchaptype=#{chaptype}")
|
222
292
|
else
|
223
|
-
write_tochtmltxt(basetmpdir, "#{headline["level"]}\t#{filename}\t#{headline["title"]}\tforce_include=true")
|
293
|
+
write_tochtmltxt(basetmpdir, "#{headline["level"]}\t#{filename}\t#{headline["title"]}\tforce_include=true,chaptype=#{chaptype}")
|
224
294
|
first = nil
|
225
295
|
end
|
226
296
|
end
|
@@ -231,6 +301,7 @@ EOT
|
|
231
301
|
f.each_line do |l|
|
232
302
|
force_include = nil
|
233
303
|
customid = nil
|
304
|
+
chaptype = nil
|
234
305
|
level, file, title, custom = l.chomp.split("\t")
|
235
306
|
unless custom.nil?
|
236
307
|
# custom setting
|
@@ -242,6 +313,8 @@ EOT
|
|
242
313
|
customid = v
|
243
314
|
when "force_include"
|
244
315
|
force_include = true
|
316
|
+
when "chaptype"
|
317
|
+
chaptype = v
|
245
318
|
end
|
246
319
|
end
|
247
320
|
end
|
@@ -249,9 +322,9 @@ EOT
|
|
249
322
|
log("Push #{file} to ePUB contents.")
|
250
323
|
|
251
324
|
if customid.nil?
|
252
|
-
@epub.contents.push(Content.new("file" => file, "level" => level.to_i, "title" => title))
|
325
|
+
@epub.contents.push(Content.new("file" => file, "level" => level.to_i, "title" => title, "chaptype" => chaptype))
|
253
326
|
else
|
254
|
-
@epub.contents.push(Content.new("id" => customid, "file" => file, "level" => level.to_i, "title" => title))
|
327
|
+
@epub.contents.push(Content.new("id" => customid, "file" => file, "level" => level.to_i, "title" => title, "chaptype" => chaptype))
|
255
328
|
end
|
256
329
|
end
|
257
330
|
end
|
@@ -270,22 +343,22 @@ EOT
|
|
270
343
|
FileUtils.cp(@params["cover"], "#{basetmpdir}/#{File.basename(@params["cover"])}") if !@params["cover"].nil? && File.exist?(@params["cover"])
|
271
344
|
|
272
345
|
if @params["titlepage"]
|
273
|
-
if @params["
|
346
|
+
if @params["titlefile"].nil?
|
274
347
|
build_titlepage(basetmpdir, "titlepage.#{@params["htmlext"]}")
|
275
348
|
else
|
276
|
-
FileUtils.cp(@params["
|
349
|
+
FileUtils.cp(@params["titlefile"], "#{basetmpdir}/titlepage.#{@params["htmlext"]}")
|
277
350
|
end
|
278
|
-
write_tochtmltxt(basetmpdir, "1\ttitlepage.#{@params["htmlext"]}\t#{@epub.res.v("titlepagetitle")}")
|
351
|
+
write_tochtmltxt(basetmpdir, "1\ttitlepage.#{@params["htmlext"]}\t#{@epub.res.v("titlepagetitle")}\tchaptype=pre")
|
279
352
|
end
|
280
353
|
|
281
354
|
if !@params["originaltitlefile"].nil? && File.exist?(@params["originaltitlefile"])
|
282
355
|
FileUtils.cp(@params["originaltitlefile"], "#{basetmpdir}/#{File.basename(@params["originaltitlefile"])}")
|
283
|
-
write_tochtmltxt(basetmpdir, "1\t#{File.basename(@params["originaltitlefile"])}\t#{@epub.res.v("originaltitle")}")
|
356
|
+
write_tochtmltxt(basetmpdir, "1\t#{File.basename(@params["originaltitlefile"])}\t#{@epub.res.v("originaltitle")}\tchaptype=pre")
|
284
357
|
end
|
285
358
|
|
286
359
|
if !@params["creditfile"].nil? && File.exist?(@params["creditfile"])
|
287
360
|
FileUtils.cp(@params["creditfile"], "#{basetmpdir}/#{File.basename(@params["creditfile"])}")
|
288
|
-
write_tochtmltxt(basetmpdir, "1\t#{File.basename(@params["creditfile"])}\t#{@epub.res.v("credittitle")}")
|
361
|
+
write_tochtmltxt(basetmpdir, "1\t#{File.basename(@params["creditfile"])}\t#{@epub.res.v("credittitle")}\tchaptype=pre")
|
289
362
|
end
|
290
363
|
end
|
291
364
|
|
@@ -318,12 +391,12 @@ EOT
|
|
318
391
|
def copy_backmatter(basetmpdir)
|
319
392
|
if @params["profile"]
|
320
393
|
FileUtils.cp(@params["profile"], "#{basetmpdir}/#{File.basename(@params["profile"])}")
|
321
|
-
write_tochtmltxt(basetmpdir, "1\t#{File.basename(@params["profile"])}\t#{@epub.res.v("profiletitle")}")
|
394
|
+
write_tochtmltxt(basetmpdir, "1\t#{File.basename(@params["profile"])}\t#{@epub.res.v("profiletitle")}\tchaptype=post")
|
322
395
|
end
|
323
396
|
|
324
397
|
if @params["advfile"]
|
325
398
|
FileUtils.cp(@params["advfile"], "#{basetmpdir}/#{File.basename(@params["advfile"])}")
|
326
|
-
write_tochtmltxt(basetmpdir, "1\t#{File.basename(@params["advfile"])}\t#{@epub.res.v("advtitle")}")
|
399
|
+
write_tochtmltxt(basetmpdir, "1\t#{File.basename(@params["advfile"])}\t#{@epub.res.v("advtitle")}\tchaptype=post")
|
327
400
|
end
|
328
401
|
|
329
402
|
if @params["colophon"]
|
@@ -332,7 +405,12 @@ EOT
|
|
332
405
|
else
|
333
406
|
File.open("#{basetmpdir}/colophon.#{@params["htmlext"]}", "w") {|f| @epub.colophon(f) }
|
334
407
|
end
|
335
|
-
write_tochtmltxt(basetmpdir, "1\tcolophon.#{@params["htmlext"]}\t#{@epub.res.v("colophontitle")}")
|
408
|
+
write_tochtmltxt(basetmpdir, "1\tcolophon.#{@params["htmlext"]}\t#{@epub.res.v("colophontitle")}\tchaptype=post")
|
409
|
+
end
|
410
|
+
|
411
|
+
if @params["backcover"]
|
412
|
+
FileUtils.cp(@params["backcover"], "#{basetmpdir}/#{File.basename(@params["backcover"])}")
|
413
|
+
write_tochtmltxt(basetmpdir, "1\t#{File.basename(@params["backcover"])}\t#{@epub.res.v("backcovertitle")}\tchaptype=post")
|
336
414
|
end
|
337
415
|
end
|
338
416
|
|
@@ -342,6 +420,12 @@ EOT
|
|
342
420
|
end
|
343
421
|
end
|
344
422
|
|
423
|
+
def write_buildlogtxt(basetmpdir, htmlfile, reviewfile)
|
424
|
+
File.open("#{basetmpdir}/#{@buildlogtxt}", "a") do |f|
|
425
|
+
f.puts "#{htmlfile},#{reviewfile}"
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
345
429
|
def header(title)
|
346
430
|
# titleはすでにエスケープ済みと想定
|
347
431
|
s = <<EOT
|
@@ -392,7 +476,7 @@ EOT
|
|
392
476
|
@content = ""
|
393
477
|
@headlines = headlines
|
394
478
|
end
|
395
|
-
|
479
|
+
|
396
480
|
def tag_start(name, attrs)
|
397
481
|
if name =~ /\Ah(\d+)/
|
398
482
|
unless @level.nil?
|
@@ -408,7 +492,7 @@ EOT
|
|
408
492
|
end
|
409
493
|
end
|
410
494
|
end
|
411
|
-
|
495
|
+
|
412
496
|
def tag_end(name)
|
413
497
|
if name =~ /\Ah\d+/
|
414
498
|
@headlines.push({"level" => @level, "id" => @id, "title" => @content}) unless @id.nil?
|
@@ -417,7 +501,7 @@ EOT
|
|
417
501
|
@id = nil
|
418
502
|
end
|
419
503
|
end
|
420
|
-
|
504
|
+
|
421
505
|
def text(text)
|
422
506
|
unless @level.nil?
|
423
507
|
@content << text.gsub("\t", " ") # FIXME:区切り文字
|