class ExtensionCollection in Markdown 8.2
Collection of extension plugins based on relevant parser.
@property \Drupal\markdown\PluginManager\ExtensionManager $manager
Hierarchy
- class \Drupal\Component\Plugin\LazyPluginCollection implements \Drupal\Component\Plugin\IteratorAggregate, \Drupal\Component\Plugin\Countable
- class \Drupal\Core\Plugin\DefaultLazyPluginCollection uses DependencySerializationTrait
- class \Drupal\markdown\PluginManager\ExtensionCollection
- class \Drupal\Core\Plugin\DefaultLazyPluginCollection uses DependencySerializationTrait
Expanded class hierarchy of ExtensionCollection
1 file declares its use of ExtensionCollection
- BaseExtensibleParser.php in src/
Plugin/ Markdown/ BaseExtensibleParser.php
File
- src/
PluginManager/ ExtensionCollection.php, line 14
Namespace
Drupal\markdown\PluginManagerView source
class ExtensionCollection extends DefaultLazyPluginCollection {
/**
* The Markdown Parser instance this extension collection belongs to.
*
* @var \Drupal\markdown\Plugin\Markdown\ExtensibleParserInterface
*/
protected $parser;
/**
* ExtensionCollection constructor.
*
* @param \Drupal\markdown\PluginManager\ExtensionManagerInterface $manager
* The Markdown Extension Plugin Manager service.
* @param \Drupal\markdown\Plugin\Markdown\ExtensibleParserInterface $parser
* A markdown parser instance.
*/
public function __construct(ExtensionManagerInterface $manager, ExtensibleParserInterface $parser) {
$this->parser = $parser;
$extensionInterfaces = $parser
->extensionInterfaces();
// Filter out extensions that the parser doesn't support.
$definitions = array_filter($manager
->getDefinitions(FALSE), function ($definition) use ($extensionInterfaces) {
$supported = FALSE;
foreach ($extensionInterfaces as $interface) {
if (is_subclass_of($definition
->getClass(), $interface)) {
$supported = TRUE;
break;
}
}
return $supported;
});
// Process passed configurations with known extension definitions.
$configurations = $parser
->config()
->get('extensions') ?: [];
foreach ($configurations as $key => &$configuration) {
$originalKey = $key;
// Ensure the plugin key is set in the configuration.
if (isset($definitions[$key])) {
$configuration[$this->pluginKey] = $key;
continue;
}
// Configuration defined a plugin key, use it.
$key = isset($configuration[$this->pluginKey]) ? $configuration[$this->pluginKey] : NULL;
if (isset($key)) {
$configurations[$key] = $configuration;
}
// Remove unknown configurations.
if ($key !== $originalKey) {
unset($configurations[$originalKey]);
}
}
// Ensure required dependencies are enabled.
// Note: property is prefixed with an underscore to denote it as internal.
// @see \Drupal\markdown\PluginManager\ExtensionManager::alterDefinitions
// @todo Figure out a better way to handle this.
foreach ($definitions as $pluginId => $definition) {
if (!empty($definition['_requiredBy'])) {
foreach ($definition['_requiredBy'] as $dependent) {
// Ensure dependent is a string.
$dependent = (string) $dependent;
if (isset($configurations[$dependent]) && (!isset($configurations[$dependent]['enabled']) || !empty($configurations[$dependent]['enabled']))) {
if (!isset($configurations[$pluginId])) {
$configurations[$pluginId] = [
'id' => $pluginId,
];
}
$configurations[$pluginId]['enabled'] = TRUE;
break;
}
}
}
}
// Fill in missing definitions.
$pluginIds = array_keys($definitions);
$configurations += array_combine($pluginIds, array_map(function ($pluginId) {
return [
$this->pluginKey => $pluginId,
];
}, $pluginIds));
// Sort configurations by using the keys of the already sorted definitions.
$configurations = array_replace(array_flip(array_keys(array_intersect_key($definitions, $configurations))), $configurations);
parent::__construct($manager, $configurations);
}
/**
* {@inheritdoc}
*/
public function addInstanceId($id, $configuration = NULL) {
// Ensure instance identifier is a string.
parent::addInstanceId((string) $id, $configuration);
}
/**
* {@inheritdoc}
*/
public function &get($instance_id) {
// Ensure instance identifier is a string.
return parent::get((string) $instance_id);
}
/**
* {@inheritdoc}
*/
public function has($instance_id) {
// Ensure instance identifier is a string.
return parent::has((string) $instance_id);
}
/**
* {@inheritdoc}
*/
protected function initializePlugin($instance_id) {
// Ensure instance identifier is a string.
$instance_id = (string) $instance_id;
parent::initializePlugin($instance_id);
// Associate the parser with the extension.
$extension = $this
->get($instance_id);
if ($extension instanceof ParserAwareInterface) {
$extension
->setParser($this->parser);
}
}
/**
* {@inheritdoc}
*/
public function remove($instance_id) {
// Ensure instance identifier is a string.
parent::remove((string) $instance_id);
}
/**
* {@inheritdoc}
*/
public function removeInstanceId($instance_id) {
// Ensure instance identifier is a string.
parent::removeInstanceId((string) $instance_id);
}
/**
* {@inheritdoc}
*/
public function set($instance_id, $value) {
// Ensure instance identifier is a string.
parent::set((string) $instance_id, $value);
}
/**
* {@inheritdoc}
*/
public function sort() {
// Intentionally do nothing, it's already sorted.
return $this;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DefaultLazyPluginCollection:: |
protected | property | The initial configuration for each plugin in the collection. | |
DefaultLazyPluginCollection:: |
protected | property | The manager used to instantiate the plugins. | |
DefaultLazyPluginCollection:: |
protected | property | The original order of the instances. | |
DefaultLazyPluginCollection:: |
protected | property | The key within the plugin configuration that contains the plugin ID. | 3 |
DefaultLazyPluginCollection:: |
public | function |
Gets the current configuration of all plugins in this collection. Overrides LazyPluginCollection:: |
2 |
DefaultLazyPluginCollection:: |
public | function |
Sets the configuration for all plugins in this collection. Overrides LazyPluginCollection:: |
|
DefaultLazyPluginCollection:: |
public | function | Updates the configuration for a plugin instance. | |
DefaultLazyPluginCollection:: |
public | function | Provides uasort() callback to sort plugins. | 2 |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
ExtensionCollection:: |
protected | property | The Markdown Parser instance this extension collection belongs to. | |
ExtensionCollection:: |
public | function |
Adds an instance ID to the available instance IDs. Overrides DefaultLazyPluginCollection:: |
|
ExtensionCollection:: |
public | function |
Gets a plugin instance, initializing it if necessary. Overrides LazyPluginCollection:: |
|
ExtensionCollection:: |
public | function |
Determines if a plugin instance exists. Overrides LazyPluginCollection:: |
|
ExtensionCollection:: |
protected | function |
Initializes and stores a plugin. Overrides DefaultLazyPluginCollection:: |
|
ExtensionCollection:: |
public | function |
Removes an initialized plugin. Overrides LazyPluginCollection:: |
|
ExtensionCollection:: |
public | function |
Removes an instance ID. Overrides DefaultLazyPluginCollection:: |
|
ExtensionCollection:: |
public | function |
Stores an initialized plugin. Overrides LazyPluginCollection:: |
|
ExtensionCollection:: |
public | function |
Sorts all plugin instances in this collection. Overrides DefaultLazyPluginCollection:: |
|
ExtensionCollection:: |
public | function |
ExtensionCollection constructor. Overrides DefaultLazyPluginCollection:: |
|
LazyPluginCollection:: |
protected | property | Stores the IDs of all potential plugin instances. | |
LazyPluginCollection:: |
protected | property | Stores all instantiated plugins. | |
LazyPluginCollection:: |
public | function | Clears all instantiated plugins. | |
LazyPluginCollection:: |
public | function | ||
LazyPluginCollection:: |
public | function | Gets all instance IDs. | |
LazyPluginCollection:: |
public | function |