xref: /trunk/main/xmloff/source/style/xmlnumi.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
163bba73cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
363bba73cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
463bba73cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
563bba73cSAndrew Rist  * distributed with this work for additional information
663bba73cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
763bba73cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
863bba73cSAndrew Rist  * "License"); you may not use this file except in compliance
963bba73cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
1163bba73cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
1363bba73cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
1463bba73cSAndrew Rist  * software distributed under the License is distributed on an
1563bba73cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1663bba73cSAndrew Rist  * KIND, either express or implied.  See the License for the
1763bba73cSAndrew Rist  * specific language governing permissions and limitations
1863bba73cSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
2063bba73cSAndrew Rist  *************************************************************/
2163bba73cSAndrew Rist 
2263bba73cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
28cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
29cdf0e10cSrcweir #include <com/sun/star/awt/Size.hpp>
30cdf0e10cSrcweir #include <com/sun/star/awt/FontDescriptor.hpp>
31*6248bb99SArrigo Marchiori #include <com/sun/star/document/XLinkAuthorizer.hpp>
32cdf0e10cSrcweir #include <com/sun/star/text/HoriOrientation.hpp>
33cdf0e10cSrcweir #include <com/sun/star/text/VertOrientation.hpp>
34cdf0e10cSrcweir // --> OD 2008-01-16 #newlistlevelattrs#
35cdf0e10cSrcweir #include <com/sun/star/text/PositionAndSpaceMode.hpp>
36cdf0e10cSrcweir #include <com/sun/star/text/LabelFollow.hpp>
37cdf0e10cSrcweir // <--
38cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp>
39cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
40cdf0e10cSrcweir #include <com/sun/star/style/XStyle.hpp>
41cdf0e10cSrcweir #include <com/sun/star/io/XOutputStream.hpp>
42cdf0e10cSrcweir 
43cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
44cdf0e10cSrcweir 
45cdf0e10cSrcweir #include <tools/urlobj.hxx>
46cdf0e10cSrcweir #include <tools/debug.hxx>
47cdf0e10cSrcweir #include <tools/fontenum.hxx>
48cdf0e10cSrcweir 
49cdf0e10cSrcweir #include <xmloff/xmltkmap.hxx>
50cdf0e10cSrcweir #include <xmloff/nmspmap.hxx>
51cdf0e10cSrcweir #include "xmloff/xmlnmspe.hxx"
52cdf0e10cSrcweir #include <xmloff/xmlimp.hxx>
53cdf0e10cSrcweir #include <xmloff/XMLBase64ImportContext.hxx>
54cdf0e10cSrcweir #include <xmloff/xmltoken.hxx>
55cdf0e10cSrcweir 
56cdf0e10cSrcweir #include <xmloff/i18nmap.hxx>
57cdf0e10cSrcweir #include <xmloff/xmluconv.hxx>
58cdf0e10cSrcweir #include "fonthdl.hxx"
59cdf0e10cSrcweir #include <xmloff/XMLFontStylesContext.hxx>
60cdf0e10cSrcweir #include <xmloff/families.hxx>
61cdf0e10cSrcweir #include <xmloff/maptype.hxx>
62cdf0e10cSrcweir 
63cdf0e10cSrcweir #include <xmloff/xmlnumi.hxx>
64cdf0e10cSrcweir 
65cdf0e10cSrcweir #define _SVSTDARR_USHORTS
66cdf0e10cSrcweir #include <svl/svstdarr.hxx>
67cdf0e10cSrcweir 
68cdf0e10cSrcweir 
69cdf0e10cSrcweir using ::rtl::OUString;
70cdf0e10cSrcweir using ::rtl::OUStringBuffer;
71cdf0e10cSrcweir 
72cdf0e10cSrcweir using namespace ::com::sun::star;
73cdf0e10cSrcweir using namespace ::com::sun::star::uno;
74cdf0e10cSrcweir using namespace ::com::sun::star::style;
75cdf0e10cSrcweir using namespace ::com::sun::star::text;
76cdf0e10cSrcweir using namespace ::com::sun::star::beans;
77cdf0e10cSrcweir using namespace ::com::sun::star::container;
78cdf0e10cSrcweir using namespace ::com::sun::star::lang;
79cdf0e10cSrcweir using namespace ::com::sun::star::frame;
80cdf0e10cSrcweir using namespace ::xmloff::token;
81cdf0e10cSrcweir using namespace ::com::sun::star::io;
82cdf0e10cSrcweir 
83cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_SYMBOL_TEXT_DISTANCE[] =
84cdf0e10cSrcweir         "SymbolTextDistance";
85cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_PARENT_NUMBERING[] =
86cdf0e10cSrcweir         "ParentNumbering";
87cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_CHAR_STYLE_NAME[] =
88cdf0e10cSrcweir         "CharStyleName";
89cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_BULLET_CHAR[] ="BulletChar";
90cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_BULLET_RELSIZE[] = "BulletRelSize";
91cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_GRAPHIC_SIZE[] =
92cdf0e10cSrcweir         "GraphicSize";
93cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_VERT_ORIENT[] ="VertOrient";
94cdf0e10cSrcweir 
95cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_NUMBERINGTYPE[] = "NumberingType";
96cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_PREFIX[] = "Prefix";
97cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_SUFFIX[] = "Suffix";
98cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_ADJUST[] = "Adjust";
99cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_LEFT_MARGIN[] = "LeftMargin";
100cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_FIRST_LINE_OFFSET[] =
101cdf0e10cSrcweir     "FirstLineOffset";
102cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_BULLET_FONT[] = "BulletFont";
103cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_GRAPHICURL[] = "GraphicURL";
104cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_START_WITH[] = "StartWith";
105cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_BULLET_COLOR[] = "BulletColor";
106cdf0e10cSrcweir // --> OD 2008-01-15 #newlistlevelattrs#
107cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_POSITION_AND_SPACE_MODE[] = "PositionAndSpaceMode";
108cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_LABEL_FOLLOWED_BY[] = "LabelFollowedBy";
109cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_LISTTAB_STOP_POSITION[] = "ListtabStopPosition";
110cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_FIRST_LINE_INDENT[] = "FirstLineIndent";
111cdf0e10cSrcweir static sal_Char __READONLY_DATA XML_UNO_NAME_NRULE_INDENT_AT[] = "IndentAt";
112cdf0e10cSrcweir // <--
113cdf0e10cSrcweir 
114cdf0e10cSrcweir // ---------------------------------------------------------------------
115cdf0e10cSrcweir 
116cdf0e10cSrcweir class SvxXMLListLevelStyleContext_Impl;
117cdf0e10cSrcweir 
118cdf0e10cSrcweir class SvxXMLListLevelStyleAttrContext_Impl : public SvXMLImportContext
119cdf0e10cSrcweir {
120cdf0e10cSrcweir     SvxXMLListLevelStyleContext_Impl&   rListLevel;
121cdf0e10cSrcweir 
122cdf0e10cSrcweir public:
123cdf0e10cSrcweir 
124cdf0e10cSrcweir     SvxXMLListLevelStyleAttrContext_Impl(
125cdf0e10cSrcweir             SvXMLImport& rImport, sal_uInt16 nPrfx,
126cdf0e10cSrcweir             const OUString& rLName,
127cdf0e10cSrcweir             const Reference< xml::sax::XAttributeList >& xAttrList,
128cdf0e10cSrcweir             SvxXMLListLevelStyleContext_Impl& rLLevel   );
129cdf0e10cSrcweir     virtual ~SvxXMLListLevelStyleAttrContext_Impl();
130cdf0e10cSrcweir 
131cdf0e10cSrcweir     // --> OD 2008-01-16 #newlistlevelattrs#
132cdf0e10cSrcweir     virtual SvXMLImportContext *CreateChildContext(
133cdf0e10cSrcweir             sal_uInt16 nPrefix, const OUString& rLocalName,
134cdf0e10cSrcweir             const Reference< xml::sax::XAttributeList > & xAttrList );
135cdf0e10cSrcweir     // <--
136cdf0e10cSrcweir };
137cdf0e10cSrcweir 
138cdf0e10cSrcweir // ---------------------------------------------------------------------
139cdf0e10cSrcweir 
140cdf0e10cSrcweir // --> OD 2008-01-16 #newlistlevelattrs#
141cdf0e10cSrcweir class SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl : public SvXMLImportContext
142cdf0e10cSrcweir {
143cdf0e10cSrcweir     SvxXMLListLevelStyleContext_Impl&   rListLevel;
144cdf0e10cSrcweir 
145cdf0e10cSrcweir public:
146cdf0e10cSrcweir 
147cdf0e10cSrcweir     SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl(
148cdf0e10cSrcweir             SvXMLImport& rImport, sal_uInt16 nPrfx,
149cdf0e10cSrcweir             const OUString& rLName,
150cdf0e10cSrcweir             const Reference< xml::sax::XAttributeList >& xAttrList,
151cdf0e10cSrcweir             SvxXMLListLevelStyleContext_Impl& rLLevel   );
152cdf0e10cSrcweir     virtual ~SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl();
153cdf0e10cSrcweir };
154cdf0e10cSrcweir // <--
155cdf0e10cSrcweir 
156cdf0e10cSrcweir // ---------------------------------------------------------------------
157cdf0e10cSrcweir 
158cdf0e10cSrcweir enum SvxXMLTextListLevelStyleAttrTokens
159cdf0e10cSrcweir {
160cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_LEVEL,
161cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME,
162cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR,
163cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_HREF,
164cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_TYPE,
165cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_SHOW,
166cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_ACTUATE,
167cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT,
168cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX,
169cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX,
170cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC,
171cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_START_VALUE,
172cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS,
173cdf0e10cSrcweir 
174cdf0e10cSrcweir     XML_TOK_TEXT_LEVEL_ATTR_END=XML_TOK_UNKNOWN
175cdf0e10cSrcweir };
176cdf0e10cSrcweir 
lcl_getLevelAttrTokenMap()177cdf0e10cSrcweir const SvXMLTokenMapEntry* lcl_getLevelAttrTokenMap()
178cdf0e10cSrcweir {
179cdf0e10cSrcweir     static __FAR_DATA SvXMLTokenMapEntry aLevelAttrTokenMap[] =
180cdf0e10cSrcweir     {
181cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_LEVEL, XML_TOK_TEXT_LEVEL_ATTR_LEVEL },
182cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_STYLE_NAME, XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME },
183cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_BULLET_CHAR, XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR },
184cdf0e10cSrcweir         { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_TEXT_LEVEL_ATTR_HREF },
185cdf0e10cSrcweir         { XML_NAMESPACE_XLINK, XML_TYPE, XML_TOK_TEXT_LEVEL_ATTR_TYPE },
186cdf0e10cSrcweir         { XML_NAMESPACE_XLINK, XML_SHOW, XML_TOK_TEXT_LEVEL_ATTR_SHOW },
187cdf0e10cSrcweir         { XML_NAMESPACE_XLINK, XML_ACTUATE, XML_TOK_TEXT_LEVEL_ATTR_ACTUATE },
188cdf0e10cSrcweir 
189cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_NUM_FORMAT, XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT },
190cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_NUM_PREFIX, XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX },
191cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_NUM_SUFFIX, XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX },
192cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_NUM_LETTER_SYNC, XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC },
193cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_START_VALUE, XML_TOK_TEXT_LEVEL_ATTR_START_VALUE },
194cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_DISPLAY_LEVELS, XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS },
195cdf0e10cSrcweir 
196cdf0e10cSrcweir         XML_TOKEN_MAP_END
197cdf0e10cSrcweir     };
198cdf0e10cSrcweir     return aLevelAttrTokenMap;
199cdf0e10cSrcweir }
200cdf0e10cSrcweir 
201cdf0e10cSrcweir class SvxXMLListLevelStyleContext_Impl : public SvXMLImportContext
202cdf0e10cSrcweir {
203cdf0e10cSrcweir     friend class SvxXMLListLevelStyleAttrContext_Impl;
204cdf0e10cSrcweir     const OUString      sStarBats;
205cdf0e10cSrcweir     const OUString      sStarMath;
206cdf0e10cSrcweir 
207cdf0e10cSrcweir     OUString            sPrefix;
208cdf0e10cSrcweir     OUString            sSuffix;
209cdf0e10cSrcweir     OUString            sTextStyleName;
210cdf0e10cSrcweir     OUString            sNumFormat;
211cdf0e10cSrcweir     OUString            sNumLetterSync;
212cdf0e10cSrcweir     OUString            sBulletFontName;
213cdf0e10cSrcweir     OUString            sBulletFontStyleName;
214cdf0e10cSrcweir     OUString            sImageURL;
215cdf0e10cSrcweir 
216cdf0e10cSrcweir     Reference < XOutputStream > xBase64Stream;
217cdf0e10cSrcweir 
218cdf0e10cSrcweir     sal_Int32           nLevel;
219cdf0e10cSrcweir     sal_Int32           nSpaceBefore;
220cdf0e10cSrcweir     sal_Int32           nMinLabelWidth;
221cdf0e10cSrcweir     sal_Int32           nMinLabelDist;
222cdf0e10cSrcweir     sal_Int32           nImageWidth;
223cdf0e10cSrcweir     sal_Int32           nImageHeight;
224cdf0e10cSrcweir     sal_Int16           nNumStartValue;
225cdf0e10cSrcweir     sal_Int16           nNumDisplayLevels;
226cdf0e10cSrcweir 
227cdf0e10cSrcweir     sal_Int16           eAdjust;
228cdf0e10cSrcweir     sal_Int16           eBulletFontFamily;
229cdf0e10cSrcweir     sal_Int16           eBulletFontPitch;
230cdf0e10cSrcweir     rtl_TextEncoding    eBulletFontEncoding;
231cdf0e10cSrcweir     sal_Int16           eImageVertOrient;
232cdf0e10cSrcweir 
233cdf0e10cSrcweir     sal_Unicode         cBullet;
234cdf0e10cSrcweir 
235cdf0e10cSrcweir     sal_Int16           nRelSize;
236cdf0e10cSrcweir     Color               aColor;
237cdf0e10cSrcweir 
238cdf0e10cSrcweir     // --> OD 2008-01-16 #newlistlevelattrs#
239cdf0e10cSrcweir     sal_Int16           ePosAndSpaceMode;
240cdf0e10cSrcweir     sal_Int16           eLabelFollowedBy;
241cdf0e10cSrcweir     sal_Int32           nListtabStopPosition;
242cdf0e10cSrcweir     sal_Int32           nFirstLineIndent;
243cdf0e10cSrcweir     sal_Int32           nIndentAt;
244cdf0e10cSrcweir     // <--
245cdf0e10cSrcweir 
246cdf0e10cSrcweir     sal_Bool            bBullet : 1;
247cdf0e10cSrcweir     sal_Bool            bImage : 1;
248cdf0e10cSrcweir     sal_Bool            bNum : 1;
249cdf0e10cSrcweir     sal_Bool            bHasColor : 1;
250cdf0e10cSrcweir 
SetRelSize(sal_Int16 nRel)251cdf0e10cSrcweir     void SetRelSize( sal_Int16 nRel ) { nRelSize = nRel; }
SetColor(sal_Int32 _aColor)252cdf0e10cSrcweir     void SetColor( sal_Int32 _aColor ) { aColor = _aColor; bHasColor = sal_True; }
SetSpaceBefore(sal_Int32 nSet)253cdf0e10cSrcweir     void SetSpaceBefore( sal_Int32 nSet ) { nSpaceBefore = nSet; }
SetMinLabelWidth(sal_Int32 nSet)254cdf0e10cSrcweir     void SetMinLabelWidth( sal_Int32 nSet ) { nMinLabelWidth = nSet; }
SetMinLabelDist(sal_Int32 nSet)255cdf0e10cSrcweir     void SetMinLabelDist( sal_Int32 nSet ) { nMinLabelDist = nSet; }
SetAdjust(sal_Int16 eSet)256cdf0e10cSrcweir     void SetAdjust( sal_Int16 eSet ) { eAdjust = eSet; }
257cdf0e10cSrcweir 
SetBulletFontName(const OUString & rSet)258cdf0e10cSrcweir     void SetBulletFontName( const OUString& rSet ) { sBulletFontName = rSet; }
SetBulletFontStyleName(const OUString & rSet)259cdf0e10cSrcweir     void SetBulletFontStyleName( const OUString& rSet )
260cdf0e10cSrcweir          { sBulletFontStyleName = rSet; }
SetBulletFontFamily(sal_Int16 eSet)261cdf0e10cSrcweir     void SetBulletFontFamily( sal_Int16 eSet ) { eBulletFontFamily = eSet; }
SetBulletFontPitch(sal_Int16 eSet)262cdf0e10cSrcweir     void SetBulletFontPitch( sal_Int16 eSet ) { eBulletFontPitch = eSet; }
SetBulletFontEncoding(rtl_TextEncoding eSet)263cdf0e10cSrcweir     void SetBulletFontEncoding( rtl_TextEncoding eSet )
264cdf0e10cSrcweir          { eBulletFontEncoding = eSet; }
265cdf0e10cSrcweir 
SetImageWidth(sal_Int32 nSet)266cdf0e10cSrcweir     void SetImageWidth( sal_Int32 nSet ) { nImageWidth = nSet; }
SetImageHeight(sal_Int32 nSet)267cdf0e10cSrcweir     void SetImageHeight( sal_Int32 nSet ) { nImageHeight = nSet; }
SetImageVertOrient(sal_Int16 eSet)268cdf0e10cSrcweir     void SetImageVertOrient( sal_Int16 eSet )
269cdf0e10cSrcweir          { eImageVertOrient = eSet; }
270cdf0e10cSrcweir 
271cdf0e10cSrcweir public:
272cdf0e10cSrcweir 
273cdf0e10cSrcweir     SvxXMLListLevelStyleContext_Impl(
274cdf0e10cSrcweir             SvXMLImport& rImport, sal_uInt16 nPrfx,
275cdf0e10cSrcweir             const OUString& rLName,
276cdf0e10cSrcweir             const Reference< xml::sax::XAttributeList > & xAttrList );
277cdf0e10cSrcweir     virtual ~SvxXMLListLevelStyleContext_Impl();
278cdf0e10cSrcweir 
279cdf0e10cSrcweir     virtual SvXMLImportContext *CreateChildContext(
280cdf0e10cSrcweir             sal_uInt16 nPrefix, const OUString& rLocalName,
281cdf0e10cSrcweir             const Reference< xml::sax::XAttributeList > & xAttrList );
282cdf0e10cSrcweir 
GetLevel() const283cdf0e10cSrcweir     sal_Int32 GetLevel() const { return nLevel; }
284cdf0e10cSrcweir     Sequence<beans::PropertyValue> GetProperties(
285cdf0e10cSrcweir             const SvI18NMap *pI18NMap=0 );
286cdf0e10cSrcweir 
287cdf0e10cSrcweir     // --> OD 2008-01-16 #newlistlevelattrs#
SetPosAndSpaceMode(sal_Int16 eValue)288cdf0e10cSrcweir     inline void SetPosAndSpaceMode( sal_Int16 eValue )
289cdf0e10cSrcweir     {
290cdf0e10cSrcweir         ePosAndSpaceMode = eValue;
291cdf0e10cSrcweir     }
SetLabelFollowedBy(sal_Int16 eValue)292cdf0e10cSrcweir     inline void SetLabelFollowedBy( sal_Int16 eValue )
293cdf0e10cSrcweir     {
294cdf0e10cSrcweir         eLabelFollowedBy = eValue;
295cdf0e10cSrcweir     }
SetListtabStopPosition(sal_Int32 nValue)296cdf0e10cSrcweir     inline void SetListtabStopPosition( sal_Int32 nValue )
297cdf0e10cSrcweir     {
298cdf0e10cSrcweir         nListtabStopPosition = nValue;
299cdf0e10cSrcweir     }
SetFirstLineIndent(sal_Int32 nValue)300cdf0e10cSrcweir     inline void SetFirstLineIndent( sal_Int32 nValue )
301cdf0e10cSrcweir     {
302cdf0e10cSrcweir         nFirstLineIndent = nValue;
303cdf0e10cSrcweir     }
SetIndentAt(sal_Int32 nValue)304cdf0e10cSrcweir     inline void SetIndentAt( sal_Int32 nValue )
305cdf0e10cSrcweir     {
306cdf0e10cSrcweir         nIndentAt = nValue;
307cdf0e10cSrcweir     }
308cdf0e10cSrcweir     // <--
309cdf0e10cSrcweir };
310cdf0e10cSrcweir 
SvxXMLListLevelStyleContext_Impl(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const Reference<xml::sax::XAttributeList> & xAttrList)311cdf0e10cSrcweir SvxXMLListLevelStyleContext_Impl::SvxXMLListLevelStyleContext_Impl(
312cdf0e10cSrcweir         SvXMLImport& rImport, sal_uInt16 nPrfx,
313cdf0e10cSrcweir         const OUString& rLName,
314cdf0e10cSrcweir         const Reference< xml::sax::XAttributeList > & xAttrList )
315cdf0e10cSrcweir 
316cdf0e10cSrcweir :   SvXMLImportContext( rImport, nPrfx, rLName )
317cdf0e10cSrcweir ,   sStarBats( RTL_CONSTASCII_USTRINGPARAM( "StarBats" ) )
318cdf0e10cSrcweir ,   sStarMath( RTL_CONSTASCII_USTRINGPARAM( "StarMath" ) )
319cdf0e10cSrcweir ,   sNumFormat( OUString::createFromAscii( "1" ) )
320cdf0e10cSrcweir ,   nLevel( -1L )
321cdf0e10cSrcweir ,   nSpaceBefore( 0L )
322cdf0e10cSrcweir ,   nMinLabelWidth( 0L )
323cdf0e10cSrcweir ,   nMinLabelDist( 0L )
324cdf0e10cSrcweir ,   nImageWidth( 0L )
325cdf0e10cSrcweir ,   nImageHeight( 0L )
326cdf0e10cSrcweir ,   nNumStartValue( 1 )
327cdf0e10cSrcweir ,   nNumDisplayLevels( 1 )
328cdf0e10cSrcweir ,   eAdjust( HoriOrientation::LEFT )
329cdf0e10cSrcweir ,   eBulletFontFamily( FAMILY_DONTKNOW )
330cdf0e10cSrcweir ,   eBulletFontPitch( PITCH_DONTKNOW )
331cdf0e10cSrcweir ,   eBulletFontEncoding( RTL_TEXTENCODING_DONTKNOW )
332cdf0e10cSrcweir ,   eImageVertOrient(0)
333cdf0e10cSrcweir ,   cBullet( 0 )
334cdf0e10cSrcweir ,   nRelSize(0)
335cdf0e10cSrcweir ,   aColor( 0 )
336cdf0e10cSrcweir // --> OD 2008-01-16 #newlistelevelattrs#
337cdf0e10cSrcweir ,   ePosAndSpaceMode( PositionAndSpaceMode::LABEL_WIDTH_AND_POSITION )
338cdf0e10cSrcweir ,   eLabelFollowedBy( LabelFollow::LISTTAB )
339cdf0e10cSrcweir ,   nListtabStopPosition( 0 )
340cdf0e10cSrcweir ,   nFirstLineIndent( 0 )
341cdf0e10cSrcweir ,   nIndentAt( 0 )
342cdf0e10cSrcweir // <--
343cdf0e10cSrcweir ,   bBullet( sal_False )
344cdf0e10cSrcweir ,   bImage( sal_False )
345cdf0e10cSrcweir ,   bNum( sal_False )
346cdf0e10cSrcweir ,   bHasColor( sal_False )
347cdf0e10cSrcweir {
348cdf0e10cSrcweir     if( IsXMLToken( rLName, XML_LIST_LEVEL_STYLE_NUMBER ) ||
349cdf0e10cSrcweir         IsXMLToken( rLName, XML_OUTLINE_LEVEL_STYLE )        )
350cdf0e10cSrcweir         bNum = sal_True;
351cdf0e10cSrcweir     else if( IsXMLToken( rLName, XML_LIST_LEVEL_STYLE_BULLET ) )
352cdf0e10cSrcweir         bBullet = sal_True;
353cdf0e10cSrcweir     else if( IsXMLToken( rLName, XML_LIST_LEVEL_STYLE_IMAGE ) )
354cdf0e10cSrcweir         bImage = sal_True;
355cdf0e10cSrcweir 
356cdf0e10cSrcweir     SvXMLTokenMap aTokenMap( lcl_getLevelAttrTokenMap() );
357cdf0e10cSrcweir     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
358cdf0e10cSrcweir     for( sal_Int16 i=0; i < nAttrCount; i++ )
359cdf0e10cSrcweir     {
360cdf0e10cSrcweir         const OUString& rAttrName = xAttrList->getNameByIndex( i );
361cdf0e10cSrcweir         OUString aLocalName;
362cdf0e10cSrcweir         sal_uInt16 nPrefix =
363cdf0e10cSrcweir             GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
364cdf0e10cSrcweir                                                             &aLocalName );
365cdf0e10cSrcweir         const OUString& rValue = xAttrList->getValueByIndex( i );
366cdf0e10cSrcweir 
367cdf0e10cSrcweir         switch( aTokenMap.Get( nPrefix, aLocalName ) )
368cdf0e10cSrcweir         {
369cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_LEVEL:
370cdf0e10cSrcweir             nLevel = rValue.toInt32();
371cdf0e10cSrcweir             if( nLevel >= 1L )
372cdf0e10cSrcweir                 nLevel--;
373cdf0e10cSrcweir             else
374cdf0e10cSrcweir                 nLevel = 0;
375cdf0e10cSrcweir             break;
376cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME:
377cdf0e10cSrcweir             sTextStyleName = rValue;
378cdf0e10cSrcweir             break;
379cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR:
380cdf0e10cSrcweir             cBullet = rValue[0];
381cdf0e10cSrcweir             break;
382cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_HREF:
383cdf0e10cSrcweir             if( bImage )
384cdf0e10cSrcweir                 sImageURL = rValue;
385cdf0e10cSrcweir             break;
386cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_TYPE:
387cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_SHOW:
388cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_ACTUATE:
389cdf0e10cSrcweir             // This properties will be ignored
390cdf0e10cSrcweir             break;
391cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT:
392cdf0e10cSrcweir             if( bNum )
393cdf0e10cSrcweir                 sNumFormat = rValue;
394cdf0e10cSrcweir             break;
395cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX:
396cdf0e10cSrcweir             sPrefix = rValue;
397cdf0e10cSrcweir             break;
398cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX:
399cdf0e10cSrcweir             sSuffix = rValue;
400cdf0e10cSrcweir             break;
401cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC:
402cdf0e10cSrcweir             if( bNum )
403cdf0e10cSrcweir                 sNumLetterSync = rValue;
404cdf0e10cSrcweir             break;
405cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_START_VALUE:
406cdf0e10cSrcweir             if( bNum )
407cdf0e10cSrcweir             {
408cdf0e10cSrcweir                 sal_Int32 nTmp = rValue.toInt32();
409cdf0e10cSrcweir                 nNumStartValue =
410cdf0e10cSrcweir                     (nTmp < 0L) ? 1 : ( (nTmp>SHRT_MAX) ? SHRT_MAX
411cdf0e10cSrcweir                                                         : (sal_Int16)nTmp );
412cdf0e10cSrcweir             }
413cdf0e10cSrcweir             break;
414cdf0e10cSrcweir         case XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS:
415cdf0e10cSrcweir             if( bNum )
416cdf0e10cSrcweir             {
417cdf0e10cSrcweir                 sal_Int32 nTmp = rValue.toInt32();
418cdf0e10cSrcweir                 nNumDisplayLevels =
419cdf0e10cSrcweir                     (nTmp < 1L) ? 1 : ( (nTmp>SHRT_MAX) ? SHRT_MAX
420cdf0e10cSrcweir                                                         : (sal_Int16)nTmp );
421cdf0e10cSrcweir             }
422cdf0e10cSrcweir             break;
423cdf0e10cSrcweir         }
424cdf0e10cSrcweir     }
425cdf0e10cSrcweir }
426cdf0e10cSrcweir 
~SvxXMLListLevelStyleContext_Impl()427cdf0e10cSrcweir SvxXMLListLevelStyleContext_Impl::~SvxXMLListLevelStyleContext_Impl()
428cdf0e10cSrcweir {
429cdf0e10cSrcweir }
430cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<xml::sax::XAttributeList> & xAttrList)431cdf0e10cSrcweir SvXMLImportContext *SvxXMLListLevelStyleContext_Impl::CreateChildContext(
432cdf0e10cSrcweir         sal_uInt16 nPrefix, const OUString& rLocalName,
433cdf0e10cSrcweir         const Reference< xml::sax::XAttributeList > & xAttrList )
434cdf0e10cSrcweir {
435cdf0e10cSrcweir     SvXMLImportContext *pContext = 0;
436cdf0e10cSrcweir     if( XML_NAMESPACE_STYLE == nPrefix &&
437cdf0e10cSrcweir         ( IsXMLToken( rLocalName, XML_LIST_LEVEL_PROPERTIES ) ||
438cdf0e10cSrcweir           IsXMLToken( rLocalName, XML_TEXT_PROPERTIES ) ) )
439cdf0e10cSrcweir     {
440cdf0e10cSrcweir         pContext = new SvxXMLListLevelStyleAttrContext_Impl( GetImport(),
441cdf0e10cSrcweir                                                              nPrefix,
442cdf0e10cSrcweir                                                              rLocalName,
443cdf0e10cSrcweir                                                              xAttrList,
444cdf0e10cSrcweir                                                              *this );
445cdf0e10cSrcweir     }
446cdf0e10cSrcweir     else if( (XML_NAMESPACE_OFFICE == nPrefix) && xmloff::token::IsXMLToken( rLocalName,
447cdf0e10cSrcweir                                         xmloff::token::XML_BINARY_DATA ) )
448cdf0e10cSrcweir     {
449cdf0e10cSrcweir         if( bImage && !sImageURL.getLength() && !xBase64Stream.is() )
450cdf0e10cSrcweir         {
451cdf0e10cSrcweir             xBase64Stream = GetImport().GetStreamForGraphicObjectURLFromBase64();
452cdf0e10cSrcweir             if( xBase64Stream.is() )
453cdf0e10cSrcweir                 pContext = new XMLBase64ImportContext( GetImport(), nPrefix,
454cdf0e10cSrcweir                                                     rLocalName, xAttrList,
455cdf0e10cSrcweir                                                     xBase64Stream );
456cdf0e10cSrcweir         }
457cdf0e10cSrcweir     }
458cdf0e10cSrcweir     if( !pContext )
459cdf0e10cSrcweir     {
460cdf0e10cSrcweir         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
461cdf0e10cSrcweir     }
462cdf0e10cSrcweir 
463cdf0e10cSrcweir     return pContext;
464cdf0e10cSrcweir }
465cdf0e10cSrcweir 
GetProperties(const SvI18NMap * pI18NMap)466cdf0e10cSrcweir Sequence<beans::PropertyValue> SvxXMLListLevelStyleContext_Impl::GetProperties(
467cdf0e10cSrcweir         const SvI18NMap *pI18NMap )
468cdf0e10cSrcweir {
469d9a877abSHerbert Dürr     sal_Int16 eType = NumberingType::NUMBER_NONE;
470cdf0e10cSrcweir 
471cdf0e10cSrcweir     sal_Int32 nCount = 0;
472cdf0e10cSrcweir     if( bBullet )
473cdf0e10cSrcweir     {
474cdf0e10cSrcweir         eType = NumberingType::CHAR_SPECIAL;
475cdf0e10cSrcweir         nCount = cBullet ? 15 : 14;
476cdf0e10cSrcweir     }
477cdf0e10cSrcweir     if( bImage )
478cdf0e10cSrcweir     {
479cdf0e10cSrcweir         eType = NumberingType::BITMAP;
480cdf0e10cSrcweir         nCount = 15;
481cdf0e10cSrcweir 
482cdf0e10cSrcweir         if( (sImageURL.getLength() > 0L) || xBase64Stream.is() )
483cdf0e10cSrcweir             nCount++;
484cdf0e10cSrcweir     }
485cdf0e10cSrcweir     if( bNum )
486cdf0e10cSrcweir     {
487cdf0e10cSrcweir         eType = NumberingType::ARABIC;
488cdf0e10cSrcweir         GetImport().GetMM100UnitConverter().convertNumFormat(
489cdf0e10cSrcweir                 eType, sNumFormat, sNumLetterSync, sal_True );
490cdf0e10cSrcweir         nCount = 15;
491cdf0e10cSrcweir     }
492cdf0e10cSrcweir 
493cdf0e10cSrcweir     if( ( bBullet || bNum ) && nRelSize )
494cdf0e10cSrcweir         nCount++;
495cdf0e10cSrcweir 
496cdf0e10cSrcweir     if( !bImage && bHasColor )
497cdf0e10cSrcweir     {
498cdf0e10cSrcweir         nCount++;
499cdf0e10cSrcweir     }
500cdf0e10cSrcweir 
501cdf0e10cSrcweir     if (bBullet && sSuffix.getLength())
502cdf0e10cSrcweir     {
503cdf0e10cSrcweir         sal_uInt16 const nVersion(GetImport().getGeneratorVersion());
504cdf0e10cSrcweir         sal_Int32 nUPD;
505cdf0e10cSrcweir         sal_Int32 nBuildId;
506cdf0e10cSrcweir         if (GetImport().getBuildIds(nUPD, nBuildId)
507cdf0e10cSrcweir             && (   (SvXMLImport::OOo_1x == nVersion)
508cdf0e10cSrcweir                 || (SvXMLImport::OOo_2x == nVersion)
509cdf0e10cSrcweir                 || (310 == nUPD) || (320 == nUPD) || (330 == nUPD)
510cdf0e10cSrcweir                 || ((300 == nUPD) && (nBuildId <= 9573))))
511cdf0e10cSrcweir         {
512cdf0e10cSrcweir             // #i93908# OOo < 3.4 wrote a bogus suffix for bullet chars
513cdf0e10cSrcweir             sSuffix = ::rtl::OUString(); // clear it
514cdf0e10cSrcweir         }
515cdf0e10cSrcweir     }
516cdf0e10cSrcweir 
517cdf0e10cSrcweir     Sequence<beans::PropertyValue> aPropSeq( nCount );
518cdf0e10cSrcweir     if( nCount > 0 )
519cdf0e10cSrcweir     {
520cdf0e10cSrcweir         beans::PropertyValue *pProps = aPropSeq.getArray();
521cdf0e10cSrcweir         sal_Int32 nPos = 0;
522cdf0e10cSrcweir         pProps[nPos].Name =
523cdf0e10cSrcweir                 OUString::createFromAscii( XML_UNO_NAME_NRULE_NUMBERINGTYPE );
524cdf0e10cSrcweir         pProps[nPos++].Value <<= (sal_Int16)eType ;
525cdf0e10cSrcweir 
526cdf0e10cSrcweir         pProps[nPos].Name = OUString::createFromAscii( XML_UNO_NAME_NRULE_PREFIX );
527cdf0e10cSrcweir         pProps[nPos++].Value <<= sPrefix;
528cdf0e10cSrcweir 
529cdf0e10cSrcweir         pProps[nPos].Name = OUString::createFromAscii( XML_UNO_NAME_NRULE_SUFFIX );
530cdf0e10cSrcweir         pProps[nPos++].Value <<= sSuffix;
531cdf0e10cSrcweir 
532cdf0e10cSrcweir         pProps[nPos].Name = OUString::createFromAscii( XML_UNO_NAME_NRULE_ADJUST );
533cdf0e10cSrcweir         pProps[nPos++].Value <<= eAdjust;
534cdf0e10cSrcweir 
535cdf0e10cSrcweir         sal_Int32 nLeftMargin = nSpaceBefore + nMinLabelWidth;
536cdf0e10cSrcweir         pProps[nPos].Name =
537cdf0e10cSrcweir             OUString::createFromAscii( XML_UNO_NAME_NRULE_LEFT_MARGIN );
538cdf0e10cSrcweir         pProps[nPos++].Value <<= (sal_Int32)nLeftMargin;
539cdf0e10cSrcweir 
540cdf0e10cSrcweir         sal_Int32 nFirstLineOffset = -nMinLabelWidth;
541cdf0e10cSrcweir 
542cdf0e10cSrcweir         pProps[nPos].Name =
543cdf0e10cSrcweir                 OUString::createFromAscii( XML_UNO_NAME_NRULE_FIRST_LINE_OFFSET );
544cdf0e10cSrcweir         pProps[nPos++].Value <<= (sal_Int32)nFirstLineOffset;
545cdf0e10cSrcweir 
546cdf0e10cSrcweir         pProps[nPos].Name =
547cdf0e10cSrcweir             OUString::createFromAscii(XML_UNO_NAME_NRULE_SYMBOL_TEXT_DISTANCE);
548cdf0e10cSrcweir         pProps[nPos++].Value <<= (sal_Int16)nMinLabelDist;
549cdf0e10cSrcweir 
550cdf0e10cSrcweir         // --> OD 2008-01-16 #newlistlevelattrs#
551cdf0e10cSrcweir         pProps[nPos].Name =
552cdf0e10cSrcweir             OUString::createFromAscii(XML_UNO_NAME_NRULE_POSITION_AND_SPACE_MODE);
553cdf0e10cSrcweir         pProps[nPos++].Value <<= (sal_Int16)ePosAndSpaceMode;
554cdf0e10cSrcweir         pProps[nPos].Name =
555cdf0e10cSrcweir             OUString::createFromAscii(XML_UNO_NAME_NRULE_LABEL_FOLLOWED_BY);
556cdf0e10cSrcweir         pProps[nPos++].Value <<= (sal_Int16)eLabelFollowedBy;
557cdf0e10cSrcweir         pProps[nPos].Name =
558cdf0e10cSrcweir             OUString::createFromAscii(XML_UNO_NAME_NRULE_LISTTAB_STOP_POSITION);
559cdf0e10cSrcweir         pProps[nPos++].Value <<= (sal_Int32)nListtabStopPosition;
560cdf0e10cSrcweir         pProps[nPos].Name =
561cdf0e10cSrcweir             OUString::createFromAscii(XML_UNO_NAME_NRULE_FIRST_LINE_INDENT);
562cdf0e10cSrcweir         pProps[nPos++].Value <<= (sal_Int32)nFirstLineIndent;
563cdf0e10cSrcweir         pProps[nPos].Name =
564cdf0e10cSrcweir             OUString::createFromAscii(XML_UNO_NAME_NRULE_INDENT_AT);
565cdf0e10cSrcweir         pProps[nPos++].Value <<= (sal_Int32)nIndentAt;
566cdf0e10cSrcweir         // <--
567cdf0e10cSrcweir 
568cdf0e10cSrcweir         OUString sDisplayTextStyleName = GetImport().GetStyleDisplayName(
569cdf0e10cSrcweir                                 XML_STYLE_FAMILY_TEXT_TEXT, sTextStyleName  );
570cdf0e10cSrcweir         OUString sStyleName = sDisplayTextStyleName;
571cdf0e10cSrcweir         if( sStyleName.getLength() && pI18NMap )
572cdf0e10cSrcweir             sStyleName = pI18NMap->Get( SFX_STYLE_FAMILY_CHAR, sStyleName );
573cdf0e10cSrcweir         pProps[nPos].Name =
574cdf0e10cSrcweir                 OUString::createFromAscii( XML_UNO_NAME_NRULE_CHAR_STYLE_NAME );
575cdf0e10cSrcweir         pProps[nPos++].Value <<= sDisplayTextStyleName;
576cdf0e10cSrcweir 
577cdf0e10cSrcweir         if( bBullet )
578cdf0e10cSrcweir         {
579cdf0e10cSrcweir             awt::FontDescriptor aFDesc;
580cdf0e10cSrcweir             aFDesc.Name = sBulletFontName;
581cdf0e10cSrcweir             if( sBulletFontName.getLength() )
582cdf0e10cSrcweir             {
583cdf0e10cSrcweir                 aFDesc.StyleName = sBulletFontStyleName;
584cdf0e10cSrcweir                 aFDesc.Family = eBulletFontFamily;
585cdf0e10cSrcweir                 aFDesc.Pitch = eBulletFontPitch;
586cdf0e10cSrcweir                 aFDesc.CharSet = eBulletFontEncoding;
587cdf0e10cSrcweir                 aFDesc.Weight = WEIGHT_DONTKNOW;
588cdf0e10cSrcweir                 //aFDesc.Transparant = sal_True;
589cdf0e10cSrcweir                 sal_Bool bStarSymbol = sal_False;
590cdf0e10cSrcweir                 if( aFDesc.Name.equalsIgnoreAsciiCase( sStarBats ) )
591cdf0e10cSrcweir                 {
592cdf0e10cSrcweir                     cBullet = GetImport().ConvStarBatsCharToStarSymbol( cBullet );
593cdf0e10cSrcweir                     bStarSymbol = sal_True;
594cdf0e10cSrcweir                 }
595cdf0e10cSrcweir                 else if( aFDesc.Name.equalsIgnoreAsciiCase( sStarMath ) )
596cdf0e10cSrcweir                 {
597cdf0e10cSrcweir                     cBullet = GetImport().ConvStarMathCharToStarSymbol( cBullet );
598cdf0e10cSrcweir                     bStarSymbol = sal_True;
599cdf0e10cSrcweir                 }
600cdf0e10cSrcweir                 if( bStarSymbol )
601cdf0e10cSrcweir                     aFDesc.Name =
602cdf0e10cSrcweir                         OUString( RTL_CONSTASCII_USTRINGPARAM("StarSymbol" ) );
603cdf0e10cSrcweir             }
604cdf0e10cSrcweir 
605cdf0e10cSrcweir             if( cBullet )
606cdf0e10cSrcweir             {
607cdf0e10cSrcweir                 OUStringBuffer sTmp(1);
608cdf0e10cSrcweir                 sTmp.append( cBullet );
609cdf0e10cSrcweir                 pProps[nPos].Name =
610cdf0e10cSrcweir                         OUString::createFromAscii( XML_UNO_NAME_NRULE_BULLET_CHAR );
611cdf0e10cSrcweir                 pProps[nPos++].Value <<= sTmp.makeStringAndClear();
612cdf0e10cSrcweir             }
613cdf0e10cSrcweir 
614cdf0e10cSrcweir             pProps[nPos].Name =
615cdf0e10cSrcweir                     OUString::createFromAscii( XML_UNO_NAME_NRULE_BULLET_FONT );
616cdf0e10cSrcweir             pProps[nPos++].Value <<= aFDesc;
617cdf0e10cSrcweir 
618cdf0e10cSrcweir         }
619cdf0e10cSrcweir 
620cdf0e10cSrcweir         if( bImage )
621cdf0e10cSrcweir         {
622cdf0e10cSrcweir             OUString sStr( sImageURL );
623cdf0e10cSrcweir             if( sImageURL.getLength() )
624cdf0e10cSrcweir             {
625cdf0e10cSrcweir                 sStr = GetImport().ResolveGraphicObjectURL( sImageURL,
626cdf0e10cSrcweir                                                                  sal_False );
627cdf0e10cSrcweir             }
628cdf0e10cSrcweir             else if( xBase64Stream.is() )
629cdf0e10cSrcweir             {
630cdf0e10cSrcweir                 sStr = GetImport().ResolveGraphicObjectURLFromBase64( xBase64Stream );
631cdf0e10cSrcweir //              xBase64Stream = 0;
632cdf0e10cSrcweir             }
633cdf0e10cSrcweir 
634cdf0e10cSrcweir             if( sStr.getLength() )
635cdf0e10cSrcweir             {
636cdf0e10cSrcweir                 pProps[nPos].Name =
637cdf0e10cSrcweir                         OUString::createFromAscii( XML_UNO_NAME_NRULE_GRAPHICURL );
638cdf0e10cSrcweir                 pProps[nPos++].Value <<= sStr;
639cdf0e10cSrcweir             }
640cdf0e10cSrcweir 
641cdf0e10cSrcweir             awt::Size aSize( nImageWidth, nImageHeight );
642cdf0e10cSrcweir             pProps[nPos].Name =
643cdf0e10cSrcweir                 OUString::createFromAscii( XML_UNO_NAME_NRULE_GRAPHIC_SIZE );
644cdf0e10cSrcweir             pProps[nPos++].Value <<= aSize;
645cdf0e10cSrcweir 
646cdf0e10cSrcweir             pProps[nPos].Name =
647cdf0e10cSrcweir                 OUString::createFromAscii( XML_UNO_NAME_NRULE_VERT_ORIENT );
648cdf0e10cSrcweir             pProps[nPos++].Value <<= (sal_Int16)eImageVertOrient;
649cdf0e10cSrcweir         }
650cdf0e10cSrcweir 
651cdf0e10cSrcweir         if( bNum )
652cdf0e10cSrcweir         {
653cdf0e10cSrcweir             pProps[nPos].Name =
654cdf0e10cSrcweir                     OUString::createFromAscii( XML_UNO_NAME_NRULE_START_WITH );
655cdf0e10cSrcweir             pProps[nPos++].Value <<= (sal_Int16)nNumStartValue;
656cdf0e10cSrcweir 
657cdf0e10cSrcweir             pProps[nPos].Name =
658cdf0e10cSrcweir                 OUString::createFromAscii(XML_UNO_NAME_NRULE_PARENT_NUMBERING);
659cdf0e10cSrcweir             pProps[nPos++].Value <<= (sal_Int16)nNumDisplayLevels;
660cdf0e10cSrcweir         }
661cdf0e10cSrcweir 
662cdf0e10cSrcweir         if( ( bNum || bBullet ) && nRelSize )
663cdf0e10cSrcweir         {
664cdf0e10cSrcweir             pProps[nPos].Name =
665cdf0e10cSrcweir                 OUString::createFromAscii( XML_UNO_NAME_NRULE_BULLET_RELSIZE );
666cdf0e10cSrcweir             pProps[nPos++].Value <<= nRelSize;
667cdf0e10cSrcweir         }
668cdf0e10cSrcweir 
669cdf0e10cSrcweir         if( !bImage && bHasColor )
670cdf0e10cSrcweir         {
671cdf0e10cSrcweir             pProps[nPos].Name = OUString::createFromAscii( XML_UNO_NAME_NRULE_BULLET_COLOR );
672cdf0e10cSrcweir             pProps[nPos++].Value <<= (sal_Int32)aColor.GetColor();
673cdf0e10cSrcweir         }
674cdf0e10cSrcweir 
675cdf0e10cSrcweir         DBG_ASSERT( nPos == nCount, "array under/overflow" );
676cdf0e10cSrcweir     }
677cdf0e10cSrcweir 
678cdf0e10cSrcweir     return aPropSeq;
679cdf0e10cSrcweir }
680cdf0e10cSrcweir 
681cdf0e10cSrcweir // ---------------------------------------------------------------------
682cdf0e10cSrcweir 
683cdf0e10cSrcweir enum SvxXMLStyleAttributesAttrTokens
684cdf0e10cSrcweir {
685cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE,
686cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH,
687cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST,
688cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN,
689cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME,
690cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY,
691cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC,
692cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME,
693cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH,
694cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET,
695cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS,
696cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL,
697cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH,
698cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT,
699cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR,
700cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR,
701cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE,
702cdf0e10cSrcweir     // --> OD 2008-01-16 #newlistlevelattrs#
703cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE,
704cdf0e10cSrcweir     // <--
705cdf0e10cSrcweir 
706cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_END=XML_TOK_UNKNOWN
707cdf0e10cSrcweir };
lcl_getStyleAttributesAttrTokenMap()708cdf0e10cSrcweir const SvXMLTokenMapEntry* lcl_getStyleAttributesAttrTokenMap()
709cdf0e10cSrcweir {
710cdf0e10cSrcweir     static __FAR_DATA SvXMLTokenMapEntry aStyleAttributesAttrTokenMap[] =
711cdf0e10cSrcweir     {
712cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_SPACE_BEFORE,
713cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE },
714cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_MIN_LABEL_WIDTH,
715cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH },
716cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_MIN_LABEL_DISTANCE,
717cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST },
718cdf0e10cSrcweir         { XML_NAMESPACE_FO, XML_TEXT_ALIGN,
719cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN },
720cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_FONT_NAME,
721cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME },
722cdf0e10cSrcweir         { XML_NAMESPACE_FO, XML_FONT_FAMILY,
723cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY },
724cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_FONT_FAMILY_GENERIC,
725cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC },
726cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_FONT_STYLE_NAME,
727cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME },
728cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_FONT_PITCH,
729cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH },
730cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_FONT_CHARSET,
731cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET },
732cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_VERTICAL_POS,
733cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS },
734cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_VERTICAL_REL,
735cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL },
736cdf0e10cSrcweir         { XML_NAMESPACE_FO, XML_WIDTH,
737cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH },
738cdf0e10cSrcweir         { XML_NAMESPACE_FO, XML_HEIGHT,
739cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT },
740cdf0e10cSrcweir         { XML_NAMESPACE_FO, XML_COLOR,
741cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR },
742cdf0e10cSrcweir         { XML_NAMESPACE_STYLE, XML_USE_WINDOW_FONT_COLOR,
743cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR },
744cdf0e10cSrcweir         { XML_NAMESPACE_FO, XML_FONT_SIZE,
745cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE },
746cdf0e10cSrcweir         // --> OD 2008-01-16 #newlistlevelattrs#
747cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_LIST_LEVEL_POSITION_AND_SPACE_MODE,
748cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE },
749cdf0e10cSrcweir         // <--
750cdf0e10cSrcweir 
751cdf0e10cSrcweir         XML_TOKEN_MAP_END
752cdf0e10cSrcweir     };
753cdf0e10cSrcweir     return aStyleAttributesAttrTokenMap;
754cdf0e10cSrcweir }
SvxXMLListLevelStyleAttrContext_Impl(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const Reference<xml::sax::XAttributeList> & xAttrList,SvxXMLListLevelStyleContext_Impl & rLLevel)755cdf0e10cSrcweir SvxXMLListLevelStyleAttrContext_Impl::SvxXMLListLevelStyleAttrContext_Impl(
756cdf0e10cSrcweir         SvXMLImport& rImport, sal_uInt16 nPrfx,
757cdf0e10cSrcweir         const OUString& rLName,
758cdf0e10cSrcweir         const Reference< xml::sax::XAttributeList > & xAttrList,
759cdf0e10cSrcweir         SvxXMLListLevelStyleContext_Impl& rLLevel ) :
760cdf0e10cSrcweir     SvXMLImportContext( rImport, nPrfx, rLName ),
761cdf0e10cSrcweir     rListLevel( rLLevel )
762cdf0e10cSrcweir {
763cdf0e10cSrcweir     SvXMLTokenMap aTokenMap( lcl_getStyleAttributesAttrTokenMap() );
764cdf0e10cSrcweir     SvXMLUnitConverter& rUnitConv = GetImport().GetMM100UnitConverter();
765cdf0e10cSrcweir 
766cdf0e10cSrcweir     OUString sFontName, sFontFamily, sFontStyleName, sFontFamilyGeneric,
767cdf0e10cSrcweir              sFontPitch, sFontCharset;
768cdf0e10cSrcweir     OUString sVerticalPos, sVerticalRel;
769cdf0e10cSrcweir 
770cdf0e10cSrcweir     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
771cdf0e10cSrcweir     for( sal_Int16 i=0; i < nAttrCount; i++ )
772cdf0e10cSrcweir     {
773cdf0e10cSrcweir         const OUString& rAttrName = xAttrList->getNameByIndex( i );
774cdf0e10cSrcweir         OUString aLocalName;
775cdf0e10cSrcweir         sal_uInt16 nPrefix =
776cdf0e10cSrcweir             GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
777cdf0e10cSrcweir                                                             &aLocalName );
778cdf0e10cSrcweir         const OUString& rValue = xAttrList->getValueByIndex( i );
779cdf0e10cSrcweir 
780cdf0e10cSrcweir         sal_Int32 nVal;
781cdf0e10cSrcweir         switch( aTokenMap.Get( nPrefix, aLocalName ) )
782cdf0e10cSrcweir         {
783cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE:
784cdf0e10cSrcweir             if( rUnitConv.convertMeasure( nVal, rValue, SHRT_MIN, SHRT_MAX ) )
785cdf0e10cSrcweir                 rListLevel.SetSpaceBefore( nVal );
786cdf0e10cSrcweir             break;
787cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH:
788cdf0e10cSrcweir             if( rUnitConv.convertMeasure( nVal, rValue, 0, SHRT_MAX ) )
789cdf0e10cSrcweir                 rListLevel.SetMinLabelWidth( nVal );
790cdf0e10cSrcweir             break;
791cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST:
792cdf0e10cSrcweir             if( rUnitConv.convertMeasure( nVal, rValue, 0, USHRT_MAX ) )
793cdf0e10cSrcweir                 rListLevel.SetMinLabelDist( nVal );
794cdf0e10cSrcweir             break;
795cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN:
796cdf0e10cSrcweir             if( rValue.getLength() )
797cdf0e10cSrcweir             {
798cdf0e10cSrcweir                 sal_Int16 eAdjust = HoriOrientation::LEFT;
799cdf0e10cSrcweir                 if( IsXMLToken( rValue, XML_CENTER ) )
800cdf0e10cSrcweir                     eAdjust = HoriOrientation::CENTER;
801cdf0e10cSrcweir                 else if( IsXMLToken( rValue, XML_END ) )
802cdf0e10cSrcweir                     eAdjust = HoriOrientation::RIGHT;
803cdf0e10cSrcweir                 rListLevel.SetAdjust( eAdjust );
804cdf0e10cSrcweir             }
805cdf0e10cSrcweir             break;
806cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME:
807cdf0e10cSrcweir             sFontName = rValue;
808cdf0e10cSrcweir             break;
809cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY:
810cdf0e10cSrcweir             sFontFamily = rValue;
811cdf0e10cSrcweir             break;
812cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC:
813cdf0e10cSrcweir             sFontFamilyGeneric = rValue;
814cdf0e10cSrcweir             break;
815cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME:
816cdf0e10cSrcweir             sFontStyleName = rValue;
817cdf0e10cSrcweir             break;
818cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH:
819cdf0e10cSrcweir             sFontPitch = rValue;
820cdf0e10cSrcweir             break;
821cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET:
822cdf0e10cSrcweir             sFontCharset = rValue;
823cdf0e10cSrcweir             break;
824cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS:
825cdf0e10cSrcweir             sVerticalPos = rValue;
826cdf0e10cSrcweir             break;
827cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL:
828cdf0e10cSrcweir             sVerticalRel = rValue;
829cdf0e10cSrcweir             break;
830cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH:
831cdf0e10cSrcweir             if( rUnitConv.convertMeasure( nVal, rValue, 0, SAL_MAX_INT32) )
832cdf0e10cSrcweir                 rListLevel.SetImageWidth( nVal );
833cdf0e10cSrcweir             break;
834cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT:
835cdf0e10cSrcweir             if( rUnitConv.convertMeasure( nVal, rValue, 0, SAL_MAX_INT32) )
836cdf0e10cSrcweir                 rListLevel.SetImageHeight( nVal );
837cdf0e10cSrcweir             break;
838cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR:
839cdf0e10cSrcweir             {
840cdf0e10cSrcweir                 Color aColor;
841cdf0e10cSrcweir                 if( SvXMLUnitConverter::convertColor( aColor, rValue ) )
842cdf0e10cSrcweir                     rListLevel.SetColor( (sal_Int32)aColor.GetColor() );
843cdf0e10cSrcweir             }
844cdf0e10cSrcweir             break;
845cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR:
846cdf0e10cSrcweir             {
847cdf0e10cSrcweir                 if( IsXMLToken( rValue, XML_TRUE ) )
848cdf0e10cSrcweir                     rListLevel.SetColor( (sal_Int32)0xffffffff );
849cdf0e10cSrcweir             }
850cdf0e10cSrcweir             break;
851cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE:
852cdf0e10cSrcweir             if(SvXMLUnitConverter::convertPercent( nVal, rValue ) )
853cdf0e10cSrcweir                 rListLevel.SetRelSize( (sal_Int16)nVal );
854cdf0e10cSrcweir             break;
855cdf0e10cSrcweir         // --> OD 2008-01-16 #newlistlevelattrs#
856cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE:
857cdf0e10cSrcweir             {
858cdf0e10cSrcweir                 sal_Int16 ePosAndSpaceMode = PositionAndSpaceMode::LABEL_WIDTH_AND_POSITION;
859cdf0e10cSrcweir                 if( IsXMLToken( rValue, XML_LABEL_ALIGNMENT ) )
860cdf0e10cSrcweir                     ePosAndSpaceMode = PositionAndSpaceMode::LABEL_ALIGNMENT;
861cdf0e10cSrcweir                 rListLevel.SetPosAndSpaceMode( ePosAndSpaceMode );
862cdf0e10cSrcweir             }
863cdf0e10cSrcweir             break;
864cdf0e10cSrcweir         // <--
865cdf0e10cSrcweir         }
866cdf0e10cSrcweir     }
867cdf0e10cSrcweir 
868cdf0e10cSrcweir     if( sFontName.getLength() )
869cdf0e10cSrcweir     {
870cdf0e10cSrcweir         const XMLFontStylesContext *pFontDecls =
871cdf0e10cSrcweir             GetImport().GetTextImport()->GetFontDecls();
872cdf0e10cSrcweir         if( pFontDecls )
873cdf0e10cSrcweir         {
874cdf0e10cSrcweir             ::std::vector < XMLPropertyState > aProps;
875cdf0e10cSrcweir             if( pFontDecls->FillProperties( sFontName, aProps, 0, 1, 2, 3, 4 ) )
876cdf0e10cSrcweir             {
877cdf0e10cSrcweir                 OUString sTmp;
878cdf0e10cSrcweir                 sal_Int16 nTmp = 0;
879cdf0e10cSrcweir                 ::std::vector< XMLPropertyState >::iterator i;
880cdf0e10cSrcweir                 for( i = aProps.begin(); i != aProps.end(); i++ )
881cdf0e10cSrcweir                 {
882cdf0e10cSrcweir                     switch( i->mnIndex )
883cdf0e10cSrcweir                     {
884cdf0e10cSrcweir                     case 0:
885cdf0e10cSrcweir                         i->maValue >>= sTmp;
886cdf0e10cSrcweir                         rListLevel.SetBulletFontName( sTmp);
887cdf0e10cSrcweir                         break;
888cdf0e10cSrcweir                     case 1:
889cdf0e10cSrcweir                         i->maValue >>= sTmp;
890cdf0e10cSrcweir                         rListLevel.SetBulletFontStyleName( sTmp );
891cdf0e10cSrcweir                         break;
892cdf0e10cSrcweir                     case 2:
893cdf0e10cSrcweir                         i->maValue >>= nTmp;
894cdf0e10cSrcweir                         rListLevel.SetBulletFontFamily( nTmp );
895cdf0e10cSrcweir                         break;
896cdf0e10cSrcweir                     case 3:
897cdf0e10cSrcweir                         i->maValue >>= nTmp;
898cdf0e10cSrcweir                         rListLevel.SetBulletFontPitch( nTmp );
899cdf0e10cSrcweir                         break;
900cdf0e10cSrcweir                     case 4:
901cdf0e10cSrcweir                         i->maValue >>= nTmp;
902cdf0e10cSrcweir                         rListLevel.SetBulletFontEncoding( nTmp );
903cdf0e10cSrcweir                         break;
904cdf0e10cSrcweir                     }
905cdf0e10cSrcweir                 }
906cdf0e10cSrcweir             }
907cdf0e10cSrcweir         }
908cdf0e10cSrcweir     }
909cdf0e10cSrcweir     if( sFontFamily.getLength() )
910cdf0e10cSrcweir     {
911cdf0e10cSrcweir         String sEmpty;
912cdf0e10cSrcweir         Any aAny;
913cdf0e10cSrcweir 
914cdf0e10cSrcweir         XMLFontFamilyNamePropHdl aFamilyNameHdl;
915cdf0e10cSrcweir         if( aFamilyNameHdl.importXML( sFontFamily, aAny, rUnitConv ) )
916cdf0e10cSrcweir         {
917cdf0e10cSrcweir             OUString sTmp;
918cdf0e10cSrcweir             aAny >>= sTmp;
919cdf0e10cSrcweir             rListLevel.SetBulletFontName( sTmp);
920cdf0e10cSrcweir         }
921cdf0e10cSrcweir 
922cdf0e10cSrcweir         XMLFontFamilyPropHdl aFamilyHdl;
923cdf0e10cSrcweir         if( sFontFamilyGeneric.getLength() &&
924cdf0e10cSrcweir             aFamilyHdl.importXML( sFontFamilyGeneric, aAny, rUnitConv  ) )
925cdf0e10cSrcweir         {
926cdf0e10cSrcweir             sal_Int16 nTmp = 0;
927cdf0e10cSrcweir             aAny >>= nTmp;
928cdf0e10cSrcweir             rListLevel.SetBulletFontFamily( nTmp );
929cdf0e10cSrcweir         }
930cdf0e10cSrcweir 
931cdf0e10cSrcweir         if( sFontStyleName.getLength() )
932cdf0e10cSrcweir             rListLevel.SetBulletFontStyleName( sFontStyleName );
933cdf0e10cSrcweir 
934cdf0e10cSrcweir         XMLFontPitchPropHdl aPitchHdl;
935cdf0e10cSrcweir         if( sFontPitch.getLength() &&
936cdf0e10cSrcweir             aPitchHdl.importXML( sFontPitch, aAny, rUnitConv  ) )
937cdf0e10cSrcweir         {
938cdf0e10cSrcweir             sal_Int16 nTmp = 0;
939cdf0e10cSrcweir             aAny >>= nTmp;
940cdf0e10cSrcweir             rListLevel.SetBulletFontPitch( nTmp );
941cdf0e10cSrcweir         }
942cdf0e10cSrcweir 
943cdf0e10cSrcweir         XMLFontEncodingPropHdl aEncHdl;
944cdf0e10cSrcweir         if( sFontCharset.getLength() &&
945cdf0e10cSrcweir             aEncHdl.importXML( sFontCharset, aAny, rUnitConv  ) )
946cdf0e10cSrcweir         {
947cdf0e10cSrcweir             sal_Int16 nTmp = 0;
948cdf0e10cSrcweir             aAny >>= nTmp;
949cdf0e10cSrcweir             rListLevel.SetBulletFontEncoding( nTmp );
950cdf0e10cSrcweir         }
951cdf0e10cSrcweir     }
952cdf0e10cSrcweir 
953cdf0e10cSrcweir     sal_Int16 eVertOrient = VertOrientation::LINE_CENTER;
954cdf0e10cSrcweir     if( sVerticalPos.getLength() )
955cdf0e10cSrcweir     {
956cdf0e10cSrcweir         if( IsXMLToken( sVerticalPos, XML_TOP ) )
957cdf0e10cSrcweir             eVertOrient = VertOrientation::LINE_TOP;
958cdf0e10cSrcweir         else if( IsXMLToken( sVerticalPos, XML_BOTTOM ) )
959cdf0e10cSrcweir             eVertOrient = VertOrientation::LINE_BOTTOM;
960cdf0e10cSrcweir     }
961cdf0e10cSrcweir     if( sVerticalRel.getLength() )
962cdf0e10cSrcweir     {
963cdf0e10cSrcweir         if( IsXMLToken( sVerticalRel, XML_BASELINE ) )
964cdf0e10cSrcweir         {
965cdf0e10cSrcweir             // TOP and BOTTOM are exchanged for a baseline relation
966cdf0e10cSrcweir             switch( eVertOrient  )
967cdf0e10cSrcweir             {
968cdf0e10cSrcweir             case VertOrientation::LINE_TOP:
969cdf0e10cSrcweir                 eVertOrient = VertOrientation::BOTTOM;
970cdf0e10cSrcweir                 break;
971cdf0e10cSrcweir             case VertOrientation::LINE_CENTER:
972cdf0e10cSrcweir                 eVertOrient = VertOrientation::CENTER;
973cdf0e10cSrcweir                 break;
974cdf0e10cSrcweir             case VertOrientation::LINE_BOTTOM:
975cdf0e10cSrcweir                 eVertOrient = VertOrientation::TOP;
976cdf0e10cSrcweir                 break;
977cdf0e10cSrcweir             }
978cdf0e10cSrcweir         }
979cdf0e10cSrcweir         else if( IsXMLToken( sVerticalRel, XML_CHAR ) )
980cdf0e10cSrcweir         {
981cdf0e10cSrcweir             switch( eVertOrient  )
982cdf0e10cSrcweir             {
983cdf0e10cSrcweir             case VertOrientation::LINE_TOP:
984cdf0e10cSrcweir                 eVertOrient = VertOrientation::CHAR_TOP;
985cdf0e10cSrcweir                 break;
986cdf0e10cSrcweir             case VertOrientation::LINE_CENTER:
987cdf0e10cSrcweir                 eVertOrient = VertOrientation::CHAR_CENTER;
988cdf0e10cSrcweir                 break;
989cdf0e10cSrcweir             case VertOrientation::LINE_BOTTOM:
990cdf0e10cSrcweir                 eVertOrient = VertOrientation::CHAR_BOTTOM;
991cdf0e10cSrcweir                 break;
992cdf0e10cSrcweir             }
993cdf0e10cSrcweir         }
994cdf0e10cSrcweir     }
995cdf0e10cSrcweir     rListLevel.SetImageVertOrient( eVertOrient );
996cdf0e10cSrcweir }
997cdf0e10cSrcweir 
~SvxXMLListLevelStyleAttrContext_Impl()998cdf0e10cSrcweir SvxXMLListLevelStyleAttrContext_Impl::~SvxXMLListLevelStyleAttrContext_Impl()
999cdf0e10cSrcweir {
1000cdf0e10cSrcweir }
1001cdf0e10cSrcweir 
1002cdf0e10cSrcweir // --> OD 2008-01-16 #newlistlevelattrs#
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<xml::sax::XAttributeList> & xAttrList)1003cdf0e10cSrcweir SvXMLImportContext* SvxXMLListLevelStyleAttrContext_Impl::CreateChildContext(
1004cdf0e10cSrcweir         sal_uInt16 nPrefix, const OUString& rLocalName,
1005cdf0e10cSrcweir         const Reference< xml::sax::XAttributeList > & xAttrList )
1006cdf0e10cSrcweir {
1007cdf0e10cSrcweir     SvXMLImportContext *pContext = 0;
1008cdf0e10cSrcweir     if ( XML_NAMESPACE_STYLE == nPrefix &&
1009cdf0e10cSrcweir          IsXMLToken( rLocalName, XML_LIST_LEVEL_LABEL_ALIGNMENT ) )
1010cdf0e10cSrcweir     {
1011cdf0e10cSrcweir         pContext = new SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl( GetImport(),
1012cdf0e10cSrcweir                                                              nPrefix,
1013cdf0e10cSrcweir                                                              rLocalName,
1014cdf0e10cSrcweir                                                              xAttrList,
1015cdf0e10cSrcweir                                                              rListLevel );
1016cdf0e10cSrcweir     }
1017cdf0e10cSrcweir     if( !pContext )
1018cdf0e10cSrcweir     {
1019cdf0e10cSrcweir         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1020cdf0e10cSrcweir     }
1021cdf0e10cSrcweir 
1022cdf0e10cSrcweir     return pContext;
1023cdf0e10cSrcweir }
1024cdf0e10cSrcweir // <--
1025cdf0e10cSrcweir 
1026cdf0e10cSrcweir // ---------------------------------------------------------------------
1027cdf0e10cSrcweir 
1028cdf0e10cSrcweir // --> OD 2008-01-16 #newlistlevelattrs#
1029cdf0e10cSrcweir enum SvxXMLStyleAttributesLabelAlignmentAttrTokens
1030cdf0e10cSrcweir {
1031cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY,
1032cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION,
1033cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT,
1034cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT,
1035cdf0e10cSrcweir 
1036cdf0e10cSrcweir     XML_TOK_STYLE_ATTRIBUTES_LABEL_ALIGNMENT_ATTR_END=XML_TOK_UNKNOWN
1037cdf0e10cSrcweir };
lcl_getStyleAlignmentAttributesAttrTokenMap()1038cdf0e10cSrcweir const SvXMLTokenMapEntry* lcl_getStyleAlignmentAttributesAttrTokenMap()
1039cdf0e10cSrcweir {
1040cdf0e10cSrcweir     static __FAR_DATA SvXMLTokenMapEntry aStyleAlignmentAttributesAttrTokenMap[] =
1041cdf0e10cSrcweir     {
1042cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_LABEL_FOLLOWED_BY,
1043cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY },
1044cdf0e10cSrcweir         { XML_NAMESPACE_TEXT, XML_LIST_TAB_STOP_POSITION,
1045cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION },
1046cdf0e10cSrcweir         { XML_NAMESPACE_FO, XML_TEXT_INDENT,
1047cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT },
1048cdf0e10cSrcweir         { XML_NAMESPACE_FO, XML_MARGIN_LEFT,
1049cdf0e10cSrcweir                 XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT },
1050cdf0e10cSrcweir 
1051cdf0e10cSrcweir         XML_TOKEN_MAP_END
1052cdf0e10cSrcweir     };
1053cdf0e10cSrcweir     return aStyleAlignmentAttributesAttrTokenMap;
1054cdf0e10cSrcweir }
SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const Reference<xml::sax::XAttributeList> & xAttrList,SvxXMLListLevelStyleContext_Impl & rLLevel)1055cdf0e10cSrcweir SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl::SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl(
1056cdf0e10cSrcweir         SvXMLImport& rImport, sal_uInt16 nPrfx,
1057cdf0e10cSrcweir         const OUString& rLName,
1058cdf0e10cSrcweir         const Reference< xml::sax::XAttributeList > & xAttrList,
1059cdf0e10cSrcweir         SvxXMLListLevelStyleContext_Impl& rLLevel ) :
1060cdf0e10cSrcweir     SvXMLImportContext( rImport, nPrfx, rLName ),
1061cdf0e10cSrcweir     rListLevel( rLLevel )
1062cdf0e10cSrcweir {
1063cdf0e10cSrcweir     SvXMLTokenMap aTokenMap( lcl_getStyleAlignmentAttributesAttrTokenMap() );
1064cdf0e10cSrcweir     SvXMLUnitConverter& rUnitConv = GetImport().GetMM100UnitConverter();
1065cdf0e10cSrcweir 
1066cdf0e10cSrcweir     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
1067cdf0e10cSrcweir     for( sal_Int16 i=0; i < nAttrCount; i++ )
1068cdf0e10cSrcweir     {
1069cdf0e10cSrcweir         const OUString& rAttrName = xAttrList->getNameByIndex( i );
1070cdf0e10cSrcweir         OUString aLocalName;
1071cdf0e10cSrcweir         sal_uInt16 nPrefix =
1072cdf0e10cSrcweir             GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
1073cdf0e10cSrcweir                                                             &aLocalName );
1074cdf0e10cSrcweir         const OUString& rValue = xAttrList->getValueByIndex( i );
1075cdf0e10cSrcweir 
1076cdf0e10cSrcweir         sal_Int32 nVal;
1077cdf0e10cSrcweir         switch( aTokenMap.Get( nPrefix, aLocalName ) )
1078cdf0e10cSrcweir         {
1079cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY:
1080cdf0e10cSrcweir             {
1081cdf0e10cSrcweir                 sal_Int16 eLabelFollowedBy = LabelFollow::LISTTAB;
1082cdf0e10cSrcweir                 if( IsXMLToken( rValue, XML_SPACE ) )
1083cdf0e10cSrcweir                     eLabelFollowedBy = LabelFollow::SPACE;
1084cdf0e10cSrcweir                 else if( IsXMLToken( rValue, XML_NOTHING ) )
1085cdf0e10cSrcweir                     eLabelFollowedBy = LabelFollow::NOTHING;
1086cdf0e10cSrcweir                 rListLevel.SetLabelFollowedBy( eLabelFollowedBy );
1087cdf0e10cSrcweir             }
1088cdf0e10cSrcweir             break;
1089cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION:
1090cdf0e10cSrcweir             if( rUnitConv.convertMeasure( nVal, rValue, 0, SHRT_MAX ) )
1091cdf0e10cSrcweir                 rListLevel.SetListtabStopPosition( nVal );
1092cdf0e10cSrcweir             break;
1093cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT:
1094cdf0e10cSrcweir             if( rUnitConv.convertMeasure( nVal, rValue, SHRT_MIN, SHRT_MAX ) )
1095cdf0e10cSrcweir                 rListLevel.SetFirstLineIndent( nVal );
1096cdf0e10cSrcweir             break;
1097cdf0e10cSrcweir         case XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT:
1098cdf0e10cSrcweir             if( rUnitConv.convertMeasure( nVal, rValue, SHRT_MIN, SHRT_MAX ) )
1099cdf0e10cSrcweir                 rListLevel.SetIndentAt( nVal );
1100cdf0e10cSrcweir             break;
1101cdf0e10cSrcweir         }
1102cdf0e10cSrcweir     }
1103cdf0e10cSrcweir }
1104cdf0e10cSrcweir 
~SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl()1105cdf0e10cSrcweir SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl::~SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl()
1106cdf0e10cSrcweir {
1107cdf0e10cSrcweir }
1108cdf0e10cSrcweir // <--
1109cdf0e10cSrcweir 
1110cdf0e10cSrcweir // ---------------------------------------------------------------------
1111cdf0e10cSrcweir 
1112cdf0e10cSrcweir typedef SvxXMLListLevelStyleContext_Impl *SvxXMLListLevelStyleContext_ImplPtr;
1113cdf0e10cSrcweir SV_DECL_PTRARR( SvxXMLListStyle_Impl, SvxXMLListLevelStyleContext_ImplPtr,
1114cdf0e10cSrcweir                 10, 5 )
1115cdf0e10cSrcweir 
SetAttribute(sal_uInt16 nPrefixKey,const OUString & rLocalName,const OUString & rValue)1116cdf0e10cSrcweir void SvxXMLListStyleContext::SetAttribute( sal_uInt16 nPrefixKey,
1117cdf0e10cSrcweir                                            const OUString& rLocalName,
1118cdf0e10cSrcweir                                            const OUString& rValue )
1119cdf0e10cSrcweir {
1120cdf0e10cSrcweir     if( XML_NAMESPACE_TEXT == nPrefixKey &&
1121cdf0e10cSrcweir         IsXMLToken( rLocalName, XML_CONSECUTIVE_NUMBERING ) )
1122cdf0e10cSrcweir     {
1123cdf0e10cSrcweir         bConsecutive = IsXMLToken( rValue, XML_TRUE );
1124cdf0e10cSrcweir     }
1125cdf0e10cSrcweir     else
1126cdf0e10cSrcweir     {
1127cdf0e10cSrcweir         SvXMLStyleContext::SetAttribute( nPrefixKey, rLocalName, rValue );
1128cdf0e10cSrcweir     }
1129cdf0e10cSrcweir }
1130cdf0e10cSrcweir 
1131cdf0e10cSrcweir 
SvxXMLListStyleContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const Reference<xml::sax::XAttributeList> & xAttrList,sal_Bool bOutl)1132cdf0e10cSrcweir SvxXMLListStyleContext::SvxXMLListStyleContext( SvXMLImport& rImport,
1133cdf0e10cSrcweir         sal_uInt16 nPrfx,
1134cdf0e10cSrcweir         const OUString& rLName,
1135cdf0e10cSrcweir         const Reference< xml::sax::XAttributeList > & xAttrList,
1136cdf0e10cSrcweir         sal_Bool bOutl )
1137cdf0e10cSrcweir :   SvXMLStyleContext( rImport, nPrfx, rLName, xAttrList, bOutl ? XML_STYLE_FAMILY_TEXT_OUTLINE : XML_STYLE_FAMILY_TEXT_LIST )
1138cdf0e10cSrcweir ,   sIsPhysical( RTL_CONSTASCII_USTRINGPARAM( "IsPhysical" ) )
1139cdf0e10cSrcweir ,   sNumberingRules( RTL_CONSTASCII_USTRINGPARAM( "NumberingRules" ) )
1140cdf0e10cSrcweir ,   sName( RTL_CONSTASCII_USTRINGPARAM( "Name" ) )
1141cdf0e10cSrcweir ,   sIsContinuousNumbering( RTL_CONSTASCII_USTRINGPARAM( "IsContinuousNumbering" ) )
1142cdf0e10cSrcweir ,   pLevelStyles( 0 )
1143cdf0e10cSrcweir ,   nLevels( 0 )
1144cdf0e10cSrcweir ,   bConsecutive( sal_False )
1145cdf0e10cSrcweir ,   bOutline( bOutl )
1146cdf0e10cSrcweir {
1147cdf0e10cSrcweir }
1148cdf0e10cSrcweir 
~SvxXMLListStyleContext()1149cdf0e10cSrcweir SvxXMLListStyleContext::~SvxXMLListStyleContext()
1150cdf0e10cSrcweir {
1151cdf0e10cSrcweir     if( pLevelStyles )
1152cdf0e10cSrcweir     {
1153cdf0e10cSrcweir         while( pLevelStyles->Count() )
1154cdf0e10cSrcweir         {
1155cdf0e10cSrcweir             sal_uInt16 n = pLevelStyles->Count() - 1;
1156cdf0e10cSrcweir             SvxXMLListLevelStyleContext_Impl *pStyle = (*pLevelStyles)[n];
1157cdf0e10cSrcweir             pLevelStyles->Remove( n, 1 );
1158cdf0e10cSrcweir             pStyle->ReleaseRef();
1159cdf0e10cSrcweir         }
1160cdf0e10cSrcweir     }
1161cdf0e10cSrcweir 
1162cdf0e10cSrcweir     delete pLevelStyles;
1163cdf0e10cSrcweir }
1164cdf0e10cSrcweir 
1165cdf0e10cSrcweir TYPEINIT1( SvxXMLListStyleContext, SvXMLStyleContext );
1166cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<xml::sax::XAttributeList> & xAttrList)1167cdf0e10cSrcweir SvXMLImportContext *SvxXMLListStyleContext::CreateChildContext(
1168cdf0e10cSrcweir         sal_uInt16 nPrefix,
1169cdf0e10cSrcweir         const OUString& rLocalName,
1170cdf0e10cSrcweir         const Reference< xml::sax::XAttributeList > & xAttrList )
1171cdf0e10cSrcweir {
1172cdf0e10cSrcweir     SvXMLImportContext *pContext = 0;
1173cdf0e10cSrcweir 
1174cdf0e10cSrcweir     if( XML_NAMESPACE_TEXT == nPrefix &&
1175cdf0e10cSrcweir         ( bOutline
1176cdf0e10cSrcweir             ? IsXMLToken( rLocalName, XML_OUTLINE_LEVEL_STYLE )
1177cdf0e10cSrcweir             : ( IsXMLToken( rLocalName, XML_LIST_LEVEL_STYLE_NUMBER ) ||
1178cdf0e10cSrcweir                 IsXMLToken( rLocalName, XML_LIST_LEVEL_STYLE_BULLET ) ||
1179cdf0e10cSrcweir                 IsXMLToken( rLocalName, XML_LIST_LEVEL_STYLE_IMAGE )    ) ) )
1180cdf0e10cSrcweir     {
1181cdf0e10cSrcweir         SvxXMLListLevelStyleContext_Impl *pLevelStyle =
1182cdf0e10cSrcweir             new SvxXMLListLevelStyleContext_Impl( GetImport(), nPrefix,
1183cdf0e10cSrcweir                                                   rLocalName, xAttrList );
1184cdf0e10cSrcweir         if( !pLevelStyles )
1185cdf0e10cSrcweir             pLevelStyles = new SvxXMLListStyle_Impl;
1186cdf0e10cSrcweir         pLevelStyles->Insert( pLevelStyle, pLevelStyles->Count() );
1187cdf0e10cSrcweir         pLevelStyle->AddRef();
1188cdf0e10cSrcweir 
1189cdf0e10cSrcweir         pContext = pLevelStyle;
1190cdf0e10cSrcweir     }
1191cdf0e10cSrcweir     else
1192cdf0e10cSrcweir     {
1193cdf0e10cSrcweir         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1194cdf0e10cSrcweir     }
1195cdf0e10cSrcweir 
1196cdf0e10cSrcweir     return pContext;
1197cdf0e10cSrcweir }
1198cdf0e10cSrcweir 
FillUnoNumRule(const Reference<container::XIndexReplace> & rNumRule,const SvI18NMap * pI18NMap) const1199cdf0e10cSrcweir void SvxXMLListStyleContext::FillUnoNumRule(
1200cdf0e10cSrcweir         const Reference< container::XIndexReplace > & rNumRule,
1201cdf0e10cSrcweir         const SvI18NMap *pI18NMap ) const
1202cdf0e10cSrcweir {
1203cdf0e10cSrcweir     try
1204cdf0e10cSrcweir     {
1205cdf0e10cSrcweir         if( pLevelStyles && rNumRule.is() )
1206cdf0e10cSrcweir         {
1207cdf0e10cSrcweir             sal_uInt16 nCount = pLevelStyles->Count();
1208cdf0e10cSrcweir             sal_Int32 l_nLevels = rNumRule->getCount();
1209cdf0e10cSrcweir             for( sal_uInt16 i=0; i < nCount; i++ )
1210cdf0e10cSrcweir             {
1211cdf0e10cSrcweir                 SvxXMLListLevelStyleContext_Impl *pLevelStyle =
1212cdf0e10cSrcweir                     (*pLevelStyles)[i];
1213cdf0e10cSrcweir                 sal_Int32 nLevel = pLevelStyle->GetLevel();
1214cdf0e10cSrcweir                 if( nLevel >= 0 && nLevel < l_nLevels )
1215cdf0e10cSrcweir                 {
1216cdf0e10cSrcweir                     Sequence<beans::PropertyValue> aProps =
1217cdf0e10cSrcweir                         pLevelStyle->GetProperties( pI18NMap );
1218cdf0e10cSrcweir                     Any aAny;
1219cdf0e10cSrcweir                     aAny <<= aProps;
1220*6248bb99SArrigo Marchiori                     // Validate any URLs
1221*6248bb99SArrigo Marchiori                     for( sal_Int32 j = 0; j < aProps.getLength(); j++ ) {
1222*6248bb99SArrigo Marchiori                         if ( aProps[ j ].Name.equalsAscii( "GraphicURL" ) ) {
1223*6248bb99SArrigo Marchiori                             OUString aURL;
1224*6248bb99SArrigo Marchiori                             aProps[ j ].Value >>= aURL;
1225*6248bb99SArrigo Marchiori                             uno::Reference< com::sun::star::document::XLinkAuthorizer > xLinkAuthorizer( GetImport().GetModel(), uno::UNO_QUERY );
1226*6248bb99SArrigo Marchiori                             if ( xLinkAuthorizer.is() ) {
1227*6248bb99SArrigo Marchiori                                 if ( !xLinkAuthorizer->authorizeLinks( aURL ) )
1228*6248bb99SArrigo Marchiori                                     throw uno::RuntimeException();
1229*6248bb99SArrigo Marchiori                             }
1230*6248bb99SArrigo Marchiori                         }
1231*6248bb99SArrigo Marchiori                     }
1232cdf0e10cSrcweir                     rNumRule->replaceByIndex( nLevel, aAny );
1233cdf0e10cSrcweir                 }
1234cdf0e10cSrcweir             }
1235cdf0e10cSrcweir         }
1236cdf0e10cSrcweir 
1237cdf0e10cSrcweir         Reference < XPropertySet > xPropSet( rNumRule, UNO_QUERY );
1238cdf0e10cSrcweir         Reference< XPropertySetInfo > xPropSetInfo;
1239cdf0e10cSrcweir         if (xPropSet.is())
1240cdf0e10cSrcweir             xPropSetInfo = xPropSet->getPropertySetInfo();
1241cdf0e10cSrcweir         if( xPropSetInfo.is() &&
1242cdf0e10cSrcweir             xPropSetInfo->hasPropertyByName( sIsContinuousNumbering ) )
1243cdf0e10cSrcweir         {
1244cdf0e10cSrcweir             Any aAny;
1245cdf0e10cSrcweir             sal_Bool bTmp = bConsecutive;
1246cdf0e10cSrcweir             aAny.setValue( &bTmp, ::getBooleanCppuType() );
1247cdf0e10cSrcweir             xPropSet->setPropertyValue( sIsContinuousNumbering, aAny );
1248cdf0e10cSrcweir         }
1249cdf0e10cSrcweir     }
1250cdf0e10cSrcweir     catch( Exception& )
1251cdf0e10cSrcweir     {
1252cdf0e10cSrcweir         DBG_ERROR( "SvxXMLListStyleContext::FillUnoNumRule - Exception catched" );
1253cdf0e10cSrcweir     }
1254cdf0e10cSrcweir }
1255cdf0e10cSrcweir 
CreateAndInsertLate(sal_Bool bOverwrite)1256cdf0e10cSrcweir void SvxXMLListStyleContext::CreateAndInsertLate( sal_Bool bOverwrite )
1257cdf0e10cSrcweir {
1258cdf0e10cSrcweir     if( bOutline )
1259cdf0e10cSrcweir     {
1260cdf0e10cSrcweir         if( bOverwrite )
1261cdf0e10cSrcweir         {
1262cdf0e10cSrcweir             const Reference< XIndexReplace >& rNumRule =
1263cdf0e10cSrcweir                 GetImport().GetTextImport()->GetChapterNumbering();
1264cdf0e10cSrcweir             // We don't set xNumberingRules here, to avoid using them
1265cdf0e10cSrcweir             // as numbering rules.
1266cdf0e10cSrcweir             if( rNumRule.is() )
1267cdf0e10cSrcweir                 FillUnoNumRule( rNumRule, 0 );
1268cdf0e10cSrcweir         }
1269cdf0e10cSrcweir     }
1270cdf0e10cSrcweir     else
1271cdf0e10cSrcweir     {
1272cdf0e10cSrcweir         Reference < XStyle > xStyle;
1273cdf0e10cSrcweir         const OUString& rName = GetDisplayName();
1274cdf0e10cSrcweir         if( 0 == rName.getLength() )
1275cdf0e10cSrcweir         {
1276cdf0e10cSrcweir             SetValid( sal_False );
1277cdf0e10cSrcweir             return;
1278cdf0e10cSrcweir         }
1279cdf0e10cSrcweir 
1280cdf0e10cSrcweir         const Reference < XNameContainer >& rNumStyles =
1281cdf0e10cSrcweir                 GetImport().GetTextImport()->GetNumberingStyles();
1282cdf0e10cSrcweir         if( !rNumStyles.is() )
1283cdf0e10cSrcweir         {
1284cdf0e10cSrcweir             SetValid( sal_False );
1285cdf0e10cSrcweir             return;
1286cdf0e10cSrcweir         }
1287cdf0e10cSrcweir 
1288cdf0e10cSrcweir         sal_Bool bNew = sal_False;
1289cdf0e10cSrcweir         if( rNumStyles->hasByName( rName ) )
1290cdf0e10cSrcweir         {
1291cdf0e10cSrcweir             Any aAny = rNumStyles->getByName( rName );
1292cdf0e10cSrcweir             aAny >>= xStyle;
1293cdf0e10cSrcweir         }
1294cdf0e10cSrcweir         else
1295cdf0e10cSrcweir         {
1296cdf0e10cSrcweir             Reference< XMultiServiceFactory > xFactory( GetImport().GetModel(),
1297cdf0e10cSrcweir                                                         UNO_QUERY );
1298cdf0e10cSrcweir             DBG_ASSERT( xFactory.is(), "no factory" );
1299cdf0e10cSrcweir             if( !xFactory.is() )
1300cdf0e10cSrcweir                 return;
1301cdf0e10cSrcweir 
1302cdf0e10cSrcweir             Reference < XInterface > xIfc = xFactory->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.NumberingStyle")) );
1303cdf0e10cSrcweir             if( !xIfc.is() )
1304cdf0e10cSrcweir                 return;
1305cdf0e10cSrcweir             Reference < XStyle > xTmp( xIfc, UNO_QUERY );
1306cdf0e10cSrcweir             xStyle = xTmp;
1307cdf0e10cSrcweir             if( !xStyle.is() )
1308cdf0e10cSrcweir                 return;
1309cdf0e10cSrcweir 
1310cdf0e10cSrcweir             Any aAny;
1311cdf0e10cSrcweir             aAny <<= xStyle;
1312cdf0e10cSrcweir             rNumStyles->insertByName( rName, aAny );
1313cdf0e10cSrcweir             bNew = sal_True;
1314cdf0e10cSrcweir         }
1315cdf0e10cSrcweir 
1316cdf0e10cSrcweir         Reference < XPropertySet > xPropSet( xStyle, UNO_QUERY );
1317cdf0e10cSrcweir         Reference< XPropertySetInfo > xPropSetInfo =
1318cdf0e10cSrcweir             xPropSet->getPropertySetInfo();
1319cdf0e10cSrcweir         if( !bNew && xPropSetInfo->hasPropertyByName( sIsPhysical ) )
1320cdf0e10cSrcweir         {
1321cdf0e10cSrcweir             Any aAny = xPropSet->getPropertyValue( sIsPhysical );
1322cdf0e10cSrcweir             bNew = !*(sal_Bool *)aAny.getValue();
1323cdf0e10cSrcweir         }
1324cdf0e10cSrcweir         if( rName != GetName() )
1325cdf0e10cSrcweir             GetImport().AddStyleDisplayName( XML_STYLE_FAMILY_TEXT_LIST,
1326cdf0e10cSrcweir                                              GetName(), rName );
1327cdf0e10cSrcweir 
1328cdf0e10cSrcweir         Any aAny = xPropSet->getPropertyValue( sNumberingRules );
1329cdf0e10cSrcweir         aAny >>= xNumRules;
1330cdf0e10cSrcweir         nLevels = xNumRules->getCount();
1331cdf0e10cSrcweir         if( bOverwrite || bNew )
1332cdf0e10cSrcweir         {
1333cdf0e10cSrcweir             FillUnoNumRule( xNumRules, 0 );
1334cdf0e10cSrcweir             aAny <<= xNumRules;
1335cdf0e10cSrcweir             xPropSet->setPropertyValue( sNumberingRules, aAny );
1336cdf0e10cSrcweir         }
1337cdf0e10cSrcweir         else
1338cdf0e10cSrcweir         {
1339cdf0e10cSrcweir             SetValid( sal_False );
1340cdf0e10cSrcweir         }
1341cdf0e10cSrcweir 
1342cdf0e10cSrcweir         SetNew( bNew );
1343cdf0e10cSrcweir     }
1344cdf0e10cSrcweir }
1345cdf0e10cSrcweir 
CreateAndInsertAuto() const1346cdf0e10cSrcweir void SvxXMLListStyleContext::CreateAndInsertAuto() const
1347cdf0e10cSrcweir {
1348cdf0e10cSrcweir     DBG_ASSERT( !bOutline, "Outlines cannot be inserted here" );
1349cdf0e10cSrcweir     DBG_ASSERT( !xNumRules.is(), "Numbering Rule is existing already" );
1350cdf0e10cSrcweir 
1351cdf0e10cSrcweir     const OUString& rName = GetName();
1352cdf0e10cSrcweir     if( bOutline || xNumRules.is() || 0 == rName.getLength() )
1353cdf0e10cSrcweir     {
1354cdf0e10cSrcweir         ((SvxXMLListStyleContext *)this)->SetValid( sal_False );
1355cdf0e10cSrcweir         return;
1356cdf0e10cSrcweir     }
1357cdf0e10cSrcweir 
1358cdf0e10cSrcweir     ((SvxXMLListStyleContext *)this)->xNumRules = CreateNumRule(
1359cdf0e10cSrcweir         GetImport().GetModel() );
1360cdf0e10cSrcweir     ((SvxXMLListStyleContext *)this)->nLevels = xNumRules->getCount();
1361cdf0e10cSrcweir 
1362cdf0e10cSrcweir     FillUnoNumRule( xNumRules, 0 );
1363cdf0e10cSrcweir }
1364cdf0e10cSrcweir 
CreateNumRule(const Reference<XModel> & rModel)1365cdf0e10cSrcweir Reference < XIndexReplace > SvxXMLListStyleContext::CreateNumRule(
1366cdf0e10cSrcweir                                 const Reference < XModel > & rModel )
1367cdf0e10cSrcweir {
1368cdf0e10cSrcweir     Reference<XIndexReplace> xNumRule;
1369cdf0e10cSrcweir 
1370cdf0e10cSrcweir     Reference< XMultiServiceFactory > xFactory( rModel, UNO_QUERY );
1371cdf0e10cSrcweir     DBG_ASSERT( xFactory.is(), "no factory" );
1372cdf0e10cSrcweir     if( !xFactory.is() )
1373cdf0e10cSrcweir         return xNumRule;
1374cdf0e10cSrcweir 
1375cdf0e10cSrcweir     Reference < XInterface > xIfc = xFactory->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.text.NumberingRules")) );
1376cdf0e10cSrcweir     if( !xIfc.is() )
1377cdf0e10cSrcweir         return xNumRule;
1378cdf0e10cSrcweir 
1379cdf0e10cSrcweir     xNumRule = Reference<XIndexReplace>( xIfc, UNO_QUERY );
1380cdf0e10cSrcweir     DBG_ASSERT( xNumRule.is(), "go no numbering rule" );
1381cdf0e10cSrcweir 
1382cdf0e10cSrcweir     return xNumRule;
1383cdf0e10cSrcweir }
1384cdf0e10cSrcweir 
SetDefaultStyle(const Reference<XIndexReplace> & rNumRule,sal_Int16 nLevel,sal_Bool bOrdered)1385cdf0e10cSrcweir void SvxXMLListStyleContext::SetDefaultStyle(
1386cdf0e10cSrcweir         const Reference < XIndexReplace > & rNumRule,
1387cdf0e10cSrcweir         sal_Int16 nLevel,
1388cdf0e10cSrcweir         sal_Bool bOrdered )
1389cdf0e10cSrcweir {
1390cdf0e10cSrcweir     Sequence<beans::PropertyValue> aPropSeq( bOrdered ? 1 : 4  );
1391cdf0e10cSrcweir     beans::PropertyValue *pProps = aPropSeq.getArray();
1392cdf0e10cSrcweir 
1393cdf0e10cSrcweir     pProps->Name =
1394cdf0e10cSrcweir                 OUString::createFromAscii( XML_UNO_NAME_NRULE_NUMBERINGTYPE );
1395cdf0e10cSrcweir     (pProps++)->Value <<= (sal_Int16)(bOrdered ? NumberingType::ARABIC
1396cdf0e10cSrcweir                                                : NumberingType::CHAR_SPECIAL );
1397cdf0e10cSrcweir     if( !bOrdered )
1398cdf0e10cSrcweir     {
1399cdf0e10cSrcweir         // TODO: Bullet-Font
1400cdf0e10cSrcweir         //aNumFmt.SetBulletFont( &SwNumRule::GetDefBulletFont() );
1401cdf0e10cSrcweir         awt::FontDescriptor aFDesc;
1402cdf0e10cSrcweir         aFDesc.Name = OUString(
1403cdf0e10cSrcweir #if defined UNX
1404cdf0e10cSrcweir                         RTL_CONSTASCII_USTRINGPARAM( "starbats" )
1405cdf0e10cSrcweir #else
1406cdf0e10cSrcweir                         RTL_CONSTASCII_USTRINGPARAM( "StarBats" )
1407cdf0e10cSrcweir #endif
1408cdf0e10cSrcweir                                         );
1409cdf0e10cSrcweir         aFDesc.Family = FAMILY_DONTKNOW ;
1410cdf0e10cSrcweir         aFDesc.Pitch = PITCH_DONTKNOW ;
1411cdf0e10cSrcweir         aFDesc.CharSet = RTL_TEXTENCODING_SYMBOL ;
1412cdf0e10cSrcweir         aFDesc.Weight = WEIGHT_DONTKNOW;
1413cdf0e10cSrcweir         //aFDesc.Transparant = sal_True;
1414cdf0e10cSrcweir         pProps->Name =
1415cdf0e10cSrcweir                     OUString::createFromAscii( XML_UNO_NAME_NRULE_BULLET_FONT );
1416cdf0e10cSrcweir         (pProps++)->Value <<= aFDesc;
1417cdf0e10cSrcweir 
1418cdf0e10cSrcweir         OUStringBuffer sTmp(1);
1419cdf0e10cSrcweir         sTmp.append( (sal_Unicode)(0xF000 + 149) );
1420cdf0e10cSrcweir         pProps->Name =
1421cdf0e10cSrcweir                     OUString::createFromAscii( XML_UNO_NAME_NRULE_BULLET_CHAR );
1422cdf0e10cSrcweir         (pProps++)->Value <<= sTmp.makeStringAndClear();
1423cdf0e10cSrcweir         pProps->Name =
1424cdf0e10cSrcweir                 OUString::createFromAscii( XML_UNO_NAME_NRULE_CHAR_STYLE_NAME );
1425cdf0e10cSrcweir         (pProps++)->Value <<=
1426cdf0e10cSrcweir             OUString( RTL_CONSTASCII_USTRINGPARAM( "Numbering Symbols" ) );
1427cdf0e10cSrcweir     }
1428cdf0e10cSrcweir 
1429cdf0e10cSrcweir     Any aAny;
1430cdf0e10cSrcweir     aAny <<= aPropSeq;
1431cdf0e10cSrcweir     rNumRule->replaceByIndex( nLevel, aAny );
1432cdf0e10cSrcweir }
1433