code: public function processHardBreak(Text $text)
      {
          $text->replace('/^[\S\<][^\n]*\n+(?!( |\t)*<)/m', function (Text $w) {
              if ($w->match('/\n{2}/') || $w->match('/  \n/')) {
                  return $w;
              }
  
              return $w->trim()->append("  \n");
          });
      }
docs: Newlines
  
  The biggest difference that GFM introduces is in the handling of line breaks.
  With SM you can hard wrap paragraphs of text and they will be combined into a single paragraph.
  We find this to be the cause of a huge number of unintentional formatting errors.
  GFM treats newlines in paragraph-like content as real line breaks, which is probably what you intended.
  
  @param Text $text