index.js
function absolutize(path){
	var startX = 0
	var startY = 0
	var x = 0
	var y = 0

	return path.map(function(seg){
		seg = seg.slice()
		var type = seg[0]
		var command = type.toUpperCase()

		// is relative
		if (type != command) {
			seg[0] = command
			switch (type) {
				case 'a':
					seg[6] += x
					seg[7] += y
					break
				case 'v':
					seg[1] += y
					break
				case 'h':
					seg[1] += x
					break
				default:
					for (var i = 1; i < seg.length;) {
						seg[i++] += x
						seg[i++] += y
					}
			}
		}

		// update cursor state
		switch (command) {
			case 'Z':
				x = startX
				y = startY
				break
			case 'H':
				x = seg[1]
				break
			case 'V':
				y = seg[1]
				break
			case 'M':
				x = startX = seg[1]
				y = startY = seg[2]
				break
			default:
				x = seg[seg.length - 2]
				y = seg[seg.length - 1]
		}

		return seg
	})
}
function absolutize(path){
	var startX = 0
	var startY = 0
	var x = 0
	var y = 0

	return path.map(function(seg){
		seg = seg.slice()
		var type = seg[0]
		var command = type.toUpperCase()

		// is relative
		if (type != command) {
			seg[0] = command
			switch (type) {
				case 'a':
					seg[6] += x
					seg[7] += y
					break
				case 'v':
					seg[1] += y
					break
				case 'h':
					seg[1] += x
					break
				default:
					for (var i = 1; i < seg.length;) {
						seg[i++] += x
						seg[i++] += y
					}
			}
		}

		// update cursor state
		switch (command) {
			case 'Z':
				x = startX
				y = startY
				break
			case 'H':
				x = seg[1]
				break
			case 'V':
				y = seg[1]
				break
			case 'M':
				x = startX = seg[1]
				y = startY = seg[2]
				break
			default:
				x = seg[seg.length - 2]
				y = seg[seg.length - 1]
		}

		return seg
	})
}
function absolutize ( path ) { var startX = 0 var startY = 0 var x = 0 var y = 0 return path . map ( function ( seg ) { seg = seg . slice ( ) var type = seg [ 0 ] var command = type . toUpperCase ( ) // is relative if ( type != command ) { seg [ 0 ] = command switch ( type ) { case 'a' : seg [ 6 ] += x seg [ 7 ] += y break case 'v' : seg [ 1 ] += y break case 'h' : seg [ 1 ] += x break default : for ( var i = 1 ; i < seg . length ; ) { seg [ i ++ ] += x seg [ i ++ ] += y } } } // update cursor state switch ( command ) { case 'Z' : x = startX y = startY break case 'H' : x = seg [ 1 ] break case 'V' : y = seg [ 1 ] break case 'M' : x = startX = seg [ 1 ] y = startY = seg [ 2 ] break default : x = seg [ seg . length - 2 ] y = seg [ seg . length - 1 ] } return seg } ) }
redefine `path` with absolute coordinates

@param {Array} path
@return {Array}
redefine path with absolute coordinates