This commit is contained in:
radhitya 2025-01-16 17:49:41 +07:00
parent e54e8c446c
commit fdffaa699c

150
main.c
View File

@ -25,10 +25,20 @@ typedef struct {
int headingthree;
} Markdown;
Markdown mdt;
Markdown mdt = {
.italic = 0,
.bold = 0,
.quote = 0,
.headingone = 0,
.headingtwo = 0,
.headingthree = 0,
.code = 0
};
FILE *fptr, *fpto;
char txt[MAX_LENGTH], of[MAX_LENGTH];
int i, len;
char *gantihuruf(const char *kata) {
@ -55,52 +65,8 @@ void checker(void) {
}
}
void build(void) {
mdt.italic = mdt.bold = mdt.quote = mdt.headingone = mdt.headingtwo = mdt.headingthree = mdt.code = 0;
fprintf(fpto, "<html>\n<body>\n<head>\n<meta charset=\"utf-8\"/>\n<title>daisy homepage</title>\n");
fprintf(fpto, "<style>body{background: #4caf50} blockquote{background: #fff}</style>\n</head>\n");
while (fgets(txt, MAX_LENGTH, fptr) != NULL) {
len = strlen(txt);
if (len > 0 && txt[len-1] == '\n') {
txt[--len] = '\0';
}
mdt.headingone = mdt.headingtwo = mdt.quote = mdt.headingthree = 0;
if (len == 0) {
fprintf(fpto, "\n");
} else {
i = 0;
if (len > 1 && txt[0] == '#' && txt[1] != '\\') {
if (len > 2 && txt[1] == '#' && txt[2] != '\\') {
if (len > 3 && txt[2] == '#' && txt[3] != '\\') {
fprintf(fpto, "<h3>");
mdt.headingthree = 1;
while (i < len && (txt[i] == '#' || txt[i] == ' ')) i++;
} else {
fprintf(fpto, "<h2>");
mdt.headingtwo = 1;
while (i < len && (txt[i] == '#' || txt[i] == ' ')) i++;
}
} else {
fprintf(fpto, "<h1>");
mdt.headingone = 1;
while (i < len && (txt[i] == '#' || txt[i] == ' ')) i++;
}
} else if (len > 1 && txt[0] == '>' && txt[1] != '\\') {
fprintf(fpto, "<blockquote>");
mdt.quote = 1;
while (i < len && (txt[i] == '>' || txt[i] == ' ')) i++;
} else {
fprintf(fpto, "<p>");
}
for (i = 0; i < len; i++) {
if (txt[i] == '_' && (i == 0 || txt[i-1] != '\\')) {
void
doitalic(void) {
if (!mdt.italic) {
fprintf(fpto, "<i>");
mdt.italic = 1;
@ -108,8 +74,31 @@ void build(void) {
fprintf(fpto, "</i>");
mdt.italic = 0;
}
} else if (txt[i] == '!' && (i == 0 || txt[i-1] != '\\')) {
if (i + 1 < len && txt[i+1] == '[' && (i == 0 || txt[i] != '\\')) {
}
void
dobold(void) {
if (!mdt.bold) {
fprintf(fpto, "<b>");
mdt.bold = 1;
i++;
} else {
fprintf(fpto, "</b>");
mdt.bold = 0;
i++;
}
}
void
doblockquote(void) {
fprintf(fpto, "<blockquote>");
mdt.quote = 1;
while (i < len && (txt[i] == '>' || txt[i] == ' ')) i++;
}
void
doimage(void) {
if (i + 1 < len && txt[i+1] == '[' && (i == 0 || txt[i] != '\\')) {
int alt_start = i + 2;
int alt_end = -1;
int url_start = -1;
@ -161,7 +150,9 @@ void build(void) {
} else {
fprintf(fpto, "!");
}
} else if (txt[i] == '[' && (i == 0 || txt[i-1] != '\\')) {
}
void
dohyperlink(void) {
int start_linkname = i + 1;
int end_linkname = -1;
int start_linkurl = -1;
@ -210,6 +201,55 @@ void build(void) {
} else {
fprintf(fpto, "[");
}
}
void build(void) {
fprintf(fpto, "<html>\n<body>\n<head>\n<meta charset=\"utf-8\"/>\n<title>daisy homepage</title>\n");
fprintf(fpto, "<style>body{background: #4caf50} blockquote{background: #fff}</style>\n</head>\n");
while (fgets(txt, MAX_LENGTH, fptr) != NULL) {
len = strlen(txt);
if (len > 0 && txt[len-1] == '\n') {
txt[--len] = '\0';
}
mdt.headingone = mdt.headingtwo = mdt.quote = mdt.headingthree = 0;
if (len == 0) {
fprintf(fpto, "\n");
} else {
i = 0;
if (len > 1 && txt[0] == '#' && txt[1] != '\\') {
if (len > 2 && txt[1] == '#' && txt[2] != '\\') {
if (len > 3 && txt[2] == '#' && txt[3] != '\\') {
fprintf(fpto, "<h3>");
mdt.headingthree = 1;
while (i < len && (txt[i] == '#' || txt[i] == ' ')) i++;
} else {
fprintf(fpto, "<h2>");
mdt.headingtwo = 1;
while (i < len && (txt[i] == '#' || txt[i] == ' ')) i++;
}
} else {
fprintf(fpto, "<h1>");
mdt.headingone = 1;
while (i < len && (txt[i] == '#' || txt[i] == ' ')) i++;
}
} else if (len > 1 && txt[0] == '>' && txt[1] != '\\') {
doblockquote();
} else {
fprintf(fpto, "<p>");
}
for (i = 0; i < len; i++) {
if (txt[i] == '_' && (i == 0 || txt[i-1] != '\\')) {
doitalic();
} else if (txt[i] == '!' && (i == 0 || txt[i-1] != '\\')) {
doimage();
} else if (txt[i] == '[' && (i == 0 || txt[i-1] != '\\')) {
dohyperlink();
} else if (txt[i] == '`' && (i == 0 || txt[i-1] != '\\')) {
if (!mdt.code) {
fprintf(fpto, "<code>");
@ -219,15 +259,7 @@ void build(void) {
mdt.code = 0;
}
} else if (i + 1 < len && txt[i] == '*' && txt[i+1] == '*' && (i == 0 || txt[i-1] != '\\')) {
if (!mdt.bold) {
fprintf(fpto, "<b>");
mdt.bold = 1;
i++;
} else {
fprintf(fpto, "</b>");
mdt.bold = 0;
i++;
}
dobold();
} else {
fputc(txt[i], fpto);
}