This repository has been archived on 2022-08-19. You can view files and clone it, but cannot push or open issues or pull requests.
hydrogen-web/src/domain/session/room/timeline/FORMATTED.md

1.4 KiB

Ideas for formatted messages

  • Seems like a good idea to take some inspiration from Pandoc's AST. Then, much like Pandoc AST, we can turn our representation into markdown in the editor, or HTML in the view.
    • This is good for both serialization and deserialization. We can use the representation when going input -> formatted message, which would allow other, non-web platforms to rely on non-Markdown input types. We can also use it going formatted message -> display, since a frontend can then choose to use non-HTML output (GTK JS bindings?).
  • As such, we represent formatting by nesting parts (we'd have a ItalicsPart, BoldPart, etc.)
  • We keep the "inline"/"block" distinction, but only track it as a property, so that we can avoid adding block parts to elements that cannot contain blocks (headers, for instance, cannot contain blocks, but lists -- themselves blocks -- can).
  • When parsing, we may need some sort of "permanent" context: if we're parsing a header, and we are inside 3 layers of other "inline" things (italics, strikethrough, and bold, for example), and we encounter a block, that's still not valid.
    • Element seems to not care at all about the validity of what it's parsing. Do we assume the HTML is well-formatted, then?