Commits

Anonymous committed 78ba2b7 Merge

CWS-TOOLING: integrate CWS tl82

  • Participants
  • Parent commits fffdf69, 8545691

Comments (0)

Files changed (70)

File comphelper/inc/comphelper/docpasswordrequest.hxx

 #include <cppuhelper/implbase1.hxx>
 #include <cppuhelper/weak.hxx>
 
+
 namespace comphelper {
 
+class AbortContinuation;
+class PasswordContinuation;
+    
 // ============================================================================
 
 /** Selects which UNO document password request type to use. */
 
 // ============================================================================
 
-class AbortContinuation;
-class PasswordContinuation;
+class COMPHELPER_DLLPUBLIC SimplePasswordRequest : 
+        public ::com::sun::star::task::XInteractionRequest,
+        public ::cppu::OWeakObject
+{
+public:
+    explicit    SimplePasswordRequest( com::sun::star::task::PasswordRequestMode eMode );
+    virtual     ~SimplePasswordRequest();
+
+    // XInterface / OWeakObject
+    virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL acquire(  ) throw ();
+    virtual void SAL_CALL release(  ) throw ();
+
+    sal_Bool            isAbort() const;
+    sal_Bool            isPassword() const;
+
+    ::rtl::OUString     getPassword() const;
+
+private:
+    // XInteractionRequest                
+    virtual ::com::sun::star::uno::Any SAL_CALL getRequest() throw( ::com::sun::star::uno::RuntimeException );
+    virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > SAL_CALL getContinuations() throw( ::com::sun::star::uno::RuntimeException );
+
+private:
+    ::com::sun::star::uno::Any      maRequest;
+    ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > maContinuations;
+    AbortContinuation *             mpAbort;
+    PasswordContinuation *          mpPassword;
+};
+
+// ============================================================================
 
 /** Implements the task.XInteractionRequest interface for requesting a password
     string for a document.
     sal_Bool            getRecommendReadOnly() const;
 
 private:
-    virtual ::com::sun::star::uno::Any SAL_CALL
-                        getRequest() throw( ::com::sun::star::uno::RuntimeException );
-
-    virtual ::com::sun::star::uno::Sequence<
-                ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > SAL_CALL
-                        getContinuations() throw( ::com::sun::star::uno::RuntimeException );
+    // XInteractionRequest                
+    virtual ::com::sun::star::uno::Any SAL_CALL getRequest() throw( ::com::sun::star::uno::RuntimeException );
+    virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > SAL_CALL getContinuations() throw( ::com::sun::star::uno::RuntimeException );
 
 private:
-    ::com::sun::star::uno::Any maRequest;
+    ::com::sun::star::uno::Any      maRequest;
     ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > maContinuations;
-    AbortContinuation*  mpAbort;
-    PasswordContinuation* mpPassword;
-
-    sal_Bool mbPasswordToModify;
+    AbortContinuation *             mpAbort;
+    PasswordContinuation *          mpPassword;
 };
 
 // ============================================================================

File comphelper/source/misc/docpasswordrequest.cxx

 #include "comphelper/docpasswordrequest.hxx"
 #include <com/sun/star/task/DocumentMSPasswordRequest2.hpp>
 #include <com/sun/star/task/DocumentPasswordRequest2.hpp>
+#include <com/sun/star/task/PasswordRequest.hpp>
 #include <com/sun/star/task/XInteractionAbort.hpp>
 #include <com/sun/star/task/XInteractionPassword2.hpp>
 
 using ::com::sun::star::task::InteractionClassification_QUERY;
 using ::com::sun::star::task::DocumentMSPasswordRequest2;
 using ::com::sun::star::task::DocumentPasswordRequest2;
+using ::com::sun::star::task::PasswordRequest;
 using ::com::sun::star::task::PasswordRequestMode;
 using ::com::sun::star::task::XInteractionAbort;
 using ::com::sun::star::task::XInteractionContinuation;
 
 // ============================================================================
 
+SimplePasswordRequest::SimplePasswordRequest( PasswordRequestMode eMode )
+: mpAbort( NULL )
+, mpPassword( NULL )
+{
+    PasswordRequest aRequest( OUString(), Reference< XInterface >(),
+        InteractionClassification_QUERY, eMode );
+    maRequest <<= aRequest;
+    
+    maContinuations.realloc( 2 );
+    maContinuations[ 0 ].set( mpAbort = new AbortContinuation );
+    maContinuations[ 1 ].set( mpPassword = new PasswordContinuation );
+}
+
+SimplePasswordRequest::~SimplePasswordRequest()
+{
+}
+
+/*uno::*/Any SAL_CALL SimplePasswordRequest::queryInterface( const /*uno::*/Type& rType ) throw (RuntimeException)
+{
+    return ::cppu::queryInterface ( rType,
+            // OWeakObject interfaces
+            dynamic_cast< XInterface* > ( (XInteractionRequest *) this ),
+            static_cast< XWeak* > ( this ),
+            // my own interfaces
+            static_cast< XInteractionRequest*  > ( this ) );
+}    
+
+void SAL_CALL SimplePasswordRequest::acquire(  ) throw ()
+{
+    OWeakObject::acquire();
+}
+
+void SAL_CALL SimplePasswordRequest::release(  ) throw ()
+{
+    OWeakObject::release();
+}    
+
+sal_Bool SimplePasswordRequest::isAbort() const
+{
+    return mpAbort->isSelected();
+}
+
+sal_Bool SimplePasswordRequest::isPassword() const
+{
+    return mpPassword->isSelected();
+}
+
+OUString SimplePasswordRequest::getPassword() const
+{
+    return mpPassword->getPassword();
+}
+
+Any SAL_CALL SimplePasswordRequest::getRequest() throw( RuntimeException )
+{
+    return maRequest;
+}
+
+Sequence< Reference< XInteractionContinuation > > SAL_CALL SimplePasswordRequest::getContinuations() throw( RuntimeException )
+{
+    return maContinuations;
+}
+
+// ============================================================================
+
 DocPasswordRequest::DocPasswordRequest( DocPasswordRequestType eType,
         PasswordRequestMode eMode, const OUString& rDocumentName, sal_Bool bPasswordToModify )
 : mpAbort( NULL )
 , mpPassword( NULL )
-, mbPasswordToModify( bPasswordToModify )
 {
     switch( eType )
     {

File cui/source/dialogs/SpellDialog.cxx

 using namespace ::com::sun::star::beans;
 using namespace ::com::sun::star::linguistic2;
 
+using ::rtl::OUString;
+
 #define C2U(cChar) 					::rtl::OUString::createFromAscii(cChar)
 // struct SpellDialog_Impl ---------------------------------------------
 
   -----------------------------------------------------------------------*/
 void SpellDialog::InitUserDicts()
 {
-    sal_uInt16 nLang = aLanguageLB.GetSelectLanguage();
+    const LanguageType nLang = aLanguageLB.GetSelectLanguage();
 
 	const Reference< XDictionary >  *pDic = 0;
 
         pImpl->aDics = xDicList->getDictionaries();
     }
 
-    // Benutzerbuecher anzeigen
+    SvtLinguConfig aCfg;
+    const bool bHC = Application::GetSettings().GetStyleSettings().GetHighContrastMode();
+
+    // list suitable dictionaries
+    bool bEnable = false;
     const sal_Int32 nSize = pImpl->aDics.getLength();
     pDic = pImpl->aDics.getConstArray();
-    sal_Int32 i;
     delete aAddToDictMB.GetPopupMenu();
     PopupMenu* pMenu = new PopupMenu;
-    for (i = 0; i < nSize; ++i )
+    pMenu->SetMenuFlags(MENU_FLAG_NOAUTOMNEMONICS);
+    USHORT nItemId = 1;     // menu items should be enumerated from 1 and not 0
+    for (sal_Int32 i = 0; i < nSize; ++i)
     {
-        Reference< XDictionary >  xDic( pDic[i], UNO_QUERY );
-        if (!xDic.is() || SvxGetIgnoreAllList() == xDic)
+        uno::Reference< linguistic2::XDictionary >  xDicTmp( pDic[i], uno::UNO_QUERY );
+        if (!xDicTmp.is() || SvxGetIgnoreAllList() == xDicTmp)
             continue;
 
-        // add only active and not read-only dictionaries to list
-        // from which to choose from
-        Reference< frame::XStorable > xStor( xDic, UNO_QUERY );
-        if ( xDic->isActive()  &&  (!xStor.is() || !xStor->isReadonly()) )
+        uno::Reference< frame::XStorable > xStor( xDicTmp, uno::UNO_QUERY );
+        LanguageType nActLanguage = SvxLocaleToLanguage( xDicTmp->getLocale() );
+        if( xDicTmp->isActive()
+            &&  xDicTmp->getDictionaryType() != linguistic2::DictionaryType_NEGATIVE
+            && (nLang == nActLanguage || LANGUAGE_NONE == nActLanguage )
+            && (!xStor.is() || !xStor->isReadonly()) )
         {
-            sal_Bool bNegativ = xDic->getDictionaryType() == DictionaryType_NEGATIVE;
-            pMenu->InsertItem( (USHORT)i + 1, ::GetDicInfoStr( xDic->getName(),
-                                SvxLocaleToLanguage( xDic->getLocale() ), bNegativ ) );
+            pMenu->InsertItem( nItemId, xDicTmp->getName() );
+            bEnable = sal_True;
+
+            uno::Reference< lang::XServiceInfo > xSvcInfo( xDicTmp, uno::UNO_QUERY );
+            if (xSvcInfo.is())
+            {
+                OUString aDictionaryImageUrl( aCfg.GetSpellAndGrammarContextDictionaryImage(
+                        xSvcInfo->getImplementationName(), bHC) );
+                if (aDictionaryImageUrl.getLength() > 0)
+                {
+                    Image aImage( lcl_GetImageFromPngUrl( aDictionaryImageUrl ) );
+                    pMenu->SetItemImage( nItemId, aImage );
+                }
+            }
+
+            ++nItemId;
         }
     }
     aAddToDictMB.SetPopupMenu(pMenu);
-
-    aAddToDictMB.Disable();
-
-    sal_uInt16 k;
-    for ( k = 0; k < pMenu->GetItemCount(); ++k )
-	{
-        sal_uInt16 nId = pMenu->GetItemId(k) - 1;
-		sal_Bool bFound = sal_False;
-
-        const sal_uInt16 nDicLang  = SvxLocaleToLanguage( pDic[nId]->getLocale() );
-        const sal_Bool bDicNegativ =
-            pDic[nId]->getDictionaryType() == DictionaryType_NEGATIVE;
-        // Stimmt die Sprache "uberein, dann enable
-        if ((nDicLang == nLang || nDicLang == LANGUAGE_NONE) && !bDicNegativ)
-            bFound = sal_True;
-
-		if (bFound)
-		{
-            aAddToDictMB.Enable();
-			break;
-		}
-	}
+    aAddToDictMB.Enable( bEnable );
 }
 /*-- 20.10.2003 15:31:06---------------------------------------------------
 
 IMPL_LINK(SpellDialog, AddToDictionaryHdl, MenuButton*, pButton )
 {
     aSentenceED.UndoActionStart( SPELLUNDO_CHANGE_GROUP );
-    USHORT nItem = pButton->GetCurItemId();
 
     //GetErrorText() returns the current error even if the text is already
     //manually changed
-    String sNewWord= aSentenceED.GetErrorText();
+    const String aNewWord= aSentenceED.GetErrorText();
 
-    Reference< XDictionary >  xDic( pImpl->aDics.getConstArray()[ nItem - 1 ], UNO_QUERY );
+    USHORT nItemId = pButton->GetCurItemId();
+    PopupMenu *pMenu = pButton->GetPopupMenu();
+    String aDicName ( pMenu->GetItemText( nItemId ) );
+
+    uno::Reference< linguistic2::XDictionary >      xDic;
+    uno::Reference< linguistic2::XDictionaryList >  xDicList( SvxGetDictionaryList() );
+    if (xDicList.is())
+        xDic = xDicList->getDictionaryByName( aDicName );
+
     sal_Int16 nAddRes = DIC_ERR_UNKNOWN;
     if (xDic.is())
     {
-        String sTmpTxt( sNewWord );
-        sal_Bool bNegEntry = xDic->getDictionaryType() == DictionaryType_NEGATIVE;
-        nAddRes = linguistic::AddEntryToDic( xDic, sTmpTxt, bNegEntry,
-                ::rtl::OUString(), LANGUAGE_NONE );
+        nAddRes = linguistic::AddEntryToDic( xDic, aNewWord, FALSE, OUString(), LANGUAGE_NONE );
+        // save modified user-dictionary if it is persistent
+        uno::Reference< frame::XStorable >  xSavDic( xDic, uno::UNO_QUERY );
+        if (xSavDic.is())
+            xSavDic->store();
 
-        if(nAddRes == DIC_ERR_NONE)
+        if (nAddRes == DIC_ERR_NONE)
         {
             SpellUndoAction_Impl* pAction = new SpellUndoAction_Impl(
                             SPELLUNDO_CHANGE_ADD_TO_DICTIONARY, aDialogUndoLink);
-            pAction->SetDictionary(xDic);
-            pAction->SetAddedWord(sTmpTxt);
-            aSentenceED.AddUndoAction(pAction);
+            pAction->SetDictionary( xDic );
+            pAction->SetAddedWord( aNewWord );
+            aSentenceED.AddUndoAction( pAction );
         }
         // failed because there is already an entry?
-        if (DIC_ERR_NONE != nAddRes && xDic->getEntry( sTmpTxt ).is())
+        if (DIC_ERR_NONE != nAddRes && xDic->getEntry( aNewWord ).is())
             nAddRes = DIC_ERR_NONE;
     }
     if (DIC_ERR_NONE != nAddRes)
         SvxDicError( this, nAddRes );
         return 0;   // Nicht weitermachen
     }
-    // nach dem Aufnehmen ggf. '='-Zeichen entfernen
-    sNewWord.EraseAllChars( sal_Unicode( '=' ) );
 
     // go on
     SpellContinue_Impl();

File cui/source/dialogs/thesdlg.cxx

 #include <i18npool/mslangid.hxx>
 #include <comphelper/processfactory.hxx>
 #include <osl/file.hxx>
+#include <svl/lngmisc.hxx>
 
 
 #include <stack>
 #define A2S(x)          String::CreateFromAscii( x )
 
 
-
-// GetReplaceEditString -------------------------------
-
-static void GetReplaceEditString( String &rText )
-{
-    // The strings returned by the thesaurus saometimes have some
-    // explanation text put in between '(' and ')' or a trailing '*'.
-    // These parts should not be put in the ReplaceEdit Text that may get
-    // inserted into the document. Thus we strip them from the text.
-
-    xub_StrLen nPos = rText.Search( sal_Unicode('(') );
-    while (STRING_NOTFOUND != nPos)
-    {
-        xub_StrLen nEnd = rText.Search( sal_Unicode(')'), nPos );
-        if (STRING_NOTFOUND != nEnd)
-            rText.Erase( nPos, nEnd-nPos+1 );
-        else
-            break;
-        nPos = rText.Search( sal_Unicode('(') );
-    }
-
-    nPos = rText.Search( sal_Unicode('*') );
-	if (STRING_NOTFOUND != nPos)
-        rText.Erase( nPos );
-
-    // remove any possible remaining ' ' that may confuse the thesaurus
-    // when it gets called with the text
-    rText.EraseLeadingAndTrailingChars( sal_Unicode(' ') );
-}
-
 // class LookUpComboBox_Impl --------------------------------------------------
     
 LookUpComboBox_Impl::LookUpComboBox_Impl( 
     {
         USHORT nPos = pBox->GetSelectEntryPos();
         String aStr( pBox->GetEntry( nPos ) );
-        GetReplaceEditString( aStr );
+        aStr = linguistic::GetThesaurusReplaceText( aStr );
         aWordCB.SetText( aStr );
         LookUp_Impl();
     }
         if (pData && !pData->IsHeader())
         {
             aStr = pData->GetText(); 
-            GetReplaceEditString( aStr );
+            aStr = linguistic::GetThesaurusReplaceText( aStr );
         }
         aReplaceEdit.SetText( aStr );
     }
         if (pData && !pData->IsHeader())
         {
             aStr = pData->GetText(); 
-            GetReplaceEditString( aStr );
+            aStr = linguistic::GetThesaurusReplaceText( aStr );
         }
         
         aWordCB.SetText( aStr );

File cui/source/options/webconninfo.cxx

             ::rtl::OUString aURL = m_aPasswordsLB.GetEntryText( pEntry, 0 );
             ::rtl::OUString aUserName = m_aPasswordsLB.GetEntryText( pEntry, 1 );
 
-            ::comphelper::DocPasswordRequest* pPasswordRequest 
-                  = new ::comphelper::DocPasswordRequest(
-                      ::comphelper::DocPasswordRequestType_STANDARD, 
-                      task::PasswordRequestMode_PASSWORD_CREATE, aURL );
+            ::comphelper::SimplePasswordRequest* pPasswordRequest 
+                  = new ::comphelper::SimplePasswordRequest( task::PasswordRequestMode_PASSWORD_CREATE );
             uno::Reference< task::XInteractionRequest > rRequest( pPasswordRequest );
 
             uno::Reference< task::XInteractionHandler > xInteractionHandler(

File i18npool/source/breakiterator/breakiteratorImpl.cxx

                 nRet = ScriptType::WEAK;
             // workaround for Coptic
             else if ( 0x2C80 <= currentChar && 0x2CE3 >= currentChar)
-                nRet = ScriptType::LATIN;            
+                nRet = ScriptType::LATIN; 
+            // work-around for ligatures (see http://www.unicode.org/charts/PDF/UFB00.pdf)
+            else if ((0xFB00 <= currentChar && currentChar <= 0xFB06) || 
+                     (0xFB13 <= currentChar && currentChar <= 0xFB17))
+                nRet = ScriptType::LATIN; 
             else {
                 UBlockCode block=ublock_getCode(currentChar);
                 sal_uInt16 i;

File lingucomponent/source/hyphenator/altlinuxhyph/hyphen/hyphenimp.cxx

 #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 <i18npool/mslangid.hxx>
 #include <osl/mutex.hxx>
 
 #include <hyphen.h>
-
-#ifndef _HYPHENIMP_HXX
 #include <hyphenimp.hxx>
-#endif
 
 #include <linguistic/hyphdta.hxx>
 #include <rtl/ustring.hxx>
-
 #include <rtl/ustrbuf.hxx>
+#include <rtl/textenc.h>
 
 #include <linguistic/lngprops.hxx>
 #include <unotools/pathoptions.hxx>
 {
 	bDisposing = FALSE;
 	pPropHelper = NULL;
-        aDicts = NULL;
-        numdict = 0;
-
+    aDicts = NULL;
+    numdict = 0;
 }
 
 
 	if (pPropHelper)
 		pPropHelper->RemoveAsPropListener();
 
-        if ((numdict) && (aDicts)) {
-	  for (int i=0; i < numdict; i++) {
+    if ((numdict) && (aDicts)) 
+    {
+        for (int i=0; i < numdict; i++) 
+        {
             if (aDicts[i].apCC) delete aDicts[i].apCC;
             aDicts[i].apCC = NULL;
-	  }
+        }
 	}
-        if (aDicts) delete[] aDicts;
+    if (aDicts) delete[] aDicts;
 	aDicts = NULL;
-        numdict = 0;
+    numdict = 0;
 }
 
 
 PropertyHelper_Hyphen & Hyphenator::GetPropHelper_Impl()
 {
-
 	if (!pPropHelper)
 	{
 		Reference< XPropertySet	>	xPropSet( GetLinguProperties(), UNO_QUERY );
 
             // add dictionary information
             aDicts = new HDInfo[numdict];
-/*
-            aTEncs  = new rtl_TextEncoding [numdict];
-            aTLocs  = new Locale [numdict];
-            aTNames = new OUString [numdict];
-            aCharSetInfo = new CharClass* [numdict];
-*/
+            
             k = 0;
             for (aDictIt = aDics.begin();  aDictIt != aDics.end();  ++aDictIt)
             {
                     for (sal_Int32 i = 0;  i < nLocales;  ++i)
                     {
                         aDicts[k].aPtr = NULL;
-                        aDicts[k].aEnc = 0;
+                        aDicts[k].eEnc = RTL_TEXTENCODING_DONTKNOW;
                         aDicts[k].aLoc = MsLangId::convertLanguageToLocale(
                                         MsLangId::convertIsoStringToLanguage( aDictIt->aLocaleNames[i] ));
                         aDicts[k].apCC = new CharClass( aDicts[k].aLoc );
 }
 
 
-Reference< XHyphenatedWord > SAL_CALL
-Hyphenator::hyphenate( const ::rtl::OUString& aWord,
-		       const ::com::sun::star::lang::Locale& aLocale,
-		       sal_Int16 nMaxLeading,
-               const ::com::sun::star::beans::PropertyValues& aProperties )
-		       throw (com::sun::star::uno::RuntimeException,
-		       com::sun::star::lang::IllegalArgumentException)
+Reference< XHyphenatedWord > SAL_CALL Hyphenator::hyphenate( const ::rtl::OUString& aWord,
+       const ::com::sun::star::lang::Locale& aLocale,
+       sal_Int16 nMaxLeading,
+       const ::com::sun::star::beans::PropertyValues& aProperties )
+       throw (com::sun::star::uno::RuntimeException, com::sun::star::lang::IllegalArgumentException)
 {
 	int nHyphenationPos = -1;
-        int nHyphenationPosAlt = -1;
-        int nHyphenationPosAltHyph = -1;
+    int nHyphenationPosAlt = -1;
+    int nHyphenationPosAltHyph = -1;
 	int wordlen;
 	char *hyphens;
-        char *lcword;
-        int k = 0;
+    char *lcword;
+    int k = 0;
 
-        PropertyHelper_Hyphen & rHelper = GetPropHelper();
-        rHelper.SetTmpPropVals(aProperties);
+    PropertyHelper_Hyphen & rHelper = GetPropHelper();
+    rHelper.SetTmpPropVals(aProperties);
 	sal_Int16 minTrail = rHelper.GetMinTrailing();
 	sal_Int16 minLead = rHelper.GetMinLeading();
 	sal_Int16 minLen = rHelper.GetMinWordLength();
 
 	HyphenDict *dict = NULL;
-        rtl_TextEncoding aEnc = 0;
-        CharClass * pCC = NULL;
+    rtl_TextEncoding eEnc = RTL_TEXTENCODING_DONTKNOW;
+    CharClass * pCC = NULL;
 
 	Reference< XHyphenatedWord > xRes;
 
-        k = -1;
-        for (int j = 0; j < numdict; j++)
-          if (aLocale == aDicts[j].aLoc) k = j;
+    k = -1;
+    for (int j = 0; j < numdict; j++)
+    {
+        if (aLocale == aDicts[j].aLoc) 
+            k = j;
+    }
 
+    // if we have a hyphenation dictionary matching this locale
+    if (k != -1) 
+    {
+        // if this dictinary has not been loaded yet do that
+        if (!aDicts[k].aPtr) 
+        {
+            OUString DictFN = aDicts[k].aName + A2OU(".dic");
+            OUString dictpath;
 
-        // if we have a hyphenation dictionary matching this locale
-        if (k != -1) {
-
-	    // if this dictinary has not been loaded yet do that
-	    if (!aDicts[k].aPtr) {
-
-	       OUString DictFN = aDicts[k].aName + A2OU(".dic");
-	       OUString dictpath;
-
-           osl::FileBase::getSystemPathFromFileURL( DictFN, dictpath );
-           OString sTmp( OU2ENC( dictpath, osl_getThreadTextEncoding() ) );
+            osl::FileBase::getSystemPathFromFileURL( DictFN, dictpath );
+            OString sTmp( OU2ENC( dictpath, osl_getThreadTextEncoding() ) );
 
 #if defined(WNT)
-        // workaround for Windows specifc problem that the
-        // path length in calls to 'fopen' is limted to somewhat
-        // about 120+ characters which will usually be exceed when
-        // using dictionaries as extensions.
-        sTmp = Win_GetShortPathName( dictpath );
+            // workaround for Windows specifc problem that the
+            // path length in calls to 'fopen' is limted to somewhat
+            // about 120+ characters which will usually be exceed when
+            // using dictionaries as extensions.
+            sTmp = Win_GetShortPathName( dictpath );
 #endif
 
-          if ( ( dict = hnj_hyphen_load ( sTmp.getStr()) ) == NULL )
-		  {
-             fprintf(stderr, "Couldn't find file %s\n", OU2ENC(dictpath, osl_getThreadTextEncoding()) );
-		     return NULL;
-		  }
-	       aDicts[k].aPtr = dict;
-               aDicts[k].aEnc = rtl_getTextEncodingFromUnixCharset(dict->cset);
-               if (aDicts[k].aEnc == RTL_TEXTENCODING_DONTKNOW) {
-                  if (strcmp("ISCII-DEVANAGARI", dict->cset) == 0) {
-                     aDicts[k].aEnc = RTL_TEXTENCODING_ISCII_DEVANAGARI;
-                  } else if (strcmp("UTF-8", dict->cset) == 0) {
-                     aDicts[k].aEnc = RTL_TEXTENCODING_UTF8;
-                  }
-               }
-	    }
+            if ( ( dict = hnj_hyphen_load ( sTmp.getStr()) ) == NULL )
+            {
+               fprintf(stderr, "Couldn't find file %s\n", OU2ENC(dictpath, osl_getThreadTextEncoding()) );
+               return NULL;
+            }
+            aDicts[k].aPtr = dict;
+            aDicts[k].eEnc = getTextEncodingFromCharset(dict->cset);
+        }
 
-            // other wise hyphenate the word with that dictionary
-            dict = aDicts[k].aPtr;
-            aEnc = aDicts[k].aEnc;
-            pCC =  aDicts[k].apCC;
+        // other wise hyphenate the word with that dictionary
+        dict = aDicts[k].aPtr;
+        eEnc = aDicts[k].eEnc;
+        pCC =  aDicts[k].apCC;
 
-            sal_uInt16 ct = CAPTYPE_UNKNOWN;
-            ct = capitalType(aWord, pCC);
+        // we don't want to work with a default text encoding since following incorrect
+        // results may occur only for specific text and thus may be hard to notice.
+        // Thus better always make a clean exit here if the text encoding is in question.
+        // Hopefully something not working at all will raise proper attention quickly. ;-)
+        DBG_ASSERT( eEnc != RTL_TEXTENCODING_DONTKNOW, "failed to get text encoding! (maybe incorrect encoding string in file)" );
+        if (eEnc == RTL_TEXTENCODING_DONTKNOW)
+            return NULL;
 
-            // first convert any smart quotes or apostrophes to normal ones
+        sal_uInt16 ct = CAPTYPE_UNKNOWN;
+        ct = capitalType(aWord, pCC);
+
+        // first convert any smart quotes or apostrophes to normal ones
 	    OUStringBuffer rBuf(aWord);
-            sal_Int32 nc = rBuf.getLength();
-            sal_Unicode ch;
-	    for (sal_Int32 ix=0; ix < nc; ix++) {
+        sal_Int32 nc = rBuf.getLength();
+        sal_Unicode ch;
+        for (sal_Int32 ix=0; ix < nc; ix++) 
+        {
 	        ch = rBuf.charAt(ix);
-                if ((ch == 0x201C) || (ch == 0x201D)) rBuf.setCharAt(ix,(sal_Unicode)0x0022);
-                if ((ch == 0x2018) || (ch == 0x2019)) rBuf.setCharAt(ix,(sal_Unicode)0x0027);
-            }
-            OUString nWord(rBuf.makeStringAndClear());
+            if ((ch == 0x201C) || (ch == 0x201D)) 
+                rBuf.setCharAt(ix,(sal_Unicode)0x0022);
+            if ((ch == 0x2018) || (ch == 0x2019)) 
+                rBuf.setCharAt(ix,(sal_Unicode)0x0027);
+        }
+        OUString nWord(rBuf.makeStringAndClear());
 
-            // now convert word to all lowercase for pattern recognition
-            OUString nTerm(makeLowerCase(nWord, pCC));
+        // now convert word to all lowercase for pattern recognition
+        OUString nTerm(makeLowerCase(nWord, pCC));
 
-            // now convert word to needed encoding
-            OString encWord(OU2ENC(nTerm,aEnc));
+        // now convert word to needed encoding
+        OString encWord(OU2ENC(nTerm,eEnc));
 
 	    wordlen = encWord.getLength();
-            lcword = new char[wordlen + 1];
+        lcword = new char[wordlen + 1];
 	    hyphens = new char[wordlen + 5];
 
-            char ** rep = NULL; // replacements of discretionary hyphenation
-            int * pos = NULL; // array of [hyphenation point] minus [deletion position]
-            int * cut = NULL; // length of deletions in original word
+        char ** rep = NULL; // replacements of discretionary hyphenation
+        int * pos = NULL; // array of [hyphenation point] minus [deletion position]
+        int * cut = NULL; // length of deletions in original word
 
-            // copy converted word into simple char buffer
-            strcpy(lcword,encWord.getStr());
+        // copy converted word into simple char buffer
+        strcpy(lcword,encWord.getStr());
 
-            // now strip off any ending periods
-            int n = wordlen-1;
-	    while((n >=0) && (lcword[n] == '.')) n--;
-            n++;
-            if (n > 0) {
-	       if (hnj_hyphen_hyphenate3(dict, lcword, n, hyphens, NULL, &rep, &pos, &cut,
-	        minLead, minTrail, Max(dict->clhmin, Max(dict->clhmin, 2) + Max(0, minLead - Max(dict->lhmin, 2))),
-	        Max(dict->crhmin, Max(dict->crhmin, 2) + Max(0, minTrail - Max(dict->rhmin, 2)))))
-	       {
-	          //whoops something did not work
-	          delete[] hyphens;
-                  delete[] lcword;
-                  if (rep) {
-                    for(int j = 0; j < n; j++) {
+        // now strip off any ending periods
+        int n = wordlen-1;
+        while((n >=0) && (lcword[n] == '.')) 
+            n--;
+        n++;
+        if (n > 0) 
+        {
+            const bool bFailed = 0 != hnj_hyphen_hyphenate3( dict, lcword, n, hyphens, NULL, 
+                    &rep, &pos, &cut, minLead, minTrail, 
+                    Max(dict->clhmin, Max(dict->clhmin, 2) + Max(0, minLead  - Max(dict->lhmin, 2))),
+                    Max(dict->crhmin, Max(dict->crhmin, 2) + Max(0, minTrail - Max(dict->rhmin, 2))) );
+            if (bFailed)
+            {
+                //whoops something did not work
+                delete[] hyphens;
+                delete[] lcword;
+                if (rep) 
+                {
+                    for(int j = 0; j < n; j++) 
+                    {
                         if (rep[j]) free(rep[j]);
                     }
                     free(rep);
-                  }
-                  if (pos) free(pos);
-                  if (cut) free(cut);
-	          return NULL;
-	       }
+                }
+                if (pos) free(pos);
+                if (cut) free(cut);
+                return NULL;
             }
+        }
 
-            // now backfill hyphens[] for any removed trailing periods
-            for (int c = n; c < wordlen; c++) hyphens[c] = '0';
-            hyphens[wordlen] = '\0';
+        // now backfill hyphens[] for any removed trailing periods
+        for (int c = n; c < wordlen; c++) hyphens[c] = '0';
+        hyphens[wordlen] = '\0';
 
 	    INT32 Leading =  GetPosInWordToCheck( aWord, nMaxLeading );
 
 	    for (INT32 i = 0; i < n; i++)
 	    {
-                int leftrep = 0;
-                BOOL hit = (n >= minLen);
-                if (!rep || !rep[i] || (i >= n)) {
-                    hit = hit && (hyphens[i]&1) && (i < Leading);
-                    hit = hit && (i >= (minLead-1) );
-                    hit = hit && ((n - i - 1) >= minTrail);
-                } else {
-                    // calculate change character length before hyphenation point signed with '='
-                    for (char * c = rep[i]; *c && (*c != '='); c++) {
-                        if (aEnc == RTL_TEXTENCODING_UTF8) {
-                            if (((unsigned char) *c) >> 6 != 2) leftrep++;
-                        } else leftrep++;
+            int leftrep = 0;
+            BOOL hit = (n >= minLen);
+            if (!rep || !rep[i] || (i >= n)) 
+            {
+                hit = hit && (hyphens[i]&1) && (i < Leading);
+                hit = hit && (i >= (minLead-1) );
+                hit = hit && ((n - i - 1) >= minTrail);
+            } 
+            else 
+            {
+                // calculate change character length before hyphenation point signed with '='
+                for (char * c = rep[i]; *c && (*c != '='); c++) 
+                {
+                    if (eEnc == RTL_TEXTENCODING_UTF8) 
+                    {
+                        if (((unsigned char) *c) >> 6 != 2) 
+                            leftrep++;
+                    } 
+                    else 
+                        leftrep++;
+                }
+                hit = hit && (hyphens[i]&1) && ((i + leftrep - pos[i]) < Leading);
+                hit = hit && ((i + leftrep - pos[i]) >= (minLead-1) );
+                hit = hit && ((n - i - 1 + sal::static_int_cast< sal_sSize >(strlen(rep[i])) - leftrep - 1) >= minTrail);
+            }
+            if (hit) 
+            {
+                nHyphenationPos = i;
+                if (rep && (i < n) && rep[i]) 
+                {
+                    nHyphenationPosAlt = i - pos[i];
+                    nHyphenationPosAltHyph = i + leftrep - pos[i];
+                }
+            }
+        }
+
+        if (nHyphenationPos  == -1) 
+        {
+            xRes = NULL;
+        } 
+        else 
+        {
+            if (rep && rep[nHyphenationPos]) 
+            {
+                // remove equal sign
+                char * s = rep[nHyphenationPos];
+                int eq = 0;
+                for (; *s; s++) 
+                {
+                    if (*s == '=') eq = 1;
+                    if (eq) *s = *(s + 1);
+                }
+                OUString repHyphlow(rep[nHyphenationPos], strlen(rep[nHyphenationPos]), eEnc);
+                OUString repHyph;
+                switch (ct) 
+                {
+                    case CAPTYPE_ALLCAP:
+                    {
+                        repHyph = makeUpperCase(repHyphlow, pCC);
+                        break;
                     }
-                    hit = hit && (hyphens[i]&1) && ((i + leftrep - pos[i]) < Leading);
-                    hit = hit && ((i + leftrep - pos[i]) >= (minLead-1) );
-                    hit = hit && ((n - i - 1 + sal::static_int_cast< sal_sSize >(strlen(rep[i])) - leftrep - 1) >= minTrail);
-                }
-	        if (hit) {
-		    nHyphenationPos = i;
-                    if (rep && (i < n) && rep[i]) {
-                        nHyphenationPosAlt = i - pos[i];
-                        nHyphenationPosAltHyph = i + leftrep - pos[i];
+                    case CAPTYPE_INITCAP:
+                    {
+                        if (nHyphenationPosAlt == 0) 
+                            repHyph = makeInitCap(repHyphlow, pCC);
+                        else 
+                             repHyph = repHyphlow;
+                        break;
+                    }
+                    default:
+                    {
+                        repHyph = repHyphlow;
+                        break;
                     }
                 }
-	     }
 
-	     if (nHyphenationPos  == -1) {
-	         xRes = NULL;
-             } else {
-                if (rep && rep[nHyphenationPos]) {
-                    // remove equal sign
-                    char * s = rep[nHyphenationPos];
-                    int eq = 0;
-                    for (; *s; s++) {
-                        if (*s == '=') eq = 1;
-                        if (eq) *s = *(s + 1);
-                    }
-                    OUString repHyphlow(rep[nHyphenationPos], strlen(rep[nHyphenationPos]), aEnc);
-                    OUString repHyph;
-                    switch (ct) {
-	                   case CAPTYPE_ALLCAP:
-		             {
-                               repHyph = makeUpperCase(repHyphlow, pCC);
-                               break;
-                             }
-	                   case CAPTYPE_INITCAP:
-		             {
-                               if (nHyphenationPosAlt == 0) {
-                                    repHyph = makeInitCap(repHyphlow, pCC);
-                               } else {
-                                    repHyph = repHyphlow;
-                               }
-                               break;
-                             }
-                           default:
-		             {
-                               repHyph = repHyphlow;
-                               break;
-                             }
-		    }
+                // handle shortening
+                INT16 nPos = (INT16) ((nHyphenationPosAltHyph < nHyphenationPos) ?
+                nHyphenationPosAltHyph : nHyphenationPos);
+                // dicretionary hyphenation
+                xRes = new HyphenatedWord( aWord, LocaleToLanguage( aLocale ), nPos,
+                    aWord.replaceAt(nHyphenationPosAlt + 1, cut[nHyphenationPos], repHyph),
+                    (INT16) nHyphenationPosAltHyph);
+            }
+            else 
+            {
+                xRes = new HyphenatedWord( aWord, LocaleToLanguage( aLocale ),
+                    (INT16)nHyphenationPos, aWord, (INT16) nHyphenationPos);
+            }
+        }
 
-                    // handle shortening
-                    INT16 nPos = (INT16) ((nHyphenationPosAltHyph < nHyphenationPos) ?
-                        nHyphenationPosAltHyph : nHyphenationPos);
-                    // dicretionary hyphenation
-	            xRes = new HyphenatedWord( aWord, LocaleToLanguage( aLocale ), nPos,
-		        aWord.replaceAt(nHyphenationPosAlt + 1, cut[nHyphenationPos], repHyph),
-                        (INT16) nHyphenationPosAltHyph);
-                } else {
-                xRes = new HyphenatedWord( aWord, LocaleToLanguage( aLocale ),
-                        (INT16)nHyphenationPos, aWord, (INT16) nHyphenationPos);
-                }
-	    }
-
-            delete[] lcword;
+        delete[] lcword;
 	    delete[] hyphens;
-            if (rep) {
-                for(int j = 0; j < n; j++) {
-                    if (rep[j]) free(rep[j]);
-                }
-                free(rep);
+        if (rep) 
+        {
+            for(int j = 0; j < n; j++) 
+            {
+                if (rep[j]) free(rep[j]);
             }
-            if (pos) free(pos);
-            if (cut) free(cut);
+            free(rep);
+        }
+        if (pos) free(pos);
+        if (cut) free(cut);
 	    return xRes;
 	}
-        return NULL;
+    return NULL;
 }
 
 
-Reference < XHyphenatedWord > SAL_CALL
-    Hyphenator::queryAlternativeSpelling( const ::rtl::OUString& /*aWord*/,
-                  const ::com::sun::star::lang::Locale& /*aLocale*/,
-                  sal_Int16 /*nIndex*/,
-                  const ::com::sun::star::beans::PropertyValues& /*aProperties*/ )
-		throw(::com::sun::star::lang::IllegalArgumentException,
-		      ::com::sun::star::uno::RuntimeException)
+Reference < XHyphenatedWord > SAL_CALL Hyphenator::queryAlternativeSpelling( 
+        const ::rtl::OUString& /*aWord*/,
+        const ::com::sun::star::lang::Locale& /*aLocale*/,
+        sal_Int16 /*nIndex*/,
+        const ::com::sun::star::beans::PropertyValues& /*aProperties*/ )
+        throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
 {
   /* alternative spelling isn't supported by tex dictionaries */
   /* XXX: OOo's extended libhjn algorithm can support alternative spellings with extended TeX dic. */
   return NULL;
 }
 
-Reference< XPossibleHyphens > SAL_CALL
-	Hyphenator::createPossibleHyphens( const ::rtl::OUString& aWord,
-			       const ::com::sun::star::lang::Locale& aLocale,
-                   const ::com::sun::star::beans::PropertyValues& aProperties )
-		throw(::com::sun::star::lang::IllegalArgumentException,
-		      ::com::sun::star::uno::RuntimeException)
+Reference< XPossibleHyphens > SAL_CALL Hyphenator::createPossibleHyphens( const ::rtl::OUString& aWord,
+        const ::com::sun::star::lang::Locale& aLocale,
+        const ::com::sun::star::beans::PropertyValues& aProperties )
+        throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
+{
+    int wordlen;
+    char *hyphens;
+    char *lcword;
+    int k;
 
-{
-  int wordlen;
-  char *hyphens;
-  char *lcword;
-  int k;
+    PropertyHelper_Hyphen & rHelper = GetPropHelper();
+    rHelper.SetTmpPropVals(aProperties);
+    sal_Int16 minTrail = rHelper.GetMinTrailing();
+    sal_Int16 minLead = rHelper.GetMinLeading();
 
-  PropertyHelper_Hyphen & rHelper = GetPropHelper();
-  rHelper.SetTmpPropVals(aProperties);
-  sal_Int16 minTrail = rHelper.GetMinTrailing();
-  sal_Int16 minLead = rHelper.GetMinLeading();
+    HyphenDict *dict = NULL;
+    rtl_TextEncoding eEnc = RTL_TEXTENCODING_DONTKNOW;
+    CharClass* pCC = NULL;
 
-  HyphenDict *dict = NULL;
-  rtl_TextEncoding aEnc = 0;
-  CharClass* pCC = NULL;
+    Reference< XPossibleHyphens > xRes;
 
-  Reference< XPossibleHyphens > xRes;
+    k = -1;
+    for (int j = 0; j < numdict; j++)
+    {
+        if (aLocale == aDicts[j].aLoc) k = j;
+    }
 
-  k = -1;
-  for (int j = 0; j < numdict; j++)
-     if (aLocale == aDicts[j].aLoc) k = j;
+    // if we have a hyphenation dictionary matching this locale
+    if (k != -1) 
+    {
+        // if this dictioanry has not been loaded yet do that
+        if (!aDicts[k].aPtr) 
+        {
+            OUString DictFN = aDicts[k].aName + A2OU(".dic");
+            OUString dictpath;
 
-
-  // if we have a hyphenation dictionary matching this locale
-  if (k != -1) {
-
-      // if this dictioanry has not been loaded yet do that
-      if (!aDicts[k].aPtr) {
-
-         OUString DictFN = aDicts[k].aName + A2OU(".dic");
-         OUString dictpath;
-
-         osl::FileBase::getSystemPathFromFileURL( DictFN, dictpath );
-         OString sTmp( OU2ENC( dictpath, osl_getThreadTextEncoding() ) );
+            osl::FileBase::getSystemPathFromFileURL( DictFN, dictpath );
+            OString sTmp( OU2ENC( dictpath, osl_getThreadTextEncoding() ) );
 
 #if defined(WNT)
-        // workaround for Windows specifc problem that the
-        // path length in calls to 'fopen' is limted to somewhat
-        // about 120+ characters which will usually be exceed when
-        // using dictionaries as extensions.
-        sTmp = Win_GetShortPathName( dictpath );
+            // workaround for Windows specifc problem that the
+            // path length in calls to 'fopen' is limted to somewhat
+            // about 120+ characters which will usually be exceed when
+            // using dictionaries as extensions.
+            sTmp = Win_GetShortPathName( dictpath );
 #endif
 
-	    if ( ( dict = hnj_hyphen_load ( sTmp.getStr()) ) == NULL )
-	    {
-           fprintf(stderr, "Couldn't find file %s and %s\n", sTmp.getStr(), OU2ENC(dictpath, osl_getThreadTextEncoding()) );
-	       return NULL;
-	    }
-        aDicts[k].aPtr = dict;
-         aDicts[k].aEnc = rtl_getTextEncodingFromUnixCharset(dict->cset);
-         if (aDicts[k].aEnc == RTL_TEXTENCODING_DONTKNOW) {
-            if (strcmp("ISCII-DEVANAGARI", dict->cset) == 0) {
-               aDicts[k].aEnc = RTL_TEXTENCODING_ISCII_DEVANAGARI;
-            } else if (strcmp("UTF-8", dict->cset) == 0) {
-               aDicts[k].aEnc = RTL_TEXTENCODING_UTF8;
+            if ( ( dict = hnj_hyphen_load ( sTmp.getStr()) ) == NULL )
+            {
+               fprintf(stderr, "Couldn't find file %s and %s\n", sTmp.getStr(), OU2ENC(dictpath, osl_getThreadTextEncoding()) );
+               return NULL;
             }
-         }
-      }
+            aDicts[k].aPtr = dict;
+            aDicts[k].eEnc = getTextEncodingFromCharset(dict->cset);
+        }
 
-      // other wise hyphenate the word with that dictionary
-      dict = aDicts[k].aPtr;
-      aEnc = aDicts[k].aEnc;
-      pCC  = aDicts[k].apCC;
+        // other wise hyphenate the word with that dictionary
+        dict = aDicts[k].aPtr;
+        eEnc = aDicts[k].eEnc;
+        pCC  = aDicts[k].apCC;
 
-      // first handle smart quotes both single and double
-      OUStringBuffer rBuf(aWord);
-      sal_Int32 nc = rBuf.getLength();
-      sal_Unicode ch;
-      for (sal_Int32 ix=0; ix < nc; ix++) {
-	  ch = rBuf.charAt(ix);
-          if ((ch == 0x201C) || (ch == 0x201D)) rBuf.setCharAt(ix,(sal_Unicode)0x0022);
-          if ((ch == 0x2018) || (ch == 0x2019)) rBuf.setCharAt(ix,(sal_Unicode)0x0027);
-      }
-      OUString nWord(rBuf.makeStringAndClear());
+        // we don't want to work with a default text encoding since following incorrect
+        // results may occur only for specific text and thus may be hard to notice.
+        // Thus better always make a clean exit here if the text encoding is in question.
+        // Hopefully something not working at all will raise proper attention quickly. ;-)
+        DBG_ASSERT( eEnc != RTL_TEXTENCODING_DONTKNOW, "failed to get text encoding! (maybe incorrect encoding string in file)" );
+        if (eEnc == RTL_TEXTENCODING_DONTKNOW)
+            return NULL;
 
-      // now convert word to all lowercase for pattern recognition
-      OUString nTerm(makeLowerCase(nWord, pCC));
+        // first handle smart quotes both single and double
+        OUStringBuffer rBuf(aWord);
+        sal_Int32 nc = rBuf.getLength();
+        sal_Unicode ch;
+        for (sal_Int32 ix=0; ix < nc; ix++) 
+        {
+            ch = rBuf.charAt(ix);
+            if ((ch == 0x201C) || (ch == 0x201D)) 
+                rBuf.setCharAt(ix,(sal_Unicode)0x0022);
+            if ((ch == 0x2018) || (ch == 0x2019)) 
+                rBuf.setCharAt(ix,(sal_Unicode)0x0027);
+        }
+        OUString nWord(rBuf.makeStringAndClear());
 
-      // now convert word to needed encoding
-      OString encWord(OU2ENC(nTerm,aEnc));
+        // now convert word to all lowercase for pattern recognition
+        OUString nTerm(makeLowerCase(nWord, pCC));
 
-      wordlen = encWord.getLength();
-      lcword = new char[wordlen+1];
-      hyphens = new char[wordlen+5];
-      char ** rep = NULL; // replacements of discretionary hyphenation
-      int * pos = NULL; // array of [hyphenation point] minus [deletion position] 
-      int * cut = NULL; // length of deletions in original word
+        // now convert word to needed encoding
+        OString encWord(OU2ENC(nTerm,eEnc));
 
-      // copy converted word into simple char buffer
-      strcpy(lcword,encWord.getStr());
+        wordlen = encWord.getLength();
+        lcword = new char[wordlen+1];
+        hyphens = new char[wordlen+5];
+        char ** rep = NULL; // replacements of discretionary hyphenation
+        int * pos = NULL; // array of [hyphenation point] minus [deletion position] 
+        int * cut = NULL; // length of deletions in original word
 
-      // first remove any trailing periods
-      int n = wordlen-1;
-      while((n >=0) && (lcword[n] == '.')) n--;
-      n++;
-      // fprintf(stderr,"hyphenate... %s\n",lcword); fflush(stderr);
-      if (n > 0) {
-         if (hnj_hyphen_hyphenate3(dict, lcword, n, hyphens, NULL, &rep, &pos, &cut,
-            minLead, minTrail, Max(dict->clhmin, Max(dict->clhmin, 2) + Max(0, minLead - Max(dict->lhmin, 2))),
-            Max(dict->crhmin, Max(dict->crhmin, 2) + Max(0, minTrail - Max(dict->rhmin, 2)))))
-         {
-             delete[] hyphens;
-             delete[] lcword;
+        // copy converted word into simple char buffer
+        strcpy(lcword,encWord.getStr());
 
-             if (rep) {
-                 for(int j = 0; j < n; j++) {
-                     if (rep[j]) free(rep[j]);
-                 }
-                 free(rep);
-             }
-             if (pos) free(pos);
-             if (cut) free(cut);
+        // first remove any trailing periods
+        int n = wordlen-1;
+        while((n >=0) && (lcword[n] == '.')) 
+            n--;
+        n++;
+        // fprintf(stderr,"hyphenate... %s\n",lcword); fflush(stderr);
+        if (n > 0) 
+        {
+            const bool bFailed = 0 != hnj_hyphen_hyphenate3(dict, lcword, n, hyphens, NULL, 
+                    &rep, &pos, &cut, minLead, minTrail, 
+                    Max(dict->clhmin, Max(dict->clhmin, 2) + Max(0, minLead - Max(dict->lhmin, 2))),
+                    Max(dict->crhmin, Max(dict->crhmin, 2) + Max(0, minTrail - Max(dict->rhmin, 2))) );
+            if (bFailed)
+            {
+                delete[] hyphens;
+                delete[] lcword;
 
-             return NULL;
-         }
-      }
-      // now backfill hyphens[] for any removed periods
-      for (int c = n; c < wordlen; c++) hyphens[c] = '0';
-      hyphens[wordlen] = '\0';
-      // fprintf(stderr,"... %s\n",hyphens); fflush(stderr);
+                if (rep) 
+                {
+                    for(int j = 0; j < n; j++) 
+                    {
+                        if (rep[j]) free(rep[j]);
+                    }
+                    free(rep);
+                }
+                if (pos) free(pos);
+                if (cut) free(cut);
 
-      INT16 nHyphCount = 0;
-      INT16 i;
+                return NULL;
+            }
+        }
+        // now backfill hyphens[] for any removed periods
+        for (int c = n; c < wordlen; c++) 
+            hyphens[c] = '0';
+        hyphens[wordlen] = '\0';
+        // fprintf(stderr,"... %s\n",hyphens); fflush(stderr);
 
-      for ( i = 0; i < encWord.getLength(); i++)
-        if (hyphens[i]&1 && (!rep || !rep[i]))
-          nHyphCount++;
+        INT16 nHyphCount = 0;
+        INT16 i;
 
-      Sequence< INT16 > aHyphPos(nHyphCount);
-      INT16 *pPos = aHyphPos.getArray();
-      OUStringBuffer hyphenatedWordBuffer;
-      OUString hyphenatedWord;
-      nHyphCount = 0;
+        for ( i = 0; i < encWord.getLength(); i++)
+        {
+            if (hyphens[i]&1 && (!rep || !rep[i]))
+                nHyphCount++;
+        }
 
-      for (i = 0; i < nWord.getLength(); i++) {
-          hyphenatedWordBuffer.append(aWord[i]);
-          // hyphenation position (not alternative)
-          if (hyphens[i]&1 && (!rep || !rep[i])) {
-              pPos[nHyphCount] = i;
-              hyphenatedWordBuffer.append(sal_Unicode('='));
-              nHyphCount++;
-          }
-      }
+        Sequence< INT16 > aHyphPos(nHyphCount);
+        INT16 *pPos = aHyphPos.getArray();
+        OUStringBuffer hyphenatedWordBuffer;
+        OUString hyphenatedWord;
+        nHyphCount = 0;
 
-      hyphenatedWord = hyphenatedWordBuffer.makeStringAndClear();
-      //fprintf(stderr,"result is %s\n",OU2A(hyphenatedWord));
-      //fflush(stderr);
+        for (i = 0; i < nWord.getLength(); i++) 
+        {
+            hyphenatedWordBuffer.append(aWord[i]);
+            // hyphenation position (not alternative)
+            if (hyphens[i]&1 && (!rep || !rep[i])) 
+            {
+                pPos[nHyphCount] = i;
+                hyphenatedWordBuffer.append(sal_Unicode('='));
+                nHyphCount++;
+            }
+        }
 
-      xRes = new PossibleHyphens( aWord, LocaleToLanguage( aLocale ),
-				hyphenatedWord, aHyphPos );
+        hyphenatedWord = hyphenatedWordBuffer.makeStringAndClear();
+        //fprintf(stderr,"result is %s\n",OU2A(hyphenatedWord));
+        //fflush(stderr);
 
-      delete[] hyphens;
-      delete[] lcword;
+        xRes = new PossibleHyphens( aWord, LocaleToLanguage( aLocale ),
+                  hyphenatedWord, aHyphPos );
 
-      if (rep) {
-          for(int j = 0; j < n; j++) {
-              if (rep[j]) free(rep[j]);
-          }
-          free(rep);
-      }
-      if (pos) free(pos);
-      if (cut) free(cut);
+        delete[] hyphens;
+        delete[] lcword;
 
-      return xRes;
-  }
+        if (rep) 
+        {
+            for(int j = 0; j < n; j++) 
+            {
+                if (rep[j]) free(rep[j]);
+            }
+            free(rep);
+        }
+        if (pos) free(pos);
+        if (cut) free(cut);
 
-  return NULL;
+        return xRes;
+    }
 
+    return NULL;
 }
 
 sal_uInt16 SAL_CALL Hyphenator::capitalType(const OUString& aTerm, CharClass * pCC)
 {
-        sal_Int32 tlen = aTerm.getLength();
-        if ((pCC) && (tlen)) {
-              String aStr(aTerm);
-              sal_Int32 nc = 0;
-              for (xub_StrLen tindex = 0; tindex < tlen;  tindex++) {
-	           if (pCC->getCharacterType(aStr,tindex) &
-                       ::com::sun::star::i18n::KCharacterType::UPPER) nc++;
-	      }
+    sal_Int32 tlen = aTerm.getLength();
+    if ((pCC) && (tlen)) 
+    {
+        String aStr(aTerm);
+        sal_Int32 nc = 0;
+        for (xub_StrLen tindex = 0; tindex < tlen;  tindex++) 
+        {
+            if (pCC->getCharacterType(aStr,tindex) & ::com::sun::star::i18n::KCharacterType::UPPER) 
+                nc++;
+        }
 
-              if (nc == 0) return (sal_uInt16) CAPTYPE_NOCAP;
+        if (nc == 0) 
+            return (sal_uInt16) CAPTYPE_NOCAP;
+        if (nc == tlen) 
+            return (sal_uInt16) CAPTYPE_ALLCAP;
+        if ((nc == 1) && (pCC->getCharacterType(aStr,0) & ::com::sun::star::i18n::KCharacterType::UPPER))
+            return (sal_uInt16) CAPTYPE_INITCAP;
 
-              if (nc == tlen) return (sal_uInt16) CAPTYPE_ALLCAP;
-
-              if ((nc == 1) && (pCC->getCharacterType(aStr,0) &
-                      ::com::sun::star::i18n::KCharacterType::UPPER))
-                   return (sal_uInt16) CAPTYPE_INITCAP;
-
-              return (sal_uInt16) CAPTYPE_MIXED;
-	}
-        return (sal_uInt16) CAPTYPE_UNKNOWN;
+        return (sal_uInt16) CAPTYPE_MIXED;
+    }
+    return (sal_uInt16) CAPTYPE_UNKNOWN;
 }
 
 OUString SAL_CALL Hyphenator::makeLowerCase(const OUString& aTerm, CharClass * pCC)
 {
-        if (pCC)
-	  return pCC->toLower_rtl(aTerm, 0, aTerm.getLength());
-        return aTerm;
+    if (pCC)
+        return pCC->toLower_rtl(aTerm, 0, aTerm.getLength());
+    return aTerm;
 }
 
 OUString SAL_CALL Hyphenator::makeUpperCase(const OUString& aTerm, CharClass * pCC)
 {
-        if (pCC)
-              return pCC->toUpper_rtl(aTerm, 0, aTerm.getLength());
-        return aTerm;
+    if (pCC)
+        return pCC->toUpper_rtl(aTerm, 0, aTerm.getLength());
+    return aTerm;
 }
 
 
 OUString SAL_CALL Hyphenator::makeInitCap(const OUString& aTerm, CharClass * pCC)
 {
-        sal_Int32 tlen = aTerm.getLength();
-        if ((pCC) && (tlen)) {
-              OUString bTemp = aTerm.copy(0,1);
-              if (tlen > 1)
-                   return ( pCC->toUpper_rtl(bTemp, 0, 1)
-                             + pCC->toLower_rtl(aTerm,1,(tlen-1)) );
+    sal_Int32 tlen = aTerm.getLength();
+    if ((pCC) && (tlen)) 
+    {
+        OUString bTemp = aTerm.copy(0,1);
+        if (tlen > 1)
+            return ( pCC->toUpper_rtl(bTemp, 0, 1) + pCC->toLower_rtl(aTerm,1,(tlen-1)) );
 
-	      return pCC->toUpper_rtl(bTemp, 0, 1);
+        return pCC->toUpper_rtl(bTemp, 0, 1);
 	}
-        return aTerm;
+    return aTerm;
 }
 
 
-
-
 Reference< XInterface > SAL_CALL Hyphenator_CreateInstance(
-            const Reference< XMultiServiceFactory > & /*rSMgr*/ )
-		throw(Exception)
+        const Reference< XMultiServiceFactory > & /*rSMgr*/ )
+        throw(Exception)
 {
-
 	Reference< XInterface > xService = (cppu::OWeakObject*) new Hyphenator;
 	return xService;
 }
 
 
-sal_Bool SAL_CALL
-	Hyphenator::addLinguServiceEventListener(
-			const Reference< XLinguServiceEventListener >& rxLstnr )
-		throw(RuntimeException)
+sal_Bool SAL_CALL Hyphenator::addLinguServiceEventListener(
+        const Reference< XLinguServiceEventListener >& rxLstnr )
+        throw(RuntimeException)
 {
 	MutexGuard	aGuard( GetLinguMutex() );
 
 }
 
 
-sal_Bool SAL_CALL
-	Hyphenator::removeLinguServiceEventListener(
-			const Reference< XLinguServiceEventListener >& rxLstnr )
-		throw(RuntimeException)
+sal_Bool SAL_CALL Hyphenator::removeLinguServiceEventListener(
+        const Reference< XLinguServiceEventListener >& rxLstnr )
+        throw(RuntimeException)
 {
 	MutexGuard	aGuard( GetLinguMutex() );
 
 }
 
 
-OUString SAL_CALL
-    Hyphenator::getServiceDisplayName( const Locale& /*rLocale*/ )
-		throw(RuntimeException)
+OUString SAL_CALL Hyphenator::getServiceDisplayName( const Locale& /*rLocale*/ )
+        throw(RuntimeException)
 {
 	MutexGuard	aGuard( GetLinguMutex() );
 	return A2OU( "Libhyphen Hyphenator" );
 }
 
 
-void SAL_CALL
-	Hyphenator::initialize( const Sequence< Any >& rArguments )
+void SAL_CALL Hyphenator::initialize( const Sequence< Any >& rArguments )
 		throw(Exception, RuntimeException)
 {
 	MutexGuard	aGuard( GetLinguMutex() );
 			xPropHelper = pPropHelper;
 			pPropHelper->AddAsPropListener();	//! after a reference is established
 		}
-		else {
+        else 
+        {
 			DBG_ERROR( "wrong number of arguments in sequence" );
         }
-
 	}
 }
 
 
-void SAL_CALL
-	Hyphenator::dispose()
+void SAL_CALL Hyphenator::dispose()
 		throw(RuntimeException)
 {
 	MutexGuard	aGuard( GetLinguMutex() );
 }
 
 
-void SAL_CALL
-	Hyphenator::addEventListener( const Reference< XEventListener >& rxListener )
+void SAL_CALL Hyphenator::addEventListener( const Reference< XEventListener >& rxListener )
 		throw(RuntimeException)
 {
 	MutexGuard	aGuard( GetLinguMutex() );
 }
 
 
-void SAL_CALL
-	Hyphenator::removeEventListener( const Reference< XEventListener >& rxListener )
+void SAL_CALL Hyphenator::removeEventListener( const Reference< XEventListener >& rxListener )
 		throw(RuntimeException)
 {
 	MutexGuard	aGuard( GetLinguMutex() );
 sal_Bool SAL_CALL Hyphenator_writeInfo(
 			void * /*pServiceManager*/, registry::XRegistryKey * pRegistryKey )
 {
-
 	try
 	{
 		String aImpl( '/' );

File lingucomponent/source/hyphenator/altlinuxhyph/hyphen/hyphenimp.hxx

   HyphenDict *     aPtr;
   OUString         aName;
   Locale           aLoc;
-  rtl_TextEncoding aEnc;
+  rtl_TextEncoding eEnc;
   CharClass *      apCC;
 };
 
 	>
 {
 	Sequence< Locale >						aSuppLocales;
-        HDInfo * aDicts;
-        sal_Int32 numdict;	
+    HDInfo * aDicts;
+    sal_Int32 numdict;  
 
 	::cppu::OInterfaceContainerHelper		aEvtListeners;
 	Reference< XPropertyChangeListener >	xPropHelper;
-	Reference< XMultiServiceFactory > rSMgr;
+    Reference< XMultiServiceFactory >       rSMgr;
     linguistic::PropertyHelper_Hyphen *     pPropHelper;
 	BOOL									bDisposing;
 
 	virtual ~Hyphenator();
 
 	// XSupportedLocales (for XHyphenator)
-	virtual Sequence< Locale > SAL_CALL getLocales() 
-		throw(RuntimeException);
-	virtual sal_Bool SAL_CALL hasLocale( const Locale& rLocale ) 
-		throw(RuntimeException);
+    virtual Sequence< Locale > SAL_CALL getLocales() throw(RuntimeException);
+    virtual sal_Bool SAL_CALL hasLocale( const Locale& rLocale ) throw(RuntimeException);
 	
 	// XHyphenator
-	virtual ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XHyphenatedWord > SAL_CALL
-	hyphenate( const ::rtl::OUString& aWord,
-		   const ::com::sun::star::lang::Locale& aLocale,
-		   sal_Int16 nMaxLeading,                                                                       
-		   const ::com::sun::star::beans::PropertyValues& aProperties )
-		throw(::com::sun::star::lang::IllegalArgumentException,
-		      ::com::sun::star::uno::RuntimeException);
-			      
-	virtual ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XHyphenatedWord > SAL_CALL
-	queryAlternativeSpelling( const ::rtl::OUString& aWord,
-				  const ::com::sun::star::lang::Locale& aLocale,
-				  sal_Int16 nIndex,
-				  const ::com::sun::star::beans::PropertyValues& aProperties )
-		throw(::com::sun::star::lang::IllegalArgumentException,
-		      ::com::sun::star::uno::RuntimeException);
-					     
-	virtual ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XPossibleHyphens > SAL_CALL
-	createPossibleHyphens( const ::rtl::OUString& aWord,
-			       const ::com::sun::star::lang::Locale& aLocale,
-			       const ::com::sun::star::beans::PropertyValues& aProperties )
-		throw(::com::sun::star::lang::IllegalArgumentException,
-		      ::com::sun::star::uno::RuntimeException);                                                                  
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XHyphenatedWord > SAL_CALL hyphenate( const ::rtl::OUString& aWord, const ::com::sun::star::lang::Locale& aLocale, sal_Int16 nMaxLeading, const ::com::sun::star::beans::PropertyValues& aProperties ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XHyphenatedWord > SAL_CALL queryAlternativeSpelling( const ::rtl::OUString& aWord, const ::com::sun::star::lang::Locale& aLocale, sal_Int16 nIndex, const ::com::sun::star::beans::PropertyValues& aProperties ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XPossibleHyphens > SAL_CALL createPossibleHyphens( const ::rtl::OUString& aWord, const ::com::sun::star::lang::Locale& aLocale, const ::com::sun::star::beans::PropertyValues& aProperties ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);                                                                  
 
     // XLinguServiceEventBroadcaster
-    virtual sal_Bool SAL_CALL 
-		addLinguServiceEventListener( 
-			const Reference< XLinguServiceEventListener >& rxLstnr ) 
-			throw(RuntimeException);
-    virtual sal_Bool SAL_CALL 
-		removeLinguServiceEventListener( 
-			const Reference< XLinguServiceEventListener >& rxLstnr ) 
-			throw(RuntimeException);
+    virtual sal_Bool SAL_CALL addLinguServiceEventListener( const Reference< XLinguServiceEventListener >& rxLstnr ) throw(RuntimeException);
+    virtual sal_Bool SAL_CALL removeLinguServiceEventListener( const Reference< XLinguServiceEventListener >& rxLstnr ) throw(RuntimeException);
 	
 	// XServiceDisplayName
-    virtual OUString SAL_CALL 
-		getServiceDisplayName( const Locale& rLocale ) 
-			throw(RuntimeException);
+    virtual OUString SAL_CALL getServiceDisplayName( const Locale& rLocale ) throw(RuntimeException);
 
 	// XInitialization
-    virtual void SAL_CALL 
-		initialize( const Sequence< Any >& rArguments ) 
-			throw(Exception, RuntimeException);
+    virtual void SAL_CALL initialize( const Sequence< Any >& rArguments ) throw(Exception, RuntimeException);
 
 	// XComponent
-	virtual void SAL_CALL 
-		dispose() 
-			throw(RuntimeException);
-    virtual void SAL_CALL 
-		addEventListener( const Reference< XEventListener >& rxListener ) 
-			throw(RuntimeException);
-    virtual void SAL_CALL 
-		removeEventListener( const Reference< XEventListener >& rxListener ) 
-			throw(RuntimeException);
-
-	////////////////////////////////////////////////////////////
-	// Service specific part
-	//
+    virtual void SAL_CALL dispose() throw(RuntimeException);
+    virtual void SAL_CALL addEventListener( const Reference< XEventListener >& rxListener ) throw(RuntimeException);
+    virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& rxListener ) throw(RuntimeException);
 
 	// XServiceInfo
-    virtual OUString SAL_CALL 
-		getImplementationName() 
-			throw(RuntimeException);
-    virtual sal_Bool SAL_CALL 
-		supportsService( const OUString& rServiceName ) 
-			throw(RuntimeException);
-    virtual Sequence< OUString > SAL_CALL 
-		getSupportedServiceNames() 
-			throw(RuntimeException);
+    virtual OUString SAL_CALL getImplementationName() throw(RuntimeException);
+    virtual sal_Bool SAL_CALL supportsService( const OUString& rServiceName ) throw(RuntimeException);
+    virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(RuntimeException);
 
 
-	static inline OUString	
-		getImplementationName_Static() throw();
-    static Sequence< OUString >	
-		getSupportedServiceNames_Static() throw();
-
+    static inline OUString  getImplementationName_Static() throw();
+    static Sequence< OUString > getSupportedServiceNames_Static() throw();
 
 
 private:

File lingucomponent/source/lingutil/lingutil.cxx

 #include <unotools/pathoptions.hxx>
 #include <rtl/ustring.hxx>
 #include <rtl/string.hxx>
+#include <rtl/tencinfo.h>
 #include <linguistic/misc.hxx>
 
 #include <set>
 	}
 }
 
+
+rtl_TextEncoding getTextEncodingFromCharset(const sal_Char* pCharset)
+{
+    // default result: used to indicate that we failed to get the proper encoding
+    rtl_TextEncoding eRet = RTL_TEXTENCODING_DONTKNOW;
+
+    if (pCharset)
+    {
+        eRet = rtl_getTextEncodingFromMimeCharset(pCharset);
+        if (eRet == RTL_TEXTENCODING_DONTKNOW)
+            eRet = rtl_getTextEncodingFromUnixCharset(pCharset);
+        if (eRet == RTL_TEXTENCODING_DONTKNOW)
+        {
+            if (strcmp("ISCII-DEVANAGARI", pCharset) == 0)
+                eRet = RTL_TEXTENCODING_ISCII_DEVANAGARI;
+        }
+    }
+    return eRet;
+}
+
 //////////////////////////////////////////////////////////////////////
 

File lingucomponent/source/lingutil/lingutil.hxx

 
 ///////////////////////////////////////////////////////////////////////////
 
+
+//Find an encoding from a charset string, using
+//rtl_getTextEncodingFromMimeCharset and falling back to
+//rtl_getTextEncodingFromUnixCharset with the addition of
+//ISCII-DEVANAGARI. On failure will return final fallback of
+//RTL_TEXTENCODING_ISO_8859_1
+rtl_TextEncoding getTextEncodingFromCharset(const sal_Char* pCharset);
+
 #endif
 

File lingucomponent/source/spellcheck/macosxspell/macspellimp.hxx

 		XServiceDisplayName
 	>
 {
-	Sequence< Locale >                 aSuppLocales;
+    Sequence< Locale >      aSuppLocales;
 //        Hunspell **                         aDicts;
-        rtl_TextEncoding *                 aDEncs;
-        Locale *                           aDLocs;
-        OUString *                         aDNames;
-        sal_Int32                          numdict;
-		NSSpellChecker *					macSpell;
-		int 								macTag;   //unique tag for this doc
+    rtl_TextEncoding *      aDEncs;
+    Locale *                aDLocs;
+    OUString *              aDNames;
+    sal_Int32               numdict;
+    NSSpellChecker *        macSpell;
+    int                     macTag;   //unique tag for this doc
 
 	::cppu::OInterfaceContainerHelper		aEvtListeners;
 	Reference< XPropertyChangeListener >	xPropHelper;
 	}
 
 	INT16	GetSpellFailure( const OUString &rWord, const Locale &rLocale );
-	Reference< XSpellAlternatives >
-			GetProposals( const OUString &rWord, const Locale &rLocale );
+    Reference< XSpellAlternatives > GetProposals( const OUString &rWord, const Locale &rLocale );
 
 public:
 	MacSpellChecker();
 	virtual ~MacSpellChecker();
 
 	// XSupportedLocales (for XSpellChecker)
-    virtual Sequence< Locale > SAL_CALL 
-		getLocales() 
-			throw(RuntimeException);
-    virtual sal_Bool SAL_CALL 
-		hasLocale( const Locale& rLocale ) 
-			throw(RuntimeException);
+    virtual Sequence< Locale > SAL_CALL getLocales() throw(RuntimeException);
+    virtual sal_Bool SAL_CALL hasLocale( const Locale& rLocale ) throw(RuntimeException);
 
 	// XSpellChecker
-    virtual sal_Bool SAL_CALL