#define _DEFAULT_SOURCE
#include ");
i = 0;
}
for (; 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] != '\\')) {
docode();
} else if (i + 1 < len && txt[i] == '*' && txt[i + 1] == '*' && (i == 0 || txt[i - 1] != '\\')) {
dobold();
} else {
fputc(txt[i], fpto);
}
}
if (mdt.italic) fprintf(fpto, "");
else if (mdt.code) fprintf(fpto, "");
else if (mdt.bold) fprintf(fpto, "");
else if (mdt.quote) fprintf(fpto, "Archive
");
for(int page = 0; page < total_pages; page++) {
fprintf(archive, "
");
fclose(archive);
}
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);
}
fclose(fpcss);
} else {
fclose(fpcss);
}
}
char *doinsert(const char * nama) {
FILE *fheader = fopen(nama, "r");
if(fheader == NULL) {
fheader = fopen(nama, "w");
if (fheader == NULL) {
perror("galat membuka header");
return NULL;
}
}
static char buffer[MAX_LENGTH] = {0};
size_t bytes_read = fread(buffer, 1, sizeof(buffer) - 1, fheader);
buffer[bytes_read] = '\0';
fclose(fheader);
if (bytes_read == 0) {
fprintf(stderr, "Berkas kosong atau ada kesalahan membaca %s\n", nama);
return NULL;
}
return buffer;
}
void copy_css(void) {
const char *css = "./media/style.css";
const char *css_target = "./target/style.css";
int x;
FILE *fcss = fopen(css, "r");
if (fcss == NULL) {
perror("Tidak bisa membuka file masukan CSS");
return;
}
FILE *fcss_target = fopen(css_target, "w");
if (fcss_target == NULL) {
perror("Tidak bisa membuka file keluaran CSS");
fclose(fcss);
return;
}
while ((x = fgetc(fcss)) != EOF) {
fputc(x, fcss_target);
}
fclose(fcss);
fclose(fcss_target);
}
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);
add_css();
}
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) {
fptr = fopen("./source/index", "rb+");
if (fptr == NULL) {
perror("galat checker buat ./source/index");
exit(1);
}
}
void
doitalic(void) {
if (!mdt.italic) {
fprintf(fpto, "");
mdt.italic = 1;
} else {
fprintf(fpto, "");
mdt.italic = 0;
}
}
void
dobold(void) {
if (!mdt.bold) {
fprintf(fpto, "");
mdt.bold = 1;
i++;
} else {
fprintf(fpto, "");
mdt.bold = 0;
i++;
}
}
void
doblockquote(void) {
fprintf(fpto, "Page %d
", page + 1);
int start = page * posts_per_page;
int end = start + posts_per_page;
if (end > total_posts) end = total_posts;
for (int i = start; i < end; i++) {
char *html_name = gantihuruf(posts[i].name);
fprintf(page_file, "
");
fclose(page_file);
}
fprintf(archive, "");
mdt.quote = 1;
}
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;
int url_end = -1;
int j;
for (j = alt_start; j < len; j++) {
if (txt[j] == ']' && (j == 0 || txt[j-1] != '\\')) {
alt_end = j;
break;
}
}
if (alt_end != -1) {
for (j = alt_end + 1; j < len; j++) {
if (txt[j] == '(' && (j == 0 || txt[j-1] != '\\')) {
url_start = j + 1;
break;
}
}
if (url_start != -1) {
for (j = url_start; j < len; j++) {
if (txt[j] == ')' && (j == 0 || txt[j-1] != '\\')) {
url_end = j;
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, "
\n");
else if (mdt.headingone) fprintf(fpto, "\n");
else if (mdt.headingtwo) fprintf(fpto, "\n");
else if (mdt.headingthree) fprintf(fpto, "\n");
if (!(mdt.headingone || mdt.headingtwo || mdt.headingthree || mdt.quote)) fprintf(fpto, "", url, alt_text);
i = url_end;
} else {
fprintf(fpto, "!");
}
} else {
fprintf(fpto, "!");
}
}
void
docode(void) {
if (!mdt.code) {
fprintf(fpto, "
");
mdt.code = 1;
} else {
fprintf(fpto, "");
mdt.code = 0;
}
}
void
dohyperlink(void) {
int start_linkname = i + 1;
int end_linkname = -1;
int start_linkurl = -1;
int end_linkurl = -1;
int j;
for (j = start_linkname; j < len; j++) {
if (txt[j] == ']' && (j == 0 || txt[j-1] != '\\')) {
end_linkname = j;
break;
}
}
if (end_linkname != -1) {
for (j = end_linkname + 1; j < len; j++) {
if (txt[j] == '(' && (j == 0 || txt[j-1] != '\\')) {
start_linkurl = j + 1;
break;
}
}
if (start_linkurl != -1) {
for (j = start_linkurl; j < len; j++) {
if (txt[j] == ')' && (j == 0 || txt[j-1] != '\\')) {
end_linkurl = j;
break;
}
}
}
}
if (end_linkname != -1 && end_linkurl != -1) {
char linkname[100], linkurl[100];
int linkname_len = end_linkname - start_linkname;
int linkurl_len = end_linkurl - start_linkurl;
strncpy(linkname, txt + start_linkname, linkname_len);
linkname[linkname_len] = '\0';
strncpy(linkurl, txt + start_linkurl, linkurl_len);
linkurl[linkurl_len] = '\0';
fprintf(fpto, "%s", linkurl, linkname);
i = end_linkurl;
} else {
fprintf(fpto, "[");
}
}
void build(void) {
}
void generate(void) {
header = doinsert("./media/header.html");
fprintf(fpto, "\n\n\n%s
", title_start);
} else {
fprintf(fpto, "