From 69602ab93f54967bf9ae4d3b64596fe1885d2b88 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Thu, 22 Aug 2024 21:01:54 -0400 Subject: [PATCH] fix: Do not replace smart quotes in inline code, block code, or after a markdown backtick (code) character --- app/editor/extensions/SmartText.ts | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/app/editor/extensions/SmartText.ts b/app/editor/extensions/SmartText.ts index 0c16af8c4039..74a486781976 100644 --- a/app/editor/extensions/SmartText.ts +++ b/app/editor/extensions/SmartText.ts @@ -1,4 +1,3 @@ -import { ellipsis, smartQuotes } from "prosemirror-inputrules"; import Extension from "@shared/editor/lib/Extension"; import { InputRule } from "@shared/editor/lib/InputRule"; @@ -9,6 +8,21 @@ const threeQuarters = new InputRule(/(?:^|\s)3\/4$/, "¾"); const copyright = new InputRule(/\(c\)$/, "©️"); const registered = new InputRule(/\(r\)$/, "®️"); const trademarked = new InputRule(/\(tm\)$/, "™️"); +const ellipsis = new InputRule(/\.\.\.$/, "…"); + +// Double quotes +const openDoubleQuote = new InputRule( + /(?:^|[\s\{\[\(\<'"\u2018\u201C])(")$/, + "“" +); +const closeDoubleQuote = new InputRule(/^(?!.*`)[\s\S]*(")$/, "”"); + +// Single quotes +const openSingleQuote = new InputRule( + /(?:^|[\s\{\[\(\<'"\u2018\u201C])(')$/, + "‘" +); +const closeSingleQuote = new InputRule(/^(?!.*`)[\s\S]*(')$/, "’"); export default class SmartText extends Extension { get name() { @@ -25,7 +39,10 @@ export default class SmartText extends Extension { registered, trademarked, ellipsis, - ...smartQuotes, + openDoubleQuote, + closeDoubleQuote, + openSingleQuote, + closeSingleQuote, ]; } }