From 76308674c1901c219a456e9685e1eb29c33eeb06 Mon Sep 17 00:00:00 2001 From: FIameCaster <82079841+FIameCaster@users.noreply.github.com> Date: Thu, 2 May 2024 18:16:28 +0200 Subject: [PATCH] Some refactoring --- package/src/extensions/matchTags.ts | 6 ++- package/src/languages/common.ts | 2 +- package/src/prism/languages/ejs.js | 2 +- package/src/prism/languages/etlua.js | 2 +- package/src/prism/languages/java.js | 18 +++++---- package/src/prism/languages/parser.js | 2 +- package/src/prism/languages/pug.js | 22 +++++------ package/src/prism/languages/smarty.js | 2 +- package/src/prism/languages/xeora.js | 53 +++++++++++++-------------- 9 files changed, 54 insertions(+), 55 deletions(-) diff --git a/package/src/extensions/matchTags.ts b/package/src/extensions/matchTags.ts index 1d405dcd..54f5197c 100644 --- a/package/src/extensions/matchTags.ts +++ b/package/src/extensions/matchTags.ts @@ -15,7 +15,7 @@ const voidTags = /^(?:area|base|w?br|col|embed|hr|img|input|link|meta|source|tra * - Its ending position * - Its tag name * - Whether it's a closing tag - * - Whether it isn't self-closing + * - Whether it's not self-closing */ export type Tag = [Token, number, number, string, boolean, boolean] @@ -27,7 +27,9 @@ export interface TagMatcher { * - Its ending position * - Its tag name * - Whether it's a closing tag - * - Whether it isn't self-closing + * - Whether it's not self-closing + * + * The tags are sorted by their ending position */ readonly tags: Tag[] /** Array mapping the index of a tag to the index of its matching tag. */ diff --git a/package/src/languages/common.ts b/package/src/languages/common.ts index e347bc81..8406b031 100644 --- a/package/src/languages/common.ts +++ b/package/src/languages/common.ts @@ -23,4 +23,4 @@ import "./sql" import "./swift" import "./wasm" import "./xml" -import "./yaml" \ No newline at end of file +import "./yaml" diff --git a/package/src/prism/languages/ejs.js b/package/src/prism/languages/ejs.js index 463d8a24..b8622e6a 100644 --- a/package/src/prism/languages/ejs.js +++ b/package/src/prism/languages/ejs.js @@ -19,5 +19,5 @@ languages.eta = languages.ejs = { } }, 'escape': /<%%|%%>/, - [tokenize]: embeddedIn('markup') + [tokenize]: embeddedIn('html') }; diff --git a/package/src/prism/languages/etlua.js b/package/src/prism/languages/etlua.js index 1ce25cc1..7e4e3ddf 100644 --- a/package/src/prism/languages/etlua.js +++ b/package/src/prism/languages/etlua.js @@ -17,5 +17,5 @@ languages.etlua = { } } }, - [tokenize]: embeddedIn('markup') + [tokenize]: embeddedIn('html') }; diff --git a/package/src/prism/languages/java.js b/package/src/prism/languages/java.js index b3f7bc0c..a5deac54 100644 --- a/package/src/prism/languages/java.js +++ b/package/src/prism/languages/java.js @@ -6,13 +6,15 @@ var keywords = /\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|co // full package (optional) + parent classes (optional) var classNamePrefix = /(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source; +var namespace = { + pattern: /^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/, + inside: { + 'punctuation': /\./ + } +}; + var classInside = { - 'namespace': { - pattern: /^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/, - inside: { - 'punctuation': /\./ - } - }, + 'namespace': namespace, 'punctuation': /\./ }; @@ -65,7 +67,7 @@ languages.java = { pattern: RegExp(`(\\bimport\\s+)${classNamePrefix}(?:[A-Z]\\w*|\\*)(?=\\s*;)`), lookbehind: true, inside: { - 'namespace': classInside.namespace, + 'namespace': namespace, 'punctuation': /\./, 'operator': /\*/, 'class-name': /\w+/ @@ -76,7 +78,7 @@ languages.java = { lookbehind: true, alias: 'static', inside: { - 'namespace': classInside.namespace, + 'namespace': namespace, 'static': /\b\w+$/, 'punctuation': /\./, 'operator': /\*/, diff --git a/package/src/prism/languages/parser.js b/package/src/prism/languages/parser.js index 4628f944..ccffe0b0 100644 --- a/package/src/prism/languages/parser.js +++ b/package/src/prism/languages/parser.js @@ -56,7 +56,7 @@ var expression = { } }; -var parser = languages.parser = extend('markup', { +var parser = languages.parser = extend('html', { 'parser-comment': { pattern: /(\s)#.*/, lookbehind: true, diff --git a/package/src/prism/languages/pug.js b/package/src/prism/languages/pug.js index 2d41426d..c57bca92 100644 --- a/package/src/prism/languages/pug.js +++ b/package/src/prism/languages/pug.js @@ -104,12 +104,12 @@ Object.assign(pug, { 'each': { pattern: /^each .+? in\b/, inside: { - 'keyword': /\b(?:each|in)\b/, + 'keyword': /^\w+|in$/, 'punctuation': /,/ } }, 'branch': { - pattern: /^(?:case|default|else|if|unless|when|while)\b/, + pattern: /^\w+/, alias: 'keyword' }, [rest]: js @@ -126,7 +126,7 @@ Object.assign(pug, { lookbehind: true, inside: { 'keyword': /^mixin/, - 'function': /\w+(?=\s*\(|\s*$)/, + 'function': /\b\w+(?!\s*[^\s(])/, 'punctuation': /[().,]/ } }, @@ -166,7 +166,7 @@ Object.assign(pug, { pattern: /\([^)]+\)/, inside: { 'attr-value': { - pattern: /(=\s*(?!\s))(?:\{[^}]*\}|[^,)\n]+)/, + pattern: /(=\s*(?!\s))(?:\{[^}]*\}|[^\n,)]+)/, lookbehind: true, inside: js }, @@ -180,12 +180,10 @@ Object.assign(pug, { 'attr-class': /\.[\w-]+/ } }, - 'code': [ - { - pattern: /(^[ \t]*(?:-|!?=)).+/m, - lookbehind: true, - inside: js - } - ], + 'code': { + pattern: /(^[ \t]*(?:-|!?=)).+/m, + lookbehind: true, + inside: js + }, 'punctuation': /[.!=|-]+/ -}) +}); diff --git a/package/src/prism/languages/smarty.js b/package/src/prism/languages/smarty.js index 3c357f5a..57f1eb6a 100644 --- a/package/src/prism/languages/smarty.js +++ b/package/src/prism/languages/smarty.js @@ -91,5 +91,5 @@ languages.smarty = { alias: 'language-smarty', inside: smarty }, - [tokenize]: embeddedIn('markup') + [tokenize]: embeddedIn('html') } diff --git a/package/src/prism/languages/xeora.js b/package/src/prism/languages/xeora.js index af11435e..a57fd02e 100644 --- a/package/src/prism/languages/xeora.js +++ b/package/src/prism/languages/xeora.js @@ -12,6 +12,13 @@ var variable = { } }; +var blockPunctuation = { + pattern: /\$(?:\w:|C\[|C#\d)?|[[\]{:]/, + inside: { + 'tag': /#\d/ + } +}; + insertBefore(xeora, 'markup-bracket', { 'constant': { pattern: /\$(?:DomainContents|PageRenderDuration)\$/, @@ -28,63 +35,53 @@ insertBefore(xeora, 'markup-bracket', { }, 'function-inline': { pattern: /\$F:[\w.-]+\?[\w.-]+(?:,(?:(?:@[-#]*\w+\.[\w+.]\.*)*\|)*(?:(?:[\w+]|[-#*.~^]+[\w+]|=\S)(?:[^$=]|=+[^=])*=*|(?:@[-#]*\w+\.[\w+.]\.*)+(?:(?:[\w+]|[-#*~^][-#*.~^]*[\w+]|=\S)(?:[^$=]|=+[^=])*=*)?)?)?\$/, + alias: 'function', inside: { 'variable': variable, 'punctuation': /\$\w:|[$?.,:|]/ - }, - alias: 'function' + } }, 'function-block': { pattern: /\$XF:\{[\w.-]+\?[\w.-]+(?:,(?:(?:@[-#]*\w+\.[\w+.]\.*)*\|)*(?:(?:[\w+]|[-#*.~^]+[\w+]|=\S)(?:[^$=]|=+[^=])*=*|(?:@[-#]*\w+\.[\w+.]\.*)+(?:(?:[\w+]|[-#*~^][-#*.~^]*[\w+]|=\S)(?:[^$=]|=+[^=])*=*)?)?)?\}:XF\$/, + alias: 'function', inside: { 'variable': variable, 'punctuation': /[{}$?.,:|]/ - }, - alias: 'function' + } }, 'directive-inline': { - pattern: /\$\w(?:#\d+\+?)?(?:\[[\w.-]+\])?:[-\w./]+\$/, + pattern: /\$\w(?:#\d+\+?)?(?:\[[\w.-]+\])?:[\w./-]+\$/, + alias: 'function', inside: { - 'punctuation': { - pattern: /\$(?:\w:|C(?:\[|#\d))?|[:{[\]]/, - inside: { - 'tag': /#\d/ - } - } - }, - alias: 'function' + 'punctuation': blockPunctuation + } }, 'directive-block-open': { pattern: /\$\w+:\{|\$\w(?:#\d+\+?)?(?:\[[\w.-]+\])?:[\w.-]+:\{(?:![A-Z]+)?/, + alias: 'function', inside: { - 'punctuation': { - pattern: /\$(?:\w:|C\[|C#\d)?|[:{[\]]/, - inside: { - 'tag': /#\d/ - } - }, + 'punctuation': blockPunctuation, 'attribute': { - pattern: /![A-Z]+$/, + pattern: /![A-Z]+/, + alias: 'keyword', inside: { 'punctuation': /!/ - }, - alias: 'keyword' + } } - }, - alias: 'function' + } }, 'directive-block-separator': { pattern: /\}:[\w.-]+:\{/, + alias: 'function', inside: { 'punctuation': /[:{}]/ - }, - alias: 'function' + } }, 'directive-block-close': { pattern: /\}:[\w.-]+\$/, + alias: 'function', inside: { 'punctuation': /[:{}$]/ - }, - alias: 'function' + } } });