You are here

class ParserManager in Markdown 8.2

Markdown Parser Plugin Manager.

@method \Drupal\markdown\Plugin\Markdown\ParserInterface[] all(array $configuration = [], $includeFallback = FALSE) : array @method \Drupal\markdown\Plugin\Markdown\ParserInterface[] enabled(array $configuration = []) : array @method \Drupal\markdown\Annotation\MarkdownParser getDefinition($plugin_id, $exception_on_invalid = TRUE) @method \Drupal\markdown\Annotation\MarkdownParser|void getDefinitionByClassName($className) @method \Drupal\markdown\Annotation\MarkdownParser[] getDefinitions($includeFallback = TRUE) @method \Drupal\markdown\Plugin\Markdown\ParserInterface[] installed(array $configuration = []) : array @noinspection PhpUnnecessaryFullyQualifiedNameInspection

Hierarchy

Expanded class hierarchy of ParserManager

4 files declare their use of ParserManager
BaseParser.php in src/Plugin/Markdown/BaseParser.php
InstallableRequirement.php in src/Annotation/InstallableRequirement.php
markdown.install in ./markdown.install
Install, update and uninstall functions for the markdown module.
markdown.post_update.php in ./markdown.post_update.php
Markdown post updates.
1 string reference to 'ParserManager'
markdown.services.yml in ./markdown.services.yml
markdown.services.yml
1 service uses ParserManager
plugin.manager.markdown.parser in ./markdown.services.yml
Drupal\markdown\PluginManager\ParserManager

File

src/PluginManager/ParserManager.php, line 28

Namespace

Drupal\markdown\PluginManager
View source
class ParserManager extends InstallablePluginManager implements ParserManagerInterface {
  use EnableAwarePluginManagerTrait;

  /**
   * {@inheritdoc}
   */
  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ConfigFactoryInterface $configFactory, LoggerInterface $logger, ModuleHandlerInterface $module_handler) {
    parent::__construct('Plugin/Markdown', $namespaces, $configFactory, $logger, $module_handler, ParserInterface::class, MarkdownParser::class);
    $this
      ->setCacheBackend($cache_backend, 'markdown_parser_info');
    $this
      ->alterInfo($this->cacheKey);
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container = NULL) {
    if (!$container) {
      $container = \Drupal::getContainer();
    }
    $instance = new static($container
      ->get('container.namespaces'), $container
      ->get('cache.discovery'), $container
      ->get('config.factory'), $container
      ->get('logger.channel.markdown'), $container
      ->get('module_handler'));
    $instance
      ->setContainer($container);
    return $instance;
  }

  /**
   * {@inheritdoc}
   *
   * @return \Drupal\markdown\Plugin\Markdown\ParserInterface
   *   A Parser instance.
   */
  public function createInstance($plugin_id, array $configuration = []) {

    /** @var \Drupal\markdown\Plugin\Markdown\ParserInterface $parser */
    $parser = parent::createInstance($plugin_id, $configuration);

    // If the parser is the fallback parser (missing), then just return it.
    if ($parser
      ->getPluginId() === $this
      ->getFallbackPluginId()) {
      return $parser;
    }

    // Add a default cache tag.
    $parser
      ->addCacheTags([
      "markdown.parser.{$plugin_id}",
    ]);
    return $parser;
  }

  /**
   * {@inheritDoc}
   */
  public function getDefaultParser(array $configuration = []) {
    $settings = $this->configFactory
      ->get('markdown.settings');
    if (!($defaultParser = $settings
      ->get('default_parser'))) {
      $defaultParser = current(array_keys($this
        ->installed()));
      $this->logger
        ->warning($this
        ->t('No default markdown parser set, using first available installed parser "@default_parser".', [
        '@default_parser' => $defaultParser,
      ]));
    }
    return $this
      ->createInstance($defaultParser, $configuration);
  }

  /**
   * {@inheritdoc}
   */
  public function getFallbackPluginId($plugin_id = NULL, array $configuration = []) {
    return '_missing_parser';
  }

  /**
   * {@inheritdoc}
   */
  public function processDefinition(&$definition, $plugin_id) {
    parent::processDefinition($definition, $plugin_id);
    if (!$definition instanceof MarkdownParser || !$definition
      ->isInstalled() || !($class = $definition
      ->getClass())) {
      return;
    }

    // Process extensible parser support.
    if (is_subclass_of($class, ExtensibleParserInterface::class)) {
      if (!$definition->extensionInterfaces) {
        throw new InvalidPluginDefinitionException($plugin_id, sprintf('Markdown parser "%s" implements %s but is missing "extensionInterfaces" in the definition.', $plugin_id, ExtensibleParserInterface::class));
      }
      foreach (array_map('\\Drupal\\markdown\\PluginManager\\InstallablePluginManager::normalizeClassName', $definition->extensionInterfaces) as $interface) {
        if ($interface === ExtensionInterface::class) {
          throw new InvalidPluginDefinitionException($plugin_id, sprintf('Markdown parser "%s" cannot specify %s as the extension interface. It must create its own unique interface that extend from it.', $plugin_id, ExtensionInterface::class));
        }
        if (!interface_exists($interface)) {
          throw new InvalidPluginDefinitionException($plugin_id, sprintf('Markdown parser "%s" indicates that it supports the extension interface "%s", but this interface does not exist.', $plugin_id, $interface));
        }
        if (!is_subclass_of($interface, ExtensionInterface::class)) {
          throw new InvalidPluginDefinitionException($plugin_id, sprintf('Markdown parser "%s" indicates that it supports the extension interface "%s", but this interface does not extend %s.', $plugin_id, $interface, ExtensionInterface::class));
        }
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function providerExists($provider) {

    // It's known that plugins provided by this module exist. Explicitly and
    // always return TRUE for this case. This is needed during install when
    // the module is not yet (officially) installed.
    // @see markdown_requirements()
    if ($provider === 'markdown') {
      return TRUE;
    }
    return parent::providerExists($provider);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DefaultPluginManager::$additionalAnnotationNamespaces protected property Additional namespaces the annotation discovery mechanism should scan for annotation definitions.
DefaultPluginManager::$alterHook protected property Name of the alter hook if one should be invoked.
DefaultPluginManager::$cacheKey protected property The cache key.
DefaultPluginManager::$cacheTags protected property An array of cache tags to use for the cached definitions.
DefaultPluginManager::$defaults protected property A set of defaults to be referenced by $this->processDefinition() if additional processing of plugins is necessary or helpful for development purposes. 9
DefaultPluginManager::$moduleHandler protected property The module handler to invoke the alter hook. 1
DefaultPluginManager::$namespaces protected property An object that implements \Traversable which contains the root paths keyed by the corresponding namespace to look for plugin implementations.
DefaultPluginManager::$pluginDefinitionAnnotationName protected property The name of the annotation that contains the plugin definition.
DefaultPluginManager::$pluginInterface protected property The interface each plugin should implement. 1
DefaultPluginManager::$subdir protected property The subdirectory within a namespace to look for plugins, or FALSE if the plugins are in the top level of the namespace.
DefaultPluginManager::alterInfo protected function Sets the alter hook name.
DefaultPluginManager::extractProviderFromDefinition protected function Extracts the provider from a plugin definition.
DefaultPluginManager::fixContextAwareDefinitions private function Fix the definitions of context-aware plugins.
DefaultPluginManager::getDiscovery protected function Gets the plugin discovery. Overrides PluginManagerBase::getDiscovery 12
DefaultPluginManager::getFactory protected function Gets the plugin factory. Overrides PluginManagerBase::getFactory
DefaultPluginManager::useCaches public function Disable the use of caches. Overrides CachedDiscoveryInterface::useCaches 1
DiscoveryCachedTrait::$definitions protected property Cached definitions array. 1
DiscoveryCachedTrait::getDefinition public function Overrides DiscoveryTrait::getDefinition 3
DiscoveryTrait::doGetDefinition protected function Gets a specific plugin definition.
DiscoveryTrait::hasDefinition public function
EnableAwarePluginManagerTrait::enabled public function
InstallablePluginManager::$cacheContexts protected property Cache contexts.
InstallablePluginManager::$cacheMaxAge protected property Cache max-age.
InstallablePluginManager::$configFactory protected property The Config Factory service.
InstallablePluginManager::$logger protected property A Logger service.
InstallablePluginManager::$runtimeDefinitions protected static property The cached runtime definitions.
InstallablePluginManager::all public function Retrieves all registered plugins. Overrides InstallablePluginManagerInterface::all
InstallablePluginManager::alterDefinition protected function Allows plugin managers to further alter individual definitions. 2
InstallablePluginManager::alterDefinitions protected function Invokes the hook to alter the definitions if the alter hook is set. Overrides DefaultPluginManager::alterDefinitions 2
InstallablePluginManager::clearCachedDefinitions public function Clears static and persistent plugin definition caches. Overrides DefaultPluginManager::clearCachedDefinitions
InstallablePluginManager::convertInstalledToLibraries Deprecated protected function Converts plugin definitions using the old "installed" method to libraries.
InstallablePluginManager::createObjectRequirement protected function 1
InstallablePluginManager::findDefinitions protected function Finds plugin definitions. Overrides DefaultPluginManager::findDefinitions
InstallablePluginManager::firstInstalledPluginId public function Retrieves the first installed plugin identifier. Overrides InstallablePluginManagerInterface::firstInstalledPluginId
InstallablePluginManager::getCacheContexts public function The cache contexts associated with this object. Overrides DefaultPluginManager::getCacheContexts
InstallablePluginManager::getCachedDefinitions protected function Overrides DefaultPluginManager::getCachedDefinitions
InstallablePluginManager::getCacheKey public function Retrieves the cache key to use. Overrides InstallablePluginManagerInterface::getCacheKey
InstallablePluginManager::getCacheMaxAge public function The maximum age for which this object may be cached. Overrides DefaultPluginManager::getCacheMaxAge
InstallablePluginManager::getCacheTags public function The cache tags associated with this object. Overrides DefaultPluginManager::getCacheTags
InstallablePluginManager::getContainer public function Retrieves the container.
InstallablePluginManager::getDefinitionByClassName public function Retrieves a definition by class name. Overrides InstallablePluginManagerInterface::getDefinitionByClassName
InstallablePluginManager::getDefinitionByLibraryId public function Retrieves a definition by library identifier. Overrides InstallablePluginManagerInterface::getDefinitionByLibraryId
InstallablePluginManager::getDefinitions public function Gets the definition of all plugins for this type. Overrides DefaultPluginManager::getDefinitions
InstallablePluginManager::getRuntimeDefinitions protected function Retrieves the runtime definitions.
InstallablePluginManager::handlePluginNotFound protected function Allows plugin managers to specify custom behavior if a plugin is not found. Overrides PluginManagerBase::handlePluginNotFound
InstallablePluginManager::installed public function Retrieves all installed plugins. Overrides InstallablePluginManagerInterface::installed
InstallablePluginManager::installedDefinitions public function Retrieves installed plugin definitions. Overrides InstallablePluginManagerInterface::installedDefinitions
InstallablePluginManager::processLibraryDefinition protected function Processes the library definition.
InstallablePluginManager::setCacheBackend public function Initialize the cache backend. Overrides DefaultPluginManager::setCacheBackend
InstallablePluginManager::setCachedDefinitions protected function Sets a cache of plugin definitions for the decorated discovery class. Overrides DefaultPluginManager::setCachedDefinitions
InstallablePluginManager::sortDefinitions protected function Sorts a definitions array.
NormalizeTrait::isCallable public static function
NormalizeTrait::isTraversable public static function Indicates whether a value is traversable.
NormalizeTrait::normalizeCallables public static function Normalizes any callables provided so they can be stored in the database.
NormalizeTrait::normalizeClassName public static function Normalizes class names to prevent double escaping.
ParserManager::create public static function Instantiates a new instance of this class. Overrides ContainerInjectionInterface::create
ParserManager::createInstance public function Overrides InstallablePluginManager::createInstance
ParserManager::getDefaultParser public function Retrieves the site-wide default MarkdownParser plugin. Overrides ParserManagerInterface::getDefaultParser
ParserManager::getFallbackPluginId public function Gets a fallback id for a missing plugin. Overrides InstallablePluginManager::getFallbackPluginId
ParserManager::processDefinition public function Performs extra processing on plugin definitions. Overrides InstallablePluginManager::processDefinition
ParserManager::providerExists protected function Determines if the provider of a definition exists. Overrides DefaultPluginManager::providerExists
ParserManager::__construct public function Creates the discovery object. Overrides InstallablePluginManager::__construct
PluginManagerBase::$discovery protected property The object that discovers plugins managed by this manager.
PluginManagerBase::$factory protected property The object that instantiates plugins managed by this manager.
PluginManagerBase::$mapper protected property The object that returns the preconfigured plugin instance appropriate for a particular runtime condition.
PluginManagerBase::getInstance public function Gets a preconfigured instance of a plugin. Overrides MapperInterface::getInstance 7
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UseCacheBackendTrait::$cacheBackend protected property Cache backend instance.
UseCacheBackendTrait::$useCaches protected property Flag whether caches should be used or skipped.
UseCacheBackendTrait::cacheGet protected function Fetches from the cache backend, respecting the use caches flag. 1
UseCacheBackendTrait::cacheSet protected function Stores data in the persistent cache, respecting the use caches flag.