'use strict';
function SVGPathData(content) {
this.commands = SVGPathData.parse(content);
}
SVGPathData.prototype.encode = function() {
return SVGPathData.encode(this.commands);
};
SVGPathData.prototype.round = function() {
return this.transform.apply(this, [SVGPathData.Transformer.ROUND].concat(
[].slice.call(arguments, 0)));
};
SVGPathData.prototype.toAbs = function() {
return this.transform(SVGPathData.Transformer.TO_ABS);
};
SVGPathData.prototype.toRel = function() {
return this.transform(SVGPathData.Transformer.TO_REL);
};
SVGPathData.prototype.translate = function() {
return this.transform.apply(this, [SVGPathData.Transformer.TRANSLATE].concat(
[].slice.call(arguments, 0)));
};
SVGPathData.prototype.scale = function() {
return this.transform.apply(this, [SVGPathData.Transformer.SCALE].concat(
[].slice.call(arguments, 0)));
};
SVGPathData.prototype.rotate = function() {
return this.transform.apply(this, [SVGPathData.Transformer.ROTATE].concat(
[].slice.call(arguments, 0)));
};
SVGPathData.prototype.matrix = function() {
return this.transform.apply(this, [SVGPathData.Transformer.MATRIX].concat(
[].slice.call(arguments, 0)));
};
SVGPathData.prototype.skewX = function() {
return this.transform.apply(this, [SVGPathData.Transformer.SKEW_X].concat(
[].slice.call(arguments, 0)));
};
SVGPathData.prototype.skewY = function() {
return this.transform.apply(this, [SVGPathData.Transformer.SKEW_Y].concat(
[].slice.call(arguments, 0)));
};
SVGPathData.prototype.xSymetry = function() {
return this.transform.apply(this, [SVGPathData.Transformer.X_AXIS_SIMETRY].concat(
[].slice.call(arguments, 0)));
};
SVGPathData.prototype.ySymetry = function() {
return this.transform.apply(this, [SVGPathData.Transformer.Y_AXIS_SIMETRY].concat(
[].slice.call(arguments, 0)));
};
SVGPathData.prototype.aToC = function() {
return this.transform.apply(this, [SVGPathData.Transformer.A_TO_C].concat(
[].slice.call(arguments, 0)));
};
SVGPathData.prototype.transform = function(transformFunction) {
var newCommands = [];
var curCommands = [];
var commands = this.commands;
var i;
var ii;
transformFunction = transformFunction.apply(null, [].slice.call(arguments, 1));
for(i = 0, ii = commands.length; i < ii; i++) {
curCommands = transformFunction(commands[i]);
if(curCommands instanceof Array) {
newCommands = newCommands.concat(curCommands);
} else {
newCommands.push(curCommands);
}
}
this.commands = newCommands;
return this;
};
// Static methods
SVGPathData.encode = function(commands) {
var content = '';
var encoder = new SVGPathData.Encoder();
encoder.on('readable', function() {
var str;
do {
str = encoder.read();
if(null !== str) {
content += str;
}
} while(null !== str);
});
encoder.write(commands);
encoder.end();
return content;
};
SVGPathData.parse = function(content) {
var commands = [];
var parser = new SVGPathData.Parser();
parser.on('readable', function() {
var command;
do {
command = parser.read();
if(null !== command) {
commands.push(command);
}
} while(null !== command);
});
parser.write(content);
parser.end();
return commands;
};
// Commands static vars
SVGPathData.CLOSE_PATH = 1;
SVGPathData.MOVE_TO = 2;
SVGPathData.HORIZ_LINE_TO = 4;
SVGPathData.VERT_LINE_TO = 8;
SVGPathData.LINE_TO = 16;
SVGPathData.CURVE_TO = 32;
SVGPathData.SMOOTH_CURVE_TO = 64;
SVGPathData.QUAD_TO = 128;
SVGPathData.SMOOTH_QUAD_TO = 256;
SVGPathData.ARC = 512;
SVGPathData.DRAWING_COMMANDS =
SVGPathData.HORIZ_LINE_TO | SVGPathData.VERT_LINE_TO | SVGPathData.LINE_TO |
SVGPathData.CURVE_TO | SVGPathData.SMOOTH_CURVE_TO | SVGPathData.QUAD_TO |
SVGPathData.SMOOTH_QUAD_TO | SVGPathData.ARC;
// Export the main contructor first (tests are failing otherwise)
module.exports = SVGPathData;
// Expose the internal constructors
SVGPathData.Parser = require('./SVGPathDataParser.js');
SVGPathData.Encoder = require('./SVGPathDataEncoder.js');
SVGPathData.Transformer = require('./SVGPathDataTransformer.js');
|