protected override bool TryParseOffset(string offset, OffsetAxis axis, FileRange range, out IXmlComponentPointOffset result) { if (!offset.Contains("$")) { // Does not contain a variable return(base.TryParseOffset(offset, axis, range, out result)); } offset = offset.Replace("(", "").Replace(")", ""); var variableIndex = offset.IndexOf("$"); var variableName = offset.Substring(variableIndex + 1); // Check variable exists if (!definitionsSection.Definitions.TryGetValue(variableName, out var variableValues)) { logger.Log(LogLevel.Error, range, $"Variable '{variableName}' does not exist", null); result = null; return(false); } // Check all possible values are valid var parsedValues = new ConditionalCollection <double>(); foreach (var variableValue in variableValues) { if (!double.TryParse(variableValue.Value, NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var parsedValue)) { logger.Log(LogLevel.Error, range, $"Value '{variableValue.Value}' for ${variableName} is not a valid decimal", null); result = null; return(false); } parsedValues.Add(new TypeDescription.Conditions.Conditional <double>(parsedValue, variableValue.Conditions)); } result = new ComponentPointOffsetWithDefinition(offset.First() == '-', parsedValues, axis); return(true); }
protected virtual bool TryParseOffset(string offset, OffsetAxis axis, FileRange range, out IXmlComponentPointOffset result) { if (offset.Length == 0) { _logger.Log(LogLevel.Error, range, $"Expected a number before '{axis.ToString().ToLowerInvariant()}'", null); result = null; return(false); } if (!double.TryParse(offset, NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var offsetValue)) { _logger.Log(LogLevel.Error, range, $"Unable to parse '{offset}' as double", null); result = null; return(false); } result = new XmlComponentPointOffset(offsetValue, axis); return(true); }