From http://www.codecommit.com/blog/java/understanding-and-applying-operational-transformation
" We do however want to retain() over the remainder of the document, seeing as we don’t need to do anything else. " On Mon, Jan 9, 2012 at 12:09 AM, Torben Weis <torben.w...@gmail.com> wrote: > Hi Michael, > > I have once implemented Wave OT, so I hope I can be of some help. You > mentioned that question 1 is till open to you: > > > 1) In order to compose operations I assume they don't have to have the > same document width (how could they for successive inserts for example), > but I assume they would need to span the same line? Is that right? In > other words you wouldn't compose operations from one paragraph with > operations from another? Is the desire to compose one of the driving > reasons for the retain operation? > > If you have two ops op1 and op2 and apply to doc as follows: > > apply(op2, apply(op1, doc)) > > then (in Wave OT) is should hold that op2 covers the length of the > document apply(op1, doc), whereas op1 covers the length of the > document doc. So far so trivial. > > Two ops can either affect the same line, or they both retain the same > line, or one modifies the line while another one retains it, or ... > When it comes to composition there is IMHO no need to think about > lines, it will just be confusing, because on op might delete '<line/>' > and by doing so join two lines. > But perhaps I misunderstood your question. > > The retain operation by itself is necessary even when not composing. > You need some means to tell where you want to modify. Some OT systems > do it differently, but in Wave OT you "retain" until you hit the place > where you want to insert/delete/annotate. > > However, I see no forcing reason for Wave OT to make the last retain > reach to the end of the document. The only reason I could think of is > that this way it is easy to discover mutations which are too long > without comparing the op with the document. > > Greetings > Torben >