|
3 | 3 | // See the LICENSE file in the project root for more information. |
4 | 4 |
|
5 | 5 | using System.ComponentModel; |
| 6 | +using System.Runtime.CompilerServices; |
6 | 7 | using System.Runtime.InteropServices; |
7 | | -using System.Text; |
8 | 8 | using MS.Internal; |
9 | 9 |
|
10 | 10 | #pragma warning disable 1634, 1691 // suppressing PreSharp warnings |
@@ -255,45 +255,55 @@ string IFormattable.ToString(string format, IFormatProvider provider) |
255 | 255 | /// </returns> |
256 | 256 | internal string ConvertToString(string format, IFormatProvider provider) |
257 | 257 | { |
258 | | - if (context == null) |
| 258 | + if (context is null) |
259 | 259 | { |
260 | | - if (format == null) |
261 | | - { |
262 | | - return string.Create(provider, stackalloc char[128], $"#{this.sRgbColor.a:X2}{this.sRgbColor.r:X2}{this.sRgbColor.g:X2}{this.sRgbColor.b:X2}"); |
263 | | - } |
264 | | - else |
| 260 | + if (format is not null) |
265 | 261 | { |
266 | 262 | // Helper to get the numeric list separator for a given culture. |
267 | | - char separator = MS.Internal.TokenizerHelper.GetNumericListSeparator(provider); |
268 | | - return string.Format(provider, |
269 | | - $"sc#{{1:{format}}}{{0}} {{2:{format}}}{{0}} {{3:{format}}}{{0}} {{4:{format}}}", |
270 | | - separator, scRgbColor.a, scRgbColor.r, scRgbColor.g, scRgbColor.b); |
| 263 | + char separator = TokenizerHelper.GetNumericListSeparator(provider); |
| 264 | + |
| 265 | + DefaultInterpolatedStringHandler stringBuilder = new(1, 7, provider, stackalloc char[128]); |
| 266 | + stringBuilder.AppendLiteral("sc#"); |
| 267 | + stringBuilder.AppendFormatted(scRgbColor.a, format: format); |
| 268 | + stringBuilder.AppendFormatted(separator); |
| 269 | + stringBuilder.AppendFormatted(scRgbColor.r, format: format); |
| 270 | + stringBuilder.AppendFormatted(separator); |
| 271 | + stringBuilder.AppendFormatted(scRgbColor.g, format: format); |
| 272 | + stringBuilder.AppendFormatted(separator); |
| 273 | + stringBuilder.AppendFormatted(scRgbColor.b, format: format); |
| 274 | + |
| 275 | + return stringBuilder.ToStringAndClear(); |
271 | 276 | } |
| 277 | + |
| 278 | + return string.Create(provider, stackalloc char[128], $"#{sRgbColor.a:X2}{sRgbColor.r:X2}{sRgbColor.g:X2}{sRgbColor.b:X2}"); |
272 | 279 | } |
273 | 280 | else |
274 | 281 | { |
275 | | - char separator = MS.Internal.TokenizerHelper.GetNumericListSeparator(provider); |
| 282 | + char separator = TokenizerHelper.GetNumericListSeparator(provider); |
276 | 283 |
|
277 | | - format = c_scRgbFormat; |
278 | | - |
279 | | - //First Stepmake sure that nothing that should not be escaped is escaped |
| 284 | + // 1) Make sure that nothing that should not be escaped is escaped |
280 | 285 | Uri safeUnescapedUri = new Uri(context.ProfileUri.GetComponents(UriComponents.SerializationInfoString, UriFormat.SafeUnescaped), |
281 | | - context.ProfileUri.IsAbsoluteUri ? UriKind.Absolute : UriKind.Relative); |
282 | | - //Second Step make sure that everything that should escaped is escaped |
283 | | - String uriString = safeUnescapedUri.GetComponents(UriComponents.SerializationInfoString, UriFormat.UriEscaped); |
284 | | - |
285 | | - var sb = new StringBuilder(); |
286 | | - sb.AppendFormat(provider, "{0}{1} ", Parsers.ContextColor, uriString); |
287 | | - sb.AppendFormat(provider,"{1:" + format + "}{0}",separator,scRgbColor.a); |
288 | | - for (int i = 0; i < nativeColorValue.Length; ++i ) |
| 286 | + context.ProfileUri.IsAbsoluteUri ? UriKind.Absolute : UriKind.Relative); |
| 287 | + |
| 288 | + // 2) Make sure that everything that should escaped is escaped |
| 289 | + string uriString = safeUnescapedUri.GetComponents(UriComponents.SerializationInfoString, UriFormat.UriEscaped); |
| 290 | + |
| 291 | + DefaultInterpolatedStringHandler stringBuilder = new(3, 7, provider, stackalloc char[256]); |
| 292 | + |
| 293 | + // Append "ContextColor file://something " format |
| 294 | + stringBuilder.AppendLiteral(Parsers.ContextColor); |
| 295 | + stringBuilder.AppendLiteral(uriString); |
| 296 | + stringBuilder.AppendLiteral(" "); |
| 297 | + |
| 298 | + stringBuilder.AppendFormatted(scRgbColor.a, format: c_scRgbFormat); |
| 299 | + |
| 300 | + for (int i = 0; i < nativeColorValue.Length; i++) |
289 | 301 | { |
290 | | - sb.AppendFormat(provider,"{0:" + format + "}",nativeColorValue[i]); |
291 | | - if (i < nativeColorValue.Length - 1) |
292 | | - { |
293 | | - sb.AppendFormat(provider,"{0}",separator); |
294 | | - } |
| 302 | + stringBuilder.AppendFormatted(separator); |
| 303 | + stringBuilder.AppendFormatted(nativeColorValue[i], format: c_scRgbFormat); |
295 | 304 | } |
296 | | - return sb.ToString(); |
| 305 | + |
| 306 | + return stringBuilder.ToStringAndClear(); |
297 | 307 | } |
298 | 308 | } |
299 | 309 |
|
|
0 commit comments