class ReVIEW::Builder
Constants
- CAPTION_TITLES
Attributes
ast[RW]
output[RW]
Public Class Methods
new(strict = false, *args)
click to toggle source
# File lib/review/builder.rb, line 35 def initialize(strict = false, *args) @strict = strict builder_init(*args) end
Public Instance Methods
bibpaper(lines, id, caption)
click to toggle source
# File lib/review/builder.rb, line 283 def bibpaper(lines, id, caption) buf = "" buf << bibpaper_header(id, caption) unless lines.empty? buf << "\n" buf << bibpaper_bibpaper(id, caption, lines) end buf << "\n" buf end
bind(compiler, chapter, location)
click to toggle source
# File lib/review/builder.rb, line 44 def bind(compiler, chapter, location) @compiler = compiler @chapter = chapter @location = location @ast = nil @output = StringIO.new @book = @chapter.book if @chapter.present? @tabwidth = nil if @book && @book.config && @book.config["tabwidth"] @tabwidth = @book.config["tabwidth"] end builder_init_file end
captionblock(type, lines, caption, specialstyle = nil)
click to toggle source
# File lib/review/builder.rb, line 373 def captionblock(type, lines, caption, specialstyle = nil) raise NotImplementedError end
detab(str, num = nil)
click to toggle source
override TextUtils::detab
Calls superclass method
ReVIEW::TextUtils#detab
# File lib/review/builder.rb, line 447 def detab(str, num = nil) if num super(str, num) elsif @tabwidth super(str, @tabwidth) else super(str) end end
error(msg)
click to toggle source
# File lib/review/builder.rb, line 327 def error(msg) raise ApplicationError, "error: #{msg} at #{@compiler.show_pos} \n (#{@compiler.failure_oneline})" end
extract_chapter_id(chap_ref)
click to toggle source
# File lib/review/builder.rb, line 364 def extract_chapter_id(chap_ref) m = /\A([\w+-]+)\|(.+)/.match(chap_ref) if m return [@book.chapters.detect{|chap| chap.id == m[1]}, m[2]] else return [@chapter, chap_ref] end end
get_chap(chapter = @chapter)
click to toggle source
# File lib/review/builder.rb, line 357 def get_chap(chapter = @chapter) if @book.config["secnolevel"] > 0 && !chapter.number.nil? && !chapter.number.to_s.empty? return chapter.format_number(nil) end return nil end
graph(lines, id, command, caption = nil)
click to toggle source
# File lib/review/builder.rb, line 385 def graph(lines, id, command, caption = nil) c = target_name dir = File.join(@book.basedir, @book.image_dir, c) Dir.mkdir(dir) unless File.exist?(dir) file = "#{id}.#{image_ext}" file_path = File.join(dir, file) line = self.unescape(lines.join("\n")) cmds = { :graphviz => "echo '#{line}' | dot -T#{image_ext} -o#{file_path}", :gnuplot => "echo 'set terminal " + "#{(image_ext == "eps") ? "postscript eps" : image_ext}\n" + " set output \"#{file_path}\"\n#{line}' | gnuplot", :blockdiag => "echo '#{line}' "+ "| blockdiag -a -T #{image_ext} -o #{file_path} /dev/stdin", :aafigure => "echo '#{line}' | aafigure -t#{image_ext} -o#{file_path}", } cmd = cmds[command.to_sym] warn cmd system cmd @chapter.image_index.image_finder.add_entry(file_path) image(lines, id, caption ||= "") end
handle_metric(str)
click to toggle source
# File lib/review/builder.rb, line 331 def handle_metric(str) str end
image(lines, id, caption, metric = nil)
click to toggle source
# File lib/review/builder.rb, line 118 def image(lines, id, caption, metric = nil) if @chapter.image(id).bound? image_image id, caption, metric else warn "image not bound: #{id}" if @strict image_dummy id, caption, lines end end
image_ext()
click to toggle source
# File lib/review/builder.rb, line 410 def image_ext raise NotImplementedError end
include(file_name)
click to toggle source
# File lib/review/builder.rb, line 418 def include(file_name) File.foreach(file_name) do |line| paragraph([line]) end end
inline_bou(str)
click to toggle source
# File lib/review/builder.rb, line 261 def inline_bou(str) text(str) end
inline_chap(id)
click to toggle source
# File lib/review/builder.rb, line 203 def inline_chap(id) @book.chapter_index.number(id) rescue KeyError error "unknown chapter: #{id}" nofunc_text("[UnknownChapter:#{id}]") end
inline_chapref(id)
click to toggle source
def compile_inline(s)
@compiler.text(s)
end
# File lib/review/builder.rb, line 196 def inline_chapref(id) @book.chapter_index.display_string(id) rescue KeyError error "unknown chapter: #{id}" nofunc_text("[UnknownChapter:#{id}]") end
inline_column(id)
click to toggle source
# File lib/review/builder.rb, line 302 def inline_column(id) @chapter.column(id).caption rescue error "unknown column: #{id}" nofunc_text("[UnknownColumn:#{id}]") end
inline_fn(id)
click to toggle source
# File lib/review/builder.rb, line 254 def inline_fn(id) @chapter.footnote(id).content rescue KeyError error "unknown footnote: #{id}" nofunc_text("[UnknownFootnote:#{id}]") end
inline_href(url, label = nil)
click to toggle source
# File lib/review/builder.rb, line 273 def inline_href(url, label = nil) url = url.strip label = label.strip if label compile_href(url, label) end
inline_img(id)
click to toggle source
# File lib/review/builder.rb, line 224 def inline_img(id) "#{I18n.t("image")}#{@chapter.image(id).number}" rescue KeyError error "unknown image: #{id}" nofunc_text("[UnknownImage:#{id}]") end
inline_include(file_name)
click to toggle source
# File lib/review/builder.rb, line 414 def inline_include(file_name) File.open(file_name).read end
inline_kw(word, alt = nil)
click to toggle source
# File lib/review/builder.rb, line 269 def inline_kw(word, alt = nil) compile_kw(word, alt) end
inline_list(id)
click to toggle source
# File lib/review/builder.rb, line 217 def inline_list(id) "#{I18n.t("list")}#{@chapter.list(id).number}" rescue KeyError error "unknown list: #{id}" nofunc_text("[UnknownList:#{id}]") end
inline_raw(args)
click to toggle source
# File lib/review/builder.rb, line 432 def inline_raw(args) if matched = args.match(/\|(.*?)\|(.*)/) builders = matched[1].split(/,/).map{|i| i.gsub(/\s/, '') } c = self.class.to_s.gsub(/ReVIEW::/, '').gsub(/Builder/, '').downcase if builders.include?(c) matched[2].gsub("\\n", "\n") else "" end else args.gsub("\\n", "\n") end end
inline_ruby(base, ruby)
click to toggle source
# File lib/review/builder.rb, line 265 def inline_ruby(base, ruby) compile_ruby(base, ruby) end
inline_table(id)
click to toggle source
# File lib/review/builder.rb, line 247 def inline_table(id) "#{I18n.t("table")}#{@chapter.table(id).number}" rescue KeyError error "unknown table: #{id}" nofunc_text("[UnknownTable:#{id}]") end
inline_title(id)
click to toggle source
# File lib/review/builder.rb, line 210 def inline_title(id) @book.chapter_index.title(id) rescue KeyError error "unknown chapter: #{id}" nofunc_text("[UnknownChapter:#{id}]") end
list(lines, id, caption = nil, lang = nil)
click to toggle source
# File lib/review/builder.rb, line 89 def list(lines, id, caption = nil, lang = nil) buf = "" begin buf << list_header(id, caption, lang) rescue KeyError error "no such list: #{id}" end buf << list_body(id, lines, lang) buf end
listnum(lines, id, caption = nil, lang = nil)
click to toggle source
# File lib/review/builder.rb, line 100 def listnum(lines, id, caption = nil, lang = nil) buf = "" begin buf << list_header(id, caption, lang) rescue KeyError error "no such list: #{id}" end buf << listnum_body(lines, lang) buf end
node_inline_hd(nodelist)
click to toggle source
# File lib/review/builder.rb, line 294 def node_inline_hd(nodelist) id = nodelist[0].to_raw m = /\A([^|]+)\|(.+)/.match(id) chapter = @book.chapters.detect{|chap| chap.id == m[1]} if m && m[1] return inline_hd_chap(chapter, m[2]) if chapter return inline_hd_chap(@chapter, id) end
node_inline_img(node)
click to toggle source
# File lib/review/builder.rb, line 231 def node_inline_img(node) id = node[0].to_raw inline_img(id) end
node_inline_imgref(node)
click to toggle source
# File lib/review/builder.rb, line 236 def node_inline_imgref(node) id = node[0].to_raw img = node_inline_img(node) if @chapter.image(id).caption "#{img}#{I18n.t('image_quote', @chapter.image(id).caption)}" else img end end
parse_metric(type, metric)
click to toggle source
# File lib/review/builder.rb, line 339 def parse_metric(type, metric) return "" if metric.blank? params = metric.split(/,\s*/) results = [] params.each do |p| if p =~ /\A.+?::/ if p =~ /\A#{type}::/ p.sub!(/\A#{type}::/, '') else next end end p = handle_metric(p) results.push(p) end return result_metric(results) end
post_paragraph()
click to toggle source
# File lib/review/builder.rb, line 31 def post_paragraph nil end
pre_paragraph()
click to toggle source
# File lib/review/builder.rb, line 28 def pre_paragraph nil end
print(*s)
click to toggle source
# File lib/review/builder.rb, line 69 def print(*s) raise NotImplementedError, "XXX: `print` method is obsoleted. Do not use it." end
puts(*s)
click to toggle source
# File lib/review/builder.rb, line 73 def puts(*s) raise NotImplementedError, "XXX: `puts` method is obsoleted. Do not use it." end
raw(str)
click to toggle source
# File lib/review/builder.rb, line 309 def raw(str) if matched = str.match(/\|(.*?)\|(.*)/) builders = matched[1].split(/,/).map{|i| i.gsub(/\s/, '') } c = target_name if builders.include?(c) matched[2].gsub("\\n", "\n") else "" end else str.gsub("\\n", "\n") end end
result()
click to toggle source
# File lib/review/builder.rb, line 63 def result @output.string end
Also aliased as: raw_result
result_metric(array)
click to toggle source
# File lib/review/builder.rb, line 335 def result_metric(array) array.join(',') end
source(lines, caption = nil)
click to toggle source
# File lib/review/builder.rb, line 111 def source(lines, caption = nil) buf = "" buf << source_header(caption) buf << source_body(lines, lang) buf end
table(lines, id = nil, caption = nil)
click to toggle source
# File lib/review/builder.rb, line 127 def table(lines, id = nil, caption = nil) buf = "" rows = [] sepidx = nil lines.each_with_index do |line, idx| if /\A[\=\-]{12}/ =~ line # just ignore #error "too many table separator" if sepidx sepidx ||= idx next end rows.push line.strip.split(/\t+/).map {|s| s.sub(/\A\./, '') } end rows = adjust_n_cols(rows) begin buf << table_header(id, caption) unless caption.nil? rescue KeyError error "no such table: #{id}" end return buf if rows.empty? buf << table_begin(rows.first.size) if sepidx sepidx.times do buf << tr(rows.shift.map {|s| th(s) }) end rows.each do |cols| buf << tr(cols.map {|s| td(s) }) end else rows.each do |cols| h, *cs = *cols buf << tr([th(h)] + cs.map {|s| td(s) }) end end buf << table_end buf end
target_name()
click to toggle source
# File lib/review/builder.rb, line 77 def target_name self.class.to_s.gsub(/ReVIEW::/, '').gsub(/Builder/, '').downcase end
text(str)
click to toggle source
# File lib/review/builder.rb, line 279 def text(str) str end
ul_item_begin(lines)
click to toggle source
# File lib/review/builder.rb, line 424 def ul_item_begin(lines) ul_item(lines) end
ul_item_end()
click to toggle source
# File lib/review/builder.rb, line 428 def ul_item_end "" end
warn(msg)
click to toggle source
# File lib/review/builder.rb, line 323 def warn(msg) $stderr.puts "#{@location}: warning: #{msg}" end
Private Instance Methods
adjust_n_cols(rows)
click to toggle source
# File lib/review/builder.rb, line 166 def adjust_n_cols(rows) rows.each do |cols| while cols.last and cols.last.strip.empty? cols.pop end end n_maxcols = rows.map {|cols| cols.size }.max rows.each do |cols| cols.concat [''] * (n_maxcols - cols.size) end rows end
builder_init(*args)
click to toggle source
# File lib/review/builder.rb, line 40 def builder_init(*args) end
builder_init_file()
click to toggle source
# File lib/review/builder.rb, line 58 def builder_init_file @sec_counter = SecCounter.new(5, @chapter) end
headline_prefix(level)
click to toggle source
# File lib/review/builder.rb, line 81 def headline_prefix(level) @sec_counter.inc(level) anchor = @sec_counter.anchor(level) prefix = @sec_counter.prefix(level, @book.config["secnolevel"]) [prefix, anchor] end