Markdown синтаксис. Вики и другие вебсервисы с поддержкой Markdown. Язык разметки Markdown

  • 20.04.2019

Пожалуй, главным открытием за последнее время для меня стала не какая-то новая технология или новый удобный сервис, а… язык разметки. Казалось бы, что здесь может быть примечательного? Только если речь идет не о Markdown. Простая идея, как можно оформить текст и превратить его в валидный HTML, выстрелила настолько, что использовать его можно практически повсеместно. А благодаря популярности Markdown в хакерских кругах, появился еще и совершенно новый подход (и сервисы) к публикации контента, в основе которого лежат статические файлы.

Markdown? Что это?

Легче всего смысл Markdown объяснить на простейшем примере. Для составления списка дел я использую обычный текстовый файл, в котором пишу:

Список дел: - написать статью о Markdown - сделать иллюстрации - отправить в редакцию

Каждый из нас умеет оформлять сложные структуры в простом plain text’е, и в этом основной смысл Markdown. Например, приведенный текст можно сразу сконвертировать в HTML, при этом интерпретатор Markdown (скажем, реализованный в виде плагина к текстовому редактору вроде SublimeText или Notepad++) сам распознает, что имеет дело с ненумерованным списком:

Список дел:

  • написать статью про Markdown
  • сделать иллюстрации
  • отправить текст в редакцию

Как пишет сам автор Markdown Джон Грубер, идея языка в том, чтобы синтаксис был настолько прост, компактен и очевиден, что размеченный документ оставался бы полностью читаемым и непосвященный человек мог бы даже решить, что перед ним обычный plain text. Как Markdown добивается такого результата?

Возьмем чуть более сложный пример. Представь, что тебе нужно оформить нумерованный список. Очевидно, что ты поставишь перед каждым пунктом соответствующий номер. Нужно акцентировать внимание на какие-то слова? Ты наверняка сделал это с помощью каких-то символов.

# Заголовок ## Подзаголовок В этом абзаце нужно: 1. что-то выделить **жирным** и *курсивом* 2. поставить ссылку на сайт автора - (http://daringfireball.net) 5. процитировать код, например, `print "Hello, world!"` 3. и вставить портрет автора![Джон Грубер](http://daringfireball.net/graphics/author/addison-bw-425.jpg)

В этом примере хорошо видно, насколько читабельным остается текст. Фактически очевидного решения не придумали только для вставки ссылок и картинок, плюс изначально язык не позволял определить масштаб изображения. В результате обработки интерпретатором на выходе мы получаем готовый код:

Заголовок

Подзаголовок

В этом абзаце нужно:

  1. что-то выделить жирным и курсивом
  2. поставить ссылку на сайт автора - Daring Fireball
  3. процитировать код, например, print "Hello, world!"
  4. и вставить портрет автора

По сути дела, ты уже знаешь синтаксис Markdown - все прочие нюансы за пять минут осваиваются чтением официального мануала (daringfireball.net/projects/markdown/syntax).

На фига козе баян?

О’кей, язык разметки действительно очень простой и понятный. Но где это можно использовать? Зачем это нужно? Набившая оскомину аббревиатура WYSIWYG давно доказала свою несостоятельность среди продвинутых пользователей. Мы пробовали использовать визуальный подход при оформлении материалов на , и это был тихий ужас. WYSIWYG-редакторы, даже очень хорошие, работают криво и в случае сложной верстки начинают безбожно глючить. Многие сложные вещи невозможно было сделать в принципе. Не использовать же HTML в чистом виде (хотя чего греха таить, иногда мы так и делаем)? Та же самая Wikipedia с самого начала своего существования предлагала специально разработанную wiki-разметку. А любой мало-мальски толковый форумный движок поддерживает bbcode или что-то похожее. Проблема одна: разметка используется, но везде разная. Mаrkdown же сразу многим пришелся по вкусу, в результате чего его взяли на вооружение многие популярные ресурсы. Бесспорно, намного удобней писать комментарий в форуме, используя разметку Markdown, нежели чистый HTML, в тегах которого легко запутаться. Именно поэтому сервисы tumblr и posterous поддерживают такой режим ведения блога. Также поддерживают Markdown-разметку многие CMS: Drupal, Plone, RadiantCMS - и фреймворки: Django (требуется установка python-markdown), Ruby on Rails (требуется установка BlueCloth, Maruku).

Поддержка синтаксиса есть в любом уважающем себя текстовом редакторе, а опцию для быстрого предпросмотра легко подключить в виде плагинов. К тому же есть немало специализированных редакторов, изначально заточенных для работы с Markdown (ты можешь выбрать подходящий, прочитав отдельную врезку). А интерпретаторы для обработки языка разметки реализованы на любом языке, поэтому, будь твой проект на Python, PHP, Ruby и чем-либо еще, - везде ты сможешь предложить пользователям Markdown. Дальше - больше. Markdown стал настолько популярен, что лег в основу многих сервисов. К примеру, набирающий обороты стартап scriptogr.am позволяет превратить статические файлы, оформленные на Markdown и выложенные в Dropbox, в красивый блог (с возможностью подключения любого домена). Подхваченная идея быстро эволюционировала в кругах гиков и выросла в создание таких движков, как Octopress .

Octopress — очень функциональное решение для твоего уютного бложика

Редакторы для работы с Markdown

То, что Markdown может существенно упростить жизнь, - несомненно. Но чтобы использовать его еще продуктивней, нужно работать с софтом, который его поддерживает. Спешу обрадовать: привычные редакторы вроде SublimeText, TextMate, Vim и Emacs, которыми ты наверняка пользуешься, отлично ладят с Markdown, если их этому научить с помощью плагинов. Для Sublime это Sublimetext-markdown-preview и SublimeMarkdownBuild , для TextMate — Мarkdown.tmbundle , для Vim - Vim-markdown и Vim-markdown-preview , а для Emacs - Emacs Markdown Mode . Или можно заюзать специализированные редакторы.

Windows

В общем виде работа с блогом будет выглядеть так: ставим на локальную машину сервер Octopress, пишем посты в Markdown-файлики, правим шаблон (если надо), выполняем в консоли команду для генерации контента и, наконец, заливаем полученный HTML + JS в наш репозиторий на GitHub. Ну а теперь по порядку.

  1. Первым пунктом идет установка Octopress 2.0. Для его работы необходим установленный Ruby 1.9.2. Кроме этого, должен быть еще установлен Git. Для начала скачиваем исходники Octopress, подготавливаем их и устанавливаем: git clone git://github.com/imathis/octopress.git cd gem install bunlder bundle install
  2. Затем устанавливаем стандартную тему Octopress. rake install
  3. Далее следует настроить Octopress на работу с нашим репозиторием: rake setup_github_pages
  4. В процессе выполнения задачи нас попросят ввести URL нашего репозитория. В принципе, после этого можно уже публиковаться. Делается это одной командой: rake gen_deploy

    или двумя:

    Rake generate rake deploy

    Можно до deploy выполнить еще rake preview, в результате чего запустится локальный веб-сервер на адресе http://0.0.0.0:4000, где можно посмотреть, что же нагенерировал Octopress. Если необходимо что-то подправить в конфигурации, то нужно обратиться к файлу _config.yml.

  5. Теперь пришло время создания первого поста: rake new_post["Название поста"]

    В папке source/_posts/ появится файлик с текущей датой и заголовком поста, в формате Markdown. Берем любой понравившийся Markdown-редактор, редактируем файл и публикуем пост:

    Git add . git commit -m "Initial post" git push origin source rake generate rake deploy

Все, можно переходить по адресу блога и проверять, как опубликовалась первая запись. Если нужно привязать свой блог к кастомному домену, то это легко сделать, воспользовавшись простой инструкций (bit.ly/MWgR3f). На первый взгляд такой подход может показаться странным, но на самом деле он предельно удобен. Сайт работает очень быстро, потому что состоит из статических файлов и размещается на надежных площадках. Благодаря использованию GitHub любой может предложить свои изменения в посты - и ты легко можешь их применить. Сам Octopress предлагает отличный HTML5-шаблон с массой плюшек вроде быстрого подключения внешней системы комментариев (например, Disqus’а). Конечно, это история не про обычных людей, но мы о них и не говорим.

Другие генераторы статических сайтов

Надо сказать, что Octopress не единственный инструмент для генерации статического контента. Хотелось бы остановить твое внимание еще на двух инструментах: Poole (bitbucket.org/obensonne/poole) и BlazeBlogger (blaze.blackened.cz).

Poole - генератор статических сайтов, использующий Markdown. Он написан на Python и для своей работы ничего, кроме него, не требует. Работать с ним очень легко: ты создаешь содержимое веб-страниц с помощью Markdown - и Poole превращает их в простой и красивый сайт, снабженный навигационным меню. Принцип работы несложен: программа берет файлы из директории input и копирует их в директорию output, при этом все файлы с расширением md, mkd, mdown или markdown конвертируются в HTML с page.html в качестве каркаса. Если ты хочешь заменить внешний вид сайта, то необходимо будет подредактировать файлы page.html и input/poole.css. Чтобы обновить, изменить, добавить контент, необходимо выполнить:

> poole.py --build

После чего Poole заново сгенерирует твой сайт.

Еще один инструмент для создания статического сайта - BlazeBlogger. Для своей работы он не требует ни баз данных, ни выполнения скриптов на стороне сервера. Все, что нужно, - это установленный Perl-интерпретатор. Для создания контента также используется Markdown, так что ты можешь создавать свой блог в любом понравившемся Markdown-редакторе. К основным возможностям относятся: создание валидных HTML 4.01 или XHTML 1.1 страниц и RSS 2.0 фидов; генерация помесячных и погодовых архивов, поддержка тегов; позволяет создавать как блогпосты, так и просто страницы; позволяет быстро поменять тему, CSS-стили или локализацию. Подробную информацию по опциям всех утилит, идущих вместе с BlazeBlogger, ты можешь посмотреть на официальном сайте.

Markdown: что дальше?

Простая идея постоянно эволюционирует. Первая реализация, написанная Джоном Грубером, являлась обычным скриптом на Perl. По мере того как новый язык разметки обретал популярность, появлялись новые реализации, написанные сторонними разработчиками на C#, C, Common Lisp, Haskell, Java, JavaScript, Lua, newLISP, Perl, PHP, Python, Ruby, Scala сторонними разработчиками, которые ориентировались на первую реализацию, ставшую своего рода стандартом. Помимо реализаций на разных языках программирования, появились еще приложения, расширяющие синтаксис Markdown дополнительной функциональностью, такие как MultiMarkdown и pandoc. Диалекты Markdown позволяют работать с документами из множества файлов, автоматически делать таблицы, собирать библиографии, вставлять математику на MathML и комбинировать код с другими языками верстки, включая LaTeX, HTML и прочие. Расширенные диалекты умеют автоматизировать различные вещи: например, проставлять правильную типографику. Кроме того, выводить можно не только в HTML, но и в PDF, RTF, ODT и даже man-страницы (люди, хоть раз видевшие синтаксис языка troff, оценят). Все это позволяет использовать Markdown в самых разных целях: писать документацию, книги и целые сайты.

Популярность этого изящного синтаксиса разметки набирает обороты популярности по всему миру. Честно сказать, Markdown как наркотик - попробовав один раз написать пост на нем, ты вряд ли вернешься к обычному HTML. Прочувствую преимущество. Использовав Markdown при написании этой статьи, я могу не только преобразовать ее в PDF, но и без лишних трудозатрат опубликовать на сайте. А редакция, подсев на Markdown, уже всерьез задумалась о разработке простых скриптов, чтобы конвертировать текст в файл верстки используемой в издательстве программы InDesign. Я этому не удивляюсь.

Идея довольно проста: вы пишете обычный "плоский" текст, и по ходу дела создаёте в нём структуру с помощью очень простых меток. Идея Markdown - быть простым и читабельным для гуманоидов языком разметки - по сути, это упрощённый HTML.

Когда вы пишете в Markdown, форматирование текста остаётся там, где вы его поставили и где вы хотите - кто пытался конвертировать текст из Word в HTML или хоть раз набирал длинный пост в визуальных редакторах типа Blogger, тот хорошо меня поймёт.

Обычный плоский текст дает безумную легкость в редактировании, контроль версий и доступ к документации везде, где есть необходимость. И при помощи pandoc и markdown из всего этого можно генерить практически любые документы и в разных форматах.

Синтаксис Markdown

Очень простой и вполне логичный. Краткое краткое описание синтаксиса, позаимствованное отсюда :
  • Абзацы разделяются пустой строкой
  • Два или более пробела на конце строки задают разрыв строки
  • Шрифты: **жирный** , _курсив_ , `моноширинный`
  • Заголовки: #первый уровень# , ##второй уровень##
  • Списки:
    • неупорядоченные: - элемент списка.
    • упорядоченные: 1. элемент списка
  • Блок кода - каждая строка начинается с 4 или более пробелов
  • Горизонтальная черта: три или более дефиса или звездочки
  • Ссылки:
    • встроенные [текст метки](url)
    • в виде сносок
  • Изображения:
    • встроенные!(url)
  • Экранирование символов делается с помощью обратной косой черты. Экранироваться должны следующие символы: * _ { } () # + - . !
На всякий случай приведу его здесь в виде шпаргалки:

Отдельной строкой идёт комментирование в Markdown, которое реализовано криво. Если комментарий короткий (inline), то можно воспользоваться обычным методом комментирования из HTML:


В Сети достаточно описаний простенького синтаксиса Markdown, но есть и особо выдающиеся ресурсы:

  • на английском с 30 ссылками на самые разные и полезные ресурсы по Markdown (автор - маковод);
  • , но автор считает единственным применением Markdown красноглазие с Jakyll.
  • (на английском).
  • а это мало того, что приличное описание Markdown, так ещё и огромное количество ссылок на то, что поддерживает Markdown в той или иной степени.
Удобно повесить шпаргалку где-нибудь на видном месте - их сделано уже немало, и среди них выделяются:
  • простенький и минималистский текст
  • красиво оформленный в виде вебстраницы
  • готовый к печати в виде PDF файла (PDF, 60 Кб)
  • ещё один, на английском, плотно оформленный в виде PDF
Для тех, кто не хочет читать - есть видеоурок на Ютубе:


где вам очень грамотно и на английском расскажут за 12 минут о том, что такое Markdown и зачем он вообще сдался.

Визуальные редакторы для Markdown

Удобнее всего набирать что-то в Markdown и сразу видеть результат - получается некая среда для вёрстки. Есть онлайн-редакторы, а есть приложения, которые можно использовать и без подключения к сети.

Редакторы Markdown как приложения

Новомодные облачные сервисы и прочий вебдваноль это, конечно, здорово, но вот случилось страшное и вы остались без соединения с Сетью. И что тогда? А тогда нам поможет старый-добрый десктоп и отдельностоячие приложения.
ReText
Один из немногих работающих редакторов Markdown под Linux это ReText . Так как написан он на QT4 и питоне, приготовьтесь тащить ради этой сопливой поделки размером в 100Кб кучу библиотек Qt4:
# apt-get install python-qt4 ... The following NEW packages will be installed: libqt4-help libqt4-scripttools python-qt4 python-sip 0 upgraded, 4 newly installed, 0 to remove and 184 not upgraded. Need to get 5,728 kB of archives. After this operation, 21.7 MB of additional disk space will be used. Do you want to continue ?
Вот за что автор этих строк не любит все эти поделки на питоне: маленькая программа на 100 кб, тянет за собой библиотек на 22 Мб. Тем не менее, визуальный редактор ReText имеет место быть и даже работает:

По сути не представляет собой ничего особенного - просто двухпанельник с минимумом функций. Если вы не хотите тащить половину Qt4, то ReText легко заменяется онлайн-редакторами, часто имеющими куда более внушительную функциональность.

Qute
Ещё один редактор, заслуживающий внимания - Qute . Он хорош тем, что обещает ещё и поддержку LaTeX. Для редактирования кода нужно нажать на абзац с текстом:

Приложение находится в очень ранней стадии разработки, но уже есть версия для Linux . Более того, есть и Android-приложение .

Поддержка Markdown текстовыми редакторами

Если кто-то начнёт вам заливать про то, что Markdown поддерживается везде и всюду - это враньё слишком оптимистично. Кроме Vim и Emacs, подсветки синтаксиса по умолчанию нет ни в Kate, ни в Gedit, но есть, например, в Submile Text 2. Eё можно воткнуть, но сторонними плагинами - например, в Kate можно сделать так:

Installation is simple - copy the markdown.xml file to your ~/.kde/share/apps/katepart/syntax/ directory.
That’s it. Then, when you open a file with extensions of *.text, *.md, *.mmd , you’ll get Markdown-colored syntax editing!
Get the download code for the XML file (it’s dual-licensed under both GPL and BSD licenses).
Но на текстовых редакторах свет клином не сошёлся, и нам больше пригодятся редакторы визуальные.

Онлайн-редакторы Markdown

Те, кто всё ещё пользуется устаревшими текстовыми редакторами вынуждены прикручивать раскраску синтаксиса Markdown самостоятельно. Но у нас же 21 век на дворе, с вебдванолем и веб-сервисами, и нам хочется онлайн визуального редактора. Их есть у нас:

  • Dillinger : две панели, убогий фон "тетрадный лист", тормозная отрисовка, но есть возможность экспорта в GitHub и Dropbox, отображение номеров строк, и возможность экспорта HTML.
  • Instantmark ещё один простенький двухпанельник, но имеет возможность экспорта файла в форматах Markdowm и HTML (их можно скачать).
  • Походный редактор Markdowm : единственная полезная возможность, кроме стандартных кнопок и двух панелей - вкладка с синтаксисом.
  • Ещё в качестве онлайн редактора Markdown можно посмотреть на prose - из плюсов интеграция с GitHub и минималистский дизайн.
Внимания заслуживают первые два редактора, остальные страдают реализацией или дефицитом идей.

Блогодвижки и Вебсервисы на Markdown

Если Markdown весь из себя такой прекрасный, то где же блогоплатформы его использующие? А нет их Очень мало, так как блог на голом Markdown неудобен (нет тегов, комментариев, сайдбара, приличных тем) и выглядит как привет из 90х. Тем не менее, кое-что можно раскопать.

Сколько-нибудь вебсервисы, поддерживающие Markdown

Имеется в виду до какой-то степени законченные решения, позволяющие обычному пользователю не красноглазить с хостингом, хаскелем, jakyll, и прочими реактивными сноповязалками.
  • posterous : поддерживает Markdown, но он продался зачем-то Твиттеру и со дня на день закроется.
  • Tumblr: переваривает Markdown разметку, но это одна из самых чудовищных реализаций микроблогов.
  • Wordpress поддерживает Markdown разметку через специальный плагин.
Это более или менее продуманные решения, но если нам хочется личного творчества, то...

Связки Markdown + Dropbox

Это в общем-то не блогодвижки, а просто онлайн-рендеринг Markdown файлов пользователя по запросу плюс хостинг. Выглядит это всё слишком минималистично, но тем не менее:
  • Calepin : Сервис блогов без тем, без тегов, без виджетов, без кастомизации, и с убогим оформлением . И за деньги (в перспективе, см. FAQ).
  • scriptogr.am : пожалуй, наименее красноглазое решение, есть оформление лучше, и есть поддержка CSS. Более того, там обещают такую киллер-фичу, как метки для постов.
Но настоящие мужики ведь не ищут лёгких путей, и поэтому...

Hakyll/Jekyll + Markdown + GitHub = недо блогодвижок

Если у кого-то появилась идея "а я сейчас сделаю клёвый движок на маркдауне и буду писать на нём посты в мегаблог" - подумайте ещё раз. Вы потратите море времени на это, а в результате получите убогий недодвижок и посты (если у вас останутся силы их писать) с примитивным оформлением.

Примеров реализации подобных затей, более или менее удачных, хватает с избытком, и немногие тянут на прилично выглядящий standalone блог, хотя есть и исключения [сайт на Jekyll, www.juev.ru ]:


Зато бороться с хостингом, Jekyll/Hakyll и гитхабом можно до полной потери пульса. Для чего-то более или менее достойного, типа подсветки синтаксиса, выделения цветом и нормальных рисунков с подписями вы вернётесь к WYSIWYG, в котором это делается реально проще .

Здесь хотелось бы напомнить товарищам борзописцам, что блог ценен контентом, а не движком. Можно красноглазить с Markdown сколько угодно и истово боротья за правильный и сакрально чистый HTML. Но на то, как ужасно выглядит код, выданный WYSIWYG-редактором, плевать 99.999% процентам читателей и поисковых систем: люди и роботы ходят на сайты за контентом .

Использование Jekyll и Hakyll для блогодвижков может быть оправдано следующими соображениями:

Получается статический сайт, который можно размещать где угодно и нет особых требований к хостингу;
- меньше проблем с безопасностью;
- посты и картинки всегда у вас, легче создавать бекапы.

Стоит ли это всё дополнительных усилий, каждый решает сам.

Вики и другие вебсервисы с поддержкой Markdown

Далее я оставлю небольшой список потенциально рабочих решений в виде вики, сайтогенераторов и других исчадий софтостроения:
  • Dotclear - достаточно законченное решение для блогодвижка с поддержкой Markdown. Написано на глобальном и надёжном PHP.
  • судя по описанию, генератор статических сайтов с поддержкой markdown (под Windows)
  • нечто под звучным названием obtvse , выдающее себя за минималистский блогодвижок-генератор статических HTML страничек. Собирает пыль на гитхабе, можно попробовать вдохнуть в него жизнь.
  • Sputnik - сравнительно богатая возможностями Wiki с прямой поддержкой Markdown, написанная на Lua.
Много ссылок приведено в тексте, и это в самом деле удобнее делать с помощью Markdown. Корявая поддержка таблиц в Markdown и особенно отсутствие ц в е т а сильно огорчают автора , который привык выделять цветом всё , что ни попадя по поводу и без. Но составление вложенных списков для Еженедельного Обзора в GTD это, пожалуй, убойная возможность Markdown, ради которой можно потратить время на его освоение.

Анонимный комментирует... 24 сент. 2012 г., 07:41:00

github: pages не волнуют, а вот README.md в каждом репо -- реальная альтернатива страничке и/или вики маленького проекта; то же для bitbucket

posterous был самой чудовищной блог-платформой, потому что веб редактор не позволял править блоки кода. tumblr аутичен, но все равно православен, в отличиии от нугла не навязывает красных кнопок и javascript-only дизайнов.

Михаил Саушкин комментирует... 24 сент. 2012 г., 12:29:00

Давно использую markdown в связке c MathJax для публикации лекций, содержащих кучу формул, on-line. К Markable MathJax прикрутился тоже без проблем. Результат . Достаточно вставить строчку скрипта. Согласен с автором: в markdown меня убивает отсутствие поддержки таблиц, но есть костыль в виде html-кода, ну или в виде latex-кода с использованием окружения array.

virens комментирует... 24 сент. 2012 г., 12:57:00

@Andrew Prokhorenkov комментирует...
Может не Hakyl, а Jekyll?
Имелся в виду Hakyll . Исправил в тексте поста.

А в качестве редакторов Markdown для себя нашёл prose
Спасибо, добавил в пост. Хотя для меня гитхаб это минус, а не плюс.

@vova комментирует...
Pandoc поддерживает несколько вариантов оформления таблиц
Я знаю, но маркдаун сам по себе - не поддерживает.

Pandoc имеет ещё кучу замечательных особенностей
Это точно. На самом деле, была мысль воткнуть в пост ещё и про pandoc, но подумал, что уж слишком много.

@Denis Evsyukov комментирует...
Ммм, довольно странный наезд на блогодвижки, использующие markdown для хранения статей.

Это не наезд, а критика. По большей части конструктивная, хотя и с элементами троллинга.

У меня www.juev.ru работает на jekyll, все статьи в markdown. Что не так?
Я знаю. Просто вопрос в том, что в Wordpress и Blogger всё это (и намного больше) из коробки - зачем тратить время на изобретение колеса.

Кстати, Денис, твой блог - наиболее красивый из того, что я видел на джекиле. Всё остальное наводит леденящую душу тоску и отчаяние.

Плюс еще много различных разработок. Почему вы их называете недоблогодвижками?
Потому, что это недоделки, собирающие пыль на гитхабе. Конкретно: нет нормальных тем, нет сайдбара, нет комментариев, нет меток... Да, это можно прикрутить сторонними костылями. Но зачем?

@Заур Дзасежев комментирует...
Для Evernote есть консольный клиент для linux, поддерживающий заметки в Markdown. Зовётся geeknote
Занятно. Спасибо.

@iv_vl комментирует...
Поправь меня, но это хамство, против которого ты так выступаешь в комментариях.
Это не хамство, а несколько толстоватый троллинг.

Естественно, среди упоминавшихся не нашлось места www.juev.ru
Вот он один и есть, у которого блог выглядит сколько-нибудь красиво.

Упомянут в тексте, причём дважды.

Org Mode смотрит с презрением на «киллер-фичу» Markdown.
Емакс - не единственный текстовый редактор на этой планете. И вим, кстати, тоже.

Значительное количество онлайн редакторов Markdown против полурабочих прототипов для десктопа - вот что пугает.
Ну как же, iv_vl, все же заняты полезными делами: KDE4, Gnome3, Unity, Wayland. Одних форков Amarok уже по-моему десяток. А ты про маркдаун всё. Нам же так не хватает ещё десятка DE и пару сотен плееров.

За пределами веб, Markdown в качестве языка разметки не воспримается.
Вот этот-то пост как раз и пытается показать, что не вебом единым.

Отдельно обращаюсь к уважаемым блоггерам, собравшимся на дискуссию у этого поста. Я вижу, здесь на блоге, в «Краплёной колоде» отвалился счётчик FeedBurner.
Фидбёрнер глобально отвалился. Они работают над этим (ТМ). Хочется надеяться, что починят, хотя накрылась только статистика, сам фид жив и здоров.


Откуда дровишки? Там вырубают часть API, но сам фидбёрнер остаётся с нами. Его использует ОГРОМНОЕ количество народу.

virens комментирует... 24 сент. 2012 г., 12:59:00

@Анонимный комментирует...
github: pages не волнуют, а вот README.md в каждом репо -- реальная альтернатива страничке
Согласен с Анонимусом - кстати, для своего симулятора уже сделал такое ридми. Очень хорошо получилось.

tumblr аутичен, но все равно православен
А вот тут я с Анонимусом не согласен. Такого кошмарного вебсервиса я не видел давно: нет тегов, не работает поиск, нет sitemap... Разработчики ушли в запой, улетели на другую планету или вообще не пользуются своим сервисом.

за скритограм и калепин спасибо.
Это из моих комментариев у Акуловича . Так что это ему мерси:-)

@Михаил Саушкин комментирует...
Давно использую markdown в связке c MathJax для публикации лекций, содержащих кучу формул, on-line.
О, а это интересно. Спасибо, Михаил, мне бы это пригодилось.

К Markable MathJax прикрутился тоже без проблем.
А можно рецептик испросить? :-)

Результат здесь. Достаточно вставить строчку скрипта.
Весьма достойно, только несколько притормаживает отрисовка формул. А так вполне себе.

Согласен с автором: в markdown меня убивает отсутствие поддержки таблиц, но есть костыль в виде html-кода, ну или в виде latex-кода с использованием окружения array.
Честно говоря, не понимаю, почему поддержки таблиц и цветов не было изначально?

virens комментирует... 24 сент. 2012 г., 13:02:00

А насчёт хакила и красноглазия - приведут пример из жизни. Я в данный момент пытаюсь сделать новый оптимизационный алгоритм, который будет заточен под _мою_ задачу. Это математическое красноглазие, и меня можно спросить: зачем? Ведь есть столько алгоритмов, которые уже сделаны? Мой ответ: алгоритм, который я сделаю, будет лучше решать мою задачу, чем те, которые решают общую задачу. Моё решение лучше, потому что оно специализированное.

Маркдаун + хакилл = решение, которое, на мой взгляд, хуже существующих. Оно ограничено by design, и оно даст худший блогодвижок по сравнению с уже существующими. На таком "блогодвижке" нет ни меток, ни системы комментариев, ни тем.

Пример: я зашёл на блог и набрёл на интересный пост. Хочется почитать что-то ещё по этой теме, и хочется ткнуть в тег и посмотреть другие посты. У Juev-а метки есть, и одному Аллаху известно, сколько ему потребовалось на это сил. А в Вордпрессе это есть по умолчанию, просто из коробки.

Собственно, мой вопрос вот в чём: зачем тратить силы и время на то, что уже есть и отлично работает из коробки? Зачем тратить время на ещё одно колесо, если в итоге получится ровно тоже самое (если не хуже)? Я не могу найти ни одного вразумительного довода ЗА это. Комментаторы, возможно, приведут свои аргументы.

Не спорю: есть резон писать посты, хотя бы частично, в маркдауне - этот пост, кстати, написан в основном в Markable, кроме цветовой раскраски и картинок. Но делать из этого блогодвижок - зачем?!

Михаил Саушкин комментирует... 24 сент. 2012 г., 13:10:00

@virens
А можно рецептик испросить? :-)

Весьма достойно, только несколько притормаживает отрисовка формул. А так вполне себе.
Ну так скрипт отрабатывается с левого сайта, да и Markable немного тормознутая.

Anton Yakutovich комментирует... 24 сент. 2012 г., 18:27:00

Знатный пост, Миша. Сейчас всё побегут красноглазить с маркдауном:-)

> Ещё один редактор, заслуживающий внимания - Qute.
Ох, лучше не тратьте время. Дистрибутив для виндоус 40 MB и кривое тормознутое поделие на выходе.
Таким только пугать детей и сеять ненависть к использованию Markdown.

В статье часто пиарится pandoc, про MultiMarkdown ни слова. А зря, у него много вкусных плюшек .

> Ещё в качестве онлайн редактора Markdown можно посмотреть на prose
Как раз для редактирования всяких README.md и «недоблогодвижков» для гитхаба он подходит идеально. Я писал об этом.

iv_vl комментирует... 24 сент. 2012 г., 18:41:00

@virens комментирует…
Это не хамство, а несколько толстоватый троллинг.
Только правильное название «двойные стандарты». Если я буду на чёрных говорить «нигеры» — меня забанят, а в твоих устах — это «несколько толстоватый троллинг» чернокожего населения.

Упомянут в тексте, причём дважды.
Среди сайтов на Jekyll не упомянут ни разу.

по оф. информации FeedBurner отключают 20 октября.
Откуда дровишки? Там вырубают часть API, но сам фидбёрнер остаётся с нами
Никто не знает, насколько всё серьёзно, но шороху среди блоггеров Google навёл, часть мигрирует на FeedBlitz. Дровишки отсюда .

iv_vl комментирует... 24 сент. 2012 г., 19:12:00

@virens комментирует…
Оно ограничено by design, и оно даст худший блогодвижок по сравнению с уже существующими.
Не всем нужен блог как трибуна, чтобы вещать свои умные мысли. Многие пишут для себя, и наоборот, не желают тратить время на поддержание постоянной жизни блога, троллинг комментаторов. У них на первом плане удобство создания контента, а оно, как известно, у каждого своё. Кто задумывается о цветовой раскраске, когда пишет для себя? Вон, Juev использует чистый Markdown без таблиц и подсветки. Михаил, ты просто исходишь совсем из другого, из того, что каждый автор должен обязательно стать блоггером. Не каждый.

На таком "блогодвижке" нет ни меток, ни системы комментариев, ни тем.
Ну не прав же — это всё есть.

Зачем тратить время на ещё одно колесо, если в итоге получится ровно тоже самое (если не хуже)?
Дело не в количестве колёс. Кто-то предпочтёт велосипед машине из-за простого удовольствия. Ферштейн?

Minoru комментирует... 24 сент. 2012 г., 19:59:00

Я вот только сейчас после твоего коммента понял, зачем оно надо. И про маркдаун там сказано мельком.

@iv_vl комментирует...
Если я буду на чёрных говорить «нигеры» — меня забанят, а в твоих устах — это «несколько толстоватый троллинг» чернокожего населения.
Оффтопик, естественно, но тем не менее. Ты мне напомнил мою недавнюю поездку в Балтимор, США. Там я прошёл экспресс-курс политкорректности, когда на меня вырулило три тела с бейсбольными битами и фразой:

Yo, whitey, wazzup?! WataYoDoinHere?! Looking for problems?

Тут я подумал, что если отвечу "ёу, ниггаз" то живым домой точно не приеду. Учитывая, что я был единственным белым в радиусе четырёх кварталов:-)

Среди сайтов на Jekyll не упомянут ни разу.
Там говорится про Хакил и джекил вообще. Но я вставил скриншот всё-таки.

Никто не знает, насколько всё серьёзно, но шороху среди блоггеров Google навёл, часть мигрирует на FeedBlitz. Дровишки отсюда.
FeedBlitz - платный сервис, и именно они-то шороху и навели. Ибо им выгодно.

@iv_vl комментирует...
Не всем нужен блог как трибуна, чтобы вещать свои умные мысли.
Ну так зачем такие адские муки? Вон есть народ.ру - выглядеть будет так же. Функций не сильно больше. И кроме того - он бесплатный.

У них на первом плане удобство создания контента, а оно, как известно, у каждого своё.
Чтобы начать вести блог, надо уметь пользоваться Markdown, иметь хостинг, подымать Jekyll/Hakyll, загонять всё на гитхаб...

ОК, если уж пиарить Маркдаун, то с примерами типа scriptogr.am - оно хотя бы очасти тянет на то, чтобы называться блогосервисом.

Михаил, ты просто исходишь совсем из другого, из того, что каждый автор должен обязательно стать блоггером. Не каждый.
Владимир, я исхожу из того, что если что-то можно получить задаром и без геморроя, то почему бы, собственно, и не получить?

Ну не прав же - это всё есть.
Не везде. Не стану тыкать пальцем:-)

virens комментирует... 24 сент. 2012 г., 20:52:00

Дело не в количестве колёс. Кто-то предпочтёт велосипед машине из-за простого удовольствия.
Про велосипед это ты хорошо подметил: оно ещё и медленее:-) Ради любопытства решил замерить скорость - и что же я увидел?

Это мой унылый бложик на блогспоте:

mydebianblog.blogspot.com

Page size 415.6kB
Load time 1.63s
Requests 105
Perf. grade 80/100

Неплохо, особенно учитывая размер и упиханность джаваскриптами. Последний заезд на правку шаблона с участием тов. Vlsu привёл к тому, что там появился жЫрный блоб с джаваскриптом (он теперь заменяет MORE).

А теперь быстрые как молния и модерновые блоги на хакилах и джекилах:

http://www.juev.ru
Page size 40.7kB
Load time 2.58s
Requests 8
Perf. grade 92/100

При том, что он весит в 10 (!) раз меньше, грузится в полтора раза дольше. И не он один:

http://debiania.in.ua/

Page size 4.6kB
Load time 3.60s
Requests 4
Perf. grade 77/100

Это вообще прорыв - килобайт в секунду. А если посетителей будет много - кто-нибудь с ЛОРа или Хабра ссылочку даст, и что тогда?

Правда, не всё так грустно:

http://www.vonavi.me/

Page size 35.4kB
Load time 1.14s
Requests 12
Perf. grade 73/100

Можешь открывать шампанское, iv_vl, убедительная победа:-)

@Minoru комментирует...
Хамство.
Неправда ваша. Аргументы будут?

Denis Evsyukov комментирует... 24 сент. 2012 г., 21:37:00

@virens
А с помощью чего были произведены измерения скорости загрузки страниц??

Вот твой сайт – test - mydebianblog.blogspot.com/ , согласно которому время полной загрузки страницы составляет 7.3 секунды, а при повторном просмотре 4.3 секунды.
Мой сайт – test - www.juev.ru , для полной загрузки требуется чуть больше одной секунды, для повторной всего 0,54…

Я проводил измерения с одного из серверов, чтобы точность была приближена к реальным.

Спасибо большое за приятный отзыв! Но как раз сила Jekyll и подобных движков в том, что я могу полностью контролировать содержимое страниц и задавать именно то оформление, которое нужно мне. Blogspot, увы, этого уже не предоставит. А то, что ты мало встречал красивых работ на jekyll еще не говорит об убогости движка или о том, что его нельзя использовать для ведения блогов. Просто люди, которые эти блоги/сайты ведут, мало задумываются над оформлением.

Еще ты спрашиваешь, зачем использовать что-то еще, если есть wordpress? Во первых, в результате работы jekyll я получаю статический сайт, который можно размещать где угодно и особых требований по хостингу не нужно совершенно. Для wordpress же требуется хостинг с PHP и причем довольно хороший, особенно, если посещаемость будет на нем приличная.

Во-вторых, часть расширений, которые в нем есть, ломают страницы или вносят определенные ошибки в код страниц. Я понимаю, что для многих это совершенно ничего не значит, но я очень не люблю, когда кто-нибудь или что-нибудь вмешивается в мой код.

В-третьих, эти расширения требуется периодически обновлять, следить за безопасностью… Зачем? Если все что мне нужно – это только показать то, что я написал???

Зачем генерировать страницы каждый раз, когда заходит пользователь на сайт? Неужели нельзя на обычном блоге или простеньком сайте один раз сгенерировать страницы, чтобы потом только показывать результат?? Можешь привести мне пример блога, в котором страницы были бы явно динамическими? Где сам контент меняется по многим параметрам и где нужно было бы именно каждый раз, для каждого пользователя создавать свою, отдельную страницу? А если нет, то зачем же городить такой огород??

Почему бы не использовать генераторы статических сайтов??

На blogspot мало вариантов оформления, можно создавать свои, но возможности опять же ограничены и делать это довольно проблематично. Когда же стоит задача создать отдельное оформление для разных страниц (главная – одно, об авторе – другое, содержание – третье, а сами страницы блога – четвертое), то тут blogspot уже ничего не может предложить, впрочем, как и wordpress. В Jekyll же, как и в nanoc, это довольно просто реализуется. И кстати, можно даже задавать свое индивидуальное оформление для каждой отдельной страницы. Понятно, что мало кто будет этим пользоваться, но все таки.

Поэтому троллинг с твоей стороны получился несколько обидным…

Анонимный комментирует... 24 сент. 2012 г., 21:42:00

TeX сам по себе оказался не очень удобен, чисто в моей специфике - приходится работать с вордоориентированным шефом, а вот комбинация markdown -> .odt -> .doc оказалась вполне практичной и удобной.

Специально под это дело написал скрипт, который позволяет сразу генерить.odt файл из расширенного markdown"а

csl-файл - это файл стилей, который определяет оформление библиграфии. Этот стандарт широко используется в zotero. Поскольку у моего шефа в этом плане собственный интеграл пришлось переделывать - благо это разновидность xml.

Существенный нюанс в работе публикатора. Для генерации библиографии нужен BibTex-файл с источниками (`my.bib`), csl-файл для стиля оформления библиографии (`disser.csl`) и референсный файл - образец стилей `reference.odt` - чтобы pandoc знал, как нужно оформить документ на выходе. Референсный файл получается так. Сначала генерим просто `.odt` документ. Например так:

Pandoc -f markdown --bibliography ~/disser/my.bib --csl ~/disser/csl/disser.csl --standalone 01_01.txt -o 01_01.odt

Открываем его в `libreoffice`. Там, конечно, будет Times New Roman 12, а не 14, заголовки Arial"ом и так далее. Меняем это все на то, что нужно нам - 12-й роман на 14-й, переделываем стили заголовков, устаканиваем колонтитулы етс. И сохраняем файл как `reference.odt` - или под любым другим именем. Когда в следующий раз мы сошлемся на него (см основной скрипт) pandoc заберет из него правильные форматы (только оформление для нужных частей текста) и использует их для оформления генерируемого файла - стили текста, заголовков и так далее. Очень удобно.

Заметка на полях. Это еще не все "для пытливого ума". LibreOffice поддерживает т.н. "составные документы", поэтому если я пишу не разделы диссера, а методичку - к сгенереному файлу можно легко прицепить типовую обложку и содержание - и получить методичку.

Заметка на полях-2. Комменты внутри файла у меня отбиваются двумя знаками процента (`%% `) в начале строки - при генерации документа они выбрасываются. Очень удобно писать себе всякие TODO, FIXME и NOOOOOO, так чтобы их не увидел шеф.

Вообще, назревает необходимость как-нибудь разгрестись с делами и написать пост про workflow при написании Неназываемого:)

Анонимный комментирует... 24 сент. 2012 г., 21:48:00

P.S. Для меня markdown это прежде всего способ работать не в Libre Office, а в vim - пользуясь при этом всеми преимуществами которые дает и vim и libreoffice.

99% рабочей документации у меня хранится в mcd и в картинках (и забито в bitbucket.org под контроль версий), а к этому идет типовой файлик и скрипт, генерящий по требованию документы - хоть в LaTex, хоть в html, хоть в odt, хоть в pdf.

Плейн текст дает безумную легкость в редактировании, контроль версий и доступ к документации везде, где есть необходимость. Кроме того, я везде могу вести заметки на едином языке - что на ветках freemind, что в Аффигительно Большом Файле что на палме/планшетке/читалке. И из всего этого можно генерить практически любые документы и форматы не особенно заморачиваясь на форматирование оных.

Михаил Саушкин

Ниже рассмотрим базовый синтаксис разметки текстовых файлов «Маркдаун» - используемые символы, ссылки, абзацы, строфы, заголовки, цитаты, списки, преформатированный текст, изображения.

В общепринятом на данный момент базовом «Маркдаун» нет некоторых элементов HTML, как, например, определения, таблицы. Но в этом есть своя логика и правда. Потому что если, например, добавить таблицы, то многие начнут снова верстать визуальный вид этими таблицами, как это было с HTML. В конце концов, простые таблицы можно создавть, например, преформатированием.

Хотя появляются различные сторонние расширенные версии «Маркдаун», как, например, Maruku, Kramdown, которые пытаются расширить базовый «Маркдаун». Главное, помнить, что «Маркдаун» не создавался как замена HTML, и важно не растерять в процессе его развития основные этой разметки.

Символы для разметки «Маркдаун»

В разметке гипертекста «Маркдаун» используются вспомогательные общие символы, но при этом не используются символы какого-либо алфавита - в первую очередь английского. Что в принципе, при хорошо продуманной национальной раскладке клавиатуры, позволит практически не переключать раскладку при создании и наборе текста веб-странички.

Список символов «Маркдаун»:

* «звёздочка» _ подчёркивание + плюс - минус = равно ` обратная кавычка (){}<> скобки # «решётка» ! восклицательный знак: двоеточие | вертикальная чертадвойные кавычки " апостроф $ доллар пробел новый абзац

В «Маркдаун» эти символы и служат для форматирования структуры текста, аналогично использованию HTML элементов.

При этом следует учитывать, что в «Маркдаун» в большинстве случаев нет закрывающих символов, и действие символа, обозначающего какой-либо элемент текста, распространяется до конца абзаца.

Если есть необходимость в этих символах непосредственно в обычном тексте, то, эти символы нужно экранировать обратной чертой \ . Или же использовать разметку «преформатированный текст».

Базовые элементы «Маркдаун»

Абзац и перевод строки

Абзацы в «Маркдаун» отделяются друг от друга одним или несколькими пустыми строками.

Для того чтобы сделать перенос внутри строки, что-бы, например, создать строфу в стихотворении, достаточно добавить два пробела перед переносом строки. А делается это добавлением в конец строфы двух пробелов, а потом уже знак абзаца. Пример

Строка1
Строка2
Строка3

То есть строка набирается так: строка\s\s\n , где \s - пробел, \n - абзац. Другими словами это замена тега
в HTML.

Заголовки

Заголовки обозначаются знаком # («решётка») в начале абзаца. Количество решёток обозначает уровень заголовка от одного до шести. Например:

# Заголовок

Соответствует HTML-коду

Заголовок

А, например, четыре решётки

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

соответствует HTML-коду

Заголовок

Главный заголовок можно не выделять хешами, а подчеркнуть двойной линией:

Главный заголовок =================

Второй по плавности заголовок можно подчеркнуть простой линией:

Обычный заголовок -----------------

Стилизация текста

Жирный текст - **Жирный текст** Курсивный текст - *Курсивный текст* Жирный курсивный текст - ***Жирный курсивный текст***

Жирный текст - __Жирный текст__ Курсивный текст - _Курсивный текст_

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

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


делается из серии трёх и более коротких тире

Цитаты

Перед цитатой в «Маркдаун» ставится угловая скобка > . Действует до конца абзаца

> «Следующее поколение веб-разработчиков будет жить при "Маркдауне"». М. Астапчик

Аналогично в HTML

«Следующее поколение веб-разработчиков будет жить при "Маркдауне"». М. Астапчик

Списки

Обычный ненумерованный список обозначается звёздочкой в начале каждого элемента списка

* Раз * Два * Три

Для нумерованного списка используются цифры

1 Раз 2 Два 3 Три

Форматирование кода, преформатированный текст

Очень важное в «Маркдаун» форматирование, которое означает текст как есть, без трансляции в HTML. Соответствует элементам pre и code в HTML. Для преформатированного абзаца достаточно сделать отступ в четыре пробела или один таб.

Print("Hello world!\n")

Так же блок преформатированного текста можно обозначить тремя подряд обратными кавычками в начале и конце этого блока. То есть здесь требуются и закрывающий набор символов.

``` print("Hello world!\n")

Преформатированный текст непосредственно в строке выделяется с двух сторон обратными кавычками.

`преформатированный текст`

Легко использовать преформатированный текст в «Маркдаун».

Ссылки

Ссылки-сноски

В обычном тексте не всегда эстетично вставлять ссылки прямо в текст, так как они могут быть очень длинными. Гораздо лучше их оформлять в виде сносок для лучшей читабельности. Сноска организуется с использованием квадратных кавычек. А внизу документа, как в книгах, каждой сноске после двоеточия указывается настоящий адрес ссылки. Пример.

Недавно один из наших пользователей поинтересовался, что такое Markdown? Он услышал это от знакомого, пользующегося блоговую платформу Ghost . Markdown — это простой язык разметки, который конвертирует простой текст в HTML. Можно считать его простым текстовым редактором. В этой статье мы покажем вам, как использовать Markdown в WordPress.

Что такое Markdown?

Markdown — это язык разметки, который преобразует простой текст в код HTML. Он позволяет пользователям использовать специальные символы типа звездочки, знака номера, подчеркивания и тире в синтаксе Markdown вместо HTML. Такой синтаксис Markdown затем автоматически конвертируется в HTML.

Например
**Это текст, выделенный жирным**

Текст выше будет преобразован с помощью Markdown в:

Это текст, выделенный жирным

Markdown предлагает эффективный способ создания расширенных текстовых документов особенно для продвинутых пользователей. Если вы используете текстовый редактор для написания записей в WordPress, тогда Markdown может стать вам хорошей альтернативной заменой.

Как добавить поддержку Markdown в WordPress

Первым делом вам необходимо установить и активировать плагин WP-Markdown . После активации необходимо перейти в раздел Настройки » Написание административной панели сайта и прокрутить страницу до раздела Markdown.

Вы можете активировать WP-Markdown для записей, страниц и произвольных типов записей. Также вы можете активировать поддержку Markdown для комментариев.

В плагине есть панель меню в области редактирования, поэтому вы легко можете добавить синтаксис Markdown. Если вы новичок в Markdown, то, вероятно, вам стоит активировать меню помощи. Это поможет вам быстрее изучить синтаксис Markdown.

После активации поддержки Markdown, кликните на кнопку сохранения изменений.

Использование Markdown в редакторе записей WordPress

После того, как вы включили поддержку Markdown для записей и страниц, вы можете перейти в раздел Записи » Добавить новую административной панели сайта для того, чтобы посмотреть его в действии.

Вы заметите, что стандартные в WordPress визуальный и текстовый редакторы заменены на редактор Markdown.

Экран редактора сейчас отображает предпросмотр в реальном времени того текста, который вы печатаете в редакторе. Вверху у вас панель помощи Markdown, который позволяет вам вставлять синтаксис Markdown с помощью кнопок. Эта панель будет полезна для тех пользователей, которые только знакомятся с синтаксисом Markdown.

Шпаргалка по синтаксису Markdown

Синтаксис Markdown очень простой, однако потребуется некоторое время, чтобы к нему привыкнуть. Ниже небольшая шпаргалка по Markdown, которую можно взять за основу изучения.

Исходные данные:
*Это текст, выделенный курсивом*

Результат:
Это текст, выделенный курсивом

Исходные данные:
**Это текст, выделенный жирным**

Результат:
Это текст, выделенный жирным

Исходные данные:
#Это заголовок 1#

Результат:

Это заголовок 1

Исходные данные:
##Это заголовок 2##

Результат:

Это заголовок 2

Исходные данные:
###Это заголовок 3###

Результат:

Это заголовок 3

Исходные данные:
(https://сайт)

Исходные данные:
1. Элемент нумерованного списка 1
2. Элемент нумерованного списка 2
3. Элемент нумерованного списка 3

Результат:

  1. Элемент нумерованного списка 1
  2. Элемент нумерованного списка 2
  3. Элемент нумерованного списка 3

Исходные данные:
*Элемент маркированного списка 1
*Элемент маркированного списка 2
*Элемент маркированного списка 3

Результат:

  • Элемент маркированного списка 1
  • Элемент маркированного списка 2
  • Элемент маркированного списка 3

Добавление видео при использовании Markdown в WordPress

Обычно вы можете встроить видео с YouTube путем простого копирования ссылки и вставки ее в редактор записей. Этот способ не сработает при активированном WP-Markdown. В этом случае вам необходимо обернуть ссылку видео в шорткод [ embed] следующим образом:

Мы надеемся, что эта статья помогла вам узнать о языке разметки Markdown и о том, как использовать его в WordPress. Если вы считаете, что Markdown это не то, что вы искали, то попробуйте в WordPress.

весёлый усач 9 января 2011 в 22:14

Язык разметки Markdown

  • Чулан *

В этой статье даются практические советы по написанию парсера для языка разметки Markdown . На сегодняшний день информации в интернете по этому вопросу крайне мало.

Статья будет полезна тем, кто занимается созданием собственных CMS и фреймворков с нуля.

Кратко о языке

Разработчики Маркдауна ставили своей целью создать язык, код которого будет визуально схож с результатом его выполнения. За основу были взяты принятые правила оформления e-mail сообщений.

Вот пример кода:

Заголовок
=========

Нумерованные списки:
1. Первый пункт
2. Второй пункт
3. Третий пункт

> Комментарий
> > Комментарий в комментарии

Можно **выделять часть** текста.

Такой код будет преобразован в правильный xHTML.

Синтаксис Маркдауна является с одной стороны более легким в освоении для технически неквалифицированных пользователей(в отличие, например, от BB кодов), а, с другой стороны, производит качественный выходной xHTML код, чего не скажешь о различных WYSIWYG редакторах. Эти преимущества делают Маркдаун хорошим выбором для форумных движков и CMS, где требуется возможность редактирования контента пользователями.

На сегодняшний день существует множество компиляторов для Маркдауна на всевозможных языках. Если вы решите использовать Маркдаун в своем проекте, то можете использовать уже готовое решение(ниже есть ссылки). Если же вы решите написать собственный парсер(например, в учебных целях), то ниже приводятся особенности, с которыми вы можете столкнуться в ходе разработки, и даются практические советы по их решению.

Создания компилятора языка

Маркдаун нельзя разобрать контекстно-свободными грамматиками. Он содержит контекстно-зависимые лексические элементы. Например, вложенность конструкций определяется выравниванием строк как в Пайтоне. Так что воспользоваться в явном виде YACCом и ANTLRом не получится. Среди решений этой проблемы я встречал следующие:
  • Отказаться от использования генератора парсеров и написать парсер в ручную, используя местами регулярные выражения.

    Именно так был создан оригинальный парсер Маркдауна на Перле и большинство других реализаций. Недостаток решения в низкой производительности: во-первых, из-за использования регулярных выражений, во-вторых, потому что оптимизировать парсер в ручную до уровня, который обеспечивает автоматически сгенерированный, как правило очень сложная задача. Кроме того, если вы пишете на императивных языках(PHP, Java, C++), то реализовать и отлаживать самописный парсер будет очень трудно.

  • Использовать генератор парсеров с поддержкой встроенных действий, и писать действия, имеющие обратный эффект.

    За счет использования встроенных действий с обратным эффектом можно, например, осуществлять анализ выравнивания данной строки относительно предыдущей, таким образом имитируя контекстно-зависимые правила. Недостаток в том, что контекстно-свободные грамматики не предназначены для этих целей, а использование обратного эффекта может привести к багам во время разбора.

  • Рекурсивное применение парсера контекстно-свободной грамматики.

    На самом деле, можно сначала грубо разбить весь код на отдельные блоки(абзацы, комментарии одного уровня), а потом к ним применить еще раз этот же самый парсер. Это решение не приведет к непредсказуемым последствиям как в предыдущем варианте, и оно более правильно с идеологической точки зрения, но менее эффективно в плане производительности.

    Возможно, это будет самым простым в реализации решением.

  • Предварительно в ручную обработать входные данные.

    Можно в ручную разбить код на строки, и циклом пройтись по ним, заменяя пробелы в начале каждой строки на символ указывающий ее сдвиг(влево или вправо) относительно предыдущей. Точно также можно обработать вложенность комментариев. Затем полученный массив строк можно склеить обратно, и уже разбирать его контекстно-свободной грамматикой. Полученный после фильтрации язык будет контекстно-свободным.

    Это решение по сложности сопоставимо с предыдущим. По производительности должно в общем случае быть более эффективным.

В качестве выбора генератора парсеров для Маркдауна, на мой взгляд, больше подходит PEG .

Теги: compiler design, compilers, parser, markdown, markup, компиляция, разметка, cms, cms разработка, framework, программирование, programming, programming languages