Я использую метод 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__, я получу то, что хочу, но это не кажется правильным.
Как я могу получить то, что хочу? Может быть, наследовать класс, а затем переопределить функцию или что-то в этом роде? Любые идеи будут оценены по достоинству.






Оказывается, решение было простым. Мне просто пришлось использовать следующее:
guess_lexer(text).name