From 445a1d124ba71c16c8c9a330e270a50338dcef86 Mon Sep 17 00:00:00 2001 From: Simon Kellet Date: Mon, 14 Sep 2026 14:22:53 +0100 Subject: [PATCH] making main cleaner --- util.odin | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 util.odin diff --git a/util.odin b/util.odin new file mode 100644 index 0000000..936d72a --- /dev/null +++ b/util.odin @@ -0,0 +1,73 @@ +#+vet explicit-allocators +package main + +import "core:os" +import "core:strings" +import "core:time" +import "core:fmt" +import vmem "core:mem/virtual" +import "core:mem" +import fleg "flag" + +create_html_file :: proc(md_f: string, dir: string, output_dir: string, allocater := context.allocator) -> (file: ^os.File, err: os.Error){ + sb := strings.builder_make(allocater) //sb for writing to files + defer strings.builder_destroy(&sb) + + md_filename := strings.split(md_f, dir, allocater) + trimmed_filename := strings.trim_right(md_filename[1], ".md") + + // sck: Change to output directory. Not sure if this also is needed + //But messing around with it means I create a lot of + //files to clean up. Works for now! + os.change_directory(output_dir) + + strings.write_string(&sb, fmt.aprintf("%v", trimmed_filename, allocator = allocater)) + strings.write_string(&sb, ".html") + + //get "full" name for creation + writing to html file + full_filename := strings.to_string(sb) + file = os.create(full_filename) or_return + + return file, nil +} + +write_footer_and_timings :: proc(trimmed_filename: string, file: ^os.File, start: time.Tick, allocator := context.allocator){ + if trimmed_filename == "index"{ + buf: [1024]u8 + date := time.now() + end := time.tick_since(start) + + os.write_string(file, "

") + } +} + +generate_all_md_files_to_html :: proc(md_files: [dynamic]string, directory: string, output_dir: string, start: time.Tick, allocator := context.allocator) { + for file, _ in md_files { + if file == ".DS_Store" { continue } //Ignore annoying MacOS (TODO: clean up proc?) + md_filename := strings.split(file, directory, allocator) + trimmed_filename := strings.trim_right(md_filename[1], ".md") + // sck: I am not sure if changing dir's is needed but I am now relying on it lol + os.change_directory(directory) + + // turn all .md files into parsed .html files! + html_content, parse_err := parse_file_md_to_html(file, allocator) + if parse_err != nil { + fmt.eprintfln("ERROR: Could not parse file %s: %s", file, os.error_string(parse_err)) + } + + final_html_file, html_file_err := create_html_file(file, directory, output_dir, allocator) + if html_file_err != nil { + fmt.eprintfln("ERROR: Could not create file %s: %s", file, os.error_string(html_file_err)) + } + + write_prefixs_to_html_file(final_html_file) + os.write_string(final_html_file, html_content) //WRITE PAGE + + if trimmed_filename == "index"{ + write_footer_and_timings(trimmed_filename, final_html_file, start, allocator) + } + } +} \ No newline at end of file