diff --git a/Taskfile.yml b/Taskfile.yml index f11fd27..38fa096 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -30,7 +30,7 @@ tasks: test: desc: Run test cmds: - - v test commands/ + - v test . vet: desc: Report suspicious code constructs @@ -62,6 +62,11 @@ tasks: cmds: - v . -o {{.TARGET}} + prod-build: + desc: Build vss for production + cmds: + - v -prod . -o {{.TARGET}} + example: desc: Setup for example cmds: diff --git a/commands/build.v b/commands/build.v index bc59697..01f81b3 100644 --- a/commands/build.v +++ b/commands/build.v @@ -4,16 +4,13 @@ import os import cli import log import time -import toml import regex import markdown import internal.template +import internal.config const default_config = 'config.toml' -// Allowed parameters -const config_params = ['title', 'description', 'baseUrl', 'build'] - const default_template = 'layouts/index.html' const defautl_static = 'static' @@ -43,19 +40,6 @@ fn read_file(filename string) ?string { return contents } -fn get_config_map() ?map[string]string { - mut config_map := map[string]string{} - - // https://modules.vlang.io/toml.html - toml_str := read_file(commands.default_config)? - config := toml.parse_text(toml_str)? - for param in commands.config_params { - v := config.value_opt(param) or { continue } - config_map[param] = v.string() - } - return config_map -} - fn get_html_path(md_path string) string { mut file_name := os.file_name(md_path) file_name = file_name.replace('.md', '.html') @@ -112,11 +96,19 @@ fn build(mut logger log.Log) ? { } template_content := os.read_file(commands.default_template)? - mut config_map := get_config_map()? + + toml_text := read_file(commands.default_config)? + config := config.load(toml_text)? + mut config_map := config.as_map() md_paths := normalise_paths(os.walk_ext('.', '.md')) logger.info('start md to html') for path in md_paths { + file_name := os.file_name(path) + if file_name in config.build.ignore_files { + logger.info('$file_name is included in ignore_files, skip build') + continue + } mut md := os.read_file(path)? md = pre_proc_md_to_html(md)? contents := markdown.to_html(md) diff --git a/commands/build_test.v b/commands/build_test.v index f070b99..f7d253e 100644 --- a/commands/build_test.v +++ b/commands/build_test.v @@ -1,7 +1,5 @@ module commands -import os - fn test_get_html_filename() { test_path := 'index.md' mut html_name := get_html_path(test_path) diff --git a/internal/config/config.v b/internal/config/config.v index 005e0ff..7876f07 100644 --- a/internal/config/config.v +++ b/internal/config/config.v @@ -2,12 +2,16 @@ module config import toml +// template_params list of field names to convert as_map +const template_params = ['title', 'description', 'base_url'] + // Build settings for build struct Build { pub mut: ignore_files []string } +// Config general settings for vss struct Config { pub mut: build Build @@ -16,7 +20,7 @@ pub mut: base_url string } -// load +// load pub fn load(toml_text string) ?Config { doc := toml.parse_text(toml_text)? @@ -27,6 +31,10 @@ pub fn load(toml_text string) ?Config { } // as_map for template.parse -pub fn (c Config) as_map() ?map[string]string { - -} \ No newline at end of file +pub fn (c Config) as_map() map[string]string { + mut mp := map[string]string{} + mp['title'] = c.title + mp['description'] = c.description + mp['base_url'] = c.base_url + return mp +}