From eb734603dd22d202a06c4ea68497d4b7103cf5e0 Mon Sep 17 00:00:00 2001 From: thing1 Date: Sun, 9 Feb 2025 22:07:55 +0000 Subject: init commit --- Makefile | 8 +++++ TODO.gn | 5 ++++ gn | Bin 0 -> 20576 bytes gn.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ test.gn | 10 +++++++ 5 files changed, 126 insertions(+) create mode 100644 Makefile create mode 100644 TODO.gn create mode 100755 gn create mode 100644 gn.c create mode 100644 test.gn diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..56da911 --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ +CFLAGS=-ggdb + +all: gn + +gn: gn.c + cc gn.c -o gn ${CFLAGS} +clean: + rm gn diff --git a/TODO.gn b/TODO.gn new file mode 100644 index 0000000..3292ba5 --- /dev/null +++ b/TODO.gn @@ -0,0 +1,5 @@ +* Syntax checking * {2025.02.10} {todo} +- loop through tokens and find if they are in the right order +* More output formats * {2025.02.10} {todo} +- Latex? +- Groff? diff --git a/gn b/gn new file mode 100755 index 0000000..4a83bcb Binary files /dev/null and b/gn differ diff --git a/gn.c b/gn.c new file mode 100644 index 0000000..f3286b9 --- /dev/null +++ b/gn.c @@ -0,0 +1,103 @@ +#include +#include +#include +#include +#include + +typedef enum mode { + NONE, + LIST, +} mode; + +typedef enum types { + HEADING, + DATE, + TODO, + BULLET, +} types; + +typedef struct token { + char data[256]; + types type; +} token; + +mode m = NONE; + +token tokens[1024]; +int tokcount = 0; + +void eprint(char *msg) { + fprintf(stderr, "error: %s\n", msg); + exit(1); +} + +void printashtml(token t) { + char *start, *end; + switch (t.type) { + case HEADING: start = "

"; end = "

"; break; + case DATE: start = "

"; end = "

"; break; + case TODO: start = "

"; end = "

"; break; + case BULLET: start = "

"; end = "

"; break; + } + printf("%s%s%s\n", start, t.data, end); +} + +char *stripwhitespace(char *expr) { + while (isblank(expr[0])) expr++; + return expr; +} + +int readuntil(char *file, int off, char end, types t) { + int j = 0; + char tok[256]; + + off++; + while (file[off] != end) { + if (file[off] == 0) eprint("Never closed expression!") ; + tok[j] = file[off]; + off++; + j++; + } + + tok[j] = 0; + + memcpy(tokens[tokcount].data, stripwhitespace(tok), 256); + tokens[tokcount].type = t; + tokcount++; + + return off; +} + +int main(int argc, char **argv) { + for (int i = 0; i < argc && argc != 1; i++) { + if (strcmp(argv[i], "-l") == 0) m = LIST; + } + + char file[INT16_MAX]; + int i; + char c; + while ((c = getchar()) != EOF) { + file[i] = c; + i++; + } + file[i] = 0; + + for (i = 0; i < strlen(file); i++) { + switch (file[i]) { + case '*': i = readuntil(file, i, '*', HEADING); break; + case '[': i = readuntil(file, i, ']', DATE); break; + case '{': i = readuntil(file, i, '}', TODO); break; + case '-': i = readuntil(file, i, '\n', BULLET); break; + } + + } + + switch (m) { + case LIST: + for (int i = 0; i < tokcount; i++) + if (tokens[i].type == HEADING) printf("%s\n", tokens[i].data); + break; + case NONE: return 0; + } + return 0; +} diff --git a/test.gn b/test.gn new file mode 100644 index 0000000..054d660 --- /dev/null +++ b/test.gn @@ -0,0 +1,10 @@ +* my awsome note * [2025.02.09] {done} +- sub point +- sub point two +* my awsome note * [2025.02.09] {done} +* my awsome note * [2025.02.09] {done} +* my awsome note * [2025.02.09] {done} +* my awsome note * [2025.02.09] {done} +* my awsome note * [2025.02.09] {done} +* my awsome note * [2025.02.09] {done} +* my awsome note * [2025.02.09] {done} -- cgit v1.2.3