У меня есть простой текстовый редактор. Я хотел бы добавить к нему C-like /* comment blocks */
. Я имею в виду многострочные комментарии, конечно.Алгоритм для раскраски блоков комментариев C-like/* */
Его структура данных выглядит следующим образом:
struct TextEdit
{
struct Line
{
char* str;
int len;
};
Line* index;
int lines;
void Modified(int line_from, int line_to);
bool IsInBlockComment(int line, int column);
};
Modified()
называется каждый раз, когда текст изменён таким образом, редактор имеет возможность повторного сканирования содержимого модифицированного спектра линий.
- Как бы вы реализовали метод
IsInBlockComment()
, который может определить, находится ли данная позиция в тексте внутри комментария блока? - Какие дополнительные данные следует добавлять и поддерживать на уровне
Modified()
, чтобы иметь возможность делать это эффективно?
Важная деталь:
/*
и */
маркеры не должны быть в действительности, если они происходят после //
комментария или внутри ""
и ''
текстовых строк.
Я не прошу использовать исходный код или подробные спецификации, я прошу только краткую концепцию.
Что вы попробовали? – thumbmunkeys
На самом деле это не тривиальная задача. Вам придется реализовать парсер, который будет обрабатывать однострочные комментарии и строки. – MightyPork
Он уже разбирает отдельные строки и «литералы», главное - с/* * /, таким образом, мне не нужно будет переписывать весь документ каждый раз, когда он имеет небольшое изменение, как указано в модифицированном методе. – Anonymous