summaryrefslogtreecommitdiff
path: root/src/node.c
AgeCommit message (Collapse)Author
2020-01-23Rearrange struct cmark_nodeNick 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.
2020-01-23Improve packing of struct cmark_listNick Wellnhofer
Allows to reduce size of struct cmark_node later.
2020-01-23Use C string instead of chunk for literal textNick Wellnhofer
Use zero-terminated C strings and a separate length field instead of cmark_chunks. Literal inline text will now be copied from the parent block's content buffer, slowing the benchmark down by 10-15%. The node struct never references memory of other nodes now, fixing #309. 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.
2020-01-23Use C string instead of chunk for custom block contentsNick Wellnhofer
Reduces size of struct cmark_node by 8 bytes.
2020-01-23Use C string instead of chunk for link URL and titleNick Wellnhofer
Use zero-terminated C strings instead of cmark_chunks without storing the length. This introduces a few additional strlen computations, but overhead should be low. Allows to reduce size of struct cmark_node later.
2020-01-23Use C string instead of chunk for code info and literalNick Wellnhofer
Use zero-terminated C strings instead of cmark_chunks without storing the length. The length of code literals will be readded in a later commit. strlen overhead for code info should be negligible. Reduces size of struct cmark_node by 8 bytes.
2020-01-23Helper function to set C strings in nodesNick Wellnhofer
2017-06-02Fixed cmark_node_get_list_start to return 0 for bullet lists...John MacFarlane
as documented! Closes #202.
2016-06-23Removed check for same mem allocator in S_can_contain.John MacFarlane
This is too strict, as it prevents the use of dynamically loaded extensions: see https://github.com/jgm/cmark/pull/123#discussion_r67231518. Documented in man page and public header that one should use the same memory allocator for every node in a tree.
2016-06-06msvc: Fix warnings and errorsVicent Marti
2016-06-06mem: Rename the new APIsVicent Marti
2016-06-06cmark: Implement support for custom allocatorsVicent Marti
2016-06-06cmake: Global handler for OOM situationsVicent Marti
2016-03-12Switch 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.
2016-01-11cmark_node_replace - unlink, but don't free, oldnode.John MacFarlane
2016-01-11Removed unnecessary call to cmark_node_unlink in cmark_node_replace.John MacFarlane
2016-01-10Added cmark_node_replace(oldnode, newnode).John MacFarlane
API change. I've found in using the API that this is very often wanted.
2016-01-08Fixed string representations of CUSTOM_BLOCK, CUSTOM_INLINE.John MacFarlane
The old versions raw_inline and raw_block were being used, and this led to incorrect xml output.
2015-12-31Allow NODE_ITEM inside NODE_CUSTOM_BLOCK.John MacFarlane
2015-12-30Allow both block and inline nodes as children of CUSTOM_BLOCK.John MacFarlane
Closes #96.
2015-12-28Rename NODE_HTML -> NODE_HTML_BLOCK, NODE_INLINE_HTML -> NODE_HTML_INLINE.John MacFarlane
API change. Sorry, but this is the time to break things, before 1.0 is released. This matches the recent changes to CommonMark.dtd.
2015-12-22Rename hrule -> thematic_break.John MacFarlane
CMARK_NODE_HRULE -> CMARK_NODE_THEMATIC_BREAK. However we've defined the former as the latter to keep backwards compatibility. See jgm/CommonMark 8fa94cb460f5e516b0e57adca33f50a669d51f6c
2015-12-22CMARK_NODE_HEADER -> CMARK_NODE_HEADING.John MacFarlane
Defined CMARK_NODE_HEADER to CMARK_NODE_HEADING to ease the transition.
2015-12-22Rename 'header' -> 'heading'.John MacFarlane
See jgm/CommonMark commit 0cdbcee4e840abd0ac7db93797b2b75ca4104314 Note that we have defined cmark_node_get_header_level = cmark_node_get_heading_level and cmark_node_set_header_level = camrk_node_set_heading_level for backwards compatibility in the API.
2015-12-19Fixed S_can_contain to allow custom nodes to have children.John MacFarlane
2015-12-19Changed API for CUSTOM_BLOCK and CUSTOM_INLINE.John MacFarlane
Instead of using their `as.literal` content, we now give each custom node *two* literal fields, one to be printed on entering the node (before rendering the children, if any), the other on exiting (after rendering children). This gives us the flexibility to have custom nodes with children.
2015-12-19Rename RAW_BLOCK -> CUSTOM_BLOCK, RAW_INLINE -> CUSTOM_INLINE.John MacFarlane
2015-12-19Added RAW_BLOCK and RAW_INLINE node types.John MacFarlane
These are passed through verbatim by all writers, with no escaping. 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 RAW_BLOCK.
2015-12-19Use fully qualified versions of constants.John MacFarlane
2015-08-10Remove need to disable MSVC warning 4244Kevin Wojniak
2015-08-10Remove need to disable MSVC warning 4800Kevin Wojniak
2015-07-27Use clang-format, llvm style, for formatting.John MacFarlane
* Reformatted all source files. * Added 'format' target to Makefile. * Removed 'astyle' target. * Updated .editorconfig.
2015-05-14Store link URL and title as cmark_chunkNick Wellnhofer
2015-02-14astyle changes (code formatting only).John MacFarlane
2015-01-21Avoid free(0) for link titles and URLs.John MacFarlane
2015-01-21Avoid trying to free string_contents for inlines.John MacFarlane
This avoids an unnecessary free(0) -- and perhaps free(???). However, ltrace reveals that there is still a free(0) happening, with some other source.
2015-01-20Add user data field for nodesNick Wellnhofer
2015-01-05Reformatted code consistently with astyle.John MacFarlane
2014-12-28Added cmark_node_set_list_delim, cmark_node_get_list_delim.John MacFarlane
Even though this doesn't make a difference in default HTML output, it's worth keeping track; some output formats may allow you to distinguish lists with `1)` and with `1.` delimiters.
2014-12-28Added end_column to cmark_node struct.John MacFarlane
API exports cmark_node_get_column. XML writer indicates start and end line and column for block-level nodes.
2014-12-28Rename CMARK_NODE_LIST_ITEM -> CMARK_NODE_ITEM.John MacFarlane
2014-12-28Rename cmark_node_type_string -> cmark_node_get_type_string.John MacFarlane
And export in cmark.h public header. Also, use lowercase names, not uppercase.
2014-12-28Expose cmark_node_type_string in node.h (private header).John MacFarlane
Previously was static function S_type_string.
2014-12-16Added 'literal' field to 'code' struct.John MacFarlane
In the last few commits we were using as.code.fenced and as.literal at the same time for NODE_CODE_BLOCK, which obviously led to problems.
2014-12-15Re-added cmark_ prefix to strbuf and chunk.John MacFarlane
Reverts 225d720.
2014-12-14Rename get/set_string_content -> get/set_literal.John MacFarlane
2014-12-14Use chunk for fenced code info, instead of strbuf.John MacFarlane
2014-12-14Use as.literal instead of string_content for HTML and code blocks.John MacFarlane
This is for consistency with the other types of nodes that have literal strings as contents.
2014-12-14Rename CMARK_NODE_INLINE_CODE -> CMARK_NODE_CODE.John MacFarlane
2014-12-13Added iterator interface to API, removed cmark_walk.John MacFarlane
* Added `iterator.c`, `iterator.h`. * Removed `cmark_walk`. * Replaced `cmark_walk` with iterator in HTML renderer. * Replaced API test for `cmark_walk` with simple iterator test.