1- import { SPACE , COMMA , LENGTH , NUMBER , ANGLE } from '../tokenTypes'
1+ import { SPACE , COMMA , LENGTH , NUMBER , ANGLE , PERCENT } from '../tokenTypes'
22
3- const oneOfType = tokenType => functionStream => {
4- const value = functionStream . expect ( tokenType )
3+ const oneOfTypes = tokenTypes => functionStream => {
4+ const value = functionStream . expect ( ... tokenTypes )
55 functionStream . expectEmpty ( )
66 return value
77}
88
9- const singleNumber = oneOfType ( NUMBER )
10- const singleLength = oneOfType ( LENGTH )
11- const singleAngle = oneOfType ( ANGLE )
12- const xyTransformFactory = tokenType => (
9+ const singleNumber = oneOfTypes ( [ NUMBER ] )
10+ const singleLengthOrPercent = oneOfTypes ( [ LENGTH , PERCENT ] )
11+ const singleAngle = oneOfTypes ( [ ANGLE ] )
12+ const xyTransformFactory = tokenTypes => (
1313 key ,
1414 valueIfOmitted
1515) => functionStream => {
16- const x = functionStream . expect ( tokenType )
16+ const x = functionStream . expect ( ... tokenTypes )
1717
1818 let y
1919 if ( functionStream . hasTokens ( ) ) {
2020 functionStream . expect ( COMMA )
21- y = functionStream . expect ( tokenType )
21+ y = functionStream . expect ( ... tokenTypes )
2222 } else if ( valueIfOmitted !== undefined ) {
2323 y = valueIfOmitted
2424 } else {
@@ -31,18 +31,18 @@ const xyTransformFactory = tokenType => (
3131
3232 return [ { [ `${ key } Y` ] : y } , { [ `${ key } X` ] : x } ]
3333}
34- const xyNumber = xyTransformFactory ( NUMBER )
35- const xyLength = xyTransformFactory ( LENGTH )
36- const xyAngle = xyTransformFactory ( ANGLE )
34+ const xyNumber = xyTransformFactory ( [ NUMBER ] )
35+ const xyLengthOrPercent = xyTransformFactory ( [ LENGTH , PERCENT ] )
36+ const xyAngle = xyTransformFactory ( [ ANGLE ] )
3737
3838const partTransforms = {
3939 perspective : singleNumber ,
4040 scale : xyNumber ( 'scale' ) ,
4141 scaleX : singleNumber ,
4242 scaleY : singleNumber ,
43- translate : xyLength ( 'translate' , 0 ) ,
44- translateX : singleLength ,
45- translateY : singleLength ,
43+ translate : xyLengthOrPercent ( 'translate' , 0 ) ,
44+ translateX : singleLengthOrPercent ,
45+ translateY : singleLengthOrPercent ,
4646 rotate : singleAngle ,
4747 rotateX : singleAngle ,
4848 rotateY : singleAngle ,
0 commit comments