code: def write_dl(self, rows, col_max=30, col_spacing=2):
          
          rows = list(rows)
          widths = measure_table(rows)
          if len(widths) != 2:
              raise TypeError('Expected two columns for definition list')
  
          first_col = min(widths[0], col_max) + col_spacing
  
          for first, second in iter_rows(rows, len(widths)):
              self.write('%*s%s' % (self.current_indent, '', first))
              if not second:
                  self.write('\n')
                  continue
              if term_len(first) <= first_col - col_spacing:
                  self.write(' ' * (first_col - term_len(first)))
              else:
                  self.write('\n')
                  self.write(' ' * (first_col + self.current_indent))
  
              text_width = max(self.width - first_col - 2, 10)
              lines = iter(wrap_text(second, text_width).splitlines())
              if lines:
                  self.write(next(lines) + '\n')
                  for line in lines:
                      self.write('%*s%s\n' % (
                          first_col + self.current_indent, '', line))
              else:
                  self.write('\n')
docs: Writes a definition list into the buffer.  This is how options
          and commands are usually formatted.
  
          :param rows: a list of two item tuples for the terms and values.
          :param col_max: the maximum width of the first column.
          :param col_spacing: the number of spaces between the first and
                              second column.