summaryrefslogtreecommitdiff
path: root/formula
diff options
context:
space:
mode:
Diffstat (limited to 'formula')
-rw-r--r--formula/inc/formula/FormulaCompiler.hxx1
-rwxr-xr-xformula/inc/formula/compiler.hrc25
-rw-r--r--formula/inc/formula/opcode.hxx1
-rw-r--r--formula/inc/formula/tokenarray.hxx1
-rw-r--r--formula/source/core/api/FormulaCompiler.cxx24
-rw-r--r--formula/source/core/api/token.cxx7
6 files changed, 29 insertions, 30 deletions
diff --git a/formula/inc/formula/FormulaCompiler.hxx b/formula/inc/formula/FormulaCompiler.hxx
index 825a31e9863b..215115214fc5 100644
--- a/formula/inc/formula/FormulaCompiler.hxx
+++ b/formula/inc/formula/FormulaCompiler.hxx
@@ -273,7 +273,6 @@ protected:
virtual void CreateStringFromMatrix(rtl::OUStringBuffer& rBuffer,FormulaToken* pTokenP);
virtual void CreateStringFromIndex(rtl::OUStringBuffer& rBuffer,FormulaToken* pTokenP);
virtual void LocalizeString( String& rName ); // modify rName - input: exact name
- virtual bool IsImportingXML() const;
sal_uInt16 GetErrorConstant( const String& rName );
void AppendErrorConstant( rtl::OUStringBuffer& rBuffer, sal_uInt16 nError );
diff --git a/formula/inc/formula/compiler.hrc b/formula/inc/formula/compiler.hrc
index a7b5cd808f88..49252ce85d2b 100755
--- a/formula/inc/formula/compiler.hrc
+++ b/formula/inc/formula/compiler.hrc
@@ -44,18 +44,19 @@
#define SC_OPCODE_SEP 10
#define SC_OPCODE_MISSING 11 /* special OpCodes */
#define SC_OPCODE_BAD 12
-#define SC_OPCODE_SPACES 13
-#define SC_OPCODE_MAT_REF 14
-#define SC_OPCODE_DB_AREA 15 /* additional access operators */
-#define SC_OPCODE_MACRO 16
-#define SC_OPCODE_COL_ROW_NAME 17
-#define SC_OPCODE_COL_ROW_NAME_AUTO 18
-#define SC_OPCODE_PERCENT_SIGN 19 /* operator _follows_ value */
-#define SC_OPCODE_ARRAY_OPEN 20
-#define SC_OPCODE_ARRAY_CLOSE 21
-#define SC_OPCODE_ARRAY_ROW_SEP 22
-#define SC_OPCODE_ARRAY_COL_SEP 23 /* some convs use sep != col_sep */
-#define SC_OPCODE_STOP_DIV 24
+#define SC_OPCODE_STRINGXML 13
+#define SC_OPCODE_SPACES 14
+#define SC_OPCODE_MAT_REF 15
+#define SC_OPCODE_DB_AREA 16 /* additional access operators */
+#define SC_OPCODE_MACRO 17
+#define SC_OPCODE_COL_ROW_NAME 18
+#define SC_OPCODE_COL_ROW_NAME_AUTO 19
+#define SC_OPCODE_PERCENT_SIGN 20 /* operator _follows_ value */
+#define SC_OPCODE_ARRAY_OPEN 21
+#define SC_OPCODE_ARRAY_CLOSE 22
+#define SC_OPCODE_ARRAY_ROW_SEP 23
+#define SC_OPCODE_ARRAY_COL_SEP 24 /* some convs use sep != col_sep */
+#define SC_OPCODE_STOP_DIV 25
/*** error constants #... ***/
#define SC_OPCODE_START_ERRORS 30
diff --git a/formula/inc/formula/opcode.hxx b/formula/inc/formula/opcode.hxx
index 571e1b00c247..e562c27639c8 100644
--- a/formula/inc/formula/opcode.hxx
+++ b/formula/inc/formula/opcode.hxx
@@ -55,6 +55,7 @@ enum OpCodeEnum
// Special OpCodes
ocMissing = SC_OPCODE_MISSING,
ocBad = SC_OPCODE_BAD,
+ ocStringXML = SC_OPCODE_STRINGXML,
ocSpaces = SC_OPCODE_SPACES,
ocMatRef = SC_OPCODE_MAT_REF,
// Access commands
diff --git a/formula/inc/formula/tokenarray.hxx b/formula/inc/formula/tokenarray.hxx
index 8ec6a56f9f0f..3947ed5987dd 100644
--- a/formula/inc/formula/tokenarray.hxx
+++ b/formula/inc/formula/tokenarray.hxx
@@ -214,6 +214,7 @@ public:
FormulaToken* AddExternal( const String& rStr, OpCode eOp = ocExternal );
FormulaToken* AddBad( const sal_Unicode* pStr ); /// ocBad with String
FormulaToken* AddBad( const String& rStr ); /// ocBad with String
+ FormulaToken* AddStringXML( const String& rStr ); /// ocStringXML with String, temporary during import
virtual FormulaToken* MergeArray( );
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index e1122c22b0fd..8108f11ae926 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -1683,7 +1683,7 @@ FormulaToken* FormulaCompiler::CreateStringFromToken( rtl::OUStringBuffer& rBuff
break;
case svString:
- if( eOp == ocBad )
+ if( eOp == ocBad || eOp == ocStringXML )
rBuffer.append(t->GetString());
else
AppendString( rBuffer, t->GetString() );
@@ -1770,28 +1770,18 @@ void FormulaCompiler::AppendBoolean( rtl::OUStringBuffer& rBuffer, bool bVal )
rBuffer.append( mxSymbols->getSymbol(static_cast<OpCode>(bVal ? ocTrue : ocFalse)) );
}
// -----------------------------------------------------------------------------
-bool FormulaCompiler::IsImportingXML() const
-{
- return false;
-}
-// -----------------------------------------------------------------------------
void FormulaCompiler::AppendString( rtl::OUStringBuffer& rBuffer, const String & rStr )
{
- if (IsImportingXML())
+ rBuffer.append(sal_Unicode('"'));
+ if ( lcl_UnicodeStrChr( rStr.GetBuffer(), '"' ) == NULL )
rBuffer.append( rStr );
else
{
- rBuffer.append(sal_Unicode('"'));
- if ( lcl_UnicodeStrChr( rStr.GetBuffer(), '"' ) == NULL )
- rBuffer.append( rStr );
- else
- {
- String aStr( rStr );
- aStr.SearchAndReplaceAll( '"', String( RTL_CONSTASCII_USTRINGPARAM( "\"\"")));
- rBuffer.append(aStr);
- }
- rBuffer.append(sal_Unicode('"'));
+ String aStr( rStr );
+ aStr.SearchAndReplaceAll( '"', String( RTL_CONSTASCII_USTRINGPARAM( "\"\"")));
+ rBuffer.append(aStr);
}
+ rBuffer.append(sal_Unicode('"'));
}
void FormulaCompiler::UpdateSeparatorsNative(
diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx
index 08a6738c488c..745d628be216 100644
--- a/formula/source/core/api/token.cxx
+++ b/formula/source/core/api/token.cxx
@@ -329,6 +329,8 @@ bool FormulaTokenArray::AddFormulaToken(const sheet::FormulaToken& _aToken,Exter
AddString( aStrVal );
else if ( eOpCode == ocBad )
AddBad( aStrVal );
+ else if ( eOpCode == ocStringXML )
+ AddStringXML( aStrVal );
else if ( eOpCode == ocExternal || eOpCode == ocMacro )
AddToken( formula::FormulaExternalToken( eOpCode, aStrVal ) );
else
@@ -808,6 +810,11 @@ FormulaToken* FormulaTokenArray::AddBad( const String& rStr )
return Add( new FormulaStringOpToken( ocBad, rStr ) );
}
+FormulaToken* FormulaTokenArray::AddStringXML( const String& rStr )
+{
+ return Add( new FormulaStringOpToken( ocStringXML, rStr ) );
+}
+
void FormulaTokenArray::AddRecalcMode( ScRecalcMode nBits )