_.contribution.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. import { languages } from './fillers/monaco-editor-core.js';
  6. var languageDefinitions = {};
  7. var lazyLanguageLoaders = {};
  8. var LazyLanguageLoader = /** @class */ (function () {
  9. function LazyLanguageLoader(languageId) {
  10. var _this = this;
  11. this._languageId = languageId;
  12. this._loadingTriggered = false;
  13. this._lazyLoadPromise = new Promise(function (resolve, reject) {
  14. _this._lazyLoadPromiseResolve = resolve;
  15. _this._lazyLoadPromiseReject = reject;
  16. });
  17. }
  18. LazyLanguageLoader.getOrCreate = function (languageId) {
  19. if (!lazyLanguageLoaders[languageId]) {
  20. lazyLanguageLoaders[languageId] = new LazyLanguageLoader(languageId);
  21. }
  22. return lazyLanguageLoaders[languageId];
  23. };
  24. LazyLanguageLoader.prototype.whenLoaded = function () {
  25. return this._lazyLoadPromise;
  26. };
  27. LazyLanguageLoader.prototype.load = function () {
  28. var _this = this;
  29. if (!this._loadingTriggered) {
  30. this._loadingTriggered = true;
  31. languageDefinitions[this._languageId].loader().then(function (mod) { return _this._lazyLoadPromiseResolve(mod); }, function (err) { return _this._lazyLoadPromiseReject(err); });
  32. }
  33. return this._lazyLoadPromise;
  34. };
  35. return LazyLanguageLoader;
  36. }());
  37. export function loadLanguage(languageId) {
  38. return LazyLanguageLoader.getOrCreate(languageId).load();
  39. }
  40. export function registerLanguage(def) {
  41. var languageId = def.id;
  42. languageDefinitions[languageId] = def;
  43. languages.register(def);
  44. var lazyLanguageLoader = LazyLanguageLoader.getOrCreate(languageId);
  45. languages.setMonarchTokensProvider(languageId, lazyLanguageLoader.whenLoaded().then(function (mod) { return mod.language; }));
  46. languages.onLanguage(languageId, function () {
  47. lazyLanguageLoader.load().then(function (mod) {
  48. languages.setLanguageConfiguration(languageId, mod.conf);
  49. });
  50. });
  51. }