code: def gen_table(self, inner_widths, inner_heights, outer_widths):
          
          for i, row in enumerate(self.table_data):
              # Yield the row line by line (e.g. multi-line rows).
              for line in self.gen_row_lines(row, 'row', inner_widths, inner_heights[i]):
                  yield line
              # Yield heading separator.
              if i == 0:
                  yield self.horizontal_border(None, outer_widths)
docs: Combine everything and yield every line of the entire table with borders.
  
          :param iter inner_widths: List of widths (no padding) for each column.
          :param iter inner_heights: List of heights (no padding) for each row.
          :param iter outer_widths: List of widths (with padding) for each column.
          :return: