create first rough html output
This commit is contained in:
88
src/main.rs
88
src/main.rs
@ -1,27 +1,99 @@
|
||||
use risp::law::{Heading, HeadingContent, Law};
|
||||
use std::fs;
|
||||
|
||||
fn print_header(header: Heading, level: usize) {
|
||||
use risp::law::{Content, Heading, HeadingContent, Law, Section};
|
||||
|
||||
fn print_content(content: Content) -> String {
|
||||
let mut ret = String::new();
|
||||
|
||||
match content {
|
||||
Content::Text(t) => ret.push_str(&format!("<div class='content text'>{t}</div>")),
|
||||
Content::Item(l) | Content::List(l) => {
|
||||
ret.push_str("<span class='content list'>");
|
||||
for item in l {
|
||||
ret.push_str(&print_content(item));
|
||||
}
|
||||
ret.push_str("</span>");
|
||||
}
|
||||
}
|
||||
|
||||
ret
|
||||
}
|
||||
|
||||
fn print_paragraph(section: Section) -> String {
|
||||
let mut ret = String::new();
|
||||
ret.push_str("<div class='par'>");
|
||||
ret.push_str(&format!("<span class='symb'>{}</span>", section.symb));
|
||||
if let Some(par_header) = section.par_header {
|
||||
ret.push_str(&format!("<span class='header'>{}</span>", par_header));
|
||||
}
|
||||
if let Some(note) = section.par_note {
|
||||
ret.push_str(&format!("<span class='note'>Beachte: {}</span>", note));
|
||||
}
|
||||
ret.push_str(&print_content(section.content));
|
||||
|
||||
ret.push_str("</div>");
|
||||
ret
|
||||
}
|
||||
|
||||
fn print_header(header: Heading, level: usize) -> String {
|
||||
let mut ret = String::new();
|
||||
let mut header_title = header.name.clone();
|
||||
if let Some(desc) = header.desc {
|
||||
header_title.push_str(&format!(" ({desc})"))
|
||||
}
|
||||
|
||||
println!("{} {header_title}", " ".repeat(level));
|
||||
ret.push_str(&format!(
|
||||
"<details>\
|
||||
<summary><h{0}>{1}</h{0}></summary>\n\
|
||||
<p>",
|
||||
level + 2,
|
||||
header_title
|
||||
));
|
||||
|
||||
match header.content {
|
||||
HeadingContent::Paragraph(p) => {}
|
||||
HeadingContent::Paragraph(p) => {
|
||||
for section in p {
|
||||
ret.push_str(&print_paragraph(section));
|
||||
}
|
||||
}
|
||||
HeadingContent::Heading(subheaders) => {
|
||||
for subheader in subheaders {
|
||||
print_header(subheader, level + 1);
|
||||
ret.push_str(&print_header(subheader, level + 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret.push_str("</p></details>");
|
||||
|
||||
ret
|
||||
}
|
||||
|
||||
fn get_content(config_path: &str) -> String {
|
||||
let law = Law::from_config(config_path).unwrap();
|
||||
|
||||
let mut ret = String::new();
|
||||
for h in law.header {
|
||||
ret.push_str(&print_header(h, 0));
|
||||
}
|
||||
|
||||
ret
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let law = Law::from_config("data/abgb.toml").unwrap();
|
||||
let configs = fs::read_dir("./laws").expect("No folder with config files");
|
||||
|
||||
for h in law.header {
|
||||
print_header(h, 0);
|
||||
for config in configs {
|
||||
let config = config.unwrap();
|
||||
let filename = config.file_name().into_string().unwrap();
|
||||
//TODO: use proper logic...
|
||||
let law_name = filename.replace(".toml", "");
|
||||
|
||||
let path = format!("{}", config.path().display());
|
||||
let content = get_content(&path);
|
||||
|
||||
let template = fs::read_to_string("templates/index.html").unwrap();
|
||||
let site = template.replace("{{content}}", &content);
|
||||
|
||||
fs::write(&format!("output/{law_name}.html"), &site).expect("Unable to write file");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user