Новая большая версия highlight.js 3.0 увидела свет!
Большая она в первую очередь потому, что highlight.js разросся и стал модульным. Теперь, при указании списка используемых языков только эти языки динамически подгружаются в браузер.
Он (скрипт) давно уже напрашивался на разделение, потому что 35 КБ уже начинают вызывать вопросы, особенно у тех, кому из десятка языков нужно только один-два. А поводом в итоге стало то, что Константин Евдокименко с проекта RibKit сделал подсветку для языков RenderMan Shading Language и RenderMan Interface Bytestream. Меня всегда очень радуют такие моменты, когда к проекту добавляются вещи, о которых я сам и подумать никогда не мог. Так работает open source!
Однако очевидно, что языки эти довольно редки, и я понял, что 40 КБ — это уже слишком много. Поэтому скрипт взялся облегчить:
- вынес лицензию в отдельный файл
- все языки разложил в отдельные файлы в поддиректорию languages, которые при указании списка языков в инициализации динамически дописываются через document.write (идею свистнул у Script.aculo.us, а "кошерный" XHTML идет отдыхать :-) )
В итоге ядро скирпта занимает 11 КБ (несжатых).
Кроме того, с версии 2.9 накопился очередной набор улучшений эвристики и исправлений корректности. В частности, наконец стало корректно обрабатываться бэкслешное экранирование в строках Си-подобных языков.
Подключение и использование не изменилось практически никак, за исключением маленькой детали. Функция initHighlighting, которая когда-то очень давно использовалась для инициализации вместо initHighlightingOnLoad больше не работает. Поэтому если кто ее использует — поменяйте.
В любом случае всех призываю обновляться!
Комментарии: 12
Интересная идея. Особенно понравился метод поиска url'а с плагинами поддержки языков :)
А плагин проапдейтился? :)
А что там в плагине апдейтить? В плагине только css и сам главный js-файл подключается :)
про document.write
если нет возможности загрузить нужные языки другим образом, то это может создать некоторые проблемы при интеграции. Вернее, с одной стороны их будет меньше, потому что все работает само. С другой стороны, применять к ним на сервере такие штуки, как чистка и склеивание в один файл, может стать труднее. Я как раз недавно столкнулся с этой проблемой у tinyMCE.
Отличная новость. Качаем!
Насколько я помню, другие способы запихивания
<script>
в DOM сильно отличаются у разных браузеров, и скрипты фактически надо eval'ить вручную. Кроме того, у script'aculo.us'а в комментариях написанно, что Safari им удалось заставить работать только с document.write.Но что интересно, склеиванию это не сильно мешает. Можно все файлы затолкать внутрь highlight.js обратно, а дописываемые
<script>
будут просто звать несуществующие файлы и на этом успокаиваться.Да, согласен с arty. Лучше вместо document.write вставлять скрипты DOM-методами - createElement, appendChild etc.
Попробовать по крайней мере стоит, а там разберешься, где что не работает - тоже полезно.
Попробовать сделать через DOM — значит пустить по минному полю конечных пользователей редких броузеров. А уж они , не увидев расцветки, вряд ли найдут куда писать о баге.
И чем всё же плох document.write (кроме несовместимости с XHTML) ?
Иван, спасибо за плагин. Но не смог подключить его к Wordpress (последнему). Плагин активировал в админке. Вызов джаваскрипта в хедере вставил. В тексте сообщения пишу
Но ничего не подсвечивается.. Помогите, пожалуйста.
У меня для highlight.js есть форум: http://softwaremaniacs.org/forum/viewforum.php?id=6
Пожалуйста, напишите туда, только лучше сразу со ссылкой на страницу, где оно не работает. Попробуем разобраться.
Ещё одна реализация подсветки кода, теперь от Гугла :-), пример: http://google-code-prettify.googlecode.com/svn/trunk/tests/prettify_test.html .