diff --git a/packages/html-parser/src/index.ts b/packages/html-parser/src/index.ts index 79307ab3..e609083f 100644 --- a/packages/html-parser/src/index.ts +++ b/packages/html-parser/src/index.ts @@ -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, '
') + .replace(/ {2,}/g, (match) => { + return ' '.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! diff --git a/packages/html-parser/tests/html-parser.spec.ts b/packages/html-parser/tests/html-parser.spec.ts index c0786715..7725cddb 100644 --- a/packages/html-parser/tests/html-parser.spec.ts +++ b/packages/html-parser/tests/html-parser.spec.ts @@ -253,17 +253,27 @@ describe('HtmlMessageEntityParser', () => { }), createEntity('messageEntityPre', 35, 9, { language: '' }), ], - 'plain
lang: javascript
console.log("Hello, world!")
lang: 
some code
plain', + 'plain
lang: javascript
console.log("Hello, world!")
some code
plain', parser ) }) - it('should replace newlines with
', () => { + it('should replace newlines with
outside pre', () => { test( 'plain\n\nplain', [], 'plain

plain' ) + test( + 'plain\n\nplain', + [createEntity('messageEntityBold', 0, 12)], + 'plain

plain
' + ) + test( + 'plain\n\nplain', + [createEntity('messageEntityPre', 0, 12)], + '
plain\n\nplain
' + ) }) it('should replace multiple spaces with  ', () => {