diff options
Diffstat (limited to 'sw/source')
-rw-r--r-- | sw/source/core/txtnode/txtedt.cxx | 2 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par2.cxx | 24 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par3.cxx | 21 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8scan.cxx | 67 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8scan.hxx | 5 |
5 files changed, 62 insertions, 57 deletions
diff --git a/sw/source/core/txtnode/txtedt.cxx b/sw/source/core/txtnode/txtedt.cxx index cc03200ad775..a7a2182d4163 100644 --- a/sw/source/core/txtnode/txtedt.cxx +++ b/sw/source/core/txtnode/txtedt.cxx @@ -1908,7 +1908,7 @@ void SwTxtNode::CountWords( SwDocStat& rStat, const String aScannerText( aExpandText ); SwScanner aScanner( *this, aScannerText, 0, pConversionMap, i18n::WordType::WORD_COUNT, - (xub_StrLen)nExpandBegin, (xub_StrLen)nExpandEnd ); + (xub_StrLen)nExpandBegin, (xub_StrLen)nExpandEnd, true ); const rtl::OUString aBreakWord( CH_TXTATR_BREAKWORD ); diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx index d5a73b9ac209..93847735f4f4 100644 --- a/sw/source/filter/ww8/ww8par2.cxx +++ b/sw/source/filter/ww8/ww8par2.cxx @@ -3775,21 +3775,7 @@ const BYTE* WW8RStyle::HasParaSprm( USHORT nId ) const if( !pParaSprms || !nSprmsLen ) return 0; - const BYTE* pSprms = pParaSprms; - USHORT i, x; - - for( i=0; i < nSprmsLen; ) - { - USHORT nAktId = maSprmParser.GetSprmId(pSprms); - // Sprm found ? - if( nAktId == nId ) - return pSprms + maSprmParser.DistanceToData(nId); - - x = maSprmParser.GetSprmSize(nAktId, pSprms); - i = i + x; - pSprms += x; - } - return 0; // Sprm not found + return maSprmParser.findSprmData(nId, pParaSprms, nSprmsLen); } void WW8RStyle::ImportSprms(BYTE *pSprms, short nLen, bool bPap) @@ -3803,11 +3789,11 @@ void WW8RStyle::ImportSprms(BYTE *pSprms, short nLen, bool bPap) nSprmsLen = nLen; } - while ( nLen > 0 ) + WW8SprmIter aSprmIter(pSprms, nLen, maSprmParser); + while (const sal_uInt8* pSprm = aSprmIter.GetSprms()) { - USHORT nL1 = pIo->ImportSprm(pSprms); - nLen = nLen - nL1; - pSprms += nL1; + pIo->ImportSprm(pSprm); + aSprmIter++; } pParaSprms = 0; diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx index ce066fc5bb96..aa285961f011 100644 --- a/sw/source/filter/ww8/ww8par3.cxx +++ b/sw/source/filter/ww8/ww8par3.cxx @@ -471,20 +471,7 @@ SV_IMPL_PTRARR( WW8LFOInfos, WW8LFOInfo_Ptr ); sal_uInt8* WW8ListManager::GrpprlHasSprm(sal_uInt16 nId, sal_uInt8& rSprms, sal_uInt8 nLen) { - sal_uInt8* pSprms = &rSprms; - USHORT i=0; - while (i < nLen) - { - sal_uInt16 nAktId = maSprmParser.GetSprmId(pSprms); - if( nAktId == nId ) // Sprm found - return pSprms + maSprmParser.DistanceToData(nId); - - // gib Zeiger auf Daten - USHORT x = maSprmParser.GetSprmSize(nAktId, pSprms); - i = i + x; - pSprms += x; - } - return 0; // Sprm not found + return maSprmParser.findSprmData(nId, &rSprms, nLen); } class ListWithId : public std::unary_function<const WW8LSTInfo *, bool> @@ -525,8 +512,8 @@ bool WW8ListManager::ReadLVL(SwNumFmt& rNumFmt, SfxItemSet*& rpItemSet, std::deque<bool> &rNotReallyThere, sal_uInt16 nLevel, ww::bytes &rParaSprms) { - sal_uInt8 aBits1; - sal_uInt16 nStartNo = 0; // Start-Nr. fuer den Writer + sal_uInt8 aBits1(0); + sal_uInt16 nStartNo(0); // Start-Nr. fuer den Writer SvxExtNumType eType; // Writer-Num-Typ SvxAdjust eAdj; // Ausrichtung (Links/rechts/zent.) sal_Unicode cBullet(0x2190); // default safe bullet @@ -560,7 +547,7 @@ bool WW8ListManager::ReadLVL(SwNumFmt& rNumFmt, SfxItemSet*& rpItemSet, if( !bLVLOkB ) return false; - sal_uInt8 ixchFollow; + sal_uInt8 ixchFollow(0); rSt >> ixchFollow; if (ixchFollow == 0) rReader.maTracer.Log(sw::log::eTabInNumbering); diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx index f781e017ea71..4bfba2c34370 100644 --- a/sw/source/filter/ww8/ww8scan.cxx +++ b/sw/source/filter/ww8/ww8scan.cxx @@ -1491,7 +1491,12 @@ WW8_CP WW8ScannerBase::WW8Fc2Cp( WW8_FC nFcPos ) const if( nFcPos == WW8_FC_MAX ) return nFallBackCpEnd; - bool bIsUnicode = false; + bool bIsUnicode; + if (pWw8Fib->nVersion >= 8) + bIsUnicode = false; + else + bIsUnicode = pWw8Fib->fExtChar ? true : false; + if( pPieceIter ) // Complex File ? { ULONG nOldPos = pPieceIter->GetIdx(); @@ -1514,8 +1519,7 @@ WW8_CP WW8ScannerBase::WW8Fc2Cp( WW8_FC nFcPos ) const } else { - if (pWw8Fib->fExtChar) - bIsUnicode=true; + bIsUnicode = pWw8Fib->fExtChar ? true : false; } INT32 nLen = (nCpEnd - nCpStart) * (bIsUnicode ? 2 : 1); @@ -1550,10 +1554,14 @@ WW8_CP WW8ScannerBase::WW8Fc2Cp( WW8_FC nFcPos ) const */ return nFallBackCpEnd; } - // No complex file - if (pWw8Fib->fExtChar) - bIsUnicode=true; - return ((nFcPos - pWw8Fib->fcMin) / (bIsUnicode ? 2 : 1)); + + // No complex file + if (!bIsUnicode) + nFallBackCpEnd = (nFcPos - pWw8Fib->fcMin); + else + nFallBackCpEnd = (nFcPos - pWw8Fib->fcMin + 1) / 2; + + return nFallBackCpEnd; } WW8_FC WW8ScannerBase::WW8Cp2Fc(WW8_CP nCpPos, bool* pIsUnicode, @@ -1568,8 +1576,14 @@ WW8_FC WW8ScannerBase::WW8Cp2Fc(WW8_CP nCpPos, bool* pIsUnicode, if( !pIsUnicode ) pIsUnicode = &bIsUnicode; + if (pWw8Fib->nVersion >= 8) + *pIsUnicode = false; + else + *pIsUnicode = pWw8Fib->fExtChar ? true : false; + if( pPieceIter ) - { // Complex File + { + // Complex File if( pNextPieceCp ) *pNextPieceCp = WW8_CP_MAX; @@ -1597,14 +1611,10 @@ WW8_FC WW8ScannerBase::WW8Cp2Fc(WW8_CP nCpPos, bool* pIsUnicode, *pNextPieceCp = nCpEnd; WW8_FC nRet = SVBT32ToUInt32( ((WW8_PCD*)pData)->fc ); - if (8 > pWw8Fib->nVersion) - if (pWw8Fib->fExtChar) - *pIsUnicode=true; - else - *pIsUnicode = false; - else + if (pWw8Fib->nVersion >= 8) nRet = WW8PLCFx_PCD::TransformPieceAddress( nRet, *pIsUnicode ); - + else + *pIsUnicode = pWw8Fib->fExtChar ? true : false; nRet += (nCpPos - nCpStart) * (*pIsUnicode ? 2 : 1); @@ -1612,10 +1622,6 @@ WW8_FC WW8ScannerBase::WW8Cp2Fc(WW8_CP nCpPos, bool* pIsUnicode, } // No complex file - if (pWw8Fib->fExtChar) - *pIsUnicode = true; - else - *pIsUnicode = false; return pWw8Fib->fcMin + nCpPos * (*pIsUnicode ? 2 : 1); } @@ -2033,7 +2039,7 @@ String WW8ReadPString(SvStream& rStrm, rtl_TextEncoding eEnc, String WW8Read_xstz(SvStream& rStrm, USHORT nChars, bool bAtEndSeekRel1) { - UINT16 b; + UINT16 b(0); if( nChars ) b = nChars; @@ -7374,6 +7380,27 @@ USHORT wwSprmParser::DistanceToData(USHORT nId) const return 1 + mnDelta + SprmDataOfs(nId); } +sal_uInt8* wwSprmParser::findSprmData(sal_uInt16 nId, sal_uInt8* pSprms, + sal_uInt16 nLen) const +{ + while (nLen > (getVersion()?1:0)) + { + sal_uInt16 nAktId = GetSprmId(pSprms); + if (nAktId == nId) // Sprm found + return pSprms + DistanceToData(nId); + + // gib Zeiger auf Daten + sal_uInt16 nSize = GetSprmSize(nAktId, pSprms); + OSL_ENSURE(nSize <= nLen, "sprm longer than remaining bytes"); + //Clip to available size if wrong + nSize = std::min(nSize, nLen); + pSprms += nSize; + nLen -= nSize; + } + // Sprm not found + return 0; +} + SEPr::SEPr() : bkc(2), fTitlePage(0), fAutoPgn(0), nfcPgn(0), fUnlocked(0), cnsPgn(0), fPgnRestart(0), fEndNote(1), lnc(0), grpfIhdt(0), nLnnMod(0), dxaLnn(0), diff --git a/sw/source/filter/ww8/ww8scan.hxx b/sw/source/filter/ww8/ww8scan.hxx index 7e29e0aefa18..c079e8c26b92 100644 --- a/sw/source/filter/ww8/ww8scan.hxx +++ b/sw/source/filter/ww8/ww8scan.hxx @@ -146,6 +146,11 @@ public: /// The minimum acceptable sprm len possible for this type of parser int MinSprmLen() const { return (IsSevenMinus(meVersion)) ? 2 : 3; } + /// Returns the offset to data of the first sprm of id nId, 0 + // if not found. nLen must be the <= length of pSprms + sal_uInt8* findSprmData(sal_uInt16 nId, sal_uInt8* pSprms, sal_uInt16 nLen) + const; + inline int getVersion() const { return meVersion; } //cmc, I'm dubious about the usage of this, how can it be 0 }; |