From 189ceefbadb82290c844c658451543c0118a0236 Mon Sep 17 00:00:00 2001 From: askiiart Date: Wed, 15 Jan 2025 08:31:34 -0600 Subject: [PATCH 1/7] fix typo --- src/anybase.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/anybase.rs b/src/anybase.rs index d460fb4..cdc52ba 100644 --- a/src/anybase.rs +++ b/src/anybase.rs @@ -138,4 +138,3 @@ pub mod bytes { return output.into(); } } -// ... \ No newline at end of file From ec17c263d0c9b83a276a3edde9fd740be2ec0925 Mon Sep 17 00:00:00 2001 From: askiiart Date: Wed, 15 Jan 2025 08:42:03 -0600 Subject: [PATCH 2/7] update cargo.toml --- Cargo.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 34ccdb9..2aaaba0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,8 @@ edition = "2021" license = "GPL-3.0-or-later" repository = "https://git.askiiart.net/askiiart/cat2text-rs" authors = ["askiiart "] +categories = ["encoding"] +keywords = ["base4", "meow", "base16"] [profile.release] opt-level = 3 From 4fc0cbc0789ea727feb866eb108332a80b192fa7 Mon Sep 17 00:00:00 2001 From: askiiart Date: Wed, 15 Jan 2025 08:46:05 -0600 Subject: [PATCH 3/7] bump version --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3b1d480..fe13441 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,4 +4,4 @@ version = 4 [[package]] name = "cat2text" -version = "0.1.2" +version = "0.1.3" diff --git a/Cargo.toml b/Cargo.toml index 2aaaba0..40dc406 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cat2text" -version = "0.1.2" +version = "0.1.3" edition = "2021" license = "GPL-3.0-or-later" repository = "https://git.askiiart.net/askiiart/cat2text-rs" From 5e315db651be73bdb80fefad16ff57e1298fc963 Mon Sep 17 00:00:00 2001 From: askiiart Date: Wed, 15 Jan 2025 08:51:52 -0600 Subject: [PATCH 4/7] chore: format --- src/anybase.rs | 5 +++-- src/base4.rs | 9 ++++----- src/core.rs | 25 ++++++++++++++----------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/anybase.rs b/src/anybase.rs index cdc52ba..ea839c3 100644 --- a/src/anybase.rs +++ b/src/anybase.rs @@ -1,4 +1,4 @@ -//! This module translates text +//! This module translates text use crate::core; /// Encodes text into catspeak using any base up to [`max_base()`] @@ -104,7 +104,8 @@ pub mod bytes { let mut shortened_alphabet = core::alphabet(); shortened_alphabet.truncate(base as usize); for byte in bytes.as_ref() { - output += core::num_to_cat(*byte as u32, shortened_alphabet.clone(), char_length).as_str(); + output += + core::num_to_cat(*byte as u32, shortened_alphabet.clone(), char_length).as_str(); output += " "; } return output.trim().to_string(); diff --git a/src/base4.rs b/src/base4.rs index 731ba8e..a4f66f5 100644 --- a/src/base4.rs +++ b/src/base4.rs @@ -1,6 +1,6 @@ //! This module handles base 4, like the original [Cat2Text](https://github.com/Evelyn3440/Cat2Text); it can translate either english text a-z, or byte arrays (see [`bytes`]) -use crate::core; use crate::anybase; +use crate::core; /// Returns the alphabet used by `cat2text::base4` pub fn alphabet() -> Vec { @@ -14,7 +14,6 @@ pub fn char_length() -> u32 { return 3; } - /// Encodes english text into base 4 catspeak /// /// ``` @@ -34,13 +33,13 @@ pub fn encode(text: impl AsRef) -> String { /// assert_eq!("i love cats", decode("meow mreow mrrp; meow mrow meow meow mrow mrow mrrp mrrp mreow meow mrrp mrrp; meow meow mrow meow meow mrrp mrrp mrrp meow mrrp meow mrow".to_string())); /// ``` pub fn decode(text: String) -> String { - return anybase::decode(text, 4, char_length()) + return anybase::decode(text, 4, char_length()); } pub mod bytes { //! This handles encoding and decoding bytes to/from catspeak - use crate::anybase; use super::char_length; + use crate::anybase; /// Encodes from bytes into catspeak /// /// ``` @@ -62,4 +61,4 @@ pub mod bytes { pub fn decode(text: String) -> Vec { anybase::bytes::decode(text, 4, char_length()) } -} \ No newline at end of file +} diff --git a/src/core.rs b/src/core.rs index dd9a932..113a1b0 100644 --- a/src/core.rs +++ b/src/core.rs @@ -59,7 +59,7 @@ pub fn cat_to_num(text: Vec, alphabet: Vec, char_length: u32) -> } /// Splits a word encoded in catspeak every *x* segments -/// +/// /// Used for decoding by splitting words apart into letters which can then be decoded individually /// /// ```ignore @@ -81,21 +81,24 @@ pub(crate) fn split_every_x(text: String, x: u32) -> Vec { } // trim everything before sending it back - output = output.into_iter().map(|item| item.trim().to_string()).collect(); + output = output + .into_iter() + .map(|item| item.trim().to_string()) + .collect(); return output; } /// Returns all cat sounds in the catspeak alphabet -/// +/// /// ``` /// use cat2text::core::alphabet; -/// +/// /// println!("{:?}", alphabet()); /// ``` pub fn alphabet() -> Vec { return vec![ "meow", "mrrp", "mreow", "mrow", "nya~", "nyaaaa~", "mraow", "mew", "prrp", "mewo", - "purrrr", "nya", "miao", "miau", "miauw", "mrow~" + "purrrr", "nya", "miao", "miau", "miauw", "mrow~", ] .into_iter() .map(|a| a.to_string()) @@ -103,12 +106,12 @@ pub fn alphabet() -> Vec { } /// Returns the max base that can be used -/// +/// /// For example, if the available alphabet was `["meow", "mrrp", "mreow", "mrow"]`, the max base would be 4 -/// +/// /// ``` /// use cat2text::core::max_base; -/// +/// /// println!("{}", max_base()); /// ``` pub fn max_base() -> u32 { @@ -116,10 +119,10 @@ pub fn max_base() -> u32 { } /// Returns the minimum catspeak words per character needed for this base -/// +/// /// ``` /// use cat2text::core::char_length; -/// +/// /// let base = 10; /// assert_eq!(char_length(base), 2) /// ``` @@ -131,4 +134,4 @@ pub fn char_length(base: u32) -> u32 { } } return u32::MAX; -} \ No newline at end of file +} From 711119208131b0f97dd4aab853377312da7752ad Mon Sep 17 00:00:00 2001 From: askiiart Date: Wed, 15 Jan 2025 08:53:36 -0600 Subject: [PATCH 5/7] fix missing fields --- Cargo.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 40dc406..cae4f88 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,8 @@ name = "cat2text" version = "0.1.3" edition = "2021" license = "GPL-3.0-or-later" +description = "A port of Cat2Text to Rust, with extra functionality, better documentation, and support for using it as a library as well." +readme = "README.md" repository = "https://git.askiiart.net/askiiart/cat2text-rs" authors = ["askiiart "] categories = ["encoding"] From 9fac0f3667e01f05b739efea0cc5a81e6145358a Mon Sep 17 00:00:00 2001 From: askiiart Date: Wed, 15 Jan 2025 10:35:42 -0600 Subject: [PATCH 6/7] fix bytes stuff - STILL NEED TO FIX TESTS --- src/anybase.rs | 10 +++++----- src/base4.rs | 17 ++++++----------- src/core.rs | 20 ++++++++++++++++++++ 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/anybase.rs b/src/anybase.rs index ea839c3..156ef09 100644 --- a/src/anybase.rs +++ b/src/anybase.rs @@ -91,10 +91,10 @@ pub mod bytes { /// Encodes from bytes into catspeak /// /// ``` - /// use cat2text::{anybase::bytes::encode, core::char_length}; + /// use cat2text::{anybase::bytes::encode, core::bytes::char_length}; /// - /// let bytes = &[9, 1]; - /// let base = 10; + /// let bytes = &[243]; + /// let base = 16; /// let char_length = char_length(base); /// /// assert_eq!("meow mewo meow mrrp", encode(bytes, base, char_length)); @@ -114,9 +114,9 @@ pub mod bytes { /// Decodes catspeak into bytes /// /// ``` - /// use cat2text::{anybase::bytes::decode, core::char_length}; + /// use cat2text::{anybase::bytes::decode, core::bytes::char_length}; /// - /// let text = "mreow mrrp meow mrrp".to_string(); + /// let text = "mrrp nyaaaa~ meow".to_string(); /// let base = 10; /// let char_length = char_length(base); /// diff --git a/src/base4.rs b/src/base4.rs index a4f66f5..6e0073d 100644 --- a/src/base4.rs +++ b/src/base4.rs @@ -9,11 +9,6 @@ pub fn alphabet() -> Vec { return tmp; } -/// How many words long an english character is when translated to catspeak -pub fn char_length() -> u32 { - return 3; -} - /// Encodes english text into base 4 catspeak /// /// ``` @@ -22,7 +17,7 @@ pub fn char_length() -> u32 { /// assert_eq!("meow mreow mrrp; meow mrow meow meow mrow mrow mrrp mrrp mreow meow mrrp mrrp; meow meow mrow meow meow mrrp mrrp mrrp meow mrrp meow mrow", encode("i love cats".to_string())) /// ``` pub fn encode(text: impl AsRef) -> String { - return anybase::encode(text.as_ref().to_string(), 4, char_length()); + return anybase::encode(text.as_ref().to_string(), 4, core::char_length(4)); } /// Decodes base 4 catspeak to english text @@ -33,22 +28,22 @@ pub fn encode(text: impl AsRef) -> String { /// assert_eq!("i love cats", decode("meow mreow mrrp; meow mrow meow meow mrow mrow mrrp mrrp mreow meow mrrp mrrp; meow meow mrow meow meow mrrp mrrp mrrp meow mrrp meow mrow".to_string())); /// ``` pub fn decode(text: String) -> String { - return anybase::decode(text, 4, char_length()); + return anybase::decode(text, 4, core::char_length(4)); } pub mod bytes { //! This handles encoding and decoding bytes to/from catspeak - use super::char_length; use crate::anybase; + use crate::core::bytes::char_length; /// Encodes from bytes into catspeak /// /// ``` /// use cat2text::base4::bytes::encode; /// - /// assert_eq!("meow mreow mrrp meow meow mrrp", encode(&[9, 1])); + /// assert_eq!("meow mreow mrrp meow meow mrrp", encode(&[253..., 1])); /// ``` pub fn encode(bytes: impl AsRef<[u8]>) -> String { - anybase::bytes::encode(bytes, 4, char_length()) + anybase::bytes::encode(bytes, 4, char_length(4)) } /// Decodes catspeak into bytes @@ -59,6 +54,6 @@ pub mod bytes { /// assert_eq!(vec![9, 1], decode("meow mreow mrrp meow meow mrrp".to_string())); /// ``` pub fn decode(text: String) -> Vec { - anybase::bytes::decode(text, 4, char_length()) + anybase::bytes::decode(text, 4, char_length(4)) } } diff --git a/src/core.rs b/src/core.rs index 113a1b0..646056b 100644 --- a/src/core.rs +++ b/src/core.rs @@ -135,3 +135,23 @@ pub fn char_length(base: u32) -> u32 { } return u32::MAX; } + +pub mod bytes { + /// Returns the minimum catspeak words per character needed for this base for bytes + /// + /// ``` + /// use cat2text::core::bytes::char_length; + /// + /// let base = 16; + /// assert_eq!(char_length(base), 2) + /// ``` + pub fn char_length(base: u32) -> u32 { + for i in 1..base + 1 { + let num = base.pow(i); + if num > 255 { + return i; + } + } + return u32::MAX; + } +} From a9d81f015e9c56968a2f5fd6a055bee9957c12c2 Mon Sep 17 00:00:00 2001 From: askiiart Date: Wed, 15 Jan 2025 12:22:50 -0600 Subject: [PATCH 7/7] update tests --- src/anybase.rs | 10 +++++----- src/base4.rs | 4 ++-- src/core.rs | 14 +++++++------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/anybase.rs b/src/anybase.rs index 156ef09..665e91a 100644 --- a/src/anybase.rs +++ b/src/anybase.rs @@ -93,11 +93,11 @@ pub mod bytes { /// ``` /// use cat2text::{anybase::bytes::encode, core::bytes::char_length}; /// - /// let bytes = &[243]; + /// let bytes = &[243, 10]; /// let base = 16; /// let char_length = char_length(base); /// - /// assert_eq!("meow mewo meow mrrp", encode(bytes, base, char_length)); + /// assert_eq!("mrow~ mrow meow purrrr", encode(bytes, base, char_length)); /// ``` pub fn encode(bytes: impl AsRef<[u8]>, base: u32, char_length: u32) -> String { let mut output = String::new(); @@ -116,12 +116,12 @@ pub mod bytes { /// ``` /// use cat2text::{anybase::bytes::decode, core::bytes::char_length}; /// - /// let text = "mrrp nyaaaa~ meow".to_string(); - /// let base = 10; + /// let text = "mrow~ mrow meow purrrr".to_string(); + /// let base = 16; /// let char_length = char_length(base); /// /// assert_eq!( - /// vec![21, 1], + /// vec![243, 10], /// decode(text, base, char_length) /// ); /// ``` diff --git a/src/base4.rs b/src/base4.rs index 6e0073d..14d8c61 100644 --- a/src/base4.rs +++ b/src/base4.rs @@ -40,7 +40,7 @@ pub mod bytes { /// ``` /// use cat2text::base4::bytes::encode; /// - /// assert_eq!("meow mreow mrrp meow meow mrrp", encode(&[253..., 1])); + /// assert_eq!("mrow mrow mrow mrrp meow meow meow mrrp", encode(&[253, 1])); /// ``` pub fn encode(bytes: impl AsRef<[u8]>) -> String { anybase::bytes::encode(bytes, 4, char_length(4)) @@ -51,7 +51,7 @@ pub mod bytes { /// ``` /// use cat2text::base4::bytes::decode; /// - /// assert_eq!(vec![9, 1], decode("meow mreow mrrp meow meow mrrp".to_string())); + /// assert_eq!(vec![253, 1], decode("mrow mrow mrow mrrp meow meow meow mrrp".to_string())); /// ``` pub fn decode(text: String) -> Vec { anybase::bytes::decode(text, 4, char_length(4)) diff --git a/src/core.rs b/src/core.rs index 646056b..89a7e4e 100644 --- a/src/core.rs +++ b/src/core.rs @@ -3,10 +3,10 @@ /// Converts a [`u32`] to catspeak /// /// ``` -/// use cat2text::core::num_to_cat; -/// use cat2text::base4::{alphabet, char_length}; +/// use cat2text::core::{num_to_cat, char_length}; +/// use cat2text::base4::alphabet; /// -/// assert_eq!("meow mreow mrrp".to_string(), num_to_cat(9, alphabet(), char_length())); +/// assert_eq!("meow mreow mrrp".to_string(), num_to_cat(9, alphabet(), char_length(4))); /// ``` pub fn num_to_cat(num: u32, alphabet: Vec, char_length: u32) -> String { let mut num: u32 = num.clone(); @@ -31,12 +31,12 @@ pub fn num_to_cat(num: u32, alphabet: Vec, char_length: u32) -> String { /// Converts catspeak to a [`u32`] /// /// ``` -/// use cat2text::core::cat_to_num; -/// use cat2text::base4::{alphabet, char_length}; +/// use cat2text::core::{cat_to_num, bytes::char_length}; +/// use cat2text::base4::alphabet; /// -/// let letter = vec!["meow".to_string(), "mreow".to_string(), "mrrp".to_string()]; +/// let text = vec!["meow".to_string(), "mrrp".to_string(), "mrow".to_string(), "meow".to_string()]; /// -/// assert_eq!(9, cat_to_num(letter, alphabet(), char_length())); +/// assert_eq!(28, cat_to_num(text, alphabet(), char_length(4))); /// ``` pub fn cat_to_num(text: Vec, alphabet: Vec, char_length: u32) -> u32 { let mut nums: Vec = Vec::new();