1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use crate::line::Line;
use crate::line_parser::LineParser;
#[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<'_> {
let mut lines = Vec::new();
let mut between_fences = false;
for md_line in md.lines() {
let parser = LineParser::from(md_line);
let line = if between_fences {
parser.as_code()
} else {
parser.line()
};
match line {
Line::CodeFence(..) => {
between_fences = !between_fences;
}
_ => {
lines.push(line);
}
}
}
Text { lines }
}
}