Определить язык программирования фрагмента с помощью Pygments - PullRequest
0 голосов
/ 23 мая 2018

Я использую метод 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 Ответ

0 голосов
/ 23 мая 2018

Оказывается, решение было простым.Я просто должен был использовать следующее:

guess_lexer(text).name
...