Я использую метод guess_lexer()
библиотеки Pygments для определения исходного кода во фрагменте:
Вот как я сейчас его использую:
from pygments.lexers import guess_lexer
text = "string containing source code"
lexer_subclass = guess_lexer(text)
print str(lexer_subclass)
И в зависимости от языка, присутствующего в переменной text
, он вернет что-то вроде:
<pygments.lexers.PythonLexer>
Я хочу только часть PythonLexer
.Я знаю, что могу получить это, используя манипуляции со строками, но это кажется хакерским.Я хочу сделать это правильным способом.
Поэтому я попытался увидеть, что делает Pygment внутри, и нашел этот метод , который отвечает за вывод имени лексера:
def __repr__(self):
if self.options:
return '<pygments.lexers.%s with %r>' % (self.__class__.__name__,
self.options)
else:
return '<pygments.lexers.%s>' % self.__class__.__name__
Конечно, если я изменю его так, чтобы он возвращал только self.__class__.__name__
, я получу то, что хочу, но это не так.
Как я могу получить то, чтоЯ хочу?Может быть, наследование класса, а затем переопределение функции или что-то?Любые идеи будут оценены.