sw34bf04: #i46648#: define class for NfKeywordTable
* * * #i46648#: Use specific NfKeywordTabl
This commit is contained in:
parent
ce5f1dd187
commit
6201194c7c
5 changed files with 42 additions and 30 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue