示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
        }