Example #1
0
 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);
 }
Example #2
0
        private void ParseQllipticalArc(StringPtr ptr)
        {
            var abs = ptr.Char == 'A';

            ++ptr;
            ptr.AdvanceWhiteSpace();
            this.ParseQllipticalArcArgumentSequence(ptr, abs);
        }
Example #3
0
        private void ParseCurveTo(StringPtr ptr)
        {
            var abs = ptr.Char == 'C';

            ++ptr;
            ptr.AdvanceWhiteSpace();
            this.ParseCurveToArgumentSequence(ptr, abs);
        }
Example #4
0
        private void ParseSmoothQuadraticBezierCurveTo(StringPtr ptr)
        {
            var abs = ptr.Char == 'T';

            ++ptr;
            ptr.AdvanceWhiteSpace();
            this.ParseSmoothQuadraticBezierCurveToArgumentSequence(ptr, abs);
        }
Example #5
0
        private void ParseHorizontalLineTo(StringPtr ptr)
        {
            var abs = ptr.Char == 'H';

            ++ptr;
            ptr.AdvanceWhiteSpace();
            this.ParseHorizontalLineToArgumentSequence(ptr, abs);
        }
Example #6
0
 private void ParseMoveToDrawToCommandGroup(StringPtr ptr)
 {
     this.ParseMoveTo(ptr);
     ptr.AdvanceWhiteSpace();
     if (!ptr.IsEnd)
     {
         this.ParseDrawToCommands(ptr);
     }
 }
Example #7
0
        private SvgPathSegmentParser(string pathData)
        {
            this.Segments = new Collection <SvgPathSegment>();

            var ptr = new StringPtr(pathData);

            ptr.AdvanceWhiteSpace();
            this.ParseMoveToDrawToCommandGroups(ptr);
        }
Example #8
0
 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");
 }
Example #9
0
 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);
 }
Example #10
0
        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));
        }
Example #11
0
        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));
        }