 		default:
 			return nil
 		}
+	}
+
+	private func separateNegativeValuesIfNeeded(expression: String) -> [String] {
+
+		var values = [String]()
+		var value = String()
+		for c in expression.characters {
+			if c == "-" {
+				if value.characters.count != 0 {
+					values.append(value)
+					value = String()
+				}
+			}
+
+			value.append(c)
+		}
+
+		if value.characters.count != 0 {
+			values.append(value)
+		}
+
+		return values
 	}
 
 	private func isCommandCharacter(character: Character) -> Bool {

		characterSet.addCharactersInString(" ")
		characterSet.addCharactersInString(",")
		var commandParams = command.expression.componentsSeparatedByCharactersInSet(characterSet)
		print("Params: \(commandParams)")
		switch command.type {
		case .MoveTo:
			print("MoveTo \(commandParams.count)")
			if commandParams.count < 2 {
				return .None
			}

			guard let x = Double(commandParams[0]), y = Double(commandParams[1]) else {
				return .None
			}


				return .None
			}

			guard let x = Double(separatedValues[0]), y = Double(separatedValues[1]) else {
				return .None
			}

			return PLine(x: x, y: y, absolute: true)
		case .LineH:
			print("LineHorizontal \(separatedValues.count)")
			if separatedValues.count < 1 {
				return .None
			}

			guard let x = Double(separatedValues[0]) else {
				return .None
			}

			return HLine(x: x, absolute: true)

		case .LineV:
			print("LineVertical \(separatedValues.count)")
			if separatedValues.count < 1 {
				return .None
			}

			guard let y = Double(separatedValues[0]) else {
				return .None
			}

			return VLine(y: y, absolute: true)

		case .CurveTo:
			print("CurveTo \(separatedValues.count)")
			if separatedValues.count < 6 {
				return .None
			}

			guard let x1 = Double(separatedValues[0]),
				y1 = Double(separatedValues[1]),
				x2 = Double(separatedValues[2]),
				y2 = Double(separatedValues[3]),
				x = Double(separatedValues[4]),
				y = Double(separatedValues[5]) else {
					return .None
			}

