コード例 #1
0
        internal static SvgAngle Parse(StringPtr ptr)
        {
            var begin = ptr.Index;

            ptr.AdvanceNumber();
            if (begin == ptr.Index)
            {
                throw new ArgumentException(nameof(ptr));
            }

            var value = float.Parse(ptr.Target.Substring(begin, ptr.Index - begin), System.Globalization.CultureInfo.InvariantCulture);

            if (ptr.Index != ptr.Target.Length)
            {
                var unit = ptr.String;
                if (unit.StartsWith("deg"))
                {
                    ptr += 3;
                    return(new SvgAngle(SvgAngleType.Degree, value));
                }
                if (unit.StartsWith("rad"))
                {
                    ptr += 3;
                    return(new SvgAngle(SvgAngleType.Radian, value));
                }
                if (unit.StartsWith("grad"))
                {
                    ptr += 4;
                    return(new SvgAngle(SvgAngleType.Grade, value));
                }
            }
            return(new SvgAngle(SvgAngleType.Degree, value));
        }
コード例 #2
0
        private float?ParseNumber(StringPtr ptr)
        {
            var begin = ptr.Index;

            ptr.AdvanceNumber();
            if (begin == ptr.Index)
            {
                return(null);
            }

            var numberText = ptr.Target.Substring(begin, ptr.Index - begin);

            return(float.Parse(numberText, System.Globalization.CultureInfo.InvariantCulture));
        }
コード例 #3
0
        internal static bool TryParse(string numberText, float min, float max, out SvgNumber result)
        {
            var ptr = new StringPtr(numberText);

            ptr.AdvanceNumber();
            if (ptr.Index != numberText.Length)
            {
                result = 0.0F;
                return(false);
            }

            result = Math.Min(Math.Max(float.Parse(numberText), min), max);
            return(true);
        }
コード例 #4
0
        internal static bool TryParse(string numberText, out SvgNumber result)
        {
            var ptr = new StringPtr(numberText);

            ptr.AdvanceNumber();
            if (ptr.Index != numberText.Length)
            {
                result = 0.0F;
                return(false);
            }

            result = float.Parse(numberText, System.Globalization.CultureInfo.InvariantCulture);
            return(true);
        }
コード例 #5
0
ファイル: SvgLength.cs プロジェクト: mediabuff/SvgForXaml
        internal static bool TryParse(string lengthText, bool presentation, out SvgLength result)
        {
            var ptr = new StringPtr(lengthText);

            ptr.AdvanceNumber();

            var value = float.Parse(lengthText.Substring(0, ptr.Index), System.Globalization.CultureInfo.InvariantCulture);

            if (ptr.Index != lengthText.Length)
            {
                var unit = lengthText.Substring(ptr.Index);
                if (presentation)
                {
                    unit = unit.ToLower();
                }
                switch (unit)
                {
                case "%": result = new SvgLength(SvgLengthType.Percentage, value); break;

                case "em": result = new SvgLength(SvgLengthType.Ems, value); break;

                case "ex": result = new SvgLength(SvgLengthType.Exs, value); break;

                case "px": result = new SvgLength(SvgLengthType.Pixel, value); break;

                case "cm": result = new SvgLength(SvgLengthType.Centimeter, value); break;

                case "mm": result = new SvgLength(SvgLengthType.Millimeter, value); break;

                case "in": result = new SvgLength(SvgLengthType.Inch, value); break;

                case "pt": result = new SvgLength(SvgLengthType.Point, value); break;

                case "pc": result = new SvgLength(SvgLengthType.Pica, value); break;

                default: result = null; return(false);
                }
                return(true);
            }
            result = new SvgLength(SvgLengthType.Number, value);
            return(true);
        }
コード例 #6
0
        internal static SvgAngle ParseInCss(string angleText)
        {
            var ptr = new StringPtr(angleText);

            ptr.AdvanceNumber();

            var value = float.Parse(angleText.Substring(0, ptr.Index), System.Globalization.CultureInfo.InvariantCulture);

            if (ptr.Index != angleText.Length)
            {
                var unit = angleText.Substring(ptr.Index).ToLower();
                switch (unit)
                {
                case "deg": return(new SvgAngle(SvgAngleType.Degree, value));

                case "rad": return(new SvgAngle(SvgAngleType.Radian, value));

                case "grad": return(new SvgAngle(SvgAngleType.Grade, value));
                }
                throw new ArgumentException(nameof(angleText));
            }
            return(new SvgAngle(SvgAngleType.Degree, value));
        }