private void parseBooleanPlaceholder(string[] formatTokens, ref PlaceholderInfo outInfo) { var m0 = new NumericMapping { minValue = 0, maxValue = 0 }; var m1 = new NumericMapping { minValue = 1, maxValue = 1 }; switch (formatTokens.Length) { case 1: switch (formatTokens[0].Length) { case 1: // nothing to do break; case 3: m0.representation = formatTokens[0][1].ToString(); m1.representation = formatTokens[0][2].ToString(); break; default: outInfo.result.HasError = true; outInfo.result.Message = "PlaceholderBinLengthInvalid"; return; } break; case 3: m0.representation = formatTokens[1]; m1.representation = formatTokens[2]; break; default: outInfo.result.HasError = true; outInfo.result.Message = "PlaceholderBinLengthInvalid"; return; } if ((null != m0.representation) && (null != m1.representation)) { outInfo.numericMappings = new List <NumericMapping>(); outInfo.numericMappings.Add(m0); outInfo.numericMappings.Add(m1); if (!isBinTextValid(m0.representation) || !isBinTextValid(m1.representation)) { outInfo.result.HasError = true; outInfo.result.Message = "PlaceholderBinInvalidAssign"; } if (m0.representation == m1.representation) { outInfo.result.HasError = true; outInfo.result.Message = "PlaceholderBinSameText"; } } }
private void parseExplicitNumericMapping(string[] valueRepresentation, ref PlaceholderInfo outInfo) { System.Diagnostics.Trace.Assert(valueRepresentation.Length == 2); string[] rangeStrings = valueRepresentation[0].Split('.'); if (rangeStrings.Length == 1) { DoubleVal value = parseValue(rangeStrings[0]); if (value.isValid) { NumericMapping mapping = new NumericMapping { minValue = value.value, maxValue = value.value, representation = valueRepresentation[1] }; outInfo.numericMappings.Add(mapping); } else { outInfo.result.HasError = true; outInfo.result.Message = "ExplicitMappingInvalidValue"; return; } } else if ((rangeStrings.Length == 3) && (rangeStrings[1].Length == 0)) { DoubleVal minValue = parseRangeValue(rangeStrings[0], /* isMin = */ true); DoubleVal maxValue = parseRangeValue(rangeStrings[2], /* isMin = */ false); if (minValue.isValid && maxValue.isValid) { if (minValue.value < maxValue.value) { NumericMapping mapping = new NumericMapping { minValue = minValue.value, isMinValueExcluded = minValue.isExcluded, maxValue = maxValue.value, isMaxValueExcluded = maxValue.isExcluded, representation = valueRepresentation[1] }; outInfo.numericMappings.Add(mapping); } else { outInfo.result.HasError = true; outInfo.result.Message = "ExplicitMappingInvertedRange"; return; } } else { outInfo.result.HasError = true; outInfo.result.Message = "ExplicitMappingInvRngVal"; return; } } else { outInfo.result.HasError = true; outInfo.result.Message = "ExplicitMappingInvalidRange"; return; } }
private void parseNumericMappings(bool allowImplicitValues, string[] formatTokens, ref PlaceholderInfo outInfo) { outInfo.numericMappings = null; if (formatTokens.Length > 1) { bool allowExplicitValues = true; // until an implicit value has been found int implicitValue = 0; // Ignore entry at index 0 (type/precision processed by caller) outInfo.numericMappings = new List <NumericMapping>(formatTokens.Length - 1); for (int i = 1; i < formatTokens.Length; i++) { string[] valueRepresentation = formatTokens[i].Split('='); switch (valueRepresentation.Length) { case 1: if (allowImplicitValues) { NumericMapping mapping = new NumericMapping { minValue = implicitValue, maxValue = implicitValue, representation = valueRepresentation[0] }; if (0 == mapping.representation.Length) { outInfo.result.HasError = true; outInfo.result.Message = "MappingEmptyImplicitValue"; return; } outInfo.numericMappings.Add(mapping); allowExplicitValues = false; implicitValue++; } else { outInfo.result.HasError = true; outInfo.result.Message = "MappingNoImplicitValues"; return; } break; case 2: if (allowExplicitValues) { parseExplicitNumericMapping(valueRepresentation, ref outInfo); if (outInfo.result.HasError) { return; } allowImplicitValues = false; } else { outInfo.result.HasError = true; outInfo.result.Message = "MappingNoExplicitValues"; return; } break; default: outInfo.result.HasError = true; outInfo.result.Message = "MappingWrongAssignment"; return; } } } }