Files
markdown-parser/src/commonMain/kotlin/nl/astraeus/markdown/parser/Markdown.kt

99 lines
1.8 KiB
Kotlin

package nl.astraeus.markdown.parser
data class ListItem(
val text: String,
val order: Int,
val indentation: Int = 0
)
data class CheckboxItem(
val line: Int,
val checked: Boolean,
val text: String,
val indentation: Int = 0
)
sealed class MarkdownPart {
data object NewLine : MarkdownPart()
data object PageBreak : MarkdownPart()
sealed class ParagraphPart {
data class Text(
val text: String
) : ParagraphPart()
data object LineBreak : ParagraphPart()
data class Link(
val url: String,
val label: String? = null,
val title: String? = null,
) : ParagraphPart()
data class Image(
val alt: String,
val src: String,
val url: String? = null,
) : ParagraphPart()
data class Bold(
val text: String
) : ParagraphPart()
data class Italic(
val text: String
) : ParagraphPart()
class BoldItalic(
val text: String
) : ParagraphPart()
class StrikeThrough(
val text: String
) : ParagraphPart()
class InlineCode(
val text: String
) : ParagraphPart()
data class IndentedCode(
val code: String
) : ParagraphPart()
}
data class Paragraph(
val parts: List<ParagraphPart>
) : MarkdownPart()
data class Header(
val text: String,
val size: Int
) : MarkdownPart()
data class UnorderedList(
val lines: List<ListItem>,
) : MarkdownPart()
data class CheckboxList(
val lines: List<CheckboxItem>,
) : MarkdownPart()
data class OrderedList(
val lines: List<ListItem>,
) : MarkdownPart()
data class CodeBlock(
val text: String,
val language: String
) : MarkdownPart()
data class Table(
val headers: List<String>,
val rows: List<List<String>>,
) : MarkdownPart()
class Ruler() : MarkdownPart()
}