diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2009-05-19 09:31:27 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2009-05-19 09:31:27 +0000 |
commit | 7adb1f5739d72fb0d5e5ced375c3771bc7df69de (patch) | |
tree | 27eac4acb19264bb47666d7f89c2a2a7b589215d /linguistic | |
parent | 756ad3800d5defb7f8cdf5404d14c9a20cc168d6 (diff) |
CWS-TOOLING: integrate CWS tl66
2009-05-15 12:28:55 +0200 tl r271932 : #i91812# include fixed
2009-05-07 16:52:41 +0200 tl r271680 : #i97200# one more MathML export problem to fix
2009-05-05 08:33:29 +0200 tl r271494 : #i99401# positiv user-dicts vs negativ user-dicts
2009-05-04 14:14:03 +0200 tl r271452 : #i97200# warning free code; MathML 2.0 export
2009-05-04 13:26:30 +0200 tl r271448 : #i97200# write valid MathML 2.0 on export
2009-04-29 14:21:54 +0200 tl r271371 : #i97200# new MathML token
2009-04-29 11:12:07 +0200 tl r271360 : #i97200# inroducing separate files for import and export
2009-04-28 16:47:42 +0200 tl r271331 : #i97200# better MathML pretty printing
2009-04-28 11:21:57 +0200 tl r271315 : #i97200# MathML attributes and default namespace for MathML
2009-04-28 11:21:24 +0200 tl r271314 : #i97200# MathML attributes and default namespace for MathML
2009-04-23 12:44:18 +0200 tl r271154 : #i97200# math.dtd removed
2009-04-23 12:31:56 +0200 tl r271151 : #i97200# MathML: don't use namespace on attributes
2009-04-22 13:21:11 +0200 tl r271099 : warning-free code
2009-04-22 12:20:13 +0200 tl r271092 : #i100757# loop fixed
2009-04-22 11:29:51 +0200 tl r271086 : #97327# adding mongolian fingerprint for language guessing
2009-04-22 11:25:56 +0200 tl r271083 : #97327# adding mongolian fingerprint for language guessing
2009-04-21 10:39:21 +0200 tl r271025 : #99599# code fix for LRE/RLE embedding
2009-04-20 16:36:33 +0200 tl r270992 : #i99604# HasDigits fixed
2009-04-20 14:44:19 +0200 tl r270985 : #i99604# warning-free code for Windows
2009-04-20 13:48:13 +0200 tl r270980 : #i99604# HasDigits fix for non-ASCII characters
2009-04-20 13:47:50 +0200 tl r270979 : #i99604# HasDigits fix for non-ASCII characters
2009-04-20 12:28:15 +0200 tl r270973 : warning-free code after merging
2009-04-20 10:16:19 +0200 tl r270964 : warning-free code after merging
2009-04-17 14:43:36 +0200 tl r270948 : #i96846#
2009-04-16 13:09:15 +0200 tl r270883 : CWS-TOOLING: rebase CWS tl66 to trunk@270723 (milestone: DEV300:m46)
2009-04-14 14:34:08 +0200 tl r270770 : #101067# warning-free code
2009-04-02 09:07:44 +0200 tl r270368 : #i100757# performance patch for start-up (initialize language guessing on demand only)
2009-03-11 10:37:59 +0100 tl r269301 : #i100083# fixed system dictionary lookup
2009-03-06 13:10:23 +0100 tl r268998 : warning-free code for Windows non-pro
2009-02-23 14:01:23 +0100 tl r268355 : #i99401# winning rules for user-dictionaries changed
2009-02-19 14:05:57 +0100 tl r268281 : #i98644# suggestion improvement when first checker does not know any suggestions
2009-02-19 14:05:02 +0100 tl r268280 : #i98644# suggestion improvement when first checker does not know any suggestions
2009-02-19 13:58:51 +0100 tl r268279 : #i98644# suggestion improvement when first checker does not know any suggestions
2009-02-19 11:38:03 +0100 tl r268266 : #i98644# suggestion improvement when first checker does not know any suggestions
2009-02-12 11:58:34 +0100 tl r267642 : #i96846# some properties declared as maybevoid
2009-02-06 12:43:55 +0100 tl r267454 : #i98644# provide sugestions from secondary spell checkers if the primary does not provide ones
2009-02-05 13:02:26 +0100 tl r267418 : #i98880# a bit clean-up in the grammar checking framework
2009-02-04 12:15:37 +0100 tl r267363 : #i91812# remove unused/duplicate code
2009-02-04 12:09:34 +0100 tl r267362 : #i91812# remove unused/duplicate code
2009-02-04 11:07:57 +0100 tl r267355 : #i91812# remove unused code
2009-02-04 11:06:48 +0100 tl r267354 : #i91812# remove unused code
2009-02-03 14:52:43 +0100 tl r267331 : #i91812# remove unused code
2009-02-03 14:26:00 +0100 tl r267324 : #i91198# adding fingerprint for luxembourgish
2009-02-03 14:20:58 +0100 tl r267323 : #i91198# adding fingerprint for luxembourgish
2009-02-03 14:18:33 +0100 tl r267322 : #i91198# adding fingerprint for luxembourgish
2009-02-03 13:56:39 +0100 tl r267319 : #i91812# remove unused code
2009-02-03 12:41:50 +0100 tl r267314 : #i48400# auto-spellcheck improvement when deleting wrong chars
2009-02-03 11:48:51 +0100 tl r267310 : #i91812# remove unused code
2009-02-03 11:14:29 +0100 tl r267307 : warning free code
2009-02-03 10:45:21 +0100 tl r267306 : #i91812# remove unused code
2009-02-03 10:37:04 +0100 tl r267304 : #i33387# name change for 'View/Selection'
2009-02-03 10:36:17 +0100 tl r267303 : #i33387# name change for 'View/Selection'
2009-02-03 10:32:12 +0100 tl r267302 : #i30642# spelling error in context menu fixed
2009-02-03 10:27:34 +0100 tl r267301 : #i92210# remove unused code types.cxx cfgitem.*
Diffstat (limited to 'linguistic')
-rw-r--r-- | linguistic/inc/lngprophelp.hxx (renamed from linguistic/inc/prophelp.hxx) | 21 | ||||
-rw-r--r-- | linguistic/inc/misc.hxx | 22 | ||||
-rw-r--r-- | linguistic/source/iprcache.cxx | 1 | ||||
-rw-r--r-- | linguistic/source/lngopt.cxx | 7 | ||||
-rw-r--r-- | linguistic/source/lngprophelp.cxx (renamed from linguistic/source/prophelp.cxx) | 40 | ||||
-rw-r--r-- | linguistic/source/lngsvcmgr.cxx | 12 | ||||
-rw-r--r-- | linguistic/source/makefile.mk | 2 | ||||
-rw-r--r-- | linguistic/source/misc.cxx | 68 | ||||
-rw-r--r-- | linguistic/source/spelldsp.cxx | 162 | ||||
-rw-r--r-- | linguistic/source/spelldta.cxx | 4 |
10 files changed, 215 insertions, 124 deletions
diff --git a/linguistic/inc/prophelp.hxx b/linguistic/inc/lngprophelp.hxx index f7519479dc71..9997326c65ab 100644 --- a/linguistic/inc/prophelp.hxx +++ b/linguistic/inc/lngprophelp.hxx @@ -28,13 +28,13 @@ * ************************************************************************/ -#ifndef _LINGUISTIC_PROPHELP_HXX_ -#define _LINGUISTIC_PROPHELP_HXX_ +#ifndef _LINGUISTIC_LNGPROPHELP_HXX_ +#define _LINGUISTIC_LNGPROPHELP_HXX_ #include <tools/solar.h> -#include <uno/lbnames.h> // CPPU_CURRENT_LANGUAGE_BINDING_NAME macro, which specify the environment type -#include <cppuhelper/implbase2.hxx> // helper for implementations +#include <uno/lbnames.h> +#include <cppuhelper/implbase2.hxx> #include <cppuhelper/interfacecontainer.h> #include <com/sun/star/beans/XPropertyChangeListener.hpp> #include <com/sun/star/beans/PropertyValues.hpp> @@ -83,12 +83,10 @@ class PropertyChgHelper : int nEvtFlags; // flags for event types allowed to be launched // default values - BOOL bIsGermanPreReform; BOOL bIsIgnoreControlCharacters; BOOL bIsUseDictionaryList; // return values, will be set to default value or current temporary value - BOOL bResIsGermanPreReform; BOOL bResIsIgnoreControlCharacters; BOOL bResIsUseDictionaryList; @@ -160,7 +158,6 @@ public: ::com::sun::star::uno::XInterface > & GetEvtObj() const { return xMyEvtObj; } - BOOL IsGermanPreReform() const { return bResIsGermanPreReform; } BOOL IsIgnoreControlCharacters() const { return bResIsIgnoreControlCharacters; } BOOL IsUseDictionaryList() const { return bResIsUseDictionaryList; } }; @@ -242,7 +239,7 @@ public: /////////////////////////////////////////////////////////////////////////// -class PropertyHelper_Hyph : +class PropertyHelper_Hyphen : public PropertyChgHelper { // default values @@ -256,8 +253,8 @@ class PropertyHelper_Hyph : nResHyphMinWordLength; // disallow use of copy-constructor and assignment-operator - PropertyHelper_Hyph( const PropertyHelper_Hyph & ); - PropertyHelper_Hyph & operator = ( const PropertyHelper_Hyph & ); + PropertyHelper_Hyphen( const PropertyHelper_Hyphen & ); + PropertyHelper_Hyphen & operator = ( const PropertyHelper_Hyphen & ); protected: // PropertyChgHelper @@ -267,12 +264,12 @@ protected: const ::com::sun::star::beans::PropertyChangeEvent& rEvt ); public: - PropertyHelper_Hyph( + PropertyHelper_Hyphen( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > &rxSource, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &rxPropSet); - virtual ~PropertyHelper_Hyph(); + virtual ~PropertyHelper_Hyphen(); virtual void SetTmpPropVals( const com::sun::star::beans::PropertyValues &rPropVals ); diff --git a/linguistic/inc/misc.hxx b/linguistic/inc/misc.hxx index f9565f2eb873..6f06948db4af 100644 --- a/linguistic/inc/misc.hxx +++ b/linguistic/inc/misc.hxx @@ -196,26 +196,16 @@ String ToUpper( const String &rText, INT16 nLanguage ); String ToTitle( const String &rText, INT16 nLanguage ); sal_Unicode ToLower( const sal_Unicode cChar, INT16 nLanguage ); sal_Unicode ToUpper( const sal_Unicode cChar, INT16 nLanguage ); -BOOL HasDigits( const String &rText ); +BOOL HasDigits( const ::rtl::OUString &rText ); BOOL IsNumeric( const String &rText ); /////////////////////////////////////////////////////////////////////////// -::com::sun::star::uno::Reference< - ::com::sun::star::uno::XInterface > - GetOneInstanceService( const char *pServiceName ); - -::com::sun::star::uno::Reference< - ::com::sun::star::beans::XPropertySet > - GetLinguProperties(); - -::com::sun::star::uno::Reference< - ::com::sun::star::linguistic2::XSearchableDictionaryList > - GetSearchableDictionaryList(); - -::com::sun::star::uno::Reference< - ::com::sun::star::linguistic2::XDictionaryList > - GetDictionaryList(); +::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > GetOneInstanceService( const char *pServiceName ); +::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > GetLinguProperties(); +::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XSearchableDictionaryList > GetSearchableDictionaryList(); +::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XDictionaryList > GetDictionaryList(); +::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XDictionary > GetIgnoreAllList(); /////////////////////////////////////////////////////////////////////////// diff --git a/linguistic/source/iprcache.cxx b/linguistic/source/iprcache.cxx index a9bb5c3da768..0e4cee1deaea 100644 --- a/linguistic/source/iprcache.cxx +++ b/linguistic/source/iprcache.cxx @@ -85,7 +85,6 @@ static const struct INT32 nPropHdl; } aFlushProperties[ NUM_FLUSH_PROPS ] = { - { UPN_IS_GERMAN_PRE_REFORM, UPH_IS_GERMAN_PRE_REFORM }, /* deprecated */ { UPN_IS_USE_DICTIONARY_LIST, UPH_IS_USE_DICTIONARY_LIST }, { UPN_IS_IGNORE_CONTROL_CHARACTERS, UPH_IS_IGNORE_CONTROL_CHARACTERS }, { UPN_IS_SPELL_UPPER_CASE, UPH_IS_SPELL_UPPER_CASE }, diff --git a/linguistic/source/lngopt.cxx b/linguistic/source/lngopt.cxx index 2ef63492c719..84055d97eaf1 100644 --- a/linguistic/source/lngopt.cxx +++ b/linguistic/source/lngopt.cxx @@ -204,17 +204,18 @@ void LinguOptions::GetValue( Any &rVal, INT32 nWID ) const INT16 *pnVal = 0; BOOL *pbVal = 0; + BOOL bDummy = FALSE; switch( nWID ) { - case WID_IS_GERMAN_PRE_REFORM : /*! deprecated !*/ break; + case WID_IS_GERMAN_PRE_REFORM : pbVal = &bDummy; /*! deprecated !*/ break; case WID_IS_USE_DICTIONARY_LIST : pbVal = &pData->bIsUseDictionaryList; break; case WID_IS_IGNORE_CONTROL_CHARACTERS : pbVal = &pData->bIsIgnoreControlCharacters; break; case WID_IS_HYPH_AUTO : pbVal = &pData->bIsHyphAuto; break; case WID_IS_HYPH_SPECIAL : pbVal = &pData->bIsHyphSpecial; break; case WID_IS_SPELL_AUTO : pbVal = &pData->bIsSpellAuto; break; - case WID_IS_SPELL_HIDE : /*! deprecated !*/ break; - case WID_IS_SPELL_IN_ALL_LANGUAGES :/*! deprecated !*/ break; + case WID_IS_SPELL_HIDE : pbVal = &bDummy; /*! deprecated !*/ break; + case WID_IS_SPELL_IN_ALL_LANGUAGES :pbVal = &bDummy; /*! deprecated !*/ break; case WID_IS_SPELL_SPECIAL : pbVal = &pData->bIsSpellSpecial; break; case WID_IS_WRAP_REVERSE : pbVal = &pData->bIsSpellReverse; break; case WID_DEFAULT_LANGUAGE : pnVal = &pData->nDefaultLanguage; break; diff --git a/linguistic/source/prophelp.cxx b/linguistic/source/lngprophelp.cxx index 7519f80d8619..debc3df2ad1a 100644 --- a/linguistic/source/prophelp.cxx +++ b/linguistic/source/lngprophelp.cxx @@ -30,6 +30,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_linguistic.hxx" + #include <tools/debug.hxx> #include <com/sun/star/linguistic2/LinguServiceEvent.hpp> @@ -38,9 +39,10 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <osl/mutex.hxx> -#include "misc.hxx" -#include "lngprops.hxx" -#include "prophelp.hxx" +#include <misc.hxx> +#include <lngprops.hxx> + +#include <lngprophelp.hxx> //using namespace utl; @@ -60,7 +62,6 @@ namespace linguistic static const char *aCH[] = { - UPN_IS_GERMAN_PRE_REFORM, /* deprectaed */ UPN_IS_IGNORE_CONTROL_CHARACTERS, UPN_IS_USE_DICTIONARY_LIST, }; @@ -127,7 +128,6 @@ void PropertyChgHelper::AddPropNames( const char *pNewNames[], INT32 nCount ) void PropertyChgHelper::SetDefaultValues() { - bResIsGermanPreReform = bIsGermanPreReform = FALSE; bResIsIgnoreControlCharacters = bIsIgnoreControlCharacters = TRUE; bResIsUseDictionaryList = bIsUseDictionaryList = TRUE; } @@ -144,12 +144,7 @@ void PropertyChgHelper::GetCurrentValues() BOOL *pbVal = NULL, *pbResVal = NULL; - if (pPropName[i].equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( UPN_IS_GERMAN_PRE_REFORM ) )) /* deprecated */ - { - pbVal = &bIsGermanPreReform; - pbResVal = &bResIsGermanPreReform; - } - else if (pPropName[i].equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( UPN_IS_IGNORE_CONTROL_CHARACTERS ) )) + if (pPropName[i].equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( UPN_IS_IGNORE_CONTROL_CHARACTERS ) )) { pbVal = &bIsIgnoreControlCharacters; pbResVal = &bResIsIgnoreControlCharacters; @@ -174,7 +169,6 @@ void PropertyChgHelper::SetTmpPropVals( const PropertyValues &rPropVals ) { // return value is default value unless there is an explicitly supplied // temporary value - bResIsGermanPreReform = bIsGermanPreReform; bResIsIgnoreControlCharacters = bIsIgnoreControlCharacters; bResIsUseDictionaryList = bIsUseDictionaryList; // @@ -187,8 +181,6 @@ void PropertyChgHelper::SetTmpPropVals( const PropertyValues &rPropVals ) BOOL *pbResVal = NULL; switch (pVal[i].Handle) { - case UPH_IS_GERMAN_PRE_REFORM : - pbResVal = &bResIsGermanPreReform; break; /* deprecated */ case UPH_IS_IGNORE_CONTROL_CHARACTERS : pbResVal = &bResIsIgnoreControlCharacters; break; case UPH_IS_USE_DICTIONARY_LIST : @@ -224,12 +216,6 @@ BOOL PropertyChgHelper::propertyChange_Impl( const PropertyChangeEvent& rEvt ) nLngSvcFlags = 0; break; } - case UPH_IS_GERMAN_PRE_REFORM : /* deprecated */ - { - pbVal = &bIsGermanPreReform; - bSCWA = bSWWA = TRUE; - break; - } case UPH_IS_USE_DICTIONARY_LIST : { pbVal = &bIsUseDictionaryList; @@ -588,7 +574,7 @@ static const char *aHP[] = }; -PropertyHelper_Hyph::PropertyHelper_Hyph( +PropertyHelper_Hyphen::PropertyHelper_Hyphen( const Reference< XInterface > & rxSource, Reference< XPropertySet > &rxPropSet ) : PropertyChgHelper ( rxSource, rxPropSet, AE_HYPHENATOR ) @@ -599,12 +585,12 @@ PropertyHelper_Hyph::PropertyHelper_Hyph( } -PropertyHelper_Hyph::~PropertyHelper_Hyph() +PropertyHelper_Hyphen::~PropertyHelper_Hyphen() { } -void PropertyHelper_Hyph::SetDefaultValues() +void PropertyHelper_Hyphen::SetDefaultValues() { PropertyChgHelper::SetDefaultValues(); @@ -614,7 +600,7 @@ void PropertyHelper_Hyph::SetDefaultValues() } -void PropertyHelper_Hyph::GetCurrentValues() +void PropertyHelper_Hyphen::GetCurrentValues() { PropertyChgHelper::GetCurrentValues(); @@ -653,7 +639,7 @@ void PropertyHelper_Hyph::GetCurrentValues() } -BOOL PropertyHelper_Hyph::propertyChange_Impl( const PropertyChangeEvent& rEvt ) +BOOL PropertyHelper_Hyphen::propertyChange_Impl( const PropertyChangeEvent& rEvt ) { BOOL bRes = PropertyChgHelper::propertyChange_Impl( rEvt ); @@ -689,7 +675,7 @@ BOOL PropertyHelper_Hyph::propertyChange_Impl( const PropertyChangeEvent& rEvt ) void SAL_CALL - PropertyHelper_Hyph::propertyChange( const PropertyChangeEvent& rEvt ) + PropertyHelper_Hyphen::propertyChange( const PropertyChangeEvent& rEvt ) throw(RuntimeException) { MutexGuard aGuard( GetLinguMutex() ); @@ -697,7 +683,7 @@ void SAL_CALL } -void PropertyHelper_Hyph::SetTmpPropVals( const PropertyValues &rPropVals ) +void PropertyHelper_Hyphen::SetTmpPropVals( const PropertyValues &rPropVals ) { PropertyChgHelper::SetTmpPropVals( rPropVals ); diff --git a/linguistic/source/lngsvcmgr.cxx b/linguistic/source/lngsvcmgr.cxx index b6e4fdcef6b5..41d805fe9212 100644 --- a/linguistic/source/lngsvcmgr.cxx +++ b/linguistic/source/lngsvcmgr.cxx @@ -881,8 +881,9 @@ void LngSvcMgr::GetAvailableSpellSvcs_Impl() xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>= xContext; xSvc = uno::Reference< linguistic2::XSpellChecker >( ( xCompFactory.is() ? xCompFactory->createInstanceWithContext( xContext ) : xFactory->createInstance() ), uno::UNO_QUERY ); } - catch (uno::Exception &) + catch (uno::Exception &rEx) { + (void) rEx; DBG_ASSERT( 0, "createInstance failed" ); } } @@ -946,8 +947,9 @@ void LngSvcMgr::GetAvailableGrammarSvcs_Impl() xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>= xContext; xSvc = uno::Reference< linguistic2::XProofreader >( ( xCompFactory.is() ? xCompFactory->createInstanceWithContext( xContext ) : xFactory->createInstance() ), uno::UNO_QUERY ); } - catch (uno::Exception &) + catch (uno::Exception &rEx) { + (void) rEx; DBG_ASSERT( 0, "createInstance failed" ); } } @@ -1010,8 +1012,9 @@ void LngSvcMgr::GetAvailableHyphSvcs_Impl() xSvc = uno::Reference< linguistic2::XHyphenator >( ( xCompFactory.is() ? xCompFactory->createInstanceWithContext( xContext ) : xFactory->createInstance() ), uno::UNO_QUERY ); } - catch (uno::Exception &) + catch (uno::Exception &rEx) { + (void) rEx; DBG_ASSERT( 0, "createInstance failed" ); } } @@ -1076,8 +1079,9 @@ void LngSvcMgr::GetAvailableThesSvcs_Impl() xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>= xContext; xSvc = uno::Reference< linguistic2::XThesaurus >( ( xCompFactory.is() ? xCompFactory->createInstanceWithContext( xContext ) : xFactory->createInstance() ), uno::UNO_QUERY ); } - catch (uno::Exception &) + catch (uno::Exception &rEx) { + (void) rEx; DBG_ASSERT( 0, "createInstance failed" ); } } diff --git a/linguistic/source/makefile.mk b/linguistic/source/makefile.mk index 037f595a5d90..0012a9acd156 100644 --- a/linguistic/source/makefile.mk +++ b/linguistic/source/makefile.mk @@ -52,11 +52,11 @@ SLOFILES = \ $(SLO)$/hyphdta.obj\ $(SLO)$/iprcache.obj\ $(SLO)$/lngopt.obj\ + $(SLO)$/lngprophelp.obj\ $(SLO)$/lngreg.obj\ $(SLO)$/lngsvcmgr.obj\ $(SLO)$/misc.obj\ $(SLO)$/misc2.obj\ - $(SLO)$/prophelp.obj\ $(SLO)$/spelldsp.obj\ $(SLO)$/spelldta.obj\ $(SLO)$/thesdsp.obj\ diff --git a/linguistic/source/misc.cxx b/linguistic/source/misc.cxx index 67ebf8e29e92..91beaa2e2c9f 100644 --- a/linguistic/source/misc.cxx +++ b/linguistic/source/misc.cxx @@ -796,17 +796,62 @@ sal_Unicode ToUpper( const sal_Unicode cChar, INT16 nLanguage ) return rCC.upper( cChar ).GetChar(0); } +// sorted(!) array of unicode ranges for code points that are exclusively(!) used as numbers +// and thus may NOT not be part of names or words like the Chinese/Japanese number characters +static const sal_uInt32 the_aDigitZeroes [] = +{ + 0x00000030, //0039 ; Decimal # Nd [10] DIGIT ZERO..DIGIT NINE + 0x00000660, //0669 ; Decimal # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE + 0x000006F0, //06F9 ; Decimal # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE + 0x000007C0, //07C9 ; Decimal # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE + 0x00000966, //096F ; Decimal # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE + 0x000009E6, //09EF ; Decimal # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE + 0x00000A66, //0A6F ; Decimal # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE + 0x00000AE6, //0AEF ; Decimal # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE + 0x00000B66, //0B6F ; Decimal # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE + 0x00000BE6, //0BEF ; Decimal # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE + 0x00000C66, //0C6F ; Decimal # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE + 0x00000CE6, //0CEF ; Decimal # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE + 0x00000D66, //0D6F ; Decimal # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE + 0x00000E50, //0E59 ; Decimal # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE + 0x00000ED0, //0ED9 ; Decimal # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE + 0x00000F20, //0F29 ; Decimal # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE + 0x00001040, //1049 ; Decimal # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE + 0x00001090, //1099 ; Decimal # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE + 0x000017E0, //17E9 ; Decimal # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE + 0x00001810, //1819 ; Decimal # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE + 0x00001946, //194F ; Decimal # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE + 0x000019D0, //19D9 ; Decimal # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE + 0x00001B50, //1B59 ; Decimal # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE + 0x00001BB0, //1BB9 ; Decimal # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE + 0x00001C40, //1C49 ; Decimal # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE + 0x00001C50, //1C59 ; Decimal # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE + 0x0000A620, //A629 ; Decimal # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE + 0x0000A8D0, //A8D9 ; Decimal # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE + 0x0000A900, //A909 ; Decimal # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE + 0x0000AA50, //AA59 ; Decimal # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE + 0x0000FF10, //FF19 ; Decimal # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE + 0x000104A0, //104A9 ; Decimal # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE + 0x0001D7CE //1D7FF ; Decimal # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE +}; -BOOL HasDigits( const String &rText ) +BOOL HasDigits( const OUString &rText ) { - xub_StrLen nLen = rText.Len(); + static const int nNumDigitZeroes = sizeof(the_aDigitZeroes) / sizeof(the_aDigitZeroes[0]); + const sal_Int32 nLen = rText.getLength(); - xub_StrLen i = 0; - while (i < nLen) + sal_Int32 i = 0; + while (i < nLen) // for all characters ... { - sal_Unicode cChar = rText.GetChar( i++ ); - if ((sal_Unicode)'0' <= cChar && cChar <= (sal_Unicode)'9') - return TRUE; + const sal_uInt32 nCodePoint = rText.iterateCodePoints( &i ); // handle unicode surrogates correctly... + for (int j = 0; j < nNumDigitZeroes; ++j) // ... check in all 0..9 ranges + { + sal_uInt32 nDigitZero = the_aDigitZeroes[ j ]; + if (nDigitZero > nCodePoint) + break; + if (/*nDigitZero <= nCodePoint &&*/ nCodePoint <= nDigitZero + 9) + return TRUE; + } } return FALSE; } @@ -877,6 +922,15 @@ uno::Reference< XDictionaryList > GetDictionaryList() GetOneInstanceService( SN_DICTIONARY_LIST ), UNO_QUERY ); } +uno::Reference< XDictionary > GetIgnoreAllList() +{ + uno::Reference< XDictionary > xRes; + uno::Reference< XDictionaryList > xDL( GetDictionaryList() ); + if (xDL.is()) + xRes = xDL->getDictionaryByName( A2OU("IgnoreAllList") ); + return xRes; +} + /////////////////////////////////////////////////////////////////////////// AppExitListener::AppExitListener() diff --git a/linguistic/source/spelldsp.cxx b/linguistic/source/spelldsp.cxx index d9882a3dbae8..48e64163dbe4 100644 --- a/linguistic/source/spelldsp.cxx +++ b/linguistic/source/spelldsp.cxx @@ -30,30 +30,25 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_linguistic.hxx" + #include <com/sun/star/uno/Reference.h> #include <com/sun/star/linguistic2/XSearchableDictionaryList.hpp> - #include <com/sun/star/linguistic2/SpellFailure.hpp> -#include <cppuhelper/factory.hxx> // helper for factories #include <com/sun/star/registry/XRegistryKey.hpp> + +#include <cppuhelper/factory.hxx> // helper for factories #include <unotools/localedatawrapper.hxx> +#include <unotools/processfactory.hxx> #include <tools/debug.hxx> #include <svtools/lngmisc.hxx> -#include <unotools/processfactory.hxx> +#include <osl/mutex.hxx> #include <vector> -#ifndef _SPELLIMP_HXX -#include <spelldsp.hxx> -#endif -#ifndef _LNGPROPS_HXX -#include <lngprops.hxx> -#endif - #include "spelldsp.hxx" #include "spelldta.hxx" #include "lngsvcmgr.hxx" -#include <osl/mutex.hxx> +#include "lngprops.hxx" using namespace utl; @@ -90,6 +85,7 @@ public: //size_t Size() const { return aVec.size(); } size_t Count() const; + void Prepend( const OUString &rText ); void Append( const OUString &rNew ); void Append( const std::vector< OUString > &rNew ); void Append( const Sequence< OUString > &rNew ); @@ -110,6 +106,12 @@ BOOL ProposalList::HasEntry( const OUString &rText ) const return bFound; } +void ProposalList::Prepend( const OUString &rText ) +{ + if (!HasEntry( rText )) + aVec.insert( aVec.begin(), rText ); +} + void ProposalList::Append( const OUString &rText ) { if (!HasEntry( rText )) @@ -279,6 +281,40 @@ Reference< XSpellAlternatives > SAL_CALL } +// returns the overall result of cross-checking with all user-dictionaries +// including the IgnoreAll list +static Reference< XDictionaryEntry > lcl_GetRulingDictionaryEntry( + const OUString &rWord, + LanguageType nLanguage ) +{ + Reference< XDictionaryEntry > xRes; + + // the order of winning from top to bottom is: + // 1) IgnoreAll list will always win + // 2) Negative dictionaries will win over positive dictionaries + Reference< XDictionary > xIgnoreAll( GetIgnoreAllList() ); + if (xIgnoreAll.is()) + xRes = xIgnoreAll->getEntry( rWord ); + if (!xRes.is()) + { + Reference< XDictionaryList > xDList( GetDictionaryList() ); + Reference< XDictionaryEntry > xNegEntry( SearchDicList( xDList, + rWord, nLanguage, FALSE, TRUE ) ); + if (xNegEntry.is()) + xRes = xNegEntry; + else + { + Reference< XDictionaryEntry > xPosEntry( SearchDicList( xDList, + rWord, nLanguage, TRUE, TRUE ) ); + if (xPosEntry.is()) + xRes = xPosEntry; + } + } + + return xRes; +} + + BOOL SpellCheckerDispatcher::isValid_Impl( const OUString& rWord, LanguageType nLanguage, @@ -432,22 +468,13 @@ BOOL SpellCheckerDispatcher::isValid_Impl( } } - // countercheck against results from dictionary which have precedence! + // cross-check against results from dictionaries which have precedence! if (bCheckDics && GetDicList().is() && IsUseDicList( rProperties, GetPropSet() )) { - Reference< XDictionaryList > xDList( GetDicList(), UNO_QUERY ); - Reference< XDictionaryEntry > xPosEntry( SearchDicList( xDList, - aChkWord, nLanguage, TRUE, TRUE ) ); - if (xPosEntry.is()) - bRes = TRUE; - else - { - Reference< XDictionaryEntry > xNegEntry( SearchDicList( xDList, - aChkWord, nLanguage, FALSE, TRUE ) ); - if (xNegEntry.is()) - bRes = FALSE; - } + Reference< XDictionaryEntry > xTmp( lcl_GetRulingDictionaryEntry( aChkWord, nLanguage ) ); + if (xTmp.is()) + bRes = !xTmp->isNegative(); } } @@ -505,8 +532,8 @@ Reference< XSpellAlternatives > SpellCheckerDispatcher::spell_Impl( // try already instantiated services first { - const Reference< XSpellChecker > *pRef = - pEntry->aSvcRefs.getConstArray(); + const Reference< XSpellChecker > *pRef = pEntry->aSvcRefs.getConstArray(); + sal_Int32 nNumSugestions = -1; while (i <= pEntry->nLastTriedSvcIndex && (!bTmpResValid || xTmpRes.is()) ) { @@ -530,9 +557,24 @@ Reference< XSpellAlternatives > SpellCheckerDispatcher::spell_Impl( else bTmpResValid = FALSE; - // remember first found alternatives only + // return first found result if the word is not known by any checker. + // But if that result has no suggestions use the first one that does + // provide suggestions for the misspelled word. if (!xRes.is() && bTmpResValid) + { xRes = xTmpRes; + nNumSugestions = 0; + if (xRes.is()) + nNumSugestions = xRes->getAlternatives().getLength(); + } + sal_Int32 nTmpNumSugestions = 0; + if (xTmpRes.is() && bTmpResValid) + nTmpNumSugestions = xTmpRes->getAlternatives().getLength(); + if (xRes.is() && nNumSugestions == 0 && nTmpNumSugestions > 0) + { + xRes = xTmpRes; + nNumSugestions = nTmpNumSugestions; + } ++i; } @@ -555,6 +597,7 @@ Reference< XSpellAlternatives > SpellCheckerDispatcher::spell_Impl( //! thus the service needs not to now about it //aArgs.getArray()[1] <<= GetDicList(); + sal_Int32 nNumSugestions = -1; while (i < nLen && (!bTmpResValid || xTmpRes.is())) { // create specific service via it's implementation name @@ -596,9 +639,24 @@ Reference< XSpellAlternatives > SpellCheckerDispatcher::spell_Impl( else bTmpResValid = FALSE; - // remember first found alternatives only + // return first found result if the word is not known by any checker. + // But if that result has no suggestions use the first one that does + // provide suggestions for the misspelled word. if (!xRes.is() && bTmpResValid) + { + xRes = xTmpRes; + nNumSugestions = 0; + if (xRes.is()) + nNumSugestions = xRes->getAlternatives().getLength(); + } + sal_Int32 nTmpNumSugestions = 0; + if (xTmpRes.is() && bTmpResValid) + nTmpNumSugestions = xTmpRes->getAlternatives().getLength(); + if (xRes.is() && nNumSugestions == 0 && nTmpNumSugestions > 0) + { xRes = xTmpRes; + nNumSugestions = nTmpNumSugestions; + } pEntry->nLastTriedSvcIndex = (INT16) i; ++i; @@ -634,42 +692,31 @@ Reference< XSpellAlternatives > SpellCheckerDispatcher::spell_Impl( if (GetDicList().is() && IsUseDicList( rProperties, GetPropSet() )) xDList = Reference< XDictionaryList >( GetDicList(), UNO_QUERY ); - // countercheck against results from dictionary which have precedence! + // cross-check against results from user-dictionaries which have precedence! if (bCheckDics && xDList.is()) { - Reference< XDictionaryEntry > xPosEntry( SearchDicList( xDList, - aChkWord, nLanguage, TRUE, TRUE ) ); - - if (xPosEntry.is()) + Reference< XDictionaryEntry > xTmp( lcl_GetRulingDictionaryEntry( aChkWord, nLanguage ) ); + if (xTmp.is()) { - xRes = NULL; // positive dictionaries have precedence over negative ones - eFailureType = -1; // no failure - } - else - { - Reference< XDictionaryEntry > xNegEntry( SearchDicList( xDList, - aChkWord, nLanguage, FALSE, TRUE ) ); - if (xNegEntry.is()) + if (xTmp->isNegative()) // positive entry found { eFailureType = SpellFailure::IS_NEGATIVE_WORD; // replacement text to be added to suggestions, if not empty - OUString aAddRplcTxt( xNegEntry->getReplacementText() ); + OUString aAddRplcTxt( xTmp->getReplacementText() ); // replacement text must not be in negative dictionary itself if (aAddRplcTxt.getLength() && !SearchDicList( xDList, aAddRplcTxt, nLanguage, FALSE, TRUE ).is()) { - aProposalList.Append( aAddRplcTxt ); -// // add suggestion if not already part of proposals -// if (!SeqHasEntry( aProposals, aAddRplcTxt)) -// { -// INT32 nLen = aProposals.getLength(); -// aProposals.realloc( nLen + 1); -// aProposals.getArray()[ nLen ] = aAddRplcTxt; -// } + aProposalList.Prepend( aAddRplcTxt ); } } + else // positive entry found + { + xRes = NULL; + eFailureType = -1; // no failure + } } } @@ -683,6 +730,7 @@ Reference< XSpellAlternatives > SpellCheckerDispatcher::spell_Impl( Sequence< OUString > aProposals = aProposalList.GetSequence(); // remove entries listed in negative dictionaries + // (we don't want to display suggestions that will be regarded as misspelledlater on) if (bCheckDics && xDList.is()) SeqRemoveNegEntries( aProposals, xDList, nLanguage ); @@ -693,7 +741,19 @@ Reference< XSpellAlternatives > SpellCheckerDispatcher::spell_Impl( xSetAlt->setFailureType( eFailureType ); } else - DBG_ASSERT( 0, "XSetSpellAlternatives not implemented!" ); + { + if (xRes.is()) + { + DBG_ASSERT( 0, "XSetSpellAlternatives not implemented!" ); + } + else if (aProposals.getLength() > 0) + { + // no xRes but Proposals found from the user-dictionaries. + // Thus we need to create an xRes... + xRes = new linguistic::SpellAlternatives( rWord, nLanguage, + SpellFailure::IS_NEGATIVE_WORD, aProposals ); + } + } } } diff --git a/linguistic/source/spelldta.cxx b/linguistic/source/spelldta.cxx index f3729f231132..2b3b44dd41be 100644 --- a/linguistic/source/spelldta.cxx +++ b/linguistic/source/spelldta.cxx @@ -151,8 +151,8 @@ void SearchSimilarText( const OUString &rText, INT16 nLanguage, { #if OSL_DEBUG_LEVEL > 1 DictionaryType eType = xDic->getDictionaryType(); - DBG_ASSERT( eType != DictionaryType_MIXED, - "unexpected dictionary type" ); + (void) eType; + DBG_ASSERT( eType != DictionaryType_MIXED, "unexpected dictionary type" ); #endif const Sequence< Reference< XDictionaryEntry > > aEntries = xDic->getEntries(); const Reference< XDictionaryEntry > *pEntries = aEntries.getConstArray(); |