@ryusei/code
Version:
<div align="center"> <a href="https://code.ryuseijs.com"> <img alt="RyuseiCode" src="https://code.ryuseijs.com/images/svg/logo.svg" width="70"> </a>
67 lines (59 loc) • 1.41 kB
text/typescript
import { Language, LanguageConfig } from '@ryusei/code';
import { vue as _vue } from '@ryusei/light';
import { Lexer } from '../../core/Lexer/Lexer';
import { assign } from '../../utils';
import { css } from '../css/css';
import { htmlConfig, HtmlOptions } from '../html/html';
import { javascript } from '../javascript/javascript';
/**
* The Vue language options.
*
* @since 0.0.12
*/
export interface VueOptions extends HtmlOptions {}
/**
* Returns a Vue Language object.
*
* @since 0.1.0
*
* @return A Language object.
*/
export function vue( options: VueOptions = {} ): Language {
const script = options.script || {
language: javascript(),
use: {
config: javascript(),
code : '<script>',
depth : 2,
},
};
const style = options.style || {
language: css(),
use: {
config: css(),
code : '<style>',
depth : 2,
},
};
const language = _vue( { script: () => script.language.language, style: () => style.language.language } );
return assign( {
id: language.id,
language,
lexer: new Lexer( language ),
use: {
[ script.language.id ]: script.use,
[ style.language.id ] : style.use,
},
}, vueConfig() );
}
/**
* Returns a Vue LanguageConfig object.
*
* @private
* @since 0.1.0
*
* @return A LanguageConfig object.
*/
export function vueConfig(): LanguageConfig {
return htmlConfig();
}