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