diff --git a/__tests__/renderer-spec.tsx b/__tests__/renderer-spec.tsx index 0315847..86cccf5 100644 --- a/__tests__/renderer-spec.tsx +++ b/__tests__/renderer-spec.tsx @@ -234,7 +234,8 @@ test('should render break (br)', () => { expect( (render(

- text 1
text 2 + text 1
+ text 2

) as string).trim() ).toBe('text 1 \ntext 2'); @@ -250,8 +251,59 @@ test('should render strike (strike, s, del)', () => { ).toBe('This ~~is~~ some ~~text~~'); }); +test('should render tables', () => { + expect( + (render( + + + + + + + + + + + + + + + + + +
Header 1Header 2
Row 1 Col 1Row 1 Col 2
Row 2 Col 1Row 2 Col 2
+ ) as string).trim() + ).toBe(`\ +| Header 1 | Header 2 | +| ----------- | ----------- | +| Row 1 Col 1 | Row 1 Col 2 | +| Row 2 Col 1 | Row 2 Col 2 |\ +`); +}); + test('should render fallback as html tag', () => { expect((render(some text) as string).trim()).toBe( 'some text' ); }); + +/* + + + + + + + + + + + + + + + + + +
Header 1Header 2
Row 1 Col 1Row 1 Col 2
Row 2 Col 1Row 2 Col 2
+*/ diff --git a/src/tagHandler.ts b/src/tagHandler.ts index 5fcb880..398ad98 100644 --- a/src/tagHandler.ts +++ b/src/tagHandler.ts @@ -14,8 +14,11 @@ import { separator, strike, strong, + table, + tableCell, + tableRow, } from 'mdast-builder'; -import {render as renderToHTML} from 'preact-render-to-string'; +import { render as renderToHTML } from 'preact-render-to-string'; import { AnchorHTMLAttributes, Children as ReactChildren, @@ -199,14 +202,41 @@ export default function handleTag( } break; } - // END - Handle blockquote + // END - Handle pre.code + + // START - Handle table - all tags + case 'table': { + // TODO: Handle align + newParentASTNode = childASTNode = table(); + break; + } + + // Passthrough thead and tbody + case 'thead': + case 'tbody': { + newParentASTNode = parentASTNode; + break; + } + + // Handle table rows + case 'tr': { + newParentASTNode = childASTNode = tableRow(); + break; + } + + // Handle table values (th - for header, td - for body) + case 'th': + case 'td': { + newParentASTNode = childASTNode = tableCell(); + break; + } + // END - Handle table - all tags default: isHandled = false; break; } - if (!isHandled) { // Handle as html let htmlText = '';