code: def do_para(self, node):
          
          if self.pieces[-1:] == ['']:
              pieces, self.pieces = self.pieces[:-2], self.pieces[-2:-1]
          else:
              self.add_text('\n')
              pieces, self.pieces = self.pieces, ['']
          self.subnode_parse(node)
          dont_end_paragraph = self.pieces[-1:] == ['']
          # Now do the text wrapping:
          width = self.textwidth - self.indent
          wrapped_para = []
          for line in ''.join(self.pieces).splitlines():
              keep_markdown_newline = line[-2:] == '  '
              w_line = textwrap.wrap(line, width=width, break_long_words=False)
              if w_line == []:
                  w_line = ['']
              if keep_markdown_newline:
                  w_line[-1] = w_line[-1] + '  '
              for wl in w_line:
                  wrapped_para.append(wl + '\n')
          if wrapped_para:
              if wrapped_para[-1][-3:] != '  \n':
                  wrapped_para[-1] = wrapped_para[-1][:-1] + '  \n'
              if dont_end_paragraph:
                  wrapped_para.append('')
          pieces.extend(wrapped_para)
          self.pieces = pieces
docs: This is the only place where text wrapping is automatically performed.
          Generally, this function parses the node (locally), wraps the text, and
          then adds the result to self.pieces. However, it may be convenient to
          allow the previous content of self.pieces to be included in the text
          wrapping. For this, use the following *convention*:
          If self.pieces ends with '', treat the _previous_ entry as part of the
          current paragraph. Else, insert new-line and start a new paragraph
          and "wrapping context".
          Paragraphs always end with '  \n', but if the parsed content ends with
          the special symbol '', this is passed on.