internal static YesNoType GetAttributeYesNoValue(SourceLineNumberCollection sourceLineNumbers, XmlAttribute attribute, Action <MessageEventArgs> messageHandler) { string value = Common.GetAttributeValue(sourceLineNumbers, attribute, EmptyRule.CanBeWhitespaceOnly, messageHandler); if (0 < value.Length) { switch (Wix.Enums.ParseYesNoType(value)) { case Wix.YesNoType.no: return(YesNoType.No); case Wix.YesNoType.yes: return(YesNoType.Yes); case Wix.YesNoType.NotSet: // Previous code never returned 'NotSet'! break; default: if (null != messageHandler) { messageHandler(WixErrors.IllegalYesNoValue(sourceLineNumbers, attribute.OwnerElement.Name, attribute.Name, value)); } break; } } return(YesNoType.IllegalValue); }
internal static string GetAttributeIdentifierValue(SourceLineNumberCollection sourceLineNumbers, XmlAttribute attribute, Action <MessageEventArgs> messageHandler) { if (null == attribute) { throw new ArgumentNullException("attribute"); } string value = Common.GetAttributeValue(sourceLineNumbers, attribute, EmptyRule.CanBeWhitespaceOnly, messageHandler); if (Common.IsIdentifier(value)) { if (72 < value.Length && null != messageHandler) { messageHandler(WixWarnings.IdentifierTooLong(sourceLineNumbers, attribute.OwnerElement.Name, attribute.Name, value)); } return(value); } else { if (value.StartsWith("[", StringComparison.Ordinal) && value.EndsWith("]", StringComparison.Ordinal) && null != messageHandler) { messageHandler(WixErrors.IllegalIdentifierLooksLikeFormatted(sourceLineNumbers, attribute.OwnerElement.Name, attribute.Name, value)); } else if (null != messageHandler) { messageHandler(WixErrors.IllegalIdentifier(sourceLineNumbers, attribute.OwnerElement.Name, attribute.Name, value)); } return(String.Empty); } }
public static int GetAttributeIntegerValue(SourceLineNumberCollection sourceLineNumbers, XmlAttribute attribute, int minimum, int maximum, Action <MessageEventArgs> messageHandler) { if (null == attribute) { throw new ArgumentNullException("attribute"); } Debug.Assert(minimum > CompilerCore.IntegerNotSet && minimum > CompilerCore.IllegalInteger, "The legal values for this attribute collide with at least one sentinel used during parsing."); string value = Common.GetAttributeValue(sourceLineNumbers, attribute, EmptyRule.CanBeWhitespaceOnly, messageHandler); if (0 < value.Length) { try { int integer = Convert.ToInt32(value, CultureInfo.InvariantCulture.NumberFormat); if (CompilerCore.IntegerNotSet == integer || CompilerCore.IllegalInteger == integer) { messageHandler(WixErrors.IntegralValueSentinelCollision(sourceLineNumbers, integer)); } else if (minimum > integer || maximum < integer) { messageHandler(WixErrors.IntegralValueOutOfRange(sourceLineNumbers, attribute.OwnerElement.Name, attribute.Name, integer, minimum, maximum)); integer = CompilerCore.IllegalInteger; } return(integer); } catch (FormatException) { messageHandler(WixErrors.IllegalIntegerValue(sourceLineNumbers, attribute.OwnerElement.Name, attribute.Name, value)); } catch (OverflowException) { messageHandler(WixErrors.IllegalIntegerValue(sourceLineNumbers, attribute.OwnerElement.Name, attribute.Name, value)); } } return(CompilerCore.IllegalInteger); }