Tholp's bespoke website generator

Check parent folders for project file if missing

Tholp1 3a16cd22 55632975

Changed files
+38 -1
src
+27 -1
src/main.rs
···
env,
fs::{self, File},
io::Write,
process::{exit, Output},
};
use stringtools::{
···
static DELIMITERS: [char; 10] = [' ', '\n', '\t', '(', ')', '{', '}', '\\', '\'', '\"'];
fn main() {
-
let mut project = parse_project(env::current_dir().unwrap().as_path());
for group in &mut project.filegroups {
for infile in &mut group.files {
process_file(infile, &mut project.context);
···
env,
fs::{self, File},
io::Write,
+
path::PathBuf,
process::{exit, Output},
};
use stringtools::{
···
static DELIMITERS: [char; 10] = [' ', '\n', '\t', '(', ')', '{', '}', '\\', '\'', '\"'];
fn main() {
+
let mut project_folder = PathBuf::from(env::current_dir().unwrap().as_path());
+
+
let mut project_path = project_folder.clone();
+
project_path.push("skidmark.toml");
+
+
while !project_path.exists() || project_path.is_dir() {
+
let ok = project_folder.pop();
+
if !ok {
+
println!("No skidmark.toml project file found in this folder or ancestors.");
+
exit(1);
+
}
+
project_path = project_folder.clone();
+
project_path.push("skidmark.toml");
+
}
+
println!("Operatting with {:?}", &project_path.as_os_str());
+
assert!(env::set_current_dir(&project_folder).is_ok());
+
+
let mut project = parse_project(&project_path);
+
+
let mut num = 0;
+
+
for group in &project.filegroups {
+
num = num + group.files.len();
+
}
+
+
println!("Proccesing {} files.", num);
for group in &mut project.filegroups {
for infile in &mut group.files {
process_file(infile, &mut project.context);
+11
src/projectparse.rs
···
pub struct ProjectContext {
pub filemap: Vec<PathBuf>, // mapped to index
}
macro_rules! get_table_bool_or_default {
···
let mut new_file = crate::types::InputFile::new();
new_file.file_input = project.settings.input_folder.clone();
new_file.file_input.push(filename);
group.files.push(new_file);
}
}
}
return project;
···
pub struct ProjectContext {
pub filemap: Vec<PathBuf>, // mapped to index
+
//variables later
}
macro_rules! get_table_bool_or_default {
···
let mut new_file = crate::types::InputFile::new();
new_file.file_input = project.settings.input_folder.clone();
new_file.file_input.push(filename);
+
+
new_file.file_htmlout = project.settings.output_folder.clone();
+
new_file.file_htmlout.push(filename);
+
new_file.file_htmlout.set_extension("html");
+
+
new_file.file_skidout = new_file.file_htmlout.clone();
+
new_file.file_skidout.set_extension("sko");
+
group.files.push(new_file);
}
}
+
+
project.filegroups.push(group);
}
return project;