chtml

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 6f0276816f9ee6296c23bd2f03e06f37a6723f57
Author: noone <vazkats@gmail.com>
Date:   Mon,  5 Jan 2026 21:36:37 +0200

first commit

Diffstat:
Aa.out | 0
Amain.c | 145+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aout.html | 9+++++++++
Atest.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 ~