tmtms-review 1.0.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 +7 -0
- data/.travis.yml +9 -0
- data/COPYING +515 -0
- data/ChangeLog +2083 -0
- data/README.rdoc +50 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/bin/review-check +178 -0
- data/bin/review-checkdep +63 -0
- data/bin/review-compile +205 -0
- data/bin/review-epubmaker +661 -0
- data/bin/review-epubmaker-ng +176 -0
- data/bin/review-index +118 -0
- data/bin/review-pdfmaker +208 -0
- data/bin/review-preproc +142 -0
- data/bin/review-validate +51 -0
- data/bin/review-vol +102 -0
- data/debian/README.Debian +12 -0
- data/debian/README.source +5 -0
- data/debian/changelog +5 -0
- data/debian/compat +1 -0
- data/debian/control +22 -0
- data/debian/copyright +62 -0
- data/debian/docs +6 -0
- data/debian/manpage.1.ex +59 -0
- data/debian/patches/path.diff +91 -0
- data/debian/patches/series +1 -0
- data/debian/review.install +13 -0
- data/debian/review.links +4 -0
- data/debian/rules +13 -0
- data/debian/source/format +1 -0
- data/doc/format.rdoc +582 -0
- data/doc/format_idg.rdoc +180 -0
- data/doc/libepubmaker/sample.yaml +90 -0
- data/doc/quickstart.rdoc +188 -0
- data/doc/ruby-uuid/README +11 -0
- data/doc/ruby-uuid/README.ja +34 -0
- data/doc/sample.css +108 -0
- data/doc/sample.yaml +62 -0
- data/lib/epubmaker.rb +28 -0
- data/lib/epubmaker/content.rb +82 -0
- data/lib/epubmaker/epubv2.rb +418 -0
- data/lib/epubmaker/epubv3.rb +249 -0
- data/lib/epubmaker/producer.rb +204 -0
- data/lib/epubmaker/resource.rb +66 -0
- data/lib/lineinput.rb +155 -0
- data/lib/review.rb +3 -0
- data/lib/review/book.rb +46 -0
- data/lib/review/book/base.rb +235 -0
- data/lib/review/book/chapter.rb +81 -0
- data/lib/review/book/compilable.rb +159 -0
- data/lib/review/book/index.rb +339 -0
- data/lib/review/book/page_metric.rb +38 -0
- data/lib/review/book/parameters.rb +97 -0
- data/lib/review/book/part.rb +44 -0
- data/lib/review/book/volume.rb +65 -0
- data/lib/review/builder.rb +444 -0
- data/lib/review/compiler.rb +550 -0
- data/lib/review/configure.rb +38 -0
- data/lib/review/epubbuilder.rb +18 -0
- data/lib/review/exception.rb +21 -0
- data/lib/review/extentions.rb +3 -0
- data/lib/review/extentions/object.rb +9 -0
- data/lib/review/extentions/string.rb +33 -0
- data/lib/review/htmlbuilder.rb +1097 -0
- data/lib/review/htmllayout.rb +19 -0
- data/lib/review/htmlutils.rb +36 -0
- data/lib/review/i18n.rb +30 -0
- data/lib/review/i18n.yaml +34 -0
- data/lib/review/idgxmlbuilder.rb +1145 -0
- data/lib/review/latexbuilder.rb +815 -0
- data/lib/review/latexindex.rb +35 -0
- data/lib/review/latexutils.rb +79 -0
- data/lib/review/preprocessor.rb +563 -0
- data/lib/review/review.tex.erb +232 -0
- data/lib/review/textbuilder.rb +17 -0
- data/lib/review/textutils.rb +66 -0
- data/lib/review/tocparser.rb +342 -0
- data/lib/review/tocprinter.rb +221 -0
- data/lib/review/topbuilder.rb +785 -0
- data/lib/review/unfold.rb +138 -0
- data/lib/uuid.rb +312 -0
- data/review.gemspec +141 -0
- data/test/CHAPS +2 -0
- data/test/bib.re +13 -0
- data/test/book_test_helper.rb +35 -0
- data/test/test.re +43 -0
- data/test/test_book.rb +598 -0
- data/test/test_book_chapter.rb +418 -0
- data/test/test_book_parameter.rb +42 -0
- data/test/test_book_part.rb +50 -0
- data/test/test_builder.rb +144 -0
- data/test/test_compiler.rb +44 -0
- data/test/test_epubmaker.rb +507 -0
- data/test/test_helper.rb +27 -0
- data/test/test_htmlbuilder.rb +554 -0
- data/test/test_htmlutils.rb +28 -0
- data/test/test_i18n.rb +64 -0
- data/test/test_idgxmlbuilder.rb +589 -0
- data/test/test_index.rb +31 -0
- data/test/test_latexbuilder.rb +656 -0
- data/test/test_lineinput.rb +198 -0
- data/test/test_preprocessor.rb +23 -0
- data/test/test_textutils.rb +68 -0
- data/test/test_topbuilder.rb +244 -0
- data/test/test_uuid.rb +156 -0
- metadata +161 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# = resource.rb -- Message resources for EPUBMaker.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2010 Kenshi Muto
|
|
5
|
+
#
|
|
6
|
+
# This program is free software.
|
|
7
|
+
# You can distribute or modify this program under the terms of
|
|
8
|
+
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
9
|
+
# For details of the GNU LGPL, see the file "COPYING".
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
module EPUBMaker
|
|
13
|
+
|
|
14
|
+
# EPUBMaker::Resource contains message translation resources for EPUBMaker.
|
|
15
|
+
class Resource
|
|
16
|
+
# Construct message resource object with using +params+["language"] value.
|
|
17
|
+
def initialize(params)
|
|
18
|
+
@hash = nil
|
|
19
|
+
begin
|
|
20
|
+
@hash = __send__ params["language"]
|
|
21
|
+
rescue
|
|
22
|
+
@hash = __send__ :en
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
@hash.each_pair do |k, v|
|
|
26
|
+
@hash[k] = params[k] unless params[k].nil?
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Return message translation for +key+.
|
|
31
|
+
def v(key)
|
|
32
|
+
return @hash[key]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
# English messages.
|
|
37
|
+
def en
|
|
38
|
+
{
|
|
39
|
+
"toctitle" => "Table of Contents",
|
|
40
|
+
"covertitle" => "Cover",
|
|
41
|
+
"titlepagetitle" => "Title Page",
|
|
42
|
+
"colophontitle" => "Colophon",
|
|
43
|
+
"c-aut" => "Author",
|
|
44
|
+
"c-dsr" => "Designer",
|
|
45
|
+
"c-ill" => "Illustrator",
|
|
46
|
+
"c-edt" => "Editor",
|
|
47
|
+
"c-prt" => "Publisher",
|
|
48
|
+
}
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Japanese messages.
|
|
52
|
+
def ja
|
|
53
|
+
{
|
|
54
|
+
"toctitle" => "目次",
|
|
55
|
+
"covertitle" => "表紙",
|
|
56
|
+
"titlepagetitle" => "権利表記",
|
|
57
|
+
"colophontitle" => "奥付",
|
|
58
|
+
"c-aut" => "著 者",
|
|
59
|
+
"c-dsr" => "デザイン",
|
|
60
|
+
"c-ill" => "イラスト",
|
|
61
|
+
"c-edt" => "編 集",
|
|
62
|
+
"c-prt" => "発行所",
|
|
63
|
+
}
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
data/lib/lineinput.rb
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#
|
|
2
|
+
# $Id: lineinput.rb 2226 2006-04-15 03:05:09Z aamine $
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2002-2005 Minero Aoki
|
|
5
|
+
#
|
|
6
|
+
# This program is free software.
|
|
7
|
+
# You can distribute/modify this program under the terms of
|
|
8
|
+
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
class LineInput
|
|
12
|
+
|
|
13
|
+
def initialize(f)
|
|
14
|
+
@input = f
|
|
15
|
+
@buf = []
|
|
16
|
+
@lineno = 0
|
|
17
|
+
@eof_p = false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def inspect
|
|
21
|
+
"\#<#{self.class} file=#{@input.inspect} line=#{lineno()}>"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def eof?
|
|
25
|
+
@eof_p
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def lineno
|
|
29
|
+
@lineno
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def gets
|
|
33
|
+
unless @buf.empty?
|
|
34
|
+
@lineno += 1
|
|
35
|
+
return @buf.pop
|
|
36
|
+
end
|
|
37
|
+
return nil if @eof_p # to avoid ARGF blocking.
|
|
38
|
+
line = @input.gets
|
|
39
|
+
@eof_p = true unless line
|
|
40
|
+
@lineno += 1
|
|
41
|
+
line
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def ungets(line)
|
|
45
|
+
return unless line
|
|
46
|
+
@lineno -= 1
|
|
47
|
+
@buf.push line
|
|
48
|
+
line
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def peek
|
|
52
|
+
line = gets()
|
|
53
|
+
ungets line if line
|
|
54
|
+
line
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def next?
|
|
58
|
+
peek() ? true : false
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def skip_blank_lines
|
|
62
|
+
n = 0
|
|
63
|
+
while line = gets()
|
|
64
|
+
unless line.strip.empty?
|
|
65
|
+
ungets line
|
|
66
|
+
return n
|
|
67
|
+
end
|
|
68
|
+
n += 1
|
|
69
|
+
end
|
|
70
|
+
n
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def gets_if(re)
|
|
74
|
+
line = gets()
|
|
75
|
+
if not line or not (re =~ line)
|
|
76
|
+
ungets line
|
|
77
|
+
return nil
|
|
78
|
+
end
|
|
79
|
+
line
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def gets_unless(re)
|
|
83
|
+
line = gets()
|
|
84
|
+
if not line or re =~ line
|
|
85
|
+
ungets line
|
|
86
|
+
return nil
|
|
87
|
+
end
|
|
88
|
+
line
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def each
|
|
92
|
+
while line = gets()
|
|
93
|
+
yield line
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def while_match(re)
|
|
98
|
+
while line = gets()
|
|
99
|
+
unless re =~ line
|
|
100
|
+
ungets line
|
|
101
|
+
return
|
|
102
|
+
end
|
|
103
|
+
yield line
|
|
104
|
+
end
|
|
105
|
+
nil
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def getlines_while(re)
|
|
109
|
+
buf = []
|
|
110
|
+
while_match(re) do |line|
|
|
111
|
+
buf.push line
|
|
112
|
+
end
|
|
113
|
+
buf
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
alias span getlines_while # from Haskell
|
|
117
|
+
|
|
118
|
+
def until_match(re)
|
|
119
|
+
while line = gets()
|
|
120
|
+
if re =~ line
|
|
121
|
+
ungets line
|
|
122
|
+
return
|
|
123
|
+
end
|
|
124
|
+
yield line
|
|
125
|
+
end
|
|
126
|
+
nil
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def getlines_until(re)
|
|
130
|
+
buf = []
|
|
131
|
+
until_match(re) do |line|
|
|
132
|
+
buf.push line
|
|
133
|
+
end
|
|
134
|
+
buf
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
alias break getlines_until # from Haskell
|
|
138
|
+
|
|
139
|
+
def until_terminator(re)
|
|
140
|
+
while line = gets()
|
|
141
|
+
return if re =~ line # discard terminal line
|
|
142
|
+
yield line
|
|
143
|
+
end
|
|
144
|
+
nil
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def getblock(term_re)
|
|
148
|
+
buf = []
|
|
149
|
+
until_terminator(term_re) do |line|
|
|
150
|
+
buf.push line
|
|
151
|
+
end
|
|
152
|
+
buf
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
end
|
data/lib/review.rb
ADDED
data/lib/review/book.rb
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#
|
|
2
|
+
# $Id: book.rb 4315 2009-09-02 04:15:24Z kmuto $
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2002-2008 Minero Aoki
|
|
5
|
+
# 2009 Minero Aoki, Kenshi Muto
|
|
6
|
+
#
|
|
7
|
+
# This program is free software.
|
|
8
|
+
# You can distribute or modify this program under the terms of
|
|
9
|
+
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
10
|
+
# For details of the GNU LGPL, see the file "COPYING".
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
require 'review/exception'
|
|
14
|
+
require 'review/extentions'
|
|
15
|
+
require 'forwardable'
|
|
16
|
+
require 'nkf'
|
|
17
|
+
|
|
18
|
+
require 'review/book/base'
|
|
19
|
+
require 'review/book/chapter'
|
|
20
|
+
require 'review/book/part'
|
|
21
|
+
require 'review/book/parameters'
|
|
22
|
+
require 'review/book/page_metric'
|
|
23
|
+
require 'review/book/volume'
|
|
24
|
+
require 'review/book/index'
|
|
25
|
+
|
|
26
|
+
module ReVIEW
|
|
27
|
+
@default_book = nil
|
|
28
|
+
|
|
29
|
+
def ReVIEW.book
|
|
30
|
+
@default_book ||= Book::Base.load_default
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
module Book
|
|
34
|
+
def self.load_default
|
|
35
|
+
Base.load_default
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.load(dir)
|
|
39
|
+
Base.load dir
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.update_rubyenv(dir)
|
|
43
|
+
Base.update_rubyenv dir
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
#
|
|
2
|
+
# $Id: book.rb 4315 2009-09-02 04:15:24Z kmuto $
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2002-2008 Minero Aoki
|
|
5
|
+
# 2009 Minero Aoki, Kenshi Muto
|
|
6
|
+
#
|
|
7
|
+
# This program is free software.
|
|
8
|
+
# You can distribute or modify this program under the terms of
|
|
9
|
+
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
10
|
+
# For details of the GNU LGPL, see the file "COPYING".
|
|
11
|
+
#
|
|
12
|
+
module ReVIEW
|
|
13
|
+
module Book
|
|
14
|
+
class Base
|
|
15
|
+
|
|
16
|
+
attr_accessor :param
|
|
17
|
+
|
|
18
|
+
def self.load_default
|
|
19
|
+
%w( . .. ../.. ).each do |basedir|
|
|
20
|
+
if File.file?("#{basedir}/CHAPS")
|
|
21
|
+
book = load(basedir)
|
|
22
|
+
if File.file?("#{basedir}/config.rb")
|
|
23
|
+
book.instance_variable_set("@parameters", Parameters.load("#{basedir}/config.rb"))
|
|
24
|
+
end
|
|
25
|
+
return book
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
new('.')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.load(dir)
|
|
32
|
+
update_rubyenv dir
|
|
33
|
+
new(dir)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
@basedir_seen = {}
|
|
37
|
+
|
|
38
|
+
def self.update_rubyenv(dir)
|
|
39
|
+
return if @basedir_seen.key?(dir)
|
|
40
|
+
if File.directory?("#{dir}/lib/review")
|
|
41
|
+
$LOAD_PATH.unshift "#{dir}/lib"
|
|
42
|
+
end
|
|
43
|
+
if File.file?("#{dir}/review-ext.rb")
|
|
44
|
+
Kernel.load File.expand_path("#{dir}/review-ext.rb")
|
|
45
|
+
end
|
|
46
|
+
@basedir_seen[dir] = true
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def initialize(basedir, parameters = Parameters.default)
|
|
50
|
+
@basedir = basedir
|
|
51
|
+
@parameters = parameters
|
|
52
|
+
@parts = nil
|
|
53
|
+
@chapter_index = nil
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
extend Forwardable
|
|
57
|
+
def_delegators '@parameters',
|
|
58
|
+
:chapter_file,
|
|
59
|
+
:part_file,
|
|
60
|
+
:bib_file,
|
|
61
|
+
:reject_file,
|
|
62
|
+
:predef_file,
|
|
63
|
+
:postdef_file,
|
|
64
|
+
:ext,
|
|
65
|
+
:image_dir,
|
|
66
|
+
:image_types,
|
|
67
|
+
:page_metric
|
|
68
|
+
|
|
69
|
+
def parts
|
|
70
|
+
@parts ||= read_parts()
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def parts_in_file
|
|
74
|
+
parts.find_all{|part| part if part.file? }
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def part(n)
|
|
78
|
+
parts.detect {|part| part.number == n }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def each_part(&block)
|
|
82
|
+
parts.each(&block)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def chapters
|
|
86
|
+
parts().map {|p| p.chapters }.flatten
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def each_chapter(&block)
|
|
90
|
+
chapters.each(&block)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def chapter_index
|
|
94
|
+
@chapter_index ||= ChapterIndex.new(chapters())
|
|
95
|
+
@chapter_index
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def chapter(id)
|
|
99
|
+
chapter_index()[id]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def volume
|
|
103
|
+
Volume.sum(chapters.map {|chap| chap.volume })
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def read_CHAPS
|
|
107
|
+
read_FILE("chapter_file")
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def read_PREDEF
|
|
111
|
+
read_FILE("predef_file")
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def read_POSTDEF
|
|
115
|
+
read_FILE("postdef_file")
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def read_PART
|
|
119
|
+
@read_PART ||= File.read("#{@basedir}/#{part_file}")
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def part_exist?
|
|
123
|
+
File.exist?("#{@basedir}/#{part_file}")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def read_bib
|
|
127
|
+
File.read("#{@basedir}/#{bib_file}")
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def bib_exist?
|
|
131
|
+
File.exist?("#{@basedir}/#{bib_file}")
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def prefaces
|
|
135
|
+
if File.file?("#{@basedir}/#{predef_file}")
|
|
136
|
+
begin
|
|
137
|
+
return mkpart_from_namelistfile("#{@basedir}/#{predef_file}")
|
|
138
|
+
rescue FileNotFound => err
|
|
139
|
+
raise FileNotFound, "preface #{err.message}"
|
|
140
|
+
end
|
|
141
|
+
else
|
|
142
|
+
mkpart_from_namelist(%w(preface))
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def postscripts
|
|
147
|
+
if File.file?("#{@basedir}/#{postdef_file}")
|
|
148
|
+
begin
|
|
149
|
+
return mkpart_from_namelistfile("#{@basedir}/#{postdef_file}")
|
|
150
|
+
rescue FileNotFound => err
|
|
151
|
+
raise FileNotFound, "postscript #{err.message}"
|
|
152
|
+
end
|
|
153
|
+
else
|
|
154
|
+
mkpart_from_namelist(%w(appendix postscript))
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def basedir
|
|
159
|
+
@basedir
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
private
|
|
163
|
+
|
|
164
|
+
def read_parts
|
|
165
|
+
list = parse_chapters
|
|
166
|
+
if pre = prefaces
|
|
167
|
+
list.unshift pre
|
|
168
|
+
end
|
|
169
|
+
if post = postscripts
|
|
170
|
+
list.push post
|
|
171
|
+
end
|
|
172
|
+
list
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def parse_chapters
|
|
176
|
+
part = 0
|
|
177
|
+
num = 0
|
|
178
|
+
chap = read_CHAPS()\
|
|
179
|
+
.strip.lines.map {|line| line.strip }.join("\n").split(/\n{2,}/)\
|
|
180
|
+
.map {|part_chunk|
|
|
181
|
+
chaps = part_chunk.split.map {|chapid|
|
|
182
|
+
Chapter.new(self, (num += 1), chapid, "#{@basedir}/#{chapid}")
|
|
183
|
+
}
|
|
184
|
+
if part_exist? && read_PART.split("\n").size >= part
|
|
185
|
+
Part.new(self, (part += 1), chaps, read_PART.split("\n")[part-1])
|
|
186
|
+
else
|
|
187
|
+
Part.new(self, (part += 1), chaps)
|
|
188
|
+
end
|
|
189
|
+
}
|
|
190
|
+
return chap
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def mkpart_from_namelistfile(path)
|
|
194
|
+
mkpart(File.read(path).split.map {|name| mkchap(name) })
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def mkpart_from_namelist(names)
|
|
198
|
+
mkpart(names.map {|n| mkchap_ifexist(n) }.compact)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def mkpart(chaps)
|
|
202
|
+
chaps.empty? ? nil : Part.new(self, nil, chaps)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def mkchap(name)
|
|
206
|
+
name += ext if File.extname(name) == ""
|
|
207
|
+
path = "#{@basedir}/#{name}"
|
|
208
|
+
raise FileNotFound, "file not exist: #{path}" unless File.file?(path)
|
|
209
|
+
Chapter.new(self, nil, name, path)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def mkchap_ifexist(id)
|
|
213
|
+
name = "#{id}#{ext()}"
|
|
214
|
+
path = "#{@basedir}/#{name}"
|
|
215
|
+
File.file?(path) ? Chapter.new(self, nil, name, path) : nil
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def read_FILE(filename)
|
|
219
|
+
res = ""
|
|
220
|
+
File.open("#{@basedir}/#{eval(filename)}") do |f|
|
|
221
|
+
while line = f.gets
|
|
222
|
+
if /\A#/ =~ line
|
|
223
|
+
next
|
|
224
|
+
end
|
|
225
|
+
line.gsub!(/#.*$/, "")
|
|
226
|
+
res << line
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
res
|
|
230
|
+
rescue Errno::ENOENT
|
|
231
|
+
Dir.glob("#{@basedir}/*#{ext()}").sort.join("\n")
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
end
|