diff options
author | thing1 <thing1@seacrossedlovers.xyz> | 2025-02-09 22:07:55 +0000 |
---|---|---|
committer | thing1 <thing1@seacrossedlovers.xyz> | 2025-02-09 22:07:55 +0000 |
commit | eb734603dd22d202a06c4ea68497d4b7103cf5e0 (patch) | |
tree | 181afbcd725989ef7db0cec3627bb3528548be95 |
init commit
-rw-r--r-- | Makefile | 8 | ||||
-rw-r--r-- | TODO.gn | 5 | ||||
-rwxr-xr-x | gn | bin | 0 -> 20576 bytes | |||
-rw-r--r-- | gn.c | 103 | ||||
-rw-r--r-- | test.gn | 10 |
5 files changed, 126 insertions, 0 deletions
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 @@ -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? Binary files differ@@ -0,0 +1,103 @@ +#include <ctype.h> +#include <stdint.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +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 = "<h1>"; end = "</h1>"; break; + case DATE: start = "<h2>"; end = "</h2>"; break; + case TODO: start = "<h3>"; end = "</h3>"; break; + case BULLET: start = "<p>"; end = "</p>"; 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; +} @@ -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} |