# MDView — Просмотрщик Markdown для Sprinter

**MDView** — программа для просмотра документов в формате *Markdown* на компьютере
Sprinter (процессор Z80). Документ хранится в отдельном W3 окне и не занимает
основную RAM программы.

## Возможности

- Документы до **128 КБ** (8 страниц EMM по 16 КБ каждая)
- До **16 384** экранных строк в индексе
- Автоматический перенос слов по ширине экрана (80 столбцов)
- Горизонтальный сдвиг для широких строк (блоки кода, таблицы)
- Статус-бар: имя файла, диапазон строк, процент прокрутки
- Спиннер в строке состояния во время загрузки и индексации
- Поддержка «мягкого» склеивания строк в абзацах и цитатах

## Запуск

```
mdview [имя_файла.md]
```

Если имя файла не задано, загружается `README.MD`.

## Управление

```
Клавиша        Действие
─────────────  ────────────────────────────────────────
Up  Down       Прокрутка на одну строку вверх / вниз
PgUp  PgDn     Прокрутка на страницу (30 строк)
Home           Начало документа
End            Конец документа
Left Right     Горизонтальный сдвиг (только nowrap-строки)
F1             Окно справки
F10 / Esc      Выход из программы
```

## Синтаксис Markdown

### Заголовки

Поддерживаются уровни H1–H4. Уровни H5 и H6 отображаются как H4.

    # Заголовок первого уровня  
    ## Заголовок второго уровня  
    ### Заголовок третьего уровня  
    #### Заголовок четвёртого уровня  

### Текстовое форматирование

**Жирный текст** выделяется двойными звёздочками: `**текст**`

*Курсив* выделяется одиночными звёздочками `*текст*` или знаком подчёркивания `_текст_`

`Встроенный код` обозначается обратными кавычками

~~Зачёркнутый текст~~ — двойные тильды: `~~текст~~`

### Ненумерованный список

Маркеры `-`, `*` или `+`:

- Первый пункт списка
- Второй пункт списка
- Третий пункт с достаточно длинным текстом, который при необходимости
  будет перенесён на следующую строку с сохранением отступа

### Нумерованный список

1. Первый элемент
2. Второй элемент
3. Третий элемент

### Цитата

> Блок цитаты начинается с символа `>`. Несколько последовательных
> строк одной цитаты склеиваются в единый абзац с автоматическим
> переносом слов.

### Блок кода (verbatim)

Блок кода заключается в тройные обратные кавычки. Внутри блока
текст отображается «как есть» без разбора Markdown:

```
#include <stdio.h>
#include <sprinter.h>

int main(void) {
    puts("Hello, Sprinter!");
    return 0;
}
```

### Горизонтальная линия

Три или более символов `---`, `***` или `___` на отдельной строке:

---

## Технические характеристики

- **Платформа:** Sprinter, процессор Z80 @ 21 МГц
- **Кодировка:** CP866 (DOS Cyrillic)
- **Максимальный размер файла:** 128 КБ
- **Максимальное число строк в индексе:** 16 384
- **Режим памяти:** small
  - Код программы, cтек, данные, куча — окнa W1-W2 (32 КБ, адреса 0x4000–0xBFFF).
  - Буфер файла — страницы EMM, отображаемые в W3 (0xC000–0xFFFF)

## TODO

1. **Увеличение размера документов.** Снять лимит 128 КБ: Достаточно
   разрешить работать с большим кол-вом страниц памяти, пока оттестированно
   на работе с 8-мю страницами по 16Кб.

2. **Форматированные таблицы.** Разбирать строки вида `| ячейка | ячейка |`
   с автоматическим выравниванием столбцов и отрисовкой разделительных
   линий (строки `|---|---|`). На текущий момент таблицы отображаются
   как обычные nowrap-строки без выравнивания.

3. **Поддержка кодировок CP1251 и UTF-8.** Автоопределение кодировки
   по BOM, явное указание через аргумент командной строки (`--encoding cp1251`),
   возможность переключения кодировки во время просмотра (`F8`).
   Нужно прежде всего для документов на русском языке; CP866 кодировака уже поддерживается.

4. **Ускорение рендеринга.** Кэш строк экрана. Оптимизация цикла вывода
   символов через BIOS WRCHAR (пакетный вывод, DMA).

---

*MDView v0.2 · (c) 2026 Петров А.Г.*
