aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-09-29 16:06:55 +0200
committermetamuffin <metamuffin@disroot.org>2022-09-29 16:06:55 +0200
commitb31b6ff2ab5d94e5b6280ba3cb4db7d46267999a (patch)
treeed3ddb623ffead4a073d8230f31f9640d0d29e20 /src/main.rs
parent3dbde33c6797c5522929a6b4cc3c62e9f0c27671 (diff)
downloadstaticwiki-b31b6ff2ab5d94e5b6280ba3cb4db7d46267999a.tar
staticwiki-b31b6ff2ab5d94e5b6280ba3cb4db7d46267999a.tar.bz2
staticwiki-b31b6ff2ab5d94e5b6280ba3cb4db7d46267999a.tar.zst
docs
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs57
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(&params[1].value, refs)).unwrap(),
+ "lang" => write!(
+ html,
+ "{}",
+ render_nodes_to_string(&params.get(1)?.value, refs)
+ )
+ .unwrap(),
"IPA" => write!(
html,
"<code>{}</code>",
- render_nodes_to_string(&params[0].value, refs)
+ render_nodes_to_string(&params.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:?}");
}