| OLD | NEW |
| 1 /* | 1 /* |
| 2 ******************************************************************************* | 2 ******************************************************************************* |
| 3 * Copyright (C) 2013-2014, International Business Machines | 3 * Copyright (C) 2013-2015, International Business Machines |
| 4 * Corporation and others. All Rights Reserved. | 4 * Corporation and others. All Rights Reserved. |
| 5 ******************************************************************************* | 5 ******************************************************************************* |
| 6 * collationruleparser.cpp | 6 * collationruleparser.cpp |
| 7 * | 7 * |
| 8 * (replaced the former ucol_tok.cpp) | 8 * (replaced the former ucol_tok.cpp) |
| 9 * | 9 * |
| 10 * created on: 2013apr10 | 10 * created on: 2013apr10 |
| 11 * created by: Markus W. Scherer | 11 * created by: Markus W. Scherer |
| 12 */ | 12 */ |
| 13 | 13 |
| (...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 if(U_FAILURE(errorCode)) { return; } | 699 if(U_FAILURE(errorCode)) { return; } |
| 700 int32_t code = getReorderCode(word.data()); | 700 int32_t code = getReorderCode(word.data()); |
| 701 if(code < 0) { | 701 if(code < 0) { |
| 702 setParseError("unknown script or reorder code", errorCode); | 702 setParseError("unknown script or reorder code", errorCode); |
| 703 return; | 703 return; |
| 704 } | 704 } |
| 705 reorderCodes.addElement(code, errorCode); | 705 reorderCodes.addElement(code, errorCode); |
| 706 if(U_FAILURE(errorCode)) { return; } | 706 if(U_FAILURE(errorCode)) { return; } |
| 707 i = limit; | 707 i = limit; |
| 708 } | 708 } |
| 709 int32_t length = reorderCodes.size(); | 709 settings->setReordering(*baseData, reorderCodes.getBuffer(), reorderCodes.si
ze(), errorCode); |
| 710 if(length == 1 && reorderCodes.elementAti(0) == UCOL_REORDER_CODE_NONE) { | |
| 711 settings->resetReordering(); | |
| 712 return; | |
| 713 } | |
| 714 uint8_t table[256]; | |
| 715 baseData->makeReorderTable(reorderCodes.getBuffer(), length, table, errorCod
e); | |
| 716 if(U_FAILURE(errorCode)) { return; } | |
| 717 if(!settings->setReordering(reorderCodes.getBuffer(), length, table)) { | |
| 718 errorCode = U_MEMORY_ALLOCATION_ERROR; | |
| 719 } | |
| 720 } | 710 } |
| 721 | 711 |
| 722 static const char *const gSpecialReorderCodes[] = { | 712 static const char *const gSpecialReorderCodes[] = { |
| 723 "space", "punct", "symbol", "currency", "digit" | 713 "space", "punct", "symbol", "currency", "digit" |
| 724 }; | 714 }; |
| 725 | 715 |
| 726 int32_t | 716 int32_t |
| 727 CollationRuleParser::getReorderCode(const char *word) { | 717 CollationRuleParser::getReorderCode(const char *word) { |
| 728 for(int32_t i = 0; i < UPRV_LENGTHOF(gSpecialReorderCodes); ++i) { | 718 for(int32_t i = 0; i < UPRV_LENGTHOF(gSpecialReorderCodes); ++i) { |
| 729 if(uprv_stricmp(word, gSpecialReorderCodes[i]) == 0) { | 719 if(uprv_stricmp(word, gSpecialReorderCodes[i]) == 0) { |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 877 CollationRuleParser::skipWhiteSpace(int32_t i) const { | 867 CollationRuleParser::skipWhiteSpace(int32_t i) const { |
| 878 while(i < rules->length() && PatternProps::isWhiteSpace(rules->charAt(i))) { | 868 while(i < rules->length() && PatternProps::isWhiteSpace(rules->charAt(i))) { |
| 879 ++i; | 869 ++i; |
| 880 } | 870 } |
| 881 return i; | 871 return i; |
| 882 } | 872 } |
| 883 | 873 |
| 884 U_NAMESPACE_END | 874 U_NAMESPACE_END |
| 885 | 875 |
| 886 #endif // !UCONFIG_NO_COLLATION | 876 #endif // !UCONFIG_NO_COLLATION |
| OLD | NEW |