refine markdown objects + added functions to header
[smdp.git] / include / markdown.h
1 #if !defined( MARKDOWN_H )
2 #define MARKDOWN_H
3
4 /*
5  * A implementation of markdown objects.
6  *
7  */
8
9 #include "cstring.h"
10
11 #define SET_BIT(var, pos)    ((var) |= (1<<(pos)))
12 #define CLEAR_BIT(var, pos)  ((var) &= (~(1<<(pos))))
13 #define TOGGLE_BIT(var, pos) ((var) ^= (1<<(pos)))
14 #define CHECK_BIT(var, pos)  ((var) &  (1<<(pos)))
15
16 enum line_bitmask {
17     IS_HEADER,
18     IS_HEADER2,
19     IS_QUOTE,
20     IS_CODE,
21     IS_LIST,
22     IS_NUMLIST,
23     IS_HR
24 };
25
26 typedef struct _line_t {
27     cstring_t *text;
28     struct _line_t *prev;
29     struct _line_t *next;
30     int bits;
31     int offset;
32 } line_t;
33
34 typedef struct _page_t {
35     line_t *line;
36     struct _page_t *prev;
37     struct _page_t *next;
38 } page_t;
39
40 typedef struct _document_t {
41     line_t *title;
42     line_t *author;
43     line_t *date;
44     page_t *page;
45 } document_t;
46
47 line_t *new_line() {
48     line_t *x = malloc(sizeof(line_t));
49     return x;
50 }
51
52 line_t *next_line(line_t *prev) {
53     line_t *x = new_line();
54     x->prev = prev;
55     prev->next = x;
56     return x;
57 }
58
59 page_t *new_page() {
60     page_t *x = malloc(sizeof(page_t));
61     return x;
62 }
63
64 page_t *next_page(page_t *prev) {
65     page_t *x = new_page();
66     x->prev = prev;
67     prev->next = x;
68     return x;
69 }
70
71 document_t *new_document() {
72     document_t *x = malloc(sizeof(document_t));
73     return x;
74 }
75
76 #endif // !defined( MARKDOWN_H )