ooo-build r13357 - in trunk: . patches/dev300
- From: kyoshida svn gnome org
- To: svn-commits-list gnome org
- Subject: ooo-build r13357 - in trunk: . patches/dev300
- Date: Tue, 22 Jul 2008 23:10:52 +0000 (UTC)
Author: kyoshida
Date: Tue Jul 22 23:10:52 2008
New Revision: 13357
URL: http://svn.gnome.org/viewvc/ooo-build?rev=13357&view=rev
Log:
2008-07-22 Kohei Yoshida <kyoshida novell com>
* patches/dev300/calc-xls-parser-sheet-name-fix-sc.diff: fixed the Excel
formula parser which previously failed to parse a cell reference
correctly when the sheet name contained a non-ASCII character.
* patches/dev300/apply: apply this new patch.
Added:
trunk/patches/dev300/calc-xls-parser-sheet-name-fix-sc.diff
Modified:
trunk/ChangeLog
trunk/patches/dev300/apply
Modified: trunk/patches/dev300/apply
==============================================================================
--- trunk/patches/dev300/apply (original)
+++ trunk/patches/dev300/apply Tue Jul 22 23:10:52 2008
@@ -1804,6 +1804,9 @@
# Make the formula separators changeable per locale setting.
calc-formula-variable-separators-sc.diff, kohei
+# Fix parse failure on non-ASCII sheet names in Excel A1 and R1C1 modes.
+calc-xls-parser-sheet-name-fix-sc.diff, kohei
+
#[ OOXSTLport5 ]
#
## oox devs, please reconsider operator[] use,
Added: trunk/patches/dev300/calc-xls-parser-sheet-name-fix-sc.diff
==============================================================================
--- (empty file)
+++ trunk/patches/dev300/calc-xls-parser-sheet-name-fix-sc.diff Tue Jul 22 23:10:52 2008
@@ -0,0 +1,76 @@
+diff --git sc/source/core/tool/address.cxx sc/source/core/tool/address.cxx
+index 50c627e..2cb5dce 100644
+--- sc/source/core/tool/address.cxx
++++ sc/source/core/tool/address.cxx
+@@ -174,7 +174,13 @@ lcl_XL_ParseSheetRef( const sal_Unicode *start,
+ break;
+ }
+ p++;
+- } else
++ }
++ else if (uc > 128)
++ {
++ // non ASCII character is allowed.
++ ++p;
++ }
++ else
+ break;
+ }
+
+@@ -601,7 +607,7 @@ lcl_ScRange_Parse_XL_A1( ScRange& r,
+ BOOL bOnlyAcceptSingle )
+ {
+ const sal_Unicode* tmp1, *tmp2;
+- String aExternDocName, aStartTabName, aEndTabName;
++ String aExternDocName, aStartTabName, aEndTabName; // for external link table
+ USHORT nFlags = SCA_VALID | SCA_VALID_TAB, nFlags2 = SCA_VALID_TAB2;
+
+ #if 0
+@@ -648,7 +654,7 @@ lcl_ScRange_Parse_XL_A1( ScRange& r,
+ return 0;
+ tmp2 = lcl_a1_get_col( tmp1, &r.aEnd, &nFlags2 );
+ if( !tmp2 )
+- return 0;
++ return 0;
+
+ r.aStart.SetRow( 0 ); r.aEnd.SetRow( MAXROW );
+ nFlags |=
+diff --git sc/source/core/tool/compiler.cxx sc/source/core/tool/compiler.cxx
+index 00c93e0..f88d5d3 100644
+--- sc/source/core/tool/compiler.cxx
++++ sc/source/core/tool/compiler.cxx
+@@ -1566,6 +1566,23 @@ struct ConventionXL_A1 : public Convention_A1, public ConventionXL
+ }
+ }
+
++ virtual ParseResult parseAnyToken( const String& rFormula,
++ xub_StrLen nSrcPos,
++ const CharClass* pCharClass) const
++ {
++ ParseResult aRet;
++ if ( !lcl_isValidQuotedText(rFormula, nSrcPos, aRet) )
++ return aRet;
++
++ static const sal_Int32 nStartFlags = KParseTokens::ANY_LETTER_OR_NUMBER |
++ KParseTokens::ASC_UNDERSCORE | KParseTokens::ASC_DOLLAR;
++ static const sal_Int32 nContFlags = nStartFlags | KParseTokens::ASC_DOT;
++ // '?' allowed in range names
++ static const String aAddAllowed = String::CreateFromAscii("?!");
++ return pCharClass->parseAnyToken( rFormula,
++ nSrcPos, nStartFlags, aAddAllowed, nContFlags, aAddAllowed );
++ }
++
+ virtual sal_Unicode getSpecialSymbol( SpecialSymbolType eSymType ) const
+ {
+ return ConventionXL::getSpecialSymbol(eSymType);
+@@ -1686,8 +1703,8 @@ struct ConventionXL_R1C1 : public ScCompiler::Convention, public ConventionXL
+ static const sal_Int32 nStartFlags = KParseTokens::ANY_LETTER_OR_NUMBER |
+ KParseTokens::ASC_UNDERSCORE ;
+ static const sal_Int32 nContFlags = nStartFlags | KParseTokens::ASC_DOT;
+- // '?' allowed in range names because of Xcl :-/
+- static const String aAddAllowed = String::CreateFromAscii( "?-[]" );
++ // '?' allowed in range names
++ static const String aAddAllowed = String::CreateFromAscii( "?-[]!" );
+
+ return pCharClass->parseAnyToken( rFormula,
+ nSrcPos, nStartFlags, aAddAllowed, nContFlags, aAddAllowed );
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]