| # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import sys |
| try: |
| import pygments |
| from pygments.lexers import CppLexer |
| from pygments.formatters import HtmlFormatter |
| PYGMENTS_IMPORTED = True |
| except ImportError: |
| print('It appears that Pygments is not installed. ' |
| 'Can be installed using easy_install Pygments or from http://pygments.org.') |
| PYGMENTS_IMPORTED = False |
| |
| class PygmentsHighlighter(object): |
| def __init__(self): |
| if not PYGMENTS_IMPORTED: |
| raise ImportError('Pygments not installed') |
| |
| """Highlighter that uses the python pygments library to highlight code. |
| """ |
| def GetCSS(self, style): |
| formatter = HtmlFormatter(linenos=True, |
| style=pygments.styles.get_style_by_name(style)) |
| return formatter.get_style_defs('.highlight') |
| |
| def GetCodeElement(self, code, style): |
| formatter = HtmlFormatter(linenos=True, |
| style=pygments.styles.get_style_by_name(style)) |
| return pygments.highlight(code, CppLexer(), formatter) |
| |
| def DisplayName(self): |
| return 'pygments' + ('' if PYGMENTS_IMPORTED else ' (not installed)') |
| |
| def GetStyles(self): |
| return list(pygments.styles.get_all_styles()) |