site-gen/parse.odin
Simon Kellet 023ae00e71 init
2026-03-07 11:02:36 +00:00

91 lines
1.8 KiB
Odin

package main
import "core:fmt"
import "core:os"
import "core:strings"
import cm "vendor:commonmark"
MD_SUFFIX :: ".md"
walk_tree_and_get_md_names :: proc(
path: string,
allocator := context.allocator,
) -> [dynamic]string {
files := make([dynamic]string, allocator)
w := os.walker_create(path)
defer os.walker_destroy(&w)
for info in os.walker_walk(&w) {
//handle errors
if path, err := os.walker_error(&w); err != nil {
fmt.eprintfln("failed walking %s: %s", path, err)
continue
}
//Skip a dir
if strings.has_suffix(info.fullpath, ".git") {
os.walker_skip_dir(&w)
continue
}
if !strings.has_suffix(info.name, MD_SUFFIX) {
continue //skip
}
append(&files, strings.clone(info.fullpath, allocator))
}
// Handle error if one happened during iteration at the end:
if path, err := os.walker_error(&w); err != nil {
fmt.eprintfln("failed walking %s: %v", path, err)
}
return files
}
walk_tree :: proc(path: string) -> []u8 {
filename: string
md_file: []u8
w := os.walker_create(path)
defer os.walker_destroy(&w)
for info in os.walker_walk(&w) {
//handle errors
if path, err := os.walker_error(&w); err != nil {
fmt.eprintfln("failed walking %s: %s", path, err)
continue
}
//lets play around
filename = info.name
if !strings.has_suffix(info.name, MD_SUFFIX) {
continue
} else {
return md_file
}
}
return nil
}
parse_file_md_to_html :: proc(
filename: string,
allocator := context.allocator,
) -> (
parsed: cstring,
err: os.Error,
) {
str: []u8
str = os.read_entire_file_from_path(filename, allocator) or_return
root := cm.parse_document(raw_data(str), len(str), cm.DEFAULT_OPTIONS)
defer cm.node_free(root)
html := cm.render_html(root, cm.DEFAULT_OPTIONS)
defer cm.free(html)
return html, nil
}