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>,
) -> Option<String> {
// * keep in order!
let title = self.header.render(buffer); // @TODO strip raw tags
let title = self.header.render(buffer);
self.quote.render(buffer);
reference::render_images_links(&buffer, base, &link_color, links);
reference::render_images(&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]
fn test_regex_link() {
let cap: Vec<_> = Regex::new(REGEX_LINK)
.unwrap()
.captures_iter(r#"[link1](https://link1.com) [link2](https://link2.com)"#)
.captures_iter(r"[link1](https://link1.com) [link2](https://link2.com)")
.collect();
let first = cap.get(0).unwrap();
@ -245,7 +275,7 @@ fn test_regex_image_link() {
REGEX_IMAGE_LINK,
)
.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();
let first = cap.get(0).unwrap();
@ -271,7 +301,7 @@ fn test_regex_image_link() {
fn test_regex_image() {
let cap: Vec<_> = Regex::new(REGEX_IMAGE)
.unwrap()
.captures_iter(r#"![image1](https://image1.com) ![image2](https://image2.com)"#)
.captures_iter(r"![image1](https://image1.com) ![image2](https://image2.com)")
.collect();
let first = cap.get(0).unwrap();