handle expandable block quotation starts, add test for all md2 formats
This commit is contained in:
parent
c6cac8b303
commit
25d4f16831
3 changed files with 49 additions and 2 deletions
|
|
@ -635,7 +635,14 @@ func markdownToTelegramMarkdownV2(text string) string {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Handle standard Markdown Entities Boundaries
|
// 5. Handle expandable block quotation starts
|
||||||
|
if runes[i] == '>' && runes[i-1] == '*' && runes[i-2] == '*' && (i == 0 || runes[i-3] == '\n') {
|
||||||
|
result.WriteRune(runes[i])
|
||||||
|
i++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 6. Handle standard Markdown Entities Boundaries
|
||||||
// If they are part of valid markdown boundaries, we write them as-is.
|
// If they are part of valid markdown boundaries, we write them as-is.
|
||||||
// We trust the syntax rules: * _ ~ || [ ]
|
// We trust the syntax rules: * _ ~ || [ ]
|
||||||
// (Assuming the text is a valid markdown, we don't escape these if formatting is intended)
|
// (Assuming the text is a valid markdown, we don't escape these if formatting is intended)
|
||||||
|
|
@ -668,7 +675,7 @@ func markdownToTelegramMarkdownV2(text string) string {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Handle plain text characters
|
// 7. Handle plain text characters
|
||||||
// Escape remaining special characters if they aren't forming intended valid markup
|
// Escape remaining special characters if they aren't forming intended valid markup
|
||||||
if needsNormalEscape(runes[i]) {
|
if needsNormalEscape(runes[i]) {
|
||||||
// Check if it's already escaped; if an escape character exists, consume it legitimately
|
// Check if it's already escaped; if an escape character exists, consume it legitimately
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,14 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
_ "embed"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed testdata/md2_all_formats.txt
|
||||||
|
var md2AllFormats string
|
||||||
|
|
||||||
func Test_markdownToTelegramMarkdownV2(t *testing.T) {
|
func Test_markdownToTelegramMarkdownV2(t *testing.T) {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
input string
|
input string
|
||||||
|
|
@ -24,6 +29,10 @@ func Test_markdownToTelegramMarkdownV2(t *testing.T) {
|
||||||
input: "[inline URL](http://www.example.com/)",
|
input: "[inline URL](http://www.example.com/)",
|
||||||
expected: "[inline URL](http://www.example.com/)",
|
expected: "[inline URL](http://www.example.com/)",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
input: md2AllFormats,
|
||||||
|
expected: md2AllFormats,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
|
|
|
||||||
31
pkg/channels/telegram/testdata/md2_all_formats.txt
vendored
Normal file
31
pkg/channels/telegram/testdata/md2_all_formats.txt
vendored
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
*bold \*text*
|
||||||
|
_italic \*text_
|
||||||
|
__underline__
|
||||||
|
~strikethrough~
|
||||||
|
||spoiler||
|
||||||
|
*bold _italic bold ~italic bold strikethrough ||italic bold strikethrough spoiler||~ __underline italic bold___ bold*
|
||||||
|
[inline URL](http://www.example.com/)
|
||||||
|
[inline mention of a user](tg://user?id=123456789)
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
`inline fixed-width code`
|
||||||
|
```
|
||||||
|
pre-formatted fixed-width code block
|
||||||
|
```
|
||||||
|
```python
|
||||||
|
pre-formatted fixed-width code block written in the Python programming language
|
||||||
|
```
|
||||||
|
>Block quotation started
|
||||||
|
>Block quotation continued
|
||||||
|
>Block quotation continued
|
||||||
|
>Block quotation continued
|
||||||
|
>The last line of the block quotation
|
||||||
|
**>The expandable block quotation started right after the previous block quotation
|
||||||
|
>It is separated from the previous block quotation by an empty bold entity
|
||||||
|
>Expandable block quotation continued
|
||||||
|
>Hidden by default part of the expandable block quotation started
|
||||||
|
>Expandable block quotation continued
|
||||||
|
>The last line of the expandable block quotation with the expandability mark||
|
||||||
Loading…
Add table
Reference in a new issue