     case Relative
 }
 
-private enum Direction {
-    case Vertical
-    case Horizontal
-}
-
-private enum Continuation {
-    case Smooth
-    case Broken
-}
-
 // MARK: Class
 
 public class SVGPath {

    return out
}

private func vector (type: SVGCommand.Kind) -> SVGCommandBuilder {
    func build (numbers: [CGFloat], lastCommand: SVGCommand?, coords: Coordinates) -> [SVGCommand] {
        return take(numbers, 2, lastCommand) {
            (nums:Slice<CGFloat>, last: SVGCommand?) -> SVGCommand in
            return SVGCommand(pointAtIndex(nums, 0), type: type)
        }
    }
    return build
}

private func scalar (direction: Direction) -> SVGCommandBuilder {
    func build (numbers: [CGFloat], lastCommand: SVGCommand?, coords: Coordinates) -> [SVGCommand] {
        return take(numbers, 1, lastCommand) {
            (nums:Slice<CGFloat>, last: SVGCommand?) -> SVGCommand in

            var point:CGPoint = CGPoint()
            
            if coords == .Absolute {
                point = last?.point ?? point
            }
            
            if direction == .Vertical {
                point.y = nums[0]
            } else {
                point.x = nums[0]
            }
            
            return SVGCommand(point, type: .Line)
        }
    }
    return build
}

private func quadBroken (numbers: [CGFloat], lastCommand: SVGCommand?, coords: Coordinates) -> [SVGCommand] {
    return take(numbers, 4, lastCommand) {

    public init (_ string: String) {
        for char in string {
            switch char {
            case "M": use(.Absolute, moveTo)
            case "m": use(.Relative, moveTo)
            case "L": use(.Absolute, lineTo)
            case "l": use(.Relative, lineTo)
            case "V": use(.Absolute, lineToVertical)
            case "v": use(.Relative, lineToVertical)
            case "H": use(.Absolute, lineToHorizontal)
            case "h": use(.Relative, lineToHorizontal)
            case "Q": use(.Absolute, quadBroken)
            case "q": use(.Relative, quadBroken)
            case "T": use(.Absolute, quadSmooth)
            case "t": use(.Relative, quadSmooth)
            default: numbers.append(char)
            }
        }
        finishLastCommand()
    }
    
    private func use (coords: Coordinates, _ builder: SVGCommandBuilder) {
        finishLastCommand()
        self.builder = builder
        self.coords = coords
