Пример #1
0
        public ModDependency(string modRequirementString)
        {
            var match = Regex.Match(modRequirementString, @"^(?<isOptional>\? ?)?(?<isConflict>! ?)?(?<modName>[a-zA-Z0-9_-][a-zA-Z0-9_ -\.]+[a-zA-Z0-9_-])(?<notEqualVersion> *!= *[0-9\.]+)?(?<minVersion> *>=? *[0-9\.]+)?(?<maxVersion> *<=? *[0-9\.]+)?(?<exactVersion> *==? *[0-9\.]+)?$");

            if (!match.Success)
            {
                throw new ArgumentException($"Invalid mod requirement string: '{modRequirementString}'", nameof(modRequirementString));
            }
            isConflict = match.Groups["isConflict"].Success;
            isOptional = match.Groups["isOptional"].Success;
            modName    = match.Groups["modName"].Value;
            if (match.Groups["minVersion"].Success)
            {
                if (!modRequirementString.Contains(">="))
                {
                    minVersion = new ModVersion(match.Groups["minVersion"].Value.Replace(">", "").Trim());
                    minVersion = ModVersion.increment(minVersion);
                }
                else
                {
                    minVersion = new ModVersion(match.Groups["minVersion"].Value.Replace(">=", "").Trim());
                }
            }
            if (match.Groups["maxVersion"].Success)
            {
                if (!modRequirementString.Contains("<="))
                {
                    maxVersion = new ModVersion(match.Groups["maxVersion"].Value.Replace("<", "").Trim());
                    maxVersion = ModVersion.decrement(maxVersion);
                }
                else
                {
                    maxVersion = new ModVersion(match.Groups["maxVersion"].Value.Replace("<=", "").Trim());
                }
            }
            if (match.Groups["exactVersion"].Success)
            {
                minVersion = maxVersion = new ModVersion(match.Groups["exactVersion"].Value.Replace("=", "").Trim());
            }
            // @todo: it should allow versions lower than this, but it's not implemented yet
            if (match.Groups["notEqualVersion"].Success)
            {
                minVersion = new ModVersion(match.Groups["notEqualVersion"].Value.Replace("!=", "").Trim());
                minVersion = ModVersion.increment(minVersion);
            }
        }