@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>
63 lines (53 loc) • 1.32 kB
text/typescript
import { Language, LanguageConfig } from '@ryusei/code';
import { CATEGORY_COMMENT, css as _css } from '@ryusei/light';
import { Lexer } from '../../core/Lexer/Lexer';
import { assign } from '../../utils';
/**
* Returns a CSS Language object.
*
* @since 0.1.0
*
* @return A Language object.
*/
export function css(): Language {
const language = _css();
return assign( { id: language.id, language, lexer: new Lexer( language ) }, cssConfig() );
}
/**
* Returns a CSS LanguageConfig object.
*
* @private
* @since 0.1.0
*
* @return A LanguageConfig object.
*/
export function cssConfig(): LanguageConfig {
const scope = [ '!comment', '!string' ];
const bracketsCompletionData = {
close : scope,
skip : scope,
remove: scope,
};
const quotesCompletionData = {
close : '@quotes',
skip : '@quotes',
remove: '@quotes',
};
return {
lineComment : [ '/*', '*/' ],
blockComment: [ '/*', '*/' ],
multiline: [
[ '/*', '*/', CATEGORY_COMMENT ],
],
indent: [
[ /{$/, /^}/, scope ],
],
autoClose: [
[ '(', ')', bracketsCompletionData ],
[ '[', ']', bracketsCompletionData ],
[ '{', '}', bracketsCompletionData ],
[ "'", "'", quotesCompletionData ],
[ '"', '"', quotesCompletionData ],
],
};
}