138e783e72
Горизонтальный скролл (Фаза 5, финал): - Скроллим по ТИПУ, а не по длине: новый флаг IF_HSCROLL ставится только на код и таблицы; HR и границы fence (IF_NOWRAP без IF_HSCROLL) не двигаются. Блок едет целиком, включая строки короче 80. - Обход бага кодогенерации SDCC z80: `if (n!=g) g=n;` пишет (n-g) вместо n (SUB сравнения затирает A, store переиспользует испорченный A). Лечится записью viewport_x ДО сравнения. Минимальный репродьюсер и оба описания для трекера — в docs/bugs/sdcc-z80-cmp-store-a/ (воспроизводится на чистом sdcc 4.5, в т.ч. с --no-peep → это кодогенератор, не peephole). Рендеринг: - Отступленный fence (```c внутри списка) теперь распознаётся: is_fence_raw пропускает ведущие пробелы/табы; то же в рендере прячет строку-границу. - Строки-разделители (HR, ровно 80) больше не участвуют в скролле. Чистка: удалён мёртвый код (is_fence_delim, get_init_style[_raw], is_cont, seg_flags). Makefile (mdview/mdview2): iconv UTF-8→CP866 завершается ненулевым кодом при отбрасывании символов — игнорируем (|| true). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
45 lines
1.8 KiB
Makefile
45 lines
1.8 KiB
Makefile
# Build mdview.exe — Markdown viewer for Sprinter.
|
|
#
|
|
# small memory mode: code in W1, data/stack/heap in W2 (32 KB total).
|
|
# W3 stays free for the file buffer (EMM-mapped).
|
|
|
|
PROJ_ROOT := $(abspath $(CURDIR)/../..)
|
|
EXAMPLE := mdview
|
|
MEMORY := small
|
|
|
|
include $(PROJ_ROOT)/app.mk
|
|
|
|
# ------------------------------------------------------------------
|
|
# Образ дискеты: только mdview.exe + README.MD (перекодированный
|
|
# из UTF-8 в CP866 — рабочую кодировку Sprinter).
|
|
#
|
|
# README.MD хранится в репозитории в UTF-8; iconv -c конвертирует
|
|
# его в CP866, отбрасывая символы без аналога в целевой кодировке.
|
|
# Результат кладётся в .disk_tmp/README.MD, чтобы make_disk.py
|
|
# использовал правильное имя файла на диске.
|
|
#
|
|
# iconv -c возвращает ненулевой код, если хоть один символ отброшен
|
|
# (даже с -c) — это ОЖИДАЕМО при потере символов без аналога в CP866,
|
|
# не ошибка конвертации; вывод при этом всё равно корректно записан.
|
|
# Поэтому код возврата iconv игнорируется (|| true).
|
|
# ------------------------------------------------------------------
|
|
DISK_TMP := .disk_tmp
|
|
README_DISK := $(DISK_TMP)/README.MD
|
|
|
|
$(DISK_TMP):
|
|
mkdir -p $@
|
|
|
|
$(README_DISK): README.MD | $(DISK_TMP)
|
|
iconv -c -f UTF-8 -t CP866 README.MD > $@ || true
|
|
|
|
floppy: $(EXAMPLE).exe $(README_DISK)
|
|
python3 $(MAKE_DISK) $(FLOPPY_IMG) $(EXAMPLE).exe $(README_DISK)
|
|
@echo
|
|
@echo "Floppy ready: $(FLOPPY_IMG)"
|
|
@echo "Run: cd $(MAME_DIR) && ./run_mame.sh"
|
|
|
|
clean:
|
|
rm -rf .sprinter-cc-* $(EXAMPLE).exe $(DISK_TMP)
|
|
|
|
.PHONY: all clean floppy run
|