diff --git a/Randolf.WordToolkit/Model/FieldPool.cs b/Randolf.WordToolkit/Model/FieldPool.cs index f15255f..e6c3548 100644 --- a/Randolf.WordToolkit/Model/FieldPool.cs +++ b/Randolf.WordToolkit/Model/FieldPool.cs @@ -60,21 +60,43 @@ public List GetRangesFromField(List selectedFields) .Select(f => f.Result.Sentences.First) .Select(r => r.Words.First) .ToList(); + var resultRange = new List(selectedFields.Count*2); for (var i=0;i< selectedRanges.Count;i++) { - var fieldLabel = CommonUtils.GetFieldLabel( + var fieldLabels = CommonUtils.GetFieldLabel( CommonUtils.FormatString( selectedFields[i].Result.Sentences.First.Text)); - selectedRanges[i].MoveEnd(WdUnits.wdCharacter, fieldLabel.Length); + var range1 = selectedRanges[i]; + var range2 = selectedRanges[i].Duplicate; + range2.MoveEnd(WdUnits.wdCharacter, + fieldLabels[1].Length + fieldLabels[2].Length); + range2.MoveStart(WdUnits.wdCharacter, + (fieldLabels[0].Length + fieldLabels[1].Length)); + + resultRange.Add(range1); + resultRange.Add(range2); } - return selectedRanges; + return resultRange; } - public static List GetBookmarkNames(List selectedText) - { - return CommonUtils.CalculateHash(selectedText) - .Select(s => $"_Ref{s}") // make bookmark as hidden - .ToList(); + /// + /// generate bookmark names + /// + /// label field name + /// + public static List GetBookmarkNames(List selectedText) { + var bookmarkNames = new List(selectedText.Count * 2); + var hashList = CommonUtils.CalculateHash(selectedText); + for (int i = 0; i < hashList.Count; i++) + { + // Get the first 6 characters of the hash + var hashPrefix = hashList[i].Substring(0, 6); + var text1 = $"_Ref{hashPrefix}1"; + var text2 = $"_Ref{hashPrefix}2"; + bookmarkNames.Add(text1); + bookmarkNames.Add(text2); + } + return bookmarkNames; } /// @@ -94,9 +116,9 @@ public List AddBookmarks(List ranges, List bookmarkName { var bookmark = ranges[i].Bookmarks.Add(bookmarkNames[i], ranges[i]); bookmarkList.Add(bookmark); + } - // insert bookmark foreach (var bookmark in bookmarkNames) Globals.ThisAddIn.Application.Selection.Fields.Add(Globals.ThisAddIn.Application.Selection.Range, WdFieldType.wdFieldRef, bookmark); diff --git a/Randolf.WordToolkit/Util/CommonUtils.cs b/Randolf.WordToolkit/Util/CommonUtils.cs index d9354cf..fe5aea2 100644 --- a/Randolf.WordToolkit/Util/CommonUtils.cs +++ b/Randolf.WordToolkit/Util/CommonUtils.cs @@ -35,14 +35,17 @@ public static string FormatField(Field field) /// /// Get the label of a field. - /// Example: "Figure 1.1 example structure" -> " 1.1" + /// Example: "Figure 1.1 example structure" -> ["Figure", " ", "1.1"] /// /// /// - public static string GetFieldLabel(string input) { - var match = Regex.Match(input, @"([^\d\s]+(?\s+\d+[-.]?\d*))"); - var id = match.Groups["id"]; - return id.Value; + public static List GetFieldLabel(string input) { + var match = Regex.Match(input, @"((?[^\d\s]+)(?\s+)(?\d+[-.]?\d*))"); + var label_list = new List(); + label_list.Add(match.Groups["name"].Value); + label_list.Add(match.Groups["bar"].Value); + label_list.Add(match.Groups["id"].Value); + return label_list; } #region Hash Calculation diff --git a/Randolf.WordToolkit/View/SearchDialog.cs b/Randolf.WordToolkit/View/SearchDialog.cs index 61a636d..2f7b52d 100644 --- a/Randolf.WordToolkit/View/SearchDialog.cs +++ b/Randolf.WordToolkit/View/SearchDialog.cs @@ -40,9 +40,11 @@ private void txt_SearchInput_TextChanged(object sender, EventArgs e) { private void btn_InsertFields_Click(object sender, EventArgs e) { var selectedText = this.list_SearchResult.SelectedItems.Cast().ToList(); var selectedFields = FieldPool.GetFieldsFromText(selectedText); + + // add 2 bookmark to remove space between labels + // e.g. : Fig 1.1 example -> "Fig", "1.1" var selectedRanges = FieldPool.GetRangesFromField(selectedFields); var bookmarkNames = FieldPool.GetBookmarkNames(selectedText); - FieldPool.AddBookmarks(selectedRanges, bookmarkNames); }