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(); }
private bool IsFormatSupported() { IMarkdownFlavorPublishHandler flavorHandler = GetFlavorHandler(TextView.TextBuffer); if (flavorHandler != null) { if (flavorHandler.FormatSupported(Format)) { return(true); } } return(false); }
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); }
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); }
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); }