From 7c73544dac2c1d5b21e201469a0c9c6d0a654f0b Mon Sep 17 00:00:00 2001 From: SavagePeanut Date: Fri, 8 Sep 2023 11:50:13 -0500 Subject: fix telegram styles --- src/matrix.rs | 1 - src/telegram.rs | 15 +++++---------- tests/test_telegram.py | 19 ++++++++++++------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/matrix.rs b/src/matrix.rs index 963e569..47fa984 100644 --- a/src/matrix.rs +++ b/src/matrix.rs @@ -60,7 +60,6 @@ pub fn format_for_matrix(body: String) -> PyResult { } else { replace_newlines_to - offset.abs() as usize }; - println!("chars {:?}", chars.clone().into_iter().collect::()); } let substring = chars[..replace_newlines_to].into_iter().collect::(); let text = [substring.replace('\n', "
"), chars[replace_newlines_to..].into_iter().collect::()].concat(); diff --git a/src/telegram.rs b/src/telegram.rs index b215885..481adec 100644 --- a/src/telegram.rs +++ b/src/telegram.rs @@ -1,5 +1,3 @@ -use std::cmp::Ordering; - use pyo3::prelude::*; use crate::parser::parse_with_limits; @@ -32,7 +30,7 @@ pub fn format_for_telegram(body: String) -> PyResult<(String, Vec<(String, usize } } - // is_start (*<--- start, end -->*), index of all_indexes, format, index of tag, language of codeblock + // is_start (*<-- start, end -->*), index of all_indexes, format, index of tag, language of codeblock let mut message_entities: Vec<(bool, usize, String, usize, String)> = Vec::with_capacity(styles.len() * 2); let mut all_indexes: Vec> = Vec::with_capacity(styles.len()); for (keyword, start, remove_start, end, remove_end) in &styles { @@ -53,7 +51,7 @@ pub fn format_for_telegram(body: String) -> PyResult<(String, Vec<(String, usize message_entities.push((false, all_indexes.len() - 1, "".to_string(), *start, "".to_string())); } } - message_entities.sort_by(sort_message_entities); + message_entities.sort_by(|a, b| a.3.cmp(&b.3)); remove_tags.sort_by(|a, b| b.0.cmp(&a.0)); @@ -79,24 +77,21 @@ pub fn format_for_telegram(body: String) -> PyResult<(String, Vec<(String, usize formatted_text, message_entities.into_iter() .filter(|(is_start, _, _, _, _)| { *is_start } ) - .map(|(_, index, format, _, language)| { (format, utf16_lengths[all_indexes[index][0]], utf16_lengths[all_indexes[index][2] - 1] - utf16_lengths[all_indexes[index][0]], language) }) + .map(|(_, index, format, _, language)| { (format, utf16_lengths[all_indexes[index][0]], utf16_lengths[all_indexes[index][2]] - utf16_lengths[all_indexes[index][0]], language) }) .collect() )) } -fn sort_message_entities(first: &(bool, usize, String, usize, String), second: &(bool, usize, String, usize, String)) -> Ordering { - return first.3.cmp(&second.3); -} - fn utf8_to_utf16_length(utf8_str: &str) -> Vec { let mut utf16_lengths = Vec::with_capacity(utf8_str.len()); let mut length = 0; + utf16_lengths.push(0); for byte in utf8_str.as_bytes() { if (byte & 0xc0) != 0x80 { length += if *byte >= 0xf0 { 2 } else { 1 }; + utf16_lengths.push(length); } - utf16_lengths.push(length); } utf16_lengths } diff --git a/tests/test_telegram.py b/tests/test_telegram.py index 1fbbb8d..0b3dbdc 100644 --- a/tests/test_telegram.py +++ b/tests/test_telegram.py @@ -3,22 +3,22 @@ from slidge_style_parser import format_for_telegram def test_basic(): test = "_underline_" formatted_body = "underline" - styles = [('italics', 1, 8, '')] + styles = [('italics', 0, 9, '')] assert(format_for_telegram(test) == (formatted_body, styles)) test = "*bold*" formatted_body = "bold" - styles = [('bold', 1, 3, '')] + styles = [('bold', 0, 4, '')] assert(format_for_telegram(test) == (formatted_body, styles)) test = "~strikethrough~" formatted_body = "strikethrough" - styles = [('strikethrough', 1, 12, '')] + styles = [('strikethrough', 0, 13, '')] assert(format_for_telegram(test) == (formatted_body, styles)) test = "`code span`" formatted_body = "code span" - styles = [('code', 1, 8, '')] + styles = [('code', 0, 9, '')] assert(format_for_telegram(test) == (formatted_body, styles)) test = """ @@ -30,17 +30,22 @@ def test_basic(): ``` """ formatted_body = '\n def test_basic():\n test = "_underline_"\n formatted_body = "underline"\n assert(format_for_telegram(test)[0] == formatted_body)\n' - styles = [('pre', 2, 149, 'python')] + styles = [('pre', 1, 150, 'python')] assert(format_for_telegram(test) == (formatted_body, styles)) test = "```\ncode block\n```" formatted_body = "code block" - styles = [('pre', 1, 9, '')] + styles = [('pre', 0, 10, '')] assert(format_for_telegram(test) == (formatted_body, styles)) test = "||this message contains a spoiler||" formatted_body = "this message contains a spoiler" - styles = [('spoiler', 1, 30, '')] + styles = [('spoiler', 0, 31, '')] + assert(format_for_telegram(test) == (formatted_body, styles)) + + test = "❤️💓💕💖💗 ||💙💚💛💜🖤|| 💝💞💟❣️" + formatted_body = "❤️💓💕💖💗 💙💚💛💜🖤 💝💞💟❣️" + styles = [('spoiler', 11, 10, '')] assert(format_for_telegram(test) == (formatted_body, styles)) def test_quotes(): -- cgit v1.2.3