Add some initial thoughts on the implementation.
This commit is contained in:
parent
71d0124146
commit
ad868818c7
1 changed files with 19 additions and 0 deletions
19
src/domain/session/room/timeline/FORMATTED.md
Normal file
19
src/domain/session/room/timeline/FORMATTED.md
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Ideas for formatted messages
|
||||||
|
|
||||||
|
* Seems like a good idea to take some
|
||||||
|
inspiration from [Pandoc's AST](https://hackage.haskell.org/package/pandoc-types-1.22/docs/Text-Pandoc-Definition.html#t:Block).
|
||||||
|
Then, much like Pandoc AST, we can turn our representation into
|
||||||
|
markdown in the editor, or HTML in the view.
|
||||||
|
* 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?
|
Reference in a new issue