All notable changes to this project will be documented in this file. Updates should follow the Keep a CHANGELOG principles.
textarea elements not being treated as a type 1 HTML block (like script, style, or pre)UrlEncoder utility (#509) or the CursorAttributesExtension based on https://github.com/webuni/commonmark-attributes-extension (#474)FootnoteExtension based on https://github.com/rezozero/commonmark-ext-footnotes (#474)MentionExtension to replace InlineMentionParser with more flexibility and customizationTableOfContents nodes anywhere in a document (given by a placeholder)Node objectsrel attributes set via the ExternalLink extension (#476)heading_permalink/slug_normalizer configuration option to allow custom slug generation (#460)heading_permalink/symbol configuration option to replace the now deprecated heading_permalink/inner_contents configuration option (#505)SlugNormalizer and TextNormalizer classes to make normalization reusable by extensions (#485)TableOfContentsGeneratorTableOfContentsGeneratorInterfaceTableOfContentsPlaceholderTableOfContentsPlaceholderParserTableOfContentsPlaceholderRendererTableOfContents class into a new Node sub-namespace (with backward-compatibility)Reference, only the ReferenceMapCommonMarkConverter::VERSION constant (#496)League\CommonMark\Extension\Autolink\InlineMentionParser (use League\CommonMark\Extension\Mention\MentionParser instead)League\CommonMark\Extension\HeadingPermalink\Slug (use the classes under League\CommonMark\Normalizer instead)League\CommonMark\Extension\TableOfContents\TableOfContents (use the one in the new Node sub-namespace instead)STYLE_ and NORMALIZE_ constants in TableOfContentsBuilder (use the ones in TableOfContentsGenerator instead)\League\CommonMark\Extension\HeadingPermalink\HeadingPermalinkRenderer::DEFAULT_INNER_CONTENTS constant (#505)heading_permalink/inner_contents configuration option in the HeadingPermalink extension (use the new heading_permalink/symbol configuration option instead) (#505)MarkdownConverterInterface as a long-term replacement for ConverterInterface (#439)DocumentPreParsedEvent event (#427, #359, #399)ListBlock::TYPE_BULLET constant as a replacement for ListBlock::TYPE_UNORDEREDMarkdownInput class and MarkdownInputInterface to handle pre-parsing and allow listeners to replace Markdown contentsListBlock constants now use fully-lowercased values instead of titlecased valuesStaggeredDelimiterProcessor returning from a void functionConverter class has been deprecated; use CommonMarkConverter instead (#438, #439)ConverterInterface has been deprecated; use MarkdownConverterInterface instead (#438, #439)bin/commonmark script has been deprecatedArrayCollection have been deprecated:
add()set()get()remove()isEmpty()contains()indexOf()containsKey()replaceWith()removeGaps()ListBlock::TYPE_UNORDERED constant has been deprecated, use ListBlock::TYPE_BULLET instead[$instance, 'method'] callable syntax (#440)EnvironmentAwareInterface or ConfigurationAwareInterface (#423)Environment::createCommonMarkEnvironment() and Environment::createGFMEnvironment()unordered_list_markers configuration option (#408, #411)This release contains the same changes as 1.1.3:
Html5EntityDecoder class (#387)Html5Entities class - use Html5EntityDecoder instead (#387)No changes were made since 1.0.0-rc1.
ReferenceMapInterface from the ReferenceMap classReferenceMapInterface parameter to the Document constructorReferenceMap with ReferenceMapInterfaceReferenceMap::addReference() no longer returns $this"0" wouldn't be rendered (#376)DocumentProcessorInterface functionality in favor of event dispatching (#373)Delimiter class final and extracted a new DelimiterInterface
Delimiter methods:
getOrigDelims() renamed to getOriginalLength()getNumDelims() renamed to getLength()setNumDelims() renamed to setLength()DelimiterStackReferenceMapReferenceParserReferenceParser into the Reference sub-namespaceDelimiter methods:
setCanOpen()setCanClose()setChar()setIndex()setInlineNode()Delimiter (setter methods now have no return values)DelimiterProcessorInterface::process() will accept any type of AbstractStringContainer now, not just Text nodesDelimiter constructor, getInlineNode(), and setInlineNode() no longer accept generic Node elements - only AbstractStringContainerssafe option (use html_input and allow_unsafe_links options instead)RegexHelper constantsDocParser::getEnvironment() (you should obtain it some other way)AbstractInlineContainer (use AbstractInline instead and make isContainer() return true)addDelimiterProcessor() added to ConfigurableEnvironmentInterface and EnvironmentAdjacentTextMerger::mergeTextNodesBetweenExclusive()CommonMarkConveter::getEnvironment()Configuration::set()DocParserInterface created from DocParserConfigurationInterface created from ConfigurationReferenceInterface created from ReferenceConfiguration class:
getConfig() renamed to get()mergeConfig() renamed to merge()setConfig() renamed to replace()ConfigurationAwareInterface::setConfiguration() to accept the new ConfigurationInterface instead of the concrete classAdjoiningTextCollapser class to AdjacentTextMerger
collapseTextNodes() method with the new mergeChildNodes() methodfinal:
ConfigurationDocParserHtmlRendererInlineParserEngineNodeWalkerReferenceprivate:
DelimiterStack::findEarliest()protected methods in InlineParserEngine@internalElementRendererInterface now requires a public renderInline() method; added this to HtmlRendererInlineParserEngine::parse() to require an AbstractStringContainerBlock instead of the generic Node classCommonmarkConverter::VERSION constantConverter constructor now requires an instance of DocParserInterface instead of the concrete DocParserEmphasis, Strong, and AbstractWebResource to directly extend AbstractInline instead of the (now-deprecated) intermediary AbstractInlineContainer classNodes without parentsNodeWalkerEvent not requiring a Node via its constructorReference::normalizeReference() improperly converting to uppercase instead of performing proper Unicode case-foldingenable_strong is set to false (it now works identically to enable_em)DocParser::getEnvironment() (you should obtain it some other way)AbstractInlineContainer (use AbstractInline instead and make isContainer() return true)addInlineProcessor() from ConfigurableEnvironmentInterface and EnvironmentgetInlineProcessors() from EnvironmentInterface and EnvironmentEmphasisProcessorInlineProcessorInterfaceEmphasisParser now that we have proper delimiter supportgetEncoding() from ContextInterfacegetEncoding(), setEncoding(), and $encoding from ContextgetEncoding() and the second $encoding constructor param from CursorDelimiterStack::getTop() (no replacement)DelimiterStack::iterateByCharacters() (use the new processDelimiters() method instead)DelimiterStack::findMatchingOpener() method