38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
|
# 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())
|