UNPKG

4.2 kBJavaScriptView Raw
1"use strict";
2// *****************************************************************************
3// Copyright (C) 2020 TypeFox and others.
4//
5// This program and the accompanying materials are made available under the
6// terms of the Eclipse Public License v. 2.0 which is available at
7// http://www.eclipse.org/legal/epl-2.0.
8//
9// This Source Code may also be made available under the following Secondary
10// Licenses when the conditions for such availability set forth in the Eclipse
11// Public License v. 2.0 are satisfied: GNU General Public License, version 2
12// with the GNU Classpath Exception which is available at
13// https://www.gnu.org/software/classpath/license.html.
14//
15// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16// *****************************************************************************
17/*---------------------------------------------------------------------------------------------
18 * Copyright (c) Microsoft Corporation. All rights reserved.
19 * Licensed under the MIT License. See License.txt in the project root for license information.
20 *--------------------------------------------------------------------------------------------*/
21Object.defineProperty(exports, "__esModule", { value: true });
22exports.EncodingRegistry = void 0;
23const tslib_1 = require("tslib");
24// based on https://github.com/microsoft/vscode/blob/04c36be045a94fee58e5f8992d3e3fd980294a84/src/vs/workbench/services/textfile/browser/textFileService.ts#L491
25const inversify_1 = require("inversify");
26const disposable_1 = require("../common/disposable");
27const core_preferences_1 = require("./core-preferences");
28const encoding_service_1 = require("../common/encoding-service");
29const encodings_1 = require("../common/encodings");
30let EncodingRegistry = class EncodingRegistry {
31 constructor() {
32 this.encodingOverrides = [];
33 }
34 registerOverride(override) {
35 this.encodingOverrides.push(override);
36 return disposable_1.Disposable.create(() => {
37 const index = this.encodingOverrides.indexOf(override);
38 if (index !== -1) {
39 this.encodingOverrides.splice(index, 1);
40 }
41 });
42 }
43 getEncodingForResource(resource, preferredEncoding) {
44 let fileEncoding;
45 const override = this.getEncodingOverride(resource);
46 if (override) {
47 fileEncoding = override; // encoding override always wins
48 }
49 else if (preferredEncoding) {
50 fileEncoding = preferredEncoding; // preferred encoding comes second
51 }
52 else {
53 fileEncoding = this.preferences.get('files.encoding', undefined, resource.toString());
54 }
55 if (!fileEncoding || !this.encodingService.exists(fileEncoding)) {
56 return encodings_1.UTF8; // the default is UTF 8
57 }
58 return this.encodingService.toIconvEncoding(fileEncoding);
59 }
60 getEncodingOverride(resource) {
61 if (this.encodingOverrides && this.encodingOverrides.length) {
62 for (const override of this.encodingOverrides) {
63 if (override.parent && resource.isEqualOrParent(override.parent)) {
64 return override.encoding;
65 }
66 if (override.extension && resource.path.ext === `.${override.extension}`) {
67 return override.encoding;
68 }
69 if (override.scheme && override.scheme === resource.scheme) {
70 return override.encoding;
71 }
72 }
73 }
74 return undefined;
75 }
76};
77(0, tslib_1.__decorate)([
78 (0, inversify_1.inject)(core_preferences_1.CorePreferences),
79 (0, tslib_1.__metadata)("design:type", Object)
80], EncodingRegistry.prototype, "preferences", void 0);
81(0, tslib_1.__decorate)([
82 (0, inversify_1.inject)(encoding_service_1.EncodingService),
83 (0, tslib_1.__metadata)("design:type", encoding_service_1.EncodingService)
84], EncodingRegistry.prototype, "encodingService", void 0);
85EncodingRegistry = (0, tslib_1.__decorate)([
86 (0, inversify_1.injectable)()
87], EncodingRegistry);
88exports.EncodingRegistry = EncodingRegistry;
89//# sourceMappingURL=encoding-registry.js.map
\No newline at end of file