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();
}