/// <summary> /// Initialize the agnostic string comparers using the provided hash function. /// Injects the function from the non-PCL assembly, to get around PCL limitations. /// MUST be run before other objects are constructed. /// </summary> /// <param name="hashFunction"></param> public static void HashStringsUsing(Func <string, CompareInfo, CompareOptions, int> hashFunction) { hashFunction = hashFunction ?? DefaultAgnosticHashFunction.HashFunction; StringComparer1 = new CustomStringComparer(CultureInfo.InvariantCulture.CompareInfo, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreWidth, hashFunction); StringComparer2 = new CustomStringComparer(CultureInfo.InvariantCulture.CompareInfo, CompareOptions.IgnoreSymbols | CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreWidth, hashFunction); AdvancedOptions.Instance.PropertyChanged += AdvancedOptions_PropertyChanged; currentComparer = AdvancedOptions.Instance.WhitespaceAndPunctuationIsSignificant ? StringComparer1 : StringComparer2; }
/// <summary> /// Initialize the agnostic string comparers using the provided hash function. /// Injects the function from the non-PCL assembly, to get around PCL limitations. /// MUST be run before other objects are constructed. /// </summary> /// <param name="hashFunction"></param> public static PropertyChangedEventHandler HashStringsUsing(Func <string, CompareInfo, CompareOptions, int> hashFunction) { hashFunction = hashFunction ?? DefaultAgnosticHashFunction.HashFunction; StringComparerNoCaseSymbol = new CustomStringComparer(CultureInfo.InvariantCulture.CompareInfo, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreWidth, hashFunction); StringComparerNoCaseNoSymbol = new CustomStringComparer(CultureInfo.InvariantCulture.CompareInfo, CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols | CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreWidth, hashFunction); // Case Sensitive, Symbols Sensitive. StringComparerCaseSymbol = new CustomStringComparer(CultureInfo.InvariantCulture.CompareInfo, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreWidth, hashFunction); // Case Sensitive, Symbols No Sensitive. StringComparerCaseNoSymbol = new CustomStringComparer(CultureInfo.InvariantCulture.CompareInfo, CompareOptions.IgnoreSymbols | CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreWidth, hashFunction); currentComparer = StringComparerNoCaseNoSymbol; // This function is called by the MainViewModel during construction. Return the event handler we want to attach. return(MainViewModel_PropertyChanged); }