#+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) } } }