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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
-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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