This is the documentation for the upcoming version 2.0. This is a work in progress

The Environment

The Environment contains all of the parsers, renderers, configurations, etc. that the library uses during the conversion process. You therefore must register all parsers, renderers, etc. with the Environment so that the library is aware of them.

A pre-configured Environment can be obtained like this:


use League\CommonMark\Environment\Environment;

$environment = Environment::createCommonMarkEnvironment();

All of the core renders, parsers, etc. needed to implement the CommonMark spec will be pre-registered and ready to go.

You can customize this default Environment (or even a new, empty one) using any of the methods below (from the ConfigurableEnvironmentInterface interface).



public function mergeConfig(array $config = []);

Merges the given configuration settings into any existing ones.



public function setConfig(array $config = []);

Completely replaces the previous configuration settings with the new $config you provide.



public function addExtension(ExtensionInterface $extension);

Registers the given extension with the environment. This is typically how you’d integrate third-party extensions with this library.



public function addBlockParser(BlockParserInterface $parser, int $priority = 0);

Registers the given BlockParserInterface with the environment with the given priority (a higher number will be executed earlier).

See Block Parsing for details.



public function addInlineParser(InlineParserInterface $parser, int $priority = 0);

Registers the given InlineParserInterface with the environment with the given priority (a higher number will be executed earlier).

See Inline Parsing for details.



public function addDelimiterProcessor(DelimiterProcessorInterface $processor);

Registers the given DelimiterProcessorInterface with the environment.

See Inline Parsing for details.



public function addRenderer(string $blockOrInlineClass, NodeRendererInterface $blockRenderer, int $priority = 0);

Registers a NodeRendererInterface to handle a specific type of AST node ($blockOrInlineClass) with the given priority (a higher number will be executed earlier).

See Rendering for details.



public function addEventListener(string $eventClass, callable $listener, int $priority = 0);

Registers the given event listener with the environment.

See Event Dispatcher for details.


Several of these methods allows you to specify a numeric $priority. In cases where multiple things are registered, the internal engine will attempt to use the higher-priority ones first, falling back to lower priority ones if the first one(s) were unable to handle things.