Repository: Python-Markdown/markdown
Pull request #644 (2018-02-22 01:14:02)

Only strip spaces in tables
Strip only the space character and not things like nbsp in tables. Ref #635


Patch:
diff --git a/markdown/extensions/tables.py b/markdown/extensions/tables.py
index a48660b..b8218b0 100644
--- a/markdown/extensions/tables.py
+++ b/markdown/extensions/tables.py
@@ -44,7 +44,7 @@ class TableProcessor(BlockProcessor):
         Keep border check and separator row do avoid repeating the work.
         """
         is_table = False
-        rows = [row.strip() for row in block.split('\n')]
+        rows = [row.strip(' ') for row in block.split('\n')]
         if len(rows) > 1:
             header0 = rows[0]
             self.border = PIPE_NONE
@@ -76,13 +76,13 @@ class TableProcessor(BlockProcessor):
     def run(self, parent, blocks):
         """ Parse a table block and build table. """
         block = blocks.pop(0).split('\n')
-        header = block[0].strip()
+        header = block[0].strip(' ')
         rows = [] if len(block) < 3 else block[2:]
 
         # Get alignment of columns
         align = []
         for c in self.separator:
-            c = c.strip()
+            c = c.strip(' ')
             if c.startswith(':') and c.endswith(':'):
                 align.append('center')
             elif c.startswith(':'):
@@ -102,7 +102,7 @@ class TableProcessor(BlockProcessor):
             self._build_empty_row(tbody, align)
         else:
             for row in rows:
-                self._build_row(row.strip(), tbody, align)
+                self._build_row(row.strip(' '), tbody, align)
 
     def _build_empty_row(self, parent, align):
         """Build an empty row."""
@@ -124,7 +124,7 @@ class TableProcessor(BlockProcessor):
         for i, a in enumerate(align):
             c = etree.SubElement(tr, tag)
             try:
-                c.text = cells[i].strip()
+                c.text = cells[i].strip(' ')
             except IndexError:  # pragma: no cover
                 c.text = ""
             if a:


Test patch:
diff --git a/tests/test_syntax/extensions/__init__.py b/tests/test_syntax/extensions/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/test_syntax/extensions/test_tables.py b/tests/test_syntax/extensions/test_tables.py
new file mode 100644
index 0000000..1565324
--- /dev/null
+++ b/tests/test_syntax/extensions/test_tables.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+from markdown.test_tools import TestCase
+
+
+class TestTableBlocks(TestCase):
+
+    def test_empty_cells(self):
+        """Empty cells (nbsp)."""
+
+        text = """
+   | Second Header
+------------- | -------------
+   | Content Cell
+Content Cell  |  
+"""
+
+        self.assertMarkdownRenders(
+            text,
+            self.dedent(
+                """
+                <table>
+                <thead>
+                <tr>
+                <th> </th>
+                <th>Second Header</th>
+                </tr>
+                </thead>
+                <tbody>
+                <tr>
+                <td> </td>
+                <td>Content Cell</td>
+                </tr>
+                <tr>
+                <td>Content Cell</td>
+                <td> </td>
+                </tr>
+                </tbody>
+                </table>
+                """
+            ),
+            extensions=['tables']
+        )