fix #663
This commit is contained in:
parent
cc4bbf99e4
commit
f7010ee3f7
|
@ -20,6 +20,7 @@ export default function rehypeSN (options = {}) {
|
|||
node.properties.inline = !(parent && parent.tagName === 'pre')
|
||||
}
|
||||
|
||||
// handle headings
|
||||
if (node.type === 'element' && ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(node.tagName) && !node.properties.id) {
|
||||
const nodeText = toString(node)
|
||||
const headingId = slug(nodeText.replace(/[^\w\-\s]+/gi, ''))
|
||||
|
@ -89,12 +90,22 @@ export default function rehypeSN (options = {}) {
|
|||
const newChildren = []
|
||||
let lastIndex = 0
|
||||
let match
|
||||
let childrenConsumed = 1
|
||||
let text = toString(node)
|
||||
|
||||
const combinedRegex = new RegExp(mentionRegex.source + '|' + subRegex.source, 'gi')
|
||||
|
||||
while ((match = combinedRegex.exec(node.value)) !== null) {
|
||||
// handle @__username__ or ~__sub__
|
||||
if (['@', '~'].includes(node.value) &&
|
||||
parent.children[index + 1]?.tagName === 'strong' &&
|
||||
parent.children[index + 1].children[0]?.type === 'text') {
|
||||
childrenConsumed = 2
|
||||
text = node.value + '__' + toString(parent.children[index + 1]) + '__'
|
||||
}
|
||||
|
||||
while ((match = combinedRegex.exec(text)) !== null) {
|
||||
if (lastIndex < match.index) {
|
||||
newChildren.push({ type: 'text', value: node.value.slice(lastIndex, match.index) })
|
||||
newChildren.push({ type: 'text', value: text.slice(lastIndex, match.index) })
|
||||
}
|
||||
|
||||
const [fullMatch, mentionMatch, subMatch] = match
|
||||
|
@ -109,12 +120,12 @@ export default function rehypeSN (options = {}) {
|
|||
lastIndex = combinedRegex.lastIndex
|
||||
}
|
||||
|
||||
if (lastIndex < node.value.length) {
|
||||
newChildren.push({ type: 'text', value: node.value.slice(lastIndex) })
|
||||
if (lastIndex < text.length) {
|
||||
newChildren.push({ type: 'text', value: text.slice(lastIndex) })
|
||||
}
|
||||
|
||||
if (newChildren.length > 0) {
|
||||
parent.children.splice(index, 1, ...newChildren)
|
||||
parent.children.splice(index, childrenConsumed, ...newChildren)
|
||||
return index + newChildren.length
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue