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()
Alias for: each_label
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