diff options
author | metamuffin <metamuffin@disroot.org> | 2022-09-29 16:06:55 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-09-29 16:06:55 +0200 |
commit | b31b6ff2ab5d94e5b6280ba3cb4db7d46267999a (patch) | |
tree | ed3ddb623ffead4a073d8230f31f9640d0d29e20 /src/main.rs | |
parent | 3dbde33c6797c5522929a6b4cc3c62e9f0c27671 (diff) | |
download | staticwiki-b31b6ff2ab5d94e5b6280ba3cb4db7d46267999a.tar staticwiki-b31b6ff2ab5d94e5b6280ba3cb4db7d46267999a.tar.bz2 staticwiki-b31b6ff2ab5d94e5b6280ba3cb4db7d46267999a.tar.zst |
docs
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 57 |
1 files changed, 44 insertions, 13 deletions
diff --git a/src/main.rs b/src/main.rs index 6af1908..e8c0375 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,6 +21,8 @@ struct Args { /// Show non-fatal warnings #[arg(short, long)] verbose: bool, + #[arg(short, long, default_value = "")] + footer: String, } fn main() { @@ -34,6 +36,11 @@ fn main() { let input = std::io::BufReader::new(input); let mut archive = tar::Builder::new(stdout()); + let footer = format!( + "<a href=\"https://codeberg.org/metamuffin/staticwiki\">staticwiki</a>; {}", + args.footer + ); + for (i, result) in parse_mediawiki_dump::parse(input).enumerate() { match result { Err(error) => { @@ -67,6 +74,7 @@ fn main() { render_toc(&mut html, &ast.nodes); render_nodes(&mut html, &mut refs, &ast.nodes); render_refs(&mut html, &refs); + write!(&mut html, "<footer>{footer}</footer>").unwrap(); write!(&mut html, "</body></html>").unwrap(); if args.tar { @@ -257,33 +265,56 @@ pub fn render_template( use std::fmt::Write; match name { // TODO this can panic - "lang" => write!(html, "{}", render_nodes_to_string(¶ms[1].value, refs)).unwrap(), + "lang" => write!( + html, + "{}", + render_nodes_to_string(¶ms.get(1)?.value, refs) + ) + .unwrap(), "IPA" => write!( html, "<code>{}</code>", - render_nodes_to_string(¶ms[0].value, refs) + render_nodes_to_string(¶ms.get(0)?.value, refs) ) .unwrap(), "Internetquelle" | "Literatur" => { write!(html, "{}: <ul>", escape(name)).unwrap(); for p in params { - write!( - html, - "<li>{}: {}</li>", - p.name - .as_ref() - .map(|n| render_nodes_to_string(n, &mut vec![])) - .unwrap_or(String::from("??")), - render_nodes_to_string(&p.value, &mut vec![]) - ) - .unwrap(); + let key = p + .name + .as_ref() + .map(|n| render_nodes_to_string(n, &mut vec![])) + .unwrap_or(String::from("??")); + let value = render_nodes_to_string(&p.value, &mut vec![]); + if let "url" | "archiv-url" | "Online" = key.as_str() { + write!( + html, + "<li>{}: <a href=\"{}\">{}</a></li>", + key, value, value + ) + } else { + write!(html, "<li>{}: {}</li>", key, value) + } + .unwrap() } write!(html, "</ul>").unwrap(); } + "Siehe auch" | "Hauptartikel" => { + let k = text_node(params.get(0)?.value.get(0)?); + write!( + html, + "<i>{}: <a href=\"{}\">{}</a></i>", + escape(name), + urlencode(&k), + escape(&k) + ) + .unwrap(); + } _ => { - write!(html, "[todo: {name:?} template <pre>{params:#?}</pre>]").unwrap(); + write!(html, "[todo: {name:?} template]").unwrap(); + // write!(html, "[todo: {name:?} template <pre>{params:#?}</pre>]").unwrap(); // eprintln!("unsupported template {name:?}"); // eprintln!("{params:?}"); } |