Escape markdown sequences (#2208)
* escape inline markdown character * fix typo * improve document around custom markdown plugin and add escape sequence utils * recover inline escape sequences on edit * remove escape sequences from plain text body * use `s` for strike-through instead of del * escape block markdown sequences * fix remove escape sequence was not removing all slashes from plain text * recover block sequences on edit
This commit is contained in:
@@ -3,7 +3,12 @@ import { Descendant, Text } from 'slate';
|
||||
import { sanitizeText } from '../../utils/sanitize';
|
||||
import { BlockType } from './types';
|
||||
import { CustomElement } from './slate';
|
||||
import { parseBlockMD, parseInlineMD } from '../../plugins/markdown';
|
||||
import {
|
||||
parseBlockMD,
|
||||
parseInlineMD,
|
||||
unescapeMarkdownBlockSequences,
|
||||
unescapeMarkdownInlineSequences,
|
||||
} from '../../plugins/markdown';
|
||||
import { findAndReplace } from '../../utils/findAndReplace';
|
||||
import { sanitizeForRegex } from '../../utils/regex';
|
||||
|
||||
@@ -19,7 +24,7 @@ const textToCustomHtml = (node: Text, opts: OutputOptions): string => {
|
||||
if (node.bold) string = `<strong>${string}</strong>`;
|
||||
if (node.italic) string = `<i>${string}</i>`;
|
||||
if (node.underline) string = `<u>${string}</u>`;
|
||||
if (node.strikeThrough) string = `<del>${string}</del>`;
|
||||
if (node.strikeThrough) string = `<s>${string}</s>`;
|
||||
if (node.code) string = `<code>${string}</code>`;
|
||||
if (node.spoiler) string = `<span data-mx-spoiler>${string}</span>`;
|
||||
}
|
||||
@@ -102,7 +107,8 @@ export const toMatrixCustomHTML = (
|
||||
allowBlockMarkdown: false,
|
||||
})
|
||||
.replace(/<br\/>$/, '\n')
|
||||
.replace(/^>/, '>');
|
||||
.replace(/^(\\*)>/, '$1>');
|
||||
|
||||
markdownLines += line;
|
||||
if (index === targetNodes.length - 1) {
|
||||
return parseBlockMD(markdownLines, ignoreHTMLParseInlineMD);
|
||||
@@ -157,11 +163,14 @@ const elementToPlainText = (node: CustomElement, children: string): string => {
|
||||
}
|
||||
};
|
||||
|
||||
export const toPlainText = (node: Descendant | Descendant[]): string => {
|
||||
if (Array.isArray(node)) return node.map((n) => toPlainText(n)).join('');
|
||||
if (Text.isText(node)) return node.text;
|
||||
export const toPlainText = (node: Descendant | Descendant[], isMarkdown: boolean): string => {
|
||||
if (Array.isArray(node)) return node.map((n) => toPlainText(n, isMarkdown)).join('');
|
||||
if (Text.isText(node))
|
||||
return isMarkdown
|
||||
? unescapeMarkdownBlockSequences(node.text, unescapeMarkdownInlineSequences)
|
||||
: node.text;
|
||||
|
||||
const children = node.children.map((n) => toPlainText(n)).join('');
|
||||
const children = node.children.map((n) => toPlainText(n, isMarkdown)).join('');
|
||||
return elementToPlainText(node, children);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user