Нарисовал очередную версию highlight.js. Компанию клиентским веб-языкам составил Javascript, которого многим не хватало, судя по сайтам (список которых я так еще и не составил, но составлю обязательно).
Кстати, оказывается есть разночтение в том, что считать keyword'ами в Javascript. Они делятся на две группы: которые реально есть сейчас и которые зарезервированы для будущих версий. И вот например SciTE подсвечивает и те, и другие. Я же решил оставить только реальные. Как-то это правильней кажется...
Комментарии: 11 (особо ценных: 1)
Особо ценный комментарий
Иван,
Не смотрите на Keywords, смотрите на Reserved Words (ECMAScript 7.5.1), кои состоят из:
В этом случае сразу начнут подсвечиваться и 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 спасибо. Помню, когда я скачал ваш скрипт первый раз (поглазеть), то несколько раз бродил вверх-вниз в поисках языка, на котором собсно скрипт написан. ;-)
Удачи.
Возможно их вообще имеет смысл вытащить в отдельную группу. Например в SciTE они не подсвечиваются, а в gedit подсвечиваются не так, как keyword'ы.
Попробую объяснить то, что вчера ночью поленился формулировать.
Подсветка в текстовых редакторах работает как первый этап отлавливания ошибок, и она там обычно более честно пишется, чем просто разбором по регуляркам. И там имеет смысл подсказывать программисту, что он переопределяет зарезервированное слово.
В highlight.js другой приоритет. Из-за того, что язык определяется эвристически, возникает неопределенность, которую нельзя обойти: ошибка — это ошибка или признак того, что это другой язык, причем даже неизвестный? Поэтому highlight.js работает в предположении, что ему дали сразу корректный код.
И поэтому я подумал, что если сейчас нагрузить определение javascript'а keyword'ами, которых там реально нет, то тогда javascript'ом с большей вероятностью начнут считаться другие языки. Ведь как раз по той причине, что это зарезервированные слова, они в языке вообще не используют: в качестве keyword'ов они бесполезны, а в качестве переменных не рекомендуются. Поэтому не надо, чтобы они увеличивали релевантность.
Наверное, вы правы. При таком раскладе, чем сложнее, тем хуже. Можно и самому взять флаг в руки, изменить список слов и ограничить эвристику.
Ну "true", "false" и "null" я уже прописал, сегодня выложу. А "флаг в руки" — это да, всегда приветствуется, open source, все таки :-)
Выложил новую версию с javascript'овыми словами.
А может стоит добавить автоматическую нумерацию строк ?
Чувствую, что завариваю густую машу с каслом. И все же: как мне переключить раскраску на другой язык внутри какого-либо блока основного языка?
Стандартный пример — парный тег , который в умных редакторах включает подсветку скрипта, а в гениальных редакторах еще и отладку ;)
"парный тег <скрипт>"
Автоматическую нумерацию строк я решил не делать. По двум причинам. Первая — это на мой личный вкус уже переходит на территорию "цветастых" добавлений, которые ухудшают впечатление от программы (по крайней мере мое). Это из той же серии, что отдельные цвета для знаков препинания, кнопки переключения "расцвеченный/не расцвеченный", подсвечивание текущей строки под мышью и т.д. Вторая причина в том, что номера строк имеют смысл в целой программе, а в небольшом фрагменте они практически незачем.
А вот про вложенные языки я думал, и когда-нибудь хочу приделать. Но estimate'ов не назову, это не основной мой проект, все таки :-)
Как-бы баг что-ли... Я в файле test.html (из вашего набора) поменял тестовый js-код на кусочек из фреймворка Prototype, там есть строчка:
Где-то в районе ** что-то ломается, подсветка не срабатывает, код после вообще исчезает. Если эти символы развести пробелом - всё нормально.**
Не получилось у меня обозначить, в каком районе. ;-) В общем, если перед большой E в слове Enumerable поставить пробел, то всё будет гут.