-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmdp_translater.c
89 lines (73 loc) · 1.91 KB
/
mdp_translater.c
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
#include "mdp_translater.h"
void translate_to_header(Node* node, char** buffer)
{
int heading_block = node->unary.block;
char* value = node->unary.child->literal.value;
int heading_size = strlen(value) + 7 + 2;
char* heading = (char*)malloc(heading_size + 1);
char s_level[2];
int level = (heading_block == 1) ? 1 :
(heading_block == 2) ? 2 :
(heading_block == 3) ? 3 : 4;
sprintf(s_level, "%d", level);
snprintf(heading, heading_size + 1, "<h%s>%s</h%s>", s_level, value, s_level);
cat(buffer, heading);
}
void translate_to_paragraph(Node* node, char** buffer)
{
char* value = node->unary.child->literal.value;
int paragraph_size = strlen(value) + 7;
char* paragraph = (char*)malloc(paragraph_size + 1);
snprintf(paragraph, paragraph_size + 1, "<p>%s</p>", value);
cat(buffer, paragraph);
}
void translate_to_list_item(Node* node, char** buffer)
{
char* value = node->unary.child->literal.value;
int list_item_size = strlen(value) + 7 + 2;
char* list_item = (char*)malloc(list_item_size + 1);
snprintf(list_item, list_item_size + 2, "\t<li>%s</li>", value);
cat(buffer, list_item);
}
void translate_unary(Node* node, char** buffer)
{
switch(node->unary.block)
{
case HEADING_1:
case HEADING_2:
case HEADING_3:
case HEADING_4:
translate_to_header(node, buffer);
break;
case PARAGRAPH:
translate_to_paragraph(node, buffer);
break;
case OPEN_UL:
cat(buffer, "<ul>\n");
break;
case LIST_ITEM:
translate_to_list_item(node, buffer);
break;
case CLOSED_UL:
cat(buffer, "\n</ul>");
break;
}
}
void translate_binary(Node* node, char** buffer)
{
translate_unary(node->binary.left, buffer);
translate_unary(node->binary.right, buffer);
}
void node_to_html(Node* node)
{
char* buffer = (char*)malloc(4096);
if(node->unary.type == 1)
{
translate_unary(node, &buffer);
}
if(node->binary.type == 2)
{
translate_binary(node, &buffer);
}
printf("%s\n", buffer);
}