diff --git a/app/src/protyle/util/paste.ts b/app/src/protyle/util/paste.ts index 84ed0c757..dc6732127 100644 --- a/app/src/protyle/util/paste.ts +++ b/app/src/protyle/util/paste.ts @@ -169,8 +169,21 @@ export const pasteAsPlainText = async (protyle: IProtyle) => { if (localFiles.length === 0) { // Inline-level elements support pasted as plain text https://github.com/siyuan-note/siyuan/issues/8010 navigator.clipboard.readText().then(textPlain => { + // 对一些内置需要解析的 HTML 标签进行内部转移 Improve sub/sup pasting as plain text https://github.com/siyuan-note/siyuan/issues/12155 + textPlain = textPlain.replace(//g, "__@sub@__").replace(/<\/sub>/g, "__@/sub@__"); + textPlain = textPlain.replace(//g, "__@sup@__").replace(/<\/sup>/g, "__@/sup@__"); + textPlain = textPlain.replace(//g, "__@kbd@__").replace(/<\/kbd>/g, "__@/kbd@__"); + textPlain = textPlain.replace(//g, "__@u@__").replace(/<\/u>/g, "__@/u@__"); + // 对 HTML 标签进行内部转义,避免被 Lute 解析以后变为小写 https://github.com/siyuan-note/siyuan/issues/10620 textPlain = textPlain.replace(//g, ";;;gt;;;"); + + // 反转义内置需要解析的 HTML 标签 + textPlain = textPlain.replace(/__@sub@__/g, "").replace(/__@\/sub@__/g, ""); + textPlain = textPlain.replace(/__@sup@__/g, "").replace(/__@\/sup@__/g, ""); + textPlain = textPlain.replace(/__@kbd@__/g, "").replace(/__@\/kbd@__/g, ""); + textPlain = textPlain.replace(/__@u@__/g, "").replace(/__@\/u@__/g, "