diff options
Diffstat (limited to 'editeng/source/rtf/rtfitem.cxx')
-rw-r--r-- | editeng/source/rtf/rtfitem.cxx | 168 |
1 files changed, 84 insertions, 84 deletions
diff --git a/editeng/source/rtf/rtfitem.cxx b/editeng/source/rtf/rtfitem.cxx index 45a579d6e301..dab691d39f6c 100644 --- a/editeng/source/rtf/rtfitem.cxx +++ b/editeng/source/rtf/rtfitem.cxx @@ -1690,107 +1690,107 @@ void SvxRTFParser::ReadBackgroundAttr( int nToken, SfxItemSet& rSet, // pard / plain handling void SvxRTFParser::RTFPardPlain( bool const bPard, SfxItemSet** ppSet ) { - if( !bNewGroup && !aAttrStack.empty() ) // not at the beginning of a new group + if( bNewGroup || aAttrStack.empty() ) // not at the beginning of a new group + return; + + SvxRTFItemStackType* pCurrent = aAttrStack.back().get(); + + int nLastToken = GetStackPtr(-1)->nTokenId; + bool bNewStkEntry = true; + if( RTF_PARD != nLastToken && + RTF_PLAIN != nLastToken && + BRACELEFT != nLastToken ) { - SvxRTFItemStackType* pCurrent = aAttrStack.back().get(); + if (pCurrent->aAttrSet.Count() || pCurrent->m_pChildList || pCurrent->nStyleNo) + { + // open a new group + std::unique_ptr<SvxRTFItemStackType> pNew(new SvxRTFItemStackType( *pCurrent, *pInsPos, true )); + pNew->SetRTFDefaults( GetRTFDefaults() ); + + // Set all until here valid attributes + AttrGroupEnd(); + pCurrent = aAttrStack.empty() ? nullptr : aAttrStack.back().get(); // can be changed after AttrGroupEnd! + pNew->aAttrSet.SetParent( pCurrent ? &pCurrent->aAttrSet : nullptr ); + aAttrStack.push_back( std::move(pNew) ); + pCurrent = aAttrStack.back().get(); + } + else + { + // continue to use this entry as new + pCurrent->SetStartPos( *pInsPos ); + bNewStkEntry = false; + } + } - int nLastToken = GetStackPtr(-1)->nTokenId; - bool bNewStkEntry = true; - if( RTF_PARD != nLastToken && - RTF_PLAIN != nLastToken && - BRACELEFT != nLastToken ) + // now reset all to default + if( bNewStkEntry && + ( pCurrent->aAttrSet.GetParent() || pCurrent->aAttrSet.Count() )) + { + const SfxPoolItem *pItem, *pDef; + const sal_uInt16* pPtr; + sal_uInt16 nCnt; + const SfxItemSet* pDfltSet = &GetRTFDefaults(); + if( bPard ) { - if (pCurrent->aAttrSet.Count() || pCurrent->m_pChildList || pCurrent->nStyleNo) - { - // open a new group - std::unique_ptr<SvxRTFItemStackType> pNew(new SvxRTFItemStackType( *pCurrent, *pInsPos, true )); - pNew->SetRTFDefaults( GetRTFDefaults() ); - - // Set all until here valid attributes - AttrGroupEnd(); - pCurrent = aAttrStack.empty() ? nullptr : aAttrStack.back().get(); // can be changed after AttrGroupEnd! - pNew->aAttrSet.SetParent( pCurrent ? &pCurrent->aAttrSet : nullptr ); - aAttrStack.push_back( std::move(pNew) ); - pCurrent = aAttrStack.back().get(); - } - else - { - // continue to use this entry as new - pCurrent->SetStartPos( *pInsPos ); - bNewStkEntry = false; - } + pCurrent->nStyleNo = 0; + pPtr = reinterpret_cast<sal_uInt16*>(&aPardMap); + nCnt = sizeof(aPardMap) / sizeof(sal_uInt16); + } + else + { + pPtr = reinterpret_cast<sal_uInt16*>(&aPlainMap); + nCnt = sizeof(aPlainMap) / sizeof(sal_uInt16); } - // now reset all to default - if( bNewStkEntry && - ( pCurrent->aAttrSet.GetParent() || pCurrent->aAttrSet.Count() )) + for( sal_uInt16 n = 0; n < nCnt; ++n, ++pPtr ) { - const SfxPoolItem *pItem, *pDef; - const sal_uInt16* pPtr; - sal_uInt16 nCnt; - const SfxItemSet* pDfltSet = &GetRTFDefaults(); - if( bPard ) + // Item set and different -> Set the Default Pool + if( !*pPtr ) + ; + else if (SfxItemPool::IsSlot(*pPtr)) + pCurrent->aAttrSet.ClearItem( *pPtr ); + else if( IsChkStyleAttr() ) + pCurrent->aAttrSet.Put( pDfltSet->Get( *pPtr ) ); + else if( !pCurrent->aAttrSet.GetParent() ) { - pCurrent->nStyleNo = 0; - pPtr = reinterpret_cast<sal_uInt16*>(&aPardMap); - nCnt = sizeof(aPardMap) / sizeof(sal_uInt16); + if( SfxItemState::SET == + pDfltSet->GetItemState( *pPtr, false, &pDef )) + pCurrent->aAttrSet.Put( *pDef ); + else + pCurrent->aAttrSet.ClearItem( *pPtr ); } + else if( SfxItemState::SET == pCurrent->aAttrSet.GetParent()-> + GetItemState( *pPtr, true, &pItem ) && + *( pDef = &pDfltSet->Get( *pPtr )) != *pItem ) + pCurrent->aAttrSet.Put( *pDef ); else { - pPtr = reinterpret_cast<sal_uInt16*>(&aPlainMap); - nCnt = sizeof(aPlainMap) / sizeof(sal_uInt16); - } - - for( sal_uInt16 n = 0; n < nCnt; ++n, ++pPtr ) - { - // Item set and different -> Set the Default Pool - if( !*pPtr ) - ; - else if (SfxItemPool::IsSlot(*pPtr)) - pCurrent->aAttrSet.ClearItem( *pPtr ); - else if( IsChkStyleAttr() ) - pCurrent->aAttrSet.Put( pDfltSet->Get( *pPtr ) ); - else if( !pCurrent->aAttrSet.GetParent() ) - { - if( SfxItemState::SET == - pDfltSet->GetItemState( *pPtr, false, &pDef )) - pCurrent->aAttrSet.Put( *pDef ); - else - pCurrent->aAttrSet.ClearItem( *pPtr ); - } - else if( SfxItemState::SET == pCurrent->aAttrSet.GetParent()-> - GetItemState( *pPtr, true, &pItem ) && - *( pDef = &pDfltSet->Get( *pPtr )) != *pItem ) + if( SfxItemState::SET == + pDfltSet->GetItemState( *pPtr, false, &pDef )) pCurrent->aAttrSet.Put( *pDef ); else - { - if( SfxItemState::SET == - pDfltSet->GetItemState( *pPtr, false, &pDef )) - pCurrent->aAttrSet.Put( *pDef ); - else - pCurrent->aAttrSet.ClearItem( *pPtr ); - } + pCurrent->aAttrSet.ClearItem( *pPtr ); } } - else if( bPard ) - pCurrent->nStyleNo = 0; // reset Style number + } + else if( bPard ) + pCurrent->nStyleNo = 0; // reset Style number - *ppSet = &pCurrent->aAttrSet; + *ppSet = &pCurrent->aAttrSet; - if (!bPard) - { - //Once we have a default font, then any text without a font specifier is - //in the default font, and thus has the default font charset, otherwise - //we can fall back to the ansicpg set codeset - if (nDfltFont != -1) - { - const vcl::Font& rSVFont = GetFont(sal_uInt16(nDfltFont)); - SetEncoding(rSVFont.GetCharSet()); - } - else - SetEncoding(GetCodeSet()); - } + if (bPard) + return; + + //Once we have a default font, then any text without a font specifier is + //in the default font, and thus has the default font charset, otherwise + //we can fall back to the ansicpg set codeset + if (nDfltFont != -1) + { + const vcl::Font& rSVFont = GetFont(sal_uInt16(nDfltFont)); + SetEncoding(rSVFont.GetCharSet()); } + else + SetEncoding(GetCodeSet()); } void SvxRTFParser::SetDefault( int nToken, int nValue ) |