private void Parse() { if (!this._enabled) { return; } lock (this._updateLock) { DateTime time1 = DateTime.Now; ITextSnapshot newSnapshot = this._buffer.CurrentSnapshot; IList <Region> newRegions = new List <Region>(); // keep the current (deepest) partial region, which will have // references to any parent partial regions. PartialRegion currentRegion = null; IEnumerator <ITextSnapshotLine> enumerator = newSnapshot.Lines.GetEnumerator(); ITextSnapshotLine line = null; bool hasNext = enumerator.MoveNext(); bool already_advanced = true; if (hasNext) { line = enumerator.Current; } while (hasNext) { already_advanced = false; #region Parse Line if (line.Length > 0) { string lineContent = line.GetText(); int lineNumber = line.LineNumber; (int regionStart, int regionStartHoverText) = this.Is_Start_Keyword(lineContent, lineNumber); if (regionStart != -1) { this.Add_Start_Region(lineContent, regionStart, lineNumber, regionStartHoverText, ref currentRegion, newRegions); } else { int regionEnd = this.Is_End_Keyword(lineContent, lineNumber); if (regionEnd != -1) { this.Add_End_Region(lineContent, regionEnd, lineNumber, ref currentRegion, newRegions); } else { #region Search for multi-line Remark if (AsmSourceTools.IsRemarkOnly(lineContent)) { int lineNumber2 = -1; string lineContent2 = null; while (enumerator.MoveNext()) { line = enumerator.Current; string lineContent3 = line.GetText(); if (AsmSourceTools.IsRemarkOnly(lineContent3) && (this.Is_Start_Directive_Keyword(lineContent3).StartPos == -1) && (this.Is_End_Directive_Keyword(lineContent3) == -1)) { lineNumber2 = line.LineNumber; lineContent2 = lineContent3; already_advanced = false; } else { already_advanced = true; break; } } if (lineNumber2 != -1) { int regionStartPos = AsmSourceTools.GetRemarkCharPosition(lineContent); this.Add_Start_Region(lineContent, regionStartPos, lineNumber, regionStartPos, ref currentRegion, newRegions); //this.updateChangedSpans(newSnapshot, newRegions); this.Add_End_Region(lineContent2, 0, lineNumber2, ref currentRegion, newRegions); } } #endregion } } } #endregion Parse Line #region Update Changed Spans this.Update_Changed_Spans(newSnapshot, newRegions); #endregion #region Advance to next line if (!already_advanced) { hasNext = enumerator.MoveNext(); if (hasNext) { line = enumerator.Current; } } #endregion } AsmDudeToolsStatic.Print_Speed_Warning(time1, "CodeFoldingTagger"); double elapsedSec = (double)(DateTime.Now.Ticks - time1.Ticks) / 10000000; if (elapsedSec > AsmDudePackage.SlowShutdownThresholdSec) { # if DEBUG AsmDudeToolsStatic.Output_WARNING("CodeFoldingTagger: Parse: disabled CodeFolding had I been in Release mode"); # else this.Disable(); # endif }