Skip to content

Commit

Permalink
Stricter parsing (#516)
Browse files Browse the repository at this point in the history
* Add abbreviations ″ and ′ to inch and foot

Found in the wiki

* Rename to LengthTests.FeetInches.cs

* Length: Add TryParseFeetInches() and ParseFeetInches()

Since parsing is generally made more strict, this method adds back the special parsing
to handle strings like: 1' 2"

* QuantityParser: Make parsing more strict

- Only parse the format "{value} {unit abbreviation}" where the spacing is optional
- No longer support parsing multiple quantities like "1 ft 2 in", use Length.ParseFeetInches() for that
- Move Trim() to inner-most level

* Regen

* Trim input in TryParseFeetInches()
  • Loading branch information
angularsen authored and tmilnthorp committed Oct 15, 2018
1 parent 485d028 commit 86b2efc
Show file tree
Hide file tree
Showing 101 changed files with 612 additions and 800 deletions.
10 changes: 4 additions & 6 deletions Common/GeneratedCode/Quantities/Acceleration.Common.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -679,8 +679,7 @@ private static Acceleration ParseInternal(string str, [CanBeNull] IFormatProvide

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.Parse<Acceleration, AccelerationUnit>(str, provider, ParseUnitInternal, From,
(x, y) => From(x.MetersPerSecondSquared + y.MetersPerSecondSquared, BaseUnit));
return QuantityParser.Default.Parse<Acceleration, AccelerationUnit>(str, provider, ParseUnitInternal, From);
}

/// <summary>
Expand All @@ -702,8 +701,7 @@ private static bool TryParseInternal([CanBeNull] string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.TryParse<Acceleration, AccelerationUnit>(str, provider, TryParseUnitInternal, From,
(x, y) => From(x.MetersPerSecondSquared + y.MetersPerSecondSquared, BaseUnit), out result);
return QuantityParser.Default.TryParse<Acceleration, AccelerationUnit>(str, provider, TryParseUnitInternal, From, out result);
}

/// <summary>
Expand All @@ -720,7 +718,7 @@ private static AccelerationUnit ParseUnitInternal(string str, IFormatProvider pr
{
if (str == null) throw new ArgumentNullException(nameof(str));

var unit = UnitParser.Default.Parse<AccelerationUnit>(str.Trim(), provider);
var unit = UnitParser.Default.Parse<AccelerationUnit>(str, provider);

if (unit == AccelerationUnit.Undefined)
{
Expand Down Expand Up @@ -750,7 +748,7 @@ private static bool TryParseUnitInternal(string str, IFormatProvider provider, o
if(string.IsNullOrWhiteSpace(str))
return false;

if(!UnitParser.Default.TryParse<AccelerationUnit>(str.Trim(), provider, out unit))
if(!UnitParser.Default.TryParse<AccelerationUnit>(str, provider, out unit))
return false;

if(unit == AccelerationUnit.Undefined)
Expand Down
10 changes: 4 additions & 6 deletions Common/GeneratedCode/Quantities/AmountOfSubstance.Common.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -701,8 +701,7 @@ private static AmountOfSubstance ParseInternal(string str, [CanBeNull] IFormatPr

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.Parse<AmountOfSubstance, AmountOfSubstanceUnit>(str, provider, ParseUnitInternal, From,
(x, y) => From(x.Moles + y.Moles, BaseUnit));
return QuantityParser.Default.Parse<AmountOfSubstance, AmountOfSubstanceUnit>(str, provider, ParseUnitInternal, From);
}

/// <summary>
Expand All @@ -724,8 +723,7 @@ private static bool TryParseInternal([CanBeNull] string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.TryParse<AmountOfSubstance, AmountOfSubstanceUnit>(str, provider, TryParseUnitInternal, From,
(x, y) => From(x.Moles + y.Moles, BaseUnit), out result);
return QuantityParser.Default.TryParse<AmountOfSubstance, AmountOfSubstanceUnit>(str, provider, TryParseUnitInternal, From, out result);
}

/// <summary>
Expand All @@ -742,7 +740,7 @@ private static AmountOfSubstanceUnit ParseUnitInternal(string str, IFormatProvid
{
if (str == null) throw new ArgumentNullException(nameof(str));

var unit = UnitParser.Default.Parse<AmountOfSubstanceUnit>(str.Trim(), provider);
var unit = UnitParser.Default.Parse<AmountOfSubstanceUnit>(str, provider);

if (unit == AmountOfSubstanceUnit.Undefined)
{
Expand Down Expand Up @@ -772,7 +770,7 @@ private static bool TryParseUnitInternal(string str, IFormatProvider provider, o
if(string.IsNullOrWhiteSpace(str))
return false;

if(!UnitParser.Default.TryParse<AmountOfSubstanceUnit>(str.Trim(), provider, out unit))
if(!UnitParser.Default.TryParse<AmountOfSubstanceUnit>(str, provider, out unit))
return false;

if(unit == AmountOfSubstanceUnit.Undefined)
Expand Down
10 changes: 4 additions & 6 deletions Common/GeneratedCode/Quantities/AmplitudeRatio.Common.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -480,8 +480,7 @@ private static AmplitudeRatio ParseInternal(string str, [CanBeNull] IFormatProvi

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.Parse<AmplitudeRatio, AmplitudeRatioUnit>(str, provider, ParseUnitInternal, From,
(x, y) => From(x.DecibelVolts + y.DecibelVolts, BaseUnit));
return QuantityParser.Default.Parse<AmplitudeRatio, AmplitudeRatioUnit>(str, provider, ParseUnitInternal, From);
}

/// <summary>
Expand All @@ -503,8 +502,7 @@ private static bool TryParseInternal([CanBeNull] string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.TryParse<AmplitudeRatio, AmplitudeRatioUnit>(str, provider, TryParseUnitInternal, From,
(x, y) => From(x.DecibelVolts + y.DecibelVolts, BaseUnit), out result);
return QuantityParser.Default.TryParse<AmplitudeRatio, AmplitudeRatioUnit>(str, provider, TryParseUnitInternal, From, out result);
}

/// <summary>
Expand All @@ -521,7 +519,7 @@ private static AmplitudeRatioUnit ParseUnitInternal(string str, IFormatProvider
{
if (str == null) throw new ArgumentNullException(nameof(str));

var unit = UnitParser.Default.Parse<AmplitudeRatioUnit>(str.Trim(), provider);
var unit = UnitParser.Default.Parse<AmplitudeRatioUnit>(str, provider);

if (unit == AmplitudeRatioUnit.Undefined)
{
Expand Down Expand Up @@ -551,7 +549,7 @@ private static bool TryParseUnitInternal(string str, IFormatProvider provider, o
if(string.IsNullOrWhiteSpace(str))
return false;

if(!UnitParser.Default.TryParse<AmplitudeRatioUnit>(str.Trim(), provider, out unit))
if(!UnitParser.Default.TryParse<AmplitudeRatioUnit>(str, provider, out unit))
return false;

if(unit == AmplitudeRatioUnit.Undefined)
Expand Down
10 changes: 4 additions & 6 deletions Common/GeneratedCode/Quantities/Angle.Common.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -700,8 +700,7 @@ private static Angle ParseInternal(string str, [CanBeNull] IFormatProvider provi

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.Parse<Angle, AngleUnit>(str, provider, ParseUnitInternal, From,
(x, y) => From(x.Degrees + y.Degrees, BaseUnit));
return QuantityParser.Default.Parse<Angle, AngleUnit>(str, provider, ParseUnitInternal, From);
}

/// <summary>
Expand All @@ -723,8 +722,7 @@ private static bool TryParseInternal([CanBeNull] string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.TryParse<Angle, AngleUnit>(str, provider, TryParseUnitInternal, From,
(x, y) => From(x.Degrees + y.Degrees, BaseUnit), out result);
return QuantityParser.Default.TryParse<Angle, AngleUnit>(str, provider, TryParseUnitInternal, From, out result);
}

/// <summary>
Expand All @@ -741,7 +739,7 @@ private static AngleUnit ParseUnitInternal(string str, IFormatProvider provider
{
if (str == null) throw new ArgumentNullException(nameof(str));

var unit = UnitParser.Default.Parse<AngleUnit>(str.Trim(), provider);
var unit = UnitParser.Default.Parse<AngleUnit>(str, provider);

if (unit == AngleUnit.Undefined)
{
Expand Down Expand Up @@ -771,7 +769,7 @@ private static bool TryParseUnitInternal(string str, IFormatProvider provider, o
if(string.IsNullOrWhiteSpace(str))
return false;

if(!UnitParser.Default.TryParse<AngleUnit>(str.Trim(), provider, out unit))
if(!UnitParser.Default.TryParse<AngleUnit>(str, provider, out unit))
return false;

if(unit == AngleUnit.Undefined)
Expand Down
10 changes: 4 additions & 6 deletions Common/GeneratedCode/Quantities/ApparentEnergy.Common.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -459,8 +459,7 @@ private static ApparentEnergy ParseInternal(string str, [CanBeNull] IFormatProvi

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.Parse<ApparentEnergy, ApparentEnergyUnit>(str, provider, ParseUnitInternal, From,
(x, y) => From(x.VoltampereHours + y.VoltampereHours, BaseUnit));
return QuantityParser.Default.Parse<ApparentEnergy, ApparentEnergyUnit>(str, provider, ParseUnitInternal, From);
}

/// <summary>
Expand All @@ -482,8 +481,7 @@ private static bool TryParseInternal([CanBeNull] string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.TryParse<ApparentEnergy, ApparentEnergyUnit>(str, provider, TryParseUnitInternal, From,
(x, y) => From(x.VoltampereHours + y.VoltampereHours, BaseUnit), out result);
return QuantityParser.Default.TryParse<ApparentEnergy, ApparentEnergyUnit>(str, provider, TryParseUnitInternal, From, out result);
}

/// <summary>
Expand All @@ -500,7 +498,7 @@ private static ApparentEnergyUnit ParseUnitInternal(string str, IFormatProvider
{
if (str == null) throw new ArgumentNullException(nameof(str));

var unit = UnitParser.Default.Parse<ApparentEnergyUnit>(str.Trim(), provider);
var unit = UnitParser.Default.Parse<ApparentEnergyUnit>(str, provider);

if (unit == ApparentEnergyUnit.Undefined)
{
Expand Down Expand Up @@ -530,7 +528,7 @@ private static bool TryParseUnitInternal(string str, IFormatProvider provider, o
if(string.IsNullOrWhiteSpace(str))
return false;

if(!UnitParser.Default.TryParse<ApparentEnergyUnit>(str.Trim(), provider, out unit))
if(!UnitParser.Default.TryParse<ApparentEnergyUnit>(str, provider, out unit))
return false;

if(unit == ApparentEnergyUnit.Undefined)
Expand Down
10 changes: 4 additions & 6 deletions Common/GeneratedCode/Quantities/ApparentPower.Common.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -481,8 +481,7 @@ private static ApparentPower ParseInternal(string str, [CanBeNull] IFormatProvid

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.Parse<ApparentPower, ApparentPowerUnit>(str, provider, ParseUnitInternal, From,
(x, y) => From(x.Voltamperes + y.Voltamperes, BaseUnit));
return QuantityParser.Default.Parse<ApparentPower, ApparentPowerUnit>(str, provider, ParseUnitInternal, From);
}

/// <summary>
Expand All @@ -504,8 +503,7 @@ private static bool TryParseInternal([CanBeNull] string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.TryParse<ApparentPower, ApparentPowerUnit>(str, provider, TryParseUnitInternal, From,
(x, y) => From(x.Voltamperes + y.Voltamperes, BaseUnit), out result);
return QuantityParser.Default.TryParse<ApparentPower, ApparentPowerUnit>(str, provider, TryParseUnitInternal, From, out result);
}

/// <summary>
Expand All @@ -522,7 +520,7 @@ private static ApparentPowerUnit ParseUnitInternal(string str, IFormatProvider p
{
if (str == null) throw new ArgumentNullException(nameof(str));

var unit = UnitParser.Default.Parse<ApparentPowerUnit>(str.Trim(), provider);
var unit = UnitParser.Default.Parse<ApparentPowerUnit>(str, provider);

if (unit == ApparentPowerUnit.Undefined)
{
Expand Down Expand Up @@ -552,7 +550,7 @@ private static bool TryParseUnitInternal(string str, IFormatProvider provider, o
if(string.IsNullOrWhiteSpace(str))
return false;

if(!UnitParser.Default.TryParse<ApparentPowerUnit>(str.Trim(), provider, out unit))
if(!UnitParser.Default.TryParse<ApparentPowerUnit>(str, provider, out unit))
return false;

if(unit == ApparentPowerUnit.Undefined)
Expand Down
10 changes: 4 additions & 6 deletions Common/GeneratedCode/Quantities/Area.Common.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -679,8 +679,7 @@ private static Area ParseInternal(string str, [CanBeNull] IFormatProvider provid

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.Parse<Area, AreaUnit>(str, provider, ParseUnitInternal, From,
(x, y) => From(x.SquareMeters + y.SquareMeters, BaseUnit));
return QuantityParser.Default.Parse<Area, AreaUnit>(str, provider, ParseUnitInternal, From);
}

/// <summary>
Expand All @@ -702,8 +701,7 @@ private static bool TryParseInternal([CanBeNull] string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.TryParse<Area, AreaUnit>(str, provider, TryParseUnitInternal, From,
(x, y) => From(x.SquareMeters + y.SquareMeters, BaseUnit), out result);
return QuantityParser.Default.TryParse<Area, AreaUnit>(str, provider, TryParseUnitInternal, From, out result);
}

/// <summary>
Expand All @@ -720,7 +718,7 @@ private static AreaUnit ParseUnitInternal(string str, IFormatProvider provider =
{
if (str == null) throw new ArgumentNullException(nameof(str));

var unit = UnitParser.Default.Parse<AreaUnit>(str.Trim(), provider);
var unit = UnitParser.Default.Parse<AreaUnit>(str, provider);

if (unit == AreaUnit.Undefined)
{
Expand Down Expand Up @@ -750,7 +748,7 @@ private static bool TryParseUnitInternal(string str, IFormatProvider provider, o
if(string.IsNullOrWhiteSpace(str))
return false;

if(!UnitParser.Default.TryParse<AreaUnit>(str.Trim(), provider, out unit))
if(!UnitParser.Default.TryParse<AreaUnit>(str, provider, out unit))
return false;

if(unit == AreaUnit.Undefined)
Expand Down
10 changes: 4 additions & 6 deletions Common/GeneratedCode/Quantities/AreaDensity.Common.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -415,8 +415,7 @@ private static AreaDensity ParseInternal(string str, [CanBeNull] IFormatProvider

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.Parse<AreaDensity, AreaDensityUnit>(str, provider, ParseUnitInternal, From,
(x, y) => From(x.KilogramsPerSquareMeter + y.KilogramsPerSquareMeter, BaseUnit));
return QuantityParser.Default.Parse<AreaDensity, AreaDensityUnit>(str, provider, ParseUnitInternal, From);
}

/// <summary>
Expand All @@ -438,8 +437,7 @@ private static bool TryParseInternal([CanBeNull] string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.TryParse<AreaDensity, AreaDensityUnit>(str, provider, TryParseUnitInternal, From,
(x, y) => From(x.KilogramsPerSquareMeter + y.KilogramsPerSquareMeter, BaseUnit), out result);
return QuantityParser.Default.TryParse<AreaDensity, AreaDensityUnit>(str, provider, TryParseUnitInternal, From, out result);
}

/// <summary>
Expand All @@ -456,7 +454,7 @@ private static AreaDensityUnit ParseUnitInternal(string str, IFormatProvider pro
{
if (str == null) throw new ArgumentNullException(nameof(str));

var unit = UnitParser.Default.Parse<AreaDensityUnit>(str.Trim(), provider);
var unit = UnitParser.Default.Parse<AreaDensityUnit>(str, provider);

if (unit == AreaDensityUnit.Undefined)
{
Expand Down Expand Up @@ -486,7 +484,7 @@ private static bool TryParseUnitInternal(string str, IFormatProvider provider, o
if(string.IsNullOrWhiteSpace(str))
return false;

if(!UnitParser.Default.TryParse<AreaDensityUnit>(str.Trim(), provider, out unit))
if(!UnitParser.Default.TryParse<AreaDensityUnit>(str, provider, out unit))
return false;

if(unit == AreaDensityUnit.Undefined)
Expand Down
10 changes: 4 additions & 6 deletions Common/GeneratedCode/Quantities/AreaMomentOfInertia.Common.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -525,8 +525,7 @@ private static AreaMomentOfInertia ParseInternal(string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.Parse<AreaMomentOfInertia, AreaMomentOfInertiaUnit>(str, provider, ParseUnitInternal, From,
(x, y) => From(x.MetersToTheFourth + y.MetersToTheFourth, BaseUnit));
return QuantityParser.Default.Parse<AreaMomentOfInertia, AreaMomentOfInertiaUnit>(str, provider, ParseUnitInternal, From);
}

/// <summary>
Expand All @@ -548,8 +547,7 @@ private static bool TryParseInternal([CanBeNull] string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.TryParse<AreaMomentOfInertia, AreaMomentOfInertiaUnit>(str, provider, TryParseUnitInternal, From,
(x, y) => From(x.MetersToTheFourth + y.MetersToTheFourth, BaseUnit), out result);
return QuantityParser.Default.TryParse<AreaMomentOfInertia, AreaMomentOfInertiaUnit>(str, provider, TryParseUnitInternal, From, out result);
}

/// <summary>
Expand All @@ -566,7 +564,7 @@ private static AreaMomentOfInertiaUnit ParseUnitInternal(string str, IFormatProv
{
if (str == null) throw new ArgumentNullException(nameof(str));

var unit = UnitParser.Default.Parse<AreaMomentOfInertiaUnit>(str.Trim(), provider);
var unit = UnitParser.Default.Parse<AreaMomentOfInertiaUnit>(str, provider);

if (unit == AreaMomentOfInertiaUnit.Undefined)
{
Expand Down Expand Up @@ -596,7 +594,7 @@ private static bool TryParseUnitInternal(string str, IFormatProvider provider, o
if(string.IsNullOrWhiteSpace(str))
return false;

if(!UnitParser.Default.TryParse<AreaMomentOfInertiaUnit>(str.Trim(), provider, out unit))
if(!UnitParser.Default.TryParse<AreaMomentOfInertiaUnit>(str, provider, out unit))
return false;

if(unit == AreaMomentOfInertiaUnit.Undefined)
Expand Down
10 changes: 4 additions & 6 deletions Common/GeneratedCode/Quantities/BitRate.Common.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -964,8 +964,7 @@ private static BitRate ParseInternal(string str, [CanBeNull] IFormatProvider pro

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.Parse<BitRate, BitRateUnit>(str, provider, ParseUnitInternal, From,
(x, y) => From(x.BitsPerSecond + y.BitsPerSecond, BaseUnit));
return QuantityParser.Default.Parse<BitRate, BitRateUnit>(str, provider, ParseUnitInternal, From);
}

/// <summary>
Expand All @@ -987,8 +986,7 @@ private static bool TryParseInternal([CanBeNull] string str, [CanBeNull] IFormat

provider = provider ?? GlobalConfiguration.DefaultCulture;

return QuantityParser.Default.TryParse<BitRate, BitRateUnit>(str, provider, TryParseUnitInternal, From,
(x, y) => From(x.BitsPerSecond + y.BitsPerSecond, BaseUnit), out result);
return QuantityParser.Default.TryParse<BitRate, BitRateUnit>(str, provider, TryParseUnitInternal, From, out result);
}

/// <summary>
Expand All @@ -1005,7 +1003,7 @@ private static BitRateUnit ParseUnitInternal(string str, IFormatProvider provide
{
if (str == null) throw new ArgumentNullException(nameof(str));

var unit = UnitParser.Default.Parse<BitRateUnit>(str.Trim(), provider);
var unit = UnitParser.Default.Parse<BitRateUnit>(str, provider);

if (unit == BitRateUnit.Undefined)
{
Expand Down Expand Up @@ -1035,7 +1033,7 @@ private static bool TryParseUnitInternal(string str, IFormatProvider provider, o
if(string.IsNullOrWhiteSpace(str))
return false;

if(!UnitParser.Default.TryParse<BitRateUnit>(str.Trim(), provider, out unit))
if(!UnitParser.Default.TryParse<BitRateUnit>(str, provider, out unit))
return false;

if(unit == BitRateUnit.Undefined)
Expand Down
Loading

0 comments on commit 86b2efc

Please sign in to comment.