summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSavagePeanut <sourcehut@lazytapir.com>2023-09-08 11:50:13 -0500
committerSavagePeanut <sourcehut@lazytapir.com>2023-09-08 11:51:54 -0500
commit7c73544dac2c1d5b21e201469a0c9c6d0a654f0b (patch)
tree2b8c584327689c4d8e7ddc17edda3cafb5b4b384
parent35884c910a190237abfbab40a536b2d14f826f92 (diff)
fix telegram styles
-rw-r--r--src/matrix.rs1
-rw-r--r--src/telegram.rs15
-rw-r--r--tests/test_telegram.py19
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<String> {
} else {
replace_newlines_to - offset.abs() as usize
};
- println!("chars {:?}", chars.clone().into_iter().collect::<String>());
}
let substring = chars[..replace_newlines_to].into_iter().collect::<String>();
let text = [substring.replace('\n', "<br>"), chars[replace_newlines_to..].into_iter().collect::<String>()].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<usize>> = 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<usize> {
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():