// -*- c -*- // // $Id: tree_builder.moc,v 1.3 2001/01/06 17:05:34 kmacleod Exp $ // #include @namespace itr urn:to-be-determined typedef id TreeBuilder; @class TreeBuilder(Node) @namespace xmlns http://www.w3.org/2000/xmlns/ @new() { self = Node__new(NULL, 0); self->isa_ = &TreeBuilder_isa_; @self.stack = List__new(NULL, 0); return self; } @.itr:node_type { return TreeBuilderType; } @start_document(id document) { id stack = @self.stack; @stack.push(document); } @end_document(id document) { id stack = @self.stack; @stack.pop(document); return document; } @start_element(id element) { id stack = @self.stack; id parent = List_ati_i(stack, -1); id parent_contents = @parent.contents; @parent_contents.push(element); @stack.push(element); } @end_element(id element) { id stack = @self.stack; @stack.pop(); } @characters(id chars) { id stack = @self.stack; id parent = List_ati_i(stack, -1); id parent_contents = @parent.contents; @parent_contents.push(chars); } @comment(id comment) { id stack = @self.stack; id parent = List_ati_i(stack, -1); id parent_contents = @parent.contents; @parent_contents.push(comment); } @processing_instruction(id pi) { id stack = @self.stack; id parent = List_ati_i(stack, -1); id parent_contents = @parent.contents; @parent_contents.push(pi); }