rustitch 0.2.0

PES embroidery file parser and thumbnail renderer
Documentation
/// Brother PEC thread color palette (65 entries).
/// Index 0 is a fallback; indices 1-64 correspond to standard Brother thread colors.
pub const PEC_PALETTE: [(u8, u8, u8); 65] = [
    (0, 0, 0),       //  0: Unknown
    (14, 31, 124),   //  1: Prussian Blue
    (10, 85, 163),   //  2: Blue
    (0, 135, 119),   //  3: Teal Green
    (75, 107, 175),  //  4: Cornflower Blue
    (237, 23, 31),   //  5: Red
    (209, 92, 0),    //  6: Reddish Brown
    (145, 54, 151),  //  7: Magenta
    (228, 154, 203), //  8: Light Lilac
    (145, 95, 172),  //  9: Lilac
    (158, 214, 125), // 10: Mint Green
    (232, 169, 0),   // 11: Deep Gold
    (254, 186, 53),  // 12: Orange
    (255, 255, 0),   // 13: Yellow
    (112, 188, 31),  // 14: Lime Green
    (186, 152, 0),   // 15: Brass
    (168, 168, 168), // 16: Silver
    (125, 111, 0),   // 17: Russet Brown
    (255, 255, 179), // 18: Cream Brown
    (79, 85, 86),    // 19: Pewter
    (0, 0, 0),       // 20: Black
    (11, 61, 145),   // 21: Ultramarine
    (119, 1, 118),   // 22: Royal Purple
    (41, 49, 51),    // 23: Dark Gray
    (42, 19, 1),     // 24: Dark Brown
    (246, 74, 138),  // 25: Deep Rose
    (178, 118, 36),  // 26: Light Brown
    (252, 187, 197), // 27: Salmon Pink
    (254, 55, 15),   // 28: Vermilion
    (240, 240, 240), // 29: White
    (106, 28, 138),  // 30: Violet
    (168, 221, 196), // 31: Seacrest
    (37, 132, 187),  // 32: Sky Blue
    (254, 179, 67),  // 33: Pumpkin
    (255, 243, 107), // 34: Cream Yellow
    (208, 166, 96),  // 35: Khaki
    (209, 84, 0),    // 36: Clay Brown
    (102, 186, 73),  // 37: Leaf Green
    (19, 74, 70),    // 38: Peacock Blue
    (135, 135, 135), // 39: Gray
    (216, 204, 198), // 40: Warm Gray
    (67, 86, 7),     // 41: Dark Olive
    (253, 217, 222), // 42: Flesh Pink
    (249, 147, 188), // 43: Pink
    (0, 56, 34),     // 44: Deep Green
    (178, 175, 212), // 45: Lavender
    (104, 106, 176), // 46: Wisteria Violet
    (239, 227, 185), // 47: Beige
    (247, 56, 102),  // 48: Carmine
    (181, 75, 100),  // 49: Amber Red
    (19, 43, 26),    // 50: Olive Green
    (199, 1, 86),    // 51: Dark Fuchsia
    (254, 158, 50),  // 52: Tangerine
    (168, 222, 235), // 53: Light Blue
    (0, 103, 62),    // 54: Emerald Green
    (78, 41, 144),   // 55: Purple
    (47, 126, 32),   // 56: Moss Green
    (255, 204, 204), // 57: Flesh Pink
    (255, 217, 17),  // 58: Harvest Gold
    (9, 91, 166),    // 59: Electric Blue
    (240, 249, 112), // 60: Lemon Yellow
    (227, 243, 91),  // 61: Fresh Green
    (255, 153, 0),   // 62: Orange
    (255, 240, 141), // 63: Cream Yellow
    (255, 200, 200), // 64: Applique
];

/// Default high-contrast palette for formats without embedded color info (DST, EXP).
/// Colors cycle on each color change.
pub const DEFAULT_PALETTE: [(u8, u8, u8); 12] = [
    (0, 0, 0),      // Black
    (237, 23, 31),  // Red
    (10, 85, 163),  // Blue
    (0, 135, 119),  // Teal Green
    (254, 186, 53), // Orange
    (145, 54, 151), // Magenta
    (112, 188, 31), // Lime Green
    (42, 19, 1),    // Dark Brown
    (37, 132, 187), // Sky Blue
    (246, 74, 138), // Deep Rose
    (186, 152, 0),  // Brass
    (106, 28, 138), // Violet
];

/// Build a color list for `n` thread slots by cycling through `DEFAULT_PALETTE`.
pub fn default_colors(n: usize) -> Vec<(u8, u8, u8)> {
    (0..n)
        .map(|i| DEFAULT_PALETTE[i % DEFAULT_PALETTE.len()])
        .collect()
}