Exemplo n.º 1
0
PRBool HasRTLChars(nsAString& aString)
{
  PRInt32 length = aString.Length();
  for (PRInt32 i = 0; i < length; i++) {
    if ((UCS2_CHAR_IS_BIDI(aString.CharAt(i)) ) ||
        ((NS_IS_HIGH_SURROGATE(aString.CharAt(i))) &&
         (++i < length) &&
         (NS_IS_LOW_SURROGATE(aString.CharAt(i))) &&
         (UTF32_CHAR_IS_BIDI(SURROGATE_TO_UCS4(aString.CharAt(i-1),
                                               aString.CharAt(i)))))) {
      return PR_TRUE;
    }
  }
  return PR_FALSE;
}
Exemplo n.º 2
0
// To save time we only do this when we really want to know, not during
// every allocation
void
nsTextFragment::UpdateBidiFlag(const PRUnichar* aBuffer, PRUint32 aLength)
{
    if (mState.mIs2b && !mState.mIsBidi) {
        const PRUnichar* cp = aBuffer;
        const PRUnichar* end = cp + aLength;
        while (cp < end) {
            PRUnichar ch1 = *cp++;
            PRUint32 utf32Char = ch1;
            if (NS_IS_HIGH_SURROGATE(ch1) &&
                    cp < end &&
                    NS_IS_LOW_SURROGATE(*cp)) {
                PRUnichar ch2 = *cp++;
                utf32Char = SURROGATE_TO_UCS4(ch1, ch2);
            }
            if (UTF32_CHAR_IS_BIDI(utf32Char) || IS_BIDI_CONTROL_CHAR(utf32Char)) {
                mState.mIsBidi = PR_TRUE;
                break;
            }
        }
    }
}
Exemplo n.º 3
0
// To save time we only do this when we really want to know, not during
// every allocation
void
nsTextFragment::UpdateBidiFlag(const char16_t* aBuffer, uint32_t aLength)
{
  if (mState.mIs2b && !mState.mIsBidi) {
    const char16_t* cp = aBuffer;
    const char16_t* end = cp + aLength;
    while (cp < end) {
      char16_t ch1 = *cp++;
      uint32_t utf32Char = ch1;
      if (NS_IS_HIGH_SURROGATE(ch1) &&
          cp < end &&
          NS_IS_LOW_SURROGATE(*cp)) {
        char16_t ch2 = *cp++;
        utf32Char = SURROGATE_TO_UCS4(ch1, ch2);
      }
      if (UTF32_CHAR_IS_BIDI(utf32Char) || IsBidiControl(utf32Char)) {
        mState.mIsBidi = true;
        break;
      }
    }
  }
}