From cd8f792a40deb7c05ab968c9658e23814c782563 Mon Sep 17 00:00:00 2001 From: "Kaishan (Sam) Ding" Date: Mon, 9 Dec 2024 17:59:58 -0800 Subject: [PATCH 1/3] add blade support --- package.json | 2 +- src/lib/syntaxHighlighting/blade.js | 166 ++++++++++++++++++ .../rehype/rehypeSyntaxHighlighting.ts | 4 + 3 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 src/lib/syntaxHighlighting/blade.js diff --git a/package.json b/package.json index 46a2f57..e4587ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mintlify/mdx", - "version": "0.0.49", + "version": "0.0.54", "description": "Markdown parser from Mintlify", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/src/lib/syntaxHighlighting/blade.js b/src/lib/syntaxHighlighting/blade.js new file mode 100644 index 0000000..0da3947 --- /dev/null +++ b/src/lib/syntaxHighlighting/blade.js @@ -0,0 +1,166 @@ +/** + * Sources: + * 1. https://github.com/PrismJS/prism/blob/master/components/prism-php.js + * 2. https://github.com/Medalink/laravel-blade/blob/main/Syntaxes/Blade.sublime-syntax + * 3. https://github.com/miken32/highlightjs-blade/blob/main/src/languages/blade.js + */ +import refractorMarkup from 'refractor/lang/markup.js'; +import refractorPhp from 'refractor/lang/php.js'; + +blade.displayName = 'blade'; +blade.aliases = ['blade_php']; + +export default function blade(Prism) { + Prism.register(refractorMarkup); + Prism.register(refractorPhp); + + // (function (Prism) { + // Prism.languages.blade = Prism.languages.extend('markup', {}); + + // Object.assign(Prism.languages.blade, { + // comment: { + // pattern: /{{--.+?--}}/s, + // }, + + // 'template-variable': { + // pattern: /{{[\s\S]*?}}/, + // inside: { + // delimiter: { + // pattern: /^{{|}}$/, + // alias: 'punctuation', + // }, + // rest: { + // pattern: /[\s\S]+/, + // alias: 'php', + // inside: Prism.languages.php, + // }, + // }, + // }, + + // 'template-variable-raw': { + // pattern: /{!![\s\S]*?!!}/, + // inside: { + // delimiter: { + // pattern: /^{!!|!!}$/, + // alias: 'punctuation', + // }, + // rest: { + // pattern: /[\s\S]+/, + // alias: 'php', + // inside: Prism.languages.php, + // }, + // }, + // }, + // 'template-tag': [ + // { + // pattern: /@(?:php|endphp)/, + // alias: 'keyword', + // }, + // { + // pattern: /@[\w]+/, + // alias: 'keyword', + // }, + // ], + + // 'php-block': { + // pattern: /(@php\s*)([\s\S]*?)(@endphp)/, + // lookbehind: true, + // inside: { + // rest: { + // pattern: /[\s\S]+/, + // alias: 'php', + // inside: Prism.languages.php, + // }, + // }, + // }, + // }); + + // Object.assign(Prism.languages.blade['template-variable'].inside.rest.inside, { + // 'template-variable': Prism.languages.blade['template-variable'], + // 'template-variable-raw': Prism.languages.blade['template-variable-raw'], + // }); + + // Prism.languages.blade['directive-params'] = { + // pattern: /(@[\w]+)(?:\(((?:[^()"]|"[^"]*")*)\))?/, + // inside: { + // directive: { + // pattern: /@[\w]+/, + // alias: 'keyword', + // }, + // punctuation: /[()]/, + // params: { + // pattern: /[\s\S]+/, + // alias: 'php', + // inside: Prism.languages.php, + // }, + // }, + // }; + + // Prism.languages['blade-php'] = Prism.languages.blade; + // })(Prism); + + (function (Prism) { + Prism.languages.blade = { + comment: /{{--([\s\S]*?)--}}/, + + // Blade directives + directive: { + pattern: /@\w+(?:::\w+)?(?:\s*\([\s\S]*?\))?/, + inside: { + keyword: /@\w+/, + function: /[:]\w+/, + punctuation: /[():]/, + }, + }, + + // Echo statements + echo: { + pattern: /\{{2,3}[\s\S]*?\}{2,3}/, + inside: { + delimiter: /^\{{2,3}|\}{2,3}$/, + php: { + pattern: /[\s\S]+/, + inside: Prism.languages.php, + }, + }, + }, + + // Raw PHP + php: { + pattern: /(?:\@php[\s\S]*?\@endphp|\<\?php[\s\S]*?\?\>)/, + inside: { + delimiter: { + pattern: /^\@php|\@endphp|\<\?php|\?\>$/, + alias: 'important', + }, + php: { + pattern: /[\s\S]+/, + inside: Prism.languages.php, + }, + }, + }, + + // HTML markup + markup: { + pattern: /<[^?]\/?(.*?)>/, + inside: Prism.languages.markup, + }, + + // Keywords for common Blade directives + keyword: + /\b(?:@if|@else|@elseif|@endif|@foreach|@endforeach|@for|@endfor|@while|@endwhile|@unless|@endunless|@isset|@endisset|@empty|@endempty|@switch|@case|@break|@default|@endswitch|@include|@extends|@section|@endsection|@yield|@stack|@push|@endpush|@auth|@guest|@endauth|@endguest)\b/, + + // Blade variables + variable: /\$\w+/, + + // Operators + operator: /=>|->|\|\||&&|!=|==|<=|>=|[+\-*\/%<>]=?|\?:/, + + // Punctuation + punctuation: /[\[\](){}:;,]/, + }; + + // Add alias for Blade files + Prism.languages.blade_php = Prism.languages.blade; + })(Prism); +} diff --git a/src/plugins/rehype/rehypeSyntaxHighlighting.ts b/src/plugins/rehype/rehypeSyntaxHighlighting.ts index c5a1f2e..f33a2c7 100644 --- a/src/plugins/rehype/rehypeSyntaxHighlighting.ts +++ b/src/plugins/rehype/rehypeSyntaxHighlighting.ts @@ -6,6 +6,10 @@ import type { Node } from 'unist'; import { Parent } from 'unist'; import { visit } from 'unist-util-visit'; +import blade from '../../lib/syntaxHighlighting/blade.js'; + +refractor.register(blade); + export type RehypeSyntaxHighlightingOptions = { ignoreMissing?: boolean; alias?: Record; From acf3ba4da81b782aa8be77cddc598380f2edbf82 Mon Sep 17 00:00:00 2001 From: "Kaishan (Sam) Ding" Date: Mon, 9 Dec 2024 18:02:59 -0800 Subject: [PATCH 2/3] remove comments --- src/lib/syntaxHighlighting/blade.js | 85 ----------------------------- 1 file changed, 85 deletions(-) diff --git a/src/lib/syntaxHighlighting/blade.js b/src/lib/syntaxHighlighting/blade.js index 0da3947..b689557 100644 --- a/src/lib/syntaxHighlighting/blade.js +++ b/src/lib/syntaxHighlighting/blade.js @@ -14,91 +14,6 @@ export default function blade(Prism) { Prism.register(refractorMarkup); Prism.register(refractorPhp); - // (function (Prism) { - // Prism.languages.blade = Prism.languages.extend('markup', {}); - - // Object.assign(Prism.languages.blade, { - // comment: { - // pattern: /{{--.+?--}}/s, - // }, - - // 'template-variable': { - // pattern: /{{[\s\S]*?}}/, - // inside: { - // delimiter: { - // pattern: /^{{|}}$/, - // alias: 'punctuation', - // }, - // rest: { - // pattern: /[\s\S]+/, - // alias: 'php', - // inside: Prism.languages.php, - // }, - // }, - // }, - - // 'template-variable-raw': { - // pattern: /{!![\s\S]*?!!}/, - // inside: { - // delimiter: { - // pattern: /^{!!|!!}$/, - // alias: 'punctuation', - // }, - // rest: { - // pattern: /[\s\S]+/, - // alias: 'php', - // inside: Prism.languages.php, - // }, - // }, - // }, - // 'template-tag': [ - // { - // pattern: /@(?:php|endphp)/, - // alias: 'keyword', - // }, - // { - // pattern: /@[\w]+/, - // alias: 'keyword', - // }, - // ], - - // 'php-block': { - // pattern: /(@php\s*)([\s\S]*?)(@endphp)/, - // lookbehind: true, - // inside: { - // rest: { - // pattern: /[\s\S]+/, - // alias: 'php', - // inside: Prism.languages.php, - // }, - // }, - // }, - // }); - - // Object.assign(Prism.languages.blade['template-variable'].inside.rest.inside, { - // 'template-variable': Prism.languages.blade['template-variable'], - // 'template-variable-raw': Prism.languages.blade['template-variable-raw'], - // }); - - // Prism.languages.blade['directive-params'] = { - // pattern: /(@[\w]+)(?:\(((?:[^()"]|"[^"]*")*)\))?/, - // inside: { - // directive: { - // pattern: /@[\w]+/, - // alias: 'keyword', - // }, - // punctuation: /[()]/, - // params: { - // pattern: /[\s\S]+/, - // alias: 'php', - // inside: Prism.languages.php, - // }, - // }, - // }; - - // Prism.languages['blade-php'] = Prism.languages.blade; - // })(Prism); - (function (Prism) { Prism.languages.blade = { comment: /{{--([\s\S]*?)--}}/, From a385049ffe6b64b805c936ab45e90cac4087af59 Mon Sep 17 00:00:00 2001 From: "Kaishan (Sam) Ding" Date: Mon, 9 Dec 2024 18:52:41 -0800 Subject: [PATCH 3/3] remove blade_php --- src/lib/syntaxHighlighting/blade.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/lib/syntaxHighlighting/blade.js b/src/lib/syntaxHighlighting/blade.js index b689557..40fa4bd 100644 --- a/src/lib/syntaxHighlighting/blade.js +++ b/src/lib/syntaxHighlighting/blade.js @@ -8,7 +8,6 @@ import refractorMarkup from 'refractor/lang/markup.js'; import refractorPhp from 'refractor/lang/php.js'; blade.displayName = 'blade'; -blade.aliases = ['blade_php']; export default function blade(Prism) { Prism.register(refractorMarkup); @@ -18,7 +17,6 @@ export default function blade(Prism) { Prism.languages.blade = { comment: /{{--([\s\S]*?)--}}/, - // Blade directives directive: { pattern: /@\w+(?:::\w+)?(?:\s*\([\s\S]*?\))?/, inside: { @@ -28,7 +26,6 @@ export default function blade(Prism) { }, }, - // Echo statements echo: { pattern: /\{{2,3}[\s\S]*?\}{2,3}/, inside: { @@ -40,7 +37,6 @@ export default function blade(Prism) { }, }, - // Raw PHP php: { pattern: /(?:\@php[\s\S]*?\@endphp|\<\?php[\s\S]*?\?\>)/, inside: { @@ -55,27 +51,19 @@ export default function blade(Prism) { }, }, - // HTML markup markup: { pattern: /<[^?]\/?(.*?)>/, inside: Prism.languages.markup, }, - // Keywords for common Blade directives keyword: /\b(?:@if|@else|@elseif|@endif|@foreach|@endforeach|@for|@endfor|@while|@endwhile|@unless|@endunless|@isset|@endisset|@empty|@endempty|@switch|@case|@break|@default|@endswitch|@include|@extends|@section|@endsection|@yield|@stack|@push|@endpush|@auth|@guest|@endauth|@endguest)\b/, - // Blade variables variable: /\$\w+/, - // Operators operator: /=>|->|\|\||&&|!=|==|<=|>=|[+\-*\/%<>]=?|\?:/, - // Punctuation punctuation: /[\[\](){}:;,]/, }; - - // Add alias for Blade files - Prism.languages.blade_php = Prism.languages.blade; })(Prism); }