Compare commits
2 commits
5898da55e3
...
09e7c1d8bd
Author | SHA1 | Date | |
---|---|---|---|
09e7c1d8bd | |||
1e36edf499 |
5 changed files with 34 additions and 60 deletions
|
@ -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
44
Cargo.lock
generated
|
@ -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"
|
||||
|
|
|
@ -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"] }
|
||||
|
||||
|
|
16
src/app.rs
16
src/app.rs
|
@ -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>"#,
|
||||
|
|
24
src/util.rs
24
src/util.rs
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue