all repos — eureka @ eb80d36ef6442f1a90e60a49faec8e6f01fa40a4

static site generator based on the 100r.co engine

add table markup; v1.0
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmNgqfQACgkQO3+8IhRO
Y5iRLA/+NbRj7R1qWlEX1QwLKwc+FoOct8UoRvmovufPiRYP3BgCWq8mdVaJOnfz
lyUZ3WrO3bJMNXqvb3dhHw3MziX6CcbXmxrcL+wIgvHhLY7axhheOQ+cZs6vToCM
BWPf5kADPyrwpWA+NHdd9Qda9FBe/2cE2fgsAOnpaXlNYTkcnpMqH3iWfDqUxHxs
pRk6okAbLiFDccGzWBucTWY3FrPtdls9cwu1rc6vjIdIHAqXv+yWxu4BA6CvNIEG
5eqKfVtqHqSDB5t+veAKr+JghAlqL+ElxQEaE7NvCpo/k39ZGb48UHPttnF+7kp4
c2dKyZupzEcPOwNs1oMZZPWYV4wQB5r2gQopLYeoRHVspkFFwHCoP7wUyj1GrOnc
kpSjiWhmCycXADA8NclOAMOm2K7O3Zk/9ZPz+0XyT86lpkfzi3mc4ABXiQj7C3t0
y1RZfKlM7jWPH9ilY9P7mT1bkmx2kjLQfStebKolfL9P+3RE4razSUCl3AdbNyZ8
2cFEP3YDBp5338wdFLTJXRdfhkHsM54bF/romO5kIWF8FV6e9TaaVZy1K72oSZCJ
pHgHqGr9HUAKqEzMbG47MFpYeRqB1hWv1vmHYvtzQ4sc+vuLM7J0U596OgmKmrKz
84RrR3kVcw770PqLMQgZOvpbhFuPrFw4tYw2cIvQdYVVatpKi6Y=
=f7qq
-----END PGP SIGNATURE-----
commit

eb80d36ef6442f1a90e60a49faec8e6f01fa40a4

parent

10d57d0f6cd9a7c702680dcfebaf1ed9eba889e8

2 files changed, 78 insertions(+), 4 deletions(-)

jump to
M README.mdREADME.md

@@ -104,6 +104,12 @@

// shorthand for level 4 heading {.heading text} +// shorthand for tables +{[column 1 header|column 2 header|column 3 header} +{|simple data|{@bold data}|{*https://nilfm.cc|link data}} +{|more|and more|and more data!} +{;} + // shorthand for publish date (renders as <time class='publish-date'>) {+2022-02-22} ```
M main.cmain.c

@@ -46,6 +46,8 @@ int clin(char *str, char c) {int i = -1; int j = 0; while(str[j] != '\0'){if(str[j] == c) i = j;j++;}return i;} /* find last occurence of character in string */

/* clang-format on */ int fpinject(FILE* f, Lexicon* l, char* filepath); +int fptemplate(FILE*, Lexicon*, char*); +int fpmetatemplate(FILE*, Lexicon*, char*); int error(char* msg, char* val) { printf("Error: %s(%s)\n", msg, val);

@@ -114,7 +116,7 @@ }

void fpedited(FILE* f) { struct tm timebuf; - char strbuf[16] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + char strbuf[16] = {0}; timebuf = *localtime(&edittime); strftime(strbuf, 16, "%Y-%m-%d", &timebuf);

@@ -228,6 +230,69 @@ fputs("</a>\n", f);

return 1; } +int fpthead(FILE* f, char* s) { + char sbuf[TAG_BODY_SIZE] = {0}; + char* c = s; + int data = 0; + + fputs("<table><thead><tr>\n", f); + while (*c) { + data = 1; + if (*c != '|') { + ccat(sbuf, *c); + } else { + fprintf(f, "<th>%s</th>\n", sbuf); + sbuf[0] = 0; + } + c++; + } + if (data) { + fprintf(f, "<th>%s</th>\n", sbuf); + } + fputs("</tr></thead>\n<tbody>", f); + return 1; +} + +int fptbody(FILE* f, Lexicon* l, char* s) { + char sbuf[TAG_BODY_SIZE] = {0}; + char* c = s; + int data = 0; + int bopen = 0; + int bclose = 0; + + fputs("<tr>\n", f); + while (*c) { + data = 1; + if (*c == '{') { + bopen++; + } + if (*c == '}') { + bclose++; + } + if (*c != '|' || bopen != bclose) { + ccat(sbuf, *c); + } else { + fputs("<td>", f); + fpmetatemplate(f, l, sbuf); + fputs("</td>\n", f); + sbuf[0] = 0; + } + c++; + } + if (data) { + fputs("<td>", f); + fpmetatemplate(f, l, sbuf); + fputs("</td>\n", f); + } + fputs("</tr>", f); + return 1; +} + +int fptfoot(FILE* f) { + fputs("</tbody></table>", f); + return 1; +} + int fphimg(FILE* f, char* s) { char id[1024] = {0}; char href[1024] = {0};

@@ -320,9 +385,6 @@ s);

fputs("</audio>\n", f); return 1; } - -int fptemplate(FILE*, Lexicon*, char*); -int fpmetatemplate(FILE*, Lexicon*, char*); int fppara(FILE* f, Lexicon* l, char* s) { fputs("<p>", f);

@@ -465,6 +527,12 @@ case '-':

return fpli(f, l, s + 1); case '&': return fppara(f, l, s + 1); + case '[': + return fpthead(f, s + 1); + case '|': + return fptbody(f, l, s + 1); + case ';': + return fptfoot(f); } if (s[0]) { target = findf(l, s);