@@ -563,9 +563,10 @@ static bool is_whitespace_only(const char *data, size_t len) {
563563 * spaces between block tags in pretty-printed HTML) is discarded so it does
564564 * not become empty paragraphs that later serialize as extra <br>s.
565565 */
566- static void flush_inline_p (buffer_t * ib , buffer_t * out ,
566+ static bool flush_inline_p (buffer_t * ib , buffer_t * out ,
567567 GumboElement * align_el ) {
568- if (ib -> len > 0 && !is_whitespace_only (ib -> data , ib -> len )) {
568+ bool emitted = ib -> len > 0 && !is_whitespace_only (ib -> data , ib -> len );
569+ if (emitted ) {
569570 buffer_append_str (out , "<p" );
570571 if (align_el )
571572 emit_alignment (align_el , "p" , out );
@@ -574,6 +575,7 @@ static void flush_inline_p(buffer_t *ib, buffer_t *out,
574575 buffer_append_str (out , "</p>" );
575576 }
576577 buffer_clear (ib );
578+ return emitted ;
577579}
578580
579581static void flatten_bq_children (GumboNode * node , buffer_t * ib , buffer_t * out ) {
@@ -746,12 +748,8 @@ static void walk_children(GumboNode *node, buffer_t *out) {
746748 child = children -> data [i ];
747749 if (is_br_node (child )) {
748750 /* Whitespace-only buffer is layout noise; treat like empty → <br> */
749- if (ib .len > 0 && !is_whitespace_only (ib .data , ib .len ))
750- flush_inline_p (& ib , out , NULL );
751- else {
752- buffer_clear (& ib );
751+ if (!flush_inline_p (& ib , out , NULL ))
753752 buffer_append_str (out , "<br>" );
754- }
755753 i ++ ;
756754 continue ;
757755 }
0 commit comments