1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
require "rd/version"
module RD
class Visitor
SYSTEM_NAME = "RDtool Framework -- Visitor"
SYSTEM_VERSION = "$Version: "+RD::VERSION+"$"
VERSION = Version.new_from_version_string(SYSTEM_NAME, SYSTEM_VERSION)
def Visitor.version
VERSION
end
def visit(tree)
tree.accept(self)
end
def visit_children(element)
ret = []
element.each_child do |i|
ret.push(i.accept(self))
end
ret
end
def Visitor.define_visit_Nonterminal(element_type)
eval <<-END_OF_EVAL
def visit_#{element_type.id2name}(element)
apply_to_#{element_type.id2name}(element, visit_children(element))
end
END_OF_EVAL
end
def Visitor.define_visit_Terminal(element_type)
eval <<-END_OF_EVAL
def visit_#{element_type.id2name}(element)
apply_to_#{element_type.id2name}(element)
end
END_OF_EVAL
end
define_visit_Terminal(:Include)
define_visit_Terminal(:Verbatim)
define_visit_Terminal(:MethodListItemTerm)
define_visit_Nonterminal(:DocumentElement)
define_visit_Nonterminal(:Headline)
define_visit_Nonterminal(:TextBlock)
define_visit_Nonterminal(:ItemList)
define_visit_Nonterminal(:EnumList)
define_visit_Nonterminal(:DescList)
define_visit_Nonterminal(:MethodList)
define_visit_Nonterminal(:ItemListItem)
define_visit_Nonterminal(:EnumListItem)
def visit_DescListItem(element)
term = element.term.accept(self)
apply_to_DescListItem(element, term, visit_children(element))
end
define_visit_Nonterminal(:DescListItemTerm)
def visit_MethodListItem(element)
term = element.term.accept(self)
apply_to_MethodListItem(element, term, visit_children(element))
end
define_visit_Terminal(:StringElement)
define_visit_Terminal(:Verb)
define_visit_Nonterminal(:Emphasis)
define_visit_Nonterminal(:Code)
define_visit_Nonterminal(:Var)
define_visit_Nonterminal(:Keyboard)
define_visit_Nonterminal(:Index)
define_visit_Nonterminal(:Footnote)
def visit_Reference(element)
children = visit_children(element)
begin
element.result_of_apply_method_of(self, children)
rescue NameError
apply_to_Reference(element, children)
end
end
end
end
|