sw34bf04: #i46648#: define class for NfKeywordTable

* * *
#i46648#: Use specific NfKeywordTabl
This commit is contained in:
Henning Brinkmann 2011-03-09 12:43:03 +01:00
parent ce5f1dd187
commit 6201194c7c
5 changed files with 42 additions and 30 deletions

View file

@ -28,6 +28,7 @@
#ifndef INCLUDED_SVTOOLS_NFKEYTAB_HXX
#define INCLUDED_SVTOOLS_NFKEYTAB_HXX
#include <vector>
#include <tools/string.hxx>
//! For ImpSvNumberformatScan: first the short symbols, then the long symbols!
@ -111,7 +112,18 @@ enum NfKeywordIndex
NF_KEYWORD_ENTRIES_COUNT
};
typedef String NfKeywordTable [NF_KEYWORD_ENTRIES_COUNT];
class NfKeywordTable
{
typedef ::std::vector<String> Keywords_t;
Keywords_t m_keywords;
public:
NfKeywordTable() : m_keywords(NF_KEYWORD_ENTRIES_COUNT) {};
virtual ~NfKeywordTable() {}
String & operator[] (Keywords_t::size_type n) { return m_keywords[n]; }
const String & operator[] (Keywords_t::size_type n) const { return m_keywords[n]; }
};
#endif // INCLUDED_SVTOOLS_NFKEYTAB_HXX

View file

@ -939,10 +939,10 @@ void SvNumberFormatter::FillKeywordTable( NfKeywordTable& rKeywords,
LanguageType eLang )
{
ChangeIntl( eLang );
const String* pTable = pFormatScanner->GetKeywords();
const NfKeywordTable & rTable = pFormatScanner->GetKeywords();
for ( sal_uInt16 i = 0; i < NF_KEYWORD_ENTRIES_COUNT; ++i )
{
rKeywords[i] = pTable[i];
rKeywords[i] = rTable[i];
}
}
@ -950,9 +950,9 @@ void SvNumberFormatter::FillKeywordTable( NfKeywordTable& rKeywords,
String SvNumberFormatter::GetKeyword( LanguageType eLnge, sal_uInt16 nIndex )
{
ChangeIntl(eLnge);
const String* pTable = pFormatScanner->GetKeywords();
if ( pTable && nIndex < NF_KEYWORD_ENTRIES_COUNT )
return pTable[nIndex];
const NfKeywordTable & rTable = pFormatScanner->GetKeywords();
if ( nIndex < NF_KEYWORD_ENTRIES_COUNT )
return rTable[nIndex];
DBG_ERROR("GetKeyword: invalid index");
return String();
@ -2589,8 +2589,8 @@ void SvNumberFormatter::ImpGenerateFormats( sal_uInt32 CLOffset, sal_Bool bLoadi
CLOffset + SetIndexTable( NF_FRACTION_2, ZF_STANDARD_FRACTION+1 ));
// Week of year must be appended here because of nNewExtended
const String* pKeyword = pFormatScanner->GetKeywords();
aSingleFormatCode.Code = pKeyword[NF_KEY_WW];
const NfKeywordTable & rKeyword = pFormatScanner->GetKeywords();
aSingleFormatCode.Code = rKeyword[NF_KEY_WW];
ImpInsertNewStandardFormat( aSingleFormatCode,
CLOffset + SetIndexTable( NF_DATE_WW, nNewExtended++ ),
SV_NUMBERFORMATTER_VERSION_NF_DATE_WW );

View file

@ -1149,7 +1149,7 @@ short SvNumberformat::ImpNextSymbol(String& rString,
xub_StrLen nLen = rString.Len();
ScanState eState = SsStart;
sSymbol.Erase();
const String* pKeywords = rScan.GetKeywords();
const NfKeywordTable & rKeywords = rScan.GetKeywords();
while (nPos < nLen && eState != SsStop)
{
cToken = rString.GetChar(nPos);
@ -1267,9 +1267,9 @@ short SvNumberformat::ImpNextSymbol(String& rString,
BRACKET_SYMBOLTYPE_DBNUM1 - (cDBNum - '1'));
eState = SsGetPrefix;
}
else if (cUpper == pKeywords[NF_KEY_H].GetChar(0) || // H
cUpper == pKeywords[NF_KEY_MI].GetChar(0) || // M
cUpper == pKeywords[NF_KEY_S].GetChar(0) ) // S
else if (cUpper == rKeywords[NF_KEY_H].GetChar(0) || // H
cUpper == rKeywords[NF_KEY_MI].GetChar(0) || // M
cUpper == rKeywords[NF_KEY_S].GetChar(0) ) // S
{
sSymbol += cToken;
eState = SsGetTime;
@ -1306,9 +1306,9 @@ short SvNumberformat::ImpNextSymbol(String& rString,
else
{
sal_Unicode cUpper = rChrCls().toUpper( rString, nPos-1, 1 ).GetChar(0);
if (cUpper == pKeywords[NF_KEY_H].GetChar(0) || // H
cUpper == pKeywords[NF_KEY_MI].GetChar(0) || // M
cUpper == pKeywords[NF_KEY_S].GetChar(0) ) // S
if (cUpper == rKeywords[NF_KEY_H].GetChar(0) || // H
cUpper == rKeywords[NF_KEY_MI].GetChar(0) || // M
cUpper == rKeywords[NF_KEY_S].GetChar(0) ) // S
{
if (cLetter == cToken)
{
@ -4230,10 +4230,10 @@ String SvNumberformat::GetMappedFormatstring(
const String& rColorName = NumFor[n].GetColorName();
if ( rColorName.Len() )
{
const String* pKey = rScan.GetKeywords() + NF_KEY_FIRSTCOLOR;
for ( int j=NF_KEY_FIRSTCOLOR; j<=NF_KEY_LASTCOLOR; j++, pKey++ )
const NfKeywordTable & rKey = rScan.GetKeywords();
for ( int j=NF_KEY_FIRSTCOLOR; j<=NF_KEY_LASTCOLOR; j++ )
{
if ( *pKey == rColorName )
if ( rKey[j] == rColorName )
{
aPrefix += '[';
aPrefix += rKeywords[j];

View file

@ -473,10 +473,10 @@ void ImpSvNumberformatScan::ChangeStandardPrec(sal_uInt16 nPrec)
Color* ImpSvNumberformatScan::GetColor(String& sStr)
{
String sString = pFormatter->GetCharClass()->upper(sStr);
const String* pKeyword = GetKeywords();
const NfKeywordTable & rKeyword = GetKeywords();
size_t i = 0;
while (i < NF_MAX_DEFAULT_COLORS &&
sString != pKeyword[NF_KEY_FIRSTCOLOR+i] )
sString != rKeyword[NF_KEY_FIRSTCOLOR+i] )
i++;
if ( i >= NF_MAX_DEFAULT_COLORS )
{
@ -492,7 +492,7 @@ Color* ImpSvNumberformatScan::GetColor(String& sStr)
Color* pResult = NULL;
if (i >= NF_MAX_DEFAULT_COLORS)
{
const String& rColorWord = pKeyword[NF_KEY_COLOR];
const String& rColorWord = rKeyword[NF_KEY_COLOR];
xub_StrLen nPos = sString.Match(rColorWord);
if (nPos > 0)
{
@ -529,7 +529,7 @@ Color* ImpSvNumberformatScan::GetColor(String& sStr)
pFormatter->ChangeIntl(eTmpLnge);
}
else
sStr = pKeyword[NF_KEY_FIRSTCOLOR+i];
sStr = rKeyword[NF_KEY_FIRSTCOLOR+i];
pResult = &(StandardColor[i]);
}
@ -540,16 +540,16 @@ Color* ImpSvNumberformatScan::GetColor(String& sStr)
short ImpSvNumberformatScan::GetKeyWord( const String& sSymbol, xub_StrLen nPos )
{
String sString = pFormatter->GetCharClass()->toUpper( sSymbol, nPos, sSymbol.Len() - nPos );
const String* pKeyword = GetKeywords();
const NfKeywordTable & rKeyword = GetKeywords();
// #77026# for the Xcl perverts: the GENERAL keyword is recognized anywhere
if ( sString.Search( pKeyword[NF_KEY_GENERAL] ) == 0 )
if ( sString.Search( rKeyword[NF_KEY_GENERAL] ) == 0 )
return NF_KEY_GENERAL;
//! MUST be a reverse search to find longer strings first
short i = NF_KEYWORD_ENTRIES_COUNT-1;
sal_Bool bFound = sal_False;
for ( ; i > NF_KEY_LASTKEYWORD_SO5; --i )
{
bFound = sString.Search(pKeyword[i]) == 0;
bFound = sString.Search(rKeyword[i]) == 0;
if ( bFound )
{
break;
@ -559,15 +559,15 @@ short ImpSvNumberformatScan::GetKeyWord( const String& sSymbol, xub_StrLen nPos
if ( !bFound )
{ // skip the gap of colors et al between new and old keywords and search on
i = NF_KEY_LASTKEYWORD;
while ( i > 0 && sString.Search(pKeyword[i]) != 0 )
while ( i > 0 && sString.Search(rKeyword[i]) != 0 )
i--;
if ( i > NF_KEY_LASTOLDKEYWORD && sString != pKeyword[i] )
if ( i > NF_KEY_LASTOLDKEYWORD && sString != rKeyword[i] )
{ // found something, but maybe it's something else?
// e.g. new NNN is found in NNNN, for NNNN we must search on
short j = i - 1;
while ( j > 0 && sString.Search(pKeyword[j]) != 0 )
while ( j > 0 && sString.Search(rKeyword[j]) != 0 )
j--;
if ( j && pKeyword[j].Len() > pKeyword[i].Len() )
if ( j && rKeyword[j].Len() > rKeyword[i].Len() )
return j;
}
}

View file

@ -66,7 +66,7 @@ public:
const LocaleDataWrapper& GetLoc() const { return *pFormatter->GetLocaleData(); }
CalendarWrapper& GetCal() const { return *pFormatter->GetCalendar(); }
const String* GetKeywords() const
const NfKeywordTable & GetKeywords() const
{
if ( bKeywordsNeedInit )
InitKeywords();