Skip to content

Releases: thephpleague/commonmark

1.6.5

26 Jun 11:58
1.6.5
44ffd8d
Compare
Choose a tag to compare

Changed

  • Simplified checks for thematic breaks

Fixed

  • Fixed ExternalLinkProcessor not handling autolinks by adjusting its priority to -50 (#681)

2.0.0-beta1

20 Jun 19:32
2.0.0-beta1
8cde9a2
Compare
Choose a tag to compare
2.0.0-beta1 Pre-release
Pre-release

See https://commonmark.thephpleague.com/2.0/upgrading/ for detailed information on upgrading to version 2.0.

Added

  • Added three new extensions:
  • Added new XmlRenderer to simplify AST debugging (see documentation) (#431)
  • Added the ability to configure disallowed raw HTML tags (#507)
  • Added the ability for Mentions to use multiple characters for their symbol (#514, #550)
  • Added the ability to delegate event dispatching to PSR-14 compliant event dispatcher libraries
  • Added new configuration options:
    • Added heading_permalink/min_heading_level and heading_permalink/max_heading_level options to control which headings get permalinks (#519)
    • Added heading_permalink/fragment_prefix to allow customizing the URL fragment prefix (#602)
    • Added footnote/backref_symbol option for customizing backreference link appearance (#522)
    • Added slug_normalizer/max_length option to control the maximum length of generated URL slugs
    • Added slug_normalizer/unique option to control whether unique slugs should be generated per-document or per-environment
  • Added purity markers throughout the codebase (verified with Psalm)
  • Added Query class to simplify Node traversal when looking to take action on certain Nodes
  • Added new HtmlFilter and StringContainerHelper utility classes
  • Added new AbstractBlockContinueParser class to simplify the creation of custom block parsers
  • Added several new classes and interfaces:
    • BlockContinue
    • BlockContinueParserInterface
    • BlockContinueParserWithInlinesInterface
    • BlockStart
    • BlockStartParserInterface
    • ChildNodeRendererInterface
    • ConfigurableExtensionInterface
    • CursorState
    • DashParser (extracted from PunctuationParser)
    • DelimiterParser
    • DocumentBlockParser
    • DocumentPreRenderEvent
    • DocumentRenderedEvent
    • EllipsesParser (extracted from PunctuationParser)
    • ExpressionInterface
    • FallbackNodeXmlRenderer
    • InlineParserEngineInterface
    • InlineParserMatch
    • MarkdownParserState
    • MarkdownParserStateInterface
    • MarkdownRendererInterface
    • Query
    • RawMarkupContainerInterface
    • ReferenceableInterface
    • RenderedContent
    • RenderedContentInterface
    • ReplaceUnpairedQuotesListener
    • SpecReader
    • TableOfContentsRenderer
    • UniqueSlugNormalizer
    • UniqueSlugNormalizerInterface
    • XmlRenderer
    • XmlNodeRendererInterface
  • Added several new methods:
    • Cursor::getCurrentCharacter()
    • Environment::createDefaultConfiguration()
    • Environment::setEventDispatcher()
    • EnvironmentInterface::getExtensions()
    • EnvironmentInterface::getInlineParsers()
    • EnvironmentInterface::getSlugNormalizer()
    • FencedCode::setInfo()
    • Heading::setLevel()
    • HtmlRenderer::renderDocument()
    • InlineParserContext::getFullMatch()
    • InlineParserContext::getFullMatchLength()
    • InlineParserContext::getMatches()
    • InlineParserContext::getSubMatches()
    • LinkParserHelper::parsePartialLinkLabel()
    • LinkParserHelper::parsePartialLinkTitle()
    • Node::assertInstanceOf()
    • RegexHelper::isLetter()
    • StringContainerInterface::setLiteral()
    • TableCell::getType()
    • TableCell::setType()
    • TableCell::getAlign()
    • TableCell::setAlign()

Changed

  • Changed the converter return type
    • CommonMarkConverter::convertToHtml() now returns an instance of RenderedContentInterface. This can be cast to a string for backward compatibility with 1.x.
  • Table of Contents items are no longer wrapped with <p> tags (#613)
  • Heading Permalinks now link to element IDs instead of using name attributes (#602)
  • Heading Permalink IDs and URL fragments now have a content prefix by default (#602)
  • Changes to configuration options:
    • enable_em has been renamed to commonmark/enable_em
    • enable_strong has been renamed to commonmark/enable_strong
    • use_asterisk has been renamed to commonmark/use_asterisk
    • use_underscore has been renamed to commonmark/use_underscore
    • unordered_list_markers has been renamed to commonmark/unordered_list_markers
    • mentions/*/symbol has been renamed to mentions/*/prefix
    • mentions/*/regex has been renamed to mentions/*/pattern and requires partial regular expressions (without delimiters or flags)
    • max_nesting_level now defaults to PHP_INT_MAX and no longer supports floats
    • heading_permalink/slug_normalizer has been renamed to slug_normalizer/instance
  • Event dispatching is now fully PSR-14 compliant
  • Moved and renamed several classes - see the full list here
  • The HeadingPermalinkExtension and FootnoteExtension were modified to ensure they never produce a slug which conflicts with slugs created by the other extension
  • SlugNormalizer::normalizer() now supports optional prefixes and max length options passed in via the $context argument
  • The AbstractBlock::$data and AbstractInline::$data arrays were replaced with a Data array-like object on the base Node class
  • Implemented a new approach to block parsing. This was a massive change, so here are the highlights:
    • Functionality previously found in block parsers and node elements has moved to block parser factories and block parsers, respectively (more details)
    • ConfigurableEnvironmentInterface::addBlockParser() is now EnvironmentBuilderInterface::addBlockParserFactory()
    • ReferenceParser was re-implemented and works completely different than before
    • The paragraph parser no longer needs to be added manually to the environment
  • Implemented a new approach to inline parsing where parsers can now specify longer strings or regular expressions they want to parse (instead of just single characters):
    • InlineParserInterface::getCharacters() is now getMatchDefinition() and returns an instance of InlineParserMatch
    • InlineParserContext::__construct() now requires the contents to be provided as a Cursor instead of a string
  • Implemented delimiter parsing as a special type of inline parser (via the new DelimiterParser class)
  • Changed block and inline rendering to use common methods and interfaces
    • BlockRendererInterface and InlineRendererInterface were replaced by NodeRendererInterface with slightly different parameters. All core renderers now implement this interface.
    • ConfigurableEnvironmentInterface::addBlockRenderer() and addInlineRenderer() were combined into EnvironmentBuilderInterface::addRenderer()
    • EnvironmentInterface::getBlockRenderersForClass() and getInlineRenderersForClass() are now just getRenderersForClass()
  • Completely refactored the Configuration implementation
    • All configuration-specific classes have been moved into a new league/config package with a new namespace
    • Configuration objects must now be configured with a schema and all options must match that schema - arbitrary keys are no longer permitted
    • Configuration::__construct() no longer accepts the default configuration values - use Configuration::merge() instead
    • ConfigurationInterface now only contains a get(string $key); this method no longer allows arbitrary default values to be returned if the option is missing
    • ConfigurableEnvironmentInterface was renamed to EnvironmentBuilderInterface
    • ExtensionInterface::register() now requires an EnvironmentBuilderInterface param instead of ConfigurableEnvironmentInterface
  • Added missing return types to virtually every class and interface method
  • Re-implemented the GFM Autolink extension using the new inline parser approach instead of document processors
    • EmailAutolinkProcessor is now EmailAutolinkParser
    • UrlAutolinkProcessor is now UrlAutolinkParser
  • HtmlElement can now properly handle array (i.e. class) and boolean (i.e. checked) attribute values
  • HtmlElement automatically flattens any attributes with array values into space-separated strings, removing duplicate entries
  • Combined separate classes/interfaces into one:
    • DisallowedRawHtmlRenderer replaces DisallowedRawHtmlBlockRenderer and DisallowedRawHtmlInlineRenderer
    • NodeRendererInterface replaces BlockRendererInterface and InlineRendererInterface
  • Renamed the following methods:
    • Environment and ConfigurableEnvironmentInterface:
      • addBlockParser() is now addBlockStartParser()
    • ReferenceMap and ReferenceMapInterface:
      • addReference() is now add()
      • getReference() is now get()
      • listReferences() is now getIterator()
    • Various node (block/inline) classes:
      • getContent() is now getLiteral()
      • setContent() is now setLiteral()
  • Moved and renamed the following constants:
    • EnvironmentInterface::HTML_INPUT_ALLOW is now HtmlFilter::ALLOW
    • EnvironmentInterface::HTML_INPUT_ESCAPE is now HtmlFilter::ESCAPE
    • EnvironmentInterface::HTML_INPUT_STRIP is now HtmlFilter::STRIP
    • TableCell::TYPE_HEAD is now TableCell::TYPE_HEADER
    • TableCell::TYPE_BODY i...
Read more

1.6.4

19 Jun 20:09
1.6.4
c3c8b72
Compare
Choose a tag to compare

Changed

  • Optimized attribute parsing to avoid inspecting every space character (30% performance boost)

1.6.3

19 Jun 15:04
1.6.3
9b8cd7e
Compare
Choose a tag to compare

Fixed

  • Fixed incorrect parsing of tilde-fenced code blocks with leading spaces (#676)

1.6.2

12 May 11:41
1.6.2
7d70d2f
Compare
Choose a tag to compare

Fixed

  • Fixed incorrect error level for deprecation notices

1.6.1

08 May 16:08
1.6.1
2651c49
Compare
Choose a tag to compare

Fixed

  • Fixed HeadingPermalinkProcessor skipping text contents from certain nodes (#615)

1.6.0

01 May 19:03
1.6.0
19a9673
Compare
Choose a tag to compare

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 (currently enable_em in 1.x)
    • commonmark/enable_strong (currently enable_strong in 1.x)
    • commonmark/use_asterisk (currently use_asterisk in 1.x)
    • commonmark/use_underscore (currently use_underscore in 1.x)
    • commonmark/unordered_list_markers (currently unordered_list_markers in 1.x)
    • mentions/*/prefix (currently mentions/*/symbol in 1.x)
    • mentions/*/pattern (currently mentions/*/regex in 1.x)
    • max_nesting_level (currently supports int and float values in 1.x; will only support int in 2.0)
  • Added new MarkdownConverter class for creating converters with custom environments; this replaces the previously-deprecated Converter class
  • Added new RegexHelper::matchFirst() method
  • Added new Configuration::exists() method

Changed

  • The max_nesting_level option now defaults to PHP_INT_MAX instead of INF

Deprecated

  • Deprecated the configuration options shown above
  • Deprecated the ability to pass a custom Environment into the constructors of CommonMarkConverter and GithubFlavoredMarkdownConverter; use MarkdownConverter instead
  • Deprecated ConfigurableEnvironmentInterface::setConfig(); use mergeConfig() instead
  • Deprecated calling ConfigurableEnvironmentInterface::mergeConfig() without any parameters
  • Deprecated calling Configuration::get() and EnvironmentInterface::getConfig() without any parameters
  • Deprecated calling Configuration::set() without the second $value parameter
  • Deprecated RegexHelper::matchAll(); use RegexHelper::matchFirst() instead
  • Deprecated extending the ArrayCollection class; will be marked final in 2.0

Fixed

  • Fixed missing check for empty arrays being passed into the unordered_list_markers configuration option

1.5.8

28 Mar 18:52
08fa59b
Compare
Choose a tag to compare

Fixed

  • Fixed Table of Contents not rendering heading inlines properly (#587, #588)
  • Fixed parsing of tables within list items (#590)

1.5.7

31 Oct 13:50
11df9b3
Compare
Choose a tag to compare

Fixed

  • Fixed mentions not being parsed when appearing after non-word characters (#582)

1.5.6

17 Oct 21:35
a56e91e
Compare
Choose a tag to compare

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)