4 # |
4 # |
5 |
5 |
6 """ |
6 """ |
7 Module implementing a custom lexer using pygments. |
7 Module implementing a custom lexer using pygments. |
8 """ |
8 """ |
|
9 |
|
10 import contextlib |
9 |
11 |
10 from pygments.token import Token |
12 from pygments.token import Token |
11 from pygments.lexers import ( |
13 from pygments.lexers import ( |
12 guess_lexer_for_filename, guess_lexer, find_lexer_class |
14 guess_lexer_for_filename, guess_lexer, find_lexer_class |
13 ) |
15 ) |
180 Constructor |
182 Constructor |
181 |
183 |
182 @param parent parent widget of this lexer |
184 @param parent parent widget of this lexer |
183 @param name name of the pygments lexer to use (string) |
185 @param name name of the pygments lexer to use (string) |
184 """ |
186 """ |
185 super(LexerPygments, self).__init__(parent) |
187 super().__init__(parent) |
186 |
188 |
187 self.__inReadSettings = False |
189 self.__inReadSettings = False |
188 |
190 |
189 if name.startswith("Pygments|"): |
191 if name.startswith("Pygments|"): |
190 self.__forcedPygmentsName = True |
192 self.__forcedPygmentsName = True |
325 @type QSettings |
327 @type QSettings |
326 @param prefix prefix for the settings key (defaults to "/Scintilla") |
328 @param prefix prefix for the settings key (defaults to "/Scintilla") |
327 @type str (optional) |
329 @type str (optional) |
328 """ |
330 """ |
329 self.__inReadSettings = True |
331 self.__inReadSettings = True |
330 super(LexerPygments, self).readSettings(qs, prefix=prefix) |
332 super().readSettings(qs, prefix=prefix) |
331 self.__inReadSettings = False |
333 self.__inReadSettings = False |
332 |
334 |
333 def language(self): |
335 def language(self): |
334 """ |
336 """ |
335 Public method returning the language of the lexer. |
337 Public method returning the language of the lexer. |
451 elif text: |
453 elif text: |
452 # step 1: guess based on filename and text |
454 # step 1: guess based on filename and text |
453 if self.editor is not None: |
455 if self.editor is not None: |
454 fn = self.editor.getFileName() |
456 fn = self.editor.getFileName() |
455 if fn: |
457 if fn: |
456 try: |
458 with contextlib.suppress(ClassNotFound): |
457 lexer = guess_lexer_for_filename(fn, text) |
459 lexer = guess_lexer_for_filename(fn, text) |
458 except ClassNotFound: |
|
459 pass |
|
460 |
460 |
461 # step 2: guess on text only |
461 # step 2: guess on text only |
462 if lexer is None: |
462 if lexer is None: |
463 try: |
463 with contextlib.suppress(ClassNotFound): |
464 lexer = guess_lexer(text) |
464 lexer = guess_lexer(text) |
465 except ClassNotFound: |
|
466 pass |
|
467 |
465 |
468 return lexer |
466 return lexer |
469 |
467 |
470 def canStyle(self): |
468 def canStyle(self): |
471 """ |
469 """ |