-
Здравствуйте.
Спасибо за скрипт... Немножко поизучал, добавил общую подсветку операторов [COLOR=#0000FF]+ - = | , ?[/COLOR]и т.п., стало заметно приятнее. В общем, стилизовал под подсветку FrontPage 2003, оставил только web-языки. Очень доволен, ещё раз спасибо.
Но появилась небольшая проблемка. Я истользую в JavaScript-е названия функций, начинающиеся на "$", и, при парсинге JavaScript, происходит неверное присвоение класса code, присваивается php. Подскажите пожалуйста, где добавить условие, для исключения такого поведения?
Одно дело, разобраться с добавлением режимов, но разбираться с прсингом языков совсем не хочется. Буду очень признателен, если просто подскажете строчку где происходит проверка на принадлежность к php. -
Такой проверки нет. Просто фрагмент кода расцвечивается разными языками, и в каком нашлось больше подходящих конструкций, тот и выбирается.
Улучшить эту эвристику можно несколькими способами:
- передав в hljs.initHighlightingOnLoad только нужные языки
- явно указав у фрагмента кода язык (
<code class="javascript">)
Плюс, если забросите кусочек кода сюда, то я попробую посмотреть, можно ли улучшить эвристику в принципе. Иногда бывает, что ошибка достаточно явная.
-
Такой проверки нет. Просто фрагмент кода расцвечивается разными языками, и в каком нашлось больше подходящих конструкций, тот и выбирается.
Понятно. Тогда всё понятно, виноват сам... Такое происходит не только при наличии $, а практически всегда. Я добавил парсинг операторов, как Вы пишете, в "мясо", потому, происходит расцветка каждой угловой скобки, и соответственно, если в коде присутствует html, то получается бардак. А в случае с чистым JavaScript, имеющим функции с названиями, начинающимися на $, количество операторов было бы равным, если бы $ не перетягивал в сторону php. Я пробовал подключать правила локально в отдельно взятом языке, но у меня, что то не получилось... Иван, может Вы найдете минутку, и покажете на примере, как это делается? Что и где следует прописать...
Спасибо. -
Я сделал так:
В highlight.js добавил регулярку
this.OPERATOR_RE = '[\\!\\%\\&\\*\\-\\+\\=\\|\\:\\?]';
и объект
this.OPERATOR_MODE = {
className: 'operator',
begin: this.OPERATOR_RE, end: '^',
relevance: 0
};
В javascript.js прописал:
contains: ['string', 'comment', 'number', 'regexp', 'function', 'operator'],
и такой объект
{
className: 'operator',
begin: '[\\!\\%\\&\\*\\-\\+\\=\\|\\:\\?\\<\\>\\,]', end: '^'
},
Аналогично в http://www.js для html и в dinamic.js для php. -
Да... Ещё это в модах прописал
modes: [
hljs.OPERATOR_MODE, -
Не совсем понял. Сначала вы пишете, что определили this.OPERATORRE и this.OPERATORMODE, а потом говорите, что в javascript.js в modes прописали их почти полные аналоги заново. Как так?
По идее, всю эту проблему должен решать как раз
relevance: 0, который полностью устраняет влияние этого нового режима на эвристику. И вот в том объекте, который вы пишете вторым:{ className: 'operator', begin: '[\\!\\%\\&\\*\\-\\+\\=\\|\\:\\?\\<\\>\\,]', end: '^' },этого relevance'а как раз нет. Может в этом дело?
-
Не совсем понял.Без определения в основной функции, у меня не получилось создать объект в языковом файле, вернее, он создается, но не работает. Единственное, что получалось, это парсить уже определенные классы. Например "title", т.е., находить внутри title совпадающие с моим шаблоном подстроки, через задание "contains:". А искать по всему блоку, получается только, если определяю объект в основной функции. И... не зная, как сделать правильно, я нашел такую лазейку :-), Задаю не полный шаблон в основной функции, а уже в языковых/групповых файлах уточняю этот шаблон, потому, что нужно небольшое отличие поиска операторов для разных языков. Подозреваю, что в главной функции можно просто создавать объект, не прописывая свойства, но я не пробовал.
Про relevance: 0 понял, спасибо, попробую. А так то, я уже отказался от автоматического определения языка, действительно, маленькие отрывки кода практически не распознаются. А для моей задачи это нужно. Потому, сделал, как Вы предложили - с явным указанием класса. В общем, сейчас всё работает, чуть позже выложу ссылочку на ресурс.
Замечательный скрипт! -
Вот, как и обещал, ссылка на ресурс.
Вчера открыл этот форум. Начал написание библиотеки анимации, полюбопытствуйте.
