From f4b6a50903ec6d82daf414a448e0175d79293efb Mon Sep 17 00:00:00 2001 From: SavagePeanut Date: Sun, 3 Sep 2023 20:40:20 -0500 Subject: fix newlines for matrix --- src/lib.rs | 8 ++- src/matrix.rs | 68 +++++++++++++++++++++++ src/telegram.rs | 2 +- tests/test_matrix.py | 147 +++++++++++++++++++++++-------------------------- tests/test_telegram.py | 130 +++++++++++++++++++++---------------------- 5 files changed, 208 insertions(+), 147 deletions(-) create mode 100644 src/matrix.rs diff --git a/src/lib.rs b/src/lib.rs index d45d857..5ab614c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,10 @@ use pyo3::prelude::*; mod parser; mod telegram; -use telegram::parse_for_telegram; +use telegram::format_for_telegram; + +mod matrix; +use matrix::format_for_matrix; mod general; use general::format_body; @@ -11,6 +14,7 @@ use general::format_body; #[pymodule] fn slidge_style_parser(_py: Python, m: &PyModule) -> PyResult<()> { m.add_function(wrap_pyfunction!(format_body, m)?)?; - m.add_function(wrap_pyfunction!(parse_for_telegram, m)?)?; + m.add_function(wrap_pyfunction!(format_for_matrix, m)?)?; + m.add_function(wrap_pyfunction!(format_for_telegram, m)?)?; Ok(()) } diff --git a/src/matrix.rs b/src/matrix.rs new file mode 100644 index 0000000..92d2eb8 --- /dev/null +++ b/src/matrix.rs @@ -0,0 +1,68 @@ +use pyo3::prelude::*; + +use crate::parser::parse_with_limits; + +const MATRIX_FORMATS: &[(&'static str, (&'static str, &'static str))] = &[ + ("_", ("", "")), + ("*", ("", "")), + ("~", ("", "")), + ("`", ("", "")), + ("```", ("
", "
")), + ("```language", ("
", "
")), + (">", ("
", "
")), + ("||", ("", "")), +]; + +#[pyfunction] +pub fn format_for_matrix(body: String) -> PyResult { + let mut chars: Vec = body.chars().collect(); + if chars.len() < 1 { + return Ok(body); + } + let styles: Vec<(String, usize, usize, usize, usize)> = parse_with_limits(&chars, 0, chars.len() - 1, 0); + + let mut tags: Vec<(usize, String, usize)> = Vec::with_capacity(styles.len() * 2); + for (keyword, start, remove_start, end, remove_end) in styles { + if MATRIX_FORMATS.iter().any(|&(k, _)| k == keyword) { + let opening_tag = if keyword == "```language" { + MATRIX_FORMATS.iter().find(|&&(k, _)| k == keyword).unwrap().1.0.clone() + .replace("{}", &chars[start+3..remove_start-1] + .into_iter() + .collect::()) + } else { + MATRIX_FORMATS.iter().find(|&&(k, _)| k == keyword).unwrap().1.0.clone().to_string() + }; + tags.push((start, opening_tag, remove_start)); + tags.push((end, MATRIX_FORMATS.iter().find(|&&(k, _)| k == keyword).unwrap().1.1.clone().to_string(), remove_end)); + } else if keyword == ">>" || keyword == "```>" || keyword == "\\" { + tags.push((start, "".to_string(), start+1)); + } + } + + tags.sort_by(|a, b| b.0.cmp(&a.0)); + + let mut replace_newlines_to = chars.len(); + for (index, tag, end) in tags { + if tag == "" { + // index is at \n, add 1 to skip that one + let substring = chars[index + 1..replace_newlines_to].into_iter().collect::(); + chars = [&chars[..index + 1], &substring.replace('\n', "
").chars().collect::>()[..]].concat(); + } else if tag == "
" {
+            replace_newlines_to = index;
+        }
+
+        let tag: Vec = tag.chars().collect();
+        chars = [chars[..index].to_vec(), tag.clone(), chars[end..].to_vec()].concat();
+        
+        let offset: isize = index as isize - end as isize + tag.len() as isize;
+        replace_newlines_to = if offset > 0 {
+            replace_newlines_to + offset as usize
+        } else {
+            replace_newlines_to - offset.abs() as usize
+        };
+    }
+    let substring = chars[..replace_newlines_to].into_iter().collect::();
+    let text = [substring.replace('\n', "
"), chars[replace_newlines_to..].into_iter().collect::()].concat(); + + Ok(text) +} diff --git a/src/telegram.rs b/src/telegram.rs index 0774143..b215885 100644 --- a/src/telegram.rs +++ b/src/telegram.rs @@ -15,7 +15,7 @@ const TELEGRAM_STYLES: &[(&'static str, &'static str)] = &[ ]; #[pyfunction] -pub fn parse_for_telegram(body: String) -> PyResult<(String, Vec<(String, usize, usize, String)>)> { +pub fn format_for_telegram(body: String) -> PyResult<(String, Vec<(String, usize, usize, String)>)> { let mut chars: Vec = body.chars().collect(); if chars.len() < 1 { return Ok((body, Vec::with_capacity(0))); diff --git a/tests/test_matrix.py b/tests/test_matrix.py index 0bc6f1a..be33973 100644 --- a/tests/test_matrix.py +++ b/tests/test_matrix.py @@ -1,4 +1,4 @@ -from slidge_style_parser import format_body +from slidge_style_parser import format_for_matrix MATRIX_FORMATS = { "_": ("", ""), @@ -15,270 +15,259 @@ MATRIX_FORMATS = { def test_basic(): test = "_underline_" formatted_body = "underline" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "*bold*" formatted_body = "bold" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "~strikethrough~" formatted_body = "strikethrough" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "`code span`" formatted_body = "code span" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = """ ```python def test_basic(): test = "_underline_" formatted_body = "underline" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) ``` """ - formatted_body = '
    def test_basic():
test = "_underline_"
formatted_body = "underline"
assert(format_body(test, MATRIX_FORMATS) == formatted_body)

' - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + formatted_body = '
    def test_basic():
test = "_underline_"
formatted_body = "underline"
assert(format_for_matrix(test) == formatted_body)

' + assert(format_for_matrix(test) == formatted_body) test = "```\ncode block\n```" formatted_body = "
code block
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "||this message contains a spoiler||" formatted_body = "this message contains a spoiler" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) def test_quotes(): test = ">single" formatted_body = "
single
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">single arrow ->" formatted_body = "
single arrow ->
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">single\n>grouped" formatted_body = "
single
grouped
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">>double" formatted_body = "
double
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">>double\n>>double" formatted_body = "
double
double
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">>double\n&>not quote" formatted_body = "
double

&>not quote" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">>double\n>grouped single" formatted_body = "
double

grouped single
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">>>tripple\n>single\n>>double" formatted_body = "
tripple

single
double
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) def test_code_blocks(): test = "```\nhacker\ncode\n```" - formatted_body = "
hacker
code
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + formatted_body = "
hacker\ncode
" + assert(format_for_matrix(test) == formatted_body) test = "```python\nhacker code\n```" formatted_body = "
hacker code
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "```pythonaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nhacker code\n```" formatted_body = "
hacker code
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "```python\nhacker code\n```\nnormal text" formatted_body = "
hacker code

normal text" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "```python\nhacker code\n```\nnormal text\n```java\npublic static void main(String [])\n```" formatted_body = "
hacker code

normal text
public static void main(String [])
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">```java\n>why are you quoting a code block\n>```" formatted_body = "
why are you quoting a code block
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">>```\n>>double quote code block\n>single quote not in code block\nnormal text" formatted_body = "
double quote code block

single quote not in code block

normal text" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">```\n>please stop trying to break my parser ;-;" formatted_body = "
please stop trying to break my parser ;-;
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">>```\n>>>>double quote code block\n>single quote not in code block\nnormal text" formatted_body = "
>>double quote code block

single quote not in code block

normal text" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "_```_ignored\ninvalid code block\n```" formatted_body = "```ignored
invalid code block
```" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) def test_escaped(): test = "\\_no underline_" formatted_body = "_no underline_" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "\\\\_no underline_" formatted_body = "\\_no underline_" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">>>tripple\n\\>none\n>>double" formatted_body = "
tripple

>none
double
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) def test_nested(): test = "`*~_code span_~*`" formatted_body = "*~_code span_~*" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "*_~`code span`~_*" formatted_body = "code span" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">*_~`code span`~_*" formatted_body = "
code span
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "*bold star >*< star bold*" formatted_body = "bold star >*< star bold" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "*_bold*_" formatted_body = "_bold_" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "__underlined__" formatted_body = "underlined" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) def test_no_changes(): test = "" formatted_body = "" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "~~ empty `````` styles **" formatted_body = "~~ empty `````` styles **" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "this is not an empty string" formatted_body = "this is not an empty string" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "arrow ->" formatted_body = "arrow ->" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = " > no quote" formatted_body = " > no quote" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "_not underlined" formatted_body = "_not underlined" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "|not a spoiler|" formatted_body = "|not a spoiler|" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "||\nalso\nnot\na\nspoiler||" formatted_body = "||
also
not
a
spoiler||" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "`no code\nblock here`" formatted_body = "`no code
block here`" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "invalid ```\ncode block\n```" formatted_body = "invalid ```
code block
```" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "```\ncode block\ninvalid```" formatted_body = "```
code block
invalid```" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "```\ncode block\n```invalid" formatted_body = "```
code block
```invalid" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) def test_assorted(): test = "\n" formatted_body = "
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "at the ||end||" formatted_body = "at the end" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "in the ~middle~ here" formatted_body = "in the middle here" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "_underline_ *bold* ~strikethrough~ >not quote ||spoiler||\n>quote\nnothing\nnothing\n>>>>another quote with ||~_*```four```*_~||" formatted_body = "underline bold strikethrough >not quote spoiler
quote

nothing
nothing
another quote with ```four```
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">```\n>do be do be dooo ba do be do be do ba\n>>>" - formatted_body = "
do be do be dooo ba do be do be do ba
>>
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + formatted_body = "
do be do be dooo ba do be do be do ba\n>>
" + assert(format_for_matrix(test) == formatted_body) test = "\n\n>```\n>do be do be dooo ba do be do be do ba\na\n\n\naoeu\n" formatted_body = "

do be do be dooo ba do be do be do ba

a


aoeu
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">```\n>do be do be dooo ba do be do be do ba\n>\n>\n>aoeu" - formatted_body = "
do be do be dooo ba do be do be do ba


aoeu
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + formatted_body = "
do be do be dooo ba do be do be do ba\n\n\naoeu
" + assert(format_for_matrix(test) == formatted_body) test = ">```\n>code block\n>```invalid end\n" - formatted_body = "
code block
```invalid end

" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + formatted_body = "
code block\n```invalid end

" + assert(format_for_matrix(test) == formatted_body) test = "invalid ```\ncode block\n*bold*\n```" formatted_body = "invalid ```
code block
bold
```" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) def test_weird_utf8(): test = "β€οΈπŸ’“πŸ’•πŸ’–πŸ’— ||πŸ’™πŸ’šπŸ’›πŸ’œπŸ–€|| πŸ’πŸ’žπŸ’Ÿβ£οΈ" formatted_body = "β€οΈπŸ’“πŸ’•πŸ’–πŸ’— πŸ’™πŸ’šπŸ’›πŸ’œπŸ–€ πŸ’πŸ’žπŸ’Ÿβ£οΈ" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘§ _underline_πŸ‘©β€πŸ‘©β€πŸ‘¦β€πŸ‘§" formatted_body = "πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘§ underlineπŸ‘©β€πŸ‘©β€πŸ‘¦β€πŸ‘§" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "\u202eRight to left" formatted_body = "\u202eRight to left" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = ">\u202eRight to left quote?" formatted_body = "
\u202eRight to left quote?
" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "_Invisible\u200bseparator_" formatted_body = "Invisible\u200bseparator" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) test = "~\u200b~" formatted_body = "\u200b" - assert(format_body(test, MATRIX_FORMATS) == formatted_body) - -LIMITED_FORMATS = { - "_": ("", ""), - "~": ("", ""), - "`": ("", "") -} - -def test_limited(): - test = "_underline_ *bold* ~strikethrough~ >not quote ||spoiler||\n>quote\nnothing\nnothing\n>>>>another quote with ||~_*```four```*_~||" - formatted_body = "underline *bold* strikethrough >not quote ||spoiler||\n>quote\nnothing\nnothing\n>>>>another quote with ||*```four```*||" - assert(format_body(test, LIMITED_FORMATS) == formatted_body) + assert(format_for_matrix(test) == formatted_body) diff --git a/tests/test_telegram.py b/tests/test_telegram.py index 164a697..1fbbb8d 100644 --- a/tests/test_telegram.py +++ b/tests/test_telegram.py @@ -1,268 +1,268 @@ -from slidge_style_parser import parse_for_telegram +from slidge_style_parser import format_for_telegram def test_basic(): test = "_underline_" formatted_body = "underline" styles = [('italics', 1, 8, '')] - assert(parse_for_telegram(test) == (formatted_body, styles)) + assert(format_for_telegram(test) == (formatted_body, styles)) test = "*bold*" formatted_body = "bold" styles = [('bold', 1, 3, '')] - assert(parse_for_telegram(test) == (formatted_body, styles)) + assert(format_for_telegram(test) == (formatted_body, styles)) test = "~strikethrough~" formatted_body = "strikethrough" styles = [('strikethrough', 1, 12, '')] - assert(parse_for_telegram(test) == (formatted_body, styles)) + assert(format_for_telegram(test) == (formatted_body, styles)) test = "`code span`" formatted_body = "code span" styles = [('code', 1, 8, '')] - assert(parse_for_telegram(test) == (formatted_body, styles)) + assert(format_for_telegram(test) == (formatted_body, styles)) test = """ ```python def test_basic(): test = "_underline_" formatted_body = "underline" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) ``` """ - formatted_body = '\n def test_basic():\n test = "_underline_"\n formatted_body = "underline"\n assert(parse_for_telegram(test)[0] == formatted_body)\n' - styles = [('pre', 2, 148, 'python')] - assert(parse_for_telegram(test) == (formatted_body, styles)) + 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')] + assert(format_for_telegram(test) == (formatted_body, styles)) test = "```\ncode block\n```" formatted_body = "code block" styles = [('pre', 1, 9, '')] - assert(parse_for_telegram(test) == (formatted_body, styles)) + 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, '')] - assert(parse_for_telegram(test) == (formatted_body, styles)) + assert(format_for_telegram(test) == (formatted_body, styles)) def test_quotes(): test = ">single" formatted_body = ">single" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">single arrow ->" formatted_body = ">single arrow ->" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">single\n>grouped" formatted_body = ">single\n>grouped" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">>double" formatted_body = ">>double" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">>double\n>>double" formatted_body = ">>double\n>>double" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">>double\n&>not quote" formatted_body = ">>double\n&>not quote" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">>double\n>grouped single" formatted_body = ">>double\n>grouped single" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">>>tripple\n>single\n>>double" formatted_body = ">>>tripple\n>single\n>>double" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) def test_code_blocks(): test = "```\nhacker\ncode\n```" formatted_body = "hacker\ncode" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "```python\nhacker code\n```" formatted_body = "hacker code" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "```pythonaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nhacker code\n```" formatted_body = "hacker code" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "```python\nhacker code\n```\nnormal text" formatted_body = "hacker code\nnormal text" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "```python\nhacker code\n```\nnormal text\n```java\npublic static void main(String [])\n```" formatted_body = "hacker code\nnormal text\npublic static void main(String [])" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">```java\n>why are you quoting a code block\n>```" formatted_body = ">why are you quoting a code block" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">>```\n>>double quote code block\n>single quote not in code block\nnormal text" formatted_body = ">>double quote code block\n>single quote not in code block\nnormal text" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">```\n>please stop trying to break my parser ;-;" formatted_body = ">please stop trying to break my parser ;-;" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">>```\n>>>>double quote code block\n>single quote not in code block\nnormal text" formatted_body = ">>>>double quote code block\n>single quote not in code block\nnormal text" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "_```_ignored\ninvalid code block\n```" formatted_body = "```ignored\ninvalid code block\n```" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) def test_escaped(): test = "\\_no underline_" formatted_body = "_no underline_" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "\\\\_no underline_" formatted_body = "\\_no underline_" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">>>tripple\n\\>none\n>>double" formatted_body = ">>>tripple\n>none\n>>double" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) def test_nested(): test = "`*~_code span_~*`" formatted_body = "*~_code span_~*" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "*_~`code span`~_*" formatted_body = "code span" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">*_~`code span`~_*" formatted_body = ">code span" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "*bold star >*< star bold*" formatted_body = "bold star >*< star bold" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "*_bold*_" formatted_body = "_bold_" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "__underlined__" formatted_body = "underlined" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) def test_no_changes(): test = "" formatted_body = "" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "~~ empty `````` styles **" formatted_body = "~~ empty `````` styles **" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "this is not an empty string" formatted_body = "this is not an empty string" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "arrow ->" formatted_body = "arrow ->" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = " > no quote" formatted_body = " > no quote" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "_not underlined" formatted_body = "_not underlined" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "|not a spoiler|" formatted_body = "|not a spoiler|" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "||\nalso\nnot\na\nspoiler||" formatted_body = "||\nalso\nnot\na\nspoiler||" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "`no code\nblock here`" formatted_body = "`no code\nblock here`" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "invalid ```\ncode block\n```" formatted_body = "invalid ```\ncode block\n```" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "```\ncode block\ninvalid```" formatted_body = "```\ncode block\ninvalid```" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "```\ncode block\n```invalid" formatted_body = "```\ncode block\n```invalid" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) def test_assorted(): test = "\n" formatted_body = "\n" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "at the ||end||" formatted_body = "at the end" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "in the ~middle~ here" formatted_body = "in the middle here" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "_underline_ *bold* ~strikethrough~ >not quote ||spoiler||\n>quote\nnothing\nnothing\n>>>>another quote with ||~_*```four```*_~||" formatted_body = "underline bold strikethrough >not quote spoiler\n>quote\nnothing\nnothing\n>>>>another quote with ```four```" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">```\n>do be do be dooo ba do be do be do ba\n>>>" formatted_body = ">do be do be dooo ba do be do be do ba\n>>" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "\n\n>```\n>do be do be dooo ba do be do be do ba\na\n\n\naoeu\n" formatted_body = "\n\n>do be do be dooo ba do be do be do ba\na\n\n\naoeu\n" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">```\n>do be do be dooo ba do be do be do ba\n>\n>\n>aoeu" formatted_body = ">do be do be dooo ba do be do be do ba\n\n\naoeu" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">```\n>code block\n>```invalid end\n" formatted_body = ">code block\n```invalid end\n" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "invalid ```\ncode block\n*bold*\n```" formatted_body = "invalid ```\ncode block\nbold\n```" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) def test_weird_utf8(): test = "β€οΈπŸ’“πŸ’•πŸ’–πŸ’— ||πŸ’™πŸ’šπŸ’›πŸ’œπŸ–€|| πŸ’πŸ’žπŸ’Ÿβ£οΈ" formatted_body = "β€οΈπŸ’“πŸ’•πŸ’–πŸ’— πŸ’™πŸ’šπŸ’›πŸ’œπŸ–€ πŸ’πŸ’žπŸ’Ÿβ£οΈ" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘§ _underline_πŸ‘©β€πŸ‘©β€πŸ‘¦β€πŸ‘§" formatted_body = "πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘§ underlineπŸ‘©β€πŸ‘©β€πŸ‘¦β€πŸ‘§" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "\u202eRight to left" formatted_body = "\u202eRight to left" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = ">\u202eRight to left quote?" formatted_body = ">\u202eRight to left quote?" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "_Invisible\u200bseparator_" formatted_body = "Invisible\u200bseparator" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) test = "~\u200b~" formatted_body = "\u200b" - assert(parse_for_telegram(test)[0] == formatted_body) + assert(format_for_telegram(test)[0] == formatted_body) -- cgit v1.2.3