summaryrefslogtreecommitdiff
path: root/lingucomponent/source/languageguessing
diff options
context:
space:
mode:
Diffstat (limited to 'lingucomponent/source/languageguessing')
-rw-r--r--lingucomponent/source/languageguessing/altstrfunc.cxx8
-rw-r--r--lingucomponent/source/languageguessing/altstrfunc.hxx1
-rw-r--r--lingucomponent/source/languageguessing/guess.cxx8
-rw-r--r--lingucomponent/source/languageguessing/guesslang.cxx130
4 files changed, 81 insertions, 66 deletions
diff --git a/lingucomponent/source/languageguessing/altstrfunc.cxx b/lingucomponent/source/languageguessing/altstrfunc.cxx
index 0a5850343406..7b9739b206e6 100644
--- a/lingucomponent/source/languageguessing/altstrfunc.cxx
+++ b/lingucomponent/source/languageguessing/altstrfunc.cxx
@@ -34,14 +34,6 @@
#include <sal/types.h>
-std::string upperCase(const std::string &s) {
- std::string upper(s);
- for(size_t i = 0; i < s.length(); i++)
- upper[i] = sal::static_int_cast< char >( toupper(upper[i]) );
- return upper;
-}
-
-
int start(const std::string &s1, const std::string &s2){
size_t i;
int ret = 0;
diff --git a/lingucomponent/source/languageguessing/altstrfunc.hxx b/lingucomponent/source/languageguessing/altstrfunc.hxx
index a918cb73c2fd..1bd883b32fcc 100644
--- a/lingucomponent/source/languageguessing/altstrfunc.hxx
+++ b/lingucomponent/source/languageguessing/altstrfunc.hxx
@@ -38,7 +38,6 @@ inline bool isSeparator(const char c){
return c == GUESS_SEPARATOR_OPEN || c == GUESS_SEPARATOR_SEP || c == GUESS_SEPARATOR_CLOSE || c == '\0';
}
-std::string upperCase(const std::string &s);
int start(const std::string &s1, const std::string &s2);
#endif
diff --git a/lingucomponent/source/languageguessing/guess.cxx b/lingucomponent/source/languageguessing/guess.cxx
index dc45e49edc79..68db6c521aab 100644
--- a/lingucomponent/source/languageguessing/guess.cxx
+++ b/lingucomponent/source/languageguessing/guess.cxx
@@ -102,13 +102,7 @@ Guess::Guess(char * guess_str)
if(lang!=""){//if not we use the default value
language_str=lang;
}
-
- if(/*country!=""*/1){
- country_str=country;
- }
- else{//if we don't have an availlable country, we use the language as a country
- country_str=upperCase(language_str);
- }
+ country_str=country;
if(enc!=""){//if not we use the default value
encoding_str=enc;
diff --git a/lingucomponent/source/languageguessing/guesslang.cxx b/lingucomponent/source/languageguessing/guesslang.cxx
index eef917d182fe..bd2c29430f76 100644
--- a/lingucomponent/source/languageguessing/guesslang.cxx
+++ b/lingucomponent/source/languageguessing/guesslang.cxx
@@ -96,15 +96,18 @@ class LangGuess_Impl :
XLanguageGuessing,
XServiceInfo >
{
- SimpleGuesser guesser;
+ SimpleGuesser m_aGuesser;
+ bool m_bInitialized;
css::uno::Reference< css::uno::XComponentContext > m_xContext;
- LangGuess_Impl(const LangGuess_Impl &); // not defined
- void operator =(const LangGuess_Impl &); // not defined
+ LangGuess_Impl( const LangGuess_Impl & ); // not defined
+ LangGuess_Impl & operator =( const LangGuess_Impl & ); // not defined
+
virtual ~LangGuess_Impl() {}
+ void EnsureInitialized();
public:
- explicit LangGuess_Impl(css::uno::Reference< css::uno::XComponentContext > const & context);
+ explicit LangGuess_Impl(css::uno::Reference< css::uno::XComponentContext > const & rxContext);
// XServiceInfo implementation
virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException);
@@ -129,50 +132,64 @@ public:
//*************************************************************************
-LangGuess_Impl::LangGuess_Impl(css::uno::Reference< css::uno::XComponentContext > const & context) :
- m_xContext(context)
+LangGuess_Impl::LangGuess_Impl(css::uno::Reference< css::uno::XComponentContext > const & rxContext) :
+ m_bInitialized( false ),
+ m_xContext( rxContext )
{
- // set default fingerprint path to where those get installed
- String aPhysPath;
- String aURL( SvtPathOptions().GetFingerprintPath() );
- utl::LocalFileHelper::ConvertURLToPhysicalName( aURL, aPhysPath );
+}
+
+//*************************************************************************
+
+void LangGuess_Impl::EnsureInitialized()
+{
+ if (!m_bInitialized)
+ {
+ // set this to true at the very start to prevent loops because of
+ // implicitly called functions below
+ m_bInitialized = true;
+
+ // set default fingerprint path to where those get installed
+ String aPhysPath;
+ String aURL( SvtPathOptions().GetFingerprintPath() );
+ utl::LocalFileHelper::ConvertURLToPhysicalName( aURL, aPhysPath );
#ifdef WNT
- aPhysPath += '\\';
+ aPhysPath += '\\';
#else
- aPhysPath += '/';
+ aPhysPath += '/';
#endif
- SetFingerPrintsDB( aPhysPath );
-
- //
- // disable currently not functional languages...
- //
- struct LangCountry
- {
- const char *pLang;
- const char *pCountry;
- };
- LangCountry aDisable[] =
- {
- {"gv", ""}, {"sco", ""}, // no lang-id available yet...
-// {"hy", ""}, {"drt", ""}, // 0 bytes fingerprints...
- {"zh", "CN"}, {"zh", "TW"}, {"ja", ""}, {"ko", ""}, // not yet correct functional...
- {"ka", ""}, {"hi", ""}, {"mr", ""}, {"ne", ""},
- {"sa", ""}, {"ta", ""}, {"th", ""},
- {"qu", ""}, {"yi", ""}
- };
- sal_Int32 nNum = sizeof(aDisable) / sizeof(aDisable[0]);
- Sequence< Locale > aDisableSeq( nNum );
- Locale *pDisableSeq = aDisableSeq.getArray();
- for (sal_Int32 i = 0; i < nNum; ++i)
- {
- Locale aLocale;
- aLocale.Language = OUString::createFromAscii( aDisable[i].pLang );
- aLocale.Country = OUString::createFromAscii( aDisable[i].pCountry );
- pDisableSeq[i] = aLocale;
+ SetFingerPrintsDB( aPhysPath );
+
+ //
+ // disable currently not functional languages...
+ //
+ struct LangCountry
+ {
+ const char *pLang;
+ const char *pCountry;
+ };
+ LangCountry aDisable[] =
+ {
+ {"gv", ""}, {"sco", ""}, // no lang-id available yet...
+// {"hy", ""}, {"drt", ""}, // 0 bytes fingerprints...
+ {"zh", "CN"}, {"zh", "TW"}, {"ja", ""}, {"ko", ""}, // not yet correct functional...
+ {"ka", ""}, {"hi", ""}, {"mr", ""}, {"ne", ""},
+ {"sa", ""}, {"ta", ""}, {"th", ""},
+ {"qu", ""}, {"yi", ""}
+ };
+ sal_Int32 nNum = sizeof(aDisable) / sizeof(aDisable[0]);
+ Sequence< Locale > aDisableSeq( nNum );
+ Locale *pDisableSeq = aDisableSeq.getArray();
+ for (sal_Int32 i = 0; i < nNum; ++i)
+ {
+ Locale aLocale;
+ aLocale.Language = OUString::createFromAscii( aDisable[i].pLang );
+ aLocale.Country = OUString::createFromAscii( aDisable[i].pCountry );
+ pDisableSeq[i] = aLocale;
+ }
+ disableLanguages( aDisableSeq );
+ DBG_ASSERT( nNum == getDisabledLanguages().getLength(), "size mismatch" );
}
- disableLanguages( aDisableSeq );
- DBG_ASSERT( nNum == getDisabledLanguages().getLength(), "size mismatch" );
}
//*************************************************************************
@@ -187,7 +204,7 @@ Sequence< com::sun::star::lang::Locale > SAL_CALL LangGuess_Impl::guessLanguages
Sequence< com::sun::star::lang::Locale > aRes;
OString o = OUStringToOString( rText, RTL_TEXTENCODING_UTF8 );
- vector<Guess> gs = guesser.GuessLanguage(o.pData->buffer);
+ vector<Guess> gs = m_aGuesser.GuessLanguage(o.pData->buffer);
aRes.realloc(gs.size());
@@ -210,6 +227,7 @@ Sequence< com::sun::star::lang::Locale > SAL_CALL LangGuess_Impl::guessLanguages
}
*/
//*************************************************************************
+
Locale SAL_CALL LangGuess_Impl::guessPrimaryLanguage(
const ::rtl::OUString& rText,
::sal_Int32 nStartPos,
@@ -218,11 +236,13 @@ Locale SAL_CALL LangGuess_Impl::guessPrimaryLanguage(
{
osl::MutexGuard aGuard( GetLangGuessMutex() );
+ EnsureInitialized();
+
lang::Locale aRes;
if (nStartPos >=0 && nLen >= 0 && nStartPos + nLen <= rText.getLength())
{
OString o( OUStringToOString( rText.copy(nStartPos, nLen), RTL_TEXTENCODING_UTF8 ) );
- Guess g = guesser.GuessPrimaryLanguage((char*)o.getStr());
+ Guess g = m_aGuesser.GuessPrimaryLanguage((char*)o.getStr());
aRes.Language = OUString::createFromAscii(g.GetLanguage().c_str());
aRes.Country = OUString::createFromAscii(g.GetCountry().c_str());
}
@@ -247,7 +267,7 @@ void LangGuess_Impl::SetFingerPrintsDB(
//cout << "Conf file : " << conf_file_path.getStr() << " directory : " << path.getStr() << endl;
- guesser.SetDBPath((const char*)conf_file_path.getStr(), (const char*)path.getStr());
+ m_aGuesser.SetDBPath((const char*)conf_file_path.getStr(), (const char*)path.getStr());
}
//*************************************************************************
@@ -256,8 +276,10 @@ uno::Sequence< Locale > SAL_CALL LangGuess_Impl::getAvailableLanguages( )
{
osl::MutexGuard aGuard( GetLangGuessMutex() );
+ EnsureInitialized();
+
Sequence< com::sun::star::lang::Locale > aRes;
- vector<Guess> gs = guesser.GetAllManagedLanguages();
+ vector<Guess> gs = m_aGuesser.GetAllManagedLanguages();
aRes.realloc(gs.size());
com::sun::star::lang::Locale *pRes = aRes.getArray();
@@ -278,8 +300,10 @@ uno::Sequence< Locale > SAL_CALL LangGuess_Impl::getEnabledLanguages( )
{
osl::MutexGuard aGuard( GetLangGuessMutex() );
+ EnsureInitialized();
+
Sequence< com::sun::star::lang::Locale > aRes;
- vector<Guess> gs = guesser.GetAvailableLanguages();
+ vector<Guess> gs = m_aGuesser.GetAvailableLanguages();
aRes.realloc(gs.size());
com::sun::star::lang::Locale *pRes = aRes.getArray();
@@ -300,8 +324,10 @@ uno::Sequence< Locale > SAL_CALL LangGuess_Impl::getDisabledLanguages( )
{
osl::MutexGuard aGuard( GetLangGuessMutex() );
+ EnsureInitialized();
+
Sequence< com::sun::star::lang::Locale > aRes;
- vector<Guess> gs = guesser.GetUnavailableLanguages();
+ vector<Guess> gs = m_aGuesser.GetUnavailableLanguages();
aRes.realloc(gs.size());
com::sun::star::lang::Locale *pRes = aRes.getArray();
@@ -323,6 +349,8 @@ void SAL_CALL LangGuess_Impl::disableLanguages(
{
osl::MutexGuard aGuard( GetLangGuessMutex() );
+ EnsureInitialized();
+
sal_Int32 nLanguages = rLanguages.getLength();
const Locale *pLanguages = rLanguages.getConstArray();
@@ -336,7 +364,7 @@ void SAL_CALL LangGuess_Impl::disableLanguages(
language += l.getStr();
language += "-";
language += c.getStr();
- guesser.DisableLanguage(language);
+ m_aGuesser.DisableLanguage(language);
}
}
@@ -347,6 +375,8 @@ void SAL_CALL LangGuess_Impl::enableLanguages(
{
osl::MutexGuard aGuard( GetLangGuessMutex() );
+ EnsureInitialized();
+
sal_Int32 nLanguages = rLanguages.getLength();
const Locale *pLanguages = rLanguages.getConstArray();
@@ -360,7 +390,7 @@ void SAL_CALL LangGuess_Impl::enableLanguages(
language += l.getStr();
language += "-";
language += c.getStr();
- guesser.EnableLanguage(language);
+ m_aGuesser.EnableLanguage(language);
}
}