HTML в Markdown: когда и зачем конвертировать в обратную сторону
Зачем переводить HTML обратно в Markdown, что переживает обратный путь и какие крайние случаи ломают большинство конвертеров.
Обычно Markdown превращают в HTML. Обратное направление кажется странным — ровно до того момента, когда оно вдруг очень нужно.
Ситуация, которая чаще всего к этому приводит, такая: вы скопировали что-то с веб-страницы, из Google Docs или из старой CMS, а теперь хотите получить это в файле .md. Вставите сырой HTML в README — и получите стену из <div> и <span>. А хотели вы заголовок, пару абзацев и список. Этим и занимается конвертер HTML в Markdown — срезает разметку до тех немногих символов, которыми Markdown реально пользуется.
Где это всплывает
Я раз за разом натыкаюсь на одни и те же случаи.
Главный — перенос блога. WordPress, Ghost и большинство старых платформ хранят посты в HTML. Переезжаете на статический сайт вроде Astro или Hugo — и вам нужны исходники в Markdown. Конвертация экспортированного HTML проходит процентов на девяносто пути: пару постов потом всё равно поправите руками, но это правка, а не перепечатывание с нуля.
Дальше — контент, который вы вправе сохранить. Документация, которую вы сами написали, опубликованная статья, заметки, застрявшие в каком-нибудь rich-text-редакторе. Для браузера такой HTML годится, а руками его редактировать мучительно.
И мелкая ежедневная морока: вы копируете таблицу со страницы, а нужна она в документе Markdown. Перепечатывать таблицу из десяти строк — задача, после которой хочется закрыть ноутбук. Конвертер делает из неё таблицу в формате GitHub за одну вставку.
Что реально переживает преобразование
Не всё переносится чисто, и границы полезно знать заранее, до того как доверять результату.
Надёжно конвертируется вот это:
- заголовки от
<h1>до<h6>; - жирный, курсив, зачёркивание и строчный код;
- ссылки и изображения;
- нумерованные и маркированные списки, в том числе вложенные;
- цитаты и горизонтальные линии;
- блоки кода — а если у тега
<code>стоитclass="language-js", ограждение сохранит меткуjs.
Интереснее всего с таблицами. «Правильного» способа уложить сложную HTML-таблицу в Markdown нет: в таблицах Markdown не бывает объединённых ячеек и блочного содержимого внутри ячейки. Хороший конвертер сводит каждую ячейку к простому тексту, считает первую строку заголовком и экранирует символы |, чтобы результат не развалился. Для обычных таблиц с данными это именно то, что нужно. А таблицу, которую кто-то использовал как вёрстку страницы, перенести было нельзя изначально — тут не спасёт ни один инструмент.
Крайние случаи, которые кусаются
Пробелы — тихий вредитель. HTML при отрисовке схлопывает череду пробелов и переносов строк, а текстовый редактор — нет. Конвертер, который копирует пробелы буквально, выдаёт Markdown с лишними отступами, и парсер потом читает их как блоки кода. Лечится это так же, как делает браузер, — пробелы схлопываются. Именно так и поступает инструмент HTML в Markdown, прежде чем что-либо вывести.
Скрипты и стили — второй такой случай. Скопированный фрагмент страницы часто тащит за собой блоки <script> и <style>. Видеть их содержимое в виде текста в документе вы не хотите, поэтому они отбрасываются целиком, а не конвертируются.
А неизвестные теги — все эти обёртки <div>, <section> и <figure> — разворачиваются. Сам тег исчезает, текст внутри остаётся. Одно это правило и превращает раздутый фрагмент страницы обратно в читаемый текст.
Обратный путь не бесшовный
Стоит помнить одно: цепочка Markdown → HTML → Markdown не всегда вернёт вам ровно тот файл, с которого вы начали. В HTML больше способов выразить одно и то же, чем в Markdown, поэтому конвертеру приходится выбирать один. Жирный текст может вернуться как **, хотя изначально вы написали __. Это косметика — отрисованный результат идентичен, — но побайтного совпадения ждать не надо.
Для разовой вставки всё это неважно. Для массового переноса прогоните сначала несколько типичных страниц и посмотрите глазами на результат, прежде чем конвертировать тысячу.
Вставьте HTML в конвертер HTML в Markdown и скопируйте чистый Markdown прямо на выходе — без регистрации и без установки.