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