Kaydet (Commit) 14b4fcf0 authored tarafından Caolán McNamara's avatar Caolán McNamara

reorg SwBreakIt to just create it at the start

Change-Id: Ie2b725e4e0c8d9b581ced74f9cdd08d97ab90e46
Reviewed-on: https://gerrit.libreoffice.org/34746Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst a42d9c5b
......@@ -33,7 +33,7 @@ enum class SvtScriptType;
class SW_DLLPUBLIC SwBreakIt
{
css::uno::Reference< css::uno::XComponentContext > m_xContext;
mutable css::uno::Reference< css::i18n::XBreakIterator > xBreak;
css::uno::Reference<css::i18n::XBreakIterator> m_xBreak;
std::unique_ptr<LanguageTag> m_xLanguageTag; ///< language tag of the current locale
std::unique_ptr<css::i18n::ForbiddenCharacters> m_xForbidden;
......@@ -44,8 +44,6 @@ class SW_DLLPUBLIC SwBreakIt
void GetLocale_( const LanguageTag& rLanguageTag );
void GetForbidden_( const LanguageType aLang );
void createBreakIterator() const;
SwBreakIt(SwBreakIt const&) = delete;
SwBreakIt& operator=(SwBreakIt const&) = delete;
......@@ -63,8 +61,7 @@ public:
css::uno::Reference< css::i18n::XBreakIterator > const & GetBreakIter()
{
createBreakIterator();
return xBreak;
return m_xBreak;
}
const css::lang::Locale& GetLocale( const LanguageType aLang )
......
......@@ -54,15 +54,9 @@ SwBreakIt * SwBreakIt::Get()
SwBreakIt::SwBreakIt( const uno::Reference<uno::XComponentContext> & rxContext )
: m_xContext(rxContext)
, m_xBreak(i18n::BreakIterator::create(m_xContext))
, aForbiddenLang(LANGUAGE_DONTKNOW)
{
assert(m_xContext.is() && "SwBreakIt: no MultiServiceFactory");
}
void SwBreakIt::createBreakIterator() const
{
if (!xBreak.is())
xBreak.set(i18n::BreakIterator::create(m_xContext));
}
void SwBreakIt::GetLocale_( const LanguageType aLang )
......@@ -91,16 +85,15 @@ void SwBreakIt::GetForbidden_( const LanguageType aLang )
sal_uInt16 SwBreakIt::GetRealScriptOfText( const OUString& rText, sal_Int32 nPos ) const
{
createBreakIterator();
sal_uInt16 nScript = i18n::ScriptType::WEAK;
if( xBreak.is() && !rText.isEmpty() )
if (!rText.isEmpty())
{
if( nPos && nPos == rText.getLength() )
--nPos;
else if( nPos < 0)
nPos = 0;
nScript = xBreak->getScriptType( rText, nPos );
nScript = m_xBreak->getScriptType(rText, nPos);
sal_Int32 nChgPos = 0;
if (i18n::ScriptType::WEAK == nScript && nPos >= 0 && nPos + 1 < rText.getLength())
{
......@@ -111,22 +104,22 @@ sal_uInt16 SwBreakIt::GetRealScriptOfText( const OUString& rText, sal_Int32 nPos
case U_NON_SPACING_MARK:
case U_ENCLOSING_MARK:
case U_COMBINING_SPACING_MARK:
nScript = xBreak->getScriptType( rText, nPos+1 );
nScript = m_xBreak->getScriptType(rText, nPos+1);
break;
}
}
if( i18n::ScriptType::WEAK == nScript &&
nPos &&
0 < ( nChgPos = xBreak->beginOfScript( rText, nPos, nScript ) ) )
0 < ( nChgPos = m_xBreak->beginOfScript(rText, nPos, nScript) ) )
{
nScript = xBreak->getScriptType( rText, nChgPos-1 );
nScript = m_xBreak->getScriptType(rText, nChgPos-1);
}
if( i18n::ScriptType::WEAK == nScript &&
rText.getLength() > ( nChgPos = xBreak->endOfScript( rText, nPos, nScript ) ) &&
rText.getLength() > ( nChgPos = m_xBreak->endOfScript(rText, nPos, nScript) ) &&
0 <= nChgPos )
{
nScript = xBreak->getScriptType( rText, nChgPos );
nScript = m_xBreak->getScriptType(rText, nChgPos);
}
}
if( i18n::ScriptType::WEAK == nScript )
......@@ -139,19 +132,14 @@ SvtScriptType SwBreakIt::GetAllScriptsOfText( const OUString& rText ) const
const SvtScriptType coAllScripts = ( SvtScriptType::LATIN |
SvtScriptType::ASIAN |
SvtScriptType::COMPLEX );
createBreakIterator();
SvtScriptType nRet = SvtScriptType::NONE;
sal_uInt16 nScript = 0;
if( !xBreak.is() )
{
nRet = coAllScripts;
}
else if( !rText.isEmpty() )
if (!rText.isEmpty())
{
for( sal_Int32 n = 0, nEnd = rText.getLength(); n < nEnd;
n = xBreak->endOfScript(rText, n, nScript) )
n = m_xBreak->endOfScript(rText, n, nScript) )
{
switch( nScript = xBreak->getScriptType( rText, n ) )
switch( nScript = m_xBreak->getScriptType(rText, n) )
{
case i18n::ScriptType::LATIN: nRet |= SvtScriptType::LATIN; break;
case i18n::ScriptType::ASIAN: nRet |= SvtScriptType::ASIAN; break;
......@@ -185,7 +173,7 @@ sal_Int32 SwBreakIt::getGraphemeCount(const OUString& rText,
else
{
sal_Int32 nCount2 = 1;
nCurPos = xBreak->nextCharacters(rText, nCurPos, lang::Locale(),
nCurPos = m_xBreak->nextCharacters(rText, nCurPos, lang::Locale(),
i18n::CharacterIteratorMode::SKIPCELL, nCount2, nCount2);
}
++nGraphemeCount;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment