private void ParseSkewY(StringPtr ptr) { if (ptr.String.StartsWith("skewY")) { ptr += 5; ptr.AdvanceWhiteSpace(); if (ptr.Char == '(') { ++ptr; ptr.AdvanceWhiteSpace(); var angle = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateSkewY(angle)); return; } } throw new ArgumentException("transformData"); } }
private void ParseRotate(StringPtr ptr) { if (ptr.String.StartsWith("rotate")) { ptr += 6; ptr.AdvanceWhiteSpace(); if (ptr.Char == '(') { ++ptr; ptr.AdvanceWhiteSpace(); var r = ParseNumber(ptr).Value; var current = ptr.Index; this.ParseCommaOrWhitespace(ptr); var cx = ParseNumber(ptr); if (cx.HasValue) { this.ParseCommaOrWhitespace(ptr); var cy = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateRotate(r, cx.Value, cy)); return; } } else { ptr.Index = current; ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateRotate(r)); return; } } } throw new ArgumentException("transformData"); } }
private SvgPathSegmentParser(string pathData) { this.Segments = new Collection<SvgPathSegment>(); var ptr = new StringPtr(pathData); ptr.AdvanceWhiteSpace(); this.ParseMoveToDrawToCommandGroups(ptr); }
private SvgTransformParser(string pathData) { this.Transforms = new Collection<SvgTransform>(); var ptr = new StringPtr(pathData); ptr.AdvanceWhiteSpace(); this.ParseTransforms(ptr); }
private void ParseTranslate(StringPtr ptr) { if (ptr.String.StartsWith("translate")) { ptr += 9; ptr.AdvanceWhiteSpace(); if (ptr.Char == '(') { ++ptr; ptr.AdvanceWhiteSpace(); var tx = ParseNumber(ptr).Value; var current = ptr.Index; this.ParseCommaOrWhitespace(ptr); var ty = ParseNumber(ptr); if (ty.HasValue) { this.ParseCommaOrWhitespace(ptr); ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateTranslate(tx, ty.Value)); return; } } else { ptr.Index = current; ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateTranslate(tx, 0.0F)); return; } } } throw new ArgumentException("transformData"); } }
private SvgTransformParser(string pathData) { this.Transforms = new Collection <SvgTransform>(); var ptr = new StringPtr(pathData); ptr.AdvanceWhiteSpace(); this.ParseTransforms(ptr); }
private void ParseMatrix(StringPtr ptr) { if (ptr.String.StartsWith("matrix")) { ptr += 6; ptr.AdvanceWhiteSpace(); if (ptr.Char == '(') { ++ptr; ptr.AdvanceWhiteSpace(); var a = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); var b = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); var c = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); var d = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); var e = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); var f = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateMatrix(new SvgMatrix(a, b, c, d, e, f))); return; } } throw new ArgumentException("transformData"); } }
private void ParseMatrix(StringPtr ptr) { if (ptr.String.StartsWith("matrix")) { ptr += 6; ptr.AdvanceWhiteSpace(); if (ptr.Char == '(') { ++ptr; ptr.AdvanceWhiteSpace(); var a = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); var b = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); var c = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); var d = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); var e = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); var f = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateMatrix(new SvgMatrix(a, b, c, d, e, f))); return; } } throw new ArgumentException("transformData"); } }
private bool ParseCommaOrWhitespace(StringPtr ptr) { 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 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 void ParseRotate(StringPtr ptr) { if (ptr.String.StartsWith("rotate")) { ptr += 6; ptr.AdvanceWhiteSpace(); if (ptr.Char == '(') { ++ptr; ptr.AdvanceWhiteSpace(); var r = ParseNumber(ptr).Value; var current = ptr.Index; this.ParseCommaOrWhitespace(ptr); var cx = ParseNumber(ptr); if (cx.HasValue) { this.ParseCommaOrWhitespace(ptr); var cy = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateRotate(r, cx.Value, cy)); return; } } else { ptr.Index = current; ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateRotate(r)); return; } } } throw new ArgumentException("transformData"); } }
private void ParseHorizontalLineTo(StringPtr ptr) { var abs = ptr.Char == 'H'; ++ptr; ptr.AdvanceWhiteSpace(); this.ParseHorizontalLineToArgumentSequence(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 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 void ParseTranslate(StringPtr ptr) { if (ptr.String.StartsWith("translate")) { ptr += 9; ptr.AdvanceWhiteSpace(); if (ptr.Char == '(') { ++ptr; ptr.AdvanceWhiteSpace(); var tx = ParseNumber(ptr).Value; var current = ptr.Index; this.ParseCommaOrWhitespace(ptr); var ty = ParseNumber(ptr); if (ty.HasValue) { this.ParseCommaOrWhitespace(ptr); ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateTranslate(tx, ty.Value)); return; } } else { ptr.Index = current; ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateTranslate(tx, 0.0F)); return; } } } throw new ArgumentException("transformData"); } }
private void ParseMoveToDrawToCommandGroup(StringPtr ptr) { this.ParseMoveTo(ptr); ptr.AdvanceWhiteSpace(); if (!ptr.IsEnd) this.ParseDrawToCommands(ptr); }
private bool ParseCommaOrWhitespace(StringPtr ptr) { 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 ParseSkewY(StringPtr ptr) { if (ptr.String.StartsWith("skewY")) { ptr += 5; ptr.AdvanceWhiteSpace(); if (ptr.Char == '(') { ++ptr; ptr.AdvanceWhiteSpace(); var angle = ParseNumber(ptr).Value; this.ParseCommaOrWhitespace(ptr); ptr.AdvanceWhiteSpace(); if (ptr.Char == ')') { ++ptr; this.Transforms.Add(SvgTransform.CreateSkewY(angle)); return; } } throw new ArgumentException("transformData"); } }
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"); }