This commit is contained in:
radhitya 2025-01-16 20:48:48 +07:00
parent fdffaa699c
commit d69b9b63f4
3 changed files with 119 additions and 74 deletions

15
doc Normal file
View File

@ -0,0 +1,15 @@
# Heading 1
## Heading 2
### Heading 3
This is normal text
This is **bold** and _italic_.
> This is blockquote
This is a [hyperlink](https://radhitya.org)
You should able to see image:
![idol](https://upload.wikimedia.org/wikipedia/commons/2/23/Dennis_Ritchie_2011.jpg)

170
main.c
View File

@ -57,6 +57,37 @@ char *gantihuruf(const char *kata) {
return output; return output;
} }
void add_css(void) {
FILE *fpcss = fopen("./media/style.css", "r");
if (fpcss == NULL) {
fpcss = fopen("./media/style.css", "w");
if (fpcss == NULL) {
perror("galat membuat css");
exit(1);
}
}
}
void newsetup(void) {
struct stat st;
if (stat("./source", &st) == -1) mkdir("./source", 0700);
if (stat("./target", &st) == -1) mkdir("./target", 0700);
if (stat("./media", &st) == -1) mkdir("./media", 0700);
fptr = fopen("./source/index", "r");
if (fptr == NULL) {
fptr = fopen("./source/index", "w");
if (fptr == NULL) {
perror("galat buat ./source/index (fptr)");
exit(1);
} else {
printf("sukses buat ./source/index\n");
}
} else {
printf("./source/index sudah ada\n");
fclose(fptr);
}
}
void checker(void) { void checker(void) {
fptr = fopen("./source/index", "rb+"); fptr = fopen("./source/index", "rb+");
if (fptr == NULL) { if (fptr == NULL) {
@ -93,64 +124,75 @@ void
doblockquote(void) { doblockquote(void) {
fprintf(fpto, "<blockquote>"); fprintf(fpto, "<blockquote>");
mdt.quote = 1; mdt.quote = 1;
while (i < len && (txt[i] == '>' || txt[i] == ' ')) i++;
} }
void void
doimage(void) { doimage(void) {
if (i + 1 < len && txt[i+1] == '[' && (i == 0 || txt[i] != '\\')) { if (i + 1 < len && txt[i+1] == '[' && (i == 0 || txt[i] != '\\')) {
int alt_start = i + 2; int alt_start = i + 2;
int alt_end = -1; int alt_end = -1;
int url_start = -1; int url_start = -1;
int url_end = -1; int url_end = -1;
int j; int j;
for (j = alt_start; j < len; j++) { for (j = alt_start; j < len; j++) {
if (txt[j] == ']' && (j == 0 || txt[j-1] != '\\')) { if (txt[j] == ']' && (j == 0 || txt[j-1] != '\\')) {
alt_end = j; alt_end = j;
break; break;
} }
} }
if (alt_end != -1) { if (alt_end != -1) {
for (j = alt_end + 1; j < len; j++) { for (j = alt_end + 1; j < len; j++) {
if (txt[j] == '(' && (j == 0 || txt[j-1] != '\\')) { if (txt[j] == '(' && (j == 0 || txt[j-1] != '\\')) {
url_start = j + 1; url_start = j + 1;
break; break;
} }
} }
if (url_start != -1) { if (url_start != -1) {
for (j = url_start; j < len; j++) { for (j = url_start; j < len; j++) {
if (txt[j] == ')' && (j == 0 || txt[j-1] != '\\')) { if (txt[j] == ')' && (j == 0 || txt[j-1] != '\\')) {
url_end = j; url_end = j;
break; break;
}
}
}
}
if (alt_end != -1 && url_end != -1) {
char alt_text[100], url[100];
int alt_len = alt_end - alt_start;
int url_len = url_end - url_start;
strncpy(alt_text, txt + alt_start, alt_len);
alt_text[alt_len] = '\0';
strncpy(url, txt + url_start, url_len);
url[url_len] = '\0';
fprintf(fpto, "<img src=\"%s\" alt=\"%s\">", url, alt_text);
i = url_end;
} else {
fprintf(fpto, "!");
}
} else {
fprintf(fpto, "!");
} }
}
}
}
if (alt_end != -1 && url_end != -1) {
char alt_text[100], url[100];
int alt_len = alt_end - alt_start;
int url_len = url_end - url_start;
strncpy(alt_text, txt + alt_start, alt_len);
alt_text[alt_len] = '\0';
strncpy(url, txt + url_start, url_len);
url[url_len] = '\0';
fprintf(fpto, "<img src=\"%s\" alt=\"%s\">", url, alt_text);
i = url_end;
} else {
fprintf(fpto, "!");
}
} else {
fprintf(fpto, "!");
}
} }
void
docode(void) {
if (!mdt.code) {
fprintf(fpto, "<code>");
mdt.code = 1;
} else {
fprintf(fpto, "</code>");
mdt.code = 0;
}
}
void void
dohyperlink(void) { dohyperlink(void) {
int start_linkname = i + 1; int start_linkname = i + 1;
@ -215,6 +257,7 @@ void build(void) {
} }
mdt.headingone = mdt.headingtwo = mdt.quote = mdt.headingthree = 0; mdt.headingone = mdt.headingtwo = mdt.quote = mdt.headingthree = 0;
if (len == 0) { if (len == 0) {
fprintf(fpto, "\n"); fprintf(fpto, "\n");
} else { } else {
@ -236,8 +279,10 @@ void build(void) {
mdt.headingone = 1; mdt.headingone = 1;
while (i < len && (txt[i] == '#' || txt[i] == ' ')) i++; while (i < len && (txt[i] == '#' || txt[i] == ' ')) i++;
} }
} else if (len > 1 && txt[0] == '>' && txt[1] != '\\') { } else if (len > 1 && txt[0] == '>' && txt[1] != '\\') {
doblockquote(); doblockquote();
while (i < len && (txt[i] == '>' || txt[i] == ' ')) i++;
} else { } else {
fprintf(fpto, "<p>"); fprintf(fpto, "<p>");
} }
@ -251,13 +296,7 @@ void build(void) {
} else if (txt[i] == '[' && (i == 0 || txt[i-1] != '\\')) { } else if (txt[i] == '[' && (i == 0 || txt[i-1] != '\\')) {
dohyperlink(); dohyperlink();
} else if (txt[i] == '`' && (i == 0 || txt[i-1] != '\\')) { } else if (txt[i] == '`' && (i == 0 || txt[i-1] != '\\')) {
if (!mdt.code) { docode();
fprintf(fpto, "<code>");
mdt.code = 1;
} else {
fprintf(fpto, "</code>");
mdt.code = 0;
}
} else if (i + 1 < len && txt[i] == '*' && txt[i+1] == '*' && (i == 0 || txt[i-1] != '\\')) { } else if (i + 1 < len && txt[i] == '*' && txt[i+1] == '*' && (i == 0 || txt[i-1] != '\\')) {
dobold(); dobold();
} else { } else {
@ -335,24 +374,7 @@ int main(int argc, char *argv[]) {
printf("help : help\nnew : new site\nbuild : build all files in source/ to HTML\n"); printf("help : help\nnew : new site\nbuild : build all files in source/ to HTML\n");
return 0; return 0;
} else if (strcmp("new", argv[i]) == 0) { } else if (strcmp("new", argv[i]) == 0) {
struct stat st; newsetup();
if (stat("./source", &st) == -1) mkdir("./source", 0700);
if (stat("./target", &st) == -1) mkdir("./target", 0700);
if (stat("./media", &st) == -1) mkdir("./media", 0700);
fptr = fopen("./source/index", "r");
if (fptr == NULL) {
fptr = fopen("./source/index", "w");
if (fptr == NULL) {
perror("galat buat ./source/index (fptr)");
exit(1);
} else {
printf("sukses buat ./source/index\n");
}
} else {
printf("./source/index sudah ada\n");
fclose(fptr);
}
return 0; return 0;
} else { } else {
printf("salah perintah\n"); printf("salah perintah\n");

View File

@ -3,10 +3,18 @@ cflags = -Wall -Wextra -std=c99 -pedantic
src= main.c src= main.c
out= daisy out= daisy
ex=doc
install: install:
$(cc) $(cflags) $(src) -o $(out) $(cc) $(cflags) $(src) -o $(out)
clean: clean:
rm -rf source rm -rf source
rm -rf target rm -rf target
rm -rf media
rm $(out) rm $(out)
test: install
./$(out) new
cp $(ex) ./source/
./$(out) build