import { Mark, markInputRule, markPasteRule } from '@tiptap/core' import VerEx from 'verbal-expressions' declare module '@tiptap/core/src/Editor' { interface Editor { code(): Editor, } } export default new Mark() .name('code') .schema(() => ({ excludes: '_', parseDOM: [ { tag: 'code' }, ], toDOM: () => ['code', 0], })) .commands(({ editor, name }) => ({ code: next => () => { editor.toggleMark(name) next() }, })) .keys(({ editor }) => ({ 'Mod-`': () => editor.code() })) .inputRules(({ type }) => { const regex = VerEx() .add('(?:^|\\s)') .beginCapture() .find('`') .beginCapture() .somethingBut('`') .endCapture() .find('`') .endCapture() .endOfLine() return [markInputRule(regex, type)] }) .pasteRules(({ type }) => { const regex = VerEx() .add('(?:^|\\s)') .beginCapture() .find('`') .beginCapture() .somethingBut('`') .endCapture() .find('`') .endCapture() return [markPasteRule(regex, type)] }) .create()