Compare commits
3 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7a292c429a | |||
| 095d2cea86 | |||
| 6eea194d52 |
4 changed files with 33 additions and 10 deletions
10
CHANGELOG.md
10
CHANGELOG.md
|
|
@ -14,6 +14,16 @@ Procedure when bumping the version number:
|
|||
|
||||
## Unreleased
|
||||
|
||||
## v0.6.1 - 2025-02-23
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated set of emoji names
|
||||
|
||||
### Fixed
|
||||
|
||||
- Nick hue hashing algorithm in some edge cases
|
||||
|
||||
## v0.6.0 - 2025-02-21
|
||||
|
||||
### Added
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "euphoxide"
|
||||
version = "0.6.0"
|
||||
version = "0.6.1"
|
||||
edition = "2021"
|
||||
|
||||
[features]
|
||||
|
|
|
|||
|
|
@ -878,7 +878,7 @@
|
|||
"fist_raised": "270a",
|
||||
"fist_right": "1f91c",
|
||||
"five": "35-fe0f-20e3",
|
||||
"fjafjkldskf7jkfdj": "1f577",
|
||||
"fjafjkldskf7jkfdj": "1f577-fe0f",
|
||||
"flags": "1f38f",
|
||||
"flamingo": "1f9a9",
|
||||
"flashlight": "1f526",
|
||||
|
|
@ -958,6 +958,7 @@
|
|||
"georgia": "1f1ec-1f1ea",
|
||||
"ghana": "1f1ec-1f1ed",
|
||||
"ghost": "1f47b",
|
||||
"ghoti": "1f41f",
|
||||
"gibraltar": "1f1ec-1f1ee",
|
||||
"gift": "1f381",
|
||||
"gift_heart": "1f49d",
|
||||
|
|
@ -2985,7 +2986,7 @@
|
|||
"speaking_head": "1f5e3-fe0f",
|
||||
"speech_balloon": "1f4ac",
|
||||
"speedboat": "1f6a4",
|
||||
"spider": "1f577",
|
||||
"spider": "1f577-fe0f",
|
||||
"spider_web": "1f578-fe0f",
|
||||
"spiral_calendar": "1f5d3-fe0f",
|
||||
"spiral_notepad": "1f5d2-fe0f",
|
||||
|
|
|
|||
26
src/nick.rs
26
src/nick.rs
|
|
@ -5,9 +5,10 @@ use unicode_normalization::UnicodeNormalization;
|
|||
|
||||
use crate::emoji::Emoji;
|
||||
|
||||
/// Does not remove emoji.
|
||||
fn hue_normalize(text: &str) -> String {
|
||||
text.chars()
|
||||
fn hue_normalize(emoji: &Emoji, text: &str) -> String {
|
||||
emoji
|
||||
.remove(text)
|
||||
.chars()
|
||||
.filter(|&c| c.is_ascii_alphanumeric() || c == '_' || c == '-')
|
||||
.map(|c| c.to_ascii_lowercase())
|
||||
.collect()
|
||||
|
|
@ -15,7 +16,7 @@ fn hue_normalize(text: &str) -> String {
|
|||
|
||||
/// A re-implementation of [euphoria's nick hue hashing algorithm][0].
|
||||
///
|
||||
/// [0]: https://github.com/CylonicRaider/heim/blob/master/client/lib/hueHash.js
|
||||
/// [0]: https://github.com/CylonicRaider/heim/blob/097a1fde89ada53de2b70e51e635257f27956e4e/client/lib/heim/hueHash.js
|
||||
fn hue_hash(text: &str, offset: i64) -> u8 {
|
||||
let mut val = 0_i32;
|
||||
for bibyte in text.encode_utf16() {
|
||||
|
|
@ -35,7 +36,13 @@ const GREENIE_OFFSET: i64 = 148 - 192; // 148 - hue_hash("greenie", 0)
|
|||
/// This should be slightly faster than [`hue`] but produces incorrect results
|
||||
/// if any colon-delimited emoji are present.
|
||||
pub fn hue_without_removing_emoji(nick: &str) -> u8 {
|
||||
let normalized = hue_normalize(nick);
|
||||
// An emoji-less version of hue_normalize
|
||||
let normalized = nick
|
||||
.chars()
|
||||
.filter(|&c| c.is_ascii_alphanumeric() || c == '_' || c == '-')
|
||||
.map(|c| c.to_ascii_lowercase())
|
||||
.collect::<String>();
|
||||
|
||||
if normalized.is_empty() {
|
||||
hue_hash(nick, GREENIE_OFFSET)
|
||||
} else {
|
||||
|
|
@ -48,9 +55,14 @@ pub fn hue_without_removing_emoji(nick: &str) -> u8 {
|
|||
/// This is a reimplementation of [euphoria's nick hue hashing algorithm][0]. It
|
||||
/// should always return the same value as the official client's implementation.
|
||||
///
|
||||
/// [0]: https://github.com/CylonicRaider/heim/blob/978c921063e6b06012fc8d16d9fbf1b3a0be1191/client/lib/hueHash.js
|
||||
/// [0]: https://github.com/CylonicRaider/heim/blob/097a1fde89ada53de2b70e51e635257f27956e4e/client/lib/heim/hueHash.js
|
||||
pub fn hue(emoji: &Emoji, nick: &str) -> u8 {
|
||||
hue_without_removing_emoji(&emoji.remove(nick))
|
||||
let normalized = hue_normalize(emoji, nick);
|
||||
if normalized.is_empty() {
|
||||
hue_hash(nick, GREENIE_OFFSET)
|
||||
} else {
|
||||
hue_hash(&normalized, GREENIE_OFFSET)
|
||||
}
|
||||
}
|
||||
|
||||
/// Normalize a nick to a form that can be compared against other nicks.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue