summaryrefslogtreecommitdiff
path: root/src/md.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/md.rs')
-rw-r--r--src/md.rs38
1 files changed, 23 insertions, 15 deletions
diff --git a/src/md.rs b/src/md.rs
index 02a827b..02efa0c 100644
--- a/src/md.rs
+++ b/src/md.rs
@@ -142,16 +142,16 @@ impl Markdown {
/// Find embedded files.
// FIXME: this should return a result
- pub fn embedded_files(&self) -> EmbeddedFiles {
+ pub fn embedded_files(&self) -> Result<EmbeddedFiles, MdError> {
let mut files = EmbeddedFiles::default();
for e in Self::visit(&self.html) {
- if let Ok(file) = embedded_file(e) {
+ if let MaybeEmbeddedFile::IsFile(file) = embedded_file(e)? {
files.push(file);
}
}
- files
+ Ok(files)
}
}
@@ -175,21 +175,23 @@ impl StructureElement {
}
}
-fn embedded_file(e: &Element) -> Result<EmbeddedFile, MdError> {
+enum MaybeEmbeddedFile {
+ IsFile(EmbeddedFile),
+ NotFile,
+}
+
+fn embedded_file(e: &Element) -> Result<MaybeEmbeddedFile, MdError> {
if e.tag() != ElementTag::Pre {
- return Err(MdError::NotCodeBlockElement(
- e.tag().name().to_string(),
- e.location(),
- ));
+ return Ok(MaybeEmbeddedFile::NotFile);
}
if !e.has_attr("class", "file") {
- return Err(MdError::NotFile(e.location()));
+ return Ok(MaybeEmbeddedFile::NotFile);
}
let id = e.attr("id");
if id.is_none() {
- return Err(MdError::NoId(e.location()));
+ return Ok(MaybeEmbeddedFile::NotFile);
}
let id = id.unwrap();
if id.value().is_none() {
@@ -212,7 +214,8 @@ fn embedded_file(e: &Element) -> Result<EmbeddedFile, MdError> {
if contents.ends_with('\n') {
contents.truncate(contents.len() - 1);
}
- match AddNewline::parse(e.attr("add-newline"), e.location())? {
+ let addnl = AddNewline::parse(e.attr("add-newline"), e.location());
+ match addnl? {
AddNewline::No => {
// Newline already isn't there.
}
@@ -228,7 +231,12 @@ fn embedded_file(e: &Element) -> Result<EmbeddedFile, MdError> {
}
};
- Ok(EmbeddedFile::new(id.into(), contents))
+ eprintln!("ok");
+
+ Ok(MaybeEmbeddedFile::IsFile(EmbeddedFile::new(
+ id.into(),
+ contents,
+ )))
}
#[derive(Debug, Eq, PartialEq, Copy, Clone)]
@@ -426,7 +434,7 @@ pub enum MdError {
NoIdValue(Location),
/// Value ofv add-newline attribute ie not understood.
- #[error("{0}: value of add-newline attirubte is not understood: {0}")]
+ #[error("{1}: value of add-newline attribute is not understood: {0}")]
BadAddNewline(String, Location),
}
@@ -637,7 +645,7 @@ given ABBA
fn finds_no_embedded_files_in_empty_doc() {
let md = Markdown::new_from_str(Path::new(""), "").unwrap();
let files = md.embedded_files();
- assert!(files.files().is_empty());
+ assert!(files.unwrap().files().is_empty());
}
#[test]
@@ -651,7 +659,7 @@ hello, world
"#,
)
.unwrap();
- let files = md.embedded_files();
+ let files = md.embedded_files().unwrap();
assert_eq!(files.files().len(), 1);
let file = files.files().get(0).unwrap();
assert_eq!(file.filename(), "fileid");