/// <summary>
        /// Returns human-readable representation of the criterion predicate
        /// </summary>
        public static string ToHumanForm(this LocalizationCriterionPredicate pred)
        {
            switch (pred)
            {
            case LocalizationCriterionPredicate.MATCHES:
                return("matches");

            case LocalizationCriterionPredicate.DOESNT_MATCH:
                return("doesn't match");

            case LocalizationCriterionPredicate.IS_NULL:
                return("is null");

            case LocalizationCriterionPredicate.NO_LETTERS:
                return("contains no letters");

            case LocalizationCriterionPredicate.ONLY_CAPS:
                return("contains only CAPS and symbols");

            case LocalizationCriterionPredicate.NO_WHITESPACE:
                return("contains no whitespace");

            default:
                throw new Exception("Unknown LocalizationCriterionPredicate: " + pred);
            }
        }
        /// <summary>
        /// Treats given string as a result of ToRegData() method; parses it and sets values accordingly
        /// </summary>
        public override void FromRegData(string data)
        {
            base.FromRegData(data);
            string[] a = data.Split('/');
            if (a.Length < 7)
            {
                throw new Exception("Invalid registry data '" + data + "'");
            }

            Action    = (LocalizationCriterionAction)int.Parse(a[2]);
            Target    = (LocalizationCriterionTarget)int.Parse(a[3]);
            Predicate = (LocalizationCriterionPredicate)int.Parse(a[4]);
            Name      = a[5];
            Regex     = string.Join("/", a, 6, a.Length - 6);
        }