132 lines
5.2 KiB
C#
132 lines
5.2 KiB
C#
#if UNITY_EDITOR
|
|
using System;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace lilToon
|
|
{
|
|
public class SemVerParser {
|
|
public int major;
|
|
public int minor;
|
|
public int patch;
|
|
public string prerelease;
|
|
public string build;
|
|
|
|
public SemVerParser(string versionString, bool isForced) {
|
|
// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
|
|
var pattern = @"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$";
|
|
var pattern2 = @"(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)";
|
|
var regex = new Regex(pattern);
|
|
var regex2 = new Regex(pattern2);
|
|
var match = regex.Match(versionString);
|
|
var match2 = regex2.Match(versionString);
|
|
if (match.Success) {
|
|
major = int.Parse(match.Groups[1].Value);
|
|
minor = int.Parse(match.Groups[2].Value);
|
|
patch = int.Parse(match.Groups[3].Value);
|
|
prerelease = match.Groups[4].Success ? match.Groups[4].Value : null;
|
|
build = match.Groups[5].Success ? match.Groups[5].Value : null;
|
|
} else if (match2.Success) {
|
|
major = int.Parse(match2.Groups[1].Value);
|
|
minor = int.Parse(match2.Groups[2].Value);
|
|
patch = int.Parse(match2.Groups[3].Value);
|
|
prerelease = null;
|
|
build = null;
|
|
} else if(isForced) {
|
|
major = 999999;
|
|
minor = 999999;
|
|
patch = 999999;
|
|
} else {
|
|
throw new ArgumentException("Invalid semver string: " + versionString);
|
|
}
|
|
}
|
|
|
|
public SemVerParser(string versionString) {
|
|
// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
|
|
var pattern = @"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$";
|
|
var regex = new Regex(pattern);
|
|
var match = regex.Match(versionString);
|
|
if (match.Success) {
|
|
major = int.Parse(match.Groups[1].Value);
|
|
minor = int.Parse(match.Groups[2].Value);
|
|
patch = int.Parse(match.Groups[3].Value);
|
|
prerelease = match.Groups[4].Success ? match.Groups[4].Value : null;
|
|
build = match.Groups[5].Success ? match.Groups[5].Value : null;
|
|
} else {
|
|
throw new ArgumentException("Invalid semver string: " + versionString);
|
|
}
|
|
}
|
|
|
|
public int CompareTo(SemVerParser other) {
|
|
if (other == null) {
|
|
return 1;
|
|
}
|
|
|
|
if (major != other.major) {
|
|
return major.CompareTo(other.major);
|
|
}
|
|
|
|
if (minor != other.minor) {
|
|
return minor.CompareTo(other.minor);
|
|
}
|
|
|
|
if (patch != other.patch) {
|
|
return patch.CompareTo(other.patch);
|
|
}
|
|
|
|
if (prerelease == null && other.prerelease != null) {
|
|
return 1;
|
|
} else if (prerelease != null && other.prerelease == null) {
|
|
return -1;
|
|
} else if (prerelease != null && other.prerelease != null) {
|
|
int cmp = string.Compare(prerelease, other.prerelease);
|
|
if (cmp != 0) {
|
|
return cmp;
|
|
}
|
|
}
|
|
|
|
if (build == null && other.build != null) {
|
|
return 1;
|
|
} else if (build != null && other.build == null) {
|
|
return -1;
|
|
} else if (build != null && other.build != null) {
|
|
int cmp = string.Compare(build, other.build);
|
|
if (cmp != 0) {
|
|
return cmp;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public static bool operator ==(SemVerParser v1, SemVerParser v2) {
|
|
if (ReferenceEquals(v1, v2)) {
|
|
return true;
|
|
}
|
|
if (ReferenceEquals(v1, null) || ReferenceEquals(v2, null)) {
|
|
return false;
|
|
}
|
|
return v1.CompareTo(v2) == 0;
|
|
}
|
|
public static bool operator !=(SemVerParser v1, SemVerParser v2) { return !(v1 == v2); }
|
|
public static bool operator < (SemVerParser v1, SemVerParser v2) { return v1.CompareTo(v2) < 0; }
|
|
public static bool operator <=(SemVerParser v1, SemVerParser v2) { return v1.CompareTo(v2) <= 0; }
|
|
public static bool operator > (SemVerParser v1, SemVerParser v2) { return v1.CompareTo(v2) > 0; }
|
|
public static bool operator >=(SemVerParser v1, SemVerParser v2) { return v1.CompareTo(v2) >= 0; }
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
return base.Equals(obj);
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return base.GetHashCode();
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return base.ToString();
|
|
}
|
|
}
|
|
}
|
|
#endif |