Class: ReVIEW::IDGXMLMaker
Instance Attribute Summary collapse
Attributes included from Loggable
#logger
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Loggable
#app_error, #debug, #error, #error!, #warn
copy_images_to_dir, h
Constructor Details
Returns a new instance of IDGXMLMaker.
29
30
31
32
33
34
35
|
# File 'lib/review/idgxmlmaker.rb', line 29
def initialize
@basedir = nil
@logger = ReVIEW.logger
@img_math = nil
@plaintext = nil
@compile_errors = nil
end
|
Instance Attribute Details
Returns the value of attribute basedir.
27
28
29
|
# File 'lib/review/idgxmlmaker.rb', line 27
def basedir
@basedir
end
|
Returns the value of attribute config.
27
28
29
|
# File 'lib/review/idgxmlmaker.rb', line 27
def config
@config
end
|
Class Method Details
.execute(*args) ⇒ Object
37
38
39
|
# File 'lib/review/idgxmlmaker.rb', line 37
def self.execute(*args)
self.new.execute(*args)
end
|
Instance Method Details
#apply_filter(xmlfile) ⇒ Object
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
# File 'lib/review/idgxmlmaker.rb', line 123
def apply_filter(xmlfile)
return unless @filter
ENV['REVIEW_FNAME'] = File.basename(xmlfile).sub(/.xml\Z/, '.re')
begin
o, e, s = Open3.capture3(@filter, stdin_data: File.read(xmlfile))
unless e.empty?
warn("filter error for #{xmlfile}: #{e}")
end
if s.success?
File.write(xmlfile, o) end
rescue StandardError => e
warn("filter error for #{xmlfile}: #{e.message}")
end
end
|
#build_body(basetmpdir, _yamlfile) ⇒ Object
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
# File 'lib/review/idgxmlmaker.rb', line 141
def build_body(basetmpdir, _yamlfile)
base_path = Pathname.new(@basedir)
@converter = ReVIEW::Converter.new(@book, ReVIEW::IDGXMLBuilder.new(img_math: @img_math))
@book.parts.each do |part|
if part.name.present?
if part.file?
build_chap(part, base_path, basetmpdir, true)
else
xmlfile = "part_#{part.number}.xml"
build_part(part, basetmpdir, xmlfile)
end
end
part.chapters.each { |chap| build_chap(chap, base_path, basetmpdir, false) }
end
end
|
#build_chap(chap, base_path, basetmpdir, ispart) ⇒ Object
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
# File 'lib/review/idgxmlmaker.rb', line 175
def build_chap(chap, base_path, basetmpdir, ispart)
filename = if ispart.present?
chap.path
else
Pathname.new(chap.path).relative_path_from(base_path).to_s
end
id = File.basename(filename).sub(/\.re\Z/, '')
if @buildonly && !@buildonly.include?(id)
warn "skip #{id}.re"
return
end
xmlfile = "#{id}.xml"
begin
@converter.convert(filename, File.join(basetmpdir, xmlfile))
apply_filter(File.join(basetmpdir, xmlfile))
rescue StandardError => e
@compile_errors = true
error "compile error in #{filename} (#{e.class})"
error e.message
end
end
|
#build_part(part, basetmpdir, xmlfile) ⇒ Object
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
# File 'lib/review/idgxmlmaker.rb', line 158
def build_part(part, basetmpdir, xmlfile)
File.open(File.join(basetmpdir, xmlfile), 'w') do |f|
title = ReVIEW::I18n.t('part', part.number)
if part.name.strip.present?
title << ReVIEW::I18n.t('chapter_postfix')
title << part.name.strip
end
f.puts '<?xml version="1.0" encoding="UTF-8"?>'
f.print '<doc xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"><title aid:pstyle="h1">'
f.print h(title)
f.print '</title><?dtp level="1" section="'
f.print h(title)
f.puts '"?></doc>'
end
apply_filter(File.join(basetmpdir, xmlfile))
end
|
#build_path ⇒ Object
67
68
69
|
# File 'lib/review/idgxmlmaker.rb', line 67
def build_path
"#{@config['bookname']}-idgxml"
end
|
#execute(*args) ⇒ Object
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/review/idgxmlmaker.rb', line 76
def execute(*args)
cmd_config, yamlfile = parse_opts(args)
error! "#{yamlfile} not found." unless File.exist?(yamlfile)
begin
@config = ReVIEW::Configure.create(maker: 'idgxmlmaker',
yamlfile: yamlfile,
config: cmd_config)
rescue ReVIEW::ConfigError => e
error! e.message
end
@img_math = ReVIEW::ImgMath.new(@config)
I18n.setup(@config['language'])
begin
generate_idgxml_files(yamlfile)
@logger.success("built #{build_path}")
rescue ApplicationError => e
raise if @config['debug']
error! e.message
end
if @config['math_format'] == 'imgmath'
@img_math.make_math_images
end
end
|
#generate_idgxml_files(yamlfile) ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
# File 'lib/review/idgxmlmaker.rb', line 105
def generate_idgxml_files(yamlfile)
@basedir = File.dirname(yamlfile)
@path = build_path
remove_old_files(@path)
Dir.mkdir(@path)
@book = ReVIEW::Book::Base.new(@basedir, config: @config)
if @table
@book.config['tableopt'] = @table
end
build_body(@path, yamlfile)
if @compile_errors
app_error 'compile error, No IDGXML file output.'
end
end
|
#parse_opts(args) ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/review/idgxmlmaker.rb', line 41
def parse_opts(args)
cmd_config = {}
opts = OptionParser.new
@table = nil
@filter = nil
@buildonly = nil
opts.banner = 'Usage: review-idgxmlmaker [options] configfile'
opts.version = ReVIEW::VERSION
opts.on('-w', '--width widthoftypepage', 'Specify the width of type page for layouting tables (mm).') { |v| @table = v }
opts.on('-f', '--filter filterprogrampath', 'Specify the filter path.') { |v| @filter = v }
opts.on('-y', '--only file1,file2,...', 'Build only specified files.') { |v| @buildonly = v.split(/\s*,\s*/).map { |m| m.strip.sub(/\.re\Z/, '') } }
opts.on('--help', 'Prints this message and quit.') do
puts opts.help
exit 0
end
opts.parse!(args)
if args.size != 1
puts opts.help
exit 0
end
[cmd_config, args[0]]
end
|
#remove_old_files(path) ⇒ Object
71
72
73
74
|
# File 'lib/review/idgxmlmaker.rb', line 71
def remove_old_files(path)
@img_math.cleanup_mathimg
FileUtils.rm_rf(path)
end
|