diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index f30c8bb2..3ddbe677 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2016,35 +2016,16 @@ namespace Volian.Controls.Library { ReportTitle = string.Format("Search for '{0}'", TextSearchString); - // C2020-009: Search - Allow search 'By Word'. string byWordPrefix = string.Empty; string byWordSuffix = string.Empty; if (cbxByWord.Checked) { - // Generate a prefix & suffix to be used in the sql query around the search string. - // If the search string starts (prefix)/ends(suffix) with a number, then use an expression that - // does not allow the preceding/following text to have a number, '.', letter or other rtf - // commands. If the search string starts/ends with a letter, then use an expression that does not - // find the preceding/following text that is text, i.e. a letter. - if (Regex.IsMatch(TextSearchString, @"^[\d\.]")) // starts with a number or '.' decimal pt - { - byWordPrefix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(TextSearchString, @"^[a-zA-Z]")) // starts with a letter - { - byWordPrefix = @"[^a-zA-Z]"; - } - if (Regex.IsMatch(TextSearchString, @"[\d\.]$")) // ends with a number or decimal - { - byWordSuffix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(TextSearchString, @"[a-zA-Z]$")) // ends with a letter - { - byWordSuffix = @"[^a-zA-Z]"; - } + byWordPrefix = GetByWordSettings(TextSearchString, true); + byWordSuffix = GetByWordSettings(TextSearchString, false); } - SearchString = TextSearchString; - // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. + + SearchString = TextSearchString; + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); cmbResultsStyleIndex = 3; // display step text in results @@ -2078,8 +2059,8 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty); + + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, GetByWordSettings(ROSearchList, true), GetByWordSettings(ROSearchList, false)); cmbResultsStyleIndex = 3; // display step text in results } else @@ -2189,7 +2170,52 @@ namespace Volian.Controls.Library } OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); } + private string GetByWordSettings(string ss, bool checkstart) + { + // C2020-009: Search - Allow search 'By Word'. + + // // Generate a prefix & suffix to be used in the sql query around the search string. + // // If the search string starts (prefix)/ends(suffix) with a number, then use an expression that + // // does not allow the preceding/following text to have a number, '.', letter or other rtf + // // commands. If the search string starts/ends with a letter, then use an expression that does not + // // find the preceding/following text that is text, i.e. a letter. + + if (ss.Length > 0) + { + //checking start + if (checkstart) + { + // starts with a number or '.' decimal pt + if (char.IsNumber(ss, 0) || ss[0] == '.') + { + return @"[^0-9a-zA-Z.vbpi:\\-]"; + } + // starts with a letter + else if (char.IsLetter(ss, 0)) + { + return @"[^a-zA-Z]"; + } + } + //checking end + else + { + // ends with a number or '.' decimal pt + if (char.IsNumber(ss, ss.Length - 1) || ss[ss.Length - 1] == '.') + { + return @"[^0-9a-zA-Z.vbpi:\\-]"; + } + // ends with a letter + else if (char.IsLetter(ss, ss.Length - 1)) + { + return @"[^a-zA-Z]"; + } + } + } + + //default + return string.Empty; + } private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click) { if (tabSearchTypes.SelectedTab != tabSearchTypes.Tabs[4])