Files
azuredatastudio/extensions/markdown/src/markdownExtensions.ts
Karl Burtram 251ae01c3e Initial VS Code 1.19 source merge (#571)
* Initial 1.19 xcopy

* Fix yarn build

* Fix numerous build breaks

* Next batch of build break fixes

* More build break fixes

* Runtime breaks

* Additional post merge fixes

* Fix windows setup file

* Fix test failures.

* Update license header blocks to refer to source eula
2018-01-28 23:37:17 -08:00

87 lines
2.4 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
import * as path from 'path';
import { MDDocumentContentProvider } from './features/previewContentProvider';
import { MarkdownEngine } from './markdownEngine';
const resolveExtensionResources = (extension: vscode.Extension<any>, stylePath: string): vscode.Uri => {
const resource = vscode.Uri.parse(stylePath);
if (resource.scheme) {
return resource;
}
return vscode.Uri.file(path.join(extension.extensionPath, stylePath));
};
export function loadMarkdownExtensions(
contentProvider: MDDocumentContentProvider,
engine: MarkdownEngine
) {
for (const extension of vscode.extensions.all) {
const contributes = extension.packageJSON && extension.packageJSON.contributes;
if (!contributes) {
continue;
}
tryLoadPreviewStyles(contributes, contentProvider, extension);
tryLoadPreviewScripts(contributes, contentProvider, extension);
tryLoadMarkdownItPlugins(contributes, extension, engine);
}
}
function tryLoadMarkdownItPlugins(
contributes: any,
extension: vscode.Extension<any>,
engine: MarkdownEngine
) {
if (contributes['markdown.markdownItPlugins']) {
extension.activate().then(() => {
if (extension.exports && extension.exports.extendMarkdownIt) {
engine.addPlugin((md: any) => extension.exports.extendMarkdownIt(md));
}
});
}
}
function tryLoadPreviewScripts(
contributes: any,
contentProvider: MDDocumentContentProvider,
extension: vscode.Extension<any>
) {
const scripts = contributes['markdown.previewScripts'];
if (scripts && Array.isArray(scripts)) {
for (const script of scripts) {
try {
contentProvider.addScript(resolveExtensionResources(extension, script));
}
catch (e) {
// noop
}
}
}
}
function tryLoadPreviewStyles(
contributes: any,
contentProvider: MDDocumentContentProvider,
extension: vscode.Extension<any>
) {
const styles = contributes['markdown.previewStyles'];
if (styles && Array.isArray(styles)) {
for (const style of styles) {
try {
contentProvider.addStyle(resolveExtensionResources(extension, style));
}
catch (e) {
// noop
}
}
}
}