Dec

23

Markdown w/ Pygments: Round 2

Dig back into my vast blog archive and you will find this post: I said it, I did it. Therein you will find my bumbling, ham-fisted solution for integrating pygment code highlighting into markdown.

I just wandered back past this code today and then stumbled across the actual right way to do this.

Quoth me:

Pygments as [sic] a markdown pre-processor. Ideally one would be able to just pass this through as an extension to markdown using the functionality in the existing template tag. Unfortunately, pre-processors seem to be a different sort of animal. In the end I couldn't keep things very DRY.

Well, I was half right. Introducing this extra functionality via an extension is the ideal solution. But pre-processors are only different from extensions in that they're just one of kinds of things you can enable via extensions.

I've righted past wrongs. Here is the proof, in diff form:

--- /dev/null
+++ b/build/site/lib/mdx_pygments.py
@@ -0,0 +1,9 @@
+import markdown
+from pg_md_processor import CodeBlockPreprocessor
+
+class PygmentsExtension(markdown.Extension):
+ def extendMarkdown(self, md, md_globals):
+ md.textPreprocessors.insert(0, CodeBlockPreprocessor())
+
+def makeExtension(configs=None):
+ return PygmentsExtension(configs=configs)
--- a/build/site/pocketuniverse/pygmented_markdown/templatetags/pygmented_markdown.py
+++ /dev/null
@@ -1,64 +0,0 @@
-from django import template
-from django.conf import settings
-from django.utils.encoding import smart_str, force_unicode
-from django.utils.safestring import mark_safe
-
-from markdown import Markdown
-
-from pg_md_processor import CodeBlockPreprocessor
-
-register = template.Library()
-
-@register.filter
-def markdown(value, arg=''):
- """
- Runs Markdown over a given value, optionally using various
- extensions python-markdown supports.
-
- Syntax::
-
- {{ value|markdown:"extension1_name,extension2_name..." }}
-
- To enable safe mode, which strips raw HTML and only returns HTML
- generated by actual Markdown syntax, pass "safe" as the first
- extension in the list.
-
- If the version of Markdown in use does not support extensions,
- they will be silently ignored.
-
- """
- extensions = [e for e in arg.split(",") if e]
- if len(extensions) > 0 and extensions[0] == "safe":
- extensions = extensions[1:]
- safe_mode = True
- else:
- safe_mode = False
-
- return mark_safe(_pygmented_markdown(force_unicode(value), extensions, safe_mode=safe_mode))
-markdown.is_safe = True
-
-def _pygmented_markdown(text,
- extensions = [],
- safe_mode = False):
-
- extension_names = []
- extension_configs = {}
-
- for ext in extensions:
- pos = ext.find("(")
- if pos == -1:
- extension_names.append(ext)
- else:
- name = ext[:pos]
- extension_names.append(name)
- pairs = [x.split("=") for x in ext[pos+1:-1].split(",")]
- configs = [(x.strip(), y.strip()) for (x, y) in pairs]
- extension_configs[name] = configs
-
- md = Markdown(extensions=extension_names,
- extension_configs=extension_configs,
- safe_mode = safe_mode)
-
- md.textPreprocessors.insert(0, CodeBlockPreprocessor())
-
- return md.convert(text)

With that change in place I can access the pygments extension in the template like so:

{% load markup %}
 
{{ blogpost.body|markdown:"pygments" }}

It is a good day when a commit results in better functionality and a net drop in lines of code.

I got rid of an entire Django app and replaced it with a nine line python module. I guess it's true what they say about reading the manual (they say that you should).

I owe my enlightenment to this post on writing markdown extensions. Seek within for wisdom.

Большущее спасибо! Совершенно помогла воша информацея!!!))))))

amoumpElali (June 11, 2009 at 8:47 p.m.)

Увлекательно! Нет ну правда, просто слов нет!

WingDootiaria (June 29, 2009 at 12:00 p.m.)

Нужно посмотреть,Спасибо

NotAovalmmaro (July 08, 2009 at 3:15 p.m.)

В общем спасибо

Chixveige (July 09, 2009 at 7:58 p.m.)

круто,все нужное

iminumDiuck (July 10, 2009 at 2:13 a.m.)

круто,все нужное

Acusensuemmaf (July 10, 2009 at 7:04 a.m.)

Спасибо за пост

SaPstypEsashy (July 31, 2009 at 11:02 p.m.)

Класс!!! Круто!!!

erethycle (August 01, 2009 at 6:08 a.m.)

В общем спасибо

Boolyncmoca (August 02, 2009 at 11:53 p.m.)

В общем спасибо

Hyncclaicargy (August 24, 2009 at 8:58 p.m.)

Здрасьте. Прошу у Вас помощи. У меня сложилась очень неприятная ситуация. Дело в том, что мой блог с недавнего времени перестал показываться в результатах поиска Yandex'a. Сам блог проиндексирован, то есть если посмотреть наличие конкретной страницы в результатах поиска, то она там есть. А вот по поисковым запросам, да и по точным текстовым вхождениям сайт не находится. При чём его нет не только в 100, но даже в 1000 показов. Ума не приложу, что случилось. Сайт был доступен, поблем на хостинге не было. А обнаружил это - в статистике ЛивИнтернет, который вдруг стал показывать гораздо меньшее количество посещений. Кстати, юзеры с Гугла и Рамблера идут в прежних объёмах.

FlowerBeauty (November 29, 2009 at 7:47 p.m.)

Меня друзья зовут отмечать новогодние праздники за границей. При чём не просто за границей, а на море, в Египте! В принципе всё для этого есть, и финансовая возможность и действующий загранпаспорт. Пишу это не для того, чтобы похвастаться. Хочется посоветоваться с теми, у кого есть опыт встречи Нового года в тёплых краях. Как это вообще? Я, если честно очень себе плохо представляю НГ без снега и ёлочки с игрушками, ледяных горок и детского смеха, Медведева по ТВ за 5 мин до курантов, бутылки водки и немеренного количества мандаринов. А что взамен этого может мне дать Египет? По правде говоря, не был там ни разу, и желание полежать на горячем египетском песочке имеется. Но не думал делать это именно в Новый Год. Что посоветуете? Как мне быть???

Noise (December 12, 2009 at 2:38 p.m.)

Презираю того, кто придумал сессию в январе!!! Это же вообще так стрёмно: после новогоднего расслабона сразу вкатываться в такую нагрузку. Признаться, это моя первая такая сессия. До этого всегда в декабре, до праздников всё сдавали, и с чистой совестью отправлялись праздновать Новый Год. Вы себе представить не можете как это тяжело, выйти на учёбу 4 января, и грузиться, учить, писать шпоры, в то время, когда все твои друзья и подруги зажигают по полной!!!!!((((((

Teenka (January 13, 2010 at 3:17 p.m.)

В выходные сходили с коллегами на киносеанс Нашей Раши, хочется поделиться впечатлениями, пока свежи воспоминания и горячи эмоции. Сразу хочу высказать свою точку зрения - посмотреть фильм стоит. Новая лента Comedy Club Production выигрывает у своих предшественников – “самых лучших фильмов» сразу по нескольким показателям. Во-первых, это актёрский состав. Несложно догадаться, что больше половины ролей в фильме исполняют Галустян и Светлаков. Конечно, не хочется говорить, что фильм выехал только на них, но если бы не эти ребята, фильм смотрелся бы достаточно убого. Конечно, может быть мы все уже привыкли и полюбили персонажей из сериала Наша Russia, и именно поэтому в кино мы шли без большой доли скептицизма. И это уже показатель второй: бренд нашей Раши. Ну и в третьих, это какой-никакой, но сюжет - последовательность действий, которые мало-помалу развиваются от начала, и имеют логическую (или не совсем) концовку. Чего почти что не было в самых лучших фильмах - где грубо говоря была последовательность миниатюр, кое как скреплённых общей ниточкой меж собой. Конечно, фильм Наша Раша Яйца Судьбы не без минусов - это порой уже потёртые шутки, а некоторые моменты можно было обыграть и развить получше. Слишком мало в действии мы увидели Ваню Дулина, Анастасию Кузнецову, Снежану Денисовну, Славика с Димоном. Ну и, если честно, не очень порадовала концовка, которая оказалась как то очень смятой, скоротечной, и при этом предсказуемой. Но, несмотря на это, фильм всё же понравился. Конечно создатели постарались, чтобы зрители выходили из зала с улыбкой на лице, и в финальные титры "посадили" Сергея Юрьевича Белякова, который в пух и прах разложил всех создателей и участников фильма, кроме себя любимого. Ход сыграл на все сто!!!

Kapitan (February 01, 2010 at 11:13 a.m.)

Недавно задумалась над такой ситуацией: а что если бы во всём мире исчез интернет. Я конечно понимаю, что инет сам по себе взять и исчезнуть не может, но тем не менее, если опустить все технические нюансы, и вообразить что такое возможно... Теперь не почитать новости, блоги, не найти нужную информацию в гугле, а самое страшное не выйти ни в ICQ, ни в контакт! И тут до меня дошло насколько я зависима от сети. Нет, вроде бы целыми днями перед монитором не провожу, однако признаюсь, день начинаю и заканчиваю и менно компьютером. Хотя, если с другой стороны посмотреть, будет больше настоящего общения, и больше времени на реальные развлечения, на саморазвитие и т.п. Хотя опять же с другой стороны, с некоторыми друзьями связаться можно только через интернет (кто живет в других городах и странах, телеон - дорого знаете ли), ну и дополн.инфо можно получить быстро, чем сидеть в библиотеках... А как вы, легко бы смогли перенести такую утрату?

hindrances (February 13, 2010 at 8:49 a.m.)

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

IntuiCia (February 27, 2010 at 11:57 a.m.)

Какое прелестное сообщение Отличное сообщение )) Да вы талант :) Скромнее нужно быть Это хорошая идея.

RuStudent (March 17, 2010 at 6:16 a.m.)

Действительно интересно. Побольше бы таких статей.

WebMoney (March 19, 2010 at 4:04 p.m.)

На сегодня у меня был запланирован званый вечер по поводу "обмытия" новоприобретённого автомобиля. Авто хоть и б/у, но не менее долгожданный. И вот, когда до момента X оставалось совсем немного, а именно регистрация оного в ГАИ, всё дело и затормозилось. В нашем ГАИ (центральном, областном ГАИ!!!) просто-напросто взяли и закончились бланки ПТС!!! А новых нет как нет!!! Вот взяли и исчезли, как блин, инопланетяне их украли. На все мои вопросы, когда же они появятся, меня вежливо послали - бланков НЕТ, знать ничего не знаем, когда появятся, тогда и появятся. Я в дипрессии - казалось бы такая мелочь, а теперь из-за этой мелочи неизвестно когда я теперь сяду за руль моего нового автомобиля! Я вообще не понимаю, какого фига мы должны страдать из-за того, что у них там нет какой-то бумажки. Заменитель бы давали временный в конце концов! Вся наша бюрократическая система во всей красе...

Coloric (March 29, 2010 at 3:20 p.m.)

Спасибо за пост. Зачиталась прям. Удчи в развитии блога :)

ReceGuini (April 07, 2010 at 4:05 a.m.)

Скоро ресурсы с посещалкой от тысчи уников в день должны будут обзавестись лицензией по типу сми. Ещё пара таких указов и в рунете останутся одни гс :(

ReceGuini (April 11, 2010 at 8:56 a.m.)

Действительно, много интересного и очень познавательно!

Marshalish (April 14, 2010 at 12:05 a.m.)

Подскажите, можно ли разместить на своем сайте данный пост?

Exponnoborymn (April 21, 2010 at 11:51 p.m.)

Довольно интересная и познавательная содержание

Андрей (April 25, 2010 at 9:56 p.m.)

9 мая для России — день Победы, за которую мы заплатили несравнимую цену — миллионы жизней. Зачем на парад 9 мая приглашены войска НАТО — нашего извечного противника? Нам говорят, что это союзники антигитлеровской коалиции, но именно ее костяк образовал блок НАТО в 1949 против СССР. Советский Союз давно распался, а НАТО до сих пор существует и продолжает свое наступление на Восток. 9 мая по Красной площади пойдут не ветераны-победители Второй Мировой войны, а солдаты-участники современных войн!

По стране проходят акции гражданского мирного несогласия с политикой Путина и Медведева, по решению которых в нашу страну входит НАТО! Мы не верим ни президенту, ни премьер-министру. Наше спасение — в выражении им недоверия. Участвуя в данной акции, вы внесете свой вклад в отмену решения правительства и отстоите историческую справедливость:

* 1 мая вывесите белую простынь с надписью "НЕТ НАТО" из окна вашего дома.
* 1 мая в 12.00 по Москве громко (в открытые окна) включите музыку военных лет. Музыка когда-то помогла нашим предкам взять Берлин, а теперь поможет нам отстоять Россию.  Эта музыка поможет разбудить дух народа-победителя и напомнит о подвиге наших предков! 
* 1-9 мая в 15.00 по Москве выходите на центральную площадь вашего города с плакатом (флажком, платком и пр.) "Нет НАТО в России". Выразите свой молчаливый протест в течение 15 минут.

Мы убеждены, что присутствие войск НАТО на территории России будет иметь крайне негативные последствия. Все доказательства приводим ниже в постах журнала http://netnato.livejournal.com/

Roorearorma (April 29, 2010 at 5:19 p.m.)

Да таков наш нынешний мир и боюсь с этим ни чего невмочь поделать:)

Naumov (May 12, 2010 at 7:38 p.m.)

Доброго Вам дня, моё имя Денис. Я создаю эффективные логотипы на протяжение 10 лет. 15 марта 2008 года я основал свою фирму — “ADG: Arsentyev Design Group” (http://www.a-d-g.ru). “ADG: Arsentyev Design Group” — Стратегия эффективного дизайна!

*Коммерческое предложение для бизнесменов. Эффективный логотип приумножит доход вашего бизнеса. Стоимость создания эффективного логотипа от $200. Срок создания от 7 дней. Онлайн консультации (ICQ: 162756770. Skype: arsentyev.denis)

*Предложения для рекламных компаний и студий дизайна. Рассмотрю предложения по фрилансу и аутсорсингу.

Посетите мой виртуальный офис http://www.a-d-g.ru и ознакомьтесь с моим портфолио.

Удачного дня и всех благ.

рекламное агентство, лого, логотип, эффективные логотипы, создание логотипов, дизайн, проектирование, дизайнер, графический дизайн, коммерческий дизайн, фирменный стиль, арт-директор, фриланс, фрилансер, аутсортинг, брэнд, брэнды, веб дизайн

Obsewsquers (May 23, 2010 at 8:03 a.m.)

Читая лишь ваш блог, я действительно расслабляюсь и получаю наслаждение

Lev (May 26, 2010 at 1:39 p.m.)

посмотреть кушать чего. сча в рсс добавлю. Так комфортнее И всем советую.

Eduard (May 27, 2010 at 3:35 p.m.)

Все очень хорошо, но вот у любого блога систематическая проблема с трансляцией rss! Нужно и с коментами получать. Но нет. Это как говорится решаемо?

Володя (May 27, 2010 at 5:16 p.m.)