all repos — eureka @ b369ba3a624eb70e0431f0fc39404d0499ad59b6

static site generator based on the 100r.co engine

add new templating functions
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmB7MKoACgkQO3+8IhRO
Y5j4Ww/8D+48wKpa4P5Uh7FuoiGswFyvz42ghWvbGH3MRMeW2nnxpZGhwd7oSMY5
kS3ukAKK46JLWp31/nv6Wg4eQQ6DuuHkTTktoZAWAy0D4CYJtMKmUFI0ItziDQCl
gRyyxuEvvemH49f/HUzti3t9wdY7IfyUOtTkEWq2roBVxrs2FzYVNmgDbPZPFrc5
CtxuwSzPrBihafOmNDqCqyZ7pm6FOhpNhM7kyBzExWop52LrEA/S3CT74cPxXlJ3
PRJhrJ8LhIYpetywZ0pzz+CumtzqZcngF6GwOFe8kKQEwJ0il3XRaGpxfR9Nhw04
ZR0KKRywdHJszQN+yrbIHX35B39JBBulA1+zcfGYJfZM1oYvPsrj5zr5mybJpB56
K3dszEP/2zy4N+qgZLCKigbEO+lVXpzDtWTH1V1au2lmIFStZ0wZGLBPPINIllUG
htILnL6KDhfWwKTm7Fu+rY1rFbzhhgcp4/0mv1F8XHL3m7DyAXRWqTHa9wDEsBnf
B69DxJTNfl7l88QA17+pYffAj5ZqcKGvYIBtd+1+QhfB+bsdaDpqMb3nLJb81lWt
uItYNvmBmS2e4nrWQn5Oa4zRk4GekMFI9e34fGJ0qUqKw5zI56zYxPxA/w5vcCtZ
Oxo5fBRU3Xhc2EKtzsyESw8tgz/YVIXOj9yojObaQ9ufwNIpS0o=
=TS8u
-----END PGP SIGNATURE-----
commit

b369ba3a624eb70e0431f0fc39404d0499ad59b6

parent

ff4700df5aba477be7e56484ebb582e23b316d8e

1 files changed, 84 insertions(+), 3 deletions(-)

jump to
M main.cmain.c

@@ -54,7 +54,7 @@ char *scsw(char *s, char a, char b) { int i = 0; char c; while((c = s[i])) s[i++] = c == a ? b : c; return s; } /* string char swap */

char *scat(char *dst, const char *src) { char *ptr = dst + slen(dst); while(*src) *ptr++ = *src++; *ptr = '\0'; return dst; } /* string cat */ int ssin(char *s, char *ss) { int a = 0, b = 0; while(s[a]) { if(s[a] == ss[b]) { if(!ss[b + 1]) return a - b; b++; } else b = 0; a++; } return -1; } /* string substring index */ char *ccat(char *dst, char c) { int len = slen(dst); dst[len] = c; dst[len + 1] = '\0'; return dst; } - +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);

@@ -96,7 +96,7 @@ scat(scat(scat(srcpath, "inc/"), scpy(s, filename, 64)), ".htm");

if (head) fprintf( f, - "<h2 id='%s'><a href='%s.html'>%s</a></h2>", + "<h3 id='%s'><a href='%s.html'>%s</a></h3>", scsw(filename, ' ', '_'), filename, s);

@@ -105,10 +105,91 @@ l->refs[target]++;

return 1; } +int fpimg(FILE* f, char* s) { + char id[1024] = {0}; + char src[1024] = {0}; + char alt[1024] = {0}; + + char* c = s; + int i = 0; + while (i < 3) { + if (*c == '|' || !(*c)) { + i++; + c++; + continue; + } + switch (i) { + case 0: + ccat(id, *c++); + break; + case 1: + ccat(src, *c++); + break; + case 2: + ccat(alt, *c++); + break; + } + } + + fprintf(f, "<a id='%s' href='%s'>\n", id, src); + fprintf(f, "<img class='image' src='%s' alt='%s'/>\n", src, alt); + fputs("</a>", f); + return 1; +} + +int fpimgl(FILE* f, char* s) { + char id[1024] = {0}; + char href[1024] = {0}; + char src[1024] = {0}; + char alt[1024] = {0}; + + char* c = s; + int i = 0; + while (i < 4) { + if (*c == '|' || !(*c)) { + i++; + c++; + continue; + } + switch (i) { + case 0: + ccat(id, *c++); + break; + case 1: + ccat(href, *c++); + break; + case 2: + ccat(src, *c++); + break; + case 3: + ccat(alt, *c++); + break; + } + } + + fprintf(f, "<a id='%s' href='%s'>\n", id, href); + fprintf(f, "<img class='image' src='%s' alt='%s'/>\n", src, alt); + fputs("</a>", f); + return 1; +} + +int fpaudio(FILE* f, char* s) { + fputs("<audio class='player' preload='metadata' controls>", f); + fprintf(f, "<source src='%s' type='audio/mpeg'>[HTML5 audio]", s); + fputs("</audio>", f); + return 1; +} + int fptemplate(FILE* f, Lexicon* l, char* s) { int target; if (s[0] == '/') return fpportal(f, l, s + 1, 1); + if (s[0] == ':') + return fpimg(f, s + 1); + if (s[0] == '?') + return fpimgl(f, s + 1); + if (s[0] == '_') + return fpaudio(f, s + 1); target = findf(l, s); if (target < 0) return error("Missing link", s);

@@ -170,7 +251,7 @@ fprintf(

f, "<link rel='shortcut icon' href='/favicon.ico'>" "<title>" NAME " &mdash; %s</title>", - name); + ismetanav(name) ? "home" : name); fputs("</head>", f); fputs("<body>", f); /* header */