Changelog
All notable changes made in 1.x releases are shown below. See the full list of releases for the complete changelog.
1.6.7 - 2022-01-13
Changed
- Added
ReturnTypeWillChangeattribute to prevent PHP 8.1 deprecation warnings (#785) - Coerced punctuation counts to integers to ensure floats are never used
1.6.6 - 2021-07-17
Fixed
- Fixed Mentions inside of links creating nested links against the spec’s rules (#688)
1.6.5 - 2021-06-26
Changed
- Simplified checks for thematic breaks
Fixed
- Fixed ExternalLinkProcessor not handling autolinks by adjusting its priority to -50 (#681)
1.6.4 - 2021-06-19
Changed
- Optimized attribute parsing to avoid inspecting every space character (30% performance boost)
1.6.3 - 2021-06-19
Fixed
- Fixed incorrect parsing of tilde-fenced code blocks with leading spaces (#676)
1.6.2 - 2021-05-12
Fixed
- Fixed incorrect error level for deprecation notices
1.6.1 - 2021-05-08
Fixed
- Fixed
HeadingPermalinkProcessorskipping text contents from certain nodes (#615)
1.6.0 - 2021-05-01
Please see https://commonmark.thephpleague.com/1.6/upgrading/ for important information about this release and the upcoming 2.0.0 version.
Added
- Added forward-compatibility for configuration options which will be changing in 2.0:
commonmark/enable_em(currentlyenable_emin 1.x)commonmark/enable_strong(currentlyenable_strongin 1.x)commonmark/use_asterisk(currentlyuse_asteriskin 1.x)commonmark/use_underscore(currentlyuse_underscorein 1.x)commonmark/unordered_list_markers(currentlyunordered_list_markersin 1.x)mentions/*/prefix(currentlymentions/*/symbolin 1.x)mentions/*/pattern(currentlymentions/*/regexin 1.x)max_nesting_level(currently supportsintandfloatvalues in 1.x; will only supportintin 2.0)
- Added new
MarkdownConverterclass for creating converters with custom environments; this replaces the previously-deprecatedConverterclass - Added new
RegexHelper::matchFirst()method - Added new
Configuration::exists()method
Changed
- The
max_nesting_leveloption now defaults toPHP_INT_MAXinstead ofINF
Deprecated
- Deprecated the configuration options shown above
- Deprecated the ability to pass a custom
Environmentinto the constructors ofCommonMarkConverterandGithubFlavoredMarkdownConverter; useMarkdownConverterinstead - Deprecated
ConfigurableEnvironmentInterface::setConfig(); usemergeConfig()instead - Deprecated calling
ConfigurableEnvironmentInterface::mergeConfig()without any parameters - Deprecated calling
Configuration::get()andEnvironmentInterface::getConfig()without any parameters - Deprecated calling
Configuration::set()without the second$valueparameter - Deprecated
RegexHelper::matchAll(); useRegexHelper::matchFirst()instead - Deprecated extending the
ArrayCollectionclass; will be markedfinalin 2.0
Fixed
- Fixed missing check for empty arrays being passed into the
unordered_list_markersconfiguration option
1.5.8 - 2021-03-28
Fixed
- Fixed Table of Contents not rendering heading inlines properly (#587, #588)
- Fixed parsing of tables within list items (#590)
1.5.7 - 2020-10-31
Fixed
- Fixed mentions not being parsed when appearing after non-word characters (#582)
1.5.6 - 2020-10-17
Changed
- Blocks added outside of the parsing context now have their start/end line numbers defaulted to 0 to avoid type errors (#579)
Fixed
- Fixed replacement blocks not inheriting the start line number of the container they’re replacing (#579)
- Fixed Table of Contents blocks not having correct start/end line numbers (#579)
1.5.5 - 2020-09-13
Changed
- Bumped CommonMark spec compliance to 0.28.2
Fixed
- Fixed
textareaelements not being treated as a type 1 HTML block (likescript,style, orpre) - Fixed autolink processor not handling other unmatched trailing parentheses
1.5.4 - 2020-08-18
Fixed
- Fixed footnote ID configuration not taking effect (#524, #530)
- Fixed heading permalink slugs not being unique (#531, #534)
1.5.3 - 2020-07-19
Fixed
- Fixed regression of multi-byte inline parser characters not being matched
1.5.2 - 2020-07-19
Changed
- Significantly improved performance of the inline parser regex
Fixed
- Fixed parent class lookups for non-existent classes on PHP 8 (#517)
1.5.1 - 2020-06-27
Fixed
- Fixed UTF-8 encoding not being checked in the
UrlEncoderutility (#509) or theCursor
1.5.0 - 2020-06-21
Added
- Added new
AttributesExtensionbased on https://github.com/webuni/commonmark-attributes-extension (#474) - Added new
FootnoteExtensionbased on https://github.com/rezozero/commonmark-ext-footnotes (#474) - Added new
MentionExtensionto replaceInlineMentionParserwith more flexibility and customization - Added the ability to render
TableOfContentsnodes anywhere in a document (given by a placeholder) - Added the ability to properly clone
Nodeobjects - Added options to customize the value of
relattributes set via theExternalLinkextension (#476) - Added a new
heading_permalink/slug_normalizerconfiguration option to allow custom slug generation (#460) - Added a new
heading_permalink/symbolconfiguration option to replace the now deprecatedheading_permalink/inner_contentsconfiguration option (#505) - Added
SlugNormalizerandTextNormalizerclasses to make normalization reusable by extensions (#485) - Added new classes:
TableOfContentsGeneratorTableOfContentsGeneratorInterfaceTableOfContentsPlaceholderTableOfContentsPlaceholderParserTableOfContentsPlaceholderRenderer
Changed
- “Moved” the
TableOfContentsclass into a newNodesub-namespace (with backward-compatibility) - Reference labels are now generated and stored in lower-case instead of upper-case
- Reference labels are no longer normalized inside the
Reference, only theReferenceMap
Fixed
- Fixed reference label case folding polyfill not being consistent between different PHP versions
Deprecated
- Deprecated the
CommonMarkConverter::VERSIONconstant (#496) - Deprecated
League\CommonMark\Extension\Autolink\InlineMentionParser(useLeague\CommonMark\Extension\Mention\MentionParserinstead) - Deprecated everything under
League\CommonMark\Extension\HeadingPermalink\Slug(use the classes underLeague\CommonMark\Normalizerinstead) - Deprecated
League\CommonMark\Extension\TableOfContents\TableOfContents(use the one in the newNodesub-namespace instead) - Deprecated the
STYLE_andNORMALIZE_constants inTableOfContentsBuilder(use the ones inTableOfContentsGeneratorinstead) - Deprecated the
\League\CommonMark\Extension\HeadingPermalink\HeadingPermalinkRenderer::DEFAULT_INNER_CONTENTSconstant (#505) - Deprecated the
heading_permalink/inner_contentsconfiguration option in theHeadingPermalinkextension (use the newheading_permalink/symbolconfiguration option instead) (#505)
1.4.3 - 2020-05-04
Fixed
- Fixed certain Unicode letters, numbers, and marks not being preserved when generating URL slugs (#467)
1.4.2 - 2020-04-24
Fixed
- Fixed inline code blocks not be included within heading permalinks (#457)
1.4.1 - 2020-04-20
Fixed
- Fixed BC break caused by ConverterInterface alias not being used by some DI containers (#454)
1.4.0 - 2020-04-18
Added
- Added new Heading Permalink extension (#420)
- Added new Table of Contents extension (#441)
- Added new
MarkdownConverterInterfaceas a long-term replacement forConverterInterface(#439) - Added new
DocumentPreParsedEventevent (#427, #359, #399) - Added new
ListBlock::TYPE_BULLETconstant as a replacement forListBlock::TYPE_UNORDERED - Added new
MarkdownInputclass andMarkdownInputInterfaceto handle pre-parsing and allow listeners to replace Markdown contents
Changed
- Block & inline renderers will now render child classes automatically (#222, #209)
- The
ListBlockconstants now use fully-lowercased values instead of titlecased values - Significantly improved typing
Fixed
- Fixed loose comparison when checking for table alignment
- Fixed
StaggeredDelimiterProcessorreturning from avoidfunction
Deprecated
- The
Converterclass has been deprecated; useCommonMarkConverterinstead (#438, #439) - The
ConverterInterfacehas been deprecated; useMarkdownConverterInterfaceinstead (#438, #439) - The
bin/commonmarkscript has been deprecated - The following methods of
ArrayCollectionhave been deprecated:add()set()get()remove()isEmpty()contains()indexOf()containsKey()replaceWith()removeGaps()
- The
ListBlock::TYPE_UNORDEREDconstant has been deprecated, useListBlock::TYPE_BULLETinstead
1.3.4 - 2020-04-13
Fixed
- Fixed configuration/environment not being injected into event listeners when adding them via
[$instance, 'method']callable syntax (#440)
1.3.3 - 2020-04-05
Fixed
- Fixed event listeners not having the environment or configuration injected if they implemented the
EnvironmentAwareInterfaceorConfigurationAwareInterface(#423)
1.3.2 - 2020-03-25
Fixed
- Optimized URL normalization in cases where URLs don’t contain special characters (#417, #418)
1.3.1 - 2020-02-28
Fixed
- Fixed return types of
Environment::createCommonMarkEnvironment()andEnvironment::createGFMEnvironment()
1.3.0 - 2020-02-09
ℹ️ Do you use league/commonmark-ext* packages? Those features are now included directly in this library! See #409 for details on making the switch.
Added
- Added (optional) full GFM support! 🎉🎉🎉 (#409)
- Added check to ensure Markdown input is valid UTF-8 (#401, #405)
- Added new
unordered_list_markersconfiguration option (#408, #411)
Changed
- Introduced several micro-optimizations for a 5-10% performance boost
1.2.2 - 2020-01-16
This release contains the same changes as 1.1.3:
Fixed
- Fixed link parsing edge case (#403)
1.1.3 - 2020-01-16
Fixed
- Fixed link parsing edge case (#403)
1.2.1 - 2020-01-15
Changed
- Introduced several micro-optimizations, reducing the parse time by 8%
1.2.0 - 2020-01-09
Changed
- Removed URL decoding step before encoding (more performant and better matches the JS library)
- Removed redundant token from HTML tag regex
1.1.2 - 2019-12-10
Fixed
- Fixed URL normalization not handling non-UTF-8 sequences properly (#395, #396)
1.1.1 - 2019-11-11
Fixed
- Fixed handling of link destinations with unbalanced unescaped parens
- Fixed adding delimiters to stack which can neither open nor close a run
1.1.0 - 2019-10-31
Added
- Added a new
Html5EntityDecoderclass (#387)
Changed
- Improved performance by 10% (#389)
- Made entity decoding less memory-intensive (#386, #387)
Fixed
- Fixed PHP 7.4 compatibility issues
Deprecated
- Deprecated the
Html5Entitiesclass - useHtml5EntityDecoderinstead (#387)
1.0.0 - 2019-06-29
First stable release! 🎉
No code changes have been introduced since 1.0.0-rc1
1.0.0-rc1 - 2019-06-20
Added
- Extracted a
ReferenceMapInterfacefrom theReferenceMapclass - Added optional
ReferenceMapInterfaceparameter to theDocumentconstructor
Changed
- Replaced all references to
ReferenceMapwithReferenceMapInterface ReferenceMap::addReference()no longer returns$this
Fixed
- Fixed bug where elements with content of
"0"wouldn’t be rendered (#376)
1.0.0-beta4 - 2019-06-05
Added
- Added event dispatcher functionality (#359, #372)
Removed
- Removed
DocumentProcessorInterfacefunctionality in favor of event dispatching (#373)
1.0.0-beta3 - 2019-05-28
Changed
- Made the
Delimiterclass final and extracted a newDelimiterInterface- Modified most external usages to use this new interface
- Renamed three
Delimitermethods:getOrigDelims()renamed togetOriginalLength()getNumDelims()renamed togetLength()setNumDelims()renamed tosetLength()
- Made additional classes final:
DelimiterStackReferenceMapReferenceParser
- Moved
ReferenceParserinto theReferencesub-namespace
Removed
- Removed unused
Delimitermethods:setCanOpen()setCanClose()setChar()setIndex()setInlineNode()
- Removed fluent interface from
Delimiter(setter methods now have no return values)
1.0.0-beta2 - 2019-05-27
This beta release fixes a couple of items that were not addressed in the previous beta.
Changed
DelimiterProcessorInterface::process()will accept any type ofAbstractStringContainernow, not justTextnodes- The
Delimiterconstructor,getInlineNode(), andsetInlineNode()no longer accept genericNodeelements - onlyAbstractStringContainers
Removed
- Removed all deprecated functionality:
- The
safeoption (usehtml_inputandallow_unsafe_linksoptions instead) - All deprecated
RegexHelperconstants DocParser::getEnvironment()(you should obtain it some other way)AbstractInlineContainer(useAbstractInlineinstead and makeisContainer()returntrue)
- The
1.0.0-beta1 - 2019-05-26
See the upgrading guide for additional information.
Added
- Added proper support for delimiters, including custom delimiters
addDelimiterProcessor()added toConfigurableEnvironmentInterfaceandEnvironment
- Basic delimiters no longer need custom parsers - they’ll be parsed automatically
- Added new methods:
AdjacentTextMerger::mergeTextNodesBetweenExclusive()CommonMarkConveter::getEnvironment()Configuration::set()
- Extracted some new interfaces from base classes:
DocParserInterfacecreated fromDocParserConfigurationInterfacecreated fromConfigurationReferenceInterfacecreated fromReference
Changed
- Renamed several methods of the
Configurationclass:getConfig()renamed toget()mergeConfig()renamed tomerge()setConfig()renamed toreplace()
- Changed
ConfigurationAwareInterface::setConfiguration()to accept the newConfigurationInterfaceinstead of the concrete class - Renamed the
AdjoiningTextCollapserclass toAdjacentTextMerger- Replaced its
collapseTextNodes()method with the newmergeChildNodes()method
- Replaced its
- Made several classes
final:ConfigurationDocParserHtmlRendererInlineParserEngineNodeWalkerReference- All of the block/inline parsers and renderers
- Reduced visibility of several internal methods to
private:DelimiterStack::findEarliest()- All
protectedmethods inInlineParserEngine
- Marked some classes and methods as
@internal ElementRendererInterfacenow requires a publicrenderInline()method; added this toHtmlRenderer- Changed
InlineParserEngine::parse()to require anAbstractStringContainerBlockinstead of the genericNodeclass - Un-deprecated the
CommonmarkConverter::VERSIONconstant - The
Converterconstructor now requires an instance ofDocParserInterfaceinstead of the concreteDocParser - Changed
Emphasis,Strong, andAbstractWebResourceto directly extendAbstractInlineinstead of the (now-deprecated) intermediaryAbstractInlineContainerclass
Fixed
- Fixed null errors when inserting sibling
Nodes without parents - Fixed
NodeWalkerEventnot requiring aNodevia its constructor - Fixed
Reference::normalizeReference()improperly converting to uppercase instead of performing proper Unicode case-folding - Fixed strong emphasis delimiters not being preserved when
enable_strongis set tofalse(it now works identically toenable_em)
Deprecated
- Deprecated
DocParser::getEnvironment()(you should obtain it some other way) - Deprecated
AbstractInlineContainer(useAbstractInlineinstead and makeisContainer()returntrue)
Removed
- Removed inline processor functionality now that we have proper delimiter support:
- Removed
addInlineProcessor()fromConfigurableEnvironmentInterfaceandEnvironment - Removed
getInlineProcessors()fromEnvironmentInterfaceandEnvironment - Removed
EmphasisProcessor - Removed
InlineProcessorInterface
- Removed
- Removed
EmphasisParsernow that we have proper delimiter support - Removed support for non-UTF-8-compatible encodings
- Removed
getEncoding()fromContextInterface - Removed
getEncoding(),setEncoding(), and$encodingfromContext - Removed
getEncoding()and the second$encodingconstructor param fromCursor
- Removed
- Removed now-unused methods
- Removed
DelimiterStack::getTop()(no replacement) - Removed
DelimiterStack::iterateByCharacters()(use the newprocessDelimiters()method instead) - Removed the protected
DelimiterStack::findMatchingOpener()method
- Removed
Older Versions
Please see the full list of releases for the complete changelog.