/// <summary> /// Parses the size property value (SZ) /// Can be either nubmer or composed number : number /// </summary> /// <param name="value">Value to parse</param> public static ISgfPropertyValue SizeParser(string value) { if (value == null) { throw new ArgumentNullException(nameof(value)); } if (value.Contains(":")) { //non-square game board return(SgfComposePropertyValue <int, int> .Parse(value, SgfNumberValue.Parse, SgfNumberValue.Parse)); } //square game board return(SgfNumberValue.Parse(value)); }
/// <summary> /// Creates a parser that allows only a certain range of number values /// </summary> /// <param name="min">Minimum value</param> /// <param name="max">Maximum value</param> /// <returns></returns> public static SgfPropertyValueParser RangedNumberParser(int min, int max) { if (max < min) { throw new ArgumentOutOfRangeException(nameof(max), $"Specified range for SGF ranged number parser is invalid ({min}-{max})"); } return((value) => { var parsedValue = SgfNumberValue.Parse(value); if (parsedValue.Value < min || max < parsedValue.Value) { throw new SgfParseException($"Property numeric value outside of the allowed range ({value} - only {min} - {max} allowed)."); } return parsedValue; }); }