feat: Integrate input rules and paste rules into the core (#1997)
* refactoring * improve link regex * WIP: add new markPasteRule und linkify to image mark * move copy of inputrule to core * trigger codeblock inputrule on enter * refactoring * add regex match to markpasterulematch * refactoring * improve link regex * WIP: add new markPasteRule und linkify to image mark * move copy of inputrule to core * trigger codeblock inputrule on enter * refactoring * add regex match to markpasterulematch * update linkify * wip * wip * log * wip * remove debug code * wip * wip * wip * wip * wip * wip * wip * wip * rename matcher * add data to ExtendedRegExpMatchArray * remove logging * add code option to marks, prevent inputrules in code mark * remove link regex * fix codeblock inputrule on enter * refactoring * refactoring * refactoring * refactoring * fix position bug * add test * export InputRule and PasteRule * clean up link demo * fix types
This commit is contained in:
35
packages/core/src/pasteRules/textPasteRule.ts
Normal file
35
packages/core/src/pasteRules/textPasteRule.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { PasteRule, PasteRuleFinder } from '../PasteRule'
|
||||
|
||||
/**
|
||||
* Build an paste rule that replaces text when the
|
||||
* matched text is pasted into it.
|
||||
*/
|
||||
export default function textPasteRule(config: {
|
||||
find: PasteRuleFinder,
|
||||
replace: string,
|
||||
}) {
|
||||
return new PasteRule({
|
||||
find: config.find,
|
||||
handler: ({ state, range, match }) => {
|
||||
let insert = config.replace
|
||||
let start = range.from
|
||||
const end = range.to
|
||||
|
||||
if (match[1]) {
|
||||
const offset = match[0].lastIndexOf(match[1])
|
||||
|
||||
insert += match[0].slice(offset + match[1].length)
|
||||
start += offset
|
||||
|
||||
const cutOff = start - end
|
||||
|
||||
if (cutOff > 0) {
|
||||
insert = match[0].slice(offset - cutOff, offset) + insert
|
||||
start = end
|
||||
}
|
||||
}
|
||||
|
||||
state.tr.insertText(insert, start, end)
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user