ooo-build r13357 - in trunk: . patches/dev300



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]