update markup and separate config into header file

This commit is contained in:
Iris Lightshard 2022-02-12 16:06:47 -07:00
parent d831945f5f
commit dff5bf47a0
Signed by: Iris Lightshard
GPG key ID: 3B7FBC22144E6398
4 changed files with 250 additions and 52 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
inc/ inc/
old/ old/
config.h

View file

@ -1,16 +1,21 @@
#!/bin/sh #!/bin/sh
# copy default config if none
if [ ! -e config.h ]; then
cp config.def.h config.h
fi
# Lint # Lint
clang-format -i main.c clang-format -i main.c config.h
# Cleanup # Cleanup
rm -f ./main rm -f ./main
# Linux(debug) # Linux(debug)
cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wuninitialized -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined main.c -o main # cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wuninitialized -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined main.c -o main
# Linux(fast) # Linux(fast)
# cc main.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o main cc main.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o main
# RPi # RPi
# tcc -Wall main.c -o main # tcc -Wall main.c -o main

22
config.def.h Normal file
View file

@ -0,0 +1,22 @@
#define NAME "nilFM"
#define DOMAIN "https://nilfm.cc"
#define LOGO "<img src='/img/nilfm_blackHole_96.png' alt='blackHole://server'/>"
#define DESC "lair of drkste aka nilix: programmer, artist, philosopher"
#define ABOUT "Derek Stevens &lt;"\
"<a href='mailto:nilix@nilfm.cc'>nilix@nilfm.cc</a>&gt;<br/>"\
"artist, programmer, philosopher<br/><br/>"\
"verify my signature: <a href='/serv/signingKey.pub'>signing public key</a><br/>"\
"send me an encrypted message: <a href='/serv/encryptionKey.pub'>encryption public key</a>"
#define CONTACT "contact: <a href='mailto:nilix@nilfm.cc'>nilix@nilfm.cc</a> (<a href='keys.html'>keys</a>)<br/>"
#define FOOTER "<a href='/git/'><img "\
"src='/img/git.svg' alt='visit the nilFM hack lab.'/></a>&nbsp;"\
"<a rel='me' href='https://cafe.nilfm.cc/u/nilix'><img "\
"src='/img/honk.svg' alt='visit me on the Fediverse.'/></a>&nbsp;"\
"<a href='https://webring.xxiivv.com'><img "\
"src='/img/webring.svg' alt='visit the Webring.'/></a><br/>"
#define LICENSE "<a rel='license' "\
"href='https://creativecommons.org/licenses/by-nc/4.0/"\
"legalcode.txt'>CC-BY-NC 4</a>"
#define SITEROOT "../www/"
#define MAINCSS "/new.css"
#define FRONTCSS "/front.css"

244
main.c
View file

@ -3,6 +3,9 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#include <time.h> #include <time.h>
#include "config.h"
/* /*
Copyright (c) 2021 Derek Stevens Copyright (c) 2021 Derek Stevens
Copyright (c) 2021 Devine Lu Linvega Copyright (c) 2021 Devine Lu Linvega
@ -15,33 +18,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE. WITH REGARD TO THIS SOFTWARE.
*/ */
/* clang-format off */
#define NAME "nilFM"
#define DOMAIN "https://nilfm.cc"
#define LOGO "<img src='/img/nilfm_blackHole_96.png' alt='blackHole://server'/>"
#define DESC "lair of drkste aka nilix: programmer, artist, philosopher"
#define ABOUT "Derek Stevens &lt;"\
"<a href='mailto:nilix@nilfm.cc'>nilix@nilfm.cc</a>&gt;<br/>"\
"artist, programmer, philosopher<br/><br/>"\
"verify my signature: <a href='/serv/signingKey.pub'>signing public key</a><br/>"\
"send me an encrypted message: <a href='/serv/encryptionKey.pub'>encryption public key</a>"
#define CONTACT "contact: <a href='mailto:nilix@nilfm.cc'>nilix@nilfm.cc</a> (<a href='keys.html'>keys</a>)<br/>"
#define FOOTER "<a href='/git/'><img "\
"src='/img/git.svg' alt='visit the nilFM hack lab.'/></a>&nbsp;"\
"<a rel='me' href='https://cafe.nilfm.cc/u/nilix'><img "\
"src='/img/fedi.svg' alt='visit me on the Fediverse.'/></a>&nbsp;"\
"<a href='https://webring.xxiivv.com'><img "\
"src='/img/webring.svg' alt='visit the Webring.'/></a><br/>"
#define LICENSE "<a rel='license' "\
"href='https://creativecommons.org/licenses/by-nc/4.0/"\
"legalcode.txt'>CC-BY-NC 4</a>"
#define SITEROOT "../www/"
#define MAINCSS "/new.css"
#define FRONTCSS "/front.css"
/* clang-format on */
struct dirent* dir; struct dirent* dir;
typedef struct Lexicon { typedef struct Lexicon {
@ -123,6 +99,7 @@ int gettwtxt(FILE* f) {
} }
i++; i++;
} }
fclose(twtxt);
scat(buf, "</table><a href='/twtxt.txt'>see all</a>"); scat(buf, "</table><a href='/twtxt.txt'>see all</a>");
scat(buf, "</div>"); scat(buf, "</div>");
fputs(buf, f); fputs(buf, f);
@ -283,22 +260,197 @@ int fpaudio(FILE* f, char* s) {
return 1; return 1;
} }
int fptemplate(FILE*, Lexicon*, char*);
int fpmetatemplate(FILE*, Lexicon*, char*);
int fppara(FILE* f, Lexicon* l, char* s) {
fputs("<p>", f);
fpmetatemplate(f, l, s);
fputs("</p>", f);
return 1;
}
int fpul(FILE* f, Lexicon* l, char* s) {
fputs("<ul>", f);
fpmetatemplate(f, l, s);
fputs("</ul>", f);
return 1;
}
int fpol(FILE* f, Lexicon* l, char* s) {
fputs("<ol>", f);
fpmetatemplate(f, l, s);
fputs("</ol>", f);
return 1;
}
int fppublish(FILE* f, char* s) {
fputs("<div class='timestamp'>", f);
fputs(s, f);
fputs("</div>", f);
return 1;
}
int fpli(FILE* f, Lexicon* l, char* s) {
fputs("<li>", f);
fpmetatemplate(f, l, s);
fputs("</li>", f);
return 1;
}
int fph3(FILE* f, char* s) {
fputs("<h3>", f);
fputs(s, f);
fputs("</h3>", f);
return 1;
}
int fph4(FILE* f, char* s) {
fputs("<h4>", f);
fputs(s, f);
fputs("</h4>", f);
return 1;
}
int fpcode(FILE* f, char* s) {
fputs("<code>", f);
fputs(s, f);
fputs("</code>", f);
return 1;
}
int fpbold(FILE* f, char* s) {
fputs("<b>", f);
fputs(s, f);
fputs("</b>", f);
return 1;
}
int fpitalic(FILE* f, char* s) {
fputs("<i>", f);
fputs(s, f);
fputs("</i>", f);
return 1;
}
int fpstrike(FILE* f, char* s) {
fputs("<s>", f);
fputs(s, f);
fputs("</s>", f);
return 1;
}
int fppre(FILE* f, char* s) {
fputs("<pre>", f);
fputs(s, f);
fputs("</pre>", f);
return 1;
}
int fpquote(FILE* f, char* s) {
fputs("<q>", f);
fputs(s, f);
fputs("</q>", f);
return 1;
}
int fpblock(FILE* f, char* s) {
fputs("<blockquote>", f);
fputs(s, f);
fputs("</blockquote>", f);
return 1;
}
int fpmetatemplate(FILE* f, Lexicon* l, char* s) {
int bopen, bclose;
char ss[4096];
unsigned char t = 0;
bopen = 0;
bclose = 0;
while (*s) {
if (*s == '}') {
bclose++;
if (bopen == bclose) {
t = 0;
bopen = 0;
bclose = 0;
}
if (bopen == bclose) {
s++;
if (!fptemplate(f, l, ss)) {
return 0;
}
continue;
}
}
if (*s == '{') {
bopen++;
if (bopen == 1) {
ss[0] = 0;
t = 1;
s++;
continue;
}
}
if (slen(s) > 4095)
return error("Templating error", "text block over 16k");
if (t) {
ccat(ss, *s);
} else
fprintf(f, "%c", *s);
s++;
}
return 1;
}
int fptemplate(FILE* f, Lexicon* l, char* s) { int fptemplate(FILE* f, Lexicon* l, char* s) {
int target; int target = 0;
if (s[0] == '/') switch (s[0]) {
case '/':
return fpportal(f, l, s + 1, 1); return fpportal(f, l, s + 1, 1);
if (s[0] == '*') case '*':
return fphref(f, s + 1); return fphref(f, s + 1);
if (s[0] == ':') case ':':
return fpimg(f, s + 1); return fpimg(f, s + 1);
if (s[0] == '?') case '?':
return fphimg(f, s + 1); return fphimg(f, s + 1);
if (s[0] == '_') case '_':
return fpaudio(f, s + 1); return fpaudio(f, s + 1);
case '`':
return fpcode(f, s + 1);
case '~':
return fpitalic(f, s + 1);
case '>':
return fpblock(f, s + 1);
case '\'':
return fpquote(f, s + 1);
case '$':
return fppre(f, s + 1);
case '@':
return fpbold(f, s + 1);
case '\\':
return fpstrike(f, s + 1);
case '!':
return fph3(f, s + 1);
case '.':
return fph4(f, s + 1);
case '+':
return fppublish(f, s + 1);
case '#':
return fpol(f, l, s + 1);
case ',':
return fpul(f, l, s + 1);
case '-':
return fpli(f, l, s + 1);
case '&':
return fppara(f, l, s + 1);
}
if (s[0])
target = findf(l, s); target = findf(l, s);
if (target < 0) if (target < 0)
return error("Missing link", s); return error("Missing link", s);
fprintf(f, "<a href='%s.html' class='local'>", scsw(stlc(s), ' ', '_')); fprintf(f, "<a href='./%s.html' class='local'>", scsw(stlc(s), ' ', '_'));
fprintf(f, "%s</a>", scsw(stlc(s), '_', ' ')); fprintf(f, "%s</a>", scsw(stlc(s), '_', ' '));
l->refs[target]++; l->refs[target]++;
return 1; return 1;
@ -306,25 +458,43 @@ int fptemplate(FILE* f, Lexicon* l, char* s) {
int fpinject(FILE* f, Lexicon* l, char* filepath) { int fpinject(FILE* f, Lexicon* l, char* filepath) {
FILE* inc; FILE* inc;
char c, s[1024]; int bopen, bclose;
char c, s[4096];
unsigned char t = 0; unsigned char t = 0;
/*fprintf(stderr, "Building: %s\n", filepath);*/
bopen = 0;
bclose = 0;
scsw(filepath, ' ', '_'); scsw(filepath, ' ', '_');
if (!(inc = fopen(filepath, "r"))) if (!(inc = fopen(filepath, "r")))
return error("Missing include", filepath); return error("Missing include", filepath);
s[0] = 0; s[0] = 0;
while ((c = fgetc(inc)) != EOF) { while ((c = fgetc(inc)) != EOF) {
if (c == '}') { if (c == '}') {
bclose++;
if (bopen == bclose) {
t = 0; t = 0;
if (!fptemplate(f, l, s)) bopen = 0;
bclose = 0;
}
if (bopen == bclose) {
if (!fptemplate(f, l, s)) {
return 0; return 0;
}
continue; continue;
} }
}
if (c == '{') { if (c == '{') {
bopen++;
if (bopen == 1) {
s[0] = 0; s[0] = 0;
t = 1; t = 1;
continue; continue;
} }
if (slen(s) > 1023) }
if (slen(s) > 4095)
return error("Templating error", filepath); return error("Templating error", filepath);
if (t) if (t)
ccat(s, c); ccat(s, c);