1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_editeng.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil -*- */ 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include <editeng/flstitem.hxx> 34*cdf0e10cSrcweir #include <editeng/fontitem.hxx> 35*cdf0e10cSrcweir #include <editeng/postitem.hxx> 36*cdf0e10cSrcweir #include <editeng/wghtitem.hxx> 37*cdf0e10cSrcweir #include <editeng/fhgtitem.hxx> 38*cdf0e10cSrcweir #include <editeng/fwdtitem.hxx> 39*cdf0e10cSrcweir #include <editeng/udlnitem.hxx> 40*cdf0e10cSrcweir #include <editeng/crsditem.hxx> 41*cdf0e10cSrcweir #include <editeng/shdditem.hxx> 42*cdf0e10cSrcweir #include <editeng/akrnitem.hxx> 43*cdf0e10cSrcweir #include <editeng/wrlmitem.hxx> 44*cdf0e10cSrcweir #include <editeng/cntritem.hxx> 45*cdf0e10cSrcweir #include <editeng/prszitem.hxx> 46*cdf0e10cSrcweir #include <editeng/colritem.hxx> 47*cdf0e10cSrcweir #include <editeng/cscoitem.hxx> 48*cdf0e10cSrcweir #include <editeng/kernitem.hxx> 49*cdf0e10cSrcweir #include <editeng/cmapitem.hxx> 50*cdf0e10cSrcweir #include <editeng/escpitem.hxx> 51*cdf0e10cSrcweir #include <editeng/langitem.hxx> 52*cdf0e10cSrcweir #include <editeng/nlbkitem.hxx> 53*cdf0e10cSrcweir #include <editeng/nhypitem.hxx> 54*cdf0e10cSrcweir #include <editeng/lcolitem.hxx> 55*cdf0e10cSrcweir #include <editeng/blnkitem.hxx> 56*cdf0e10cSrcweir #include <editeng/emphitem.hxx> 57*cdf0e10cSrcweir #include <editeng/twolinesitem.hxx> 58*cdf0e10cSrcweir #include <editeng/pbinitem.hxx> 59*cdf0e10cSrcweir #include <editeng/sizeitem.hxx> 60*cdf0e10cSrcweir #include <editeng/lrspitem.hxx> 61*cdf0e10cSrcweir #include <editeng/ulspitem.hxx> 62*cdf0e10cSrcweir #include <editeng/prntitem.hxx> 63*cdf0e10cSrcweir #include <editeng/opaqitem.hxx> 64*cdf0e10cSrcweir #include <editeng/protitem.hxx> 65*cdf0e10cSrcweir #include <editeng/shaditem.hxx> 66*cdf0e10cSrcweir #include <editeng/boxitem.hxx> 67*cdf0e10cSrcweir #include <editeng/brkitem.hxx> 68*cdf0e10cSrcweir #include <editeng/keepitem.hxx> 69*cdf0e10cSrcweir #include <editeng/bolnitem.hxx> 70*cdf0e10cSrcweir #include <editeng/brshitem.hxx> 71*cdf0e10cSrcweir #include <editeng/lspcitem.hxx> 72*cdf0e10cSrcweir #include <editeng/adjitem.hxx> 73*cdf0e10cSrcweir #include <editeng/orphitem.hxx> 74*cdf0e10cSrcweir #include <editeng/widwitem.hxx> 75*cdf0e10cSrcweir #include <editeng/tstpitem.hxx> 76*cdf0e10cSrcweir #include <editeng/pmdlitem.hxx> 77*cdf0e10cSrcweir #include <editeng/spltitem.hxx> 78*cdf0e10cSrcweir #include <editeng/hyznitem.hxx> 79*cdf0e10cSrcweir #include <editeng/charscaleitem.hxx> 80*cdf0e10cSrcweir #include <editeng/charrotateitem.hxx> 81*cdf0e10cSrcweir #include <editeng/charreliefitem.hxx> 82*cdf0e10cSrcweir #include <editeng/paravertalignitem.hxx> 83*cdf0e10cSrcweir #include <editeng/forbiddenruleitem.hxx> 84*cdf0e10cSrcweir #include <editeng/hngpnctitem.hxx> 85*cdf0e10cSrcweir #include <editeng/scriptspaceitem.hxx> 86*cdf0e10cSrcweir #include <editeng/frmdiritem.hxx> 87*cdf0e10cSrcweir #include <editeng/charhiddenitem.hxx> 88*cdf0e10cSrcweir 89*cdf0e10cSrcweir #include <svtools/rtftoken.h> 90*cdf0e10cSrcweir #include <svl/itempool.hxx> 91*cdf0e10cSrcweir #include <svl/itemiter.hxx> 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir #include <editeng/svxrtf.hxx> 94*cdf0e10cSrcweir #include <editeng/editids.hrc> 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir #define BRACELEFT '{' 97*cdf0e10cSrcweir #define BRACERIGHT '}' 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir // einige Hilfs-Funktionen 101*cdf0e10cSrcweir // char 102*cdf0e10cSrcweir inline const SvxEscapementItem& GetEscapement(const SfxItemSet& rSet,sal_uInt16 nId,sal_Bool bInP=sal_True) 103*cdf0e10cSrcweir { return (const SvxEscapementItem&)rSet.Get( nId,bInP); } 104*cdf0e10cSrcweir inline const SvxLineSpacingItem& GetLineSpacing(const SfxItemSet& rSet,sal_uInt16 nId,sal_Bool bInP=sal_True) 105*cdf0e10cSrcweir { return (const SvxLineSpacingItem&)rSet.Get( nId,bInP); } 106*cdf0e10cSrcweir // frm 107*cdf0e10cSrcweir inline const SvxLRSpaceItem& GetLRSpace(const SfxItemSet& rSet,sal_uInt16 nId,sal_Bool bInP=sal_True) 108*cdf0e10cSrcweir { return (const SvxLRSpaceItem&)rSet.Get( nId,bInP); } 109*cdf0e10cSrcweir inline const SvxULSpaceItem& GetULSpace(const SfxItemSet& rSet,sal_uInt16 nId,sal_Bool bInP=sal_True) 110*cdf0e10cSrcweir { return (const SvxULSpaceItem&)rSet.Get( nId,bInP); } 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir #define PARDID ((RTFPardAttrMapIds*)aPardMap.GetData()) 113*cdf0e10cSrcweir #define PLAINID ((RTFPlainAttrMapIds*)aPlainMap.GetData()) 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir void SvxRTFParser::SetScriptAttr( RTF_CharTypeDef eType, SfxItemSet& rSet, 116*cdf0e10cSrcweir SfxPoolItem& rItem ) 117*cdf0e10cSrcweir { 118*cdf0e10cSrcweir const sal_uInt16 *pNormal = 0, *pCJK = 0, *pCTL = 0; 119*cdf0e10cSrcweir const RTFPlainAttrMapIds* pIds = (RTFPlainAttrMapIds*)aPlainMap.GetData(); 120*cdf0e10cSrcweir switch( rItem.Which() ) 121*cdf0e10cSrcweir { 122*cdf0e10cSrcweir case SID_ATTR_CHAR_FONT: 123*cdf0e10cSrcweir pNormal = &pIds->nFont; 124*cdf0e10cSrcweir pCJK = &pIds->nCJKFont; 125*cdf0e10cSrcweir pCTL = &pIds->nCTLFont; 126*cdf0e10cSrcweir break; 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir case SID_ATTR_CHAR_FONTHEIGHT: 129*cdf0e10cSrcweir pNormal = &pIds->nFontHeight; 130*cdf0e10cSrcweir pCJK = &pIds->nCJKFontHeight; 131*cdf0e10cSrcweir pCTL = &pIds->nCTLFontHeight; 132*cdf0e10cSrcweir break; 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir case SID_ATTR_CHAR_POSTURE: 135*cdf0e10cSrcweir pNormal = &pIds->nPosture; 136*cdf0e10cSrcweir pCJK = &pIds->nCJKPosture; 137*cdf0e10cSrcweir pCTL = &pIds->nCTLPosture; 138*cdf0e10cSrcweir break; 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir case SID_ATTR_CHAR_WEIGHT: 141*cdf0e10cSrcweir pNormal = &pIds->nWeight; 142*cdf0e10cSrcweir pCJK = &pIds->nCJKWeight; 143*cdf0e10cSrcweir pCTL = &pIds->nCTLWeight; 144*cdf0e10cSrcweir break; 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir case SID_ATTR_CHAR_LANGUAGE: 147*cdf0e10cSrcweir pNormal = &pIds->nLanguage; 148*cdf0e10cSrcweir pCJK = &pIds->nCJKLanguage; 149*cdf0e10cSrcweir pCTL = &pIds->nCTLLanguage; 150*cdf0e10cSrcweir break; 151*cdf0e10cSrcweir 152*cdf0e10cSrcweir case 0: 153*cdf0e10cSrcweir // it exist no WhichId - don't set this item 154*cdf0e10cSrcweir break; 155*cdf0e10cSrcweir 156*cdf0e10cSrcweir default: 157*cdf0e10cSrcweir rSet.Put( rItem ); 158*cdf0e10cSrcweir break; 159*cdf0e10cSrcweir } 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir 162*cdf0e10cSrcweir if( DOUBLEBYTE_CHARTYPE == eType ) 163*cdf0e10cSrcweir { 164*cdf0e10cSrcweir if( bIsLeftToRightDef && *pCJK ) 165*cdf0e10cSrcweir { 166*cdf0e10cSrcweir rItem.SetWhich( *pCJK ); 167*cdf0e10cSrcweir rSet.Put( rItem ); 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir } 170*cdf0e10cSrcweir else if( !bIsLeftToRightDef ) 171*cdf0e10cSrcweir { 172*cdf0e10cSrcweir if( *pCTL ) 173*cdf0e10cSrcweir { 174*cdf0e10cSrcweir rItem.SetWhich( *pCTL ); 175*cdf0e10cSrcweir rSet.Put( rItem ); 176*cdf0e10cSrcweir } 177*cdf0e10cSrcweir } 178*cdf0e10cSrcweir else 179*cdf0e10cSrcweir { 180*cdf0e10cSrcweir if( LOW_CHARTYPE == eType ) 181*cdf0e10cSrcweir { 182*cdf0e10cSrcweir if( *pNormal ) 183*cdf0e10cSrcweir { 184*cdf0e10cSrcweir rItem.SetWhich( *pNormal ); 185*cdf0e10cSrcweir rSet.Put( rItem ); 186*cdf0e10cSrcweir } 187*cdf0e10cSrcweir } 188*cdf0e10cSrcweir else if( HIGH_CHARTYPE == eType ) 189*cdf0e10cSrcweir { 190*cdf0e10cSrcweir if( *pCTL ) 191*cdf0e10cSrcweir { 192*cdf0e10cSrcweir rItem.SetWhich( *pCTL ); 193*cdf0e10cSrcweir rSet.Put( rItem ); 194*cdf0e10cSrcweir } 195*cdf0e10cSrcweir } 196*cdf0e10cSrcweir else 197*cdf0e10cSrcweir { 198*cdf0e10cSrcweir if( *pCJK ) 199*cdf0e10cSrcweir { 200*cdf0e10cSrcweir rItem.SetWhich( *pCJK ); 201*cdf0e10cSrcweir rSet.Put( rItem ); 202*cdf0e10cSrcweir } 203*cdf0e10cSrcweir if( *pCTL ) 204*cdf0e10cSrcweir { 205*cdf0e10cSrcweir rItem.SetWhich( *pCTL ); 206*cdf0e10cSrcweir rSet.Put( rItem ); 207*cdf0e10cSrcweir } 208*cdf0e10cSrcweir if( *pNormal ) 209*cdf0e10cSrcweir { 210*cdf0e10cSrcweir rItem.SetWhich( *pNormal ); 211*cdf0e10cSrcweir rSet.Put( rItem ); 212*cdf0e10cSrcweir } 213*cdf0e10cSrcweir } 214*cdf0e10cSrcweir } 215*cdf0e10cSrcweir } 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir // -------------------- 218*cdf0e10cSrcweir 219*cdf0e10cSrcweir void SvxRTFParser::ReadAttr( int nToken, SfxItemSet* pSet ) 220*cdf0e10cSrcweir { 221*cdf0e10cSrcweir DBG_ASSERT( pSet, "Es muss ein SfxItemSet uebergeben werden!" ); 222*cdf0e10cSrcweir int bFirstToken = sal_True, bWeiter = sal_True; 223*cdf0e10cSrcweir sal_uInt16 nStyleNo = 0; // default 224*cdf0e10cSrcweir FontUnderline eUnderline; 225*cdf0e10cSrcweir FontUnderline eOverline; 226*cdf0e10cSrcweir FontEmphasisMark eEmphasis; 227*cdf0e10cSrcweir bPardTokenRead = sal_False; 228*cdf0e10cSrcweir RTF_CharTypeDef eCharType = NOTDEF_CHARTYPE; 229*cdf0e10cSrcweir sal_uInt16 nFontAlign; 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir int bChkStkPos = !bNewGroup && !aAttrStack.empty(); 232*cdf0e10cSrcweir 233*cdf0e10cSrcweir while( bWeiter && IsParserWorking() ) // solange bekannte Attribute erkannt werden 234*cdf0e10cSrcweir { 235*cdf0e10cSrcweir switch( nToken ) 236*cdf0e10cSrcweir { 237*cdf0e10cSrcweir case RTF_PARD: 238*cdf0e10cSrcweir RTFPardPlain( sal_True, &pSet ); 239*cdf0e10cSrcweir ResetPard(); 240*cdf0e10cSrcweir nStyleNo = 0; 241*cdf0e10cSrcweir bPardTokenRead = sal_True; 242*cdf0e10cSrcweir break; 243*cdf0e10cSrcweir 244*cdf0e10cSrcweir case RTF_PLAIN: 245*cdf0e10cSrcweir RTFPardPlain( sal_False, &pSet ); 246*cdf0e10cSrcweir break; 247*cdf0e10cSrcweir 248*cdf0e10cSrcweir default: 249*cdf0e10cSrcweir do { // middle checked loop 250*cdf0e10cSrcweir if( !bChkStkPos ) 251*cdf0e10cSrcweir break; 252*cdf0e10cSrcweir 253*cdf0e10cSrcweir SvxRTFItemStackType* pAkt = aAttrStack.empty() ? 0 : aAttrStack.back(); 254*cdf0e10cSrcweir if( !pAkt || (pAkt->pSttNd->GetIdx() == pInsPos->GetNodeIdx() && 255*cdf0e10cSrcweir pAkt->nSttCnt == pInsPos->GetCntIdx() )) 256*cdf0e10cSrcweir break; 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir int nLastToken = GetStackPtr(-1)->nTokenId; 259*cdf0e10cSrcweir if( RTF_PARD == nLastToken || RTF_PLAIN == nLastToken ) 260*cdf0e10cSrcweir break; 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir if( pAkt->aAttrSet.Count() || pAkt->pChildList || 263*cdf0e10cSrcweir pAkt->nStyleNo ) 264*cdf0e10cSrcweir { 265*cdf0e10cSrcweir // eine neue Gruppe aufmachen 266*cdf0e10cSrcweir SvxRTFItemStackType* pNew = new SvxRTFItemStackType( 267*cdf0e10cSrcweir *pAkt, *pInsPos, sal_True ); 268*cdf0e10cSrcweir pNew->SetRTFDefaults( GetRTFDefaults() ); 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir // alle bis hierher gueltigen Attribute "setzen" 271*cdf0e10cSrcweir AttrGroupEnd(); 272*cdf0e10cSrcweir pAkt = aAttrStack.empty() ? 0 : aAttrStack.back(); // can be changed after AttrGroupEnd! 273*cdf0e10cSrcweir pNew->aAttrSet.SetParent( pAkt ? &pAkt->aAttrSet : 0 ); 274*cdf0e10cSrcweir 275*cdf0e10cSrcweir aAttrStack.push_back( pNew ); 276*cdf0e10cSrcweir pAkt = pNew; 277*cdf0e10cSrcweir } 278*cdf0e10cSrcweir else 279*cdf0e10cSrcweir // diesen Eintrag als neuen weiterbenutzen 280*cdf0e10cSrcweir pAkt->SetStartPos( *pInsPos ); 281*cdf0e10cSrcweir 282*cdf0e10cSrcweir pSet = &pAkt->aAttrSet; 283*cdf0e10cSrcweir } while( sal_False ); 284*cdf0e10cSrcweir 285*cdf0e10cSrcweir switch( nToken ) 286*cdf0e10cSrcweir { 287*cdf0e10cSrcweir case RTF_INTBL: 288*cdf0e10cSrcweir case RTF_PAGEBB: 289*cdf0e10cSrcweir case RTF_SBYS: 290*cdf0e10cSrcweir case RTF_CS: 291*cdf0e10cSrcweir case RTF_LS: 292*cdf0e10cSrcweir case RTF_ILVL: 293*cdf0e10cSrcweir UnknownAttrToken( nToken, pSet ); 294*cdf0e10cSrcweir break; 295*cdf0e10cSrcweir 296*cdf0e10cSrcweir case RTF_S: 297*cdf0e10cSrcweir if( bIsInReadStyleTab ) 298*cdf0e10cSrcweir { 299*cdf0e10cSrcweir if( !bFirstToken ) 300*cdf0e10cSrcweir SkipToken( -1 ); 301*cdf0e10cSrcweir bWeiter = sal_False; 302*cdf0e10cSrcweir } 303*cdf0e10cSrcweir else 304*cdf0e10cSrcweir { 305*cdf0e10cSrcweir nStyleNo = -1 == nTokenValue ? 0 : sal_uInt16(nTokenValue); 306*cdf0e10cSrcweir // setze am akt. auf dem AttrStack stehenden Style die 307*cdf0e10cSrcweir // StyleNummer 308*cdf0e10cSrcweir SvxRTFItemStackType* pAkt = aAttrStack.empty() ? 0 : aAttrStack.back(); 309*cdf0e10cSrcweir if( !pAkt ) 310*cdf0e10cSrcweir break; 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir pAkt->nStyleNo = sal_uInt16( nStyleNo ); 313*cdf0e10cSrcweir 314*cdf0e10cSrcweir #if 0 315*cdf0e10cSrcweir // JP 05.09.95: zuruecksetzen der Style-Attribute fuehrt nur zu Problemen. 316*cdf0e10cSrcweir // Es muss reichen, wenn das ueber pard/plain erfolgt 317*cdf0e10cSrcweir // ansonsten Bugdoc 15304.rtf - nach nur "\pard" falscher Font !! 318*cdf0e10cSrcweir 319*cdf0e10cSrcweir SvxRTFStyleType* pStyle = aStyleTbl.Get( pAkt->nStyleNo ); 320*cdf0e10cSrcweir if( pStyle && pStyle->aAttrSet.Count() ) 321*cdf0e10cSrcweir { 322*cdf0e10cSrcweir //JP 07.07.95: 323*cdf0e10cSrcweir // alle Attribute, die in der Vorlage gesetzt werden 324*cdf0e10cSrcweir // auf defaults setzen. In RTF werden die Attribute 325*cdf0e10cSrcweir // der Vorlage danach ja wiederholt. 326*cdf0e10cSrcweir // WICHTIG: Attribute die in der Vorlage definiert 327*cdf0e10cSrcweir // sind, werden zurueckgesetzt !!!! 328*cdf0e10cSrcweir // pAkt->aAttrSet.Put( pStyle->aAttrSet ); 329*cdf0e10cSrcweir 330*cdf0e10cSrcweir SfxItemIter aIter( pStyle->aAttrSet ); 331*cdf0e10cSrcweir SfxItemPool* pPool = pStyle->aAttrSet.GetPool(); 332*cdf0e10cSrcweir sal_uInt16 nWh = aIter.GetCurItem()->Which(); 333*cdf0e10cSrcweir while( sal_True ) 334*cdf0e10cSrcweir { 335*cdf0e10cSrcweir pAkt->aAttrSet.Put( pPool->GetDefaultItem( nWh )); 336*cdf0e10cSrcweir if( aIter.IsAtEnd() ) 337*cdf0e10cSrcweir break; 338*cdf0e10cSrcweir nWh = aIter.NextItem()->Which(); 339*cdf0e10cSrcweir } 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir #endif 342*cdf0e10cSrcweir } 343*cdf0e10cSrcweir break; 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir case RTF_KEEP: 346*cdf0e10cSrcweir if( PARDID->nSplit ) 347*cdf0e10cSrcweir { 348*cdf0e10cSrcweir pSet->Put( SvxFmtSplitItem( sal_False, PARDID->nSplit )); 349*cdf0e10cSrcweir } 350*cdf0e10cSrcweir break; 351*cdf0e10cSrcweir 352*cdf0e10cSrcweir case RTF_KEEPN: 353*cdf0e10cSrcweir if( PARDID->nKeep ) 354*cdf0e10cSrcweir { 355*cdf0e10cSrcweir pSet->Put( SvxFmtKeepItem( sal_True, PARDID->nKeep )); 356*cdf0e10cSrcweir } 357*cdf0e10cSrcweir break; 358*cdf0e10cSrcweir 359*cdf0e10cSrcweir case RTF_LEVEL: 360*cdf0e10cSrcweir if( PARDID->nOutlineLvl ) 361*cdf0e10cSrcweir { 362*cdf0e10cSrcweir pSet->Put( SfxUInt16Item( PARDID->nOutlineLvl, 363*cdf0e10cSrcweir (sal_uInt16)nTokenValue )); 364*cdf0e10cSrcweir } 365*cdf0e10cSrcweir break; 366*cdf0e10cSrcweir 367*cdf0e10cSrcweir case RTF_QL: 368*cdf0e10cSrcweir if( PARDID->nAdjust ) 369*cdf0e10cSrcweir { 370*cdf0e10cSrcweir pSet->Put( SvxAdjustItem( SVX_ADJUST_LEFT, PARDID->nAdjust )); 371*cdf0e10cSrcweir } 372*cdf0e10cSrcweir break; 373*cdf0e10cSrcweir case RTF_QR: 374*cdf0e10cSrcweir if( PARDID->nAdjust ) 375*cdf0e10cSrcweir { 376*cdf0e10cSrcweir pSet->Put( SvxAdjustItem( SVX_ADJUST_RIGHT, PARDID->nAdjust )); 377*cdf0e10cSrcweir } 378*cdf0e10cSrcweir break; 379*cdf0e10cSrcweir case RTF_QJ: 380*cdf0e10cSrcweir if( PARDID->nAdjust ) 381*cdf0e10cSrcweir { 382*cdf0e10cSrcweir pSet->Put( SvxAdjustItem( SVX_ADJUST_BLOCK, PARDID->nAdjust )); 383*cdf0e10cSrcweir } 384*cdf0e10cSrcweir break; 385*cdf0e10cSrcweir case RTF_QC: 386*cdf0e10cSrcweir if( PARDID->nAdjust ) 387*cdf0e10cSrcweir { 388*cdf0e10cSrcweir pSet->Put( SvxAdjustItem( SVX_ADJUST_CENTER, PARDID->nAdjust )); 389*cdf0e10cSrcweir } 390*cdf0e10cSrcweir break; 391*cdf0e10cSrcweir 392*cdf0e10cSrcweir case RTF_FI: 393*cdf0e10cSrcweir if( PARDID->nLRSpace ) 394*cdf0e10cSrcweir { 395*cdf0e10cSrcweir SvxLRSpaceItem aLR( GetLRSpace(*pSet, PARDID->nLRSpace )); 396*cdf0e10cSrcweir sal_uInt16 nSz = 0; 397*cdf0e10cSrcweir if( -1 != nTokenValue ) 398*cdf0e10cSrcweir { 399*cdf0e10cSrcweir if( IsCalcValue() ) 400*cdf0e10cSrcweir CalcValue(); 401*cdf0e10cSrcweir nSz = sal_uInt16(nTokenValue); 402*cdf0e10cSrcweir } 403*cdf0e10cSrcweir aLR.SetTxtFirstLineOfst( nSz ); 404*cdf0e10cSrcweir pSet->Put( aLR ); 405*cdf0e10cSrcweir } 406*cdf0e10cSrcweir break; 407*cdf0e10cSrcweir 408*cdf0e10cSrcweir case RTF_LI: 409*cdf0e10cSrcweir case RTF_LIN: 410*cdf0e10cSrcweir if( PARDID->nLRSpace ) 411*cdf0e10cSrcweir { 412*cdf0e10cSrcweir SvxLRSpaceItem aLR( GetLRSpace(*pSet, PARDID->nLRSpace )); 413*cdf0e10cSrcweir sal_uInt16 nSz = 0; 414*cdf0e10cSrcweir if( 0 < nTokenValue ) 415*cdf0e10cSrcweir { 416*cdf0e10cSrcweir if( IsCalcValue() ) 417*cdf0e10cSrcweir CalcValue(); 418*cdf0e10cSrcweir nSz = sal_uInt16(nTokenValue); 419*cdf0e10cSrcweir } 420*cdf0e10cSrcweir aLR.SetTxtLeft( nSz ); 421*cdf0e10cSrcweir pSet->Put( aLR ); 422*cdf0e10cSrcweir } 423*cdf0e10cSrcweir break; 424*cdf0e10cSrcweir 425*cdf0e10cSrcweir case RTF_RI: 426*cdf0e10cSrcweir case RTF_RIN: 427*cdf0e10cSrcweir if( PARDID->nLRSpace ) 428*cdf0e10cSrcweir { 429*cdf0e10cSrcweir SvxLRSpaceItem aLR( GetLRSpace(*pSet, PARDID->nLRSpace )); 430*cdf0e10cSrcweir sal_uInt16 nSz = 0; 431*cdf0e10cSrcweir if( 0 < nTokenValue ) 432*cdf0e10cSrcweir { 433*cdf0e10cSrcweir if( IsCalcValue() ) 434*cdf0e10cSrcweir CalcValue(); 435*cdf0e10cSrcweir nSz = sal_uInt16(nTokenValue); 436*cdf0e10cSrcweir } 437*cdf0e10cSrcweir aLR.SetRight( nSz ); 438*cdf0e10cSrcweir pSet->Put( aLR ); 439*cdf0e10cSrcweir } 440*cdf0e10cSrcweir break; 441*cdf0e10cSrcweir 442*cdf0e10cSrcweir case RTF_SB: 443*cdf0e10cSrcweir if( PARDID->nULSpace ) 444*cdf0e10cSrcweir { 445*cdf0e10cSrcweir SvxULSpaceItem aUL( GetULSpace(*pSet, PARDID->nULSpace )); 446*cdf0e10cSrcweir sal_uInt16 nSz = 0; 447*cdf0e10cSrcweir if( 0 < nTokenValue ) 448*cdf0e10cSrcweir { 449*cdf0e10cSrcweir if( IsCalcValue() ) 450*cdf0e10cSrcweir CalcValue(); 451*cdf0e10cSrcweir nSz = sal_uInt16(nTokenValue); 452*cdf0e10cSrcweir } 453*cdf0e10cSrcweir aUL.SetUpper( nSz ); 454*cdf0e10cSrcweir pSet->Put( aUL ); 455*cdf0e10cSrcweir } 456*cdf0e10cSrcweir break; 457*cdf0e10cSrcweir 458*cdf0e10cSrcweir case RTF_SA: 459*cdf0e10cSrcweir if( PARDID->nULSpace ) 460*cdf0e10cSrcweir { 461*cdf0e10cSrcweir SvxULSpaceItem aUL( GetULSpace(*pSet, PARDID->nULSpace )); 462*cdf0e10cSrcweir sal_uInt16 nSz = 0; 463*cdf0e10cSrcweir if( 0 < nTokenValue ) 464*cdf0e10cSrcweir { 465*cdf0e10cSrcweir if( IsCalcValue() ) 466*cdf0e10cSrcweir CalcValue(); 467*cdf0e10cSrcweir nSz = sal_uInt16(nTokenValue); 468*cdf0e10cSrcweir } 469*cdf0e10cSrcweir aUL.SetLower( nSz ); 470*cdf0e10cSrcweir pSet->Put( aUL ); 471*cdf0e10cSrcweir } 472*cdf0e10cSrcweir break; 473*cdf0e10cSrcweir 474*cdf0e10cSrcweir case RTF_SLMULT: 475*cdf0e10cSrcweir if( PARDID->nLinespacing && 1 == nTokenValue ) 476*cdf0e10cSrcweir { 477*cdf0e10cSrcweir // dann wird auf mehrzeilig umgeschaltet! 478*cdf0e10cSrcweir SvxLineSpacingItem aLSpace( GetLineSpacing( *pSet, 479*cdf0e10cSrcweir PARDID->nLinespacing, sal_False )); 480*cdf0e10cSrcweir 481*cdf0e10cSrcweir // wieviel bekommt man aus dem LineHeight Wert heraus 482*cdf0e10cSrcweir 483*cdf0e10cSrcweir // Proportionale-Groesse: 484*cdf0e10cSrcweir // D.H. das Verhaeltnis ergibt sich aus ( n / 240 ) Twips 485*cdf0e10cSrcweir 486*cdf0e10cSrcweir nTokenValue = 240; 487*cdf0e10cSrcweir if( IsCalcValue() ) 488*cdf0e10cSrcweir CalcValue(); 489*cdf0e10cSrcweir 490*cdf0e10cSrcweir nTokenValue = short( 100L * aLSpace.GetLineHeight() 491*cdf0e10cSrcweir / long( nTokenValue ) ); 492*cdf0e10cSrcweir 493*cdf0e10cSrcweir if( nTokenValue > 200 ) // Datenwert fuer PropLnSp 494*cdf0e10cSrcweir nTokenValue = 200; // ist ein sal_uInt8 !!! 495*cdf0e10cSrcweir 496*cdf0e10cSrcweir aLSpace.SetPropLineSpace( (const sal_uInt8)nTokenValue ); 497*cdf0e10cSrcweir aLSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO; 498*cdf0e10cSrcweir 499*cdf0e10cSrcweir pSet->Put( aLSpace ); 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir break; 502*cdf0e10cSrcweir 503*cdf0e10cSrcweir case RTF_SL: 504*cdf0e10cSrcweir if( PARDID->nLinespacing ) 505*cdf0e10cSrcweir { 506*cdf0e10cSrcweir // errechne das Verhaeltnis aus dem default Font zu der 507*cdf0e10cSrcweir // Size Angabe. Der Abstand besteht aus der Zeilenhoehe 508*cdf0e10cSrcweir // (100%) und dem Leerraum ueber der Zeile (20%). 509*cdf0e10cSrcweir SvxLineSpacingItem aLSpace(0, PARDID->nLinespacing); 510*cdf0e10cSrcweir 511*cdf0e10cSrcweir nTokenValue = !bTokenHasValue ? 0 : nTokenValue; 512*cdf0e10cSrcweir if (1000 == nTokenValue ) 513*cdf0e10cSrcweir nTokenValue = 240; 514*cdf0e10cSrcweir 515*cdf0e10cSrcweir SvxLineSpace eLnSpc; 516*cdf0e10cSrcweir if (nTokenValue < 0) 517*cdf0e10cSrcweir { 518*cdf0e10cSrcweir eLnSpc = SVX_LINE_SPACE_FIX; 519*cdf0e10cSrcweir nTokenValue = -nTokenValue; 520*cdf0e10cSrcweir } 521*cdf0e10cSrcweir else if (nTokenValue == 0) 522*cdf0e10cSrcweir { 523*cdf0e10cSrcweir //if \sl0 is used, the line spacing is automatically 524*cdf0e10cSrcweir //determined 525*cdf0e10cSrcweir eLnSpc = SVX_LINE_SPACE_AUTO; 526*cdf0e10cSrcweir } 527*cdf0e10cSrcweir else 528*cdf0e10cSrcweir eLnSpc = SVX_LINE_SPACE_MIN; 529*cdf0e10cSrcweir 530*cdf0e10cSrcweir if (IsCalcValue()) 531*cdf0e10cSrcweir CalcValue(); 532*cdf0e10cSrcweir 533*cdf0e10cSrcweir if (eLnSpc != SVX_LINE_SPACE_AUTO) 534*cdf0e10cSrcweir aLSpace.SetLineHeight( (const sal_uInt16)nTokenValue ); 535*cdf0e10cSrcweir 536*cdf0e10cSrcweir aLSpace.GetLineSpaceRule() = eLnSpc; 537*cdf0e10cSrcweir pSet->Put(aLSpace); 538*cdf0e10cSrcweir } 539*cdf0e10cSrcweir break; 540*cdf0e10cSrcweir 541*cdf0e10cSrcweir case RTF_NOCWRAP: 542*cdf0e10cSrcweir if( PARDID->nForbRule ) 543*cdf0e10cSrcweir { 544*cdf0e10cSrcweir pSet->Put( SvxForbiddenRuleItem( sal_False, 545*cdf0e10cSrcweir PARDID->nForbRule )); 546*cdf0e10cSrcweir } 547*cdf0e10cSrcweir break; 548*cdf0e10cSrcweir case RTF_NOOVERFLOW: 549*cdf0e10cSrcweir if( PARDID->nHangPunct ) 550*cdf0e10cSrcweir { 551*cdf0e10cSrcweir pSet->Put( SvxHangingPunctuationItem( sal_False, 552*cdf0e10cSrcweir PARDID->nHangPunct )); 553*cdf0e10cSrcweir } 554*cdf0e10cSrcweir break; 555*cdf0e10cSrcweir 556*cdf0e10cSrcweir case RTF_ASPALPHA: 557*cdf0e10cSrcweir if( PARDID->nScriptSpace ) 558*cdf0e10cSrcweir { 559*cdf0e10cSrcweir pSet->Put( SvxScriptSpaceItem( sal_True, 560*cdf0e10cSrcweir PARDID->nScriptSpace )); 561*cdf0e10cSrcweir } 562*cdf0e10cSrcweir break; 563*cdf0e10cSrcweir 564*cdf0e10cSrcweir case RTF_FAFIXED: 565*cdf0e10cSrcweir case RTF_FAAUTO: nFontAlign = SvxParaVertAlignItem::AUTOMATIC; 566*cdf0e10cSrcweir goto SET_FONTALIGNMENT; 567*cdf0e10cSrcweir case RTF_FAHANG: nFontAlign = SvxParaVertAlignItem::TOP; 568*cdf0e10cSrcweir goto SET_FONTALIGNMENT; 569*cdf0e10cSrcweir case RTF_FAVAR: nFontAlign = SvxParaVertAlignItem::BOTTOM; 570*cdf0e10cSrcweir goto SET_FONTALIGNMENT; 571*cdf0e10cSrcweir case RTF_FACENTER: nFontAlign = SvxParaVertAlignItem::CENTER; 572*cdf0e10cSrcweir goto SET_FONTALIGNMENT; 573*cdf0e10cSrcweir case RTF_FAROMAN: nFontAlign = SvxParaVertAlignItem::BASELINE; 574*cdf0e10cSrcweir goto SET_FONTALIGNMENT; 575*cdf0e10cSrcweir SET_FONTALIGNMENT: 576*cdf0e10cSrcweir if( PARDID->nFontAlign ) 577*cdf0e10cSrcweir { 578*cdf0e10cSrcweir pSet->Put( SvxParaVertAlignItem( nFontAlign, 579*cdf0e10cSrcweir PARDID->nFontAlign )); 580*cdf0e10cSrcweir } 581*cdf0e10cSrcweir break; 582*cdf0e10cSrcweir 583*cdf0e10cSrcweir /* */ 584*cdf0e10cSrcweir case RTF_B: 585*cdf0e10cSrcweir case RTF_AB: 586*cdf0e10cSrcweir if( IsAttrSttPos() ) // nicht im Textfluss ? 587*cdf0e10cSrcweir { 588*cdf0e10cSrcweir 589*cdf0e10cSrcweir SvxWeightItem aTmpItem( 590*cdf0e10cSrcweir nTokenValue ? WEIGHT_BOLD : WEIGHT_NORMAL, 591*cdf0e10cSrcweir SID_ATTR_CHAR_WEIGHT ); 592*cdf0e10cSrcweir SetScriptAttr( eCharType, *pSet, aTmpItem); 593*cdf0e10cSrcweir } 594*cdf0e10cSrcweir break; 595*cdf0e10cSrcweir 596*cdf0e10cSrcweir case RTF_CAPS: 597*cdf0e10cSrcweir case RTF_SCAPS: 598*cdf0e10cSrcweir if( PLAINID->nCaseMap && 599*cdf0e10cSrcweir IsAttrSttPos() ) // nicht im Textfluss ? 600*cdf0e10cSrcweir { 601*cdf0e10cSrcweir SvxCaseMap eCaseMap; 602*cdf0e10cSrcweir if( !nTokenValue ) 603*cdf0e10cSrcweir eCaseMap = SVX_CASEMAP_NOT_MAPPED; 604*cdf0e10cSrcweir else if( RTF_CAPS == nToken ) 605*cdf0e10cSrcweir eCaseMap = SVX_CASEMAP_VERSALIEN; 606*cdf0e10cSrcweir else 607*cdf0e10cSrcweir eCaseMap = SVX_CASEMAP_KAPITAELCHEN; 608*cdf0e10cSrcweir 609*cdf0e10cSrcweir pSet->Put( SvxCaseMapItem( eCaseMap, PLAINID->nCaseMap )); 610*cdf0e10cSrcweir } 611*cdf0e10cSrcweir break; 612*cdf0e10cSrcweir 613*cdf0e10cSrcweir case RTF_DN: 614*cdf0e10cSrcweir case RTF_SUB: 615*cdf0e10cSrcweir if( PLAINID->nEscapement ) 616*cdf0e10cSrcweir { 617*cdf0e10cSrcweir const sal_uInt16 nEsc = PLAINID->nEscapement; 618*cdf0e10cSrcweir if( -1 == nTokenValue || RTF_SUB == nToken ) 619*cdf0e10cSrcweir nTokenValue = 6; 620*cdf0e10cSrcweir if( IsCalcValue() ) 621*cdf0e10cSrcweir CalcValue(); 622*cdf0e10cSrcweir const SvxEscapementItem& rOld = GetEscapement( *pSet, nEsc, sal_False ); 623*cdf0e10cSrcweir short nEs; 624*cdf0e10cSrcweir sal_uInt8 nProp; 625*cdf0e10cSrcweir if( DFLT_ESC_AUTO_SUPER == rOld.GetEsc() ) 626*cdf0e10cSrcweir { 627*cdf0e10cSrcweir nEs = DFLT_ESC_AUTO_SUB; 628*cdf0e10cSrcweir nProp = rOld.GetProp(); 629*cdf0e10cSrcweir } 630*cdf0e10cSrcweir else 631*cdf0e10cSrcweir { 632*cdf0e10cSrcweir nEs = (short)-nTokenValue; 633*cdf0e10cSrcweir nProp = (nToken == RTF_SUB) ? DFLT_ESC_PROP : 100; 634*cdf0e10cSrcweir } 635*cdf0e10cSrcweir pSet->Put( SvxEscapementItem( nEs, nProp, nEsc )); 636*cdf0e10cSrcweir } 637*cdf0e10cSrcweir break; 638*cdf0e10cSrcweir 639*cdf0e10cSrcweir case RTF_NOSUPERSUB: 640*cdf0e10cSrcweir if( PLAINID->nEscapement ) 641*cdf0e10cSrcweir { 642*cdf0e10cSrcweir const sal_uInt16 nEsc = PLAINID->nEscapement; 643*cdf0e10cSrcweir pSet->Put( SvxEscapementItem( nEsc )); 644*cdf0e10cSrcweir } 645*cdf0e10cSrcweir break; 646*cdf0e10cSrcweir 647*cdf0e10cSrcweir case RTF_EXPND: 648*cdf0e10cSrcweir if( PLAINID->nKering ) 649*cdf0e10cSrcweir { 650*cdf0e10cSrcweir if( -1 == nTokenValue ) 651*cdf0e10cSrcweir nTokenValue = 0; 652*cdf0e10cSrcweir else 653*cdf0e10cSrcweir nTokenValue *= 5; 654*cdf0e10cSrcweir if( IsCalcValue() ) 655*cdf0e10cSrcweir CalcValue(); 656*cdf0e10cSrcweir pSet->Put( SvxKerningItem( (short)nTokenValue, PLAINID->nKering )); 657*cdf0e10cSrcweir } 658*cdf0e10cSrcweir break; 659*cdf0e10cSrcweir 660*cdf0e10cSrcweir case RTF_KERNING: 661*cdf0e10cSrcweir if( PLAINID->nAutoKerning ) 662*cdf0e10cSrcweir { 663*cdf0e10cSrcweir if( -1 == nTokenValue ) 664*cdf0e10cSrcweir nTokenValue = 0; 665*cdf0e10cSrcweir else 666*cdf0e10cSrcweir nTokenValue *= 10; 667*cdf0e10cSrcweir if( IsCalcValue() ) 668*cdf0e10cSrcweir CalcValue(); 669*cdf0e10cSrcweir pSet->Put( SvxAutoKernItem( 0 != nTokenValue, 670*cdf0e10cSrcweir PLAINID->nAutoKerning )); 671*cdf0e10cSrcweir } 672*cdf0e10cSrcweir break; 673*cdf0e10cSrcweir 674*cdf0e10cSrcweir case RTF_EXPNDTW: 675*cdf0e10cSrcweir if( PLAINID->nKering ) 676*cdf0e10cSrcweir { 677*cdf0e10cSrcweir if( -1 == nTokenValue ) 678*cdf0e10cSrcweir nTokenValue = 0; 679*cdf0e10cSrcweir if( IsCalcValue() ) 680*cdf0e10cSrcweir CalcValue(); 681*cdf0e10cSrcweir pSet->Put( SvxKerningItem( (short)nTokenValue, PLAINID->nKering )); 682*cdf0e10cSrcweir } 683*cdf0e10cSrcweir break; 684*cdf0e10cSrcweir 685*cdf0e10cSrcweir case RTF_F: 686*cdf0e10cSrcweir case RTF_AF: 687*cdf0e10cSrcweir { 688*cdf0e10cSrcweir const Font& rSVFont = GetFont( sal_uInt16(nTokenValue) ); 689*cdf0e10cSrcweir SvxFontItem aTmpItem( rSVFont.GetFamily(), 690*cdf0e10cSrcweir rSVFont.GetName(), rSVFont.GetStyleName(), 691*cdf0e10cSrcweir rSVFont.GetPitch(), rSVFont.GetCharSet(), 692*cdf0e10cSrcweir SID_ATTR_CHAR_FONT ); 693*cdf0e10cSrcweir SetScriptAttr( eCharType, *pSet, aTmpItem ); 694*cdf0e10cSrcweir if( RTF_F == nToken ) 695*cdf0e10cSrcweir { 696*cdf0e10cSrcweir SetEncoding( rSVFont.GetCharSet() ); 697*cdf0e10cSrcweir RereadLookahead(); 698*cdf0e10cSrcweir } 699*cdf0e10cSrcweir } 700*cdf0e10cSrcweir break; 701*cdf0e10cSrcweir 702*cdf0e10cSrcweir case RTF_FS: 703*cdf0e10cSrcweir case RTF_AFS: 704*cdf0e10cSrcweir { 705*cdf0e10cSrcweir if( -1 == nTokenValue ) 706*cdf0e10cSrcweir nTokenValue = 240; 707*cdf0e10cSrcweir else 708*cdf0e10cSrcweir nTokenValue *= 10; 709*cdf0e10cSrcweir // #i66167# 710*cdf0e10cSrcweir // for the SwRTFParser 'IsCalcValue' will be false and for the EditRTFParser 711*cdf0e10cSrcweir // the converiosn takes now place in EditRTFParser since for other reasons 712*cdf0e10cSrcweir // the wrong MapUnit might still be use there 713*cdf0e10cSrcweir // if( IsCalcValue() ) 714*cdf0e10cSrcweir // CalcValue(); 715*cdf0e10cSrcweir SvxFontHeightItem aTmpItem( 716*cdf0e10cSrcweir (const sal_uInt16)nTokenValue, 100, 717*cdf0e10cSrcweir SID_ATTR_CHAR_FONTHEIGHT ); 718*cdf0e10cSrcweir SetScriptAttr( eCharType, *pSet, aTmpItem ); 719*cdf0e10cSrcweir } 720*cdf0e10cSrcweir break; 721*cdf0e10cSrcweir 722*cdf0e10cSrcweir case RTF_I: 723*cdf0e10cSrcweir case RTF_AI: 724*cdf0e10cSrcweir if( IsAttrSttPos() ) // nicht im Textfluss ? 725*cdf0e10cSrcweir { 726*cdf0e10cSrcweir SvxPostureItem aTmpItem( 727*cdf0e10cSrcweir nTokenValue ? ITALIC_NORMAL : ITALIC_NONE, 728*cdf0e10cSrcweir SID_ATTR_CHAR_POSTURE ); 729*cdf0e10cSrcweir SetScriptAttr( eCharType, *pSet, aTmpItem ); 730*cdf0e10cSrcweir } 731*cdf0e10cSrcweir break; 732*cdf0e10cSrcweir 733*cdf0e10cSrcweir case RTF_OUTL: 734*cdf0e10cSrcweir if( PLAINID->nContour && 735*cdf0e10cSrcweir IsAttrSttPos() ) // nicht im Textfluss ? 736*cdf0e10cSrcweir { 737*cdf0e10cSrcweir pSet->Put( SvxContourItem( nTokenValue ? sal_True : sal_False, 738*cdf0e10cSrcweir PLAINID->nContour )); 739*cdf0e10cSrcweir } 740*cdf0e10cSrcweir break; 741*cdf0e10cSrcweir 742*cdf0e10cSrcweir case RTF_SHAD: 743*cdf0e10cSrcweir if( PLAINID->nShadowed && 744*cdf0e10cSrcweir IsAttrSttPos() ) // nicht im Textfluss ? 745*cdf0e10cSrcweir { 746*cdf0e10cSrcweir pSet->Put( SvxShadowedItem( nTokenValue ? sal_True : sal_False, 747*cdf0e10cSrcweir PLAINID->nShadowed )); 748*cdf0e10cSrcweir } 749*cdf0e10cSrcweir break; 750*cdf0e10cSrcweir 751*cdf0e10cSrcweir case RTF_STRIKE: 752*cdf0e10cSrcweir if( PLAINID->nCrossedOut && 753*cdf0e10cSrcweir IsAttrSttPos() ) // nicht im Textfluss ? 754*cdf0e10cSrcweir { 755*cdf0e10cSrcweir pSet->Put( SvxCrossedOutItem( 756*cdf0e10cSrcweir nTokenValue ? STRIKEOUT_SINGLE : STRIKEOUT_NONE, 757*cdf0e10cSrcweir PLAINID->nCrossedOut )); 758*cdf0e10cSrcweir } 759*cdf0e10cSrcweir break; 760*cdf0e10cSrcweir 761*cdf0e10cSrcweir case RTF_STRIKED: 762*cdf0e10cSrcweir if( PLAINID->nCrossedOut ) // nicht im Textfluss ? 763*cdf0e10cSrcweir { 764*cdf0e10cSrcweir pSet->Put( SvxCrossedOutItem( 765*cdf0e10cSrcweir nTokenValue ? STRIKEOUT_DOUBLE : STRIKEOUT_NONE, 766*cdf0e10cSrcweir PLAINID->nCrossedOut )); 767*cdf0e10cSrcweir } 768*cdf0e10cSrcweir break; 769*cdf0e10cSrcweir 770*cdf0e10cSrcweir case RTF_UL: 771*cdf0e10cSrcweir if( !IsAttrSttPos() ) 772*cdf0e10cSrcweir break; 773*cdf0e10cSrcweir eUnderline = nTokenValue ? UNDERLINE_SINGLE : UNDERLINE_NONE; 774*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 775*cdf0e10cSrcweir 776*cdf0e10cSrcweir case RTF_ULD: 777*cdf0e10cSrcweir eUnderline = UNDERLINE_DOTTED; 778*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 779*cdf0e10cSrcweir case RTF_ULDASH: 780*cdf0e10cSrcweir eUnderline = UNDERLINE_DASH; 781*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 782*cdf0e10cSrcweir case RTF_ULDASHD: 783*cdf0e10cSrcweir eUnderline = UNDERLINE_DASHDOT; 784*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 785*cdf0e10cSrcweir case RTF_ULDASHDD: 786*cdf0e10cSrcweir eUnderline = UNDERLINE_DASHDOTDOT; 787*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 788*cdf0e10cSrcweir case RTF_ULDB: 789*cdf0e10cSrcweir eUnderline = UNDERLINE_DOUBLE; 790*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 791*cdf0e10cSrcweir case RTF_ULNONE: 792*cdf0e10cSrcweir eUnderline = UNDERLINE_NONE; 793*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 794*cdf0e10cSrcweir case RTF_ULTH: 795*cdf0e10cSrcweir eUnderline = UNDERLINE_BOLD; 796*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 797*cdf0e10cSrcweir case RTF_ULWAVE: 798*cdf0e10cSrcweir eUnderline = UNDERLINE_WAVE; 799*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 800*cdf0e10cSrcweir case RTF_ULTHD: 801*cdf0e10cSrcweir eUnderline = UNDERLINE_BOLDDOTTED; 802*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 803*cdf0e10cSrcweir case RTF_ULTHDASH: 804*cdf0e10cSrcweir eUnderline = UNDERLINE_BOLDDASH; 805*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 806*cdf0e10cSrcweir case RTF_ULLDASH: 807*cdf0e10cSrcweir eUnderline = UNDERLINE_LONGDASH; 808*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 809*cdf0e10cSrcweir case RTF_ULTHLDASH: 810*cdf0e10cSrcweir eUnderline = UNDERLINE_BOLDLONGDASH; 811*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 812*cdf0e10cSrcweir case RTF_ULTHDASHD: 813*cdf0e10cSrcweir eUnderline = UNDERLINE_BOLDDASHDOT; 814*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 815*cdf0e10cSrcweir case RTF_ULTHDASHDD: 816*cdf0e10cSrcweir eUnderline = UNDERLINE_BOLDDASHDOTDOT; 817*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 818*cdf0e10cSrcweir case RTF_ULHWAVE: 819*cdf0e10cSrcweir eUnderline = UNDERLINE_BOLDWAVE; 820*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 821*cdf0e10cSrcweir case RTF_ULULDBWAVE: 822*cdf0e10cSrcweir eUnderline = UNDERLINE_DOUBLEWAVE; 823*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 824*cdf0e10cSrcweir 825*cdf0e10cSrcweir case RTF_ULW: 826*cdf0e10cSrcweir eUnderline = UNDERLINE_SINGLE; 827*cdf0e10cSrcweir 828*cdf0e10cSrcweir if( PLAINID->nWordlineMode ) 829*cdf0e10cSrcweir { 830*cdf0e10cSrcweir pSet->Put( SvxWordLineModeItem( sal_True, PLAINID->nWordlineMode )); 831*cdf0e10cSrcweir } 832*cdf0e10cSrcweir goto ATTR_SETUNDERLINE; 833*cdf0e10cSrcweir 834*cdf0e10cSrcweir ATTR_SETUNDERLINE: 835*cdf0e10cSrcweir if( PLAINID->nUnderline ) 836*cdf0e10cSrcweir { 837*cdf0e10cSrcweir pSet->Put( SvxUnderlineItem( eUnderline, PLAINID->nUnderline )); 838*cdf0e10cSrcweir } 839*cdf0e10cSrcweir break; 840*cdf0e10cSrcweir 841*cdf0e10cSrcweir case RTF_ULC: 842*cdf0e10cSrcweir if( PLAINID->nUnderline ) 843*cdf0e10cSrcweir { 844*cdf0e10cSrcweir SvxUnderlineItem aUL( UNDERLINE_SINGLE, PLAINID->nUnderline ); 845*cdf0e10cSrcweir const SfxPoolItem* pItem; 846*cdf0e10cSrcweir if( SFX_ITEM_SET == pSet->GetItemState( 847*cdf0e10cSrcweir PLAINID->nUnderline, sal_False, &pItem ) ) 848*cdf0e10cSrcweir { 849*cdf0e10cSrcweir // is switched off ? 850*cdf0e10cSrcweir if( UNDERLINE_NONE == 851*cdf0e10cSrcweir ((SvxUnderlineItem*)pItem)->GetLineStyle() ) 852*cdf0e10cSrcweir break; 853*cdf0e10cSrcweir aUL = *(SvxUnderlineItem*)pItem; 854*cdf0e10cSrcweir } 855*cdf0e10cSrcweir else 856*cdf0e10cSrcweir aUL = (const SvxUnderlineItem&)pSet->Get( PLAINID->nUnderline, sal_False ); 857*cdf0e10cSrcweir 858*cdf0e10cSrcweir if( UNDERLINE_NONE == aUL.GetLineStyle() ) 859*cdf0e10cSrcweir aUL.SetLineStyle( UNDERLINE_SINGLE ); 860*cdf0e10cSrcweir aUL.SetColor( GetColor( sal_uInt16(nTokenValue) )); 861*cdf0e10cSrcweir pSet->Put( aUL ); 862*cdf0e10cSrcweir } 863*cdf0e10cSrcweir break; 864*cdf0e10cSrcweir 865*cdf0e10cSrcweir case RTF_OL: 866*cdf0e10cSrcweir if( !IsAttrSttPos() ) 867*cdf0e10cSrcweir break; 868*cdf0e10cSrcweir eOverline = nTokenValue ? UNDERLINE_SINGLE : UNDERLINE_NONE; 869*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 870*cdf0e10cSrcweir 871*cdf0e10cSrcweir case RTF_OLD: 872*cdf0e10cSrcweir eOverline = UNDERLINE_DOTTED; 873*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 874*cdf0e10cSrcweir case RTF_OLDASH: 875*cdf0e10cSrcweir eOverline = UNDERLINE_DASH; 876*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 877*cdf0e10cSrcweir case RTF_OLDASHD: 878*cdf0e10cSrcweir eOverline = UNDERLINE_DASHDOT; 879*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 880*cdf0e10cSrcweir case RTF_OLDASHDD: 881*cdf0e10cSrcweir eOverline = UNDERLINE_DASHDOTDOT; 882*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 883*cdf0e10cSrcweir case RTF_OLDB: 884*cdf0e10cSrcweir eOverline = UNDERLINE_DOUBLE; 885*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 886*cdf0e10cSrcweir case RTF_OLNONE: 887*cdf0e10cSrcweir eOverline = UNDERLINE_NONE; 888*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 889*cdf0e10cSrcweir case RTF_OLTH: 890*cdf0e10cSrcweir eOverline = UNDERLINE_BOLD; 891*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 892*cdf0e10cSrcweir case RTF_OLWAVE: 893*cdf0e10cSrcweir eOverline = UNDERLINE_WAVE; 894*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 895*cdf0e10cSrcweir case RTF_OLTHD: 896*cdf0e10cSrcweir eOverline = UNDERLINE_BOLDDOTTED; 897*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 898*cdf0e10cSrcweir case RTF_OLTHDASH: 899*cdf0e10cSrcweir eOverline = UNDERLINE_BOLDDASH; 900*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 901*cdf0e10cSrcweir case RTF_OLLDASH: 902*cdf0e10cSrcweir eOverline = UNDERLINE_LONGDASH; 903*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 904*cdf0e10cSrcweir case RTF_OLTHLDASH: 905*cdf0e10cSrcweir eOverline = UNDERLINE_BOLDLONGDASH; 906*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 907*cdf0e10cSrcweir case RTF_OLTHDASHD: 908*cdf0e10cSrcweir eOverline = UNDERLINE_BOLDDASHDOT; 909*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 910*cdf0e10cSrcweir case RTF_OLTHDASHDD: 911*cdf0e10cSrcweir eOverline = UNDERLINE_BOLDDASHDOTDOT; 912*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 913*cdf0e10cSrcweir case RTF_OLHWAVE: 914*cdf0e10cSrcweir eOverline = UNDERLINE_BOLDWAVE; 915*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 916*cdf0e10cSrcweir case RTF_OLOLDBWAVE: 917*cdf0e10cSrcweir eOverline = UNDERLINE_DOUBLEWAVE; 918*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 919*cdf0e10cSrcweir 920*cdf0e10cSrcweir case RTF_OLW: 921*cdf0e10cSrcweir eOverline = UNDERLINE_SINGLE; 922*cdf0e10cSrcweir 923*cdf0e10cSrcweir if( PLAINID->nWordlineMode ) 924*cdf0e10cSrcweir { 925*cdf0e10cSrcweir pSet->Put( SvxWordLineModeItem( sal_True, PLAINID->nWordlineMode )); 926*cdf0e10cSrcweir } 927*cdf0e10cSrcweir goto ATTR_SETOVERLINE; 928*cdf0e10cSrcweir 929*cdf0e10cSrcweir ATTR_SETOVERLINE: 930*cdf0e10cSrcweir if( PLAINID->nUnderline ) 931*cdf0e10cSrcweir { 932*cdf0e10cSrcweir pSet->Put( SvxOverlineItem( eOverline, PLAINID->nOverline )); 933*cdf0e10cSrcweir } 934*cdf0e10cSrcweir break; 935*cdf0e10cSrcweir 936*cdf0e10cSrcweir case RTF_OLC: 937*cdf0e10cSrcweir if( PLAINID->nOverline ) 938*cdf0e10cSrcweir { 939*cdf0e10cSrcweir SvxOverlineItem aOL( UNDERLINE_SINGLE, PLAINID->nOverline ); 940*cdf0e10cSrcweir const SfxPoolItem* pItem; 941*cdf0e10cSrcweir if( SFX_ITEM_SET == pSet->GetItemState( 942*cdf0e10cSrcweir PLAINID->nOverline, sal_False, &pItem ) ) 943*cdf0e10cSrcweir { 944*cdf0e10cSrcweir // is switched off ? 945*cdf0e10cSrcweir if( UNDERLINE_NONE == 946*cdf0e10cSrcweir ((SvxOverlineItem*)pItem)->GetLineStyle() ) 947*cdf0e10cSrcweir break; 948*cdf0e10cSrcweir aOL = *(SvxOverlineItem*)pItem; 949*cdf0e10cSrcweir } 950*cdf0e10cSrcweir else 951*cdf0e10cSrcweir aOL = (const SvxOverlineItem&)pSet->Get( PLAINID->nUnderline, sal_False ); 952*cdf0e10cSrcweir 953*cdf0e10cSrcweir if( UNDERLINE_NONE == aOL.GetLineStyle() ) 954*cdf0e10cSrcweir aOL.SetLineStyle( UNDERLINE_SINGLE ); 955*cdf0e10cSrcweir aOL.SetColor( GetColor( sal_uInt16(nTokenValue) )); 956*cdf0e10cSrcweir pSet->Put( aOL ); 957*cdf0e10cSrcweir } 958*cdf0e10cSrcweir break; 959*cdf0e10cSrcweir 960*cdf0e10cSrcweir case RTF_UP: 961*cdf0e10cSrcweir case RTF_SUPER: 962*cdf0e10cSrcweir if( PLAINID->nEscapement ) 963*cdf0e10cSrcweir { 964*cdf0e10cSrcweir const sal_uInt16 nEsc = PLAINID->nEscapement; 965*cdf0e10cSrcweir if( -1 == nTokenValue || RTF_SUPER == nToken ) 966*cdf0e10cSrcweir nTokenValue = 6; 967*cdf0e10cSrcweir if( IsCalcValue() ) 968*cdf0e10cSrcweir CalcValue(); 969*cdf0e10cSrcweir const SvxEscapementItem& rOld = GetEscapement( *pSet, nEsc, sal_False ); 970*cdf0e10cSrcweir short nEs; 971*cdf0e10cSrcweir sal_uInt8 nProp; 972*cdf0e10cSrcweir if( DFLT_ESC_AUTO_SUB == rOld.GetEsc() ) 973*cdf0e10cSrcweir { 974*cdf0e10cSrcweir nEs = DFLT_ESC_AUTO_SUPER; 975*cdf0e10cSrcweir nProp = rOld.GetProp(); 976*cdf0e10cSrcweir } 977*cdf0e10cSrcweir else 978*cdf0e10cSrcweir { 979*cdf0e10cSrcweir nEs = (short)nTokenValue; 980*cdf0e10cSrcweir nProp = (nToken == RTF_SUPER) ? DFLT_ESC_PROP : 100; 981*cdf0e10cSrcweir } 982*cdf0e10cSrcweir pSet->Put( SvxEscapementItem( nEs, nProp, nEsc )); 983*cdf0e10cSrcweir } 984*cdf0e10cSrcweir break; 985*cdf0e10cSrcweir 986*cdf0e10cSrcweir case RTF_CF: 987*cdf0e10cSrcweir if( PLAINID->nColor ) 988*cdf0e10cSrcweir { 989*cdf0e10cSrcweir pSet->Put( SvxColorItem( GetColor( sal_uInt16(nTokenValue) ), 990*cdf0e10cSrcweir PLAINID->nColor )); 991*cdf0e10cSrcweir } 992*cdf0e10cSrcweir break; 993*cdf0e10cSrcweir #if 0 994*cdf0e10cSrcweir //#i12501# While cb is clearly documented in the rtf spec, word 995*cdf0e10cSrcweir //doesn't accept it at all 996*cdf0e10cSrcweir case RTF_CB: 997*cdf0e10cSrcweir if( PLAINID->nBgColor ) 998*cdf0e10cSrcweir { 999*cdf0e10cSrcweir pSet->Put( SvxBrushItem( GetColor( sal_uInt16(nTokenValue) ), 1000*cdf0e10cSrcweir PLAINID->nBgColor )); 1001*cdf0e10cSrcweir } 1002*cdf0e10cSrcweir break; 1003*cdf0e10cSrcweir #endif 1004*cdf0e10cSrcweir case RTF_LANG: 1005*cdf0e10cSrcweir if( PLAINID->nLanguage ) 1006*cdf0e10cSrcweir { 1007*cdf0e10cSrcweir pSet->Put( SvxLanguageItem( (LanguageType)nTokenValue, 1008*cdf0e10cSrcweir PLAINID->nLanguage )); 1009*cdf0e10cSrcweir } 1010*cdf0e10cSrcweir break; 1011*cdf0e10cSrcweir 1012*cdf0e10cSrcweir case RTF_LANGFE: 1013*cdf0e10cSrcweir if( PLAINID->nCJKLanguage ) 1014*cdf0e10cSrcweir { 1015*cdf0e10cSrcweir pSet->Put( SvxLanguageItem( (LanguageType)nTokenValue, 1016*cdf0e10cSrcweir PLAINID->nCJKLanguage )); 1017*cdf0e10cSrcweir } 1018*cdf0e10cSrcweir break; 1019*cdf0e10cSrcweir case RTF_ALANG: 1020*cdf0e10cSrcweir { 1021*cdf0e10cSrcweir SvxLanguageItem aTmpItem( (LanguageType)nTokenValue, 1022*cdf0e10cSrcweir SID_ATTR_CHAR_LANGUAGE ); 1023*cdf0e10cSrcweir SetScriptAttr( eCharType, *pSet, aTmpItem ); 1024*cdf0e10cSrcweir } 1025*cdf0e10cSrcweir break; 1026*cdf0e10cSrcweir 1027*cdf0e10cSrcweir case RTF_RTLCH: 1028*cdf0e10cSrcweir bIsLeftToRightDef = sal_False; 1029*cdf0e10cSrcweir break; 1030*cdf0e10cSrcweir case RTF_LTRCH: 1031*cdf0e10cSrcweir bIsLeftToRightDef = sal_True; 1032*cdf0e10cSrcweir break; 1033*cdf0e10cSrcweir case RTF_RTLPAR: 1034*cdf0e10cSrcweir if (PARDID->nDirection) 1035*cdf0e10cSrcweir { 1036*cdf0e10cSrcweir pSet->Put(SvxFrameDirectionItem(FRMDIR_HORI_RIGHT_TOP, 1037*cdf0e10cSrcweir PARDID->nDirection)); 1038*cdf0e10cSrcweir } 1039*cdf0e10cSrcweir break; 1040*cdf0e10cSrcweir case RTF_LTRPAR: 1041*cdf0e10cSrcweir if (PARDID->nDirection) 1042*cdf0e10cSrcweir { 1043*cdf0e10cSrcweir pSet->Put(SvxFrameDirectionItem(FRMDIR_HORI_LEFT_TOP, 1044*cdf0e10cSrcweir PARDID->nDirection)); 1045*cdf0e10cSrcweir } 1046*cdf0e10cSrcweir break; 1047*cdf0e10cSrcweir case RTF_LOCH: eCharType = LOW_CHARTYPE; break; 1048*cdf0e10cSrcweir case RTF_HICH: eCharType = HIGH_CHARTYPE; break; 1049*cdf0e10cSrcweir case RTF_DBCH: eCharType = DOUBLEBYTE_CHARTYPE; break; 1050*cdf0e10cSrcweir 1051*cdf0e10cSrcweir 1052*cdf0e10cSrcweir case RTF_ACCNONE: 1053*cdf0e10cSrcweir eEmphasis = EMPHASISMARK_NONE; 1054*cdf0e10cSrcweir goto ATTR_SETEMPHASIS; 1055*cdf0e10cSrcweir case RTF_ACCDOT: 1056*cdf0e10cSrcweir eEmphasis = EMPHASISMARK_DOTS_ABOVE; 1057*cdf0e10cSrcweir goto ATTR_SETEMPHASIS; 1058*cdf0e10cSrcweir 1059*cdf0e10cSrcweir case RTF_ACCCOMMA: 1060*cdf0e10cSrcweir eEmphasis = EMPHASISMARK_SIDE_DOTS; 1061*cdf0e10cSrcweir ATTR_SETEMPHASIS: 1062*cdf0e10cSrcweir if( PLAINID->nEmphasis ) 1063*cdf0e10cSrcweir { 1064*cdf0e10cSrcweir pSet->Put( SvxEmphasisMarkItem( eEmphasis, 1065*cdf0e10cSrcweir PLAINID->nEmphasis )); 1066*cdf0e10cSrcweir } 1067*cdf0e10cSrcweir break; 1068*cdf0e10cSrcweir 1069*cdf0e10cSrcweir case RTF_TWOINONE: 1070*cdf0e10cSrcweir if( PLAINID->nTwoLines ) 1071*cdf0e10cSrcweir { 1072*cdf0e10cSrcweir sal_Unicode cStt, cEnd; 1073*cdf0e10cSrcweir switch ( nTokenValue ) 1074*cdf0e10cSrcweir { 1075*cdf0e10cSrcweir case 1: cStt = '(', cEnd = ')'; break; 1076*cdf0e10cSrcweir case 2: cStt = '[', cEnd = ']'; break; 1077*cdf0e10cSrcweir case 3: cStt = '<', cEnd = '>'; break; 1078*cdf0e10cSrcweir case 4: cStt = '{', cEnd = '}'; break; 1079*cdf0e10cSrcweir default: cStt = 0, cEnd = 0; break; 1080*cdf0e10cSrcweir } 1081*cdf0e10cSrcweir 1082*cdf0e10cSrcweir pSet->Put( SvxTwoLinesItem( sal_True, cStt, cEnd, 1083*cdf0e10cSrcweir PLAINID->nTwoLines )); 1084*cdf0e10cSrcweir } 1085*cdf0e10cSrcweir break; 1086*cdf0e10cSrcweir 1087*cdf0e10cSrcweir case RTF_CHARSCALEX : 1088*cdf0e10cSrcweir if (PLAINID->nCharScaleX) 1089*cdf0e10cSrcweir { 1090*cdf0e10cSrcweir //i21372 1091*cdf0e10cSrcweir if (nTokenValue < 1 || nTokenValue > 600) 1092*cdf0e10cSrcweir nTokenValue = 100; 1093*cdf0e10cSrcweir pSet->Put( SvxCharScaleWidthItem( sal_uInt16(nTokenValue), 1094*cdf0e10cSrcweir PLAINID->nCharScaleX )); 1095*cdf0e10cSrcweir } 1096*cdf0e10cSrcweir break; 1097*cdf0e10cSrcweir 1098*cdf0e10cSrcweir case RTF_HORZVERT: 1099*cdf0e10cSrcweir if( PLAINID->nHorzVert ) 1100*cdf0e10cSrcweir { 1101*cdf0e10cSrcweir // RTF knows only 90deg 1102*cdf0e10cSrcweir pSet->Put( SvxCharRotateItem( 900, 1 == nTokenValue, 1103*cdf0e10cSrcweir PLAINID->nHorzVert )); 1104*cdf0e10cSrcweir } 1105*cdf0e10cSrcweir break; 1106*cdf0e10cSrcweir 1107*cdf0e10cSrcweir case RTF_EMBO: 1108*cdf0e10cSrcweir if (PLAINID->nRelief) 1109*cdf0e10cSrcweir { 1110*cdf0e10cSrcweir pSet->Put(SvxCharReliefItem(RELIEF_EMBOSSED, 1111*cdf0e10cSrcweir PLAINID->nRelief)); 1112*cdf0e10cSrcweir } 1113*cdf0e10cSrcweir break; 1114*cdf0e10cSrcweir case RTF_IMPR: 1115*cdf0e10cSrcweir if (PLAINID->nRelief) 1116*cdf0e10cSrcweir { 1117*cdf0e10cSrcweir pSet->Put(SvxCharReliefItem(RELIEF_ENGRAVED, 1118*cdf0e10cSrcweir PLAINID->nRelief)); 1119*cdf0e10cSrcweir } 1120*cdf0e10cSrcweir break; 1121*cdf0e10cSrcweir case RTF_V: 1122*cdf0e10cSrcweir if (PLAINID->nHidden) 1123*cdf0e10cSrcweir { 1124*cdf0e10cSrcweir pSet->Put(SvxCharHiddenItem(nTokenValue != 0, 1125*cdf0e10cSrcweir PLAINID->nHidden)); 1126*cdf0e10cSrcweir } 1127*cdf0e10cSrcweir break; 1128*cdf0e10cSrcweir case RTF_CHBGFDIAG: 1129*cdf0e10cSrcweir case RTF_CHBGDKVERT: 1130*cdf0e10cSrcweir case RTF_CHBGDKHORIZ: 1131*cdf0e10cSrcweir case RTF_CHBGVERT: 1132*cdf0e10cSrcweir case RTF_CHBGHORIZ: 1133*cdf0e10cSrcweir case RTF_CHBGDKFDIAG: 1134*cdf0e10cSrcweir case RTF_CHBGDCROSS: 1135*cdf0e10cSrcweir case RTF_CHBGCROSS: 1136*cdf0e10cSrcweir case RTF_CHBGBDIAG: 1137*cdf0e10cSrcweir case RTF_CHBGDKDCROSS: 1138*cdf0e10cSrcweir case RTF_CHBGDKCROSS: 1139*cdf0e10cSrcweir case RTF_CHBGDKBDIAG: 1140*cdf0e10cSrcweir case RTF_CHCBPAT: 1141*cdf0e10cSrcweir case RTF_CHCFPAT: 1142*cdf0e10cSrcweir case RTF_CHSHDNG: 1143*cdf0e10cSrcweir if( PLAINID->nBgColor ) 1144*cdf0e10cSrcweir ReadBackgroundAttr( nToken, *pSet ); 1145*cdf0e10cSrcweir break; 1146*cdf0e10cSrcweir 1147*cdf0e10cSrcweir 1148*cdf0e10cSrcweir /* */ 1149*cdf0e10cSrcweir 1150*cdf0e10cSrcweir case BRACELEFT: 1151*cdf0e10cSrcweir { 1152*cdf0e10cSrcweir // teste auf Swg-Interne Tokens 1153*cdf0e10cSrcweir bool bHandled = false; 1154*cdf0e10cSrcweir short nSkip = 0; 1155*cdf0e10cSrcweir if( RTF_IGNOREFLAG != GetNextToken()) 1156*cdf0e10cSrcweir nSkip = -1; 1157*cdf0e10cSrcweir else if( (nToken = GetNextToken() ) & RTF_SWGDEFS ) 1158*cdf0e10cSrcweir { 1159*cdf0e10cSrcweir bHandled = true; 1160*cdf0e10cSrcweir switch( nToken ) 1161*cdf0e10cSrcweir { 1162*cdf0e10cSrcweir case RTF_PGDSCNO: 1163*cdf0e10cSrcweir case RTF_PGBRK: 1164*cdf0e10cSrcweir case RTF_SOUTLVL: 1165*cdf0e10cSrcweir UnknownAttrToken( nToken, pSet ); 1166*cdf0e10cSrcweir // ueberlese die schliessende Klammer 1167*cdf0e10cSrcweir break; 1168*cdf0e10cSrcweir 1169*cdf0e10cSrcweir case RTF_SWG_ESCPROP: 1170*cdf0e10cSrcweir { 1171*cdf0e10cSrcweir // prozentuale Veraenderung speichern ! 1172*cdf0e10cSrcweir sal_uInt8 nProp = sal_uInt8( nTokenValue / 100 ); 1173*cdf0e10cSrcweir short nEsc = 0; 1174*cdf0e10cSrcweir if( 1 == ( nTokenValue % 100 )) 1175*cdf0e10cSrcweir // Erkennung unseres AutoFlags! 1176*cdf0e10cSrcweir nEsc = DFLT_ESC_AUTO_SUPER; 1177*cdf0e10cSrcweir 1178*cdf0e10cSrcweir if( PLAINID->nEscapement ) 1179*cdf0e10cSrcweir pSet->Put( SvxEscapementItem( nEsc, nProp, 1180*cdf0e10cSrcweir PLAINID->nEscapement )); 1181*cdf0e10cSrcweir } 1182*cdf0e10cSrcweir break; 1183*cdf0e10cSrcweir 1184*cdf0e10cSrcweir case RTF_HYPHEN: 1185*cdf0e10cSrcweir { 1186*cdf0e10cSrcweir SvxHyphenZoneItem aHypenZone( 1187*cdf0e10cSrcweir (nTokenValue & 1) ? sal_True : sal_False, 1188*cdf0e10cSrcweir PARDID->nHyphenzone ); 1189*cdf0e10cSrcweir aHypenZone.SetPageEnd( 1190*cdf0e10cSrcweir (nTokenValue & 2) ? sal_True : sal_False ); 1191*cdf0e10cSrcweir 1192*cdf0e10cSrcweir if( PARDID->nHyphenzone && 1193*cdf0e10cSrcweir RTF_HYPHLEAD == GetNextToken() && 1194*cdf0e10cSrcweir RTF_HYPHTRAIL == GetNextToken() && 1195*cdf0e10cSrcweir RTF_HYPHMAX == GetNextToken() ) 1196*cdf0e10cSrcweir { 1197*cdf0e10cSrcweir aHypenZone.GetMinLead() = 1198*cdf0e10cSrcweir sal_uInt8(GetStackPtr( -2 )->nTokenValue); 1199*cdf0e10cSrcweir aHypenZone.GetMinTrail() = 1200*cdf0e10cSrcweir sal_uInt8(GetStackPtr( -1 )->nTokenValue); 1201*cdf0e10cSrcweir aHypenZone.GetMaxHyphens() = 1202*cdf0e10cSrcweir sal_uInt8(nTokenValue); 1203*cdf0e10cSrcweir 1204*cdf0e10cSrcweir pSet->Put( aHypenZone ); 1205*cdf0e10cSrcweir } 1206*cdf0e10cSrcweir else 1207*cdf0e10cSrcweir SkipGroup(); // ans Ende der Gruppe 1208*cdf0e10cSrcweir } 1209*cdf0e10cSrcweir break; 1210*cdf0e10cSrcweir 1211*cdf0e10cSrcweir case RTF_SHADOW: 1212*cdf0e10cSrcweir { 1213*cdf0e10cSrcweir int bSkip = sal_True; 1214*cdf0e10cSrcweir do { // middle check loop 1215*cdf0e10cSrcweir SvxShadowLocation eSL = SvxShadowLocation( nTokenValue ); 1216*cdf0e10cSrcweir if( RTF_SHDW_DIST != GetNextToken() ) 1217*cdf0e10cSrcweir break; 1218*cdf0e10cSrcweir sal_uInt16 nDist = sal_uInt16( nTokenValue ); 1219*cdf0e10cSrcweir 1220*cdf0e10cSrcweir if( RTF_SHDW_STYLE != GetNextToken() ) 1221*cdf0e10cSrcweir break; 1222*cdf0e10cSrcweir //! (pb) class Brush removed -> obsolete 1223*cdf0e10cSrcweir //! BrushStyle eStyle = BrushStyle( nTokenValue ); 1224*cdf0e10cSrcweir 1225*cdf0e10cSrcweir if( RTF_SHDW_COL != GetNextToken() ) 1226*cdf0e10cSrcweir break; 1227*cdf0e10cSrcweir sal_uInt16 nCol = sal_uInt16( nTokenValue ); 1228*cdf0e10cSrcweir 1229*cdf0e10cSrcweir if( RTF_SHDW_FCOL != GetNextToken() ) 1230*cdf0e10cSrcweir break; 1231*cdf0e10cSrcweir // sal_uInt16 nFillCol = sal_uInt16( nTokenValue ); 1232*cdf0e10cSrcweir 1233*cdf0e10cSrcweir Color aColor = GetColor( nCol ); 1234*cdf0e10cSrcweir 1235*cdf0e10cSrcweir if( PARDID->nShadow ) 1236*cdf0e10cSrcweir pSet->Put( SvxShadowItem( PARDID->nShadow, 1237*cdf0e10cSrcweir &aColor, nDist, eSL ) ); 1238*cdf0e10cSrcweir 1239*cdf0e10cSrcweir bSkip = sal_False; 1240*cdf0e10cSrcweir } while( sal_False ); 1241*cdf0e10cSrcweir 1242*cdf0e10cSrcweir if( bSkip ) 1243*cdf0e10cSrcweir SkipGroup(); // ans Ende der Gruppe 1244*cdf0e10cSrcweir } 1245*cdf0e10cSrcweir break; 1246*cdf0e10cSrcweir 1247*cdf0e10cSrcweir default: 1248*cdf0e10cSrcweir bHandled = false; 1249*cdf0e10cSrcweir if( (nToken & ~(0xff | RTF_SWGDEFS)) == RTF_TABSTOPDEF ) 1250*cdf0e10cSrcweir { 1251*cdf0e10cSrcweir nToken = SkipToken( -2 ); 1252*cdf0e10cSrcweir ReadTabAttr( nToken, *pSet ); 1253*cdf0e10cSrcweir 1254*cdf0e10cSrcweir /* 1255*cdf0e10cSrcweir cmc: #i76140, he who consumed the { must consume the } 1256*cdf0e10cSrcweir We rewound to a state of { being the current 1257*cdf0e10cSrcweir token so it is our responsibility to consume the } 1258*cdf0e10cSrcweir token if we consumed the {. We will not have consumed 1259*cdf0e10cSrcweir the { if it belonged to our caller, i.e. if the { we 1260*cdf0e10cSrcweir are handling is the "firsttoken" passed to us then 1261*cdf0e10cSrcweir the *caller* must consume it, not us. Otherwise *we* 1262*cdf0e10cSrcweir should consume it. 1263*cdf0e10cSrcweir */ 1264*cdf0e10cSrcweir if (nToken == BRACELEFT && !bFirstToken) 1265*cdf0e10cSrcweir { 1266*cdf0e10cSrcweir nToken = GetNextToken(); 1267*cdf0e10cSrcweir DBG_ASSERT( nToken == BRACERIGHT, 1268*cdf0e10cSrcweir "} did not follow { as expected\n"); 1269*cdf0e10cSrcweir } 1270*cdf0e10cSrcweir } 1271*cdf0e10cSrcweir else if( (nToken & ~(0xff| RTF_SWGDEFS)) == RTF_BRDRDEF) 1272*cdf0e10cSrcweir { 1273*cdf0e10cSrcweir nToken = SkipToken( -2 ); 1274*cdf0e10cSrcweir ReadBorderAttr( nToken, *pSet ); 1275*cdf0e10cSrcweir } 1276*cdf0e10cSrcweir else // also kein Attribut mehr 1277*cdf0e10cSrcweir nSkip = -2; 1278*cdf0e10cSrcweir break; 1279*cdf0e10cSrcweir } 1280*cdf0e10cSrcweir 1281*cdf0e10cSrcweir #if 1 1282*cdf0e10cSrcweir /* 1283*cdf0e10cSrcweir cmc: #i4727# / #i12713# Who owns this closing bracket? 1284*cdf0e10cSrcweir If we read the opening one, we must read this one, if 1285*cdf0e10cSrcweir other is counting the brackets so as to push/pop off 1286*cdf0e10cSrcweir the correct environment then we will have pushed a new 1287*cdf0e10cSrcweir environment for the start { of this, but will not see 1288*cdf0e10cSrcweir the } and so is out of sync for the rest of the 1289*cdf0e10cSrcweir document. 1290*cdf0e10cSrcweir */ 1291*cdf0e10cSrcweir if (bHandled && !bFirstToken) 1292*cdf0e10cSrcweir GetNextToken(); 1293*cdf0e10cSrcweir #endif 1294*cdf0e10cSrcweir } 1295*cdf0e10cSrcweir else 1296*cdf0e10cSrcweir nSkip = -2; 1297*cdf0e10cSrcweir 1298*cdf0e10cSrcweir if( nSkip ) // alles voellig unbekannt 1299*cdf0e10cSrcweir { 1300*cdf0e10cSrcweir if (!bFirstToken) 1301*cdf0e10cSrcweir --nSkip; // BRACELEFT: ist das naechste Token 1302*cdf0e10cSrcweir SkipToken( nSkip ); 1303*cdf0e10cSrcweir bWeiter = sal_False; 1304*cdf0e10cSrcweir } 1305*cdf0e10cSrcweir } 1306*cdf0e10cSrcweir break; 1307*cdf0e10cSrcweir default: 1308*cdf0e10cSrcweir if( (nToken & ~0xff ) == RTF_TABSTOPDEF ) 1309*cdf0e10cSrcweir ReadTabAttr( nToken, *pSet ); 1310*cdf0e10cSrcweir else if( (nToken & ~0xff ) == RTF_BRDRDEF ) 1311*cdf0e10cSrcweir ReadBorderAttr( nToken, *pSet ); 1312*cdf0e10cSrcweir else if( (nToken & ~0xff ) == RTF_SHADINGDEF ) 1313*cdf0e10cSrcweir ReadBackgroundAttr( nToken, *pSet ); 1314*cdf0e10cSrcweir else 1315*cdf0e10cSrcweir { 1316*cdf0e10cSrcweir // kenne das Token nicht also das Token "in den Parser zurueck" 1317*cdf0e10cSrcweir if( !bFirstToken ) 1318*cdf0e10cSrcweir SkipToken( -1 ); 1319*cdf0e10cSrcweir bWeiter = sal_False; 1320*cdf0e10cSrcweir } 1321*cdf0e10cSrcweir } 1322*cdf0e10cSrcweir } 1323*cdf0e10cSrcweir if( bWeiter ) 1324*cdf0e10cSrcweir { 1325*cdf0e10cSrcweir nToken = GetNextToken(); 1326*cdf0e10cSrcweir } 1327*cdf0e10cSrcweir bFirstToken = sal_False; 1328*cdf0e10cSrcweir } 1329*cdf0e10cSrcweir 1330*cdf0e10cSrcweir /* 1331*cdf0e10cSrcweir // teste Attribute gegen ihre Styles 1332*cdf0e10cSrcweir if( IsChkStyleAttr() && pSet->Count() && !pInsPos->GetCntIdx() ) 1333*cdf0e10cSrcweir { 1334*cdf0e10cSrcweir SvxRTFStyleType* pStyle = aStyleTbl.Get( nStyleNo ); 1335*cdf0e10cSrcweir if( pStyle && pStyle->aAttrSet.Count() ) 1336*cdf0e10cSrcweir { 1337*cdf0e10cSrcweir // alle Attribute, die schon vom Style definiert sind, aus dem 1338*cdf0e10cSrcweir // akt. Set entfernen 1339*cdf0e10cSrcweir const SfxPoolItem* pItem; 1340*cdf0e10cSrcweir SfxItemIter aIter( *pSet ); 1341*cdf0e10cSrcweir sal_uInt16 nWhich = aIter.GetCurItem()->Which(); 1342*cdf0e10cSrcweir while( sal_True ) 1343*cdf0e10cSrcweir { 1344*cdf0e10cSrcweir if( SFX_ITEM_SET == pStyle->aAttrSet.GetItemState( 1345*cdf0e10cSrcweir nWhich, sal_False, &pItem ) && *pItem == *aIter.GetCurItem()) 1346*cdf0e10cSrcweir pSet->ClearItem( nWhich ); // loeschen 1347*cdf0e10cSrcweir 1348*cdf0e10cSrcweir if( aIter.IsAtEnd() ) 1349*cdf0e10cSrcweir break; 1350*cdf0e10cSrcweir nWhich = aIter.NextItem()->Which(); 1351*cdf0e10cSrcweir } 1352*cdf0e10cSrcweir } 1353*cdf0e10cSrcweir } 1354*cdf0e10cSrcweir */ 1355*cdf0e10cSrcweir } 1356*cdf0e10cSrcweir 1357*cdf0e10cSrcweir void SvxRTFParser::ReadTabAttr( int nToken, SfxItemSet& rSet ) 1358*cdf0e10cSrcweir { 1359*cdf0e10cSrcweir bool bMethodOwnsToken = false; // #i52542# patch from cmc. 1360*cdf0e10cSrcweir // dann lese doch mal alle TabStops ein 1361*cdf0e10cSrcweir SvxTabStop aTabStop; 1362*cdf0e10cSrcweir SvxTabStopItem aAttr( 0, 0, SVX_TAB_ADJUST_DEFAULT, PARDID->nTabStop ); 1363*cdf0e10cSrcweir int bWeiter = sal_True; 1364*cdf0e10cSrcweir do { 1365*cdf0e10cSrcweir switch( nToken ) 1366*cdf0e10cSrcweir { 1367*cdf0e10cSrcweir case RTF_TB: // BarTab ??? 1368*cdf0e10cSrcweir case RTF_TX: 1369*cdf0e10cSrcweir { 1370*cdf0e10cSrcweir if( IsCalcValue() ) 1371*cdf0e10cSrcweir CalcValue(); 1372*cdf0e10cSrcweir aTabStop.GetTabPos() = nTokenValue; 1373*cdf0e10cSrcweir aAttr.Insert( aTabStop ); 1374*cdf0e10cSrcweir aTabStop = SvxTabStop(); // alle Werte default 1375*cdf0e10cSrcweir } 1376*cdf0e10cSrcweir break; 1377*cdf0e10cSrcweir 1378*cdf0e10cSrcweir case RTF_TQL: 1379*cdf0e10cSrcweir aTabStop.GetAdjustment() = SVX_TAB_ADJUST_LEFT; 1380*cdf0e10cSrcweir break; 1381*cdf0e10cSrcweir case RTF_TQR: 1382*cdf0e10cSrcweir aTabStop.GetAdjustment() = SVX_TAB_ADJUST_RIGHT; 1383*cdf0e10cSrcweir break; 1384*cdf0e10cSrcweir case RTF_TQC: 1385*cdf0e10cSrcweir aTabStop.GetAdjustment() = SVX_TAB_ADJUST_CENTER; 1386*cdf0e10cSrcweir break; 1387*cdf0e10cSrcweir case RTF_TQDEC: 1388*cdf0e10cSrcweir aTabStop.GetAdjustment() = SVX_TAB_ADJUST_DECIMAL; 1389*cdf0e10cSrcweir break; 1390*cdf0e10cSrcweir 1391*cdf0e10cSrcweir case RTF_TLDOT: aTabStop.GetFill() = '.'; break; 1392*cdf0e10cSrcweir case RTF_TLHYPH: aTabStop.GetFill() = ' '; break; 1393*cdf0e10cSrcweir case RTF_TLUL: aTabStop.GetFill() = '_'; break; 1394*cdf0e10cSrcweir case RTF_TLTH: aTabStop.GetFill() = '-'; break; 1395*cdf0e10cSrcweir case RTF_TLEQ: aTabStop.GetFill() = '='; break; 1396*cdf0e10cSrcweir 1397*cdf0e10cSrcweir case BRACELEFT: 1398*cdf0e10cSrcweir { 1399*cdf0e10cSrcweir // Swg - Kontrol BRACELEFT RTF_IGNOREFLAG RTF_TLSWG BRACERIGHT 1400*cdf0e10cSrcweir short nSkip = 0; 1401*cdf0e10cSrcweir if( RTF_IGNOREFLAG != GetNextToken() ) 1402*cdf0e10cSrcweir nSkip = -1; 1403*cdf0e10cSrcweir else if( RTF_TLSWG != ( nToken = GetNextToken() )) 1404*cdf0e10cSrcweir nSkip = -2; 1405*cdf0e10cSrcweir else 1406*cdf0e10cSrcweir { 1407*cdf0e10cSrcweir aTabStop.GetDecimal() = sal_uInt8(nTokenValue & 0xff); 1408*cdf0e10cSrcweir aTabStop.GetFill() = sal_uInt8((nTokenValue >> 8) & 0xff); 1409*cdf0e10cSrcweir // ueberlese noch die schliessende Klammer 1410*cdf0e10cSrcweir if (bMethodOwnsToken) 1411*cdf0e10cSrcweir GetNextToken(); 1412*cdf0e10cSrcweir } 1413*cdf0e10cSrcweir if( nSkip ) 1414*cdf0e10cSrcweir { 1415*cdf0e10cSrcweir SkipToken( nSkip ); // Ignore wieder zurueck 1416*cdf0e10cSrcweir bWeiter = sal_False; 1417*cdf0e10cSrcweir } 1418*cdf0e10cSrcweir } 1419*cdf0e10cSrcweir break; 1420*cdf0e10cSrcweir 1421*cdf0e10cSrcweir default: 1422*cdf0e10cSrcweir bWeiter = sal_False; 1423*cdf0e10cSrcweir } 1424*cdf0e10cSrcweir if( bWeiter ) 1425*cdf0e10cSrcweir { 1426*cdf0e10cSrcweir nToken = GetNextToken(); 1427*cdf0e10cSrcweir bMethodOwnsToken = true; 1428*cdf0e10cSrcweir } 1429*cdf0e10cSrcweir } while( bWeiter ); 1430*cdf0e10cSrcweir 1431*cdf0e10cSrcweir // mit Defaults aufuellen fehlt noch !!! 1432*cdf0e10cSrcweir rSet.Put( aAttr ); 1433*cdf0e10cSrcweir SkipToken( -1 ); 1434*cdf0e10cSrcweir } 1435*cdf0e10cSrcweir 1436*cdf0e10cSrcweir static void SetBorderLine( int nBorderTyp, SvxBoxItem& rItem, 1437*cdf0e10cSrcweir const SvxBorderLine& rBorder ) 1438*cdf0e10cSrcweir { 1439*cdf0e10cSrcweir switch( nBorderTyp ) 1440*cdf0e10cSrcweir { 1441*cdf0e10cSrcweir case RTF_BOX: // alle Stufen durchlaufen 1442*cdf0e10cSrcweir 1443*cdf0e10cSrcweir case RTF_BRDRT: 1444*cdf0e10cSrcweir rItem.SetLine( &rBorder, BOX_LINE_TOP ); 1445*cdf0e10cSrcweir if( RTF_BOX != nBorderTyp ) 1446*cdf0e10cSrcweir return; 1447*cdf0e10cSrcweir 1448*cdf0e10cSrcweir case RTF_BRDRB: 1449*cdf0e10cSrcweir rItem.SetLine( &rBorder, BOX_LINE_BOTTOM ); 1450*cdf0e10cSrcweir if( RTF_BOX != nBorderTyp ) 1451*cdf0e10cSrcweir return; 1452*cdf0e10cSrcweir 1453*cdf0e10cSrcweir case RTF_BRDRL: 1454*cdf0e10cSrcweir rItem.SetLine( &rBorder, BOX_LINE_LEFT ); 1455*cdf0e10cSrcweir if( RTF_BOX != nBorderTyp ) 1456*cdf0e10cSrcweir return; 1457*cdf0e10cSrcweir 1458*cdf0e10cSrcweir case RTF_BRDRR: 1459*cdf0e10cSrcweir rItem.SetLine( &rBorder, BOX_LINE_RIGHT ); 1460*cdf0e10cSrcweir if( RTF_BOX != nBorderTyp ) 1461*cdf0e10cSrcweir return; 1462*cdf0e10cSrcweir } 1463*cdf0e10cSrcweir } 1464*cdf0e10cSrcweir 1465*cdf0e10cSrcweir void SvxRTFParser::ReadBorderAttr( int nToken, SfxItemSet& rSet, 1466*cdf0e10cSrcweir int bTableDef ) 1467*cdf0e10cSrcweir { 1468*cdf0e10cSrcweir // dann lese doch mal das BoderAttribut ein 1469*cdf0e10cSrcweir SvxBoxItem aAttr( PARDID->nBox ); 1470*cdf0e10cSrcweir const SfxPoolItem* pItem; 1471*cdf0e10cSrcweir if( SFX_ITEM_SET == rSet.GetItemState( PARDID->nBox, sal_False, &pItem ) ) 1472*cdf0e10cSrcweir aAttr = *(SvxBoxItem*)pItem; 1473*cdf0e10cSrcweir 1474*cdf0e10cSrcweir SvxBorderLine aBrd( 0, DEF_LINE_WIDTH_0, 0, 0 ); // einfache Linien 1475*cdf0e10cSrcweir int bWeiter = sal_True, nBorderTyp = 0; 1476*cdf0e10cSrcweir 1477*cdf0e10cSrcweir do { 1478*cdf0e10cSrcweir switch( nToken ) 1479*cdf0e10cSrcweir { 1480*cdf0e10cSrcweir case RTF_BOX: 1481*cdf0e10cSrcweir case RTF_BRDRT: 1482*cdf0e10cSrcweir case RTF_BRDRB: 1483*cdf0e10cSrcweir case RTF_BRDRL: 1484*cdf0e10cSrcweir case RTF_BRDRR: 1485*cdf0e10cSrcweir nBorderTyp = nToken; 1486*cdf0e10cSrcweir goto SETBORDER; 1487*cdf0e10cSrcweir 1488*cdf0e10cSrcweir case RTF_CLBRDRT: 1489*cdf0e10cSrcweir if( !bTableDef ) 1490*cdf0e10cSrcweir break; 1491*cdf0e10cSrcweir nBorderTyp = RTF_BRDRT; 1492*cdf0e10cSrcweir goto SETBORDER; 1493*cdf0e10cSrcweir case RTF_CLBRDRB: 1494*cdf0e10cSrcweir if( !bTableDef ) 1495*cdf0e10cSrcweir break; 1496*cdf0e10cSrcweir nBorderTyp = RTF_BRDRB; 1497*cdf0e10cSrcweir goto SETBORDER; 1498*cdf0e10cSrcweir case RTF_CLBRDRL: 1499*cdf0e10cSrcweir if( !bTableDef ) 1500*cdf0e10cSrcweir break; 1501*cdf0e10cSrcweir nBorderTyp = RTF_BRDRL; 1502*cdf0e10cSrcweir goto SETBORDER; 1503*cdf0e10cSrcweir case RTF_CLBRDRR: 1504*cdf0e10cSrcweir if( !bTableDef ) 1505*cdf0e10cSrcweir break; 1506*cdf0e10cSrcweir nBorderTyp = RTF_BRDRR; 1507*cdf0e10cSrcweir goto SETBORDER; 1508*cdf0e10cSrcweir 1509*cdf0e10cSrcweir SETBORDER: 1510*cdf0e10cSrcweir { 1511*cdf0e10cSrcweir // auf defaults setzen 1512*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_LINE_WIDTH_0 ); 1513*cdf0e10cSrcweir aBrd.SetInWidth( 0 ); 1514*cdf0e10cSrcweir aBrd.SetDistance( 0 ); 1515*cdf0e10cSrcweir aBrd.SetColor( Color( COL_BLACK ) ); 1516*cdf0e10cSrcweir } 1517*cdf0e10cSrcweir break; 1518*cdf0e10cSrcweir 1519*cdf0e10cSrcweir 1520*cdf0e10cSrcweir // werden noch nicht ausgewertet 1521*cdf0e10cSrcweir case RTF_BRSP: 1522*cdf0e10cSrcweir { 1523*cdf0e10cSrcweir switch( nBorderTyp ) 1524*cdf0e10cSrcweir { 1525*cdf0e10cSrcweir case RTF_BRDRB: 1526*cdf0e10cSrcweir aAttr.SetDistance( (sal_uInt16)nTokenValue, BOX_LINE_BOTTOM ); 1527*cdf0e10cSrcweir break; 1528*cdf0e10cSrcweir 1529*cdf0e10cSrcweir case RTF_BRDRT: 1530*cdf0e10cSrcweir aAttr.SetDistance( (sal_uInt16)nTokenValue, BOX_LINE_TOP ); 1531*cdf0e10cSrcweir break; 1532*cdf0e10cSrcweir 1533*cdf0e10cSrcweir case RTF_BRDRL: 1534*cdf0e10cSrcweir aAttr.SetDistance( (sal_uInt16)nTokenValue, BOX_LINE_LEFT ); 1535*cdf0e10cSrcweir break; 1536*cdf0e10cSrcweir 1537*cdf0e10cSrcweir case RTF_BRDRR: 1538*cdf0e10cSrcweir aAttr.SetDistance( (sal_uInt16)nTokenValue, BOX_LINE_RIGHT ); 1539*cdf0e10cSrcweir break; 1540*cdf0e10cSrcweir 1541*cdf0e10cSrcweir case RTF_BOX: 1542*cdf0e10cSrcweir aAttr.SetDistance( (sal_uInt16)nTokenValue ); 1543*cdf0e10cSrcweir break; 1544*cdf0e10cSrcweir } 1545*cdf0e10cSrcweir } 1546*cdf0e10cSrcweir break; 1547*cdf0e10cSrcweir 1548*cdf0e10cSrcweir case RTF_BRDRBTW: 1549*cdf0e10cSrcweir case RTF_BRDRBAR: break; 1550*cdf0e10cSrcweir 1551*cdf0e10cSrcweir 1552*cdf0e10cSrcweir case RTF_BRDRCF: 1553*cdf0e10cSrcweir { 1554*cdf0e10cSrcweir aBrd.SetColor( GetColor( sal_uInt16(nTokenValue) ) ); 1555*cdf0e10cSrcweir SetBorderLine( nBorderTyp, aAttr, aBrd ); 1556*cdf0e10cSrcweir } 1557*cdf0e10cSrcweir break; 1558*cdf0e10cSrcweir 1559*cdf0e10cSrcweir case RTF_BRDRTH: 1560*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_LINE_WIDTH_1 ); 1561*cdf0e10cSrcweir aBrd.SetInWidth( 0 ); 1562*cdf0e10cSrcweir aBrd.SetDistance( 0 ); 1563*cdf0e10cSrcweir goto SETBORDERLINE; 1564*cdf0e10cSrcweir 1565*cdf0e10cSrcweir case RTF_BRDRDB: 1566*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_DOUBLE_LINE0_OUT ); 1567*cdf0e10cSrcweir aBrd.SetInWidth( DEF_DOUBLE_LINE0_IN ); 1568*cdf0e10cSrcweir aBrd.SetDistance( DEF_DOUBLE_LINE0_DIST ); 1569*cdf0e10cSrcweir goto SETBORDERLINE; 1570*cdf0e10cSrcweir 1571*cdf0e10cSrcweir case RTF_BRDRSH: 1572*cdf0e10cSrcweir // schattierte Box 1573*cdf0e10cSrcweir { 1574*cdf0e10cSrcweir rSet.Put( SvxShadowItem( PARDID->nShadow, (Color*) 0, 60 /*3pt*/, 1575*cdf0e10cSrcweir SVX_SHADOW_BOTTOMRIGHT ) ); 1576*cdf0e10cSrcweir } 1577*cdf0e10cSrcweir break; 1578*cdf0e10cSrcweir 1579*cdf0e10cSrcweir case RTF_BRDRW: 1580*cdf0e10cSrcweir if( -1 != nTokenValue ) 1581*cdf0e10cSrcweir { 1582*cdf0e10cSrcweir // sollte es eine "dicke" Linie sein ? 1583*cdf0e10cSrcweir if( DEF_LINE_WIDTH_0 != aBrd.GetOutWidth() ) 1584*cdf0e10cSrcweir nTokenValue *= 2; 1585*cdf0e10cSrcweir 1586*cdf0e10cSrcweir // eine Doppelline? 1587*cdf0e10cSrcweir if( aBrd.GetInWidth() ) 1588*cdf0e10cSrcweir { 1589*cdf0e10cSrcweir // WinWord - Werte an StarOffice anpassen 1590*cdf0e10cSrcweir if( nTokenValue < DEF_LINE_WIDTH_1 - (DEF_LINE_WIDTH_1/10)) 1591*cdf0e10cSrcweir { 1592*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_DOUBLE_LINE0_OUT ); 1593*cdf0e10cSrcweir aBrd.SetInWidth( DEF_DOUBLE_LINE0_IN ); 1594*cdf0e10cSrcweir aBrd.SetDistance( DEF_DOUBLE_LINE0_DIST ); 1595*cdf0e10cSrcweir } 1596*cdf0e10cSrcweir else 1597*cdf0e10cSrcweir if( nTokenValue < DEF_LINE_WIDTH_2 - (DEF_LINE_WIDTH_2/10)) 1598*cdf0e10cSrcweir { 1599*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_DOUBLE_LINE1_OUT ); 1600*cdf0e10cSrcweir aBrd.SetInWidth( DEF_DOUBLE_LINE1_IN ); 1601*cdf0e10cSrcweir aBrd.SetDistance( DEF_DOUBLE_LINE1_DIST ); 1602*cdf0e10cSrcweir } 1603*cdf0e10cSrcweir else 1604*cdf0e10cSrcweir { 1605*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_DOUBLE_LINE2_OUT ); 1606*cdf0e10cSrcweir aBrd.SetInWidth( DEF_DOUBLE_LINE2_IN ); 1607*cdf0e10cSrcweir aBrd.SetDistance( DEF_DOUBLE_LINE2_DIST ); 1608*cdf0e10cSrcweir } 1609*cdf0e10cSrcweir } 1610*cdf0e10cSrcweir else 1611*cdf0e10cSrcweir { 1612*cdf0e10cSrcweir // WinWord - Werte an StarOffice anpassen 1613*cdf0e10cSrcweir if( nTokenValue < DEF_LINE_WIDTH_1 - (DEF_LINE_WIDTH_1/10)) 1614*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_LINE_WIDTH_0 ); 1615*cdf0e10cSrcweir else 1616*cdf0e10cSrcweir if( nTokenValue < DEF_LINE_WIDTH_2 - (DEF_LINE_WIDTH_2/10)) 1617*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_LINE_WIDTH_1 ); 1618*cdf0e10cSrcweir else 1619*cdf0e10cSrcweir if( nTokenValue < DEF_LINE_WIDTH_3 - (DEF_LINE_WIDTH_3/10)) 1620*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_LINE_WIDTH_2 ); 1621*cdf0e10cSrcweir else 1622*cdf0e10cSrcweir if( nTokenValue < DEF_LINE_WIDTH_4 ) 1623*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_LINE_WIDTH_3 ); 1624*cdf0e10cSrcweir else 1625*cdf0e10cSrcweir aBrd.SetOutWidth( DEF_LINE_WIDTH_4 ); 1626*cdf0e10cSrcweir } 1627*cdf0e10cSrcweir } 1628*cdf0e10cSrcweir goto SETBORDERLINE; 1629*cdf0e10cSrcweir 1630*cdf0e10cSrcweir case RTF_BRDRS: 1631*cdf0e10cSrcweir case RTF_BRDRDOT: 1632*cdf0e10cSrcweir case RTF_BRDRHAIR: 1633*cdf0e10cSrcweir case RTF_BRDRDASH: 1634*cdf0e10cSrcweir SETBORDERLINE: 1635*cdf0e10cSrcweir SetBorderLine( nBorderTyp, aAttr, aBrd ); 1636*cdf0e10cSrcweir break; 1637*cdf0e10cSrcweir 1638*cdf0e10cSrcweir case BRACELEFT: 1639*cdf0e10cSrcweir { 1640*cdf0e10cSrcweir short nSkip = 0; 1641*cdf0e10cSrcweir if( RTF_IGNOREFLAG != GetNextToken() ) 1642*cdf0e10cSrcweir nSkip = -1; 1643*cdf0e10cSrcweir else 1644*cdf0e10cSrcweir { 1645*cdf0e10cSrcweir int bSwgControl = sal_True, bFirstToken = sal_True; 1646*cdf0e10cSrcweir nToken = GetNextToken(); 1647*cdf0e10cSrcweir do { 1648*cdf0e10cSrcweir switch( nToken ) 1649*cdf0e10cSrcweir { 1650*cdf0e10cSrcweir case RTF_BRDBOX: 1651*cdf0e10cSrcweir aAttr.SetDistance( sal_uInt16(nTokenValue) ); 1652*cdf0e10cSrcweir break; 1653*cdf0e10cSrcweir 1654*cdf0e10cSrcweir case RTF_BRDRT: 1655*cdf0e10cSrcweir case RTF_BRDRB: 1656*cdf0e10cSrcweir case RTF_BRDRR: 1657*cdf0e10cSrcweir case RTF_BRDRL: 1658*cdf0e10cSrcweir nBorderTyp = nToken; 1659*cdf0e10cSrcweir bFirstToken = sal_False; 1660*cdf0e10cSrcweir if( RTF_BRDLINE_COL != GetNextToken() ) 1661*cdf0e10cSrcweir { 1662*cdf0e10cSrcweir bSwgControl = sal_False; 1663*cdf0e10cSrcweir break; 1664*cdf0e10cSrcweir } 1665*cdf0e10cSrcweir aBrd.SetColor( GetColor( sal_uInt16(nTokenValue) )); 1666*cdf0e10cSrcweir 1667*cdf0e10cSrcweir if( RTF_BRDLINE_IN != GetNextToken() ) 1668*cdf0e10cSrcweir { 1669*cdf0e10cSrcweir bSwgControl = sal_False; 1670*cdf0e10cSrcweir break; 1671*cdf0e10cSrcweir } 1672*cdf0e10cSrcweir aBrd.SetInWidth( sal_uInt16(nTokenValue)); 1673*cdf0e10cSrcweir 1674*cdf0e10cSrcweir if( RTF_BRDLINE_OUT != GetNextToken() ) 1675*cdf0e10cSrcweir { 1676*cdf0e10cSrcweir bSwgControl = sal_False; 1677*cdf0e10cSrcweir break; 1678*cdf0e10cSrcweir } 1679*cdf0e10cSrcweir aBrd.SetOutWidth( sal_uInt16(nTokenValue)); 1680*cdf0e10cSrcweir 1681*cdf0e10cSrcweir if( RTF_BRDLINE_DIST != GetNextToken() ) 1682*cdf0e10cSrcweir { 1683*cdf0e10cSrcweir bSwgControl = sal_False; 1684*cdf0e10cSrcweir break; 1685*cdf0e10cSrcweir } 1686*cdf0e10cSrcweir aBrd.SetDistance( sal_uInt16(nTokenValue)); 1687*cdf0e10cSrcweir SetBorderLine( nBorderTyp, aAttr, aBrd ); 1688*cdf0e10cSrcweir break; 1689*cdf0e10cSrcweir 1690*cdf0e10cSrcweir default: 1691*cdf0e10cSrcweir bSwgControl = sal_False; 1692*cdf0e10cSrcweir break; 1693*cdf0e10cSrcweir } 1694*cdf0e10cSrcweir 1695*cdf0e10cSrcweir if( bSwgControl ) 1696*cdf0e10cSrcweir { 1697*cdf0e10cSrcweir nToken = GetNextToken(); 1698*cdf0e10cSrcweir bFirstToken = sal_False; 1699*cdf0e10cSrcweir } 1700*cdf0e10cSrcweir } while( bSwgControl ); 1701*cdf0e10cSrcweir 1702*cdf0e10cSrcweir // Ende der Swg-Gruppe 1703*cdf0e10cSrcweir // -> lese noch die schliessende Klammer 1704*cdf0e10cSrcweir if( BRACERIGHT == nToken ) 1705*cdf0e10cSrcweir ; 1706*cdf0e10cSrcweir else if( !bFirstToken ) 1707*cdf0e10cSrcweir { 1708*cdf0e10cSrcweir // es ist ein Parser-Fehler, springe zum 1709*cdf0e10cSrcweir // Ende der Gruppe 1710*cdf0e10cSrcweir SkipGroup(); 1711*cdf0e10cSrcweir // schliessende BRACERIGHT ueberspringen 1712*cdf0e10cSrcweir GetNextToken(); 1713*cdf0e10cSrcweir } 1714*cdf0e10cSrcweir else 1715*cdf0e10cSrcweir nSkip = -2; 1716*cdf0e10cSrcweir } 1717*cdf0e10cSrcweir 1718*cdf0e10cSrcweir if( nSkip ) 1719*cdf0e10cSrcweir { 1720*cdf0e10cSrcweir SkipToken( nSkip ); // Ignore wieder zurueck 1721*cdf0e10cSrcweir bWeiter = sal_False; 1722*cdf0e10cSrcweir } 1723*cdf0e10cSrcweir } 1724*cdf0e10cSrcweir break; 1725*cdf0e10cSrcweir 1726*cdf0e10cSrcweir default: 1727*cdf0e10cSrcweir bWeiter = (nToken & ~(0xff| RTF_SWGDEFS)) == RTF_BRDRDEF; 1728*cdf0e10cSrcweir } 1729*cdf0e10cSrcweir if( bWeiter ) 1730*cdf0e10cSrcweir nToken = GetNextToken(); 1731*cdf0e10cSrcweir } while( bWeiter ); 1732*cdf0e10cSrcweir rSet.Put( aAttr ); 1733*cdf0e10cSrcweir SkipToken( -1 ); 1734*cdf0e10cSrcweir } 1735*cdf0e10cSrcweir 1736*cdf0e10cSrcweir inline sal_uInt32 CalcShading( sal_uInt32 nColor, sal_uInt32 nFillColor, sal_uInt8 nShading ) 1737*cdf0e10cSrcweir { 1738*cdf0e10cSrcweir nColor = (nColor * nShading) / 100; 1739*cdf0e10cSrcweir nFillColor = (nFillColor * ( 100 - nShading )) / 100; 1740*cdf0e10cSrcweir return nColor + nFillColor; 1741*cdf0e10cSrcweir } 1742*cdf0e10cSrcweir 1743*cdf0e10cSrcweir void SvxRTFParser::ReadBackgroundAttr( int nToken, SfxItemSet& rSet, 1744*cdf0e10cSrcweir int bTableDef ) 1745*cdf0e10cSrcweir { 1746*cdf0e10cSrcweir // dann lese doch mal das BoderAttribut ein 1747*cdf0e10cSrcweir int bWeiter = sal_True; 1748*cdf0e10cSrcweir sal_uInt16 nColor = USHRT_MAX, nFillColor = USHRT_MAX; 1749*cdf0e10cSrcweir sal_uInt8 nFillValue = 0; 1750*cdf0e10cSrcweir 1751*cdf0e10cSrcweir sal_uInt16 nWh = ( nToken & ~0xff ) == RTF_CHRFMT 1752*cdf0e10cSrcweir ? PLAINID->nBgColor 1753*cdf0e10cSrcweir : PARDID->nBrush; 1754*cdf0e10cSrcweir 1755*cdf0e10cSrcweir do { 1756*cdf0e10cSrcweir switch( nToken ) 1757*cdf0e10cSrcweir { 1758*cdf0e10cSrcweir case RTF_CLCBPAT: 1759*cdf0e10cSrcweir case RTF_CHCBPAT: 1760*cdf0e10cSrcweir case RTF_CBPAT: 1761*cdf0e10cSrcweir nFillColor = sal_uInt16( nTokenValue ); 1762*cdf0e10cSrcweir break; 1763*cdf0e10cSrcweir 1764*cdf0e10cSrcweir case RTF_CLCFPAT: 1765*cdf0e10cSrcweir case RTF_CHCFPAT: 1766*cdf0e10cSrcweir case RTF_CFPAT: 1767*cdf0e10cSrcweir nColor = sal_uInt16( nTokenValue ); 1768*cdf0e10cSrcweir break; 1769*cdf0e10cSrcweir 1770*cdf0e10cSrcweir case RTF_CLSHDNG: 1771*cdf0e10cSrcweir case RTF_CHSHDNG: 1772*cdf0e10cSrcweir case RTF_SHADING: 1773*cdf0e10cSrcweir nFillValue = (sal_uInt8)( nTokenValue / 100 ); 1774*cdf0e10cSrcweir break; 1775*cdf0e10cSrcweir 1776*cdf0e10cSrcweir case RTF_CLBGDKHOR: 1777*cdf0e10cSrcweir case RTF_CHBGDKHORIZ: 1778*cdf0e10cSrcweir case RTF_BGDKHORIZ: 1779*cdf0e10cSrcweir case RTF_CLBGDKVERT: 1780*cdf0e10cSrcweir case RTF_CHBGDKVERT: 1781*cdf0e10cSrcweir case RTF_BGDKVERT: 1782*cdf0e10cSrcweir case RTF_CLBGDKBDIAG: 1783*cdf0e10cSrcweir case RTF_CHBGDKBDIAG: 1784*cdf0e10cSrcweir case RTF_BGDKBDIAG: 1785*cdf0e10cSrcweir case RTF_CLBGDKFDIAG: 1786*cdf0e10cSrcweir case RTF_CHBGDKFDIAG: 1787*cdf0e10cSrcweir case RTF_BGDKFDIAG: 1788*cdf0e10cSrcweir case RTF_CLBGDKCROSS: 1789*cdf0e10cSrcweir case RTF_CHBGDKCROSS: 1790*cdf0e10cSrcweir case RTF_BGDKCROSS: 1791*cdf0e10cSrcweir case RTF_CLBGDKDCROSS: 1792*cdf0e10cSrcweir case RTF_CHBGDKDCROSS: 1793*cdf0e10cSrcweir case RTF_BGDKDCROSS: 1794*cdf0e10cSrcweir // dark -> 60% 1795*cdf0e10cSrcweir nFillValue = 60; 1796*cdf0e10cSrcweir break; 1797*cdf0e10cSrcweir 1798*cdf0e10cSrcweir case RTF_CLBGHORIZ: 1799*cdf0e10cSrcweir case RTF_CHBGHORIZ: 1800*cdf0e10cSrcweir case RTF_BGHORIZ: 1801*cdf0e10cSrcweir case RTF_CLBGVERT: 1802*cdf0e10cSrcweir case RTF_CHBGVERT: 1803*cdf0e10cSrcweir case RTF_BGVERT: 1804*cdf0e10cSrcweir case RTF_CLBGBDIAG: 1805*cdf0e10cSrcweir case RTF_CHBGBDIAG: 1806*cdf0e10cSrcweir case RTF_BGBDIAG: 1807*cdf0e10cSrcweir case RTF_CLBGFDIAG: 1808*cdf0e10cSrcweir case RTF_CHBGFDIAG: 1809*cdf0e10cSrcweir case RTF_BGFDIAG: 1810*cdf0e10cSrcweir case RTF_CLBGCROSS: 1811*cdf0e10cSrcweir case RTF_CHBGCROSS: 1812*cdf0e10cSrcweir case RTF_BGCROSS: 1813*cdf0e10cSrcweir case RTF_CLBGDCROSS: 1814*cdf0e10cSrcweir case RTF_CHBGDCROSS: 1815*cdf0e10cSrcweir case RTF_BGDCROSS: 1816*cdf0e10cSrcweir // light -> 20% 1817*cdf0e10cSrcweir nFillValue = 20; 1818*cdf0e10cSrcweir break; 1819*cdf0e10cSrcweir 1820*cdf0e10cSrcweir default: 1821*cdf0e10cSrcweir if( bTableDef ) 1822*cdf0e10cSrcweir bWeiter = (nToken & ~(0xff | RTF_TABLEDEF) ) == RTF_SHADINGDEF; 1823*cdf0e10cSrcweir else 1824*cdf0e10cSrcweir bWeiter = (nToken & ~0xff) == RTF_SHADINGDEF; 1825*cdf0e10cSrcweir } 1826*cdf0e10cSrcweir if( bWeiter ) 1827*cdf0e10cSrcweir nToken = GetNextToken(); 1828*cdf0e10cSrcweir } while( bWeiter ); 1829*cdf0e10cSrcweir 1830*cdf0e10cSrcweir Color aCol( COL_WHITE ), aFCol; 1831*cdf0e10cSrcweir if( !nFillValue ) 1832*cdf0e10cSrcweir { 1833*cdf0e10cSrcweir // es wurde nur eine von beiden Farben angegeben oder kein BrushTyp 1834*cdf0e10cSrcweir if( USHRT_MAX != nFillColor ) 1835*cdf0e10cSrcweir { 1836*cdf0e10cSrcweir nFillValue = 100; 1837*cdf0e10cSrcweir aCol = GetColor( nFillColor ); 1838*cdf0e10cSrcweir } 1839*cdf0e10cSrcweir else if( USHRT_MAX != nColor ) 1840*cdf0e10cSrcweir aFCol = GetColor( nColor ); 1841*cdf0e10cSrcweir } 1842*cdf0e10cSrcweir else 1843*cdf0e10cSrcweir { 1844*cdf0e10cSrcweir if( USHRT_MAX != nColor ) 1845*cdf0e10cSrcweir aCol = GetColor( nColor ); 1846*cdf0e10cSrcweir else 1847*cdf0e10cSrcweir aCol = Color( COL_BLACK ); 1848*cdf0e10cSrcweir 1849*cdf0e10cSrcweir if( USHRT_MAX != nFillColor ) 1850*cdf0e10cSrcweir aFCol = GetColor( nFillColor ); 1851*cdf0e10cSrcweir else 1852*cdf0e10cSrcweir aFCol = Color( COL_WHITE ); 1853*cdf0e10cSrcweir } 1854*cdf0e10cSrcweir 1855*cdf0e10cSrcweir Color aColor; 1856*cdf0e10cSrcweir if( 0 == nFillValue || 100 == nFillValue ) 1857*cdf0e10cSrcweir aColor = aCol; 1858*cdf0e10cSrcweir else 1859*cdf0e10cSrcweir aColor = Color( 1860*cdf0e10cSrcweir (sal_uInt8)CalcShading( aCol.GetRed(), aFCol.GetRed(), nFillValue ), 1861*cdf0e10cSrcweir (sal_uInt8)CalcShading( aCol.GetGreen(), aFCol.GetGreen(), nFillValue ), 1862*cdf0e10cSrcweir (sal_uInt8)CalcShading( aCol.GetBlue(), aFCol.GetBlue(), nFillValue ) ); 1863*cdf0e10cSrcweir 1864*cdf0e10cSrcweir rSet.Put( SvxBrushItem( aColor, nWh ) ); 1865*cdf0e10cSrcweir SkipToken( -1 ); 1866*cdf0e10cSrcweir } 1867*cdf0e10cSrcweir 1868*cdf0e10cSrcweir 1869*cdf0e10cSrcweir // pard / plain abarbeiten 1870*cdf0e10cSrcweir void SvxRTFParser::RTFPardPlain( int bPard, SfxItemSet** ppSet ) 1871*cdf0e10cSrcweir { 1872*cdf0e10cSrcweir if( !bNewGroup && !aAttrStack.empty() ) // not at the beginning of a new group 1873*cdf0e10cSrcweir { 1874*cdf0e10cSrcweir SvxRTFItemStackType* pAkt = aAttrStack.back(); 1875*cdf0e10cSrcweir 1876*cdf0e10cSrcweir int nLastToken = GetStackPtr(-1)->nTokenId; 1877*cdf0e10cSrcweir int bNewStkEntry = sal_True; 1878*cdf0e10cSrcweir if( RTF_PARD != nLastToken && 1879*cdf0e10cSrcweir RTF_PLAIN != nLastToken && 1880*cdf0e10cSrcweir BRACELEFT != nLastToken ) 1881*cdf0e10cSrcweir { 1882*cdf0e10cSrcweir if( pAkt->aAttrSet.Count() || pAkt->pChildList || pAkt->nStyleNo ) 1883*cdf0e10cSrcweir { 1884*cdf0e10cSrcweir // eine neue Gruppe aufmachen 1885*cdf0e10cSrcweir SvxRTFItemStackType* pNew = new SvxRTFItemStackType( *pAkt, *pInsPos, sal_True ); 1886*cdf0e10cSrcweir pNew->SetRTFDefaults( GetRTFDefaults() ); 1887*cdf0e10cSrcweir 1888*cdf0e10cSrcweir // alle bis hierher gueltigen Attribute "setzen" 1889*cdf0e10cSrcweir AttrGroupEnd(); 1890*cdf0e10cSrcweir pAkt = aAttrStack.empty() ? 0 : aAttrStack.back(); // can be changed after AttrGroupEnd! 1891*cdf0e10cSrcweir pNew->aAttrSet.SetParent( pAkt ? &pAkt->aAttrSet : 0 ); 1892*cdf0e10cSrcweir aAttrStack.push_back( pNew ); 1893*cdf0e10cSrcweir pAkt = pNew; 1894*cdf0e10cSrcweir } 1895*cdf0e10cSrcweir else 1896*cdf0e10cSrcweir { 1897*cdf0e10cSrcweir // diesen Eintrag als neuen weiterbenutzen 1898*cdf0e10cSrcweir pAkt->SetStartPos( *pInsPos ); 1899*cdf0e10cSrcweir bNewStkEntry = sal_False; 1900*cdf0e10cSrcweir } 1901*cdf0e10cSrcweir } 1902*cdf0e10cSrcweir 1903*cdf0e10cSrcweir // jetzt noch alle auf default zuruecksetzen 1904*cdf0e10cSrcweir if( bNewStkEntry && 1905*cdf0e10cSrcweir ( pAkt->aAttrSet.GetParent() || pAkt->aAttrSet.Count() )) 1906*cdf0e10cSrcweir { 1907*cdf0e10cSrcweir const SfxPoolItem *pItem, *pDef; 1908*cdf0e10cSrcweir const sal_uInt16* pPtr; 1909*cdf0e10cSrcweir sal_uInt16 nCnt; 1910*cdf0e10cSrcweir const SfxItemSet* pDfltSet = &GetRTFDefaults(); 1911*cdf0e10cSrcweir if( bPard ) 1912*cdf0e10cSrcweir { 1913*cdf0e10cSrcweir pAkt->nStyleNo = 0; 1914*cdf0e10cSrcweir pPtr = aPardMap.GetData(); 1915*cdf0e10cSrcweir nCnt = aPardMap.Count(); 1916*cdf0e10cSrcweir } 1917*cdf0e10cSrcweir else 1918*cdf0e10cSrcweir { 1919*cdf0e10cSrcweir pPtr = aPlainMap.GetData(); 1920*cdf0e10cSrcweir nCnt = aPlainMap.Count(); 1921*cdf0e10cSrcweir } 1922*cdf0e10cSrcweir 1923*cdf0e10cSrcweir for( sal_uInt16 n = 0; n < nCnt; ++n, ++pPtr ) 1924*cdf0e10cSrcweir { 1925*cdf0e10cSrcweir // Item gesetzt und unterschiedlich -> das Pooldefault setzen 1926*cdf0e10cSrcweir //JP 06.04.98: bei Items die nur SlotItems sind, darf nicht 1927*cdf0e10cSrcweir // auf das Default zugefriffen werden. Diese 1928*cdf0e10cSrcweir // werden gecleart 1929*cdf0e10cSrcweir if( !*pPtr ) 1930*cdf0e10cSrcweir ; 1931*cdf0e10cSrcweir else if( SFX_WHICH_MAX < *pPtr ) 1932*cdf0e10cSrcweir pAkt->aAttrSet.ClearItem( *pPtr ); 1933*cdf0e10cSrcweir else if( IsChkStyleAttr() ) 1934*cdf0e10cSrcweir pAkt->aAttrSet.Put( pDfltSet->Get( *pPtr ) ); 1935*cdf0e10cSrcweir else if( !pAkt->aAttrSet.GetParent() ) 1936*cdf0e10cSrcweir { 1937*cdf0e10cSrcweir if( SFX_ITEM_SET == 1938*cdf0e10cSrcweir pDfltSet->GetItemState( *pPtr, sal_False, &pDef )) 1939*cdf0e10cSrcweir pAkt->aAttrSet.Put( *pDef ); 1940*cdf0e10cSrcweir else 1941*cdf0e10cSrcweir pAkt->aAttrSet.ClearItem( *pPtr ); 1942*cdf0e10cSrcweir } 1943*cdf0e10cSrcweir else if( SFX_ITEM_SET == pAkt->aAttrSet.GetParent()-> 1944*cdf0e10cSrcweir GetItemState( *pPtr, sal_True, &pItem ) && 1945*cdf0e10cSrcweir *( pDef = &pDfltSet->Get( *pPtr )) != *pItem ) 1946*cdf0e10cSrcweir pAkt->aAttrSet.Put( *pDef ); 1947*cdf0e10cSrcweir else 1948*cdf0e10cSrcweir { 1949*cdf0e10cSrcweir if( SFX_ITEM_SET == 1950*cdf0e10cSrcweir pDfltSet->GetItemState( *pPtr, sal_False, &pDef )) 1951*cdf0e10cSrcweir pAkt->aAttrSet.Put( *pDef ); 1952*cdf0e10cSrcweir else 1953*cdf0e10cSrcweir pAkt->aAttrSet.ClearItem( *pPtr ); 1954*cdf0e10cSrcweir } 1955*cdf0e10cSrcweir } 1956*cdf0e10cSrcweir } 1957*cdf0e10cSrcweir else if( bPard ) 1958*cdf0e10cSrcweir pAkt->nStyleNo = 0; // Style-Nummer zuruecksetzen 1959*cdf0e10cSrcweir 1960*cdf0e10cSrcweir *ppSet = &pAkt->aAttrSet; 1961*cdf0e10cSrcweir 1962*cdf0e10cSrcweir if (!bPard) 1963*cdf0e10cSrcweir { 1964*cdf0e10cSrcweir //Once we have a default font, then any text without a font specifier is 1965*cdf0e10cSrcweir //in the default font, and thus has the default font charset, otherwise 1966*cdf0e10cSrcweir //we can fall back to the ansicpg set codeset 1967*cdf0e10cSrcweir if (nDfltFont != -1) 1968*cdf0e10cSrcweir { 1969*cdf0e10cSrcweir const Font& rSVFont = GetFont(sal_uInt16(nDfltFont)); 1970*cdf0e10cSrcweir SetEncoding(rSVFont.GetCharSet()); 1971*cdf0e10cSrcweir } 1972*cdf0e10cSrcweir else 1973*cdf0e10cSrcweir SetEncoding(GetCodeSet()); 1974*cdf0e10cSrcweir } 1975*cdf0e10cSrcweir } 1976*cdf0e10cSrcweir } 1977*cdf0e10cSrcweir 1978*cdf0e10cSrcweir void SvxRTFParser::SetDefault( int nToken, int nValue ) 1979*cdf0e10cSrcweir { 1980*cdf0e10cSrcweir if( !bNewDoc ) 1981*cdf0e10cSrcweir return; 1982*cdf0e10cSrcweir 1983*cdf0e10cSrcweir SfxItemSet aTmp( *pAttrPool, aWhichMap.GetData() ); 1984*cdf0e10cSrcweir sal_Bool bOldFlag = bIsLeftToRightDef; 1985*cdf0e10cSrcweir bIsLeftToRightDef = sal_True; 1986*cdf0e10cSrcweir switch( nToken ) 1987*cdf0e10cSrcweir { 1988*cdf0e10cSrcweir case RTF_ADEFF: bIsLeftToRightDef = sal_False; // no break! 1989*cdf0e10cSrcweir case RTF_DEFF: 1990*cdf0e10cSrcweir { 1991*cdf0e10cSrcweir if( -1 == nValue ) 1992*cdf0e10cSrcweir nValue = 0; 1993*cdf0e10cSrcweir const Font& rSVFont = GetFont( sal_uInt16(nValue) ); 1994*cdf0e10cSrcweir SvxFontItem aTmpItem( 1995*cdf0e10cSrcweir rSVFont.GetFamily(), rSVFont.GetName(), 1996*cdf0e10cSrcweir rSVFont.GetStyleName(), rSVFont.GetPitch(), 1997*cdf0e10cSrcweir rSVFont.GetCharSet(), SID_ATTR_CHAR_FONT ); 1998*cdf0e10cSrcweir SetScriptAttr( NOTDEF_CHARTYPE, aTmp, aTmpItem ); 1999*cdf0e10cSrcweir } 2000*cdf0e10cSrcweir break; 2001*cdf0e10cSrcweir 2002*cdf0e10cSrcweir case RTF_ADEFLANG: bIsLeftToRightDef = sal_False; // no break! 2003*cdf0e10cSrcweir case RTF_DEFLANG: 2004*cdf0e10cSrcweir // default Language merken 2005*cdf0e10cSrcweir if( -1 != nValue ) 2006*cdf0e10cSrcweir { 2007*cdf0e10cSrcweir SvxLanguageItem aTmpItem( (const LanguageType)nValue, 2008*cdf0e10cSrcweir SID_ATTR_CHAR_LANGUAGE ); 2009*cdf0e10cSrcweir SetScriptAttr( NOTDEF_CHARTYPE, aTmp, aTmpItem ); 2010*cdf0e10cSrcweir } 2011*cdf0e10cSrcweir break; 2012*cdf0e10cSrcweir 2013*cdf0e10cSrcweir case RTF_DEFTAB: 2014*cdf0e10cSrcweir if( PARDID->nTabStop ) 2015*cdf0e10cSrcweir { 2016*cdf0e10cSrcweir // RTF definiert 720 twips als default 2017*cdf0e10cSrcweir bIsSetDfltTab = sal_True; 2018*cdf0e10cSrcweir if( -1 == nValue || !nValue ) 2019*cdf0e10cSrcweir nValue = 720; 2020*cdf0e10cSrcweir 2021*cdf0e10cSrcweir // wer keine Twips haben moechte ... 2022*cdf0e10cSrcweir if( IsCalcValue() ) 2023*cdf0e10cSrcweir { 2024*cdf0e10cSrcweir nTokenValue = nValue; 2025*cdf0e10cSrcweir CalcValue(); 2026*cdf0e10cSrcweir nValue = nTokenValue; 2027*cdf0e10cSrcweir } 2028*cdf0e10cSrcweir #if 1 2029*cdf0e10cSrcweir /* 2030*cdf0e10cSrcweir cmc: 2031*cdf0e10cSrcweir This stuff looks a little hairy indeed, this should be totally 2032*cdf0e10cSrcweir unnecessary where default tabstops are understood. Just make one 2033*cdf0e10cSrcweir tabstop and stick the value in there, the first one is all that 2034*cdf0e10cSrcweir matters. 2035*cdf0e10cSrcweir 2036*cdf0e10cSrcweir e.g. 2037*cdf0e10cSrcweir 2038*cdf0e10cSrcweir SvxTabStopItem aNewTab(1, sal_uInt16(nValue), SVX_TAB_ADJUST_DEFAULT, 2039*cdf0e10cSrcweir PARDID->nTabStop); 2040*cdf0e10cSrcweir ((SvxTabStop&)aNewTab[0]).GetAdjustment() = SVX_TAB_ADJUST_DEFAULT; 2041*cdf0e10cSrcweir 2042*cdf0e10cSrcweir 2043*cdf0e10cSrcweir It must exist as a foul hack to support somebody that does not 2044*cdf0e10cSrcweir have a true concept of default tabstops by making a tabsetting 2045*cdf0e10cSrcweir result from the default tabstop, creating a lot of them all at 2046*cdf0e10cSrcweir the default locations to give the effect of the first real 2047*cdf0e10cSrcweir default tabstop being in use just in case the receiving 2048*cdf0e10cSrcweir application doesn't do that for itself. 2049*cdf0e10cSrcweir */ 2050*cdf0e10cSrcweir #endif 2051*cdf0e10cSrcweir 2052*cdf0e10cSrcweir // Verhaeltnis der def. TabWidth / Tabs errechnen und 2053*cdf0e10cSrcweir // enstsprechend die neue Anzahl errechnen. 2054*cdf0e10cSrcweir /*-----------------14.12.94 19:32------------------- 2055*cdf0e10cSrcweir ?? wie kommt man auf die 13 ?? 2056*cdf0e10cSrcweir --------------------------------------------------*/ 2057*cdf0e10cSrcweir sal_uInt16 nAnzTabs = (SVX_TAB_DEFDIST * 13 ) / sal_uInt16(nValue); 2058*cdf0e10cSrcweir /* 2059*cdf0e10cSrcweir cmc, make sure we have at least one, or all hell breaks loose in 2060*cdf0e10cSrcweir everybodies exporters, #i8247# 2061*cdf0e10cSrcweir */ 2062*cdf0e10cSrcweir if (nAnzTabs < 1) 2063*cdf0e10cSrcweir nAnzTabs = 1; 2064*cdf0e10cSrcweir 2065*cdf0e10cSrcweir // wir wollen Defaulttabs 2066*cdf0e10cSrcweir SvxTabStopItem aNewTab( nAnzTabs, sal_uInt16(nValue), 2067*cdf0e10cSrcweir SVX_TAB_ADJUST_DEFAULT, PARDID->nTabStop ); 2068*cdf0e10cSrcweir while( nAnzTabs ) 2069*cdf0e10cSrcweir ((SvxTabStop&)aNewTab[ --nAnzTabs ]).GetAdjustment() = SVX_TAB_ADJUST_DEFAULT; 2070*cdf0e10cSrcweir 2071*cdf0e10cSrcweir pAttrPool->SetPoolDefaultItem( aNewTab ); 2072*cdf0e10cSrcweir } 2073*cdf0e10cSrcweir break; 2074*cdf0e10cSrcweir } 2075*cdf0e10cSrcweir bIsLeftToRightDef = bOldFlag; 2076*cdf0e10cSrcweir 2077*cdf0e10cSrcweir if( aTmp.Count() ) 2078*cdf0e10cSrcweir { 2079*cdf0e10cSrcweir SfxItemIter aIter( aTmp ); 2080*cdf0e10cSrcweir const SfxPoolItem* pItem = aIter.GetCurItem(); 2081*cdf0e10cSrcweir while( sal_True ) 2082*cdf0e10cSrcweir { 2083*cdf0e10cSrcweir pAttrPool->SetPoolDefaultItem( *pItem ); 2084*cdf0e10cSrcweir if( aIter.IsAtEnd() ) 2085*cdf0e10cSrcweir break; 2086*cdf0e10cSrcweir pItem = aIter.NextItem(); 2087*cdf0e10cSrcweir } 2088*cdf0e10cSrcweir } 2089*cdf0e10cSrcweir } 2090*cdf0e10cSrcweir 2091*cdf0e10cSrcweir // default: keine Umrechnung, alles bei Twips lassen. 2092*cdf0e10cSrcweir void SvxRTFParser::CalcValue() 2093*cdf0e10cSrcweir { 2094*cdf0e10cSrcweir } 2095*cdf0e10cSrcweir 2096*cdf0e10cSrcweir // fuer Tokens, die im ReadAttr nicht ausgewertet werden 2097*cdf0e10cSrcweir void SvxRTFParser::UnknownAttrToken( int, SfxItemSet* ) 2098*cdf0e10cSrcweir { 2099*cdf0e10cSrcweir } 2100*cdf0e10cSrcweir 2101*cdf0e10cSrcweir /* vi:set tabstop=4 shiftwidth=4 expandtab: */ 2102