Нарисовал очередную версию highlight.js. Компанию клиентским веб-языкам составил Javascript, которого многим не хватало, судя по сайтам (список которых я так еще и не составил, но составлю обязательно).

Кстати, оказывается есть разночтение в том, что считать keyword'ами в Javascript. Они делятся на две группы: которые реально есть сейчас и которые зарезервированы для будущих версий. И вот например SciTE подсвечивает и те, и другие. Я же решил оставить только реальные. Как-то это правильней кажется...

Комментарии: 11 (особо ценных: 1)

  1. Zeroglif

    Особо ценный комментарий

    Иван,

    Не смотрите на Keywords, смотрите на Reserved Words (ECMAScript 7.5.1), кои состоят из:

    • ключевое слово (Keyword);
    • null литерал (NullLiteral);
    • boolean литерал (BooleanLiteral);
    • предполаг. зарез. слово (FutureReservedWord).

    В этом случае сразу начнут подсвечиваться и true, и false, и null (без них никак). А что касается FutureReservedWords, то я бы их тоже включил по той причине, что некоторые из них гласно или негласно (в зависимости от движка) тихо перешли в разряд Keywords. Игнорирование этого факта может запросто привести к трудноуловимой (без подсветки) ошибке при работе с идентификаторами. Типичный пример:
    http://forum.vingrad.ru/topic-125130/hl/%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D0%B8/index.html

    За подсветку javascript спасибо. Помню, когда я скачал ваш скрипт первый раз (поглазеть), то несколько раз бродил вверх-вниз в поисках языка, на котором собсно скрипт написан. ;-)

    Удачи.

  2. Иван Сагалаев

    В этом случае сразу начнут подсвечиваться и true, и false, и null (без них никак)

    Возможно их вообще имеет смысл вытащить в отдельную группу. Например в SciTE они не подсвечиваются, а в gedit подсвечиваются не так, как keyword'ы.

    А что касается FutureReservedWords, то я бы их тоже включил по той причине, что некоторые из них гласно или негласно (в зависимости от движка) тихо перешли в разряд Keywords. Игнорирование этого факта может запросто привести к трудноуловимой (без подсветки) ошибке при работе с идентификаторами

    Попробую объяснить то, что вчера ночью поленился формулировать.

    Подсветка в текстовых редакторах работает как первый этап отлавливания ошибок, и она там обычно более честно пишется, чем просто разбором по регуляркам. И там имеет смысл подсказывать программисту, что он переопределяет зарезервированное слово.

    В highlight.js другой приоритет. Из-за того, что язык определяется эвристически, возникает неопределенность, которую нельзя обойти: ошибка — это ошибка или признак того, что это другой язык, причем даже неизвестный? Поэтому highlight.js работает в предположении, что ему дали сразу корректный код.

    И поэтому я подумал, что если сейчас нагрузить определение javascript'а keyword'ами, которых там реально нет, то тогда javascript'ом с большей вероятностью начнут считаться другие языки. Ведь как раз по той причине, что это зарезервированные слова, они в языке вообще не используют: в качестве keyword'ов они бесполезны, а в качестве переменных не рекомендуются. Поэтому не надо, чтобы они увеличивали релевантность.

  3. Zeroglif

    В highlight.js другой приоритет.

    Наверное, вы правы. При таком раскладе, чем сложнее, тем хуже. Можно и самому взять флаг в руки, изменить список слов и ограничить эвристику.

  4. Иван Сагалаев

    Ну "true", "false" и "null" я уже прописал, сегодня выложу. А "флаг в руки" — это да, всегда приветствуется, open source, все таки :-)

  5. Иван Сагалаев

    Выложил новую версию с javascript'овыми словами.

  6. Максим

    А может стоит добавить автоматическую нумерацию строк ?

  7. Петр

    Чувствую, что завариваю густую машу с каслом. И все же: как мне переключить раскраску на другой язык внутри какого-либо блока основного языка?

    Стандартный пример — парный тег , который в умных редакторах включает подсветку скрипта, а в гениальных редакторах еще и отладку ;)

  8. Петр

    "парный тег <скрипт>"

  9. Иван Сагалаев

    Автоматическую нумерацию строк я решил не делать. По двум причинам. Первая — это на мой личный вкус уже переходит на территорию "цветастых" добавлений, которые ухудшают впечатление от программы (по крайней мере мое). Это из той же серии, что отдельные цвета для знаков препинания, кнопки переключения "расцвеченный/не расцвеченный", подсвечивание текущей строки под мышью и т.д. Вторая причина в том, что номера строк имеют смысл в целой программе, а в небольшом фрагменте они практически незачем.

    А вот про вложенные языки я думал, и когда-нибудь хочу приделать. Но estimate'ов не назову, это не основной мой проект, все таки :-)

  10. Zeroglif

    Как-бы баг что-ли... Я в файле test.html (из вашего набора) поменял тестовый js-код на кусочек из фреймворка Prototype, там есть строчка:

    return '#<Enumerable:' + this.toArray().inspect() + '>';
    

    Где-то в районе ** что-то ломается, подсветка не срабатывает, код после вообще исчезает. Если эти символы развести пробелом - всё нормально.**

  11. Zeroglif

    Не получилось у меня обозначить, в каком районе. ;-) В общем, если перед большой E в слове Enumerable поставить пробел, то всё будет гут.

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