Class: ReVIEW::WEBMaker
- Includes:
- ERB::Util, MakerHelper
- Defined in:
- lib/review/webmaker.rb
Instance Attribute Summary collapse
-
#basedir ⇒ Object
Returns the value of attribute basedir.
-
#config ⇒ Object
Returns the value of attribute config.
Class Method Summary collapse
Instance Method Summary collapse
- #build_body(basetmpdir, _yamlfile) ⇒ Object
- #build_chap(chap, base_path, basetmpdir, ispart) ⇒ Object
- #build_indexpage(basetmpdir) ⇒ Object
- #build_part(part, basetmpdir, htmlfile) ⇒ Object
- #build_path ⇒ Object
- #build_titlepage(basetmpdir, htmlfile) ⇒ Object
- #copy_backmatter(_basetmpdir) ⇒ Object
- #copy_file_with_param(name, target_file = nil) ⇒ Object
- #copy_frontmatter(basetmpdir) ⇒ Object
- #copy_images(resdir, destdir) ⇒ Object
- #copy_resources(resdir, destdir, allow_exts = nil) ⇒ Object
- #copy_stylesheet(basetmpdir) ⇒ Object
- #error(msg) ⇒ Object
- #execute(*args) ⇒ Object
- #generate_html_files(yamlfile) ⇒ Object
-
#initialize ⇒ WEBMaker
constructor
A new instance of WEBMaker.
- #join_with_separator(value, sep) ⇒ Object
- #parse_opts(args) ⇒ Object
- #recursive_copy_files(resdir, destdir, allow_exts) ⇒ Object
- #remove_old_files(path) ⇒ Object
- #template_name ⇒ Object
- #warn(msg) ⇒ Object
Methods included from MakerHelper
Constructor Details
#initialize ⇒ WEBMaker
Returns a new instance of WEBMaker.
32 33 34 35 36 |
# File 'lib/review/webmaker.rb', line 32 def initialize @basedir = nil @logger = ReVIEW.logger @img_math = nil end |
Instance Attribute Details
#basedir ⇒ Object
Returns the value of attribute basedir.
30 31 32 |
# File 'lib/review/webmaker.rb', line 30 def basedir @basedir end |
#config ⇒ Object
Returns the value of attribute config.
30 31 32 |
# File 'lib/review/webmaker.rb', line 30 def config @config end |
Class Method Details
.execute(*args) ⇒ Object
47 48 49 |
# File 'lib/review/webmaker.rb', line 47 def self.execute(*args) self.new.execute(*args) end |
Instance Method Details
#build_body(basetmpdir, _yamlfile) ⇒ Object
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/review/webmaker.rb', line 130 def build_body(basetmpdir, _yamlfile) base_path = Pathname.new(@basedir) @book.parts.each do |part| if part.name.present? if part.file? build_chap(part, base_path, basetmpdir, true) else htmlfile = "part_#{part.number}.#{@config['htmlext']}" build_part(part, basetmpdir, htmlfile) # title = ReVIEW::I18n.t('part', part.number) # title += ReVIEW::I18n.t('chapter_postfix') + part.name.strip unless part.name.strip.empty? end end part.chapters.each { |chap| build_chap(chap, base_path, basetmpdir, false) } end end |
#build_chap(chap, base_path, basetmpdir, ispart) ⇒ Object
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/review/webmaker.rb', line 171 def build_chap(chap, base_path, basetmpdir, ispart) filename = '' if ispart.present? filename = chap.path else filename = 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 htmlfile = "#{id}.#{@config['htmlext']}" if @config['params'].present? warn %Q('params:' in config.yml is obsoleted.) end begin @converter.convert(filename, File.join(basetmpdir, htmlfile)) rescue => e warn "compile error in #{filename} (#{e.class})" warn e. end end |
#build_indexpage(basetmpdir) ⇒ Object
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 |
# File 'lib/review/webmaker.rb', line 254 def build_indexpage(basetmpdir) @title = h('index') File.open("#{basetmpdir}/index.html", 'w') do |f| if @config['coverimage'] file = File.join(@config['imagedir'], @config['coverimage']) @body = " <div id=\"cover-image\" class=\"cover-image\">\n<img src=\"\#{file}\" class=\"max\"/>\n </div>\n EOT\n else\n @body = ''\n end\n @language = @config['language']\n @stylesheets = @config['stylesheet']\n @toc = ReVIEW::WEBTOCPrinter.book_to_string(@book)\n @next = @book.chapters[0]\n @next_title = @next ? @next.title : ''\n f.write ReVIEW::Template.generate(path: template_name, binding: binding)\n end\nend\n" |
#build_part(part, basetmpdir, htmlfile) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/review/webmaker.rb', line 148 def build_part(part, basetmpdir, htmlfile) @title = h("#{ReVIEW::I18n.t('part', part.number)} #{part.name.strip}") File.open("#{basetmpdir}/#{htmlfile}", 'w') do |f| @body = '' @body << %Q(<div class="part">\n) @body << %Q(<h1 class="part-number">#{ReVIEW::I18n.t('part', part.number)}</h1>\n) @body << %Q(<h2 class="part-title">#{part.name.strip}</h2>\n) if part.name.strip.present? @body << "</div>\n" @language = @config['language'] @stylesheets = @config['stylesheet'] f.write ReVIEW::Template.generate(path: template_name, binding: binding) end end |
#build_path ⇒ Object
74 75 76 |
# File 'lib/review/webmaker.rb', line 74 def build_path @config['docroot'] || 'webroot' end |
#build_titlepage(basetmpdir, htmlfile) ⇒ Object
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 |
# File 'lib/review/webmaker.rb', line 276 def build_titlepage(basetmpdir, htmlfile) @title = h('titlepage') File.open("#{basetmpdir}/#{htmlfile}", 'w') do |f| @body = '' @body << %Q(<div class="titlepage">) @body << %Q(<h1 class="tp-title">#{h(@config.name_of('booktitle'))}</h1>) if @config['aut'] @body << %Q(<h2 class="tp-author">#{join_with_separator(@config.names_of('aut'), ReVIEW::I18n.t('names_splitter'))}</h2>) end if @config['pbl'] @body << %Q(<h3 class="tp-publisher">#{join_with_separator(@config.names_of('pbl'), ReVIEW::I18n.t('names_splitter'))}</h3>) end @body << '</div>' @language = @config['language'] @stylesheets = @config['stylesheet'] f.write ReVIEW::Template.generate(path: template_name, binding: binding) end end |
#copy_backmatter(_basetmpdir) ⇒ Object
296 297 298 299 300 301 302 303 |
# File 'lib/review/webmaker.rb', line 296 def copy_backmatter(_basetmpdir) copy_file_with_param('profile') copy_file_with_param('advfile') if @config['colophon'] && @config['colophon'].is_a?(String) copy_file_with_param('colophon', "colophon.#{@config['htmlext']}") end copy_file_with_param('backcover') end |
#copy_file_with_param(name, target_file = nil) ⇒ Object
305 306 307 308 309 310 |
# File 'lib/review/webmaker.rb', line 305 def copy_file_with_param(name, target_file = nil) return if @config[name].nil? || !File.exist?(@config[name]) target_file ||= File.basename(@config[name]) FileUtils.cp(@config[name], File.join(@path, target_file)) end |
#copy_frontmatter(basetmpdir) ⇒ Object
239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
# File 'lib/review/webmaker.rb', line 239 def copy_frontmatter(basetmpdir) build_indexpage(basetmpdir) if @config['titlepage'] if @config['titlefile'] FileUtils.cp(@config['titlefile'], "#{basetmpdir}/titlepage.#{@config['htmlext']}") else build_titlepage(basetmpdir, "titlepage.#{@config['htmlext']}") end end copy_file_with_param('creditfile') copy_file_with_param('originaltitlefile') end |
#copy_images(resdir, destdir) ⇒ Object
200 201 202 203 204 205 206 |
# File 'lib/review/webmaker.rb', line 200 def copy_images(resdir, destdir) return nil unless File.exist?(resdir) allow_exts = @config['image_ext'] FileUtils.mkdir_p(destdir) recursive_copy_files(resdir, destdir, allow_exts) end |
#copy_resources(resdir, destdir, allow_exts = nil) ⇒ Object
208 209 210 211 212 213 214 |
# File 'lib/review/webmaker.rb', line 208 def copy_resources(resdir, destdir, allow_exts = nil) return nil if !resdir || !File.exist?(resdir) allow_exts ||= @config['image_ext'] FileUtils.mkdir_p(destdir) recursive_copy_files(resdir, destdir, allow_exts) end |
#copy_stylesheet(basetmpdir) ⇒ Object
231 232 233 234 235 236 237 |
# File 'lib/review/webmaker.rb', line 231 def copy_stylesheet(basetmpdir) if @config['stylesheet'].size > 0 @config['stylesheet'].each do |sfile| FileUtils.cp(sfile, basetmpdir) end end end |
#error(msg) ⇒ Object
38 39 40 41 |
# File 'lib/review/webmaker.rb', line 38 def error(msg) @logger.error msg exit 1 end |
#execute(*args) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/review/webmaker.rb', line 83 def execute(*args) cmd_config, yamlfile = parse_opts(args) error "#{yamlfile} not found." unless File.exist?(yamlfile) @config = ReVIEW::Configure.create(maker: 'webmaker', yamlfile: yamlfile, config: cmd_config) @config['htmlext'] = 'html' @img_math = ReVIEW::ImgMath.new(@config) I18n.setup(@config['language']) begin generate_html_files(yamlfile) @logger.success("built #{build_path}") rescue ApplicationError => e raise if @config['debug'] error(e.) end end |
#generate_html_files(yamlfile) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/review/webmaker.rb', line 105 def generate_html_files(yamlfile) @basedir = File.dirname(yamlfile) @path = build_path remove_old_files(@path) Dir.mkdir(@path) @book = ReVIEW::Book::Base.new(@basedir, config: @config) @converter = ReVIEW::Converter.new(@book, ReVIEW::HTMLBuilder.new(img_math: @img_math)) copy_stylesheet(@path) copy_frontmatter(@path) build_body(@path, yamlfile) copy_backmatter(@path) if @config['math_format'] == 'imgmath' @img_math.make_math_images end copy_images(@config['imagedir'], "#{@path}/#{@config['imagedir']}") copy_resources('covers', "#{@path}/#{@config['imagedir']}") copy_resources('adv', "#{@path}/#{@config['imagedir']}") copy_resources(@config['fontdir'], "#{@path}/fonts", @config['font_ext']) end |
#join_with_separator(value, sep) ⇒ Object
312 313 314 315 316 317 318 |
# File 'lib/review/webmaker.rb', line 312 def join_with_separator(value, sep) if value.is_a?(Array) value.join(sep) else value end end |
#parse_opts(args) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/review/webmaker.rb', line 51 def parse_opts(args) cmd_config = {} opts = OptionParser.new @buildonly = nil opts. = 'Usage: review-webmaker [option] configfile' opts.version = ReVIEW::VERSION opts.on('--help', 'Prints this message and quit.') do puts opts.help exit 0 end opts.on('--ignore-errors', 'Ignore review-compile errors.') { cmd_config['ignore-errors'] = true } opts.on('-y', '--only file1,file2,...', 'Build only specified files.') { |v| @buildonly = v.split(/\s*,\s*/).map { |m| m.strip.sub(/\.re\Z/, '') } } opts.parse!(args) if args.size != 1 puts opts.help exit 0 end [cmd_config, args[0]] end |
#recursive_copy_files(resdir, destdir, allow_exts) ⇒ Object
216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
# File 'lib/review/webmaker.rb', line 216 def recursive_copy_files(resdir, destdir, allow_exts) Dir.open(resdir) do |dir| dir.each do |fname| next if fname.start_with?('.') if FileTest.directory?("#{resdir}/#{fname}") recursive_copy_files("#{resdir}/#{fname}", "#{destdir}/#{fname}", allow_exts) elsif fname =~ /\.(#{allow_exts.join('|')})\Z/i FileUtils.mkdir_p(destdir) FileUtils.cp("#{resdir}/#{fname}", destdir) end end end end |
#remove_old_files(path) ⇒ Object
78 79 80 81 |
# File 'lib/review/webmaker.rb', line 78 def remove_old_files(path) @img_math.cleanup_mathimg FileUtils.rm_rf(path) end |
#template_name ⇒ Object
163 164 165 166 167 168 169 |
# File 'lib/review/webmaker.rb', line 163 def template_name if @config['htmlversion'].to_i == 5 'web/html/layout-html5.html.erb' else 'web/html/layout-xhtml1.html.erb' end end |
#warn(msg) ⇒ Object
43 44 45 |
# File 'lib/review/webmaker.rb', line 43 def warn(msg) @logger.warn msg end |