use crate::*;
#[derive(Debug, Default, PartialEq, Eq, Clone)]
pub struct Text<'a> {
pub lines: Vec<Line<'a>>,
}
impl<'s> From<&'s str> for Text<'s> {
fn from(md: &str) -> Text<'_> {
parse_text(md, Options::default())
}
}
impl<'s> Text<'s> {
pub fn from_str(
s: &'s str,
options: Options,
) -> Self {
crate::parser::parse_lines(s.lines(), options)
}
pub fn from_md_lines<I>(md_lines: I) -> Self
where
I: Iterator<Item = &'s str>,
{
crate::parser::parse_lines(md_lines, Options::default())
}
pub fn raw_str(s: &'s str) -> Self {
let lines = s.lines().map(Line::raw_str).collect();
Self { lines }
}
}
#[test]
fn test_keep_code_fences() {
let md = r"# Heading
Simple text.
```rust
let a = 10;
let b = 20;
```
";
let text = Text::from_str(md, Options::default().keep_code_fences(false));
assert_eq!(text.lines.len(), 4);
let text = Text::from_str(md, Options::default().keep_code_fences(true));
dbg!(&text);
assert_eq!(text.lines.len(), 6);
let lang = text.lines[2].code_fence_lang().unwrap();
assert_eq!(lang, "rust");
}