|  | # 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()) |