Hi, I have submitted a patch for review:
https://gerrit.libreoffice.org/1636 To pull it, you can do: git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/36/1636/1 Character conversion: do not destroy sequence while iterating on it Change-Id: Ib77e15b776384cc75880a907a6425c6105bc3fab --- M sw/source/core/txtnode/txtedt.cxx 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/sw/source/core/txtnode/txtedt.cxx b/sw/source/core/txtnode/txtedt.cxx index d5bc382..82c6cf8 100644 --- a/sw/source/core/txtnode/txtedt.cxx +++ b/sw/source/core/txtnode/txtedt.cxx @@ -74,6 +74,7 @@ #include <com/sun/star/i18n/TransliterationModulesExtra.hpp> #include <vector> +#include <utility> using rtl::OUString; using namespace ::com::sun::star; @@ -1073,6 +1074,12 @@ { SwLanguageIterator aIter( *this, nBegin ); + // Implicit changes require setting new attributes, which in turn destroys + // the attribute sequence on which aIter iterates. We store the necessary + // coordinates and apply those changes after iterating through the text. + typedef std::pair<xub_StrLen, xub_StrLen> ImplicitChangesRange; + std::vector<ImplicitChangesRange> aImplicitChanges; + // find non zero length text portion of appropriate language do { nLangFound = aIter.GetLanguage(); @@ -1108,13 +1115,22 @@ if (!bIsAsianScript && rArgs.bAllowImplicitChangesForNotConvertibleText) { - SetLanguageAndFont( aCurPaM, - rArgs.nConvTargetLang, RES_CHRATR_CJK_LANGUAGE, - rArgs.pTargetFont, RES_CHRATR_CJK_FONT ); + // Store for later use + aImplicitChanges.push_back(ImplicitChangesRange(nBegin, nBegin+nLen)); } nBegin = nChPos; // start of next language portion } } while (!bFound && aIter.Next()); /* loop while nothing was found and still sth is left to be searched */ + + // Apply implicit changes, if any, now that aIter is no longer used + for (size_t i = 0; i < aImplicitChanges.size(); ++i) + { + SwPaM aPaM( *this, aImplicitChanges[i].first ); + aPaM.SetMark(); + aPaM.GetPoint()->nContent = aImplicitChanges[i].second; + SetLanguageAndFont( aPaM, rArgs.nConvTargetLang, RES_CHRATR_CJK_LANGUAGE, rArgs.pTargetFont, RES_CHRATR_CJK_FONT ); + } + } // keep resulting text within selection / range of text to be converted -- To view, visit https://gerrit.libreoffice.org/1636 To unsubscribe, visit https://gerrit.libreoffice.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib77e15b776384cc75880a907a6425c6105bc3fab Gerrit-PatchSet: 1 Gerrit-Project: core Gerrit-Branch: master Gerrit-Owner: Matteo Casalin <matteo.casa...@gmx.com> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice