All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog. This project adheres to Semantic Versioning, with the exception that 0.x versions can break between minor versions.
0.18.1 - 2021-11-29
- Fix tables with leading/trailing header pipes and trailing spaces (#244). This was a regression in 0.16.1 which is now fixed.
0.18.0 - 2021-06-30
- Update to CommonMark spec 0.30:
- Add
textarea
to list of literal HTML block tags. Likescript
,style
, andpre
,textarea
blocks can contain blank lines without the contents being interpreted as commonmark. - Fix case folding for link reference labels in some cases
(e.g.
ẞ
andSS
should match) - Allow lowercase ASCII in HTML declaration
- Don't let type 7 HTML blocks interrupt lazy paragraphs either
- Add
- Preserve the original case for the label of
LinkReferenceDefinition
. Before, we used to store the normalized version (lowercase, collapsed whitespace).
0.17.2 - 2021-05-14
- Pass original instead of normalized label to
InlineParserContext
for lookup (#204). This allows custom contexts to change the lookup logic and have access to the original label content. In case you have a custom implementation ofInlineParserContext
, you might need to adjust it to do normalization.
0.17.1 - 2021-02-03
- Fix emphasis surrounded by non-BMP punctuation/whitespace characters (characters that are longer than one UTF-16 "char"). Note that this is an edge case with rarely used Unicode characters, which a lot of other implementations don't handle correctly.
- Fix tables where the row starts with spaces and then the first
|
- rows that didn't have spaces before were not affected (#199). This bug is present in 0.16.1 and 0.17.0.
0.17.0 - 2021-01-15
- ACTION REQUIRED: Maven groupId has changed from
com.atlassian.commonmark
toorg.commonmark
- To continue getting new versions of commonmark-java, change the Maven coordinates in your dependencies:
- Old:
<groupId>com.atlassian.commonmark</groupId>
- New:
<groupId>org.commonmark</groupId>
0.16.1 - 2020-12-11
- Support for including source spans on block and inline nodes (#1):
- Answer for "Where in the source input (line/column position and length) does this node come from?"
- Useful for things like editors that want to keep the input and rendered output scrolled to the same lines, or start editing on the node that was selected.
- Use
includeSourceSpans
onParser.Builder
to enable, either withIncludeSourceSpans.BLOCKS
orIncludeSourceSpans.BLOCKS_AND_INLINES
- Read data with
Node.getSourceSpans
- Note that enabling this has a small performance impact on parsing (about 10%)
- In order to support source spans (see above), a few of the extension APIs changed. It should only affect users implementing their own extensions. See the Javadoc to see what changed.
- YAML front matter extension: Support dots in key names
0.15.2 - 2020-07-20
- image-attributes extension: Fix unexpected altering of text in case
parsing of attributes fails, e.g.
{NN} text
->{NN text}
, thanks @jk1
0.15.1 - 2020-05-29
- Add text content rendering support for
InsExtension
0.15.0 - 2020-05-21
- Extension for width/height attributes for images, thanks @dohertyfjatl
- Syntax:
![text](/url.png){width=640 height=480}
- Use class
ImageAttributesExtension
in artifactcommonmark-ext-image-attributes
- Syntax:
- Extension for task lists (GitHub-style), thanks @dohertyfjatl
- Syntax:
- [x] task #1 - [ ] task #2
- Use class
TaskListItemsExtension
in artifactcommonmark-ext-task-list-items
- Syntax:
0.14.0 - 2020-01-22
- Add
sanitizeUrls
toHtmlRenderer.Builder
to enable sanitizing URLs of<a>
and<img>
tags. Sanitizing logic can be customized viaurlSanitizer
. Thanks @VandorpeDavid
0.13.1 - 2019-11-25
- Fix potential
StackOverflowError
for regular expressions used in the inline parser (e.g. when parsing long HTML), thanks @lehvolk
0.13.0 - 2019-07-15
LinkReferenceDefinition
nodes are now part of the document (not rendered by default).InlineParserContext.getLinkReferenceDefinition
was added to allow custom inline parsers to look up definitions for reference links.
- Performance improvements compared to previous version:
- Parsing 7-10% faster
- HTML rendering 105% faster - or in other words, twice as fast!
- Update to CommonMark spec 0.29 (#156):
- Change how newlines/spaces are handled in inline code
- Info strings for tilde code blocks can contain backticks and tildes
- Allow spaces inside link destinations in pointy brackets
- Disallow link destination beginning with
<
unless it is inside<..>
- Disallow unescaped '(' in link title in parens
- Disallow indenting list item marker by more than 3 spaces
- No longer treat
<meta>
as a block tag - Link reference definitions can now be in setext headings too
- Tables extension: Changes to match GitHub implementation:
- Escaping now only considers pipe characters when parsing tables:
\|
results in a literal|
instead of a column, everything else is passed through to inline parsing. - Table body can now contain lazy continuation lines (without
|
). An empty line or another block is needed to interrupt the table. - For tables without a body,
<tbody>
is no longer rendered in HTML - See https://github.github.com/gfm/#tables-extension- for details
- Escaping now only considers pipe characters when parsing tables:
- Check non-null arguments early and provide a nicer message
- Fix incorrectly preserving HTML entities when rendering attributes
- Fix pathological case with input
[\\\\...
(a lot of backslashes) - Fix pathological case with input
[]([]([](...
0.12.1 - 2018-11-13
- Speed up parsing significantly: Compared to the previous version, the benchmarks show up to 55% faster parsing for both small and large documents! (#137, #140)
- Parse backslash followed by unescapable character the same way as the reference implementations.
- Build and test on Java 11 as well.
- autolink: Stop URLs at " and ` as well
- Fix tab handling in ATX and Setext headings.
0.11.0 - 2018-01-17
- The extension for tables now also renders to plain text
(when using a
TextContentRenderer
), thanks @ahjaworski
- Add
Automatic-Module-Name
manifest entries so that library can be used nicely in Java 9 modules. The module names correspond to the root package name:org.commonmark
,org.commonmark.ext.autolink
, etc. - Java 7 is now only supported on a best-effort basis (but it has been EOL for quite some time, so yeah)
0.10.0 - 2017-09-14
- Support multiple
DelimiterProcessor
with the same delimiter char as long as they have different length, thanks @szeiger - Add tests for thread-safety and a section to the readme (#83)
- Update to CommonMark spec 0.28 (#94):
- Adapt to changed emphasis parsing rule
- Allow nested parentheses in inline link destinations
- Fixes for text content rendering, thanks @JinneeJ:
- Support for mixed lists
- Fixed that whitespaces between text elements are removed in "stripped" mode.
For example
**text** and text
had rendered astextand text
- Improved rendering for auto links
- Fix
[\]
being parsed as link label - Fix
[foo](<\>)
resulting in\
in href - Fix multiple of 3 rule for emphasis parsing (see commonmark/cmark#177)
- Fix text node merging when opening/closing delimiters are adjacent (#96)
- autolink: Fix linking of URLs without host, e.g.
http://.
(#99)
0.9.0 - 2017-03-03
- Support restricting which block types are parsed, see
enabledBlockTypes
method onParser.Builder
(#43), thanks @marksliva, @pivotal-graham-bell and @lalunamel. This allows you to disable parsing of e.g. headings, they will just be parsed as paragraphs instead. - Allow customizing the inline parser, see
inlineParserFactory
method onParser.Builder
(#68), thanks @vreynolds and @lalunamel. Note that this is experimental and currently requires using internal classes.
- Wrap escaped HTML blocks in a
<p>
tag (#78) - Add missing
ext-heading-anchor
todependencyManagement
in parent pom, thanks @drobert
0.8.0 - 2016-12-09
- Update to CommonMark spec 0.27 (#73):
- Treat h2..h6 as HTML blocks well
- Allow shortcut reference link before open parenthesis (if parenthesis is not part of a valid inline link)
AttributeProvider.setAttributes
now has an additionaltagName
argument and is called for all HTML tags of a block. This allows users to add attributes for thepre
tag of a code block in addition tocode
. Also added attribute provider support for additional HTML tags, namelyem
,strong
,code
andbr
. (#74)
- ext-heading-anchor: Fix IllegalArgumentException on Android (#71)
0.7.1 - 2016-10-05
- Allow to configure prefix/suffix for ID on
HeadingAnchorExtension
(#66), thanks @paulthom12345
0.7.0 - 2016-09-23
- Plain text content renderer (#58), thanks to @JinneeJ!
- Renders a plain text representation of a document instead of HTML, see
TextContentRenderer
in core. - Extensible in the same way as HTML rendering.
- Renders a plain text representation of a document instead of HTML, see
- Heading anchor extension (#26), thanks to @paulthom12345!
- Adds "id" attribute to heading tags (e.g.
<h1 id="heading">Heading</h1>
), useful for linking to sections of a document. - ID generation logic can also be used by itself via the
IdGenerator
class. - Use class
HeadingAnchorExtension
in artifactcommonmark-ext-heading-anchor
- Adds "id" attribute to heading tags (e.g.
- Ins (underline) extension (#54), thanks to @pabranch!
- Enables underlining of text by enclosing it in
++
. It's rendered as anins
tag in HTML. - Use class
InsExtension
in artifactcommonmark-ext-ins
.
- Enables underlining of text by enclosing it in
HtmlRenderer
and related classes moved fromorg.commonmark.html
toorg.commonmark.renderer.html
HtmlRenderer.Builder
no longer takes anAttributeProvider
, but uses aAttributeProviderFactory
to instantiate a new provider for each rendering. Code needs to be changed to create a factory and then return the existing provider from itscreate
method, similar to node renderers.NodeRendererFactory
was renamed toHtmlNodeRendererFactory
, same for related classes (there's a corresponsing interface for text content rendering)
0.6.0 - 2016-07-25
- Add coverage data to build. Currently at 97 %.
- Update to CommonMark spec 0.26 (#55)
- empty list items can no longer interrupt a paragraph; this resolves an ambiguity with setext headers
- ordered lists can interrupt a paragraph only when beginning with 1
- the two-blank-lines-breaks-out-of-lists rule has been removed
- the spec for emphasis and strong emphasis has been refined to give more intuitive results in some cases
- tabs can be used after the # in an ATX header and between the markers in a thematic break
- Simplify and speed up brackets processing (links/images)
- Improves the nested brackets pathological case (e.g.
[[[[a]]]]
with a lot of brackets) - Also contributed these changes upstream to commonmark.js
- Improves the nested brackets pathological case (e.g.
- Simplify merging of adjacent text nodes
- Extended
DelimiterProcessor
interface so that implementations get more information ingetDelimiterUse
and can reject delimiters by returning0
from it. Also rename the methods:getOpeningDelimiterChar
->getOpeningCharacter
getClosingDelimiterChar
->getClosingCharacter
getMinDelimiterCount
->getMinLength
- Fix max length for link labels (999, not 1000)
- autolink: Stop URLs at more invalid characters, notably '<' and '>'. According to RFC 3987, angle brackets are not allowed in URLs, and other linkers don't seem to allow them either.
0.5.1 - 2016-05-25
- Fix
StringIndexOutOfBoundsException
on line after tab (#52)
0.5.0 - 2016-04-22
- Add YAML front matter extension for document metadata blocks (#24), thanks to @chiwanpark
- Add information about delimiter character and length to delimiter nodes (#10), thanks to @pcj
- Make HTML rendering for nodes extensible (#35)
- Add support for asymmetric delimiters (#17):
DelimiterProcessor#getDelimiterChar
was split intogetOpeningDelimiterChar
andgetClosingDelimiterChar
- Make
AttributeProvider
work for image and table nodes (#31) - Update to CommonMark spec 0.25:
- Changes how partially consumed tabs are handled.
- Add Android test project to build so that we won't break Android support (#38), thanks to @JinneeJ
- Replace
CustomHtmlRenderer
withNodeRenderer
which also allows overriding rendering for built-in node types (#35)
- Fix blank line after empty list item to terminate list
- Fix nested bullet list indented with mix of tab and spaces (#41), thanks to @derari
- Fix package name in Javadoc, thanks to @jiakuan
- autolink: Treat more special characters as trailing delimiters to not include
">
,"/>
and");
at the end of URLs - autolink: Fix unexpected link end with unfinished delimiter pairs in URLs
- autolink: Fix Android incompatibility by not using
java.util.Objects
0.4.1 - 2016-02-11
- Fix problematic regex that doesn't work on some Java versions and Android
- Fix problems with Android (usage of
java.util.Objects
,StandardCharsets
, ProGuard, see #30), thanks to @JinneeJ!
- autolink extension: Update to autolink 0.3.0. This stops recognizing "abc://foo" within "1abc://foo" as a link
0.4.0 - 2016-01-18
Update to CommonMark spec 0.24 (#28):
- No longer allow whitespace between link text and link label
- Don't allow whitespace in link destination even with <>
- Don't use whitelist for schemes in autolinks, recognize all 2-32 length schemes (see spec)
- Allow multi-line content in setext headings
API breaking changes (caused by changes in spec):
- Rename
Header
toHeading
- Rename
HorizontalRule
toThematicBreak
- Rename
HtmlTag
toHtmlInline
- Replace
MatchedBlockParser#getParagraphStartLine
with#getParagraphContent
that returns the current content if the the matched block is a paragraph
0.3.2 - 2016-01-07
- Add more bounds checks to internal Substring class (might affect extensions)
0.3.1 - 2015-12-01
- Fix StringIndexOutOfBoundsException with unclosed inline link (#27)
0.3.0 - 2015-10-15
- Update to spec 0.22 (#14)
- Allow block parsers from extensions to override core behavior (#18)
- Fix compilation without
install
(#19) - Parent pom, build and README updates
0.2.0 - 2015-08-20
- Add method
Node parseReader(java.io.Reader)
toParser
(#2) - Extend Javadoc and publish online (#4)
- Fix StringIndexOutOfBoundsException on some inputs (#13)
- ext-gfm-tables: Implement single-column tables (#7)
0.1.0 - 2015-07-22
Initial release of commonmark-java, a port of commonmark.js with extensions for autolinking URLs, GitHub flavored strikethrough and tables.