| OLD | NEW |
| 1 /* | 1 /* |
| 2 ******************************************************************************* | 2 ******************************************************************************* |
| 3 * Copyright (C) 1997-2014, International Business Machines Corporation and | 3 * Copyright (C) 1997-2015, International Business Machines Corporation and |
| 4 * others. All Rights Reserved. | 4 * others. All Rights Reserved. |
| 5 ******************************************************************************* | 5 ******************************************************************************* |
| 6 * | 6 * |
| 7 * File brkiter.cpp | 7 * File brkiter.cpp |
| 8 * | 8 * |
| 9 * Modification History: | 9 * Modification History: |
| 10 * | 10 * |
| 11 * Date Name Description | 11 * Date Name Description |
| 12 * 02/18/97 aliu Converted from OpenClass. Added DONE. | 12 * 02/18/97 aliu Converted from OpenClass. Added DONE. |
| 13 * 01/13/2000 helena Added UErrorCode parameter to createXXXInstance meth
ods. | 13 * 01/13/2000 helena Added UErrorCode parameter to createXXXInstance meth
ods. |
| 14 ********************************************************************************
********* | 14 ********************************************************************************
********* |
| 15 */ | 15 */ |
| 16 | 16 |
| 17 // ***************************************************************************** | 17 // ***************************************************************************** |
| 18 // This file was generated from the java source file BreakIterator.java | 18 // This file was generated from the java source file BreakIterator.java |
| 19 // ***************************************************************************** | 19 // ***************************************************************************** |
| 20 | 20 |
| 21 #include "unicode/utypes.h" | 21 #include "unicode/utypes.h" |
| 22 | 22 |
| 23 #if !UCONFIG_NO_BREAK_ITERATION | 23 #if !UCONFIG_NO_BREAK_ITERATION |
| 24 | 24 |
| 25 #include "unicode/rbbi.h" | 25 #include "unicode/rbbi.h" |
| 26 #include "unicode/brkiter.h" | 26 #include "unicode/brkiter.h" |
| 27 #include "unicode/udata.h" | 27 #include "unicode/udata.h" |
| 28 #include "unicode/ures.h" | 28 #include "unicode/ures.h" |
| 29 #include "unicode/ustring.h" | 29 #include "unicode/ustring.h" |
| 30 #include "unicode/filteredbrk.h" |
| 30 #include "ucln_cmn.h" | 31 #include "ucln_cmn.h" |
| 31 #include "cstring.h" | 32 #include "cstring.h" |
| 32 #include "umutex.h" | 33 #include "umutex.h" |
| 33 #include "servloc.h" | 34 #include "servloc.h" |
| 34 #include "locbased.h" | 35 #include "locbased.h" |
| 35 #include "uresimp.h" | 36 #include "uresimp.h" |
| 36 #include "uassert.h" | 37 #include "uassert.h" |
| 37 #include "ubrkimpl.h" | 38 #include "ubrkimpl.h" |
| 38 #include "charstr.h" | 39 #include "charstr.h" |
| 39 | 40 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 62 UResourceBundle *brkName = &brkNameStack; | 63 UResourceBundle *brkName = &brkNameStack; |
| 63 RuleBasedBreakIterator *result = NULL; | 64 RuleBasedBreakIterator *result = NULL; |
| 64 | 65 |
| 65 if (U_FAILURE(status)) | 66 if (U_FAILURE(status)) |
| 66 return NULL; | 67 return NULL; |
| 67 | 68 |
| 68 ures_initStackObject(brkRules); | 69 ures_initStackObject(brkRules); |
| 69 ures_initStackObject(brkName); | 70 ures_initStackObject(brkName); |
| 70 | 71 |
| 71 // Get the locale | 72 // Get the locale |
| 72 UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, loc.getName(), &status); | 73 UResourceBundle *b = ures_openNoDefault(U_ICUDATA_BRKITR, loc.getName(), &st
atus); |
| 73 /* this is a hack for now. Should be fixed when the data is fetched from | |
| 74 brk_index.txt */ | |
| 75 if(status==U_USING_DEFAULT_WARNING){ | |
| 76 status=U_ZERO_ERROR; | |
| 77 ures_openFillIn(b, U_ICUDATA_BRKITR, "", &status); | |
| 78 } | |
| 79 | 74 |
| 80 // Get the "boundaries" array. | 75 // Get the "boundaries" array. |
| 81 if (U_SUCCESS(status)) { | 76 if (U_SUCCESS(status)) { |
| 82 brkRules = ures_getByKeyWithFallback(b, "boundaries", brkRules, &status)
; | 77 brkRules = ures_getByKeyWithFallback(b, "boundaries", brkRules, &status)
; |
| 83 // Get the string object naming the rules file | 78 // Get the string object naming the rules file |
| 84 brkName = ures_getByKeyWithFallback(brkRules, type, brkName, &status); | 79 brkName = ures_getByKeyWithFallback(brkRules, type, brkName, &status); |
| 85 // Get the actual string | 80 // Get the actual string |
| 86 brkfname = ures_getString(brkName, &size, &status); | 81 brkfname = ures_getString(brkName, &size, &status); |
| 87 U_ASSERT((size_t)size<sizeof(fnbuff)); | 82 U_ASSERT((size_t)size<sizeof(fnbuff)); |
| 88 if ((size_t)size>=sizeof(fnbuff)) { | 83 if ((size_t)size>=sizeof(fnbuff)) { |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 return result; | 377 return result; |
| 383 } | 378 } |
| 384 else | 379 else |
| 385 #endif | 380 #endif |
| 386 { | 381 { |
| 387 return makeInstance(loc, kind, status); | 382 return makeInstance(loc, kind, status); |
| 388 } | 383 } |
| 389 } | 384 } |
| 390 | 385 |
| 391 // ------------------------------------- | 386 // ------------------------------------- |
| 387 enum { kKeyValueLenMax = 32 }; |
| 392 | 388 |
| 393 BreakIterator* | 389 BreakIterator* |
| 394 BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) | 390 BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) |
| 395 { | 391 { |
| 396 | 392 |
| 397 if (U_FAILURE(status)) { | 393 if (U_FAILURE(status)) { |
| 398 return NULL; | 394 return NULL; |
| 399 } | 395 } |
| 396 char lbType[kKeyValueLenMax]; |
| 400 | 397 |
| 401 BreakIterator *result = NULL; | 398 BreakIterator *result = NULL; |
| 402 switch (kind) { | 399 switch (kind) { |
| 403 case UBRK_CHARACTER: | 400 case UBRK_CHARACTER: |
| 404 result = BreakIterator::buildInstance(loc, "grapheme", kind, status); | 401 result = BreakIterator::buildInstance(loc, "grapheme", kind, status); |
| 405 break; | 402 break; |
| 406 case UBRK_WORD: | 403 case UBRK_WORD: |
| 407 result = BreakIterator::buildInstance(loc, "word", kind, status); | 404 result = BreakIterator::buildInstance(loc, "word", kind, status); |
| 408 break; | 405 break; |
| 409 case UBRK_LINE: | 406 case UBRK_LINE: |
| 410 result = BreakIterator::buildInstance(loc, "line", kind, status); | 407 uprv_strcpy(lbType, "line"); |
| 408 { |
| 409 char lbKeyValue[kKeyValueLenMax] = {0}; |
| 410 UErrorCode kvStatus = U_ZERO_ERROR; |
| 411 int32_t kLen = loc.getKeywordValue("lb", lbKeyValue, kKeyValueLenMax
, kvStatus); |
| 412 if (U_SUCCESS(kvStatus) && kLen > 0 && (uprv_strcmp(lbKeyValue,"stri
ct")==0 || uprv_strcmp(lbKeyValue,"normal")==0 || uprv_strcmp(lbKeyValue,"loose"
)==0)) { |
| 413 uprv_strcat(lbType, "_"); |
| 414 uprv_strcat(lbType, lbKeyValue); |
| 415 } |
| 416 } |
| 417 result = BreakIterator::buildInstance(loc, lbType, kind, status); |
| 411 break; | 418 break; |
| 412 case UBRK_SENTENCE: | 419 case UBRK_SENTENCE: |
| 413 result = BreakIterator::buildInstance(loc, "sentence", kind, status); | 420 result = BreakIterator::buildInstance(loc, "sentence", kind, status); |
| 421 { |
| 422 char ssKeyValue[kKeyValueLenMax] = {0}; |
| 423 UErrorCode kvStatus = U_ZERO_ERROR; |
| 424 int32_t kLen = loc.getKeywordValue("ss", ssKeyValue, kKeyValueLenMax
, kvStatus); |
| 425 if (U_SUCCESS(kvStatus) && kLen > 0 && uprv_strcmp(ssKeyValue,"stand
ard")==0) { |
| 426 FilteredBreakIteratorBuilder* fbiBuilder = FilteredBreakIterator
Builder::createInstance(loc, kvStatus); |
| 427 if (U_SUCCESS(kvStatus)) { |
| 428 result = fbiBuilder->build(result, status); |
| 429 delete fbiBuilder; |
| 430 } |
| 431 } |
| 432 } |
| 414 break; | 433 break; |
| 415 case UBRK_TITLE: | 434 case UBRK_TITLE: |
| 416 result = BreakIterator::buildInstance(loc, "title", kind, status); | 435 result = BreakIterator::buildInstance(loc, "title", kind, status); |
| 417 break; | 436 break; |
| 418 default: | 437 default: |
| 419 status = U_ILLEGAL_ARGUMENT_ERROR; | 438 status = U_ILLEGAL_ARGUMENT_ERROR; |
| 420 } | 439 } |
| 421 | 440 |
| 422 if (U_FAILURE(status)) { | 441 if (U_FAILURE(status)) { |
| 423 return NULL; | 442 return NULL; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 BreakIterator::BreakIterator (const Locale& valid, const Locale& actual) { | 483 BreakIterator::BreakIterator (const Locale& valid, const Locale& actual) { |
| 465 U_LOCALE_BASED(locBased, (*this)); | 484 U_LOCALE_BASED(locBased, (*this)); |
| 466 locBased.setLocaleIDs(valid, actual); | 485 locBased.setLocaleIDs(valid, actual); |
| 467 } | 486 } |
| 468 | 487 |
| 469 U_NAMESPACE_END | 488 U_NAMESPACE_END |
| 470 | 489 |
| 471 #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ | 490 #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ |
| 472 | 491 |
| 473 //eof | 492 //eof |
| OLD | NEW |