@analogjs/content
Version:
Content Rendering for Analog
86 lines (80 loc) • 3.83 kB
JavaScript
import { MarkedContentHighlighter, ContentRenderer, NoopContentRenderer } from '@analogjs/content';
import * as i0 from '@angular/core';
import { Injectable } from '@angular/core';
import { markedHighlight } from 'marked-highlight';
import 'prismjs';
import 'prismjs/plugins/toolbar/prism-toolbar';
import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
class PrismHighlighter extends MarkedContentHighlighter {
augmentCodeBlock(code, lang) {
const classes = lang.startsWith('diff') && Prism.languages['diff']
? `language-${lang} diff-highlight`
: `language-${lang.replace('diff-', '')}`;
return `<pre class="${classes}"><code class="${classes}">${code}</code></pre>`;
}
getHighlightExtension() {
return markedHighlight({
async: true,
highlight: (code, lang) => {
let diff = lang?.startsWith('diff-');
lang = diff ? lang.replace('diff-', '') : lang || 'typescript';
if (diff && !Prism.languages['diff']) {
diff = false;
console.warn(`Notice:
---------------------------------------------------------------------------------------
The \`diff\` language and plugin are not available in the provided setup.
To enable it, add the following imports your \`app.config.ts\`:
import 'prismjs/components/prism-diff';
import 'prismjs/plugins/diff-highlight/prism-diff-highlight';
---------------------------------------------------------------------------------------
`);
}
if (!Prism.languages[lang]) {
if (lang !== 'mermaid') {
console.warn(`Notice:
---------------------------------------------------------------------------------------
The requested language '${lang}' is not available in the provided setup.
To enable it, add the following import your \`app.config.ts\`:
import 'prismjs/components/prism-${lang}';
---------------------------------------------------------------------------------------
`);
}
return code;
}
return Prism.highlight(code, diff ? Prism.languages['diff'] : Prism.languages[lang], lang);
},
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: PrismHighlighter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: PrismHighlighter }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: PrismHighlighter, decorators: [{
type: Injectable
}] });
;
(function () {
if (typeof Prism === 'undefined') {
return;
}
Prism.languages.angular = Prism.languages.extend('markup', {
keyword: /(?:@if|@for|@switch|@defer|@loading|@error|@placeholder|prefetch)\b/,
operator: /\b(?:on|when)\b/,
number: {
pattern: /\b(minimum|after)\s+\d+(?:s|ms|)/gi,
lookbehind: true,
},
builtin: {
pattern: /\b(?:viewport|timer|minimum|after|hover|idle|immediate|interaction)/,
},
function: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
});
Prism.languages.ng = Prism.languages.angular;
})();
function withPrismHighlighter() {
return [{ provide: ContentRenderer, useClass: NoopContentRenderer }];
}
/**
* Generated bundle index. Do not edit.
*/
export { PrismHighlighter, withPrismHighlighter };
//# sourceMappingURL=analogjs-content-prism-highlighter.mjs.map