fix(html): fixed un-parsing

This commit is contained in:
teidesu 2022-05-06 00:36:54 +03:00
parent d8111ea525
commit 05be58f903
2 changed files with 32 additions and 11 deletions

View file

@ -275,6 +275,10 @@ export class HtmlMessageEntityParser implements IMessageEntityParser {
if (!text) return text
if (!entities.length || entities.length === entitiesOffset) {
return HtmlMessageEntityParser.escape(text)
.replace(/\n/g, '<br>')
.replace(/ {2,}/g, (match) => {
return '&nbsp;'.repeat(match.length)
})
}
const end = offset + length
@ -314,15 +318,22 @@ export class HtmlMessageEntityParser implements IMessageEntityParser {
const substr = text.substr(relativeOffset, length)
if (!substr) continue
const entityText = this._unparse(
substr,
entities,
i + 1,
offset + relativeOffset,
length
)
const type = entity.type
let entityText
if (type === 'pre') {
entityText = substr
} else {
entityText = this._unparse(
substr,
entities,
i + 1,
offset + relativeOffset,
length
)
}
switch (type) {
case 'bold':
case 'italic':
@ -339,7 +350,7 @@ export class HtmlMessageEntityParser implements IMessageEntityParser {
? ` language="${entity.language}"`
: ''
}>${
this._syntaxHighlighter
this._syntaxHighlighter && entity.language
? this._syntaxHighlighter(
entityText,
entity.language!

View file

@ -253,17 +253,27 @@ describe('HtmlMessageEntityParser', () => {
}),
createEntity('messageEntityPre', 35, 9, { language: '' }),
],
'plain <pre language="javascript">lang: <b>javascript</b><br>console.log("Hello, world!")</pre> <pre>lang: <b></b><br>some code</pre> plain',
'plain <pre language="javascript">lang: <b>javascript</b><br>console.log("Hello, world!")</pre> <pre>some code</pre> plain',
parser
)
})
it('should replace newlines with <br>', () => {
it('should replace newlines with <br> outside pre', () => {
test(
'plain\n\nplain',
[],
'plain<br><br>plain'
)
test(
'plain\n\nplain',
[createEntity('messageEntityBold', 0, 12)],
'<b>plain<br><br>plain</b>'
)
test(
'plain\n\nplain',
[createEntity('messageEntityPre', 0, 12)],
'<pre>plain\n\nplain</pre>'
)
})
it('should replace multiple spaces with &nbsp;', () => {