diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-03 19:18:35 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-03 19:18:35 +0300 |
| commit | 473d922faed49241a5d29d9e37dc4819cd512006 (patch) | |
| tree | d3c38198beb42cac134d08410e4ad1dbfe42475f /cmark | |
| parent | 2a3a110dac53b271caf9aa97776cf95efecc83bc (diff) | |
| download | Project-Tick-473d922faed49241a5d29d9e37dc4819cd512006.tar.gz Project-Tick-473d922faed49241a5d29d9e37dc4819cd512006.zip | |
NOISSUE remove unused files
Signed-off-by: Mehmet Samet Duman <yongdohyun@projecttick.org>
Diffstat (limited to 'cmark')
| -rw-r--r-- | cmark/changelog.txt | 1552 |
1 files changed, 0 insertions, 1552 deletions
diff --git a/cmark/changelog.txt b/cmark/changelog.txt deleted file mode 100644 index 3cb825bd9e..0000000000 --- a/cmark/changelog.txt +++ /dev/null @@ -1,1552 +0,0 @@ -[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: - `≧̸` should be rendered as "≧̸" (U+02267 U+00338), but it was - being rendered as "≧" (which is the same as `≧`). - * 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. |
