1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
local ffi = require 'ffi'
ffi.cdef[[
struct sd_buf {
uint8_t *data;
size_t size;
size_t asize;
size_t unit;
};
enum sd_mkd_autolink {
MKDA_NOT_AUTOLINK,
MKDA_NORMAL,
MKDA_EMAIL,
};
enum sd_mkd_tableflags {
MKD_TABLE_ALIGN_L = 1,
MKD_TABLE_ALIGN_R = 2,
MKD_TABLE_ALIGN_CENTER = 3,
MKD_TABLE_ALIGNMASK = 3,
MKD_TABLE_HEADER = 4
};
enum sd_mkd_extensions {
MKDEXT_NO_INTRA_EMPHASIS = (1 << 0),
MKDEXT_TABLES = (1 << 1),
MKDEXT_FENCED_CODE = (1 << 2),
MKDEXT_AUTOLINK = (1 << 3),
MKDEXT_STRIKETHROUGH = (1 << 4),
MKDEXT_SPACE_HEADERS = (1 << 6),
MKDEXT_SUPERSCRIPT = (1 << 7),
MKDEXT_LAX_SPACING = (1 << 8),
};
struct sd_callbacks {
void (*blockcode)(struct sd_buf *ob, const struct sd_buf *text, const struct sd_buf *lang, void *opaque);
void (*blockquote)(struct sd_buf *ob, const struct sd_buf *text, void *opaque);
void (*blockhtml)(struct sd_buf *ob,const struct sd_buf *text, void *opaque);
void (*header)(struct sd_buf *ob, const struct sd_buf *text, int level, void *opaque);
void (*hrule)(struct sd_buf *ob, void *opaque);
void (*list)(struct sd_buf *ob, const struct sd_buf *text, int flags, void *opaque);
void (*listitem)(struct sd_buf *ob, const struct sd_buf *text, int flags, void *opaque);
void (*paragraph)(struct sd_buf *ob, const struct sd_buf *text, void *opaque);
void (*table)(struct sd_buf *ob, const struct sd_buf *header, const struct sd_buf *body, void *opaque);
void (*table_row)(struct sd_buf *ob, const struct sd_buf *text, void *opaque);
void (*table_cell)(struct sd_buf *ob, const struct sd_buf *text, int flags, void *opaque);
int (*autolink)(struct sd_buf *ob, const struct sd_buf *link, enum sd_mkd_autolink type, void *opaque);
int (*codespan)(struct sd_buf *ob, const struct sd_buf *text, void *opaque);
int (*double_emphasis)(struct sd_buf *ob, const struct sd_buf *text, void *opaque);
int (*emphasis)(struct sd_buf *ob, const struct sd_buf *text, void *opaque);
int (*image)(struct sd_buf *ob, const struct sd_buf *link, const struct sd_buf *title, const struct sd_buf *alt, void *opaque);
int (*linebreak)(struct sd_buf *ob, void *opaque);
int (*link)(struct sd_buf *ob, const struct sd_buf *link, const struct sd_buf *title, const struct sd_buf *content, void *opaque);
int (*raw_html_tag)(struct sd_buf *ob, const struct sd_buf *tag, void *opaque);
int (*triple_emphasis)(struct sd_buf *ob, const struct sd_buf *text, void *opaque);
int (*strikethrough)(struct sd_buf *ob, const struct sd_buf *text, void *opaque);
int (*superscript)(struct sd_buf *ob, const struct sd_buf *text, void *opaque);
void (*entity)(struct sd_buf *ob, const struct sd_buf *entity, void *opaque);
void (*normal_text)(struct sd_buf *ob, const struct sd_buf *text, void *opaque);
void (*doc_header)(struct sd_buf *ob, void *opaque);
void (*doc_footer)(struct sd_buf *ob, void *opaque);
};
struct sd_markdown;
struct sd_markdown * sd_markdown_new(
unsigned int extensions,
size_t max_nesting,
const struct sd_callbacks *callbacks,
void *opaque);
void sd_markdown_render(struct sd_buf *ob, const uint8_t *document, size_t doc_size, struct sd_markdown *md);
void sd_markdown_free(struct sd_markdown *md);
void sd_version(int *major, int *minor, int *revision);
/* buffer */
int sd_bufgrow(struct sd_buf *, size_t);
struct sd_buf *sd_bufnew(size_t) __attribute__ ((malloc));
const char *sd_bufcstr(struct sd_buf *);
int sd_bufprefix(const struct sd_buf *buf, const char *prefix);
void sd_bufput(struct sd_buf *, const void *, size_t);
void sd_bufputs(struct sd_buf *, const char *);
void sd_bufputc(struct sd_buf *, int);
void sd_bufrelease(struct sd_buf *);
void sd_bufreset(struct sd_buf *);
void sd_bufslurp(struct sd_buf *, size_t);
]]
|