-
Type:
New Feature
-
Resolution: Unresolved
-
Priority:
Minor
-
Affects Version/s: None
-
Component/s: Change Tracking, Part 3 (Schema) [1.2: 1]
-
None
-
Hide
= Summary =
Proposal owner: Miklos Vajna
Proposal short name: Hierarchical tracked changes
= Rationale =
Use cases:
ODF already supports tracked changes with insert, delete and format types. An
ODF document has exactly one type of change at the same time, i.e. these
tracked changes never overlap. The proposal is to allow multiple types inside
a single tracked change, e.g. format or delete on top of insert; or format on
top of delete.Alternatives considered:
- Overlapping tracked changes would be an option, so each tracked change would
only have one type, but they could overlap. This would complicate existing
tracked change implementations which can currently expect that there is
exactly one or zero tracked change under the cursor.
- Don't allow multiple types at the same time. This has the downside that in
case a document is imported from other formats, only one of the types can be
stored on ODF save.
= Requested changes to the ODF Standard =
Text changes/additions (compared to ODF 1.4):
5.5.3 <text:changed-region> (existing section)
replace first paragraph with:
Each <text:changed-region> element contains one or two elements, of
<text:insertion>, <text:deletion>, or <text:format-change> that corresponds
to a change being tracked within the scope of the <text:tracked-changes> element that
contains the <text:changed-region> instance. If there are two elements, the first one is the inner tracked change, and the second one is the outer tracked change; whether the outer tracked change is presented to the user as one combined change that includes tracked changes adjacent in the paragraph content is implementation-dependent.Schema changes/additions:
diff --git a/src/main/resources/odf1.4/OpenDocument-v1.4-schema.rng b/src/main/resources/odf1.4/OpenDocument-v1.4-schema.rng index dc77c4f..f1de214 100644 --- a/src/main/resources/odf1.4/OpenDocument-v1.4-schema.rng +++ b/src/main/resources/odf1.4/OpenDocument-v1.4-schema.rng @@ -16607,7 +16607,24 @@ <rng:define name="text-changed-region"> <rng:element name="text:changed-region"> <rng:ref name="text-changed-region-attr"/> - <rng:ref name="text-changed-region-content"/> + <rng:choice> + <rng:ref name="text-changed-region-content-insertion"/> + <rng:group> + <rng:ref name="text-changed-region-content-deletion"/> + <rng:optional> + <rng:ref name="text-changed-region-content-insertion"/> + </rng:optional> + </rng:group> + <rng:group> + <rng:ref name="text-changed-region-content-format-change"/> + <rng:optional> + <rng:choice> + <rng:ref name="text-changed-region-content-insertion"/> + <rng:ref name="text-changed-region-content-deletion"/> + </rng:choice> + </rng:optional> + </rng:group> + </rng:choice> </rng:element> </rng:define> <rng:define name="text-changed-region-attr"> @@ -16620,21 +16637,23 @@ </rng:optional> </rng:group> </rng:define> - <rng:define name="text-changed-region-content"> - <rng:choice> - <rng:element name="text:insertion"> - <rng:ref name="office-change-info"/> - </rng:element> - <rng:element name="text:deletion"> - <rng:ref name="office-change-info"/> - <rng:zeroOrMore> - <rng:ref name="text-content"/> - </rng:zeroOrMore> - </rng:element> - <rng:element name="text:format-change"> - <rng:ref name="office-change-info"/> - </rng:element> - </rng:choice> + <rng:define name="text-changed-region-content-insertion"> + <rng:element name="text:insertion"> + <rng:ref name="office-change-info"/> + </rng:element> + </rng:define> + <rng:define name="text-changed-region-content-deletion"> + <rng:element name="text:deletion"> + <rng:ref name="office-change-info"/> + <rng:zeroOrMore> + <rng:ref name="text-content"/> + </rng:zeroOrMore> + </rng:element> + </rng:define> + <rng:define name="text-changed-region-content-format-change"> + <rng:element name="text:format-change"> + <rng:ref name="office-change-info"/> + </rng:element> </rng:define> <rng:define name="text-chapter-attlist"> <rng:interleave>
In other words, allow an optional second type "under" the existing type.
= Impacts =
Conformance:
This proposal will not add any mandatory features or behaviors.
Backwards compatibility:
This change will not impact existing ODF processors, the usage of the new
element is optional.Accessibility impact:
This change will not impact accessibility.
Interoperability:
OOXML's wordprocessingML allows the following combinations when using multiple
tracked change types: delete on insert, format on insert, format on delete;
this proposal allows roundtripping that feature in ODF. LibreOffice 25.8
implements this feature.Show= Summary = Proposal owner: Miklos Vajna Proposal short name: Hierarchical tracked changes = Rationale = Use cases: ODF already supports tracked changes with insert, delete and format types. An ODF document has exactly one type of change at the same time, i.e. these tracked changes never overlap. The proposal is to allow multiple types inside a single tracked change, e.g. format or delete on top of insert; or format on top of delete. Alternatives considered: Overlapping tracked changes would be an option, so each tracked change would only have one type, but they could overlap. This would complicate existing tracked change implementations which can currently expect that there is exactly one or zero tracked change under the cursor. Don't allow multiple types at the same time. This has the downside that in case a document is imported from other formats, only one of the types can be stored on ODF save. = Requested changes to the ODF Standard = Text changes/additions (compared to ODF 1.4): 5.5.3 <text:changed-region> (existing section) replace first paragraph with: Each <text:changed-region> element contains one or two elements, of <text:insertion>, <text:deletion>, or <text:format-change> that corresponds to a change being tracked within the scope of the <text:tracked-changes> element that contains the <text:changed-region> instance. If there are two elements, the first one is the inner tracked change, and the second one is the outer tracked change; whether the outer tracked change is presented to the user as one combined change that includes tracked changes adjacent in the paragraph content is implementation-dependent. Schema changes/additions: diff --git a/src/main/resources/odf1.4/OpenDocument-v1.4-schema.rng b/src/main/resources/odf1.4/OpenDocument-v1.4-schema.rng index dc77c4f..f1de214 100644 --- a/src/main/resources/odf1.4/OpenDocument-v1.4-schema.rng +++ b/src/main/resources/odf1.4/OpenDocument-v1.4-schema.rng @@ -16607,7 +16607,24 @@ <rng:define name= "text-changed-region" > <rng:element name= "text:changed-region" > <rng:ref name= "text-changed-region-attr" /> - <rng:ref name= "text-changed-region-content" /> + <rng:choice> + <rng:ref name= "text-changed-region-content-insertion" /> + <rng:group> + <rng:ref name= "text-changed-region-content-deletion" /> + <rng:optional> + <rng:ref name= "text-changed-region-content-insertion" /> + </rng:optional> + </rng:group> + <rng:group> + <rng:ref name= "text-changed-region-content-format-change" /> + <rng:optional> + <rng:choice> + <rng:ref name= "text-changed-region-content-insertion" /> + <rng:ref name= "text-changed-region-content-deletion" /> + </rng:choice> + </rng:optional> + </rng:group> + </rng:choice> </rng:element> </rng:define> <rng:define name= "text-changed-region-attr" > @@ -16620,21 +16637,23 @@ </rng:optional> </rng:group> </rng:define> - <rng:define name= "text-changed-region-content" > - <rng:choice> - <rng:element name= "text:insertion" > - <rng:ref name= "office-change-info" /> - </rng:element> - <rng:element name= "text:deletion" > - <rng:ref name= "office-change-info" /> - <rng:zeroOrMore> - <rng:ref name= "text-content" /> - </rng:zeroOrMore> - </rng:element> - <rng:element name= "text:format-change" > - <rng:ref name= "office-change-info" /> - </rng:element> - </rng:choice> + <rng:define name= "text-changed-region-content-insertion" > + <rng:element name= "text:insertion" > + <rng:ref name= "office-change-info" /> + </rng:element> + </rng:define> + <rng:define name= "text-changed-region-content-deletion" > + <rng:element name= "text:deletion" > + <rng:ref name= "office-change-info" /> + <rng:zeroOrMore> + <rng:ref name= "text-content" /> + </rng:zeroOrMore> + </rng:element> + </rng:define> + <rng:define name= "text-changed-region-content-format-change" > + <rng:element name= "text:format-change" > + <rng:ref name= "office-change-info" /> + </rng:element> </rng:define> <rng:define name= "text-chapter-attlist" > <rng:interleave> In other words, allow an optional second type "under" the existing type. = Impacts = Conformance: This proposal will not add any mandatory features or behaviors. Backwards compatibility: This change will not impact existing ODF processors, the usage of the new element is optional. Accessibility impact: This change will not impact accessibility. Interoperability: OOXML's wordprocessingML allows the following combinations when using multiple tracked change types: delete on insert, format on insert, format on delete; this proposal allows roundtripping that feature in ODF. LibreOffice 25.8 implements this feature. - Overlapping tracked changes would be an option, so each tracked change would