fix(html): fixed un-parsing
This commit is contained in:
parent
d8111ea525
commit
05be58f903
2 changed files with 32 additions and 11 deletions
|
@ -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 ' '.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!
|
||||
|
|
|
@ -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 ', () => {
|
||||
|
|
Loading…
Reference in a new issue