本文整理汇总了C++中UnicodeString函数的典型用法代码示例。如果您正苦于以下问题:C++ UnicodeString函数的具体用法?C++ UnicodeString怎么用?C++ UnicodeString使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了UnicodeString函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ADD
void TCopyParamType::DoGetInfoStr(
const UnicodeString & Separator, intptr_t Options,
UnicodeString & Result, bool & SomeAttrIncluded,
const UnicodeString & Link, UnicodeString & ScriptArgs, bool & NoScriptArgs, /*TAssemblyLanguage Language, UnicodeString & AssemblyCode,*/
bool & NoCodeProperties) const
{
TCopyParamType Defaults;
bool SomeAttrExcluded = false;
NoScriptArgs = false;
NoCodeProperties = false;
SomeAttrIncluded = false;
#define ADD(STR, EXCEPT) \
if (FLAGCLEAR(Options, EXCEPT)) \
{ \
AddToList(Result, (STR), Separator); \
SomeAttrIncluded = true; \
} \
else \
{ \
SomeAttrExcluded = true; \
}
bool AsciiFileMaskDiffers = (GetTransferMode() == tmAutomatic) && !(GetAsciiFileMask() == Defaults.GetAsciiFileMask());
bool TransferModeDiffers = ((GetTransferMode() != Defaults.GetTransferMode()) || AsciiFileMaskDiffers);
if (FLAGCLEAR(Options, cpaIncludeMaskOnly | cpaNoTransferMode))
{
// Adding Transfer type unconditionally
bool FormatMask;
int Ident;
switch (GetTransferMode())
{
case tmBinary:
FormatMask = false;
Ident = 2;
break;
case tmAscii:
FormatMask = false;
Ident = 3;
break;
case tmAutomatic:
default:
FormatMask = !(GetAsciiFileMask() == Defaults.GetAsciiFileMask());
Ident = FormatMask ? 4 : 5;
break;
}
UnicodeString S = FORMAT(LoadStrPart(COPY_INFO_TRANSFER_TYPE2, 1).c_str(),
LoadStrPart(COPY_INFO_TRANSFER_TYPE2, Ident).c_str());
if (FormatMask)
{
S = FORMAT(S.c_str(), GetAsciiFileMask().GetMasks().c_str());
}
AddToList(Result, S, Separator);
if (TransferModeDiffers)
{
ADD("", cpaIncludeMaskOnly | cpaNoTransferMode);
/*ScriptArgs += RtfSwitchValue(TRANSFER_SWITCH, Link, TransferModeNames[TransferMode]);
const wchar_t * TransferModeMembers[] = { L"Binary", L"Ascii", L"Automatic" };
AssemblyCode += AssemblyProperty(
Language, TransferOptionsClassName, L"TransferMode", L"TransferMode", TransferModeMembers[TransferMode], false);
if (AsciiFileMaskDiffers)
{
NoScriptArgs = true;
NoCodeProperties = true;
}*/
}
}
else
{
if (TransferModeDiffers)
{
SomeAttrExcluded = true;
NoScriptArgs = true;
NoCodeProperties = true;
}
}
if (GetFileNameCase() != Defaults.GetFileNameCase())
{
ADD(FORMAT(LoadStrPart(COPY_INFO_FILENAME, 1).c_str(),
LoadStrPart(COPY_INFO_FILENAME, GetFileNameCase() + 2).c_str()),
cpaIncludeMaskOnly);
NoScriptArgs = true;
NoCodeProperties = true;
}
if ((GetInvalidCharsReplacement() == NoReplacement) !=
(Defaults.GetInvalidCharsReplacement() == NoReplacement))
{
DebugAssert(GetInvalidCharsReplacement() == NoReplacement);
if (GetInvalidCharsReplacement() == NoReplacement)
{
ADD(LoadStr(COPY_INFO_DONT_REPLACE_INV_CHARS).c_str(), cpaIncludeMaskOnly);
}
NoScriptArgs = true;
//.........这里部分代码省略.........
示例2: UnicodeString
UnicodeString&
DefaultLocaleDisplayNames::keyDisplayName(const char* key,
UnicodeString& result) const {
return result = UnicodeString(key, -1, US_INV);
}
示例3: lookupPrimaryIndexAtCharacter
UnicodeString
IndexedString::getPrimaryIndexAtCharacter(int32_t Position) const
{
auto const Found = lookupPrimaryIndexAtCharacter(Position);
return Found != Needles.end() ? Found->first : UnicodeString();
}
示例4: U_STRING_DECL
void CharIterTest::TestConstructionAndEqualityUChariter() {
U_STRING_DECL(testText, "Now is the time for all good men to come to the aid of their country.", 69);
U_STRING_DECL(testText2, "Don't bother using this string.", 31);
U_STRING_INIT(testText, "Now is the time for all good men to come to the aid of their country.", 69);
U_STRING_INIT(testText2, "Don't bother using this string.", 31);
UnicodeString result, result4, result5;
UCharCharacterIterator* test1 = new UCharCharacterIterator(testText, u_strlen(testText));
UCharCharacterIterator* test2 = new UCharCharacterIterator(testText, u_strlen(testText), 5);
UCharCharacterIterator* test3 = new UCharCharacterIterator(testText, u_strlen(testText), 2, 20, 5);
UCharCharacterIterator* test4 = new UCharCharacterIterator(testText2, u_strlen(testText2));
UCharCharacterIterator* test5 = (UCharCharacterIterator*)test1->clone();
UCharCharacterIterator* test6 = new UCharCharacterIterator(*test1);
// j785: length=-1 will use u_strlen()
UCharCharacterIterator* test7a = new UCharCharacterIterator(testText, -1);
UCharCharacterIterator* test7b = new UCharCharacterIterator(testText, -1);
UCharCharacterIterator* test7c = new UCharCharacterIterator(testText, -1, 2, 20, 5);
// Bad parameters.
UCharCharacterIterator* test8a = new UCharCharacterIterator(testText, -1, -1, 20, 5);
UCharCharacterIterator* test8b = new UCharCharacterIterator(testText, -1, 2, 100, 5);
UCharCharacterIterator* test8c = new UCharCharacterIterator(testText, -1, 2, 20, 100);
if (test8a->startIndex() < 0)
errln("Construction failed: startIndex is negative");
if (test8b->endIndex() != u_strlen(testText))
errln("Construction failed: endIndex is different from the text length");
if (test8c->getIndex() < test8c->startIndex() || test8c->endIndex() < test8c->getIndex())
errln("Construction failed: index is invalid");
if (*test1 == *test2 || *test1 == *test3 || *test1 == *test4 )
errln("Construction or operator== failed: Unequal objects compared equal");
if (*test1 != *test5 )
errln("clone() or equals() failed: Two clones tested unequal");
if (*test6 != *test1 )
errln("copy construction or equals() failed: Two copies tested unequal");
if (test1->hashCode() == test2->hashCode() || test1->hashCode() == test3->hashCode()
|| test1->hashCode() == test4->hashCode())
errln("hashCode() failed: different objects have same hash code");
if (test1->hashCode() != test5->hashCode())
errln("hashCode() failed: identical objects have different hash codes");
test7a->getText(result);
test7b->getText(result4);
test7c->getText(result5);
if(result != UnicodeString(testText) || result4 != result || result5 != result)
errln("error in construction");
test1->getText(result);
test4->getText(result4);
test5->getText(result5);
if(result != result5 || result == result4)
errln("getText() failed");
test5->setText(testText2, u_strlen(testText2));
test5->getText(result5);
if(result == result5 || result4 != result5)
errln("setText() or getText() failed");
test5->setText(testText, u_strlen(testText));
test5->getText(result5);
if(result != result5 || result == result4)
errln("setText() or getText() round-trip failed");
test1->setIndex(5);
if (*test1 != *test2 || *test1 == *test5)
errln("setIndex() failed");
test8b->setIndex32(5);
if (test8b->getIndex()!=5)
errln("setIndex32() failed");
*test1 = *test3;
if (*test1 != *test3 || *test1 == *test5)
errln("operator= failed");
delete test1;
delete test2;
delete test3;
delete test4;
delete test5;
delete test6;
delete test7a;
delete test7b;
delete test7c;
delete test8a;
delete test8b;
delete test8c;
}
示例5: TestUCharIterator
void CharIterTest::TestUCharIterator() {
// test string of length 8
UnicodeString s=UnicodeString("a \\U00010001b\\U0010fffdz", "").unescape();
const char *const moves=
"0+++++++++" // 10 moves per line
"----0-----"
">>|>>>>>>>"
"<<|<<<<<<<"
"22+>8>-8+2";
StringCharacterIterator sci(s), compareCI(s);
UCharIterator sIter, cIter, rIter;
uiter_setString(&sIter, s.getBuffer(), s.length());
uiter_setCharacterIterator(&cIter, &sci);
uiter_setReplaceable(&rIter, &s);
TestUCharIterator(&sIter, compareCI, moves, "uiter_setString");
compareCI.setIndex(0);
TestUCharIterator(&cIter, compareCI, moves, "uiter_setCharacterIterator");
compareCI.setIndex(0);
TestUCharIterator(&rIter, compareCI, moves, "uiter_setReplaceable");
// test move & getIndex some more
sIter.start=2;
sIter.index=3;
sIter.limit=5;
if( sIter.getIndex(&sIter, UITER_ZERO)!=0 ||
sIter.getIndex(&sIter, UITER_START)!=2 ||
sIter.getIndex(&sIter, UITER_CURRENT)!=3 ||
sIter.getIndex(&sIter, UITER_LIMIT)!=5 ||
sIter.getIndex(&sIter, UITER_LENGTH)!=s.length()
) {
errln("error: UCharIterator(string).getIndex returns wrong index");
}
if( sIter.move(&sIter, 4, UITER_ZERO)!=4 ||
sIter.move(&sIter, 1, UITER_START)!=3 ||
sIter.move(&sIter, 3, UITER_CURRENT)!=5 ||
sIter.move(&sIter, -1, UITER_LIMIT)!=4 ||
sIter.move(&sIter, -5, UITER_LENGTH)!=3 ||
sIter.move(&sIter, 0, UITER_CURRENT)!=sIter.getIndex(&sIter, UITER_CURRENT) ||
sIter.getIndex(&sIter, UITER_CURRENT)!=3
) {
errln("error: UCharIterator(string).move sets/returns wrong index");
}
sci=StringCharacterIterator(s, 2, 5, 3);
uiter_setCharacterIterator(&cIter, &sci);
if( cIter.getIndex(&cIter, UITER_ZERO)!=0 ||
cIter.getIndex(&cIter, UITER_START)!=2 ||
cIter.getIndex(&cIter, UITER_CURRENT)!=3 ||
cIter.getIndex(&cIter, UITER_LIMIT)!=5 ||
cIter.getIndex(&cIter, UITER_LENGTH)!=s.length()
) {
errln("error: UCharIterator(character iterator).getIndex returns wrong index");
}
if( cIter.move(&cIter, 4, UITER_ZERO)!=4 ||
cIter.move(&cIter, 1, UITER_START)!=3 ||
cIter.move(&cIter, 3, UITER_CURRENT)!=5 ||
cIter.move(&cIter, -1, UITER_LIMIT)!=4 ||
cIter.move(&cIter, -5, UITER_LENGTH)!=3 ||
cIter.move(&cIter, 0, UITER_CURRENT)!=cIter.getIndex(&cIter, UITER_CURRENT) ||
cIter.getIndex(&cIter, UITER_CURRENT)!=3
) {
errln("error: UCharIterator(character iterator).move sets/returns wrong index");
}
if(cIter.getIndex(&cIter, (enum UCharIteratorOrigin)-1) != -1)
{
errln("error: UCharIterator(char iter).getIndex did not return error value");
}
if(cIter.move(&cIter, 0, (enum UCharIteratorOrigin)-1) != -1)
{
errln("error: UCharIterator(char iter).move did not return error value");
}
if(rIter.getIndex(&rIter, (enum UCharIteratorOrigin)-1) != -1)
{
errln("error: UCharIterator(repl iter).getIndex did not return error value");
}
if(rIter.move(&rIter, 0, (enum UCharIteratorOrigin)-1) != -1)
{
errln("error: UCharIterator(repl iter).move did not return error value");
}
if(sIter.getIndex(&sIter, (enum UCharIteratorOrigin)-1) != -1)
{
errln("error: UCharIterator(string iter).getIndex did not return error value");
}
if(sIter.move(&sIter, 0, (enum UCharIteratorOrigin)-1) != -1)
{
//.........这里部分代码省略.........
示例6: logln
void DateFormatRoundTripTest::test(const Locale& loc)
{
UnicodeString temp;
#if !INFINITE
logln("Locale: " + loc.getDisplayName(temp));
#endif
// Total possibilities = 24
// 4 date
// 4 time
// 16 date-time
UBool TEST_TABLE [24];//= new boolean[24];
int32_t i = 0;
for(i = 0; i < 24; ++i)
TEST_TABLE[i] = TRUE;
// If we have some sparseness, implement it here. Sparseness decreases
// test time by eliminating some tests, up to 23.
for(i = 0; i < SPARSENESS; ) {
int random = (int)(randFraction() * 24);
if (random >= 0 && random < 24 && TEST_TABLE[i]) {
TEST_TABLE[i] = FALSE;
++i;
}
}
int32_t itable = 0;
int32_t style = 0;
for(style = DateFormat::FULL; style <= DateFormat::SHORT; ++style) {
if(TEST_TABLE[itable++]) {
logln("Testing style " + UnicodeString(styleName((DateFormat::EStyle)style)));
DateFormat *df = DateFormat::createDateInstance((DateFormat::EStyle)style, loc);
if(df == NULL) {
errln(UnicodeString("Could not DF::createDateInstance ") + UnicodeString(styleName((DateFormat::EStyle)style)) + " Locale: " + loc.getDisplayName(temp));
} else {
test(df, loc);
delete df;
}
}
}
for(style = DateFormat::FULL; style <= DateFormat::SHORT; ++style) {
if (TEST_TABLE[itable++]) {
logln("Testing style " + UnicodeString(styleName((DateFormat::EStyle)style)));
DateFormat *df = DateFormat::createTimeInstance((DateFormat::EStyle)style, loc);
if(df == NULL) {
errln(UnicodeString("Could not DF::createTimeInstance ") + UnicodeString(styleName((DateFormat::EStyle)style)) + " Locale: " + loc.getDisplayName(temp));
} else {
test(df, loc, TRUE);
delete df;
}
}
}
for(int32_t dstyle = DateFormat::FULL; dstyle <= DateFormat::SHORT; ++dstyle) {
for(int32_t tstyle = DateFormat::FULL; tstyle <= DateFormat::SHORT; ++tstyle) {
if(TEST_TABLE[itable++]) {
logln("Testing dstyle" + UnicodeString(styleName((DateFormat::EStyle)dstyle)) + ", tstyle" + UnicodeString(styleName((DateFormat::EStyle)tstyle)) );
DateFormat *df = DateFormat::createDateTimeInstance((DateFormat::EStyle)dstyle, (DateFormat::EStyle)tstyle, loc);
if(df == NULL) {
dataerrln(UnicodeString("Could not DF::createDateTimeInstance ") + UnicodeString(styleName((DateFormat::EStyle)dstyle)) + ", tstyle" + UnicodeString(styleName((DateFormat::EStyle)tstyle)) + "Locale: " + loc.getDisplayName(temp));
} else {
test(df, loc);
delete df;
}
}
}
}
}
示例7: errln
void DateFormatRoundTripTest::test(DateFormat *fmt, const Locale &origLocale, UBool timeOnly)
{
UnicodeString pat;
if(fmt->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) {
errln("DateFormat wasn't a SimpleDateFormat");
return;
}
UBool isGregorian = FALSE;
UErrorCode minStatus = U_ZERO_ERROR;
if(fmt->getCalendar() == NULL) {
errln((UnicodeString)"DateFormatRoundTripTest::test, DateFormat getCalendar() returns null for " + origLocale.getName());
return;
}
UDate minDate = CalendarTest::minDateOfCalendar(*fmt->getCalendar(), isGregorian, minStatus);
if(U_FAILURE(minStatus)) {
errln((UnicodeString)"Failure getting min date for " + origLocale.getName());
return;
}
//logln(UnicodeString("Min date is ") + fullFormat(minDate) + " for " + origLocale.getName());
pat = ((SimpleDateFormat*)fmt)->toPattern(pat);
// NOTE TO MAINTAINER
// This indexOf check into the pattern needs to be refined to ignore
// quoted characters. Currently, this isn't a problem with the locale
// patterns we have, but it may be a problem later.
UBool hasEra = (pat.indexOf(UnicodeString("G")) != -1);
UBool hasZoneDisplayName = (pat.indexOf(UnicodeString("z")) != -1) || (pat.indexOf(UnicodeString("v")) != -1)
|| (pat.indexOf(UnicodeString("V")) != -1);
// Because patterns contain incomplete data representing the Date,
// we must be careful of how we do the roundtrip. We start with
// a randomly generated Date because they're easier to generate.
// From this we get a string. The string is our real starting point,
// because this string should parse the same way all the time. Note
// that it will not necessarily parse back to the original date because
// of incompleteness in patterns. For example, a time-only pattern won't
// parse back to the same date.
//try {
for(int i = 0; i < TRIALS; ++i) {
UDate *d = new UDate [DEPTH];
UnicodeString *s = new UnicodeString[DEPTH];
if(isGregorian == TRUE) {
d[0] = generateDate();
} else {
d[0] = generateDate(minDate);
}
UErrorCode status = U_ZERO_ERROR;
// We go through this loop until we achieve a match or until
// the maximum loop count is reached. We record the points at
// which the date and the string starts to match. Once matching
// starts, it should continue.
int loop;
int dmatch = 0; // d[dmatch].getTime() == d[dmatch-1].getTime()
int smatch = 0; // s[smatch].equals(s[smatch-1])
for(loop = 0; loop < DEPTH; ++loop) {
if (loop > 0) {
d[loop] = fmt->parse(s[loop-1], status);
failure(status, "fmt->parse", s[loop-1]+" in locale: " + origLocale.getName() + " with pattern: " + pat);
status = U_ZERO_ERROR; /* any error would have been reported */
}
s[loop] = fmt->format(d[loop], s[loop]);
// For displaying which date is being tested
//logln(s[loop] + " = " + fullFormat(d[loop]));
if(s[loop].length() == 0) {
errln("FAIL: fmt->format gave 0-length string in " + pat + " with number " + d[loop] + " in locale " + origLocale.getName());
}
if(loop > 0) {
if(smatch == 0) {
UBool match = s[loop] == s[loop-1];
if(smatch == 0) {
if(match)
smatch = loop;
}
else if( ! match)
errln("FAIL: String mismatch after match");
}
if(dmatch == 0) {
// {sfb} watch out here, this might not work
UBool match = d[loop]/*.getTime()*/ == d[loop-1]/*.getTime()*/;
if(dmatch == 0) {
if(match)
dmatch = loop;
}
else if( ! match)
errln("FAIL: Date mismatch after match");
}
if(smatch != 0 && dmatch != 0)
//.........这里部分代码省略.........
示例8: write_tabs
/*write indentation for formatting*/
static void write_tabs(FileStream* os){
int i=0;
for(;i<=tabCount;i++){
write_utf8_file(os,UnicodeString(" "));
}
}
示例9: ICUResourceBundleFactory
void
ICUServiceTest::testRBF()
{
// resource bundle factory.
UErrorCode status = U_ZERO_ERROR;
TestStringService service;
service.registerFactory(new ICUResourceBundleFactory(), status);
// list all of the resources
{
UErrorCode status = U_ZERO_ERROR;
UVector ids(uprv_deleteUObject, uhash_compareUnicodeString, 0, status);
service.getVisibleIDs(ids, status);
logln("all visible ids:");
for (int i = 0; i < ids.size(); ++i) {
const UnicodeString* id = (const UnicodeString*)ids[i];
logln(*id);
}
}
// get all the display names of these resources
// this should be fast since the display names were cached.
{
UErrorCode status = U_ZERO_ERROR;
UVector names(status);
service.getDisplayNames(names, Locale::getGermany(), status);
logln("service display names for de_DE");
for (int i = 0; i < names.size(); ++i) {
const StringPair* pair = (const StringPair*)names[i];
logln(" " + pair->displayName + " --> " + pair->id);
}
}
service.registerFactory(new CalifornioLanguageFactory(), status);
// get all the display names of these resources
{
logln("californio language factory:");
const char* idNames[] = {
CalifornioLanguageFactory::californio,
CalifornioLanguageFactory::valley,
CalifornioLanguageFactory::surfer,
CalifornioLanguageFactory::geek,
};
int32_t count = sizeof(idNames)/sizeof(idNames[0]);
for (int i = 0; i < count; ++i) {
logln(UnicodeString("\n --- ") + idNames[i] + " ---");
{
UErrorCode status = U_ZERO_ERROR;
UVector names(status);
service.getDisplayNames(names, idNames[i], status);
for (int i = 0; i < names.size(); ++i) {
const StringPair* pair = (const StringPair*)names[i];
logln(" " + pair->displayName + " --> " + pair->id);
}
}
}
}
CalifornioLanguageFactory::cleanup();
}
示例10: bc
/*
* @test @(#)bug4117335.java 1.1 3/5/98
*
* @bug 4117335
*/
void
DateFormatMiscTests::test4117335()
{
//UnicodeString bc = "\u7d00\u5143\u524d";
UChar bcC [] = {
0x7D00,
0x5143,
0x524D
};
UnicodeString bc(bcC, 3, 3);
//UnicodeString ad = "\u897f\u66a6";
UChar adC [] = {
0x897F,
0x66A6
};
UnicodeString ad(adC, 2, 2);
//UnicodeString jstLong = "\u65e5\u672c\u6a19\u6e96\u6642";
UChar jstLongC [] = {
0x65e5,
0x672c,
0x6a19,
0x6e96,
0x6642
};
UnicodeString jstLong(jstLongC, 5, 5);
UnicodeString jstShort = "JST";
UErrorCode status = U_ZERO_ERROR;
DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getJapan(), status);
if(U_FAILURE(status)) {
errln("Failure creating DateFormatSymbols, %s", u_errorName(status));
delete symbols;
return;
}
failure(status, "new DateFormatSymbols");
int32_t eraCount = 0;
const UnicodeString *eras = symbols->getEras(eraCount);
logln(UnicodeString("BC = ") + eras[0]);
if (eras[0] != bc) {
errln("*** Should have been " + bc);
//throw new Exception("Error in BC");
}
logln(UnicodeString("AD = ") + eras[1]);
if (eras[1] != ad) {
errln("*** Should have been " + ad);
//throw new Exception("Error in AD");
}
int32_t rowCount, colCount;
const UnicodeString **zones = symbols->getZoneStrings(rowCount, colCount);
logln(UnicodeString("Long zone name = ") + zones[24][1]);
if (zones[24][1] != jstLong) {
errln("*** Should have been " + jstLong);
//throw new Exception("Error in long TZ name");
}
logln(UnicodeString("Short zone name = ") + zones[24][2]);
if (zones[24][2] != jstShort) {
errln("*** Should have been " + jstShort);
//throw new Exception("Error in short TZ name");
}
logln(UnicodeString("Long zone name = ") + zones[24][3]);
if (zones[24][3] != jstLong) {
errln("*** Should have been " + jstLong);
//throw new Exception("Error in long TZ name");
}
logln(UnicodeString("SHORT zone name = ") + zones[24][4]);
if (zones[24][4] != jstShort) {
errln("*** Should have been " + jstShort);
//throw new Exception("Error in short TZ name");
}
delete symbols;
}
示例11: temp
/**
* See if the decomposition of cp2 is at segment starting at segmentPos
* (with canonical rearrangment!)
* If so, take the remainder, and return the equivalents
*/
Hashtable *CanonicalIterator::extract(Hashtable *fillinResult, UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) {
//Hashtable *CanonicalIterator::extract(UChar32 comp, const UnicodeString &segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) {
//if (PROGRESS) printf(" extract: %s, ", UToS(Tr(UnicodeString(comp))));
//if (PROGRESS) printf("%s, %i\n", UToS(Tr(segment)), segmentPos);
if (U_FAILURE(status)) {
return NULL;
}
UnicodeString temp(comp);
int32_t inputLen=temp.length();
UnicodeString decompString;
nfd.normalize(temp, decompString, status);
if (U_FAILURE(status)) {
return NULL;
}
if (decompString.isBogus()) {
status = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
const UChar *decomp=decompString.getBuffer();
int32_t decompLen=decompString.length();
// See if it matches the start of segment (at segmentPos)
UBool ok = FALSE;
UChar32 cp;
int32_t decompPos = 0;
UChar32 decompCp;
U16_NEXT(decomp, decompPos, decompLen, decompCp);
int32_t i = segmentPos;
while(i < segLen) {
U16_NEXT(segment, i, segLen, cp);
if (cp == decompCp) { // if equal, eat another cp from decomp
//if (PROGRESS) printf(" matches: %s\n", UToS(Tr(UnicodeString(cp))));
if (decompPos == decompLen) { // done, have all decomp characters!
temp.append(segment+i, segLen-i);
ok = TRUE;
break;
}
U16_NEXT(decomp, decompPos, decompLen, decompCp);
} else {
//if (PROGRESS) printf(" buffer: %s\n", UToS(Tr(UnicodeString(cp))));
// brute force approach
temp.append(cp);
/* TODO: optimize
// since we know that the classes are monotonically increasing, after zero
// e.g. 0 5 7 9 0 3
// we can do an optimization
// there are only a few cases that work: zero, less, same, greater
// if both classes are the same, we fail
// if the decomp class < the segment class, we fail
segClass = getClass(cp);
if (decompClass <= segClass) return null;
*/
}
}
if (!ok)
return NULL; // we failed, characters left over
//if (PROGRESS) printf("Matches\n");
if (inputLen == temp.length()) {
fillinResult->put(UnicodeString(), new UnicodeString(), status);
return fillinResult; // succeed, but no remainder
}
// brute force approach
// check to make sure result is canonically equivalent
UnicodeString trial;
nfd.normalize(temp, trial, status);
if(U_FAILURE(status) || trial.compare(segment+segmentPos, segLen - segmentPos) != 0) {
return NULL;
}
return getEquivalents2(fillinResult, temp.getBuffer()+inputLen, temp.length()-inputLen, status);
}
示例12: UnicodeString
/*
* @bug 4097450
*/
void
DateFormatMiscTests::test4097450()
{
//
// Date parse requiring 4 digit year.
//
UnicodeString dstring [] = {
UnicodeString("97"),
UnicodeString("1997"),
UnicodeString("97"),
UnicodeString("1997"),
UnicodeString("01"),
UnicodeString("2001"),
UnicodeString("01"),
UnicodeString("2001"),
UnicodeString("1"),
UnicodeString("1"),
UnicodeString("11"),
UnicodeString("11"),
UnicodeString("111"),
UnicodeString("111")
};
UnicodeString dformat [] = {
UnicodeString("yy"),
UnicodeString("yy"),
UnicodeString("yyyy"),
UnicodeString("yyyy"),
UnicodeString("yy"),
UnicodeString("yy"),
UnicodeString("yyyy"),
UnicodeString("yyyy"),
UnicodeString("yy"),
UnicodeString("yyyy"),
UnicodeString("yy"),
UnicodeString("yyyy"),
UnicodeString("yy"),
UnicodeString("yyyy")
};
/* UBool dresult [] = {
TRUE,
FALSE,
FALSE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
FALSE,
FALSE,
TRUE,
FALSE,
FALSE,
FALSE
};*/
UErrorCode status = U_ZERO_ERROR;
SimpleDateFormat *formatter;
SimpleDateFormat *resultFormatter = new SimpleDateFormat((UnicodeString)"yyyy", status);
failure(status, "new SimpleDateFormat");
logln("Format\tSource\tResult");
logln("-------\t-------\t-------");
for (int i = 0; i < 14/*dstring.length*/; i++)
{
log(dformat[i] + "\t" + dstring[i] + "\t");
formatter = new SimpleDateFormat(dformat[i], status);
failure(status, "new SimpleDateFormat");
//try {
UnicodeString str;
FieldPosition pos(FieldPosition::DONT_CARE);
logln(resultFormatter->format(formatter->parse(dstring[i], status), str, pos));
failure(status, "resultFormatter->format");
//if ( !dresult[i] ) System.out.print(" <-- error!");
/*}
catch (ParseException exception) {
//if ( dresult[i] ) System.out.print(" <-- error!");
System.out.print("exception --> " + exception);
}*/
delete formatter;
logln();
}
delete resultFormatter;
}
示例13: errln
void DataDrivenCalendarTest::testConvert(int32_t n,
const CalendarFieldsSet &fromSet, Calendar *fromCalendar,
const CalendarFieldsSet &toSet, Calendar *toCalendar, UBool forward) {
UErrorCode status = U_ZERO_ERROR;
UnicodeString thisString = (UnicodeString)"#"+n+" "+(forward ? "forward"
: "reverse")+" "+fromCalendar->getType()+"->"+toCalendar->getType();
fromCalendar->clear();
fromSet.setOnCalendar(fromCalendar, status);
if (U_FAILURE(status)) {
errln("FAIL: Failed to set on Source calendar: %s", u_errorName(status));
return;
}
CalendarFieldsSet diffSet;
diffSet.clear();
// Is the calendar sane at the first?
if (!fromSet.matches(fromCalendar, diffSet, status)) {
UnicodeString diffs = diffSet.diffFrom(fromSet, status);
errln((UnicodeString)"FAIL: "+thisString
+", SOURCE calendar was not set: Differences: "+ diffs
+"', status: "+ u_errorName(status));
} else if (U_FAILURE(status)) {
errln("FAIL: "+thisString+" SOURCE calendar Failed to match: "
+u_errorName(status));
} else {
logln("PASS: "+thisString+" SOURCE calendar match.");
}
//logln("Set Source calendar: " + from);
UDate fromTime = fromCalendar->getTime(status);
if (U_FAILURE(status)) {
errln("FAIL: Failed to get Source time: %s", u_errorName(status));
return;
}
diffSet.clear();
// Is the calendar sane after being set?
if (!fromSet.matches(fromCalendar, diffSet, status)) {
UnicodeString diffs = diffSet.diffFrom(fromSet, status);
errln((UnicodeString)"FAIL: "+thisString
+", SET SOURCE calendar was not set: Differences: "+ diffs
+"', status: "+ u_errorName(status));
} else if (U_FAILURE(status)) {
errln("FAIL: "+thisString+" SET SOURCE calendar Failed to match: "
+u_errorName(status));
} else {
logln("PASS: "+thisString+" SET SOURCE calendar match.");
}
toCalendar->clear();
toCalendar->setTime(fromTime, status);
if (U_FAILURE(status)) {
errln("FAIL: Failed to set Target time: %s", u_errorName(status));
return;
}
diffSet.clear();
if (!toSet.matches(toCalendar, diffSet, status)) {
UnicodeString diffs = diffSet.diffFrom(toSet, status);
errln((UnicodeString)"FAIL: "+thisString+", Differences: "+ diffs
+"', status: "+ u_errorName(status));
SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy G"), status);
UnicodeString fromString;
fmt.format(fromTime, fromString);
logln("Source Time: "+fromString+", Source Calendar: "
+fromCalendar->getType());
} else if (U_FAILURE(status)) {
errln("FAIL: "+thisString+" Failed to match: "+u_errorName(status));
} else {
logln("PASS: "+thisString+" match.");
}
}
示例14: NeedleStart
seec::Maybe<IndexedString>
IndexedString::from(UnicodeString const &String)
{
if (String.isBogus())
return seec::Maybe<IndexedString>();
UnicodeString const NeedleStart("@[");
UnicodeString const NeedleEscape("@[[");
UnicodeString const NeedleEnd("]");
UnicodeString CleanedString; // String with index indicators removed.
std::multimap<UnicodeString, Needle> Needles;
std::vector<std::pair<UnicodeString, int32_t>> IndexStack;
int32_t SearchFrom = 0; // Current offset in String.
int32_t FoundStart; // Position of matched index indicator.
while ((FoundStart = String.indexOf(NeedleStart, SearchFrom)) != -1) {
// Copy all the literal string data.
CleanedString.append(String, SearchFrom, FoundStart - SearchFrom);
// Check if this is an escape sequence.
if (String.compare(FoundStart, NeedleEscape.length(), NeedleEscape) == 0) {
CleanedString.append(NeedleStart);
SearchFrom = FoundStart + NeedleEscape.length();
continue;
}
// Find the end of this sequence.
int32_t FoundEnd = String.indexOf(NeedleEnd, SearchFrom);
if (FoundEnd == -1)
return seec::Maybe<IndexedString>();
if (FoundEnd == FoundStart + NeedleStart.length()) {
// This is a closing sequence.
if (IndexStack.size() == 0)
return seec::Maybe<IndexedString>();
// Pop the starting details of the last-opened sequence.
auto const Start = IndexStack.back();
IndexStack.pop_back();
// Store the needle for this sequence.
Needles.insert(std::make_pair(Start.first,
Needle(Start.second,
CleanedString.countChar32())));
}
else {
// This is an opening sequence.
int32_t const NameStart = FoundStart + NeedleStart.length();
int32_t const NameLength = FoundEnd - NameStart;
IndexStack.emplace_back(UnicodeString(String, NameStart, NameLength),
CleanedString.countChar32());
}
SearchFrom = FoundEnd + NeedleEnd.length();
}
// Copy all remaining literal data.
CleanedString.append(String, SearchFrom, String.length() - SearchFrom);
return IndexedString(std::move(CleanedString), std::move(Needles));
}
示例15: dataerrln
void DataDrivenCalendarTest::testConvert(TestData *testData,
const DataMap *settings, UBool forward) {
UErrorCode status = U_ZERO_ERROR;
Calendar *toCalendar= NULL;
const DataMap *currentCase= NULL;
char toCalLoc[256] = "";
char fromCalLoc[256] = "";
// build to calendar
UnicodeString testSetting = settings->getString("ToCalendar", status);
if (U_SUCCESS(status)) {
testSetting.extract(0, testSetting.length(), toCalLoc, (const char*)0);
toCalendar = Calendar::createInstance(toCalLoc, status);
if (U_FAILURE(status)) {
dataerrln(UnicodeString("Unable to instantiate ToCalendar for ")+testSetting);
return;
}
}
CalendarFieldsSet fromSet, toSet, diffSet;
SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"),
status);
if (U_FAILURE(status)) {
errcheckln(status, "FAIL: Couldn't create SimpleDateFormat: %s",
u_errorName(status));
return;
}
// Start the processing
int n = 0;
while (testData->nextCase(currentCase, status)) {
++n;
Calendar *fromCalendar= NULL;
UnicodeString locale = currentCase->getString("locale", status);
if (U_SUCCESS(status)) {
locale.extract(0, locale.length(), fromCalLoc, (const char*)0); // default codepage. Invariant codepage doesn't have '@'!
fromCalendar = Calendar::createInstance(fromCalLoc, status);
if (U_FAILURE(status)) {
errln("Unable to instantiate fromCalendar for "+locale);
return;
}
} else {
errln("No 'locale' line.");
continue;
}
fromSet.clear();
toSet.clear();
UnicodeString from = currentCase->getString("from", status);
if (U_FAILURE(status)) {
errln("No 'from' line.");
continue;
}
fromSet.parseFrom(from, status);
if (U_FAILURE(status)) {
errln("Failed to parse 'from' parameter: "+from);
continue;
}
UnicodeString to = currentCase->getString("to", status);
if (U_FAILURE(status)) {
errln("No 'to' line.");
continue;
}
toSet.parseFrom(to, &fromSet, status);
if (U_FAILURE(status)) {
errln("Failed to parse 'to' parameter: "+to);
continue;
}
// now, do it.
if (forward) {
logln((UnicodeString)"#"+n+" "+locale+"/"+from+" >>> "+toCalLoc+"/"
+to);
testConvert(n, fromSet, fromCalendar, toSet, toCalendar, forward);
} else {
logln((UnicodeString)"#"+n+" "+locale+"/"+from+" <<< "+toCalLoc+"/"
+to);
testConvert(n, toSet, toCalendar, fromSet, fromCalendar, forward);
}
delete fromCalendar;
}
delete toCalendar;
}