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