public override IEnumerable <IEditorScript> GetScripts(ICSharpCode.AvalonEdit.Document.ITextSource text, int offset) { var item = GetCurrentItem(text, offset); if (item != null) { var generator = new ScriptMenuGenerator() { Conn = _conn, ConnData = _connData, Items = new[] { item } }; return(generator.GetScripts().Concat(Enumerable.Repeat(new EditorScriptExecute() { Name = "Transform: Criteria to Where Clause", Execute = () => { var doc = text as IDocument; if (doc != null) { var segment = GetCurrentQuerySegment(text, offset); var elem = XElement.Load(text.CreateReader(segment.Offset, segment.Length)); AmlTransforms.CriteriaToWhereClause(elem); doc.Replace(segment.Offset, segment.Length, elem.ToString()); } return Task.FromResult(true); } }, 1))); } return(Enumerable.Empty <IEditorScript>()); }
/// <summary> /// Create <see cref="NewFolding"/>s for the specified document. /// </summary> public IEnumerable <NewFolding> CreateNewFoldings(ICSharpCode.AvalonEdit.Document.ITextSource document) { List <NewFolding> newFoldings = new List <NewFolding>(); Stack <int> startOffsets = new Stack <int>(); int lastNewLineOffset = 0; char openingBrace = this.OpeningBrace; char closingBrace = this.ClosingBrace; bool newlinefound = false; bool newfoldingstarted = false; for (int i = 0; i < document.TextLength; i++) { char c = document.GetCharAt(i); if (c == '/') { char d = document.GetCharAt(i + 1); if (d == '/') { if (!newfoldingstarted) { startOffsets.Push(i); } newlinefound = false; newfoldingstarted = true; } } else if (newlinefound) { if (Char.IsWhiteSpace(c)) { continue; } else if (c == '[') { newlinefound = false; continue; } else if (startOffsets.Count > 0) { int startOffset = startOffsets.Pop(); // don't fold if opening and closing brace are on the same line if (startOffset < lastNewLineOffset) { newFoldings.Add(new NewFolding(startOffset, i + 1 - 1)); newfoldingstarted = false; } } } else if (c == '\n' || c == '\r') { newlinefound = true; lastNewLineOffset = i + 1; } } newFoldings.Sort((a, b) => a.StartOffset.CompareTo(b.StartOffset)); return(newFoldings); }