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

817474c60dd976827c18556c0d7936229cd35b62

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

Signed
1 files changed, +24 -25Ignore whitespace
public/scripts/showdown-exclusion.js+24 -25
@@ -1,40 +1,39 @@
1import { power_user } from './power-user.js';1import { power_user } from './power-user.js';
2import { substituteParams } from '../script.js';
23
3// Showdown extension to make chat separators (dinkuses) ignore markdown formatting4/**
5 * Showdown extension to make chat separators (dinkuses) ignore markdown formatting
6 * @returns {import('showdown').ShowdownExtension[]} An array of Showdown extensions
7 */
4export const markdownExclusionExt = () => {8export const markdownExclusionExt = () => {
5 if (!power_user) {9 if (!power_user) {
6 console.log('Showdown-dinkus extension: power_user wasn\'t found! Returning.');10 console.log('Showdown-dinkus extension: power_user wasn\'t found! Returning.');
7 return [];11 return [];
8 }12 }
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 }
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;
21 }
22
23 const escapedExclusions = combinedExcludeString
24 .split(',')
25 .filter((element) => element.length > 0)
26 .map((element) => `(${element.split('').map((char) => `\\${char}`).join('')})`);
27
28
29 // No exclusions? No extension!
30 if (!combinedExcludeString || combinedExcludeString.length === 0 || escapedExclusions.length === 0) {
31 return [];17 return [];
32 }18 }
3319
34 const replaceRegex = new RegExp(`^(${escapedExclusions.join('|')})\n`, 'gm');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
35 return [{22 return [{
36 type: 'lang',23 type: 'lang',
37 regex: replaceRegex,24 filter: (text) => {
38 replace: ((match) => match.replace(replaceRegex, `\u0000${match} \n`)),25 const escapedExclusions = substituteParams(power_user.markdown_escape_strings)
26 .split(',')
27 .filter((element) => element.length > 0)
28 .map((element) => `(${element.split('').map((char) => `\\${char}`).join('')})`);
29
30 // No exclusions? No extension!
31 if (escapedExclusions.length === 0) {
32 return text;
33 }
34
35 const replaceRegex = new RegExp(`^(${escapedExclusions.join('|')})\n`, 'gm');
36 return text.replace(replaceRegex, ((match) => match.replace(replaceRegex, `\u0000${match} \n`)));
37 },
39 }];38 }];
40};39};