INTEGRATION: CWS jl5vba (1.8.94); FILE MERGED

2004/01/21 09:03:01 ab 1.8.94.1: #111934# Merge to src680, for tasks see message INTEGRATION: CWS ab02vba (1.8.6)
This commit is contained in:
Oliver Bolte
2004-03-17 12:33:38 +00:00
parent cc83b70dbc
commit 82bd05da2a

View File

@@ -2,9 +2,9 @@
* *
* $RCSfile: scanner.cxx,v $ * $RCSfile: scanner.cxx,v $
* *
* $Revision: 1.8 $ * $Revision: 1.9 $
* *
* last change: $Author: rt $ $Date: 2003-04-23 16:57:09 $ * last change: $Author: obo $ $Date: 2004-03-17 13:33:38 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
@@ -95,7 +95,8 @@ SbiScanner::SbiScanner( const ::rtl::OUString& rBuf, StarBASIC* p ) : aBuf( rBuf
bSpaces = bSpaces =
bNumber = bNumber =
bSymbol = bSymbol =
bUsedForHilite = FALSE; bUsedForHilite =
bCompatible = FALSE;
bHash = bHash =
bErrors = TRUE; bErrors = TRUE;
} }
@@ -230,7 +231,7 @@ BOOL SbiScanner::NextSym()
if( *pLine == '#' ) pLine++, nCol++, bHash = TRUE; if( *pLine == '#' ) pLine++, nCol++, bHash = TRUE;
// Symbol? Dann Zeichen kopieren. // Symbol? Dann Zeichen kopieren.
if( BasicSimpleCharClass::isAlpha( *pLine & 0xFF ) || *pLine == '_' ) if( BasicSimpleCharClass::isAlpha( *pLine & 0xFF, bCompatible ) || *pLine == '_' )
{ {
// Wenn nach '_' nichts kommt, ist es ein Zeilenabschluss! // Wenn nach '_' nichts kommt, ist es ein Zeilenabschluss!
if( *pLine == '_' && !*(pLine+1) ) if( *pLine == '_' && !*(pLine+1) )
@@ -238,7 +239,7 @@ BOOL SbiScanner::NextSym()
goto eoln; } goto eoln; }
bSymbol = TRUE; bSymbol = TRUE;
short n = nCol; short n = nCol;
for ( ; (BasicSimpleCharClass::isAlphaNumeric( *pLine & 0xFF ) || ( *pLine == '_' ) ); pLine++ ) for ( ; (BasicSimpleCharClass::isAlphaNumeric( *pLine & 0xFF, bCompatible ) || ( *pLine == '_' ) ); pLine++ )
nCol++; nCol++;
aSym = aLine.copy( n, nCol - n ); aSym = aLine.copy( n, nCol - n );
// Abschliessendes '_' durch Space ersetzen, wenn Zeilenende folgt // Abschliessendes '_' durch Space ersetzen, wenn Zeilenende folgt
@@ -248,7 +249,7 @@ BOOL SbiScanner::NextSym()
// Typkennung? // Typkennung?
// Das Ausrufezeichen bitte nicht testen, wenn // Das Ausrufezeichen bitte nicht testen, wenn
// danach noch ein Symbol anschliesst // danach noch ein Symbol anschliesst
else if( *pLine != '!' || !BasicSimpleCharClass::isAlpha( pLine[ 1 ] & 0xFF ) ) else if( *pLine != '!' || !BasicSimpleCharClass::isAlpha( pLine[ 1 ] & 0xFF, bCompatible ) )
{ {
SbxDataType t = GetSuffixType( *pLine ); SbxDataType t = GetSuffixType( *pLine );
if( t != SbxVARIANT ) if( t != SbxVARIANT )
@@ -376,7 +377,7 @@ BOOL SbiScanner::NextSym()
long l = 0; long l = 0;
int i; int i;
BOOL bBufOverflow = FALSE; BOOL bBufOverflow = FALSE;
while( BasicSimpleCharClass::isAlphaNumeric( *pLine & 0xFF ) ) while( BasicSimpleCharClass::isAlphaNumeric( *pLine & 0xFF, bCompatible ) )
{ {
sal_Unicode ch = toupper( *pLine & 0xFF ); sal_Unicode ch = toupper( *pLine & 0xFF );
pLine++; nCol++; pLine++; nCol++;
@@ -431,11 +432,16 @@ BOOL SbiScanner::NextSym()
// Doppelte Stringbegrenzer raus // Doppelte Stringbegrenzer raus
String s( cSep ); String s( cSep );
s += cSep; s += cSep;
USHORT nIdx; USHORT nIdx = 0;
do { do
nIdx = aSym.Search( s ); {
nIdx = aSym.Search( s, nIdx );
if( nIdx == STRING_NOTFOUND )
break;
aSym.Erase( nIdx, 1 ); aSym.Erase( nIdx, 1 );
} while( nIdx != STRING_NOTFOUND ); nIdx++;
}
while( true );
if( cSep != ']' ) if( cSep != ']' )
eScanType = ( cSep == '#' ) ? SbxDATE : SbxSTRING; eScanType = ( cSep == '#' ) ? SbxDATE : SbxSTRING;
} }
@@ -489,3 +495,73 @@ eoln:
} }
} }
IsoLatinLetterTable BasicSimpleCharClass::aLetterTable;
IsoLatinLetterTable::IsoLatinLetterTable( void )
{
for( int i = 0 ; i < 256 ; ++i )
IsLetterTab[i] = false;
IsLetterTab[0xC0] = true; // <20> , CAPITAL LETTER A WITH GRAVE ACCENT
IsLetterTab[0xC1] = true; // <20> , CAPITAL LETTER A WITH ACUTE ACCENT
IsLetterTab[0xC2] = true; // <20> , CAPITAL LETTER A WITH CIRCUMFLEX ACCENT
IsLetterTab[0xC3] = true; // <20> , CAPITAL LETTER A WITH TILDE
IsLetterTab[0xC4] = true; // <20> , CAPITAL LETTER A WITH DIAERESIS
IsLetterTab[0xC5] = true; // <20> , CAPITAL LETTER A WITH RING ABOVE
IsLetterTab[0xC6] = true; // <20> , CAPITAL LIGATURE AE
IsLetterTab[0xC7] = true; // <20> , CAPITAL LETTER C WITH CEDILLA
IsLetterTab[0xC8] = true; // <20> , CAPITAL LETTER E WITH GRAVE ACCENT
IsLetterTab[0xC9] = true; // <20> , CAPITAL LETTER E WITH ACUTE ACCENT
IsLetterTab[0xCA] = true; // <20> , CAPITAL LETTER E WITH CIRCUMFLEX ACCENT
IsLetterTab[0xCB] = true; // <20> , CAPITAL LETTER E WITH DIAERESIS
IsLetterTab[0xCC] = true; // <20> , CAPITAL LETTER I WITH GRAVE ACCENT
IsLetterTab[0xCD] = true; // <20> , CAPITAL LETTER I WITH ACUTE ACCENT
IsLetterTab[0xCE] = true; // <20> , CAPITAL LETTER I WITH CIRCUMFLEX ACCENT
IsLetterTab[0xCF] = true; // <20> , CAPITAL LETTER I WITH DIAERESIS
IsLetterTab[0xD0] = true; // <20> , CAPITAL LETTER ETH
IsLetterTab[0xD1] = true; // <20> , CAPITAL LETTER N WITH TILDE
IsLetterTab[0xD2] = true; // <20> , CAPITAL LETTER O WITH GRAVE ACCENT
IsLetterTab[0xD3] = true; // <20> , CAPITAL LETTER O WITH ACUTE ACCENT
IsLetterTab[0xD4] = true; // <20> , CAPITAL LETTER O WITH CIRCUMFLEX ACCENT
IsLetterTab[0xD5] = true; // <20> , CAPITAL LETTER O WITH TILDE
IsLetterTab[0xD6] = true; // <20> , CAPITAL LETTER O WITH DIAERESIS
IsLetterTab[0xD8] = true; // <20> , CAPITAL LETTER O WITH STROKE
IsLetterTab[0xD9] = true; // <20> , CAPITAL LETTER U WITH GRAVE ACCENT
IsLetterTab[0xDA] = true; // <20> , CAPITAL LETTER U WITH ACUTE ACCENT
IsLetterTab[0xDB] = true; // <20> , CAPITAL LETTER U WITH CIRCUMFLEX ACCENT
IsLetterTab[0xDC] = true; // <20> , CAPITAL LETTER U WITH DIAERESIS
IsLetterTab[0xDD] = true; // <20> , CAPITAL LETTER Y WITH ACUTE ACCENT
IsLetterTab[0xDE] = true; // <20> , CAPITAL LETTER THORN
IsLetterTab[0xDF] = true; // <20> , SMALL LETTER SHARP S
IsLetterTab[0xE0] = true; // <20> , SMALL LETTER A WITH GRAVE ACCENT
IsLetterTab[0xE1] = true; // <20> , SMALL LETTER A WITH ACUTE ACCENT
IsLetterTab[0xE2] = true; // <20> , SMALL LETTER A WITH CIRCUMFLEX ACCENT
IsLetterTab[0xE3] = true; // <20> , SMALL LETTER A WITH TILDE
IsLetterTab[0xE4] = true; // <20> , SMALL LETTER A WITH DIAERESIS
IsLetterTab[0xE5] = true; // <20> , SMALL LETTER A WITH RING ABOVE
IsLetterTab[0xE6] = true; // <20> , SMALL LIGATURE AE
IsLetterTab[0xE7] = true; // <20> , SMALL LETTER C WITH CEDILLA
IsLetterTab[0xE8] = true; // <20> , SMALL LETTER E WITH GRAVE ACCENT
IsLetterTab[0xE9] = true; // <20> , SMALL LETTER E WITH ACUTE ACCENT
IsLetterTab[0xEA] = true; // <20> , SMALL LETTER E WITH CIRCUMFLEX ACCENT
IsLetterTab[0xEB] = true; // <20> , SMALL LETTER E WITH DIAERESIS
IsLetterTab[0xEC] = true; // <20> , SMALL LETTER I WITH GRAVE ACCENT
IsLetterTab[0xED] = true; // <20> , SMALL LETTER I WITH ACUTE ACCENT
IsLetterTab[0xEE] = true; // <20> , SMALL LETTER I WITH CIRCUMFLEX ACCENT
IsLetterTab[0xEF] = true; // <20> , SMALL LETTER I WITH DIAERESIS
IsLetterTab[0xF0] = true; // <20> , SMALL LETTER ETH
IsLetterTab[0xF1] = true; // <20> , SMALL LETTER N WITH TILDE
IsLetterTab[0xF2] = true; // <20> , SMALL LETTER O WITH GRAVE ACCENT
IsLetterTab[0xF3] = true; // <20> , SMALL LETTER O WITH ACUTE ACCENT
IsLetterTab[0xF4] = true; // <20> , SMALL LETTER O WITH CIRCUMFLEX ACCENT
IsLetterTab[0xF5] = true; // <20> , SMALL LETTER O WITH TILDE
IsLetterTab[0xF6] = true; // <20> , SMALL LETTER O WITH DIAERESIS
IsLetterTab[0xF8] = true; // <20> , SMALL LETTER O WITH OBLIQUE BAR
IsLetterTab[0xF9] = true; // <20> , SMALL LETTER U WITH GRAVE ACCENT
IsLetterTab[0xFA] = true; // <20> , SMALL LETTER U WITH ACUTE ACCENT
IsLetterTab[0xFB] = true; // <20> , SMALL LETTER U WITH CIRCUMFLEX ACCENT
IsLetterTab[0xFC] = true; // <20> , SMALL LETTER U WITH DIAERESIS
IsLetterTab[0xFD] = true; // <20> , SMALL LETTER Y WITH ACUTE ACCENT
IsLetterTab[0xFE] = true; // <20> , SMALL LETTER THORN
IsLetterTab[0xFF] = true; // <20> , SMALL LETTER Y WITH DIAERESIS
}