protected void StartNewParse(TextChange change)
        {
            OnStartingNewParse();

            lock (this.lockObject)
            {
                if (this.parseEpisode != null)
                {
                    this.parseEpisode.Canceled = true;
                }

                this.parseEpisode = new ParseEpisode();
                this.parseEpisode.Start(this, change);
            }
        }
        protected void StartNewParse(TextChange change)
        {
            OnStartingNewParse();

            lock (this.lockObject)
            {
                if (this.parseEpisode != null)
                {
                    this.parseEpisode.Canceled = true;
                }

                this.parseEpisode = new ParseEpisode();
                this.parseEpisode.Start(this, change);
            }
        }
        void OnParseCompleted(ParseEpisode episode)
        {
            bool raiseEvent = false;

            lock (this.lockObject)
            {
                if (episode == this.parseEpisode)
                {
                    this.data = episode.FormatData;
                    this.currentChange = episode.Change;
                    raiseEvent = true;
                }
            }

            if (raiseEvent)
            {
                RaiseFormatDataChangedEvent();
            }
        }
        void OnParseCompleted(ParseEpisode episode)
        {
            bool raiseEvent = false;

            lock (this.lockObject)
            {
                if (episode == this.parseEpisode)
                {
                    this.data          = episode.FormatData;
                    this.currentChange = episode.Change;
                    raiseEvent         = true;
                }
            }

            if (raiseEvent)
            {
                RaiseFormatDataChangedEvent();
            }
        }