/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as nls from '../../../../vs/nls'; import { Emitter, Event } from '../../../../vs/base/common/event'; import { LanguageId, LanguageIdentifier, } from '../../../../vs/editor/common/modes'; import { LanguageConfigurationRegistry } from '../../../../vs/editor/common/modes/languageConfigurationRegistry'; import { ILanguageExtensionPoint } from '../../../../vs/editor/common/services/modeService'; import { Registry } from '../../../../vs/platform/registry/common/platform'; import { IDisposable } from '../../../../vs/base/common/lifecycle'; // Define extension point ids export const Extensions = { ModesRegistry: 'editor.modesRegistry', }; export class EditorModesRegistry { private readonly _languages: ILanguageExtensionPoint[]; private _dynamicLanguages: ILanguageExtensionPoint[]; private readonly _onDidChangeLanguages = new Emitter(); public readonly onDidChangeLanguages: Event = this._onDidChangeLanguages.event; constructor() { this._languages = []; this._dynamicLanguages = []; } // --- languages public registerLanguage(def: ILanguageExtensionPoint): IDisposable { this._languages.push(def); this._onDidChangeLanguages.fire(undefined); return { dispose: () => { for (let i = 0, len = this._languages.length; i < len; i++) { if (this._languages[i] === def) { this._languages.splice(i, 1); return; } } }, }; } public getLanguages(): ILanguageExtensionPoint[] { return ([]) .concat(this._languages) .concat(this._dynamicLanguages); } } export const ModesRegistry = new EditorModesRegistry(); Registry.add(Extensions.ModesRegistry, ModesRegistry); export const PLAINTEXT_MODE_ID = 'plaintext'; export const PLAINTEXT_EXTENSION = '.txt'; export const PLAINTEXT_LANGUAGE_IDENTIFIER = new LanguageIdentifier( PLAINTEXT_MODE_ID, LanguageId.PlainText ); ModesRegistry.registerLanguage({ id: PLAINTEXT_MODE_ID, extensions: [PLAINTEXT_EXTENSION], aliases: [nls.localize('plainText.alias', 'Plain Text'), 'text'], mimetypes: ['text/plain'], }); LanguageConfigurationRegistry.register( PLAINTEXT_LANGUAGE_IDENTIFIER, { brackets: [ ['(', ')'], ['[', ']'], ['{', '}'], ], surroundingPairs: [ { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' }, { open: '<', close: '>' }, { open: '"', close: '"' }, { open: "'", close: "'" }, { open: '`', close: '`' }, ], folding: { offSide: true, }, }, 0 );