Compare commits

...

2 commits

5 changed files with 34 additions and 60 deletions

View file

@ -3,6 +3,13 @@
All notable changes to this project will be documented in this file.
## [v0.4.2](https://codeberg.org/ThetaDev/artifactview/compare/v0.4.1..v0.4.2) - 2024-06-22
### 🐛 Bug Fixes
- PR comment emoji prefix detection - ([1e36edf](https://codeberg.org/ThetaDev/artifactview/commit/1e36edf49978e8ba24a85d4663ff3ebaf9642a29))
## [v0.4.1](https://codeberg.org/ThetaDev/artifactview/compare/v0.4.0..v0.4.1) - 2024-06-22
### 🚀 Features

44
Cargo.lock generated
View file

@ -141,7 +141,7 @@ dependencies = [
[[package]]
name = "artifactview"
version = "0.4.1"
version = "0.4.2"
dependencies = [
"async_zip",
"axum",
@ -187,7 +187,6 @@ dependencies = [
"tower-http",
"tracing",
"tracing-subscriber",
"unic-emoji-char",
"url",
"yarte",
"yarte_helpers",
@ -3145,47 +3144,6 @@ version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
[[package]]
name = "unic-char-property"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
dependencies = [
"unic-char-range",
]
[[package]]
name = "unic-char-range"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
[[package]]
name = "unic-common"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
[[package]]
name = "unic-emoji-char"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b07221e68897210270a38bde4babb655869637af0f69407f96053a34f76494d"
dependencies = [
"unic-char-property",
"unic-char-range",
"unic-ucd-version",
]
[[package]]
name = "unic-ucd-version"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
dependencies = [
"unic-common",
]
[[package]]
name = "unicase"
version = "2.7.0"

View file

@ -1,6 +1,6 @@
[package]
name = "artifactview"
version = "0.4.1"
version = "0.4.2"
edition = "2021"
authors = ["ThetaDev <thetadev@magenta.de>"]
license = "MIT"
@ -73,7 +73,6 @@ tokio-util = { version = "0.7.11", features = ["io"] }
tower-http = { version = "0.5.2", features = ["trace", "set-header"] }
tracing = "0.1.40"
tracing-subscriber = "0.3.18"
unic-emoji-char = "0.9.0"
url = "2.5.0"
yarte = { version = "0.15.7", features = ["json"] }

View file

@ -1,5 +1,4 @@
use std::{
borrow::Cow,
collections::{BTreeMap, HashMap},
fmt::Write,
net::{IpAddr, SocketAddr},
@ -866,20 +865,7 @@ fn pr_comment_text(p: PrCommentTextParams) -> String {
};
let write_link_icon = |s: &mut String, title: &str, href: &str| {
// Move leading emoji into a prefix variable since including them in the link does not look good
let mut title_pfx = String::new();
let mut title = Cow::Borrowed(title);
if let Some((i, c)) = title
.char_indices()
// Some emoji use variation selectors that are not included in is_emoji
.find(|(_, c)| !unic_emoji_char::is_emoji(*c) && !('\u{fe00}'..='\u{fe0f}').contains(c))
{
if i > 0 && c == ' ' {
title[..i + 1].clone_into(&mut title_pfx);
title = title[i + 1..].to_owned().into();
}
}
let (title_pfx, title) = util::split_icon_prefix(title);
_ = write!(
s,
r#"{title_pfx}<a href="{href}" target="_blank" rel="noopener noreferrer">{title}</a>"#,

View file

@ -302,6 +302,18 @@ pub fn extract_delim<'a>(s: &'a str, start: &str, end: &str) -> Option<&'a str>
None
}
pub fn split_icon_prefix(s: &str) -> (&str, &str) {
if let Some((i, c)) = s
.char_indices()
.find(|(_, c)| c.is_ascii() || c.is_alphanumeric())
{
if i > 0 && c == ' ' && s.get(i + 1..).is_some() {
return (&s[..i + 1], &s[i + 1..]);
}
}
("", s)
}
#[cfg(test)]
pub(crate) mod tests {
use std::path::{Path, PathBuf};
@ -390,4 +402,16 @@ pub(crate) mod tests {
let res = super::filename_ext(filename);
assert_eq!(res, expect);
}
#[rstest]
#[case("🧪 Test", ("🧪 ", "Test"))]
#[case("🧪👨‍👩‍👦 Test", ("🧪👨‍👩‍👦 ", "Test"))]
#[case("🧪 👨‍👩‍👦 Test", ("🧪 ", "👨‍👩‍👦 Test"))]
#[case("", ("", ""))]
#[case("Test", ("", "Test"))]
#[case("運命 Test", ("", "運命 Test"))]
fn split_icon_prefix(#[case] s: &str, #[case] expect: (&str, &str)) {
let res = super::split_icon_prefix(s);
assert_eq!(res, expect);
}
}