Example #1
0
        private void Parse(bool ColorCode)
        {
            string mDX = this.m_MDX;

            this.m_ParamParser = new MDXParamParser();
            mDX = this.m_ParamParser.ParseParameters(mDX);
            ColorCoding        coding = new ColorCoding();
            MDXGrammarLexClass class2 = new MDXGrammarLexClass(new MDXGrammarLexTable(), new SSLexStringConsumer(mDX))
            {
                m_Source      = this.m_Source,
                m_ColorCoding = coding
            };

            this.m_SSParser = new MDXGrammarYaccClass(this.m_ParamParser, new MDXGrammarYaccTable(), class2);
            this.m_SSParser.m_ColorCodeOnly = ColorCode;
            this.m_SSParser.m_ColorCoding   = coding;
            this.m_SSParser.SetMdxText(mDX);
            this.m_SSParser.SetMetadataInfo(this.m_CubeInfo);
            this.m_SSParser.m_Source = this.m_Source;
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            if (!this.m_Cancel)
            {
                bool flag = this.m_SSParser.parse();
                if (!this.m_Cancel)
                {
                    stopwatch.Stop();
                    if (flag)
                    {
                        //throw new MDXParserException(this.m_SSParser.m_Errors);
                    }
                    if (class2.Comments.Count > 0)
                    {
                        this.m_PostComments          = new MDXEmptyNode();
                        this.m_PostComments.Comments = class2.Comments;
                        class2.Comments = null;
                    }
                    if (this.m_ParamParser.m_Params.Count > 0)
                    {
                        this.GetNode();
                        MDXSelectNode select = this.GetSelect();
                        if (select != null)
                        {
                            select.m_Params = this.m_ParamParser.m_Params;
                        }
                    }
                }
            }
        }
Example #2
0
        public ColorCoding GetDelta(ColorCoding cc)
        {
            if (cc == null)
            {
                return(this);
            }
            ColorCoding          coding        = new ColorCoding();
            Stack <ColorSegment> segmentsStack = this.GetSegmentsStack();
            Stack <ColorSegment> stack2        = cc.GetSegmentsStack();

            while ((segmentsStack.Count > 0) || (stack2.Count > 0))
            {
                ColorSegment item     = null;
                ColorSegment segment2 = null;
                if (segmentsStack.Count == 0)
                {
                    ColorSegment segment3 = new ColorSegment {
                        Color = Color.Black
                    };
                    segment2       = stack2.Pop();
                    segment3.Start = segment2.Start;
                    while (stack2.Count > 0)
                    {
                        segment2 = stack2.Pop();
                    }
                    segment3.End = segment2.End;
                    coding.Add(segment3);
                    return(coding);
                }
                if (stack2.Count == 0)
                {
                    while (segmentsStack.Count > 0)
                    {
                        item = segmentsStack.Pop();
                        coding.Add(item);
                    }
                    return(coding);
                }
                item     = segmentsStack.Peek();
                segment2 = stack2.Peek();
                if ((item.Start == segment2.Start) && (item.End == segment2.End))
                {
                    segmentsStack.Pop();
                    stack2.Pop();
                }
                else
                {
                    if (item.Start <= segment2.Start)
                    {
                        segmentsStack.Pop();
                        coding.Add(item);
                        while ((segment2.End <= item.End) && (stack2.Count > 0))
                        {
                            segment2 = stack2.Pop();
                        }
                        if (segment2.Start > item.End)
                        {
                            stack2.Push(segment2);
                        }
                        else
                        {
                            ColorSegment segment4 = new ColorSegment {
                                Start = item.End + 1,
                                End   = segment2.End
                            };
                            stack2.Push(segment4);
                        }
                        continue;
                    }
                    if (item.Start > segment2.Start)
                    {
                        stack2.Pop();
                        ColorSegment segment5 = new ColorSegment {
                            Start = segment2.Start,
                            Color = Color.Black
                        };
                        if (segment2.End < item.End)
                        {
                            segment5.End = segment2.End;
                        }
                        else
                        {
                            segment5.End = item.Start - 1;
                            ColorSegment segment6 = new ColorSegment {
                                Start = item.Start,
                                End   = segment2.End
                            };
                            stack2.Push(segment6);
                        }
                        coding.Add(segment5);
                    }
                }
            }
            return(coding);
        }