Converter converter = null;// 実行中でなければnull private void convertWorker_DoWork(object sender, DoWorkEventArgs e) { Properties.Settings.SetCurrentLanguage(); try { Directory.CreateDirectory(Path.GetTempPath()); } catch(Exception) { MessageBox.Show(String.Format(Properties.Resources.FAIL_TMPFOLDER, Path.GetTempPath())); return; } if(FirstFiles != null) { for(int i = 0 ; i < FirstFiles.Count / 2 ; ++i) { string file = FirstFiles[2 * i]; string workdir; if (Properties.Settings.Default.workingDirectory == "file") workdir = Path.GetDirectoryName(file); else if (Properties.Settings.Default.workingDirectory == "current") workdir = Directory.GetCurrentDirectory(); else workdir = Path.GetTempPath(); string tmppath; try { string inputextension = Path.GetExtension(file); tmppath = Path.Combine(workdir,TempFilesDeleter.GetTempFileName(inputextension)); File.Delete(tmppath); File.Copy(file, tmppath, true); } catch(Exception) { MessageBox.Show(String.Format(Properties.Resources.FAIL_TMPFILE, workdir)); continue; } var output = Path.GetFullPath(FirstFiles[2 * i + 1]); converter = new Converter(this, tmppath, output); converter.Convert(); } FirstFiles = null; converter = null; return; } try { string outputFilePath = outputFileNameTextBox.Text; if(InputFromFileRadioButton.Checked) { string inputTeXFilePath = inputFileNameTextBox.Text; if(!File.Exists(inputTeXFilePath)) { MessageBox.Show(String.Format(Properties.Resources.NOTEXIST, inputTeXFilePath), Properties.Resources.ERROR, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } } string extension = Path.GetExtension(outputFilePath).ToLower(); string tmpTeXFileName; string tmpDir; if (InputFromFileRadioButton.Checked) { if (Properties.Settings.Default.workingDirectory == "file") tmpDir = Path.GetDirectoryName(inputFileNameTextBox.Text); else if (Properties.Settings.Default.workingDirectory == "current") tmpDir = Directory.GetCurrentDirectory(); else tmpDir = Path.GetTempPath(); tmpTeXFileName = TempFilesDeleter.GetTempFileName(Path.GetExtension(inputFileNameTextBox.Text), tmpDir); }else{ if (Properties.Settings.Default.workingDirectory == "current") tmpDir = Directory.GetCurrentDirectory(); else tmpDir = Path.GetTempPath(); tmpTeXFileName = TempFilesDeleter.GetTempFileName(); } if(tmpTeXFileName == null) { MessageBox.Show(String.Format(Properties.Resources.FAIL_TMPFILE, tmpDir)); return; } string tmpFileBaseName = Path.GetFileNameWithoutExtension(tmpTeXFileName); using(converter = new Converter(this, Path.Combine(tmpDir, tmpTeXFileName), outputFileNameTextBox.Text)) { if(!converter.CheckFormat()) return; if(!converter.CheckInputFormat()) return; #region TeX ソースファイルの準備 // 外部ファイルから入力する場合はテンポラリディレクトリにコピー if(InputFromFileRadioButton.Checked) { string inputTeXFilePath = inputFileNameTextBox.Text; string tmpfile = Path.Combine(tmpDir, tmpTeXFileName); File.Copy(inputTeXFilePath, tmpfile, true); // 読み取り専用の場合解除しておく(後でFile.Deleteに失敗するため)。 (new FileInfo(tmpfile)).Attributes = FileAttributes.Normal; converter.AddInputPath(Path.GetDirectoryName(inputTeXFilePath)); } // 直接入力の場合 tex ソースを出力 if(InputFromTextboxRadioButton.Checked) { using(StreamWriter sw = new StreamWriter(Path.Combine(tmpDir, tmpTeXFileName), false, Converter.GetInputEncoding())) { try { TeXSource.WriteTeXSourceFile(sw, myPreambleForm.PreambleTextBox.Text, sourceTextBox.Text); } catch { } } } #endregion if(converter.Convert()) { if(Properties.Settings.Default.setFileToClipBoard) { if(converter.OutputFileNames.Count > 0) { Invoke(new Action(() => { var flist = new System.Collections.Specialized.StringCollection(); foreach(var f in converter.OutputFileNames) flist.Add(f); Clipboard.SetFileDropList(flist); })); } } } } } finally { converter = null; } }
// CUIモード static int CUIExec(bool q, List<string> files) { IOutputController Output = new CUIOutput(q); if (files.Count == 0) { Console.WriteLine(Properties.Resources.NOINPUTFILE); return -5; } try { Directory.CreateDirectory(Path.GetTempPath()); } catch (Exception) { Console.WriteLine(String.Format(Properties.Resources.FAIL_TMPFOLDER, Path.GetTempPath())); return -7; } int failnum = 0; var outFiles = new System.Collections.Specialized.StringCollection(); for (int i = 0; i < files.Count / 2; ++i) { string file = Path.GetFullPath(files[2 * i]); string dir; if (Properties.Settings.Default.workingDirectory == "file") dir = Path.GetDirectoryName(file); else if (Properties.Settings.Default.workingDirectory == "current") dir = Directory.GetCurrentDirectory(); else dir = Path.GetTempPath(); string tmpTeXFileName = TempFilesDeleter.GetTempFileName(Path.GetExtension(file), dir); if (tmpTeXFileName == null) { Console.WriteLine(String.Format(Properties.Resources.FAIL_TMPFILE, Path.GetTempPath())); return -6; } tmpTeXFileName = Path.Combine(dir, tmpTeXFileName); // 一時フォルダにコピー File.Copy(file, tmpTeXFileName, true); (new FileInfo(tmpTeXFileName)).Attributes = FileAttributes.Normal; var output = Path.GetFullPath(files[2 * i + 1]); // 変換! try { using (var converter = new Converter(Output, tmpTeXFileName, output)) { converter.AddInputPath(Path.GetDirectoryName(file)); if (!converter.Convert()) ++failnum; else outFiles.AddRange(converter.OutputFileNames.ToArray()); } if (Properties.Settings.Default.setFileToClipBoard) Clipboard.SetFileDropList(outFiles); } catch (Exception e) { Console.WriteLine(e.Message); } } return failnum; }