/// <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; * } * } */ }
/// <summary> /// コンストラクタ /// </summary> /// <param name="cu">パース結果</param> public ParserResult(CompletionUnit cu) { m_cu = cu; }
/// <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, TextEncoding.Instance.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); //ちょっと休憩 } }