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; } } } } }
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); }