summarum/README.ru.md
Horizontal42 37cfd2144b update docs: fix test count (373 not 259), add missing files to arch tree
- vitest actually runs 373 cases across 21 files, not 259
- added workspace.ts, sparkline.ts, logger.ts to the file tree in ARCHITECTURE
- fixes in all four language variants: README + ARCHITECTURE in EN and RU
2026-08-23 18:45:27 +03:00

198 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Summarum
[English](README.md)
**Калькулятор, который работает как блокнот.** Пишешь что думаешь — каждая строка сразу даёт ответ в правой колонке. Никаких кнопок, никакого синтаксиса формул, просто текст.
```
# Поездка в Лиссабон
билеты $420
отель $95 * 4 ночи
еда 30€ в день * 4 дня и музеи 25€
итого → $1,066.97
5 дюймов в см → 12.7 cm
100 км/ч в миль/ч → 62.14 mph
$2000 в рублях → 144,060 ₽
скидка 20% от 1500 → 1,200
сегодня + 6 недель → 22 Июля 2026
1000 USD в EUR на 2024-01-01 → € 917.30
? * 1.2 = 1000 → 833.33
AAPL в USD → $213.55
дней до 2027-01-01 → 183 day
график → ▂▄▇█▆
```
Работает на **английском и русском одновременно**: `5 метров в см`, `20$ в евро`, `сумма` — переключать язык не нужно.
## Установка
Скачай сборку под свою систему из [Releases](../../releases). Приложение весит
около 2 МБ, дальше обновления проверяются сами.
- **Windows** — `Summarum_*_x64-setup.exe` (или `arm64-setup.exe` для Windows on
ARM). Запусти — готово.
- **Linux** — `.AppImage` (`chmod +x` и запускай) либо `.deb`/`.rpm`, если хочется
поставить нормальным пакетом. Самообновление работает только у AppImage, deb и
rpm обновляются скачиванием следующей версии.
- **macOS** — `.dmg` для Apple Silicon или Intel. Сборки не подписаны сертификатом
Apple Developer, поэтому первый запуск — правый клик → **Открыть**, а не двойной
клик (либо один раз выполнить `xattr -cr /Applications/Summarum.app` в терминале).
Дальше запускается как обычно.
Требования:
- **Windows 10 (1803+) или Windows 11**, 64-бит, и
**[WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/)** —
уже встроен в Windows 11 и большинство обновлённых Windows 10; если отсутствует,
установщик скачает его автоматически.
- **Linux** с `webkit2gtk-4.1` (Ubuntu 22.04+, Debian 12+, Fedora 36+) и
`libayatana-appindicator3` для иконки в трее.
- **macOS 10.13** или новее.
- Интернет нужен только для живых курсов и рыночных данных — всё остальное работает офлайн
(курсы берутся из кэша или встроенного снимка).
## Что понимает
**Обычная математика** — `2 + 2`, `8 / (45 - 20%)`, скобки, `^`, `sqrt`, `sin`,
факториалы, `случайное()`, `случайное(1; 6)`. Точная десятичная арифметика:
`0.1 + 0.2` это `0.3`, а не `0.30000000000000004`.
**Слова как операторы** — `12 плюс 4`, `20 делить на 4`, `5 и 3`. Текст вокруг
математики игнорируется: `потратил 20 на пиццу и 5 на кофе` даст 25.
**Единицы** — длина, масса, объём, площадь, температура, время, углы, данные
(`1 ГиБ в МБ`), CSS px/em, скорость, давление, энергия, мощность, частота, расход топлива:
```
6 футов в метрах 1 атм в мм рт.ст. 8 л/100км в mpg
2 часа 30 мин в мин 150 л.с. в кВт 32 px в em
```
**Деньги** — ~150 валют и топ-20 криптовалют с живыми курсами
(обновляются раз в час, кэшируются для офлайна). `$100 + 20%`, `5 eth в USD`,
`9800 рублей в долларах`.
**Живые рыночные данные** — котировки акций и сырья обновляются каждые 15 минут:
`100 AAPL в USD`, `2 GC=F в USD` (фьючерс на золото), `MSFT + GOOGL`.
**Исторические курсы** — `1000 USD в EUR на 2024-01-01` запрашивает курс ЕЦБ
за этот день (через frankfurter.dev) и кэширует его навсегда.
**Проценты по-человечески** — `20% от 80`, `скидка 20% от 1500`, `5 это сколько % от 25`,
`20% от какого числа равно 30`.
**Даты и время** — `сегодня + 2 недели`, `завтра - сегодня`, `время в Нью-Йорке`
(работает и с прямым IANA-id: `время в Europe/Berlin`), `сейчас в unix`,
`1750000000 как дата`. Форматы дат: ISO (`2024-01-01 + 30 дней`), или через
точку/слэш с 4-значным годом — `31.12.2024`, `12/31/2024` — порядок день/месяц
для неоднозначных случаев берётся из настройки «Формат даты».
`дней до 2027-01-01`, `дней с 2020-03-15`.
**Поиск неизвестного** — поставь `?` на место неизвестного и `=` с нужным результатом:
`? * 1.2 = 1000` → `833.33`, `100 - ? = 30` → `70`. Работает для любых выражений,
решаемых линейным методом или бисекцией.
**Для программистов** — `0xFF & 0x0F`, `1 << 4`, `255 в hex`, `в binary`,
плюс `в дроби` (0.75 → 3/4) и `в roman` (2026 → MMXXVI).
**Листы с переменными** — переменные (`аренда = $500`), нарастающие итоги
(`сумма`, `avg`, `prev`, `количество`, `минимум`, `максимум`, `произведение`),
заголовки `#`, комментарии `//`. Строка статуса всегда показывает итог листа;
выдели несколько строк — увидишь их сумму. Добавь `график` в конце блока чтобы
нарисовать спарклайн.
**Ссылки между листами** — тяни значение из другого листа через `@`:
`@Бюджет.total`, `@Бюджет.аренда`, `@[Поездка в Лиссабон].еда`. Лист из одних
ссылок становится живым дашбордом: `@Активы.total - @Долги.total`. Дай листу-
источнику постоянное имя (не автоматическое), иначе ссылка сломается при
правке первой строки.
## Удобные мелочи
- **Ctrl+Alt+N** (настраивается — поле в настройках записывает нажатые клавиши)
показывает/скрывает окно из любого места. Закрытие прячет в трей.
- **Ctrl+W** закрывает текущий лист (спрашивает подтверждение если есть содержимое).
- **Ctrl+F** (или кнопка 🔍) ищет сразу по всем листам — по тексту или по значению
результата: `>1000`, `<50`, `=100`, `~100` (±1%). Клик по результату — переходишь туда.
- **Клик по результату** копирует его. Копирование строки копирует её *вместе с ответом*
(`аренда * 3 = $1,500`). **Ctrl+Shift+C** копирует весь лист с ответами.
- **Экспорт картинкой** — меню ⤓ содержит «Скопировать картинкой»: рендерит лист
в PNG и кладёт в буфер обмена (при ошибке предлагает сохранить файл).
- **Потяни разделитель** чтобы изменить ширину колонки результатов.
- **Брось файл `.numi`, `.sum`, `.txt` или `.md`** в окно — откроется как лист.
- **Закрепление и порядок листов** — нажми значок булавки на любом листе в сайдбаре
чтобы закрепить его вверху; кнопки ↑↓ меняют порядок.
- **Резервные копии автоматические**: ежедневный снимок всех листов (хранятся 14 дней),
удалённые листы лежат в корзине 14 дней (настраивается) — верни перетащив обратно.
Настройки → Backups откроет папку.
- **Папка данных настраивается** — укажи OneDrive/Dropbox и листы синхронизируются
между машинами.
- **Поверх всех окон** (в настройках) закрепляет окно над остальными.
- Приложение проверяет обновления при запуске и потом каждые несколько
часов, предлагая установить — вручную скачивать и переустанавливать не
нужно. Настройки → Обновления → «Проверить обновления» запускает проверку
вручную, либо отключи автопроверку целиком тумблером рядом.
- Светлая/тёмная тема, интерфейс en/ru, настраиваемая точность, разделители
и формат даты (системный, `31.12.2024`, `12/31/2024` или `2024-12-31`).
Настройки разбиты на вкладки: Общие / Формат / Данные / Обновления.
## Расширения
> **Внимание:** расширения выполняются в WebAssembly-песочнице — без доступа к файлам, сети и приложению, только API `numi` ниже. Зависший скрипт прерывается, упавший — пропускается.
Брось `.js`-файл в папку расширений (Настройки → Extensions folder) и перезапусти.
API совместим с расширениями Numi:
```js
numi.setVariable("ндс", { double: 20 });
numi.addUnit({ id: "этаж", phrases: "этаж,этажей", baseUnitId: "meter",
format: "эт", ratio: 3 });
numi.addFunction({ id: "гипот", phrases: "гипот" },
(v) => ({ double: Math.hypot(v[0].double, v[1].double) }));
```
Тогда `5 этажей в метрах` → `15 m` и `гипот(3; 4)` → `5`.
## Баги и идеи
Открой [issue](../../issues). Строка того что написал и что ожидал увидеть — достаточно.
## Для разработчиков
Устройство движка, структура проекта и как добавлять единицы/валюты:
см. [ARCHITECTURE.ru.md](ARCHITECTURE.ru.md).
```bash
npm install
npm test # тесты движка (373 кейса)
npm run tauri dev # запустить приложение
npm run tauri build # собрать установщик
```
Для сборки нужны:
- [Node.js](https://nodejs.org/) 22.6 или новее
- [Rust](https://rustup.rs/), stable
- На Windows: toolchain MSVC и
[Visual Studio Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/)
с компонентом «Desktop development with C++» (нужен линковщик MSVC)
- На Linux: `libwebkit2gtk-4.1-dev`, `libayatana-appindicator3-dev`,
`librsvg2-dev`, `libxdo-dev`, `libssl-dev`, `patchelf` и компилятор C
- На macOS: Xcode Command Line Tools
- Если что-то не собирается — см. [Tauri prerequisites](https://tauri.app/start/prerequisites/)
`npm run tauri build` собирает то, что умеет хост-платформа: NSIS на Windows,
deb/rpm/AppImage на Linux, .app/.dmg на macOS. Кросс-компиляция между ними не
поддерживается — релизный workflow собирает каждую платформу на своём раннере.
Стек: [Tauri 2](https://tauri.app) + TypeScript + CodeMirror 6.
## Благодарность
Вдохновлён [Numi](https://numi.app) от Дмитрия Николаева —
если ты на macOS, купи его. Summarum — независимый проект, написанный с нуля для Windows, Linux и macOS.
## Лицензия
[PolyForm Noncommercial 1.0.0](LICENSE) — бесплатно для личного, образовательного и другого некоммерческого использования. Коммерческое использование (включая перепродажу или репакинг) запрещено.