Browse Source

add parameters for number styles and provider to double parse

pull/9215/head
Emmanuel Hansen 3 years ago
parent
commit
39bd2f074a
  1. 10
      src/Avalonia.Base/Media/Color.cs
  2. 8
      src/Avalonia.Base/Media/HslColor.cs
  3. 8
      src/Avalonia.Base/Media/HsvColor.cs
  4. 26
      src/Avalonia.Base/Utilities/SpanHelpers.cs
  5. 17
      src/Avalonia.Build.Tasks/SpanCompat.cs
  6. 4
      src/Markup/Avalonia.Markup/Markup/Parsers/SelectorGrammar.cs

10
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);
}
}

8
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);
}
}

8
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);
}
}

26
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<char> span, out uint value)
public static bool TryParseUInt(this ReadOnlySpan<char> 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<char> span, out int value)
public static bool TryParseInt(this ReadOnlySpan<char> 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<char> span, out double value)
public static bool TryParseDouble(this ReadOnlySpan<char> 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<char> span, out byte value)
public static bool TryParseByte(this ReadOnlySpan<char> 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
}
}

17
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);

4
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.");
}

Loading…
Cancel
Save