Я пытаюсь понять, как я должен реализовать подсветку синтаксиса Live при обработке очень большой строки. Я совершенно смущен. Это то, что я знаю:
(Предположим, что у меня есть функция parsedString parseString(rawString)
)
-
Вызовите
parseString(entireText)
и замените текущую строку возвращаемой обработанной (и стилизованной и т.д.) строкой при каждом изменении текста. Это плохой подход при обработке больших данных. -
Кто-то предложил проанализировать отредактированный диапазон и заменить текущую необработанную отредактированную строку на синтаксическую строку
parseString(editedRange)
.
Метод (1) достаточно ясен. Я не могу понять (2). При вводе для каждого символа, добавленного в строку, уведомление запускается, и один символ обрабатывается (и возвращается как есть).
Например, если я хочу красных селекторов при анализе файла .css, как я могу понять, когда есть готовый селектор, за которым следует {
, который должен быть окрашен? Я предполагаю, что есть какой-то способ отсрочить разбор, пока не появится совпадение. Как вы это реализуете?
Я не ищу рабочего приложения. Хорошее объяснение было бы полезно также.
Спасибо заранее.