OpenDocument - Adv Document Collab SC

How it runs today: Generic CT (GCT) proposal text:p/text:h andac:change

  • 1.  How it runs today: Generic CT (GCT) proposal text:p/text:h andac:change

    Posted 04-02-2011 11:44
    So after a bit of hacking away on this, I now have a few examples and some test suite cases for ac:change. I thought I'd expand one here for the benefit of the group and possible future implementers. I have an example with a paragraph which undergoes the following style changes in sequential revisions. The following defines the sequence, in that the number in the brackets defines the change-id and the style that is applied in that change. So in revision 2 I changed the format from normal to plain text. (1) normal (2) plain text (3) heading 1 (4) normal (5) heading 1 (6) heading 2 (7) heading 3 (8) plain text (9) normal. Each of the "heading..." styles has an outline-level > 0 and will produce a text:h XML element in the ODF. The normal and plain text styles will produce a text:p XML element. Thus some interleaving is required between those elements. When this document is written as ODT+GCT (Generic CT) the paragraph comes out similar to what is defined below. Obviously I've formatted the XML a little for readability. Hopefully everybody gets a semi-readable copy. FWIW the read path collects this XML fragment and creates a state in abiword which has the same revision information as was originally expressed in the above immediate mode change list (1-9). Round trips are fun, right? On the implementation front, depending on how the IO paths are implemented, one has to maintain change tracking state when a delta:remove-leaving-content-start/text:[ph] path is seen and merge it with the next bald text:[ph] XML element. There is also the consideration that each time the current state (text:style-name) has to be merged with the ac:changeX list with a shuffling to go from tracking changes made to expressing what state to change things into in a given revision. By this I mean that the ODT+GCT has the attribute ac:change2="6,modify,style,Heading 1" which has to be used in conjunction with other information to record that in revision 5 Heading 1 style was applied, in rev 6 heading 2 was applied. The ODT+GCT: <delta:remove-leaving-content-start delta:removal-change-idref="2" delta:end-element-idref="ee1"> <text:p text:style-name="Plain-Text" ac:change1="1,insert,style," ac:change2="2,modify,style,Normal"/> </delta:remove-leaving-content-start> <delta:remove-leaving-content-start delta:removal-change-idref="3" delta:end-element-idref="ee2"> <text:h text:style-name="Heading-1" text:outline-level="1" ac:change1="3,insert,style,"/> </delta:remove-leaving-content-start> <delta:remove-leaving-content-start delta:removal-change-idref="4" delta:end-element-idref="ee3"> <text:p text:style-name="Normal" ac:change1="4,insert,style,"/> </delta:remove-leaving-content-start> <delta:remove-leaving-content-start delta:removal-change-idref="7" delta:end-element-idref="ee4"> <text:h text:style-name="Heading-3" text:outline-level="3" ac:change1="5,insert,style," ac:change2="6,modify,style,Heading 1" ac:change3="7,modify,style,Heading 2"/> </delta:remove-leaving-content-start> <text:p text:style-name="Normal" ac:change1="8,insert,style," ac:change2="9,modify,style,Plain Text" delta:insertion-type="insert-with-content" delta:insertion-change-idref="9"> <delta:inserted-text-start delta:inserted-text-id="1"/> This is the test paragraph.<delta:inserted-text-end delta:inserted-text-idref="1"/> </text:p> <delta:remove-leaving-content-end delta:end-element-id="ee4"/> <delta:remove-leaving-content-end delta:end-element-id="ee3"/> <delta:remove-leaving-content-end delta:end-element-id="ee2"/> <delta:remove-leaving-content-end delta:end-element-id="ee1"/>