Uploaded image for project: 'OASIS Open Document Format for Office Applications (OpenDocument) TC'
  1. OASIS Open Document Format for Office Applications (OpenDocument) TC
  2. OFFICE-4110

19.179 draw:handle-position has wrong parameter order in case of polar handle-position

    XMLWordPrintable

    Details

    • Proposal:
      Hide

      (Francis, shema changes are at the end)

       
      Following:

      10.6.3 <draw:handle>
      The <draw:handle> element represents a single interaction handle for a drawing shape

      Enter:

      It is either an XY-handle or a polar-handle If a draw:handle-position-x 19.nn1 attribute together with a draw:handle-position-y 19.nn2 attribute is present, it is an XY-handle. If a draw:handle-polar-pole-x 19.nn3 attribute together with a draw:handle-polar-pole-y 19.nn4 attribute is present, it is a polar-handle. Exactly one of these two pairs shall exist.

      The position of an XY-handle is specified in Cartesian coordinates. The x-coordinate is specified by the draw:handle-position-x attribute, the y-coordinate is specified by the draw:handle-position-y attribute.

      The position of a polar-handle is specified as tuple of radius and polar angle in a polar coordinate system. The draw:handle-polar-pole-x attribute specifies the x-coordinate and the draw:handle-polar-pole-y attribute specifies the y-coordinate of the pole of the polar coordinate system. The draw:handle-polar-radius 19.nn5 attribute specifies the radius and the draw:handle-polar-angle 19.nn6 attribute defines the polar angle of the position of the polar-handle.

      The polar axis of the polar coordinate system points horizontally from the pole to the right. The polar angle is measured clockwise from the polar axis.

      Note: The y-axis in the enhanced geometry of a custom shape points down. Therefore the measurement is clockwise and not counter-clockwise.

      Parameters in the values of the draw:handle-position-x, draw:handle-position-y, draw:handle-polar-pole-x, draw:handle-polar-pole-y, draw:handle-polar-radius and draw:handle-polar-angle attributes use a common syntax.

      A handle-parameter

      Following the table:

      A handle-parameter is formally defined as
      handle-parameter::= formula | modifier | constant | number
      formula::= '?' name
      modifier::= '$' integer
      constant::= 'left' | 'top' | 'right' | 'bottom' |
      'xstretch' | 'ystretch' | 'hasstroke' | 'hasfill ' |
      'width' | 'height' | 'logwidth' | 'logheight'
      number::=sign? float | sign? integer
      float::= fractional exponent? | integer exponent
      fractional::= integer? '.' integer | integer '.'
      exponent::= ( 'e' | 'E' ) sign? integer
      sign::= '+'| '-'
      integer::= [0-9]+
      name ::= [^ ]+

      And:

      19.178 draw:handle-polar (deprecated)

      Note: This attribute is deprecated in favor of the new attributes draw:handle-polar-pole-x, draw:handle-polar-pole-y, draw:handle-polar-radius and draw:handle-polar-angle due to the problematic design of the draw:handle-position attribute and mismatch between previous versions of this specification and ODF implementations.
      OpenDocument 1.4 consumers shall ignore this attribute.

      And:

      19.179 draw:handle-position (deprecated)

      Note: This attribute is deprecated in favor of the new attributes draw:handle-position-x, draw:handle-position-y, draw:handle-polar-radius and draw:handle-polar-angle due to the problematic design of this attribute and mismatch between previous versions of this specification and ODF implementations.
      OpenDocument 1.4 consumers shall ignore this attribute.

      And:

      19.nn1 draw:handle-position-x

      The draw:handle-position-x attribute specifies the horizontal position of an XY-handle, see <draw:handle> 10.6.3 element.

      The value of the draw:handle-position-x attribute is a string with the following syntax:

      handle-position-x-value ::= handle-parameter

      where handle-parameter is defined in <draw:handle> 10.6.3.

      The resulting value is interpreted as x-coordinate of the position of the XY-handle.

      19.nn2 draw:handle-position-y

      The draw:handle-position-y attribute specifies the vertical position of an XY-handle, see <draw:handle> 10.6.3 element.

      The value of the draw:handle-position-y attribute is a string with the following syntax:

      handle-position-y-value ::= handle-parameter

      where handle-parameter is defined in <draw:handle> 10.6.3.

      The resulting value is interpreted as y-coordinate of the position of the XY-handle.

      19.nn3 draw:handle-polar-pole-x

      The draw:handle-polar-pole-x attribute specifies the horizontal position of the pole of the polar coordinate system used for a polar handle, see <draw:handle> 10.6.3 element.

      The value of the draw:handle-polar-pole-x attribute is a string with the following syntax:

      handle-polar-pole-x-value ::= handle-parameter

      where handle-parameter is defined in <draw:handle> 10.6.3.
      The resulting value is interpreted as x-coordinate of the pole.

      19.nn4 draw:handle-polar-pole-y

      The draw:handle-polar-pole-y attribute specifies the vertical position of the pole of the polar coordinate system used for a polar handle, see <draw:handle> 10.6.3 element.

      The value of the draw:handle-polar-pole-y attribute is a string with the following syntax:

      handle-polar-pole-y-value ::= handle-parameter

      where handle-parameter is defined in <draw:handle> 10.6.3.

      The resulting value is interpreted as y-coordinate of the pole.

      19.nn5 draw:handle-polar-radius

      The draw:handle-polar-radius attribute specifies the radius component of the polar coordinates of the handle position of a polar-handle, see <draw:handle> 10.6.3 element.

      The value of the draw:handle-polar-radius attribute is a string with the following syntax:

      handle-polar-radius-value ::= handle-parameter

      where handle-parameter is defined in <draw:handle> 10.6.3.

      The resulting value is interpreted as distance from the pole of the polar coordinate system to the position of the handle.

      If the resulting value is negative, the handle position is undefined.

      If the resulting value is zero, the handle position is on the pole of the polar coordinate system regardless of the value of the draw:handle-polar-angle 19.nn6 attribute.

      The default value of the attribute is the string 0.

      19.nn6 draw:handle-polar-angle

      The draw:handle-polar-angle attribute specifies the polar angle component of the polar coordinates of the handle position of a polar handle, see <draw:handle> 10.6.3 element.

      The value of the draw:handle-polar-angle attribute is a string with the following syntax:

      handle-polar-angle-value ::= handle-parameter

      where handle-parameter is defined in <draw:handle> 10.6.3.

      The resulting value is interpreted as angle in degrees.

      The default value of the attribute is the string 0.

      ****************************************************
      Changes to Schema:

      diff --git a/OpenDocument-v1.3-schema_ODF13.rng b/OpenDocument-v1.3-schema_OASIS_4110_v4.rng
      index dc77c4f..30291f2 100755
      --- a/OpenDocument-v1.3-schema_ODF13.rng
      +++ b/OpenDocument-v1.3-schema_OASIS_4110_v4.rng
      @@ -5192,6 +5192,64 @@
         </rng:define>
         <rng:define name="draw-handle-attlist">
           <rng:interleave>
      +      <rng:choice>
      +        <rng:group> <!-- XY-handle -->
      +          <rng:attribute name="draw:handle-position-x">
      +            <rng:ref name="string"/>
      +          </rng:attribute>
      +          <rng:attribute name="draw:handle-position-y">
      +            <rng:ref name="string"/>
      +          </rng:attribute>
      +          <rng:optional>
      +            <rng:attribute name="draw:handle-range-x-minimum">
      +              <rng:ref name="string"/>
      +            </rng:attribute>
      +          </rng:optional>
      +          <rng:optional>
      +            <rng:attribute name="draw:handle-range-x-maximum">
      +              <rng:ref name="string"/>
      +            </rng:attribute>
      +          </rng:optional>
      +          <rng:optional>
      +            <rng:attribute name="draw:handle-range-y-minimum">
      +              <rng:ref name="string"/>
      +            </rng:attribute>
      +          </rng:optional>
      +          <rng:optional>
      +            <rng:attribute name="draw:handle-range-y-maximum">
      +              <rng:ref name="string"/>
      +            </rng:attribute>
      +          </rng:optional>
      +        </rng:group>
      +        <rng:group> <!-- polar handle -->
      +          <rng:attribute name="draw:handle-polar-pole-x">
      +            <rng:ref name="string"/>
      +          </rng:attribute>
      +          <rng:attribute name="draw:handle-polar-pole-y">
      +            <rng:ref name="string"/>
      +          </rng:attribute>
      +          <rng:optional>
      +            <rng:attribute name="draw:handle-polar-radius">
      +              <rng:ref name="string"/>
      +            </rng:attribute>
      +          </rng:optional>
      +          <rng:optional>
      +            <rng:attribute name="draw:handle-polar-angle">
      +              <rng:ref name="string"/>
      +            </rng:attribute>
      +          </rng:optional>
      +          <rng:optional>
      +            <rng:attribute name="draw:handle-radius-range-minimum">
      +              <rng:ref name="string"/>
      +            </rng:attribute>
      +          </rng:optional>
      +          <rng:optional>
      +            <rng:attribute name="draw:handle-radius-range-maximum">
      +              <rng:ref name="string"/>
      +            </rng:attribute>
      +          </rng:optional>
      +        </rng:group>
      +      </rng:choice>
             <rng:optional>
               <rng:attribute name="draw:handle-mirror-vertical">
                 <rng:ref name="boolean"/>
      @@ -5207,26 +5265,9 @@
                 <rng:ref name="boolean"/>
               </rng:attribute>
             </rng:optional>
      -      <rng:attribute name="draw:handle-position">
      -        <rng:ref name="string"/>
      -      </rng:attribute>
      -      <rng:optional>
      -        <rng:attribute name="draw:handle-range-x-minimum">
      -          <rng:ref name="string"/>
      -        </rng:attribute>
      -      </rng:optional>
      +      <!-- The attributes draw:handle-position and draw:handle-polar are deprecated. -->
             <rng:optional>
      -        <rng:attribute name="draw:handle-range-x-maximum">
      -          <rng:ref name="string"/>
      -        </rng:attribute>
      -      </rng:optional>
      -      <rng:optional>
      -        <rng:attribute name="draw:handle-range-y-minimum">
      -          <rng:ref name="string"/>
      -        </rng:attribute>
      -      </rng:optional>
      -      <rng:optional>
      -        <rng:attribute name="draw:handle-range-y-maximum">
      +        <rng:attribute name="draw:handle-position">
                 <rng:ref name="string"/>
               </rng:attribute>
             </rng:optional>
      @@ -5235,16 +5276,6 @@
                 <rng:ref name="string"/>
               </rng:attribute>
             </rng:optional>
      -      <rng:optional>
      -        <rng:attribute name="draw:handle-radius-range-minimum">
      -          <rng:ref name="string"/>
      -        </rng:attribute>
      -      </rng:optional>
      -      <rng:optional>
      -        <rng:attribute name="draw:handle-radius-range-maximum">
      -          <rng:ref name="string"/>
      -        </rng:attribute>
      -      </rng:optional>
           </rng:interleave>
         </rng:define>
         <rng:define name="draw-hatch">
      

       

       

      Show
      (Francis, shema changes are at the end)   Following: 10.6.3 <draw:handle> The <draw:handle> element represents a single interaction handle for a drawing shape Enter: It is either an XY-handle or a polar-handle If a draw:handle-position-x 19.nn1 attribute together with a draw:handle-position-y 19.nn2 attribute is present, it is an XY-handle. If a draw:handle-polar-pole-x 19.nn3 attribute together with a draw:handle-polar-pole-y 19.nn4 attribute is present, it is a polar-handle. Exactly one of these two pairs shall exist. The position of an XY-handle is specified in Cartesian coordinates. The x-coordinate is specified by the draw:handle-position-x attribute, the y-coordinate is specified by the draw:handle-position-y attribute. The position of a polar-handle is specified as tuple of radius and polar angle in a polar coordinate system. The draw:handle-polar-pole-x attribute specifies the x-coordinate and the draw:handle-polar-pole-y attribute specifies the y-coordinate of the pole of the polar coordinate system. The draw:handle-polar-radius 19.nn5 attribute specifies the radius and the draw:handle-polar-angle 19.nn6 attribute defines the polar angle of the position of the polar-handle. The polar axis of the polar coordinate system points horizontally from the pole to the right. The polar angle is measured clockwise from the polar axis. Note: The y-axis in the enhanced geometry of a custom shape points down. Therefore the measurement is clockwise and not counter-clockwise. Parameters in the values of the draw:handle-position-x, draw:handle-position-y, draw:handle-polar-pole-x, draw:handle-polar-pole-y, draw:handle-polar-radius and draw:handle-polar-angle attributes use a common syntax. A handle-parameter Following the table: A handle-parameter is formally defined as handle-parameter::= formula | modifier | constant | number formula::= '?' name modifier::= '$' integer constant::= 'left' | 'top' | 'right' | 'bottom' | 'xstretch' | 'ystretch' | 'hasstroke' | 'hasfill ' | 'width' | 'height' | 'logwidth' | 'logheight' number::=sign? float | sign? integer float::= fractional exponent? | integer exponent fractional::= integer? '.' integer | integer '.' exponent::= ( 'e' | 'E' ) sign? integer sign::= '+'| '-' integer::= [0-9] + name ::= [^ ] + And: 19.178 draw:handle-polar (deprecated) Note: This attribute is deprecated in favor of the new attributes draw:handle-polar-pole-x, draw:handle-polar-pole-y, draw:handle-polar-radius and draw:handle-polar-angle due to the problematic design of the draw:handle-position attribute and mismatch between previous versions of this specification and ODF implementations. OpenDocument 1.4 consumers shall ignore this attribute. And: 19.179 draw:handle-position (deprecated) Note: This attribute is deprecated in favor of the new attributes draw:handle-position-x, draw:handle-position-y, draw:handle-polar-radius and draw:handle-polar-angle due to the problematic design of this attribute and mismatch between previous versions of this specification and ODF implementations. OpenDocument 1.4 consumers shall ignore this attribute. And: 19.nn1 draw:handle-position-x The draw:handle-position-x attribute specifies the horizontal position of an XY-handle, see <draw:handle> 10.6.3 element. The value of the draw:handle-position-x attribute is a string with the following syntax: handle-position-x-value ::= handle-parameter where handle-parameter is defined in <draw:handle> 10.6.3. The resulting value is interpreted as x-coordinate of the position of the XY-handle. 19.nn2 draw:handle-position-y The draw:handle-position-y attribute specifies the vertical position of an XY-handle, see <draw:handle> 10.6.3 element. The value of the draw:handle-position-y attribute is a string with the following syntax: handle-position-y-value ::= handle-parameter where handle-parameter is defined in <draw:handle> 10.6.3. The resulting value is interpreted as y-coordinate of the position of the XY-handle. 19.nn3 draw:handle-polar-pole-x The draw:handle-polar-pole-x attribute specifies the horizontal position of the pole of the polar coordinate system used for a polar handle, see <draw:handle> 10.6.3 element. The value of the draw:handle-polar-pole-x attribute is a string with the following syntax: handle-polar-pole-x-value ::= handle-parameter where handle-parameter is defined in <draw:handle> 10.6.3. The resulting value is interpreted as x-coordinate of the pole. 19.nn4 draw:handle-polar-pole-y The draw:handle-polar-pole-y attribute specifies the vertical position of the pole of the polar coordinate system used for a polar handle, see <draw:handle> 10.6.3 element. The value of the draw:handle-polar-pole-y attribute is a string with the following syntax: handle-polar-pole-y-value ::= handle-parameter where handle-parameter is defined in <draw:handle> 10.6.3. The resulting value is interpreted as y-coordinate of the pole. 19.nn5 draw:handle-polar-radius The draw:handle-polar-radius attribute specifies the radius component of the polar coordinates of the handle position of a polar-handle, see <draw:handle> 10.6.3 element. The value of the draw:handle-polar-radius attribute is a string with the following syntax: handle-polar-radius-value ::= handle-parameter where handle-parameter is defined in <draw:handle> 10.6.3. The resulting value is interpreted as distance from the pole of the polar coordinate system to the position of the handle. If the resulting value is negative, the handle position is undefined. If the resulting value is zero, the handle position is on the pole of the polar coordinate system regardless of the value of the draw:handle-polar-angle 19.nn6 attribute. The default value of the attribute is the string 0. 19.nn6 draw:handle-polar-angle The draw:handle-polar-angle attribute specifies the polar angle component of the polar coordinates of the handle position of a polar handle, see <draw:handle> 10.6.3 element. The value of the draw:handle-polar-angle attribute is a string with the following syntax: handle-polar-angle-value ::= handle-parameter where handle-parameter is defined in <draw:handle> 10.6.3. The resulting value is interpreted as angle in degrees. The default value of the attribute is the string 0. **************************************************** Changes to Schema: diff --git a/OpenDocument-v1.3-schema_ODF13.rng b/OpenDocument-v1.3-schema_OASIS_4110_v4.rng index dc77c4f..30291f2 100755 --- a/OpenDocument-v1.3-schema_ODF13.rng +++ b/OpenDocument-v1.3-schema_OASIS_4110_v4.rng @@ -5192,6 +5192,64 @@ </rng:define> <rng:define name="draw-handle-attlist"> <rng:interleave> + <rng:choice> + <rng:group> <!-- XY-handle --> + <rng:attribute name="draw:handle-position-x"> + <rng:ref name="string"/> + </rng:attribute> + <rng:attribute name="draw:handle-position-y"> + <rng:ref name="string"/> + </rng:attribute> + <rng:optional> + <rng:attribute name="draw:handle-range-x-minimum"> + <rng:ref name="string"/> + </rng:attribute> + </rng:optional> + <rng:optional> + <rng:attribute name="draw:handle-range-x-maximum"> + <rng:ref name="string"/> + </rng:attribute> + </rng:optional> + <rng:optional> + <rng:attribute name="draw:handle-range-y-minimum"> + <rng:ref name="string"/> + </rng:attribute> + </rng:optional> + <rng:optional> + <rng:attribute name="draw:handle-range-y-maximum"> + <rng:ref name="string"/> + </rng:attribute> + </rng:optional> + </rng:group> + <rng:group> <!-- polar handle --> + <rng:attribute name="draw:handle-polar-pole-x"> + <rng:ref name="string"/> + </rng:attribute> + <rng:attribute name="draw:handle-polar-pole-y"> + <rng:ref name="string"/> + </rng:attribute> + <rng:optional> + <rng:attribute name="draw:handle-polar-radius"> + <rng:ref name="string"/> + </rng:attribute> + </rng:optional> + <rng:optional> + <rng:attribute name="draw:handle-polar-angle"> + <rng:ref name="string"/> + </rng:attribute> + </rng:optional> + <rng:optional> + <rng:attribute name="draw:handle-radius-range-minimum"> + <rng:ref name="string"/> + </rng:attribute> + </rng:optional> + <rng:optional> + <rng:attribute name="draw:handle-radius-range-maximum"> + <rng:ref name="string"/> + </rng:attribute> + </rng:optional> + </rng:group> + </rng:choice> <rng:optional> <rng:attribute name="draw:handle-mirror-vertical"> <rng:ref name="boolean"/> @@ -5207,26 +5265,9 @@ <rng:ref name="boolean"/> </rng:attribute> </rng:optional> - <rng:attribute name="draw:handle-position"> - <rng:ref name="string"/> - </rng:attribute> - <rng:optional> - <rng:attribute name="draw:handle-range-x-minimum"> - <rng:ref name="string"/> - </rng:attribute> - </rng:optional> + <!-- The attributes draw:handle-position and draw:handle-polar are deprecated. --> <rng:optional> - <rng:attribute name="draw:handle-range-x-maximum"> - <rng:ref name="string"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:handle-range-y-minimum"> - <rng:ref name="string"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:handle-range-y-maximum"> + <rng:attribute name="draw:handle-position"> <rng:ref name="string"/> </rng:attribute> </rng:optional> @@ -5235,16 +5276,6 @@ <rng:ref name="string"/> </rng:attribute> </rng:optional> - <rng:optional> - <rng:attribute name="draw:handle-radius-range-minimum"> - <rng:ref name="string"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:handle-radius-range-maximum"> - <rng:ref name="string"/> - </rng:attribute> - </rng:optional> </rng:interleave> </rng:define> <rng:define name="draw-hatch">    
    • Resolution:
      Hide

      As proposed.

      Show
      As proposed.

      Description

      Section 19.179 draw:handle-position (below table 13) states
      "If the draw:handle-polar attribute is set, then a handle is a polar handle and the first parameter of the draw:handle-position attribute specifies the angle (as defined in 18.3.1), the handle radius is specified by the second parameter."

      But applications LibreOffice and MS Office use is the other way round.
      Google Presentation and SoftMaker do not support non-primitive custom shapes.
      Scribus does not support handle, but renders the saved status same as MS Office and LibreOffice.

      Because there is no application, that has implemented it as specified, I suggest to treat is as editorial error. Or do you know any application? Attached is a document with shape with polar handle.

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              regina.henschel Regina Henschel
            • Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: