Подсветка синтаксиса Pygments в Jekyll без запуска ‹div›

Если вы используете Jekyll с пакетом подсветки синтаксиса Pygments, можно написать

{% highlight clojure %}
(def something :foobar)
{% endhighlight %}

который создает <div>, содержащий эту строку, с выделенным синтаксисом в соответствии с синтаксисом Clojure. Но есть ли способ получить подсветку синтаксиса в середине абзаца? Я хотел бы иметь возможность писать

In Clojure, keywords like {% highlight clojure %}:foobar{% endhighlight %}
are prepended by colons.

Желаемое поведение здесь заключается в том, что ключевое слово Clojure будет выделено с использованием того же стиля, который использовался для ключевого слова в первом примере. Однако, когда я пытаюсь это сделать, он просто выдает <div>, как и раньше. (И, возможно, это характерно для механизма уценки Kramdown, который я использую, но сам тег div экранирован HTML, так что вы можете видеть «‹div›» прямо в сгенерированном тексте.)

Есть ли способ заставить Jekyll/Pygments делать «встроенную» подсветку синтаксиса, как это?


person bdesham    schedule 15.09.2012    source источник


Ответы (4)


Два года спустя я пошел дальше и создал свой собственный плагин для Jekyll, обеспечивающий встроенную подсветку синтаксиса. Он называется inline_highlight и может использоваться следующим образом:

In Clojure, keywords like {% ihighlight clojure %}:foobar{% endihighlight %}
are prepended by colons.
person bdesham    schedule 14.12.2014

Вы можете добавить класс CSS к любому объекту, который вы помещаете в сообщение.

Если вы определяете запись CSS следующим образом:

.inlined { display:inline; }

Затем вы можете добавить этот класс к сгенерированному <div>, выполнив следующие действия:

In Clojure, keywords like 
{% highlight clojure %}:foobar{% endhighlight %}{: .inlined } 
are prepended by colons.

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

Когда вы тестируете его, посмотрите на выходной HTML. Затем вы обнаружите, что ваш <div> теперь имеет установленный атрибут class=inlined.

person felixgaal    schedule 10.11.2013

Я думаю, что вы можете использовать параметр nowrap, чтобы Pygments не заключал код в тег div. Таким образом, ваш пример станет:

In Clojure, keywords like 
<span class='highlight'><code class='closure'>
{% highlight clojure nowrap %}:foobar{% endhighlight %}
</code></span>
are prepended by colons.
person Leo White    schedule 07.03.2013
comment
У меня это не сработало... добавление nowrap вообще не меняет вывод. Откуда вы узнали об этом варианте? - person bdesham; 09.03.2013
comment
Я думаю, что нашел его в исходный код - person Leo White; 11.09.2013

Мой быстрый обходной путь позволил Jekyll предварительно обработать код:

<div class="highlight">
    <code class="language-css" data-lang="css">…</code>
</div>

И вставляем в нужное место после замены дивов на спаны:

<span class="highlight">
    <code class="language-css" data-lang="css">…</code>
</span>    
person klos    schedule 19.07.2015