예제 #1
0
        /// <summary>
        /// 構文解析結果を追加する
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="cu"></param>
        public void Add(string filePath, CompletionUnit cu)
        {
            if (filePath == "")
            {
                return;                 //空の時は追加しない
            }
            if (FileType.GetKrkrType(filePath) == FileType.KrkrType.Kag)
            {
                if (m_kagTable.ContainsKey(filePath) == false)
                {
                    m_kagTable.Add(filePath, null);
                }

                m_kagTable[filePath] = (KagCompletionUnit)cu;
            }
            else if (FileType.GetKrkrType(filePath) == FileType.KrkrType.Tjs)
            {
                if (FileType.IsKagexEnvinitFileName(filePath))
                {
                    m_kagexEnvinitInfo = (kagex.KagexCompletionUnit)cu;
                }
            }
        }
예제 #2
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="cu">パース結果</param>
 public ParserResult(CompletionUnit cu)
 {
     m_cu = cu;
 }
예제 #3
0
        /// <summary>
        /// バックグラウンドでパースを実行する
        /// </summary>
        void BackThreadParser_DoWork(object sender, DoWorkEventArgs e)
        {
            ParserArg arg = (ParserArg)e.Argument;

            if (arg == null)
            {
                return;                 //終了
            }

            if (arg.ModeType == ParserArg.Mode.Directory)               //ディレクトリモードの時
            {
                DirectoryParserArg dirArg   = (DirectoryParserArg)arg;
                string[]           pathList = dirArg.FileList;
                if (pathList == null || pathList.Length == 0)
                {
                    return;                     //終了
                }

                int          count = 0;
                string       text  = "";
                StreamReader sr    = null;
                foreach (string path in pathList)
                {
                    count++;
                    using (sr = new StreamReader(path, GlobalStatus.TextEnc.GetFileEncoding(path)))
                    {
                        text = sr.ReadToEnd();
                    }
                    CompletionUnit cu = BackThreadParser_GetCompletionUnit(path, text);
                    if (cu == null)
                    {
                        continue;
                    }

                    //キャンセルされているかどうかチェック
                    if (m_bgworker.CancellationPending == true)
                    {
                        return;
                    }
                    m_bgworker.ReportProgress(count, new ParserResult(cu));                     //結果を送信する
                }
            }
            else if (arg.ModeType == ParserArg.Mode.File)               //ファイルモードの時
            {
                FileParserArg fileArg = (FileParserArg)arg;
                if (fileArg.filePath == "" || fileArg.Text == "")
                {
                    return;                     //終了
                }

                CompletionUnit cu = BackThreadParser_GetCompletionUnit(fileArg.filePath, fileArg.Text);
                if (cu == null)
                {
                    return;                     //終了
                }

                //キャンセルされているかどうかチェック
                if (m_bgworker.CancellationPending == true)
                {
                    return;
                }
                m_bgworker.ReportProgress(1, new ParserResult(cu));                     //結果を送信する
            }

            if (arg.SleepTime > 0)
            {
                System.Threading.Thread.Sleep(arg.SleepTime);                   //ちょっと休憩
            }
        }