You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.0 KiB
87 lines
2.0 KiB
'use strict'; |
|
|
|
|
|
var Matrix = require('./matrix'); |
|
|
|
var operations = { |
|
matrix: true, |
|
scale: true, |
|
rotate: true, |
|
translate: true, |
|
skewX: true, |
|
skewY: true |
|
}; |
|
|
|
var CMD_SPLIT_RE = /\s*(matrix|translate|scale|rotate|skewX|skewY)\s*\(\s*(.+?)\s*\)[\s,]*/; |
|
var PARAMS_SPLIT_RE = /[\s,]+/; |
|
|
|
|
|
module.exports = function transformParse(transformString) { |
|
var matrix = new Matrix(); |
|
var cmd, params; |
|
|
|
// Split value into ['', 'translate', '10 50', '', 'scale', '2', '', 'rotate', '-45', ''] |
|
transformString.split(CMD_SPLIT_RE).forEach(function (item) { |
|
|
|
// Skip empty elements |
|
if (!item.length) { return; } |
|
|
|
// remember operation |
|
if (typeof operations[item] !== 'undefined') { |
|
cmd = item; |
|
return; |
|
} |
|
|
|
// extract params & att operation to matrix |
|
params = item.split(PARAMS_SPLIT_RE).map(function (i) { |
|
return +i || 0; |
|
}); |
|
|
|
// If params count is not correct - ignore command |
|
switch (cmd) { |
|
case 'matrix': |
|
if (params.length === 6) { |
|
matrix.matrix(params); |
|
} |
|
return; |
|
|
|
case 'scale': |
|
if (params.length === 1) { |
|
matrix.scale(params[0], params[0]); |
|
} else if (params.length === 2) { |
|
matrix.scale(params[0], params[1]); |
|
} |
|
return; |
|
|
|
case 'rotate': |
|
if (params.length === 1) { |
|
matrix.rotate(params[0], 0, 0); |
|
} else if (params.length === 3) { |
|
matrix.rotate(params[0], params[1], params[2]); |
|
} |
|
return; |
|
|
|
case 'translate': |
|
if (params.length === 1) { |
|
matrix.translate(params[0], 0); |
|
} else if (params.length === 2) { |
|
matrix.translate(params[0], params[1]); |
|
} |
|
return; |
|
|
|
case 'skewX': |
|
if (params.length === 1) { |
|
matrix.skewX(params[0]); |
|
} |
|
return; |
|
|
|
case 'skewY': |
|
if (params.length === 1) { |
|
matrix.skewY(params[0]); |
|
} |
|
return; |
|
} |
|
}); |
|
|
|
return matrix; |
|
};
|
|
|