static PyObject * icu_normalize(PyObject *self, PyObject *args) { UErrorCode status = U_ZERO_ERROR; int32_t sz = 0, cap = 0, rsz = 0; NORM_MODES mode; UChar *dest = NULL, *source = NULL; PyObject *ret = NULL, *src = NULL; if (!PyArg_ParseTuple(args, "iO", &mode, &src)) return NULL; const UNormalizer2 *n = NULL; switch (mode) { case NFC: n = unorm2_getNFCInstance(&status); break; case NFKC: n = unorm2_getNFKCInstance(&status); break; case NFD: n = unorm2_getNFDInstance(&status); break; case NFKD: n = unorm2_getNFKDInstance(&status); break; } if (U_FAILURE(status)) { PyErr_SetString(PyExc_ValueError, u_errorName(status)); goto end; } source = python_to_icu(src, &sz); if (source == NULL) goto end; cap = 2 * sz; dest = (UChar*) calloc(cap, sizeof(UChar)); if (dest == NULL) { PyErr_NoMemory(); goto end; } while (1) { rsz = unorm2_normalize(n, source, sz, dest, cap, &status); if (status == U_BUFFER_OVERFLOW_ERROR) { cap *= 2; dest = (UChar*) realloc(dest, cap*sizeof(UChar)); if (dest == NULL) { PyErr_NoMemory(); goto end; } continue; } break; } if (U_FAILURE(status)) { PyErr_SetString(PyExc_ValueError, u_errorName(status)); goto end; } ret = icu_to_python(dest, rsz); end: if (source != NULL) free(source); if (dest != NULL) free(dest); return ret; } // }}}
void LocalPointerTest::TestLocalXyzPointerMoveSwap() { #if !UCONFIG_NO_NORMALIZATION IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerMoveSwap"); const UNormalizer2 *nfc=unorm2_getNFCInstance(errorCode); const UNormalizer2 *nfd=unorm2_getNFDInstance(errorCode); if(errorCode.logIfFailureAndReset("unorm2_getNF[CD]Instance()")) { return; } UnicodeSet emptySet; UNormalizer2 *p1 = unorm2_openFiltered(nfc, emptySet.toUSet(), errorCode); UNormalizer2 *p2 = unorm2_openFiltered(nfd, emptySet.toUSet(), errorCode); LocalUNormalizer2Pointer f1(p1); LocalUNormalizer2Pointer f2(p2); if(errorCode.logIfFailureAndReset("unorm2_openFiltered()")) { return; } if(f1.isNull() || f2.isNull()) { errln("LocalUNormalizer2Pointer failure"); return; } f1.swap(f2); if(f1.getAlias() != p2 || f2.getAlias() != p1) { errln("LocalUNormalizer2Pointer.swap() did not swap"); } swap(f1, f2); if(f1.getAlias() != p1 || f2.getAlias() != p2) { errln("swap(LocalUNormalizer2Pointer) did not swap back"); } LocalUNormalizer2Pointer f3; f3.moveFrom(f1); if(f3.getAlias() != p1 || f1.isValid()) { errln("LocalUNormalizer2Pointer.moveFrom() did not move"); } #if U_HAVE_RVALUE_REFERENCES infoln("TestLocalXyzPointerMoveSwap() with rvalue references"); f1 = static_cast<LocalUNormalizer2Pointer &&>(f3); if(f1.getAlias() != p1 || f3.isValid()) { errln("LocalUNormalizer2Pointer move assignment operator did not move"); } LocalUNormalizer2Pointer f4(static_cast<LocalUNormalizer2Pointer &&>(f2)); if(f4.getAlias() != p2 || f2.isValid()) { errln("LocalUNormalizer2Pointer move constructor did not move"); } #else infoln("TestLocalXyzPointerMoveSwap() without rvalue references"); #endif // Move self assignment leaves the object valid but in an undefined state. // Do it to make sure there is no crash, // but do not check for any particular resulting value. f1.moveFrom(f1); f3.moveFrom(f3); #endif /* !UCONFIG_NO_NORMALIZATION */ }
const UNormalizer2* GetNormalizerForForm(NormalizationForm normalizationForm, UErrorCode* pErrorCode) { switch (normalizationForm) { case NormalizationForm::C: return unorm2_getNFCInstance(pErrorCode); case NormalizationForm::D: return unorm2_getNFDInstance(pErrorCode); case NormalizationForm::KC: return unorm2_getNFKCInstance(pErrorCode); case NormalizationForm::KD: return unorm2_getNFKDInstance(pErrorCode); } *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; return nullptr; }
// Use LocalXyzPointer types that are not covered elsewhere in the intltest suite. void LocalPointerTest::TestLocalXyzPointer() { IcuTestErrorCode errorCode(*this, "TestLocalXyzPointer"); static const char *const encoding="ISO-8859-1"; LocalUConverterSelectorPointer sel( ucnvsel_open(&encoding, 1, NULL, UCNV_ROUNDTRIP_SET, errorCode)); if(errorCode.logIfFailureAndReset("ucnvsel_open()")) { return; } if(sel.isNull()) { errln("LocalUConverterSelectorPointer failure"); return; } #if !UCONFIG_NO_FORMATTING LocalUCalendarPointer cal(ucal_open(NULL, 0, "root", UCAL_GREGORIAN, errorCode)); if(errorCode.logDataIfFailureAndReset("ucal_open()")) { return; } if(cal.isNull()) { errln("LocalUCalendarPointer failure"); return; } LocalUDateTimePatternGeneratorPointer patgen(udatpg_open("root", errorCode)); if(errorCode.logDataIfFailureAndReset("udatpg_open()")) { return; } if(patgen.isNull()) { errln("LocalUDateTimePatternGeneratorPointer failure"); return; } LocalULocaleDisplayNamesPointer ldn(uldn_open("de-CH", ULDN_STANDARD_NAMES, errorCode)); if(errorCode.logIfFailureAndReset("uldn_open()")) { return; } if(ldn.isNull()) { errln("LocalULocaleDisplayNamesPointer failure"); return; } UnicodeString hello=UNICODE_STRING_SIMPLE("Hello {0}!"); LocalUMessageFormatPointer msg( umsg_open(hello.getBuffer(), hello.length(), "root", NULL, errorCode)); if(errorCode.logIfFailureAndReset("umsg_open()")) { return; } if(msg.isNull()) { errln("LocalUMessageFormatPointer failure"); return; } #endif /* UCONFIG_NO_FORMATTING */ #if !UCONFIG_NO_NORMALIZATION const UNormalizer2 *nfc=unorm2_getNFCInstance(errorCode); UnicodeSet emptySet; LocalUNormalizer2Pointer fn2(unorm2_openFiltered(nfc, emptySet.toUSet(), errorCode)); if(errorCode.logIfFailureAndReset("unorm2_openFiltered()")) { return; } if(fn2.isNull()) { errln("LocalUNormalizer2Pointer failure"); return; } #endif /* !UCONFIG_NO_NORMALIZATION */ #if !UCONFIG_NO_IDNA LocalUIDNAPointer idna(uidna_openUTS46(0, errorCode)); if(errorCode.logIfFailureAndReset("uidna_openUTS46()")) { return; } if(idna.isNull()) { errln("LocalUIDNAPointer failure"); return; } #endif /* !UCONFIG_NO_IDNA */ #if !UCONFIG_NO_REGULAR_EXPRESSIONS UnicodeString pattern=UNICODE_STRING_SIMPLE("abc|xy+z"); LocalURegularExpressionPointer regex( uregex_open(pattern.getBuffer(), pattern.length(), 0, NULL, errorCode)); if(errorCode.logIfFailureAndReset("uregex_open()")) { return; } if(regex.isNull()) { errln("LocalURegularExpressionPointer failure"); return; } #endif /* UCONFIG_NO_REGULAR_EXPRESSIONS */ #if !UCONFIG_NO_TRANSLITERATION UnicodeString id=UNICODE_STRING_SIMPLE("Grek-Latn"); LocalUTransliteratorPointer trans( utrans_openU(id.getBuffer(), id.length(), UTRANS_FORWARD, NULL, 0, NULL, errorCode)); if(errorCode.logIfFailureAndReset("utrans_open()")) { return; } if(trans.isNull()) { errln("LocalUTransliteratorPointer failure"); return; } #endif /* !UCONFIG_NO_TRANSLITERATION */ // destructors }
const swift::__swift_stdlib_UNormalizer2 * swift::__swift_stdlib_unorm2_getNFCInstance(__swift_stdlib_UErrorCode *err) { return ptr_cast<__swift_stdlib_UNormalizer2>( unorm2_getNFCInstance(ptr_cast<UErrorCode>(err))); }