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
33
34
35
use crate::gui::text::body;
use eframe::egui::Ui;
use egui_demo_lib::easy_mark::easy_mark;
use eyre::{eyre, Result};
use regex;
use regex::Regex;
use std::path::PathBuf;
use std::str::FromStr;
pub fn text_or_file(text: &str) -> Option<PathBuf> {
let re = Regex::new(r"^!!\[(.*)]$").unwrap();
if let Some(m) = re.captures(text) {
if let Ok(path) = PathBuf::from_str(&m[1]) {
return Some(path);
}
}
None
}
pub fn parse_text(ui: &mut Ui, text: &str) -> Result<()> {
let re = Regex::new(r"^!!<([[:alpha:]][[:word:]]*)>[ \t]*\n?([ \t]*\n)?").unwrap();
if let Some(caps) = re.captures(text) {
match &caps[1] {
"easy_mark" => {
easy_mark(ui, &re.replace(text, ""));
Ok(())
}
parser => Err(eyre!("Unknown text parser ({parser}).")),
}
} else {
ui.label(body(text));
Ok(())
}
}