code: function(tag, line_number, offset) {
    while (!canContain(this.tip.t, tag)) {
      this.finalize(this.tip, line_number);
    }
  
    var column_number = offset + 1; // offset 0 = column 1
    var newBlock = makeBlock(tag, line_number, column_number);
    this.tip.children.push(newBlock);
    newBlock.parent = this.tip;
    this.tip = newBlock;
    return newBlock;
  }
docs: Add block of type tag as a child of the tip.  If the tip can't accept children, close and finalize it and try its parent, and so on til we find a block that can accept children.