Подсветка синтаксиса с помощью Curses::UI::TextEditor

Я просто работаю над своим первым приложением на основе Curses в Perl, используя Curses::UI. Мне интересно, можно ли раскрасить определенные слова в TextEditor (не все, используя -fg). Это будет использоваться для подсветки синтаксиса.

Ваше здоровье!

Брэд


person Brad    schedule 20.08.2013    source источник


Ответы (1)


Это возможно, но, вероятно, потребует от вас расширения или подкласса Curses::UI::TextEditor. Это связано с тем, что класс TextEditor отображает свое содержимое построчно.

Я немного повозился с методом draw_text Curses::UI::TextEditor, чтобы доказать самому себе, что это можно сделать:

sub draw_text(;$)
{
    # ...
    for my $id (0 .. $this->canvasheight - 1)
    {
        my $line_number = sprintf( "%04d", $id );
        $this->{-canvasscr}->attron( A_REVERSE );
        $this->{-canvasscr}->addstr( $line_number );
        $this->{-canvasscr}->attroff( A_REVERSE );
    # ...

Это помещает обратный цветной блок с текущим номером строки в каждой строке. Конечно, это не ставит его в начало очереди, как я ожидал, но у меня было всего около 10 минут, чтобы поиграть. Вы могли бы иметь лучшие результаты с немного больше времени.

Так. Возможно? да. Легкий? Возможно, нет. По-прежнему существует проблема токенизации содержимого вашего редактора для выделения.

person Brian Wisti    schedule 20.08.2013
comment
Спасибо, Брайан! Я создал подклассы и сделал небольшое исправление, чтобы получить хорошие результаты. В настоящее время просто выделяются строки подпрограмм, чтобы их было легче найти в больших файлах. Я думаю, вы определенно указали мне правильное направление, поэтому я принимаю этот ответ. Спасибо еще раз - person Brad; 21.08.2013