• 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.

          Assignee:
          Unassigned
          Reporter:
          Michael Stahl
          Votes:
          0 Vote for this issue
          Watchers:
          2 Start watching this issue

            Created:
            Updated: