Initial commit: Rust calendar utility

This commit is contained in:
2026-02-19 06:57:09 +03:00
commit 56a8b34710
19 changed files with 4755 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
# Holiday Highlighter Plugin
Плагин для `cal`, добавляющий подсветку официальных праздников через API isdayoff.ru.
## Возможности
- **Автоматическое определение страны** по системной локали
- **Кэширование данных** для уменьшения количества запросов к API
- **Поддержка нескольких стран**: Россия, Беларусь, Казахстан, США, Узбекистан, Турция, Латвия
- **Данные о типах дней**: рабочие, выходные, сокращённые, официальные праздники
## Сборка
```bash
# Сборка всего workspace
cargo build --release --workspace
# Только плагин
cargo build --release -p holiday_highlighter
```
## Установка
### Локально для пользователя
```bash
mkdir -p ~/.local/lib/cal/plugins
cp target/release/libholiday_highlighter.so ~/.local/lib/cal/plugins/
```
### Системно
```bash
sudo mkdir -p /usr/lib/cal/plugins
sudo cp target/release/libholiday_highlighter.so /usr/lib/cal/plugins/
```
## Использование
```bash
# Подсветка праздников для текущей страны
cal -H
# Год с праздниками
cal -y -H
# Три месяца с праздниками
cal -3 -H
```
## Поддерживаемые страны
| Код | Страна | Локали для автоопределения |
|-----|--------|----------------------------|
| RU | Россия | ru_RU, ru_BY, ru_KZ, ru_UZ, ru_LV |
| BY | Беларусь | be_BY, ru_BY |
| KZ | Казахстан | kk_KZ, ru_KZ |
| US | США | en_US, en |
| UZ | Узбекистан | uz_UZ, ru_UZ |
| TR | Турция | tr_TR |
| LV | Латвия | lv_LV, ru_LV |
## API
Плагин использует [isdayoff.ru API](https://isdayoff.ru/):
### Запрос за месяц
```
GET https://isdayoff.ru/api/getdata?year=2026&month=01&pre=1
```
### Запрос за год
```
GET https://isdayoff.ru/api/getdata?year=2026&pre=1
```
Параметр `pre=1` включает информацию о предпраздничных сокращённых днях.
## Формат данных
Каждый символ в ответе представляет день месяца:
| Символ | Тип дня | Описание |
|--------|---------|----------|
| `0` | Рабочий | Обычный рабочий день |
| `1` | Выходной | Суббота или воскресенье |
| `2` | Сокращённый | Предпраздничный день |
| `8` | Праздник | Официальный государственный праздник |
## Переменные окружения
| Переменная | Описание |
|------------|----------|
| `LC_ALL` | Приоритетная локаль для определения страны |
| `LC_TIME` | Локаль для определения страны |
| `LANG` | Резервная локаль для определения страны |