У меня проблема. Я пытаюсь сделать редактор для терминала. Поэтому я использую urwid, так как он поддерживает события как клавиш, так и мыши. Моя установка состоит в том, чтобы использовать настраиваемый ListWalker и один виджет редактирования строки, а заголовок - номер строки. Проблема в том, что когда он выделяет фрагменты кода, это делается построчно. Что очень эффективно. Но тут есть подвох. Например, если у вас есть многострочная строка документа, она будет выделена неправильно.
1 """This is a docstring and it is be highlighted this whole line.
2 This is not higlighted"""#This should be a comment but is a part of the doc string
Я не могу обернуть голову вокруг этого. Для выделения кода я использую
list(lex(self._edit_text, self.parent.language))
Это окрашено, используя палитру urwid.
palette = [(token.Token.Literal.String.Doc, "dark magenta", "black"),]
# | | |
# the identifier fg bg
# if it isn't lined up, palette[0] is the identifier('"""*"""'),
# palette[1] is the foreground color and palette[2] is the background color.
строки хранятся в списке смайликов
[urwid.Edit(" 1 ",'"""This is a docstring and it's highlighted as a string.'),\
urwid.Edit(" 2 ",\
'This is not higlighted"""#This should be a comment but is a part of the doc string')]
и функция выделения производит
[(Token.Literal.String.Doc, '"""This is a docstring and it's highlighted as a string.')\
(Token.Name,\
'This is not higlighted"""#This should be a comment but is a part of the doc string')]
И когда он обрабатывается, он делает строку из текста и сохраняется в self._edit_text. Затем он создает список кортежей, сохраненных как
self._attrib = [('ln_sel', 4), (Token.Name, 4), (Token.Text, 2), (Token.Operator.Word, 2),\
(Token.Text, 1), (Token.Operator.Word, 3), (Token.Text, 1), (Token.Name, 10), \
(Token.Literal.String, 61)]
Это означает, что self._edit_text [0: 4] окрашен с помощью кортежа палитры «ln_sel», а этот self._edit_text [4: 8] окрашен с помощью кортежа палитры «Token.Name».
Как я могу сделать эту работу?
Спасибо:)
http://excess.org/urwid/
http://pygments.org/