// Token: 0x06003F1A RID: 16154 RVA: 0x00120230 File Offset: 0x0011E430 public static IReadOnlyList <WinRTSpellerInterop.SpellerSegment> ComprehensiveGetTokens(this WordsSegmenter segmenter, string text, SpellChecker spellChecker, WinRTSpellerInterop owner) { IReadOnlyList <WordSegment> readOnlyList = ((segmenter != null) ? segmenter.GetTokens(text) : null) ?? new List <WordSegment>().AsReadOnly(); List <WinRTSpellerInterop.SpellerSegment> list = new List <WinRTSpellerInterop.SpellerSegment>(); if (readOnlyList.Count == 0) { return(list.AsReadOnly()); } int num = 0; for (int i = 0; i < readOnlyList.Count; i++) { int startPosition = (int)readOnlyList[i].SourceTextSegment.StartPosition; int length = (int)readOnlyList[i].SourceTextSegment.Length; if (spellChecker != null && startPosition > num) { WinRTSpellerInterop.SpellerSegment missingFragment = new WinRTSpellerInterop.SpellerSegment(text, new WinRTSpellerInterop.TextRange(num, startPosition - num), spellChecker, owner); if (list.Count > 0) { WinRTSpellerInterop.TextRange?spellCheckCleanSubstitutionToken = WinRTSpellerInteropExtensions.GetSpellCheckCleanSubstitutionToken(spellChecker, text, list[list.Count - 1], missingFragment); if (spellCheckCleanSubstitutionToken != null) { list[list.Count - 1] = new WinRTSpellerInterop.SpellerSegment(text, spellCheckCleanSubstitutionToken.Value, spellChecker, owner); } } } list.Add(new WinRTSpellerInterop.SpellerSegment(text, new WinRTSpellerInterop.TextRange(startPosition, length), spellChecker, owner)); num = startPosition + length; } if (readOnlyList.Count > 0) { bool flag; if (spellChecker == null) { flag = true; } else { List <SpellChecker.SpellingError> list2 = spellChecker.ComprehensiveCheck(readOnlyList[readOnlyList.Count - 1].Text, true); flag = (((list2 != null) ? new int?(list2.Count) : null) != 0); } if (flag && num < text.Length) { WinRTSpellerInterop.SpellerSegment missingFragment2 = new WinRTSpellerInterop.SpellerSegment(text, new WinRTSpellerInterop.TextRange(num, text.Length - num), spellChecker, owner); if (list.Count > 0) { WinRTSpellerInterop.TextRange?spellCheckCleanSubstitutionToken2 = WinRTSpellerInteropExtensions.GetSpellCheckCleanSubstitutionToken(spellChecker, text, list[list.Count - 1], missingFragment2); if (spellCheckCleanSubstitutionToken2 != null) { list[list.Count - 1] = new WinRTSpellerInterop.SpellerSegment(text, spellCheckCleanSubstitutionToken2.Value, spellChecker, owner); } } } } return(list.AsReadOnly()); }
// Token: 0x06003F1B RID: 16155 RVA: 0x0012041C File Offset: 0x0011E61C private static WinRTSpellerInterop.TextRange?GetSpellCheckCleanSubstitutionToken(SpellChecker spellChecker, string documentText, WinRTSpellerInterop.SpellerSegment lastToken, WinRTSpellerInterop.SpellerSegment missingFragment) { if (string.IsNullOrWhiteSpace((missingFragment != null) ? missingFragment.Text : null) || string.IsNullOrWhiteSpace((lastToken != null) ? lastToken.Text : null) || string.IsNullOrWhiteSpace(documentText)) { return(null); } int num = Math.Min(missingFragment.TextRange.Length, 4); List <SpellChecker.SpellingError> list = (spellChecker != null) ? spellChecker.ComprehensiveCheck(lastToken.Text, true) : null; if (list == null || list.Count != 0) { for (int i = 1; i <= num; i++) { string text = documentText.Substring(lastToken.TextRange.Start, lastToken.TextRange.Length + i).TrimEnd(new char[0]); if (spellChecker != null) { List <SpellChecker.SpellingError> list2 = spellChecker.ComprehensiveCheck(text, true); if (((list2 != null) ? new int?(list2.Count) : null) == 0) { return(new WinRTSpellerInterop.TextRange?(new WinRTSpellerInterop.TextRange(lastToken.TextRange.Start, text.Length))); } } } } return(null); }