diff --git a/src/convert/npf.rs b/src/convert/npf.rs index 567089a..5c82f39 100644 --- a/src/convert/npf.rs +++ b/src/convert/npf.rs @@ -20,12 +20,12 @@ mod objects_post; use content_blocks::{BlockText, BlockValue}; use text_formatting::{FormatTypeBold, FormatTypeItalic, FormatValue}; -use self::content_blocks::BlockImage; use text_formatting::{FormatTypeLink, FormatTypeStrikeThrough}; #[derive(Debug)] pub enum NPFConvertError { TODO, + InvalidURL { url: String, err: url::ParseError }, } fn extract_text(contents: &Vec) -> String { @@ -105,13 +105,33 @@ impl<'a> TryFrom<&'a Node<'a, RefCell>> for objects::Post { post.content.append(&mut content); Ok(()) } + NodeValue::Link(link) => match url::Url::parse(&link.url) { + Ok(url) => { + let mut content = Self::try_from(n)? + .fold_content() + .for_each_content(|c| { + if let BlockValue::Text(ref mut t) = c { + let mut format = FormatTypeLink::from(&t.text); + format.url = url.clone(); + t.push_formatting(FormatValue::Link(format)); + t.text = String::from(t.text.trim()); + } + }) + .content; + post.content.append(&mut content); + Ok(()) + } + Err(err) => Err(NPFConvertError::InvalidURL { + url: link.url.clone(), + err, + }), + }, _ => Ok(()), }) .collect(); if let Err(e) = r { Err(e) } else { - println!("{:#?}", post); Ok(post) } } diff --git a/src/main.rs b/src/main.rs index feb61a0..a5a618e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -73,7 +73,10 @@ fn main() { let arena = comrak::Arena::new(); let ast = comrak::parse_document(&arena, &file, &mdparser::utils::default_options()); - let _ = convert::npf::from(ast); + match convert::npf::from(ast) { + Ok(test) => println!("{}", serde_json::to_string_pretty(&test).unwrap()), + Err(err) => println!("{err:#?}"), + }; // println!("{:#?}", ast); let result = match cli.command {