public override IPromise <CompletionContext> ShowCompletions(EditorWinForm control) { var length = control.Editor.Document.TextLength; var caret = control.Editor.CaretOffset; if (control.Editor.CaretOffset >= 2 && control.Editor.Document.GetText(control.Editor.CaretOffset - 2, 2) == "<!") { var context = new CompletionContext() { Items = new ICompletionData[] { new BasicCompletionData() { Text = "--", Content = "-- (Comment)", Action = () => "---->", CaretOffset = -3 }, new BasicCompletionData() { Text = "[CDATA[", Action = () => "[CDATA[]]>", CaretOffset = -3 } } }; control.ShowCompletionWindow(context.Items, context.Overlap); return(Promises.Resolved(context)); } else { return(this.GetCompletions(control.Document, control.Editor.CaretOffset, this.SoapAction) .ToPromise() .UiPromise(control) .Convert(data => { if (length != control.Editor.Document.TextLength || caret != control.Editor.CaretOffset) { ShowCompletions(control); return null; } if (data?.Items.Any() == true) { var items = data.Items.ToArray(); var contextItems = items.OfType <IContextCompletions>(); foreach (var contextItem in contextItems) { contextItem.SetContext(this, control); } control.ShowCompletionWindow(items, data.Overlap); } return data; })); } }
public Innovator.Client.IPromise <CompletionContext> ShowCompletions(EditorWinForm control) { var length = control.Editor.Document.TextLength; var caret = control.Editor.CaretOffset; var text = control.Editor.Text; return(_sql.Completions(text.Substring(0, caret), control.Document, caret, null) .UiPromise(control) .Convert(data => { if (length != control.Editor.Document.TextLength || caret != control.Editor.CaretOffset) { ShowCompletions(control); return null; } if (data.Items.Any()) { var items = data.Items.ToArray(); var contextItems = items.OfType <IContextCompletions>(); foreach (var contextItem in contextItems) { contextItem.SetContext(this, control); } control.ShowCompletionWindow(items, data.Overlap); } return data; })); }
public override Innovator.Client.IPromise <CompletionContext> ShowCompletions(EditorWinForm control) { var length = control.Editor.Document.TextLength; var caret = control.Editor.CaretOffset; var data = new CompletionContext(); if (caret > 0 && control.Editor.Document.GetCharAt(caret - 1) == '\\') { data.Items = _completionInfo .OrderBy(i => i[0].ToLowerInvariant()) .ThenBy(i => i[1]) .Select(i => new BasicCompletionData() { Content = FormatText.Span(FormatText.Text(i[0] + " "), FormatText.MutedText(i[1])), Text = i[0], Action = () => i[0] }); } if (data.Items.Any()) { var items = data.Items.ToArray(); var contextItems = items.OfType <IContextCompletions>(); foreach (var contextItem in contextItems) { contextItem.SetContext(this, control); } control.ShowCompletionWindow(items, data.Overlap); } return(Promises.Resolved(data)); }
public override void HandleTextEntered(EditorWinForm control, string insertText) { switch (insertText) { case ">": var doc = control.Editor.Document; var caret = control.Editor.CaretOffset; var text = doc.GetText(0, caret); var elementName = XmlParser.GetOpenElement(text); if (!string.IsNullOrEmpty(elementName)) { var insert = "</" + elementName + ">"; if (!doc.GetText(caret, doc.TextLength - caret).Trim().StartsWith(insert)) { doc.Insert(caret, insert, AnchorMovementType.BeforeInsertion); } } break; default: var result = HandleTextEntered(control.Editor.Document, control.Editor.CaretOffset, insertText); if (result.Any()) { control.ShowCompletionWindow(result, 0); } break; } }
public override void HandleTextEntered(EditorWinForm control, string insertText) { var text = control.Editor.Text.Substring(0, control.Editor.CaretOffset); switch (insertText[0]) { case ':': if (XmlParser.IsInsideAttributeValue(text, text.Length)) { var namespaces = XmlParser.GetNamespacesInScope(text); var i = text.Length - 2; while (Char.IsLetterOrDigit(text[i]) || text[i] == '_') { i--; } string namespaceUri; if (namespaces != null && namespaces.TryGetValue(text.Substring(i + 1).TrimEnd(':'), out namespaceUri)) { var methods = ArasXsltExtensions.GetExtensionMethods(namespaceUri).OrderBy(m => m.Name); control.ShowCompletionWindow(from m in methods group m by m.Name into Group select new BasicCompletionData(Group.Key, Group.Select(MethodToString).Aggregate((p, c) => p + Environment.NewLine + c)), 0); } } break; default: base.HandleTextEntered(control, insertText); break; } }
public override void HandleTextEntered(EditorWinForm control, string insertText) { var text = control.Editor.Text.Substring(0, control.Editor.CaretOffset); switch (insertText[0]) { case ':': if (XmlParser.IsInsideAttributeValue(text, text.Length)) { var namespaces = XmlParser.GetNamespacesInScope(text); var i = text.Length - 2; while (Char.IsLetterOrDigit(text[i]) || text[i] == '_') i--; string namespaceUri; if (namespaces != null && namespaces.TryGetValue(text.Substring(i + 1).TrimEnd(':'), out namespaceUri)) { var methods = ArasXsltExtensions.GetExtensionMethods(namespaceUri).OrderBy(m => m.Name); control.ShowCompletionWindow(from m in methods group m by m.Name into Group select new BasicCompletionData(Group.Key, Group.Select(MethodToString).Aggregate((p, c) => p + Environment.NewLine + c)), 0); } } break; default: base.HandleTextEntered(control, insertText); break; } }
public override Innovator.Client.IPromise <CompletionContext> ShowCompletions(EditorWinForm control) { var length = control.Editor.Document.TextLength; var caret = control.Editor.CaretOffset; var data = new CompletionContext(); if (caret > 0) { string[][] completions = null; if (control.Editor.Document.GetCharAt(caret - 1) == '\\') { completions = _completionInfo; } else if (control.Editor.Document.GetCharAt(caret - 1) == '$') { completions = _replacementTypes; } if (completions != null) { data.Items = completions .OrderBy(i => i[0].ToLowerInvariant()) .ThenBy(i => i[1]) .Select(i => new BasicCompletionData() { Content = GetSpan(new Run(i[0] + " "), new Run(i[1]) { Foreground = Brushes.Gray }), Text = i[0], Action = () => i[0] }); } } if (data.Items.Any()) { var items = data.Items.ToArray(); var contextItems = items.OfType <IContextCompletions>(); foreach (var contextItem in contextItems) { contextItem.SetContext(this, control); } control.ShowCompletionWindow(items, data.Overlap); } return(Promises.Resolved(data)); }
public override Innovator.Client.IPromise<CompletionContext> ShowCompletions(EditorWinForm control) { var length = control.Editor.Document.TextLength; var caret = control.Editor.CaretOffset; var data = new CompletionContext(); if (caret > 0) { string[][] completions = null; if (control.Editor.Document.GetCharAt(caret - 1) == '\\') completions = _completionInfo; if (completions != null) { data.Items = completions .OrderBy(i => i[0].ToLowerInvariant()) .ThenBy(i => i[1]) .Select(i => new BasicCompletionData() { Content = GetSpan(new Run(i[0] + " "), new Run(i[1]) { Foreground = Brushes.Gray }), Text = i[0], Action = () => i[0] }); } } if (data.Items.Any()) { var items = data.Items.ToArray(); var contextItems = items.OfType<IContextCompletions>(); foreach (var contextItem in contextItems) { contextItem.SetContext(this, control); } control.ShowCompletionWindow(items, data.Overlap); } return Promises.Resolved(data); }
public override void HandleTextEntered(EditorWinForm control, string insertText) { var text = control.Editor.Text.Substring(0, control.Editor.CaretOffset); ICompletionData[] result = null; IEnumerable<XmlElementPath> parentPaths; switch (insertText) { case "=": // Namespace intellisense. if (XmlParser.IsNamespaceDeclaration(text, text.Length)) { result = schemaCompletionDataItems.GetNamespaceCompletionData(); } break; case "<": // Child element intellisense. parentPaths = XmlParser.GetParentElementPaths(text); if (parentPaths.Any()) { foreach (var path in parentPaths) { result = GetChildElementCompletionData(path); if (result.Any()) break; } } else if (defaultSchemaCompletionData != null) { result = defaultSchemaCompletionData.GetElementCompletionData(defaultNamespacePrefix).ToArray(); } break; case " ": // Attribute intellisense. if (!XmlParser.IsInsideAttributeValue(text, text.Length)) { XmlElementPath path = XmlParser.GetActiveElementStartPath(text, text.Length); if (path.Elements.Count > 0) { result = GetAttributeCompletionData(path); } } break; case ">": var elementName = XmlParser.GetOpenElement(text); if (!string.IsNullOrEmpty(elementName)) { var insert = "</" + elementName + ">"; if (!control.Editor.Text.Substring(control.Editor.CaretOffset).Trim().StartsWith(insert)) { control.Editor.Document.Insert(control.Editor.CaretOffset, insert, AnchorMovementType.BeforeInsertion); } } break; default: // Attribute value intellisense. if (XmlParser.IsAttributeValueChar(insertText[0])) { string attributeName = XmlParser.GetAttributeName(text, text.Length); if (attributeName.Length > 0) { XmlElementPath elementPath = XmlParser.GetActiveElementStartPath(text, text.Length); if (elementPath.Elements.Count > 0) { //preSelection = insertText.ToString(); result = GetAttributeValueCompletionData(elementPath, attributeName); } } } break; } if (result != null) { Array.Sort(result, (x, y) => x.Text.CompareTo(y.Text)); control.ShowCompletionWindow(result, 0); } }
public Innovator.Client.IPromise<CompletionContext> ShowCompletions(EditorWinForm control) { var length = control.Editor.Document.TextLength; var caret = control.Editor.CaretOffset; var text = control.Editor.Text; return _sql.Completions(text.Substring(0, caret), control.Document, caret, null) .UiPromise(control) .Convert(data => { if (length != control.Editor.Document.TextLength || caret != control.Editor.CaretOffset) { ShowCompletions(control); return null; } if (data.Items.Any()) { var items = data.Items.ToArray(); var contextItems = items.OfType<IContextCompletions>(); foreach (var contextItem in contextItems) { contextItem.SetContext(this, control); } control.ShowCompletionWindow(items, data.Overlap); } return data; }); }
public override IPromise<CompletionContext> ShowCompletions(EditorWinForm control) { var length = control.Editor.Document.TextLength; var caret = control.Editor.CaretOffset; if (control.Editor.CaretOffset >= 2 && control.Editor.Document.GetText(control.Editor.CaretOffset - 2, 2) == "<!") { var context = new CompletionContext() { Items = new ICompletionData[] { new BasicCompletionData() { Text = "--", Content = "-- (Comment)", Action = () => "---->", CaretOffset = -3 }, new BasicCompletionData() { Text = "[CDATA[", Action = () => "[CDATA[]]>", CaretOffset = -3 } } }; control.ShowCompletionWindow(context.Items, context.Overlap); return Promises.Resolved(context); } else { return this.GetCompletions(control.Document, control.Editor.CaretOffset, this.SoapAction) .ToPromise() .UiPromise(control) .Convert(data => { if (length != control.Editor.Document.TextLength || caret != control.Editor.CaretOffset) { ShowCompletions(control); return null; } if (data.Items.Any()) { var items = data.Items.ToArray(); var contextItems = items.OfType<IContextCompletions>(); foreach (var contextItem in contextItems) { contextItem.SetContext(this, control); } control.ShowCompletionWindow(items, data.Overlap); } return data; }); } }
public override Innovator.Client.IPromise <CompletionContext> ShowCompletions(EditorWinForm control) { var context = new CompletionContext(); try { var caret = control.Editor.CaretOffset; var text = control.Editor.Text; var current = text.Substring(0, caret); var lastMacro = current.LastIndexOf('$'); var preMacro = lastMacro > 0 ? current.Substring(0, lastMacro).Trim() : current; if (lastMacro >= 0 && current.LastIndexOf(')') < lastMacro) { var overlap = current.Substring(lastMacro); var filter = overlap.TrimStart('$', '('); var items = Macros.Select(m => new BasicCompletionData() { Text = m, Action = () => "(" + m + ")", Image = Icons.Operator16.Wpf }) .Where(i => i.Text.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0) .OrderBy(i => i.Text); context.Items = items; control.ShowCompletionWindow(items, overlap.Length - 1); } else if (File.Exists(preMacro)) { var items = Macros.Select(m => new BasicCompletionData() { Text = m, Action = () => "$(" + m + ")", Image = Icons.Operator16.Wpf }) .OrderBy(i => i.Text); context.Items = items; control.ShowCompletionWindow(items, 0); } else if (current.Length >= 3) { var dir = (current.EndsWith("/") || current.EndsWith("\\")) ? current : Path.GetDirectoryName(current) + "\\"; var overlap = current.Length > dir.Length ? current.Substring(dir.Length) : string.Empty; IEnumerable <ICompletionData> items; if (dir.StartsWith(@"\\") && dir.Trim('\\').IndexOf(@"\") < 0) { items = ShareCollection.GetShares(dir) .Select(s => new BasicCompletionData() { Text = s.NetName, Image = Icons.Folder16.Wpf }); } else { items = new DirectoryInfo(dir).GetFileSystemInfos() .Select(e => new BasicCompletionData() { Text = e.Name, Image = (e.Attributes & FileAttributes.Directory) > 0 ? Icons.Folder16.Wpf : Icons.EnumValue16.Wpf }); } items = items .Where(i => i.Text.IndexOf(overlap, StringComparison.OrdinalIgnoreCase) >= 0) .OrderBy(i => i.Text); context.Items = items; control.ShowCompletionWindow(items, overlap.Length); } } catch (IOException) { } catch (ArgumentException) { } return(Innovator.Client.Promises.Resolved(context)); }