xref: /aoo4110/main/xmloff/source/style/xmlnume.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_xmloff.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/style/NumberingType.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/style/XStyle.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameContainer.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexReplace.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XBitmap.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontDescriptor.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/text/HoriOrientation.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/text/VertOrientation.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XChapterNumberingSupplier.hpp>
37*b1cdbd2cSJim Jagielski // --> OD 2008-01-16 #newlistlevelattrs#
38*b1cdbd2cSJim Jagielski #include <com/sun/star/text/PositionAndSpaceMode.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/text/LabelFollow.hpp>
40*b1cdbd2cSJim Jagielski // <--
41*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski #include <xmloff/nmspmap.hxx>
49*b1cdbd2cSJim Jagielski #include "xmloff/xmlnmspe.hxx"
50*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
51*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
52*b1cdbd2cSJim Jagielski #include "fonthdl.hxx"
53*b1cdbd2cSJim Jagielski #include "xmloff/XMLTextListAutoStylePool.hxx"
54*b1cdbd2cSJim Jagielski #include <xmloff/xmlnume.hxx>
55*b1cdbd2cSJim Jagielski #include <xmloff/xmlexp.hxx>
56*b1cdbd2cSJim Jagielski #include <tools/fontenum.hxx>
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski using ::rtl::OUString;
60*b1cdbd2cSJim Jagielski using ::rtl::OUStringBuffer;
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
63*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
64*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::style;
65*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::text;
66*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
67*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
68*b1cdbd2cSJim Jagielski using namespace ::xmloff::token;
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_SYMBOL_TEXT_DISTANCE[] = "SymbolTextDistance";
71*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_PARENT_NUMBERING[] = "ParentNumbering";
72*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_CHAR_STYLE_NAME[] = "CharStyleName";
73*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_BULLET_CHAR[] = "BulletChar";
74*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_BULLET_RELSIZE[] = "BulletRelSize";
75*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_BULLET_COLOR[] = "BulletColor";
76*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_GRAPHIC_BITMAP[] = "GraphicBitmap";
77*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_GRAPHIC_SIZE[] = "GraphicSize";
78*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_VERT_ORIENT[] = "VertOrient";
79*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_NUMBERINGTYPE[] = "NumberingType";
80*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_HEADING_STYLE_NAME[] = "HeadingStyleName";
81*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_PREFIX[] = "Prefix";
82*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_SUFFIX[] = "Suffix";
83*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_ADJUST[] = "Adjust";
84*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_LEFT_MARGIN[] = "LeftMargin";
85*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_FIRST_LINE_OFFSET[] = "FirstLineOffset";
86*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_BULLET_FONT[] = "BulletFont";
87*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_GRAPHICURL[] = "GraphicURL";
88*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_START_WITH[] = "StartWith";
89*b1cdbd2cSJim Jagielski // --> OD 2008-01-15 #newlistlevelattrs#
90*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_POSITION_AND_SPACE_MODE[] = "PositionAndSpaceMode";
91*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_LABEL_FOLLOWED_BY[] = "LabelFollowedBy";
92*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_LISTTAB_STOP_POSITION[] = "ListtabStopPosition";
93*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_FIRST_LINE_INDENT[] = "FirstLineIndent";
94*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_INDENT_AT[] = "IndentAt";
95*b1cdbd2cSJim Jagielski // <--
96*b1cdbd2cSJim Jagielski 
exportLevelStyles(const uno::Reference<::com::sun::star::container::XIndexReplace> & xNumRule,sal_Bool bOutline)97*b1cdbd2cSJim Jagielski void SvxXMLNumRuleExport::exportLevelStyles( const uno::Reference< ::com::sun::star::container::XIndexReplace > & xNumRule,
98*b1cdbd2cSJim Jagielski 											 sal_Bool bOutline )
99*b1cdbd2cSJim Jagielski {
100*b1cdbd2cSJim Jagielski 	sal_Int32 nCount = xNumRule ->getCount();
101*b1cdbd2cSJim Jagielski 	for( sal_Int32 i=0; i<nCount; i++ )
102*b1cdbd2cSJim Jagielski 	{
103*b1cdbd2cSJim Jagielski 		uno::Any aEntry( xNumRule->getByIndex( i ) );
104*b1cdbd2cSJim Jagielski 		uno::Sequence<beans::PropertyValue> aSeq;
105*b1cdbd2cSJim Jagielski 		if( aEntry >>= aSeq )
106*b1cdbd2cSJim Jagielski 		{
107*b1cdbd2cSJim Jagielski 			exportLevelStyle( i, aSeq, bOutline );
108*b1cdbd2cSJim Jagielski 		}
109*b1cdbd2cSJim Jagielski 	}
110*b1cdbd2cSJim Jagielski }
111*b1cdbd2cSJim Jagielski 
exportLevelStyle(sal_Int32 nLevel,const uno::Sequence<beans::PropertyValue> & rProps,sal_Bool bOutline)112*b1cdbd2cSJim Jagielski void SvxXMLNumRuleExport::exportLevelStyle( sal_Int32 nLevel,
113*b1cdbd2cSJim Jagielski 									const uno::Sequence<beans::PropertyValue>& rProps,
114*b1cdbd2cSJim Jagielski 									sal_Bool bOutline )
115*b1cdbd2cSJim Jagielski {
116*b1cdbd2cSJim Jagielski 	sal_Int16 eType = NumberingType::CHAR_SPECIAL;
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski 	sal_Int16 eAdjust = HoriOrientation::LEFT;
119*b1cdbd2cSJim Jagielski 	OUString sPrefix, sSuffix;
120*b1cdbd2cSJim Jagielski 	OUString sTextStyleName;
121*b1cdbd2cSJim Jagielski 	sal_Bool bHasColor = sal_False;
122*b1cdbd2cSJim Jagielski 	sal_Int32 nColor = 0;
123*b1cdbd2cSJim Jagielski 	sal_Int32 nSpaceBefore = 0, nMinLabelWidth = 0, nMinLabelDist = 0;
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 	sal_Int16 nStartValue = 1, nDisplayLevels = 1, nBullRelSize = 0;
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 	sal_Unicode cBullet = 0xf095;
128*b1cdbd2cSJim Jagielski 	OUString sBulletFontName, sBulletFontStyleName ;
129*b1cdbd2cSJim Jagielski 	sal_Int16 eBulletFontFamily = FAMILY_DONTKNOW;
130*b1cdbd2cSJim Jagielski 	sal_Int16 eBulletFontPitch = PITCH_DONTKNOW;
131*b1cdbd2cSJim Jagielski 	rtl_TextEncoding eBulletFontEncoding = RTL_TEXTENCODING_DONTKNOW;
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski 	OUString sImageURL;
134*b1cdbd2cSJim Jagielski 	uno::Reference< ::com::sun::star::awt::XBitmap >  xBitmap;
135*b1cdbd2cSJim Jagielski 	sal_Int32 nImageWidth = 0, nImageHeight = 0;
136*b1cdbd2cSJim Jagielski 	sal_Int16 eImageVertOrient = VertOrientation::LINE_CENTER;
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski     // --> OD 2008-01-15 #newlistlevelattrs#
139*b1cdbd2cSJim Jagielski     sal_Int16 ePosAndSpaceMode = PositionAndSpaceMode::LABEL_WIDTH_AND_POSITION;
140*b1cdbd2cSJim Jagielski     sal_Int16 eLabelFollowedBy = LabelFollow::LISTTAB;
141*b1cdbd2cSJim Jagielski     sal_Int32 nListtabStopPosition( 0 );
142*b1cdbd2cSJim Jagielski     sal_Int32 nFirstLineIndent( 0 );
143*b1cdbd2cSJim Jagielski     sal_Int32 nIndentAt( 0 );
144*b1cdbd2cSJim Jagielski     // <--
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski     const sal_Int32 nCount = rProps.getLength();
147*b1cdbd2cSJim Jagielski 	const beans::PropertyValue* pPropArray = rProps.getConstArray();
148*b1cdbd2cSJim Jagielski 	for( sal_Int32 i=0; i<nCount; i++ )
149*b1cdbd2cSJim Jagielski 	{
150*b1cdbd2cSJim Jagielski 		const beans::PropertyValue& rProp = pPropArray[i];
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski 		if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_NUMBERINGTYPE, sizeof(XML_UNO_NAME_NRULE_NUMBERINGTYPE)-1 ) )
153*b1cdbd2cSJim Jagielski 		{
154*b1cdbd2cSJim Jagielski 			rProp.Value >>= eType;
155*b1cdbd2cSJim Jagielski 		}
156*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_PREFIX, sizeof(XML_UNO_NAME_NRULE_PREFIX)-1 ) )
157*b1cdbd2cSJim Jagielski 		{
158*b1cdbd2cSJim Jagielski 			rProp.Value >>= sPrefix;
159*b1cdbd2cSJim Jagielski 		}
160*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_SUFFIX, sizeof(XML_UNO_NAME_NRULE_SUFFIX)-1 ) )
161*b1cdbd2cSJim Jagielski 		{
162*b1cdbd2cSJim Jagielski 			rProp.Value >>= sSuffix;
163*b1cdbd2cSJim Jagielski 		}
164*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_BULLET_CHAR, sizeof(XML_UNO_NAME_NRULE_BULLET_CHAR)-1 ) )
165*b1cdbd2cSJim Jagielski 		{
166*b1cdbd2cSJim Jagielski 			OUString sValue;
167*b1cdbd2cSJim Jagielski 			rProp.Value >>= sValue;
168*b1cdbd2cSJim Jagielski 			if( sValue.getLength() > 0 )
169*b1cdbd2cSJim Jagielski 			{
170*b1cdbd2cSJim Jagielski 				cBullet = (sal_Unicode)sValue[0];
171*b1cdbd2cSJim Jagielski 			}
172*b1cdbd2cSJim Jagielski 		}
173*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_BULLET_RELSIZE, sizeof(XML_UNO_NAME_NRULE_BULLET_RELSIZE)-1 ) )
174*b1cdbd2cSJim Jagielski 		{
175*b1cdbd2cSJim Jagielski 			rProp.Value >>= nBullRelSize;
176*b1cdbd2cSJim Jagielski 		}
177*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_ADJUST, sizeof(XML_UNO_NAME_NRULE_ADJUST)-1 ) )
178*b1cdbd2cSJim Jagielski 		{
179*b1cdbd2cSJim Jagielski 			sal_Int16 nValue = 0;
180*b1cdbd2cSJim Jagielski 			rProp.Value >>= nValue;
181*b1cdbd2cSJim Jagielski 			eAdjust = nValue;
182*b1cdbd2cSJim Jagielski 		}
183*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_BULLET_FONT, sizeof(XML_UNO_NAME_NRULE_BULLET_FONT)-1 ) )
184*b1cdbd2cSJim Jagielski 		{
185*b1cdbd2cSJim Jagielski 			awt::FontDescriptor rFDesc;
186*b1cdbd2cSJim Jagielski 			if( rProp.Value >>= rFDesc )
187*b1cdbd2cSJim Jagielski 			{
188*b1cdbd2cSJim Jagielski 				sBulletFontName = rFDesc.Name;
189*b1cdbd2cSJim Jagielski 				sBulletFontStyleName = rFDesc.StyleName;
190*b1cdbd2cSJim Jagielski 				eBulletFontFamily = (sal_Int16)rFDesc.Family;
191*b1cdbd2cSJim Jagielski 				eBulletFontPitch = (sal_Int16)rFDesc.Pitch;
192*b1cdbd2cSJim Jagielski 				eBulletFontEncoding = (rtl_TextEncoding)rFDesc.CharSet;
193*b1cdbd2cSJim Jagielski 			}
194*b1cdbd2cSJim Jagielski 		}
195*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_GRAPHICURL, sizeof(XML_UNO_NAME_NRULE_GRAPHICURL)-1 ) )
196*b1cdbd2cSJim Jagielski 		{
197*b1cdbd2cSJim Jagielski 			rProp.Value >>= sImageURL;
198*b1cdbd2cSJim Jagielski 		}
199*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_GRAPHIC_BITMAP, sizeof(XML_UNO_NAME_NRULE_GRAPHIC_BITMAP)-1 ) )
200*b1cdbd2cSJim Jagielski 		{
201*b1cdbd2cSJim Jagielski 			rProp.Value >>= xBitmap;
202*b1cdbd2cSJim Jagielski 		}
203*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_BULLET_COLOR, sizeof(XML_UNO_NAME_NRULE_BULLET_COLOR)-1 ) )
204*b1cdbd2cSJim Jagielski 		{
205*b1cdbd2cSJim Jagielski 			rProp.Value >>= nColor;
206*b1cdbd2cSJim Jagielski 			bHasColor = sal_True;
207*b1cdbd2cSJim Jagielski 		}
208*b1cdbd2cSJim Jagielski 		else  if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_START_WITH, sizeof(XML_UNO_NAME_NRULE_START_WITH)-1 ) )
209*b1cdbd2cSJim Jagielski 		{
210*b1cdbd2cSJim Jagielski 			rProp.Value >>= nStartValue;
211*b1cdbd2cSJim Jagielski 		}
212*b1cdbd2cSJim Jagielski 		else  if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_LEFT_MARGIN, sizeof(XML_UNO_NAME_NRULE_LEFT_MARGIN)-1 ) )
213*b1cdbd2cSJim Jagielski 		{
214*b1cdbd2cSJim Jagielski 			rProp.Value >>= nSpaceBefore;
215*b1cdbd2cSJim Jagielski 		}
216*b1cdbd2cSJim Jagielski 		else  if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_FIRST_LINE_OFFSET, sizeof(XML_UNO_NAME_NRULE_FIRST_LINE_OFFSET)-1 ) )
217*b1cdbd2cSJim Jagielski 		{
218*b1cdbd2cSJim Jagielski 			rProp.Value >>= nMinLabelWidth;
219*b1cdbd2cSJim Jagielski 		}
220*b1cdbd2cSJim Jagielski 		else  if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_SYMBOL_TEXT_DISTANCE, sizeof(XML_UNO_NAME_NRULE_SYMBOL_TEXT_DISTANCE)-1 ) )
221*b1cdbd2cSJim Jagielski 		{
222*b1cdbd2cSJim Jagielski 			rProp.Value >>= nMinLabelDist;
223*b1cdbd2cSJim Jagielski 		}
224*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_PARENT_NUMBERING, sizeof(XML_UNO_NAME_NRULE_PARENT_NUMBERING)-1 ) )
225*b1cdbd2cSJim Jagielski 		{
226*b1cdbd2cSJim Jagielski 			rProp.Value >>= nDisplayLevels;
227*b1cdbd2cSJim Jagielski 			if( nDisplayLevels > nLevel+1 )
228*b1cdbd2cSJim Jagielski 				nDisplayLevels = static_cast<sal_Int16>( nLevel )+1;
229*b1cdbd2cSJim Jagielski 		}
230*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_CHAR_STYLE_NAME, sizeof(XML_UNO_NAME_NRULE_CHAR_STYLE_NAME)-1 ) )
231*b1cdbd2cSJim Jagielski 		{
232*b1cdbd2cSJim Jagielski 			rProp.Value >>= sTextStyleName;
233*b1cdbd2cSJim Jagielski 		}
234*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_GRAPHIC_SIZE, sizeof(XML_UNO_NAME_NRULE_GRAPHIC_SIZE)-1 ) )
235*b1cdbd2cSJim Jagielski 		{
236*b1cdbd2cSJim Jagielski 			awt::Size aSize;
237*b1cdbd2cSJim Jagielski 			if( rProp.Value >>= aSize )
238*b1cdbd2cSJim Jagielski 			{
239*b1cdbd2cSJim Jagielski 				nImageWidth = aSize.Width;
240*b1cdbd2cSJim Jagielski 				nImageHeight = aSize.Height;
241*b1cdbd2cSJim Jagielski 			}
242*b1cdbd2cSJim Jagielski 		}
243*b1cdbd2cSJim Jagielski 		else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_VERT_ORIENT, sizeof(XML_UNO_NAME_NRULE_VERT_ORIENT)-1 ) )
244*b1cdbd2cSJim Jagielski 		{
245*b1cdbd2cSJim Jagielski 			sal_Int16 nValue = 0;
246*b1cdbd2cSJim Jagielski 			rProp.Value >>= nValue;
247*b1cdbd2cSJim Jagielski 			eImageVertOrient = nValue;
248*b1cdbd2cSJim Jagielski 		}
249*b1cdbd2cSJim Jagielski         // --> OD 2008-01-16 #newlistlevelattrs#
250*b1cdbd2cSJim Jagielski         else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_POSITION_AND_SPACE_MODE,
251*b1cdbd2cSJim Jagielski                                           sizeof(XML_UNO_NAME_NRULE_POSITION_AND_SPACE_MODE)-1 ) )
252*b1cdbd2cSJim Jagielski         {
253*b1cdbd2cSJim Jagielski             sal_Int16 nValue = 0;
254*b1cdbd2cSJim Jagielski             rProp.Value >>= nValue;
255*b1cdbd2cSJim Jagielski             ePosAndSpaceMode = nValue;
256*b1cdbd2cSJim Jagielski         }
257*b1cdbd2cSJim Jagielski         else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_LABEL_FOLLOWED_BY,
258*b1cdbd2cSJim Jagielski                                           sizeof(XML_UNO_NAME_NRULE_LABEL_FOLLOWED_BY)-1 ) )
259*b1cdbd2cSJim Jagielski         {
260*b1cdbd2cSJim Jagielski             sal_Int16 nValue = 0;
261*b1cdbd2cSJim Jagielski             rProp.Value >>= nValue;
262*b1cdbd2cSJim Jagielski             eLabelFollowedBy = nValue;
263*b1cdbd2cSJim Jagielski         }
264*b1cdbd2cSJim Jagielski         else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_LISTTAB_STOP_POSITION,
265*b1cdbd2cSJim Jagielski                                           sizeof(XML_UNO_NAME_NRULE_LISTTAB_STOP_POSITION)-1 ) )
266*b1cdbd2cSJim Jagielski         {
267*b1cdbd2cSJim Jagielski             rProp.Value >>= nListtabStopPosition;
268*b1cdbd2cSJim Jagielski         }
269*b1cdbd2cSJim Jagielski         else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_FIRST_LINE_INDENT,
270*b1cdbd2cSJim Jagielski                                           sizeof(XML_UNO_NAME_NRULE_FIRST_LINE_INDENT)-1 ) )
271*b1cdbd2cSJim Jagielski         {
272*b1cdbd2cSJim Jagielski             rProp.Value >>= nFirstLineIndent;
273*b1cdbd2cSJim Jagielski         }
274*b1cdbd2cSJim Jagielski         else if( rProp.Name.equalsAsciiL( XML_UNO_NAME_NRULE_INDENT_AT,
275*b1cdbd2cSJim Jagielski                                           sizeof(XML_UNO_NAME_NRULE_INDENT_AT)-1 ) )
276*b1cdbd2cSJim Jagielski         {
277*b1cdbd2cSJim Jagielski             rProp.Value >>= nIndentAt;
278*b1cdbd2cSJim Jagielski         }
279*b1cdbd2cSJim Jagielski         // <--
280*b1cdbd2cSJim Jagielski 	}
281*b1cdbd2cSJim Jagielski 
282*b1cdbd2cSJim Jagielski 	if( bOutline && (NumberingType::CHAR_SPECIAL == eType ||
283*b1cdbd2cSJim Jagielski 					 NumberingType::BITMAP == eType) )
284*b1cdbd2cSJim Jagielski 	{
285*b1cdbd2cSJim Jagielski 		DBG_ASSERT( !bOutline,
286*b1cdbd2cSJim Jagielski 		   "SvxXMLNumRuleExport::exportLevelStyle: invalid style for outline" );
287*b1cdbd2cSJim Jagielski 		return;
288*b1cdbd2cSJim Jagielski 	}
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski 	GetExport().CheckAttrList();
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski 	// text:level
293*b1cdbd2cSJim Jagielski 	OUStringBuffer sTmp;
294*b1cdbd2cSJim Jagielski 	sTmp.append( nLevel + 1 );
295*b1cdbd2cSJim Jagielski 	GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_LEVEL, sTmp.makeStringAndClear() );
296*b1cdbd2cSJim Jagielski     // #i110694#: no style-name on list-level-style-image
297*b1cdbd2cSJim Jagielski     // #i116149#: neither prefix/suffix
298*b1cdbd2cSJim Jagielski     if (NumberingType::BITMAP != eType)
299*b1cdbd2cSJim Jagielski     {
300*b1cdbd2cSJim Jagielski         if (sTextStyleName.getLength() > 0)
301*b1cdbd2cSJim Jagielski         {
302*b1cdbd2cSJim Jagielski             GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_STYLE_NAME,
303*b1cdbd2cSJim Jagielski                     GetExport().EncodeStyleName( sTextStyleName ) );
304*b1cdbd2cSJim Jagielski         }
305*b1cdbd2cSJim Jagielski         if (sPrefix.getLength() > 0)
306*b1cdbd2cSJim Jagielski         {
307*b1cdbd2cSJim Jagielski             GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_NUM_PREFIX,
308*b1cdbd2cSJim Jagielski                     sPrefix );
309*b1cdbd2cSJim Jagielski         }
310*b1cdbd2cSJim Jagielski         if (sSuffix.getLength() > 0)
311*b1cdbd2cSJim Jagielski         {
312*b1cdbd2cSJim Jagielski             GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_NUM_SUFFIX,
313*b1cdbd2cSJim Jagielski                     sSuffix );
314*b1cdbd2cSJim Jagielski         }
315*b1cdbd2cSJim Jagielski     }
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eElem = XML_LIST_LEVEL_STYLE_NUMBER;
318*b1cdbd2cSJim Jagielski 	if( NumberingType::CHAR_SPECIAL == eType )
319*b1cdbd2cSJim Jagielski 	{
320*b1cdbd2cSJim Jagielski 		// <text:list-level-style-bullet>
321*b1cdbd2cSJim Jagielski 		eElem = XML_LIST_LEVEL_STYLE_BULLET;
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski 		if( cBullet )
324*b1cdbd2cSJim Jagielski 		{
325*b1cdbd2cSJim Jagielski 			if( cBullet < ' ' )
326*b1cdbd2cSJim Jagielski 			{
327*b1cdbd2cSJim Jagielski 				cBullet = 0xF000 + 149;
328*b1cdbd2cSJim Jagielski 			}
329*b1cdbd2cSJim Jagielski 			// text:bullet-char="..."
330*b1cdbd2cSJim Jagielski 			sTmp.append( cBullet );
331*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_BULLET_CHAR,
332*b1cdbd2cSJim Jagielski 						  sTmp.makeStringAndClear() );
333*b1cdbd2cSJim Jagielski 		}
334*b1cdbd2cSJim Jagielski 
335*b1cdbd2cSJim Jagielski 	}
336*b1cdbd2cSJim Jagielski 	else if( NumberingType::BITMAP == eType )
337*b1cdbd2cSJim Jagielski 	{
338*b1cdbd2cSJim Jagielski 		// <text:list-level-style-image>
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski 		eElem = XML_LIST_LEVEL_STYLE_IMAGE;
341*b1cdbd2cSJim Jagielski 
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski 		if( sImageURL.getLength() )
344*b1cdbd2cSJim Jagielski 		{
345*b1cdbd2cSJim Jagielski 			OUString sURL( GetExport().AddEmbeddedGraphicObject( sImageURL ) );
346*b1cdbd2cSJim Jagielski 			if( sURL.getLength() )
347*b1cdbd2cSJim Jagielski 			{
348*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, sURL );
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
351*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_XLINK, XML_SHOW, XML_EMBED );
352*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
353*b1cdbd2cSJim Jagielski 			}
354*b1cdbd2cSJim Jagielski 		}
355*b1cdbd2cSJim Jagielski 		else
356*b1cdbd2cSJim Jagielski 		{
357*b1cdbd2cSJim Jagielski 			DBG_ASSERT( !xBitmap.is(),
358*b1cdbd2cSJim Jagielski 						"embedded images are not supported by now" );
359*b1cdbd2cSJim Jagielski 		}
360*b1cdbd2cSJim Jagielski 	}
361*b1cdbd2cSJim Jagielski 	else
362*b1cdbd2cSJim Jagielski 	{
363*b1cdbd2cSJim Jagielski 		// <text:list-level-style-number> or <text:outline-level-style>
364*b1cdbd2cSJim Jagielski 		if( bOutline )
365*b1cdbd2cSJim Jagielski 			eElem = XML_OUTLINE_LEVEL_STYLE;
366*b1cdbd2cSJim Jagielski 		else
367*b1cdbd2cSJim Jagielski 			eElem = XML_LIST_LEVEL_STYLE_NUMBER;
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski 		GetExport().GetMM100UnitConverter().convertNumFormat( sTmp, eType );
370*b1cdbd2cSJim Jagielski 		GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_NUM_FORMAT,
371*b1cdbd2cSJim Jagielski 						  	   	  sTmp.makeStringAndClear() );
372*b1cdbd2cSJim Jagielski 		GetExport().GetMM100UnitConverter().convertNumLetterSync( sTmp, eType );
373*b1cdbd2cSJim Jagielski 		if( sTmp.getLength() )
374*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_STYLE,
375*b1cdbd2cSJim Jagielski 									  XML_NUM_LETTER_SYNC,
376*b1cdbd2cSJim Jagielski 						  	   		  sTmp.makeStringAndClear() );
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 		if( nStartValue != 1 )
379*b1cdbd2cSJim Jagielski 		{
380*b1cdbd2cSJim Jagielski 			sTmp.append( (sal_Int32)nStartValue );
381*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_START_VALUE,
382*b1cdbd2cSJim Jagielski 						  sTmp.makeStringAndClear() );
383*b1cdbd2cSJim Jagielski 		}
384*b1cdbd2cSJim Jagielski 		if( nDisplayLevels > 1 && NumberingType::NUMBER_NONE != eType )
385*b1cdbd2cSJim Jagielski 		{
386*b1cdbd2cSJim Jagielski 			sTmp.append( (sal_Int32)nDisplayLevels );
387*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_DISPLAY_LEVELS,
388*b1cdbd2cSJim Jagielski 						  sTmp.makeStringAndClear() );
389*b1cdbd2cSJim Jagielski 		}
390*b1cdbd2cSJim Jagielski 	}
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski 	{
393*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_TEXT, eElem,
394*b1cdbd2cSJim Jagielski 								  sal_True, sal_True );
395*b1cdbd2cSJim Jagielski 
396*b1cdbd2cSJim Jagielski         // --> OD 2008-01-16 #newlistlevelattrs#
397*b1cdbd2cSJim Jagielski         OUStringBuffer sBuffer;
398*b1cdbd2cSJim Jagielski         if ( ePosAndSpaceMode == PositionAndSpaceMode::LABEL_WIDTH_AND_POSITION )
399*b1cdbd2cSJim Jagielski         {
400*b1cdbd2cSJim Jagielski             // --> OD 2008-06-05 #i89178#
401*b1cdbd2cSJim Jagielski             // optimization of XML stream size:
402*b1cdbd2cSJim Jagielski             // suppress export of property list-level-position-and-space-mode,
403*b1cdbd2cSJim Jagielski             // if its value is "label-width-and-position" - its the default value
404*b1cdbd2cSJim Jagielski //            GetExport().AddAttribute( XML_NAMESPACE_TEXT,
405*b1cdbd2cSJim Jagielski //                                      XML_LIST_LEVEL_POSITION_AND_SPACE_MODE,
406*b1cdbd2cSJim Jagielski //                                      XML_LABEL_WIDTH_AND_POSITION );
407*b1cdbd2cSJim Jagielski             // <--
408*b1cdbd2cSJim Jagielski 
409*b1cdbd2cSJim Jagielski             nSpaceBefore += nMinLabelWidth;
410*b1cdbd2cSJim Jagielski             nMinLabelWidth = -nMinLabelWidth;
411*b1cdbd2cSJim Jagielski             if( nSpaceBefore != 0 )
412*b1cdbd2cSJim Jagielski             {
413*b1cdbd2cSJim Jagielski                 GetExport().GetMM100UnitConverter().convertMeasure( sBuffer, nSpaceBefore );
414*b1cdbd2cSJim Jagielski                 GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_SPACE_BEFORE,
415*b1cdbd2cSJim Jagielski                               sBuffer.makeStringAndClear() );
416*b1cdbd2cSJim Jagielski             }
417*b1cdbd2cSJim Jagielski             if( nMinLabelWidth != 0 )
418*b1cdbd2cSJim Jagielski             {
419*b1cdbd2cSJim Jagielski                 GetExport().GetMM100UnitConverter().convertMeasure( sBuffer, nMinLabelWidth );
420*b1cdbd2cSJim Jagielski                 GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_MIN_LABEL_WIDTH,
421*b1cdbd2cSJim Jagielski                               sBuffer.makeStringAndClear() );
422*b1cdbd2cSJim Jagielski             }
423*b1cdbd2cSJim Jagielski             if( nMinLabelDist > 0 )
424*b1cdbd2cSJim Jagielski             {
425*b1cdbd2cSJim Jagielski                 GetExport().GetMM100UnitConverter().convertMeasure( sBuffer, nMinLabelDist );
426*b1cdbd2cSJim Jagielski                 GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_MIN_LABEL_DISTANCE,
427*b1cdbd2cSJim Jagielski                               sBuffer.makeStringAndClear() );
428*b1cdbd2cSJim Jagielski             }
429*b1cdbd2cSJim Jagielski         }
430*b1cdbd2cSJim Jagielski         // --> OD 2008-06-06 #i89178#
431*b1cdbd2cSJim Jagielski         // check, if properties for position-and-space-mode LABEL_ALIGNMENT
432*b1cdbd2cSJim Jagielski         // are allowed to be exported.
433*b1cdbd2cSJim Jagielski         else if ( ePosAndSpaceMode == PositionAndSpaceMode::LABEL_ALIGNMENT &&
434*b1cdbd2cSJim Jagielski                   mbExportPositionAndSpaceModeLabelAlignment )
435*b1cdbd2cSJim Jagielski         // <--
436*b1cdbd2cSJim Jagielski         {
437*b1cdbd2cSJim Jagielski             GetExport().AddAttribute( XML_NAMESPACE_TEXT,
438*b1cdbd2cSJim Jagielski                                       XML_LIST_LEVEL_POSITION_AND_SPACE_MODE,
439*b1cdbd2cSJim Jagielski                                       XML_LABEL_ALIGNMENT );
440*b1cdbd2cSJim Jagielski         }
441*b1cdbd2cSJim Jagielski         // <--
442*b1cdbd2cSJim Jagielski 		if( HoriOrientation::LEFT != eAdjust )
443*b1cdbd2cSJim Jagielski 		{
444*b1cdbd2cSJim Jagielski             enum XMLTokenEnum eValue = XML_TOKEN_INVALID;
445*b1cdbd2cSJim Jagielski 			switch( eAdjust )
446*b1cdbd2cSJim Jagielski 			{
447*b1cdbd2cSJim Jagielski 			case HoriOrientation::RIGHT:	eValue = XML_END;	break;
448*b1cdbd2cSJim Jagielski 			case HoriOrientation::CENTER:	eValue = XML_CENTER;	break;
449*b1cdbd2cSJim Jagielski 			}
450*b1cdbd2cSJim Jagielski 			if( eValue != XML_TOKEN_INVALID )
451*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_FO, XML_TEXT_ALIGN, eValue );
452*b1cdbd2cSJim Jagielski 		}
453*b1cdbd2cSJim Jagielski 
454*b1cdbd2cSJim Jagielski 		if( NumberingType::BITMAP == eType )
455*b1cdbd2cSJim Jagielski 		{
456*b1cdbd2cSJim Jagielski             enum XMLTokenEnum eValue = XML_TOKEN_INVALID;
457*b1cdbd2cSJim Jagielski 			switch( eImageVertOrient )
458*b1cdbd2cSJim Jagielski 			{
459*b1cdbd2cSJim Jagielski 			case VertOrientation::BOTTOM:	// yes, its OK: BOTTOM means that the baseline
460*b1cdbd2cSJim Jagielski 									// hits the frame at its topmost position
461*b1cdbd2cSJim Jagielski 			case VertOrientation::LINE_TOP:
462*b1cdbd2cSJim Jagielski 			case VertOrientation::CHAR_TOP:
463*b1cdbd2cSJim Jagielski 				eValue = XML_TOP;
464*b1cdbd2cSJim Jagielski 				break;
465*b1cdbd2cSJim Jagielski 			case VertOrientation::CENTER:
466*b1cdbd2cSJim Jagielski 			case VertOrientation::LINE_CENTER:
467*b1cdbd2cSJim Jagielski 			case VertOrientation::CHAR_CENTER:
468*b1cdbd2cSJim Jagielski 				eValue = XML_MIDDLE;
469*b1cdbd2cSJim Jagielski 				break;
470*b1cdbd2cSJim Jagielski 			case VertOrientation::TOP:		// yes, its OK: TOP means that the baseline
471*b1cdbd2cSJim Jagielski 									// hits the frame at its bottommost position
472*b1cdbd2cSJim Jagielski 			case VertOrientation::LINE_BOTTOM:
473*b1cdbd2cSJim Jagielski 			case VertOrientation::CHAR_BOTTOM:
474*b1cdbd2cSJim Jagielski 				eValue = XML_BOTTOM;
475*b1cdbd2cSJim Jagielski 				break;
476*b1cdbd2cSJim Jagielski 			}
477*b1cdbd2cSJim Jagielski 			if( eValue != XML_TOKEN_INVALID )
478*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_VERTICAL_POS, eValue );
479*b1cdbd2cSJim Jagielski 
480*b1cdbd2cSJim Jagielski 			eValue = XML_TOKEN_INVALID;
481*b1cdbd2cSJim Jagielski 			switch( eImageVertOrient )
482*b1cdbd2cSJim Jagielski 			{
483*b1cdbd2cSJim Jagielski 			case VertOrientation::TOP:
484*b1cdbd2cSJim Jagielski 			case VertOrientation::CENTER:
485*b1cdbd2cSJim Jagielski 			case VertOrientation::BOTTOM:
486*b1cdbd2cSJim Jagielski 				eValue = XML_BASELINE;
487*b1cdbd2cSJim Jagielski 				break;
488*b1cdbd2cSJim Jagielski 			case VertOrientation::LINE_TOP:
489*b1cdbd2cSJim Jagielski 			case VertOrientation::LINE_CENTER:
490*b1cdbd2cSJim Jagielski 			case VertOrientation::LINE_BOTTOM:
491*b1cdbd2cSJim Jagielski 				eValue = XML_LINE;
492*b1cdbd2cSJim Jagielski 				break;
493*b1cdbd2cSJim Jagielski 			case VertOrientation::CHAR_TOP:
494*b1cdbd2cSJim Jagielski 			case VertOrientation::CHAR_CENTER:
495*b1cdbd2cSJim Jagielski 			case VertOrientation::CHAR_BOTTOM:
496*b1cdbd2cSJim Jagielski 				eValue = XML_CHAR;
497*b1cdbd2cSJim Jagielski 				break;
498*b1cdbd2cSJim Jagielski 			}
499*b1cdbd2cSJim Jagielski 			if( eValue != XML_TOKEN_INVALID )
500*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_VERTICAL_REL, eValue );
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski 			if( nImageWidth > 0 )
503*b1cdbd2cSJim Jagielski 			{
504*b1cdbd2cSJim Jagielski 				GetExport().GetMM100UnitConverter().convertMeasure( sBuffer, nImageWidth );
505*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_FO, XML_WIDTH,
506*b1cdbd2cSJim Jagielski 							  sBuffer.makeStringAndClear() );
507*b1cdbd2cSJim Jagielski 			}
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski 			if( nImageHeight > 0 )
510*b1cdbd2cSJim Jagielski 			{
511*b1cdbd2cSJim Jagielski 				GetExport().GetMM100UnitConverter().convertMeasure( sBuffer, nImageHeight );
512*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_FO, XML_HEIGHT,
513*b1cdbd2cSJim Jagielski 							  sBuffer.makeStringAndClear() );
514*b1cdbd2cSJim Jagielski 			}
515*b1cdbd2cSJim Jagielski 		}
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski         // --> OD 2008-01-16 #newlistlevelattrs#
518*b1cdbd2cSJim Jagielski //        if( GetExport().GetAttrList().getLength() > 0 )
519*b1cdbd2cSJim Jagielski 		{
520*b1cdbd2cSJim Jagielski 			SvXMLElementExport aElement( GetExport(), XML_NAMESPACE_STYLE,
521*b1cdbd2cSJim Jagielski 									  XML_LIST_LEVEL_PROPERTIES, sal_True, sal_True );
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski             // --> OD 2008-06-06 #i89178#
524*b1cdbd2cSJim Jagielski             // check, if properties for position-and-space-mode LABEL_ALIGNMENT
525*b1cdbd2cSJim Jagielski             // are allowed to be exported.
526*b1cdbd2cSJim Jagielski             if ( ePosAndSpaceMode == PositionAndSpaceMode::LABEL_ALIGNMENT &&
527*b1cdbd2cSJim Jagielski                  mbExportPositionAndSpaceModeLabelAlignment )
528*b1cdbd2cSJim Jagielski             // <--
529*b1cdbd2cSJim Jagielski             {
530*b1cdbd2cSJim Jagielski                 enum XMLTokenEnum eValue = XML_LISTTAB;
531*b1cdbd2cSJim Jagielski                 if ( eLabelFollowedBy == LabelFollow::SPACE )
532*b1cdbd2cSJim Jagielski                 {
533*b1cdbd2cSJim Jagielski                     eValue = XML_SPACE;
534*b1cdbd2cSJim Jagielski                 }
535*b1cdbd2cSJim Jagielski                 else if ( eLabelFollowedBy == LabelFollow::NOTHING )
536*b1cdbd2cSJim Jagielski                 {
537*b1cdbd2cSJim Jagielski                     eValue = XML_NOTHING;
538*b1cdbd2cSJim Jagielski                 }
539*b1cdbd2cSJim Jagielski                 GetExport().AddAttribute( XML_NAMESPACE_TEXT,
540*b1cdbd2cSJim Jagielski                                           XML_LABEL_FOLLOWED_BY, eValue );
541*b1cdbd2cSJim Jagielski 
542*b1cdbd2cSJim Jagielski                 if ( eLabelFollowedBy == LabelFollow::LISTTAB &&
543*b1cdbd2cSJim Jagielski                      nListtabStopPosition > 0 )
544*b1cdbd2cSJim Jagielski                 {
545*b1cdbd2cSJim Jagielski                     GetExport().GetMM100UnitConverter().convertMeasure( sBuffer, nListtabStopPosition );
546*b1cdbd2cSJim Jagielski                     GetExport().AddAttribute( XML_NAMESPACE_TEXT,
547*b1cdbd2cSJim Jagielski                                               XML_LIST_TAB_STOP_POSITION,
548*b1cdbd2cSJim Jagielski                                               sBuffer.makeStringAndClear() );
549*b1cdbd2cSJim Jagielski                 }
550*b1cdbd2cSJim Jagielski 
551*b1cdbd2cSJim Jagielski                 if ( nFirstLineIndent != 0 )
552*b1cdbd2cSJim Jagielski                 {
553*b1cdbd2cSJim Jagielski                     GetExport().GetMM100UnitConverter().convertMeasure( sBuffer, nFirstLineIndent );
554*b1cdbd2cSJim Jagielski                     GetExport().AddAttribute( XML_NAMESPACE_FO,
555*b1cdbd2cSJim Jagielski                                               XML_TEXT_INDENT,
556*b1cdbd2cSJim Jagielski                                               sBuffer.makeStringAndClear() );
557*b1cdbd2cSJim Jagielski                 }
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski                 if ( nIndentAt != 0 )
560*b1cdbd2cSJim Jagielski                 {
561*b1cdbd2cSJim Jagielski                     GetExport().GetMM100UnitConverter().convertMeasure( sBuffer, nIndentAt );
562*b1cdbd2cSJim Jagielski                     GetExport().AddAttribute( XML_NAMESPACE_FO,
563*b1cdbd2cSJim Jagielski                                               XML_MARGIN_LEFT,
564*b1cdbd2cSJim Jagielski                                               sBuffer.makeStringAndClear() );
565*b1cdbd2cSJim Jagielski                 }
566*b1cdbd2cSJim Jagielski 
567*b1cdbd2cSJim Jagielski                 SvXMLElementExport aLabelAlignmentElement( GetExport(), XML_NAMESPACE_STYLE,
568*b1cdbd2cSJim Jagielski                                              XML_LIST_LEVEL_LABEL_ALIGNMENT,
569*b1cdbd2cSJim Jagielski                                              sal_True, sal_True );
570*b1cdbd2cSJim Jagielski             }
571*b1cdbd2cSJim Jagielski         }
572*b1cdbd2cSJim Jagielski         // <--
573*b1cdbd2cSJim Jagielski 
574*b1cdbd2cSJim Jagielski 		if( NumberingType::CHAR_SPECIAL == eType )
575*b1cdbd2cSJim Jagielski 		{
576*b1cdbd2cSJim Jagielski 			if( sBulletFontName.getLength() )
577*b1cdbd2cSJim Jagielski 			{
578*b1cdbd2cSJim Jagielski 				OUString sStyleName =
579*b1cdbd2cSJim Jagielski 					GetExport().GetFontAutoStylePool()->Find(
580*b1cdbd2cSJim Jagielski 						sBulletFontName, sBulletFontStyleName,
581*b1cdbd2cSJim Jagielski 						eBulletFontFamily, eBulletFontPitch,
582*b1cdbd2cSJim Jagielski 						eBulletFontEncoding );
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski 				if( sStyleName.getLength() )
585*b1cdbd2cSJim Jagielski 				{
586*b1cdbd2cSJim Jagielski 						GetExport().AddAttribute( XML_NAMESPACE_STYLE,
587*b1cdbd2cSJim Jagielski 												  XML_FONT_NAME,
588*b1cdbd2cSJim Jagielski 												  sStyleName );
589*b1cdbd2cSJim Jagielski 				}
590*b1cdbd2cSJim Jagielski 				else
591*b1cdbd2cSJim Jagielski 				{
592*b1cdbd2cSJim Jagielski 					Any aAny;
593*b1cdbd2cSJim Jagielski 					OUString sTemp;
594*b1cdbd2cSJim Jagielski 
595*b1cdbd2cSJim Jagielski 					const SvXMLUnitConverter& rUnitConv =
596*b1cdbd2cSJim Jagielski 						GetExport().GetMM100UnitConverter();
597*b1cdbd2cSJim Jagielski 					XMLFontFamilyNamePropHdl aFamilyNameHdl;
598*b1cdbd2cSJim Jagielski 					aAny <<= sBulletFontName;
599*b1cdbd2cSJim Jagielski 					if( aFamilyNameHdl.exportXML( sTemp, aAny, rUnitConv ) )
600*b1cdbd2cSJim Jagielski 						GetExport().AddAttribute( XML_NAMESPACE_FO,
601*b1cdbd2cSJim Jagielski 												  XML_FONT_FAMILY, sTemp );
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski 					if( sBulletFontStyleName.getLength() )
604*b1cdbd2cSJim Jagielski 						GetExport().AddAttribute( XML_NAMESPACE_STYLE,
605*b1cdbd2cSJim Jagielski 												  XML_FONT_STYLE_NAME,
606*b1cdbd2cSJim Jagielski 												  sBulletFontStyleName );
607*b1cdbd2cSJim Jagielski 
608*b1cdbd2cSJim Jagielski 					XMLFontFamilyPropHdl aFamilyHdl;
609*b1cdbd2cSJim Jagielski 					aAny <<= (sal_Int16)eBulletFontFamily;
610*b1cdbd2cSJim Jagielski 					if( aFamilyHdl.exportXML( sTemp, aAny, rUnitConv  ) )
611*b1cdbd2cSJim Jagielski 						GetExport().AddAttribute( XML_NAMESPACE_STYLE,
612*b1cdbd2cSJim Jagielski 												  XML_FONT_FAMILY_GENERIC,
613*b1cdbd2cSJim Jagielski 												  sTemp );
614*b1cdbd2cSJim Jagielski 
615*b1cdbd2cSJim Jagielski 					XMLFontPitchPropHdl aPitchHdl;
616*b1cdbd2cSJim Jagielski 					aAny <<= (sal_Int16)eBulletFontPitch;
617*b1cdbd2cSJim Jagielski 					if( aPitchHdl.exportXML( sTemp, aAny, rUnitConv  ) )
618*b1cdbd2cSJim Jagielski 						GetExport().AddAttribute( XML_NAMESPACE_STYLE,
619*b1cdbd2cSJim Jagielski 												  XML_FONT_PITCH, sTemp );
620*b1cdbd2cSJim Jagielski 
621*b1cdbd2cSJim Jagielski 					XMLFontEncodingPropHdl aEncHdl;
622*b1cdbd2cSJim Jagielski 					aAny <<= (sal_Int16)eBulletFontEncoding;
623*b1cdbd2cSJim Jagielski 					if( aEncHdl.exportXML( sTemp, aAny, rUnitConv  ) )
624*b1cdbd2cSJim Jagielski 						GetExport().AddAttribute( XML_NAMESPACE_STYLE,
625*b1cdbd2cSJim Jagielski 												  XML_FONT_CHARSET, sTemp );
626*b1cdbd2cSJim Jagielski 				}
627*b1cdbd2cSJim Jagielski 			}
628*b1cdbd2cSJim Jagielski 		}
629*b1cdbd2cSJim Jagielski 		if( NumberingType::BITMAP != eType )
630*b1cdbd2cSJim Jagielski 		{
631*b1cdbd2cSJim Jagielski 			// fo:color = "#..."
632*b1cdbd2cSJim Jagielski 			if( bHasColor )
633*b1cdbd2cSJim Jagielski 			{
634*b1cdbd2cSJim Jagielski 				const Color aColor( nColor );
635*b1cdbd2cSJim Jagielski 				if( aColor.GetColor() == 0xffffffff )
636*b1cdbd2cSJim Jagielski 				{
637*b1cdbd2cSJim Jagielski 					GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_USE_WINDOW_FONT_COLOR, XML_TRUE );
638*b1cdbd2cSJim Jagielski 				}
639*b1cdbd2cSJim Jagielski 				else
640*b1cdbd2cSJim Jagielski 				{
641*b1cdbd2cSJim Jagielski 					SvXMLUnitConverter::convertColor( sBuffer, aColor );
642*b1cdbd2cSJim Jagielski 					GetExport().AddAttribute( XML_NAMESPACE_FO, XML_COLOR,
643*b1cdbd2cSJim Jagielski 								  sBuffer.makeStringAndClear() );
644*b1cdbd2cSJim Jagielski 				}
645*b1cdbd2cSJim Jagielski 			}
646*b1cdbd2cSJim Jagielski 			// fo:height="...%"
647*b1cdbd2cSJim Jagielski 			if( nBullRelSize )
648*b1cdbd2cSJim Jagielski 			{
649*b1cdbd2cSJim Jagielski 				GetExport().GetMM100UnitConverter().convertPercent( sTmp, nBullRelSize );
650*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_FO, XML_FONT_SIZE,
651*b1cdbd2cSJim Jagielski 							  sTmp.makeStringAndClear() );
652*b1cdbd2cSJim Jagielski 			}
653*b1cdbd2cSJim Jagielski 		}
654*b1cdbd2cSJim Jagielski 		if( GetExport().GetAttrList().getLength() > 0 )
655*b1cdbd2cSJim Jagielski 		{
656*b1cdbd2cSJim Jagielski 			SvXMLElementExport aElement( GetExport(), XML_NAMESPACE_STYLE,
657*b1cdbd2cSJim Jagielski 									  XML_TEXT_PROPERTIES, sal_True, sal_True );
658*b1cdbd2cSJim Jagielski 		}
659*b1cdbd2cSJim Jagielski 		if( NumberingType::BITMAP == eType && sImageURL.getLength() )
660*b1cdbd2cSJim Jagielski 		{
661*b1cdbd2cSJim Jagielski 			// optional office:binary-data
662*b1cdbd2cSJim Jagielski 			GetExport().AddEmbeddedGraphicObjectAsBase64( sImageURL );
663*b1cdbd2cSJim Jagielski 		}
664*b1cdbd2cSJim Jagielski 	}
665*b1cdbd2cSJim Jagielski }
666*b1cdbd2cSJim Jagielski 
667*b1cdbd2cSJim Jagielski 
GetUNONumRule() const668*b1cdbd2cSJim Jagielski uno::Reference< ::com::sun::star::container::XIndexReplace >  SvxXMLNumRuleExport::GetUNONumRule() const
669*b1cdbd2cSJim Jagielski {
670*b1cdbd2cSJim Jagielski 	return uno::Reference< ::com::sun::star::container::XIndexReplace > ();
671*b1cdbd2cSJim Jagielski }
672*b1cdbd2cSJim Jagielski 
AddListStyleAttributes()673*b1cdbd2cSJim Jagielski void SvxXMLNumRuleExport::AddListStyleAttributes()
674*b1cdbd2cSJim Jagielski {
675*b1cdbd2cSJim Jagielski }
676*b1cdbd2cSJim Jagielski 
677*b1cdbd2cSJim Jagielski 
SvxXMLNumRuleExport(SvXMLExport & rExp)678*b1cdbd2cSJim Jagielski SvxXMLNumRuleExport::SvxXMLNumRuleExport( SvXMLExport& rExp ) :
679*b1cdbd2cSJim Jagielski 	rExport( rExp ),
680*b1cdbd2cSJim Jagielski 	sNumberingRules( RTL_CONSTASCII_USTRINGPARAM( "NumberingRules" ) ),
681*b1cdbd2cSJim Jagielski 	sIsPhysical( RTL_CONSTASCII_USTRINGPARAM( "IsPhysical" ) ),
682*b1cdbd2cSJim Jagielski     sIsContinuousNumbering( RTL_CONSTASCII_USTRINGPARAM( "IsContinuousNumbering" ) ),
683*b1cdbd2cSJim Jagielski     // --> OD 2008-06-06 #i89178#
684*b1cdbd2cSJim Jagielski     mbExportPositionAndSpaceModeLabelAlignment( true )
685*b1cdbd2cSJim Jagielski     // <--
686*b1cdbd2cSJim Jagielski {
687*b1cdbd2cSJim Jagielski     switch ( GetExport().getDefaultVersion() )
688*b1cdbd2cSJim Jagielski     {
689*b1cdbd2cSJim Jagielski         case SvtSaveOptions::ODFVER_010:
690*b1cdbd2cSJim Jagielski         case SvtSaveOptions::ODFVER_011:
691*b1cdbd2cSJim Jagielski         {
692*b1cdbd2cSJim Jagielski             mbExportPositionAndSpaceModeLabelAlignment = false;
693*b1cdbd2cSJim Jagielski         }
694*b1cdbd2cSJim Jagielski         break;
695*b1cdbd2cSJim Jagielski         default: // ODFVER_UNKNOWN or ODFVER_012
696*b1cdbd2cSJim Jagielski         {
697*b1cdbd2cSJim Jagielski             mbExportPositionAndSpaceModeLabelAlignment = true;
698*b1cdbd2cSJim Jagielski         }
699*b1cdbd2cSJim Jagielski     }
700*b1cdbd2cSJim Jagielski }
701*b1cdbd2cSJim Jagielski 
~SvxXMLNumRuleExport()702*b1cdbd2cSJim Jagielski SvxXMLNumRuleExport::~SvxXMLNumRuleExport()
703*b1cdbd2cSJim Jagielski {
704*b1cdbd2cSJim Jagielski }
705*b1cdbd2cSJim Jagielski 
706*b1cdbd2cSJim Jagielski // --> OD 2008-06-17 #i90780#
707*b1cdbd2cSJim Jagielski // refactoring: removing unused methods
708*b1cdbd2cSJim Jagielski //void SvxXMLNumRuleExport::Export( const OUString& rName,
709*b1cdbd2cSJim Jagielski //                                sal_Bool bContNumbering )
710*b1cdbd2cSJim Jagielski //{
711*b1cdbd2cSJim Jagielski //  GetExport().CheckAttrList();
712*b1cdbd2cSJim Jagielski 
713*b1cdbd2cSJim Jagielski //  // style:name="..."
714*b1cdbd2cSJim Jagielski //  if( rName.getLength() )
715*b1cdbd2cSJim Jagielski //  {
716*b1cdbd2cSJim Jagielski //      sal_Bool bEncoded = sal_False;
717*b1cdbd2cSJim Jagielski //      GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_NAME,
718*b1cdbd2cSJim Jagielski //                        GetExport().EncodeStyleName( rName, &bEncoded ) );
719*b1cdbd2cSJim Jagielski //      if( bEncoded )
720*b1cdbd2cSJim Jagielski //          GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_DISPLAY_NAME,
721*b1cdbd2cSJim Jagielski //                                   rName);
722*b1cdbd2cSJim Jagielski //  }
723*b1cdbd2cSJim Jagielski 
724*b1cdbd2cSJim Jagielski //  // text:consecutive-numbering="..."
725*b1cdbd2cSJim Jagielski //  if( bContNumbering )
726*b1cdbd2cSJim Jagielski //      GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_CONSECUTIVE_NUMBERING,
727*b1cdbd2cSJim Jagielski //                         XML_TRUE );
728*b1cdbd2cSJim Jagielski 
729*b1cdbd2cSJim Jagielski //  // other application specific attributes
730*b1cdbd2cSJim Jagielski //  AddListStyleAttributes();
731*b1cdbd2cSJim Jagielski 
732*b1cdbd2cSJim Jagielski //  OUString sElem = GetExport().GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TEXT,
733*b1cdbd2cSJim Jagielski //                                 GetXMLToken(XML_LIST_STYLE) );
734*b1cdbd2cSJim Jagielski //  GetExport().IgnorableWhitespace();
735*b1cdbd2cSJim Jagielski //  GetExport().StartElement( XML_NAMESPACE_TEXT, XML_LIST_STYLE, sal_False );
736*b1cdbd2cSJim Jagielski 
737*b1cdbd2cSJim Jagielski //  uno::Reference< ::com::sun::star::container::XIndexReplace >  xNumRule = GetUNONumRule();
738*b1cdbd2cSJim Jagielski //  if( xNumRule.is() )
739*b1cdbd2cSJim Jagielski //      exportLevelStyles( xNumRule );
740*b1cdbd2cSJim Jagielski 
741*b1cdbd2cSJim Jagielski //  GetExport().EndElement( XML_NAMESPACE_TEXT, XML_LIST_STYLE, sal_True );
742*b1cdbd2cSJim Jagielski //}
743*b1cdbd2cSJim Jagielski 
744*b1cdbd2cSJim Jagielski //void SvxXMLNumRuleExport::ExportOutline()
745*b1cdbd2cSJim Jagielski //{
746*b1cdbd2cSJim Jagielski //  GetExport().IgnorableWhitespace( );
747*b1cdbd2cSJim Jagielski //  GetExport().StartElement( XML_NAMESPACE_TEXT, XML_OUTLINE_STYLE, sal_False );
748*b1cdbd2cSJim Jagielski 
749*b1cdbd2cSJim Jagielski //  uno::Reference< ::com::sun::star::container::XIndexReplace >  xNumRule = GetUNONumRule();
750*b1cdbd2cSJim Jagielski //  if( xNumRule.is() )
751*b1cdbd2cSJim Jagielski //      exportLevelStyles( xNumRule, sal_True );
752*b1cdbd2cSJim Jagielski 
753*b1cdbd2cSJim Jagielski //  GetExport().EndElement( XML_NAMESPACE_TEXT, XML_OUTLINE_STYLE, sal_True );
754*b1cdbd2cSJim Jagielski //}
755*b1cdbd2cSJim Jagielski // <--
756*b1cdbd2cSJim Jagielski 
exportNumberingRule(const OUString & rName,const Reference<XIndexReplace> & rNumRule)757*b1cdbd2cSJim Jagielski void SvxXMLNumRuleExport::exportNumberingRule(
758*b1cdbd2cSJim Jagielski 		const OUString& rName,
759*b1cdbd2cSJim Jagielski 		const Reference< XIndexReplace >& rNumRule )
760*b1cdbd2cSJim Jagielski {
761*b1cdbd2cSJim Jagielski 	Reference< XPropertySet > xPropSet( rNumRule, UNO_QUERY );
762*b1cdbd2cSJim Jagielski 	Reference< XPropertySetInfo > xPropSetInfo;
763*b1cdbd2cSJim Jagielski 	if( xPropSet.is() )
764*b1cdbd2cSJim Jagielski    		xPropSetInfo = xPropSet->getPropertySetInfo();
765*b1cdbd2cSJim Jagielski 
766*b1cdbd2cSJim Jagielski 	GetExport().CheckAttrList();
767*b1cdbd2cSJim Jagielski 
768*b1cdbd2cSJim Jagielski 	// style:name="..."
769*b1cdbd2cSJim Jagielski 	if( rName.getLength() )
770*b1cdbd2cSJim Jagielski 	{
771*b1cdbd2cSJim Jagielski 		sal_Bool bEncoded = sal_False;
772*b1cdbd2cSJim Jagielski 		GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_NAME,
773*b1cdbd2cSJim Jagielski 						  GetExport().EncodeStyleName( rName, &bEncoded ) );
774*b1cdbd2cSJim Jagielski 		if( bEncoded )
775*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_DISPLAY_NAME,
776*b1cdbd2cSJim Jagielski 								 rName);
777*b1cdbd2cSJim Jagielski 	}
778*b1cdbd2cSJim Jagielski 
779*b1cdbd2cSJim Jagielski 	// text:consecutive-numbering="..."
780*b1cdbd2cSJim Jagielski 	sal_Bool bContNumbering = sal_False;
781*b1cdbd2cSJim Jagielski 	if( xPropSetInfo.is() &&
782*b1cdbd2cSJim Jagielski 		xPropSetInfo->hasPropertyByName( sIsContinuousNumbering ) )
783*b1cdbd2cSJim Jagielski 	{
784*b1cdbd2cSJim Jagielski 		Any aAny( xPropSet->getPropertyValue( sIsContinuousNumbering ) );
785*b1cdbd2cSJim Jagielski 		bContNumbering = *(sal_Bool *)aAny.getValue();
786*b1cdbd2cSJim Jagielski 	}
787*b1cdbd2cSJim Jagielski 	if( bContNumbering )
788*b1cdbd2cSJim Jagielski 		GetExport().AddAttribute( XML_NAMESPACE_TEXT,
789*b1cdbd2cSJim Jagielski                                   XML_CONSECUTIVE_NUMBERING, XML_TRUE );
790*b1cdbd2cSJim Jagielski 
791*b1cdbd2cSJim Jagielski 	// other application specific attributes
792*b1cdbd2cSJim Jagielski 	AddListStyleAttributes();
793*b1cdbd2cSJim Jagielski 
794*b1cdbd2cSJim Jagielski 	{
795*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_TEXT, XML_LIST_STYLE ,
796*b1cdbd2cSJim Jagielski 								  sal_True, sal_True );
797*b1cdbd2cSJim Jagielski 		exportLevelStyles( rNumRule );
798*b1cdbd2cSJim Jagielski 	}
799*b1cdbd2cSJim Jagielski }
800*b1cdbd2cSJim Jagielski 
exportStyle(const Reference<XStyle> & rStyle)801*b1cdbd2cSJim Jagielski sal_Bool SvxXMLNumRuleExport::exportStyle( const Reference< XStyle >& rStyle )
802*b1cdbd2cSJim Jagielski {
803*b1cdbd2cSJim Jagielski 	Reference< XPropertySet > xPropSet( rStyle, UNO_QUERY );
804*b1cdbd2cSJim Jagielski 	Reference< XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo();
805*b1cdbd2cSJim Jagielski 
806*b1cdbd2cSJim Jagielski 	Any aAny;
807*b1cdbd2cSJim Jagielski 
808*b1cdbd2cSJim Jagielski 	// Don't export styles that aren't existing really. This may be the
809*b1cdbd2cSJim Jagielski 	// case for StarOffice Writer's pool styles.
810*b1cdbd2cSJim Jagielski 	if( xPropSetInfo->hasPropertyByName( sIsPhysical ) )
811*b1cdbd2cSJim Jagielski 	{
812*b1cdbd2cSJim Jagielski 		aAny = xPropSet->getPropertyValue( sIsPhysical );
813*b1cdbd2cSJim Jagielski 		if( !*(sal_Bool *)aAny.getValue() )
814*b1cdbd2cSJim Jagielski 			return sal_False;
815*b1cdbd2cSJim Jagielski 	}
816*b1cdbd2cSJim Jagielski 
817*b1cdbd2cSJim Jagielski 	aAny = xPropSet->getPropertyValue( sNumberingRules );
818*b1cdbd2cSJim Jagielski 	Reference<XIndexReplace> xNumRule;
819*b1cdbd2cSJim Jagielski 	aAny >>= xNumRule;
820*b1cdbd2cSJim Jagielski 
821*b1cdbd2cSJim Jagielski 	OUString sName = rStyle->getName();
822*b1cdbd2cSJim Jagielski 
823*b1cdbd2cSJim Jagielski 	exportNumberingRule( sName, xNumRule );
824*b1cdbd2cSJim Jagielski 
825*b1cdbd2cSJim Jagielski 	return sal_True;
826*b1cdbd2cSJim Jagielski }
827*b1cdbd2cSJim Jagielski 
exportOutline()828*b1cdbd2cSJim Jagielski void SvxXMLNumRuleExport::exportOutline()
829*b1cdbd2cSJim Jagielski {
830*b1cdbd2cSJim Jagielski 	Reference< XChapterNumberingSupplier > xCNSupplier( GetExport().GetModel(),
831*b1cdbd2cSJim Jagielski 														UNO_QUERY );
832*b1cdbd2cSJim Jagielski 	DBG_ASSERT( xCNSupplier.is(), "no chapter numbering supplier" );
833*b1cdbd2cSJim Jagielski 
834*b1cdbd2cSJim Jagielski 	if( xCNSupplier.is() )
835*b1cdbd2cSJim Jagielski 	{
836*b1cdbd2cSJim Jagielski 		Reference< XIndexReplace > xNumRule( xCNSupplier->getChapterNumberingRules() );
837*b1cdbd2cSJim Jagielski 		DBG_ASSERT( xNumRule.is(), "no chapter numbering rules" );
838*b1cdbd2cSJim Jagielski 
839*b1cdbd2cSJim Jagielski 		if( xNumRule.is() )
840*b1cdbd2cSJim Jagielski 		{
841*b1cdbd2cSJim Jagielski             // --> OD 2008-06-17 #i90780#
842*b1cdbd2cSJim Jagielski             // Outline style has property style:name since ODF 1.2
843*b1cdbd2cSJim Jagielski             // Thus, export this property and adjust fix for issue #i69627#
844*b1cdbd2cSJim Jagielski             OUString sOutlineStyleName;
845*b1cdbd2cSJim Jagielski             {
846*b1cdbd2cSJim Jagielski                 Reference<XPropertySet> xNumRulePropSet(
847*b1cdbd2cSJim Jagielski                     xCNSupplier->getChapterNumberingRules(), UNO_QUERY );
848*b1cdbd2cSJim Jagielski                 if (xNumRulePropSet.is())
849*b1cdbd2cSJim Jagielski                 {
850*b1cdbd2cSJim Jagielski                     const OUString sName( RTL_CONSTASCII_USTRINGPARAM("Name") );
851*b1cdbd2cSJim Jagielski                     xNumRulePropSet->getPropertyValue( sName ) >>= sOutlineStyleName;
852*b1cdbd2cSJim Jagielski                 }
853*b1cdbd2cSJim Jagielski             }
854*b1cdbd2cSJim Jagielski             const SvtSaveOptions::ODFDefaultVersion nODFVersion =
855*b1cdbd2cSJim Jagielski                                                 GetExport().getDefaultVersion();
856*b1cdbd2cSJim Jagielski             if ( ( nODFVersion == SvtSaveOptions::ODFVER_010 ||
857*b1cdbd2cSJim Jagielski                    nODFVersion == SvtSaveOptions::ODFVER_011 ) &&
858*b1cdbd2cSJim Jagielski                  GetExport().writeOutlineStyleAsNormalListStyle() )
859*b1cdbd2cSJim Jagielski             {
860*b1cdbd2cSJim Jagielski                 exportNumberingRule( sOutlineStyleName, xNumRule );
861*b1cdbd2cSJim Jagielski             }
862*b1cdbd2cSJim Jagielski             else
863*b1cdbd2cSJim Jagielski             {
864*b1cdbd2cSJim Jagielski                 if ( nODFVersion != SvtSaveOptions::ODFVER_010 &&
865*b1cdbd2cSJim Jagielski                      nODFVersion != SvtSaveOptions::ODFVER_011 )
866*b1cdbd2cSJim Jagielski                 {
867*b1cdbd2cSJim Jagielski                     // style:name="..."
868*b1cdbd2cSJim Jagielski                     GetExport().CheckAttrList();
869*b1cdbd2cSJim Jagielski                     if ( sOutlineStyleName.getLength() > 0 )
870*b1cdbd2cSJim Jagielski                      {
871*b1cdbd2cSJim Jagielski                         sal_Bool bEncoded = sal_False;
872*b1cdbd2cSJim Jagielski                         GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_NAME,
873*b1cdbd2cSJim Jagielski                                         GetExport().EncodeStyleName( sOutlineStyleName,
874*b1cdbd2cSJim Jagielski                                                                      &bEncoded ) );
875*b1cdbd2cSJim Jagielski                         if( bEncoded )
876*b1cdbd2cSJim Jagielski                             GetExport().AddAttribute( XML_NAMESPACE_STYLE,
877*b1cdbd2cSJim Jagielski                                                       XML_DISPLAY_NAME,
878*b1cdbd2cSJim Jagielski                                                       sOutlineStyleName );
879*b1cdbd2cSJim Jagielski                     }
880*b1cdbd2cSJim Jagielski                 }
881*b1cdbd2cSJim Jagielski                 SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_TEXT,
882*b1cdbd2cSJim Jagielski                                           XML_OUTLINE_STYLE, sal_True, sal_True );
883*b1cdbd2cSJim Jagielski                 exportLevelStyles( xNumRule, sal_True );
884*b1cdbd2cSJim Jagielski             }
885*b1cdbd2cSJim Jagielski 		}
886*b1cdbd2cSJim Jagielski 	}
887*b1cdbd2cSJim Jagielski }
888*b1cdbd2cSJim Jagielski 
exportStyles(sal_Bool bUsed,XMLTextListAutoStylePool * pPool,sal_Bool bExportChapterNumbering)889*b1cdbd2cSJim Jagielski void SvxXMLNumRuleExport::exportStyles( sal_Bool bUsed,
890*b1cdbd2cSJim Jagielski 									 	XMLTextListAutoStylePool *pPool,
891*b1cdbd2cSJim Jagielski 									 	sal_Bool bExportChapterNumbering )
892*b1cdbd2cSJim Jagielski {
893*b1cdbd2cSJim Jagielski 	if( bExportChapterNumbering )
894*b1cdbd2cSJim Jagielski 		exportOutline();
895*b1cdbd2cSJim Jagielski 
896*b1cdbd2cSJim Jagielski 	Reference< XStyleFamiliesSupplier > xFamiliesSupp( GetExport().GetModel(), UNO_QUERY );
897*b1cdbd2cSJim Jagielski 	DBG_ASSERT( xFamiliesSupp.is(), "No XStyleFamiliesSupplier from XModel for export!" );
898*b1cdbd2cSJim Jagielski 	if( xFamiliesSupp.is() )
899*b1cdbd2cSJim Jagielski 	{
900*b1cdbd2cSJim Jagielski 		Reference< XNameAccess > xFamilies( xFamiliesSupp->getStyleFamilies() );
901*b1cdbd2cSJim Jagielski 		DBG_ASSERT( xFamiliesSupp.is(), "getStyleFamilies() from XModel failed for export!" );
902*b1cdbd2cSJim Jagielski 
903*b1cdbd2cSJim Jagielski 		if( xFamilies.is() )
904*b1cdbd2cSJim Jagielski 		{
905*b1cdbd2cSJim Jagielski 			const OUString aNumberStyleName( RTL_CONSTASCII_USTRINGPARAM( "NumberingStyles" ));
906*b1cdbd2cSJim Jagielski 
907*b1cdbd2cSJim Jagielski 			Reference< XIndexAccess > xStyles;
908*b1cdbd2cSJim Jagielski 			if( xFamilies->hasByName( aNumberStyleName ) )
909*b1cdbd2cSJim Jagielski 			{
910*b1cdbd2cSJim Jagielski 				xFamilies->getByName( aNumberStyleName ) >>= xStyles;
911*b1cdbd2cSJim Jagielski 
912*b1cdbd2cSJim Jagielski 				DBG_ASSERT( xStyles.is(), "Style not found for export!" );
913*b1cdbd2cSJim Jagielski 
914*b1cdbd2cSJim Jagielski 				if( xStyles.is() )
915*b1cdbd2cSJim Jagielski 				{
916*b1cdbd2cSJim Jagielski 					const sal_Int32 nStyles = xStyles->getCount();
917*b1cdbd2cSJim Jagielski 
918*b1cdbd2cSJim Jagielski 					for( sal_Int32 i=0; i < nStyles; i++ )
919*b1cdbd2cSJim Jagielski 					{
920*b1cdbd2cSJim Jagielski 						Reference< XStyle > xStyle;
921*b1cdbd2cSJim Jagielski 						xStyles->getByIndex( i ) >>= xStyle;
922*b1cdbd2cSJim Jagielski 
923*b1cdbd2cSJim Jagielski 						if( !bUsed || xStyle->isInUse() )
924*b1cdbd2cSJim Jagielski 						{
925*b1cdbd2cSJim Jagielski 							exportStyle( xStyle );
926*b1cdbd2cSJim Jagielski 							if( pPool )
927*b1cdbd2cSJim Jagielski 								pPool->RegisterName( xStyle->getName() );
928*b1cdbd2cSJim Jagielski 						}
929*b1cdbd2cSJim Jagielski 					}
930*b1cdbd2cSJim Jagielski 				}
931*b1cdbd2cSJim Jagielski 			}
932*b1cdbd2cSJim Jagielski 		}
933*b1cdbd2cSJim Jagielski 	}
934*b1cdbd2cSJim Jagielski }
935*b1cdbd2cSJim Jagielski 
GetOutlineStyles(XMLStringVector & rStyleNames,const::com::sun::star::uno::Reference<::com::sun::star::frame::XModel> & rModel)936*b1cdbd2cSJim Jagielski sal_Bool SvxXMLNumRuleExport::GetOutlineStyles( XMLStringVector& rStyleNames,
937*b1cdbd2cSJim Jagielski    const ::com::sun::star::uno::Reference<
938*b1cdbd2cSJim Jagielski    				::com::sun::star::frame::XModel > & rModel	)
939*b1cdbd2cSJim Jagielski {
940*b1cdbd2cSJim Jagielski 	Reference< XChapterNumberingSupplier > xCNSupplier( rModel,
941*b1cdbd2cSJim Jagielski 														UNO_QUERY );
942*b1cdbd2cSJim Jagielski 	sal_Int32 nLevels = 0;
943*b1cdbd2cSJim Jagielski 	Reference< XIndexReplace > xNumRule;
944*b1cdbd2cSJim Jagielski 	if( xCNSupplier.is() )
945*b1cdbd2cSJim Jagielski 	{
946*b1cdbd2cSJim Jagielski 		xNumRule = xCNSupplier->getChapterNumberingRules();
947*b1cdbd2cSJim Jagielski 		if( xNumRule.is() )
948*b1cdbd2cSJim Jagielski 			nLevels = xNumRule->getCount();
949*b1cdbd2cSJim Jagielski 	}
950*b1cdbd2cSJim Jagielski 
951*b1cdbd2cSJim Jagielski 	rStyleNames.resize( nLevels );
952*b1cdbd2cSJim Jagielski 	for( sal_Int32 i=0; i<nLevels; i++ )
953*b1cdbd2cSJim Jagielski 	{
954*b1cdbd2cSJim Jagielski 		uno::Any aEntry( xNumRule->getByIndex( i ) );
955*b1cdbd2cSJim Jagielski 		uno::Sequence<beans::PropertyValue> aSeq;
956*b1cdbd2cSJim Jagielski 		if( aEntry >>= aSeq )
957*b1cdbd2cSJim Jagielski 		{
958*b1cdbd2cSJim Jagielski             const sal_Int32 nCount = aSeq.getLength();
959*b1cdbd2cSJim Jagielski 			const beans::PropertyValue* pPropArray = aSeq.getConstArray();
960*b1cdbd2cSJim Jagielski 			for( sal_Int32 j=0; j<nCount; j++ )
961*b1cdbd2cSJim Jagielski 			{
962*b1cdbd2cSJim Jagielski 				const beans::PropertyValue& rProp = pPropArray[j];
963*b1cdbd2cSJim Jagielski 
964*b1cdbd2cSJim Jagielski 				if( rProp.Name.equalsAsciiL(
965*b1cdbd2cSJim Jagielski 							XML_UNO_NAME_NRULE_HEADING_STYLE_NAME,
966*b1cdbd2cSJim Jagielski 							sizeof(XML_UNO_NAME_NRULE_HEADING_STYLE_NAME)-1 ) )
967*b1cdbd2cSJim Jagielski 				{
968*b1cdbd2cSJim Jagielski 					rProp.Value >>= rStyleNames[i];
969*b1cdbd2cSJim Jagielski 					break;
970*b1cdbd2cSJim Jagielski 				}
971*b1cdbd2cSJim Jagielski 			}
972*b1cdbd2cSJim Jagielski 		}
973*b1cdbd2cSJim Jagielski 	}
974*b1cdbd2cSJim Jagielski 
975*b1cdbd2cSJim Jagielski 	return nLevels != 0;
976*b1cdbd2cSJim Jagielski }
977