mikepenz / multiplatform-markdown-renderer

Markdown renderer for Kotlin Multiplatform Projects (Android, iOS, Desktop), using Compose.
https://mikepenz.github.io/multiplatform-markdown-renderer/
Apache License 2.0
429 stars 27 forks source link

Tables and dividers don't render properly #99

Open kenyee opened 10 months ago

kenyee commented 10 months ago

About this issue

This doesn't seem to render hrules/divider or tables properly..otherwise, it works great!

Example markdown:

--------------------------------------------------------------------------
A/B Test Cells (All) number is percentage of crashes with user in test cell:
----------------------------------------------------------------------------

|Test ID|Cell|% users|
|-------|----|-------
| 55977 | 6 | 15% |
| 55085 | 4 | 14% |
| 56835 | 10 | 13% |
| 57360 | 9 | 12% |

The hrule/divider makes the text within get rendered at a very large size. And the table doesn't show up:

Screenshot 2024-01-05 at 10 28 56 AM

I checked the IntelliJ library that this library uses and it appears to support tables so I'm guessing this library doesn't handle them? If so, it should be documented in the Readme.md.

Details

Checklist

mikepenz commented 10 months ago

Thank you very much for the report @kenyee

You can find all current handled node types here: https://github.com/mikepenz/multiplatform-markdown-renderer/blob/develop/multiplatform-markdown-renderer/src/commonMain/kotlin/com/mikepenz/markdown/compose/Markdown.kt#L86-L106

And yes you are correct, tables are currently not yet handled. It is however possible to implement a custom component which adds support for these.

That said, I am happy to review contributions adding proper table support to the library!


Related the hrule/divider. yes the divider on top is not shown, however the line below the text would make it a header. Which based on your screenshot looks correct. See the markdown example below:

h1

h2


A/B Test Cells (All) number is percentage of crashes with user in test cell:

salah-8 commented 1 month ago

@mikepenz I don't see a table node type in the markdown library. Can you explain more how would someone implement a custom component for it?

mikepenz commented 1 month ago

@salah-8 you can handle custom unhandled types supported from the kotlin markdown library. See the code here: https://github.com/mikepenz/multiplatform-markdown-renderer/blob/develop/multiplatform-markdown-renderer/src/commonMain/kotlin/com/mikepenz/markdown/compose/Markdown.kt#L108C40-L108C41

https://github.com/mikepenz/multiplatform-markdown-renderer/blob/4c2fedb26b38b4fda3d6c4f3db4bac9454e389e6/multiplatform-markdown-renderer/src/commonMain/kotlin/com/mikepenz/markdown/compose/components/MarkdownComponents.kt#L54

salah-8 commented 1 month ago

@mikepenz But I couldn't find a "table" type in the Kotlin markdown library in the first place to handle it here.

mikepenz commented 1 month ago

These might only be in the GFM flavored spec: https://github.com/JetBrains/markdown/blob/master/src/commonMain/kotlin/org/intellij/markdown/flavours/gfm/GFMElementTypes.kt#L32-L38