U_CAPI UChar32 U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ u_fungetc(UChar32 ch, UFILE *f) { u_localized_string *str; str = &f->str; /* if we're at the beginning of the buffer, sorry! */ if (str->fPos == str->fBuffer || (U_IS_LEAD(ch) && (str->fPos - 1) == str->fBuffer)) { ch = U_EOF; } else { /* otherwise, put the character back */ /* Remember, read them back on in the reverse order. */ if (U_IS_LEAD(ch)) { if (*--(str->fPos) != U16_TRAIL(ch) || *--(str->fPos) != U16_LEAD(ch)) { ch = U_EOF; } } else if (*--(str->fPos) != ch) { ch = U_EOF; } } return ch; }
static uint32_t get32(const UNewTrie2 *trie, UChar32 c, UBool fromLSCP) { int32_t i2, block; if(c>=trie->highStart && (!U_IS_LEAD(c) || fromLSCP)) { return trie->data[trie->dataLength-UTRIE2_DATA_GRANULARITY]; } if(U_IS_LEAD(c) && fromLSCP) { i2=(UTRIE2_LSCP_INDEX_2_OFFSET-(0xd800>>UTRIE2_SHIFT_2))+ (c>>UTRIE2_SHIFT_2); } else {
U_CFUNC UBool U_EXPORT2 ufile_getch32(UFILE *f, UChar32 *c32) { UBool isValidChar = FALSE; u_localized_string *str; *c32 = U_EOF; /* Fill the buffer if it is empty */ str = &f->str; if (f && str->fPos + 1 >= str->fLimit) { ufile_fill_uchar_buffer(f); } /* Get the next character in the buffer */ if (str->fPos < str->fLimit) { *c32 = *(str->fPos)++; if (U_IS_LEAD(*c32)) { if (str->fPos < str->fLimit) { UChar c16 = *(str->fPos)++; *c32 = U16_GET_SUPPLEMENTARY(*c32, c16); isValidChar = TRUE; } else { *c32 = U_EOF; } } else { isValidChar = TRUE; } } return isValidChar; }
static U_INLINE UBool isInNullBlock(UNewTrie2 *trie, UChar32 c, UBool forLSCP) { int32_t i2, block; if(U_IS_LEAD(c) && forLSCP) { i2=(UTRIE2_LSCP_INDEX_2_OFFSET-(0xd800>>UTRIE2_SHIFT_2))+ (c>>UTRIE2_SHIFT_2); } else {
String EmailInputType::typeMismatchText() const { String invalidAddress = findInvalidAddress(element().value()); ASSERT(!invalidAddress.isNull()); if (invalidAddress.isEmpty()) return locale().queryString(WebLocalizedString::ValidationTypeMismatchForEmailEmpty); String atSign = String("@"); size_t atIndex = invalidAddress.find('@'); if (atIndex == kNotFound) return locale().queryString(WebLocalizedString::ValidationTypeMismatchForEmailNoAtSign, atSign, invalidAddress); // We check validity against an ASCII value because of difficulty to check // invalid characters. However we should show Unicode value. String unicodeAddress = convertEmailAddressToUnicode(invalidAddress); String localPart = invalidAddress.left(atIndex); String domain = invalidAddress.substring(atIndex + 1); if (localPart.isEmpty()) return locale().queryString(WebLocalizedString::ValidationTypeMismatchForEmailEmptyLocal, atSign, unicodeAddress); if (domain.isEmpty()) return locale().queryString(WebLocalizedString::ValidationTypeMismatchForEmailEmptyDomain, atSign, unicodeAddress); size_t invalidCharIndex = localPart.find(isInvalidLocalPartCharacter); if (invalidCharIndex != kNotFound) { unsigned charLength = U_IS_LEAD(localPart[invalidCharIndex]) ? 2 : 1; return locale().queryString(WebLocalizedString::ValidationTypeMismatchForEmailInvalidLocal, atSign, localPart.substring(invalidCharIndex, charLength)); } invalidCharIndex = domain.find(isInvalidDomainCharacter); if (invalidCharIndex != kNotFound) { unsigned charLength = U_IS_LEAD(domain[invalidCharIndex]) ? 2 : 1; return locale().queryString(WebLocalizedString::ValidationTypeMismatchForEmailInvalidDomain, atSign, domain.substring(invalidCharIndex, charLength)); } if (!checkValidDotUsage(domain)) { size_t atIndexInUnicode = unicodeAddress.find('@'); ASSERT(atIndexInUnicode != kNotFound); return locale().queryString(WebLocalizedString::ValidationTypeMismatchForEmailInvalidDots, String("."), unicodeAddress.substring(atIndexInUnicode + 1)); } if (element().multiple()) return locale().queryString(WebLocalizedString::ValidationTypeMismatchForMultipleEmail); return locale().queryString(WebLocalizedString::ValidationTypeMismatchForEmail); }
int32_t Target::nextSafeBoundary(int32_t offset) { while (offset < targetLength) { //UChar ch = charAt(offset); UChar ch = targetBuffer[offset]; if (U_IS_LEAD(ch) || ! ucol_unsafeCP(ch, coll)) { return offset; } offset += 1; } return targetLength; }