summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Sikeler <d.sikeler94@gmail.com>2014-10-30 14:53:48 +0000
committerMichael Stahl <mstahl@redhat.com>2014-11-05 11:50:42 +0000
commit4404b718bdb547cb9b7b17c73a53574724cdeeb7 (patch)
tree037ad212198f98bf7dc243cf5e86bebb58b4050f
parentfc4d04d51b34cf81e0f69f7210071f795c81fee1 (diff)
fdo#79761: parse BlockList.xml only once
Change-Id: I3cfc5b66ee73b0e4d07a84c8255c5a006e4fbb25 Reviewed-on: https://gerrit.libreoffice.org/12210 Reviewed-by: Michael Stahl <mstahl@redhat.com> Tested-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r--editeng/source/misc/SvXMLAutoCorrectImport.cxx3
-rw-r--r--editeng/source/misc/svxacorr.cxx7
-rw-r--r--include/editeng/svxacorr.hxx5
-rw-r--r--sw/inc/swacorr.hxx9
-rw-r--r--sw/source/core/sw3io/swacorr.cxx16
5 files changed, 27 insertions, 13 deletions
diff --git a/editeng/source/misc/SvXMLAutoCorrectImport.cxx b/editeng/source/misc/SvXMLAutoCorrectImport.cxx
index 8f2f69e05fe2..e68362e472de 100644
--- a/editeng/source/misc/SvXMLAutoCorrectImport.cxx
+++ b/editeng/source/misc/SvXMLAutoCorrectImport.cxx
@@ -56,6 +56,7 @@ SvXMLWordListContext::SvXMLWordListContext(
SvXMLImportContext ( rImport ),
rLocalRef(rImport)
{
+ rLocalRef.rAutoCorrect.refreshBlockList( rLocalRef.xStorage );
}
com::sun::star::uno::Reference<XFastContextHandler> SAL_CALL SvXMLWordListContext::createFastChildContext(
@@ -94,7 +95,7 @@ SvXMLWordContext::SvXMLWordContext(
if( !bOnlyTxt )
{
const OUString sLongSave( sRight );
- if( !rLocalRef.rAutoCorrect.GetLongText( rLocalRef.xStorage, sWrong, sRight ) &&
+ if( !rLocalRef.rAutoCorrect.GetLongText( sWrong, sRight ) &&
!sLongSave.isEmpty() )
{
sRight = sLongSave;
diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx
index 9b840f32ae8b..6b235de53de1 100644
--- a/editeng/source/misc/svxacorr.cxx
+++ b/editeng/source/misc/svxacorr.cxx
@@ -1627,12 +1627,15 @@ bool SvxAutoCorrect::MakeCombinedChanges( std::vector<SvxAutocorrWord>& aNewEntr
// - return the replacement text (only for SWG-Format, all other
// can be taken from the word list!)
-bool SvxAutoCorrect::GetLongText( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&,
- const OUString&, OUString& )
+bool SvxAutoCorrect::GetLongText( const OUString&, OUString& )
{
return false;
}
+void SvxAutoCorrect::refreshBlockList( const uno::Reference< embed::XStorage >& )
+{
+}
+
// Text with attribution (only the SWG - SWG format!)
bool SvxAutoCorrect::PutText( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&,
const OUString&, const OUString&, SfxObjectShell&, OUString& )
diff --git a/include/editeng/svxacorr.hxx b/include/editeng/svxacorr.hxx
index 8ad8564e699a..f227ff3db738 100644
--- a/include/editeng/svxacorr.hxx
+++ b/include/editeng/svxacorr.hxx
@@ -275,8 +275,9 @@ public:
sal_Unicode GetQuote( sal_Unicode cInsChar, bool bSttQuote,
LanguageType eLang ) const;
- virtual bool GetLongText( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& rStg,
- const OUString& rShort, OUString& rLong );
+ virtual bool GetLongText( const OUString& rShort, OUString& rLong );
+
+ virtual void refreshBlockList( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& rStg);
TYPEINFO();
diff --git a/sw/inc/swacorr.hxx b/sw/inc/swacorr.hxx
index 5bb3c93474fc..33598c6dbc16 100644
--- a/sw/inc/swacorr.hxx
+++ b/sw/inc/swacorr.hxx
@@ -24,15 +24,20 @@
#include <com/sun/star/uno/Reference.h>
#include <com/sun/star/embed/XStorage.hpp>
+#include "SwXMLTextBlocks.hxx"
+
class SwAutoCorrect : public SvxAutoCorrect
{
using SvxAutoCorrect::PutText;
+ std::unique_ptr<SwXMLTextBlocks> m_pTextBlocks;
+
protected:
// Return replacement text (only for SWG-format, all others can be obtained from wordlist!).
// rShort is stream-name - encrypted!
- virtual bool GetLongText( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&,
- const OUString& rShort, OUString& rLong ) SAL_OVERRIDE;
+ virtual bool GetLongText( const OUString& rShort, OUString& rLong ) SAL_OVERRIDE;
+
+ virtual void refreshBlockList( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& ) SAL_OVERRIDE;
// Text with attributes (only SWG-format!).
// rShort is stream-name - encrypted!
diff --git a/sw/source/core/sw3io/swacorr.cxx b/sw/source/core/sw3io/swacorr.cxx
index 8472942872f0..0a08b012264b 100644
--- a/sw/source/core/sw3io/swacorr.cxx
+++ b/sw/source/core/sw3io/swacorr.cxx
@@ -37,20 +37,24 @@ TYPEINIT1( SwAutoCorrect, SvxAutoCorrect );
*
* @param rShort - the stream name (encrypted)
*/
-bool SwAutoCorrect::GetLongText( const uno::Reference < embed::XStorage >& rStg,
- const OUString& rShort, OUString& rLong )
+bool SwAutoCorrect::GetLongText( const OUString& rShort, OUString& rLong )
{
sal_uLong nRet = 0;
+ assert( m_pTextBlocks );
+ nRet = m_pTextBlocks->GetText( rShort, rLong );
+ return !IsError( nRet ) && !rLong.isEmpty();
+}
+
+void SwAutoCorrect::refreshBlockList( const uno::Reference< embed::XStorage >& rStg )
+{
if (rStg.is())
{
// mba: relative URLs don't make sense here
- SwXMLTextBlocks aBlk( rStg, OUString() );
- nRet = aBlk.GetText( rShort, rLong );
+ m_pTextBlocks.reset( new SwXMLTextBlocks( rStg, OUString() ) );
}
else {
- OSL_ENSURE( rStg.is(), "Someone passed SwAutoCorrect::GetLongText a dud storage!");
+ OSL_ENSURE( rStg.is(), "Someone passed SwAutoCorrect::refreshBlockList a dud storage!");
}
- return !IsError( nRet ) && !rLong.isEmpty();
}
// - Text mit Attributierung (kann nur der SWG - SWG-Format!)