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