public static string getReorderTypeText(ReorderType rd) { if (rd == ReorderType.Fixed) { return("Fixed Reorder Qty"); } else if (rd == ReorderType.MinMax) { return("Minimum & Maximum Qty"); } else { return("By Order"); } }
private void MenuItemCallback(ReorderType type) { try { //////////////////////// /// Reorder parser productions. //////////////////////// if (!(((IServiceProvider)ServiceProvider).GetService(typeof(VsTextManagerClass)) is IVsTextManager manager)) { return; } manager.GetActiveView(1, null, out IVsTextView view); if (view == null) { return; } view.GetCaretPos(out int l, out int c); view.GetBuffer(out IVsTextLines buf); if (buf == null) { return; } ITextBuffer buffer = AntlrLanguageClient.AdaptersFactory.GetWpfTextView(view)?.TextBuffer; string ffn = buffer.GetFFN(); if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); if (document == null) { return; } AntlrLanguageClient.CMReorderParserRules(ffn, type); } catch (Exception exception) { Logger.Log.Notify(exception.StackTrace); } }
/// <summary> /// Initializes a new instance of the <see cref="ReorderEdgeCommand"/> class. /// </summary> /// <param name="edgeModel">The edge to reorder.</param> /// <param name="type">The reorder operation to apply.</param> public ReorderEdgeCommand(IEdgeModel edgeModel, ReorderType type) : this() { EdgeModel = edgeModel; Type = type; switch (Type) { case ReorderType.MoveFirst: UndoString = "Move Edge First"; break; case ReorderType.MoveUp: UndoString = "Move Edge Up"; break; case ReorderType.MoveDown: UndoString = "Move Edge Down"; break; case ReorderType.MoveLast: UndoString = "Move Edge Last"; break; } }
private void MenuItemCallback(object sender, EventArgs e, ReorderType type) { try { //////////////////////// /// Reorder parser productions. //////////////////////// IVsTextManager manager = ((IServiceProvider)ServiceProvider).GetService(typeof(VsTextManagerClass)) as IVsTextManager; if (manager == null) { return; } manager.GetActiveView(1, null, out IVsTextView view); if (view == null) { return; } view.GetCaretPos(out int l, out int c); view.GetBuffer(out IVsTextLines buf); if (buf == null) { return; } IWpfTextView xxx = AntlrLanguageClient.AdaptersFactory.GetWpfTextView(view); ITextBuffer buffer = xxx.TextBuffer; string ffn = buffer.GetFFN().Result; if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); if (document == null) { return; } int pos = LanguageServer.Module.GetIndex(l, c, document); AntlrLanguageClient alc = AntlrLanguageClient.Instance; if (alc == null) { return; } Dictionary <string, string> changes = alc.CMReorderParserRulesServer(ffn, pos, type); foreach (var pair in changes) { string fn = pair.Key; Workspaces.Document dd = Workspaces.Workspace.Instance.FindDocument(fn); if (dd == null) { return; } string new_code = pair.Value; var edit = buffer.CreateEdit(); var diff = new LanguageServer.diff_match_patch(); var diffs = diff.diff_main(document.Code, new_code); var patch = diff.patch_make(diffs); //patch.Reverse(); // Start edit session. int times = 0; int delta = 0; foreach (var p in patch) { times++; var start = p.start1 - delta; var offset = 0; foreach (var ed in p.diffs) { if (ed.operation == LanguageServer.Operation.EQUAL) { // Let's verify that. var len = ed.text.Length; var tokenSpan = new SnapshotSpan(buffer.CurrentSnapshot, new Span(start + offset, len)); var tt = tokenSpan.GetText(); if (ed.text != tt) { } offset = offset + len; } else if (ed.operation == LanguageServer.Operation.DELETE) { var len = ed.text.Length; var tokenSpan = new SnapshotSpan(buffer.CurrentSnapshot, new Span(start + offset, len)); var tt = tokenSpan.GetText(); if (ed.text != tt) { } var sp = new Span(start + offset, len); offset = offset + len; edit.Delete(sp); } else if (ed.operation == LanguageServer.Operation.INSERT) { var len = ed.text.Length; edit.Insert(start + offset, ed.text); } } delta = delta + (p.length2 - p.length1); } edit.Apply(); } } catch (Exception exception) { Logger.Log.Notify(exception.StackTrace); } }
public Dictionary <string, string> CMReorderParserRulesServer(string ffn, int pos, ReorderType reorder_type) { try { if (_rpc == null) { return(null); } CMReorderParserRulesParams p = new CMReorderParserRulesParams(); Uri uri = new Uri(ffn); p.TextDocument = uri; p.Pos = pos; p.Type = reorder_type; Dictionary <string, string> result = _rpc.InvokeAsync <Dictionary <string, string> >("CMReorderParserRules", p).Result; return(result); } catch (Exception) { } return(null); }