commit 6f0276816f9ee6296c23bd2f03e06f37a6723f57
Author: noone <vazkats@gmail.com>
Date: Mon, 5 Jan 2026 21:36:37 +0200
first commit
Diffstat:
| A | a.out | | | 0 | |
| A | main.c | | | 145 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | out.html | | | 9 | +++++++++ |
| A | test.txt | | | 7 | +++++++ |
4 files changed, 161 insertions(+), 0 deletions(-)
diff --git a/a.out b/a.out
Binary files differ.
diff --git a/main.c b/main.c
@@ -0,0 +1,145 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef uint8_t u8;
+typedef uint32_t u32;
+typedef int8_t i8;
+typedef int32_t i32;
+
+#define DIE(str) do { \
+ fprintf(stderr, "ERROR in line %d: %s\n", __LINE__, str); \
+ exit(EXIT_FAILURE); \
+} while (0);
+
+typedef enum {
+ CMD_BOLD, CMD_ITALIC, CMD_H1, CMD_H2, CMD_CODE, CMD_QUOTE, CMD_STYLE
+} CMD_TYPE;
+
+typedef struct {
+ i8 top;
+ CMD_TYPE arr[100];
+} stack;
+
+stack stack_init(void) { stack s; s.top = -1; return s; }
+void stack_push(stack *s, CMD_TYPE val) { s->arr[++s->top] = val; return; }
+CMD_TYPE stack_pop(stack *s) { return s->arr[s->top--]; }
+CMD_TYPE stack_peek(stack *s) { return s->arr[s->top]; }
+
+char*
+file_open(const char* flname)
+{
+ FILE* fp;
+ long sz;
+ char *file;
+
+ if (flname == NULL) DIE("No file Given");
+
+ fp = fopen(flname, "rb");
+
+ if (fp == NULL) DIE("Opening the file");
+
+ fseek(fp, 0, SEEK_END);
+ sz = ftell(fp);
+ rewind(fp);
+
+ file = malloc(sizeof(u8)*sz);
+
+ fread(file, sz, 1, fp);
+ fclose(fp);
+
+ return file;
+}
+
+i32
+cmd_get(const char* cmd)
+{
+ if (strcmp(cmd, "b") == 0) return CMD_BOLD;
+ if (strcmp(cmd, "h1") == 0) return CMD_H1;
+ if (strcmp(cmd, "h2") == 0) return CMD_H2;
+ if (strcmp(cmd, "i") == 0) return CMD_ITALIC;
+ return -2;
+}
+
+char*
+parse(char* token, stack *s)
+{
+ const char *cmd;
+
+ if(strstr(token, "~") && (strlen(token) > 1)) {
+ cmd = token + 1;
+ switch (cmd_get(cmd)) {
+ case CMD_BOLD:
+ stack_push(s, CMD_BOLD);
+ token = "<b>";
+ break;
+ case CMD_H1:
+ stack_push(s, CMD_H1);
+ token = "<h1>";
+ break;
+ case CMD_H2:
+ stack_push(s, CMD_H2);
+ token = "<h2>";
+ break;
+ case CMD_ITALIC:
+ stack_push(s, CMD_ITALIC);
+ token = "<i>";
+ break;
+ default:
+ break;
+ }
+ }
+
+ if(strcmp(token, "~") == 0) {
+ switch(stack_pop(s)) {
+ case CMD_BOLD:
+ token = "</b>";
+ break;
+ case CMD_H1:
+ token = "</h1>";
+ break;
+ case CMD_H2:
+ token = "</h2>";
+ break;
+ case CMD_ITALIC:
+ token = "</i>";
+ break;
+ default:
+ break;
+ }
+ }
+
+ return token;
+}
+
+int
+main(int argc, char **argv)
+{
+ char *in;
+ char *out;
+ FILE *fp_out;
+ char *token;
+ char *peek;
+ int res = 0;
+ stack s = stack_init();
+
+ in = file_open(argv[1]);
+ fp_out = fopen("out.html", "w");
+
+ token = strsep(&in, " ");
+ while (token != NULL) {
+ if (!strpbrk(token, "\n"))
+ token = parse(token, &s);
+ fwrite(token, strlen(token), 1, fp_out);
+ fwrite(" ", 1, 1, fp_out);
+
+ printf("Token is: %s, len is: %d\n", token, strlen(token));
+ token = strsep(&in, " ");
+ }
+
+ free(in);
+ fclose(fp_out);
+
+ return 0;
+}
diff --git a/out.html b/out.html
@@ -0,0 +1,8 @@
+Hello there <b> you know </b> of <i> course </i> <b> yeap ~
+
+
+
+
+
+~h1 hi ~
+
+\ No newline at end of file
diff --git a/test.txt b/test.txt
@@ -0,0 +1,7 @@
+Hello there ~b you know ~ of ~i course ~ ~b yeap ~
+
+
+
+
+
+~h1 hi ~