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