Kaydet (Commit) 8d741c04 authored tarafından Pedro Giffuni's avatar Pedro Giffuni

i20878 - Q-PCD shows spaces at end of a wrapped line in Writer.

üst 82a0ff3a
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <swatrset.hxx> #include <swatrset.hxx>
#include <format.hxx> #include <format.hxx>
#include <swtypes.hxx> #include <swtypes.hxx>
#include <editeng/adjitem.hxx>
class SwCharFmt; class SwCharFmt;
class IntlWrapper; class IntlWrapper;
...@@ -47,12 +48,12 @@ class IntlWrapper; ...@@ -47,12 +48,12 @@ class IntlWrapper;
//SwFmtDrop an die Absatze propagiert. //SwFmtDrop an die Absatze propagiert.
class SW_DLLPUBLIC SwFmtDrop: public SfxPoolItem, public SwClient class SW_DLLPUBLIC SwFmtDrop: public SfxPoolItem, public SwClient
{ {
SwModify* pDefinedIn; // Modify-Object, in dem der DropCaps steht SwModify* pDefinedIn; // Modify-Object, in which DropCaps exists
// kann nur TxtFmtCollection/TxtNode sein // can have only TxtFmtCollection/TxtNode
sal_uInt16 nDistance; // Abstand zum Textbeginn sal_uInt16 nDistance; // Distance from the text beginning
sal_uInt16 nReadFmt; // fuer den Sw3-Reader: CharFormat-Id (Pool laden!) sal_uInt16 nReadFmt; // for the Sw3-Reader: CharFormat-Id (Pool load!)
sal_uInt8 nLines; // Anzahl der Zeilen sal_uInt8 nLines; // Number of lines
sal_uInt8 nChars; // Anzahl der Zeichen sal_uInt8 nChars; // Number of characters
sal_Bool bWholeWord; // Erstes Wort als Initialen sal_Bool bWholeWord; // Erstes Wort als Initialen
public: public:
TYPEINFO(); //Bereits in der Basisklasse SwClient TYPEINFO(); //Bereits in der Basisklasse SwClient
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
// MARKER(update_precomp.py): autogen include statement, do not remove // MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx" #include "precompiled_sw.hxx"
#include <ctype.h> #include <ctype.h>
#include <editeng/unolingu.hxx> #include <editeng/unolingu.hxx>
#include <tools/shl.hxx> // needed for SW_MOD() macro #include <tools/shl.hxx> // needed for SW_MOD() macro
...@@ -42,6 +41,7 @@ ...@@ -42,6 +41,7 @@
#include <com/sun/star/i18n/WordType.hpp> #include <com/sun/star/i18n/WordType.hpp>
#include <unotools/charclass.hxx> #include <unotools/charclass.hxx>
#include <porfld.hxx> #include <porfld.hxx>
#include <paratr.hxx>
using ::rtl::OUString; using ::rtl::OUString;
using namespace ::com::sun::star; using namespace ::com::sun::star;
...@@ -65,7 +65,7 @@ sal_Bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf, ...@@ -65,7 +65,7 @@ sal_Bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf,
{ {
nCutPos = rInf.GetIdx(); nCutPos = rInf.GetIdx();
// Leere Strings sind immer 0 // Empty strings are always 0
if( !rInf.GetLen() || !rInf.GetTxt().Len() ) if( !rInf.GetLen() || !rInf.GetTxt().Len() )
return sal_False; return sal_False;
...@@ -188,8 +188,8 @@ sal_Bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf, ...@@ -188,8 +188,8 @@ sal_Bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf,
nBreakWidth = nMinSize; nBreakWidth = nMinSize;
// Der folgende Vergleich sollte eigenlich immer sal_True ergeben, sonst // The following comparison should always give sal_True, otherwise
// hat es wohl bei GetTxtBreak einen Pixel-Rundungsfehler gegeben... // a pixel rounding error in GetTxtBreak will appear
if ( nBreakWidth <= nLineWidth ) if ( nBreakWidth <= nLineWidth )
{ {
if( nItalic && ( nBreakPos + 1 ) >= rInf.GetTxt().Len() ) if( nItalic && ( nBreakPos + 1 ) >= rInf.GetTxt().Len() )
...@@ -220,12 +220,23 @@ sal_Bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf, ...@@ -220,12 +220,23 @@ sal_Bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf,
nBreakPos = nCutPos; nBreakPos = nCutPos;
xub_StrLen nX = nBreakPos; xub_StrLen nX = nBreakPos;
// we step back until a non blank character has been found const SvxAdjust& rAdjust = rInf.GetTxtFrm()->GetTxtNode()->GetSwAttrSet().GetAdjust().GetAdjust();
// or there is only one more character left if ( rAdjust == SVX_ADJUST_LEFT )
while( nX && nBreakPos > rInf.GetLineStart() + 1 && {
( CH_BLANK == ( cCutChar = rInf.GetChar( --nX ) ) || // we step back until a non blank character has been found
CH_FULL_BLANK == cCutChar ) ) // or there is only one more character left
--nBreakPos; while( nX && nBreakPos > rInf.GetTxt().Len() &&
( CH_BLANK == ( cCutChar = rInf.GetChar( --nX ) ) ||
CH_FULL_BLANK == cCutChar ) )
--nBreakPos;
}
else
{
while( nX && nBreakPos > rInf.GetLineStart() + 1 &&
( CH_BLANK == ( cCutChar = rInf.GetChar( --nX ) ) ||
CH_FULL_BLANK == cCutChar ) )
--nBreakPos;
}
if( nBreakPos > rInf.GetIdx() ) if( nBreakPos > rInf.GetIdx() )
nPorLen = nBreakPos - rInf.GetIdx(); nPorLen = nBreakPos - rInf.GetIdx();
...@@ -429,16 +440,20 @@ sal_Bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf, ...@@ -429,16 +440,20 @@ sal_Bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf,
CHAR_SOFTHYPHEN == rInf.GetTxt().GetChar( nBreakPos - 1 ) ) CHAR_SOFTHYPHEN == rInf.GetTxt().GetChar( nBreakPos - 1 ) )
nBreakPos = rInf.GetIdx() - 1; nBreakPos = rInf.GetIdx() - 1;
// Delete any blanks at the end of a line, but be careful: const SvxAdjust& rAdjust = rInf.GetTxtFrm()->GetTxtNode()->GetSwAttrSet().GetAdjust().GetAdjust();
// If a field has been expanded, we do not want to delete any if( rAdjust != SVX_ADJUST_LEFT )
// blanks inside the field portion. This would cause an unwanted {
// underflow // Delete any blanks at the end of a line, but be careful:
xub_StrLen nX = nBreakPos; // If a field has been expanded, we do not want to delete any
while( nX > rInf.GetLineStart() && // blanks inside the field portion. This would cause an unwanted
( CH_TXTATR_BREAKWORD != cFldChr || nX > rInf.GetIdx() ) && // underflow
( CH_BLANK == rInf.GetChar( --nX ) || xub_StrLen nX = nBreakPos;
CH_FULL_BLANK == rInf.GetChar( nX ) ) ) while( nX > rInf.GetLineStart() &&
nBreakPos = nX; ( CH_TXTATR_BREAKWORD != cFldChr || nX > rInf.GetIdx() ) &&
( CH_BLANK == rInf.GetChar( --nX ) ||
CH_FULL_BLANK == rInf.GetChar( nX ) ) )
nBreakPos = nX;
}
if( nBreakPos > rInf.GetIdx() ) if( nBreakPos > rInf.GetIdx() )
nPorLen = nBreakPos - rInf.GetIdx(); nPorLen = nBreakPos - rInf.GetIdx();
} }
......
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