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