2017-10-12 00:01:37 +03:00
|
|
|
import * as Prism from 'prismjs';
|
2018-05-14 09:51:57 +03:00
|
|
|
import 'prismjs/components/prism-clike.js';
|
2018-01-22 21:30:53 +03:00
|
|
|
import 'prismjs/components/prism-bash.js';
|
2017-10-12 00:01:37 +03:00
|
|
|
import 'prismjs/components/prism-c.js';
|
2018-01-22 21:30:53 +03:00
|
|
|
import 'prismjs/components/prism-coffeescript.js';
|
2017-10-12 00:01:37 +03:00
|
|
|
import 'prismjs/components/prism-cpp.js';
|
|
|
|
import 'prismjs/components/prism-csharp.js';
|
|
|
|
import 'prismjs/components/prism-go.js';
|
|
|
|
import 'prismjs/components/prism-java.js';
|
|
|
|
import 'prismjs/components/prism-lua.js';
|
2018-01-22 21:30:53 +03:00
|
|
|
import 'prismjs/components/prism-markup.js'; // xml
|
|
|
|
import 'prismjs/components/prism-objectivec.js';
|
2017-10-12 00:01:37 +03:00
|
|
|
import 'prismjs/components/prism-perl.js';
|
2018-05-14 09:51:57 +03:00
|
|
|
import 'prismjs/components/prism-markup-templating.js'; // dep of php
|
2018-01-22 21:30:53 +03:00
|
|
|
import 'prismjs/components/prism-php.js';
|
2017-10-12 00:01:37 +03:00
|
|
|
import 'prismjs/components/prism-python.js';
|
|
|
|
import 'prismjs/components/prism-ruby.js';
|
|
|
|
import 'prismjs/components/prism-scala.js';
|
2018-01-22 21:30:53 +03:00
|
|
|
import 'prismjs/components/prism-swift.js';
|
2017-10-12 00:01:37 +03:00
|
|
|
|
2018-01-09 20:00:17 +03:00
|
|
|
import { injectGlobal } from '../styled-components';
|
|
|
|
|
|
|
|
import prismStyles from 'prismjs/themes/prism-dark.css'; // dark theme
|
|
|
|
injectGlobal`${prismStyles}`;
|
2017-10-12 00:01:37 +03:00
|
|
|
|
|
|
|
const DEFAULT_LANG = 'clike';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* map language names to Prism.js names
|
|
|
|
*/
|
2017-11-14 13:54:08 +03:00
|
|
|
export function mapLang(lang: string): string {
|
2017-10-12 00:01:37 +03:00
|
|
|
return (
|
|
|
|
{
|
|
|
|
json: 'js',
|
|
|
|
'c++': 'cpp',
|
|
|
|
'c#': 'csharp',
|
|
|
|
'objective-c': 'objectivec',
|
|
|
|
shell: 'bash',
|
|
|
|
viml: 'vim',
|
|
|
|
}[lang] || DEFAULT_LANG
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Highlight source code string using Prism.js
|
|
|
|
* @param source source code to highlight
|
|
|
|
* @param lang highlight language
|
|
|
|
* @return highlighted souce code as **html string**
|
|
|
|
*/
|
|
|
|
export function highlight(source: string, lang: string): string {
|
|
|
|
let grammar = Prism.languages[lang];
|
|
|
|
if (!grammar) {
|
|
|
|
grammar = Prism.languages[mapLang(lang)];
|
|
|
|
}
|
|
|
|
return Prism.highlight(source, grammar);
|
|
|
|
}
|