def apply_augments(self, auglist, p_elem, pset):
        """Handle substatements of augments from `auglist`.

        The augments are applied in the context of `p_elem`.  `pset`
        is a patch set containing patches that may be applicable to
        descendants.
        """
        for a in auglist:
            par = a.parent
            if p_elem.name == "choice" or a.search_one("when") is None:
                wel = p_elem
            else:
                if p_elem.interleave:
                    kw = "interleave"
                else:
                    kw = "group"
                wel = SchemaNode(kw, p_elem, interleave=p_elem.interleave)
                wel.occur = p_elem.occur
            if par.keyword == "uses":
                self.handle_substmts(a, wel, pset)
                continue
            if par.keyword == "submodule":
                mnam = par.i_including_modulename
            else:
                mnam = par.arg
            if self.prefix_stack[-1] == self.module_prefixes[mnam]:
                self.handle_substmts(a, wel, pset)
            else:
                self.prefix_stack.append(self.module_prefixes[mnam])
                self.handle_substmts(a, wel, pset)
                self.prefix_stack.pop()
Example #2
0
    def apply_augments(self, auglist, p_elem, pset):
        """Handle substatements of augments from `auglist`.

        The augments are applied in the context of `p_elem`.  `pset`
        is a patch set containing patches that may be applicable to
        descendants.
        """
        for a in auglist:
            par = a.parent
            if p_elem.name == "choice" or a.search_one("when") is None:
                wel = p_elem
            else:
                if p_elem.interleave:
                    kw = "interleave"
                else:
                    kw = "group"
                wel = SchemaNode(kw, p_elem, interleave=p_elem.interleave)
                wel.occur = p_elem.occur
            if par.keyword == "uses":
                self.handle_substmts(a, wel, pset)
                continue
            if par.keyword == "submodule":
                mnam = par.i_including_modulename
            else:
                mnam = par.arg
            if self.prefix_stack[-1] == self.module_prefixes[mnam]:
                self.handle_substmts(a, wel, pset)
            else:
                self.prefix_stack.append(self.module_prefixes[mnam])
                self.handle_substmts(a, wel, pset)
                self.prefix_stack.pop()
 def notification_stmt(self, stmt, p_elem, pset):
     notel = SchemaNode("nma:notification", self.notifications)
     notel.occur = 2
     elem = SchemaNode.element(self.qname(stmt), notel,
                               interleave=True, occur=2)
     augs, new_pset = self.process_patches(pset, stmt, elem)[1:]
     self.handle_substmts(stmt, elem, new_pset)
     self.apply_augments(augs, elem, new_pset)
Example #4
0
 def notification_stmt(self, stmt, p_elem, pset):
     notel = SchemaNode("nma:notification", self.notifications)
     notel.occur = 2
     elem = SchemaNode.element(self.qname(stmt),
                               notel,
                               interleave=True,
                               occur=2)
     augs, new_pset = self.process_patches(pset, stmt, elem)[1:]
     self.handle_substmts(stmt, elem, new_pset)
     self.apply_augments(augs, elem, new_pset)
 def rpc_stmt(self, stmt, p_elem, pset):
     rpcel = SchemaNode("nma:rpc", self.rpcs)
     r_pset = self.process_patches(pset, stmt, rpcel)[2]
     inpel = SchemaNode("nma:input", rpcel)
     elem = SchemaNode.element(self.qname(stmt), inpel, occur=2)
     augs, pset = self.process_patches(r_pset,stmt,elem,"input")[1:]
     inst = stmt.search_one("input")
     if inst:
         self.handle_substmts(inst, elem, pset)
     else:
         SchemaNode("empty", elem)
     self.apply_augments(augs, elem, pset)
     augs, pset = self.process_patches(r_pset,stmt,None,"output")[1:]
     oust = stmt.search_one("output")
     if oust or augs:
         outel = SchemaNode("nma:output", rpcel)
         outel.occur = 2
         if oust: self.handle_substmts(oust, outel, pset)
         self.apply_augments(augs, outel, pset)
     self.handle_substmts(stmt, rpcel, r_pset)
Example #6
0
 def rpc_stmt(self, stmt, p_elem, pset):
     rpcel = SchemaNode("nma:rpc", self.rpcs)
     r_pset = self.process_patches(pset, stmt, rpcel)[2]
     inpel = SchemaNode("nma:input", rpcel)
     elem = SchemaNode.element(self.qname(stmt), inpel, occur=2)
     augs, pset = self.process_patches(r_pset, stmt, elem, "input")[1:]
     inst = stmt.search_one("input")
     if inst:
         self.handle_substmts(inst, elem, pset)
     else:
         SchemaNode("empty", elem)
     self.apply_augments(augs, elem, pset)
     augs, pset = self.process_patches(r_pset, stmt, None, "output")[1:]
     oust = stmt.search_one("output")
     if oust or augs:
         outel = SchemaNode("nma:output", rpcel)
         outel.occur = 2
         if oust: self.handle_substmts(oust, outel, pset)
         self.apply_augments(augs, outel, pset)
     self.handle_substmts(stmt, rpcel, r_pset)