"""
    pygments.styles
    ~~~~~~~~~~~~~~~

    Contains built-in styles.

    :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
"""

from pip._vendor.pygments.plugin import find_plugin_styles
from pip._vendor.pygments.util import ClassNotFound


#: Maps style names to 'submodule::classname'.
STYLE_MAP = {
    "default": "default::DefaultStyle",
    "emacs": "emacs::EmacsStyle",
    "friendly": "friendly::FriendlyStyle",
    "friendly_grayscale": "friendly_grayscale::FriendlyGrayscaleStyle",
    "colorful": "colorful::ColorfulStyle",
    "autumn": "autumn::AutumnStyle",
    "murphy": "murphy::MurphyStyle",
    "manni": "manni::ManniStyle",
    "material": "material::MaterialStyle",
    "monokai": "monokai::MonokaiStyle",
    "perldoc": "perldoc::PerldocStyle",
    "pastie": "pastie::PastieStyle",
    "borland": "borland::BorlandStyle",
    "trac": "trac::TracStyle",
    "native": "native::NativeStyle",
    "fruity": "fruity::FruityStyle",
    "bw": "bw::BlackWhiteStyle",
    "vim": "vim::VimStyle",
    "vs": "vs::VisualStudioStyle",
    "tango": "tango::TangoStyle",
    "rrt": "rrt::RrtStyle",
    "xcode": "xcode::XcodeStyle",
    "igor": "igor::IgorStyle",
    "paraiso-light": "paraiso_light::ParaisoLightStyle",
    "paraiso-dark": "paraiso_dark::ParaisoDarkStyle",
    "lovelace": "lovelace::LovelaceStyle",
    "algol": "algol::AlgolStyle",
    "algol_nu": "algol_nu::Algol_NuStyle",
    "arduino": "arduino::ArduinoStyle",
    "rainbow_dash": "rainbow_dash::RainbowDashStyle",
    "abap": "abap::AbapStyle",
    "solarized-dark": "solarized::SolarizedDarkStyle",
    "solarized-light": "solarized::SolarizedLightStyle",
    "sas": "sas::SasStyle",
    "staroffice": "staroffice::StarofficeStyle",
    "stata": "stata_light::StataLightStyle",
    "stata-light": "stata_light::StataLightStyle",
    "stata-dark": "stata_dark::StataDarkStyle",
    "inkpot": "inkpot::InkPotStyle",
    "zenburn": "zenburn::ZenburnStyle",
    "gruvbox-dark": "gruvbox::GruvboxDarkStyle",
    "gruvbox-light": "gruvbox::GruvboxLightStyle",
    "dracula": "dracula::DraculaStyle",
    "one-dark": "onedark::OneDarkStyle",
    "lilypond": "lilypond::LilyPondStyle",
    "nord": "nord::NordStyle",
    "nord-darker": "nord::NordDarkerStyle",
    "github-dark": "gh_dark::GhDarkStyle",
}


def get_style_by_name(name):
    if name in STYLE_MAP:
        mod, cls = STYLE_MAP[name].split("::")
        builtin = "yes"
    else:
        for found_name, style in find_plugin_styles():
            if name == found_name:
                return style
        # perhaps it got dropped into our styles package
        builtin = ""
        mod = name
        cls = name.title() + "Style"

    try:
        mod = __import__("pygments.styles." + mod, None, None, [cls])
    except ImportError:
        raise ClassNotFound(
            "Could not find style module %r" % mod
            + (builtin and ", though it should be builtin")
            + "."
        )
    try:
        return getattr(mod, cls)
    except AttributeError:
        raise ClassNotFound("Could not find style class %r in style module." % cls)


def get_all_styles():
    """Return a generator for all styles by name,
    both builtin and plugin."""
    yield from STYLE_MAP
    for name, _ in find_plugin_styles():
        yield name
