diff options
author | Eike Rathke <erack@redhat.com> | 2013-09-05 14:56:08 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2013-09-05 14:57:29 +0200 |
commit | 660fe83b4357c9fa070739b9c4da9d9002c9bd51 (patch) | |
tree | 36a6dd9b686aaea54d0a6fe5475697515bea0e6a /i18npool | |
parent | 34af964c640c14db9f4890414641595e9af34696 (diff) |
use sensible indentation
that always annoyed me
Change-Id: I0c439ddb00d78590b465cd47db6e60d1939bd9f7
Diffstat (limited to 'i18npool')
26 files changed, 2004 insertions, 2000 deletions
diff --git a/i18npool/source/breakiterator/breakiteratorImpl.cxx b/i18npool/source/breakiterator/breakiteratorImpl.cxx index 595c921d46b5..4235027feeca 100644 --- a/i18npool/source/breakiterator/breakiteratorImpl.cxx +++ b/i18npool/source/breakiterator/breakiteratorImpl.cxx @@ -39,10 +39,10 @@ BreakIteratorImpl::BreakIteratorImpl() BreakIteratorImpl::~BreakIteratorImpl() { - // Clear lookuptable - for (size_t l = 0; l < lookupTable.size(); l++) - delete lookupTable[l]; - lookupTable.clear(); + // Clear lookuptable + for (size_t l = 0; l < lookupTable.size(); l++) + delete lookupTable[l]; + lookupTable.clear(); } #define LBI getLocaleSpecificBreakIterator(rLocale) @@ -51,75 +51,75 @@ sal_Int32 SAL_CALL BreakIteratorImpl::nextCharacters( const OUString& Text, sal_ const Locale &rLocale, sal_Int16 nCharacterIteratorMode, sal_Int32 nCount, sal_Int32& nDone ) throw(RuntimeException) { - if (nCount < 0) throw RuntimeException(); + if (nCount < 0) throw RuntimeException(); - return LBI->nextCharacters( Text, nStartPos, rLocale, nCharacterIteratorMode, nCount, nDone); + return LBI->nextCharacters( Text, nStartPos, rLocale, nCharacterIteratorMode, nCount, nDone); } sal_Int32 SAL_CALL BreakIteratorImpl::previousCharacters( const OUString& Text, sal_Int32 nStartPos, const Locale& rLocale, sal_Int16 nCharacterIteratorMode, sal_Int32 nCount, sal_Int32& nDone ) throw(RuntimeException) { - if (nCount < 0) throw RuntimeException(); + if (nCount < 0) throw RuntimeException(); - return LBI->previousCharacters( Text, nStartPos, rLocale, nCharacterIteratorMode, nCount, nDone); + return LBI->previousCharacters( Text, nStartPos, rLocale, nCharacterIteratorMode, nCount, nDone); } #define isZWSP(c) (ch == 0x200B) static sal_Int32 skipSpace(const OUString& Text, sal_Int32 nPos, sal_Int32 len, sal_Int16 rWordType, sal_Bool bDirection) { - sal_uInt32 ch=0; - sal_Int32 pos=nPos; - switch (rWordType) { - case WordType::ANYWORD_IGNOREWHITESPACES: - if (bDirection) - while (nPos < len && (u_isWhitespace(ch = Text.iterateCodePoints(&pos, 1)) || isZWSP(ch))) nPos=pos; - else - while (nPos > 0 && (u_isWhitespace(ch = Text.iterateCodePoints(&pos, -1)) || isZWSP(ch))) nPos=pos; + sal_uInt32 ch=0; + sal_Int32 pos=nPos; + switch (rWordType) { + case WordType::ANYWORD_IGNOREWHITESPACES: + if (bDirection) + while (nPos < len && (u_isWhitespace(ch = Text.iterateCodePoints(&pos, 1)) || isZWSP(ch))) nPos=pos; + else + while (nPos > 0 && (u_isWhitespace(ch = Text.iterateCodePoints(&pos, -1)) || isZWSP(ch))) nPos=pos; break; - case WordType::DICTIONARY_WORD: - if (bDirection) - while (nPos < len && (u_isWhitespace(ch = Text.iterateCodePoints(&pos, 1)) || isZWSP(ch) || + case WordType::DICTIONARY_WORD: + if (bDirection) + while (nPos < len && (u_isWhitespace(ch = Text.iterateCodePoints(&pos, 1)) || isZWSP(ch) || ! (ch == 0x002E || u_isalnum(ch)))) nPos=pos; - else - while (nPos > 0 && (u_isWhitespace(ch = Text.iterateCodePoints(&pos, -1)) || isZWSP(ch) || + else + while (nPos > 0 && (u_isWhitespace(ch = Text.iterateCodePoints(&pos, -1)) || isZWSP(ch) || ! (ch == 0x002E || u_isalnum(ch)))) nPos=pos; break; - case WordType::WORD_COUNT: - if (bDirection) - while (nPos < len && (u_isUWhiteSpace(ch = Text.iterateCodePoints(&pos, 1)) || isZWSP(ch))) nPos=pos; - else - while (nPos > 0 && (u_isUWhiteSpace(ch = Text.iterateCodePoints(&pos, -1)) || isZWSP(ch))) nPos=pos; + case WordType::WORD_COUNT: + if (bDirection) + while (nPos < len && (u_isUWhiteSpace(ch = Text.iterateCodePoints(&pos, 1)) || isZWSP(ch))) nPos=pos; + else + while (nPos > 0 && (u_isUWhiteSpace(ch = Text.iterateCodePoints(&pos, -1)) || isZWSP(ch))) nPos=pos; break; - } - return nPos; + } + return nPos; } Boundary SAL_CALL BreakIteratorImpl::nextWord( const OUString& Text, sal_Int32 nStartPos, const Locale& rLocale, sal_Int16 rWordType ) throw(RuntimeException) { - sal_Int32 len = Text.getLength(); - if( nStartPos < 0 || len == 0 ) - result.endPos = result.startPos = 0; - else if (nStartPos >= len) - result.endPos = result.startPos = len; - else { - result = LBI->nextWord(Text, nStartPos, rLocale, rWordType); - - nStartPos = skipSpace(Text, result.startPos, len, rWordType, sal_True); - - if ( nStartPos != result.startPos) { - if( nStartPos >= len ) - result.startPos = result.endPos = len; - else { - result = LBI->getWordBoundary(Text, nStartPos, rLocale, rWordType, sal_True); - // i88041: avoid startPos goes back to nStartPos when switching between Latin and CJK scripts - if (result.startPos < nStartPos) result.startPos = nStartPos; - } + sal_Int32 len = Text.getLength(); + if( nStartPos < 0 || len == 0 ) + result.endPos = result.startPos = 0; + else if (nStartPos >= len) + result.endPos = result.startPos = len; + else { + result = LBI->nextWord(Text, nStartPos, rLocale, rWordType); + + nStartPos = skipSpace(Text, result.startPos, len, rWordType, sal_True); + + if ( nStartPos != result.startPos) { + if( nStartPos >= len ) + result.startPos = result.endPos = len; + else { + result = LBI->getWordBoundary(Text, nStartPos, rLocale, rWordType, sal_True); + // i88041: avoid startPos goes back to nStartPos when switching between Latin and CJK scripts + if (result.startPos < nStartPos) result.startPos = nStartPos; } } - return result; + } + return result; } static inline sal_Bool SAL_CALL isCJK( const Locale& rLocale ) { @@ -129,124 +129,124 @@ static inline sal_Bool SAL_CALL isCJK( const Locale& rLocale ) { Boundary SAL_CALL BreakIteratorImpl::previousWord( const OUString& Text, sal_Int32 nStartPos, const Locale& rLocale, sal_Int16 rWordType) throw(RuntimeException) { - sal_Int32 len = Text.getLength(); - if( nStartPos <= 0 || len == 0 ) { - result.endPos = result.startPos = 0; - return result; - } else if (nStartPos > len) { - result.endPos = result.startPos = len; - return result; - } + sal_Int32 len = Text.getLength(); + if( nStartPos <= 0 || len == 0 ) { + result.endPos = result.startPos = 0; + return result; + } else if (nStartPos > len) { + result.endPos = result.startPos = len; + return result; + } - sal_Int32 nPos = skipSpace(Text, nStartPos, len, rWordType, sal_False); + sal_Int32 nPos = skipSpace(Text, nStartPos, len, rWordType, sal_False); - // if some spaces are skiped, and the script type is Asian with no CJK rLocale, we have to return - // (nStartPos, -1) for caller to send correct rLocale for loading correct dictionary. - result.startPos = nPos; - if (nPos != nStartPos && nPos > 0 && !isCJK(rLocale) && getScriptClass(Text.iterateCodePoints(&nPos, -1)) == ScriptType::ASIAN) { - result.endPos = -1; - return result; - } + // if some spaces are skiped, and the script type is Asian with no CJK rLocale, we have to return + // (nStartPos, -1) for caller to send correct rLocale for loading correct dictionary. + result.startPos = nPos; + if (nPos != nStartPos && nPos > 0 && !isCJK(rLocale) && getScriptClass(Text.iterateCodePoints(&nPos, -1)) == ScriptType::ASIAN) { + result.endPos = -1; + return result; + } - return LBI->previousWord(Text, result.startPos, rLocale, rWordType); + return LBI->previousWord(Text, result.startPos, rLocale, rWordType); } Boundary SAL_CALL BreakIteratorImpl::getWordBoundary( const OUString& Text, sal_Int32 nPos, const Locale& rLocale, sal_Int16 rWordType, sal_Bool bDirection ) throw(RuntimeException) { - sal_Int32 len = Text.getLength(); - if( nPos < 0 || len == 0 ) + sal_Int32 len = Text.getLength(); + if( nPos < 0 || len == 0 ) + result.endPos = result.startPos = 0; + else if (nPos > len) + result.endPos = result.startPos = len; + else { + sal_Int32 next, prev; + next = skipSpace(Text, nPos, len, rWordType, sal_True); + prev = skipSpace(Text, nPos, len, rWordType, sal_False); + if (prev == 0 && next == len) { + result.endPos = result.startPos = nPos; + } else if (prev == 0 && ! bDirection) { result.endPos = result.startPos = 0; - else if (nPos > len) + } else if (next == len && bDirection) { result.endPos = result.startPos = len; - else { - sal_Int32 next, prev; - next = skipSpace(Text, nPos, len, rWordType, sal_True); - prev = skipSpace(Text, nPos, len, rWordType, sal_False); - if (prev == 0 && next == len) { - result.endPos = result.startPos = nPos; - } else if (prev == 0 && ! bDirection) { - result.endPos = result.startPos = 0; - } else if (next == len && bDirection) { - result.endPos = result.startPos = len; - } else { - if (next != prev) { - if (next == nPos && next != len) - bDirection = sal_True; - else if (prev == nPos && prev != 0) - bDirection = sal_False; - else - nPos = bDirection ? next : prev; - } - result = LBI->getWordBoundary(Text, nPos, rLocale, rWordType, bDirection); + } else { + if (next != prev) { + if (next == nPos && next != len) + bDirection = sal_True; + else if (prev == nPos && prev != 0) + bDirection = sal_False; + else + nPos = bDirection ? next : prev; } + result = LBI->getWordBoundary(Text, nPos, rLocale, rWordType, bDirection); } - return result; + } + return result; } sal_Bool SAL_CALL BreakIteratorImpl::isBeginWord( const OUString& Text, sal_Int32 nPos, const Locale& rLocale, sal_Int16 rWordType ) throw(RuntimeException) { - sal_Int32 len = Text.getLength(); + sal_Int32 len = Text.getLength(); - if (nPos < 0 || nPos >= len) return sal_False; + if (nPos < 0 || nPos >= len) return sal_False; - sal_Int32 tmp = skipSpace(Text, nPos, len, rWordType, sal_True); + sal_Int32 tmp = skipSpace(Text, nPos, len, rWordType, sal_True); - if (tmp != nPos) return sal_False; + if (tmp != nPos) return sal_False; - result = getWordBoundary(Text, nPos, rLocale, rWordType, sal_True); + result = getWordBoundary(Text, nPos, rLocale, rWordType, sal_True); - return result.startPos == nPos; + return result.startPos == nPos; } sal_Bool SAL_CALL BreakIteratorImpl::isEndWord( const OUString& Text, sal_Int32 nPos, const Locale& rLocale, sal_Int16 rWordType ) throw(RuntimeException) { - sal_Int32 len = Text.getLength(); + sal_Int32 len = Text.getLength(); - if (nPos <= 0 || nPos > len) return sal_False; + if (nPos <= 0 || nPos > len) return sal_False; - sal_Int32 tmp = skipSpace(Text, nPos, len, rWordType, sal_False); + sal_Int32 tmp = skipSpace(Text, nPos, len, rWordType, sal_False); - if (tmp != nPos) return sal_False; + if (tmp != nPos) return sal_False; - result = getWordBoundary(Text, nPos, rLocale, rWordType, sal_False); + result = getWordBoundary(Text, nPos, rLocale, rWordType, sal_False); - return result.endPos == nPos; + return result.endPos == nPos; } sal_Int32 SAL_CALL BreakIteratorImpl::beginOfSentence( const OUString& Text, sal_Int32 nStartPos, const Locale &rLocale ) throw(RuntimeException) { - if (nStartPos < 0 || nStartPos > Text.getLength()) - return -1; - if (Text.isEmpty()) return 0; - return LBI->beginOfSentence(Text, nStartPos, rLocale); + if (nStartPos < 0 || nStartPos > Text.getLength()) + return -1; + if (Text.isEmpty()) return 0; + return LBI->beginOfSentence(Text, nStartPos, rLocale); } sal_Int32 SAL_CALL BreakIteratorImpl::endOfSentence( const OUString& Text, sal_Int32 nStartPos, const Locale &rLocale ) throw(RuntimeException) { - if (nStartPos < 0 || nStartPos > Text.getLength()) - return -1; - if (Text.isEmpty()) return 0; - return LBI->endOfSentence(Text, nStartPos, rLocale); + if (nStartPos < 0 || nStartPos > Text.getLength()) + return -1; + if (Text.isEmpty()) return 0; + return LBI->endOfSentence(Text, nStartPos, rLocale); } LineBreakResults SAL_CALL BreakIteratorImpl::getLineBreak( const OUString& Text, sal_Int32 nStartPos, const Locale& rLocale, sal_Int32 nMinBreakPos, const LineBreakHyphenationOptions& hOptions, const LineBreakUserOptions& bOptions ) throw(RuntimeException) { - return LBI->getLineBreak(Text, nStartPos, rLocale, nMinBreakPos, hOptions, bOptions); + return LBI->getLineBreak(Text, nStartPos, rLocale, nMinBreakPos, hOptions, bOptions); } sal_Int16 SAL_CALL BreakIteratorImpl::getScriptType( const OUString& Text, sal_Int32 nPos ) throw(RuntimeException) { - return (nPos < 0 || nPos >= Text.getLength()) ? ScriptType::WEAK : - getScriptClass(Text.iterateCodePoints(&nPos, 0)); + return (nPos < 0 || nPos >= Text.getLength()) ? ScriptType::WEAK : + getScriptClass(Text.iterateCodePoints(&nPos, 0)); } @@ -280,122 +280,122 @@ static sal_Int32 SAL_CALL iterateCodePoints(const OUString& Text, sal_Int32 &nSt sal_Int32 SAL_CALL BreakIteratorImpl::beginOfScript( const OUString& Text, sal_Int32 nStartPos, sal_Int16 ScriptType ) throw(RuntimeException) { - if (nStartPos < 0 || nStartPos >= Text.getLength()) - return -1; + if (nStartPos < 0 || nStartPos >= Text.getLength()) + return -1; - if(ScriptType != getScriptClass(Text.iterateCodePoints(&nStartPos, 0))) - return -1; + if(ScriptType != getScriptClass(Text.iterateCodePoints(&nStartPos, 0))) + return -1; + if (nStartPos == 0) return 0; + sal_uInt32 ch=0; + while (iterateCodePoints(Text, nStartPos, -1, ch) >= 0 && ScriptType == getScriptClass(ch)) { if (nStartPos == 0) return 0; - sal_uInt32 ch=0; - while (iterateCodePoints(Text, nStartPos, -1, ch) >= 0 && ScriptType == getScriptClass(ch)) { - if (nStartPos == 0) return 0; - } + } - return iterateCodePoints(Text, nStartPos, 1, ch); + return iterateCodePoints(Text, nStartPos, 1, ch); } sal_Int32 SAL_CALL BreakIteratorImpl::endOfScript( const OUString& Text, sal_Int32 nStartPos, sal_Int16 ScriptType ) throw(RuntimeException) { - if (nStartPos < 0 || nStartPos >= Text.getLength()) - return -1; + if (nStartPos < 0 || nStartPos >= Text.getLength()) + return -1; - if(ScriptType != getScriptClass(Text.iterateCodePoints(&nStartPos, 0))) - return -1; + if(ScriptType != getScriptClass(Text.iterateCodePoints(&nStartPos, 0))) + return -1; - sal_Int32 strLen = Text.getLength(); - sal_uInt32 ch=0; - while(iterateCodePoints(Text, nStartPos, 1, ch) < strLen ) { - sal_Int16 currentCharScriptType = getScriptClass(ch); - if(ScriptType != currentCharScriptType && currentCharScriptType != ScriptType::WEAK) - break; - } - return nStartPos; + sal_Int32 strLen = Text.getLength(); + sal_uInt32 ch=0; + while(iterateCodePoints(Text, nStartPos, 1, ch) < strLen ) { + sal_Int16 currentCharScriptType = getScriptClass(ch); + if(ScriptType != currentCharScriptType && currentCharScriptType != ScriptType::WEAK) + break; + } + return nStartPos; } sal_Int32 SAL_CALL BreakIteratorImpl::previousScript( const OUString& Text, sal_Int32 nStartPos, sal_Int16 ScriptType ) throw(RuntimeException) { - if (nStartPos < 0) - return -1; - if (nStartPos > Text.getLength()) - nStartPos = Text.getLength(); + if (nStartPos < 0) + return -1; + if (nStartPos > Text.getLength()) + nStartPos = Text.getLength(); - sal_Int16 numberOfChange = (ScriptType == getScriptClass(Text.iterateCodePoints(&nStartPos, 0))) ? 3 : 2; + sal_Int16 numberOfChange = (ScriptType == getScriptClass(Text.iterateCodePoints(&nStartPos, 0))) ? 3 : 2; - sal_uInt32 ch=0; - while (numberOfChange > 0 && iterateCodePoints(Text, nStartPos, -1, ch) >= 0) { - if ((((numberOfChange % 2) == 0) ^ (ScriptType != getScriptClass(ch)))) + sal_uInt32 ch=0; + while (numberOfChange > 0 && iterateCodePoints(Text, nStartPos, -1, ch) >= 0) { + if ((((numberOfChange % 2) == 0) ^ (ScriptType != getScriptClass(ch)))) + numberOfChange--; + else if (nStartPos == 0) { + if (numberOfChange > 0) numberOfChange--; - else if (nStartPos == 0) { - if (numberOfChange > 0) - numberOfChange--; - if (nStartPos > 0) - Text.iterateCodePoints(&nStartPos, -1); - else - return -1; - } + if (nStartPos > 0) + Text.iterateCodePoints(&nStartPos, -1); + else + return -1; } - return numberOfChange == 0 ? iterateCodePoints(Text, nStartPos, 1, ch) : -1; + } + return numberOfChange == 0 ? iterateCodePoints(Text, nStartPos, 1, ch) : -1; } sal_Int32 SAL_CALL BreakIteratorImpl::nextScript( const OUString& Text, sal_Int32 nStartPos, sal_Int16 ScriptType ) throw(RuntimeException) { - if (nStartPos < 0) - nStartPos = 0; - sal_Int32 strLen = Text.getLength(); - if (nStartPos > strLen) - return -1; + if (nStartPos < 0) + nStartPos = 0; + sal_Int32 strLen = Text.getLength(); + if (nStartPos > strLen) + return -1; - sal_Int16 numberOfChange = (ScriptType == getScriptClass(Text.iterateCodePoints(&nStartPos, 0))) ? 2 : 1; + sal_Int16 numberOfChange = (ScriptType == getScriptClass(Text.iterateCodePoints(&nStartPos, 0))) ? 2 : 1; - sal_uInt32 ch=0; - while (numberOfChange > 0 && iterateCodePoints(Text, nStartPos, 1, ch) < strLen) { - sal_Int16 currentCharScriptType = getScriptClass(ch); - if ((numberOfChange == 1) ? (ScriptType == currentCharScriptType) : - (ScriptType != currentCharScriptType && currentCharScriptType != ScriptType::WEAK)) - numberOfChange--; - } - return numberOfChange == 0 ? nStartPos : -1; + sal_uInt32 ch=0; + while (numberOfChange > 0 && iterateCodePoints(Text, nStartPos, 1, ch) < strLen) { + sal_Int16 currentCharScriptType = getScriptClass(ch); + if ((numberOfChange == 1) ? (ScriptType == currentCharScriptType) : + (ScriptType != currentCharScriptType && currentCharScriptType != ScriptType::WEAK)) + numberOfChange--; + } + return numberOfChange == 0 ? nStartPos : -1; } sal_Int32 SAL_CALL BreakIteratorImpl::beginOfCharBlock( const OUString& Text, sal_Int32 nStartPos, const Locale& /*rLocale*/, sal_Int16 CharType ) throw(RuntimeException) { - if (CharType == CharType::ANY_CHAR) return 0; - if (nStartPos < 0 || nStartPos >= Text.getLength()) return -1; - if (CharType != (sal_Int16)u_charType( Text.iterateCodePoints(&nStartPos, 0))) return -1; + if (CharType == CharType::ANY_CHAR) return 0; + if (nStartPos < 0 || nStartPos >= Text.getLength()) return -1; + if (CharType != (sal_Int16)u_charType( Text.iterateCodePoints(&nStartPos, 0))) return -1; - sal_Int32 nPos=nStartPos; - while(nStartPos > 0 && CharType == (sal_Int16)u_charType(Text.iterateCodePoints(&nPos, -1))) { nStartPos=nPos; } - return nStartPos; // begin of char block is inclusive + sal_Int32 nPos=nStartPos; + while(nStartPos > 0 && CharType == (sal_Int16)u_charType(Text.iterateCodePoints(&nPos, -1))) { nStartPos=nPos; } + return nStartPos; // begin of char block is inclusive } sal_Int32 SAL_CALL BreakIteratorImpl::endOfCharBlock( const OUString& Text, sal_Int32 nStartPos, const Locale& /*rLocale*/, sal_Int16 CharType ) throw(RuntimeException) { - sal_Int32 strLen = Text.getLength(); + sal_Int32 strLen = Text.getLength(); - if (CharType == CharType::ANY_CHAR) return strLen; // end of char block is exclusive - if (nStartPos < 0 || nStartPos >= strLen) return -1; - if (CharType != (sal_Int16)u_charType(Text.iterateCodePoints(&nStartPos, 0))) return -1; + if (CharType == CharType::ANY_CHAR) return strLen; // end of char block is exclusive + if (nStartPos < 0 || nStartPos >= strLen) return -1; + if (CharType != (sal_Int16)u_charType(Text.iterateCodePoints(&nStartPos, 0))) return -1; - sal_uInt32 ch=0; - while(iterateCodePoints(Text, nStartPos, 1, ch) < strLen && CharType == (sal_Int16)u_charType(ch)) {} - return nStartPos; // end of char block is exclusive + sal_uInt32 ch=0; + while(iterateCodePoints(Text, nStartPos, 1, ch) < strLen && CharType == (sal_Int16)u_charType(ch)) {} + return nStartPos; // end of char block is exclusive } sal_Int32 SAL_CALL BreakIteratorImpl::nextCharBlock( const OUString& Text, sal_Int32 nStartPos, const Locale& /*rLocale*/, sal_Int16 CharType ) throw(RuntimeException) { - if (CharType == CharType::ANY_CHAR) return -1; - if (nStartPos < 0 || nStartPos >= Text.getLength()) return -1; + if (CharType == CharType::ANY_CHAR) return -1; + if (nStartPos < 0 || nStartPos >= Text.getLength()) return -1; - sal_Int16 numberOfChange = (CharType == (sal_Int16)u_charType(Text.iterateCodePoints(&nStartPos, 0))) ? 2 : 1; - sal_Int32 strLen = Text.getLength(); + sal_Int16 numberOfChange = (CharType == (sal_Int16)u_charType(Text.iterateCodePoints(&nStartPos, 0))) ? 2 : 1; + sal_Int32 strLen = Text.getLength(); sal_uInt32 ch=0; while (numberOfChange > 0 && iterateCodePoints(Text, nStartPos, 1, ch) < strLen) { @@ -408,21 +408,21 @@ sal_Int32 SAL_CALL BreakIteratorImpl::nextCharBlock( const OUString& Text, sal_I sal_Int32 SAL_CALL BreakIteratorImpl::previousCharBlock( const OUString& Text, sal_Int32 nStartPos, const Locale& /*rLocale*/, sal_Int16 CharType ) throw(RuntimeException) { - if(CharType == CharType::ANY_CHAR) return -1; - if (nStartPos < 0 || nStartPos >= Text.getLength()) return -1; + if(CharType == CharType::ANY_CHAR) return -1; + if (nStartPos < 0 || nStartPos >= Text.getLength()) return -1; - sal_Int16 numberOfChange = (CharType == (sal_Int16)u_charType(Text.iterateCodePoints(&nStartPos, 0))) ? 3 : 2; + sal_Int16 numberOfChange = (CharType == (sal_Int16)u_charType(Text.iterateCodePoints(&nStartPos, 0))) ? 3 : 2; - sal_uInt32 ch=0; - while (numberOfChange > 0 && iterateCodePoints(Text, nStartPos, -1, ch) >= 0) { - if (((numberOfChange % 2) == 0) ^ (CharType != (sal_Int16)u_charType(ch))) - numberOfChange--; - if (nStartPos == 0 && numberOfChange > 0) { - numberOfChange--; - if (numberOfChange == 0) return nStartPos; - } + sal_uInt32 ch=0; + while (numberOfChange > 0 && iterateCodePoints(Text, nStartPos, -1, ch) >= 0) { + if (((numberOfChange % 2) == 0) ^ (CharType != (sal_Int16)u_charType(ch))) + numberOfChange--; + if (nStartPos == 0 && numberOfChange > 0) { + numberOfChange--; + if (numberOfChange == 0) return nStartPos; } - return numberOfChange == 0 ? iterateCodePoints(Text, nStartPos, 1, ch) : -1; + } + return numberOfChange == 0 ? iterateCodePoints(Text, nStartPos, 1, ch) : -1; } @@ -430,88 +430,88 @@ sal_Int32 SAL_CALL BreakIteratorImpl::previousCharBlock( const OUString& Text, s sal_Int16 SAL_CALL BreakIteratorImpl::getWordType( const OUString& /*Text*/, sal_Int32 /*nPos*/, const Locale& /*rLocale*/ ) throw(RuntimeException) { - return 0; + return 0; } namespace { - sal_Int16 getScriptClassByUAX24Script(sal_uInt32 currentChar) - { - int32_t script = u_getIntPropertyValue(currentChar, UCHAR_SCRIPT); - return unicode::getScriptClassFromUScriptCode(static_cast<UScriptCode>(script)); - } +sal_Int16 getScriptClassByUAX24Script(sal_uInt32 currentChar) +{ + int32_t script = u_getIntPropertyValue(currentChar, UCHAR_SCRIPT); + return unicode::getScriptClassFromUScriptCode(static_cast<UScriptCode>(script)); +} - struct UBlock2Script - { - UBlockCode from; - UBlockCode to; - sal_Int16 script; - }; +struct UBlock2Script +{ + UBlockCode from; + UBlockCode to; + sal_Int16 script; +}; - static const UBlock2Script scriptList[] = - { - {UBLOCK_NO_BLOCK, UBLOCK_NO_BLOCK, ScriptType::WEAK}, - {UBLOCK_BASIC_LATIN, UBLOCK_ARMENIAN, ScriptType::LATIN}, - {UBLOCK_HEBREW, UBLOCK_MYANMAR, ScriptType::COMPLEX}, - {UBLOCK_GEORGIAN, UBLOCK_GEORGIAN, ScriptType::LATIN}, - {UBLOCK_HANGUL_JAMO, UBLOCK_HANGUL_JAMO, ScriptType::ASIAN}, - {UBLOCK_ETHIOPIC, UBLOCK_ETHIOPIC, ScriptType::COMPLEX}, - {UBLOCK_CHEROKEE, UBLOCK_RUNIC, ScriptType::LATIN}, - {UBLOCK_KHMER, UBLOCK_MONGOLIAN, ScriptType::COMPLEX}, - {UBLOCK_LATIN_EXTENDED_ADDITIONAL, UBLOCK_GREEK_EXTENDED, ScriptType::LATIN}, - {UBLOCK_NUMBER_FORMS, UBLOCK_NUMBER_FORMS, ScriptType::WEAK}, - {UBLOCK_CJK_RADICALS_SUPPLEMENT, UBLOCK_HANGUL_SYLLABLES, ScriptType::ASIAN}, - {UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS, UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS, ScriptType::ASIAN}, - {UBLOCK_ARABIC_PRESENTATION_FORMS_A, UBLOCK_ARABIC_PRESENTATION_FORMS_A, ScriptType::COMPLEX}, - {UBLOCK_CJK_COMPATIBILITY_FORMS, UBLOCK_CJK_COMPATIBILITY_FORMS, ScriptType::ASIAN}, - {UBLOCK_ARABIC_PRESENTATION_FORMS_B, UBLOCK_ARABIC_PRESENTATION_FORMS_B, ScriptType::COMPLEX}, - {UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS, UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS, ScriptType::ASIAN}, - {UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B, UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT, ScriptType::ASIAN}, - {UBLOCK_CJK_STROKES, UBLOCK_CJK_STROKES, ScriptType::ASIAN}, - {UBLOCK_LATIN_EXTENDED_C, UBLOCK_LATIN_EXTENDED_D, ScriptType::LATIN} - }; - - #define scriptListCount SAL_N_ELEMENTS(scriptList) - - //always sets rScriptType - // - //returns true for characters historically explicitly assigned to - //latin/weak/asian - // - //returns false for characters that historically implicitly assigned to - //weak as unknown - bool getCompatibilityScriptClassByBlock(sal_uInt32 currentChar, sal_Int16 &rScriptType) +static const UBlock2Script scriptList[] = +{ + {UBLOCK_NO_BLOCK, UBLOCK_NO_BLOCK, ScriptType::WEAK}, + {UBLOCK_BASIC_LATIN, UBLOCK_ARMENIAN, ScriptType::LATIN}, + {UBLOCK_HEBREW, UBLOCK_MYANMAR, ScriptType::COMPLEX}, + {UBLOCK_GEORGIAN, UBLOCK_GEORGIAN, ScriptType::LATIN}, + {UBLOCK_HANGUL_JAMO, UBLOCK_HANGUL_JAMO, ScriptType::ASIAN}, + {UBLOCK_ETHIOPIC, UBLOCK_ETHIOPIC, ScriptType::COMPLEX}, + {UBLOCK_CHEROKEE, UBLOCK_RUNIC, ScriptType::LATIN}, + {UBLOCK_KHMER, UBLOCK_MONGOLIAN, ScriptType::COMPLEX}, + {UBLOCK_LATIN_EXTENDED_ADDITIONAL, UBLOCK_GREEK_EXTENDED, ScriptType::LATIN}, + {UBLOCK_NUMBER_FORMS, UBLOCK_NUMBER_FORMS, ScriptType::WEAK}, + {UBLOCK_CJK_RADICALS_SUPPLEMENT, UBLOCK_HANGUL_SYLLABLES, ScriptType::ASIAN}, + {UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS, UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS, ScriptType::ASIAN}, + {UBLOCK_ARABIC_PRESENTATION_FORMS_A, UBLOCK_ARABIC_PRESENTATION_FORMS_A, ScriptType::COMPLEX}, + {UBLOCK_CJK_COMPATIBILITY_FORMS, UBLOCK_CJK_COMPATIBILITY_FORMS, ScriptType::ASIAN}, + {UBLOCK_ARABIC_PRESENTATION_FORMS_B, UBLOCK_ARABIC_PRESENTATION_FORMS_B, ScriptType::COMPLEX}, + {UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS, UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS, ScriptType::ASIAN}, + {UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B, UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT, ScriptType::ASIAN}, + {UBLOCK_CJK_STROKES, UBLOCK_CJK_STROKES, ScriptType::ASIAN}, + {UBLOCK_LATIN_EXTENDED_C, UBLOCK_LATIN_EXTENDED_D, ScriptType::LATIN} +}; + +#define scriptListCount SAL_N_ELEMENTS(scriptList) + +//always sets rScriptType +// +//returns true for characters historically explicitly assigned to +//latin/weak/asian +// +//returns false for characters that historically implicitly assigned to +//weak as unknown +bool getCompatibilityScriptClassByBlock(sal_uInt32 currentChar, sal_Int16 &rScriptType) +{ + bool bKnown = true; + //handle specific characters always as weak: + // 0x01 - this breaks a word + // 0x02 - this can be inside a word + // 0x20 & 0xA0 - Bug 102975, declare western space and non-break space as WEAK char. + if( 0x01 == currentChar || 0x02 == currentChar || 0x20 == currentChar || 0xA0 == currentChar) + rScriptType = ScriptType::WEAK; + // workaround for Coptic + else if ( 0x2C80 <= currentChar && 0x2CE3 >= currentChar) + rScriptType = ScriptType::LATIN; + else { - bool bKnown = true; - //handle specific characters always as weak: - // 0x01 - this breaks a word - // 0x02 - this can be inside a word - // 0x20 & 0xA0 - Bug 102975, declare western space and non-break space as WEAK char. - if( 0x01 == currentChar || 0x02 == currentChar || 0x20 == currentChar || 0xA0 == currentChar) - rScriptType = ScriptType::WEAK; - // workaround for Coptic - else if ( 0x2C80 <= currentChar && 0x2CE3 >= currentChar) - rScriptType = ScriptType::LATIN; + UBlockCode block=ublock_getCode(currentChar); + size_t i = 0; + while (i < scriptListCount) + { + if (block <= scriptList[i].to) + break; + ++i; + } + if (i < scriptListCount && block >= scriptList[i].from) + rScriptType = scriptList[i].script; else { - UBlockCode block=ublock_getCode(currentChar); - size_t i = 0; - while (i < scriptListCount) - { - if (block <= scriptList[i].to) - break; - ++i; - } - if (i < scriptListCount && block >= scriptList[i].from) - rScriptType = scriptList[i].script; - else - { - rScriptType = ScriptType::WEAK; - bKnown = false; - } + rScriptType = ScriptType::WEAK; + bKnown = false; } - return bKnown; } + return bKnown; +} } sal_Int16 BreakIteratorImpl::getScriptClass(sal_uInt32 currentChar) @@ -536,73 +536,73 @@ static inline sal_Bool operator == (const Locale& l1, const Locale& l2) { sal_Bool SAL_CALL BreakIteratorImpl::createLocaleSpecificBreakIterator(const OUString& aLocaleName) throw( RuntimeException ) { - // to share service between same Language but different Country code, like zh_CN and zh_TW - for (size_t l = 0; l < lookupTable.size(); l++) { - lookupTableItem *listItem = lookupTable[l]; - if (aLocaleName == listItem->aLocale.Language) { - xBI = listItem->xBI; - return sal_True; - } + // to share service between same Language but different Country code, like zh_CN and zh_TW + for (size_t l = 0; l < lookupTable.size(); l++) { + lookupTableItem *listItem = lookupTable[l]; + if (aLocaleName == listItem->aLocale.Language) { + xBI = listItem->xBI; + return sal_True; } + } - Reference < uno::XInterface > xI = m_xContext->getServiceManager()->createInstanceWithContext( + Reference < uno::XInterface > xI = m_xContext->getServiceManager()->createInstanceWithContext( OUString("com.sun.star.i18n.BreakIterator_") + aLocaleName, m_xContext); - if ( xI.is() ) { - xBI.set(xI, UNO_QUERY); - if (xBI.is()) { - lookupTable.push_back(new lookupTableItem(Locale(aLocaleName, aLocaleName, aLocaleName), xBI)); - return sal_True; - } + if ( xI.is() ) { + xBI.set(xI, UNO_QUERY); + if (xBI.is()) { + lookupTable.push_back(new lookupTableItem(Locale(aLocaleName, aLocaleName, aLocaleName), xBI)); + return sal_True; } - return sal_False; + } + return sal_False; } Reference < XBreakIterator > SAL_CALL BreakIteratorImpl::getLocaleSpecificBreakIterator(const Locale& rLocale) throw (RuntimeException) { - if (xBI.is() && rLocale == aLocale) - return xBI; - else if (m_xContext.is()) { - aLocale = rLocale; - - for (size_t i = 0; i < lookupTable.size(); i++) { - lookupTableItem *listItem = lookupTable[i]; - if (rLocale == listItem->aLocale) - return xBI = listItem->xBI; - } + if (xBI.is() && rLocale == aLocale) + return xBI; + else if (m_xContext.is()) { + aLocale = rLocale; + + for (size_t i = 0; i < lookupTable.size(); i++) { + lookupTableItem *listItem = lookupTable[i]; + if (rLocale == listItem->aLocale) + return xBI = listItem->xBI; + } - sal_Unicode under = (sal_Unicode)'_'; + sal_Unicode under = (sal_Unicode)'_'; - sal_Int32 l = rLocale.Language.getLength(); - sal_Int32 c = rLocale.Country.getLength(); - sal_Int32 v = rLocale.Variant.getLength(); - OUStringBuffer aBuf(l+c+v+3); + sal_Int32 l = rLocale.Language.getLength(); + sal_Int32 c = rLocale.Country.getLength(); + sal_Int32 v = rLocale.Variant.getLength(); + OUStringBuffer aBuf(l+c+v+3); - if ((l > 0 && c > 0 && v > 0 && + if ((l > 0 && c > 0 && v > 0 && // load service with name <base>_<lang>_<country>_<varian> createLocaleSpecificBreakIterator(aBuf.append(rLocale.Language).append(under).append( - rLocale.Country).append(under).append(rLocale.Variant).makeStringAndClear())) || + rLocale.Country).append(under).append(rLocale.Variant).makeStringAndClear())) || (l > 0 && c > 0 && - // load service with name <base>_<lang>_<country> - createLocaleSpecificBreakIterator(aBuf.append(rLocale.Language).append(under).append( - rLocale.Country).makeStringAndClear())) || + // load service with name <base>_<lang>_<country> + createLocaleSpecificBreakIterator(aBuf.append(rLocale.Language).append(under).append( + rLocale.Country).makeStringAndClear())) || (l > 0 && c > 0 && rLocale.Language.compareToAscii("zh") == 0 && - (rLocale.Country.compareToAscii("HK") == 0 || - rLocale.Country.compareToAscii("MO") == 0) && - // if the country code is HK or MO, one more step to try TW. - createLocaleSpecificBreakIterator(aBuf.append(rLocale.Language).append(under).appendAscii( - "TW").makeStringAndClear())) || + (rLocale.Country.compareToAscii("HK") == 0 || + rLocale.Country.compareToAscii("MO") == 0) && + // if the country code is HK or MO, one more step to try TW. + createLocaleSpecificBreakIterator(aBuf.append(rLocale.Language).append(under).appendAscii( + "TW").makeStringAndClear())) || (l > 0 && - // load service with name <base>_<lang> - createLocaleSpecificBreakIterator(rLocale.Language)) || - // load default service with name <base>_Unicode - createLocaleSpecificBreakIterator(OUString("Unicode"))) { - lookupTable.push_back( new lookupTableItem(aLocale, xBI) ); - return xBI; - } + // load service with name <base>_<lang> + createLocaleSpecificBreakIterator(rLocale.Language)) || + // load default service with name <base>_Unicode + createLocaleSpecificBreakIterator(OUString("Unicode"))) { + lookupTable.push_back( new lookupTableItem(aLocale, xBI) ); + return xBI; } - throw RuntimeException(); + } + throw RuntimeException(); } const sal_Char cBreakIterator[] = "com.sun.star.i18n.BreakIterator"; @@ -610,21 +610,21 @@ const sal_Char cBreakIterator[] = "com.sun.star.i18n.BreakIterator"; OUString SAL_CALL BreakIteratorImpl::getImplementationName(void) throw( RuntimeException ) { - return OUString::createFromAscii(cBreakIterator); + return OUString::createFromAscii(cBreakIterator); } sal_Bool SAL_CALL BreakIteratorImpl::supportsService(const OUString& rServiceName) throw( RuntimeException ) { - return !rServiceName.compareToAscii(cBreakIterator); + return !rServiceName.compareToAscii(cBreakIterator); } Sequence< OUString > SAL_CALL BreakIteratorImpl::getSupportedServiceNames(void) throw( RuntimeException ) { - Sequence< OUString > aRet(1); - aRet[0] = OUString::createFromAscii(cBreakIterator); - return aRet; + Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii(cBreakIterator); + return aRet; } } } } } diff --git a/i18npool/source/breakiterator/breakiterator_cjk.cxx b/i18npool/source/breakiterator/breakiterator_cjk.cxx index 28f263157510..9ff6a40a7c5d 100644 --- a/i18npool/source/breakiterator/breakiterator_cjk.cxx +++ b/i18npool/source/breakiterator/breakiterator_cjk.cxx @@ -37,41 +37,41 @@ BreakIterator_CJK::BreakIterator_CJK() : dict( NULL ), hangingCharacters() { - cBreakIterator = "com.sun.star.i18n.BreakIterator_CJK"; + cBreakIterator = "com.sun.star.i18n.BreakIterator_CJK"; } Boundary SAL_CALL BreakIterator_CJK::previousWord(const OUString& text, sal_Int32 anyPos, const lang::Locale& nLocale, sal_Int16 wordType) throw(RuntimeException) { - if (dict) { - result = dict->previousWord(text, anyPos, wordType); - // #109813# for non-CJK, single character word, fallback to ICU breakiterator. - if (result.endPos - result.startPos != 1 || - getScriptType(text, result.startPos) == ScriptType::ASIAN) - return result; - result = BreakIterator_Unicode::getWordBoundary(text, result.startPos, nLocale, wordType, true); - if (result.endPos < anyPos) - return result; - } - return BreakIterator_Unicode::previousWord(text, anyPos, nLocale, wordType); + if (dict) { + result = dict->previousWord(text, anyPos, wordType); + // #109813# for non-CJK, single character word, fallback to ICU breakiterator. + if (result.endPos - result.startPos != 1 || + getScriptType(text, result.startPos) == ScriptType::ASIAN) + return result; + result = BreakIterator_Unicode::getWordBoundary(text, result.startPos, nLocale, wordType, true); + if (result.endPos < anyPos) + return result; + } + return BreakIterator_Unicode::previousWord(text, anyPos, nLocale, wordType); } Boundary SAL_CALL BreakIterator_CJK::nextWord(const OUString& text, sal_Int32 anyPos, const lang::Locale& nLocale, sal_Int16 wordType) throw(RuntimeException) { - if (dict) { - result = dict->nextWord(text, anyPos, wordType); - // #109813# for non-CJK, single character word, fallback to ICU breakiterator. - if (result.endPos - result.startPos != 1 || - getScriptType(text, result.startPos) == ScriptType::ASIAN) - return result; - result = BreakIterator_Unicode::getWordBoundary(text, result.startPos, nLocale, wordType, true); - if (result.startPos > anyPos) - return result; - } - return BreakIterator_Unicode::nextWord(text, anyPos, nLocale, wordType); + if (dict) { + result = dict->nextWord(text, anyPos, wordType); + // #109813# for non-CJK, single character word, fallback to ICU breakiterator. + if (result.endPos - result.startPos != 1 || + getScriptType(text, result.startPos) == ScriptType::ASIAN) + return result; + result = BreakIterator_Unicode::getWordBoundary(text, result.startPos, nLocale, wordType, true); + if (result.startPos > anyPos) + return result; + } + return BreakIterator_Unicode::nextWord(text, anyPos, nLocale, wordType); } Boundary SAL_CALL @@ -79,14 +79,14 @@ BreakIterator_CJK::getWordBoundary( const OUString& text, sal_Int32 anyPos, const lang::Locale& nLocale, sal_Int16 wordType, sal_Bool bDirection ) throw(RuntimeException) { - if (dict) { - result = dict->getWordBoundary(text, anyPos, wordType, bDirection); - // #109813# for non-CJK, single character word, fallback to ICU breakiterator. - if (result.endPos - result.startPos != 1 || - getScriptType(text, result.startPos) == ScriptType::ASIAN) - return result; - } - return BreakIterator_Unicode::getWordBoundary(text, anyPos, nLocale, wordType, bDirection); + if (dict) { + result = dict->getWordBoundary(text, anyPos, wordType, bDirection); + // #109813# for non-CJK, single character word, fallback to ICU breakiterator. + if (result.endPos - result.startPos != 1 || + getScriptType(text, result.startPos) == ScriptType::ASIAN) + return result; + } + return BreakIterator_Unicode::getWordBoundary(text, anyPos, nLocale, wordType, bDirection); } LineBreakResults SAL_CALL BreakIterator_CJK::getLineBreak( @@ -95,22 +95,22 @@ LineBreakResults SAL_CALL BreakIterator_CJK::getLineBreak( const LineBreakHyphenationOptions& /*hOptions*/, const LineBreakUserOptions& bOptions ) throw(RuntimeException) { - LineBreakResults lbr; - - if (bOptions.allowPunctuationOutsideMargin && - hangingCharacters.indexOf(Text[nStartPos]) != -1 && - (Text.iterateCodePoints( &nStartPos, 1), nStartPos == Text.getLength())) { - ; // do nothing - } else if (bOptions.applyForbiddenRules && 0 < nStartPos && nStartPos < Text.getLength()) { - while (nStartPos > 0 && - (bOptions.forbiddenBeginCharacters.indexOf(Text[nStartPos]) != -1 || - bOptions.forbiddenEndCharacters.indexOf(Text[nStartPos-1]) != -1)) - Text.iterateCodePoints( &nStartPos, -1); - } - - lbr.breakIndex = nStartPos; - lbr.breakType = BreakType::WORDBOUNDARY; - return lbr; + LineBreakResults lbr; + + if (bOptions.allowPunctuationOutsideMargin && + hangingCharacters.indexOf(Text[nStartPos]) != -1 && + (Text.iterateCodePoints( &nStartPos, 1), nStartPos == Text.getLength())) { + ; // do nothing + } else if (bOptions.applyForbiddenRules && 0 < nStartPos && nStartPos < Text.getLength()) { + while (nStartPos > 0 && + (bOptions.forbiddenBeginCharacters.indexOf(Text[nStartPos]) != -1 || + bOptions.forbiddenEndCharacters.indexOf(Text[nStartPos-1]) != -1)) + Text.iterateCodePoints( &nStartPos, -1); + } + + lbr.breakIndex = nStartPos; + lbr.breakType = BreakType::WORDBOUNDARY; + return lbr; } #define LOCALE(language, country) lang::Locale(OUString::createFromAscii(language), OUString::createFromAscii(country), OUString()) @@ -119,14 +119,14 @@ LineBreakResults SAL_CALL BreakIterator_CJK::getLineBreak( // ----------------------------------------------------; BreakIterator_zh::BreakIterator_zh() { - dict = new xdictionary("zh"); - hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("zh", "CN")); - cBreakIterator = "com.sun.star.i18n.BreakIterator_zh"; + dict = new xdictionary("zh"); + hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("zh", "CN")); + cBreakIterator = "com.sun.star.i18n.BreakIterator_zh"; } BreakIterator_zh::~BreakIterator_zh() { - delete dict; + delete dict; } // ---------------------------------------------------- @@ -134,14 +134,14 @@ BreakIterator_zh::~BreakIterator_zh() // ----------------------------------------------------; BreakIterator_zh_TW::BreakIterator_zh_TW() { - dict = new xdictionary("zh"); - hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("zh", "TW")); - cBreakIterator = "com.sun.star.i18n.BreakIterator_zh_TW"; + dict = new xdictionary("zh"); + hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("zh", "TW")); + cBreakIterator = "com.sun.star.i18n.BreakIterator_zh_TW"; } BreakIterator_zh_TW::~BreakIterator_zh_TW() { - delete dict; + delete dict; } // ---------------------------------------------------- @@ -149,15 +149,15 @@ BreakIterator_zh_TW::~BreakIterator_zh_TW() // ----------------------------------------------------; BreakIterator_ja::BreakIterator_ja() { - dict = new xdictionary("ja"); - dict->setJapaneseWordBreak(); - hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("ja", "JP")); - cBreakIterator = "com.sun.star.i18n.BreakIterator_ja"; + dict = new xdictionary("ja"); + dict->setJapaneseWordBreak(); + hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("ja", "JP")); + cBreakIterator = "com.sun.star.i18n.BreakIterator_ja"; } BreakIterator_ja::~BreakIterator_ja() { - delete dict; + delete dict; } // ---------------------------------------------------- @@ -165,8 +165,8 @@ BreakIterator_ja::~BreakIterator_ja() // ----------------------------------------------------; BreakIterator_ko::BreakIterator_ko() { - hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("ko", "KR")); - cBreakIterator = "com.sun.star.i18n.BreakIterator_ko"; + hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("ko", "KR")); + cBreakIterator = "com.sun.star.i18n.BreakIterator_ko"; } BreakIterator_ko::~BreakIterator_ko() diff --git a/i18npool/source/breakiterator/breakiterator_unicode.cxx b/i18npool/source/breakiterator/breakiterator_unicode.cxx index 63ebe53e3df2..0e64343e476c 100644 --- a/i18npool/source/breakiterator/breakiterator_unicode.cxx +++ b/i18npool/source/breakiterator/breakiterator_unicode.cxx @@ -205,18 +205,18 @@ sal_Int32 SAL_CALL BreakIterator_Unicode::nextCharacters( const OUString& Text, sal_Int16 nCharacterIteratorMode, sal_Int32 nCount, sal_Int32& nDone ) throw(uno::RuntimeException) { - if (nCharacterIteratorMode == CharacterIteratorMode::SKIPCELL ) { // for CELL mode - loadICUBreakIterator(rLocale, LOAD_CHARACTER_BREAKITERATOR, 0, "char", Text); - for (nDone = 0; nDone < nCount; nDone++) { - nStartPos = character.aBreakIterator->following(nStartPos); - if (nStartPos == BreakIterator::DONE) - return Text.getLength(); - } - } else { // for CHARACTER mode - for (nDone = 0; nDone < nCount && nStartPos < Text.getLength(); nDone++) - Text.iterateCodePoints(&nStartPos, 1); + if (nCharacterIteratorMode == CharacterIteratorMode::SKIPCELL ) { // for CELL mode + loadICUBreakIterator(rLocale, LOAD_CHARACTER_BREAKITERATOR, 0, "char", Text); + for (nDone = 0; nDone < nCount; nDone++) { + nStartPos = character.aBreakIterator->following(nStartPos); + if (nStartPos == BreakIterator::DONE) + return Text.getLength(); } - return nStartPos; + } else { // for CHARACTER mode + for (nDone = 0; nDone < nCount && nStartPos < Text.getLength(); nDone++) + Text.iterateCodePoints(&nStartPos, 1); + } + return nStartPos; } sal_Int32 SAL_CALL BreakIterator_Unicode::previousCharacters( const OUString& Text, @@ -224,131 +224,131 @@ sal_Int32 SAL_CALL BreakIterator_Unicode::previousCharacters( const OUString& Te sal_Int16 nCharacterIteratorMode, sal_Int32 nCount, sal_Int32& nDone ) throw(uno::RuntimeException) { - if (nCharacterIteratorMode == CharacterIteratorMode::SKIPCELL ) { // for CELL mode - loadICUBreakIterator(rLocale, LOAD_CHARACTER_BREAKITERATOR, 0, "char", Text); - for (nDone = 0; nDone < nCount; nDone++) { - nStartPos = character.aBreakIterator->preceding(nStartPos); - if (nStartPos == BreakIterator::DONE) - return 0; - } - } else { // for BS to delete one char and CHARACTER mode. - for (nDone = 0; nDone < nCount && nStartPos > 0; nDone++) - Text.iterateCodePoints(&nStartPos, -1); + if (nCharacterIteratorMode == CharacterIteratorMode::SKIPCELL ) { // for CELL mode + loadICUBreakIterator(rLocale, LOAD_CHARACTER_BREAKITERATOR, 0, "char", Text); + for (nDone = 0; nDone < nCount; nDone++) { + nStartPos = character.aBreakIterator->preceding(nStartPos); + if (nStartPos == BreakIterator::DONE) + return 0; } - return nStartPos; + } else { // for BS to delete one char and CHARACTER mode. + for (nDone = 0; nDone < nCount && nStartPos > 0; nDone++) + Text.iterateCodePoints(&nStartPos, -1); + } + return nStartPos; } Boundary SAL_CALL BreakIterator_Unicode::nextWord( const OUString& Text, sal_Int32 nStartPos, const lang::Locale& rLocale, sal_Int16 rWordType ) throw(uno::RuntimeException) { - loadICUBreakIterator(rLocale, LOAD_WORD_BREAKITERATOR, rWordType, NULL, Text); + loadICUBreakIterator(rLocale, LOAD_WORD_BREAKITERATOR, rWordType, NULL, Text); - result.startPos = icuBI->aBreakIterator->following(nStartPos); - if( result.startPos >= Text.getLength() || result.startPos == BreakIterator::DONE ) - result.endPos = result.startPos; - else { - if ( (rWordType == WordType::ANYWORD_IGNOREWHITESPACES || + result.startPos = icuBI->aBreakIterator->following(nStartPos); + if( result.startPos >= Text.getLength() || result.startPos == BreakIterator::DONE ) + result.endPos = result.startPos; + else { + if ( (rWordType == WordType::ANYWORD_IGNOREWHITESPACES || rWordType == WordType::DICTIONARY_WORD ) && - u_isWhitespace(Text.iterateCodePoints(&result.startPos, 0)) ) - result.startPos = icuBI->aBreakIterator->following(result.startPos); + u_isWhitespace(Text.iterateCodePoints(&result.startPos, 0)) ) + result.startPos = icuBI->aBreakIterator->following(result.startPos); - result.endPos = icuBI->aBreakIterator->following(result.startPos); - if(result.endPos == BreakIterator::DONE) - result.endPos = result.startPos; - } - return result; + result.endPos = icuBI->aBreakIterator->following(result.startPos); + if(result.endPos == BreakIterator::DONE) + result.endPos = result.startPos; + } + return result; } Boundary SAL_CALL BreakIterator_Unicode::previousWord(const OUString& Text, sal_Int32 nStartPos, const lang::Locale& rLocale, sal_Int16 rWordType) throw(uno::RuntimeException) { - loadICUBreakIterator(rLocale, LOAD_WORD_BREAKITERATOR, rWordType, NULL, Text); + loadICUBreakIterator(rLocale, LOAD_WORD_BREAKITERATOR, rWordType, NULL, Text); - result.startPos = icuBI->aBreakIterator->preceding(nStartPos); - if( result.startPos < 0 || result.startPos == BreakIterator::DONE) - result.endPos = result.startPos; - else { - if ( (rWordType == WordType::ANYWORD_IGNOREWHITESPACES || + result.startPos = icuBI->aBreakIterator->preceding(nStartPos); + if( result.startPos < 0 || result.startPos == BreakIterator::DONE) + result.endPos = result.startPos; + else { + if ( (rWordType == WordType::ANYWORD_IGNOREWHITESPACES || rWordType == WordType::DICTIONARY_WORD) && - u_isWhitespace(Text.iterateCodePoints(&result.startPos, 0)) ) - result.startPos = icuBI->aBreakIterator->preceding(result.startPos); + u_isWhitespace(Text.iterateCodePoints(&result.startPos, 0)) ) + result.startPos = icuBI->aBreakIterator->preceding(result.startPos); - result.endPos = icuBI->aBreakIterator->following(result.startPos); - if(result.endPos == BreakIterator::DONE) - result.endPos = result.startPos; - } - return result; + result.endPos = icuBI->aBreakIterator->following(result.startPos); + if(result.endPos == BreakIterator::DONE) + result.endPos = result.startPos; + } + return result; } Boundary SAL_CALL BreakIterator_Unicode::getWordBoundary( const OUString& Text, sal_Int32 nPos, const lang::Locale& rLocale, sal_Int16 rWordType, sal_Bool bDirection ) throw(uno::RuntimeException) { - loadICUBreakIterator(rLocale, LOAD_WORD_BREAKITERATOR, rWordType, NULL, Text); - sal_Int32 len = Text.getLength(); - - if(icuBI->aBreakIterator->isBoundary(nPos)) { - result.startPos = result.endPos = nPos; - if((bDirection || nPos == 0) && nPos < len) //forward - result.endPos = icuBI->aBreakIterator->following(nPos); - else - result.startPos = icuBI->aBreakIterator->preceding(nPos); + loadICUBreakIterator(rLocale, LOAD_WORD_BREAKITERATOR, rWordType, NULL, Text); + sal_Int32 len = Text.getLength(); + + if(icuBI->aBreakIterator->isBoundary(nPos)) { + result.startPos = result.endPos = nPos; + if((bDirection || nPos == 0) && nPos < len) //forward + result.endPos = icuBI->aBreakIterator->following(nPos); + else + result.startPos = icuBI->aBreakIterator->preceding(nPos); + } else { + if(nPos <= 0) { + result.startPos = 0; + result.endPos = len ? icuBI->aBreakIterator->following((sal_Int32)0) : 0; + } else if(nPos >= len) { + result.startPos = icuBI->aBreakIterator->preceding(len); + result.endPos = len; } else { - if(nPos <= 0) { - result.startPos = 0; - result.endPos = len ? icuBI->aBreakIterator->following((sal_Int32)0) : 0; - } else if(nPos >= len) { - result.startPos = icuBI->aBreakIterator->preceding(len); - result.endPos = len; - } else { - result.startPos = icuBI->aBreakIterator->preceding(nPos); - result.endPos = icuBI->aBreakIterator->following(nPos); - } + result.startPos = icuBI->aBreakIterator->preceding(nPos); + result.endPos = icuBI->aBreakIterator->following(nPos); } - if (result.startPos == BreakIterator::DONE) - result.startPos = result.endPos; - else if (result.endPos == BreakIterator::DONE) - result.endPos = result.startPos; + } + if (result.startPos == BreakIterator::DONE) + result.startPos = result.endPos; + else if (result.endPos == BreakIterator::DONE) + result.endPos = result.startPos; - return result; + return result; } sal_Int32 SAL_CALL BreakIterator_Unicode::beginOfSentence( const OUString& Text, sal_Int32 nStartPos, const lang::Locale &rLocale ) throw(uno::RuntimeException) { - loadICUBreakIterator(rLocale, LOAD_SENTENCE_BREAKITERATOR, 0, "sent", Text); + loadICUBreakIterator(rLocale, LOAD_SENTENCE_BREAKITERATOR, 0, "sent", Text); - sal_Int32 len = Text.getLength(); - if (len > 0 && nStartPos == len) - Text.iterateCodePoints(&nStartPos, -1); // issue #i27703# treat end position as part of last sentence - if (!sentence.aBreakIterator->isBoundary(nStartPos)) - nStartPos = sentence.aBreakIterator->preceding(nStartPos); + sal_Int32 len = Text.getLength(); + if (len > 0 && nStartPos == len) + Text.iterateCodePoints(&nStartPos, -1); // issue #i27703# treat end position as part of last sentence + if (!sentence.aBreakIterator->isBoundary(nStartPos)) + nStartPos = sentence.aBreakIterator->preceding(nStartPos); - // skip preceding space. - sal_uInt32 ch = Text.iterateCodePoints(&nStartPos, 1); - while (nStartPos < len && u_isWhitespace(ch)) ch = Text.iterateCodePoints(&nStartPos, 1); - Text.iterateCodePoints(&nStartPos, -1); + // skip preceding space. + sal_uInt32 ch = Text.iterateCodePoints(&nStartPos, 1); + while (nStartPos < len && u_isWhitespace(ch)) ch = Text.iterateCodePoints(&nStartPos, 1); + Text.iterateCodePoints(&nStartPos, -1); - return nStartPos; + return nStartPos; } sal_Int32 SAL_CALL BreakIterator_Unicode::endOfSentence( const OUString& Text, sal_Int32 nStartPos, const lang::Locale &rLocale ) throw(uno::RuntimeException) { - loadICUBreakIterator(rLocale, LOAD_SENTENCE_BREAKITERATOR, 0, "sent", Text); + loadICUBreakIterator(rLocale, LOAD_SENTENCE_BREAKITERATOR, 0, "sent", Text); - sal_Int32 len = Text.getLength(); - if (len > 0 && nStartPos == len) - Text.iterateCodePoints(&nStartPos, -1); // issue #i27703# treat end position as part of last sentence - nStartPos = sentence.aBreakIterator->following(nStartPos); + sal_Int32 len = Text.getLength(); + if (len > 0 && nStartPos == len) + Text.iterateCodePoints(&nStartPos, -1); // issue #i27703# treat end position as part of last sentence + nStartPos = sentence.aBreakIterator->following(nStartPos); - sal_Int32 nPos=nStartPos; - while (nPos > 0 && u_isWhitespace(Text.iterateCodePoints(&nPos, -1))) nStartPos=nPos; + sal_Int32 nPos=nStartPos; + while (nPos > 0 && u_isWhitespace(Text.iterateCodePoints(&nPos, -1))) nStartPos=nPos; - return nStartPos; + return nStartPos; } LineBreakResults SAL_CALL BreakIterator_Unicode::getLineBreak( @@ -357,63 +357,63 @@ LineBreakResults SAL_CALL BreakIterator_Unicode::getLineBreak( const LineBreakHyphenationOptions& hOptions, const LineBreakUserOptions& /*rOptions*/ ) throw(uno::RuntimeException) { - LineBreakResults lbr; + LineBreakResults lbr; - if (nStartPos >= Text.getLength()) { - lbr.breakIndex = Text.getLength(); - lbr.breakType = BreakType::WORDBOUNDARY; - return lbr; - } + if (nStartPos >= Text.getLength()) { + lbr.breakIndex = Text.getLength(); + lbr.breakType = BreakType::WORDBOUNDARY; + return lbr; + } - loadICUBreakIterator(rLocale, LOAD_LINE_BREAKITERATOR, 0, lineRule, Text); - - sal_Bool GlueSpace=sal_True; - while (GlueSpace) { - if (line.aBreakIterator->preceding(nStartPos + 1) == nStartPos) { //Line boundary break - lbr.breakIndex = nStartPos; - lbr.breakType = BreakType::WORDBOUNDARY; - } else if (hOptions.rHyphenator.is()) { //Hyphenation break - Boundary wBoundary = getWordBoundary( Text, nStartPos, rLocale, - WordType::DICTIONARY_WORD, false); - uno::Reference< linguistic2::XHyphenatedWord > aHyphenatedWord; - aHyphenatedWord = hOptions.rHyphenator->hyphenate(Text.copy(wBoundary.startPos, - wBoundary.endPos - wBoundary.startPos), rLocale, + loadICUBreakIterator(rLocale, LOAD_LINE_BREAKITERATOR, 0, lineRule, Text); + + sal_Bool GlueSpace=sal_True; + while (GlueSpace) { + if (line.aBreakIterator->preceding(nStartPos + 1) == nStartPos) { //Line boundary break + lbr.breakIndex = nStartPos; + lbr.breakType = BreakType::WORDBOUNDARY; + } else if (hOptions.rHyphenator.is()) { //Hyphenation break + Boundary wBoundary = getWordBoundary( Text, nStartPos, rLocale, + WordType::DICTIONARY_WORD, false); + uno::Reference< linguistic2::XHyphenatedWord > aHyphenatedWord; + aHyphenatedWord = hOptions.rHyphenator->hyphenate(Text.copy(wBoundary.startPos, + wBoundary.endPos - wBoundary.startPos), rLocale, (sal_Int16) (hOptions.hyphenIndex - wBoundary.startPos), hOptions.aHyphenationOptions); - if (aHyphenatedWord.is()) { - lbr.rHyphenatedWord = aHyphenatedWord; - if(wBoundary.startPos + aHyphenatedWord->getHyphenationPos() + 1 < nMinBreakPos ) - lbr.breakIndex = -1; - else - lbr.breakIndex = wBoundary.startPos; //aHyphenatedWord->getHyphenationPos(); - lbr.breakType = BreakType::HYPHENATION; - } else { - lbr.breakIndex = line.aBreakIterator->preceding(nStartPos); - lbr.breakType = BreakType::WORDBOUNDARY;; - } - } else { //word boundary break + if (aHyphenatedWord.is()) { + lbr.rHyphenatedWord = aHyphenatedWord; + if(wBoundary.startPos + aHyphenatedWord->getHyphenationPos() + 1 < nMinBreakPos ) + lbr.breakIndex = -1; + else + lbr.breakIndex = wBoundary.startPos; //aHyphenatedWord->getHyphenationPos(); + lbr.breakType = BreakType::HYPHENATION; + } else { lbr.breakIndex = line.aBreakIterator->preceding(nStartPos); - lbr.breakType = BreakType::WORDBOUNDARY; + lbr.breakType = BreakType::WORDBOUNDARY;; } + } else { //word boundary break + lbr.breakIndex = line.aBreakIterator->preceding(nStartPos); + lbr.breakType = BreakType::WORDBOUNDARY; + } #define WJ 0x2060 // Word Joiner - GlueSpace=sal_False; - if (lbr.breakType == BreakType::WORDBOUNDARY) { - nStartPos = lbr.breakIndex; + GlueSpace=sal_False; + if (lbr.breakType == BreakType::WORDBOUNDARY) { + nStartPos = lbr.breakIndex; + if (Text[nStartPos--] == WJ) + GlueSpace=sal_True; + while (nStartPos >= 0 && + (u_isWhitespace(Text.iterateCodePoints(&nStartPos, 0)) || Text[nStartPos] == WJ)) { if (Text[nStartPos--] == WJ) GlueSpace=sal_True; - while (nStartPos >= 0 && - (u_isWhitespace(Text.iterateCodePoints(&nStartPos, 0)) || Text[nStartPos] == WJ)) { - if (Text[nStartPos--] == WJ) - GlueSpace=sal_True; - } - if (GlueSpace && nStartPos < 0) { - lbr.breakIndex = 0; - break; - } + } + if (GlueSpace && nStartPos < 0) { + lbr.breakIndex = 0; + break; } } + } - return lbr; + return lbr; } @@ -421,21 +421,21 @@ LineBreakResults SAL_CALL BreakIterator_Unicode::getLineBreak( OUString SAL_CALL BreakIterator_Unicode::getImplementationName(void) throw( uno::RuntimeException ) { - return OUString::createFromAscii(cBreakIterator); + return OUString::createFromAscii(cBreakIterator); } sal_Bool SAL_CALL BreakIterator_Unicode::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) { - return !rServiceName.compareToAscii(cBreakIterator); + return !rServiceName.compareToAscii(cBreakIterator); } uno::Sequence< OUString > SAL_CALL BreakIterator_Unicode::getSupportedServiceNames(void) throw( uno::RuntimeException ) { - uno::Sequence< OUString > aRet(1); - aRet[0] = OUString::createFromAscii(cBreakIterator); - return aRet; + uno::Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii(cBreakIterator); + return aRet; } } } } } diff --git a/i18npool/source/breakiterator/xdictionary.cxx b/i18npool/source/breakiterator/xdictionary.cxx index cf22d6cbd3e4..1200535f38cf 100644 --- a/i18npool/source/breakiterator/xdictionary.cxx +++ b/i18npool/source/breakiterator/xdictionary.cxx @@ -83,61 +83,62 @@ xdictionary::xdictionary(const sal_Char *lang) : OUStringBuffer aBuf( strlen(lang) + 7 + 4 ); // mostly "*.dll" (with * == dict_zh) #endif aBuf.appendAscii( "dict_" ).appendAscii( lang ).appendAscii( SAL_DLLEXTENSION ); - hModule = osl_loadModuleRelative( &thisModule, aBuf.makeStringAndClear().pData, SAL_LOADMODULE_DEFAULT ); - if( hModule ) { - sal_IntPtr (*func)(); - func = (sal_IntPtr(*)()) osl_getFunctionSymbol( hModule, OUString("getExistMark").pData ); - existMark = (sal_uInt8*) (*func)(); - func = (sal_IntPtr(*)()) osl_getFunctionSymbol( hModule, OUString("getIndex1").pData ); - index1 = (sal_Int16*) (*func)(); - func = (sal_IntPtr(*)()) osl_getFunctionSymbol( hModule, OUString("getIndex2").pData ); - index2 = (sal_Int32*) (*func)(); - func = (sal_IntPtr(*)()) osl_getFunctionSymbol( hModule, OUString("getLenArray").pData ); - lenArray = (sal_Int32*) (*func)(); - func = (sal_IntPtr(*)()) osl_getFunctionSymbol( hModule, OUString("getDataArea").pData ); - dataArea = (sal_Unicode*) (*func)(); - } - else - { - existMark = NULL; - index1 = NULL; - index2 = NULL; - lenArray = NULL; - dataArea = NULL; - } + hModule = osl_loadModuleRelative( &thisModule, aBuf.makeStringAndClear().pData, SAL_LOADMODULE_DEFAULT ); + if( hModule ) { + sal_IntPtr (*func)(); + func = (sal_IntPtr(*)()) osl_getFunctionSymbol( hModule, OUString("getExistMark").pData ); + existMark = (sal_uInt8*) (*func)(); + func = (sal_IntPtr(*)()) osl_getFunctionSymbol( hModule, OUString("getIndex1").pData ); + index1 = (sal_Int16*) (*func)(); + func = (sal_IntPtr(*)()) osl_getFunctionSymbol( hModule, OUString("getIndex2").pData ); + index2 = (sal_Int32*) (*func)(); + func = (sal_IntPtr(*)()) osl_getFunctionSymbol( hModule, OUString("getLenArray").pData ); + lenArray = (sal_Int32*) (*func)(); + func = (sal_IntPtr(*)()) osl_getFunctionSymbol( hModule, OUString("getDataArea").pData ); + dataArea = (sal_Unicode*) (*func)(); + } + else + { + existMark = NULL; + index1 = NULL; + index2 = NULL; + lenArray = NULL; + dataArea = NULL; + } #else - if( strcmp( lang, "ja" ) == 0 ) { - existMark = getExistMark_ja(); - index1 = getIndex1_ja(); - index2 = getIndex2_ja(); - lenArray = getLenArray_ja(); - dataArea = getDataArea_ja(); - } - else if( strcmp( lang, "zh" ) == 0 ) { - existMark = getExistMark_zh(); - index1 = getIndex1_zh(); - index2 = getIndex2_zh(); - lenArray = getLenArray_zh(); - dataArea = getDataArea_zh(); - } - else - { - existMark = NULL; - index1 = NULL; - index2 = NULL; - lenArray = NULL; - dataArea = NULL; - } + if( strcmp( lang, "ja" ) == 0 ) { + existMark = getExistMark_ja(); + index1 = getIndex1_ja(); + index2 = getIndex2_ja(); + lenArray = getLenArray_ja(); + dataArea = getDataArea_ja(); + } + else if( strcmp( lang, "zh" ) == 0 ) { + existMark = getExistMark_zh(); + index1 = getIndex1_zh(); + index2 = getIndex2_zh(); + lenArray = getLenArray_zh(); + dataArea = getDataArea_zh(); + } + else + { + existMark = NULL; + index1 = NULL; + index2 = NULL; + lenArray = NULL; + dataArea = NULL; + } #endif - for (sal_Int32 i = 0; i < CACHE_MAX; i++) - cache[i].size = 0; + for (sal_Int32 i = 0; i < CACHE_MAX; i++) + cache[i].size = 0; - japaneseWordBreak = sal_False; + japaneseWordBreak = sal_False; } -xdictionary::~xdictionary() { +xdictionary::~xdictionary() +{ #ifndef DISABLE_DYNLOADING osl_unloadModule(hModule); #endif @@ -151,46 +152,48 @@ xdictionary::~xdictionary() { void xdictionary::setJapaneseWordBreak() { - japaneseWordBreak = sal_True; + japaneseWordBreak = sal_True; } -sal_Bool xdictionary::exists(const sal_uInt32 c) { - // 0x1FFF is the hardcoded limit in gendict for existMarks - sal_Bool exist = (existMark && ((c>>3) < 0x1FFF)) ? sal::static_int_cast<sal_Bool>((existMark[c>>3] & (1<<(c&0x07))) != 0) : sal_False; - if (!exist && japaneseWordBreak) - return BreakIteratorImpl::getScriptClass(c) == ScriptType::ASIAN; - else - return exist; +sal_Bool xdictionary::exists(const sal_uInt32 c) +{ + // 0x1FFF is the hardcoded limit in gendict for existMarks + sal_Bool exist = (existMark && ((c>>3) < 0x1FFF)) ? sal::static_int_cast<sal_Bool>((existMark[c>>3] & (1<<(c&0x07))) != 0) : sal_False; + if (!exist && japaneseWordBreak) + return BreakIteratorImpl::getScriptClass(c) == ScriptType::ASIAN; + else + return exist; } -sal_Int32 xdictionary::getLongestMatch(const sal_Unicode* str, sal_Int32 sLen) { +sal_Int32 xdictionary::getLongestMatch(const sal_Unicode* str, sal_Int32 sLen) +{ - if ( !index1 ) return 0; + if ( !index1 ) return 0; - sal_Int16 idx = index1[str[0] >> 8]; + sal_Int16 idx = index1[str[0] >> 8]; - if (idx == 0xFF) return 0; + if (idx == 0xFF) return 0; - idx = (idx<<8) | (str[0]&0xff); + idx = (idx<<8) | (str[0]&0xff); - sal_uInt32 begin = index2[idx], end = index2[idx+1]; + sal_uInt32 begin = index2[idx], end = index2[idx+1]; - if (begin == 0) return 0; + if (begin == 0) return 0; - str++; sLen--; // first character is not stored in the dictionary - for (sal_uInt32 i = end; i > begin; i--) { - sal_Int32 len = lenArray[i] - lenArray[i - 1]; - if (sLen >= len) { - const sal_Unicode *dstr = dataArea + lenArray[i-1]; - sal_Int32 pos = 0; + str++; sLen--; // first character is not stored in the dictionary + for (sal_uInt32 i = end; i > begin; i--) { + sal_Int32 len = lenArray[i] - lenArray[i - 1]; + if (sLen >= len) { + const sal_Unicode *dstr = dataArea + lenArray[i-1]; + sal_Int32 pos = 0; - while (pos < len && dstr[pos] == str[pos]) { pos++; } + while (pos < len && dstr[pos] == str[pos]) { pos++; } - if (pos == len) - return len + 1; - } + if (pos == len) + return len + 1; } - return 0; + } + return 0; } @@ -210,14 +213,15 @@ WordBreakCache::WordBreakCache() : * Compare two unicode string, */ -sal_Bool WordBreakCache::equals(const sal_Unicode* str, Boundary& boundary) { - // Different length, different string. - if (length != boundary.endPos - boundary.startPos) return sal_False; +sal_Bool WordBreakCache::equals(const sal_Unicode* str, Boundary& boundary) +{ + // Different length, different string. + if (length != boundary.endPos - boundary.startPos) return sal_False; - for (sal_Int32 i = 0; i < length; i++) - if (contents[i] != str[i + boundary.startPos]) return sal_False; + for (sal_Int32 i = 0; i < length; i++) + if (contents[i] != str[i + boundary.startPos]) return sal_False; - return sal_True; + return sal_True; } diff --git a/i18npool/source/calendar/calendar_gregorian.cxx b/i18npool/source/calendar/calendar_gregorian.cxx index dddeea78f65b..ecb912fb94d3 100644 --- a/i18npool/source/calendar/calendar_gregorian.cxx +++ b/i18npool/source/calendar/calendar_gregorian.cxx @@ -137,66 +137,66 @@ Calendar_gregorian::Calendar_gregorian(const Era *_earArray) void SAL_CALL Calendar_gregorian::init(const Era *_eraArray) { - cCalendar = "com.sun.star.i18n.Calendar_gregorian"; - - // #i102356# With icu::Calendar::createInstance(UErrorCode) in a Thai - // th_TH system locale we accidentally used a Buddhist calendar. Though - // the ICU documentation says that should be the case only for - // th_TH_TRADITIONAL (and ja_JP_TRADITIONAL Gengou), a plain th_TH - // already triggers that behavior, ja_JP does not. Strange enough, - // passing a th_TH locale to the calendar creation doesn't trigger - // this. - // See also http://userguide.icu-project.org/datetime/calendar - - // Whatever ICU offers as the default calendar for a locale, ensure we - // have a Gregorian calendar as requested. - - /* XXX: with the current implementation the aLocale member variable is - * not set prior to loading a calendar from locale data. This - * creates an empty (root) locale for ICU, but at least the correct - * calendar is used. The language part must not be NULL (respectively - * not all, language and country and variant), otherwise the current - * default locale would be used again and the calendar keyword ignored. - * */ - icu::Locale aIcuLocale( "", NULL, NULL, "calendar=gregorian"); + cCalendar = "com.sun.star.i18n.Calendar_gregorian"; + + // #i102356# With icu::Calendar::createInstance(UErrorCode) in a Thai + // th_TH system locale we accidentally used a Buddhist calendar. Though + // the ICU documentation says that should be the case only for + // th_TH_TRADITIONAL (and ja_JP_TRADITIONAL Gengou), a plain th_TH + // already triggers that behavior, ja_JP does not. Strange enough, + // passing a th_TH locale to the calendar creation doesn't trigger + // this. + // See also http://userguide.icu-project.org/datetime/calendar + + // Whatever ICU offers as the default calendar for a locale, ensure we + // have a Gregorian calendar as requested. + + /* XXX: with the current implementation the aLocale member variable is + * not set prior to loading a calendar from locale data. This + * creates an empty (root) locale for ICU, but at least the correct + * calendar is used. The language part must not be NULL (respectively + * not all, language and country and variant), otherwise the current + * default locale would be used again and the calendar keyword ignored. + * */ + icu::Locale aIcuLocale( "", NULL, NULL, "calendar=gregorian"); - UErrorCode status; - body = icu::Calendar::createInstance( aIcuLocale, status = U_ZERO_ERROR); - if (!body || !U_SUCCESS(status)) throw ERROR; - eraArray=_eraArray; + UErrorCode status; + body = icu::Calendar::createInstance( aIcuLocale, status = U_ZERO_ERROR); + if (!body || !U_SUCCESS(status)) throw ERROR; + eraArray=_eraArray; } Calendar_gregorian::~Calendar_gregorian() { - delete body; + delete body; } Calendar_hanja::Calendar_hanja() { - cCalendar = "com.sun.star.i18n.Calendar_hanja"; + cCalendar = "com.sun.star.i18n.Calendar_hanja"; } OUString SAL_CALL Calendar_hanja::getDisplayName( sal_Int16 displayIndex, sal_Int16 idx, sal_Int16 nameType ) throw(RuntimeException) { - if ( displayIndex == CalendarDisplayIndex::AM_PM ) { - // Am/Pm string for Korean Hanja calendar will refer to Japanese locale - com::sun::star::lang::Locale jaLocale = - com::sun::star::lang::Locale(OUString("ja"), OUString(), OUString()); - if (idx == 0) return LocaleDataImpl().getLocaleItem(jaLocale).timeAM; - else if (idx == 1) return LocaleDataImpl().getLocaleItem(jaLocale).timePM; - else throw ERROR; - } - else - return Calendar_gregorian::getDisplayName( displayIndex, idx, nameType ); + if ( displayIndex == CalendarDisplayIndex::AM_PM ) { + // Am/Pm string for Korean Hanja calendar will refer to Japanese locale + com::sun::star::lang::Locale jaLocale = + com::sun::star::lang::Locale(OUString("ja"), OUString(), OUString()); + if (idx == 0) return LocaleDataImpl().getLocaleItem(jaLocale).timeAM; + else if (idx == 1) return LocaleDataImpl().getLocaleItem(jaLocale).timePM; + else throw ERROR; + } + else + return Calendar_gregorian::getDisplayName( displayIndex, idx, nameType ); } void SAL_CALL Calendar_hanja::loadCalendar( const OUString& /*uniqueID*/, const com::sun::star::lang::Locale& rLocale ) throw(RuntimeException) { - // Since this class could be called by service name 'hanja_yoil', we have to - // rename uniqueID to get right calendar defined in locale data. - Calendar_gregorian::loadCalendar(OUString("hanja"), rLocale); + // Since this class could be called by service name 'hanja_yoil', we have to + // rename uniqueID to get right calendar defined in locale data. + Calendar_gregorian::loadCalendar(OUString("hanja"), rLocale); } static const Era gengou_eraArray[] = { @@ -208,7 +208,7 @@ static const Era gengou_eraArray[] = { }; Calendar_gengou::Calendar_gengou() : Calendar_gregorian(gengou_eraArray) { - cCalendar = "com.sun.star.i18n.Calendar_gengou"; + cCalendar = "com.sun.star.i18n.Calendar_gengou"; } static const Era ROC_eraArray[] = { @@ -217,7 +217,7 @@ static const Era ROC_eraArray[] = { }; Calendar_ROC::Calendar_ROC() : Calendar_gregorian(ROC_eraArray) { - cCalendar = "com.sun.star.i18n.Calendar_ROC"; + cCalendar = "com.sun.star.i18n.Calendar_ROC"; } static const Era buddhist_eraArray[] = { @@ -226,118 +226,118 @@ static const Era buddhist_eraArray[] = { }; Calendar_buddhist::Calendar_buddhist() : Calendar_gregorian(buddhist_eraArray) { - cCalendar = "com.sun.star.i18n.Calendar_buddhist"; + cCalendar = "com.sun.star.i18n.Calendar_buddhist"; } void SAL_CALL Calendar_gregorian::loadCalendar( const OUString& uniqueID, const com::sun::star::lang::Locale& rLocale ) throw(RuntimeException) { - // init. fieldValue[] - getValue(); + // init. fieldValue[] + getValue(); - aLocale = rLocale; - Sequence< Calendar2 > xC = LocaleDataImpl().getAllCalendars2(rLocale); - for (sal_Int32 i = 0; i < xC.getLength(); i++) + aLocale = rLocale; + Sequence< Calendar2 > xC = LocaleDataImpl().getAllCalendars2(rLocale); + for (sal_Int32 i = 0; i < xC.getLength(); i++) + { + if (uniqueID == xC[i].Name) { - if (uniqueID == xC[i].Name) + aCalendar = xC[i]; + // setup minimalDaysInFirstWeek + setMinimumNumberOfDaysForFirstWeek( + aCalendar.MinimumNumberOfDaysForFirstWeek); + // setup first day of week + for (sal_Int16 day = sal::static_int_cast<sal_Int16>( + aCalendar.Days.getLength()-1); day>=0; day--) { - aCalendar = xC[i]; - // setup minimalDaysInFirstWeek - setMinimumNumberOfDaysForFirstWeek( - aCalendar.MinimumNumberOfDaysForFirstWeek); - // setup first day of week - for (sal_Int16 day = sal::static_int_cast<sal_Int16>( - aCalendar.Days.getLength()-1); day>=0; day--) + if (aCalendar.StartOfWeek == aCalendar.Days[day].ID) { - if (aCalendar.StartOfWeek == aCalendar.Days[day].ID) - { - setFirstDayOfWeek( day); - return; - } + setFirstDayOfWeek( day); + return; } } } - // Calendar is not for the locale - throw ERROR; + } + // Calendar is not for the locale + throw ERROR; } com::sun::star::i18n::Calendar2 SAL_CALL Calendar_gregorian::getLoadedCalendar2() throw(RuntimeException) { - return aCalendar; + return aCalendar; } com::sun::star::i18n::Calendar SAL_CALL Calendar_gregorian::getLoadedCalendar() throw(RuntimeException) { - return LocaleDataImpl::downcastCalendar( aCalendar); + return LocaleDataImpl::downcastCalendar( aCalendar); } OUString SAL_CALL Calendar_gregorian::getUniqueID() throw(RuntimeException) { - return aCalendar.Name; + return aCalendar.Name; } void SAL_CALL Calendar_gregorian::setDateTime( double timeInDays ) throw(RuntimeException) { - // ICU handles dates in milliseconds as double values and uses floor() - // to obtain integer values, which may yield a date decremented by one - // for odd (historical) timezone values where the computed value due to - // rounding errors has a fractional part in milliseconds. Ensure we - // pass a value without fraction here. If not, that may lead to - // fdo#44286 or fdo#52619 and the like, e.g. when passing - // -2136315212000.000244 instead of -2136315212000.000000 - double fM = timeInDays * U_MILLIS_PER_DAY; - double fR = rtl::math::round( fM ); - SAL_INFO_IF( fM != fR, "i18npool", - "Calendar_gregorian::setDateTime: " << std::fixed << fM << " rounded to " << fR); - UErrorCode status; - body->setTime( fR, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) throw ERROR; - getValue(); + // ICU handles dates in milliseconds as double values and uses floor() + // to obtain integer values, which may yield a date decremented by one + // for odd (historical) timezone values where the computed value due to + // rounding errors has a fractional part in milliseconds. Ensure we + // pass a value without fraction here. If not, that may lead to + // fdo#44286 or fdo#52619 and the like, e.g. when passing + // -2136315212000.000244 instead of -2136315212000.000000 + double fM = timeInDays * U_MILLIS_PER_DAY; + double fR = rtl::math::round( fM ); + SAL_INFO_IF( fM != fR, "i18npool", + "Calendar_gregorian::setDateTime: " << std::fixed << fM << " rounded to " << fR); + UErrorCode status; + body->setTime( fR, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) throw ERROR; + getValue(); } double SAL_CALL Calendar_gregorian::getDateTime() throw(RuntimeException) { - if (fieldSet) { - setValue(); - getValue(); - } - UErrorCode status; - double r = body->getTime(status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) throw ERROR; - return r / U_MILLIS_PER_DAY; + if (fieldSet) { + setValue(); + getValue(); + } + UErrorCode status; + double r = body->getTime(status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) throw ERROR; + return r / U_MILLIS_PER_DAY; } // map field value from gregorian calendar to other calendar, it can be overwritten by derived class. // By using eraArray, it can take care Japanese and Taiwan ROC calendar. void Calendar_gregorian::mapFromGregorian() throw(RuntimeException) { - if (eraArray) { - sal_Int16 e, y, m, d; + if (eraArray) { + sal_Int16 e, y, m, d; - e = fieldValue[CalendarFieldIndex::ERA]; - y = fieldValue[CalendarFieldIndex::YEAR]; - m = fieldValue[CalendarFieldIndex::MONTH] + 1; - d = fieldValue[CalendarFieldIndex::DAY_OF_MONTH]; + e = fieldValue[CalendarFieldIndex::ERA]; + y = fieldValue[CalendarFieldIndex::YEAR]; + m = fieldValue[CalendarFieldIndex::MONTH] + 1; + d = fieldValue[CalendarFieldIndex::DAY_OF_MONTH]; - // since the year is reversed for first era, it is reversed again here for Era compare. - if (e == 0) - y = 1 - y; + // since the year is reversed for first era, it is reversed again here for Era compare. + if (e == 0) + y = 1 - y; - for (e = 0; eraArray[e].year; e++) - if ((y != eraArray[e].year) ? y < eraArray[e].year : + for (e = 0; eraArray[e].year; e++) + if ((y != eraArray[e].year) ? y < eraArray[e].year : (m != eraArray[e].month) ? m < eraArray[e].month : d < eraArray[e].day) - break; + break; - fieldValue[CalendarFieldIndex::ERA] = e; - fieldValue[CalendarFieldIndex::YEAR] = - sal::static_int_cast<sal_Int16>( (e == 0) ? (eraArray[0].year - y) : (y - eraArray[e-1].year + 1) ); - } + fieldValue[CalendarFieldIndex::ERA] = e; + fieldValue[CalendarFieldIndex::YEAR] = + sal::static_int_cast<sal_Int16>( (e == 0) ? (eraArray[0].year - y) : (y - eraArray[e-1].year + 1) ); + } } #define FIELDS ((1 << CalendarFieldIndex::ERA) | (1 << CalendarFieldIndex::YEAR)) @@ -345,42 +345,42 @@ void Calendar_gregorian::mapFromGregorian() throw(RuntimeException) // By using eraArray, it can take care Japanese and Taiwan ROC calendar. void Calendar_gregorian::mapToGregorian() throw(RuntimeException) { - if (eraArray && (fieldSet & FIELDS)) { - sal_Int16 y, e = fieldValue[CalendarFieldIndex::ERA]; - if (e == 0) - y = sal::static_int_cast<sal_Int16>( eraArray[0].year - fieldValue[CalendarFieldIndex::YEAR] ); - else - y = sal::static_int_cast<sal_Int16>( eraArray[e-1].year + fieldValue[CalendarFieldIndex::YEAR] - 1 ); - - fieldSetValue[CalendarFieldIndex::ERA] = y <= 0 ? 0 : 1; - fieldSetValue[CalendarFieldIndex::YEAR] = (y <= 0 ? 1 - y : y); - fieldSet |= FIELDS; - } + if (eraArray && (fieldSet & FIELDS)) { + sal_Int16 y, e = fieldValue[CalendarFieldIndex::ERA]; + if (e == 0) + y = sal::static_int_cast<sal_Int16>( eraArray[0].year - fieldValue[CalendarFieldIndex::YEAR] ); + else + y = sal::static_int_cast<sal_Int16>( eraArray[e-1].year + fieldValue[CalendarFieldIndex::YEAR] - 1 ); + + fieldSetValue[CalendarFieldIndex::ERA] = y <= 0 ? 0 : 1; + fieldSetValue[CalendarFieldIndex::YEAR] = (y <= 0 ? 1 - y : y); + fieldSet |= FIELDS; + } } static UCalendarDateFields fieldNameConverter(sal_Int16 fieldIndex) throw(RuntimeException) { - UCalendarDateFields f; - - switch (fieldIndex) { - case CalendarFieldIndex::AM_PM: f = UCAL_AM_PM; break; - case CalendarFieldIndex::DAY_OF_MONTH: f = UCAL_DATE; break; - case CalendarFieldIndex::DAY_OF_WEEK: f = UCAL_DAY_OF_WEEK; break; - case CalendarFieldIndex::DAY_OF_YEAR: f = UCAL_DAY_OF_YEAR; break; - case CalendarFieldIndex::DST_OFFSET: f = UCAL_DST_OFFSET; break; - case CalendarFieldIndex::ZONE_OFFSET: f = UCAL_ZONE_OFFSET; break; - case CalendarFieldIndex::HOUR: f = UCAL_HOUR_OF_DAY; break; - case CalendarFieldIndex::MINUTE: f = UCAL_MINUTE; break; - case CalendarFieldIndex::SECOND: f = UCAL_SECOND; break; - case CalendarFieldIndex::MILLISECOND: f = UCAL_MILLISECOND; break; - case CalendarFieldIndex::WEEK_OF_MONTH: f = UCAL_WEEK_OF_MONTH; break; - case CalendarFieldIndex::WEEK_OF_YEAR: f = UCAL_WEEK_OF_YEAR; break; - case CalendarFieldIndex::YEAR: f = UCAL_YEAR; break; - case CalendarFieldIndex::MONTH: f = UCAL_MONTH; break; - case CalendarFieldIndex::ERA: f = UCAL_ERA; break; - default: throw ERROR; - } - return f; + UCalendarDateFields f; + + switch (fieldIndex) { + case CalendarFieldIndex::AM_PM: f = UCAL_AM_PM; break; + case CalendarFieldIndex::DAY_OF_MONTH: f = UCAL_DATE; break; + case CalendarFieldIndex::DAY_OF_WEEK: f = UCAL_DAY_OF_WEEK; break; + case CalendarFieldIndex::DAY_OF_YEAR: f = UCAL_DAY_OF_YEAR; break; + case CalendarFieldIndex::DST_OFFSET: f = UCAL_DST_OFFSET; break; + case CalendarFieldIndex::ZONE_OFFSET: f = UCAL_ZONE_OFFSET; break; + case CalendarFieldIndex::HOUR: f = UCAL_HOUR_OF_DAY; break; + case CalendarFieldIndex::MINUTE: f = UCAL_MINUTE; break; + case CalendarFieldIndex::SECOND: f = UCAL_SECOND; break; + case CalendarFieldIndex::MILLISECOND: f = UCAL_MILLISECOND; break; + case CalendarFieldIndex::WEEK_OF_MONTH: f = UCAL_WEEK_OF_MONTH; break; + case CalendarFieldIndex::WEEK_OF_YEAR: f = UCAL_WEEK_OF_YEAR; break; + case CalendarFieldIndex::YEAR: f = UCAL_YEAR; break; + case CalendarFieldIndex::MONTH: f = UCAL_MONTH; break; + case CalendarFieldIndex::ERA: f = UCAL_ERA; break; + default: throw ERROR; + } + return f; } void SAL_CALL @@ -491,220 +491,220 @@ static void lcl_setCombinedOffsetFieldValues( sal_Int32 nValue, void Calendar_gregorian::setValue() throw(RuntimeException) { - // Correct DST glitch, see also localtime/gmtime conversion pitfalls at - // http://www.erack.de/download/timetest.c - // - // #i24082# in order to make the DST correction work in all - // circumstances, the time values have to be always resubmitted, - // regardless whether specified by the caller or not. It is not - // sufficient to rely on the ICU internal values previously set, as the - // following may happen: - // - Let 2004-03-28T02:00 be the onsetRule. - // - On 2004-03-29 (calendar initialized with 2004-03-29T00:00 DST) set - // a date of 2004-03-28 => calendar results in 2004-03-27T23:00 no DST. - // - Correcting this with simply "2004-03-28 no DST" and no time - // specified results in 2004-03-29T00:00, the ICU internal 23:00 time - // being adjusted to 24:00 in this case, switching one day further. - // => submit 2004-03-28T00:00 no DST. - - // This got even weirder since ICU incorporated also historical data, - // even the timezone may differ for different dates! It is necessary to - // let ICU choose the corresponding OlsonTimeZone transitions and adapt - // values. - // #i86094# gives examples where that went wrong: - // TZ=Europe/Moscow date <= 1919-07-01 - // zone +2:30:48 (!) instead of +3h, DST +2h instead of +1h - // TZ=America/St_Johns date <= 1935-03-30 - // zone -3:30:52 (!) instead of -3:30 - - // Copy fields before calling submitFields() directly or indirectly below. - memcpy(fieldSetValue, fieldValue, sizeof(fieldSetValue)); - // Possibly setup ERA and YEAR in fieldSetValue. - mapToGregorian(); - - DUMP_ICU_CAL_MSG(("%s\n","setValue() before any submission")); - DUMP_I18N_CAL_MSG(("%s\n","setValue() before any submission")); - - bool bNeedZone = !(fieldSet & (1 << CalendarFieldIndex::ZONE_OFFSET)); - bool bNeedDST = !(fieldSet & (1 << CalendarFieldIndex::DST_OFFSET)); - sal_Int32 nZone1, nDST1, nYear, nMonth, nDay, nHour, nMinute, nSecond, nMilliSecond, nZone0, nDST0; - nZone1 = nDST1 = nZone0 = nDST0 = 0; - nYear = nMonth = nDay = nHour = nMinute = nSecond = nMilliSecond = -1; - if ( bNeedZone || bNeedDST ) + // Correct DST glitch, see also localtime/gmtime conversion pitfalls at + // http://www.erack.de/download/timetest.c + // + // #i24082# in order to make the DST correction work in all + // circumstances, the time values have to be always resubmitted, + // regardless whether specified by the caller or not. It is not + // sufficient to rely on the ICU internal values previously set, as the + // following may happen: + // - Let 2004-03-28T02:00 be the onsetRule. + // - On 2004-03-29 (calendar initialized with 2004-03-29T00:00 DST) set + // a date of 2004-03-28 => calendar results in 2004-03-27T23:00 no DST. + // - Correcting this with simply "2004-03-28 no DST" and no time + // specified results in 2004-03-29T00:00, the ICU internal 23:00 time + // being adjusted to 24:00 in this case, switching one day further. + // => submit 2004-03-28T00:00 no DST. + + // This got even weirder since ICU incorporated also historical data, + // even the timezone may differ for different dates! It is necessary to + // let ICU choose the corresponding OlsonTimeZone transitions and adapt + // values. + // #i86094# gives examples where that went wrong: + // TZ=Europe/Moscow date <= 1919-07-01 + // zone +2:30:48 (!) instead of +3h, DST +2h instead of +1h + // TZ=America/St_Johns date <= 1935-03-30 + // zone -3:30:52 (!) instead of -3:30 + + // Copy fields before calling submitFields() directly or indirectly below. + memcpy(fieldSetValue, fieldValue, sizeof(fieldSetValue)); + // Possibly setup ERA and YEAR in fieldSetValue. + mapToGregorian(); + + DUMP_ICU_CAL_MSG(("%s\n","setValue() before any submission")); + DUMP_I18N_CAL_MSG(("%s\n","setValue() before any submission")); + + bool bNeedZone = !(fieldSet & (1 << CalendarFieldIndex::ZONE_OFFSET)); + bool bNeedDST = !(fieldSet & (1 << CalendarFieldIndex::DST_OFFSET)); + sal_Int32 nZone1, nDST1, nYear, nMonth, nDay, nHour, nMinute, nSecond, nMilliSecond, nZone0, nDST0; + nZone1 = nDST1 = nZone0 = nDST0 = 0; + nYear = nMonth = nDay = nHour = nMinute = nSecond = nMilliSecond = -1; + if ( bNeedZone || bNeedDST ) + { + UErrorCode status; + if ( !(fieldSet & (1 << CalendarFieldIndex::YEAR)) ) { - UErrorCode status; - if ( !(fieldSet & (1 << CalendarFieldIndex::YEAR)) ) - { - nYear = body->get( UCAL_YEAR, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nYear = -1; - } - if ( !(fieldSet & (1 << CalendarFieldIndex::MONTH)) ) - { - nMonth = body->get( UCAL_MONTH, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nMonth = -1; - } - if ( !(fieldSet & (1 << CalendarFieldIndex::DAY_OF_MONTH)) ) - { - nDay = body->get( UCAL_DATE, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nDay = -1; - } - if ( !(fieldSet & (1 << CalendarFieldIndex::HOUR)) ) - { - nHour = body->get( UCAL_HOUR_OF_DAY, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nHour = -1; - } - if ( !(fieldSet & (1 << CalendarFieldIndex::MINUTE)) ) - { - nMinute = body->get( UCAL_MINUTE, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nMinute = -1; - } - if ( !(fieldSet & (1 << CalendarFieldIndex::SECOND)) ) - { - nSecond = body->get( UCAL_SECOND, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nSecond = -1; - } - if ( !(fieldSet & (1 << CalendarFieldIndex::MILLISECOND)) ) - { - nMilliSecond = body->get( UCAL_MILLISECOND, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nMilliSecond = -1; - } - if ( !(fieldSet & (1 << CalendarFieldIndex::ZONE_OFFSET)) ) - { - nZone0 = body->get( UCAL_ZONE_OFFSET, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nZone0 = 0; - } - if ( !(fieldSet & (1 << CalendarFieldIndex::DST_OFFSET)) ) - { - nDST0 = body->get( UCAL_DST_OFFSET, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nDST0 = 0; - } - - // Submit values to obtain a time zone and DST corresponding to the date/time. - submitValues( nYear, nMonth, nDay, nHour, nMinute, nSecond, nMilliSecond, nZone0, nDST0); - - DUMP_ICU_CAL_MSG(("%s\n","setValue() in bNeedZone||bNeedDST after submitValues()")); - DUMP_I18N_CAL_MSG(("%s\n","setValue() in bNeedZone||bNeedDST after submitValues()")); - nZone1 = body->get( UCAL_ZONE_OFFSET, status = U_ZERO_ERROR); + nYear = body->get( UCAL_YEAR, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nYear = -1; + } + if ( !(fieldSet & (1 << CalendarFieldIndex::MONTH)) ) + { + nMonth = body->get( UCAL_MONTH, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nMonth = -1; + } + if ( !(fieldSet & (1 << CalendarFieldIndex::DAY_OF_MONTH)) ) + { + nDay = body->get( UCAL_DATE, status = U_ZERO_ERROR); if ( !U_SUCCESS(status) ) - nZone1 = 0; - nDST1 = body->get( UCAL_DST_OFFSET, status = U_ZERO_ERROR); + nDay = -1; + } + if ( !(fieldSet & (1 << CalendarFieldIndex::HOUR)) ) + { + nHour = body->get( UCAL_HOUR_OF_DAY, status = U_ZERO_ERROR); if ( !U_SUCCESS(status) ) - nDST1 = 0; + nHour = -1; } + if ( !(fieldSet & (1 << CalendarFieldIndex::MINUTE)) ) + { + nMinute = body->get( UCAL_MINUTE, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nMinute = -1; + } + if ( !(fieldSet & (1 << CalendarFieldIndex::SECOND)) ) + { + nSecond = body->get( UCAL_SECOND, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nSecond = -1; + } + if ( !(fieldSet & (1 << CalendarFieldIndex::MILLISECOND)) ) + { + nMilliSecond = body->get( UCAL_MILLISECOND, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nMilliSecond = -1; + } + if ( !(fieldSet & (1 << CalendarFieldIndex::ZONE_OFFSET)) ) + { + nZone0 = body->get( UCAL_ZONE_OFFSET, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nZone0 = 0; + } + if ( !(fieldSet & (1 << CalendarFieldIndex::DST_OFFSET)) ) + { + nDST0 = body->get( UCAL_DST_OFFSET, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nDST0 = 0; + } + + // Submit values to obtain a time zone and DST corresponding to the date/time. + submitValues( nYear, nMonth, nDay, nHour, nMinute, nSecond, nMilliSecond, nZone0, nDST0); + + DUMP_ICU_CAL_MSG(("%s\n","setValue() in bNeedZone||bNeedDST after submitValues()")); + DUMP_I18N_CAL_MSG(("%s\n","setValue() in bNeedZone||bNeedDST after submitValues()")); + nZone1 = body->get( UCAL_ZONE_OFFSET, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nZone1 = 0; + nDST1 = body->get( UCAL_DST_OFFSET, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nDST1 = 0; + } - // The original submission, may lead to a different zone/DST and - // different date. - submitFields(); - DUMP_ICU_CAL_MSG(("%s\n","setValue() after original submission")); - DUMP_I18N_CAL_MSG(("%s\n","setValue() after original submission")); + // The original submission, may lead to a different zone/DST and + // different date. + submitFields(); + DUMP_ICU_CAL_MSG(("%s\n","setValue() after original submission")); + DUMP_I18N_CAL_MSG(("%s\n","setValue() after original submission")); - if ( bNeedZone || bNeedDST ) + if ( bNeedZone || bNeedDST ) + { + UErrorCode status; + sal_Int32 nZone2 = body->get( UCAL_ZONE_OFFSET, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nZone2 = nZone1; + sal_Int32 nDST2 = body->get( UCAL_DST_OFFSET, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nDST2 = nDST1; + if ( nZone0 != nZone1 || nZone2 != nZone1 || nDST0 != nDST1 || nDST2 != nDST1 ) { - UErrorCode status; - sal_Int32 nZone2 = body->get( UCAL_ZONE_OFFSET, status = U_ZERO_ERROR); + // Due to different DSTs, resulting date values may differ if + // DST is onset at 00:00 and the very onsetRule date was + // submitted with DST off => date-1 23:00, for example, which + // is not what we want. + // Resubmit all values, this time including DST => date 01:00 + // Similar for zone differences. + // If already the first full submission with nZone0 and nDST0 + // lead to date-1 23:00, the original submission was based on + // that date if it wasn't a full date (nDST0 set, nDST1 not + // set, nDST2==nDST1). If it was January 1st without year we're + // even off by one year now. Resubmit all values including new + // DST => date 00:00. + + // Set field values accordingly in case they were used. + if (!bNeedZone) + lcl_setCombinedOffsetFieldValues( nZone2, fieldSetValue, + fieldValue, CalendarFieldIndex::ZONE_OFFSET, + CalendarFieldIndex::ZONE_OFFSET_SECOND_MILLIS); + if (!bNeedDST) + lcl_setCombinedOffsetFieldValues( nDST2, fieldSetValue, + fieldValue, CalendarFieldIndex::DST_OFFSET, + CalendarFieldIndex::DST_OFFSET_SECOND_MILLIS); + submitValues( nYear, nMonth, nDay, nHour, nMinute, nSecond, nMilliSecond, nZone2, nDST2); + DUMP_ICU_CAL_MSG(("%s\n","setValue() after Zone/DST glitch resubmit")); + DUMP_I18N_CAL_MSG(("%s\n","setValue() after Zone/DST glitch resubmit")); + + // Time zone transition => resubmit. + // TZ=America/St_Johns date <= 1935-03-30 + // -3:30:52 (!) instead of -3:30 + // if first submission included time zone -3:30 that would be wrong. + bool bResubmit = false; + sal_Int32 nZone3 = body->get( UCAL_ZONE_OFFSET, status = U_ZERO_ERROR); if ( !U_SUCCESS(status) ) - nZone2 = nZone1; - sal_Int32 nDST2 = body->get( UCAL_DST_OFFSET, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nDST2 = nDST1; - if ( nZone0 != nZone1 || nZone2 != nZone1 || nDST0 != nDST1 || nDST2 != nDST1 ) + nZone3 = nZone2; + if (nZone3 != nZone2) { - // Due to different DSTs, resulting date values may differ if - // DST is onset at 00:00 and the very onsetRule date was - // submitted with DST off => date-1 23:00, for example, which - // is not what we want. - // Resubmit all values, this time including DST => date 01:00 - // Similar for zone differences. - // If already the first full submission with nZone0 and nDST0 - // lead to date-1 23:00, the original submission was based on - // that date if it wasn't a full date (nDST0 set, nDST1 not - // set, nDST2==nDST1). If it was January 1st without year we're - // even off by one year now. Resubmit all values including new - // DST => date 00:00. - - // Set field values accordingly in case they were used. + bResubmit = true; if (!bNeedZone) - lcl_setCombinedOffsetFieldValues( nZone2, fieldSetValue, + lcl_setCombinedOffsetFieldValues( nZone3, fieldSetValue, fieldValue, CalendarFieldIndex::ZONE_OFFSET, CalendarFieldIndex::ZONE_OFFSET_SECOND_MILLIS); - if (!bNeedDST) - lcl_setCombinedOffsetFieldValues( nDST2, fieldSetValue, - fieldValue, CalendarFieldIndex::DST_OFFSET, - CalendarFieldIndex::DST_OFFSET_SECOND_MILLIS); - submitValues( nYear, nMonth, nDay, nHour, nMinute, nSecond, nMilliSecond, nZone2, nDST2); - DUMP_ICU_CAL_MSG(("%s\n","setValue() after Zone/DST glitch resubmit")); - DUMP_I18N_CAL_MSG(("%s\n","setValue() after Zone/DST glitch resubmit")); - - // Time zone transition => resubmit. - // TZ=America/St_Johns date <= 1935-03-30 - // -3:30:52 (!) instead of -3:30 - // if first submission included time zone -3:30 that would be wrong. - bool bResubmit = false; - sal_Int32 nZone3 = body->get( UCAL_ZONE_OFFSET, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nZone3 = nZone2; - if (nZone3 != nZone2) - { - bResubmit = true; - if (!bNeedZone) - lcl_setCombinedOffsetFieldValues( nZone3, fieldSetValue, - fieldValue, CalendarFieldIndex::ZONE_OFFSET, - CalendarFieldIndex::ZONE_OFFSET_SECOND_MILLIS); - } + } - // If the DST onset rule says to switch from 00:00 to 01:00 and - // we tried to set onsetDay 00:00 with DST, the result was - // onsetDay-1 23:00 and no DST, which is not what we want. So - // once again without DST, resulting in onsetDay 01:00 and DST. - // Yes, this seems to be weird, but logically correct. - // It doesn't even have to be on an onsetDay as the DST is - // factored in all days by ICU and there seems to be some - // unknown behavior. - // TZ=Asia/Tehran 1999-03-22 exposes this, for example. - sal_Int32 nDST3 = body->get( UCAL_DST_OFFSET, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) - nDST3 = nDST2; - if (nDST2 != nDST3 && !nDST3) - { - bResubmit = true; - if (!bNeedDST) - { - fieldSetValue[CalendarFieldIndex::DST_OFFSET] = - fieldValue[CalendarFieldIndex::DST_OFFSET] = 0; - fieldSetValue[CalendarFieldIndex::DST_OFFSET_SECOND_MILLIS] = - fieldValue[CalendarFieldIndex::DST_OFFSET_SECOND_MILLIS] = 0; - } - } - if (bResubmit) + // If the DST onset rule says to switch from 00:00 to 01:00 and + // we tried to set onsetDay 00:00 with DST, the result was + // onsetDay-1 23:00 and no DST, which is not what we want. So + // once again without DST, resulting in onsetDay 01:00 and DST. + // Yes, this seems to be weird, but logically correct. + // It doesn't even have to be on an onsetDay as the DST is + // factored in all days by ICU and there seems to be some + // unknown behavior. + // TZ=Asia/Tehran 1999-03-22 exposes this, for example. + sal_Int32 nDST3 = body->get( UCAL_DST_OFFSET, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) + nDST3 = nDST2; + if (nDST2 != nDST3 && !nDST3) + { + bResubmit = true; + if (!bNeedDST) { - submitValues( nYear, nMonth, nDay, nHour, nMinute, nSecond, nMilliSecond, nZone3, nDST3); - DUMP_ICU_CAL_MSG(("%s\n","setValue() after Zone/DST glitch 2nd resubmit")); - DUMP_I18N_CAL_MSG(("%s\n","setValue() after Zone/DST glitch 2nd resubmit")); + fieldSetValue[CalendarFieldIndex::DST_OFFSET] = + fieldValue[CalendarFieldIndex::DST_OFFSET] = 0; + fieldSetValue[CalendarFieldIndex::DST_OFFSET_SECOND_MILLIS] = + fieldValue[CalendarFieldIndex::DST_OFFSET_SECOND_MILLIS] = 0; } - SAL_INFO( "i18npool", "Calendar_gregorian::setValue:" << - " nZone0 " << nZone0 << ", nDST0 " << nDST0 << - ", nZone1 " << nZone1 << ", nDST1 " << nDST1 << - ", nZone2 " << nZone2 << ", nDST2 " << nDST2 << - ", nZone3 " << nZone3 << ", nDST3 " << nDST3); } + if (bResubmit) + { + submitValues( nYear, nMonth, nDay, nHour, nMinute, nSecond, nMilliSecond, nZone3, nDST3); + DUMP_ICU_CAL_MSG(("%s\n","setValue() after Zone/DST glitch 2nd resubmit")); + DUMP_I18N_CAL_MSG(("%s\n","setValue() after Zone/DST glitch 2nd resubmit")); + } + SAL_INFO( "i18npool", "Calendar_gregorian::setValue:" << + " nZone0 " << nZone0 << ", nDST0 " << nDST0 << + ", nZone1 " << nZone1 << ", nDST1 " << nDST1 << + ", nZone2 " << nZone2 << ", nDST2 " << nDST2 << + ", nZone3 " << nZone3 << ", nDST3 " << nDST3); } + } #if erDUMP_ICU_CALENDAR || erDUMP_I18N_CALENDAR - { - // force icu::Calendar to recalculate - UErrorCode status; - sal_Int32 nTmp = body->get( UCAL_DATE, status = U_ZERO_ERROR); - DUMP_ICU_CAL_MSG(("%s: %d\n","setValue() result day",nTmp)); - DUMP_I18N_CAL_MSG(("%s: %d\n","setValue() result day",nTmp)); - } + { + // force icu::Calendar to recalculate + UErrorCode status; + sal_Int32 nTmp = body->get( UCAL_DATE, status = U_ZERO_ERROR); + DUMP_ICU_CAL_MSG(("%s: %d\n","setValue() result day",nTmp)); + DUMP_I18N_CAL_MSG(("%s: %d\n","setValue() result day",nTmp)); + } #endif } @@ -768,30 +768,30 @@ Calendar_gregorian::getValue( sal_Int16 fieldIndex ) throw(RuntimeException) void SAL_CALL Calendar_gregorian::addValue( sal_Int16 fieldIndex, sal_Int32 value ) throw(RuntimeException) { - // since ZONE and DST could not be add, we don't need to convert value here - UErrorCode status; - body->add(fieldNameConverter(fieldIndex), value, status = U_ZERO_ERROR); - if ( !U_SUCCESS(status) ) throw ERROR; - getValue(); + // since ZONE and DST could not be add, we don't need to convert value here + UErrorCode status; + body->add(fieldNameConverter(fieldIndex), value, status = U_ZERO_ERROR); + if ( !U_SUCCESS(status) ) throw ERROR; + getValue(); } sal_Bool SAL_CALL Calendar_gregorian::isValid() throw(RuntimeException) { - if (fieldSet) { - sal_Int32 tmp = fieldSet; - setValue(); - memcpy(fieldSetValue, fieldValue, sizeof(fieldSetValue)); - getValue(); - for ( sal_Int16 fieldIndex = 0; fieldIndex < FIELD_INDEX_COUNT; fieldIndex++ ) { - // compare only with fields that are set and reset fieldSet[] - if (tmp & (1 << fieldIndex)) { - if (fieldSetValue[fieldIndex] != fieldValue[fieldIndex]) - return sal_False; - } + if (fieldSet) { + sal_Int32 tmp = fieldSet; + setValue(); + memcpy(fieldSetValue, fieldValue, sizeof(fieldSetValue)); + getValue(); + for ( sal_Int16 fieldIndex = 0; fieldIndex < FIELD_INDEX_COUNT; fieldIndex++ ) { + // compare only with fields that are set and reset fieldSet[] + if (tmp & (1 << fieldIndex)) { + if (fieldSetValue[fieldIndex] != fieldValue[fieldIndex]) + return sal_False; } } - return true; + } + return true; } // NativeNumberMode has different meaning between Number and Calendar for Asian locales. @@ -894,123 +894,123 @@ throw(RuntimeException) void SAL_CALL Calendar_gregorian::setMinimumNumberOfDaysForFirstWeek( sal_Int16 days ) throw(RuntimeException) { - aCalendar.MinimumNumberOfDaysForFirstWeek = days; - body->setMinimalDaysInFirstWeek( static_cast<uint8_t>( days)); + aCalendar.MinimumNumberOfDaysForFirstWeek = days; + body->setMinimalDaysInFirstWeek( static_cast<uint8_t>( days)); } sal_Int16 SAL_CALL Calendar_gregorian::getMinimumNumberOfDaysForFirstWeek() throw(RuntimeException) { - return aCalendar.MinimumNumberOfDaysForFirstWeek; + return aCalendar.MinimumNumberOfDaysForFirstWeek; } sal_Int16 SAL_CALL Calendar_gregorian::getNumberOfMonthsInYear() throw(RuntimeException) { - return (sal_Int16) aCalendar.Months.getLength(); + return (sal_Int16) aCalendar.Months.getLength(); } sal_Int16 SAL_CALL Calendar_gregorian::getNumberOfDaysInWeek() throw(RuntimeException) { - return (sal_Int16) aCalendar.Days.getLength(); + return (sal_Int16) aCalendar.Days.getLength(); } Sequence< CalendarItem > SAL_CALL Calendar_gregorian::getDays() throw(RuntimeException) { - return LocaleDataImpl::downcastCalendarItems( aCalendar.Days); + return LocaleDataImpl::downcastCalendarItems( aCalendar.Days); } Sequence< CalendarItem > SAL_CALL Calendar_gregorian::getMonths() throw(RuntimeException) { - return LocaleDataImpl::downcastCalendarItems( aCalendar.Months); + return LocaleDataImpl::downcastCalendarItems( aCalendar.Months); } Sequence< CalendarItem2 > SAL_CALL Calendar_gregorian::getDays2() throw(RuntimeException) { - return aCalendar.Days; + return aCalendar.Days; } Sequence< CalendarItem2 > SAL_CALL Calendar_gregorian::getMonths2() throw(RuntimeException) { - return aCalendar.Months; + return aCalendar.Months; } Sequence< CalendarItem2 > SAL_CALL Calendar_gregorian::getGenitiveMonths2() throw(RuntimeException) { - return aCalendar.GenitiveMonths; + return aCalendar.GenitiveMonths; } Sequence< CalendarItem2 > SAL_CALL Calendar_gregorian::getPartitiveMonths2() throw(RuntimeException) { - return aCalendar.PartitiveMonths; + return aCalendar.PartitiveMonths; } OUString SAL_CALL Calendar_gregorian::getDisplayName( sal_Int16 displayIndex, sal_Int16 idx, sal_Int16 nameType ) throw(RuntimeException) { - OUString aStr; + OUString aStr; - switch( displayIndex ) { - case CalendarDisplayIndex::AM_PM:/* ==0 */ - if (idx == 0) aStr = LocaleDataImpl().getLocaleItem(aLocale).timeAM; - else if (idx == 1) aStr = LocaleDataImpl().getLocaleItem(aLocale).timePM; - else throw ERROR; - break; - case CalendarDisplayIndex::DAY: - if( idx >= aCalendar.Days.getLength() ) throw ERROR; - if (nameType == 0) aStr = aCalendar.Days[idx].AbbrevName; - else if (nameType == 1) aStr = aCalendar.Days[idx].FullName; - else if (nameType == 2) aStr = aCalendar.Days[idx].NarrowName; - else throw ERROR; - break; - case CalendarDisplayIndex::MONTH: - if( idx >= aCalendar.Months.getLength() ) throw ERROR; - if (nameType == 0) aStr = aCalendar.Months[idx].AbbrevName; - else if (nameType == 1) aStr = aCalendar.Months[idx].FullName; - else if (nameType == 2) aStr = aCalendar.Months[idx].NarrowName; - else throw ERROR; - break; - case CalendarDisplayIndex::GENITIVE_MONTH: - if( idx >= aCalendar.GenitiveMonths.getLength() ) throw ERROR; - if (nameType == 0) aStr = aCalendar.GenitiveMonths[idx].AbbrevName; - else if (nameType == 1) aStr = aCalendar.GenitiveMonths[idx].FullName; - else if (nameType == 2) aStr = aCalendar.GenitiveMonths[idx].NarrowName; - else throw ERROR; - break; - case CalendarDisplayIndex::PARTITIVE_MONTH: - if( idx >= aCalendar.PartitiveMonths.getLength() ) throw ERROR; - if (nameType == 0) aStr = aCalendar.PartitiveMonths[idx].AbbrevName; - else if (nameType == 1) aStr = aCalendar.PartitiveMonths[idx].FullName; - else if (nameType == 2) aStr = aCalendar.PartitiveMonths[idx].NarrowName; - else throw ERROR; - break; - case CalendarDisplayIndex::ERA: - if( idx >= aCalendar.Eras.getLength() ) throw ERROR; - if (nameType == 0) aStr = aCalendar.Eras[idx].AbbrevName; - else if (nameType == 1) aStr = aCalendar.Eras[idx].FullName; - else throw ERROR; - break; - case CalendarDisplayIndex::YEAR: - break; - default: - throw ERROR; - } - return aStr; + switch( displayIndex ) { + case CalendarDisplayIndex::AM_PM:/* ==0 */ + if (idx == 0) aStr = LocaleDataImpl().getLocaleItem(aLocale).timeAM; + else if (idx == 1) aStr = LocaleDataImpl().getLocaleItem(aLocale).timePM; + else throw ERROR; + break; + case CalendarDisplayIndex::DAY: + if( idx >= aCalendar.Days.getLength() ) throw ERROR; + if (nameType == 0) aStr = aCalendar.Days[idx].AbbrevName; + else if (nameType == 1) aStr = aCalendar.Days[idx].FullName; + else if (nameType == 2) aStr = aCalendar.Days[idx].NarrowName; + else throw ERROR; + break; + case CalendarDisplayIndex::MONTH: + if( idx >= aCalendar.Months.getLength() ) throw ERROR; + if (nameType == 0) aStr = aCalendar.Months[idx].AbbrevName; + else if (nameType == 1) aStr = aCalendar.Months[idx].FullName; + else if (nameType == 2) aStr = aCalendar.Months[idx].NarrowName; + else throw ERROR; + break; + case CalendarDisplayIndex::GENITIVE_MONTH: + if( idx >= aCalendar.GenitiveMonths.getLength() ) throw ERROR; + if (nameType == 0) aStr = aCalendar.GenitiveMonths[idx].AbbrevName; + else if (nameType == 1) aStr = aCalendar.GenitiveMonths[idx].FullName; + else if (nameType == 2) aStr = aCalendar.GenitiveMonths[idx].NarrowName; + else throw ERROR; + break; + case CalendarDisplayIndex::PARTITIVE_MONTH: + if( idx >= aCalendar.PartitiveMonths.getLength() ) throw ERROR; + if (nameType == 0) aStr = aCalendar.PartitiveMonths[idx].AbbrevName; + else if (nameType == 1) aStr = aCalendar.PartitiveMonths[idx].FullName; + else if (nameType == 2) aStr = aCalendar.PartitiveMonths[idx].NarrowName; + else throw ERROR; + break; + case CalendarDisplayIndex::ERA: + if( idx >= aCalendar.Eras.getLength() ) throw ERROR; + if (nameType == 0) aStr = aCalendar.Eras[idx].AbbrevName; + else if (nameType == 1) aStr = aCalendar.Eras[idx].FullName; + else throw ERROR; + break; + case CalendarDisplayIndex::YEAR: + break; + default: + throw ERROR; + } + return aStr; } // Methods in XExtendedCalendar @@ -1168,21 +1168,21 @@ Calendar_buddhist::getDisplayString( sal_Int32 nCalendarDisplayCode, sal_Int16 n OUString SAL_CALL Calendar_gregorian::getImplementationName(void) throw( RuntimeException ) { - return OUString::createFromAscii(cCalendar); + return OUString::createFromAscii(cCalendar); } sal_Bool SAL_CALL Calendar_gregorian::supportsService(const OUString& rServiceName) throw( RuntimeException ) { - return !rServiceName.compareToAscii(cCalendar); + return !rServiceName.compareToAscii(cCalendar); } Sequence< OUString > SAL_CALL Calendar_gregorian::getSupportedServiceNames(void) throw( RuntimeException ) { - Sequence< OUString > aRet(1); - aRet[0] = OUString::createFromAscii(cCalendar); - return aRet; + Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii(cCalendar); + return aRet; } }}}} diff --git a/i18npool/source/characterclassification/characterclassificationImpl.cxx b/i18npool/source/characterclassification/characterclassificationImpl.cxx index d1389b69ba0b..e7fe8e692958 100644 --- a/i18npool/source/characterclassification/characterclassificationImpl.cxx +++ b/i18npool/source/characterclassification/characterclassificationImpl.cxx @@ -31,8 +31,8 @@ namespace com { namespace sun { namespace star { namespace i18n { CharacterClassificationImpl::CharacterClassificationImpl( const Reference < uno::XComponentContext >& rxContext ) : m_xContext( rxContext ) { - if (createLocaleSpecificCharacterClassification(OUString("Unicode"), Locale())) - xUCI = cachedItem->xCI; + if (createLocaleSpecificCharacterClassification(OUString("Unicode"), Locale())) + xUCI = cachedItem->xCI; } CharacterClassificationImpl::~CharacterClassificationImpl() { @@ -47,62 +47,62 @@ OUString SAL_CALL CharacterClassificationImpl::toUpper( const OUString& Text, sal_Int32 nPos, sal_Int32 nCount, const Locale& rLocale ) throw(RuntimeException) { - return getLocaleSpecificCharacterClassification(rLocale)->toUpper(Text, nPos, nCount, rLocale); + return getLocaleSpecificCharacterClassification(rLocale)->toUpper(Text, nPos, nCount, rLocale); } OUString SAL_CALL CharacterClassificationImpl::toLower( const OUString& Text, sal_Int32 nPos, sal_Int32 nCount, const Locale& rLocale ) throw(RuntimeException) { - return getLocaleSpecificCharacterClassification(rLocale)->toLower(Text, nPos, nCount, rLocale); + return getLocaleSpecificCharacterClassification(rLocale)->toLower(Text, nPos, nCount, rLocale); } OUString SAL_CALL CharacterClassificationImpl::toTitle( const OUString& Text, sal_Int32 nPos, sal_Int32 nCount, const Locale& rLocale ) throw(RuntimeException) { - return getLocaleSpecificCharacterClassification(rLocale)->toTitle(Text, nPos, nCount, rLocale); + return getLocaleSpecificCharacterClassification(rLocale)->toTitle(Text, nPos, nCount, rLocale); } sal_Int16 SAL_CALL CharacterClassificationImpl::getType( const OUString& Text, sal_Int32 nPos ) throw(RuntimeException) { - if (xUCI.is()) - return xUCI->getType(Text, nPos); - throw RuntimeException(); + if (xUCI.is()) + return xUCI->getType(Text, nPos); + throw RuntimeException(); } sal_Int16 SAL_CALL CharacterClassificationImpl::getCharacterDirection( const OUString& Text, sal_Int32 nPos ) throw(RuntimeException) { - if (xUCI.is()) - return xUCI->getCharacterDirection(Text, nPos); - throw RuntimeException(); + if (xUCI.is()) + return xUCI->getCharacterDirection(Text, nPos); + throw RuntimeException(); } sal_Int16 SAL_CALL CharacterClassificationImpl::getScript( const OUString& Text, sal_Int32 nPos ) throw(RuntimeException) { - if (xUCI.is()) - return xUCI->getScript(Text, nPos); - throw RuntimeException(); + if (xUCI.is()) + return xUCI->getScript(Text, nPos); + throw RuntimeException(); } sal_Int32 SAL_CALL CharacterClassificationImpl::getCharacterType( const OUString& Text, sal_Int32 nPos, const Locale& rLocale ) throw(RuntimeException) { - return getLocaleSpecificCharacterClassification(rLocale)->getCharacterType(Text, nPos, rLocale); + return getLocaleSpecificCharacterClassification(rLocale)->getCharacterType(Text, nPos, rLocale); } sal_Int32 SAL_CALL CharacterClassificationImpl::getStringType( const OUString& Text, sal_Int32 nPos, sal_Int32 nCount, const Locale& rLocale ) throw(RuntimeException) { - return getLocaleSpecificCharacterClassification(rLocale)->getStringType(Text, nPos, nCount, rLocale); + return getLocaleSpecificCharacterClassification(rLocale)->getStringType(Text, nPos, nCount, rLocale); } ParseResult SAL_CALL CharacterClassificationImpl::parseAnyToken( @@ -111,9 +111,9 @@ ParseResult SAL_CALL CharacterClassificationImpl::parseAnyToken( sal_Int32 contCharTokenType, const OUString& userDefinedCharactersCont ) throw(RuntimeException) { - return getLocaleSpecificCharacterClassification(rLocale)->parseAnyToken(Text, nPos, rLocale, - startCharTokenType,userDefinedCharactersStart, - contCharTokenType, userDefinedCharactersCont); + return getLocaleSpecificCharacterClassification(rLocale)->parseAnyToken(Text, nPos, rLocale, + startCharTokenType,userDefinedCharactersStart, + contCharTokenType, userDefinedCharactersCont); } @@ -123,73 +123,73 @@ ParseResult SAL_CALL CharacterClassificationImpl::parsePredefinedToken( const OUString& userDefinedCharactersStart, sal_Int32 contCharTokenType, const OUString& userDefinedCharactersCont ) throw(RuntimeException) { - return getLocaleSpecificCharacterClassification(rLocale)->parsePredefinedToken( - nTokenType, Text, nPos, rLocale, startCharTokenType, userDefinedCharactersStart, - contCharTokenType, userDefinedCharactersCont); + return getLocaleSpecificCharacterClassification(rLocale)->parsePredefinedToken( + nTokenType, Text, nPos, rLocale, startCharTokenType, userDefinedCharactersStart, + contCharTokenType, userDefinedCharactersCont); } sal_Bool SAL_CALL CharacterClassificationImpl::createLocaleSpecificCharacterClassification(const OUString& serviceName, const Locale& rLocale) { - // to share service between same Language but different Country code, like zh_CN and zh_SG - for (size_t l = 0; l < lookupTable.size(); l++) { - cachedItem = lookupTable[l]; - if (serviceName == cachedItem->aName) { - lookupTable.push_back( cachedItem = new lookupTableItem(rLocale, serviceName, cachedItem->xCI) ); - return sal_True; - } + // to share service between same Language but different Country code, like zh_CN and zh_SG + for (size_t l = 0; l < lookupTable.size(); l++) { + cachedItem = lookupTable[l]; + if (serviceName == cachedItem->aName) { + lookupTable.push_back( cachedItem = new lookupTableItem(rLocale, serviceName, cachedItem->xCI) ); + return sal_True; } + } - Reference < XInterface > xI = m_xContext->getServiceManager()->createInstanceWithContext( - OUString("com.sun.star.i18n.CharacterClassification_") + serviceName, m_xContext); + Reference < XInterface > xI = m_xContext->getServiceManager()->createInstanceWithContext( + OUString("com.sun.star.i18n.CharacterClassification_") + serviceName, m_xContext); - Reference < XCharacterClassification > xCI; - if ( xI.is() ) { - xCI.set( xI, UNO_QUERY ); - if (xCI.is()) { - lookupTable.push_back( cachedItem = new lookupTableItem(rLocale, serviceName, xCI) ); - return sal_True; - } + Reference < XCharacterClassification > xCI; + if ( xI.is() ) { + xCI.set( xI, UNO_QUERY ); + if (xCI.is()) { + lookupTable.push_back( cachedItem = new lookupTableItem(rLocale, serviceName, xCI) ); + return sal_True; } - return sal_False; + } + return sal_False; } Reference < XCharacterClassification > SAL_CALL CharacterClassificationImpl::getLocaleSpecificCharacterClassification(const Locale& rLocale) throw(RuntimeException) { - // reuse instance if locale didn't change - if (cachedItem && cachedItem->equals(rLocale)) - return cachedItem->xCI; - else { - for (size_t i = 0; i < lookupTable.size(); i++) { - cachedItem = lookupTable[i]; - if (cachedItem->equals(rLocale)) - return cachedItem->xCI; - } - - // Load service with name <base>_<lang>_<country> or - // <base>_<bcp47> and fallbacks. - bool bLoaded = createLocaleSpecificCharacterClassification( - LocaleDataImpl::getFirstLocaleServiceName( rLocale), rLocale); - if (!bLoaded) - { - ::std::vector< OUString > aFallbacks( LocaleDataImpl::getFallbackLocaleServiceNames( rLocale)); - for (::std::vector< OUString >::const_iterator it( aFallbacks.begin()); it != aFallbacks.end(); ++it) - { - bLoaded = createLocaleSpecificCharacterClassification( *it, rLocale); - if (bLoaded) - break; - } - } - if (bLoaded) + // reuse instance if locale didn't change + if (cachedItem && cachedItem->equals(rLocale)) + return cachedItem->xCI; + else { + for (size_t i = 0; i < lookupTable.size(); i++) { + cachedItem = lookupTable[i]; + if (cachedItem->equals(rLocale)) return cachedItem->xCI; - else if (xUCI.is()) + } + + // Load service with name <base>_<lang>_<country> or + // <base>_<bcp47> and fallbacks. + bool bLoaded = createLocaleSpecificCharacterClassification( + LocaleDataImpl::getFirstLocaleServiceName( rLocale), rLocale); + if (!bLoaded) + { + ::std::vector< OUString > aFallbacks( LocaleDataImpl::getFallbackLocaleServiceNames( rLocale)); + for (::std::vector< OUString >::const_iterator it( aFallbacks.begin()); it != aFallbacks.end(); ++it) { - lookupTable.push_back( cachedItem = new lookupTableItem( rLocale, OUString("Unicode"), xUCI)); - return cachedItem->xCI; + bLoaded = createLocaleSpecificCharacterClassification( *it, rLocale); + if (bLoaded) + break; } } - throw RuntimeException(); + if (bLoaded) + return cachedItem->xCI; + else if (xUCI.is()) + { + lookupTable.push_back( cachedItem = new lookupTableItem( rLocale, OUString("Unicode"), xUCI)); + return cachedItem->xCI; + } + } + throw RuntimeException(); } const sal_Char cClass[] = "com.sun.star.i18n.CharacterClassification"; diff --git a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx index 32c1c4f2d156..e1914bb48a86 100644 --- a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx +++ b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx @@ -267,7 +267,7 @@ DefaultNumberingProvider::DefaultNumberingProvider( const Reference < XComponent DefaultNumberingProvider::~DefaultNumberingProvider() { - delete translit; + delete translit; } void DefaultNumberingProvider::impl_loadTranslit() @@ -293,42 +293,42 @@ OUString toRoman( sal_Int32 n ) // i, ii, iii, iv, v, vi, vii, vii, viii, ix // (Dummy),1000,500,100,50,10,5,1 - static const sal_Char coRomanArr[] = "MDCLXVI--"; // +2 Dummy entries !! - const sal_Char* cRomanStr = coRomanArr; - sal_uInt16 nMask = 1000; - sal_uInt32 nOver1000 = n / nMask; - n -= ( nOver1000 * nMask ); + static const sal_Char coRomanArr[] = "MDCLXVI--"; // +2 Dummy entries !! + const sal_Char* cRomanStr = coRomanArr; + sal_uInt16 nMask = 1000; + sal_uInt32 nOver1000 = n / nMask; + n -= ( nOver1000 * nMask ); - OUStringBuffer sTmp; - while(nOver1000--) - sTmp.append(sal_Unicode(*coRomanArr)); + OUStringBuffer sTmp; + while(nOver1000--) + sTmp.append(sal_Unicode(*coRomanArr)); - while( nMask ) + while( nMask ) + { + sal_uInt8 nZahl = sal_uInt8( n / nMask ); + sal_uInt8 nDiff = 1; + n %= nMask; + + if( 5 < nZahl ) + { + if( nZahl < 9 ) + sTmp.append(sal_Unicode(*(cRomanStr-1))); + ++nDiff; + nZahl -= 5; + } + switch( nZahl ) { - sal_uInt8 nZahl = sal_uInt8( n / nMask ); - sal_uInt8 nDiff = 1; - n %= nMask; - - if( 5 < nZahl ) - { - if( nZahl < 9 ) - sTmp.append(sal_Unicode(*(cRomanStr-1))); - ++nDiff; - nZahl -= 5; - } - switch( nZahl ) - { - case 3: sTmp.append(sal_Unicode(*cRomanStr)); //no break! - case 2: sTmp.append(sal_Unicode(*cRomanStr)); //no break! - case 1: sTmp.append(sal_Unicode(*cRomanStr)); break; - case 4: sTmp.append(sal_Unicode(*cRomanStr)).append(sal_Unicode(*(cRomanStr-nDiff))); break; - case 5: sTmp.append(sal_Unicode(*(cRomanStr-nDiff))); break; - } - - nMask /= 10; // to the next decade - cRomanStr += 2; + case 3: sTmp.append(sal_Unicode(*cRomanStr)); //no break! + case 2: sTmp.append(sal_Unicode(*cRomanStr)); //no break! + case 1: sTmp.append(sal_Unicode(*cRomanStr)); break; + case 4: sTmp.append(sal_Unicode(*cRomanStr)).append(sal_Unicode(*(cRomanStr-nDiff))); break; + case 5: sTmp.append(sal_Unicode(*(cRomanStr-nDiff))); break; } - return sTmp.makeStringAndClear(); + + nMask /= 10; // to the next decade + cRomanStr += 2; + } + return sTmp.makeStringAndClear(); } // not used: @@ -943,24 +943,24 @@ static const sal_Int32 nSupported_NumberingTypes = sizeof(aSupportedTypes) / siz OUString DefaultNumberingProvider::makeNumberingIdentifier(sal_Int16 index) throw(RuntimeException) { - if (aSupportedTypes[index].cSymbol) - return OUString(aSupportedTypes[index].cSymbol, strlen(aSupportedTypes[index].cSymbol), RTL_TEXTENCODING_UTF8); -// return OUString::createFromAscii(aSupportedTypes[index].cSymbol); - else { - OUString result; - Locale aLocale(OUString("en"), OUString(), OUString()); - Sequence<beans::PropertyValue> aProperties(2); - aProperties[0].Name = OUString("NumberingType"); - aProperties[0].Value <<= aSupportedTypes[index].nType; - aProperties[1].Name = OUString("Value"); - for (sal_Int32 j = 1; j <= 3; j++) { - aProperties[1].Value <<= j; - result += makeNumberingString( aProperties, aLocale ); - result += ", "; - } - result += "..."; - return result; + if (aSupportedTypes[index].cSymbol) + return OUString(aSupportedTypes[index].cSymbol, strlen(aSupportedTypes[index].cSymbol), RTL_TEXTENCODING_UTF8); + // return OUString::createFromAscii(aSupportedTypes[index].cSymbol); + else { + OUString result; + Locale aLocale(OUString("en"), OUString(), OUString()); + Sequence<beans::PropertyValue> aProperties(2); + aProperties[0].Name = OUString("NumberingType"); + aProperties[0].Value <<= aSupportedTypes[index].nType; + aProperties[1].Name = OUString("Value"); + for (sal_Int32 j = 1; j <= 3; j++) { + aProperties[1].Value <<= j; + result += makeNumberingString( aProperties, aLocale ); + result += ", "; } + result += "..."; + return result; + } } sal_Bool SAL_CALL @@ -1000,46 +1000,46 @@ DefaultNumberingProvider::isScriptFlagEnabled(const OUString& aName) throw(Runti Sequence< sal_Int16 > DefaultNumberingProvider::getSupportedNumberingTypes( ) throw(RuntimeException) { - Sequence< sal_Int16 > aRet(nSupported_NumberingTypes ); - sal_Int16* pArray = aRet.getArray(); + Sequence< sal_Int16 > aRet(nSupported_NumberingTypes ); + sal_Int16* pArray = aRet.getArray(); - sal_Bool cjkEnabled = isScriptFlagEnabled(OUString("CJK/CJKFont")); - sal_Bool ctlEnabled = isScriptFlagEnabled(OUString("CTL/CTLFont")); + sal_Bool cjkEnabled = isScriptFlagEnabled(OUString("CJK/CJKFont")); + sal_Bool ctlEnabled = isScriptFlagEnabled(OUString("CTL/CTLFont")); - for(sal_Int16 i = 0; i < nSupported_NumberingTypes; i++) { - if ( (aSupportedTypes[i].langOption & LANG_ALL) || - ((aSupportedTypes[i].langOption & LANG_CJK) && cjkEnabled) || - ((aSupportedTypes[i].langOption & LANG_CTL) && ctlEnabled) ) - pArray[i] = aSupportedTypes[i].nType; - } - return aRet; + for(sal_Int16 i = 0; i < nSupported_NumberingTypes; i++) { + if ( (aSupportedTypes[i].langOption & LANG_ALL) || + ((aSupportedTypes[i].langOption & LANG_CJK) && cjkEnabled) || + ((aSupportedTypes[i].langOption & LANG_CTL) && ctlEnabled) ) + pArray[i] = aSupportedTypes[i].nType; + } + return aRet; } sal_Int16 DefaultNumberingProvider::getNumberingType( const OUString& rNumberingIdentifier ) throw(RuntimeException) { - for(sal_Int16 i = 0; i < nSupported_NumberingTypes; i++) - if(rNumberingIdentifier.equals(makeNumberingIdentifier(i))) - return aSupportedTypes[i].nType; - throw RuntimeException(); + for(sal_Int16 i = 0; i < nSupported_NumberingTypes; i++) + if(rNumberingIdentifier.equals(makeNumberingIdentifier(i))) + return aSupportedTypes[i].nType; + throw RuntimeException(); } sal_Bool DefaultNumberingProvider::hasNumberingType( const OUString& rNumberingIdentifier ) throw(RuntimeException) { - for(sal_Int16 i = 0; i < nSupported_NumberingTypes; i++) - if(rNumberingIdentifier.equals(makeNumberingIdentifier(i))) - return sal_True; - return sal_False; + for(sal_Int16 i = 0; i < nSupported_NumberingTypes; i++) + if(rNumberingIdentifier.equals(makeNumberingIdentifier(i))) + return sal_True; + return sal_False; } OUString DefaultNumberingProvider::getNumberingIdentifier( sal_Int16 nNumberingType ) throw(RuntimeException) { - for(sal_Int16 i = 0; i < nSupported_NumberingTypes; i++) - if(nNumberingType == aSupportedTypes[i].nType) - return makeNumberingIdentifier(i); - return OUString(); + for(sal_Int16 i = 0; i < nSupported_NumberingTypes; i++) + if(nNumberingType == aSupportedTypes[i].nType) + return makeNumberingIdentifier(i); + return OUString(); } static const sal_Char cDefaultNumberingProvider[] = "com.sun.star.text.DefaultNumberingProvider"; diff --git a/i18npool/source/indexentry/indexentrysupplier.cxx b/i18npool/source/indexentry/indexentrysupplier.cxx index e832dc8ca7dd..6a4ef3b4b4ff 100644 --- a/i18npool/source/indexentry/indexentrysupplier.cxx +++ b/i18npool/source/indexentry/indexentrysupplier.cxx @@ -33,144 +33,144 @@ IndexEntrySupplier::IndexEntrySupplier( const Reference < XComponentContext >& r Sequence < Locale > SAL_CALL IndexEntrySupplier::getLocaleList() throw (RuntimeException) { - return LocaleDataImpl().getAllInstalledLocaleNames(); + return LocaleDataImpl().getAllInstalledLocaleNames(); } Sequence < OUString > SAL_CALL IndexEntrySupplier::getAlgorithmList( const Locale& rLocale ) throw (RuntimeException) { - return LocaleDataImpl().getIndexAlgorithm(rLocale); + return LocaleDataImpl().getIndexAlgorithm(rLocale); } sal_Bool SAL_CALL IndexEntrySupplier::loadAlgorithm( const Locale& rLocale, const OUString& SortAlgorithm, sal_Int32 collatorOptions ) throw (RuntimeException) { - Sequence < OUString > algorithmList = getAlgorithmList( rLocale ); - for (sal_Int32 i = 0; i < algorithmList.getLength(); i++) { - if (algorithmList[i] == SortAlgorithm) { - if (getLocaleSpecificIndexEntrySupplier(rLocale, SortAlgorithm).is()) - return xIES->loadAlgorithm(rLocale, SortAlgorithm, collatorOptions); - } + Sequence < OUString > algorithmList = getAlgorithmList( rLocale ); + for (sal_Int32 i = 0; i < algorithmList.getLength(); i++) { + if (algorithmList[i] == SortAlgorithm) { + if (getLocaleSpecificIndexEntrySupplier(rLocale, SortAlgorithm).is()) + return xIES->loadAlgorithm(rLocale, SortAlgorithm, collatorOptions); } - return sal_False; + } + return sal_False; } sal_Bool SAL_CALL IndexEntrySupplier::usePhoneticEntry( const Locale& rLocale ) throw (RuntimeException) { - return LocaleDataImpl().hasPhonetic(rLocale); + return LocaleDataImpl().hasPhonetic(rLocale); } OUString SAL_CALL IndexEntrySupplier::getPhoneticCandidate( const OUString& rIndexEntry, const Locale& rLocale ) throw (RuntimeException) { - if (getLocaleSpecificIndexEntrySupplier(rLocale, OUString()).is()) - return xIES->getPhoneticCandidate(rIndexEntry, rLocale); - else - throw RuntimeException(); + if (getLocaleSpecificIndexEntrySupplier(rLocale, OUString()).is()) + return xIES->getPhoneticCandidate(rIndexEntry, rLocale); + else + throw RuntimeException(); } OUString SAL_CALL IndexEntrySupplier::getIndexKey( const OUString& rIndexEntry, const OUString& rPhoneticEntry, const Locale& rLocale ) throw (RuntimeException) { - if (xIES.is()) - return xIES->getIndexKey(rIndexEntry, rPhoneticEntry, rLocale); - else - throw RuntimeException(); + if (xIES.is()) + return xIES->getIndexKey(rIndexEntry, rPhoneticEntry, rLocale); + else + throw RuntimeException(); } sal_Int16 SAL_CALL IndexEntrySupplier::compareIndexEntry( const OUString& rIndexEntry1, const OUString& rPhoneticEntry1, const Locale& rLocale1, const OUString& rIndexEntry2, const OUString& rPhoneticEntry2, const Locale& rLocale2 ) - throw (com::sun::star::uno::RuntimeException) +throw (com::sun::star::uno::RuntimeException) { - if (xIES.is()) - return xIES->compareIndexEntry(rIndexEntry1, rPhoneticEntry1, rLocale1, - rIndexEntry2, rPhoneticEntry2, rLocale2); - else - throw RuntimeException(); + if (xIES.is()) + return xIES->compareIndexEntry(rIndexEntry1, rPhoneticEntry1, rLocale1, + rIndexEntry2, rPhoneticEntry2, rLocale2); + else + throw RuntimeException(); } OUString SAL_CALL IndexEntrySupplier::getIndexCharacter( const OUString& rIndexEntry, const Locale& rLocale, const OUString& rSortAlgorithm ) - throw (RuntimeException) +throw (RuntimeException) { - return getLocaleSpecificIndexEntrySupplier(rLocale, rSortAlgorithm)-> - getIndexCharacter( rIndexEntry, rLocale, rSortAlgorithm ); + return getLocaleSpecificIndexEntrySupplier(rLocale, rSortAlgorithm)-> + getIndexCharacter( rIndexEntry, rLocale, rSortAlgorithm ); } sal_Bool SAL_CALL IndexEntrySupplier::createLocaleSpecificIndexEntrySupplier(const OUString& name) throw( RuntimeException ) { - Reference < XInterface > xI = m_xContext->getServiceManager()->createInstanceWithContext( + Reference < XInterface > xI = m_xContext->getServiceManager()->createInstanceWithContext( OUString("com.sun.star.i18n.IndexEntrySupplier_") + name, m_xContext); - if ( xI.is() ) { - xIES.set( xI, UNO_QUERY ); - return xIES.is(); - } - return sal_False; + if ( xI.is() ) { + xIES.set( xI, UNO_QUERY ); + return xIES.is(); + } + return sal_False; } Reference < com::sun::star::i18n::XExtendedIndexEntrySupplier > SAL_CALL IndexEntrySupplier::getLocaleSpecificIndexEntrySupplier(const Locale& rLocale, const OUString& rSortAlgorithm) throw (RuntimeException) { - if (xIES.is() && rSortAlgorithm == aSortAlgorithm && rLocale.Language == aLocale.Language && - rLocale.Country == aLocale.Country && rLocale.Variant == aLocale.Variant) + if (xIES.is() && rSortAlgorithm == aSortAlgorithm && rLocale.Language == aLocale.Language && + rLocale.Country == aLocale.Country && rLocale.Variant == aLocale.Variant) + return xIES; + else { + LocaleDataImpl ld; + aLocale = rLocale; + if (rSortAlgorithm.isEmpty()) + aSortAlgorithm = ld.getDefaultIndexAlgorithm( rLocale ); + else + aSortAlgorithm = rSortAlgorithm; + + OUString module = ld.getIndexModuleByAlgorithm(rLocale, aSortAlgorithm); + if (!module.isEmpty() && createLocaleSpecificIndexEntrySupplier(module)) return xIES; - else { - LocaleDataImpl ld; - aLocale = rLocale; - if (rSortAlgorithm.isEmpty()) - aSortAlgorithm = ld.getDefaultIndexAlgorithm( rLocale ); - else - aSortAlgorithm = rSortAlgorithm; - - OUString module = ld.getIndexModuleByAlgorithm(rLocale, aSortAlgorithm); - if (!module.isEmpty() && createLocaleSpecificIndexEntrySupplier(module)) - return xIES; - - bool bLoaded = false; - if (!aSortAlgorithm.isEmpty()) + + bool bLoaded = false; + if (!aSortAlgorithm.isEmpty()) + { + // Load service with name <base>_<lang>_<country>_<algorithm> + // or <base>_<bcp47>_<algorithm> and fallbacks. + bLoaded = createLocaleSpecificIndexEntrySupplier( + LocaleDataImpl::getFirstLocaleServiceName( rLocale) + "_" + aSortAlgorithm); + if (!bLoaded) { - // Load service with name <base>_<lang>_<country>_<algorithm> - // or <base>_<bcp47>_<algorithm> and fallbacks. - bLoaded = createLocaleSpecificIndexEntrySupplier( - LocaleDataImpl::getFirstLocaleServiceName( rLocale) + "_" + aSortAlgorithm); + ::std::vector< OUString > aFallbacks( LocaleDataImpl::getFallbackLocaleServiceNames( rLocale)); + for (::std::vector< OUString >::const_iterator it( aFallbacks.begin()); it != aFallbacks.end(); ++it) + { + bLoaded = createLocaleSpecificIndexEntrySupplier( *it + "_" + aSortAlgorithm); + if (bLoaded) + break; + } if (!bLoaded) { - ::std::vector< OUString > aFallbacks( LocaleDataImpl::getFallbackLocaleServiceNames( rLocale)); - for (::std::vector< OUString >::const_iterator it( aFallbacks.begin()); it != aFallbacks.end(); ++it) - { - bLoaded = createLocaleSpecificIndexEntrySupplier( *it + "_" + aSortAlgorithm); - if (bLoaded) - break; - } - if (!bLoaded) - { - // load service with name <base>_<algorithm> - bLoaded = createLocaleSpecificIndexEntrySupplier( aSortAlgorithm); - } + // load service with name <base>_<algorithm> + bLoaded = createLocaleSpecificIndexEntrySupplier( aSortAlgorithm); } } + } + if (!bLoaded) + { + // load default service with name <base>_Unicode + bLoaded = createLocaleSpecificIndexEntrySupplier( "Unicode"); if (!bLoaded) { - // load default service with name <base>_Unicode - bLoaded = createLocaleSpecificIndexEntrySupplier( "Unicode"); - if (!bLoaded) - { - throw RuntimeException(); // could not load any service - } + throw RuntimeException(); // could not load any service } - return xIES; } + return xIES; + } } OUString SAL_CALL IndexEntrySupplier::getIndexFollowPageWord( sal_Bool bMorePages, const Locale& rLocale ) throw (RuntimeException) { - Sequence< OUString > aFollowPageWords = LocaleDataImpl().getFollowPageWords(rLocale); + Sequence< OUString > aFollowPageWords = LocaleDataImpl().getFollowPageWords(rLocale); - return (bMorePages && aFollowPageWords.getLength() > 1) ? - aFollowPageWords[1] : (aFollowPageWords.getLength() > 0 ? - aFollowPageWords[0] : OUString()); + return (bMorePages && aFollowPageWords.getLength() > 1) ? + aFollowPageWords[1] : (aFollowPageWords.getLength() > 0 ? + aFollowPageWords[0] : OUString()); } #define implementationName "com.sun.star.i18n.IndexEntrySupplier" @@ -178,21 +178,21 @@ OUString SAL_CALL IndexEntrySupplier::getIndexFollowPageWord( sal_Bool bMorePage OUString SAL_CALL IndexEntrySupplier::getImplementationName() throw( RuntimeException ) { - return OUString::createFromAscii( implementationName ); + return OUString::createFromAscii( implementationName ); } sal_Bool SAL_CALL IndexEntrySupplier::supportsService(const OUString& rServiceName) throw( RuntimeException ) { - return rServiceName.compareToAscii(implementationName) == 0; + return rServiceName.compareToAscii(implementationName) == 0; } Sequence< OUString > SAL_CALL IndexEntrySupplier::getSupportedServiceNames() throw( RuntimeException ) { - Sequence< OUString > aRet(1); - aRet[0] = OUString::createFromAscii( implementationName ); - return aRet; + Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii( implementationName ); + return aRet; } } } } } diff --git a/i18npool/source/inputchecker/inputsequencechecker.cxx b/i18npool/source/inputchecker/inputsequencechecker.cxx index 159663edc3fc..d1a6e881683a 100644 --- a/i18npool/source/inputchecker/inputsequencechecker.cxx +++ b/i18npool/source/inputchecker/inputsequencechecker.cxx @@ -32,8 +32,8 @@ namespace com { namespace sun { namespace star { namespace i18n { InputSequenceCheckerImpl::InputSequenceCheckerImpl( const Reference < XComponentContext >& rxContext ) : m_xContext( rxContext ) { - serviceName = "com.sun.star.i18n.InputSequenceCheckerImpl"; - cachedItem = NULL; + serviceName = "com.sun.star.i18n.InputSequenceCheckerImpl"; + cachedItem = NULL; } InputSequenceCheckerImpl::InputSequenceCheckerImpl() @@ -42,49 +42,49 @@ InputSequenceCheckerImpl::InputSequenceCheckerImpl() InputSequenceCheckerImpl::~InputSequenceCheckerImpl() { - // Clear lookuptable - for (size_t l = 0; l < lookupTable.size(); l++) - delete lookupTable[l]; + // Clear lookuptable + for (size_t l = 0; l < lookupTable.size(); l++) + delete lookupTable[l]; - lookupTable.clear(); + lookupTable.clear(); } sal_Bool SAL_CALL InputSequenceCheckerImpl::checkInputSequence(const OUString& Text, sal_Int32 nStartPos, sal_Unicode inputChar, sal_Int16 inputCheckMode) throw(RuntimeException) { - if (inputCheckMode == InputSequenceCheckMode::PASSTHROUGH) - return sal_True; + if (inputCheckMode == InputSequenceCheckMode::PASSTHROUGH) + return sal_True; - sal_Char* language = getLanguageByScripType(Text[nStartPos], inputChar); + sal_Char* language = getLanguageByScripType(Text[nStartPos], inputChar); - if (language) - return getInputSequenceChecker(language)->checkInputSequence(Text, nStartPos, inputChar, inputCheckMode); - else - return sal_True; // not a checkable languages. + if (language) + return getInputSequenceChecker(language)->checkInputSequence(Text, nStartPos, inputChar, inputCheckMode); + else + return sal_True; // not a checkable languages. } sal_Int32 SAL_CALL InputSequenceCheckerImpl::correctInputSequence(OUString& Text, sal_Int32 nStartPos, sal_Unicode inputChar, sal_Int16 inputCheckMode) throw(RuntimeException) { - if (inputCheckMode != InputSequenceCheckMode::PASSTHROUGH) { - sal_Char* language = getLanguageByScripType(Text[nStartPos], inputChar); + if (inputCheckMode != InputSequenceCheckMode::PASSTHROUGH) { + sal_Char* language = getLanguageByScripType(Text[nStartPos], inputChar); - if (language) - return getInputSequenceChecker(language)->correctInputSequence(Text, nStartPos, inputChar, inputCheckMode); - } - Text = Text.replaceAt(++nStartPos, 0, OUString(inputChar)); - return nStartPos; + if (language) + return getInputSequenceChecker(language)->correctInputSequence(Text, nStartPos, inputChar, inputCheckMode); + } + Text = Text.replaceAt(++nStartPos, 0, OUString(inputChar)); + return nStartPos; } static ScriptTypeList typeList[] = { - //{ UnicodeScript_kHebrew, UnicodeScript_kHebrew }, // 10, - //{ UnicodeScript_kArabic, UnicodeScript_kArabic }, // 11, - { UnicodeScript_kDevanagari,UnicodeScript_kDevanagari, UnicodeScript_kDevanagari }, // 14, - { UnicodeScript_kThai, UnicodeScript_kThai, UnicodeScript_kThai }, // 24, + //{ UnicodeScript_kHebrew, UnicodeScript_kHebrew }, // 10, + //{ UnicodeScript_kArabic, UnicodeScript_kArabic }, // 11, + { UnicodeScript_kDevanagari,UnicodeScript_kDevanagari, UnicodeScript_kDevanagari }, // 14, + { UnicodeScript_kThai, UnicodeScript_kThai, UnicodeScript_kThai }, // 24, - { UnicodeScript_kScriptCount, UnicodeScript_kScriptCount, UnicodeScript_kScriptCount } // 88 + { UnicodeScript_kScriptCount, UnicodeScript_kScriptCount, UnicodeScript_kScriptCount } // 88 }; sal_Char* SAL_CALL @@ -96,8 +96,8 @@ InputSequenceCheckerImpl::getLanguageByScripType(sal_Unicode cChar, sal_Unicode type == unicode::getUnicodeScriptType( nChar, typeList, UnicodeScript_kScriptCount )) { switch(type) { case UnicodeScript_kThai: return (sal_Char*)"th"; - //case UnicodeScript_kArabic: return (sal_Char*)"ar"; - //case UnicodeScript_kHebrew: return (sal_Char*)"he"; + //case UnicodeScript_kArabic: return (sal_Char*)"ar"; + //case UnicodeScript_kHebrew: return (sal_Char*)"he"; case UnicodeScript_kDevanagari: return (sal_Char*)"hi"; } } @@ -107,50 +107,50 @@ InputSequenceCheckerImpl::getLanguageByScripType(sal_Unicode cChar, sal_Unicode Reference< XExtendedInputSequenceChecker >& SAL_CALL InputSequenceCheckerImpl::getInputSequenceChecker(sal_Char* rLanguage) throw (RuntimeException) { - if (cachedItem && cachedItem->aLanguage == rLanguage) { - return cachedItem->xISC; + if (cachedItem && cachedItem->aLanguage == rLanguage) { + return cachedItem->xISC; + } + else { + for (size_t l = 0; l < lookupTable.size(); l++) { + cachedItem = lookupTable[l]; + if (cachedItem->aLanguage == rLanguage) + return cachedItem->xISC; } - else { - for (size_t l = 0; l < lookupTable.size(); l++) { - cachedItem = lookupTable[l]; - if (cachedItem->aLanguage == rLanguage) - return cachedItem->xISC; - } - Reference < uno::XInterface > xI = m_xContext->getServiceManager()->createInstanceWithContext( - OUString("com.sun.star.i18n.InputSequenceChecker_") + - OUString::createFromAscii(rLanguage), - m_xContext); - - if ( xI.is() ) { - Reference< XExtendedInputSequenceChecker > xISC( xI, uno::UNO_QUERY ); - if (xISC.is()) { - lookupTable.push_back(cachedItem = new lookupTableItem(rLanguage, xISC)); - return cachedItem->xISC; - } + Reference < uno::XInterface > xI = m_xContext->getServiceManager()->createInstanceWithContext( + OUString("com.sun.star.i18n.InputSequenceChecker_") + + OUString::createFromAscii(rLanguage), + m_xContext); + + if ( xI.is() ) { + Reference< XExtendedInputSequenceChecker > xISC( xI, uno::UNO_QUERY ); + if (xISC.is()) { + lookupTable.push_back(cachedItem = new lookupTableItem(rLanguage, xISC)); + return cachedItem->xISC; } } - throw RuntimeException(); + } + throw RuntimeException(); } OUString SAL_CALL InputSequenceCheckerImpl::getImplementationName(void) throw( RuntimeException ) { - return OUString::createFromAscii(serviceName); + return OUString::createFromAscii(serviceName); } sal_Bool SAL_CALL InputSequenceCheckerImpl::supportsService(const OUString& rServiceName) throw( RuntimeException ) { - return !rServiceName.compareToAscii(serviceName); + return !rServiceName.compareToAscii(serviceName); } Sequence< OUString > SAL_CALL InputSequenceCheckerImpl::getSupportedServiceNames(void) throw( RuntimeException ) { - Sequence< OUString > aRet(1); - aRet[0] = OUString::createFromAscii(serviceName); - return aRet; + Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii(serviceName); + return aRet; } } } } } diff --git a/i18npool/source/nativenumber/nativenumbersupplier.cxx b/i18npool/source/nativenumber/nativenumbersupplier.cxx index b85aadea8300..382d58c53ebd 100644 --- a/i18npool/source/nativenumber/nativenumbersupplier.cxx +++ b/i18npool/source/nativenumber/nativenumbersupplier.cxx @@ -62,315 +62,315 @@ OUString SAL_CALL getHebrewNativeNumberString(const OUString& aNumberString, sal OUString SAL_CALL AsciiToNativeChar( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, Sequence< sal_Int32 >& offset, sal_Bool useOffset, sal_Int16 number ) throw(RuntimeException) { - const sal_Unicode *src = inStr.getStr() + startPos; - rtl_uString *newStr = rtl_uString_alloc(nCount); - if (useOffset) - offset.realloc(nCount); + const sal_Unicode *src = inStr.getStr() + startPos; + rtl_uString *newStr = rtl_uString_alloc(nCount); + if (useOffset) + offset.realloc(nCount); - for (sal_Int32 i = 0; i < nCount; i++) - { - sal_Unicode ch = src[i]; - if (isNumber(ch)) - newStr->buffer[i] = NumberChar[number][ ch - NUMBER_ZERO ]; - else if (i+1 < nCount && isNumber(src[i+1])) { - if (i > 0 && isNumber(src[i-1]) && isSeparator(ch)) - newStr->buffer[i] = SeparatorChar[number] ? SeparatorChar[number] : ch; - else - newStr->buffer[i] = isDecimal(ch) ? (DecimalChar[number] ? DecimalChar[number] : ch) : - isMinus(ch) ? (MinusChar[number] ? MinusChar[number] : ch) : ch; - } + for (sal_Int32 i = 0; i < nCount; i++) + { + sal_Unicode ch = src[i]; + if (isNumber(ch)) + newStr->buffer[i] = NumberChar[number][ ch - NUMBER_ZERO ]; + else if (i+1 < nCount && isNumber(src[i+1])) { + if (i > 0 && isNumber(src[i-1]) && isSeparator(ch)) + newStr->buffer[i] = SeparatorChar[number] ? SeparatorChar[number] : ch; else - newStr->buffer[i] = ch; - if (useOffset) - offset[i] = startPos + i; + newStr->buffer[i] = isDecimal(ch) ? (DecimalChar[number] ? DecimalChar[number] : ch) : + isMinus(ch) ? (MinusChar[number] ? MinusChar[number] : ch) : ch; } - return OUString(newStr, SAL_NO_ACQUIRE); // take ownership + else + newStr->buffer[i] = ch; + if (useOffset) + offset[i] = startPos + i; + } + return OUString(newStr, SAL_NO_ACQUIRE); // take ownership } sal_Bool SAL_CALL AsciiToNative_numberMaker(const sal_Unicode *str, sal_Int32 begin, sal_Int32 len, sal_Unicode *dst, sal_Int32& count, sal_Int16 multiChar_index, Sequence< sal_Int32 >& offset, sal_Bool useOffset, sal_Int32 startPos, const Number *number, const sal_Unicode* numberChar) { - sal_Unicode multiChar = (multiChar_index == -1 ? 0 : number->multiplierChar[multiChar_index]); - if ( len <= number->multiplierExponent[number->exponentCount-1] ) { - if (number->multiplierExponent[number->exponentCount-1] > 1) { - sal_Int16 i; - sal_Bool notZero = false; - for (i = 0; i < len; i++, begin++) { - if (notZero || str[begin] != NUMBER_ZERO) { - dst[count] = numberChar[str[begin] - NUMBER_ZERO]; - if (useOffset) - offset[count] = begin + startPos; - count++; - notZero = sal_True; - } - } - if (notZero && multiChar > 0) { - dst[count] = multiChar; - if (useOffset) - offset[count] = begin + startPos; - count++; - } - return notZero; - } else if (str[begin] != NUMBER_ZERO) { - if (!(number->numberFlag & (multiChar_index < 0 ? 0 : NUMBER_OMIT_ONE_CHECK(multiChar_index))) || str[begin] != NUMBER_ONE) { + sal_Unicode multiChar = (multiChar_index == -1 ? 0 : number->multiplierChar[multiChar_index]); + if ( len <= number->multiplierExponent[number->exponentCount-1] ) { + if (number->multiplierExponent[number->exponentCount-1] > 1) { + sal_Int16 i; + sal_Bool notZero = false; + for (i = 0; i < len; i++, begin++) { + if (notZero || str[begin] != NUMBER_ZERO) { dst[count] = numberChar[str[begin] - NUMBER_ZERO]; if (useOffset) offset[count] = begin + startPos; count++; + notZero = sal_True; } - if (multiChar > 0) { - dst[count] = multiChar; - if (useOffset) - offset[count] = begin + startPos; - count++; - } - } else if (!(number->numberFlag & NUMBER_OMIT_ZERO) && count > 0 && dst[count-1] != numberChar[0]) { - dst[count] = numberChar[0]; + } + if (notZero && multiChar > 0) { + dst[count] = multiChar; if (useOffset) offset[count] = begin + startPos; count++; } - return str[begin] != NUMBER_ZERO; - } else { - sal_Bool printPower = sal_False; - // sal_Int16 last = 0; - for (sal_Int16 i = 1; i <= number->exponentCount; i++) { - sal_Int32 tmp = len - (i == number->exponentCount ? 0 : number->multiplierExponent[i]); - if (tmp > 0) { - printPower |= AsciiToNative_numberMaker(str, begin, tmp, dst, count, + return notZero; + } else if (str[begin] != NUMBER_ZERO) { + if (!(number->numberFlag & (multiChar_index < 0 ? 0 : NUMBER_OMIT_ONE_CHECK(multiChar_index))) || str[begin] != NUMBER_ONE) { + dst[count] = numberChar[str[begin] - NUMBER_ZERO]; + if (useOffset) + offset[count] = begin + startPos; + count++; + } + if (multiChar > 0) { + dst[count] = multiChar; + if (useOffset) + offset[count] = begin + startPos; + count++; + } + } else if (!(number->numberFlag & NUMBER_OMIT_ZERO) && count > 0 && dst[count-1] != numberChar[0]) { + dst[count] = numberChar[0]; + if (useOffset) + offset[count] = begin + startPos; + count++; + } + return str[begin] != NUMBER_ZERO; + } else { + sal_Bool printPower = sal_False; + // sal_Int16 last = 0; + for (sal_Int16 i = 1; i <= number->exponentCount; i++) { + sal_Int32 tmp = len - (i == number->exponentCount ? 0 : number->multiplierExponent[i]); + if (tmp > 0) { + printPower |= AsciiToNative_numberMaker(str, begin, tmp, dst, count, (i == number->exponentCount ? -1 : i), offset, useOffset, startPos, number, numberChar); - begin += tmp; - len -= tmp; - } + begin += tmp; + len -= tmp; } - if (printPower) { - if (count > 0 && number->multiplierExponent[number->exponentCount-1] == 1 && - dst[count-1] == numberChar[0]) - count--; - if (multiChar > 0) { - dst[count] = multiChar; - if (useOffset) - offset[count] = begin + startPos; - count++; - } + } + if (printPower) { + if (count > 0 && number->multiplierExponent[number->exponentCount-1] == 1 && + dst[count-1] == numberChar[0]) + count--; + if (multiChar > 0) { + dst[count] = multiChar; + if (useOffset) + offset[count] = begin + startPos; + count++; } - return printPower; } + return printPower; + } } OUString SAL_CALL AsciiToNative( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, Sequence< sal_Int32 >& offset, sal_Bool useOffset, const Number* number ) throw(RuntimeException) { - OUString aRet; + OUString aRet; - sal_Int32 strLen = inStr.getLength() - startPos; - const sal_Unicode *numberChar = NumberChar[number->number]; + sal_Int32 strLen = inStr.getLength() - startPos; + const sal_Unicode *numberChar = NumberChar[number->number]; - if (nCount > strLen) - nCount = strLen; + if (nCount > strLen) + nCount = strLen; - if (nCount > 0) - { - const sal_Unicode *str = inStr.getStr() + startPos; - sal_Unicode *newStr = new sal_Unicode[nCount * 2 + 1]; - sal_Unicode *srcStr = new sal_Unicode[nCount + 1]; // for keeping number without comma - sal_Int32 i, len = 0, count = 0; + if (nCount > 0) + { + const sal_Unicode *str = inStr.getStr() + startPos; + sal_Unicode *newStr = new sal_Unicode[nCount * 2 + 1]; + sal_Unicode *srcStr = new sal_Unicode[nCount + 1]; // for keeping number without comma + sal_Int32 i, len = 0, count = 0; - if (useOffset) - offset.realloc( nCount * 2 ); - sal_Bool doDecimal = sal_False; - - for (i = 0; i <= nCount; i++) - { - if (i < nCount && isNumber(str[i])) { - if (doDecimal) { - newStr[count] = numberChar[str[i] - NUMBER_ZERO]; - if (useOffset) - offset[count] = i + startPos; - count++; - } - else - srcStr[len++] = str[i]; - } else { - if (len > 0) { - if (isSeparator(str[i]) && i < nCount-1 && isNumber(str[i+1])) - continue; // skip comma inside number string - sal_Bool notZero = sal_False; - for (sal_Int32 begin = 0, end = len % number->multiplierExponent[0]; - end <= len; begin = end, end += number->multiplierExponent[0]) { - if (end == 0) continue; - sal_Int32 _count = count; - notZero |= AsciiToNative_numberMaker(srcStr, begin, end - begin, newStr, count, - end == len ? -1 : 0, offset, useOffset, i - len + startPos, number, numberChar); - if (count > 0 && number->multiplierExponent[number->exponentCount-1] == 1 && - newStr[count-1] == numberChar[0]) - count--; - if (notZero && _count == count) { - if (end != len) { - newStr[count] = number->multiplierChar[0]; - if (useOffset) - offset[count] = i - len + startPos; - count++; - } + if (useOffset) + offset.realloc( nCount * 2 ); + sal_Bool doDecimal = sal_False; + + for (i = 0; i <= nCount; i++) + { + if (i < nCount && isNumber(str[i])) { + if (doDecimal) { + newStr[count] = numberChar[str[i] - NUMBER_ZERO]; + if (useOffset) + offset[count] = i + startPos; + count++; + } + else + srcStr[len++] = str[i]; + } else { + if (len > 0) { + if (isSeparator(str[i]) && i < nCount-1 && isNumber(str[i+1])) + continue; // skip comma inside number string + sal_Bool notZero = sal_False; + for (sal_Int32 begin = 0, end = len % number->multiplierExponent[0]; + end <= len; begin = end, end += number->multiplierExponent[0]) { + if (end == 0) continue; + sal_Int32 _count = count; + notZero |= AsciiToNative_numberMaker(srcStr, begin, end - begin, newStr, count, + end == len ? -1 : 0, offset, useOffset, i - len + startPos, number, numberChar); + if (count > 0 && number->multiplierExponent[number->exponentCount-1] == 1 && + newStr[count-1] == numberChar[0]) + count--; + if (notZero && _count == count) { + if (end != len) { + newStr[count] = number->multiplierChar[0]; + if (useOffset) + offset[count] = i - len + startPos; + count++; } } - if (! notZero && ! (number->numberFlag & NUMBER_OMIT_ONLY_ZERO)) { - newStr[count] = numberChar[0]; - if (useOffset) - offset[count] = i - len + startPos; - count++; - } - len = 0; } - if (i < nCount) { - if ((doDecimal = (!doDecimal && isDecimal(str[i]) && i < nCount-1 && isNumber(str[i+1]))) != sal_False) - newStr[count] = (DecimalChar[number->number] ? DecimalChar[number->number] : str[i]); - else if (isMinus(str[i]) && i < nCount-1 && isNumber(str[i+1])) - newStr[count] = (MinusChar[number->number] ? MinusChar[number->number] : str[i]); - else if (isSeparator(str[i]) && i < nCount-1 && isNumber(str[i+1])) - newStr[count] = (SeparatorChar[number->number] ? SeparatorChar[number->number] : str[i]); - else - newStr[count] = str[i]; + if (! notZero && ! (number->numberFlag & NUMBER_OMIT_ONLY_ZERO)) { + newStr[count] = numberChar[0]; if (useOffset) - offset[count] = i + startPos; + offset[count] = i - len + startPos; count++; } + len = 0; + } + if (i < nCount) { + if ((doDecimal = (!doDecimal && isDecimal(str[i]) && i < nCount-1 && isNumber(str[i+1]))) != sal_False) + newStr[count] = (DecimalChar[number->number] ? DecimalChar[number->number] : str[i]); + else if (isMinus(str[i]) && i < nCount-1 && isNumber(str[i+1])) + newStr[count] = (MinusChar[number->number] ? MinusChar[number->number] : str[i]); + else if (isSeparator(str[i]) && i < nCount-1 && isNumber(str[i+1])) + newStr[count] = (SeparatorChar[number->number] ? SeparatorChar[number->number] : str[i]); + else + newStr[count] = str[i]; + if (useOffset) + offset[count] = i + startPos; + count++; } } + } - delete[] srcStr; + delete[] srcStr; - if (useOffset) - offset.realloc(count); - aRet = OUString(newStr, count); - delete[] newStr; - } - return aRet; + if (useOffset) + offset.realloc(count); + aRet = OUString(newStr, count); + delete[] newStr; + } + return aRet; } static void SAL_CALL NativeToAscii_numberMaker(sal_Int16 max, sal_Int16 prev, const sal_Unicode *str, sal_Int32& i, sal_Int32 nCount, sal_Unicode *dst, sal_Int32& count, Sequence< sal_Int32 >& offset, sal_Bool useOffset, OUString& numberChar, OUString& multiplierChar) { - sal_Int16 curr = 0, num = 0, end = 0, shift = 0; - while (++i < nCount) { - if ((curr = sal::static_int_cast<sal_Int16>( numberChar.indexOf(str[i]) )) >= 0) { - if (num > 0) - break; - num = curr % 10; - } else if ((curr = sal::static_int_cast<sal_Int16>( multiplierChar.indexOf(str[i]) )) >= 0) { - curr = MultiplierExponent_7_CJK[curr % ExponentCount_7_CJK]; - if (prev > curr && num == 0) num = 1; // One may be omitted in informal format - shift = end = 0; - if (curr >= max) - max = curr; - else if (curr > prev) - shift = max - curr; - else - end = curr; - while (end++ < prev) { - dst[count] = NUMBER_ZERO + (end == prev ? num : 0); + sal_Int16 curr = 0, num = 0, end = 0, shift = 0; + while (++i < nCount) { + if ((curr = sal::static_int_cast<sal_Int16>( numberChar.indexOf(str[i]) )) >= 0) { + if (num > 0) + break; + num = curr % 10; + } else if ((curr = sal::static_int_cast<sal_Int16>( multiplierChar.indexOf(str[i]) )) >= 0) { + curr = MultiplierExponent_7_CJK[curr % ExponentCount_7_CJK]; + if (prev > curr && num == 0) num = 1; // One may be omitted in informal format + shift = end = 0; + if (curr >= max) + max = curr; + else if (curr > prev) + shift = max - curr; + else + end = curr; + while (end++ < prev) { + dst[count] = NUMBER_ZERO + (end == prev ? num : 0); + if (useOffset) + offset[count] = i; + count++; + } + if (shift) { + count -= max; + for (sal_Int16 j = 0; j < shift; j++, count++) { + dst[count] = dst[count + curr]; if (useOffset) - offset[count] = i; - count++; - } - if (shift) { - count -= max; - for (sal_Int16 j = 0; j < shift; j++, count++) { - dst[count] = dst[count + curr]; - if (useOffset) - offset[count] = offset[count + curr]; - } - max = curr; + offset[count] = offset[count + curr]; } - NativeToAscii_numberMaker(max, curr, str, i, nCount, dst, - count, offset, useOffset, numberChar, multiplierChar); - return; - } else - break; - } - while (end++ < prev) { - dst[count] = NUMBER_ZERO + (end == prev ? num : 0); - if (useOffset) - offset[count] = i - 1; - count++; - } + max = curr; + } + NativeToAscii_numberMaker(max, curr, str, i, nCount, dst, + count, offset, useOffset, numberChar, multiplierChar); + return; + } else + break; + } + while (end++ < prev) { + dst[count] = NUMBER_ZERO + (end == prev ? num : 0); + if (useOffset) + offset[count] = i - 1; + count++; + } } static OUString SAL_CALL NativeToAscii(const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, Sequence< sal_Int32 >& offset, sal_Bool useOffset ) throw(RuntimeException) { - OUString aRet; + OUString aRet; - sal_Int32 strLen = inStr.getLength() - startPos; + sal_Int32 strLen = inStr.getLength() - startPos; - if (nCount > strLen) - nCount = strLen; + if (nCount > strLen) + nCount = strLen; - if (nCount > 0) { - const sal_Unicode *str = inStr.getStr() + startPos; - sal_Unicode *newStr = new sal_Unicode[nCount * MultiplierExponent_7_CJK[0] + 2]; - if (useOffset) - offset.realloc( nCount * MultiplierExponent_7_CJK[0] + 1 ); - sal_Int32 count = 0, index; - sal_Int32 i; - - OUString numberChar, multiplierChar, decimalChar, minusChar, separatorChar; - numberChar = OUString((sal_Unicode*)NumberChar, 10*NumberChar_Count); - multiplierChar = OUString((sal_Unicode*) MultiplierChar_7_CJK, ExponentCount_7_CJK*Multiplier_Count); - decimalChar = OUString(DecimalChar, NumberChar_Count); - minusChar = OUString(MinusChar, NumberChar_Count); - separatorChar = OUString(SeparatorChar, NumberChar_Count); - - for ( i = 0; i < nCount; i++) { - if ((index = multiplierChar.indexOf(str[i])) >= 0) { - if (count == 0 || !isNumber(newStr[count-1])) { // add 1 in front of multiplier - newStr[count] = NUMBER_ONE; - if (useOffset) - offset[count] = i; - count++; - } - index = MultiplierExponent_7_CJK[index % ExponentCount_7_CJK]; - NativeToAscii_numberMaker( - sal::static_int_cast<sal_Int16>( index ), sal::static_int_cast<sal_Int16>( index ), - str, i, nCount, newStr, count, offset, useOffset, - numberChar, multiplierChar); - } else { - if ((index = numberChar.indexOf(str[i])) >= 0) - newStr[count] = sal::static_int_cast<sal_Unicode>( (index % 10) + NUMBER_ZERO ); - else if ((index = separatorChar.indexOf(str[i])) >= 0 && - (i < nCount-1 && (numberChar.indexOf(str[i+1]) >= 0 || - multiplierChar.indexOf(str[i+1]) >= 0))) - newStr[count] = SeparatorChar[NumberChar_HalfWidth]; - else if ((index = decimalChar.indexOf(str[i])) >= 0 && - (i < nCount-1 && (numberChar.indexOf(str[i+1]) >= 0 || - multiplierChar.indexOf(str[i+1]) >= 0))) - // Only when decimal point is followed by numbers, - // it will be convert to ASCII decimal point - newStr[count] = DecimalChar[NumberChar_HalfWidth]; - else if ((index = minusChar.indexOf(str[i])) >= 0 && - (i < nCount-1 && (numberChar.indexOf(str[i+1]) >= 0 || - multiplierChar.indexOf(str[i+1]) >= 0))) - // Only when minus is followed by numbers, - // it will be convert to ASCII minus sign - newStr[count] = MinusChar[NumberChar_HalfWidth]; - else - newStr[count] = str[i]; + if (nCount > 0) { + const sal_Unicode *str = inStr.getStr() + startPos; + sal_Unicode *newStr = new sal_Unicode[nCount * MultiplierExponent_7_CJK[0] + 2]; + if (useOffset) + offset.realloc( nCount * MultiplierExponent_7_CJK[0] + 1 ); + sal_Int32 count = 0, index; + sal_Int32 i; + + OUString numberChar, multiplierChar, decimalChar, minusChar, separatorChar; + numberChar = OUString((sal_Unicode*)NumberChar, 10*NumberChar_Count); + multiplierChar = OUString((sal_Unicode*) MultiplierChar_7_CJK, ExponentCount_7_CJK*Multiplier_Count); + decimalChar = OUString(DecimalChar, NumberChar_Count); + minusChar = OUString(MinusChar, NumberChar_Count); + separatorChar = OUString(SeparatorChar, NumberChar_Count); + + for ( i = 0; i < nCount; i++) { + if ((index = multiplierChar.indexOf(str[i])) >= 0) { + if (count == 0 || !isNumber(newStr[count-1])) { // add 1 in front of multiplier + newStr[count] = NUMBER_ONE; if (useOffset) offset[count] = i; count++; } + index = MultiplierExponent_7_CJK[index % ExponentCount_7_CJK]; + NativeToAscii_numberMaker( + sal::static_int_cast<sal_Int16>( index ), sal::static_int_cast<sal_Int16>( index ), + str, i, nCount, newStr, count, offset, useOffset, + numberChar, multiplierChar); + } else { + if ((index = numberChar.indexOf(str[i])) >= 0) + newStr[count] = sal::static_int_cast<sal_Unicode>( (index % 10) + NUMBER_ZERO ); + else if ((index = separatorChar.indexOf(str[i])) >= 0 && + (i < nCount-1 && (numberChar.indexOf(str[i+1]) >= 0 || + multiplierChar.indexOf(str[i+1]) >= 0))) + newStr[count] = SeparatorChar[NumberChar_HalfWidth]; + else if ((index = decimalChar.indexOf(str[i])) >= 0 && + (i < nCount-1 && (numberChar.indexOf(str[i+1]) >= 0 || + multiplierChar.indexOf(str[i+1]) >= 0))) + // Only when decimal point is followed by numbers, + // it will be convert to ASCII decimal point + newStr[count] = DecimalChar[NumberChar_HalfWidth]; + else if ((index = minusChar.indexOf(str[i])) >= 0 && + (i < nCount-1 && (numberChar.indexOf(str[i+1]) >= 0 || + multiplierChar.indexOf(str[i+1]) >= 0))) + // Only when minus is followed by numbers, + // it will be convert to ASCII minus sign + newStr[count] = MinusChar[NumberChar_HalfWidth]; + else + newStr[count] = str[i]; + if (useOffset) + offset[count] = i; + count++; } + } - if (useOffset) { - offset.realloc(count); - for (i = 0; i < count; i++) - offset[i] += startPos; - } - aRet = OUString(newStr, count); - delete[] newStr; + if (useOffset) { + offset.realloc(count); + for (i = 0; i < count; i++) + offset[i] += startPos; } - return aRet; + aRet = OUString(newStr, count); + delete[] newStr; + } + return aRet; } static const Number natnum4[4] = { @@ -523,79 +523,79 @@ static sal_Int16 SAL_CALL getLanguageNumber( const Locale& rLocale) OUString SAL_CALL NativeNumberSupplier::getNativeNumberString(const OUString& aNumberString, const Locale& rLocale, sal_Int16 nNativeNumberMode, Sequence< sal_Int32 >& offset) throw (RuntimeException) { - const Number *number = 0; - sal_Int16 num = -1; - - if (isValidNatNum(rLocale, nNativeNumberMode)) { - sal_Int16 langnum = getLanguageNumber(rLocale); - switch (nNativeNumberMode) { - case NativeNumberMode::NATNUM0: // Ascii - return NativeToAscii(aNumberString, 0, aNumberString.getLength(), offset, useOffset); - case NativeNumberMode::NATNUM1: // Char, Lower - num = natnum1[langnum]; + const Number *number = 0; + sal_Int16 num = -1; + + if (isValidNatNum(rLocale, nNativeNumberMode)) { + sal_Int16 langnum = getLanguageNumber(rLocale); + switch (nNativeNumberMode) { + case NativeNumberMode::NATNUM0: // Ascii + return NativeToAscii(aNumberString, 0, aNumberString.getLength(), offset, useOffset); + case NativeNumberMode::NATNUM1: // Char, Lower + num = natnum1[langnum]; break; - case NativeNumberMode::NATNUM2: // Char, Upper - num = natnum2[langnum]; + case NativeNumberMode::NATNUM2: // Char, Upper + num = natnum2[langnum]; break; - case NativeNumberMode::NATNUM3: // Char, FullWidth - num = NumberChar_FullWidth; + case NativeNumberMode::NATNUM3: // Char, FullWidth + num = NumberChar_FullWidth; break; - case NativeNumberMode::NATNUM4: // Text, Lower, Long - number = &natnum4[langnum]; + case NativeNumberMode::NATNUM4: // Text, Lower, Long + number = &natnum4[langnum]; break; - case NativeNumberMode::NATNUM5: // Text, Upper, Long - number = &natnum5[langnum]; + case NativeNumberMode::NATNUM5: // Text, Upper, Long + number = &natnum5[langnum]; break; - case NativeNumberMode::NATNUM6: // Text, FullWidth - number = &natnum6[langnum]; + case NativeNumberMode::NATNUM6: // Text, FullWidth + number = &natnum6[langnum]; break; - case NativeNumberMode::NATNUM7: // Text. Lower, Short - number = &natnum7[langnum]; + case NativeNumberMode::NATNUM7: // Text. Lower, Short + number = &natnum7[langnum]; break; - case NativeNumberMode::NATNUM8: // Text, Upper, Short - number = &natnum8[langnum]; + case NativeNumberMode::NATNUM8: // Text, Upper, Short + number = &natnum8[langnum]; break; - case NativeNumberMode::NATNUM9: // Char, Hangul - num = NumberChar_Hangul_ko; + case NativeNumberMode::NATNUM9: // Char, Hangul + num = NumberChar_Hangul_ko; break; - case NativeNumberMode::NATNUM10: // Text, Hangul, Long - number = &natnum10; + case NativeNumberMode::NATNUM10: // Text, Hangul, Long + number = &natnum10; break; - case NativeNumberMode::NATNUM11: // Text, Hangul, Short - number = &natnum11; + case NativeNumberMode::NATNUM11: // Text, Hangul, Short + number = &natnum11; break; - default: + default: break; - } } + } - if (number || num >= 0) { - if (!aLocale.Language.equals(rLocale.Language) || - !aLocale.Country.equals(rLocale.Country) || - !aLocale.Variant.equals(rLocale.Variant)) { - LocaleDataItem item = LocaleDataImpl().getLocaleItem( rLocale ); - aLocale = rLocale; - DecimalChar[NumberChar_HalfWidth]=item.decimalSeparator.toChar(); - if (DecimalChar[NumberChar_HalfWidth] > 0x7E || DecimalChar[NumberChar_HalfWidth] < 0x21) - DecimalChar[NumberChar_FullWidth]=0xFF0E; - else - DecimalChar[NumberChar_FullWidth]=DecimalChar[NumberChar_HalfWidth]+0xFEE0; - SeparatorChar[NumberChar_HalfWidth]=item.thousandSeparator.toChar(); - if (SeparatorChar[NumberChar_HalfWidth] > 0x7E || SeparatorChar[NumberChar_HalfWidth] < 0x21) - SeparatorChar[NumberChar_FullWidth]=0xFF0C; - else - SeparatorChar[NumberChar_FullWidth]=SeparatorChar[NumberChar_HalfWidth]+0xFEE0; - } - if (number) - return AsciiToNative( aNumberString, 0, aNumberString.getLength(), offset, useOffset, number ); - else if (num == NumberChar_he) - return getHebrewNativeNumberString(aNumberString, - nNativeNumberMode == NativeNumberMode::NATNUM2); + if (number || num >= 0) { + if (!aLocale.Language.equals(rLocale.Language) || + !aLocale.Country.equals(rLocale.Country) || + !aLocale.Variant.equals(rLocale.Variant)) { + LocaleDataItem item = LocaleDataImpl().getLocaleItem( rLocale ); + aLocale = rLocale; + DecimalChar[NumberChar_HalfWidth]=item.decimalSeparator.toChar(); + if (DecimalChar[NumberChar_HalfWidth] > 0x7E || DecimalChar[NumberChar_HalfWidth] < 0x21) + DecimalChar[NumberChar_FullWidth]=0xFF0E; + else + DecimalChar[NumberChar_FullWidth]=DecimalChar[NumberChar_HalfWidth]+0xFEE0; + SeparatorChar[NumberChar_HalfWidth]=item.thousandSeparator.toChar(); + if (SeparatorChar[NumberChar_HalfWidth] > 0x7E || SeparatorChar[NumberChar_HalfWidth] < 0x21) + SeparatorChar[NumberChar_FullWidth]=0xFF0C; else - return AsciiToNativeChar(aNumberString, 0, aNumberString.getLength(), offset, useOffset, num); + SeparatorChar[NumberChar_FullWidth]=SeparatorChar[NumberChar_HalfWidth]+0xFEE0; } + if (number) + return AsciiToNative( aNumberString, 0, aNumberString.getLength(), offset, useOffset, number ); + else if (num == NumberChar_he) + return getHebrewNativeNumberString(aNumberString, + nNativeNumberMode == NativeNumberMode::NATNUM2); else - return aNumberString; + return AsciiToNativeChar(aNumberString, 0, aNumberString.getLength(), offset, useOffset, num); + } + else + return aNumberString; } OUString SAL_CALL NativeNumberSupplier::getNativeNumberString(const OUString& aNumberString, const Locale& rLocale, @@ -607,181 +607,181 @@ OUString SAL_CALL NativeNumberSupplier::getNativeNumberString(const OUString& aN sal_Unicode SAL_CALL NativeNumberSupplier::getNativeNumberChar( const sal_Unicode inChar, const Locale& rLocale, sal_Int16 nNativeNumberMode ) throw(com::sun::star::uno::RuntimeException) { - if (nNativeNumberMode == NativeNumberMode::NATNUM0) { // Ascii - for (sal_Int16 i = 0; i < NumberChar_Count; i++) - for (sal_Int16 j = 0; j < 10; j++) - if (inChar == NumberChar[i][j]) - return j; - return inChar; - } - else if (isNumber(inChar) && isValidNatNum(rLocale, nNativeNumberMode)) { - sal_Int16 langnum = getLanguageNumber(rLocale); - switch (nNativeNumberMode) { - case NativeNumberMode::NATNUM1: // Char, Lower - case NativeNumberMode::NATNUM4: // Text, Lower, Long - case NativeNumberMode::NATNUM7: // Text. Lower, Short - return NumberChar[natnum1[langnum]][inChar - NUMBER_ZERO]; - case NativeNumberMode::NATNUM2: // Char, Upper - case NativeNumberMode::NATNUM5: // Text, Upper, Long - case NativeNumberMode::NATNUM8: // Text, Upper, Short - return NumberChar[natnum2[langnum]][inChar - NUMBER_ZERO]; - case NativeNumberMode::NATNUM3: // Char, FullWidth - case NativeNumberMode::NATNUM6: // Text, FullWidth - return NumberChar[NumberChar_FullWidth][inChar - NUMBER_ZERO]; - case NativeNumberMode::NATNUM9: // Char, Hangul - case NativeNumberMode::NATNUM10: // Text, Hangul, Long - case NativeNumberMode::NATNUM11: // Text, Hangul, Short - return NumberChar[NumberChar_Hangul_ko][inChar - NUMBER_ZERO]; - default: + if (nNativeNumberMode == NativeNumberMode::NATNUM0) { // Ascii + for (sal_Int16 i = 0; i < NumberChar_Count; i++) + for (sal_Int16 j = 0; j < 10; j++) + if (inChar == NumberChar[i][j]) + return j; + return inChar; + } + else if (isNumber(inChar) && isValidNatNum(rLocale, nNativeNumberMode)) { + sal_Int16 langnum = getLanguageNumber(rLocale); + switch (nNativeNumberMode) { + case NativeNumberMode::NATNUM1: // Char, Lower + case NativeNumberMode::NATNUM4: // Text, Lower, Long + case NativeNumberMode::NATNUM7: // Text. Lower, Short + return NumberChar[natnum1[langnum]][inChar - NUMBER_ZERO]; + case NativeNumberMode::NATNUM2: // Char, Upper + case NativeNumberMode::NATNUM5: // Text, Upper, Long + case NativeNumberMode::NATNUM8: // Text, Upper, Short + return NumberChar[natnum2[langnum]][inChar - NUMBER_ZERO]; + case NativeNumberMode::NATNUM3: // Char, FullWidth + case NativeNumberMode::NATNUM6: // Text, FullWidth + return NumberChar[NumberChar_FullWidth][inChar - NUMBER_ZERO]; + case NativeNumberMode::NATNUM9: // Char, Hangul + case NativeNumberMode::NATNUM10: // Text, Hangul, Long + case NativeNumberMode::NATNUM11: // Text, Hangul, Short + return NumberChar[NumberChar_Hangul_ko][inChar - NUMBER_ZERO]; + default: break; - } } - return inChar; + } + return inChar; } sal_Bool SAL_CALL NativeNumberSupplier::isValidNatNum( const Locale& rLocale, sal_Int16 nNativeNumberMode ) throw (RuntimeException) { - sal_Int16 langnum = getLanguageNumber(rLocale); - - switch (nNativeNumberMode) { - case NativeNumberMode::NATNUM0: // Ascii - case NativeNumberMode::NATNUM3: // Char, FullWidth + sal_Int16 langnum = getLanguageNumber(rLocale); + + switch (nNativeNumberMode) { + case NativeNumberMode::NATNUM0: // Ascii + case NativeNumberMode::NATNUM3: // Char, FullWidth + return sal_True; + case NativeNumberMode::NATNUM1: // Char, Lower + return (langnum >= 0); + case NativeNumberMode::NATNUM2: // Char, Upper + if (langnum == 4) // Hebrew numbering return sal_True; - case NativeNumberMode::NATNUM1: // Char, Lower - return (langnum >= 0); - case NativeNumberMode::NATNUM2: // Char, Upper - if (langnum == 4) // Hebrew numbering - return sal_True; - case NativeNumberMode::NATNUM4: // Text, Lower, Long - case NativeNumberMode::NATNUM5: // Text, Upper, Long - case NativeNumberMode::NATNUM6: // Text, FullWidth - case NativeNumberMode::NATNUM7: // Text. Lower, Short - case NativeNumberMode::NATNUM8: // Text, Upper, Short - return (langnum >= 0 && langnum < 4); // CJK numbering - case NativeNumberMode::NATNUM9: // Char, Hangul - case NativeNumberMode::NATNUM10: // Text, Hangul, Long - case NativeNumberMode::NATNUM11: // Text, Hangul, Short - return (langnum == 3); // Korean numbering - } - return sal_False; + case NativeNumberMode::NATNUM4: // Text, Lower, Long + case NativeNumberMode::NATNUM5: // Text, Upper, Long + case NativeNumberMode::NATNUM6: // Text, FullWidth + case NativeNumberMode::NATNUM7: // Text. Lower, Short + case NativeNumberMode::NATNUM8: // Text, Upper, Short + return (langnum >= 0 && langnum < 4); // CJK numbering + case NativeNumberMode::NATNUM9: // Char, Hangul + case NativeNumberMode::NATNUM10: // Text, Hangul, Long + case NativeNumberMode::NATNUM11: // Text, Hangul, Short + return (langnum == 3); // Korean numbering + } + return sal_False; } NativeNumberXmlAttributes SAL_CALL NativeNumberSupplier::convertToXmlAttributes( const Locale& rLocale, sal_Int16 nNativeNumberMode ) throw (RuntimeException) { - static const sal_Int16 attShort = 0; - static const sal_Int16 attMedium = 1; - static const sal_Int16 attLong = 2; - static const sal_Char *attType[] = { "short", "medium", "long" }; - - sal_Int16 number = NumberChar_HalfWidth, type = attShort; - - if (isValidNatNum(rLocale, nNativeNumberMode)) { - sal_Int16 langnum = getLanguageNumber(rLocale); - switch (nNativeNumberMode) { - case NativeNumberMode::NATNUM0: // Ascii - number = NumberChar_HalfWidth; - type = attShort; + static const sal_Int16 attShort = 0; + static const sal_Int16 attMedium = 1; + static const sal_Int16 attLong = 2; + static const sal_Char *attType[] = { "short", "medium", "long" }; + + sal_Int16 number = NumberChar_HalfWidth, type = attShort; + + if (isValidNatNum(rLocale, nNativeNumberMode)) { + sal_Int16 langnum = getLanguageNumber(rLocale); + switch (nNativeNumberMode) { + case NativeNumberMode::NATNUM0: // Ascii + number = NumberChar_HalfWidth; + type = attShort; break; - case NativeNumberMode::NATNUM1: // Char, Lower - number = natnum1[langnum]; - type = attShort; + case NativeNumberMode::NATNUM1: // Char, Lower + number = natnum1[langnum]; + type = attShort; break; - case NativeNumberMode::NATNUM2: // Char, Upper - number = natnum2[langnum]; - type = number == NumberChar_he ? attMedium : attShort; + case NativeNumberMode::NATNUM2: // Char, Upper + number = natnum2[langnum]; + type = number == NumberChar_he ? attMedium : attShort; break; - case NativeNumberMode::NATNUM3: // Char, FullWidth - number = NumberChar_FullWidth; - type = attShort; + case NativeNumberMode::NATNUM3: // Char, FullWidth + number = NumberChar_FullWidth; + type = attShort; break; - case NativeNumberMode::NATNUM4: // Text, Lower, Long - number = natnum1[langnum]; - type = attLong; + case NativeNumberMode::NATNUM4: // Text, Lower, Long + number = natnum1[langnum]; + type = attLong; break; - case NativeNumberMode::NATNUM5: // Text, Upper, Long - number = natnum2[langnum]; - type = attLong; + case NativeNumberMode::NATNUM5: // Text, Upper, Long + number = natnum2[langnum]; + type = attLong; break; - case NativeNumberMode::NATNUM6: // Text, FullWidth - number = NumberChar_FullWidth; - type = attLong; + case NativeNumberMode::NATNUM6: // Text, FullWidth + number = NumberChar_FullWidth; + type = attLong; break; - case NativeNumberMode::NATNUM7: // Text. Lower, Short - number = natnum1[langnum]; - type = attMedium; + case NativeNumberMode::NATNUM7: // Text. Lower, Short + number = natnum1[langnum]; + type = attMedium; break; - case NativeNumberMode::NATNUM8: // Text, Upper, Short - number = natnum2[langnum]; - type = attMedium; + case NativeNumberMode::NATNUM8: // Text, Upper, Short + number = natnum2[langnum]; + type = attMedium; break; - case NativeNumberMode::NATNUM9: // Char, Hangul - number = NumberChar_Hangul_ko; - type = attShort; + case NativeNumberMode::NATNUM9: // Char, Hangul + number = NumberChar_Hangul_ko; + type = attShort; break; - case NativeNumberMode::NATNUM10: // Text, Hangul, Long - number = NumberChar_Hangul_ko; - type = attLong; + case NativeNumberMode::NATNUM10: // Text, Hangul, Long + number = NumberChar_Hangul_ko; + type = attLong; break; - case NativeNumberMode::NATNUM11: // Text, Hangul, Short - number = NumberChar_Hangul_ko; - type = attMedium; + case NativeNumberMode::NATNUM11: // Text, Hangul, Short + number = NumberChar_Hangul_ko; + type = attMedium; break; - default: + default: break; - } } - return NativeNumberXmlAttributes(rLocale, OUString(&NumberChar[number][1], 1), - OUString::createFromAscii(attType[type])); + } + return NativeNumberXmlAttributes(rLocale, OUString(&NumberChar[number][1], 1), + OUString::createFromAscii(attType[type])); } static sal_Bool natNumIn(sal_Int16 num, const sal_Int16 natnum[], sal_Int16 len) { - for (sal_Int16 i = 0; i < len; i++) - if (natnum[i] == num) - return sal_True; - return sal_False; + for (sal_Int16 i = 0; i < len; i++) + if (natnum[i] == num) + return sal_True; + return sal_False; } sal_Int16 SAL_CALL NativeNumberSupplier::convertFromXmlAttributes( const NativeNumberXmlAttributes& aAttr ) throw (RuntimeException) { - sal_Unicode numberChar[NumberChar_Count]; - for (sal_Int16 i = 0; i < NumberChar_Count; i++) - numberChar[i] = NumberChar[i][1]; - OUString number(numberChar, NumberChar_Count); - - sal_Int16 num = sal::static_int_cast<sal_Int16>( number.indexOf(aAttr.Format) ); - - if ( aAttr.Style == "short" ) { - if (num == NumberChar_FullWidth) - return NativeNumberMode::NATNUM3; - else if (num == NumberChar_Hangul_ko) - return NativeNumberMode::NATNUM9; - else if (natNumIn(num, natnum1, sizeof_natnum1)) - return NativeNumberMode::NATNUM1; - else if (natNumIn(num, natnum2, sizeof_natnum2)) - return NativeNumberMode::NATNUM2; - } else if ( aAttr.Style == "medium" ) { - if (num == NumberChar_Hangul_ko) - return NativeNumberMode::NATNUM11; - else if (num == NumberChar_he) - return NativeNumberMode::NATNUM2; - else if (natNumIn(num, natnum1, sizeof_natnum1)) - return NativeNumberMode::NATNUM7; - else if (natNumIn(num, natnum2, sizeof_natnum2)) - return NativeNumberMode::NATNUM8; - } else if ( aAttr.Style == "long" ) { - if (num == NumberChar_FullWidth) - return NativeNumberMode::NATNUM6; - else if (num == NumberChar_Hangul_ko) - return NativeNumberMode::NATNUM10; - else if (natNumIn(num, natnum1, sizeof_natnum1)) - return NativeNumberMode::NATNUM4; - else if (natNumIn(num, natnum2, sizeof_natnum2)) - return NativeNumberMode::NATNUM5; - } else { - throw RuntimeException(); - } - return NativeNumberMode::NATNUM0; + sal_Unicode numberChar[NumberChar_Count]; + for (sal_Int16 i = 0; i < NumberChar_Count; i++) + numberChar[i] = NumberChar[i][1]; + OUString number(numberChar, NumberChar_Count); + + sal_Int16 num = sal::static_int_cast<sal_Int16>( number.indexOf(aAttr.Format) ); + + if ( aAttr.Style == "short" ) { + if (num == NumberChar_FullWidth) + return NativeNumberMode::NATNUM3; + else if (num == NumberChar_Hangul_ko) + return NativeNumberMode::NATNUM9; + else if (natNumIn(num, natnum1, sizeof_natnum1)) + return NativeNumberMode::NATNUM1; + else if (natNumIn(num, natnum2, sizeof_natnum2)) + return NativeNumberMode::NATNUM2; + } else if ( aAttr.Style == "medium" ) { + if (num == NumberChar_Hangul_ko) + return NativeNumberMode::NATNUM11; + else if (num == NumberChar_he) + return NativeNumberMode::NATNUM2; + else if (natNumIn(num, natnum1, sizeof_natnum1)) + return NativeNumberMode::NATNUM7; + else if (natNumIn(num, natnum2, sizeof_natnum2)) + return NativeNumberMode::NATNUM8; + } else if ( aAttr.Style == "long" ) { + if (num == NumberChar_FullWidth) + return NativeNumberMode::NATNUM6; + else if (num == NumberChar_Hangul_ko) + return NativeNumberMode::NATNUM10; + else if (natNumIn(num, natnum1, sizeof_natnum1)) + return NativeNumberMode::NATNUM4; + else if (natNumIn(num, natnum2, sizeof_natnum2)) + return NativeNumberMode::NATNUM5; + } else { + throw RuntimeException(); + } + return NativeNumberMode::NATNUM0; } diff --git a/i18npool/source/transliteration/hiraganaToKatakana.cxx b/i18npool/source/transliteration/hiraganaToKatakana.cxx index 119dfa3ee1a8..f9afa35fb412 100644 --- a/i18npool/source/transliteration/hiraganaToKatakana.cxx +++ b/i18npool/source/transliteration/hiraganaToKatakana.cxx @@ -32,19 +32,19 @@ namespace com { namespace sun { namespace star { namespace i18n { // see http://charts.unicode.org/Web/U3040.html Hiragana (U+3040..U+309F) // see http://charts.unicode.org/Web/U30A0.html Katakana (U+30A0..U+30FF) static sal_Unicode toKatakana (const sal_Unicode c) { - if ( (0x3041 <= c && c <= 0x3096) || (0x309d <= c && c <= 0x309f) ) { // 3040 - 309F HIRAGANA LETTER - // shift code point by 0x0060 - return c + (0x30a0 - 0x3040); - } - return c; + if ( (0x3041 <= c && c <= 0x3096) || (0x309d <= c && c <= 0x309f) ) { // 3040 - 309F HIRAGANA LETTER + // shift code point by 0x0060 + return c + (0x30a0 - 0x3040); + } + return c; } hiraganaToKatakana::hiraganaToKatakana() { - func = toKatakana; - table = 0; - transliterationName = "hiraganaToKatakana"; - implementationName = "com.sun.star.i18n.Transliteration.HIRAGANA_KATAKANA"; + func = toKatakana; + table = 0; + transliterationName = "hiraganaToKatakana"; + implementationName = "com.sun.star.i18n.Transliteration.HIRAGANA_KATAKANA"; } } } } } diff --git a/i18npool/source/transliteration/ignoreBaFa_ja_JP.cxx b/i18npool/source/transliteration/ignoreBaFa_ja_JP.cxx index 9b47ff41b3ae..076df1b61827 100644 --- a/i18npool/source/transliteration/ignoreBaFa_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreBaFa_ja_JP.cxx @@ -29,20 +29,20 @@ using namespace com::sun::star::uno; namespace com { namespace sun { namespace star { namespace i18n { static const Mapping BaFa[] = { - { 0x30F4, 0x30A1, 0x30D0, sal_True }, - { 0x3094, 0x3041, 0x3070, sal_True }, - { 0x30D5, 0x30A1, 0x30CF, sal_True }, - { 0x3075, 0x3041, 0x306F, sal_True }, - { 0, 0, 0, sal_True } + { 0x30F4, 0x30A1, 0x30D0, sal_True }, + { 0x3094, 0x3041, 0x3070, sal_True }, + { 0x30D5, 0x30A1, 0x30CF, sal_True }, + { 0x3075, 0x3041, 0x306F, sal_True }, + { 0, 0, 0, sal_True } }; ignoreBaFa_ja_JP::ignoreBaFa_ja_JP() { - func = (TransFunc) 0; - table = 0; - map = BaFa; - transliterationName = "ignoreBaFa_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreBaFa_ja_JP"; + func = (TransFunc) 0; + table = 0; + map = BaFa; + transliterationName = "ignoreBaFa_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreBaFa_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/ignoreHyuByu_ja_JP.cxx b/i18npool/source/transliteration/ignoreHyuByu_ja_JP.cxx index 9a8d747dace7..6af92f48efd2 100644 --- a/i18npool/source/transliteration/ignoreHyuByu_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreHyuByu_ja_JP.cxx @@ -30,20 +30,20 @@ using namespace com::sun::star::lang; namespace com { namespace sun { namespace star { namespace i18n { static const Mapping HyuByu[] = { - { 0x30D5, 0x30E5, 0x30D2, sal_False }, - { 0x3075, 0x3085, 0x3072, sal_False }, - { 0x30F4, 0x30E5, 0x30D3, sal_False }, - { 0x3094, 0x3085, 0x3073, sal_False }, - { 0, 0, 0, sal_False } + { 0x30D5, 0x30E5, 0x30D2, sal_False }, + { 0x3075, 0x3085, 0x3072, sal_False }, + { 0x30F4, 0x30E5, 0x30D3, sal_False }, + { 0x3094, 0x3085, 0x3073, sal_False }, + { 0, 0, 0, sal_False } }; ignoreHyuByu_ja_JP::ignoreHyuByu_ja_JP() { - func = (TransFunc) 0; - table = 0; - map = HyuByu; - transliterationName = "ignoreHyuByu_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreHyuByu_ja_JP"; + func = (TransFunc) 0; + table = 0; + map = HyuByu; + transliterationName = "ignoreHyuByu_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreHyuByu_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/ignoreMiddleDot_ja_JP.cxx b/i18npool/source/transliteration/ignoreMiddleDot_ja_JP.cxx index 2071a335a3d4..a9b5e9df9ae8 100644 --- a/i18npool/source/transliteration/ignoreMiddleDot_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreMiddleDot_ja_JP.cxx @@ -40,11 +40,11 @@ ignoreMiddleDot_ja_JP_translator (const sal_Unicode c) ignoreMiddleDot_ja_JP::ignoreMiddleDot_ja_JP() { - func = ignoreMiddleDot_ja_JP_translator; - table = 0; - map = 0; - transliterationName = "ignoreMiddleDot_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreMiddleDot_ja_JP"; + func = ignoreMiddleDot_ja_JP_translator; + table = 0; + map = 0; + transliterationName = "ignoreMiddleDot_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreMiddleDot_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/ignoreMinusSign_ja_JP.cxx b/i18npool/source/transliteration/ignoreMinusSign_ja_JP.cxx index d3af113641de..4a3d04943166 100644 --- a/i18npool/source/transliteration/ignoreMinusSign_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreMinusSign_ja_JP.cxx @@ -47,11 +47,11 @@ ignoreMinusSign_ja_JP_translator (const sal_Unicode c) ignoreMinusSign_ja_JP::ignoreMinusSign_ja_JP() { - func = ignoreMinusSign_ja_JP_translator; - table = 0; - map = 0; - transliterationName = "ignoreMinusSign_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreMinusSign_ja_JP"; + func = ignoreMinusSign_ja_JP_translator; + table = 0; + map = 0; + transliterationName = "ignoreMinusSign_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreMinusSign_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/ignoreSeZe_ja_JP.cxx b/i18npool/source/transliteration/ignoreSeZe_ja_JP.cxx index cb8124485389..eeeea2f71740 100644 --- a/i18npool/source/transliteration/ignoreSeZe_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreSeZe_ja_JP.cxx @@ -30,25 +30,25 @@ using namespace com::sun::star::lang; namespace com { namespace sun { namespace star { namespace i18n { static const Mapping SeZe[] = { - // SI + E --> SE - { 0x30B7, 0x30A7, 0x30BB, sal_True }, - // SI + E --> SE - { 0x3057, 0x3047, 0x305B, sal_True }, - // ZI + E --> ZE - { 0x30B8, 0x30A7, 0x30BC, sal_True }, - // ZI + E --> ZE - { 0x3058, 0x3047, 0x305C, sal_True }, - - { 0, 0, 0, sal_True } + // SI + E --> SE + { 0x30B7, 0x30A7, 0x30BB, sal_True }, + // SI + E --> SE + { 0x3057, 0x3047, 0x305B, sal_True }, + // ZI + E --> ZE + { 0x30B8, 0x30A7, 0x30BC, sal_True }, + // ZI + E --> ZE + { 0x3058, 0x3047, 0x305C, sal_True }, + + { 0, 0, 0, sal_True } }; ignoreSeZe_ja_JP::ignoreSeZe_ja_JP() { - func = (TransFunc) 0; - table = 0; - map = SeZe; - transliterationName = "ignoreSeZe_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreSeZe_ja_JP"; + func = (TransFunc) 0; + table = 0; + map = SeZe; + transliterationName = "ignoreSeZe_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreSeZe_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/ignoreSeparator_ja_JP.cxx b/i18npool/source/transliteration/ignoreSeparator_ja_JP.cxx index b395fbe97cdd..ade020ccfdb5 100644 --- a/i18npool/source/transliteration/ignoreSeparator_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreSeparator_ja_JP.cxx @@ -104,12 +104,12 @@ OneToOneMappingTable_t ignoreSeparatorTable[] = { ignoreSeparator_ja_JP::ignoreSeparator_ja_JP() { - static oneToOneMapping _table(ignoreSeparatorTable, sizeof(ignoreSeparatorTable)); - func = (TransFunc) 0; - table = &_table; - map = 0; - transliterationName = "ignoreSeparator_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreSeparator_ja_JP"; + static oneToOneMapping _table(ignoreSeparatorTable, sizeof(ignoreSeparatorTable)); + func = (TransFunc) 0; + table = &_table; + map = 0; + transliterationName = "ignoreSeparator_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreSeparator_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/ignoreSpace_ja_JP.cxx b/i18npool/source/transliteration/ignoreSpace_ja_JP.cxx index b4d68f8ad5d4..9f8f75d1d9a4 100644 --- a/i18npool/source/transliteration/ignoreSpace_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreSpace_ja_JP.cxx @@ -47,11 +47,11 @@ OneToOneMappingTable_t ignoreSpace_ja_JP_mappingTable[] = { ignoreSpace_ja_JP::ignoreSpace_ja_JP() { - func = (TransFunc)0; - table = new oneToOneMapping(ignoreSpace_ja_JP_mappingTable, sizeof(ignoreSpace_ja_JP_mappingTable)); - map = 0; - transliterationName = "ignoreSpace_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreSpace_ja_JP"; + func = (TransFunc)0; + table = new oneToOneMapping(ignoreSpace_ja_JP_mappingTable, sizeof(ignoreSpace_ja_JP_mappingTable)); + map = 0; + transliterationName = "ignoreSpace_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreSpace_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/ignoreTiJi_ja_JP.cxx b/i18npool/source/transliteration/ignoreTiJi_ja_JP.cxx index ed084242bff6..799b3e15634c 100644 --- a/i18npool/source/transliteration/ignoreTiJi_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreTiJi_ja_JP.cxx @@ -31,29 +31,29 @@ namespace com { namespace sun { namespace star { namespace i18n { static const Mapping TiJi[] = { - // TU + I --> TI - { 0x30C4, 0x30A3, 0x30C1, sal_True }, - // TE + I --> TI - { 0x30C6, 0x30A3, 0x30C1, sal_True }, - // TU + I --> TI - { 0x3064, 0x3043, 0x3061, sal_True }, - // TE + I --> TI - { 0x3066, 0x3043, 0x3061, sal_True }, - // DE + I --> ZI - { 0x30C7, 0x30A3, 0x30B8, sal_True }, - // DE + I --> ZI - { 0x3067, 0x3043, 0x3058, sal_True }, - - { 0, 0, 0, sal_True } + // TU + I --> TI + { 0x30C4, 0x30A3, 0x30C1, sal_True }, + // TE + I --> TI + { 0x30C6, 0x30A3, 0x30C1, sal_True }, + // TU + I --> TI + { 0x3064, 0x3043, 0x3061, sal_True }, + // TE + I --> TI + { 0x3066, 0x3043, 0x3061, sal_True }, + // DE + I --> ZI + { 0x30C7, 0x30A3, 0x30B8, sal_True }, + // DE + I --> ZI + { 0x3067, 0x3043, 0x3058, sal_True }, + + { 0, 0, 0, sal_True } }; ignoreTiJi_ja_JP::ignoreTiJi_ja_JP() { - func = (TransFunc) 0; - table = 0; - map = TiJi; - transliterationName = "ignoreTiJi_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreTiJi_ja_JP"; + func = (TransFunc) 0; + table = 0; + map = TiJi; + transliterationName = "ignoreTiJi_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreTiJi_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/ignoreTraditionalKana_ja_JP.cxx b/i18npool/source/transliteration/ignoreTraditionalKana_ja_JP.cxx index bea404c4821e..e2bc44ad9bd2 100644 --- a/i18npool/source/transliteration/ignoreTraditionalKana_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreTraditionalKana_ja_JP.cxx @@ -48,11 +48,11 @@ ignoreTraditionalKana_ja_JP_translator (const sal_Unicode c) ignoreTraditionalKana_ja_JP::ignoreTraditionalKana_ja_JP() { - func = ignoreTraditionalKana_ja_JP_translator; - table = 0; - map = 0; - transliterationName = "ignoreTraditionalKana_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreTraditionalKana_ja_JP"; + func = ignoreTraditionalKana_ja_JP_translator; + table = 0; + map = 0; + transliterationName = "ignoreTraditionalKana_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreTraditionalKana_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/ignoreTraditionalKanji_ja_JP.cxx b/i18npool/source/transliteration/ignoreTraditionalKanji_ja_JP.cxx index 85700ab5d14c..d19a1f796cfd 100644 --- a/i18npool/source/transliteration/ignoreTraditionalKanji_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreTraditionalKanji_ja_JP.cxx @@ -726,12 +726,12 @@ OneToOneMappingTable_t traditionalKanji2updateKanji[] = { ignoreTraditionalKanji_ja_JP::ignoreTraditionalKanji_ja_JP() { - static oneToOneMapping _table(traditionalKanji2updateKanji, sizeof(traditionalKanji2updateKanji)); - func = (TransFunc)0; - table = &_table; - map = 0; - transliterationName = "ignoreTraditionalKanji_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreTraditionalKanji_ja_JP"; + static oneToOneMapping _table(traditionalKanji2updateKanji, sizeof(traditionalKanji2updateKanji)); + func = (TransFunc)0; + table = &_table; + map = 0; + transliterationName = "ignoreTraditionalKanji_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreTraditionalKanji_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/ignoreZiZu_ja_JP.cxx b/i18npool/source/transliteration/ignoreZiZu_ja_JP.cxx index d39578a797fa..e9362b021b3c 100644 --- a/i18npool/source/transliteration/ignoreZiZu_ja_JP.cxx +++ b/i18npool/source/transliteration/ignoreZiZu_ja_JP.cxx @@ -48,11 +48,11 @@ ignoreZiZu_ja_JP_translator (const sal_Unicode c) ignoreZiZu_ja_JP::ignoreZiZu_ja_JP() { - func = ignoreZiZu_ja_JP_translator; - table = 0; - map = 0; - transliterationName = "ignoreZiZu_ja_JP"; - implementationName = "com.sun.star.i18n.Transliteration.ignoreZiZu_ja_JP"; + func = ignoreZiZu_ja_JP_translator; + table = 0; + map = 0; + transliterationName = "ignoreZiZu_ja_JP"; + implementationName = "com.sun.star.i18n.Transliteration.ignoreZiZu_ja_JP"; } } } } } diff --git a/i18npool/source/transliteration/transliteration_Ignore.cxx b/i18npool/source/transliteration/transliteration_Ignore.cxx index 6851b7c4599d..711571d7f10c 100644 --- a/i18npool/source/transliteration/transliteration_Ignore.cxx +++ b/i18npool/source/transliteration/transliteration_Ignore.cxx @@ -32,53 +32,53 @@ sal_Bool SAL_CALL transliteration_Ignore::equals(const OUString& str1, sal_Int32 pos1, sal_Int32 nCount1, sal_Int32& nMatch1, const OUString& str2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32& nMatch2 ) throw(RuntimeException) { - Sequence< sal_Int32 > offset1; - Sequence< sal_Int32 > offset2; + Sequence< sal_Int32 > offset1; + Sequence< sal_Int32 > offset2; - // The method folding is defined in a sub class. - OUString s1 = this->folding( str1, pos1, nCount1, offset1); - OUString s2 = this->folding( str2, pos2, nCount2, offset2); + // The method folding is defined in a sub class. + OUString s1 = this->folding( str1, pos1, nCount1, offset1); + OUString s2 = this->folding( str2, pos2, nCount2, offset2); - const sal_Unicode * p1 = s1.getStr(); - const sal_Unicode * p2 = s2.getStr(); - sal_Int32 length = Min(s1.getLength(), s2.getLength()); - sal_Int32 nmatch; + const sal_Unicode * p1 = s1.getStr(); + const sal_Unicode * p2 = s2.getStr(); + sal_Int32 length = Min(s1.getLength(), s2.getLength()); + sal_Int32 nmatch; - for ( nmatch = 0; nmatch < length; nmatch++) - if (*p1++ != *p2++) - break; + for ( nmatch = 0; nmatch < length; nmatch++) + if (*p1++ != *p2++) + break; - if (nmatch > 0) { - nMatch1 = offset1[ nmatch - 1 ] + 1; // Subtract 1 from nmatch because the index starts from zero. - nMatch2 = offset2[ nmatch - 1 ] + 1; // And then, add 1 to position because it means the number of character matched. - } - else { - nMatch1 = 0; // No character was matched. - nMatch2 = 0; - } + if (nmatch > 0) { + nMatch1 = offset1[ nmatch - 1 ] + 1; // Subtract 1 from nmatch because the index starts from zero. + nMatch2 = offset2[ nmatch - 1 ] + 1; // And then, add 1 to position because it means the number of character matched. + } + else { + nMatch1 = 0; // No character was matched. + nMatch2 = 0; + } - return (nmatch == s1.getLength()) && (nmatch == s2.getLength()); + return (nmatch == s1.getLength()) && (nmatch == s2.getLength()); } Sequence< OUString > SAL_CALL transliteration_Ignore::transliterateRange( const OUString& str1, const OUString& str2 ) throw(RuntimeException) { - if (str1.isEmpty() || str2.isEmpty()) - throw RuntimeException(); + if (str1.isEmpty() || str2.isEmpty()) + throw RuntimeException(); - Sequence< OUString > r(2); - r[0] = str1.copy(0, 1); - r[1] = str2.copy(0, 1); - return r; + Sequence< OUString > r(2); + r[0] = str1.copy(0, 1); + r[1] = str2.copy(0, 1); + return r; } sal_Int16 SAL_CALL transliteration_Ignore::getType() throw(RuntimeException) { - // The type is also defined in com/sun/star/util/TransliterationType.hdl - return TransliterationType::IGNORE; + // The type is also defined in com/sun/star/util/TransliterationType.hdl + return TransliterationType::IGNORE; } @@ -86,36 +86,36 @@ OUString SAL_CALL transliteration_Ignore::transliterate( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, Sequence< sal_Int32 >& offset ) throw(RuntimeException) { - // The method folding is defined in a sub class. - return this->folding( inStr, startPos, nCount, offset); + // The method folding is defined in a sub class. + return this->folding( inStr, startPos, nCount, offset); } Sequence< OUString > SAL_CALL transliteration_Ignore::transliterateRange( const OUString& str1, const OUString& str2, XTransliteration& t1, XTransliteration& t2 ) throw(RuntimeException) { - if (str1.isEmpty() || str2.isEmpty()) - throw RuntimeException(); - - Sequence< sal_Int32 > offset; - OUString s11 = t1.transliterate( str1, 0, 1, offset ); - OUString s12 = t1.transliterate( str2, 0, 1, offset ); - OUString s21 = t2.transliterate( str1, 0, 1, offset ); - OUString s22 = t2.transliterate( str2, 0, 1, offset ); - - if ( (s11 == s21) && (s12 == s22) ) { - Sequence< OUString > r(2); - r[0] = s11; - r[1] = s12; - return r; - } + if (str1.isEmpty() || str2.isEmpty()) + throw RuntimeException(); + + Sequence< sal_Int32 > offset; + OUString s11 = t1.transliterate( str1, 0, 1, offset ); + OUString s12 = t1.transliterate( str2, 0, 1, offset ); + OUString s21 = t2.transliterate( str1, 0, 1, offset ); + OUString s22 = t2.transliterate( str2, 0, 1, offset ); - Sequence< OUString > r(4); + if ( (s11 == s21) && (s12 == s22) ) { + Sequence< OUString > r(2); r[0] = s11; r[1] = s12; - r[2] = s21; - r[3] = s22; return r; + } + + Sequence< OUString > r(4); + r[0] = s11; + r[1] = s12; + r[2] = s21; + r[3] = s22; + return r; } OUString SAL_CALL diff --git a/i18npool/source/transliteration/transliteration_Numeric.cxx b/i18npool/source/transliteration/transliteration_Numeric.cxx index 8f09c261a4a6..8129e62452f3 100644 --- a/i18npool/source/transliteration/transliteration_Numeric.cxx +++ b/i18npool/source/transliteration/transliteration_Numeric.cxx @@ -30,28 +30,28 @@ namespace com { namespace sun { namespace star { namespace i18n { sal_Int16 SAL_CALL transliteration_Numeric::getType() throw(RuntimeException) { - return TransliterationType::NUMERIC; + return TransliterationType::NUMERIC; } OUString SAL_CALL -transliteration_Numeric::folding( const OUString& /*inStr*/, sal_Int32 /*startPos*/, sal_Int32 /*nCount*/, Sequence< sal_Int32 >& /*offset*/ ) - throw(RuntimeException) + transliteration_Numeric::folding( const OUString& /*inStr*/, sal_Int32 /*startPos*/, sal_Int32 /*nCount*/, Sequence< sal_Int32 >& /*offset*/ ) +throw(RuntimeException) { - throw RuntimeException(); + throw RuntimeException(); } sal_Bool SAL_CALL -transliteration_Numeric::equals( const OUString& /*str1*/, sal_Int32 /*pos1*/, sal_Int32 /*nCount1*/, sal_Int32& /*nMatch1*/, const OUString& /*str2*/, sal_Int32 /*pos2*/, sal_Int32 /*nCount2*/, sal_Int32& /*nMatch2*/ ) - throw(RuntimeException) + transliteration_Numeric::equals( const OUString& /*str1*/, sal_Int32 /*pos1*/, sal_Int32 /*nCount1*/, sal_Int32& /*nMatch1*/, const OUString& /*str2*/, sal_Int32 /*pos2*/, sal_Int32 /*nCount2*/, sal_Int32& /*nMatch2*/ ) +throw(RuntimeException) { - throw RuntimeException(); + throw RuntimeException(); } Sequence< OUString > SAL_CALL -transliteration_Numeric::transliterateRange( const OUString& /*str1*/, const OUString& /*str2*/ ) - throw(RuntimeException) + transliteration_Numeric::transliterateRange( const OUString& /*str1*/, const OUString& /*str2*/ ) +throw(RuntimeException) { - throw RuntimeException(); + throw RuntimeException(); } @@ -62,79 +62,79 @@ OUString SAL_CALL transliteration_Numeric::transliterateBullet( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, Sequence< sal_Int32 >& offset ) throw(RuntimeException) { - sal_Int32 number = -1, j = 0, endPos = startPos + nCount; + sal_Int32 number = -1, j = 0, endPos = startPos + nCount; - if (endPos > inStr.getLength()) - endPos = inStr.getLength(); + if (endPos > inStr.getLength()) + endPos = inStr.getLength(); - rtl_uString* pStr = rtl_uString_alloc(nCount); - sal_Unicode* out = pStr->buffer; + rtl_uString* pStr = rtl_uString_alloc(nCount); + sal_Unicode* out = pStr->buffer; - if (useOffset) - offset.realloc(nCount); + if (useOffset) + offset.realloc(nCount); - for (sal_Int32 i = startPos; i < endPos; i++) { - if (i < endPos && isNumber(inStr[i])) { - if (number == -1) { - startPos = i; - number = (inStr[i] - NUMBER_ZERO); - } else { - number = number * 10 + (inStr[i] - NUMBER_ZERO); - } - } else { - if (number == 0) { - if (useOffset) - offset[j] = startPos; - out[j++] = NUMBER_ZERO; - } if (number > tableSize && !recycleSymbol) { - for (sal_Int32 k = startPos; k < i; k++) { - if (useOffset) - offset[j] = k; - out[j++] = inStr[k]; - } - } else if (number > 0) { - if (useOffset) - offset[j] = startPos; - out[j++] = table[--number % tableSize]; - } else if (i < endPos) { + for (sal_Int32 i = startPos; i < endPos; i++) { + if (i < endPos && isNumber(inStr[i])) { + if (number == -1) { + startPos = i; + number = (inStr[i] - NUMBER_ZERO); + } else { + number = number * 10 + (inStr[i] - NUMBER_ZERO); + } + } else { + if (number == 0) { + if (useOffset) + offset[j] = startPos; + out[j++] = NUMBER_ZERO; + } if (number > tableSize && !recycleSymbol) { + for (sal_Int32 k = startPos; k < i; k++) { if (useOffset) - offset[j] = i; - out[j++] = inStr[i]; + offset[j] = k; + out[j++] = inStr[k]; } - number = -1; + } else if (number > 0) { + if (useOffset) + offset[j] = startPos; + out[j++] = table[--number % tableSize]; + } else if (i < endPos) { + if (useOffset) + offset[j] = i; + out[j++] = inStr[i]; } + number = -1; } - out[j] = 0; + } + out[j] = 0; - if (useOffset) - offset.realloc(j); + if (useOffset) + offset.realloc(j); - return OUString( pStr, SAL_NO_ACQUIRE ); + return OUString( pStr, SAL_NO_ACQUIRE ); } OUString SAL_CALL transliteration_Numeric::transliterate( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, Sequence< sal_Int32 >& offset ) throw(RuntimeException) { - if (tableSize) - return transliterateBullet( inStr, startPos, nCount, offset); - else - return NativeNumberSupplier(useOffset).getNativeNumberString( inStr.copy(startPos, nCount), aLocale, nNativeNumberMode, offset ); + if (tableSize) + return transliterateBullet( inStr, startPos, nCount, offset); + else + return NativeNumberSupplier(useOffset).getNativeNumberString( inStr.copy(startPos, nCount), aLocale, nNativeNumberMode, offset ); } sal_Unicode SAL_CALL transliteration_Numeric::transliterateChar2Char( sal_Unicode inChar ) throw(RuntimeException, MultipleCharsOutputException) { - if (tableSize) { - if (isNumber(inChar)) { - sal_Int16 number = inChar - NUMBER_ZERO; - if (number <= tableSize || recycleSymbol) - return table[--number % tableSize]; - } - return inChar; + if (tableSize) { + if (isNumber(inChar)) { + sal_Int16 number = inChar - NUMBER_ZERO; + if (number <= tableSize || recycleSymbol) + return table[--number % tableSize]; } - else - return NativeNumberSupplier().getNativeNumberChar( inChar, aLocale, nNativeNumberMode ); + return inChar; + } + else + return NativeNumberSupplier().getNativeNumberChar( inChar, aLocale, nNativeNumberMode ); } } } } } diff --git a/i18npool/source/transliteration/transliteration_body.cxx b/i18npool/source/transliteration/transliteration_body.cxx index 1c3e4d8ea063..28e440927cf4 100644 --- a/i18npool/source/transliteration/transliteration_body.cxx +++ b/i18npool/source/transliteration/transliteration_body.cxx @@ -183,25 +183,25 @@ Transliteration_body::transliterate( OUString SAL_CALL Transliteration_body::transliterateChar2String( sal_Unicode inChar ) throw(RuntimeException) { - const Mapping &map = casefolding::getValue(&inChar, 0, 1, aLocale, nMappingType); - rtl_uString* pStr = rtl_uString_alloc(map.nmap); - sal_Unicode* out = pStr->buffer; - sal_Int32 i; + const Mapping &map = casefolding::getValue(&inChar, 0, 1, aLocale, nMappingType); + rtl_uString* pStr = rtl_uString_alloc(map.nmap); + sal_Unicode* out = pStr->buffer; + sal_Int32 i; - for (i = 0; i < map.nmap; i++) - out[i] = map.map[i]; - out[i] = 0; + for (i = 0; i < map.nmap; i++) + out[i] = map.map[i]; + out[i] = 0; - return OUString( pStr, SAL_NO_ACQUIRE ); + return OUString( pStr, SAL_NO_ACQUIRE ); } sal_Unicode SAL_CALL Transliteration_body::transliterateChar2Char( sal_Unicode inChar ) throw(MultipleCharsOutputException, RuntimeException) { - const Mapping &map = casefolding::getValue(&inChar, 0, 1, aLocale, nMappingType); - if (map.nmap > 1) - throw MultipleCharsOutputException(); - return map.map[0]; + const Mapping &map = casefolding::getValue(&inChar, 0, 1, aLocale, nMappingType); + if (map.nmap > 1) + throw MultipleCharsOutputException(); + return map.map[0]; } OUString SAL_CALL diff --git a/i18npool/source/transliteration/transliteration_commonclass.cxx b/i18npool/source/transliteration/transliteration_commonclass.cxx index 3732626adf6c..8e5853c7e31a 100644 --- a/i18npool/source/transliteration/transliteration_commonclass.cxx +++ b/i18npool/source/transliteration/transliteration_commonclass.cxx @@ -29,91 +29,91 @@ namespace com { namespace sun { namespace star { namespace i18n { transliteration_commonclass::transliteration_commonclass() { - transliterationName = ""; - implementationName = ""; - useOffset = sal_True; + transliterationName = ""; + implementationName = ""; + useOffset = sal_True; } OUString SAL_CALL transliteration_commonclass::getName() throw(RuntimeException) { - return OUString::createFromAscii(transliterationName); + return OUString::createFromAscii(transliterationName); } void SAL_CALL transliteration_commonclass::loadModule( TransliterationModules /*modName*/, const Locale& rLocale ) - throw(RuntimeException) +throw(RuntimeException) { - aLocale = rLocale; + aLocale = rLocale; } void SAL_CALL transliteration_commonclass::loadModuleNew( const Sequence < TransliterationModulesNew >& /*modName*/, const Locale& /*rLocale*/ ) - throw(RuntimeException) +throw(RuntimeException) { - throw RuntimeException(); + throw RuntimeException(); } void SAL_CALL transliteration_commonclass::loadModuleByImplName( const OUString& /*implName*/, const Locale& /*rLocale*/ ) - throw(RuntimeException) +throw(RuntimeException) { - throw RuntimeException(); + throw RuntimeException(); } void SAL_CALL transliteration_commonclass::loadModulesByImplNames(const Sequence< OUString >& /*modNamelist*/, const Locale& /*rLocale*/) - throw(RuntimeException) +throw(RuntimeException) { - throw RuntimeException(); + throw RuntimeException(); } Sequence< OUString > SAL_CALL transliteration_commonclass::getAvailableModules( const Locale& /*rLocale*/, sal_Int16 /*sType*/ ) - throw(RuntimeException) +throw(RuntimeException) { - throw RuntimeException(); + throw RuntimeException(); } sal_Int32 SAL_CALL transliteration_commonclass::compareSubstring( const OUString& str1, sal_Int32 off1, sal_Int32 len1, const OUString& str2, sal_Int32 off2, sal_Int32 len2) - throw(RuntimeException) +throw(RuntimeException) { - const sal_Unicode* unistr1 = NULL; - const sal_Unicode* unistr2 = NULL; - sal_uInt32 strlen1; - sal_uInt32 strlen2; - - Sequence <sal_Int32> offset1(2*len1); - Sequence <sal_Int32> offset2(2*len2); - - OUString in_str1 = this->transliterate(str1, off1, len1, offset1); - OUString in_str2 = this->transliterate(str2, off2, len2, offset2); - strlen1 = in_str1.getLength(); - strlen2 = in_str2.getLength(); - unistr1 = in_str1.getStr(); - unistr2 = in_str2.getStr(); - - while (strlen1 && strlen2) - { - sal_uInt32 ret = *unistr1 - *unistr2; - if (ret) - return ret; - - unistr1++; - unistr2++; - strlen1--; - strlen2--; - } - return strlen1 - strlen2; + const sal_Unicode* unistr1 = NULL; + const sal_Unicode* unistr2 = NULL; + sal_uInt32 strlen1; + sal_uInt32 strlen2; + + Sequence <sal_Int32> offset1(2*len1); + Sequence <sal_Int32> offset2(2*len2); + + OUString in_str1 = this->transliterate(str1, off1, len1, offset1); + OUString in_str2 = this->transliterate(str2, off2, len2, offset2); + strlen1 = in_str1.getLength(); + strlen2 = in_str2.getLength(); + unistr1 = in_str1.getStr(); + unistr2 = in_str2.getStr(); + + while (strlen1 && strlen2) + { + sal_uInt32 ret = *unistr1 - *unistr2; + if (ret) + return ret; + + unistr1++; + unistr2++; + strlen1--; + strlen2--; + } + return strlen1 - strlen2; } sal_Int32 SAL_CALL transliteration_commonclass::compareString( const OUString& str1, const OUString& str2 ) throw ( RuntimeException) { - return( this->compareSubstring(str1, 0, str1.getLength(), str2, 0, str2.getLength())); + return( this->compareSubstring(str1, 0, str1.getLength(), str2, 0, str2.getLength())); } OUString SAL_CALL @@ -141,14 +141,14 @@ const sal_Char cTrans[] = "com.sun.star.i18n.Transliteration.l10n"; sal_Bool SAL_CALL transliteration_commonclass::supportsService(const OUString& rServiceName) throw( RuntimeException ) { - return rServiceName.equalsAscii(cTrans); + return rServiceName.equalsAscii(cTrans); } Sequence< OUString > SAL_CALL transliteration_commonclass::getSupportedServiceNames() throw( RuntimeException ) { - Sequence< OUString > aRet(1); - aRet[0] = OUString::createFromAscii(cTrans); - return aRet; + Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii(cTrans); + return aRet; } } } } } |