From: Tomas Frydrych (tomas@frydrych.uklinux.net)
Date: Sat May 18 2002 - 06:59:07 EDT
After thinking some more about what David said, I suggest we 
introduce a single new attribute called revision which would look 
something like
    <[token, e.g., c] revision="-1;+2;-5;">some text</c>
This would mean that this particular segment of text was marked 
for deleting in revision 1, put back in revision 2, untouched in 
revisions 3 and 4, and removed again in revision 5. This is how we 
would handle the display for a particular revision level cases:
case A: user chooses revision explicitly mentioned in the attribute
    a) revision 1: hide this segment of text
    b) revision 2: display this segment of text
case B: user chooses revision not mentioned in the attribute, e.g. 
revision 4
    We find the highest revision id lower than the id requested, in
    this case 2, and use it instead; we display the text. If the
    smallest revision id found is > 2, we will use implicit revision
    0, with a sign opposite of that of the smalles id we found (see
    an example below).
To answer David's concern about changing a single letter within a 
continuous <c> ... </> span: this does not pose a problem, since 
by changing the attributes of a single letter, the letter will 
automatically be enclosed in its own <c> </> container on export.
To our list of view types (Normal, Print, Web), we will add a new 
view Revision. In the non-Revision views the text of all revisions will 
be displayed (using different colours, etc.), and the user will be 
able to use commands Tools->Revisions->Accept Change and 
Tools->Revisions->Reject Change, which will deal with revisions on 
individual basis or within current selection.
In the special Revision view, the user will be able to see how the 
document as a whole looks after a particular revision, plus will have 
commands Tools->Revisions->Accept Current State of Document, 
which will allow him/her to accept all the changes that resulted in 
the document as s/he is viewing it, and Tools->Revisions->Accept 
Current Revision, which would allow him/her to accept all the 
changes made by the present revision. The former command will 
be very useful for document management, from experience I can 
say that document that contains several layers of revisions is very 
unreadable; Accept Current State of Document will make it 
possible to remove old revisions that are no more needed.
These two commands should probably request an explicit 
confirmation before proceeding, because utlimately in the Revision 
view the user will not see what changes were made, only what the 
final result looks like.
The Accept Current State of Document command would work like 
this, say this is a segment of our document:
    < revision="-1;+2;-5">text1</>
    < revision="+1;-2">text2></>
    < revision="+5">text3</>
    < revision="+2">text4</>
    < revision="-1;+5">text5</>
and the user is viewing revision 2:
Any text in which 2 is the highest revision id present will be treated 
according to that revision, i.e., text2 will be hidden, text4 will be 
shown. Upon Accept Current State of Document, the fragment 
text2 will be deleted from the PT, while fragment text4 will have the 
revision attribute removed, i.e., it will become an ordinary text.
Any text in which 2 is present but is not the highest id would also 
be shown using the id 2 attribute, i.e., text1 would be shown, but 
on Accept Current State of Document the fragment would not be 
deleted, instead all the id's <=2 would be removed from its 
attribute, i.e, we would get in the PT for text1:
    < revision="-5">text1</>
Any text in which revision 2 is absent will be treated according to 
the highest id < 2 present, i.e., text5 will be hidden and text 3, with 
an implicit revision -0, will also be hidden. Upon Accept Current 
State of Document all revision ids smaller than 2 will be removed 
from the fragment, so that we will get in PT
    < revision="+5">text3</>
    < revision="+5">text5</>
Consequently the document above in revision 2 will look
    text1 text4
and the PT after the Accept Current State of Document command 
would contain
    < revision="-5">text1</>
    < revision="+5">text3</>
    text4
    < revision="+5">text5</>
The Accept Current Revision command would work anologously to 
the Accept Current State of Document, except it would only 
remove the specific revision id, in our case 2, and delete only 
fragments that have no other revision than -2. So the PT after 
Accept Current Revision would look like
    < revision="-1;-5">text1</>
    < revision="+1">text2></>
    < revision="+5">text3</>
    text4
    < revision="-1;+5">text5</>
As David suggested, we will add a new preference to issue warning 
when saving a document that contains revisions and annotations.
We will also need an extra document attribute indicating which 
view should be used to display the document when first loaded, we 
should have this in any case so that if the document is saved in 
normal view it opens in normal view the next time (same goes for 
zoom factor). If the document is to be shown in Revision view, the 
attribute will also carry with it the particular revision id to use. There 
should be some very clear indication to the user what view is 
currently selected, and if appropriate, which revision ID.
Tomas
This archive was generated by hypermail 2.1.4 : Sat May 18 2002 - 07:07:59 EDT