* Add W3C color enum with the RGB as numeric value
* Add transform helper class for W3cColor enum
For the sake of backwards compatibility prioritize parsing 16 color mode color names over the W3C colors because the previous resource-based color names/values had a mix of W3C and 16 color mode RGB values.
Mechanism for choosing/prioritizing one color scheme over the other is currently only available at higher application/driver/output level.
* IColorNameResolver enable null analysis
* Remove obsolete color name related ResourceManagerTests
* Replace remains of W3CColors with direct W3C color name resolver
Temporarily breaks backwards compatibility and tests even further.
* Add ANSI 4-bit (ColorName16) color name resolver
* Add multi-standard color name resolver
Combined resolver for both ANSI 4-bit (ColorName16) and W3C colors while trying to maintain backwards compatibility for ColorPicker.
* Split conditional name resolver test cases
* Change W3C colors tests to be similar to name resolvers
* Change W3cColorsTests to W3cColorNameResolverTests
More consistent when all the tests refer to the color name resolver layer.
* Make W3cColors internal
Color name resolver is the public interface.
* W3cColors: Use Color.Argb instead of individual RGB components
* MultiStandardColorNameResolver: Substitute instead of blocking alternative W3C names
Changes color picker behavior a bit, e.g. Aqua will match to Cyan instead of jumping to Aquamarine.
* Remove leftover color string resources
* Consistent position for IColorNameResolver #nullable enable directive
* Add missing XML comments to ColorScheme.Colors.cs
Uses StringBuilder and char span indexof search to reduce intermediate allocations.
The new implementation behaves slightly different compared to old implementation. In synthetic LFCR scenario it is correctly removed while the old implementation left the CR, which seems like an off-by-one error.
* Skip rune list allocation from accessing Cell.CombiningMarks property
The getter would every time allocate a new list when the backing field was not assigned, which is most of the time.
* Fix comment about performance
I accidentally word. Is this dangerous?
* Fixes#3968. Menu appears in wrong place when opened in a subview
* Fixes#3965. Cannot exit a Window with a CanFocus true MenuBar
* Fixes#3981. Drivers crash when middle or right click on a ContextMenu item
---------
Co-authored-by: Tig <tig@users.noreply.github.com>
* Change IConsoleOutput.Write(string) overload parameter to ReadOnlySpan<char>
Allows the caller more flexibility about choosing a buffer per use case.
* NetOutput: Write StringBuilder directly to the std out text stream
* Add EscSeqUtils.CSI_WriteCursorPosition
Writes cursor position sequence to text writer without string allocation.
* NetOutput: Skip cursor position escape sequence string allocation
* Replace CSI_(Enable|Disable)MouseEvents static properties with readonly fields
Changed for the sake of consistency with rest of the EscSegutils fields rather than performance. Also prevents bugs from accidentally setting the properties.
* Use EscSeqUtils.CSI_Append(Foreground|Background)ColorRGB in v2 drivers
* WindowsOutput SetCursorVisibility: Remove intermediate string builder
* WindowsOutput.WriteToConsole: Use rented array as intermediate write buffer
The large intermediate string builder remains a challenge. :)
* NetOutput: Console.Out for the sake of consistency
Also might have missed one of the Console.Out.Write(StringBuilder) calls...
* Avoid Rune.ToString() in NetOutput.Write(IOutputBuffer)
---------
Co-authored-by: Tig <tig@users.noreply.github.com>