class RD::ReferenceResolver
Attributes
label_prefix[R]
labels[R]
rbl_suite[R]
Public Class Methods
new(tree, prefix = "label:")
click to toggle source
# File lib/rd/reference-resolver.rb, line 15 def initialize(tree, prefix = "label:") init_labels(tree) @label_prefix = prefix @rbl_suite = RBLSuite.new(tree.include_path) end
Public Instance Methods
each_label() { |i| ... }
click to toggle source
# File lib/rd/reference-resolver.rb, line 43 def each_label tmp = [] labels.each_value do |i| i.each do |j| tmp.push(j) end end tmp.sort{|i,j| i[1] <=> j[1]}.each do |i| yield(i[0]) end end
Also aliased as: each
get_anchor(element)
click to toggle source
# File lib/rd/reference-resolver.rb, line 88 def get_anchor(element) if num = get_label_num(element) num2anchor(num) end end
get_label_num(element)
click to toggle source
# File lib/rd/reference-resolver.rb, line 82 def get_label_num(element) entry = labels[element.to_label].find{|i| i[0] == element } return nil unless entry entry[1] end
label2str(label)
click to toggle source
# File lib/rd/reference-resolver.rb, line 99 def label2str(label) case label when String label when Element, Reference::RDLabel label.to_label else raise ArgumentError, "can't extract Label from #{label}." end end
make_rbl_file(filename)
click to toggle source
# File lib/rd/reference-resolver.rb, line 110 def make_rbl_file(filename) RBLFile.create_rbl_file(filename, self) end
refer(label)
click to toggle source
# File lib/rd/reference-resolver.rb, line 67 def refer(label) matched = labels[label2str(label)] return nil unless matched num2anchor(matched[0][1]) end
refer_element(label)
click to toggle source
# File lib/rd/reference-resolver.rb, line 73 def refer_element(label) labels.fetch(label2str(label), []).collect{|i| i[0] } end
refer_external_file(label)
click to toggle source
# File lib/rd/reference-resolver.rb, line 77 def refer_external_file(label) label = label.label if label.is_a? Reference rbl_suite.refer(label.element_label, label.filename) end
referent_of_label(label)
click to toggle source
# File lib/rd/reference-resolver.rb, line 56 def referent_of_label(label) label = label.label if label.is_a? Reference if label.filename refer_external_file(label) else anchor = refer(label) return nil unless anchor [nil, anchor] end end
Private Instance Methods
init_labels(tree)
click to toggle source
# File lib/rd/reference-resolver.rb, line 21 def init_labels(tree) @labels = {} ary = (tree.find_all do |i| i.is_a? LabeledElement end) num = 0 ary.each do |i| push_to_labels(i.to_label, [i, num]) num += 1 end end
num2anchor(num)
click to toggle source
# File lib/rd/reference-resolver.rb, line 94 def num2anchor(num) label_prefix + num.to_s end
push_to_labels(key, value)
click to toggle source
# File lib/rd/reference-resolver.rb, line 34 def push_to_labels(key, value) if labels[key] labels[key].push(value) else labels[key] = [value] end end