В порыве борьбы с прокрастинацией занялся задачкой, которую давно откладывал — рефакторингом определений языков в highlight.js в новый синтаксис. Да так удачно занялся, что решил заодно и другие мелкие задачки, которые планировал на версию 6.0. И вот без лишних слов представляю бету новой большой версии и прошу её потестировать.

Ссылки

К тестированию предлагаются:

Ставьте к себе на сайты, ловите баги, пишите в рассылку или в баг-трекер.

Синтаксис

Главная новость этой версии касается не пользователей библиотеки, а разработчиков. Синтаксис определения языков стал проще структурно, умолчания стали более логичными и пропали некоторые атрибуты, нужные раньше для обработки краевых исключительных случаев. Вот упрощённый пример для наглядности.

Было:

defaultMode: {
  contains: ['string'],
  modes: [
    {
      className: 'string',
      begin: '"', end: '"',
      contains: ['escape']
    },
    {
      className: 'escape', noMarkup: true,
      begin: '\\\\.', end: hljs.IMMEDIATE_RE
    }
  ]
}

Стало:

defaultMode: {
  contains: [
    {
      className: 'string',
      begin: '"', end: '"',
      contains: [{begin: '\\\\.'}]
    }
  ]
}

Поменялось вот что:

По большей части код стал более красивым и читаемым, хотя и не без изъянов: прямо сейчас определение Руби насчитывает десять переменных для строк, которые таскаются хвостом по всему файлу :-).

Конвертация всех языков в новый синтаксис была самой долгой и нудной задачей, и именно из-за этого я решил выложить новую версию сначала в виде беты — не верю, чтобы ничего не сломалось, даже несмотря на то, что внутренние тесты проходят. Пользуясь случаем, хочу сказать отдельное спасибо Валерию Хиоре за конвертацию своего определения Objective C!

Тулзы

Точнее, теперь — "тулза". Два скрипта, которые паковали и собирали языки в финальную сборку, стали одним, которым стало удобней пользоваться, в том числе и при отладке.

Языки

В этой версии 4 новых языка:

Общее количество языков таким образом достигло 40!

Кроме того, два старых языка — HTML и CSS — подверглись радикальному изменению. Я решил, что два отдельных определения HTML и XML не имеют смысла и объединил их в одно. А заодно выкинул длинные списки ключевых слов из HTML и CSS, потому что синтаксис обоих языков задуман расширяемым и не зависит от конкретных ключевых слов. Теперь названия тегов и атрибутов раскрашиваются всегда, даже если они нестандартные.

Самое приятное, что выкидывание ключевых слов вместе с переходом на новый синтаксис позволило новой версии библиотеки быть меньше, даже с учётом четырёх совершенно новых языков!

Инфраструктура

Переезд на GitHub себя вполне оправдал: появились новые контрибьюторы! Причём, как хостинг кода, он настолько хорош, что даже скрашивает мне переезд на git, как на новую для меня VCS.

А вот с группой для обсуждений всё сложнее. По большей части там тихо, а те обсуждения, которые велись, вполне могли бы вестись и в частной переписке. Если подумать, то это и не удивительно, потому что автор у ядра хайлайтера с самого начала был один, оно пережило несколько переписываний, и сейчас, наверное, кроме меня, ни один человек этого кода хорошо не знает. Тем не менее, я не думаю, что от группы надо отказываться, потому что каши она не просит, и лучше, если она есть и не нужна, чем вдруг понадобилась — а нету.

Что дальше

План простой и очевидный: я хочу подождать неделю-другую сообщений о багах, починить их (а ещё лучше — просто вмёрджить патчи от самих репортеров) и выпустить финальную версию.

Ещё, как я вскользь упоминал в Твиттере, мне очень хочется получить стили, основанные на палитре Solarized. Сам я за это вряд ли возьмусь, поэтому просто ещё раз протранслирую здесь эту просьбу. Если вам нравится хайлайтер и вы любите внимание к мелочам, ваш вклад будет очень ценен сообществу!

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

  1. desh

    На Николая Захарова можно сослаться хотя бы вот сюда: http://desh.su :)

  2. Ivan Sagalaev

    Сослался, спасибо :-)

  3. Официальный релиз

  4. http://shtucer.blogspot.ru

    Иван, а можно ли в своих проектах ссылаться на highlight.js напрямую с гитхаба? И если да, то как подцепить, что назвается на лету, свое описание языка? Понадобилось выложить пару кусков на Vim script. Засел за составление описания и столкнулся с тем, что распакованный скрипт его прекрасно подхватывает, а вот запаковыанный не хочет. Ну, а поскольку описание еще далеко до завершения, не хочется упаковывать пока. Поэтому приходится пока на хостинге держать копию highlight.js.

    И еще один вопрос. Этот чудный VimL имеет такую штуку, как "разворачивание" команд. Например, 'au' или 'aut' по-умолчанию разворачивается в 'autocmd'. А есть еще 'aug'->'augroup' и 'aun'->'aunmenu' и т.д. Понятно, что это сугубо специфичный случай, и проще подготовить исходник к публикации, избавившись от этого сахара. Все же интересно, можно ли как-то это обыграть в highlight?

  5. Ivan Sagalaev

    Иван, а можно ли в своих проектах ссылаться на highlight.js напрямую с гитхаба?

    Ну запретить вам никто не может, но все минусы очевидны: любой апдейт транка может быть обратно несовместимым или поломанным. Если уж куда и ссылаться, то на яндексовый CDN: http://api.yandex.ru/jslibs/libs.xml#highlightjs. Там, правда, пока ещё нет шестой версии, потому что её в принципе нет ещё.

    Поэтому приходится пока на хостинге держать копию highlight.js.

    Ну а свой язык вы у себя же держите? Тогда и от второго файла наверное плохо не будет :-).

    И еще один вопрос. Этот чудный VimL имеет такую штуку, как "разворачивание" команд.

    Ничего не понял, если честно. Комментарии в блоге не шибко удобное место для таких вопросов, напишите мне письмо.

Добавить комментарий