Allow whitespace in ColorList values (#5925)

The following formats are now all valid:

```zig
macos-icon-screen-color = #00FF00,#FF1000,#00FFFF
macos-icon-screen-color = #00FF00, #FF1000, #00FFFF
macos-icon-screen-color = #00FF00 ,#FF1000 ,#00FFFF
macos-icon-screen-color =  #00FF00 , #FF1000  , #00FFFF
```

Fixes #5918
This commit is contained in:
Mitchell Hashimoto
2025-02-22 12:18:54 -08:00
committed by GitHub

View File

@ -4354,7 +4354,9 @@ pub const ColorList = struct {
count += 1; count += 1;
if (count > 64) return error.InvalidValue; if (count > 64) return error.InvalidValue;
const color = try Color.parseCLI(raw); // Trim whitespace from each color value
const trimmed = std.mem.trim(u8, raw, " \t");
const color = try Color.parseCLI(trimmed);
try self.colors.append(alloc, color); try self.colors.append(alloc, color);
try self.colors_c.append(alloc, color.cval()); try self.colors_c.append(alloc, color.cval());
} }
@ -4423,6 +4425,14 @@ pub const ColorList = struct {
try p.parseCLI(alloc, "black,white"); try p.parseCLI(alloc, "black,white");
try testing.expectEqual(2, p.colors.items.len); try testing.expectEqual(2, p.colors.items.len);
// Test whitespace handling
try p.parseCLI(alloc, "black, white"); // space after comma
try testing.expectEqual(2, p.colors.items.len);
try p.parseCLI(alloc, "black , white"); // spaces around comma
try testing.expectEqual(2, p.colors.items.len);
try p.parseCLI(alloc, " black , white "); // extra spaces at ends
try testing.expectEqual(2, p.colors.items.len);
// Error cases // Error cases
try testing.expectError(error.ValueRequired, p.parseCLI(alloc, null)); try testing.expectError(error.ValueRequired, p.parseCLI(alloc, null));
try testing.expectError(error.InvalidValue, p.parseCLI(alloc, " ")); try testing.expectError(error.InvalidValue, p.parseCLI(alloc, " "));