Для написания статей на этом блоге я пользуюсь синтаксисом Markdown. Это один из альтернативных синтаксисов оформления текстов без использования HTML-тегов. И хотя я всегда считал, что придумывание новых еще более упрощенных синтаксисов для и так несложного HTML'а — это зло, Markdown мне понравился. Он, пожалуй, самый продуманный из тех, что я видел, и самый ненавязчивый.
Вот вещи, которые мне особенно нравятся:
- Его очень удобно читать с экрана, когда редактируешь, потому что он минимально отличается от простого текста.
- Он позволяет использовать чистый HTML без всяких лишних движений: я могу скопировать HTML-код в окно редактора и знать, что Markdown никак его не порушит. Это же означает, и что уже написанные без Markdown статьи не нужно конвертировать ни во что.
- Он незаменим для вставки примеров HTML-кода (и не только HTML).
Вставка кода — это, пожалуй, самое главное для меня на блоге, который впрямую посвящен примерам HTML-кода :-). И именно поэтому я тут же отказался от WYSIWYG-редактора Wordpress 2.0: в нем для вставки HTML предлагается заменять все угловые скобки на <
и >
. И хотя сам процесс замены можно автоматизировать, читать это потом и редактировать все равно ужасно муторно. В Markdown же код можно вставлять и редактировать в его первоначальном виде. Он автоматически escape'ится и форматируется в <pre>
.
Однако, у Markdown есть и свои недостатки. Особенно мне не нравились такие:
Внутри HTML-тегов он полностью отключается. То есть, если я делаю примечание:
<p class="note"><small>...</small></p>
Внутри
<small>
использовать его синтаксис я уже не могу.Заголовкам и абзацам нельзя проставить id, чтобы ссылаться на них через якоря.
Абзацам нельзя задавать
class
, что и заставляет меня использовать для примечаний HTML.Нет синатксиса для
<dl>
, которым я часто пользуюсь. А значит, опять же, приходится использовать HTML.
Но оказывается, есть штука, которая решает по крайней мере часть этих проблем — Markdown Extra. В частности, она позволяет задавать id заголовкам, специально разрешать markdown-синтаксис внутри HTML'а и умеет кодировать <dl>
.
Вчера поставил ее и переформатировал свой новогодний пост:
Веб-разработчикам
: Чтобы [IE7][] понимал CSS как остальные браузеры.
Программистам
: Чтобы ваш босс узнал про [agile-методы][] и перестал повторять,
что вы "вечно все не успеваете".
Проектировщикам
: Чтобы ваша система на [Rails][] или [Django][] масштабировалась
так же хорошо, как прототипируется.
Блогерам
: [<img class="right" src="/media/blog/too-much-spam.png"
alt="81% всех комментариев - спам.">][spam] Чтобы вы забыли про
спам в комментариях.
Фрилансерам
: Чтобы клиенты косяками несли деньги, услышав от вас "Web 2.0"
И всем-всем-всем -- хорошего нового года!
[IE7]: http://blogs.msdn.com/ie/
[agile-методы]: http://martinfowler.com/articles/newMethodology.html
[Rails]: http://www.rubyonrails.org/
[Django]: http://www.djangoproject.com/
[spam]: http://akismet.com/
Так что всем, у кого технарные блоги — оченно рекомендую.
Комментарии: 13
Так это просто диалект вики-разметки.
Отсутствие id'ов и class'ов в ней - это фича.
Какой именно вики-разметки? :-)
Все эти синтаксисы, конечно, чем-то похожи. Но почему отсутствие id и class'ов — фича?
Потому что это язык публикации, а не создания документов. Идентификаторы могут синтезироваться из эксплицитного (явно существующего) текста.
То есть,
===Заголовок=== есть
Заголовок
[[Текст ссылки]] (в простейшем случае) есть Текст ссылки
То есть вики-разметка - это совсем уже не код, а чистый текст. Ничего, чего бы не было видно в тексте, под ней спрятать нельзя. И испортить страницу, на которой публикуется фрагмент нельзя. И единство внешнего вида обеспечивается.
Разумеется, вики-разметка бывает разная, но у большинства правил общая база. В самом общем случае, вики-разметка - это расширение набора знаков препинания, причём некоторые из вики-пунктограмм с той же семантикой использовались до появления компьютеров (астериксы для выделения полужирным, подчёркивания для италика, тире для списков и таблиц и т.д.)
Вот... А я все пытался это в своем комментарии сформулировать... Дело в том, что markdown — не язык публикации внутри замкнутой системы документов. Он служит для описания HTML-документов "вообще". Поэтому он не такой агрессивный, как любая wiki-разметка, где генерятся idшки заголовкам и ссылки из CamelCase-слов. То есть, он менее специальный. От того и проще.
Увы... Квадратную скобку неудобно при кириллической раскладке набирать. В этом смысле близок к идеалу ваккоформаттер, но и в нём цитирование реализовывается через <[...]>.
Вот ещё вакоформатер кто-нибудь на питоне переписал чтобы его можно было в django использовать, я подумал бы что в раю.
А как быть с объединением ячеек в таблицах MarkDown? Я так понял, это невозможно...
В исходном Markdown таблиц нет вообще. В Markdown Extra есть, но да, там объединять ячейки нельзя. HTML is your friend :-)
А мне очень... Ну просто очень понравился textile. Прост, удобен, и интуитивно понятен. У него есть только пару недочетов. (из тех что я бы подправил)
bc. (блок кода) нельзя делать отступы на 1 строку, или 2 если использовать bc.. (видится только 1 решение сделать закрывающий тег, если закрывающий тег не находится тогда работаем по старинке). bq. (блок цитаты) аналогично предыдущему.
Что то больше ничего не вспоминается, но точно было еще :)
А вот эту штуку FencedCodeBlocks можешь включить? Все равно здесь чистый маркдаун ни кто не читает, а делать отступы по 4 пробела не всегда удобно.
Available_Extensions
У меня не python-markdown используется. Плюс, прямо в textarea есть автоиндент, поэтому писать код с отступом не так сложно.
Сделал Markdown (Extra) блоговый движок на PHP, работает на RSS (кроме прямого назначения это еще и лента блога), и чистых Markdown файлов. Работающий пример блога: ibnteo.klava.org
От вашего блога отличается тем, что не используется база данных и вообще какая-либо админка, комментарии через внешний сервис прикручены.
Проект открытый, любой желающий может скачать код с Google Code.
В 2017 MackDown Extra криво пашет.
Сейчас сноски работают без вторых квадратных скобок. А для добавления сноски к картинке используется метод
[![81% всех комментариев - спам.](/media/blog/too-much-spam.png "title")][spam]
, где!
обозначается картинка.