Do no automatically apply non-markdown for context separators (#4003)

817474c60dd976827c18556c0d7936229cd35b62

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
1 files changed, +19 -20Showing whitespace changes
public/scripts/showdown-exclusion.js+19 -20
@@ -1,40 +1,39 @@
11import { power_user } from './power-user.js';
2+import { substituteParams } from '../script.js';
23
3-// Showdown extension to make chat separators (dinkuses) ignore markdown formatting
4+/**
5+ * Showdown extension to make chat separators (dinkuses) ignore markdown formatting
6+ * @returns {import('showdown').ShowdownExtension[]} An array of Showdown extensions
7+ */
48export const markdownExclusionExt = () => {
59 if (!power_user) {
610 console.log('Showdown-dinkus extension: power_user wasn\'t found! Returning.');
711 return [];
812 }
913
10- let combinedExcludeString = '';
14+ // The extension will only be applied if the user has non-empty "Non-markdown strings"
11- if (power_user.context.chat_start) {
15+ // Changing the string in the UI reloads the processor, so we don't need to worry about it
12- combinedExcludeString += `${power_user.context.chat_start},`;
16+ if (!power_user.markdown_escape_strings) {
13- }
17+ return [];
14-
15- if (power_user.context.example_separator) {
16- combinedExcludeString += `${power_user.context.example_separator},`;
17- }
18-
19- if (power_user.markdown_escape_strings) {
20- combinedExcludeString += power_user.markdown_escape_strings;
2118 }
2219
23- const escapedExclusions = combinedExcludeString
20+ // Escape the strings to be excluded from markdown parsing
21+ // Function is evaluated every time, so we don't care about stale macros in the strings
22+ return [{
23+ type: 'lang',
24+ filter: (text) => {
25+ const escapedExclusions = substituteParams(power_user.markdown_escape_strings)
2426 .split(',')
2527 .filter((element) => element.length > 0)
2628 .map((element) => `(${element.split('').map((char) => `\\${char}`).join('')})`);
2729
28-
2930 // No exclusions? No extension!
3031 if (!combinedExcludeString || combinedExcludeString.length === 0 || escapedExclusions.length === 0) {
3132 return []text;
3233 }
3334
3435 const replaceRegex = new RegExp(`^(${escapedExclusions.join('|')})\n`, 'gm');
35- return [{
36+ return text.replace(replaceRegex, ((match) => match.replace(replaceRegex, `\u0000${match} \n`)));
36- type: 'lang',
37+ },
37- regex: replaceRegex,
38- replace: ((match) => match.replace(replaceRegex, `\u0000${match} \n`)),
3938 }];
4039};