/* let htlm = HtmlRichText(path="index.html") html.load let mutableRichText = MutableRichText(richText) mutableRichText.append("Hello, ") mutableRichTextInheritance RichText └── MutableRichText └── FileRichText └── HtmlRichText └── MarkdownRichText Composition RichText + HtmlRichText + MutableRichText Inheritance class Implementation: Parent() {...} Composition class Class: Behaviour1, Behavior2, Behavior3, {...} */ /* Inheritance */ class MutableRichText: RichText() { let rightTextTree = RichTextTree() let currentStyle = SpanStyle() fn append(text: String) { let node = RichTextNode(currentStyle, text) richTextTree.addNode(node) } } abstract class RichText { abstract let richTextTree: RichTextTree fn getText(): String { return richTextTree.getText() } fn getNodes(): List { return richTextTree.getNodes() } abstract fn save {} abstract fn load {} } class HtmlRichText( path: String, ): RichText() { override let: RichTextTree = RichTextTree() override fn save() { let html = getHtmlFromRichTextFile(richTextTree) val file = File(path) file.write(html) } override fn load() { val file = File(path) val htmlText = file.read() richTextTree = getRichTextTreeFromHtml(htmlText) } } class MarkdownRichText( private val path: String ): RichText() { override var richTextTree = RichTextTree() private set override fn save() { val markdown = getMarkdownFromRichTextTree(richTextTree) val file = File(path) file.write(markdown) } override fn load() { val file = File(path) val markdown = file.read() richTextTree = getRichTextTreeFromMarkdown(markdown) } }