diff options
Diffstat (limited to 'src/ast.rs')
-rw-r--r-- | src/ast.rs | 45 |
1 files changed, 0 insertions, 45 deletions
@@ -46,51 +46,6 @@ impl AbstractSyntaxTree { } } -/// Extract YAML metadata from a Markdown document. -pub fn extract_metadata(markdown: &str) -> Result<(YamlMetadata, &str), Error> { - trace!("Extracting YAML from Markdown"); - let (yaml, md) = if let Some((yaml, markdown)) = get_yaml(&LEADING_YAML_PATTERN, markdown) { - trace!("Found leading YAML: {:?}", yaml); - (yaml, markdown) - } else if let Some((yaml, _markdown)) = get_yaml(&TRAILING_YAML_PATTERN, markdown) { - trace!("Found trailing YAML: {:?}", yaml); - (yaml, markdown) - } else { - trace!("No YAML to be found"); - return Err(Error::NoMetadata); - }; - let meta = YamlMetadata::new(yaml)?; - trace!("Parsing markdown: OK"); - Ok((meta, md)) -} - -// Extract a YAML metadata block using a given regex. -fn get_yaml<'a>(pat: &Regex, markdown: &'a str) -> Option<(&'a str, &'a str)> { - trace!("Markdown: {:?}", markdown); - if let Some(c) = pat.captures(markdown) { - trace!("YAML regex matches: {:?}", c); - let yaml = c.name("yaml"); - let text = c.name("text"); - trace!("YAML metadata: {:?}", yaml); - trace!("markdown: {:?}", text); - if yaml.is_some() && text.is_some() { - trace!("YAML regex captures YAML and text"); - let yaml = yaml?; - let text = text?; - let yaml = &markdown[yaml.start()..yaml.end()]; - let text = &markdown[text.start()..text.end()]; - assert!(yaml.starts_with("---")); - assert!(yaml.ends_with("...\n")); - return Some((yaml, text)); - } else { - trace!("YAML regex fails to capture YAML"); - } - } else { - trace!("YAML regex does not match"); - } - None -} - // Parse Markdown into a sequence of Blocks. fn parse_blocks(markdown: &str) -> Vec<Block> { trace!("Parsing blocks"); |