Bubble [main]

Comments should not contain multi-linebreaks; bumped version to 9.12

e12e07f6e75c46a151567cb049991408b4f57ca9
diff --git a/50_bubble.py b/50_bubble.py
index 5744087..4a74389 100644
--- a/50_bubble.py
+++ b/50_bubble.py
@@ -18,7 +18,7 @@ from utils import *
 from worker import *
 
 
-__version__ = '9.11'
+__version__ = '9.12'
 
 
 class Bubble:
diff --git a/feeds.py b/feeds.py
index 318d205..ef71b9a 100644
--- a/feeds.py
+++ b/feeds.py
@@ -613,7 +613,7 @@ def make_post_page(session, post):
                 src = f'=> /u/{cmt.poster_name}/{cmt.id} {cmt.poster_avatar} {cmt.poster_name}{cmt_flair} · {comment_age}:\n'
             else:
                 src = f'=> /u/{cmt.poster_name} {cmt.poster_avatar} {cmt.poster_name}{cmt_flair} · {comment_age}:\n'
-            comment_body = session.render_post(cmt)
+            comment_body = strip_multibreaks(session.render_post(cmt))
             src += comment_body
 
             # Commit references.
diff --git a/utils.py b/utils.py
index 56224ba..f0933f6 100644
--- a/utils.py
+++ b/utils.py
@@ -224,6 +224,23 @@ def prefix_links(src, prefix):
     return '\n'.join(lines)
 
 
+def strip_multibreaks(src):
+    lines = []
+    pre = False
+    last_was_break = False
+    for line in src.split('\n'):
+        if line.startswith('```'):
+            pre = not pre
+            is_break = False
+        elif not pre:
+            is_break = len(line.strip()) == 0
+            if is_break and last_was_break:
+                continue
+            last_was_break = is_break
+        lines.append(line)
+    return '\n'.join(lines)
+
+
 def strip_invalid(src):
     return src.replace('\x00', '').replace('\r', '')