From ef68fa084111813684243f1ef8ffc00131ddee49 Mon Sep 17 00:00:00 2001
From: metamuffin
").unwrap(),
parse_wiki_text::Node::Image { target, text, .. } => write!(html, "[todo: image]").unwrap(),
parse_wiki_text::Node::Italic { .. } => (),
- parse_wiki_text::Node::Link { target, text, .. } => write!(html, "[todo]").unwrap(),
- parse_wiki_text::Node::MagicWord { .. } => write!(html, "[todo]").unwrap(),
- parse_wiki_text::Node::OrderedList { items, .. } => write!(html, "[todo]").unwrap(),
- parse_wiki_text::Node::ParagraphBreak { .. } => write!(html, "[todo]").unwrap(),
- parse_wiki_text::Node::Parameter { default, name, .. } => write!(html, "[todo]").unwrap(),
+ parse_wiki_text::Node::Link { target, text, .. } => write!(
+ html,
+ "{}",
+ title_to_filename(target), // TODO does this always link to wikipedia?
+ render_nodes_to_string(text, refs)
+ )
+ .unwrap(),
+ parse_wiki_text::Node::MagicWord { .. } => write!(html, "[todo: magic]").unwrap(),
+ parse_wiki_text::Node::OrderedList { items, .. } => write!(
+ html,
+ "{}
",
+ items
+ .iter()
+ .map(|e| format!("{}
",
+ items
+ .iter()
+ .map(|e| format!("
").unwrap(), + parse_wiki_text::Node::Parameter { default, name, .. } => { + write!(html, "[todo: parameter]").unwrap() + } parse_wiki_text::Node::Preformatted { nodes, .. } => { - write!(html, "
{}", render_nodes_to_string(nodes)).unwrap()
+ write!(html, "{}", render_nodes_to_string(nodes, refs)).unwrap()
}
- parse_wiki_text::Node::Redirect { target, .. } => write!(html, "[todo]").unwrap(),
- parse_wiki_text::Node::StartTag { name, .. } => write!(html, "[todo]").unwrap(),
+ parse_wiki_text::Node::Redirect { target, .. } => write!(
+ html,
+ "Redirect: {}",
+ title_to_filename(target),
+ title_to_filename(target)
+ )
+ .unwrap(),
+ parse_wiki_text::Node::StartTag { name, .. } => write!(html, "[todo: start tag]").unwrap(),
parse_wiki_text::Node::Table {
attributes,
captions,
rows,
..
- } => write!(html, "[todo]").unwrap(),
- parse_wiki_text::Node::Tag { name, nodes, .. } => write!(html, "[todo]").unwrap(),
+ } => write!(html, "[todo: table]").unwrap(),
+ parse_wiki_text::Node::Tag { name, nodes, .. } => match name.as_ref() {
+ "ref" => {
+ if !nodes.is_empty() {
+ let r = render_nodes_to_string(nodes, refs);
+ refs.push(r);
+ let refid = refs.len();
+ write!(html, "[{}]", refid, refid).unwrap();
+ }
+ }
+ _ => write!(html, "[todo: tag {name:?} template]").unwrap(),
+ },
parse_wiki_text::Node::Template {
name, parameters, ..
- } => write!(html, "[todo]").unwrap(),
+ } => {
+ let name = match name.first() {
+ Some(Node::Text { value, .. }) => value,
+ _ => panic!("no"),
+ };
+ render_template(html, refs, name, parameters)
+ }
parse_wiki_text::Node::Text { value, .. } => write!(html, "{}", escape(value)).unwrap(),
- parse_wiki_text::Node::UnorderedList { items, .. } => write!(html, "[todo]").unwrap(),
}
}
+
+pub fn render_template(
+ html: &mut String,
+ refs: &mut Vec{}",
+ render_nodes_to_string(¶ms[0].value, refs)
+ )
+ .unwrap(),
+
+ _ => {
+ write!(html, "[todo: {name:?} template]").unwrap();
+ // eprintln!("unsupported template {name:?}");
+ // eprintln!("{params:?}");
+ }
+ }
+}
+
+fn render_refs(html: &mut String, refs: &Vec