Технічна основа відображення списків Markdown
Markdown зарекомендував себе як стандартна мова розмітки для сучасної документації програмного забезпечення, технічних специфікацій, особистих баз знань та комунікації розробників. Хоча однорівневі марковані списки (- пункт) та нумеровані списки (1. пункт) виглядають просто, створення глибоко вкладених ієрархічних структур додає значної складності у форматуванні. Різні парсери Markdown — такі як CommonMark, GitHub Flavored Markdown (GFM), Python-Markdown та Pandoc — застосовують суворі правила щодо вибору маркерів, співвідношення табуляцій і пробілів та відступів дочірніх блоків.
Коли списки копіюються з різних текстових редакторів (таких як VS Code, Sublime Text, Xcode, Apple Notes або Microsoft Word), виникають приховані помилки відступів. Один пропущений пробіл у дочірньому пункті призводить до того, що компілятор Markdown інтерпретує вкладений вузол як елемент верхнього рівня або окремий абзац. Інструмент Nested List & Indentation Formatter від Utiliome усуває ці аномалії, аналізуючи AST (абстрактне синтаксичне дерево) вхідного тексту та регенеруючи стандартизований Markdown.
Правила відступів: 2 пробіли проти 4 пробілів
Одною з найпоширеніших дискусій при створенні технічної документації є вибір між 2 та 4 пробілами для відступу вкладених списків. Вибір залежить від специфікації цільового парсера:
Правило 2 пробілів (стандарт GFM та Prettier): У сучасних екосистемах вебдокументації, таких як GitHub, Docusaurus, Nextra та Obsidian, стандартним вважається відступ у 2 пробіли на рівень. Це правило вирівнює дочірній вміст під початком тексту батьківського пункту:
- Елемент верхнього рівня 1 - Вкладений дочірній елемент 1.1 - Вкладений дочірній елемент 1.2 - Глибоко вкладений елемент 1.2.1 - Елемент верхнього рівня 2Правило 4 пробілів (суворий CommonMark та Python-Markdown): Суворі реалізації CommonMark вимагають, щоб дочірні блоки, фрагменти коду та вкладені списки всередині нумерованих списків мали відступ у 4 пробіли (або 1 табуляцію) для правильної вкладеності:
1. Перший крок у робочому процесі - Пов'язаний підпункт A - Пов'язаний підпункт B 2. Другий крок у робочому процесіПастки табуляцій та пробілів: Змішування символів табуляції (
\t) із пробілами ASCII (\x20) є головною причиною порушення відображення документації Markdown. Вебрушії інтерпретують табуляцію неоднорідно (часто як 4 або 8 колонок), через що вкладені елементи візуально зміщуються. Utiliome автоматично конвертує всі символи табуляції у пробіли відповідно до ваших налаштувань.
Нормалізація маркерів та виправлення нумерації
Markdown підтримує три різні символи маркерів для маркованих списків: дефіс (-), зірочку (*) та плюс (+). Хоча всі три створюють коректні елементи HTML (<ul>), змішування типів маркерів в одному документі створює візуальний хаос і не проходить автоматичні перевірки лінтера (наприклад, правило MD004 у markdownlint).
Крім того, нумерація списків часто порушується під час редагування. Автори часто вставляють пункти в середину нумерованого списку або покладаються на синтаксис 1.:
<!-- Невідформатований / порушений вхідний текст -->
* Функція A
- Функція B
+ Функція C
1. Початковий крок
1. Другий крок (скопійовано з чернетки)
4. Крок з порушеним порядком
Форматер Utiliome нормалізує всі маркери до обраного єдиного символу (наприклад, замінює все на -) та послідовно перенумеровує списки (1., 2., 3.) або стандартизує їх до одиничних інкрементів (1., 1., 1.) відповідно до гайдлайнів вашої команди.