aboutsummaryrefslogtreecommitdiff
path: root/src/cmark.h
blob: d14323074d3ef93b7840a65c1466006d8ed4bf55 (plain)
  1. #ifndef CMARK_H
  2. #define CMARK_H
  3. #include <stdio.h>
  4. #include "cmark_export.h"
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. /// # NAME
  9. ///
  10. /// cmark - CommonMark parsing, manipulating, and rendering
  11. /// # SIMPLE INTERFACE
  12. /// Current version of library.
  13. #define CMARK_VERSION "0.1"
  14. /// Convert `text` (assumed to be a UTF-8 encoded string with length `len`)
  15. /// from CommonMark Markdown to HTML, returning a null-terminated,
  16. /// UTF-8-encoded string.
  17. CMARK_EXPORT
  18. char *cmark_markdown_to_html(const char *text, int len);
  19. /// # NODE STRUCTURE
  20. ///
  21. typedef enum {
  22. // Block
  23. CMARK_NODE_DOCUMENT,
  24. CMARK_NODE_BLOCK_QUOTE,
  25. CMARK_NODE_LIST,
  26. CMARK_NODE_LIST_ITEM,
  27. CMARK_NODE_CODE_BLOCK,
  28. CMARK_NODE_HTML,
  29. CMARK_NODE_PARAGRAPH,
  30. CMARK_NODE_HEADER,
  31. CMARK_NODE_HRULE,
  32. CMARK_NODE_REFERENCE_DEF,
  33. CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT,
  34. CMARK_NODE_LAST_BLOCK = CMARK_NODE_REFERENCE_DEF,
  35. // Inline
  36. CMARK_NODE_TEXT,
  37. CMARK_NODE_SOFTBREAK,
  38. CMARK_NODE_LINEBREAK,
  39. CMARK_NODE_INLINE_CODE,
  40. CMARK_NODE_INLINE_HTML,
  41. CMARK_NODE_EMPH,
  42. CMARK_NODE_STRONG,
  43. CMARK_NODE_LINK,
  44. CMARK_NODE_IMAGE,
  45. CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT,
  46. CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE,
  47. } cmark_node_type;
  48. ///
  49. typedef enum {
  50. CMARK_NO_LIST,
  51. CMARK_BULLET_LIST,
  52. CMARK_ORDERED_LIST
  53. } cmark_list_type;
  54. ///
  55. typedef enum {
  56. CMARK_PERIOD_DELIM,
  57. CMARK_PAREN_DELIM
  58. } cmark_delim_type;
  59. typedef struct cmark_node cmark_node;
  60. typedef struct cmark_parser cmark_parser;
  61. /// # CREATING AND DESTORYING NODES
  62. ///
  63. CMARK_EXPORT cmark_node*
  64. cmark_node_new(cmark_node_type type);
  65. ///
  66. CMARK_EXPORT void
  67. cmark_node_free(cmark_node *node);
  68. /// # TREE TRAVERSAL
  69. ///
  70. CMARK_EXPORT cmark_node*
  71. cmark_node_next(cmark_node *node);
  72. ///
  73. CMARK_EXPORT cmark_node*
  74. cmark_node_previous(cmark_node *node);
  75. ///
  76. CMARK_EXPORT cmark_node*
  77. cmark_node_parent(cmark_node *node);
  78. ///
  79. CMARK_EXPORT cmark_node*
  80. cmark_node_first_child(cmark_node *node);
  81. ///
  82. CMARK_EXPORT cmark_node*
  83. cmark_node_last_child(cmark_node *node);
  84. /// # ACCESSORS
  85. ///
  86. CMARK_EXPORT cmark_node_type
  87. cmark_node_get_type(cmark_node *node);
  88. ///
  89. CMARK_EXPORT const char*
  90. cmark_node_get_string_content(cmark_node *node);
  91. ///
  92. CMARK_EXPORT int
  93. cmark_node_set_string_content(cmark_node *node, const char *content);
  94. ///
  95. CMARK_EXPORT int
  96. cmark_node_get_header_level(cmark_node *node);
  97. ///
  98. CMARK_EXPORT int
  99. cmark_node_set_header_level(cmark_node *node, int level);
  100. ///
  101. CMARK_EXPORT cmark_list_type
  102. cmark_node_get_list_type(cmark_node *node);
  103. ///
  104. CMARK_EXPORT int
  105. cmark_node_set_list_type(cmark_node *node, cmark_list_type type);
  106. ///
  107. CMARK_EXPORT int
  108. cmark_node_get_list_start(cmark_node *node);
  109. ///
  110. CMARK_EXPORT int
  111. cmark_node_set_list_start(cmark_node *node, int start);
  112. ///
  113. CMARK_EXPORT int
  114. cmark_node_get_list_tight(cmark_node *node);
  115. ///
  116. CMARK_EXPORT int
  117. cmark_node_set_list_tight(cmark_node *node, int tight);
  118. ///
  119. CMARK_EXPORT const char*
  120. cmark_node_get_fence_info(cmark_node *node);
  121. ///
  122. CMARK_EXPORT int
  123. cmark_node_set_fence_info(cmark_node *node, const char *info);
  124. ///
  125. CMARK_EXPORT const char*
  126. cmark_node_get_url(cmark_node *node);
  127. ///
  128. CMARK_EXPORT int
  129. cmark_node_set_url(cmark_node *node, const char *url);
  130. ///
  131. CMARK_EXPORT const char*
  132. cmark_node_get_title(cmark_node *node);
  133. ///
  134. CMARK_EXPORT int
  135. cmark_node_set_title(cmark_node *node, const char *title);
  136. ///
  137. CMARK_EXPORT int
  138. cmark_node_get_start_line(cmark_node *node);
  139. ///
  140. CMARK_EXPORT int
  141. cmark_node_get_start_column(cmark_node *node);
  142. ///
  143. CMARK_EXPORT int
  144. cmark_node_get_end_line(cmark_node *node);
  145. /// # TREE MANIPULATION
  146. ///
  147. CMARK_EXPORT void
  148. cmark_node_unlink(cmark_node *node);
  149. ///
  150. CMARK_EXPORT int
  151. cmark_node_insert_before(cmark_node *node, cmark_node *sibling);
  152. ///
  153. CMARK_EXPORT int
  154. cmark_node_insert_after(cmark_node *node, cmark_node *sibling);
  155. ///
  156. CMARK_EXPORT int
  157. cmark_node_prepend_child(cmark_node *node, cmark_node *child);
  158. ///
  159. CMARK_EXPORT int
  160. cmark_node_append_child(cmark_node *node, cmark_node *child);
  161. /// # PARSING
  162. ///
  163. CMARK_EXPORT
  164. cmark_parser *cmark_parser_new();
  165. ///
  166. CMARK_EXPORT
  167. void cmark_parser_free(cmark_parser *parser);
  168. ///
  169. CMARK_EXPORT
  170. cmark_node *cmark_parser_finish(cmark_parser *parser);
  171. ///
  172. CMARK_EXPORT
  173. void cmark_parser_push(cmark_parser *parser, const char *buffer, size_t len);
  174. ///
  175. CMARK_EXPORT
  176. cmark_node *cmark_parse_document(const char *buffer, size_t len);
  177. ///
  178. CMARK_EXPORT
  179. cmark_node *cmark_parse_file(FILE *f);
  180. /// # RENDERING
  181. ///
  182. CMARK_EXPORT
  183. char *cmark_render_ast(cmark_node *root);
  184. ///
  185. CMARK_EXPORT
  186. char *cmark_render_html(cmark_node *root);
  187. /// # AUTHORS
  188. ///
  189. /// John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer.
  190. #ifndef CMARK_NO_SHORT_NAMES
  191. #define NODE_DOCUMENT CMARK_NODE_DOCUMENT
  192. #define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE
  193. #define NODE_LIST CMARK_NODE_LIST
  194. #define NODE_LIST_ITEM CMARK_NODE_LIST_ITEM
  195. #define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK
  196. #define NODE_HTML CMARK_NODE_HTML
  197. #define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH
  198. #define NODE_HEADER CMARK_NODE_HEADER
  199. #define NODE_HRULE CMARK_NODE_HRULE
  200. #define NODE_REFERENCE_DEF CMARK_NODE_REFERENCE_DEF
  201. #define NODE_TEXT CMARK_NODE_TEXT
  202. #define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK
  203. #define NODE_LINEBREAK CMARK_NODE_LINEBREAK
  204. #define NODE_INLINE_CODE CMARK_NODE_INLINE_CODE
  205. #define NODE_INLINE_HTML CMARK_NODE_INLINE_HTML
  206. #define NODE_EMPH CMARK_NODE_EMPH
  207. #define NODE_STRONG CMARK_NODE_STRONG
  208. #define NODE_LINK CMARK_NODE_LINK
  209. #define NODE_IMAGE CMARK_NODE_IMAGE
  210. #define NODE_LINK_LABEL CMARK_NODE_LINK_LABEL
  211. #define BULLET_LIST CMARK_BULLET_LIST
  212. #define ORDERED_LIST CMARK_ORDERED_LIST
  213. #define PERIOD_DELIM CMARK_PERIOD_DELIM
  214. #define PAREN_DELIM CMARK_PAREN_DELIM
  215. #endif
  216. #ifdef __cplusplus
  217. }
  218. #endif
  219. #endif