class ReVIEW::WEBMaker
Attributes
basedir[RW]
config[RW]
Public Class Methods
execute(*args)
click to toggle source
# File lib/review/webmaker.rb, line 32 def self.execute(*args) self.new.execute(*args) end
new()
click to toggle source
# File lib/review/webmaker.rb, line 28 def initialize @basedir = nil end
Public Instance Methods
build_body(basetmpdir, yamlfile)
click to toggle source
# File lib/review/webmaker.rb, line 102 def build_body(basetmpdir, yamlfile) base_path = Pathname.new(@basedir) builder = ReVIEW::HTMLBuilder.new @converter = ReVIEW::Converter.new(@book, builder) @book.parts.each do |part| htmlfile = nil 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 if part.name.strip.present? end end part.chapters.each do |chap| build_chap(chap, base_path, basetmpdir, false) end end end
build_chap(chap, base_path, basetmpdir, ispart)
click to toggle source
# File lib/review/webmaker.rb, line 151 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 = filename.sub(/\.re\Z/, "") htmlfile = "#{id}.#{@config["htmlext"]}" if @config["params"].present? warn "'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.message end end
build_indexpage(basetmpdir)
click to toggle source
# File lib/review/webmaker.rb, line 230 def build_indexpage(basetmpdir) File.open("#{basetmpdir}/index.html", "w") do |f| if @config["coverimage"] file = File.join(@config["imagedir"], @config["coverimage"]) @body = <<-EOT <div id="cover-image" class="cover-image"> <img src="#{file}" class="max"/> </div> EOT else @body = "" end @language = @config['language'] @stylesheets = @config["stylesheet"] @toc = ReVIEW::WEBTOCPrinter.book_to_string(@book) @next = @book.chapters[0] @next_title = @next ? @next.title : "" tmplfile = File.expand_path(template_name, ReVIEW::Template::TEMPLATE_DIR) tmpl = ReVIEW::Template.load(tmplfile) f.write tmpl.result(binding) end end
build_part(part, basetmpdir, htmlfile)
click to toggle source
# File lib/review/webmaker.rb, line 125 def build_part(part, basetmpdir, htmlfile) File.open("#{basetmpdir}/#{htmlfile}", "w") do |f| @body = "" @body << "<div class=\"part\">\n" @body << "<h1 class=\"part-number\">#{ReVIEW::I18n.t("part", part.number)}</h1>\n" if part.name.strip.present? @body << "<h2 class=\"part-title\">#{part.name.strip}</h2>\n" end @body << "</div>\n" @language = @config['language'] @stylesheets = @config["stylesheet"] tmplfile = File.expand_path(template_name, ReVIEW::Template::TEMPLATE_DIR) tmpl = ReVIEW::Template.load(tmplfile) f.write tmpl.result(binding) end end
build_path()
click to toggle source
# File lib/review/webmaker.rb, line 59 def build_path @config["docroot"] || "webroot" end
build_titlepage(basetmpdir, htmlfile)
click to toggle source
# File lib/review/webmaker.rb, line 253 def build_titlepage(basetmpdir, htmlfile) File.open("#{basetmpdir}/#{htmlfile}", "w") do |f| @body = "" @body << "<div class=\"titlepage\">" @body << "<h1 class=\"tp-title\">#{CGI.escapeHTML(@config["booktitle"])}</h1>" if @config["aut"] @body << "<h2 class=\"tp-author\">#{join_with_separator(@config["aut"], ReVIEW::I18n.t("names_splitter"))}</h2>" end if @config["prt"] @body << "<h3 class=\"tp-publisher\">#{join_with_separator(@config["prt"], ReVIEW::I18n.t("names_splitter"))}</h3>" end @body << "</div>" @language = @config['language'] @stylesheets = @config["stylesheet"] tmplfile = File.expand_path(template_name, ReVIEW::Template::TEMPLATE_DIR) tmpl = ReVIEW::Template.load(tmplfile) f.write tmpl.result(binding) end end
copy_backmatter(basetmpdir)
click to toggle source
# File lib/review/webmaker.rb, line 274 def copy_backmatter(basetmpdir) copy_file_with_param("profile") copy_file_with_param("advfile") if @config["colophon"] && @config["colophon"].kind_of?(String) copy_file_with_param("colophon", "colophon.#{@config["htmlext"]}") end copy_file_with_param("backcover") end
copy_file_with_param(name, target_file = nil)
click to toggle source
# File lib/review/webmaker.rb, line 283 def copy_file_with_param(name, target_file = nil) if @config[name] && File.exist?(@config[name]) target_file ||= File.basename(@config[name]) FileUtils.cp(@config[name], File.join(basetmpdir, target_file)) end end
copy_frontmatter(basetmpdir)
click to toggle source
# File lib/review/webmaker.rb, line 215 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)
click to toggle source
# File lib/review/webmaker.rb, line 175 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)
click to toggle source
# File lib/review/webmaker.rb, line 182 def copy_resources(resdir, destdir, allow_exts=nil) if !resdir || !File.exist?(resdir) return nil end allow_exts = @config["image_ext"] if allow_exts.nil? FileUtils.mkdir_p(destdir) recursive_copy_files(resdir, destdir, allow_exts) end
copy_stylesheet(basetmpdir)
click to toggle source
# File lib/review/webmaker.rb, line 207 def copy_stylesheet(basetmpdir) if @config["stylesheet"].size > 0 @config["stylesheet"].each do |sfile| FileUtils.cp(sfile, basetmpdir) end end end
execute(*args)
click to toggle source
# File lib/review/webmaker.rb, line 68 def execute(*args) @config = ReVIEW::Configure.values @config.maker = "webmaker" cmd_config, yamlfile = parse_opts(args) @config.merge!(YAML.load_file(yamlfile)) # YAML configs will be overridden by command line options. @config.merge!(cmd_config) @config["htmlext"] = "html" I18n.setup(@config["language"]) generate_html_files(yamlfile) end
generate_html_files(yamlfile)
click to toggle source
# File lib/review/webmaker.rb, line 81 def generate_html_files(yamlfile) @basedir = File.dirname(yamlfile) @path = build_path() remove_old_files(@path) Dir.mkdir(@path) @book = ReVIEW::Book.load(@basedir) @book.config = @config copy_stylesheet(@path) copy_frontmatter(@path) build_body(@path, yamlfile) copy_backmatter(@path) 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)
click to toggle source
# File lib/review/webmaker.rb, line 290 def join_with_separator(value, sep) if value.kind_of? Array value.join(sep) else value end end
parse_opts(args)
click to toggle source
# File lib/review/webmaker.rb, line 36 def parse_opts(args) cmd_config = {} opts = OptionParser.new opts.banner = "Usage: review-webmaker 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.') do cmd_config["ignore-errors"] = true end opts.parse!(args) if args.size != 1 puts opts.help exit 0 end return cmd_config, args[0] end
recursive_copy_files(resdir, destdir, allow_exts)
click to toggle source
# File lib/review/webmaker.rb, line 191 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) else if fname =~ /\.(#{allow_exts.join("|")})\Z/i FileUtils.mkdir_p(destdir) FileUtils.cp("#{resdir}/#{fname}", destdir) end end end end end
remove_old_files(path)
click to toggle source
# File lib/review/webmaker.rb, line 63 def remove_old_files(path) FileUtils.rm_rf(path) end
template_name()
click to toggle source
# File lib/review/webmaker.rb, line 143 def template_name if @config["htmlversion"].to_i == 5 'web/html/layout-html5.html.erb' else 'web/html/layout-xhtml1.html.erb' end end