public static void AnalyzeExtendedCharactersAndDigits( IntPtr text, uint length, TextItemizer textItemizer, CharAttribute[] pCharAttribute, CultureInfo numberCulture, IClassification classificationUtility ) { // Text will never be of zero length. This is enforced by Itemize(). bool isCombining; bool needsCaretInfo; bool isIndic; bool isDigit; bool isLatin; bool isStrong; bool isExtended; char ch = (char)Marshal.ReadInt16(text); classificationUtility.GetCharAttribute( ch, out isCombining, out needsCaretInfo, out isIndic, out isDigit, out isLatin, out isStrong ); isExtended = ItemizerHelper.IsExtendedCharacter(ch); uint isDigitRangeStart = 0; uint isDigitRangeEnd = 0; bool previousIsDigitValue = (numberCulture == null) ? false : isDigit; bool currentIsDigitValue; // pCharAttribute is assumed to have the same length as text. This is enforced by Itemize(). pCharAttribute[0] = (CharAttribute) (((isCombining) ? CharAttribute.IsCombining : CharAttribute.None) | ((needsCaretInfo) ? CharAttribute.NeedsCaretInfo : CharAttribute.None) | ((isLatin) ? CharAttribute.IsLatin : CharAttribute.None) | ((isIndic) ? CharAttribute.IsIndic : CharAttribute.None) | ((isStrong) ? CharAttribute.IsStrong : CharAttribute.None) | ((isExtended) ? CharAttribute.IsExtended : CharAttribute.None)); uint i; for (i = 1; i < length; ++i) { ch = (char)Marshal.ReadInt16(text, 2 * (int)i); classificationUtility.GetCharAttribute( ch, out isCombining, out needsCaretInfo, out isIndic, out isDigit, out isLatin, out isStrong ); isExtended = ItemizerHelper.IsExtendedCharacter(ch); pCharAttribute[i] = (CharAttribute) (((isCombining) ? CharAttribute.IsCombining : CharAttribute.None) | ((needsCaretInfo) ? CharAttribute.NeedsCaretInfo : CharAttribute.None) | ((isLatin) ? CharAttribute.IsLatin : CharAttribute.None) | ((isIndic) ? CharAttribute.IsIndic : CharAttribute.None) | ((isStrong) ? CharAttribute.IsStrong : CharAttribute.None) | ((isExtended) ? CharAttribute.IsExtended : CharAttribute.None)); currentIsDigitValue = (numberCulture == null) ? false : isDigit; if (previousIsDigitValue != currentIsDigitValue) { isDigitRangeEnd = i; textItemizer.SetIsDigit(isDigitRangeStart, isDigitRangeEnd - isDigitRangeStart, previousIsDigitValue); isDigitRangeStart = i; previousIsDigitValue = currentIsDigitValue; } } isDigitRangeEnd = i; textItemizer.SetIsDigit(isDigitRangeStart, isDigitRangeEnd - isDigitRangeStart, previousIsDigitValue); }