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 @@
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- }
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) {
3117 return [];
3218 }
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
3522 return [{
3623 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+ },
3938 }];
4039};