1# -*- coding: utf-8 -*-
2"""
3    pygments.styles
4    ~~~~~~~~~~~~~~~
5
6    Contains built-in styles.
7
8    :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
9    :license: BSD, see LICENSE for details.
10"""
11
12from pygments.plugin import find_plugin_styles
13from pygments.util import ClassNotFound
14
15
16#: Maps style names to 'submodule::classname'.
17STYLE_MAP = {
18    'default':  'default::DefaultStyle',
19    'emacs':    'emacs::EmacsStyle',
20    'friendly': 'friendly::FriendlyStyle',
21    'colorful': 'colorful::ColorfulStyle',
22    'autumn':   'autumn::AutumnStyle',
23    'murphy':   'murphy::MurphyStyle',
24    'manni':    'manni::ManniStyle',
25    'monokai':  'monokai::MonokaiStyle',
26    'perldoc':  'perldoc::PerldocStyle',
27    'pastie':   'pastie::PastieStyle',
28    'borland':  'borland::BorlandStyle',
29    'trac':     'trac::TracStyle',
30    'native':   'native::NativeStyle',
31    'fruity':   'fruity::FruityStyle',
32    'bw':       'bw::BlackWhiteStyle',
33    'vim':      'vim::VimStyle',
34    'vs':       'vs::VisualStudioStyle',
35    'tango':    'tango::TangoStyle',
36    'rrt':      'rrt::RrtStyle',
37    'xcode':    'xcode::XcodeStyle',
38    'igor':     'igor::IgorStyle',
39    'paraiso-light': 'paraiso_light::ParaisoLightStyle',
40    'paraiso-dark': 'paraiso_dark::ParaisoDarkStyle',
41    'lovelace': 'lovelace::LovelaceStyle',
42    'algol':    'algol::AlgolStyle',
43    'algol_nu': 'algol_nu::Algol_NuStyle',
44    'arduino':  'arduino::ArduinoStyle',
45    'rainbow_dash': 'rainbow_dash::RainbowDashStyle',
46    'abap':     'abap::AbapStyle',
47    'solarized-dark': 'solarized::SolarizedDarkStyle',
48    'solarized-light': 'solarized::SolarizedLightStyle',
49    'sas':         'sas::SasStyle',
50    'stata':       'stata_light::StataLightStyle',
51    'stata-light': 'stata_light::StataLightStyle',
52    'stata-dark':  'stata_dark::StataDarkStyle',
53    'inkpot':      'inkpot::InkPotStyle',
54}
55
56
57def get_style_by_name(name):
58    if name in STYLE_MAP:
59        mod, cls = STYLE_MAP[name].split('::')
60        builtin = "yes"
61    else:
62        for found_name, style in find_plugin_styles():
63            if name == found_name:
64                return style
65        # perhaps it got dropped into our styles package
66        builtin = ""
67        mod = name
68        cls = name.title() + "Style"
69
70    try:
71        mod = __import__('pygments.styles.' + mod, None, None, [cls])
72    except ImportError:
73        raise ClassNotFound("Could not find style module %r" % mod +
74                         (builtin and ", though it should be builtin") + ".")
75    try:
76        return getattr(mod, cls)
77    except AttributeError:
78        raise ClassNotFound("Could not find style class %r in style module." % cls)
79
80
81def get_all_styles():
82    """Return a generator for all styles by name,
83    both builtin and plugin."""
84    yield from STYLE_MAP
85    for name, _ in find_plugin_styles():
86        yield name
87