@@ -77,7 +77,9 @@ spec:css-transforms-1;
77
77
spec:css-syntax-3;
78
78
type:dfn; text:identifier
79
79
spec:infra;
80
- type: dfn; text: list
80
+ type: dfn;
81
+ text: list
82
+ text: code point
81
83
</pre>
82
84
83
85
Introduction {#intro}
@@ -598,6 +600,7 @@ are represented by subclasses of the {{CSSNumericValue}} interface.
598
600
boolean equals(CSSNumberish... value);
599
601
600
602
CSSNumericValue to(DOMString unit);
603
+ CSSMathSum toSum(DOMString... units);
601
604
// ??? type();
602
605
603
606
static CSSNumericValue parse(DOMString cssText);
@@ -743,7 +746,7 @@ The following are the arithmetic operations you can perform on dimensions:
743
746
[=throw=] a {{TypeError}} .
744
747
Otherwise, let |item| be the result of [=create a CSSUnitValue from a sum value item|creating a CSSUnitValue=]
745
748
from the sole [=list/item=] in |sum|,
746
- then [=converting a CSSUnitValue|converting=] it to |unit|.
749
+ then [=convert a CSSUnitValue|converting=] it to |unit|.
747
750
If |item| is failure,
748
751
[=throw=] a {{TypeError}} .
749
752
@@ -775,6 +778,69 @@ The following are the arithmetic operations you can perform on dimensions:
775
778
is set to |item|’s [=sum value/value=] .
776
779
</div>
777
780
781
+ <div algorithm="CSSNumericValue.toSum()">
782
+ The <dfn method for=CSSNumericValue>toSum(...|units|)</dfn> method converts an existing {{CSSNumericValue}} |this|
783
+ into a {{CSSMathSum}} of only {{CSSUnitValue}} s with the specified units,
784
+ if possible.
785
+ (It's like {{CSSNumericValue/to()}} ,
786
+ but allows the result to have multiple units in it.)
787
+ If called without any units,
788
+ it just simplifies |this| into a minimal sum of {{CSSUnitValue}} s.
789
+
790
+ When called, it must perform the following steps:
791
+
792
+ 1. [=list/For each=] |unit| in |units|,
793
+ if the result of [=creating a type=] from |unit| is failure,
794
+ [=throw=] a {{SyntaxError}} .
795
+
796
+ 2. Let |sum| be the result of [=creating a sum value=] from |this|.
797
+ If |sum| is failure,
798
+ [=throw=] a {{TypeError}} .
799
+
800
+ 3. Let |values| be the result of [=create a CSSUnitValue from a sum value item|creating a CSSUnitValue=]
801
+ [=list/for each=] [=list/item=] in |sum|.
802
+ If any [=list/item=] of |values| is failure,
803
+ [=throw=] a {{TypeError}} .
804
+
805
+ 4. If |units| is [=list/empty=] ,
806
+ sort |values| in [=code point=] order according to the {{CSSUnitValue/unit}} internal slot of its [=list/items=] ,
807
+ then return a new {{CSSMathSum}} object
808
+ whose {{CSSMathSum/values}} internal slot is set to |values|.
809
+
810
+
811
+ 5. Otherwise,
812
+ let |result| initially be an empty [=list=] .
813
+ [=list/For each=] |unit| in |units|:
814
+
815
+ 1. Let |temp| initially be a new {{CSSUnitValue}}
816
+ whose {{CSSUnitValue/unit}} internal slot
817
+ is set to |unit|
818
+ and whose {{CSSUnitValue/value}} internal slot
819
+ is set to `0`.
820
+
821
+ 2. [=list/For each=] |value| in |values|:
822
+
823
+ 1. Let |value unit| be |value|’s {{CSSUnitValue/unit}} internal slot.
824
+
825
+ 2. If |value unit| is a [=compatible unit=] with |unit|,
826
+ then:
827
+
828
+ 1.[=convert a CSSUnitValue|convert=] |value| to |unit|.
829
+ 2. Increment |temp|’s {{CSSUnitValue/value}} internal slot
830
+ by the value of |value|’s {{CSSUnitValue/value}} internal slot.
831
+ 3. [=list/Remove=] |value| from |values|.
832
+
833
+ 3. [=list/Append=] |temp| to |result|.
834
+
835
+ 6. If |values| is not [=list/empty=] ,
836
+ [=throw=] a {{TypeError}} .
837
+ <span class=note> |this| had units that you didn't ask for.</span>
838
+
839
+ 7. Return a new {{CSSMathSum}} object
840
+ whose {{CSSMathSum/values}} internal slot
841
+ is set to |result|.
842
+ </div>
843
+
778
844
<div algorithm="sum value">
779
845
A <dfn>sum value</dfn>
780
846
is an abstract representation of a {{CSSNumericValue}}
0 commit comments