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

View file

@ -253,17 +253,27 @@ describe('HtmlMessageEntityParser', () => {
}), }),
createEntity('messageEntityPre', 35, 9, { language: '' }), 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 parser
) )
}) })
it('should replace newlines with <br>', () => { it('should replace newlines with <br> outside pre', () => {
test( test(
'plain\n\nplain', 'plain\n\nplain',
[], [],
'plain<br><br>plain' '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;', () => { it('should replace multiple spaces with &nbsp;', () => {