private Gradient parseGradient(System.String s, bool hasAlpha)
		{
			Gradient gradient = new Gradient(); // todo - support focal
			
			// todo add error checking
			//    count must be 1..8
			//    number of parts must be even
			//    ratio must be 0..255
			System.String[] parts = StringUtils.split(s, " ");
			int count = parts.Length / 2;
			gradient.records = new GradRecord[count];
			for (int i = 0; i < count; i++)
			{
				GradRecord record = gradient.records[i] = new GradRecord();
				record.ratio = System.Int32.Parse(parts[2 * i]);
				record.color = hasAlpha?parseRGBA(parts[2 * i + 1]):parseRGB(parts[2 * i + 1]);
			}
			return gradient;
		}
		private void  encodeGradient(Gradient gradient, SwfEncoder w, int shape)
		{
			w.writeUBits(gradient.spreadMode, 2);
			w.writeUBits(gradient.interpolationMode, 2);
			w.writeUBits(gradient.records.Length, 4);
			for (int i = 0; i < gradient.records.Length; i++)
			{
				encodeGradRecord(gradient.records[i], w, shape);
			}
			if (gradient is FocalGradient)
			{
				w.writeFixed8(((FocalGradient) gradient).focalPoint);
			}
		}