вторник, 12 марта 2013 г.

Начало работы с Markdown

Немного не по основной теме

OAuth я пока временно отодвинул, т.к.
1) немного начал плыть мозг; 2) появилось ощущение, что поиски я веду в несколько неверном направлении и всё намного проще, чем кажется. В связи с чем стоит временно отвлечься от темы и вернуться к ней уже со свежим взглядом; 3) это, по сути, довольно непростое решение не самой, в общем-то, раздражающей меня вещи.
По поводу последнего имеет смысл пояснить: в отправке поста через форму меня лично очень напрягает, что приходится отдельно пихать тело поста (к тому же требуется предварительно открыть вкладку html), отдельно - заголовок и отдельно же вбивать теги. Последнее почему-то раздражает как-то особенно сильно в связи с тем, что они находятся на отдельной панельке сбоку и называются, *, ярлыки.
Но всё равно даже суммарно это всё пока, мне кажется, того не стоит. Пока что есть куча маленьких хотелок, которые спокойно решаются и более простыми и красивыми средствами.

Markdown2

Теперь непосредственно по теме. Я нашёл и уже почти успел полюбить пакет python-markdown2.

Что зацепило

Первое, что приглянулось - это очень простой синтаксис обычного непривередливого использования:
>>> import markdown2
>>> text = '''
... Header 1
... ========
... Header 2
... --------
... ### Header 3
... 
... and list above:
... 
... 1. first
... 2. second
... 1. and third =)
... '''
>>> print markdown2.markdown(text)
<h1>Header 1</h1>

<h2>Header 2</h2>

<h3>Header 3</h3>

<p>and list above:</p>

<ol>
<li>first</li>
<li>second</li>
<li>and third =)</li>
</ol>
В обычном режиме всё это дело максимально поддерживает оригинальный синтаксис MD.
Но это именно для непривередливых. Для тех, кто не относит себя к числу последних, у модуля присутствуют приятные добавления (т.н. 'extras'), позволяющие несколько изменить синтаксис посредством более-менее стандартных юзкейсов.
Например, при написании прошлого поста меня очень расстроило, что для того, чтобы список был отображен как список, нужно отделить его от предшествующего ему абзаца пустой строкой. По-моему, это не есть очень удобно. Здесь же всё рашается тем, что вместо
markdown2.markdown(text)
можно воспользоваться
markdown2.markdown(text, extras=['cuddled-lists'])
и всё. И сразу всё чудесно работает.
Таких приятностей немного (если быть конкретным, то 7), но они довольно функциональны, выше был приведён пример самой простой и незамысловатой из них. Ещё одна, которая мне прямо заранее нравится, называется link_patterns.
Суть её в том, что можно прокинуть регулярку, которая, при нахождении, будет автоматически прикреплять ссылку к тексту. Самый простой вариант, который я явно реализую первым делом - это вешать ссылку на юзверя, если к его нику прикреплёна собачка (@). Да, в блогспоте эта фишка есть, но она работает только если изначально набивать ник в их форме, а я изначально отказался от этого варианта. Так что буду думать, как это всё сделать покрасивее.

Что буду делать

  1. Прикручу нормально обработку MD
  2. Хочу ссылки на юзеров и, может быть, какие-то ещё, пока не совсем понял, какие именно
  3. Хочу автоматическое копирование html без заголовка в clipboard
На этом пока, наверное, всё.

Upd.: понял, что хочу ещё - замещение нормального ката [cut] на местный убогонький, чтобы всё более-менее адекватно отображалось. А то посты уже получаются немаленькие.

Комментариев нет:

Отправить комментарий