From 03b81c31bad93c32d468ba5e24be8780664659a9 Mon Sep 17 00:00:00 2001 From: FDscend <113600072+FDscend@users.noreply.github.com> Date: Fri, 16 Feb 2024 22:51:42 +0800 Subject: [PATCH] Add files via upload --- ChangeCharForm.Designer.cs | 82 +++++++- ChangeCharForm.cs | 28 +++ CharMatchForm.Designer.cs | 105 ++++++++++- CharMatchForm.cs | 38 +++- HighlightForm.Designer.cs | 94 ++++++++++ HighlightForm.cs | 94 ++++++++++ HighlightForm.resx | 120 ++++++++++++ Ribbon1.Designer.cs | 74 +++++--- Ribbon1.cs | 310 ++++++++++++++++++++---------- Ribbon1.resx | 374 ------------------------------------- SettingForm.Designer.cs | 18 +- SettingForm.cs | 12 ++ SettingForm.resx | 3 + WordAddIn1.csproj | 33 +++- app.config | 2 +- packages.config | 5 +- 16 files changed, 877 insertions(+), 515 deletions(-) create mode 100644 HighlightForm.Designer.cs create mode 100644 HighlightForm.cs create mode 100644 HighlightForm.resx diff --git a/ChangeCharForm.Designer.cs b/ChangeCharForm.Designer.cs index cede5df..51a7f18 100644 --- a/ChangeCharForm.Designer.cs +++ b/ChangeCharForm.Designer.cs @@ -32,6 +32,13 @@ private void InitializeComponent() this.checkedListBox1 = new System.Windows.Forms.CheckedListBox(); this.label1 = new System.Windows.Forms.Label(); this.button1 = new System.Windows.Forms.Button(); + this.addListChar = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.labelTo = new System.Windows.Forms.Label(); + this.addTo = new System.Windows.Forms.TextBox(); + this.labelFrom = new System.Windows.Forms.Label(); + this.addFrom = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); this.SuspendLayout(); // // checkedListBox1 @@ -42,7 +49,7 @@ private void InitializeComponent() this.checkedListBox1.Location = new System.Drawing.Point(-1, 52); this.checkedListBox1.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6); this.checkedListBox1.Name = "checkedListBox1"; - this.checkedListBox1.Size = new System.Drawing.Size(200, 720); + this.checkedListBox1.Size = new System.Drawing.Size(200, 504); this.checkedListBox1.TabIndex = 0; // // label1 @@ -60,7 +67,7 @@ private void InitializeComponent() // this.button1.BackColor = System.Drawing.Color.Wheat; this.button1.Font = new System.Drawing.Font("宋体", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.button1.Location = new System.Drawing.Point(-1, 769); + this.button1.Location = new System.Drawing.Point(3, 565); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(200, 72); this.button1.TabIndex = 2; @@ -68,18 +75,81 @@ private void InitializeComponent() this.button1.UseVisualStyleBackColor = false; this.button1.Click += new System.EventHandler(this.button1_Click); // + // addListChar + // + this.addListChar.BackColor = System.Drawing.Color.Wheat; + this.addListChar.Font = new System.Drawing.Font("宋体", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.addListChar.Location = new System.Drawing.Point(6, 129); + this.addListChar.Name = "addListChar"; + this.addListChar.Size = new System.Drawing.Size(188, 55); + this.addListChar.TabIndex = 3; + this.addListChar.Text = "+"; + this.addListChar.UseVisualStyleBackColor = false; + this.addListChar.Click += new System.EventHandler(this.addListChar_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.labelTo); + this.groupBox1.Controls.Add(this.addTo); + this.groupBox1.Controls.Add(this.labelFrom); + this.groupBox1.Controls.Add(this.addFrom); + this.groupBox1.Controls.Add(this.addListChar); + this.groupBox1.Location = new System.Drawing.Point(3, 663); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(200, 193); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "增加替换"; + // + // labelTo + // + this.labelTo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.labelTo.Location = new System.Drawing.Point(6, 84); + this.labelTo.Name = "labelTo"; + this.labelTo.Size = new System.Drawing.Size(80, 39); + this.labelTo.TabIndex = 7; + this.labelTo.Text = "To"; + this.labelTo.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // addTo + // + this.addTo.Location = new System.Drawing.Point(92, 84); + this.addTo.Name = "addTo"; + this.addTo.Size = new System.Drawing.Size(102, 39); + this.addTo.TabIndex = 6; + // + // labelFrom + // + this.labelFrom.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.labelFrom.Location = new System.Drawing.Point(6, 38); + this.labelFrom.Name = "labelFrom"; + this.labelFrom.Size = new System.Drawing.Size(80, 39); + this.labelFrom.TabIndex = 5; + this.labelFrom.Text = "From"; + this.labelFrom.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // addFrom + // + this.addFrom.Location = new System.Drawing.Point(92, 38); + this.addFrom.Name = "addFrom"; + this.addFrom.Size = new System.Drawing.Size(102, 39); + this.addFrom.TabIndex = 4; + // // ChangeCharForm // this.AutoScaleDimensions = new System.Drawing.SizeF(14F, 28F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.OldLace; + this.Controls.Add(this.groupBox1); this.Controls.Add(this.button1); this.Controls.Add(this.label1); this.Controls.Add(this.checkedListBox1); this.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6); this.Name = "ChangeCharForm"; - this.Size = new System.Drawing.Size(200, 1020); + this.Size = new System.Drawing.Size(208, 1020); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -90,5 +160,11 @@ private void InitializeComponent() private System.Windows.Forms.CheckedListBox checkedListBox1; private System.Windows.Forms.Label label1; private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button addListChar; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label labelTo; + private System.Windows.Forms.TextBox addTo; + private System.Windows.Forms.Label labelFrom; + private System.Windows.Forms.TextBox addFrom; } } diff --git a/ChangeCharForm.cs b/ChangeCharForm.cs index 153be5f..1f57350 100644 --- a/ChangeCharForm.cs +++ b/ChangeCharForm.cs @@ -83,5 +83,33 @@ private void button1_Click(object sender, EventArgs e) SetjsonFun(PresetFile, js); } + + private void addListChar_Click(object sender, EventArgs e) + { + string textFrom = addFrom.Text; + string textTo = addTo.Text; + + if (textFrom.Length == 0) MessageBox.Show("From 字符串不能为空"); + else + { + JObject js = ImportJSON(PresetFile); + ((JArray)js["data"]).Add( + new JObject() + { + { "from", textFrom}, + { "to", textTo }, + { "checked", 1 } + } + ); + + SetjsonFun(PresetFile, js); + + checkedListBox1.Items.Add(textFrom + " -> " + textTo, true); + + addFrom.Text = ""; + addTo.Text = ""; + } + + } } } diff --git a/CharMatchForm.Designer.cs b/CharMatchForm.Designer.cs index da0ce08..b5db261 100644 --- a/CharMatchForm.Designer.cs +++ b/CharMatchForm.Designer.cs @@ -33,6 +33,15 @@ private void InitializeComponent() this.label1 = new System.Windows.Forms.Label(); this.button1 = new System.Windows.Forms.Button(); this.label2 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.txtL = new System.Windows.Forms.Label(); + this.addLeft = new System.Windows.Forms.TextBox(); + this.addRight = new System.Windows.Forms.TextBox(); + this.txtR = new System.Windows.Forms.Label(); + this.addName = new System.Windows.Forms.TextBox(); + this.txtName = new System.Windows.Forms.Label(); + this.addListChar = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); this.SuspendLayout(); // // checkedListBox1 @@ -43,7 +52,7 @@ private void InitializeComponent() this.checkedListBox1.Location = new System.Drawing.Point(0, 50); this.checkedListBox1.Margin = new System.Windows.Forms.Padding(5); this.checkedListBox1.Name = "checkedListBox1"; - this.checkedListBox1.Size = new System.Drawing.Size(200, 720); + this.checkedListBox1.Size = new System.Drawing.Size(654, 432); this.checkedListBox1.TabIndex = 0; // // label1 @@ -60,9 +69,9 @@ private void InitializeComponent() // this.button1.BackColor = System.Drawing.Color.Moccasin; this.button1.Font = new System.Drawing.Font("宋体", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.button1.Location = new System.Drawing.Point(-1, 769); + this.button1.Location = new System.Drawing.Point(0, 490); this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(200, 60); + this.button1.Size = new System.Drawing.Size(317, 60); this.button1.TabIndex = 2; this.button1.Text = "查询"; this.button1.UseVisualStyleBackColor = false; @@ -70,17 +79,91 @@ private void InitializeComponent() // // label2 // - this.label2.Location = new System.Drawing.Point(3, 832); + this.label2.Location = new System.Drawing.Point(4, 553); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(177, 92); + this.label2.Size = new System.Drawing.Size(313, 92); this.label2.TabIndex = 3; this.label2.Text = "1.勾选符号\n2.选中文字\n3.点击查询"; // + // groupBox1 + // + this.groupBox1.Controls.Add(this.addListChar); + this.groupBox1.Controls.Add(this.addName); + this.groupBox1.Controls.Add(this.txtName); + this.groupBox1.Controls.Add(this.addRight); + this.groupBox1.Controls.Add(this.txtR); + this.groupBox1.Controls.Add(this.addLeft); + this.groupBox1.Controls.Add(this.txtL); + this.groupBox1.Location = new System.Drawing.Point(3, 676); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(314, 239); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "增加匹配"; + // + // txtL + // + this.txtL.Location = new System.Drawing.Point(3, 35); + this.txtL.Name = "txtL"; + this.txtL.Size = new System.Drawing.Size(79, 39); + this.txtL.TabIndex = 0; + this.txtL.Text = "Left"; + // + // addLeft + // + this.addLeft.Location = new System.Drawing.Point(88, 35); + this.addLeft.Name = "addLeft"; + this.addLeft.Size = new System.Drawing.Size(220, 39); + this.addLeft.TabIndex = 1; + // + // addRight + // + this.addRight.Location = new System.Drawing.Point(88, 80); + this.addRight.Name = "addRight"; + this.addRight.Size = new System.Drawing.Size(220, 39); + this.addRight.TabIndex = 3; + // + // txtR + // + this.txtR.Location = new System.Drawing.Point(3, 80); + this.txtR.Name = "txtR"; + this.txtR.Size = new System.Drawing.Size(94, 39); + this.txtR.TabIndex = 2; + this.txtR.Text = "Right"; + // + // addName + // + this.addName.Location = new System.Drawing.Point(88, 122); + this.addName.Name = "addName"; + this.addName.Size = new System.Drawing.Size(220, 39); + this.addName.TabIndex = 5; + // + // txtName + // + this.txtName.Location = new System.Drawing.Point(3, 122); + this.txtName.Name = "txtName"; + this.txtName.Size = new System.Drawing.Size(79, 39); + this.txtName.TabIndex = 4; + this.txtName.Text = "Name"; + // + // addListChar + // + this.addListChar.BackColor = System.Drawing.Color.Moccasin; + this.addListChar.Font = new System.Drawing.Font("宋体", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.addListChar.Location = new System.Drawing.Point(8, 167); + this.addListChar.Name = "addListChar"; + this.addListChar.Size = new System.Drawing.Size(300, 60); + this.addListChar.TabIndex = 5; + this.addListChar.Text = "+"; + this.addListChar.UseVisualStyleBackColor = false; + this.addListChar.Click += new System.EventHandler(this.addListChar_Click); + // // CharMatchForm // this.AutoScaleDimensions = new System.Drawing.SizeF(14F, 28F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.OldLace; + this.Controls.Add(this.groupBox1); this.Controls.Add(this.label2); this.Controls.Add(this.button1); this.Controls.Add(this.label1); @@ -88,7 +171,9 @@ private void InitializeComponent() this.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.Margin = new System.Windows.Forms.Padding(5); this.Name = "CharMatchForm"; - this.Size = new System.Drawing.Size(200, 1073); + this.Size = new System.Drawing.Size(659, 1073); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -100,5 +185,13 @@ private void InitializeComponent() private System.Windows.Forms.Label label1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label2; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button addListChar; + private System.Windows.Forms.TextBox addName; + private System.Windows.Forms.Label txtName; + private System.Windows.Forms.TextBox addRight; + private System.Windows.Forms.Label txtR; + private System.Windows.Forms.TextBox addLeft; + private System.Windows.Forms.Label txtL; } } diff --git a/CharMatchForm.cs b/CharMatchForm.cs index 174de4c..8ac85a2 100644 --- a/CharMatchForm.cs +++ b/CharMatchForm.cs @@ -37,7 +37,7 @@ public CharMatchForm() bool ck; if (jsob["checked"].ToString() == "1") ck = true; else ck = false; - checkedListBox1.Items.Add(jsob["name"], ck); + checkedListBox1.Items.Add(String.Format("{0,6}", jsob["name"]) + "\t" + jsob["left"] + " " + jsob["right"], ck); } } @@ -154,5 +154,41 @@ private void button1_Click(object sender, EventArgs e) SetjsonFun(PresetFile, js); } + + private void addListChar_Click(object sender, EventArgs e) + { + string textLeft = addLeft.Text; + string textRight = addRight.Text; + string textName = addName.Text; + + + if (textLeft.Length == 0) MessageBox.Show("Left 不能为空"); + else if (textLeft.Length != 1) MessageBox.Show("Left 应当为单个字符"); + else if (textRight.Length == 0) MessageBox.Show("Right 不能为空"); + else if (textRight.Length != 1) MessageBox.Show("Right 应当为单个字符"); + else if (textName.Length == 0) MessageBox.Show("Name 不能为空"); + else + { + JObject js = ImportJSON(PresetFile); + + ((JArray)js["data"]).Add( + new JObject() + { + {"name", textName }, + {"left", textLeft }, + {"right", textRight }, + {"checked", 1 } + } + ); + + SetjsonFun(PresetFile, js); + + checkedListBox1.Items.Add(String.Format("{0,6}", textName) + "\t" + textLeft + " " + textRight, true); + + addLeft.Text = ""; + addRight.Text = ""; + addName.Text = ""; + } + } } } diff --git a/HighlightForm.Designer.cs b/HighlightForm.Designer.cs new file mode 100644 index 0000000..61ff1f7 --- /dev/null +++ b/HighlightForm.Designer.cs @@ -0,0 +1,94 @@ + +namespace WordAddIn1 +{ + partial class HighlightForm + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.webView21 = new Microsoft.Web.WebView2.WinForms.WebView2(); + this.insertCode = new System.Windows.Forms.Button(); + this.onlineMod = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.webView21)).BeginInit(); + this.SuspendLayout(); + // + // webView21 + // + this.webView21.AllowExternalDrop = true; + this.webView21.CreationProperties = null; + this.webView21.DefaultBackgroundColor = System.Drawing.Color.White; + this.webView21.Location = new System.Drawing.Point(0, 80); + this.webView21.Name = "webView21"; + this.webView21.Size = new System.Drawing.Size(319, 706); + this.webView21.TabIndex = 0; + this.webView21.ZoomFactor = 1.2D; + // + // insertCode + // + this.insertCode.BackColor = System.Drawing.Color.Wheat; + this.insertCode.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.insertCode.Location = new System.Drawing.Point(3, 3); + this.insertCode.Name = "insertCode"; + this.insertCode.Size = new System.Drawing.Size(122, 71); + this.insertCode.TabIndex = 1; + this.insertCode.Text = "插入代码"; + this.insertCode.UseVisualStyleBackColor = false; + this.insertCode.Click += new System.EventHandler(this.insertCode_Click); + // + // onlineMod + // + this.onlineMod.BackColor = System.Drawing.Color.Wheat; + this.onlineMod.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.onlineMod.Location = new System.Drawing.Point(131, 3); + this.onlineMod.Name = "onlineMod"; + this.onlineMod.Size = new System.Drawing.Size(122, 71); + this.onlineMod.TabIndex = 2; + this.onlineMod.Text = "切换在线模式"; + this.onlineMod.UseVisualStyleBackColor = false; + this.onlineMod.Click += new System.EventHandler(this.onlineMod_Click); + // + // HighlightForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.OldLace; + this.Controls.Add(this.webView21); + this.Controls.Add(this.onlineMod); + this.Controls.Add(this.insertCode); + this.Name = "HighlightForm"; + this.Size = new System.Drawing.Size(322, 786); + ((System.ComponentModel.ISupportInitialize)(this.webView21)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.Web.WebView2.WinForms.WebView2 webView21; + private System.Windows.Forms.Button insertCode; + private System.Windows.Forms.Button onlineMod; + } +} diff --git a/HighlightForm.cs b/HighlightForm.cs new file mode 100644 index 0000000..b9eb0dc --- /dev/null +++ b/HighlightForm.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Microsoft.Web.WebView2.Core; +using Microsoft.Office.Interop.Word; + +namespace WordAddIn1 +{ + public partial class HighlightForm : UserControl + { + string FDscendHome = Ribbon1.FDscendHome; + string highlight_index = Ribbon1.highlight_index; + string online_url = @"https://highlightjs.org/demo"; + + public HighlightForm() + { + InitializeComponent(); + + InitializeWebView2Async(); + +#if DEBUG + webView21.Location = new System.Drawing.Point(0, 80); +#endif +#if !DEBUG + webView21.Location = new System.Drawing.Point(0, 0); +#endif + + insertCode.Width = 0; + onlineMod.Left = insertCode.Left; + onlineMod.Text = "切换离线模式"; + this.Resize += new System.EventHandler(this.Form_Resize); + } + + private async void InitializeWebView2Async() + { + var env = await CoreWebView2Environment.CreateAsync(null, FDscendHome); + await webView21.EnsureCoreWebView2Async(env); + //webView21.CoreWebView2.Navigate(highlight_index); + webView21.CoreWebView2.Navigate(online_url); + } + + private void Form_Resize(object sender, EventArgs e) + { + webView21.Size = this.ClientSize - new System.Drawing.Size(webView21.Location); + onlineMod.Width = this.ClientSize.Width - insertCode.Width + insertCode.Left; + } + + private void insertCode_Click(object sender, EventArgs e) + { + webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById(\"codeContent\").innerHTML=\"\""); + foreach (Microsoft.Office.Interop.Word.Paragraph paragraph in Globals.ThisAddIn.Application.Selection.Paragraphs) + { + string codeContent = paragraph.Range.Text; + codeContent = codeContent.Substring(0, codeContent.Length - 1); + + webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById(\"codeContent\").innerHTML+=\"{codeContent}\"\n"); + } + + //string codeContent = Globals.ThisAddIn.Application.Selection.Text; + //codeContent = codeContent.Substring(0, codeContent.Length - 1); + + //MessageBox.Show(codeContent); + //webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById(\"codeContent\").textContent=unescape(\"{codeContent}\")"); + + //webView21.CoreWebView2.ExecuteScriptAsync("hljs.highlightAll()"); + } + + private void onlineMod_Click(object sender, EventArgs e) + { + if (insertCode.Width != 0) + { + insertCode.Width = 0; + onlineMod.Width = this.ClientSize.Width; + onlineMod.Left = insertCode.Left; + onlineMod.Text = "切换离线模式"; + webView21.CoreWebView2.Navigate(online_url); + } + else + { + insertCode.Width = 122; + onlineMod.Left = insertCode.Left + insertCode.Width; + onlineMod.Text = "切换在线模式"; + webView21.CoreWebView2.Navigate(highlight_index); + } + + } + } +} diff --git a/HighlightForm.resx b/HighlightForm.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/HighlightForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Ribbon1.Designer.cs b/Ribbon1.Designer.cs index 5d01f46..c10f82c 100644 --- a/Ribbon1.Designer.cs +++ b/Ribbon1.Designer.cs @@ -43,10 +43,10 @@ private void InitializeComponent() this.Code2 = this.Factory.CreateRibbonGroup(); this.CodeGroup4 = this.Factory.CreateRibbonGroup(); this.ToolsBox = this.Factory.CreateRibbonGroup(); + this.separator1 = this.Factory.CreateRibbonSeparator(); this.runCodeGroup = this.Factory.CreateRibbonGroup(); this.appendCodeMod = this.Factory.CreateRibbonCheckBox(); this.control = this.Factory.CreateRibbonGroup(); - this.separator1 = this.Factory.CreateRibbonSeparator(); this.button_tuisong = this.Factory.CreateRibbonButton(); this.button_MainTitle = this.Factory.CreateRibbonButton(); this.button_title_1 = this.Factory.CreateRibbonButton(); @@ -96,16 +96,18 @@ private void InitializeComponent() this.styleShadeClear = this.Factory.CreateRibbonButton(); this.TableColoring = this.Factory.CreateRibbonButton(); this.ThreeLine = this.Factory.CreateRibbonButton(); - this.FileTabOnOff = this.Factory.CreateRibbonToggleButton(); this.changecharCE = this.Factory.CreateRibbonButton(); this.checkCharMatch = this.Factory.CreateRibbonButton(); this.del_header_line = this.Factory.CreateRibbonButton(); this.inlineCode = this.Factory.CreateRibbonButton(); + this.FileTabOnOff = this.Factory.CreateRibbonToggleButton(); this.bib2gbt = this.Factory.CreateRibbonButton(); + this.highlight = this.Factory.CreateRibbonButton(); this.runCode = this.Factory.CreateRibbonButton(); this.chooseCode = this.Factory.CreateRibbonMenu(); this.choosePython = this.Factory.CreateRibbonButton(); this.chooseR = this.Factory.CreateRibbonButton(); + this.chooseJava = this.Factory.CreateRibbonButton(); this.SettingBt = this.Factory.CreateRibbonButton(); this.About = this.Factory.CreateRibbonButton(); this.button1 = this.Factory.CreateRibbonButton(); @@ -204,13 +206,18 @@ private void InitializeComponent() this.ToolsBox.Items.Add(this.checkCharMatch); this.ToolsBox.Items.Add(this.del_header_line); this.ToolsBox.Items.Add(this.inlineCode); + this.ToolsBox.Items.Add(this.bib2gbt); this.ToolsBox.Items.Add(this.separator1); this.ToolsBox.Items.Add(this.FileTabOnOff); - this.ToolsBox.Items.Add(this.bib2gbt); + this.ToolsBox.Items.Add(this.highlight); this.ToolsBox.Label = "工具箱"; this.ToolsBox.Name = "ToolsBox"; this.ToolsBox.Visible = false; // + // separator1 + // + this.separator1.Name = "separator1"; + // // runCodeGroup // this.runCodeGroup.Items.Add(this.runCode); @@ -235,10 +242,6 @@ private void InitializeComponent() this.control.Label = "控制"; this.control.Name = "control"; // - // separator1 - // - this.separator1.Name = "separator1"; - // // button_tuisong // this.button_tuisong.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge; @@ -408,7 +411,7 @@ private void InitializeComponent() this.bilibiliPic.Name = "bilibiliPic"; this.bilibiliPic.ScreenTip = "B站视频or直播封面"; this.bilibiliPic.ShowImage = true; - this.bilibiliPic.SuperTip = "输入B站视频or直播连接,插入封面图至文档选中处。\n\n注意:此功能需要python环境"; + this.bilibiliPic.SuperTip = "输入B站视频or直播连接,插入封面图至文档选中处"; this.bilibiliPic.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.bilibiliPic_Click); // // CodeFormat @@ -686,16 +689,6 @@ private void InitializeComponent() this.ThreeLine.SuperTip = "不能有合并单元格"; this.ThreeLine.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.ThreeLine_Click); // - // FileTabOnOff - // - this.FileTabOnOff.Image = ((System.Drawing.Image)(resources.GetObject("FileTabOnOff.Image"))); - this.FileTabOnOff.Label = "标签栏"; - this.FileTabOnOff.Name = "FileTabOnOff"; - this.FileTabOnOff.ScreenTip = "【实验性】标签栏"; - this.FileTabOnOff.ShowImage = true; - this.FileTabOnOff.SuperTip = "在多个文档间切换(请注意及时保存文档)"; - this.FileTabOnOff.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.FileTabOnOff_Click); - // // changecharCE // this.changecharCE.Image = ((System.Drawing.Image)(resources.GetObject("changecharCE.Image"))); @@ -736,6 +729,16 @@ private void InitializeComponent() this.inlineCode.SuperTip = "选中文字,按照行内代码样式排版"; this.inlineCode.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.inlineCode_Click); // + // FileTabOnOff + // + this.FileTabOnOff.Image = ((System.Drawing.Image)(resources.GetObject("FileTabOnOff.Image"))); + this.FileTabOnOff.Label = "标签栏"; + this.FileTabOnOff.Name = "FileTabOnOff"; + this.FileTabOnOff.ScreenTip = "【实验性】标签栏"; + this.FileTabOnOff.ShowImage = true; + this.FileTabOnOff.SuperTip = "在多个文档间切换(请注意及时保存文档)"; + this.FileTabOnOff.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.FileTabOnOff_Click); + // // bib2gbt // this.bib2gbt.Image = global::WordAddIn1.Properties.Resources.bib2gbt; @@ -743,18 +746,28 @@ private void InitializeComponent() this.bib2gbt.Name = "bib2gbt"; this.bib2gbt.ScreenTip = "【实验性】将BibTeX转换成GBT格式"; this.bib2gbt.ShowImage = true; - this.bib2gbt.SuperTip = "将BibTeX转换成GBT7714-2015格式,并插入到选中位置.\n\n注意:此功能需要python 3.10+环境"; + this.bib2gbt.SuperTip = "将BibTeX转换成GBT7714-2015格式,并插入到选中位置."; this.bib2gbt.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.bib2gbt_Click); // + // highlight + // + this.highlight.Image = global::WordAddIn1.Properties.Resources.highlight; + this.highlight.Label = "代码高亮"; + this.highlight.Name = "highlight"; + this.highlight.ScreenTip = "【实验性】代码高亮"; + this.highlight.ShowImage = true; + this.highlight.SuperTip = "打开代码高亮面板"; + this.highlight.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.highlight_Click); + // // runCode // this.runCode.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge; - this.runCode.Image = ((System.Drawing.Image)(resources.GetObject("runCode.Image"))); + this.runCode.Image = global::WordAddIn1.Properties.Resources.codeRun; this.runCode.Label = "运行代码"; this.runCode.Name = "runCode"; this.runCode.ScreenTip = "运行代码"; this.runCode.ShowImage = true; - this.runCode.SuperTip = "选中代码,点击运行。打印结果到选段下方。注意:需要相应编译环境"; + this.runCode.SuperTip = "选中代码,点击运行。打印结果到选段下方。\n\n注意:需要相应编译环境"; this.runCode.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.runCode_Click); // // chooseCode @@ -762,6 +775,7 @@ private void InitializeComponent() this.chooseCode.Image = ((System.Drawing.Image)(resources.GetObject("chooseCode.Image"))); this.chooseCode.Items.Add(this.choosePython); this.chooseCode.Items.Add(this.chooseR); + this.chooseCode.Items.Add(this.chooseJava); this.chooseCode.Label = "当前语言"; this.chooseCode.Name = "chooseCode"; this.chooseCode.ScreenTip = "选择代码语言"; @@ -770,11 +784,12 @@ private void InitializeComponent() // // choosePython // - this.choosePython.Image = ((System.Drawing.Image)(resources.GetObject("choosePython.Image"))); + this.choosePython.Image = global::WordAddIn1.Properties.Resources.python; this.choosePython.Label = "python"; this.choosePython.Name = "choosePython"; - this.choosePython.ScreenTip = "python"; + this.choosePython.ScreenTip = "Python"; this.choosePython.ShowImage = true; + this.choosePython.SuperTip = "需要 Python 环境"; this.choosePython.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.choosePython_Click); // // chooseR @@ -784,8 +799,19 @@ private void InitializeComponent() this.chooseR.Name = "chooseR"; this.chooseR.ScreenTip = "R"; this.chooseR.ShowImage = true; + this.chooseR.SuperTip = "需要 R 环境"; this.chooseR.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.chooseR_Click); // + // chooseJava + // + this.chooseJava.Image = global::WordAddIn1.Properties.Resources.java; + this.chooseJava.Label = "java"; + this.chooseJava.Name = "chooseJava"; + this.chooseJava.ScreenTip = "Java"; + this.chooseJava.ShowImage = true; + this.chooseJava.SuperTip = "需要 Java 环境"; + this.chooseJava.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.chooseJava_Click); + // // SettingBt // this.SettingBt.Image = global::WordAddIn1.Properties.Resources.settings; @@ -912,6 +938,8 @@ private void InitializeComponent() internal Microsoft.Office.Tools.Ribbon.RibbonCheckBox appendCodeMod; internal Microsoft.Office.Tools.Ribbon.RibbonButton bib2gbt; internal Microsoft.Office.Tools.Ribbon.RibbonSeparator separator1; + internal Microsoft.Office.Tools.Ribbon.RibbonButton chooseJava; + internal Microsoft.Office.Tools.Ribbon.RibbonButton highlight; } partial class ThisRibbonCollection diff --git a/Ribbon1.cs b/Ribbon1.cs index b0f3949..ec4bb88 100644 --- a/Ribbon1.cs +++ b/Ribbon1.cs @@ -16,7 +16,6 @@ using System.Runtime.InteropServices; using System.Text.RegularExpressions; //正则表达式 using System.Diagnostics; -//using RDotNet; using System.Threading.Tasks; using System.Net.NetworkInformation; @@ -30,13 +29,14 @@ public partial class Ribbon1 //全局路径 #if DEBUG - static string FDscendHome = "D:\\code\\WordAddIn1\\FDscend"; + public static string FDscendHome = "D:\\code\\WordAddIn1\\FDscend"; #endif #if !DEBUG - static string FDscendHome = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\分点作答\\FDscend"; + public static string FDscendHome = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\分点作答\\FDscend"; #endif public static string ControlKey = FDscendHome + Properties.Resources.ControlKey; public static string CheckUpdateFile = FDscendHome + Properties.Resources.CheckUpdateFile; + public static string SettingsFile = FDscendHome + Properties.Resources.SettingsFile; public static string ChangeCharList = FDscendHome + Properties.Resources.PresetChangeCharList; public static string CharMatchList = FDscendHome + Properties.Resources.PresetCharMatchList; @@ -48,6 +48,7 @@ public partial class Ribbon1 public static string PresetToolsBoxTable = FDscendHome + Properties.Resources.PresetToolsBoxTable; public static string XMTsetting = FDscendHome + Properties.Resources.PresetXMTsetting; public static string XMTstyle = FDscendHome + Properties.Resources.PresetXMTstyle; + public static string highlight_index = FDscendHome + Properties.Resources.highlight_index; public static string tempFile = FDscendHome + "\\temp"; public static string scriptsDic = FDscendHome + "\\scripts"; @@ -84,24 +85,26 @@ public partial class Ribbon1 ColorDialog MyColorDialog = new ColorDialog(); - string pythonEnv; - int python_exit; string codeChoice = "python"; static int codeOutputCount = 0; static int codeOutputTotal = 0; + static int gbtOutputCount = 1; + //窗体句柄字典 private Dictionary HwndPaneDic_tab = new Dictionary { }; private Dictionary HwndPaneDic_tableColor = new Dictionary { }; private Dictionary HwndPaneDic_ChangeChar = new Dictionary { }; private Dictionary HwndPaneDic_CharMatch = new Dictionary { }; + private Dictionary HwndPaneDic_highlight = new Dictionary { }; //侧面板 Microsoft.Office.Tools.CustomTaskPane FileTabPane; Microsoft.Office.Tools.CustomTaskPane tableColoringPane; Microsoft.Office.Tools.CustomTaskPane changCharPane; Microsoft.Office.Tools.CustomTaskPane charMatchPane; + Microsoft.Office.Tools.CustomTaskPane highlightPane; // 样式是否存在 int 默认 0 int maintitle_bool; @@ -311,7 +314,6 @@ private void Ribbon1_Load(object sender, RibbonUIEventArgs e) #if !DEBUG KeyStateLoad(); button_tuisong.Visible = false; - chooseR.Visible = false; //FileTabOnOff.Visible = false; #endif @@ -2192,7 +2194,7 @@ private void checkCharMatch_Click(object sender, RibbonControlEventArgs e) CharMatchForm charMatchForm = new CharMatchForm(); charMatchPane = Globals.ThisAddIn.CustomTaskPanes.Add(charMatchForm, "设置匹配字符"); - charMatchPane.Width = 220; + charMatchPane.Width = 335; charMatchPane.Visible = true; HwndPaneDic_CharMatch.Add(TempInt, charMatchPane); } @@ -2590,10 +2592,14 @@ private void bilibiliPic_Click(object sender, RibbonControlEventArgs e) if (url != "") { + if (url.Contains("bilibili.com")) { if (url.Contains("bilibili.com/video")) // 视频封面 { + int index = url.IndexOf('?'); + url = url.Remove(index); + if (url.Substring(0, 8) == "https://") { runPythonScript_bilibili(url, tempFile, "bilibili_vid_cover.py"); @@ -2606,7 +2612,7 @@ private void bilibiliPic_Click(object sender, RibbonControlEventArgs e) { int index = url.IndexOf('?'); url = url.Remove(index); - //MessageBox.Show(url); + if (url.Substring(0, 8) == "https://") { runPythonScript_bilibili(url, tempFile, "bilibili_live_cover.py"); @@ -2691,20 +2697,33 @@ public static async Task InsertPicAsync(string filePath) /// 要运行的脚本 private void runPythonScript_bilibili(string url, string DicPath, string pyscript) { - getPythonLibPath(); - + string startFile = ""; string py_file = scriptsDic + "\\" + pyscript; + string sArg = ""; + string catchError = ""; + JObject js_settings = ImportJSON(SettingsFile); + if ((bool)js_settings["usePyScripts"]) + { + startFile = @"python.exe"; + sArg = py_file + " "; + catchError = "Python Environment Error"; + } + else + { + startFile = scriptsDic + $"\\{pyscript.Substring(0, pyscript.Length - 3)}.exe"; + catchError = $"{startFile}.exe Error"; + } - if (python_exit == 1) + + try { - string python_path = pythonEnv + "\\python.exe"; if (File.Exists(py_file)) { Process p = new Process(); - p.StartInfo.FileName = python_path; + p.StartInfo.FileName = startFile; - string sArguments = py_file + " " + url + " " + DicPath; + string sArguments = sArg + url + " " + DicPath; p.StartInfo.Arguments = sArguments; p.StartInfo.UseShellExecute = false; @@ -2720,7 +2739,10 @@ private void runPythonScript_bilibili(string url, string DicPath, string pyscrip else MessageBox.Show("python file not exist"); } - else MessageBox.Show("python_error"); + catch + { + MessageBox.Show(catchError); + } } @@ -2824,18 +2846,19 @@ private void runCode_Click(object sender, RibbonControlEventArgs e) - string outputComment = ">>>输出结果\t" + System.DateTime.Now.ToString("G"); + string outputComment = ">>> lang=" + codeChoice + " " + System.DateTime.Now.ToString("G"); // 代码语言 string code_file = ""; if (codeChoice == "python") code_file = tempFile + "\\runCode.py"; else if (codeChoice == "R") code_file = tempFile + "\\runCode.R"; + else if (codeChoice == "java") code_file = tempFile + "\\runCode.java"; else MessageBox.Show("代码语言错误"); // 转代码运行 - string codetxt = Globals.ThisAddIn.Application.Selection.Text; + string codetxt = Globals.ThisAddIn.Application.Selection.Text.Replace('\r', '\n'); if ((codetxt != "") && (code_file != "")) @@ -2857,7 +2880,7 @@ private void runCode_Click(object sender, RibbonControlEventArgs e) if (File.Exists(code_file)) { StreamWriter sw = File.AppendText(code_file); - sw.WriteLine("\r\n" + codetxt); + sw.WriteLine("\n" + codetxt); sw.Close(); } else @@ -2881,6 +2904,7 @@ private void runCode_Click(object sender, RibbonControlEventArgs e) if (codeChoice == "python") runCode_python(); else if (codeChoice == "R") runCode_R(); + else if (codeChoice == "java") runCode_java(); else MessageBox.Show("代码语言错误"); Globals.ThisAddIn.Application.Selection.Range.HighlightColorIndex = Word.WdColorIndex.wdNoHighlight; @@ -2901,13 +2925,12 @@ private void runCode_Click(object sender, RibbonControlEventArgs e) /// private void runCode_python() { - getPythonLibPath(); string py_file = tempFile + "\\runCode.py"; - if (python_exit == 1) + try { - string python_path = pythonEnv + "\\python.exe"; + string python_path = @"python.exe"; if (File.Exists(py_file)) { @@ -2930,7 +2953,10 @@ private void runCode_python() else MessageBox.Show("python file not exist"); } - else MessageBox.Show("python_error"); + catch + { + MessageBox.Show("python environment error"); + } } //输出打印的信息 @@ -2949,43 +2975,6 @@ public static void AppendText(string text) //MessageBox.Show("codeOutputTotal " + codeOutputTotal.ToString() + "\r\ncodeOutputCount " + codeOutputCount.ToString()); } - /// - /// 获得python安装路径 - /// - private void getPythonLibPath() - { - string pathExt = "lib\\site-packages"; - string environment = Environment.GetEnvironmentVariable("Path"); - string[] paths = environment.Split(';'); - string pathWithOutSlash = null; - foreach (string path in paths) - { - bool foundMatch = false; - try - { - foundMatch = Regex.IsMatch(path, @"\\Python\d{0,2}\-{0,1}\d{0,2}", RegexOptions.IgnoreCase | RegexOptions.Singleline); - } - catch (ArgumentException ex) - { - MessageBox.Show(ex.Message, "异常消息提示:", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - - pathWithOutSlash = path.TrimEnd(new char[] { '\\' }); - - if (foundMatch) - { - if (File.Exists(path + "python.exe")) - { - if (Directory.Exists(Path.Combine(pathWithOutSlash, pathExt))) - { - python_exit = 1; - pythonEnv = pathWithOutSlash; - //pythonLibPath = Path.Combine(pathWithOutSlash, "lib\\"); - } - } - } - } - } /// /// 选中部分进行替换 @@ -3013,25 +3002,36 @@ private void choosePython_Click(object sender, RibbonControlEventArgs e) /// private void runCode_R() { + string code_file = tempFile + "\\runCode.R"; - //string R_file = tempFile + "\\runCode.R"; - // - //if (File.Exists(R_file)) - //{ - // REngine.SetEnvironmentVariables(); - // REngine engine = REngine.GetInstance(); - // engine.Initialize(); - // - // var result = engine.Evaluate("source('" + R_file + "')").AsNumeric(); - // - // //Console.ReadKey(); - // engine.Dispose(); - // // - // MessageBox.Show(string.Join(", ", result)); - // - // - //} - //else MessageBox.Show("R file not exist"); + try + { + + if (File.Exists(code_file)) + { + Process p = new Process(); + p.StartInfo.FileName = @"Rscript.exe"; + + string sArguments = code_file; + + p.StartInfo.Arguments = sArguments; + p.StartInfo.UseShellExecute = false; + p.StartInfo.RedirectStandardOutput = true; + p.StartInfo.RedirectStandardInput = true; + p.StartInfo.RedirectStandardError = true; + p.StartInfo.CreateNoWindow = true; + + p.Start(); + p.BeginOutputReadLine(); + p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); + } + else MessageBox.Show("R file not exist"); + + } + catch + { + MessageBox.Show("R environment error"); + } } private void chooseR_Click(object sender, RibbonControlEventArgs e) @@ -3050,6 +3050,7 @@ private void appendCodeMod_Click(object sender, RibbonControlEventArgs e) string code_file = ""; if (codeChoice == "python") code_file = tempFile + "\\runCode.py"; else if (codeChoice == "R") code_file = tempFile + "\\runCode.R"; + else if (codeChoice == "java") code_file = tempFile + "\\runCode.java"; else MessageBox.Show("代码语言错误"); if (File.Exists(code_file)) File.Delete(code_file); } @@ -3060,51 +3061,154 @@ private void bib2gbt_Click(object sender, RibbonControlEventArgs e) OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = "选择BibTeX文件"; openFileDialog.Filter = "BibTeX文件(*.bib,*.txt)|*.bib;*.txt|BibTeX文件(*.bib)|*.bib|全部文件(*.*)|*.*"; + openFileDialog.Multiselect = true; + + DialogResult dr = openFileDialog.ShowDialog(); if (dr == DialogResult.OK) { - string InportFile = openFileDialog.FileName; - //MessageBox.Show(InportFile); + string startFile = ""; + string py_file = scriptsDic + "\\bib2GBT.py"; + string sArg = ""; + string catchError = ""; + JObject js_settings = ImportJSON(SettingsFile); + if ((bool)js_settings["usePyScripts"]) + { + startFile = @"python.exe"; + sArg = py_file + " "; + catchError = "Python Environment Error"; + } + else + { + startFile = scriptsDic + "\\bib2GBT.exe"; + catchError = "bib2GBT.exe Error"; + } - getPythonLibPath(); + foreach (string InportFile in openFileDialog.FileNames) + { + //MessageBox.Show(InportFile); + + try + { + + if (File.Exists(py_file)) + { + Process p = new Process(); + + p.StartInfo.FileName = startFile; + + string sArguments = sArg + InportFile; + + p.StartInfo.Arguments = sArguments; + p.StartInfo.UseShellExecute = false; + p.StartInfo.RedirectStandardOutput = true; + p.StartInfo.RedirectStandardInput = true; + p.StartInfo.RedirectStandardError = true; + p.StartInfo.CreateNoWindow = true; + + p.Start(); + p.BeginOutputReadLine(); + p.OutputDataReceived += new DataReceivedEventHandler(p_OutputGBT); + } + else MessageBox.Show("python file not exist"); + + } + catch + { + MessageBox.Show(catchError); + } + } - string py_file = scriptsDic + "\\bib2GBT.py"; - if (python_exit == 1) + gbtOutputCount = 1; + } + } + + static void p_OutputGBT(object sender, DataReceivedEventArgs e) + { + if (!string.IsNullOrEmpty(e.Data)) + { + string output = Regex.Replace(e.Data, @"(?<=\[)(\d+)(?=\])", ""); + + if (output == e.Data) + { + output = $"[{gbtOutputCount}] " + output; + } + else { - string python_path = pythonEnv + "\\python.exe"; + output = Regex.Replace(e.Data, @"(?<=\[)(\d+)(?=\])", gbtOutputCount.ToString()); + } - if (File.Exists(py_file)) - { - Process p = new Process(); - p.StartInfo.FileName = python_path; + gbtOutputCount += 1; - string sArguments = py_file + " " + InportFile; - p.StartInfo.Arguments = sArguments; - p.StartInfo.UseShellExecute = false; - p.StartInfo.RedirectStandardOutput = true; - p.StartInfo.RedirectStandardInput = true; - p.StartInfo.RedirectStandardError = true; - p.StartInfo.CreateNoWindow = true; + Globals.ThisAddIn.Application.Selection.InsertAfter(output + "\r\n"); + } + } - p.Start(); - p.BeginOutputReadLine(); - p.OutputDataReceived += new DataReceivedEventHandler(p_OutputGBT); - } - else MessageBox.Show("python file not exist"); + private void chooseJava_Click(object sender, RibbonControlEventArgs e) + { + codeChoice = "java"; + chooseCode.Image = Properties.Resources.java; + } + /// + /// 运行java代码 + /// + private void runCode_java() + { + string code_file = tempFile + "\\runCode.java"; + + try + { + + if (File.Exists(code_file)) + { + Process p = new Process(); + p.StartInfo.FileName = @"java.exe"; + + string sArguments = code_file; + + p.StartInfo.Arguments = sArguments; + p.StartInfo.UseShellExecute = false; + p.StartInfo.RedirectStandardOutput = true; + p.StartInfo.RedirectStandardInput = true; + p.StartInfo.RedirectStandardError = true; + p.StartInfo.CreateNoWindow = true; + + p.Start(); + p.BeginOutputReadLine(); + p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); } - else MessageBox.Show("python_error"); + else MessageBox.Show("java file not exist"); + + } + catch + { + MessageBox.Show("Java environment error"); } } - static void p_OutputGBT(object sender, DataReceivedEventArgs e) + private void highlight_Click(object sender, RibbonControlEventArgs e) { - if (!string.IsNullOrEmpty(e.Data)) + int TempInt = Globals.ThisAddIn.Application.ActiveWindow.Hwnd; + + if (HwndPaneDic_highlight.ContainsKey(TempInt)) { - Globals.ThisAddIn.Application.Selection.InsertAfter(e.Data); + HwndPaneDic_highlight[TempInt].Visible = false; + HwndPaneDic_highlight[TempInt].Dispose(); + Globals.ThisAddIn.CustomTaskPanes.Remove(HwndPaneDic_highlight[TempInt]); + HwndPaneDic_highlight.Remove(TempInt); + } + else + { + HighlightForm highlightForm = new HighlightForm(); + + highlightPane = Globals.ThisAddIn.CustomTaskPanes.Add(highlightForm, "Highlight"); + highlightPane.Width = 500; + highlightPane.Visible = true; + HwndPaneDic_highlight.Add(TempInt, highlightPane); } } } diff --git a/Ribbon1.resx b/Ribbon1.resx index fab02c5..7b2cc07 100644 --- a/Ribbon1.resx +++ b/Ribbon1.resx @@ -43371,114 +43371,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGA2vuIr/h+mRI4bIejj9wAA AABJRU5ErkJggg== - - - - - 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 - RK5CYII= @@ -43745,272 +43637,6 @@ 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 diff --git a/SettingForm.Designer.cs b/SettingForm.Designer.cs index 522bdf0..7798547 100644 --- a/SettingForm.Designer.cs +++ b/SettingForm.Designer.cs @@ -29,6 +29,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingForm)); this.label1 = new System.Windows.Forms.Label(); this.checkedListBox1 = new System.Windows.Forms.CheckedListBox(); @@ -36,6 +37,8 @@ private void InitializeComponent() this.button1 = new System.Windows.Forms.Button(); this.textBox1 = new System.Windows.Forms.TextBox(); this.button2 = new System.Windows.Forms.Button(); + this.usePyScripts = new System.Windows.Forms.CheckBox(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); this.groupBox1.SuspendLayout(); this.SuspendLayout(); // @@ -87,7 +90,7 @@ private void InitializeComponent() // // button2 // - this.button2.Location = new System.Drawing.Point(12, 361); + this.button2.Location = new System.Drawing.Point(12, 398); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(317, 39); this.button2.TabIndex = 3; @@ -95,11 +98,22 @@ private void InitializeComponent() this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // + // usePyScripts + // + this.usePyScripts.Location = new System.Drawing.Point(12, 360); + this.usePyScripts.Name = "usePyScripts"; + this.usePyScripts.Size = new System.Drawing.Size(317, 32); + this.usePyScripts.TabIndex = 4; + this.usePyScripts.Text = "使用 Python 脚本"; + this.usePyScripts.UseVisualStyleBackColor = true; + this.usePyScripts.CheckedChanged += new System.EventHandler(this.usePyScripts_CheckedChanged); + // // SettingForm // this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 24F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(341, 600); + this.Controls.Add(this.usePyScripts); this.Controls.Add(this.button2); this.Controls.Add(this.groupBox1); this.Controls.Add(this.checkedListBox1); @@ -126,5 +140,7 @@ private void InitializeComponent() private System.Windows.Forms.Button button1; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button2; + private System.Windows.Forms.CheckBox usePyScripts; + private System.Windows.Forms.ToolTip toolTip1; } } \ No newline at end of file diff --git a/SettingForm.cs b/SettingForm.cs index 77a8148..cf9e3e7 100644 --- a/SettingForm.cs +++ b/SettingForm.cs @@ -16,6 +16,7 @@ public partial class SettingForm : Form { string ControlKey = Ribbon1.ControlKey; + string SettingsFile = Ribbon1.SettingsFile; //全局常量 @@ -43,6 +44,10 @@ public SettingForm() boolKeyAllTrue = false; textBox1.KeyUp += new KeyEventHandler(textBox1_KeyUp); + + JObject js_settings = ImportJSON(SettingsFile); + usePyScripts.Checked = (bool)js_settings["usePyScripts"]; + toolTip1.SetToolTip(usePyScripts, "如勾选,则使用 FDscend/scripts 中的 Python 脚本;\r\n否则,使用 FDscend/scripts 中的同名exe文件"); } private void textBox1_KeyUp(object sender, KeyEventArgs e) @@ -194,5 +199,12 @@ private void button2_Click(object sender, EventArgs e) { this.Close(); } + + private void usePyScripts_CheckedChanged(object sender, EventArgs e) + { + JObject js = ImportJSON(SettingsFile); + js["usePyScripts"] = usePyScripts.Checked; + SetjsonFun(SettingsFile, js); + } } } diff --git a/SettingForm.resx b/SettingForm.resx index 14c705e..db9c1fe 100644 --- a/SettingForm.resx +++ b/SettingForm.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + diff --git a/WordAddIn1.csproj b/WordAddIn1.csproj index 38aaa82..e6f17c3 100644 --- a/WordAddIn1.csproj +++ b/WordAddIn1.csproj @@ -26,10 +26,12 @@ false WordAddIn1 FDscend_WordAddIn - v4.6.1 + v4.8 VSTO40 False + + true publish\ @@ -127,8 +129,17 @@ + + packages\Microsoft.Web.WebView2.1.0.2277.86\lib\net45\Microsoft.Web.WebView2.Core.dll + + + packages\Microsoft.Web.WebView2.1.0.2277.86\lib\net45\Microsoft.Web.WebView2.WinForms.dll + + + packages\Microsoft.Web.WebView2.1.0.2277.86\lib\net45\Microsoft.Web.WebView2.Wpf.dll + - packages\Newtonsoft.Json.13.0.1\lib\net40\Newtonsoft.Json.dll + packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll @@ -211,6 +222,12 @@ CodeControlForm.cs + + UserControl + + + HighlightForm.cs + Form @@ -232,6 +249,9 @@ CodeControlForm.cs + + HighlightForm.cs + PatternSelectForm.cs @@ -316,6 +336,8 @@ + + @@ -376,4 +398,11 @@ + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + \ No newline at end of file diff --git a/app.config b/app.config index a6de8ff..1436d9a 100644 --- a/app.config +++ b/app.config @@ -2,4 +2,4 @@ - + diff --git a/packages.config b/packages.config index f5f12e6..1579730 100644 --- a/packages.config +++ b/packages.config @@ -1,4 +1,7 @@  - + + + + \ No newline at end of file