Example #1
0
        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>());
        }
Example #2
0
        /// <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);
        }