private static string UnescapeAll()

in TeamCity.MSBuild.Logger/StringService.cs [25:56]


        private static string UnescapeAll([CanBeNull] string escapedString, out bool escapingWasNecessary)
        {
            escapingWasNecessary = false;
            if (string.IsNullOrEmpty(escapedString))
            {
                return escapedString;
            }

            var num = escapedString.IndexOf('%');
            if (num == -1)
            {
                return escapedString;
            }

            var sb = StringBuilderCache.Acquire(escapedString.Length);
            var startIndex = 0;
            for (; num != -1; num = escapedString.IndexOf('%', num + 1))
            {
                // ReSharper disable once InvertIf
                if (num <= escapedString.Length - 3 && IsHexDigit(escapedString[num + 1]) && IsHexDigit(escapedString[num + 2]))
                {
                    sb.Append(escapedString, startIndex, num - startIndex);
                    var ch = (char)int.Parse(escapedString.Substring(num + 1, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
                    sb.Append(ch);
                    startIndex = num + 3;
                    escapingWasNecessary = true;
                }
            }

            sb.Append(escapedString, startIndex, escapedString.Length - startIndex);
            return StringBuilderCache.GetStringAndRelease(sb);
        }