summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/distro-install-desktop-integration7
-rwxr-xr-xconfigure.in3
-rwxr-xr-xdesktop/unx/source/splashx.c1
-rw-r--r--i18npool/qa/cppunit/test_breakiterator.cxx51
-rw-r--r--i18npool/source/breakiterator/breakiteratorImpl.cxx200
-rw-r--r--instsetoo_native/util/openoffice.lst16
-rw-r--r--mdds/makefile.mk4
-rw-r--r--ooo.lst.in2
-rw-r--r--oox/source/xls/sheetdatacontext.cxx9
-rw-r--r--sc/inc/dpobject.hxx2
-rw-r--r--sc/source/core/data/dpobject.cxx35
-rw-r--r--sc/source/filter/excel/xestream.cxx6
-rw-r--r--sc/source/ui/unoobj/dapiuno.cxx5
-rw-r--r--sc/source/ui/view/dbfunc3.cxx33
-rw-r--r--sc/source/ui/view/output.cxx1
-rw-r--r--solenv/inc/minor.mk4
-rw-r--r--starmath/source/view.cxx5
-rw-r--r--sw/source/core/txtnode/txtedt.cxx6
18 files changed, 272 insertions, 118 deletions
diff --git a/bin/distro-install-desktop-integration b/bin/distro-install-desktop-integration
index c00c8c6754fb..77ccf3ae016e 100755
--- a/bin/distro-install-desktop-integration
+++ b/bin/distro-install-desktop-integration
@@ -123,7 +123,7 @@ for file in *.desktop ; do
-e "s/\($INSTALLDIRNAME\)$PRODUCTVERSION/\1/" \
-e "s/\($PRODUCTNAME\) $PRODUCTVERSION/\1/" \
"$file" >"$file.new"
- mv "$file.new" "$file"
+ mv -f "$file.new" "$file"
done
cd -
@@ -148,7 +148,7 @@ add_wrapper lomath soffice "--math" "libreoffice" "libreoffice-mat
add_wrapper loimpress soffice "--impress" "libreoffice" "libreoffice-impress.desktop" "gid_Module_Brand_Prg_Impress"
add_wrapper loweb soffice "--web" "libreoffice" "" "gid_Module_Brand_Prg_Wrt"
add_wrapper lowriter soffice "--writer" "libreoffice" "libreoffice-writer.desktop" "gid_Module_Brand_Prg_Wrt"
-add_wrapper lofromtemplate soffice ".uno:NewDoc" "libreoffice" "libreoffice-base.desktop" "gid_Module_Root_Brand"
+add_wrapper lofromtemplate soffice ".uno:NewDoc" "libreoffice" "" "gid_Module_Root_Brand"
add_wrapper libreoffice soffice "" "libreoffice" "libreoffice-startcenter.desktop" "gid_Module_Root_Brand"
add_wrapper loffice soffice "" "libreoffice" "" "gid_Module_Root_Brand"
add_wrapper unopkg unopkg "" "unopkg" "" "gid_Module_Root_Brand"
@@ -160,7 +160,8 @@ add_wrapper unopkg unopkg "" "unopkg" ""
# you cannot include this link directly into the package
# For example, the Novell package mark this symlink as %ghost
# and update it in %post and %postun
-ln -sf $INSTALLDIR/program/soffice $PREFIXDIR/bin/soffice
+ln -sf $INSTALLDIR/program/soffice $DESTDIR$PREFIXDIR/bin/soffice
+test -f $DESTDIR/gid_Module_Root_Brand && echo "$PREFIXDIR/bin/soffice" >>$DESTDIR/gid_Module_Root_Brand
# create bash completion
mkdir -p $DESTDIR/etc/bash_completion.d
diff --git a/configure.in b/configure.in
index 18f93d270834..65813cb18f42 100755
--- a/configure.in
+++ b/configure.in
@@ -7906,6 +7906,9 @@ for lang in $WITH_LANG ; do
done
# list with substituted ALL
WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
+# this variable is used only by bin/distro-install-* helper scripts
+# they need a real list of languages
+test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
AC_SUBST(ALL_LANGS)
AC_SUBST(WITH_LANG)
AC_SUBST(WITH_LANG_LIST)
diff --git a/desktop/unx/source/splashx.c b/desktop/unx/source/splashx.c
index 711671fe28d4..4f5d4b217a44 100755
--- a/desktop/unx/source/splashx.c
+++ b/desktop/unx/source/splashx.c
@@ -620,6 +620,7 @@ void splash_draw_progress( int progress )
void splash_close_window()
{
XCloseDisplay( display );
+ display = NULL;
#ifdef USE_LIBPNG
png_destroy_read_struct( &png_ptr, &info_ptr, NULL );
#else
diff --git a/i18npool/qa/cppunit/test_breakiterator.cxx b/i18npool/qa/cppunit/test_breakiterator.cxx
index 0f42fe7b2164..7b4df321879e 100644
--- a/i18npool/qa/cppunit/test_breakiterator.cxx
+++ b/i18npool/qa/cppunit/test_breakiterator.cxx
@@ -57,11 +57,13 @@ public:
void testLineBreaking();
void testGraphemeIteration();
void testWeak();
+ void testAsian();
CPPUNIT_TEST_SUITE(TestBreakIterator);
CPPUNIT_TEST(testLineBreaking);
CPPUNIT_TEST(testGraphemeIteration);
CPPUNIT_TEST(testWeak);
+ CPPUNIT_TEST(testAsian);
CPPUNIT_TEST_SUITE_END();
private:
@@ -104,7 +106,7 @@ void TestBreakIterator::testGraphemeIteration()
aLocale.Country = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IN"));
{
- sal_Unicode BA_HALANT_LA[] = { 0x09AC, 0x09CD, 0x09AF };
+ const sal_Unicode BA_HALANT_LA[] = { 0x09AC, 0x09CD, 0x09AF };
::rtl::OUString aTest1(BA_HALANT_LA, SAL_N_ELEMENTS(BA_HALANT_LA));
sal_Int32 nDone=0;
@@ -118,7 +120,7 @@ void TestBreakIterator::testGraphemeIteration()
}
{
- sal_Unicode HA_HALANT_NA_VOWELSIGNI[] = { 0x09B9, 0x09CD, 0x09A3, 0x09BF };
+ const sal_Unicode HA_HALANT_NA_VOWELSIGNI[] = { 0x09B9, 0x09CD, 0x09A3, 0x09BF };
::rtl::OUString aTest1(HA_HALANT_NA_VOWELSIGNI, SAL_N_ELEMENTS(HA_HALANT_NA_VOWELSIGNI));
sal_Int32 nDone=0;
@@ -132,7 +134,7 @@ void TestBreakIterator::testGraphemeIteration()
}
{
- sal_Unicode TA_HALANT_MA_HALANT_YA [] = { 0x09A4, 0x09CD, 0x09AE, 0x09CD, 0x09AF };
+ const sal_Unicode TA_HALANT_MA_HALANT_YA [] = { 0x09A4, 0x09CD, 0x09AE, 0x09CD, 0x09AF };
::rtl::OUString aTest1(TA_HALANT_MA_HALANT_YA, SAL_N_ELEMENTS(TA_HALANT_MA_HALANT_YA));
sal_Int32 nDone=0;
@@ -156,10 +158,12 @@ void TestBreakIterator::testWeak()
aLocale.Country = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("US"));
{
- sal_Unicode WEAKS[] =
+ const sal_Unicode WEAKS[] =
{
0x0001, 0x0002,
0x0020, 0x00A0,
+ 0x2150, 0x215F, //Number Forms, fractions
+ 0x2160, 0x2180, //Number Forms, roman numerals
0x2200, 0x22FF, //Mathematical Operators
0x27C0, 0x27EF, //Miscellaneous Mathematical Symbols-A
0x2980, 0x29FF, //Miscellaneous Mathematical Symbols-B
@@ -184,6 +188,45 @@ void TestBreakIterator::testWeak()
}
}
+//A test to ensure that certain ranges and codepoints that are categorized as
+//asian remain as asian, so that existing docs that depend on this don't silently
+//change font for those asian chars.
+//See https://bugs.freedesktop.org/show_bug.cgi?id=38095
+void TestBreakIterator::testAsian()
+{
+ lang::Locale aLocale;
+ aLocale.Language = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("en"));
+ aLocale.Country = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("US"));
+
+ {
+ const sal_Unicode ASIANS[] =
+ {
+ //some typical CJK chars
+ 0x4E00, 0x62FF,
+ //The full HalfWidth and FullWidth block has historically been
+ //designated as taking the CJK font :-(
+ //HalfWidth and FullWidth forms of ASCII 0-9, categorized under
+ //UAX24 as "Common" i.e. by that logic WEAK
+ 0xFF10, 0xFF19,
+ //HalfWidth and FullWidth forms of ASCII A-z, categorized under
+ //UAX25 as "Latin", i.e. by that logic LATIN
+ 0xFF21, 0xFF5A
+ };
+ ::rtl::OUString aAsians(ASIANS, SAL_N_ELEMENTS(ASIANS));
+
+ for (sal_Int32 i = 0; i < aAsians.getLength(); ++i)
+ {
+ sal_Int16 nScript = m_xBreak->getScriptType(aAsians, i);
+ rtl::OStringBuffer aMsg;
+ aMsg.append(RTL_CONSTASCII_STRINGPARAM("Char 0x"));
+ aMsg.append(static_cast<sal_Int32>(aAsians.getStr()[i]), 16);
+ aMsg.append(RTL_CONSTASCII_STRINGPARAM(" should have been asian"));
+ CPPUNIT_ASSERT_MESSAGE(aMsg.getStr(),
+ nScript == i18n::ScriptType::ASIAN);
+ }
+ }
+}
+
TestBreakIterator::TestBreakIterator()
{
m_xContext = cppu::defaultBootstrap_InitialComponentContext();
diff --git a/i18npool/source/breakiterator/breakiteratorImpl.cxx b/i18npool/source/breakiterator/breakiteratorImpl.cxx
index 3cc974870c3d..e81bfff9452a 100644
--- a/i18npool/source/breakiterator/breakiteratorImpl.cxx
+++ b/i18npool/source/breakiterator/breakiteratorImpl.cxx
@@ -443,67 +443,155 @@ sal_Int16 SAL_CALL BreakIteratorImpl::getWordType( const OUString& /*Text*/,
return 0;
}
-static sal_Int16 scriptTypes[] = {
- ScriptType::WEAK, ScriptType::WEAK, ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::COMPLEX,
- ScriptType::ASIAN, ScriptType::LATIN, ScriptType::LATIN, ScriptType::LATIN, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::LATIN, ScriptType::LATIN,
-// 15
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::ASIAN, ScriptType::ASIAN, ScriptType::COMPLEX,
- ScriptType::ASIAN, ScriptType::COMPLEX, ScriptType::ASIAN, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::LATIN,
-// 30
- ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::LATIN, ScriptType::ASIAN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
-// 45
- ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::LATIN, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::LATIN,
- ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
-// 60
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::LATIN, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::ASIAN, ScriptType::ASIAN,
-// 75
- ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::LATIN, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
-// 90
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::WEAK, ScriptType::WEAK, ScriptType::COMPLEX,
-// 105
- ScriptType::ASIAN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::ASIAN,
-// 120
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::WEAK, ScriptType::WEAK,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
-// 135
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
- ScriptType::COMPLEX,
- ScriptType::WEAK};
-
-#define scriptListCount SAL_N_ELEMENTS(scriptTypes)
+namespace
+{
+ //See unicode/uscript.h
+ static sal_Int16 scriptTypes[] =
+ {
+ ScriptType::WEAK, ScriptType::WEAK, ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::COMPLEX,
+ ScriptType::ASIAN, ScriptType::LATIN, ScriptType::LATIN, ScriptType::LATIN, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::LATIN, ScriptType::LATIN,
+ // 15
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::ASIAN, ScriptType::ASIAN, ScriptType::COMPLEX,
+ ScriptType::ASIAN, ScriptType::COMPLEX, ScriptType::ASIAN, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::LATIN,
+ // 30
+ ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::LATIN, ScriptType::ASIAN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ // 45
+ ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::LATIN, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::LATIN,
+ ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ // 60
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::LATIN, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::ASIAN, ScriptType::ASIAN,
+ // 75
+ ScriptType::COMPLEX, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::LATIN, ScriptType::LATIN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ // 90
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::WEAK, ScriptType::WEAK, ScriptType::COMPLEX,
+ // 105
+ ScriptType::ASIAN, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::ASIAN,
+ // 120
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::WEAK, ScriptType::WEAK,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ // 135
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX, ScriptType::COMPLEX,
+ ScriptType::COMPLEX,
+ ScriptType::WEAK
+ };
+
+# define scriptTypesCount SAL_N_ELEMENTS(scriptTypes)
+
+ sal_Int16 getScriptClassByUAX24Script(sal_uInt32 currentChar)
+ {
+ sal_Int16 nRet;
+ int32_t script = u_getIntPropertyValue(currentChar, UCHAR_SCRIPT);
+ if (script < 0)
+ nRet = ScriptType::WEAK;
+ else if (static_cast<size_t>(script) >= SAL_N_ELEMENTS(scriptTypes))
+ nRet = ScriptType::COMPLEX; // anything new is going to be pretty wild
+ else
+ nRet = scriptTypes[script];
+ return nRet;
+ }
+
+ struct UBlock2Script
+ {
+ UBlockCode from;
+ UBlockCode to;
+ sal_Int16 script;
+ };
+
+ static UBlock2Script scriptList[] =
+ {
+ {UBLOCK_NO_BLOCK, UBLOCK_NO_BLOCK, ScriptType::WEAK},
+ {UBLOCK_BASIC_LATIN, UBLOCK_ARMENIAN, ScriptType::LATIN},
+ {UBLOCK_HEBREW, UBLOCK_MYANMAR, ScriptType::COMPLEX},
+ {UBLOCK_GEORGIAN, UBLOCK_GEORGIAN, ScriptType::LATIN},
+ {UBLOCK_HANGUL_JAMO, UBLOCK_HANGUL_JAMO, ScriptType::ASIAN},
+ {UBLOCK_ETHIOPIC, UBLOCK_ETHIOPIC, ScriptType::COMPLEX},
+ {UBLOCK_CHEROKEE, UBLOCK_RUNIC, ScriptType::LATIN},
+ {UBLOCK_KHMER, UBLOCK_MONGOLIAN, ScriptType::COMPLEX},
+ {UBLOCK_LATIN_EXTENDED_ADDITIONAL, UBLOCK_GREEK_EXTENDED, ScriptType::LATIN},
+ {UBLOCK_NUMBER_FORMS, UBLOCK_NUMBER_FORMS, ScriptType::WEAK},
+ {UBLOCK_CJK_RADICALS_SUPPLEMENT, UBLOCK_HANGUL_SYLLABLES, ScriptType::ASIAN},
+ {UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS, UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS, ScriptType::ASIAN},
+ {UBLOCK_ARABIC_PRESENTATION_FORMS_A, UBLOCK_ARABIC_PRESENTATION_FORMS_A, ScriptType::COMPLEX},
+ {UBLOCK_CJK_COMPATIBILITY_FORMS, UBLOCK_CJK_COMPATIBILITY_FORMS, ScriptType::ASIAN},
+ {UBLOCK_ARABIC_PRESENTATION_FORMS_B, UBLOCK_ARABIC_PRESENTATION_FORMS_B, ScriptType::COMPLEX},
+ {UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS, UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS, ScriptType::ASIAN},
+ {UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B, UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT, ScriptType::ASIAN},
+ {UBLOCK_CJK_STROKES, UBLOCK_CJK_STROKES, ScriptType::ASIAN},
+ {UBLOCK_LATIN_EXTENDED_C, UBLOCK_LATIN_EXTENDED_D, ScriptType::LATIN}
+ };
+
+ #define scriptListCount SAL_N_ELEMENTS(scriptList)
+
+ //always sets rScriptType
+ //
+ //returns true for characters historically explicitly assigned to
+ //latin/weak/asian
+ //
+ //returns false for characters that historically implicitly assigned to
+ //weak as unknown
+ bool getCompatibilityScriptClassByBlock(sal_uInt32 currentChar, sal_Int16 &rScriptType)
+ {
+ bool bKnown = true;
+ //handle specific characters always as weak:
+ // 0x01 - this breaks a word
+ // 0x02 - this can be inside a word
+ // 0x20 & 0xA0 - Bug 102975, declare western space and non-break space as WEAK char.
+ if( 0x01 == currentChar || 0x02 == currentChar || 0x20 == currentChar || 0xA0 == currentChar)
+ rScriptType = ScriptType::WEAK;
+ // workaround for Coptic
+ else if ( 0x2C80 <= currentChar && 0x2CE3 >= currentChar)
+ rScriptType = ScriptType::LATIN;
+ else
+ {
+ UBlockCode block=ublock_getCode(currentChar);
+ size_t i = 0;
+ while (i < scriptListCount)
+ {
+ if (block <= scriptList[i].to)
+ break;
+ ++i;
+ }
+ if (i < scriptListCount && block >= scriptList[i].from)
+ rScriptType = scriptList[i].script;
+ else
+ {
+ rScriptType = ScriptType::WEAK;
+ bKnown = false;
+ }
+ }
+ return bKnown;
+ }
+}
sal_Int16 BreakIteratorImpl::getScriptClass(sal_uInt32 currentChar)
{
- static sal_uInt32 lastChar = 0;
- static sal_Int16 nRet = 0;
+ static sal_uInt32 lastChar = 0;
+ static sal_Int16 nRet = 0;
- if (currentChar != lastChar) {
- lastChar = currentChar;
+ if (currentChar != lastChar)
+ {
+ lastChar = currentChar;
- int32_t script = u_getIntPropertyValue(currentChar, UCHAR_SCRIPT);
- if (script < 0)
- nRet = ScriptType::WEAK;
- else if (static_cast<size_t>(script) >= SAL_N_ELEMENTS(scriptTypes))
- nRet = ScriptType::COMPLEX; // anything new is going to be pretty wild
- else
- nRet = scriptTypes[script];
- }
- return nRet;
+ if (!getCompatibilityScriptClassByBlock(currentChar, nRet))
+ nRet = getScriptClassByUAX24Script(currentChar);
+ }
+
+ return nRet;
}
static inline sal_Bool operator == (const Locale& l1, const Locale& l2) {
diff --git a/instsetoo_native/util/openoffice.lst b/instsetoo_native/util/openoffice.lst
index 44fc23c2c2cb..20d76c558939 100644
--- a/instsetoo_native/util/openoffice.lst
+++ b/instsetoo_native/util/openoffice.lst
@@ -57,7 +57,7 @@ LibreOffice
PRODUCTVERSION 3.4
PRODUCTEXTENSION
LONG_PRODUCTEXTENSION
- SHORT_PRODUCTEXTENSION rc1
+ SHORT_PRODUCTEXTENSION rc2
POSTVERSIONEXTENSION
POSTVERSIONEXTENSIONUNIX
BRANDPACKAGEVERSION 3.4
@@ -125,7 +125,7 @@ LibreOffice_wJRE
PRODUCTVERSION 3.4
PRODUCTEXTENSION
LONG_PRODUCTEXTENSION
- SHORT_PRODUCTEXTENSION rc1
+ SHORT_PRODUCTEXTENSION rc2
POSTVERSIONEXTENSION
POSTVERSIONEXTENSIONUNIX
BRANDPACKAGEVERSION 3.4
@@ -189,7 +189,7 @@ LibreOffice_Dev
PRODUCTVERSION 3.4
PRODUCTEXTENSION
LONG_PRODUCTEXTENSION
- SHORT_PRODUCTEXTENSION rc1
+ SHORT_PRODUCTEXTENSION rc2
BASISROOTNAME LibO-dev
UNIXBASISROOTNAME lo-dev
POSTVERSIONEXTENSION
@@ -266,7 +266,7 @@ URE
PRODUCTEXTENSION
BRANDPACKAGEVERSION 3.4
LONG_PRODUCTEXTENSION
- SHORT_PRODUCTEXTENSION rc1
+ SHORT_PRODUCTEXTENSION rc2
LICENSENAME LGPL
SETSTATICPATH 1
NOVERSIONINDIRNAME 1
@@ -305,7 +305,7 @@ LibreOffice_SDK
PRODUCTVERSION 3.4
PRODUCTEXTENSION
LONG_PRODUCTEXTENSION
- SHORT_PRODUCTEXTENSION rc1
+ SHORT_PRODUCTEXTENSION rc2
POSTVERSIONEXTENSION SDK
POSTVERSIONEXTENSIONUNIX sdk
BRANDPACKAGEVERSION 3.4
@@ -351,7 +351,7 @@ LibreOffice_Dev_SDK
PRODUCTVERSION 3.4
PRODUCTEXTENSION
LONG_PRODUCTEXTENSION
- SHORT_PRODUCTEXTENSION rc1
+ SHORT_PRODUCTEXTENSION rc2
BASISROOTNAME LibO-dev
UNIXBASISROOTNAME lo-dev
POSTVERSIONEXTENSION SDK
@@ -403,7 +403,7 @@ OxygenOffice
PRODUCTVERSION 3.4
PRODUCTEXTENSION
LONG_PRODUCTEXTENSION
- SHORT_PRODUCTEXTENSION rc1
+ SHORT_PRODUCTEXTENSION rc2
POSTVERSIONEXTENSION
POSTVERSIONEXTENSIONUNIX
BRANDPACKAGEVERSION 3.4
@@ -473,7 +473,7 @@ OxygenOffice_wJRE
PRODUCTVERSION 3.4
PRODUCTEXTENSION
LONG_PRODUCTEXTENSION
- SHORT_PRODUCTEXTENSION rc1
+ SHORT_PRODUCTEXTENSION rc2
POSTVERSIONEXTENSION
POSTVERSIONEXTENSIONUNIX
BRANDPACKAGEVERSION 3.4
diff --git a/mdds/makefile.mk b/mdds/makefile.mk
index ed8f18b423b1..fc0bc753e188 100644
--- a/mdds/makefile.mk
+++ b/mdds/makefile.mk
@@ -36,8 +36,8 @@ TARGET=mdds
# --- Files --------------------------------------------------------
-TARFILE_NAME=mdds_0.5.2
-TARFILE_MD5=7a0dcb3fe1e8c7229ab4fb868b7325e6
+TARFILE_NAME=mdds_0.5.3
+TARFILE_MD5=0ff7d225d087793c8c2c680d77aac3e7
PATCH_FILES=
CONFIGURE_DIR=
diff --git a/ooo.lst.in b/ooo.lst.in
index 7a64faf4a0c8..3652a3921479 100644
--- a/ooo.lst.in
+++ b/ooo.lst.in
@@ -76,7 +76,7 @@ debc62758716a169df9f62e6ab2bc634-zlib-1.2.3.tar.gz
5ba6a61a2f66dfd5fee8cdd4cd262a37-libwpg-0.2.0.tar.bz2
8d265a592619166f29c4672ea54812b7-libwpd-0.9.2.tar.bz2
83d4029aebf290c0a9a8fee9c99638d3-libwps-0.2.1.tar.bz2
-7a0dcb3fe1e8c7229ab4fb868b7325e6-mdds_0.5.2.tar.bz2
+0ff7d225d087793c8c2c680d77aac3e7-mdds_0.5.3.tar.bz2
f02578f5218f217a9f20e9c30e119c6a-boost_1_44_0.tar.bz2
9ed97fce60a9a65852402248a6659492-hunspell-1.3.1.tar.gz
0625a7d661f899a8ce263fc8a9879108-graphite2-0.9.2.tgz
diff --git a/oox/source/xls/sheetdatacontext.cxx b/oox/source/xls/sheetdatacontext.cxx
index c6c68dd6897c..1a9847b2f0b8 100644
--- a/oox/source/xls/sheetdatacontext.cxx
+++ b/oox/source/xls/sheetdatacontext.cxx
@@ -227,9 +227,6 @@ void SheetDataContext::onCharacters( const OUString& rChars )
{
if( rChars.getLength() > 0 )
getSharedFormulas().importSharedFmla( rChars, maCurrCell.maFormulaRef, maCurrCell.mnSharedId, maCurrCell.maAddress );
- Reference< XFormulaTokens > xTokens( maCurrCell.mxCell, UNO_QUERY_THROW );
- ExtCellFormulaContext aContext( *this, xTokens, maCurrCell.maAddress );
- getSharedFormulas().setSharedFormulaCell( aContext, maCurrCell.mnSharedId );
}
break;
@@ -279,6 +276,12 @@ void SheetDataContext::onEndElement()
maCurrCell.mnCellType = XML_TOKEN_INVALID;
}
}
+ if( maCurrCell.mnSharedId >= 0 )
+ {
+ Reference< XFormulaTokens > xTokens( maCurrCell.mxCell, UNO_QUERY_THROW );
+ ExtCellFormulaContext aContext( *this, xTokens, maCurrCell.maAddress );
+ getSharedFormulas().setSharedFormulaCell( aContext, maCurrCell.mnSharedId );
+ }
// store the cell formatting data
setCellFormat( maCurrCell );
diff --git a/sc/inc/dpobject.hxx b/sc/inc/dpobject.hxx
index d71040906443..5280cb0c3f73 100644
--- a/sc/inc/dpobject.hxx
+++ b/sc/inc/dpobject.hxx
@@ -322,6 +322,8 @@ public:
ScDPCollection(const ScDPCollection& r);
~ScDPCollection();
+ bool ClearCache(ScDPObject* pDPObj);
+
SC_DLLPUBLIC size_t GetCount() const;
SC_DLLPUBLIC ScDPObject* operator[](size_t nIndex);
SC_DLLPUBLIC const ScDPObject* operator[](size_t nIndex) const;
diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx
index 8e8ded033933..eda6c16baa2e 100644
--- a/sc/source/core/data/dpobject.cxx
+++ b/sc/source/core/data/dpobject.cxx
@@ -2575,6 +2575,41 @@ public:
}
+bool ScDPCollection::ClearCache(ScDPObject* pDPObj)
+{
+ if (pDPObj->IsSheetData())
+ {
+ // data source is internal sheet.
+ const ScSheetSourceDesc* pDesc = pDPObj->GetSheetDesc();
+ if (!pDesc)
+ return false;
+
+ if (pDesc->HasRangeName())
+ {
+ // cache by named range
+ ScDPCollection::NameCaches& rCaches = GetNameCaches();
+ rCaches.removeCache(pDesc->GetRangeName());
+ }
+ else
+ {
+ // cache by cell range
+ ScDPCollection::SheetCaches& rCaches = GetSheetCaches();
+ rCaches.removeCache(pDesc->GetSourceRange());
+ }
+ }
+ else if (pDPObj->IsImportData())
+ {
+ // data source is external database.
+ const ScImportSourceDesc* pDesc = pDPObj->GetImportSourceDesc();
+ if (!pDesc)
+ return false;
+
+ ScDPCollection::DBCaches& rCaches = GetDBCaches();
+ rCaches.removeCache(pDesc->GetCommandType(), pDesc->aDBName, pDesc->aObject);
+ }
+ return true;
+}
+
void ScDPCollection::DeleteOnTab( SCTAB nTab )
{
maTables.erase(
diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx
index d6d729ce1de2..4e2798e06ee9 100644
--- a/sc/source/filter/excel/xestream.cxx
+++ b/sc/source/filter/excel/xestream.cxx
@@ -861,10 +861,10 @@ OUString XclXmlUtils::ToOUString( const char* s )
OUString XclXmlUtils::ToOUString( const ScfUInt16Vec& rBuf, sal_Int32 nStart, sal_Int32 nLength )
{
- if( nLength == -1 )
- nLength = rBuf.size();
+ if( nLength == -1 || ( nLength > (rBuf.size() - nStart) ) )
+ nLength = (rBuf.size() - nStart);
- return OUString( &rBuf[nStart], nLength );
+ return (nLength > 0) ? OUString( &rBuf[nStart], nLength ) : OUString();
}
OUString XclXmlUtils::ToOUString( const String& s )
diff --git a/sc/source/ui/unoobj/dapiuno.cxx b/sc/source/ui/unoobj/dapiuno.cxx
index d1289cd205d8..65fe8a002dc8 100644
--- a/sc/source/ui/unoobj/dapiuno.cxx
+++ b/sc/source/ui/unoobj/dapiuno.cxx
@@ -1282,10 +1282,9 @@ void SAL_CALL ScDataPilotTableObj::refresh() throw(RuntimeException)
ScDPObject* pDPObj = lcl_GetDPObject(GetDocShell(), nTab, aName);
if (pDPObj)
{
- ScDPObject* pNew = new ScDPObject(*pDPObj);
ScDBDocFunc aFunc(*GetDocShell());
- aFunc.DataPilotUpdate( pDPObj, pNew, true, true );
- delete pNew; // DataPilotUpdate copies settings from "new" object
+ GetDocShell()->GetDocument()->GetDPCollection()->ClearCache(pDPObj);
+ aFunc.DataPilotUpdate( pDPObj, pDPObj, true, true );
}
}
diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx
index e8e5baafb1f7..ac4408238818 100644
--- a/sc/source/ui/view/dbfunc3.cxx
+++ b/sc/source/ui/view/dbfunc3.cxx
@@ -707,37 +707,10 @@ void ScDBFunc::RecalcPivotTable()
{
// Remove existing data cache for the data that this datapilot uses,
// to force re-build data cache.
- if (pDPObj->IsSheetData())
+ if (!pDPs->ClearCache(pDPObj))
{
- // data source is internal sheet.
- const ScSheetSourceDesc* pDesc = pDPObj->GetSheetDesc();
- if (!pDesc)
- {
- ErrorMessage(STR_PIVOT_NOTFOUND);
- return;
- }
- if (pDesc->HasRangeName())
- {
- ScDPCollection::NameCaches& rCaches = pDPs->GetNameCaches();
- rCaches.removeCache(pDesc->GetRangeName());
- }
- else
- {
- ScDPCollection::SheetCaches& rCaches = pDPs->GetSheetCaches();
- rCaches.removeCache(pDesc->GetSourceRange());
- }
- }
- else if (pDPObj->IsImportData())
- {
- // data source is external database.
- const ScImportSourceDesc* pDesc = pDPObj->GetImportSourceDesc();
- if (!pDesc)
- {
- ErrorMessage(STR_PIVOT_NOTFOUND);
- return;
- }
- ScDPCollection::DBCaches& rCaches = pDPs->GetDBCaches();
- rCaches.removeCache(pDesc->GetCommandType(), pDesc->aDBName, pDesc->aObject);
+ ErrorMessage(STR_PIVOT_NOTFOUND);
+ return;
}
ScDBDocFunc aFunc( *pDocSh );
diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx
index b69f2ace659a..5d34fa25d1c3 100644
--- a/sc/source/ui/view/output.cxx
+++ b/sc/source/ui/view/output.cxx
@@ -1634,6 +1634,7 @@ void ScOutputData::DrawRotatedFrame( const Color* pForceColor )
drawinglayer::processor2d::BaseProcessor2D* ScOutputData::CreateProcessor2D( )
{
+ pDoc->InitDrawLayer(pDoc->GetDocumentShell());
ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer();
if (!pDrawLayer)
return NULL;
diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk
index 83e82927e821..fce0a2b27a49 100644
--- a/solenv/inc/minor.mk
+++ b/solenv/inc/minor.mk
@@ -1,5 +1,5 @@
RSCVERSION=340
-RSCREVISION=340m1(Build:201)
-BUILD=201
+RSCREVISION=340m1(Build:202)
+BUILD=202
LAST_MINOR=m1
SOURCEVERSION=OOO340
diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx
index 21253b0fad86..641a8f6bcfaf 100644
--- a/starmath/source/view.cxx
+++ b/starmath/source/view.cxx
@@ -195,6 +195,8 @@ void SmGraphicWindow::MouseButtonDown(const MouseEvent& rMEvt)
if (pNode)
{ SmEditWindow *pEdit = pViewShell->GetEditWindow();
+ if (!pEdit)
+ return;
const SmToken aToken (pNode->GetToken());
// set selection to the beginning of the token
@@ -222,7 +224,8 @@ void SmGraphicWindow::GetFocus()
{
if (!IsInlineEditEnabled())
return;
- pViewShell->GetEditWindow()->Flush();
+ if (pViewShell->GetEditWindow())
+ pViewShell->GetEditWindow()->Flush();
//Let view shell know what insertions should be done in visual editor
pViewShell->SetInsertIntoEditWindow(false);
SetIsCursorVisible(true);
diff --git a/sw/source/core/txtnode/txtedt.cxx b/sw/source/core/txtnode/txtedt.cxx
index 22f7a2c0d548..cb371eb88efe 100644
--- a/sw/source/core/txtnode/txtedt.cxx
+++ b/sw/source/core/txtnode/txtedt.cxx
@@ -1803,6 +1803,10 @@ void SwTxtNode::CountWords( SwDocStat& rStat,
{ // not counting hidden paras
return;
}
+
+ // count of non-empty paras
+ ++rStat.nPara;
+
// Shortcut when counting whole paragraph and current count is clean
if ( isCountAll && !IsWordCountDirty() )
{
@@ -1842,8 +1846,6 @@ void SwTxtNode::CountWords( SwDocStat& rStat,
sal_uInt32 nTmpChars = 0; // count of all chars
sal_uInt32 nTmpCharsExcludingSpaces = 0; // all non-white chars
- ++rStat.nPara; // count of non-empty paras
-
// count words in masked and expanded text:
if( pBreakIt->GetBreakIter().is() )
{