diff --git a/.vs/AIProofread/v17/.suo b/.vs/AIProofread/v17/.suo index e4c1dea..2c5f0a1 100644 Binary files a/.vs/AIProofread/v17/.suo and b/.vs/AIProofread/v17/.suo differ diff --git a/AIProofread/AIProofread.csproj.user b/AIProofread/AIProofread.csproj.user index 5a3723a..2cd0081 100644 --- a/AIProofread/AIProofread.csproj.user +++ b/AIProofread/AIProofread.csproj.user @@ -7,7 +7,7 @@ - Program - C:\Soft\Kingsoft\WPS Office\12.1.0.16412\office6\wps.exe + Project + C:\Soft\Kingsoft\WPS Office\12.1.0.16910\office6\wps.exe \ No newline at end of file diff --git a/AIProofread/Bridge.cs b/AIProofread/Bridge.cs index 499a03c..4102847 100644 --- a/AIProofread/Bridge.cs +++ b/AIProofread/Bridge.cs @@ -42,7 +42,7 @@ namespace AIProofread private static readonly Dictionary> eventHandlers = new Dictionary>(); - private static readonly Dictionary marks = new Dictionary(); + public static Dictionary marks; private static int selectProofreadId = -1; @@ -215,14 +215,19 @@ namespace AIProofread // 清除所有标记 public void clearAllProofreadMark() { + // 设置当前文档数据 + Globals.ThisAddIn.ActiveCurrentDocumentMarks(); try { selectProofreadId = -1; foreach (var item in marks.Values) { - if (item.mark != null && item.content.tag == "i" && item.content.isAccept == AcceptStatus.Default) + if (item.mark != null) { - item.mark.Text = ""; + if(item.content.tag == "i" && item.content.isAccept == AcceptStatus.Default) { + item.mark.Text = ""; + } + item.ResetMarkStyle(); } } marks.Clear(); @@ -363,6 +368,9 @@ namespace AIProofread public void SelectMarkById(int proofreadId) { + // 设置当前文档数据 + Globals.ThisAddIn.ActiveCurrentDocumentMarks(); + if (proofreadId == selectProofreadId) return; var doc = Globals.ThisAddIn.Application.ActiveDocument; // 取消上一个标签移除 @@ -422,6 +430,7 @@ namespace AIProofread List list = JsonConvert.DeserializeObject>(content); // 先清除所有数据 clearAllProofreadMark(); + //var app = Globals.ThisAddIn.Application; //var cur = app.Selection; // @@ -439,7 +448,7 @@ namespace AIProofread int index = 0; foreach (var item in correct.Diffs) { - var mark = AddBookmark(item, index, correct.Offset, correct.Insert_len); + var mark = AddBookmark(item, index, correct.Sentence_offset, correct.Insert_len, correct.Paragraph_offset); if (item.tag != "i") index++; if (mark != null) { marks.Add(item.id, new ProofreadItem(item, mark)); @@ -465,22 +474,50 @@ namespace AIProofread } - public Microsoft.Office.Tools.Word.Bookmark AddBookmark(CorrectedContent item, int findIndex, int offset, int length) + public string GetParagraph(int index) + { + + var document = Globals.ThisAddIn.Application.ActiveDocument; + try + { + var paragraphs = document.Paragraphs; + var total = paragraphs.Count; + // 判断索引是否超出范围 + if (index > total) + { + return null; + } + var paragraph = document.Paragraphs[index]; + return paragraph.Range.Text; + } + catch (Exception ex) + { + return "error:" + ex.Message; + } + } + + public Microsoft.Office.Tools.Word.Bookmark AddBookmark(CorrectedContent item, int findIndex, int offset, int length,int paragraphIndex) { Microsoft.Office.Tools.Word.Bookmark bookmark = null; try { var document = Globals.ThisAddIn.Application.ActiveDocument; ControlCollection controls = Globals.Factory.GetVstoObject(document).Controls; - var Start = offset; - var End = offset + length - 1; - // 整体选区的内容 + // 判断并获取当前段落 + if (paragraphIndex > document.Paragraphs.Count) return null; + var paragraph = document.Paragraphs[paragraphIndex]; + var paragraphStart = paragraph.Range.Start; + var Start = paragraphStart + offset; + var End = paragraph.Range.Start + length - 1; + + // 当前句子的选区 var fullRange = document.Range(Start, End); string fullText = fullRange.Text; - End = offset + item.start; - Start = offset + item.end; + Start = paragraphStart + offset + item.start; + End = paragraphStart + offset + item.end; - var r = document.Range(End, Start); + // 定位要操作的文字 + var r = document.Range(Start, End); var markName = Config.BuildBookmarkName(item.id); // 判断是否已经存在 diff --git a/AIProofread/ProofreadItem.cs b/AIProofread/ProofreadItem.cs index 23d7800..a5f883e 100644 --- a/AIProofread/ProofreadItem.cs +++ b/AIProofread/ProofreadItem.cs @@ -90,9 +90,10 @@ namespace UtilLib mark.Shading.BackgroundPatternColor = (WdColor)ColorTranslator.ToOle(Colors.FromHex(content.color)); } - private void ResetMarkStyle() + public void ResetMarkStyle() { if (mark == null) return; + mark.Range.Font.Size = originSize; // 还原 //mark.Range.Underline = Microsoft.Office.Interop.Word.WdUnderline.wdUnderlineNone; mark.Range.Shading.BackgroundPatternColor = Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic; } diff --git a/AIProofread/ThisAddIn.cs b/AIProofread/ThisAddIn.cs index 6e328e0..3f67d3d 100644 --- a/AIProofread/ThisAddIn.cs +++ b/AIProofread/ThisAddIn.cs @@ -46,6 +46,7 @@ namespace AIProofread public Dictionary panelsVisible = new Dictionary(); public CustomTaskPane currentDocumentTaskPane; + private static readonly Dictionary> allMarks = new Dictionary>(); private void Application_WindowDeactivate(Word.Document doc, Window Wn) { @@ -67,30 +68,51 @@ namespace AIProofread } - private void Application_WindowActivate(Word.Document Doc, Window Wn) + private void Application_WindowActivate(Word.Document activeDoc, Window Wn) { - Logger.Log("Application_WindowActivate -- " + Doc.FullName); + // 当前文档添加书签集合 + if (!allMarks.ContainsKey(activeDoc)) + { + allMarks[activeDoc] = new Dictionary(); + } + Logger.Log("Application_WindowActivate -- " + activeDoc.FullName); //ShowPanel(Doc); - if (!taskPanels.ContainsKey(Doc)) + if (!taskPanels.ContainsKey(activeDoc)) { - ShowPanel(Doc,false); + ShowPanel(activeDoc,false); } - this.currentDocumentTaskPane = taskPanels[Doc]; + this.currentDocumentTaskPane = taskPanels[activeDoc]; if (IsWPS) { - HideOtherPanel(Doc); + HideOtherPanel(activeDoc); } - if (panelsVisible.ContainsKey(Doc) && panelsVisible[Doc]) + if (panelsVisible.ContainsKey(activeDoc) && panelsVisible[activeDoc]) { - taskPanels[Doc].Visible = true; + taskPanels[activeDoc].Visible = true; } } - private void Application_DocumentBeforeClose(Word.Document Doc, ref bool Cancel) + private void Application_DocumentBeforeClose(Word.Document currentDoc, ref bool Cancel) { - Logger.Log("Application_DocumentBeforeClose -- " + Doc.FullName); - DisposePanel(Doc); + Logger.Log("Application_DocumentBeforeClose -- " + currentDoc.FullName); + if (allMarks.ContainsKey(currentDoc)) + { + allMarks.Remove(currentDoc); + } + + DisposePanel(currentDoc); + } + + public void ActiveCurrentDocumentMarks() + { + // 判断是否存在 没有的话初始化 + var currentDoc = Application.ActiveDocument; + if (!allMarks.ContainsKey(currentDoc)) + { + allMarks[currentDoc] = new Dictionary(); + } + Bridge.marks = allMarks[currentDoc]; } private void Application_NewDocument(Word.Document Doc) diff --git a/AIProofread/obj/Debug/AIProofread.csproj.AssemblyReference.cache b/AIProofread/obj/Debug/AIProofread.csproj.AssemblyReference.cache index cd4c4b6..c635e1e 100644 Binary files a/AIProofread/obj/Debug/AIProofread.csproj.AssemblyReference.cache and b/AIProofread/obj/Debug/AIProofread.csproj.AssemblyReference.cache differ diff --git a/AIProofread/obj/Debug/AIProofread.dll b/AIProofread/obj/Debug/AIProofread.dll index a4df31a..288ecf0 100644 Binary files a/AIProofread/obj/Debug/AIProofread.dll and b/AIProofread/obj/Debug/AIProofread.dll differ diff --git a/AIProofread/obj/Debug/AIProofread.pdb b/AIProofread/obj/Debug/AIProofread.pdb index 4e67dce..d4a9865 100644 Binary files a/AIProofread/obj/Debug/AIProofread.pdb and b/AIProofread/obj/Debug/AIProofread.pdb differ diff --git a/AIProofread/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/AIProofread/obj/Debug/DesignTimeResolveAssemblyReferences.cache index 1dddad4..cb538fa 100644 Binary files a/AIProofread/obj/Debug/DesignTimeResolveAssemblyReferences.cache and b/AIProofread/obj/Debug/DesignTimeResolveAssemblyReferences.cache differ diff --git a/util-lib/DocumentCorrectItem.cs b/util-lib/DocumentCorrectItem.cs index 274695c..2587227 100644 --- a/util-lib/DocumentCorrectItem.cs +++ b/util-lib/DocumentCorrectItem.cs @@ -9,6 +9,8 @@ namespace UtilLib public string New_text { get; set; } public int Insert_len { get; set; } public int Offset { get; set; } + public int Paragraph_offset { get; set; } + public int Sentence_offset { get; set; } public List Diffs { get; set; } } } diff --git a/util-lib/ToolUtil.cs b/util-lib/ToolUtil.cs index 98a4888..f08b946 100644 --- a/util-lib/ToolUtil.cs +++ b/util-lib/ToolUtil.cs @@ -9,7 +9,7 @@ namespace UtilLib StringBuilder sb = new StringBuilder(); for (int i = 0; i < len; i++) { - sb.Append(' '); + sb.Append(" "); } return sb.ToString(); }