# File lib/review/book/base.rb, line 43 def self.clear_rubyenv @basedir_seen = {} end
# File lib/review/book/base.rb, line 24 def self.load(dir = ".") update_rubyenv dir new(dir) end
# File lib/review/book/base.rb, line 19 def self.load_default warn 'Book::Base.load_default() is obsoleted. Use Book::Base.load().' load() end
# File lib/review/book/base.rb, line 47 def initialize(basedir) @basedir = basedir @parts = nil @chapter_index = nil @config = ReVIEW::Configure.values @catalog = nil @read_part = nil end
# File lib/review/book/base.rb, line 31 def self.update_rubyenv(dir) return if @basedir_seen.key?(dir) if File.file?("#{dir}/review-ext.rb") if ENV["REVIEW_SAFE_MODE"].to_i & 2 > 0 warn "review-ext.rb is prohibited in safe mode. ignored." else Kernel.load File.expand_path("#{dir}/review-ext.rb") end end @basedir_seen[dir] = true end
# File lib/review/book/base.rb, line 277 def appendix if catalog names = catalog.appendix.split("\n") chaps = names.each_with_index.map {|n, idx| mkchap_ifexist(n, idx) }.compact return mkpart(chaps) end if File.file?("#{@basedir}/#{config["postdef_file"]}") begin return mkpart_from_namelistfile("#{@basedir}/#{config["postdef_file"]}") rescue FileNotFound => err raise FileNotFound, "postscript #{err.message}" end end end
# File lib/review/book/base.rb, line 301 def basedir @basedir end
# File lib/review/book/base.rb, line 259 def bib_exist? File.exist?("#{@basedir}/#{bib_file}") end
# File lib/review/book/base.rb, line 56 def bib_file config["bib_file"] end
# File lib/review/book/base.rb, line 190 def catalog return @catalog if @catalog.present? catalogfile_path = "#{basedir}/#{config["catalogfile"]}" if File.file? catalogfile_path @catalog = File.open(catalogfile_path){|f| Catalog.new(f) } end @catalog end
# File lib/review/book/base.rb, line 201 def catalog=(catalog) @catalog = catalog end
# File lib/review/book/base.rb, line 153 def chapter(id) chapter_index()[id] end
# File lib/review/book/base.rb, line 141 def chapter_index return @chapter_index if @chapter_index contents = chapters() parts().each do |prt| if prt.id.present? contents << prt end end @chapter_index = ChapterIndex.new(contents) end
# File lib/review/book/base.rb, line 129 def chapters parts().map {|p| p.chapters }.flatten end
# File lib/review/book/base.rb, line 181 def config @config ||= Configure.values end
# File lib/review/book/base.rb, line 120 def contents # TODO: includes predef, appendix, postdef if parts.present? chapters + parts else chapters end end
# File lib/review/book/base.rb, line 133 def each_chapter(&block) chapters.each(&block) end
# File lib/review/book/base.rb, line 137 def each_chapter_r(&block) chapters.reverse_each(&block) end
# File lib/review/book/base.rb, line 116 def each_part(&block) parts.each(&block) end
# File lib/review/book/base.rb, line 64 def ext config["ext"] end
# File lib/review/book/base.rb, line 90 def htmlversion if config["htmlversion"].blank? nil else config["htmlversion"].to_i end end
# File lib/review/book/base.rb, line 68 def image_dir config["image_dir"] end
# File lib/review/book/base.rb, line 72 def image_types config["image_types"] end
# File lib/review/book/base.rb, line 76 def image_types=(types) config["image_types"] = types end
# File lib/review/book/base.rb, line 185 def load_config(filename) new_conf = YAML.load_file(filename) @config.merge!(new_conf) end
# File lib/review/book/base.rb, line 157 def next_chapter(chapter) finded = false each_chapter do |c| return c if finded finded = true if c == chapter end nil # not found end
# File lib/review/book/base.rb, line 80 def page_metric if config["page_metric"].respond_to?(:downcase) && config["page_metric"].upcase =~ /^[A-Z0-9_]+$/ ReVIEW::Book::PageMetric.const_get(config["page_metric"].upcase) elsif config["page_metric"].kind_of?(Array) && config["page_metric"].size == 5 ReVIEW::Book::PageMetric.new(*config["page_metric"]) else config["page_metric"] end end
# File lib/review/book/base.rb, line 112 def part(n) parts.detect {|part| part.number == n } end
# File lib/review/book/base.rb, line 247 def part_exist? if catalog catalog.parts.present? else File.exist?("#{@basedir}/#{config["part_file"]}") end end
# File lib/review/book/base.rb, line 98 def parts @parts ||= read_parts() end
# File lib/review/book/base.rb, line 102 def parts=(parts) @parts = parts end
# File lib/review/book/base.rb, line 106 def parts_in_file parts.find_all{|part| part if part.present? and part.file? } end
# File lib/review/book/base.rb, line 295 def postscripts if catalog mkpart_from_namelist(catalog.postdef.split("\n")) end end
# File lib/review/book/base.rb, line 263 def prefaces if catalog return mkpart_from_namelist(catalog.predef.split("\n")) end if File.file?("#{@basedir}/#{config["predef_file"]}") begin return mkpart_from_namelistfile("#{@basedir}/#{config["predef_file"]}") rescue FileNotFound => err raise FileNotFound, "preface #{err.message}" end end end
# File lib/review/book/base.rb, line 166 def prev_chapter(chapter) finded = false each_chapter_r do |c| return c if finded finded = true if c == chapter end nil # not found end
# File lib/review/book/base.rb, line 221 def read_APPENDIX if catalog catalog.appendix else read_FILE(config["postdef_file"]) # for backward compatibility end end
# File lib/review/book/base.rb, line 205 def read_CHAPS if catalog catalog.chaps else read_FILE(config["chapter_file"]) end end
# File lib/review/book/base.rb, line 237 def read_PART return @read_part if @read_part if catalog @read_part = catalog.parts else @read_part = File.read("#{@basedir}/#{config["part_file"]}") end end
# File lib/review/book/base.rb, line 229 def read_POSTDEF if catalog catalog.postdef else "" end end
# File lib/review/book/base.rb, line 213 def read_PREDEF if catalog catalog.predef else read_FILE(config["predef_file"]) end end
# File lib/review/book/base.rb, line 255 def read_bib File.read("#{@basedir}/#{bib_file}") end
# File lib/review/book/base.rb, line 60 def reject_file config["reject_file"] end
# File lib/review/book/base.rb, line 175 def volume vol = Volume.sum(chapters.map {|chap| chap.volume }) vol.page_per_kbyte = page_metric.page_per_kbyte vol end
# File lib/review/book/base.rb, line 382 def mkchap(name, number = nil) name += ext if File.extname(name) == "" path = "#{@basedir}/#{name}" raise FileNotFound, "file not exist: #{path}" unless File.file?(path) Chapter.new(self, number, name, path) end
# File lib/review/book/base.rb, line 389 def mkchap_ifexist(name, idx = nil) name += ext if File.extname(name) == "" path = "#{@basedir}/#{name}" if File.file?(path) idx += 1 if idx Chapter.new(self, idx, name, path) end end
# File lib/review/book/base.rb, line 378 def mkpart(chaps) chaps.empty? ? nil : Part.new(self, nil, chaps) end
# File lib/review/book/base.rb, line 374 def mkpart_from_namelist(names) mkpart(names.map {|n| mkchap_ifexist(n) }.compact) end
# File lib/review/book/base.rb, line 362 def mkpart_from_namelistfile(path) chaps = [] File.read(path, :mode => 'r:BOM|utf-8').split.each_with_index do |name, idx| if path =~ /PREDEF/ chaps << mkchap(name) else chaps << mkchap(name, idx + 1) end end mkpart(chaps) end
return Array of Part, not Chapter
# File lib/review/book/base.rb, line 323 def parse_chapters part = 0 num = 0 if catalog return catalog.parts_with_chaps.map do |entry| if entry.is_a? Hash chaps = entry.values.first.map do |chap| chap = Chapter.new(self, (num += 1), chap, "#{@basedir}/#{chap}") chap end Part.new(self, (part += 1), chaps, read_PART.split("\n")[part - 1]) else chap = Chapter.new(self, (num += 1), entry, "#{@basedir}/#{entry}") if chap.number num = chap.number else num -= 1 end Part.new(self, nil, [chap]) end end end chap = read_CHAPS() .strip.lines.map {|line| line.strip }.join("\n").split(/\n{2,}/) .map {|part_chunk| chaps = part_chunk.split.map {|chapid| Chapter.new(self, (num += 1), chapid, "#{@basedir}/#{chapid}") } if part_exist? && read_PART.split("\n").size > part Part.new(self, (part += 1), chaps, read_PART.split("\n")[part-1]) else Part.new(self, nil, chaps) end } return chap end
# File lib/review/book/base.rb, line 398 def read_FILE(filename) res = "" File.open("#{@basedir}/#{filename}", 'r:BOM|utf-8') do |f| while line = f.gets if /\A#/ =~ line next end line.gsub!(/#.*$/, "") res << line end end res rescue Errno::ENOENT Dir.glob("#{@basedir}/*#{ext()}").sort.join("\n") rescue Errno::EISDIR "" end
# File lib/review/book/base.rb, line 307 def read_parts list = parse_chapters if pre = prefaces list.unshift pre end if app = appendix list.push app end if post = postscripts list.push post end list end