snark13
ffd179e064
mdview2: оптимизация размера — exe 28215 → 25616 (−2599 Б)
...
Раунд 1 (−1411): --max-allocs 100000 в Makefile (−848 кода) + снятие
всех нулевых инициализаторов file-scope переменных (_INITIALIZER
583→24; _DATA теперь зануляется в crt0).
Раунд 2 (−1188, индексатор 11019→9839): дедупликации в mdview2_index.c:
- classify_line: копия HR-проверки → вызов is_hr_raw;
- next_line() поверх row_end() вместо 9 копий «домотать до \n»;
- inline_marker: emph_to_attr(ls, base) вычисляется один раз (at);
- set_{nowrap,blank,code,hscroll}_cur → set_cur_flags(mask): строка
code-блока делает один idx_put вместо трёх.
Проверено в MAME (README/UTF8TEST: маркеры, списки, цитаты, таблицы,
code-блоки, F8).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-04 21:15:43 +03:00
snark13
e3342b63f3
mdview2: чинить детект лимита строк + кламп файлов >256 КБ
...
1. Лимит строк не показывал предупреждение: g_trunc_cause=TRUNC_LINES
ставился в emit_seg, но главный цикл выходит по n_lines<max_lines ДО
вызова emit_seg в переполненном состоянии (для code-block — один
emit_seg на строку). Теперь ловим после цикла по признаку p<file_size
(остановились, файл не кончился).
2. Файл >256 КБ больше не отвергаем экраном ошибки, а КЛАМПим: читаем
первые 256 КБ, индексатор дописывает строку TRUNC_FILE (File too large
- truncated at 256 KB). Приоритет ниже content/lines. Текст ошибки -2
поправлен (был 'size > 128K').
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-30 22:13:29 +03:00
snark13
bc3483c2dd
mdview2: лимит файла 256 КБ, обрыв с сообщением вместо потери строк
...
- MAX_PAGES 8->16 (256 КБ), MAX_INDEX_PAGES/MAX_CACHE_DIR_PAGES 8->9
(18432 строк), кап контент-кэша 64->40 стр./набор (80 на оба).
Бюджет worst-case (UTF-8 Latin+BOM): ~150 из 215 EMM-страниц.
- При исчерпании контент-кэша (cache_reserve==0) или лимита строк
индексация обрывается и последняя строка заменяется предупреждением
(IF_TRUNC_MSG, рисуется вживую с ATTR_WARN — жёлтый по красному),
без хвоста пустых строк. Раньше переполнение молча давало len=0
(пустые строки) без какого-либо индикатора.
- help: лимиты обновлены (256 КБ / 18432 строк).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-30 20:48:35 +03:00
snark13
c0dd1621e6
mdview2: расщепление монолита на модули (6 файлов, размер-нейтрально)
...
Вынос подсистем из mdview2.c в отдельные C-модули для читаемости и
навигации. mdview2.c: 2740 → 1062 строк (-61%); ядро теперь чистая
инфраструктура (cache-пул, EMM/fb, загрузка файла, doc-slot, loading-loop,
build_doc, main).
Модули (через EXTRA_SRCS, общий интерфейс в mdview2.h):
- mdview2_help.c — диалог справки F1
- mdview2_table.c — выровненная отрисовка таблиц
- mdview2_enc.c — кодировки CP866/CP1251/KOI8R + UTF-8 конвертер
- mdview2_view.c — отрисовка области/статус-бара/меню + прокрутка
- mdview2_index.c — парсер/индексатор markdown (сердце приложения)
(mdview2_raw.c был выделен ранее)
Чистый перенос static→extern; приватное состояние подсистем осталось
приватным. Размер: exe 28090 → 28112 (+22 Б / +0.08% — codegen-шум на
двух сильно связанных модулях enc/index). Сборка чистая, smoke-тест ОК.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-26 10:53:04 +03:00