rcp-palette 🎨 (CSS Color Parser)
Простий і надійний парсер для перетворення рядкових представлень CSS-кольорів у внутрішню структуру даних Rust.
Технічний опис процесу парсингу
Проєкт rcp-palette парсить рядки, що відповідають CSS-нотації кольорів. На поточному етапі підтримуються формати:
#RRGGBB(наприклад,#1A2B3C);#RGB(наприклад,#FA0);rgb(R, G, B)(наприклад,rgb(255, 170, 0));hsl(H, S%, L%)(наприклад,hsl(0, 100%, 50%));- Іменовані кольори (наприклад,
red,blue,rebeccapurple).
Граматика рядкових записів кольорів
Color := Named | Hex | Rgb | Hsl
Named := "black" | "white" | "red" | "green" | "blue" | "yellow" | "cyan" | "magenta" | "gray" | "grey" | "rebeccapurple"
Hex := "#" (Hex6|Hex3)
Hex6 := HHHHHH ; шість шістнадцяткових символів
Hex3 := HHH ; три шістнадцяткових символи
Rgb := "rgb" "(" Int "," Int "," Int ")"
Hsl := "hsl" "(" Int "," Int "%" "," Int "%" ")"
H := [0-9A-Fa-f]
Int := 0..255 ; десяткові цілі та пробіли
Алгоритмічний опис процесу парсингу
-
Рядкове задання кольору передається функції
parse_color(). -
Якщо рядок співпадає з іменованим CSS-кольором (наприклад,
red,blue,rebeccapurple), спочатку він нормалізується до нижнього регістру, після чого виконується пошук у вбудованій таблиці відповідностей. У разі успіху повертається відповідна трійка компонентівColor { r, g, b }. Якщо жодна назва не співпадає, парсер переходить до наступних правил. -
Якщо рядок починається з
#, то викликаєтьсяHex-parser, котрий виконує валідацію (та підгон за потреби) його довжини та відповідності його символів, після чого виконується потрібна конвертація відформатованогоHex-рядкау структуруColor. -
Якщо рядок починається з
rgb(, то викликаєтьсяRGB-парсер, котрий виокремлює числові компоненти поміж дужками з обробкою використання пробілів. Надалі відбувається валідація їх кількостей та приналежностей діапазону цілих чисел від 0 до 255, після чого вони безпосередньо стають компонентами структуриColor. -
Якщо рядок починається з
hsl(, то викликаєтьсяHSL-парсер, котрий виокремлює три компонентиH,S%таL%поміж дужками з обробкою використання пробілів. Надалі відбувається:- парсинг
Hу градусах (довільне дійсне число, нормалізується по модулю 360); - парсинг
SтаLу відсотках (0–100) з приведенням до діапазону 0.0–1.0; - повернення структури
Color { r: u8, g: u8, b: u8 }, а саме стандартне перетворення HSL → RGB з отриманням компонетr,g,bу діапазоні 0–255.
- парсинг
-
Якщо рядок не відповідає жодному з цих форматів, повертається загальна помилка про недійсний префікс
#. -
Інші помилки повертаються при не успішному виконанні валідації чи форматування усіма парсерами.
-
Успішне завершення будь-якого парсера призводить до повернення об'єкта структури
Color { r: u8, g: u8, b: u8 }.
Використання результатів парсингу
Успішний парсинг повертає структуру Color { r: u8, g: u8, b: u8 }. Ця структура є універсальним поданням кольору і може бути використана для:
- графічного відображення;
- колірних обчислень.
CLI - commands
parse <#HEX>— парсинг окремого кольоруfile <path>— парсинг файлу з кольорами (по одному на рядок)author— показ інформації про авторів і крейт
CLI - examples
Project development
- linting:
cargo clippy - formatting :
cargo fmt - tests:
cargo test
License
- MIT