Пример #1
0
        private IMarkdownFlavorPublishHandler GetFlavorHandler(ITextBuffer textBuffer)
        {
            MarkdownFlavor flavor = MdFlavor.FromTextBuffer(textBuffer);
            IMarkdownFlavorPublishHandler value = null;

            if (_flavorHandlers.TryGetValue(flavor, out value))
            {
                return(value);
            }

            return(null); // new MdPublishHandler();
        }
Пример #2
0
        private bool IsFormatSupported()
        {
            IMarkdownFlavorPublishHandler flavorHandler = GetFlavorHandler(TextView.TextBuffer);

            if (flavorHandler != null)
            {
                if (flavorHandler.FormatSupported(Format))
                {
                    return(true);
                }
            }
            return(false);
        }
Пример #3
0
        public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg)
        {
            if (!TaskAvailable())
            {
                return(CommandResult.Disabled);
            }

            IMarkdownFlavorPublishHandler flavorHandler = GetFlavorHandler(TextView.TextBuffer);

            if (flavorHandler == null)
            {
                return(CommandResult.Disabled);
            }

            var workflow = _workflowProvider.GetOrCreate();

            _lastCommandTask = Task.Run(async() => {
                // Get list of installed packages and verify that all the required ones are installed
                var packages = await workflow.Packages.GetInstalledPackagesAsync();
                if (packages.Any(p => p.Package.EqualsIgnoreCase(flavorHandler.RequiredPackageName)))
                {
                    // Text buffer operations should be performed in UI thread
                    await Services.MainThread().SwitchToAsync();
                    if (await CheckPrerequisitesAsync())
                    {
                        var textBuffer = SaveFile();
                        if (textBuffer != null)
                        {
                            var inputFilePath = textBuffer.GetFilePath();
                            _outputFilePath   = Path.ChangeExtension(inputFilePath, FileExtension);

                            try {
                                _fs.DeleteFile(_outputFilePath);
                            } catch (IOException ex) {
                                Services.UI().ShowErrorMessage(ex.Message);
                                return;
                            }

                            var session = workflow.RSession;
                            await flavorHandler.PublishAsync(session, Services, inputFilePath, _outputFilePath, Format, textBuffer.GetEncoding()).ContinueWith(t => LaunchViewer());
                        }
                    }
                }
                else
                {
                    await Services.ShowErrorMessageAsync(Resources.Error_PackageMissing.FormatInvariant(flavorHandler.RequiredPackageName));
                }
            });

            return(CommandResult.Executed);
        }
Пример #4
0
        public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg)
        {
            if (!TaskAvailable())
            {
                return(CommandResult.Disabled);
            }

            IMarkdownFlavorPublishHandler flavorHandler = GetFlavorHandler(TextView.TextBuffer);

            if (flavorHandler != null)
            {
                if (!InstallPackages.IsInstalled(flavorHandler.RequiredPackageName, 5000, RToolsSettings.Current.RBasePath))
                {
                    VsAppShell.Current.ShowErrorMessage(string.Format(CultureInfo.InvariantCulture, Resources.Error_PackageMissing, flavorHandler.RequiredPackageName));
                    return(CommandResult.Disabled);
                }

                // Save the file
                TextView.TextBuffer.Save();
                var inputFilePath = TextView.TextBuffer.GetFilePath();

                var buffer = new StringBuilder(NativeMethods.MAX_PATH);
                NativeMethods.GetShortPathName(inputFilePath, buffer, NativeMethods.MAX_PATH);

                inputFilePath   = buffer.ToString();
                _outputFilePath = Path.ChangeExtension(inputFilePath, FileExtension);

                try {
                    File.Delete(_outputFilePath);
                } catch (IOException ex) {
                    PublishLog.Current.WriteFormatAsync(MessageCategory.Error, Resources.Error_CannotDeleteFile, _outputFilePath, ex.Message);
                    return(CommandResult.Executed);
                }

                inputFilePath = inputFilePath.Replace('\\', '/');
                string outputFilePath = _outputFilePath.Replace('\\', '/');

                string arguments = flavorHandler.GetCommandLine(inputFilePath, outputFilePath, Format);

                _lastCommand = RCommand.ExecuteRExpressionAsync(arguments, PublishLog.Current, RToolsSettings.Current.RBasePath);
                _lastCommand.Task.ContinueWith((Task t) => LaunchViewer(t));
            }
            return(CommandResult.Executed);
        }
Пример #5
0
        public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg)
        {
            if (!TaskAvailable())
            {
                return(CommandResult.Disabled);
            }

            IMarkdownFlavorPublishHandler flavorHandler = GetFlavorHandler(TextView.TextBuffer);

            if (flavorHandler == null)
            {
                return(CommandResult.Disabled);
            }

            var workflow = _workflowProvider.GetOrCreate();

            _lastCommandTask = Task.Run(async() => {
                // Get list of installed packages and verify that all the required ones are installed
                var packages = await workflow.Packages.GetInstalledPackagesAsync();
                if (packages.Any(p => p.Package.EqualsIgnoreCase(flavorHandler.RequiredPackageName)) && CheckPrerequisites())
                {
                    // Text buffer operations should be performed in UI thread
                    await _coreShell.SwitchToMainThreadAsync();

                    // Save the file
                    var document = EditorExtensions.FindInProjectedBuffers <MdEditorDocument>(TextView.TextBuffer, MdContentTypeDefinition.ContentType);
                    var tb       = document.TextBuffer;
                    if (!tb.CanBeSavedInCurrentEncoding())
                    {
                        if (MessageButtons.No == _coreShell.ShowMessage(Resources.Warning_SaveInUtf8, MessageButtons.YesNo))
                        {
                            return;
                        }
                        tb.Save(new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
                    }
                    else
                    {
                        tb.Save();
                    }

                    var inputFilePath = tb.GetFilePath();
                    _outputFilePath   = Path.ChangeExtension(inputFilePath, FileExtension);

                    try {
                        _fs.DeleteFile(_outputFilePath);
                    } catch (IOException ex) {
                        _coreShell.ShowErrorMessage(ex.Message);
                        return;
                    }

                    var session = workflow.RSession;
                    await flavorHandler.PublishAsync(session, _coreShell, _fs, inputFilePath, _outputFilePath, Format, tb.GetEncoding()).ContinueWith(t => LaunchViewer());
                }
                else
                {
                    _coreShell.ShowErrorMessage(string.Format(CultureInfo.InvariantCulture, Resources.Error_PackageMissing, flavorHandler.RequiredPackageName));
                }
            });

            return(CommandResult.Executed);
        }