xref: /aoo41x/main/sw/source/core/doc/poolfmt.cxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sw.hxx"
30 
31 #include <hintids.hxx>
32 #include <i18npool/mslangid.hxx>
33 #include <unotools/localedatawrapper.hxx>
34 #include <editeng/paperinf.hxx>
35 #include <editeng/wghtitem.hxx>
36 #include <editeng/fontitem.hxx>
37 #include <editeng/fhgtitem.hxx>
38 #include <editeng/tstpitem.hxx>
39 #include <editeng/lrspitem.hxx>
40 #include <editeng/ulspitem.hxx>
41 #include <editeng/adjitem.hxx>
42 #include <editeng/postitem.hxx>
43 #include <editeng/keepitem.hxx>
44 #include <editeng/opaqitem.hxx>
45 #include <editeng/boxitem.hxx>
46 #include <editeng/cmapitem.hxx>
47 #include <editeng/udlnitem.hxx>
48 #include <editeng/colritem.hxx>
49 #include <editeng/protitem.hxx>
50 #include <editeng/escpitem.hxx>
51 #include <editeng/langitem.hxx>
52 #include <editeng/charrotateitem.hxx>
53 #include <editeng/frmdiritem.hxx>
54 #include <editeng/emphitem.hxx>
55 #include <editeng/scriptspaceitem.hxx>
56 #include <viewopt.hxx>
57 #include <doc.hxx>
58 #include <IDocumentUndoRedo.hxx>
59 #include <fmtanchr.hxx>
60 #include <fmtornt.hxx>
61 #include <fmtsrnd.hxx>
62 #include <fmtfsize.hxx>
63 #include <poolfmt.hxx>
64 #include <paratr.hxx>
65 #include <pagedesc.hxx>
66 #include <frmtool.hxx>
67 #include <charfmt.hxx>
68 #include <docary.hxx>
69 #include <fmtcol.hxx>
70 #include <ndtxt.hxx>
71 #include <fmtline.hxx>
72 #include <poolfmt.hrc>
73 #include <GetMetricVal.hxx>
74 #include <numrule.hxx>
75 
76 
77 using namespace ::com::sun::star;
78 
79 const sal_uInt16 PT_3	=  3 * 20;		//  3 pt
80 const sal_uInt16 PT_6	=  6 * 20;		//  6 pt
81 const sal_uInt16 PT_7	=  7 * 20;		//  6 pt
82 const sal_uInt16 PT_8	=  8 * 20;		//  8 pt
83 const sal_uInt16 PT_9	=  9 * 20;		//  9 pt
84 const sal_uInt16 PT_10 	= 10 * 20;		// 10 pt
85 const sal_uInt16 PT_11 	= 11 * 20;		// 11 pt
86 const sal_uInt16 PT_12 	= 12 * 20;		// 12 pt
87 const sal_uInt16 PT_14	= 14 * 20;		// 14 pt
88 const sal_uInt16 PT_16	= 16 * 20;		// 16 pt
89 const sal_uInt16 PT_18	= 18 * 20;		// 18 pt
90 const sal_uInt16 PT_22	= 22 * 20;		// 22 pt
91 const sal_uInt16 PT_24	= 24 * 20;		// 22 pt
92 
93 
94 //const sal_uInt16 HTML_PARSPACE = ((CM_05 * 7) / 10);
95 #define HTML_PARSPACE 	GetMetricVal( CM_05 )
96 
97 static const sal_Char __FAR_DATA sKomma[] = ", ";
98 
99 static const sal_uInt16 aHeadlineSizes[ 2 * MAXLEVEL ] = {
100 //	PT_16, PT_14, PT_14, PT_12, PT_12, 			// normal
101 //JP 10.12.96: jetzt soll alles prozentual sein:
102 	115, 100, 100, 85, 85,
103 	75,   75,  75, 75, 75,	// normal
104 //	PT_22, PT_16, PT_12, PT_11, PT_9			// HTML-Mode
105 	PT_24, PT_18, PT_14, PT_12, PT_10,
106 	PT_7, PT_7, PT_7, PT_7, PT_7 			// HTML-Mode
107 };
108 
109 long lcl_GetRightMargin( SwDoc& rDoc )
110 {
111 	// sorge dafuer, dass die Druckereinstellungen in die Standard-
112 	// Seitenvorlage uebernommen wurden.
113     const SwFrmFmt& rPgDscFmt =
114             const_cast<const SwDoc *>(&rDoc)->GetPageDesc( 0 ).GetMaster();
115     const SvxLRSpaceItem& rLR = rPgDscFmt.GetLRSpace();
116     const long nLeft = rLR.GetLeft();
117     const long nRight = rLR.GetRight();
118     const long nWidth = rPgDscFmt.GetFrmSize().GetWidth();
119     return nWidth - nLeft - nRight;
120 }
121 
122 void SetAllScriptItem( SfxItemSet& rSet, const SfxPoolItem& rItem )
123 {
124 	rSet.Put( rItem );
125 	sal_uInt16 nWhCJK = 0, nWhCTL = 0;
126 	switch( rItem.Which() )
127 	{
128 	case RES_CHRATR_FONTSIZE:
129 		nWhCJK = RES_CHRATR_CJK_FONTSIZE, nWhCTL = RES_CHRATR_CTL_FONTSIZE;
130 		break;
131 	case RES_CHRATR_FONT:
132 		nWhCJK = RES_CHRATR_CJK_FONT, nWhCTL = RES_CHRATR_CTL_FONT;
133 		break;
134 	case RES_CHRATR_LANGUAGE:
135 		nWhCJK = RES_CHRATR_CJK_LANGUAGE, nWhCTL = RES_CHRATR_CTL_LANGUAGE;
136 		break;
137 	case RES_CHRATR_POSTURE:
138 		nWhCJK = RES_CHRATR_CJK_POSTURE, nWhCTL = RES_CHRATR_CTL_POSTURE;
139 		break;
140 	case RES_CHRATR_WEIGHT:
141 		nWhCJK = RES_CHRATR_CJK_WEIGHT, nWhCTL = RES_CHRATR_CTL_WEIGHT;
142 		break;
143 	}
144 
145 	if( nWhCJK )
146 		rSet.Put( rItem, nWhCJK );
147 	if( nWhCTL )
148 		rSet.Put( rItem, nWhCTL );
149 }
150 
151 void lcl_SetDfltFont( sal_uInt16 nFntType, SfxItemSet& rSet )
152 {
153 	static struct {
154 		sal_uInt16 nResLngId;
155 		sal_uInt16 nResFntId;
156 	} aArr[ 3 ] = {
157 		{ RES_CHRATR_LANGUAGE, RES_CHRATR_FONT },
158 		{ RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CJK_FONT },
159 		{ RES_CHRATR_CTL_LANGUAGE, RES_CHRATR_CTL_FONT }
160 	};
161 	for( sal_uInt16 n = 0; n < 3; ++n )
162 	{
163 		sal_uInt16 nLng = ((SvxLanguageItem&)rSet.GetPool()->GetDefaultItem(
164 							aArr[n].nResLngId )).GetLanguage();
165 		Font aFnt( OutputDevice::GetDefaultFont( nFntType,
166 								nLng, DEFAULTFONT_FLAGS_ONLYONE ) );
167 
168 		rSet.Put( SvxFontItem( aFnt.GetFamily(), aFnt.GetName(),
169 							aEmptyStr, aFnt.GetPitch(),
170 							aFnt.GetCharSet(), aArr[n].nResFntId ));
171 	}
172 }
173 
174 void lcl_SetDfltFont( sal_uInt16 nLatinFntType, sal_uInt16 nCJKFntType,
175 						sal_uInt16 nCTLFntType, SfxItemSet& rSet )
176 {
177 	static struct {
178 		sal_uInt16 nResLngId;
179 		sal_uInt16 nResFntId;
180 		sal_uInt16 nFntType;
181 	} aArr[ 3 ] = {
182 		{ RES_CHRATR_LANGUAGE, RES_CHRATR_FONT, 0 },
183 		{ RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CJK_FONT, 0 },
184 		{ RES_CHRATR_CTL_LANGUAGE, RES_CHRATR_CTL_FONT, 0 }
185 	};
186 	aArr[0].nFntType = nLatinFntType;
187 	aArr[1].nFntType = nCJKFntType;
188 	aArr[2].nFntType = nCTLFntType;
189 
190 	for( sal_uInt16 n = 0; n < 3; ++n )
191 	{
192 		sal_uInt16 nLng = ((SvxLanguageItem&)rSet.GetPool()->GetDefaultItem(
193 							aArr[n].nResLngId )).GetLanguage();
194 		Font aFnt( OutputDevice::GetDefaultFont( aArr[n].nFntType,
195 								nLng, DEFAULTFONT_FLAGS_ONLYONE ) );
196 
197 		rSet.Put( SvxFontItem( aFnt.GetFamily(), aFnt.GetName(),
198 							aEmptyStr, aFnt.GetPitch(),
199 							aFnt.GetCharSet(), aArr[n].nResFntId ));
200 	}
201 }
202 
203 void lcl_SetHeadline( SwDoc* pDoc, SwTxtFmtColl* pColl,
204 						SfxItemSet& rSet,
205 						sal_uInt16 nOutLvlBits, sal_uInt8 nLevel, sal_Bool bItalic )
206 {
207     SetAllScriptItem( rSet, SvxWeightItem( WEIGHT_BOLD, RES_CHRATR_WEIGHT ) );
208     SvxFontHeightItem aHItem(240, 100, RES_CHRATR_FONTSIZE);
209     const bool bHTMLMode = pDoc->get(IDocumentSettingAccess::HTML_MODE);
210     if( bHTMLMode )
211 		aHItem.SetHeight( aHeadlineSizes[ MAXLEVEL + nLevel ] );
212 	else
213 		aHItem.SetHeight( PT_14, aHeadlineSizes[ nLevel ] );
214 	SetAllScriptItem( rSet, aHItem );
215 
216     if( bItalic && !bHTMLMode )
217         SetAllScriptItem( rSet, SvxPostureItem( ITALIC_NORMAL, RES_CHRATR_POSTURE ) );
218 
219     if( bHTMLMode )
220 	{
221 		::lcl_SetDfltFont( DEFAULTFONT_LATIN_TEXT, DEFAULTFONT_CJK_TEXT,
222 							DEFAULTFONT_CTL_TEXT, rSet );
223 	}
224 
225 	if( pColl )
226 	{
227 		if( !( nOutLvlBits & ( 1 << nLevel )) )
228 		{
229 			//pColl->SetOutlineLevel( nLevel );			 //#outline level zhaojianwei
230 			pColl->AssignToListLevelOfOutlineStyle(nLevel);//<-end,zhaojianwei
231             if( !bHTMLMode )
232 			{
233                 SwNumRule * pOutlineRule = pDoc->GetOutlineNumRule();
234 				const SwNumFmt& rNFmt = pOutlineRule->Get( nLevel );
235                 // --> OD 2008-02-01 #newlistlevelattrs#
236                 if ( rNFmt.GetPositionAndSpaceMode() ==
237                                     SvxNumberFormat::LABEL_WIDTH_AND_POSITION &&
238                      ( rNFmt.GetAbsLSpace() || rNFmt.GetFirstLineOffset() ) )
239                 // <--
240 				{
241                     SvxLRSpaceItem aLR( (SvxLRSpaceItem&)pColl->GetFmtAttr( RES_LR_SPACE ) );
242 					aLR.SetTxtFirstLineOfstValue( rNFmt.GetFirstLineOffset() );
243 					aLR.SetTxtLeft( rNFmt.GetAbsLSpace() );
244                     pColl->SetFmtAttr( aLR );
245 				}
246 
247                 // --> OD 2006-11-20 #i71764#
248                 // Check on document setting OUTLINE_LEVEL_YIELDS_OUTLINE_RULE no longer needed.
249                 // All paragraph styles, which are assigned to a level of the
250                 // outline style has to have the outline style set as its list style.
251                 {
252                     SwNumRuleItem aItem(pOutlineRule->GetName());
253 
254                     pColl->SetFmtAttr(aItem);
255                 }
256                 // <--
257 			}
258 		}
259 		pColl->SetNextTxtFmtColl( *pDoc->GetTxtCollFromPool(
260 										RES_POOLCOLL_TEXT ));
261 	}
262 }
263 
264 
265 
266 void lcl_SetRegister( SwDoc* pDoc, SfxItemSet& rSet, sal_uInt16 nFact,
267 						sal_Bool bHeader, sal_Bool bTab )
268 {
269     SvxLRSpaceItem aLR( RES_LR_SPACE );
270 	sal_uInt16 nLeft = nFact ? GetMetricVal( CM_05 ) * nFact : 0;
271 	aLR.SetTxtLeft( nLeft );
272 
273 	rSet.Put( aLR );
274 	if( bHeader )
275 	{
276         SetAllScriptItem( rSet, SvxWeightItem( WEIGHT_BOLD, RES_CHRATR_WEIGHT ) );
277         SetAllScriptItem( rSet, SvxFontHeightItem( PT_16, 100, RES_CHRATR_FONTSIZE ) );
278 	}
279 	if( bTab )
280 	{
281 		long nRightMargin = lcl_GetRightMargin( *pDoc );
282         SvxTabStopItem aTStops( 0, 0, SVX_TAB_ADJUST_DEFAULT, RES_PARATR_TABSTOP );
283 		aTStops.Insert( SvxTabStop( nRightMargin - nLeft,
284 									SVX_TAB_ADJUST_RIGHT,
285 									cDfltDecimalChar, '.' ));
286 		rSet.Put( aTStops );
287 	}
288 }
289 
290 
291 
292 void lcl_SetNumBul( SwDoc* pDoc, SwTxtFmtColl* pColl,
293 						SfxItemSet& rSet,
294 						sal_uInt16 nNxt, SwTwips nEZ, SwTwips nLeft,
295 						SwTwips nUpper, SwTwips nLower )
296 {
297 
298     SvxLRSpaceItem aLR( RES_LR_SPACE ); SvxULSpaceItem aUL( RES_UL_SPACE );
299 	aLR.SetTxtFirstLineOfst( sal_uInt16(nEZ) ); aLR.SetTxtLeft( sal_uInt16(nLeft) );
300 	aUL.SetUpper( sal_uInt16(nUpper) ); aUL.SetLower( sal_uInt16(nLower) );
301 	rSet.Put( aLR );
302 	rSet.Put( aUL );
303 
304 	if( !pColl )
305 		pColl->SetNextTxtFmtColl( *pDoc->GetTxtCollFromPool( nNxt ));
306 }
307 
308 
309 
310 // Gebe die "Auto-Collection" mit der Id zurueck. Existiert
311 // sie noch nicht, dann erzeuge sie
312 // Ist der String-Pointer definiert, dann erfrage nur die
313 // Beschreibung der Attribute, !! es legt keine Vorlage an !!
314 
315 SvxFrameDirection GetDefaultFrameDirection(sal_uLong nLanguage)
316 {
317     SvxFrameDirection eResult = (MsLangId::isRightToLeft( static_cast<LanguageType>(nLanguage)) ?
318             FRMDIR_HORI_RIGHT_TOP : FRMDIR_HORI_LEFT_TOP);
319     return eResult;
320 }
321 
322 SwTxtFmtColl* SwDoc::GetTxtCollFromPool( sal_uInt16 nId, bool bRegardLanguage )
323 {
324 	ASSERT(
325 		(RES_POOLCOLL_TEXT_BEGIN <= nId && nId < RES_POOLCOLL_TEXT_END) ||
326 		(RES_POOLCOLL_LISTS_BEGIN <= nId && nId < RES_POOLCOLL_LISTS_END) ||
327 		(RES_POOLCOLL_EXTRA_BEGIN <= nId && nId < RES_POOLCOLL_EXTRA_END) ||
328 		(RES_POOLCOLL_REGISTER_BEGIN <= nId && nId < RES_POOLCOLL_REGISTER_END) ||
329 		(RES_POOLCOLL_DOC_BEGIN <= nId && nId < RES_POOLCOLL_DOC_END) ||
330 		(RES_POOLCOLL_HTML_BEGIN <= nId && nId < RES_POOLCOLL_HTML_END),
331 			"Falsche AutoFormat-Id" );
332 
333     SwTxtFmtColl* pNewColl;
334 	sal_uInt16 nOutLvlBits = 0;
335 	for( sal_uInt16 n = 0; n < pTxtFmtCollTbl->Count(); ++n )
336 	{
337 		if( nId == ( pNewColl = (*pTxtFmtCollTbl)[ n ] )->GetPoolFmtId() )
338 		{
339             return pNewColl;
340 		}
341         //if( pNewColl->GetOutlineLevel() < MAXLEVEL )			//#outline level,zhaojianwei
342 		//nOutLvlBits |= ( 1 << pNewColl->GetOutlineLevel() );
343 		if( pNewColl->IsAssignedToListLevelOfOutlineStyle())
344 			nOutLvlBits |= ( 1 << pNewColl->GetAssignedOutlineStyleLevel() );//<-end,zhaojianwei
345 	}
346 
347 	// bis hierher nicht gefunden -> neu anlegen
348 	sal_uInt16 nResId = 0;
349 	if( RES_POOLCOLL_TEXT_BEGIN <= nId && nId < RES_POOLCOLL_TEXT_END )
350 		nResId = RC_POOLCOLL_TEXT_BEGIN - RES_POOLCOLL_TEXT_BEGIN;
351 	else if (RES_POOLCOLL_LISTS_BEGIN <= nId && nId < RES_POOLCOLL_LISTS_END)
352 		nResId = RC_POOLCOLL_LISTS_BEGIN - RES_POOLCOLL_LISTS_BEGIN;
353 	else if (RES_POOLCOLL_EXTRA_BEGIN <= nId && nId < RES_POOLCOLL_EXTRA_END)
354 		nResId = RC_POOLCOLL_EXTRA_BEGIN - RES_POOLCOLL_EXTRA_BEGIN;
355 	else if (RES_POOLCOLL_REGISTER_BEGIN <= nId && nId < RES_POOLCOLL_REGISTER_END)
356 		nResId = RC_POOLCOLL_REGISTER_BEGIN - RES_POOLCOLL_REGISTER_BEGIN;
357 	else if (RES_POOLCOLL_DOC_BEGIN <= nId && nId < RES_POOLCOLL_DOC_END)
358 		nResId = RC_POOLCOLL_DOC_BEGIN - RES_POOLCOLL_DOC_BEGIN;
359 	else if (RES_POOLCOLL_HTML_BEGIN <= nId && nId < RES_POOLCOLL_HTML_END)
360 		nResId = RC_POOLCOLL_HTML_BEGIN - RES_POOLCOLL_HTML_BEGIN;
361 
362 	ASSERT( nResId, "Ungueltige Pool-ID" );
363 	if( !nResId )
364         return GetTxtCollFromPool( RES_POOLCOLL_STANDARD );
365 
366 	ResId aResId( nResId + nId, *pSwResMgr );
367 	String aNm( aResId );
368 
369 	// ein Set fuer alle zusetzenden Attribute
370 	SwAttrSet aSet( GetAttrPool(), aTxtFmtCollSetRange );
371 	sal_uInt16 nParent = GetPoolParent( nId );
372 
373     {
374 
375 //FEATURE::CONDCOLL
376 		if(::IsConditionalByPoolId( nId ))
377 			pNewColl = new SwConditionTxtFmtColl( GetAttrPool(), aNm, !nParent
378 												? pDfltTxtFmtColl
379 												: GetTxtCollFromPool( nParent ));
380 		else
381 //FEATURE::CONDCOLL
382 		pNewColl = new SwTxtFmtColl( GetAttrPool(), aNm, !nParent
383 											? pDfltTxtFmtColl
384 											: GetTxtCollFromPool( nParent ));
385 		pNewColl->SetPoolFmtId( nId );
386 		pTxtFmtCollTbl->Insert( pNewColl, pTxtFmtCollTbl->Count() );
387 	}
388 
389 	switch( nId )
390 	{
391 	// allgemeine Inhaltsformen
392 	case RES_POOLCOLL_STANDARD:
393         /* #111214# koreans do not like SvxScriptItem(sal_True) */
394         if (bRegardLanguage)
395         {
396             sal_uLong nAppLanguage = GetAppLanguage();
397             if (GetDefaultFrameDirection(nAppLanguage) ==
398                 FRMDIR_HORI_RIGHT_TOP)
399             {
400                 SvxAdjustItem aAdjust(SVX_ADJUST_RIGHT, RES_PARATR_ADJUST );
401                 aSet.Put(aAdjust);
402             }
403             if (nAppLanguage == LANGUAGE_KOREAN)
404             {
405                 SvxScriptSpaceItem aScriptSpace(sal_False, RES_PARATR_SCRIPTSPACE);
406                 aSet.Put(aScriptSpace);
407             }
408         }
409 		break;
410 
411 	case RES_POOLCOLL_TEXT:					// Textkoerper
412 		{
413             SvxULSpaceItem aUL( 0, PT_6, RES_UL_SPACE );
414 			if( get(IDocumentSettingAccess::HTML_MODE) ) aUL.SetLower( HTML_PARSPACE );
415 			aSet.Put( aUL );
416 		}
417 		break;
418 	case RES_POOLCOLL_TEXT_IDENT:			// Textkoerper Einzug
419 		{
420             SvxLRSpaceItem aLR( RES_LR_SPACE );
421 			aLR.SetTxtFirstLineOfst( GetMetricVal( CM_05 ));
422 			aSet.Put( aLR );
423 		}
424 		break;
425 	case RES_POOLCOLL_TEXT_NEGIDENT:		// Textkoerper neg. Einzug
426 		{
427             SvxLRSpaceItem aLR( RES_LR_SPACE );
428 			aLR.SetTxtFirstLineOfst( -(short)GetMetricVal( CM_05 ));
429 			aLR.SetTxtLeft( GetMetricVal( CM_1 ));
430             SvxTabStopItem aTStops(RES_PARATR_TABSTOP);    aTStops.Insert( SvxTabStop( 0 ));
431 
432 			aSet.Put( aLR );
433 			aSet.Put( aTStops );
434 		}
435 		break;
436 	case RES_POOLCOLL_TEXT_MOVE:			// Textkoerper Einrueckung
437 		{
438             SvxLRSpaceItem aLR( RES_LR_SPACE );
439 			aLR.SetTxtLeft( GetMetricVal( CM_05 ));
440 			aSet.Put( aLR );
441 		}
442 		break;
443 
444 	case RES_POOLCOLL_CONFRONTATION: 	// Textkoerper Gegenueberstellung
445 		{
446             SvxLRSpaceItem aLR( RES_LR_SPACE );
447 			aLR.SetTxtFirstLineOfst( - short( GetMetricVal( CM_1 ) * 4 +
448 											  GetMetricVal( CM_05)) );
449 			aLR.SetTxtLeft( GetMetricVal( CM_1 ) * 5 );
450             SvxTabStopItem aTStops( RES_PARATR_TABSTOP );    aTStops.Insert( SvxTabStop( 0 ));
451 
452 			aSet.Put( aLR );
453 			aSet.Put( aTStops );
454 		}
455 		break;
456 	case RES_POOLCOLL_MARGINAL: 		// Textkoerper maginalie
457 		{
458             SvxLRSpaceItem aLR( RES_LR_SPACE );
459 			aLR.SetTxtLeft( GetMetricVal( CM_1 ) * 4 );
460 			aSet.Put( aLR );
461 		}
462 		break;
463 
464 	case RES_POOLCOLL_HEADLINE_BASE:			// Basis Ueberschrift
465 		{
466 			static const sal_uInt16 aFntInit[] = {
467 				DEFAULTFONT_LATIN_HEADING, 	RES_CHRATR_FONT,
468 								RES_CHRATR_LANGUAGE, LANGUAGE_ENGLISH_US,
469 				DEFAULTFONT_CJK_HEADING, 	RES_CHRATR_CJK_FONT,
470 								RES_CHRATR_CJK_LANGUAGE, LANGUAGE_ENGLISH_US,
471 				DEFAULTFONT_CTL_HEADING, 	RES_CHRATR_CTL_FONT,
472 								RES_CHRATR_CTL_LANGUAGE, LANGUAGE_ARABIC_SAUDI_ARABIA,
473 				0
474 			};
475 
476 			for( const sal_uInt16* pArr = aFntInit; *pArr; pArr += 4 )
477 			{
478 				sal_uInt16 nLng = ((SvxLanguageItem&)GetDefault( *(pArr+2) )).GetLanguage();
479 				if( LANGUAGE_DONTKNOW == nLng )
480 					nLng = *(pArr+3);
481 
482 				Font aFnt( OutputDevice::GetDefaultFont( *pArr,
483 										nLng, DEFAULTFONT_FLAGS_ONLYONE ) );
484 
485 				aSet.Put( SvxFontItem( aFnt.GetFamily(), aFnt.GetName(),
486 										aEmptyStr, aFnt.GetPitch(),
487                                         aFnt.GetCharSet(), *(pArr+1) ));
488 			}
489 
490             SvxFontHeightItem aFntSize( PT_14, 100, RES_CHRATR_FONTSIZE );
491             SvxULSpaceItem aUL( PT_12, PT_6, RES_UL_SPACE );
492 			if( get(IDocumentSettingAccess::HTML_MODE) )
493 				aUL.SetLower( HTML_PARSPACE );
494             aSet.Put( SvxFmtKeepItem( sal_True, RES_KEEP ));
495 
496             pNewColl->SetNextTxtFmtColl( *GetTxtCollFromPool( RES_POOLCOLL_TEXT ));
497 
498 			aSet.Put( aUL );
499 			SetAllScriptItem( aSet, aFntSize );
500 		}
501 		break;
502 
503 	case RES_POOLCOLL_NUMBUL_BASE:			// Basis Numerierung/Aufzaehlung
504 		break;
505 
506 	case RES_POOLCOLL_GREETING:				// Grussformel
507 	case RES_POOLCOLL_REGISTER_BASE: 		// Basis Verzeichnisse
508 	case RES_POOLCOLL_SIGNATURE:			// Unterschrift
509 	case RES_POOLCOLL_TABLE:				// Tabelle-Inhalt
510 		{
511 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
512 			aSet.Put( aLN );
513 		}
514 		break;
515 
516 	case RES_POOLCOLL_HEADLINE1:		// Ueberschrift 1
517 		lcl_SetHeadline( this, pNewColl, aSet, nOutLvlBits, 0, sal_False );
518 		break;
519 	case RES_POOLCOLL_HEADLINE2:		// Ueberschrift 2
520 		lcl_SetHeadline( this, pNewColl, aSet, nOutLvlBits, 1, sal_True );
521 		break;
522 	case RES_POOLCOLL_HEADLINE3:		// Ueberschrift 3
523 		lcl_SetHeadline( this, pNewColl, aSet, nOutLvlBits, 2, sal_False );
524 		break;
525 	case RES_POOLCOLL_HEADLINE4:		// Ueberschrift 4
526 		lcl_SetHeadline( this, pNewColl, aSet, nOutLvlBits, 3, sal_True );
527 		break;
528 	case RES_POOLCOLL_HEADLINE5:		// Ueberschrift 5
529 		lcl_SetHeadline( this, pNewColl, aSet, nOutLvlBits, 4, sal_False );
530 		break;
531 	case RES_POOLCOLL_HEADLINE6:		// Ueberschrift 6
532 		lcl_SetHeadline( this, pNewColl, aSet, nOutLvlBits, 5, sal_False );
533 		break;
534 	case RES_POOLCOLL_HEADLINE7:		// Ueberschrift 7
535 		lcl_SetHeadline( this, pNewColl, aSet, nOutLvlBits, 6, sal_False );
536 		break;
537 	case RES_POOLCOLL_HEADLINE8:		// Ueberschrift 8
538 		lcl_SetHeadline( this, pNewColl, aSet, nOutLvlBits, 7, sal_False );
539 		break;
540 	case RES_POOLCOLL_HEADLINE9:		// Ueberschrift 9
541 		lcl_SetHeadline( this, pNewColl, aSet, nOutLvlBits, 8, sal_False );
542 		break;
543 	case RES_POOLCOLL_HEADLINE10:		// Ueberschrift 10
544 		lcl_SetHeadline( this, pNewColl, aSet, nOutLvlBits, 9, sal_False );
545 		break;
546 
547 
548 	// Sonderbereiche:
549 	// Kopfzeilen
550 	case RES_POOLCOLL_HEADER:
551 	case RES_POOLCOLL_HEADERL:
552 	case RES_POOLCOLL_HEADERR:
553 	// Fusszeilen
554 	case RES_POOLCOLL_FOOTER:
555 	case RES_POOLCOLL_FOOTERL:
556 	case RES_POOLCOLL_FOOTERR:
557 		{
558 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
559 			aSet.Put( aLN );
560 
561 			long nRightMargin = lcl_GetRightMargin( *this );
562 
563             SvxTabStopItem aTStops( 0, 0, SVX_TAB_ADJUST_DEFAULT, RES_PARATR_TABSTOP );
564 			aTStops.Insert( SvxTabStop( nRightMargin / 2, SVX_TAB_ADJUST_CENTER ) );
565 			aTStops.Insert( SvxTabStop( nRightMargin, SVX_TAB_ADJUST_RIGHT ) );
566 
567 			aSet.Put( aTStops );
568 		}
569 		break;
570 
571 	case RES_POOLCOLL_TABLE_HDLN:
572 		{
573             SetAllScriptItem( aSet, SvxWeightItem( WEIGHT_BOLD, RES_CHRATR_WEIGHT ) );
574             aSet.Put( SvxAdjustItem( SVX_ADJUST_CENTER, RES_PARATR_ADJUST ) );
575             SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
576 			aSet.Put( aLN );
577 		}
578 		break;
579 
580 	case RES_POOLCOLL_FOOTNOTE:				// Fussnote
581 	case RES_POOLCOLL_ENDNOTE:
582 		{
583             SvxLRSpaceItem aLR( RES_LR_SPACE );
584 			aLR.SetTxtFirstLineOfst( -(short)GetMetricVal( CM_05 ));
585 			aLR.SetTxtLeft( GetMetricVal( CM_05 ));
586             SetAllScriptItem( aSet, SvxFontHeightItem( PT_10, 100, RES_CHRATR_FONTSIZE ) );
587 			aSet.Put( aLR );
588 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
589 			aSet.Put( aLN );
590 		}
591 		break;
592 
593 	case RES_POOLCOLL_LABEL:				// Beschriftung-Basis
594 		{
595             SvxULSpaceItem aUL( RES_UL_SPACE ); aUL.SetUpper( PT_6 ); aUL.SetLower( PT_6 );
596 			aSet.Put( aUL );
597             SetAllScriptItem( aSet, SvxPostureItem( ITALIC_NORMAL, RES_CHRATR_POSTURE ) );
598             SetAllScriptItem( aSet, SvxFontHeightItem( PT_10, 100, RES_CHRATR_FONTSIZE ) );
599 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
600 			aSet.Put( aLN );
601 		}
602 		break;
603 
604 	case RES_POOLCOLL_FRAME:				// Rahmen Inhalt
605 	case RES_POOLCOLL_LABEL_ABB:			// Beschriftung-Abbildung
606 	case RES_POOLCOLL_LABEL_TABLE:			// Beschriftung-Tabelle
607 	case RES_POOLCOLL_LABEL_FRAME:			// Beschriftung-Rahmen
608 	case RES_POOLCOLL_LABEL_DRAWING:		// Beschriftung-Zeichnung
609 		break;
610 
611 	case RES_POOLCOLL_JAKETADRESS:			// UmschlagAdresse
612 		{
613             SvxULSpaceItem aUL( RES_UL_SPACE ); aUL.SetLower( PT_3 );
614 			aSet.Put( aUL );
615 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
616 			aSet.Put( aLN );
617 		}
618 		break;
619 
620 	case RES_POOLCOLL_SENDADRESS:			// AbsenderAdresse
621 		{
622 			if( get(IDocumentSettingAccess::HTML_MODE) )
623                 SetAllScriptItem( aSet, SvxPostureItem(ITALIC_NORMAL, RES_CHRATR_POSTURE) );
624 			else
625 			{
626                 SvxULSpaceItem aUL( RES_UL_SPACE ); aUL.SetLower( PT_3 );
627 				aSet.Put( aUL );
628 			}
629 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
630 			aSet.Put( aLN );
631 		}
632 		break;
633 
634 	// Benutzer-Verzeichnisse:
635 	case RES_POOLCOLL_TOX_USERH:			// Header
636 		lcl_SetRegister( this, aSet, 0, sal_True, sal_False );
637 		{
638 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
639 			aSet.Put( aLN );
640 		}
641 		break;
642 	case RES_POOLCOLL_TOX_USER1:			// 1. Ebene
643 		lcl_SetRegister( this, aSet, 0, sal_False, sal_True );
644 		break;
645 	case RES_POOLCOLL_TOX_USER2:			// 2. Ebene
646 		lcl_SetRegister( this, aSet, 1, sal_False, sal_True );
647 		break;
648 	case RES_POOLCOLL_TOX_USER3:			// 3. Ebene
649 		lcl_SetRegister( this, aSet, 2, sal_False, sal_True );
650 		break;
651 	case RES_POOLCOLL_TOX_USER4:			// 4. Ebene
652 		lcl_SetRegister( this, aSet, 3, sal_False, sal_True );
653 		break;
654 	case RES_POOLCOLL_TOX_USER5:			// 5. Ebene
655 		lcl_SetRegister( this, aSet, 4, sal_False, sal_True );
656 		break;
657 	case RES_POOLCOLL_TOX_USER6:			// 6. Ebene
658 		lcl_SetRegister( this, aSet, 5, sal_False, sal_True );
659 		break;
660 	case RES_POOLCOLL_TOX_USER7:			// 7. Ebene
661 		lcl_SetRegister( this, aSet, 6, sal_False, sal_True );
662 		break;
663 	case RES_POOLCOLL_TOX_USER8:			// 8. Ebene
664 		lcl_SetRegister( this, aSet, 7, sal_False, sal_True );
665 		break;
666 	case RES_POOLCOLL_TOX_USER9:			// 9. Ebene
667 		lcl_SetRegister( this, aSet, 8, sal_False, sal_True );
668 		break;
669 	case RES_POOLCOLL_TOX_USER10:			// 10. Ebene
670 		lcl_SetRegister( this, aSet, 9, sal_False, sal_True );
671 		break;
672 
673 	// Index-Verzeichnisse
674 	case RES_POOLCOLL_TOX_IDXH:			// Header
675 		lcl_SetRegister( this, aSet, 0, sal_True, sal_False );
676 		{
677 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
678 			aSet.Put( aLN );
679 		}
680 		break;
681 	case RES_POOLCOLL_TOX_IDX1:			// 1. Ebene
682 		lcl_SetRegister( this, aSet, 0, sal_False, sal_False );
683 		break;
684 	case RES_POOLCOLL_TOX_IDX2:			// 2. Ebene
685 		lcl_SetRegister( this, aSet, 1, sal_False, sal_False );
686 		break;
687 	case RES_POOLCOLL_TOX_IDX3:			// 3. Ebene
688 		lcl_SetRegister( this, aSet, 2, sal_False, sal_False );
689 		break;
690 	case RES_POOLCOLL_TOX_IDXBREAK:		// Trenner
691 		lcl_SetRegister( this, aSet, 0, sal_False, sal_False );
692 		break;
693 
694 	// Inhalts-Verzeichnisse
695 	case RES_POOLCOLL_TOX_CNTNTH:		// Header
696 		lcl_SetRegister( this, aSet, 0, sal_True, sal_False );
697 		{
698 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
699 			aSet.Put( aLN );
700 		}
701 		break;
702 	case RES_POOLCOLL_TOX_CNTNT1:		// 1. Ebene
703 		lcl_SetRegister( this, aSet, 0, sal_False, sal_True );
704 		break;
705 	case RES_POOLCOLL_TOX_CNTNT2:		// 2. Ebene
706 		lcl_SetRegister( this, aSet, 1, sal_False, sal_True );
707 		break;
708 	case RES_POOLCOLL_TOX_CNTNT3:		// 3. Ebene
709 		lcl_SetRegister( this, aSet, 2, sal_False, sal_True );
710 		break;
711 	case RES_POOLCOLL_TOX_CNTNT4:		// 4. Ebene
712 		lcl_SetRegister( this, aSet, 3, sal_False, sal_True );
713 		break;
714 	case RES_POOLCOLL_TOX_CNTNT5:		// 5. Ebene
715 		lcl_SetRegister( this, aSet, 4, sal_False, sal_True );
716 		break;
717 	case RES_POOLCOLL_TOX_CNTNT6:		// 6. Ebene
718 		lcl_SetRegister( this, aSet, 5, sal_False, sal_True );
719 		break;
720 	case RES_POOLCOLL_TOX_CNTNT7:		// 7. Ebene
721 		lcl_SetRegister( this, aSet, 6, sal_False, sal_True );
722 		break;
723 	case RES_POOLCOLL_TOX_CNTNT8:		// 8. Ebene
724 		lcl_SetRegister( this, aSet, 7, sal_False, sal_True );
725 		break;
726 	case RES_POOLCOLL_TOX_CNTNT9:		// 9. Ebene
727 		lcl_SetRegister( this, aSet, 8, sal_False, sal_True );
728 		break;
729 	case RES_POOLCOLL_TOX_CNTNT10:		// 10. Ebene
730 		lcl_SetRegister( this, aSet, 9, sal_False, sal_True );
731 		break;
732 
733 	case RES_POOLCOLL_TOX_ILLUSH:
734 	case RES_POOLCOLL_TOX_OBJECTH:
735 	case RES_POOLCOLL_TOX_TABLESH:
736 	case RES_POOLCOLL_TOX_AUTHORITIESH:
737 		lcl_SetRegister( this, aSet, 0, sal_True, sal_False );
738 		{
739 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
740 			aSet.Put( aLN );
741 		}
742 		break;
743 	case RES_POOLCOLL_TOX_ILLUS1:
744 	case RES_POOLCOLL_TOX_OBJECT1:
745 	case RES_POOLCOLL_TOX_TABLES1:
746 	case RES_POOLCOLL_TOX_AUTHORITIES1:
747 		lcl_SetRegister( this, aSet, 0, sal_False, sal_True );
748 	break;
749 
750 
751 
752 	case RES_POOLCOLL_NUM_LEVEL1S:
753 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL1,
754 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 0 ),
755 						PT_12, PT_6 );
756 		break;
757 	case RES_POOLCOLL_NUM_LEVEL1:
758 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL1,
759 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 0 ),
760 						0, PT_6 );
761 		break;
762 	case RES_POOLCOLL_NUM_LEVEL1E:
763 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL1,
764 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 0 ),
765 						0, PT_12 );
766 		break;
767 	case RES_POOLCOLL_NUM_NONUM1:
768 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_NONUM1,
769 						0, SwNumRule::GetNumIndent( 0 ), 0, PT_6 );
770 		break;
771 	case RES_POOLCOLL_NUM_LEVEL2S:
772 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL2,
773 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 1 ),
774 						PT_12, PT_6 );
775 		break;
776 	case RES_POOLCOLL_NUM_LEVEL2:
777 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL2,
778 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 1 ),
779 						0, PT_6 );
780 		break;
781 	case RES_POOLCOLL_NUM_LEVEL2E:
782 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL2,
783 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 1 ),
784 						0, PT_12 );
785 		break;
786 	case RES_POOLCOLL_NUM_NONUM2:
787 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_NONUM2,
788 						0, SwNumRule::GetNumIndent( 1 ), 0, PT_6 );
789 		break;
790 	case RES_POOLCOLL_NUM_LEVEL3S:
791 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL3,
792 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 2 ),
793 						PT_12, PT_6 );
794 		break;
795 	case RES_POOLCOLL_NUM_LEVEL3:
796 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL3,
797 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 2 ),
798 						0, PT_6 );
799 		break;
800 	case RES_POOLCOLL_NUM_LEVEL3E:
801 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL3,
802 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 2 ),
803 						0, PT_12 );
804 		break;
805 	case RES_POOLCOLL_NUM_NONUM3:
806 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_NONUM3,
807 						0, SwNumRule::GetNumIndent( 2 ), 0, PT_6 );
808 		break;
809 	case RES_POOLCOLL_NUM_LEVEL4S:
810 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL4,
811 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 3 ),
812 						PT_12, PT_6 );
813 		break;
814 	case RES_POOLCOLL_NUM_LEVEL4:
815 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL4,
816 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 3 ),
817 						0, PT_6 );
818 		break;
819 	case RES_POOLCOLL_NUM_LEVEL4E:
820 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL4,
821 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 3 ),
822 						0, PT_12 );
823 		break;
824 	case RES_POOLCOLL_NUM_NONUM4:
825 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_NONUM4,
826 						0, SwNumRule::GetNumIndent( 3 ), 0, PT_6 );
827 		break;
828 	case RES_POOLCOLL_NUM_LEVEL5S:
829 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL5,
830 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 4 ),
831 						PT_12, PT_6 );
832 		break;
833 	case RES_POOLCOLL_NUM_LEVEL5:
834 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL5,
835 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 4 ),
836 						0, PT_6 );
837 		break;
838 	case RES_POOLCOLL_NUM_LEVEL5E:
839 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_LEVEL5,
840 						lNumFirstLineOffset, SwNumRule::GetNumIndent( 4 ),
841 						0, PT_12 );
842 		break;
843 	case RES_POOLCOLL_NUM_NONUM5:
844 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_NUM_NONUM5,
845 						0, SwNumRule::GetNumIndent( 4 ), 0, PT_6 );
846 		break;
847 
848 	case RES_POOLCOLL_BUL_LEVEL1S:
849 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL1,
850 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 0 ),
851 						PT_12, PT_6 );
852 		break;
853 	case RES_POOLCOLL_BUL_LEVEL1:
854 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL1,
855 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 0 ),
856 						0, PT_6 );
857 		break;
858 	case RES_POOLCOLL_BUL_LEVEL1E:
859 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL1,
860 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 0 ),
861 						0, PT_12 );
862 		break;
863 	case RES_POOLCOLL_BUL_NONUM1:
864 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_NONUM1,
865 						0, SwNumRule::GetBullIndent( 0 ), 0, PT_6 );
866 		break;
867 	case RES_POOLCOLL_BUL_LEVEL2S:
868 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL2,
869 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 1 ),
870 						PT_12, PT_6 );
871 		break;
872 	case RES_POOLCOLL_BUL_LEVEL2:
873 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL2,
874 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 1 ),
875 						0, PT_6 );
876 		break;
877 	case RES_POOLCOLL_BUL_LEVEL2E:
878 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL2,
879 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 1 ),
880 						0, PT_12 );
881 		break;
882 	case RES_POOLCOLL_BUL_NONUM2:
883 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_NONUM2,
884 						0, SwNumRule::GetBullIndent( 1 ), 0, PT_6 );
885 		break;
886 	case RES_POOLCOLL_BUL_LEVEL3S:
887 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL3,
888 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 2 ),
889 						PT_12, PT_6 );
890 		break;
891 	case RES_POOLCOLL_BUL_LEVEL3:
892 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL3,
893 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 2 ),
894 						0, PT_6 );
895 		break;
896 	case RES_POOLCOLL_BUL_LEVEL3E:
897 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL3,
898 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 2 ),
899 						0, PT_12 );
900 		break;
901 	case RES_POOLCOLL_BUL_NONUM3:
902 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_NONUM3,
903 						0, SwNumRule::GetBullIndent( 2 ), 0, PT_6 );
904 		break;
905 	case RES_POOLCOLL_BUL_LEVEL4S:
906 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL4,
907 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 3 ),
908 						PT_12, PT_6 );
909 		break;
910 	case RES_POOLCOLL_BUL_LEVEL4:
911 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL4,
912 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 3 ),
913 						0, PT_6 );
914 		break;
915 	case RES_POOLCOLL_BUL_LEVEL4E:
916 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL4,
917 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 3 ),
918 						0, PT_12 );
919 		break;
920 	case RES_POOLCOLL_BUL_NONUM4:
921 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_NONUM4,
922 						0, SwNumRule::GetBullIndent( 3 ), 0, PT_6 );
923 		break;
924 	case RES_POOLCOLL_BUL_LEVEL5S:
925 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL5,
926 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 4 ),
927 						PT_12, PT_6 );
928 		break;
929 	case RES_POOLCOLL_BUL_LEVEL5:
930 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL5,
931 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 4 ),
932 						0, PT_6 );
933 		break;
934 	case RES_POOLCOLL_BUL_LEVEL5E:
935 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_LEVEL5,
936 						lBullFirstLineOffset, SwNumRule::GetBullIndent( 4 ),
937 						0, PT_12 );
938 		break;
939 	case RES_POOLCOLL_BUL_NONUM5:
940 		lcl_SetNumBul( this, pNewColl, aSet, RES_POOLCOLL_BUL_NONUM5,
941 						0, SwNumRule::GetBullIndent( 4 ), 0, PT_6 );
942 		break;
943 
944 	case RES_POOLCOLL_DOC_TITEL:	   		// Doc. Titel
945 		{
946             SetAllScriptItem( aSet, SvxWeightItem( WEIGHT_BOLD, RES_CHRATR_WEIGHT ) );
947             SetAllScriptItem( aSet, SvxFontHeightItem( PT_18, 100, RES_CHRATR_FONTSIZE ) );
948 
949             aSet.Put( SvxAdjustItem( SVX_ADJUST_CENTER, RES_PARATR_ADJUST ) );
950 
951             pNewColl->SetNextTxtFmtColl( *GetTxtCollFromPool(
952 												RES_POOLCOLL_DOC_SUBTITEL ));
953 		}
954 		break;
955 
956 	case RES_POOLCOLL_DOC_SUBTITEL:			// Doc. UnterTitel
957 		{
958             SetAllScriptItem( aSet, SvxPostureItem( ITALIC_NORMAL, RES_CHRATR_POSTURE ));
959             SetAllScriptItem( aSet, SvxFontHeightItem( PT_14, 100, RES_CHRATR_FONTSIZE ));
960 
961             aSet.Put( SvxAdjustItem( SVX_ADJUST_CENTER, RES_PARATR_ADJUST ));
962 
963             pNewColl->SetNextTxtFmtColl( *GetTxtCollFromPool(
964 												RES_POOLCOLL_TEXT ));
965 		}
966 		break;
967 
968 	case RES_POOLCOLL_HTML_BLOCKQUOTE:
969 		{
970             SvxLRSpaceItem aLR( RES_LR_SPACE );
971 			aLR.SetLeft( GetMetricVal( CM_1 ));
972 			aLR.SetRight( GetMetricVal( CM_1 ));
973 			aSet.Put( aLR );
974 //          aSet.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, RES_PARATR_ADJUST ) );
975             SvxULSpaceItem aUL( RES_UL_SPACE );
976             aUL = pNewColl->GetULSpace();
977 			aUL.SetLower( HTML_PARSPACE );
978 			aSet.Put( aUL);
979 		}
980 		break;
981 
982 	case RES_POOLCOLL_HTML_PRE:
983 		{
984 			::lcl_SetDfltFont( DEFAULTFONT_FIXED, aSet );
985 
986 // WORKAROUND: PRE auf 10pt setzten
987             SetAllScriptItem( aSet, SvxFontHeightItem(PT_10, 100, RES_CHRATR_FONTSIZE) );
988 // WORKAROUND: PRE auf 10pt setzten
989 
990 			// der untere Absatz-Abstand wird explizit gesetzt (macht
991 			// die harte Attributierung einfacher)
992             SvxULSpaceItem aULSpaceItem( RES_UL_SPACE );
993             aULSpaceItem = pNewColl->GetULSpace();
994 			aULSpaceItem.SetLower( 0 );
995 			aSet.Put( aULSpaceItem );
996 		}
997 		break;
998 
999 	case RES_POOLCOLL_HTML_HR:
1000 		{
1001             SvxBoxItem aBox( RES_BOX );
1002 			Color aColor( COL_GRAY );
1003 			SvxBorderLine aNew( &aColor, DEF_DOUBLE_LINE0_OUT,
1004 										 DEF_DOUBLE_LINE0_IN,
1005 										 DEF_DOUBLE_LINE0_DIST );
1006 			aBox.SetLine( &aNew, BOX_LINE_BOTTOM );
1007 
1008 			aSet.Put( aBox );
1009             aSet.Put( SwParaConnectBorderItem( sal_False ) );
1010             SetAllScriptItem( aSet, SvxFontHeightItem(120, 100, RES_CHRATR_FONTSIZE) );
1011 
1012             SvxULSpaceItem aUL( RES_UL_SPACE );
1013             {
1014 				pNewColl->SetNextTxtFmtColl( *GetTxtCollFromPool(
1015 												RES_POOLCOLL_TEXT ));
1016 				aUL = pNewColl->GetULSpace();
1017 			}
1018 			aUL.SetLower( HTML_PARSPACE );
1019 			aSet.Put( aUL);
1020 			SwFmtLineNumber aLN; aLN.SetCountLines( sal_False );
1021 			aSet.Put( aLN );
1022 		}
1023 		break;
1024 
1025 	case RES_POOLCOLL_HTML_DD:
1026 		{
1027             SvxLRSpaceItem aLR( RES_LR_SPACE );
1028             aLR = pNewColl->GetLRSpace();
1029 			// es wird um 1cm eingerueckt. Die IDs liegen immer 2 auseinander!
1030 			aLR.SetLeft( GetMetricVal( CM_1 ));
1031 			aSet.Put( aLR );
1032 		}
1033 		break;
1034 	case RES_POOLCOLL_HTML_DT:
1035 		{
1036             SvxLRSpaceItem aLR( RES_LR_SPACE );
1037             {
1038 				pNewColl->SetNextTxtFmtColl( *GetTxtCollFromPool(
1039 													RES_POOLCOLL_HTML_DD ));
1040 				aLR = pNewColl->GetLRSpace();
1041 			}
1042 			// es wird um 0cm eingerueckt. Die IDs liegen immer 2 auseinander!
1043 			aLR.SetLeft( 0 );
1044 			aSet.Put( aLR );
1045 		}
1046 		break;
1047 	}
1048 
1049 	if( aSet.Count() )
1050 	{
1051         {
1052             pNewColl->SetFmtAttr( aSet );
1053 			// JP 31.08.95: erzeugen einer PoolVorlage ist keine Modifikation
1054 			//				(Bug: 18545)
1055 			// SetModified();
1056 		}
1057 	}
1058 	return pNewColl;
1059 }
1060 
1061 
1062 
1063 	// pruefe, ob diese "Auto-Collection" in Dokument schon/noch
1064 	// benutzt wird
1065 bool SwDoc::IsPoolTxtCollUsed( sal_uInt16 nId ) const
1066 {
1067 	ASSERT(
1068 		(RES_POOLCOLL_TEXT_BEGIN <= nId && nId < RES_POOLCOLL_TEXT_END) ||
1069 		(RES_POOLCOLL_LISTS_BEGIN <= nId && nId < RES_POOLCOLL_LISTS_END) ||
1070 		(RES_POOLCOLL_EXTRA_BEGIN <= nId && nId < RES_POOLCOLL_EXTRA_END) ||
1071 		(RES_POOLCOLL_REGISTER_BEGIN <= nId && nId < RES_POOLCOLL_REGISTER_END) ||
1072 		(RES_POOLCOLL_DOC_BEGIN <= nId && nId < RES_POOLCOLL_DOC_END) ||
1073 		(RES_POOLCOLL_HTML_BEGIN <= nId && nId < RES_POOLCOLL_HTML_END),
1074 			"Falsche AutoFormat-Id" );
1075 
1076 	SwTxtFmtColl* pNewColl = 0;
1077 	sal_Bool bFnd = sal_False;
1078 	for( sal_uInt16 n = 0; !bFnd && n < pTxtFmtCollTbl->Count(); ++n )
1079     {
1080         pNewColl = (*pTxtFmtCollTbl)[ n ];
1081 		if( nId == pNewColl->GetPoolFmtId() )
1082 			bFnd = sal_True;
1083     }
1084 
1085 	if( !bFnd || !pNewColl->GetDepends() )
1086 		return sal_False;
1087 
1088     SwAutoFmtGetDocNode aGetHt( &GetNodes() );
1089 	return !pNewColl->GetInfo( aGetHt );
1090 }
1091 
1092 	// Gebe das "Auto[matische]-Format" mit der Id zurueck. Existiert
1093 	// es noch nicht, dann erzeuge es
1094 
1095 SwFmt* SwDoc::GetFmtFromPool( sal_uInt16 nId )
1096 {
1097     SwFmt *pNewFmt = 0;
1098     SwFmt *pDeriveFmt = 0;
1099 
1100     SvPtrarr* pArray[ 2 ];
1101 	sal_uInt16 nArrCnt = 1, nRCId = 0;
1102 	sal_uInt16* pWhichRange = 0;
1103 
1104 	switch( nId & (COLL_GET_RANGE_BITS + POOLGRP_NOCOLLID) )
1105 	{
1106 	case POOLGRP_CHARFMT:
1107 		{
1108 			pArray[0] = pCharFmtTbl;
1109 			pDeriveFmt = pDfltCharFmt;
1110 
1111 			if( nId > RES_POOLCHR_NORMAL_END )
1112 				nRCId = RC_POOLCHRFMT_HTML_BEGIN - RES_POOLCHR_HTML_BEGIN;
1113 			else
1114 				nRCId = RC_POOLCHRFMT_BEGIN - RES_POOLCHR_BEGIN;
1115 			pWhichRange =  aCharFmtSetRange;
1116 
1117 			// Fehlerfall: unbekanntes Format, aber CharFormat
1118 			//			-> returne das erste
1119 			if( RES_POOLCHR_BEGIN > nId || nId >= RES_POOLCHR_END )
1120 			{
1121 				ASSERT( !this, "ungueltige Id" );
1122 				nId = RES_POOLCHR_BEGIN;
1123 			}
1124 		}
1125 		break;
1126 	case POOLGRP_FRAMEFMT:
1127 		{
1128 			pArray[0] = pFrmFmtTbl;
1129 			pArray[1] = pSpzFrmFmtTbl;
1130 			pDeriveFmt = pDfltFrmFmt;
1131 			nArrCnt = 2;
1132 			nRCId = RC_POOLFRMFMT_BEGIN - RES_POOLFRM_BEGIN;
1133 			pWhichRange = aFrmFmtSetRange;
1134 
1135 			// Fehlerfall: unbekanntes Format, aber FrameFormat
1136 			//			-> returne das erste
1137 			if( RES_POOLFRM_BEGIN > nId || nId >= RES_POOLFRM_END )
1138 			{
1139 				ASSERT( !this, "ungueltige Id" );
1140 				nId = RES_POOLFRM_BEGIN;
1141 			}
1142 		}
1143 		break;
1144 
1145 	default:
1146 		// Fehlerfall, unbekanntes Format
1147 		ASSERT( nId, "ungueltige Id" );
1148 		return 0;
1149 	}
1150 	ASSERT( nRCId, "ungueltige Id" );
1151 
1152 	while( nArrCnt-- )
1153 		for( sal_uInt16 n = 0; n < (*pArray[nArrCnt]).Count(); ++n )
1154 			if( nId == ( pNewFmt = (SwFmt*)(*pArray[ nArrCnt ] )[ n ] )->
1155 					GetPoolFmtId() )
1156 			{
1157                 return pNewFmt;
1158 			}
1159 
1160 	ResId aResId( nRCId + nId, *pSwResMgr );
1161 	String aNm( aResId );
1162 	SwAttrSet aSet( GetAttrPool(), pWhichRange );
1163 
1164     {
1165 		sal_Bool bIsModified = IsModified();
1166 
1167         {
1168             ::sw::UndoGuard const undoGuard(GetIDocumentUndoRedo());
1169             switch (nId & (COLL_GET_RANGE_BITS + POOLGRP_NOCOLLID) )
1170             {
1171                 case POOLGRP_CHARFMT:
1172                     pNewFmt = _MakeCharFmt(aNm, pDeriveFmt, sal_False, sal_True);
1173                 break;
1174                 case POOLGRP_FRAMEFMT:
1175                     pNewFmt = _MakeFrmFmt(aNm, pDeriveFmt, sal_False, sal_True);
1176                 break;
1177                 default:
1178                 break;
1179             }
1180         }
1181 
1182 		if( !bIsModified )
1183 			ResetModified();
1184 		pNewFmt->SetPoolFmtId( nId );
1185 		pNewFmt->SetAuto( sal_False );		// kein Auto-Format
1186 	}
1187 
1188 	switch( nId )
1189 	{
1190 	case RES_POOLCHR_FOOTNOTE:				// Fussnote
1191 	case RES_POOLCHR_PAGENO:				// Seiten/Feld
1192 	case RES_POOLCHR_LABEL:					// Beschriftung
1193 	case RES_POOLCHR_DROPCAPS: 				// Initialien
1194 	case RES_POOLCHR_NUM_LEVEL:				// Aufzaehlungszeichen
1195 	case RES_POOLCHR_TOXJUMP:				// Verzeichnissprung
1196 	case RES_POOLCHR_ENDNOTE:				// Endnote
1197 	case RES_POOLCHR_LINENUM:				// Zeilennummerierung
1198 		break;
1199 
1200 	case RES_POOLCHR_ENDNOTE_ANCHOR:		// Endnotenanker
1201 	case RES_POOLCHR_FOOTNOTE_ANCHOR:		// Fussnotenanker
1202 		{
1203             aSet.Put( SvxEscapementItem( DFLT_ESC_AUTO_SUPER, 58, RES_CHRATR_ESCAPEMENT ) );
1204 		}
1205 		break;
1206 
1207 
1208 	case RES_POOLCHR_BUL_LEVEL:				// Aufzaehlungszeichen
1209 		{
1210             const Font& rBulletFont = numfunc::GetDefBulletFont();
1211             SetAllScriptItem( aSet, SvxFontItem( rBulletFont.GetFamily(),
1212                       rBulletFont.GetName(), rBulletFont.GetStyleName(),
1213                         rBulletFont.GetPitch(), rBulletFont.GetCharSet(), RES_CHRATR_FONT ));
1214             // --> OD 2008-06-02 #i63395#
1215             // no font and no font size any more
1216 //            SetAllScriptItem( aSet, SvxFontHeightItem( PT_9, 100, RES_CHRATR_FONTSIZE ));
1217             // <--
1218 		}
1219 		break;
1220 
1221 	case RES_POOLCHR_INET_NORMAL:
1222 		{
1223             Color aCol( COL_BLUE );
1224             aSet.Put( SvxColorItem( aCol, RES_CHRATR_COLOR ) );
1225             aSet.Put( SvxUnderlineItem( UNDERLINE_SINGLE, RES_CHRATR_UNDERLINE ) );
1226             // i40133: patch submitted by rail: set language to 'none' to prevent spell checking:
1227             aSet.Put( SvxLanguageItem( LANGUAGE_NONE, RES_CHRATR_LANGUAGE ) );
1228             aSet.Put( SvxLanguageItem( LANGUAGE_NONE, RES_CHRATR_CJK_LANGUAGE ) );
1229             aSet.Put( SvxLanguageItem( LANGUAGE_NONE, RES_CHRATR_CTL_LANGUAGE ) );
1230         }
1231 		break;
1232 	case RES_POOLCHR_INET_VISIT:
1233 		{
1234             Color aCol( COL_RED );
1235             aSet.Put( SvxColorItem( aCol, RES_CHRATR_COLOR ) );
1236             aSet.Put( SvxUnderlineItem( UNDERLINE_SINGLE, RES_CHRATR_UNDERLINE ) );
1237             aSet.Put( SvxLanguageItem( LANGUAGE_NONE, RES_CHRATR_LANGUAGE ) );
1238             aSet.Put( SvxLanguageItem( LANGUAGE_NONE, RES_CHRATR_CJK_LANGUAGE ) );
1239             aSet.Put( SvxLanguageItem( LANGUAGE_NONE, RES_CHRATR_CTL_LANGUAGE ) );
1240         }
1241 		break;
1242 	case RES_POOLCHR_JUMPEDIT:
1243 		{
1244             Color aCol( COL_CYAN );
1245             aSet.Put( SvxColorItem( aCol, RES_CHRATR_COLOR ) );
1246             aSet.Put( SvxUnderlineItem( UNDERLINE_DOTTED, RES_CHRATR_UNDERLINE ) );
1247             aSet.Put( SvxCaseMapItem( SVX_CASEMAP_KAPITAELCHEN, RES_CHRATR_CASEMAP ) );
1248 		}
1249 		break;
1250 
1251 	case RES_POOLCHR_RUBYTEXT:
1252 		{
1253 			long nH = ((SvxFontHeightItem*)GetDfltAttr(
1254 								RES_CHRATR_CJK_FONTSIZE ))->GetHeight() / 2;
1255             SetAllScriptItem( aSet, SvxFontHeightItem( nH, 100, RES_CHRATR_FONTSIZE));
1256             aSet.Put(SvxUnderlineItem( UNDERLINE_NONE, RES_CHRATR_UNDERLINE ));
1257             aSet.Put(SvxEmphasisMarkItem( EMPHASISMARK_NONE, RES_CHRATR_EMPHASIS_MARK) );
1258 		}
1259 		break;
1260 
1261 	case RES_POOLCHR_HTML_EMPHASIS:
1262 	case RES_POOLCHR_HTML_CITIATION:
1263 	case RES_POOLCHR_HTML_VARIABLE:
1264 		{
1265             SetAllScriptItem( aSet, SvxPostureItem( ITALIC_NORMAL, RES_CHRATR_POSTURE) );
1266 		}
1267 		break;
1268 
1269 	case RES_POOLCHR_IDX_MAIN_ENTRY:
1270 	case RES_POOLCHR_HTML_STRONG:
1271 		{
1272             SetAllScriptItem( aSet, SvxWeightItem( WEIGHT_BOLD, RES_CHRATR_WEIGHT ));
1273 		}
1274 		break;
1275 
1276 	case RES_POOLCHR_HTML_CODE:
1277 	case RES_POOLCHR_HTML_SAMPLE:
1278 	case RES_POOLCHR_HTML_KEYBOARD:
1279 	case RES_POOLCHR_HTML_TELETYPE:
1280 		{
1281 			::lcl_SetDfltFont( DEFAULTFONT_FIXED, aSet );
1282 		}
1283 		break;
1284    case RES_POOLCHR_VERT_NUM:
1285             aSet.Put( SvxCharRotateItem( 900, sal_False, RES_CHRATR_ROTATE ) );
1286     break;
1287 //nichts besonderes
1288 //	case RES_POOLCHR_HTML_DEFINSTANCE:
1289 //			break;
1290 
1291 
1292 	case RES_POOLFRM_FRAME:
1293 		{
1294             if ( get(IDocumentSettingAccess::HTML_MODE) )
1295 			{
1296                 aSet.Put( SwFmtAnchor( FLY_AS_CHAR ));
1297                 aSet.Put( SwFmtVertOrient( 0, text::VertOrientation::LINE_CENTER, text::RelOrientation::PRINT_AREA ) );
1298 				aSet.Put( SwFmtSurround( SURROUND_NONE ) );
1299 			}
1300 			else
1301 			{
1302                 aSet.Put( SwFmtAnchor( FLY_AT_PARA ));
1303 				aSet.Put( SwFmtSurround( SURROUND_PARALLEL ) );
1304                 aSet.Put( SwFmtHoriOrient( 0, text::HoriOrientation::CENTER, text::RelOrientation::PRINT_AREA ) );
1305                 aSet.Put( SwFmtVertOrient( 0, text::VertOrientation::TOP, text::RelOrientation::PRINT_AREA ) );
1306 				Color aCol( COL_BLACK );
1307 				SvxBorderLine aLine( &aCol, DEF_LINE_WIDTH_0 );
1308                 SvxBoxItem aBox( RES_BOX );
1309 				aBox.SetLine( &aLine, BOX_LINE_TOP );
1310 				aBox.SetLine( &aLine, BOX_LINE_BOTTOM );
1311 				aBox.SetLine( &aLine, BOX_LINE_LEFT );
1312 				aBox.SetLine( &aLine, BOX_LINE_RIGHT );
1313 				aBox.SetDistance( 85 );
1314 				aSet.Put( aBox );
1315                 aSet.Put( SvxLRSpaceItem( 114, 114, 0, 0, RES_LR_SPACE ) );
1316                 aSet.Put( SvxULSpaceItem( 114, 114, RES_UL_SPACE ) );
1317 			}
1318 		}
1319 		break;
1320 	case RES_POOLFRM_GRAPHIC:
1321 	case RES_POOLFRM_OLE:
1322 		{
1323             aSet.Put( SwFmtAnchor( FLY_AT_PARA ));
1324             aSet.Put( SwFmtHoriOrient( 0, text::HoriOrientation::CENTER, text::RelOrientation::FRAME ));
1325             aSet.Put( SwFmtVertOrient( 0, text::VertOrientation::TOP, text::RelOrientation::FRAME ));
1326 			aSet.Put( SwFmtSurround( SURROUND_NONE ));
1327 		}
1328 		break;
1329 	case RES_POOLFRM_FORMEL:
1330 		{
1331             aSet.Put( SwFmtAnchor( FLY_AS_CHAR ) );
1332             aSet.Put( SwFmtVertOrient( 0, text::VertOrientation::CHAR_CENTER, text::RelOrientation::FRAME ) );
1333             aSet.Put( SvxLRSpaceItem( 114, 114, 0, 0, RES_LR_SPACE ) );
1334 		}
1335 		break;
1336 	case RES_POOLFRM_MARGINAL:
1337 		{
1338             aSet.Put( SwFmtAnchor( FLY_AT_PARA ));
1339             aSet.Put( SwFmtHoriOrient( 0, text::HoriOrientation::LEFT, text::RelOrientation::FRAME ));
1340             aSet.Put( SwFmtVertOrient( 0, text::VertOrientation::TOP, text::RelOrientation::FRAME ));
1341 			aSet.Put( SwFmtSurround( SURROUND_PARALLEL ));
1342 			// Breite 3.5 centimeter vorgegeben, als Hoehe nur den
1343 			// min. Wert benutzen
1344 			aSet.Put( SwFmtFrmSize( ATT_MIN_SIZE,
1345 					GetMetricVal( CM_1 ) * 3 + GetMetricVal( CM_05 ),
1346 					MM50 ));
1347 		}
1348 		break;
1349 	case RES_POOLFRM_WATERSIGN:
1350 		{
1351             aSet.Put( SwFmtAnchor( FLY_AT_PAGE ));
1352             aSet.Put( SwFmtHoriOrient( 0, text::HoriOrientation::CENTER, text::RelOrientation::FRAME ));
1353             aSet.Put( SwFmtVertOrient( 0, text::VertOrientation::CENTER, text::RelOrientation::FRAME ));
1354 			aSet.Put( SvxOpaqueItem( sal_False ));
1355 			aSet.Put( SwFmtSurround( SURROUND_THROUGHT ));
1356 		}
1357 		break;
1358 
1359 	case RES_POOLFRM_LABEL:
1360 		{
1361             aSet.Put( SwFmtAnchor( FLY_AS_CHAR ) );
1362             aSet.Put( SwFmtVertOrient( 0, text::VertOrientation::TOP, text::RelOrientation::FRAME ) );
1363             aSet.Put( SvxLRSpaceItem( 114, 114, 0, 0, RES_LR_SPACE ) );
1364 
1365             SvxProtectItem aProtect( RES_PROTECT );
1366 			aProtect.SetSizeProtect( sal_True );
1367 			aProtect.SetPosProtect( sal_True );
1368 			aSet.Put( aProtect );
1369 
1370             pNewFmt->SetAutoUpdateFmt( sal_True );
1371 		}
1372 		break;
1373 	}
1374 	if( aSet.Count() )
1375 	{
1376         {
1377             pNewFmt->SetFmtAttr( aSet );
1378 			// JP 31.08.95: erzeugen einer PoolVorlage ist keine Modifikation
1379 			//				(Bug: 18545)
1380 			// SetModified();
1381 		}
1382 	}
1383 	return pNewFmt;
1384 }
1385 
1386 SwFrmFmt* SwDoc::GetFrmFmtFromPool( sal_uInt16 nId )
1387 {
1388     return (SwFrmFmt*)GetFmtFromPool( nId );
1389 }
1390 
1391 SwCharFmt* SwDoc::GetCharFmtFromPool( sal_uInt16 nId )
1392 {
1393     return (SwCharFmt*)GetFmtFromPool( nId );
1394 }
1395 
1396     // pruefe, ob diese "Auto-Collection" in Dokument schon/noch
1397 	// benutzt wird
1398 bool SwDoc::IsPoolFmtUsed( sal_uInt16 nId ) const
1399 {
1400     SwFmt *pNewFmt = 0;
1401 	const SvPtrarr* pArray[ 2 ];
1402 	sal_uInt16 nArrCnt = 1;
1403 	sal_Bool bFnd = sal_True;
1404 
1405 	if( RES_POOLCHR_BEGIN <= nId && nId < RES_POOLCHR_END )
1406 	{
1407 		pArray[0] = pCharFmtTbl;
1408 	}
1409 	if( RES_POOLFRM_BEGIN <= nId && nId < RES_POOLFRM_END )
1410 	{
1411 		pArray[0] = pFrmFmtTbl;
1412 		pArray[1] = pSpzFrmFmtTbl;
1413 		nArrCnt = 2;
1414 	}
1415 	else
1416 	{
1417 		ASSERT( sal_False, "ungueltige Id" );
1418 		bFnd = sal_False;
1419 	}
1420 
1421 	if( bFnd )
1422 	{
1423 		bFnd = sal_False;
1424 		while( nArrCnt-- && !bFnd )
1425 			for( sal_uInt16 n = 0; !bFnd && n < (*pArray[nArrCnt]).Count(); ++n )
1426 				if( nId == ( pNewFmt = (SwFmt*)(*pArray[ nArrCnt ] )[ n ] )->
1427 						GetPoolFmtId() )
1428 					bFnd = sal_True;
1429 	}
1430 
1431 	// nicht gefunden oder keine Abhaengigen ?
1432 	if( bFnd && pNewFmt->GetDepends() )
1433 	{
1434 		// dann teste mal, ob es abhaengige ContentNodes im Nodes Array gibt
1435 		// (auch indirekte fuer Format-Ableitung! )
1436         SwAutoFmtGetDocNode aGetHt( &GetNodes() );
1437 		bFnd = !pNewFmt->GetInfo( aGetHt );
1438 	}
1439 	else
1440 		bFnd = sal_False;
1441 
1442 	return bFnd;
1443 }
1444 
1445 
1446 
1447 void lcl_GetStdPgSize( SwDoc* pDoc, SfxItemSet& rSet )
1448 {
1449 	SwPageDesc* pStdPgDsc = pDoc->GetPageDescFromPool( RES_POOLPAGE_STANDARD );
1450 	SwFmtFrmSize aFrmSz( pStdPgDsc->GetMaster().GetFrmSize() );
1451 	if( pStdPgDsc->GetLandscape() )
1452 	{
1453 		SwTwips nTmp = aFrmSz.GetHeight();
1454 		aFrmSz.SetHeight( aFrmSz.GetWidth() );
1455 		aFrmSz.SetWidth( nTmp );
1456 	}
1457 	rSet.Put( aFrmSz );
1458 }
1459 
1460 SwPageDesc* SwDoc::GetPageDescFromPool( sal_uInt16 nId, bool bRegardLanguage )
1461 {
1462 	ASSERT( RES_POOLPAGE_BEGIN <= nId && nId < RES_POOLPAGE_END,
1463 			"Falsche AutoFormat-Id" );
1464 
1465     SwPageDesc *pNewPgDsc;
1466 	sal_uInt16 n;
1467 
1468 	for( n = 0; n < aPageDescs.Count(); ++n )
1469 		if( nId == ( pNewPgDsc = aPageDescs[ n ] )->GetPoolFmtId() )
1470 		{
1471             return pNewPgDsc;
1472 		}
1473 
1474 	// Fehlerfall: unbekannte Poolvorlage
1475 	if( RES_POOLPAGE_BEGIN > nId ||  nId >= RES_POOLPAGE_END )
1476 	{
1477 		ASSERT( !this, "ungueltige Id" );
1478 		nId = RES_POOLPAGE_BEGIN;
1479 	}
1480 
1481 	ResId aResId( sal_uInt32(RC_POOLPAGEDESC_BEGIN + nId - RES_POOLPAGE_BEGIN), *pSwResMgr );
1482 	String aNm( aResId );
1483     {
1484 		sal_Bool bIsModified = IsModified();
1485 
1486         {
1487             ::sw::UndoGuard const undoGuard(GetIDocumentUndoRedo());
1488             n = MakePageDesc( aNm, 0, bRegardLanguage );
1489         }
1490 
1491 		pNewPgDsc = aPageDescs[ n ];
1492 		pNewPgDsc->SetPoolFmtId( nId );
1493 		if( !bIsModified )
1494 			ResetModified();
1495 	}
1496 
1497 
1498     SvxLRSpaceItem aLR( RES_LR_SPACE );
1499 	aLR.SetLeft( GetMetricVal( CM_1 ) * 2 );
1500 	aLR.SetRight( aLR.GetLeft() );
1501     SvxULSpaceItem aUL( RES_UL_SPACE );
1502 	aUL.SetUpper( (sal_uInt16)aLR.GetLeft() );
1503 	aUL.SetLower( (sal_uInt16)aLR.GetLeft() );
1504 
1505 	SwAttrSet aSet( GetAttrPool(), aPgFrmFmtSetRange );
1506 	sal_Bool bSetLeft = sal_True;
1507 
1508 	switch( nId )
1509 	{
1510 	case RES_POOLPAGE_STANDARD:				// Standard-Seite
1511 		{
1512 			aSet.Put( aLR );
1513 			aSet.Put( aUL );
1514 			if( pNewPgDsc )
1515 				pNewPgDsc->SetUseOn( nsUseOnPage::PD_ALL );
1516 		}
1517 		break;
1518 
1519 	case RES_POOLPAGE_FIRST:				// Erste Seite
1520 	case RES_POOLPAGE_REGISTER:				// Verzeichnis
1521 		{
1522 			lcl_GetStdPgSize( this, aSet );
1523 			aSet.Put( aLR );
1524 			aSet.Put( aUL );
1525 			if( pNewPgDsc )
1526 			{
1527 				pNewPgDsc->SetUseOn( nsUseOnPage::PD_ALL );
1528 				if( RES_POOLPAGE_FIRST == nId )
1529 					pNewPgDsc->SetFollow( GetPageDescFromPool( RES_POOLPAGE_STANDARD ));
1530 			}
1531 		}
1532 		break;
1533 
1534 	case RES_POOLPAGE_LEFT:					// Linke Seite
1535 		{
1536 			lcl_GetStdPgSize( this, aSet );
1537 			aSet.Put( aLR );
1538 			aSet.Put( aUL );
1539 			bSetLeft = sal_False;
1540 			if( pNewPgDsc )
1541 				pNewPgDsc->SetUseOn( nsUseOnPage::PD_LEFT );
1542 		}
1543 		break;
1544 	case RES_POOLPAGE_RIGHT:				// Rechte Seite
1545 		{
1546 			lcl_GetStdPgSize( this, aSet );
1547 			aSet.Put( aLR );
1548 			aSet.Put( aUL );
1549 			bSetLeft = sal_False;
1550 			if( pNewPgDsc )
1551 				pNewPgDsc->SetUseOn( nsUseOnPage::PD_RIGHT );
1552 		}
1553 		break;
1554 
1555 	case RES_POOLPAGE_JAKET:				// Umschlag
1556 		{
1557 			aLR.SetLeft( 0 ); aLR.SetRight( 0 );
1558 			aUL.SetUpper( 0 ); aUL.SetLower( 0 );
1559 			Size aPSize( SvxPaperInfo::GetPaperSize( PAPER_ENV_C65 ) );
1560 			LandscapeSwap( aPSize );
1561 			aSet.Put( SwFmtFrmSize( ATT_FIX_SIZE, aPSize.Width(), aPSize.Height() ));
1562 			aSet.Put( aLR );
1563 			aSet.Put( aUL );
1564 
1565 			if( pNewPgDsc )
1566 			{
1567 				pNewPgDsc->SetUseOn( nsUseOnPage::PD_ALL );
1568 				pNewPgDsc->SetLandscape( sal_True );
1569 			}
1570 		}
1571 		break;
1572 
1573 	case RES_POOLPAGE_HTML:				// HTML
1574 		{
1575 			lcl_GetStdPgSize( this, aSet );
1576 			aLR.SetRight( GetMetricVal( CM_1 ));
1577 			aUL.SetUpper( (sal_uInt16)aLR.GetRight() );
1578 			aUL.SetLower( (sal_uInt16)aLR.GetRight() );
1579 			aSet.Put( aLR );
1580 			aSet.Put( aUL );
1581 
1582 			if( pNewPgDsc )
1583 				pNewPgDsc->SetUseOn( nsUseOnPage::PD_ALL );
1584 		}
1585 		break;
1586 	case RES_POOLPAGE_FOOTNOTE:
1587 	case RES_POOLPAGE_ENDNOTE:
1588 		{
1589 			lcl_GetStdPgSize( this, aSet );
1590 			aSet.Put( aLR );
1591 			aSet.Put( aUL );
1592 			if( pNewPgDsc )
1593 				pNewPgDsc->SetUseOn( nsUseOnPage::PD_ALL );
1594 			SwPageFtnInfo aInf( pNewPgDsc->GetFtnInfo() );
1595 			aInf.SetLineWidth( 0 );
1596 			aInf.SetTopDist( 0 );
1597 			aInf.SetBottomDist( 0 );
1598 			pNewPgDsc->SetFtnInfo( aInf );
1599 		}
1600         break;
1601         case RES_POOLPAGE_LANDSCAPE:
1602         {
1603             SwPageDesc* pStdPgDsc = this->GetPageDescFromPool( RES_POOLPAGE_STANDARD );
1604             SwFmtFrmSize aFrmSz( pStdPgDsc->GetMaster().GetFrmSize() );
1605             SwTwips nTmp = aFrmSz.GetHeight();
1606             aFrmSz.SetHeight( aFrmSz.GetWidth() );
1607             aFrmSz.SetWidth( nTmp );
1608             aSet.Put( aFrmSz );
1609             aSet.Put( aLR );
1610             aSet.Put( aUL );
1611             if( pNewPgDsc )
1612             {
1613                 pNewPgDsc->SetUseOn( nsUseOnPage::PD_ALL );
1614                 pNewPgDsc->SetLandscape( sal_True );
1615             }
1616        }
1617        break;
1618 
1619 	}
1620 
1621 	if( aSet.Count() )
1622 	{
1623         {
1624 			if( bSetLeft )
1625                 pNewPgDsc->GetLeft().SetFmtAttr( aSet );
1626             pNewPgDsc->GetMaster().SetFmtAttr( aSet );
1627 			// JP 31.08.95: erzeugen einer PoolVorlage ist keine Modifikation
1628 			//				(Bug: 18545)
1629 			// SetModified();
1630 		}
1631 	}
1632 	return pNewPgDsc;
1633 }
1634 
1635 SwNumRule* SwDoc::GetNumRuleFromPool( sal_uInt16 nId )
1636 {
1637 	ASSERT( RES_POOLNUMRULE_BEGIN <= nId && nId < RES_POOLNUMRULE_END,
1638 			"Falsche AutoFormat-Id" );
1639 
1640     SwNumRule* pNewRule;
1641 	sal_uInt16 n;
1642 
1643 	for( n = 0; n < GetNumRuleTbl().Count(); ++n )
1644 		if( nId == ( pNewRule = GetNumRuleTbl()[ n ] )->GetPoolFmtId() )
1645 		{
1646             return pNewRule;
1647 		}
1648 
1649 	// Fehlerfall: unbekannte Poolvorlage
1650 	if( RES_POOLNUMRULE_BEGIN > nId ||  nId >= RES_POOLNUMRULE_END )
1651 	{
1652 		ASSERT( !this, "ungueltige Id" );
1653 		nId = RES_POOLNUMRULE_BEGIN;
1654 	}
1655 
1656 	ResId aResId( sal_uInt32(RC_POOLNUMRULE_BEGIN + nId - RES_POOLNUMRULE_BEGIN), *pSwResMgr );
1657 	String aNm( aResId );
1658 
1659 	SwCharFmt *pNumCFmt = 0, *pBullCFmt = 0;
1660 
1661     // --> OD 2008-02-11 #newlistlevelattrs#
1662     const SvxNumberFormat::SvxNumPositionAndSpaceMode eNumberFormatPositionAndSpaceMode
1663                                   // --> OD 2008-06-06 #i89178#
1664                                   = numfunc::GetDefaultPositionAndSpaceMode();
1665                                   // <--
1666     // <--
1667     {
1668 		sal_Bool bIsModified = IsModified();
1669         // --> OD 2008-02-11 #newlistlevelattrs#
1670         n = MakeNumRule( aNm, 0, sal_False, eNumberFormatPositionAndSpaceMode );
1671         // <--
1672 		pNewRule = GetNumRuleTbl()[ n ];
1673 		pNewRule->SetPoolFmtId( nId );
1674 		pNewRule->SetAutoRule( sal_False );
1675 
1676 		if( RES_POOLNUMRULE_NUM1 <= nId && nId <= RES_POOLNUMRULE_NUM5 )
1677 			pNumCFmt = GetCharFmtFromPool( RES_POOLCHR_NUM_LEVEL );
1678 
1679 		if( ( RES_POOLNUMRULE_BUL1 <= nId && nId <= RES_POOLNUMRULE_BUL5 ) ||
1680 			RES_POOLNUMRULE_NUM5 == nId )
1681 			pBullCFmt = GetCharFmtFromPool( RES_POOLCHR_NUM_LEVEL );
1682 
1683 		if( !bIsModified )
1684 			ResetModified();
1685 	}
1686 
1687 	switch( nId )
1688 	{
1689 	case RES_POOLNUMRULE_NUM1:
1690 		{
1691 			SwNumFmt aFmt;
1692             // --> OD 2008-02-11 #newlistlevelattrs#
1693             aFmt.SetPositionAndSpaceMode( eNumberFormatPositionAndSpaceMode );
1694             // <--
1695 			aFmt.SetNumberingType(SVX_NUM_ARABIC);
1696 			aFmt.SetCharFmt( pNumCFmt );
1697 			aFmt.SetStart( 1 );
1698 			aFmt.SetIncludeUpperLevels( 1 );
1699 			aFmt.SetSuffix( aDotStr );
1700 
1701 			static const sal_uInt16 aAbsSpace[ MAXLEVEL ] =
1702 				{
1703 //				cm: 0,5  1,0  1,5  2,0   2,5   3,0   3,5   4,0   4,5   5,0
1704 					283, 567, 850, 1134, 1417, 1701, 1984, 2268, 2551, 2835
1705 				};
1706 #ifdef USE_MEASUREMENT
1707 			static const sal_uInt16 aAbsSpaceInch[ MAXLEVEL ] =
1708 				{
1709 					283, 567, 850, 1134, 1417, 1701, 1984, 2268, 2551, 2835
1710 				};
1711 			const sal_uInt16* pArr = MEASURE_METRIC ==
1712 								SvtSysLocale().GetLocaleData().getMeasurementSystemEnum()
1713 									? aAbsSpace
1714 									: aAbsSpaceInch;
1715 #else
1716 			const sal_uInt16* pArr = aAbsSpace;
1717 #endif
1718 
1719             // --> OD 2008-02-11 #newlistlevelattrs#
1720             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1721             {
1722                 aFmt.SetFirstLineOffset( - (*pArr) );
1723             }
1724             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1725             {
1726                 aFmt.SetLabelFollowedBy( SvxNumberFormat::LISTTAB );
1727                 aFmt.SetFirstLineIndent( - (*pArr) );
1728             }
1729             // <--
1730 			for( n = 0; n < MAXLEVEL; ++n, ++pArr )
1731 			{
1732                 // --> OD 2008-02-11 #newlistlevelattrs#
1733                 if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1734                 {
1735                     aFmt.SetAbsLSpace( *pArr );
1736                 }
1737                 else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1738                 {
1739                     aFmt.SetListtabPos( *pArr );
1740                     aFmt.SetIndentAt( *pArr );
1741                 }
1742                 // <--
1743 				pNewRule->Set( n, aFmt );
1744 			}
1745 		}
1746 		break;
1747 
1748 	case RES_POOLNUMRULE_NUM2:
1749 		{
1750 			static const sal_uInt16 aAbsSpace[ MAXLEVEL ] =
1751 				{
1752 					283,  283,  567,  709,		// 0.50, 0.50, 1.00, 1.25
1753 					850, 1021, 1304, 1474,		// 1.50, 1.80, 2.30, 2.60
1754 				   1588, 1758					// 2.80, 3.10
1755 				};
1756 
1757 #ifdef USE_MEASUREMENT
1758 			static const sal_uInt16 aAbsSpaceInch[ MAXLEVEL ] =
1759 				{
1760 					385,  385,  770,  963,
1761 				   1155, 1386, 1771, 2002,
1762 				   2156, 2387
1763 				};
1764 
1765 			const sal_uInt16* pArr = MEASURE_METRIC ==
1766 								SvtSysLocale().GetLocaleData().getMeasurementSystemEnum()
1767 									? aAbsSpace
1768 									: aAbsSpaceInch;
1769 #else
1770 			const sal_uInt16* pArr = aAbsSpace;
1771 #endif
1772 			SwNumFmt aFmt;
1773             // --> OD 2008-02-11 #newlistlevelattrs#
1774             aFmt.SetPositionAndSpaceMode( eNumberFormatPositionAndSpaceMode );
1775             // <--
1776 			aFmt.SetNumberingType(SVX_NUM_ARABIC);
1777 			aFmt.SetCharFmt( pNumCFmt );
1778 			aFmt.SetIncludeUpperLevels( 1 );
1779             // --> OD 2008-02-11 #newlistlevelattrs#
1780             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1781             {
1782                 aFmt.SetLabelFollowedBy( SvxNumberFormat::LISTTAB );
1783             }
1784             // <--
1785 			sal_uInt16 nSpace = 0;
1786 			for( n = 0; n < MAXLEVEL; ++n )
1787 			{
1788                 // --> OD 2008-02-11 #newlistlevelattrs#
1789                 if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1790                 {
1791                     aFmt.SetAbsLSpace( nSpace = nSpace + pArr[ n ] );
1792                     aFmt.SetFirstLineOffset( - pArr[ n ] );
1793                 }
1794                 else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1795                 {
1796                     aFmt.SetListtabPos( nSpace = nSpace + pArr[ n ] );
1797                     aFmt.SetIndentAt( nSpace );
1798                     aFmt.SetFirstLineIndent( - pArr[ n ] );
1799                 }
1800                 // <--
1801 				aFmt.SetStart( n+1 );
1802 				pNewRule->Set( n, aFmt );
1803 			}
1804 		}
1805 		break;
1806 	case RES_POOLNUMRULE_NUM3:
1807 		{
1808 			SwNumFmt aFmt;
1809             // --> OD 2008-02-11 #newlistlevelattrs#
1810             aFmt.SetPositionAndSpaceMode( eNumberFormatPositionAndSpaceMode );
1811             // <--
1812 			aFmt.SetNumberingType(SVX_NUM_ARABIC);
1813 			aFmt.SetCharFmt( pNumCFmt );
1814 			aFmt.SetIncludeUpperLevels( 1 );
1815 
1816             sal_uInt16 nOffs = GetMetricVal( CM_1 ) * 3;
1817             // --> OD 2008-02-11 #newlistlevelattrs#
1818             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1819             {
1820                 aFmt.SetFirstLineOffset( - nOffs );
1821             }
1822             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1823             {
1824                 aFmt.SetLabelFollowedBy( SvxNumberFormat::LISTTAB );
1825                 aFmt.SetFirstLineIndent( - nOffs );
1826             }
1827             // <--
1828 
1829 			for( n = 0; n < MAXLEVEL; ++n )
1830 			{
1831                 // --> OD 2008-02-11 #newlistlevelattrs#
1832                 if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1833                 {
1834                     aFmt.SetAbsLSpace( (n+1) * nOffs );
1835                 }
1836                 else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1837                 {
1838                     aFmt.SetListtabPos( (n+1) * nOffs );
1839                     aFmt.SetIndentAt( (n+1) * nOffs );
1840                 }
1841                 // <--
1842                 aFmt.SetStart( n+1 );
1843 				pNewRule->Set( n, aFmt );
1844 			}
1845 		}
1846 		break;
1847 	case RES_POOLNUMRULE_NUM4:
1848 		{
1849 			SwNumFmt aFmt;
1850             // --> OD 2008-02-11 #newlistlevelattrs#
1851             aFmt.SetPositionAndSpaceMode( eNumberFormatPositionAndSpaceMode );
1852             // <--
1853 			aFmt.SetNumberingType(SVX_NUM_ROMAN_UPPER);
1854 			aFmt.SetCharFmt( pNumCFmt );
1855 			aFmt.SetIncludeUpperLevels( 1 );
1856 			aFmt.SetSuffix( aDotStr );
1857 
1858 			static const sal_uInt16 aAbsSpace[ MAXLEVEL ] =
1859 				{
1860 //				cm: 0,5  1,0  1,5  2,0   2,5   3,0   3,5   4,0   4,5   5,0
1861 					283, 567, 850, 1134, 1417, 1701, 1984, 2268, 2551, 2835
1862 				};
1863 #ifdef USE_MEASUREMENT
1864 			static const sal_uInt16 aAbsSpaceInch[ MAXLEVEL ] =
1865 				{
1866 					283, 567, 850, 1134, 1417, 1701, 1984, 2268, 2551, 2835
1867 				};
1868 			const sal_uInt16* pArr = MEASURE_METRIC ==
1869 								SvtSysLocale().GetLocaleData().getMeasurementSystemEnum()
1870 									? aAbsSpace
1871 									: aAbsSpaceInch;
1872 #else
1873 			const sal_uInt16* pArr = aAbsSpace;
1874 #endif
1875 
1876             // --> OD 2008-02-11 #newlistlevelattrs#
1877             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1878             {
1879                 aFmt.SetFirstLineOffset( - (*pArr) );
1880             }
1881             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1882             {
1883                 aFmt.SetLabelFollowedBy( SvxNumberFormat::SPACE );
1884                 aFmt.SetFirstLineIndent( - (*pArr) );
1885             }
1886             // <--
1887 			for( n = 0; n < MAXLEVEL; ++n, ++pArr )
1888 			{
1889 				aFmt.SetStart( n + 1 );
1890                 // --> OD 2008-02-11 #newlistlevelattrs#
1891                 if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1892                 {
1893                     aFmt.SetAbsLSpace( *pArr );
1894                 }
1895                 else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1896                 {
1897                     aFmt.SetListtabPos( *pArr );
1898                     aFmt.SetIndentAt( *pArr );
1899                 }
1900                 // <--
1901 				pNewRule->Set( n, aFmt );
1902 			}
1903 		}
1904 		break;
1905 	case RES_POOLNUMRULE_NUM5:
1906 		{
1907 			// [ First, LSpace ]
1908 			static const sal_uInt16 aAbsSpace0to2[] =
1909 				{
1910 					227,  227,  	// 0.40, 0.40,
1911 					369,  624,		// 0.65, 1.10,
1912 					255,  879 		// 0.45, 1.55
1913 				};
1914 
1915 #ifdef USE_MEASUREMENT
1916 			static const sal_uInt16 aAbsSpaceInch0to2[] =
1917 				{
1918 					308,  308,
1919 					501,  847,
1920 					347, 1194
1921 				};
1922 			const sal_uInt16* pArr0to2 = MEASURE_METRIC ==
1923 							SvtSysLocale().GetLocaleData().getMeasurementSystemEnum()
1924 								? aAbsSpace0to2
1925 								: aAbsSpaceInch0to2;
1926 #else
1927 			const sal_uInt16* pArr0to2 = aAbsSpace0to2;
1928 #endif
1929 			SwNumFmt aFmt;
1930             // --> OD 2008-02-11 #newlistlevelattrs#
1931             aFmt.SetPositionAndSpaceMode( eNumberFormatPositionAndSpaceMode );
1932             // <--
1933 			aFmt.SetNumberingType(SVX_NUM_ARABIC);
1934 			aFmt.SetStart( 1 );
1935 			aFmt.SetIncludeUpperLevels( 1 );
1936 			aFmt.SetSuffix( aDotStr );
1937             // --> OD 2008-02-11 #newlistlevelattrs#
1938             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1939             {
1940                 aFmt.SetLabelFollowedBy( SvxNumberFormat::LISTTAB );
1941             }
1942             // <--
1943 
1944             // --> OD 2008-02-11 #newlistlevelattrs#
1945             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1946             {
1947                 aFmt.SetFirstLineOffset( -pArr0to2[0] );    // == 0.40 cm
1948                 aFmt.SetAbsLSpace( pArr0to2[1] );           // == 0.40 cm
1949             }
1950             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1951             {
1952                 aFmt.SetFirstLineIndent( -pArr0to2[0] );
1953                 aFmt.SetListtabPos( pArr0to2[1] );
1954                 aFmt.SetIndentAt( pArr0to2[1] );
1955             }
1956             // <--
1957 
1958 			aFmt.SetCharFmt( pNumCFmt );
1959 			pNewRule->Set( 0, aFmt );
1960 
1961 			aFmt.SetIncludeUpperLevels( 2 );
1962 			aFmt.SetStart( 2 );
1963             // --> OD 2008-02-11 #newlistlevelattrs#
1964             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1965             {
1966                 aFmt.SetFirstLineOffset( -pArr0to2[2] );    // == 0.65 cm
1967                 aFmt.SetAbsLSpace( pArr0to2[3] );           // == 1.10 cm
1968             }
1969             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1970             {
1971                 aFmt.SetFirstLineIndent( -pArr0to2[2] );
1972                 aFmt.SetListtabPos( pArr0to2[3] );
1973                 aFmt.SetIndentAt( pArr0to2[3] );
1974             }
1975             // <--
1976 			pNewRule->Set( 1, aFmt );
1977 
1978 			aFmt.SetNumberingType(SVX_NUM_CHARS_LOWER_LETTER);
1979 			aFmt.SetSuffix( ')');
1980 			aFmt.SetIncludeUpperLevels( 1 );
1981 			aFmt.SetStart( 3 );
1982             // --> OD 2008-02-11 #newlistlevelattrs#
1983             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1984             {
1985                 aFmt.SetFirstLineOffset( - pArr0to2[4] );   // == 0.45cm
1986                 aFmt.SetAbsLSpace( pArr0to2[5] );           // == 1.55 cm
1987             }
1988             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1989             {
1990                 aFmt.SetFirstLineIndent( -pArr0to2[4] );
1991                 aFmt.SetListtabPos( pArr0to2[5] );
1992                 aFmt.SetIndentAt( pArr0to2[5] );
1993             }
1994             // <--
1995 			pNewRule->Set( 2, aFmt );
1996 
1997 
1998 			aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL);
1999 			aFmt.SetCharFmt( pBullCFmt );
2000             // --> OD 2006-06-29 #6440955#
2001             aFmt.SetBulletFont(  &numfunc::GetDefBulletFont() );
2002             // <--
2003 			aFmt.SetBulletChar( cBulletChar );
2004 			sal_uInt16 nOffs = GetMetricVal( CM_01 ) * 4,
2005 				   nOffs2 = GetMetricVal( CM_1 ) * 2;
2006 
2007             // --> OD 2008-02-11 #newlistlevelattrs#
2008             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2009             {
2010                 aFmt.SetFirstLineOffset( - nOffs );
2011             }
2012             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2013             {
2014                 aFmt.SetFirstLineIndent( - nOffs );
2015             }
2016             // <--
2017 			aFmt.SetSuffix( aEmptyStr );
2018 			for( n = 3; n < MAXLEVEL; ++n )
2019 			{
2020 				aFmt.SetStart( n+1 );
2021                 // --> OD 2008-02-11 #newlistlevelattrs#
2022                 if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2023                 {
2024                     aFmt.SetAbsLSpace( nOffs2 + ((n-3) * nOffs) );
2025                 }
2026                 else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2027                 {
2028                     aFmt.SetListtabPos( nOffs2 + ((n-3) * nOffs) );
2029                     aFmt.SetIndentAt( nOffs2 + ((n-3) * nOffs) );
2030                 }
2031                 // <--
2032 				pNewRule->Set( n, aFmt );
2033 			}
2034 		}
2035 		break;
2036 
2037 	case RES_POOLNUMRULE_BUL1:
2038 		{
2039 			SwNumFmt aFmt;
2040             // --> OD 2008-02-11 #newlistlevelattrs#
2041             aFmt.SetPositionAndSpaceMode( eNumberFormatPositionAndSpaceMode );
2042             // <--
2043 			aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL);
2044 			aFmt.SetCharFmt( pBullCFmt );
2045 			aFmt.SetStart( 1 );
2046 			aFmt.SetIncludeUpperLevels( 1 );
2047             // --> OD 2006-06-29 #6440955#
2048             aFmt.SetBulletFont( &numfunc::GetDefBulletFont() );
2049             // <--
2050             aFmt.SetBulletChar( cBulletChar );
2051 
2052 			static const sal_uInt16 aAbsSpace[ MAXLEVEL ] =
2053 				{
2054 //				cm: 0,4  0,8  1,2  1,6  2,0   2,4   2,8   3,2   3,6   4,0
2055 					227, 454, 680, 907, 1134, 1361, 1587, 1814, 2041, 2268
2056 				};
2057 #ifdef USE_MEASUREMENT
2058 			static const sal_uInt16 aAbsSpaceInch[ MAXLEVEL ] =
2059 				{
2060 					227, 454, 680, 907, 1134, 1361, 1587, 1814, 2041, 2268
2061 				};
2062 			const sal_uInt16* pArr = MEASURE_METRIC ==
2063 								SvtSysLocale().GetLocaleData().getMeasurementSystemEnum()
2064 									? aAbsSpace
2065 									: aAbsSpaceInch;
2066 #else
2067 			const sal_uInt16* pArr = aAbsSpace;
2068 #endif
2069 
2070             // --> OD 2008-02-11 #newlistlevelattrs#
2071             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2072             {
2073                 aFmt.SetFirstLineOffset( - (*pArr) );
2074             }
2075             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2076             {
2077                 aFmt.SetLabelFollowedBy( SvxNumberFormat::LISTTAB );
2078                 aFmt.SetFirstLineIndent( - (*pArr) );
2079             }
2080             // <--
2081 			for( n = 0; n < MAXLEVEL; ++n, ++pArr )
2082 			{
2083                 // --> OD 2008-02-11 #newlistlevelattrs#
2084                 if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2085                 {
2086                     aFmt.SetAbsLSpace( *pArr );
2087                 }
2088                 else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2089                 {
2090                     aFmt.SetListtabPos( *pArr );
2091                     aFmt.SetIndentAt( *pArr );
2092                 }
2093                 // <--
2094 				pNewRule->Set( n, aFmt );
2095 			}
2096 		}
2097 		break;
2098 	case RES_POOLNUMRULE_BUL2:
2099 		{
2100 			SwNumFmt aFmt;
2101             // --> OD 2008-02-11 #newlistlevelattrs#
2102             aFmt.SetPositionAndSpaceMode( eNumberFormatPositionAndSpaceMode );
2103             // <--
2104 			aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL);
2105 			aFmt.SetCharFmt( pBullCFmt );
2106 			aFmt.SetStart( 1 );
2107 			aFmt.SetIncludeUpperLevels( 1 );
2108             // --> OD 2006-06-29 #6440955#
2109             aFmt.SetBulletFont(  &numfunc::GetDefBulletFont() );
2110             // <--
2111             aFmt.SetBulletChar( 0x2013 );
2112 
2113 			static const sal_uInt16 aAbsSpace[ MAXLEVEL ] =
2114 				{
2115 //				cm: 0,3  0,6  0,9  1,2  1,5  1,8   2,1   2,4   2,7   3,0
2116 					170, 340, 510, 680, 850, 1020, 1191, 1361, 1531, 1701
2117 				};
2118 #ifdef USE_MEASUREMENT
2119 			static const sal_uInt16 aAbsSpaceInch[ MAXLEVEL ] =
2120 				{
2121 					170, 340, 510, 680, 850, 1020, 1191, 1361, 1531, 1701
2122 				};
2123 			const sal_uInt16* pArr = MEASURE_METRIC ==
2124 								SvtSysLocale().GetLocaleData().getMeasurementSystemEnum()
2125 									? aAbsSpace
2126 									: aAbsSpaceInch;
2127 #else
2128 			const sal_uInt16* pArr = aAbsSpace;
2129 #endif
2130 
2131             // --> OD 2008-02-11 #newlistlevelattrs#
2132             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2133             {
2134                 aFmt.SetFirstLineOffset( - (*pArr) );
2135             }
2136             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2137             {
2138                 aFmt.SetLabelFollowedBy( SvxNumberFormat::LISTTAB );
2139                 aFmt.SetFirstLineIndent( - (*pArr) );
2140             }
2141             // <--
2142 			for( n = 0; n < MAXLEVEL; ++n, ++pArr )
2143 			{
2144                 // --> OD 2008-02-11 #newlistlevelattrs#
2145                 if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2146                 {
2147                     aFmt.SetAbsLSpace( *pArr );
2148                 }
2149                 else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2150                 {
2151                     aFmt.SetListtabPos( *pArr );
2152                     aFmt.SetIndentAt( *pArr );
2153                 }
2154                 // <--
2155                 pNewRule->Set( n, aFmt );
2156 			}
2157 		}
2158 		break;
2159 	case RES_POOLNUMRULE_BUL3:
2160 		{
2161 			SwNumFmt aFmt;
2162             // --> OD 2008-02-11 #newlistlevelattrs#
2163             aFmt.SetPositionAndSpaceMode( eNumberFormatPositionAndSpaceMode );
2164             // <--
2165 			aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL);
2166 			aFmt.SetCharFmt( pBullCFmt );
2167 			aFmt.SetStart( 1 );
2168 			aFmt.SetIncludeUpperLevels( 1 );
2169             // --> OD 2006-06-29 #6440955#
2170             aFmt.SetBulletFont(  &numfunc::GetDefBulletFont() );
2171             // <--
2172 
2173             sal_uInt16 nOffs = GetMetricVal( CM_01 ) * 4;
2174             // --> OD 2008-02-11 #newlistlevelattrs#
2175             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2176             {
2177                 aFmt.SetFirstLineOffset( - nOffs );
2178             }
2179             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2180             {
2181                 aFmt.SetLabelFollowedBy( SvxNumberFormat::LISTTAB );
2182                 aFmt.SetFirstLineIndent( - nOffs );
2183             }
2184             // <--
2185 
2186 			for( n = 0; n < MAXLEVEL; ++n )
2187 			{
2188 				aFmt.SetBulletChar( ( n & 1 ? 0x25a1 : 0x2611 ) );
2189                 // --> OD 2008-02-11 #newlistlevelattrs#
2190                 if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2191                 {
2192                     aFmt.SetAbsLSpace( ((n & 1) +1) * nOffs );
2193                 }
2194                 else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2195                 {
2196                     aFmt.SetListtabPos( ((n & 1) +1) * nOffs );
2197                     aFmt.SetIndentAt( ((n & 1) +1) * nOffs );
2198                 }
2199                 // <--
2200 				pNewRule->Set( n, aFmt );
2201 			}
2202 		}
2203 		break;
2204 	case RES_POOLNUMRULE_BUL4:
2205 		{
2206 			SwNumFmt aFmt;
2207             // --> OD 2008-02-11 #newlistlevelattrs#
2208             aFmt.SetPositionAndSpaceMode( eNumberFormatPositionAndSpaceMode );
2209             // <--
2210 			aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL);
2211 			aFmt.SetCharFmt( pBullCFmt );
2212 			aFmt.SetStart( 1 );
2213 			aFmt.SetIncludeUpperLevels( 1 );
2214             // --> OD 2006-06-29 #6440955#
2215             aFmt.SetBulletFont(  &numfunc::GetDefBulletFont() );
2216             // <--
2217 
2218 			static const sal_uInt16 aAbsSpace[ MAXLEVEL ] =
2219 				{
2220 //				cm: 0,4  0,8  1,2  1,6  2,0   2,4   2,8   3,2   3,6   4,0
2221 					227, 454, 680, 907, 1134, 1361, 1587, 1814, 2041, 2268
2222 				};
2223 #ifdef USE_MEASUREMENT
2224 			static const sal_uInt16 aAbsSpaceInch[ MAXLEVEL ] =
2225 				{
2226 					227, 454, 680, 907, 1134, 1361, 1587, 1814, 2041, 2268
2227 				};
2228 			const sal_uInt16* pArr = MEASURE_METRIC ==
2229 								SvtSysLocale().GetLocaleData().getMeasurementSystemEnum()
2230 									? aAbsSpace
2231 									: aAbsSpaceInch;
2232 #else
2233 			const sal_uInt16* pArr = aAbsSpace;
2234 #endif
2235 
2236             // --> OD 2008-02-11 #newlistlevelattrs#
2237             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2238             {
2239                 aFmt.SetFirstLineOffset( - (*pArr) );
2240             }
2241             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2242             {
2243                 aFmt.SetLabelFollowedBy( SvxNumberFormat::SPACE );
2244                 aFmt.SetFirstLineIndent( - (*pArr) );
2245             }
2246             // <--
2247 			for( n = 0; n < MAXLEVEL; ++n, ++pArr )
2248 			{
2249 				switch( n )
2250 				{
2251 				case 0: 	aFmt.SetBulletChar( 0x27a2 );	break;
2252 				case 1:		aFmt.SetBulletChar( 0xE006 );	break;
2253 				default:	aFmt.SetBulletChar( 0xE004 );	break;
2254 				}
2255                 // --> OD 2008-02-11 #newlistlevelattrs#
2256                 if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2257                 {
2258                     aFmt.SetAbsLSpace( *pArr );
2259                 }
2260                 else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2261                 {
2262                     aFmt.SetListtabPos( *pArr );
2263                     aFmt.SetIndentAt( *pArr );
2264                 }
2265                 // <--
2266 				pNewRule->Set( n, aFmt );
2267 			}
2268 		}
2269 		break;
2270 	case RES_POOLNUMRULE_BUL5:
2271 		{
2272 			SwNumFmt aFmt;
2273             // --> OD 2008-02-11 #newlistlevelattrs#
2274             aFmt.SetPositionAndSpaceMode( eNumberFormatPositionAndSpaceMode );
2275             // <--
2276 			aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL);
2277 			aFmt.SetCharFmt( pBullCFmt );
2278 			aFmt.SetStart( 1 );
2279 			aFmt.SetIncludeUpperLevels( 1 );
2280 			aFmt.SetBulletChar( 0x2717 );
2281             // --> OD 2006-06-29 #6440955#
2282             aFmt.SetBulletFont( &numfunc::GetDefBulletFont() );
2283             // <--
2284 
2285 			static const sal_uInt16 aAbsSpace[ MAXLEVEL ] =
2286 				{
2287 //				cm: 0,4  0,8  1,2  1,6  2,0   2,4   2,8   3,2   3,6   4,0
2288 					227, 454, 680, 907, 1134, 1361, 1587, 1814, 2041, 2268
2289 				};
2290 #ifdef USE_MEASUREMENT
2291 			static const sal_uInt16 aAbsSpaceInch[ MAXLEVEL ] =
2292 				{
2293 					227, 454, 680, 907, 1134, 1361, 1587, 1814, 2041, 2268
2294 				};
2295 			const sal_uInt16* pArr = MEASURE_METRIC ==
2296 								SvtSysLocale().GetLocaleData().getMeasurementSystemEnum()
2297 									? aAbsSpace
2298 									: aAbsSpaceInch;
2299 #else
2300 			const sal_uInt16* pArr = aAbsSpace;
2301 #endif
2302 
2303             // --> OD 2008-02-11 #newlistlevelattrs#
2304             if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2305             {
2306                 aFmt.SetFirstLineOffset( - (*pArr) );
2307             }
2308             else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2309             {
2310                 aFmt.SetLabelFollowedBy( SvxNumberFormat::LISTTAB );
2311                 aFmt.SetFirstLineIndent( - (*pArr) );
2312             }
2313             // <--
2314 			for( n = 0; n < MAXLEVEL; ++n, ++pArr )
2315 			{
2316                 // --> OD 2008-02-11 #newlistlevelattrs#
2317                 if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
2318                 {
2319                     aFmt.SetAbsLSpace( *pArr );
2320                 }
2321                 else if ( eNumberFormatPositionAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
2322                 {
2323                     aFmt.SetListtabPos( *pArr );
2324                     aFmt.SetIndentAt( *pArr );
2325                 }
2326                 // <--
2327 				pNewRule->Set( n, aFmt );
2328 			}
2329 		}
2330 		break;
2331 	}
2332 
2333     return pNewRule;
2334 }
2335 
2336 
2337 
2338 	// pruefe, ob diese "Auto-Collection" in Dokument schon/noch
2339 	// benutzt wird
2340 bool SwDoc::IsPoolPageDescUsed( sal_uInt16 nId ) const
2341 {
2342 	ASSERT( RES_POOLPAGE_BEGIN <= nId && nId < RES_POOLPAGE_END,
2343 			"Falsche AutoFormat-Id" );
2344 	SwPageDesc *pNewPgDsc = 0;
2345 	sal_Bool bFnd = sal_False;
2346 	for( sal_uInt16 n = 0; !bFnd && n < aPageDescs.Count(); ++n )
2347     {
2348 		pNewPgDsc = aPageDescs[ n ];
2349 		if( nId == pNewPgDsc->GetPoolFmtId() )
2350 			bFnd = sal_True;
2351     }
2352 
2353 	// nicht gefunden oder keine Abhaengigen ?
2354 	if( !bFnd || !pNewPgDsc->GetDepends() )		// ??????
2355 		return sal_False;
2356 
2357 	// dann teste mal, ob es abhaengige ContentNodes im Nodes Array gibt
2358 	// (auch indirekte fuer Format-Ableitung! )
2359     SwAutoFmtGetDocNode aGetHt( &GetNodes() );
2360 	return !pNewPgDsc->GetInfo( aGetHt );
2361 }
2362 
2363 // erfrage ob die Absatz-/Zeichen-/Rahmen-/Seiten - Vorlage benutzt wird
2364 sal_Bool SwDoc::IsUsed( const SwModify& rModify ) const
2365 {
2366 	// dann teste mal, ob es abhaengige ContentNodes im Nodes Array gibt
2367 	// (auch indirekte fuer Format-Ableitung! )
2368     SwAutoFmtGetDocNode aGetHt( &GetNodes() );
2369 	return !rModify.GetInfo( aGetHt );
2370 }
2371 
2372 // erfrage ob die NumRule benutzt wird
2373 sal_Bool SwDoc::IsUsed( const SwNumRule& rRule ) const
2374 {
2375     // --> OD 2008-03-04 #refactorlists#
2376 //    // dann teste mal, ob es abhaengige ContentNodes im Nodes Array gibt
2377 //    // (auch indirekte fuer Format-Ableitung! )
2378 //    sal_Bool bUsed = sal_False;
2379 //    SwAutoFmtGetDocNode aGetHt( &aNodes );
2380 //    SwModify* pMod;
2381 //    const SfxPoolItem* pItem;
2382 //    sal_uInt16 i, nMaxItems = GetAttrPool().GetItemCount( RES_PARATR_NUMRULE);
2383 //    for( i = 0; i < nMaxItems; ++i )
2384 //    {
2385 //        if( 0 != (pItem = GetAttrPool().GetItem( RES_PARATR_NUMRULE, i ) ) &&
2386 //            0 != ( pMod = (SwModify*)((SwNumRuleItem*)pItem)->GetDefinedIn()) &&
2387 //            ((SwNumRuleItem*)pItem)->GetValue().Len() &&
2388 //            ((SwNumRuleItem*)pItem)->GetValue() == rRule.GetName() )
2389 //        {
2390 //            if( pMod->IsA( TYPE( SwFmt )) )
2391 //            {
2392 //                bUsed = !pMod->GetInfo( aGetHt );
2393 //                if( bUsed )
2394 //                    break;
2395 //            }
2396 //            else if( ((SwTxtNode*)pMod)->GetNodes().IsDocNodes() )
2397 //            {
2398 //                bUsed = sal_True;
2399 //                break;
2400 //            }
2401 //        }
2402 //    }
2403 
2404 //    return bUsed;
2405     sal_Bool bUsed = rRule.GetTxtNodeListSize() > 0 ||
2406                      rRule.GetParagraphStyleListSize() > 0;
2407 
2408     return bUsed;
2409     // <--
2410 }
2411 
2412 	// Suche die Position vom Vorlagen-Namen. Ist nicht vorhanden
2413 	// dann fuege neu ein
2414 sal_uInt16 SwDoc::SetDocPattern( const String& rPatternName )
2415 {
2416 	ASSERT( rPatternName.Len(), "kein Dokument-Vorlagenname" );
2417 
2418 	sal_uInt16 nNewPos = aPatternNms.Count();
2419 	for( sal_uInt16 n = 0; n < aPatternNms.Count(); ++n )
2420 		if( !aPatternNms[n] )
2421 		{
2422 			if( nNewPos == aPatternNms.Count() )
2423 				nNewPos = n;
2424 		}
2425 		else if( rPatternName == *aPatternNms[n] )
2426 			return n;
2427 
2428 	if( nNewPos < aPatternNms.Count() )
2429 		aPatternNms.Remove( nNewPos );		// Platz wieder frei machen
2430 
2431 	String* pNewNm = new String( rPatternName );
2432 	aPatternNms.Insert( pNewNm, nNewPos );
2433 	SetModified();
2434 	return nNewPos;
2435 }
2436 
2437 sal_uInt16 GetPoolParent( sal_uInt16 nId )
2438 {
2439 	sal_uInt16 nRet = USHRT_MAX;
2440 	if( POOLGRP_NOCOLLID & nId )		// 1 == Formate / 0 == Collections
2441 	{
2442 		switch( ( COLL_GET_RANGE_BITS | POOLGRP_NOCOLLID ) & nId )
2443 		{
2444 		case POOLGRP_CHARFMT:
2445 		case POOLGRP_FRAMEFMT:
2446 			nRet = 0; 			// vom default abgeleitet
2447 			break;
2448 		case POOLGRP_PAGEDESC:
2449 		case POOLGRP_NUMRULE:
2450 			break;				// es gibt keine Ableitung
2451 		}
2452 	}
2453 	else
2454 	{
2455 		switch( COLL_GET_RANGE_BITS & nId )
2456 		{
2457 		case COLL_TEXT_BITS:
2458 			switch( nId )
2459 			{
2460 			case RES_POOLCOLL_STANDARD:
2461 					nRet = 0;									break;
2462 			case RES_POOLCOLL_TEXT_IDENT:
2463 			case RES_POOLCOLL_TEXT_NEGIDENT:
2464 			case RES_POOLCOLL_TEXT_MOVE:
2465 			case RES_POOLCOLL_CONFRONTATION:
2466 			case RES_POOLCOLL_MARGINAL:
2467 					nRet = RES_POOLCOLL_TEXT;					break;
2468 
2469 			case RES_POOLCOLL_TEXT:
2470 			case RES_POOLCOLL_GREETING:
2471 			case RES_POOLCOLL_SIGNATURE:
2472 			case RES_POOLCOLL_HEADLINE_BASE:
2473 					nRet = RES_POOLCOLL_STANDARD;				break;
2474 
2475 			case RES_POOLCOLL_HEADLINE1:
2476 			case RES_POOLCOLL_HEADLINE2:
2477 			case RES_POOLCOLL_HEADLINE3:
2478 			case RES_POOLCOLL_HEADLINE4:
2479 			case RES_POOLCOLL_HEADLINE5:
2480 			case RES_POOLCOLL_HEADLINE6:
2481 			case RES_POOLCOLL_HEADLINE7:
2482 			case RES_POOLCOLL_HEADLINE8:
2483 			case RES_POOLCOLL_HEADLINE9:
2484 			case RES_POOLCOLL_HEADLINE10:
2485 					nRet = RES_POOLCOLL_HEADLINE_BASE; 			break;
2486 			}
2487 			break;
2488 
2489 		case COLL_LISTS_BITS:
2490 			switch( nId )
2491 			{
2492 			case RES_POOLCOLL_NUMBUL_BASE:
2493 					nRet = RES_POOLCOLL_TEXT;					break;
2494 
2495 			default:
2496 				nRet = RES_POOLCOLL_NUMBUL_BASE;				break;
2497 			}
2498 			break;
2499 
2500 		case COLL_EXTRA_BITS:
2501 			switch( nId )
2502 			{
2503 			case RES_POOLCOLL_FRAME:
2504 					nRet = RES_POOLCOLL_TEXT;					break;
2505 
2506 			case RES_POOLCOLL_TABLE_HDLN:
2507 					nRet = RES_POOLCOLL_TABLE;					break;
2508 
2509             case RES_POOLCOLL_TABLE:
2510 			case RES_POOLCOLL_FOOTNOTE:
2511 			case RES_POOLCOLL_ENDNOTE:
2512 			case RES_POOLCOLL_JAKETADRESS:
2513 			case RES_POOLCOLL_SENDADRESS:
2514 			case RES_POOLCOLL_HEADER:
2515 			case RES_POOLCOLL_HEADERL:
2516 			case RES_POOLCOLL_HEADERR:
2517 			case RES_POOLCOLL_FOOTER:
2518 			case RES_POOLCOLL_FOOTERL:
2519 			case RES_POOLCOLL_FOOTERR:
2520 			case RES_POOLCOLL_LABEL:
2521 					nRet = RES_POOLCOLL_STANDARD;				break;
2522 
2523 			case RES_POOLCOLL_LABEL_ABB:
2524 			case RES_POOLCOLL_LABEL_TABLE:
2525 			case RES_POOLCOLL_LABEL_FRAME:
2526 			case RES_POOLCOLL_LABEL_DRAWING:
2527 					nRet = RES_POOLCOLL_LABEL;					break;
2528 			}
2529 			break;
2530 
2531 		case COLL_REGISTER_BITS:
2532 			switch( nId )
2533 			{
2534 			case RES_POOLCOLL_REGISTER_BASE:
2535 					nRet = RES_POOLCOLL_STANDARD;				break;
2536 
2537 			case RES_POOLCOLL_TOX_USERH:
2538 			case RES_POOLCOLL_TOX_CNTNTH:
2539 			case RES_POOLCOLL_TOX_IDXH:
2540 			case RES_POOLCOLL_TOX_ILLUSH:
2541 			case RES_POOLCOLL_TOX_OBJECTH:
2542 			case RES_POOLCOLL_TOX_TABLESH:
2543 			case RES_POOLCOLL_TOX_AUTHORITIESH:
2544 					nRet = RES_POOLCOLL_HEADLINE_BASE;  		break;
2545 
2546 			default:
2547 					nRet = RES_POOLCOLL_REGISTER_BASE;  		break;
2548 			}
2549 			break;
2550 
2551 		case COLL_DOC_BITS:
2552 			nRet = RES_POOLCOLL_HEADLINE_BASE;
2553 			break;
2554 
2555 		case COLL_HTML_BITS:
2556 			nRet = RES_POOLCOLL_STANDARD;
2557 			break;
2558 		}
2559 	}
2560 
2561 	return nRet;
2562 }
2563 
2564 void SwDoc::RemoveAllFmtLanguageDependencies()
2565 {
2566     /* #106748# Restore the language independ pool defaults and styles. */
2567     GetAttrPool().ResetPoolDefaultItem( RES_PARATR_ADJUST );
2568 
2569 	SwTxtFmtColl * pTxtFmtColl = GetTxtCollFromPool( RES_POOLCOLL_STANDARD );
2570 
2571     pTxtFmtColl->ResetFmtAttr( RES_PARATR_ADJUST );
2572     /* #111214# koreans do not like SvxScriptItem(sal_True) */
2573     pTxtFmtColl->ResetFmtAttr( RES_PARATR_SCRIPTSPACE );
2574 
2575     SvxFrameDirectionItem aFrameDir( FRMDIR_HORI_LEFT_TOP, RES_FRAMEDIR );
2576 
2577 	sal_uInt16 nCount = GetPageDescCnt();
2578 	for( sal_uInt16 i=0; i<nCount; ++i )
2579 	{
2580 		SwPageDesc& rDesc = _GetPageDesc( i );
2581         rDesc.GetMaster().SetFmtAttr( aFrameDir );
2582         rDesc.GetLeft().SetFmtAttr( aFrameDir );
2583 	}
2584 
2585     // OD 09.10.2003 #i18732# - restore static pool default for item
2586     // RES_FOLLOW_TEXT_FLOW.
2587     GetAttrPool().ResetPoolDefaultItem( RES_FOLLOW_TEXT_FLOW );
2588 
2589     //#i16874# AutoKerning as default for new documents
2590 	GetAttrPool().ResetPoolDefaultItem( RES_CHRATR_AUTOKERN );
2591 }
2592