xref: /AOO41X/main/editeng/source/rtf/rtfitem.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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