C#/.NET


C#/C++ のソースを HTML に変換する ツール CSharpToHTML


MainFrame.cs

namespace CSharpToHTML
{
   /// <summary>MainForm</summary>
   public class MainForm : System.Windows.Forms.Form
   {
       #region デザイナ変数

       private System.Windows.Forms.Button changeButton;
       private System.Windows.Forms.Label bodyLabel;
       private System.Windows.Forms.TextBox bodyTextBox;
       private System.Windows.Forms.MainMenu mainMenu;
       private System.Windows.Forms.MenuItem menuItemExit;
       private System.Windows.Forms.ProgressBar changeProgressBar;
       private System.Windows.Forms.Button bodyClearButton;
       private System.Windows.Forms.MenuItem menuItemOpen;
       private System.Windows.Forms.MenuItem menuItemFile;
       private System.Windows.Forms.MenuItem menuItemOption;
       private System.Windows.Forms.MenuItem menuItemFont;
       private System.Windows.Forms.MenuItem menuItemHelp;
       private System.Windows.Forms.MenuItem menuItemAbout;
       private System.Windows.Forms.MenuItem menuItemHelpIndex;
       private System.Windows.Forms.MenuItem menuItemEdit;
       private System.Windows.Forms.MenuItem menuItemPaste;
       private System.Windows.Forms.MenuItem menuItemClear;
       private System.Windows.Forms.RadioButton csharpModeRadioButton;
       private System.Windows.Forms.RadioButton cplusplusModeRadioButton;
       private System.Windows.Forms.CheckBox autoChangeCheckBox;
       private System.Windows.Forms.GroupBox changeModeGroupBox;
       private System.Windows.Forms.MenuItem menuItemHtmlOption;
       private System.Windows.Forms.MenuItem menuItemAutoChange;
       private System.Windows.Forms.MenuItem menuItemCsharpMode;
       private System.Windows.Forms.MenuItem menuItemCplusplusMode;
       private System.Windows.Forms.MenuItem menuItemChange;

       /// <summary>必要なデザイナ変数</summary>
       private System.ComponentModel.Container components = null;

       #endregion // デザイナ変数

       #region Constructor

       public MainForm(string fileName)
       {
           InitializeFirst();
           // Windows フォーム デザイナ サポートに必要
           InitializeComponent();
           readFromRegistry();
           InitializeOther();

           if (fileName != null)
               autoChangeFile(fileName);
       }

       #endregion // Constructor

       #region Overrides

       /// <summary>使用されているリソースに後処理を実行</summary>
       protected override void Dispose(bool disposing)
       {
           writeToRegistry();

           if (disposing)
           {
               if (components != null)
               {
                   components.Dispose();
               }
           }
           base.Dispose(disposing);
       }

       #endregion // Overrides

       #region Windows Form Designer generated code

       /// <summary>
       /// デザイナ サポートに必要なメソッド
       /// </summary>
       private void InitializeComponent()
       {
           this.changeButton = new System.Windows.Forms.Button();
           this.bodyLabel = new System.Windows.Forms.Label();
           this.bodyTextBox = new System.Windows.Forms.TextBox();
           this.mainMenu = new System.Windows.Forms.MainMenu();
           this.menuItemFile = new System.Windows.Forms.MenuItem();
           this.menuItemOpen = new System.Windows.Forms.MenuItem();
           this.menuItemChange = new System.Windows.Forms.MenuItem();
           this.menuItemExit = new System.Windows.Forms.MenuItem();
           this.menuItemEdit = new System.Windows.Forms.MenuItem();
           this.menuItemPaste = new System.Windows.Forms.MenuItem();
           this.menuItemClear = new System.Windows.Forms.MenuItem();
           this.menuItemOption = new System.Windows.Forms.MenuItem();
           this.menuItemHtmlOption = new System.Windows.Forms.MenuItem();
           this.menuItemFont = new System.Windows.Forms.MenuItem();
           this.menuItemAutoChange = new System.Windows.Forms.MenuItem();
           this.menuItemCsharpMode = new System.Windows.Forms.MenuItem();
           this.menuItemCplusplusMode = new System.Windows.Forms.MenuItem();
           this.menuItemHelp = new System.Windows.Forms.MenuItem();
           this.menuItemHelpIndex = new System.Windows.Forms.MenuItem();
           this.menuItemAbout = new System.Windows.Forms.MenuItem();
           this.cplusplusModeRadioButton = new System.Windows.Forms.RadioButton();
           this.csharpModeRadioButton = new System.Windows.Forms.RadioButton();
           this.changeProgressBar = new System.Windows.Forms.ProgressBar();
           this.bodyClearButton = new System.Windows.Forms.Button();
           this.autoChangeCheckBox = new System.Windows.Forms.CheckBox();
           this.changeModeGroupBox = new System.Windows.Forms.GroupBox();
           this.changeModeGroupBox.SuspendLayout();
           this.SuspendLayout();
           //
           // changeButton
           //
           this.changeButton.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left);
           this.changeButton.Location = new System.Drawing.Point(16, 400);
           this.changeButton.Name = "changeButton";
           this.changeButton.TabIndex = 4;
           this.changeButton.Text = "変換";
           this.changeButton.Click += new System.EventHandler(this.menuItemChange_Click);
           //
           // bodyLabel
           //
           this.bodyLabel.Location = new System.Drawing.Point(16, 16);
           this.bodyLabel.Name = "bodyLabel";
           this.bodyLabel.TabIndex = 1;
           this.bodyLabel.Text = "C#/C++ ソース";
           //
           // bodyTextBox
           //
           this.bodyTextBox.AcceptsTab = true;
           this.bodyTextBox.AllowDrop = true;
           this.bodyTextBox.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
               | System.Windows.Forms.AnchorStyles.Left)
               | System.Windows.Forms.AnchorStyles.Right);
           this.bodyTextBox.Font = new System.Drawing.Font("MS ゴシック", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(128)));
           this.bodyTextBox.Location = new System.Drawing.Point(16, 40);
           this.bodyTextBox.MaxLength = 655350;
           this.bodyTextBox.Multiline = true;
           this.bodyTextBox.Name = "bodyTextBox";
           this.bodyTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
           this.bodyTextBox.Size = new System.Drawing.Size(400, 312);
           this.bodyTextBox.TabIndex = 2;
           this.bodyTextBox.Text = "";
           this.bodyTextBox.DragDrop += new System.Windows.Forms.DragEventHandler(this.bodyTextBox_DragDrop);
           this.bodyTextBox.DragEnter += new System.Windows.Forms.DragEventHandler(this.bodyTextBox_DragEnter);
           //
           // mainMenu
           //
           this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                                                                    this.menuItemFile,
                                                                                    this.menuItemEdit,
                                                                                    this.menuItemOption,
                                                                                    this.menuItemHelp});
           //
           // menuItemFile
           //
           this.menuItemFile.Index = 0;
           this.menuItemFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                                                                        this.menuItemOpen,
                                                                                        this.menuItemChange,
                                                                                        this.menuItemExit});
           this.menuItemFile.Text = "ファイル(&F)";
           //
           // menuItemOpen
           //
           this.menuItemOpen.Index = 0;
           this.menuItemOpen.Shortcut = System.Windows.Forms.Shortcut.CtrlO;
           this.menuItemOpen.Text = "ソース ファイル読み込み...(&F)";
           this.menuItemOpen.Click += new System.EventHandler(this.menuItemOpen_Click);
           //
           // menuItemChange
           //
           this.menuItemChange.Index = 1;
           this.menuItemChange.Text = "変換(&C)";
           this.menuItemChange.Click += new System.EventHandler(this.menuItemChange_Click);
           //
           // menuItemExit
           //
           this.menuItemExit.Index = 2;
           this.menuItemExit.Text = "終了(&X)";
           this.menuItemExit.Click += new System.EventHandler(this.menuItemExit_Click);
           //
           // menuItemEdit
           //
           this.menuItemEdit.Index = 1;
           this.menuItemEdit.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                                                                        this.menuItemPaste,
                                                                                        this.menuItemClear});
           this.menuItemEdit.Shortcut = System.Windows.Forms.Shortcut.CtrlX;
           this.menuItemEdit.Text = "編集(&E)";
           //
           // menuItemPaste
           //
           this.menuItemPaste.Index = 0;
           this.menuItemPaste.Shortcut = System.Windows.Forms.Shortcut.CtrlV;
           this.menuItemPaste.Text = "ソースの貼り付け(&P)";
           this.menuItemPaste.Click += new System.EventHandler(this.menuItemPaste_Click);
           //
           // menuItemClear
           //
           this.menuItemClear.Index = 1;
           this.menuItemClear.Shortcut = System.Windows.Forms.Shortcut.CtrlQ;
           this.menuItemClear.Text = "ソースのクリア(&C)";
           this.menuItemClear.Click += new System.EventHandler(this.menuItemClear_Click);
           //
           // menuItemOption
           //
           this.menuItemOption.Index = 2;
           this.menuItemOption.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                                                                          this.menuItemHtmlOption,
                                                                                          this.menuItemFont,
                                                                                          this.menuItemAutoChange,
                                                                                          this.menuItemCsharpMode,
                                                                                          this.menuItemCplusplusMode});
           this.menuItemOption.Text = "オプション(&O)";
           //
           // menuItemHtmlOption
           //
           this.menuItemHtmlOption.Index = 0;
           this.menuItemHtmlOption.Text = "詳細設定...(&S)";
           this.menuItemHtmlOption.Click += new System.EventHandler(this.menuItemHtmlOption_Click);
           //
           // menuItemFont
           //
           this.menuItemFont.Index = 1;
           this.menuItemFont.Text = "フォント...(&F)";
           this.menuItemFont.Click += new System.EventHandler(this.menuItemFont_Click);
           //
           // menuItemAutoChange
           //
           this.menuItemAutoChange.Index = 2;
           this.menuItemAutoChange.Text = "自動変換(&A)";
           this.menuItemAutoChange.Click += new System.EventHandler(this.menuItemAutoChange_Click);
           //
           // menuItemCsharpMode
           //
           this.menuItemCsharpMode.Index = 3;
           this.menuItemCsharpMode.Text = "変換モード - C#(&C)";
           this.menuItemCsharpMode.Click += new System.EventHandler(this.menuItemCsharpMode_Click);
           //
           // menuItemCplusplusMode
           //
           this.menuItemCplusplusMode.Index = 4;
           this.menuItemCplusplusMode.Text = "変換モード - C++(&P)";
           this.menuItemCplusplusMode.Click += new System.EventHandler(this.menuItemCplusplusMode_Click);
           //
           // menuItemHelp
           //
           this.menuItemHelp.Index = 3;
           this.menuItemHelp.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                                                                        this.menuItemHelpIndex,
                                                                                        this.menuItemAbout});
           this.menuItemHelp.Text = "ヘルプ(&H)";
           //
           // menuItemHelpIndex
           //
           this.menuItemHelpIndex.Index = 0;
           this.menuItemHelpIndex.Text = "ヘルプ...(&H)";
           this.menuItemHelpIndex.Click += new System.EventHandler(this.menuItemHelpIndex_Click);
           //
           // menuItemAbout
           //
           this.menuItemAbout.Index = 1;
           this.menuItemAbout.Text = "バージョン情報...(&A)";
           this.menuItemAbout.Click += new System.EventHandler(this.menuItemAbout_Click);
           //
           // cplusplusModeRadioButton
           //
           this.cplusplusModeRadioButton.Anchor = (System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right);
           this.cplusplusModeRadioButton.Location = new System.Drawing.Point(248, 16);
           this.cplusplusModeRadioButton.Name = "cplusplusModeRadioButton";
           this.cplusplusModeRadioButton.TabIndex = 9;
           this.cplusplusModeRadioButton.Text = "C++ モード";
           this.cplusplusModeRadioButton.CheckedChanged += new System.EventHandler(this.cplusplusModeRadioButton_Click);
           //
           // csharpModeRadioButton
           //
           this.csharpModeRadioButton.Anchor = (System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right);
           this.csharpModeRadioButton.Location = new System.Drawing.Point(40, 16);
           this.csharpModeRadioButton.Name = "csharpModeRadioButton";
           this.csharpModeRadioButton.TabIndex = 8;
           this.csharpModeRadioButton.TabStop = true;
           this.csharpModeRadioButton.Text = "C# モード";
           this.csharpModeRadioButton.CheckedChanged += new System.EventHandler(this.csharpModeRadioButton_Click);
           //
           // changeProgressBar
           //
           this.changeProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
               | System.Windows.Forms.AnchorStyles.Right);
           this.changeProgressBar.Enabled = false;
           this.changeProgressBar.Location = new System.Drawing.Point(200, 400);
           this.changeProgressBar.Name = "changeProgressBar";
           this.changeProgressBar.Size = new System.Drawing.Size(216, 23);
           this.changeProgressBar.Step = 1;
           this.changeProgressBar.TabIndex = 6;
           this.changeProgressBar.Visible = false;
           //
           // bodyClearButton
           //
           this.bodyClearButton.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
           this.bodyClearButton.Location = new System.Drawing.Point(344, 352);
           this.bodyClearButton.Name = "bodyClearButton";
           this.bodyClearButton.TabIndex = 3;
           this.bodyClearButton.Text = "クリア";
           this.bodyClearButton.Click += new System.EventHandler(this.menuItemClear_Click);
           //
           // autoChangeCheckBox
           //
           this.autoChangeCheckBox.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left);
           this.autoChangeCheckBox.Location = new System.Drawing.Point(104, 400);
           this.autoChangeCheckBox.Name = "autoChangeCheckBox";
           this.autoChangeCheckBox.Size = new System.Drawing.Size(80, 24);
           this.autoChangeCheckBox.TabIndex = 5;
           this.autoChangeCheckBox.Text = "自動変換";
           this.autoChangeCheckBox.CheckedChanged += new System.EventHandler(this.autoChangeCheckBox_Click);
           //
           // changeModeGroupBox
           //
           this.changeModeGroupBox.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left);
           this.changeModeGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                                            this.csharpModeRadioButton,
                                                                                            this.cplusplusModeRadioButton});
           this.changeModeGroupBox.Location = new System.Drawing.Point(16, 432);
           this.changeModeGroupBox.Name = "changeModeGroupBox";
           this.changeModeGroupBox.Size = new System.Drawing.Size(400, 56);
           this.changeModeGroupBox.TabIndex = 7;
           this.changeModeGroupBox.TabStop = false;
           this.changeModeGroupBox.Text = "変換モード";
           //
           // MainForm
           //
           this.AllowDrop = true;
           this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
           this.ClientSize = new System.Drawing.Size(424, 497);
           this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                         this.changeModeGroupBox,
                                                                         this.autoChangeCheckBox,
                                                                         this.bodyClearButton,
                                                                         this.changeProgressBar,
                                                                         this.changeButton,
                                                                         this.bodyLabel,
                                                                         this.bodyTextBox});
           this.Menu = this.mainMenu;
           this.MinimumSize = new System.Drawing.Size(432, 288);
           this.Name = "MainForm";
           this.Text = "CSharpToHTML";
           this.DragDrop += new System.Windows.Forms.DragEventHandler(this.bodyTextBox_DragDrop);
           this.DragEnter += new System.Windows.Forms.DragEventHandler(this.bodyTextBox_DragEnter);
           this.changeModeGroupBox.ResumeLayout(false);
           this.ResumeLayout(false);

       }

       #endregion // Windows Form Designer generated code

       #region Main

       /// <summary>アプリケーションのメイン エントリ ポイント</summary>
       [System.STAThread]
       static void Main(string[] args)
       {
           MainForm mainForm = null;
           try
           {
               mainForm = new MainForm((args.Length > 0) ? args[0] : null);
           }
           catch (System.Exception error)
           {
               System.Windows.Forms.MessageBox.Show(error.ToString(), "エラー",
                   System.Windows.Forms.MessageBoxButtons.OK,
                   System.Windows.Forms.MessageBoxIcon.Error);
           }
           if (mainForm != null)
               System.Windows.Forms.Application.Run(mainForm);
       }

       #endregion // Main

       #region Privates

       private const string helpFileName   = @".\CSharpToHTMLHelp.html";
       private const string outputFileName = @".\@__temp__@.html";

       private bool AutoChangeMode
       {
           get { return autoChangeCheckBox.Checked; }
           set
           {
               autoChangeCheckBox.Checked = value;
               menuItemAutoChange.Checked = value;
           }
       }

       private System.Drawing.Font font
       {
           get
           {
               return bodyTextBox.Font;
           }
           set
           {
               bodyTextBox.Font                    = value;
           }
       }

       private void InitializeFirst()
       {
           CtoHTML.CtoHTML.Keyword.initialize();
           readFromRegistry();
       }

       private void InitializeOther()
       {
           modeFromProperty();

           CtoHTML.CtoHTML.OnProgressMin  += new CtoHTML.CtoHTML.ProgressMin (ProgressMin );
           CtoHTML.CtoHTML.OnProgressMax  += new CtoHTML.CtoHTML.ProgressMax (ProgressMax );
           CtoHTML.CtoHTML.OnProgressStep += new CtoHTML.CtoHTML.ProgressStep(ProgressStep);
       }

       private const string autoChangeModeKeyName              = "Auto Change Mode";

       private void textRead(System.IO.Stream stream)
       {
           if (stream != null)
           {
               System.Text.Encoding encoding   = CtoHTML.CtoHTML.indexToEncoding(0);
               System.IO.TextReader reader     = new System.IO.StreamReader(stream, encoding);
               bodyTextBox.Text                = reader.ReadToEnd();
               reader.Close();
           }
       }

       private void textRead(string fileName)
       {
           try
           {
               System.IO.FileStream inputFileStream = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
               if (inputFileStream != null)
                   textRead(inputFileStream);
           }
           catch (System.Exception error)
           {
               System.Diagnostics.Trace.WriteLine(error.ToString());
               throw error;
           }
       }

       private void modeFromProperty()
       {
           switch (CtoHTML.CtoHTML.Mode)
           {
               case CtoHTML.CtoHTML.ModeKind.CSharp   :
                   menuItemCsharpMode.Checked       = true ;
                   menuItemCplusplusMode.Checked    = false;
                   csharpModeRadioButton.Checked    = true ;
                   cplusplusModeRadioButton.Checked = false;
                   break;
               case CtoHTML.CtoHTML.ModeKind.CPlusPlus:
                   menuItemCsharpMode.Checked       = false;
                   menuItemCplusplusMode.Checked    = true ;
                   csharpModeRadioButton.Checked    = false;
                   cplusplusModeRadioButton.Checked = true ;
                   break;
               default                                :
                   menuItemCsharpMode.Checked       = true ;
                   menuItemCplusplusMode.Checked    = false;
                   csharpModeRadioButton.Checked    = true ;
                   cplusplusModeRadioButton.Checked = false;
                   break;
           }
       }

       private void readFromRegistry()
       {
           try
           {
               Microsoft.Win32.RegistryKey applicationKey = Registry.getApplicationKey();
               font            = Registry.readFont   (applicationKey);
               AutoChangeMode  = Registry.readBoolean(applicationKey, autoChangeModeKeyName);
               CtoHTML.CtoHTML.read(applicationKey);
           }
           catch (System.Exception error)
           {
               System.Diagnostics.Trace.WriteLine("レジストリの情報が無効でした.デフォルト値を使用します.");
               System.Diagnostics.Trace.WriteLine(error.ToString());
           }
       }

       private void writeToRegistry()
       {
           try
           {
               Microsoft.Win32.RegistryKey applicationKey = Registry.getApplicationKey();
               Registry.writeFont   (applicationKey, font);
               Registry.writeBoolean(applicationKey, autoChangeModeKeyName, AutoChangeMode);
               CtoHTML.CtoHTML.write(applicationKey);
           }
           catch (System.Exception error)
           {
               System.Diagnostics.Trace.WriteLine("レジストリへの書き込みに失敗しました.");
               System.Diagnostics.Trace.WriteLine(error.ToString());
           }
       }

       private void ProgressMin(int n)
       {
           changeProgressBar.Minimum = n;
           changeProgressBar.Step    = 1;
           changeProgressBar.Value   = 1;
       }

       private void ProgressMax(int n)
       {
           changeProgressBar.Maximum = n;
       }

       private void ProgressStep()
       {
           changeProgressBar.PerformStep();
       }

       private static bool isCSharpFile(string fileName)
       {
           fileName        = fileName.TrimEnd(new char[] {' '});
           string[] texts  = fileName.Split  (new char[] {'.'});
           if (texts.Length > 0)
           {
               return (texts[texts.Length - 1].ToLower().CompareTo("cs") == 0);
           }
           return false;
       }

       private static bool isCPlusPlusFile(string fileName)
       {
           fileName        = fileName.TrimEnd(new char[] {' '});
           string[] texts  = fileName.Split  (new char[] {'.'});
           if (texts.Length > 0)
           {
               string ext = texts[texts.Length - 1].ToLower();
               return (ext.CompareTo("cpp") == 0 || ext.CompareTo("h") == 0 || ext.CompareTo("hpp") == 0);
           }
           return false;
       }

       private void changeMode(string fileName)
       {
           if      (isCSharpFile   (fileName))
           {
               CtoHTML.CtoHTML.Mode = CtoHTML.CtoHTML.ModeKind.CSharp   ;
               modeFromProperty();
           }
           else if (isCPlusPlusFile(fileName))
           {
               CtoHTML.CtoHTML.Mode = CtoHTML.CtoHTML.ModeKind.CPlusPlus;
               modeFromProperty();
           }
       }

       private void change()
       {
           modeFromProperty();

           changeProgressBar.Show();
           try
           {
               CtoHTML.CtoHTML.filter(bodyTextBox.Text, outputFileName);
           }
           catch (System.Exception error)
           {
               System.Windows.Forms.MessageBox.Show(error.ToString(), "エラー",
                                                    System.Windows.Forms.MessageBoxButtons.OK,
                                                    System.Windows.Forms.MessageBoxIcon.Error);
               return;
           }
           finally
           {
               changeProgressBar.Hide();
           }

           browser();
       }

       private void autoChange()
       {
           if (AutoChangeMode)
               change();
       }

       private void autoChangeFile(string fileName)
       {
           try
           {
               textRead(fileName);
               changeMode(fileName);
               autoChange();
           }
           catch (System.Exception error)
           {
               System.Diagnostics.Trace.WriteLine(error.ToString());
           }
       }

       private void browser()
       {
           if (CtoHTML.CtoHTML.browserMode && CtoHTML.CtoHTML.browser != string.Empty)
           {
               System.Diagnostics.ProcessStartInfo startInfo   = new System.Diagnostics.ProcessStartInfo(CtoHTML.CtoHTML.browser);
               startInfo.Arguments                             = outputFileName;
               System.Diagnostics.Process.Start(startInfo);
           }
           else
           {
               System.Diagnostics.Process.Start(outputFileName);
           }
       }

       #endregion // Privates

       #region Handler

       private void menuItemOpen_Click(object sender, System.EventArgs e)
       {
           System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
           openFileDialog.Filter           = "C# files (*.cs)|*.cs|C++ source files (*.cpp)|*.cpp|C++ header files (*.h)|*.h|C++ header files (*.hpp)|*.hpp|All files (*.*)|*.*";
           openFileDialog.FilterIndex      = 0;
           openFileDialog.RestoreDirectory = true ;

           if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
           {
               System.IO.Stream stream = openFileDialog.OpenFile();
               if (stream != null)
               {
                   textRead(stream);
                   stream.Close();
                   changeMode(openFileDialog.FileName);
                   autoChange();
               }
           }
       }

       private void menuItemChange_Click(object sender, System.EventArgs e)
       {
           change();
       }

       private void menuItemExit_Click(object sender, System.EventArgs e)
       {
           System.Windows.Forms.Application.Exit();
       }

       private void menuItemPaste_Click(object sender, System.EventArgs e)
       {
           bodyTextBox.Paste();
           autoChange();
       }

       private void menuItemClear_Click(object sender, System.EventArgs e)
       {
           bodyTextBox.Text = string.Empty;
       }

       private void menuItemHtmlOption_Click(object sender, System.EventArgs e)
       {
           OptionForm form = new OptionForm(font);
           form.ShowDialog(this);
       }

       private void menuItemFont_Click(object sender, System.EventArgs e)
       {
           System.Windows.Forms.FontDialog fontDialog = new System.Windows.Forms.FontDialog();
           fontDialog.AllowVerticalFonts   = false;
           fontDialog.Font                 = font;
           if (fontDialog.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
               font = fontDialog.Font;
       }

       private void menuItemAutoChange_Click(object sender, System.EventArgs e)
       {
           AutoChangeMode = !AutoChangeMode;
       }

       private void autoChangeCheckBox_Click(object sender, System.EventArgs e)
       {
           menuItemAutoChange.Checked = AutoChangeMode;
       }

       private void menuItemCsharpMode_Click(object sender, System.EventArgs e)
       {
           CtoHTML.CtoHTML.Mode            = CtoHTML.CtoHTML.ModeKind.CSharp;
           modeFromProperty();
       }

       private void menuItemCplusplusMode_Click(object sender, System.EventArgs e)
       {
           CtoHTML.CtoHTML.Mode            = CtoHTML.CtoHTML.ModeKind.CPlusPlus;
           modeFromProperty();
       }

       private void csharpModeRadioButton_Click(object sender, System.EventArgs e)
       {
           CtoHTML.CtoHTML.Mode            = CtoHTML.CtoHTML.ModeKind.CSharp;

           menuItemCsharpMode.Checked      = true ;
           menuItemCplusplusMode.Checked   = false;
       }

       private void cplusplusModeRadioButton_Click(object sender, System.EventArgs e)
       {
           CtoHTML.CtoHTML.Mode            = CtoHTML.CtoHTML.ModeKind.CPlusPlus;

           menuItemCsharpMode.Checked      = false;
           menuItemCplusplusMode.Checked   = true ;
       }

       private void menuItemHelpIndex_Click(object sender, System.EventArgs e)
       {
           System.Diagnostics.Process.Start(helpFileName);
       }

       private void menuItemAbout_Click(object sender, System.EventArgs e)
       {
           System.Windows.Forms.Form aboutDialog = new AboutDialogBox();
           aboutDialog.ShowDialog(this);
       }

       private void bodyTextBox_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
       {
           if (e.Data.GetDataPresent(System.Windows.Forms.DataFormats.FileDrop))
           {
               string[] fileNames = (string[])e.Data.GetData(System.Windows.Forms.DataFormats.FileDrop);
               if (fileNames.Length == 1)
               {
                   e.Effect = System.Windows.Forms.DragDropEffects.Copy;
                   return;
               }
           }
           e.Effect = System.Windows.Forms.DragDropEffects.None;
       }

       private void bodyTextBox_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
       {
           string[] fileNames = (string[])e.Data.GetData(System.Windows.Forms.DataFormats.FileDrop);
           System.Diagnostics.Debug.Assert(fileNames.Length == 1);
           autoChangeFile(fileNames[0]);
       }

       #endregion // Handler
   }

   /// <summary>Registry</summary>
   class Registry
   {
       #region Implementers

       public static Microsoft.Win32.RegistryKey getApplicationKey()
       {
           Microsoft.Win32.RegistryKey rootKey         = Microsoft.Win32.Registry.CurrentUser;
           Microsoft.Win32.RegistryKey softwareKey     = rootKey.CreateSubKey(softwareKeyName_);
           Microsoft.Win32.RegistryKey companyKey      = softwareKey.CreateSubKey(companyName);
           Microsoft.Win32.RegistryKey applicationKey  = companyKey.CreateSubKey(applicationName);
           return applicationKey;
       }

       public static void writeFont(Microsoft.Win32.RegistryKey key, System.Drawing.Font font)
       {
           Microsoft.Win32.RegistryKey fontKey = key.CreateSubKey(fontKeyName_);

           fontKey.SetValue(fontFamilyNameKeyName_    ,         font.FontFamily.Name);
           fontKey.SetValue(fontEmSizeKeyName_        , (double)font.Size           );
           fontKey.SetValue(fontStyleKeyName_         , (int   )font.Style          );
           fontKey.SetValue(fontGraphicsUnitKeyName_  , (int   )font.Unit           );
           fontKey.SetValue(fontGdiCharSetKeyName_    , (int   )font.GdiCharSet     );
           writeBoolean(fontKey, fontGdiVerticalFontKeyName_, font.GdiVerticalFont);
       }

       public static System.Drawing.Font readFont(Microsoft.Win32.RegistryKey key)
       {
           Microsoft.Win32.RegistryKey fontKey         = key.CreateSubKey(fontKeyName_);

           string                      familyName      = (string)fontKey.GetValue(fontFamilyNameKeyName_);
           float                       emSize          = (float)System.Xml.XmlConvert.ToDouble((string)fontKey.GetValue(fontEmSizeKeyName_));
           System.Drawing.FontStyle    style           = (System.Drawing.FontStyle   )(int)fontKey.GetValue(fontStyleKeyName_);
           System.Drawing.GraphicsUnit unit            = (System.Drawing.GraphicsUnit)(int)fontKey.GetValue(fontGraphicsUnitKeyName_);
           byte                        gdiCharSet      = (byte)(int)fontKey.GetValue(fontGdiCharSetKeyName_);
           bool                        gdiVerticalFont = readBoolean(fontKey, fontGdiVerticalFontKeyName_);

           return new System.Drawing.Font(familyName, emSize, style, unit, gdiCharSet, gdiVerticalFont);
       }

       public static void writeBoolean(Microsoft.Win32.RegistryKey key, string keyName, bool b)
       {
           key.SetValue(keyName, b);
       }

       public static bool readBoolean(Microsoft.Win32.RegistryKey key, string keyName)
       {
           return (((string)key.GetValue(keyName)).ToLower().CompareTo("true") == 0);
       }

       #endregion // Implementers

       #region Properties

       public static string companyName
       {
           get { return companyName_; }
       }

       public static string applicationName
       {
           get { return applicationName_; }
       }

       #endregion // Properties

       #region Private

       private const string softwareKeyName_               = "Software";
       private const string companyName_                   = "Sho's Software";
       private const string applicationName_               = "CSharpToHTML";
       private const string fontKeyName_                   = "Font";
       private const string fontFamilyNameKeyName_         = "Family Name";
       private const string fontEmSizeKeyName_             = "Em Size";
       private const string fontStyleKeyName_              = "Style";
       private const string fontGraphicsUnitKeyName_       = "Graphics Unit";
       private const string fontGdiCharSetKeyName_         = "GDI CharSet";
       private const string fontGdiVerticalFontKeyName_    = "GDI Vertical Font";

       #endregion // Private
   }
}


C#/C++ のソースを HTML に変換する ツール CSharpToHTML