remix-nlux
Version:
Remix IDE NLUX integration. Remix IDE is the leading IDE for building and deploying smart contracts on Ethereum. NLUX is a JavaScript and React library for building conversational AI experiences.
48 lines (39 loc) • 1.73 kB
text/typescript
import {CreateHighlighterOptions, Highlighter, HighlighterColorMode, HighlighterExtension} from '@nlux/core';
import hljs from 'highlight.js/lib/common';
import {warn} from '../../../../shared/src/utils/warn';
import {languageAliases} from '../highlightJs/languages';
const createExtension = (): HighlighterExtension => {
const defaultColorMode: HighlighterColorMode = 'dark';
let colorModeBeingUsed: HighlighterColorMode = defaultColorMode;
const setColorMode = (colorMode: HighlighterColorMode) => {
colorModeBeingUsed = colorMode;
};
for (const [alias, language] of Object.entries(languageAliases)) {
if (!hljs.getLanguage(language)) {
warn(`Language "${language}" is not registered to use with highlight.js.`);
} else {
hljs.registerAliases(alias, {
languageName: language,
});
}
}
const highlighterFunction: Highlighter = (code: string, language: string) => {
const languageToUse = hljs.getLanguage(language) ? language : 'plaintext';
const result = hljs.highlight(code, {
language: languageToUse,
ignoreIllegals: true,
});
return result.value;
};
return {
createHighlighter(options?: CreateHighlighterOptions): Highlighter {
const {colorMode} = options ?? {};
setColorMode(colorMode ?? defaultColorMode);
return highlighterFunction;
},
highlightingClass(language?: string): string {
return colorModeBeingUsed === 'light' ? 'highlighter-light' : 'highlighter-dark';
},
};
};
export const highlightJsExtension: HighlighterExtension = createExtension();