99import com .vladsch .flexmark .ast .Link ;
1010import com .vladsch .flexmark .ast .OrderedListItem ;
1111import com .vladsch .flexmark .ast .Paragraph ;
12+ import com .vladsch .flexmark .ext .tables .TableBlock ;
13+ import com .vladsch .flexmark .ext .tables .TableCell ;
14+ import com .vladsch .flexmark .ext .tables .TableHead ;
15+ import com .vladsch .flexmark .ext .tables .TableRow ;
1216import com .vladsch .flexmark .html .HtmlWriter ;
1317import com .vladsch .flexmark .html .renderer .NodeRenderer ;
1418import com .vladsch .flexmark .html .renderer .NodeRendererContext ;
@@ -28,10 +32,49 @@ public Set<NodeRenderingHandler<?>> getNodeRenderingHandlers() {
2832 new NodeRenderingHandler <>(CodeBlock .class , this ::renderCodeBlock ),
2933 new NodeRenderingHandler <>(BulletListItem .class , this ::renderBulletListItem ),
3034 new NodeRenderingHandler <>(Heading .class , this ::renderHeading ),
31- new NodeRenderingHandler <>(OrderedListItem .class , this ::renderOrderedListItem )
35+ new NodeRenderingHandler <>(OrderedListItem .class , this ::renderOrderedListItem ),
36+ new NodeRenderingHandler <>(TableBlock .class , this ::renderTable ),
37+ new NodeRenderingHandler <>(TableRow .class , this ::renderTableRow ),
38+ new NodeRenderingHandler <>(TableCell .class , this ::renderTableCell )
3239 );
3340 }
3441
42+ private void renderTable (TableBlock node , NodeRendererContext context , HtmlWriter html ) {
43+ var borderColor = ColorUtil .toHex (new JBColor (0xD0D0D0 , 0x3C3F47 ));
44+ html .attr ("style" ,
45+ "border-collapse: collapse; width: 100%; margin: 8px 0; border-top: 1px solid "
46+ + borderColor );
47+ context .delegateRender ();
48+ }
49+
50+ private void renderTableRow (TableRow node , NodeRendererContext context , HtmlWriter html ) {
51+ html .attr ("style" ,
52+ "border-bottom: 1px solid " + ColorUtil .toHex (new JBColor (0xE3E3E3 , 0x2D2F35 )) + ";" );
53+ context .delegateRender ();
54+ }
55+
56+ private void renderTableCell (TableCell node , NodeRendererContext context , HtmlWriter html ) {
57+ TableRow row = (TableRow ) node .getParent ();
58+ var isHeaderCell = row != null && row .getParent () instanceof TableHead ;
59+ var tag = isHeaderCell ? "th" : "td" ;
60+
61+ var styleBuilder = new StringBuilder ();
62+ styleBuilder .append ("padding: 8px 12px; text-align: left; vertical-align: middle;" );
63+
64+ if (isHeaderCell ) {
65+ var bgColor = ColorUtil .toHex (new JBColor (0xF2F3F5 , 0x3A3D41 ));
66+ styleBuilder .append (" font-weight: 600; background-color: " ).append (bgColor ).append ("; color: white; min-width: 200px;" );
67+ }
68+
69+ html .attr ("style" , styleBuilder .toString ().trim ());
70+ if (isHeaderCell ) {
71+ html .attr ("scope" , "col" );
72+ }
73+ html .withAttr ().tag (tag );
74+ context .renderChildren (node );
75+ html .tag ("/" + tag );
76+ }
77+
3578 private void renderCodeBlock (CodeBlock node , NodeRendererContext context , HtmlWriter html ) {
3679 html .attr ("style" , "white-space: pre-wrap;" );
3780 context .delegateRender ();
0 commit comments