diff --git a/markdownify/__init__.py b/markdownify/__init__.py
index ac53077..3e84739 100644
--- a/markdownify/__init__.py
+++ b/markdownify/__init__.py
@@ -367,8 +367,8 @@ def _convert_hn(self, n, el, text, convert_as_inline):
text = all_whitespace_re.sub(' ', text)
hashes = '#' * n
if style == ATX_CLOSED:
- return '\n%s %s %s\n\n' % (hashes, text, hashes)
- return '\n%s %s\n\n' % (hashes, text)
+ return '\n\n%s %s %s\n\n' % (hashes, text, hashes)
+ return '\n\n%s %s\n\n' % (hashes, text)
def convert_hr(self, el, text, convert_as_inline):
return '\n\n---\n\n'
diff --git a/tests/test_conversions.py b/tests/test_conversions.py
index cc5ebc7..ba8fcd8 100644
--- a/tests/test_conversions.py
+++ b/tests/test_conversions.py
@@ -127,12 +127,12 @@ def test_em():
def test_header_with_space():
- assert md('
\n\nHello
') == '\n### Hello\n\n'
- assert md('Hello\n\n\nWorld
') == '\n### Hello World\n\n'
- assert md('\n\nHello
') == '\n#### Hello\n\n'
- assert md('\n\nHello
') == '\n##### Hello\n\n'
- assert md('\n\nHello\n\n
') == '\n##### Hello\n\n'
- assert md('\n\nHello \n\n
') == '\n##### Hello\n\n'
+ assert md('\n\nHello
') == '\n\n### Hello\n\n'
+ assert md('Hello\n\n\nWorld
') == '\n\n### Hello World\n\n'
+ assert md('\n\nHello
') == '\n\n#### Hello\n\n'
+ assert md('\n\nHello
') == '\n\n##### Hello\n\n'
+ assert md('\n\nHello\n\n
') == '\n\n##### Hello\n\n'
+ assert md('\n\nHello \n\n
') == '\n\n##### Hello\n\n'
def test_h1():
@@ -144,24 +144,24 @@ def test_h2():
def test_hn():
- assert md('Hello
') == '\n### Hello\n\n'
- assert md('Hello
') == '\n#### Hello\n\n'
- assert md('Hello
') == '\n##### Hello\n\n'
- assert md('Hello
') == '\n###### Hello\n\n'
+ assert md('Hello
') == '\n\n### Hello\n\n'
+ assert md('Hello
') == '\n\n#### Hello\n\n'
+ assert md('Hello
') == '\n\n##### Hello\n\n'
+ assert md('Hello
') == '\n\n###### Hello\n\n'
assert md('Hello') == md('Hello
')
assert md('Hello') == md('Hello')
def test_hn_chained():
- assert md('First
\nSecond
\nThird
', heading_style=ATX) == '\n# First\n\n## Second\n\n### Third\n\n'
- assert md('XFirst
', heading_style=ATX) == 'X\n# First\n\n'
- assert md('XFirst
', heading_style=ATX_CLOSED) == 'X\n# First #\n\n'
+ assert md('First
\nSecond
\nThird
', heading_style=ATX) == '\n\n# First\n\n## Second\n\n### Third\n\n'
+ assert md('XFirst
', heading_style=ATX) == 'X\n\n# First\n\n'
+ assert md('XFirst
', heading_style=ATX_CLOSED) == 'X\n\n# First #\n\n'
assert md('XFirst
') == 'X\n\nFirst\n=====\n\n'
def test_hn_nested_tag_heading_style():
- assert md('A
P
C ', heading_style=ATX_CLOSED) == '\n# A P C #\n\n'
- assert md('A
P
C ', heading_style=ATX) == '\n# A P C\n\n'
+ assert md('A
P
C ', heading_style=ATX_CLOSED) == '\n\n# A P C #\n\n'
+ assert md('A
P
C ', heading_style=ATX) == '\n\n# A P C\n\n'
def test_hn_nested_simple_tag():
@@ -177,9 +177,9 @@ def test_hn_nested_simple_tag():
]
for tag, markdown in tag_to_markdown:
- assert md('A <' + tag + '>' + tag + '' + tag + '> B
') == '\n### A ' + markdown + ' B\n\n'
+ assert md('A <' + tag + '>' + tag + '' + tag + '> B
') == '\n\n### A ' + markdown + ' B\n\n'
- assert md('A
B
', heading_style=ATX) == '\n### A B\n\n'
+ assert md('A
B
', heading_style=ATX) == '\n\n### A B\n\n'
# Nested lists not supported
# assert md('A
', heading_style=ATX) == '\n### A li1 li2 B\n\n'
@@ -192,18 +192,23 @@ def test_hn_nested_img():
("alt='Alt Text' title='Optional title'", "Alt Text", " \"Optional title\""),
]
for image_attributes, markdown, title in image_attributes_to_markdown:
- assert md('A
B
') == '\n### A' + (' ' + markdown + ' ' if markdown else ' ') + 'B\n\n'
- assert md('A
B
', keep_inline_images_in=['h3']) == '\n### A  B\n\n'
+ assert md('A
B
') == '\n\n### A' + (' ' + markdown + ' ' if markdown else ' ') + 'B\n\n'
+ assert md('A
B
', keep_inline_images_in=['h3']) == '\n\n### A  B\n\n'
def test_hn_atx_headings():
- assert md('Hello
', heading_style=ATX) == '\n# Hello\n\n'
- assert md('Hello
', heading_style=ATX) == '\n## Hello\n\n'
+ assert md('Hello
', heading_style=ATX) == '\n\n# Hello\n\n'
+ assert md('Hello
', heading_style=ATX) == '\n\n## Hello\n\n'
def test_hn_atx_closed_headings():
- assert md('Hello
', heading_style=ATX_CLOSED) == '\n# Hello #\n\n'
- assert md('Hello
', heading_style=ATX_CLOSED) == '\n## Hello ##\n\n'
+ assert md('Hello
', heading_style=ATX_CLOSED) == '\n\n# Hello #\n\n'
+ assert md('Hello
', heading_style=ATX_CLOSED) == '\n\n## Hello ##\n\n'
+
+
+def test_hn_newlines():
+ assert md("H1-1
TEXTH2-2
TEXTH1-2
TEXT", heading_style=ATX) == '\n\n# H1-1\n\nTEXT\n\n## H2-2\n\nTEXT\n\n# H1-2\n\nTEXT'
+ assert md('H1-1
\nTEXT
\nH2-2
\nTEXT
\nH1-2
\nTEXT
', heading_style=ATX) == '\n\n# H1-1\n\nTEXT\n\n## H2-2\n\nTEXT\n\n# H1-2\n\nTEXT\n\n'
def test_head():