Log

Author Commit Date CI Message
Martin Mitas a80e2e1a 2019-03-18T00:49:55 md_is_setext_underline: Remove useless duplicated code.
Martin Mitas 1a248650 2019-03-16T09:39:00 Fix building with MD4C_USE_UTF16.
Martin Mitas 2670043f 2019-03-13T07:50:34 Bump version to 0.3.1
Martin Mitas 2dd96ab4 2019-03-12T09:56:11 Fix O(n^2) in handling the "rule of three". We had to break the list of potential '*' openers into multiple ones so we do not have to walk it when looking for matching length due to the "rule of three" for intraword delimiter runs. Fixes #63.
Martin Mitas b2108652 2019-03-11T21:13:15 md_analyze_line: Fix O(n^2) in thematic break handling. Fixes #66.
Martin Mitas 37104fc2 2019-03-11T20:26:58 md_is_code_span: Fix crash at EOF. Fixes #65.
Martin Mitas 966b8e39 2019-03-11T19:56:46 md_is_link_title: Stop on ')' lin ()-style title. Fixes #60.
Martin Mitas fc27108e 2019-03-11T19:55:08 test/pathological_tests.py: Output test durations.
Martin Mitas 53f65852 2019-03-11T19:03:34 test/spec.txt: Little update. Somehow we were having little different spec.txt version that the one from CommonMark repo tag 0.28. But we still pass all its compliance test suite.
Martin Mitas 089174b5 2019-03-11T13:59:53 CHANGELOG.md: Update.
Martin Mitas 17c9b32b 2019-03-10T18:23:39 Move autolink detection into md_collect_marks(). It has to be done at the same time as raw inline HTML and code spans.
Martin Mitas 685b7144 2019-03-10T11:20:39 Move codespan detection from md_analyze_backtick() into... md_is_code_span(), called from md_collect_marks(). We have to do this at the same time as detecting raw inline HTML to follow CommonMark priority requirements. Also it is done very differently now: When scanning for the closer mark, we remember (the latest) position of potential closers for all other lengths as well. This means that: (1) If we find it, we reduced the task because all subsequent scan shall begin after the closer. (2) If we do not find it, then we have to reach the end of the block and hence we then know (for every allowed marker length) the position of last such backtick sequence. (3) That makes the guaranty that any subsequent call with either succeed in its scan (and reduce the task even further); or that we shall be able to detect instantly there is no suitable closer. I.e. every call either reduces the task by O(n) scan (1); or collects all the data in O(n) because (2) happens at most once; or fails in O(1) (3). This makes O(n) guaranty of the function complexity. Fixes #59.
Martin Mitas 0cb61205 2019-03-10T10:50:23 Move raw inline HTML detection from md_analyze_lt_qt() into md_collect_marks(). Fixes #58: For resolving raw inline HTML the function tried closer with all potential openers, because raw HTML can have '<' inside of an attribute. However this caused O(n^2) for input like "<><><><><><><>...". We solved by handling raw HTML in earlier stage, directly in md_collect_marks(), where we can scan linerary forward. Fixes #61: As a side effect, this also fixes the issue that MD_FLAG_NOHTMLSPANS disabled also recognition of CommonMark autolinks.
Martin Mitas cbae1793 2019-02-18T11:55:17 md_analyze_line: Fix propagation of uninitialized variable. Actually it should not be harmful because the consumer should use the variable MD_CONTAINER::task_mark_off only when MD_CONTAINER::is_task flag is set and it that case the task_mark_off _is_ initialized. (CID 1476829)
Martin Mitas 30cfd4e3 2019-02-13T12:27:21 appveyor.yml: Fix syntax.
Martin Mitas e43ac60a 2019-02-13T12:25:27 appveyor.yml: CMake 3.13.3 seems to always equire path to project root.
Martin Mitas 7ca80c6f 2019-02-13T11:26:19 CHANGELOG.md: Add note about building as shared lib.
Martin Mitas 1ea4b3e2 2019-02-11T10:10:26 README.md + CHANGELOG.md: More updates.
Martin Mitas 2c1dddc1 2019-02-11T09:29:53 README.md: Minor update.
Martin Mitas 5a5f10ef 2019-02-10T23:08:54 CHANGELOG.md: Update for version 0.3.0.
Martin Mitas 00a70fea 2019-02-10T22:59:49 Bump version to 0.3.0
Martin Mitáš 8e01a769 2019-02-10T22:58:42 Implement task lists. (#50) Fixes #30.
Lisandro Damián Nicanor Pérez Meyer 0b95bcc9 2019-02-09T19:03:05 Fix installation path of pkgconfig file. If the package is compiled on a multiarch-enabled distribution (Debian and derivatives) the resulting md4c.pc file will have a m-a path in it. In this case it's better to install into LIBDIR.
Martin Mitas b9fcd470 2019-02-09T11:01:56 CHANGELOG.md: Update.
Martin Mitas d32aa2e0 2019-02-09T10:40:52 Fix conflict in parsing permissive autolinks and ordinary links. The issues is caused by the fact that we do not know exact position of permissive auto-link in time of md_collect_marks() because there is no syntax to mark its end on the 1st place. This causes that eventually, the closer mark in ctx->marks[] can be out-of-order somewhat. As a consequence, if some other mark range (e.g. ordinary link) shadows the auto-link, the closer mark may be left outside the shadowed range and survive till the phase when we generate the output. We fix by using an extra mark flag to remember we did really output the opener mark, and output the closer only in such case. Fixes #53.
Martin Mitas f1f2f306 2019-02-09T09:40:25 md_analyze_permissive_url_autolink: Minor cleanup.
Martin Mitas bfca107d 2019-02-08T09:23:20 Build: Allow again building MD4C as static lib. * On Windows, we build static lib by default, as there is no /usr/lib counterpart. * On other systems the shared lib is the default. * Use option BUILD_SHARED_LIBS to override it: $ cmake -DBUILD_SHARED_LIBS=ON path_to_root # to build shared lib $ cmake -DBUILD_SHARED_LIBS=OFF path_to_root # to build static lib
Lisandro Damián Nicanor Pérez Meyer 69fcc953 2019-02-07T16:04:16 Remove useless instructions. (#52) The library is built as a shared library by default. Adding a static configuration requires some more work, and probably not really needed, most people will just embed the code.
Lisandro Damián Nicanor Pérez Meyer 5f33d933 2019-02-07T15:54:25 Build md4c as a shared library. (#49) Build md4c as a shared library. - Define the current version in the main CMakeLists.txt, so it can be used within the project. - Define VERSION, SOVERSION and PUBLIC_HEADER as target properties. - Be able to install both libmd4c and md2html. - Create a pkg-config file. Fixes #48
Martin Mitas c340e78b 2019-02-06T04:59:26 md_analyze_inlines: Simplify the code path for table_mode.
Martin Mitas a6cf8ff6 2019-02-06T04:36:01 CHANGELOG.md: Small update.
Martin Mitas 67401e70 2019-02-06T04:31:25 md_analyze_inlines: Resolve table cell boundaries before links. This brings some corner cases closer to cmark-gfm. Also fixes #51.
Martin Mitas 00236fc7 2019-02-05T12:59:44 Update years in the files changed this year and in LICENSE.md.
Martin Mitas 03f58685 2019-02-05T10:13:34 md4c.h: Rename and refactorize MD_RENDERER struct. * Rename MD_RENDERER to MD_PARSER. (Typedef to provide the original name is provided to minimize disruption of existing code.) * Reorder its members to make better sense. * Add abi_version member (hopefully, it shall never be needed ;-) * Update md2html utility to deal with the change. Rationale: This is done in order to prepare for long-term maintenance of ABI compatibility, as there is no work-in-progress to be buildable as shared lib, and be included in some Linux distros.
Martin Mitas 162b5fe3 2019-02-05T10:05:49 Add CHANGELOG.md.
Martin Mitas a505f696 2019-02-03T14:30:06 md_process_table_row: Enforce that all trable raws have the same count of cells. The count of columns is derived from the table header underline. If any other table line (i.e. the header line, or body line) has too few cells, additional empty cells are generated automatically. If the line has too many cells, the bogus ones are silently ignored. This allows consumers to be more simplistic; and it also seems to match behavior of Github more closely.
Martin Mitas 69e914b1 2019-02-03T13:29:47 README.md: Minor wording enhancements.
Martin Mitas da511fa4 2019-02-03T00:45:20 md_is_entity_str(): Fix using bad offset and buffer overflow situation. Fixes #47.
Martin Mitas 7d8f253f 2018-11-18T11:24:37 md_enter_leave_span_a: Fix calling md_free_attribute() on uninitialized data. (Coverity issue CID 1475544)
Craig Barnes e6a51bd6 2018-07-12T03:37:09 Add "-Wall" to CFLAGS when using Clang as compiler See also: * https://cmake.org/cmake/help/v3.12/variable/CMAKE_LANG_COMPILER_ID.html * https://cmake.org/cmake/help/v3.12/variable/CMAKE_COMPILER_IS_GNUCC.html
Martin Mitas 2f79185b 2018-06-11T18:40:48 Bump version to 0.2.7.
Martin Mitas 8fc692ba 2018-06-11T18:17:26 md_rollback: Do not touch TABLECELLBOUNDARIES chain. This chain is not normal opener/closer inline mark chain. Fixes #42.
Martin Mitas 5710bfec 2018-06-11T14:13:28 Fix/simplify handling of end-of-file special mark. Fixes #43.
Martin Mitas e6e2ea4c 2018-06-11T11:43:47 md_analyze_line: Fix mixing list and table parsing. If table header underline is not nested the same way as the preceding line (i.e. the wannabe table header line), then it cannot form a table. Fixes #41.
Martin Mitas cb7ecd71 2018-05-30T00:29:01 Bump version to 0.2.6.
Martin Mitas 4ef024fb 2018-05-29T23:30:02 md_process_inlines: Fix link/image closers spanning over multiple lines. Fixes #40.
Martin Mitas 99a55689 2018-05-29T22:42:24 md_is_inline_link_spec_helper: Link destination is mandatory... ... unless it is omitted also with the title.
Martin Mitas e5feaf2c 2018-05-29T19:42:13 md_is_named_entity_contents: Fix buffer overflow. Fixes #38.
Martin Mitas 469873ee 2018-05-29T19:06:39 md_is_link_label: Prevent read from lines[] beyond its size. Fixes #37.
Martin Mitas 7deaccf6 2018-05-29T18:32:10 md_is_link_label: Fix if the link label contains just backslash escapes. The function did not remember the label start line index, leading to bad consequences. Fixes #39.
Martin Mitas 387bd020 2018-05-28T23:09:09 Fix misleading comment.
Martin Mitas 00ca0604 2018-05-28T22:03:49 Bump version to 0.2.5
Martin Mitas bf022cb6 2018-05-28T21:14:45 Fix md_split_simple_pairing_mark(). When splitting a mark into two, make sure each of them gets the right share od dummies for case that we will have to split once more. Fixes #36.
Martin Mitas e7b84d65 2018-05-28T21:09:32 pathological_tests.py: Fix test compatibility with Windows.
Martin Mitas 81e2a5ca 2018-04-12T17:03:37 pathological_tests.py: Test deeply nested lists.
Martin Mitas 21d6cc9d 2018-04-12T12:03:18 md2html.c: Fix possible overflow in membuf_grow().
Martin Mitas 26c5268e 2018-04-12T11:51:21 md2html.c: Add newline to some error messages.
Martin Mitas fdc1d61e 2018-04-11T19:47:11 In md_is_atxheader_line(), set *p_end on success. This prevents reiteration over the ATX header prefix in the caller.
Martin Mitas 0d1a41a4 2018-03-28T08:21:21 md_build_attr_append_substr: Fix +1 allocation error. Fixes #33.
Martin Mitas e0002e2b 2017-12-27T09:45:34 md4c.h: Fix some copy&paste errors in comments.
Martin Mitas 3cf6637b 2017-12-10T16:11:36 run-tests.sh: Use 'py' utility if available.
Martin Mitas 8bb5e2dc 2017-09-29T23:42:36 md4c.h: Fix typo in an #error message.
Martin Mitas c3c1f9b0 2017-09-29T23:37:31 README.md: Minor fix.
Martin Mitas afc779f9 2017-09-11T11:07:05 Avoid initializing strings with literals without '\0' terminator. It improves maintainability of the code and it should also fix some MSVC2015 warnings (see #26).
Martin Mitas 5f47a5cb 2017-09-11T10:55:21 md_build_attribute: Handle U+0000 character.
Martin Mitas bad11ede 2017-08-31T14:49:18 Fix path in codecov.yml
Martin Mitas 44fc7cf2 2017-08-30T16:06:44 Merge branch 'master' of https://github.com/mity/md4c
Martin Mitas 7906f4ee 2017-08-30T16:05:27 Add codecov.yml to ignore test dir in coverage reports.
Martin Mitas 8bfb6785 2017-08-28T16:16:59 render_html: Get rid of global variable. This is a residue which by mistake survived the isolation of the rendering code in the c850843c12468c6bd500b4c1d86653bdac5628d4.
Martin Mitas dc3dde78 2017-08-28T16:14:04 render_html: Add a new line after <ol>. This makes the behavior more consistent with <ul>.
Martin Mitas 19b24bdd 2017-08-16T18:15:19 Simplify the pathological test "many references".
Martin Mitas 07cec7dc 2017-08-16T16:34:50 Add regression test for #24.
Martin Mitas 2e0a74ba 2017-08-16T16:01:45 Fix problematic link destinations with angle brackets. Fixes #24.
Martin Mitas 9b8058d5 2017-08-13T11:47:18 .travis.yml: Make sure we make a debug build. This should be more friendly to code coverage analysis.
Martin Mitas a2d8c37b 2017-08-13T11:24:24 README.md: Improve badge labels.
Martin Mitas 71aa92db 2017-08-13T11:03:47 .travis.yml: Install python3 for running tests.
Martin Mitas 944139e5 2017-08-13T10:57:12 Create code coverage report by lcov.
Martin Mitas 4f4bbcaa 2017-08-13T10:47:48 Migrate code coverage reporting from coveralls.io to codecov.io.
Martin Mitas 17ad25ee 2017-08-03T11:59:25 CMakeLists.txt: Do not force -O2 in the release build. With newer gcc (7.1), -O3 and -O2 makes real difference in the resulted performance. On my Linux machine it makes about 10% when tested with Cmark's `make bench`.
Martin Mitas 3571c2f0 2017-08-02T00:41:14 Bump version to 0.2.3.
Martin Mitas 70925cac 2017-08-02T00:40:27 README.md: Upgrade CommonMark version to 0.28.
Martin Mitas 25228d5d 2017-01-08T09:25:10 md_is_link_destination_B: Apply new spec rules for parenthesis. The specification now allows nesting parenthesis inside a link destination as long as opening and closing ones are balanced.
Martin Mitas a847f552 2017-01-08T09:14:49 md_process_inlines: Apply new spec rules for emph/strong emph. The spec now states that for ***foo*** we have to genarate <em><strong>foo</strong></em> instead of <strong><em>foo</em></strong>
Martin Mitas ee3bee1a 2017-08-02T00:37:18 Upgrade to CommonMark specification 0.28.
Martin Mitas 938460d5 2017-07-24T21:17:53 Improve/unify output of test scripts.
Martin Mitas c52a50a3 2017-07-24T21:07:09 pathological_tests.py: Add test for reference definition lookup.
Martin Mitas f0103c16 2017-07-25T00:26:43 MD_MARK structure: Do not limit prev/next members to 24 bits. For normal kind of input, using full 32 bits makes no big difference. And limiting those members to 24 bits was maybe a security issue. That implied a limit of 2 ** 24 == 16,777,216 marks per a single block. As big as it may seem, malicious input may contain more. And if the input is carefully crafted, the mark chains could theoretically form a circles due to some overflows in these members, which could maybe make the parser to never finish.
Martin Mitas 591b2d21 2017-07-25T00:08:51 md_analyze_marks: Make the function inline.
Martin Mitas 61d38ef4 2017-07-24T23:59:23 md_analyze_marks: Remove unneeded parameters.
Martin Mitas c51fb310 2017-07-24T23:14:05 md_analyze_marks: Walk only required range of the marks. This changes causes that when recursing to analysis of link contents, only the marks between the link opener and closer are iterated in md_analyze_marks(). Fixes #22
Martin Mitas a27aefde 2017-07-24T20:17:50 pathological_tests.py: Allow short option -p as a synonym of --program.
Martin Mitas f4f7b223 2017-07-24T20:15:09 pathological_tests.py: Allow Windowish line ends.
Martin Mitas 26f14899 2017-07-24T19:27:27 Add pathological_tests.py from cmark.
Martin Mitas ad4f28bb 2017-07-24T20:09:23 md_analyze_simple_pairing_mark: Fix the "rule of three". If the first emphasis opener is refused due the rule of three, a previous opener is examined. However the variable opener_orig_size_module3 was not (re)set accordingly. Fixes #21.
Martin Mitas e351a1d5 2017-07-24T19:42:57 md_collect_marks: Minor refactorization of emhasis handler.
Martin Mitas 70d73941 2017-07-22T00:56:23 md_build_attribute: Propagate NULL string if attribute is empty.
Martin Mitas ca098547 2017-07-20T15:54:00 Avoid heap allocations when building trivial MD_ATTRIBUTE.
Martin Mitas a638a422 2017-07-18T19:04:08 md_build_ref_def_hashtable: Fix variable conflict. By copy&paste error, we have used two nested loops to use the same iterator.
Martin Mitas 6bc0b861 2017-07-18T18:50:07 Merge branch 'hash'
Martin Mitas cfbce759 2017-07-18T18:01:02 Rework ref. def. dictionary. It now uses FNV1a and we now sort/bsearch only contents of single bucket. Additionally we fix #20 by disabling the invalid ref. definitions during hashtable build.