private static int CompareComponent()

in src/Elastic.Markdown/Helpers/SemVersion.cs [252:295]


	private static int CompareComponent(string a, string b, bool lower = false)
	{
		var aEmpty = string.IsNullOrEmpty(a);
		var bEmpty = string.IsNullOrEmpty(b);
		if (aEmpty && bEmpty)
			return 0;

		if (aEmpty)
			return lower ? 1 : -1;
		if (bEmpty)
			return lower ? -1 : 1;

		var aComps = a.Split('.');
		var bComps = b.Split('.');

		var minLen = Math.Min(aComps.Length, bComps.Length);
		for (var i = 0; i < minLen; i++)
		{
			var ac = aComps[i];
			var bc = bComps[i];
			var isanum = int.TryParse(ac, out var anum);
			var isbnum = int.TryParse(bc, out var bnum);
			int r;
			if (isanum && isbnum)
			{
				r = anum.CompareTo(bnum);
				if (r != 0)
					return anum.CompareTo(bnum);
			}
			else
			{
				if (isanum)
					return -1;
				if (isbnum)
					return 1;

				r = string.CompareOrdinal(ac, bc);
				if (r != 0)
					return r;
			}
		}

		return aComps.Length.CompareTo(bComps.Length);
	}