About rich text support using JSON, i think Joseph Gentle may know the
answer, see:
https://github.com/share/ShareJS/issues/1

@Joseph can you comment on this?


On Tue, Jul 8, 2014 at 11:30 PM, Kythyria <kythy...@gmail.com> wrote:

> On 07/08/14 12:42, Thomas Wrobel wrote:
>
>> Thats really cool work.
>> Seems to work slickly, and theres mobile library code already.
>>
>> Someone needs to make a ven diagram of various communication techs and
>> their features. As I understand it this has the functionality of the wave
>> protocol except for the federation right?
>>
>> Just a random thought, but seeing as theres occasionally calls for the
>> Wave
>> code base to be scrapped and recreated (faster/better/stronger/neater...)
>> would it make sense to build a new WFP out of this, rather then trying to
>> wrangle the existing code into shape?  Or is that a crazy idea?
>>
>
> It looks JSON-shaped, which Wave's data model may or may not be compatible
> with. There'd certainly need to be a lot of wrangling to get them to line
> up!
>
> I haven't been able to figure out a way to represent rich text in a system
> such as OP's that can only do JSON. Storing annotations separately means
> the system has to know how to change them in response to operations that
> affect the indexes used, while interleaving that information with the text
> appears to require a split-string-in-list operation.
>
> For the first option, if we have:
> { text: "foo barrow baz", annotations: [] }
>
> and Alice wants to make "row" bold, she might insert into the annotation
> list:
> list-insert(annotations[0], {range: [7,10], key: "font-weight", value:
> "bold"})
>
> at the same time as Bob sends another change:
> string-insert(text[7], "ton")
>
> Then a system not aware of the relationship between text and annotations
> will end up with:
> { text: "foo bartonrow baz", annotations: {range: [7,10], key:
> "font-weight", value: "bold"}}
>
> (ie, "row" isn't emboldened)
>
> When the expected result would presumably be:
> { text: "foo bartonrow baz", annotations: {range: [7,13], key:
> "font-weight", value: "bold"}}
>
> to account for the extra three characters.
>
> For the second option, split-string-in-list, that initial state might be:
> { text: ["foo barrow", " baz"]}
>
> Alice's change, without split-string-in-list, would be:
> list-delete(text[0])
> list-insert(text[0], "foo ")
> list-insert(text[1], { key: "font-weight", value: "bold" })
> list-insert(text[2], "barrow")
> list-insert(text[3], { key: "font-weight", value: nil})
>
> And Bob's would be:
> string-insert(text[0][7], "ton")
>
> An unaware engine might either drop Bob's change on the floor, or put it
> in the wrong place:
> { text: [
>     "foo ton",
>     { key: "font-weight", value: "bold" },
>     "barrow",
>     { key: "font-weight", value: nil}
> ]}
>
> That said, there *are* designs for lists/strings that give identifiers
> stable under this sort of thing, but the one I've seen[1] has its own set
> of issues, like not being able to execute housekeeping operations while any
> participants are disconnected!
>
> [1] http://arxiv.org/abs/0710.1784
>

Reply via email to