mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-29 14:31:35 +08:00
fix(yaml-front-matter): update start method regex to match exact YAML front matter format
This commit is contained in:
parent
9b8e4d1d70
commit
3bd71e4618
@ -1,74 +0,0 @@
|
||||
import { mergeAttributes } from '@tiptap/core'
|
||||
import { HorizontalRule } from '@tiptap/extension-horizontal-rule'
|
||||
|
||||
/**
|
||||
* Enhanced HorizontalRule extension that preserves leading spaces in markdown
|
||||
*
|
||||
* Standard Markdown allows 0-3 spaces before a horizontal rule (---, ***, ___)
|
||||
* This extension preserves that indentation when serializing back to markdown
|
||||
*/
|
||||
export const EnhancedHorizontalRule = HorizontalRule.extend({
|
||||
addAttributes() {
|
||||
return {
|
||||
...this.parent?.(),
|
||||
// Store the number of leading spaces (0-3)
|
||||
indentation: {
|
||||
default: 0,
|
||||
parseHTML: (element) => {
|
||||
const indent = element.getAttribute('data-indentation')
|
||||
return indent ? parseInt(indent, 10) : 0
|
||||
},
|
||||
renderHTML: (attributes) => {
|
||||
if (!attributes.indentation) return {}
|
||||
return {
|
||||
'data-indentation': attributes.indentation
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
parseHTML() {
|
||||
return [
|
||||
{
|
||||
tag: 'hr',
|
||||
getAttrs: (element) => {
|
||||
if (typeof element === 'string') return {}
|
||||
|
||||
const htmlElement = element as HTMLElement
|
||||
const indentAttr = htmlElement.getAttribute('data-indentation')
|
||||
|
||||
return {
|
||||
indentation: indentAttr ? parseInt(indentAttr, 10) : 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
renderHTML({ HTMLAttributes }) {
|
||||
return ['hr', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)]
|
||||
},
|
||||
|
||||
// Custom markdown parsing to capture leading spaces
|
||||
parseMarkdown(token) {
|
||||
// The token.raw contains the original markdown including leading spaces
|
||||
// Match 0-3 leading spaces before ---, ***, or ___
|
||||
const match = /^( {0,3})(?:---|___|\*\*\*)/.exec(token.raw || '')
|
||||
const indentation = match ? match[1].length : 0
|
||||
|
||||
return {
|
||||
type: this.name,
|
||||
attrs: {
|
||||
indentation
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Custom markdown serialization to restore leading spaces
|
||||
renderMarkdown(node) {
|
||||
const indentation = node.attrs?.indentation || 0
|
||||
const spaces = ' '.repeat(Math.min(indentation, 3)) // Max 3 spaces per spec
|
||||
return spaces + '---\n\n'
|
||||
}
|
||||
})
|
||||
Loading…
Reference in New Issue
Block a user