implement strip_tags filter

This commit is contained in:
yggverse 2026-03-09 05:20:10 +02:00
parent 3df4a79e0a
commit 43f348e9bb
2 changed files with 36 additions and 5 deletions

View file

@ -61,13 +61,14 @@ impl Tags {
links: &mut HashMap<TextTag, Uri>, links: &mut HashMap<TextTag, Uri>,
) -> Option<String> { ) -> Option<String> {
// * keep in order! // * keep in order!
let title = self.header.render(buffer); // @TODO strip raw tags let title = self.header.render(buffer);
self.quote.render(buffer); self.quote.render(buffer);
reference::render_images_links(&buffer, base, &link_color, links); reference::render_images_links(&buffer, base, &link_color, links);
reference::render_images(&buffer, base, &link_color, links); reference::render_images(&buffer, base, &link_color, links);
reference::render_links(&buffer, base, &link_color, links); reference::render_links(&buffer, base, &link_color, links);
title title.map(|ref s| reference::strip_tags(s)) // @TODO other tags
} }
} }

View file

@ -221,11 +221,41 @@ pub fn render_links(
} }
} }
pub fn strip_tags(value: &str) -> String {
let mut result = String::from(value);
for cap in Regex::new(REGEX_LINK)
.unwrap()
.captures_iter(&value)
.into_iter()
{
if let Some(m) = cap.get(0) {
result = result.replace(m.as_str(), &cap["text"]);
}
}
result
}
#[test]
fn test_strip_tags() {
const VALUE: &str = r"Some text [link1](https://link1.com) [link2](https://link2.com)";
let mut result = String::from(VALUE);
for cap in Regex::new(REGEX_LINK)
.unwrap()
.captures_iter(VALUE)
.into_iter()
{
if let Some(m) = cap.get(0) {
result = result.replace(m.as_str(), &cap["text"]);
}
}
assert_eq!(result, "Some text link1 link2")
}
#[test] #[test]
fn test_regex_link() { fn test_regex_link() {
let cap: Vec<_> = Regex::new(REGEX_LINK) let cap: Vec<_> = Regex::new(REGEX_LINK)
.unwrap() .unwrap()
.captures_iter(r#"[link1](https://link1.com) [link2](https://link2.com)"#) .captures_iter(r"[link1](https://link1.com) [link2](https://link2.com)")
.collect(); .collect();
let first = cap.get(0).unwrap(); let first = cap.get(0).unwrap();
@ -245,7 +275,7 @@ fn test_regex_image_link() {
REGEX_IMAGE_LINK, REGEX_IMAGE_LINK,
) )
.unwrap().captures_iter( .unwrap().captures_iter(
r#"[![image1](https://image1.com)](https://image2.com) [![image3](https://image3.com)](https://image4.com)"# r"[![image1](https://image1.com)](https://image2.com) [![image3](https://image3.com)](https://image4.com)"
).collect(); ).collect();
let first = cap.get(0).unwrap(); let first = cap.get(0).unwrap();
@ -271,7 +301,7 @@ fn test_regex_image_link() {
fn test_regex_image() { fn test_regex_image() {
let cap: Vec<_> = Regex::new(REGEX_IMAGE) let cap: Vec<_> = Regex::new(REGEX_IMAGE)
.unwrap() .unwrap()
.captures_iter(r#"![image1](https://image1.com) ![image2](https://image2.com)"#) .captures_iter(r"![image1](https://image1.com) ![image2](https://image2.com)")
.collect(); .collect();
let first = cap.get(0).unwrap(); let first = cap.get(0).unwrap();