summaryrefslogtreecommitdiff
path: root/cmark/changelog.txt
diff options
context:
space:
mode:
Diffstat (limited to 'cmark/changelog.txt')
-rw-r--r--cmark/changelog.txt1552
1 files changed, 1552 insertions, 0 deletions
diff --git a/cmark/changelog.txt b/cmark/changelog.txt
new file mode 100644
index 0000000000..3cb825bd9e
--- /dev/null
+++ b/cmark/changelog.txt
@@ -0,0 +1,1552 @@
+[0.31.2]
+
+ * Export `cmark_node_is_inline`, `cmark_node_is_block`,
+ `cmark_node_is_leaf` [non-breaking API change].
+
+ * Don't append a newline character when rendering inline nodes
+ (Samuel Williams).
+
+ * Fix inline source positions (#551, Nick Wellnhofer).
+ Account for partially removed delimiter chars.
+
+ * Commonmark renderer: fix bug with empty item at end of list (#583).
+
+ * Fix email autolink rendering in latex (#595).
+
+ * CMake: Remove handling CMP0063 (Christophh Grüninger).
+ Required CMake is 3.7 which automatically sets CMP0063 to NEW.
+
+ * Makefile: Don't depend on $(SPEC) (Nick Wellnhofer).
+ The spec file is always present.
+
+ * Makefile: Clean up cmake invocations (Nick Wellnhofer).
+ Use cmake command to build and install instead of invoking make. Also
+ use -G option consistently. This allows to use other generators like
+ Ninja: `make GENERATOR=Ninja`.
+
+ * Fix python warnings about regexp escape sequences
+ (Azamat H. Hackimov).
+
+ * Update cmake_minimum_required to 3.14 (Azamat H. Hackimov).
+
+ * Update to Unicode 17.0 (Dmitry Atamanov).
+
+ * README: Make cmake instructions more portable and simple
+ (Nick Wellnhofer). Don't assume that make is used. Don't
+ change directories.
+
+ * Replace link to unmaintained Python bindings (Ofek Lev).
+
+[0.31.1]
+
+ * Flag root node as open in `cmark_parser_new_with_mem_into_root` (#532).
+
+ * Remove `source`, add `search` to list of block tags
+ (a spec 0.31 change we forgot in last release).
+
+ * Accept lowercase inline HTML declarations (Michael Howell).
+
+ * Remove unused functions (Nick Wellnhofer).
+
+ * utf8:
+
+ + Fix encoding of U+FFFE and U+FFFF (#548, Nick Wellnhofer).
+ + Rework case folding (Nick Wellnhofer). Using a table and binary
+ search instead of a generated switch statement significantly
+ reduces the size of the compiled code.
+
+ * houdini:
+
+ + Rename `houdini_escape_html0` -> `houdini_escape_html` (#536).
+ + Rework HTML entity table (Nick Wellnhofer).
+ The new layout saves about 20 KB and removes 50 KB of relocation
+ entries from the shared library, also speeding up loading.
+
+ * cmake:
+
+ + Tell cmake to set `rpath` so the installed `cmark` can find
+ `libcmark.so` (Michael Witten).
+ + Remove unnecessary enabling of target property: MACOSX_RPATH
+ (Michael Witten).
+ + Fix build type checks (Nick Wellnhofer). Make the libFuzzer
+ target use the Asan build type again.
+
+ * Makefile:
+
+ + Fix `libFuzzer` target (Nick Wellnhofer).
+ + Use `ctest` and `--output-on-failure` in `test` target.
+ + `make debug` should build a shared library (Nick Wellnhofer).
+ The full test suite is only available to a shared library build.
+
+ * wrappers:
+
+ + Fix memory leak in Ruby wrapper (Nick Wellnhofer).
+ Free the string returned from `cmark_markdown_to_html`.
+ Fix `cmark_markdown_to_html` argument types.
+ + Fix memory leak in Python wrapper (Nick Wellnhofer).
+ Free the string returned from cmark_markdown_to_html.
+ Fix cmark_markdown_to_html argument types.
+ + Convert to and from UTF-8 under Python 2.
+ + Add PHP wraper (Vinicius Dias).
+
+ * ci:
+
+ + Test with ASan and rework CI matrix (Nick Wellnhofer).
+ + Remove the valgrind leakcheck test. This should be covered now
+ by testing with LeakSanitizer on static builds, including tests
+ like spectest_executable. The full test suite is only available
+ to shared library builds which have to run without leak checks
+ for now.
+ + Separate cflags from cc (Nick Wellnhofer).
+ + Make CMake matrix options work (Nick Wellnhofer).
+ CMAKE_OPTIONS had no effect, leading to the shared library not being
+ tested. Invoke cmake directly, so we don't have to deal with the mess
+ in Makefile.
+ + Do debug build so that assertions will run (#532).
+ + Use `-gdwarf-4` with clang for compatibility with valgrind (#532).
+
+ * test:
+
+ + Fix memory leaks in cmark.py (Nick Wellnhofer).
+ Free results of libcmark API function calls.
+ + Fix memory leaks in api_test (Nick Wellnhofer).
+ + Simplify test execution environment handling (Saleem Abdulrasool).
+ Use generator expressions to compute the new path and avoid
+ translations. This reduces complexity in the build and allows for a
+ different build layout.
+
+ * fuzz: Test more parser entry points (Nick Wellnhofer).
+
+ * Remove superfluous definitions from scanners.re.
+
+ * re2c: Disable UTF-8 (Nick Wellnhofer). The regexes don't require UTF-8
+ features and work in ASCII mode as well. Disabling UTF-8 reduces the
+ size of the code generated by re2c.
+
+[0.31.0]
+
+ * Update to 0.31.2 spec.txt.
+
+ * Treat unicode Symbols like Punctuation, as per the 0.31 spec.
+
+ * Add a new function to `utf8.h`:
+ `int cmark_utf8proc_is_punctuation_or_symbol(int32_t uc)`.
+ The old `cmark_utf8proc_is_punctuation` has been kept for
+ now, but it is no longer used.
+
+ * Add new exported function `cmark_parser_new_with_mem_into_root`
+ (API change) (John Ericson).
+
+ * Avoid repeated `language-` in info string (commonmark/commonmark.js#277).
+
+ * Fix quadratic behavior in `S_insert_emph` (Nick Wellnhofer).
+ Fixes part of GHSA-66g8-4hjf-77xh.
+
+ * Fix quadratic behavior in `check_open_blocks` (Nick Wellnhofer).
+ Fixes part of GHSA-66g8-4hjf-77xh.
+
+ * Track underscore bottom separately mod 3, like asterisk (Michael
+ Howell). This was already implemented correctly for asterisks,
+ but not for underscore.
+
+ * Use `fwrite` instead of `printf` to print results in main (#523).
+ This avoids a massive slowdown in MSYS2.
+
+ * commonmark writer: less aggressive escaping for `!` (#131).
+
+ * Update libFuzzer build (Nick Wellnhofer):
+
+ + Move fuzzing files into their own directory.
+ + Use libFuzzer the modern way by compiling and linking with
+ `-fsanitize=fuzzer(-no-link)` without requiring `LIB_FUZZER_PATH`.
+ + Update the `libFuzzer` rule in Makefile and the README.md.
+
+ * CMake build changes (Saleem Abdulrasool).
+
+ + Inline multiple variables in CMake, following CMake recommendations.
+ + Simplify the version computation.
+ + Remove the `CMARK_STATIC` and `CMARK_SHARED` options as one of the two
+ must be enabled always as the cmark executable depends on the library.
+ Instead of having a custom flag to discern between the
+ library type, use the native CMake option `BUILD_SHARED_LIBS`,
+ allowing the user to control which library to build. This matches
+ CMake recommendations to only build a single copy of the library.
+ + Introduce an author warning for the use of `CMARK_SHARED` and
+ `CMARK_STATIC` to redirect the author of the dependent package to
+ `BUILD_SHARED_LIBS`.
+ + Permit incremental linking on Windows. Although incremental linking
+ does introduce padding in the binary for incremental links, that
+ should not matter for release mode builds in theory as `/OPT:REF`
+ and `/OPT:ICF` will trigger full links, which is the default in
+ release mode.
+ + Hoist the CMake module inclusion to the top level.
+ + Minor tweaks for speeding up the configure phase.
+ Restructure the file layout to place the custom modules into the
+ `cmake/modules` directory that is the common layout for CMake based
+ projects.
+ + Squelch C4232 warnings on MSVC builds.
+ + Remove check for `__builtin_expect`. Use `__has_builtin` to check
+ at compile time if the feature is supported.
+ This macro is supported by both clang and GCC (as of 10).
+ In the case that the compiler in use is not new enough, we still
+ provide the fallback so that the code will compile but without the
+ additional hints for the branch probability. `config.h` has been
+ removed from the code base as it is no longer needed.
+ + Remove `/TP` usage on MSVC and replace `CMARK_INLINE` with `inline`.
+ These were workarounds for pre-VS2015 compilers, which are no longer
+ supported.
+ + Hoist the C visibility settings to top level
+ + Clean up C4267 warnings on MSVC builds.
+ + Remove some compiler compatibility checks that are no longer
+ needed because VS 2013 is no longer supported (#498).
+ + Adjust the policy to silence warnings on MSVC builds
+ CMake 3.15+ remove `/W3` from the language flags under MSVC with
+ CMP0092. Set the policy to new to avoid the D9025 warning.
+ + Reflow some text to match CMake documentation style
+ + Use generator expression for path computation.
+ + Use CMake to propagate `CMARK_STATIC_DEFINE`.
+ + Clean up an obsoleted variable (NFC).
+ + Hoist the policy settings. Policy settings may impact how
+ `project` functions. They should be set immediately after
+ `cmake_minimum_required` (which implicitly sets policies).
+ Use the `POLICY` check to see if a policy is defined rather
+ than using a version check.
+ + Replace `CMARK_TESTS` with CMake sanctioned `BUILD_TESTING`.
+ + Correct typo and adjust command invocation. Use the proper
+ generator expression for the python interpreter and adjust
+ a typo in the component name.
+ + Add an upgrade path for newer CMake.
+ CMake 3.12 deprecated `FindPythonInterp`, and with CMake 3.27, were
+ obsoleted with CMP0148. Add a version check and switch to the new
+ behaviour to allow building with newer releases.
+
+ * Fix regex syntax warnings in `pathological_tests.py` (Nick Wellnhofer).
+
+ * `test/cmark.py`: avoid star imports (Jakub Wilk).
+
+ * `spec_tests.py`: Add option to generate fuzz corpus (Nick Wellnhofer).
+ Add an option `--fuzz-corpus` that writes the test cases to separate
+ files including the options header, so they can be used as seed corpus
+ for fuzz testing.
+
+ * Fix some cmark.3 man rendering issues so we can do a clean regen
+ (John Ericson).
+
+ * Update Windows compilation instructions (Pomax, #525).
+
+[0.30.3]
+
+ * Fix quadratic complexity bug with repeated `![[]()`.
+ Resolves CVE-2023-22486. Add new pathological test. (John MacFarlane)
+
+ * Allow declarations with no space, as per spec (#456, John MacFarlane).
+
+ * Set `enumi*` counter correctly in LaTeX output (#451, John MacFarlane).
+
+ * Allow `<!DOCTYPE` to be case-insensitive. (This conforms to the
+ existing spec.) (John MacFarlane)
+
+ * Fixed HTML comment scanning. Need to handle this case: `<!--> and -->`.
+ Since the scanner finds the longest match, we had to
+ move some of the logic outside of the scanner. (John MacFarlane)
+
+ * Fix quadratic parsing issue with repeated `<!--` (this was not
+ introduced by the previous fix, and not in a released version of cmark).
+ Resolves CVE-2023-22484. Add new pathological test. (John MacFarlane)
+
+ * Update HTML comment scanner to accord with commonmark/commonmark-spec#713
+ (John MacFarlane).
+
+ * Pathological tests: half the number of repetitions, and the timeout.
+ This reduces the time needed for the pathological tests.
+ (John MacFarlane)
+
+ * Shrink `struct cmark_node` (#446). The `internal_offset` member is
+ only used for headings and can be moved to `struct cmark_heading`.
+ This reduces the size of `struct cmark_node` from 112 to 104 bytes on
+ 64-bit systems. (Nick Wellnhofer)
+
+ * Add `-Wstrict-prototypes` and fix offending functions. (Nick
+ Wellnhofer, Dan Cîrnaț)
+
+ * Fix quadratic behavior involving `get_containing_block` (#431).
+ Instead of searching for the containing block, update the tight list
+ status when entering a child of a list item or exiting a list.
+ (Nick Wellnhofer)
+
+ * Fix `pathological_tests.py` (Nick Wellnhofer):
+ - Use a multiprocessing.Queue to actually get results from spawned
+ tests processes.
+ - Fix the `allowed_failures` test.
+ - Truncate actual output when printed.
+ - Prepare for testing pathological behavior of the Commonmark renderer.
+
+ * Fix source position bug with backticks (kyle).
+
+[0.30.2]
+
+ * Fix parsing of emphasis before links (#424, Nick Wellnhofer).
+ Fixes a regression introduced with commit ed0a4bf.
+
+ * Update to Unicode 14.0 (data-man).
+
+ * Add `~` to safe href character set (#394, frogtile).
+
+ * Update CMakeLists.txt (Saleem Abdulrasool). Bump the minimum required
+ CMake to 3.7. Imperatively define output name for static library.
+
+ * Fix install paths in libcmark.pc (Sebastián Mancilla).
+ `CMAKE_INSTALL_<dir>` can be relative or absolute path, so it is wrong to
+ prefix CMAKE_INSTALL_PREFIX because if CMAKE_INSTALL_<dir> is set to an
+ absolute path it will result in a malformed path with two absolute paths
+ joined together. Instead, use `CMAKE_INSTALL_FULL_<dir>` from
+ GNUInstallDirs.
+
+[0.30.1]
+
+ * Properly indent block-level contents of list items in man (#258).
+ This handles nested lists as well as items with multiple paragraphs.
+ The change requires addition of a new field block_number_in_list_item
+ to cmark_renderer, but this does not change the public API.
+ * Fix quadratic behavior when parsing emphasis (#389, Nick
+ Wellnhofer). Delimiters can be deleted, so store delimiter positions
+ instead of pointers in `openers_bottom`. Besides causing undefined
+ behavior when reading a dangling pointer, this could also result
+ in quadratic behavior when parsing emphasis.
+ * Fix quadratic behavior when parsing smart quotes (#388, Nick Wellnhofer).
+ Remove matching smart quote delimiters. Otherwise, the same opener
+ could be found over and over, preventing the `openers_bottom`
+ optimization from kicking in and leading to quadratic behavior when
+ processing lots of quotes.
+ * Modify CMake configuration so that the project can be built with
+ older versions of CMake (#384, Saleem Abdulrasool). (In 0.30.0,
+ some features were used that require CMake >= 3.3.) The cost of this
+ backwards compatibility is that developers must now explicitly invoke
+ `cmark_add_compile_options` when a new compilation target is added.
+ * Remove a comma at the end of an enumerator list, which was flagged
+ by clang as a C++11 extension.
+ * make_man_page.py: use absolute path with CDLL. This avoids the error
+ "file system relative paths not allowed in hardened programs."
+ * Include cmark version in cmark(3) man page (instead of LOCAL).
+
+[0.30.0]
+
+ * Use official 0.30 spec.txt.
+ * Add `cmark_get_default_mem_allocator()` (#330). API change: this
+ adds a new exported function in cmark.h.
+ * Fix #383. An optimization we used for emphasis parsing was
+ too aggressive, causing us to miss some emphasis that was legal
+ according to the spec. We fix this by indexing the `openers_bottom`
+ table not just by the type of delimiter and the length of the
+ closing delimiter mod 3, but by whether the closing delimiter
+ can also be an opener. (The algorithm for determining emphasis
+ matching depends on all these factors.) Add regression test.
+ * Fix quadratic behavior with inline HTML (#299, Nick Wellnhofer).
+ Repeated starting sequences like `<?`, `<!DECL ` or `<![CDATA[` could
+ lead to quadratic behavior if no matching ending sequence was found.
+ Separate the inline HTML scanners. Remember if scanning the whole input
+ for a specific ending sequence failed and skip subsequent scans.
+ * Speed up hierarchy check in tree manipulation API (Nick Wellnhofer).
+ Skip hierarchy check in the common case that the inserted child has
+ no children.
+ * Fix quadratic behavior when parsing inlines (#373, Nick Wellnhofer).
+ The inline parsing code would call `cmark_node_append_child` to append
+ nodes. This public function has a sanity check which is linear in the
+ depth of the tree. Repeated calls could show quadratic behavior in
+ degenerate trees. Use a special function to append nodes without this
+ check. (Issue found by OSS-Fuzz.)
+ * Replace invalid characters in XML output (#365, Nick wellnhofer).
+ Control characters, U+FFFE and U+FFFF aren't allowed in XML 1.0, so
+ replace them with U+FFFD (replacement character). This doesn't solve
+ the problem how to roundtrip these characters, but at least we don't
+ produce invalid XML.
+ * Avoid quadratic output growth with reference links (#354, Nick Wellnhofer).
+ Keep track of the number bytes added through expansion of reference
+ links and limit the total to the size of the input document. Always
+ allow a minimum of 100KB. Unfortunately, cmark has no error handling,
+ so all we can do is to stop expanding reference links without returning
+ an error. This should never be an issue in practice though. The 100KB
+ minimum alone should cover all real-world cases.
+ * Fix issue with type-7 HTML blocks interrupting paragraphs
+ (see commonmark/commonmark.js#213).
+ * Treat `textarea` like `script`, `style`, `pre` (type 1 HTML block),
+ in accordance with spec change.
+ * Define whitespace per spec (Asherah Conor).
+ * Add `MAX_INDENT` for xml (#355). Otherwise we can get quadratic
+ increase in size with deeply nested structures.
+ * Fix handling of empty strings when creating XML/HTML output
+ (Steffen Kieß).
+ * Commonmark renderer: always use fences for code (#317).
+ This solves problems with adjacent code blocks being merged.
+ * Improve rendering of commonmark code spans with spaces (#316).
+ * Cleaner approach to max digits for numeric entities.
+ This modifies unescaping in `houdini_html_u.c` rather than
+ the entity handling in `inlines.c`. Unlike the other,
+ this approach works also in e.g. link titles.
+ * Fix entity parser (and api test) to respect length limit on
+ numeric entities.
+ * Don't allow link destinations with unbalanced unescaped parentheses.
+ See commonmark/commonmark.js#177.
+ * `print_usage()`: Minor grammar fix, swap two words (#305, Øyvind A. Holm).
+ * Don't call `memcpy` with `NULL` as first parameter.
+ This is illegal according to the C standard, sec. 7.1.4.
+ See <https://www.imperialviolet.org/2016/06/26/nonnull.html>.
+ * Add needed include in `blocks.c`.
+ * Fix unnecessary variable assignment.
+ * Skip UTF-8 BOM if present at beginning of buffer (#334).
+ * Fix URL check in `is_autolink` (Nick Wellnhofer). In a recent commit,
+ the check was changed to `strcmp`, but we really have to use `strncmp`.
+ * Fix null pointer deref in `is_autolink` (Nick Wellnhofer).
+ Introduced by a recent commit. Found by OSS-Fuzz.
+ * Rearrange struct cmark_node (Nick Wellnhofer). Introduce multi-purpose
+ data/len members in struct cmark_node. This is mainly used to store
+ literal text for inlines, code and HTML blocks.
+ Move the content strbuf for blocks from `cmark_node` to `cmark_parser`.
+ When finalizing nodes that allow inlines (paragraphs and headings),
+ detach the strbuf and store the block content in the node's data/len
+ members. Free the block content after processing inlines.
+ Reduces size of struct `cmark_node` by 8 bytes.
+ * Improve packing of `struct cmark_list` (Nick Wellnhofer).
+ * Use C string instead of chunk in a number of contexts (Nick Wellnhofer,
+ #309). The node struct never references memory of other nodes now.
+ Node accessors don't have to check for delayed creation of C strings,
+ so parsing and iterating all literals using the public API should
+ actually be faster than before. These changes also reduce the size
+ of `struct cmark_node`.
+ * Add casts for MSVC10 (from kivikakk in cmark-cfm).
+ * commonmark renderer: better escaping in smart mode. When
+ `CMARK_OPT_SMART` is enabled, we escape literal `-`, `.`, and quote
+ characters when needed to avoid their being "smartified."
+ * Add options field to `cmark_renderer`.
+ * commonmark.c - use `size_t` instead of `int`.
+ * Include `string.h` in `cmark-fuzz.c`.
+ * Fix #220 (hash collisions for references) (Vicent Marti via cmark-gfm).
+ Reimplemented reference storage as follows:
+ 1. New references are always inserted at the end of a linked list. This
+ is an O(1) operation, and does not check whether an existing (duplicate)
+ reference with the same label already exists in the document.
+ 2. Upon the first call to `cmark_reference_lookup` (when it is expected
+ that no further references will be added to the reference map), the
+ linked list of references is written into a fixed-size array.
+ 3. The fixed size array can then be efficiently sorted in-place in O(n
+ log n). This operation only happens once. We perform this sort in a
+ _stable_ manner to ensure that the earliest link reference in the
+ document always has preference, as the spec dictates. To accomplish
+ this, every reference is tagged with a generation number when initially
+ inserted in the linked list.
+ 4. The sorted array is then compacted in O(n). Since it was sorted in a
+ stable way, the first reference for each label is preserved and the
+ duplicates are removed, matching the spec.
+ 5. We can now simply perform a binary search for the current
+ `cmark_reference_lookup` query in O(log n). Any further lookup calls
+ will also be O(log n), since the sorted references table only needs to
+ be generated once.
+ The resulting implementation is notably simple (as it uses standard
+ library builtins `qsort` and `bsearch`), whilst performing better than
+ the fixed size hash table in documents that have a high number of
+ references and never becoming pathological regardless of the input.
+ * Comment out unused function `cmark_strbuf_cstr` in `buffer.h`.
+ * Re-add `--safe` command-line option as a no-op (#344), for backwards
+ compatibility.
+ * Update to Unicode 13.0
+ * Generate and install cmake-config file (Reinhold Gschweicher).
+ Add full cmake support. The project can either be used with
+ `add_subdirectory` or be installed into the system (or some other
+ directory) and be found with `find_package(cmark)`. In both cases the
+ cmake target `cmark::cmark` and/or `cmark::cmark_static` is all that
+ is needed to be linked. Previously the `cmarkConfig.cmake` file
+ was generated, but not installed. As additional bonus of generation
+ by cmake we get a generated `cmake-config-version.cmake` file for
+ `find_package()` to search for the same major version.
+ The generated config file is position independent, allowing the
+ installed directory to be copied or moved and still work.
+ The following four files are generated and installed:
+ `lib/cmake/cmark/cmark-config.cmake`,
+ `lib/cmake/cmark/cmark-config-version.cmake`,
+ `lib/cmake/cmark/cmark-targets.cmake`,
+ `lib/cmake/cmark/cmark-targets-release.cmake`.
+ * Adjust the MinGW paths for MinGW64 (Daniil Baturin).
+ * Fix CMake generator expression checking for MSVC (Nick Wellnhofer).
+ * Fix `-Wconst-qual` warning (Saleem Abdulrasool). This enables building
+ with `/Zc:strictString` with MSVC as well.
+ * Improve and modernize cmake build (Saleem Abdulrasool).
+ + Build: add exports targets for build tree usage (#307).
+ + Uuse target properties for include paths.
+ + Remove the unnecessary execute permission on CMakeLists.txt.
+ + Reduce property computation in CMake.
+ + Use `CMAKE_INCLUDE_CURRENT_DIRECTORY`.
+ + Improve man page installation.
+ + Only include `GNUInstallDirs` once.
+ + Replace `add_compile_definitions` with `add_compile_options`
+ since the former was introduced in 3.12 (#321).
+ + Cleanup CMake (#319).
+ + Inline a variable.
+ + Use `LINKER_LANGUAGE` property for C++ runtime.
+ + Use CMake to control C standard.
+ + Use the correct variable.
+ + Loosen the compiler check
+ + Hoist shared flags to top-level CMakeLists
+ + Remove duplicated flags.
+ + Use `add_compile_options` rather than modify `CMAKE_C_FLAGS`.
+ + Hoist sanitizer flags to global state.
+ + Hoist `-fvisibilty` flags to top-level.
+ + Hoist the debug flag handling.
+ + Hoist the profile flag handling.
+ + Remove incorrect variable handling.
+ + Remove unused CMake includes.
+ * Remove "-rdynamic" flag for static builds (#300, Eric Pruitt).
+ * Fixed installation on other than Ubuntu GNU/Linux distributions
+ (Vitaly Zaitsev).
+ * Link executable with static or shared library (Nick Wellnhofer).
+ If `CMARK_STATIC` is on (default), link the executable with the static
+ library. This produces exactly the same result as compiling the library
+ sources again and linking with the object files.
+ If `CMARK_STATIC` is off, link the executable with the shared library.
+ This wasn't supported before and should be the preferred way to
+ package cmark on Linux distros.
+ Building only a shared library and a statically linked executable
+ isn't supported anymore but this doesn't seem useful.
+ * Reintroduce version check for MSVC /TP flag (Nick Wellnhofer).
+ The flag is only required for old MSVC versions.
+ * normalize.py: use `html.escape` instead of `cgi.escape` (#313).
+ * Fix pathological_tests.py on Windows (Nick Wellnhofer).
+ When using multiprocessing on Windows, the main program must be
+ guarded with a `__name__` check.
+ * Remove useless `__name__` check in test scripts (Nick Wellnhofer).
+ * Add CIFuzz (Leo Neat).
+ * cmark.1 - Document --unsafe instead of --safe (#332).
+ * cmark.1: remove docs for `--normalize` which no longer exists (#332).
+ * Add lint target to Makefile.
+ * Add uninstall target to Makefile.
+ * Update benchmarks (#338).
+ * Fix typo in documentation (Tim Gates).
+ * Increase timeout for pathological tests to avoid CI failure.
+ * Update the Racket wrapper with the safe -> unsafe flag change (Eli
+ Barzilay).
+
+[0.29.0]
+
+ * Update spec to 0.29.
+ * Make rendering safe by default (#239, #273).
+ Adds `CMARK_OPT_UNSAFE` and make `CMARK_OPT_SAFE` a no-op (for API
+ compatibility). The new default behavior is to suppress raw HTML and
+ potentially dangerous links. The `CMARK_OPT_UNSAFE` option has to be set
+ explicitly to prevent this.
+ **NOTE:** This change will require modifications in bindings for cmark
+ and in most libraries and programs that use cmark.
+ Borrows heavily from @kivikakk's patch in github/cmark-gfm#123.
+ * Add sourcepos info for inlines (Yuki Izumi).
+ * Disallow more than 32 nested balanced parens in a link (Yuki Izumi).
+ * Resolve link references before creating setext header.
+ A setext header line after a link reference should not
+ create a header, according to the spec.
+ * commonmark renderer: improve escaping.
+ URL-escape special characters when escape mode is URL, and not otherwise.
+ Entity-escape control characters (< 0x20) in non-literal escape modes.
+ * render: only emit actual newline when escape mode is LITERAL.
+ For markdown content, e.g., in other contexts we want some
+ kind of escaping, not a literal newline.
+ * Update code span normalization to conform with spec change.
+ * Allow empty `<>` link destination in reference link.
+ * Remove leftover includes of `memory.h` (#290).
+ * A link destination can't start with `<` unless it is
+ an angle-bracket link that also ends with `>` (#289).
+ (If your URL really starts with `<`, URL-escape it.)
+ * Allow internal delimiter runs to match if both have lengths that are
+ multiples of 3. See commonmark/commonmark#528.
+ * Include `references.h` in `parser.h` (#287).
+ * Fix `[link](<foo\>)`.
+ * Use hand-rolled scanner for thematic break (see #284).
+ Keep track of the last position where a thematic break
+ failed to match on a line, to avoid rescanning unnecessarily.
+ * Rename `ends_with_blank_line` with `S_` prefix.
+ * Add `CMARK_NODE__LAST_LINE_CHECKED` flag (#284).
+ Use this to avoid unnecessary recursion in `ends_with_blank_line`.
+ * In `ends_with_blank_line`, call `S_set_last_line_blank`
+ to avoid unnecessary repetition (#284). Once we settle whether a list
+ item ends in a blank line, we don't need to revisit this in considering
+ parent list items.
+ * Disallow unescaped `(` in parenthesized link title.
+ * Copy line/col info straight from opener/closer (Ashe Connor).
+ We can't rely on anything in `subj` since it's been modified while parsing
+ the subject and could represent line info from a future line. This is
+ simple and works.
+ * `render.c`: reset `last_breakable` after cr. Fixes jgm/pandoc#5033.
+ * Fix a typo in `houdini_href_e.c` (Felix Yan).
+ * commonmark writer: use `~~~` fences if info string contains backtick.
+ This is needed for round-trip tests.
+ * Update scanners for new info string rules.
+ * Add XSLT stylesheet to convert cmark XML back to Commonmark
+ (Nick Wellnhofer, #264). Initial version of an XSLT stylesheet that
+ converts the XML format produced by `cmark -t xml` back to Commonmark.
+ * Check for whitespace before reference title (#263).
+ * Bump CMake to version 3 (Jonathan Müller).
+ * Build: Remove deprecated call to `add_compiler_export_flags()`
+ (Jonathan Müller). It is deprecated in CMake 3.0, the replacement is to
+ set the `CXX_VISIBILITY_PRESET` (or in our case `C_VISIBILITY_PRESET`) and
+ `VISIBILITY_INLINES_HIDDEN` properties of the target. We're already
+ setting them by setting the CMake variables anyway, so the call can be
+ removed.
+ * Build: only attempt to install MSVC system libraries on Windows
+ (Saleem Abdulrasool). Newer versions of CMake attempt to query the system
+ for information about the VS 2017 installation. Unfortunately, this query
+ fails on non-Windows systems when cross-compiling:
+ `cmake_host_system_information does not recognize <key> VS_15_DIR`.
+ CMake will not find these system libraries on non-Windows hosts anyways,
+ and we were silencing the warnings, so simply omit the installation when
+ cross-compiling to Windows.
+ * Simplify code normalization, in line with spec change.
+ * Implement code span spec changes. These affect both parsing and writing
+ commonmark.
+ * Add link parsing corner cases to regressions (Ashe Connor).
+ * Add `xml:space="preserve"` in XML output when appropriate
+ (Nguyễn Thái Ngọc Duy).
+ (For text, code, code_block, html_inline and html_block tags.)
+ * Removed meta from list of block tags. Added regression test.
+ See commonmark/CommonMark#527.
+ * `entity_tests.py` - omit noisy success output.
+ * `pathological_tests.py`: make tests run faster.
+ Commented out the (already ignored) "many references" test, which
+ times out. Reduced the iterations for a couple other tests.
+ * `pathological_tests.py`: added test for deeply nested lists.
+ * Optimize `S_find_first_nonspace`. We were needlessly redoing things we'd
+ already done. Now we skip the work if the first nonspace is greater than
+ the current offset. This fixes pathological slowdown with deeply nested
+ lists (#255). For N = 3000, the time goes from over 17s to about 0.7s.
+ Thanks to Martin Mitas for diagnosing the problem.
+ * Allow spaces in link destination delimited with pointy brackets.
+ * Adjust max length of decimal/numeric entities.
+ See commonmark/CommonMark#487.
+ * Fix inline raw HTML parsing.
+ This fixes a recently added failing spec test case. Previously spaces
+ were being allowed in unquoted attribute values; no we forbid them.
+ * Don't allow list markers to be indented >= 4 spaces.
+ See commonmark/CommonMark#497.
+ * Check for empty buffer when rendering (Phil Turnbull).
+ For empty documents, `->size` is zero so
+ `renderer.buffer->ptr[renderer.buffer->size - 1]` will cause an
+ out-of-bounds read. Empty buffers always point to the global
+ `cmark_strbuf__initbuf` buffer so we read `cmark_strbuf__initbuf[-1]`.
+ * Also run API tests with `CMARK_SHARED=OFF` (Nick Wellnhofer).
+ * Rename roundtrip and entity tests (Nick Wellnhofer).
+ Rename the tests to reflect that they use the library, not the
+ executable.
+ * Generate export header for static-only build (#247, Nick Wellnhofer).
+ * Fuzz width parameter too (Phil Turnbull). Allow the `width` parameter to
+ be generated too so we get better fuzz-coverage.
+ * Don't discard empty fuzz test-cases (Phil Turnbull). We currently discard
+ fuzz test-cases that are empty but empty inputs are valid markdown. This
+ improves the fuzzing coverage slightly.
+ * Fixed exit code for pathological tests.
+ * Add allowed failures to `pathological_tests.py`.
+ This allows us to include tests that we don't yet know how to pass.
+ * Add timeout to `pathological_tests.py`.
+ Tests must complete in 8 seconds or are errors.
+ * Add more pathological tests (Martin Mitas).
+ These tests target the issues #214, #218, #220.
+ * Use pledge(2) on OpenBSD (Ashe Connor).
+ * Update the Racket wrapper (Eli Barzilay).
+ * Makefile: For afl target, don't build tests.
+
+[0.28.3]
+
+ * Include GNUInstallDirs in src/CMakeLists.txt (Nick Wellnhofer, #240).
+ This fixes build problems on some cmake versions (#241).
+
+[0.28.2]
+
+ * Fixed regression in install dest for static library (#238).
+ Due to a mistake, 0.28.1 installed libcmark.a into include/.
+
+[0.28.1]
+
+ * `--smart`: open quote can never occur right after `]` or `)` (#227).
+ * Fix quadratic behavior in `finalize` (Vicent Marti).
+ * Don't use `CMAKE_INSTALL_LIBDIR` to create `libcmark.pc` (#236).
+ This wasn't getting set in processing `libcmark.pc.in`, and we
+ were getting the wrong entry in `libcmark.pc`.
+ The new approach sets an internal `libdir` variable to
+ `lib${LIB_SUFFIX}`. This variable is used both to set the
+ install destination and in the libcmark.pc.in template.
+ * Update README.md, replace `make astyle` with `make format`
+ (Nguyễn Thái Ngọc Duy).
+
+[0.28.0]
+
+ * Update spec.
+ * Use unsigned integer when shifting (Phil Turnbull).
+ Avoids a UBSAN warning which can be triggered when handling a
+ long sequence of backticks.
+ * Avoid memcpy'ing NULL pointers (Phil Turnbull).
+ Avoids a UBSAN warning when link title is empty string.
+ The length of the memcpy is zero so the NULL pointer is not
+ dereferenced but it is still undefined behaviour.
+ * DeMorgan simplification of some tests in emphasis parser.
+ This also brings the code into closer alignment with the wording
+ of the spec (see jgm/CommonMark#467).
+ * Fixed undefined shift in commonmark writer (#211).
+ Found by google/oss-fuzz:
+ <https://oss-fuzz.com/v2/testcase-detail/4686992824598528>.
+ * latex writer: fix memory overflow (#210).
+ We got an array overflow in enumerated lists nested more than
+ 10 deep with start number =/= 1.
+ This commit also ensures that we don't try to set `enum_` counters
+ that aren't defined by LaTeX (generally up to enumv).
+ Found by google/oss-fuzz:
+ <https://oss-fuzz.com/v2/testcase-detail/5546760854306816>.
+ * Check for NULL pointer in get_link_type (Phil Turnbull).
+ `echo '[](xx:)' | ./build/src/cmark -t latex` gave a
+ segfault.
+ * Move fuzzing dictionary into single file (Phil Turnbull).
+ This allows AFL and libFuzzer to use the same dictionary
+ * Reset bytes after UTF8 proc (Yuki Izumi, #206).
+ * Don't scan past an EOL (Yuki Izumi).
+ The existing negated character classes (`[^…]`) are careful to
+ always include` \x00` in the characters excluded, but these `.`
+ catch-alls can scan right past the terminating NUL placed
+ at the end of the buffer by `_scan_at`. As such, buffer
+ overruns can occur. Also, don't scan past a newline in HTML
+ block end scanners.
+ * Document cases where `get_` functions return `NULL` (#155).
+ E.g. `cmark_node_get_url` on a non-link or image.
+ * Properly handle backslashes in link destinations (#192).
+ Only ascii punctuation characters are escapable, per the spec.
+ * Fixed `cmark_node_get_list_start` to return 0 for bullet lists,
+ as documented (#202).
+ * Use `CMARK_NO_DELIM` for bullet lists (#201).
+ * Fixed code for freeing delimiter stack (#189).
+ * Removed abort outside of conditional (typo).
+ * Removed coercion in error message when aborting from buffer.
+ * Print message to stderr when we abort due to memory demands (#188).
+ * `libcmark.pc`: use `CMAKE_INSTALL_LIBDIR` (#185, Jens Petersen).
+ Needed for multilib distros like Fedora.
+ * Fixed buffer overflow error in `S_parser_feed` (#184).
+ The overflow could occur in the following condition:
+ the buffer ends with `\r` and the next memory address
+ contains `\n`.
+ * Update emphasis parsing for spec change.
+ Strong now goes inside Emph rather than the reverse,
+ when both scopes are possible. The code is much simpler.
+ This also avoids a spec inconsistency that cmark had previously:
+ `***hi***` became Strong (Emph "hi")) but
+ `***hi****` became Emph (Strong "hi")) "*"
+ * Fixes for the LaTeX renderer (#182, Doeme)
+ + Don't double-output the link in latex-rendering.
+ + Prevent ligatures in dashes sensibly when rendering latex.
+ `\-` is a hyphenation, so it doesn't get displayed at all.
+ * Added a test for NULL when freeing `subj->last_delim`.
+ * Cleaned up setting of lower bounds for openers.
+ We now use a much smaller array.
+ * Fix #178, quadratic parsing bug. Add pathological test.
+ * Slight improvement of clarity of logic in emph matching.
+ * Fix "multiple of 3" determination in emph/strong parsing.
+ We need to store the length of the original delimiter run,
+ instead of using the length of the remaining delimiters
+ after some have been subtracted. Test case:
+ `a***b* c*`. Thanks to Raph Levin for reporting.
+ * Correctly initialize chunk in S_process_line (Nick Wellnhofer, #170).
+ The `alloc` member wasn't initialized. This also allows to add an
+ assertion in `chunk_rtrim` which doesn't work for alloced chunks.
+ * Added 'make newbench'.
+ * `scanners.c` generated with re2c 0.16 (68K smaller!).
+ * `scanners.re` - fixed warnings; use `*` for fallback.
+ * Fixed some warnings in `scanners.re`.
+ * Update CaseFolding to latest (Kevin Wojniak, #168).
+ * Allow balanced nested parens in link destinations (Yuki Izumi, #166)
+ * Allocate enough bytes for backticks array.
+ * Inlines: Ensure that the delimiter stack is freed in subject.
+ * Fixed pathological cases with backtick code spans:
+
+ - Removed recursion in scan_to_closing_backticks
+ - Added an array of pointers to potential backtick closers
+ to subject
+ - This array is used to avoid traversing the subject again
+ when we've already seen all the potential backtick closers.
+ - Added a max bound of 1000 for backtick code span delimiters.
+ - This helps with pathological cases like:
+
+ x
+ x `
+ x ``
+ x ```
+ x ````
+ ...
+
+ - Added pathological test case.
+
+ Thanks to Martin Mitáš for identifying the problem and for
+ discussion of solutions.
+ * Remove redundant cmake_minimum_required (#163, @kainjow).
+ * Make shared and static libraries optional (Azamat H. Hackimov).
+ Now you can enable/disable compilation and installation targets for
+ shared and static libraries via `-DCMARK_SHARED=ON/OFF` and
+ `-DCMARK_STATIC=ON/OFF`.
+ * Added support for built-in `${LIB_SUFFIX}` feature (Azamat H.
+ Hackimov). Replaced `${LIB_INSTALL_DIR}` option with built-in
+ `${LIB_SUFFIX}` for installing for 32/64-bit systems. Normally,
+ CMake will set `${LIB_SUFFIX}` automatically for required enviroment.
+ If you have any issues with it, you can override this option with
+ `-DLIB_SUFFIX=64` or `-DLIB_SUFFIX=""` during configuration.
+ * Add Makefile target and harness to fuzz with libFuzzer (Phil Turnbull).
+ This can be run locally with `make libFuzzer` but the harness will be
+ integrated into oss-fuzz for large-scale fuzzing.
+ * Advertise `--validate-utf8` in usage information
+ (Nguyễn Thái Ngọc Duy).
+ * Makefile: use warnings with re2c.
+ * README: Add link to Python wrapper, prettify languages list
+ (Pavlo Kapyshin).
+ * README: Add link to cmark-scala (Tim Nieradzik, #196)
+
+[0.27.1]
+
+ * Set policy for CMP0063 to avoid a warning (#162).
+ Put set_policy under cmake version test.
+ Otherwise we get errors in older versions of cmake.
+ * Use VERSION_GREATER to clean up cmake version test.
+ * Improve afl target. Use afl-clang by default. Set default for path.
+
+[0.27.0]
+
+ * Update spec to 0.27.
+ * Fix warnings building with MSVC on Windows (#165, Hugh Bellamy).
+ * Fix `CMAKE_C_VISIBILITY_PRESET` for cmake versions greater than 1.8
+ (e.g. 3.6.2) (#162, Hugh Bellamy). This lets us build swift-cmark
+ on Windows, using clang-cl.
+ * Fix for non-matching entities (#161, Yuki Izumi).
+ * Modified `print_delimiters` (commented out) so it compiles again.
+ * `make format`: don't change order of includes.
+ * Changed logic for null/eol checks (#160).
+ + only check once for "not at end of line"
+ + check for null before we check for newline characters (the
+ previous patch would fail for NULL + CR)
+ * Fix by not advancing past both `\0` and `\n` (Yuki Izumi).
+ * Add test for NUL-LF sequence (Yuki Izumi).
+ * Fix memory leak in list parsing (Yuki Izumi).
+ * Use `cmark_mem` to free where used to alloc (Yuki Izumi).
+ * Allow a shortcut link before a `(` (jgm/CommonMark#427).
+ * Allow tabs after setext header line (jgm/commonmark.js#109).
+ * Don't let URI schemes start with spaces.
+ * Fixed h2..h6 HTML blocks (jgm/CommonMark#430). Added regression test.
+ * Autolink scheme can contain digits (Gábor Csárdi).
+ * Fix nullary function declarations in cmark.h (Nick Wellnhofer).
+ Fixes strict prototypes warnings.
+ * COPYING: Update file name and remove duplicate section and
+ (Peter Eisentraut).
+ * Fix typo (Pavlo Kapyshin).
+
+[0.26.1]
+
+ * Removed unnecessary typedef that caused build failure on
+ some platforms.
+ * Use `$(MAKE)` in Makefile instead of hardcoded `make` (#146,
+ Tobias Kortkamp).
+
+[0.26.0]
+
+ * Implement spec changes for list items:
+ - Empty list items cannot interrupt paragraphs.
+ - Ordered lists cannot interrupt paragraphs unless
+ they start with 1.
+ - Removed "two blank lines break out of a list" feature.
+ * Fix sourcepos for blockquotes (#142).
+ * Fix sourcepos for atx headers (#141).
+ * Fix ATX headers and thematic breaks to allow tabs as well as spaces.
+ * Fix `chunk_set_cstr` with suffix of current string (#139,
+ Nick Wellnhofer). It's possible that `cmark_chunk_set_cstr` is called
+ with a substring (suffix) of the current string. Delay freeing of the
+ chunk content to handle this case correctly.
+ * Export targets on installation (Jonathan Müller).
+ This allows using them in other cmake projects.
+ * Fix cmake warning about CMP0048 (Jonathan Müller).
+ * commonmark renderer: Ensure we don't have a blank line
+ before a code block when it's the first thing in a list
+ item.
+ * Change parsing of strong/emph in response to spec changes.
+ `process_emphasis` now gets better results in corner cases.
+ The change is this: when considering matches between an interior
+ delimiter run (one that can open and can close) and another delimiter
+ run, we require that the sum of the lengths of the two delimiter
+ runs mod 3 is not 0.
+ * Ported Robin Stocker's changes to link parsing in jgm/commonmark#101.
+ This uses a separate stack for brackets, instead of putting them on the
+ delimiter stack. This avoids the need for looking through the delimiter
+ stack for the next bracket.
+ * `cmark_reference_lookup`: Return NULL if reference is null string.
+ * Fix character type detection in `commonmark.c` (Nick Wellnhofer).
+ Fixes test failures on Windows and undefined behavior.
+ - Implement `cmark_isalpha`.
+ - Check for ASCII character before implicit cast to char.
+ - Use internal ctype functions in `commonmark.c`.
+ * Better documentation of memory-freeing responsibilities.
+ in `cmark.h` and its man page (#124).
+ * Use library functions to insert nodes in emphasis/link processing.
+ Previously we did this manually, which introduces many
+ places where errors can creep in.
+ * Correctly handle list marker followed only by spaces.
+ Previously when a list marker was followed only by spaces,
+ cmark expected the following content to be indented by
+ the same number of spaces. But in this case we should
+ treat the line just like a blank line and set list padding
+ accordingly.
+ * Fixed a number of issues relating to line wrapping.
+ - Extend `CMARK_OPT_NOBREAKS` to all renderers and add `--nobreaks`.
+ - Do not autowrap, regardless of width parameter, if
+ `CMARK_OPT_NOBREAKS` is set.
+ - Fixed `CMARK_OPT_HARDBREAKS` for LaTeX and man renderers.
+ - Ensure that no auto-wrapping occurs if
+ `CMARK_OPT_NOBREAKS` is enabled, or if output is CommonMark and
+ `CMARK_OPT_HARDBREAKS` is enabled.
+ * Set stdin to binary mode on Windows (Nick Wellnhofer, #113).
+ This fixes EOLs when reading from stdin.
+ * Add library option to render softbreaks as spaces (Pavlo
+ Kapyshin). Note that the `NOBREAKS` option is HTML-only
+ * renderer: `no_linebreaks` instead of `no_wrap`.
+ We generally want this option to prohibit any breaking
+ in things like headers (not just wraps, but softbreaks).
+ * Coerce `realurllen` to `int`. This is an alternate solution for pull
+ request #132, which introduced a new warning on the comparison
+ (Benedict Cohen).
+ * Remove unused variable `link_text` (Mathiew Duponchelle).
+ * Improved safety checks in buffer (Vicent Marti).
+ * Add new interface allowing specification of custom memory allocator
+ for nodes (Vicent Marti). Added `cmark_node_new_with_mem`,
+ `cmark_parser_new_with_mem`, `cmark_mem` to API.
+ * Reduce storage size for nodes by using bit flags instead of
+ separate booleans (Vicent Marti).
+ * config: Add `SSIZE_T` compat for Win32 (Vicent Marti).
+ * cmake: Global handler for OOM situations (Vicent Marti).
+ * Add tests for memory exhaustion (Vicent Marti).
+ * Document in man page and public header that one should use the same
+ memory allocator for every node in a tree.
+ * Fix ctypes in Python FFI calls (Nick Wellnhofer). This didn't cause
+ problems so far because all types are 32-bit on 32-bit systems and
+ arguments are passed in registers on x86-64. The wrong types could cause
+ crashes on other platforms, though.
+ * Remove spurious failures in roundtrip tests. In the commonmark writer we
+ separate lists, and lists and indented code, using a dummy HTML comment.
+ So in evaluating the round-trip tests, we now strip out
+ these comments. We also normalize HTML to avoid issues
+ having to do with line breaks.
+ * Add 2016 to copyright (Kevin Burke).
+ * Added `to_commonmark` in `test/cmark.py` (for round-trip tests).
+ * `spec_test.py` - parameterize `do_test` with converter.
+ * `spec_tests.py`: exit code is now sum of failures and errors.
+ This ensures that a failing exit code will be given when
+ there are errors, not just with failures.
+ * Fixed round trip tests. Previously they actually ran
+ `cmark` instead of the round-trip version, since there was a bug in
+ setting the ROUNDTRIP variable (#131).
+ * Added new `roundtrip_tests.py`. This replaces the old use of simple shell
+ scripts. It is much faster, and more flexible. (We will be able
+ to do custom normalization and skip certain tests.)
+ * Fix tests under MinGW (Nick Wellnhofer).
+ * Fix leak in `api_test` (Mathieu Duponchelle).
+ * Makefile: have leakcheck stop on first error instead of going through
+ all the formats and options and probably getting the same output.
+ * Add regression tests (Nick Wellnhofer).
+
+[0.25.2]
+
+ * Open files in binary mode (#113, Nick Wellnhofer). Now that cmark
+ supports different line endings, files must be openend in binary mode
+ on Windows.
+ * Reset `partially_consumed_tab` on every new line (#114, Nick Wellnhofer).
+ * Handle buffer split across a CRLF line ending (#117). Adds an internal
+ field to the parser struct to keep track of `last_buffer_ended_with_cr`.
+ Added test.
+
+[0.25.1]
+
+ * Release with no code changes. cmark version was mistakenly set to
+ 0.25.1 in the 0.25.0 release (#112), so this release just
+ ensures that this will cause no confusion later.
+
+[0.25.0]
+
+ * Fixed tabs in indentation (#101). This patch fixes S_advance_offset
+ so that it doesn't gobble a tab character when advancing less than the
+ width of a tab.
+ * Added partially_consumed_tab to parser. This keeps track of when we
+ have gotten partway through a tab when consuming initial indentation.
+ * Simplified add_line (only need parser parameter).
+ * Properly handle partially consumed tab. E.g. in
+
+ - foo
+
+ <TAB><TAB>bar
+
+ we should consume two spaces from the second tab, including two spaces
+ in the code block.
+ * Properly handle tabs with blockquotes and fenced blocks.
+ * Fixed handling of tabs in lists.
+ * Clarified logic in S_advance_offset.
+ * Use an assertion to check for in-range html_block_type.
+ It's a programming error if the type is out of range.
+ * Refactored S_processLines to make the logic easier to
+ understand, and added documentation (Mathieu Duponchelle).
+ * Removed unnecessary check for empty string_content.
+ * Factored out contains_inlines.
+ * Moved the cmake minimum version to top line of CMakeLists.txt
+ (tinysun212).
+ * Fix ctype(3) usage on NetBSD (Kamil Rytarowski). We need to cast value
+ passed to isspace(3) to unsigned char to explicitly prevent possibly
+ undefined behavior.
+ * Compile in plain C mode with MSVC 12.0 or newer (Nick Wellnhofer).
+ Under MSVC, we used to compile in C++ mode to get some C99 features
+ like mixing declarations and code. With newer MSVC versions, it's
+ possible to build in plain C mode.
+ * Switched from "inline" to "CMARK_INLINE" (Nick Wellnhofer).
+ Newer MSVC versions support enough of C99 to be able to compile cmark
+ in plain C mode. Only the "inline" keyword is still unsupported.
+ We have to use "__inline" instead.
+ * Added include guards to config.h
+ * config.h.in - added compatibility snprintf, vsnprintf for MSVC.
+ * Replaced sprintf with snprintf (Marco Benelli).
+ * config.h: include stdio.h for _vscprintf etc.
+ * Include starg.h when needed in config.h.
+ * Removed an unnecessary C99-ism in buffer.c. This helps compiling on
+ systems like luarocks that don't have all the cmake configuration
+ goodness (thanks to carlmartus).
+ * Don't use variable length arrays (Nick Wellnhofer).
+ They're not supported by MSVC.
+ * Test with multiple MSVC versions under Appveyor (Nick Wellnhofer).
+ * Fix installation dir of man-pages on NetBSD (Kamil Rytarowski).
+ * Fixed typo in cmark.h comments (Chris Eidhof).
+ * Clarify in man page that cmark_node_free frees a node's children too.
+ * Fixed documentation of --width in man page.
+ * Require re2c >= 1.14.2 (#102).
+ * Generated scanners.c with more recent re2c.
+
+[0.24.1]
+
+ * Commonmark renderer:
+ + Use HTML comment, not two blank lines, to separate a list
+ item from a following code block or list. This makes the
+ output more portable, since the "two blank lines" rule is
+ unique to CommonMark. Also, it allows us to break out of
+ a sublist without breaking out of all levels of nesting.
+ + `is_autolink` - handle case where link has no children,
+ which previously caused a segfault.
+ + Use 4-space indent for bullet lists, for increased portability.
+ + Use 2-space + newline for line break for increased portability (#90).
+ + Improved punctuation escaping. Previously all `)` and
+ `.` characters after digits were escaped; now they are
+ only escaped if they are genuinely in a position where
+ they'd cause a list item. This is achieved by changes in
+ `render.c`: (a) `renderer->begin_content` is only set to
+ false after a string of digits at the beginning of the
+ line, and (b) we never break a line before a digit.
+ Also, `begin_content` is properly initialized to true.
+ * Handle NULL root in `consolidate_text_nodes`.
+
+[0.24.0]
+
+ * [API change] Added `cmark_node_replace(oldnode, newnode)`.
+ * Updated spec.txt to 0.24.
+ * Fixed edge case with escaped parens in link destination (#97).
+ This was also checked against the #82 case with asan.
+ * Removed unnecessary check for `fenced` in `cmark_render_html`.
+ It's sufficient to check that the info string is empty.
+ Indeed, those who use the API may well create a code block
+ with an info string without explicitly setting `fenced`.
+ * Updated format of `test/smart_punct.txt`.
+ * Updated `test/spec.txt`, `test/smart_punct.txt`, and
+ `spec_tests.py` to new format.
+ * Fixed `get_containing_block` logic in `src/commonmark.c`.
+ This did not allow for the possibility that a node might have no
+ containing block, causing the commonmark renderer to segfault if
+ passed an inline node with no block parent.
+ * Fixed string representations of `CUSTOM_BLOCK`,
+ `CUSTOM_INLINE`. The old versions `raw_inline` and
+ `raw_block` were being used, and this led to incorrect xml output.
+ * Use default opts in python sample wrapper.
+ * Allow multiline setext header content, as per spec.
+ * Don't allow spaces in link destinations, even with pointy brackets.
+ Conforms to latest change in spec.
+ * Updated `scheme` scanner according to spec change. We no longer use
+ a whitelist of valid schemes.
+ * Allow any kind of nodes as children of `CUSTOM_BLOCK` (#96).
+ * `cmark.h`: moved typedefs for iterator into iterator section.
+ This just moves some code around so it makes more sense
+ to read, and in the man page.
+ * Fixed `make_man_page.py` so it includes typedefs again.
+
+[0.23.0]
+
+ * [API change] Added `CUSTOM_BLOCK` and `CUSTOM_INLINE` node types.
+ They are never generated by the parser, and do not correspond
+ to CommonMark elements. They are designed to be inserted by
+ filters that postprocess the AST. For example, a filter might
+ convert specially marked code blocks to svg diagrams in HTML
+ and tikz diagrams in LaTeX, passing these through to the renderer
+ as a `CUSTOM_BLOCK`. These nodes can have children, but they
+ also have literal text to be printed by the renderer "on enter"
+ and "on exit." Added `cmark_node_get_on_enter`,
+ `cmark_node_set_on_enter`, `cmark_node_get_on_exit`,
+ `cmark_node_set_on_exit` to API.
+ * [API change] Rename `NODE_HTML` -> `NODE_HTML_BLOCK`,
+ `NODE_INLINE_HTML` -> `NODE_HTML_INLINE`. Define aliases
+ so the old names still work, for backwards compatibility.
+ * [API change] Rename `CMARK_NODE_HEADER` -> `CMARK_NODE_HEADING`.
+ Note that for backwards compatibility, we have defined aliases:
+ `CMARK_NODE_HEADER` = `CMARK_NODE_HEADING`,
+ `cmark_node_get_header_level` = `cmark_node_get_heading_level`, and
+ `cmark_node_set_header_level` = `cmark_node_set_heading_level`.
+ * [API change] Rename `CMARK_NODE_HRULE` -> `CMARK_NODE_THEMATIC_BREAK`.
+ Defined the former as the latter for backwards compatibility.
+ * Don't allow space between link text and link label in a reference link
+ (spec change).
+ * Separate parsing and rendering opts in `cmark.h` (#88).
+ This change also changes some of these constants' numerical values,
+ but nothing should change in the API if you use the constants
+ themselves. It should now be clear in the man page which
+ options affect parsing and which affect rendering.
+ * xml renderer - Added xmlns attribute to document node (jgm/CommonMark#87).
+ * Commonmark renderer: ensure html blocks surrounded by blanks.
+ Otherwise we get failures of roundtrip tests.
+ * Commonmark renderer: ensure that literal characters get escaped
+ when they're at the beginning of a block, e.g. `> \- foo`.
+ * LaTeX renderer - better handling of internal links.
+ Now we render `[foo](#bar)` as `\protect\hyperlink{bar}{foo}`.
+ * Check for NULL pointer in _scan_at (#81).
+ * `Makefile.nmake`: be more robust when cmake is missing. Previously,
+ when cmake was missing, the build dir would be created anyway, and
+ subsequent attempts (even with cmake) would fail, because cmake would
+ not be run. Depending on `build/CMakeFiles` is more robust -- this won't
+ be created unless cmake is run. Partially addresses #85.
+ * Fixed DOCTYPE in xml output.
+ * commonmark.c: fix `size_t` to `int`. This fixes an MSVC warning
+ "conversion from 'size_t' to 'int', possible loss of data" (Kevin Wojniak).
+ * Correct string length in `cmark_parse_document` example (Lee Jeffery).
+ * Fix non-ASCII end-of-line character check (andyuhnak).
+ * Fix "declaration shadows a local variable" (Kevin Wojniak).
+ * Install static library (jgm/CommonMark#381).
+ * Fix warnings about dropping const qualifier (Kevin Wojniak).
+ * Use full (unabbreviated) versions of constants (`CMARK_...`).
+ * Removed outdated targets from Makefile.
+ * Removed need for sudo in `make bench`.
+ * Improved benchmark. Use longer test, since `time` has limited resolution.
+ * Removed `bench.h` and timing calls in `main.c`.
+ * Updated API docs; getters return empty strings if not set
+ rather than NULL, as previously documented.
+ * Added api_tests for custom nodes.
+ * Made roundtrip test part of the test suite run by cmake.
+ * Regenerate `scanners.c` using re2c 0.15.3.
+ * Adjusted scanner for link url. This fixes a heap buffer overflow (#82).
+ * Added version number (1.0) to XML namespace. We don't guarantee
+ stability in this until 1.0 is actually released, however.
+ * Removed obsolete `TIMER` macro.
+ * Make `LIB_INSTALL_DIR` configurable (Mathieu Bridon, #79).
+ * Removed out-of-date luajit wrapper.
+ * Use `input`, not `parser->curline` to determine last line length.
+ * Small optimizations in `_scan_at`.
+ * Replaced hard-coded 4 with `TAB_STOP`.
+ * Have `make format` reformat api tests as well.
+ * Added api tests for man, latex, commonmark, and xml renderers (#51).
+ * render.c: added `begin_content` field. This is like `begin_line` except
+ that it doesn't trigger production of the prefix. So it can be set
+ after an initial prefix (say `> `) is printed by the renderer, and
+ consulted in determining whether to escape content that has a special
+ meaning at the beginning of a line. Used in the commonmark renderer.
+ * Python 3.5 compatibility: don't require HTMLParseError (Zhiming Wang).
+ HTMLParseError was removed in Python 3.5. Since it could never be thrown
+ in Python 3.5+, we simply define a placeholder when HTMLParseError
+ cannot be imported.
+ * Set `convert_charrefs=False` in `normalize.py` (#83). This defeats the
+ new default as of python 3.5, and allows the script to work with python
+ 3.5.
+
+[0.22.0]
+
+ * Removed `pre` from blocktags scanner. `pre` is handled separately
+ in rule 1 and needn't be handled in rule 6.
+ * Added `iframe` to list of blocktags, as per spec change.
+ * Fixed bug with `HRULE` after blank line. This previously caused cmark
+ to break out of a list, thinking it had two consecutive blanks.
+ * Check for empty string before trying to look at line ending.
+ * Make sure every line fed to `S_process_line` ends with `\n` (#72).
+ So `S_process_line` sees only unix style line endings. Ultimately we
+ probably want a better solution, allowing the line ending style of
+ the input file to be preserved. This solution forces output with newlines.
+ * Improved `cmark_strbuf_normalize_whitespace` (#73). Now all characters
+ that satisfy `cmark_isspace` are recognized as whitespace. Previously
+ `\r` and `\t` (and others) weren't included.
+ * Treat line ending with EOF as ending with newline (#71).
+ * Fixed `--hardbreaks` with `\r\n` line breaks (#68).
+ * Disallow list item starting with multiple blank lines (jgm/CommonMark#332).
+ * Allow tabs before closing `#`s in ATX header
+ * Removed `cmark_strbuf_printf` and `cmark_strbuf_vprintf`.
+ These are no longer needed, and cause complications for MSVC.
+ Also removed `HAVE_VA_COPY` and `HAVE_C99_SNPRINTF` feature tests.
+ * Added option to disable tests (Kevin Wojniak).
+ * Added `CMARK_INLINE` macro.
+ * Removed need to disable MSVC warnings 4267, 4244, 4800
+ (Kevin Wojniak).
+ * Fixed MSVC inline errors when cmark is included in sources that
+ don't have the same set of disabled warnings (Kevin Wojniak).
+ * Fix `FileNotFoundError` errors on tests when cmark is built from
+ another project via `add_subdirectory()` (Kevin Wojniak).
+ * Prefix `utf8proc` functions to avoid conflict with existing library
+ (Kevin Wojniak).
+ * Avoid name clash between Windows `.pdb` files (Nick Wellnhofer).
+ * Improved `smart_punct.txt` (see jgm/commonmark.js#61).
+ * Set `POSITION_INDEPENDENT_CODE` `ON` for static library (see #39).
+ * `make bench`: allow overriding `BENCHFILE`. Previously if you did
+ this, it would clopper `BENCHFILE` with the default bench file.
+ * `make bench`: Use -10 priority with renice.
+ * Improved `make_autolink`. Ensures that title is chunk with empty
+ string rather than NULL, as with other links.
+ * Added `clang-check` target.
+ * Travis: split `roundtrip_test` and `leakcheck` (OGINO Masanori).
+ * Use clang-format, llvm style, for formatting. Reformatted all source files.
+ Added `format` target to Makefile. Removed `astyle` target.
+ Updated `.editorconfig`.
+
+[0.21.0]
+
+ * Updated to version 0.21 of spec.
+ * Added latex renderer (#31). New exported function in API:
+ `cmark_render_latex`. New source file: `src/latex.hs`.
+ * Updates for new HTML block spec. Removed old `html_block_tag` scanner.
+ Added new `html_block_start` and `html_block_start_7`, as well
+ as `html_block_end_n` for n = 1-5. Rewrote block parser for new HTML
+ block spec.
+ * We no longer preprocess tabs to spaces before parsing.
+ Instead, we keep track of both the byte offset and
+ the (virtual) column as we parse block starts.
+ This allows us to handle tabs without converting
+ to spaces first. Tabs are left as tabs in the output, as
+ per the revised spec.
+ * Removed utf8 validation by default. We now replace null characters
+ in the line splitting code.
+ * Added `CMARK_OPT_VALIDATE_UTF8` option and command-line option
+ `--validate-utf8`. This option causes cmark to check for valid
+ UTF-8, replacing invalid sequences with the replacement
+ character, U+FFFD. Previously this was done by default in
+ connection with tab expansion, but we no longer do it by
+ default with the new tab treatment. (Many applications will
+ know that the input is valid UTF-8, so validation will not
+ be necessary.)
+ * Added `CMARK_OPT_SAFE` option and `--safe` command-line flag.
+ + Added `CMARK_OPT_SAFE`. This option disables rendering of raw HTML
+ and potentially dangerous links.
+ + Added `--safe` option in command-line program.
+ + Updated `cmark.3` man page.
+ + Added `scan_dangerous_url` to scanners.
+ + In HTML, suppress rendering of raw HTML and potentially dangerous
+ links if `CMARK_OPT_SAFE`. Dangerous URLs are those that begin
+ with `javascript:`, `vbscript:`, `file:`, or `data:` (except for
+ `image/png`, `image/gif`, `image/jpeg`, or `image/webp` mime types).
+ + Added `api_test` for `OPT_CMARK_SAFE`.
+ + Rewrote `README.md` on security.
+ * Limit ordered list start to 9 digits, per spec.
+ * Added width parameter to `render_man` (API change).
+ * Extracted common renderer code from latex, man, and commonmark
+ renderers into a separate module, `renderer.[ch]` (#63). To write a
+ renderer now, you only need to write a character escaping function
+ and a node rendering function. You pass these to `cmark_render`
+ and it handles all the plumbing (including line wrapping) for you.
+ So far this is an internal module, but we might consider adding
+ it to the API in the future.
+ * commonmark writer: correctly handle email autolinks.
+ * commonmark writer: escape `!`.
+ * Fixed soft breaks in commonmark renderer.
+ * Fixed scanner for link url. re2c returns the longest match, so we
+ were getting bad results with `[link](foo\(and\(bar\)\))`
+ which it would parse as containing a bare `\` followed by
+ an in-parens chunk ending with the final paren.
+ * Allow non-initial hyphens in html tag names. This allows for
+ custom tags, see jgm/CommonMark#239.
+ * Updated `test/smart_punct.txt`.
+ * Implemented new treatment of hyphens with `--smart`, converting
+ sequences of hyphens to sequences of em and en dashes that contain no
+ hyphens.
+ * HTML renderer: properly split info on first space char (see
+ jgm/commonmark.js#54).
+ * Changed version variables to functions (#60, Andrius Bentkus).
+ This is easier to access using ffi, since some languages, like C#
+ like to use only function interfaces for accessing library
+ functionality.
+ * `process_emphasis`: Fixed setting lower bound to potential openers.
+ Renamed `potential_openers` -> `openers_bottom`.
+ Renamed `start_delim` -> `stack_bottom`.
+ * Added case for #59 to `pathological_test.py`.
+ * Fixed emphasis/link parsing bug (#59).
+ * Fixed off-by-one error in line splitting routine.
+ This caused certain NULLs not to be replaced.
+ * Don't rtrim in `subject_from_buffer`. This gives bad results in
+ parsing reference links, where we might have trailing blanks
+ (`finalize` removes the bytes parsed as a reference definition;
+ before this change, some blank bytes might remain on the line).
+ + Added `column` and `first_nonspace_column` fields to `parser`.
+ + Added utility function to advance the offset, computing
+ the virtual column too. Note that we don't need to deal with
+ UTF-8 here at all. Only ASCII occurs in block starts.
+ + Significant performance improvement due to the fact that
+ we're not doing UTF-8 validation.
+ * Fixed entity lookup table. The old one had many errors.
+ The new one is derived from the list in the npm entities package.
+ Since the sequences can now be longer (multi-code-point), we
+ have bumped the length limit from 4 to 8, which also affects
+ `houdini_html_u.c`. An example of the kind of error that was fixed:
+ `&ngE;` should be rendered as "≧̸" (U+02267 U+00338), but it was
+ being rendered as "≧" (which is the same as `&gE;`).
+ * Replace gperf-based entity lookup with binary tree lookup.
+ The primary advantage is a big reduction in the size of
+ the compiled library and executable (> 100K).
+ There should be no measurable performance difference in
+ normal documents. I detected only a slight performance
+ hit in a file containing 1,000,000 entities.
+ + Removed `src/html_unescape.gperf` and `src/html_unescape.h`.
+ + Added `src/entities.h` (generated by `tools/make_entities_h.py`).
+ + Added binary tree lookup functions to `houdini_html_u.c`, and
+ use the data in `src/entities.h`.
+ * Renamed `entities.h` -> `entities.inc`, and
+ `tools/make_entities_h.py` -> `tools/make_entitis_inc.py`.
+ * Fixed cases like
+ ```
+ [ref]: url
+ "title" ok
+ ```
+ Here we should parse the first line as a reference.
+ * `inlines.c`: Added utility functions to skip spaces and line endings.
+ * Fixed backslashes in link destinations that are not part of escapes
+ (jgm/commonmark#45).
+ * `process_line`: Removed "add newline if line doesn't have one."
+ This isn't actually needed.
+ * Small logic fixes and a simplification in `process_emphasis`.
+ * Added more pathological tests:
+ + Many link closers with no openers.
+ + Many link openers with no closers.
+ + Many emph openers with no closers.
+ + Many closers with no openers.
+ + `"*a_ " * 20000`.
+ * Fixed `process_emphasis` to handle new pathological cases.
+ Now we have an array of pointers (`potential_openers`),
+ keyed to the delim char. When we've failed to match a potential opener
+ prior to point X in the delimiter stack, we reset `potential_openers`
+ for that opener type to X, and thus avoid having to look again through
+ all the openers we've already rejected.
+ * `process_inlines`: remove closers from delim stack when possible.
+ When they have no matching openers and cannot be openers themselves,
+ we can safely remove them. This helps with a performance case:
+ `"a_ " * 20000` (jgm/commonmark.js#43).
+ * Roll utf8proc_charlen into utf8proc_valid (Nick Wellnhofer).
+ Speeds up "make bench" by another percent.
+ * `spec_tests.py`: allow `→` for tab in HTML examples.
+ * `normalize.py`: don't collapse whitespace in pre contexts.
+ * Use utf-8 aware re2c.
+ * Makefile afl target: removed `-m none`, added `CMARK_OPTS`.
+ * README: added `make afl` instructions.
+ * Limit generated generated `cmark.3` to 72 character line width.
+ * Travis: switched to containerized build system.
+ * Removed `debug.h`. (It uses GNU extensions, and we don't need it anyway.)
+ * Removed sundown from benchmarks, because the reading was anomalous.
+ sundown had an arbitrary 16MB limit on buffers, and the benchmark
+ input exceeded that. So who knows what we were actually testing?
+ Added hoedown, sundown's successor, which is a better comparison.
+
+[0.20.0]
+
+ * Fixed bug in list item parsing when items indented >= 4 spaces (#52).
+ * Don't allow link labels with no non-whitespace characters
+ (jgm/CommonMark#322).
+ * Fixed multiple issues with numeric entities (#33, Nick Wellnhofer).
+ * Support CR and CRLF line endings (Ben Trask).
+ * Added test for different line endings to `api_test`.
+ * Allow NULL value in string setters (Nick Wellnhofer). (NULL
+ produces a 0-length string value.) Internally, URL and
+ title are now stored as `cmark_chunk` rather than `char *`.
+ * Fixed memory leak in `cmark_consolidate_text_nodes` (#32).
+ * Fixed `is_autolink` in the CommonMark renderer (#50). Previously *any*
+ link with an absolute URL was treated as an autolink.
+ * Cope with broken `snprintf` on Windows (Nick Wellnhofer). On Windows,
+ `snprintf` returns -1 if the output was truncated. Fall back to
+ Windows-specific `_scprintf`.
+ * Switched length parameter on `cmark_markdown_to_html`,
+ `cmark_parser_feed`, and `cmark_parse_document` from `int`
+ to `size_t` (#53, Nick Wellnhofer).
+ * Use a custom type `bufsize_t` for all string sizes and indices.
+ This allows to switch to 64-bit string buffers by changing a single
+ typedef and a macro definition (Nick Wellnhofer).
+ * Hardened the `strbuf` code, checking for integer overflows and
+ adding range checks (Nick Wellnhofer).
+ * Removed unused function `cmark_strbuf_attach` (Nick Wellnhofer).
+ * Fixed all implicit 64-bit to 32-bit conversions that
+ `-Wshorten-64-to-32` warns about (Nick Wellnhofer).
+ * Added helper function `cmark_strbuf_safe_strlen` that converts
+ from `size_t` to `bufsize_t` and throws an error in case of
+ an overflow (Nick Wellnhofer).
+ * Abort on `strbuf` out of memory errors (Nick Wellnhofer).
+ Previously such errors were not being trapped. This involves
+ some internal changes to the `buffer` library that do not affect
+ the API.
+ * Factored out `S_find_first_nonspace` in `S_proces_line`.
+ Added fields `offset`, `first_nonspace`, `indent`, and `blank`
+ to `cmark_parser` struct. This just removes some repetition.
+ * Added Racket Racket (5.3+) wrapper (Eli Barzilay).
+ * Removed `-pg` from Debug build flags (#47).
+ * Added Ubsan build target, to check for undefined behavior.
+ * Improved `make leakcheck`. We now return an error status if anything
+ in the loop fails. We now check `--smart` and `--normalize` options.
+ * Removed `wrapper3.py`, made `wrapper.py` work with python 2 and 3.
+ Also improved the wrapper to work with Windows, and to use smart
+ punctuation (as an example).
+ * In `wrapper.rb`, added argument for options.
+ * Revised luajit wrapper.
+ * Added build status badges to README.md.
+ * Added links to go, perl, ruby, R, and Haskell bindings to README.md.
+
+[0.19.0]
+
+ * Fixed `_` emphasis parsing to conform to spec (jgm/CommonMark#317).
+ * Updated `spec.txt`.
+ * Compile static library with `-DCMARK_STATIC_DEFINE` (Nick Wellnhofer).
+ * Suppress warnings about Windows runtime library files (Nick Wellnhofer).
+ Visual Studio Express editions do not include the redistributable files.
+ Set `CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS` to suppress warnings.
+ * Added appyeyor: Windows continuous integration (`appveyor.yml`).
+ * Use `os.path.join` in `test/cmark.py` for proper cross-platform paths.
+ * Fixed `Makefile.nmake`.
+ * Improved `make afl`: added `test/afl_dictionary`, increased timeout
+ for hangs.
+ * Improved README with a description of the library's strengths.
+ * Pass-through Unicode non-characters (Nick Wellnhofer).
+ Despite their name, Unicode non-characters are valid code points. They
+ should be passed through by a library like libcmark.
+ * Check return status of `utf8proc_iterate` (#27).
+
+[0.18.3]
+
+ * Include patch level in soname (Nick Wellnhofer). Minor version is
+ tied to spec version, so this allows breaking the ABI between spec
+ releases.
+ * Install compiler-provided system runtime libraries (Changjiang Yang).
+ * Use `strbuf_printf` instead of `snprintf`. `snprintf` is not
+ available on some platforms (Visual Studio 2013 and earlier).
+ * Fixed memory access bug: "invalid read of size 1" on input `[link](<>)`.
+
+[0.18.2]
+
+ * Added commonmark renderer: `cmark_render_commonmark`. In addition
+ to options, this takes a `width` parameter. A value of 0 disables
+ wrapping; a positive value wraps the document to the specified
+ width. Note that width is automatically set to 0 if the
+ `CMARK_OPT_HARDBREAKS` option is set.
+ * The `cmark` executable now allows `-t commonmark` for output as
+ CommonMark. A `--width` option has been added to specify wrapping
+ width.
+ * Added `roundtrip_test` Makefile target. This runs all the spec
+ through the commonmark renderer, and then through the commonmark
+ parser, and compares normalized HTML to the test. All tests pass
+ with the current parser and renderer, giving us some confidence that
+ the commonmark renderer is sufficiently robust. Eventually this
+ should be pythonized and put in the cmake test routine.
+ * Removed an unnecessary check in `blocks.c`. By the time we check
+ for a list start, we've already checked for a horizontal rule, so
+ we don't need to repeat that check here. Thanks to Robin Stocker for
+ pointing out a similar redundancy in commonmark.js.
+ * Fixed bug in `cmark_strbuf_unescape` (`buffer.c`). The old function
+ gave incorrect results on input like `\\*`, since the next backslash
+ would be treated as escaping the `*` instead of being escaped itself.
+ * `scanners.re`: added `_scan_scheme`, `scan_scheme`, used in the
+ commonmark renderer.
+ * Check for `CMAKE_C_COMPILER` (not `CC_COMPILER`) when setting C flags.
+ * Update code examples in documentation, adding new parser option
+ argument, and using `CMARK_OPT_DEFAULT` (Nick Wellnhofer).
+ * Added options parameter to `cmark_markdown_to_html`.
+ * Removed obsolete reference to `CMARK_NODE_LINK_LABEL`.
+ * `make leakcheck` now checks all output formats.
+ * `test/cmark.py`: set default options for `markdown_to_html`.
+ * Warn about buggy re2c versions (Nick Wellnhofer).
+
+[0.18.1]
+
+ * Build static version of library in default build (#11).
+ * `cmark.h`: Add missing argument to `cmark_parser_new` (#12).
+
+[0.18]
+
+ * Switch to 2-clause BSD license, with agreement of contributors.
+ * Added Profile build type, `make prof` target.
+ * Fixed autolink scanner to conform to the spec. Backslash escapes
+ not allowed in autolinks.
+ * Don't rely on strnlen being available (Nick Wellnhofer).
+ * Updated scanners for new whitespace definition.
+ * Added `CMARK_OPT_SMART` and `--smart` option, `smart.c`, `smart.h`.
+ * Added test for `--smart` option.
+ * Fixed segfault with --normalize (closes #7).
+ * Moved normalization step from XML renderer to `cmark_parser_finish`.
+ * Added options parameter to `cmark_parse_document`, `cmark_parse_file`.
+ * Fixed man renderer's escaping for unicode characters.
+ * Don't require python3 to make `cmark.3` man page.
+ * Use ASCII escapes for punctuation characters for portability.
+ * Made `options` an int rather than a long, for consistency.
+ * Packed `cmark_node` struct to fit into 128 bytes.
+ This gives a small performance boost and lowers memory usage.
+ * Repacked `delimiter` struct to avoid hole.
+ * Fixed use-after-free bug, which arose when a paragraph containing
+ only reference links and blank space was finalized (#9).
+ Avoid using `parser->current` in the loop that creates new
+ blocks, since `finalize` in `add_child` may have removed
+ the current parser (if it contains only reference definitions).
+ This isn't a great solution; in the long run we need to rewrite
+ to make the logic clearer and to make it harder to make
+ mistakes like this one.
+ * Added 'Asan' build type. `make asan` will link against ASan; the
+ resulting executable will do checks for memory access issues.
+ Thanks @JordanMilne for the suggestion.
+ * Add Makefile target to fuzz with AFL (Nick Wellnhofer)
+ The variable `$AFL_PATH` must point to the directory containing the AFL
+ binaries. It can be set as an environment variable or passed to make on
+ the command line.
+
+[0.17]
+
+ * Stripped out all JavaScript related code and documentation, moving
+ it to a separate repository (<https://github.com/jgm/commonmark.js>).
+ * Improved Makefile targets, so that `cmake` is run again only when
+ necessary (Nick Wellnhofer).
+ * Added `INSTALL_PREFIX` to the Makefile, allowing installation to a
+ location other than `/usr/local` without invoking `cmake`
+ manually (Nick Wellnhofer).
+ * `make test` now guarantees that the project will
+ be rebuilt before tests are run (Nick Wellnhofer).
+ * Prohibited overriding of some Makefile variables (Nick Wellnhofer).
+ * Provide version number and string, both as macros
+ (`CMARK_VERSION`, `CMARK_VERSION_STRING`) and as symbols
+ (`cmark_version`, `cmark_version_string`) (Nick Wellnhofer). All of
+ these come from `cmark_version.h`, which is constructed from a
+ template `cmark_version.h.in` and data in `CMakeLists.txt`.
+ * Avoid calling `free` on null pointer.
+ * Added an accessor for an iterator's root node (`cmark_iter_get_root`).
+ * Added user data field for nodes (Nick Wellnhofer). This is
+ intended mainly for use in bindings for dynamic languages, where
+ it could store a pointer to a target language object (#287). But
+ it can be used for anything.
+ * Man renderer: properly escape multiline strings.
+ * Added assertion to raise error if finalize is called on a closed block.
+ * Implemented the new spec rule for emphasis and strong emphasis with `_`.
+ * Moved the check for fence-close with the other checks for end-of-block.
+ * Fixed a bug with loose list detection with items containings
+ fenced code blocks (#285).
+ * Removed recursive algorithm in `ends_with_blank_line` (#286).
+ * Minor code reformatting: renamed parameters.
+
+[0.16]
+
+ * Added xml renderer (XML representation of the CommonMark AST,
+ which is described in `CommonMark.dtd`).
+ * Reduced size of gperf entity table (Nick Wellnhofer).
+ * Reworked iterators to allow deletion of nodes during iteration
+ (Nick Wellnhofer).
+ * Optimized `S_is_leaf`.
+ * Added `cmark_iter_reset` to iterator API.
+ * Added `cmark_consolidate_text_nodes` to API to combine adjacent
+ text nodes.
+ * Added `CMARK_OPT_NORMALIZE` to options (this combines adjacent
+ text nodes).
+ * Added `--normalize` option to command-line program.
+ * Improved regex for HTML comments in inline parsing.
+ * Python is no longer required for a basic build from the
+ repository.