def get_or_new_child(self, term, value=False, **kwargs):
pt, rt = self.split_term(term)<EOL>term = self.record_term + '<STR_LIT:.>' + rt<EOL>c = self.find_first(rt)<EOL>if c is None:<EOL><INDENT>tc = self.doc.get_term_class(term.lower())<EOL>c = tc(term, value, parent=self, doc=self.doc, section=self.section).new_children(**kwargs)<EOL>assert not c.term_is("<STR_LIT>"), (self, c)<EOL>self.children.append(c)<EOL><DEDENT>else:<EOL><INDENT>if value is not False:<EOL><INDENT>c.value = value<EOL><DEDENT>for k, v in kwargs.items():<EOL><INDENT>c.get_or_new_child(k, v)<EOL><DEDENT><DEDENT>assert self.find_first(rt)<EOL>assert self.find_first(rt) == c<EOL>return c<EOL>
Find a term, using find_first, and set it's value and properties, if it exists. If
        it does not, create a new term and children.