private bool ParseCommaOrWhitespace(StringPtr ptr) { if (ptr.IsEnd) { return(false); } if (ptr.IsWhitespace()) { ++ptr; ptr.AdvanceWhiteSpace(); if (ptr.Char == ',') { ++ptr; } ptr.AdvanceWhiteSpace(); return(true); } else if (ptr.Char == ',') { ++ptr; ptr.AdvanceWhiteSpace(); return(true); } return(false); }
private void ParseQllipticalArc(StringPtr ptr) { var abs = ptr.Char == 'A'; ++ptr; ptr.AdvanceWhiteSpace(); this.ParseQllipticalArcArgumentSequence(ptr, abs); }
private void ParseCurveTo(StringPtr ptr) { var abs = ptr.Char == 'C'; ++ptr; ptr.AdvanceWhiteSpace(); this.ParseCurveToArgumentSequence(ptr, abs); }
private void ParseSmoothQuadraticBezierCurveTo(StringPtr ptr) { var abs = ptr.Char == 'T'; ++ptr; ptr.AdvanceWhiteSpace(); this.ParseSmoothQuadraticBezierCurveToArgumentSequence(ptr, abs); }
private void ParseHorizontalLineTo(StringPtr ptr) { var abs = ptr.Char == 'H'; ++ptr; ptr.AdvanceWhiteSpace(); this.ParseHorizontalLineToArgumentSequence(ptr, abs); }
private void ParseMoveToDrawToCommandGroup(StringPtr ptr) { this.ParseMoveTo(ptr); ptr.AdvanceWhiteSpace(); if (!ptr.IsEnd) { this.ParseDrawToCommands(ptr); } }
private SvgPathSegmentParser(string pathData) { this.Segments = new Collection <SvgPathSegment>(); var ptr = new StringPtr(pathData); ptr.AdvanceWhiteSpace(); this.ParseMoveToDrawToCommandGroups(ptr); }
private void ParseMoveTo(StringPtr ptr) { if (char.ToLower(ptr.Char) == 'm') { var abs = ptr.Char == 'M'; ++ptr; ptr.AdvanceWhiteSpace(); this.ParseMoveToArgumentSequence(ptr, abs); return; } throw new ArgumentException("pathData"); }
private bool ParseDrawToCommands(StringPtr ptr) { if (this.ParseDrawToCommand(ptr)) { var current = ptr.Index; ptr.AdvanceWhiteSpace(); if (!ptr.IsEnd) { if (!this.ParseDrawToCommands(ptr)) { ptr.Index = current; } } return(true); } return(false); }
private static RgbColor ParseColorFunc(string color) { var ptr = new StringPtr(color); ptr.AdvanceWhiteSpace(); var s1 = ptr.Index; ptr.AdvanceInteger(); if (ptr.Index == s1) { throw new ArgumentException(nameof(color)); } var r = byte.Parse(color.Substring(s1, ptr.Index - s1)); var percentage = false; if (ptr.Char == '%') { percentage = true; ++ptr; } ptr.AdvanceWhiteSpace(); if (ptr.Char != ',') { throw new ArgumentException(nameof(color)); } ++ptr; ptr.AdvanceWhiteSpace(); var s2 = ptr.Index; ptr.AdvanceInteger(); if (ptr.Index == s2) { throw new ArgumentException(nameof(color)); } var g = byte.Parse(color.Substring(s2, ptr.Index - s2)); if (percentage) { if (ptr.Char != '%') { throw new ArgumentException(nameof(color)); } ++ptr; } ptr.AdvanceWhiteSpace(); if (ptr.Char != ',') { throw new ArgumentException(nameof(color)); } ++ptr; ptr.AdvanceWhiteSpace(); var s3 = ptr.Index; ptr.AdvanceInteger(); if (ptr.Index == s3) { throw new ArgumentException(nameof(color)); } var b = byte.Parse(color.Substring(s3, ptr.Index - s3)); if (percentage) { if (ptr.Char != '%') { throw new ArgumentException(nameof(color)); } ++ptr; } ptr.AdvanceWhiteSpace(); if (ptr.Char != ')') { throw new ArgumentException(nameof(color)); } return(percentage ? new RgbColor((byte)(255.0F * r / 100.0F), (byte)(255.0F * g / 100.0F), (byte)(255.0F * b / 100.0F)) : new RgbColor(r, g, b)); }
private static RgbColor ParseHslColorFunc(string color) { var ptr = new StringPtr(color); ptr.AdvanceWhiteSpace(); var s1 = ptr.Index; var h = SvgAngle.Parse(ptr); if (ptr.Index == s1) { throw new ArgumentException(nameof(color)); } ptr.AdvanceWhiteSpace(); if (ptr.Char != ',') { throw new ArgumentException(nameof(color)); } ++ptr; ptr.AdvanceWhiteSpace(); var s2 = ptr.Index; ptr.AdvanceInteger(); if (ptr.Index == s2) { throw new ArgumentException(nameof(color)); } var s = byte.Parse(color.Substring(s2, ptr.Index - s2)); if (ptr.Char != '%') { throw new ArgumentException(nameof(color)); } ++ptr; ptr.AdvanceWhiteSpace(); if (ptr.Char != ',') { throw new ArgumentException(nameof(color)); } ++ptr; ptr.AdvanceWhiteSpace(); var s3 = ptr.Index; ptr.AdvanceInteger(); if (ptr.Index == s3) { throw new ArgumentException(nameof(color)); } var l = byte.Parse(color.Substring(s3, ptr.Index - s3)); if (ptr.Char != '%') { throw new ArgumentException(nameof(color)); } ++ptr; ptr.AdvanceWhiteSpace(); if (ptr.Char != ')') { throw new ArgumentException(nameof(color)); } return(HlsToRgb(h.ValueAsDegree, s / 100.0, l / 100.0)); }