Почему highlight.js игнорирует языковые классы?

Я использую библиотеку Highlight.js для подсветки синтаксиса кода в Blogger, и она отказывается выделять Lisp кодируйте правильно.

В статье на Blogger:

<pre><code class="lisp">
  (coerce (average 1 2 3 4) 'float)
  > 2.5
</code></pre>

В шаблоне оформления перед закрытием </head>:

<script src='http://yandex.st/highlightjs/7.0/lisp.min.js' ></script>
<script src='http://yandex.st/highlightjs/7.0/highlight.min.js' ></script>
<link href='http://yandex.st/highlightjs/7.0/styles/github.min.css' rel='stylesheet' />
<script type='text/javascript'>
  hljs.initHighlightingOnLoad();
</script>

При открытии статьи подсветка прерывается, Firebug показывает это на панели HTML:

<pre>
  <code class="lisp ruby"> // WTF
  ... stylized RUBY tokens here ...
  </code>
</pre>

На некоторых фрагментах кода подсветчик ставит <code class="lisp undefined"> и вообще отказывается подсвечивать. Так как я на Блоггере, мне очень не хочется ничего никуда скачивать, особенно когда там уже опубликованы языковые пакеты. Какое волшебство я должен сделать, чтобы Лисп стал узнаваемым?


person hijarian    schedule 02.07.2012    source источник


Ответы (1)


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

Однако, даже если бы Лисп был включен в пакет, он не выделил бы ваш фрагмент, поскольку он включает вывод (> 2.5), который не является Лиспом, а определение Лиспа в highlight.js не позволяет этого.

person isagalaev    schedule 02.07.2012
comment
так что, я полагаю, включение lisp.min.js перед основным скриптом не сработает, а? И я не могу обойти это, включив все языковые части highlight.js вместо стандартной партии? - person hijarian; 02.07.2012
comment
Извините, я совершенно пропустил, что вы связали lisp.min.js в первой строке :-). Однако вы все равно ввели неправильный URL-адрес (должен быть http://yandex.st/highlightjs/7.0/languages/lisp.min.js), и он должен идти после highlight.min.js. - person isagalaev; 03.07.2012
comment
чувак, ты действительно должен упомянуть об этом где-нибудь на странице своего проекта. Особенно о том, что вы можете включить основной скрипт, затем дополнительные языки. Я просто включил около десятка языков, таких как Haskell, 1C и так далее, и все заработало как по маслу. Спасибо за совет. Кстати: highlight.js действительно полностью прекращает синтаксический анализ, если встречает токен, неожиданный для объявленного языка, независимо от объявления. - person hijarian; 03.07.2012
comment
На самом деле я не пользуюсь хостингом CDN, и я не могу честно рекомендовать ссылки на дюжину языков в нескольких файлах. Для этого предназначена пользовательская загрузка. - person isagalaev; 03.07.2012