From 39bd2f074aefbc2efcb5f52e2fb4149493240995 Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Tue, 18 Oct 2022 07:58:46 +0000 Subject: [PATCH] add parameters for number styles and provider to double parse --- src/Avalonia.Base/Media/Color.cs | 10 +++---- src/Avalonia.Base/Media/HslColor.cs | 8 +++--- src/Avalonia.Base/Media/HsvColor.cs | 8 +++--- src/Avalonia.Base/Utilities/SpanHelpers.cs | 26 +++++++------------ src/Avalonia.Build.Tasks/SpanCompat.cs | 17 +++++------- .../Markup/Parsers/SelectorGrammar.cs | 4 +-- 6 files changed, 32 insertions(+), 41 deletions(-) diff --git a/src/Avalonia.Base/Media/Color.cs b/src/Avalonia.Base/Media/Color.cs index 14ef357393..5470a735b3 100644 --- a/src/Avalonia.Base/Media/Color.cs +++ b/src/Avalonia.Base/Media/Color.cs @@ -296,7 +296,7 @@ namespace Avalonia.Media return false; } - if (!input.TryParseFromHexToUInt(out var parsed)) + if (!input.TryParseUInt(NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var parsed)) { return false; } @@ -409,7 +409,7 @@ namespace Avalonia.Media if (percentIndex >= 0) { - var result = inString.Slice(0, percentIndex).TryParseNumberToDouble( + var result = inString.Slice(0, percentIndex).TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out double percentage); outByte = (byte)Math.Round((percentage / 100.0) * 255.0); @@ -417,7 +417,7 @@ namespace Avalonia.Media } else { - return inString.TryParseNumberToByte( + return inString.TryParseByte(NumberStyles.Number, CultureInfo.InvariantCulture, out outByte); } } @@ -430,7 +430,7 @@ namespace Avalonia.Media if (percentIndex >= 0) { - var result = inString.Slice(0, percentIndex).TryParseNumberToDouble( + var result = inString.Slice(0, percentIndex).TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out double percentage); outDouble = percentage / 100.0; @@ -438,7 +438,7 @@ namespace Avalonia.Media } else { - return inString.TryParseNumberToDouble( + return inString.TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out outDouble); } } diff --git a/src/Avalonia.Base/Media/HslColor.cs b/src/Avalonia.Base/Media/HslColor.cs index 5a9e5cd54b..425a3138c3 100644 --- a/src/Avalonia.Base/Media/HslColor.cs +++ b/src/Avalonia.Base/Media/HslColor.cs @@ -302,7 +302,7 @@ namespace Avalonia.Media if (components.Length == 3) // HSL { - if (components[0].AsSpan().TryParseNumberToDouble(out double hue) && + if (components[0].AsSpan().TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out double hue) && TryInternalParse(components[1].AsSpan(), out double saturation) && TryInternalParse(components[2].AsSpan(), out double lightness)) { @@ -312,7 +312,7 @@ namespace Avalonia.Media } else if (components.Length == 4) // HSLA { - if (components[0].AsSpan().TryParseNumberToDouble(out double hue) && + if (components[0].AsSpan().TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out double hue) && TryInternalParse(components[1].AsSpan(), out double saturation) && TryInternalParse(components[2].AsSpan(), out double lightness) && TryInternalParse(components[3].AsSpan(), out double alpha)) @@ -330,7 +330,7 @@ namespace Avalonia.Media if (percentIndex >= 0) { - var result = inString.Slice(0, percentIndex).TryParseNumberToDouble( + var result = inString.Slice(0, percentIndex).TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out double percentage); outDouble = percentage / 100.0; @@ -338,7 +338,7 @@ namespace Avalonia.Media } else { - return inString.TryParseNumberToDouble( + return inString.TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out outDouble); } } diff --git a/src/Avalonia.Base/Media/HsvColor.cs b/src/Avalonia.Base/Media/HsvColor.cs index 30a6c7ef4e..9f95b31518 100644 --- a/src/Avalonia.Base/Media/HsvColor.cs +++ b/src/Avalonia.Base/Media/HsvColor.cs @@ -302,7 +302,7 @@ namespace Avalonia.Media if (components.Length == 3) // HSV { - if (components[0].AsSpan().TryParseNumberToDouble(out double hue) && + if (components[0].AsSpan().TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out double hue) && TryInternalParse(components[1].AsSpan(), out double saturation) && TryInternalParse(components[2].AsSpan(), out double value)) { @@ -312,7 +312,7 @@ namespace Avalonia.Media } else if (components.Length == 4) // HSVA { - if (components[0].AsSpan().TryParseNumberToDouble(out double hue) && + if (components[0].AsSpan().TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out double hue) && TryInternalParse(components[1].AsSpan(), out double saturation) && TryInternalParse(components[2].AsSpan(), out double value) && TryInternalParse(components[3].AsSpan(), out double alpha)) @@ -330,7 +330,7 @@ namespace Avalonia.Media if (percentIndex >= 0) { - var result = inString.Slice(0, percentIndex).TryParseNumberToDouble( + var result = inString.Slice(0, percentIndex).TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out double percentage); outDouble = percentage / 100.0; @@ -338,7 +338,7 @@ namespace Avalonia.Media } else { - return inString.TryParseNumberToDouble( + return inString.TryParseDouble(NumberStyles.Number, CultureInfo.InvariantCulture, out outDouble); } } diff --git a/src/Avalonia.Base/Utilities/SpanHelpers.cs b/src/Avalonia.Base/Utilities/SpanHelpers.cs index 6b779dfd87..9a5dce9798 100644 --- a/src/Avalonia.Base/Utilities/SpanHelpers.cs +++ b/src/Avalonia.Base/Utilities/SpanHelpers.cs @@ -7,19 +7,17 @@ namespace Avalonia.Utilities public static class SpanHelpers { [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool TryParseFromHexToUInt(this ReadOnlySpan span, out uint value) + public static bool TryParseUInt(this ReadOnlySpan span, NumberStyles style, IFormatProvider provider, out uint value) { #if NETSTANDARD2_0 - return uint.TryParse(span.ToString(), NumberStyles.HexNumber, CultureInfo.InvariantCulture, - out value); + return uint.TryParse(span.ToString(), style, provider, out value); #else - return uint.TryParse(span, NumberStyles.HexNumber, CultureInfo.InvariantCulture, - out value); + return uint.TryParse(span, style, provider, out value); #endif } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool TryParseToInt(this ReadOnlySpan span, out int value) + public static bool TryParseInt(this ReadOnlySpan span, out int value) { #if NETSTANDARD2_0 return int.TryParse(span.ToString(), out value); @@ -29,26 +27,22 @@ namespace Avalonia.Utilities } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool TryParseNumberToDouble(this ReadOnlySpan span, out double value) + public static bool TryParseDouble(this ReadOnlySpan span, NumberStyles style, IFormatProvider provider, out double value) { #if NETSTANDARD2_0 - return double.TryParse(span.ToString(), NumberStyles.Number, CultureInfo.InvariantCulture, - out value); + return double.TryParse(span.ToString(), style, provider, out value); #else - return double.TryParse(span, NumberStyles.Number, CultureInfo.InvariantCulture, - out value); + return double.TryParse(span, style, provider, out value); #endif } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool TryParseNumberToByte(this ReadOnlySpan span, out byte value) + public static bool TryParseByte(this ReadOnlySpan span, NumberStyles style, IFormatProvider provider, out byte value) { #if NETSTANDARD2_0 - return byte.TryParse(span.ToString(), NumberStyles.Number, CultureInfo.InvariantCulture, - out value); + return byte.TryParse(span.ToString(), style, provider, out value); #else - return byte.TryParse(span, NumberStyles.Number, CultureInfo.InvariantCulture, - out value); + return byte.TryParse(span, style, provider, out value); #endif } } diff --git a/src/Avalonia.Build.Tasks/SpanCompat.cs b/src/Avalonia.Build.Tasks/SpanCompat.cs index af78178b5e..be59ff8b6c 100644 --- a/src/Avalonia.Build.Tasks/SpanCompat.cs +++ b/src/Avalonia.Build.Tasks/SpanCompat.cs @@ -87,30 +87,27 @@ namespace System } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool TryParseFromHexToUInt(out uint value) + public bool TryParseUInt(NumberStyles style, IFormatProvider provider, out uint value) { - return uint.TryParse(ToString(), NumberStyles.HexNumber, CultureInfo.InvariantCulture, - out value); + return uint.TryParse(ToString(), style, provider, out value); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool TryParseToInt(out int value) + public bool TryParseInt(out int value) { return int.TryParse(ToString(), out value); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool TryParseNumberToDouble(out double value) + public bool TryParseDouble(NumberStyles style, IFormatProvider provider, out double value) { - return double.TryParse(ToString(), NumberStyles.Number, CultureInfo.InvariantCulture, - out value); + return double.TryParse(ToString(), style, provider, out value); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool TryParseNumberToByte(out byte value) + public bool TryParseByte(NumberStyles style, IFormatProvider provider, out byte value) { - return byte.TryParse(ToString(), NumberStyles.Number, CultureInfo.InvariantCulture, - out value); + return byte.TryParse(ToString(), style, provider, out value); } public override string ToString() => _length == 0 ? string.Empty : _s.Substring(_start, _length); diff --git a/src/Markup/Avalonia.Markup/Markup/Parsers/SelectorGrammar.cs b/src/Markup/Avalonia.Markup/Markup/Parsers/SelectorGrammar.cs index a5e11cd233..4d6d16a3ce 100644 --- a/src/Markup/Avalonia.Markup/Markup/Parsers/SelectorGrammar.cs +++ b/src/Markup/Avalonia.Markup/Markup/Parsers/SelectorGrammar.cs @@ -417,7 +417,7 @@ namespace Avalonia.Markup.Parsers { stepOrOffset = -1; } - else if (!stepOrOffsetStr.TryParseToInt(out stepOrOffset)) + else if (!stepOrOffsetStr.TryParseInt(out stepOrOffset)) { throw new ExpressionParseException(r.Position, "Couldn't parse nth-child step or offset value. Integer was expected."); } @@ -462,7 +462,7 @@ namespace Avalonia.Markup.Parsers r.SkipWhitespace(); if (sign != 0 - && !r.TakeUntil(')').TryParseToInt(out offset)) + && !r.TakeUntil(')').TryParseInt(out offset)) { throw new ExpressionParseException(r.Position, "Couldn't parse nth-child offset value. Integer was expected."); }